@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.
Files changed (279) hide show
  1. package/README.md +2 -2
  2. package/agentic/code/providers/model-capabilities.v1.json +96 -4
  3. package/bin/aiwg.mjs +50 -27
  4. package/dist/src/agents/grounding/knowledge-base.js +54 -6
  5. package/dist/src/artifacts/browser-export.js +6 -0
  6. package/dist/src/artifacts/checksum-manifest.js +1 -0
  7. package/dist/src/artifacts/citation-parser.js +173 -92
  8. package/dist/src/artifacts/citation-table-schema.js +59 -0
  9. package/dist/src/artifacts/cli.js +69 -18
  10. package/dist/src/artifacts/corpus-tools/snapshot.js +1 -1
  11. package/dist/src/artifacts/corpus-tools/vision-extract.js +2 -0
  12. package/dist/src/artifacts/corpus-views/ref-parser.js +3 -1
  13. package/dist/src/artifacts/corpus-views/renderers.js +3 -3
  14. package/dist/src/artifacts/discovery-eval.js +6 -4
  15. package/dist/src/artifacts/fortemi-core-query-adapter.js +36 -3
  16. package/dist/src/artifacts/fortemi-core-sync.js +166 -40
  17. package/dist/src/artifacts/framework-capabilities.js +171 -0
  18. package/dist/src/artifacts/framework-index-paths.js +73 -0
  19. package/dist/src/artifacts/framework-source-digest.js +75 -0
  20. package/dist/src/artifacts/index-builder.js +286 -131
  21. package/dist/src/artifacts/index-files.js +132 -18
  22. package/dist/src/artifacts/index-preparation.js +130 -0
  23. package/dist/src/artifacts/index-refresh.js +591 -0
  24. package/dist/src/artifacts/index-worker.mjs +11 -0
  25. package/dist/src/artifacts/prebuilt-build-lock.js +47 -4
  26. package/dist/src/artifacts/prebuilt-deployment.js +46 -0
  27. package/dist/src/artifacts/prebuilt-relations.js +80 -0
  28. package/dist/src/artifacts/query-engine.js +410 -88
  29. package/dist/src/artifacts/relations-builder.js +168 -0
  30. package/dist/src/artifacts/relations.js +148 -0
  31. package/dist/src/artifacts/stats.js +5 -2
  32. package/dist/src/artifacts/types.js +30 -10
  33. package/dist/src/artifacts/watcher.js +1 -1
  34. package/dist/src/auth/credential-store.js +2 -1
  35. package/dist/src/catalog/cli.d.mts +5 -0
  36. package/dist/src/channel/manager.d.mts +20 -0
  37. package/dist/src/channel/manager.mjs +19 -2
  38. package/dist/src/cli/command-log.js +2 -3
  39. package/dist/src/cli/handlers/artifacts.js +3 -0
  40. package/dist/src/cli/handlers/auth.js +3 -0
  41. package/dist/src/cli/handlers/decision.js +19 -12
  42. package/dist/src/cli/handlers/diagnose.js +4 -3
  43. package/dist/src/cli/handlers/effect.js +4 -2
  44. package/dist/src/cli/handlers/evidence.js +3 -0
  45. package/dist/src/cli/handlers/help.js +1 -0
  46. package/dist/src/cli/handlers/index.js +3 -1
  47. package/dist/src/cli/handlers/init.js +4 -1
  48. package/dist/src/cli/handlers/lint.js +5 -0
  49. package/dist/src/cli/handlers/models.js +104 -8
  50. package/dist/src/cli/handlers/ralph-launcher.js +2 -0
  51. package/dist/src/cli/handlers/refresh.js +12 -0
  52. package/dist/src/cli/handlers/resource-versions.js +3 -0
  53. package/dist/src/cli/handlers/rules.js +195 -0
  54. package/dist/src/cli/handlers/run.js +4 -0
  55. package/dist/src/cli/handlers/runtime-info.js +1 -2
  56. package/dist/src/cli/handlers/script-runner.js +3 -2
  57. package/dist/src/cli/handlers/session.js +19 -9
  58. package/dist/src/cli/handlers/sessions.js +137 -43
  59. package/dist/src/cli/handlers/setup-manifest.js +39 -44
  60. package/dist/src/cli/handlers/setup.js +41 -0
  61. package/dist/src/cli/handlers/steward.js +11 -0
  62. package/dist/src/cli/handlers/subcommands.js +57 -2
  63. package/dist/src/cli/handlers/uhp.js +3 -0
  64. package/dist/src/cli/handlers/use.js +294 -55
  65. package/dist/src/cli/handlers/utilities.js +26 -10
  66. package/dist/src/cli/handlers/version.js +8 -0
  67. package/dist/src/cli/router.js +15 -1
  68. package/dist/src/cli/services/deployment-verification.js +19 -9
  69. package/dist/src/cli/services/provider-prepare-coordinator.js +24 -0
  70. package/dist/src/cli/skill-usage.js +2 -3
  71. package/dist/src/config/aiwg-config.js +87 -37
  72. package/dist/src/config/cli.js +111 -5
  73. package/dist/src/config/decision-config.js +106 -0
  74. package/dist/src/config/dispatch-thresholds-runtime.d.mts +8 -0
  75. package/dist/src/config/gitignore.js +50 -0
  76. package/dist/src/config/index-graph-overrides.js +36 -0
  77. package/dist/src/config/project-artifacts-health.d.mts +37 -0
  78. package/dist/src/config/project-artifacts-runtime.d.mts +16 -0
  79. package/dist/src/config/user-config-dir.d.mts +9 -0
  80. package/dist/src/config/user-config.js +2 -1
  81. package/dist/src/config/user-registry.js +23 -15
  82. package/dist/src/config/user-state.js +7 -0
  83. package/dist/src/decision/ask.js +203 -43
  84. package/dist/src/decision/context-live-qualification.js +2 -2
  85. package/dist/src/decision/driver.js +13 -8
  86. package/dist/src/decision/ensemble/aggregate.js +23 -10
  87. package/dist/src/decision/ensemble-study/multifact-study.js +6 -2
  88. package/dist/src/decision/entry.js +2 -15
  89. package/dist/src/decision/graph-live-qualification.js +1 -1
  90. package/dist/src/decision/graph-run.js +9 -0
  91. package/dist/src/decision/heldout/collector.js +5 -13
  92. package/dist/src/decision/heldout/contract.js +30 -7
  93. package/dist/src/decision/jev-credentials.js +15 -1
  94. package/dist/src/decision/ledger.js +131 -28
  95. package/dist/src/decision/offload-activation.js +137 -0
  96. package/dist/src/decision/offload.js +550 -0
  97. package/dist/src/decision/qualification/load.js +4 -6
  98. package/dist/src/decision/savings.js +28 -0
  99. package/dist/src/effects/types.js +5 -1
  100. package/dist/src/effects/verifiers/git.js +2 -1
  101. package/dist/src/effects/verifiers/tracker.js +26 -14
  102. package/dist/src/extensions/commands/definitions.js +19 -0
  103. package/dist/src/extensions/project-local-remove.js +36 -1
  104. package/dist/src/gates/providers/loader.js +61 -17
  105. package/dist/src/installation/manager-command.d.mts +18 -0
  106. package/dist/src/installation/manager-command.mjs +14 -2
  107. package/dist/src/installation/manager.d.mts +49 -0
  108. package/dist/src/installation/manager.mjs +78 -3
  109. package/dist/src/issues/cli.js +4 -4
  110. package/dist/src/issues/local.js +24 -5
  111. package/dist/src/jobs/runner.js +1 -1
  112. package/dist/src/lint/cli.js +27 -1
  113. package/dist/src/lint/loader.js +2 -1
  114. package/dist/src/lint/reporters.js +25 -1
  115. package/dist/src/lint/rule-activation.js +43 -0
  116. package/dist/src/lint/runner.js +137 -62
  117. package/dist/src/mcp/adapters/codex-runtime.js +7 -1
  118. package/dist/src/mcp/claude-install.d.mts +4 -0
  119. package/dist/src/mcp/claude-install.mjs +41 -0
  120. package/dist/src/mcp/cli.d.mts +1 -0
  121. package/dist/src/mcp/cli.mjs +36 -11
  122. package/dist/src/mcp/config-file.d.mts +28 -0
  123. package/dist/src/mcp/config-layers.d.mts +36 -0
  124. package/dist/src/mcp/credentials.d.mts +51 -0
  125. package/dist/src/mcp/grok-build-config.d.mts +6 -0
  126. package/dist/src/mcp/grok-build-config.mjs +1 -1
  127. package/dist/src/mcp/helpers.mjs +3 -2
  128. package/dist/src/mcp/muse-native-config.d.mts +13 -0
  129. package/dist/src/mcp/muse-native-config.mjs +1 -0
  130. package/dist/src/mcp/omp-config.d.mts +4 -0
  131. package/dist/src/mcp/registry.js +3 -93
  132. package/dist/src/mcp/registry.mjs +3 -87
  133. package/dist/src/mcp/server-config.d.mts +3 -0
  134. package/dist/src/mcp/server-config.mjs +89 -0
  135. package/dist/src/mcp/server.mjs +37 -375
  136. package/dist/src/mcp/test-simple.mjs +2 -1
  137. package/dist/src/mcp/toml-editor.d.mts +4 -0
  138. package/dist/src/mcp/toml-string.d.mts +1 -0
  139. package/dist/src/mcp/toml-strip-mcp.d.mts +1 -0
  140. package/dist/src/mcp/tool-filters.d.mts +46 -0
  141. package/dist/src/mcp/tools/decision.mjs +12 -11
  142. package/dist/src/mcp/tools/discovery.mjs +62 -55
  143. package/dist/src/mcp/tools/orchestration.mjs +12 -2
  144. package/dist/src/mcp/tools/worker-invoke.mjs +1340 -23
  145. package/dist/src/mcp/tools/worker-shell-control.mjs +52 -21
  146. package/dist/src/mcp/tools/worker-stdin-runtime.mjs +3 -3
  147. package/dist/src/mission-protocol/codecs.js +8 -0
  148. package/dist/src/models/config-loader.js +7 -2
  149. package/dist/src/models/model-capabilities.v1.json +96 -4
  150. package/dist/src/models/model-discovery.js +76 -11
  151. package/dist/src/models/provider-policy.js +101 -7
  152. package/dist/src/models/qualification-digest.d.mts +2 -0
  153. package/dist/src/models/resolver.js +12 -10
  154. package/dist/src/models/worker-direct-readiness.js +65 -44
  155. package/dist/src/models/worker-dispatch-offer.js +3 -3
  156. package/dist/src/models/worker-health-readiness.js +16 -3
  157. package/dist/src/models/worker-installation.d.mts +39 -0
  158. package/dist/src/models/worker-installation.mjs +135 -28
  159. package/dist/src/process/bounded-child-process.d.mts +84 -0
  160. package/dist/src/process/bounded-child-process.mjs +43 -0
  161. package/dist/src/process/cli-command.d.mts +16 -0
  162. package/dist/src/process/signal-child.d.mts +6 -0
  163. package/dist/src/process/signal-child.mjs +7 -0
  164. package/dist/src/providers/deployed-skill-roots.js +20 -0
  165. package/dist/src/providers/grok-build-acp.js +3 -2
  166. package/dist/src/providers/grok-build-headless.js +12 -4
  167. package/dist/src/providers/grok-build-inspect.js +1 -0
  168. package/dist/src/providers/omp-agent.d.mts +8 -0
  169. package/dist/src/providers/omp-diagnostics.d.mts +1 -0
  170. package/dist/src/providers/omp-paths.d.mts +13 -0
  171. package/dist/src/providers/skill-ownership.d.mts +9 -0
  172. package/dist/src/providers/skill-ownership.mjs +88 -0
  173. package/dist/src/rules/activation.d.mts +21 -0
  174. package/dist/src/rules/activation.mjs +62 -0
  175. package/dist/src/rules/inline-budget.d.mts +26 -0
  176. package/dist/src/rules/inline-budget.mjs +66 -0
  177. package/dist/src/rules/inventory.js +129 -0
  178. package/dist/src/rules/pin-state.js +73 -0
  179. package/dist/src/rules/pins.d.mts +14 -0
  180. package/dist/src/rules/pins.mjs +112 -0
  181. package/dist/src/rules/rule-frontmatter.schema.json +197 -0
  182. package/dist/src/serve/mission-conductor.js +38 -12
  183. package/dist/src/serve/worker-invocation.js +30 -10
  184. package/dist/src/serve/worker-stdin-frame.d.mts +10 -0
  185. package/dist/src/sessions/adapter-registry.js +23 -19
  186. package/dist/src/sessions/adapters/claude.js +39 -54
  187. package/dist/src/sessions/adapters/codex.js +95 -67
  188. package/dist/src/sessions/adapters/copilot.js +4 -4
  189. package/dist/src/sessions/adapters/cursor.js +40 -57
  190. package/dist/src/sessions/adapters/deepseek-harness.js +15 -12
  191. package/dist/src/sessions/adapters/factory.js +31 -27
  192. package/dist/src/sessions/adapters/generic.js +10 -10
  193. package/dist/src/sessions/adapters/grok-build.js +11 -11
  194. package/dist/src/sessions/adapters/grokbot.js +24 -13
  195. package/dist/src/sessions/adapters/hermes.js +27 -29
  196. package/dist/src/sessions/adapters/muse-workspace-scan.js +31 -11
  197. package/dist/src/sessions/adapters/muse.js +150 -93
  198. package/dist/src/sessions/adapters/omp.js +28 -14
  199. package/dist/src/sessions/adapters/openclaw.js +89 -79
  200. package/dist/src/sessions/adapters/opencode.js +27 -24
  201. package/dist/src/sessions/adapters/openhuman.js +18 -60
  202. package/dist/src/sessions/adapters/pi.js +29 -14
  203. package/dist/src/sessions/adapters/warp.js +3 -3
  204. package/dist/src/sessions/adapters/windsurf.js +19 -48
  205. package/dist/src/sessions/batch-contracts.js +16 -8
  206. package/dist/src/sessions/batch-import.js +252 -12
  207. package/dist/src/sessions/contracts.js +50 -3
  208. package/dist/src/sessions/coverage-preflight.js +27 -2
  209. package/dist/src/sessions/export-plan.js +4 -3
  210. package/dist/src/sessions/import-exclusions.js +72 -0
  211. package/dist/src/sessions/import-lease.js +34 -18
  212. package/dist/src/sessions/import-limits.js +37 -0
  213. package/dist/src/sessions/importer.js +60 -38
  214. package/dist/src/sessions/lifecycle.js +45 -0
  215. package/dist/src/sessions/policy.js +145 -26
  216. package/dist/src/sessions/readers.js +106 -53
  217. package/dist/src/sessions/refresh.js +105 -0
  218. package/dist/src/sessions/repository.js +151 -54
  219. package/dist/src/sessions/workspace-discovery.js +292 -60
  220. package/dist/src/sessions/workspace-matching.js +107 -0
  221. package/dist/src/skills/importer.js +1 -0
  222. package/dist/src/smiths/context-pipeline/aiwg-md.js +11 -0
  223. package/dist/src/smiths/context-pipeline/claude-hook.js +3 -26
  224. package/dist/src/smiths/context-pipeline/finalization.js +6 -5
  225. package/dist/src/smiths/context-pipeline/generator.js +21 -4
  226. package/dist/src/smiths/context-pipeline/parallelism-section.js +7 -15
  227. package/dist/src/smiths/mcpsmith/generator.js +1 -1
  228. package/dist/src/smiths/toolsmith/runtime-discovery.d.mts +10 -0
  229. package/dist/src/smiths/toolsmith/runtime-discovery.mjs +76 -18
  230. package/dist/src/storage/backends/fs.js +18 -76
  231. package/dist/src/storage/backends/obsidian.js +1 -0
  232. package/dist/src/tracker/forge-http.js +2 -1
  233. package/dist/src/update/checker.d.mts +2 -0
  234. package/dist/src/update/service.d.mts +22 -0
  235. package/dist/src/utils/contained-filesystem.d.mts +37 -0
  236. package/dist/src/utils/contained-filesystem.mjs +683 -0
  237. package/dist/src/utils/temporary-directory.js +36 -0
  238. package/dist/src/writing/example-generator.js +1 -1
  239. package/package.json +15 -2
  240. package/schemas/models/model-catalog.v1.schema.json +1 -1
  241. package/schemas/models/provider-model-capabilities.v1.schema.json +6 -0
  242. package/tools/_resolve-impl.mjs +13 -15
  243. package/tools/agents/deploy-agents.mjs +49 -21
  244. package/tools/agents/providers/base.mjs +104 -134
  245. package/tools/agents/providers/claude.mjs +8 -24
  246. package/tools/agents/providers/codex.mjs +18 -11
  247. package/tools/agents/providers/cursor.mjs +19 -18
  248. package/tools/agents/providers/grok-build.mjs +3 -1
  249. package/tools/agents/providers/hermes.mjs +57 -47
  250. package/tools/agents/providers/openclaw.mjs +9 -4
  251. package/tools/agents/providers/pi.mjs +5 -0
  252. package/tools/agents/providers/provider-prepare-channel.mjs +5 -0
  253. package/tools/agents/providers/provider-prepare-coordinator.mjs +247 -0
  254. package/tools/agents/providers/provider-prepare-worker.mjs +84 -0
  255. package/tools/agents/providers/rule-delivery.mjs +1270 -0
  256. package/tools/agents/providers/warp.mjs +20 -26
  257. package/tools/cli/decision-offload-report.mjs +40 -0
  258. package/tools/cli/workspace-status.mjs +862 -0
  259. package/tools/plugin/package-plugins.mjs +186 -8
  260. package/tools/plugin/plugin-links.mjs +114 -0
  261. package/tools/providers/antigravity-transport.mjs +3 -1
  262. package/tools/providers/deepseek-harness-transport.mjs +6 -4
  263. package/tools/providers/omp-transport.mjs +4 -2
  264. package/tools/ralph-external/lib/consecutive-failure-circuit-breaker.mjs +1748 -0
  265. package/tools/ralph-external/lib/launcher-recovery-evidence.mjs +55 -0
  266. package/tools/ralph-external/lib/omp-adapter.mjs +1 -1
  267. package/tools/ralph-external/lib/pi-adapter.mjs +0 -4
  268. package/tools/ralph-external/lib/provider-adapter.mjs +59 -1
  269. package/tools/ralph-external/lib/recovery-probe.mjs +72 -0
  270. package/tools/ralph-external/lib/session-environment.mjs +28 -0
  271. package/tools/ralph-external/lib/systemd-client.mjs +49 -0
  272. package/tools/ralph-external/lib/worker-health.mjs +1 -1
  273. package/tools/ralph-external/lib/worker-isolation.mjs +717 -0
  274. package/tools/ralph-external/lib/worker-overflow.mjs +50 -0
  275. package/tools/ralph-external/process-monitor.mjs +1017 -0
  276. package/tools/ralph-external/session-launcher.mjs +5057 -0
  277. package/tools/scripts/resource-preflight.mjs +541 -0
  278. package/tools/skills/deploy-skills-codex.mjs +2 -1
  279. package/vscode-extension/schemas/aiwg.config.v1.json +1194 -231
