specweave 0.1.9 → 0.3.1

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 (293) hide show
  1. package/CLAUDE.md +600 -0
  2. package/README.md +263 -81
  3. package/bin/install-all.sh +1 -1
  4. package/bin/install-commands.sh +3 -3
  5. package/bin/specweave.js +39 -9
  6. package/dist/adapters/adapter-base.d.ts +1 -1
  7. package/dist/adapters/adapter-base.d.ts.map +1 -1
  8. package/dist/adapters/adapter-base.js +6 -41
  9. package/dist/adapters/adapter-base.js.map +1 -1
  10. package/dist/adapters/adapter-interface.js +1 -2
  11. package/dist/adapters/adapter-interface.js.map +1 -1
  12. package/dist/adapters/adapter-loader.d.ts +86 -0
  13. package/dist/adapters/adapter-loader.d.ts.map +1 -0
  14. package/dist/adapters/adapter-loader.js +216 -0
  15. package/dist/adapters/adapter-loader.js.map +1 -0
  16. package/dist/adapters/agents-md-generator.d.ts +48 -0
  17. package/dist/adapters/agents-md-generator.d.ts.map +1 -0
  18. package/dist/adapters/agents-md-generator.js +132 -0
  19. package/dist/adapters/agents-md-generator.js.map +1 -0
  20. package/dist/adapters/claude/adapter.d.ts +2 -2
  21. package/dist/adapters/claude/adapter.d.ts.map +1 -1
  22. package/dist/adapters/claude/adapter.js +5 -42
  23. package/dist/adapters/claude/adapter.js.map +1 -1
  24. package/dist/adapters/claude-md-generator.d.ts +78 -0
  25. package/dist/adapters/claude-md-generator.d.ts.map +1 -0
  26. package/dist/adapters/claude-md-generator.js +246 -0
  27. package/dist/adapters/claude-md-generator.js.map +1 -0
  28. package/dist/adapters/codex/adapter.d.ts +50 -0
  29. package/dist/adapters/codex/adapter.d.ts.map +1 -0
  30. package/dist/adapters/codex/adapter.js +316 -0
  31. package/dist/adapters/codex/adapter.js.map +1 -0
  32. package/dist/adapters/copilot/adapter.d.ts +10 -9
  33. package/dist/adapters/copilot/adapter.d.ts.map +1 -1
  34. package/dist/adapters/copilot/adapter.js +35 -100
  35. package/dist/adapters/copilot/adapter.js.map +1 -1
  36. package/dist/adapters/cursor/adapter.d.ts +8 -6
  37. package/dist/adapters/cursor/adapter.d.ts.map +1 -1
  38. package/dist/adapters/cursor/adapter.js +47 -130
  39. package/dist/adapters/cursor/adapter.js.map +1 -1
  40. package/dist/adapters/doc-generator.d.ts +69 -0
  41. package/dist/adapters/doc-generator.d.ts.map +1 -0
  42. package/dist/adapters/doc-generator.js +247 -0
  43. package/dist/adapters/doc-generator.js.map +1 -0
  44. package/dist/adapters/gemini/adapter.d.ts +50 -0
  45. package/dist/adapters/gemini/adapter.d.ts.map +1 -0
  46. package/dist/adapters/gemini/adapter.js +281 -0
  47. package/dist/adapters/gemini/adapter.js.map +1 -0
  48. package/dist/adapters/generic/adapter.d.ts +7 -4
  49. package/dist/adapters/generic/adapter.d.ts.map +1 -1
  50. package/dist/adapters/generic/adapter.js +60 -59
  51. package/dist/adapters/generic/adapter.js.map +1 -1
  52. package/dist/cli/commands/init.d.ts +3 -1
  53. package/dist/cli/commands/init.d.ts.map +1 -1
  54. package/dist/cli/commands/init.js +327 -177
  55. package/dist/cli/commands/init.js.map +1 -1
  56. package/dist/cli/commands/install.d.ts.map +1 -1
  57. package/dist/cli/commands/install.js +22 -58
  58. package/dist/cli/commands/install.js.map +1 -1
  59. package/dist/cli/commands/list.d.ts.map +1 -1
  60. package/dist/cli/commands/list.js +27 -64
  61. package/dist/cli/commands/list.js.map +1 -1
  62. package/dist/core/credentials-manager.d.ts +90 -0
  63. package/dist/core/credentials-manager.d.ts.map +1 -0
  64. package/dist/core/credentials-manager.js +271 -0
  65. package/dist/core/credentials-manager.js.map +1 -0
  66. package/dist/core/project-structure-detector.d.ts +92 -0
  67. package/dist/core/project-structure-detector.d.ts.map +1 -0
  68. package/dist/core/project-structure-detector.js +289 -0
  69. package/dist/core/project-structure-detector.js.map +1 -0
  70. package/dist/core/rfc-generator-v2.d.ts +149 -0
  71. package/dist/core/rfc-generator-v2.d.ts.map +1 -0
  72. package/dist/core/rfc-generator-v2.js +399 -0
  73. package/dist/core/rfc-generator-v2.js.map +1 -0
  74. package/dist/core/rfc-generator.d.ts +147 -0
  75. package/dist/core/rfc-generator.d.ts.map +1 -0
  76. package/dist/core/rfc-generator.js +434 -0
  77. package/dist/core/rfc-generator.js.map +1 -0
  78. package/dist/integrations/ado/ado-client.d.ts +123 -0
  79. package/dist/integrations/ado/ado-client.d.ts.map +1 -0
  80. package/dist/integrations/ado/ado-client.js +398 -0
  81. package/dist/integrations/ado/ado-client.js.map +1 -0
  82. package/dist/integrations/jira/jira-client.d.ts +139 -0
  83. package/dist/integrations/jira/jira-client.d.ts.map +1 -0
  84. package/dist/integrations/jira/jira-client.js +386 -0
  85. package/dist/integrations/jira/jira-client.js.map +1 -0
  86. package/dist/integrations/jira/jira-incremental-mapper.d.ts +75 -0
  87. package/dist/integrations/jira/jira-incremental-mapper.d.ts.map +1 -0
  88. package/dist/integrations/jira/jira-incremental-mapper.js +474 -0
  89. package/dist/integrations/jira/jira-incremental-mapper.js.map +1 -0
  90. package/dist/integrations/jira/jira-mapper.d.ts +105 -0
  91. package/dist/integrations/jira/jira-mapper.d.ts.map +1 -0
  92. package/dist/integrations/jira/jira-mapper.js +494 -0
  93. package/dist/integrations/jira/jira-mapper.js.map +1 -0
  94. package/dist/testing/test-generator.d.ts +117 -0
  95. package/dist/testing/test-generator.d.ts.map +1 -0
  96. package/dist/testing/test-generator.js +370 -0
  97. package/dist/testing/test-generator.js.map +1 -0
  98. package/dist/utils/auto-install.d.ts +3 -0
  99. package/dist/utils/auto-install.d.ts.map +1 -1
  100. package/dist/utils/auto-install.js +16 -82
  101. package/dist/utils/auto-install.js.map +1 -1
  102. package/dist/utils/esm-helpers.d.ts +50 -0
  103. package/dist/utils/esm-helpers.d.ts.map +1 -0
  104. package/dist/utils/esm-helpers.js +57 -0
  105. package/dist/utils/esm-helpers.js.map +1 -0
  106. package/package.json +16 -7
  107. package/src/adapters/README.md +1 -2
  108. package/src/adapters/adapter-base.ts +6 -3
  109. package/src/adapters/adapter-loader.ts +261 -0
  110. package/src/adapters/agents-md-generator.ts +162 -0
  111. package/src/adapters/claude/README.md +6 -14
  112. package/src/adapters/claude/adapter.ts +4 -4
  113. package/src/adapters/claude-md-generator.ts +311 -0
  114. package/src/adapters/codex/README.md +105 -0
  115. package/src/adapters/codex/adapter.ts +333 -0
  116. package/src/adapters/copilot/adapter.ts +36 -65
  117. package/src/adapters/cursor/README.md +0 -2
  118. package/src/adapters/cursor/adapter.ts +46 -92
  119. package/src/adapters/doc-generator.ts +331 -0
  120. package/src/adapters/gemini/README.md +97 -0
  121. package/src/adapters/gemini/adapter.ts +298 -0
  122. package/src/adapters/generic/adapter.ts +61 -57
  123. package/src/adapters/registry.yaml +86 -25
  124. package/src/agents/devops/AGENT.md +16 -18
  125. package/src/agents/docs-writer/AGENT.md +2 -2
  126. package/src/agents/pm/AGENT.md +1 -50
  127. package/src/commands/README.md +134 -111
  128. package/src/commands/{build.md → specweave.do.md} +141 -69
  129. package/src/commands/{done.md → specweave.done.md} +3 -3
  130. package/src/commands/{inc.md → specweave.inc.md} +4 -4
  131. package/src/commands/{increment.md → specweave.increment.md} +143 -76
  132. package/src/commands/specweave.md +430 -0
  133. package/src/commands/specweave.next.md +495 -0
  134. package/src/commands/{progress.md → specweave.progress.md} +12 -12
  135. package/src/commands/specweave.sync-docs.md +665 -0
  136. package/src/commands/specweave.sync-github.md +269 -0
  137. package/src/commands/specweave.sync-jira.md +197 -0
  138. package/src/commands/{validate.md → specweave.validate.md} +4 -4
  139. package/src/hooks/README.md +19 -29
  140. package/src/hooks/post-task-completion.sh +25 -30
  141. package/src/skills/ado-sync/README.md +1 -36
  142. package/src/skills/bmad-method-expert/SKILL.md +1 -3
  143. package/src/skills/brownfield-analyzer/SKILL.md +429 -23
  144. package/src/skills/brownfield-onboarder/SKILL.md +221 -8
  145. package/src/skills/context-loader/SKILL.md +239 -617
  146. package/src/skills/context-optimizer/SKILL.md +0 -30
  147. package/src/skills/github-sync/SKILL.md +1 -19
  148. package/src/skills/increment-planner/SKILL.md +64 -18
  149. package/src/skills/increment-quality-judge/SKILL.md +1 -36
  150. package/src/skills/jira-sync/README.md +1 -38
  151. package/src/skills/role-orchestrator/README.md +1 -22
  152. package/src/skills/role-orchestrator/SKILL.md +1 -59
  153. package/src/skills/skill-router/SKILL.md +0 -18
  154. package/src/skills/spec-kit-expert/SKILL.md +1 -3
  155. package/src/skills/specweave-detector/SKILL.md +225 -275
  156. package/src/skills/task-builder/README.md +1 -7
  157. package/src/templates/AGENTS.md.template +334 -0
  158. package/src/templates/CLAUDE.md.template +131 -298
  159. package/src/templates/README.md.template +115 -23
  160. package/src/templates/environments/minimal/README.md +0 -1
  161. package/INSTALL.md +0 -848
  162. package/SPECWEAVE.md +0 -743
  163. package/src/adapters/copilot/.github/copilot/instructions.md +0 -376
  164. package/src/adapters/cursor/.cursorrules +0 -325
  165. package/src/adapters/generic/SPECWEAVE-MANUAL.md +0 -676
  166. package/src/commands/create-project.md +0 -528
  167. package/src/commands/generate-docs.md +0 -623
  168. package/src/commands/review-docs.md +0 -331
  169. package/src/commands/sync-github.md +0 -115
  170. package/src/skills/ado-sync/test-cases/test-1.yaml +0 -9
  171. package/src/skills/ado-sync/test-cases/test-2.yaml +0 -8
  172. package/src/skills/ado-sync/test-cases/test-3.yaml +0 -9
  173. package/src/skills/bmad-method-expert/test-cases/test-1-placeholder.yaml +0 -12
  174. package/src/skills/bmad-method-expert/test-cases/test-2-placeholder.yaml +0 -12
  175. package/src/skills/bmad-method-expert/test-cases/test-3-placeholder.yaml +0 -12
  176. package/src/skills/brownfield-analyzer/test-cases/test-1-basic-analysis.yaml +0 -48
  177. package/src/skills/brownfield-analyzer/test-cases/test-2-placeholder.yaml +0 -12
  178. package/src/skills/brownfield-analyzer/test-cases/test-3-placeholder.yaml +0 -12
  179. package/src/skills/brownfield-onboarder/test-cases/test-1-placeholder.yaml +0 -12
  180. package/src/skills/brownfield-onboarder/test-cases/test-2-placeholder.yaml +0 -12
  181. package/src/skills/brownfield-onboarder/test-cases/test-3-placeholder.yaml +0 -12
  182. package/src/skills/calendar-system/test-cases/test-1-placeholder.yaml +0 -12
  183. package/src/skills/calendar-system/test-cases/test-2-placeholder.yaml +0 -12
  184. package/src/skills/calendar-system/test-cases/test-3-placeholder.yaml +0 -12
  185. package/src/skills/context-loader/test-cases/test-1-basic-loading.yaml +0 -39
  186. package/src/skills/context-loader/test-cases/test-2-token-budget-exceeded.yaml +0 -44
  187. package/src/skills/context-loader/test-cases/test-3-section-anchors.yaml +0 -45
  188. package/src/skills/context-optimizer/test-cases/test-1-bug-fix-narrow.yaml +0 -97
  189. package/src/skills/context-optimizer/test-cases/test-2-feature-focused.yaml +0 -109
  190. package/src/skills/context-optimizer/test-cases/test-3-architecture-broad.yaml +0 -98
  191. package/src/skills/cost-optimizer/test-cases/test-1-basic-comparison.yaml +0 -75
  192. package/src/skills/cost-optimizer/test-cases/test-2-budget-constraint.yaml +0 -52
  193. package/src/skills/cost-optimizer/test-cases/test-3-scale-requirement.yaml +0 -63
  194. package/src/skills/cost-optimizer/test-results/README.md +0 -46
  195. package/src/skills/design-system-architect/test-cases/test-1-token-structure.yaml +0 -23
  196. package/src/skills/design-system-architect/test-cases/test-2-component-hierarchy.yaml +0 -24
  197. package/src/skills/design-system-architect/test-cases/test-3-accessibility-checklist.yaml +0 -23
  198. package/src/skills/diagrams-architect/test-cases/test-1-c4-context.yaml +0 -13
  199. package/src/skills/diagrams-architect/test-cases/test-2-sequence-diagram.yaml +0 -13
  200. package/src/skills/diagrams-architect/test-cases/test-3-er-diagram.yaml +0 -13
  201. package/src/skills/diagrams-generator/test-cases/test-1.yaml +0 -9
  202. package/src/skills/diagrams-generator/test-cases/test-2.yaml +0 -9
  203. package/src/skills/diagrams-generator/test-cases/test-3.yaml +0 -8
  204. package/src/skills/docs-updater/test-cases/test-1-placeholder.yaml +0 -12
  205. package/src/skills/docs-updater/test-cases/test-2-placeholder.yaml +0 -12
  206. package/src/skills/docs-updater/test-cases/test-3-placeholder.yaml +0 -12
  207. package/src/skills/dotnet-backend/test-cases/test-1-rest-api.yaml +0 -14
  208. package/src/skills/dotnet-backend/test-cases/test-2-authentication.yaml +0 -13
  209. package/src/skills/dotnet-backend/test-cases/test-3-minimal-api.yaml +0 -13
  210. package/src/skills/e2e-playwright/test-cases/TC-001-basic-navigation.yaml +0 -54
  211. package/src/skills/e2e-playwright/test-cases/TC-002-form-interaction.yaml +0 -64
  212. package/src/skills/e2e-playwright/test-cases/TC-003-specweave-integration.yaml +0 -74
  213. package/src/skills/e2e-playwright/test-cases/TC-004-accessibility-check.yaml +0 -98
  214. package/src/skills/figma-designer/test-cases/test-1-design-system.yaml +0 -13
  215. package/src/skills/figma-designer/test-cases/test-2-component-library.yaml +0 -13
  216. package/src/skills/figma-designer/test-cases/test-3-responsive-layout.yaml +0 -13
  217. package/src/skills/figma-implementer/test-cases/test-1-design-to-react.yaml +0 -13
  218. package/src/skills/figma-implementer/test-cases/test-2-storybook.yaml +0 -13
  219. package/src/skills/figma-implementer/test-cases/test-3-design-tokens.yaml +0 -13
  220. package/src/skills/figma-mcp-connector/test-cases/test-1-read-file-desktop.yaml +0 -22
  221. package/src/skills/figma-mcp-connector/test-cases/test-2-read-file-framelink.yaml +0 -21
  222. package/src/skills/figma-mcp-connector/test-cases/test-3-error-handling.yaml +0 -18
  223. package/src/skills/figma-to-code/test-cases/test-1-token-generation.yaml +0 -29
  224. package/src/skills/figma-to-code/test-cases/test-2-component-generation.yaml +0 -27
  225. package/src/skills/figma-to-code/test-cases/test-3-typescript-generation.yaml +0 -28
  226. package/src/skills/frontend/test-cases/test-1-react-component.yaml +0 -13
  227. package/src/skills/frontend/test-cases/test-2-form-validation.yaml +0 -13
  228. package/src/skills/frontend/test-cases/test-3-state-management.yaml +0 -13
  229. package/src/skills/github-sync/test-cases/test-1-placeholder.yaml +0 -12
  230. package/src/skills/github-sync/test-cases/test-2-placeholder.yaml +0 -12
  231. package/src/skills/github-sync/test-cases/test-3-placeholder.yaml +0 -12
  232. package/src/skills/hetzner-provisioner/test-cases/test-1-basic-provision.yaml +0 -71
  233. package/src/skills/hetzner-provisioner/test-cases/test-2-postgres-provision.yaml +0 -85
  234. package/src/skills/hetzner-provisioner/test-cases/test-3-ssl-config.yaml +0 -126
  235. package/src/skills/hetzner-provisioner/test-results/README.md +0 -259
  236. package/src/skills/increment-planner/test-cases/test-1-basic-feature.yaml +0 -27
  237. package/src/skills/increment-planner/test-cases/test-2-complex-feature.yaml +0 -30
  238. package/src/skills/increment-planner/test-cases/test-3-auto-numbering.yaml +0 -24
  239. package/src/skills/increment-quality-judge/test-cases/test-1-good-spec.yaml +0 -95
  240. package/src/skills/increment-quality-judge/test-cases/test-2-poor-spec.yaml +0 -108
  241. package/src/skills/increment-quality-judge/test-cases/test-3-export-suggestions.yaml +0 -87
  242. package/src/skills/jira-sync/test-cases/test-1.yaml +0 -9
  243. package/src/skills/jira-sync/test-cases/test-2.yaml +0 -9
  244. package/src/skills/jira-sync/test-cases/test-3.yaml +0 -10
  245. package/src/skills/nextjs/test-cases/test-1-app-router.yaml +0 -13
  246. package/src/skills/nextjs/test-cases/test-2-server-actions.yaml +0 -13
  247. package/src/skills/nextjs/test-cases/test-3-api-routes.yaml +0 -13
  248. package/src/skills/nodejs-backend/test-cases/test-1-express-api.yaml +0 -13
  249. package/src/skills/nodejs-backend/test-cases/test-2-prisma-orm.yaml +0 -13
  250. package/src/skills/nodejs-backend/test-cases/test-3-authentication.yaml +0 -13
  251. package/src/skills/notification-system/test-cases/test-1-placeholder.yaml +0 -12
  252. package/src/skills/notification-system/test-cases/test-2-placeholder.yaml +0 -12
  253. package/src/skills/notification-system/test-cases/test-3-placeholder.yaml +0 -12
  254. package/src/skills/python-backend/test-cases/test-1-fastapi-crud.yaml +0 -13
  255. package/src/skills/python-backend/test-cases/test-2-sqlalchemy.yaml +0 -13
  256. package/src/skills/python-backend/test-cases/test-3-authentication.yaml +0 -13
  257. package/src/skills/role-orchestrator/test-cases/test-1-simple-product.yaml +0 -98
  258. package/src/skills/role-orchestrator/test-cases/test-2-quality-gate-failure.yaml +0 -73
  259. package/src/skills/role-orchestrator/test-cases/test-3-security-workflow.yaml +0 -121
  260. package/src/skills/role-orchestrator/test-cases/test-4-parallel-execution.yaml +0 -145
  261. package/src/skills/role-orchestrator/test-cases/test-5-feedback-loops.yaml +0 -149
  262. package/src/skills/skill-creator/test-cases/test-1-placeholder.yaml +0 -12
  263. package/src/skills/skill-creator/test-cases/test-2-placeholder.yaml +0 -12
  264. package/src/skills/skill-creator/test-cases/test-3-placeholder.yaml +0 -12
  265. package/src/skills/skill-router/test-cases/test-1-basic-routing.yaml +0 -33
  266. package/src/skills/skill-router/test-cases/test-2-ambiguous-request.yaml +0 -42
  267. package/src/skills/skill-router/test-cases/test-3-nested-orchestration.yaml +0 -50
  268. package/src/skills/spec-driven-brainstorming/test-cases/TC-001-simple-idea-to-design.yaml +0 -148
  269. package/src/skills/spec-driven-brainstorming/test-cases/TC-002-complex-ultrathink-design.yaml +0 -190
  270. package/src/skills/spec-driven-brainstorming/test-cases/TC-003-unclear-requirements-socratic.yaml +0 -233
  271. package/src/skills/spec-driven-debugging/test-cases/TC-001-simple-auth-bug.yaml +0 -212
  272. package/src/skills/spec-driven-debugging/test-cases/TC-002-race-condition-ultrathink.yaml +0 -461
  273. package/src/skills/spec-driven-debugging/test-cases/TC-003-brownfield-missing-spec.yaml +0 -366
  274. package/src/skills/spec-kit-expert/test-cases/test-1-placeholder.yaml +0 -12
  275. package/src/skills/spec-kit-expert/test-cases/test-2-placeholder.yaml +0 -12
  276. package/src/skills/spec-kit-expert/test-cases/test-3-placeholder.yaml +0 -12
  277. package/src/skills/specweave-ado-mapper/test-cases/test-1-export-to-ado.yaml +0 -13
  278. package/src/skills/specweave-ado-mapper/test-cases/test-2-import-from-ado.yaml +0 -13
  279. package/src/skills/specweave-ado-mapper/test-cases/test-3-bidirectional-sync.yaml +0 -13
  280. package/src/skills/specweave-detector/test-cases/test-1-basic-detection.yaml +0 -37
  281. package/src/skills/specweave-detector/test-cases/test-2-missing-config.yaml +0 -37
  282. package/src/skills/specweave-detector/test-cases/test-3-non-specweave-project.yaml +0 -34
  283. package/src/skills/specweave-jira-mapper/test-cases/test-1-export-to-jira.yaml +0 -13
  284. package/src/skills/specweave-jira-mapper/test-cases/test-2-import-from-jira.yaml +0 -13
  285. package/src/skills/specweave-jira-mapper/test-cases/test-3-sync-status.yaml +0 -13
  286. package/src/skills/stripe-integrator/test-cases/test-1-placeholder.yaml +0 -12
  287. package/src/skills/stripe-integrator/test-cases/test-2-placeholder.yaml +0 -12
  288. package/src/skills/stripe-integrator/test-cases/test-3-placeholder.yaml +0 -12
  289. package/src/skills/task-builder/test-cases/test-1-placeholder.yaml +0 -12
  290. package/src/skills/task-builder/test-cases/test-2-placeholder.yaml +0 -12
  291. package/src/skills/task-builder/test-cases/test-3-placeholder.yaml +0 -12
  292. package/src/templates/config.yaml +0 -351
  293. /package/src/commands/{list-increments.md → specweave.list-increments.md} +0 -0
