nlm-memory 0.20.0 → 0.21.0
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 +19 -10
- package/dist/cli/digest.js +60 -1
- package/dist/cli/digest.js.map +1 -1
- package/dist/cli/init.d.ts +12 -0
- package/dist/cli/init.js +49 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/nlm.d.ts +13 -1
- package/dist/cli/nlm.js +872 -61
- package/dist/cli/nlm.js.map +1 -1
- package/dist/cli/scope-backfill.d.ts +34 -0
- package/dist/cli/scope-backfill.js +237 -0
- package/dist/cli/scope-backfill.js.map +1 -0
- package/dist/cli/scope-coverage.d.ts +44 -0
- package/dist/cli/scope-coverage.js +205 -0
- package/dist/cli/scope-coverage.js.map +1 -0
- package/dist/core/actions/overlay.d.ts +20 -6
- package/dist/core/actions/overlay.js +32 -18
- package/dist/core/actions/overlay.js.map +1 -1
- package/dist/core/adapters/claude-code.d.ts +14 -0
- package/dist/core/adapters/claude-code.js +36 -0
- package/dist/core/adapters/claude-code.js.map +1 -1
- package/dist/core/classifier/prompt.js +3 -3
- package/dist/core/dataset/build-dataset.js +1 -0
- package/dist/core/dataset/build-dataset.js.map +1 -1
- package/dist/core/digest/compose.d.ts +13 -3
- package/dist/core/digest/compose.js +23 -18
- package/dist/core/digest/compose.js.map +1 -1
- package/dist/core/digest/hook-injection.d.ts +43 -0
- package/dist/core/digest/hook-injection.js +79 -0
- package/dist/core/digest/hook-injection.js.map +1 -0
- package/dist/core/embedding/embed-backfill.d.ts +13 -2
- package/dist/core/embedding/embed-backfill.js +181 -43
- package/dist/core/embedding/embed-backfill.js.map +1 -1
- package/dist/core/embedding/embedding-config.d.ts +17 -0
- package/dist/core/embedding/embedding-config.js +12 -0
- package/dist/core/embedding/embedding-config.js.map +1 -0
- package/dist/core/embedding/pg-embed-backfill.d.ts +31 -0
- package/dist/core/embedding/pg-embed-backfill.js +264 -0
- package/dist/core/embedding/pg-embed-backfill.js.map +1 -0
- package/dist/core/entities/dedup-suggest.d.ts +25 -0
- package/dist/core/entities/dedup-suggest.js +107 -0
- package/dist/core/entities/dedup-suggest.js.map +1 -0
- package/dist/core/eval/classifier-fixture-eval.d.ts +29 -0
- package/dist/core/eval/classifier-fixture-eval.js +217 -0
- package/dist/core/eval/classifier-fixture-eval.js.map +1 -0
- package/dist/core/eval/extraction-scoring.d.ts +63 -0
- package/dist/core/eval/extraction-scoring.js +79 -0
- package/dist/core/eval/extraction-scoring.js.map +1 -0
- package/dist/core/eval/run-eval.d.ts +40 -0
- package/dist/core/eval/run-eval.js +34 -0
- package/dist/core/eval/run-eval.js.map +1 -0
- package/dist/core/exemplars/capture-from-session.d.ts +2 -0
- package/dist/core/exemplars/capture-from-session.js +7 -3
- package/dist/core/exemplars/capture-from-session.js.map +1 -1
- package/dist/core/exemplars/diff-parse.d.ts +23 -0
- package/dist/core/exemplars/diff-parse.js +73 -0
- package/dist/core/exemplars/diff-parse.js.map +1 -0
- package/dist/core/exemplars/embed-backfill.d.ts +36 -0
- package/dist/core/exemplars/embed-backfill.js +85 -0
- package/dist/core/exemplars/embed-backfill.js.map +1 -0
- package/dist/core/exemplars/embed-text.d.ts +15 -0
- package/dist/core/exemplars/embed-text.js +18 -0
- package/dist/core/exemplars/embed-text.js.map +1 -0
- package/dist/core/exemplars/extract-exemplar.d.ts +2 -0
- package/dist/core/exemplars/extract-exemplar.js +9 -66
- package/dist/core/exemplars/extract-exemplar.js.map +1 -1
- package/dist/core/exemplars/ingest-exemplar.d.ts +1 -0
- package/dist/core/exemplars/ingest-exemplar.js +1 -0
- package/dist/core/exemplars/ingest-exemplar.js.map +1 -1
- package/dist/core/exemplars/recall-code.js +4 -0
- package/dist/core/exemplars/recall-code.js.map +1 -1
- package/dist/core/exemplars/warm-embedder.d.ts +14 -0
- package/dist/core/exemplars/warm-embedder.js +18 -0
- package/dist/core/exemplars/warm-embedder.js.map +1 -0
- package/dist/core/health/corpus-state.d.ts +8 -0
- package/dist/core/health/corpus-state.js +11 -0
- package/dist/core/health/corpus-state.js.map +1 -0
- package/dist/core/health/embed-inflight.d.ts +9 -0
- package/dist/core/health/embed-inflight.js +30 -0
- package/dist/core/health/embed-inflight.js.map +1 -0
- package/dist/core/health/embedding-lane-state.d.ts +6 -0
- package/dist/core/health/embedding-lane-state.js +18 -0
- package/dist/core/health/embedding-lane-state.js.map +1 -0
- package/dist/core/health/warmup-state.d.ts +12 -0
- package/dist/core/health/warmup-state.js +12 -0
- package/dist/core/health/warmup-state.js.map +1 -0
- package/dist/core/hook/claude-settings.d.ts +1 -1
- package/dist/core/hook/claude-settings.js +0 -1
- package/dist/core/hook/claude-settings.js.map +1 -1
- package/dist/core/hook/gate.d.ts +13 -6
- package/dist/core/hook/gate.js +47 -6
- package/dist/core/hook/gate.js.map +1 -1
- package/dist/core/hook/hook-log.d.ts +5 -0
- package/dist/core/hook/hook-log.js.map +1 -1
- package/dist/core/hook/memo.d.ts +12 -0
- package/dist/core/hook/memo.js +41 -1
- package/dist/core/hook/memo.js.map +1 -1
- package/dist/core/hook/pointer-block.d.ts +1 -0
- package/dist/core/hook/pointer-block.js +23 -2
- package/dist/core/hook/pointer-block.js.map +1 -1
- package/dist/core/hook/query-extract.d.ts +2 -1
- package/dist/core/hook/query-extract.js +10 -1
- package/dist/core/hook/query-extract.js.map +1 -1
- package/dist/core/hook/resolve-conversation-by-query.d.ts +28 -0
- package/dist/core/hook/resolve-conversation-by-query.js +98 -0
- package/dist/core/hook/resolve-conversation-by-query.js.map +1 -0
- package/dist/core/hook/select.d.ts +8 -0
- package/dist/core/hook/select.js +9 -2
- package/dist/core/hook/select.js.map +1 -1
- package/dist/core/hook/transcript.js +16 -2
- package/dist/core/hook/transcript.js.map +1 -1
- package/dist/core/ingest/backfill-derivables.d.ts +92 -0
- package/dist/core/ingest/backfill-derivables.js +175 -0
- package/dist/core/ingest/backfill-derivables.js.map +1 -0
- package/dist/core/ingest/ingest-session.d.ts +5 -0
- package/dist/core/ingest/ingest-session.js +23 -0
- package/dist/core/ingest/ingest-session.js.map +1 -1
- package/dist/core/ingest/reclassify-oversized.d.ts +5 -0
- package/dist/core/ingest/reclassify-oversized.js +9 -0
- package/dist/core/ingest/reclassify-oversized.js.map +1 -1
- package/dist/core/ingest/reprocess.d.ts +96 -0
- package/dist/core/ingest/reprocess.js +280 -0
- package/dist/core/ingest/reprocess.js.map +1 -0
- package/dist/core/ingest/transcript-derivables.d.ts +27 -0
- package/dist/core/ingest/transcript-derivables.js +138 -0
- package/dist/core/ingest/transcript-derivables.js.map +1 -0
- package/dist/core/integrity/check-invariants.d.ts +6 -1
- package/dist/core/integrity/check-invariants.js +209 -3
- package/dist/core/integrity/check-invariants.js.map +1 -1
- package/dist/core/metrics/corpus-stats.d.ts +49 -0
- package/dist/core/metrics/corpus-stats.js +111 -0
- package/dist/core/metrics/corpus-stats.js.map +1 -0
- package/dist/core/metrics/re-derivation.d.ts +48 -0
- package/dist/core/metrics/re-derivation.js +87 -0
- package/dist/core/metrics/re-derivation.js.map +1 -0
- package/dist/core/outcome/coverage.d.ts +33 -0
- package/dist/core/outcome/coverage.js +46 -0
- package/dist/core/outcome/coverage.js.map +1 -0
- package/dist/core/outcome/rollup.d.ts +33 -0
- package/dist/core/outcome/rollup.js +113 -0
- package/dist/core/outcome/rollup.js.map +1 -0
- package/dist/core/recall/citation-log.d.ts +8 -0
- package/dist/core/recall/citation-log.js +17 -0
- package/dist/core/recall/citation-log.js.map +1 -1
- package/dist/core/recall/hook-recall-log.d.ts +2 -2
- package/dist/core/recall/hook-recall-log.js +2 -2
- package/dist/core/recall/query-intent.d.ts +7 -0
- package/dist/core/recall/query-intent.js +25 -0
- package/dist/core/recall/query-intent.js.map +1 -0
- package/dist/core/recall/query-log.d.ts +4 -0
- package/dist/core/recall/query-log.js +4 -0
- package/dist/core/recall/query-log.js.map +1 -1
- package/dist/core/recall/recall-service.d.ts +37 -1
- package/dist/core/recall/recall-service.js +106 -63
- package/dist/core/recall/recall-service.js.map +1 -1
- package/dist/core/recall/related-exemplars.d.ts +1 -0
- package/dist/core/recall/related-exemplars.js +4 -1
- package/dist/core/recall/related-exemplars.js.map +1 -1
- package/dist/core/recall/related-facts.js +2 -2
- package/dist/core/recall/related-facts.js.map +1 -1
- package/dist/core/recall/reranker.d.ts +2 -1
- package/dist/core/recall/reranker.js +3 -3
- package/dist/core/recall/reranker.js.map +1 -1
- package/dist/core/recall-facts/fact-query-log.d.ts +7 -0
- package/dist/core/recall-facts/fact-query-log.js +2 -0
- package/dist/core/recall-facts/fact-query-log.js.map +1 -1
- package/dist/core/recall-facts/fact-recall-service.d.ts +9 -1
- package/dist/core/recall-facts/fact-recall-service.js +22 -8
- package/dist/core/recall-facts/fact-recall-service.js.map +1 -1
- package/dist/core/scheduler/scan-once.d.ts +6 -6
- package/dist/core/scheduler/scan-once.js +15 -49
- package/dist/core/scheduler/scan-once.js.map +1 -1
- package/dist/core/scheduler/scheduler.d.ts +10 -0
- package/dist/core/scheduler/scheduler.js +109 -13
- package/dist/core/scheduler/scheduler.js.map +1 -1
- package/dist/core/scope/alias-map.d.ts +10 -0
- package/dist/core/scope/alias-map.js +41 -0
- package/dist/core/scope/alias-map.js.map +1 -0
- package/dist/core/scope/derive-scope.d.ts +8 -0
- package/dist/core/scope/derive-scope.js +54 -0
- package/dist/core/scope/derive-scope.js.map +1 -0
- package/dist/core/scope/scope-clause.d.ts +16 -0
- package/dist/core/scope/scope-clause.js +21 -0
- package/dist/core/scope/scope-clause.js.map +1 -0
- package/dist/core/scope/stamp-flag.d.ts +1 -0
- package/dist/core/scope/stamp-flag.js +4 -0
- package/dist/core/scope/stamp-flag.js.map +1 -0
- package/dist/core/signals/code-signal.d.ts +50 -0
- package/dist/core/signals/code-signal.js +54 -0
- package/dist/core/signals/code-signal.js.map +1 -0
- package/dist/core/signals/ingest-signal.d.ts +1 -1
- package/dist/core/signals/ingest-signal.js +3 -1
- package/dist/core/signals/ingest-signal.js.map +1 -1
- package/dist/core/signals/stamp-scope.d.ts +18 -0
- package/dist/core/signals/stamp-scope.js +28 -0
- package/dist/core/signals/stamp-scope.js.map +1 -0
- package/dist/core/storage/db-restore.js +3 -1
- package/dist/core/storage/db-restore.js.map +1 -1
- package/dist/core/storage/fact-batch.d.ts +9 -0
- package/dist/core/storage/fact-batch.js +14 -0
- package/dist/core/storage/fact-batch.js.map +1 -0
- package/dist/core/storage/pg-code-exemplar-store.d.ts +1 -0
- package/dist/core/storage/pg-code-exemplar-store.js +13 -2
- package/dist/core/storage/pg-code-exemplar-store.js.map +1 -1
- package/dist/core/storage/pg-embedding-config.d.ts +29 -0
- package/dist/core/storage/pg-embedding-config.js +53 -0
- package/dist/core/storage/pg-embedding-config.js.map +1 -0
- package/dist/core/storage/pg-entity-store.d.ts +12 -0
- package/dist/core/storage/pg-entity-store.js +79 -0
- package/dist/core/storage/pg-entity-store.js.map +1 -0
- package/dist/core/storage/pg-fact-ingest.d.ts +15 -0
- package/dist/core/storage/pg-fact-ingest.js +34 -0
- package/dist/core/storage/pg-fact-ingest.js.map +1 -0
- package/dist/core/storage/pg-fact-store.d.ts +3 -0
- package/dist/core/storage/pg-fact-store.js +26 -30
- package/dist/core/storage/pg-fact-store.js.map +1 -1
- package/dist/core/storage/pg-migrate.d.ts +18 -0
- package/dist/core/storage/pg-migrate.js +73 -0
- package/dist/core/storage/pg-migrate.js.map +1 -0
- package/dist/core/storage/pg-session-store.d.ts +11 -2
- package/dist/core/storage/pg-session-store.js +224 -96
- package/dist/core/storage/pg-session-store.js.map +1 -1
- package/dist/core/storage/pg-signal-store.js +4 -3
- package/dist/core/storage/pg-signal-store.js.map +1 -1
- package/dist/core/storage/pg-storage.d.ts +9 -7
- package/dist/core/storage/pg-storage.js +20 -50
- package/dist/core/storage/pg-storage.js.map +1 -1
- package/dist/core/storage/pg-workstream-store.d.ts +25 -0
- package/dist/core/storage/pg-workstream-store.js +97 -0
- package/dist/core/storage/pg-workstream-store.js.map +1 -0
- package/dist/core/storage/sqlite-code-exemplar-store.d.ts +1 -0
- package/dist/core/storage/sqlite-code-exemplar-store.js +15 -2
- package/dist/core/storage/sqlite-code-exemplar-store.js.map +1 -1
- package/dist/core/storage/sqlite-embedding-config.d.ts +10 -0
- package/dist/core/storage/sqlite-embedding-config.js +27 -0
- package/dist/core/storage/sqlite-embedding-config.js.map +1 -0
- package/dist/core/storage/sqlite-entity-store.d.ts +13 -0
- package/dist/core/storage/sqlite-entity-store.js +96 -0
- package/dist/core/storage/sqlite-entity-store.js.map +1 -0
- package/dist/core/storage/sqlite-fact-store.d.ts +15 -7
- package/dist/core/storage/sqlite-fact-store.js +81 -27
- package/dist/core/storage/sqlite-fact-store.js.map +1 -1
- package/dist/core/storage/sqlite-outcome-store.d.ts +89 -0
- package/dist/core/storage/sqlite-outcome-store.js +158 -0
- package/dist/core/storage/sqlite-outcome-store.js.map +1 -0
- package/dist/core/storage/sqlite-session-store.d.ts +42 -7
- package/dist/core/storage/sqlite-session-store.js +208 -95
- package/dist/core/storage/sqlite-session-store.js.map +1 -1
- package/dist/core/storage/sqlite-signal-store.js +4 -2
- package/dist/core/storage/sqlite-signal-store.js.map +1 -1
- package/dist/core/storage/sqlite-storage.d.ts +8 -8
- package/dist/core/storage/sqlite-storage.js +21 -32
- package/dist/core/storage/sqlite-storage.js.map +1 -1
- package/dist/core/storage/sqlite-workstream-store.d.ts +25 -0
- package/dist/core/storage/sqlite-workstream-store.js +99 -0
- package/dist/core/storage/sqlite-workstream-store.js.map +1 -0
- package/dist/core/storage/supersedence-log.js +2 -0
- package/dist/core/storage/supersedence-log.js.map +1 -1
- package/dist/core/telemetry/probe-filter.d.ts +35 -0
- package/dist/core/telemetry/probe-filter.js +56 -0
- package/dist/core/telemetry/probe-filter.js.map +1 -0
- package/dist/core/update-check/check.d.ts +6 -0
- package/dist/core/update-check/check.js +35 -0
- package/dist/core/update-check/check.js.map +1 -1
- package/dist/core/work-digest/active-spans.d.ts +8 -0
- package/dist/core/work-digest/active-spans.js +29 -0
- package/dist/core/work-digest/active-spans.js.map +1 -0
- package/dist/core/work-digest/attribute.d.ts +15 -0
- package/dist/core/work-digest/attribute.js +76 -0
- package/dist/core/work-digest/attribute.js.map +1 -0
- package/dist/core/work-digest/build-work-digest.d.ts +12 -0
- package/dist/core/work-digest/build-work-digest.js +69 -0
- package/dist/core/work-digest/build-work-digest.js.map +1 -0
- package/dist/core/work-digest/compose-work-digest.d.ts +3 -0
- package/dist/core/work-digest/compose-work-digest.js +52 -0
- package/dist/core/work-digest/compose-work-digest.js.map +1 -0
- package/dist/core/work-digest/merge-active.d.ts +10 -0
- package/dist/core/work-digest/merge-active.js +22 -0
- package/dist/core/work-digest/merge-active.js.map +1 -0
- package/dist/core/work-digest/read-transcript-timestamps.d.ts +7 -0
- package/dist/core/work-digest/read-transcript-timestamps.js +40 -0
- package/dist/core/work-digest/read-transcript-timestamps.js.map +1 -0
- package/dist/core/work-digest/topics.d.ts +18 -0
- package/dist/core/work-digest/topics.js +26 -0
- package/dist/core/work-digest/topics.js.map +1 -0
- package/dist/core/work-digest/types.d.ts +45 -0
- package/dist/core/work-digest/types.js +2 -0
- package/dist/core/work-digest/types.js.map +1 -0
- package/dist/core/workstream/bind.d.ts +26 -0
- package/dist/core/workstream/bind.js +42 -0
- package/dist/core/workstream/bind.js.map +1 -0
- package/dist/core/workstream/compose-recall.d.ts +2 -0
- package/dist/core/workstream/compose-recall.js +39 -0
- package/dist/core/workstream/compose-recall.js.map +1 -0
- package/dist/core/workstream/merge-suggest.d.ts +19 -0
- package/dist/core/workstream/merge-suggest.js +61 -0
- package/dist/core/workstream/merge-suggest.js.map +1 -0
- package/dist/core/workstream/model.d.ts +21 -0
- package/dist/core/workstream/model.js +9 -0
- package/dist/core/workstream/model.js.map +1 -0
- package/dist/core/workstream/name-match.d.ts +8 -0
- package/dist/core/workstream/name-match.js +18 -0
- package/dist/core/workstream/name-match.js.map +1 -0
- package/dist/core/workstream/resolve.d.ts +10 -0
- package/dist/core/workstream/resolve.js +21 -0
- package/dist/core/workstream/resolve.js.map +1 -0
- package/dist/core/workstream/rollup.d.ts +12 -0
- package/dist/core/workstream/rollup.js +17 -0
- package/dist/core/workstream/rollup.js.map +1 -0
- package/dist/core/workstream/work-topics.d.ts +10 -0
- package/dist/core/workstream/work-topics.js +55 -0
- package/dist/core/workstream/work-topics.js.map +1 -0
- package/dist/hook/hook-helpers.d.ts +4 -0
- package/dist/hook/hook-helpers.js +36 -0
- package/dist/hook/hook-helpers.js.map +1 -0
- package/dist/hook/pre-compact-hook.d.ts +23 -0
- package/dist/hook/pre-compact-hook.js +67 -0
- package/dist/hook/pre-compact-hook.js.map +1 -0
- package/dist/hook/prompt-recall-hook.d.ts +38 -0
- package/dist/hook/prompt-recall-hook.js +124 -20
- package/dist/hook/prompt-recall-hook.js.map +1 -1
- package/dist/hook/recall-gate.d.ts +29 -0
- package/dist/hook/recall-gate.js +50 -0
- package/dist/hook/recall-gate.js.map +1 -0
- package/dist/hook/recall-over-http.d.ts +3 -2
- package/dist/hook/recall-over-http.js +26 -13
- package/dist/hook/recall-over-http.js.map +1 -1
- package/dist/hook/recent-context.d.ts +25 -0
- package/dist/hook/recent-context.js +104 -0
- package/dist/hook/recent-context.js.map +1 -0
- package/dist/hook/score-floor.d.ts +27 -0
- package/dist/hook/score-floor.js +42 -0
- package/dist/hook/score-floor.js.map +1 -0
- package/dist/hook/session-end-hook.js +8 -29
- package/dist/hook/session-end-hook.js.map +1 -1
- package/dist/hook/session-start-hook.js +26 -60
- package/dist/hook/session-start-hook.js.map +1 -1
- package/dist/hook/stop-hook.js +24 -60
- package/dist/hook/stop-hook.js.map +1 -1
- package/dist/http/app.d.ts +6 -0
- package/dist/http/app.js +52 -44
- package/dist/http/app.js.map +1 -1
- package/dist/install/setup.js +2 -0
- package/dist/install/setup.js.map +1 -1
- package/dist/llm/build-classifier.d.ts +22 -0
- package/dist/llm/build-classifier.js +42 -0
- package/dist/llm/build-classifier.js.map +1 -0
- package/dist/llm/build-embedder.d.ts +11 -0
- package/dist/llm/build-embedder.js +42 -0
- package/dist/llm/build-embedder.js.map +1 -0
- package/dist/llm/bundled-embedder-client.d.ts +37 -0
- package/dist/llm/bundled-embedder-client.js +90 -0
- package/dist/llm/bundled-embedder-client.js.map +1 -0
- package/dist/llm/classifier-box.d.ts +13 -5
- package/dist/llm/classifier-box.js +28 -6
- package/dist/llm/classifier-box.js.map +1 -1
- package/dist/llm/classifier-egress.d.ts +18 -0
- package/dist/llm/classifier-egress.js +59 -0
- package/dist/llm/classifier-egress.js.map +1 -0
- package/dist/llm/client-shared.d.ts +4 -0
- package/dist/llm/client-shared.js +39 -0
- package/dist/llm/client-shared.js.map +1 -0
- package/dist/llm/deepseek-client.d.ts +20 -0
- package/dist/llm/deepseek-client.js +59 -45
- package/dist/llm/deepseek-client.js.map +1 -1
- package/dist/llm/embedder-info.d.ts +15 -0
- package/dist/llm/embedder-info.js +27 -0
- package/dist/llm/embedder-info.js.map +1 -0
- package/dist/llm/model-quirks.d.ts +4 -0
- package/dist/llm/model-quirks.js +7 -0
- package/dist/llm/model-quirks.js.map +1 -0
- package/dist/llm/naming.d.ts +5 -0
- package/dist/llm/naming.js +20 -0
- package/dist/llm/naming.js.map +1 -0
- package/dist/llm/ollama-client.d.ts +7 -8
- package/dist/llm/ollama-client.js +59 -51
- package/dist/llm/ollama-client.js.map +1 -1
- package/dist/llm/ollama-code-embedder.d.ts +8 -3
- package/dist/llm/ollama-code-embedder.js +14 -24
- package/dist/llm/ollama-code-embedder.js.map +1 -1
- package/dist/llm/openai-code-embedder-client.d.ts +25 -0
- package/dist/llm/openai-code-embedder-client.js +52 -0
- package/dist/llm/openai-code-embedder-client.js.map +1 -0
- package/dist/llm/openai-embedder-client.d.ts +41 -0
- package/dist/llm/openai-embedder-client.js +83 -0
- package/dist/llm/openai-embedder-client.js.map +1 -0
- package/dist/mcp/server.d.ts +69 -2
- package/dist/mcp/server.js +404 -19
- package/dist/mcp/server.js.map +1 -1
- package/dist/ports/code-embedder.d.ts +6 -1
- package/dist/ports/code-exemplar-store.d.ts +5 -0
- package/dist/ports/entity-store.d.ts +35 -0
- package/dist/ports/entity-store.js +7 -0
- package/dist/ports/entity-store.js.map +1 -0
- package/dist/ports/fact-store.d.ts +0 -0
- package/dist/ports/fact-store.js.map +1 -1
- package/dist/ports/llm-client.d.ts +9 -1
- package/dist/ports/outcome.d.ts +85 -0
- package/dist/ports/outcome.js +11 -0
- package/dist/ports/outcome.js.map +1 -0
- package/dist/ports/session-store.d.ts +12 -6
- package/dist/ports/storage.d.ts +7 -30
- package/dist/ports/storage.js +3 -7
- package/dist/ports/storage.js.map +1 -1
- package/dist/ports/transcript-adapter.d.ts +2 -0
- package/dist/ports/workstream-store.d.ts +22 -0
- package/dist/ports/workstream-store.js +2 -0
- package/dist/ports/workstream-store.js.map +1 -0
- package/dist/shared/net.d.ts +3 -0
- package/dist/shared/net.js +4 -0
- package/dist/shared/net.js.map +1 -0
- package/dist/shared/types.d.ts +56 -2
- package/dist/shared/types.js +4 -1
- package/dist/shared/types.js.map +1 -1
- package/dist/ui/assets/{index-CMpQkbQy.js → index-CSaBtgXD.js} +1 -1
- package/dist/ui/index.html +1 -1
- package/fixtures/classifier-gold/README.md +94 -0
- package/fixtures/classifier-gold/reference.json +318 -0
- package/fixtures/classifier-gold/transcripts/01-bug-fix-null-pointer-api.txt +75 -0
- package/fixtures/classifier-gold/transcripts/02-bug-fix-race-condition-queue.txt +77 -0
- package/fixtures/classifier-gold/transcripts/03-bug-fix-jwt-clock-skew.txt +86 -0
- package/fixtures/classifier-gold/transcripts/04-feature-webhook-retry.txt +95 -0
- package/fixtures/classifier-gold/transcripts/05-feature-csv-export.txt +86 -0
- package/fixtures/classifier-gold/transcripts/06-feature-rate-limiting.txt +61 -0
- package/fixtures/classifier-gold/transcripts/07-refactor-db-abstraction.txt +72 -0
- package/fixtures/classifier-gold/transcripts/08-refactor-config-loading.txt +89 -0
- package/fixtures/classifier-gold/transcripts/09-ops-docker-staging.txt +94 -0
- package/fixtures/classifier-gold/transcripts/10-ops-nginx-ssl.txt +121 -0
- package/fixtures/classifier-gold/transcripts/11-ops-postgres-migration.txt +74 -0
- package/fixtures/classifier-gold/transcripts/12-ops-cron-debugging.txt +73 -0
- package/fixtures/classifier-gold/transcripts/13-research-vector-db-comparison.txt +59 -0
- package/fixtures/classifier-gold/transcripts/14-research-oauth-provider.txt +74 -0
- package/fixtures/classifier-gold/transcripts/15-writing-api-docs.txt +154 -0
- package/fixtures/classifier-gold/transcripts/16-meeting-sprint-planning.txt +69 -0
- package/fixtures/classifier-gold/transcripts/17-trivial-list-files.txt +14 -0
- package/fixtures/classifier-gold/transcripts/18-trivial-version-check.txt +21 -0
- package/fixtures/classifier-gold/transcripts/19-trivial-syntax-help.txt +29 -0
- package/fixtures/classifier-gold/transcripts/20-trivial-read-package-json.txt +41 -0
- package/migrations/000_initial_schema.sql +1 -1
- package/migrations/024_backfill_exemplar_repo_basename.sql +32 -0
- package/migrations/025_workstreams.sql +30 -0
- package/migrations/026_embedding_config.sql +12 -0
- package/migrations/027_drop_legacy_session_embeddings.sql +7 -0
- package/migrations/028_classifier_provenance.sql +5 -0
- package/migrations/029_project_scope.sql +21 -0
- package/migrations/032_session_derivables.sql +11 -0
- package/migrations/pg/001_initial.sql +34 -0
- package/migrations/pg/019_split_replaces.sql +16 -7
- package/migrations/pg/025_workstreams.sql +34 -0
- package/migrations/pg/026_embedding_config.sql +12 -0
- package/migrations/pg/028_classifier_provenance.sql +5 -0
- package/migrations/pg/029_entity_variants.sql +9 -0
- package/migrations/pg/030_project_scope.sql +23 -0
- package/migrations/pg/031_widen_session_edges_kind.sql +11 -0
- package/migrations/pg/032_session_derivables.sql +17 -0
- package/nlm/index.js +405 -39
- package/package.json +12 -2
- package/plugin/.codex-plugin/plugin.json +2 -2
- package/plugin/scripts/prompt-recall-hook.mjs +413 -43
- package/plugin/scripts/session-start-hook.mjs +295 -61
- package/plugin/scripts/stop-hook.mjs +89 -66
- package/plugin-hermes-agent/__init__.py +2 -1
- package/templates/agent-contract/README.md +24 -0
- package/templates/agent-contract/claude-code.md +40 -0
- package/templates/agent-contract/generic.md +38 -0
- package/dist/core/embedding/embed-normalize.d.ts +0 -28
- package/dist/core/embedding/embed-normalize.js +0 -98
- package/dist/core/embedding/embed-normalize.js.map +0 -1
- package/dist/core/storage/pg-tx-context.d.ts +0 -52
- package/dist/core/storage/pg-tx-context.js +0 -149
- package/dist/core/storage/pg-tx-context.js.map +0 -1
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* getHistory (supersedence chain inspection)
|
|
16
16
|
* B.4 — auto-supersedence on (subject, predicate) collision (deferred)
|
|
17
17
|
*/
|
|
18
|
+
import { batchWinners } from "./fact-batch.js";
|
|
18
19
|
export class SqliteFactStore {
|
|
19
20
|
db;
|
|
20
21
|
/**
|
|
@@ -25,6 +26,7 @@ export class SqliteFactStore {
|
|
|
25
26
|
constructor(db) {
|
|
26
27
|
this.db = db;
|
|
27
28
|
}
|
|
29
|
+
cachedInsertStmt;
|
|
28
30
|
async insert(fact) {
|
|
29
31
|
this.insertStmt().run(this.toRow(fact));
|
|
30
32
|
}
|
|
@@ -38,19 +40,10 @@ export class SqliteFactStore {
|
|
|
38
40
|
});
|
|
39
41
|
txn(facts.map((f) => this.toRow(f)));
|
|
40
42
|
}
|
|
41
|
-
/**
|
|
42
|
-
* @internal. Sync row insert for use inside an already-open better-sqlite3
|
|
43
|
-
* transaction. Used only by SqliteSessionStore's inlined ingest blocks
|
|
44
|
-
* (which require sync execution inside the txn callback). External callers
|
|
45
|
-
* use insertMany() or ingestSessionFacts() via Storage.withTransaction.
|
|
46
|
-
*/
|
|
47
|
-
insertRowInTxn(fact) {
|
|
48
|
-
this.insertStmt().run(this.toRow(fact));
|
|
49
|
-
}
|
|
50
43
|
async getById(id) {
|
|
51
44
|
const row = this.db
|
|
52
45
|
.prepare(`SELECT id, kind, subject, predicate, value, source_session_id,
|
|
53
|
-
source_quote, created_at, superseded_by, confidence
|
|
46
|
+
source_quote, created_at, superseded_by, confidence, retired_at
|
|
54
47
|
FROM facts WHERE id = ?`)
|
|
55
48
|
.get(id);
|
|
56
49
|
return row ? this.rowToFact(row) : null;
|
|
@@ -61,7 +54,7 @@ export class SqliteFactStore {
|
|
|
61
54
|
const placeholders = ids.map(() => "?").join(",");
|
|
62
55
|
const rows = this.db
|
|
63
56
|
.prepare(`SELECT id, kind, subject, predicate, value, source_session_id,
|
|
64
|
-
source_quote, created_at, superseded_by, confidence
|
|
57
|
+
source_quote, created_at, superseded_by, confidence, retired_at
|
|
65
58
|
FROM facts WHERE id IN (${placeholders})`)
|
|
66
59
|
.all(...ids);
|
|
67
60
|
return rows.map((r) => this.rowToFact(r));
|
|
@@ -69,7 +62,7 @@ export class SqliteFactStore {
|
|
|
69
62
|
async findCurrent(subject, predicate) {
|
|
70
63
|
const row = this.db
|
|
71
64
|
.prepare(`SELECT id, kind, subject, predicate, value, source_session_id,
|
|
72
|
-
source_quote, created_at, superseded_by, confidence
|
|
65
|
+
source_quote, created_at, superseded_by, confidence, retired_at
|
|
73
66
|
FROM facts
|
|
74
67
|
WHERE subject = ? AND predicate = ? AND superseded_by IS NULL AND retired_at IS NULL
|
|
75
68
|
ORDER BY created_at DESC
|
|
@@ -93,7 +86,7 @@ export class SqliteFactStore {
|
|
|
93
86
|
params.push(limit);
|
|
94
87
|
const rows = this.db
|
|
95
88
|
.prepare(`SELECT id, kind, subject, predicate, value, source_session_id,
|
|
96
|
-
source_quote, created_at, superseded_by, confidence
|
|
89
|
+
source_quote, created_at, superseded_by, confidence, retired_at
|
|
97
90
|
FROM facts
|
|
98
91
|
WHERE ${where.join(" AND ")}
|
|
99
92
|
ORDER BY created_at DESC
|
|
@@ -104,13 +97,25 @@ export class SqliteFactStore {
|
|
|
104
97
|
async listBySession(sessionId) {
|
|
105
98
|
const rows = this.db
|
|
106
99
|
.prepare(`SELECT id, kind, subject, predicate, value, source_session_id,
|
|
107
|
-
source_quote, created_at, superseded_by, confidence
|
|
100
|
+
source_quote, created_at, superseded_by, confidence, retired_at
|
|
108
101
|
FROM facts
|
|
109
102
|
WHERE source_session_id = ?
|
|
110
103
|
ORDER BY created_at ASC`)
|
|
111
104
|
.all(sessionId);
|
|
112
105
|
return rows.map((r) => this.rowToFact(r));
|
|
113
106
|
}
|
|
107
|
+
async listBySessions(sessionIds, opts) {
|
|
108
|
+
if (sessionIds.length === 0)
|
|
109
|
+
return [];
|
|
110
|
+
const ph = sessionIds.map(() => "?").join(",");
|
|
111
|
+
const filter = opts?.includeSuperseded === true ? "" : " AND superseded_by IS NULL AND retired_at IS NULL";
|
|
112
|
+
const rows = this.db
|
|
113
|
+
.prepare(`SELECT id, kind, subject, predicate, value, source_session_id,
|
|
114
|
+
source_quote, created_at, superseded_by, confidence, retired_at
|
|
115
|
+
FROM facts WHERE source_session_id IN (${ph})${filter} ORDER BY created_at ASC`)
|
|
116
|
+
.all(...sessionIds);
|
|
117
|
+
return rows.map((r) => this.rowToFact(r));
|
|
118
|
+
}
|
|
114
119
|
async listForRecall(filter) {
|
|
115
120
|
const where = [];
|
|
116
121
|
const params = [];
|
|
@@ -138,7 +143,7 @@ export class SqliteFactStore {
|
|
|
138
143
|
params.push(limit);
|
|
139
144
|
const sql = `
|
|
140
145
|
SELECT id, kind, subject, predicate, value, source_session_id,
|
|
141
|
-
source_quote, created_at, superseded_by, confidence
|
|
146
|
+
source_quote, created_at, superseded_by, confidence, retired_at
|
|
142
147
|
FROM facts
|
|
143
148
|
${where.length > 0 ? "WHERE " + where.join(" AND ") : ""}
|
|
144
149
|
ORDER BY created_at DESC
|
|
@@ -255,6 +260,12 @@ export class SqliteFactStore {
|
|
|
255
260
|
this.db
|
|
256
261
|
.prepare("UPDATE facts SET superseded_by = ? WHERE id = ?")
|
|
257
262
|
.run(newId, oldId);
|
|
263
|
+
// A superseded fact is recall-ineligible, so its embedding must leave the
|
|
264
|
+
// ANN index (matching retire()'s behavior) — otherwise it consumes
|
|
265
|
+
// k-nearest slots and silently reduces effective recall (NLM #351).
|
|
266
|
+
if (newId !== null) {
|
|
267
|
+
this.db.prepare("DELETE FROM fact_embeddings WHERE fact_id = ?").run(oldId);
|
|
268
|
+
}
|
|
258
269
|
});
|
|
259
270
|
txn();
|
|
260
271
|
}
|
|
@@ -273,34 +284,74 @@ export class SqliteFactStore {
|
|
|
273
284
|
txn();
|
|
274
285
|
}
|
|
275
286
|
async ingestSessionFacts(sessionId, facts) {
|
|
287
|
+
this.ingestSessionFactsInTxn(sessionId, facts);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Sync core of ingestSessionFacts, callable from inside an existing
|
|
291
|
+
* better-sqlite3 transaction. SINGLE SOURCE OF TRUTH for the replace +
|
|
292
|
+
* deterministic-collapse + embedding-cleanup logic. The live ingest path
|
|
293
|
+
* (SqliteSessionStore.insertSession / insertFactsForSession) runs inside its
|
|
294
|
+
* own sync txn and delegates here, so it can no longer drift from this method.
|
|
295
|
+
* NLM #351's embedding-ghost (bug 1) and supersedence-cycle (bug 2) fixes
|
|
296
|
+
* originally landed only here and silently skipped the inlined copies — the
|
|
297
|
+
* path production actually uses — leaving both bugs live in production.
|
|
298
|
+
*/
|
|
299
|
+
ingestSessionFactsInTxn(sessionId, facts, scope = null) {
|
|
300
|
+
// Re-ingesting a session replaces its facts; drop the old facts' embeddings
|
|
301
|
+
// too, or they orphan in the ANN index as ghosts (NLM #351).
|
|
302
|
+
const stale = this.db
|
|
303
|
+
.prepare("SELECT id FROM facts WHERE source_session_id = ?")
|
|
304
|
+
.all(sessionId);
|
|
276
305
|
this.db.prepare("DELETE FROM facts WHERE source_session_id = ?").run(sessionId);
|
|
306
|
+
const delStaleEmb = this.db.prepare("DELETE FROM fact_embeddings WHERE fact_id = ?");
|
|
307
|
+
for (const row of stale)
|
|
308
|
+
delStaleEmb.run(row.id);
|
|
277
309
|
if (facts.length === 0)
|
|
278
310
|
return;
|
|
279
311
|
const insertStmt = this.insertStmt();
|
|
280
312
|
for (const f of facts)
|
|
281
|
-
insertStmt.run(this.toRow(f));
|
|
313
|
+
insertStmt.run(this.toRow(f, scope));
|
|
282
314
|
// Collapse EVERY other active fact for this (subject, predicate) under the
|
|
283
315
|
// new fact, not just the single most-recent prior. A single-prior loop
|
|
284
316
|
// cannot restore the invariant once two priors are already active and
|
|
285
317
|
// leaves the duplicate live forever. See NLM #301.
|
|
318
|
+
const findSupersededStmt = this.db.prepare(`SELECT id FROM facts WHERE subject = ? AND predicate = ? AND superseded_by IS NULL AND id != ?`);
|
|
286
319
|
const markSupersededStmt = this.db.prepare(`UPDATE facts SET superseded_by = ?
|
|
287
320
|
WHERE subject = ? AND predicate = ? AND superseded_by IS NULL AND id != ?`);
|
|
288
|
-
|
|
321
|
+
const delEmbeddingStmt = this.db.prepare("DELETE FROM fact_embeddings WHERE fact_id = ?");
|
|
322
|
+
// Collapse ONCE per (subject, predicate), under a single winner. Running the
|
|
323
|
+
// collapse per-fact creates a supersedence CYCLE when a batch carries two
|
|
324
|
+
// facts for the same (subject, predicate): each supersedes the other, so
|
|
325
|
+
// both end recall-ineligible forever (NLM #351 bug 2). Last fact in the
|
|
326
|
+
// batch for a given (subject, predicate) wins; every other active fact —
|
|
327
|
+
// batch duplicates and prior facts alike — collapses under it.
|
|
328
|
+
for (const f of batchWinners(facts)) {
|
|
329
|
+
// Capture which facts this collapse supersedes BEFORE the update, then
|
|
330
|
+
// drop their embeddings — a superseded fact must not linger in the ANN
|
|
331
|
+
// index (NLM #351). Same reason markSuperseded/retire delete embeddings.
|
|
332
|
+
const collapsed = findSupersededStmt.all(f.subject, f.predicate, f.id);
|
|
289
333
|
markSupersededStmt.run(f.id, f.subject, f.predicate, f.id);
|
|
334
|
+
for (const row of collapsed)
|
|
335
|
+
delEmbeddingStmt.run(row.id);
|
|
290
336
|
}
|
|
291
337
|
}
|
|
292
338
|
insertStmt() {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
339
|
+
if (!this.cachedInsertStmt) {
|
|
340
|
+
this.cachedInsertStmt = this.db.prepare(`
|
|
341
|
+
INSERT INTO facts (
|
|
342
|
+
id, kind, subject, predicate, value, source_session_id,
|
|
343
|
+
source_quote, created_at, superseded_by, confidence, retired_at,
|
|
344
|
+
scope
|
|
345
|
+
) VALUES (
|
|
346
|
+
@id, @kind, @subject, @predicate, @value, @source_session_id,
|
|
347
|
+
@source_quote, @created_at, @superseded_by, @confidence, @retired_at,
|
|
348
|
+
@scope
|
|
349
|
+
)
|
|
350
|
+
`);
|
|
351
|
+
}
|
|
352
|
+
return this.cachedInsertStmt;
|
|
302
353
|
}
|
|
303
|
-
toRow(fact) {
|
|
354
|
+
toRow(fact, scope = null) {
|
|
304
355
|
return {
|
|
305
356
|
id: fact.id,
|
|
306
357
|
kind: fact.kind,
|
|
@@ -312,6 +363,8 @@ export class SqliteFactStore {
|
|
|
312
363
|
created_at: fact.createdAt,
|
|
313
364
|
superseded_by: fact.supersededBy,
|
|
314
365
|
confidence: fact.confidence,
|
|
366
|
+
retired_at: fact.retiredAt ?? null,
|
|
367
|
+
scope,
|
|
315
368
|
};
|
|
316
369
|
}
|
|
317
370
|
rowToFact(row) {
|
|
@@ -326,6 +379,7 @@ export class SqliteFactStore {
|
|
|
326
379
|
createdAt: row.created_at,
|
|
327
380
|
supersededBy: row.superseded_by,
|
|
328
381
|
confidence: row.confidence,
|
|
382
|
+
retiredAt: row.retired_at ?? null,
|
|
329
383
|
};
|
|
330
384
|
}
|
|
331
385
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-fact-store.js","sourceRoot":"","sources":["../../../src/core/storage/sqlite-fact-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sqlite-fact-store.js","sourceRoot":"","sources":["../../../src/core/storage/sqlite-fact-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite adapters for the outcome rollup ports (`@ports/outcome.js`,
|
|
3
|
+
* `@core/outcome/rollup.js`) — #352 phase 2 Task 8. No Postgres adapters yet;
|
|
4
|
+
* `get_session` and `nlm digest` both run against the operator's SQLite
|
|
5
|
+
* deployment, so parity is deferred until a Postgres-backed caller exists.
|
|
6
|
+
*
|
|
7
|
+
* Never selects `sessions.body` — see the incident class noted on
|
|
8
|
+
* `SqliteSessionStore.getByIds` (48KB/row of session markdown the recall
|
|
9
|
+
* daemon does not need for this read shape).
|
|
10
|
+
*
|
|
11
|
+
* Two entry points:
|
|
12
|
+
* - `buildSqliteOutcomeDeps` — per-session `OutcomeDeps` for `get_session`.
|
|
13
|
+
* Fine to re-query per call; a single session's evidence is a handful of
|
|
14
|
+
* indexed lookups.
|
|
15
|
+
* - `loadOutcomeCoverageInput` — one query per evidence type across an
|
|
16
|
+
* entire id set, for the digest's Tier-B coverage block. Feeds
|
|
17
|
+
* `@core/outcome/coverage.js`'s `computeOutcomeCoverage`, not `deriveOutcome`
|
|
18
|
+
* directly.
|
|
19
|
+
*
|
|
20
|
+
* `reDerivationPairs` is always `[]` here — measured on the real corpus copy
|
|
21
|
+
* (~4.6k sessions/42d window), `computeReDerivationRate`
|
|
22
|
+
* (`@core/metrics/re-derivation.js`) costs ~7s: an N+1 query per session for
|
|
23
|
+
* entities/decisions, then an O(n^2) pairwise jaccard scan. That blows the
|
|
24
|
+
* ~2s digest budget and would add multi-second latency to every `get_session`
|
|
25
|
+
* call. Re-derivation is also the rollup's lowest-precedence, rarest bucket
|
|
26
|
+
* (9 pairs across the whole corpus at the 42-day window in the same
|
|
27
|
+
* measurement) — sessions that would have landed there fall back to
|
|
28
|
+
* `unobserved`, which stays honest rather than silently wrong. Follow-up:
|
|
29
|
+
* either make `computeReDerivationRate` scale (batch its per-session reads,
|
|
30
|
+
* bucket by shared entity instead of an O(n^2) scan) or have the existing
|
|
31
|
+
* 24h corpus-monitor cron persist its pairs (not just the summary rate it
|
|
32
|
+
* writes today) for these adapters to read instead of recomputing inline.
|
|
33
|
+
*/
|
|
34
|
+
import type Database from "better-sqlite3";
|
|
35
|
+
import type { ReDerivationPair } from "../metrics/re-derivation.js";
|
|
36
|
+
import type { OutcomeCitation, OutcomeCitationReader, OutcomeDeps, OutcomeEdge, OutcomeEdgeReader, OutcomeSession, OutcomeSessionReader, OutcomeSignal, OutcomeSignalReader } from "../../ports/outcome.js";
|
|
37
|
+
export declare class SqliteOutcomeSessionReader implements OutcomeSessionReader {
|
|
38
|
+
private readonly db;
|
|
39
|
+
constructor(db: Database.Database);
|
|
40
|
+
getById(sessionId: string): Promise<OutcomeSession | null>;
|
|
41
|
+
}
|
|
42
|
+
export declare class SqliteOutcomeSignalReader implements OutcomeSignalReader {
|
|
43
|
+
private readonly db;
|
|
44
|
+
constructor(db: Database.Database);
|
|
45
|
+
listForSession(sessionId: string): Promise<ReadonlyArray<OutcomeSignal>>;
|
|
46
|
+
}
|
|
47
|
+
export declare class SqliteOutcomeEdgeReader implements OutcomeEdgeReader {
|
|
48
|
+
private readonly db;
|
|
49
|
+
constructor(db: Database.Database);
|
|
50
|
+
listForSession(sessionId: string): Promise<ReadonlyArray<OutcomeEdge>>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Citations live in the append-only JSONL log (`@core/recall/citation-log.js`),
|
|
54
|
+
* not SQLite — `cite_session` calls are telemetry, not a table. `readCitationLog`
|
|
55
|
+
* takes a required day-window; passing `Infinity` reads the whole log since
|
|
56
|
+
* rollup evidence has no expiry.
|
|
57
|
+
*/
|
|
58
|
+
export declare class SqliteOutcomeCitationReader implements OutcomeCitationReader {
|
|
59
|
+
private readonly logPath?;
|
|
60
|
+
constructor(logPath?: string | undefined);
|
|
61
|
+
listForSession(sessionId: string): Promise<ReadonlyArray<OutcomeCitation>>;
|
|
62
|
+
}
|
|
63
|
+
export interface BuildSqliteOutcomeDepsOptions {
|
|
64
|
+
readonly citationLogPath?: string;
|
|
65
|
+
readonly now?: () => Date;
|
|
66
|
+
readonly heldAfterDays?: number;
|
|
67
|
+
}
|
|
68
|
+
/** Per-session OutcomeDeps for `get_session`. Safe to build fresh per call. */
|
|
69
|
+
export declare function buildSqliteOutcomeDeps(db: Database.Database, opts?: BuildSqliteOutcomeDepsOptions): Promise<OutcomeDeps>;
|
|
70
|
+
export interface OutcomeCoverageInput {
|
|
71
|
+
readonly sessions: ReadonlyArray<OutcomeSession>;
|
|
72
|
+
readonly signalsBySession: ReadonlyMap<string, ReadonlyArray<OutcomeSignal>>;
|
|
73
|
+
readonly edgesBySession: ReadonlyMap<string, ReadonlyArray<OutcomeEdge>>;
|
|
74
|
+
readonly citationsBySession: ReadonlyMap<string, ReadonlyArray<OutcomeCitation>>;
|
|
75
|
+
/** Always `[]` from `loadOutcomeCoverageInput` — see the module doc comment. */
|
|
76
|
+
readonly reDerivationPairs: ReadonlyArray<ReDerivationPair>;
|
|
77
|
+
}
|
|
78
|
+
export interface LoadOutcomeCoverageInputOptions {
|
|
79
|
+
/** ISO timestamp — only sessions with `ended_at >= sinceIso` are included. */
|
|
80
|
+
readonly sinceIso: string;
|
|
81
|
+
readonly citationLogPath?: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Batched loader for the digest's Tier-B coverage block: one query per
|
|
85
|
+
* evidence type across the whole ended-in-window id set, not one query per
|
|
86
|
+
* session. `computeOutcomeCoverage` (`@core/outcome/coverage.js`) turns this
|
|
87
|
+
* into per-session verdicts via `deriveOutcome`.
|
|
88
|
+
*/
|
|
89
|
+
export declare function loadOutcomeCoverageInput(db: Database.Database, opts: LoadOutcomeCoverageInputOptions): Promise<OutcomeCoverageInput>;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite adapters for the outcome rollup ports (`@ports/outcome.js`,
|
|
3
|
+
* `@core/outcome/rollup.js`) — #352 phase 2 Task 8. No Postgres adapters yet;
|
|
4
|
+
* `get_session` and `nlm digest` both run against the operator's SQLite
|
|
5
|
+
* deployment, so parity is deferred until a Postgres-backed caller exists.
|
|
6
|
+
*
|
|
7
|
+
* Never selects `sessions.body` — see the incident class noted on
|
|
8
|
+
* `SqliteSessionStore.getByIds` (48KB/row of session markdown the recall
|
|
9
|
+
* daemon does not need for this read shape).
|
|
10
|
+
*
|
|
11
|
+
* Two entry points:
|
|
12
|
+
* - `buildSqliteOutcomeDeps` — per-session `OutcomeDeps` for `get_session`.
|
|
13
|
+
* Fine to re-query per call; a single session's evidence is a handful of
|
|
14
|
+
* indexed lookups.
|
|
15
|
+
* - `loadOutcomeCoverageInput` — one query per evidence type across an
|
|
16
|
+
* entire id set, for the digest's Tier-B coverage block. Feeds
|
|
17
|
+
* `@core/outcome/coverage.js`'s `computeOutcomeCoverage`, not `deriveOutcome`
|
|
18
|
+
* directly.
|
|
19
|
+
*
|
|
20
|
+
* `reDerivationPairs` is always `[]` here — measured on the real corpus copy
|
|
21
|
+
* (~4.6k sessions/42d window), `computeReDerivationRate`
|
|
22
|
+
* (`@core/metrics/re-derivation.js`) costs ~7s: an N+1 query per session for
|
|
23
|
+
* entities/decisions, then an O(n^2) pairwise jaccard scan. That blows the
|
|
24
|
+
* ~2s digest budget and would add multi-second latency to every `get_session`
|
|
25
|
+
* call. Re-derivation is also the rollup's lowest-precedence, rarest bucket
|
|
26
|
+
* (9 pairs across the whole corpus at the 42-day window in the same
|
|
27
|
+
* measurement) — sessions that would have landed there fall back to
|
|
28
|
+
* `unobserved`, which stays honest rather than silently wrong. Follow-up:
|
|
29
|
+
* either make `computeReDerivationRate` scale (batch its per-session reads,
|
|
30
|
+
* bucket by shared entity instead of an O(n^2) scan) or have the existing
|
|
31
|
+
* 24h corpus-monitor cron persist its pairs (not just the summary rate it
|
|
32
|
+
* writes today) for these adapters to read instead of recomputing inline.
|
|
33
|
+
*/
|
|
34
|
+
import { readCitationLog } from "../recall/citation-log.js";
|
|
35
|
+
const RELEVANT_EDGE_KINDS = "('supersedes','replaces','continues')";
|
|
36
|
+
export class SqliteOutcomeSessionReader {
|
|
37
|
+
db;
|
|
38
|
+
constructor(db) {
|
|
39
|
+
this.db = db;
|
|
40
|
+
}
|
|
41
|
+
async getById(sessionId) {
|
|
42
|
+
const row = this.db
|
|
43
|
+
.prepare("SELECT id, ended_at, status FROM sessions WHERE id = ?")
|
|
44
|
+
.get(sessionId);
|
|
45
|
+
if (!row)
|
|
46
|
+
return null;
|
|
47
|
+
return { id: row.id, endedAt: row.ended_at, status: row.status };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class SqliteOutcomeSignalReader {
|
|
51
|
+
db;
|
|
52
|
+
constructor(db) {
|
|
53
|
+
this.db = db;
|
|
54
|
+
}
|
|
55
|
+
async listForSession(sessionId) {
|
|
56
|
+
return this.db
|
|
57
|
+
.prepare("SELECT id, outcome FROM signals WHERE session_id = ?")
|
|
58
|
+
.all(sessionId);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export class SqliteOutcomeEdgeReader {
|
|
62
|
+
db;
|
|
63
|
+
constructor(db) {
|
|
64
|
+
this.db = db;
|
|
65
|
+
}
|
|
66
|
+
async listForSession(sessionId) {
|
|
67
|
+
const rows = this.db
|
|
68
|
+
.prepare(`SELECT from_session, to_session, kind FROM session_edges
|
|
69
|
+
WHERE to_session = ? AND kind IN ${RELEVANT_EDGE_KINDS}`)
|
|
70
|
+
.all(sessionId);
|
|
71
|
+
return rows.map((r) => ({ fromSession: r.from_session, toSession: r.to_session, kind: r.kind }));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Citations live in the append-only JSONL log (`@core/recall/citation-log.js`),
|
|
76
|
+
* not SQLite — `cite_session` calls are telemetry, not a table. `readCitationLog`
|
|
77
|
+
* takes a required day-window; passing `Infinity` reads the whole log since
|
|
78
|
+
* rollup evidence has no expiry.
|
|
79
|
+
*/
|
|
80
|
+
export class SqliteOutcomeCitationReader {
|
|
81
|
+
logPath;
|
|
82
|
+
constructor(logPath) {
|
|
83
|
+
this.logPath = logPath;
|
|
84
|
+
}
|
|
85
|
+
async listForSession(sessionId) {
|
|
86
|
+
const entries = this.logPath !== undefined
|
|
87
|
+
? await readCitationLog(Number.POSITIVE_INFINITY, this.logPath)
|
|
88
|
+
: await readCitationLog(Number.POSITIVE_INFINITY);
|
|
89
|
+
return entries.filter((e) => e.citedId === sessionId).map((e) => ({ conversationId: e.conversationId }));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Per-session OutcomeDeps for `get_session`. Safe to build fresh per call. */
|
|
93
|
+
export async function buildSqliteOutcomeDeps(db, opts = {}) {
|
|
94
|
+
return {
|
|
95
|
+
sessions: new SqliteOutcomeSessionReader(db),
|
|
96
|
+
signals: new SqliteOutcomeSignalReader(db),
|
|
97
|
+
edges: new SqliteOutcomeEdgeReader(db),
|
|
98
|
+
citations: new SqliteOutcomeCitationReader(opts.citationLogPath),
|
|
99
|
+
reDerivationPairs: [],
|
|
100
|
+
...(opts.now ? { now: opts.now } : {}),
|
|
101
|
+
...(opts.heldAfterDays !== undefined ? { heldAfterDays: opts.heldAfterDays } : {}),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Batched loader for the digest's Tier-B coverage block: one query per
|
|
106
|
+
* evidence type across the whole ended-in-window id set, not one query per
|
|
107
|
+
* session. `computeOutcomeCoverage` (`@core/outcome/coverage.js`) turns this
|
|
108
|
+
* into per-session verdicts via `deriveOutcome`.
|
|
109
|
+
*/
|
|
110
|
+
export async function loadOutcomeCoverageInput(db, opts) {
|
|
111
|
+
const sessionRows = db
|
|
112
|
+
.prepare(`SELECT id, ended_at, status FROM sessions
|
|
113
|
+
WHERE ended_at IS NOT NULL AND ended_at >= ?
|
|
114
|
+
ORDER BY ended_at DESC`)
|
|
115
|
+
.all(opts.sinceIso);
|
|
116
|
+
const sessions = sessionRows.map((r) => ({
|
|
117
|
+
id: r.id,
|
|
118
|
+
endedAt: r.ended_at,
|
|
119
|
+
status: r.status,
|
|
120
|
+
}));
|
|
121
|
+
const signalsBySession = new Map();
|
|
122
|
+
const edgesBySession = new Map();
|
|
123
|
+
const citationsBySession = new Map();
|
|
124
|
+
if (sessions.length > 0) {
|
|
125
|
+
const ids = sessions.map((s) => s.id);
|
|
126
|
+
const placeholders = ids.map(() => "?").join(",");
|
|
127
|
+
const signalRows = db
|
|
128
|
+
.prepare(`SELECT session_id, id, outcome FROM signals WHERE session_id IN (${placeholders})`)
|
|
129
|
+
.all(...ids);
|
|
130
|
+
for (const r of signalRows) {
|
|
131
|
+
const list = signalsBySession.get(r.session_id) ?? [];
|
|
132
|
+
list.push({ id: r.id, outcome: r.outcome });
|
|
133
|
+
signalsBySession.set(r.session_id, list);
|
|
134
|
+
}
|
|
135
|
+
const edgeRows = db
|
|
136
|
+
.prepare(`SELECT from_session, to_session, kind FROM session_edges
|
|
137
|
+
WHERE to_session IN (${placeholders}) AND kind IN ${RELEVANT_EDGE_KINDS}`)
|
|
138
|
+
.all(...ids);
|
|
139
|
+
for (const r of edgeRows) {
|
|
140
|
+
const list = edgesBySession.get(r.to_session) ?? [];
|
|
141
|
+
list.push({ fromSession: r.from_session, toSession: r.to_session, kind: r.kind });
|
|
142
|
+
edgesBySession.set(r.to_session, list);
|
|
143
|
+
}
|
|
144
|
+
const idSet = new Set(ids);
|
|
145
|
+
const citationEntries = opts.citationLogPath !== undefined
|
|
146
|
+
? await readCitationLog(Number.POSITIVE_INFINITY, opts.citationLogPath)
|
|
147
|
+
: await readCitationLog(Number.POSITIVE_INFINITY);
|
|
148
|
+
for (const entry of citationEntries) {
|
|
149
|
+
if (!idSet.has(entry.citedId))
|
|
150
|
+
continue;
|
|
151
|
+
const list = citationsBySession.get(entry.citedId) ?? [];
|
|
152
|
+
list.push({ conversationId: entry.conversationId });
|
|
153
|
+
citationsBySession.set(entry.citedId, list);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return { sessions, signalsBySession, edgesBySession, citationsBySession, reDerivationPairs: [] };
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=sqlite-outcome-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-outcome-store.js","sourceRoot":"","sources":["../../../src/core/storage/sqlite-outcome-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
* of core depends on the SessionStore *port*, never on this file.
|
|
8
8
|
*
|
|
9
9
|
* Schema parity with the Python daemon: sessions row + session_entities +
|
|
10
|
-
* markers +
|
|
11
|
-
* transcript mtime) is deferred to a later phase
|
|
12
|
-
* status verbatim.
|
|
10
|
+
* markers + session_embedding_chunks (vec0). Idle-status overlay (computed
|
|
11
|
+
* from transcript mtime) is deferred to a later phase; A.2 returns the
|
|
12
|
+
* persisted status verbatim.
|
|
13
13
|
*/
|
|
14
14
|
import Database from "better-sqlite3";
|
|
15
|
-
import type { KeywordNeighbor, SearchOptions, SemanticNeighbor,
|
|
15
|
+
import type { KeywordNeighbor, SearchOptions, SemanticNeighbor, SessionStore } from "../../ports/session-store.js";
|
|
16
16
|
import type { Session, SessionStatus, SessionEdgeKind } from "../../shared/types.js";
|
|
17
17
|
import type { Fact } from "../../shared/types.js";
|
|
18
18
|
import type { SqliteFactStore } from "./sqlite-fact-store.js";
|
|
@@ -40,6 +40,31 @@ export interface IngestRecord {
|
|
|
40
40
|
readonly entities: ReadonlyArray<string>;
|
|
41
41
|
readonly decisions: ReadonlyArray<string>;
|
|
42
42
|
readonly openQuestions: ReadonlyArray<string>;
|
|
43
|
+
readonly classifier?: {
|
|
44
|
+
readonly provider: string;
|
|
45
|
+
readonly model: string;
|
|
46
|
+
readonly confidence: number;
|
|
47
|
+
};
|
|
48
|
+
readonly scope: string | null;
|
|
49
|
+
/**
|
|
50
|
+
* Subagent persona slug / "orchestrator" / runtime name, or the runtime
|
|
51
|
+
* name for non-claude-code runtimes. Optional: callers with no chunk to
|
|
52
|
+
* derive from (reprocess, reclassify-oversized) omit it and COALESCE in
|
|
53
|
+
* the upsert preserves whatever a prior classify-time stamp wrote.
|
|
54
|
+
*/
|
|
55
|
+
readonly agentPersona?: string | null;
|
|
56
|
+
/** RUNTIME parent session id (join key against runtime_session_id). Same omit/COALESCE contract as agentPersona. */
|
|
57
|
+
readonly parentSessionId?: string | null;
|
|
58
|
+
/**
|
|
59
|
+
* Majority model across assistant messages in the transcript (claude-code
|
|
60
|
+
* jsonl only, v1), from scanTranscriptDerivables. NULL when not derivable.
|
|
61
|
+
* Same omit/COALESCE contract as agentPersona.
|
|
62
|
+
*/
|
|
63
|
+
readonly primaryModel?: string | null;
|
|
64
|
+
/** Sum of input_tokens + output_tokens across assistant messages. Same omit/COALESCE contract as agentPersona. */
|
|
65
|
+
readonly totalTokens?: number | null;
|
|
66
|
+
/** Slug of the first Skill-tool invocation in the transcript, or null. Same omit/COALESCE contract as agentPersona. */
|
|
67
|
+
readonly skill?: string | null;
|
|
43
68
|
}
|
|
44
69
|
/**
|
|
45
70
|
* Supersedence target for insertSession. `kind` selects the relation:
|
|
@@ -87,6 +112,8 @@ export interface BackfillCandidate {
|
|
|
87
112
|
}
|
|
88
113
|
export declare class SqliteSessionStore implements SessionStore {
|
|
89
114
|
private readonly db;
|
|
115
|
+
private overlayCache;
|
|
116
|
+
private overlayCacheAt;
|
|
90
117
|
/**
|
|
91
118
|
* @internal. Construct via SqliteStorage.create(...) instead. Direct
|
|
92
119
|
* construction is preserved for the SqliteStorage adapter only; all
|
|
@@ -104,6 +131,8 @@ export declare class SqliteSessionStore implements SessionStore {
|
|
|
104
131
|
/** Raw db handle for ingest helpers (Scheduler, scanOnce). Avoid using
|
|
105
132
|
* directly from the recall path — it bypasses the SessionStore port. */
|
|
106
133
|
rawDb(): Database.Database;
|
|
134
|
+
invalidateOverlayCache(): void;
|
|
135
|
+
private overlay;
|
|
107
136
|
/** Recently-written sessions ordered by created_at desc. Powers /live Writes column. */
|
|
108
137
|
recentWrites(limit: number): RecentWrite[];
|
|
109
138
|
/** Recently-extracted markers ordered by session created_at desc. Powers /live Decisions column. */
|
|
@@ -112,8 +141,9 @@ export declare class SqliteSessionStore implements SessionStore {
|
|
|
112
141
|
* Atomic ingest: writes the session row, markers, entity rows + links,
|
|
113
142
|
* supersedes edge (if any), and the embedding (best-effort) in one
|
|
114
143
|
* transaction. Idempotent on re-ingest — ON CONFLICT updates the session
|
|
115
|
-
* in place; markers are deleted and rewritten; entity links
|
|
116
|
-
*
|
|
144
|
+
* in place; markers are deleted and rewritten; entity links are replaced
|
|
145
|
+
* (DELETE + re-insert, session_count recomputed exactly); embedding row is
|
|
146
|
+
* DELETE+INSERT (vec0 doesn't UPDATE).
|
|
117
147
|
*
|
|
118
148
|
* Mirrors Python's SQLiteStore.insert_session. Markdown projection is not
|
|
119
149
|
* yet ported and skipped here.
|
|
@@ -149,7 +179,6 @@ export declare class SqliteSessionStore implements SessionStore {
|
|
|
149
179
|
* failures don't abort the batch, and never affect committed fact rows.
|
|
150
180
|
*/
|
|
151
181
|
private embedFacts;
|
|
152
|
-
list(filter?: SessionFilter): Promise<ReadonlyArray<Session>>;
|
|
153
182
|
getById(sessionId: string): Promise<Session | null>;
|
|
154
183
|
/**
|
|
155
184
|
* Batched session fetch for the recall path. Deliberately omits the
|
|
@@ -158,6 +187,7 @@ export declare class SqliteSessionStore implements SessionStore {
|
|
|
158
187
|
* daemon. Resolved sessions carry `body: ""`.
|
|
159
188
|
*/
|
|
160
189
|
getByIds(ids: ReadonlyArray<string>): Promise<ReadonlyArray<Session>>;
|
|
190
|
+
listByDateRange(fromIso: string, toIso: string): Promise<ReadonlyArray<Session>>;
|
|
161
191
|
semanticSearch(queryVector: Float32Array, limit: number, opts?: SearchOptions): Promise<ReadonlyArray<SemanticNeighbor>>;
|
|
162
192
|
/**
|
|
163
193
|
* Lexical recall via the sessions_fts FTS5 index. BM25 column weights
|
|
@@ -170,6 +200,11 @@ export declare class SqliteSessionStore implements SessionStore {
|
|
|
170
200
|
resolveSuccessors(ids: ReadonlyArray<string>): Promise<Map<string, string>>;
|
|
171
201
|
updateStatus(sessionId: string, status: SessionStatus): Promise<void>;
|
|
172
202
|
markSuperseded(predecessorId: string, successorId: string): Promise<void>;
|
|
203
|
+
getSessionScopeById(id: string): Promise<string | null>;
|
|
204
|
+
setWorkstreamBinding(sessionId: string, workstreamId: string | null, source: import("../workstream/model.js").BindingSource | null, confidence: number | null): Promise<void>;
|
|
205
|
+
listSessionIdsByWorkstreams(workstreamIds: ReadonlyArray<string>): Promise<ReadonlyArray<string>>;
|
|
206
|
+
getEntities(sessionId: string): Promise<ReadonlyArray<string>>;
|
|
207
|
+
getWorkstreamIds(sessionIds: ReadonlyArray<string>): Promise<Map<string, string | null>>;
|
|
173
208
|
/** @internal test-only helper; production callers use insertSession(). */
|
|
174
209
|
insertSessionForTest(session: Session): void;
|
|
175
210
|
insertEdgeForTest(fromSession: string, toSession: string, kind?: "supersedes" | "continues"): void;
|