@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,567 @@
1
+ /**
2
+ * Steward Command Handler
3
+ *
4
+ * Provider capability awareness and command routing intelligence for the AIWG Steward.
5
+ * Reads the canonical capability matrix and answers:
6
+ * - What does my current provider support natively?
7
+ * - What command should I use for feature X?
8
+ * - Which providers support feature Y?
9
+ *
10
+ * Subcommands:
11
+ * aiwg steward capabilities --provider <name> Show capabilities for a provider
12
+ * aiwg steward capabilities --feature <name> Show provider support for a feature
13
+ * aiwg steward capabilities --all Full capability matrix
14
+ * aiwg steward find --capability <name> Routing advice for current provider
15
+ *
16
+ * @source @src/cli/router.ts
17
+ * @issue #599 #1261 #1262
18
+ */
19
+ import { access } from 'node:fs/promises';
20
+ import { join } from 'node:path';
21
+ import { AiwgError, EXIT_CODES, handlerResultFromError } from '../errors.js';
22
+ import { loadCapabilityMatrix, } from '../../providers/capability-matrix.js';
23
+ import { getProjectDir, readAiwgConfig, writeAiwgConfig } from '../../config/aiwg-config.js';
24
+ import { auditLegacyPermissions, archiveLegacyPermissionManifests, backupConfig, normalizeProjectPermissions, } from '../../policy/authorization.js';
25
+ import { capabilityProviderId, normalizeProviderId, resolveActiveProvider } from '../provider-resolution.js';
26
+ import { discoverProjectLocalBundles, } from '../../extensions/project-local-discovery.js';
27
+ import { routeModelTier } from '../../models/router.js';
28
+ import { buildWrapperRouteEnvelope } from '../../models/wrapper-route.js';
29
+ import { loadProviderModelCatalog, } from '../../models/provider-policy.js';
30
+ import { CapabilityResolutionError, resolveRoutableCapability, } from '../../artifacts/capability-resolver.js';
31
+ const BASELINE_PROVIDER = 'claude-code';
32
+ // ── Feature name normalization ────────────────────────────────────────────────
33
+ /**
34
+ * Accept both hyphenated (agent-teams) and underscored (agent_teams) feature
35
+ * names; the canonical YAML keys use underscores.
36
+ */
37
+ function normalizeFeatureKey(input) {
38
+ return input.trim().toLowerCase().replace(/-/g, '_');
39
+ }
40
+ // ── Detect current provider ────────────────────────────────────────────────────
41
+ async function detectProvider(ctx) {
42
+ const resolution = await resolveActiveProvider({
43
+ cwd: ctx ? getProjectDir(ctx, ctx.args) : process.cwd(),
44
+ detectProcess: true,
45
+ });
46
+ return capabilityProviderId(resolution.provider);
47
+ }
48
+ // ── Formatters ────────────────────────────────────────────────────────────────
49
+ const NATIVE_MARK = '✓ native';
50
+ const EMULATED_MARK = '~ emulated';
51
+ const UNSUPPORTED_MARK = '- not supported';
52
+ function emulationLabel(strategy) {
53
+ if (!strategy)
54
+ return 'none';
55
+ if (strategy === 'native')
56
+ return 'native (no fallback needed)';
57
+ return strategy;
58
+ }
59
+ function formatProvider(id, provider, matrix, meta) {
60
+ const lines = [];
61
+ lines.push(`\n Provider: ${provider.display_name} (${id})`);
62
+ if (meta) {
63
+ lines.push(` Project-local: yes`);
64
+ lines.push(` Base adapter: ${meta.baseAdapter}`);
65
+ }
66
+ lines.push(` Status: ${provider.status}`);
67
+ lines.push(` Daemon: ${provider.daemon_tier}${provider.daemon_pty_adapter ? ' (+ pty-adapter)' : ''}`);
68
+ lines.push(` ${'─'.repeat(60)}`);
69
+ const featureKeys = Object.keys(matrix.features);
70
+ for (const featureId of featureKeys) {
71
+ const isNative = provider.native_features?.[featureId] === true;
72
+ const emulation = provider.emulation?.[featureId] ?? null;
73
+ const status = isNative ? NATIVE_MARK : (emulation ? EMULATED_MARK : UNSUPPORTED_MARK);
74
+ const feat = matrix.features[featureId];
75
+ lines.push(`\n ${featureId} — ${status}`);
76
+ if (feat?.description)
77
+ lines.push(` ${feat.description}`);
78
+ if (isNative) {
79
+ if (feat?.native_example)
80
+ lines.push(` example: ${feat.native_example}`);
81
+ }
82
+ else if (emulation) {
83
+ lines.push(` fallback: ${emulationLabel(emulation)}`);
84
+ }
85
+ }
86
+ return lines.join('\n');
87
+ }
88
+ async function findProjectLocalProvider(projectDir, requestedProvider) {
89
+ const discovery = await discoverProjectLocalBundles(projectDir);
90
+ const requested = requestedProvider.trim().toLowerCase();
91
+ return discovery.bundles.find((bundle) => {
92
+ if (bundle.type !== 'provider')
93
+ return false;
94
+ const config = bundle.manifest.providerConfig;
95
+ return bundle.id === requested || config?.aliases?.some((alias) => alias.toLowerCase() === requested);
96
+ });
97
+ }
98
+ async function resolveStewardProvider(matrix, requestedProvider, ctx) {
99
+ const normalizedProvider = normalizeProviderId(requestedProvider);
100
+ const builtInCapabilityId = capabilityProviderId(normalizedProvider);
101
+ if (builtInCapabilityId && matrix.providers[builtInCapabilityId]) {
102
+ return {
103
+ id: builtInCapabilityId,
104
+ provider: matrix.providers[builtInCapabilityId],
105
+ };
106
+ }
107
+ const projectDir = ctx ? getProjectDir(ctx, ctx.args) : process.cwd();
108
+ const bundle = await findProjectLocalProvider(projectDir, requestedProvider);
109
+ const providerConfig = bundle?.manifest.providerConfig;
110
+ if (!bundle || !providerConfig)
111
+ return null;
112
+ const baseCapabilityId = capabilityProviderId(normalizeProviderId(providerConfig.extends)) ?? providerConfig.extends;
113
+ const baseProvider = matrix.providers[baseCapabilityId];
114
+ if (!baseProvider)
115
+ return null;
116
+ const overrides = providerConfig.capabilities;
117
+ const provider = {
118
+ ...baseProvider,
119
+ display_name: providerConfig.displayName ?? bundle.manifest.name ?? bundle.id,
120
+ aliases: providerConfig.aliases,
121
+ native_features: {
122
+ ...baseProvider.native_features,
123
+ ...(overrides?.nativeFeatures ?? {}),
124
+ },
125
+ emulation: {
126
+ ...baseProvider.emulation,
127
+ ...(overrides?.emulation ?? {}),
128
+ },
129
+ };
130
+ return {
131
+ id: bundle.id,
132
+ provider,
133
+ projectLocal: {
134
+ id: bundle.id,
135
+ baseAdapter: providerConfig.extends,
136
+ },
137
+ };
138
+ }
139
+ function printFullMatrix(matrix) {
140
+ const { providers, features } = matrix;
141
+ const providerIds = Object.keys(providers);
142
+ const featureIds = Object.keys(features);
143
+ console.log(`\n Provider Capability Matrix (v${matrix.version})`);
144
+ console.log(` ✓ = native ~ = AIWG emulation - = not supported\n`);
145
+ const featureColW = 20;
146
+ const provColW = 14;
147
+ const header = ' ' + 'Feature'.padEnd(featureColW) + providerIds.map(p => p.padEnd(provColW)).join('');
148
+ console.log(header);
149
+ console.log(' ' + '─'.repeat(featureColW + providerIds.length * provColW));
150
+ for (const featureId of featureIds) {
151
+ const feat = features[featureId];
152
+ let row = ' ' + featureId.padEnd(featureColW);
153
+ for (const providerId of providerIds) {
154
+ const provider = providers[providerId];
155
+ const isNative = provider?.native_features?.[featureId] === true;
156
+ const emulation = provider?.emulation?.[featureId] ?? null;
157
+ const mark = isNative ? '✓' : (emulation ? '~' : '-');
158
+ row += mark.padEnd(provColW);
159
+ }
160
+ console.log(row);
161
+ if (feat?.description) {
162
+ console.log(' ' + ' '.repeat(featureColW) + feat.description);
163
+ }
164
+ console.log('');
165
+ }
166
+ }
167
+ // ── Main execution ─────────────────────────────────────────────────────────────
168
+ async function handleSteward(args, ctx) {
169
+ const subcommand = args[0];
170
+ if (!subcommand || subcommand === '--help' || subcommand === 'help') {
171
+ console.log(`
172
+ aiwg steward — Provider capability awareness and command routing
173
+
174
+ Usage:
175
+ aiwg steward capabilities --provider <name> Capabilities for a specific provider
176
+ aiwg steward capabilities --feature <name> Provider support matrix for a feature
177
+ aiwg steward capabilities --all Full matrix (all providers x features)
178
+ aiwg steward find --capability <name> Routing advice for your current provider
179
+ aiwg steward models [--complex|--high-impact] Model policy/discovery routing advice
180
+ aiwg steward models --route --capability-type <agent|skill|rule|workflow>
181
+ --capability <id> --assignment <text> [--provider <name>] [--json]
182
+ Emit a capability-bound wrapper launch envelope
183
+ aiwg steward permissions audit Find normalized-model errors and legacy grants
184
+ aiwg steward permissions migrate --dry-run Preview legacy permission normalization
185
+ aiwg steward permissions migrate --apply Back up and atomically normalize config
186
+
187
+ Providers:
188
+ claude-code, codex, copilot, cursor, factory, opencode, warp, windsurf, hermes, openclaw
189
+
190
+ Features:
191
+ cron, agent_teams, tasks, mcp, behaviors, mission_control, daemon
192
+ (hyphens accepted: agent-teams → agent_teams)
193
+
194
+ Models:
195
+ Use aiwg models sources|refresh for effective catalogs, audit|resolve for
196
+ provider-compiled role/tier policy, and cheap-first defaults unless policy
197
+ or human rationale escalates.
198
+ `);
199
+ return;
200
+ }
201
+ if (subcommand === 'permissions') {
202
+ const operation = args[1];
203
+ const projectDir = ctx ? getProjectDir(ctx, args) : process.cwd();
204
+ const config = await readAiwgConfig(projectDir);
205
+ if (!config)
206
+ throw new AiwgError({
207
+ code: 'ERR_CONFIG_NOT_FOUND',
208
+ message: `No .aiwg/aiwg.config found in ${projectDir}`,
209
+ exitCode: EXIT_CODES.CONFIG,
210
+ });
211
+ if (operation === 'audit') {
212
+ const diagnostics = await auditLegacyPermissions(projectDir, config);
213
+ if (!diagnostics.length)
214
+ console.log(' ✓ Permission model is normalized and valid.');
215
+ for (const item of diagnostics)
216
+ console.log(` ${item.severity === 'error' ? '✗' : item.severity === 'warning' ? '⚠' : '·'} [${item.code}] ${item.message}${item.source ? ` (${item.source})` : ''}`);
217
+ if (diagnostics.some(item => item.severity === 'error'))
218
+ throw new AiwgError({
219
+ code: 'ERR_AUTHORIZATION_INVALID',
220
+ message: 'Normalized permission model has errors.',
221
+ hint: 'Correct the reported references; authorization remains fail-closed.',
222
+ exitCode: EXIT_CODES.CONFIG,
223
+ });
224
+ return;
225
+ }
226
+ if (operation === 'migrate') {
227
+ const apply = args.includes('--apply');
228
+ const dryRun = args.includes('--dry-run');
229
+ if (apply === dryRun)
230
+ throw new AiwgError({
231
+ code: 'ERR_USAGE_PERMISSION_MIGRATION_MODE',
232
+ message: 'Choose exactly one of --dry-run or --apply.',
233
+ exitCode: EXIT_CODES.USAGE,
234
+ });
235
+ const normalized = await normalizeProjectPermissions(projectDir, config);
236
+ if (normalized === config) {
237
+ console.log(' ✓ Permission model is already normalized; no changes needed.');
238
+ return;
239
+ }
240
+ const diagnostics = await auditLegacyPermissions(projectDir, config);
241
+ console.log(` ${dryRun ? 'Would normalize' : 'Normalizing'} ${diagnostics.filter(d => d.code.startsWith('legacy-')).length} legacy permission source(s).`);
242
+ console.log(` Result: ${Object.keys(normalized.authorization?.permissions ?? {}).length} permissions, ${Object.keys(normalized.authorization?.roles ?? {}).length} roles, ${normalized.authorization?.assignments.length ?? 0} assignments; default deny.`);
243
+ if (apply) {
244
+ const backup = await backupConfig(projectDir);
245
+ await writeAiwgConfig(projectDir, normalized);
246
+ const archived = await archiveLegacyPermissionManifests(projectDir);
247
+ console.log(` ✓ Migration applied atomically. Backup: ${backup}`);
248
+ if (archived.length)
249
+ console.log(` ✓ Archived legacy manifests: ${archived.join(', ')}`);
250
+ }
251
+ return;
252
+ }
253
+ throw new AiwgError({
254
+ code: 'ERR_USAGE_UNKNOWN_PERMISSION_OPERATION',
255
+ message: `Unknown permissions operation: ${operation ?? '(missing)'}`,
256
+ hint: 'Use audit or migrate --dry-run|--apply.',
257
+ exitCode: EXIT_CODES.USAGE,
258
+ });
259
+ }
260
+ const matrix = loadCapabilityMatrix();
261
+ if (subcommand === 'capabilities') {
262
+ const providerFlag = args.indexOf('--provider');
263
+ const featureFlag = args.indexOf('--feature');
264
+ const allFlag = args.includes('--all');
265
+ if (allFlag) {
266
+ printFullMatrix(matrix);
267
+ return;
268
+ }
269
+ if (providerFlag >= 0) {
270
+ const requestedProvider = args[providerFlag + 1];
271
+ if (!requestedProvider)
272
+ throw new AiwgError({
273
+ code: 'ERR_USAGE_MISSING_VALUE',
274
+ message: '--provider requires a provider name',
275
+ hint: 'Example: aiwg steward capabilities --provider claude-code',
276
+ exitCode: EXIT_CODES.USAGE,
277
+ });
278
+ const resolved = await resolveStewardProvider(matrix, requestedProvider, ctx);
279
+ if (!resolved) {
280
+ const known = Object.keys(matrix.providers).join(', ');
281
+ throw new AiwgError({
282
+ code: 'ERR_USAGE_UNKNOWN_PROVIDER',
283
+ message: `Unknown provider: ${requestedProvider}`,
284
+ hint: `Known providers: ${known}. Project-local providers must live under .aiwg/providers/<id>/manifest.json.`,
285
+ exitCode: EXIT_CODES.USAGE,
286
+ });
287
+ }
288
+ console.log(formatProvider(resolved.id, resolved.provider, matrix, resolved.projectLocal));
289
+ return;
290
+ }
291
+ if (featureFlag >= 0) {
292
+ const rawFeatureId = args[featureFlag + 1];
293
+ if (!rawFeatureId)
294
+ throw new AiwgError({
295
+ code: 'ERR_USAGE_MISSING_VALUE',
296
+ message: '--feature requires a feature name',
297
+ hint: "Example: aiwg steward capabilities --feature cron",
298
+ exitCode: EXIT_CODES.USAGE,
299
+ });
300
+ const featureId = normalizeFeatureKey(rawFeatureId);
301
+ const feat = matrix.features[featureId];
302
+ if (!feat) {
303
+ const known = Object.keys(matrix.features).join(', ');
304
+ throw new AiwgError({
305
+ code: 'ERR_USAGE_UNKNOWN_FEATURE',
306
+ message: `Unknown feature: ${rawFeatureId}`,
307
+ hint: `Known features: ${known}`,
308
+ exitCode: EXIT_CODES.USAGE,
309
+ });
310
+ }
311
+ console.log(`\n Feature: ${featureId}`);
312
+ if (feat.description)
313
+ console.log(` ${feat.description}`);
314
+ if (feat.native_example)
315
+ console.log(` Native example: ${feat.native_example}`);
316
+ console.log(`\n Provider support:\n`);
317
+ for (const [providerId, provider] of Object.entries(matrix.providers)) {
318
+ const isNative = provider.native_features?.[featureId] === true;
319
+ const emulation = provider.emulation?.[featureId] ?? null;
320
+ const status = isNative
321
+ ? `✓ native`
322
+ : (emulation ? `~ emulated (${emulationLabel(emulation)})` : `- not supported`);
323
+ console.log(` ${provider.display_name.padEnd(20)} (${providerId.padEnd(12)}) ${status}`);
324
+ }
325
+ console.log('');
326
+ return;
327
+ }
328
+ // No flag — show current provider
329
+ const detected = await detectProvider(ctx);
330
+ if (!detected) {
331
+ console.log(` Could not detect active provider. Specify with --provider <name>.`);
332
+ console.log(` Detection checks explicit env, runtime markers, process ancestry, and unambiguous project config.`);
333
+ console.log(` Run 'aiwg runtime-info' to verify provider detection.`);
334
+ return;
335
+ }
336
+ const provider = matrix.providers[detected];
337
+ if (!provider) {
338
+ console.log(` Detected provider ${detected} not found in capability matrix.`);
339
+ return;
340
+ }
341
+ console.log(` (Detected provider: ${detected})`);
342
+ console.log(formatProvider(detected, provider, matrix));
343
+ return;
344
+ }
345
+ if (subcommand === 'find') {
346
+ const capFlag = args.indexOf('--capability');
347
+ if (capFlag < 0)
348
+ throw new AiwgError({
349
+ code: 'ERR_USAGE_MISSING_FLAG',
350
+ message: "'aiwg steward find' requires --capability <name>",
351
+ hint: 'Example: aiwg steward find --capability cron',
352
+ exitCode: EXIT_CODES.USAGE,
353
+ });
354
+ const rawCapId = args[capFlag + 1];
355
+ if (!rawCapId)
356
+ throw new AiwgError({
357
+ code: 'ERR_USAGE_MISSING_VALUE',
358
+ message: '--capability requires a feature name',
359
+ hint: 'Example: aiwg steward find --capability cron',
360
+ exitCode: EXIT_CODES.USAGE,
361
+ });
362
+ const capabilityId = normalizeFeatureKey(rawCapId);
363
+ const feat = matrix.features[capabilityId];
364
+ if (!feat) {
365
+ const known = Object.keys(matrix.features).join(', ');
366
+ throw new AiwgError({
367
+ code: 'ERR_USAGE_UNKNOWN_CAPABILITY',
368
+ message: `Unknown capability: ${rawCapId}`,
369
+ hint: `Known capabilities: ${known}`,
370
+ exitCode: EXIT_CODES.USAGE,
371
+ });
372
+ }
373
+ const detected = await detectProvider(ctx) ?? BASELINE_PROVIDER;
374
+ const provider = matrix.providers[detected];
375
+ console.log(`\n Routing advice for: ${capabilityId}`);
376
+ console.log(` Provider: ${provider?.display_name ?? detected}`);
377
+ console.log('');
378
+ if (!provider) {
379
+ console.log(` No capability data for provider ${detected}.`);
380
+ return;
381
+ }
382
+ const isNative = provider.native_features?.[capabilityId] === true;
383
+ const emulation = provider.emulation?.[capabilityId] ?? null;
384
+ if (isNative) {
385
+ console.log(` ✓ Native support available`);
386
+ if (feat.native_example)
387
+ console.log(` Example: ${feat.native_example}`);
388
+ }
389
+ else if (emulation) {
390
+ console.log(` ~ Use AIWG emulation`);
391
+ console.log(` Strategy: ${emulationLabel(emulation)}`);
392
+ const strategyDetail = feat.emulation_strategies?.[emulation];
393
+ if (strategyDetail)
394
+ console.log(` Detail: ${strategyDetail}`);
395
+ }
396
+ else {
397
+ console.log(` - Not supported on this provider`);
398
+ const strategies = feat.emulation_strategies ?? {};
399
+ const available = Object.keys(strategies);
400
+ if (available.length) {
401
+ console.log(` Available strategies in matrix: ${available.join(', ')}`);
402
+ }
403
+ }
404
+ return;
405
+ }
406
+ if (subcommand === 'models' || subcommand === 'model-routing') {
407
+ const flagValue = (name) => {
408
+ const index = args.indexOf(name);
409
+ if (index < 0)
410
+ return undefined;
411
+ const value = args[index + 1];
412
+ if (!value || value.startsWith('--'))
413
+ throw new AiwgError({
414
+ code: 'ERR_USAGE_MISSING_VALUE',
415
+ message: `${name} requires a value.`,
416
+ exitCode: EXIT_CODES.USAGE,
417
+ });
418
+ return value;
419
+ };
420
+ if (args.includes('--route')) {
421
+ const rawProvider = flagValue('--provider') ?? await resolveActiveProvider({
422
+ cwd: ctx ? getProjectDir(ctx, ctx.args) : process.cwd(),
423
+ detectProcess: true,
424
+ }).then(result => result.provider ?? undefined);
425
+ const provider = normalizeProviderId(rawProvider);
426
+ if (!provider || provider === 'generic')
427
+ throw new AiwgError({
428
+ code: 'ERR_USAGE_UNKNOWN_PROVIDER',
429
+ message: `Cannot compile a wrapper route for provider: ${rawProvider ?? '(undetected)'}`,
430
+ hint: 'Pass --provider with a supported provider id.',
431
+ exitCode: EXIT_CODES.USAGE,
432
+ });
433
+ const capabilityType = flagValue('--capability-type');
434
+ const capability = flagValue('--capability');
435
+ const assignment = flagValue('--assignment');
436
+ if (!capabilityType || !['agent', 'skill', 'rule', 'workflow'].includes(capabilityType))
437
+ throw new AiwgError({
438
+ code: 'ERR_USAGE_MISSING_VALUE',
439
+ message: '--capability-type requires agent, skill, rule, or workflow.',
440
+ exitCode: EXIT_CODES.USAGE,
441
+ });
442
+ if (!capability || !assignment)
443
+ throw new AiwgError({
444
+ code: 'ERR_USAGE_MISSING_VALUE',
445
+ message: '--route requires both --capability <id> and --assignment <bounded text>.',
446
+ exitCode: EXIT_CODES.USAGE,
447
+ });
448
+ const capabilityProvider = capabilityProviderId(provider);
449
+ const providerCapabilities = capabilityProvider ? matrix.providers[capabilityProvider] : undefined;
450
+ const launchMechanism = providerCapabilities?.native_features.tasks
451
+ ? 'native-subagent'
452
+ : providerCapabilities?.emulation.tasks === 'aiwg-mc' ? 'aiwg-mc' : 'manual';
453
+ const premiumAuthorized = args.includes('--allow-premium');
454
+ const { collectProviderInventory } = await import('../../providers/provider-inventory.js');
455
+ const { resolveDynamicModelCatalog } = await import('../../models/model-discovery.js');
456
+ const projectDir = ctx ? getProjectDir(ctx, ctx.args) : process.cwd();
457
+ const requestedAiwgRoot = ctx?.frameworkRoot ?? process.cwd();
458
+ const aiwgRoot = await access(join(requestedAiwgRoot, 'agentic/code/providers/model-catalog.v1.json')).then(() => requestedAiwgRoot).catch(() => process.cwd());
459
+ const resolvedCapability = await resolveRoutableCapability(aiwgRoot, capabilityType, capability).catch(error => {
460
+ if (!(error instanceof CapabilityResolutionError))
461
+ throw error;
462
+ throw new AiwgError({
463
+ code: error.kind === 'ambiguous'
464
+ ? 'ERR_USAGE_AMBIGUOUS_CAPABILITY'
465
+ : 'ERR_USAGE_UNKNOWN_CAPABILITY',
466
+ message: error.message,
467
+ hint: 'Run aiwg discover "<capability>" --json and pass an exact name or stable id.',
468
+ exitCode: EXIT_CODES.USAGE,
469
+ });
470
+ });
471
+ const catalog = await resolveDynamicModelCatalog({
472
+ aiwgRoot,
473
+ inventory: await collectProviderInventory(projectDir),
474
+ allowNetwork: false,
475
+ });
476
+ const baselineCatalog = loadProviderModelCatalog();
477
+ const effectiveCatalog = {
478
+ ...baselineCatalog,
479
+ ...catalog,
480
+ refreshedAt: catalog.refreshedAt ?? baselineCatalog.refreshedAt,
481
+ staleAfterDays: baselineCatalog.staleAfterDays,
482
+ providers: { ...baselineCatalog.providers, ...catalog.providers },
483
+ };
484
+ const envelope = buildWrapperRouteEnvelope({
485
+ provider,
486
+ capability: resolvedCapability,
487
+ assignment,
488
+ launchMechanism,
489
+ deterministic: args.includes('--deterministic'),
490
+ routine: args.includes('--routine'),
491
+ complex: args.includes('--complex'),
492
+ highImpact: args.includes('--high-impact'),
493
+ requestedPremium: args.includes('--premium'),
494
+ unattended: args.includes('--unattended'),
495
+ premiumAuthorized,
496
+ maxAutoTier: premiumAuthorized ? 3 : undefined,
497
+ catalog: effectiveCatalog,
498
+ });
499
+ if (args.includes('--json'))
500
+ console.log(JSON.stringify(envelope, null, 2));
501
+ else {
502
+ console.log('\n Model wrapper route');
503
+ console.log(` Provider: ${envelope.provider}`);
504
+ console.log(` Capability: ${envelope.capability.type} ${envelope.capability.name} (${envelope.capability.id})`);
505
+ console.log(` Tier/role: ${envelope.tier ?? 'deterministic'}/${envelope.role ?? 'none'}`);
506
+ console.log(` Wrapper: ${envelope.wrapper ?? 'none'}`);
507
+ console.log(` Model: ${envelope.model?.effectiveModel ?? 'inherited or no model call'} (${envelope.model?.outcome ?? 'deterministic'})`);
508
+ console.log(` Launch: ${envelope.launch.mechanism}`);
509
+ console.log(` Confirmation: ${envelope.decision.requiresConfirmation ? 'required' : 'not required'}`);
510
+ console.log('\n Wrapper prompt:\n');
511
+ console.log(envelope.launch.prompt);
512
+ }
513
+ return;
514
+ }
515
+ const decision = routeModelTier({
516
+ deterministic: args.includes('--deterministic'),
517
+ routine: args.includes('--routine'),
518
+ complex: args.includes('--complex'),
519
+ highImpact: args.includes('--high-impact'),
520
+ requestedPremium: args.includes('--premium'),
521
+ unattended: args.includes('--unattended'),
522
+ premiumAuthorized: args.includes('--allow-premium'),
523
+ maxAutoTier: args.includes('--allow-premium') ? 3 : undefined,
524
+ });
525
+ console.log('\n Model policy routing');
526
+ console.log(` Default stance: cheap-first role/tier intent, compiled per provider from the effective catalog.`);
527
+ console.log(` Suggested tier: ${decision.tier}${decision.modelTier ? ` (${decision.modelTier})` : ' (no model call)'}`);
528
+ console.log(` Confirmation: ${decision.requiresConfirmation ? 'required' : 'not required'}`);
529
+ console.log(` Summary before escalation: ${decision.summaryRequired ? 'required' : 'not required'}`);
530
+ console.log(` Rationale: ${decision.rationale.join('; ')}`);
531
+ console.log('\n Commands:');
532
+ console.log(' aiwg models sources --json # inspect effective cache/static/remote catalog provenance');
533
+ console.log(' aiwg models refresh --json # refresh dynamic provider catalog where supported');
534
+ console.log(' aiwg models audit --provider P # compile artifact policy and diagnostics');
535
+ console.log(' aiwg models resolve --provider P # show selected provider model for matching artifacts');
536
+ console.log('\n Authoring:');
537
+ console.log(' Agents: use model-role/model-tier; avoid exact provider IDs in source scaffolds.');
538
+ console.log(' Skills/commands: use commandHint.modelRole and commandHint.modelTier.');
539
+ return;
540
+ }
541
+ throw new AiwgError({
542
+ code: 'ERR_USAGE_UNKNOWN_SUBCOMMAND',
543
+ message: `Unknown steward subcommand: ${subcommand}`,
544
+ hint: "Run 'aiwg steward --help' for usage",
545
+ exitCode: EXIT_CODES.USAGE,
546
+ });
547
+ }
548
+ // ── Handler export ────────────────────────────────────────────────────────────
549
+ export const stewardHandler = {
550
+ id: 'steward',
551
+ name: 'Steward',
552
+ description: 'Provider capability routing and permission normalization',
553
+ category: 'maintenance',
554
+ aliases: [],
555
+ async execute(ctx) {
556
+ try {
557
+ await handleSteward(ctx.args, ctx);
558
+ return { exitCode: 0 };
559
+ }
560
+ catch (error) {
561
+ // Preserve AiwgError.exitCode (USAGE=2, etc.) through the catch.
562
+ return handlerResultFromError(error);
563
+ }
564
+ },
565
+ };
566
+ export const stewardHandlers = [stewardHandler];
567
+ //# sourceMappingURL=steward.js.map