specweave 0.1.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 (288) hide show
  1. package/INSTALL.md +848 -0
  2. package/LICENSE +21 -0
  3. package/README.md +675 -0
  4. package/SPECWEAVE.md +665 -0
  5. package/bin/install-agents.sh +57 -0
  6. package/bin/install-all.sh +49 -0
  7. package/bin/install-commands.sh +56 -0
  8. package/bin/install-skills.sh +57 -0
  9. package/bin/specweave.js +81 -0
  10. package/dist/adapters/adapter-base.d.ts +50 -0
  11. package/dist/adapters/adapter-base.d.ts.map +1 -0
  12. package/dist/adapters/adapter-base.js +146 -0
  13. package/dist/adapters/adapter-base.js.map +1 -0
  14. package/dist/adapters/adapter-interface.d.ts +108 -0
  15. package/dist/adapters/adapter-interface.d.ts.map +1 -0
  16. package/dist/adapters/adapter-interface.js +9 -0
  17. package/dist/adapters/adapter-interface.js.map +1 -0
  18. package/dist/adapters/claude/adapter.d.ts +54 -0
  19. package/dist/adapters/claude/adapter.d.ts.map +1 -0
  20. package/dist/adapters/claude/adapter.js +184 -0
  21. package/dist/adapters/claude/adapter.js.map +1 -0
  22. package/dist/adapters/copilot/adapter.d.ts +42 -0
  23. package/dist/adapters/copilot/adapter.d.ts.map +1 -0
  24. package/dist/adapters/copilot/adapter.js +239 -0
  25. package/dist/adapters/copilot/adapter.js.map +1 -0
  26. package/dist/adapters/cursor/adapter.d.ts +42 -0
  27. package/dist/adapters/cursor/adapter.d.ts.map +1 -0
  28. package/dist/adapters/cursor/adapter.js +297 -0
  29. package/dist/adapters/cursor/adapter.js.map +1 -0
  30. package/dist/adapters/generic/adapter.d.ts +40 -0
  31. package/dist/adapters/generic/adapter.d.ts.map +1 -0
  32. package/dist/adapters/generic/adapter.js +155 -0
  33. package/dist/adapters/generic/adapter.js.map +1 -0
  34. package/dist/cli/commands/init.d.ts +6 -0
  35. package/dist/cli/commands/init.d.ts.map +1 -0
  36. package/dist/cli/commands/init.js +247 -0
  37. package/dist/cli/commands/init.js.map +1 -0
  38. package/dist/cli/commands/install.d.ts +7 -0
  39. package/dist/cli/commands/install.d.ts.map +1 -0
  40. package/dist/cli/commands/install.js +160 -0
  41. package/dist/cli/commands/install.js.map +1 -0
  42. package/dist/cli/commands/list.d.ts +6 -0
  43. package/dist/cli/commands/list.d.ts.map +1 -0
  44. package/dist/cli/commands/list.js +154 -0
  45. package/dist/cli/commands/list.js.map +1 -0
  46. package/package.json +90 -0
  47. package/src/adapters/README.md +312 -0
  48. package/src/adapters/adapter-base.ts +146 -0
  49. package/src/adapters/adapter-interface.ts +120 -0
  50. package/src/adapters/claude/README.md +241 -0
  51. package/src/adapters/claude/adapter.ts +157 -0
  52. package/src/adapters/copilot/.github/copilot/instructions.md +376 -0
  53. package/src/adapters/copilot/README.md +200 -0
  54. package/src/adapters/copilot/adapter.ts +210 -0
  55. package/src/adapters/cursor/.cursor/context/docs-context.md +62 -0
  56. package/src/adapters/cursor/.cursor/context/increments-context.md +71 -0
  57. package/src/adapters/cursor/.cursor/context/strategy-context.md +73 -0
  58. package/src/adapters/cursor/.cursor/context/tests-context.md +89 -0
  59. package/src/adapters/cursor/.cursorrules +325 -0
  60. package/src/adapters/cursor/README.md +243 -0
  61. package/src/adapters/cursor/adapter.ts +268 -0
  62. package/src/adapters/generic/README.md +277 -0
  63. package/src/adapters/generic/SPECWEAVE-MANUAL.md +676 -0
  64. package/src/adapters/generic/adapter.ts +159 -0
  65. package/src/adapters/registry.yaml +126 -0
  66. package/src/agents/architect/AGENT.md +416 -0
  67. package/src/agents/devops/AGENT.md +1738 -0
  68. package/src/agents/docs-writer/AGENT.md +239 -0
  69. package/src/agents/performance/AGENT.md +228 -0
  70. package/src/agents/pm/AGENT.md +751 -0
  71. package/src/agents/qa-lead/AGENT.md +150 -0
  72. package/src/agents/security/AGENT.md +179 -0
  73. package/src/agents/sre/AGENT.md +582 -0
  74. package/src/agents/sre/modules/backend-diagnostics.md +481 -0
  75. package/src/agents/sre/modules/database-diagnostics.md +509 -0
  76. package/src/agents/sre/modules/infrastructure.md +561 -0
  77. package/src/agents/sre/modules/monitoring.md +439 -0
  78. package/src/agents/sre/modules/security-incidents.md +421 -0
  79. package/src/agents/sre/modules/ui-diagnostics.md +302 -0
  80. package/src/agents/sre/playbooks/01-high-cpu-usage.md +204 -0
  81. package/src/agents/sre/playbooks/02-database-deadlock.md +241 -0
  82. package/src/agents/sre/playbooks/03-memory-leak.md +252 -0
  83. package/src/agents/sre/playbooks/04-slow-api-response.md +269 -0
  84. package/src/agents/sre/playbooks/05-ddos-attack.md +293 -0
  85. package/src/agents/sre/playbooks/06-disk-full.md +314 -0
  86. package/src/agents/sre/playbooks/07-service-down.md +333 -0
  87. package/src/agents/sre/playbooks/08-data-corruption.md +337 -0
  88. package/src/agents/sre/playbooks/09-cascade-failure.md +430 -0
  89. package/src/agents/sre/playbooks/10-rate-limit-exceeded.md +464 -0
  90. package/src/agents/sre/scripts/health-check.sh +230 -0
  91. package/src/agents/sre/scripts/log-analyzer.py +213 -0
  92. package/src/agents/sre/scripts/metrics-collector.sh +294 -0
  93. package/src/agents/sre/scripts/trace-analyzer.js +257 -0
  94. package/src/agents/sre/templates/incident-report.md +249 -0
  95. package/src/agents/sre/templates/mitigation-plan.md +375 -0
  96. package/src/agents/sre/templates/post-mortem.md +418 -0
  97. package/src/agents/sre/templates/runbook-template.md +412 -0
  98. package/src/agents/tech-lead/AGENT.md +263 -0
  99. package/src/commands/add-tasks.md +176 -0
  100. package/src/commands/close-increment.md +347 -0
  101. package/src/commands/create-increment.md +223 -0
  102. package/src/commands/create-project.md +528 -0
  103. package/src/commands/generate-docs.md +623 -0
  104. package/src/commands/list-increments.md +180 -0
  105. package/src/commands/review-docs.md +331 -0
  106. package/src/commands/start-increment.md +139 -0
  107. package/src/commands/sync-github.md +115 -0
  108. package/src/commands/validate-increment.md +800 -0
  109. package/src/hooks/README.md +252 -0
  110. package/src/hooks/docs-changed.sh +59 -0
  111. package/src/hooks/human-input-required.sh +55 -0
  112. package/src/hooks/post-task-completion.sh +57 -0
  113. package/src/hooks/pre-implementation.sh +47 -0
  114. package/src/skills/ado-sync/README.md +449 -0
  115. package/src/skills/ado-sync/SKILL.md +245 -0
  116. package/src/skills/ado-sync/test-cases/test-1.yaml +9 -0
  117. package/src/skills/ado-sync/test-cases/test-2.yaml +8 -0
  118. package/src/skills/ado-sync/test-cases/test-3.yaml +9 -0
  119. package/src/skills/bmad-method-expert/SKILL.md +628 -0
  120. package/src/skills/bmad-method-expert/scripts/analyze-project.js +318 -0
  121. package/src/skills/bmad-method-expert/scripts/check-setup.js +208 -0
  122. package/src/skills/bmad-method-expert/scripts/generate-template.js +1149 -0
  123. package/src/skills/bmad-method-expert/scripts/validate-documents.js +340 -0
  124. package/src/skills/bmad-method-expert/test-cases/test-1-placeholder.yaml +12 -0
  125. package/src/skills/bmad-method-expert/test-cases/test-2-placeholder.yaml +12 -0
  126. package/src/skills/bmad-method-expert/test-cases/test-3-placeholder.yaml +12 -0
  127. package/src/skills/brownfield-analyzer/SKILL.md +523 -0
  128. package/src/skills/brownfield-analyzer/test-cases/test-1-basic-analysis.yaml +48 -0
  129. package/src/skills/brownfield-analyzer/test-cases/test-2-placeholder.yaml +12 -0
  130. package/src/skills/brownfield-analyzer/test-cases/test-3-placeholder.yaml +12 -0
  131. package/src/skills/brownfield-onboarder/SKILL.md +625 -0
  132. package/src/skills/brownfield-onboarder/test-cases/test-1-placeholder.yaml +12 -0
  133. package/src/skills/brownfield-onboarder/test-cases/test-2-placeholder.yaml +12 -0
  134. package/src/skills/brownfield-onboarder/test-cases/test-3-placeholder.yaml +12 -0
  135. package/src/skills/calendar-system/test-cases/test-1-placeholder.yaml +12 -0
  136. package/src/skills/calendar-system/test-cases/test-2-placeholder.yaml +12 -0
  137. package/src/skills/calendar-system/test-cases/test-3-placeholder.yaml +12 -0
  138. package/src/skills/context-loader/SKILL.md +734 -0
  139. package/src/skills/context-loader/test-cases/test-1-basic-loading.yaml +39 -0
  140. package/src/skills/context-loader/test-cases/test-2-token-budget-exceeded.yaml +44 -0
  141. package/src/skills/context-loader/test-cases/test-3-section-anchors.yaml +45 -0
  142. package/src/skills/context-optimizer/SKILL.md +618 -0
  143. package/src/skills/context-optimizer/test-cases/test-1-bug-fix-narrow.yaml +97 -0
  144. package/src/skills/context-optimizer/test-cases/test-2-feature-focused.yaml +109 -0
  145. package/src/skills/context-optimizer/test-cases/test-3-architecture-broad.yaml +98 -0
  146. package/src/skills/cost-optimizer/SKILL.md +190 -0
  147. package/src/skills/cost-optimizer/test-cases/test-1-basic-comparison.yaml +75 -0
  148. package/src/skills/cost-optimizer/test-cases/test-2-budget-constraint.yaml +52 -0
  149. package/src/skills/cost-optimizer/test-cases/test-3-scale-requirement.yaml +63 -0
  150. package/src/skills/cost-optimizer/test-results/README.md +46 -0
  151. package/src/skills/design-system-architect/SKILL.md +107 -0
  152. package/src/skills/design-system-architect/test-cases/test-1-token-structure.yaml +23 -0
  153. package/src/skills/design-system-architect/test-cases/test-2-component-hierarchy.yaml +24 -0
  154. package/src/skills/design-system-architect/test-cases/test-3-accessibility-checklist.yaml +23 -0
  155. package/src/skills/diagrams-architect/SKILL.md +763 -0
  156. package/src/skills/diagrams-generator/SKILL.md +25 -0
  157. package/src/skills/diagrams-generator/test-cases/test-1.yaml +9 -0
  158. package/src/skills/diagrams-generator/test-cases/test-2.yaml +9 -0
  159. package/src/skills/diagrams-generator/test-cases/test-3.yaml +8 -0
  160. package/src/skills/docs-updater/README.md +48 -0
  161. package/src/skills/docs-updater/test-cases/test-1-placeholder.yaml +12 -0
  162. package/src/skills/docs-updater/test-cases/test-2-placeholder.yaml +12 -0
  163. package/src/skills/docs-updater/test-cases/test-3-placeholder.yaml +12 -0
  164. package/src/skills/dotnet-backend/SKILL.md +250 -0
  165. package/src/skills/e2e-playwright/README.md +506 -0
  166. package/src/skills/e2e-playwright/SKILL.md +457 -0
  167. package/src/skills/e2e-playwright/execute.js +373 -0
  168. package/src/skills/e2e-playwright/lib/utils.js +514 -0
  169. package/src/skills/e2e-playwright/package.json +33 -0
  170. package/src/skills/e2e-playwright/test-cases/TC-001-basic-navigation.yaml +54 -0
  171. package/src/skills/e2e-playwright/test-cases/TC-002-form-interaction.yaml +64 -0
  172. package/src/skills/e2e-playwright/test-cases/TC-003-specweave-integration.yaml +74 -0
  173. package/src/skills/e2e-playwright/test-cases/TC-004-accessibility-check.yaml +98 -0
  174. package/src/skills/figma-designer/SKILL.md +149 -0
  175. package/src/skills/figma-implementer/SKILL.md +148 -0
  176. package/src/skills/figma-mcp-connector/SKILL.md +136 -0
  177. package/src/skills/figma-mcp-connector/test-cases/test-1-read-file-desktop.yaml +22 -0
  178. package/src/skills/figma-mcp-connector/test-cases/test-2-read-file-framelink.yaml +21 -0
  179. package/src/skills/figma-mcp-connector/test-cases/test-3-error-handling.yaml +18 -0
  180. package/src/skills/figma-to-code/SKILL.md +128 -0
  181. package/src/skills/figma-to-code/test-cases/test-1-token-generation.yaml +29 -0
  182. package/src/skills/figma-to-code/test-cases/test-2-component-generation.yaml +27 -0
  183. package/src/skills/figma-to-code/test-cases/test-3-typescript-generation.yaml +28 -0
  184. package/src/skills/frontend/SKILL.md +177 -0
  185. package/src/skills/github-sync/SKILL.md +252 -0
  186. package/src/skills/github-sync/test-cases/test-1-placeholder.yaml +12 -0
  187. package/src/skills/github-sync/test-cases/test-2-placeholder.yaml +12 -0
  188. package/src/skills/github-sync/test-cases/test-3-placeholder.yaml +12 -0
  189. package/src/skills/hetzner-provisioner/README.md +308 -0
  190. package/src/skills/hetzner-provisioner/SKILL.md +251 -0
  191. package/src/skills/hetzner-provisioner/test-cases/test-1-basic-provision.yaml +71 -0
  192. package/src/skills/hetzner-provisioner/test-cases/test-2-postgres-provision.yaml +85 -0
  193. package/src/skills/hetzner-provisioner/test-cases/test-3-ssl-config.yaml +126 -0
  194. package/src/skills/hetzner-provisioner/test-results/README.md +259 -0
  195. package/src/skills/increment-planner/SKILL.md +889 -0
  196. package/src/skills/increment-planner/scripts/feature-utils.js +250 -0
  197. package/src/skills/increment-planner/test-cases/test-1-basic-feature.yaml +27 -0
  198. package/src/skills/increment-planner/test-cases/test-2-complex-feature.yaml +30 -0
  199. package/src/skills/increment-planner/test-cases/test-3-auto-numbering.yaml +24 -0
  200. package/src/skills/increment-quality-judge/SKILL.md +566 -0
  201. package/src/skills/increment-quality-judge/test-cases/test-1-good-spec.yaml +95 -0
  202. package/src/skills/increment-quality-judge/test-cases/test-2-poor-spec.yaml +108 -0
  203. package/src/skills/increment-quality-judge/test-cases/test-3-export-suggestions.yaml +87 -0
  204. package/src/skills/jira-sync/README.md +328 -0
  205. package/src/skills/jira-sync/SKILL.md +209 -0
  206. package/src/skills/jira-sync/test-cases/test-1.yaml +9 -0
  207. package/src/skills/jira-sync/test-cases/test-2.yaml +9 -0
  208. package/src/skills/jira-sync/test-cases/test-3.yaml +10 -0
  209. package/src/skills/nextjs/SKILL.md +176 -0
  210. package/src/skills/nodejs-backend/SKILL.md +181 -0
  211. package/src/skills/notification-system/test-cases/test-1-placeholder.yaml +12 -0
  212. package/src/skills/notification-system/test-cases/test-2-placeholder.yaml +12 -0
  213. package/src/skills/notification-system/test-cases/test-3-placeholder.yaml +12 -0
  214. package/src/skills/python-backend/SKILL.md +226 -0
  215. package/src/skills/role-orchestrator/README.md +197 -0
  216. package/src/skills/role-orchestrator/SKILL.md +1184 -0
  217. package/src/skills/role-orchestrator/test-cases/test-1-simple-product.yaml +98 -0
  218. package/src/skills/role-orchestrator/test-cases/test-2-quality-gate-failure.yaml +73 -0
  219. package/src/skills/role-orchestrator/test-cases/test-3-security-workflow.yaml +121 -0
  220. package/src/skills/role-orchestrator/test-cases/test-4-parallel-execution.yaml +145 -0
  221. package/src/skills/role-orchestrator/test-cases/test-5-feedback-loops.yaml +149 -0
  222. package/src/skills/skill-creator/LICENSE.txt +202 -0
  223. package/src/skills/skill-creator/SKILL.md +209 -0
  224. package/src/skills/skill-creator/scripts/init_skill.py +303 -0
  225. package/src/skills/skill-creator/scripts/package_skill.py +110 -0
  226. package/src/skills/skill-creator/scripts/quick_validate.py +65 -0
  227. package/src/skills/skill-creator/test-cases/test-1-placeholder.yaml +12 -0
  228. package/src/skills/skill-creator/test-cases/test-2-placeholder.yaml +12 -0
  229. package/src/skills/skill-creator/test-cases/test-3-placeholder.yaml +12 -0
  230. package/src/skills/skill-router/SKILL.md +497 -0
  231. package/src/skills/skill-router/test-cases/test-1-basic-routing.yaml +33 -0
  232. package/src/skills/skill-router/test-cases/test-2-ambiguous-request.yaml +42 -0
  233. package/src/skills/skill-router/test-cases/test-3-nested-orchestration.yaml +50 -0
  234. package/src/skills/spec-driven-brainstorming/README.md +264 -0
  235. package/src/skills/spec-driven-brainstorming/SKILL.md +439 -0
  236. package/src/skills/spec-driven-brainstorming/test-cases/TC-001-simple-idea-to-design.yaml +148 -0
  237. package/src/skills/spec-driven-brainstorming/test-cases/TC-002-complex-ultrathink-design.yaml +190 -0
  238. package/src/skills/spec-driven-brainstorming/test-cases/TC-003-unclear-requirements-socratic.yaml +233 -0
  239. package/src/skills/spec-driven-debugging/README.md +479 -0
  240. package/src/skills/spec-driven-debugging/SKILL.md +652 -0
  241. package/src/skills/spec-driven-debugging/test-cases/TC-001-simple-auth-bug.yaml +212 -0
  242. package/src/skills/spec-driven-debugging/test-cases/TC-002-race-condition-ultrathink.yaml +461 -0
  243. package/src/skills/spec-driven-debugging/test-cases/TC-003-brownfield-missing-spec.yaml +366 -0
  244. package/src/skills/spec-kit-expert/SKILL.md +1012 -0
  245. package/src/skills/spec-kit-expert/test-cases/test-1-placeholder.yaml +12 -0
  246. package/src/skills/spec-kit-expert/test-cases/test-2-placeholder.yaml +12 -0
  247. package/src/skills/spec-kit-expert/test-cases/test-3-placeholder.yaml +12 -0
  248. package/src/skills/specweave-ado-mapper/SKILL.md +501 -0
  249. package/src/skills/specweave-detector/SKILL.md +420 -0
  250. package/src/skills/specweave-detector/test-cases/test-1-basic-detection.yaml +37 -0
  251. package/src/skills/specweave-detector/test-cases/test-2-missing-config.yaml +37 -0
  252. package/src/skills/specweave-detector/test-cases/test-3-non-specweave-project.yaml +34 -0
  253. package/src/skills/specweave-jira-mapper/SKILL.md +500 -0
  254. package/src/skills/stripe-integrator/test-cases/test-1-placeholder.yaml +12 -0
  255. package/src/skills/stripe-integrator/test-cases/test-2-placeholder.yaml +12 -0
  256. package/src/skills/stripe-integrator/test-cases/test-3-placeholder.yaml +12 -0
  257. package/src/skills/task-builder/README.md +90 -0
  258. package/src/skills/task-builder/test-cases/test-1-placeholder.yaml +12 -0
  259. package/src/skills/task-builder/test-cases/test-2-placeholder.yaml +12 -0
  260. package/src/skills/task-builder/test-cases/test-3-placeholder.yaml +12 -0
  261. package/src/templates/.env.example +144 -0
  262. package/src/templates/.gitignore.template +81 -0
  263. package/src/templates/CLAUDE.md.template +383 -0
  264. package/src/templates/README.md.template +240 -0
  265. package/src/templates/config.yaml +333 -0
  266. package/src/templates/docs/README.md +124 -0
  267. package/src/templates/docs/adr-template.md +118 -0
  268. package/src/templates/docs/hld-template.md +220 -0
  269. package/src/templates/docs/lld-template.md +580 -0
  270. package/src/templates/docs/prd-template.md +132 -0
  271. package/src/templates/docs/rfc-template.md +229 -0
  272. package/src/templates/docs/runbook-template.md +298 -0
  273. package/src/templates/environments/minimal/.env.production +16 -0
  274. package/src/templates/environments/minimal/README.md +54 -0
  275. package/src/templates/environments/minimal/deploy-production.yml +52 -0
  276. package/src/templates/environments/progressive/.env.qa +28 -0
  277. package/src/templates/environments/progressive/README.md +129 -0
  278. package/src/templates/environments/progressive/deploy-production.yml +93 -0
  279. package/src/templates/environments/progressive/deploy-qa.yml +62 -0
  280. package/src/templates/environments/progressive/deploy-staging.yml +67 -0
  281. package/src/templates/environments/standard/.env.development +20 -0
  282. package/src/templates/environments/standard/.env.production +30 -0
  283. package/src/templates/environments/standard/.env.staging +23 -0
  284. package/src/templates/environments/standard/README.md +97 -0
  285. package/src/templates/environments/standard/deploy-production.yml +68 -0
  286. package/src/templates/environments/standard/deploy-staging.yml +61 -0
  287. package/src/templates/environments/standard/docker-compose.yml +43 -0
  288. package/src/templates/increment-metadata-template.yaml +138 -0
