@aiwg/cli 0.0.0-bootstrap.0 → 2026.7.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -1
  3. package/bin/aiwg.mjs +349 -0
  4. package/dist/src/a2a/agent-card.js +145 -0
  5. package/dist/src/a2a/client.js +411 -0
  6. package/dist/src/a2a/hitl-cli.js +171 -0
  7. package/dist/src/a2a/hitl-driver.js +370 -0
  8. package/dist/src/a2a/hitl.js +181 -0
  9. package/dist/src/a2a/http.js +193 -0
  10. package/dist/src/a2a/jcs.js +128 -0
  11. package/dist/src/a2a/jws.js +187 -0
  12. package/dist/src/a2a/types.js +24 -0
  13. package/dist/src/a2a/webhook.js +240 -0
  14. package/dist/src/activity-log/cli.js +348 -0
  15. package/dist/src/activity-log/parser.js +81 -0
  16. package/dist/src/activity-log/types.js +50 -0
  17. package/dist/src/agents/agent-deployer.js +367 -0
  18. package/dist/src/agents/agent-packager.js +271 -0
  19. package/dist/src/agents/agent-validator.js +271 -0
  20. package/dist/src/agents/grounding/knowledge-base.js +161 -0
  21. package/dist/src/agents/grounding/types.js +12 -0
  22. package/dist/src/agents/index.js +10 -0
  23. package/dist/src/agents/packaged-agent-inventory.js +75 -0
  24. package/dist/src/agents/types.js +7 -0
  25. package/dist/src/api/index.d.ts +10 -0
  26. package/dist/src/api/index.js +10 -0
  27. package/dist/src/artifacts/address-parser.js +73 -0
  28. package/dist/src/artifacts/audit/cli.js +183 -0
  29. package/dist/src/artifacts/audit/drift.js +122 -0
  30. package/dist/src/artifacts/audit/types.js +12 -0
  31. package/dist/src/artifacts/backends/graphology-backend.js +160 -0
  32. package/dist/src/artifacts/backends/json-backend.js +129 -0
  33. package/dist/src/artifacts/backends/sqlite-backend.js +199 -0
  34. package/dist/src/artifacts/browser-export.js +622 -0
  35. package/dist/src/artifacts/capability-resolver.js +94 -0
  36. package/dist/src/artifacts/checksum-manifest.js +91 -0
  37. package/dist/src/artifacts/citation-parser.js +162 -0
  38. package/dist/src/artifacts/cli.js +1486 -0
  39. package/dist/src/artifacts/corpus-tools/citation-densify.js +311 -0
  40. package/dist/src/artifacts/corpus-tools/cli.js +393 -0
  41. package/dist/src/artifacts/corpus-tools/corpus-graph.js +225 -0
  42. package/dist/src/artifacts/corpus-tools/curator.js +186 -0
  43. package/dist/src/artifacts/corpus-tools/discovery-log.js +70 -0
  44. package/dist/src/artifacts/corpus-tools/funder-network.js +141 -0
  45. package/dist/src/artifacts/corpus-tools/induction-audit.js +233 -0
  46. package/dist/src/artifacts/corpus-tools/integrity-scan.js +202 -0
  47. package/dist/src/artifacts/corpus-tools/profile-communities.js +166 -0
  48. package/dist/src/artifacts/corpus-tools/profile-edges.js +72 -0
  49. package/dist/src/artifacts/corpus-tools/profile-embed.js +113 -0
  50. package/dist/src/artifacts/corpus-tools/profile-generate-fm.js +167 -0
  51. package/dist/src/artifacts/corpus-tools/profile-generate.js +181 -0
  52. package/dist/src/artifacts/corpus-tools/profile-metrics.js +98 -0
  53. package/dist/src/artifacts/corpus-tools/profile-status.js +86 -0
  54. package/dist/src/artifacts/corpus-tools/profile-temporal.js +139 -0
  55. package/dist/src/artifacts/corpus-tools/radar-init.js +93 -0
  56. package/dist/src/artifacts/corpus-tools/radar-report.js +118 -0
  57. package/dist/src/artifacts/corpus-tools/radar-shared.js +189 -0
  58. package/dist/src/artifacts/corpus-tools/radar-status.js +68 -0
  59. package/dist/src/artifacts/corpus-tools/sidecar-lint.js +233 -0
  60. package/dist/src/artifacts/corpus-tools/sidecar-repair.js +277 -0
  61. package/dist/src/artifacts/corpus-tools/snapshot.js +591 -0
  62. package/dist/src/artifacts/corpus-tools/source-types.js +164 -0
  63. package/dist/src/artifacts/corpus-tools/vision-extract.js +243 -0
  64. package/dist/src/artifacts/corpus-views/build.js +126 -0
  65. package/dist/src/artifacts/corpus-views/corpus-config.js +124 -0
  66. package/dist/src/artifacts/corpus-views/ref-parser.js +437 -0
  67. package/dist/src/artifacts/corpus-views/renderers.js +353 -0
  68. package/dist/src/artifacts/corpus-views/taxonomies.js +131 -0
  69. package/dist/src/artifacts/dep-graph.js +173 -0
  70. package/dist/src/artifacts/discover-facets.js +375 -0
  71. package/dist/src/artifacts/embedding-index.js +354 -0
  72. package/dist/src/artifacts/enrichment/cli.js +240 -0
  73. package/dist/src/artifacts/enrichment/prompt.js +47 -0
  74. package/dist/src/artifacts/enrichment/store.js +90 -0
  75. package/dist/src/artifacts/enrichment/types.js +12 -0
  76. package/dist/src/artifacts/fortemi-core-query-adapter.js +475 -0
  77. package/dist/src/artifacts/fortemi-core-sync.js +251 -0
  78. package/dist/src/artifacts/fortemi-shard-export.js +44 -0
  79. package/dist/src/artifacts/fulltext.js +108 -0
  80. package/dist/src/artifacts/graph-backend.js +51 -0
  81. package/dist/src/artifacts/graph-query.js +247 -0
  82. package/dist/src/artifacts/hybrid-query.js +225 -0
  83. package/dist/src/artifacts/index-builder.js +1089 -0
  84. package/dist/src/artifacts/index-reader.js +112 -0
  85. package/dist/src/artifacts/index-status.js +193 -0
  86. package/dist/src/artifacts/legacy-index-migration.js +169 -0
  87. package/dist/src/artifacts/move.js +154 -0
  88. package/dist/src/artifacts/operational-state.js +239 -0
  89. package/dist/src/artifacts/prebuilt-build-lock.js +49 -0
  90. package/dist/src/artifacts/query-engine.js +1955 -0
  91. package/dist/src/artifacts/source-graph.js +529 -0
  92. package/dist/src/artifacts/stats.js +169 -0
  93. package/dist/src/artifacts/types.js +606 -0
  94. package/dist/src/artifacts/views/cli.js +293 -0
  95. package/dist/src/artifacts/views/definition.js +170 -0
  96. package/dist/src/artifacts/views/store.js +149 -0
  97. package/dist/src/artifacts/views/types.js +8 -0
  98. package/dist/src/artifacts/watcher.js +255 -0
  99. package/dist/src/catalog/builtin-models.json +636 -0
  100. package/dist/src/catalog/cli.js +228 -0
  101. package/dist/src/catalog/cli.mjs +289 -0
  102. package/dist/src/catalog/index.js +15 -0
  103. package/dist/src/catalog/loader.js +217 -0
  104. package/dist/src/catalog/loader.mjs +251 -0
  105. package/dist/src/catalog/sources.json +41 -0
  106. package/dist/src/catalog/types.js +8 -0
  107. package/dist/src/channel/manager.mjs +504 -0
  108. package/dist/src/cli/agent-spawn.js +178 -0
  109. package/dist/src/cli/cli-extension-loader.js +245 -0
  110. package/dist/src/cli/command-log.js +275 -0
  111. package/dist/src/cli/config-loader.js +232 -0
  112. package/dist/src/cli/env.js +82 -0
  113. package/dist/src/cli/errors.js +150 -0
  114. package/dist/src/cli/find-package-root.js +40 -0
  115. package/dist/src/cli/git-hooks.js +250 -0
  116. package/dist/src/cli/handlers/agentcard.js +206 -0
  117. package/dist/src/cli/handlers/artifacts.js +76 -0
  118. package/dist/src/cli/handlers/best-practices-audit.js +280 -0
  119. package/dist/src/cli/handlers/cockpit.js +137 -0
  120. package/dist/src/cli/handlers/command-log.js +37 -0
  121. package/dist/src/cli/handlers/daemon.js +59 -0
  122. package/dist/src/cli/handlers/diagnose.js +300 -0
  123. package/dist/src/cli/handlers/execution-mode.js +105 -0
  124. package/dist/src/cli/handlers/feedback.js +341 -0
  125. package/dist/src/cli/handlers/help.js +147 -0
  126. package/dist/src/cli/handlers/index.js +302 -0
  127. package/dist/src/cli/handlers/init.js +179 -0
  128. package/dist/src/cli/handlers/install.js +129 -0
  129. package/dist/src/cli/handlers/issues.js +46 -0
  130. package/dist/src/cli/handlers/lint.js +42 -0
  131. package/dist/src/cli/handlers/local-executor.js +315 -0
  132. package/dist/src/cli/handlers/marketplace.js +168 -0
  133. package/dist/src/cli/handlers/mc.js +1010 -0
  134. package/dist/src/cli/handlers/models.js +352 -0
  135. package/dist/src/cli/handlers/packages.js +155 -0
  136. package/dist/src/cli/handlers/ralph-launcher.js +717 -0
  137. package/dist/src/cli/handlers/ralph.js +575 -0
  138. package/dist/src/cli/handlers/refresh.js +432 -0
  139. package/dist/src/cli/handlers/regenerate.js +336 -0
  140. package/dist/src/cli/handlers/repo-access.js +109 -0
  141. package/dist/src/cli/handlers/run.js +165 -0
  142. package/dist/src/cli/handlers/runtime-info.js +301 -0
  143. package/dist/src/cli/handlers/sandbox.js +197 -0
  144. package/dist/src/cli/handlers/scaffolding.js +149 -0
  145. package/dist/src/cli/handlers/script-runner.js +121 -0
  146. package/dist/src/cli/handlers/sdlc-accelerate.js +148 -0
  147. package/dist/src/cli/handlers/serve.js +1835 -0
  148. package/dist/src/cli/handlers/session.js +348 -0
  149. package/dist/src/cli/handlers/setup.js +440 -0
  150. package/dist/src/cli/handlers/skill-lint.js +367 -0
  151. package/dist/src/cli/handlers/skill-usage.js +74 -0
  152. package/dist/src/cli/handlers/steward.js +567 -0
  153. package/dist/src/cli/handlers/subcommands.js +1702 -0
  154. package/dist/src/cli/handlers/team.js +337 -0
  155. package/dist/src/cli/handlers/types.js +11 -0
  156. package/dist/src/cli/handlers/use.js +2772 -0
  157. package/dist/src/cli/handlers/utilities.js +703 -0
  158. package/dist/src/cli/handlers/version.js +134 -0
  159. package/dist/src/cli/handlers/workspace-context.js +93 -0
  160. package/dist/src/cli/handlers/workspace.js +126 -0
  161. package/dist/src/cli/help-generator.js +178 -0
  162. package/dist/src/cli/hooks/builtin/activity-log-hook.js +126 -0
  163. package/dist/src/cli/hooks/executor.js +96 -0
  164. package/dist/src/cli/hooks/index.js +15 -0
  165. package/dist/src/cli/hooks/registry.js +143 -0
  166. package/dist/src/cli/hooks/types.js +13 -0
  167. package/dist/src/cli/log.js +492 -0
  168. package/dist/src/cli/project-isolation/detect.js +70 -0
  169. package/dist/src/cli/project-isolation/index.js +7 -0
  170. package/dist/src/cli/project-isolation/signals.js +17 -0
  171. package/dist/src/cli/project-isolation/warning.js +102 -0
  172. package/dist/src/cli/prompt-utils.js +155 -0
  173. package/dist/src/cli/provider-deployment-plan.js +126 -0
  174. package/dist/src/cli/provider-resolution.js +119 -0
  175. package/dist/src/cli/router.js +305 -0
  176. package/dist/src/cli/scope-resolver.js +392 -0
  177. package/dist/src/cli/skill-usage.js +616 -0
  178. package/dist/src/cli/ui.js +224 -0
  179. package/dist/src/cli/watch-service.js +203 -0
  180. package/dist/src/cli/workflow-orchestrator.js +478 -0
  181. package/dist/src/cli/workspace-signals.js +321 -0
  182. package/dist/src/community/footer.js +14 -0
  183. package/dist/src/community/links.js +123 -0
  184. package/dist/src/community/milestones.js +46 -0
  185. package/dist/src/community/nudge-policy.js +93 -0
  186. package/dist/src/config/aiwg-config.js +883 -0
  187. package/dist/src/config/cli.js +703 -0
  188. package/dist/src/config/gitignore.js +156 -0
  189. package/dist/src/config/project-artifacts.js +76 -0
  190. package/dist/src/config/user-config.js +428 -0
  191. package/dist/src/config/user-registry.js +127 -0
  192. package/dist/src/config/workspace.js +276 -0
  193. package/dist/src/contributors/detect.js +39 -0
  194. package/dist/src/contributors/discover.js +172 -0
  195. package/dist/src/contributors/heuristic.js +186 -0
  196. package/dist/src/contributors/index.js +11 -0
  197. package/dist/src/contributors/types.js +13 -0
  198. package/dist/src/contributors/validation.js +116 -0
  199. package/dist/src/data/community.schema.json +43 -0
  200. package/dist/src/data/community.yaml +16 -0
  201. package/dist/src/extensions/capability-index.js +270 -0
  202. package/dist/src/extensions/claude-hooks-installer.js +268 -0
  203. package/dist/src/extensions/commands/definitions.js +3485 -0
  204. package/dist/src/extensions/deployment-registration.js +463 -0
  205. package/dist/src/extensions/index.js +22 -0
  206. package/dist/src/extensions/loader.js +132 -0
  207. package/dist/src/extensions/managed-marker.js +100 -0
  208. package/dist/src/extensions/manifest.js +196 -0
  209. package/dist/src/extensions/project-local-activity.js +114 -0
  210. package/dist/src/extensions/project-local-discovery.js +261 -0
  211. package/dist/src/extensions/project-local-doctor.js +281 -0
  212. package/dist/src/extensions/project-local-gitignore.js +176 -0
  213. package/dist/src/extensions/project-local-paths.js +121 -0
  214. package/dist/src/extensions/project-local-promote.js +218 -0
  215. package/dist/src/extensions/project-local-remove.js +373 -0
  216. package/dist/src/extensions/project-local-scaffold.js +252 -0
  217. package/dist/src/extensions/project-quickref.js +291 -0
  218. package/dist/src/extensions/registry.js +368 -0
  219. package/dist/src/extensions/shadow-resolver.js +271 -0
  220. package/dist/src/extensions/types.js +86 -0
  221. package/dist/src/extensions/upstream-registry.js +195 -0
  222. package/dist/src/extensions/validation.js +631 -0
  223. package/dist/src/features/catalog.js +88 -0
  224. package/dist/src/features/cli.js +197 -0
  225. package/dist/src/features/installer.js +57 -0
  226. package/dist/src/features/paths.js +14 -0
  227. package/dist/src/features/runtime.js +21 -0
  228. package/dist/src/features/status.js +134 -0
  229. package/dist/src/hooks/laziness-detection.js +532 -0
  230. package/dist/src/intake/git-history-analyzer.js +486 -0
  231. package/dist/src/intake/index.js +9 -0
  232. package/dist/src/issues/cli.js +327 -0
  233. package/dist/src/issues/index.js +5 -0
  234. package/dist/src/issues/live.js +154 -0
  235. package/dist/src/issues/local.js +666 -0
  236. package/dist/src/issues/sync.js +143 -0
  237. package/dist/src/issues/types.js +2 -0
  238. package/dist/src/issues/workflows.js +164 -0
  239. package/dist/src/kb/cli.js +173 -0
  240. package/dist/src/lint/cli.js +171 -0
  241. package/dist/src/lint/loader.js +225 -0
  242. package/dist/src/lint/reporters.js +141 -0
  243. package/dist/src/lint/runner.js +364 -0
  244. package/dist/src/lint/types.js +10 -0
  245. package/dist/src/marketplace/cache.js +110 -0
  246. package/dist/src/marketplace/identifier.js +63 -0
  247. package/dist/src/marketplace/registry.js +36 -0
  248. package/dist/src/marketplace/sources/clawhub.js +53 -0
  249. package/dist/src/marketplace/sources/git.js +45 -0
  250. package/dist/src/marketplace/types.js +9 -0
  251. package/dist/src/mcp/adapters/codex-runtime.js +224 -0
  252. package/dist/src/mcp/cli.mjs +1197 -0
  253. package/dist/src/mcp/elicitation.mjs +149 -0
  254. package/dist/src/mcp/helpers.mjs +287 -0
  255. package/dist/src/mcp/index.mjs +11 -0
  256. package/dist/src/mcp/profiles.js +263 -0
  257. package/dist/src/mcp/profiles.mjs +360 -0
  258. package/dist/src/mcp/registry.js +376 -0
  259. package/dist/src/mcp/registry.mjs +387 -0
  260. package/dist/src/mcp/server.mjs +633 -0
  261. package/dist/src/mcp/test-simple.mjs +271 -0
  262. package/dist/src/mcp/tools/command-run.mjs +101 -0
  263. package/dist/src/mcp/tools/discovery.mjs +291 -0
  264. package/dist/src/mcp/tools/interaction.mjs +87 -0
  265. package/dist/src/mcp/tools/orchestration.mjs +320 -0
  266. package/dist/src/mcp/tools/subsystems.mjs +640 -0
  267. package/dist/src/memory/cli.js +166 -0
  268. package/dist/src/memory/project-registry.js +282 -0
  269. package/dist/src/metrics/artifact-metrics.js +184 -0
  270. package/dist/src/metrics/context-budget.js +174 -0
  271. package/dist/src/metrics/token-counter.js +133 -0
  272. package/dist/src/models/config-loader.js +228 -0
  273. package/dist/src/models/index.js +22 -0
  274. package/dist/src/models/model-capabilities.v1.json +120 -0
  275. package/dist/src/models/model-catalog.v1.json +96 -0
  276. package/dist/src/models/model-discovery.js +521 -0
  277. package/dist/src/models/provider-models.js +73 -0
  278. package/dist/src/models/provider-policy.js +273 -0
  279. package/dist/src/models/resolver.js +245 -0
  280. package/dist/src/models/router.js +70 -0
  281. package/dist/src/models/types.js +8 -0
  282. package/dist/src/models/wrapper-deployment.js +178 -0
  283. package/dist/src/models/wrapper-route.js +54 -0
  284. package/dist/src/ops/cli.js +268 -0
  285. package/dist/src/ops/registry.js +623 -0
  286. package/dist/src/packages/adapters/clawhub.js +113 -0
  287. package/dist/src/packages/adapters/git.js +153 -0
  288. package/dist/src/packages/adapters/gitea.js +93 -0
  289. package/dist/src/packages/adapters/github.js +69 -0
  290. package/dist/src/packages/adapters/local-cache.js +89 -0
  291. package/dist/src/packages/package-registry.js +143 -0
  292. package/dist/src/packages/registry.js +238 -0
  293. package/dist/src/packages/types.js +11 -0
  294. package/dist/src/plugin/cross-framework-ops.js +475 -0
  295. package/dist/src/plugin/framework-config-loader.js +235 -0
  296. package/dist/src/plugin/framework-detector.js +186 -0
  297. package/dist/src/plugin/framework-isolator.js +341 -0
  298. package/dist/src/plugin/framework-migration.js +371 -0
  299. package/dist/src/plugin/metadata-validator.js +906 -0
  300. package/dist/src/plugin/plugin-installer.js +436 -0
  301. package/dist/src/plugin/plugin-status.js +369 -0
  302. package/dist/src/plugin/plugin-uninstaller.js +473 -0
  303. package/dist/src/plugin/registry-validator.js +344 -0
  304. package/dist/src/plugin/skill-command-translator.js +415 -0
  305. package/dist/src/plugin/workspace-creator.js +189 -0
  306. package/dist/src/plugin/workspace-migrator.js +821 -0
  307. package/dist/src/policy/authorization.js +390 -0
  308. package/dist/src/policy/repo-access.js +215 -0
  309. package/dist/src/provenance/cli.js +16 -0
  310. package/dist/src/providers/capability-matrix.js +300 -0
  311. package/dist/src/providers/capability-matrix.yaml +514 -0
  312. package/dist/src/providers/provider-definitions.js +977 -0
  313. package/dist/src/providers/provider-definitions.mjs +159 -0
  314. package/dist/src/providers/provider-inventory.js +169 -0
  315. package/dist/src/quality/feedback-ab.js +174 -0
  316. package/dist/src/quality/feedback-collector.js +176 -0
  317. package/dist/src/quality/feedback-tracker.js +123 -0
  318. package/dist/src/quality/patterns/adr.json +24 -0
  319. package/dist/src/quality/patterns/sad.json +24 -0
  320. package/dist/src/quality/patterns/test-plan.json +24 -0
  321. package/dist/src/quality/patterns/use-case.json +24 -0
  322. package/dist/src/quality/scoring.js +157 -0
  323. package/dist/src/reflections/cli.js +15 -0
  324. package/dist/src/release/plan.js +139 -0
  325. package/dist/src/research/cache/manager.js +227 -0
  326. package/dist/src/research/clients/arxiv.js +156 -0
  327. package/dist/src/research/clients/base.js +197 -0
  328. package/dist/src/research/clients/crossref.js +112 -0
  329. package/dist/src/research/clients/semantic-scholar.js +126 -0
  330. package/dist/src/research/clients/unpaywall.js +87 -0
  331. package/dist/src/research/index.js +14 -0
  332. package/dist/src/research/query-cli.js +336 -0
  333. package/dist/src/research/services/acquisition.js +313 -0
  334. package/dist/src/research/services/archival.js +225 -0
  335. package/dist/src/research/services/citation.js +279 -0
  336. package/dist/src/research/services/discovery.js +243 -0
  337. package/dist/src/research/services/documentation.js +269 -0
  338. package/dist/src/research/services/index.js +14 -0
  339. package/dist/src/research/services/provenance.js +279 -0
  340. package/dist/src/research/services/quality.js +370 -0
  341. package/dist/src/research/services/types.js +7 -0
  342. package/dist/src/research/storage-cli.js +20 -0
  343. package/dist/src/research/types.js +47 -0
  344. package/dist/src/resources/index.d.ts +2 -0
  345. package/dist/src/resources/index.js +2 -0
  346. package/dist/src/resources/web-release.d.ts +89 -0
  347. package/dist/src/resources/web-release.js +886 -0
  348. package/dist/src/rlm/cache/cli.js +162 -0
  349. package/dist/src/rlm/cache/hash.js +35 -0
  350. package/dist/src/rlm/cache/store.js +170 -0
  351. package/dist/src/rlm/cache/types.js +8 -0
  352. package/dist/src/rlm/cli.js +650 -0
  353. package/dist/src/serve/a2a-terminal-observer.js +120 -0
  354. package/dist/src/serve/agent-router.js +205 -0
  355. package/dist/src/serve/dispatch-router.js +171 -0
  356. package/dist/src/serve/executor-registry.js +715 -0
  357. package/dist/src/serve/mission-conductor.js +177 -0
  358. package/dist/src/serve/orchestrator-adapter.js +113 -0
  359. package/dist/src/serve/orchestrator-override.js +94 -0
  360. package/dist/src/serve/orchestrator-pty.js +133 -0
  361. package/dist/src/serve/pty-bridge.js +799 -0
  362. package/dist/src/serve/sandbox-registry.js +832 -0
  363. package/dist/src/serve/screen-reader.js +228 -0
  364. package/dist/src/serve/stack-adapters.js +68 -0
  365. package/dist/src/serve/telemetry.js +143 -0
  366. package/dist/src/skills/adapters/clawhub.js +250 -0
  367. package/dist/src/skills/adapters/local.js +335 -0
  368. package/dist/src/skills/adapters/openclaw.js +316 -0
  369. package/dist/src/skills/cli.js +334 -0
  370. package/dist/src/skills/registry.js +117 -0
  371. package/dist/src/skills/run.js +259 -0
  372. package/dist/src/skills/runtime.js +94 -0
  373. package/dist/src/skills/types.js +10 -0
  374. package/dist/src/smiths/agentsmith/demo.js +116 -0
  375. package/dist/src/smiths/agentsmith/examples.js +300 -0
  376. package/dist/src/smiths/agentsmith/generator.js +503 -0
  377. package/dist/src/smiths/agentsmith/index.js +11 -0
  378. package/dist/src/smiths/agentsmith/types.js +8 -0
  379. package/dist/src/smiths/commandsmith/example.js +220 -0
  380. package/dist/src/smiths/commandsmith/generator.js +288 -0
  381. package/dist/src/smiths/commandsmith/index.js +41 -0
  382. package/dist/src/smiths/commandsmith/templates.js +296 -0
  383. package/dist/src/smiths/commandsmith/types.js +7 -0
  384. package/dist/src/smiths/context-pipeline/aiwg-md.js +104 -0
  385. package/dist/src/smiths/context-pipeline/allowlist.js +195 -0
  386. package/dist/src/smiths/context-pipeline/claude-hook.js +127 -0
  387. package/dist/src/smiths/context-pipeline/discovery.js +187 -0
  388. package/dist/src/smiths/context-pipeline/external-links-section.js +49 -0
  389. package/dist/src/smiths/context-pipeline/finalization.js +147 -0
  390. package/dist/src/smiths/context-pipeline/generator.js +477 -0
  391. package/dist/src/smiths/context-pipeline/index.js +30 -0
  392. package/dist/src/smiths/context-pipeline/legacy-inject.js +103 -0
  393. package/dist/src/smiths/context-pipeline/managed-hook.js +95 -0
  394. package/dist/src/smiths/context-pipeline/overflow.js +212 -0
  395. package/dist/src/smiths/context-pipeline/parallelism-section.js +94 -0
  396. package/dist/src/smiths/context-pipeline/provider-policy.js +64 -0
  397. package/dist/src/smiths/context-pipeline/sanitizer.js +93 -0
  398. package/dist/src/smiths/context-pipeline/types.js +23 -0
  399. package/dist/src/smiths/context-pipeline/workspace-context.js +988 -0
  400. package/dist/src/smiths/hook-bridge/codex-translator.js +129 -0
  401. package/dist/src/smiths/hook-bridge/copilot-translator.js +64 -0
  402. package/dist/src/smiths/hook-bridge/factory-translator.js +43 -0
  403. package/dist/src/smiths/hook-bridge/hermes-translator.js +88 -0
  404. package/dist/src/smiths/hook-bridge/index.js +79 -0
  405. package/dist/src/smiths/hook-bridge/loader.js +116 -0
  406. package/dist/src/smiths/hook-bridge/shim.js +89 -0
  407. package/dist/src/smiths/hook-bridge/types.js +31 -0
  408. package/dist/src/smiths/index.js +39 -0
  409. package/dist/src/smiths/mcpsmith/analyzers/cli-analyzer.js +390 -0
  410. package/dist/src/smiths/mcpsmith/example.js +119 -0
  411. package/dist/src/smiths/mcpsmith/generator.js +236 -0
  412. package/dist/src/smiths/mcpsmith/index.js +17 -0
  413. package/dist/src/smiths/mcpsmith/types.js +10 -0
  414. package/dist/src/smiths/platform-paths.js +101 -0
  415. package/dist/src/smiths/skillsmith/codex-sidecar.js +85 -0
  416. package/dist/src/smiths/skillsmith/collision-detector.js +249 -0
  417. package/dist/src/smiths/skillsmith/demo.js +83 -0
  418. package/dist/src/smiths/skillsmith/examples.js +161 -0
  419. package/dist/src/smiths/skillsmith/generator.js +316 -0
  420. package/dist/src/smiths/skillsmith/index.js +12 -0
  421. package/dist/src/smiths/skillsmith/namespace-adapter.js +180 -0
  422. package/dist/src/smiths/skillsmith/platform-resolver.js +157 -0
  423. package/dist/src/smiths/skillsmith/types.js +9 -0
  424. package/dist/src/smiths/toolsmith/index.js +10 -0
  425. package/dist/src/smiths/toolsmith/runtime-discovery.mjs +710 -0
  426. package/dist/src/smiths/toolsmith/types.js +8 -0
  427. package/dist/src/storage/backends/fortemi.js +227 -0
  428. package/dist/src/storage/backends/fs.js +134 -0
  429. package/dist/src/storage/backends/logseq.js +309 -0
  430. package/dist/src/storage/backends/obsidian.js +233 -0
  431. package/dist/src/storage/cli.js +468 -0
  432. package/dist/src/storage/config.js +272 -0
  433. package/dist/src/storage/index.js +108 -0
  434. package/dist/src/storage/subsystem-cli.js +201 -0
  435. package/dist/src/storage/types.js +33 -0
  436. package/dist/src/testing/corpus/corpus-builder.js +383 -0
  437. package/dist/src/testing/corpus/ground-truth-manager.js +460 -0
  438. package/dist/src/testing/corpus/index.js +10 -0
  439. package/dist/src/testing/fixtures/index.js +9 -0
  440. package/dist/src/testing/fixtures/test-data-factory.js +472 -0
  441. package/dist/src/testing/generators/index.js +11 -0
  442. package/dist/src/testing/generators/test-case-generator.js +393 -0
  443. package/dist/src/testing/generators/test-code-generator.js +384 -0
  444. package/dist/src/testing/generators/use-case-parser.js +325 -0
  445. package/dist/src/testing/index.js +11 -0
  446. package/dist/src/tracker/capability-protocol.js +118 -0
  447. package/dist/src/update/checker.mjs +396 -0
  448. package/dist/src/update/notifier.mjs +235 -0
  449. package/dist/src/writing/content-diversifier.js +804 -0
  450. package/dist/src/writing/example-generator.js +959 -0
  451. package/dist/src/writing/example-templates.js +99 -0
  452. package/dist/src/writing/pattern-library.js +486 -0
  453. package/dist/src/writing/patterns/banned-phrases.json +4413 -0
  454. package/dist/src/writing/patterns/formulaic-structures.json +1300 -0
  455. package/dist/src/writing/patterns/generic-adjectives.json +1510 -0
  456. package/dist/src/writing/patterns/hedging-language.json +2096 -0
  457. package/dist/src/writing/patterns/transition-words.json +1285 -0
  458. package/dist/src/writing/patterns/weak-verbs.json +1112 -0
  459. package/dist/src/writing/prompt-optimizer.js +660 -0
  460. package/dist/src/writing/prompt-templates.js +583 -0
  461. package/dist/src/writing/scoring-config-loader.js +168 -0
  462. package/dist/src/writing/validation-engine.js +595 -0
  463. package/dist/src/writing/validation-rules.js +380 -0
  464. package/dist/src/writing/voice-analyzer.js +439 -0
  465. package/dist/src/writing/voice-calibration.js +661 -0
  466. package/dist/src/writing/voice-profiles.json +588 -0
  467. package/package.json +65 -9
