nlm-memory 0.20.1 → 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 +69 -12
- package/assets/replay-eval-dark.svg +26 -0
- package/assets/replay-eval-light.svg +26 -0
- package/dist/cli/digest.js +69 -4
- package/dist/cli/digest.js.map +1 -1
- package/dist/cli/nlm.d.ts +14 -0
- package/dist/cli/nlm.js +556 -71
- 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-backfill.d.ts +34 -0
- package/dist/cli/scope-backfill.js +237 -0
- package/dist/cli/scope-backfill.js.map +1 -0
- package/dist/cli/scope-coverage.d.ts +44 -0
- package/dist/cli/scope-coverage.js +208 -0
- package/dist/cli/scope-coverage.js.map +1 -0
- 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/claude-code.d.ts +14 -0
- package/dist/core/adapters/claude-code.js +30 -0
- package/dist/core/adapters/claude-code.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 +46 -13
- package/dist/core/dataset/build-dataset.js.map +1 -1
- package/dist/core/digest/compose.d.ts +11 -3
- package/dist/core/digest/compose.js +70 -17
- package/dist/core/digest/compose.js.map +1 -1
- package/dist/core/digest/hook-injection.d.ts +43 -0
- package/dist/core/digest/hook-injection.js +87 -0
- package/dist/core/digest/hook-injection.js.map +1 -0
- 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 +2 -1
- package/dist/core/exemplars/capture-from-session.js +4 -4
- 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/extract-exemplar.d.ts +2 -0
- package/dist/core/exemplars/extract-exemplar.js +7 -1
- package/dist/core/exemplars/extract-exemplar.js.map +1 -1
- package/dist/core/exemplars/ingest-exemplar.d.ts +1 -0
- package/dist/core/exemplars/ingest-exemplar.js +1 -0
- package/dist/core/exemplars/ingest-exemplar.js.map +1 -1
- package/dist/core/exemplars/recall-code.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/claude-settings.d.ts +1 -1
- package/dist/core/hook/claude-settings.js +0 -1
- package/dist/core/hook/claude-settings.js.map +1 -1
- package/dist/core/hook/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/backfill-derivables.d.ts +92 -0
- package/dist/core/ingest/backfill-derivables.js +175 -0
- package/dist/core/ingest/backfill-derivables.js.map +1 -0
- package/dist/core/ingest/ingest-session.d.ts +1 -1
- package/dist/core/ingest/ingest-session.js +23 -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 +8 -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 +7 -2
- package/dist/core/ingest/reprocess.js.map +1 -1
- package/dist/core/ingest/transcript-derivables.d.ts +27 -0
- package/dist/core/ingest/transcript-derivables.js +138 -0
- package/dist/core/ingest/transcript-derivables.js.map +1 -0
- package/dist/core/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 +33 -0
- package/dist/core/outcome/coverage.js +46 -0
- package/dist/core/outcome/coverage.js.map +1 -0
- package/dist/core/outcome/rollup.d.ts +33 -0
- package/dist/core/outcome/rollup.js +113 -0
- package/dist/core/outcome/rollup.js.map +1 -0
- package/dist/core/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 +7 -4
- package/dist/core/recall/hook-recall-log.js +14 -8
- 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 +13 -12
- package/dist/core/recall-facts/fact-recall-service.js.map +1 -1
- package/dist/core/scheduler/scan-once.js +15 -12
- 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 +45 -10
- package/dist/core/scheduler/scheduler.js.map +1 -1
- package/dist/core/scope/alias-map.d.ts +10 -0
- package/dist/core/scope/alias-map.js +41 -0
- package/dist/core/scope/alias-map.js.map +1 -0
- package/dist/core/scope/derive-scope.d.ts +8 -0
- package/dist/core/scope/derive-scope.js +54 -0
- package/dist/core/scope/derive-scope.js.map +1 -0
- package/dist/core/scope/scope-clause.d.ts +16 -0
- package/dist/core/scope/scope-clause.js +21 -0
- package/dist/core/scope/scope-clause.js.map +1 -0
- package/dist/core/scope/stamp-flag.d.ts +1 -0
- package/dist/core/scope/stamp-flag.js +4 -0
- package/dist/core/scope/stamp-flag.js.map +1 -0
- package/dist/core/signals/code-signal.d.ts +1 -0
- package/dist/core/signals/code-signal.js +1 -0
- package/dist/core/signals/code-signal.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/ingest-signal.d.ts +1 -1
- package/dist/core/signals/ingest-signal.js +3 -1
- package/dist/core/signals/ingest-signal.js.map +1 -1
- package/dist/core/signals/stamp-scope.d.ts +18 -0
- package/dist/core/signals/stamp-scope.js +28 -0
- package/dist/core/signals/stamp-scope.js.map +1 -0
- package/dist/core/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 +62 -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 +25 -21
- package/dist/core/storage/pg-session-store.js +186 -114
- 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 +26 -13
- 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 +17 -11
- package/dist/core/storage/pg-workstream-store.js +47 -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 +86 -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 +175 -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 +104 -0
- package/dist/core/storage/sqlite-outcome-store.js +211 -0
- package/dist/core/storage/sqlite-outcome-store.js.map +1 -0
- package/dist/core/storage/sqlite-session-store.d.ts +50 -21
- package/dist/core/storage/sqlite-session-store.js +233 -149
- 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 +29 -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 +17 -11
- package/dist/core/storage/sqlite-workstream-store.js +53 -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 +21 -14
- package/dist/core/storage/supersedence-log.js.map +1 -1
- package/dist/core/telemetry/probe-filter.d.ts +35 -0
- package/dist/core/telemetry/probe-filter.js +56 -0
- package/dist/core/telemetry/probe-filter.js.map +1 -0
- package/dist/core/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/update-check/check.d.ts +6 -0
- package/dist/core/update-check/check.js +35 -0
- package/dist/core/update-check/check.js.map +1 -1
- package/dist/core/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 +3 -2
- package/dist/core/workstream/bind.js +29 -10
- package/dist/core/workstream/bind.js.map +1 -1
- package/dist/core/workstream/model.d.ts +1 -0
- package/dist/core/workstream/model.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 +8 -5
- package/dist/hook/pre-compact-hook.js.map +1 -1
- package/dist/hook/prompt-recall-hook.d.ts +7 -3
- package/dist/hook/prompt-recall-hook.js +35 -20
- package/dist/hook/prompt-recall-hook.js.map +1 -1
- package/dist/hook/recall-over-http.d.ts +28 -3
- package/dist/hook/recall-over-http.js +58 -12
- 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 +57 -16
- package/dist/hook/session-start-hook.js.map +1 -1
- package/dist/hook/stop-hook.js +11 -8
- package/dist/hook/stop-hook.js.map +1 -1
- package/dist/http/app.d.ts +47 -3
- package/dist/http/app.js +379 -132
- 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 +94 -15
- package/dist/mcp/server.js +402 -79
- 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 +85 -0
- package/dist/ports/outcome.js +11 -0
- package/dist/ports/outcome.js.map +1 -0
- package/dist/ports/session-store.d.ts +20 -20
- 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 +20 -12
- package/dist/shared/net.d.ts +3 -0
- package/dist/shared/net.js +4 -0
- package/dist/shared/net.js.map +1 -0
- package/dist/shared/types.d.ts +55 -0
- package/dist/shared/types.js +4 -1
- 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/029_project_scope.sql +21 -0
- package/migrations/032_session_derivables.sql +11 -0
- 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/030_project_scope.sql +23 -0
- package/migrations/pg/031_widen_session_edges_kind.sql +11 -0
- package/migrations/pg/032_session_derivables.sql +17 -0
- package/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 +258 -59
- package/package.json +10 -5
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/scripts/prompt-recall-hook.mjs +256 -58
- package/plugin/scripts/session-start-hook.mjs +283 -55
- package/plugin/scripts/stop-hook.mjs +199 -38
- package/dist/hook/subagent-start-hook.d.ts +0 -28
- package/dist/hook/subagent-start-hook.js +0 -81
- package/dist/hook/subagent-start-hook.js.map +0 -1
- package/dist/ui/assets/index-CMpQkbQy.js +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/core/update-check/check.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/core/update-check/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The projection: select, roll up, render, reconcile.
|
|
3
|
+
*
|
|
4
|
+
* Reads current content through the writer so reconcile can skip unchanged
|
|
5
|
+
* files. Colliding spellings of one subject merge into a single page rather
|
|
6
|
+
* than throwing (see slug.ts); only a slug that collides with a reserved
|
|
7
|
+
* generated filename still propagates, because the alternative there is one
|
|
8
|
+
* page silently overwriting the index or log.
|
|
9
|
+
*/
|
|
10
|
+
import type { FactStore } from "../../ports/fact-store.js";
|
|
11
|
+
import type { WikiWriter } from "../../ports/wiki-writer.js";
|
|
12
|
+
import type { ProjectionResult, WikiConfig } from "./types.js";
|
|
13
|
+
export interface ProjectDeps {
|
|
14
|
+
readonly facts: Pick<FactStore, "listSubjectStats" | "listBySubjects">;
|
|
15
|
+
readonly writer: WikiWriter;
|
|
16
|
+
}
|
|
17
|
+
export declare function projectWiki(deps: ProjectDeps, tenantId: string, config: WikiConfig, today: string): Promise<ProjectionResult>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { buildSlugGroups } from "./slug.js";
|
|
2
|
+
import { selectSubjects } from "./select.js";
|
|
3
|
+
import { rollupPages } from "./rollup.js";
|
|
4
|
+
import { renderAll } from "./render.js";
|
|
5
|
+
import { planReconcile } from "./reconcile.js";
|
|
6
|
+
export async function projectWiki(deps, tenantId, config, today) {
|
|
7
|
+
const stats = await deps.facts.listSubjectStats(tenantId);
|
|
8
|
+
const selected = selectSubjects(stats, config);
|
|
9
|
+
const groups = buildSlugGroups(selected.map((s) => s.subject));
|
|
10
|
+
const pages = await rollupPages(deps, tenantId, selected, groups);
|
|
11
|
+
const rendered = renderAll(pages, config, today);
|
|
12
|
+
const existing = await deps.writer.list();
|
|
13
|
+
const rendering = new Set(rendered.map((r) => r.relPath));
|
|
14
|
+
const current = new Map();
|
|
15
|
+
for (const relPath of existing) {
|
|
16
|
+
if (!rendering.has(relPath))
|
|
17
|
+
continue;
|
|
18
|
+
const content = await deps.writer.read(relPath);
|
|
19
|
+
if (content !== null)
|
|
20
|
+
current.set(relPath, content);
|
|
21
|
+
}
|
|
22
|
+
const plan = planReconcile(rendered, existing, current);
|
|
23
|
+
for (const file of plan.toWrite)
|
|
24
|
+
await deps.writer.write(file.relPath, file.content);
|
|
25
|
+
for (const relPath of plan.toRemove)
|
|
26
|
+
await deps.writer.remove(relPath);
|
|
27
|
+
const onDisk = (await deps.writer.list()).filter((p) => p !== "index.md" && p !== "log.md").length;
|
|
28
|
+
return {
|
|
29
|
+
written: plan.toWrite.length,
|
|
30
|
+
unchanged: plan.unchanged,
|
|
31
|
+
removed: plan.toRemove.length,
|
|
32
|
+
qualifying: pages.length,
|
|
33
|
+
onDisk,
|
|
34
|
+
coverageDrift: pages.length - onDisk,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/core/wiki/project.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAO/C,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAiB,EACjB,QAAgB,EAChB,MAAkB,EAClB,KAAa;IAEb,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvE,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IACnG,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;QAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;QAC7B,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,MAAM;QACN,aAAa,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM;KACrC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff the rendered set against what is on disk.
|
|
3
|
+
*
|
|
4
|
+
* Skipping byte-identical files is what makes a 6-hourly job free: a run with
|
|
5
|
+
* no corpus change writes nothing and Obsidian never re-indexes. Removing
|
|
6
|
+
* files with no rendered counterpart is what keeps the tree a projection
|
|
7
|
+
* rather than an append-only pile.
|
|
8
|
+
*/
|
|
9
|
+
import type { RenderedPage } from "./types.js";
|
|
10
|
+
export interface ReconcilePlan {
|
|
11
|
+
readonly toWrite: ReadonlyArray<RenderedPage>;
|
|
12
|
+
readonly toRemove: ReadonlyArray<string>;
|
|
13
|
+
readonly unchanged: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function planReconcile(rendered: ReadonlyArray<RenderedPage>, existing: ReadonlyArray<string>, current: ReadonlyMap<string, string>): ReconcilePlan;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function planReconcile(rendered, existing, current) {
|
|
2
|
+
const toWrite = [];
|
|
3
|
+
let unchanged = 0;
|
|
4
|
+
for (const file of rendered) {
|
|
5
|
+
if (current.get(file.relPath) === file.content)
|
|
6
|
+
unchanged += 1;
|
|
7
|
+
else
|
|
8
|
+
toWrite.push(file);
|
|
9
|
+
}
|
|
10
|
+
const keep = new Set(rendered.map((f) => f.relPath));
|
|
11
|
+
const toRemove = existing.filter((p) => !keep.has(p));
|
|
12
|
+
return { toWrite, toRemove, unchanged };
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../../src/core/wiki/reconcile.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,aAAa,CAC3B,QAAqC,EACrC,QAA+B,EAC/B,OAAoC;IAEpC,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO;YAAE,SAAS,IAAI,CAAC,CAAC;;YAC1D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { PageRollup, RenderedPage, WikiConfig } from "./types.js";
|
|
2
|
+
export declare function renderPage(page: PageRollup, config: WikiConfig): RenderedPage;
|
|
3
|
+
export declare function renderIndex(pages: ReadonlyArray<PageRollup>, today: string): RenderedPage;
|
|
4
|
+
export declare function renderLog(pages: ReadonlyArray<PageRollup>, today: string): RenderedPage;
|
|
5
|
+
export declare function renderAll(pages: ReadonlyArray<PageRollup>, config: WikiConfig, today: string): ReadonlyArray<RenderedPage>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { slugify } from "./slug.js";
|
|
2
|
+
const LOG_LIMIT = 100;
|
|
3
|
+
export function renderPage(page, config) {
|
|
4
|
+
const lines = [
|
|
5
|
+
"---",
|
|
6
|
+
`title: ${JSON.stringify(page.subject)}`,
|
|
7
|
+
"nlm_generated: true",
|
|
8
|
+
`fact_count: ${page.current.length}`,
|
|
9
|
+
`session_count: ${page.sessionIds.length}`,
|
|
10
|
+
`superseded_count: ${page.superseded.length}`,
|
|
11
|
+
...(page.aliases.length > 0
|
|
12
|
+
? [`aliases: [${page.aliases.map((a) => JSON.stringify(a)).join(", ")}]`]
|
|
13
|
+
: []),
|
|
14
|
+
"---",
|
|
15
|
+
"",
|
|
16
|
+
`> Generated by NLM from ${page.sessionIds.length} session${page.sessionIds.length === 1 ? "" : "s"}.`,
|
|
17
|
+
"> Edits are overwritten. To keep something here, promote it.",
|
|
18
|
+
"",
|
|
19
|
+
"## Current",
|
|
20
|
+
"",
|
|
21
|
+
];
|
|
22
|
+
for (const f of page.current) {
|
|
23
|
+
lines.push(`- ${f.predicate}: ${f.value} ^${f.id}`);
|
|
24
|
+
lines.push(` <sup>[session](${config.linkBase}/thread/${f.sourceSessionId}) · confidence ${f.confidence}</sup>`);
|
|
25
|
+
}
|
|
26
|
+
lines.push("");
|
|
27
|
+
if (page.superseded.length > 0) {
|
|
28
|
+
lines.push("## History", "");
|
|
29
|
+
for (const f of page.superseded) {
|
|
30
|
+
lines.push(`- ~~${f.predicate}: ${f.value}~~ <sup>superseded, from [session](${config.linkBase}/thread/${f.sourceSessionId})</sup>`);
|
|
31
|
+
}
|
|
32
|
+
lines.push("");
|
|
33
|
+
}
|
|
34
|
+
if (page.related.length > 0) {
|
|
35
|
+
lines.push("## Related", "");
|
|
36
|
+
lines.push(page.related.map((s) => `[[${slugify(s)}]]`).join(" · "));
|
|
37
|
+
lines.push("");
|
|
38
|
+
}
|
|
39
|
+
return { relPath: `${page.slug}.md`, content: lines.join("\n") };
|
|
40
|
+
}
|
|
41
|
+
export function renderIndex(pages, today) {
|
|
42
|
+
const lines = [
|
|
43
|
+
"---",
|
|
44
|
+
"title: Index",
|
|
45
|
+
"nlm_generated: true",
|
|
46
|
+
`last_projected: ${today}`,
|
|
47
|
+
"---",
|
|
48
|
+
"",
|
|
49
|
+
`> Generated by NLM. ${pages.length} page${pages.length === 1 ? "" : "s"}.`,
|
|
50
|
+
"",
|
|
51
|
+
];
|
|
52
|
+
const sorted = pages.slice().sort((a, b) => a.subject.localeCompare(b.subject));
|
|
53
|
+
for (const p of sorted) {
|
|
54
|
+
lines.push(`- [[${p.slug}]] <sup>${p.current.length} facts · ${p.sessionIds.length} sessions</sup>`);
|
|
55
|
+
}
|
|
56
|
+
lines.push("");
|
|
57
|
+
return { relPath: "index.md", content: lines.join("\n") };
|
|
58
|
+
}
|
|
59
|
+
export function renderLog(pages, today) {
|
|
60
|
+
const entries = [];
|
|
61
|
+
for (const p of pages)
|
|
62
|
+
for (const f of p.current)
|
|
63
|
+
entries.push({ fact: f, page: p });
|
|
64
|
+
entries.sort((a, b) => b.fact.createdAt.localeCompare(a.fact.createdAt) || a.fact.id.localeCompare(b.fact.id));
|
|
65
|
+
const lines = [
|
|
66
|
+
"---",
|
|
67
|
+
"title: Log",
|
|
68
|
+
"nlm_generated: true",
|
|
69
|
+
`last_projected: ${today}`,
|
|
70
|
+
"---",
|
|
71
|
+
"",
|
|
72
|
+
"> Generated by NLM, most recent knowledge at the top.",
|
|
73
|
+
"",
|
|
74
|
+
];
|
|
75
|
+
for (const { fact, page } of entries.slice(0, LOG_LIMIT)) {
|
|
76
|
+
lines.push(`- ${fact.createdAt.slice(0, 10)} [[${page.slug}]] ${fact.predicate}: ${fact.value}`);
|
|
77
|
+
}
|
|
78
|
+
lines.push("");
|
|
79
|
+
return { relPath: "log.md", content: lines.join("\n") };
|
|
80
|
+
}
|
|
81
|
+
export function renderAll(pages, config, today) {
|
|
82
|
+
return [...pages.map((p) => renderPage(p, config)), renderIndex(pages, today), renderLog(pages, today)];
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/core/wiki/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assemble one PageRollup per slug group.
|
|
3
|
+
*
|
|
4
|
+
* A group with more than one member is a merge: colliding spellings of one
|
|
5
|
+
* concept, already resolved by buildSlugGroups. This stage picks a canonical
|
|
6
|
+
* spelling, unions the group's facts (deduplicated by id, since the same
|
|
7
|
+
* fact must never render twice), and lists the rest as aliases.
|
|
8
|
+
*
|
|
9
|
+
* `related` links co-occurring subjects rather than entities. Entity pages do
|
|
10
|
+
* not exist until P4, so entity wikilinks would render broken on every page;
|
|
11
|
+
* a subject link points at a page this same run produces, and always names
|
|
12
|
+
* the canonical spelling so the link never points at an alias.
|
|
13
|
+
*
|
|
14
|
+
* All selected subjects' facts are loaded in a single listBySubjects call
|
|
15
|
+
* rather than one listForRecall call per subject: better-sqlite3 is
|
|
16
|
+
* synchronous, so a Promise.all over per-subject queries serializes into one
|
|
17
|
+
* blocking chain instead of parallelizing, and listForRecall's default
|
|
18
|
+
* limit + includeSuperseded flag disqualify its partial indexes. See #wiki
|
|
19
|
+
* rollup perf writeup. listBySubjects also excludes retired facts outright
|
|
20
|
+
* (listForRecall's includeSuperseded does not), so a retired fact can never
|
|
21
|
+
* render under Current again.
|
|
22
|
+
*/
|
|
23
|
+
import type { FactStore, SubjectStat } from "../../ports/fact-store.js";
|
|
24
|
+
import type { PageRollup } from "./types.js";
|
|
25
|
+
export interface RollupDeps {
|
|
26
|
+
readonly facts: Pick<FactStore, "listBySubjects">;
|
|
27
|
+
}
|
|
28
|
+
export declare function rollupPages(deps: RollupDeps, tenantId: string, selected: ReadonlyArray<SubjectStat>, groups: ReadonlyMap<string, ReadonlyArray<string>>): Promise<ReadonlyArray<PageRollup>>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export async function rollupPages(deps, tenantId, selected, groups) {
|
|
2
|
+
const currentFactCountBySubject = new Map(selected.map((s) => [s.subject, s.factCount]));
|
|
3
|
+
const sortedGroups = [...groups.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
4
|
+
const allSubjects = sortedGroups.flatMap(([, members]) => members);
|
|
5
|
+
const allFacts = await deps.facts.listBySubjects(tenantId, allSubjects);
|
|
6
|
+
const factsBySubject = new Map();
|
|
7
|
+
for (const f of allFacts) {
|
|
8
|
+
const bucket = factsBySubject.get(f.subject);
|
|
9
|
+
if (bucket)
|
|
10
|
+
bucket.push(f);
|
|
11
|
+
else
|
|
12
|
+
factsBySubject.set(f.subject, [f]);
|
|
13
|
+
}
|
|
14
|
+
const loaded = sortedGroups.map(([slug, members]) => {
|
|
15
|
+
const perMember = members.map((subject) => factsBySubject.get(subject) ?? []);
|
|
16
|
+
const deduped = dedupeById(perMember.flat());
|
|
17
|
+
const current = deduped.filter((f) => f.supersededBy === null);
|
|
18
|
+
const superseded = deduped.filter((f) => f.supersededBy !== null);
|
|
19
|
+
const orderedMembers = members
|
|
20
|
+
.slice()
|
|
21
|
+
.sort((a, b) => compareCanonical(a, b, slug, currentFactCountBySubject));
|
|
22
|
+
const subject = orderedMembers[0];
|
|
23
|
+
const aliases = orderedMembers.slice(1).sort((a, b) => a.localeCompare(b));
|
|
24
|
+
return { slug, subject, aliases, current, superseded };
|
|
25
|
+
});
|
|
26
|
+
const subjectsBySession = new Map();
|
|
27
|
+
for (const { subject, current } of loaded) {
|
|
28
|
+
for (const f of current) {
|
|
29
|
+
let set = subjectsBySession.get(f.sourceSessionId);
|
|
30
|
+
if (!set) {
|
|
31
|
+
set = new Set();
|
|
32
|
+
subjectsBySession.set(f.sourceSessionId, set);
|
|
33
|
+
}
|
|
34
|
+
set.add(subject);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return loaded.map(({ slug, subject, aliases, current, superseded }) => {
|
|
38
|
+
const sessionIds = [...new Set(current.map((f) => f.sourceSessionId))].sort();
|
|
39
|
+
const related = new Set();
|
|
40
|
+
for (const sid of sessionIds) {
|
|
41
|
+
for (const other of subjectsBySession.get(sid) ?? []) {
|
|
42
|
+
if (other !== subject)
|
|
43
|
+
related.add(other);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
subject,
|
|
48
|
+
slug,
|
|
49
|
+
aliases,
|
|
50
|
+
current: sortFacts(current),
|
|
51
|
+
superseded: sortFacts(superseded),
|
|
52
|
+
sessionIds,
|
|
53
|
+
related: [...related].sort(),
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Canonical spelling within a group: most current facts wins; a tie where
|
|
59
|
+
* exactly one spelling equals the slug is broken in its favor; any remaining
|
|
60
|
+
* tie falls to localeCompare. A strict total order, so sorting members with
|
|
61
|
+
* it and taking the first element is deterministic regardless of input
|
|
62
|
+
* order.
|
|
63
|
+
*
|
|
64
|
+
* `a` and `b` are always group members, and every group member is drawn
|
|
65
|
+
* from `selected` (buildSlugGroups is only ever called on
|
|
66
|
+
* `selected.map(s => s.subject)`), which is exactly what populates
|
|
67
|
+
* `currentFactCountBySubject`. The lookup can't miss, so a non-null
|
|
68
|
+
* assertion documents that instead of a `?? 0` fallback masking a case that
|
|
69
|
+
* never occurs.
|
|
70
|
+
*/
|
|
71
|
+
function compareCanonical(a, b, slug, currentFactCountBySubject) {
|
|
72
|
+
const countA = currentFactCountBySubject.get(a);
|
|
73
|
+
const countB = currentFactCountBySubject.get(b);
|
|
74
|
+
if (countA !== countB)
|
|
75
|
+
return countB - countA;
|
|
76
|
+
const aIsSlug = a === slug;
|
|
77
|
+
const bIsSlug = b === slug;
|
|
78
|
+
if (aIsSlug !== bIsSlug)
|
|
79
|
+
return aIsSlug ? -1 : 1;
|
|
80
|
+
return a.localeCompare(b);
|
|
81
|
+
}
|
|
82
|
+
function dedupeById(facts) {
|
|
83
|
+
const byId = new Map();
|
|
84
|
+
for (const f of facts)
|
|
85
|
+
byId.set(f.id, f);
|
|
86
|
+
return [...byId.values()];
|
|
87
|
+
}
|
|
88
|
+
function sortFacts(facts) {
|
|
89
|
+
return facts.slice().sort((a, b) => a.createdAt.localeCompare(b.createdAt) || a.id.localeCompare(b.id));
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=rollup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollup.js","sourceRoot":"","sources":["../../../src/core/wiki/rollup.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAgB,EAChB,QAAgB,EAChB,QAAoC,EACpC,MAAkD;IAElD,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEzF,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAElF,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YACtB,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;QAElE,MAAM,cAAc,GAAG,OAAO;aAC3B,KAAK,EAAE;aACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAE,CAAC;QACnC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAuB,CAAC;IACzD,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,MAAM,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;gBACxB,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YAChD,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE;QACpE,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,KAAK,MAAM,KAAK,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrD,IAAI,KAAK,KAAK,OAAO;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,OAAO;YACL,OAAO;YACP,IAAI;YACJ,OAAO;YACP,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;YAC3B,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC;YACjC,UAAU;YACV,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE;SAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,gBAAgB,CACvB,CAAS,EACT,CAAS,EACT,IAAY,EACZ,yBAAsD;IAEtD,MAAM,MAAM,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;IACjD,MAAM,MAAM,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;IACjD,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,MAAM,GAAG,MAAM,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,CAAC;IAC3B,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,CAAC;IAC3B,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,UAAU,CAAC,KAA0B;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAgB,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS,CAAC,KAA0B;IAC3C,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1G,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Threshold selection. Both bounds must hold: fact count alone lets one
|
|
3
|
+
* chatty session mint a page, and session count alone lets a subject
|
|
4
|
+
* mentioned once in each of three sessions mint a page with nothing on it.
|
|
5
|
+
*/
|
|
6
|
+
import type { SubjectStat } from "../../ports/fact-store.js";
|
|
7
|
+
import type { WikiConfig } from "./types.js";
|
|
8
|
+
export declare function selectSubjects(stats: ReadonlyArray<SubjectStat>, config: WikiConfig): ReadonlyArray<SubjectStat>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function selectSubjects(stats, config) {
|
|
2
|
+
return stats
|
|
3
|
+
.filter((s) => s.factCount >= config.minFacts && s.sessionCount >= config.minSessions)
|
|
4
|
+
.slice()
|
|
5
|
+
.sort((a, b) => b.factCount - a.factCount || a.subject.localeCompare(b.subject));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/core/wiki/select.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,cAAc,CAC5B,KAAiC,EACjC,MAAkB;IAElB,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,WAAW,CAAC;SACrF,KAAK,EAAE;SACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subject to filename. Subjects come from the classifier already lowercased
|
|
3
|
+
* and trimmed by prompt contract, but that contract is not enforced at the
|
|
4
|
+
* storage layer: a minority carry spaces, path separators, and colons. A raw
|
|
5
|
+
* write of `scripts/release.sh` would create a subdirectory rather than a
|
|
6
|
+
* page, so slugging is required, not cosmetic.
|
|
7
|
+
*
|
|
8
|
+
* Slugging is lossy, so two distinct subjects can land on one filename.
|
|
9
|
+
* Empirically every such collision on the real corpus is one concept spelled
|
|
10
|
+
* two ways, so buildSlugGroups merges them into a single page rather than
|
|
11
|
+
* throwing; rollup.ts picks a canonical spelling and lists the rest as
|
|
12
|
+
* aliases. A slug that matches a reserved filename is different in kind (it
|
|
13
|
+
* would collide with a generated file, not another subject) and still
|
|
14
|
+
* throws.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Slugs `renderAll` always emits (`index.md`, `log.md`) regardless of the
|
|
18
|
+
* corpus. A subject that slugs to one of these would silently overwrite the
|
|
19
|
+
* generated file (or be overwritten by it), so buildSlugGroups still throws
|
|
20
|
+
* on a match here rather than merging a subject's facts into the index.
|
|
21
|
+
*/
|
|
22
|
+
export declare const RESERVED_SLUGS: readonly ["index", "log"];
|
|
23
|
+
export declare function slugify(subject: string): string;
|
|
24
|
+
export declare class SlugCollisionError extends Error {
|
|
25
|
+
readonly slug: string;
|
|
26
|
+
readonly subjects: ReadonlyArray<string>;
|
|
27
|
+
constructor(slug: string, subjects: ReadonlyArray<string>);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Group selected subjects by slug. A slug with more than one member is a
|
|
31
|
+
* merge candidate for rollup.ts, not an error: only a match against a
|
|
32
|
+
* reserved filename still throws. Members of each group are deduplicated and
|
|
33
|
+
* sorted with localeCompare so the group's contents are deterministic
|
|
34
|
+
* regardless of input order.
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildSlugGroups(subjects: ReadonlyArray<string>): ReadonlyMap<string, ReadonlyArray<string>>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subject to filename. Subjects come from the classifier already lowercased
|
|
3
|
+
* and trimmed by prompt contract, but that contract is not enforced at the
|
|
4
|
+
* storage layer: a minority carry spaces, path separators, and colons. A raw
|
|
5
|
+
* write of `scripts/release.sh` would create a subdirectory rather than a
|
|
6
|
+
* page, so slugging is required, not cosmetic.
|
|
7
|
+
*
|
|
8
|
+
* Slugging is lossy, so two distinct subjects can land on one filename.
|
|
9
|
+
* Empirically every such collision on the real corpus is one concept spelled
|
|
10
|
+
* two ways, so buildSlugGroups merges them into a single page rather than
|
|
11
|
+
* throwing; rollup.ts picks a canonical spelling and lists the rest as
|
|
12
|
+
* aliases. A slug that matches a reserved filename is different in kind (it
|
|
13
|
+
* would collide with a generated file, not another subject) and still
|
|
14
|
+
* throws.
|
|
15
|
+
*/
|
|
16
|
+
const UNSAFE = /[^a-z0-9.-]+/g;
|
|
17
|
+
const RUNS = /-{2,}/g;
|
|
18
|
+
const EDGES = /^-+|-+$/g;
|
|
19
|
+
/**
|
|
20
|
+
* Slugs `renderAll` always emits (`index.md`, `log.md`) regardless of the
|
|
21
|
+
* corpus. A subject that slugs to one of these would silently overwrite the
|
|
22
|
+
* generated file (or be overwritten by it), so buildSlugGroups still throws
|
|
23
|
+
* on a match here rather than merging a subject's facts into the index.
|
|
24
|
+
*/
|
|
25
|
+
export const RESERVED_SLUGS = ["index", "log"];
|
|
26
|
+
export function slugify(subject) {
|
|
27
|
+
return subject
|
|
28
|
+
.toLowerCase()
|
|
29
|
+
.replace(UNSAFE, "-")
|
|
30
|
+
.replace(RUNS, "-")
|
|
31
|
+
.replace(EDGES, "");
|
|
32
|
+
}
|
|
33
|
+
export class SlugCollisionError extends Error {
|
|
34
|
+
slug;
|
|
35
|
+
subjects;
|
|
36
|
+
constructor(slug, subjects) {
|
|
37
|
+
super(`wiki slug collision: ${subjects.map((s) => JSON.stringify(s)).join(" and ")} ` +
|
|
38
|
+
`both slug to ${JSON.stringify(slug)}`);
|
|
39
|
+
this.name = "SlugCollisionError";
|
|
40
|
+
this.slug = slug;
|
|
41
|
+
this.subjects = subjects;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Group selected subjects by slug. A slug with more than one member is a
|
|
46
|
+
* merge candidate for rollup.ts, not an error: only a match against a
|
|
47
|
+
* reserved filename still throws. Members of each group are deduplicated and
|
|
48
|
+
* sorted with localeCompare so the group's contents are deterministic
|
|
49
|
+
* regardless of input order.
|
|
50
|
+
*/
|
|
51
|
+
export function buildSlugGroups(subjects) {
|
|
52
|
+
const bySlug = new Map();
|
|
53
|
+
for (const subject of subjects) {
|
|
54
|
+
const slug = slugify(subject);
|
|
55
|
+
if (RESERVED_SLUGS.includes(slug)) {
|
|
56
|
+
throw new SlugCollisionError(slug, [subject, `generated file ${slug}.md`]);
|
|
57
|
+
}
|
|
58
|
+
let members = bySlug.get(slug);
|
|
59
|
+
if (!members) {
|
|
60
|
+
members = new Set();
|
|
61
|
+
bySlug.set(slug, members);
|
|
62
|
+
}
|
|
63
|
+
members.add(subject);
|
|
64
|
+
}
|
|
65
|
+
const out = new Map();
|
|
66
|
+
for (const slug of [...bySlug.keys()].sort((a, b) => a.localeCompare(b))) {
|
|
67
|
+
out.set(slug, [...bySlug.get(slug)].sort((a, b) => a.localeCompare(b)));
|
|
68
|
+
}
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=slug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../../../src/core/wiki/slug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,GAAG,eAAe,CAAC;AAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC;AACtB,MAAM,KAAK,GAAG,UAAU,CAAC;AAEzB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,KAAK,CAAU,CAAC;AAExD,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,OAAO;SACX,WAAW,EAAE;SACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAS;IACb,QAAQ,CAAwB;IAEzC,YAAY,IAAY,EAAE,QAA+B;QACvD,KAAK,CACH,wBAAwB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;YAC7E,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CACzC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,QAA+B;IAE/B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAK,cAAwC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,kBAAkB,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,IAAI,KAAK,CAAC,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiC,CAAC;IACrD,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,GAAG,CACL,IAAI,EACJ,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Fact } from "../../shared/types.js";
|
|
2
|
+
export interface WikiConfig {
|
|
3
|
+
readonly minFacts: number;
|
|
4
|
+
readonly minSessions: number;
|
|
5
|
+
/** Base URL a page's session links point at. Config because a page outlives
|
|
6
|
+
* the process that wrote it and a synced vault must not carry dead
|
|
7
|
+
* loopback links. */
|
|
8
|
+
readonly linkBase: string;
|
|
9
|
+
}
|
|
10
|
+
export interface PageRollup {
|
|
11
|
+
/** Canonical spelling, chosen deterministically when a page merges more
|
|
12
|
+
* than one colliding spelling. See rollup.ts for the selection rule. */
|
|
13
|
+
readonly subject: string;
|
|
14
|
+
readonly slug: string;
|
|
15
|
+
readonly current: ReadonlyArray<Fact>;
|
|
16
|
+
readonly superseded: ReadonlyArray<Fact>;
|
|
17
|
+
readonly sessionIds: ReadonlyArray<string>;
|
|
18
|
+
/** Other subjects that earned a page and share a session with this one. */
|
|
19
|
+
readonly related: ReadonlyArray<string>;
|
|
20
|
+
/** Other spellings that merged into this page. Empty when nothing merged. */
|
|
21
|
+
readonly aliases: ReadonlyArray<string>;
|
|
22
|
+
}
|
|
23
|
+
export interface RenderedPage {
|
|
24
|
+
readonly relPath: string;
|
|
25
|
+
readonly content: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ProjectionResult {
|
|
28
|
+
readonly written: number;
|
|
29
|
+
readonly unchanged: number;
|
|
30
|
+
readonly removed: number;
|
|
31
|
+
/** Number of pages selection produced, i.e. distinct slug groups — not the
|
|
32
|
+
* number of selected subjects, since a merge makes those diverge. */
|
|
33
|
+
readonly qualifying: number;
|
|
34
|
+
readonly onDisk: number;
|
|
35
|
+
/** qualifying minus onDisk after the run. Nonzero means a run failed. */
|
|
36
|
+
readonly coverageDrift: number;
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/wiki/types.ts"],"names":[],"mappings":""}
|
|
@@ -9,4 +9,4 @@ export interface BuildWorkDigestDeps {
|
|
|
9
9
|
readonly readTimestamps?: (path: string, fromMs: number, toMs: number) => number[];
|
|
10
10
|
readonly workstreams?: Pick<import("../../ports/workstream-store.js").WorkstreamStore, "listAll">;
|
|
11
11
|
}
|
|
12
|
-
export declare function buildWorkDigest(deps: BuildWorkDigestDeps, date: string): Promise<WorkDigest>;
|
|
12
|
+
export declare function buildWorkDigest(deps: BuildWorkDigestDeps, tenantId: string, date: string): Promise<WorkDigest>;
|
|
@@ -12,13 +12,13 @@ function dayWindow(date) {
|
|
|
12
12
|
to.setDate(to.getDate() + 1);
|
|
13
13
|
return { fromMs: from.getTime(), toMs: to.getTime(), fromIso: from.toISOString(), toIso: to.toISOString() };
|
|
14
14
|
}
|
|
15
|
-
export async function buildWorkDigest(deps, date) {
|
|
15
|
+
export async function buildWorkDigest(deps, tenantId, date) {
|
|
16
16
|
const idleThresholdMin = deps.idleThresholdMin ?? 5;
|
|
17
17
|
const deepBlockMin = deps.deepBlockMin ?? 25;
|
|
18
18
|
const topicProvider = deps.topicProvider ?? defaultTopicProvider;
|
|
19
19
|
const readTs = deps.readTimestamps ?? readTranscriptTimestamps;
|
|
20
20
|
const provider = deps.workstreams ? workstreamTopicProvider(topicProvider) : topicProvider;
|
|
21
|
-
const wsList = deps.workstreams ? await deps.workstreams.listAll() : [];
|
|
21
|
+
const wsList = deps.workstreams ? await deps.workstreams.listAll(tenantId) : [];
|
|
22
22
|
const wsById = new Map(wsList.map((w) => [w.id, { id: w.id, mergedInto: w.mergedInto }]));
|
|
23
23
|
const wsLabel = new Map(wsList.map((w) => [w.id, w.label]));
|
|
24
24
|
function resolveWs(id) {
|
|
@@ -29,7 +29,7 @@ export async function buildWorkDigest(deps, date) {
|
|
|
29
29
|
return label ? { id: live, label } : null;
|
|
30
30
|
}
|
|
31
31
|
const { fromMs, toMs, fromIso, toIso } = dayWindow(date);
|
|
32
|
-
const sessions = await deps.store.listByDateRange(fromIso, toIso);
|
|
32
|
+
const sessions = await deps.store.listByDateRange(tenantId, fromIso, toIso);
|
|
33
33
|
const activities = [];
|
|
34
34
|
const allSpans = [];
|
|
35
35
|
const decisions = new Set();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-work-digest.js","sourceRoot":"","sources":["../../../src/core/work-digest/build-work-digest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAsB,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGlE,MAAM,UAAU,GAAG,0EAA0E,CAAC;AAW9F,6EAA6E;AAC7E,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;AAC9G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAyB,EAAE,IAAY;
|
|
1
|
+
{"version":3,"file":"build-work-digest.js","sourceRoot":"","sources":["../../../src/core/work-digest/build-work-digest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAsB,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGlE,MAAM,UAAU,GAAG,0EAA0E,CAAC;AAW9F,6EAA6E;AAC7E,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;AAC9G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAyB,EAAE,QAAgB,EAAE,IAAY;IAC7F,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;IAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,oBAAoB,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,IAAI,wBAAwB,CAAC;IAE/D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5D,SAAS,SAAS,CAAC,EAA6B;QAC9C,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACrB,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAE5E,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAe,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS;YAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI;YAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,YAAY,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/G,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAClG,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,YAAY,EAAE,gBAAgB,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAE3E,OAAO;QACL,IAAI;QACJ,gBAAgB;QAChB,SAAS,EAAE,UAAU;QACrB,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE;QACjG,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,EAAE;QACjD,OAAO;QACP,KAAK;QACL,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE;KACnE,CAAC;AACJ,CAAC"}
|
|
@@ -5,7 +5,7 @@ import type { BindingSource } from "./model.js";
|
|
|
5
5
|
export declare const NAMING_CONTENT_CHARS = 8000;
|
|
6
6
|
export interface BindDeps {
|
|
7
7
|
readonly namer: Pick<LLMClient, "nameWorkstream">;
|
|
8
|
-
readonly workstreams: Pick<WorkstreamStore, "listAll" | "upsertEntities" | "touchLastSession">;
|
|
8
|
+
readonly workstreams: Pick<WorkstreamStore, "listAll" | "create" | "upsertEntities" | "touchLastSession">;
|
|
9
9
|
readonly sessions: Pick<SessionStore, "setWorkstreamBinding">;
|
|
10
10
|
readonly aliasToLabel: ReadonlyMap<string, string>;
|
|
11
11
|
readonly log?: (msg: string) => void;
|
|
@@ -18,8 +18,9 @@ export interface BindInput {
|
|
|
18
18
|
readonly body?: string;
|
|
19
19
|
readonly entities: ReadonlyArray<string>;
|
|
20
20
|
readonly startedAt: string;
|
|
21
|
+
readonly scope: string | null;
|
|
21
22
|
}
|
|
22
23
|
export interface BindResult {
|
|
23
24
|
readonly workstreamId: string;
|
|
24
25
|
}
|
|
25
|
-
export declare function bindSessionToWorkstream(deps: BindDeps, input: BindInput): Promise<BindResult | null>;
|
|
26
|
+
export declare function bindSessionToWorkstream(deps: BindDeps, tenantId: string, input: BindInput): Promise<BindResult | null>;
|