@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,134 @@
1
+ /**
2
+ * Version Command Handler
3
+ *
4
+ * Displays version and channel information for the AIWG installation.
5
+ * Supports --verbose / --json for full environment fingerprint (Phase 4.5 #925).
6
+ *
7
+ * @implements @.aiwg/architecture/decisions/ADR-001-unified-extension-system.md
8
+ * @source @src/cli/router.ts
9
+ * @issue #33, #925
10
+ */
11
+ import { getVersionInfo } from '../../channel/manager.mjs';
12
+ import { getLoggerInfo } from '../log.js';
13
+ import * as ui from '../ui.js';
14
+ import { maybePrintCommunityFooter } from '../../community/footer.js';
15
+ import { existsSync, statSync, readdirSync } from 'fs';
16
+ import path from 'path';
17
+ /**
18
+ * Version command handler
19
+ */
20
+ export const versionHandler = {
21
+ id: 'version',
22
+ name: 'Version',
23
+ description: 'Show version and channel info (--verbose for full env fingerprint, --json for machine-readable)',
24
+ category: 'maintenance',
25
+ aliases: ['-version', '--version'],
26
+ async execute(ctx) {
27
+ const verbose = ctx.args.includes('--verbose') || ctx.args.includes('-v') || ctx.args.includes('-vv') || ctx.args.includes('-vvv');
28
+ const json = ctx.args.includes('--json');
29
+ await displayVersion({ verbose, json });
30
+ return { exitCode: 0 };
31
+ },
32
+ };
33
+ function collectFingerprint(versionInfo) {
34
+ const loggerInfo = getLoggerInfo();
35
+ const fp = {
36
+ version: versionInfo.version,
37
+ channel: versionInfo.devMode ? 'dev' : versionInfo.channel,
38
+ packageRoot: versionInfo.packageRoot,
39
+ node: process.version,
40
+ platform: {
41
+ os: process.platform,
42
+ arch: process.arch,
43
+ release: loggerInfo.provenance.os_release,
44
+ },
45
+ tty: {
46
+ stdin: !!process.stdin.isTTY,
47
+ stdout: !!process.stdout.isTTY,
48
+ stderr: !!process.stderr.isTTY,
49
+ },
50
+ logger: {
51
+ level: loggerInfo.level,
52
+ disabled: loggerInfo.disabled,
53
+ logFile: loggerInfo.logFile,
54
+ },
55
+ invocation_id: loggerInfo.provenance.invocation_id,
56
+ };
57
+ if (versionInfo.gitHash) {
58
+ fp.git = {
59
+ sha: versionInfo.gitHash,
60
+ branch: versionInfo.gitBranch ?? '(unknown)',
61
+ path: versionInfo.edgePath ?? versionInfo.packageRoot,
62
+ };
63
+ }
64
+ // Locale / timezone are useful for timezone-dependent bug reports.
65
+ try {
66
+ fp.locale = Intl.DateTimeFormat().resolvedOptions().locale;
67
+ fp.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
68
+ }
69
+ catch { /* ignore */ }
70
+ // Log file stats — "you've written N records today, file is X MB".
71
+ if (loggerInfo.logFile && existsSync(loggerInfo.logFile)) {
72
+ try {
73
+ fp.logger.logFileSize = statSync(loggerInfo.logFile).size;
74
+ // Cheap line count via readdirSync of the log directory — not the line
75
+ // count itself (avoids reading the whole file).
76
+ const dir = path.dirname(loggerInfo.logFile);
77
+ const today = new Date().toISOString().slice(0, 10);
78
+ const file = readdirSync(dir).find(f => f === `aiwg-${today}.jsonl`);
79
+ if (file) {
80
+ // Defer actual line count to aiwg diagnose; here we just signal presence.
81
+ fp.logger.recordsToday = undefined;
82
+ }
83
+ }
84
+ catch { /* ignore */ }
85
+ }
86
+ return fp;
87
+ }
88
+ async function displayVersion(opts) {
89
+ const info = await getVersionInfo();
90
+ const fp = collectFingerprint(info);
91
+ if (opts.json) {
92
+ console.log(JSON.stringify(fp, null, 2));
93
+ return;
94
+ }
95
+ ui.blank();
96
+ console.log(` ${ui.brandMark()} ${ui.bold('aiwg')} ${ui.bold(fp.version)} ${ui.channelLabel(fp.channel)}`);
97
+ if (!opts.verbose) {
98
+ if (fp.git) {
99
+ ui.dim(` git: ${fp.git.sha} (${fp.git.branch})`);
100
+ ui.dim(` path: ${fp.git.path}`);
101
+ }
102
+ else {
103
+ ui.dim(` path: ${fp.packageRoot}`);
104
+ }
105
+ maybePrintCommunityFooter();
106
+ ui.blank();
107
+ return;
108
+ }
109
+ // --verbose: the full environment fingerprint.
110
+ if (fp.git) {
111
+ ui.dim(` git: ${fp.git.sha} (${fp.git.branch})`);
112
+ ui.dim(` path: ${fp.git.path}`);
113
+ }
114
+ else {
115
+ ui.dim(` path: ${fp.packageRoot}`);
116
+ }
117
+ ui.dim(` channel: ${fp.channel}`);
118
+ ui.dim(` node: ${fp.node}`);
119
+ ui.dim(` platform: ${fp.platform.os} ${fp.platform.arch} (${fp.platform.release})`);
120
+ ui.dim(` tty: stdin=${fp.tty.stdin} stdout=${fp.tty.stdout} stderr=${fp.tty.stderr}`);
121
+ if (fp.locale)
122
+ ui.dim(` locale: ${fp.locale} (TZ=${fp.timezone})`);
123
+ const logDesc = fp.logger.disabled
124
+ ? '(disabled via AIWG_LOG_DISABLE)'
125
+ : fp.logger.logFile
126
+ ? `${fp.logger.logFile}${fp.logger.logFileSize !== undefined ? ` (${(fp.logger.logFileSize / 1024).toFixed(1)} KB)` : ''}`
127
+ : '(stderr only)';
128
+ ui.dim(` log: ${logDesc}`);
129
+ ui.dim(` level: ${fp.logger.level}`);
130
+ ui.dim(` invocation:${fp.invocation_id}`);
131
+ maybePrintCommunityFooter();
132
+ ui.blank();
133
+ }
134
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1,93 @@
1
+ import { handlerResultFromError } from '../errors.js';
2
+ import { auditWorkspaceContext, diagnoseWorkspaceContext, migrateWorkspaceContext, rollbackWorkspaceContext, } from '../../smiths/context-pipeline/workspace-context.js';
3
+ function printHelp() {
4
+ console.log(`
5
+ aiwg workspace-context — Audit and migrate provider context into WORKSPACE.md
6
+
7
+ Usage:
8
+ aiwg workspace-context audit [--json]
9
+ aiwg workspace-context migrate --dry-run [--json]
10
+ aiwg workspace-context migrate --apply [--allow-conflicts] [--json]
11
+ aiwg workspace-context rollback [transaction-id] [--json]
12
+ aiwg workspace-context doctor [--json]
13
+
14
+ Migration is opt-in. Audit and dry-run never write. Apply records source
15
+ attribution and preimages under .aiwg/context-migrations/ for rollback.
16
+ `);
17
+ }
18
+ export const workspaceContextHandler = {
19
+ id: 'workspace-context',
20
+ name: 'Workspace Context',
21
+ description: 'Audit, migrate, diagnose, and roll back canonical WORKSPACE.md context',
22
+ category: 'maintenance',
23
+ aliases: [],
24
+ async execute(ctx) {
25
+ try {
26
+ if (ctx.args.includes('--help') || ctx.args.includes('-h')) {
27
+ printHelp();
28
+ return { exitCode: 0 };
29
+ }
30
+ const json = ctx.args.includes('--json');
31
+ const positional = ctx.args.filter((arg) => !arg.startsWith('-'));
32
+ const action = positional[0] ?? 'audit';
33
+ if (action === 'audit') {
34
+ const audit = await auditWorkspaceContext(ctx.cwd);
35
+ if (json)
36
+ console.log(JSON.stringify(audit, null, 2));
37
+ else {
38
+ console.log(`Workspace context audit: ${audit.sources.length} source(s)`);
39
+ console.log(` WORKSPACE.md: ${audit.workspaceExists ? 'present' : audit.legacyCompatible ? 'legacy layout supported' : 'missing'}`);
40
+ console.log(` Identical directives: ${audit.identical.length}`);
41
+ console.log(` Ambiguous conflicts: ${audit.conflicts.length}`);
42
+ console.log(` Sensitive findings: ${audit.sensitiveFindings.length}`);
43
+ console.log(` Planned outputs: ${audit.plan.outputs.join(', ')}`);
44
+ }
45
+ return { exitCode: audit.sensitiveFindings.length > 0 ? 1 : 0 };
46
+ }
47
+ if (action === 'migrate') {
48
+ const apply = ctx.args.includes('--apply');
49
+ const result = await migrateWorkspaceContext(ctx.cwd, {
50
+ apply,
51
+ dryRun: ctx.args.includes('--dry-run') || !apply,
52
+ allowConflicts: ctx.args.includes('--allow-conflicts'),
53
+ });
54
+ if (json)
55
+ console.log(JSON.stringify(result, null, 2));
56
+ else {
57
+ console.log(`${result.dryRun ? 'Migration dry run' : 'Migration applied'}: ${result.changed ? 'changes found' : 'already canonical'}`);
58
+ for (const file of result.written)
59
+ console.log(` ${result.dryRun ? 'would write' : 'wrote'} ${file}`);
60
+ if (result.transactionId)
61
+ console.log(` transaction: ${result.transactionId}`);
62
+ if (result.backups.length > 0)
63
+ console.log(` recoverable preimages: ${result.backups.length}`);
64
+ }
65
+ return { exitCode: 0 };
66
+ }
67
+ if (action === 'rollback') {
68
+ const result = await rollbackWorkspaceContext(ctx.cwd, positional[1]);
69
+ if (json)
70
+ console.log(JSON.stringify(result, null, 2));
71
+ else
72
+ console.log(`Rolled back ${result.id}: restored ${result.restored.length} file(s).`);
73
+ return { exitCode: 0 };
74
+ }
75
+ if (action === 'doctor') {
76
+ const diagnostics = await diagnoseWorkspaceContext(ctx.cwd);
77
+ if (json)
78
+ console.log(JSON.stringify(diagnostics, null, 2));
79
+ else
80
+ for (const diagnostic of diagnostics)
81
+ console.log(` ${diagnostic.severity.toUpperCase()} ${diagnostic.code}: ${diagnostic.message}`);
82
+ return { exitCode: diagnostics.some((item) => item.severity === 'error') ? 1 : 0 };
83
+ }
84
+ printHelp();
85
+ return { exitCode: 2, message: `Unknown workspace-context action: ${action}` };
86
+ }
87
+ catch (error) {
88
+ return handlerResultFromError(error);
89
+ }
90
+ },
91
+ };
92
+ export const workspaceContextHandlers = [workspaceContextHandler];
93
+ //# sourceMappingURL=workspace-context.js.map
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Workspace Management Handlers
3
+ *
4
+ * Handlers for workspace health, migration, and rollback operations.
5
+ * Delegates to existing CLI scripts in tools/cli/.
6
+ *
7
+ * @implements @.aiwg/architecture/decisions/ADR-001-unified-extension-system.md
8
+ * @source @src/cli/router.ts
9
+ * @issue #33
10
+ */
11
+ import { createScriptRunner } from './script-runner.js';
12
+ import { getFrameworkRoot } from '../../channel/manager.mjs';
13
+ import { maybePrintCommunityFooter } from '../../community/footer.js';
14
+ /**
15
+ * Handler for workspace status command
16
+ *
17
+ * Shows workspace health, installed frameworks, and migration status.
18
+ *
19
+ * Usage:
20
+ * aiwg -status
21
+ * aiwg --status
22
+ * aiwg -status --verbose
23
+ * aiwg -status --json
24
+ */
25
+ export const statusHandler = {
26
+ id: 'status',
27
+ name: 'Workspace Status',
28
+ description: 'Show workspace health and installed frameworks',
29
+ category: 'workspace',
30
+ aliases: ['-status', '--status'],
31
+ async execute(ctx) {
32
+ const frameworkRoot = await getFrameworkRoot();
33
+ const runner = createScriptRunner(frameworkRoot);
34
+ const result = await runner.run('tools/cli/workspace-status.mjs', ctx.args, {
35
+ cwd: ctx.cwd,
36
+ });
37
+ const machineReadable = ctx.args.includes('--json') || ctx.args.includes('--probe') || ctx.args.includes('--serve') || ctx.args.includes('--export');
38
+ if (result.exitCode === 0 && !machineReadable) {
39
+ maybePrintCommunityFooter();
40
+ }
41
+ return result;
42
+ },
43
+ };
44
+ /**
45
+ * Handler for the guided onboarding wizard.
46
+ *
47
+ * The MVP wizard is a deterministic, no-write planner that walks the user
48
+ * through provider, project, framework, deploy, and verification steps.
49
+ */
50
+ export const wizardHandler = {
51
+ id: 'wizard',
52
+ name: 'Onboarding Wizard',
53
+ description: 'Guide first-run provider, project, framework, deploy, and verify steps',
54
+ category: 'workspace',
55
+ aliases: [],
56
+ async execute(ctx) {
57
+ const frameworkRoot = await getFrameworkRoot();
58
+ const runner = createScriptRunner(frameworkRoot);
59
+ return runner.run('tools/cli/wizard.mjs', ctx.args, {
60
+ cwd: ctx.cwd,
61
+ });
62
+ },
63
+ };
64
+ /**
65
+ * Handler for workspace migration command
66
+ *
67
+ * Migrates legacy .aiwg/ workspace structure to framework-scoped structure.
68
+ * Provides interactive migration workflow with validation, backup, and reporting.
69
+ *
70
+ * Usage:
71
+ * aiwg -migrate-workspace
72
+ * aiwg --migrate-workspace
73
+ * aiwg -migrate-workspace --dry-run
74
+ * aiwg -migrate-workspace --no-backup
75
+ * aiwg -migrate-workspace --force
76
+ * aiwg -migrate-workspace --yes
77
+ */
78
+ export const migrateWorkspaceHandler = {
79
+ id: 'migrate-workspace',
80
+ name: 'Migrate Workspace',
81
+ description: 'Migrate legacy .aiwg/ to framework-scoped structure',
82
+ category: 'workspace',
83
+ aliases: ['-migrate-workspace', '--migrate-workspace'],
84
+ async execute(ctx) {
85
+ const frameworkRoot = await getFrameworkRoot();
86
+ const runner = createScriptRunner(frameworkRoot);
87
+ return runner.run('tools/cli/workspace-migrate.mjs', ctx.args, {
88
+ cwd: ctx.cwd,
89
+ });
90
+ },
91
+ };
92
+ /**
93
+ * Handler for workspace rollback command
94
+ *
95
+ * Rolls back workspace migration from backup.
96
+ *
97
+ * Usage:
98
+ * aiwg -rollback-workspace
99
+ * aiwg --rollback-workspace
100
+ * aiwg -rollback-workspace --list
101
+ * aiwg -rollback-workspace --backup <backup-path>
102
+ */
103
+ export const rollbackWorkspaceHandler = {
104
+ id: 'rollback-workspace',
105
+ name: 'Rollback Workspace',
106
+ description: 'Rollback workspace migration from backup',
107
+ category: 'workspace',
108
+ aliases: ['-rollback-workspace', '--rollback-workspace'],
109
+ async execute(ctx) {
110
+ const frameworkRoot = await getFrameworkRoot();
111
+ const runner = createScriptRunner(frameworkRoot);
112
+ return runner.run('tools/cli/workspace-rollback.mjs', ctx.args, {
113
+ cwd: ctx.cwd,
114
+ });
115
+ },
116
+ };
117
+ /**
118
+ * All workspace management handlers
119
+ */
120
+ export const workspaceHandlers = [
121
+ statusHandler,
122
+ wizardHandler,
123
+ migrateWorkspaceHandler,
124
+ rollbackWorkspaceHandler,
125
+ ];
126
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Help Generator
3
+ *
4
+ * Dynamically generates CLI help text from the extension registry.
5
+ * Replaces hardcoded displayHelp() with registry-driven approach.
6
+ *
7
+ * @implements @.aiwg/architecture/decisions/ADR-001-unified-extension-system.md
8
+ * @tests @test/unit/cli/help-generator.test.ts
9
+ * @version 1.0.0
10
+ */
11
+ /**
12
+ * Category display order and titles
13
+ *
14
+ * Determines the order in which command categories appear in help output.
15
+ */
16
+ const CATEGORY_ORDER = [
17
+ { category: 'framework', title: 'Framework Management' },
18
+ { category: 'project', title: 'Project Setup' },
19
+ { category: 'workspace', title: 'Workspace Management' },
20
+ { category: 'mcp', title: 'MCP Server' },
21
+ { category: 'toolsmith', title: 'Toolsmith (Runtime Discovery)' },
22
+ { category: 'catalog', title: 'Model Catalog' },
23
+ { category: 'utility', title: 'Utilities' },
24
+ { category: 'plugin', title: 'Plugin Packaging' },
25
+ { category: 'scaffolding', title: 'Scaffolding' },
26
+ { category: 'channel', title: 'Channel Management' },
27
+ { category: 'maintenance', title: 'Maintenance' },
28
+ { category: 'ralph', title: 'Agent Loop (Iterative Execution)' },
29
+ { category: 'orchestration', title: 'Orchestration (Mission Control)' },
30
+ { category: 'index', title: 'Artifact Index' },
31
+ { category: 'daemon', title: 'Daemon & Behaviors' },
32
+ { category: 'agentic-tools', title: 'Agentic Tools (RLM chunk, fanout, search)' },
33
+ ];
34
+ /**
35
+ * Command name column width for alignment
36
+ */
37
+ const COMMAND_COL_WIDTH = 24;
38
+ /**
39
+ * Generate help text from registry
40
+ *
41
+ * Dynamically builds CLI help text by querying the extension registry for
42
+ * command extensions, grouping them by category, and formatting them for display.
43
+ *
44
+ * @param registry - Extension registry to query
45
+ * @returns Formatted help text
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * import { getRegistry } from '../extensions/registry.js';
50
+ * import { generateHelp } from './help-generator.js';
51
+ *
52
+ * const registry = getRegistry();
53
+ * const helpText = generateHelp(registry);
54
+ * console.log(helpText);
55
+ * ```
56
+ */
57
+ export function generateHelp(registry) {
58
+ const lines = [];
59
+ // Header
60
+ lines.push('AIWG CLI');
61
+ lines.push('');
62
+ lines.push('Usage: aiwg <command> [options]');
63
+ lines.push('');
64
+ // Get commands by category (skills are the canonical source format for CLI commands)
65
+ const commands = [
66
+ ...registry.getByType('skill'),
67
+ ...registry.getByType('command'),
68
+ ];
69
+ const byCategory = groupByCategory(commands);
70
+ // Generate sections in order
71
+ for (const { category, title } of CATEGORY_ORDER) {
72
+ const categoryCommands = byCategory.get(category);
73
+ if (!categoryCommands || categoryCommands.length === 0)
74
+ continue;
75
+ lines.push(`${title}:`);
76
+ for (const cmd of categoryCommands) {
77
+ const name = formatCommandName(cmd);
78
+ const desc = cmd.description;
79
+ lines.push(` ${name.padEnd(COMMAND_COL_WIDTH)} ${desc}`);
80
+ }
81
+ lines.push('');
82
+ }
83
+ // Platform options
84
+ lines.push('Platform Options (--provider):');
85
+ lines.push(' claude Claude Code (default)');
86
+ lines.push(' copilot GitHub Copilot');
87
+ lines.push(' factory Factory AI');
88
+ lines.push(' codex / openai OpenAI Codex');
89
+ lines.push(' cursor Cursor IDE');
90
+ lines.push(' opencode OpenCode');
91
+ lines.push(' warp Warp Terminal');
92
+ lines.push(' windsurf Windsurf');
93
+ lines.push('');
94
+ // Examples
95
+ lines.push('Examples:');
96
+ lines.push(' aiwg use sdlc Install SDLC framework');
97
+ lines.push(' aiwg use sdlc --global Install user assets + lightweight project wiring');
98
+ lines.push(' aiwg -new Create new project');
99
+ lines.push(' aiwg doctor Check installation health');
100
+ lines.push('');
101
+ return lines.join('\n');
102
+ }
103
+ /**
104
+ * Group commands by category
105
+ *
106
+ * Takes a flat list of command extensions and organizes them into a Map
107
+ * keyed by category, with values being arrays of extensions.
108
+ *
109
+ * @param commands - Array of command extensions
110
+ * @returns Map of category to command extensions
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * const commands = registry.getByType('command');
115
+ * const grouped = groupByCategory(commands);
116
+ *
117
+ * const frameworkCommands = grouped.get('framework');
118
+ * console.log(`${frameworkCommands?.length} framework commands`);
119
+ * ```
120
+ */
121
+ function groupByCategory(commands) {
122
+ const map = new Map();
123
+ for (const cmd of commands) {
124
+ const category = cmd.category || 'utility';
125
+ let list = map.get(category);
126
+ if (!list) {
127
+ list = [];
128
+ map.set(category, list);
129
+ }
130
+ list.push(cmd);
131
+ }
132
+ // Sort commands within each category by ID
133
+ // Use Array.from to convert values() iterator to array
134
+ Array.from(map.values()).forEach((list) => {
135
+ list.sort((a, b) => a.id.localeCompare(b.id));
136
+ });
137
+ return map;
138
+ }
139
+ /**
140
+ * Format command name with primary alias
141
+ *
142
+ * Returns a formatted command name string that includes the primary alias
143
+ * (if present) for display in help text.
144
+ *
145
+ * Format:
146
+ * - No aliases: "command-name"
147
+ * - With aliases: "command-name, -alias"
148
+ *
149
+ * @param cmd - Command extension
150
+ * @returns Formatted command name string
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * // Command with no aliases
155
+ * const name1 = formatCommandName(useCmd);
156
+ * // Returns: "use"
157
+ *
158
+ * // Command with aliases
159
+ * const name2 = formatCommandName(newCmd);
160
+ * // Returns: "new, -new"
161
+ *
162
+ * // Command with multiple aliases
163
+ * const name3 = formatCommandName(helpCmd);
164
+ * // Returns: "help, -h"
165
+ * ```
166
+ */
167
+ function formatCommandName(cmd) {
168
+ // Get aliases from metadata
169
+ const metadata = cmd.metadata;
170
+ const aliases = metadata?.aliases || [];
171
+ // If no aliases, just return ID
172
+ if (aliases.length === 0) {
173
+ return cmd.id;
174
+ }
175
+ // Show command name with first alias
176
+ return `${cmd.id}, ${aliases[0]}`;
177
+ }
178
+ //# sourceMappingURL=help-generator.js.map
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Activity-log auto-append hook
3
+ *
4
+ * Post-command hook that automatically appends an activity-log entry
5
+ * after qualifying CLI commands succeed. Closes the discipline gap
6
+ * called out in the activity-log rule:
7
+ *
8
+ * "Subagents silently create and delete artifacts with no record
9
+ * visible to the parent orchestrator"
10
+ *
11
+ * Failures are non-blocking: if the entry can't be written, we log to
12
+ * stderr and let the primary command's success stand.
13
+ *
14
+ * @design @.aiwg/architecture/storage-design.md
15
+ * @issue #934
16
+ * @issue #978
17
+ */
18
+ import { formatEntry } from '../../../activity-log/types.js';
19
+ import { resolveStorage } from '../../../storage/index.js';
20
+ const LOG_PATH = 'activity.log';
21
+ /**
22
+ * Map of CLI command id → operation token. Commands not in this map
23
+ * skip the hook (most reads, queries, scaffolding helpers, etc.).
24
+ */
25
+ const COMMAND_OPERATION_MAP = {
26
+ // Framework deployment
27
+ use: 'deploy',
28
+ refresh: 'deploy',
29
+ remove: 'delete',
30
+ // Extension scaffolding
31
+ 'add-agent': 'create',
32
+ 'add-command': 'create',
33
+ 'add-skill': 'create',
34
+ 'add-template': 'create',
35
+ 'add-behavior': 'create',
36
+ // Validation
37
+ 'validate-metadata': 'lint',
38
+ // Index updates
39
+ index: 'update', // Note: 'aiwg index build' is the primary mutating subcommand
40
+ // Ops ecosystem
41
+ ops: 'create', // crude — `aiwg ops init` creates; `push`/`adopt` also mutate
42
+ };
43
+ /**
44
+ * Build a one-line summary from the command + args. Bounded to ≤120
45
+ * chars per the activity-log rule.
46
+ */
47
+ function summarize(command, args) {
48
+ const argString = args.join(' ').trim();
49
+ const base = argString.length > 0 ? `aiwg ${command} ${argString}` : `aiwg ${command}`;
50
+ if (base.length <= 120)
51
+ return base;
52
+ return base.slice(0, 117) + '...';
53
+ }
54
+ /**
55
+ * Returns true when AIWG_SKIP_ACTIVITY_LOG is set to a truthy value.
56
+ * Mirrors the gate in src/activity-log/cli.ts (#975).
57
+ */
58
+ function isActivityLogSkipped() {
59
+ const raw = process.env['AIWG_SKIP_ACTIVITY_LOG'];
60
+ if (!raw)
61
+ return false;
62
+ const v = raw.toLowerCase().trim();
63
+ if (v === '0' || v === 'false' || v === '')
64
+ return false;
65
+ return true;
66
+ }
67
+ export const activityLogPostCommandHook = {
68
+ id: 'aiwg:activity-log-auto-append',
69
+ event: 'post-command',
70
+ priority: 100,
71
+ filter: {
72
+ // Only fire for the commands we know how to summarize. The map above
73
+ // is the source of truth.
74
+ commands: Object.keys(COMMAND_OPERATION_MAP),
75
+ },
76
+ async execute(ctx) {
77
+ // Skip on env-var opt-out
78
+ if (isActivityLogSkipped()) {
79
+ return { action: 'continue' };
80
+ }
81
+ // Skip if the command failed (post-command runs even on failure for
82
+ // some hook flows; we never want to log a failure as a successful op)
83
+ const exitCode = ctx.data?.['exitCode'];
84
+ if (typeof exitCode === 'number' && exitCode !== 0) {
85
+ return { action: 'continue' };
86
+ }
87
+ const operation = COMMAND_OPERATION_MAP[ctx.command];
88
+ if (!operation) {
89
+ // Filter should prevent this, but defensive
90
+ return { action: 'continue' };
91
+ }
92
+ try {
93
+ const adapter = await resolveStorage('activity_log');
94
+ const line = formatEntry({
95
+ timestamp: new Date(),
96
+ operation,
97
+ summary: summarize(ctx.command, ctx.args),
98
+ }) + '\n';
99
+ // Prefer atomic append (#976) when available
100
+ if (typeof adapter.append === 'function') {
101
+ const existing = (await adapter.read(LOG_PATH)) ?? '';
102
+ if (existing.length > 0 && !existing.endsWith('\n')) {
103
+ await adapter.append(LOG_PATH, '\n');
104
+ }
105
+ await adapter.append(LOG_PATH, line);
106
+ }
107
+ else {
108
+ const existing = (await adapter.read(LOG_PATH)) ?? '';
109
+ const trailing = existing.length === 0 || existing.endsWith('\n') ? '' : '\n';
110
+ await adapter.write(LOG_PATH, existing + trailing + line);
111
+ }
112
+ }
113
+ catch (err) {
114
+ // Non-blocking — log to stderr and let the primary command's
115
+ // success stand. Per the activity-log rule's "Rule 4: Non-Blocking".
116
+ const msg = err instanceof Error ? err.message : String(err);
117
+ process.stderr.write(`activity-log auto-append failed (non-fatal): ${msg}\n`);
118
+ }
119
+ return { action: 'continue' };
120
+ },
121
+ };
122
+ /**
123
+ * The list of commands the hook fires for. Exported for tests.
124
+ */
125
+ export const HOOKED_COMMANDS = Object.keys(COMMAND_OPERATION_MAP);
126
+ //# sourceMappingURL=activity-log-hook.js.map