@@ -0,0 +1,57 @@
1
+ #!/bin/bash
2
+ # Install SpecWeave agents to .claude/agents/
3
+ #
4
+ # Usage:
5
+ # bash bin/install-agents.sh # Install to .claude/agents/ (project)
6
+ # bash bin/install-agents.sh --global # Install to ~/.claude/agents/ (global)
7
+
8
+ set -e
9
+
10
+ AGENTS_SRC="src/agents"
11
+ AGENTS_DEST=".claude/agents"
12
+
13
+ # Parse arguments
14
+ if [ "$1" = "--global" ]; then
15
+ AGENTS_DEST="$HOME/.claude/agents"
16
+ echo "Installing agents globally to $AGENTS_DEST"
17
+ else
18
+ echo "Installing agents to project: $AGENTS_DEST"
19
+ fi
20
+
21
+ # Create destination if not exists
22
+ mkdir -p "$AGENTS_DEST"
23
+
24
+ # Check if source exists
25
+ if [ ! -d "$AGENTS_SRC" ]; then
26
+ echo "❌ Error: $AGENTS_SRC directory not found"
27
+ exit 1
28
+ fi
29
+
30
+ # Count agents
31
+ agent_count=0
32
+
33
+ # Copy all agents
34
+ for agent in "$AGENTS_SRC"/*; do
35
+ if [ -d "$agent" ]; then
36
+ agent_name=$(basename "$agent")
37
+
38
+ # Check if agent has AGENT.md or README.md
39
+ if [ -f "$agent/AGENT.md" ] || [ -f "$agent/README.md" ]; then
40
+ echo " 📦 Installing agent: $agent_name"
41
+ # Create destination directory and copy contents (not the folder itself)
42
+ mkdir -p "$AGENTS_DEST/$agent_name"
43
+ cp -r "$agent"/* "$AGENTS_DEST/$agent_name/"
44
+ agent_count=$((agent_count + 1))
45
+ else
46
+ echo " ⚠️ Skipping $agent_name (no AGENT.md or README.md)"
47
+ fi
48
+ fi
49
+ done
50
+
51
+ echo ""
52
+ echo "✅ Installed $agent_count agents to $AGENTS_DEST"
53
+ echo ""
54
+ echo "Agents installed:"
55
+ ls -1 "$AGENTS_DEST" | sed 's/^/ - /'
56
+ echo ""
57
+ echo "To use agents, invoke via Task tool with subagent_type parameter"
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ # Install all SpecWeave agents, skills, and commands
3
+ #
4
+ # Usage:
5
+ # bash bin/install-all.sh # Install to .claude/ (project)
6
+ # bash bin/install-all.sh --global # Install to ~/.claude/ (global)
7
+
8
+ set -e
9
+
10
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
11
+ echo " SpecWeave Installation"
12
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
13
+ echo ""
14
+
15
+ # Pass arguments to subscripts
16
+ INSTALL_MODE="$1"
17
+
18
+ # Install agents
19
+ echo "📦 Installing Agents..."
20
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
21
+ bash bin/install-agents.sh $INSTALL_MODE
22
+
23
+ echo ""
24
+
25
+ # Install skills
26
+ echo "🔧 Installing Skills..."
27
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
28
+ bash bin/install-skills.sh $INSTALL_MODE
29
+
30
+ echo ""
31
+
32
+ # Install commands (only project-local, not global)
33
+ if [ "$INSTALL_MODE" != "--global" ]; then
34
+ echo "⚡ Installing Slash Commands..."
35
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
36
+ bash bin/install-commands.sh
37
+ echo ""
38
+ fi
39
+
40
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
41
+ echo "✅ SpecWeave installation complete!"
42
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
43
+ echo ""
44
+ echo "Next steps:"
45
+ echo " 1. Restart Claude Code to load agents, skills, and commands"
46
+ echo " 2. Try: 'Create a product vision for X' (activates PM agent)"
47
+ echo " 3. Try: 'Plan implementation for feature Y' (activates increment-planner skill)"
48
+ echo " 4. Try: '/create-project' to bootstrap a new project"
49
+ echo ""
@@ -0,0 +1,56 @@
1
+ #!/bin/bash
2
+
3
+ # SpecWeave Commands Installation Script
4
+ # Installs all slash commands from src/templates/commands/ to .claude/commands/
5
+
6
+ set -e
7
+
8
+ COMMANDS_SRC="src/templates/commands"
9
+ COMMANDS_DEST=".claude/commands"
10
+
11
+ echo "════════════════════════════════════════════════════════"
12
+ echo " Installing SpecWeave Slash Commands"
13
+ echo "════════════════════════════════════════════════════════"
14
+ echo ""
15
+
16
+ # Create destination directory
17
+ mkdir -p "$COMMANDS_DEST"
18
+
19
+ # Copy all .md files from templates/commands/
20
+ installed_count=0
21
+
22
+ for cmd_file in "$COMMANDS_SRC"/*.md; do
23
+ if [ -f "$cmd_file" ]; then
24
+ # Extract command name (filename without .md)
25
+ cmd_name=$(basename "$cmd_file" .md)
26
+
27
+ # Copy to .claude/commands/
28
+ cp "$cmd_file" "$COMMANDS_DEST/${cmd_name}.md"
29
+
30
+ echo "✅ Installed: /$cmd_name"
31
+ ((installed_count++))
32
+ fi
33
+ done
34
+
35
+ echo ""
36
+ echo "════════════════════════════════════════════════════════"
37
+ echo " Installation Complete"
38
+ echo "════════════════════════════════════════════════════════"
39
+ echo ""
40
+ echo "Installed $installed_count commands:"
41
+ echo ""
42
+
43
+ # List all installed commands
44
+ ls -1 "$COMMANDS_DEST" | sed 's/.md$//' | sed 's/^/ \//'
45
+
46
+ echo ""
47
+ echo "Usage: Type /command-name in Claude Code"
48
+ echo ""
49
+ echo "Examples:"
50
+ echo " /create-project"
51
+ echo " /create-increment \"user authentication\""
52
+ echo " /review-docs"
53
+ echo " /sync-github"
54
+ echo ""
55
+
56
+ exit 0
@@ -0,0 +1,57 @@
1
+ #!/bin/bash
2
+ # Install SpecWeave skills to .claude/skills/
3
+ #
4
+ # Usage:
5
+ # bash bin/install-skills.sh # Install to .claude/skills/ (project)
6
+ # bash bin/install-skills.sh --global # Install to ~/.claude/skills/ (global)
7
+
8
+ set -e
9
+
10
+ SKILLS_SRC="src/skills"
11
+ SKILLS_DEST=".claude/skills"
12
+
13
+ # Parse arguments
14
+ if [ "$1" = "--global" ]; then
15
+ SKILLS_DEST="$HOME/.claude/skills"
16
+ echo "Installing skills globally to $SKILLS_DEST"
17
+ else
18
+ echo "Installing skills to project: $SKILLS_DEST"
19
+ fi
20
+
21
+ # Create destination if not exists
22
+ mkdir -p "$SKILLS_DEST"
23
+
24
+ # Check if source exists
25
+ if [ ! -d "$SKILLS_SRC" ]; then
26
+ echo "❌ Error: $SKILLS_SRC directory not found"
27
+ exit 1
28
+ fi
29
+
30
+ # Count skills
31
+ skill_count=0
32
+
33
+ # Copy all skills
34
+ for skill in "$SKILLS_SRC"/*; do
35
+ if [ -d "$skill" ]; then
36
+ skill_name=$(basename "$skill")
37
+
38
+ # Check if skill has SKILL.md
39
+ if [ -f "$skill/SKILL.md" ]; then
40
+ echo " 🔧 Installing skill: $skill_name"
41
+ # Create destination directory and copy contents (not the folder itself)
42
+ mkdir -p "$SKILLS_DEST/$skill_name"
43
+ cp -r "$skill"/* "$SKILLS_DEST/$skill_name/"
44
+ skill_count=$((skill_count + 1))
45
+ else
46
+ echo " ⚠️ Skipping $skill_name (no SKILL.md)"
47
+ fi
48
+ fi
49
+ done
50
+
51
+ echo ""
52
+ echo "✅ Installed $skill_count skills to $SKILLS_DEST"
53
+ echo ""
54
+ echo "Skills installed:"
55
+ ls -1 "$SKILLS_DEST" | sed 's/^/ - /'
56
+ echo ""
57
+ echo "Skills activate automatically based on their descriptions"
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * SpecWeave CLI
5
+ *
6
+ * Entry point for the SpecWeave command-line interface.
7
+ * Provides commands for initializing projects, creating increments, and managing skills.
8
+ */
9
+
10
+ const { Command } = require('commander');
11
+ const chalk = require('chalk');
12
+ const package = require('../package.json');
13
+
14
+ const program = new Command();
15
+
16
+ program
17
+ .name('specweave')
18
+ .description('Spec-Driven Development framework with AI-powered autonomous agents')
19
+ .version(package.version);
20
+
21
+ // Init command - Create new SpecWeave project
22
+ program
23
+ .command('init [project-name]')
24
+ .description('Initialize a new SpecWeave project')
25
+ .option('-t, --template <type>', 'Project template (saas, api, fullstack)', 'saas')
26
+ .action(async (projectName, options) => {
27
+ const { initCommand } = require('../dist/cli/commands/init');
28
+ await initCommand(projectName, options);
29
+ });
30
+
31
+ // Increment commands (TODO: Implement in future versions)
32
+ // program
33
+ // .command('increment <action> [name]')
34
+ // .description('Manage increments (create, list, status)')
35
+ // .option('-p, --priority <level>', 'Priority level (P1, P2, P3)', 'P1')
36
+ // .action(async (action, name, options) => {
37
+ // const { incrementCommand } = require('../dist/cli/commands/increment');
38
+ // await incrementCommand(action, name, options);
39
+ // });
40
+
41
+ // Install command - Install agents/skills
42
+ program
43
+ .command('install [component-name]')
44
+ .description('Install agents/skills to .claude/ or ~/.claude/')
45
+ .option('-g, --global', 'Install globally to ~/.claude/')
46
+ .option('-l, --local', 'Install locally to .claude/ (default)')
47
+ .action(async (componentName, options) => {
48
+ const { installCommand } = require('../dist/cli/commands/install');
49
+ await installCommand(componentName, options);
50
+ });
51
+
52
+ // List command - List available/installed components
53
+ program
54
+ .command('list')
55
+ .description('List available and installed components')
56
+ .option('--installed', 'Show only installed components')
57
+ .action(async (options) => {
58
+ const { listCommand } = require('../dist/cli/commands/list');
59
+ await listCommand(options);
60
+ });
61
+
62
+ // Help text
63
+ program.on('--help', () => {
64
+ console.log('');
65
+ console.log('Examples:');
66
+ console.log(' $ specweave init my-saas # Create new project');
67
+ console.log(' $ specweave install pm --local # Install PM agent locally');
68
+ console.log(' $ specweave install --global # Install all (interactive)');
69
+ console.log(' $ specweave list # List all available components');
70
+ console.log(' $ specweave list --installed # Show installed components');
71
+ console.log('');
72
+ console.log('For more information, visit: https://github.com/specweave/specweave');
73
+ });
74
+
75
+ // Parse arguments
76
+ program.parse(process.argv);
77
+
78
+ // Show help if no command specified
79
+ if (!process.argv.slice(2).length) {
80
+ program.outputHelp();
81
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Base Adapter Class
3
+ *
4
+ * Provides common functionality for all adapters.
5
+ * Concrete adapters extend this class and implement tool-specific logic.
6
+ */
7
+ import { IAdapter, AdapterOptions, RequirementsResult, AdapterFile, AutomationLevel } from './adapter-interface';
8
+ export declare abstract class AdapterBase implements IAdapter {
9
+ abstract name: string;
10
+ abstract description: string;
11
+ abstract automationLevel: AutomationLevel;
12
+ /**
13
+ * Default detection - override in concrete adapters
14
+ */
15
+ detect(): Promise<boolean>;
16
+ /**
17
+ * Check common requirements (Node.js, Git)
18
+ * Concrete adapters can override to add tool-specific checks
19
+ */
20
+ checkRequirements(): Promise<RequirementsResult>;
21
+ /**
22
+ * Get files to install - must be implemented by concrete adapters
23
+ */
24
+ abstract getFiles(): AdapterFile[];
25
+ /**
26
+ * Install adapter files to project
27
+ */
28
+ install(options: AdapterOptions): Promise<void>;
29
+ /**
30
+ * Post-installation actions - can be overridden by concrete adapters
31
+ */
32
+ postInstall(options: AdapterOptions): Promise<void>;
33
+ /**
34
+ * Get usage instructions - must be implemented by concrete adapters
35
+ */
36
+ abstract getInstructions(): string;
37
+ /**
38
+ * Helper: Check if a command exists in PATH
39
+ */
40
+ protected commandExists(command: string): Promise<boolean>;
41
+ /**
42
+ * Helper: Check if a file exists
43
+ */
44
+ protected fileExists(filePath: string): Promise<boolean>;
45
+ /**
46
+ * Helper: Read template file and replace variables
47
+ */
48
+ protected readTemplate(templatePath: string, variables: Record<string, string>): Promise<string>;
49
+ }
50
+ //# sourceMappingURL=adapter-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-base.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter-base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAE7B,8BAAsB,WAAY,YAAW,QAAQ;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAE1C;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA2BtD;;OAEG;IACH,QAAQ,CAAC,QAAQ,IAAI,WAAW,EAAE;IAElC;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBrD;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD;;OAEG;IACH,QAAQ,CAAC,eAAe,IAAI,MAAM;IAElC;;OAEG;cACa,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUhE;;OAEG;cACa,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9D;;OAEG;cACa,YAAY,CAC1B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC;CAUnB"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /**
3
+ * Base Adapter Class
4
+ *
5
+ * Provides common functionality for all adapters.
6
+ * Concrete adapters extend this class and implement tool-specific logic.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.AdapterBase = void 0;
43
+ const fs = __importStar(require("fs-extra"));
44
+ const path = __importStar(require("path"));
45
+ class AdapterBase {
46
+ /**
47
+ * Default detection - override in concrete adapters
48
+ */
49
+ async detect() {
50
+ return false;
51
+ }
52
+ /**
53
+ * Check common requirements (Node.js, Git)
54
+ * Concrete adapters can override to add tool-specific checks
55
+ */
56
+ async checkRequirements() {
57
+ const result = {
58
+ met: true,
59
+ missing: [],
60
+ warnings: []
61
+ };
62
+ // Check Node.js version
63
+ const nodeVersion = process.version;
64
+ const majorVersion = parseInt(nodeVersion.split('.')[0].slice(1));
65
+ if (majorVersion < 18) {
66
+ result.met = false;
67
+ result.missing.push(`Node.js >= 18.0.0 (current: ${nodeVersion})`);
68
+ }
69
+ // Check Git
70
+ try {
71
+ const { execSync } = require('child_process');
72
+ execSync('git --version', { stdio: 'ignore' });
73
+ }
74
+ catch (error) {
75
+ result.warnings.push('Git not found - version control features may not work');
76
+ }
77
+ return result;
78
+ }
79
+ /**
80
+ * Install adapter files to project
81
+ */
82
+ async install(options) {
83
+ const files = this.getFiles();
84
+ const adapterSourceDir = path.join(__dirname, this.name);
85
+ console.log(`\n📦 Installing ${this.name} adapter files...`);
86
+ for (const file of files) {
87
+ const sourcePath = path.join(adapterSourceDir, file.sourcePath);
88
+ const targetPath = path.join(options.projectPath, file.targetPath);
89
+ // Ensure target directory exists
90
+ await fs.ensureDir(path.dirname(targetPath));
91
+ // Copy file
92
+ if (await fs.pathExists(sourcePath)) {
93
+ await fs.copy(sourcePath, targetPath);
94
+ console.log(` ✅ ${file.targetPath} - ${file.description}`);
95
+ }
96
+ else {
97
+ console.warn(` ⚠️ Source file not found: ${sourcePath}`);
98
+ }
99
+ }
100
+ }
101
+ /**
102
+ * Post-installation actions - can be overridden by concrete adapters
103
+ */
104
+ async postInstall(options) {
105
+ // Default: Display instructions
106
+ console.log('\n' + this.getInstructions());
107
+ }
108
+ /**
109
+ * Helper: Check if a command exists in PATH
110
+ */
111
+ async commandExists(command) {
112
+ try {
113
+ const { execSync } = require('child_process');
114
+ execSync(`which ${command}`, { stdio: 'ignore' });
115
+ return true;
116
+ }
117
+ catch (error) {
118
+ return false;
119
+ }
120
+ }
121
+ /**
122
+ * Helper: Check if a file exists
123
+ */
124
+ async fileExists(filePath) {
125
+ try {
126
+ await fs.access(filePath);
127
+ return true;
128
+ }
129
+ catch (error) {
130
+ return false;
131
+ }
132
+ }
133
+ /**
134
+ * Helper: Read template file and replace variables
135
+ */
136
+ async readTemplate(templatePath, variables) {
137
+ let content = await fs.readFile(templatePath, 'utf-8');
138
+ // Replace all {{variable}} with actual values
139
+ for (const [key, value] of Object.entries(variables)) {
140
+ content = content.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), value);
141
+ }
142
+ return content;
143
+ }
144
+ }
145
+ exports.AdapterBase = AdapterBase;
146
+ //# sourceMappingURL=adapter-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-base.js","sourceRoot":"","sources":["../../src/adapters/adapter-base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Adapter Interface for Multi-Tool Support
3
+ *
4
+ * Defines the contract that all SpecWeave adapters must implement.
5
+ * Enables SpecWeave to work with ANY AI coding tool (Claude, Cursor, Copilot, etc.)
6
+ */
7
+ export interface AdapterOptions {
8
+ projectPath: string;
9
+ projectName: string;
10
+ techStack?: {
11
+ language: string;
12
+ framework?: string;
13
+ };
14
+ docsApproach?: 'comprehensive' | 'incremental';
15
+ }
16
+ export interface RequirementsResult {
17
+ met: boolean;
18
+ missing: string[];
19
+ warnings: string[];
20
+ }
21
+ export interface AdapterFile {
22
+ sourcePath: string;
23
+ targetPath: string;
24
+ description: string;
25
+ }
26
+ export type AutomationLevel = 'full' | 'semi' | 'basic' | 'manual';
27
+ /**
28
+ * Base Adapter Interface
29
+ *
30
+ * All adapters (Claude, Cursor, Copilot, Generic) must implement this interface.
31
+ */
32
+ export interface IAdapter {
33
+ /**
34
+ * Adapter name (e.g., 'claude', 'cursor', 'copilot', 'generic')
35
+ */
36
+ name: string;
37
+ /**
38
+ * Human-readable description of what this adapter provides
39
+ */
40
+ description: string;
41
+ /**
42
+ * Automation level this adapter provides
43
+ * - full: Complete automation (skills, agents, hooks auto-activate)
44
+ * - semi: Semi-automated (context shortcuts, multi-file editing)
45
+ * - basic: Basic automation (workspace instructions, suggestions)
46
+ * - manual: Manual workflow (step-by-step guide)
47
+ */
48
+ automationLevel: AutomationLevel;
49
+ /**
50
+ * Detect if this adapter's tool is present in the environment
51
+ *
52
+ * Examples:
53
+ * - Claude: Check for Claude Code CLI
54
+ * - Cursor: Check for .cursor/ directory or Cursor process
55
+ * - Copilot: Check for .github/copilot/ or Copilot extension
56
+ *
57
+ * @returns Promise<boolean> True if tool detected
58
+ */
59
+ detect(): Promise<boolean>;
60
+ /**
61
+ * Check if system requirements are met for this adapter
62
+ *
63
+ * Examples:
64
+ * - Node.js version >= 18
65
+ * - Git installed
66
+ * - Tool-specific requirements
67
+ *
68
+ * @returns Promise<RequirementsResult> Requirements check result
69
+ */
70
+ checkRequirements(): Promise<RequirementsResult>;
71
+ /**
72
+ * Get list of files this adapter will install
73
+ *
74
+ * @returns AdapterFile[] Array of files to install
75
+ */
76
+ getFiles(): AdapterFile[];
77
+ /**
78
+ * Install this adapter to a project
79
+ *
80
+ * Creates tool-specific files (e.g., .cursorrules, .github/copilot/instructions.md)
81
+ * Installs relevant skills/agents if applicable
82
+ *
83
+ * @param options Installation options
84
+ * @returns Promise<void>
85
+ */
86
+ install(options: AdapterOptions): Promise<void>;
87
+ /**
88
+ * Post-installation actions
89
+ *
90
+ * Examples:
91
+ * - Create symlinks
92
+ * - Update config files
93
+ * - Display setup instructions to user
94
+ *
95
+ * @param options Installation options
96
+ * @returns Promise<void>
97
+ */
98
+ postInstall(options: AdapterOptions): Promise<void>;
99
+ /**
100
+ * Get human-readable instructions for using this adapter
101
+ *
102
+ * Displayed to user after installation
103
+ *
104
+ * @returns string Markdown-formatted instructions
105
+ */
106
+ getInstructions(): string;
107
+ }
108
+ //# sourceMappingURL=adapter-interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-interface.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter-interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,YAAY,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC;CAChD;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnE;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;;;OAMG;IACH,eAAe,EAAE,eAAe,CAAC;IAEjC;;;;;;;;;OASG;IACH,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3B;;;;;;;;;OASG;IACH,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEjD;;;;OAIG;IACH,QAAQ,IAAI,WAAW,EAAE,CAAC;IAE1B;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;;;;;;;;OAUG;IACH,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD;;;;;;OAMG;IACH,eAAe,IAAI,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Adapter Interface for Multi-Tool Support
4
+ *
5
+ * Defines the contract that all SpecWeave adapters must implement.
6
+ * Enables SpecWeave to work with ANY AI coding tool (Claude, Cursor, Copilot, etc.)
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=adapter-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-interface.js","sourceRoot":"","sources":["../../src/adapters/adapter-interface.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}