@vinaes/succ 1.3.31 → 1.5.37
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 +65 -11
- package/agents/succ-code-reviewer.md +1 -1
- package/agents/succ-diff-reviewer.md +1 -1
- package/agents/succ-general.md +1 -1
- package/dist/cli.js +84 -2
- 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-agents.d.ts.map +1 -1
- package/dist/commands/analyze-agents.js +10 -11
- package/dist/commands/analyze-agents.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 +8 -3
- 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-templates.js +2 -2
- 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.d.ts.map +1 -1
- package/dist/commands/soul.js +7 -46
- 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 +23 -7
- 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 +177 -934
- 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 +49 -222
- 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 +18 -17
- 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 +157 -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 +6 -0
- package/dist/lib/config-validation.js.map +1 -1
- package/dist/lib/config.d.ts +8 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +108 -9
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/consolidate.d.ts.map +1 -1
- package/dist/lib/consolidate.js +73 -49
- 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/connection.d.ts.map +1 -1
- package/dist/lib/db/connection.js +8 -1
- package/dist/lib/db/connection.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 +34 -45
- 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 +14 -0
- package/dist/lib/llm.d.ts.map +1 -1
- package/dist/lib/llm.js +44 -8
- 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 +19 -5
- 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 +8 -2
- package/dist/lib/prd/parse.js.map +1 -1
- package/dist/lib/prd/prompt-builder.d.ts +9 -2
- package/dist/lib/prd/prompt-builder.d.ts.map +1 -1
- package/dist/lib/prd/prompt-builder.js +7 -8
- package/dist/lib/prd/prompt-builder.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 +45 -33
- package/dist/lib/prd/runner.js.map +1 -1
- package/dist/lib/prd/team-runner.js +2 -1
- package/dist/lib/prd/team-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 +22 -36
- 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 +54 -4
- package/dist/lib/public-api.d.ts.map +1 -1
- package/dist/lib/public-api.js +52 -2
- 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 +64 -13
- 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 +9 -17
- 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 +64 -52
- 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 +16 -16
- 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/supersession.d.ts.map +1 -1
- package/dist/lib/supersession.js +2 -15
- package/dist/lib/supersession.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/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 +11 -0
- package/dist/mcp/helpers.d.ts.map +1 -1
- package/dist/mcp/helpers.js +43 -2
- package/dist/mcp/helpers.js.map +1 -1
- package/dist/mcp/profile.d.ts +16 -0
- package/dist/mcp/profile.d.ts.map +1 -0
- package/dist/mcp/profile.js +64 -0
- package/dist/mcp/profile.js.map +1 -0
- package/dist/mcp/server.d.ts +17 -15
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +135 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/config.d.ts +1 -5
- package/dist/mcp/tools/config.d.ts.map +1 -1
- package/dist/mcp/tools/config.js +169 -215
- 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 +24 -14
- 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 +103 -179
- package/dist/mcp/tools/debug.js.map +1 -1
- package/dist/mcp/tools/graph.d.ts +0 -1
- package/dist/mcp/tools/graph.d.ts.map +1 -1
- package/dist/mcp/tools/graph.js +225 -233
- package/dist/mcp/tools/graph.js.map +1 -1
- package/dist/mcp/tools/indexing.d.ts +1 -7
- package/dist/mcp/tools/indexing.d.ts.map +1 -1
- package/dist/mcp/tools/indexing.js +180 -268
- 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 -1184
- package/dist/mcp/tools/memory.js.map +1 -1
- package/dist/mcp/tools/prd.d.ts +1 -7
- package/dist/mcp/tools/prd.d.ts.map +1 -1
- package/dist/mcp/tools/prd.js +198 -255
- 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 +168 -47
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/mcp/tools/status.d.ts +1 -5
- package/dist/mcp/tools/status.d.ts.map +1 -1
- package/dist/mcp/tools/status.js +270 -273
- package/dist/mcp/tools/status.js.map +1 -1
- package/dist/mcp/tools/web-fetch.d.ts +2 -1
- package/dist/mcp/tools/web-fetch.d.ts.map +1 -1
- package/dist/mcp/tools/web-fetch.js +72 -43
- package/dist/mcp/tools/web-fetch.js.map +1 -1
- package/dist/mcp/tools/web-search.d.ts +1 -6
- package/dist/mcp/tools/web-search.d.ts.map +1 -1
- package/dist/mcp/tools/web-search.js +199 -276
- package/dist/mcp/tools/web-search.js.map +1 -1
- package/dist/prompts/briefing.d.ts +10 -4
- package/dist/prompts/briefing.d.ts.map +1 -1
- package/dist/prompts/briefing.js +33 -35
- package/dist/prompts/briefing.js.map +1 -1
- package/dist/prompts/daemon.d.ts +5 -10
- package/dist/prompts/daemon.d.ts.map +1 -1
- package/dist/prompts/daemon.js +9 -18
- package/dist/prompts/daemon.js.map +1 -1
- package/dist/prompts/extraction.d.ts +19 -3
- package/dist/prompts/extraction.d.ts.map +1 -1
- package/dist/prompts/extraction.js +33 -46
- package/dist/prompts/extraction.js.map +1 -1
- package/dist/prompts/graph.d.ts +9 -0
- package/dist/prompts/graph.d.ts.map +1 -0
- package/dist/prompts/graph.js +27 -0
- package/dist/prompts/graph.js.map +1 -0
- 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 +17 -7
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +23 -7
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/memory.d.ts +6 -3
- package/dist/prompts/memory.d.ts.map +1 -1
- package/dist/prompts/memory.js +9 -8
- package/dist/prompts/memory.js.map +1 -1
- package/dist/prompts/onboarding.d.ts +1 -1
- package/dist/prompts/onboarding.d.ts.map +1 -1
- package/dist/prompts/onboarding.js +2 -3
- package/dist/prompts/onboarding.js.map +1 -1
- package/dist/prompts/prd.d.ts +13 -6
- package/dist/prompts/prd.d.ts.map +1 -1
- package/dist/prompts/prd.js +42 -38
- package/dist/prompts/prd.js.map +1 -1
- package/dist/prompts/query-expansion.d.ts +8 -0
- package/dist/prompts/query-expansion.d.ts.map +1 -0
- package/dist/prompts/query-expansion.js +17 -0
- package/dist/prompts/query-expansion.js.map +1 -0
- package/dist/prompts/skills.d.ts +5 -10
- package/dist/prompts/skills.d.ts.map +1 -1
- package/dist/prompts/skills.js +9 -17
- package/dist/prompts/skills.js.map +1 -1
- package/dist/prompts/soul.d.ts +9 -0
- package/dist/prompts/soul.d.ts.map +1 -0
- package/dist/prompts/soul.js +47 -0
- package/dist/prompts/soul.js.map +1 -0
- package/dist/prompts/supersession.d.ts +9 -0
- package/dist/prompts/supersession.d.ts.map +1 -0
- package/dist/prompts/supersession.js +21 -0
- package/dist/prompts/supersession.js.map +1 -0
- package/dist/prompts/synthesis.d.ts +9 -0
- package/dist/prompts/synthesis.d.ts.map +1 -0
- package/dist/prompts/synthesis.js +22 -0
- package/dist/prompts/synthesis.js.map +1 -0
- 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 +504 -450
- package/hooks/succ-stop-reflection.cjs +36 -62
- package/hooks/succ-user-prompt.cjs +137 -180
- package/package.json +18 -7
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* graphology integration for advanced graph algorithms.
|
|
3
|
+
*
|
|
4
|
+
* Provides: Personalized PageRank, Louvain communities, Dijkstra shortest path,
|
|
5
|
+
* articulation points, betweenness centrality, and PageRank.
|
|
6
|
+
*
|
|
7
|
+
* Loads memory links from StorageBackend into an in-memory graphology graph,
|
|
8
|
+
* runs algorithms, and returns results. Graph is cached and invalidated
|
|
9
|
+
* when links change.
|
|
10
|
+
*/
|
|
11
|
+
import { DirectedGraph } from 'graphology';
|
|
12
|
+
import louvain from 'graphology-communities-louvain';
|
|
13
|
+
import pagerank from 'graphology-metrics/centrality/pagerank.js';
|
|
14
|
+
import betweennessCentrality from 'graphology-metrics/centrality/betweenness.js';
|
|
15
|
+
import { bidirectional as dijkstraBidirectional } from 'graphology-shortest-path/dijkstra.js';
|
|
16
|
+
import { getAllMemoryLinksForExport, getAllMemoriesForExport } from '../storage/index.js';
|
|
17
|
+
import { getProjectRoot } from '../config.js';
|
|
18
|
+
import { logInfo } from '../fault-logger.js';
|
|
19
|
+
// Cache keyed by project root path so different projects never share a cached graph.
|
|
20
|
+
const graphCache = new Map();
|
|
21
|
+
const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
22
|
+
/** Safe project key — falls back to '__default__' when no project is configured. */
|
|
23
|
+
function safeProjectKey() {
|
|
24
|
+
try {
|
|
25
|
+
return getProjectRoot();
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return '__default__';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get or build the in-memory graphology graph from storage.
|
|
33
|
+
* Caches the graph per-project for CACHE_TTL_MS to avoid repeated DB reads.
|
|
34
|
+
*/
|
|
35
|
+
export async function getGraph(forceRefresh = false) {
|
|
36
|
+
const projectKey = safeProjectKey();
|
|
37
|
+
const now = Date.now();
|
|
38
|
+
const cached = graphCache.get(projectKey);
|
|
39
|
+
if (cached && !forceRefresh && now - cached.timestamp < CACHE_TTL_MS) {
|
|
40
|
+
return cached.graph;
|
|
41
|
+
}
|
|
42
|
+
// Use DirectedGraph so that directional relationships (A→B vs B→A) and
|
|
43
|
+
// multi-relational edges between the same pair of memories are preserved.
|
|
44
|
+
// All graph algorithms used here (PageRank, betweenness, Louvain, Dijkstra)
|
|
45
|
+
// support directed graphs.
|
|
46
|
+
const graph = new DirectedGraph();
|
|
47
|
+
// Load all links
|
|
48
|
+
const links = await getAllMemoryLinksForExport();
|
|
49
|
+
const memories = await getAllMemoriesForExport();
|
|
50
|
+
// Add all memory nodes (even isolated ones)
|
|
51
|
+
for (const mem of memories) {
|
|
52
|
+
if (!graph.hasNode(String(mem.id))) {
|
|
53
|
+
graph.addNode(String(mem.id), {
|
|
54
|
+
memoryId: mem.id,
|
|
55
|
+
content: mem.content?.slice(0, 200),
|
|
56
|
+
type: mem.type,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Add edges
|
|
61
|
+
for (const link of links) {
|
|
62
|
+
const sourceKey = String(link.source_id);
|
|
63
|
+
const targetKey = String(link.target_id);
|
|
64
|
+
// Ensure nodes exist
|
|
65
|
+
if (!graph.hasNode(sourceKey)) {
|
|
66
|
+
graph.addNode(sourceKey, { memoryId: link.source_id });
|
|
67
|
+
}
|
|
68
|
+
if (!graph.hasNode(targetKey)) {
|
|
69
|
+
graph.addNode(targetKey, { memoryId: link.target_id });
|
|
70
|
+
}
|
|
71
|
+
// Add directed edge; skip if an edge with the same source, target, and relation
|
|
72
|
+
// already exists to avoid inflating weights. DirectedGraph only supports one edge
|
|
73
|
+
// per (source, target) pair, so multi-relational A→B edges (same pair, different
|
|
74
|
+
// relation) are deduplicated here — the first-encountered relation wins.
|
|
75
|
+
if (!graph.hasDirectedEdge(sourceKey, targetKey)) {
|
|
76
|
+
graph.addDirectedEdge(sourceKey, targetKey, {
|
|
77
|
+
weight: link.weight ?? 1.0,
|
|
78
|
+
relation: link.relation ?? 'related',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
graphCache.set(projectKey, { graph, timestamp: now });
|
|
83
|
+
logInfo('graphology', `Graph loaded: ${graph.order} nodes, ${graph.size} edges`);
|
|
84
|
+
return graph;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Invalidate the graph cache for the current project (call after link mutations).
|
|
88
|
+
*/
|
|
89
|
+
export function invalidateGraphCache() {
|
|
90
|
+
const projectKey = safeProjectKey();
|
|
91
|
+
graphCache.delete(projectKey);
|
|
92
|
+
}
|
|
93
|
+
// ============================================================================
|
|
94
|
+
// Personalized PageRank (PPR)
|
|
95
|
+
// ============================================================================
|
|
96
|
+
/**
|
|
97
|
+
* Run Personalized PageRank from seed nodes.
|
|
98
|
+
*
|
|
99
|
+
* PPR biases the random walk to restart at seed nodes, making it
|
|
100
|
+
* discover nodes that are structurally relevant to the seeds.
|
|
101
|
+
* This is SOTA for graph-enhanced retrieval (HippoRAG2: 95% accuracy).
|
|
102
|
+
*
|
|
103
|
+
* @param seedNodeIds - Memory IDs to seed from (e.g., top-k search results)
|
|
104
|
+
* @param topK - Number of top PPR-scored nodes to return
|
|
105
|
+
* @param alpha - Restart probability (default: 0.85 — standard PageRank value)
|
|
106
|
+
* @returns Sorted array of { memoryId, score } pairs
|
|
107
|
+
*/
|
|
108
|
+
export async function personalizedPageRank(seedNodeIds, topK = 20, alpha = 0.85) {
|
|
109
|
+
const graph = await getGraph();
|
|
110
|
+
if (graph.order === 0)
|
|
111
|
+
return [];
|
|
112
|
+
// Build personalization vector: uniform over seed nodes
|
|
113
|
+
const validSeeds = seedNodeIds.filter((id) => graph.hasNode(String(id)));
|
|
114
|
+
if (validSeeds.length === 0)
|
|
115
|
+
return [];
|
|
116
|
+
// graphology's pagerank doesn't natively support personalization vector,
|
|
117
|
+
// so we implement PPR using power iteration manually
|
|
118
|
+
const pprScores = computePPR(graph, validSeeds.map(String), alpha, 50);
|
|
119
|
+
// Convert to sorted array
|
|
120
|
+
const results = [];
|
|
121
|
+
for (const [nodeKey, score] of pprScores.entries()) {
|
|
122
|
+
const memId = parseInt(nodeKey, 10);
|
|
123
|
+
if (!isNaN(memId)) {
|
|
124
|
+
results.push({ memoryId: memId, score });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
results.sort((a, b) => b.score - a.score);
|
|
128
|
+
return results.slice(0, topK);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Power iteration for Personalized PageRank.
|
|
132
|
+
*
|
|
133
|
+
* PPR(v) = (1-alpha) * personalization(v) + alpha * sum(PPR(u) * w(u,v) / deg(u))
|
|
134
|
+
*/
|
|
135
|
+
function computePPR(graph, seedNodes, alpha, maxIterations) {
|
|
136
|
+
const n = graph.order;
|
|
137
|
+
if (n === 0)
|
|
138
|
+
return new Map();
|
|
139
|
+
// Initialize personalization vector
|
|
140
|
+
const personalization = new Map();
|
|
141
|
+
const seedWeight = 1.0 / seedNodes.length;
|
|
142
|
+
for (const seed of seedNodes) {
|
|
143
|
+
if (graph.hasNode(seed)) {
|
|
144
|
+
personalization.set(seed, seedWeight);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Initialize scores uniformly
|
|
148
|
+
let scores = new Map();
|
|
149
|
+
const initScore = 1.0 / n;
|
|
150
|
+
graph.forEachNode((node) => {
|
|
151
|
+
scores.set(node, initScore);
|
|
152
|
+
});
|
|
153
|
+
// Precompute weighted out-degrees for all nodes (O(E) total, done once).
|
|
154
|
+
// In a directed graph, a node distributes its score along its OUT-edges,
|
|
155
|
+
// so we sum weights over outgoing edges only.
|
|
156
|
+
const weightedDegrees = new Map();
|
|
157
|
+
graph.forEachNode((node) => {
|
|
158
|
+
let wDeg = 0;
|
|
159
|
+
graph.forEachOutEdge(node, (_edge, attr) => {
|
|
160
|
+
wDeg += attr.weight ?? 1.0;
|
|
161
|
+
});
|
|
162
|
+
weightedDegrees.set(node, wDeg);
|
|
163
|
+
});
|
|
164
|
+
// Identify dangling nodes (zero weighted degree) — their mass must be redistributed
|
|
165
|
+
// to prevent score mass from collapsing each iteration.
|
|
166
|
+
const danglingNodes = [];
|
|
167
|
+
graph.forEachNode((node) => {
|
|
168
|
+
if ((weightedDegrees.get(node) ?? 0) === 0) {
|
|
169
|
+
danglingNodes.push(node);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
// Power iteration
|
|
173
|
+
for (let iter = 0; iter < maxIterations; iter++) {
|
|
174
|
+
const newScores = new Map();
|
|
175
|
+
let diff = 0;
|
|
176
|
+
// Collect dangling mass — redistribute uniformly across all nodes
|
|
177
|
+
let danglingMass = 0;
|
|
178
|
+
for (const d of danglingNodes) {
|
|
179
|
+
danglingMass += scores.get(d) ?? 0;
|
|
180
|
+
}
|
|
181
|
+
const danglingShare = (alpha * danglingMass) / n;
|
|
182
|
+
graph.forEachNode((node) => {
|
|
183
|
+
// Contribution from in-neighbors (nodes that have an out-edge pointing TO this node).
|
|
184
|
+
// PPR formula: score(v) ← sum over u where u→v exists of: score(u) * w(u,v) / outDeg(u)
|
|
185
|
+
let neighborContrib = 0;
|
|
186
|
+
graph.forEachInNeighbor(node, (neighbor) => {
|
|
187
|
+
const wDeg = weightedDegrees.get(neighbor) ?? 0;
|
|
188
|
+
if (wDeg > 0) {
|
|
189
|
+
// Edge runs neighbor → node (confirmed by forEachInNeighbor)
|
|
190
|
+
const edgeWeight = graph.hasDirectedEdge(neighbor, node)
|
|
191
|
+
? (graph.getEdgeAttribute(graph.directedEdge(neighbor, node), 'weight') ?? 1.0)
|
|
192
|
+
: 1.0;
|
|
193
|
+
neighborContrib += ((scores.get(neighbor) ?? 0) * edgeWeight) / wDeg;
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
// PPR formula: (1-alpha) * personalization + alpha * neighbor_contrib + dangling_share
|
|
197
|
+
const p = personalization.get(node) ?? 0;
|
|
198
|
+
const newScore = (1 - alpha) * p + alpha * neighborContrib + danglingShare;
|
|
199
|
+
newScores.set(node, newScore);
|
|
200
|
+
diff += Math.abs(newScore - (scores.get(node) ?? 0));
|
|
201
|
+
});
|
|
202
|
+
scores = newScores;
|
|
203
|
+
// Early convergence
|
|
204
|
+
if (diff < 1e-8)
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
return scores;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Detect communities using Louvain modularity optimization.
|
|
211
|
+
* Superior to Label Propagation — produces higher-quality communities.
|
|
212
|
+
*
|
|
213
|
+
* @returns Communities sorted by size (largest first)
|
|
214
|
+
*/
|
|
215
|
+
export async function detectLouvainCommunities(minSize = 2) {
|
|
216
|
+
const graph = await getGraph();
|
|
217
|
+
if (graph.order === 0) {
|
|
218
|
+
return { communities: [], modularity: 0, isolated: 0 };
|
|
219
|
+
}
|
|
220
|
+
// Run Louvain with detailed output (includes modularity)
|
|
221
|
+
const detailed = louvain.detailed(graph, {
|
|
222
|
+
getEdgeWeight: 'weight',
|
|
223
|
+
resolution: 1.0,
|
|
224
|
+
});
|
|
225
|
+
const communities = detailed.communities;
|
|
226
|
+
const modularity = detailed.modularity;
|
|
227
|
+
// Group by community
|
|
228
|
+
const communityMap = new Map();
|
|
229
|
+
for (const [nodeKey, communityId] of Object.entries(communities)) {
|
|
230
|
+
const memId = parseInt(nodeKey, 10);
|
|
231
|
+
if (isNaN(memId))
|
|
232
|
+
continue;
|
|
233
|
+
const members = communityMap.get(communityId) ?? [];
|
|
234
|
+
members.push(memId);
|
|
235
|
+
communityMap.set(communityId, members);
|
|
236
|
+
}
|
|
237
|
+
// Build result
|
|
238
|
+
const result = [];
|
|
239
|
+
let isolated = 0;
|
|
240
|
+
let nextId = 0;
|
|
241
|
+
for (const [, members] of communityMap) {
|
|
242
|
+
if (members.length < minSize) {
|
|
243
|
+
isolated += members.length;
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
result.push({
|
|
247
|
+
id: nextId++,
|
|
248
|
+
size: members.length,
|
|
249
|
+
members: members.sort((a, b) => a - b),
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
result.sort((a, b) => b.size - a.size);
|
|
254
|
+
return { communities: result, modularity, isolated };
|
|
255
|
+
}
|
|
256
|
+
// ============================================================================
|
|
257
|
+
// Shortest Path (Dijkstra)
|
|
258
|
+
// ============================================================================
|
|
259
|
+
/**
|
|
260
|
+
* Convert edge similarity weight (higher = stronger relation) to distance
|
|
261
|
+
* cost (lower = closer) for Dijkstra. Avoids zero/negative/non-finite costs.
|
|
262
|
+
*
|
|
263
|
+
* Only guards the lower bound and non-finite values — weights above 1.0 are
|
|
264
|
+
* intentionally preserved so that Dijkstra and betweenness centrality can
|
|
265
|
+
* distinguish between links of different strengths. Clamping to 1.0 would
|
|
266
|
+
* collapse all high-weight edges to an identical cost of 1.0 and lose ordering.
|
|
267
|
+
*/
|
|
268
|
+
function similarityToDistance(_edge, attr) {
|
|
269
|
+
const raw = typeof attr.weight === 'number' ? attr.weight : 1.0;
|
|
270
|
+
const safe = Number.isFinite(raw) && raw > 0 ? raw : 0.01;
|
|
271
|
+
return 1.0 / safe;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Find shortest path between two memories using Dijkstra.
|
|
275
|
+
* Edge weights in the graph represent similarity/strength (higher = stronger).
|
|
276
|
+
* Dijkstra needs cost/distance (lower = closer), so weights are inverted
|
|
277
|
+
* via 1/weight before path-finding.
|
|
278
|
+
*
|
|
279
|
+
* @returns Path as array of memory IDs, or null if no path exists
|
|
280
|
+
*/
|
|
281
|
+
export async function shortestPath(fromId, toId) {
|
|
282
|
+
const graph = await getGraph();
|
|
283
|
+
const fromKey = String(fromId);
|
|
284
|
+
const toKey = String(toId);
|
|
285
|
+
if (!graph.hasNode(fromKey) || !graph.hasNode(toKey)) {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
const pathNodes = dijkstraBidirectional(graph, fromKey, toKey, similarityToDistance);
|
|
289
|
+
if (!pathNodes || pathNodes.length === 0)
|
|
290
|
+
return null;
|
|
291
|
+
// Calculate total original weight (similarity, not distance)
|
|
292
|
+
let totalWeight = 0;
|
|
293
|
+
for (let i = 0; i < pathNodes.length - 1; i++) {
|
|
294
|
+
const edge = graph.edge(pathNodes[i], pathNodes[i + 1]);
|
|
295
|
+
if (edge) {
|
|
296
|
+
totalWeight += graph.getEdgeAttribute(edge, 'weight') ?? 1.0;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return {
|
|
300
|
+
path: pathNodes.map((n) => parseInt(n, 10)),
|
|
301
|
+
weight: totalWeight,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
// ============================================================================
|
|
305
|
+
// Articulation Points (Critical Nodes)
|
|
306
|
+
// ============================================================================
|
|
307
|
+
/**
|
|
308
|
+
* Find articulation points — nodes whose removal disconnects the graph.
|
|
309
|
+
* These are "load-bearing" memories, architectural bottlenecks.
|
|
310
|
+
*
|
|
311
|
+
* Uses Tarjan's algorithm (O(V+E)).
|
|
312
|
+
*
|
|
313
|
+
* @returns Array of memory IDs that are articulation points
|
|
314
|
+
*/
|
|
315
|
+
export async function getArticulationPoints() {
|
|
316
|
+
const graph = await getGraph();
|
|
317
|
+
if (graph.order < 3)
|
|
318
|
+
return [];
|
|
319
|
+
return findArticulationPointsTarjan(graph)
|
|
320
|
+
.map((n) => parseInt(n, 10))
|
|
321
|
+
.filter((id) => !isNaN(id));
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Tarjan's algorithm for finding articulation points in an undirected graph.
|
|
325
|
+
* A node is an articulation point if:
|
|
326
|
+
* 1. It is the root of the DFS tree and has 2+ children, OR
|
|
327
|
+
* 2. It is not root and has a child with no back-edge above it (low[child] >= disc[node])
|
|
328
|
+
*/
|
|
329
|
+
function findArticulationPointsTarjan(graph) {
|
|
330
|
+
const disc = new Map();
|
|
331
|
+
const low = new Map();
|
|
332
|
+
const parent = new Map();
|
|
333
|
+
const childCount = new Map();
|
|
334
|
+
const ap = new Set();
|
|
335
|
+
let time = 0;
|
|
336
|
+
// Iterative DFS to avoid stack overflow on large graphs
|
|
337
|
+
function dfsIterative(root) {
|
|
338
|
+
const stack = [];
|
|
339
|
+
disc.set(root, time);
|
|
340
|
+
low.set(root, time);
|
|
341
|
+
time++;
|
|
342
|
+
childCount.set(root, 0);
|
|
343
|
+
const rootNeighbors = graph.neighbors(root);
|
|
344
|
+
stack.push({ node: root, idx: 0, neighbors: rootNeighbors });
|
|
345
|
+
while (stack.length > 0) {
|
|
346
|
+
const frame = stack[stack.length - 1];
|
|
347
|
+
const u = frame.node;
|
|
348
|
+
if (frame.idx < frame.neighbors.length) {
|
|
349
|
+
const v = frame.neighbors[frame.idx];
|
|
350
|
+
frame.idx++;
|
|
351
|
+
if (!disc.has(v)) {
|
|
352
|
+
// Tree edge
|
|
353
|
+
parent.set(v, u);
|
|
354
|
+
childCount.set(u, (childCount.get(u) ?? 0) + 1);
|
|
355
|
+
disc.set(v, time);
|
|
356
|
+
low.set(v, time);
|
|
357
|
+
time++;
|
|
358
|
+
childCount.set(v, 0);
|
|
359
|
+
const vNeighbors = graph.neighbors(v);
|
|
360
|
+
stack.push({ node: v, idx: 0, neighbors: vNeighbors });
|
|
361
|
+
}
|
|
362
|
+
else if (v !== parent.get(u)) {
|
|
363
|
+
// Back edge
|
|
364
|
+
low.set(u, Math.min(low.get(u), disc.get(v)));
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
// All neighbors processed — pop and update parent
|
|
369
|
+
stack.pop();
|
|
370
|
+
if (stack.length > 0) {
|
|
371
|
+
const parentFrame = stack[stack.length - 1];
|
|
372
|
+
const pu = parentFrame.node;
|
|
373
|
+
low.set(pu, Math.min(low.get(pu), low.get(u)));
|
|
374
|
+
// Root with 2+ children
|
|
375
|
+
if (parent.get(pu) === null && (childCount.get(pu) ?? 0) > 1) {
|
|
376
|
+
ap.add(pu);
|
|
377
|
+
}
|
|
378
|
+
// Non-root with child that can't reach above
|
|
379
|
+
if (parent.get(pu) !== null && low.get(u) >= disc.get(pu)) {
|
|
380
|
+
ap.add(pu);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
graph.forEachNode((node) => {
|
|
387
|
+
if (!disc.has(node)) {
|
|
388
|
+
parent.set(node, null);
|
|
389
|
+
dfsIterative(node);
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
return [...ap];
|
|
393
|
+
}
|
|
394
|
+
// ============================================================================
|
|
395
|
+
// PageRank (Global Importance)
|
|
396
|
+
// ============================================================================
|
|
397
|
+
/**
|
|
398
|
+
* Compute global PageRank for all nodes.
|
|
399
|
+
* Higher-ranked memories are more "important" (more connections, central position).
|
|
400
|
+
*
|
|
401
|
+
* @returns Map of memoryId → PageRank score (0-1)
|
|
402
|
+
*/
|
|
403
|
+
export async function computePageRank() {
|
|
404
|
+
const graph = await getGraph();
|
|
405
|
+
if (graph.order === 0)
|
|
406
|
+
return new Map();
|
|
407
|
+
const scores = pagerank(graph, {
|
|
408
|
+
alpha: 0.85,
|
|
409
|
+
maxIterations: 100,
|
|
410
|
+
tolerance: 1e-6,
|
|
411
|
+
getEdgeWeight: 'weight',
|
|
412
|
+
});
|
|
413
|
+
const result = new Map();
|
|
414
|
+
graph.forEachNode((node) => {
|
|
415
|
+
const memId = parseInt(node, 10);
|
|
416
|
+
if (!isNaN(memId)) {
|
|
417
|
+
result.set(memId, scores[node] ?? 0);
|
|
418
|
+
}
|
|
419
|
+
});
|
|
420
|
+
return result;
|
|
421
|
+
}
|
|
422
|
+
// ============================================================================
|
|
423
|
+
// Betweenness Centrality
|
|
424
|
+
// ============================================================================
|
|
425
|
+
/**
|
|
426
|
+
* Compute betweenness centrality for all nodes.
|
|
427
|
+
* Nodes with high betweenness sit on many shortest paths — they're "bridges"
|
|
428
|
+
* between different parts of the knowledge graph.
|
|
429
|
+
*
|
|
430
|
+
* @returns Map of memoryId → betweenness score (0-1 normalized)
|
|
431
|
+
*/
|
|
432
|
+
export async function computeBetweennessCentrality() {
|
|
433
|
+
const graph = await getGraph();
|
|
434
|
+
if (graph.order === 0)
|
|
435
|
+
return new Map();
|
|
436
|
+
const scores = betweennessCentrality(graph, {
|
|
437
|
+
getEdgeWeight: similarityToDistance,
|
|
438
|
+
normalized: true,
|
|
439
|
+
});
|
|
440
|
+
const result = new Map();
|
|
441
|
+
graph.forEachNode((node) => {
|
|
442
|
+
const memId = parseInt(node, 10);
|
|
443
|
+
if (!isNaN(memId)) {
|
|
444
|
+
result.set(memId, scores[node] ?? 0);
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
return result;
|
|
448
|
+
}
|
|
449
|
+
// ============================================================================
|
|
450
|
+
// Why Related (Explain Path)
|
|
451
|
+
// ============================================================================
|
|
452
|
+
/**
|
|
453
|
+
* Explain why two memories are related by finding the shortest path
|
|
454
|
+
* and returning the relationship chain with edge types.
|
|
455
|
+
*/
|
|
456
|
+
export async function whyRelated(fromId, toId) {
|
|
457
|
+
const graph = await getGraph();
|
|
458
|
+
const fromKey = String(fromId);
|
|
459
|
+
const toKey = String(toId);
|
|
460
|
+
if (!graph.hasNode(fromKey) || !graph.hasNode(toKey)) {
|
|
461
|
+
return null;
|
|
462
|
+
}
|
|
463
|
+
const pathNodes = dijkstraBidirectional(graph, fromKey, toKey, similarityToDistance);
|
|
464
|
+
if (!pathNodes || pathNodes.length === 0) {
|
|
465
|
+
return { connected: false, path: [], distance: Number.MAX_SAFE_INTEGER };
|
|
466
|
+
}
|
|
467
|
+
const path = [];
|
|
468
|
+
let totalWeight = 0;
|
|
469
|
+
for (let i = 0; i < pathNodes.length; i++) {
|
|
470
|
+
const memId = parseInt(pathNodes[i], 10);
|
|
471
|
+
let relation;
|
|
472
|
+
if (i < pathNodes.length - 1) {
|
|
473
|
+
const edge = graph.edge(pathNodes[i], pathNodes[i + 1]);
|
|
474
|
+
if (edge) {
|
|
475
|
+
relation = graph.getEdgeAttribute(edge, 'relation');
|
|
476
|
+
const w = graph.getEdgeAttribute(edge, 'weight');
|
|
477
|
+
totalWeight += Number.isFinite(w) ? w : 1.0;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
path.push({ memoryId: memId, relation });
|
|
481
|
+
}
|
|
482
|
+
return {
|
|
483
|
+
connected: true,
|
|
484
|
+
path,
|
|
485
|
+
distance: totalWeight, // Cumulative edge similarity (higher = stronger connection)
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
//# sourceMappingURL=graphology-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphology-bridge.js","sourceRoot":"","sources":["../../../src/lib/graph/graphology-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-relations.d.ts","sourceRoot":"","sources":["../../../src/lib/graph/llm-relations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-relations.d.ts","sourceRoot":"","sources":["../../../src/lib/graph/llm-relations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAmBxE,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,KAAK,CAAC;IAAE,CAAC,EAAE,UAAU,CAAC;IAAC,CAAC,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7D,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAgChF;AAMD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACpE,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAkHhE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAczE"}
|
|
@@ -10,45 +10,9 @@
|
|
|
10
10
|
import { callLLM } from '../llm.js';
|
|
11
11
|
import { LINK_RELATIONS } from '../storage/types.js';
|
|
12
12
|
import { getAllMemoryLinksForExport, getMemoryById, updateMemoryLink, getMemoryLinks, } from '../storage/index.js';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const CLASSIFY_PROMPT_SINGLE = `Given two memories from a knowledge base, determine their relationship.
|
|
17
|
-
|
|
18
|
-
Memory A (type: {typeA}): {contentA}
|
|
19
|
-
|
|
20
|
-
Memory B (type: {typeB}): {contentB}
|
|
21
|
-
|
|
22
|
-
Choose ONE relation from: caused_by, leads_to, contradicts, implements, supersedes, references, related, similar_to
|
|
23
|
-
|
|
24
|
-
Rules:
|
|
25
|
-
- caused_by: A was caused by or resulted from B
|
|
26
|
-
- leads_to: A leads to or enables B
|
|
27
|
-
- contradicts: A and B conflict or disagree
|
|
28
|
-
- implements: A is an implementation/action based on B (a decision)
|
|
29
|
-
- supersedes: A replaces or updates B
|
|
30
|
-
- references: A mentions or cites B
|
|
31
|
-
- related: connected but none of the above fit
|
|
32
|
-
- similar_to: nearly identical content (keep only if truly duplicate-like)
|
|
33
|
-
|
|
34
|
-
Reply with ONLY valid JSON: {"relation": "...", "confidence": 0.0-1.0}`;
|
|
35
|
-
const CLASSIFY_PROMPT_BATCH = `Given pairs of memories from a knowledge base, determine the relationship for each pair.
|
|
36
|
-
|
|
37
|
-
{pairs}
|
|
38
|
-
|
|
39
|
-
For each pair, choose ONE relation from: caused_by, leads_to, contradicts, implements, supersedes, references, related, similar_to
|
|
40
|
-
|
|
41
|
-
Rules:
|
|
42
|
-
- caused_by: A was caused by or resulted from B
|
|
43
|
-
- leads_to: A leads to or enables B
|
|
44
|
-
- contradicts: A and B conflict or disagree
|
|
45
|
-
- implements: A is an implementation/action based on B (a decision)
|
|
46
|
-
- supersedes: A replaces or updates B
|
|
47
|
-
- references: A mentions or cites B
|
|
48
|
-
- related: connected but none of the above fit
|
|
49
|
-
- similar_to: nearly identical content (keep only if truly duplicate-like)
|
|
50
|
-
|
|
51
|
-
Reply with ONLY a valid JSON array: [{"pair": 1, "relation": "...", "confidence": 0.0-1.0}, ...]`;
|
|
13
|
+
import { logWarn } from '../fault-logger.js';
|
|
14
|
+
import { invalidateGraphCache } from './graphology-bridge.js';
|
|
15
|
+
import { CLASSIFY_SYSTEM, CLASSIFY_PROMPT_SINGLE, CLASSIFY_PROMPT_BATCH, } from '../../prompts/index.js';
|
|
52
16
|
/**
|
|
53
17
|
* Classify the relation between two memories using LLM.
|
|
54
18
|
*/
|
|
@@ -58,10 +22,17 @@ export async function classifyRelation(memoryA, memoryB) {
|
|
|
58
22
|
.replace('{typeB}', memoryB.type)
|
|
59
23
|
.replace('{contentB}', memoryB.content.substring(0, 500));
|
|
60
24
|
try {
|
|
61
|
-
const response = await callLLM(prompt, {
|
|
25
|
+
const response = await callLLM(prompt, {
|
|
26
|
+
maxTokens: 100,
|
|
27
|
+
temperature: 0.1,
|
|
28
|
+
systemPrompt: CLASSIFY_SYSTEM,
|
|
29
|
+
});
|
|
62
30
|
return parseClassifyResponse(response);
|
|
63
31
|
}
|
|
64
|
-
catch {
|
|
32
|
+
catch (error) {
|
|
33
|
+
logWarn('llm-relations', 'LLM call failed for single relation classification', {
|
|
34
|
+
error: error instanceof Error ? error.message : String(error),
|
|
35
|
+
});
|
|
65
36
|
return { relation: 'similar_to', confidence: 0 };
|
|
66
37
|
}
|
|
67
38
|
}
|
|
@@ -84,10 +55,14 @@ export async function classifyRelationsBatch(pairs) {
|
|
|
84
55
|
const response = await callLLM(prompt, {
|
|
85
56
|
maxTokens: 50 * pairs.length,
|
|
86
57
|
temperature: 0.1,
|
|
58
|
+
systemPrompt: CLASSIFY_SYSTEM,
|
|
87
59
|
});
|
|
88
60
|
return parseBatchResponse(response, pairs);
|
|
89
61
|
}
|
|
90
|
-
catch {
|
|
62
|
+
catch (error) {
|
|
63
|
+
logWarn('llm-relations', 'LLM call failed for batch relation classification', {
|
|
64
|
+
error: error instanceof Error ? error.message : String(error),
|
|
65
|
+
});
|
|
91
66
|
// Fallback: keep all as similar_to
|
|
92
67
|
return pairs.map((p) => ({
|
|
93
68
|
linkId: p.linkId,
|
|
@@ -134,7 +109,10 @@ export async function enrichExistingLinks(options = {}) {
|
|
|
134
109
|
try {
|
|
135
110
|
return JSON.parse(mem.tags);
|
|
136
111
|
}
|
|
137
|
-
catch {
|
|
112
|
+
catch (error) {
|
|
113
|
+
logWarn('llm-relations', 'Failed to parse memory tags JSON string for relation enrichment', {
|
|
114
|
+
error: error instanceof Error ? error.message : String(error),
|
|
115
|
+
});
|
|
138
116
|
return [];
|
|
139
117
|
}
|
|
140
118
|
})()
|
|
@@ -190,6 +168,11 @@ export async function enrichExistingLinks(options = {}) {
|
|
|
190
168
|
}
|
|
191
169
|
}
|
|
192
170
|
}
|
|
171
|
+
// Invalidate the graph cache once after all link mutations so that subsequent
|
|
172
|
+
// graph algorithm calls (PPR, betweenness, etc.) see the updated relations.
|
|
173
|
+
if (enriched > 0 || failed > 0) {
|
|
174
|
+
invalidateGraphCache();
|
|
175
|
+
}
|
|
193
176
|
return { enriched, failed, skipped };
|
|
194
177
|
}
|
|
195
178
|
/**
|
|
@@ -220,7 +203,10 @@ function parseClassifyResponse(response) {
|
|
|
220
203
|
const confidence = typeof parsed.confidence === 'number' ? Math.max(0, Math.min(1, parsed.confidence)) : 0.5;
|
|
221
204
|
return { relation, confidence };
|
|
222
205
|
}
|
|
223
|
-
catch {
|
|
206
|
+
catch (error) {
|
|
207
|
+
logWarn('llm-relations', 'Failed to parse classify JSON response', {
|
|
208
|
+
error: error instanceof Error ? error.message : String(error),
|
|
209
|
+
});
|
|
224
210
|
return { relation: 'similar_to', confidence: 0 };
|
|
225
211
|
}
|
|
226
212
|
}
|
|
@@ -247,7 +233,10 @@ function parseBatchResponse(response, pairs) {
|
|
|
247
233
|
};
|
|
248
234
|
});
|
|
249
235
|
}
|
|
250
|
-
catch {
|
|
236
|
+
catch (error) {
|
|
237
|
+
logWarn('llm-relations', 'Failed to parse batch classify JSON response', {
|
|
238
|
+
error: error instanceof Error ? error.message : String(error),
|
|
239
|
+
});
|
|
251
240
|
return pairs.map((p) => ({
|
|
252
241
|
linkId: p.linkId,
|
|
253
242
|
relation: 'similar_to',
|