@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,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hierarchical Summaries — RAPTOR-style multi-level abstraction.
|
|
3
|
+
*
|
|
4
|
+
* Generates zoom-level summaries: file → directory → module → repo.
|
|
5
|
+
* Different query granularity needs different zoom levels:
|
|
6
|
+
* "What does hashPassword do?" → file-level
|
|
7
|
+
* "What does the auth module do?" → directory-level
|
|
8
|
+
* "Describe this project" → repo-level
|
|
9
|
+
*
|
|
10
|
+
* Summaries are stored as memory nodes with level metadata,
|
|
11
|
+
* enabling search at the appropriate zoom based on query specificity.
|
|
12
|
+
*/
|
|
13
|
+
import * as fs from 'fs';
|
|
14
|
+
import * as path from 'path';
|
|
15
|
+
import { logInfo, logWarn } from '../fault-logger.js';
|
|
16
|
+
import { getProjectRoot } from '../config.js';
|
|
17
|
+
import { callLLM } from '../llm.js';
|
|
18
|
+
import { EXTENSION_TO_LANGUAGE } from '../tree-sitter/types.js';
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Constants
|
|
21
|
+
// ============================================================================
|
|
22
|
+
const DEFAULT_EXCLUDES = new Set([
|
|
23
|
+
'node_modules',
|
|
24
|
+
'.git',
|
|
25
|
+
'dist',
|
|
26
|
+
'build',
|
|
27
|
+
'.next',
|
|
28
|
+
'.nuxt',
|
|
29
|
+
'coverage',
|
|
30
|
+
'__pycache__',
|
|
31
|
+
'.pytest_cache',
|
|
32
|
+
'target',
|
|
33
|
+
'vendor',
|
|
34
|
+
'.succ',
|
|
35
|
+
'.claude',
|
|
36
|
+
]);
|
|
37
|
+
const CODE_EXTENSIONS = new Set([
|
|
38
|
+
'.ts',
|
|
39
|
+
'.tsx',
|
|
40
|
+
'.js',
|
|
41
|
+
'.jsx',
|
|
42
|
+
'.py',
|
|
43
|
+
'.go',
|
|
44
|
+
'.rs',
|
|
45
|
+
'.rb',
|
|
46
|
+
'.java',
|
|
47
|
+
'.kt',
|
|
48
|
+
'.cs',
|
|
49
|
+
'.cpp',
|
|
50
|
+
'.c',
|
|
51
|
+
'.h',
|
|
52
|
+
]);
|
|
53
|
+
// Max chars to send to LLM for summarization
|
|
54
|
+
const MAX_FILE_CONTENT_CHARS = 6000;
|
|
55
|
+
const MAX_DIR_CONTENT_CHARS = 8000;
|
|
56
|
+
function extractExportedSymbols(content, ext) {
|
|
57
|
+
const symbols = [];
|
|
58
|
+
if (['.ts', '.tsx', '.js', '.jsx'].includes(ext)) {
|
|
59
|
+
const patterns = [
|
|
60
|
+
/export\s+(?:default\s+)?(?:async\s+)?function\s+(\w+)/g,
|
|
61
|
+
/export\s+(?:const|let|var)\s+(\w+)/g,
|
|
62
|
+
/export\s+(?:default\s+)?class\s+(\w+)/g,
|
|
63
|
+
/export\s+interface\s+(\w+)/g,
|
|
64
|
+
/export\s+type\s+(\w+)/g,
|
|
65
|
+
/export\s+enum\s+(\w+)/g,
|
|
66
|
+
];
|
|
67
|
+
for (const pattern of patterns) {
|
|
68
|
+
let match;
|
|
69
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
70
|
+
symbols.push(match[1]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (ext === '.py') {
|
|
75
|
+
let match;
|
|
76
|
+
const defPat = /^def\s+(\w+)/gm;
|
|
77
|
+
while ((match = defPat.exec(content)) !== null) {
|
|
78
|
+
if (!match[1].startsWith('_'))
|
|
79
|
+
symbols.push(match[1]);
|
|
80
|
+
}
|
|
81
|
+
const classPat = /^class\s+(\w+)/gm;
|
|
82
|
+
while ((match = classPat.exec(content)) !== null) {
|
|
83
|
+
symbols.push(match[1]);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (ext === '.go') {
|
|
87
|
+
const patterns = [/^func\s+(\w+)/gm, /^type\s+(\w+)\s+(?:struct|interface)/gm];
|
|
88
|
+
for (const pattern of patterns) {
|
|
89
|
+
let match;
|
|
90
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
91
|
+
if (match[1][0] === match[1][0].toUpperCase())
|
|
92
|
+
symbols.push(match[1]);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if (ext === '.rs') {
|
|
97
|
+
const patterns = [/pub\s+(?:async\s+)?fn\s+(\w+)/g, /pub\s+(?:struct|enum|trait)\s+(\w+)/g];
|
|
98
|
+
for (const pattern of patterns) {
|
|
99
|
+
let match;
|
|
100
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
101
|
+
symbols.push(match[1]);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return [...new Set(symbols)];
|
|
106
|
+
}
|
|
107
|
+
async function summarizeFile(file) {
|
|
108
|
+
const truncated = file.content.slice(0, MAX_FILE_CONTENT_CHARS);
|
|
109
|
+
const symbolList = file.symbols.length > 0 ? `\nExported symbols: ${file.symbols.join(', ')}` : '';
|
|
110
|
+
const prompt = `Summarize this source file in 2-3 sentences. Focus on its purpose, what it provides, and its role in the project. Be specific about functionality, not generic.
|
|
111
|
+
|
|
112
|
+
File: ${file.relativePath} (${file.lineCount} lines)${symbolList}
|
|
113
|
+
|
|
114
|
+
\`\`\`
|
|
115
|
+
${truncated}
|
|
116
|
+
\`\`\`
|
|
117
|
+
|
|
118
|
+
Summary:`;
|
|
119
|
+
return callLLM(prompt);
|
|
120
|
+
}
|
|
121
|
+
// ============================================================================
|
|
122
|
+
// Directory-level summary
|
|
123
|
+
// ============================================================================
|
|
124
|
+
async function summarizeDirectory(dirPath, fileSummaries) {
|
|
125
|
+
const fileDescriptions = fileSummaries
|
|
126
|
+
.map((s) => `- ${path.basename(s.path)}: ${s.summary}`)
|
|
127
|
+
.join('\n')
|
|
128
|
+
.slice(0, MAX_DIR_CONTENT_CHARS);
|
|
129
|
+
const prompt = `Summarize what this directory/module does in 2-3 sentences based on its files. Focus on the module's overall responsibility and how its parts work together.
|
|
130
|
+
|
|
131
|
+
Directory: ${dirPath}
|
|
132
|
+
Files (${fileSummaries.length}):
|
|
133
|
+
${fileDescriptions}
|
|
134
|
+
|
|
135
|
+
Summary:`;
|
|
136
|
+
return callLLM(prompt);
|
|
137
|
+
}
|
|
138
|
+
// ============================================================================
|
|
139
|
+
// Main generation pipeline
|
|
140
|
+
// ============================================================================
|
|
141
|
+
/**
|
|
142
|
+
* Generate hierarchical summaries for a codebase.
|
|
143
|
+
*
|
|
144
|
+
* Builds summaries bottom-up: files → directories → module groups → repo.
|
|
145
|
+
*
|
|
146
|
+
* @param rootPath - Project root (default: getProjectRoot())
|
|
147
|
+
* @param options - Generation options
|
|
148
|
+
*/
|
|
149
|
+
export async function generateHierarchicalSummaries(rootPath, options) {
|
|
150
|
+
const root = rootPath ?? getProjectRoot();
|
|
151
|
+
const extensions = options?.extensions ?? CODE_EXTENSIONS;
|
|
152
|
+
const excludes = options?.excludes ?? DEFAULT_EXCLUDES;
|
|
153
|
+
const maxFiles = options?.maxFiles ?? 200;
|
|
154
|
+
const rawConcurrency = options?.concurrency;
|
|
155
|
+
const concurrency = typeof rawConcurrency === 'number' && Number.isFinite(rawConcurrency) && rawConcurrency > 0
|
|
156
|
+
? Math.floor(rawConcurrency)
|
|
157
|
+
: 3;
|
|
158
|
+
const includeRepo = options?.includeRepo ?? true;
|
|
159
|
+
const summaries = [];
|
|
160
|
+
const levels = { file: 0, directory: 0, module: 0, repo: 0 };
|
|
161
|
+
// 1. Collect all code files
|
|
162
|
+
const files = [];
|
|
163
|
+
collectFiles(root, root, extensions, excludes, files, maxFiles);
|
|
164
|
+
logInfo('hierarchical', `Collected ${files.length} files for summarization`);
|
|
165
|
+
// 2. Generate file-level summaries (with concurrency control)
|
|
166
|
+
const fileSummaries = [];
|
|
167
|
+
for (let i = 0; i < files.length; i += concurrency) {
|
|
168
|
+
const batch = files.slice(i, i + concurrency);
|
|
169
|
+
const results = await Promise.all(batch.map(async (file) => {
|
|
170
|
+
try {
|
|
171
|
+
const summary = await summarizeFile(file);
|
|
172
|
+
return {
|
|
173
|
+
path: file.relativePath,
|
|
174
|
+
level: 'file',
|
|
175
|
+
summary,
|
|
176
|
+
symbols: file.symbols,
|
|
177
|
+
fileCount: 1,
|
|
178
|
+
lineCount: file.lineCount,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
logWarn('hierarchical', `Failed to summarize ${file.relativePath}`, {
|
|
183
|
+
error: error instanceof Error ? error.message : String(error),
|
|
184
|
+
});
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
}));
|
|
188
|
+
for (const result of results) {
|
|
189
|
+
if (result) {
|
|
190
|
+
fileSummaries.push(result);
|
|
191
|
+
summaries.push(result);
|
|
192
|
+
levels.file++;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// 3. Group by directory and generate directory-level summaries
|
|
197
|
+
const dirGroups = new Map();
|
|
198
|
+
for (const fileSummary of fileSummaries) {
|
|
199
|
+
const dir = path.dirname(fileSummary.path);
|
|
200
|
+
const group = dirGroups.get(dir) ?? [];
|
|
201
|
+
group.push(fileSummary);
|
|
202
|
+
dirGroups.set(dir, group);
|
|
203
|
+
}
|
|
204
|
+
const dirSummaries = [];
|
|
205
|
+
const dirEntries = [...dirGroups.entries()].filter(([, files]) => files.length >= 1);
|
|
206
|
+
for (let i = 0; i < dirEntries.length; i += concurrency) {
|
|
207
|
+
const batch = dirEntries.slice(i, i + concurrency);
|
|
208
|
+
const results = await Promise.all(batch.map(async ([dir, dirFiles]) => {
|
|
209
|
+
try {
|
|
210
|
+
const summary = await summarizeDirectory(dir, dirFiles);
|
|
211
|
+
const totalLines = dirFiles.reduce((sum, f) => sum + f.lineCount, 0);
|
|
212
|
+
return {
|
|
213
|
+
path: dir,
|
|
214
|
+
level: 'directory',
|
|
215
|
+
summary,
|
|
216
|
+
fileCount: dirFiles.length,
|
|
217
|
+
lineCount: totalLines,
|
|
218
|
+
children: dirFiles.map((f) => f.path),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
logWarn('hierarchical', `Failed to summarize directory ${dir}`, {
|
|
223
|
+
error: error instanceof Error ? error.message : String(error),
|
|
224
|
+
});
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
}));
|
|
228
|
+
for (const result of results) {
|
|
229
|
+
if (result) {
|
|
230
|
+
dirSummaries.push(result);
|
|
231
|
+
summaries.push(result);
|
|
232
|
+
levels.directory++;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// 4. Group directories into modules (top-level src/* directories)
|
|
237
|
+
const moduleGroups = new Map();
|
|
238
|
+
for (const dirSummary of dirSummaries) {
|
|
239
|
+
// Extract module: first 2 path segments (e.g., "src/lib", "src/mcp")
|
|
240
|
+
const parts = dirSummary.path.split('/');
|
|
241
|
+
// Guard against root paths creating a cycle with the repo node
|
|
242
|
+
const moduleKey = dirSummary.path === '.' || dirSummary.path === ''
|
|
243
|
+
? '__root__'
|
|
244
|
+
: parts.length >= 2
|
|
245
|
+
? parts.slice(0, 2).join('/')
|
|
246
|
+
: parts[0];
|
|
247
|
+
const group = moduleGroups.get(moduleKey) ?? [];
|
|
248
|
+
group.push(dirSummary);
|
|
249
|
+
moduleGroups.set(moduleKey, group);
|
|
250
|
+
}
|
|
251
|
+
const moduleSummaries = [];
|
|
252
|
+
const moduleEntries = [...moduleGroups.entries()].filter(([, dirs]) => dirs.length >= 1);
|
|
253
|
+
for (const [moduleKey, moduleDirs] of moduleEntries) {
|
|
254
|
+
try {
|
|
255
|
+
const dirDescriptions = moduleDirs
|
|
256
|
+
.map((d) => `- ${d.path}: ${d.summary}`)
|
|
257
|
+
.join('\n')
|
|
258
|
+
.slice(0, MAX_DIR_CONTENT_CHARS);
|
|
259
|
+
const totalFiles = moduleDirs.reduce((sum, d) => sum + d.fileCount, 0);
|
|
260
|
+
const totalLines = moduleDirs.reduce((sum, d) => sum + d.lineCount, 0);
|
|
261
|
+
const prompt = `Summarize this code module in 2-3 sentences. Focus on its architectural role, major subsystems, and how they fit together.
|
|
262
|
+
|
|
263
|
+
Module: ${moduleKey}
|
|
264
|
+
Sub-directories (${moduleDirs.length}):
|
|
265
|
+
${dirDescriptions}
|
|
266
|
+
|
|
267
|
+
Summary:`;
|
|
268
|
+
const summary = await callLLM(prompt);
|
|
269
|
+
const moduleSummary = {
|
|
270
|
+
path: moduleKey,
|
|
271
|
+
level: 'module',
|
|
272
|
+
summary,
|
|
273
|
+
fileCount: totalFiles,
|
|
274
|
+
lineCount: totalLines,
|
|
275
|
+
children: moduleDirs.map((d) => d.path),
|
|
276
|
+
};
|
|
277
|
+
moduleSummaries.push(moduleSummary);
|
|
278
|
+
summaries.push(moduleSummary);
|
|
279
|
+
levels.module++;
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
logWarn('hierarchical', `Failed to summarize module ${moduleKey}`, {
|
|
283
|
+
error: error instanceof Error ? error.message : String(error),
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// 5. Generate repo-level summary
|
|
288
|
+
if (includeRepo && moduleSummaries.length > 0) {
|
|
289
|
+
try {
|
|
290
|
+
const moduleDescriptions = moduleSummaries
|
|
291
|
+
.map((m) => `- ${m.path} (${m.fileCount} files): ${m.summary}`)
|
|
292
|
+
.join('\n')
|
|
293
|
+
.slice(0, MAX_DIR_CONTENT_CHARS);
|
|
294
|
+
const totalFiles = files.length;
|
|
295
|
+
const totalLines = files.reduce((sum, f) => sum + f.lineCount, 0);
|
|
296
|
+
const prompt = `Summarize this entire codebase in 3-4 sentences. What does it do? What are its major components? What technologies does it use?
|
|
297
|
+
|
|
298
|
+
Project root: ${path.basename(root)}
|
|
299
|
+
Modules (${moduleSummaries.length}):
|
|
300
|
+
${moduleDescriptions}
|
|
301
|
+
|
|
302
|
+
Total: ${totalFiles} files, ~${totalLines} lines of code
|
|
303
|
+
|
|
304
|
+
Summary:`;
|
|
305
|
+
const summary = await callLLM(prompt);
|
|
306
|
+
summaries.push({
|
|
307
|
+
path: '.',
|
|
308
|
+
level: 'repo',
|
|
309
|
+
summary,
|
|
310
|
+
fileCount: totalFiles,
|
|
311
|
+
lineCount: totalLines,
|
|
312
|
+
children: moduleSummaries.map((m) => m.path),
|
|
313
|
+
});
|
|
314
|
+
levels.repo++;
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
logWarn('hierarchical', `Failed to generate repo summary`, {
|
|
318
|
+
error: error instanceof Error ? error.message : String(error),
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
logInfo('hierarchical', `Generated ${summaries.length} summaries: ${levels.file} file, ${levels.directory} dir, ${levels.module} module, ${levels.repo} repo`);
|
|
323
|
+
return {
|
|
324
|
+
summaries,
|
|
325
|
+
totalFiles: files.length,
|
|
326
|
+
totalDirectories: dirGroups.size,
|
|
327
|
+
levels,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Get the appropriate summary level for a query based on specificity.
|
|
332
|
+
*
|
|
333
|
+
* Heuristic: specific symbol/file queries → file level first,
|
|
334
|
+
* then explicit scope keywords, then broad repo phrases.
|
|
335
|
+
* Symbol checks must precede generic repo phrases so that
|
|
336
|
+
* "what does myFunction do" resolves to file, not repo.
|
|
337
|
+
*/
|
|
338
|
+
export function inferSummaryLevel(query) {
|
|
339
|
+
const lower = query.toLowerCase();
|
|
340
|
+
// File path detection — tokens containing a recognized code extension route to file scope
|
|
341
|
+
const tokens = query.split(/\s+/);
|
|
342
|
+
for (const token of tokens) {
|
|
343
|
+
const ext = path.extname(token).slice(1).toLowerCase(); // strip leading dot
|
|
344
|
+
if (ext && ext in EXTENSION_TO_LANGUAGE)
|
|
345
|
+
return 'file';
|
|
346
|
+
}
|
|
347
|
+
// Specific symbol name check (camelCase, snake_case) — precise signal
|
|
348
|
+
if (/[a-z][A-Z]/.test(query) || /[a-zA-Z]{2,}_[a-zA-Z]{2,}/.test(query))
|
|
349
|
+
return 'file';
|
|
350
|
+
// Directory-level indicators (checked before repo to handle "describe this folder")
|
|
351
|
+
const dirWords = ['directory', 'folder', 'namespace', 'dir '];
|
|
352
|
+
if (dirWords.some((w) => lower.includes(w)))
|
|
353
|
+
return 'directory';
|
|
354
|
+
// Module-level indicators (checked before repo — "describe auth module" → module)
|
|
355
|
+
const moduleWords = ['module', 'subsystem', 'component', 'layer', 'package'];
|
|
356
|
+
if (moduleWords.some((w) => lower.includes(w)))
|
|
357
|
+
return 'module';
|
|
358
|
+
// Repo-level indicators — broad phrases that only match repo-scope queries
|
|
359
|
+
const repoWords = [
|
|
360
|
+
'project',
|
|
361
|
+
'codebase',
|
|
362
|
+
'repository',
|
|
363
|
+
'overview',
|
|
364
|
+
'architecture',
|
|
365
|
+
'describe this',
|
|
366
|
+
'what does this do',
|
|
367
|
+
];
|
|
368
|
+
if (repoWords.some((w) => lower.includes(w)))
|
|
369
|
+
return 'repo';
|
|
370
|
+
// Default to directory (good middle ground)
|
|
371
|
+
return 'directory';
|
|
372
|
+
}
|
|
373
|
+
// ============================================================================
|
|
374
|
+
// File Collection
|
|
375
|
+
// ============================================================================
|
|
376
|
+
function collectFiles(dir, root, extensions, excludes, result, maxFiles) {
|
|
377
|
+
if (result.length >= maxFiles)
|
|
378
|
+
return;
|
|
379
|
+
let entries;
|
|
380
|
+
try {
|
|
381
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
382
|
+
}
|
|
383
|
+
catch (error) {
|
|
384
|
+
logWarn('hierarchical', `Failed to read directory: ${dir}`, {
|
|
385
|
+
error: error instanceof Error ? error.message : String(error),
|
|
386
|
+
});
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
for (const entry of entries) {
|
|
390
|
+
if (result.length >= maxFiles)
|
|
391
|
+
return;
|
|
392
|
+
if (excludes.has(entry.name) || entry.name.startsWith('.'))
|
|
393
|
+
continue;
|
|
394
|
+
const fullPath = path.join(dir, entry.name);
|
|
395
|
+
if (entry.isDirectory()) {
|
|
396
|
+
collectFiles(fullPath, root, extensions, excludes, result, maxFiles);
|
|
397
|
+
}
|
|
398
|
+
else if (entry.isFile()) {
|
|
399
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
400
|
+
if (!extensions.has(ext))
|
|
401
|
+
continue;
|
|
402
|
+
try {
|
|
403
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
404
|
+
const lineCount = content.split('\n').length;
|
|
405
|
+
const symbols = extractExportedSymbols(content, ext);
|
|
406
|
+
const relativePath = path.relative(root, fullPath).replace(/\\/g, '/');
|
|
407
|
+
result.push({
|
|
408
|
+
relativePath,
|
|
409
|
+
absolutePath: fullPath,
|
|
410
|
+
content,
|
|
411
|
+
lineCount,
|
|
412
|
+
symbols,
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
catch (error) {
|
|
416
|
+
logWarn('hierarchical', `Failed to read file: ${fullPath}`, {
|
|
417
|
+
error: error instanceof Error ? error.message : String(error),
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=hierarchical-summaries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchical-summaries.js","sourceRoot":"","sources":["../../../src/lib/search/hierarchical-summaries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HyDE (Hypothetical Document Embeddings) for Code Search.
|
|
3
|
+
*
|
|
4
|
+
* For natural language queries, generates a hypothetical code snippet
|
|
5
|
+
* via LLM, then embeds the code (not the query) to bridge the
|
|
6
|
+
* NL↔code embedding space gap.
|
|
7
|
+
*
|
|
8
|
+
* "how to debounce" → LLM generates `function debounce(fn, delay) {...}`
|
|
9
|
+
* → embed the code → find real implementations.
|
|
10
|
+
*/
|
|
11
|
+
export interface HyDEResult {
|
|
12
|
+
/** Averaged embedding from hypothetical documents */
|
|
13
|
+
embedding: number[];
|
|
14
|
+
/** The generated hypothetical code snippets */
|
|
15
|
+
hypotheticals: string[];
|
|
16
|
+
/** Whether HyDE was used (vs. fallback to direct query embedding) */
|
|
17
|
+
used: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate hypothetical code embeddings for a natural language query.
|
|
21
|
+
*
|
|
22
|
+
* @param query - Natural language search query
|
|
23
|
+
* @param numHypotheticals - Number of hypothetical docs to generate (default: 3)
|
|
24
|
+
* @returns Averaged embedding from hypothetical documents
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateHyDE(query: string, numHypotheticals?: number): Promise<HyDEResult>;
|
|
27
|
+
//# sourceMappingURL=hyde.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyde.d.ts","sourceRoot":"","sources":["../../../src/lib/search/hyde.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,qEAAqE;IACrE,IAAI,EAAE,OAAO,CAAC;CACf;AAiBD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,gBAAgB,GAAE,MAAU,GAC3B,OAAO,CAAC,UAAU,CAAC,CA0ErB"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HyDE (Hypothetical Document Embeddings) for Code Search.
|
|
3
|
+
*
|
|
4
|
+
* For natural language queries, generates a hypothetical code snippet
|
|
5
|
+
* via LLM, then embeds the code (not the query) to bridge the
|
|
6
|
+
* NL↔code embedding space gap.
|
|
7
|
+
*
|
|
8
|
+
* "how to debounce" → LLM generates `function debounce(fn, delay) {...}`
|
|
9
|
+
* → embed the code → find real implementations.
|
|
10
|
+
*/
|
|
11
|
+
import { callLLM } from '../llm.js';
|
|
12
|
+
import { getEmbedding, getEmbeddings } from '../embeddings.js';
|
|
13
|
+
import { logInfo, logWarn } from '../fault-logger.js';
|
|
14
|
+
import { parseCode } from '../tree-sitter/index.js';
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// HyDE
|
|
17
|
+
// ============================================================================
|
|
18
|
+
const HYDE_SYSTEM = `You are a code generation assistant. Given a natural language query about code, generate a realistic code snippet that would answer the query. Output ONLY the code, no explanations.`;
|
|
19
|
+
const HYDE_PROMPT = `Generate a code snippet that answers this query:
|
|
20
|
+
"{query}"
|
|
21
|
+
|
|
22
|
+
Requirements:
|
|
23
|
+
- Write realistic, production-quality code
|
|
24
|
+
- Use common patterns and naming conventions
|
|
25
|
+
- Include function signature, types, and core logic
|
|
26
|
+
- Output ONLY the code (no markdown, no explanations)`;
|
|
27
|
+
/**
|
|
28
|
+
* Generate hypothetical code embeddings for a natural language query.
|
|
29
|
+
*
|
|
30
|
+
* @param query - Natural language search query
|
|
31
|
+
* @param numHypotheticals - Number of hypothetical docs to generate (default: 3)
|
|
32
|
+
* @returns Averaged embedding from hypothetical documents
|
|
33
|
+
*/
|
|
34
|
+
export async function generateHyDE(query, numHypotheticals = 3) {
|
|
35
|
+
// Reject blank or whitespace-only queries early — they produce nonsense hypotheticals
|
|
36
|
+
if (!query || !query.trim()) {
|
|
37
|
+
throw new Error('generateHyDE: query must not be blank');
|
|
38
|
+
}
|
|
39
|
+
// Clamp to prevent excessive LLM fan-out / rate limiting
|
|
40
|
+
numHypotheticals = Math.max(1, Math.min(numHypotheticals, 10));
|
|
41
|
+
// Use tree-sitter AST to detect if query is already code — skip HyDE if so
|
|
42
|
+
if (await looksLikeCodeAST(query)) {
|
|
43
|
+
const embedding = await getEmbedding(query);
|
|
44
|
+
return { embedding, hypotheticals: [], used: false };
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
// Generate hypothetical code snippets in parallel
|
|
48
|
+
const promises = Array.from({ length: numHypotheticals }, () => callLLM(HYDE_PROMPT.replace('{query}', query), {
|
|
49
|
+
maxTokens: 500,
|
|
50
|
+
systemPrompt: HYDE_SYSTEM,
|
|
51
|
+
timeout: 15000,
|
|
52
|
+
}));
|
|
53
|
+
const responses = await Promise.allSettled(promises);
|
|
54
|
+
const hypotheticals = responses
|
|
55
|
+
.filter((r) => r.status === 'fulfilled')
|
|
56
|
+
.map((r) => r.value.trim())
|
|
57
|
+
.filter((code) => code.length > 20); // Filter empty/tiny responses
|
|
58
|
+
if (hypotheticals.length === 0) {
|
|
59
|
+
logWarn('hyde', 'All hypothetical generations failed, falling back to query embedding');
|
|
60
|
+
const embedding = await getEmbedding(query);
|
|
61
|
+
return { embedding, hypotheticals: [], used: false };
|
|
62
|
+
}
|
|
63
|
+
// Embed only the hypothetical code snippets — not the original NL query.
|
|
64
|
+
// Mixing the query back in pulls the averaged vector toward natural-language
|
|
65
|
+
// space and weakens the code-space bridge HyDE is meant to create.
|
|
66
|
+
const allTexts = hypotheticals;
|
|
67
|
+
const embeddings = await getEmbeddings(allTexts);
|
|
68
|
+
// Average all embeddings
|
|
69
|
+
const dim = embeddings[0].length;
|
|
70
|
+
const averaged = new Array(dim).fill(0);
|
|
71
|
+
for (const emb of embeddings) {
|
|
72
|
+
for (let i = 0; i < dim; i++) {
|
|
73
|
+
averaged[i] += emb[i];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
for (let i = 0; i < dim; i++) {
|
|
77
|
+
averaged[i] /= embeddings.length;
|
|
78
|
+
}
|
|
79
|
+
// Normalize
|
|
80
|
+
const norm = Math.sqrt(averaged.reduce((sum, v) => sum + v * v, 0));
|
|
81
|
+
if (norm > 0) {
|
|
82
|
+
for (let i = 0; i < dim; i++) {
|
|
83
|
+
averaged[i] /= norm;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
logInfo('hyde', `Generated ${hypotheticals.length} hypothetical embeddings for query`);
|
|
87
|
+
return { embedding: averaged, hypotheticals, used: true };
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
logWarn('hyde', 'HyDE generation failed, falling back to query embedding', {
|
|
91
|
+
error: error instanceof Error ? error.message : String(error),
|
|
92
|
+
});
|
|
93
|
+
const embedding = await getEmbedding(query);
|
|
94
|
+
return { embedding, hypotheticals: [], used: false };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Languages to try when checking if a query is code
|
|
98
|
+
const CODE_DETECT_LANGUAGES = ['typescript', 'python', 'go', 'rust'];
|
|
99
|
+
/**
|
|
100
|
+
* Detect if a query is code using tree-sitter AST parsing.
|
|
101
|
+
*
|
|
102
|
+
* Tries parsing the query as several common languages. If any language
|
|
103
|
+
* produces a clean AST (no ERROR nodes), the query is code.
|
|
104
|
+
* Falls back to false if tree-sitter is unavailable.
|
|
105
|
+
*/
|
|
106
|
+
async function looksLikeCodeAST(query) {
|
|
107
|
+
// Short strings (< 3 chars) cannot form valid code constructs
|
|
108
|
+
if (query.length < 3)
|
|
109
|
+
return false;
|
|
110
|
+
for (const lang of CODE_DETECT_LANGUAGES) {
|
|
111
|
+
try {
|
|
112
|
+
const tree = await parseCode(query, lang);
|
|
113
|
+
if (!tree)
|
|
114
|
+
continue;
|
|
115
|
+
try {
|
|
116
|
+
const root = tree.rootNode;
|
|
117
|
+
// Clean parse with at least one named child = definitely code
|
|
118
|
+
if (!root.hasError && root.namedChildCount > 0) {
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
// Mostly clean: few errors relative to named children = likely code
|
|
122
|
+
if (root.namedChildCount >= 2) {
|
|
123
|
+
const errorNodes = root.descendantsOfType('ERROR');
|
|
124
|
+
if (errorNodes.length / root.namedChildCount < 0.3) {
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
tree.delete();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
logWarn('hyde', `Tree-sitter parse failed for ${lang}`, {
|
|
135
|
+
error: err instanceof Error ? err.message : String(err),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=hyde.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyde.js","sourceRoot":"","sources":["../../../src/lib/search/hyde.ts"],"names":[],"mappings":"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"}
|