nlm-memory 0.19.0 → 0.20.1
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 +17 -10
- package/dist/cli/digest.js +21 -0
- 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 +766 -55
- package/dist/cli/nlm.js.map +1 -1
- 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.js +6 -0
- package/dist/core/adapters/claude-code.js.map +1 -1
- package/dist/core/classifier/hierarchical-classify.d.ts +6 -2
- package/dist/core/classifier/hierarchical-classify.js +10 -6
- package/dist/core/classifier/hierarchical-classify.js.map +1 -1
- package/dist/core/classifier/prompt.js +3 -3
- package/dist/core/digest/compose.d.ts +10 -0
- package/dist/core/digest/compose.js +7 -1
- package/dist/core/digest/compose.js.map +1 -1
- 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 +1 -0
- package/dist/core/exemplars/capture-from-session.js +6 -2
- 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.js +2 -65
- package/dist/core/exemplars/extract-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/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/ingest-session.d.ts +5 -0
- package/dist/core/ingest/ingest-session.js +3 -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 +3 -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 +275 -0
- package/dist/core/ingest/reprocess.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/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/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 +21 -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 +13 -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 +80 -28
- package/dist/core/scheduler/scheduler.js.map +1 -1
- package/dist/core/signals/code-signal.d.ts +49 -0
- package/dist/core/signals/code-signal.js +53 -0
- package/dist/core/signals/code-signal.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 +7 -0
- 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 +9 -0
- package/dist/core/storage/pg-session-store.js +204 -76
- package/dist/core/storage/pg-session-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 +24 -0
- package/dist/core/storage/pg-workstream-store.js +96 -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 +11 -0
- 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 +76 -25
- package/dist/core/storage/sqlite-fact-store.js.map +1 -1
- package/dist/core/storage/sqlite-session-store.d.ts +20 -5
- package/dist/core/storage/sqlite-session-store.js +183 -68
- package/dist/core/storage/sqlite-session-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 +24 -0
- package/dist/core/storage/sqlite-workstream-store.js +98 -0
- package/dist/core/storage/sqlite-workstream-store.js.map +1 -0
- package/dist/core/util/with-timeout.d.ts +5 -0
- package/dist/core/util/with-timeout.js +20 -0
- package/dist/core/util/with-timeout.js.map +1 -0
- 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 +25 -0
- package/dist/core/workstream/bind.js +23 -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 +20 -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 +66 -0
- package/dist/hook/pre-compact-hook.js.map +1 -0
- package/dist/hook/prompt-recall-hook.d.ts +37 -0
- package/dist/hook/prompt-recall-hook.js +120 -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 +1 -1
- package/dist/hook/recall-over-http.js +11 -11
- 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 +24 -59
- package/dist/hook/session-start-hook.js.map +1 -1
- package/dist/hook/stop-hook.js +22 -59
- package/dist/hook/stop-hook.js.map +1 -1
- package/dist/hook/subagent-start-hook.d.ts +28 -0
- package/dist/hook/subagent-start-hook.js +81 -0
- package/dist/hook/subagent-start-hook.js.map +1 -0
- package/dist/http/app.js +28 -8
- 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 +47 -2
- package/dist/mcp/server.js +303 -18
- 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/session-store.d.ts +12 -0
- 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 +21 -0
- package/dist/ports/workstream-store.js +2 -0
- package/dist/ports/workstream-store.js.map +1 -0
- package/dist/shared/types.d.ts +23 -2
- 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/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/nlm/index.js +395 -37
- package/package.json +12 -2
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/scripts/prompt-recall-hook.mjs +402 -41
- package/plugin/scripts/session-start-hook.mjs +286 -60
- package/plugin/scripts/stop-hook.mjs +85 -65
- 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
|
@@ -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 {};
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
const JACCARD_FLOOR = 0.5;
|
|
11
|
+
const GAP_DAYS = 7;
|
|
12
|
+
const MS_PER_DAY = 86_400_000;
|
|
13
|
+
function round2(n) {
|
|
14
|
+
return Math.round(n * 100) / 100;
|
|
15
|
+
}
|
|
16
|
+
function jaccard(a, b) {
|
|
17
|
+
const toks = (xs) => new Set(xs.join(" ").toLowerCase().split(/\W+/).filter(Boolean));
|
|
18
|
+
const A = toks(a);
|
|
19
|
+
const B = toks(b);
|
|
20
|
+
if (A.size === 0 || B.size === 0)
|
|
21
|
+
return 0;
|
|
22
|
+
let inter = 0;
|
|
23
|
+
for (const t of A)
|
|
24
|
+
if (B.has(t))
|
|
25
|
+
inter++;
|
|
26
|
+
return inter / (A.size + B.size - inter);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* SQLite-backed deps for the CLI readout. Reads sessions started within the
|
|
30
|
+
* window along with their entity links and decision markers, plus all edges.
|
|
31
|
+
*/
|
|
32
|
+
export function sqliteReDerivationDeps(db) {
|
|
33
|
+
return {
|
|
34
|
+
async listSessionsWithin(windowDays) {
|
|
35
|
+
const rows = db
|
|
36
|
+
.prepare(`SELECT id, started_at AS startedAt
|
|
37
|
+
FROM sessions
|
|
38
|
+
WHERE started_at >= datetime('now', ?)
|
|
39
|
+
ORDER BY started_at ASC`)
|
|
40
|
+
.all(`-${windowDays} days`);
|
|
41
|
+
const entStmt = db.prepare("SELECT entity_canonical AS e FROM session_entities WHERE session_id = ?");
|
|
42
|
+
const decStmt = db.prepare("SELECT text AS t FROM markers WHERE session_id = ? AND kind = 'decision' ORDER BY position ASC");
|
|
43
|
+
return rows.map((r) => ({
|
|
44
|
+
id: r.id,
|
|
45
|
+
startedAt: r.startedAt,
|
|
46
|
+
entities: entStmt.all(r.id).map((x) => x.e),
|
|
47
|
+
decisions: decStmt.all(r.id).map((x) => x.t),
|
|
48
|
+
}));
|
|
49
|
+
},
|
|
50
|
+
async listEdges() {
|
|
51
|
+
return db
|
|
52
|
+
.prepare("SELECT from_session, to_session, kind FROM session_edges")
|
|
53
|
+
.all();
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export async function computeReDerivationRate(deps, windowDays) {
|
|
58
|
+
const sessions = await deps.listSessionsWithin(windowDays);
|
|
59
|
+
const edges = await deps.listEdges();
|
|
60
|
+
const linked = new Set(edges
|
|
61
|
+
.filter((e) => e.kind === "continues" || e.kind === "supersedes")
|
|
62
|
+
.map((e) => [e.from_session, e.to_session].sort().join("|")));
|
|
63
|
+
const pairs = [];
|
|
64
|
+
let eligible = 0;
|
|
65
|
+
for (let i = 0; i < sessions.length; i++) {
|
|
66
|
+
for (let j = i + 1; j < sessions.length; j++) {
|
|
67
|
+
const s = sessions[i];
|
|
68
|
+
const t = sessions[j];
|
|
69
|
+
const shared = s.entities.filter((e) => t.entities.includes(e));
|
|
70
|
+
if (shared.length === 0)
|
|
71
|
+
continue;
|
|
72
|
+
eligible++;
|
|
73
|
+
const key = [s.id, t.id].sort().join("|");
|
|
74
|
+
if (linked.has(key))
|
|
75
|
+
continue;
|
|
76
|
+
const gap = Math.abs(new Date(t.startedAt).getTime() - new Date(s.startedAt).getTime()) / MS_PER_DAY;
|
|
77
|
+
if (gap <= GAP_DAYS)
|
|
78
|
+
continue;
|
|
79
|
+
const jac = jaccard(s.decisions, t.decisions);
|
|
80
|
+
if (jac >= JACCARD_FLOOR) {
|
|
81
|
+
pairs.push({ a: s.id, b: t.id, sharedEntities: shared, jaccard: round2(jac) });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return { rate: eligible ? pairs.length / eligible : 0, pairs, eligible };
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=re-derivation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"re-derivation.js","sourceRoot":"","sources":["../../../src/core/metrics/re-derivation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkCH,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACnC,CAAC;AAED,SAAS,OAAO,CAAC,CAAwB,EAAE,CAAwB;IACjE,MAAM,IAAI,GAAG,CAAC,EAAyB,EAAe,EAAE,CACtD,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,KAAK,EAAE,CAAC;IACzC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AAC3C,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAc;IACnD,OAAO;QACL,KAAK,CAAC,kBAAkB,CAAC,UAAU;YACjC,MAAM,IAAI,GAAG,EAAE;iBACZ,OAAO,CACN;;;oCAG0B,CAC3B;iBACA,GAAG,CAAC,IAAI,UAAU,OAAO,CAA6C,CAAC;YAC1E,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CACxB,yEAAyE,CAC1E,CAAC;YACF,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CACxB,gGAAgG,CACjG,CAAC;YACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,QAAQ,EAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,SAAS,EAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACvE,CAAC,CAAC,CAAC;QACN,CAAC;QACD,KAAK,CAAC,SAAS;YACb,OAAO,EAAE;iBACN,OAAO,CAAC,0DAA0D,CAAC;iBACnE,GAAG,EAA6B,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAsB,EACtB,UAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,KAAK;SACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;SAChE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC/D,CAAC;IACF,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAClC,QAAQ,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC;YACrG,IAAI,GAAG,IAAI,QAAQ;gBAAE,SAAS;YAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC3E,CAAC"}
|
|
@@ -24,6 +24,14 @@ export interface CitationStats {
|
|
|
24
24
|
}>;
|
|
25
25
|
readonly log_present: boolean;
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* A citation is only usable telemetry if it can be joined to the query fire
|
|
29
|
+
* that surfaced it — i.e. it carries a real conversation id. Test fixtures
|
|
30
|
+
* (conv_test_001), the cite_session placeholder (mcp_tool), and "unknown" can't
|
|
31
|
+
* join, so they poison every precision / reranker metric computed from the log.
|
|
32
|
+
* The write path drops them at the source; only attributable citations land.
|
|
33
|
+
*/
|
|
34
|
+
export declare function isAttributableConversationId(id: string): boolean;
|
|
27
35
|
export declare function readCitationLog(days: number, logPath?: string): Promise<CitationEntry[]>;
|
|
28
36
|
export declare function appendCitation(entry: CitationEntry, logPath?: string): Promise<void>;
|
|
29
37
|
export declare function citationStats(days: number, logPath?: string): Promise<CitationStats>;
|
|
@@ -13,6 +13,19 @@ import { homedir } from "node:os";
|
|
|
13
13
|
function defaultLogPath() {
|
|
14
14
|
return process.env["NLM_CITATION_LOG"] ?? join(homedir(), ".nlm", "citation-log.jsonl");
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* A citation is only usable telemetry if it can be joined to the query fire
|
|
18
|
+
* that surfaced it — i.e. it carries a real conversation id. Test fixtures
|
|
19
|
+
* (conv_test_001), the cite_session placeholder (mcp_tool), and "unknown" can't
|
|
20
|
+
* join, so they poison every precision / reranker metric computed from the log.
|
|
21
|
+
* The write path drops them at the source; only attributable citations land.
|
|
22
|
+
*/
|
|
23
|
+
export function isAttributableConversationId(id) {
|
|
24
|
+
if (!id)
|
|
25
|
+
return false;
|
|
26
|
+
const lower = id.toLowerCase();
|
|
27
|
+
return lower !== "unknown" && lower !== "mcp_tool" && !/^(conv_)?test/.test(lower);
|
|
28
|
+
}
|
|
16
29
|
export async function readCitationLog(days, logPath = defaultLogPath()) {
|
|
17
30
|
let raw;
|
|
18
31
|
try {
|
|
@@ -51,6 +64,10 @@ export async function readCitationLog(days, logPath = defaultLogPath()) {
|
|
|
51
64
|
return results;
|
|
52
65
|
}
|
|
53
66
|
export async function appendCitation(entry, logPath = defaultLogPath()) {
|
|
67
|
+
// Drop unattributable / fixture citations at the source so the log stays a
|
|
68
|
+
// clean training + metric substrate (see isAttributableConversationId).
|
|
69
|
+
if (!isAttributableConversationId(entry.conversationId))
|
|
70
|
+
return;
|
|
54
71
|
try {
|
|
55
72
|
await mkdir(dirname(logPath), { recursive: true });
|
|
56
73
|
const payload = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"citation-log.js","sourceRoot":"","sources":["../../../src/core/recall/citation-log.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"citation-log.js","sourceRoot":"","sources":["../../../src/core/recall/citation-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAmBlC,SAAS,cAAc;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAC1F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,EAAU;IACrD,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IACtB,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,UAAkB,cAAc,EAAE;IAElC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACvD,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;YACxD,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ;gBAAE,SAAS;YAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM;gBAAE,SAAS;YAC7C,IAAI,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ;gBAAE,SAAS;YAChG,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7F,MAAM,eAAe,GAAG,OAAO,GAAG,CAAC,kBAAkB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1G,MAAM,KAAK,GAAkB;gBAC3B,cAAc,EAAE,GAAG,CAAC,iBAAiB,CAAC;gBACtC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC;gBACxB,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAoB,EACpB,UAAkB,cAAc,EAAE;IAElC,2EAA2E;IAC3E,wEAAwE;IACxE,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,cAAc,CAAC;QAAE,OAAO;IAChE,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG;YACd,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,eAAe,EAAE,KAAK,CAAC,cAAc;YACrC,QAAQ,EAAE,KAAK,CAAC,OAAO;YACvB,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS;gBACrC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,eAAe,EAAE;gBAC7C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;IACtD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,UAAkB,cAAc,EAAE;IAElC,MAAM,IAAI,GAAkB;QAC1B,IAAI;QACJ,KAAK,EAAE,CAAC;QACR,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,KAAK;KACnB,CAAC;IACF,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACxC,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,KAA8B,CAAC;QACnC,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,MAAM;YAAE,SAAS;QAClD,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE;YAAE,SAAS;QAC5C,KAAK,IAAI,CAAC,CAAC;QACX,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,OAAO;QACL,IAAI;QACJ,KAAK;QACL,YAAY,EAAE,MAAM,CAAC,IAAI;QACzB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure heuristic intent classifier for recall queries.
|
|
3
|
+
* Total: never throws, always returns one of the four labels.
|
|
4
|
+
* Dependency-free: uses only detectQueryShape from this directory.
|
|
5
|
+
*/
|
|
6
|
+
export type QueryIntent = "lookup" | "relational" | "temporal" | "other";
|
|
7
|
+
export declare function classifyQueryIntent(query: string): QueryIntent;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure heuristic intent classifier for recall queries.
|
|
3
|
+
* Total: never throws, always returns one of the four labels.
|
|
4
|
+
* Dependency-free: uses only detectQueryShape from this directory.
|
|
5
|
+
*/
|
|
6
|
+
import { detectQueryShape } from "./query-shape.js";
|
|
7
|
+
const RELATIONAL_PATTERNS = [
|
|
8
|
+
/\bdepends\s+on\b/i,
|
|
9
|
+
/\brelated\s+to\b/i,
|
|
10
|
+
/\bconnected\s+(to|with)\b/i,
|
|
11
|
+
/\bwhat\s+uses\b/i,
|
|
12
|
+
/\bdownstream\s+of\b/i,
|
|
13
|
+
];
|
|
14
|
+
export function classifyQueryIntent(query) {
|
|
15
|
+
if (!query.trim())
|
|
16
|
+
return "other";
|
|
17
|
+
for (const pat of RELATIONAL_PATTERNS) {
|
|
18
|
+
if (pat.test(query))
|
|
19
|
+
return "relational";
|
|
20
|
+
}
|
|
21
|
+
if (detectQueryShape(query).hasTemporal)
|
|
22
|
+
return "temporal";
|
|
23
|
+
return "lookup";
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=query-intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-intent.js","sourceRoot":"","sources":["../../../src/core/recall/query-intent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,mBAAmB,GAA0B;IACjD,mBAAmB;IACnB,mBAAmB;IACnB,4BAA4B;IAC5B,kBAAkB;IAClB,sBAAsB;CACvB,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,OAAO,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;IAC3C,CAAC;IACD,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,WAAW;QAAE,OAAO,UAAU,CAAC;IAC3D,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* ~/.nlm/query_log.jsonl. Append-only.
|
|
10
10
|
*/
|
|
11
11
|
import type { RecallKindFilter, RecallMode } from "../../shared/types.js";
|
|
12
|
+
import { type QueryIntent } from "./query-intent.js";
|
|
12
13
|
export interface LogEntry {
|
|
13
14
|
readonly source: string;
|
|
14
15
|
/** Calling agent runtime (claude-code / hermes / pi.dev / codex / etc).
|
|
@@ -22,6 +23,9 @@ export interface LogEntry {
|
|
|
22
23
|
readonly nResults: number;
|
|
23
24
|
readonly returnedIds: ReadonlyArray<string>;
|
|
24
25
|
readonly conversationId?: string;
|
|
26
|
+
/** Heuristic intent label for Phase 4 relational-recall telemetry.
|
|
27
|
+
* Absent on log entries written before this field was added. */
|
|
28
|
+
readonly intent?: QueryIntent;
|
|
25
29
|
}
|
|
26
30
|
export interface StatsResult {
|
|
27
31
|
readonly days: number;
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import { appendFile, mkdir, readFile, stat } from "node:fs/promises";
|
|
12
12
|
import { dirname, join } from "node:path";
|
|
13
13
|
import { homedir } from "node:os";
|
|
14
|
+
import { classifyQueryIntent } from "./query-intent.js";
|
|
14
15
|
function defaultLogPath() {
|
|
15
16
|
return process.env["NLM_QUERY_LOG"] ?? join(homedir(), ".nlm", "query_log.jsonl");
|
|
16
17
|
}
|
|
@@ -29,6 +30,7 @@ export async function logQuery(entry, logPath = defaultLogPath()) {
|
|
|
29
30
|
limit: entry.limit,
|
|
30
31
|
n_results: entry.nResults,
|
|
31
32
|
returned_ids: entry.returnedIds,
|
|
33
|
+
intent: classifyQueryIntent(entry.query ?? ""),
|
|
32
34
|
};
|
|
33
35
|
await appendFile(logPath, JSON.stringify(payload) + "\n", "utf8");
|
|
34
36
|
}
|
|
@@ -56,6 +58,7 @@ export async function readQueryLog(days, logPath = defaultLogPath()) {
|
|
|
56
58
|
if (Date.parse(obj["ts"]) < cutoff)
|
|
57
59
|
continue;
|
|
58
60
|
const convId = typeof obj["conversation_id"] === "string" ? obj["conversation_id"] : "unknown";
|
|
61
|
+
const intentRaw = obj["intent"];
|
|
59
62
|
const entry = {
|
|
60
63
|
source: typeof obj["source"] === "string" ? obj["source"] : "",
|
|
61
64
|
runtime: typeof obj["runtime"] === "string" ? obj["runtime"] : null,
|
|
@@ -66,6 +69,7 @@ export async function readQueryLog(days, logPath = defaultLogPath()) {
|
|
|
66
69
|
limit: Number(obj["limit"] ?? 5),
|
|
67
70
|
nResults: Number(obj["n_results"] ?? 0),
|
|
68
71
|
returnedIds: obj["returned_ids"].filter((x) => typeof x === "string"),
|
|
72
|
+
...(typeof intentRaw === "string" ? { intent: intentRaw } : {}),
|
|
69
73
|
};
|
|
70
74
|
results.push({ conversationId: convId, entry });
|
|
71
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-log.js","sourceRoot":"","sources":["../../../src/core/recall/query-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"query-log.js","sourceRoot":"","sources":["../../../src/core/recall/query-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import type { CodeExemplarStore } from "../../ports/code-exemplar-store.js";
|
|
|
10
10
|
import type { FactStore } from "../../ports/fact-store.js";
|
|
11
11
|
import type { LLMClient } from "../../ports/llm-client.js";
|
|
12
12
|
import type { SessionStore } from "../../ports/session-store.js";
|
|
13
|
-
import type { RecallQuery, RecallResult } from "../../shared/types.js";
|
|
13
|
+
import type { MatchField, RecallHit, RecallQuery, RecallResult, Session } from "../../shared/types.js";
|
|
14
14
|
export interface RecallServiceDeps {
|
|
15
15
|
readonly store: SessionStore;
|
|
16
16
|
readonly llm: LLMClient;
|
|
@@ -26,6 +26,14 @@ export interface RecallServiceDeps {
|
|
|
26
26
|
readonly exemplarStore?: CodeExemplarStore;
|
|
27
27
|
readonly codeEmbedder?: CodeEmbedder;
|
|
28
28
|
readonly installScope?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Optional resolver for workstream-filter queries. Given an idOrLabel,
|
|
31
|
+
* returns the array of member workstream ids (merge chains resolve to the
|
|
32
|
+
* live survivor). Passed as `workstreamIds` into both search legs so the
|
|
33
|
+
* SQL layer filters by workstream_id. When absent, `query.workstream` is a
|
|
34
|
+
* no-op. Injected by buildStack(); tests can stub with a plain fn.
|
|
35
|
+
*/
|
|
36
|
+
readonly resolveWorkstreamMembers?: (idOrLabel: string) => Promise<ReadonlyArray<string>>;
|
|
29
37
|
}
|
|
30
38
|
export declare class RecallService {
|
|
31
39
|
private readonly deps;
|
|
@@ -33,3 +41,31 @@ export declare class RecallService {
|
|
|
33
41
|
constructor(deps: RecallServiceDeps);
|
|
34
42
|
search(input: RecallQuery): Promise<RecallResult>;
|
|
35
43
|
}
|
|
44
|
+
interface KeywordHit {
|
|
45
|
+
readonly session: Session;
|
|
46
|
+
readonly score: number;
|
|
47
|
+
readonly matchedIn: ReadonlyArray<MatchField>;
|
|
48
|
+
}
|
|
49
|
+
interface SemanticHit {
|
|
50
|
+
readonly session: Session;
|
|
51
|
+
readonly similarity: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Keyword-primary hybrid merge (the inverse of the fact lane's semantic-primary
|
|
55
|
+
* banding).
|
|
56
|
+
*
|
|
57
|
+
* For sessions the dominant quality signal is FTS5 BM25: only lexically-matching
|
|
58
|
+
* sessions come back, and the keyword winner is almost always the intended hit.
|
|
59
|
+
* RRF fused by rank let strong semantic-only neighbours demote keyword winners
|
|
60
|
+
* at scale (hybrid 65% vs keyword 90% R@5 on the production decision-query set),
|
|
61
|
+
* so this bands instead of fuses: keyword hits occupy the upper band [0.5, 1.0]
|
|
62
|
+
* ranked by normalized BM25; semantic-only hits — sessions keyword never
|
|
63
|
+
* surfaced — backfill the lower band [0, 0.5).
|
|
64
|
+
*
|
|
65
|
+
* keywordScore and semanticScore stay populated as min-max normalized
|
|
66
|
+
* informational values so the UI can show "how strong was each leg." When
|
|
67
|
+
* semantic is unavailable (Ollama down) semHits is empty and this degrades to
|
|
68
|
+
* pure keyword, preserving the graceful-degradation contract.
|
|
69
|
+
*/
|
|
70
|
+
declare function mergeHybrid(kwHits: ReadonlyArray<KeywordHit>, semHits: ReadonlyArray<SemanticHit>): ReadonlyArray<RecallHit>;
|
|
71
|
+
export { mergeHybrid as mergeHybridForTest };
|