@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,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge Edges — connects code entities with knowledge graph memories.
|
|
3
|
+
*
|
|
4
|
+
* Enables queries like "which decisions affect this function?" by creating
|
|
5
|
+
* typed edges between memories and the code they reference.
|
|
6
|
+
*
|
|
7
|
+
* Bridge edge types:
|
|
8
|
+
* - `documents` — decision/learning explains a code file/function
|
|
9
|
+
* - `bug_in` — error memory references a code location
|
|
10
|
+
* - `test_covers` — test file/symbol covers a function
|
|
11
|
+
* - `motivates` — pattern/decision motivates a code module
|
|
12
|
+
*/
|
|
13
|
+
/** Bridge relation types (subset of LinkRelation for code ↔ knowledge) */
|
|
14
|
+
export declare const BRIDGE_RELATIONS: readonly ["documents", "bug_in", "test_covers", "motivates"];
|
|
15
|
+
export type BridgeRelation = (typeof BRIDGE_RELATIONS)[number];
|
|
16
|
+
export interface BridgeEdgeResult {
|
|
17
|
+
created: number;
|
|
18
|
+
skipped: number;
|
|
19
|
+
errors: number;
|
|
20
|
+
}
|
|
21
|
+
export interface CodeReference {
|
|
22
|
+
path: string;
|
|
23
|
+
symbol?: string;
|
|
24
|
+
lineRange?: [number, number];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Represents the set of code paths referenced by a specific memory,
|
|
28
|
+
* used when bulk-building bridge edges outside of individual memory creation.
|
|
29
|
+
*/
|
|
30
|
+
export interface MemoryCodeLinks {
|
|
31
|
+
memoryId: number;
|
|
32
|
+
codePaths: CodeReference[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Scan memory content for code file path references.
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractCodePaths(content: string): CodeReference[];
|
|
38
|
+
/**
|
|
39
|
+
* Infer the best bridge relation type based on memory content and tags.
|
|
40
|
+
*/
|
|
41
|
+
export declare function inferBridgeRelation(content: string, tags: string[]): BridgeRelation;
|
|
42
|
+
/**
|
|
43
|
+
* Scan a memory for code path references and create bridge edges to
|
|
44
|
+
* other memories that also reference the same code paths.
|
|
45
|
+
*
|
|
46
|
+
* @param memoryId - The memory to scan
|
|
47
|
+
* @param content - Memory content text
|
|
48
|
+
* @param tags - Memory tags
|
|
49
|
+
*/
|
|
50
|
+
export declare function createBridgeEdgesForMemory(memoryId: number, content: string, tags: string[], preExtractedPaths?: CodeReference[]): Promise<BridgeEdgeResult>;
|
|
51
|
+
/**
|
|
52
|
+
* Create a manual bridge edge between a memory and a code path.
|
|
53
|
+
* Creates the link with explicit metadata about the code reference.
|
|
54
|
+
*/
|
|
55
|
+
export declare function createManualBridgeEdge(sourceMemoryId: number, targetMemoryId: number, codePath: string, relation?: BridgeRelation, options?: {
|
|
56
|
+
symbolName?: string;
|
|
57
|
+
lineRange?: [number, number];
|
|
58
|
+
weight?: number;
|
|
59
|
+
}): Promise<{
|
|
60
|
+
id: number;
|
|
61
|
+
created: boolean;
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* Find all memories connected to a given code path via bridge edges.
|
|
65
|
+
* Searches both memory content and link metadata.
|
|
66
|
+
*
|
|
67
|
+
* Two sources are combined:
|
|
68
|
+
* 1. Semantic search — memories whose content mentions the code path.
|
|
69
|
+
* 2. Link metadata — memories connected via bridge edges that record
|
|
70
|
+
* the code path in their metadata (covers manual edges and edges where
|
|
71
|
+
* the memory text doesn't repeat the full path).
|
|
72
|
+
*
|
|
73
|
+
* When options.relation is provided, only memories matched via a bridge
|
|
74
|
+
* edge of that relation type (or, for content-only matches, memories whose
|
|
75
|
+
* inferred relation matches) are returned.
|
|
76
|
+
*/
|
|
77
|
+
export declare function findMemoriesForCode(codePath: string, options?: {
|
|
78
|
+
relation?: BridgeRelation;
|
|
79
|
+
limit?: number;
|
|
80
|
+
}): Promise<Array<{
|
|
81
|
+
memoryId: number;
|
|
82
|
+
content: string;
|
|
83
|
+
relation: string;
|
|
84
|
+
score: number;
|
|
85
|
+
}>>;
|
|
86
|
+
/**
|
|
87
|
+
* Scan all recent memories and create bridge edges for any that
|
|
88
|
+
* reference code files. Used during batch processing / maintenance.
|
|
89
|
+
*
|
|
90
|
+
* @param limit - Max memories to scan (default: 100)
|
|
91
|
+
*/
|
|
92
|
+
export declare function autoBridgeRecentMemories(limit?: number): Promise<BridgeEdgeResult>;
|
|
93
|
+
//# sourceMappingURL=bridge-edges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-edges.d.ts","sourceRoot":"","sources":["../../../src/lib/graph/bridge-edges.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgBH,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,8DAA+D,CAAC;AAC7F,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAuBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CA0BjE;AAuBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,CAanF;AAMD;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,iBAAiB,CAAC,EAAE,aAAa,EAAE,GAClC,OAAO,CAAC,gBAAgB,CAAC,CAsE3B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,cAA4B,EACtC,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAW3C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,OAAO,CACR,KAAK,CAAC;IACJ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CACH,CAiEA;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiB7F"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge Edges — connects code entities with knowledge graph memories.
|
|
3
|
+
*
|
|
4
|
+
* Enables queries like "which decisions affect this function?" by creating
|
|
5
|
+
* typed edges between memories and the code they reference.
|
|
6
|
+
*
|
|
7
|
+
* Bridge edge types:
|
|
8
|
+
* - `documents` — decision/learning explains a code file/function
|
|
9
|
+
* - `bug_in` — error memory references a code location
|
|
10
|
+
* - `test_covers` — test file/symbol covers a function
|
|
11
|
+
* - `motivates` — pattern/decision motivates a code module
|
|
12
|
+
*/
|
|
13
|
+
import { createMemoryLink, hybridSearchMemories, getRecentMemories, getMemoryLinks, } from '../storage/index.js';
|
|
14
|
+
import { getEmbedding } from '../embeddings.js';
|
|
15
|
+
import { logInfo, logWarn } from '../fault-logger.js';
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Types
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/** Bridge relation types (subset of LinkRelation for code ↔ knowledge) */
|
|
20
|
+
export const BRIDGE_RELATIONS = ['documents', 'bug_in', 'test_covers', 'motivates'];
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// File Path Detection
|
|
23
|
+
// ============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* Common source code file extensions for path detection.
|
|
26
|
+
*/
|
|
27
|
+
const CODE_EXTENSIONS = /\.(ts|tsx|js|jsx|py|go|rs|rb|java|kt|cs|cpp|c|h|hpp|vue|svelte|php|swift|scala|sh|bash|zsh|yaml|yml|json|toml|sql|graphql|proto|md)$/;
|
|
28
|
+
/**
|
|
29
|
+
* Regex to detect file paths in memory content.
|
|
30
|
+
* Matches patterns like:
|
|
31
|
+
* - src/lib/auth.ts
|
|
32
|
+
* - ./components/Button.tsx
|
|
33
|
+
* - lib/storage/index.ts:42
|
|
34
|
+
* - `path/to/file.py`
|
|
35
|
+
*/
|
|
36
|
+
const FILE_PATH_PATTERN = /(?:^|[\s`"'(,])((\.{0,2}\/)?(?:[a-zA-Z0-9_.-]+\/)*[a-zA-Z0-9_.-]+\.[a-zA-Z0-9]+)(?::(\d+))?/gm;
|
|
37
|
+
/**
|
|
38
|
+
* Scan memory content for code file path references.
|
|
39
|
+
*/
|
|
40
|
+
export function extractCodePaths(content) {
|
|
41
|
+
const refs = [];
|
|
42
|
+
const seen = new Set();
|
|
43
|
+
// Reset regex state
|
|
44
|
+
FILE_PATH_PATTERN.lastIndex = 0;
|
|
45
|
+
let match;
|
|
46
|
+
while ((match = FILE_PATH_PATTERN.exec(content)) !== null) {
|
|
47
|
+
// Normalize: strip leading ./ and convert backslashes to forward slashes
|
|
48
|
+
const rawPath = match[1];
|
|
49
|
+
const path = rawPath.replace(/^\.\//, '').replace(/\\/g, '/');
|
|
50
|
+
// Must look like a code file
|
|
51
|
+
if (!CODE_EXTENSIONS.test(path))
|
|
52
|
+
continue;
|
|
53
|
+
// Skip duplicates
|
|
54
|
+
if (seen.has(path))
|
|
55
|
+
continue;
|
|
56
|
+
seen.add(path);
|
|
57
|
+
const line = match[3] ? parseInt(match[3], 10) : undefined;
|
|
58
|
+
refs.push({
|
|
59
|
+
path,
|
|
60
|
+
lineRange: line ? [line, line] : undefined,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return refs;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Detect if memory content is about a bug/error (for `bug_in` edges).
|
|
67
|
+
*/
|
|
68
|
+
function isBugRelated(content, tags) {
|
|
69
|
+
const bugKeywords = /\b(bug|error|fix|crash|exception|traceback|stack\s*trace|regression|broken|failed|failure)\b/i;
|
|
70
|
+
return (bugKeywords.test(content) ||
|
|
71
|
+
tags.some((t) => ['error', 'bug', 'fix', 'debug', 'dead_end'].includes(t)));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Detect if memory content is about testing (for `test_covers` edges).
|
|
75
|
+
*/
|
|
76
|
+
function isTestRelated(content, tags) {
|
|
77
|
+
const testKeywords = /\b(tests?|specs?|coverage|assertions?|mocks?|stubs?|fixtures?|jest|vitest|pytest|mocha)\b/i;
|
|
78
|
+
return testKeywords.test(content) || tags.some((t) => ['test', 'testing', 'spec'].includes(t));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Infer the best bridge relation type based on memory content and tags.
|
|
82
|
+
*/
|
|
83
|
+
export function inferBridgeRelation(content, tags) {
|
|
84
|
+
if (isBugRelated(content, tags))
|
|
85
|
+
return 'bug_in';
|
|
86
|
+
if (isTestRelated(content, tags))
|
|
87
|
+
return 'test_covers';
|
|
88
|
+
// Check for motivational patterns (architecture decisions, design patterns)
|
|
89
|
+
const motivatesKeywords = /\b(pattern|architecture|design|approach|strategy|convention|principle)\b/i;
|
|
90
|
+
if (motivatesKeywords.test(content) ||
|
|
91
|
+
tags.some((t) => ['pattern', 'architecture', 'decision'].includes(t))) {
|
|
92
|
+
return 'motivates';
|
|
93
|
+
}
|
|
94
|
+
return 'documents';
|
|
95
|
+
}
|
|
96
|
+
// ============================================================================
|
|
97
|
+
// Bridge Edge Creation
|
|
98
|
+
// ============================================================================
|
|
99
|
+
/**
|
|
100
|
+
* Scan a memory for code path references and create bridge edges to
|
|
101
|
+
* other memories that also reference the same code paths.
|
|
102
|
+
*
|
|
103
|
+
* @param memoryId - The memory to scan
|
|
104
|
+
* @param content - Memory content text
|
|
105
|
+
* @param tags - Memory tags
|
|
106
|
+
*/
|
|
107
|
+
export async function createBridgeEdgesForMemory(memoryId, content, tags, preExtractedPaths) {
|
|
108
|
+
const codePaths = preExtractedPaths ?? extractCodePaths(content);
|
|
109
|
+
if (codePaths.length === 0) {
|
|
110
|
+
return { created: 0, skipped: 0, errors: 0 };
|
|
111
|
+
}
|
|
112
|
+
const relation = inferBridgeRelation(content, tags);
|
|
113
|
+
let created = 0;
|
|
114
|
+
let skipped = 0;
|
|
115
|
+
let errors = 0;
|
|
116
|
+
// For each code path found, search for other memories that reference it
|
|
117
|
+
for (const ref of codePaths) {
|
|
118
|
+
let related;
|
|
119
|
+
try {
|
|
120
|
+
// Search for memories mentioning this file path
|
|
121
|
+
const queryEmbed = await getEmbedding(ref.path);
|
|
122
|
+
related = await hybridSearchMemories(ref.path, queryEmbed, 10);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
logWarn('bridge-edges', `Failed to search for related memories for ${ref.path}`, {
|
|
126
|
+
error: error instanceof Error ? error.message : String(error),
|
|
127
|
+
});
|
|
128
|
+
errors++;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
for (const target of related) {
|
|
132
|
+
if (target.id === memoryId)
|
|
133
|
+
continue;
|
|
134
|
+
// Check if target also mentions this code path
|
|
135
|
+
if (!target.content.includes(ref.path))
|
|
136
|
+
continue;
|
|
137
|
+
try {
|
|
138
|
+
const metadata = {
|
|
139
|
+
code_path: ref.path,
|
|
140
|
+
symbol_name: ref.symbol,
|
|
141
|
+
line_range: ref.lineRange,
|
|
142
|
+
detection: 'auto',
|
|
143
|
+
};
|
|
144
|
+
const result = await createMemoryLink(memoryId, target.id, relation, 0.7, {
|
|
145
|
+
metadata: metadata,
|
|
146
|
+
});
|
|
147
|
+
if (result.created) {
|
|
148
|
+
created++;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
skipped++;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
logWarn('bridge-edges', `Failed to create bridge edge for ${ref.path} → memory #${target.id}`, {
|
|
156
|
+
error: error instanceof Error ? error.message : String(error),
|
|
157
|
+
});
|
|
158
|
+
errors++;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (created > 0) {
|
|
163
|
+
logInfo('bridge-edges', `Created ${created} bridge edges for memory #${memoryId} (${relation}, ${codePaths.length} code paths)`);
|
|
164
|
+
}
|
|
165
|
+
return { created, skipped, errors };
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Create a manual bridge edge between a memory and a code path.
|
|
169
|
+
* Creates the link with explicit metadata about the code reference.
|
|
170
|
+
*/
|
|
171
|
+
export async function createManualBridgeEdge(sourceMemoryId, targetMemoryId, codePath, relation = 'documents', options) {
|
|
172
|
+
const metadata = {
|
|
173
|
+
code_path: codePath,
|
|
174
|
+
symbol_name: options?.symbolName,
|
|
175
|
+
line_range: options?.lineRange,
|
|
176
|
+
detection: 'manual',
|
|
177
|
+
};
|
|
178
|
+
return createMemoryLink(sourceMemoryId, targetMemoryId, relation, options?.weight ?? 0.8, {
|
|
179
|
+
metadata: metadata,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Find all memories connected to a given code path via bridge edges.
|
|
184
|
+
* Searches both memory content and link metadata.
|
|
185
|
+
*
|
|
186
|
+
* Two sources are combined:
|
|
187
|
+
* 1. Semantic search — memories whose content mentions the code path.
|
|
188
|
+
* 2. Link metadata — memories connected via bridge edges that record
|
|
189
|
+
* the code path in their metadata (covers manual edges and edges where
|
|
190
|
+
* the memory text doesn't repeat the full path).
|
|
191
|
+
*
|
|
192
|
+
* When options.relation is provided, only memories matched via a bridge
|
|
193
|
+
* edge of that relation type (or, for content-only matches, memories whose
|
|
194
|
+
* inferred relation matches) are returned.
|
|
195
|
+
*/
|
|
196
|
+
export async function findMemoriesForCode(codePath, options) {
|
|
197
|
+
const limit = options?.limit ?? 20;
|
|
198
|
+
const wantRelation = options?.relation;
|
|
199
|
+
const seen = new Set();
|
|
200
|
+
const results = [];
|
|
201
|
+
// ── Source 1: semantic / hybrid search ────────────────────────────────────
|
|
202
|
+
// Fetch more than `limit` so we have candidates after filtering.
|
|
203
|
+
const queryEmbed = await getEmbedding(codePath);
|
|
204
|
+
const memories = await hybridSearchMemories(codePath, queryEmbed, limit * 2);
|
|
205
|
+
for (const mem of memories) {
|
|
206
|
+
// Inspect bridge links regardless of whether the content mentions the path.
|
|
207
|
+
// Bridge link metadata is the authoritative source for code-path associations.
|
|
208
|
+
const links = await getMemoryLinks(mem.id);
|
|
209
|
+
const allLinks = [...links.outgoing, ...links.incoming];
|
|
210
|
+
// Find bridge links that reference this code path
|
|
211
|
+
const matchingBridgeLinks = allLinks.filter((l) => {
|
|
212
|
+
if (!BRIDGE_RELATIONS.includes(l.relation))
|
|
213
|
+
return false;
|
|
214
|
+
if (wantRelation && l.relation !== wantRelation)
|
|
215
|
+
return false;
|
|
216
|
+
// Check link metadata for the code path
|
|
217
|
+
const meta = l.metadata;
|
|
218
|
+
const matchesPath = (stored) => stored === codePath ||
|
|
219
|
+
(codePath.endsWith(stored) && codePath[codePath.length - stored.length - 1] === '/');
|
|
220
|
+
// Check single code_path (latest value, kept for backward compat)
|
|
221
|
+
if (meta?.code_path && matchesPath(meta.code_path))
|
|
222
|
+
return true;
|
|
223
|
+
// Check accumulated code_paths array (populated by PG on-conflict merge)
|
|
224
|
+
// Only metadata matches belong here — content fallback is handled below to
|
|
225
|
+
// avoid borrowing a relation from an unrelated bridge edge on the same memory
|
|
226
|
+
return Array.isArray(meta?.code_paths) && meta.code_paths.some(matchesPath);
|
|
227
|
+
});
|
|
228
|
+
// Determine relation for this memory
|
|
229
|
+
let relation;
|
|
230
|
+
if (matchingBridgeLinks.length > 0) {
|
|
231
|
+
relation = matchingBridgeLinks[0].relation;
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
// No matching bridge link found.
|
|
235
|
+
// Accept content-only matches only when the memory text contains the path.
|
|
236
|
+
if (!mem.content.includes(codePath))
|
|
237
|
+
continue;
|
|
238
|
+
relation = inferBridgeRelation(mem.content, mem.tags);
|
|
239
|
+
// Apply relation filter for content-inferred matches
|
|
240
|
+
if (wantRelation && relation !== wantRelation)
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
if (!seen.has(mem.id)) {
|
|
244
|
+
seen.add(mem.id);
|
|
245
|
+
results.push({
|
|
246
|
+
memoryId: mem.id,
|
|
247
|
+
content: mem.content,
|
|
248
|
+
relation,
|
|
249
|
+
score: mem.similarity ?? 0,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return results.slice(0, limit);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Scan all recent memories and create bridge edges for any that
|
|
257
|
+
* reference code files. Used during batch processing / maintenance.
|
|
258
|
+
*
|
|
259
|
+
* @param limit - Max memories to scan (default: 100)
|
|
260
|
+
*/
|
|
261
|
+
export async function autoBridgeRecentMemories(limit = 100) {
|
|
262
|
+
const memories = await getRecentMemories(limit);
|
|
263
|
+
const totals = { created: 0, skipped: 0, errors: 0 };
|
|
264
|
+
for (const mem of memories) {
|
|
265
|
+
const codePaths = extractCodePaths(mem.content);
|
|
266
|
+
if (codePaths.length === 0)
|
|
267
|
+
continue;
|
|
268
|
+
const result = await createBridgeEdgesForMemory(mem.id, mem.content, mem.tags, codePaths);
|
|
269
|
+
totals.created += result.created;
|
|
270
|
+
totals.skipped += result.skipped;
|
|
271
|
+
totals.errors += result.errors;
|
|
272
|
+
}
|
|
273
|
+
logInfo('bridge-edges', `Auto-bridge scan: ${totals.created} created, ${totals.skipped} skipped`);
|
|
274
|
+
return totals;
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=bridge-edges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-edges.js","sourceRoot":"","sources":["../../../src/lib/graph/bridge-edges.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,17 @@ export declare function normalizeCentrality(raw: Map<number, number>): Map<numbe
|
|
|
23
23
|
export declare function updateCentralityCache(): Promise<{
|
|
24
24
|
updated: number;
|
|
25
25
|
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Compute and cache centrality scores, using PageRank when graphology is
|
|
28
|
+
* available and falling back to degree centrality otherwise.
|
|
29
|
+
*
|
|
30
|
+
* PageRank captures global graph importance better than local degree count:
|
|
31
|
+
* a node connected to well-connected nodes scores higher than one with many
|
|
32
|
+
* weak connections.
|
|
33
|
+
*/
|
|
34
|
+
export declare function updateCentralityScores(): Promise<{
|
|
35
|
+
updated: number;
|
|
36
|
+
}>;
|
|
26
37
|
/**
|
|
27
38
|
* Apply centrality boost to recall results.
|
|
28
39
|
* Adds boostWeight * normalized_degree to similarity score.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"centrality.d.ts","sourceRoot":"","sources":["../../../src/lib/graph/centrality.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"centrality.d.ts","sourceRoot":"","sources":["../../../src/lib/graph/centrality.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAY1D;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CASrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAejF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB1E;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAmC3E;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EACtF,OAAO,EAAE,CAAC,EAAE,EACZ,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,CAAC,EAAE,CAAC,CAed"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* More-connected memories get boosted in recall results.
|
|
6
6
|
*/
|
|
7
7
|
import { getAllMemoryLinksForExport, upsertCentralityScore, getCentralityScores, } from '../storage/index.js';
|
|
8
|
+
import { logWarn } from '../fault-logger.js';
|
|
8
9
|
// ============================================================================
|
|
9
10
|
// Degree Centrality
|
|
10
11
|
// ============================================================================
|
|
@@ -46,10 +47,57 @@ export async function updateCentralityCache() {
|
|
|
46
47
|
const links = await getAllMemoryLinksForExport();
|
|
47
48
|
const raw = calculateDegreeCentrality(links);
|
|
48
49
|
const normalized = normalizeCentrality(raw);
|
|
50
|
+
const entries = Array.from(raw.entries()).map(([memId, deg]) => ({
|
|
51
|
+
memId,
|
|
52
|
+
degree: deg,
|
|
53
|
+
normalized: normalized.get(memId) ?? 0,
|
|
54
|
+
}));
|
|
55
|
+
// Chunk writes to avoid unbounded fan-out on large graphs
|
|
56
|
+
const CHUNK_SIZE = 50;
|
|
57
|
+
for (let i = 0; i < entries.length; i += CHUNK_SIZE) {
|
|
58
|
+
const chunk = entries.slice(i, i + CHUNK_SIZE);
|
|
59
|
+
await Promise.all(chunk.map((e) => upsertCentralityScore(e.memId, e.degree, e.normalized)));
|
|
60
|
+
}
|
|
61
|
+
return { updated: entries.length };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Compute and cache centrality scores, using PageRank when graphology is
|
|
65
|
+
* available and falling back to degree centrality otherwise.
|
|
66
|
+
*
|
|
67
|
+
* PageRank captures global graph importance better than local degree count:
|
|
68
|
+
* a node connected to well-connected nodes scores higher than one with many
|
|
69
|
+
* weak connections.
|
|
70
|
+
*/
|
|
71
|
+
export async function updateCentralityScores() {
|
|
72
|
+
let pageRankScores;
|
|
73
|
+
try {
|
|
74
|
+
const { computePageRank } = await import('./graphology-bridge.js');
|
|
75
|
+
pageRankScores = await computePageRank();
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
logWarn('centrality', 'PageRank unavailable, falling back to degree centrality', {
|
|
79
|
+
error: err instanceof Error ? err.message : String(err),
|
|
80
|
+
});
|
|
81
|
+
return updateCentralityCache();
|
|
82
|
+
}
|
|
83
|
+
if (pageRankScores.size === 0) {
|
|
84
|
+
return updateCentralityCache();
|
|
85
|
+
}
|
|
86
|
+
// Normalize PageRank scores to 0-1 range for upsert
|
|
87
|
+
let maxScore = 0;
|
|
88
|
+
for (const score of pageRankScores.values()) {
|
|
89
|
+
if (score > maxScore)
|
|
90
|
+
maxScore = score;
|
|
91
|
+
}
|
|
49
92
|
let count = 0;
|
|
50
|
-
for (const [memId,
|
|
51
|
-
const
|
|
52
|
-
|
|
93
|
+
for (const [memId, score] of pageRankScores) {
|
|
94
|
+
const normalized = maxScore > 0 ? score / maxScore : 0;
|
|
95
|
+
// Note: the DB column is named `degree` (from original degree centrality)
|
|
96
|
+
// but we repurpose it to store the raw PageRank score. Only
|
|
97
|
+
// `normalized_degree` (0-1 range) is read by consumers
|
|
98
|
+
// (getCentralityScores), so the raw column's semantics don't affect
|
|
99
|
+
// downstream behavior.
|
|
100
|
+
await upsertCentralityScore(memId, score, normalized);
|
|
53
101
|
count++;
|
|
54
102
|
}
|
|
55
103
|
return { updated: count };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"centrality.js","sourceRoot":"","sources":["../../../src/lib/graph/centrality.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"centrality.js","sourceRoot":"","sources":["../../../src/lib/graph/centrality.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../src/lib/graph/cleanup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../src/lib/graph/cleanup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAInF,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+FAA+F;IAC/F,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAoHvF"}
|
|
@@ -8,8 +8,9 @@ import { getAllMemoryLinksForExport, deleteMemoryLinksByIds, findIsolatedMemoryI
|
|
|
8
8
|
import { enrichExistingLinks } from './llm-relations.js';
|
|
9
9
|
import { detectCommunities } from './community-detection.js';
|
|
10
10
|
import { updateCentralityCache } from './centrality.js';
|
|
11
|
+
import { getIdleReflectionConfig } from '../config.js';
|
|
11
12
|
export async function graphCleanup(options = {}) {
|
|
12
|
-
const { pruneThreshold = 0.75, orphanThreshold = 0.6, orphanMaxLinks = 3, skipEnrich = false, skipOrphans = false, skipFinalize = false, dryRun = false, onProgress, } = options;
|
|
13
|
+
const { pruneThreshold = getIdleReflectionConfig().thresholds.auto_link_threshold ?? 0.75, orphanThreshold = 0.6, orphanMaxLinks = 3, skipEnrich = false, skipOrphans = false, skipFinalize = false, dryRun = false, onProgress, } = options;
|
|
13
14
|
const result = {
|
|
14
15
|
pruned: 0,
|
|
15
16
|
enriched: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/lib/graph/cleanup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAwB,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/lib/graph/cleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,12 +26,15 @@ export declare function buildAdjacencyList(links: Array<{
|
|
|
26
26
|
* 2. Iteratively: each node adopts the most frequent weighted label of its neighbors
|
|
27
27
|
* 3. Converges when no labels change
|
|
28
28
|
*
|
|
29
|
-
* @returns
|
|
29
|
+
* @returns Object with labels (nodeId → communityId) and actual iteration count
|
|
30
30
|
*/
|
|
31
31
|
export declare function labelPropagation(adjacency: Map<number, Array<{
|
|
32
32
|
neighbor: number;
|
|
33
33
|
weight: number;
|
|
34
|
-
}>>, maxIterations?: number, seed?: number):
|
|
34
|
+
}>>, maxIterations?: number, seed?: number): {
|
|
35
|
+
labels: Map<number, number>;
|
|
36
|
+
iterations: number;
|
|
37
|
+
};
|
|
35
38
|
/**
|
|
36
39
|
* Renumber communities from 0..N for clean output.
|
|
37
40
|
*/
|
|
@@ -45,8 +48,20 @@ export interface CommunityResult {
|
|
|
45
48
|
isolated: number;
|
|
46
49
|
iterations: number;
|
|
47
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Detect communities using Label Propagation Algorithm.
|
|
53
|
+
* Updates memory tags with community:N assignments.
|
|
54
|
+
* Exported for testing; prefer `detectCommunities()` which tries Louvain first.
|
|
55
|
+
*/
|
|
56
|
+
export declare function detectCommunitiesLP(options?: {
|
|
57
|
+
maxIterations?: number;
|
|
58
|
+
minCommunitySize?: number;
|
|
59
|
+
tagPrefix?: string;
|
|
60
|
+
}): Promise<CommunityResult>;
|
|
48
61
|
/**
|
|
49
62
|
* Detect communities in the memory graph.
|
|
63
|
+
* Tries Louvain modularity optimization first (higher quality); falls back to
|
|
64
|
+
* Label Propagation if graphology is unavailable.
|
|
50
65
|
* Updates memory tags with community:N assignments.
|
|
51
66
|
*/
|
|
52
67
|
export declare function detectCommunities(options?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"community-detection.d.ts","sourceRoot":"","sources":["../../../src/lib/graph/community-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"community-detection.d.ts","sourceRoot":"","sources":["../../../src/lib/graph/community-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAsCH;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GACrE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAe1D;AA8BD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,EACnE,aAAa,GAAE,MAAY,EAC3B,IAAI,GAAE,MAAW,GAChB;IAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAkDrD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAapF;AAMD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACtF,OAAO,CAAC,eAAe,CAAC,CAwF1B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACtF,OAAO,CAAC,eAAe,CAAC,CA4B1B;AA2DD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAoB,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYxB"}
|