nlm-memory 0.21.0 → 0.21.13
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 +67 -12
- package/assets/replay-eval-dark.svg +26 -0
- package/assets/replay-eval-light.svg +26 -0
- package/dist/cli/digest.js +34 -7
- package/dist/cli/digest.js.map +1 -1
- package/dist/cli/nlm.d.ts +14 -0
- package/dist/cli/nlm.js +450 -65
- package/dist/cli/nlm.js.map +1 -1
- package/dist/cli/reprocess-job-adapters.d.ts +35 -0
- package/dist/cli/reprocess-job-adapters.js +80 -0
- package/dist/cli/reprocess-job-adapters.js.map +1 -0
- package/dist/cli/scope-coverage.js +4 -1
- package/dist/cli/scope-coverage.js.map +1 -1
- package/dist/cli/supersede.js +8 -7
- package/dist/cli/supersede.js.map +1 -1
- package/dist/core/actions/actions-log.d.ts +65 -8
- package/dist/core/actions/actions-log.js +134 -17
- package/dist/core/actions/actions-log.js.map +1 -1
- package/dist/core/actions/overlay.d.ts +11 -2
- package/dist/core/actions/overlay.js +18 -6
- package/dist/core/actions/overlay.js.map +1 -1
- package/dist/core/adapters/from-source.js +11 -3
- package/dist/core/adapters/from-source.js.map +1 -1
- package/dist/core/adapters/fs-wiki-writer.d.ts +44 -0
- package/dist/core/adapters/fs-wiki-writer.js +132 -0
- package/dist/core/adapters/fs-wiki-writer.js.map +1 -0
- package/dist/core/adapters/hermes-agent.d.ts +15 -2
- package/dist/core/adapters/hermes-agent.js +57 -11
- package/dist/core/adapters/hermes-agent.js.map +1 -1
- package/dist/core/adapters/memory-wiki-writer.d.ts +8 -0
- package/dist/core/adapters/memory-wiki-writer.js +16 -0
- package/dist/core/adapters/memory-wiki-writer.js.map +1 -0
- package/dist/core/adapters/muse.d.ts +51 -0
- package/dist/core/adapters/muse.js +271 -0
- package/dist/core/adapters/muse.js.map +1 -0
- package/dist/core/adapters/opencode.d.ts +11 -4
- package/dist/core/adapters/opencode.js +41 -7
- package/dist/core/adapters/opencode.js.map +1 -1
- package/dist/core/alerts/alert-state.d.ts +17 -0
- package/dist/core/alerts/alert-state.js +45 -0
- package/dist/core/alerts/alert-state.js.map +1 -0
- package/dist/core/alerts/check-and-alert.d.ts +28 -0
- package/dist/core/alerts/check-and-alert.js +53 -0
- package/dist/core/alerts/check-and-alert.js.map +1 -0
- package/dist/core/alerts/drift-transition.d.ts +27 -0
- package/dist/core/alerts/drift-transition.js +56 -0
- package/dist/core/alerts/drift-transition.js.map +1 -0
- package/dist/core/alerts/embedder-transition.d.ts +23 -0
- package/dist/core/alerts/embedder-transition.js +40 -0
- package/dist/core/alerts/embedder-transition.js.map +1 -0
- package/dist/core/alerts/fire-alert.d.ts +24 -0
- package/dist/core/alerts/fire-alert.js +72 -0
- package/dist/core/alerts/fire-alert.js.map +1 -0
- package/dist/core/alerts/job-alert.d.ts +12 -0
- package/dist/core/alerts/job-alert.js +37 -0
- package/dist/core/alerts/job-alert.js.map +1 -0
- package/dist/core/alerts/types.d.ts +104 -0
- package/dist/core/alerts/types.js +11 -0
- package/dist/core/alerts/types.js.map +1 -0
- package/dist/core/alerts/wiki-alert.d.ts +15 -0
- package/dist/core/alerts/wiki-alert.js +31 -0
- package/dist/core/alerts/wiki-alert.js.map +1 -0
- package/dist/core/classifier/prompt.d.ts +13 -0
- package/dist/core/classifier/prompt.js +52 -2
- package/dist/core/classifier/prompt.js.map +1 -1
- package/dist/core/dataset/build-dataset.d.ts +16 -1
- package/dist/core/dataset/build-dataset.js +105 -45
- package/dist/core/dataset/build-dataset.js.map +1 -1
- package/dist/core/digest/compose.d.ts +8 -0
- package/dist/core/digest/compose.js +54 -0
- package/dist/core/digest/compose.js.map +1 -1
- package/dist/core/digest/hook-injection.d.ts +1 -1
- package/dist/core/digest/hook-injection.js +9 -1
- package/dist/core/digest/hook-injection.js.map +1 -1
- package/dist/core/digest/hook-version-parity.d.ts +31 -0
- package/dist/core/digest/hook-version-parity.js +56 -0
- package/dist/core/digest/hook-version-parity.js.map +1 -0
- package/dist/core/embedding/pg-embed-backfill.js +1 -1
- package/dist/core/embedding/pg-embed-backfill.js.map +1 -1
- package/dist/core/exemplars/capture-from-session.d.ts +1 -1
- package/dist/core/exemplars/capture-from-session.js +3 -3
- package/dist/core/exemplars/capture-from-session.js.map +1 -1
- package/dist/core/exemplars/embed-backfill.d.ts +9 -0
- package/dist/core/exemplars/embed-backfill.js +9 -1
- package/dist/core/exemplars/embed-backfill.js.map +1 -1
- package/dist/core/exemplars/recall-code.d.ts +1 -1
- package/dist/core/exemplars/recall-code.js +2 -2
- package/dist/core/exemplars/recall-code.js.map +1 -1
- package/dist/core/facts/backfill-facts.d.ts +1 -1
- package/dist/core/facts/backfill-facts.js +4 -4
- package/dist/core/facts/backfill-facts.js.map +1 -1
- package/dist/core/facts/embed-backfill.d.ts +54 -0
- package/dist/core/facts/embed-backfill.js +109 -0
- package/dist/core/facts/embed-backfill.js.map +1 -0
- package/dist/core/facts/reconcile-facts.d.ts +42 -0
- package/dist/core/facts/reconcile-facts.js +133 -0
- package/dist/core/facts/reconcile-facts.js.map +1 -0
- package/dist/core/health/embed-failure-state.d.ts +4 -0
- package/dist/core/health/embed-failure-state.js +12 -0
- package/dist/core/health/embed-failure-state.js.map +1 -0
- package/dist/core/health/warmup-retry.d.ts +27 -0
- package/dist/core/health/warmup-retry.js +53 -0
- package/dist/core/health/warmup-retry.js.map +1 -0
- package/dist/core/health/warmup-state.d.ts +15 -0
- package/dist/core/health/warmup-state.js +15 -1
- package/dist/core/health/warmup-state.js.map +1 -1
- package/dist/core/hook/cite-memo.d.ts +11 -7
- package/dist/core/hook/cite-memo.js +25 -17
- package/dist/core/hook/cite-memo.js.map +1 -1
- package/dist/core/hook/hook-log.d.ts +13 -2
- package/dist/core/hook/hook-log.js +16 -8
- package/dist/core/hook/hook-log.js.map +1 -1
- package/dist/core/hook/memo.d.ts +10 -6
- package/dist/core/hook/memo.js +25 -17
- package/dist/core/hook/memo.js.map +1 -1
- package/dist/core/hook/pointer-block.d.ts +8 -1
- package/dist/core/hook/pointer-block.js +17 -4
- package/dist/core/hook/pointer-block.js.map +1 -1
- package/dist/core/hook/resolve-conversation-by-query.d.ts +6 -5
- package/dist/core/hook/resolve-conversation-by-query.js +24 -12
- package/dist/core/hook/resolve-conversation-by-query.js.map +1 -1
- package/dist/core/ingest/ingest-session.d.ts +1 -1
- package/dist/core/ingest/ingest-session.js +3 -3
- package/dist/core/ingest/ingest-session.js.map +1 -1
- package/dist/core/ingest/reclassify-oversized.d.ts +1 -1
- package/dist/core/ingest/reclassify-oversized.js +2 -2
- package/dist/core/ingest/reclassify-oversized.js.map +1 -1
- package/dist/core/ingest/reprocess.d.ts +1 -1
- package/dist/core/ingest/reprocess.js +2 -2
- package/dist/core/ingest/reprocess.js.map +1 -1
- package/dist/core/jobs/job-supervisor.d.ts +168 -0
- package/dist/core/jobs/job-supervisor.js +335 -0
- package/dist/core/jobs/job-supervisor.js.map +1 -0
- package/dist/core/learner/model.d.ts +63 -0
- package/dist/core/learner/model.js +30 -0
- package/dist/core/learner/model.js.map +1 -0
- package/dist/core/learner/service.d.ts +42 -0
- package/dist/core/learner/service.js +74 -0
- package/dist/core/learner/service.js.map +1 -0
- package/dist/core/learner/summary.d.ts +28 -0
- package/dist/core/learner/summary.js +70 -0
- package/dist/core/learner/summary.js.map +1 -0
- package/dist/core/learner/validate.d.ts +18 -0
- package/dist/core/learner/validate.js +95 -0
- package/dist/core/learner/validate.js.map +1 -0
- package/dist/core/metrics/re-derivation.d.ts +31 -2
- package/dist/core/metrics/re-derivation.js +36 -4
- package/dist/core/metrics/re-derivation.js.map +1 -1
- package/dist/core/outcome/coverage.d.ts +1 -1
- package/dist/core/outcome/coverage.js +2 -2
- package/dist/core/outcome/coverage.js.map +1 -1
- package/dist/core/outcome/rollup.d.ts +1 -1
- package/dist/core/outcome/rollup.js +4 -4
- package/dist/core/outcome/rollup.js.map +1 -1
- package/dist/core/providers/provider-registry.d.ts +40 -23
- package/dist/core/providers/provider-registry.js +99 -81
- package/dist/core/providers/provider-registry.js.map +1 -1
- package/dist/core/recall/citation-log.d.ts +10 -5
- package/dist/core/recall/citation-log.js +21 -10
- package/dist/core/recall/citation-log.js.map +1 -1
- package/dist/core/recall/hook-recall-log.d.ts +5 -2
- package/dist/core/recall/hook-recall-log.js +12 -6
- package/dist/core/recall/hook-recall-log.js.map +1 -1
- package/dist/core/recall/miss-log.d.ts +7 -4
- package/dist/core/recall/miss-log.js +18 -11
- package/dist/core/recall/miss-log.js.map +1 -1
- package/dist/core/recall/query-log.d.ts +8 -5
- package/dist/core/recall/query-log.js +16 -9
- package/dist/core/recall/query-log.js.map +1 -1
- package/dist/core/recall/recall-service.d.ts +10 -1
- package/dist/core/recall/recall-service.js +31 -12
- package/dist/core/recall/recall-service.js.map +1 -1
- package/dist/core/recall/recent-log.d.ts +6 -1
- package/dist/core/recall/recent-log.js +13 -5
- package/dist/core/recall/recent-log.js.map +1 -1
- package/dist/core/recall/related-concepts.d.ts +29 -0
- package/dist/core/recall/related-concepts.js +67 -0
- package/dist/core/recall/related-concepts.js.map +1 -0
- package/dist/core/recall/related-exemplars.d.ts +1 -1
- package/dist/core/recall/related-exemplars.js +2 -2
- package/dist/core/recall/related-exemplars.js.map +1 -1
- package/dist/core/recall/related-facts.d.ts +1 -1
- package/dist/core/recall/related-facts.js +3 -3
- package/dist/core/recall/related-facts.js.map +1 -1
- package/dist/core/recall-facts/fact-query-log.d.ts +8 -4
- package/dist/core/recall-facts/fact-query-log.js +16 -8
- package/dist/core/recall-facts/fact-query-log.js.map +1 -1
- package/dist/core/recall-facts/fact-recall-service.d.ts +2 -2
- package/dist/core/recall-facts/fact-recall-service.js +12 -12
- package/dist/core/recall-facts/fact-recall-service.js.map +1 -1
- package/dist/core/scheduler/scan-once.js +15 -14
- package/dist/core/scheduler/scan-once.js.map +1 -1
- package/dist/core/scheduler/scheduler.d.ts +3 -0
- package/dist/core/scheduler/scheduler.js +15 -11
- package/dist/core/scheduler/scheduler.js.map +1 -1
- package/dist/core/signals/failure-mode-recall.d.ts +1 -1
- package/dist/core/signals/failure-mode-recall.js +2 -2
- package/dist/core/signals/failure-mode-recall.js.map +1 -1
- package/dist/core/signals/stamp-scope.d.ts +2 -2
- package/dist/core/signals/stamp-scope.js +2 -2
- package/dist/core/signals/stamp-scope.js.map +1 -1
- package/dist/core/sources/source-registry.d.ts +49 -28
- package/dist/core/sources/source-registry.js +113 -70
- package/dist/core/sources/source-registry.js.map +1 -1
- package/dist/core/storage/pg-code-exemplar-store.d.ts +19 -10
- package/dist/core/storage/pg-code-exemplar-store.js +58 -27
- package/dist/core/storage/pg-code-exemplar-store.js.map +1 -1
- package/dist/core/storage/pg-entity-store.d.ts +6 -1
- package/dist/core/storage/pg-entity-store.js +33 -18
- package/dist/core/storage/pg-entity-store.js.map +1 -1
- package/dist/core/storage/pg-fact-ingest.d.ts +1 -1
- package/dist/core/storage/pg-fact-ingest.js +10 -7
- package/dist/core/storage/pg-fact-ingest.js.map +1 -1
- package/dist/core/storage/pg-fact-store.d.ts +29 -17
- package/dist/core/storage/pg-fact-store.js +99 -46
- package/dist/core/storage/pg-fact-store.js.map +1 -1
- package/dist/core/storage/pg-learner-store.d.ts +27 -0
- package/dist/core/storage/pg-learner-store.js +174 -0
- package/dist/core/storage/pg-learner-store.js.map +1 -0
- package/dist/core/storage/pg-session-store.d.ts +24 -20
- package/dist/core/storage/pg-session-store.js +162 -90
- package/dist/core/storage/pg-session-store.js.map +1 -1
- package/dist/core/storage/pg-signal-store.d.ts +10 -5
- package/dist/core/storage/pg-signal-store.js +24 -12
- package/dist/core/storage/pg-signal-store.js.map +1 -1
- package/dist/core/storage/pg-storage.d.ts +4 -0
- package/dist/core/storage/pg-storage.js +6 -0
- package/dist/core/storage/pg-storage.js.map +1 -1
- package/dist/core/storage/pg-workstream-store.d.ts +16 -11
- package/dist/core/storage/pg-workstream-store.js +46 -29
- package/dist/core/storage/pg-workstream-store.js.map +1 -1
- package/dist/core/storage/sqlite-code-exemplar-store.d.ts +24 -10
- package/dist/core/storage/sqlite-code-exemplar-store.js +84 -40
- package/dist/core/storage/sqlite-code-exemplar-store.js.map +1 -1
- package/dist/core/storage/sqlite-entity-store.d.ts +8 -1
- package/dist/core/storage/sqlite-entity-store.js +46 -27
- package/dist/core/storage/sqlite-entity-store.js.map +1 -1
- package/dist/core/storage/sqlite-fact-store.d.ts +45 -19
- package/dist/core/storage/sqlite-fact-store.js +172 -64
- package/dist/core/storage/sqlite-fact-store.js.map +1 -1
- package/dist/core/storage/sqlite-learner-store.d.ts +33 -0
- package/dist/core/storage/sqlite-learner-store.js +178 -0
- package/dist/core/storage/sqlite-learner-store.js.map +1 -0
- package/dist/core/storage/sqlite-outcome-store.d.ts +37 -22
- package/dist/core/storage/sqlite-outcome-store.js +90 -37
- package/dist/core/storage/sqlite-outcome-store.js.map +1 -1
- package/dist/core/storage/sqlite-session-store.d.ts +29 -20
- package/dist/core/storage/sqlite-session-store.js +207 -121
- package/dist/core/storage/sqlite-session-store.js.map +1 -1
- package/dist/core/storage/sqlite-signal-store.d.ts +12 -5
- package/dist/core/storage/sqlite-signal-store.js +27 -15
- package/dist/core/storage/sqlite-signal-store.js.map +1 -1
- package/dist/core/storage/sqlite-storage.d.ts +4 -0
- package/dist/core/storage/sqlite-storage.js +10 -2
- package/dist/core/storage/sqlite-storage.js.map +1 -1
- package/dist/core/storage/sqlite-workstream-store.d.ts +16 -11
- package/dist/core/storage/sqlite-workstream-store.js +52 -31
- package/dist/core/storage/sqlite-workstream-store.js.map +1 -1
- package/dist/core/storage/supersedence-log.d.ts +10 -7
- package/dist/core/storage/supersedence-log.js +19 -14
- package/dist/core/storage/supersedence-log.js.map +1 -1
- package/dist/core/tenancy/default-team.d.ts +6 -0
- package/dist/core/tenancy/default-team.js +7 -0
- package/dist/core/tenancy/default-team.js.map +1 -0
- package/dist/core/tenancy/hosted-mode.d.ts +9 -0
- package/dist/core/tenancy/hosted-mode.js +12 -0
- package/dist/core/tenancy/hosted-mode.js.map +1 -0
- package/dist/core/tenancy/team-auth.d.ts +16 -0
- package/dist/core/tenancy/team-auth.js +22 -0
- package/dist/core/tenancy/team-auth.js.map +1 -0
- package/dist/core/tenancy/team-token-store.d.ts +45 -0
- package/dist/core/tenancy/team-token-store.js +52 -0
- package/dist/core/tenancy/team-token-store.js.map +1 -0
- package/dist/core/tenancy/tenant-clause.d.ts +37 -0
- package/dist/core/tenancy/tenant-clause.js +11 -0
- package/dist/core/tenancy/tenant-clause.js.map +1 -0
- package/dist/core/tenancy/tenant-state-path.d.ts +28 -0
- package/dist/core/tenancy/tenant-state-path.js +49 -0
- package/dist/core/tenancy/tenant-state-path.js.map +1 -0
- package/dist/core/wiki/project.d.ts +17 -0
- package/dist/core/wiki/project.js +37 -0
- package/dist/core/wiki/project.js.map +1 -0
- package/dist/core/wiki/reconcile.d.ts +15 -0
- package/dist/core/wiki/reconcile.js +14 -0
- package/dist/core/wiki/reconcile.js.map +1 -0
- package/dist/core/wiki/render.d.ts +5 -0
- package/dist/core/wiki/render.js +84 -0
- package/dist/core/wiki/render.js.map +1 -0
- package/dist/core/wiki/rollup.d.ts +28 -0
- package/dist/core/wiki/rollup.js +91 -0
- package/dist/core/wiki/rollup.js.map +1 -0
- package/dist/core/wiki/select.d.ts +8 -0
- package/dist/core/wiki/select.js +7 -0
- package/dist/core/wiki/select.js.map +1 -0
- package/dist/core/wiki/slug.d.ts +36 -0
- package/dist/core/wiki/slug.js +71 -0
- package/dist/core/wiki/slug.js.map +1 -0
- package/dist/core/wiki/types.d.ts +37 -0
- package/dist/core/wiki/types.js +2 -0
- package/dist/core/wiki/types.js.map +1 -0
- package/dist/core/work-digest/build-work-digest.d.ts +1 -1
- package/dist/core/work-digest/build-work-digest.js +3 -3
- package/dist/core/work-digest/build-work-digest.js.map +1 -1
- package/dist/core/workstream/bind.d.ts +1 -1
- package/dist/core/workstream/bind.js +10 -10
- package/dist/core/workstream/bind.js.map +1 -1
- package/dist/core/workstream/rollup.d.ts +1 -1
- package/dist/core/workstream/rollup.js +6 -6
- package/dist/core/workstream/rollup.js.map +1 -1
- package/dist/hook/hook-helpers.d.ts +14 -0
- package/dist/hook/hook-helpers.js +29 -2
- package/dist/hook/hook-helpers.js.map +1 -1
- package/dist/hook/pre-compact-hook.js +6 -4
- package/dist/hook/pre-compact-hook.js.map +1 -1
- package/dist/hook/prompt-recall-hook.d.ts +5 -2
- package/dist/hook/prompt-recall-hook.js +28 -17
- package/dist/hook/prompt-recall-hook.js.map +1 -1
- package/dist/hook/recall-over-http.d.ts +27 -3
- package/dist/hook/recall-over-http.js +44 -11
- package/dist/hook/recall-over-http.js.map +1 -1
- package/dist/hook/session-end-hook.js +7 -5
- package/dist/hook/session-end-hook.js.map +1 -1
- package/dist/hook/session-start-hook.d.ts +14 -1
- package/dist/hook/session-start-hook.js +55 -15
- package/dist/hook/session-start-hook.js.map +1 -1
- package/dist/hook/stop-hook.js +9 -7
- package/dist/hook/stop-hook.js.map +1 -1
- package/dist/http/app.d.ts +41 -3
- package/dist/http/app.js +355 -96
- package/dist/http/app.js.map +1 -1
- package/dist/install/claude-code.d.ts +17 -0
- package/dist/install/claude-code.js +44 -5
- package/dist/install/claude-code.js.map +1 -1
- package/dist/install/codex.d.ts +23 -2
- package/dist/install/codex.js +111 -14
- package/dist/install/codex.js.map +1 -1
- package/dist/install/cursor.d.ts +2 -2
- package/dist/install/cursor.js +7 -7
- package/dist/install/cursor.js.map +1 -1
- package/dist/install/hermes.d.ts +8 -0
- package/dist/install/hermes.js +28 -5
- package/dist/install/hermes.js.map +1 -1
- package/dist/install/local-source.d.ts +20 -0
- package/dist/install/local-source.js +28 -0
- package/dist/install/local-source.js.map +1 -0
- package/dist/install/mcp-block.d.ts +77 -0
- package/dist/install/mcp-block.js +99 -0
- package/dist/install/mcp-block.js.map +1 -0
- package/dist/install/pi.d.ts +26 -0
- package/dist/install/pi.js +43 -0
- package/dist/install/pi.js.map +1 -1
- package/dist/install/setup.js +6 -0
- package/dist/install/setup.js.map +1 -1
- package/dist/install/windsurf.d.ts +2 -2
- package/dist/install/windsurf.js +7 -7
- package/dist/install/windsurf.js.map +1 -1
- package/dist/llm/classifier-box.d.ts +5 -0
- package/dist/llm/classifier-box.js +5 -0
- package/dist/llm/classifier-box.js.map +1 -1
- package/dist/mcp/server.d.ts +73 -16
- package/dist/mcp/server.js +306 -83
- package/dist/mcp/server.js.map +1 -1
- package/dist/ports/clock.d.ts +12 -0
- package/dist/ports/clock.js +10 -0
- package/dist/ports/clock.js.map +1 -0
- package/dist/ports/code-exemplar-store.d.ts +13 -13
- package/dist/ports/entity-store.d.ts +5 -1
- package/dist/ports/fact-store.d.ts +0 -0
- package/dist/ports/fact-store.js +0 -0
- package/dist/ports/fact-store.js.map +1 -1
- package/dist/ports/learner-store.d.ts +80 -0
- package/dist/ports/learner-store.js +19 -0
- package/dist/ports/learner-store.js.map +1 -0
- package/dist/ports/outcome.d.ts +3 -3
- package/dist/ports/session-store.d.ts +20 -14
- package/dist/ports/session-store.js +5 -0
- package/dist/ports/session-store.js.map +1 -1
- package/dist/ports/signal-store.d.ts +12 -8
- package/dist/ports/spawn-child.d.ts +14 -0
- package/dist/ports/spawn-child.js +10 -0
- package/dist/ports/spawn-child.js.map +1 -0
- package/dist/ports/storage.d.ts +6 -0
- package/dist/ports/transcript-adapter.d.ts +11 -0
- package/dist/ports/wiki-writer.d.ts +19 -0
- package/dist/ports/wiki-writer.js +12 -0
- package/dist/ports/wiki-writer.js.map +1 -0
- package/dist/ports/workstream-store.d.ts +19 -12
- package/dist/shared/types.d.ts +22 -0
- package/dist/shared/types.js.map +1 -1
- package/dist/shared/version.d.ts +9 -0
- package/dist/shared/version.js +11 -0
- package/dist/shared/version.js.map +1 -0
- package/dist/ui/assets/index-D6F3xAis.js +11 -0
- package/dist/ui/index.html +1 -1
- package/migrations/033_actions_kind_check.sql +58 -0
- package/migrations/034_tenancy_teams_and_stamps.sql +40 -0
- package/migrations/035_tenancy_entity_rekey.sql +75 -0
- package/migrations/036_tenant_name_uniqueness.sql +59 -0
- package/migrations/037_sessions_covering_index.sql +25 -0
- package/migrations/038_sources_muse.sql +33 -0
- package/migrations/039_learner_evidence.sql +51 -0
- package/migrations/pg/033_actions_kind_check.sql +17 -0
- package/migrations/pg/034_tenancy.sql +77 -0
- package/migrations/pg/035_tenant_name_uniqueness.sql +15 -0
- package/migrations/pg/036_sources_muse.sql +12 -0
- package/migrations/pg/037_learner_evidence.sql +55 -0
- package/nlm/index.js +246 -55
- package/package.json +10 -5
- package/plugin/.codex-plugin/plugin.json +2 -2
- package/plugin/scripts/prompt-recall-hook.mjs +244 -55
- package/plugin/scripts/session-start-hook.mjs +273 -53
- package/plugin/scripts/stop-hook.mjs +195 -37
- package/dist/ui/assets/index-CSaBtgXD.js +0 -11
|
@@ -11,11 +11,21 @@
|
|
|
11
11
|
* which adapter to dispatch by reading `kind`.
|
|
12
12
|
*
|
|
13
13
|
* See docs/plans/desktop-product.md (Phase 0).
|
|
14
|
+
*
|
|
15
|
+
* Tenancy (program spec §4, M2 plan Wave B5): `sources` is a STAMP table.
|
|
16
|
+
* Every method except `findByToken` takes `tenantId` as its non-optional
|
|
17
|
+
* first parameter and routes its WHERE fragment through `tenantClause`;
|
|
18
|
+
* INSERTs stamp `tenant_id`. `findByToken` is the one pinned exception — it
|
|
19
|
+
* is an AUTH lookup, not a corpus read: it takes no tenantId because its job
|
|
20
|
+
* is to RESOLVE the tenant from the bearer token. The returned row carries
|
|
21
|
+
* its own `tenantId` field so callers (M4 ingest attribution) derive the
|
|
22
|
+
* tenant from the resolved row rather than being handed one.
|
|
14
23
|
*/
|
|
15
24
|
import type Database from "better-sqlite3";
|
|
16
|
-
export type SourceKind = "claude-code" | "codex" | "hermes" | "hermes-agent" | "aider" | "cursor" | "windsurf" | "opencode" | "pi" | "jsonl-generic" | "webhook";
|
|
25
|
+
export type SourceKind = "claude-code" | "codex" | "hermes" | "hermes-agent" | "muse" | "aider" | "cursor" | "windsurf" | "opencode" | "pi" | "jsonl-generic" | "webhook";
|
|
17
26
|
export interface SourceRow {
|
|
18
27
|
readonly id: number;
|
|
28
|
+
readonly tenantId: string;
|
|
19
29
|
readonly kind: SourceKind;
|
|
20
30
|
readonly name: string;
|
|
21
31
|
readonly pathOrUrl: string | null;
|
|
@@ -52,38 +62,44 @@ export interface SourceUpdate {
|
|
|
52
62
|
* port — only the not-yet-ported scheduler reads it, via rawDb directly.
|
|
53
63
|
*/
|
|
54
64
|
export interface SourceRegistryPort {
|
|
55
|
-
list(): Promise<SourceRow[]>;
|
|
56
|
-
get(id: number): Promise<SourceRow | null>;
|
|
57
|
-
getByName(name: string): Promise<SourceRow | null>;
|
|
58
|
-
insert(input: SourceInsert): Promise<SourceRow>;
|
|
65
|
+
list(tenantId: string): Promise<SourceRow[]>;
|
|
66
|
+
get(tenantId: string, id: number): Promise<SourceRow | null>;
|
|
67
|
+
getByName(tenantId: string, name: string): Promise<SourceRow | null>;
|
|
68
|
+
insert(tenantId: string, input: SourceInsert): Promise<SourceRow>;
|
|
69
|
+
/** AUTH lookup, not a corpus read — resolves the tenant, takes none. */
|
|
59
70
|
findByToken(token: string): Promise<SourceRow | null>;
|
|
60
|
-
regenerateToken(id: number): Promise<string | null>;
|
|
61
|
-
update(id: number, patch: SourceUpdate): Promise<SourceRow | null>;
|
|
62
|
-
delete(id: number): Promise<boolean>;
|
|
63
|
-
seedDefaults(): Promise<void>;
|
|
71
|
+
regenerateToken(tenantId: string, id: number): Promise<string | null>;
|
|
72
|
+
update(tenantId: string, id: number, patch: SourceUpdate): Promise<SourceRow | null>;
|
|
73
|
+
delete(tenantId: string, id: number): Promise<boolean>;
|
|
74
|
+
seedDefaults(tenantId: string): Promise<void>;
|
|
64
75
|
}
|
|
65
76
|
export declare class SourceRegistry implements SourceRegistryPort {
|
|
66
77
|
private readonly db;
|
|
67
78
|
constructor(db: Database.Database);
|
|
68
|
-
list(): Promise<SourceRow[]>;
|
|
69
|
-
get(id: number): Promise<SourceRow | null>;
|
|
70
|
-
getByName(name: string): Promise<SourceRow | null>;
|
|
71
|
-
insert(input: SourceInsert): Promise<SourceRow>;
|
|
72
|
-
/**
|
|
79
|
+
list(tenantId: string): Promise<SourceRow[]>;
|
|
80
|
+
get(tenantId: string, id: number): Promise<SourceRow | null>;
|
|
81
|
+
getByName(tenantId: string, name: string): Promise<SourceRow | null>;
|
|
82
|
+
insert(tenantId: string, input: SourceInsert): Promise<SourceRow>;
|
|
83
|
+
/**
|
|
84
|
+
* Daemon-internal: resolve a bearer token to its owning source. AUTH
|
|
85
|
+
* lookup, not a corpus read — no tenantId param by design (program spec
|
|
86
|
+
* §3, M2 plan Wave B5 pinned semantics): this RESOLVES the tenant. The
|
|
87
|
+
* returned row's `tenantId` field is the caller's derivation point.
|
|
88
|
+
*/
|
|
73
89
|
findByToken(token: string): Promise<SourceRow | null>;
|
|
74
90
|
/** Daemon-internal: returns the raw token. Never echo to HTTP responses.
|
|
75
91
|
* Not on SourceRegistryPort — only the (unported) scheduler reads it. */
|
|
76
|
-
getToken(id: number): string | null;
|
|
92
|
+
getToken(tenantId: string, id: number): string | null;
|
|
77
93
|
/** Mint a fresh token, invalidating any previous one. */
|
|
78
|
-
regenerateToken(id: number): Promise<string | null>;
|
|
79
|
-
update(id: number, patch: SourceUpdate): Promise<SourceRow | null>;
|
|
80
|
-
delete(id: number): Promise<boolean>;
|
|
94
|
+
regenerateToken(tenantId: string, id: number): Promise<string | null>;
|
|
95
|
+
update(tenantId: string, id: number, patch: SourceUpdate): Promise<SourceRow | null>;
|
|
96
|
+
delete(tenantId: string, id: number): Promise<boolean>;
|
|
81
97
|
/**
|
|
82
98
|
* Seed the three legacy adapter presets on first boot of an empty
|
|
83
99
|
* registry. Subsequent boots are no-ops. Respects per-runtime env
|
|
84
100
|
* overrides so existing installs don't lose their custom paths.
|
|
85
101
|
*/
|
|
86
|
-
seedDefaults(): Promise<void>;
|
|
102
|
+
seedDefaults(tenantId: string): Promise<void>;
|
|
87
103
|
}
|
|
88
104
|
import type { Pool } from "pg";
|
|
89
105
|
/**
|
|
@@ -94,15 +110,20 @@ import type { Pool } from "pg";
|
|
|
94
110
|
export declare class PgSourceRegistry implements SourceRegistryPort {
|
|
95
111
|
private readonly pool;
|
|
96
112
|
constructor(pool: Pool);
|
|
97
|
-
list(): Promise<SourceRow[]>;
|
|
98
|
-
get(id: number): Promise<SourceRow | null>;
|
|
99
|
-
getByName(name: string): Promise<SourceRow | null>;
|
|
100
|
-
/**
|
|
113
|
+
list(tenantId: string): Promise<SourceRow[]>;
|
|
114
|
+
get(tenantId: string, id: number): Promise<SourceRow | null>;
|
|
115
|
+
getByName(tenantId: string, name: string): Promise<SourceRow | null>;
|
|
116
|
+
/**
|
|
117
|
+
* Daemon-internal: resolve a bearer token to its owning source. AUTH
|
|
118
|
+
* lookup, not a corpus read — no tenantId param by design (program spec
|
|
119
|
+
* §3, M2 plan Wave B5 pinned semantics): this RESOLVES the tenant. The
|
|
120
|
+
* returned row's `tenantId` field is the caller's derivation point.
|
|
121
|
+
*/
|
|
101
122
|
findByToken(token: string): Promise<SourceRow | null>;
|
|
102
123
|
/** Mint a fresh token, invalidating any previous one. Webhook sources only. */
|
|
103
|
-
regenerateToken(id: number): Promise<string | null>;
|
|
104
|
-
insert(input: SourceInsert): Promise<SourceRow>;
|
|
105
|
-
update(id: number, patch: SourceUpdate): Promise<SourceRow | null>;
|
|
106
|
-
delete(id: number): Promise<boolean>;
|
|
107
|
-
seedDefaults(): Promise<void>;
|
|
124
|
+
regenerateToken(tenantId: string, id: number): Promise<string | null>;
|
|
125
|
+
insert(tenantId: string, input: SourceInsert): Promise<SourceRow>;
|
|
126
|
+
update(tenantId: string, id: number, patch: SourceUpdate): Promise<SourceRow | null>;
|
|
127
|
+
delete(tenantId: string, id: number): Promise<boolean>;
|
|
128
|
+
seedDefaults(tenantId: string): Promise<void>;
|
|
108
129
|
}
|
|
@@ -11,11 +11,21 @@
|
|
|
11
11
|
* which adapter to dispatch by reading `kind`.
|
|
12
12
|
*
|
|
13
13
|
* See docs/plans/desktop-product.md (Phase 0).
|
|
14
|
+
*
|
|
15
|
+
* Tenancy (program spec §4, M2 plan Wave B5): `sources` is a STAMP table.
|
|
16
|
+
* Every method except `findByToken` takes `tenantId` as its non-optional
|
|
17
|
+
* first parameter and routes its WHERE fragment through `tenantClause`;
|
|
18
|
+
* INSERTs stamp `tenant_id`. `findByToken` is the one pinned exception — it
|
|
19
|
+
* is an AUTH lookup, not a corpus read: it takes no tenantId because its job
|
|
20
|
+
* is to RESOLVE the tenant from the bearer token. The returned row carries
|
|
21
|
+
* its own `tenantId` field so callers (M4 ingest attribution) derive the
|
|
22
|
+
* tenant from the resolved row rather than being handed one.
|
|
14
23
|
*/
|
|
15
24
|
import { randomBytes } from "node:crypto";
|
|
16
25
|
import { existsSync } from "node:fs";
|
|
17
26
|
import { homedir } from "node:os";
|
|
18
27
|
import { join } from "node:path";
|
|
28
|
+
import { tenantClause, tenantClausePg } from "../tenancy/tenant-clause.js";
|
|
19
29
|
import { defaultHistoryFile as defaultAiderHistoryFile } from "../adapters/aider.js";
|
|
20
30
|
import { defaultDbPath as defaultCursorDbPath } from "../adapters/cursor.js";
|
|
21
31
|
import { defaultDbPath as defaultHermesAgentDbPath } from "../adapters/hermes-agent.js";
|
|
@@ -31,6 +41,7 @@ function rowFromDb(r, revealedToken = null) {
|
|
|
31
41
|
}
|
|
32
42
|
return {
|
|
33
43
|
id: r.id,
|
|
44
|
+
tenantId: r.tenant_id,
|
|
34
45
|
kind: r.kind,
|
|
35
46
|
name: r.name,
|
|
36
47
|
pathOrUrl: r.path_or_url,
|
|
@@ -51,23 +62,26 @@ export class SourceRegistry {
|
|
|
51
62
|
constructor(db) {
|
|
52
63
|
this.db = db;
|
|
53
64
|
}
|
|
54
|
-
async list() {
|
|
55
|
-
const
|
|
65
|
+
async list(tenantId) {
|
|
66
|
+
const tc = tenantClause(tenantId);
|
|
67
|
+
const rows = this.db.prepare(`SELECT * FROM sources WHERE ${tc.sql} ORDER BY id ASC`).all(tc.param);
|
|
56
68
|
return rows.map((r) => rowFromDb(r));
|
|
57
69
|
}
|
|
58
|
-
async get(id) {
|
|
59
|
-
const
|
|
70
|
+
async get(tenantId, id) {
|
|
71
|
+
const tc = tenantClause(tenantId);
|
|
72
|
+
const row = this.db.prepare(`SELECT * FROM sources WHERE id = ? AND ${tc.sql}`).get(id, tc.param);
|
|
60
73
|
return row ? rowFromDb(row) : null;
|
|
61
74
|
}
|
|
62
|
-
async getByName(name) {
|
|
63
|
-
const
|
|
75
|
+
async getByName(tenantId, name) {
|
|
76
|
+
const tc = tenantClause(tenantId);
|
|
77
|
+
const row = this.db.prepare(`SELECT * FROM sources WHERE name = ? AND ${tc.sql}`).get(name, tc.param);
|
|
64
78
|
return row ? rowFromDb(row) : null;
|
|
65
79
|
}
|
|
66
|
-
async insert(input) {
|
|
80
|
+
async insert(tenantId, input) {
|
|
67
81
|
const token = input.kind === "webhook" ? mintToken() : null;
|
|
68
82
|
const stmt = this.db.prepare(`
|
|
69
|
-
INSERT INTO sources (kind, name, path_or_url, runtime_label, parse_config, enabled, token)
|
|
70
|
-
VALUES (@kind, @name, @path_or_url, @runtime_label, @parse_config, @enabled, @token)
|
|
83
|
+
INSERT INTO sources (kind, name, path_or_url, runtime_label, parse_config, enabled, token, tenant_id)
|
|
84
|
+
VALUES (@kind, @name, @path_or_url, @runtime_label, @parse_config, @enabled, @token, @tenant_id)
|
|
71
85
|
`);
|
|
72
86
|
const result = stmt.run({
|
|
73
87
|
kind: input.kind,
|
|
@@ -77,6 +91,7 @@ export class SourceRegistry {
|
|
|
77
91
|
parse_config: JSON.stringify(input.parseConfig ?? {}),
|
|
78
92
|
enabled: input.enabled === false ? 0 : 1,
|
|
79
93
|
token,
|
|
94
|
+
tenant_id: tenantId,
|
|
80
95
|
});
|
|
81
96
|
const id = Number(result.lastInsertRowid);
|
|
82
97
|
const dbRow = this.db.prepare(`SELECT * FROM sources WHERE id = ?`).get(id);
|
|
@@ -86,7 +101,12 @@ export class SourceRegistry {
|
|
|
86
101
|
// one chance to copy it. Subsequent list/get redact.
|
|
87
102
|
return rowFromDb(dbRow, token);
|
|
88
103
|
}
|
|
89
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Daemon-internal: resolve a bearer token to its owning source. AUTH
|
|
106
|
+
* lookup, not a corpus read — no tenantId param by design (program spec
|
|
107
|
+
* §3, M2 plan Wave B5 pinned semantics): this RESOLVES the tenant. The
|
|
108
|
+
* returned row's `tenantId` field is the caller's derivation point.
|
|
109
|
+
*/
|
|
90
110
|
async findByToken(token) {
|
|
91
111
|
if (!token)
|
|
92
112
|
return null;
|
|
@@ -95,51 +115,55 @@ export class SourceRegistry {
|
|
|
95
115
|
}
|
|
96
116
|
/** Daemon-internal: returns the raw token. Never echo to HTTP responses.
|
|
97
117
|
* Not on SourceRegistryPort — only the (unported) scheduler reads it. */
|
|
98
|
-
getToken(id) {
|
|
99
|
-
const
|
|
118
|
+
getToken(tenantId, id) {
|
|
119
|
+
const tc = tenantClause(tenantId);
|
|
120
|
+
const row = this.db.prepare(`SELECT token FROM sources WHERE id = ? AND ${tc.sql}`).get(id, tc.param);
|
|
100
121
|
return row?.token ?? null;
|
|
101
122
|
}
|
|
102
123
|
/** Mint a fresh token, invalidating any previous one. */
|
|
103
|
-
async regenerateToken(id) {
|
|
104
|
-
const current = await this.get(id);
|
|
124
|
+
async regenerateToken(tenantId, id) {
|
|
125
|
+
const current = await this.get(tenantId, id);
|
|
105
126
|
if (!current || current.kind !== "webhook")
|
|
106
127
|
return null;
|
|
107
128
|
const token = mintToken();
|
|
108
|
-
|
|
109
|
-
|
|
129
|
+
const tc = tenantClause(tenantId);
|
|
130
|
+
this.db.prepare(`UPDATE sources SET token = ?, updated_at = datetime('now') WHERE id = ? AND ${tc.sql}`)
|
|
131
|
+
.run(token, id, tc.param);
|
|
110
132
|
return token;
|
|
111
133
|
}
|
|
112
|
-
async update(id, patch) {
|
|
134
|
+
async update(tenantId, id, patch) {
|
|
113
135
|
const fields = [];
|
|
114
|
-
const params =
|
|
136
|
+
const params = [];
|
|
115
137
|
if (patch.name !== undefined) {
|
|
116
|
-
fields.push("name =
|
|
117
|
-
params
|
|
138
|
+
fields.push("name = ?");
|
|
139
|
+
params.push(patch.name);
|
|
118
140
|
}
|
|
119
141
|
if (patch.pathOrUrl !== undefined) {
|
|
120
|
-
fields.push("path_or_url =
|
|
121
|
-
params
|
|
142
|
+
fields.push("path_or_url = ?");
|
|
143
|
+
params.push(patch.pathOrUrl);
|
|
122
144
|
}
|
|
123
145
|
if (patch.runtimeLabel !== undefined) {
|
|
124
|
-
fields.push("runtime_label =
|
|
125
|
-
params
|
|
146
|
+
fields.push("runtime_label = ?");
|
|
147
|
+
params.push(patch.runtimeLabel);
|
|
126
148
|
}
|
|
127
149
|
if (patch.parseConfig !== undefined) {
|
|
128
|
-
fields.push("parse_config =
|
|
129
|
-
params
|
|
150
|
+
fields.push("parse_config = ?");
|
|
151
|
+
params.push(JSON.stringify(patch.parseConfig));
|
|
130
152
|
}
|
|
131
153
|
if (patch.enabled !== undefined) {
|
|
132
|
-
fields.push("enabled =
|
|
133
|
-
params
|
|
154
|
+
fields.push("enabled = ?");
|
|
155
|
+
params.push(patch.enabled ? 1 : 0);
|
|
134
156
|
}
|
|
135
157
|
if (fields.length === 0)
|
|
136
|
-
return this.get(id);
|
|
158
|
+
return this.get(tenantId, id);
|
|
137
159
|
fields.push("updated_at = datetime('now')");
|
|
138
|
-
|
|
139
|
-
|
|
160
|
+
const tc = tenantClause(tenantId);
|
|
161
|
+
this.db.prepare(`UPDATE sources SET ${fields.join(", ")} WHERE id = ? AND ${tc.sql}`).run(...params, id, tc.param);
|
|
162
|
+
return this.get(tenantId, id);
|
|
140
163
|
}
|
|
141
|
-
async delete(id) {
|
|
142
|
-
const
|
|
164
|
+
async delete(tenantId, id) {
|
|
165
|
+
const tc = tenantClause(tenantId);
|
|
166
|
+
const result = this.db.prepare(`DELETE FROM sources WHERE id = ? AND ${tc.sql}`).run(id, tc.param);
|
|
143
167
|
return result.changes > 0;
|
|
144
168
|
}
|
|
145
169
|
/**
|
|
@@ -147,8 +171,9 @@ export class SourceRegistry {
|
|
|
147
171
|
* registry. Subsequent boots are no-ops. Respects per-runtime env
|
|
148
172
|
* overrides so existing installs don't lose their custom paths.
|
|
149
173
|
*/
|
|
150
|
-
async seedDefaults() {
|
|
151
|
-
const
|
|
174
|
+
async seedDefaults(tenantId) {
|
|
175
|
+
const tc = tenantClause(tenantId);
|
|
176
|
+
const count = this.db.prepare(`SELECT COUNT(*) AS c FROM sources WHERE ${tc.sql}`).get(tc.param);
|
|
152
177
|
if ((count?.c ?? 0) > 0)
|
|
153
178
|
return;
|
|
154
179
|
const claudePath = process.env["NLM_CLAUDE_PROJECTS_PATH"]
|
|
@@ -159,6 +184,10 @@ export class SourceRegistry {
|
|
|
159
184
|
?? join(homedir(), ".hermes", "sessions");
|
|
160
185
|
const piPath = process.env["PI_SESSIONS_PATH"]
|
|
161
186
|
?? join(homedir(), ".pi", "agent", "sessions");
|
|
187
|
+
const museDataHome = process.env["XDG_DATA_HOME"]
|
|
188
|
+
?? join(homedir(), ".local", "share");
|
|
189
|
+
const musePath = process.env["NLM_MUSE_SESSIONS_PATH"]
|
|
190
|
+
?? join(museDataHome, "muse", "sessions");
|
|
162
191
|
const openCodeDbPath = defaultOpenCodeDbPath();
|
|
163
192
|
const hermesAgentDbPath = defaultHermesAgentDbPath();
|
|
164
193
|
const aiderHistoryFile = defaultAiderHistoryFile();
|
|
@@ -193,6 +222,13 @@ export class SourceRegistry {
|
|
|
193
222
|
runtimeLabel: "hermes-agent/1.0",
|
|
194
223
|
enabled: existsSync(hermesAgentDbPath),
|
|
195
224
|
},
|
|
225
|
+
{
|
|
226
|
+
kind: "muse",
|
|
227
|
+
name: "Muse",
|
|
228
|
+
pathOrUrl: musePath,
|
|
229
|
+
runtimeLabel: "muse/1.0",
|
|
230
|
+
enabled: existsSync(musePath),
|
|
231
|
+
},
|
|
196
232
|
{
|
|
197
233
|
kind: "aider",
|
|
198
234
|
name: "Aider",
|
|
@@ -230,12 +266,13 @@ export class SourceRegistry {
|
|
|
230
266
|
},
|
|
231
267
|
];
|
|
232
268
|
for (const p of presets)
|
|
233
|
-
await this.insert(p);
|
|
269
|
+
await this.insert(tenantId, p);
|
|
234
270
|
}
|
|
235
271
|
}
|
|
236
272
|
function pgRowToSource(r) {
|
|
237
273
|
return {
|
|
238
274
|
id: r.id,
|
|
275
|
+
tenantId: r.tenant_id,
|
|
239
276
|
kind: r.kind,
|
|
240
277
|
name: r.name,
|
|
241
278
|
pathOrUrl: r.path_or_url,
|
|
@@ -253,6 +290,8 @@ function pgRowToSource(r) {
|
|
|
253
290
|
updatedAt: r.updated_at,
|
|
254
291
|
};
|
|
255
292
|
}
|
|
293
|
+
const PG_SOURCE_COLUMNS = `id, tenant_id, kind, name, path_or_url, runtime_label, parse_config,
|
|
294
|
+
enabled, token, created_at, updated_at`;
|
|
256
295
|
/**
|
|
257
296
|
* PgSourceRegistry — CRUD over `sources` for the PG storage path.
|
|
258
297
|
* Takes a pg.Pool instead of better-sqlite3.Database.
|
|
@@ -263,59 +302,60 @@ export class PgSourceRegistry {
|
|
|
263
302
|
constructor(pool) {
|
|
264
303
|
this.pool = pool;
|
|
265
304
|
}
|
|
266
|
-
async list() {
|
|
267
|
-
const
|
|
268
|
-
|
|
269
|
-
FROM sources ORDER BY id`);
|
|
305
|
+
async list(tenantId) {
|
|
306
|
+
const tc = tenantClausePg(tenantId, 1);
|
|
307
|
+
const result = await this.pool.query(`SELECT ${PG_SOURCE_COLUMNS} FROM sources WHERE ${tc.sql} ORDER BY id`, [tc.param]);
|
|
270
308
|
return result.rows.map(pgRowToSource);
|
|
271
309
|
}
|
|
272
|
-
async get(id) {
|
|
273
|
-
const
|
|
274
|
-
|
|
275
|
-
FROM sources WHERE id = $1`, [id]);
|
|
310
|
+
async get(tenantId, id) {
|
|
311
|
+
const tc = tenantClausePg(tenantId, 2);
|
|
312
|
+
const result = await this.pool.query(`SELECT ${PG_SOURCE_COLUMNS} FROM sources WHERE id = $1 AND ${tc.sql}`, [id, tc.param]);
|
|
276
313
|
if (!result.rows[0])
|
|
277
314
|
return null;
|
|
278
315
|
return pgRowToSource(result.rows[0]);
|
|
279
316
|
}
|
|
280
|
-
async getByName(name) {
|
|
281
|
-
const
|
|
282
|
-
|
|
283
|
-
FROM sources WHERE name = $1`, [name]);
|
|
317
|
+
async getByName(tenantId, name) {
|
|
318
|
+
const tc = tenantClausePg(tenantId, 2);
|
|
319
|
+
const result = await this.pool.query(`SELECT ${PG_SOURCE_COLUMNS} FROM sources WHERE name = $1 AND ${tc.sql}`, [name, tc.param]);
|
|
284
320
|
return result.rows[0] ? pgRowToSource(result.rows[0]) : null;
|
|
285
321
|
}
|
|
286
|
-
/**
|
|
322
|
+
/**
|
|
323
|
+
* Daemon-internal: resolve a bearer token to its owning source. AUTH
|
|
324
|
+
* lookup, not a corpus read — no tenantId param by design (program spec
|
|
325
|
+
* §3, M2 plan Wave B5 pinned semantics): this RESOLVES the tenant. The
|
|
326
|
+
* returned row's `tenantId` field is the caller's derivation point.
|
|
327
|
+
*/
|
|
287
328
|
async findByToken(token) {
|
|
288
329
|
if (!token)
|
|
289
330
|
return null;
|
|
290
|
-
const result = await this.pool.query(`SELECT
|
|
291
|
-
enabled, token, created_at, updated_at
|
|
292
|
-
FROM sources WHERE token = $1`, [token]);
|
|
331
|
+
const result = await this.pool.query(`SELECT ${PG_SOURCE_COLUMNS} FROM sources WHERE token = $1`, [token]);
|
|
293
332
|
return result.rows[0] ? pgRowToSource(result.rows[0]) : null;
|
|
294
333
|
}
|
|
295
334
|
/** Mint a fresh token, invalidating any previous one. Webhook sources only. */
|
|
296
|
-
async regenerateToken(id) {
|
|
297
|
-
const current = await this.get(id);
|
|
335
|
+
async regenerateToken(tenantId, id) {
|
|
336
|
+
const current = await this.get(tenantId, id);
|
|
298
337
|
if (!current || current.kind !== "webhook")
|
|
299
338
|
return null;
|
|
300
339
|
const token = mintToken();
|
|
301
|
-
|
|
340
|
+
const tc = tenantClausePg(tenantId, 3);
|
|
341
|
+
await this.pool.query(`UPDATE sources SET token = $1, updated_at = NOW() WHERE id = $2 AND ${tc.sql}`, [token, id, tc.param]);
|
|
302
342
|
return token;
|
|
303
343
|
}
|
|
304
|
-
async insert(input) {
|
|
344
|
+
async insert(tenantId, input) {
|
|
305
345
|
// Webhook sources get a token minted at insert time — revealed once on the
|
|
306
346
|
// insert response only. Subsequent list()/get() always return token: null.
|
|
307
347
|
const token = input.kind === "webhook" ? mintToken() : null;
|
|
308
|
-
const result = await this.pool.query(`INSERT INTO sources (kind, name, path_or_url, runtime_label, parse_config, enabled, token)
|
|
309
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
348
|
+
const result = await this.pool.query(`INSERT INTO sources (kind, name, path_or_url, runtime_label, parse_config, enabled, token, tenant_id)
|
|
349
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
|
|
310
350
|
RETURNING id, created_at, updated_at`, [
|
|
311
351
|
input.kind, input.name, input.pathOrUrl ?? null, input.runtimeLabel,
|
|
312
|
-
JSON.stringify(input.parseConfig ?? {}), input.enabled ?? true, token,
|
|
352
|
+
JSON.stringify(input.parseConfig ?? {}), input.enabled ?? true, token, tenantId,
|
|
313
353
|
]);
|
|
314
354
|
const row = result.rows[0];
|
|
315
355
|
if (!row)
|
|
316
356
|
throw new Error("PgSourceRegistry.insert: RETURNING yielded no row");
|
|
317
357
|
return {
|
|
318
|
-
id: row.id, kind: input.kind, name: input.name, pathOrUrl: input.pathOrUrl ?? null,
|
|
358
|
+
id: row.id, tenantId, kind: input.kind, name: input.name, pathOrUrl: input.pathOrUrl ?? null,
|
|
319
359
|
runtimeLabel: input.runtimeLabel,
|
|
320
360
|
parseConfig: input.parseConfig ?? {},
|
|
321
361
|
enabled: input.enabled ?? true,
|
|
@@ -323,7 +363,7 @@ export class PgSourceRegistry {
|
|
|
323
363
|
createdAt: row.created_at, updatedAt: row.updated_at,
|
|
324
364
|
};
|
|
325
365
|
}
|
|
326
|
-
async update(id, patch) {
|
|
366
|
+
async update(tenantId, id, patch) {
|
|
327
367
|
const sets = ["updated_at = NOW()"];
|
|
328
368
|
const params = [];
|
|
329
369
|
let idx = 1;
|
|
@@ -348,25 +388,28 @@ export class PgSourceRegistry {
|
|
|
348
388
|
params.push(patch.enabled);
|
|
349
389
|
}
|
|
350
390
|
if (sets.length === 1)
|
|
351
|
-
return this.get(id);
|
|
391
|
+
return this.get(tenantId, id);
|
|
352
392
|
params.push(id);
|
|
353
|
-
|
|
354
|
-
|
|
393
|
+
const tc = tenantClausePg(tenantId, idx + 1);
|
|
394
|
+
params.push(tc.param);
|
|
395
|
+
await this.pool.query(`UPDATE sources SET ${sets.join(", ")} WHERE id = $${idx} AND ${tc.sql}`, params);
|
|
396
|
+
return this.get(tenantId, id);
|
|
355
397
|
}
|
|
356
|
-
async delete(id) {
|
|
357
|
-
const
|
|
398
|
+
async delete(tenantId, id) {
|
|
399
|
+
const tc = tenantClausePg(tenantId, 2);
|
|
400
|
+
const result = await this.pool.query(`DELETE FROM sources WHERE id = $1 AND ${tc.sql}`, [id, tc.param]);
|
|
358
401
|
return (result.rowCount ?? 0) > 0;
|
|
359
402
|
}
|
|
360
|
-
async seedDefaults() {
|
|
403
|
+
async seedDefaults(tenantId) {
|
|
361
404
|
const presets = [
|
|
362
405
|
{ kind: "claude-code", name: "claude-code", path_or_url: null, runtime_label: "claude-code" },
|
|
363
406
|
{ kind: "hermes", name: "hermes", path_or_url: null, runtime_label: "hermes" },
|
|
364
407
|
{ kind: "pi", name: "pi", path_or_url: null, runtime_label: "pi" },
|
|
365
408
|
];
|
|
366
409
|
for (const p of presets) {
|
|
367
|
-
await this.pool.query(`INSERT INTO sources (kind, name, path_or_url, runtime_label, parse_config, enabled)
|
|
368
|
-
VALUES ($1, $2, $3, $4, '{}', TRUE)
|
|
369
|
-
ON CONFLICT (name) DO NOTHING`, [p.kind, p.name, p.path_or_url, p.runtime_label]);
|
|
410
|
+
await this.pool.query(`INSERT INTO sources (kind, name, path_or_url, runtime_label, parse_config, enabled, tenant_id)
|
|
411
|
+
VALUES ($1, $2, $3, $4, '{}', TRUE, $5)
|
|
412
|
+
ON CONFLICT (tenant_id, name) DO NOTHING`, [p.kind, p.name, p.path_or_url, p.runtime_label, tenantId]);
|
|
370
413
|
}
|
|
371
414
|
}
|
|
372
415
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-registry.js","sourceRoot":"","sources":["../../../src/core/sources/source-registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"source-registry.js","sourceRoot":"","sources":["../../../src/core/sources/source-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
* Embeddings live in code_exemplar_embeddings with ON DELETE CASCADE, so the
|
|
10
10
|
* prune/cap deletes here don't need separate vec bookkeeping (unlike the
|
|
11
11
|
* SQLite store, which deletes from code_exemplars_vec explicitly).
|
|
12
|
+
*
|
|
13
|
+
* Tenancy: mirrors SqliteCodeExemplarStore — every method takes `tenantId`
|
|
14
|
+
* as its non-optional first parameter and routes STAMP-table WHERE
|
|
15
|
+
* fragments through `tenantClausePg`. See that file's header comment for
|
|
16
|
+
* the vector-path rationale.
|
|
12
17
|
*/
|
|
13
18
|
import type { Pool } from "pg";
|
|
14
19
|
import type { CodeExemplarSearchFilter, CodeExemplarStore, ExemplarVerdictPatch, ExemplarVerdictResult, ExemplarVerdictSource } from "../../ports/code-exemplar-store.js";
|
|
@@ -16,18 +21,22 @@ import type { CodeExemplar, CodeExemplarHit, CodeExemplarInput } from "../../sha
|
|
|
16
21
|
export declare class PgCodeExemplarStore implements CodeExemplarStore {
|
|
17
22
|
private readonly pool;
|
|
18
23
|
constructor(pool: Pool);
|
|
19
|
-
insert(input: CodeExemplarInput): Promise<{
|
|
24
|
+
insert(tenantId: string, input: CodeExemplarInput): Promise<{
|
|
20
25
|
id: string;
|
|
21
26
|
skipped: boolean;
|
|
22
27
|
}>;
|
|
23
|
-
insertMany(inputs: ReadonlyArray<CodeExemplarInput>): Promise<number>;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
insertMany(tenantId: string, inputs: ReadonlyArray<CodeExemplarInput>): Promise<number>;
|
|
29
|
+
/**
|
|
30
|
+
* No-op if exemplarId isn't owned by tenantId — writing an embedding for
|
|
31
|
+
* another tenant's exemplar must never fall through to a write.
|
|
32
|
+
*/
|
|
33
|
+
upsertEmbedding(tenantId: string, exemplarId: string, vector: Float32Array): Promise<void>;
|
|
34
|
+
searchByVector(tenantId: string, queryVector: Float32Array, filter: CodeExemplarSearchFilter): Promise<ReadonlyArray<CodeExemplarHit>>;
|
|
35
|
+
getById(tenantId: string, id: string): Promise<CodeExemplar | null>;
|
|
36
|
+
listBySessions(tenantId: string, sessionIds: ReadonlyArray<string>): Promise<ReadonlyArray<CodeExemplar>>;
|
|
37
|
+
applyBucketCap(tenantId: string, installScope: string, maxPerBucket: number): Promise<number>;
|
|
38
|
+
pruneReverted(tenantId: string, installScope: string): Promise<number>;
|
|
39
|
+
setVerdict(tenantId: string, id: string, patch: ExemplarVerdictPatch, source: ExemplarVerdictSource): Promise<ExemplarVerdictResult>;
|
|
40
|
+
pruneOlderThan(tenantId: string, olderThanTs: string): Promise<number>;
|
|
32
41
|
private rowToExemplar;
|
|
33
42
|
}
|