nlm-memory 0.21.0 → 0.21.12
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 +45 -13
- 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
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Real (non-core, side-effectful) adapters for JobSupervisor's reprocess
|
|
3
|
+
* job — the daemon composition root (`nlm start`, src/cli/nlm.ts) wires
|
|
4
|
+
* these; core/jobs/job-supervisor.ts only ever sees the ports (@ports/
|
|
5
|
+
* clock.js, @ports/spawn-child.js). Thin and unremarkable by design (Task 1
|
|
6
|
+
* report): no logic worth unit-testing beyond what job-supervisor.test.ts
|
|
7
|
+
* already covers against fakes of these same shapes.
|
|
8
|
+
*/
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
10
|
+
/** Date.now() + a ref'd setInterval — JobSupervisor's stall-check interval
|
|
11
|
+
* is meant to live for the whole daemon process, so it is not unref'd. */
|
|
12
|
+
export const realClock = {
|
|
13
|
+
now: () => Date.now(),
|
|
14
|
+
setInterval: (fn, ms) => {
|
|
15
|
+
setInterval(fn, ms);
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Spawns `node <nlm.js> reprocess -v <args>` and line-buffers stdout+stderr
|
|
20
|
+
* into a single onLine stream (reprocess's -v progress lines go to stderr
|
|
21
|
+
* per the `reprocess` command's own onProgress wiring in nlm.ts; combining
|
|
22
|
+
* both means JobSupervisor never needs to care which fd a future output
|
|
23
|
+
* change lands on).
|
|
24
|
+
*
|
|
25
|
+
* Args are always passed as separate argv entries to child_process.spawn,
|
|
26
|
+
* never through a shell — a caller-supplied arg containing shell
|
|
27
|
+
* metacharacters is just one literal argv element to the child, nothing it
|
|
28
|
+
* can escape into.
|
|
29
|
+
*/
|
|
30
|
+
export function createReprocessSpawnChild(opts) {
|
|
31
|
+
return (args) => {
|
|
32
|
+
const child = spawn(opts.execPath, [opts.nlmScriptPath, "reprocess", "-v", ...args], {
|
|
33
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
34
|
+
});
|
|
35
|
+
let lineCb = null;
|
|
36
|
+
let exitCb = null;
|
|
37
|
+
// Separate buffers per stream: stdout and stderr are independent byte
|
|
38
|
+
// streams that can each deliver a partial (no-newline-yet) chunk in
|
|
39
|
+
// either order. A single shared buffer would let an in-flight partial
|
|
40
|
+
// line on one fd get spliced together with an unrelated chunk that
|
|
41
|
+
// lands on the other fd before the first line's newline arrives.
|
|
42
|
+
const makeFeed = (buf) => (chunk) => {
|
|
43
|
+
buf.s += chunk.toString("utf8");
|
|
44
|
+
let idx;
|
|
45
|
+
while ((idx = buf.s.indexOf("\n")) !== -1) {
|
|
46
|
+
const line = buf.s.slice(0, idx);
|
|
47
|
+
buf.s = buf.s.slice(idx + 1);
|
|
48
|
+
lineCb?.(line);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
child.stdout?.on("data", makeFeed({ s: "" }));
|
|
52
|
+
child.stderr?.on("data", makeFeed({ s: "" }));
|
|
53
|
+
// A spawn-level error (e.g. ENOENT on a bad execPath/script path) may
|
|
54
|
+
// fire "error" without a normal "exit" ever following — without
|
|
55
|
+
// surfacing it as an exit, JobSupervisor would sit in "running" forever
|
|
56
|
+
// instead of applying its restart/exhaust policy. Node's own docs say
|
|
57
|
+
// "exit" can still follow "error" in some cases, so this can call
|
|
58
|
+
// exitCb twice; that's harmless because job-supervisor.ts's
|
|
59
|
+
// spawnAndWire nulls out `this.child` after the first exit and its
|
|
60
|
+
// identity guard drops every callback after that.
|
|
61
|
+
child.on("exit", (code) => {
|
|
62
|
+
exitCb?.(code);
|
|
63
|
+
});
|
|
64
|
+
child.on("error", () => {
|
|
65
|
+
exitCb?.(1);
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
onLine: (cb) => {
|
|
69
|
+
lineCb = cb;
|
|
70
|
+
},
|
|
71
|
+
onExit: (cb) => {
|
|
72
|
+
exitCb = cb;
|
|
73
|
+
},
|
|
74
|
+
kill: () => {
|
|
75
|
+
child.kill();
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=reprocess-job-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reprocess-job-adapters.js","sourceRoot":"","sources":["../../src/cli/reprocess-job-adapters.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAI3C;2EAC2E;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IACrB,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACtB,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC;CACF,CAAC;AAYF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAA2B;IACnE,OAAO,CAAC,IAAc,EAAe,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE;YACnF,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAoC,IAAI,CAAC;QACnD,IAAI,MAAM,GAA2C,IAAI,CAAC;QAC1D,sEAAsE;QACtE,oEAAoE;QACpE,sEAAsE;QACtE,mEAAmE;QACnE,iEAAiE;QACjE,MAAM,QAAQ,GAAG,CAAC,GAAkB,EAAE,EAAE,CAAC,CAAC,KAAa,EAAQ,EAAE;YAC/D,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,GAAW,CAAC;YAChB,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACjC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC7B,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QACF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9C,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAE9C,sEAAsE;QACtE,gEAAgE;QAChE,wEAAwE;QACxE,sEAAsE;QACtE,kEAAkE;QAClE,4DAA4D;QAC5D,mEAAmE;QACnE,kDAAkD;QAClD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;gBACb,MAAM,GAAG,EAAE,CAAC;YACd,CAAC;YACD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;gBACb,MAAM,GAAG,EAAE,CAAC;YACd,CAAC;YACD,IAAI,EAAE,GAAG,EAAE;gBACT,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -9,6 +9,7 @@ import { existsSync } from "node:fs";
|
|
|
9
9
|
import { homedir } from "node:os";
|
|
10
10
|
import { join } from "node:path";
|
|
11
11
|
import { recentQueryLog } from "../core/recall/recent-log.js";
|
|
12
|
+
import { DEFAULT_TEAM_ID } from "../core/tenancy/default-team.js";
|
|
12
13
|
function overallOf(tables) {
|
|
13
14
|
let total = 0;
|
|
14
15
|
let stamped = 0;
|
|
@@ -74,7 +75,9 @@ export async function runScopeCoverage(opts) {
|
|
|
74
75
|
queryLogNote: `query log not found at ${logPath}`,
|
|
75
76
|
};
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
+
// `nlm scope coverage` is a local CLI tool (single-tenant, no per-tenant
|
|
79
|
+
// CLI concept) — DEFAULT_TEAM_ID is its real identity, not a placeholder.
|
|
80
|
+
const entries = recentQueryLog(DEFAULT_TEAM_ID, entryWindow, logPath);
|
|
78
81
|
const idSet = new Set();
|
|
79
82
|
const idsBySurface = new Map();
|
|
80
83
|
for (const entry of entries) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-coverage.js","sourceRoot":"","sources":["../../src/cli/scope-coverage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"scope-coverage.js","sourceRoot":"","sources":["../../src/cli/scope-coverage.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/supersede.js
CHANGED
|
@@ -19,6 +19,7 @@ import { SqliteStorage } from "../core/storage/sqlite-storage.js";
|
|
|
19
19
|
import { RecallService } from "../core/recall/recall-service.js";
|
|
20
20
|
import { OllamaClient } from "../llm/ollama-client.js";
|
|
21
21
|
import { appendSupersedence } from "../core/storage/supersedence-log.js";
|
|
22
|
+
import { DEFAULT_TEAM_ID } from "../core/tenancy/default-team.js";
|
|
22
23
|
const CANDIDATE_LIMIT = 8;
|
|
23
24
|
export async function executeSupersede(deps, opts) {
|
|
24
25
|
const predecessor = await resolveSession(deps, opts.predecessor, "predecessor");
|
|
@@ -68,14 +69,14 @@ export async function executeSupersede(deps, opts) {
|
|
|
68
69
|
return { kind: "cancelled", reason: "user-declined-confirm" };
|
|
69
70
|
}
|
|
70
71
|
try {
|
|
71
|
-
await deps.store.markSuperseded(predecessor.session.id, successor.session.id);
|
|
72
|
+
await deps.store.markSuperseded(DEFAULT_TEAM_ID, predecessor.session.id, successor.session.id);
|
|
72
73
|
}
|
|
73
74
|
catch (e) {
|
|
74
75
|
const msg = e instanceof Error ? e.message : String(e);
|
|
75
76
|
deps.io.warn(`Failed to mark supersedence: ${msg}`);
|
|
76
77
|
return { kind: "cancelled", reason: msg };
|
|
77
78
|
}
|
|
78
|
-
void appendSupersedence({
|
|
79
|
+
void appendSupersedence(DEFAULT_TEAM_ID, {
|
|
79
80
|
predecessorId: predecessor.session.id,
|
|
80
81
|
successorId: successor.session.id,
|
|
81
82
|
source: "cli",
|
|
@@ -91,7 +92,7 @@ export async function executeSupersede(deps, opts) {
|
|
|
91
92
|
}
|
|
92
93
|
async function resolveSession(deps, argValue, role) {
|
|
93
94
|
if (argValue) {
|
|
94
|
-
const session = await deps.store.getById(argValue);
|
|
95
|
+
const session = await deps.store.getById(DEFAULT_TEAM_ID, argValue);
|
|
95
96
|
if (!session) {
|
|
96
97
|
deps.io.warn(`Session ${argValue} not found.`);
|
|
97
98
|
return { kind: "cancelled", reason: "unknown-id" };
|
|
@@ -113,7 +114,7 @@ async function resolveSession(deps, argValue, role) {
|
|
|
113
114
|
deps.io.warn(`Empty ${role} query — nothing to search.`);
|
|
114
115
|
return { kind: "cancelled", reason: "empty-query" };
|
|
115
116
|
}
|
|
116
|
-
const result = await deps.recall.search({
|
|
117
|
+
const result = await deps.recall.search(DEFAULT_TEAM_ID, {
|
|
117
118
|
query,
|
|
118
119
|
mode: "hybrid",
|
|
119
120
|
limit: CANDIDATE_LIMIT,
|
|
@@ -122,7 +123,7 @@ async function resolveSession(deps, argValue, role) {
|
|
|
122
123
|
deps.io.warn(`No sessions matched "${query}".`);
|
|
123
124
|
return { kind: "cancelled", reason: "no-matches" };
|
|
124
125
|
}
|
|
125
|
-
const enriched = await deps.store.getByIds(result.results.map((r) => r.id));
|
|
126
|
+
const enriched = await deps.store.getByIds(DEFAULT_TEAM_ID, result.results.map((r) => r.id));
|
|
126
127
|
const runtimeById = new Map(enriched.map((s) => [s.id, s.runtime]));
|
|
127
128
|
const candidates = result.results.map((r) => ({
|
|
128
129
|
id: r.id,
|
|
@@ -141,11 +142,11 @@ async function resolveSession(deps, argValue, role) {
|
|
|
141
142
|
return { kind: "resolved", session: match };
|
|
142
143
|
}
|
|
143
144
|
async function readExistingSupersededBy(store, predecessorId) {
|
|
144
|
-
const session = await store.getById(predecessorId);
|
|
145
|
+
const session = await store.getById(DEFAULT_TEAM_ID, predecessorId);
|
|
145
146
|
return session?.supersededBy ?? null;
|
|
146
147
|
}
|
|
147
148
|
async function resolveCandidateById(store, id) {
|
|
148
|
-
const session = await store.getById(id);
|
|
149
|
+
const session = await store.getById(DEFAULT_TEAM_ID, id);
|
|
149
150
|
if (!session) {
|
|
150
151
|
return { id, label: "(unknown)", startedAt: null, runtime: "" };
|
|
151
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supersede.js","sourceRoot":"","sources":["../../src/cli/supersede.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"supersede.js","sourceRoot":"","sources":["../../src/cli/supersede.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,33 @@
|
|
|
5
5
|
* all rows here, never destructive mutations elsewhere. Dataset projection
|
|
6
6
|
* (build-dataset.ts) reads this table to overlay user-driven state on top
|
|
7
7
|
* of the persisted store. Ports server.py's _write_action + undo flow.
|
|
8
|
+
*
|
|
9
|
+
* Tenancy (program spec §4.6 hardening 1, M2 plan Wave B6): `actions` is
|
|
10
|
+
* DERIVE per the M1 census ("via target session/entity rows") with NO
|
|
11
|
+
* `tenant_id` column. In practice `subject_type` is a free-text polymorphic
|
|
12
|
+
* tag — confirmed real values are `session`, `entity`, `decision`,
|
|
13
|
+
* `open_question` (ids shaped `${sessionId}::<hash>`, see
|
|
14
|
+
* `@core/actions/overlay.ts`'s `openQuestionId`/`decisionId`), and `alert`
|
|
15
|
+
* (ephemeral ids computed fresh per request in build-dataset.ts, e.g.
|
|
16
|
+
* `stale_<mangled-canonical>`, with NO stored row to join against) plus
|
|
17
|
+
* `action` (self-referential undo-of-undo chains). Only the first four
|
|
18
|
+
* resolve to a stamped table; `alert`/`action` never do, by construction —
|
|
19
|
+
* no schema exists that would let them. Chosen mechanism, `tenantId`
|
|
20
|
+
* threaded through every function: `listActions`/`undoAction` require, for
|
|
21
|
+
* a row whose `subject_type` IS resolvable, that the subject exist in the
|
|
22
|
+
* caller's tenant (EXISTS join to `sessions`/`entities`, session-prefix
|
|
23
|
+
* match for decision/open_question); rows with an unresolvable
|
|
24
|
+
* `subject_type` pass through unfiltered rather than being faked closed —
|
|
25
|
+
* excluding them would silently break the real, tested alert
|
|
26
|
+
* dismiss/snooze/undo flow with no isolation benefit (an unresolvable id
|
|
27
|
+
* can't be attributed to ANY tenant, so filtering it out for tenant A
|
|
28
|
+
* would filter it out for every tenant identically). `writeAction`/
|
|
29
|
+
* `writeActionsBatch` take `tenantId` for signature uniformity but do not
|
|
30
|
+
* validate subject ownership (no column to stamp, and validating against
|
|
31
|
+
* the same resolvability rule would reject every legitimate alert write);
|
|
32
|
+
* write-time subject authorization is the caller's job, exactly as
|
|
33
|
+
* Source/Provider registry writes are authorized by the composition root
|
|
34
|
+
* before reaching the store (M2 is plumbing, not auth — program spec §4.6).
|
|
8
35
|
*/
|
|
9
36
|
import type Database from "better-sqlite3";
|
|
10
37
|
import type { Pool } from "pg";
|
|
@@ -27,22 +54,52 @@ export interface ActionRow {
|
|
|
27
54
|
readonly runtime: string | null;
|
|
28
55
|
readonly reverted_by: string | null;
|
|
29
56
|
}
|
|
30
|
-
|
|
31
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Collapses identical rows (same kind + subjectType + subjectId + payload)
|
|
59
|
+
* within a single batch, keeping the first occurrence. A batch is typically
|
|
60
|
+
* one UI gesture replayed by a flaky client retry, not intentionally repeated
|
|
61
|
+
* writes, so silently dropping the duplicates is the correct behavior rather
|
|
62
|
+
* than inserting redundant log rows.
|
|
63
|
+
*/
|
|
64
|
+
export declare function dedupeActionInputs(inputs: ReadonlyArray<ActionInput>): ActionInput[];
|
|
65
|
+
/** tenantId is accepted for signature uniformity (see the module doc
|
|
66
|
+
* comment) but not used to filter or stamp — `actions` has no tenant_id
|
|
67
|
+
* column, and write-time subject authorization is the caller's job. */
|
|
68
|
+
export declare function writeAction(db: Database.Database, _tenantId: string, input: ActionInput): string;
|
|
69
|
+
export declare function writeActionsBatch(db: Database.Database, tenantId: string, inputs: ReadonlyArray<ActionInput>): string[];
|
|
32
70
|
export interface UndoResult {
|
|
33
71
|
readonly undoId: string;
|
|
34
72
|
readonly originalKind: string;
|
|
35
73
|
}
|
|
36
|
-
|
|
37
|
-
|
|
74
|
+
/** Builds the subject-resolvability predicate shared by undoAction/listActions
|
|
75
|
+
* (see the module doc comment): resolvable subject_types must belong to the
|
|
76
|
+
* caller's tenant; unresolvable ones pass through. `alias` is the actions
|
|
77
|
+
* table's name/alias in the enclosing query. Returns the SQL fragment plus
|
|
78
|
+
* its bound params, in the order they appear in the fragment. */
|
|
79
|
+
export declare function subjectTenantPredicate(tenantId: string, alias?: string): {
|
|
80
|
+
sql: string;
|
|
81
|
+
params: string[];
|
|
82
|
+
};
|
|
83
|
+
export declare function undoAction(db: Database.Database, tenantId: string, actionId: string): UndoResult | null;
|
|
84
|
+
export declare function listActions(db: Database.Database, tenantId: string, opts?: {
|
|
38
85
|
limit?: number;
|
|
39
86
|
subjectId?: string;
|
|
40
87
|
kind?: string;
|
|
41
88
|
}): ActionRow[];
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
export declare function
|
|
45
|
-
|
|
89
|
+
/** Pg counterpart of subjectTenantPredicate — see the module doc comment.
|
|
90
|
+
* `startIdx` is the next free `$n` slot; returns the following free index too. */
|
|
91
|
+
export declare function subjectTenantPredicatePg(tenantId: string, startIdx: number, alias?: string): {
|
|
92
|
+
sql: string;
|
|
93
|
+
params: string[];
|
|
94
|
+
nextIdx: number;
|
|
95
|
+
};
|
|
96
|
+
/** tenantId is accepted for signature uniformity (see the module doc
|
|
97
|
+
* comment) but not used to filter or stamp — `actions` has no tenant_id
|
|
98
|
+
* column, and write-time subject authorization is the caller's job. */
|
|
99
|
+
export declare function writeActionPg(pool: Pool, _tenantId: string, input: ActionInput): Promise<string>;
|
|
100
|
+
export declare function writeActionsBatchPg(pool: Pool, _tenantId: string, inputs: ReadonlyArray<ActionInput>): Promise<string[]>;
|
|
101
|
+
export declare function undoActionPg(pool: Pool, tenantId: string, actionId: string): Promise<UndoResult | null>;
|
|
102
|
+
export declare function listActionsPg(pool: Pool, tenantId: string, opts?: {
|
|
46
103
|
limit?: number;
|
|
47
104
|
subjectId?: string;
|
|
48
105
|
kind?: string;
|
|
@@ -5,13 +5,67 @@
|
|
|
5
5
|
* all rows here, never destructive mutations elsewhere. Dataset projection
|
|
6
6
|
* (build-dataset.ts) reads this table to overlay user-driven state on top
|
|
7
7
|
* of the persisted store. Ports server.py's _write_action + undo flow.
|
|
8
|
+
*
|
|
9
|
+
* Tenancy (program spec §4.6 hardening 1, M2 plan Wave B6): `actions` is
|
|
10
|
+
* DERIVE per the M1 census ("via target session/entity rows") with NO
|
|
11
|
+
* `tenant_id` column. In practice `subject_type` is a free-text polymorphic
|
|
12
|
+
* tag — confirmed real values are `session`, `entity`, `decision`,
|
|
13
|
+
* `open_question` (ids shaped `${sessionId}::<hash>`, see
|
|
14
|
+
* `@core/actions/overlay.ts`'s `openQuestionId`/`decisionId`), and `alert`
|
|
15
|
+
* (ephemeral ids computed fresh per request in build-dataset.ts, e.g.
|
|
16
|
+
* `stale_<mangled-canonical>`, with NO stored row to join against) plus
|
|
17
|
+
* `action` (self-referential undo-of-undo chains). Only the first four
|
|
18
|
+
* resolve to a stamped table; `alert`/`action` never do, by construction —
|
|
19
|
+
* no schema exists that would let them. Chosen mechanism, `tenantId`
|
|
20
|
+
* threaded through every function: `listActions`/`undoAction` require, for
|
|
21
|
+
* a row whose `subject_type` IS resolvable, that the subject exist in the
|
|
22
|
+
* caller's tenant (EXISTS join to `sessions`/`entities`, session-prefix
|
|
23
|
+
* match for decision/open_question); rows with an unresolvable
|
|
24
|
+
* `subject_type` pass through unfiltered rather than being faked closed —
|
|
25
|
+
* excluding them would silently break the real, tested alert
|
|
26
|
+
* dismiss/snooze/undo flow with no isolation benefit (an unresolvable id
|
|
27
|
+
* can't be attributed to ANY tenant, so filtering it out for tenant A
|
|
28
|
+
* would filter it out for every tenant identically). `writeAction`/
|
|
29
|
+
* `writeActionsBatch` take `tenantId` for signature uniformity but do not
|
|
30
|
+
* validate subject ownership (no column to stamp, and validating against
|
|
31
|
+
* the same resolvability rule would reject every legitimate alert write);
|
|
32
|
+
* write-time subject authorization is the caller's job, exactly as
|
|
33
|
+
* Source/Provider registry writes are authorized by the composition root
|
|
34
|
+
* before reaching the store (M2 is plumbing, not auth — program spec §4.6).
|
|
8
35
|
*/
|
|
36
|
+
import { tenantClause, tenantClausePg } from "../tenancy/tenant-clause.js";
|
|
37
|
+
const RESOLVABLE_SUBJECT_TYPES = "('session', 'entity', 'decision', 'open_question')";
|
|
9
38
|
function makeActionId() {
|
|
10
39
|
const ts = new Date().toISOString().replace(/[:.]/g, "-");
|
|
11
40
|
const rand = Math.random().toString(16).slice(2, 10);
|
|
12
41
|
return `act_${ts}_${rand}`;
|
|
13
42
|
}
|
|
14
|
-
|
|
43
|
+
function actionDedupeKey(input) {
|
|
44
|
+
return JSON.stringify([input.kind, input.subjectType, input.subjectId, input.payload ?? null]);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Collapses identical rows (same kind + subjectType + subjectId + payload)
|
|
48
|
+
* within a single batch, keeping the first occurrence. A batch is typically
|
|
49
|
+
* one UI gesture replayed by a flaky client retry, not intentionally repeated
|
|
50
|
+
* writes, so silently dropping the duplicates is the correct behavior rather
|
|
51
|
+
* than inserting redundant log rows.
|
|
52
|
+
*/
|
|
53
|
+
export function dedupeActionInputs(inputs) {
|
|
54
|
+
const seen = new Set();
|
|
55
|
+
const out = [];
|
|
56
|
+
for (const input of inputs) {
|
|
57
|
+
const key = actionDedupeKey(input);
|
|
58
|
+
if (seen.has(key))
|
|
59
|
+
continue;
|
|
60
|
+
seen.add(key);
|
|
61
|
+
out.push(input);
|
|
62
|
+
}
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
/** tenantId is accepted for signature uniformity (see the module doc
|
|
66
|
+
* comment) but not used to filter or stamp — `actions` has no tenant_id
|
|
67
|
+
* column, and write-time subject authorization is the caller's job. */
|
|
68
|
+
export function writeAction(db, _tenantId, input) {
|
|
15
69
|
const id = makeActionId();
|
|
16
70
|
const payload = input.payload ? JSON.stringify(input.payload) : null;
|
|
17
71
|
db.prepare(`
|
|
@@ -20,15 +74,50 @@ export function writeAction(db, input) {
|
|
|
20
74
|
`).run(id, new Date().toISOString(), input.kind, input.subjectType, input.subjectId, payload, input.actor ?? "user", input.runtime ?? "api");
|
|
21
75
|
return id;
|
|
22
76
|
}
|
|
23
|
-
export function writeActionsBatch(db, inputs) {
|
|
24
|
-
const
|
|
25
|
-
|
|
77
|
+
export function writeActionsBatch(db, tenantId, inputs) {
|
|
78
|
+
const deduped = dedupeActionInputs(inputs);
|
|
79
|
+
const txn = db.transaction((rows) => rows.map((r) => writeAction(db, tenantId, r)));
|
|
80
|
+
return txn(deduped);
|
|
26
81
|
}
|
|
27
|
-
|
|
82
|
+
/** Builds the subject-resolvability predicate shared by undoAction/listActions
|
|
83
|
+
* (see the module doc comment): resolvable subject_types must belong to the
|
|
84
|
+
* caller's tenant; unresolvable ones pass through. `alias` is the actions
|
|
85
|
+
* table's name/alias in the enclosing query. Returns the SQL fragment plus
|
|
86
|
+
* its bound params, in the order they appear in the fragment. */
|
|
87
|
+
export function subjectTenantPredicate(tenantId, alias = "actions") {
|
|
88
|
+
const sessionTc = tenantClause(tenantId, "s.tenant_id");
|
|
89
|
+
const entityTc = tenantClause(tenantId, "e.tenant_id");
|
|
90
|
+
const prefixTc = tenantClause(tenantId, "sp.tenant_id");
|
|
91
|
+
// The prefix arm splits subject_id on '::' and looks the parent up by equality
|
|
92
|
+
// rather than `subject_id LIKE sp.id || '::%'`. The LIKE form builds its
|
|
93
|
+
// pattern from a column, so sqlite cannot use the sessions primary key and
|
|
94
|
+
// full-scans every session once per action row. On a 15k-session store that
|
|
95
|
+
// read the 378MB sessions table 16 times and took 9.6s inside a synchronous
|
|
96
|
+
// better-sqlite3 .all(), which blocks the event loop and made the whole daemon
|
|
97
|
+
// unreachable (NLM #457). Equality seeks the PK instead.
|
|
98
|
+
//
|
|
99
|
+
// Equivalent because no session id contains '::' (they are `<runtime>_<uuid>`),
|
|
100
|
+
// so the first separator always ends the parent id. When subject_id has no
|
|
101
|
+
// '::' at all, instr returns 0 and substr(x, 1, -1) is '', which matches no
|
|
102
|
+
// session - the same miss the LIKE produced.
|
|
103
|
+
const sql = `(
|
|
104
|
+
EXISTS (SELECT 1 FROM sessions s WHERE s.id = ${alias}.subject_id AND ${sessionTc.sql})
|
|
105
|
+
OR EXISTS (SELECT 1 FROM entities e WHERE e.canonical = ${alias}.subject_id AND ${entityTc.sql})
|
|
106
|
+
OR EXISTS (SELECT 1 FROM sessions sp WHERE sp.id = substr(${alias}.subject_id, 1, instr(${alias}.subject_id, '::') - 1) AND ${prefixTc.sql})
|
|
107
|
+
OR ${alias}.subject_type NOT IN ${RESOLVABLE_SUBJECT_TYPES}
|
|
108
|
+
)`;
|
|
109
|
+
return { sql, params: [sessionTc.param, entityTc.param, prefixTc.param] };
|
|
110
|
+
}
|
|
111
|
+
export function undoAction(db, tenantId, actionId) {
|
|
112
|
+
const pred = subjectTenantPredicate(tenantId);
|
|
28
113
|
const target = db
|
|
29
|
-
.prepare(
|
|
30
|
-
.get(actionId);
|
|
31
|
-
|
|
114
|
+
.prepare(`SELECT id, kind, subject_type, subject_id FROM actions WHERE id = ? AND reverted_by IS NULL AND ${pred.sql}`)
|
|
115
|
+
.get(actionId, ...pred.params);
|
|
116
|
+
// An 'undo' row is itself unrevertable: reverting it wouldn't restore the
|
|
117
|
+
// original action (reverted_by on the original stays pointed at it), so it
|
|
118
|
+
// would just be a dead row. Reject cleanly with the same "not found or
|
|
119
|
+
// already undone" contract the caller already handles.
|
|
120
|
+
if (!target || target.kind === "undo")
|
|
32
121
|
return null;
|
|
33
122
|
const undoId = makeActionId();
|
|
34
123
|
const undoPayload = JSON.stringify({
|
|
@@ -45,7 +134,7 @@ export function undoAction(db, actionId) {
|
|
|
45
134
|
txn();
|
|
46
135
|
return { undoId, originalKind: target.kind };
|
|
47
136
|
}
|
|
48
|
-
export function listActions(db, opts = {}) {
|
|
137
|
+
export function listActions(db, tenantId, opts = {}) {
|
|
49
138
|
const limit = opts.limit ?? 100;
|
|
50
139
|
const where = [];
|
|
51
140
|
const params = [];
|
|
@@ -57,6 +146,9 @@ export function listActions(db, opts = {}) {
|
|
|
57
146
|
where.push("kind = ?");
|
|
58
147
|
params.push(opts.kind);
|
|
59
148
|
}
|
|
149
|
+
const pred = subjectTenantPredicate(tenantId);
|
|
150
|
+
where.push(pred.sql);
|
|
151
|
+
params.push(...pred.params);
|
|
60
152
|
const whereSql = where.length > 0 ? `WHERE ${where.join(" AND ")}` : "";
|
|
61
153
|
const sql = `
|
|
62
154
|
SELECT id, timestamp, kind, subject_type, subject_id, payload, actor, runtime, reverted_by
|
|
@@ -72,7 +164,24 @@ export function listActions(db, opts = {}) {
|
|
|
72
164
|
// ---------------------------------------------------------------------------
|
|
73
165
|
// PG-native counterparts
|
|
74
166
|
// ---------------------------------------------------------------------------
|
|
75
|
-
|
|
167
|
+
/** Pg counterpart of subjectTenantPredicate — see the module doc comment.
|
|
168
|
+
* `startIdx` is the next free `$n` slot; returns the following free index too. */
|
|
169
|
+
export function subjectTenantPredicatePg(tenantId, startIdx, alias = "actions") {
|
|
170
|
+
const sessionTc = tenantClausePg(tenantId, startIdx, "s.tenant_id");
|
|
171
|
+
const entityTc = tenantClausePg(tenantId, startIdx + 1, "e.tenant_id");
|
|
172
|
+
const prefixTc = tenantClausePg(tenantId, startIdx + 2, "sp.tenant_id");
|
|
173
|
+
const sql = `(
|
|
174
|
+
EXISTS (SELECT 1 FROM sessions s WHERE s.id = ${alias}.subject_id AND ${sessionTc.sql})
|
|
175
|
+
OR EXISTS (SELECT 1 FROM entities e WHERE e.canonical = ${alias}.subject_id AND ${entityTc.sql})
|
|
176
|
+
OR EXISTS (SELECT 1 FROM sessions sp WHERE ${alias}.subject_id LIKE sp.id || '::%' AND ${prefixTc.sql})
|
|
177
|
+
OR ${alias}.subject_type NOT IN ${RESOLVABLE_SUBJECT_TYPES}
|
|
178
|
+
)`;
|
|
179
|
+
return { sql, params: [sessionTc.param, entityTc.param, prefixTc.param], nextIdx: startIdx + 3 };
|
|
180
|
+
}
|
|
181
|
+
/** tenantId is accepted for signature uniformity (see the module doc
|
|
182
|
+
* comment) but not used to filter or stamp — `actions` has no tenant_id
|
|
183
|
+
* column, and write-time subject authorization is the caller's job. */
|
|
184
|
+
export async function writeActionPg(pool, _tenantId, input) {
|
|
76
185
|
const id = makeActionId();
|
|
77
186
|
const payload = input.payload ? JSON.stringify(input.payload) : null;
|
|
78
187
|
await pool.query(`INSERT INTO actions (id, timestamp, kind, subject_type, subject_id, payload, actor, runtime)
|
|
@@ -80,14 +189,15 @@ export async function writeActionPg(pool, input) {
|
|
|
80
189
|
payload, input.actor ?? "user", input.runtime ?? "api"]);
|
|
81
190
|
return id;
|
|
82
191
|
}
|
|
83
|
-
export async function writeActionsBatchPg(pool, inputs) {
|
|
84
|
-
|
|
192
|
+
export async function writeActionsBatchPg(pool, _tenantId, inputs) {
|
|
193
|
+
const deduped = dedupeActionInputs(inputs);
|
|
194
|
+
if (deduped.length === 0)
|
|
85
195
|
return [];
|
|
86
196
|
const client = await pool.connect();
|
|
87
197
|
try {
|
|
88
198
|
await client.query("BEGIN");
|
|
89
199
|
const ids = [];
|
|
90
|
-
for (const input of
|
|
200
|
+
for (const input of deduped) {
|
|
91
201
|
const id = makeActionId();
|
|
92
202
|
const payload = input.payload ? JSON.stringify(input.payload) : null;
|
|
93
203
|
await client.query(`INSERT INTO actions (id, timestamp, kind, subject_type, subject_id, payload, actor, runtime)
|
|
@@ -106,12 +216,15 @@ export async function writeActionsBatchPg(pool, inputs) {
|
|
|
106
216
|
client.release();
|
|
107
217
|
}
|
|
108
218
|
}
|
|
109
|
-
export async function undoActionPg(pool, actionId) {
|
|
219
|
+
export async function undoActionPg(pool, tenantId, actionId) {
|
|
110
220
|
const client = await pool.connect();
|
|
111
221
|
try {
|
|
112
222
|
await client.query("BEGIN");
|
|
113
|
-
const
|
|
114
|
-
|
|
223
|
+
const pred = subjectTenantPredicatePg(tenantId, 2);
|
|
224
|
+
const target = await client.query(`SELECT id, kind, subject_type, subject_id FROM actions WHERE id = $1 AND reverted_by IS NULL AND ${pred.sql} FOR UPDATE`, [actionId, ...pred.params]);
|
|
225
|
+
// See undoAction's sqlite counterpart: an 'undo' row can't itself be
|
|
226
|
+
// undone without leaving a dead row that doesn't restore anything.
|
|
227
|
+
if (!target.rows[0] || target.rows[0].kind === "undo") {
|
|
115
228
|
await client.query("ROLLBACK");
|
|
116
229
|
return null;
|
|
117
230
|
}
|
|
@@ -132,7 +245,7 @@ export async function undoActionPg(pool, actionId) {
|
|
|
132
245
|
client.release();
|
|
133
246
|
}
|
|
134
247
|
}
|
|
135
|
-
export async function listActionsPg(pool, opts = {}) {
|
|
248
|
+
export async function listActionsPg(pool, tenantId, opts = {}) {
|
|
136
249
|
const limit = opts.limit ?? 100;
|
|
137
250
|
const where = [];
|
|
138
251
|
const params = [];
|
|
@@ -145,6 +258,10 @@ export async function listActionsPg(pool, opts = {}) {
|
|
|
145
258
|
where.push(`kind = $${idx++}`);
|
|
146
259
|
params.push(opts.kind);
|
|
147
260
|
}
|
|
261
|
+
const pred = subjectTenantPredicatePg(tenantId, idx);
|
|
262
|
+
where.push(pred.sql);
|
|
263
|
+
params.push(...pred.params);
|
|
264
|
+
idx = pred.nextIdx;
|
|
148
265
|
const whereSql = where.length > 0 ? `WHERE ${where.join(" AND ")}` : "";
|
|
149
266
|
params.push(limit);
|
|
150
267
|
const result = await pool.query(`SELECT id, timestamp, kind, subject_type, subject_id, payload, actor, runtime, reverted_by
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions-log.js","sourceRoot":"","sources":["../../../src/core/actions/actions-log.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"actions-log.js","sourceRoot":"","sources":["../../../src/core/actions/actions-log.ts"],"names":[],"mappings":"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"}
|