specweave 0.1.9 → 0.3.0

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 +245 -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 +272 -170
  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,57 @@
1
+ /**
2
+ * ESM Helpers
3
+ *
4
+ * Provides __dirname and __filename equivalents for ES modules.
5
+ * In ESM, these CommonJS globals are not available, so we need to derive them
6
+ * from import.meta.url.
7
+ */
8
+ import { fileURLToPath } from 'url';
9
+ import { dirname } from 'path';
10
+ /**
11
+ * Get __dirname equivalent in ESM
12
+ *
13
+ * @param importMetaUrl - Pass import.meta.url from the calling module
14
+ * @returns The directory path of the calling module
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { getDirname } from './utils/esm-helpers.js';
19
+ * const __dirname = getDirname(import.meta.url);
20
+ * ```
21
+ */
22
+ export function getDirname(importMetaUrl) {
23
+ return dirname(fileURLToPath(importMetaUrl));
24
+ }
25
+ /**
26
+ * Get __filename equivalent in ESM
27
+ *
28
+ * @param importMetaUrl - Pass import.meta.url from the calling module
29
+ * @returns The file path of the calling module
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import { getFilename } from './utils/esm-helpers.js';
34
+ * const __filename = getFilename(import.meta.url);
35
+ * ```
36
+ */
37
+ export function getFilename(importMetaUrl) {
38
+ return fileURLToPath(importMetaUrl);
39
+ }
40
+ /**
41
+ * Get both __dirname and __filename at once
42
+ *
43
+ * @param importMetaUrl - Pass import.meta.url from the calling module
44
+ * @returns Object with __dirname and __filename
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * import { getFilePaths } from './utils/esm-helpers.js';
49
+ * const { __dirname, __filename } = getFilePaths(import.meta.url);
50
+ * ```
51
+ */
52
+ export function getFilePaths(importMetaUrl) {
53
+ const __filename = fileURLToPath(importMetaUrl);
54
+ const __dirname = dirname(__filename);
55
+ return { __dirname, __filename };
56
+ }
57
+ //# sourceMappingURL=esm-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esm-helpers.js","sourceRoot":"","sources":["../../src/utils/esm-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,aAAqB;IAC9C,OAAO,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,aAAqB;IAC/C,OAAO,aAAa,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAIhD,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "specweave",
3
- "version": "0.1.9",
4
- "description": "Replace vibe coding with spec-driven development. Smart workflow: /inc auto-closes previous, /build auto-resumes, /progress shows status. PM-led planning, 10 agents, 35+ skills. spec-weave.com",
3
+ "version": "0.3.0",
4
+ "description": "Replace vibe coding with spec-driven development. Smart workflow: /specweave inc auto-closes previous, /specweave build auto-resumes, /specweave progress shows status. PM-led planning, 10 agents, 35+ skills. spec-weave.com",
5
+ "type": "module",
5
6
  "main": "dist/index.js",
6
7
  "bin": {
7
8
  "specweave": "./bin/specweave.js"
@@ -13,7 +14,15 @@
13
14
  "test": "jest",
14
15
  "test:smoke": "bash tests/smoke/e2e-smoke-test.sh",
15
16
  "test:e2e": "playwright test tests/e2e/specweave-smoke.spec.ts",
16
- "test:all": "npm test && npm run test:smoke",
17
+ "test:integration": "npm run test:integration:ado && npm run test:integration:jira",
18
+ "test:integration:ado": "ts-node tests/integration/ado-sync/ado-sync.test.ts",
19
+ "test:integration:jira": "ts-node tests/integration/jira-sync/jira-sync.test.ts",
20
+ "test:sync:jira": "ts-node tests/integration/jira-sync/jira-bidirectional-sync.test.ts",
21
+ "test:incremental:jira": "ts-node tests/integration/jira-sync/jira-incremental-sync.test.ts",
22
+ "generate:tests": "ts-node scripts/generate-tests.ts",
23
+ "generate:tests:skill": "ts-node scripts/generate-tests.ts",
24
+ "test:all:generated": "bash scripts/run-all-tests.sh",
25
+ "test:all": "npm test && npm run test:smoke && npm run test:integration",
17
26
  "prepublishOnly": "npm run build",
18
27
  "install:agents": "bash bin/install-agents.sh",
19
28
  "install:skills": "bash bin/install-skills.sh",
@@ -22,10 +31,8 @@
22
31
  "install:skills:global": "bash bin/install-skills.sh --global",
23
32
  "install:all:global": "bash bin/install-all.sh --global",
24
33
  "generate:diagrams": "bash scripts/generate-diagram-svgs.sh",
25
- "docs:public": "cd docs-site && npm start",
26
- "docs:internal": "mkdocs serve -f mkdocs-internal.yml",
27
- "docs:build:public": "cd docs-site && npm run build",
28
- "docs:build:internal": "mkdocs build -f mkdocs-internal.yml"
34
+ "docs:dev": "cd docs-site && npm start",
35
+ "docs:build": "cd docs-site && npm run build"
29
36
  },