@@ -0,0 +1,311 @@
1
+ /**
2
+ * CLAUDE.md Generator
3
+ *
4
+ * Generates CLAUDE.md - the PRIMARY instruction file for Claude Code.
5
+ *
6
+ * CRITICAL:
7
+ * - Claude Code ONLY reads CLAUDE.md (NOT AGENTS.md)
8
+ * - This is the native/baseline implementation (skills, agents, hooks, slash commands)
9
+ * - Claude Code is NOT an adapter - it's the gold standard that others try to approximate
10
+ *
11
+ * This generator creates a quick reference that lists what's actually installed,
12
+ * so when we add new agents/skills, CLAUDE.md stays in sync automatically.
13
+ */
14
+
15
+ import { DocGenerator } from './doc-generator.js';
16
+ import * as path from 'path';
17
+ import fs from 'fs-extra';
18
+ import { getDirname } from '../utils/esm-helpers.js';
19
+
20
+ const __dirname = getDirname(import.meta.url);
21
+
22
+ export interface ClaudeMdOptions {
23
+ projectName: string;
24
+ projectPath: string;
25
+ templatePath?: string;
26
+ }
27
+
28
+ /**
29
+ * Generate CLAUDE.md with dynamic agent/skill sections
30
+ */
31
+ export class ClaudeMdGenerator {
32
+ private docGen: DocGenerator;
33
+
34
+ constructor(
35
+ skillsDir?: string,
36
+ agentsDir?: string,
37
+ commandsDir?: string
38
+ ) {
39
+ this.docGen = new DocGenerator(skillsDir, agentsDir, commandsDir);
40
+ }
41
+
42
+ /**
43
+ * Generate complete CLAUDE.md content
44
+ */
45
+ async generate(options: ClaudeMdOptions): Promise<string> {
46
+ // Read template
47
+ const templatePath = options.templatePath ||
48
+ path.join(__dirname, '../templates/CLAUDE.md.template');
49
+
50
+ if (!await fs.pathExists(templatePath)) {
51
+ throw new Error(`CLAUDE.md template not found at: ${templatePath}`);
52
+ }
53
+
54
+ let content = await fs.readFile(templatePath, 'utf-8');
55
+
56
+ // Replace placeholders
57
+ content = content.replace(/\{PROJECT_NAME\}/g, options.projectName);
58
+
59
+ // Replace dynamic sections
60
+ content = await this.replaceDynamicSections(content);
61
+
62
+ return content;
63
+ }
64
+
65
+ /**
66
+ * Replace dynamic sections in template
67
+ */
68
+ private async replaceDynamicSections(content: string): Promise<string> {
69
+ // Extract actual skills and agents
70
+ const skills = await this.docGen.extractSkills();
71
+ const agents = await this.docGen.extractAgents();
72
+ const commands = await this.docGen.extractCommands();
73
+
74
+ // Replace agents section (lines 226-243 in template)
75
+ content = this.replaceAgentsSection(content, agents);
76
+
77
+ // Replace skills section (lines 248-278 in template)
78
+ content = this.replaceSkillsSection(content, skills);
79
+
80
+ // Replace commands section if needed
81
+ content = this.replaceCommandsSection(content, commands);
82
+
83
+ return content;
84
+ }
85
+
86
+ /**
87
+ * Generate dynamic agents section
88
+ */
89
+ private replaceAgentsSection(content: string, agents: any[]): string {
90
+ const agentsTable = this.generateAgentsTable(agents);
91
+
92
+ // Find the agents section and replace it
93
+ // Look for "## Agents (Activate Automatically)" section
94
+ const agentsSectionRegex = /## Agents \(Activate Automatically\)[\s\S]*?(?=\n## |$)/;
95
+
96
+ const agentsSection = `## Agents (Activate Automatically)
97
+
98
+ **Strategic Agents** (pre-installed & ready to use):
99
+
100
+ ${agentsTable}
101
+
102
+ **All ${agents.length} agents are pre-installed** - Claude uses the right one based on your request!
103
+
104
+ **See**: \`.claude/agents/\` for complete list
105
+
106
+ ---
107
+ `;
108
+
109
+ if (agentsSectionRegex.test(content)) {
110
+ return content.replace(agentsSectionRegex, agentsSection);
111
+ }
112
+
113
+ return content;
114
+ }
115
+
116
+ /**
117
+ * Generate agents table
118
+ */
119
+ private generateAgentsTable(agents: any[]): string {
120
+ let table = '| Agent | Purpose | Activates When |\n';
121
+ table += '|-------|---------|----------------|\n';
122
+
123
+ for (const agent of agents) {
124
+ const activation = this.getAgentActivation(agent.name);
125
+ table += `| \`${agent.name}\` | ${agent.description} | ${activation} |\n`;
126
+ }
127
+
128
+ return table;
129
+ }
130
+
131
+ /**
132
+ * Get agent activation guidance
133
+ */
134
+ private getAgentActivation(agentName: string): string {
135
+ const activations: Record<string, string> = {
136
+ 'pm': 'Planning features',
137
+ 'architect': 'Technical design',
138
+ 'security': 'Security review',
139
+ 'qa-lead': 'Testing',
140
+ 'devops': 'Deployment needed',
141
+ 'tech-lead': 'Code review',
142
+ 'sre': 'Troubleshooting',
143
+ 'docs-writer': 'Writing docs',
144
+ 'performance': 'Optimization needed',
145
+ 'frontend': 'Frontend development',
146
+ 'nodejs-backend': 'Node.js backend',
147
+ 'python-backend': 'Python backend',
148
+ 'nextjs': 'Next.js development',
149
+ 'dotnet-backend': '.NET development'
150
+ };
151
+
152
+ return activations[agentName] || 'Specialized tasks';
153
+ }
154
+
155
+ /**
156
+ * Generate dynamic skills section
157
+ */
158
+ private replaceSkillsSection(content: string, skills: any[]): string {
159
+ const skillsTable = this.generateSkillsTable(skills);
160
+
161
+ // Find the skills section and replace it
162
+ const skillsSectionRegex = /## Skills \(Activate Automatically\)[\s\S]*?(?=\n## |$)/;
163
+
164
+ const skillsSection = `## Skills (Activate Automatically)
165
+
166
+ **Framework Skills** (always available):
167
+
168
+ ${this.generateFrameworkSkillsTable(skills)}
169
+
170
+ **Technology Skills** (all pre-installed):
171
+
172
+ ${this.generateTechSkillsTable(skills)}
173
+
174
+ **Integration Skills** (all pre-installed):
175
+
176
+ ${this.generateIntegrationSkillsTable(skills)}
177
+
178
+ **See**: \`.claude/skills/\` for complete list of ${skills.length}+ skills!
179
+
180
+ ---
181
+ `;
182
+
183
+ if (skillsSectionRegex.test(content)) {
184
+ return content.replace(skillsSectionRegex, skillsSection);
185
+ }
186
+
187
+ return content;
188
+ }
189
+
190
+ /**
191
+ * Generate framework skills table
192
+ */
193
+ private generateFrameworkSkillsTable(skills: any[]): string {
194
+ const frameworkSkills = skills.filter(s =>
195
+ ['specweave-detector', 'increment-planner', 'context-loader', 'skill-router',
196
+ 'spec-driven-debugging', 'spec-driven-brainstorming', 'brownfield-analyzer'].includes(s.name)
197
+ );
198
+
199
+ let table = '| Skill | Purpose | Activates When |\n';
200
+ table += '|-------|---------|----------------|\n';
201
+
202
+ for (const skill of frameworkSkills) {
203
+ const activation = this.getSkillActivation(skill.name);
204
+ table += `| \`${skill.name}\` | ${this.truncate(skill.description, 60)} | ${activation} |\n`;
205
+ }
206
+
207
+ return table;
208
+ }
209
+
210
+ /**
211
+ * Generate tech skills table
212
+ */
213
+ private generateTechSkillsTable(skills: any[]): string {
214
+ const techSkills = skills.filter(s =>
215
+ ['nodejs-backend', 'python-backend', 'nextjs', 'frontend', 'dotnet-backend',
216
+ 'e2e-playwright'].includes(s.name)
217
+ );
218
+
219
+ let table = '| Skill | Purpose | Activates When |\n';
220
+ table += '|-------|---------|----------------|\n';
221
+
222
+ for (const skill of techSkills) {
223
+ const activation = this.getSkillActivation(skill.name);
224
+ table += `| \`${skill.name}\` | ${this.truncate(skill.description, 60)} | ${activation} |\n`;
225
+ }
226
+
227
+ return table;
228
+ }
229
+
230
+ /**
231
+ * Generate integration skills table
232
+ */
233
+ private generateIntegrationSkillsTable(skills: any[]): string {
234
+ const integrationSkills = skills.filter(s =>
235
+ ['jira-sync', 'github-sync', 'ado-sync', 'hetzner-provisioner',
236
+ 'cost-optimizer', 'figma-mcp-connector'].includes(s.name)
237
+ );
238
+
239
+ let table = '| Skill | Purpose | Activates When |\n';
240
+ table += '|-------|---------|----------------|\n';
241
+
242
+ for (const skill of integrationSkills) {
243
+ const activation = this.getSkillActivation(skill.name);
244
+ table += `| \`${skill.name}\` | ${this.truncate(skill.description, 60)} | ${activation} |\n`;
245
+ }
246
+
247
+ return table;
248
+ }
249
+
250
+ /**
251
+ * Get skill activation guidance
252
+ */
253
+ private getSkillActivation(skillName: string): string {
254
+ const activations: Record<string, string> = {
255
+ 'specweave-detector': 'User asks about SpecWeave',
256
+ 'increment-planner': '/pi or feature planning',
257
+ 'context-loader': 'Working on increments',
258
+ 'skill-router': 'Ambiguous requests',
259
+ 'spec-driven-debugging': 'Bug or test failure',
260
+ 'spec-driven-brainstorming': 'Brainstorm or refine idea',
261
+ 'nodejs-backend': 'Node.js backend',
262
+ 'python-backend': 'Python backend',
263
+ 'nextjs': 'Next.js',
264
+ 'frontend': 'Frontend',
265
+ 'dotnet-backend': '.NET',
266
+ 'jira-sync': 'JIRA integration',
267
+ 'github-sync': 'GitHub integration',
268
+ 'ado-sync': 'Azure DevOps sync',
269
+ 'hetzner-provisioner': 'Hetzner deployment',
270
+ 'cost-optimizer': 'Cost optimization',
271
+ 'e2e-playwright': 'E2E testing'
272
+ };
273
+
274
+ return activations[skillName] || 'Specialized tasks';
275
+ }
276
+
277
+ /**
278
+ * Generate skills table
279
+ */
280
+ private generateSkillsTable(skills: any[]): string {
281
+ let table = '| Skill | Description |\n';
282
+ table += '|-------|-------------|\n';
283
+
284
+ for (const skill of skills.slice(0, 20)) { // Top 20 skills
285
+ table += `| \`${skill.name}\` | ${this.truncate(skill.description, 80)} |\n`;
286
+ }
287
+
288
+ if (skills.length > 20) {
289
+ table += `| _...and ${skills.length - 20} more_ | See \`.claude/skills/\` |\n`;
290
+ }
291
+
292
+ return table;
293
+ }
294
+
295
+ /**
296
+ * Replace commands section
297
+ */
298
+ private replaceCommandsSection(content: string, commands: any[]): string {
299
+ // Commands are already listed in the template, but we could make them dynamic too
300
+ // For now, we'll skip this since commands are explicitly documented
301
+ return content;
302
+ }
303
+
304
+ /**
305
+ * Truncate text to max length
306
+ */
307
+ private truncate(text: string, maxLength: number): string {
308
+ if (text.length <= maxLength) return text;
309
+ return text.substring(0, maxLength - 3) + '...';
310
+ }
311
+ }
@@ -0,0 +1,105 @@
1
+ # OpenAI Codex Adapter
2
+
3
+ **Automation Level**: Semi (Good experience with GPT-5-Codex and multiple access points)
4
+
5
+ ## Overview
6
+
7
+ The Codex adapter provides **semi-automation** for SpecWeave using OpenAI's Codex (ChatGPT Code Interpreter/Codex CLI) with **AGENTS.md** as the universal instruction file.
8
+
9
+ ## Key Features
10
+
11
+ - **GPT-5-Codex Model**: Optimized for engineering tasks
12
+ - **Multiple Access Points**: CLI, Web, IDE, GitHub, iOS app
13
+ - **Task-Based Execution**: Isolated environments per task
14
+ - **File Operations**: Read, write, execute commands
15
+ - **Test Execution**: Run tests and validate implementations
16
+ - **Real-Time Progress**: Monitor task execution (1-30 min/task)
17
+
18
+ ## Installation
19
+
20
+ ```bash
21
+ # Install Codex CLI (requires ChatGPT Plus/Pro/Business/Enterprise)
22
+ npm install -g openai-codex-cli
23
+
24
+ # Initialize SpecWeave project with Codex adapter
25
+ npx specweave init my-project --adapter codex
26
+ ```
27
+
28
+ ## How It Works
29
+
30
+ ### Option 1: Codex CLI (Fastest)
31
+ ```bash
32
+ codex "Read AGENTS.md and create increment for user authentication"
33
+ ```
34
+
35
+ ### Option 2: ChatGPT Web (Most Accessible)
36
+ 1. Upload AGENTS.md file
37
+ 2. Say: "Create increment for user authentication following SpecWeave"
38
+ 3. Copy generated content to files
39
+
40
+ ### Option 3: IDE Integration
41
+ Use Codex in your IDE (VS Code, JetBrains) with AGENTS.md reference
42
+
43
+ ## Universal AGENTS.md
44
+
45
+ Instead of tool-specific files, SpecWeave uses **AGENTS.md** that works with ALL tools:
46
+
47
+ - ✅ Codex (OpenAI)
48
+ - ✅ Gemini CLI
49
+ - ✅ Cursor
50
+ - ✅ GitHub Copilot
51
+ - ✅ ANY AI tool
52
+
53
+ **Single source of truth** = easier maintenance!
54
+
55
+ ## Example Workflows
56
+
57
+ ### Create Feature (CLI)
58
+ ```bash
59
+ codex "Read AGENTS.md. Create increment 0002 for payment processing with Stripe."
60
+ ```
61
+
62
+ ### Create Feature (Web)
63
+ 1. Upload AGENTS.md to ChatGPT
64
+ 2. Say: "Create increment for payment processing"
65
+ 3. Download generated files
66
+
67
+ ### Implement Task
68
+ ```bash
69
+ codex "Read increment 0002, implement task T001"
70
+ ```
71
+
72
+ ### Fix Bug with Tests
73
+ ```bash
74
+ codex "Read AGENTS.md and increment 0001. Fix auth bug. Run tests."
75
+ ```
76
+
77
+ ## Comparison with Claude Code
78
+
79
+ | Feature | Claude Code | Codex |
80
+ |---------|-------------|-------|
81
+ | **Automation** | Full | Semi |
82
+ | **Skills** | Native | Via AGENTS.md |
83
+ | **Agents** | Native | Via AGENTS.md |
84
+ | **Access Points** | CLI only | CLI + Web + IDE + GitHub + iOS |
85
+ | **Model** | Sonnet 4.5 | GPT-5-Codex |
86
+ | **Task Isolation** | No | Yes (isolated per task) |
87
+ | **Hooks** | Yes | No |
88
+
89
+ ## Plans & Pricing
90
+
91
+ - **ChatGPT Plus**: $20/month (Codex included)
92
+ - **ChatGPT Pro**: $200/month (unlimited, faster)
93
+ - **Business/Enterprise**: Custom pricing
94
+
95
+ ## Links
96
+
97
+ - [OpenAI Codex](https://openai.com/codex/)
98
+ - [ChatGPT Features](https://chatgpt.com/features/codex)
99
+ - [SpecWeave Website](https://spec-weave.com)
100
+
101
+ ---
102
+
103
+ **Status**: Active (v0.2.0+)
104
+ **Market Share**: ~20% (OpenAI users)
105
+ **Priority**: P1 (high impact - most accessible AI tool)