@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.17

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 (466) hide show
  1. package/README.md +21 -1
  2. package/bin/aiwg.mjs +349 -0
  3. package/dist/src/a2a/agent-card.js +145 -0
  4. package/dist/src/a2a/client.js +411 -0
  5. package/dist/src/a2a/hitl-cli.js +171 -0
  6. package/dist/src/a2a/hitl-driver.js +370 -0
  7. package/dist/src/a2a/hitl.js +181 -0
  8. package/dist/src/a2a/http.js +193 -0
  9. package/dist/src/a2a/jcs.js +128 -0
  10. package/dist/src/a2a/jws.js +187 -0
  11. package/dist/src/a2a/types.js +24 -0
  12. package/dist/src/a2a/webhook.js +240 -0
  13. package/dist/src/activity-log/cli.js +348 -0
  14. package/dist/src/activity-log/parser.js +81 -0
  15. package/dist/src/activity-log/types.js +50 -0
  16. package/dist/src/agents/agent-deployer.js +367 -0
  17. package/dist/src/agents/agent-packager.js +271 -0
  18. package/dist/src/agents/agent-validator.js +271 -0
  19. package/dist/src/agents/grounding/knowledge-base.js +161 -0
  20. package/dist/src/agents/grounding/types.js +12 -0
  21. package/dist/src/agents/index.js +10 -0
  22. package/dist/src/agents/packaged-agent-inventory.js +75 -0
  23. package/dist/src/agents/types.js +7 -0
  24. package/dist/src/api/index.d.ts +10 -0
  25. package/dist/src/api/index.js +10 -0
  26. package/dist/src/artifacts/address-parser.js +73 -0
  27. package/dist/src/artifacts/audit/cli.js +183 -0
  28. package/dist/src/artifacts/audit/drift.js +122 -0
  29. package/dist/src/artifacts/audit/types.js +12 -0
  30. package/dist/src/artifacts/backends/graphology-backend.js +160 -0
  31. package/dist/src/artifacts/backends/json-backend.js +129 -0
  32. package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
  33. package/dist/src/artifacts/browser-export.js +622 -0
  34. package/dist/src/artifacts/capability-resolver.js +94 -0
  35. package/dist/src/artifacts/checksum-manifest.js +91 -0
  36. package/dist/src/artifacts/citation-parser.js +162 -0
  37. package/dist/src/artifacts/cli.js +1462 -0
  38. package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
  39. package/dist/src/artifacts/corpus-tools/cli.js +393 -0
  40. package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
  41. package/dist/src/artifacts/corpus-tools/curator.js +186 -0
  42. package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
  43. package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
  44. package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
  45. package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
  46. package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
  47. package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
  48. package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
  49. package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
  50. package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
  51. package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
  52. package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
  53. package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
  54. package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
  55. package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
  56. package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
  57. package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
  58. package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
  59. package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
  60. package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
  61. package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
  62. package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
  63. package/dist/src/artifacts/corpus-views/build.js +126 -0
  64. package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
  65. package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
  66. package/dist/src/artifacts/corpus-views/renderers.js +353 -0
  67. package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
  68. package/dist/src/artifacts/dep-graph.js +173 -0
  69. package/dist/src/artifacts/discover-facets.js +375 -0
  70. package/dist/src/artifacts/embedding-index.js +354 -0
  71. package/dist/src/artifacts/enrichment/cli.js +240 -0
  72. package/dist/src/artifacts/enrichment/prompt.js +47 -0
  73. package/dist/src/artifacts/enrichment/store.js +90 -0
  74. package/dist/src/artifacts/enrichment/types.js +12 -0
  75. package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
  76. package/dist/src/artifacts/fortemi-core-sync.js +251 -0
  77. package/dist/src/artifacts/fortemi-shard-export.js +44 -0
  78. package/dist/src/artifacts/fulltext.js +108 -0
  79. package/dist/src/artifacts/graph-backend.js +51 -0
  80. package/dist/src/artifacts/graph-query.js +247 -0
  81. package/dist/src/artifacts/hybrid-query.js +225 -0
  82. package/dist/src/artifacts/index-builder.js +1089 -0
  83. package/dist/src/artifacts/index-reader.js +112 -0
  84. package/dist/src/artifacts/index-status.js +193 -0
  85. package/dist/src/artifacts/legacy-index-migration.js +169 -0
  86. package/dist/src/artifacts/move.js +154 -0
  87. package/dist/src/artifacts/operational-state.js +239 -0
  88. package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
  89. package/dist/src/artifacts/query-engine.js +1955 -0
  90. package/dist/src/artifacts/source-graph.js +529 -0
  91. package/dist/src/artifacts/stats.js +169 -0
  92. package/dist/src/artifacts/types.js +606 -0
  93. package/dist/src/artifacts/views/cli.js +293 -0
  94. package/dist/src/artifacts/views/definition.js +170 -0
  95. package/dist/src/artifacts/views/store.js +149 -0
  96. package/dist/src/artifacts/views/types.js +8 -0
  97. package/dist/src/artifacts/watcher.js +255 -0
  98. package/dist/src/catalog/builtin-models.json +636 -0
  99. package/dist/src/catalog/cli.js +228 -0
  100. package/dist/src/catalog/cli.mjs +289 -0
  101. package/dist/src/catalog/index.js +15 -0
  102. package/dist/src/catalog/loader.js +217 -0
  103. package/dist/src/catalog/loader.mjs +251 -0
  104. package/dist/src/catalog/sources.json +41 -0
  105. package/dist/src/catalog/types.js +8 -0
  106. package/dist/src/channel/manager.mjs +504 -0
  107. package/dist/src/cli/agent-spawn.js +178 -0
  108. package/dist/src/cli/cli-extension-loader.js +245 -0
  109. package/dist/src/cli/command-log.js +275 -0
  110. package/dist/src/cli/config-loader.js +232 -0
  111. package/dist/src/cli/env.js +82 -0
  112. package/dist/src/cli/errors.js +150 -0
  113. package/dist/src/cli/find-package-root.js +40 -0
  114. package/dist/src/cli/git-hooks.js +250 -0
  115. package/dist/src/cli/handlers/agentcard.js +206 -0
  116. package/dist/src/cli/handlers/artifacts.js +76 -0
  117. package/dist/src/cli/handlers/best-practices-audit.js +280 -0
  118. package/dist/src/cli/handlers/cockpit.js +137 -0
  119. package/dist/src/cli/handlers/command-log.js +37 -0
  120. package/dist/src/cli/handlers/daemon.js +59 -0
  121. package/dist/src/cli/handlers/diagnose.js +300 -0
  122. package/dist/src/cli/handlers/execution-mode.js +105 -0
  123. package/dist/src/cli/handlers/feedback.js +341 -0
  124. package/dist/src/cli/handlers/help.js +147 -0
  125. package/dist/src/cli/handlers/index.js +302 -0
  126. package/dist/src/cli/handlers/init.js +179 -0
  127. package/dist/src/cli/handlers/install.js +129 -0
  128. package/dist/src/cli/handlers/issues.js +46 -0
  129. package/dist/src/cli/handlers/lint.js +42 -0
  130. package/dist/src/cli/handlers/local-executor.js +315 -0
  131. package/dist/src/cli/handlers/marketplace.js +168 -0
  132. package/dist/src/cli/handlers/mc.js +1010 -0
  133. package/dist/src/cli/handlers/models.js +352 -0
  134. package/dist/src/cli/handlers/packages.js +155 -0
  135. package/dist/src/cli/handlers/ralph-launcher.js +717 -0
  136. package/dist/src/cli/handlers/ralph.js +575 -0
  137. package/dist/src/cli/handlers/refresh.js +432 -0
  138. package/dist/src/cli/handlers/regenerate.js +336 -0
  139. package/dist/src/cli/handlers/repo-access.js +109 -0
  140. package/dist/src/cli/handlers/run.js +165 -0
  141. package/dist/src/cli/handlers/runtime-info.js +301 -0
  142. package/dist/src/cli/handlers/sandbox.js +197 -0
  143. package/dist/src/cli/handlers/scaffolding.js +149 -0
  144. package/dist/src/cli/handlers/script-runner.js +121 -0
  145. package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
  146. package/dist/src/cli/handlers/serve.js +1835 -0
  147. package/dist/src/cli/handlers/session.js +348 -0
  148. package/dist/src/cli/handlers/setup.js +440 -0
  149. package/dist/src/cli/handlers/skill-lint.js +367 -0
  150. package/dist/src/cli/handlers/skill-usage.js +74 -0
  151. package/dist/src/cli/handlers/steward.js +567 -0
  152. package/dist/src/cli/handlers/subcommands.js +1702 -0
  153. package/dist/src/cli/handlers/team.js +337 -0
  154. package/dist/src/cli/handlers/types.js +11 -0
  155. package/dist/src/cli/handlers/use.js +2772 -0
  156. package/dist/src/cli/handlers/utilities.js +703 -0
  157. package/dist/src/cli/handlers/version.js +134 -0
  158. package/dist/src/cli/handlers/workspace-context.js +93 -0
  159. package/dist/src/cli/handlers/workspace.js +126 -0
  160. package/dist/src/cli/help-generator.js +178 -0
  161. package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
  162. package/dist/src/cli/hooks/executor.js +96 -0
  163. package/dist/src/cli/hooks/index.js +15 -0
  164. package/dist/src/cli/hooks/registry.js +143 -0
  165. package/dist/src/cli/hooks/types.js +13 -0
  166. package/dist/src/cli/log.js +492 -0
  167. package/dist/src/cli/project-isolation/detect.js +70 -0
  168. package/dist/src/cli/project-isolation/index.js +7 -0
  169. package/dist/src/cli/project-isolation/signals.js +17 -0
  170. package/dist/src/cli/project-isolation/warning.js +102 -0
  171. package/dist/src/cli/prompt-utils.js +155 -0
  172. package/dist/src/cli/provider-deployment-plan.js +126 -0
  173. package/dist/src/cli/provider-resolution.js +119 -0
  174. package/dist/src/cli/router.js +305 -0
  175. package/dist/src/cli/scope-resolver.js +392 -0
  176. package/dist/src/cli/skill-usage.js +616 -0
  177. package/dist/src/cli/ui.js +224 -0
  178. package/dist/src/cli/watch-service.js +203 -0
  179. package/dist/src/cli/workflow-orchestrator.js +478 -0
  180. package/dist/src/cli/workspace-signals.js +321 -0
  181. package/dist/src/community/footer.js +14 -0
  182. package/dist/src/community/links.js +123 -0
  183. package/dist/src/community/milestones.js +46 -0
  184. package/dist/src/community/nudge-policy.js +93 -0
  185. package/dist/src/config/aiwg-config.js +883 -0
  186. package/dist/src/config/cli.js +703 -0
  187. package/dist/src/config/gitignore.js +156 -0
  188. package/dist/src/config/project-artifacts.js +76 -0
  189. package/dist/src/config/user-config.js +428 -0
  190. package/dist/src/config/user-registry.js +127 -0
  191. package/dist/src/config/workspace.js +276 -0
  192. package/dist/src/contributors/detect.js +39 -0
  193. package/dist/src/contributors/discover.js +172 -0
  194. package/dist/src/contributors/heuristic.js +186 -0
  195. package/dist/src/contributors/index.js +11 -0
  196. package/dist/src/contributors/types.js +13 -0
  197. package/dist/src/contributors/validation.js +116 -0
  198. package/dist/src/data/community.schema.json +43 -0
  199. package/dist/src/data/community.yaml +16 -0
  200. package/dist/src/extensions/capability-index.js +270 -0
  201. package/dist/src/extensions/claude-hooks-installer.js +268 -0
  202. package/dist/src/extensions/commands/definitions.js +3485 -0
  203. package/dist/src/extensions/deployment-registration.js +463 -0
  204. package/dist/src/extensions/index.js +22 -0
  205. package/dist/src/extensions/loader.js +132 -0
  206. package/dist/src/extensions/managed-marker.js +100 -0
  207. package/dist/src/extensions/manifest.js +196 -0
  208. package/dist/src/extensions/project-local-activity.js +114 -0
  209. package/dist/src/extensions/project-local-discovery.js +261 -0
  210. package/dist/src/extensions/project-local-doctor.js +281 -0
  211. package/dist/src/extensions/project-local-gitignore.js +176 -0
  212. package/dist/src/extensions/project-local-paths.js +121 -0
  213. package/dist/src/extensions/project-local-promote.js +218 -0
  214. package/dist/src/extensions/project-local-remove.js +373 -0
  215. package/dist/src/extensions/project-local-scaffold.js +252 -0
  216. package/dist/src/extensions/project-quickref.js +291 -0
  217. package/dist/src/extensions/registry.js +368 -0
  218. package/dist/src/extensions/shadow-resolver.js +271 -0
  219. package/dist/src/extensions/types.js +86 -0
  220. package/dist/src/extensions/upstream-registry.js +195 -0
  221. package/dist/src/extensions/validation.js +631 -0
  222. package/dist/src/features/catalog.js +88 -0
  223. package/dist/src/features/cli.js +197 -0
  224. package/dist/src/features/installer.js +57 -0
  225. package/dist/src/features/paths.js +14 -0
  226. package/dist/src/features/runtime.js +21 -0
  227. package/dist/src/features/status.js +134 -0
  228. package/dist/src/hooks/laziness-detection.js +532 -0
  229. package/dist/src/intake/git-history-analyzer.js +486 -0
  230. package/dist/src/intake/index.js +9 -0
  231. package/dist/src/issues/cli.js +327 -0
  232. package/dist/src/issues/index.js +5 -0
  233. package/dist/src/issues/live.js +154 -0
  234. package/dist/src/issues/local.js +666 -0
  235. package/dist/src/issues/sync.js +143 -0
  236. package/dist/src/issues/types.js +2 -0
  237. package/dist/src/issues/workflows.js +164 -0
  238. package/dist/src/kb/cli.js +173 -0
  239. package/dist/src/lint/cli.js +171 -0
  240. package/dist/src/lint/loader.js +225 -0
  241. package/dist/src/lint/reporters.js +141 -0
  242. package/dist/src/lint/runner.js +364 -0
  243. package/dist/src/lint/types.js +10 -0
  244. package/dist/src/marketplace/cache.js +110 -0
  245. package/dist/src/marketplace/identifier.js +63 -0
  246. package/dist/src/marketplace/registry.js +36 -0
  247. package/dist/src/marketplace/sources/clawhub.js +53 -0
  248. package/dist/src/marketplace/sources/git.js +45 -0
  249. package/dist/src/marketplace/types.js +9 -0
  250. package/dist/src/mcp/adapters/codex-runtime.js +224 -0
  251. package/dist/src/mcp/cli.mjs +1197 -0
  252. package/dist/src/mcp/elicitation.mjs +149 -0
  253. package/dist/src/mcp/helpers.mjs +287 -0
  254. package/dist/src/mcp/index.mjs +11 -0
  255. package/dist/src/mcp/profiles.js +263 -0
  256. package/dist/src/mcp/profiles.mjs +360 -0
  257. package/dist/src/mcp/registry.js +376 -0
  258. package/dist/src/mcp/registry.mjs +387 -0
  259. package/dist/src/mcp/server.mjs +633 -0
  260. package/dist/src/mcp/test-simple.mjs +271 -0
  261. package/dist/src/mcp/tools/command-run.mjs +101 -0
  262. package/dist/src/mcp/tools/discovery.mjs +291 -0
  263. package/dist/src/mcp/tools/interaction.mjs +87 -0
  264. package/dist/src/mcp/tools/orchestration.mjs +320 -0
  265. package/dist/src/mcp/tools/subsystems.mjs +640 -0
  266. package/dist/src/memory/cli.js +166 -0
  267. package/dist/src/memory/project-registry.js +282 -0
  268. package/dist/src/metrics/artifact-metrics.js +184 -0
  269. package/dist/src/metrics/context-budget.js +174 -0
  270. package/dist/src/metrics/token-counter.js +133 -0
  271. package/dist/src/models/config-loader.js +228 -0
  272. package/dist/src/models/index.js +22 -0
  273. package/dist/src/models/model-capabilities.v1.json +120 -0
  274. package/dist/src/models/model-catalog.v1.json +96 -0
  275. package/dist/src/models/model-discovery.js +521 -0
  276. package/dist/src/models/provider-models.js +73 -0
  277. package/dist/src/models/provider-policy.js +273 -0
  278. package/dist/src/models/resolver.js +245 -0
  279. package/dist/src/models/router.js +70 -0
  280. package/dist/src/models/types.js +8 -0
  281. package/dist/src/models/wrapper-deployment.js +178 -0
  282. package/dist/src/models/wrapper-route.js +54 -0
  283. package/dist/src/ops/cli.js +268 -0
  284. package/dist/src/ops/registry.js +623 -0
  285. package/dist/src/packages/adapters/clawhub.js +113 -0
  286. package/dist/src/packages/adapters/git.js +153 -0
  287. package/dist/src/packages/adapters/gitea.js +93 -0
  288. package/dist/src/packages/adapters/github.js +69 -0
  289. package/dist/src/packages/adapters/local-cache.js +89 -0
  290. package/dist/src/packages/package-registry.js +143 -0
  291. package/dist/src/packages/registry.js +238 -0
  292. package/dist/src/packages/types.js +11 -0
  293. package/dist/src/plugin/cross-framework-ops.js +475 -0
  294. package/dist/src/plugin/framework-config-loader.js +235 -0
  295. package/dist/src/plugin/framework-detector.js +186 -0
  296. package/dist/src/plugin/framework-isolator.js +341 -0
  297. package/dist/src/plugin/framework-migration.js +371 -0
  298. package/dist/src/plugin/metadata-validator.js +906 -0
  299. package/dist/src/plugin/plugin-installer.js +436 -0
  300. package/dist/src/plugin/plugin-status.js +369 -0
  301. package/dist/src/plugin/plugin-uninstaller.js +473 -0
  302. package/dist/src/plugin/registry-validator.js +344 -0
  303. package/dist/src/plugin/skill-command-translator.js +415 -0
  304. package/dist/src/plugin/workspace-creator.js +189 -0
  305. package/dist/src/plugin/workspace-migrator.js +821 -0
  306. package/dist/src/policy/authorization.js +390 -0
  307. package/dist/src/policy/repo-access.js +215 -0
  308. package/dist/src/provenance/cli.js +16 -0
  309. package/dist/src/providers/capability-matrix.js +300 -0
  310. package/dist/src/providers/capability-matrix.yaml +514 -0
  311. package/dist/src/providers/provider-definitions.js +977 -0
  312. package/dist/src/providers/provider-definitions.mjs +159 -0
  313. package/dist/src/providers/provider-inventory.js +169 -0
  314. package/dist/src/quality/feedback-ab.js +174 -0
  315. package/dist/src/quality/feedback-collector.js +176 -0
  316. package/dist/src/quality/feedback-tracker.js +123 -0
  317. package/dist/src/quality/patterns/adr.json +24 -0
  318. package/dist/src/quality/patterns/sad.json +24 -0
  319. package/dist/src/quality/patterns/test-plan.json +24 -0
  320. package/dist/src/quality/patterns/use-case.json +24 -0
  321. package/dist/src/quality/scoring.js +157 -0
  322. package/dist/src/reflections/cli.js +15 -0
  323. package/dist/src/release/plan.js +139 -0
  324. package/dist/src/research/cache/manager.js +227 -0
  325. package/dist/src/research/clients/arxiv.js +156 -0
  326. package/dist/src/research/clients/base.js +197 -0
  327. package/dist/src/research/clients/crossref.js +112 -0
  328. package/dist/src/research/clients/semantic-scholar.js +126 -0
  329. package/dist/src/research/clients/unpaywall.js +87 -0
  330. package/dist/src/research/index.js +14 -0
  331. package/dist/src/research/query-cli.js +336 -0
  332. package/dist/src/research/services/acquisition.js +313 -0
  333. package/dist/src/research/services/archival.js +225 -0
  334. package/dist/src/research/services/citation.js +279 -0
  335. package/dist/src/research/services/discovery.js +243 -0
  336. package/dist/src/research/services/documentation.js +269 -0
  337. package/dist/src/research/services/index.js +14 -0
  338. package/dist/src/research/services/provenance.js +279 -0
  339. package/dist/src/research/services/quality.js +370 -0
  340. package/dist/src/research/services/types.js +7 -0
  341. package/dist/src/research/storage-cli.js +20 -0
  342. package/dist/src/research/types.js +47 -0
  343. package/dist/src/resources/index.d.ts +2 -0
  344. package/dist/src/resources/index.js +2 -0
  345. package/dist/src/resources/web-release.d.ts +89 -0
  346. package/dist/src/resources/web-release.js +882 -0
  347. package/dist/src/rlm/cache/cli.js +162 -0
  348. package/dist/src/rlm/cache/hash.js +35 -0
  349. package/dist/src/rlm/cache/store.js +170 -0
  350. package/dist/src/rlm/cache/types.js +8 -0
  351. package/dist/src/rlm/cli.js +650 -0
  352. package/dist/src/serve/a2a-terminal-observer.js +120 -0
  353. package/dist/src/serve/agent-router.js +205 -0
  354. package/dist/src/serve/dispatch-router.js +171 -0
  355. package/dist/src/serve/executor-registry.js +715 -0
  356. package/dist/src/serve/mission-conductor.js +177 -0
  357. package/dist/src/serve/orchestrator-adapter.js +113 -0
  358. package/dist/src/serve/orchestrator-override.js +94 -0
  359. package/dist/src/serve/orchestrator-pty.js +133 -0
  360. package/dist/src/serve/pty-bridge.js +799 -0
  361. package/dist/src/serve/sandbox-registry.js +832 -0
  362. package/dist/src/serve/screen-reader.js +228 -0
  363. package/dist/src/serve/stack-adapters.js +68 -0
  364. package/dist/src/serve/telemetry.js +143 -0
  365. package/dist/src/skills/adapters/clawhub.js +250 -0
  366. package/dist/src/skills/adapters/local.js +335 -0
  367. package/dist/src/skills/adapters/openclaw.js +316 -0
  368. package/dist/src/skills/cli.js +334 -0
  369. package/dist/src/skills/registry.js +117 -0
  370. package/dist/src/skills/run.js +259 -0
  371. package/dist/src/skills/runtime.js +94 -0
  372. package/dist/src/skills/types.js +10 -0
  373. package/dist/src/smiths/agentsmith/demo.js +116 -0
  374. package/dist/src/smiths/agentsmith/examples.js +300 -0
  375. package/dist/src/smiths/agentsmith/generator.js +503 -0
  376. package/dist/src/smiths/agentsmith/index.js +11 -0
  377. package/dist/src/smiths/agentsmith/types.js +8 -0
  378. package/dist/src/smiths/commandsmith/example.js +220 -0
  379. package/dist/src/smiths/commandsmith/generator.js +288 -0
  380. package/dist/src/smiths/commandsmith/index.js +41 -0
  381. package/dist/src/smiths/commandsmith/templates.js +296 -0
  382. package/dist/src/smiths/commandsmith/types.js +7 -0
  383. package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
  384. package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
  385. package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
  386. package/dist/src/smiths/context-pipeline/discovery.js +187 -0
  387. package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
  388. package/dist/src/smiths/context-pipeline/finalization.js +147 -0
  389. package/dist/src/smiths/context-pipeline/generator.js +477 -0
  390. package/dist/src/smiths/context-pipeline/index.js +30 -0
  391. package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
  392. package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
  393. package/dist/src/smiths/context-pipeline/overflow.js +212 -0
  394. package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
  395. package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
  396. package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
  397. package/dist/src/smiths/context-pipeline/types.js +23 -0
  398. package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
  399. package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
  400. package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
  401. package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
  402. package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
  403. package/dist/src/smiths/hook-bridge/index.js +79 -0
  404. package/dist/src/smiths/hook-bridge/loader.js +116 -0
  405. package/dist/src/smiths/hook-bridge/shim.js +89 -0
  406. package/dist/src/smiths/hook-bridge/types.js +31 -0
  407. package/dist/src/smiths/index.js +39 -0
  408. package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
  409. package/dist/src/smiths/mcpsmith/example.js +119 -0
  410. package/dist/src/smiths/mcpsmith/generator.js +236 -0
  411. package/dist/src/smiths/mcpsmith/index.js +17 -0
  412. package/dist/src/smiths/mcpsmith/types.js +10 -0
  413. package/dist/src/smiths/platform-paths.js +101 -0
  414. package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
  415. package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
  416. package/dist/src/smiths/skillsmith/demo.js +83 -0
  417. package/dist/src/smiths/skillsmith/examples.js +161 -0
  418. package/dist/src/smiths/skillsmith/generator.js +316 -0
  419. package/dist/src/smiths/skillsmith/index.js +12 -0
  420. package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
  421. package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
  422. package/dist/src/smiths/skillsmith/types.js +9 -0
  423. package/dist/src/smiths/toolsmith/index.js +10 -0
  424. package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
  425. package/dist/src/smiths/toolsmith/types.js +8 -0
  426. package/dist/src/storage/backends/fortemi.js +227 -0
  427. package/dist/src/storage/backends/fs.js +134 -0
  428. package/dist/src/storage/backends/logseq.js +309 -0
  429. package/dist/src/storage/backends/obsidian.js +233 -0
  430. package/dist/src/storage/cli.js +468 -0
  431. package/dist/src/storage/config.js +272 -0
  432. package/dist/src/storage/index.js +108 -0
  433. package/dist/src/storage/subsystem-cli.js +201 -0
  434. package/dist/src/storage/types.js +33 -0
  435. package/dist/src/testing/corpus/corpus-builder.js +383 -0
  436. package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
  437. package/dist/src/testing/corpus/index.js +10 -0
  438. package/dist/src/testing/fixtures/index.js +9 -0
  439. package/dist/src/testing/fixtures/test-data-factory.js +472 -0
  440. package/dist/src/testing/generators/index.js +11 -0
  441. package/dist/src/testing/generators/test-case-generator.js +393 -0
  442. package/dist/src/testing/generators/test-code-generator.js +384 -0
  443. package/dist/src/testing/generators/use-case-parser.js +325 -0
  444. package/dist/src/testing/index.js +11 -0
  445. package/dist/src/tracker/capability-protocol.js +118 -0
  446. package/dist/src/update/checker.mjs +396 -0
  447. package/dist/src/update/notifier.mjs +235 -0
  448. package/dist/src/writing/content-diversifier.js +804 -0
  449. package/dist/src/writing/example-generator.js +959 -0
  450. package/dist/src/writing/example-templates.js +99 -0
  451. package/dist/src/writing/pattern-library.js +486 -0
  452. package/dist/src/writing/patterns/banned-phrases.json +4413 -0
  453. package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
  454. package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
  455. package/dist/src/writing/patterns/hedging-language.json +2096 -0
  456. package/dist/src/writing/patterns/transition-words.json +1285 -0
  457. package/dist/src/writing/patterns/weak-verbs.json +1112 -0
  458. package/dist/src/writing/prompt-optimizer.js +660 -0
  459. package/dist/src/writing/prompt-templates.js +583 -0
  460. package/dist/src/writing/scoring-config-loader.js +168 -0
  461. package/dist/src/writing/validation-engine.js +595 -0
  462. package/dist/src/writing/validation-rules.js +380 -0
  463. package/dist/src/writing/voice-analyzer.js +439 -0
  464. package/dist/src/writing/voice-calibration.js +661 -0
  465. package/dist/src/writing/voice-profiles.json +588 -0
  466. package/package.json +64 -9
