@aiwg/cli 2026.10.3 → 2026.10.5
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/README.md +2 -2
- package/agentic/code/providers/model-capabilities.v1.json +96 -4
- package/bin/aiwg.mjs +50 -27
- package/dist/src/agents/grounding/knowledge-base.js +54 -6
- package/dist/src/artifacts/browser-export.js +6 -0
- package/dist/src/artifacts/checksum-manifest.js +1 -0
- package/dist/src/artifacts/citation-parser.js +173 -92
- package/dist/src/artifacts/citation-table-schema.js +59 -0
- package/dist/src/artifacts/cli.js +69 -18
- package/dist/src/artifacts/corpus-tools/snapshot.js +1 -1
- package/dist/src/artifacts/corpus-tools/vision-extract.js +2 -0
- package/dist/src/artifacts/corpus-views/ref-parser.js +3 -1
- package/dist/src/artifacts/corpus-views/renderers.js +3 -3
- package/dist/src/artifacts/discovery-eval.js +6 -4
- package/dist/src/artifacts/fortemi-core-query-adapter.js +36 -3
- package/dist/src/artifacts/fortemi-core-sync.js +166 -40
- package/dist/src/artifacts/framework-capabilities.js +171 -0
- package/dist/src/artifacts/framework-index-paths.js +73 -0
- package/dist/src/artifacts/framework-source-digest.js +75 -0
- package/dist/src/artifacts/index-builder.js +286 -131
- package/dist/src/artifacts/index-files.js +132 -18
- package/dist/src/artifacts/index-preparation.js +130 -0
- package/dist/src/artifacts/index-refresh.js +591 -0
- package/dist/src/artifacts/index-worker.mjs +11 -0
- package/dist/src/artifacts/prebuilt-build-lock.js +47 -4
- package/dist/src/artifacts/prebuilt-deployment.js +46 -0
- package/dist/src/artifacts/prebuilt-relations.js +80 -0
- package/dist/src/artifacts/query-engine.js +410 -88
- package/dist/src/artifacts/relations-builder.js +168 -0
- package/dist/src/artifacts/relations.js +148 -0
- package/dist/src/artifacts/stats.js +5 -2
- package/dist/src/artifacts/types.js +30 -10
- package/dist/src/artifacts/watcher.js +1 -1
- package/dist/src/auth/credential-store.js +2 -1
- package/dist/src/catalog/cli.d.mts +5 -0
- package/dist/src/channel/manager.d.mts +20 -0
- package/dist/src/channel/manager.mjs +19 -2
- package/dist/src/cli/command-log.js +2 -3
- package/dist/src/cli/handlers/artifacts.js +3 -0
- package/dist/src/cli/handlers/auth.js +3 -0
- package/dist/src/cli/handlers/decision.js +19 -12
- package/dist/src/cli/handlers/diagnose.js +4 -3
- package/dist/src/cli/handlers/effect.js +4 -2
- package/dist/src/cli/handlers/evidence.js +3 -0
- package/dist/src/cli/handlers/help.js +1 -0
- package/dist/src/cli/handlers/index.js +3 -1
- package/dist/src/cli/handlers/init.js +4 -1
- package/dist/src/cli/handlers/lint.js +5 -0
- package/dist/src/cli/handlers/models.js +104 -8
- package/dist/src/cli/handlers/ralph-launcher.js +2 -0
- package/dist/src/cli/handlers/refresh.js +12 -0
- package/dist/src/cli/handlers/resource-versions.js +3 -0
- package/dist/src/cli/handlers/rules.js +195 -0
- package/dist/src/cli/handlers/run.js +4 -0
- package/dist/src/cli/handlers/runtime-info.js +1 -2
- package/dist/src/cli/handlers/script-runner.js +3 -2
- package/dist/src/cli/handlers/session.js +19 -9
- package/dist/src/cli/handlers/sessions.js +137 -43
- package/dist/src/cli/handlers/setup-manifest.js +39 -44
- package/dist/src/cli/handlers/setup.js +41 -0
- package/dist/src/cli/handlers/steward.js +11 -0
- package/dist/src/cli/handlers/subcommands.js +57 -2
- package/dist/src/cli/handlers/uhp.js +3 -0
- package/dist/src/cli/handlers/use.js +294 -55
- package/dist/src/cli/handlers/utilities.js +26 -10
- package/dist/src/cli/handlers/version.js +8 -0
- package/dist/src/cli/router.js +15 -1
- package/dist/src/cli/services/deployment-verification.js +19 -9
- package/dist/src/cli/services/provider-prepare-coordinator.js +24 -0
- package/dist/src/cli/skill-usage.js +2 -3
- package/dist/src/config/aiwg-config.js +87 -37
- package/dist/src/config/cli.js +111 -5
- package/dist/src/config/decision-config.js +106 -0
- package/dist/src/config/dispatch-thresholds-runtime.d.mts +8 -0
- package/dist/src/config/gitignore.js +50 -0
- package/dist/src/config/index-graph-overrides.js +36 -0
- package/dist/src/config/project-artifacts-health.d.mts +37 -0
- package/dist/src/config/project-artifacts-runtime.d.mts +16 -0
- package/dist/src/config/user-config-dir.d.mts +9 -0
- package/dist/src/config/user-config.js +2 -1
- package/dist/src/config/user-registry.js +23 -15
- package/dist/src/config/user-state.js +7 -0
- package/dist/src/decision/ask.js +203 -43
- package/dist/src/decision/context-live-qualification.js +2 -2
- package/dist/src/decision/driver.js +13 -8
- package/dist/src/decision/ensemble/aggregate.js +23 -10
- package/dist/src/decision/ensemble-study/multifact-study.js +6 -2
- package/dist/src/decision/entry.js +2 -15
- package/dist/src/decision/graph-live-qualification.js +1 -1
- package/dist/src/decision/graph-run.js +9 -0
- package/dist/src/decision/heldout/collector.js +5 -13
- package/dist/src/decision/heldout/contract.js +30 -7
- package/dist/src/decision/jev-credentials.js +15 -1
- package/dist/src/decision/ledger.js +131 -28
- package/dist/src/decision/offload-activation.js +137 -0
- package/dist/src/decision/offload.js +550 -0
- package/dist/src/decision/qualification/load.js +4 -6
- package/dist/src/decision/savings.js +28 -0
- package/dist/src/effects/types.js +5 -1
- package/dist/src/effects/verifiers/git.js +2 -1
- package/dist/src/effects/verifiers/tracker.js +26 -14
- package/dist/src/extensions/commands/definitions.js +19 -0
- package/dist/src/extensions/project-local-remove.js +36 -1
- package/dist/src/gates/providers/loader.js +61 -17
- package/dist/src/installation/manager-command.d.mts +18 -0
- package/dist/src/installation/manager-command.mjs +14 -2
- package/dist/src/installation/manager.d.mts +49 -0
- package/dist/src/installation/manager.mjs +78 -3
- package/dist/src/issues/cli.js +4 -4
- package/dist/src/issues/local.js +24 -5
- package/dist/src/jobs/runner.js +1 -1
- package/dist/src/lint/cli.js +27 -1
- package/dist/src/lint/loader.js +2 -1
- package/dist/src/lint/reporters.js +25 -1
- package/dist/src/lint/rule-activation.js +43 -0
- package/dist/src/lint/runner.js +137 -62
- package/dist/src/mcp/adapters/codex-runtime.js +7 -1
- package/dist/src/mcp/claude-install.d.mts +4 -0
- package/dist/src/mcp/claude-install.mjs +41 -0
- package/dist/src/mcp/cli.d.mts +1 -0
- package/dist/src/mcp/cli.mjs +36 -11
- package/dist/src/mcp/config-file.d.mts +28 -0
- package/dist/src/mcp/config-layers.d.mts +36 -0
- package/dist/src/mcp/credentials.d.mts +51 -0
- package/dist/src/mcp/grok-build-config.d.mts +6 -0
- package/dist/src/mcp/grok-build-config.mjs +1 -1
- package/dist/src/mcp/helpers.mjs +3 -2
- package/dist/src/mcp/muse-native-config.d.mts +13 -0
- package/dist/src/mcp/muse-native-config.mjs +1 -0
- package/dist/src/mcp/omp-config.d.mts +4 -0
- package/dist/src/mcp/registry.js +3 -93
- package/dist/src/mcp/registry.mjs +3 -87
- package/dist/src/mcp/server-config.d.mts +3 -0
- package/dist/src/mcp/server-config.mjs +89 -0
- package/dist/src/mcp/server.mjs +37 -375
- package/dist/src/mcp/test-simple.mjs +2 -1
- package/dist/src/mcp/toml-editor.d.mts +4 -0
- package/dist/src/mcp/toml-string.d.mts +1 -0
- package/dist/src/mcp/toml-strip-mcp.d.mts +1 -0
- package/dist/src/mcp/tool-filters.d.mts +46 -0
- package/dist/src/mcp/tools/decision.mjs +12 -11
- package/dist/src/mcp/tools/discovery.mjs +62 -55
- package/dist/src/mcp/tools/orchestration.mjs +12 -2
- package/dist/src/mcp/tools/worker-invoke.mjs +1340 -23
- package/dist/src/mcp/tools/worker-shell-control.mjs +52 -21
- package/dist/src/mcp/tools/worker-stdin-runtime.mjs +3 -3
- package/dist/src/mission-protocol/codecs.js +8 -0
- package/dist/src/models/config-loader.js +7 -2
- package/dist/src/models/model-capabilities.v1.json +96 -4
- package/dist/src/models/model-discovery.js +76 -11
- package/dist/src/models/provider-policy.js +101 -7
- package/dist/src/models/qualification-digest.d.mts +2 -0
- package/dist/src/models/resolver.js +12 -10
- package/dist/src/models/worker-direct-readiness.js +65 -44
- package/dist/src/models/worker-dispatch-offer.js +3 -3
- package/dist/src/models/worker-health-readiness.js +16 -3
- package/dist/src/models/worker-installation.d.mts +39 -0
- package/dist/src/models/worker-installation.mjs +135 -28
- package/dist/src/process/bounded-child-process.d.mts +84 -0
- package/dist/src/process/bounded-child-process.mjs +43 -0
- package/dist/src/process/cli-command.d.mts +16 -0
- package/dist/src/process/signal-child.d.mts +6 -0
- package/dist/src/process/signal-child.mjs +7 -0
- package/dist/src/providers/deployed-skill-roots.js +20 -0
- package/dist/src/providers/grok-build-acp.js +3 -2
- package/dist/src/providers/grok-build-headless.js +12 -4
- package/dist/src/providers/grok-build-inspect.js +1 -0
- package/dist/src/providers/omp-agent.d.mts +8 -0
- package/dist/src/providers/omp-diagnostics.d.mts +1 -0
- package/dist/src/providers/omp-paths.d.mts +13 -0
- package/dist/src/providers/skill-ownership.d.mts +9 -0
- package/dist/src/providers/skill-ownership.mjs +88 -0
- package/dist/src/rules/activation.d.mts +21 -0
- package/dist/src/rules/activation.mjs +62 -0
- package/dist/src/rules/inline-budget.d.mts +26 -0
- package/dist/src/rules/inline-budget.mjs +66 -0
- package/dist/src/rules/inventory.js +129 -0
- package/dist/src/rules/pin-state.js +73 -0
- package/dist/src/rules/pins.d.mts +14 -0
- package/dist/src/rules/pins.mjs +112 -0
- package/dist/src/rules/rule-frontmatter.schema.json +197 -0
- package/dist/src/serve/mission-conductor.js +38 -12
- package/dist/src/serve/worker-invocation.js +30 -10
- package/dist/src/serve/worker-stdin-frame.d.mts +10 -0
- package/dist/src/sessions/adapter-registry.js +23 -19
- package/dist/src/sessions/adapters/claude.js +39 -54
- package/dist/src/sessions/adapters/codex.js +95 -67
- package/dist/src/sessions/adapters/copilot.js +4 -4
- package/dist/src/sessions/adapters/cursor.js +40 -57
- package/dist/src/sessions/adapters/deepseek-harness.js +15 -12
- package/dist/src/sessions/adapters/factory.js +31 -27
- package/dist/src/sessions/adapters/generic.js +10 -10
- package/dist/src/sessions/adapters/grok-build.js +11 -11
- package/dist/src/sessions/adapters/grokbot.js +24 -13
- package/dist/src/sessions/adapters/hermes.js +27 -29
- package/dist/src/sessions/adapters/muse-workspace-scan.js +31 -11
- package/dist/src/sessions/adapters/muse.js +150 -93
- package/dist/src/sessions/adapters/omp.js +28 -14
- package/dist/src/sessions/adapters/openclaw.js +89 -79
- package/dist/src/sessions/adapters/opencode.js +27 -24
- package/dist/src/sessions/adapters/openhuman.js +18 -60
- package/dist/src/sessions/adapters/pi.js +29 -14
- package/dist/src/sessions/adapters/warp.js +3 -3
- package/dist/src/sessions/adapters/windsurf.js +19 -48
- package/dist/src/sessions/batch-contracts.js +16 -8
- package/dist/src/sessions/batch-import.js +252 -12
- package/dist/src/sessions/contracts.js +50 -3
- package/dist/src/sessions/coverage-preflight.js +27 -2
- package/dist/src/sessions/export-plan.js +4 -3
- package/dist/src/sessions/import-exclusions.js +72 -0
- package/dist/src/sessions/import-lease.js +34 -18
- package/dist/src/sessions/import-limits.js +37 -0
- package/dist/src/sessions/importer.js +60 -38
- package/dist/src/sessions/lifecycle.js +45 -0
- package/dist/src/sessions/policy.js +145 -26
- package/dist/src/sessions/readers.js +106 -53
- package/dist/src/sessions/refresh.js +105 -0
- package/dist/src/sessions/repository.js +151 -54
- package/dist/src/sessions/workspace-discovery.js +292 -60
- package/dist/src/sessions/workspace-matching.js +107 -0
- package/dist/src/skills/importer.js +1 -0
- package/dist/src/smiths/context-pipeline/aiwg-md.js +11 -0
- package/dist/src/smiths/context-pipeline/claude-hook.js +3 -26
- package/dist/src/smiths/context-pipeline/finalization.js +6 -5
- package/dist/src/smiths/context-pipeline/generator.js +21 -4
- package/dist/src/smiths/context-pipeline/parallelism-section.js +7 -15
- package/dist/src/smiths/mcpsmith/generator.js +1 -1
- package/dist/src/smiths/toolsmith/runtime-discovery.d.mts +10 -0
- package/dist/src/smiths/toolsmith/runtime-discovery.mjs +76 -18
- package/dist/src/storage/backends/fs.js +18 -76
- package/dist/src/storage/backends/obsidian.js +1 -0
- package/dist/src/tracker/forge-http.js +2 -1
- package/dist/src/update/checker.d.mts +2 -0
- package/dist/src/update/service.d.mts +22 -0
- package/dist/src/utils/contained-filesystem.d.mts +37 -0
- package/dist/src/utils/contained-filesystem.mjs +683 -0
- package/dist/src/utils/temporary-directory.js +36 -0
- package/dist/src/writing/example-generator.js +1 -1
- package/package.json +15 -2
- package/schemas/models/model-catalog.v1.schema.json +1 -1
- package/schemas/models/provider-model-capabilities.v1.schema.json +6 -0
- package/tools/_resolve-impl.mjs +13 -15
- package/tools/agents/deploy-agents.mjs +49 -21
- package/tools/agents/providers/base.mjs +104 -134
- package/tools/agents/providers/claude.mjs +8 -24
- package/tools/agents/providers/codex.mjs +18 -11
- package/tools/agents/providers/cursor.mjs +19 -18
- package/tools/agents/providers/grok-build.mjs +3 -1
- package/tools/agents/providers/hermes.mjs +57 -47
- package/tools/agents/providers/openclaw.mjs +9 -4
- package/tools/agents/providers/pi.mjs +5 -0
- package/tools/agents/providers/provider-prepare-channel.mjs +5 -0
- package/tools/agents/providers/provider-prepare-coordinator.mjs +247 -0
- package/tools/agents/providers/provider-prepare-worker.mjs +84 -0
- package/tools/agents/providers/rule-delivery.mjs +1270 -0
- package/tools/agents/providers/warp.mjs +20 -26
- package/tools/cli/decision-offload-report.mjs +40 -0
- package/tools/cli/workspace-status.mjs +862 -0
- package/tools/plugin/package-plugins.mjs +186 -8
- package/tools/plugin/plugin-links.mjs +114 -0
- package/tools/providers/antigravity-transport.mjs +3 -1
- package/tools/providers/deepseek-harness-transport.mjs +6 -4
- package/tools/providers/omp-transport.mjs +4 -2
- package/tools/ralph-external/lib/consecutive-failure-circuit-breaker.mjs +1748 -0
- package/tools/ralph-external/lib/launcher-recovery-evidence.mjs +55 -0
- package/tools/ralph-external/lib/omp-adapter.mjs +1 -1
- package/tools/ralph-external/lib/pi-adapter.mjs +0 -4
- package/tools/ralph-external/lib/provider-adapter.mjs +59 -1
- package/tools/ralph-external/lib/recovery-probe.mjs +72 -0
- package/tools/ralph-external/lib/session-environment.mjs +28 -0
- package/tools/ralph-external/lib/systemd-client.mjs +49 -0
- package/tools/ralph-external/lib/worker-health.mjs +1 -1
- package/tools/ralph-external/lib/worker-isolation.mjs +717 -0
- package/tools/ralph-external/lib/worker-overflow.mjs +50 -0
- package/tools/ralph-external/process-monitor.mjs +1017 -0
- package/tools/ralph-external/session-launcher.mjs +5057 -0
- package/tools/scripts/resource-preflight.mjs +541 -0
- package/tools/skills/deploy-skills-codex.mjs +2 -1
- package/vscode-extension/schemas/aiwg.config.v1.json +1194 -231
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { rmSync } from 'node:fs';
|
|
2
|
+
const directories = new Set();
|
|
3
|
+
const removeAll = () => {
|
|
4
|
+
for (const directory of directories)
|
|
5
|
+
rmSync(directory, { recursive: true, force: true });
|
|
6
|
+
};
|
|
7
|
+
const onInterrupt = () => terminate('SIGINT', onInterrupt);
|
|
8
|
+
const onTerminate = () => terminate('SIGTERM', onTerminate);
|
|
9
|
+
function terminate(signal, listener) {
|
|
10
|
+
removeAll();
|
|
11
|
+
// Preserve an existing shutdown handler; otherwise restore default behavior.
|
|
12
|
+
if (process.listenerCount(signal) === 1) {
|
|
13
|
+
process.removeListener(signal, listener);
|
|
14
|
+
process.kill(process.pid, signal);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Own scratch through normal completion, explicit process.exit and termination.
|
|
18
|
+
* SIGKILL cannot be handled; callers should still use finally for normal errors. */
|
|
19
|
+
export function trackTemporaryDirectory(directory) {
|
|
20
|
+
if (directories.size === 0) {
|
|
21
|
+
process.once('exit', removeAll);
|
|
22
|
+
process.on('SIGINT', onInterrupt);
|
|
23
|
+
process.on('SIGTERM', onTerminate);
|
|
24
|
+
}
|
|
25
|
+
directories.add(directory);
|
|
26
|
+
return () => {
|
|
27
|
+
rmSync(directory, { recursive: true, force: true });
|
|
28
|
+
directories.delete(directory);
|
|
29
|
+
if (directories.size === 0) {
|
|
30
|
+
process.removeListener('exit', removeAll);
|
|
31
|
+
process.removeListener('SIGINT', onInterrupt);
|
|
32
|
+
process.removeListener('SIGTERM', onTerminate);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=temporary-directory.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiwg/cli",
|
|
3
|
-
"version": "2026.10.
|
|
3
|
+
"version": "2026.10.5",
|
|
4
4
|
"description": "Lightweight AIWG CLI for signed, versioned web-backed resources.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,6 +41,18 @@
|
|
|
41
41
|
"dist/src/resources/web-release.d.ts",
|
|
42
42
|
"dist/src/dataset/**/*.d.ts",
|
|
43
43
|
"tools/_resolve-impl.mjs",
|
|
44
|
+
"tools/cli/decision-offload-report.mjs",
|
|
45
|
+
"tools/cli/workspace-status.mjs",
|
|
46
|
+
"tools/ralph-external/session-launcher.mjs",
|
|
47
|
+
"tools/ralph-external/process-monitor.mjs",
|
|
48
|
+
"tools/ralph-external/lib/session-environment.mjs",
|
|
49
|
+
"tools/ralph-external/lib/worker-isolation.mjs",
|
|
50
|
+
"tools/ralph-external/lib/systemd-client.mjs",
|
|
51
|
+
"tools/ralph-external/lib/consecutive-failure-circuit-breaker.mjs",
|
|
52
|
+
"tools/ralph-external/lib/launcher-recovery-evidence.mjs",
|
|
53
|
+
"tools/ralph-external/lib/recovery-probe.mjs",
|
|
54
|
+
"tools/ralph-external/lib/worker-overflow.mjs",
|
|
55
|
+
"tools/scripts/resource-preflight.mjs",
|
|
44
56
|
"tools/ralph-external/lib/provider-adapter.mjs",
|
|
45
57
|
"tools/ralph-external/lib/worker-health.mjs",
|
|
46
58
|
"tools/ralph-external/lib/claude-adapter.mjs",
|
|
@@ -59,6 +71,7 @@
|
|
|
59
71
|
"tools/providers/antigravity-transport.mjs",
|
|
60
72
|
"tools/commands/deploy-prompts-codex.mjs",
|
|
61
73
|
"tools/plugin/package-plugins.mjs",
|
|
74
|
+
"tools/plugin/plugin-links.mjs",
|
|
62
75
|
"tools/skills/deploy-skills-codex.mjs",
|
|
63
76
|
"README.md"
|
|
64
77
|
],
|
|
@@ -82,7 +95,7 @@
|
|
|
82
95
|
"access": "public"
|
|
83
96
|
},
|
|
84
97
|
"engines": {
|
|
85
|
-
"node": ">=
|
|
98
|
+
"node": ">=24"
|
|
86
99
|
},
|
|
87
100
|
"dependencies": {
|
|
88
101
|
"@fortemi/core": "2026.7.15",
|
|
@@ -292,7 +292,7 @@
|
|
|
292
292
|
"type": "array",
|
|
293
293
|
"items": { "$ref": "#/$defs/discoveredModel" }
|
|
294
294
|
},
|
|
295
|
-
"errorKind": { "enum": ["authentication", "rate-limit", "timeout", "unsupported", "invalid-output", "command"] },
|
|
295
|
+
"errorKind": { "enum": ["authentication", "rate-limit", "timeout", "unsupported", "invalid-output", "environment", "command"] },
|
|
296
296
|
"error": { "type": "string" },
|
|
297
297
|
"policy": { "type": "object" }
|
|
298
298
|
}
|
|
@@ -37,6 +37,12 @@
|
|
|
37
37
|
"verifiedAt"
|
|
38
38
|
],
|
|
39
39
|
"properties": {
|
|
40
|
+
"sessionEnvAllowlist": {
|
|
41
|
+
"description": "Exact provider auth/config names for legacy full agent sessions, in addition to the launcher's base environment. Independent of worker invocation allowlists.",
|
|
42
|
+
"type": "array",
|
|
43
|
+
"items": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" },
|
|
44
|
+
"uniqueItems": true
|
|
45
|
+
},
|
|
40
46
|
"agent": {
|
|
41
47
|
"$ref": "#/$defs/control"
|
|
42
48
|
},
|
package/tools/_resolve-impl.mjs
CHANGED
|
@@ -20,7 +20,7 @@ function findPackageRoot(callerUrl) {
|
|
|
20
20
|
dir = parent;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
throw new Error(`Could not locate AIWG package root from ${callerUrl}`);
|
|
23
|
+
throw Object.assign(new Error(`Could not locate AIWG package root from ${callerUrl}`), { code: 'AIWG_PACKAGE_ROOT_MISSING' });
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
function candidatesFor(root, relativeFromSrc, base) {
|
|
@@ -59,10 +59,10 @@ function resolveCandidate(root, relativeFromSrc, base) {
|
|
|
59
59
|
* `importImpl(import.meta.url, '<module-path-relative-to-src>')` instead of
|
|
60
60
|
* a literal relative import, so it finds `dist/src/` when installed and
|
|
61
61
|
* `src/` in a checkout. `test/integration/tools-packed-relative-imports.test.ts`
|
|
62
|
-
* guards this for every relative import
|
|
62
|
+
* guards this for every shipped relative import without exceptions.
|
|
63
63
|
*
|
|
64
64
|
* Directories `package.json`'s `files` excludes from the npm package
|
|
65
|
-
* (`tools/benchmarks/`, `tools/ci/`, `tools/contrib/`,
|
|
65
|
+
* (`tools/benchmarks/`, `tools/ci/`, `tools/contrib/`,
|
|
66
66
|
* `tools/eval/`, `tools/lint/` other than its listed exceptions,
|
|
67
67
|
* `tools/manifest/` other than its listed exception, `tools/qualification/`,
|
|
68
68
|
* and `tools/release/`) are maintainer/CI-only: they never run from an
|
|
@@ -74,17 +74,15 @@ function resolveCandidate(root, relativeFromSrc, base) {
|
|
|
74
74
|
* shipped ever referenced them (#3062 B/C finding 2) — removing them
|
|
75
75
|
* also trims install size (#3075).
|
|
76
76
|
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* `
|
|
85
|
-
*
|
|
86
|
-
* resolve through `importImpl` like everything else unless it has the
|
|
87
|
-
* same checkout-only justification.
|
|
77
|
+
* Decision study/replay scripts, experiments, OMP conformance probes, the
|
|
78
|
+
* desktop issuer qualification, and repository testing scripts are also
|
|
79
|
+
* excluded: they require checkout fixtures, development dependencies, or
|
|
80
|
+
* unshipped application code and have no installed CLI callers. Keep those
|
|
81
|
+
* scripts in the repository rather than adapting them for installation.
|
|
82
|
+
*
|
|
83
|
+
* `tools/docker/container-manager.mjs` and `Dockerfile.daemon` are shipped
|
|
84
|
+
* exceptions to the Docker directory exclusion: `aiwg daemon start --docker`
|
|
85
|
+
* needs both. The manager uses this resolver for its implementation import.
|
|
88
86
|
*/
|
|
89
87
|
export function resolveImpl(callerUrl, relativeFromSrc) {
|
|
90
88
|
const root = findPackageRoot(callerUrl);
|
|
@@ -104,7 +102,7 @@ export function resolveImpl(callerUrl, relativeFromSrc) {
|
|
|
104
102
|
const attempted = order
|
|
105
103
|
.flatMap((base) => candidatesFor(root, relativeFromSrc, base))
|
|
106
104
|
.join(', ');
|
|
107
|
-
throw new Error(`Could not resolve ${relativeFromSrc}; attempted: ${attempted}`);
|
|
105
|
+
throw Object.assign(new Error(`Could not resolve ${relativeFromSrc}; attempted: ${attempted}`), { code: 'AIWG_IMPLEMENTATION_MISSING' });
|
|
108
106
|
}
|
|
109
107
|
|
|
110
108
|
export async function importImpl(callerUrl, relativeFromSrc) {
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
* --deploy-rules Deploy rules in addition to agents
|
|
20
20
|
* --commands-only Deploy only commands (skip agents)
|
|
21
21
|
* --skills-only Deploy only skills (skip agents)
|
|
22
|
-
* --
|
|
22
|
+
* --strict Fail startup budget overruns before deployment promotion
|
|
23
|
+
--report-only Warn on startup budget overruns (migration default; CI remains strict)
|
|
24
|
+
--rules-only Deploy only rules (skip agents)
|
|
23
25
|
* --dry-run Show what would be deployed without writing
|
|
24
26
|
* --force Overwrite existing files
|
|
25
27
|
* --provider <name> Target provider: antigravity (agy), claude (default), openai, codex, cursor, opencode, copilot, factory, grokbot, grok-build, muse, pi, omp, deepseek-harness (dsh), warp, devin, hermes, openhuman, or openclaw
|
|
@@ -189,7 +191,7 @@ function uniquePaths(paths) {
|
|
|
189
191
|
return [...new Set(paths.filter(Boolean))];
|
|
190
192
|
}
|
|
191
193
|
|
|
192
|
-
function collectMirrorSkillDirs(srcRoot, mode) {
|
|
194
|
+
export function collectMirrorSkillDirs(srcRoot, mode, providerName) {
|
|
193
195
|
const dirs = [];
|
|
194
196
|
|
|
195
197
|
const directSkillsDir = path.join(srcRoot, 'skills');
|
|
@@ -208,7 +210,14 @@ function collectMirrorSkillDirs(srcRoot, mode) {
|
|
|
208
210
|
});
|
|
209
211
|
dirs.push(...artifacts.skills);
|
|
210
212
|
|
|
211
|
-
|
|
213
|
+
// Pi's provider collector already deploys all eligible addon skills for
|
|
214
|
+
// every root framework mode. Mirror the command-shaped addon skills in
|
|
215
|
+
// that same root pass so `aiwg use` does not need to repeat the entire
|
|
216
|
+
// deployment once per addon merely to produce these wrappers. Keep addon
|
|
217
|
+
// skills after framework skills: this preserves the existing per-addon
|
|
218
|
+
// winner when a framework and addon expose the same command name.
|
|
219
|
+
if (mode === 'all'
|
|
220
|
+
|| (providerName === 'pi' && ['general', 'sdlc', 'both'].includes(mode))) {
|
|
212
221
|
dirs.push(...getAddonSkillDirs(srcRoot));
|
|
213
222
|
}
|
|
214
223
|
}
|
|
@@ -294,7 +303,7 @@ function mirrorSkillsAsCommands(provider, target, srcRoot, opts) {
|
|
|
294
303
|
const targetDir = resolveCommandMirrorDir(provider, target);
|
|
295
304
|
if (!targetDir) return 0;
|
|
296
305
|
|
|
297
|
-
const skillDirs = collectMirrorSkillDirs(srcRoot, opts.mode)
|
|
306
|
+
const skillDirs = collectMirrorSkillDirs(srcRoot, opts.mode, provider.name)
|
|
298
307
|
.filter((dir) => shouldMirrorCommandSkill(provider.name, path.basename(dir)));
|
|
299
308
|
|
|
300
309
|
if (skillDirs.length === 0) return 0;
|
|
@@ -497,6 +506,8 @@ export function parseArgs(args = process.argv.slice(2)) {
|
|
|
497
506
|
commandsOnly: false,
|
|
498
507
|
skillsOnly: false,
|
|
499
508
|
rulesOnly: false,
|
|
509
|
+
strict: false,
|
|
510
|
+
reportOnly: true,
|
|
500
511
|
kernelOnly: false,
|
|
501
512
|
filter: null, // Glob pattern for agent names
|
|
502
513
|
filterRole: null, // Filter by role: reasoning|coding|efficiency
|
|
@@ -548,6 +559,9 @@ export function parseArgs(args = process.argv.slice(2)) {
|
|
|
548
559
|
else if (a === '--commands-only') cfg.commandsOnly = true;
|
|
549
560
|
else if (a === '--skills-only') cfg.skillsOnly = true;
|
|
550
561
|
else if (a === '--rules-only') cfg.rulesOnly = true;
|
|
562
|
+
else if (a === '--strict') { cfg.strict = true; cfg.reportOnly = false; }
|
|
563
|
+
else if (a === '--allow-over-budget') cfg.allowOverBudget = true;
|
|
564
|
+
else if (a === '--report-only') cfg.reportOnly = true;
|
|
551
565
|
else if (a === '--kernel-only') cfg.kernelOnly = true;
|
|
552
566
|
else if (a === '--deploy-behaviors') cfg.deployBehaviors = true;
|
|
553
567
|
else if (a === '--filter' && args[i + 1]) cfg.filter = args[++i];
|
|
@@ -932,8 +946,8 @@ async function promptCommandsMigration(cfg, provider, targetDir) {
|
|
|
932
946
|
// Main Entry Point
|
|
933
947
|
// ============================================================================
|
|
934
948
|
|
|
935
|
-
export async function main() {
|
|
936
|
-
const cfg = parseArgs();
|
|
949
|
+
export async function main(args = process.argv.slice(2), internal = {}) {
|
|
950
|
+
const cfg = parseArgs(args);
|
|
937
951
|
|
|
938
952
|
// Resolve source directory (default to repo root relative to this script)
|
|
939
953
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -1033,6 +1047,9 @@ export async function main() {
|
|
|
1033
1047
|
commandsOnly: cfg.commandsOnly,
|
|
1034
1048
|
skillsOnly: cfg.skillsOnly || cfg.kernelOnly,
|
|
1035
1049
|
rulesOnly: cfg.rulesOnly,
|
|
1050
|
+
strict: cfg.strict,
|
|
1051
|
+
reportOnly: cfg.reportOnly,
|
|
1052
|
+
allowOverBudget: cfg.allowOverBudget === true,
|
|
1036
1053
|
kernelOnly: cfg.kernelOnly,
|
|
1037
1054
|
filter: cfg.filter,
|
|
1038
1055
|
filterRole: cfg.filterRole,
|
|
@@ -1056,31 +1073,41 @@ export async function main() {
|
|
|
1056
1073
|
deployVersion: cfg.deployVersion || getDeployVersion(srcRoot),
|
|
1057
1074
|
deploySource: cfg.deploySource || 'bundled',
|
|
1058
1075
|
};
|
|
1076
|
+
const { isRuleDeploymentPreparationActive } = await import('./providers/rule-delivery.mjs');
|
|
1077
|
+
const preparationActive = isRuleDeploymentPreparationActive();
|
|
1059
1078
|
|
|
1060
1079
|
// Commands → Skills migration: prompt then delete the commands directory
|
|
1061
1080
|
// so stale command files don't create duplicates in the provider TUI.
|
|
1062
|
-
if (!
|
|
1063
|
-
|
|
1064
|
-
|
|
1081
|
+
if (!preparationActive && !internal.finalizeOnly) {
|
|
1082
|
+
if (!cfg.dryRun && !cfg.skipCommandsMigration) {
|
|
1083
|
+
const doMigrate = await promptCommandsMigration(cfg, provider, cfg.target);
|
|
1084
|
+
if (doMigrate) {
|
|
1085
|
+
const commandsRelPath = provider.paths?.commands;
|
|
1086
|
+
if (commandsRelPath) {
|
|
1087
|
+
migrateCommandsDirectory(path.join(cfg.target, commandsRelPath), opts);
|
|
1088
|
+
}
|
|
1089
|
+
} else {
|
|
1090
|
+
// User said no — flip the flag so the provider knows to emit the duplicate warning
|
|
1091
|
+
opts.skipCommandsMigration = true;
|
|
1092
|
+
}
|
|
1093
|
+
} else if (cfg.skipCommandsMigration) {
|
|
1094
|
+
// Flag was passed explicitly — emit the duplicate warning now via a dry migration call
|
|
1065
1095
|
const commandsRelPath = provider.paths?.commands;
|
|
1066
|
-
if (commandsRelPath) {
|
|
1096
|
+
if (commandsRelPath && !provider.capabilities?.homeDirectoryDeploy) {
|
|
1067
1097
|
migrateCommandsDirectory(path.join(cfg.target, commandsRelPath), opts);
|
|
1068
1098
|
}
|
|
1069
|
-
} else {
|
|
1070
|
-
// User said no — flip the flag so the provider knows to emit the duplicate warning
|
|
1071
|
-
opts.skipCommandsMigration = true;
|
|
1072
|
-
}
|
|
1073
|
-
} else if (cfg.skipCommandsMigration) {
|
|
1074
|
-
// Flag was passed explicitly — emit the duplicate warning now via a dry migration call
|
|
1075
|
-
const commandsRelPath = provider.paths?.commands;
|
|
1076
|
-
if (commandsRelPath && !provider.capabilities?.homeDirectoryDeploy) {
|
|
1077
|
-
migrateCommandsDirectory(path.join(cfg.target, commandsRelPath), opts);
|
|
1078
1099
|
}
|
|
1079
1100
|
}
|
|
1080
1101
|
|
|
1102
|
+
// Concurrent deployment runs this parent-owned preflight before any child
|
|
1103
|
+
// snapshots its inputs. Migration can remove a provider command tree, so it
|
|
1104
|
+
// must remain on the same side of the transaction boundary as serial deploy.
|
|
1105
|
+
if (internal.preflightOnly) return;
|
|
1106
|
+
|
|
1081
1107
|
// Delegate to provider
|
|
1082
1108
|
try {
|
|
1083
|
-
await provider.deploy(opts);
|
|
1109
|
+
if (!internal.finalizeOnly) await provider.deploy(opts);
|
|
1110
|
+
if (preparationActive) return;
|
|
1084
1111
|
|
|
1085
1112
|
const mirroredCommandCount = mirrorSkillsAsCommands(provider, cfg.target, srcRoot, opts);
|
|
1086
1113
|
if (mirroredCommandCount > 0 && !cfg.quiet) {
|
|
@@ -1091,7 +1118,7 @@ export async function main() {
|
|
|
1091
1118
|
// or removed (the flat-file analogue of the skills holistic prune). #1627.
|
|
1092
1119
|
pruneStaleAiwgArtifacts(provider, cfg.target, srcRoot, opts, cfg.source);
|
|
1093
1120
|
|
|
1094
|
-
if (!opts.commandsOnly && !opts.skillsOnly && !opts.rulesOnly) {
|
|
1121
|
+
if (!['claude', 'codex', 'cursor', 'hermes', 'warp', 'openclaw'].includes(provider.name) && !opts.commandsOnly && !opts.skillsOnly && !opts.rulesOnly) {
|
|
1095
1122
|
const behaviorDirs = collectBehaviorDirs(srcRoot);
|
|
1096
1123
|
const behaviorCount = deployEmulatedBehaviors(behaviorDirs, provider.name, cfg.target, opts);
|
|
1097
1124
|
if (behaviorCount > 0 && !cfg.quiet) {
|
|
@@ -1106,6 +1133,7 @@ export async function main() {
|
|
|
1106
1133
|
|
|
1107
1134
|
if (!cfg.quiet) console.log(`\n=== Deployment complete ===\n`);
|
|
1108
1135
|
} catch (err) {
|
|
1136
|
+
if (preparationActive || internal.finalizeOnly) throw err;
|
|
1109
1137
|
console.error(`\nDeployment failed:`, err.message);
|
|
1110
1138
|
if (cfg.dryRun) {
|
|
1111
1139
|
console.error('(dry-run mode - no files were modified)');
|