aiwg 2026.8.1 → 2026.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agentic/code/addons/aiwg-utils/skills/install-plugin/SKILL.md +9 -1
- package/agentic/code/plugins/utils/skills/install-plugin/SKILL.md +9 -1
- package/dist/src/cli/handlers/install.js +42 -4
- package/dist/src/cli/handlers/marketplace.js +375 -122
- package/dist/src/cli/handlers/subcommands.js +1 -0
- package/dist/src/cli/handlers/use.js +3 -1
- package/dist/src/config/aiwg-config.js +5 -0
- package/dist/src/extensions/project-local-doctor.js +10 -26
- package/dist/src/extensions/project-local-remove.js +42 -5
- package/dist/src/marketplace/exchange.js +602 -0
- package/dist/src/marketplace/provenance-types.js +19 -0
- package/dist/src/marketplace/provenance.js +834 -0
- package/dist/src/packages/adapters/git.js +79 -29
- package/dist/src/packages/package-discovery.js +81 -0
- package/dist/src/packages/package-registry.js +2 -0
- package/dist/src/packages/registry.js +119 -20
- package/docs/addons/aiwg-utils/security/supply-chain/external-npm/README.md +1 -1
- package/docs/addons/aiwg-utils/security/supply-chain/external-npm/modelcontextprotocol__sdk.md +7 -5
- package/docs/agents/cli-reference.md +57 -8
- package/docs/contributing/versioning.md +4 -2
- package/docs/customization/standalone-plugin-repository.md +21 -0
- package/docs/providers/git-native-marketplace.md +199 -0
- package/docs/providers/marketplace-consumer.md +5 -2
- package/docs/providers/marketplace.md +2 -0
- package/docs/releases/_manifest.json +2 -0
- package/docs/releases/v2026.8.2-announcement.md +83 -0
- package/docs/releases/v2026.8.3-announcement.md +66 -0
- package/package.json +3 -2
- package/prebuilt/fortemi-core/framework/aiwg-fortemi-index-v2.json +1 -1
- package/prebuilt/fortemi-core/framework/manifest.json +2 -2
- package/schemas/marketplace/aiwg-marketplace-catalog.v1.schema.json +40 -0
- package/schemas/marketplace/aiwg-marketplace-envelope.v1.schema.json +158 -0
- package/schemas/marketplace/aiwg-marketplace-lock.v1.schema.json +45 -0
- package/schemas/marketplace/aiwg-marketplace-portable-bundle.v1.schema.json +31 -0
- package/schemas/marketplace/aiwg-marketplace-receipt.v1.schema.json +32 -0
- package/schemas/marketplace/aiwg-marketplace-trust.v1.schema.json +32 -0
- package/tools/plugin/plugin-installer-cli.mjs +81 -17
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
namespace: aiwg
|
|
3
3
|
name: install-plugin
|
|
4
4
|
platforms: [all]
|
|
5
|
-
description: Install Claude Code marketplace plugins
|
|
5
|
+
description: Install Claude Code marketplace plugins or route local/Git wrappers through the supported package workflow
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Install Plugin
|
|
@@ -28,6 +28,8 @@ Alternate expressions and non-obvious activations (primary phrases are matched a
|
|
|
28
28
|
| Claude Code plugin | "install claude code plugin utils" | Run `aiwg install-plugin utils@aiwg` |
|
|
29
29
|
| Dry run | "show me what installing sdlc would do" | Run `aiwg install-plugin sdlc@aiwg --dry-run` |
|
|
30
30
|
| Specific version | "install sdlc version 2026.3.0" | Run `aiwg install-plugin sdlc@aiwg@2026.3.0` |
|
|
31
|
+
| Local wrapper | "install this local plugin wrapper" | Run `aiwg install <path> --dry-run`, then `aiwg use <plugin-id>` |
|
|
32
|
+
| Git wrapper | "install this plugin Git URL" | Run `aiwg install <git-url> --dry-run`, then `aiwg use <plugin-id>` |
|
|
31
33
|
|
|
32
34
|
## Behavior
|
|
33
35
|
|
|
@@ -55,6 +57,12 @@ When triggered:
|
|
|
55
57
|
|
|
56
58
|
# Force reinstall even if already installed
|
|
57
59
|
aiwg install-plugin sdlc@aiwg --force
|
|
60
|
+
|
|
61
|
+
# Standalone local/Git wrappers use the package installer, not the legacy
|
|
62
|
+
# manifest-only install-plugin backend.
|
|
63
|
+
aiwg install ./path/to/wrapper --dry-run
|
|
64
|
+
aiwg install https://example.invalid/owner/wrapper.git --dry-run
|
|
65
|
+
aiwg use <plugin-id>
|
|
58
66
|
```
|
|
59
67
|
|
|
60
68
|
3. **Report the result** — name the installed marketplace wrapper and confirm which agents, skills, commands, and rules were deployed and where.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
namespace: aiwg
|
|
3
3
|
name: install-plugin
|
|
4
4
|
platforms: [all]
|
|
5
|
-
description: Install Claude Code marketplace plugins
|
|
5
|
+
description: Install Claude Code marketplace plugins or route local/Git wrappers through the supported package workflow
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Install Plugin
|
|
@@ -28,6 +28,8 @@ Alternate expressions and non-obvious activations (primary phrases are matched a
|
|
|
28
28
|
| Claude Code plugin | "install claude code plugin utils" | Run `aiwg install-plugin utils@aiwg` |
|
|
29
29
|
| Dry run | "show me what installing sdlc would do" | Run `aiwg install-plugin sdlc@aiwg --dry-run` |
|
|
30
30
|
| Specific version | "install sdlc version 2026.3.0" | Run `aiwg install-plugin sdlc@aiwg@2026.3.0` |
|
|
31
|
+
| Local wrapper | "install this local plugin wrapper" | Run `aiwg install <path> --dry-run`, then `aiwg use <plugin-id>` |
|
|
32
|
+
| Git wrapper | "install this plugin Git URL" | Run `aiwg install <git-url> --dry-run`, then `aiwg use <plugin-id>` |
|
|
31
33
|
|
|
32
34
|
## Behavior
|
|
33
35
|
|
|
@@ -55,6 +57,12 @@ When triggered:
|
|
|
55
57
|
|
|
56
58
|
# Force reinstall even if already installed
|
|
57
59
|
aiwg install-plugin sdlc@aiwg --force
|
|
60
|
+
|
|
61
|
+
# Standalone local/Git wrappers use the package installer, not the legacy
|
|
62
|
+
# manifest-only install-plugin backend.
|
|
63
|
+
aiwg install ./path/to/wrapper --dry-run
|
|
64
|
+
aiwg install https://example.invalid/owner/wrapper.git --dry-run
|
|
65
|
+
aiwg use <plugin-id>
|
|
58
66
|
```
|
|
59
67
|
|
|
60
68
|
3. **Report the result** — name the installed marketplace wrapper and confirm which agents, skills, commands, and rules were deployed and where.
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
import path from 'path';
|
|
21
21
|
import { installPackage } from '../../packages/registry.js';
|
|
22
22
|
import { recordDeployment } from '../../packages/package-registry.js';
|
|
23
|
+
import { marketplaceConfigDir, resolveVerificationPolicy } from '../../marketplace/exchange.js';
|
|
23
24
|
import { createScriptRunner } from './script-runner.js';
|
|
24
25
|
import { handlerResultFromError } from '../errors.js';
|
|
25
26
|
import * as ui from '../ui.js';
|
|
@@ -59,6 +60,12 @@ export const installHandler = {
|
|
|
59
60
|
' --provider <name> Target provider (claude, copilot, cursor...)',
|
|
60
61
|
' --target <dir> Project directory to deploy into',
|
|
61
62
|
' --refresh Force re-pull even if cached',
|
|
63
|
+
' --ref <tag-or-sha> Resolve this ref and lock its immutable commit',
|
|
64
|
+
' --package <id> Select one wrapper when a repository contains several',
|
|
65
|
+
' --verify Require a publisher signature trusted by local policy',
|
|
66
|
+
' --policy <name|path> Named trust policy or JSON policy file',
|
|
67
|
+
' --project-local Store registry, lock, receipts, and index under <target>/.aiwg',
|
|
68
|
+
' --global Store package state in the user AIWG directory (default)',
|
|
62
69
|
].join('\n'),
|
|
63
70
|
};
|
|
64
71
|
}
|
|
@@ -66,6 +73,15 @@ export const installHandler = {
|
|
|
66
73
|
const refresh = hasFlag(ctx.args, '--refresh');
|
|
67
74
|
const provider = parseFlag(ctx.args, '--provider') ?? 'claude';
|
|
68
75
|
const target = parseFlag(ctx.args, '--target') ?? ctx.cwd;
|
|
76
|
+
const projectLocal = hasFlag(ctx.args, '--project-local');
|
|
77
|
+
const global = hasFlag(ctx.args, '--global');
|
|
78
|
+
if (projectLocal && global) {
|
|
79
|
+
return { exitCode: 1, message: 'Error: Choose either --project-local or --global, not both' };
|
|
80
|
+
}
|
|
81
|
+
const verify = hasFlag(ctx.args, '--verify');
|
|
82
|
+
const policyName = parseFlag(ctx.args, '--policy');
|
|
83
|
+
const scope = { projectLocal, projectDir: target };
|
|
84
|
+
const configDir = marketplaceConfigDir(scope);
|
|
69
85
|
ui.blank();
|
|
70
86
|
console.log(` ${ui.brandMark()} ${ui.bold('aiwg install')} ${ui.dimText(rawRef)}`);
|
|
71
87
|
ui.rule();
|
|
@@ -75,8 +91,23 @@ export const installHandler = {
|
|
|
75
91
|
let key;
|
|
76
92
|
let type;
|
|
77
93
|
let namespace;
|
|
94
|
+
let lockId;
|
|
95
|
+
let verificationStatus;
|
|
78
96
|
try {
|
|
79
|
-
|
|
97
|
+
const resolvedPolicy = await resolveVerificationPolicy(policyName, scope);
|
|
98
|
+
const installed = await installPackage(rawRef, {
|
|
99
|
+
refresh,
|
|
100
|
+
ref: parseFlag(ctx.args, '--ref'),
|
|
101
|
+
packageSelector: parseFlag(ctx.args, '--package'),
|
|
102
|
+
verify,
|
|
103
|
+
verificationPolicy: resolvedPolicy.policy,
|
|
104
|
+
trustStore: resolvedPolicy.trustStore,
|
|
105
|
+
configDir,
|
|
106
|
+
actor: 'local-user',
|
|
107
|
+
});
|
|
108
|
+
({ cachePath, key, type, namespace } = installed);
|
|
109
|
+
lockId = installed.lock.lockId;
|
|
110
|
+
verificationStatus = installed.verification.status;
|
|
80
111
|
}
|
|
81
112
|
catch (error) {
|
|
82
113
|
// Preserve AiwgError.exitCode while keeping the "Error: " prefix users
|
|
@@ -85,9 +116,12 @@ export const installHandler = {
|
|
|
85
116
|
return { ...result, message: `Error: ${result.message}` };
|
|
86
117
|
}
|
|
87
118
|
ui.success(`Installed: ${key} (${type})`);
|
|
88
|
-
ui.
|
|
119
|
+
ui.dim(` Cache: ${cachePath}`);
|
|
120
|
+
ui.dim(` Lock: ${lockId}`);
|
|
121
|
+
ui.dim(` Verification: ${verificationStatus}`);
|
|
122
|
+
ui.dim(` Scope: ${projectLocal ? 'project-local' : 'global'}`);
|
|
89
123
|
if (namespace !== 'aiwg') {
|
|
90
|
-
ui.
|
|
124
|
+
ui.dim(` Namespace: ${namespace}`);
|
|
91
125
|
}
|
|
92
126
|
// Optionally deploy
|
|
93
127
|
if (deploy) {
|
|
@@ -98,6 +132,10 @@ export const installHandler = {
|
|
|
98
132
|
'--deploy-commands',
|
|
99
133
|
'--deploy-skills',
|
|
100
134
|
'--deploy-rules',
|
|
135
|
+
// External packages do not participate in AIWG's global artifact
|
|
136
|
+
// index. Copy their complete skill payload into the target so a
|
|
137
|
+
// successful install cannot silently deploy agents/rules only.
|
|
138
|
+
'--copy-all',
|
|
101
139
|
'--provider', provider,
|
|
102
140
|
'--target', target,
|
|
103
141
|
'--namespace', namespace,
|
|
@@ -116,7 +154,7 @@ export const installHandler = {
|
|
|
116
154
|
projectPath: target,
|
|
117
155
|
provider,
|
|
118
156
|
deployedAt: new Date().toISOString(),
|
|
119
|
-
});
|
|
157
|
+
}, configDir);
|
|
120
158
|
}
|
|
121
159
|
}
|
|
122
160
|
ui.blank();
|