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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-signal-store.js","sourceRoot":"","sources":["../../../src/core/storage/sqlite-signal-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"sqlite-signal-store.js","sourceRoot":"","sources":["../../../src/core/storage/sqlite-signal-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,22 +3,21 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Owns the connection. Builds SqliteSessionStore and SqliteFactStore over
|
|
5
5
|
* that single connection so writes commit on one WAL writer (the SQLite
|
|
6
|
-
* atomicity model).
|
|
7
|
-
* `db.transaction()` API and re-runs it inside an async shell so callers
|
|
8
|
-
* can await async work inside the callback (e.g. an embedder call) — but
|
|
9
|
-
* note that the db txn itself is synchronous; do not call long-running
|
|
10
|
-
* async work inside withTransaction or the txn will hold its write lock.
|
|
6
|
+
* atomicity model).
|
|
11
7
|
*
|
|
12
8
|
* rawDb() is a deprecated escape hatch for callers that still use direct
|
|
13
9
|
* better-sqlite3 — scheduler, http actions endpoints, backfill-facts,
|
|
14
10
|
* source/provider registries. Tracked for removal in #215a.
|
|
15
11
|
*/
|
|
16
12
|
import type Database from "better-sqlite3";
|
|
17
|
-
import type { Storage
|
|
13
|
+
import type { Storage } from "../../ports/storage.js";
|
|
18
14
|
import { SqliteCodeExemplarStore } from "./sqlite-code-exemplar-store.js";
|
|
15
|
+
import { SqliteEmbeddingConfigStore } from "./sqlite-embedding-config.js";
|
|
16
|
+
import { SqliteEntityStore } from "./sqlite-entity-store.js";
|
|
19
17
|
import { SqliteFactStore } from "./sqlite-fact-store.js";
|
|
20
18
|
import { SqliteSessionStore } from "./sqlite-session-store.js";
|
|
21
19
|
import { SqliteSignalStore } from "./sqlite-signal-store.js";
|
|
20
|
+
import { SqliteWorkstreamStore } from "./sqlite-workstream-store.js";
|
|
22
21
|
import { SourceRegistry } from "../sources/source-registry.js";
|
|
23
22
|
import { ProviderRegistry } from "../providers/provider-registry.js";
|
|
24
23
|
export interface SqliteStorageOptions {
|
|
@@ -30,14 +29,15 @@ export declare class SqliteStorage implements Storage {
|
|
|
30
29
|
readonly facts: SqliteFactStore;
|
|
31
30
|
readonly signals: SqliteSignalStore;
|
|
32
31
|
readonly exemplars: SqliteCodeExemplarStore;
|
|
32
|
+
readonly workstreams: SqliteWorkstreamStore;
|
|
33
|
+
readonly entities: SqliteEntityStore;
|
|
34
|
+
readonly embeddingConfig: SqliteEmbeddingConfigStore;
|
|
33
35
|
readonly sources: SourceRegistry;
|
|
34
36
|
readonly providers: ProviderRegistry;
|
|
35
|
-
private inTxn;
|
|
36
37
|
private constructor();
|
|
37
38
|
static create(opts: SqliteStorageOptions): SqliteStorage;
|
|
38
39
|
init(): Promise<void>;
|
|
39
40
|
close(): Promise<void>;
|
|
40
|
-
withTransaction<T>(fn: (ctx: StorageContext) => T): Promise<T>;
|
|
41
41
|
/**
|
|
42
42
|
* @deprecated SQLite-only escape hatch for callers not yet ported to the
|
|
43
43
|
* Storage interface. Tracked for removal in #215a. Do not use in new code.
|
|
@@ -3,20 +3,19 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Owns the connection. Builds SqliteSessionStore and SqliteFactStore over
|
|
5
5
|
* that single connection so writes commit on one WAL writer (the SQLite
|
|
6
|
-
* atomicity model).
|
|
7
|
-
* `db.transaction()` API and re-runs it inside an async shell so callers
|
|
8
|
-
* can await async work inside the callback (e.g. an embedder call) — but
|
|
9
|
-
* note that the db txn itself is synchronous; do not call long-running
|
|
10
|
-
* async work inside withTransaction or the txn will hold its write lock.
|
|
6
|
+
* atomicity model).
|
|
11
7
|
*
|
|
12
8
|
* rawDb() is a deprecated escape hatch for callers that still use direct
|
|
13
9
|
* better-sqlite3 — scheduler, http actions endpoints, backfill-facts,
|
|
14
10
|
* source/provider registries. Tracked for removal in #215a.
|
|
15
11
|
*/
|
|
16
12
|
import { SqliteCodeExemplarStore } from "./sqlite-code-exemplar-store.js";
|
|
13
|
+
import { SqliteEmbeddingConfigStore } from "./sqlite-embedding-config.js";
|
|
14
|
+
import { SqliteEntityStore } from "./sqlite-entity-store.js";
|
|
17
15
|
import { SqliteFactStore } from "./sqlite-fact-store.js";
|
|
18
16
|
import { SqliteSessionStore } from "./sqlite-session-store.js";
|
|
19
17
|
import { SqliteSignalStore } from "./sqlite-signal-store.js";
|
|
18
|
+
import { SqliteWorkstreamStore } from "./sqlite-workstream-store.js";
|
|
20
19
|
import { SourceRegistry } from "../sources/source-registry.js";
|
|
21
20
|
import { ProviderRegistry } from "../providers/provider-registry.js";
|
|
22
21
|
export class SqliteStorage {
|
|
@@ -24,25 +23,34 @@ export class SqliteStorage {
|
|
|
24
23
|
facts;
|
|
25
24
|
signals;
|
|
26
25
|
exemplars;
|
|
26
|
+
workstreams;
|
|
27
|
+
entities;
|
|
28
|
+
embeddingConfig;
|
|
27
29
|
sources;
|
|
28
30
|
providers;
|
|
29
|
-
|
|
30
|
-
constructor(sessions, facts, signals, exemplars, sources, providers) {
|
|
31
|
+
constructor(sessions, facts, signals, exemplars, workstreams, entities, embeddingConfig, sources, providers) {
|
|
31
32
|
this.sessions = sessions;
|
|
32
33
|
this.facts = facts;
|
|
33
34
|
this.signals = signals;
|
|
34
35
|
this.exemplars = exemplars;
|
|
36
|
+
this.workstreams = workstreams;
|
|
37
|
+
this.entities = entities;
|
|
38
|
+
this.embeddingConfig = embeddingConfig;
|
|
35
39
|
this.sources = sources;
|
|
36
40
|
this.providers = providers;
|
|
37
41
|
}
|
|
38
42
|
static create(opts) {
|
|
39
43
|
const sessions = new SqliteSessionStore(opts);
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
const
|
|
45
|
-
|
|
44
|
+
const db = sessions.rawDb();
|
|
45
|
+
const facts = new SqliteFactStore(db);
|
|
46
|
+
const signals = new SqliteSignalStore(db);
|
|
47
|
+
const exemplars = new SqliteCodeExemplarStore(db);
|
|
48
|
+
const workstreams = new SqliteWorkstreamStore(db);
|
|
49
|
+
const entities = new SqliteEntityStore(db);
|
|
50
|
+
const embeddingConfig = new SqliteEmbeddingConfigStore(db);
|
|
51
|
+
const sources = new SourceRegistry(db);
|
|
52
|
+
const providers = new ProviderRegistry(db);
|
|
53
|
+
return new SqliteStorage(sessions, facts, signals, exemplars, workstreams, entities, embeddingConfig, sources, providers);
|
|
46
54
|
}
|
|
47
55
|
async init() {
|
|
48
56
|
// SqliteSessionStore runs migrations in its constructor today; this is
|
|
@@ -52,25 +60,6 @@ export class SqliteStorage {
|
|
|
52
60
|
async close() {
|
|
53
61
|
this.sessions.close();
|
|
54
62
|
}
|
|
55
|
-
async withTransaction(fn) {
|
|
56
|
-
if (this.inTxn) {
|
|
57
|
-
throw new Error("SqliteStorage.withTransaction does not support nesting");
|
|
58
|
-
}
|
|
59
|
-
this.inTxn = true;
|
|
60
|
-
try {
|
|
61
|
-
let captured;
|
|
62
|
-
const txn = this.sessions.rawDb().transaction(() => {
|
|
63
|
-
const ctx = { facts: this.facts, sessions: this.sessions };
|
|
64
|
-
captured = fn(ctx);
|
|
65
|
-
});
|
|
66
|
-
txn();
|
|
67
|
-
// Cast is safe: a sync throw inside fn propagates out of txn() before we reach here, so the success path always assigned captured.
|
|
68
|
-
return captured;
|
|
69
|
-
}
|
|
70
|
-
finally {
|
|
71
|
-
this.inTxn = false;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
63
|
/**
|
|
75
64
|
* @deprecated SQLite-only escape hatch for callers not yet ported to the
|
|
76
65
|
* Storage interface. Tracked for removal in #215a. Do not use in new code.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-storage.js","sourceRoot":"","sources":["../../../src/core/storage/sqlite-storage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sqlite-storage.js","sourceRoot":"","sources":["../../../src/core/storage/sqlite-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAOxE,MAAM,OAAO,aAAa;IACf,QAAQ,CAAqB;IAC7B,KAAK,CAAkB;IACvB,OAAO,CAAoB;IAC3B,SAAS,CAA0B;IACnC,WAAW,CAAwB;IACnC,QAAQ,CAAoB;IAC5B,eAAe,CAA6B;IAC5C,OAAO,CAAiB;IACxB,SAAS,CAAmB;IAErC,YACE,QAA4B,EAC5B,KAAsB,EACtB,OAA0B,EAC1B,SAAkC,EAClC,WAAkC,EAClC,QAA2B,EAC3B,eAA2C,EAC3C,OAAuB,EACvB,SAA2B;QAE3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAA0B;QACtC,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,eAAe,GAAG,IAAI,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC3C,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5H,CAAC;IAED,KAAK,CAAC,IAAI;QACR,uEAAuE;QACvE,mEAAmE;QACnE,2BAA2B;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
import type { WorkstreamStore } from "../../ports/workstream-store.js";
|
|
3
|
+
import { type Workstream } from "../workstream/model.js";
|
|
4
|
+
export declare class SqliteWorkstreamStore implements WorkstreamStore {
|
|
5
|
+
private readonly db;
|
|
6
|
+
constructor(db: Database.Database);
|
|
7
|
+
create(input: {
|
|
8
|
+
id: string;
|
|
9
|
+
label: string;
|
|
10
|
+
scope: string | null;
|
|
11
|
+
}): Promise<Workstream>;
|
|
12
|
+
getById(id: string): Promise<Workstream | null>;
|
|
13
|
+
findByNormalizedLabel(normalizedLabel: string): Promise<Workstream | null>;
|
|
14
|
+
listAll(): Promise<ReadonlyArray<Workstream>>;
|
|
15
|
+
touchLastSession(id: string, atIso: string): Promise<void>;
|
|
16
|
+
setLabel(id: string, label: string): Promise<void>;
|
|
17
|
+
setStatus(id: string, status: Workstream["status"]): Promise<void>;
|
|
18
|
+
merge(fromId: string, intoId: string): Promise<void>;
|
|
19
|
+
upsertEntities(workstreamId: string, entities: ReadonlyArray<string>): Promise<void>;
|
|
20
|
+
entitiesFor(workstreamIds: ReadonlyArray<string>): Promise<Map<string, string[]>>;
|
|
21
|
+
candidatesByEntityOverlap(entities: ReadonlyArray<string>, limit: number): Promise<ReadonlyArray<{
|
|
22
|
+
workstreamId: string;
|
|
23
|
+
entities: string[];
|
|
24
|
+
}>>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { normalizeLabel } from "../workstream/model.js";
|
|
2
|
+
function rowToWorkstream(r) {
|
|
3
|
+
return {
|
|
4
|
+
id: r.id, label: r.label, status: r.status, mergedInto: r.merged_into,
|
|
5
|
+
createdAt: r.created_at, updatedAt: r.updated_at, lastSessionAt: r.last_session_at,
|
|
6
|
+
scope: r.scope,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export class SqliteWorkstreamStore {
|
|
10
|
+
db;
|
|
11
|
+
constructor(db) {
|
|
12
|
+
this.db = db;
|
|
13
|
+
}
|
|
14
|
+
async create(input) {
|
|
15
|
+
this.db.prepare("INSERT INTO workstreams (id, label, scope) VALUES (?, ?, ?)").run(input.id, input.label, input.scope);
|
|
16
|
+
return (await this.getById(input.id));
|
|
17
|
+
}
|
|
18
|
+
async getById(id) {
|
|
19
|
+
const r = this.db.prepare("SELECT * FROM workstreams WHERE id = ?").get(id);
|
|
20
|
+
return r ? rowToWorkstream(r) : null;
|
|
21
|
+
}
|
|
22
|
+
async findByNormalizedLabel(normalizedLabel) {
|
|
23
|
+
// Small set; normalize in JS to match normalizeLabel semantics exactly.
|
|
24
|
+
const rows = this.db.prepare("SELECT * FROM workstreams").all();
|
|
25
|
+
const hit = rows.find((r) => normalizeLabel(r.label) === normalizedLabel);
|
|
26
|
+
return hit ? rowToWorkstream(hit) : null;
|
|
27
|
+
}
|
|
28
|
+
async listAll() {
|
|
29
|
+
return this.db.prepare("SELECT * FROM workstreams").all().map(rowToWorkstream);
|
|
30
|
+
}
|
|
31
|
+
async touchLastSession(id, atIso) {
|
|
32
|
+
this.db.prepare("UPDATE workstreams SET last_session_at = ?, updated_at = datetime('now') WHERE id = ?").run(atIso, id);
|
|
33
|
+
}
|
|
34
|
+
async setLabel(id, label) {
|
|
35
|
+
this.db.prepare("UPDATE workstreams SET label = ?, updated_at = datetime('now') WHERE id = ?").run(label, id);
|
|
36
|
+
}
|
|
37
|
+
async setStatus(id, status) {
|
|
38
|
+
this.db.prepare("UPDATE workstreams SET status = ?, updated_at = datetime('now') WHERE id = ?").run(status, id);
|
|
39
|
+
}
|
|
40
|
+
async merge(fromId, intoId) {
|
|
41
|
+
const tx = this.db.transaction(() => {
|
|
42
|
+
this.db.prepare("UPDATE workstreams SET merged_into = ?, status = 'merged', updated_at = datetime('now') WHERE id = ?").run(intoId, fromId);
|
|
43
|
+
// Union from's entities into into (sum session_count on PK conflict).
|
|
44
|
+
this.db.prepare(`
|
|
45
|
+
INSERT INTO workstream_entities (workstream_id, entity_canonical, session_count)
|
|
46
|
+
SELECT ?, entity_canonical, session_count FROM workstream_entities WHERE workstream_id = ?
|
|
47
|
+
ON CONFLICT(workstream_id, entity_canonical)
|
|
48
|
+
DO UPDATE SET session_count = session_count + excluded.session_count
|
|
49
|
+
`).run(intoId, fromId);
|
|
50
|
+
this.db.prepare("DELETE FROM workstream_entities WHERE workstream_id = ?").run(fromId);
|
|
51
|
+
});
|
|
52
|
+
tx();
|
|
53
|
+
}
|
|
54
|
+
async upsertEntities(workstreamId, entities) {
|
|
55
|
+
const stmt = this.db.prepare(`
|
|
56
|
+
INSERT INTO workstream_entities (workstream_id, entity_canonical, session_count)
|
|
57
|
+
VALUES (?, ?, 1)
|
|
58
|
+
ON CONFLICT(workstream_id, entity_canonical)
|
|
59
|
+
DO UPDATE SET session_count = session_count + 1
|
|
60
|
+
`);
|
|
61
|
+
const tx = this.db.transaction((names) => {
|
|
62
|
+
for (const n of names) {
|
|
63
|
+
const e = n.trim();
|
|
64
|
+
if (e)
|
|
65
|
+
stmt.run(workstreamId, e);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
tx(entities);
|
|
69
|
+
}
|
|
70
|
+
async entitiesFor(workstreamIds) {
|
|
71
|
+
const out = new Map();
|
|
72
|
+
if (workstreamIds.length === 0)
|
|
73
|
+
return out;
|
|
74
|
+
const ph = workstreamIds.map(() => "?").join(",");
|
|
75
|
+
const rows = this.db.prepare(`SELECT workstream_id, entity_canonical FROM workstream_entities WHERE workstream_id IN (${ph})`).all(...workstreamIds);
|
|
76
|
+
for (const r of rows) {
|
|
77
|
+
const list = out.get(r.workstream_id);
|
|
78
|
+
if (list)
|
|
79
|
+
list.push(r.entity_canonical);
|
|
80
|
+
else
|
|
81
|
+
out.set(r.workstream_id, [r.entity_canonical]);
|
|
82
|
+
}
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
async candidatesByEntityOverlap(entities, limit) {
|
|
86
|
+
const names = entities.map((e) => e.trim()).filter(Boolean);
|
|
87
|
+
if (names.length === 0)
|
|
88
|
+
return [];
|
|
89
|
+
const ph = names.map(() => "?").join(",");
|
|
90
|
+
const ids = this.db.prepare(`SELECT workstream_id, COUNT(*) AS overlap FROM workstream_entities
|
|
91
|
+
WHERE entity_canonical IN (${ph})
|
|
92
|
+
GROUP BY workstream_id ORDER BY overlap DESC LIMIT ?`).all(...names, limit).map((r) => r.workstream_id);
|
|
93
|
+
if (ids.length === 0)
|
|
94
|
+
return [];
|
|
95
|
+
const map = await this.entitiesFor(ids);
|
|
96
|
+
return ids.map((id) => ({ workstreamId: id, entities: map.get(id) ?? [] }));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=sqlite-workstream-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-workstream-store.js","sourceRoot":"","sources":["../../../src/core/storage/sqlite-workstream-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ export async function readSupersedenceLog() {
|
|
|
24
24
|
raw = await readFile(path, "utf8");
|
|
25
25
|
}
|
|
26
26
|
catch {
|
|
27
|
+
// Log file missing or unreadable - no supersedence history recovered.
|
|
27
28
|
return [];
|
|
28
29
|
}
|
|
29
30
|
const results = [];
|
|
@@ -44,6 +45,7 @@ export async function readSupersedenceLog() {
|
|
|
44
45
|
});
|
|
45
46
|
}
|
|
46
47
|
catch {
|
|
48
|
+
// Malformed entry in log - skip and continue parsing.
|
|
47
49
|
continue;
|
|
48
50
|
}
|
|
49
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supersedence-log.js","sourceRoot":"","sources":["../../../src/core/storage/supersedence-log.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"supersedence-log.js","sourceRoot":"","sources":["../../../src/core/storage/supersedence-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Probe and test traffic filter.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for classifying recall queries as probe/test traffic.
|
|
5
|
+
* Used by the digest composer (to strip probes from displayed counters) and by
|
|
6
|
+
* the pull-usefulness eval script (to strip probes from the scored baseline).
|
|
7
|
+
*
|
|
8
|
+
* Two match strategies with different trade-offs:
|
|
9
|
+
*
|
|
10
|
+
* Substring match (PROBE_SUBSTRINGS / isProbe):
|
|
11
|
+
* Catches probe traffic regardless of surrounding words. Accepted trade-off:
|
|
12
|
+
* any query containing the word "probe" -- including "how did we probe the API"
|
|
13
|
+
* -- will be stripped. In practice, probe traffic is always labelled with the
|
|
14
|
+
* bare word; real agent queries rarely include "probe" as a term. The
|
|
15
|
+
* alternative (exact-match "probe") would miss operational variants like
|
|
16
|
+
* "system probe" and "probing X", so substring is the right default for the
|
|
17
|
+
* digest composer path.
|
|
18
|
+
*
|
|
19
|
+
* Exact match (PROBE_EXACT_QUERIES):
|
|
20
|
+
* Required for pull-usefulness.ts. That script was baseline-calibrated at
|
|
21
|
+
* 72.4% genuine-pull using this exact set. Switching it to substring matching
|
|
22
|
+
* would silently change the denominator and invalidate historical comparisons.
|
|
23
|
+
* "x" and "" cannot be substring-matched -- a single character would strip
|
|
24
|
+
* virtually every query. They live here as exact entries only.
|
|
25
|
+
*/
|
|
26
|
+
/** Substrings that mark a recall query as probe/test traffic. */
|
|
27
|
+
export declare const PROBE_SUBSTRINGS: ReadonlyArray<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Queries that are probe traffic only when the full query (trimmed, lowercased)
|
|
30
|
+
* is an exact match. "x" and "" are single-character or empty -- substring
|
|
31
|
+
* matching them would strip real queries.
|
|
32
|
+
*/
|
|
33
|
+
export declare const PROBE_EXACT_QUERIES: ReadonlySet<string>;
|
|
34
|
+
/** True when the query is recognisably probe/test traffic by either strategy. */
|
|
35
|
+
export declare function isProbe(query: string | null | undefined): boolean;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Probe and test traffic filter.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for classifying recall queries as probe/test traffic.
|
|
5
|
+
* Used by the digest composer (to strip probes from displayed counters) and by
|
|
6
|
+
* the pull-usefulness eval script (to strip probes from the scored baseline).
|
|
7
|
+
*
|
|
8
|
+
* Two match strategies with different trade-offs:
|
|
9
|
+
*
|
|
10
|
+
* Substring match (PROBE_SUBSTRINGS / isProbe):
|
|
11
|
+
* Catches probe traffic regardless of surrounding words. Accepted trade-off:
|
|
12
|
+
* any query containing the word "probe" -- including "how did we probe the API"
|
|
13
|
+
* -- will be stripped. In practice, probe traffic is always labelled with the
|
|
14
|
+
* bare word; real agent queries rarely include "probe" as a term. The
|
|
15
|
+
* alternative (exact-match "probe") would miss operational variants like
|
|
16
|
+
* "system probe" and "probing X", so substring is the right default for the
|
|
17
|
+
* digest composer path.
|
|
18
|
+
*
|
|
19
|
+
* Exact match (PROBE_EXACT_QUERIES):
|
|
20
|
+
* Required for pull-usefulness.ts. That script was baseline-calibrated at
|
|
21
|
+
* 72.4% genuine-pull using this exact set. Switching it to substring matching
|
|
22
|
+
* would silently change the denominator and invalidate historical comparisons.
|
|
23
|
+
* "x" and "" cannot be substring-matched -- a single character would strip
|
|
24
|
+
* virtually every query. They live here as exact entries only.
|
|
25
|
+
*/
|
|
26
|
+
/** Substrings that mark a recall query as probe/test traffic. */
|
|
27
|
+
export const PROBE_SUBSTRINGS = [
|
|
28
|
+
// "concurrency probe" and "test probe" are redundant: "probe" covers both.
|
|
29
|
+
"probe",
|
|
30
|
+
"beacon",
|
|
31
|
+
"smoke",
|
|
32
|
+
"path test",
|
|
33
|
+
"recall test",
|
|
34
|
+
"cutover-test",
|
|
35
|
+
];
|
|
36
|
+
/**
|
|
37
|
+
* Queries that are probe traffic only when the full query (trimmed, lowercased)
|
|
38
|
+
* is an exact match. "x" and "" are single-character or empty -- substring
|
|
39
|
+
* matching them would strip real queries.
|
|
40
|
+
*/
|
|
41
|
+
export const PROBE_EXACT_QUERIES = new Set([
|
|
42
|
+
"pgvector",
|
|
43
|
+
"hono",
|
|
44
|
+
"x",
|
|
45
|
+
"",
|
|
46
|
+
]);
|
|
47
|
+
/** True when the query is recognisably probe/test traffic by either strategy. */
|
|
48
|
+
export function isProbe(query) {
|
|
49
|
+
if (query === null || query === undefined)
|
|
50
|
+
return false;
|
|
51
|
+
const q = query.trim().toLowerCase();
|
|
52
|
+
if (PROBE_EXACT_QUERIES.has(q))
|
|
53
|
+
return true;
|
|
54
|
+
return PROBE_SUBSTRINGS.some((p) => q.includes(p));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=probe-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe-filter.js","sourceRoot":"","sources":["../../../src/core/telemetry/probe-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAA0B;IACrD,2EAA2E;IAC3E,OAAO;IACP,QAAQ;IACR,OAAO;IACP,WAAW;IACX,aAAa;IACb,cAAc;CACf,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC;IAC9D,UAAU;IACV,MAAM;IACN,GAAG;IACH,EAAE;CACH,CAAC,CAAC;AAEH,iFAAiF;AACjF,MAAM,UAAU,OAAO,CAAC,KAAgC;IACtD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -41,6 +41,12 @@ export interface UpdateCheckDeps {
|
|
|
41
41
|
readonly fetchImpl?: typeof fetch;
|
|
42
42
|
}
|
|
43
43
|
export declare function getUpdateStatus(deps: UpdateCheckDeps): Promise<UpdateStatus>;
|
|
44
|
+
/**
|
|
45
|
+
* Cache-only read: never fetches the registry, even on a miss or a stale
|
|
46
|
+
* (>24h) entry. For request paths (like GET /api/health) that must stay
|
|
47
|
+
* fast and never depend on npm being reachable.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getCachedUpdateStatus(deps: Pick<UpdateCheckDeps, "currentVersion" | "cachePath" | "now">): Promise<UpdateStatus>;
|
|
44
50
|
/**
|
|
45
51
|
* Strict semver-newer check on simple `X.Y.Z` versions. Pre-release tags
|
|
46
52
|
* (`-rc.1`, `-beta`) sort BEFORE the bare version per semver, which is
|
|
@@ -74,6 +74,41 @@ export async function getUpdateStatus(deps) {
|
|
|
74
74
|
});
|
|
75
75
|
return status;
|
|
76
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Cache-only read: never fetches the registry, even on a miss or a stale
|
|
79
|
+
* (>24h) entry. For request paths (like GET /api/health) that must stay
|
|
80
|
+
* fast and never depend on npm being reachable.
|
|
81
|
+
*/
|
|
82
|
+
export async function getCachedUpdateStatus(deps) {
|
|
83
|
+
const now = (deps.now ?? (() => new Date()))();
|
|
84
|
+
const current = deps.currentVersion;
|
|
85
|
+
if (isOptedOut()) {
|
|
86
|
+
return {
|
|
87
|
+
current,
|
|
88
|
+
latest: null,
|
|
89
|
+
behind: false,
|
|
90
|
+
checkedAt: now.toISOString(),
|
|
91
|
+
disabled: "user-opt-out",
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const cachePath = deps.cachePath ?? defaultCachePath();
|
|
95
|
+
const cached = await readCache(cachePath);
|
|
96
|
+
if (!cached) {
|
|
97
|
+
return {
|
|
98
|
+
current,
|
|
99
|
+
latest: null,
|
|
100
|
+
behind: false,
|
|
101
|
+
checkedAt: now.toISOString(),
|
|
102
|
+
disabled: "unknown-error",
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
current,
|
|
107
|
+
latest: cached.latest,
|
|
108
|
+
behind: cached.latest !== null && isStrictlyNewer(cached.latest, current),
|
|
109
|
+
checkedAt: cached.checkedAt,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
77
112
|
async function readCache(path) {
|
|
78
113
|
try {
|
|
79
114
|
const raw = await readFile(path, "utf8");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/core/update-check/check.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/core/update-check/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Interval } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Collapse a session's message timestamps into activity intervals. Consecutive
|
|
4
|
+
* messages no more than `idleThresholdMin` apart belong to the same span; a
|
|
5
|
+
* larger gap means the operator was away and starts a new span. A lone message
|
|
6
|
+
* yields a zero-length span (it marks activity but adds no minutes).
|
|
7
|
+
*/
|
|
8
|
+
export declare function activeSpans(timestampsMs: ReadonlyArray<number>, idleThresholdMin: number): Interval[];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collapse a session's message timestamps into activity intervals. Consecutive
|
|
3
|
+
* messages no more than `idleThresholdMin` apart belong to the same span; a
|
|
4
|
+
* larger gap means the operator was away and starts a new span. A lone message
|
|
5
|
+
* yields a zero-length span (it marks activity but adds no minutes).
|
|
6
|
+
*/
|
|
7
|
+
export function activeSpans(timestampsMs, idleThresholdMin) {
|
|
8
|
+
const ts = [...timestampsMs].sort((a, b) => a - b);
|
|
9
|
+
if (ts.length === 0)
|
|
10
|
+
return [];
|
|
11
|
+
const gapMs = idleThresholdMin * 60_000;
|
|
12
|
+
const spans = [];
|
|
13
|
+
let start = ts[0];
|
|
14
|
+
let prev = ts[0];
|
|
15
|
+
for (let i = 1; i < ts.length; i++) {
|
|
16
|
+
const t = ts[i];
|
|
17
|
+
if (t - prev <= gapMs) {
|
|
18
|
+
prev = t;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
spans.push({ start, end: prev });
|
|
22
|
+
start = t;
|
|
23
|
+
prev = t;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
spans.push({ start, end: prev });
|
|
27
|
+
return spans;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=active-spans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-spans.js","sourceRoot":"","sources":["../../../src/core/work-digest/active-spans.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,YAAmC,EACnC,gBAAwB;IAExB,MAAM,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,gBAAgB,GAAG,MAAM,CAAC;IACxC,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC;IACnB,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC;QACjB,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACjC,KAAK,GAAG,CAAC,CAAC;YACV,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Interval, SessionActivity, TopicShare, FocusStats } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Attribute each merged active interval to a topic and derive attention +
|
|
4
|
+
* focus. v1 uses dominant-session attribution: the whole interval goes to the
|
|
5
|
+
* session with the most messages in it (the bounded simplification over
|
|
6
|
+
* fractional splitting documented in the design). Focus is derived from the
|
|
7
|
+
* ordered, attributed segments: adjacent same-topic segments collapse into
|
|
8
|
+
* blocks; a topic change between blocks is one context switch.
|
|
9
|
+
*/
|
|
10
|
+
export declare function attribute(merged: ReadonlyArray<Interval>, sessions: ReadonlyArray<SessionActivity>, opts: {
|
|
11
|
+
deepBlockMin: number;
|
|
12
|
+
}): {
|
|
13
|
+
byTopic: TopicShare[];
|
|
14
|
+
focus: FocusStats;
|
|
15
|
+
};
|