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.
- package/INSTALL.md +848 -0
- package/LICENSE +21 -0
- package/README.md +675 -0
- package/SPECWEAVE.md +665 -0
- package/bin/install-agents.sh +57 -0
- package/bin/install-all.sh +49 -0
- package/bin/install-commands.sh +56 -0
- package/bin/install-skills.sh +57 -0
- package/bin/specweave.js +81 -0
- package/dist/adapters/adapter-base.d.ts +50 -0
- package/dist/adapters/adapter-base.d.ts.map +1 -0
- package/dist/adapters/adapter-base.js +146 -0
- package/dist/adapters/adapter-base.js.map +1 -0
- package/dist/adapters/adapter-interface.d.ts +108 -0
- package/dist/adapters/adapter-interface.d.ts.map +1 -0
- package/dist/adapters/adapter-interface.js +9 -0
- package/dist/adapters/adapter-interface.js.map +1 -0
- package/dist/adapters/claude/adapter.d.ts +54 -0
- package/dist/adapters/claude/adapter.d.ts.map +1 -0
- package/dist/adapters/claude/adapter.js +184 -0
- package/dist/adapters/claude/adapter.js.map +1 -0
- package/dist/adapters/copilot/adapter.d.ts +42 -0
- package/dist/adapters/copilot/adapter.d.ts.map +1 -0
- package/dist/adapters/copilot/adapter.js +239 -0
- package/dist/adapters/copilot/adapter.js.map +1 -0
- package/dist/adapters/cursor/adapter.d.ts +42 -0
- package/dist/adapters/cursor/adapter.d.ts.map +1 -0
- package/dist/adapters/cursor/adapter.js +297 -0
- package/dist/adapters/cursor/adapter.js.map +1 -0
- package/dist/adapters/generic/adapter.d.ts +40 -0
- package/dist/adapters/generic/adapter.d.ts.map +1 -0
- package/dist/adapters/generic/adapter.js +155 -0
- package/dist/adapters/generic/adapter.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +247 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +7 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +160 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +154 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/package.json +90 -0
- package/src/adapters/README.md +312 -0
- package/src/adapters/adapter-base.ts +146 -0
- package/src/adapters/adapter-interface.ts +120 -0
- package/src/adapters/claude/README.md +241 -0
- package/src/adapters/claude/adapter.ts +157 -0
- package/src/adapters/copilot/.github/copilot/instructions.md +376 -0
- package/src/adapters/copilot/README.md +200 -0
- package/src/adapters/copilot/adapter.ts +210 -0
- package/src/adapters/cursor/.cursor/context/docs-context.md +62 -0
- package/src/adapters/cursor/.cursor/context/increments-context.md +71 -0
- package/src/adapters/cursor/.cursor/context/strategy-context.md +73 -0
- package/src/adapters/cursor/.cursor/context/tests-context.md +89 -0
- package/src/adapters/cursor/.cursorrules +325 -0
- package/src/adapters/cursor/README.md +243 -0
- package/src/adapters/cursor/adapter.ts +268 -0
- package/src/adapters/generic/README.md +277 -0
- package/src/adapters/generic/SPECWEAVE-MANUAL.md +676 -0
- package/src/adapters/generic/adapter.ts +159 -0
- package/src/adapters/registry.yaml +126 -0
- package/src/agents/architect/AGENT.md +416 -0
- package/src/agents/devops/AGENT.md +1738 -0
- package/src/agents/docs-writer/AGENT.md +239 -0
- package/src/agents/performance/AGENT.md +228 -0
- package/src/agents/pm/AGENT.md +751 -0
- package/src/agents/qa-lead/AGENT.md +150 -0
- package/src/agents/security/AGENT.md +179 -0
- package/src/agents/sre/AGENT.md +582 -0
- package/src/agents/sre/modules/backend-diagnostics.md +481 -0
- package/src/agents/sre/modules/database-diagnostics.md +509 -0
- package/src/agents/sre/modules/infrastructure.md +561 -0
- package/src/agents/sre/modules/monitoring.md +439 -0
- package/src/agents/sre/modules/security-incidents.md +421 -0
- package/src/agents/sre/modules/ui-diagnostics.md +302 -0
- package/src/agents/sre/playbooks/01-high-cpu-usage.md +204 -0
- package/src/agents/sre/playbooks/02-database-deadlock.md +241 -0
- package/src/agents/sre/playbooks/03-memory-leak.md +252 -0
- package/src/agents/sre/playbooks/04-slow-api-response.md +269 -0
- package/src/agents/sre/playbooks/05-ddos-attack.md +293 -0
- package/src/agents/sre/playbooks/06-disk-full.md +314 -0
- package/src/agents/sre/playbooks/07-service-down.md +333 -0
- package/src/agents/sre/playbooks/08-data-corruption.md +337 -0
- package/src/agents/sre/playbooks/09-cascade-failure.md +430 -0
- package/src/agents/sre/playbooks/10-rate-limit-exceeded.md +464 -0
- package/src/agents/sre/scripts/health-check.sh +230 -0
- package/src/agents/sre/scripts/log-analyzer.py +213 -0
- package/src/agents/sre/scripts/metrics-collector.sh +294 -0
- package/src/agents/sre/scripts/trace-analyzer.js +257 -0
- package/src/agents/sre/templates/incident-report.md +249 -0
- package/src/agents/sre/templates/mitigation-plan.md +375 -0
- package/src/agents/sre/templates/post-mortem.md +418 -0
- package/src/agents/sre/templates/runbook-template.md +412 -0
- package/src/agents/tech-lead/AGENT.md +263 -0
- package/src/commands/add-tasks.md +176 -0
- package/src/commands/close-increment.md +347 -0
- package/src/commands/create-increment.md +223 -0
- package/src/commands/create-project.md +528 -0
- package/src/commands/generate-docs.md +623 -0
- package/src/commands/list-increments.md +180 -0
- package/src/commands/review-docs.md +331 -0
- package/src/commands/start-increment.md +139 -0
- package/src/commands/sync-github.md +115 -0
- package/src/commands/validate-increment.md +800 -0
- package/src/hooks/README.md +252 -0
- package/src/hooks/docs-changed.sh +59 -0
- package/src/hooks/human-input-required.sh +55 -0
- package/src/hooks/post-task-completion.sh +57 -0
- package/src/hooks/pre-implementation.sh +47 -0
- package/src/skills/ado-sync/README.md +449 -0
- package/src/skills/ado-sync/SKILL.md +245 -0
- package/src/skills/ado-sync/test-cases/test-1.yaml +9 -0
- package/src/skills/ado-sync/test-cases/test-2.yaml +8 -0
- package/src/skills/ado-sync/test-cases/test-3.yaml +9 -0
- package/src/skills/bmad-method-expert/SKILL.md +628 -0
- package/src/skills/bmad-method-expert/scripts/analyze-project.js +318 -0
- package/src/skills/bmad-method-expert/scripts/check-setup.js +208 -0
- package/src/skills/bmad-method-expert/scripts/generate-template.js +1149 -0
- package/src/skills/bmad-method-expert/scripts/validate-documents.js +340 -0
- package/src/skills/bmad-method-expert/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/bmad-method-expert/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/bmad-method-expert/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/brownfield-analyzer/SKILL.md +523 -0
- package/src/skills/brownfield-analyzer/test-cases/test-1-basic-analysis.yaml +48 -0
- package/src/skills/brownfield-analyzer/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/brownfield-analyzer/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/SKILL.md +625 -0
- package/src/skills/brownfield-onboarder/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/context-loader/SKILL.md +734 -0
- package/src/skills/context-loader/test-cases/test-1-basic-loading.yaml +39 -0
- package/src/skills/context-loader/test-cases/test-2-token-budget-exceeded.yaml +44 -0
- package/src/skills/context-loader/test-cases/test-3-section-anchors.yaml +45 -0
- package/src/skills/context-optimizer/SKILL.md +618 -0
- package/src/skills/context-optimizer/test-cases/test-1-bug-fix-narrow.yaml +97 -0
- package/src/skills/context-optimizer/test-cases/test-2-feature-focused.yaml +109 -0
- package/src/skills/context-optimizer/test-cases/test-3-architecture-broad.yaml +98 -0
- package/src/skills/cost-optimizer/SKILL.md +190 -0
- package/src/skills/cost-optimizer/test-cases/test-1-basic-comparison.yaml +75 -0
- package/src/skills/cost-optimizer/test-cases/test-2-budget-constraint.yaml +52 -0
- package/src/skills/cost-optimizer/test-cases/test-3-scale-requirement.yaml +63 -0
- package/src/skills/cost-optimizer/test-results/README.md +46 -0
- package/src/skills/design-system-architect/SKILL.md +107 -0
- package/src/skills/design-system-architect/test-cases/test-1-token-structure.yaml +23 -0
- package/src/skills/design-system-architect/test-cases/test-2-component-hierarchy.yaml +24 -0
- package/src/skills/design-system-architect/test-cases/test-3-accessibility-checklist.yaml +23 -0
- package/src/skills/diagrams-architect/SKILL.md +763 -0
- package/src/skills/diagrams-generator/SKILL.md +25 -0
- package/src/skills/diagrams-generator/test-cases/test-1.yaml +9 -0
- package/src/skills/diagrams-generator/test-cases/test-2.yaml +9 -0
- package/src/skills/diagrams-generator/test-cases/test-3.yaml +8 -0
- package/src/skills/docs-updater/README.md +48 -0
- package/src/skills/docs-updater/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/docs-updater/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/docs-updater/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/dotnet-backend/SKILL.md +250 -0
- package/src/skills/e2e-playwright/README.md +506 -0
- package/src/skills/e2e-playwright/SKILL.md +457 -0
- package/src/skills/e2e-playwright/execute.js +373 -0
- package/src/skills/e2e-playwright/lib/utils.js +514 -0
- package/src/skills/e2e-playwright/package.json +33 -0
- package/src/skills/e2e-playwright/test-cases/TC-001-basic-navigation.yaml +54 -0
- package/src/skills/e2e-playwright/test-cases/TC-002-form-interaction.yaml +64 -0
- package/src/skills/e2e-playwright/test-cases/TC-003-specweave-integration.yaml +74 -0
- package/src/skills/e2e-playwright/test-cases/TC-004-accessibility-check.yaml +98 -0
- package/src/skills/figma-designer/SKILL.md +149 -0
- package/src/skills/figma-implementer/SKILL.md +148 -0
- package/src/skills/figma-mcp-connector/SKILL.md +136 -0
- package/src/skills/figma-mcp-connector/test-cases/test-1-read-file-desktop.yaml +22 -0
- package/src/skills/figma-mcp-connector/test-cases/test-2-read-file-framelink.yaml +21 -0
- package/src/skills/figma-mcp-connector/test-cases/test-3-error-handling.yaml +18 -0
- package/src/skills/figma-to-code/SKILL.md +128 -0
- package/src/skills/figma-to-code/test-cases/test-1-token-generation.yaml +29 -0
- package/src/skills/figma-to-code/test-cases/test-2-component-generation.yaml +27 -0
- package/src/skills/figma-to-code/test-cases/test-3-typescript-generation.yaml +28 -0
- package/src/skills/frontend/SKILL.md +177 -0
- package/src/skills/github-sync/SKILL.md +252 -0
- package/src/skills/github-sync/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/github-sync/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/github-sync/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/hetzner-provisioner/README.md +308 -0
- package/src/skills/hetzner-provisioner/SKILL.md +251 -0
- package/src/skills/hetzner-provisioner/test-cases/test-1-basic-provision.yaml +71 -0
- package/src/skills/hetzner-provisioner/test-cases/test-2-postgres-provision.yaml +85 -0
- package/src/skills/hetzner-provisioner/test-cases/test-3-ssl-config.yaml +126 -0
- package/src/skills/hetzner-provisioner/test-results/README.md +259 -0
- package/src/skills/increment-planner/SKILL.md +889 -0
- package/src/skills/increment-planner/scripts/feature-utils.js +250 -0
- package/src/skills/increment-planner/test-cases/test-1-basic-feature.yaml +27 -0
- package/src/skills/increment-planner/test-cases/test-2-complex-feature.yaml +30 -0
- package/src/skills/increment-planner/test-cases/test-3-auto-numbering.yaml +24 -0
- package/src/skills/increment-quality-judge/SKILL.md +566 -0
- package/src/skills/increment-quality-judge/test-cases/test-1-good-spec.yaml +95 -0
- package/src/skills/increment-quality-judge/test-cases/test-2-poor-spec.yaml +108 -0
- package/src/skills/increment-quality-judge/test-cases/test-3-export-suggestions.yaml +87 -0
- package/src/skills/jira-sync/README.md +328 -0
- package/src/skills/jira-sync/SKILL.md +209 -0
- package/src/skills/jira-sync/test-cases/test-1.yaml +9 -0
- package/src/skills/jira-sync/test-cases/test-2.yaml +9 -0
- package/src/skills/jira-sync/test-cases/test-3.yaml +10 -0
- package/src/skills/nextjs/SKILL.md +176 -0
- package/src/skills/nodejs-backend/SKILL.md +181 -0
- package/src/skills/notification-system/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/notification-system/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/notification-system/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/python-backend/SKILL.md +226 -0
- package/src/skills/role-orchestrator/README.md +197 -0
- package/src/skills/role-orchestrator/SKILL.md +1184 -0
- package/src/skills/role-orchestrator/test-cases/test-1-simple-product.yaml +98 -0
- package/src/skills/role-orchestrator/test-cases/test-2-quality-gate-failure.yaml +73 -0
- package/src/skills/role-orchestrator/test-cases/test-3-security-workflow.yaml +121 -0
- package/src/skills/role-orchestrator/test-cases/test-4-parallel-execution.yaml +145 -0
- package/src/skills/role-orchestrator/test-cases/test-5-feedback-loops.yaml +149 -0
- package/src/skills/skill-creator/LICENSE.txt +202 -0
- package/src/skills/skill-creator/SKILL.md +209 -0
- package/src/skills/skill-creator/scripts/init_skill.py +303 -0
- package/src/skills/skill-creator/scripts/package_skill.py +110 -0
- package/src/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/src/skills/skill-creator/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/skill-creator/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/skill-creator/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/skill-router/SKILL.md +497 -0
- package/src/skills/skill-router/test-cases/test-1-basic-routing.yaml +33 -0
- package/src/skills/skill-router/test-cases/test-2-ambiguous-request.yaml +42 -0
- package/src/skills/skill-router/test-cases/test-3-nested-orchestration.yaml +50 -0
- package/src/skills/spec-driven-brainstorming/README.md +264 -0
- package/src/skills/spec-driven-brainstorming/SKILL.md +439 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-001-simple-idea-to-design.yaml +148 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-002-complex-ultrathink-design.yaml +190 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-003-unclear-requirements-socratic.yaml +233 -0
- package/src/skills/spec-driven-debugging/README.md +479 -0
- package/src/skills/spec-driven-debugging/SKILL.md +652 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-001-simple-auth-bug.yaml +212 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-002-race-condition-ultrathink.yaml +461 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-003-brownfield-missing-spec.yaml +366 -0
- package/src/skills/spec-kit-expert/SKILL.md +1012 -0
- package/src/skills/spec-kit-expert/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/spec-kit-expert/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/spec-kit-expert/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/specweave-ado-mapper/SKILL.md +501 -0
- package/src/skills/specweave-detector/SKILL.md +420 -0
- package/src/skills/specweave-detector/test-cases/test-1-basic-detection.yaml +37 -0
- package/src/skills/specweave-detector/test-cases/test-2-missing-config.yaml +37 -0
- package/src/skills/specweave-detector/test-cases/test-3-non-specweave-project.yaml +34 -0
- package/src/skills/specweave-jira-mapper/SKILL.md +500 -0
- package/src/skills/stripe-integrator/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/stripe-integrator/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/stripe-integrator/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/task-builder/README.md +90 -0
- package/src/skills/task-builder/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/task-builder/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/task-builder/test-cases/test-3-placeholder.yaml +12 -0
- package/src/templates/.env.example +144 -0
- package/src/templates/.gitignore.template +81 -0
- package/src/templates/CLAUDE.md.template +383 -0
- package/src/templates/README.md.template +240 -0
- package/src/templates/config.yaml +333 -0
- package/src/templates/docs/README.md +124 -0
- package/src/templates/docs/adr-template.md +118 -0
- package/src/templates/docs/hld-template.md +220 -0
- package/src/templates/docs/lld-template.md +580 -0
- package/src/templates/docs/prd-template.md +132 -0
- package/src/templates/docs/rfc-template.md +229 -0
- package/src/templates/docs/runbook-template.md +298 -0
- package/src/templates/environments/minimal/.env.production +16 -0
- package/src/templates/environments/minimal/README.md +54 -0
- package/src/templates/environments/minimal/deploy-production.yml +52 -0
- package/src/templates/environments/progressive/.env.qa +28 -0
- package/src/templates/environments/progressive/README.md +129 -0
- package/src/templates/environments/progressive/deploy-production.yml +93 -0
- package/src/templates/environments/progressive/deploy-qa.yml +62 -0
- package/src/templates/environments/progressive/deploy-staging.yml +67 -0
- package/src/templates/environments/standard/.env.development +20 -0
- package/src/templates/environments/standard/.env.production +30 -0
- package/src/templates/environments/standard/.env.staging +23 -0
- package/src/templates/environments/standard/README.md +97 -0
- package/src/templates/environments/standard/deploy-production.yml +68 -0
- package/src/templates/environments/standard/deploy-staging.yml +61 -0
- package/src/templates/environments/standard/docker-compose.yml +43 -0
- 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"
|
package/bin/specweave.js
ADDED
|
@@ -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"}
|