30
37
  "keywords": [
31
38
  "specweave",
@@ -73,6 +80,7 @@
73
80
  "commander": "^11.1.0",
74
81
  "fs-extra": "^11.2.0",
75
82
  "inquirer": "^9.2.12",
83
+ "js-yaml": "^4.1.0",
76
84
  "ora": "^7.0.1",
77
85
  "yaml": "^2.3.4"
78
86
  },
@@ -82,6 +90,7 @@
82
90
  "@types/fs-extra": "^11.0.4",
83
91
  "@types/inquirer": "^9.0.7",
84
92
  "@types/jest": "^29.5.11",
93
+ "@types/js-yaml": "^4.0.9",
85
94
  "@types/node": "^20.10.0",
86
95
  "jest": "^29.7.0",
87
96
  "ts-jest": "^29.1.1",
@@ -12,7 +12,6 @@ SpecWeave adapters enable the framework to work with **ANY AI coding tool**, not
12
12
  SpecWeave
13
13
  ├── Core (Tool-Agnostic)
14
14
  │ └── .specweave/ # Plain Markdown + YAML
15
- │ ├── config.yaml
16
15
  │ ├── increments/
17
16
  │ └── docs/
18
17
 
@@ -69,7 +68,7 @@ interface IAdapter {
69
68
  **Files Installed**:
70
69
  - `.claude/skills/` - Auto-activating skills (specweave-detector, skill-router, etc.)
71
70
  - `.claude/agents/` - Specialized agents (PM, Architect, DevOps, QA, Security)
72
- - `.claude/commands/` - Slash commands (/create-increment, /review-docs, etc.)
71
+ - `.claude/commands/` - Slash commands (/create-increment, /sync-docs, etc.)
73
72
  - `.claude/hooks/` - Auto-update hooks (post-task-completion, etc.)
74
73
 
75
74
  **Features**:
@@ -5,15 +5,19 @@
5
5
  * Concrete adapters extend this class and implement tool-specific logic.
6
6
  */
7
7
 
8
- import * as fs from 'fs-extra';
8
+ import fs from 'fs-extra';
9
9
  import * as path from 'path';
10
+ import { execSync } from 'child_process';
10
11
  import {
11
12
  IAdapter,
12
13
  AdapterOptions,
13
14
  RequirementsResult,
14
15
  AdapterFile,
15
16
  AutomationLevel
16
- } from './adapter-interface';
17
+ } from './adapter-interface.js';
18
+ import { getDirname } from '../utils/esm-helpers.js';
19
+
20
+ const __dirname = getDirname(import.meta.url);
17
21
 
