@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,415 @@
1
+ /**
2
+ * Skill→Command Translation Layer
3
+ *
4
+ * Generates command files from canonical SKILL.md sources for providers that
5
+ * require command format natively (Factory, OpenCode, Warp, Windsurf, Copilot,
6
+ * Codex, OpenClaw).
7
+ *
8
+ * Skills are the canonical source format; commands are deployment artifacts.
9
+ * See ADR: Skills as the Canonical Extension Type.
10
+ *
11
+ * @implements .aiwg/architecture/adr-skills-canonical-extension-type.md
12
+ * @issue #550
13
+ */
14
+ import fs from 'fs/promises';
15
+ import path from 'path';
16
+ // ============================================
17
+ // Provider Configuration
18
+ // ============================================
19
+ /**
20
+ * Providers that need command files generated from skills.
21
+ *
22
+ * Providers not listed here get skills deployed natively (no translation needed).
23
+ */
24
+ const PROVIDERS_NEEDING_COMMANDS = new Set([
25
+ 'factory',
26
+ 'opencode', // OpenCode scans .opencode/command/**/*.md via ConfigCommand.load() (PUW-006 #1107)
27
+ 'warp',
28
+ 'windsurf',
29
+ 'copilot',
30
+ 'codex',
31
+ 'openclaw',
32
+ ]);
33
+ /**
34
+ * Providers where skills are deployed natively (no command generation needed).
35
+ */
36
+ const SKILLS_ONLY_PROVIDERS = new Set([
37
+ 'claude',
38
+ 'cursor',
39
+ 'hermes',
40
+ 'openhuman',
41
+ ]);
42
+ /**
43
+ * Check if a provider needs command files generated from skills.
44
+ */
45
+ export function providerNeedsCommands(provider) {
46
+ return PROVIDERS_NEEDING_COMMANDS.has(provider);
47
+ }
48
+ /**
49
+ * Check if a provider uses skills natively (no command translation).
50
+ */
51
+ export function providerUsesSkillsNatively(provider) {
52
+ return SKILLS_ONLY_PROVIDERS.has(provider);
53
+ }
54
+ // ============================================
55
+ // Frontmatter Parsing
56
+ // ============================================
57
+ /**
58
+ * Parse YAML-like frontmatter from a SKILL.md file.
59
+ *
60
+ * This is a lightweight parser that handles the subset of YAML used in
61
+ * SKILL.md frontmatter. For full YAML support, a library like js-yaml
62
+ * would be needed, but the frontmatter format is simple enough for this.
63
+ */
64
+ export function parseFrontmatter(content) {
65
+ const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
66
+ if (!fmMatch) {
67
+ return { frontmatter: {}, body: content };
68
+ }
69
+ const fmRaw = fmMatch[1];
70
+ const body = fmMatch[2];
71
+ const frontmatter = {};
72
+ // Parse top-level keys
73
+ const lines = fmRaw.split('\n');
74
+ let i = 0;
75
+ while (i < lines.length) {
76
+ const line = lines[i];
77
+ // description: ...
78
+ const descMatch = line.match(/^description:\s*(.+)/);
79
+ if (descMatch) {
80
+ frontmatter.description = descMatch[1].trim();
81
+ i++;
82
+ continue;
83
+ }
84
+ // userInvocable: false
85
+ const uiMatch = line.match(/^userInvocable:\s*(true|false)/i);
86
+ if (uiMatch) {
87
+ frontmatter.userInvocable = uiMatch[1].toLowerCase() === 'true';
88
+ i++;
89
+ continue;
90
+ }
91
+ // user-invocable: false (kebab-case variant)
92
+ const uiKebabMatch = line.match(/^user-invocable:\s*(true|false)/i);
93
+ if (uiKebabMatch) {
94
+ frontmatter.userInvocable = uiKebabMatch[1].toLowerCase() === 'true';
95
+ i++;
96
+ continue;
97
+ }
98
+ // effort: N
99
+ const effortMatch = line.match(/^effort:\s*(\d+)/);
100
+ if (effortMatch) {
101
+ frontmatter.effort = parseInt(effortMatch[1], 10);
102
+ i++;
103
+ continue;
104
+ }
105
+ // context: fork|inherit
106
+ const ctxMatch = line.match(/^context:\s*(\w+)/);
107
+ if (ctxMatch) {
108
+ frontmatter.context = ctxMatch[1];
109
+ i++;
110
+ continue;
111
+ }
112
+ // disableModelInvocation: true
113
+ const dmiMatch = line.match(/^(?:disableModelInvocation|disable-model-invocation):\s*(true|false)/i);
114
+ if (dmiMatch) {
115
+ frontmatter.disableModelInvocation = dmiMatch[1].toLowerCase() === 'true';
116
+ i++;
117
+ continue;
118
+ }
119
+ // allowed-tools: (top-level, for the skill itself)
120
+ const atMatch = line.match(/^allowed-tools:\s*(.+)/);
121
+ if (atMatch) {
122
+ frontmatter.allowedTools = atMatch[1].trim();
123
+ i++;
124
+ continue;
125
+ }
126
+ // commandHint: block
127
+ if (line.match(/^commandHint:\s*$/)) {
128
+ const hint = {};
129
+ i++;
130
+ while (i < lines.length && lines[i].match(/^\s+/)) {
131
+ const hintLine = lines[i].trim();
132
+ const ahMatch = hintLine.match(/^argumentHint:\s*(.+)/);
133
+ if (ahMatch) {
134
+ hint.argumentHint = ahMatch[1].trim();
135
+ i++;
136
+ continue;
137
+ }
138
+ const hatMatch = hintLine.match(/^allowedTools:\s*(.+)/);
139
+ if (hatMatch) {
140
+ hint.allowedTools = hatMatch[1].trim();
141
+ i++;
142
+ continue;
143
+ }
144
+ const tmplMatch = hintLine.match(/^template:\s*(.+)/);
145
+ if (tmplMatch) {
146
+ hint.template = tmplMatch[1].trim();
147
+ i++;
148
+ continue;
149
+ }
150
+ const modMatch = hintLine.match(/^model:\s*(.+)/);
151
+ if (modMatch) {
152
+ hint.model = modMatch[1].trim();
153
+ i++;
154
+ continue;
155
+ }
156
+ const roleMatch = hintLine.match(/^modelRole:\s*(reasoning|coding|efficiency)\s*$/);
157
+ if (roleMatch) {
158
+ hint.modelRole = roleMatch[1];
159
+ i++;
160
+ continue;
161
+ }
162
+ const tierMatch = hintLine.match(/^modelTier:\s*(economy|standard|premium)\s*$/);
163
+ if (tierMatch) {
164
+ hint.modelTier = tierMatch[1];
165
+ i++;
166
+ continue;
167
+ }
168
+ const effortMatch = hintLine.match(/^modelEffort:\s*(minimal|low|medium|high|xhigh)\s*$/);
169
+ if (effortMatch) {
170
+ hint.modelEffort = effortMatch[1];
171
+ i++;
172
+ continue;
173
+ }
174
+ const rationaleMatch = hintLine.match(/^modelRationale:\s*(.+)$/);
175
+ if (rationaleMatch) {
176
+ hint.modelRationale = rationaleMatch[1].trim();
177
+ i++;
178
+ continue;
179
+ }
180
+ const catMatch = hintLine.match(/^category:\s*(.+)/);
181
+ if (catMatch) {
182
+ hint.category = catMatch[1].trim();
183
+ i++;
184
+ continue;
185
+ }
186
+ const orchMatch = hintLine.match(/^orchestration:\s*(true|false)/i);
187
+ if (orchMatch) {
188
+ hint.orchestration = orchMatch[1].toLowerCase() === 'true';
189
+ i++;
190
+ continue;
191
+ }
192
+ const cliMatch = hintLine.match(/^cliDisabled:\s*(true|false)/i);
193
+ if (cliMatch) {
194
+ hint.cliDisabled = cliMatch[1].toLowerCase() === 'true';
195
+ i++;
196
+ continue;
197
+ }
198
+ i++;
199
+ }
200
+ frontmatter.commandHint = hint;
201
+ continue;
202
+ }
203
+ i++;
204
+ }
205
+ return { frontmatter, body };
206
+ }
207
+ // ============================================
208
+ // Command Generation
209
+ // ============================================
210
+ /**
211
+ * Generate a command .md file content from parsed skill data.
212
+ *
213
+ * Maps SKILL.md frontmatter to legacy command frontmatter format:
214
+ * - `description:` from skill description
215
+ * - `argument-hint:` from commandHint.argumentHint
216
+ * - `allowed-tools:` from commandHint.allowedTools (comma-separated)
217
+ */
218
+ export function generateCommandContent(_skillName, frontmatter, body, provider) {
219
+ const lines = ['---'];
220
+ // description is always included
221
+ if (frontmatter.description) {
222
+ lines.push(`description: ${frontmatter.description}`);
223
+ }
224
+ const hint = frontmatter.commandHint;
225
+ // argument-hint from commandHint
226
+ if (hint?.argumentHint) {
227
+ lines.push(`argument-hint: ${hint.argumentHint}`);
228
+ }
229
+ // allowed-tools: prefer commandHint.allowedTools, fall back to top-level allowedTools
230
+ const tools = hint?.allowedTools ?? frontmatter.allowedTools;
231
+ if (tools) {
232
+ const toolStr = Array.isArray(tools) ? tools.join(', ') : tools;
233
+ lines.push(`allowed-tools: ${toolStr}`);
234
+ }
235
+ const modelPolicy = resolveSkillModelPolicy(hint);
236
+ if (modelPolicy) {
237
+ lines.push(`aiwg-model-role: ${modelPolicy.modelRole}`);
238
+ lines.push(`aiwg-model-tier: ${modelPolicy.modelTier}`);
239
+ if (modelPolicy.modelEffort)
240
+ lines.push(`aiwg-model-effort: ${modelPolicy.modelEffort}`);
241
+ if (hint?.modelRationale)
242
+ lines.push(`aiwg-model-rationale: ${hint.modelRationale}`);
243
+ if (provider === 'claude') {
244
+ lines.push(`model: ${modelPolicy.legacyModel}`);
245
+ if (modelPolicy.modelEffort) {
246
+ const effort = modelPolicy.modelEffort === 'medium' ? 2
247
+ : modelPolicy.modelEffort === 'high' || modelPolicy.modelEffort === 'xhigh' ? 3 : 1;
248
+ lines.push(`effort: ${effort}`);
249
+ }
250
+ }
251
+ }
252
+ lines.push('---');
253
+ lines.push('');
254
+ // Body content is passed through unchanged
255
+ lines.push(body.trimStart());
256
+ return lines.join('\n');
257
+ }
258
+ // ============================================
259
+ // Translation Pipeline
260
+ // ============================================
261
+ /**
262
+ * Translate all skills in a directory to command files.
263
+ *
264
+ * Reads each subdirectory in `skillsDir` as a skill, parses SKILL.md,
265
+ * and generates a corresponding command .md file.
266
+ *
267
+ * @param skillsDir - Source skills directory (e.g., `agentic/code/frameworks/sdlc-complete/skills/`)
268
+ * @param options - Translation options (provider, target dir, dry-run)
269
+ * @returns Translation result with counts and any errors
270
+ */
271
+ export async function translateSkillsToCommands(skillsDir, options) {
272
+ const result = {
273
+ provider: options.provider,
274
+ targetDir: options.targetDir,
275
+ translated: [],
276
+ skipped: [],
277
+ errors: [],
278
+ totalProcessed: 0,
279
+ };
280
+ // Check if this provider needs commands. nameFilter overrides the
281
+ // provider gating: when an operator passes an explicit filter (e.g. Claude
282
+ // flow→command emission per PUW-015 #1116), they're opting in to selective
283
+ // translation regardless of the provider's default skills-native posture.
284
+ if (!options.nameFilter && !providerNeedsCommands(options.provider)) {
285
+ if (options.verbose) {
286
+ console.log(` Provider '${options.provider}' uses skills natively — skipping command generation`);
287
+ }
288
+ return result;
289
+ }
290
+ // Read skill directories
291
+ let entries;
292
+ try {
293
+ const dirEntries = await fs.readdir(skillsDir, { withFileTypes: true });
294
+ entries = dirEntries.filter(e => e.isDirectory()).map(e => e.name);
295
+ }
296
+ catch {
297
+ // No skills directory — nothing to translate
298
+ return result;
299
+ }
300
+ // Process each skill
301
+ for (const skillName of entries) {
302
+ // Apply name filter when provided (PUW-015 / #1116 — Claude flow filter).
303
+ if (options.nameFilter && !options.nameFilter(skillName)) {
304
+ continue;
305
+ }
306
+ result.totalProcessed++;
307
+ const skillMdPath = path.join(skillsDir, skillName, 'SKILL.md');
308
+ try {
309
+ const content = await fs.readFile(skillMdPath, 'utf-8');
310
+ const { frontmatter, body } = parseFrontmatter(content);
311
+ // Skip background-only skills (userInvocable: false)
312
+ if (frontmatter.userInvocable === false) {
313
+ const skipped = {
314
+ sourcePath: skillMdPath,
315
+ skillName,
316
+ commandFilename: `${skillName}.md`,
317
+ content: '',
318
+ skipped: true,
319
+ skipReason: 'userInvocable: false (background-only skill)',
320
+ };
321
+ result.skipped.push(skipped);
322
+ if (options.verbose) {
323
+ console.log(` Skipped: ${skillName} (background-only)`);
324
+ }
325
+ continue;
326
+ }
327
+ // Generate command content
328
+ const commandContent = generateCommandContent(skillName, frontmatter, body, options.provider);
329
+ const commandFilename = `${skillName}.md`;
330
+ const translated = {
331
+ sourcePath: skillMdPath,
332
+ skillName,
333
+ commandFilename,
334
+ content: commandContent,
335
+ skipped: false,
336
+ };
337
+ // Write file (unless dry-run)
338
+ if (!options.dryRun) {
339
+ const targetPath = path.join(options.targetDir, commandFilename);
340
+ await fs.mkdir(options.targetDir, { recursive: true });
341
+ await fs.writeFile(targetPath, commandContent, 'utf-8');
342
+ // Copilot dual-write per PUW-004 (#1105): also emit to
343
+ // `.github/prompts/<skill>.prompt.md` so Copilot Chat picks up the
344
+ // skills as `/`-invocable prompt files. Always-deploy invariant
345
+ // (ADR-1 §0.6) keeps the legacy `.github/commands/` write above.
346
+ if (options.provider === 'copilot') {
347
+ const projectRoot = options.projectPath
348
+ ?? path.dirname(path.dirname(options.targetDir));
349
+ const promptsDir = path.join(projectRoot, '.github', 'prompts');
350
+ const promptPath = path.join(promptsDir, `${skillName}.prompt.md`);
351
+ await fs.mkdir(promptsDir, { recursive: true });
352
+ await fs.writeFile(promptPath, commandContent, 'utf-8');
353
+ }
354
+ }
355
+ result.translated.push(translated);
356
+ if (options.verbose) {
357
+ console.log(` Translated: ${skillName} → ${commandFilename}`);
358
+ }
359
+ }
360
+ catch (error) {
361
+ // SKILL.md might not exist (skill has no markdown file) — skip gracefully
362
+ const errMsg = error instanceof Error ? error.message : String(error);
363
+ if (errMsg.includes('ENOENT')) {
364
+ // No SKILL.md — skip silently
365
+ continue;
366
+ }
367
+ result.errors.push({ skillName, error: errMsg });
368
+ if (options.verbose) {
369
+ console.error(` Error: ${skillName} — ${errMsg}`);
370
+ }
371
+ }
372
+ }
373
+ return result;
374
+ }
375
+ /**
376
+ * Translate a single SKILL.md content string to command format.
377
+ *
378
+ * Convenience function for testing and one-off translations.
379
+ *
380
+ * @param skillName - Skill name (used for display only)
381
+ * @param skillContent - Raw SKILL.md file content
382
+ * @returns Generated command .md content, or null if skill should be skipped
383
+ */
384
+ export function translateSingleSkill(skillName, skillContent, provider) {
385
+ const { frontmatter, body } = parseFrontmatter(skillContent);
386
+ // Skip background-only skills
387
+ if (frontmatter.userInvocable === false) {
388
+ return null;
389
+ }
390
+ return generateCommandContent(skillName, frontmatter, body, provider);
391
+ }
392
+ /** Deterministically migrate legacy commandHint.model into portable intent. */
393
+ export function resolveSkillModelPolicy(hint) {
394
+ if (!hint)
395
+ return null;
396
+ const legacy = hint.model?.trim().toLowerCase();
397
+ const legacyRole = legacy === 'opus' ? 'reasoning'
398
+ : legacy === 'haiku' ? 'efficiency'
399
+ : legacy ? 'coding' : undefined;
400
+ const modelRole = hint.modelRole ?? legacyRole;
401
+ if (!modelRole)
402
+ return null;
403
+ const modelTier = hint.modelTier
404
+ ?? (modelRole === 'reasoning' ? 'premium'
405
+ : modelRole === 'efficiency' ? 'economy' : 'standard');
406
+ return {
407
+ modelRole,
408
+ modelTier,
409
+ modelEffort: hint.modelEffort,
410
+ legacyModel: modelRole === 'reasoning' ? 'opus'
411
+ : modelRole === 'efficiency' ? 'haiku' : 'sonnet',
412
+ source: hint.modelRole || hint.modelTier ? 'canonical' : 'legacy',
413
+ };
414
+ }
415
+ //# sourceMappingURL=skill-command-translator.js.map
@@ -0,0 +1,189 @@
1
+ /**
2
+ * WorkspaceCreator - Create framework-scoped workspaces
3
+ *
4
+ * Creates framework-specific directories and shared resources for
5
+ * multi-framework projects. Supports Claude, Codex, and Cursor frameworks.
6
+ *
7
+ * FID-007 Framework-Scoped Workspaces creation logic.
8
+ *
9
+ * @module src/plugin/workspace-creator
10
+ * @version 1.0.0
11
+ * @since 2025-10-23
12
+ */
13
+ import * as fs from 'fs/promises';
14
+ import * as path from 'path';
15
+ // ===========================
16
+ // WorkspaceCreator Class
17
+ // ===========================
18
+ export class WorkspaceCreator {
19
+ projectRoot;
20
+ SUPPORTED_FRAMEWORKS = ['claude', 'codex', 'cursor'];
21
+ SHARED_DIRS = [
22
+ 'intake',
23
+ 'requirements',
24
+ 'architecture',
25
+ 'planning',
26
+ 'testing',
27
+ 'deployment',
28
+ 'security',
29
+ 'quality',
30
+ 'risks',
31
+ 'reports',
32
+ 'working',
33
+ 'handoffs',
34
+ 'gates',
35
+ 'decisions',
36
+ 'team',
37
+ 'management'
38
+ ];
39
+ constructor(projectRoot) {
40
+ this.projectRoot = path.resolve(projectRoot);
41
+ }
42
+ /**
43
+ * Create framework-specific workspace
44
+ *
45
+ * @param framework - Framework name (claude, codex, cursor)
46
+ * @param options - Creation options
47
+ */
48
+ async createFrameworkWorkspace(framework, options = {}) {
49
+ if (!this.SUPPORTED_FRAMEWORKS.includes(framework)) {
50
+ throw new Error(`Unsupported framework: ${framework}`);
51
+ }
52
+ const frameworkPath = path.join(this.projectRoot, '.aiwg', framework);
53
+ const sharedPath = path.join(this.projectRoot, '.aiwg', 'shared');
54
+ // Create framework directory structure
55
+ await fs.mkdir(frameworkPath, { recursive: true });
56
+ await fs.mkdir(path.join(frameworkPath, 'agents'), { recursive: true });
57
+ await fs.mkdir(path.join(frameworkPath, 'commands'), { recursive: true });
58
+ await fs.mkdir(path.join(frameworkPath, 'memory'), { recursive: true });
59
+ await fs.mkdir(path.join(frameworkPath, 'context'), { recursive: true });
60
+ // Create shared directory structure
61
+ await fs.mkdir(sharedPath, { recursive: true });
62
+ for (const dir of this.SHARED_DIRS) {
63
+ await fs.mkdir(path.join(sharedPath, dir), { recursive: true });
64
+ }
65
+ // Create default config file
66
+ const configPath = path.join(frameworkPath, 'settings.json');
67
+ try {
68
+ await fs.access(configPath);
69
+ // Config already exists, don't overwrite
70
+ }
71
+ catch {
72
+ await fs.writeFile(configPath, JSON.stringify({
73
+ framework,
74
+ version: options.version || '1.0.0',
75
+ created: new Date().toISOString()
76
+ }, null, 2));
77
+ }
78
+ // Create README
79
+ const readmePath = path.join(frameworkPath, 'README.md');
80
+ try {
81
+ await fs.access(readmePath);
82
+ }
83
+ catch {
84
+ await fs.writeFile(readmePath, `# ${framework.charAt(0).toUpperCase() + framework.slice(1)} Framework Workspace\n\nFramework-specific configuration and resources.\n`);
85
+ }
86
+ // Create .gitignore
87
+ const gitignorePath = path.join(frameworkPath, '.gitignore');
88
+ try {
89
+ await fs.access(gitignorePath);
90
+ }
91
+ catch {
92
+ await fs.writeFile(gitignorePath, '*.log\nmemory/\n*.tmp\n');
93
+ }
94
+ }
95
+ /**
96
+ * Add framework to existing project
97
+ *
98
+ * @param framework - Framework name to add
99
+ */
100
+ async addFrameworkToProject(framework) {
101
+ // Create workspace for new framework
102
+ await this.createFrameworkWorkspace(framework);
103
+ // Update workspace registry
104
+ const registryPath = path.join(this.projectRoot, '.aiwg', 'registry.json');
105
+ let registry = { frameworks: [] };
106
+ try {
107
+ const content = await fs.readFile(registryPath, 'utf-8');
108
+ registry = JSON.parse(content);
109
+ }
110
+ catch {
111
+ // Registry doesn't exist yet
112
+ }
113
+ if (!registry.frameworks.includes(framework)) {
114
+ registry.frameworks.push(framework);
115
+ await fs.writeFile(registryPath, JSON.stringify(registry, null, 2));
116
+ }
117
+ // Update workspace.json
118
+ const workspacePath = path.join(this.projectRoot, '.aiwg', 'workspace.json');
119
+ try {
120
+ const content = await fs.readFile(workspacePath, 'utf-8');
121
+ const workspace = JSON.parse(content);
122
+ if (!workspace.frameworks) {
123
+ workspace.frameworks = [];
124
+ }
125
+ if (!workspace.frameworks.includes(framework)) {
126
+ workspace.frameworks.push(framework);
127
+ await fs.writeFile(workspacePath, JSON.stringify(workspace, null, 2));
128
+ }
129
+ }
130
+ catch {
131
+ // workspace.json doesn't exist
132
+ }
133
+ }
134
+ /**
135
+ * Initialize empty workspace structure
136
+ *
137
+ * @param options - Initialization options
138
+ */
139
+ async initializeWorkspace(options = {}) {
140
+ const aiwgPath = path.join(this.projectRoot, '.aiwg');
141
+ // Create .aiwg directory
142
+ await fs.mkdir(aiwgPath, { recursive: true });
143
+ // Create shared directory with SDLC subdirs
144
+ const sharedPath = path.join(aiwgPath, 'shared');
145
+ await fs.mkdir(sharedPath, { recursive: true });
146
+ for (const dir of this.SHARED_DIRS) {
147
+ await fs.mkdir(path.join(sharedPath, dir), { recursive: true });
148
+ }
149
+ // Create workspace.json
150
+ const workspacePath = path.join(aiwgPath, 'workspace.json');
151
+ try {
152
+ await fs.access(workspacePath);
153
+ // Already exists, don't overwrite
154
+ }
155
+ catch {
156
+ await fs.writeFile(workspacePath, JSON.stringify({
157
+ version: '1.0.0',
158
+ frameworks: [],
159
+ created: new Date().toISOString()
160
+ }, null, 2));
161
+ }
162
+ // Create .gitignore
163
+ const gitignorePath = path.join(aiwgPath, '.gitignore');
164
+ try {
165
+ await fs.access(gitignorePath);
166
+ }
167
+ catch {
168
+ await fs.writeFile(gitignorePath, '*.log\nworking/\n*.tmp\n');
169
+ }
170
+ // Create README
171
+ const readmePath = path.join(aiwgPath, 'README.md');
172
+ try {
173
+ await fs.access(readmePath);
174
+ }
175
+ catch {
176
+ await fs.writeFile(readmePath, '# AIWG Workspace\n\nFramework-scoped workspace for AIWG.\n');
177
+ }
178
+ // Auto-detect and create framework workspaces if requested
179
+ if (options.autoDetect) {
180
+ const { FrameworkDetector } = await import('./framework-detector.js');
181
+ const detector = new FrameworkDetector(this.projectRoot);
182
+ const frameworks = await detector.detectFrameworks();
183
+ for (const framework of frameworks) {
184
+ await this.createFrameworkWorkspace(framework);
185
+ }
186
+ }
187
+ }
188
+ }
189
+ //# sourceMappingURL=workspace-creator.js.map