forge-server 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/.claude/hooks/worktree-create.sh +64 -0
- package/.claude/hooks/worktree-remove.sh +57 -0
- package/.claude/settings.local.json +29 -0
- package/.forge/knowledge/conventions.yaml +1 -0
- package/.forge/knowledge/decisions.yaml +1 -0
- package/.forge/knowledge/gotchas.yaml +1 -0
- package/.forge/knowledge/patterns.yaml +1 -0
- package/.forge/manifest.yaml +6 -0
- package/CLAUDE.md +144 -0
- package/bin/setup-forge.sh +132 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +553 -0
- package/dist/cli.js.map +1 -0
- package/dist/context/codebase.d.ts +57 -0
- package/dist/context/codebase.d.ts.map +1 -0
- package/dist/context/codebase.js +301 -0
- package/dist/context/codebase.js.map +1 -0
- package/dist/context/injector.d.ts +147 -0
- package/dist/context/injector.d.ts.map +1 -0
- package/dist/context/injector.js +533 -0
- package/dist/context/injector.js.map +1 -0
- package/dist/context/memory.d.ts +32 -0
- package/dist/context/memory.d.ts.map +1 -0
- package/dist/context/memory.js +140 -0
- package/dist/context/memory.js.map +1 -0
- package/dist/context/session-index.d.ts +54 -0
- package/dist/context/session-index.d.ts.map +1 -0
- package/dist/context/session-index.js +265 -0
- package/dist/context/session-index.js.map +1 -0
- package/dist/context/session.d.ts +42 -0
- package/dist/context/session.d.ts.map +1 -0
- package/dist/context/session.js +121 -0
- package/dist/context/session.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/ingestion/chunker.d.ts +19 -0
- package/dist/ingestion/chunker.d.ts.map +1 -0
- package/dist/ingestion/chunker.js +189 -0
- package/dist/ingestion/chunker.js.map +1 -0
- package/dist/ingestion/embedder.d.ts +45 -0
- package/dist/ingestion/embedder.d.ts.map +1 -0
- package/dist/ingestion/embedder.js +152 -0
- package/dist/ingestion/embedder.js.map +1 -0
- package/dist/ingestion/git-analyzer.d.ts +77 -0
- package/dist/ingestion/git-analyzer.d.ts.map +1 -0
- package/dist/ingestion/git-analyzer.js +437 -0
- package/dist/ingestion/git-analyzer.js.map +1 -0
- package/dist/ingestion/indexer.d.ts +79 -0
- package/dist/ingestion/indexer.d.ts.map +1 -0
- package/dist/ingestion/indexer.js +766 -0
- package/dist/ingestion/indexer.js.map +1 -0
- package/dist/ingestion/markdown-chunker.d.ts +19 -0
- package/dist/ingestion/markdown-chunker.d.ts.map +1 -0
- package/dist/ingestion/markdown-chunker.js +243 -0
- package/dist/ingestion/markdown-chunker.js.map +1 -0
- package/dist/ingestion/markdown-knowledge.d.ts +21 -0
- package/dist/ingestion/markdown-knowledge.d.ts.map +1 -0
- package/dist/ingestion/markdown-knowledge.js +129 -0
- package/dist/ingestion/markdown-knowledge.js.map +1 -0
- package/dist/ingestion/parser.d.ts +20 -0
- package/dist/ingestion/parser.d.ts.map +1 -0
- package/dist/ingestion/parser.js +429 -0
- package/dist/ingestion/parser.js.map +1 -0
- package/dist/ingestion/watcher.d.ts +28 -0
- package/dist/ingestion/watcher.d.ts.map +1 -0
- package/dist/ingestion/watcher.js +147 -0
- package/dist/ingestion/watcher.js.map +1 -0
- package/dist/knowledge/hydrator.d.ts +37 -0
- package/dist/knowledge/hydrator.d.ts.map +1 -0
- package/dist/knowledge/hydrator.js +220 -0
- package/dist/knowledge/hydrator.js.map +1 -0
- package/dist/knowledge/registry.d.ts +129 -0
- package/dist/knowledge/registry.d.ts.map +1 -0
- package/dist/knowledge/registry.js +361 -0
- package/dist/knowledge/registry.js.map +1 -0
- package/dist/knowledge/search.d.ts +114 -0
- package/dist/knowledge/search.d.ts.map +1 -0
- package/dist/knowledge/search.js +428 -0
- package/dist/knowledge/search.js.map +1 -0
- package/dist/knowledge/store.d.ts +76 -0
- package/dist/knowledge/store.d.ts.map +1 -0
- package/dist/knowledge/store.js +230 -0
- package/dist/knowledge/store.js.map +1 -0
- package/dist/learning/confidence.d.ts +30 -0
- package/dist/learning/confidence.d.ts.map +1 -0
- package/dist/learning/confidence.js +165 -0
- package/dist/learning/confidence.js.map +1 -0
- package/dist/learning/patterns.d.ts +52 -0
- package/dist/learning/patterns.d.ts.map +1 -0
- package/dist/learning/patterns.js +290 -0
- package/dist/learning/patterns.js.map +1 -0
- package/dist/learning/trajectory.d.ts +55 -0
- package/dist/learning/trajectory.d.ts.map +1 -0
- package/dist/learning/trajectory.js +200 -0
- package/dist/learning/trajectory.js.map +1 -0
- package/dist/memory/memory-compat.d.ts +100 -0
- package/dist/memory/memory-compat.d.ts.map +1 -0
- package/dist/memory/memory-compat.js +146 -0
- package/dist/memory/memory-compat.js.map +1 -0
- package/dist/memory/observation-store.d.ts +57 -0
- package/dist/memory/observation-store.d.ts.map +1 -0
- package/dist/memory/observation-store.js +154 -0
- package/dist/memory/observation-store.js.map +1 -0
- package/dist/memory/session-tracker.d.ts +81 -0
- package/dist/memory/session-tracker.d.ts.map +1 -0
- package/dist/memory/session-tracker.js +262 -0
- package/dist/memory/session-tracker.js.map +1 -0
- package/dist/pipeline/engine.d.ts +179 -0
- package/dist/pipeline/engine.d.ts.map +1 -0
- package/dist/pipeline/engine.js +691 -0
- package/dist/pipeline/engine.js.map +1 -0
- package/dist/pipeline/events.d.ts +54 -0
- package/dist/pipeline/events.d.ts.map +1 -0
- package/dist/pipeline/events.js +157 -0
- package/dist/pipeline/events.js.map +1 -0
- package/dist/pipeline/parallel.d.ts +83 -0
- package/dist/pipeline/parallel.d.ts.map +1 -0
- package/dist/pipeline/parallel.js +277 -0
- package/dist/pipeline/parallel.js.map +1 -0
- package/dist/pipeline/state-machine.d.ts +65 -0
- package/dist/pipeline/state-machine.d.ts.map +1 -0
- package/dist/pipeline/state-machine.js +176 -0
- package/dist/pipeline/state-machine.js.map +1 -0
- package/dist/query/graph-queries.d.ts +84 -0
- package/dist/query/graph-queries.d.ts.map +1 -0
- package/dist/query/graph-queries.js +216 -0
- package/dist/query/graph-queries.js.map +1 -0
- package/dist/query/hybrid-search.d.ts +34 -0
- package/dist/query/hybrid-search.d.ts.map +1 -0
- package/dist/query/hybrid-search.js +263 -0
- package/dist/query/hybrid-search.js.map +1 -0
- package/dist/query/intent-detector.d.ts +35 -0
- package/dist/query/intent-detector.d.ts.map +1 -0
- package/dist/query/intent-detector.js +115 -0
- package/dist/query/intent-detector.js.map +1 -0
- package/dist/query/ranking.d.ts +57 -0
- package/dist/query/ranking.d.ts.map +1 -0
- package/dist/query/ranking.js +109 -0
- package/dist/query/ranking.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +291 -0
- package/dist/server.js.map +1 -0
- package/dist/storage/falkordb-store.d.ts +73 -0
- package/dist/storage/falkordb-store.d.ts.map +1 -0
- package/dist/storage/falkordb-store.js +346 -0
- package/dist/storage/falkordb-store.js.map +1 -0
- package/dist/storage/file-cache.d.ts +32 -0
- package/dist/storage/file-cache.d.ts.map +1 -0
- package/dist/storage/file-cache.js +115 -0
- package/dist/storage/file-cache.js.map +1 -0
- package/dist/storage/interfaces.d.ts +151 -0
- package/dist/storage/interfaces.d.ts.map +1 -0
- package/dist/storage/interfaces.js +7 -0
- package/dist/storage/interfaces.js.map +1 -0
- package/dist/storage/qdrant-store.d.ts +110 -0
- package/dist/storage/qdrant-store.d.ts.map +1 -0
- package/dist/storage/qdrant-store.js +467 -0
- package/dist/storage/qdrant-store.js.map +1 -0
- package/dist/storage/schema.d.ts +4 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +136 -0
- package/dist/storage/schema.js.map +1 -0
- package/dist/storage/sqlite.d.ts +35 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +132 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/tools/collaboration-tools.d.ts +111 -0
- package/dist/tools/collaboration-tools.d.ts.map +1 -0
- package/dist/tools/collaboration-tools.js +174 -0
- package/dist/tools/collaboration-tools.js.map +1 -0
- package/dist/tools/context-tools.d.ts +293 -0
- package/dist/tools/context-tools.d.ts.map +1 -0
- package/dist/tools/context-tools.js +437 -0
- package/dist/tools/context-tools.js.map +1 -0
- package/dist/tools/graph-tools.d.ts +129 -0
- package/dist/tools/graph-tools.d.ts.map +1 -0
- package/dist/tools/graph-tools.js +237 -0
- package/dist/tools/graph-tools.js.map +1 -0
- package/dist/tools/ingestion-tools.d.ts +96 -0
- package/dist/tools/ingestion-tools.d.ts.map +1 -0
- package/dist/tools/ingestion-tools.js +90 -0
- package/dist/tools/ingestion-tools.js.map +1 -0
- package/dist/tools/learning-tools.d.ts +168 -0
- package/dist/tools/learning-tools.d.ts.map +1 -0
- package/dist/tools/learning-tools.js +158 -0
- package/dist/tools/learning-tools.js.map +1 -0
- package/dist/tools/memory-tools.d.ts +183 -0
- package/dist/tools/memory-tools.d.ts.map +1 -0
- package/dist/tools/memory-tools.js +197 -0
- package/dist/tools/memory-tools.js.map +1 -0
- package/dist/tools/phase-tools.d.ts +954 -0
- package/dist/tools/phase-tools.d.ts.map +1 -0
- package/dist/tools/phase-tools.js +1215 -0
- package/dist/tools/phase-tools.js.map +1 -0
- package/dist/tools/pipeline-tools.d.ts +140 -0
- package/dist/tools/pipeline-tools.d.ts.map +1 -0
- package/dist/tools/pipeline-tools.js +162 -0
- package/dist/tools/pipeline-tools.js.map +1 -0
- package/dist/tools/registration-tools.d.ts +220 -0
- package/dist/tools/registration-tools.d.ts.map +1 -0
- package/dist/tools/registration-tools.js +391 -0
- package/dist/tools/registration-tools.js.map +1 -0
- package/dist/util/circuit-breaker.d.ts +75 -0
- package/dist/util/circuit-breaker.d.ts.map +1 -0
- package/dist/util/circuit-breaker.js +159 -0
- package/dist/util/circuit-breaker.js.map +1 -0
- package/dist/util/config.d.ts +23 -0
- package/dist/util/config.d.ts.map +1 -0
- package/dist/util/config.js +164 -0
- package/dist/util/config.js.map +1 -0
- package/dist/util/logger.d.ts +13 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +45 -0
- package/dist/util/logger.js.map +1 -0
- package/dist/util/token-counter.d.ts +24 -0
- package/dist/util/token-counter.d.ts.map +1 -0
- package/dist/util/token-counter.js +48 -0
- package/dist/util/token-counter.js.map +1 -0
- package/dist/util/types.d.ts +525 -0
- package/dist/util/types.d.ts.map +1 -0
- package/dist/util/types.js +5 -0
- package/dist/util/types.js.map +1 -0
- package/docker-compose.yml +20 -0
- package/docs/plans/2026-02-27-swarm-coordination/architecture.md +203 -0
- package/docs/plans/2026-02-27-swarm-coordination/vision.md +57 -0
- package/docs/plans/completed/2026-02-26-forge-plugin-bundling/architecture.md +1 -0
- package/docs/plans/completed/2026-02-26-forge-plugin-bundling/vision.md +300 -0
- package/docs/plans/completed/2026-02-27-forge-swarm-learning/architecture.md +480 -0
- package/docs/plans/completed/2026-02-27-forge-swarm-learning/verification-checklist.md +462 -0
- package/docs/plans/completed/2026-02-27-git-history-atlassian/git-jira-plan.md +181 -0
- package/package.json +39 -0
- package/plugin/.claude-plugin/plugin.json +8 -0
- package/plugin/.mcp.json +15 -0
- package/plugin/README.md +134 -0
- package/plugin/agents/architect.md +367 -0
- package/plugin/agents/backend-specialist.md +263 -0
- package/plugin/agents/brainstormer.md +122 -0
- package/plugin/agents/data-specialist.md +266 -0
- package/plugin/agents/designer.md +408 -0
- package/plugin/agents/frontend-specialist.md +241 -0
- package/plugin/agents/inspector.md +406 -0
- package/plugin/agents/knowledge-keeper.md +443 -0
- package/plugin/agents/platform-engineer.md +326 -0
- package/plugin/agents/product-manager.md +268 -0
- package/plugin/agents/product-owner.md +438 -0
- package/plugin/agents/pulse-checker.md +73 -0
- package/plugin/agents/qa-strategist.md +500 -0
- package/plugin/agents/self-improver.md +310 -0
- package/plugin/agents/strategist.md +360 -0
- package/plugin/agents/supervisor.md +380 -0
- package/plugin/commands/brainstorm.md +25 -0
- package/plugin/commands/forge.md +88 -0
- package/plugin/docs/atlassian-integration.md +110 -0
- package/plugin/docs/workflow.md +126 -0
- package/plugin/skills/agent-development/.skillfish.json +10 -0
- package/plugin/skills/agent-development/SKILL.md +415 -0
- package/plugin/skills/agent-development/examples/agent-creation-prompt.md +238 -0
- package/plugin/skills/agent-development/examples/complete-agent-examples.md +427 -0
- package/plugin/skills/agent-development/references/agent-creation-system-prompt.md +207 -0
- package/plugin/skills/agent-development/references/system-prompt-design.md +411 -0
- package/plugin/skills/agent-development/references/triggering-examples.md +491 -0
- package/plugin/skills/agent-development/scripts/validate-agent.sh +217 -0
- package/plugin/skills/agent-handoff/SKILL.md +335 -0
- package/plugin/skills/anti-stub/SKILL.md +317 -0
- package/plugin/skills/brainstorm/SKILL.md +31 -0
- package/plugin/skills/debugging/SKILL.md +276 -0
- package/plugin/skills/fix/SKILL.md +62 -0
- package/plugin/skills/frontend-design/.skillfish.json +10 -0
- package/plugin/skills/frontend-design/SKILL.md +42 -0
- package/plugin/skills/gotchas/SKILL.md +61 -0
- package/plugin/skills/graph-orchestrator/SKILL.md +38 -0
- package/plugin/skills/history/SKILL.md +58 -0
- package/plugin/skills/impact/SKILL.md +59 -0
- package/plugin/skills/implementation-execution/SKILL.md +291 -0
- package/plugin/skills/index-repo/SKILL.md +55 -0
- package/plugin/skills/interviewing/SKILL.md +225 -0
- package/plugin/skills/knowledge-curation/SKILL.md +393 -0
- package/plugin/skills/learn/SKILL.md +69 -0
- package/plugin/skills/mcp-integration/.skillfish.json +10 -0
- package/plugin/skills/mcp-integration/SKILL.md +554 -0
- package/plugin/skills/mcp-integration/examples/http-server.json +20 -0
- package/plugin/skills/mcp-integration/examples/sse-server.json +19 -0
- package/plugin/skills/mcp-integration/examples/stdio-server.json +26 -0
- package/plugin/skills/mcp-integration/references/authentication.md +549 -0
- package/plugin/skills/mcp-integration/references/server-types.md +536 -0
- package/plugin/skills/mcp-integration/references/tool-usage.md +538 -0
- package/plugin/skills/nestjs/.skillfish.json +10 -0
- package/plugin/skills/nestjs/SKILL.md +669 -0
- package/plugin/skills/nestjs/drizzle-reference.md +1894 -0
- package/plugin/skills/nestjs/reference.md +1447 -0
- package/plugin/skills/nestjs/workflow-optimization.md +229 -0
- package/plugin/skills/parallel-dispatch/SKILL.md +308 -0
- package/plugin/skills/project-discovery/SKILL.md +304 -0
- package/plugin/skills/search/SKILL.md +56 -0
- package/plugin/skills/security-audit/SKILL.md +362 -0
- package/plugin/skills/skill-development/.skillfish.json +10 -0
- package/plugin/skills/skill-development/SKILL.md +637 -0
- package/plugin/skills/skill-development/references/skill-creator-original.md +209 -0
- package/plugin/skills/tdd/SKILL.md +273 -0
- package/plugin/skills/terminal-presentation/SKILL.md +395 -0
- package/plugin/skills/test-strategy/SKILL.md +365 -0
- package/plugin/skills/verification-protocol/SKILL.md +256 -0
- package/plugin/skills/visual-explainer/CHANGELOG.md +97 -0
- package/plugin/skills/visual-explainer/LICENSE +21 -0
- package/plugin/skills/visual-explainer/README.md +137 -0
- package/plugin/skills/visual-explainer/SKILL.md +352 -0
- package/plugin/skills/visual-explainer/banner.png +0 -0
- package/plugin/skills/visual-explainer/package.json +11 -0
- package/plugin/skills/visual-explainer/prompts/diff-review.md +68 -0
- package/plugin/skills/visual-explainer/prompts/fact-check.md +63 -0
- package/plugin/skills/visual-explainer/prompts/generate-slides.md +18 -0
- package/plugin/skills/visual-explainer/prompts/generate-web-diagram.md +10 -0
- package/plugin/skills/visual-explainer/prompts/plan-review.md +86 -0
- package/plugin/skills/visual-explainer/prompts/project-recap.md +61 -0
- package/plugin/skills/visual-explainer/references/css-patterns.md +1188 -0
- package/plugin/skills/visual-explainer/references/libraries.md +470 -0
- package/plugin/skills/visual-explainer/references/responsive-nav.md +212 -0
- package/plugin/skills/visual-explainer/references/slide-patterns.md +1403 -0
- package/plugin/skills/visual-explainer/templates/architecture.html +596 -0
- package/plugin/skills/visual-explainer/templates/data-table.html +540 -0
- package/plugin/skills/visual-explainer/templates/mermaid-flowchart.html +435 -0
- package/plugin/skills/visual-explainer/templates/slide-deck.html +913 -0
- package/src/cli.ts +655 -0
- package/src/context/.gitkeep +0 -0
- package/src/context/codebase.ts +393 -0
- package/src/context/injector.ts +797 -0
- package/src/context/memory.ts +187 -0
- package/src/context/session-index.ts +327 -0
- package/src/context/session.ts +152 -0
- package/src/index.ts +47 -0
- package/src/ingestion/.gitkeep +0 -0
- package/src/ingestion/chunker.ts +277 -0
- package/src/ingestion/embedder.ts +167 -0
- package/src/ingestion/git-analyzer.ts +545 -0
- package/src/ingestion/indexer.ts +984 -0
- package/src/ingestion/markdown-chunker.ts +337 -0
- package/src/ingestion/markdown-knowledge.ts +175 -0
- package/src/ingestion/parser.ts +475 -0
- package/src/ingestion/watcher.ts +182 -0
- package/src/knowledge/.gitkeep +0 -0
- package/src/knowledge/hydrator.ts +246 -0
- package/src/knowledge/registry.ts +463 -0
- package/src/knowledge/search.ts +565 -0
- package/src/knowledge/store.ts +262 -0
- package/src/learning/.gitkeep +0 -0
- package/src/learning/confidence.ts +193 -0
- package/src/learning/patterns.ts +360 -0
- package/src/learning/trajectory.ts +268 -0
- package/src/memory/.gitkeep +0 -0
- package/src/memory/memory-compat.ts +233 -0
- package/src/memory/observation-store.ts +224 -0
- package/src/memory/session-tracker.ts +332 -0
- package/src/pipeline/.gitkeep +0 -0
- package/src/pipeline/engine.ts +1139 -0
- package/src/pipeline/events.ts +253 -0
- package/src/pipeline/parallel.ts +394 -0
- package/src/pipeline/state-machine.ts +199 -0
- package/src/query/.gitkeep +0 -0
- package/src/query/graph-queries.ts +262 -0
- package/src/query/hybrid-search.ts +337 -0
- package/src/query/intent-detector.ts +131 -0
- package/src/query/ranking.ts +161 -0
- package/src/server.ts +352 -0
- package/src/storage/.gitkeep +0 -0
- package/src/storage/falkordb-store.ts +388 -0
- package/src/storage/file-cache.ts +141 -0
- package/src/storage/interfaces.ts +201 -0
- package/src/storage/qdrant-store.ts +557 -0
- package/src/storage/schema.ts +139 -0
- package/src/storage/sqlite.ts +168 -0
- package/src/tools/.gitkeep +0 -0
- package/src/tools/collaboration-tools.ts +208 -0
- package/src/tools/context-tools.ts +493 -0
- package/src/tools/graph-tools.ts +295 -0
- package/src/tools/ingestion-tools.ts +122 -0
- package/src/tools/learning-tools.ts +181 -0
- package/src/tools/memory-tools.ts +234 -0
- package/src/tools/phase-tools.ts +1452 -0
- package/src/tools/pipeline-tools.ts +188 -0
- package/src/tools/registration-tools.ts +450 -0
- package/src/util/.gitkeep +0 -0
- package/src/util/circuit-breaker.ts +193 -0
- package/src/util/config.ts +177 -0
- package/src/util/logger.ts +53 -0
- package/src/util/token-counter.ts +52 -0
- package/src/util/types.ts +710 -0
- package/tests/context/.gitkeep +0 -0
- package/tests/integration/.gitkeep +0 -0
- package/tests/knowledge/.gitkeep +0 -0
- package/tests/learning/.gitkeep +0 -0
- package/tests/pipeline/.gitkeep +0 -0
- package/tests/tools/.gitkeep +0 -0
- package/tsconfig.json +21 -0
- package/vitest.config.ts +10 -0
- package/vscode-extension/.vscodeignore +7 -0
- package/vscode-extension/README.md +43 -0
- package/vscode-extension/out/edge-collector.js +274 -0
- package/vscode-extension/out/edge-collector.js.map +1 -0
- package/vscode-extension/out/extension.js +264 -0
- package/vscode-extension/out/extension.js.map +1 -0
- package/vscode-extension/out/forge-client.js +318 -0
- package/vscode-extension/out/forge-client.js.map +1 -0
- package/vscode-extension/package-lock.json +59 -0
- package/vscode-extension/package.json +71 -0
- package/vscode-extension/src/edge-collector.ts +320 -0
- package/vscode-extension/src/extension.ts +269 -0
- package/vscode-extension/src/forge-client.ts +364 -0
- package/vscode-extension/tsconfig.json +19 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# WorktreeCreate hook for Claude Code agent isolation.
|
|
3
|
+
# Receives JSON on stdin with a "name" field.
|
|
4
|
+
# Must print the absolute path to the created worktree on stdout.
|
|
5
|
+
# All other output must go to stderr to avoid corrupting the path.
|
|
6
|
+
#
|
|
7
|
+
# This hook is necessary because Claude Code's internal git repo detection
|
|
8
|
+
# can fail on Windows (reports "not in a git repository" even when .git exists
|
|
9
|
+
# and git commands work). By providing explicit WorktreeCreate/WorktreeRemove
|
|
10
|
+
# hooks, we bypass the detection issue entirely.
|
|
11
|
+
|
|
12
|
+
set -euo pipefail
|
|
13
|
+
|
|
14
|
+
# Read JSON input from stdin
|
|
15
|
+
INPUT=$(cat)
|
|
16
|
+
|
|
17
|
+
# Extract fields using node (jq is not available on all Windows systems)
|
|
18
|
+
NAME=$(echo "$INPUT" | node -e "let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{try{console.log(JSON.parse(d).name||'')}catch(e){console.log('')}})")
|
|
19
|
+
CWD=$(echo "$INPUT" | node -e "let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{try{console.log(JSON.parse(d).cwd||'')}catch(e){console.log('')}})")
|
|
20
|
+
|
|
21
|
+
if [ -z "$NAME" ]; then
|
|
22
|
+
echo "Error: no 'name' field in WorktreeCreate input" >&2
|
|
23
|
+
exit 1
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
if [ -z "$CWD" ]; then
|
|
27
|
+
CWD="$(pwd)"
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Resolve the git toplevel from the cwd
|
|
31
|
+
REPO_ROOT=$(cd "$CWD" && git rev-parse --show-toplevel 2>/dev/null)
|
|
32
|
+
if [ -z "$REPO_ROOT" ]; then
|
|
33
|
+
echo "Error: could not find git repo root from cwd=$CWD" >&2
|
|
34
|
+
exit 1
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
# Create the worktree directory under .claude/worktrees/
|
|
38
|
+
WORKTREE_DIR="$REPO_ROOT/.claude/worktrees/$NAME"
|
|
39
|
+
|
|
40
|
+
# Create a new branch for this worktree based on HEAD
|
|
41
|
+
BRANCH_NAME="worktree/$NAME"
|
|
42
|
+
|
|
43
|
+
# Clean up any stale worktree or branch with the same name
|
|
44
|
+
if [ -d "$WORKTREE_DIR" ]; then
|
|
45
|
+
echo "Cleaning up stale worktree at $WORKTREE_DIR" >&2
|
|
46
|
+
cd "$REPO_ROOT"
|
|
47
|
+
git worktree remove --force "$WORKTREE_DIR" 2>/dev/null || rm -rf "$WORKTREE_DIR"
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
# Remove stale branch if it exists (from a previous failed run)
|
|
51
|
+
cd "$REPO_ROOT"
|
|
52
|
+
if git rev-parse --verify "$BRANCH_NAME" >/dev/null 2>&1; then
|
|
53
|
+
git branch -D "$BRANCH_NAME" >&2 2>/dev/null || true
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# Prune stale worktree entries
|
|
57
|
+
git worktree prune >&2 2>/dev/null || true
|
|
58
|
+
|
|
59
|
+
# Create the worktree with a new branch
|
|
60
|
+
echo "Creating worktree: $WORKTREE_DIR (branch: $BRANCH_NAME)" >&2
|
|
61
|
+
git worktree add -b "$BRANCH_NAME" "$WORKTREE_DIR" HEAD >&2
|
|
62
|
+
|
|
63
|
+
# Print the absolute path to stdout (this is what Claude Code reads)
|
|
64
|
+
echo "$WORKTREE_DIR"
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# WorktreeRemove hook for Claude Code agent isolation.
|
|
3
|
+
# Receives JSON on stdin with a "worktree_path" field (the path that
|
|
4
|
+
# WorktreeCreate printed on stdout).
|
|
5
|
+
# No output is required. Failures are logged in debug mode only.
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
# Read JSON input from stdin
|
|
10
|
+
INPUT=$(cat)
|
|
11
|
+
|
|
12
|
+
# Extract fields using node (jq is not available on all Windows systems)
|
|
13
|
+
WORKTREE_PATH=$(echo "$INPUT" | node -e "let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{try{console.log(JSON.parse(d).worktree_path||'')}catch(e){console.log('')}})")
|
|
14
|
+
CWD=$(echo "$INPUT" | node -e "let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{try{console.log(JSON.parse(d).cwd||'')}catch(e){console.log('')}})")
|
|
15
|
+
|
|
16
|
+
if [ -z "$WORKTREE_PATH" ]; then
|
|
17
|
+
echo "Warning: no 'worktree_path' in WorktreeRemove input" >&2
|
|
18
|
+
exit 0
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
# Check if the worktree directory exists
|
|
22
|
+
if [ ! -d "$WORKTREE_PATH" ]; then
|
|
23
|
+
echo "Worktree directory does not exist, nothing to remove: $WORKTREE_PATH" >&2
|
|
24
|
+
exit 0
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# Extract the worktree name from the path to derive the branch name
|
|
28
|
+
NAME=$(basename "$WORKTREE_PATH")
|
|
29
|
+
BRANCH_NAME="worktree/$NAME"
|
|
30
|
+
|
|
31
|
+
# Find the main repo root from cwd or by walking up from worktree path
|
|
32
|
+
if [ -n "$CWD" ]; then
|
|
33
|
+
REPO_ROOT=$(cd "$CWD" && git rev-parse --show-toplevel 2>/dev/null || echo "$CWD")
|
|
34
|
+
else
|
|
35
|
+
# Worktree is at REPO_ROOT/.claude/worktrees/NAME
|
|
36
|
+
REPO_ROOT=$(dirname "$(dirname "$(dirname "$WORKTREE_PATH")")")
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
echo "Removing worktree: $WORKTREE_PATH" >&2
|
|
40
|
+
|
|
41
|
+
# Remove the worktree using git
|
|
42
|
+
cd "$REPO_ROOT" 2>/dev/null || true
|
|
43
|
+
git worktree remove --force "$WORKTREE_PATH" 2>&2 || {
|
|
44
|
+
echo "git worktree remove failed, falling back to rm -rf" >&2
|
|
45
|
+
rm -rf "$WORKTREE_PATH"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# Prune stale worktree entries
|
|
49
|
+
git worktree prune 2>&2 || true
|
|
50
|
+
|
|
51
|
+
# Clean up the branch
|
|
52
|
+
if git rev-parse --verify "$BRANCH_NAME" >/dev/null 2>&1; then
|
|
53
|
+
echo "Removing branch: $BRANCH_NAME" >&2
|
|
54
|
+
git branch -D "$BRANCH_NAME" 2>&2 || true
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
echo "Worktree removed successfully: $WORKTREE_PATH" >&2
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(cp:*)"
|
|
5
|
+
]
|
|
6
|
+
},
|
|
7
|
+
"hooks": {
|
|
8
|
+
"WorktreeCreate": [
|
|
9
|
+
{
|
|
10
|
+
"hooks": [
|
|
11
|
+
{
|
|
12
|
+
"type": "command",
|
|
13
|
+
"command": "bash .claude/hooks/worktree-create.sh"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"WorktreeRemove": [
|
|
19
|
+
{
|
|
20
|
+
"hooks": [
|
|
21
|
+
{
|
|
22
|
+
"type": "command",
|
|
23
|
+
"command": "bash .claude/hooks/worktree-remove.sh"
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# dominKnow | Forge — dk-forge-server
|
|
2
|
+
|
|
3
|
+
## Identity
|
|
4
|
+
|
|
5
|
+
| Context | Value |
|
|
6
|
+
|---------|-------|
|
|
7
|
+
| Display | dominKnow \| Forge |
|
|
8
|
+
| Kebab/Package | dk-forge-server |
|
|
9
|
+
| MCP server name | dk-forge |
|
|
10
|
+
| MCP tool prefix | mcp\_\_dk-forge\_\_* |
|
|
11
|
+
| Chunk marker | [dk-forge] |
|
|
12
|
+
| Plugin name | dk-forge |
|
|
13
|
+
| CLI binary | forge |
|
|
14
|
+
| DB path | ~/.forge/pipeline.db |
|
|
15
|
+
|
|
16
|
+
## Architecture
|
|
17
|
+
|
|
18
|
+
- **MCP server** (TypeScript, ESM) — 34 MCP tools: pipeline, knowledge, context, memory, graph, collaboration, ingestion, git context
|
|
19
|
+
- **2-way query engine**: agents pull context (semantic search, impact graphs, git hotspots) AND push learnings back (observations, broadcasts, confidence boosts)
|
|
20
|
+
- **Claude Code plugin** (`plugin/`) — 16 agents, 20+ skills, /forge and /brainstorm commands, auto-starts MCP server
|
|
21
|
+
- **VS Code extension** (`vscode-extension/`) — forge-lsp-bridge, feeds type-resolved call/reference edges from TS language server into forge graph
|
|
22
|
+
- **Atlassian integration** (optional, plugin-level) — mcp-atlassian server declared in `.mcp.json`, 7 agent prompts have optional Jira context sections
|
|
23
|
+
- **5-signal scoring**: vector similarity + graph centrality + recency decay + hotspot frequency + observation count (intent-dependent weights)
|
|
24
|
+
- **Storage**: SQLite (pipeline state), Qdrant (vectors + git_commits), FalkorDB (graph, optional)
|
|
25
|
+
- Server entry: `src/server.ts` → `SERVER_NAME = 'dk-forge'`
|
|
26
|
+
- Plugin MCP config: `plugin/.mcp.json` → key `"dk-forge"`
|
|
27
|
+
- Plugin metadata: `plugin/.claude-plugin/plugin.json` → name `"dk-forge"`
|
|
28
|
+
|
|
29
|
+
## Key Directories
|
|
30
|
+
|
|
31
|
+
- `src/pipeline/` — Pipeline engine and state machine
|
|
32
|
+
- `src/tools/` — MCP tool handlers (registration, pipeline, knowledge, context, memory, graph, collaboration, ingestion)
|
|
33
|
+
- `src/knowledge/` — Knowledge base (registry, search, hydration)
|
|
34
|
+
- `src/ingestion/` — Indexing, chunking, embedding
|
|
35
|
+
- `src/storage/` — Qdrant, FalkorDB, SQLite, file cache
|
|
36
|
+
- `plugin/agents/` — 16 specialized agent prompts (see Agent Roster below)
|
|
37
|
+
- `plugin/skills/` — 20+ forge-specific skills
|
|
38
|
+
- `plugin/commands/` — /forge and /brainstorm slash commands
|
|
39
|
+
- `plugin/docs/` — Workflow documentation
|
|
40
|
+
- `vscode-extension/` — forge-lsp-bridge VS Code extension (LSP edge ingestion)
|
|
41
|
+
- `docs/plans/` — Plan documents (active plans at root, archived in `completed/`)
|
|
42
|
+
|
|
43
|
+
## Tool Categories (34 total)
|
|
44
|
+
|
|
45
|
+
| Category | Tools | File |
|
|
46
|
+
|----------|-------|------|
|
|
47
|
+
| Registration | register, init, list_repos, get_manifest, index_repo, get_index_status | registration-tools.ts |
|
|
48
|
+
| Pipeline | create_project, get_state, start_*/submit_* phase tools | pipeline-tools.ts, phase-tools.ts |
|
|
49
|
+
| Knowledge | search_knowledge, get_patterns, get_gotchas | learning-tools.ts |
|
|
50
|
+
| Context | get_codebase_context, get_git_context | context-tools.ts |
|
|
51
|
+
| Memory | save_observation, search_memory, get_session_context | memory-tools.ts |
|
|
52
|
+
| Graph | get_impact_graph, search_logic_flow | graph-tools.ts |
|
|
53
|
+
| Collaboration | broadcast_finding, get_broadcasts | collaboration-tools.ts |
|
|
54
|
+
| Ingestion | submit_lsp_edges | ingestion-tools.ts |
|
|
55
|
+
| Confidence | boost_knowledge, decay_knowledge | learning-tools.ts |
|
|
56
|
+
|
|
57
|
+
## Tool Routing — MANDATORY for Indexed Repos
|
|
58
|
+
|
|
59
|
+
When working in a repo that has been registered and indexed with Forge (`register` + `index_repo`), **ALWAYS prefer Forge tools over built-in Claude Code tools**:
|
|
60
|
+
|
|
61
|
+
| Instead of... | Use Forge tool | Why |
|
|
62
|
+
|---------------|---------------|-----|
|
|
63
|
+
| `Grep` / `Glob` for code search | `get_codebase_context` | 5-signal ranked results (vector + graph + recency + hotspot + observations) vs raw text match |
|
|
64
|
+
| `Grep` for "who uses X" | `get_impact_graph` | Traverses actual call/import graph, not just string occurrences |
|
|
65
|
+
| `git log` for history | `get_git_context` | Semantic search over commit messages, hotspot analysis, file change velocity |
|
|
66
|
+
| Searching CLAUDE.md for past learnings | `search_memory` | Searches all persisted observations across sessions with vector similarity |
|
|
67
|
+
| Guessing at patterns | `get_patterns` / `get_gotchas` | Curated, confidence-scored knowledge from past pipeline runs |
|
|
68
|
+
| Ad-hoc file reading for context | `search_knowledge` | Searches curated knowledge items (gotchas, patterns, decisions, conventions) |
|
|
69
|
+
|
|
70
|
+
**When to still use built-in tools**: Reading a specific known file path (`Read`), writing/editing files (`Edit`/`Write`), running shell commands (`Bash`), or when the repo is NOT indexed.
|
|
71
|
+
|
|
72
|
+
## Agent Roster (16 agents)
|
|
73
|
+
|
|
74
|
+
| Agent | Role | Model | Phase |
|
|
75
|
+
|-------|------|-------|-------|
|
|
76
|
+
| brainstormer | Pre-pipeline creative exploration | opus | Pre-pipeline |
|
|
77
|
+
| strategist | Vision holder, user advocate | opus | Interview |
|
|
78
|
+
| product-manager | Structured requirements | sonnet | Requirements |
|
|
79
|
+
| architect | System design, tech decisions | opus | Architecture |
|
|
80
|
+
| designer | XD/UX, design system, component contracts | opus | Design |
|
|
81
|
+
| qa-strategist | Test plan, Playwright E2E strategy | sonnet | QA Strategy |
|
|
82
|
+
| backend-specialist | NestJS modules, API implementation | sonnet | Implementation |
|
|
83
|
+
| frontend-specialist | React/MUI UI implementation | sonnet | Implementation |
|
|
84
|
+
| data-specialist | Schema, migrations, seed data | sonnet | Implementation |
|
|
85
|
+
| platform-engineer | IaC, CI/CD, Docker, K8s | sonnet | Implementation |
|
|
86
|
+
| inspector | Code verification, anti-stub, security | opus | Inspection |
|
|
87
|
+
| product-owner | Run product (curl + Playwright), generate tests | sonnet | Acceptance |
|
|
88
|
+
| pulse-checker | Lightweight drift detection | haiku | Advisory checkpoint |
|
|
89
|
+
| supervisor | Dynamic orchestration, routing | sonnet | All phases |
|
|
90
|
+
| knowledge-keeper | Persist project learnings to CLAUDE.md / docs | sonnet | Exit debrief + on-demand |
|
|
91
|
+
| self-improver | Introspect and improve Forge itself | opus | Exit debrief + on-demand |
|
|
92
|
+
|
|
93
|
+
## Mesh Intelligence Architecture (2026-02-28)
|
|
94
|
+
|
|
95
|
+
The pipeline operates as a **mesh intelligence system**, not a linear conveyor belt:
|
|
96
|
+
|
|
97
|
+
- **Advisory Context Injection**: Vision/architecture/design summaries auto-injected into every downstream phase via `src/context/injector.ts`
|
|
98
|
+
- **Tiered Advisory Checkpoints**: Haiku pulse check (cheap) → Full Opus review (only on drift). Managed by Supervisor.
|
|
99
|
+
- **Consult Protocol**: Specialists broadcast with `target_agents` when hitting decisions outside their authority
|
|
100
|
+
- **Auto Knowledge Extraction**: Server-side regex in `src/tools/phase-tools.ts` extracts gotchas/patterns/decisions from phase outputs — zero LLM tokens
|
|
101
|
+
- **Session Context Index**: `src/context/session-index.ts` — virtual memory for LLM context, offloads to Qdrant via session-scoped semantic search
|
|
102
|
+
- **Code-Over-Prose Protocol**: All agents use TypeScript interfaces instead of prose descriptions (55-87% token reduction)
|
|
103
|
+
- **Collaborative Exit Debrief**: After Product Owner acceptance testing, 6 agents review in parallel: 4 advisory agents (Strategist, Architect, Designer, QA Strategist) + Knowledge Keeper (project learnings) + Self-Improver (Forge system learnings)
|
|
104
|
+
- **Self-Improvement Loop**: Knowledge Keeper detects recurring patterns → triggers Self-Improver → Self-Improver modifies agent prompts, writes skills, proposes pipeline changes → Forge gets smarter over time
|
|
105
|
+
|
|
106
|
+
### Full Pipeline Flow
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
Brainstormer (optional) → Strategist → Architect + Designer (parallel)
|
|
110
|
+
→ QA Strategist → Implementation Specialists (parallel)
|
|
111
|
+
→ Advisory Checkpoint (pulse check) → Inspector
|
|
112
|
+
→ Product Owner (acceptance testing)
|
|
113
|
+
→ Collaborative Exit Debrief (6 agents parallel:
|
|
114
|
+
Strategist + Architect + Designer + QA Strategist
|
|
115
|
+
+ Knowledge Keeper + Self-Improver)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Parallel Dispatch — MANDATORY for Pipeline
|
|
119
|
+
|
|
120
|
+
When the Forge pipeline reaches implementation phase with multiple modules:
|
|
121
|
+
1. **Dispatch ALL specialist agents simultaneously** using parallel `Task` tool calls in a single message
|
|
122
|
+
2. **Never serialize independent modules** — if modules A, B, C have no dependencies, launch all 3 at once
|
|
123
|
+
3. **Architect + Designer run in parallel** — they are parallel phase pairs, dispatch both simultaneously
|
|
124
|
+
4. After parallel agents complete, merge results, then dispatch Inspector
|
|
125
|
+
5. After Inspector passes, dispatch Product Owner for acceptance testing
|
|
126
|
+
6. After Product Owner completes, dispatch all 6 exit debrief agents in parallel (4 advisors + Knowledge Keeper + Self-Improver)
|
|
127
|
+
|
|
128
|
+
## Rebrand History
|
|
129
|
+
|
|
130
|
+
- **2026-02-27**: Renamed from `forge-pipeline-server` / `mcp__forge__*` to `dk-forge-server` / `mcp__dk-forge__*`. See `docs/plans/completed/` for historical docs that still reference old names.
|
|
131
|
+
|
|
132
|
+
## Build
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
npm run build # tsc → dist/
|
|
136
|
+
npm run dev # tsx watch
|
|
137
|
+
npm test # vitest
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`dist/` is committed to git for zero-build plugin install.
|
|
141
|
+
|
|
142
|
+
## Worktree Hooks (Windows)
|
|
143
|
+
|
|
144
|
+
Claude Code's git repo detection fails on Windows for freshly-initialized repos, breaking `isolation: worktree`. Fix: add WorktreeCreate/WorktreeRemove hooks in `.claude/settings.local.json` pointing to `.claude/hooks/worktree-create.sh` and `.claude/hooks/worktree-remove.sh`. Restart session after adding hooks. Use `general-purpose` agent type to bypass auto-worktree when needed.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# ──────────────────────────────────────────────────────────────
|
|
3
|
+
# dominKnow | Forge — Plugin Setup
|
|
4
|
+
#
|
|
5
|
+
# 1. Copies plugin files (markdown) to ~/.claude/plugins/forge/
|
|
6
|
+
# 2. Installs MCP server (npm global or local fallback)
|
|
7
|
+
#
|
|
8
|
+
# Works on macOS, Linux, and Windows (Git Bash / MSYS2).
|
|
9
|
+
#
|
|
10
|
+
# Usage: ./bin/setup-forge.sh # install or update
|
|
11
|
+
# ./bin/setup-forge.sh --remove # uninstall
|
|
12
|
+
# ──────────────────────────────────────────────────────────────
|
|
13
|
+
|
|
14
|
+
set -euo pipefail
|
|
15
|
+
|
|
16
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
17
|
+
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
18
|
+
PLUGIN_SRC="$REPO_DIR/plugin"
|
|
19
|
+
INSTALL_DIR="$HOME/.claude/plugins/forge"
|
|
20
|
+
PKG_NAME="dk-forge-server"
|
|
21
|
+
|
|
22
|
+
# ── Preflight ────────────────────────────────────────────────
|
|
23
|
+
|
|
24
|
+
if ! command -v node &>/dev/null; then
|
|
25
|
+
echo "ERROR: Node.js is required but not installed."
|
|
26
|
+
echo ""
|
|
27
|
+
echo "Install Node.js:"
|
|
28
|
+
echo " macOS: brew install node"
|
|
29
|
+
echo " Linux: curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash - && sudo apt install -y nodejs"
|
|
30
|
+
echo " Windows: https://nodejs.org/en/download"
|
|
31
|
+
echo ""
|
|
32
|
+
echo "Then re-run this script."
|
|
33
|
+
exit 1
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
if ! command -v npm &>/dev/null; then
|
|
37
|
+
echo "ERROR: npm is required but not installed."
|
|
38
|
+
echo "npm comes with Node.js — reinstall Node.js from https://nodejs.org"
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# ── Helpers ──────────────────────────────────────────────────
|
|
43
|
+
|
|
44
|
+
remove_dir() {
|
|
45
|
+
local dir="$1"
|
|
46
|
+
if [[ -L "$dir" ]] || [[ -d "$dir" ]]; then
|
|
47
|
+
rm -rf "$dir" 2>/dev/null || {
|
|
48
|
+
if command -v cmd.exe &>/dev/null; then
|
|
49
|
+
cmd.exe /c "rmdir /s /q \"$(cygpath -w "$dir")\"" 2>/dev/null || true
|
|
50
|
+
fi
|
|
51
|
+
}
|
|
52
|
+
fi
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# ── Uninstall ────────────────────────────────────────────────
|
|
56
|
+
|
|
57
|
+
if [[ "${1:-}" == "--remove" ]]; then
|
|
58
|
+
echo "Removing Forge plugin..."
|
|
59
|
+
remove_dir "$INSTALL_DIR"
|
|
60
|
+
npm uninstall -g "$PKG_NAME" 2>/dev/null || true
|
|
61
|
+
echo "Done. Restart Claude Code."
|
|
62
|
+
exit 0
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
# ── Install / Update ─────────────────────────────────────────
|
|
66
|
+
|
|
67
|
+
echo "Installing Forge plugin..."
|
|
68
|
+
|
|
69
|
+
# 1. Copy plugin files (agents, skills, commands — all markdown)
|
|
70
|
+
mkdir -p "$HOME/.claude/plugins"
|
|
71
|
+
remove_dir "$INSTALL_DIR"
|
|
72
|
+
cp -r "$PLUGIN_SRC" "$INSTALL_DIR"
|
|
73
|
+
echo " Plugin files copied"
|
|
74
|
+
|
|
75
|
+
# 2. Install MCP server
|
|
76
|
+
echo " Installing MCP server..."
|
|
77
|
+
if npm view "$PKG_NAME" version &>/dev/null; then
|
|
78
|
+
# Published on npm — install from registry
|
|
79
|
+
npm install -g "$PKG_NAME" 2>&1 | tail -1
|
|
80
|
+
echo " Installed $PKG_NAME from npm"
|
|
81
|
+
else
|
|
82
|
+
# Not on npm yet — install from local repo
|
|
83
|
+
if [[ -f "$REPO_DIR/package.json" ]]; then
|
|
84
|
+
# Build if dist/ is missing
|
|
85
|
+
if [[ ! -f "$REPO_DIR/dist/index.js" ]]; then
|
|
86
|
+
echo " Building from source..."
|
|
87
|
+
(cd "$REPO_DIR" && npm install && npm run build)
|
|
88
|
+
fi
|
|
89
|
+
(cd "$REPO_DIR" && npm install -g . 2>&1 | tail -1)
|
|
90
|
+
echo " Installed $PKG_NAME from local repo"
|
|
91
|
+
else
|
|
92
|
+
echo " WARNING: $PKG_NAME not on npm and no local repo found"
|
|
93
|
+
echo " MCP server not installed — tools won't work"
|
|
94
|
+
fi
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
# ── Verify ───────────────────────────────────────────────────
|
|
98
|
+
|
|
99
|
+
ERRORS=0
|
|
100
|
+
|
|
101
|
+
if [[ ! -f "$INSTALL_DIR/.claude-plugin/plugin.json" ]]; then
|
|
102
|
+
echo ""
|
|
103
|
+
echo "ERROR: Plugin files missing — plugin.json not found"
|
|
104
|
+
ERRORS=1
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
if ! command -v "$PKG_NAME" &>/dev/null; then
|
|
108
|
+
echo ""
|
|
109
|
+
echo "WARNING: $PKG_NAME not found in PATH"
|
|
110
|
+
echo " MCP tools won't work until the server is installed."
|
|
111
|
+
echo " Try: cd $REPO_DIR && npm install -g ."
|
|
112
|
+
ERRORS=1
|
|
113
|
+
fi
|
|
114
|
+
|
|
115
|
+
if [[ "$ERRORS" -eq 0 ]]; then
|
|
116
|
+
echo ""
|
|
117
|
+
echo "Forge installed successfully"
|
|
118
|
+
echo ""
|
|
119
|
+
echo "Restart Claude Code to activate. Skills:"
|
|
120
|
+
echo " /forge Start a development pipeline"
|
|
121
|
+
echo " /search AI-ranked code search"
|
|
122
|
+
echo " /impact Dependency & call graph analysis"
|
|
123
|
+
echo " /history Git intelligence & hotspots"
|
|
124
|
+
echo " /gotchas Known pitfalls & patterns"
|
|
125
|
+
echo " /learn Save or search project learnings"
|
|
126
|
+
echo " /fix Auto-fix current changes"
|
|
127
|
+
echo " /brainstorm Creative exploration"
|
|
128
|
+
echo " /index-repo Register & index a repo"
|
|
129
|
+
echo ""
|
|
130
|
+
echo "To update: re-run this script"
|
|
131
|
+
echo "To remove: ./bin/setup-forge.sh --remove"
|
|
132
|
+
fi
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|