@accelerationguy/accel 1.0.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/CLAUDE.md +19 -0
- package/LICENSE +33 -0
- package/README.md +275 -0
- package/bin/install.js +661 -0
- package/docs/getting-started.md +164 -0
- package/docs/module-guide.md +139 -0
- package/modules/drive/LICENSE +21 -0
- package/modules/drive/PAUL-VS-GSD.md +171 -0
- package/modules/drive/README.md +555 -0
- package/modules/drive/assets/terminal.svg +67 -0
- package/modules/drive/bin/install.js +210 -0
- package/modules/drive/integration.js +76 -0
- package/modules/drive/package.json +38 -0
- package/modules/drive/src/commands/add-phase.md +36 -0
- package/modules/drive/src/commands/apply.md +83 -0
- package/modules/drive/src/commands/assumptions.md +37 -0
- package/modules/drive/src/commands/audit.md +57 -0
- package/modules/drive/src/commands/complete-milestone.md +36 -0
- package/modules/drive/src/commands/config.md +175 -0
- package/modules/drive/src/commands/consider-issues.md +41 -0
- package/modules/drive/src/commands/discover.md +48 -0
- package/modules/drive/src/commands/discuss-milestone.md +33 -0
- package/modules/drive/src/commands/discuss.md +34 -0
- package/modules/drive/src/commands/flows.md +73 -0
- package/modules/drive/src/commands/handoff.md +201 -0
- package/modules/drive/src/commands/help.md +525 -0
- package/modules/drive/src/commands/init.md +54 -0
- package/modules/drive/src/commands/map-codebase.md +34 -0
- package/modules/drive/src/commands/milestone.md +34 -0
- package/modules/drive/src/commands/pause.md +44 -0
- package/modules/drive/src/commands/plan-fix.md +216 -0
- package/modules/drive/src/commands/plan.md +36 -0
- package/modules/drive/src/commands/progress.md +138 -0
- package/modules/drive/src/commands/register.md +29 -0
- package/modules/drive/src/commands/remove-phase.md +37 -0
- package/modules/drive/src/commands/research-phase.md +209 -0
- package/modules/drive/src/commands/research.md +47 -0
- package/modules/drive/src/commands/resume.md +49 -0
- package/modules/drive/src/commands/status.md +78 -0
- package/modules/drive/src/commands/unify.md +87 -0
- package/modules/drive/src/commands/verify.md +60 -0
- package/modules/drive/src/references/checkpoints.md +234 -0
- package/modules/drive/src/references/context-management.md +219 -0
- package/modules/drive/src/references/git-strategy.md +206 -0
- package/modules/drive/src/references/loop-phases.md +254 -0
- package/modules/drive/src/references/plan-format.md +263 -0
- package/modules/drive/src/references/quality-principles.md +152 -0
- package/modules/drive/src/references/research-quality-control.md +247 -0
- package/modules/drive/src/references/sonarqube-integration.md +244 -0
- package/modules/drive/src/references/specialized-workflow-integration.md +186 -0
- package/modules/drive/src/references/subagent-criteria.md +179 -0
- package/modules/drive/src/references/tdd.md +219 -0
- package/modules/drive/src/references/work-units.md +161 -0
- package/modules/drive/src/rules/commands.md +108 -0
- package/modules/drive/src/rules/references.md +107 -0
- package/modules/drive/src/rules/style.md +123 -0
- package/modules/drive/src/rules/templates.md +51 -0
- package/modules/drive/src/rules/workflows.md +133 -0
- package/modules/drive/src/templates/CONTEXT.md +88 -0
- package/modules/drive/src/templates/DEBUG.md +164 -0
- package/modules/drive/src/templates/DISCOVERY.md +148 -0
- package/modules/drive/src/templates/HANDOFF.md +77 -0
- package/modules/drive/src/templates/ISSUES.md +93 -0
- package/modules/drive/src/templates/MILESTONES.md +167 -0
- package/modules/drive/src/templates/PLAN.md +328 -0
- package/modules/drive/src/templates/PROJECT.md +219 -0
- package/modules/drive/src/templates/RESEARCH.md +130 -0
- package/modules/drive/src/templates/ROADMAP.md +328 -0
- package/modules/drive/src/templates/SPECIAL-FLOWS.md +70 -0
- package/modules/drive/src/templates/STATE.md +210 -0
- package/modules/drive/src/templates/SUMMARY.md +221 -0
- package/modules/drive/src/templates/UAT-ISSUES.md +139 -0
- package/modules/drive/src/templates/codebase/architecture.md +259 -0
- package/modules/drive/src/templates/codebase/concerns.md +329 -0
- package/modules/drive/src/templates/codebase/conventions.md +311 -0
- package/modules/drive/src/templates/codebase/integrations.md +284 -0
- package/modules/drive/src/templates/codebase/stack.md +190 -0
- package/modules/drive/src/templates/codebase/structure.md +287 -0
- package/modules/drive/src/templates/codebase/testing.md +484 -0
- package/modules/drive/src/templates/config.md +181 -0
- package/modules/drive/src/templates/milestone-archive.md +236 -0
- package/modules/drive/src/templates/milestone-context.md +190 -0
- package/modules/drive/src/templates/paul-json.md +147 -0
- package/modules/drive/src/vector-config/PAUL +26 -0
- package/modules/drive/src/vector-config/PAUL.manifest +11 -0
- package/modules/drive/src/workflows/apply-phase.md +393 -0
- package/modules/drive/src/workflows/audit-plan.md +344 -0
- package/modules/drive/src/workflows/complete-milestone.md +479 -0
- package/modules/drive/src/workflows/configure-special-flows.md +283 -0
- package/modules/drive/src/workflows/consider-issues.md +172 -0
- package/modules/drive/src/workflows/create-milestone.md +268 -0
- package/modules/drive/src/workflows/debug.md +292 -0
- package/modules/drive/src/workflows/discovery.md +187 -0
- package/modules/drive/src/workflows/discuss-milestone.md +245 -0
- package/modules/drive/src/workflows/discuss-phase.md +231 -0
- package/modules/drive/src/workflows/init-project.md +698 -0
- package/modules/drive/src/workflows/map-codebase.md +459 -0
- package/modules/drive/src/workflows/pause-work.md +259 -0
- package/modules/drive/src/workflows/phase-assumptions.md +181 -0
- package/modules/drive/src/workflows/plan-phase.md +385 -0
- package/modules/drive/src/workflows/quality-gate.md +263 -0
- package/modules/drive/src/workflows/register-manifest.md +107 -0
- package/modules/drive/src/workflows/research.md +241 -0
- package/modules/drive/src/workflows/resume-project.md +200 -0
- package/modules/drive/src/workflows/roadmap-management.md +334 -0
- package/modules/drive/src/workflows/transition-phase.md +368 -0
- package/modules/drive/src/workflows/unify-phase.md +290 -0
- package/modules/drive/src/workflows/verify-work.md +241 -0
- package/modules/forge/README.md +281 -0
- package/modules/forge/bin/install.js +200 -0
- package/modules/forge/package.json +32 -0
- package/modules/forge/skillsmith/rules/checklists-rules.md +42 -0
- package/modules/forge/skillsmith/rules/context-rules.md +43 -0
- package/modules/forge/skillsmith/rules/entry-point-rules.md +44 -0
- package/modules/forge/skillsmith/rules/frameworks-rules.md +43 -0
- package/modules/forge/skillsmith/rules/tasks-rules.md +52 -0
- package/modules/forge/skillsmith/rules/templates-rules.md +43 -0
- package/modules/forge/skillsmith/skillsmith.md +82 -0
- package/modules/forge/skillsmith/tasks/audit.md +277 -0
- package/modules/forge/skillsmith/tasks/discover.md +145 -0
- package/modules/forge/skillsmith/tasks/distill.md +276 -0
- package/modules/forge/skillsmith/tasks/scaffold.md +349 -0
- package/modules/forge/specs/checklists.md +193 -0
- package/modules/forge/specs/context.md +223 -0
- package/modules/forge/specs/entry-point.md +320 -0
- package/modules/forge/specs/frameworks.md +228 -0
- package/modules/forge/specs/rules.md +245 -0
- package/modules/forge/specs/tasks.md +344 -0
- package/modules/forge/specs/templates.md +335 -0
- package/modules/forge/terminal.svg +70 -0
- package/modules/ignition/README.md +245 -0
- package/modules/ignition/bin/install.js +184 -0
- package/modules/ignition/checklists/planning-quality.md +55 -0
- package/modules/ignition/data/application/config.md +21 -0
- package/modules/ignition/data/application/guide.md +51 -0
- package/modules/ignition/data/application/skill-loadout.md +11 -0
- package/modules/ignition/data/campaign/config.md +18 -0
- package/modules/ignition/data/campaign/guide.md +36 -0
- package/modules/ignition/data/campaign/skill-loadout.md +10 -0
- package/modules/ignition/data/client/config.md +18 -0
- package/modules/ignition/data/client/guide.md +36 -0
- package/modules/ignition/data/client/skill-loadout.md +11 -0
- package/modules/ignition/data/utility/config.md +18 -0
- package/modules/ignition/data/utility/guide.md +31 -0
- package/modules/ignition/data/utility/skill-loadout.md +8 -0
- package/modules/ignition/data/workflow/config.md +19 -0
- package/modules/ignition/data/workflow/guide.md +41 -0
- package/modules/ignition/data/workflow/skill-loadout.md +10 -0
- package/modules/ignition/integration.js +54 -0
- package/modules/ignition/package.json +35 -0
- package/modules/ignition/seed.md +81 -0
- package/modules/ignition/tasks/add-type.md +164 -0
- package/modules/ignition/tasks/graduate.md +182 -0
- package/modules/ignition/tasks/ideate.md +221 -0
- package/modules/ignition/tasks/launch.md +137 -0
- package/modules/ignition/tasks/status.md +71 -0
- package/modules/ignition/templates/planning-application.md +193 -0
- package/modules/ignition/templates/planning-campaign.md +138 -0
- package/modules/ignition/templates/planning-client.md +149 -0
- package/modules/ignition/templates/planning-utility.md +112 -0
- package/modules/ignition/templates/planning-workflow.md +125 -0
- package/modules/ignition/terminal.svg +74 -0
- package/modules/mission-control/CONTEXT-CONTINUITY-SPEC.md +293 -0
- package/modules/mission-control/CONTEXT-ENGINEERING-GUIDE.md +282 -0
- package/modules/mission-control/README.md +91 -0
- package/modules/mission-control/assets/terminal.svg +80 -0
- package/modules/mission-control/examples/entities.example.json +133 -0
- package/modules/mission-control/examples/projects.example.json +318 -0
- package/modules/mission-control/examples/state.example.json +183 -0
- package/modules/mission-control/examples/vector.example.json +245 -0
- package/modules/mission-control/mission-control/checklists/install-verification.md +46 -0
- package/modules/mission-control/mission-control/frameworks/framework-registry.md +83 -0
- package/modules/mission-control/mission-control/mission-control.md +83 -0
- package/modules/mission-control/mission-control/tasks/insights.md +73 -0
- package/modules/mission-control/mission-control/tasks/install.md +194 -0
- package/modules/mission-control/mission-control/tasks/status.md +125 -0
- package/modules/mission-control/schemas/entities.schema.json +89 -0
- package/modules/mission-control/schemas/projects.schema.json +221 -0
- package/modules/mission-control/schemas/state.schema.json +108 -0
- package/modules/mission-control/schemas/vector.schema.json +200 -0
- package/modules/momentum/README.md +678 -0
- package/modules/momentum/bin/install.js +563 -0
- package/modules/momentum/integration.js +131 -0
- package/modules/momentum/package.json +42 -0
- package/modules/momentum/schemas/entities.schema.json +89 -0
- package/modules/momentum/schemas/projects.schema.json +221 -0
- package/modules/momentum/schemas/state.schema.json +108 -0
- package/modules/momentum/src/commands/audit-claude-md.md +31 -0
- package/modules/momentum/src/commands/audit.md +33 -0
- package/modules/momentum/src/commands/groom.md +35 -0
- package/modules/momentum/src/commands/history.md +27 -0
- package/modules/momentum/src/commands/pulse.md +33 -0
- package/modules/momentum/src/commands/scaffold.md +33 -0
- package/modules/momentum/src/commands/status.md +28 -0
- package/modules/momentum/src/commands/surface-convert.md +35 -0
- package/modules/momentum/src/commands/surface-create.md +34 -0
- package/modules/momentum/src/commands/surface-list.md +27 -0
- package/modules/momentum/src/commands/vector-hygiene.md +33 -0
- package/modules/momentum/src/framework/context/momentum-principles.md +71 -0
- package/modules/momentum/src/framework/frameworks/audit-strategies.md +53 -0
- package/modules/momentum/src/framework/frameworks/satellite-registration.md +44 -0
- package/modules/momentum/src/framework/tasks/audit-claude-md.md +68 -0
- package/modules/momentum/src/framework/tasks/audit.md +64 -0
- package/modules/momentum/src/framework/tasks/groom.md +164 -0
- package/modules/momentum/src/framework/tasks/history.md +34 -0
- package/modules/momentum/src/framework/tasks/pulse.md +83 -0
- package/modules/momentum/src/framework/tasks/scaffold.md +202 -0
- package/modules/momentum/src/framework/tasks/status.md +35 -0
- package/modules/momentum/src/framework/tasks/surface-convert.md +143 -0
- package/modules/momentum/src/framework/tasks/surface-create.md +184 -0
- package/modules/momentum/src/framework/tasks/surface-list.md +42 -0
- package/modules/momentum/src/framework/tasks/vector-hygiene.md +160 -0
- package/modules/momentum/src/framework/templates/workspace-json.md +96 -0
- package/modules/momentum/src/hooks/_template.py +129 -0
- package/modules/momentum/src/hooks/active-hook.py +178 -0
- package/modules/momentum/src/hooks/backlog-hook.py +115 -0
- package/modules/momentum/src/hooks/mission-control-insights.py +169 -0
- package/modules/momentum/src/hooks/momentum-pulse-check.py +351 -0
- package/modules/momentum/src/hooks/operator.py +53 -0
- package/modules/momentum/src/hooks/psmm-injector.py +67 -0
- package/modules/momentum/src/hooks/satellite-detection.py +248 -0
- package/modules/momentum/src/packages/momentum-mcp/index.js +119 -0
- package/modules/momentum/src/packages/momentum-mcp/package.json +10 -0
- package/modules/momentum/src/packages/momentum-mcp/tools/entities.js +226 -0
- package/modules/momentum/src/packages/momentum-mcp/tools/operator.js +106 -0
- package/modules/momentum/src/packages/momentum-mcp/tools/projects.js +322 -0
- package/modules/momentum/src/packages/momentum-mcp/tools/psmm.js +206 -0
- package/modules/momentum/src/packages/momentum-mcp/tools/state.js +199 -0
- package/modules/momentum/src/packages/momentum-mcp/tools/surfaces.js +404 -0
- package/modules/momentum/src/skill/momentum.md +111 -0
- package/modules/momentum/src/tasks/groom.md +164 -0
- package/modules/momentum/src/templates/operator.json +66 -0
- package/modules/momentum/src/templates/workspace.json +111 -0
- package/modules/momentum/terminal.svg +77 -0
- package/modules/radar/README.md +1552 -0
- package/modules/radar/commands/audit.md +233 -0
- package/modules/radar/commands/guardrails.md +194 -0
- package/modules/radar/commands/init.md +207 -0
- package/modules/radar/commands/playbook.md +176 -0
- package/modules/radar/commands/remediate.md +156 -0
- package/modules/radar/commands/report.md +172 -0
- package/modules/radar/commands/resume.md +176 -0
- package/modules/radar/commands/status.md +148 -0
- package/modules/radar/commands/transform.md +205 -0
- package/modules/radar/commands/validate.md +177 -0
- package/modules/radar/docs/ARCHITECTURE.md +336 -0
- package/modules/radar/docs/GETTING-STARTED.md +287 -0
- package/modules/radar/docs/standards/agents.md +197 -0
- package/modules/radar/docs/standards/commands.md +250 -0
- package/modules/radar/docs/standards/domains.md +191 -0
- package/modules/radar/docs/standards/personas.md +211 -0
- package/modules/radar/docs/standards/rules.md +218 -0
- package/modules/radar/docs/standards/runtime.md +445 -0
- package/modules/radar/docs/standards/schemas.md +269 -0
- package/modules/radar/docs/standards/tools.md +273 -0
- package/modules/radar/docs/standards/workflows.md +254 -0
- package/modules/radar/docs/terminal.svg +72 -0
- package/modules/radar/docs/validation/convention-compliance-report.md +183 -0
- package/modules/radar/docs/validation/cross-reference-report.md +195 -0
- package/modules/radar/docs/validation/validation-summary.md +118 -0
- package/modules/radar/docs/validation/version-manifest.yaml +363 -0
- package/modules/radar/install.sh +711 -0
- package/modules/radar/integration.js +53 -0
- package/modules/radar/src/core/agents/architect.md +25 -0
- package/modules/radar/src/core/agents/compliance-officer.md +25 -0
- package/modules/radar/src/core/agents/data-engineer.md +25 -0
- package/modules/radar/src/core/agents/devils-advocate.md +22 -0
- package/modules/radar/src/core/agents/performance-engineer.md +25 -0
- package/modules/radar/src/core/agents/principal-engineer.md +23 -0
- package/modules/radar/src/core/agents/reality-gap-analyst.md +22 -0
- package/modules/radar/src/core/agents/security-engineer.md +25 -0
- package/modules/radar/src/core/agents/senior-app-engineer.md +25 -0
- package/modules/radar/src/core/agents/sre.md +25 -0
- package/modules/radar/src/core/agents/staff-engineer.md +23 -0
- package/modules/radar/src/core/agents/test-engineer.md +25 -0
- package/modules/radar/src/core/personas/architect.md +111 -0
- package/modules/radar/src/core/personas/compliance-officer.md +104 -0
- package/modules/radar/src/core/personas/data-engineer.md +113 -0
- package/modules/radar/src/core/personas/devils-advocate.md +105 -0
- package/modules/radar/src/core/personas/performance-engineer.md +119 -0
- package/modules/radar/src/core/personas/principal-engineer.md +119 -0
- package/modules/radar/src/core/personas/reality-gap-analyst.md +111 -0
- package/modules/radar/src/core/personas/security-engineer.md +108 -0
- package/modules/radar/src/core/personas/senior-app-engineer.md +111 -0
- package/modules/radar/src/core/personas/sre.md +117 -0
- package/modules/radar/src/core/personas/staff-engineer.md +109 -0
- package/modules/radar/src/core/personas/test-engineer.md +109 -0
- package/modules/radar/src/core/workflows/disagreement-resolution.md +183 -0
- package/modules/radar/src/core/workflows/phase-0-context.md +148 -0
- package/modules/radar/src/core/workflows/phase-1-reconnaissance.md +169 -0
- package/modules/radar/src/core/workflows/phase-2-domain-audits.md +190 -0
- package/modules/radar/src/core/workflows/phase-3-cross-domain.md +177 -0
- package/modules/radar/src/core/workflows/phase-4-adversarial-review.md +165 -0
- package/modules/radar/src/core/workflows/phase-5-report.md +189 -0
- package/modules/radar/src/core/workflows/phase-checkpoint.md +222 -0
- package/modules/radar/src/core/workflows/session-handoff.md +152 -0
- package/modules/radar/src/domains/00-context.md +201 -0
- package/modules/radar/src/domains/01-architecture.md +248 -0
- package/modules/radar/src/domains/02-data.md +224 -0
- package/modules/radar/src/domains/03-correctness.md +230 -0
- package/modules/radar/src/domains/04-security.md +274 -0
- package/modules/radar/src/domains/05-compliance.md +228 -0
- package/modules/radar/src/domains/06-testing.md +228 -0
- package/modules/radar/src/domains/07-reliability.md +246 -0
- package/modules/radar/src/domains/08-performance.md +247 -0
- package/modules/radar/src/domains/09-maintainability.md +271 -0
- package/modules/radar/src/domains/10-operability.md +250 -0
- package/modules/radar/src/domains/11-change-risk.md +246 -0
- package/modules/radar/src/domains/12-team-risk.md +221 -0
- package/modules/radar/src/domains/13-risk-synthesis.md +202 -0
- package/modules/radar/src/rules/agent-boundaries.md +78 -0
- package/modules/radar/src/rules/disagreement-protocol.md +76 -0
- package/modules/radar/src/rules/epistemic-hygiene.md +78 -0
- package/modules/radar/src/schemas/confidence.md +185 -0
- package/modules/radar/src/schemas/disagreement.md +238 -0
- package/modules/radar/src/schemas/finding.md +287 -0
- package/modules/radar/src/schemas/report-section.md +150 -0
- package/modules/radar/src/schemas/signal.md +108 -0
- package/modules/radar/src/tools/checkov.md +463 -0
- package/modules/radar/src/tools/git-history.md +581 -0
- package/modules/radar/src/tools/gitleaks.md +447 -0
- package/modules/radar/src/tools/grype.md +611 -0
- package/modules/radar/src/tools/semgrep.md +378 -0
- package/modules/radar/src/tools/sonarqube.md +550 -0
- package/modules/radar/src/tools/syft.md +539 -0
- package/modules/radar/src/tools/trivy.md +439 -0
- package/modules/radar/src/transform/agents/change-risk-modeler.md +24 -0
- package/modules/radar/src/transform/agents/execution-validator.md +24 -0
- package/modules/radar/src/transform/agents/guardrail-generator.md +24 -0
- package/modules/radar/src/transform/agents/pedagogy-agent.md +24 -0
- package/modules/radar/src/transform/agents/remediation-architect.md +24 -0
- package/modules/radar/src/transform/personas/change-risk-modeler.md +95 -0
- package/modules/radar/src/transform/personas/execution-validator.md +95 -0
- package/modules/radar/src/transform/personas/guardrail-generator.md +103 -0
- package/modules/radar/src/transform/personas/pedagogy-agent.md +105 -0
- package/modules/radar/src/transform/personas/remediation-architect.md +95 -0
- package/modules/radar/src/transform/rules/change-risk-rules.md +87 -0
- package/modules/radar/src/transform/rules/safety-governance.md +87 -0
- package/modules/radar/src/transform/schemas/change-risk.md +139 -0
- package/modules/radar/src/transform/schemas/intervention-level.md +207 -0
- package/modules/radar/src/transform/schemas/playbook.md +205 -0
- package/modules/radar/src/transform/schemas/verification-plan.md +134 -0
- package/modules/radar/src/transform/workflows/phase-6-remediation.md +148 -0
- package/modules/radar/src/transform/workflows/phase-7-risk-validation.md +161 -0
- package/modules/radar/src/transform/workflows/phase-8-execution-planning.md +159 -0
- package/modules/radar/src/transform/workflows/transform-safety.md +158 -0
- package/modules/vector/.vector-template/sessions/.gitkeep +0 -0
- package/modules/vector/.vector-template/vector.json +72 -0
- package/modules/vector/AUDIT-CLAUDEMD.md +154 -0
- package/modules/vector/INSTALL.md +185 -0
- package/modules/vector/LICENSE +21 -0
- package/modules/vector/README.md +409 -0
- package/modules/vector/VECTOR-BLOCK.md +57 -0
- package/modules/vector/assets/terminal.svg +68 -0
- package/modules/vector/bin/install.js +455 -0
- package/modules/vector/bin/migrate-v1-to-v2.sh +492 -0
- package/modules/vector/commands/help.md +46 -0
- package/modules/vector/hooks/vector-hook.py +775 -0
- package/modules/vector/mcp/index.js +118 -0
- package/modules/vector/mcp/package.json +10 -0
- package/modules/vector/mcp/tools/decisions.js +269 -0
- package/modules/vector/mcp/tools/domains.js +361 -0
- package/modules/vector/mcp/tools/staging.js +252 -0
- package/modules/vector/mcp/tools/vector-json.js +647 -0
- package/modules/vector/package.json +38 -0
- package/modules/vector/schemas/vector.schema.json +237 -0
- package/package.json +39 -0
- package/shared/branding/branding.js +70 -0
- package/shared/config/defaults.json +59 -0
- package/shared/events/README.md +175 -0
- package/shared/events/event-bus.js +134 -0
- package/shared/events/event_bus.py +255 -0
- package/shared/events/integrations.js +161 -0
- package/shared/events/schemas/audit-complete.schema.json +21 -0
- package/shared/events/schemas/phase-progress.schema.json +23 -0
- package/shared/events/schemas/plan-created.schema.json +21 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 540">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
.terminal-bg { fill: #1a1b26; }
|
|
5
|
+
.terminal-border { fill: #24283b; }
|
|
6
|
+
.title-bar { fill: #1f2335; }
|
|
7
|
+
.btn-red { fill: #f7768e; }
|
|
8
|
+
.btn-yellow { fill: #e0af68; }
|
|
9
|
+
.btn-green { fill: #9ece6a; }
|
|
10
|
+
.text { font-family: 'SF Mono', 'Fira Code', 'JetBrains Mono', Consolas, monospace; }
|
|
11
|
+
.prompt { fill: #7aa2f7; }
|
|
12
|
+
.command { fill: #c0caf5; }
|
|
13
|
+
.amber { fill: #f8b500; }
|
|
14
|
+
.green { fill: #9ece6a; }
|
|
15
|
+
.dim { fill: #565f89; }
|
|
16
|
+
.white { fill: #c0caf5; }
|
|
17
|
+
</style>
|
|
18
|
+
</defs>
|
|
19
|
+
|
|
20
|
+
<!-- Window -->
|
|
21
|
+
<rect class="terminal-border" width="960" height="540" rx="12"/>
|
|
22
|
+
<rect class="terminal-bg" x="1" y="1" width="958" height="538" rx="11"/>
|
|
23
|
+
|
|
24
|
+
<!-- Title bar -->
|
|
25
|
+
<rect class="title-bar" x="1" y="1" width="958" height="36" rx="11"/>
|
|
26
|
+
<rect class="terminal-bg" x="1" y="26" width="958" height="12"/>
|
|
27
|
+
|
|
28
|
+
<!-- Window buttons -->
|
|
29
|
+
<circle class="btn-red" cx="24" cy="19" r="7"/>
|
|
30
|
+
<circle class="btn-yellow" cx="48" cy="19" r="7"/>
|
|
31
|
+
<circle class="btn-green" cx="72" cy="19" r="7"/>
|
|
32
|
+
|
|
33
|
+
<!-- Title -->
|
|
34
|
+
<text x="480" y="24" text-anchor="middle" class="text dim" font-size="13">Terminal</text>
|
|
35
|
+
|
|
36
|
+
<!-- Content -->
|
|
37
|
+
<g transform="translate(32, 72)">
|
|
38
|
+
<!-- Prompt line -->
|
|
39
|
+
<text class="text prompt" font-size="15" y="0">~</text>
|
|
40
|
+
<text class="text dim" font-size="15" x="16" y="0">$</text>
|
|
41
|
+
<text class="text command" font-size="15" x="36" y="0">npx /cli</text>
|
|
42
|
+
|
|
43
|
+
<!-- Banner -->
|
|
44
|
+
<text class="text amber" font-size="14" y="48" xml:space="preserve"> ██████╗ █████╗ ██████╗ ██╗</text>
|
|
45
|
+
<text class="text amber" font-size="14" y="68" xml:space="preserve"> ██╔════╝██╔══██╗██╔══██╗██║</text>
|
|
46
|
+
<text class="text amber" font-size="14" y="88" xml:space="preserve"> ██║ ███████║██████╔╝██║</text>
|
|
47
|
+
<text class="text amber" font-size="14" y="108" xml:space="preserve"> ██║ ██╔══██║██╔══██╗██║</text>
|
|
48
|
+
<text class="text amber" font-size="14" y="128" xml:space="preserve"> ╚██████╗██║ ██║██║ ██║███████╗</text>
|
|
49
|
+
<text class="text amber" font-size="14" y="148" xml:space="preserve"> ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝</text>
|
|
50
|
+
|
|
51
|
+
<!-- Title and subtitle -->
|
|
52
|
+
<text class="text white" font-size="15" y="188"> Vector <tspan class="dim">v1.0.0</tspan></text>
|
|
53
|
+
<text class="text white" font-size="15" y="212"> Context Augmentation & Reinforcement Layer</text>
|
|
54
|
+
|
|
55
|
+
<!-- Install output -->
|
|
56
|
+
<text class="text" font-size="15" y="260"><tspan class="green"> ✓</tspan><tspan class="white"> Installed hooks/vector-hook.py</tspan></text>
|
|
57
|
+
<text class="text" font-size="15" y="284"><tspan class="green"> ✓</tspan><tspan class="white"> Installed commands/vector</tspan></text>
|
|
58
|
+
<text class="text" font-size="15" y="308"><tspan class="green"> ✓</tspan><tspan class="white"> Added hook to settings.json</tspan></text>
|
|
59
|
+
|
|
60
|
+
<!-- Done message -->
|
|
61
|
+
<text class="text" font-size="15" y="356"><tspan class="green"> Done!</tspan><tspan class="white"> Restart Claude Code to activate.</tspan></text>
|
|
62
|
+
|
|
63
|
+
<!-- New prompt -->
|
|
64
|
+
<text class="text prompt" font-size="15" y="404">~</text>
|
|
65
|
+
<text class="text dim" font-size="15" x="16" y="404">$</text>
|
|
66
|
+
<text class="text white" font-size="15" x="36" y="404">▌</text>
|
|
67
|
+
</g>
|
|
68
|
+
</svg>
|
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const os = require('os');
|
|
6
|
+
const readline = require('readline');
|
|
7
|
+
const { execSync } = require('child_process');
|
|
8
|
+
|
|
9
|
+
// Colors (amber/orange theme like Claude Code)
|
|
10
|
+
const amber = '\x1b[38;5;214m';
|
|
11
|
+
const orange = '\x1b[38;5;208m';
|
|
12
|
+
const green = '\x1b[32m';
|
|
13
|
+
const yellow = '\x1b[33m';
|
|
14
|
+
const dim = '\x1b[2m';
|
|
15
|
+
const reset = '\x1b[0m';
|
|
16
|
+
|
|
17
|
+
// Get version from package.json
|
|
18
|
+
const pkg = require('../package.json');
|
|
19
|
+
|
|
20
|
+
const banner = `
|
|
21
|
+
${orange}██╗ ██╗███████╗ ██████╗████████╗ ██████╗ ██████╗
|
|
22
|
+
██║ ██║██╔════╝██╔════╝╚══██╔══╝██╔═══██╗██╔══██╗
|
|
23
|
+
██║ ██║█████╗ ██║ ██║ ██║ ██║██████╔╝
|
|
24
|
+
╚██╗ ██╔╝██╔══╝ ██║ ██║ ██║ ██║██╔══██╗
|
|
25
|
+
╚████╔╝ ███████╗╚██████╗ ██║ ╚██████╔╝██║ ██║
|
|
26
|
+
╚═══╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝${reset}
|
|
27
|
+
|
|
28
|
+
Vector ${dim}v${pkg.version}${reset}
|
|
29
|
+
Context Augmentation & Reinforcement Layer
|
|
30
|
+
`;
|
|
31
|
+
|
|
32
|
+
// Vector block for CLAUDE.md
|
|
33
|
+
const VECTOR_BLOCK = `<!-- Vector-MANAGED: Do not remove this section -->
|
|
34
|
+
## Vector Integration
|
|
35
|
+
|
|
36
|
+
Follow all rules in <vector-rules> blocks from system-reminders.
|
|
37
|
+
These are dynamically injected based on context and MUST be obeyed.
|
|
38
|
+
<!-- END Vector-MANAGED -->`;
|
|
39
|
+
|
|
40
|
+
// Parse args
|
|
41
|
+
const args = process.argv.slice(2);
|
|
42
|
+
const hasGlobal = args.includes('--global') || args.includes('-g');
|
|
43
|
+
const hasLocal = args.includes('--local') || args.includes('-l');
|
|
44
|
+
const hasHelp = args.includes('--help') || args.includes('-h');
|
|
45
|
+
const skipClaudeMd = args.includes('--skip-claude-md');
|
|
46
|
+
|
|
47
|
+
// Parse --config-dir argument
|
|
48
|
+
function parseConfigDirArg() {
|
|
49
|
+
const configDirIndex = args.findIndex(arg => arg === '--config-dir' || arg === '-c');
|
|
50
|
+
if (configDirIndex !== -1) {
|
|
51
|
+
const nextArg = args[configDirIndex + 1];
|
|
52
|
+
if (!nextArg || nextArg.startsWith('-')) {
|
|
53
|
+
console.error(` ${yellow}--config-dir requires a path argument${reset}`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
return nextArg;
|
|
57
|
+
}
|
|
58
|
+
const configDirArg = args.find(arg => arg.startsWith('--config-dir=') || arg.startsWith('-c='));
|
|
59
|
+
if (configDirArg) {
|
|
60
|
+
return configDirArg.split('=')[1];
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const explicitConfigDir = parseConfigDirArg();
|
|
65
|
+
|
|
66
|
+
console.log(banner);
|
|
67
|
+
|
|
68
|
+
// Show help if requested
|
|
69
|
+
if (hasHelp) {
|
|
70
|
+
console.log(` ${yellow}Usage:${reset} npx vector-core [options]
|
|
71
|
+
|
|
72
|
+
${yellow}Options:${reset}
|
|
73
|
+
${amber}-g, --global${reset} Install globally (to ~/.claude and ~/.vector)
|
|
74
|
+
${amber}-l, --local${reset} Install locally (to ./.claude and ./.vector)
|
|
75
|
+
${amber}-c, --config-dir <path>${reset} Specify custom Claude config directory
|
|
76
|
+
${amber}--skip-claude-md${reset} Don't modify CLAUDE.md
|
|
77
|
+
${amber}-h, --help${reset} Show this help message
|
|
78
|
+
|
|
79
|
+
${yellow}Examples:${reset}
|
|
80
|
+
${dim}# Interactive install${reset}
|
|
81
|
+
npx vector-core
|
|
82
|
+
|
|
83
|
+
${dim}# Install globally (recommended)${reset}
|
|
84
|
+
npx vector-core --global
|
|
85
|
+
|
|
86
|
+
${dim}# Install to current project only${reset}
|
|
87
|
+
npx vector-core --local
|
|
88
|
+
|
|
89
|
+
${yellow}What gets installed:${reset}
|
|
90
|
+
hooks/vector-hook.py - Rule injection hook (v2, JSON-based)
|
|
91
|
+
.vector/vector.json - Domain rules, decisions, config
|
|
92
|
+
.vector/vector-mcp/ - MCP server for runtime management
|
|
93
|
+
settings.json - Hook registration (merged)
|
|
94
|
+
.mcp.json - MCP server registration
|
|
95
|
+
CLAUDE.md - Vector integration block (optional)
|
|
96
|
+
|
|
97
|
+
${yellow}v1 Migration:${reset}
|
|
98
|
+
If upgrading from v1 (flat-file manifest), run:
|
|
99
|
+
${dim}bash node_modules/vector-core/bin/migrate-v1-to-v2.sh ~/.vector${reset}
|
|
100
|
+
`);
|
|
101
|
+
process.exit(0);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Expand ~ to home directory
|
|
106
|
+
*/
|
|
107
|
+
function expandTilde(filePath) {
|
|
108
|
+
if (filePath && filePath.startsWith('~/')) {
|
|
109
|
+
return path.join(os.homedir(), filePath.slice(2));
|
|
110
|
+
}
|
|
111
|
+
return filePath;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Recursively copy directory
|
|
116
|
+
*/
|
|
117
|
+
function copyDir(srcDir, destDir) {
|
|
118
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
119
|
+
|
|
120
|
+
const entries = fs.readdirSync(srcDir, { withFileTypes: true });
|
|
121
|
+
|
|
122
|
+
for (const entry of entries) {
|
|
123
|
+
const srcPath = path.join(srcDir, entry.name);
|
|
124
|
+
const destPath = path.join(destDir, entry.name);
|
|
125
|
+
|
|
126
|
+
if (entry.isDirectory()) {
|
|
127
|
+
copyDir(srcPath, destPath);
|
|
128
|
+
} else {
|
|
129
|
+
fs.copyFileSync(srcPath, destPath);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Wire hook into settings.json
|
|
136
|
+
*/
|
|
137
|
+
function wireHook(claudeDir, hookPath) {
|
|
138
|
+
const settingsPath = path.join(claudeDir, 'settings.json');
|
|
139
|
+
let settings = {};
|
|
140
|
+
|
|
141
|
+
// Read existing settings if present
|
|
142
|
+
if (fs.existsSync(settingsPath)) {
|
|
143
|
+
try {
|
|
144
|
+
settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
|
|
145
|
+
} catch (e) {
|
|
146
|
+
console.log(` ${yellow}Warning: Could not parse existing settings.json, creating new${reset}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Ensure hooks structure exists
|
|
151
|
+
if (!settings.hooks) {
|
|
152
|
+
settings.hooks = {};
|
|
153
|
+
}
|
|
154
|
+
if (!settings.hooks.UserPromptSubmit) {
|
|
155
|
+
settings.hooks.UserPromptSubmit = [];
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Normalize path to use forward slashes (works on all platforms)
|
|
159
|
+
const normalizedPath = hookPath.replace(/\\/g, '/');
|
|
160
|
+
const hookCommand = `python3 ${normalizedPath}`;
|
|
161
|
+
|
|
162
|
+
// Check if Vector hook already exists
|
|
163
|
+
const existingIndex = settings.hooks.UserPromptSubmit.findIndex(h => {
|
|
164
|
+
if (h.command && h.command.includes('vector-hook.py')) return true;
|
|
165
|
+
if (h.hooks && h.hooks.some(inner => inner.command && inner.command.includes('vector-hook.py'))) return true;
|
|
166
|
+
return false;
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
const newHookEntry = {
|
|
170
|
+
hooks: [
|
|
171
|
+
{
|
|
172
|
+
type: 'command',
|
|
173
|
+
command: hookCommand
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
if (existingIndex !== -1) {
|
|
179
|
+
settings.hooks.UserPromptSubmit[existingIndex] = newHookEntry;
|
|
180
|
+
console.log(` ${green}✓${reset} Updated hook in settings.json`);
|
|
181
|
+
} else {
|
|
182
|
+
settings.hooks.UserPromptSubmit.push(newHookEntry);
|
|
183
|
+
console.log(` ${green}✓${reset} Added hook to settings.json`);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Wire MCP server into .mcp.json at the workspace root
|
|
191
|
+
* MCPs go in .mcp.json, not settings.json
|
|
192
|
+
*/
|
|
193
|
+
function wireMcp(workspaceDir, mcpIndexPath) {
|
|
194
|
+
const mcpJsonPath = path.join(workspaceDir, '.mcp.json');
|
|
195
|
+
let mcpConfig = {};
|
|
196
|
+
|
|
197
|
+
if (fs.existsSync(mcpJsonPath)) {
|
|
198
|
+
try {
|
|
199
|
+
mcpConfig = JSON.parse(fs.readFileSync(mcpJsonPath, 'utf8'));
|
|
200
|
+
} catch (e) {
|
|
201
|
+
console.log(` ${yellow}Warning: Could not parse existing .mcp.json, creating new${reset}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (!mcpConfig.mcpServers) {
|
|
206
|
+
mcpConfig.mcpServers = {};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const normalizedPath = mcpIndexPath.replace(/\\/g, '/');
|
|
210
|
+
|
|
211
|
+
mcpConfig.mcpServers['vector-mcp'] = {
|
|
212
|
+
command: 'node',
|
|
213
|
+
args: [normalizedPath],
|
|
214
|
+
type: 'stdio'
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
fs.writeFileSync(mcpJsonPath, JSON.stringify(mcpConfig, null, 2));
|
|
218
|
+
console.log(` ${green}✓${reset} Wired vector-mcp in .mcp.json`);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Add Vector block to CLAUDE.md
|
|
223
|
+
*/
|
|
224
|
+
function addVectorBlock(claudeMdPath) {
|
|
225
|
+
let content = '';
|
|
226
|
+
let fileExists = fs.existsSync(claudeMdPath);
|
|
227
|
+
|
|
228
|
+
if (fileExists) {
|
|
229
|
+
content = fs.readFileSync(claudeMdPath, 'utf8');
|
|
230
|
+
|
|
231
|
+
const normalizedContent = content.replace(/\r\n/g, '\n');
|
|
232
|
+
if (normalizedContent.includes('<!-- Vector-MANAGED:')) {
|
|
233
|
+
console.log(` ${dim}Vector block already in CLAUDE.md${reset}`);
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
} else {
|
|
237
|
+
const parentDir = path.dirname(claudeMdPath);
|
|
238
|
+
if (!fs.existsSync(parentDir)) {
|
|
239
|
+
fs.mkdirSync(parentDir, { recursive: true });
|
|
240
|
+
}
|
|
241
|
+
content = `# Claude Code Configuration\n\n${VECTOR_BLOCK}\n`;
|
|
242
|
+
fs.writeFileSync(claudeMdPath, content);
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const lines = content.split(/\r?\n/);
|
|
247
|
+
let insertIndex = 0;
|
|
248
|
+
|
|
249
|
+
for (let i = 0; i < lines.length; i++) {
|
|
250
|
+
if (lines[i].startsWith('#')) {
|
|
251
|
+
insertIndex = i + 1;
|
|
252
|
+
while (insertIndex < lines.length && lines[insertIndex].trim() !== '' && !lines[insertIndex].startsWith('#')) {
|
|
253
|
+
insertIndex++;
|
|
254
|
+
}
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
lines.splice(insertIndex, 0, '', VECTOR_BLOCK, '');
|
|
260
|
+
fs.writeFileSync(claudeMdPath, lines.join('\n'));
|
|
261
|
+
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Install MCP server
|
|
267
|
+
*/
|
|
268
|
+
function installMcp(vectorDir, src) {
|
|
269
|
+
const mcpDest = path.join(vectorDir, 'vector-mcp');
|
|
270
|
+
const mcpSrc = path.join(src, 'mcp');
|
|
271
|
+
|
|
272
|
+
if (!fs.existsSync(mcpSrc)) {
|
|
273
|
+
console.log(` ${yellow}Warning: MCP source not found, skipping${reset}`);
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Copy MCP files
|
|
278
|
+
copyDir(mcpSrc, mcpDest);
|
|
279
|
+
console.log(` ${green}✓${reset} Installed vector-mcp`);
|
|
280
|
+
|
|
281
|
+
// Run npm install for MCP dependencies
|
|
282
|
+
try {
|
|
283
|
+
execSync('npm install --production --silent', {
|
|
284
|
+
cwd: mcpDest,
|
|
285
|
+
stdio: 'pipe'
|
|
286
|
+
});
|
|
287
|
+
console.log(` ${green}✓${reset} Installed MCP dependencies`);
|
|
288
|
+
} catch (e) {
|
|
289
|
+
console.log(` ${yellow}Warning: npm install failed for vector-mcp. Run manually:${reset}`);
|
|
290
|
+
console.log(` ${dim}cd ${mcpDest} && npm install${reset}`);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return path.join(mcpDest, 'index.js');
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Install to the specified directory
|
|
298
|
+
*/
|
|
299
|
+
function install(isGlobal, addToClaudeMd = true) {
|
|
300
|
+
const src = path.join(__dirname, '..');
|
|
301
|
+
const configDir = expandTilde(explicitConfigDir) || expandTilde(process.env.CLAUDE_CONFIG_DIR);
|
|
302
|
+
const defaultGlobalDir = configDir || path.join(os.homedir(), '.claude');
|
|
303
|
+
|
|
304
|
+
const claudeDir = isGlobal
|
|
305
|
+
? defaultGlobalDir
|
|
306
|
+
: path.join(process.cwd(), '.claude');
|
|
307
|
+
|
|
308
|
+
const vectorDir = isGlobal
|
|
309
|
+
? path.join(os.homedir(), '.accel', 'vector')
|
|
310
|
+
: path.join(process.cwd(), '.vector');
|
|
311
|
+
|
|
312
|
+
const locationLabel = isGlobal
|
|
313
|
+
? claudeDir.replace(os.homedir(), '~')
|
|
314
|
+
: claudeDir.replace(process.cwd(), '.');
|
|
315
|
+
|
|
316
|
+
const vectorLabel = isGlobal
|
|
317
|
+
? vectorDir.replace(os.homedir(), '~')
|
|
318
|
+
: vectorDir.replace(process.cwd(), '.');
|
|
319
|
+
|
|
320
|
+
console.log(` Installing to ${amber}${locationLabel}${reset} and ${amber}${vectorLabel}${reset}\n`);
|
|
321
|
+
|
|
322
|
+
// 1. Copy hook script
|
|
323
|
+
const hooksDir = path.join(claudeDir, 'hooks');
|
|
324
|
+
fs.mkdirSync(hooksDir, { recursive: true });
|
|
325
|
+
const hookSrc = path.join(src, 'hooks', 'vector-hook.py');
|
|
326
|
+
const hookDest = path.join(hooksDir, 'vector-hook.py');
|
|
327
|
+
fs.copyFileSync(hookSrc, hookDest);
|
|
328
|
+
fs.chmodSync(hookDest, '755');
|
|
329
|
+
console.log(` ${green}✓${reset} Installed hooks/vector-hook.py (v2)`);
|
|
330
|
+
|
|
331
|
+
// 2. Copy .vector-template to .vector (vector.json + sessions/)
|
|
332
|
+
const vectorTemplateSrc = path.join(src, '.vector-template');
|
|
333
|
+
if (!fs.existsSync(vectorDir)) {
|
|
334
|
+
copyDir(vectorTemplateSrc, vectorDir);
|
|
335
|
+
// Stamp the install date in vector.json
|
|
336
|
+
const vectorJsonPath = path.join(vectorDir, 'vector.json');
|
|
337
|
+
if (fs.existsSync(vectorJsonPath)) {
|
|
338
|
+
try {
|
|
339
|
+
const vectorJson = JSON.parse(fs.readFileSync(vectorJsonPath, 'utf8'));
|
|
340
|
+
vectorJson.last_modified = new Date().toISOString();
|
|
341
|
+
fs.writeFileSync(vectorJsonPath, JSON.stringify(vectorJson, null, 2));
|
|
342
|
+
} catch (e) {
|
|
343
|
+
// Non-critical, continue
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
console.log(` ${green}✓${reset} Created ${vectorLabel}/vector.json`);
|
|
347
|
+
} else if (!fs.existsSync(path.join(vectorDir, 'vector.json'))) {
|
|
348
|
+
// .vector/ exists but no vector.json — v1 user, copy template
|
|
349
|
+
const vectorJsonSrc = path.join(vectorTemplateSrc, 'vector.json');
|
|
350
|
+
const vectorJsonDest = path.join(vectorDir, 'vector.json');
|
|
351
|
+
fs.copyFileSync(vectorJsonSrc, vectorJsonDest);
|
|
352
|
+
console.log(` ${green}✓${reset} Added vector.json to existing ${vectorLabel}`);
|
|
353
|
+
console.log(` ${yellow}Note: Existing v1 files detected. Run migrate-v1-to-v2.sh to convert.${reset}`);
|
|
354
|
+
} else {
|
|
355
|
+
console.log(` ${dim}${vectorLabel}/vector.json already exists, skipping${reset}`);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// 3. Install MCP server
|
|
359
|
+
const mcpIndexPath = installMcp(vectorDir, src);
|
|
360
|
+
|
|
361
|
+
// 4. Wire hook into settings.json
|
|
362
|
+
wireHook(claudeDir, hookDest);
|
|
363
|
+
|
|
364
|
+
// 5. Wire MCP into .mcp.json (at workspace root, not settings.json)
|
|
365
|
+
if (mcpIndexPath) {
|
|
366
|
+
const mcpRoot = isGlobal ? os.homedir() : process.cwd();
|
|
367
|
+
wireMcp(mcpRoot, mcpIndexPath);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// 6. Add Vector block to CLAUDE.md (if requested)
|
|
371
|
+
if (addToClaudeMd && !skipClaudeMd) {
|
|
372
|
+
const claudeMdPath = path.join(claudeDir, 'CLAUDE.md');
|
|
373
|
+
if (addVectorBlock(claudeMdPath)) {
|
|
374
|
+
console.log(` ${green}✓${reset} Added Vector block to CLAUDE.md`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
console.log(`
|
|
379
|
+
${green}Done!${reset} Restart Claude Code to activate.
|
|
380
|
+
|
|
381
|
+
${amber}What's installed:${reset}
|
|
382
|
+
${dim}${vectorLabel}/vector.json${reset} - Your rules, decisions, and config
|
|
383
|
+
${dim}${vectorLabel}/vector-mcp/${reset} - MCP server for runtime management
|
|
384
|
+
${dim}${locationLabel}/hooks/${reset} - Rule injection hook
|
|
385
|
+
|
|
386
|
+
${amber}MCP tools available:${reset}
|
|
387
|
+
${dim}vector_v2_list_domains${reset} - View all domains
|
|
388
|
+
${dim}vector_v2_add_rule${reset} - Add a rule to a domain
|
|
389
|
+
${dim}vector_v2_log_decision${reset} - Log a decision
|
|
390
|
+
|
|
391
|
+
${amber}Upgrading from v1?${reset}
|
|
392
|
+
${dim}bash node_modules/vector-core/bin/migrate-v1-to-v2.sh ${vectorLabel}${reset}
|
|
393
|
+
`);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Prompt for install location
|
|
398
|
+
*/
|
|
399
|
+
function promptLocation() {
|
|
400
|
+
const rl = readline.createInterface({
|
|
401
|
+
input: process.stdin,
|
|
402
|
+
output: process.stdout
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
const configDir = expandTilde(explicitConfigDir) || expandTilde(process.env.CLAUDE_CONFIG_DIR);
|
|
406
|
+
const globalPath = configDir || path.join(os.homedir(), '.claude');
|
|
407
|
+
const globalLabel = globalPath.replace(os.homedir(), '~');
|
|
408
|
+
|
|
409
|
+
console.log(` ${yellow}Where would you like to install?${reset}
|
|
410
|
+
|
|
411
|
+
${amber}1${reset}) Global ${dim}(${globalLabel} + ~/.accel/vector)${reset} - available in all projects
|
|
412
|
+
${amber}2${reset}) Local ${dim}(./.claude + ./.vector)${reset} - this project only
|
|
413
|
+
`);
|
|
414
|
+
|
|
415
|
+
rl.question(` Choice ${dim}[1]${reset}: `, (answer) => {
|
|
416
|
+
rl.close();
|
|
417
|
+
const choice = answer.trim() || '1';
|
|
418
|
+
const isGlobal = choice !== '2';
|
|
419
|
+
|
|
420
|
+
// Ask about CLAUDE.md modification
|
|
421
|
+
const rl2 = readline.createInterface({
|
|
422
|
+
input: process.stdin,
|
|
423
|
+
output: process.stdout
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
console.log(`
|
|
427
|
+
${yellow}Add Vector integration block to CLAUDE.md?${reset}
|
|
428
|
+
${dim}This helps Claude recognize and follow Vector rules.${reset}
|
|
429
|
+
|
|
430
|
+
${amber}1${reset}) Yes ${dim}(recommended)${reset}
|
|
431
|
+
${amber}2${reset}) No, I'll add it manually
|
|
432
|
+
`);
|
|
433
|
+
|
|
434
|
+
rl2.question(` Choice ${dim}[1]${reset}: `, (answer2) => {
|
|
435
|
+
rl2.close();
|
|
436
|
+
const addBlock = (answer2.trim() || '1') !== '2';
|
|
437
|
+
install(isGlobal, addBlock);
|
|
438
|
+
});
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// Main
|
|
443
|
+
if (hasGlobal && hasLocal) {
|
|
444
|
+
console.error(` ${yellow}Cannot specify both --global and --local${reset}`);
|
|
445
|
+
process.exit(1);
|
|
446
|
+
} else if (explicitConfigDir && hasLocal) {
|
|
447
|
+
console.error(` ${yellow}Cannot use --config-dir with --local${reset}`);
|
|
448
|
+
process.exit(1);
|
|
449
|
+
} else if (hasGlobal) {
|
|
450
|
+
install(true, !skipClaudeMd);
|
|
451
|
+
} else if (hasLocal) {
|
|
452
|
+
install(false, !skipClaudeMd);
|
|
453
|
+
} else {
|
|
454
|
+
promptLocation();
|
|
455
|
+
}
|