@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,120 @@
1
+ /**
2
+ * A2A terminal observer.
3
+ *
4
+ * v2 dispatch returns an A2A Task immediately. Executors may not also emit the
5
+ * executor-contract mission.* event stream, so aiwg serve must follow the task
6
+ * until it reaches a terminal A2A state and then project that state into the
7
+ * ExecutorRegistry mission model.
8
+ *
9
+ * @issue #1374
10
+ */
11
+ import { A2AClient } from '../a2a/client.js';
12
+ import { isTerminalTaskState, } from '../a2a/types.js';
13
+ const DEFAULT_POLL_INTERVAL_MS = 1000;
14
+ const DEFAULT_MAX_POLLS = 300;
15
+ export async function observeA2ATerminalState(registry, executor, missionId, a2aInstanceId, initialTask, opts = {}) {
16
+ try {
17
+ const clientOpts = {
18
+ baseUrl: executor.transportEndpoints.rest,
19
+ bearer: executor.token,
20
+ instanceId: a2aInstanceId,
21
+ };
22
+ if (opts.fetch)
23
+ clientOpts.fetch = opts.fetch;
24
+ const client = new A2AClient(clientOpts);
25
+ let task = initialTask;
26
+ emitNonTerminalProgress(registry, executor.executorId, missionId, task);
27
+ for (let attempt = 0; attempt <= (opts.maxPolls ?? DEFAULT_MAX_POLLS); attempt++) {
28
+ if (isTerminalTaskState(task.status.state)) {
29
+ emitTerminalTask(registry, executor.executorId, missionId, task);
30
+ return;
31
+ }
32
+ if (attempt === (opts.maxPolls ?? DEFAULT_MAX_POLLS))
33
+ break;
34
+ await sleep(opts.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS);
35
+ task = await client.getTask(task.id);
36
+ emitNonTerminalProgress(registry, executor.executorId, missionId, task);
37
+ }
38
+ registry.failMission(missionId, `A2A task ${initialTask.id} did not reach a terminal state before observer timeout`);
39
+ }
40
+ catch (err) {
41
+ registry.failMission(missionId, `A2A terminal observer failed: ${err.message ?? String(err)}`);
42
+ opts.onError?.(err);
43
+ }
44
+ }
45
+ function emitNonTerminalProgress(registry, executorId, missionId, task) {
46
+ const state = task.status.state;
47
+ if (state === 'working') {
48
+ registry.handleEvent(makeEnvelope('mission.started', executorId, missionId, task, {
49
+ state: 'running',
50
+ a2a_task_id: task.id,
51
+ summary: taskStatusSummary(task),
52
+ }));
53
+ return;
54
+ }
55
+ if (state === 'input-required') {
56
+ registry.handleEvent(makeEnvelope('mission.hitl_required', executorId, missionId, task, {
57
+ state: 'hitl-required',
58
+ a2a_task_id: task.id,
59
+ summary: taskStatusSummary(task),
60
+ }));
61
+ }
62
+ }
63
+ function emitTerminalTask(registry, executorId, missionId, task) {
64
+ const state = task.status.state;
65
+ if (state === 'completed') {
66
+ registry.handleEvent(makeEnvelope('mission.completed', executorId, missionId, task, {
67
+ state: 'done',
68
+ a2a_task_id: task.id,
69
+ summary: taskStatusSummary(task),
70
+ ...exitCodeData(task),
71
+ }));
72
+ return;
73
+ }
74
+ if (state === 'canceled') {
75
+ registry.handleEvent(makeEnvelope('mission.aborted', executorId, missionId, task, {
76
+ state: 'aborted',
77
+ a2a_task_id: task.id,
78
+ summary: taskStatusSummary(task),
79
+ error: taskStatusSummary(task) ?? `A2A task ${task.id} was canceled`,
80
+ ...exitCodeData(task),
81
+ }));
82
+ return;
83
+ }
84
+ registry.handleEvent(makeEnvelope('mission.failed', executorId, missionId, task, {
85
+ state: 'failed',
86
+ a2a_task_id: task.id,
87
+ summary: taskStatusSummary(task),
88
+ error: taskStatusSummary(task) ?? `A2A task ${task.id} reached terminal state ${state}`,
89
+ ...exitCodeData(task),
90
+ }));
91
+ }
92
+ function makeEnvelope(event, executorId, missionId, task, data) {
93
+ return {
94
+ event,
95
+ executor_id: executorId,
96
+ mission_id: missionId,
97
+ ts: task.status.timestamp ?? new Date().toISOString(),
98
+ data,
99
+ };
100
+ }
101
+ function taskStatusSummary(task) {
102
+ const status = task.status;
103
+ return typeof status.summary === 'string' ? status.summary : undefined;
104
+ }
105
+ function exitCodeData(task) {
106
+ const status = task.status;
107
+ return typeof status.exit_code === 'number' ? { exit_code: status.exit_code } : {};
108
+ }
109
+ function sleep(ms) {
110
+ return new Promise((resolve) => {
111
+ const timer = setTimeout(resolve, ms);
112
+ if (typeof timer === 'object' && typeof timer.unref === 'function') {
113
+ timer.unref();
114
+ }
115
+ });
116
+ }
117
+ export function isA2ATerminalState(state) {
118
+ return isTerminalTaskState(state);
119
+ }
120
+ //# sourceMappingURL=a2a-terminal-observer.js.map
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Agent Router
3
+ *
4
+ * Capability-based and load-aware agent routing for task dispatch (#916).
5
+ * Selects the best available agent for a task based on declared filters
6
+ * (framework requirements, inventory, resource thresholds) and real-time
7
+ * metrics (CPU/memory load from #911).
8
+ *
9
+ * Also exposes routeMission() for executor-level routing (#1179).
10
+ */
11
+ /**
12
+ * Select the best executor from the provided list using filter criteria.
13
+ *
14
+ * Default-selection policy (per ADR §3):
15
+ * 1. Sandbox-first: prefer any executor with isolation:vm or isolation:container
16
+ * 2. Local fallback: isolation:none or isolation:host
17
+ * 3. 503 if no executor is connected and matching
18
+ *
19
+ * `long_running: true` requires the 'resumable' capability.
20
+ *
21
+ * Returns an ExecutorRoutingResult with the selected executor and full candidate list.
22
+ */
23
+ export function routeMission(executors, filter, longRunning = false) {
24
+ const matched = [];
25
+ const rejected = [];
26
+ // Only consider connected executors
27
+ const connected = executors.filter((e) => e.connected);
28
+ const disconnected = executors.filter((e) => !e.connected);
29
+ for (const e of disconnected) {
30
+ rejected.push({ executorId: e.executorId, reason: 'executor not connected' });
31
+ }
32
+ for (const executor of connected) {
33
+ // Pinned executor_id
34
+ if (filter.executor_id && executor.executorId !== filter.executor_id) {
35
+ rejected.push({ executorId: executor.executorId, reason: `executor_id does not match '${filter.executor_id}'` });
36
+ continue;
37
+ }
38
+ // Long-running requires resumable
39
+ if (longRunning && !executor.capabilities.includes('resumable')) {
40
+ rejected.push({ executorId: executor.executorId, reason: 'long_running requires resumable capability' });
41
+ continue;
42
+ }
43
+ // All requested capabilities must be present
44
+ if (filter.capabilities && filter.capabilities.length > 0) {
45
+ const missing = filter.capabilities.filter((c) => !executor.capabilities.includes(c));
46
+ if (missing.length > 0) {
47
+ rejected.push({ executorId: executor.executorId, reason: `missing capabilities: ${missing.join(', ')}` });
48
+ continue;
49
+ }
50
+ }
51
+ matched.push({
52
+ executor,
53
+ matchReason: 'matches all filter criteria',
54
+ rejected,
55
+ });
56
+ }
57
+ if (matched.length === 0) {
58
+ return { selected: undefined, candidates: [], filter };
59
+ }
60
+ // ADR §3: sandbox-first policy — prefer vm/container isolation
61
+ const sandboxFirst = matched.filter((c) => c.executor.capabilities.some((cap) => cap === 'isolation:vm' || cap === 'isolation:container'));
62
+ let selected;
63
+ if (sandboxFirst.length > 0) {
64
+ selected = { ...sandboxFirst[0], matchReason: 'sandbox-first (isolation:vm/container)', rejected };
65
+ }
66
+ else {
67
+ selected = { ...matched[0], matchReason: 'local fallback (no vm/container executor)', rejected };
68
+ }
69
+ return { selected, candidates: matched, filter };
70
+ }
71
+ // ============================================================
72
+ // Matching logic
73
+ // ============================================================
74
+ /** Returns a rejection reason string, or null if the agent matches. */
75
+ export function matchAgent(agent, filter) {
76
+ // Direct agent targeting
77
+ if (filter.agent_id) {
78
+ const matches = agent.agentId === filter.agent_id
79
+ || agent.instanceId === filter.agent_id
80
+ || agent.logicalName === filter.agent_id;
81
+ if (!matches)
82
+ return `agentId/instanceId/logicalName does not match '${filter.agent_id}'`;
83
+ }
84
+ if (filter.agent_name) {
85
+ if (agent.logicalName !== filter.agent_name) {
86
+ return `logicalName '${agent.logicalName ?? 'none'}' does not match '${filter.agent_name}'`;
87
+ }
88
+ }
89
+ if (filter.sandbox_id && agent.sandboxId !== filter.sandbox_id) {
90
+ return `sandboxId '${agent.sandboxId}' does not match '${filter.sandbox_id}'`;
91
+ }
92
+ // Status check — skip disconnected/error agents
93
+ if (agent.status === 'disconnected' || agent.status === 'error') {
94
+ return `agent status is '${agent.status}'`;
95
+ }
96
+ // Platform requirements are declared per installed AIWG framework. A match
97
+ // on any framework provider means the agent can receive work for that
98
+ // provider.
99
+ if (filter.platform) {
100
+ const providers = new Set(agent.aiwgFrameworks?.flatMap((f) => f.providers) ?? []);
101
+ if (!providers.has(filter.platform)) {
102
+ return `platform providers do not include '${filter.platform}'`;
103
+ }
104
+ }
105
+ // Framework requirements
106
+ if (filter.frameworks && filter.frameworks.length > 0) {
107
+ const installed = new Set(agent.aiwgFrameworks?.map((f) => f.name) ?? []);
108
+ const missing = filter.frameworks.filter((f) => !installed.has(f));
109
+ if (missing.length > 0)
110
+ return `missing frameworks: ${missing.join(', ')}`;
111
+ }
112
+ // Agent inventory requirements
113
+ if (filter.agents && filter.agents.length > 0) {
114
+ const installed = new Set(agent.inventory?.agents.map((a) => a.name) ?? []);
115
+ const missing = filter.agents.filter((a) => !installed.has(a));
116
+ if (missing.length > 0)
117
+ return `missing agents in inventory: ${missing.join(', ')}`;
118
+ }
119
+ // Skill inventory requirements
120
+ if (filter.skills && filter.skills.length > 0) {
121
+ const installed = new Set(agent.inventory?.skills.map((s) => s.name) ?? []);
122
+ const missing = filter.skills.filter((s) => !installed.has(s));
123
+ if (missing.length > 0)
124
+ return `missing skills in inventory: ${missing.join(', ')}`;
125
+ }
126
+ // CPU load threshold
127
+ if (filter.max_cpu_percent !== undefined && agent.latestMetrics) {
128
+ if (agent.latestMetrics.cpu_percent > filter.max_cpu_percent) {
129
+ return `CPU ${agent.latestMetrics.cpu_percent.toFixed(1)}% exceeds max ${filter.max_cpu_percent}%`;
130
+ }
131
+ }
132
+ // Memory requirements (convert GB → bytes)
133
+ if (filter.min_memory_gb !== undefined && agent.latestMetrics) {
134
+ const freeBytes = agent.latestMetrics.memory_total_bytes - agent.latestMetrics.memory_used_bytes;
135
+ const freeGB = freeBytes / (1024 ** 3);
136
+ if (freeGB < filter.min_memory_gb) {
137
+ return `free memory ${freeGB.toFixed(1)}GB below min ${filter.min_memory_gb}GB`;
138
+ }
139
+ }
140
+ return null; // matches
141
+ }
142
+ /**
143
+ * Score an agent for ranking (lower = better).
144
+ * Primary: CPU percent. Secondary: memory usage percent.
145
+ */
146
+ function agentScore(agent) {
147
+ const cpu = agent.latestMetrics?.cpu_percent ?? 50;
148
+ const memPct = agent.latestMetrics && agent.latestMetrics.memory_total_bytes > 0
149
+ ? (agent.latestMetrics.memory_used_bytes / agent.latestMetrics.memory_total_bytes) * 100
150
+ : 50;
151
+ return cpu * 0.7 + memPct * 0.3;
152
+ }
153
+ /**
154
+ * Select the best agent from candidates using filter criteria.
155
+ * Returns a RoutingResult with selected agent and full candidate list.
156
+ */
157
+ export function routeTask(agents, filter) {
158
+ const matched = [];
159
+ const rejected = [];
160
+ for (const agent of agents) {
161
+ const reason = matchAgent(agent, filter);
162
+ if (reason === null) {
163
+ matched.push({
164
+ sandboxId: agent.sandboxId,
165
+ sandboxName: agent.sandboxName,
166
+ agent,
167
+ matchReason: 'matches all filter criteria',
168
+ });
169
+ }
170
+ else {
171
+ rejected.push({ agentId: agent.agentId, sandboxId: agent.sandboxId, reason });
172
+ }
173
+ }
174
+ // Sort matched agents by score (lower = better)
175
+ matched.sort((a, b) => agentScore(a.agent) - agentScore(b.agent));
176
+ // Apply fallback if no direct match
177
+ if (matched.length === 0 && filter.fallback && filter.fallback.strategy !== 'none') {
178
+ const relaxedFilter = { ...filter };
179
+ if (filter.fallback.strategy === 'any_with_framework') {
180
+ // Relax: keep only framework + status requirements
181
+ delete relaxedFilter.agents;
182
+ delete relaxedFilter.skills;
183
+ delete relaxedFilter.max_cpu_percent;
184
+ delete relaxedFilter.min_memory_gb;
185
+ delete relaxedFilter.agent_id;
186
+ delete relaxedFilter.agent_name;
187
+ relaxedFilter.fallback = undefined;
188
+ }
189
+ else if (filter.fallback.strategy === 'any') {
190
+ // Relax everything except sandbox affinity
191
+ return routeTask(agents, { sandbox_id: filter.sandbox_id });
192
+ }
193
+ return routeTask(agents, relaxedFilter);
194
+ }
195
+ const selected = matched[0];
196
+ if (selected) {
197
+ selected.rejected = rejected.map((r) => ({ agentId: r.agentId, reason: r.reason }));
198
+ }
199
+ return {
200
+ selected,
201
+ candidates: matched,
202
+ filter,
203
+ };
204
+ }
205
+ //# sourceMappingURL=agent-router.js.map
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Dispatch Router — outbound mission dispatch with A2A-first + v1 fallback.
3
+ *
4
+ * AIWG exposes `POST /api/v1/sessions/:id/dispatch` as its public mission
5
+ * intake. The original implementation forwarded to the executor's v1
6
+ * `/dispatch` endpoint (`${rest}/dispatch`). Per #1252, AIWG should now
7
+ * try the A2A path first (`POST /agents/{a2aInstanceId}/v1/messages:send`)
8
+ * and fall back to v1 on 404 with a structured deprecation warning.
9
+ *
10
+ * Wire-shape mapping (v1 dispatch payload → A2A Message):
11
+ *
12
+ * v1 payload → A2A Message
13
+ * -------------------------------- --------------------------------------
14
+ * mission_id message.messageId (idempotency key)
15
+ * objective parts[0] = { kind: 'text', text: ... }
16
+ * completion metadata.completion
17
+ * executor_filter metadata.executor_filter
18
+ * long_running metadata.long_running
19
+ * <any other field> metadata.<field>
20
+ *
21
+ * @issue #1252 #1254 #1259
22
+ */
23
+ import { A2A_IDEMPOTENCY_V1, A2A_RUNTIME_V1, A2AClient, } from '../a2a/client.js';
24
+ import { A2AError } from '../a2a/http.js';
25
+ /**
26
+ * Route a dispatch to an executor. Tries v2 first, falls back to v1 on 404
27
+ * or when `forceV1` is set. Throws on all other failure modes — caller is
28
+ * responsible for surfacing 5xx to the inbound caller.
29
+ */
30
+ export async function routeDispatch(executor, payload, opts = {}) {
31
+ if (opts.forceV1 === true) {
32
+ const v1 = await dispatchV1(executor, payload, opts);
33
+ return v1;
34
+ }
35
+ // Try v2 first.
36
+ try {
37
+ const v2 = await dispatchV2(executor, payload, opts);
38
+ return v2;
39
+ }
40
+ catch (err) {
41
+ // Only fall back on a 404 from the v2 path. Everything else propagates.
42
+ if (err instanceof A2AError && err.status === 404) {
43
+ // Capture sunset for the telemetry event if any was attached.
44
+ const sunset = err.problem.code === 'aiwg.deprecation_strict' ? undefined : undefined;
45
+ if (opts.onV1Fallback) {
46
+ opts.onV1Fallback({
47
+ executorId: executor.executorId,
48
+ reason: `v2 endpoint returned 404 (path=${err.path})`,
49
+ ...(sunset !== undefined ? { sunset } : {}),
50
+ });
51
+ }
52
+ return dispatchV1(executor, payload, opts);
53
+ }
54
+ throw err;
55
+ }
56
+ }
57
+ /** v2 path — A2A `messages:send`. */
58
+ async function dispatchV2(executor, payload, opts) {
59
+ const a2aInstanceId = resolveA2AInstanceId(executor, payload, opts);
60
+ const clientOpts = {
61
+ baseUrl: executor.transportEndpoints.rest,
62
+ bearer: executor.token,
63
+ instanceId: a2aInstanceId,
64
+ requiredExtensions: opts.requiredExtensions ?? [A2A_RUNTIME_V1, A2A_IDEMPOTENCY_V1],
65
+ };
66
+ if (opts.fetch)
67
+ clientOpts.fetch = opts.fetch;
68
+ if (opts.optionalExtensions)
69
+ clientOpts.optionalExtensions = opts.optionalExtensions;
70
+ if (opts.onDeprecation)
71
+ clientOpts.onDeprecation = opts.onDeprecation;
72
+ const client = new A2AClient(clientOpts);
73
+ const message = payloadToMessage(payload);
74
+ const result = await client.sendMessage(message);
75
+ return {
76
+ missionId: payload.mission_id,
77
+ executorId: executor.executorId,
78
+ a2aInstanceId,
79
+ dispatchPath: 'v2',
80
+ task: result.task,
81
+ idempotentReplayed: result.idempotentReplayed,
82
+ };
83
+ }
84
+ function resolveA2AInstanceId(executor, payload, opts) {
85
+ const filter = payload.executor_filter ?? {};
86
+ const filterInstance = filter['a2a_instance_id'] ?? filter['instance_id'];
87
+ return opts.a2aInstanceId
88
+ ?? payload.a2a_instance_id
89
+ ?? (typeof filterInstance === 'string' ? filterInstance : undefined)
90
+ ?? executor.a2aInstanceId
91
+ ?? executor.executorId;
92
+ }
93
+ /** v1 path — fall back to the legacy `/dispatch` endpoint. */
94
+ async function dispatchV1(executor, payload, opts) {
95
+ const fetchImpl = opts.fetch ?? fetch;
96
+ const url = `${executor.transportEndpoints.rest.replace(/\/+$/, '')}/dispatch`;
97
+ const resp = await fetchImpl(url, {
98
+ method: 'POST',
99
+ headers: {
100
+ 'content-type': 'application/json',
101
+ authorization: `Bearer ${executor.token}`,
102
+ },
103
+ body: JSON.stringify(payload),
104
+ });
105
+ // Inspect deprecation headers from the v1 response — these are exactly
106
+ // what #1259 is meant to surface.
107
+ if (opts.onDeprecation) {
108
+ const dep = readDeprecation(`${executor.transportEndpoints.rest}/dispatch`, resp.headers);
109
+ if (dep)
110
+ opts.onDeprecation(dep);
111
+ }
112
+ if (!resp.ok) {
113
+ const detail = await resp.text().catch(() => '');
114
+ throw new Error(`v1 dispatch failed: ${resp.status} ${detail}`);
115
+ }
116
+ let estimatedStart;
117
+ try {
118
+ const json = (await resp.json());
119
+ if (typeof json['estimated_start'] === 'string') {
120
+ estimatedStart = json['estimated_start'];
121
+ }
122
+ }
123
+ catch {
124
+ /* optional */
125
+ }
126
+ return {
127
+ missionId: payload.mission_id,
128
+ executorId: executor.executorId,
129
+ dispatchPath: 'v1-fallback',
130
+ idempotentReplayed: false,
131
+ ...(estimatedStart !== undefined ? { estimatedStart } : {}),
132
+ };
133
+ }
134
+ /** Map a v1 dispatch payload to an A2A Message. */
135
+ function payloadToMessage(payload) {
136
+ const metadata = {};
137
+ for (const [k, v] of Object.entries(payload)) {
138
+ if (k === 'mission_id' || k === 'objective')
139
+ continue;
140
+ if (v === undefined)
141
+ continue;
142
+ // V1DispatchPayload allows boolean — coerce to JSON.
143
+ metadata[k] = v;
144
+ }
145
+ return {
146
+ messageId: payload.mission_id,
147
+ role: 'user',
148
+ parts: [{ kind: 'text', text: payload.objective }],
149
+ metadata,
150
+ };
151
+ }
152
+ function readDeprecation(path, headers) {
153
+ const sunset = headers.get('sunset') ?? undefined;
154
+ const deprecated = headers.get('deprecated') ?? undefined;
155
+ const link = headers.get('link') ?? undefined;
156
+ if (!sunset && !deprecated && !link)
157
+ return undefined;
158
+ let successor;
159
+ if (link) {
160
+ const m = /<([^>]+)>\s*;\s*[^,]*rel\s*=\s*"?successor-version"?/i.exec(link);
161
+ if (m)
162
+ successor = m[1];
163
+ }
164
+ return {
165
+ path,
166
+ ...(sunset ? { sunset } : {}),
167
+ ...(deprecated ? { deprecated } : {}),
168
+ ...(successor ? { successor } : {}),
169
+ };
170
+ }
171
+ //# sourceMappingURL=dispatch-router.js.map