@@ -0,0 +1,640 @@
1
+ /**
2
+ * AIWG MCP Subsystem Toolsets
3
+ *
4
+ * Exposes AIWG's CLI subsystems (memory, kb, reflections, provenance,
5
+ * research-store, activity-log, index, ralph, mc, ops) as MCP toolsets.
6
+ * Each toolset is opt-in via AIWG_MCP_TOOLSETS env var or `aiwg mcp
7
+ * serve --toolsets=` flag (#1332 / S18).
8
+ *
9
+ * Default toolset enabled: `core` (already registered by discovery.mjs +
10
+ * command-run.mjs in server.mjs).
11
+ *
12
+ * @architecture @.aiwg/architecture/sketch-hermes-mcp-parity.md DD-3
13
+ * @issues #1322 (memory) #1323 (kb) #1324 (provenance) #1325 (activity-log)
14
+ * #1326 (index) #1327 (ralph) #1328 (ops) #1331 (mc) #1332 (dispatch)
15
+ */
16
+
17
+ import { z } from 'zod';
18
+ import { runAiwgCli, mcpError, mcpJson } from '../helpers.mjs';
19
+ import { registerFlowToolset, registerMissionToolset } from './orchestration.mjs';
20
+
21
+ /**
22
+ * Wrap an `aiwg <subsystem> <verb>` CLI call as an MCP tool.
23
+ *
24
+ * @param {object} cfg
25
+ * @param {string} cfg.name MCP tool name
26
+ * @param {string} cfg.subsystem CLI subsystem (e.g. "memory")
27
+ * @param {string} cfg.verb CLI verb (e.g. "list")
28
+ * @param {string} cfg.title MCP tool title
29
+ * @param {string} cfg.description Human-readable description
30
+ * @param {object} cfg.inputSchema zod schema
31
+ * @param {boolean} [cfg.destructive] Mark as destructive
32
+ * @param {boolean} [cfg.readOnly] Mark as read-only
33
+ * @param {(args: object) => string[]} cfg.buildArgs Convert MCP args to CLI argv tail (excluding subsystem + verb)
34
+ * @param {(args: object) => string|undefined} [cfg.buildInput] Optional stdin payload (for put commands)
35
+ */
36
+ function registerSubsystemTool(server, cfg) {
37
+ const {
38
+ name,
39
+ subsystem,
40
+ verb,
41
+ title,
42
+ description,
43
+ inputSchema,
44
+ destructive = false,
45
+ readOnly = false,
46
+ buildArgs,
47
+ buildInput,
48
+ } = cfg;
49
+
50
+ server.registerTool(name, {
51
+ title,
52
+ description,
53
+ inputSchema,
54
+ annotations: {
55
+ readOnlyHint: readOnly,
56
+ destructiveHint: destructive,
57
+ },
58
+ }, async (args) => {
59
+ try {
60
+ const cliArgs = [subsystem, verb, ...buildArgs(args)];
61
+ const input = buildInput ? buildInput(args) : undefined;
62
+ const { stdout, stderr, code } = await runAiwgCli(cliArgs, { input });
63
+ if (code !== 0) {
64
+ return mcpError(`${name} failed (exit ${code}): ${stderr || stdout}`);
65
+ }
66
+ // Prefer JSON if the output parses
67
+ try {
68
+ const parsed = JSON.parse(stdout);
69
+ return mcpJson(parsed);
70
+ } catch {
71
+ return mcpJson({ output: stdout, stderr });
72
+ }
73
+ } catch (err) {
74
+ return mcpError(`${name}: ${err.message}`);
75
+ }
76
+ });
77
+ }
78
+
79
+ // ============================================================================
80
+ // Storage subsystems (memory, kb, reflections, provenance, research-store)
81
+ //
82
+ // All five share the same CLI surface: path, list, get, put, delete.
83
+ // Generated via a single factory below.
84
+ // ============================================================================
85
+
86
+ const STORAGE_SUBSYSTEMS = [
87
+ { name: 'memory', toolset: 'memory', project: true, description: 'Project memory / persistent agent recall' },
88
+ { name: 'reflections', toolset: 'memory', project: true, description: 'Agent reflection memory' },
89
+ { name: 'kb', toolset: 'kb', project: true, description: 'Project knowledge base' },
90
+ { name: 'provenance', toolset: 'research', project: true, description: 'W3C PROV records' },
91
+ { name: 'research-store', toolset: 'research', project: true, description: 'Research corpus' },
92
+ ];
93
+
94
+ function registerStorageSubsystem(server, sub) {
95
+ const { name, description } = sub;
96
+
97
+ registerSubsystemTool(server, {
98
+ name: `${name}-list`,
99
+ subsystem: name,
100
+ verb: 'list',
101
+ title: `List ${description} entries`,
102
+ description: `List entries in the ${name} subsystem. Mirrors \`aiwg ${name} list --json\`.`,
103
+ inputSchema: {
104
+ prefix: z.string().optional().describe('Filter by path prefix'),
105
+ },
106
+ readOnly: true,
107
+ buildArgs: ({ prefix }) => {
108
+ const args = ['--json'];
109
+ if (prefix) args.push('--prefix', prefix);
110
+ return args;
111
+ },
112
+ });
113
+
114
+ registerSubsystemTool(server, {
115
+ name: `${name}-get`,
116
+ subsystem: name,
117
+ verb: 'get',
118
+ title: `Get ${description} entry`,
119
+ description: `Read an entry from the ${name} subsystem. Mirrors \`aiwg ${name} get <path>\`.`,
120
+ inputSchema: {
121
+ path: z.string().describe('Entry path/key'),
122
+ },
123
+ readOnly: true,
124
+ buildArgs: ({ path }) => [path],
125
+ });
126
+
127
+ registerSubsystemTool(server, {
128
+ name: `${name}-put`,
129
+ subsystem: name,
130
+ verb: 'put',
131
+ title: `Put ${description} entry`,
132
+ description: `Write content to an entry in the ${name} subsystem. Mirrors \`aiwg ${name} put <path>\` with stdin.`,
133
+ inputSchema: {
134
+ path: z.string().describe('Entry path/key'),
135
+ content: z.string().describe('Content to write (stdin to CLI)'),
136
+ },
137
+ destructive: false, // append/upsert semantics
138
+ buildArgs: ({ path }) => [path],
139
+ buildInput: ({ content }) => content,
140
+ });
141
+
142
+ registerSubsystemTool(server, {
143
+ name: `${name}-delete`,
144
+ subsystem: name,
145
+ verb: 'delete',
146
+ title: `Delete ${description} entry`,
147
+ description: `Delete an entry. No-op if missing. Mirrors \`aiwg ${name} delete <path>\`.`,
148
+ inputSchema: {
149
+ path: z.string().describe('Entry path/key'),
150
+ },
151
+ destructive: true,
152
+ buildArgs: ({ path }) => [path],
153
+ });
154
+
155
+ registerSubsystemTool(server, {
156
+ name: `${name}-path`,
157
+ subsystem: name,
158
+ verb: 'path',
159
+ title: `${description} resolved path`,
160
+ description: `Resolve the underlying physical path (fs backend). Mirrors \`aiwg ${name} path\`.`,
161
+ inputSchema: {
162
+ subpath: z.string().optional().describe('Optional subpath'),
163
+ },
164
+ readOnly: true,
165
+ buildArgs: ({ subpath }) => {
166
+ const args = ['--json'];
167
+ if (subpath) args.unshift(subpath);
168
+ return args;
169
+ },
170
+ });
171
+ }
172
+
173
+ // ============================================================================
174
+ // activity-log
175
+ // ============================================================================
176
+
177
+ function registerActivityLogToolset(server) {
178
+ registerSubsystemTool(server, {
179
+ name: 'activity-log-show',
180
+ subsystem: 'activity-log',
181
+ verb: 'show',
182
+ title: 'Show activity log',
183
+ description: 'Show the AIWG activity log (chronological event stream). Mirrors `aiwg activity-log show`.',
184
+ inputSchema: {
185
+ since: z.string().optional().describe('Filter by date YYYY-MM-DD'),
186
+ operation: z.string().optional().describe('Filter by operation token (e.g. "create", "deploy")'),
187
+ limit: z.number().int().min(1).max(1000).default(100),
188
+ },
189
+ readOnly: true,
190
+ buildArgs: ({ since, operation, limit }) => {
191
+ const args = [];
192
+ if (since) args.push('--since', since);
193
+ if (operation) args.push('--operation', operation);
194
+ if (limit) args.push('--limit', String(limit));
195
+ return args;
196
+ },
197
+ });
198
+
199
+ registerSubsystemTool(server, {
200
+ name: 'activity-log-append',
201
+ subsystem: 'activity-log',
202
+ verb: 'append',
203
+ title: 'Append activity log entry',
204
+ description: 'Append a one-line event. Mirrors `aiwg activity-log append <op> "<summary>"`.',
205
+ inputSchema: {
206
+ operation: z.string().describe('Operation token (e.g. "create", "deploy", "lint")'),
207
+ summary: z.string().describe('One-line summary (<120 chars)'),
208
+ },
209
+ buildArgs: ({ operation, summary }) => [operation, summary],
210
+ });
211
+
212
+ registerSubsystemTool(server, {
213
+ name: 'activity-log-stats',
214
+ subsystem: 'activity-log',
215
+ verb: 'stats',
216
+ title: 'Activity log stats',
217
+ description: 'Summary statistics over the activity log. Mirrors `aiwg activity-log stats`.',
218
+ inputSchema: {},
219
+ readOnly: true,
220
+ buildArgs: () => [],
221
+ });
222
+ }
223
+
224
+ // ============================================================================
225
+ // index
226
+ // ============================================================================
227
+
228
+ function registerIndexToolset(server) {
229
+ registerSubsystemTool(server, {
230
+ name: 'index-build',
231
+ subsystem: 'index',
232
+ verb: 'build',
233
+ title: 'Build artifact index',
234
+ description: 'Rebuild the artifact index (project / codebase / framework / user graphs). Mirrors `aiwg index build`.',
235
+ inputSchema: {
236
+ force: z.boolean().default(false).describe('Force full rebuild'),
237
+ graph: z.enum(['project', 'codebase', 'source', 'user', 'framework']).optional().describe('Restrict to one graph'),
238
+ },
239
+ buildArgs: ({ force, graph }) => {
240
+ const args = [];
241
+ if (force) args.push('--force');
242
+ if (graph) args.push('--graph', graph);
243
+ return args;
244
+ },
245
+ });
246
+
247
+ registerSubsystemTool(server, {
248
+ name: 'index-query',
249
+ subsystem: 'index',
250
+ verb: 'query',
251
+ title: 'Query artifact index',
252
+ description: 'Search artifacts by keyword/type/phase/tags. Mirrors `aiwg index query`.',
253
+ inputSchema: {
254
+ keyword: z.string().optional().describe('Keyword query'),
255
+ type: z.string().optional().describe('Artifact type filter'),
256
+ limit: z.number().int().min(1).max(500).default(50),
257
+ },
258
+ readOnly: true,
259
+ buildArgs: ({ keyword, type, limit }) => {
260
+ const args = ['--json'];
261
+ if (keyword) args.push(keyword);
262
+ if (type) args.push('--type', type);
263
+ if (limit) args.push('--limit', String(limit));
264
+ return args;
265
+ },
266
+ });
267
+
268
+ registerSubsystemTool(server, {
269
+ name: 'index-deps',
270
+ subsystem: 'index',
271
+ verb: 'deps',
272
+ title: 'Artifact dependency graph',
273
+ description: 'Show dependency relationships for an artifact. Mirrors `aiwg index deps <path>`.',
274
+ inputSchema: {
275
+ artifact: z.string().describe('Artifact path or ID'),
276
+ direction: z.enum(['upstream', 'downstream', 'both']).default('both'),
277
+ },
278
+ readOnly: true,
279
+ buildArgs: ({ artifact, direction }) => {
280
+ const args = [artifact, '--json'];
281
+ if (direction) args.push('--direction', direction);
282
+ return args;
283
+ },
284
+ });
285
+
286
+ registerSubsystemTool(server, {
287
+ name: 'index-stats',
288
+ subsystem: 'index',
289
+ verb: 'stats',
290
+ title: 'Index statistics',
291
+ description: 'Artifact counts by phase/type, graph metrics, coverage. Mirrors `aiwg index stats`.',
292
+ inputSchema: {},
293
+ readOnly: true,
294
+ buildArgs: () => ['--json'],
295
+ });
296
+ }
297
+
298
+ // ============================================================================
299
+ // ralph (agent loop) — session-id async pattern
300
+ // ============================================================================
301
+
302
+ function registerRalphToolset(server) {
303
+ // ralph start is a command, not a subcommand. We use the top-level `ralph` command.
304
+ server.registerTool('ralph-start', {
305
+ title: 'Start AIWG Ralph (agent loop)',
306
+ description: 'Begin a Ralph iterative agent loop. Returns immediately with a session id; status polled via `ralph-status`. Mirrors `aiwg ralph "<task>" --completion "<criteria>"`.',
307
+ inputSchema: {
308
+ task: z.string().describe('Task description'),
309
+ completion: z.string().describe('Measurable completion criteria (verification command)'),
310
+ max_cycles: z.number().int().min(1).max(500).default(20),
311
+ confirmed: z.boolean().default(false).describe('Required (Ralph is long-running)'),
312
+ },
313
+ annotations: { destructiveHint: true },
314
+ }, async ({ task, completion, max_cycles, confirmed }) => {
315
+ if (!confirmed) {
316
+ return mcpError(
317
+ `ralph-start is a long-running agent loop. Re-invoke with confirmed=true to proceed.`,
318
+ { requiresConfirmation: true, remediation: 'Surface task/completion/max_cycles to the user before confirming.' }
319
+ );
320
+ }
321
+ try {
322
+ // Spawn detached: kick off the loop in background; return immediately
323
+ const { stdout, stderr, code } = await runAiwgCli(
324
+ ['ralph', task, '--completion', completion, '--max-cycles', String(max_cycles), '--background'],
325
+ { timeoutMs: 10_000 }
326
+ );
327
+ if (code !== 0) return mcpError(`ralph-start failed: ${stderr}`);
328
+ return mcpJson({ message: 'ralph started', stdout, stderr });
329
+ } catch (err) {
330
+ return mcpError(`ralph-start: ${err.message}`);
331
+ }
332
+ });
333
+
334
+ registerSubsystemTool(server, {
335
+ name: 'ralph-status',
336
+ subsystem: 'ralph-status',
337
+ verb: '',
338
+ title: 'Ralph loop status',
339
+ description: 'Show status of running/recent Ralph loops. Mirrors `aiwg ralph-status`.',
340
+ inputSchema: {
341
+ session_id: z.string().optional().describe('Specific session id (default: all running)'),
342
+ all: z.boolean().default(false).describe('Include completed/failed loops'),
343
+ },
344
+ readOnly: true,
345
+ buildArgs: ({ session_id, all }) => {
346
+ const args = ['--json'];
347
+ if (session_id) args.push('--session', session_id);
348
+ if (all) args.push('--all');
349
+ return args;
350
+ },
351
+ });
352
+
353
+ registerSubsystemTool(server, {
354
+ name: 'ralph-abort',
355
+ subsystem: 'ralph-abort',
356
+ verb: '',
357
+ title: 'Abort Ralph loop',
358
+ description: 'Abort a running Ralph loop. Mirrors `aiwg ralph-abort`.',
359
+ inputSchema: {
360
+ session_id: z.string().describe('Session id'),
361
+ confirmed: z.boolean().default(false),
362
+ },
363
+ destructive: true,
364
+ buildArgs: ({ session_id, confirmed }) => {
365
+ if (!confirmed) throw new Error('ralph-abort requires confirmed=true');
366
+ return ['--session', session_id];
367
+ },
368
+ });
369
+
370
+ registerSubsystemTool(server, {
371
+ name: 'ralph-attach',
372
+ subsystem: 'ralph-attach',
373
+ verb: '',
374
+ title: 'Attach to running Ralph loop',
375
+ description: 'Attach to a running external agent loop. Mirrors `aiwg ralph-attach`.',
376
+ inputSchema: {
377
+ session_id: z.string().describe('Session id'),
378
+ },
379
+ readOnly: true,
380
+ buildArgs: ({ session_id }) => ['--session', session_id, '--json'],
381
+ });
382
+ }
383
+
384
+ // ============================================================================
385
+ // mc (Mission Control)
386
+ // ============================================================================
387
+
388
+ function registerMcToolset(server) {
389
+ registerSubsystemTool(server, {
390
+ name: 'mc-start',
391
+ subsystem: 'mc',
392
+ verb: 'start',
393
+ title: 'Start Mission Control session',
394
+ description: 'Begin a multi-loop background orchestration session. Mirrors `aiwg mc start`.',
395
+ inputSchema: {
396
+ name: z.string().optional().describe('Session label'),
397
+ },
398
+ buildArgs: ({ name }) => {
399
+ const args = [];
400
+ if (name) args.push('--name', name);
401
+ return args;
402
+ },
403
+ });
404
+
405
+ registerSubsystemTool(server, {
406
+ name: 'mc-dispatch',
407
+ subsystem: 'mc',
408
+ verb: 'dispatch',
409
+ title: 'Dispatch mission to MC session',
410
+ description: 'Add a background mission to an MC session. Mirrors `aiwg mc dispatch <id> "<objective>"`.',
411
+ inputSchema: {
412
+ session_id: z.string().describe('Session id'),
413
+ objective: z.string().describe('Mission objective'),
414
+ completion: z.string().optional().describe('Completion criteria'),
415
+ max_iterations: z.number().int().positive().optional().describe('Ralph iteration cap'),
416
+ max_total_tokens: z.number().int().positive().optional().describe('Hard cumulative token ceiling'),
417
+ max_output_tokens: z.number().int().positive().optional().describe('Hard cumulative output-token ceiling'),
418
+ max_tool_calls: z.number().int().positive().optional().describe('Hard cumulative tool-call ceiling'),
419
+ max_total_cost: z.number().positive().optional().describe('Hard cumulative provider-reported spend ceiling'),
420
+ max_wall_clock_minutes: z.number().positive().optional().describe('Hard cumulative runtime ceiling'),
421
+ exploration_quota: z.number().int().positive().optional().describe('Require structural variant after this many flat cycles (off unless declared; no default K)'),
422
+ budget_stop_policy: z.enum(['completion-wins', 'budget-wins']).optional().describe('Stop semantics when the completing iteration crosses a ceiling (default: completion-wins)'),
423
+ },
424
+ buildArgs: ({
425
+ session_id,
426
+ objective,
427
+ completion,
428
+ max_iterations,
429
+ max_total_tokens,
430
+ max_output_tokens,
431
+ max_tool_calls,
432
+ max_total_cost,
433
+ max_wall_clock_minutes,
434
+ exploration_quota,
435
+ budget_stop_policy,
436
+ }) => {
437
+ const args = [session_id, objective];
438
+ if (completion) args.push('--completion', completion);
439
+ if (max_iterations) args.push('--max-iterations', String(max_iterations));
440
+ if (max_total_tokens) args.push('--max-total-tokens', String(max_total_tokens));
441
+ if (max_output_tokens) args.push('--max-output-tokens', String(max_output_tokens));
442
+ if (max_tool_calls) args.push('--max-tool-calls', String(max_tool_calls));
443
+ if (max_total_cost) args.push('--max-total-cost', String(max_total_cost));
444
+ if (max_wall_clock_minutes) args.push('--max-wall-clock-minutes', String(max_wall_clock_minutes));
445
+ if (exploration_quota) args.push('--exploration-quota', String(exploration_quota));
446
+ if (budget_stop_policy) args.push('--budget-stop-policy', budget_stop_policy);
447
+ return args;
448
+ },
449
+ });
450
+
451
+ registerSubsystemTool(server, {
452
+ name: 'mc-status',
453
+ subsystem: 'mc',
454
+ verb: 'status',
455
+ title: 'MC session status',
456
+ description: 'View status of all missions in MC sessions. Mirrors `aiwg mc status`.',
457
+ inputSchema: {
458
+ session_id: z.string().optional(),
459
+ },
460
+ readOnly: true,
461
+ buildArgs: ({ session_id }) => {
462
+ const args = ['--json'];
463
+ if (session_id) args.push('--session', session_id);
464
+ return args;
465
+ },
466
+ });
467
+
468
+ registerSubsystemTool(server, {
469
+ name: 'mc-stop',
470
+ subsystem: 'mc',
471
+ verb: 'stop',
472
+ title: 'Stop MC session',
473
+ description: 'Shut down a Mission Control session. Mirrors `aiwg mc stop <id>`.',
474
+ inputSchema: {
475
+ session_id: z.string(),
476
+ confirmed: z.boolean().default(false),
477
+ },
478
+ destructive: true,
479
+ buildArgs: ({ session_id, confirmed }) => {
480
+ if (!confirmed) throw new Error('mc-stop requires confirmed=true');
481
+ return [session_id];
482
+ },
483
+ });
484
+
485
+ registerSubsystemTool(server, {
486
+ name: 'mc-list',
487
+ subsystem: 'mc',
488
+ verb: 'list',
489
+ title: 'List MC sessions',
490
+ description: 'List all active/recent MC sessions. Mirrors `aiwg mc list`.',
491
+ inputSchema: {},
492
+ readOnly: true,
493
+ buildArgs: () => ['--json'],
494
+ });
495
+ }
496
+
497
+ // ============================================================================
498
+ // ops
499
+ // ============================================================================
500
+
501
+ function registerOpsToolset(server) {
502
+ registerSubsystemTool(server, {
503
+ name: 'ops-status',
504
+ subsystem: 'ops',
505
+ verb: 'status',
506
+ title: 'Ops workspace status',
507
+ description: 'Show ops workspace health. Mirrors `aiwg ops status`.',
508
+ inputSchema: {
509
+ all: z.boolean().default(false),
510
+ },
511
+ readOnly: true,
512
+ buildArgs: ({ all }) => {
513
+ const args = ['--json'];
514
+ if (all) args.push('--all');
515
+ return args;
516
+ },
517
+ });
518
+
519
+ registerSubsystemTool(server, {
520
+ name: 'ops-list',
521
+ subsystem: 'ops',
522
+ verb: 'list',
523
+ title: 'List ops workspaces',
524
+ description: 'List registered ops workspaces. Mirrors `aiwg ops list`.',
525
+ inputSchema: {},
526
+ readOnly: true,
527
+ buildArgs: () => ['--json'],
528
+ });
529
+
530
+ registerSubsystemTool(server, {
531
+ name: 'ops-use',
532
+ subsystem: 'ops',
533
+ verb: 'use',
534
+ title: 'Switch ops workspace',
535
+ description: 'Switch active ops workspace. Mirrors `aiwg ops use <workspace>`.',
536
+ inputSchema: {
537
+ workspace: z.string(),
538
+ },
539
+ buildArgs: ({ workspace }) => [workspace],
540
+ });
541
+
542
+ registerSubsystemTool(server, {
543
+ name: 'ops-push',
544
+ subsystem: 'ops',
545
+ verb: 'push',
546
+ title: 'Push ops workspace repos',
547
+ description: 'Push workspace repos to remote. DESTRUCTIVE — affects shared state. Mirrors `aiwg ops push`.',
548
+ inputSchema: {
549
+ workspace: z.string().optional(),
550
+ confirmed: z.boolean().default(false),
551
+ },
552
+ destructive: true,
553
+ buildArgs: ({ workspace, confirmed }) => {
554
+ if (!confirmed) throw new Error('ops-push requires confirmed=true');
555
+ const args = [];
556
+ if (workspace) args.push('--workspace', workspace);
557
+ return args;
558
+ },
559
+ });
560
+ }
561
+
562
+ // ============================================================================
563
+ // Toolset registry + dispatch (#1332 / S18)
564
+ // ============================================================================
565
+
566
+ /**
567
+ * Known toolsets. Each maps to a registration function. The `core` toolset
568
+ * is always registered by server.mjs (discovery + command-run).
569
+ */
570
+ const TOOLSET_REGISTRY = {
571
+ flows: registerFlowToolset,
572
+ missions: registerMissionToolset,
573
+ memory: (server) => {
574
+ registerStorageSubsystem(server, STORAGE_SUBSYSTEMS.find(s => s.name === 'memory'));
575
+ registerStorageSubsystem(server, STORAGE_SUBSYSTEMS.find(s => s.name === 'reflections'));
576
+ },
577
+ kb: (server) => {
578
+ registerStorageSubsystem(server, STORAGE_SUBSYSTEMS.find(s => s.name === 'kb'));
579
+ },
580
+ research: (server) => {
581
+ registerStorageSubsystem(server, STORAGE_SUBSYSTEMS.find(s => s.name === 'provenance'));
582
+ registerStorageSubsystem(server, STORAGE_SUBSYSTEMS.find(s => s.name === 'research-store'));
583
+ },
584
+ 'activity-log': registerActivityLogToolset,
585
+ index: registerIndexToolset,
586
+ ralph: registerRalphToolset,
587
+ mc: registerMcToolset,
588
+ ops: registerOpsToolset,
589
+ };
590
+
591
+ /**
592
+ * Parse AIWG_MCP_TOOLSETS env or `--toolsets` CLI value into a Set.
593
+ *
594
+ * Format: comma-separated list (whitespace ignored). `core` is always
595
+ * implicit. Unknown names produce a warning but don't abort startup.
596
+ *
597
+ * Examples:
598
+ * AIWG_MCP_TOOLSETS=flows,missions,ralph
599
+ * AIWG_MCP_TOOLSETS=core,memory (core is implicit; harmless)
600
+ * AIWG_MCP_TOOLSETS=all (all known toolsets)
601
+ */
602
+ export function parseToolsets(value) {
603
+ if (!value || typeof value !== 'string') return new Set();
604
+ const items = value.split(',').map((s) => s.trim().toLowerCase()).filter(Boolean);
605
+ if (items.includes('all')) {
606
+ return new Set(Object.keys(TOOLSET_REGISTRY));
607
+ }
608
+ const out = new Set();
609
+ const known = new Set(Object.keys(TOOLSET_REGISTRY));
610
+ for (const item of items) {
611
+ if (item === 'core') continue; // always on
612
+ if (!known.has(item)) {
613
+ console.error(`[AIWG MCP] Unknown toolset: "${item}" — known: core, ${[...known].join(', ')}, all`);
614
+ continue;
615
+ }
616
+ out.add(item);
617
+ }
618
+ return out;
619
+ }
620
+
621
+ /**
622
+ * Register all opt-in toolsets requested via env/flag.
623
+ */
624
+ export function registerOptInToolsets(server, toolsets) {
625
+ const enabled = [];
626
+ for (const name of toolsets) {
627
+ const fn = TOOLSET_REGISTRY[name];
628
+ if (fn) {
629
+ fn(server);
630
+ enabled.push(name);
631
+ }
632
+ }
633
+ if (enabled.length > 0) {
634
+ console.error(`[AIWG MCP] Opt-in toolsets enabled: ${enabled.join(', ')}`);
635
+ } else {
636
+ console.error('[AIWG MCP] Default toolset only (core). Enable more via AIWG_MCP_TOOLSETS=<csv>.');
637
+ }
638
+ }
639
+
640
+ export const KNOWN_TOOLSETS = Object.keys(TOOLSET_REGISTRY);