@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.18

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 (467) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -1
  3. package/bin/aiwg.mjs +349 -0
  4. package/dist/src/a2a/agent-card.js +145 -0
  5. package/dist/src/a2a/client.js +411 -0
  6. package/dist/src/a2a/hitl-cli.js +171 -0
  7. package/dist/src/a2a/hitl-driver.js +370 -0
  8. package/dist/src/a2a/hitl.js +181 -0
  9. package/dist/src/a2a/http.js +193 -0
  10. package/dist/src/a2a/jcs.js +128 -0
  11. package/dist/src/a2a/jws.js +187 -0
  12. package/dist/src/a2a/types.js +24 -0
  13. package/dist/src/a2a/webhook.js +240 -0
  14. package/dist/src/activity-log/cli.js +348 -0
  15. package/dist/src/activity-log/parser.js +81 -0
  16. package/dist/src/activity-log/types.js +50 -0
  17. package/dist/src/agents/agent-deployer.js +367 -0
  18. package/dist/src/agents/agent-packager.js +271 -0
  19. package/dist/src/agents/agent-validator.js +271 -0
  20. package/dist/src/agents/grounding/knowledge-base.js +161 -0
  21. package/dist/src/agents/grounding/types.js +12 -0
  22. package/dist/src/agents/index.js +10 -0
  23. package/dist/src/agents/packaged-agent-inventory.js +75 -0
  24. package/dist/src/agents/types.js +7 -0
  25. package/dist/src/api/index.d.ts +10 -0
  26. package/dist/src/api/index.js +10 -0
  27. package/dist/src/artifacts/address-parser.js +73 -0
  28. package/dist/src/artifacts/audit/cli.js +183 -0
  29. package/dist/src/artifacts/audit/drift.js +122 -0
  30. package/dist/src/artifacts/audit/types.js +12 -0
  31. package/dist/src/artifacts/backends/graphology-backend.js +160 -0
  32. package/dist/src/artifacts/backends/json-backend.js +129 -0
  33. package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
  34. package/dist/src/artifacts/browser-export.js +622 -0
  35. package/dist/src/artifacts/capability-resolver.js +94 -0
  36. package/dist/src/artifacts/checksum-manifest.js +91 -0
  37. package/dist/src/artifacts/citation-parser.js +162 -0
  38. package/dist/src/artifacts/cli.js +1486 -0
  39. package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
  40. package/dist/src/artifacts/corpus-tools/cli.js +393 -0
  41. package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
  42. package/dist/src/artifacts/corpus-tools/curator.js +186 -0
  43. package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
  44. package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
  45. package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
  46. package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
  47. package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
  48. package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
  49. package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
  50. package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
  51. package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
  52. package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
  53. package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
  54. package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
  55. package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
  56. package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
  57. package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
  58. package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
  59. package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
  60. package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
  61. package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
  62. package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
  63. package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
  64. package/dist/src/artifacts/corpus-views/build.js +126 -0
  65. package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
  66. package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
  67. package/dist/src/artifacts/corpus-views/renderers.js +353 -0
  68. package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
  69. package/dist/src/artifacts/dep-graph.js +173 -0
  70. package/dist/src/artifacts/discover-facets.js +375 -0
  71. package/dist/src/artifacts/embedding-index.js +354 -0
  72. package/dist/src/artifacts/enrichment/cli.js +240 -0
  73. package/dist/src/artifacts/enrichment/prompt.js +47 -0
  74. package/dist/src/artifacts/enrichment/store.js +90 -0
  75. package/dist/src/artifacts/enrichment/types.js +12 -0
  76. package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
  77. package/dist/src/artifacts/fortemi-core-sync.js +251 -0
  78. package/dist/src/artifacts/fortemi-shard-export.js +44 -0
  79. package/dist/src/artifacts/fulltext.js +108 -0
  80. package/dist/src/artifacts/graph-backend.js +51 -0
  81. package/dist/src/artifacts/graph-query.js +247 -0
  82. package/dist/src/artifacts/hybrid-query.js +225 -0
  83. package/dist/src/artifacts/index-builder.js +1089 -0
  84. package/dist/src/artifacts/index-reader.js +112 -0
  85. package/dist/src/artifacts/index-status.js +193 -0
  86. package/dist/src/artifacts/legacy-index-migration.js +169 -0
  87. package/dist/src/artifacts/move.js +154 -0
  88. package/dist/src/artifacts/operational-state.js +239 -0
  89. package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
  90. package/dist/src/artifacts/query-engine.js +1955 -0
  91. package/dist/src/artifacts/source-graph.js +529 -0
  92. package/dist/src/artifacts/stats.js +169 -0
  93. package/dist/src/artifacts/types.js +606 -0
  94. package/dist/src/artifacts/views/cli.js +293 -0
  95. package/dist/src/artifacts/views/definition.js +170 -0
  96. package/dist/src/artifacts/views/store.js +149 -0
  97. package/dist/src/artifacts/views/types.js +8 -0
  98. package/dist/src/artifacts/watcher.js +255 -0
  99. package/dist/src/catalog/builtin-models.json +636 -0
  100. package/dist/src/catalog/cli.js +228 -0
  101. package/dist/src/catalog/cli.mjs +289 -0
  102. package/dist/src/catalog/index.js +15 -0
  103. package/dist/src/catalog/loader.js +217 -0
  104. package/dist/src/catalog/loader.mjs +251 -0
  105. package/dist/src/catalog/sources.json +41 -0
  106. package/dist/src/catalog/types.js +8 -0
  107. package/dist/src/channel/manager.mjs +504 -0
  108. package/dist/src/cli/agent-spawn.js +178 -0
  109. package/dist/src/cli/cli-extension-loader.js +245 -0
  110. package/dist/src/cli/command-log.js +275 -0
  111. package/dist/src/cli/config-loader.js +232 -0
  112. package/dist/src/cli/env.js +82 -0
  113. package/dist/src/cli/errors.js +150 -0
  114. package/dist/src/cli/find-package-root.js +40 -0
  115. package/dist/src/cli/git-hooks.js +250 -0
  116. package/dist/src/cli/handlers/agentcard.js +206 -0
  117. package/dist/src/cli/handlers/artifacts.js +76 -0
  118. package/dist/src/cli/handlers/best-practices-audit.js +280 -0
  119. package/dist/src/cli/handlers/cockpit.js +137 -0
  120. package/dist/src/cli/handlers/command-log.js +37 -0
  121. package/dist/src/cli/handlers/daemon.js +59 -0
  122. package/dist/src/cli/handlers/diagnose.js +300 -0
  123. package/dist/src/cli/handlers/execution-mode.js +105 -0
  124. package/dist/src/cli/handlers/feedback.js +341 -0
  125. package/dist/src/cli/handlers/help.js +147 -0
  126. package/dist/src/cli/handlers/index.js +302 -0
  127. package/dist/src/cli/handlers/init.js +179 -0
  128. package/dist/src/cli/handlers/install.js +129 -0
  129. package/dist/src/cli/handlers/issues.js +46 -0
  130. package/dist/src/cli/handlers/lint.js +42 -0
  131. package/dist/src/cli/handlers/local-executor.js +315 -0
  132. package/dist/src/cli/handlers/marketplace.js +168 -0
  133. package/dist/src/cli/handlers/mc.js +1010 -0
  134. package/dist/src/cli/handlers/models.js +352 -0
  135. package/dist/src/cli/handlers/packages.js +155 -0
  136. package/dist/src/cli/handlers/ralph-launcher.js +717 -0
  137. package/dist/src/cli/handlers/ralph.js +575 -0
  138. package/dist/src/cli/handlers/refresh.js +432 -0
  139. package/dist/src/cli/handlers/regenerate.js +336 -0
  140. package/dist/src/cli/handlers/repo-access.js +109 -0
  141. package/dist/src/cli/handlers/run.js +165 -0
  142. package/dist/src/cli/handlers/runtime-info.js +301 -0
  143. package/dist/src/cli/handlers/sandbox.js +197 -0
  144. package/dist/src/cli/handlers/scaffolding.js +149 -0
  145. package/dist/src/cli/handlers/script-runner.js +121 -0
  146. package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
  147. package/dist/src/cli/handlers/serve.js +1835 -0
  148. package/dist/src/cli/handlers/session.js +348 -0
  149. package/dist/src/cli/handlers/setup.js +440 -0
  150. package/dist/src/cli/handlers/skill-lint.js +367 -0
  151. package/dist/src/cli/handlers/skill-usage.js +74 -0
  152. package/dist/src/cli/handlers/steward.js +567 -0
  153. package/dist/src/cli/handlers/subcommands.js +1702 -0
  154. package/dist/src/cli/handlers/team.js +337 -0
  155. package/dist/src/cli/handlers/types.js +11 -0
  156. package/dist/src/cli/handlers/use.js +2772 -0
  157. package/dist/src/cli/handlers/utilities.js +703 -0
  158. package/dist/src/cli/handlers/version.js +134 -0
  159. package/dist/src/cli/handlers/workspace-context.js +93 -0
  160. package/dist/src/cli/handlers/workspace.js +126 -0
  161. package/dist/src/cli/help-generator.js +178 -0
  162. package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
  163. package/dist/src/cli/hooks/executor.js +96 -0
  164. package/dist/src/cli/hooks/index.js +15 -0
  165. package/dist/src/cli/hooks/registry.js +143 -0
  166. package/dist/src/cli/hooks/types.js +13 -0
  167. package/dist/src/cli/log.js +492 -0
  168. package/dist/src/cli/project-isolation/detect.js +70 -0
  169. package/dist/src/cli/project-isolation/index.js +7 -0
  170. package/dist/src/cli/project-isolation/signals.js +17 -0
  171. package/dist/src/cli/project-isolation/warning.js +102 -0
  172. package/dist/src/cli/prompt-utils.js +155 -0
  173. package/dist/src/cli/provider-deployment-plan.js +126 -0
  174. package/dist/src/cli/provider-resolution.js +119 -0
  175. package/dist/src/cli/router.js +305 -0
  176. package/dist/src/cli/scope-resolver.js +392 -0
  177. package/dist/src/cli/skill-usage.js +616 -0
  178. package/dist/src/cli/ui.js +224 -0
  179. package/dist/src/cli/watch-service.js +203 -0
  180. package/dist/src/cli/workflow-orchestrator.js +478 -0
  181. package/dist/src/cli/workspace-signals.js +321 -0
  182. package/dist/src/community/footer.js +14 -0
  183. package/dist/src/community/links.js +123 -0
  184. package/dist/src/community/milestones.js +46 -0
  185. package/dist/src/community/nudge-policy.js +93 -0
  186. package/dist/src/config/aiwg-config.js +883 -0
  187. package/dist/src/config/cli.js +703 -0
  188. package/dist/src/config/gitignore.js +156 -0
  189. package/dist/src/config/project-artifacts.js +76 -0
  190. package/dist/src/config/user-config.js +428 -0
  191. package/dist/src/config/user-registry.js +127 -0
  192. package/dist/src/config/workspace.js +276 -0
  193. package/dist/src/contributors/detect.js +39 -0
  194. package/dist/src/contributors/discover.js +172 -0
  195. package/dist/src/contributors/heuristic.js +186 -0
  196. package/dist/src/contributors/index.js +11 -0
  197. package/dist/src/contributors/types.js +13 -0
  198. package/dist/src/contributors/validation.js +116 -0
  199. package/dist/src/data/community.schema.json +43 -0
  200. package/dist/src/data/community.yaml +16 -0
  201. package/dist/src/extensions/capability-index.js +270 -0
  202. package/dist/src/extensions/claude-hooks-installer.js +268 -0
  203. package/dist/src/extensions/commands/definitions.js +3485 -0
  204. package/dist/src/extensions/deployment-registration.js +463 -0
  205. package/dist/src/extensions/index.js +22 -0
  206. package/dist/src/extensions/loader.js +132 -0
  207. package/dist/src/extensions/managed-marker.js +100 -0
  208. package/dist/src/extensions/manifest.js +196 -0
  209. package/dist/src/extensions/project-local-activity.js +114 -0
  210. package/dist/src/extensions/project-local-discovery.js +261 -0
  211. package/dist/src/extensions/project-local-doctor.js +281 -0
  212. package/dist/src/extensions/project-local-gitignore.js +176 -0
  213. package/dist/src/extensions/project-local-paths.js +121 -0
  214. package/dist/src/extensions/project-local-promote.js +218 -0
  215. package/dist/src/extensions/project-local-remove.js +373 -0
  216. package/dist/src/extensions/project-local-scaffold.js +252 -0
  217. package/dist/src/extensions/project-quickref.js +291 -0
  218. package/dist/src/extensions/registry.js +368 -0
  219. package/dist/src/extensions/shadow-resolver.js +271 -0
  220. package/dist/src/extensions/types.js +86 -0
  221. package/dist/src/extensions/upstream-registry.js +195 -0
  222. package/dist/src/extensions/validation.js +631 -0
  223. package/dist/src/features/catalog.js +88 -0
  224. package/dist/src/features/cli.js +197 -0
  225. package/dist/src/features/installer.js +57 -0
  226. package/dist/src/features/paths.js +14 -0
  227. package/dist/src/features/runtime.js +21 -0
  228. package/dist/src/features/status.js +134 -0
  229. package/dist/src/hooks/laziness-detection.js +532 -0
  230. package/dist/src/intake/git-history-analyzer.js +486 -0
  231. package/dist/src/intake/index.js +9 -0
  232. package/dist/src/issues/cli.js +327 -0
  233. package/dist/src/issues/index.js +5 -0
  234. package/dist/src/issues/live.js +154 -0
  235. package/dist/src/issues/local.js +666 -0
  236. package/dist/src/issues/sync.js +143 -0
  237. package/dist/src/issues/types.js +2 -0
  238. package/dist/src/issues/workflows.js +164 -0
  239. package/dist/src/kb/cli.js +173 -0
  240. package/dist/src/lint/cli.js +171 -0
  241. package/dist/src/lint/loader.js +225 -0
  242. package/dist/src/lint/reporters.js +141 -0
  243. package/dist/src/lint/runner.js +364 -0
  244. package/dist/src/lint/types.js +10 -0
  245. package/dist/src/marketplace/cache.js +110 -0
  246. package/dist/src/marketplace/identifier.js +63 -0
  247. package/dist/src/marketplace/registry.js +36 -0
  248. package/dist/src/marketplace/sources/clawhub.js +53 -0
  249. package/dist/src/marketplace/sources/git.js +45 -0
  250. package/dist/src/marketplace/types.js +9 -0
  251. package/dist/src/mcp/adapters/codex-runtime.js +224 -0
  252. package/dist/src/mcp/cli.mjs +1197 -0
  253. package/dist/src/mcp/elicitation.mjs +149 -0
  254. package/dist/src/mcp/helpers.mjs +287 -0
  255. package/dist/src/mcp/index.mjs +11 -0
  256. package/dist/src/mcp/profiles.js +263 -0
  257. package/dist/src/mcp/profiles.mjs +360 -0
  258. package/dist/src/mcp/registry.js +376 -0
  259. package/dist/src/mcp/registry.mjs +387 -0
  260. package/dist/src/mcp/server.mjs +633 -0
  261. package/dist/src/mcp/test-simple.mjs +271 -0
  262. package/dist/src/mcp/tools/command-run.mjs +101 -0
  263. package/dist/src/mcp/tools/discovery.mjs +291 -0
  264. package/dist/src/mcp/tools/interaction.mjs +87 -0
  265. package/dist/src/mcp/tools/orchestration.mjs +320 -0
  266. package/dist/src/mcp/tools/subsystems.mjs +640 -0
  267. package/dist/src/memory/cli.js +166 -0
  268. package/dist/src/memory/project-registry.js +282 -0
  269. package/dist/src/metrics/artifact-metrics.js +184 -0
  270. package/dist/src/metrics/context-budget.js +174 -0
  271. package/dist/src/metrics/token-counter.js +133 -0
  272. package/dist/src/models/config-loader.js +228 -0
  273. package/dist/src/models/index.js +22 -0
  274. package/dist/src/models/model-capabilities.v1.json +120 -0
  275. package/dist/src/models/model-catalog.v1.json +96 -0
  276. package/dist/src/models/model-discovery.js +521 -0
  277. package/dist/src/models/provider-models.js +73 -0
  278. package/dist/src/models/provider-policy.js +273 -0
  279. package/dist/src/models/resolver.js +245 -0
  280. package/dist/src/models/router.js +70 -0
  281. package/dist/src/models/types.js +8 -0
  282. package/dist/src/models/wrapper-deployment.js +178 -0
  283. package/dist/src/models/wrapper-route.js +54 -0
  284. package/dist/src/ops/cli.js +268 -0
  285. package/dist/src/ops/registry.js +623 -0
  286. package/dist/src/packages/adapters/clawhub.js +113 -0
  287. package/dist/src/packages/adapters/git.js +153 -0
  288. package/dist/src/packages/adapters/gitea.js +93 -0
  289. package/dist/src/packages/adapters/github.js +69 -0
  290. package/dist/src/packages/adapters/local-cache.js +89 -0
  291. package/dist/src/packages/package-registry.js +143 -0
  292. package/dist/src/packages/registry.js +238 -0
  293. package/dist/src/packages/types.js +11 -0
  294. package/dist/src/plugin/cross-framework-ops.js +475 -0
  295. package/dist/src/plugin/framework-config-loader.js +235 -0
  296. package/dist/src/plugin/framework-detector.js +186 -0
  297. package/dist/src/plugin/framework-isolator.js +341 -0
  298. package/dist/src/plugin/framework-migration.js +371 -0
  299. package/dist/src/plugin/metadata-validator.js +906 -0
  300. package/dist/src/plugin/plugin-installer.js +436 -0
  301. package/dist/src/plugin/plugin-status.js +369 -0
  302. package/dist/src/plugin/plugin-uninstaller.js +473 -0
  303. package/dist/src/plugin/registry-validator.js +344 -0
  304. package/dist/src/plugin/skill-command-translator.js +415 -0
  305. package/dist/src/plugin/workspace-creator.js +189 -0
  306. package/dist/src/plugin/workspace-migrator.js +821 -0
  307. package/dist/src/policy/authorization.js +390 -0
  308. package/dist/src/policy/repo-access.js +215 -0
  309. package/dist/src/provenance/cli.js +16 -0
  310. package/dist/src/providers/capability-matrix.js +300 -0
  311. package/dist/src/providers/capability-matrix.yaml +514 -0
  312. package/dist/src/providers/provider-definitions.js +977 -0
  313. package/dist/src/providers/provider-definitions.mjs +159 -0
  314. package/dist/src/providers/provider-inventory.js +169 -0
  315. package/dist/src/quality/feedback-ab.js +174 -0
  316. package/dist/src/quality/feedback-collector.js +176 -0
  317. package/dist/src/quality/feedback-tracker.js +123 -0
  318. package/dist/src/quality/patterns/adr.json +24 -0
  319. package/dist/src/quality/patterns/sad.json +24 -0
  320. package/dist/src/quality/patterns/test-plan.json +24 -0
  321. package/dist/src/quality/patterns/use-case.json +24 -0
  322. package/dist/src/quality/scoring.js +157 -0
  323. package/dist/src/reflections/cli.js +15 -0
  324. package/dist/src/release/plan.js +139 -0
  325. package/dist/src/research/cache/manager.js +227 -0
  326. package/dist/src/research/clients/arxiv.js +156 -0
  327. package/dist/src/research/clients/base.js +197 -0
  328. package/dist/src/research/clients/crossref.js +112 -0
  329. package/dist/src/research/clients/semantic-scholar.js +126 -0
  330. package/dist/src/research/clients/unpaywall.js +87 -0
  331. package/dist/src/research/index.js +14 -0
  332. package/dist/src/research/query-cli.js +336 -0
  333. package/dist/src/research/services/acquisition.js +313 -0
  334. package/dist/src/research/services/archival.js +225 -0
  335. package/dist/src/research/services/citation.js +279 -0
  336. package/dist/src/research/services/discovery.js +243 -0
  337. package/dist/src/research/services/documentation.js +269 -0
  338. package/dist/src/research/services/index.js +14 -0
  339. package/dist/src/research/services/provenance.js +279 -0
  340. package/dist/src/research/services/quality.js +370 -0
  341. package/dist/src/research/services/types.js +7 -0
  342. package/dist/src/research/storage-cli.js +20 -0
  343. package/dist/src/research/types.js +47 -0
  344. package/dist/src/resources/index.d.ts +2 -0
  345. package/dist/src/resources/index.js +2 -0
  346. package/dist/src/resources/web-release.d.ts +89 -0
  347. package/dist/src/resources/web-release.js +886 -0
  348. package/dist/src/rlm/cache/cli.js +162 -0
  349. package/dist/src/rlm/cache/hash.js +35 -0
  350. package/dist/src/rlm/cache/store.js +170 -0
  351. package/dist/src/rlm/cache/types.js +8 -0
  352. package/dist/src/rlm/cli.js +650 -0
  353. package/dist/src/serve/a2a-terminal-observer.js +120 -0
  354. package/dist/src/serve/agent-router.js +205 -0
  355. package/dist/src/serve/dispatch-router.js +171 -0
  356. package/dist/src/serve/executor-registry.js +715 -0
  357. package/dist/src/serve/mission-conductor.js +177 -0
  358. package/dist/src/serve/orchestrator-adapter.js +113 -0
  359. package/dist/src/serve/orchestrator-override.js +94 -0
  360. package/dist/src/serve/orchestrator-pty.js +133 -0
  361. package/dist/src/serve/pty-bridge.js +799 -0
  362. package/dist/src/serve/sandbox-registry.js +832 -0
  363. package/dist/src/serve/screen-reader.js +228 -0
  364. package/dist/src/serve/stack-adapters.js +68 -0
  365. package/dist/src/serve/telemetry.js +143 -0
  366. package/dist/src/skills/adapters/clawhub.js +250 -0
  367. package/dist/src/skills/adapters/local.js +335 -0
  368. package/dist/src/skills/adapters/openclaw.js +316 -0
  369. package/dist/src/skills/cli.js +334 -0
  370. package/dist/src/skills/registry.js +117 -0
  371. package/dist/src/skills/run.js +259 -0
  372. package/dist/src/skills/runtime.js +94 -0
  373. package/dist/src/skills/types.js +10 -0
  374. package/dist/src/smiths/agentsmith/demo.js +116 -0
  375. package/dist/src/smiths/agentsmith/examples.js +300 -0
  376. package/dist/src/smiths/agentsmith/generator.js +503 -0
  377. package/dist/src/smiths/agentsmith/index.js +11 -0
  378. package/dist/src/smiths/agentsmith/types.js +8 -0
  379. package/dist/src/smiths/commandsmith/example.js +220 -0
  380. package/dist/src/smiths/commandsmith/generator.js +288 -0
  381. package/dist/src/smiths/commandsmith/index.js +41 -0
  382. package/dist/src/smiths/commandsmith/templates.js +296 -0
  383. package/dist/src/smiths/commandsmith/types.js +7 -0
  384. package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
  385. package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
  386. package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
  387. package/dist/src/smiths/context-pipeline/discovery.js +187 -0
  388. package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
  389. package/dist/src/smiths/context-pipeline/finalization.js +147 -0
  390. package/dist/src/smiths/context-pipeline/generator.js +477 -0
  391. package/dist/src/smiths/context-pipeline/index.js +30 -0
  392. package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
  393. package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
  394. package/dist/src/smiths/context-pipeline/overflow.js +212 -0
  395. package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
  396. package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
  397. package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
  398. package/dist/src/smiths/context-pipeline/types.js +23 -0
  399. package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
  400. package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
  401. package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
  402. package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
  403. package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
  404. package/dist/src/smiths/hook-bridge/index.js +79 -0
  405. package/dist/src/smiths/hook-bridge/loader.js +116 -0
  406. package/dist/src/smiths/hook-bridge/shim.js +89 -0
  407. package/dist/src/smiths/hook-bridge/types.js +31 -0
  408. package/dist/src/smiths/index.js +39 -0
  409. package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
  410. package/dist/src/smiths/mcpsmith/example.js +119 -0
  411. package/dist/src/smiths/mcpsmith/generator.js +236 -0
  412. package/dist/src/smiths/mcpsmith/index.js +17 -0
  413. package/dist/src/smiths/mcpsmith/types.js +10 -0
  414. package/dist/src/smiths/platform-paths.js +101 -0
  415. package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
  416. package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
  417. package/dist/src/smiths/skillsmith/demo.js +83 -0
  418. package/dist/src/smiths/skillsmith/examples.js +161 -0
  419. package/dist/src/smiths/skillsmith/generator.js +316 -0
  420. package/dist/src/smiths/skillsmith/index.js +12 -0
  421. package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
  422. package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
  423. package/dist/src/smiths/skillsmith/types.js +9 -0
  424. package/dist/src/smiths/toolsmith/index.js +10 -0
  425. package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
  426. package/dist/src/smiths/toolsmith/types.js +8 -0
  427. package/dist/src/storage/backends/fortemi.js +227 -0
  428. package/dist/src/storage/backends/fs.js +134 -0
  429. package/dist/src/storage/backends/logseq.js +309 -0
  430. package/dist/src/storage/backends/obsidian.js +233 -0
  431. package/dist/src/storage/cli.js +468 -0
  432. package/dist/src/storage/config.js +272 -0
  433. package/dist/src/storage/index.js +108 -0
  434. package/dist/src/storage/subsystem-cli.js +201 -0
  435. package/dist/src/storage/types.js +33 -0
  436. package/dist/src/testing/corpus/corpus-builder.js +383 -0
  437. package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
  438. package/dist/src/testing/corpus/index.js +10 -0
  439. package/dist/src/testing/fixtures/index.js +9 -0
  440. package/dist/src/testing/fixtures/test-data-factory.js +472 -0
  441. package/dist/src/testing/generators/index.js +11 -0
  442. package/dist/src/testing/generators/test-case-generator.js +393 -0
  443. package/dist/src/testing/generators/test-code-generator.js +384 -0
  444. package/dist/src/testing/generators/use-case-parser.js +325 -0
  445. package/dist/src/testing/index.js +11 -0
  446. package/dist/src/tracker/capability-protocol.js +118 -0
  447. package/dist/src/update/checker.mjs +396 -0
  448. package/dist/src/update/notifier.mjs +235 -0
  449. package/dist/src/writing/content-diversifier.js +804 -0
  450. package/dist/src/writing/example-generator.js +959 -0
  451. package/dist/src/writing/example-templates.js +99 -0
  452. package/dist/src/writing/pattern-library.js +486 -0
  453. package/dist/src/writing/patterns/banned-phrases.json +4413 -0
  454. package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
  455. package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
  456. package/dist/src/writing/patterns/hedging-language.json +2096 -0
  457. package/dist/src/writing/patterns/transition-words.json +1285 -0
  458. package/dist/src/writing/patterns/weak-verbs.json +1112 -0
  459. package/dist/src/writing/prompt-optimizer.js +660 -0
  460. package/dist/src/writing/prompt-templates.js +583 -0
  461. package/dist/src/writing/scoring-config-loader.js +168 -0
  462. package/dist/src/writing/validation-engine.js +595 -0
  463. package/dist/src/writing/validation-rules.js +380 -0
  464. package/dist/src/writing/voice-analyzer.js +439 -0
  465. package/dist/src/writing/voice-calibration.js +661 -0
  466. package/dist/src/writing/voice-profiles.json +588 -0
  467. package/package.json +65 -9
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Interaction tools — structured questions via MCP elicitation.
3
+ *
4
+ * Registers `ask-user`: a tool the agent can call to ask the operator a
5
+ * single/multi-select question. On clients that support MCP form elicitation
6
+ * (e.g. Codex, whose `tool_call_mcp_elicitation` is stable) this renders a
7
+ * native selection form and returns the choice; on other clients it returns a
8
+ * formatted markdown prompt for the agent to present. This restores
9
+ * agent-initiated structured questions on Codex, whose native
10
+ * `request_user_input` tool is mode-gated and off by default (#1668).
11
+ *
12
+ * @implements #1676
13
+ */
14
+
15
+ import { z } from 'zod';
16
+ import { elicitChoice, renderMarkdownPrompt } from '../elicitation.mjs';
17
+
18
+ /**
19
+ * Register interaction tools on the MCP server.
20
+ * @param {import('@modelcontextprotocol/sdk/server/mcp.js').McpServer} server
21
+ */
22
+ export function registerInteractionTools(server) {
23
+ server.registerTool(
24
+ 'ask-user',
25
+ {
26
+ title: 'Ask the user a structured question',
27
+ description:
28
+ 'Ask the operator a single- or multi-select question. On clients that support MCP ' +
29
+ 'elicitation (e.g. Codex) this renders a native selection form and returns the choice; ' +
30
+ 'on other clients it returns a formatted markdown prompt for you to present to the user. ' +
31
+ 'Use for short clarifications that materially change the outcome — not for low-stakes ' +
32
+ 'choices with a sensible default.',
33
+ inputSchema: {
34
+ question: z.string().describe('The question to ask the user.'),
35
+ options: z
36
+ .array(
37
+ z.union([
38
+ z.string(),
39
+ z.object({
40
+ value: z.string().optional().describe('Machine value returned on selection.'),
41
+ label: z.string().describe('Human-readable label.'),
42
+ }),
43
+ ]),
44
+ )
45
+ .min(2)
46
+ .describe('Two or more options. Plain strings, or { label, value } objects.'),
47
+ multiSelect: z.boolean().optional().describe('Allow selecting multiple options (default false).'),
48
+ context: z.string().optional().describe('Optional context shown above the question.'),
49
+ },
50
+ },
51
+ async ({ question, options, multiSelect = false, context }) => {
52
+ const message = context ? `${context}\n\n${question}` : question;
53
+ const res = await elicitChoice(server, { question: message, options, multiSelect });
54
+
55
+ if (res.supported && res.action === 'accept') {
56
+ const val = Array.isArray(res.value) ? res.value.join(', ') : res.value;
57
+ return {
58
+ content: [{ type: 'text', text: `User selected: ${val ?? '(empty selection)'}` }],
59
+ };
60
+ }
61
+
62
+ if (res.supported && (res.action === 'decline' || res.action === 'cancel')) {
63
+ return {
64
+ content: [
65
+ {
66
+ type: 'text',
67
+ text: `User ${res.action}d the question without selecting. Do not assume an answer — ask how to proceed.`,
68
+ },
69
+ ],
70
+ };
71
+ }
72
+
73
+ // Fallback: client has no native question UI — instruct the agent to ask in markdown.
74
+ const prompt = renderMarkdownPrompt({ question, options, multiSelect });
75
+ return {
76
+ content: [
77
+ {
78
+ type: 'text',
79
+ text:
80
+ 'This client has no native question UI. Present the following to the user verbatim ' +
81
+ `and proceed with their reply:\n\n${prompt}`,
82
+ },
83
+ ],
84
+ };
85
+ },
86
+ );
87
+ }
@@ -0,0 +1,320 @@
1
+ /**
2
+ * AIWG MCP Orchestration Toolsets
3
+ *
4
+ * First-class MCP surface for the post-#1533 Flow/Mission primitives.
5
+ * These stay opt-in because running flows/missions can trigger writes,
6
+ * shell commands, long-running work, and cross-stack dispatch.
7
+ *
8
+ * @issues #1584 #1539 #1546
9
+ */
10
+
11
+ import { z } from 'zod';
12
+ import { parse as parseYaml } from 'yaml';
13
+ import fs from 'node:fs/promises';
14
+ import path from 'node:path';
15
+ import { AIWG_ROOT, mcpError, mcpJson, runAiwgCli } from '../helpers.mjs';
16
+
17
+ function candidateAiwgRoots() {
18
+ const roots = [
19
+ AIWG_ROOT,
20
+ process.cwd(),
21
+ ];
22
+ return [...new Set(roots.map((r) => path.resolve(r)).filter(Boolean))];
23
+ }
24
+
25
+ async function pathExists(p) {
26
+ try {
27
+ await fs.access(p);
28
+ return true;
29
+ } catch {
30
+ return false;
31
+ }
32
+ }
33
+
34
+ async function findFrameworkRoot() {
35
+ for (const root of candidateAiwgRoots()) {
36
+ const frameworksRoot = path.join(root, 'agentic/code/frameworks');
37
+ if (await pathExists(frameworksRoot)) return { aiwgRoot: root, frameworksRoot };
38
+ }
39
+ throw new Error('Could not locate agentic/code/frameworks under AIWG_ROOT or current working directory.');
40
+ }
41
+
42
+ async function walk(dir, predicate, out = []) {
43
+ let entries = [];
44
+ try {
45
+ entries = await fs.readdir(dir, { withFileTypes: true });
46
+ } catch {
47
+ return out;
48
+ }
49
+ for (const entry of entries) {
50
+ const full = path.join(dir, entry.name);
51
+ if (entry.isDirectory()) {
52
+ await walk(full, predicate, out);
53
+ } else if (predicate(full, entry.name)) {
54
+ out.push(full);
55
+ }
56
+ }
57
+ return out;
58
+ }
59
+
60
+ function parseFlowContent(content, sourcePath, frameworksRoot) {
61
+ const parsed = parseYaml(content) || {};
62
+ const rel = path.relative(frameworksRoot, sourcePath);
63
+ const [framework] = rel.split(path.sep);
64
+ const fileName = path.basename(sourcePath);
65
+ const fileStem = fileName.replace(/\.playbook\.ya?ml$/, '');
66
+ const metadata = parsed.metadata || {};
67
+ const spec = parsed.spec || {};
68
+ const steps = Array.isArray(spec.steps) ? spec.steps : [];
69
+ const flowName = metadata.name || fileStem;
70
+ const skillPath = path.join(frameworksRoot, framework, 'skills', flowName, 'SKILL.md');
71
+
72
+ return {
73
+ name: flowName,
74
+ framework,
75
+ apiVersion: parsed.apiVersion || null,
76
+ kind: parsed.kind || null,
77
+ labels: metadata.labels || {},
78
+ step_count: steps.length,
79
+ steps: steps.map((step) => ({
80
+ id: step?.id || null,
81
+ kind: step?.kind || null,
82
+ capability: step?.capability || null,
83
+ depends_on: step?.depends_on || [],
84
+ })),
85
+ path: sourcePath,
86
+ relative_path: path.relative(path.dirname(frameworksRoot), sourcePath),
87
+ wrapper_skill: {
88
+ name: flowName,
89
+ path: skillPath,
90
+ exists: false,
91
+ },
92
+ content,
93
+ };
94
+ }
95
+
96
+ export async function listFlows({ framework, filter } = {}) {
97
+ const { frameworksRoot } = await findFrameworkRoot();
98
+ const files = await walk(
99
+ frameworksRoot,
100
+ (full, name) => name.endsWith('.playbook.yaml') && full.includes(`${path.sep}flows${path.sep}`),
101
+ );
102
+ const flows = [];
103
+ for (const file of files) {
104
+ const content = await fs.readFile(file, 'utf-8');
105
+ const flow = parseFlowContent(content, file, frameworksRoot);
106
+ if (framework && flow.framework !== framework) continue;
107
+ if (filter && !flow.name.includes(filter) && !flow.relative_path.includes(filter)) continue;
108
+ flow.wrapper_skill.exists = await pathExists(flow.wrapper_skill.path);
109
+ flows.push(flow);
110
+ }
111
+ flows.sort((a, b) => a.name.localeCompare(b.name));
112
+ return flows;
113
+ }
114
+
115
+ async function findFlow(name, framework) {
116
+ const flows = await listFlows({ framework });
117
+ return flows.find((flow) => (
118
+ flow.name === name ||
119
+ path.basename(flow.path) === name ||
120
+ path.basename(flow.path).replace(/\.playbook\.ya?ml$/, '') === name
121
+ )) || null;
122
+ }
123
+
124
+ async function readMissionSkill() {
125
+ for (const root of candidateAiwgRoots()) {
126
+ const skillPath = path.join(root, 'agentic/code/addons/aiwg-utils/skills/aiwg-mission/SKILL.md');
127
+ try {
128
+ const content = await fs.readFile(skillPath, 'utf-8');
129
+ return { path: skillPath, content };
130
+ } catch {
131
+ // try next root
132
+ }
133
+ }
134
+ throw new Error('Could not locate aiwg-mission SKILL.md under AIWG_ROOT or current working directory.');
135
+ }
136
+
137
+ export function registerFlowToolset(server) {
138
+ server.registerTool('flow-list', {
139
+ title: 'List AIWG Flows',
140
+ description: 'List declarative YAML Flows from the canonical framework corpus. Mirrors the Flow playbook source of truth rather than the deprecated workflow-run stub.',
141
+ inputSchema: {
142
+ framework: z.string().optional().describe('Restrict to one framework (e.g. sdlc-complete)'),
143
+ filter: z.string().optional().describe('Substring filter on flow name or path'),
144
+ },
145
+ annotations: { readOnlyHint: true, openWorldHint: false },
146
+ }, async ({ framework, filter }) => {
147
+ try {
148
+ const flows = await listFlows({ framework, filter });
149
+ return mcpJson({
150
+ count: flows.length,
151
+ flows: flows.map(({ content, ...summary }) => summary),
152
+ });
153
+ } catch (err) {
154
+ return mcpError(`flow-list: ${err.message}`);
155
+ }
156
+ });
157
+
158
+ server.registerTool('flow-show', {
159
+ title: 'Show AIWG Flow',
160
+ description: 'Fetch a declarative Flow playbook by name, including parsed step summary and the wrapper skill path when present.',
161
+ inputSchema: {
162
+ name: z.string().describe('Flow name or playbook file name (e.g. flow-release)'),
163
+ framework: z.string().optional().describe('Optional framework disambiguator'),
164
+ },
165
+ annotations: { readOnlyHint: true, openWorldHint: false },
166
+ }, async ({ name, framework }) => {
167
+ try {
168
+ const flow = await findFlow(name, framework);
169
+ if (!flow) return mcpError(`flow-show: flow not found: ${name}`);
170
+ flow.wrapper_skill.exists = await pathExists(flow.wrapper_skill.path);
171
+ return mcpJson(flow);
172
+ } catch (err) {
173
+ return mcpError(`flow-show: ${err.message}`);
174
+ }
175
+ });
176
+
177
+ server.registerTool('flow-run', {
178
+ title: 'Run AIWG Flow',
179
+ description: 'Confirmation-gated Flow launch envelope. Returns the YAML playbook plus wrapper skill for the MCP host to execute; AIWG does not yet ship a separate flow executor CLI.',
180
+ inputSchema: {
181
+ name: z.string().describe('Flow name (e.g. flow-release)'),
182
+ framework: z.string().optional().describe('Optional framework disambiguator'),
183
+ project_dir: z.string().optional().describe('Project directory where the Flow should operate'),
184
+ args: z.array(z.string()).default([]).describe('Operator arguments to pass conceptually to the wrapper skill'),
185
+ confirmed: z.boolean().default(false).describe('Required because Flows can run shell commands and write artifacts'),
186
+ },
187
+ annotations: { destructiveHint: true, openWorldHint: true },
188
+ }, async ({ name, framework, project_dir, args, confirmed }) => {
189
+ if (!confirmed) {
190
+ return mcpError(
191
+ 'flow-run requires confirmed=true because Flow steps may run commands, mutate project artifacts, or cross provider boundaries.',
192
+ { requiresConfirmation: true, remediation: 'Review flow-show output first, then re-invoke with confirmed=true.' },
193
+ );
194
+ }
195
+ try {
196
+ const flow = await findFlow(name, framework);
197
+ if (!flow) return mcpError(`flow-run: flow not found: ${name}`);
198
+ let wrapperSkill = null;
199
+ if (await pathExists(flow.wrapper_skill.path)) {
200
+ wrapperSkill = await fs.readFile(flow.wrapper_skill.path, 'utf-8');
201
+ flow.wrapper_skill.exists = true;
202
+ }
203
+ return mcpJson({
204
+ status: 'ready_for_host_execution',
205
+ execution_model: 'MCP host executes the wrapper skill instructions against the YAML playbook; no standalone aiwg flow executor exists yet.',
206
+ project_dir: project_dir || process.cwd(),
207
+ args,
208
+ flow,
209
+ wrapper_skill_content: wrapperSkill,
210
+ });
211
+ } catch (err) {
212
+ return mcpError(`flow-run: ${err.message}`);
213
+ }
214
+ });
215
+ }
216
+
217
+ export function registerMissionToolset(server) {
218
+ server.registerTool('mission-guide', {
219
+ title: 'Show AIWG Mission Primitive',
220
+ description: 'Fetch the aiwg-mission kernel skill. This is the AIWG-owned Mission primitive; it is distinct from the lower-level mc-* Mission Control toolset.',
221
+ inputSchema: {},
222
+ annotations: { readOnlyHint: true, openWorldHint: false },
223
+ }, async () => {
224
+ try {
225
+ return mcpJson(await readMissionSkill());
226
+ } catch (err) {
227
+ return mcpError(`mission-guide: ${err.message}`);
228
+ }
229
+ });
230
+
231
+ server.registerTool('mission-dispatch', {
232
+ title: 'Dispatch AIWG Mission',
233
+ description: 'Dispatch an AIWG Mission objective to an existing Mission Control session. Distinct from mc-dispatch: this tool applies the aiwg-mission completion-criterion contract and exposes the kernel primitive as first-class MCP.',
234
+ inputSchema: {
235
+ session_id: z.string().describe('Existing Mission Control session id from mc-start / mc-list'),
236
+ objective: z.string().describe('Mission objective'),
237
+ completion: z.string().describe('Measurable completion criterion'),
238
+ max_iterations: z.number().int().positive().optional().describe('Ralph iteration cap'),
239
+ max_total_tokens: z.number().int().positive().optional().describe('Hard cumulative token ceiling'),
240
+ max_output_tokens: z.number().int().positive().optional().describe('Hard cumulative output-token ceiling'),
241
+ max_tool_calls: z.number().int().positive().optional().describe('Hard cumulative tool-call ceiling'),
242
+ max_total_cost: z.number().positive().optional().describe('Hard cumulative provider-reported spend ceiling'),
243
+ max_wall_clock_minutes: z.number().positive().optional().describe('Hard cumulative runtime ceiling'),
244
+ exploration_quota: z.number().int().positive().optional().describe('Require structural variant after this many flat cycles (off unless declared; no default K)'),
245
+ budget_stop_policy: z.enum(['completion-wins', 'budget-wins']).optional().describe('Stop semantics when the completing iteration crosses a ceiling (default: completion-wins)'),
246
+ project_dir: z.string().optional().describe('Project directory for CLI dispatch'),
247
+ confirmed: z.boolean().default(false).describe('Required for durable/long-running mission dispatch'),
248
+ },
249
+ annotations: { destructiveHint: true, openWorldHint: true },
250
+ }, async ({
251
+ session_id,
252
+ objective,
253
+ completion,
254
+ max_iterations,
255
+ max_total_tokens,
256
+ max_output_tokens,
257
+ max_tool_calls,
258
+ max_total_cost,
259
+ max_wall_clock_minutes,
260
+ exploration_quota,
261
+ budget_stop_policy,
262
+ project_dir,
263
+ confirmed,
264
+ }) => {
265
+ if (!confirmed) {
266
+ return mcpError(
267
+ 'mission-dispatch requires confirmed=true because Missions can launch long-running worker cycles.',
268
+ { requiresConfirmation: true, remediation: 'Surface objective, completion, and target session to the operator before confirming.' },
269
+ );
270
+ }
271
+ try {
272
+ const cliArgs = ['mc', 'dispatch', session_id, objective, '--completion', completion];
273
+ if (max_iterations) cliArgs.push('--max-iterations', String(max_iterations));
274
+ if (max_total_tokens) cliArgs.push('--max-total-tokens', String(max_total_tokens));
275
+ if (max_output_tokens) cliArgs.push('--max-output-tokens', String(max_output_tokens));
276
+ if (max_tool_calls) cliArgs.push('--max-tool-calls', String(max_tool_calls));
277
+ if (max_total_cost) cliArgs.push('--max-total-cost', String(max_total_cost));
278
+ if (max_wall_clock_minutes) cliArgs.push('--max-wall-clock-minutes', String(max_wall_clock_minutes));
279
+ if (exploration_quota) cliArgs.push('--exploration-quota', String(exploration_quota));
280
+ if (budget_stop_policy) cliArgs.push('--budget-stop-policy', budget_stop_policy);
281
+ const { stdout, stderr, code } = await runAiwgCli(
282
+ cliArgs,
283
+ { cwd: project_dir, timeoutMs: 30_000 },
284
+ );
285
+ return mcpJson({
286
+ command: 'aiwg mc dispatch',
287
+ exit_code: code,
288
+ stdout,
289
+ stderr,
290
+ relationship_to_mc: 'AIWG Mission is the orchestration contract; mc is the durable dispatch/session substrate.',
291
+ });
292
+ } catch (err) {
293
+ return mcpError(`mission-dispatch: ${err.message}`);
294
+ }
295
+ });
296
+
297
+ server.registerTool('mission-status', {
298
+ title: 'AIWG Mission Status',
299
+ description: 'Read Mission status through the durable Mission Control substrate.',
300
+ inputSchema: {
301
+ session_id: z.string().optional().describe('Optional Mission Control session id'),
302
+ project_dir: z.string().optional().describe('Project directory for CLI status lookup'),
303
+ },
304
+ annotations: { readOnlyHint: true, openWorldHint: true },
305
+ }, async ({ session_id, project_dir }) => {
306
+ try {
307
+ const args = ['mc', 'status', '--json'];
308
+ if (session_id) args.push('--session', session_id);
309
+ const { stdout, stderr, code } = await runAiwgCli(args, { cwd: project_dir, timeoutMs: 30_000 });
310
+ if (code !== 0) return mcpError(`mission-status failed (exit ${code}): ${stderr || stdout}`);
311
+ try {
312
+ return mcpJson(JSON.parse(stdout));
313
+ } catch {
314
+ return mcpJson({ stdout, stderr });
315
+ }
316
+ } catch (err) {
317
+ return mcpError(`mission-status: ${err.message}`);
318
+ }
319
+ });
320
+ }