@vinaes/succ 1.4.0 → 1.5.42
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/README.md +64 -10
- package/dist/cli.js +81 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents-md.d.ts.map +1 -1
- package/dist/commands/agents-md.js +3 -2
- package/dist/commands/agents-md.js.map +1 -1
- package/dist/commands/analyze-profile.d.ts.map +1 -1
- package/dist/commands/analyze-profile.js +32 -8
- package/dist/commands/analyze-profile.js.map +1 -1
- package/dist/commands/analyze-recursive.d.ts.map +1 -1
- package/dist/commands/analyze-recursive.js +6 -2
- package/dist/commands/analyze-recursive.js.map +1 -1
- package/dist/commands/analyze-utils.d.ts.map +1 -1
- package/dist/commands/analyze-utils.js +17 -4
- package/dist/commands/analyze-utils.js.map +1 -1
- package/dist/commands/benchmark-quality.d.ts.map +1 -1
- package/dist/commands/benchmark-quality.js +11 -4
- package/dist/commands/benchmark-quality.js.map +1 -1
- package/dist/commands/benchmark-sqlite-vec.d.ts.map +1 -1
- package/dist/commands/benchmark-sqlite-vec.js +4 -0
- package/dist/commands/benchmark-sqlite-vec.js.map +1 -1
- package/dist/commands/benchmark.d.ts.map +1 -1
- package/dist/commands/benchmark.js +5 -1
- package/dist/commands/benchmark.js.map +1 -1
- package/dist/commands/codex-chat.d.ts +8 -0
- package/dist/commands/codex-chat.d.ts.map +1 -0
- package/dist/commands/codex-chat.js +161 -0
- package/dist/commands/codex-chat.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +32 -4
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +13 -4
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/index-code.d.ts +4 -0
- package/dist/commands/index-code.d.ts.map +1 -1
- package/dist/commands/index-code.js +1 -1
- package/dist/commands/index-code.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +305 -203
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/memories.d.ts.map +1 -1
- package/dist/commands/memories.js +25 -14
- package/dist/commands/memories.js.map +1 -1
- package/dist/commands/progress.d.ts.map +1 -1
- package/dist/commands/progress.js +3 -2
- package/dist/commands/progress.js.map +1 -1
- package/dist/commands/reindex.d.ts.map +1 -1
- package/dist/commands/reindex.js +54 -36
- package/dist/commands/reindex.js.map +1 -1
- package/dist/commands/retention.d.ts.map +1 -1
- package/dist/commands/retention.js +7 -5
- package/dist/commands/retention.js.map +1 -1
- package/dist/commands/scan-code.d.ts +76 -0
- package/dist/commands/scan-code.d.ts.map +1 -0
- package/dist/commands/scan-code.js +385 -0
- package/dist/commands/scan-code.js.map +1 -0
- package/dist/commands/score.d.ts.map +1 -1
- package/dist/commands/score.js +3 -2
- package/dist/commands/score.js.map +1 -1
- package/dist/commands/session.d.ts +33 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +163 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +254 -15
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/soul.js +3 -2
- package/dist/commands/soul.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +14 -5
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +13 -4
- package/dist/commands/watch.js.map +1 -1
- package/dist/daemon/analyzer.d.ts.map +1 -1
- package/dist/daemon/analyzer.js +21 -5
- package/dist/daemon/analyzer.js.map +1 -1
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +32 -8
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/routes/analyzer.d.ts +3 -0
- package/dist/daemon/routes/analyzer.d.ts.map +1 -0
- package/dist/daemon/routes/analyzer.js +27 -0
- package/dist/daemon/routes/analyzer.js.map +1 -0
- package/dist/daemon/routes/hooks.d.ts +14 -0
- package/dist/daemon/routes/hooks.d.ts.map +1 -0
- package/dist/daemon/routes/hooks.js +1212 -0
- package/dist/daemon/routes/hooks.js.map +1 -0
- package/dist/daemon/routes/memory.d.ts +4 -0
- package/dist/daemon/routes/memory.d.ts.map +1 -0
- package/dist/daemon/routes/memory.js +71 -0
- package/dist/daemon/routes/memory.js.map +1 -0
- package/dist/daemon/routes/reflection.d.ts +10 -0
- package/dist/daemon/routes/reflection.d.ts.map +1 -0
- package/dist/daemon/routes/reflection.js +397 -0
- package/dist/daemon/routes/reflection.js.map +1 -0
- package/dist/daemon/routes/search.d.ts +5 -0
- package/dist/daemon/routes/search.d.ts.map +1 -0
- package/dist/daemon/routes/search.js +93 -0
- package/dist/daemon/routes/search.js.map +1 -0
- package/dist/daemon/routes/sessions.d.ts +3 -0
- package/dist/daemon/routes/sessions.d.ts.map +1 -0
- package/dist/daemon/routes/sessions.js +160 -0
- package/dist/daemon/routes/sessions.js.map +1 -0
- package/dist/daemon/routes/skills.d.ts +3 -0
- package/dist/daemon/routes/skills.d.ts.map +1 -0
- package/dist/daemon/routes/skills.js +36 -0
- package/dist/daemon/routes/skills.js.map +1 -0
- package/dist/daemon/routes/status.d.ts +3 -0
- package/dist/daemon/routes/status.d.ts.map +1 -0
- package/dist/daemon/routes/status.js +47 -0
- package/dist/daemon/routes/status.js.map +1 -0
- package/dist/daemon/routes/types.d.ts +240 -0
- package/dist/daemon/routes/types.d.ts.map +1 -0
- package/dist/daemon/routes/types.js +97 -0
- package/dist/daemon/routes/types.js.map +1 -0
- package/dist/daemon/routes/versioning.d.ts +27 -0
- package/dist/daemon/routes/versioning.d.ts.map +1 -0
- package/dist/daemon/routes/versioning.js +44 -0
- package/dist/daemon/routes/versioning.js.map +1 -0
- package/dist/daemon/routes/watcher.d.ts +3 -0
- package/dist/daemon/routes/watcher.d.ts.map +1 -0
- package/dist/daemon/routes/watcher.js +28 -0
- package/dist/daemon/routes/watcher.js.map +1 -0
- package/dist/daemon/service.d.ts +5 -23
- package/dist/daemon/service.d.ts.map +1 -1
- package/dist/daemon/service.js +201 -933
- package/dist/daemon/service.js.map +1 -1
- package/dist/daemon/session-processor.d.ts +4 -8
- package/dist/daemon/session-processor.d.ts.map +1 -1
- package/dist/daemon/session-processor.js +39 -38
- package/dist/daemon/session-processor.js.map +1 -1
- package/dist/lib/ai-readiness.d.ts.map +1 -1
- package/dist/lib/ai-readiness.js +33 -8
- package/dist/lib/ai-readiness.js.map +1 -1
- package/dist/lib/analyze-state.d.ts.map +1 -1
- package/dist/lib/analyze-state.js +25 -3
- package/dist/lib/analyze-state.js.map +1 -1
- package/dist/lib/auto-memory/consolidation.d.ts +41 -0
- package/dist/lib/auto-memory/consolidation.d.ts.map +1 -0
- package/dist/lib/auto-memory/consolidation.js +151 -0
- package/dist/lib/auto-memory/consolidation.js.map +1 -0
- package/dist/lib/bpe.d.ts.map +1 -1
- package/dist/lib/bpe.js +9 -10
- package/dist/lib/bpe.js.map +1 -1
- package/dist/lib/brain-export.d.ts +65 -0
- package/dist/lib/brain-export.d.ts.map +1 -0
- package/dist/lib/brain-export.js +413 -0
- package/dist/lib/brain-export.js.map +1 -0
- package/dist/lib/checkpoint.d.ts.map +1 -1
- package/dist/lib/checkpoint.js +22 -6
- package/dist/lib/checkpoint.js.map +1 -1
- package/dist/lib/chunker.d.ts.map +1 -1
- package/dist/lib/chunker.js +6 -1
- package/dist/lib/chunker.js.map +1 -1
- package/dist/lib/claude-ws-transport.d.ts.map +1 -1
- package/dist/lib/claude-ws-transport.js +12 -4
- package/dist/lib/claude-ws-transport.js.map +1 -1
- package/dist/lib/command-safety.d.ts +64 -0
- package/dist/lib/command-safety.d.ts.map +1 -0
- package/dist/lib/command-safety.js +625 -0
- package/dist/lib/command-safety.js.map +1 -0
- package/dist/lib/compact-briefing.d.ts.map +1 -1
- package/dist/lib/compact-briefing.js +10 -13
- package/dist/lib/compact-briefing.js.map +1 -1
- package/dist/lib/config-defaults.d.ts.map +1 -1
- package/dist/lib/config-defaults.js +3 -0
- package/dist/lib/config-defaults.js.map +1 -1
- package/dist/lib/config-display.d.ts +4 -0
- package/dist/lib/config-display.d.ts.map +1 -1
- package/dist/lib/config-display.js +6 -1
- package/dist/lib/config-display.js.map +1 -1
- package/dist/lib/config-types.d.ts +156 -0
- package/dist/lib/config-types.d.ts.map +1 -1
- package/dist/lib/config-validation.d.ts.map +1 -1
- package/dist/lib/config-validation.js +5 -0
- package/dist/lib/config-validation.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +92 -9
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/consolidate.d.ts.map +1 -1
- package/dist/lib/consolidate.js +66 -47
- package/dist/lib/consolidate.js.map +1 -1
- package/dist/lib/content-sanitizer.d.ts +29 -0
- package/dist/lib/content-sanitizer.d.ts.map +1 -0
- package/dist/lib/content-sanitizer.js +72 -0
- package/dist/lib/content-sanitizer.js.map +1 -0
- package/dist/lib/cross-repo.d.ts +44 -0
- package/dist/lib/cross-repo.d.ts.map +1 -0
- package/dist/lib/cross-repo.js +108 -0
- package/dist/lib/cross-repo.js.map +1 -0
- package/dist/lib/daemon-port.d.ts +12 -0
- package/dist/lib/daemon-port.d.ts.map +1 -0
- package/dist/lib/daemon-port.js +20 -0
- package/dist/lib/daemon-port.js.map +1 -0
- package/dist/lib/db/auto-memory.d.ts +40 -0
- package/dist/lib/db/auto-memory.d.ts.map +1 -0
- package/dist/lib/db/auto-memory.js +74 -0
- package/dist/lib/db/auto-memory.js.map +1 -0
- package/dist/lib/db/bm25-indexes.d.ts.map +1 -1
- package/dist/lib/db/bm25-indexes.js +16 -4
- package/dist/lib/db/bm25-indexes.js.map +1 -1
- package/dist/lib/db/documents.d.ts.map +1 -1
- package/dist/lib/db/documents.js +4 -1
- package/dist/lib/db/documents.js.map +1 -1
- package/dist/lib/db/global-memories.d.ts +2 -10
- package/dist/lib/db/global-memories.d.ts.map +1 -1
- package/dist/lib/db/global-memories.js +13 -6
- package/dist/lib/db/global-memories.js.map +1 -1
- package/dist/lib/db/graph.d.ts +5 -1
- package/dist/lib/db/graph.d.ts.map +1 -1
- package/dist/lib/db/graph.js +38 -8
- package/dist/lib/db/graph.js.map +1 -1
- package/dist/lib/db/hybrid-search.d.ts +4 -2
- package/dist/lib/db/hybrid-search.d.ts.map +1 -1
- package/dist/lib/db/hybrid-search.js +29 -11
- package/dist/lib/db/hybrid-search.js.map +1 -1
- package/dist/lib/db/index.d.ts +6 -1
- package/dist/lib/db/index.d.ts.map +1 -1
- package/dist/lib/db/index.js +5 -1
- package/dist/lib/db/index.js.map +1 -1
- package/dist/lib/db/memories.d.ts +19 -14
- package/dist/lib/db/memories.d.ts.map +1 -1
- package/dist/lib/db/memories.js +100 -37
- package/dist/lib/db/memories.js.map +1 -1
- package/dist/lib/db/parse-helpers.d.ts +14 -0
- package/dist/lib/db/parse-helpers.d.ts.map +1 -0
- package/dist/lib/db/parse-helpers.js +59 -0
- package/dist/lib/db/parse-helpers.js.map +1 -0
- package/dist/lib/db/recall-events.d.ts +49 -0
- package/dist/lib/db/recall-events.d.ts.map +1 -0
- package/dist/lib/db/recall-events.js +196 -0
- package/dist/lib/db/recall-events.js.map +1 -0
- package/dist/lib/db/retention.d.ts +4 -3
- package/dist/lib/db/retention.d.ts.map +1 -1
- package/dist/lib/db/retention.js +12 -1
- package/dist/lib/db/retention.js.map +1 -1
- package/dist/lib/db/schema.d.ts +2 -0
- package/dist/lib/db/schema.d.ts.map +1 -1
- package/dist/lib/db/schema.js +140 -80
- package/dist/lib/db/schema.js.map +1 -1
- package/dist/lib/db/skills.d.ts.map +1 -1
- package/dist/lib/db/skills.js +10 -6
- package/dist/lib/db/skills.js.map +1 -1
- package/dist/lib/diff-brain.d.ts +24 -0
- package/dist/lib/diff-brain.d.ts.map +1 -0
- package/dist/lib/diff-brain.js +114 -0
- package/dist/lib/diff-brain.js.map +1 -0
- package/dist/lib/diff-parser.d.ts +74 -0
- package/dist/lib/diff-parser.d.ts.map +1 -0
- package/dist/lib/diff-parser.js +200 -0
- package/dist/lib/diff-parser.js.map +1 -0
- package/dist/lib/embedding-pool.d.ts.map +1 -1
- package/dist/lib/embedding-pool.js +5 -1
- package/dist/lib/embedding-pool.js.map +1 -1
- package/dist/lib/embeddings.d.ts +12 -0
- package/dist/lib/embeddings.d.ts.map +1 -1
- package/dist/lib/embeddings.js +77 -19
- package/dist/lib/embeddings.js.map +1 -1
- package/dist/lib/errors.d.ts +2 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +4 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/fault-logger.d.ts.map +1 -1
- package/dist/lib/fault-logger.js +22 -7
- package/dist/lib/fault-logger.js.map +1 -1
- package/dist/lib/git/co-change.d.ts +39 -0
- package/dist/lib/git/co-change.d.ts.map +1 -0
- package/dist/lib/git/co-change.js +139 -0
- package/dist/lib/git/co-change.js.map +1 -0
- package/dist/lib/graph/bridge-edges.d.ts +93 -0
- package/dist/lib/graph/bridge-edges.d.ts.map +1 -0
- package/dist/lib/graph/bridge-edges.js +276 -0
- package/dist/lib/graph/bridge-edges.js.map +1 -0
- package/dist/lib/graph/centrality.d.ts +11 -0
- package/dist/lib/graph/centrality.d.ts.map +1 -1
- package/dist/lib/graph/centrality.js +51 -3
- package/dist/lib/graph/centrality.js.map +1 -1
- package/dist/lib/graph/cleanup.d.ts.map +1 -1
- package/dist/lib/graph/cleanup.js +2 -1
- package/dist/lib/graph/cleanup.js.map +1 -1
- package/dist/lib/graph/community-detection.d.ts +17 -2
- package/dist/lib/graph/community-detection.d.ts.map +1 -1
- package/dist/lib/graph/community-detection.js +147 -48
- package/dist/lib/graph/community-detection.js.map +1 -1
- package/dist/lib/graph/community-summaries.d.ts +26 -0
- package/dist/lib/graph/community-summaries.d.ts.map +1 -0
- package/dist/lib/graph/community-summaries.js +130 -0
- package/dist/lib/graph/community-summaries.js.map +1 -0
- package/dist/lib/graph/contextual-proximity.d.ts.map +1 -1
- package/dist/lib/graph/contextual-proximity.js +11 -4
- package/dist/lib/graph/contextual-proximity.js.map +1 -1
- package/dist/lib/graph/graphology-bridge.d.ts +101 -0
- package/dist/lib/graph/graphology-bridge.d.ts.map +1 -0
- package/dist/lib/graph/graphology-bridge.js +488 -0
- package/dist/lib/graph/graphology-bridge.js.map +1 -0
- package/dist/lib/graph/llm-relations.d.ts.map +1 -1
- package/dist/lib/graph/llm-relations.js +27 -5
- package/dist/lib/graph/llm-relations.js.map +1 -1
- package/dist/lib/graph-export.d.ts.map +1 -1
- package/dist/lib/graph-export.js +2 -2
- package/dist/lib/graph-export.js.map +1 -1
- package/dist/lib/graph-scheduler.d.ts +0 -5
- package/dist/lib/graph-scheduler.d.ts.map +1 -1
- package/dist/lib/graph-scheduler.js +5 -1
- package/dist/lib/graph-scheduler.js.map +1 -1
- package/dist/lib/guardrails.d.ts +50 -0
- package/dist/lib/guardrails.d.ts.map +1 -0
- package/dist/lib/guardrails.js +502 -0
- package/dist/lib/guardrails.js.map +1 -0
- package/dist/lib/hook-rules.d.ts +1 -1
- package/dist/lib/hook-rules.d.ts.map +1 -1
- package/dist/lib/hook-rules.js +8 -2
- package/dist/lib/hook-rules.js.map +1 -1
- package/dist/lib/ifc/file-labels.d.ts +35 -0
- package/dist/lib/ifc/file-labels.d.ts.map +1 -0
- package/dist/lib/ifc/file-labels.js +208 -0
- package/dist/lib/ifc/file-labels.js.map +1 -0
- package/dist/lib/ifc/label.d.ts +38 -0
- package/dist/lib/ifc/label.d.ts.map +1 -0
- package/dist/lib/ifc/label.js +80 -0
- package/dist/lib/ifc/label.js.map +1 -0
- package/dist/lib/ifc/session-ifc.d.ts +92 -0
- package/dist/lib/ifc/session-ifc.d.ts.map +1 -0
- package/dist/lib/ifc/session-ifc.js +222 -0
- package/dist/lib/ifc/session-ifc.js.map +1 -0
- package/dist/lib/indexer.js +2 -2
- package/dist/lib/indexer.js.map +1 -1
- package/dist/lib/injection-detector.d.ts +83 -0
- package/dist/lib/injection-detector.d.ts.map +1 -0
- package/dist/lib/injection-detector.js +586 -0
- package/dist/lib/injection-detector.js.map +1 -0
- package/dist/lib/injection-semantic.d.ts +31 -0
- package/dist/lib/injection-semantic.d.ts.map +1 -0
- package/dist/lib/injection-semantic.js +230 -0
- package/dist/lib/injection-semantic.js.map +1 -0
- package/dist/lib/llm.d.ts.map +1 -1
- package/dist/lib/llm.js +19 -4
- package/dist/lib/llm.js.map +1 -1
- package/dist/lib/lock.d.ts.map +1 -1
- package/dist/lib/lock.js +24 -3
- package/dist/lib/lock.js.map +1 -1
- package/dist/lib/md-fetch.d.ts.map +1 -1
- package/dist/lib/md-fetch.js +9 -2
- package/dist/lib/md-fetch.js.map +1 -1
- package/dist/lib/observability.d.ts +75 -0
- package/dist/lib/observability.d.ts.map +1 -0
- package/dist/lib/observability.js +201 -0
- package/dist/lib/observability.js.map +1 -0
- package/dist/lib/ort-session.d.ts +26 -0
- package/dist/lib/ort-session.d.ts.map +1 -1
- package/dist/lib/ort-session.js +107 -3
- package/dist/lib/ort-session.js.map +1 -1
- package/dist/lib/prd/codebase-context.d.ts.map +1 -1
- package/dist/lib/prd/codebase-context.js +9 -2
- package/dist/lib/prd/codebase-context.js.map +1 -1
- package/dist/lib/prd/context.d.ts.map +1 -1
- package/dist/lib/prd/context.js +11 -3
- package/dist/lib/prd/context.js.map +1 -1
- package/dist/lib/prd/export.js +1 -1
- package/dist/lib/prd/export.js.map +1 -1
- package/dist/lib/prd/generate.d.ts.map +1 -1
- package/dist/lib/prd/generate.js +17 -4
- package/dist/lib/prd/generate.js.map +1 -1
- package/dist/lib/prd/parse.d.ts.map +1 -1
- package/dist/lib/prd/parse.js +6 -1
- package/dist/lib/prd/parse.js.map +1 -1
- package/dist/lib/prd/runner.d.ts +1 -2
- package/dist/lib/prd/runner.d.ts.map +1 -1
- package/dist/lib/prd/runner.js +43 -32
- package/dist/lib/prd/runner.js.map +1 -1
- package/dist/lib/prd/worktree.d.ts +1 -2
- package/dist/lib/prd/worktree.d.ts.map +1 -1
- package/dist/lib/prd/worktree.js +62 -70
- package/dist/lib/prd/worktree.js.map +1 -1
- package/dist/lib/precompute-context.d.ts.map +1 -1
- package/dist/lib/precompute-context.js +15 -34
- package/dist/lib/precompute-context.js.map +1 -1
- package/dist/lib/pricing.d.ts.map +1 -1
- package/dist/lib/pricing.js +5 -1
- package/dist/lib/pricing.js.map +1 -1
- package/dist/lib/process-registry.js +3 -3
- package/dist/lib/process-registry.js.map +1 -1
- package/dist/lib/public-api.d.ts +41 -1
- package/dist/lib/public-api.d.ts.map +1 -1
- package/dist/lib/public-api.js +38 -0
- package/dist/lib/public-api.js.map +1 -1
- package/dist/lib/quality.d.ts.map +1 -1
- package/dist/lib/quality.js +15 -6
- package/dist/lib/quality.js.map +1 -1
- package/dist/lib/query-expansion.d.ts +32 -0
- package/dist/lib/query-expansion.d.ts.map +1 -1
- package/dist/lib/query-expansion.js +62 -1
- package/dist/lib/query-expansion.js.map +1 -1
- package/dist/lib/reference-embeddings.d.ts.map +1 -1
- package/dist/lib/reference-embeddings.js +17 -4
- package/dist/lib/reference-embeddings.js.map +1 -1
- package/dist/lib/reflection-synthesizer.d.ts.map +1 -1
- package/dist/lib/reflection-synthesizer.js +7 -1
- package/dist/lib/reflection-synthesizer.js.map +1 -1
- package/dist/lib/reranker.d.ts +41 -0
- package/dist/lib/reranker.d.ts.map +1 -0
- package/dist/lib/reranker.js +294 -0
- package/dist/lib/reranker.js.map +1 -0
- package/dist/lib/retrieval-feedback.d.ts +100 -0
- package/dist/lib/retrieval-feedback.d.ts.map +1 -0
- package/dist/lib/retrieval-feedback.js +174 -0
- package/dist/lib/retrieval-feedback.js.map +1 -0
- package/dist/lib/review/context-pack.d.ts +58 -0
- package/dist/lib/review/context-pack.d.ts.map +1 -0
- package/dist/lib/review/context-pack.js +300 -0
- package/dist/lib/review/context-pack.js.map +1 -0
- package/dist/lib/search/hierarchical-summaries.d.ts +65 -0
- package/dist/lib/search/hierarchical-summaries.d.ts.map +1 -0
- package/dist/lib/search/hierarchical-summaries.js +423 -0
- package/dist/lib/search/hierarchical-summaries.js.map +1 -0
- package/dist/lib/search/hyde.d.ts +27 -0
- package/dist/lib/search/hyde.d.ts.map +1 -0
- package/dist/lib/search/hyde.js +141 -0
- package/dist/lib/search/hyde.js.map +1 -0
- package/dist/lib/search/late-chunking.d.ts +53 -0
- package/dist/lib/search/late-chunking.d.ts.map +1 -0
- package/dist/lib/search/late-chunking.js +230 -0
- package/dist/lib/search/late-chunking.js.map +1 -0
- package/dist/lib/search/ppr-retrieval.d.ts +49 -0
- package/dist/lib/search/ppr-retrieval.d.ts.map +1 -0
- package/dist/lib/search/ppr-retrieval.js +135 -0
- package/dist/lib/search/ppr-retrieval.js.map +1 -0
- package/dist/lib/search/repo-map.d.ts +43 -0
- package/dist/lib/search/repo-map.d.ts.map +1 -0
- package/dist/lib/search/repo-map.js +165 -0
- package/dist/lib/search/repo-map.js.map +1 -0
- package/dist/lib/session-analyzer.d.ts +90 -0
- package/dist/lib/session-analyzer.d.ts.map +1 -0
- package/dist/lib/session-analyzer.js +467 -0
- package/dist/lib/session-analyzer.js.map +1 -0
- package/dist/lib/session-observations.d.ts.map +1 -1
- package/dist/lib/session-observations.js +13 -3
- package/dist/lib/session-observations.js.map +1 -1
- package/dist/lib/session-summary.d.ts.map +1 -1
- package/dist/lib/session-summary.js +57 -50
- package/dist/lib/session-summary.js.map +1 -1
- package/dist/lib/session-surgeon.d.ts +53 -0
- package/dist/lib/session-surgeon.d.ts.map +1 -0
- package/dist/lib/session-surgeon.js +501 -0
- package/dist/lib/session-surgeon.js.map +1 -0
- package/dist/lib/similarity-utils.d.ts +26 -0
- package/dist/lib/similarity-utils.d.ts.map +1 -0
- package/dist/lib/similarity-utils.js +66 -0
- package/dist/lib/similarity-utils.js.map +1 -0
- package/dist/lib/skills.d.ts.map +1 -1
- package/dist/lib/skills.js +11 -11
- package/dist/lib/skills.js.map +1 -1
- package/dist/lib/storage/backends/interface.d.ts +13 -3
- package/dist/lib/storage/backends/interface.d.ts.map +1 -1
- package/dist/lib/storage/backends/postgresql.d.ts +52 -3
- package/dist/lib/storage/backends/postgresql.d.ts.map +1 -1
- package/dist/lib/storage/backends/postgresql.js +694 -49
- package/dist/lib/storage/backends/postgresql.js.map +1 -1
- package/dist/lib/storage/benchmark.js +2 -2
- package/dist/lib/storage/benchmark.js.map +1 -1
- package/dist/lib/storage/dispatcher/base.d.ts +114 -0
- package/dist/lib/storage/dispatcher/base.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/base.js +160 -0
- package/dist/lib/storage/dispatcher/base.js.map +1 -0
- package/dist/lib/storage/dispatcher/documents.d.ts +25 -0
- package/dist/lib/storage/dispatcher/documents.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/documents.js +194 -0
- package/dist/lib/storage/dispatcher/documents.js.map +1 -0
- package/dist/lib/storage/dispatcher/embeddings.d.ts +34 -0
- package/dist/lib/storage/dispatcher/embeddings.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/embeddings.js +144 -0
- package/dist/lib/storage/dispatcher/embeddings.js.map +1 -0
- package/dist/lib/storage/dispatcher/export-import.d.ts +139 -0
- package/dist/lib/storage/dispatcher/export-import.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/export-import.js +191 -0
- package/dist/lib/storage/dispatcher/export-import.js.map +1 -0
- package/dist/lib/storage/dispatcher/file-hashes.d.ts +13 -0
- package/dist/lib/storage/dispatcher/file-hashes.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/file-hashes.js +36 -0
- package/dist/lib/storage/dispatcher/file-hashes.js.map +1 -0
- package/dist/lib/storage/dispatcher/global-memories.d.ts +28 -0
- package/dist/lib/storage/dispatcher/global-memories.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/global-memories.js +151 -0
- package/dist/lib/storage/dispatcher/global-memories.js.map +1 -0
- package/dist/lib/storage/dispatcher/graph.d.ts +32 -0
- package/dist/lib/storage/dispatcher/graph.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/graph.js +146 -0
- package/dist/lib/storage/dispatcher/graph.js.map +1 -0
- package/dist/lib/storage/dispatcher/index.d.ts +34 -0
- package/dist/lib/storage/dispatcher/index.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/index.js +139 -0
- package/dist/lib/storage/dispatcher/index.js.map +1 -0
- package/dist/lib/storage/dispatcher/memories.d.ts +65 -0
- package/dist/lib/storage/dispatcher/memories.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/memories.js +466 -0
- package/dist/lib/storage/dispatcher/memories.js.map +1 -0
- package/dist/lib/storage/dispatcher/mixin-helper.d.ts +6 -0
- package/dist/lib/storage/dispatcher/mixin-helper.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/mixin-helper.js +10 -0
- package/dist/lib/storage/dispatcher/mixin-helper.js.map +1 -0
- package/dist/lib/storage/dispatcher/retention.d.ts +20 -0
- package/dist/lib/storage/dispatcher/retention.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/retention.js +123 -0
- package/dist/lib/storage/dispatcher/retention.js.map +1 -0
- package/dist/lib/storage/dispatcher/search.d.ts +34 -0
- package/dist/lib/storage/dispatcher/search.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/search.js +222 -0
- package/dist/lib/storage/dispatcher/search.js.map +1 -0
- package/dist/lib/storage/dispatcher/skills.d.ts +53 -0
- package/dist/lib/storage/dispatcher/skills.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/skills.js +98 -0
- package/dist/lib/storage/dispatcher/skills.js.map +1 -0
- package/dist/lib/storage/dispatcher/token-stats.d.ts +23 -0
- package/dist/lib/storage/dispatcher/token-stats.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/token-stats.js +92 -0
- package/dist/lib/storage/dispatcher/token-stats.js.map +1 -0
- package/dist/lib/storage/dispatcher/web-search.d.ts +10 -0
- package/dist/lib/storage/dispatcher/web-search.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher/web-search.js +39 -0
- package/dist/lib/storage/dispatcher/web-search.js.map +1 -0
- package/dist/lib/storage/dispatcher-export.d.ts.map +1 -1
- package/dist/lib/storage/dispatcher-export.js +48 -39
- package/dist/lib/storage/dispatcher-export.js.map +1 -1
- package/dist/lib/storage/dispatcher.d.ts +1 -468
- package/dist/lib/storage/dispatcher.d.ts.map +1 -1
- package/dist/lib/storage/dispatcher.js +1 -1931
- package/dist/lib/storage/dispatcher.js.map +1 -1
- package/dist/lib/storage/index.d.ts +20 -5
- package/dist/lib/storage/index.d.ts.map +1 -1
- package/dist/lib/storage/index.js +36 -7
- package/dist/lib/storage/index.js.map +1 -1
- package/dist/lib/storage/migration/export-import.d.ts.map +1 -1
- package/dist/lib/storage/migration/export-import.js +9 -2
- package/dist/lib/storage/migration/export-import.js.map +1 -1
- package/dist/lib/storage/types.d.ts +152 -10
- package/dist/lib/storage/types.d.ts.map +1 -1
- package/dist/lib/storage/types.js +13 -0
- package/dist/lib/storage/types.js.map +1 -1
- package/dist/lib/storage/vector/interface.d.ts +4 -0
- package/dist/lib/storage/vector/interface.d.ts.map +1 -1
- package/dist/lib/storage/vector/qdrant.d.ts +13 -2
- package/dist/lib/storage/vector/qdrant.d.ts.map +1 -1
- package/dist/lib/storage/vector/qdrant.js +147 -61
- package/dist/lib/storage/vector/qdrant.js.map +1 -1
- package/dist/lib/token-budget.d.ts.map +1 -1
- package/dist/lib/token-budget.js +9 -2
- package/dist/lib/token-budget.js.map +1 -1
- package/dist/lib/transcript-utils.d.ts +60 -0
- package/dist/lib/transcript-utils.d.ts.map +1 -0
- package/dist/lib/transcript-utils.js +69 -0
- package/dist/lib/transcript-utils.js.map +1 -0
- package/dist/lib/tree-sitter/extractor.d.ts +1 -1
- package/dist/lib/tree-sitter/extractor.d.ts.map +1 -1
- package/dist/lib/tree-sitter/extractor.js +34 -9
- package/dist/lib/tree-sitter/extractor.js.map +1 -1
- package/dist/lib/tree-sitter/parser.d.ts.map +1 -1
- package/dist/lib/tree-sitter/parser.js +45 -11
- package/dist/lib/tree-sitter/parser.js.map +1 -1
- package/dist/lib/tree-sitter/public.d.ts +12 -0
- package/dist/lib/tree-sitter/public.d.ts.map +1 -1
- package/dist/lib/tree-sitter/public.js +33 -1
- package/dist/lib/tree-sitter/public.js.map +1 -1
- package/dist/lib/tree-sitter/queries.d.ts.map +1 -1
- package/dist/lib/tree-sitter/queries.js +8 -0
- package/dist/lib/tree-sitter/queries.js.map +1 -1
- package/dist/lib/version-check.d.ts +29 -0
- package/dist/lib/version-check.d.ts.map +1 -0
- package/dist/lib/version-check.js +187 -0
- package/dist/lib/version-check.js.map +1 -0
- package/dist/lib/working-memory-pipeline.d.ts.map +1 -1
- package/dist/lib/working-memory-pipeline.js +12 -3
- package/dist/lib/working-memory-pipeline.js.map +1 -1
- package/dist/lib/worktree-detect.d.ts +43 -0
- package/dist/lib/worktree-detect.d.ts.map +1 -0
- package/dist/lib/worktree-detect.js +154 -0
- package/dist/lib/worktree-detect.js.map +1 -0
- package/dist/lsp/client.d.ts +96 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +435 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/installer.d.ts +39 -0
- package/dist/lsp/installer.d.ts.map +1 -0
- package/dist/lsp/installer.js +275 -0
- package/dist/lsp/installer.js.map +1 -0
- package/dist/lsp/manager.d.ts +62 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +234 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/servers.d.ts +52 -0
- package/dist/lsp/servers.d.ts.map +1 -0
- package/dist/lsp/servers.js +162 -0
- package/dist/lsp/servers.js.map +1 -0
- package/dist/mcp/helpers.d.ts.map +1 -1
- package/dist/mcp/helpers.js +8 -2
- package/dist/mcp/helpers.js.map +1 -1
- package/dist/mcp/profile.js +1 -1
- package/dist/mcp/server.d.ts +3 -2
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +19 -7
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/config.d.ts.map +1 -1
- package/dist/mcp/tools/config.js +28 -118
- package/dist/mcp/tools/config.js.map +1 -1
- package/dist/mcp/tools/dead-end.d.ts.map +1 -1
- package/dist/mcp/tools/dead-end.js +4 -3
- package/dist/mcp/tools/dead-end.js.map +1 -1
- package/dist/mcp/tools/debug.d.ts.map +1 -1
- package/dist/mcp/tools/debug.js +27 -112
- package/dist/mcp/tools/debug.js.map +1 -1
- package/dist/mcp/tools/graph.d.ts.map +1 -1
- package/dist/mcp/tools/graph.js +164 -176
- package/dist/mcp/tools/graph.js.map +1 -1
- package/dist/mcp/tools/indexing.d.ts +1 -1
- package/dist/mcp/tools/indexing.d.ts.map +1 -1
- package/dist/mcp/tools/indexing.js +63 -164
- package/dist/mcp/tools/indexing.js.map +1 -1
- package/dist/mcp/tools/memory/forget.d.ts +3 -0
- package/dist/mcp/tools/memory/forget.d.ts.map +1 -0
- package/dist/mcp/tools/memory/forget.js +175 -0
- package/dist/mcp/tools/memory/forget.js.map +1 -0
- package/dist/mcp/tools/memory/memory-helpers.d.ts +45 -0
- package/dist/mcp/tools/memory/memory-helpers.d.ts.map +1 -0
- package/dist/mcp/tools/memory/memory-helpers.js +291 -0
- package/dist/mcp/tools/memory/memory-helpers.js.map +1 -0
- package/dist/mcp/tools/memory/recall.d.ts +3 -0
- package/dist/mcp/tools/memory/recall.d.ts.map +1 -0
- package/dist/mcp/tools/memory/recall.js +495 -0
- package/dist/mcp/tools/memory/recall.js.map +1 -0
- package/dist/mcp/tools/memory/remember.d.ts +3 -0
- package/dist/mcp/tools/memory/remember.d.ts.map +1 -0
- package/dist/mcp/tools/memory/remember.js +256 -0
- package/dist/mcp/tools/memory/remember.js.map +1 -0
- package/dist/mcp/tools/memory/temporal-query.d.ts +8 -0
- package/dist/mcp/tools/memory/temporal-query.d.ts.map +1 -0
- package/dist/mcp/tools/memory/temporal-query.js +68 -0
- package/dist/mcp/tools/memory/temporal-query.js.map +1 -0
- package/dist/mcp/tools/memory.d.ts +0 -11
- package/dist/mcp/tools/memory.d.ts.map +1 -1
- package/dist/mcp/tools/memory.js +6 -1228
- package/dist/mcp/tools/memory.js.map +1 -1
- package/dist/mcp/tools/prd.d.ts.map +1 -1
- package/dist/mcp/tools/prd.js +19 -70
- package/dist/mcp/tools/prd.js.map +1 -1
- package/dist/mcp/tools/review.d.ts +8 -0
- package/dist/mcp/tools/review.d.ts.map +1 -0
- package/dist/mcp/tools/review.js +133 -0
- package/dist/mcp/tools/review.js.map +1 -0
- package/dist/mcp/tools/search.d.ts.map +1 -1
- package/dist/mcp/tools/search.js +79 -8
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/mcp/tools/status.d.ts.map +1 -1
- package/dist/mcp/tools/status.js +50 -75
- package/dist/mcp/tools/status.js.map +1 -1
- package/dist/mcp/tools/web-fetch.d.ts.map +1 -1
- package/dist/mcp/tools/web-fetch.js +5 -1
- package/dist/mcp/tools/web-fetch.js.map +1 -1
- package/dist/mcp/tools/web-search.d.ts.map +1 -1
- package/dist/mcp/tools/web-search.js +25 -103
- package/dist/mcp/tools/web-search.js.map +1 -1
- package/dist/prompts/guardrails.d.ts +14 -0
- package/dist/prompts/guardrails.d.ts.map +1 -0
- package/dist/prompts/guardrails.js +115 -0
- package/dist/prompts/guardrails.js.map +1 -0
- package/dist/prompts/index.d.ts +2 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +3 -1
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/prd.d.ts +0 -2
- package/dist/prompts/prd.d.ts.map +1 -1
- package/dist/prompts/prd.js +0 -2
- package/dist/prompts/prd.js.map +1 -1
- package/hooks/core/__tests__/adapter.test.cjs +340 -0
- package/hooks/core/adapter.cjs +463 -0
- package/hooks/core/config.cjs +83 -0
- package/hooks/core/daemon-boot.cjs +140 -0
- package/hooks/core/log.cjs +41 -0
- package/hooks/core/worktree.cjs +119 -0
- package/hooks/succ-post-tool.cjs +198 -134
- package/hooks/succ-pre-compact.cjs +262 -0
- package/hooks/succ-pre-tool.cjs +526 -182
- package/hooks/succ-session-end.cjs +40 -64
- package/hooks/succ-session-start.cjs +528 -427
- package/hooks/succ-stop-reflection.cjs +36 -62
- package/hooks/succ-user-prompt.cjs +137 -180
- package/package.json +17 -6
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-encoder reranker for search result post-processing.
|
|
3
|
+
*
|
|
4
|
+
* Uses an ONNX cross-encoder model (ms-marco-MiniLM-L6-v2) to score
|
|
5
|
+
* (query, document) pairs for relevance. Applied after hybrid search
|
|
6
|
+
* (BM25 + vector + RRF) to improve precision.
|
|
7
|
+
*
|
|
8
|
+
* Architecture: singleton session, lazy-loaded on first use, auto-disposed on cleanup.
|
|
9
|
+
*/
|
|
10
|
+
import * as ort from 'onnxruntime-node';
|
|
11
|
+
import { resolveModelPath } from './ort-session.js';
|
|
12
|
+
import { detectExecutionProvider } from './ort-provider.js';
|
|
13
|
+
import { getConfig } from './config.js';
|
|
14
|
+
import { logInfo, logWarn } from './fault-logger.js';
|
|
15
|
+
/** Default cross-encoder model — small, fast, good quality */
|
|
16
|
+
const DEFAULT_RERANKER_MODEL = 'cross-encoder/ms-marco-MiniLM-L6-v2';
|
|
17
|
+
/** Max sequence length for cross-encoder input (query + doc tokens) */
|
|
18
|
+
const MAX_SEQ_LENGTH = 512;
|
|
19
|
+
/** Batch size for cross-encoder inference (limits memory usage) */
|
|
20
|
+
const RERANKER_BATCH_SIZE = 16;
|
|
21
|
+
// Singleton session
|
|
22
|
+
let rerankerSession = null;
|
|
23
|
+
let rerankerTokenizer = null;
|
|
24
|
+
let rerankerInitializing = null;
|
|
25
|
+
let rerankerInitFailed = false; // Don't retry after initialization failure
|
|
26
|
+
let rerankerShuttingDown = false; // Guard against races between init and cleanup
|
|
27
|
+
/**
|
|
28
|
+
* Initialize the cross-encoder reranker session.
|
|
29
|
+
* Uses same model resolution + provider detection as embedding pipeline.
|
|
30
|
+
*/
|
|
31
|
+
async function initReranker() {
|
|
32
|
+
if (rerankerShuttingDown)
|
|
33
|
+
throw new Error('Reranker is shutting down');
|
|
34
|
+
if (rerankerSession && rerankerTokenizer)
|
|
35
|
+
return;
|
|
36
|
+
if (rerankerInitFailed)
|
|
37
|
+
throw new Error('Reranker initialization previously failed');
|
|
38
|
+
// Prevent concurrent initialization
|
|
39
|
+
if (rerankerInitializing) {
|
|
40
|
+
await rerankerInitializing;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
rerankerInitializing = (async () => {
|
|
44
|
+
try {
|
|
45
|
+
const config = getConfig();
|
|
46
|
+
const model = config.llm?.reranker?.model ?? DEFAULT_RERANKER_MODEL;
|
|
47
|
+
logInfo('reranker', `Loading cross-encoder model: ${model}`);
|
|
48
|
+
// Load tokenizer
|
|
49
|
+
const { AutoTokenizer } = await import('@huggingface/transformers');
|
|
50
|
+
rerankerTokenizer = await AutoTokenizer.from_pretrained(model);
|
|
51
|
+
// Resolve model path (same cache locations as embeddings)
|
|
52
|
+
const modelPath = await resolveModelPath(model);
|
|
53
|
+
// Create session with GPU fallback
|
|
54
|
+
const providerResult = detectExecutionProvider(process.platform, {
|
|
55
|
+
gpu_enabled: config.gpu_enabled,
|
|
56
|
+
gpu_device: config.gpu_device,
|
|
57
|
+
});
|
|
58
|
+
for (const provider of providerResult.fallbackChain) {
|
|
59
|
+
try {
|
|
60
|
+
rerankerSession = await ort.InferenceSession.create(modelPath, {
|
|
61
|
+
executionProviders: [provider],
|
|
62
|
+
interOpNumThreads: 1,
|
|
63
|
+
intraOpNumThreads: 2,
|
|
64
|
+
});
|
|
65
|
+
logInfo('reranker', `Cross-encoder loaded with provider: ${provider}`);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
logWarn('reranker', `Provider ${provider} failed, trying next`, {
|
|
70
|
+
error: err instanceof Error ? err.message : String(err),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
throw new Error(`Failed to create reranker session with any provider: ${providerResult.fallbackChain.join(', ')}`);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
rerankerSession = null;
|
|
78
|
+
rerankerTokenizer = null;
|
|
79
|
+
rerankerInitFailed = true;
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
rerankerInitializing = null;
|
|
84
|
+
}
|
|
85
|
+
})();
|
|
86
|
+
await rerankerInitializing;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Score a batch of (query, document) pairs using the cross-encoder.
|
|
90
|
+
* Returns relevance scores (higher = more relevant).
|
|
91
|
+
*
|
|
92
|
+
* Cross-encoders output logits; we apply sigmoid to get 0-1 scores.
|
|
93
|
+
*/
|
|
94
|
+
async function scorePairs(query, documents) {
|
|
95
|
+
if (documents.length === 0)
|
|
96
|
+
return [];
|
|
97
|
+
await initReranker();
|
|
98
|
+
if (!rerankerSession || !rerankerTokenizer) {
|
|
99
|
+
throw new Error('Reranker not initialized');
|
|
100
|
+
}
|
|
101
|
+
const allScores = [];
|
|
102
|
+
// Process in batches to limit memory usage
|
|
103
|
+
for (let i = 0; i < documents.length; i += RERANKER_BATCH_SIZE) {
|
|
104
|
+
const batch = documents.slice(i, i + RERANKER_BATCH_SIZE);
|
|
105
|
+
const batchScores = await scoreBatch(query, batch);
|
|
106
|
+
allScores.push(...batchScores);
|
|
107
|
+
}
|
|
108
|
+
return allScores;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Score a single batch of (query, document) pairs.
|
|
112
|
+
*/
|
|
113
|
+
async function scoreBatch(query, documents) {
|
|
114
|
+
// Cross-encoders take (query, document) as a text pair input.
|
|
115
|
+
// The tokenizer encodes them as [CLS] query [SEP] document [SEP].
|
|
116
|
+
const pairs = documents.map((doc) => [query, doc]);
|
|
117
|
+
// Tokenize all pairs
|
|
118
|
+
const encoded = rerankerTokenizer(pairs, {
|
|
119
|
+
padding: true,
|
|
120
|
+
truncation: true,
|
|
121
|
+
max_length: MAX_SEQ_LENGTH,
|
|
122
|
+
return_tensors: false,
|
|
123
|
+
});
|
|
124
|
+
const batchSize = documents.length;
|
|
125
|
+
const seqLen = encoded.input_ids.dims ? encoded.input_ids.dims[1] : encoded.input_ids[0].length;
|
|
126
|
+
// Flatten for ORT tensors
|
|
127
|
+
const flatInputIds = encoded.input_ids.dims
|
|
128
|
+
? encoded.input_ids.data
|
|
129
|
+
: new BigInt64Array(encoded.input_ids.flat().map((v) => BigInt(v)));
|
|
130
|
+
const flatAttentionMask = encoded.attention_mask.dims
|
|
131
|
+
? encoded.attention_mask.data
|
|
132
|
+
: new BigInt64Array(encoded.attention_mask.flat().map((v) => BigInt(v)));
|
|
133
|
+
const inputIdsTensor = new ort.Tensor('int64', toBigInt64(flatInputIds, batchSize * seqLen), [
|
|
134
|
+
batchSize,
|
|
135
|
+
seqLen,
|
|
136
|
+
]);
|
|
137
|
+
const attentionMaskTensor = new ort.Tensor('int64', toBigInt64(flatAttentionMask, batchSize * seqLen), [batchSize, seqLen]);
|
|
138
|
+
const feeds = {
|
|
139
|
+
input_ids: inputIdsTensor,
|
|
140
|
+
attention_mask: attentionMaskTensor,
|
|
141
|
+
};
|
|
142
|
+
// Some models need token_type_ids (0 for query, 1 for document)
|
|
143
|
+
if (rerankerSession.inputNames.includes('token_type_ids')) {
|
|
144
|
+
let tokenTypeData;
|
|
145
|
+
if (encoded.token_type_ids) {
|
|
146
|
+
const flatTokenTypes = encoded.token_type_ids.dims
|
|
147
|
+
? encoded.token_type_ids.data
|
|
148
|
+
: new BigInt64Array(encoded.token_type_ids.flat().map((v) => BigInt(v)));
|
|
149
|
+
tokenTypeData = toBigInt64(flatTokenTypes, batchSize * seqLen);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
tokenTypeData = new BigInt64Array(batchSize * seqLen);
|
|
153
|
+
}
|
|
154
|
+
feeds.token_type_ids = new ort.Tensor('int64', tokenTypeData, [batchSize, seqLen]);
|
|
155
|
+
}
|
|
156
|
+
// Run inference
|
|
157
|
+
const results = await rerankerSession.run(feeds);
|
|
158
|
+
// Cross-encoder outputs logits (usually shape [batch, 1] or [batch])
|
|
159
|
+
const outputKey = rerankerSession.outputNames[0];
|
|
160
|
+
const output = results[outputKey];
|
|
161
|
+
const logits = output.data;
|
|
162
|
+
// Apply sigmoid to convert logits to 0-1 relevance scores
|
|
163
|
+
const scores = [];
|
|
164
|
+
for (let i = 0; i < batchSize; i++) {
|
|
165
|
+
const logit = logits[i];
|
|
166
|
+
scores.push(sigmoid(logit));
|
|
167
|
+
}
|
|
168
|
+
return scores;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Rerank hybrid search results using cross-encoder scoring.
|
|
172
|
+
*
|
|
173
|
+
* Takes existing search results (from BM25 + vector + RRF) and re-scores
|
|
174
|
+
* them using a cross-encoder model that sees both query and document together.
|
|
175
|
+
*
|
|
176
|
+
* @param query - Original search query
|
|
177
|
+
* @param results - Hybrid search results to rerank
|
|
178
|
+
* @param topK - Number of top results to return (default: results.length)
|
|
179
|
+
* @returns Reranked results with updated similarity scores
|
|
180
|
+
*/
|
|
181
|
+
export async function rerank(query, results, topK) {
|
|
182
|
+
if (results.length === 0)
|
|
183
|
+
return [];
|
|
184
|
+
// Normalize topK: must be a positive integer, clamped to results length.
|
|
185
|
+
const safeTopK = topK !== undefined && Number.isFinite(topK) && topK > 0
|
|
186
|
+
? Math.min(Math.floor(topK), results.length)
|
|
187
|
+
: undefined;
|
|
188
|
+
// Helper: apply topK slice consistently on every return path.
|
|
189
|
+
const applyTopK = (arr) => (safeTopK !== undefined ? arr.slice(0, safeTopK) : arr);
|
|
190
|
+
if (results.length === 1)
|
|
191
|
+
return applyTopK(results);
|
|
192
|
+
const config = getConfig();
|
|
193
|
+
const rerankerConfig = config.llm?.reranker;
|
|
194
|
+
// Check if reranking is enabled
|
|
195
|
+
if (rerankerConfig?.enabled === false) {
|
|
196
|
+
return applyTopK(results);
|
|
197
|
+
}
|
|
198
|
+
// Don't rerank if too few results (overhead not worth it)
|
|
199
|
+
const minResults = rerankerConfig?.min_results ?? 3;
|
|
200
|
+
if (results.length < minResults) {
|
|
201
|
+
return applyTopK(results);
|
|
202
|
+
}
|
|
203
|
+
try {
|
|
204
|
+
// Prepare document texts for scoring
|
|
205
|
+
// Truncate long documents to save compute
|
|
206
|
+
const rawMaxDocChars = rerankerConfig?.max_doc_chars ?? 1000;
|
|
207
|
+
const maxDocChars = Number.isFinite(rawMaxDocChars) && rawMaxDocChars > 0 ? Math.floor(rawMaxDocChars) : 1000;
|
|
208
|
+
const docTexts = results.map((r) => {
|
|
209
|
+
const text = r.content.slice(0, maxDocChars);
|
|
210
|
+
// Include symbol metadata for code results
|
|
211
|
+
if (r.symbol_name) {
|
|
212
|
+
return `${r.symbol_name}${r.signature ? ': ' + r.signature : ''}\n${text}`;
|
|
213
|
+
}
|
|
214
|
+
return text;
|
|
215
|
+
});
|
|
216
|
+
// Score all (query, document) pairs
|
|
217
|
+
const scores = await scorePairs(query, docTexts);
|
|
218
|
+
// Combine with original scores:
|
|
219
|
+
// reranker_weight * cross_encoder_score + (1 - reranker_weight) * original_score
|
|
220
|
+
const rawWeight = rerankerConfig?.weight ?? 0.7;
|
|
221
|
+
const weight = Number.isFinite(rawWeight) ? Math.max(0, Math.min(1, rawWeight)) : 0.7;
|
|
222
|
+
const reranked = results.map((result, i) => ({
|
|
223
|
+
...result,
|
|
224
|
+
_originalSimilarity: result.similarity,
|
|
225
|
+
similarity: weight * scores[i] + (1 - weight) * result.similarity,
|
|
226
|
+
}));
|
|
227
|
+
// Sort by new combined score
|
|
228
|
+
reranked.sort((a, b) => b.similarity - a.similarity);
|
|
229
|
+
// Return top-K
|
|
230
|
+
return applyTopK(reranked);
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
// Graceful degradation: return original results if reranker fails
|
|
234
|
+
logWarn('reranker', `Cross-encoder reranking failed, returning original results: ${error instanceof Error ? error.message : String(error)}`);
|
|
235
|
+
return applyTopK(results);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Check if the reranker is available and enabled.
|
|
240
|
+
*/
|
|
241
|
+
export function isRerankerEnabled() {
|
|
242
|
+
const config = getConfig();
|
|
243
|
+
return config.llm?.reranker?.enabled !== false;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Cleanup reranker session to free memory.
|
|
247
|
+
*
|
|
248
|
+
* Sets a shutdown guard first, then awaits any in-flight initialization before
|
|
249
|
+
* releasing ONNX resources. This prevents a race where cleanup returns while
|
|
250
|
+
* initReranker() is still allocating the session (which would then leak).
|
|
251
|
+
*/
|
|
252
|
+
export async function cleanupReranker() {
|
|
253
|
+
rerankerShuttingDown = true;
|
|
254
|
+
// Wait for any in-flight init to finish before releasing resources.
|
|
255
|
+
if (rerankerInitializing) {
|
|
256
|
+
try {
|
|
257
|
+
await rerankerInitializing;
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// Init may have failed — that's fine, we're cleaning up anyway
|
|
261
|
+
logWarn('reranker', 'Reranker init failed during shutdown — continuing cleanup');
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (rerankerSession) {
|
|
265
|
+
try {
|
|
266
|
+
await rerankerSession.release();
|
|
267
|
+
}
|
|
268
|
+
catch (err) {
|
|
269
|
+
logWarn('reranker', err instanceof Error ? err.message : 'Reranker session release failed');
|
|
270
|
+
}
|
|
271
|
+
rerankerSession = null;
|
|
272
|
+
}
|
|
273
|
+
rerankerTokenizer = null;
|
|
274
|
+
rerankerInitializing = null;
|
|
275
|
+
rerankerInitFailed = false;
|
|
276
|
+
rerankerShuttingDown = false;
|
|
277
|
+
}
|
|
278
|
+
// ============================================================================
|
|
279
|
+
// Utilities
|
|
280
|
+
// ============================================================================
|
|
281
|
+
function sigmoid(x) {
|
|
282
|
+
return 1 / (1 + Math.exp(-x));
|
|
283
|
+
}
|
|
284
|
+
function toBigInt64(data, expectedLength) {
|
|
285
|
+
if (data instanceof BigInt64Array && data.length === expectedLength) {
|
|
286
|
+
return data;
|
|
287
|
+
}
|
|
288
|
+
const arr = new BigInt64Array(expectedLength);
|
|
289
|
+
for (let i = 0; i < expectedLength && i < data.length; i++) {
|
|
290
|
+
arr[i] = typeof data[i] === 'bigint' ? data[i] : BigInt(Number(data[i]));
|
|
291
|
+
}
|
|
292
|
+
return arr;
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=reranker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../src/lib/reranker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retrieval Feedback Loops — track whether recalled memories were useful.
|
|
3
|
+
*
|
|
4
|
+
* Records recall events and uses historical usefulness to boost/decay
|
|
5
|
+
* memory retrieval scores. Self-improving retrieval over time.
|
|
6
|
+
*
|
|
7
|
+
* Inspired by Cognee's ~90% accuracy from feedback loops.
|
|
8
|
+
*/
|
|
9
|
+
export interface RecallEvent {
|
|
10
|
+
id: number;
|
|
11
|
+
memory_id: number;
|
|
12
|
+
query: string;
|
|
13
|
+
was_used: boolean;
|
|
14
|
+
rank_position: number | null;
|
|
15
|
+
similarity_score: number | null;
|
|
16
|
+
created_at: string;
|
|
17
|
+
}
|
|
18
|
+
export interface RecallStats {
|
|
19
|
+
memoryId: number;
|
|
20
|
+
totalRecalls: number;
|
|
21
|
+
timesUsed: number;
|
|
22
|
+
timesIgnored: number;
|
|
23
|
+
useRate: number;
|
|
24
|
+
avgRankWhenUsed: number | null;
|
|
25
|
+
avgRankWhenIgnored: number | null;
|
|
26
|
+
lastRecalled: string | null;
|
|
27
|
+
/** Boost factor: >1 means boost, <1 means decay */
|
|
28
|
+
boostFactor: number;
|
|
29
|
+
}
|
|
30
|
+
export interface RecallSummary {
|
|
31
|
+
totalEvents: number;
|
|
32
|
+
uniqueMemories: number;
|
|
33
|
+
overallUseRate: number;
|
|
34
|
+
neverUsedMemories: number;
|
|
35
|
+
topPerformers: Array<{
|
|
36
|
+
memoryId: number;
|
|
37
|
+
useRate: number;
|
|
38
|
+
totalRecalls: number;
|
|
39
|
+
}>;
|
|
40
|
+
worstPerformers: Array<{
|
|
41
|
+
memoryId: number;
|
|
42
|
+
useRate: number;
|
|
43
|
+
totalRecalls: number;
|
|
44
|
+
}>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Record a recall event — whether a memory was used after being retrieved.
|
|
48
|
+
*
|
|
49
|
+
* @param memoryId - The memory that was recalled
|
|
50
|
+
* @param query - The query that triggered the recall
|
|
51
|
+
* @param wasUsed - Whether the agent/user used this memory
|
|
52
|
+
* @param rankPosition - Position in the result list (1-based)
|
|
53
|
+
* @param similarityScore - The similarity score from retrieval
|
|
54
|
+
*/
|
|
55
|
+
export declare function recordRecallEvent(memoryId: number, query: string, wasUsed: boolean, rankPosition?: number, similarityScore?: number): number;
|
|
56
|
+
/**
|
|
57
|
+
* Record recall events for a batch of retrieved memories.
|
|
58
|
+
* Mark top-K as "used" and remaining as "ignored".
|
|
59
|
+
*
|
|
60
|
+
* @param retrievedIds - All memory IDs returned by recall, in rank order
|
|
61
|
+
* @param usedIds - Memory IDs that were actually used/referenced
|
|
62
|
+
* @param query - The search query
|
|
63
|
+
*/
|
|
64
|
+
export declare function recordRecallBatch(retrievedIds: number[], usedIds: Set<number>, query: string, similarityScores?: Map<number, number>): void;
|
|
65
|
+
/**
|
|
66
|
+
* Get recall statistics for a specific memory.
|
|
67
|
+
*/
|
|
68
|
+
export declare function getRecallStats(memoryId: number): RecallStats;
|
|
69
|
+
/**
|
|
70
|
+
* Get recall summary across all memories.
|
|
71
|
+
*/
|
|
72
|
+
export declare function getRecallSummary(): RecallSummary;
|
|
73
|
+
/**
|
|
74
|
+
* Get the boost factor for a memory based on its recall history.
|
|
75
|
+
* Used to adjust retrieval scores.
|
|
76
|
+
*
|
|
77
|
+
* @returns boost factor: 1.0 = neutral, >1.0 = boost, <1.0 = decay
|
|
78
|
+
*/
|
|
79
|
+
export declare function getBoostFactor(memoryId: number): number;
|
|
80
|
+
/**
|
|
81
|
+
* Get boost factors for multiple memories at once.
|
|
82
|
+
*/
|
|
83
|
+
export declare function getBoostFactors(memoryIds: number[]): Map<number, number>;
|
|
84
|
+
/**
|
|
85
|
+
* Get memory IDs that are never used (recalled but never marked as used).
|
|
86
|
+
* Useful for cleanup suggestions.
|
|
87
|
+
*/
|
|
88
|
+
export declare function getNeverUsedMemories(minRecalls?: number, limit?: number): Array<{
|
|
89
|
+
memoryId: number;
|
|
90
|
+
totalRecalls: number;
|
|
91
|
+
lastRecalled: string;
|
|
92
|
+
}>;
|
|
93
|
+
/**
|
|
94
|
+
* Delete old recall events to prevent unbounded growth.
|
|
95
|
+
*
|
|
96
|
+
* @param olderThanDays - Delete events older than this many days
|
|
97
|
+
* @returns Number of events deleted
|
|
98
|
+
*/
|
|
99
|
+
export declare function cleanupRecallEvents(olderThanDays?: number): number;
|
|
100
|
+
//# sourceMappingURL=retrieval-feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval-feedback.d.ts","sourceRoot":"","sources":["../../src/lib/retrieval-feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClF,eAAe,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrF;AAMD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAER;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,IAAI,CAUN;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAmB5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAiBhD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBxE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,GAAE,MAAU,EACtB,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAEzE;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,GAAE,MAAW,GAAG,MAAM,CAEtE"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retrieval Feedback Loops — track whether recalled memories were useful.
|
|
3
|
+
*
|
|
4
|
+
* Records recall events and uses historical usefulness to boost/decay
|
|
5
|
+
* memory retrieval scores. Self-improving retrieval over time.
|
|
6
|
+
*
|
|
7
|
+
* Inspired by Cognee's ~90% accuracy from feedback loops.
|
|
8
|
+
*/
|
|
9
|
+
// NOTE: Use-rate boost from recall events. See also temporal.ts calculateAccessBoost() for count-based access boost. These are complementary.
|
|
10
|
+
import { insertRecallEvent, insertRecallEventsBatch, getRecallStatsRow, getRecallSummaryRow, getNeverUsedCount, getTopPerformers, getWorstPerformers, getBoostDataForMemory, getBoostDataForMemories, getNeverUsedMemoryRows, deleteOldRecallEvents, } from './db/index.js';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Recording
|
|
13
|
+
// ============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Record a recall event — whether a memory was used after being retrieved.
|
|
16
|
+
*
|
|
17
|
+
* @param memoryId - The memory that was recalled
|
|
18
|
+
* @param query - The query that triggered the recall
|
|
19
|
+
* @param wasUsed - Whether the agent/user used this memory
|
|
20
|
+
* @param rankPosition - Position in the result list (1-based)
|
|
21
|
+
* @param similarityScore - The similarity score from retrieval
|
|
22
|
+
*/
|
|
23
|
+
export function recordRecallEvent(memoryId, query, wasUsed, rankPosition, similarityScore) {
|
|
24
|
+
return insertRecallEvent(memoryId, query, wasUsed, rankPosition ?? null, similarityScore ?? null);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Record recall events for a batch of retrieved memories.
|
|
28
|
+
* Mark top-K as "used" and remaining as "ignored".
|
|
29
|
+
*
|
|
30
|
+
* @param retrievedIds - All memory IDs returned by recall, in rank order
|
|
31
|
+
* @param usedIds - Memory IDs that were actually used/referenced
|
|
32
|
+
* @param query - The search query
|
|
33
|
+
*/
|
|
34
|
+
export function recordRecallBatch(retrievedIds, usedIds, query, similarityScores) {
|
|
35
|
+
const events = retrievedIds.map((memId, i) => ({
|
|
36
|
+
memoryId: memId,
|
|
37
|
+
query,
|
|
38
|
+
wasUsed: usedIds.has(memId),
|
|
39
|
+
rankPosition: i + 1,
|
|
40
|
+
similarityScore: similarityScores?.get(memId) ?? null,
|
|
41
|
+
}));
|
|
42
|
+
insertRecallEventsBatch(events);
|
|
43
|
+
}
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// Statistics
|
|
46
|
+
// ============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Get recall statistics for a specific memory.
|
|
49
|
+
*/
|
|
50
|
+
export function getRecallStats(memoryId) {
|
|
51
|
+
const row = getRecallStatsRow(memoryId);
|
|
52
|
+
const totalRecalls = row.total_recalls;
|
|
53
|
+
const timesUsed = row.times_used;
|
|
54
|
+
const timesIgnored = totalRecalls - timesUsed;
|
|
55
|
+
const useRate = totalRecalls > 0 ? timesUsed / totalRecalls : 0;
|
|
56
|
+
return {
|
|
57
|
+
memoryId,
|
|
58
|
+
totalRecalls,
|
|
59
|
+
timesUsed,
|
|
60
|
+
timesIgnored,
|
|
61
|
+
useRate,
|
|
62
|
+
avgRankWhenUsed: row.avg_rank_used,
|
|
63
|
+
avgRankWhenIgnored: row.avg_rank_ignored,
|
|
64
|
+
lastRecalled: row.last_recalled,
|
|
65
|
+
boostFactor: computeBoostFactor(totalRecalls, useRate),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get recall summary across all memories.
|
|
70
|
+
*/
|
|
71
|
+
export function getRecallSummary() {
|
|
72
|
+
const totalRow = getRecallSummaryRow();
|
|
73
|
+
const total = totalRow.total;
|
|
74
|
+
const uniqueMemories = totalRow.unique_mems;
|
|
75
|
+
const overallUseRate = total > 0 ? totalRow.total_used / total : 0;
|
|
76
|
+
const neverUsedMemories = getNeverUsedCount();
|
|
77
|
+
const topPerformers = getTopPerformers();
|
|
78
|
+
const worstPerformers = getWorstPerformers();
|
|
79
|
+
return {
|
|
80
|
+
totalEvents: total,
|
|
81
|
+
uniqueMemories,
|
|
82
|
+
overallUseRate,
|
|
83
|
+
neverUsedMemories,
|
|
84
|
+
topPerformers,
|
|
85
|
+
worstPerformers,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get the boost factor for a memory based on its recall history.
|
|
90
|
+
* Used to adjust retrieval scores.
|
|
91
|
+
*
|
|
92
|
+
* @returns boost factor: 1.0 = neutral, >1.0 = boost, <1.0 = decay
|
|
93
|
+
*/
|
|
94
|
+
export function getBoostFactor(memoryId) {
|
|
95
|
+
const row = getBoostDataForMemory(memoryId);
|
|
96
|
+
const useRate = row.total > 0 ? row.used / row.total : 0;
|
|
97
|
+
return computeBoostFactor(row.total, useRate);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get boost factors for multiple memories at once.
|
|
101
|
+
*/
|
|
102
|
+
export function getBoostFactors(memoryIds) {
|
|
103
|
+
if (memoryIds.length === 0)
|
|
104
|
+
return new Map();
|
|
105
|
+
const rows = getBoostDataForMemories(memoryIds);
|
|
106
|
+
const result = new Map();
|
|
107
|
+
for (const row of rows) {
|
|
108
|
+
const useRate = row.total > 0 ? row.used / row.total : 0;
|
|
109
|
+
result.set(row.memory_id, computeBoostFactor(row.total, useRate));
|
|
110
|
+
}
|
|
111
|
+
// Memories with no recall history get neutral boost
|
|
112
|
+
for (const id of memoryIds) {
|
|
113
|
+
if (!result.has(id)) {
|
|
114
|
+
result.set(id, 1.0);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get memory IDs that are never used (recalled but never marked as used).
|
|
121
|
+
* Useful for cleanup suggestions.
|
|
122
|
+
*/
|
|
123
|
+
export function getNeverUsedMemories(minRecalls = 3, limit = 50) {
|
|
124
|
+
return getNeverUsedMemoryRows(minRecalls, limit);
|
|
125
|
+
}
|
|
126
|
+
// ============================================================================
|
|
127
|
+
// Cleanup
|
|
128
|
+
// ============================================================================
|
|
129
|
+
/**
|
|
130
|
+
* Delete old recall events to prevent unbounded growth.
|
|
131
|
+
*
|
|
132
|
+
* @param olderThanDays - Delete events older than this many days
|
|
133
|
+
* @returns Number of events deleted
|
|
134
|
+
*/
|
|
135
|
+
export function cleanupRecallEvents(olderThanDays = 90) {
|
|
136
|
+
return deleteOldRecallEvents(olderThanDays);
|
|
137
|
+
}
|
|
138
|
+
// ============================================================================
|
|
139
|
+
// Internal
|
|
140
|
+
// ============================================================================
|
|
141
|
+
/**
|
|
142
|
+
* Compute boost factor from total recalls and use rate.
|
|
143
|
+
*
|
|
144
|
+
* Formula:
|
|
145
|
+
* - 0 recalls → 1.0 (neutral)
|
|
146
|
+
* - 1-2 recalls → minor adjustment (not enough data)
|
|
147
|
+
* - 3+ recalls → significant adjustment based on use rate
|
|
148
|
+
*
|
|
149
|
+
* Use rate mapping:
|
|
150
|
+
* - 80-100% → 1.3 (strong boost)
|
|
151
|
+
* - 60-80% → 1.15 (moderate boost)
|
|
152
|
+
* - 40-60% → 1.0 (neutral)
|
|
153
|
+
* - 20-40% → 0.85 (moderate decay)
|
|
154
|
+
* - 0-20% → 0.7 (strong decay)
|
|
155
|
+
*/
|
|
156
|
+
function computeBoostFactor(totalRecalls, useRate) {
|
|
157
|
+
if (totalRecalls < 3) {
|
|
158
|
+
// Not enough data — minor adjustment
|
|
159
|
+
if (totalRecalls === 0)
|
|
160
|
+
return 1.0;
|
|
161
|
+
return 0.95 + useRate * 0.1; // 0.95-1.05 range
|
|
162
|
+
}
|
|
163
|
+
// Significant data — apply full boost/decay
|
|
164
|
+
if (useRate >= 0.8)
|
|
165
|
+
return 1.3;
|
|
166
|
+
if (useRate >= 0.6)
|
|
167
|
+
return 1.15;
|
|
168
|
+
if (useRate >= 0.4)
|
|
169
|
+
return 1.0;
|
|
170
|
+
if (useRate >= 0.2)
|
|
171
|
+
return 0.85;
|
|
172
|
+
return 0.7;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=retrieval-feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval-feedback.js","sourceRoot":"","sources":["../../src/lib/retrieval-feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MR Context Pack Generator — builds review context from a git diff.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline:
|
|
5
|
+
* 1. git diff → parse-diff → changed files + hunks
|
|
6
|
+
* 2. succ_search_code → related symbols for each changed function
|
|
7
|
+
* 3. succ_recall → past decisions/pitfalls for touched modules
|
|
8
|
+
* 4. git log → recent changes to same files
|
|
9
|
+
* 5. callLLM → structured review context pack
|
|
10
|
+
*/
|
|
11
|
+
export interface ReviewContextPack {
|
|
12
|
+
summary: string;
|
|
13
|
+
diffStats: {
|
|
14
|
+
files: number;
|
|
15
|
+
additions: number;
|
|
16
|
+
deletions: number;
|
|
17
|
+
};
|
|
18
|
+
changedFiles: Array<{
|
|
19
|
+
path: string;
|
|
20
|
+
additions: number;
|
|
21
|
+
deletions: number;
|
|
22
|
+
isNew: boolean;
|
|
23
|
+
isDeleted: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
changedSymbols: Array<{
|
|
26
|
+
file: string;
|
|
27
|
+
symbol: string;
|
|
28
|
+
}>;
|
|
29
|
+
relatedSymbols: Array<{
|
|
30
|
+
file: string;
|
|
31
|
+
symbol: string;
|
|
32
|
+
similarity: number;
|
|
33
|
+
}>;
|
|
34
|
+
relevantMemories: Array<{
|
|
35
|
+
id: number;
|
|
36
|
+
content: string;
|
|
37
|
+
tags: string[];
|
|
38
|
+
similarity: number;
|
|
39
|
+
}>;
|
|
40
|
+
recentHistory: Array<{
|
|
41
|
+
file: string;
|
|
42
|
+
commits: string[];
|
|
43
|
+
}>;
|
|
44
|
+
reviewFocus: string[];
|
|
45
|
+
blastRadius: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate a review context pack for a git diff reference.
|
|
49
|
+
*
|
|
50
|
+
* @param diffRef - Git diff reference (e.g., "HEAD~1", "main..feature", a commit SHA)
|
|
51
|
+
* @param options - Configuration options
|
|
52
|
+
*/
|
|
53
|
+
export declare function generateReviewContext(diffRef?: string, options?: {
|
|
54
|
+
maxRelatedSymbols?: number;
|
|
55
|
+
maxMemories?: number;
|
|
56
|
+
generateLLMSummary?: boolean;
|
|
57
|
+
}): Promise<ReviewContextPack>;
|
|
58
|
+
//# sourceMappingURL=context-pack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../src/lib/review/context-pack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiBH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,YAAY,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC;QACf,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,cAAc,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,cAAc,EAAE,KAAK,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,gBAAgB,EAAE,KAAK,CAAC;QACtB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,aAAa,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,MAAiB,EAC1B,OAAO,GAAE;IACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACzB,GACL,OAAO,CAAC,iBAAiB,CAAC,CAuE5B"}
|