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
|
@@ -13,9 +13,29 @@
|
|
|
13
13
|
* 'replaces' edges (BFS, depth-capped at 100)
|
|
14
14
|
* I4 every session_edges endpoint exists in sessions
|
|
15
15
|
* I5 at most one active fact per (subject, predicate); every superseded_by
|
|
16
|
-
* references an existing facts.id
|
|
16
|
+
* references an existing facts.id; superseded_by forms no cycle (I5c)
|
|
17
17
|
* I6 every non-null adapter_state.session_id references a sessions.id
|
|
18
|
+
* I7 every fact_embeddings row has a live (active, non-retired) parent fact
|
|
19
|
+
* I7b chunk-level ghost: every session_embedding_chunks row has a map entry
|
|
20
|
+
* (I7b-1); every session_chunk_map row references an existing session
|
|
21
|
+
* (I7b-2)
|
|
18
22
|
*/
|
|
23
|
+
// Multi-valued predicates legitimately hold parallel active facts (e.g.
|
|
24
|
+
// nlm-memory|stack = TypeScript AND SQLite, both simultaneously true).
|
|
25
|
+
// Force-superseding one copy would destroy a true fact, which is the
|
|
26
|
+
// #351-bug-3 trap. I5a skips subject|predicate groups whose predicate is
|
|
27
|
+
// in this set and instead reports them as an informational count under
|
|
28
|
+
// the id "I5a-mv". Entries MUST be members of PREDICATE_VOCABULARY
|
|
29
|
+
// (src/core/classifier/prompt.ts): predicates are coerced to that closed
|
|
30
|
+
// vocab before facts are written, so any other token here is inert. Add
|
|
31
|
+
// predicates only when parallelism is a domain invariant, not when the
|
|
32
|
+
// classifier merely failed to supersede (#358).
|
|
33
|
+
const MULTI_VALUED_PREDICATES = new Set([
|
|
34
|
+
"stack",
|
|
35
|
+
"integration",
|
|
36
|
+
"dependency",
|
|
37
|
+
]);
|
|
38
|
+
const MV_IN = [...MULTI_VALUED_PREDICATES].map((p) => `'${p}'`).join(", ");
|
|
19
39
|
// ─── SQL strings (portable) ──────────────────────────────────────────────────
|
|
20
40
|
const SQL_I1 = `
|
|
21
41
|
SELECT from_session AS bad_id
|
|
@@ -58,10 +78,23 @@ const SQL_I4_MISSING_TO = `
|
|
|
58
78
|
// One row per conflicting (subject, predicate) group — the count is the number
|
|
59
79
|
// of conflicts to resolve, not the number of facts involved. MIN(id) keeps the
|
|
60
80
|
// projection aggregate-only so PostgreSQL's GROUP BY strictness accepts it.
|
|
81
|
+
// Multi-valued predicates are excluded here; they are counted by SQL_I5A_MULTI_VALUED.
|
|
61
82
|
const SQL_I5_DUPLICATE_FACTS = `
|
|
62
83
|
SELECT MIN(id) AS bad_id
|
|
63
84
|
FROM facts
|
|
64
|
-
WHERE superseded_by IS NULL
|
|
85
|
+
WHERE superseded_by IS NULL AND retired_at IS NULL
|
|
86
|
+
AND predicate NOT IN (${MV_IN})
|
|
87
|
+
GROUP BY subject, predicate
|
|
88
|
+
HAVING COUNT(*) > 1
|
|
89
|
+
LIMIT 6
|
|
90
|
+
`;
|
|
91
|
+
// One row per (subject, predicate) group in the multi-valued exemption set that
|
|
92
|
+
// holds more than one active fact. Count drives the informational I5a-mv report.
|
|
93
|
+
const SQL_I5A_MULTI_VALUED = `
|
|
94
|
+
SELECT MIN(id) AS bad_id
|
|
95
|
+
FROM facts
|
|
96
|
+
WHERE superseded_by IS NULL AND retired_at IS NULL
|
|
97
|
+
AND predicate IN (${MV_IN})
|
|
65
98
|
GROUP BY subject, predicate
|
|
66
99
|
HAVING COUNT(*) > 1
|
|
67
100
|
LIMIT 6
|
|
@@ -80,6 +113,67 @@ const SQL_I6 = `
|
|
|
80
113
|
AND NOT EXISTS (SELECT 1 FROM sessions s WHERE s.id = a.session_id)
|
|
81
114
|
LIMIT 6
|
|
82
115
|
`;
|
|
116
|
+
// An embedding row must have a live (active, non-retired) parent fact.
|
|
117
|
+
// Superseded/retired facts leave the ANN index at write time (ingest collapse,
|
|
118
|
+
// markSuperseded, retire, session cascade); a row here means a write path
|
|
119
|
+
// skipped cleanup; the NLM #351 orphan class.
|
|
120
|
+
//
|
|
121
|
+
// SQLite: fact_embeddings is a vec0 virtual table; its shadow rowids table
|
|
122
|
+
// (fact_embeddings_rowids, column: id) supports standard LEFT JOIN.
|
|
123
|
+
const SQL_I7_GHOST_SQLITE = `
|
|
124
|
+
SELECT r.id AS bad_id
|
|
125
|
+
FROM fact_embeddings_rowids r
|
|
126
|
+
LEFT JOIN facts f ON f.id = r.id
|
|
127
|
+
WHERE f.id IS NULL OR f.superseded_by IS NOT NULL OR f.retired_at IS NOT NULL
|
|
128
|
+
LIMIT 6
|
|
129
|
+
`;
|
|
130
|
+
// PG: fact_embeddings is a regular table with fact_id as PK; the FK ON DELETE
|
|
131
|
+
// CASCADE means f.id IS NULL cannot occur, but the condition is kept symmetric.
|
|
132
|
+
const SQL_I7_GHOST_PG = `
|
|
133
|
+
SELECT fe.fact_id AS bad_id
|
|
134
|
+
FROM fact_embeddings fe
|
|
135
|
+
LEFT JOIN facts f ON f.id = fe.fact_id
|
|
136
|
+
WHERE f.id IS NULL OR f.superseded_by IS NOT NULL OR f.retired_at IS NOT NULL
|
|
137
|
+
LIMIT 6
|
|
138
|
+
`;
|
|
139
|
+
// I7b-1: chunk vectors with no map row (vec0 has no FK; interrupted deletes
|
|
140
|
+
// orphan here). Uses the session_embedding_chunks_rowids shadow table for
|
|
141
|
+
// full-scan access: vec0 tables do not support unfiltered SELECT without a
|
|
142
|
+
// KNN predicate. For INTEGER PK vec0 tables the shadow column is chunk_id
|
|
143
|
+
// (not id, which is null for non-text PKs).
|
|
144
|
+
const SQL_I7B_1_GHOST_SQLITE = `
|
|
145
|
+
SELECT CAST(r.chunk_id AS TEXT) AS bad_id
|
|
146
|
+
FROM session_embedding_chunks_rowids r
|
|
147
|
+
LEFT JOIN session_chunk_map m ON m.chunk_id = r.chunk_id
|
|
148
|
+
WHERE m.chunk_id IS NULL
|
|
149
|
+
LIMIT 6
|
|
150
|
+
`;
|
|
151
|
+
// I7b-2: map rows pointing at missing sessions (SQLite; FK ON DELETE CASCADE
|
|
152
|
+
// fires in normal operation but vec0 deletes are not atomic with the map).
|
|
153
|
+
const SQL_I7B_2_ORPHAN_MAP_SQLITE = `
|
|
154
|
+
SELECT m.session_id AS bad_id
|
|
155
|
+
FROM session_chunk_map m
|
|
156
|
+
LEFT JOIN sessions s ON s.id = m.session_id
|
|
157
|
+
WHERE s.id IS NULL
|
|
158
|
+
LIMIT 6
|
|
159
|
+
`;
|
|
160
|
+
// PG: session_embedding_chunks.session_id and session_chunk_map both carry
|
|
161
|
+
// FK ON DELETE CASCADE to sessions; both checks are FK-impossible in practice
|
|
162
|
+
// and land as regression guards.
|
|
163
|
+
const SQL_I7B_1_GHOST_PG = `
|
|
164
|
+
SELECT CAST(c.chunk_id AS TEXT) AS bad_id
|
|
165
|
+
FROM session_embedding_chunks c
|
|
166
|
+
LEFT JOIN session_chunk_map m ON m.chunk_id = c.chunk_id
|
|
167
|
+
WHERE m.chunk_id IS NULL
|
|
168
|
+
LIMIT 6
|
|
169
|
+
`;
|
|
170
|
+
const SQL_I7B_2_ORPHAN_MAP_PG = `
|
|
171
|
+
SELECT m.session_id AS bad_id
|
|
172
|
+
FROM session_chunk_map m
|
|
173
|
+
LEFT JOIN sessions s ON s.id = m.session_id
|
|
174
|
+
WHERE s.id IS NULL
|
|
175
|
+
LIMIT 6
|
|
176
|
+
`;
|
|
83
177
|
const MAX_CYCLE_DEPTH = 100;
|
|
84
178
|
export function detectCycles(loadEdges) {
|
|
85
179
|
const edges = loadEdges();
|
|
@@ -177,17 +271,48 @@ export function runChecksOnSqlite(db) {
|
|
|
177
271
|
const count = sqliteCount(db, SQL_I5_DUPLICATE_FACTS);
|
|
178
272
|
violations.push(buildViolation("I5a", "multiple active facts for same (subject, predicate)", i5DupSamples, count));
|
|
179
273
|
}
|
|
274
|
+
// I5a-mv: informational count of multi-valued predicate groups (not violations).
|
|
275
|
+
const i5aMvCount = sqliteCount(db, SQL_I5A_MULTI_VALUED);
|
|
276
|
+
if (i5aMvCount > 0) {
|
|
277
|
+
violations.push(buildViolation("I5a-mv", `multi-valued predicate groups exempted from I5a (${[...MULTI_VALUED_PREDICATES].join(", ")})`, [], i5aMvCount));
|
|
278
|
+
}
|
|
180
279
|
const i5DangleSamples = sqliteRows(db, SQL_I5_DANGLING_SUPERSEDED_BY);
|
|
181
280
|
if (i5DangleSamples.length > 0) {
|
|
182
281
|
const count = sqliteCount(db, SQL_I5_DANGLING_SUPERSEDED_BY);
|
|
183
282
|
violations.push(buildViolation("I5b", "facts.superseded_by references non-existent facts.id", i5DangleSamples, count));
|
|
184
283
|
}
|
|
284
|
+
// I5c — facts.superseded_by is a functional graph; a cycle traps every fact in
|
|
285
|
+
// it as recall-ineligible forever (both copies have a non-null superseded_by).
|
|
286
|
+
const i5cCycle = detectCycles(() => db
|
|
287
|
+
.prepare("SELECT id AS from_session, superseded_by AS to_session FROM facts WHERE superseded_by IS NOT NULL")
|
|
288
|
+
.all());
|
|
289
|
+
if (i5cCycle) {
|
|
290
|
+
violations.push({ ...i5cCycle, id: "I5c", description: "facts.superseded_by forms a cycle" });
|
|
291
|
+
}
|
|
185
292
|
// I6
|
|
186
293
|
const i6Samples = sqliteRows(db, SQL_I6);
|
|
187
294
|
if (i6Samples.length > 0) {
|
|
188
295
|
const count = sqliteCount(db, SQL_I6);
|
|
189
296
|
violations.push(buildViolation("I6", "adapter_state.session_id references non-existent sessions.id", i6Samples, count));
|
|
190
297
|
}
|
|
298
|
+
// I7
|
|
299
|
+
const i7Samples = sqliteRows(db, SQL_I7_GHOST_SQLITE);
|
|
300
|
+
if (i7Samples.length > 0) {
|
|
301
|
+
const count = sqliteCount(db, SQL_I7_GHOST_SQLITE);
|
|
302
|
+
violations.push(buildViolation("I7", "fact embedding without a live parent fact", i7Samples, count));
|
|
303
|
+
}
|
|
304
|
+
// I7b-1
|
|
305
|
+
const i7b1Samples = sqliteRows(db, SQL_I7B_1_GHOST_SQLITE);
|
|
306
|
+
if (i7b1Samples.length > 0) {
|
|
307
|
+
const count = sqliteCount(db, SQL_I7B_1_GHOST_SQLITE);
|
|
308
|
+
violations.push(buildViolation("I7b-1", "chunk embedding without a map entry", i7b1Samples, count));
|
|
309
|
+
}
|
|
310
|
+
// I7b-2
|
|
311
|
+
const i7b2Samples = sqliteRows(db, SQL_I7B_2_ORPHAN_MAP_SQLITE);
|
|
312
|
+
if (i7b2Samples.length > 0) {
|
|
313
|
+
const count = sqliteCount(db, SQL_I7B_2_ORPHAN_MAP_SQLITE);
|
|
314
|
+
violations.push(buildViolation("I7b-2", "session_chunk_map references non-existent session", i7b2Samples, count));
|
|
315
|
+
}
|
|
191
316
|
return violations;
|
|
192
317
|
}
|
|
193
318
|
// ─── PostgreSQL runner ────────────────────────────────────────────────────────
|
|
@@ -247,16 +372,45 @@ export async function runChecksOnPg(pool) {
|
|
|
247
372
|
const count = await pgCount(pool, SQL_I5_DUPLICATE_FACTS);
|
|
248
373
|
violations.push(buildViolation("I5a", "multiple active facts for same (subject, predicate)", i5DupSamples, count));
|
|
249
374
|
}
|
|
375
|
+
// I5a-mv: informational count of multi-valued predicate groups (not violations).
|
|
376
|
+
const i5aMvCount = await pgCount(pool, SQL_I5A_MULTI_VALUED);
|
|
377
|
+
if (i5aMvCount > 0) {
|
|
378
|
+
violations.push(buildViolation("I5a-mv", `multi-valued predicate groups exempted from I5a (${[...MULTI_VALUED_PREDICATES].join(", ")})`, [], i5aMvCount));
|
|
379
|
+
}
|
|
250
380
|
if (i5DangleSamples.length > 0) {
|
|
251
381
|
const count = await pgCount(pool, SQL_I5_DANGLING_SUPERSEDED_BY);
|
|
252
382
|
violations.push(buildViolation("I5b", "facts.superseded_by references non-existent facts.id", i5DangleSamples, count));
|
|
253
383
|
}
|
|
384
|
+
// I5c — fact supersedence cycle (see SQLite runner).
|
|
385
|
+
const factEdges = await pool.query("SELECT id AS from_session, superseded_by AS to_session FROM facts WHERE superseded_by IS NOT NULL");
|
|
386
|
+
const i5cCycle = detectCycles(() => factEdges.rows);
|
|
387
|
+
if (i5cCycle) {
|
|
388
|
+
violations.push({ ...i5cCycle, id: "I5c", description: "facts.superseded_by forms a cycle" });
|
|
389
|
+
}
|
|
254
390
|
// I6
|
|
255
391
|
const i6Samples = await pgRows(pool, SQL_I6);
|
|
256
392
|
if (i6Samples.length > 0) {
|
|
257
393
|
const count = await pgCount(pool, SQL_I6);
|
|
258
394
|
violations.push(buildViolation("I6", "adapter_state.session_id references non-existent sessions.id", i6Samples, count));
|
|
259
395
|
}
|
|
396
|
+
// I7
|
|
397
|
+
const i7Samples = await pgRows(pool, SQL_I7_GHOST_PG);
|
|
398
|
+
if (i7Samples.length > 0) {
|
|
399
|
+
const count = await pgCount(pool, SQL_I7_GHOST_PG);
|
|
400
|
+
violations.push(buildViolation("I7", "fact embedding without a live parent fact", i7Samples, count));
|
|
401
|
+
}
|
|
402
|
+
// I7b-1
|
|
403
|
+
const i7b1Samples = await pgRows(pool, SQL_I7B_1_GHOST_PG);
|
|
404
|
+
if (i7b1Samples.length > 0) {
|
|
405
|
+
const count = await pgCount(pool, SQL_I7B_1_GHOST_PG);
|
|
406
|
+
violations.push(buildViolation("I7b-1", "chunk embedding without a map entry", i7b1Samples, count));
|
|
407
|
+
}
|
|
408
|
+
// I7b-2
|
|
409
|
+
const i7b2Samples = await pgRows(pool, SQL_I7B_2_ORPHAN_MAP_PG);
|
|
410
|
+
if (i7b2Samples.length > 0) {
|
|
411
|
+
const count = await pgCount(pool, SQL_I7B_2_ORPHAN_MAP_PG);
|
|
412
|
+
violations.push(buildViolation("I7b-2", "session_chunk_map references non-existent session", i7b2Samples, count));
|
|
413
|
+
}
|
|
260
414
|
return violations;
|
|
261
415
|
}
|
|
262
416
|
// ─── Cheap subset (I1 + I2 + I6) for scheduled watchdog ─────────────────────
|
|
@@ -278,15 +432,33 @@ export function runCheapChecksOnSqlite(db) {
|
|
|
278
432
|
if (i6Samples.length > 0) {
|
|
279
433
|
violations.push(buildViolation("I6", "adapter_state.session_id references non-existent sessions.id", i6Samples, sqliteCount(db, SQL_I6)));
|
|
280
434
|
}
|
|
435
|
+
// I7: LEFT JOIN over fact_embeddings is index-only; within the cheap budget.
|
|
436
|
+
const i7Samples = sqliteRows(db, SQL_I7_GHOST_SQLITE);
|
|
437
|
+
if (i7Samples.length > 0) {
|
|
438
|
+
violations.push(buildViolation("I7", "fact embedding without a live parent fact", i7Samples, sqliteCount(db, SQL_I7_GHOST_SQLITE)));
|
|
439
|
+
}
|
|
440
|
+
// I7b-1
|
|
441
|
+
const i7b1CheapSamples = sqliteRows(db, SQL_I7B_1_GHOST_SQLITE);
|
|
442
|
+
if (i7b1CheapSamples.length > 0) {
|
|
443
|
+
violations.push(buildViolation("I7b-1", "chunk embedding without a map entry", i7b1CheapSamples, sqliteCount(db, SQL_I7B_1_GHOST_SQLITE)));
|
|
444
|
+
}
|
|
445
|
+
// I7b-2
|
|
446
|
+
const i7b2CheapSamples = sqliteRows(db, SQL_I7B_2_ORPHAN_MAP_SQLITE);
|
|
447
|
+
if (i7b2CheapSamples.length > 0) {
|
|
448
|
+
violations.push(buildViolation("I7b-2", "session_chunk_map references non-existent session", i7b2CheapSamples, sqliteCount(db, SQL_I7B_2_ORPHAN_MAP_SQLITE)));
|
|
449
|
+
}
|
|
281
450
|
return violations;
|
|
282
451
|
}
|
|
283
452
|
export async function runCheapChecksOnPg(pool) {
|
|
284
453
|
const violations = [];
|
|
285
|
-
const [i1, i2, i2r, i6] = await Promise.all([
|
|
454
|
+
const [i1, i2, i2r, i6, i7, i7b1, i7b2] = await Promise.all([
|
|
286
455
|
pgRows(pool, SQL_I1),
|
|
287
456
|
pgRows(pool, SQL_I2_ORPHANED),
|
|
288
457
|
pgRows(pool, SQL_I2_ORPHANED_REPLACED),
|
|
289
458
|
pgRows(pool, SQL_I6),
|
|
459
|
+
pgRows(pool, SQL_I7_GHOST_PG),
|
|
460
|
+
pgRows(pool, SQL_I7B_1_GHOST_PG),
|
|
461
|
+
pgRows(pool, SQL_I7B_2_ORPHAN_MAP_PG),
|
|
290
462
|
]);
|
|
291
463
|
if (i1.length > 0) {
|
|
292
464
|
violations.push(buildViolation("I1", "self-loop edges in session_edges", i1, await pgCount(pool, SQL_I1)));
|
|
@@ -300,6 +472,15 @@ export async function runCheapChecksOnPg(pool) {
|
|
|
300
472
|
if (i6.length > 0) {
|
|
301
473
|
violations.push(buildViolation("I6", "adapter_state.session_id references non-existent sessions.id", i6, await pgCount(pool, SQL_I6)));
|
|
302
474
|
}
|
|
475
|
+
if (i7.length > 0) {
|
|
476
|
+
violations.push(buildViolation("I7", "fact embedding without a live parent fact", i7, await pgCount(pool, SQL_I7_GHOST_PG)));
|
|
477
|
+
}
|
|
478
|
+
if (i7b1.length > 0) {
|
|
479
|
+
violations.push(buildViolation("I7b-1", "chunk embedding without a map entry", i7b1, await pgCount(pool, SQL_I7B_1_GHOST_PG)));
|
|
480
|
+
}
|
|
481
|
+
if (i7b2.length > 0) {
|
|
482
|
+
violations.push(buildViolation("I7b-2", "session_chunk_map references non-existent session", i7b2, await pgCount(pool, SQL_I7B_2_ORPHAN_MAP_PG)));
|
|
483
|
+
}
|
|
303
484
|
return violations;
|
|
304
485
|
}
|
|
305
486
|
export function applyFixOnSqlite(db) {
|
|
@@ -322,9 +503,24 @@ export function applyFixOnSqlite(db) {
|
|
|
322
503
|
AND id NOT IN (SELECT to_session FROM session_edges WHERE kind = 'replaces')
|
|
323
504
|
`)
|
|
324
505
|
.run();
|
|
506
|
+
// I7 fix: vec0 only supports single-value DELETE, so loop over bad fact_ids.
|
|
507
|
+
const ghostIds = db
|
|
508
|
+
.prepare(`
|
|
509
|
+
SELECT r.id AS bad_id
|
|
510
|
+
FROM fact_embeddings_rowids r
|
|
511
|
+
LEFT JOIN facts f ON f.id = r.id
|
|
512
|
+
WHERE f.id IS NULL OR f.superseded_by IS NOT NULL OR f.retired_at IS NOT NULL
|
|
513
|
+
`)
|
|
514
|
+
.all();
|
|
515
|
+
const delGhostEmb = db.prepare("DELETE FROM fact_embeddings WHERE fact_id = ?");
|
|
516
|
+
let deletedGhostEmbeddings = 0;
|
|
517
|
+
for (const { bad_id } of ghostIds) {
|
|
518
|
+
deletedGhostEmbeddings += delGhostEmb.run(bad_id).changes;
|
|
519
|
+
}
|
|
325
520
|
return {
|
|
326
521
|
deletedSelfLoops: deleteResult.changes,
|
|
327
522
|
restoredToClosed: updateSuperseded.changes + updateReplaced.changes,
|
|
523
|
+
deletedGhostEmbeddings,
|
|
328
524
|
};
|
|
329
525
|
}
|
|
330
526
|
export async function applyFixOnPg(pool) {
|
|
@@ -340,10 +536,20 @@ export async function applyFixOnPg(pool) {
|
|
|
340
536
|
SET status = 'closed', updated_at = NOW()
|
|
341
537
|
WHERE status = 'replaced'
|
|
342
538
|
AND id NOT IN (SELECT to_session FROM session_edges WHERE kind = 'replaces')
|
|
539
|
+
`);
|
|
540
|
+
const ghostEmbResult = await pool.query(`
|
|
541
|
+
DELETE FROM fact_embeddings
|
|
542
|
+
WHERE fact_id IN (
|
|
543
|
+
SELECT fe.fact_id
|
|
544
|
+
FROM fact_embeddings fe
|
|
545
|
+
LEFT JOIN facts f ON f.id = fe.fact_id
|
|
546
|
+
WHERE f.id IS NULL OR f.superseded_by IS NOT NULL OR f.retired_at IS NOT NULL
|
|
547
|
+
)
|
|
343
548
|
`);
|
|
344
549
|
return {
|
|
345
550
|
deletedSelfLoops: deleteResult.rowCount ?? 0,
|
|
346
551
|
restoredToClosed: (updateSuperseded.rowCount ?? 0) + (updateReplaced.rowCount ?? 0),
|
|
552
|
+
deletedGhostEmbeddings: ghostEmbResult.rowCount ?? 0,
|
|
347
553
|
};
|
|
348
554
|
}
|
|
349
555
|
//# sourceMappingURL=check-invariants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-invariants.js","sourceRoot":"","sources":["../../../src/core/integrity/check-invariants.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"check-invariants.js","sourceRoot":"","sources":["../../../src/core/integrity/check-invariants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface CorpusStats {
|
|
2
|
+
readonly dbBytes: number;
|
|
3
|
+
readonly sessions: number;
|
|
4
|
+
readonly bodyBytes: number;
|
|
5
|
+
readonly cappedBodies: number;
|
|
6
|
+
readonly entities: number;
|
|
7
|
+
readonly hapaxEntities: number;
|
|
8
|
+
readonly factsActive: number;
|
|
9
|
+
readonly factsSuperseded: number;
|
|
10
|
+
readonly factsRetired: number;
|
|
11
|
+
readonly markers: number;
|
|
12
|
+
readonly exemplars: number;
|
|
13
|
+
}
|
|
14
|
+
export interface CorpusStatsDeps {
|
|
15
|
+
getDbBytes(): number;
|
|
16
|
+
getSessions(): number;
|
|
17
|
+
getBodyStats(): {
|
|
18
|
+
bodyBytes: number;
|
|
19
|
+
cappedBodies: number;
|
|
20
|
+
} | Promise<{
|
|
21
|
+
bodyBytes: number;
|
|
22
|
+
cappedBodies: number;
|
|
23
|
+
}>;
|
|
24
|
+
getEntityStats(): {
|
|
25
|
+
entities: number;
|
|
26
|
+
hapaxEntities: number;
|
|
27
|
+
};
|
|
28
|
+
getFactStats(): {
|
|
29
|
+
factsActive: number;
|
|
30
|
+
factsSuperseded: number;
|
|
31
|
+
factsRetired: number;
|
|
32
|
+
};
|
|
33
|
+
getMarkers(): number;
|
|
34
|
+
getExemplars(): number;
|
|
35
|
+
}
|
|
36
|
+
export declare function computeCorpusStats(deps: CorpusStatsDeps): Promise<CorpusStats>;
|
|
37
|
+
interface SqliteLike {
|
|
38
|
+
prepare(sql: string): {
|
|
39
|
+
get(...params: unknown[]): unknown;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export declare function sqliteCorpusStatsDeps(db: SqliteLike, dbPath: string): CorpusStatsDeps;
|
|
43
|
+
export interface CorpusThresholds {
|
|
44
|
+
readonly warnBytes: number;
|
|
45
|
+
readonly alertBytes: number;
|
|
46
|
+
}
|
|
47
|
+
export declare function parseCorpusThresholds(env: Record<string, string | undefined>): CorpusThresholds;
|
|
48
|
+
export declare function thresholdState(dbBytes: number, thresholds: CorpusThresholds): "ok" | "warn" | "alert";
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { statSync } from "node:fs";
|
|
2
|
+
export async function computeCorpusStats(deps) {
|
|
3
|
+
const dbBytes = deps.getDbBytes();
|
|
4
|
+
const sessions = deps.getSessions();
|
|
5
|
+
const { bodyBytes, cappedBodies } = await deps.getBodyStats();
|
|
6
|
+
const { entities, hapaxEntities } = deps.getEntityStats();
|
|
7
|
+
const { factsActive, factsSuperseded, factsRetired } = deps.getFactStats();
|
|
8
|
+
const markers = deps.getMarkers();
|
|
9
|
+
const exemplars = deps.getExemplars();
|
|
10
|
+
return {
|
|
11
|
+
dbBytes,
|
|
12
|
+
sessions,
|
|
13
|
+
bodyBytes,
|
|
14
|
+
cappedBodies,
|
|
15
|
+
entities,
|
|
16
|
+
hapaxEntities,
|
|
17
|
+
factsActive,
|
|
18
|
+
factsSuperseded,
|
|
19
|
+
factsRetired,
|
|
20
|
+
markers,
|
|
21
|
+
exemplars,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function sqliteCorpusStatsDeps(db, dbPath) {
|
|
25
|
+
return {
|
|
26
|
+
getDbBytes() {
|
|
27
|
+
return statSync(dbPath).size;
|
|
28
|
+
},
|
|
29
|
+
getSessions() {
|
|
30
|
+
const row = db.prepare("SELECT COUNT(*) AS n FROM sessions").get();
|
|
31
|
+
return row.n;
|
|
32
|
+
},
|
|
33
|
+
async getBodyStats() {
|
|
34
|
+
// better-sqlite3 is synchronous, and one SUM(LENGTH(body)) over the whole
|
|
35
|
+
// table scans every overflow page (~600ms at 463MB, seconds at the alert
|
|
36
|
+
// threshold) on the serving event loop. Chunk by rowid windows and yield
|
|
37
|
+
// between chunks so each stall stays ~tens of ms.
|
|
38
|
+
const CHUNK_ROWS = 500;
|
|
39
|
+
const maxRow = db.prepare("SELECT COALESCE(MAX(rowid), 0) AS m FROM sessions").get();
|
|
40
|
+
let bodyBytes = 0;
|
|
41
|
+
let cappedBodies = 0;
|
|
42
|
+
for (let lo = 0; lo < maxRow.m; lo += CHUNK_ROWS) {
|
|
43
|
+
const row = db
|
|
44
|
+
.prepare(`SELECT
|
|
45
|
+
COALESCE(SUM(LENGTH(body)), 0) AS bodyBytes,
|
|
46
|
+
COUNT(CASE WHEN LENGTH(body) >= 200000 THEN 1 END) AS cappedBodies
|
|
47
|
+
FROM sessions
|
|
48
|
+
WHERE rowid > ? AND rowid <= ? AND body IS NOT NULL`)
|
|
49
|
+
.get(lo, lo + CHUNK_ROWS);
|
|
50
|
+
bodyBytes += row.bodyBytes;
|
|
51
|
+
cappedBodies += row.cappedBodies;
|
|
52
|
+
await new Promise((resolveYield) => setImmediate(resolveYield));
|
|
53
|
+
}
|
|
54
|
+
return { bodyBytes, cappedBodies };
|
|
55
|
+
},
|
|
56
|
+
getEntityStats() {
|
|
57
|
+
const row = db
|
|
58
|
+
.prepare(`SELECT
|
|
59
|
+
COUNT(*) AS entities,
|
|
60
|
+
COUNT(CASE WHEN session_count = 1 THEN 1 END) AS hapaxEntities
|
|
61
|
+
FROM entities`)
|
|
62
|
+
.get();
|
|
63
|
+
return { entities: row.entities, hapaxEntities: row.hapaxEntities };
|
|
64
|
+
},
|
|
65
|
+
getFactStats() {
|
|
66
|
+
const row = db
|
|
67
|
+
.prepare(`SELECT
|
|
68
|
+
COUNT(CASE WHEN retired_at IS NULL AND superseded_by IS NULL THEN 1 END) AS factsActive,
|
|
69
|
+
COUNT(CASE WHEN retired_at IS NULL AND superseded_by IS NOT NULL THEN 1 END) AS factsSuperseded,
|
|
70
|
+
COUNT(CASE WHEN retired_at IS NOT NULL THEN 1 END) AS factsRetired
|
|
71
|
+
FROM facts`)
|
|
72
|
+
.get();
|
|
73
|
+
return {
|
|
74
|
+
factsActive: row.factsActive,
|
|
75
|
+
factsSuperseded: row.factsSuperseded,
|
|
76
|
+
factsRetired: row.factsRetired,
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
getMarkers() {
|
|
80
|
+
const row = db.prepare("SELECT COUNT(*) AS n FROM markers").get();
|
|
81
|
+
return row.n;
|
|
82
|
+
},
|
|
83
|
+
getExemplars() {
|
|
84
|
+
const row = db.prepare("SELECT COUNT(*) AS n FROM code_exemplars").get();
|
|
85
|
+
return row.n;
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const WARN_DEFAULT = 1_000_000_000;
|
|
90
|
+
const ALERT_DEFAULT = 2_000_000_000;
|
|
91
|
+
export function parseCorpusThresholds(env) {
|
|
92
|
+
const warnRaw = env["NLM_CORPUS_WARN_BYTES"];
|
|
93
|
+
const alertRaw = env["NLM_CORPUS_ALERT_BYTES"];
|
|
94
|
+
const warnParsed = Number(warnRaw);
|
|
95
|
+
const warnBytes = warnRaw === undefined || !Number.isFinite(warnParsed) || warnParsed <= 0
|
|
96
|
+
? WARN_DEFAULT
|
|
97
|
+
: warnParsed;
|
|
98
|
+
const alertParsed = Number(alertRaw);
|
|
99
|
+
const alertBytes = alertRaw === undefined || !Number.isFinite(alertParsed) || alertParsed <= 0
|
|
100
|
+
? ALERT_DEFAULT
|
|
101
|
+
: alertParsed;
|
|
102
|
+
return { warnBytes, alertBytes };
|
|
103
|
+
}
|
|
104
|
+
export function thresholdState(dbBytes, thresholds) {
|
|
105
|
+
if (dbBytes >= thresholds.alertBytes)
|
|
106
|
+
return "alert";
|
|
107
|
+
if (dbBytes >= thresholds.warnBytes)
|
|
108
|
+
return "warn";
|
|
109
|
+
return "ok";
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=corpus-stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corpus-stats.js","sourceRoot":"","sources":["../../../src/core/metrics/corpus-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* re_derivation_rate: how often the same decision is re-made across sessions
|
|
3
|
+
* that share a topic but were never linked. A high rate means recall is failing
|
|
4
|
+
* to surface the prior decision, so the operator (or an agent) re-derives it.
|
|
5
|
+
*
|
|
6
|
+
* A pair counts as a re-derivation when the two sessions share at least one
|
|
7
|
+
* entity, sit more than GAP_DAYS apart, have decision text overlapping at or
|
|
8
|
+
* above JACCARD_FLOOR, and have no `continues`/`supersedes` edge linking them.
|
|
9
|
+
*/
|
|
10
|
+
export interface ReDerivationSession {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly startedAt: string;
|
|
13
|
+
readonly entities: ReadonlyArray<string>;
|
|
14
|
+
readonly decisions: ReadonlyArray<string>;
|
|
15
|
+
}
|
|
16
|
+
export interface ReDerivationEdge {
|
|
17
|
+
readonly from_session: string;
|
|
18
|
+
readonly to_session: string;
|
|
19
|
+
readonly kind: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ReDerivationDeps {
|
|
22
|
+
listSessionsWithin(windowDays: number): Promise<ReadonlyArray<ReDerivationSession>>;
|
|
23
|
+
listEdges(): Promise<ReadonlyArray<ReDerivationEdge>>;
|
|
24
|
+
}
|
|
25
|
+
export interface ReDerivationPair {
|
|
26
|
+
readonly a: string;
|
|
27
|
+
readonly b: string;
|
|
28
|
+
readonly sharedEntities: ReadonlyArray<string>;
|
|
29
|
+
readonly jaccard: number;
|
|
30
|
+
}
|
|
31
|
+
export interface ReDerivationReport {
|
|
32
|
+
readonly rate: number;
|
|
33
|
+
readonly pairs: ReadonlyArray<ReDerivationPair>;
|
|
34
|
+
/** Denominator: entity-sharing session pairs eligible for the rate. */
|
|
35
|
+
readonly eligible: number;
|
|
36
|
+
}
|
|
37
|
+
interface SqliteLike {
|
|
38
|
+
prepare(sql: string): {
|
|
39
|
+
all(...params: unknown[]): unknown[];
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* SQLite-backed deps for the CLI readout. Reads sessions started within the
|
|
44
|
+
* window along with their entity links and decision markers, plus all edges.
|
|
45
|
+
*/
|
|
46
|
+
export declare function sqliteReDerivationDeps(db: SqliteLike): ReDerivationDeps;
|
|
47
|
+
export declare function computeReDerivationRate(deps: ReDerivationDeps, windowDays: number): Promise<ReDerivationReport>;
|
|
48
|
+
export {};
|