18
22
  export abstract class AdapterBase implements IAdapter {
19
23
  abstract name: string;
@@ -49,7 +53,6 @@ export abstract class AdapterBase implements IAdapter {
49
53
 
50
54
  // Check Git
51
55
  try {
52
- const { execSync } = require('child_process');
53
56
  execSync('git --version', { stdio: 'ignore' });
54
57
  } catch (error) {
55
58
  result.warnings.push('Git not found - version control features may not work');
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Adapter Loader
3
+ *
4
+ * Loads adapters from registry, detects tools, and provides API for init command.
5
+ * Enables SpecWeave to work with ANY AI coding tool.
6
+ */
7
+
8
+ import fs from 'fs-extra';
9
+ import * as path from 'path';
10
+ import * as YAML from 'yaml';
11
+ import { execSync } from 'child_process';
12
+ import { IAdapter } from './adapter-interface.js';
13
+ import { CursorAdapter } from './cursor/adapter.js';
14
+ import { CopilotAdapter } from './copilot/adapter.js';
15
+ import { GeminiAdapter } from './gemini/adapter.js';
16
+ import { CodexAdapter } from './codex/adapter.js';
17
+ import { GenericAdapter } from './generic/adapter.js';
18
+ import { getDirname } from '../utils/esm-helpers.js';
19
+
20
+ const __dirname = getDirname(import.meta.url);
21
+
22
+ export interface AdapterRegistry {
23
+ version: number;
24
+ last_updated: string;
25
+ adapters: Array<{
26
+ name: string;
27
+ description: string;
28
+ automation_level: string;
29
+ status: string;
30
+ directory: string;
31
+ market_share: string;
32
+ priority: string;
33
+ }>;
34
+ }
35
+
36
+ /**
37
+ * Adapter Loader - Main API for working with adapters
38
+ */
39
+ export class AdapterLoader {
40
+ private adapters: Map<string, IAdapter> = new Map();
41
+ private registry: AdapterRegistry | null = null;
42
+
43
+ constructor() {
44
+ this.initializeAdapters();
45
+ }
46
+
47
+ /**
48
+ * Initialize all adapters
49
+ *
50
+ * NOTE: Claude Code is NOT an adapter - it's the native/default experience!
51
+ * Adapters only exist for tools that need to APPROXIMATE Claude's native capabilities.
52
+ */
53
+ private initializeAdapters(): void {
54
+ // Note: No ClaudeAdapter - Claude is the baseline, not an adaptation!
55
+ this.adapters.set('cursor', new CursorAdapter());
56
+ this.adapters.set('copilot', new CopilotAdapter());
57
+ this.adapters.set('gemini', new GeminiAdapter());
58
+ this.adapters.set('codex', new CodexAdapter());
59
+ this.adapters.set('generic', new GenericAdapter());
60
+ }
61
+
62
+ /**
63
+ * Load registry.yaml
64
+ */
65
+ async loadRegistry(): Promise<AdapterRegistry> {
66
+ if (this.registry) {
67
+ return this.registry;
68
+ }
69
+
70
+ // Try dist first, then fall back to src (for development)
71
+ let registryPath = path.join(__dirname, 'registry.yaml');
72
+ if (!await fs.pathExists(registryPath)) {
73
+ registryPath = path.join(__dirname, '../../src/adapters/registry.yaml');
74
+ }
75
+
76
+ const content = await fs.readFile(registryPath, 'utf-8');
77
+ this.registry = YAML.parse(content) as AdapterRegistry;
78
+
79
+ return this.registry;
80
+ }
81
+
82
+ /**
83
+ * Get all available adapters
84
+ */
85
+ getAllAdapters(): IAdapter[] {
86
+ return Array.from(this.adapters.values());
87
+ }
88
+
89
+ /**
90
+ * Get adapter by name
91
+ */
92
+ getAdapter(name: string): IAdapter | undefined {
93
+ return this.adapters.get(name);
94
+ }
95
+
96
+ /**
97
+ * Auto-detect which tool is being used
98
+ *
99
+ * Detection priority (based on market share and probability):
100
+ * 1. Claude Code (if .claude/ exists or claude CLI found) - NATIVE, no adapter needed
101
+ * 2. Cursor (if cursor CLI or .cursor/ or .cursorrules exists)
102
+ * 3. Gemini CLI (if gemini CLI found)
103
+ * 4. Codex (if codex CLI found)
104
+ * 5. Copilot (if .github/copilot/ exists)
105
+ * 6. Generic (fallback - always returns true)
106
+ *
107
+ * @returns Promise<string> Detected tool name (not adapter - Claude has no adapter!)
108
+ */
109
+ async detectTool(): Promise<string> {
110
+ console.log('🔍 Detecting AI coding tool...\n');
111
+
112
+ // Check for Claude first (native, no adapter)
113
+ if (await this.commandExists('claude') || await this.fileExists('.claude')) {
114
+ console.log(`✅ Detected: Claude Code (native - full automation)`);
115
+ return 'claude';
116
+ }
117
+
118
+ // Check other tools (need adapters)
119
+ const detectionOrder = ['cursor', 'gemini', 'codex', 'copilot', 'generic'];
120
+
121
+ for (const adapterName of detectionOrder) {
122
+ const adapter = this.adapters.get(adapterName);
123
+ if (!adapter) continue;
124
+
125
+ const detected = await adapter.detect();
126
+ if (detected) {
127
+ console.log(`✅ Detected: ${adapter.name} (${adapter.automationLevel} automation)`);
128
+ return adapterName;
129
+ }
130
+ }
131
+
132
+ // Fallback to generic (should never reach here since generic always returns true)
133
+ console.log('ℹ️ Using generic adapter (manual workflow)');
134
+ return 'generic';
135
+ }
136
+
137
+ /**
138
+ * Helper: Check if a command exists in PATH
139
+ */
140
+ private async commandExists(command: string): Promise<boolean> {
141
+ try {
142
+ execSync(`which ${command}`, { stdio: 'ignore' });
143
+ return true;
144
+ } catch (error) {
145
+ return false;
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Helper: Check if a file exists
151
+ */
152
+ private async fileExists(filePath: string): Promise<boolean> {
153
+ try {
154
+ await fs.access(filePath);
155
+ return true;
156
+ } catch (error) {
157
+ return false;
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Check requirements for a specific adapter
163
+ */
164
+ async checkRequirements(adapterName: string): Promise<void> {
165
+ const adapter = this.adapters.get(adapterName);
166
+ if (!adapter) {
167
+ throw new Error(`Adapter not found: ${adapterName}`);
168
+ }
169
+
170
+ const result = await adapter.checkRequirements();
171
+
172
+ if (!result.met) {
173
+ console.error('\n❌ Requirements not met:\n');
174
+ result.missing.forEach(req => console.error(` - ${req}`));
175
+ throw new Error('System requirements not met');
176
+ }
177
+
178
+ if (result.warnings.length > 0) {
179
+ console.warn('\n⚠️ Warnings:\n');
180
+ result.warnings.forEach(warning => console.warn(` - ${warning}`));
181
+ }
182
+ }
183
+
184
+ /**
185
+ * List all available adapters with details
186
+ */
187
+ async listAdapters(): Promise<void> {
188
+ const registry = await this.loadRegistry();
189
+
190
+ console.log('\n📋 SpecWeave Tool Support:\n');
191
+ console.log('━'.repeat(70));
192
+ console.log('');
193
+
194
+ // Show Claude first (baseline, not an adapter)
195
+ const claudeInfo = registry.adapters.find(a => a.name === 'claude');
196
+ if (claudeInfo) {
197
+ console.log(`🚀 CLAUDE CODE (Baseline - No Adapter Needed)`);
198
+ console.log(` ${claudeInfo.description}`);
199
+ console.log(` Native: skills, agents, hooks, slash commands | Market: ${claudeInfo.market_share}`);
200
+ console.log('');
201
+ }
202
+
203
+ console.log('📦 Adapters (For Other Tools):\n');
204
+
205
+ // Show other adapters
206
+ for (const adapterInfo of registry.adapters) {
207
+ if (adapterInfo.name === 'claude') continue; // Skip Claude, already shown
208
+
209
+ const adapter = this.adapters.get(adapterInfo.name);
210
+ if (!adapter) continue;
211
+
212
+ console.log(`${this.getAutomationIcon(adapter.automationLevel)} ${adapter.name.toUpperCase()}`);
213
+ console.log(` ${adapter.description}`);
214
+ console.log(` Automation: ${adapter.automationLevel} | Market: ${adapterInfo.market_share}`);
215
+ console.log('');
216
+ }
217
+
218
+ console.log('━'.repeat(70));
219
+ console.log('\nTotal Market Coverage: 100%');
220
+ console.log('SpecWeave works with ANY AI coding tool!');
221
+ console.log('\n💡 Claude Code = Native experience (no adapter)');
222
+ console.log(' Other tools = Adapters approximate Claude\'s capabilities\n');
223
+ }
224
+
225
+ /**
226
+ * Get icon for automation level
227
+ */
228
+ private getAutomationIcon(level: string): string {
229
+ switch (level) {
230
+ case 'full': return '🚀';
231
+ case 'semi': return '⚡';
232
+ case 'basic': return '📝';
233
+ case 'manual': return '📖';
234
+ default: return '❓';
235
+ }
236
+ }
237
+
238
+ /**
239
+ * Get recommended adapter based on detection and user preference
240
+ */
241
+ async getRecommendedAdapter(explicitChoice?: string): Promise<IAdapter> {
242
+ // If user explicitly chose an adapter, use it
243
+ if (explicitChoice) {
244
+ const adapter = this.adapters.get(explicitChoice);
245
+ if (!adapter) {
246
+ throw new Error(`Invalid adapter: ${explicitChoice}. Use 'claude', 'cursor', 'copilot', or 'generic'`);
247
+ }
248
+ return adapter;
249
+ }
250
+
251
+ // Otherwise, auto-detect
252
+ const detectedName = await this.detectTool();
253
+ const adapter = this.adapters.get(detectedName);
254
+
255
+ if (!adapter) {
256
+ throw new Error(`Detected adapter not found: ${detectedName}`);
257
+ }
258
+
259
+ return adapter;
260
+ }
261
+ }
@@ -0,0 +1,162 @@
1
+ /**
2
+ * AGENTS.md Generator
3
+ *
4
+ * Generates a universal AGENTS.md file for ALL AI coding tools EXCEPT Claude Code.
5
+ * Follows the agents.md standard: https://agents.md/
6
+ *
7
+ * IMPORTANT:
8
+ * - Claude Code does NOT read this file - it only reads CLAUDE.md
9
+ * - This file is for: Cursor, Gemini CLI, Codex, GitHub Copilot, and ANY other AI tool
10
+ *
11
+ * This ONE file replaces:
12
+ * - .cursorrules (Cursor)
13
+ * - .github/copilot/instructions.md (Copilot)
14
+ * - Any other tool-specific configuration files
15
+ */
16
+
17
+ import { DocGenerator } from './doc-generator.js';
18
+ import * as path from 'path';
19
+ import fs from 'fs-extra';
20
+ import { getDirname } from '../utils/esm-helpers.js';
21
+
22
+ const __dirname = getDirname(import.meta.url);
23
+
24
+ export interface AgentsMdOptions {
25
+ projectName: string;
26
+ projectPath: string;
27
+ templatePath?: string;
28
+ }
29
+
30
+ /**
31
+ * Generate universal AGENTS.md file
32
+ */
33
+ export class AgentsMdGenerator {
34
+ private docGen: DocGenerator;
35
+
36
+ constructor(
37
+ skillsDir?: string,
38
+ agentsDir?: string,
39
+ commandsDir?: string
40
+ ) {
41
+ this.docGen = new DocGenerator(skillsDir, agentsDir, commandsDir);
42
+ }
43
+
44
+ /**
45
+ * Generate complete AGENTS.md content
46
+ */
47
+ async generate(options: AgentsMdOptions): Promise<string> {
48
+ // Read template
49
+ const templatePath = options.templatePath ||
50
+ path.join(__dirname, '../templates/AGENTS.md.template');
51
+
52
+ if (!await fs.pathExists(templatePath)) {
53
+ throw new Error(`AGENTS.md template not found at: ${templatePath}`);
54
+ }
55
+
56
+ let content = await fs.readFile(templatePath, 'utf-8');
57
+
58
+ // Extract agents and skills
59
+ const skills = await this.docGen.extractSkills();
60
+ const agents = await this.docGen.extractAgents();
61
+
62
+ // Replace placeholders
63
+ content = content.replace(/\{PROJECT_NAME\}/g, options.projectName);
64
+ content = content.replace('{AGENTS_SECTION}', this.generateAgentsSection(agents));
65
+ content = content.replace('{SKILLS_SECTION}', this.generateSkillsSection(skills));
66
+ content = content.replace('{TIMESTAMP}', new Date().toISOString().split('T')[0]);
67
+
68
+ return content;
69
+ }
70
+
71
+ /**
72
+ * Generate agents section as simple Markdown
73
+ */
74
+ private generateAgentsSection(agents: any[]): string {
75
+ let section = '';
76
+
77
+ for (const agent of agents) {
78
+ section += `### ${agent.role}\n`;
79
+ section += `**Purpose**: ${agent.description}\n`;
80
+ section += `**When to use**: ${this.getAgentActivation(agent.name)}\n`;
81
+ section += `**Location**: \`.claude/agents/${agent.name}/AGENT.md\`\n\n`;
82
+ }
83
+
84
+ return section;
85
+ }
86
+
87
+ /**
88
+ * Get agent activation guidance
89
+ */
90
+ private getAgentActivation(agentName: string): string {
91
+ const activations: Record<string, string> = {
92
+ 'pm': 'Creating requirements, user stories, product specs (WHAT/WHY)',
93
+ 'architect': 'System design, architecture decisions, technical plans (HOW)',
94
+ 'devops': 'Infrastructure, deployment, CI/CD pipelines',
95
+ 'qa-lead': 'Test strategy, test cases, quality assurance',
96
+ 'security': 'Threat modeling, security review, vulnerability assessment',
97
+ 'tech-lead': 'Code review, best practices, refactoring',
98
+ 'frontend': 'UI components, React/Vue/Angular implementation',
99
+ 'nodejs-backend': 'Node.js/Express/NestJS backend APIs',
100
+ 'python-backend': 'FastAPI/Django backend APIs',
101
+ 'nextjs': 'Next.js App Router applications',
102
+ 'dotnet-backend': 'ASP.NET Core backend APIs',
103
+ 'sre': 'Incident response, troubleshooting, runbooks',
104
+ 'docs-writer': 'Technical documentation, API docs, guides',
105
+ 'performance': 'Performance optimization, profiling, benchmarking'
106
+ };
107
+
108
+ return activations[agentName] || 'Specialized tasks requiring this expertise';
109
+ }
110
+
111
+ /**
112
+ * Generate skills section as simple Markdown
113
+ */
114
+ private generateSkillsSection(skills: any[]): string {
115
+ let section = '';
116
+
117
+ for (const skill of skills) {
118
+ section += `### ${skill.name}\n`;
119
+ section += `**Purpose**: ${skill.description}\n`;
120
+ section += `**When to use**: ${this.getSkillActivation(skill.name)}\n`;
121
+ section += `**Location**: \`.claude/skills/${skill.name}/SKILL.md\`\n\n`;
122
+ }
123
+
124
+ return section;
125
+ }
126
+
127
+ /**
128
+ * Get skill activation guidance
129
+ */
130
+ private getSkillActivation(skillName: string): string {
131
+ const activations: Record<string, string> = {
132
+ 'specweave-detector': 'User asks about SpecWeave commands or workflows',
133
+ 'increment-planner': 'Creating new feature increments (/inc command)',
134
+ 'context-loader': 'Working on increments, need to load relevant context',
135
+ 'skill-router': 'Ambiguous requests that need routing to specific skills',
136
+ 'spec-driven-debugging': 'Bug investigation, test failures, unexpected behavior',
137
+ 'spec-driven-brainstorming': 'Brainstorming ideas, refining concepts, design thinking',
138
+ 'brownfield-analyzer': 'Analyzing existing projects for SpecWeave migration',
139
+ 'brownfield-onboarder': 'Onboarding existing projects to SpecWeave',
140
+ 'nodejs-backend': 'Node.js/Express/NestJS backend development',
141
+ 'python-backend': 'Python/FastAPI/Django backend development',
142
+ 'nextjs': 'Next.js App Router application development',
143
+ 'frontend': 'React/Vue/Angular frontend development',
144
+ 'dotnet-backend': 'ASP.NET Core backend development',
145
+ 'e2e-playwright': 'End-to-end testing with Playwright',
146
+ 'jira-sync': 'JIRA integration and synchronization',
147
+ 'github-sync': 'GitHub issues/milestones synchronization',
148
+ 'ado-sync': 'Azure DevOps synchronization',
149
+ 'hetzner-provisioner': 'Hetzner Cloud infrastructure provisioning',
150
+ 'cost-optimizer': 'Cloud cost optimization and platform comparison',
151
+ 'figma-mcp-connector': 'Figma design integration via MCP',
152
+ 'design-system-architect': 'Design system and Atomic Design methodology',
153
+ 'figma-designer': 'Figma design creation and design tokens',
154
+ 'figma-implementer': 'Converting Figma designs to code',
155
+ 'figma-to-code': 'Figma to React/Angular code generation',
156
+ 'role-orchestrator': 'Multi-agent orchestration for complex tasks',
157
+ 'increment-quality-judge': 'AI-powered quality assessment of specs and plans'
158
+ };
159
+
160
+ return activations[skillName] || 'Specialized tasks';
161
+ }
162
+ }
@@ -63,9 +63,9 @@ This adapter represents the **gold standard** - all other adapters attempt to ap
63
63
  | Command | Purpose |
64
64
  |---------|---------|
65
65
  | `/create-increment` | Create new feature increment |
66
- | `/review-docs` | Review strategic documentation |
66
+ | `/sync-docs` | Review strategic documentation |
67
67
  | `/sync-github` | Sync to GitHub issues |
68
- | `/create-project` | Bootstrap new project |
68
+ | `specweave init` | Bootstrap new project |
69
69
 
70
70
  **Plus more commands** (see `.claude/commands/`)
71
71
 
@@ -107,7 +107,7 @@ npm run install:agents
107
107
  │ └── ...
108
108
  ├── commands/ # Slash commands
109
109
  │ ├── create-increment.md
110
- │ ├── review-docs.md
110
+ │ ├── sync-docs.md
111
111
  │ └── ...
112
112
  └── hooks/ # Auto-update mechanisms
113
113
  ├── post-task-completion.sh
@@ -135,10 +135,10 @@ npm run install:agents
135
135
 
136
136
  ### Example 2: Review Documentation
137
137
 
138
- **User**: `/review-docs`
138
+ **User**: `/sync-docs`
139
139
 
140
140
  **What Happens** (Automatic):
141
- 1. ✅ Slash command loads `.claude/commands/review-docs.md`
141
+ 1. ✅ Slash command loads `.claude/commands/sync-docs.md`
142
142
  2. ✅ Reviews strategic docs (.specweave/docs/internal/strategy/)
143
143
  3. ✅ Compares against actual implementation
144
144
  4. ✅ Identifies gaps (undocumented features, outdated docs, tech debt)
@@ -206,15 +206,7 @@ Agents have separate context windows to prevent pollution of main conversation.
206
206
 
207
207
  Hooks run automatically on events:
208
208
 
209
- ```yaml
210
- # .specweave/config.yaml
211
- hooks:
212
- post_task_completion:
213
- enabled: true
214
- actions:
215
- - update_documentation
216
- - update_claude_md
217
- ```
209
+
218
210
 
219
211
  When task completes → hook fires → docs auto-update.
220
212
 
@@ -9,9 +9,9 @@
9
9
  */
10
10
 
11
11
  import * as path from 'path';
12
- import * as fs from 'fs-extra';
13
- import { AdapterBase } from '../adapter-base';
14
- import { AdapterOptions, AdapterFile } from '../adapter-interface';
12
+ import fs from 'fs-extra';
13
+ import { AdapterBase } from '../adapter-base.js';
14
+ import { AdapterOptions, AdapterFile } from '../adapter-interface.js';
15
15
 
16
16
  export class ClaudeAdapter extends AdapterBase {
17
17
  name = 'claude';
@@ -131,7 +131,7 @@ WHAT THIS PROVIDES:
131
131
 
132
132
  - Skills (Auto-Activating): specweave-detector, skill-router, context-loader, increment-planner
133
133
  - Agents (Specialized Roles): PM, Architect, DevOps, QA, Security, and 14 more
134
- - Slash Commands: /create-increment, /review-docs, /sync-github, /create-project
134
+ - Slash Commands: /specweave inc, /specweave do, /specweave validate, /specweave sync-github
135
135
  - Hooks (Auto-Update): post-task-completion, pre-implementation, docs-changed
136
136
 
137
137
  WHY CLAUDE CODE IS BEST: