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 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/storage/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage abstraction interfaces (ADR-8).
|
|
3
|
+
* All tool handlers interact with these interfaces, never with FalkorDB/Qdrant clients directly.
|
|
4
|
+
* This enables swapping implementations without rewriting the query engine.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=interfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/storage/interfaces.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qdrant implementation of VectorStore.
|
|
3
|
+
* Connects to localhost:6333 via REST API.
|
|
4
|
+
* Collections:
|
|
5
|
+
* - code_chunks (384-dim cosine)
|
|
6
|
+
* - observations (384-dim cosine)
|
|
7
|
+
* - knowledge (384-dim cosine) — pipeline-specific, stores KnowledgePayload items
|
|
8
|
+
*/
|
|
9
|
+
import type { VectorStore, VectorSearchOptions } from './interfaces.js';
|
|
10
|
+
import type { CodeChunkPayload, ObservationPayload, GitCommitPayload, VectorSearchResult } from '../util/types.js';
|
|
11
|
+
export declare class QdrantVectorStore implements VectorStore {
|
|
12
|
+
private client;
|
|
13
|
+
private readonly url;
|
|
14
|
+
private readonly breaker;
|
|
15
|
+
constructor(url?: string);
|
|
16
|
+
connect(): Promise<void>;
|
|
17
|
+
disconnect(): Promise<void>;
|
|
18
|
+
isHealthy(): Promise<boolean>;
|
|
19
|
+
ensureCollections(dimension: number): Promise<void>;
|
|
20
|
+
private ensureCollection;
|
|
21
|
+
upsertCodeChunks(chunks: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
vector: number[];
|
|
24
|
+
payload: CodeChunkPayload;
|
|
25
|
+
}>): Promise<void>;
|
|
26
|
+
upsertObservation(id: string, vector: number[], payload: ObservationPayload): Promise<void>;
|
|
27
|
+
searchCodeChunks(queryVector: number[], options: VectorSearchOptions): Promise<VectorSearchResult[]>;
|
|
28
|
+
searchObservations(queryVector: number[], options: VectorSearchOptions): Promise<VectorSearchResult[]>;
|
|
29
|
+
deleteFileChunks(filePath: string, repoId: string): Promise<void>;
|
|
30
|
+
deleteRepoChunks(repoId: string): Promise<void>;
|
|
31
|
+
getCounts(): Promise<{
|
|
32
|
+
codeChunks: number;
|
|
33
|
+
observations: number;
|
|
34
|
+
}>;
|
|
35
|
+
getObservation(id: string): Promise<ObservationPayload | null>;
|
|
36
|
+
updateObservation(id: string, payload: Partial<ObservationPayload>): Promise<void>;
|
|
37
|
+
filterObservations(filter: Record<string, unknown>, limit?: number): Promise<VectorSearchResult[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Search the knowledge collection by vector similarity.
|
|
40
|
+
*/
|
|
41
|
+
searchKnowledge(queryVector: number[], options: VectorSearchOptions): Promise<VectorSearchResult[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Upsert a knowledge item into the knowledge collection.
|
|
44
|
+
*/
|
|
45
|
+
upsertKnowledge(id: string, vector: number[], payload: Record<string, unknown>): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Delete a knowledge item from the knowledge collection.
|
|
48
|
+
*/
|
|
49
|
+
deleteKnowledge(id: string): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Delete ALL knowledge items for a given repo_id from the knowledge collection.
|
|
52
|
+
* Used by KnowledgeHydrator.removeRepo() before re-hydrating to handle
|
|
53
|
+
* item deletions (items removed from YAML should disappear from Qdrant).
|
|
54
|
+
*/
|
|
55
|
+
deleteKnowledgeByRepo(repoId: string): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Retrieve a single knowledge item payload by its Qdrant point ID.
|
|
58
|
+
* Returns null if the item does not exist.
|
|
59
|
+
* Used by KnowledgeSearch.boostConfidence() to read current confidence value.
|
|
60
|
+
*/
|
|
61
|
+
getKnowledge(id: string): Promise<Record<string, unknown> | null>;
|
|
62
|
+
/**
|
|
63
|
+
* Partially update a knowledge item's payload fields without changing the vector.
|
|
64
|
+
* Used by KnowledgeSearch.boostConfidence() to update accessed_at, access_count,
|
|
65
|
+
* and confidence without re-embedding.
|
|
66
|
+
*/
|
|
67
|
+
setKnowledgePayload(id: string, patch: Record<string, unknown>): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Filter-scroll the knowledge collection without a semantic query.
|
|
70
|
+
* Used by KnowledgeSearch.getGotchas() and getPatterns() to enumerate items
|
|
71
|
+
* by category without needing an embedding.
|
|
72
|
+
*
|
|
73
|
+
* Returns up to `limit` items matching the filter, each as { id, payload }.
|
|
74
|
+
*/
|
|
75
|
+
filterKnowledge(filter: Record<string, unknown>, limit: number): Promise<Array<{
|
|
76
|
+
id: string;
|
|
77
|
+
payload: Record<string, unknown>;
|
|
78
|
+
}>>;
|
|
79
|
+
/**
|
|
80
|
+
* Get count of knowledge items.
|
|
81
|
+
*/
|
|
82
|
+
getKnowledgeCount(): Promise<number>;
|
|
83
|
+
/**
|
|
84
|
+
* Upsert git commit embeddings into the git_commits collection.
|
|
85
|
+
* Each commit message is embedded and stored with metadata for semantic search.
|
|
86
|
+
*/
|
|
87
|
+
upsertGitCommits(commits: Array<{
|
|
88
|
+
id: string;
|
|
89
|
+
vector: number[];
|
|
90
|
+
payload: GitCommitPayload;
|
|
91
|
+
}>): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Semantic search over git commit messages.
|
|
94
|
+
* Returns commits matching the query vector, optionally filtered by repo_id.
|
|
95
|
+
*/
|
|
96
|
+
searchGitCommits(queryVector: number[], repoId?: string, limit?: number): Promise<VectorSearchResult[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Delete all git commit embeddings for a given repo.
|
|
99
|
+
* Used during re-indexing to avoid stale commit data.
|
|
100
|
+
*/
|
|
101
|
+
deleteGitCommitsByRepo(repoId: string): Promise<void>;
|
|
102
|
+
private buildFilter;
|
|
103
|
+
/**
|
|
104
|
+
* Convert UUID string to a numeric ID for Qdrant.
|
|
105
|
+
* Qdrant supports both UUID strings and unsigned 64-bit integers as point IDs.
|
|
106
|
+
* We use UUID format directly as Qdrant v1.x supports UUID string IDs.
|
|
107
|
+
*/
|
|
108
|
+
private uuidToNumeric;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=qdrant-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qdrant-store.d.ts","sourceRoot":"","sources":["../../src/storage/qdrant-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qdrant implementation of VectorStore.
|
|
3
|
+
* Connects to localhost:6333 via REST API.
|
|
4
|
+
* Collections:
|
|
5
|
+
* - code_chunks (384-dim cosine)
|
|
6
|
+
* - observations (384-dim cosine)
|
|
7
|
+
* - knowledge (384-dim cosine) — pipeline-specific, stores KnowledgePayload items
|
|
8
|
+
*/
|
|
9
|
+
import { QdrantClient } from '@qdrant/js-client-rest';
|
|
10
|
+
import { logger } from '../util/logger.js';
|
|
11
|
+
import { CircuitBreaker } from '../util/circuit-breaker.js';
|
|
12
|
+
const CODE_CHUNKS_COLLECTION = 'code_chunks';
|
|
13
|
+
const OBSERVATIONS_COLLECTION = 'observations';
|
|
14
|
+
const KNOWLEDGE_COLLECTION = 'knowledge';
|
|
15
|
+
const GIT_COMMITS_COLLECTION = 'git_commits';
|
|
16
|
+
export class QdrantVectorStore {
|
|
17
|
+
client;
|
|
18
|
+
url;
|
|
19
|
+
breaker;
|
|
20
|
+
constructor(url = 'http://localhost:6333') {
|
|
21
|
+
this.url = url;
|
|
22
|
+
this.client = new QdrantClient({ url });
|
|
23
|
+
this.breaker = new CircuitBreaker({
|
|
24
|
+
name: 'qdrant',
|
|
25
|
+
failureThreshold: 5,
|
|
26
|
+
resetTimeoutMs: 30_000,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async connect() {
|
|
30
|
+
// Qdrant REST client doesn't need an explicit connection - just validate health
|
|
31
|
+
const healthy = await this.isHealthy();
|
|
32
|
+
if (!healthy) {
|
|
33
|
+
throw new Error(`Qdrant not reachable at ${this.url}`);
|
|
34
|
+
}
|
|
35
|
+
logger.info('Qdrant connected', { url: this.url });
|
|
36
|
+
}
|
|
37
|
+
async disconnect() {
|
|
38
|
+
// No persistent connection to close for REST client
|
|
39
|
+
logger.info('Qdrant disconnected');
|
|
40
|
+
}
|
|
41
|
+
async isHealthy() {
|
|
42
|
+
// Circuit breaker short-circuits when OPEN — skip the HTTP health probe
|
|
43
|
+
if (!this.breaker.isHealthy())
|
|
44
|
+
return false;
|
|
45
|
+
try {
|
|
46
|
+
// getCollections() is the most reliable health probe for qdrant-js-client-rest:
|
|
47
|
+
// it performs a real HTTP request and returns if the server is reachable.
|
|
48
|
+
await this.client.getCollections();
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async ensureCollections(dimension) {
|
|
56
|
+
const hnsw = { m: 16, ef_construct: 100 };
|
|
57
|
+
const onDisk = true;
|
|
58
|
+
// Create code_chunks collection
|
|
59
|
+
await this.ensureCollection(CODE_CHUNKS_COLLECTION, dimension, hnsw, onDisk, [
|
|
60
|
+
{ field_name: 'repo_id', field_schema: 'keyword' },
|
|
61
|
+
{ field_name: 'file_path', field_schema: 'keyword' },
|
|
62
|
+
{ field_name: 'entity_type', field_schema: 'keyword' },
|
|
63
|
+
]);
|
|
64
|
+
// Create observations collection
|
|
65
|
+
await this.ensureCollection(OBSERVATIONS_COLLECTION, dimension, hnsw, onDisk, [
|
|
66
|
+
{ field_name: 'repo_id', field_schema: 'keyword' },
|
|
67
|
+
{ field_name: 'session_id', field_schema: 'keyword' },
|
|
68
|
+
{ field_name: 'namespace', field_schema: 'keyword' },
|
|
69
|
+
{ field_name: 'key', field_schema: 'keyword' },
|
|
70
|
+
{ field_name: 'source', field_schema: 'keyword' },
|
|
71
|
+
{ field_name: 'type', field_schema: 'keyword' },
|
|
72
|
+
]);
|
|
73
|
+
// Create knowledge collection (pipeline-specific)
|
|
74
|
+
await this.ensureCollection(KNOWLEDGE_COLLECTION, dimension, hnsw, onDisk, [
|
|
75
|
+
{ field_name: 'category', field_schema: 'keyword' },
|
|
76
|
+
{ field_name: 'repo_id', field_schema: 'keyword' },
|
|
77
|
+
{ field_name: 'stack_tags', field_schema: 'keyword' },
|
|
78
|
+
{ field_name: 'confidence', field_schema: 'float' },
|
|
79
|
+
{ field_name: 'sharing', field_schema: 'keyword' },
|
|
80
|
+
]);
|
|
81
|
+
// Create git_commits collection (Phase 3 - git enrichment)
|
|
82
|
+
await this.ensureCollection(GIT_COMMITS_COLLECTION, dimension, hnsw, onDisk, [
|
|
83
|
+
{ field_name: 'repo_id', field_schema: 'keyword' },
|
|
84
|
+
{ field_name: 'commit_hash', field_schema: 'keyword' },
|
|
85
|
+
{ field_name: 'author', field_schema: 'keyword' },
|
|
86
|
+
{ field_name: 'timestamp', field_schema: 'integer' },
|
|
87
|
+
{ field_name: 'file_paths', field_schema: 'keyword' },
|
|
88
|
+
]);
|
|
89
|
+
logger.info('Qdrant collections ensured', { dimension });
|
|
90
|
+
}
|
|
91
|
+
async ensureCollection(name, dimension, hnsw, onDisk, payloadIndexes) {
|
|
92
|
+
try {
|
|
93
|
+
await this.client.getCollection(name);
|
|
94
|
+
logger.debug(`Collection ${name} already exists`);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Collection does not exist - create it
|
|
98
|
+
await this.client.createCollection(name, {
|
|
99
|
+
vectors: {
|
|
100
|
+
size: dimension,
|
|
101
|
+
distance: 'Cosine',
|
|
102
|
+
on_disk: onDisk,
|
|
103
|
+
},
|
|
104
|
+
hnsw_config: {
|
|
105
|
+
m: hnsw.m,
|
|
106
|
+
ef_construct: hnsw.ef_construct,
|
|
107
|
+
on_disk: true,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
logger.info(`Created Qdrant collection: ${name}`);
|
|
111
|
+
// Create payload indexes
|
|
112
|
+
for (const idx of payloadIndexes) {
|
|
113
|
+
try {
|
|
114
|
+
await this.client.createPayloadIndex(name, {
|
|
115
|
+
field_name: idx.field_name,
|
|
116
|
+
field_schema: idx.field_schema,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
logger.warn(`Failed to create payload index ${idx.field_name} on ${name}`, { error: String(err) });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async upsertCodeChunks(chunks) {
|
|
126
|
+
if (chunks.length === 0)
|
|
127
|
+
return;
|
|
128
|
+
const points = chunks.map(chunk => ({
|
|
129
|
+
id: this.uuidToNumeric(chunk.id),
|
|
130
|
+
vector: chunk.vector,
|
|
131
|
+
payload: chunk.payload,
|
|
132
|
+
}));
|
|
133
|
+
await this.client.upsert(CODE_CHUNKS_COLLECTION, {
|
|
134
|
+
wait: true,
|
|
135
|
+
points,
|
|
136
|
+
});
|
|
137
|
+
logger.debug(`Upserted ${chunks.length} code chunks to Qdrant`);
|
|
138
|
+
}
|
|
139
|
+
async upsertObservation(id, vector, payload) {
|
|
140
|
+
await this.client.upsert(OBSERVATIONS_COLLECTION, {
|
|
141
|
+
wait: true,
|
|
142
|
+
points: [{
|
|
143
|
+
id: this.uuidToNumeric(id),
|
|
144
|
+
vector,
|
|
145
|
+
payload: payload,
|
|
146
|
+
}],
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
async searchCodeChunks(queryVector, options) {
|
|
150
|
+
const { limit = 20, filter, scoreThreshold = 0 } = options;
|
|
151
|
+
const params = {
|
|
152
|
+
vector: queryVector,
|
|
153
|
+
limit,
|
|
154
|
+
score_threshold: scoreThreshold,
|
|
155
|
+
with_payload: true,
|
|
156
|
+
};
|
|
157
|
+
if (filter) {
|
|
158
|
+
params.filter = this.buildFilter(filter);
|
|
159
|
+
}
|
|
160
|
+
const results = await this.breaker.execute(() => this.client.search(CODE_CHUNKS_COLLECTION, params));
|
|
161
|
+
return results.map(r => ({
|
|
162
|
+
id: String(r.id),
|
|
163
|
+
score: r.score,
|
|
164
|
+
payload: r.payload,
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
async searchObservations(queryVector, options) {
|
|
168
|
+
const { limit = 10, filter, scoreThreshold = 0.3 } = options;
|
|
169
|
+
const params = {
|
|
170
|
+
vector: queryVector,
|
|
171
|
+
limit,
|
|
172
|
+
score_threshold: scoreThreshold,
|
|
173
|
+
with_payload: true,
|
|
174
|
+
};
|
|
175
|
+
if (filter) {
|
|
176
|
+
params.filter = this.buildFilter(filter);
|
|
177
|
+
}
|
|
178
|
+
const results = await this.breaker.execute(() => this.client.search(OBSERVATIONS_COLLECTION, params));
|
|
179
|
+
return results.map(r => ({
|
|
180
|
+
id: String(r.id),
|
|
181
|
+
score: r.score,
|
|
182
|
+
payload: r.payload,
|
|
183
|
+
}));
|
|
184
|
+
}
|
|
185
|
+
async deleteFileChunks(filePath, repoId) {
|
|
186
|
+
await this.client.delete(CODE_CHUNKS_COLLECTION, {
|
|
187
|
+
wait: true,
|
|
188
|
+
filter: {
|
|
189
|
+
must: [
|
|
190
|
+
{ key: 'file_path', match: { value: filePath } },
|
|
191
|
+
{ key: 'repo_id', match: { value: repoId } },
|
|
192
|
+
],
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
async deleteRepoChunks(repoId) {
|
|
197
|
+
await this.client.delete(CODE_CHUNKS_COLLECTION, {
|
|
198
|
+
wait: true,
|
|
199
|
+
filter: {
|
|
200
|
+
must: [{ key: 'repo_id', match: { value: repoId } }],
|
|
201
|
+
},
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
async getCounts() {
|
|
205
|
+
try {
|
|
206
|
+
const [codeInfo, obsInfo] = await Promise.all([
|
|
207
|
+
this.client.getCollection(CODE_CHUNKS_COLLECTION),
|
|
208
|
+
this.client.getCollection(OBSERVATIONS_COLLECTION),
|
|
209
|
+
]);
|
|
210
|
+
return {
|
|
211
|
+
codeChunks: codeInfo.points_count ?? 0,
|
|
212
|
+
observations: obsInfo.points_count ?? 0,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
return { codeChunks: 0, observations: 0 };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async getObservation(id) {
|
|
220
|
+
try {
|
|
221
|
+
const results = await this.client.retrieve(OBSERVATIONS_COLLECTION, {
|
|
222
|
+
ids: [this.uuidToNumeric(id)],
|
|
223
|
+
with_payload: true,
|
|
224
|
+
});
|
|
225
|
+
if (results.length === 0)
|
|
226
|
+
return null;
|
|
227
|
+
return results[0].payload;
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async updateObservation(id, payload) {
|
|
234
|
+
await this.client.setPayload(OBSERVATIONS_COLLECTION, {
|
|
235
|
+
wait: true,
|
|
236
|
+
points: [this.uuidToNumeric(id)],
|
|
237
|
+
payload: payload,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
async filterObservations(filter, limit = 10) {
|
|
241
|
+
const results = await this.client.scroll(OBSERVATIONS_COLLECTION, {
|
|
242
|
+
filter: this.buildFilter(filter),
|
|
243
|
+
limit,
|
|
244
|
+
with_payload: true,
|
|
245
|
+
with_vector: false,
|
|
246
|
+
});
|
|
247
|
+
return (results.points ?? []).map(r => ({
|
|
248
|
+
id: String(r.id),
|
|
249
|
+
score: 1.0,
|
|
250
|
+
payload: r.payload,
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
// ============================================================
|
|
254
|
+
// Knowledge collection helpers (pipeline-specific)
|
|
255
|
+
// ============================================================
|
|
256
|
+
/**
|
|
257
|
+
* Search the knowledge collection by vector similarity.
|
|
258
|
+
*/
|
|
259
|
+
async searchKnowledge(queryVector, options) {
|
|
260
|
+
const { limit = 10, filter, scoreThreshold = 0.3 } = options;
|
|
261
|
+
const params = {
|
|
262
|
+
vector: queryVector,
|
|
263
|
+
limit,
|
|
264
|
+
score_threshold: scoreThreshold,
|
|
265
|
+
with_payload: true,
|
|
266
|
+
};
|
|
267
|
+
if (filter) {
|
|
268
|
+
params.filter = this.buildFilter(filter);
|
|
269
|
+
}
|
|
270
|
+
const results = await this.breaker.execute(() => this.client.search(KNOWLEDGE_COLLECTION, params));
|
|
271
|
+
return results.map(r => ({
|
|
272
|
+
id: String(r.id),
|
|
273
|
+
score: r.score,
|
|
274
|
+
payload: r.payload,
|
|
275
|
+
}));
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Upsert a knowledge item into the knowledge collection.
|
|
279
|
+
*/
|
|
280
|
+
async upsertKnowledge(id, vector, payload) {
|
|
281
|
+
await this.client.upsert(KNOWLEDGE_COLLECTION, {
|
|
282
|
+
wait: true,
|
|
283
|
+
points: [{
|
|
284
|
+
id: this.uuidToNumeric(id),
|
|
285
|
+
vector,
|
|
286
|
+
payload,
|
|
287
|
+
}],
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Delete a knowledge item from the knowledge collection.
|
|
292
|
+
*/
|
|
293
|
+
async deleteKnowledge(id) {
|
|
294
|
+
await this.client.delete(KNOWLEDGE_COLLECTION, {
|
|
295
|
+
wait: true,
|
|
296
|
+
points: [this.uuidToNumeric(id)],
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Delete ALL knowledge items for a given repo_id from the knowledge collection.
|
|
301
|
+
* Used by KnowledgeHydrator.removeRepo() before re-hydrating to handle
|
|
302
|
+
* item deletions (items removed from YAML should disappear from Qdrant).
|
|
303
|
+
*/
|
|
304
|
+
async deleteKnowledgeByRepo(repoId) {
|
|
305
|
+
await this.client.delete(KNOWLEDGE_COLLECTION, {
|
|
306
|
+
wait: true,
|
|
307
|
+
filter: {
|
|
308
|
+
must: [{ key: 'repo_id', match: { value: repoId } }],
|
|
309
|
+
},
|
|
310
|
+
});
|
|
311
|
+
logger.debug('QdrantVectorStore: deleted knowledge points for repo', { repoId });
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Retrieve a single knowledge item payload by its Qdrant point ID.
|
|
315
|
+
* Returns null if the item does not exist.
|
|
316
|
+
* Used by KnowledgeSearch.boostConfidence() to read current confidence value.
|
|
317
|
+
*/
|
|
318
|
+
async getKnowledge(id) {
|
|
319
|
+
try {
|
|
320
|
+
const results = await this.client.retrieve(KNOWLEDGE_COLLECTION, {
|
|
321
|
+
ids: [this.uuidToNumeric(id)],
|
|
322
|
+
with_payload: true,
|
|
323
|
+
});
|
|
324
|
+
if (results.length === 0)
|
|
325
|
+
return null;
|
|
326
|
+
return results[0].payload ?? null;
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Partially update a knowledge item's payload fields without changing the vector.
|
|
334
|
+
* Used by KnowledgeSearch.boostConfidence() to update accessed_at, access_count,
|
|
335
|
+
* and confidence without re-embedding.
|
|
336
|
+
*/
|
|
337
|
+
async setKnowledgePayload(id, patch) {
|
|
338
|
+
await this.client.setPayload(KNOWLEDGE_COLLECTION, {
|
|
339
|
+
wait: true,
|
|
340
|
+
points: [this.uuidToNumeric(id)],
|
|
341
|
+
payload: patch,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Filter-scroll the knowledge collection without a semantic query.
|
|
346
|
+
* Used by KnowledgeSearch.getGotchas() and getPatterns() to enumerate items
|
|
347
|
+
* by category without needing an embedding.
|
|
348
|
+
*
|
|
349
|
+
* Returns up to `limit` items matching the filter, each as { id, payload }.
|
|
350
|
+
*/
|
|
351
|
+
async filterKnowledge(filter, limit) {
|
|
352
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
353
|
+
const results = await this.client.scroll(KNOWLEDGE_COLLECTION, {
|
|
354
|
+
filter: filter, // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
355
|
+
limit,
|
|
356
|
+
with_payload: true,
|
|
357
|
+
with_vector: false,
|
|
358
|
+
});
|
|
359
|
+
return (results.points ?? []).map((r) => ({
|
|
360
|
+
id: String(r.id),
|
|
361
|
+
payload: r.payload,
|
|
362
|
+
}));
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Get count of knowledge items.
|
|
366
|
+
*/
|
|
367
|
+
async getKnowledgeCount() {
|
|
368
|
+
try {
|
|
369
|
+
const info = await this.client.getCollection(KNOWLEDGE_COLLECTION);
|
|
370
|
+
return info.points_count ?? 0;
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
return 0;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// ============================================================
|
|
377
|
+
// Git commits collection helpers (Phase 3 - git enrichment)
|
|
378
|
+
// ============================================================
|
|
379
|
+
/**
|
|
380
|
+
* Upsert git commit embeddings into the git_commits collection.
|
|
381
|
+
* Each commit message is embedded and stored with metadata for semantic search.
|
|
382
|
+
*/
|
|
383
|
+
async upsertGitCommits(commits) {
|
|
384
|
+
if (commits.length === 0)
|
|
385
|
+
return;
|
|
386
|
+
const points = commits.map(c => ({
|
|
387
|
+
id: this.uuidToNumeric(c.id),
|
|
388
|
+
vector: c.vector,
|
|
389
|
+
payload: c.payload,
|
|
390
|
+
}));
|
|
391
|
+
// Upsert in batches of 100 to avoid overwhelming the server
|
|
392
|
+
const BATCH = 100;
|
|
393
|
+
for (let i = 0; i < points.length; i += BATCH) {
|
|
394
|
+
const batch = points.slice(i, i + BATCH);
|
|
395
|
+
await this.client.upsert(GIT_COMMITS_COLLECTION, {
|
|
396
|
+
wait: true,
|
|
397
|
+
points: batch,
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
logger.debug(`Upserted ${commits.length} git commits to Qdrant`);
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Semantic search over git commit messages.
|
|
404
|
+
* Returns commits matching the query vector, optionally filtered by repo_id.
|
|
405
|
+
*/
|
|
406
|
+
async searchGitCommits(queryVector, repoId, limit = 20) {
|
|
407
|
+
const params = {
|
|
408
|
+
vector: queryVector,
|
|
409
|
+
limit,
|
|
410
|
+
score_threshold: 0.2,
|
|
411
|
+
with_payload: true,
|
|
412
|
+
};
|
|
413
|
+
if (repoId) {
|
|
414
|
+
params.filter = this.buildFilter({ repo_id: repoId });
|
|
415
|
+
}
|
|
416
|
+
const results = await this.breaker.execute(() => this.client.search(GIT_COMMITS_COLLECTION, params));
|
|
417
|
+
return results.map(r => ({
|
|
418
|
+
id: String(r.id),
|
|
419
|
+
score: r.score,
|
|
420
|
+
payload: r.payload,
|
|
421
|
+
}));
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Delete all git commit embeddings for a given repo.
|
|
425
|
+
* Used during re-indexing to avoid stale commit data.
|
|
426
|
+
*/
|
|
427
|
+
async deleteGitCommitsByRepo(repoId) {
|
|
428
|
+
await this.client.delete(GIT_COMMITS_COLLECTION, {
|
|
429
|
+
wait: true,
|
|
430
|
+
filter: {
|
|
431
|
+
must: [{ key: 'repo_id', match: { value: repoId } }],
|
|
432
|
+
},
|
|
433
|
+
});
|
|
434
|
+
logger.debug('QdrantVectorStore: deleted git commits for repo', { repoId });
|
|
435
|
+
}
|
|
436
|
+
buildFilter(filter) {
|
|
437
|
+
// Simple filter builder: { repo_id: 'x', namespace: 'y' } -> Qdrant must filter
|
|
438
|
+
const must = Object.entries(filter)
|
|
439
|
+
.filter(([, v]) => v !== undefined && v !== null)
|
|
440
|
+
.map(([key, value]) => ({
|
|
441
|
+
key,
|
|
442
|
+
match: { value },
|
|
443
|
+
}));
|
|
444
|
+
return must.length > 0 ? { must } : {};
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Convert UUID string to a numeric ID for Qdrant.
|
|
448
|
+
* Qdrant supports both UUID strings and unsigned 64-bit integers as point IDs.
|
|
449
|
+
* We use UUID format directly as Qdrant v1.x supports UUID string IDs.
|
|
450
|
+
*/
|
|
451
|
+
uuidToNumeric(id) {
|
|
452
|
+
// Qdrant supports UUID string IDs - return as-is
|
|
453
|
+
// Ensure it's a valid UUID format; if not, pad it
|
|
454
|
+
if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id)) {
|
|
455
|
+
return id;
|
|
456
|
+
}
|
|
457
|
+
// Hash to a deterministic UUID-like format
|
|
458
|
+
let hash = 0;
|
|
459
|
+
for (let i = 0; i < id.length; i++) {
|
|
460
|
+
hash = ((hash << 5) - hash) + id.charCodeAt(i);
|
|
461
|
+
hash |= 0;
|
|
462
|
+
}
|
|
463
|
+
const absHash = Math.abs(hash);
|
|
464
|
+
return `00000000-0000-4000-8000-${String(absHash).padStart(12, '0')}`;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
//# sourceMappingURL=qdrant-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qdrant-store.js","sourceRoot":"","sources":["../../src/storage/qdrant-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const SCHEMA_SQL = "\n-- Repo registry\nCREATE TABLE IF NOT EXISTS repos (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n path TEXT NOT NULL,\n remote TEXT,\n stack TEXT NOT NULL DEFAULT '[]',\n sharing TEXT NOT NULL DEFAULT 'private',\n org TEXT,\n registered_at INTEGER NOT NULL,\n last_seen_at INTEGER NOT NULL,\n manifest_hash TEXT\n);\n\n-- Pipeline projects\nCREATE TABLE IF NOT EXISTS projects (\n id TEXT PRIMARY KEY,\n repo_id TEXT NOT NULL REFERENCES repos(id),\n name TEXT NOT NULL,\n description TEXT,\n current_phase TEXT NOT NULL DEFAULT 'idle',\n tier TEXT NOT NULL DEFAULT 'full',\n status TEXT NOT NULL DEFAULT 'active',\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n metadata TEXT NOT NULL DEFAULT '{}'\n);\n\n-- Pipeline events (event sourcing log)\nCREATE TABLE IF NOT EXISTS pipeline_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id TEXT NOT NULL REFERENCES projects(id),\n event_type TEXT NOT NULL,\n from_phase TEXT,\n to_phase TEXT,\n agent TEXT,\n payload TEXT NOT NULL DEFAULT '{}',\n created_at INTEGER NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_events_project\n ON pipeline_events(project_id, created_at);\n\n-- Phase outputs\nCREATE TABLE IF NOT EXISTS phase_outputs (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n project_id TEXT NOT NULL REFERENCES projects(id),\n phase TEXT NOT NULL,\n output_type TEXT NOT NULL,\n content TEXT NOT NULL,\n file_path TEXT,\n created_at INTEGER NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_outputs_project_phase\n ON phase_outputs(project_id, phase);\n\n-- Trajectories\nCREATE TABLE IF NOT EXISTS trajectories (\n id TEXT PRIMARY KEY,\n project_id TEXT NOT NULL REFERENCES projects(id),\n phase TEXT NOT NULL,\n agent TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'active',\n started_at INTEGER NOT NULL,\n completed_at INTEGER,\n success INTEGER,\n feedback TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_trajectories_project\n ON trajectories(project_id, phase);\n\n-- Trajectory steps\nCREATE TABLE IF NOT EXISTS trajectory_steps (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n trajectory_id TEXT NOT NULL REFERENCES trajectories(id),\n action TEXT NOT NULL,\n result TEXT,\n quality_score REAL,\n metadata TEXT NOT NULL DEFAULT '{}',\n created_at INTEGER NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_steps_trajectory\n ON trajectory_steps(trajectory_id, created_at);\n\n-- Sessions\nCREATE TABLE IF NOT EXISTS sessions (\n id TEXT NOT NULL,\n project_id TEXT REFERENCES projects(id),\n repo_id TEXT REFERENCES repos(id),\n started_at INTEGER NOT NULL,\n ended_at INTEGER,\n state TEXT NOT NULL DEFAULT '{}',\n observation_count INTEGER NOT NULL DEFAULT 0,\n PRIMARY KEY (id)\n);\nCREATE INDEX IF NOT EXISTS idx_sessions_project\n ON sessions(project_id);\n\n-- Parallel work claims\nCREATE TABLE IF NOT EXISTS claims (\n id TEXT PRIMARY KEY,\n project_id TEXT NOT NULL REFERENCES projects(id),\n module_name TEXT NOT NULL,\n agent TEXT NOT NULL,\n branch TEXT,\n status TEXT NOT NULL DEFAULT 'claimed',\n claimed_at INTEGER NOT NULL,\n completed_at INTEGER,\n result TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_claims_project\n ON claims(project_id, status);\n";
|
|
2
|
+
export declare const TABLE_NAMES: readonly ["repos", "projects", "pipeline_events", "phase_outputs", "trajectories", "trajectory_steps", "sessions", "claims"];
|
|
3
|
+
export type TableName = (typeof TABLE_NAMES)[number];
|
|
4
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/storage/schema.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,UAAU,wkHAgHtB,CAAC;AAIF,eAAO,MAAM,WAAW,8HASd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC"}
|