@@ -0,0 +1,336 @@
1
+ /**
2
+ * Regenerate Context Files Handler (#1266)
3
+ *
4
+ * `aiwg regenerate` — regenerates the cross-provider context files
5
+ * (WORKSPACE.md + AIWG.md + provider adapters) without redeploying frameworks, agents, skills, or
6
+ * commands. Use when context drifts (e.g., editing CLAUDE.md, adding a
7
+ * framework manifest entry) and you want a fast, focused refresh.
8
+ *
9
+ * Scope: context-only. For full redeploy use `aiwg refresh` or `aiwg use`.
10
+ *
11
+ * Flags:
12
+ * --dry-run Print what would change without writing
13
+ * --provider <name> Target provider (default: auto-detect)
14
+ * --force Overwrite operator-modified context files (backs up first)
15
+ * --no-aiwg-md Skip AIWG.md emission
16
+ * --no-agents-md Skip AGENTS.md emission
17
+ *
18
+ * @source @src/cli/router.ts
19
+ * @issue #1266
20
+ */
21
+ import * as path from 'path';
22
+ import { promises as fs } from 'node:fs';
23
+ import { AiwgError, EXIT_CODES, handlerResultFromError } from '../errors.js';
24
+ import * as ui from '../ui.js';
25
+ import { generate as generateContextFiles, discoverDeployedArtifacts, shouldEmitContextFiles, buildNormalizedAiwgMd, writeNormalizedAiwgMd, injectLegacyContext, migrateWorkspaceContext, extractExistingProjectContext, } from '../../smiths/context-pipeline/index.js';
26
+ import { resolveActiveProvider } from '../provider-resolution.js';
27
+ import { getProviderContextDiscoveryPathStrings } from '../../providers/provider-definitions.js';
28
+ import { projectAiwgPath } from '../../config/project-artifacts.js';
29
+ async function handleRegenerate(args, cwd) {
30
+ if (args.includes('--help') || args.includes('-h')) {
31
+ console.log(`
32
+ aiwg regenerate — Regenerate canonical workspace context and provider adapters
33
+
34
+ Usage:
35
+ aiwg regenerate [options]
36
+
37
+ Scope:
38
+ Context-only. Refreshes WORKSPACE.md, AIWG.md, and provider adapters using the
39
+ canonical context pipeline. Does NOT redeploy frameworks, agents, skills,
40
+ or commands — use 'aiwg refresh' for that.
41
+
42
+ Options:
43
+ --workspace Canonical WORKSPACE.md → AIWG.md graph (default)
44
+ --existing-project Transactionally extract an established project into WORKSPACE.md
45
+ --legacy, --full-inject Legacy inline compatibility branch
46
+ --apply Apply --existing-project after its mandatory preflight
47
+ --dry-run Print what would change; no writes
48
+ --provider <name> Target provider (default: auto-detect from env)
49
+ --force Overwrite operator-modified files (backs up first)
50
+ --no-aiwg-md Skip AIWG.md emission
51
+ --no-agents-md Skip AGENTS.md emission
52
+ --no-workspace-md Skip WORKSPACE.md emission
53
+ --help, -h Show this help
54
+
55
+ Examples:
56
+ aiwg regenerate
57
+ aiwg regenerate --workspace
58
+ aiwg regenerate --existing-project --dry-run
59
+ aiwg regenerate --existing-project --apply
60
+ aiwg regenerate --full-inject
61
+ aiwg regenerate --dry-run
62
+ aiwg regenerate --provider codex
63
+ aiwg regenerate --force --no-agents-md
64
+ `);
65
+ return;
66
+ }
67
+ const dryRun = args.includes('--dry-run');
68
+ const force = args.includes('--force');
69
+ const skipAiwgMd = args.includes('--no-aiwg-md');
70
+ const skipAgentsMd = args.includes('--no-agents-md');
71
+ const skipWorkspaceMd = args.includes('--no-workspace-md');
72
+ const legacy = args.includes('--legacy') || args.includes('--full-inject');
73
+ const workspace = args.includes('--workspace');
74
+ const existingProject = args.includes('--existing-project');
75
+ const apply = args.includes('--apply');
76
+ const valueFlags = new Set(['--provider']);
77
+ const booleanFlags = new Set([
78
+ '--help', '-h', '--dry-run', '--force', '--no-aiwg-md', '--no-agents-md',
79
+ '--no-workspace-md', '--legacy', '--full-inject', '--workspace',
80
+ '--existing-project', '--apply',
81
+ ]);
82
+ for (let index = 0; index < args.length; index += 1) {
83
+ const arg = args[index];
84
+ if (valueFlags.has(arg)) {
85
+ if (!args[index + 1] || args[index + 1].startsWith('-'))
86
+ throw new AiwgError({
87
+ code: 'ERR_USAGE_MISSING_VALUE', message: `${arg} requires a value`, exitCode: EXIT_CODES.USAGE,
88
+ });
89
+ index += 1;
90
+ }
91
+ else if (!booleanFlags.has(arg)) {
92
+ throw new AiwgError({
93
+ code: 'ERR_USAGE_UNKNOWN_FLAG', message: `Unknown regenerate option: ${arg}`,
94
+ hint: 'Run aiwg regenerate --help for supported branches and flags.', exitCode: EXIT_CODES.USAGE,
95
+ });
96
+ }
97
+ }
98
+ const selectedBranches = Number(legacy) + Number(workspace) + Number(existingProject);
99
+ if (selectedBranches > 1)
100
+ throw new AiwgError({
101
+ code: 'ERR_USAGE_CONFLICTING_FLAGS',
102
+ message: 'Choose exactly one regenerate branch: --workspace, --existing-project, or --full-inject.',
103
+ exitCode: EXIT_CODES.USAGE,
104
+ });
105
+ if (apply && !existingProject)
106
+ throw new AiwgError({
107
+ code: 'ERR_USAGE_CONFLICTING_FLAGS',
108
+ message: '--apply is only valid with --existing-project.',
109
+ exitCode: EXIT_CODES.USAGE,
110
+ });
111
+ if (existingProject && dryRun && apply)
112
+ throw new AiwgError({
113
+ code: 'ERR_USAGE_CONFLICTING_FLAGS',
114
+ message: 'Choose either --dry-run or --apply for --existing-project.',
115
+ exitCode: EXIT_CODES.USAGE,
116
+ });
117
+ if (existingProject && (force || skipAiwgMd || skipAgentsMd || skipWorkspaceMd))
118
+ throw new AiwgError({
119
+ code: 'ERR_USAGE_CONFLICTING_FLAGS',
120
+ message: '--existing-project is a complete transaction and cannot be combined with --force or --no-*-md flags.',
121
+ exitCode: EXIT_CODES.USAGE,
122
+ });
123
+ const providerFlag = args.indexOf('--provider');
124
+ const explicitProvider = providerFlag >= 0 ? args[providerFlag + 1] : undefined;
125
+ const resolution = await resolveActiveProvider({ cwd, explicitProvider, detectProcess: true });
126
+ if (!resolution.provider) {
127
+ throw new AiwgError({
128
+ code: 'ERR_USAGE_PROVIDER_AMBIGUOUS',
129
+ message: 'Could not determine provider for regenerate: ' + resolution.reason,
130
+ hint: resolution.candidates.length
131
+ ? 'Specify --provider (' + resolution.candidates.join(', ') + ')'
132
+ : 'Specify --provider <name>',
133
+ exitCode: EXIT_CODES.USAGE,
134
+ });
135
+ }
136
+ const provider = resolution.provider;
137
+ const target = cwd;
138
+ const effectiveDryRun = dryRun || (existingProject && !apply);
139
+ console.log(`${ui.brandMark()} aiwg regenerate${effectiveDryRun ? ' (dry run)' : ''}`);
140
+ console.log(` Provider: ${provider}`);
141
+ console.log(` Target: ${target}`);
142
+ console.log(` Branch: ${legacy ? 'legacy full injection' : existingProject ? 'canonical existing-project extraction' : 'canonical workspace graph'}`);
143
+ if (existingProject) {
144
+ const preflight = await migrateWorkspaceContext(target, {
145
+ dryRun: true,
146
+ extractProject: true,
147
+ includeGeneratedContext: true,
148
+ });
149
+ const hasExistingSignals = preflight.audit.plan.projectSources.length > 0
150
+ || preflight.audit.sources.some((source) => source.path !== 'WORKSPACE.md' && source.operatorContent.trim().length > 0);
151
+ console.log('');
152
+ console.log(` Stable project sources: ${preflight.audit.plan.projectSources.length}`);
153
+ for (const source of preflight.audit.plan.projectSources)
154
+ console.log(` - ${source}`);
155
+ if (!hasExistingSignals) {
156
+ console.log(' No stable existing-project signals found; no files changed.');
157
+ console.log(' Use `aiwg regenerate --workspace` to initialize a fresh project.');
158
+ return;
159
+ }
160
+ const extractedProject = await extractExistingProjectContext(target);
161
+ console.log(' Synthesized WORKSPACE project block:');
162
+ for (const line of extractedProject.content.split('\n'))
163
+ console.log(` ${line}`);
164
+ console.log(' Transaction plan:');
165
+ for (const file of preflight.written)
166
+ console.log(` - ${file}`);
167
+ if (!apply) {
168
+ console.log('');
169
+ console.log(' Dry run complete — no changes made. Re-run with --apply to commit this transaction.');
170
+ return;
171
+ }
172
+ const migration = await migrateWorkspaceContext(target, {
173
+ apply: true,
174
+ extractProject: true,
175
+ includeGeneratedContext: true,
176
+ });
177
+ for (const file of migration.written)
178
+ console.log(` OK Wrote ${file}`);
179
+ if (migration.transactionId) {
180
+ console.log(` Transaction: ${migration.transactionId}`);
181
+ console.log(` Rollback: aiwg workspace-context rollback ${migration.transactionId}`);
182
+ }
183
+ if (!migration.changed)
184
+ console.log(' Existing-project context is already current.');
185
+ console.log(' Existing-project regenerate complete');
186
+ return;
187
+ }
188
+ if (legacy) {
189
+ if (skipWorkspaceMd)
190
+ console.log(' Note: --no-workspace-md is implicit in legacy mode.');
191
+ const normalizedPath = projectAiwgPath(target, 'AIWG.md');
192
+ let existing = '';
193
+ try {
194
+ existing = await fs.readFile(normalizedPath, 'utf8');
195
+ }
196
+ catch (error) {
197
+ if (error.code !== 'ENOENT')
198
+ throw error;
199
+ }
200
+ const normalizedContent = await buildNormalizedAiwgMd(target, existing);
201
+ const result = skipAgentsMd
202
+ ? { targets: [], backups: [], changed: [], dryRun, warnings: [] }
203
+ : await injectLegacyContext(provider, target, normalizedContent, { dryRun });
204
+ if (dryRun) {
205
+ console.log('');
206
+ console.log(' Would regenerate:');
207
+ if (!skipAiwgMd)
208
+ console.log(` - ${normalizedPath} (normalized framework source)`);
209
+ for (const changed of result.changed)
210
+ console.log(` - ${changed} (legacy inline markers)`);
211
+ for (const warning of result.warnings)
212
+ console.log(` WARNING: ${warning}`);
213
+ console.log('');
214
+ console.log(' Dry run complete — no changes made');
215
+ return;
216
+ }
217
+ if (!skipAiwgMd)
218
+ await writeNormalizedAiwgMd(target);
219
+ for (const changed of result.changed)
220
+ console.log(` OK Injected AIWG context into ${path.relative(target, changed)}`);
221
+ for (const backup of result.backups)
222
+ console.log(` Backup created: ${backup}`);
223
+ for (const warning of result.warnings)
224
+ console.log(` WARNING: ${warning}`);
225
+ console.log(' Legacy regenerate complete');
226
+ return;
227
+ }
228
+ if (!shouldEmitContextFiles(provider)) {
229
+ console.log(` Adapter: provider '${provider}' has no verified project startup loader; WORKSPACE.md is still maintained.`);
230
+ }
231
+ if (dryRun) {
232
+ const aiwgMd = path.join(target, 'AIWG.md');
233
+ const agentsMd = path.join(target, 'AGENTS.md');
234
+ const claudeMd = path.join(target, 'CLAUDE.md');
235
+ console.log('');
236
+ console.log(` Would regenerate:`);
237
+ if (!skipWorkspaceMd)
238
+ console.log(` - ${path.join(target, 'WORKSPACE.md')} (managed graph; operator section preserved)`);
239
+ console.log(` - ${projectAiwgPath(target, 'AIWG.md')}`);
240
+ if (!skipAiwgMd)
241
+ console.log(` - ${aiwgMd}`);
242
+ if (provider === 'claude') {
243
+ console.log(` - ${claudeMd} (managed @WORKSPACE.md then @AIWG.md hook; operator content preserved)`);
244
+ }
245
+ else {
246
+ if (!skipAgentsMd)
247
+ console.log(` - ${agentsMd}`);
248
+ if (provider === 'copilot' && !skipAgentsMd)
249
+ console.log(` - ${path.join(target, '.github', 'copilot-instructions.md')}`);
250
+ }
251
+ if (force)
252
+ console.log(` (with --force: any operator-modified files are backed up first)`);
253
+ console.log('');
254
+ console.log(` Dry run complete — no changes made`);
255
+ return;
256
+ }
257
+ const paths = getProviderContextDiscoveryPathStrings(provider) ?? getProviderContextDiscoveryPathStrings('claude');
258
+ if (!paths)
259
+ throw new Error(`Missing context discovery paths for provider ${provider}`);
260
+ const sections = await discoverDeployedArtifacts(target, {
261
+ agents: paths.agents,
262
+ rules: paths.rules,
263
+ skills: paths.skills,
264
+ behaviors: paths.behaviors,
265
+ });
266
+ const result = await generateContextFiles({
267
+ provider: provider,
268
+ projectPath: target,
269
+ sections,
270
+ detectExistingFiles: true,
271
+ force,
272
+ skip: { workspaceMd: skipWorkspaceMd, aiwgMd: skipAiwgMd, agentsMd: skipAgentsMd },
273
+ });
274
+ if (result.workspaceMdPath) {
275
+ console.log(` OK ${result.workspaceMdAction === 'created' ? 'Created' : 'Refreshed'} WORKSPACE.md`);
276
+ }
277
+ if (result.agentsMdPath) {
278
+ console.log(` OK Wrote AGENTS.md (${result.agentsMdBytes} bytes)`);
279
+ }
280
+ if (result.aiwgMdPath) {
281
+ console.log(` OK Wrote AIWG.md`);
282
+ }
283
+ if (result.normalizedAiwgMdPath) {
284
+ console.log(` OK Wrote ${path.relative(target, result.normalizedAiwgMdPath) || result.normalizedAiwgMdPath}`);
285
+ }
286
+ if (result.claudeMdHookPath && result.claudeMdHookAction && result.claudeMdHookAction !== 'unchanged' && result.claudeMdHookAction !== 'skipped') {
287
+ const verb = result.claudeMdHookAction === 'created' ? 'Created' :
288
+ result.claudeMdHookAction === 'inserted' ? 'Inserted hook into' :
289
+ 'Updated hook in';
290
+ console.log(` OK ${verb} CLAUDE.md (@WORKSPACE.md then @AIWG.md block managed by AIWG)`);
291
+ }
292
+ else if (result.claudeMdHookPath && result.claudeMdHookAction === 'unchanged') {
293
+ console.log(` OK CLAUDE.md hook already up to date`);
294
+ }
295
+ for (const w of result.warnings) {
296
+ // #1579: loud warnings (non-managed twin/bridge left untouched) are prefixed
297
+ // `WARNING:` and rendered prominently so the consequence + remediation isn't
298
+ // buried among the routine OK lines.
299
+ if (w.startsWith('WARNING:')) {
300
+ console.log(` ⚠ context-pipeline: ${w.slice('WARNING:'.length).trim()}`);
301
+ }
302
+ else {
303
+ console.log(` context-pipeline: ${w}`);
304
+ }
305
+ }
306
+ for (const b of result.backupPaths) {
307
+ console.log(` Backup created: ${b}`);
308
+ }
309
+ for (const registration of result.contextRegistrationPaths) {
310
+ console.log(` OK Registered context graph in ${path.relative(target, registration)}`);
311
+ }
312
+ if (!result.agentsMdPath && !result.aiwgMdPath && !result.claudeMdHookPath) {
313
+ console.log(` No files regenerated (all skipped or refused without --force).`);
314
+ }
315
+ else {
316
+ console.log(` Regenerate complete`);
317
+ }
318
+ }
319
+ export const regenerateHandler = {
320
+ id: 'regenerate',
321
+ name: 'Regenerate Context Files',
322
+ description: 'Regenerate WORKSPACE.md, AIWG.md, and provider adapters without redeploying',
323
+ category: 'maintenance',
324
+ aliases: [],
325
+ async execute(ctx) {
326
+ try {
327
+ await handleRegenerate(ctx.args, ctx.cwd);
328
+ return { exitCode: 0 };
329
+ }
330
+ catch (error) {
331
+ return handlerResultFromError(error);
332
+ }
333
+ },
334
+ };
335
+ export const regenerateHandlers = [regenerateHandler];
336
+ //# sourceMappingURL=regenerate.js.map
@@ -0,0 +1,109 @@
1
+ import { checkRepoAccess, findRepoEntry, formatRepoAccessEntry, loadRepoAccessManifest, } from '../../policy/repo-access.js';
2
+ import { resolveWorkspace } from '../../config/workspace.js';
3
+ function valueAfter(args, flag) {
4
+ const index = args.indexOf(flag);
5
+ if (index < 0)
6
+ return null;
7
+ return args[index + 1] ?? null;
8
+ }
9
+ function printHelp() {
10
+ console.log(`
11
+ aiwg repo-access — repo authorization manifest preflight
12
+
13
+ Usage:
14
+ aiwg repo-access list
15
+ aiwg repo-access status
16
+ aiwg repo-access explain --path <repo-or-file>
17
+ aiwg repo-access check --path <repo-or-file> --action <read|write|commit|push|issue-comment|service-action|destructive>
18
+
19
+ Manifest:
20
+ .aiwg/aiwg.config workspace + repos blocks (preferred)
21
+ .aiwg/ops/security/repo-access.manifest.yaml
22
+ .aiwg/security/repo-access.manifest.yaml (fallback)
23
+ `);
24
+ }
25
+ async function handleRepoAccess(ctx) {
26
+ const [subcommand = 'help', ...args] = ctx.args;
27
+ if (subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
28
+ printHelp();
29
+ return { exitCode: 0 };
30
+ }
31
+ try {
32
+ const manifest = loadRepoAccessManifest(ctx.cwd);
33
+ if (subcommand === 'list' || subcommand === 'status') {
34
+ console.log(`Repo access manifest: ${manifest.path}`);
35
+ console.log(`Source: ${manifest.source}`);
36
+ if (manifest.workspaceName)
37
+ console.log(`Workspace: ${manifest.workspaceName}`);
38
+ console.log(`Default policy: ${manifest.defaultPolicy}`);
39
+ if (manifest.source === 'workspace-config') {
40
+ const workspace = await resolveWorkspace(manifest.workspaceProjectRoot, manifest.workspaceProjectRoot);
41
+ for (const member of workspace.members) {
42
+ const route = `${member.primary.provider}@${member.primary.domain ?? 'unknown-domain'}`;
43
+ const tracker = `${member.issueTracker.provider}@${member.issueTracker.domain ?? 'unknown-domain'}`;
44
+ const drift = member.drift.length > 0 ? ` DRIFT: ${member.drift.join('; ')}` : ' OK';
45
+ console.log(`- ${member.name}: ${member.path} [${member.allowed.join(', ')}]`);
46
+ console.log(` config: ${member.configPath}${member.config ? '' : ' (missing)'}`);
47
+ console.log(` delivery: ${member.delivery.mode} -> ${member.remotes.primary} (${route})`);
48
+ console.log(` tracker: ${member.remotes.issue_tracker} (${tracker})`);
49
+ console.log(` status:${drift}`);
50
+ }
51
+ }
52
+ else {
53
+ for (const repo of manifest.repos) {
54
+ console.log(`- ${formatRepoAccessEntry(repo)}`);
55
+ }
56
+ }
57
+ return { exitCode: 0 };
58
+ }
59
+ if (subcommand === 'explain') {
60
+ const requestedPath = valueAfter(args, '--path');
61
+ if (!requestedPath)
62
+ return { exitCode: 2, message: 'repo-access explain requires --path <repo-or-file>' };
63
+ const entry = findRepoEntry(manifest, requestedPath, ctx.cwd);
64
+ if (!entry) {
65
+ console.log(`Path: ${requestedPath}`);
66
+ console.log('Matched repo: none');
67
+ console.log('Decision: unlisted repo/path defaults to denied');
68
+ return { exitCode: 0 };
69
+ }
70
+ console.log(`Path: ${requestedPath}`);
71
+ console.log(`Matched repo: ${formatRepoAccessEntry(entry)}`);
72
+ return { exitCode: 0 };
73
+ }
74
+ if (subcommand === 'check') {
75
+ const requestedPath = valueAfter(args, '--path');
76
+ const action = valueAfter(args, '--action');
77
+ if (!requestedPath)
78
+ return { exitCode: 2, message: 'repo-access check requires --path <repo-or-file>' };
79
+ if (!action)
80
+ return { exitCode: 2, message: 'repo-access check requires --action <action>' };
81
+ const decision = checkRepoAccess(manifest, requestedPath, action, ctx.cwd);
82
+ const status = decision.allowed ? 'ALLOW' : 'DENY';
83
+ console.log(`${status} ${decision.action} ${decision.requestedPath}`);
84
+ console.log(decision.reason);
85
+ if (decision.matchedRepo) {
86
+ console.log(`matched: ${formatRepoAccessEntry(decision.matchedRepo)}`);
87
+ }
88
+ return { exitCode: decision.allowed ? 0 : 1 };
89
+ }
90
+ return { exitCode: 2, message: `Unknown repo-access subcommand: ${subcommand}` };
91
+ }
92
+ catch (error) {
93
+ return {
94
+ exitCode: 2,
95
+ message: error instanceof Error ? error.message : String(error),
96
+ error: error instanceof Error ? error : undefined,
97
+ };
98
+ }
99
+ }
100
+ export const repoAccessHandler = {
101
+ id: 'repo-access',
102
+ name: 'Repo Access',
103
+ description: 'Validate and query repo access manifest permissions',
104
+ category: 'utility',
105
+ aliases: [],
106
+ execute: handleRepoAccess,
107
+ };
108
+ export const repoAccessHandlers = [repoAccessHandler];
109
+ //# sourceMappingURL=repo-access.js.map
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Run Command Handler
3
+ *
4
+ * Implements `aiwg run <script>` — executes user-defined scripts from
5
+ * `.aiwg/aiwg.config` `scripts` section.
6
+ *
7
+ * Modelled on `npm run`. With no arguments, lists available scripts.
8
+ *
9
+ * Environment variables available in scripts:
10
+ * $AIWG_PROJECT — absolute path to the project root
11
+ * $AIWG_PROVIDERS — comma-separated list of configured providers
12
+ *
13
+ * @implements #621
14
+ */
15
+ import { spawn } from 'child_process';
16
+ import { readAiwgConfig, getProjectDir } from '../../config/aiwg-config.js';
17
+ import { handlerResultFromError } from '../errors.js';
18
+ import * as ui from '../ui.js';
19
+ /**
20
+ * Execute a shell command with inherited stdio.
21
+ * Returns the exit code.
22
+ */
23
+ function runScript(command, env, cwd) {
24
+ return new Promise((resolve, reject) => {
25
+ const isWindows = process.platform === 'win32';
26
+ const shell = isWindows ? 'cmd' : 'sh';
27
+ const shellFlag = isWindows ? '/c' : '-c';
28
+ const child = spawn(shell, [shellFlag, command], {
29
+ stdio: 'inherit',
30
+ env: { ...process.env, ...env },
31
+ cwd,
32
+ });
33
+ child.on('error', reject);
34
+ child.on('close', (code) => resolve(code ?? 1));
35
+ });
36
+ }
37
+ export const runHandler = {
38
+ id: 'run',
39
+ name: 'Run Script',
40
+ description: 'Run a user-defined script from aiwg.config',
41
+ category: 'utility',
42
+ aliases: [],
43
+ async execute(ctx) {
44
+ const scriptName = ctx.args[0];
45
+ const projectDir = getProjectDir(ctx, ctx.args);
46
+ // #1231 — intercept --help/-h before script lookup so the user sees
47
+ // help for both run forms, not "No script named '--help'".
48
+ if (scriptName === '--help' || scriptName === '-h') {
49
+ printRunUsage();
50
+ return { exitCode: 0 };
51
+ }
52
+ // #1227 — `aiwg run skill <name>` dispatches to the script-bearing
53
+ // skill executor in src/skills/run.ts. Routed here so we don't have
54
+ // two handlers competing for `id: "run"` in the dispatch table.
55
+ if (scriptName === 'skill') {
56
+ try {
57
+ const { main } = await import('../../skills/run.js');
58
+ const exitCode = await main(ctx.args);
59
+ return { exitCode };
60
+ }
61
+ catch (error) {
62
+ const result = handlerResultFromError(error);
63
+ return { ...result, message: `Skill run failed: ${result.message}` };
64
+ }
65
+ }
66
+ const config = await readAiwgConfig(projectDir);
67
+ if (!config) {
68
+ return {
69
+ exitCode: 1,
70
+ message: [
71
+ "Error: No .aiwg/aiwg.config found in this project.",
72
+ '',
73
+ "Run 'aiwg init' to create one, then ask your AIWG agent to establish project policy.",
74
+ ].join('\n'),
75
+ };
76
+ }
77
+ const scripts = config.scripts ?? {};
78
+ // No script name — list available scripts AND mention `run skill <name>`
79
+ // (#1231) so users discover the sibling form.
80
+ if (!scriptName) {
81
+ ui.blank();
82
+ console.log(` ${ui.brandMark()} ${ui.bold('Available Scripts')}`);
83
+ ui.rule();
84
+ const entries = Object.entries(scripts);
85
+ if (entries.length === 0) {
86
+ ui.dim(' No scripts defined in .aiwg/aiwg.config');
87
+ ui.blank();
88
+ ui.dim(' Add scripts to the "scripts" section, e.g.:');
89
+ ui.dim(' "deploy": "aiwg use all"');
90
+ ui.blank();
91
+ }
92
+ else {
93
+ const nameWidth = Math.max(...entries.map(([n]) => n.length), 6);
94
+ for (const [name, cmd] of entries) {
95
+ console.log(` ${name.padEnd(nameWidth)} ${ui.dimText(cmd)}`);
96
+ }
97
+ ui.blank();
98
+ ui.dim(` Run with: aiwg run <script-name>`);
99
+ ui.blank();
100
+ }
101
+ ui.dim(` Or run a script-bearing skill: aiwg run skill <name>`);
102
+ ui.dim(` See \`aiwg run --help\` for both forms.`);
103
+ ui.blank();
104
+ return { exitCode: 0 };
105
+ }
106
+ // Look up the script
107
+ const command = scripts[scriptName];
108
+ if (!command) {
109
+ const available = Object.keys(scripts);
110
+ const hint = available.length > 0
111
+ ? `\nAvailable: ${available.join(', ')}`
112
+ : '\nNo scripts defined. Run `aiwg init`, then ask your AIWG agent to finish project setup.';
113
+ return {
114
+ exitCode: 1,
115
+ message: `Error: No script named '${scriptName}'${hint}`,
116
+ };
117
+ }
118
+ // Build environment
119
+ const env = {
120
+ AIWG_PROJECT: projectDir,
121
+ AIWG_PROVIDERS: config.providers.join(','),
122
+ };
123
+ ui.blank();
124
+ console.log(` ${ui.brandMark()} ${ui.bold(`aiwg run ${scriptName}`)}`);
125
+ ui.dim(` > ${command}`);
126
+ console.log('');
127
+ let exitCode;
128
+ try {
129
+ exitCode = await runScript(command, env, projectDir);
130
+ }
131
+ catch (error) {
132
+ const result = handlerResultFromError(error);
133
+ return { ...result, message: `Error executing script: ${result.message}` };
134
+ }
135
+ if (exitCode !== 0) {
136
+ console.log('');
137
+ ui.warn(`Script '${scriptName}' exited with code ${exitCode}`);
138
+ }
139
+ return { exitCode };
140
+ },
141
+ };
142
+ function printRunUsage() {
143
+ console.log('Usage: aiwg run <script-name> [args...]');
144
+ console.log(' aiwg run skill <skill-name> [--cwd <path>] [-- <args forwarded to script>]');
145
+ console.log('');
146
+ console.log('Two forms share the `run` namespace:');
147
+ console.log('');
148
+ console.log(' aiwg run <script-name>');
149
+ console.log(' Execute a user-defined script from .aiwg/aiwg.config (modeled on `npm run`).');
150
+ console.log(' With no arguments, lists available scripts.');
151
+ console.log('');
152
+ console.log(' aiwg run skill <skill-name>');
153
+ console.log(' Execute a script-bearing skill via the artifact index. Skills with a');
154
+ console.log(' `script:` frontmatter declaration are dispatched through the runtime');
155
+ console.log(' registry (node/python3/bash/sh/pwsh/ruby/auto). Find skills with');
156
+ console.log(' `aiwg discover "<phrase>"` — executable skills are flagged `executable: true`.');
157
+ console.log('');
158
+ console.log('Examples:');
159
+ console.log(' aiwg run # list available user scripts');
160
+ console.log(' aiwg run deploy # run user script "deploy"');
161
+ console.log(' aiwg run skill voice-apply -- --voice technical-authority --input draft.md');
162
+ console.log(' aiwg run skill template-engine -- render adr-template.md --vars vars.yaml');
163
+ console.log(' aiwg run skill <name> --cwd <path> # explicit CWD override');
164
+ }
165
+ //# sourceMappingURL=run.js.map