@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,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Late Chunking — embed full file context, pool per AST chunk boundaries.
|
|
3
|
+
*
|
|
4
|
+
* Traditional chunking: chunk first → embed each chunk independently.
|
|
5
|
+
* Late chunking: embed full file → get per-token hidden states → pool by AST boundaries.
|
|
6
|
+
*
|
|
7
|
+
* Each chunk embedding "knows about" the whole file context for free.
|
|
8
|
+
* No extra LLM calls. Requires a long-context embedding model (e.g., jina 8192 tokens).
|
|
9
|
+
*
|
|
10
|
+
* Reference: Jina AI "Late Chunking" (2024)
|
|
11
|
+
* https://jina.ai/news/late-chunking-in-long-context-embedding-models/
|
|
12
|
+
*/
|
|
13
|
+
import { type Chunk } from '../chunker.js';
|
|
14
|
+
export interface LateChunkResult {
|
|
15
|
+
/** Original chunk metadata */
|
|
16
|
+
chunk: Chunk;
|
|
17
|
+
/** Embedding generated via late chunking (context-aware) */
|
|
18
|
+
embedding: number[];
|
|
19
|
+
}
|
|
20
|
+
export interface LateChunkingResult {
|
|
21
|
+
/** Per-chunk embeddings with file-level context baked in */
|
|
22
|
+
chunks: LateChunkResult[];
|
|
23
|
+
/** Whether late chunking was used (false = fell back to standard) */
|
|
24
|
+
usedLateChunking: boolean;
|
|
25
|
+
/** Reason for fallback if not used */
|
|
26
|
+
fallbackReason?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate embeddings for code chunks using late chunking.
|
|
30
|
+
*
|
|
31
|
+
* Pipeline:
|
|
32
|
+
* 1. Parse file into AST chunks (tree-sitter)
|
|
33
|
+
* 2. Concatenate full file content
|
|
34
|
+
* 3. Run embedding model on full file → get per-token hidden states
|
|
35
|
+
* 4. Map AST chunk character boundaries to token positions
|
|
36
|
+
* 5. Mean-pool hidden states within each chunk's token range
|
|
37
|
+
* 6. L2-normalize each chunk embedding
|
|
38
|
+
*
|
|
39
|
+
* Falls back to standard chunking if:
|
|
40
|
+
* - Model max_length < 512 (short-context model won't benefit)
|
|
41
|
+
* - File exceeds model's max token length
|
|
42
|
+
* - Token offset mapping unavailable
|
|
43
|
+
*
|
|
44
|
+
* @param content - Full file content
|
|
45
|
+
* @param filePath - File path for AST parsing
|
|
46
|
+
* @returns Per-chunk embeddings with file-level context
|
|
47
|
+
*/
|
|
48
|
+
export declare function lateChunkEmbed(content: string, filePath: string): Promise<LateChunkingResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Check if the current embedding model supports late chunking.
|
|
51
|
+
*/
|
|
52
|
+
export declare function isLateChunkingSupported(): boolean;
|
|
53
|
+
//# sourceMappingURL=late-chunking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"late-chunking.d.ts","sourceRoot":"","sources":["../../../src/lib/search/late-chunking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAkB,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAQ3D,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,4DAA4D;IAC5D,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,qEAAqE;IACrE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AASD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,CAkH7B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAKjD"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Late Chunking — embed full file context, pool per AST chunk boundaries.
|
|
3
|
+
*
|
|
4
|
+
* Traditional chunking: chunk first → embed each chunk independently.
|
|
5
|
+
* Late chunking: embed full file → get per-token hidden states → pool by AST boundaries.
|
|
6
|
+
*
|
|
7
|
+
* Each chunk embedding "knows about" the whole file context for free.
|
|
8
|
+
* No extra LLM calls. Requires a long-context embedding model (e.g., jina 8192 tokens).
|
|
9
|
+
*
|
|
10
|
+
* Reference: Jina AI "Late Chunking" (2024)
|
|
11
|
+
* https://jina.ai/news/late-chunking-in-long-context-embedding-models/
|
|
12
|
+
*/
|
|
13
|
+
import { logInfo, logWarn } from '../fault-logger.js';
|
|
14
|
+
import { getNativeSession, getModelMaxLength } from '../embeddings.js';
|
|
15
|
+
import { chunkCodeAsync } from '../chunker.js';
|
|
16
|
+
import { getLLMTaskConfig } from '../config.js';
|
|
17
|
+
import { LOCAL_MODEL } from '../config-defaults.js';
|
|
18
|
+
// Minimum max_length to enable late chunking (short-context models can't benefit)
|
|
19
|
+
const MIN_CONTEXT_FOR_LATE_CHUNKING = 512;
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Core Implementation
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* Generate embeddings for code chunks using late chunking.
|
|
25
|
+
*
|
|
26
|
+
* Pipeline:
|
|
27
|
+
* 1. Parse file into AST chunks (tree-sitter)
|
|
28
|
+
* 2. Concatenate full file content
|
|
29
|
+
* 3. Run embedding model on full file → get per-token hidden states
|
|
30
|
+
* 4. Map AST chunk character boundaries to token positions
|
|
31
|
+
* 5. Mean-pool hidden states within each chunk's token range
|
|
32
|
+
* 6. L2-normalize each chunk embedding
|
|
33
|
+
*
|
|
34
|
+
* Falls back to standard chunking if:
|
|
35
|
+
* - Model max_length < 512 (short-context model won't benefit)
|
|
36
|
+
* - File exceeds model's max token length
|
|
37
|
+
* - Token offset mapping unavailable
|
|
38
|
+
*
|
|
39
|
+
* @param content - Full file content
|
|
40
|
+
* @param filePath - File path for AST parsing
|
|
41
|
+
* @returns Per-chunk embeddings with file-level context
|
|
42
|
+
*/
|
|
43
|
+
export async function lateChunkEmbed(content, filePath) {
|
|
44
|
+
// Check if current model supports late chunking
|
|
45
|
+
const taskCfg = getLLMTaskConfig('embeddings');
|
|
46
|
+
const model = taskCfg.model || LOCAL_MODEL;
|
|
47
|
+
const maxLength = getModelMaxLength(model);
|
|
48
|
+
if (maxLength < MIN_CONTEXT_FOR_LATE_CHUNKING) {
|
|
49
|
+
return {
|
|
50
|
+
chunks: [],
|
|
51
|
+
usedLateChunking: false,
|
|
52
|
+
fallbackReason: `Model ${model} max_length=${maxLength} too short for late chunking (need ${MIN_CONTEXT_FOR_LATE_CHUNKING}+)`,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
// 1. Parse into AST chunks
|
|
57
|
+
const chunks = await chunkCodeAsync(content, filePath);
|
|
58
|
+
if (chunks.length === 0) {
|
|
59
|
+
return { chunks: [], usedLateChunking: true };
|
|
60
|
+
}
|
|
61
|
+
const session = await getNativeSession();
|
|
62
|
+
// 2. Get token offsets for the full file
|
|
63
|
+
const tokenOffsets = session.getTokenOffsets(content);
|
|
64
|
+
// Detect tokenizer truncation: if the model's max_length was exceeded the
|
|
65
|
+
// tokenizer silently truncates the input. We check by finding the last
|
|
66
|
+
// token whose offset covers real content (non-special tokens have non-zero
|
|
67
|
+
// offsets) and comparing its end to the content length. If the furthest
|
|
68
|
+
// character covered is substantially less than the full content length the
|
|
69
|
+
// file was truncated and late chunking would produce incorrect embeddings
|
|
70
|
+
// for the trailing chunks.
|
|
71
|
+
const lastCoveredChar = tokenOffsets.reduce((max, [, tEnd], i) => {
|
|
72
|
+
// Skip special tokens (offset [0,0] after position 0)
|
|
73
|
+
if (tEnd === 0 && i > 0)
|
|
74
|
+
return max;
|
|
75
|
+
return Math.max(max, tEnd);
|
|
76
|
+
}, 0);
|
|
77
|
+
// 0.95 threshold: allow up to 5% character loss from tokenizer rounding
|
|
78
|
+
// (subword boundaries rarely align exactly with content end). Beyond 5%
|
|
79
|
+
// the file was genuinely truncated and trailing chunks would be wrong.
|
|
80
|
+
if (lastCoveredChar > 0 && lastCoveredChar < content.length * 0.95) {
|
|
81
|
+
return {
|
|
82
|
+
chunks: [],
|
|
83
|
+
usedLateChunking: false,
|
|
84
|
+
fallbackReason: `File exceeds model max_length (covered ${lastCoveredChar}/${content.length} chars); falling back to standard chunking`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// 3. Run model on full file → get per-token hidden states
|
|
88
|
+
const raw = await session.embedRaw(content);
|
|
89
|
+
// 4. Pre-compute line offsets for O(1) char position lookup
|
|
90
|
+
const lineOffsets = computeLineOffsets(content);
|
|
91
|
+
// Map each chunk's character range to token positions
|
|
92
|
+
const results = [];
|
|
93
|
+
for (const chunk of chunks) {
|
|
94
|
+
// Find character range for this chunk in the original content.
|
|
95
|
+
// chunk.startLine / chunk.endLine are 1-indexed.
|
|
96
|
+
//
|
|
97
|
+
// The end boundary is derived from lineOffsets rather than from
|
|
98
|
+
// chunk.content.length. chunk.content is assembled with join('\n'),
|
|
99
|
+
// which omits the trailing newline that exists in the original source.
|
|
100
|
+
// Using lineOffsets[endLine] (= start-of-next-line) gives the correct
|
|
101
|
+
// exclusive end that covers the trailing '\n'. For the very last chunk
|
|
102
|
+
// we fall back to content.length so we never read past the buffer.
|
|
103
|
+
const chunkCharStart = getCharOffsetForLine(lineOffsets, chunk.startLine);
|
|
104
|
+
// lineOffsets is 0-indexed by line (lineOffsets[0] = offset of line 1).
|
|
105
|
+
// The offset of the line after endLine is lineOffsets[endLine] when it
|
|
106
|
+
// exists, otherwise the total content length.
|
|
107
|
+
const chunkCharEnd = chunk.endLine < lineOffsets.length ? lineOffsets[chunk.endLine] : content.length;
|
|
108
|
+
// Map char range to token range
|
|
109
|
+
const tokenRange = charRangeToTokenRange(tokenOffsets, chunkCharStart, chunkCharEnd);
|
|
110
|
+
if (tokenRange.start >= tokenRange.end) {
|
|
111
|
+
// Chunk mapped to zero tokens — skip
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
// 5. Mean-pool hidden states within this token range
|
|
115
|
+
const embedding = poolTokenRange(raw.hiddenStates, raw.attentionMask, raw.hiddenDim, tokenRange.start, tokenRange.end);
|
|
116
|
+
// 6. L2-normalize
|
|
117
|
+
l2Normalize(embedding);
|
|
118
|
+
results.push({ chunk, embedding: Array.from(embedding) });
|
|
119
|
+
}
|
|
120
|
+
logInfo('late-chunking', `Generated ${results.length} context-aware embeddings for ${filePath} (${tokenOffsets.length} tokens)`);
|
|
121
|
+
return { chunks: results, usedLateChunking: true };
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
logWarn('late-chunking', `Late chunking failed, use standard embedding`, {
|
|
125
|
+
error: error instanceof Error ? error.message : String(error),
|
|
126
|
+
});
|
|
127
|
+
return {
|
|
128
|
+
chunks: [],
|
|
129
|
+
usedLateChunking: false,
|
|
130
|
+
fallbackReason: error instanceof Error ? error.message : String(error),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check if the current embedding model supports late chunking.
|
|
136
|
+
*/
|
|
137
|
+
export function isLateChunkingSupported() {
|
|
138
|
+
const taskCfg = getLLMTaskConfig('embeddings');
|
|
139
|
+
const model = taskCfg.model || LOCAL_MODEL;
|
|
140
|
+
const maxLength = getModelMaxLength(model);
|
|
141
|
+
return maxLength >= MIN_CONTEXT_FOR_LATE_CHUNKING;
|
|
142
|
+
}
|
|
143
|
+
// ============================================================================
|
|
144
|
+
// Internal Helpers
|
|
145
|
+
// ============================================================================
|
|
146
|
+
/**
|
|
147
|
+
* Pre-compute character offset for each line (0-indexed).
|
|
148
|
+
* Returns array where lineOffsets[i] = char offset of line i+1 (1-indexed).
|
|
149
|
+
*/
|
|
150
|
+
function computeLineOffsets(content) {
|
|
151
|
+
const offsets = [0]; // Line 1 starts at offset 0
|
|
152
|
+
for (let i = 0; i < content.length; i++) {
|
|
153
|
+
// Handle CRLF: skip \r before \n so offsets stay consistent
|
|
154
|
+
if (content[i] === '\r' && content[i + 1] === '\n') {
|
|
155
|
+
offsets.push(i + 2);
|
|
156
|
+
i++; // skip the \n
|
|
157
|
+
}
|
|
158
|
+
else if (content[i] === '\n') {
|
|
159
|
+
offsets.push(i + 1);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return offsets;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get character offset for a 1-indexed line number.
|
|
166
|
+
*/
|
|
167
|
+
function getCharOffsetForLine(lineOffsets, line) {
|
|
168
|
+
const idx = Math.max(0, Math.min(line - 1, lineOffsets.length - 1));
|
|
169
|
+
return lineOffsets[idx];
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Map character range [charStart, charEnd) to token range [tokenStart, tokenEnd).
|
|
173
|
+
* Uses token offset mappings from the tokenizer.
|
|
174
|
+
*/
|
|
175
|
+
function charRangeToTokenRange(tokenOffsets, charStart, charEnd) {
|
|
176
|
+
let tokenStart = tokenOffsets.length;
|
|
177
|
+
let tokenEnd = 0;
|
|
178
|
+
for (let i = 0; i < tokenOffsets.length; i++) {
|
|
179
|
+
const [tStart, tEnd] = tokenOffsets[i];
|
|
180
|
+
// Skip special tokens (offset [0,0])
|
|
181
|
+
if (tStart === 0 && tEnd === 0 && i > 0)
|
|
182
|
+
continue;
|
|
183
|
+
// Token overlaps with chunk range
|
|
184
|
+
if (tEnd > charStart && tStart < charEnd) {
|
|
185
|
+
tokenStart = Math.min(tokenStart, i);
|
|
186
|
+
tokenEnd = Math.max(tokenEnd, i + 1);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return { start: tokenStart, end: tokenEnd };
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Mean-pool hidden states for a token range [start, end).
|
|
193
|
+
* Respects attention mask (skips padding tokens).
|
|
194
|
+
*/
|
|
195
|
+
function poolTokenRange(hiddenStates, attentionMask, hiddenDim, tokenStart, tokenEnd) {
|
|
196
|
+
const embedding = new Float64Array(hiddenDim);
|
|
197
|
+
let maskSum = 0;
|
|
198
|
+
for (let t = tokenStart; t < tokenEnd; t++) {
|
|
199
|
+
const mask = Number(attentionMask[t]);
|
|
200
|
+
if (mask === 0)
|
|
201
|
+
continue;
|
|
202
|
+
maskSum += mask;
|
|
203
|
+
const offset = t * hiddenDim;
|
|
204
|
+
for (let d = 0; d < hiddenDim; d++) {
|
|
205
|
+
embedding[d] += hiddenStates[offset + d] * mask;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (maskSum > 0) {
|
|
209
|
+
for (let d = 0; d < hiddenDim; d++) {
|
|
210
|
+
embedding[d] /= maskSum;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return embedding;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* In-place L2 normalization.
|
|
217
|
+
*/
|
|
218
|
+
function l2Normalize(embedding) {
|
|
219
|
+
let norm = 0;
|
|
220
|
+
for (let d = 0; d < embedding.length; d++) {
|
|
221
|
+
norm += embedding[d] * embedding[d];
|
|
222
|
+
}
|
|
223
|
+
norm = Math.sqrt(norm);
|
|
224
|
+
if (norm > 0) {
|
|
225
|
+
for (let d = 0; d < embedding.length; d++) {
|
|
226
|
+
embedding[d] /= norm;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=late-chunking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"late-chunking.js","sourceRoot":"","sources":["../../../src/lib/search/late-chunking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PPR-Enhanced Retrieval — Graph-backed search using Personalized PageRank.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline (HippoRAG2/ProPEX-RAG inspired):
|
|
5
|
+
* 1. Embed query → find top-k semantically similar nodes
|
|
6
|
+
* 2. Run PPR from those seed nodes across knowledge graph
|
|
7
|
+
* 3. Expand result set with high-PPR-score neighbors
|
|
8
|
+
* 4. Re-rank: (embedding_similarity * 0.5) + (ppr_score * 0.3) + (centrality * 0.2)
|
|
9
|
+
* 5. Return merged, re-ranked results with rank_explain metadata
|
|
10
|
+
*/
|
|
11
|
+
export interface PPRSearchResult {
|
|
12
|
+
memoryId: number;
|
|
13
|
+
/** Combined score from all signals */
|
|
14
|
+
score: number;
|
|
15
|
+
/** Individual score components */
|
|
16
|
+
components: {
|
|
17
|
+
semantic: number;
|
|
18
|
+
ppr: number;
|
|
19
|
+
centrality: number;
|
|
20
|
+
feedback: number;
|
|
21
|
+
};
|
|
22
|
+
/** Human-readable explanation of ranking */
|
|
23
|
+
rankExplain: string;
|
|
24
|
+
}
|
|
25
|
+
export interface PPRSearchOptions {
|
|
26
|
+
/** Weight for semantic similarity (default: 0.5) */
|
|
27
|
+
semanticWeight?: number;
|
|
28
|
+
/** Weight for PPR score (default: 0.3) */
|
|
29
|
+
pprWeight?: number;
|
|
30
|
+
/** Weight for centrality (default: 0.1) */
|
|
31
|
+
centralityWeight?: number;
|
|
32
|
+
/** Weight for feedback boost (default: 0.1) */
|
|
33
|
+
feedbackWeight?: number;
|
|
34
|
+
/** PPR damping factor (default: 0.85) */
|
|
35
|
+
alpha?: number;
|
|
36
|
+
/** Max results (default: 20) */
|
|
37
|
+
limit?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Re-rank search results using PPR, centrality, and feedback signals.
|
|
41
|
+
*
|
|
42
|
+
* @param semanticResults - Initial search results with memory IDs and similarity scores
|
|
43
|
+
* @param options - Tuning parameters
|
|
44
|
+
*/
|
|
45
|
+
export declare function pprEnhancedRerank(semanticResults: Array<{
|
|
46
|
+
memoryId: number;
|
|
47
|
+
similarity: number;
|
|
48
|
+
}>, options?: PPRSearchOptions): Promise<PPRSearchResult[]>;
|
|
49
|
+
//# sourceMappingURL=ppr-retrieval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ppr-retrieval.d.ts","sourceRoot":"","sources":["../../../src/lib/search/ppr-retrieval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,eAAe,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,EAChE,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,EAAE,CAAC,CAqH5B"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PPR-Enhanced Retrieval — Graph-backed search using Personalized PageRank.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline (HippoRAG2/ProPEX-RAG inspired):
|
|
5
|
+
* 1. Embed query → find top-k semantically similar nodes
|
|
6
|
+
* 2. Run PPR from those seed nodes across knowledge graph
|
|
7
|
+
* 3. Expand result set with high-PPR-score neighbors
|
|
8
|
+
* 4. Re-rank: (embedding_similarity * 0.5) + (ppr_score * 0.3) + (centrality * 0.2)
|
|
9
|
+
* 5. Return merged, re-ranked results with rank_explain metadata
|
|
10
|
+
*/
|
|
11
|
+
import { personalizedPageRank, computePageRank } from '../graph/graphology-bridge.js';
|
|
12
|
+
import { getBoostFactors } from '../retrieval-feedback.js';
|
|
13
|
+
import { logWarn } from '../fault-logger.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// PPR-Enhanced Search
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Re-rank search results using PPR, centrality, and feedback signals.
|
|
19
|
+
*
|
|
20
|
+
* @param semanticResults - Initial search results with memory IDs and similarity scores
|
|
21
|
+
* @param options - Tuning parameters
|
|
22
|
+
*/
|
|
23
|
+
export async function pprEnhancedRerank(semanticResults, options) {
|
|
24
|
+
const raw = options ?? {};
|
|
25
|
+
// Validate and clamp numeric options — reject non-finite / negative values.
|
|
26
|
+
const clampWeight = (v, def) => {
|
|
27
|
+
const n = v ?? def;
|
|
28
|
+
return Number.isFinite(n) && n >= 0 ? n : def;
|
|
29
|
+
};
|
|
30
|
+
const clampAlpha = (v) => {
|
|
31
|
+
const n = v ?? 0.85;
|
|
32
|
+
return Number.isFinite(n) && n > 0 && n < 1 ? n : 0.85;
|
|
33
|
+
};
|
|
34
|
+
const clampLimit = (v) => {
|
|
35
|
+
const n = v ?? 20;
|
|
36
|
+
return Number.isFinite(n) && n > 0 ? Math.floor(n) : 20;
|
|
37
|
+
};
|
|
38
|
+
const semanticWeight = clampWeight(raw.semanticWeight, 0.5);
|
|
39
|
+
const pprWeight = clampWeight(raw.pprWeight, 0.3);
|
|
40
|
+
const centralityWeight = clampWeight(raw.centralityWeight, 0.1);
|
|
41
|
+
const feedbackWeight = clampWeight(raw.feedbackWeight, 0.1);
|
|
42
|
+
const alpha = clampAlpha(raw.alpha);
|
|
43
|
+
const limit = clampLimit(raw.limit);
|
|
44
|
+
if (semanticResults.length === 0)
|
|
45
|
+
return [];
|
|
46
|
+
// Step 1: Get PPR scores seeded from semantic results
|
|
47
|
+
const seedIds = semanticResults.map((r) => r.memoryId);
|
|
48
|
+
const pprScores = new Map();
|
|
49
|
+
try {
|
|
50
|
+
const pprResults = await personalizedPageRank(seedIds, limit * 2, alpha);
|
|
51
|
+
for (const { memoryId, score } of pprResults) {
|
|
52
|
+
pprScores.set(memoryId, score);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
logWarn('ppr-retrieval', 'PPR failed, using semantic-only ranking', {
|
|
57
|
+
error: error instanceof Error ? error.message : String(error),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// Step 2: Get global PageRank (centrality)
|
|
61
|
+
let centralityScores = new Map();
|
|
62
|
+
try {
|
|
63
|
+
centralityScores = await computePageRank();
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
logWarn('ppr-retrieval', 'PageRank failed, skipping centrality', {
|
|
67
|
+
error: error instanceof Error ? error.message : String(error),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// Step 3: Get feedback boost factors
|
|
71
|
+
const allIds = new Set([...seedIds, ...pprScores.keys()]);
|
|
72
|
+
let feedbackFactors = new Map();
|
|
73
|
+
try {
|
|
74
|
+
feedbackFactors = getBoostFactors([...allIds]);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
logWarn('ppr-retrieval', 'Feedback boost failed, skipping', {
|
|
78
|
+
error: error instanceof Error ? error.message : String(error),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
// Step 4: Normalize scores (avoid spread for large maps — stack overflow risk)
|
|
82
|
+
// Use 0 as initial max — if all values are 0, normalization yields 0 (no signal)
|
|
83
|
+
let maxSemantic = 0;
|
|
84
|
+
for (const r of semanticResults) {
|
|
85
|
+
if (r.similarity > maxSemantic)
|
|
86
|
+
maxSemantic = r.similarity;
|
|
87
|
+
}
|
|
88
|
+
let maxPPR = 0;
|
|
89
|
+
for (const v of pprScores.values()) {
|
|
90
|
+
if (v > maxPPR)
|
|
91
|
+
maxPPR = v;
|
|
92
|
+
}
|
|
93
|
+
let maxCentrality = 0;
|
|
94
|
+
for (const v of centralityScores.values()) {
|
|
95
|
+
if (v > maxCentrality)
|
|
96
|
+
maxCentrality = v;
|
|
97
|
+
}
|
|
98
|
+
// Step 5: Merge all candidates (semantic + PPR-discovered)
|
|
99
|
+
const semanticMap = new Map(semanticResults.map((r) => [r.memoryId, r.similarity]));
|
|
100
|
+
const candidates = new Set([...semanticMap.keys(), ...pprScores.keys()]);
|
|
101
|
+
const results = [];
|
|
102
|
+
for (const memoryId of candidates) {
|
|
103
|
+
const semantic = maxSemantic > 0 ? (semanticMap.get(memoryId) ?? 0) / maxSemantic : 0;
|
|
104
|
+
const ppr = maxPPR > 0 ? (pprScores.get(memoryId) ?? 0) / maxPPR : 0;
|
|
105
|
+
const centrality = maxCentrality > 0 ? (centralityScores.get(memoryId) ?? 0) / maxCentrality : 0;
|
|
106
|
+
const feedback = feedbackFactors.get(memoryId) ?? 1.0;
|
|
107
|
+
// Combine scores (weights: semantic + ppr + centrality = linear blend)
|
|
108
|
+
// feedbackWeight controls the strength of the multiplicative feedback modifier
|
|
109
|
+
const baseScore = semantic * semanticWeight + ppr * pprWeight + centrality * centralityWeight;
|
|
110
|
+
// Apply feedback as multiplicative modifier scaled by feedbackWeight
|
|
111
|
+
// feedback=1.3 with feedbackWeight=0.1 → 1.0 + 0.1*(1.3-1.0) = 1.03x boost
|
|
112
|
+
const feedbackModifier = feedbackWeight > 0 ? 1.0 + feedbackWeight * (feedback - 1.0) : 1.0;
|
|
113
|
+
const score = baseScore * feedbackModifier;
|
|
114
|
+
// Build explanation
|
|
115
|
+
const parts = [];
|
|
116
|
+
if (semantic > 0)
|
|
117
|
+
parts.push(`semantic:${(semantic * semanticWeight).toFixed(3)}`);
|
|
118
|
+
if (ppr > 0)
|
|
119
|
+
parts.push(`ppr:${(ppr * pprWeight).toFixed(3)}`);
|
|
120
|
+
if (centrality > 0)
|
|
121
|
+
parts.push(`centrality:${(centrality * centralityWeight).toFixed(3)}`);
|
|
122
|
+
if (feedback !== 1.0)
|
|
123
|
+
parts.push(`feedback:${feedback.toFixed(2)}x`);
|
|
124
|
+
results.push({
|
|
125
|
+
memoryId,
|
|
126
|
+
score,
|
|
127
|
+
components: { semantic, ppr, centrality, feedback },
|
|
128
|
+
rankExplain: parts.join(' + '),
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
// Sort by score descending
|
|
132
|
+
results.sort((a, b) => b.score - a.score);
|
|
133
|
+
return results.slice(0, limit);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=ppr-retrieval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ppr-retrieval.js","sourceRoot":"","sources":["../../../src/lib/search/ppr-retrieval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repo Map Generation — Aider-style compact repository overview.
|
|
3
|
+
*
|
|
4
|
+
* Generates a compact text map: file path + exported symbols, one line per file.
|
|
5
|
+
* Uses tree-sitter AST for accurate symbol extraction (13 languages).
|
|
6
|
+
*
|
|
7
|
+
* Output example:
|
|
8
|
+
* src/lib/auth.ts: hashPassword, verifyToken, createSession
|
|
9
|
+
* src/lib/config.ts: getConfig, setConfigOverride, SuccConfig
|
|
10
|
+
*/
|
|
11
|
+
export interface RepoMapEntry {
|
|
12
|
+
filePath: string;
|
|
13
|
+
symbols: string[];
|
|
14
|
+
lineCount: number;
|
|
15
|
+
}
|
|
16
|
+
export interface RepoMapResult {
|
|
17
|
+
entries: RepoMapEntry[];
|
|
18
|
+
text: string;
|
|
19
|
+
totalFiles: number;
|
|
20
|
+
totalSymbols: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate a repo map using tree-sitter AST symbol extraction.
|
|
24
|
+
*
|
|
25
|
+
* @param rootPath - Project root (default: getProjectRoot())
|
|
26
|
+
* @param options - Filter options
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateRepoMap(rootPath?: string, options?: {
|
|
29
|
+
/** Include patterns (glob-like) */
|
|
30
|
+
include?: string[];
|
|
31
|
+
/** Exclude patterns */
|
|
32
|
+
exclude?: string[];
|
|
33
|
+
/** Max symbols per file (default: 10) */
|
|
34
|
+
maxSymbolsPerFile?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Symbol types to include. Accepted values match tree-sitter SymbolType:
|
|
37
|
+
* 'function', 'method', 'class', 'interface', 'type_alias', 'enum',
|
|
38
|
+
* 'struct', 'trait', 'impl', 'module', 'variable', 'constant'.
|
|
39
|
+
* Plural aliases are also accepted: 'functions'→'function', etc.
|
|
40
|
+
*/
|
|
41
|
+
symbolTypes?: string[];
|
|
42
|
+
}): Promise<RepoMapResult>;
|
|
43
|
+
//# sourceMappingURL=repo-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-map.d.ts","sourceRoot":"","sources":["../../../src/lib/search/repo-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAuBD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IACR,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,GACA,OAAO,CAAC,aAAa,CAAC,CAkExB"}
|