@@ -476,6 +476,45 @@ export const setupHandler = {
476
476
  description: 'CLI helper for agent-led repository policy and tracker setup',
477
477
  category: 'project',
478
478
  aliases: [],
479
+ async help() {
480
+ return {
481
+ exitCode: 0,
482
+ rawOutput: true,
483
+ message: `Usage: aiwg setup project [options]
484
+
485
+ Options:
486
+ --target <dir> Project directory
487
+ --yes Confirm writes without prompting
488
+ --dry-run Preview the setup plan
489
+ --non-interactive Disable prompts
490
+ --json Emit the plan as JSON
491
+ --primary <remote> Primary repository remote
492
+ --issue-tracker <remote> Internal issue tracker remote
493
+ --customer-issue-tracker <remote> Customer issue tracker remote
494
+ --ci <remote> CI remote
495
+ --issue-provider <provider> Internal tracker provider
496
+ --customer-issue-provider <provider> Customer tracker provider
497
+ --delivery-mode <mode> Delivery policy
498
+ --default-branch <branch> Default branch
499
+ --require-ci-green <boolean> Require passing CI
500
+ --auto-close-issues <boolean> Close delivered issues
501
+ --issue-comment-on-cycle <boolean> Report issue cycles
502
+ --force-push-policy <policy> Force-push policy
503
+ --require-signed-commits <boolean> Require signed commits
504
+ --committer-name <name> Committer identity
505
+ --committer-email <email> Committer email
506
+ --signing-format <format> Signing format
507
+ --signing-key <key> Signing key
508
+ --signing-enforce <commits|tags|all> Signing enforcement
509
+ --tracker-actor-login <login> Internal tracker actor
510
+ --tracker-actor-via <via> Internal tracker access method
511
+ --customer-tracker-actor-login <login> Customer tracker actor
512
+ --customer-tracker-actor-via <via> Customer tracker access method
513
+ --worker-dispatch <choice> Worker dispatch policy
514
+ --providers <ids> Comma-separated provider IDs
515
+ `,
516
+ };
517
+ },
479
518
  async execute(ctx) {
480
519
  const [subcommand] = ctx.args;
481
520
  if (subcommand && subcommand !== 'project' && !subcommand.startsWith('--')) {
@@ -560,6 +599,8 @@ export const setupHandler = {
560
599
  }
561
600
  else {
562
601
  printPlan(plan);
602
+ if (options.workerDispatchChoice === 'enable')
603
+ ui.info('Next: aiwg doctor --probe-workers --qualify.');
563
604
  if (plan.workerDispatchOffer.shouldOffer) {
564
605
  ui.info(workerDispatchOfferHintWithArg(plan.workerDispatchOffer.detected));
565
606
  }
@@ -204,6 +204,7 @@ async function handleSteward(args, ctx) {
204
204
  aiwg steward — Provider capability awareness and command routing
205
205
 
206
206
  Usage:
207
+ aiwg steward decision-offload [--json] Offline advisory readiness and adoption report
207
208
  aiwg steward capabilities --provider <name> Capabilities for a specific provider
208
209
  aiwg steward capabilities --feature <name> Provider support matrix for a feature
209
210
  aiwg steward capabilities --all Full matrix (all providers x features)
@@ -231,6 +232,16 @@ async function handleSteward(args, ctx) {
231
232
  `);
232
233
  return;
233
234
  }
235
+ if (subcommand === 'decision-offload') {
236
+ const unknown = args.slice(1).filter(arg => arg !== '--json');
237
+ if (unknown.length)
238
+ throw new AiwgError({ code: 'ERR_USAGE_UNKNOWN_ARGUMENT',
239
+ message: `Unknown decision-offload argument: ${unknown[0]}`, exitCode: EXIT_CODES.USAGE });
240
+ const { buildDecisionOffloadSnapshot } = await import('../../decision/offload.js');
241
+ const decisionOffload = await buildDecisionOffloadSnapshot({ projectRoot: ctx?.cwd ?? process.cwd(), frameworkRoot: ctx?.frameworkRoot });
242
+ console.log(JSON.stringify(args.includes('--json') ? { decisionOffload } : decisionOffload, null, 2));
243
+ return;
244
+ }
234
245
  if (subcommand === 'permissions') {
235
246
  const operation = args[1];
236
247
  // `<namespace> --help` must reach the same usage block bare invocation prints (#2533).
@@ -21,6 +21,8 @@ import { sessionHandler } from "./session.js";
21
21
  import { feedbackHandler } from "./feedback.js";
22
22
  import { handlerResultFromError } from "../errors.js";
23
23
  import { getProjectDir } from "../../config/aiwg-config.js";
24
+ import { deployedSkillRoots } from "../../providers/deployed-skill-roots.js";
25
+ import { releaseSkillOwnership } from "../../providers/skill-ownership.mjs";
24
26
  import { formatDeployedWorkspaceSignalPlan, readWorkspaceSignalPlan } from "../workspace-signals.js";
25
27
  import * as path from "node:path";
26
28
  import * as fsSync from "node:fs";
@@ -32,6 +34,9 @@ export const quickrefHandler = {
32
34
  description: 'Generate and deploy an always-visible project quickref',
33
35
  category: 'project',
34
36
  aliases: [],
37
+ async help() {
38
+ return { exitCode: 0, message: 'Usage: aiwg quickref generate|deploy --project [--provider <id>] [--dry-run]', rawOutput: true };
39
+ },
35
40
  async execute(ctx) {
36
41
  const action = ctx.args.find(arg => !arg.startsWith('-')) ?? 'generate';
37
42
  if (!ctx.args.includes('--project')) {
@@ -147,6 +152,11 @@ export const mcpHandler = {
147
152
  description: "AIWG MCP server commands (serve, install, add, remove, update, list, inject, info)",
148
153
  category: "mcp",
149
154
  aliases: ["mcp", "aiwg-mcp"],
155
+ async help() {
156
+ const { main } = await import("../../mcp/cli.mjs");
157
+ await main(["--help"]);
158
+ return { exitCode: 0 };
159
+ },
150
160
  async execute(ctx) {
151
161
  try {
152
162
  // Dynamic import to avoid loading MCP dependencies unless needed
@@ -647,7 +657,15 @@ async function removeUserScopeDeploy(args) {
647
657
  continue;
648
658
  }
649
659
  try {
650
- await fs.rm(target, { recursive: true, force: true });
660
+ if (type === 'skills') {
661
+ const { resolveFrameworkDir } = await import('./use.js');
662
+ const released = releaseSkillOwnership(target, { frameworkSlug: resolveFrameworkDir(positional) ?? positional });
663
+ if (released === null)
664
+ continue;
665
+ }
666
+ else {
667
+ await fs.rm(target, { recursive: true, force: true });
668
+ }
651
669
  deletedHere++;
652
670
  totalDeleted++;
653
671
  }
@@ -770,6 +788,33 @@ export const removeHandler = {
770
788
  const projectDir = getProjectDir({ cwd: ctx.cwd }, ctx.args);
771
789
  const config = await readAiwgConfig(projectDir);
772
790
  const entry = config?.installed?.[positionalArg];
791
+ if (config && entry && entry.source !== 'project-local') {
792
+ const fs = await import('node:fs/promises');
793
+ const { resolveFrameworkDir } = await import('./use.js');
794
+ const frameworkSlug = resolveFrameworkDir(positionalArg) ?? positionalArg;
795
+ const dryRun = ctx.args.includes('--dry-run');
796
+ const providers = Object.keys(entry.deployedTo).filter(p => !providerParse.provider || p === providerParse.provider);
797
+ if (providerParse.provider && providers.length === 0) {
798
+ return { exitCode: 1, message: `Error: '${positionalArg}' is not deployed for provider '${providerParse.provider}'.` };
799
+ }
800
+ let released = 0;
801
+ for (const provider of providers) {
802
+ for (const root of deployedSkillRoots(projectDir, provider)) {
803
+ for (const name of await fs.readdir(root).catch(() => [])) {
804
+ if (releaseSkillOwnership(path.join(root, name), { frameworkSlug }, { dryRun }) !== null)
805
+ released++;
806
+ }
807
+ }
808
+ if (!dryRun && !ctx.args.includes('--keep-registry'))
809
+ delete entry.deployedTo[provider];
810
+ }
811
+ if (!dryRun && !ctx.args.includes('--keep-registry')) {
812
+ if (Object.keys(entry.deployedTo).length === 0)
813
+ delete config.installed[positionalArg];
814
+ await writeAiwgConfig(projectDir, config);
815
+ }
816
+ return { exitCode: 0, message: `${dryRun ? 'Would release' : 'Released'} ${released} skill ownership receipt(s); operator files preserved.` };
817
+ }
773
818
  if (config && entry?.source === 'project-local') {
774
819
  const force = ctx.args.includes('--force');
775
820
  const dryRun = ctx.args.includes('--dry-run');
@@ -1302,12 +1347,17 @@ export const indexHandler = {
1302
1347
  description: "Artifact index commands (build, query, deps, stats)",
1303
1348
  category: "index",
1304
1349
  aliases: [],
1350
+ async help() {
1351
+ const { printIndexUsage } = await import("../../artifacts/cli.js");
1352
+ printIndexUsage();
1353
+ return { exitCode: 0 };
1354
+ },
1305
1355
  async execute(ctx) {
1306
1356
  try {
1307
1357
  const { main } = await import("../../artifacts/cli.js");
1308
1358
  await main(ctx.args);
1309
1359
  return {
1310
- exitCode: 0,
1360
+ exitCode: Number(process.exitCode ?? 0),
1311
1361
  };
1312
1362
  }
1313
1363
  catch (error) {
@@ -1326,6 +1376,11 @@ export const corpusHandler = {
1326
1376
  description: "Research-corpus tools (radar-init, radar-status, radar-report)",
1327
1377
  category: "index",
1328
1378
  aliases: [],
1379
+ async help() {
1380
+ const { corpusMain } = await import("../../artifacts/corpus-tools/cli.js");
1381
+ await corpusMain(["--help"]);
1382
+ return { exitCode: 0 };
1383
+ },
1329
1384
  async execute(ctx) {
1330
1385
  try {
1331
1386
  const { corpusMain } = await import("../../artifacts/corpus-tools/cli.js");
@@ -76,6 +76,9 @@ export const uhpHandler = {
76
76
  description: 'Inspect and smoke-test an explicitly selected experimental UHP endpoint profile',
77
77
  category: 'toolsmith',
78
78
  aliases: [],
79
+ async help() {
80
+ return { exitCode: 0, message: usage(), rawOutput: true };
81
+ },
79
82
  async execute(ctx) {
80
83
  try {
81
84
  return await executeUhp(ctx);