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,533 @@
|
|
|
1
|
+
// ContextInjector — B6
|
|
2
|
+
//
|
|
3
|
+
// The central orchestrator for phase-start context assembly.
|
|
4
|
+
// Called by every forge.start_* tool handler before returning to the agent.
|
|
5
|
+
//
|
|
6
|
+
// For each phase, the injector:
|
|
7
|
+
// 1. Looks up the project and its repo from SQLite
|
|
8
|
+
// 2. Reads the repo's stack tags
|
|
9
|
+
// 3. Searches knowledge relevant to this phase
|
|
10
|
+
// 4. Gets codebase context when architecturally useful (architecture, implementation)
|
|
11
|
+
// 5. Gets memories from recent sessions when relevant
|
|
12
|
+
// 6. Reads previous phase outputs from SQLite
|
|
13
|
+
// 7. Assembles and returns the typed context object
|
|
14
|
+
//
|
|
15
|
+
// Every method handles unavailable backends gracefully and NEVER throws —
|
|
16
|
+
// a missing Qdrant or FalkorDB must not block a phase from starting.
|
|
17
|
+
import { logger } from '../util/logger.js';
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// ContextInjector
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
export class ContextInjector {
|
|
22
|
+
knowledgeSearch;
|
|
23
|
+
codebaseContext;
|
|
24
|
+
memoryBridge;
|
|
25
|
+
db;
|
|
26
|
+
// CACHE-FRIENDLY ORDERING PRINCIPLE:
|
|
27
|
+
// All context injection methods emit fields from MOST STABLE to MOST VOLATILE.
|
|
28
|
+
// This maximizes Anthropic's automatic prompt caching — cached prefix tokens
|
|
29
|
+
// get a 90% input cost discount. Stable content (conventions, gotchas, advisory
|
|
30
|
+
// summaries) comes first and stays cached across agent dispatches. Volatile
|
|
31
|
+
// content (broadcasts, per-module code) comes last.
|
|
32
|
+
confidenceManager;
|
|
33
|
+
vectorStore;
|
|
34
|
+
constructor(knowledgeSearch, codebaseContext, memoryBridge, db, confidenceManager, vectorStore) {
|
|
35
|
+
this.knowledgeSearch = knowledgeSearch;
|
|
36
|
+
this.codebaseContext = codebaseContext;
|
|
37
|
+
this.memoryBridge = memoryBridge;
|
|
38
|
+
this.db = db;
|
|
39
|
+
this.confidenceManager = confidenceManager;
|
|
40
|
+
this.vectorStore = vectorStore;
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Fire-and-forget confidence boost for knowledge items returned by searches.
|
|
44
|
+
// NEVER blocks the caller — errors are logged and swallowed.
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
boostKnowledgeResults(results) {
|
|
47
|
+
if (!this.confidenceManager || !this.vectorStore)
|
|
48
|
+
return;
|
|
49
|
+
const cm = this.confidenceManager;
|
|
50
|
+
const vs = this.vectorStore;
|
|
51
|
+
for (const result of results) {
|
|
52
|
+
cm.boost(vs, result.id).catch((err) => {
|
|
53
|
+
logger.debug('ContextInjector.boostKnowledgeResults: boost failed (non-fatal)', {
|
|
54
|
+
id: result.id,
|
|
55
|
+
error: String(err),
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Broadcast injection helper.
|
|
62
|
+
// Retrieves recent agent broadcasts for a project from observations.
|
|
63
|
+
// Used to enrich phase context with cross-agent findings.
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
async getRecentBroadcasts(projectId, limit = 5) {
|
|
66
|
+
if (!this.vectorStore)
|
|
67
|
+
return [];
|
|
68
|
+
try {
|
|
69
|
+
const filter = {
|
|
70
|
+
must: [
|
|
71
|
+
{ key: 'category', match: { value: 'agent_broadcast' } },
|
|
72
|
+
{ key: 'tags', match: { value: projectId } },
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
const results = await this.vectorStore.filterObservations(filter, limit);
|
|
76
|
+
return results.map((r) => {
|
|
77
|
+
const payload = r.payload;
|
|
78
|
+
return {
|
|
79
|
+
content: payload['content'] ?? '',
|
|
80
|
+
severity: payload['importance'] >= 0.7 ? 'critical' : payload['importance'] >= 0.5 ? 'warning' : 'info',
|
|
81
|
+
created_at: payload['created_at'] ?? 0,
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
logger.debug('ContextInjector.getRecentBroadcasts: failed (non-fatal)', { error: String(err) });
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// Advisory context (shared across implementation + inspection phases)
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
async injectAdvisoryContext(projectId) {
|
|
94
|
+
const defaultCtx = {
|
|
95
|
+
visionSummary: '',
|
|
96
|
+
architectureSummary: '',
|
|
97
|
+
designSummary: '',
|
|
98
|
+
activeDirectives: [],
|
|
99
|
+
};
|
|
100
|
+
try {
|
|
101
|
+
// Get phase outputs for vision, architecture, design
|
|
102
|
+
const phases = ['interview', 'architecture', 'design'];
|
|
103
|
+
const summaries = {};
|
|
104
|
+
for (const phase of phases) {
|
|
105
|
+
const row = this.db.get(`SELECT content FROM phase_outputs WHERE project_id = ? AND phase = ? ORDER BY created_at DESC LIMIT 1`, [projectId, phase]);
|
|
106
|
+
summaries[phase] = row ? row.content.slice(0, 1500) : '';
|
|
107
|
+
}
|
|
108
|
+
// Get active advisory directives from observations
|
|
109
|
+
let activeDirectives = [];
|
|
110
|
+
if (this.vectorStore) {
|
|
111
|
+
try {
|
|
112
|
+
const filter = {
|
|
113
|
+
must: [
|
|
114
|
+
{ key: 'category', match: { value: 'advisory_checkpoint' } },
|
|
115
|
+
{ key: 'tags', match: { value: projectId } },
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
const results = await this.vectorStore.filterObservations(filter, 10);
|
|
119
|
+
activeDirectives = results.map((r) => {
|
|
120
|
+
const payload = r.payload;
|
|
121
|
+
return {
|
|
122
|
+
content: payload['content'] ?? '',
|
|
123
|
+
from: (payload['tags'] ?? []).find(t => t !== projectId && t !== 'advisory_checkpoint') ?? 'unknown',
|
|
124
|
+
created_at: payload['created_at'] ?? 0,
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
logger.debug('injectAdvisoryContext: directive search failed (non-fatal)', { error: String(err) });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
visionSummary: summaries['interview'] ?? '',
|
|
134
|
+
architectureSummary: summaries['architecture'] ?? '',
|
|
135
|
+
designSummary: summaries['design'] ?? '',
|
|
136
|
+
activeDirectives,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
logger.debug('injectAdvisoryContext: failed (non-fatal)', { error: String(err) });
|
|
141
|
+
return defaultCtx;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// ---------------------------------------------------------------------------
|
|
145
|
+
// Interview phase
|
|
146
|
+
// ---------------------------------------------------------------------------
|
|
147
|
+
async injectInterviewContext(projectId, initialRequest) {
|
|
148
|
+
const { project, repo } = this.loadProjectAndRepo(projectId);
|
|
149
|
+
const stackTags = repo ? parseStack(repo.stack) : [];
|
|
150
|
+
const query = initialRequest ?? project?.name ?? 'project';
|
|
151
|
+
// Search for relevant gotchas related to the request
|
|
152
|
+
const gotchas = await this.knowledgeSearch.searchGotchas(query, {
|
|
153
|
+
stackTags,
|
|
154
|
+
limit: 5,
|
|
155
|
+
minConfidence: 0.4,
|
|
156
|
+
});
|
|
157
|
+
// Fire-and-forget confidence boost for consumed knowledge
|
|
158
|
+
this.boostKnowledgeResults(gotchas);
|
|
159
|
+
// Search memories for similar past projects
|
|
160
|
+
const memories = await this.memoryBridge.searchMemories(`project similar to: ${query}`, { repoId: repo?.id, limit: 5 });
|
|
161
|
+
// Derive similar projects from memories that look like project summaries
|
|
162
|
+
const similarProjects = memories
|
|
163
|
+
.filter((m) => m.content.length > 30)
|
|
164
|
+
.slice(0, 3)
|
|
165
|
+
.map((m, i) => ({
|
|
166
|
+
name: `Past project ${i + 1}`,
|
|
167
|
+
repo: repo?.name ?? 'unknown',
|
|
168
|
+
relevance: m.relevanceScore,
|
|
169
|
+
outcome: m.content.slice(0, 120),
|
|
170
|
+
}));
|
|
171
|
+
return {
|
|
172
|
+
similarProjects,
|
|
173
|
+
relevantGotchas: gotchas.map((g) => ({
|
|
174
|
+
title: g.title,
|
|
175
|
+
content: g.content,
|
|
176
|
+
confidence: g.confidence,
|
|
177
|
+
sourceRepo: g.source_repo,
|
|
178
|
+
})),
|
|
179
|
+
interviewTemplate: buildInterviewTemplate(stackTags),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
// ---------------------------------------------------------------------------
|
|
183
|
+
// Architecture phase
|
|
184
|
+
// ---------------------------------------------------------------------------
|
|
185
|
+
async injectArchitectureContext(projectId, visionSummary) {
|
|
186
|
+
const { project, repo } = this.loadProjectAndRepo(projectId);
|
|
187
|
+
const stackTags = repo ? parseStack(repo.stack) : [];
|
|
188
|
+
const query = visionSummary ?? project?.name ?? 'architecture';
|
|
189
|
+
// Run knowledge search and codebase context in parallel
|
|
190
|
+
const [decisions, gotchas, codebaseResult] = await Promise.all([
|
|
191
|
+
this.knowledgeSearch.searchDecisions(query, {
|
|
192
|
+
stackTags,
|
|
193
|
+
limit: 5,
|
|
194
|
+
minConfidence: 0.4,
|
|
195
|
+
}),
|
|
196
|
+
this.knowledgeSearch.searchGotchas(query, {
|
|
197
|
+
stackTags,
|
|
198
|
+
limit: 5,
|
|
199
|
+
minConfidence: 0.4,
|
|
200
|
+
}),
|
|
201
|
+
repo
|
|
202
|
+
? this.codebaseContext.getContext(query, {
|
|
203
|
+
repoId: repo.id,
|
|
204
|
+
detail: 'skeleton',
|
|
205
|
+
maxResults: 8,
|
|
206
|
+
maxTokens: 3000,
|
|
207
|
+
})
|
|
208
|
+
: Promise.resolve(null),
|
|
209
|
+
]);
|
|
210
|
+
// Fire-and-forget confidence boost for consumed knowledge
|
|
211
|
+
this.boostKnowledgeResults(decisions);
|
|
212
|
+
this.boostKnowledgeResults(gotchas);
|
|
213
|
+
// Build a coarse module list from skeleton file paths
|
|
214
|
+
const modules = (codebaseResult?.pivotFiles ?? []).map((f) => ({
|
|
215
|
+
name: basename(f.filePath),
|
|
216
|
+
path: f.filePath,
|
|
217
|
+
purpose: f.matchReason,
|
|
218
|
+
}));
|
|
219
|
+
// Derive patterns and dependencies from skeleton content
|
|
220
|
+
const skeletonContent = (codebaseResult?.supportingSkeletons ?? [])
|
|
221
|
+
.map((s) => s.skeleton)
|
|
222
|
+
.join('\n');
|
|
223
|
+
const patterns = extractPatterns(skeletonContent, stackTags);
|
|
224
|
+
const dependencies = extractDependencies(skeletonContent);
|
|
225
|
+
// Stack constraints come from the manifest stack tags
|
|
226
|
+
const stackConstraints = stackTags.map((tag) => `Stack: ${tag} — apply ${tag}-specific patterns and gotchas`);
|
|
227
|
+
return {
|
|
228
|
+
codebaseContext: {
|
|
229
|
+
modules,
|
|
230
|
+
patterns,
|
|
231
|
+
dependencies,
|
|
232
|
+
fileCount: codebaseResult?.pivotFiles.length ?? 0,
|
|
233
|
+
},
|
|
234
|
+
relevantDecisions: decisions.map((d) => ({
|
|
235
|
+
title: d.title,
|
|
236
|
+
content: d.content,
|
|
237
|
+
confidence: d.confidence,
|
|
238
|
+
sourceRepo: d.source_repo,
|
|
239
|
+
})),
|
|
240
|
+
relevantGotchas: gotchas.map((g) => ({
|
|
241
|
+
title: g.title,
|
|
242
|
+
content: g.content,
|
|
243
|
+
stackTags: g.stack_tags,
|
|
244
|
+
confidence: g.confidence,
|
|
245
|
+
})),
|
|
246
|
+
stackConstraints,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
// ---------------------------------------------------------------------------
|
|
250
|
+
// Implementation phase (per-module)
|
|
251
|
+
// ---------------------------------------------------------------------------
|
|
252
|
+
async injectImplementationContext(projectId, modules) {
|
|
253
|
+
const { repo } = this.loadProjectAndRepo(projectId);
|
|
254
|
+
const stackTags = repo ? parseStack(repo.stack) : [];
|
|
255
|
+
// Fetch project-wide broadcasts once (shared across all modules)
|
|
256
|
+
const recentBroadcasts = await this.getRecentBroadcasts(projectId, 15);
|
|
257
|
+
// Fetch advisory context once (shared across all modules)
|
|
258
|
+
const advisory = await this.injectAdvisoryContext(projectId);
|
|
259
|
+
const result = {};
|
|
260
|
+
// Process each module, fanning out searches in parallel
|
|
261
|
+
await Promise.all(modules.map(async (mod) => {
|
|
262
|
+
const query = `${mod.agentType} ${mod.name}`;
|
|
263
|
+
const [gotchas, conventions, code] = await Promise.all([
|
|
264
|
+
this.knowledgeSearch.searchGotchas(query, {
|
|
265
|
+
stackTags,
|
|
266
|
+
limit: 4,
|
|
267
|
+
minConfidence: 0.4,
|
|
268
|
+
}),
|
|
269
|
+
this.knowledgeSearch.searchConventions(query, {
|
|
270
|
+
stackTags,
|
|
271
|
+
limit: 3,
|
|
272
|
+
minConfidence: 0.3,
|
|
273
|
+
}),
|
|
274
|
+
repo
|
|
275
|
+
? this.codebaseContext.getContext(query, {
|
|
276
|
+
repoId: repo.id,
|
|
277
|
+
detail: 'full',
|
|
278
|
+
maxResults: 4,
|
|
279
|
+
maxTokens: 4000,
|
|
280
|
+
})
|
|
281
|
+
: Promise.resolve(null),
|
|
282
|
+
]);
|
|
283
|
+
// Fire-and-forget confidence boost for consumed knowledge
|
|
284
|
+
this.boostKnowledgeResults(gotchas);
|
|
285
|
+
this.boostKnowledgeResults(conventions);
|
|
286
|
+
const relevantCode = code
|
|
287
|
+
? code.pivotFiles
|
|
288
|
+
.map((f) => `// ${f.filePath}\n${f.content}`)
|
|
289
|
+
.join('\n\n')
|
|
290
|
+
: '';
|
|
291
|
+
// Build sibling list: all modules EXCEPT this one
|
|
292
|
+
const siblingModules = modules
|
|
293
|
+
.filter((m) => m.name !== mod.name)
|
|
294
|
+
.map((m) => ({
|
|
295
|
+
name: m.name,
|
|
296
|
+
agentType: m.agentType,
|
|
297
|
+
description: m.description,
|
|
298
|
+
}));
|
|
299
|
+
result[mod.name] = {
|
|
300
|
+
// Stable (cacheable)
|
|
301
|
+
conventions: conventions.map((c) => ({
|
|
302
|
+
title: c.title,
|
|
303
|
+
content: c.content,
|
|
304
|
+
})),
|
|
305
|
+
gotchas: gotchas.map((g) => ({
|
|
306
|
+
title: g.title,
|
|
307
|
+
content: g.content,
|
|
308
|
+
})),
|
|
309
|
+
siblingModules,
|
|
310
|
+
advisory,
|
|
311
|
+
// Volatile
|
|
312
|
+
relevantCode,
|
|
313
|
+
recalledContext: [], // populated by session index when available
|
|
314
|
+
recentBroadcasts,
|
|
315
|
+
};
|
|
316
|
+
}));
|
|
317
|
+
return result;
|
|
318
|
+
}
|
|
319
|
+
// ---------------------------------------------------------------------------
|
|
320
|
+
// Inspection phase
|
|
321
|
+
// ---------------------------------------------------------------------------
|
|
322
|
+
async injectInspectionContext(projectId) {
|
|
323
|
+
const { repo } = this.loadProjectAndRepo(projectId);
|
|
324
|
+
const stackTags = repo ? parseStack(repo.stack) : [];
|
|
325
|
+
// Look up how many inspection cycles have occurred for this project
|
|
326
|
+
const cycleCount = this.countInspectionCycles(projectId);
|
|
327
|
+
const gotchas = await this.knowledgeSearch.searchGotchas('code quality anti-patterns stubs incomplete implementation', { stackTags, limit: 6, minConfidence: 0.35 });
|
|
328
|
+
// Fire-and-forget confidence boost for consumed knowledge
|
|
329
|
+
this.boostKnowledgeResults(gotchas);
|
|
330
|
+
// Past findings from inspection outputs stored in phase_outputs
|
|
331
|
+
const pastOutputRows = this.db.all(`SELECT * FROM phase_outputs WHERE project_id = ? AND phase = ? ORDER BY created_at DESC LIMIT 5`, [projectId, 'inspection']);
|
|
332
|
+
const pastFindings = pastOutputRows.map((row) => ({
|
|
333
|
+
description: row.content.slice(0, 200),
|
|
334
|
+
severity: 'unknown',
|
|
335
|
+
resolution: '',
|
|
336
|
+
sourceRepo: repo?.name ?? 'current',
|
|
337
|
+
}));
|
|
338
|
+
// Fetch all broadcasts from this project for interface compatibility checks
|
|
339
|
+
const broadcasts = await this.getRecentBroadcasts(projectId, 30);
|
|
340
|
+
const advisory = await this.injectAdvisoryContext(projectId);
|
|
341
|
+
return {
|
|
342
|
+
checklist: buildInspectionChecklist(stackTags),
|
|
343
|
+
pastFindings,
|
|
344
|
+
antiStubPatterns: ANTI_STUB_PATTERNS,
|
|
345
|
+
cycleCount,
|
|
346
|
+
maxCycles: 3,
|
|
347
|
+
broadcasts,
|
|
348
|
+
advisory,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
// ---------------------------------------------------------------------------
|
|
352
|
+
// Generic phase context
|
|
353
|
+
// ---------------------------------------------------------------------------
|
|
354
|
+
async injectPhaseContext(projectId, phase, query) {
|
|
355
|
+
const { project, repo } = this.loadProjectAndRepo(projectId);
|
|
356
|
+
const stackTags = repo ? parseStack(repo.stack) : [];
|
|
357
|
+
const effectiveQuery = query ?? PHASE_QUERY_HINTS[phase] ?? project?.name ?? phase;
|
|
358
|
+
const warnings = [];
|
|
359
|
+
// Generic knowledge search
|
|
360
|
+
const knowledge = await this.knowledgeSearch.search(effectiveQuery, {
|
|
361
|
+
stack_tags: stackTags,
|
|
362
|
+
limit: 6,
|
|
363
|
+
min_confidence: 0.3,
|
|
364
|
+
});
|
|
365
|
+
// Fire-and-forget confidence boost for consumed knowledge
|
|
366
|
+
this.boostKnowledgeResults(knowledge);
|
|
367
|
+
if (knowledge.length === 0) {
|
|
368
|
+
warnings.push('No relevant knowledge found — knowledge base may be empty');
|
|
369
|
+
}
|
|
370
|
+
// Previous phase outputs for this project
|
|
371
|
+
const outputRows = this.db.all(`SELECT phase, output_type, content FROM phase_outputs
|
|
372
|
+
WHERE project_id = ? ORDER BY created_at DESC LIMIT 10`, [projectId]);
|
|
373
|
+
const previousOutputs = outputRows.map((row) => ({
|
|
374
|
+
phase: row.phase,
|
|
375
|
+
type: row.output_type,
|
|
376
|
+
preview: row.content.slice(0, 300),
|
|
377
|
+
}));
|
|
378
|
+
// Fetch recent agent broadcasts for this project
|
|
379
|
+
const recentBroadcasts = await this.getRecentBroadcasts(projectId);
|
|
380
|
+
return {
|
|
381
|
+
relevantKnowledge: knowledge.map((k) => ({
|
|
382
|
+
title: k.title,
|
|
383
|
+
content: k.content,
|
|
384
|
+
category: k.category,
|
|
385
|
+
confidence: k.confidence,
|
|
386
|
+
})),
|
|
387
|
+
previousOutputs,
|
|
388
|
+
warnings,
|
|
389
|
+
recentBroadcasts,
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
// ---------------------------------------------------------------------------
|
|
393
|
+
// Private helpers
|
|
394
|
+
// ---------------------------------------------------------------------------
|
|
395
|
+
loadProjectAndRepo(projectId) {
|
|
396
|
+
const project = this.db.get(`SELECT * FROM projects WHERE id = ?`, [projectId]);
|
|
397
|
+
const repo = project
|
|
398
|
+
? this.db.get(`SELECT * FROM repos WHERE id = ?`, [
|
|
399
|
+
project.repo_id,
|
|
400
|
+
])
|
|
401
|
+
: undefined;
|
|
402
|
+
return { project, repo };
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Count how many times this project has had an inspection -> implementation
|
|
406
|
+
* cycle (i.e., how many times inspection produced a "fail" verdict).
|
|
407
|
+
*/
|
|
408
|
+
countInspectionCycles(projectId) {
|
|
409
|
+
const row = this.db.get(`SELECT COUNT(*) as cnt FROM pipeline_events
|
|
410
|
+
WHERE project_id = ? AND from_phase = 'inspection' AND to_phase = 'implementation'`, [projectId]);
|
|
411
|
+
return row?.cnt ?? 0;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// ---------------------------------------------------------------------------
|
|
415
|
+
// Utilities
|
|
416
|
+
// ---------------------------------------------------------------------------
|
|
417
|
+
function parseStack(stackJson) {
|
|
418
|
+
try {
|
|
419
|
+
const parsed = JSON.parse(stackJson);
|
|
420
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
return [];
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
function basename(filePath) {
|
|
427
|
+
const parts = filePath.replace(/\\/g, '/').split('/');
|
|
428
|
+
return parts[parts.length - 1] ?? filePath;
|
|
429
|
+
}
|
|
430
|
+
function extractPatterns(content, stackTags) {
|
|
431
|
+
const patterns = [];
|
|
432
|
+
if (content.includes('Module') && stackTags.includes('nestjs')) {
|
|
433
|
+
patterns.push('NestJS module pattern detected');
|
|
434
|
+
}
|
|
435
|
+
if (content.includes('Drizzle') || content.includes('drizzle')) {
|
|
436
|
+
patterns.push('Drizzle ORM pattern detected');
|
|
437
|
+
}
|
|
438
|
+
if (content.includes('interface ') || content.includes('type ')) {
|
|
439
|
+
patterns.push('TypeScript interface-driven design');
|
|
440
|
+
}
|
|
441
|
+
if (content.includes('export class')) {
|
|
442
|
+
patterns.push('Class-based service pattern');
|
|
443
|
+
}
|
|
444
|
+
return patterns;
|
|
445
|
+
}
|
|
446
|
+
function extractDependencies(content) {
|
|
447
|
+
const deps = [];
|
|
448
|
+
const importRegex = /from ['"](@?[^'"./][^'"]*)['"]/g;
|
|
449
|
+
let match;
|
|
450
|
+
const seen = new Set();
|
|
451
|
+
while ((match = importRegex.exec(content)) !== null) {
|
|
452
|
+
const dep = match[1];
|
|
453
|
+
if (dep && !seen.has(dep)) {
|
|
454
|
+
seen.add(dep);
|
|
455
|
+
deps.push(dep);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
return deps.slice(0, 10);
|
|
459
|
+
}
|
|
460
|
+
function buildInterviewTemplate(stackTags) {
|
|
461
|
+
const stackList = stackTags.length > 0 ? stackTags.join(', ') : 'unspecified';
|
|
462
|
+
return `## Strategist Interview Template
|
|
463
|
+
|
|
464
|
+
**Tech Stack**: ${stackList}
|
|
465
|
+
|
|
466
|
+
### Questions to ask:
|
|
467
|
+
1. What is the core problem this feature solves?
|
|
468
|
+
2. Who are the primary users and what is their workflow?
|
|
469
|
+
3. What are the success criteria? How will we know it is done?
|
|
470
|
+
4. What are the constraints (timeline, performance, compatibility)?
|
|
471
|
+
5. Are there existing patterns or modules in the codebase we should follow?
|
|
472
|
+
6. What are the out-of-scope items for this iteration?
|
|
473
|
+
|
|
474
|
+
### Vision document to produce:
|
|
475
|
+
- Problem statement (1 paragraph)
|
|
476
|
+
- User stories (numbered list)
|
|
477
|
+
- Success criteria (measurable)
|
|
478
|
+
- Out of scope (explicit list)
|
|
479
|
+
- Known risks or dependencies`;
|
|
480
|
+
}
|
|
481
|
+
function buildInspectionChecklist(stackTags) {
|
|
482
|
+
const lines = [
|
|
483
|
+
'## Inspector Checklist',
|
|
484
|
+
'',
|
|
485
|
+
'### Build',
|
|
486
|
+
'- [ ] TypeScript compiles without errors',
|
|
487
|
+
'- [ ] No missing imports or unresolved modules',
|
|
488
|
+
'- [ ] No dangling providers or unregistered services',
|
|
489
|
+
'',
|
|
490
|
+
'### Anti-Stub',
|
|
491
|
+
'- [ ] No TODO comments left in implementation',
|
|
492
|
+
'- [ ] No hardcoded return values (stub responses)',
|
|
493
|
+
'- [ ] Every service method performs real work',
|
|
494
|
+
'- [ ] Every guard performs real auth checks',
|
|
495
|
+
'',
|
|
496
|
+
'### Wiring',
|
|
497
|
+
'- [ ] HTTP request traces end-to-end through controller -> service -> DB',
|
|
498
|
+
'- [ ] All error cases handled (not just happy path)',
|
|
499
|
+
'- [ ] Response shapes match specified interfaces',
|
|
500
|
+
'',
|
|
501
|
+
'### Quality',
|
|
502
|
+
'- [ ] Input validation on all endpoints',
|
|
503
|
+
'- [ ] Appropriate HTTP status codes',
|
|
504
|
+
'- [ ] No bare catch blocks that swallow errors',
|
|
505
|
+
];
|
|
506
|
+
if (stackTags.includes('nestjs')) {
|
|
507
|
+
lines.push('', '### NestJS-specific', '- [ ] All providers registered in their module', '- [ ] All module imports declared', '- [ ] DTOs have class-validator decorators', '- [ ] Guards are applied with @UseGuards()');
|
|
508
|
+
}
|
|
509
|
+
if (stackTags.includes('drizzle')) {
|
|
510
|
+
lines.push('', '### Drizzle-specific', '- [ ] Migrations generated and applied (db:generate then db:migrate)', '- [ ] No raw SQL where Drizzle query builder is appropriate', '- [ ] Exported interfaces for service return types (TS4053 prevention)');
|
|
511
|
+
}
|
|
512
|
+
return lines.join('\n');
|
|
513
|
+
}
|
|
514
|
+
const ANTI_STUB_PATTERNS = [
|
|
515
|
+
'return { success: true } without side effects',
|
|
516
|
+
'// TODO: implement later',
|
|
517
|
+
'// TODO: add real logic',
|
|
518
|
+
'throw new Error("Not implemented")',
|
|
519
|
+
'return null // placeholder',
|
|
520
|
+
'console.log("implement me")',
|
|
521
|
+
'return [] // stub',
|
|
522
|
+
'return {} // placeholder',
|
|
523
|
+
];
|
|
524
|
+
const PHASE_QUERY_HINTS = {
|
|
525
|
+
interview: 'project scoping vision requirements user stories',
|
|
526
|
+
architecture: 'module design service boundaries database schema API contracts',
|
|
527
|
+
design: 'UI design component hierarchy user experience layout',
|
|
528
|
+
qa_strategy: 'test plan testing strategy coverage integration tests',
|
|
529
|
+
implementation: 'implementation code services controllers database',
|
|
530
|
+
inspection: 'code review quality check anti-patterns stubs completeness',
|
|
531
|
+
knowledge_collection: 'learnings gotchas patterns decisions retrospective',
|
|
532
|
+
};
|
|
533
|
+
//# sourceMappingURL=injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/context/injector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { QdrantVectorStore } from '../storage/qdrant-store.js';
|
|
2
|
+
export interface MemorySearchResult {
|
|
3
|
+
content: string;
|
|
4
|
+
createdAt: number;
|
|
5
|
+
relevanceScore: number;
|
|
6
|
+
sessionId?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface MemorySearchOptions {
|
|
9
|
+
repoId?: string;
|
|
10
|
+
sessionId?: string;
|
|
11
|
+
limit?: number;
|
|
12
|
+
scoreThreshold?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class MemoryBridge {
|
|
15
|
+
private readonly vectorStore;
|
|
16
|
+
constructor(vectorStore: QdrantVectorStore | null);
|
|
17
|
+
/**
|
|
18
|
+
* Search observations by semantic similarity.
|
|
19
|
+
* Optionally filters by repoId and/or sessionId.
|
|
20
|
+
* Returns [] gracefully when Qdrant is unavailable.
|
|
21
|
+
*/
|
|
22
|
+
searchMemories(query: string, options?: MemorySearchOptions): Promise<MemorySearchResult[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Save a memory (observation) to the vector store.
|
|
25
|
+
* Returns the UUID of the stored observation.
|
|
26
|
+
* Throws when storage fails so the caller can decide whether to propagate.
|
|
27
|
+
*/
|
|
28
|
+
saveMemory(content: string, repoId: string, sessionId?: string): Promise<string>;
|
|
29
|
+
/** True when the vector store is configured (does not perform a health check). */
|
|
30
|
+
isAvailable(): boolean;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/context/memory.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AASpE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAElE;;;;OAIG;IACG,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAqEhC;;;;OAIG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAwDlB,kFAAkF;IAClF,WAAW,IAAI,OAAO;CAGvB"}
|