@remnic/core 9.69.48 → 9.69.49
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/dist/access-admin-ops-surface.d.ts +14 -14
- package/dist/access-admin-ops-surface.js +31 -29
- package/dist/access-authorization-probe.d.ts +14 -14
- package/dist/access-authorization-probe.js +32 -30
- package/dist/access-boundary.d.ts +14 -14
- package/dist/access-boundary.js +31 -29
- package/dist/access-cli.js +98 -97
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +1 -1
- package/dist/access-extraction-force-flush.d.ts +14 -14
- package/dist/access-extraction-force-flush.js +31 -29
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-briefing.d.ts +14 -14
- package/dist/access-http-briefing.js +32 -30
- package/dist/access-http-lcm-compaction.d.ts +14 -14
- package/dist/access-http-lifecycle-flush.d.ts +14 -14
- package/dist/access-http-offline-stream.d.ts +14 -14
- package/dist/access-http-query.d.ts +2 -2
- package/dist/access-http-query.js +33 -31
- package/dist/access-http.d.ts +15 -15
- package/dist/access-http.js +51 -49
- package/dist/access-identity-continuity-surface.d.ts +11 -11
- package/dist/access-identity-continuity-surface.js +31 -29
- package/dist/access-lcm-surface.d.ts +14 -14
- package/dist/access-lcm-surface.js +31 -29
- package/dist/access-mcp-shared-context-tools.d.ts +14 -14
- package/dist/access-mcp.d.ts +14 -14
- package/dist/access-mcp.js +41 -39
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-CetF9ziA.d.ts → access-namespace-preflight-DqRw_g-8.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +31 -29
- package/dist/access-observe-transcript.d.ts +11 -11
- package/dist/access-observe-write-category.d.ts +3 -3
- package/dist/access-observe-write-surface.d.ts +14 -14
- package/dist/access-observe-write-surface.js +31 -29
- package/dist/access-offline-manifest.d.ts +11 -11
- package/dist/access-operations-batch.js +33 -31
- package/dist/access-operations.d.ts +14 -14
- package/dist/access-operations.js +40 -38
- package/dist/access-recall-concurrency.d.ts +14 -14
- package/dist/access-recall-concurrency.js +31 -29
- package/dist/access-recall-response.d.ts +14 -14
- package/dist/access-recall-response.js +31 -29
- package/dist/access-recall-surface.d.ts +14 -14
- package/dist/access-recall-surface.js +31 -29
- package/dist/access-schema.d.ts +1 -1
- package/dist/{access-service-DUkTWyZS.d.ts → access-service-70VHaltr.d.ts} +9 -9
- package/dist/access-service-helpers.d.ts +14 -14
- package/dist/access-service.d.ts +14 -14
- package/dist/access-service.js +31 -29
- package/dist/access-surface-catalog.d.ts +14 -14
- package/dist/access-surface-catalog.js +33 -31
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +4 -4
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +2 -2
- package/dist/activity/digest.d.ts +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/background-generation.d.ts +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +11 -11
- package/dist/briefing-window.d.ts +2 -2
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +11 -11
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-turn-helpers.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/buffer.js +5 -5
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{catalog-Bns9zpl3.d.ts → catalog-Byi9prz9.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +12 -12
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-DE4ZGH2N.js → chunk-2IVHOQRY.js} +8 -3
- package/dist/chunk-2IVHOQRY.js.map +1 -0
- package/dist/{chunk-MQT3WP3F.js → chunk-3MX4GWJO.js} +2 -2
- package/dist/{chunk-PXJ6HE2W.js → chunk-3RABJOGD.js} +2 -2
- package/dist/{chunk-NNFB4CU4.js → chunk-4WSR7MYV.js} +2 -2
- package/dist/{chunk-6A6HSXWV.js → chunk-5WIGM42T.js} +2 -2
- package/dist/{chunk-GGROFIYX.js → chunk-6DYCSSHN.js} +2 -2
- package/dist/{chunk-55XWRL6F.js → chunk-6VLOKESS.js} +2 -2
- package/dist/{chunk-OS4JVTHR.js → chunk-76RTJ533.js} +3 -3
- package/dist/{chunk-4LPIVP77.js → chunk-7VTQETLT.js} +2 -2
- package/dist/{chunk-X2NFFBTO.js → chunk-A7GQBJP5.js} +4 -4
- package/dist/{chunk-JIURESYF.js → chunk-AIKUSXIS.js} +6 -6
- package/dist/{chunk-MNG536IS.js → chunk-AJLQH4RO.js} +13 -13
- package/dist/{chunk-XEHLYA5Z.js → chunk-AOMVOC2E.js} +3 -3
- package/dist/{chunk-XXLH6KFO.js → chunk-BHXY5FXL.js} +2 -2
- package/dist/{chunk-PA67GXYJ.js → chunk-C3YEB7CR.js} +5 -5
- package/dist/{chunk-SK6HEQTW.js → chunk-DHTOYRDE.js} +2 -2
- package/dist/{chunk-WQW6KPVC.js → chunk-DNAD57VY.js} +1 -1
- package/dist/chunk-DNAD57VY.js.map +1 -0
- package/dist/{chunk-P3YNEMYY.js → chunk-E64HBW7M.js} +2 -2
- package/dist/{chunk-2B2RHLHI.js → chunk-EBLKS57G.js} +2 -2
- package/dist/{chunk-MUNR43V3.js → chunk-EHUUXLLA.js} +2 -2
- package/dist/{chunk-LYMJ36UI.js → chunk-EST3J4LX.js} +2 -2
- package/dist/{chunk-B6VDWDFN.js → chunk-EUP4AXIW.js} +2 -2
- package/dist/{chunk-XZUHXKM3.js → chunk-FLZJMXFV.js} +2 -2
- package/dist/{chunk-XYGINDIJ.js → chunk-FVRZDZ7J.js} +2 -2
- package/dist/{chunk-645WOU5I.js → chunk-H7BZBSP6.js} +4 -4
- package/dist/{chunk-TW4MXM7H.js → chunk-HIBNECBQ.js} +5 -5
- package/dist/{chunk-QLCMOHRE.js → chunk-IIDXU2CY.js} +2 -2
- package/dist/{chunk-JYXLW22X.js → chunk-JG4AP36X.js} +2 -2
- package/dist/{chunk-3RKVSECD.js → chunk-JI5Q6EOY.js} +7 -7
- package/dist/{chunk-XKHRNAK7.js → chunk-JIWZVOQM.js} +2 -2
- package/dist/{chunk-7YUX52XZ.js → chunk-JVM3CEGL.js} +3 -3
- package/dist/{chunk-QB4VXCFN.js → chunk-K26LFJE4.js} +2 -2
- package/dist/{chunk-Y5VT7BIT.js → chunk-K4KE5MYE.js} +2 -2
- package/dist/{chunk-TQSCR5DU.js → chunk-KG2OOAFF.js} +6 -6
- package/dist/{chunk-VV5GCNKG.js → chunk-KHLNIDWB.js} +2 -2
- package/dist/{chunk-LIAM7U2J.js → chunk-LE2UESGS.js} +2 -2
- package/dist/{chunk-YXWMZAAN.js → chunk-LLFMZYFS.js} +2 -2
- package/dist/{chunk-PPJLJD2D.js → chunk-LX32KV2C.js} +2 -2
- package/dist/{chunk-MKJFPIVG.js → chunk-N57PUWUE.js} +39 -39
- package/dist/{chunk-V7IONNTJ.js → chunk-NDWBT2VV.js} +2 -2
- package/dist/{chunk-DRLZB3CN.js → chunk-OTGIAJQ2.js} +2 -2
- package/dist/{chunk-T3T5HTZZ.js → chunk-P36WML7L.js} +2 -2
- package/dist/{chunk-B4WI7OF2.js → chunk-PAQ7YGJY.js} +2 -2
- package/dist/{chunk-BIXELUIR.js → chunk-PSQRBCGR.js} +2 -2
- package/dist/{chunk-FGRJJBFO.js → chunk-PZHN7R35.js} +2 -2
- package/dist/{chunk-QMWKENNK.js → chunk-Q4AUIFUA.js} +4 -4
- package/dist/{chunk-CD7VTZIG.js → chunk-QQA6VTOY.js} +2 -2
- package/dist/{chunk-R32AEEU3.js → chunk-RBHQA2UU.js} +49 -49
- package/dist/{chunk-HG74GEVY.js → chunk-RS53SDCA.js} +2 -2
- package/dist/{chunk-SS33RR4F.js → chunk-SKYYPVBW.js} +8 -8
- package/dist/{chunk-OSTXIFZW.js → chunk-SNOAFXKX.js} +38 -4
- package/dist/chunk-SNOAFXKX.js.map +1 -0
- package/dist/{chunk-EWBDJQ5Y.js → chunk-SYJZUVTN.js} +3 -3
- package/dist/{chunk-IO7K7GES.js → chunk-T3F2HWIG.js} +2 -2
- package/dist/{chunk-KVIMQAER.js → chunk-T3OLYUU6.js} +2 -2
- package/dist/{chunk-KPYMORPQ.js → chunk-TUSY4KRE.js} +206 -43
- package/dist/chunk-TUSY4KRE.js.map +1 -0
- package/dist/{chunk-QGAKUOKU.js → chunk-U3ZRHNNG.js} +2 -2
- package/dist/{chunk-LIDJWAQV.js → chunk-UB4UVALS.js} +2 -2
- package/dist/chunk-UD6W67JM.js +260 -0
- package/dist/chunk-UD6W67JM.js.map +1 -0
- package/dist/{chunk-WYU66IVZ.js → chunk-UE7L4EDU.js} +3 -3
- package/dist/{chunk-I6IJDTRP.js → chunk-VBRS7Z3O.js} +2 -2
- package/dist/{chunk-EGOWY342.js → chunk-WGCASEEQ.js} +2 -2
- package/dist/{chunk-BNX2TUSF.js → chunk-WHSNLCRO.js} +2 -2
- package/dist/{chunk-7DU2F7LM.js → chunk-XQFHKPNB.js} +6 -6
- package/dist/{chunk-MKLDZNBD.js → chunk-YA5M7OC4.js} +2 -2
- package/dist/{chunk-WL3PGPGU.js → chunk-YKWWG3CM.js} +2 -2
- package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
- package/dist/{chunk-32ZBIGID.js → chunk-YOC3EEZH.js} +12 -12
- package/dist/{chunk-ZEIJQ4I3.js → chunk-Z2OKRO3E.js} +2 -2
- package/dist/{chunk-5KBI2MOC.js → chunk-ZDGSHXJU.js} +1 -1
- package/dist/{chunk-BMBAA2M5.js → chunk-ZYZW46HZ.js} +3 -3
- package/dist/{cli-Bbndoc6k.d.ts → cli-CdJiBilM.d.ts} +5 -5
- package/dist/cli.d.ts +16 -16
- package/dist/cli.js +70 -68
- package/dist/coding/export-okf-codegraph.d.ts +1 -1
- package/dist/coding/export-okf-codegraph.js +13 -13
- package/dist/coding/pre-action-gate.d.ts +1 -1
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +12 -12
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +2 -2
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +11 -11
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +11 -11
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +4 -4
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +13 -13
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/corpus-watermark.d.ts +1 -1
- package/dist/corpus-watermark.js +13 -13
- package/dist/cross-lingual-recall.d.ts +1 -1
- package/dist/dashboard-runtime.js +2 -2
- package/dist/day-summary.d.ts +1 -1
- package/dist/deep-recall-http-glue.d.ts +14 -14
- package/dist/deep-recall-mcp-tools.d.ts +14 -14
- package/dist/deep-recall-policy-llm.d.ts +2 -2
- package/dist/deep-recall-seeds.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/dependency-propagation-config.d.ts +1 -1
- package/dist/{dependency-propagation-delivery-B-LvcDaq.d.ts → dependency-propagation-delivery-BgHy44WX.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/directory-sidecars.d.ts +87 -0
- package/dist/directory-sidecars.js +22 -0
- package/dist/directory-sidecars.js.map +1 -0
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-origin-fields.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +12 -12
- package/dist/entity-schema.d.ts +1 -1
- package/dist/episodic-context.d.ts +1 -1
- package/dist/eval-trajectory-contracts.d.ts +1 -1
- package/dist/eval-trajectory-store.d.ts +1 -1
- package/dist/eval-trajectory.d.ts +1 -1
- package/dist/event-order-recall.js +2 -2
- package/dist/explicit-capture.d.ts +11 -11
- package/dist/external-wiki-access.d.ts +14 -14
- package/dist/external-wiki-access.js +32 -30
- package/dist/external-wiki-collection-registration.d.ts +1 -1
- package/dist/external-wiki-collection.d.ts +1 -1
- package/dist/external-wiki-mcp-tools.d.ts +14 -14
- package/dist/extraction-error-classification.d.ts +1 -1
- package/dist/extraction-evidence-class.d.ts +1 -1
- package/dist/extraction-faithfulness.d.ts +2 -2
- package/dist/extraction-judge-telemetry.d.ts +2 -2
- package/dist/extraction-judge-training.d.ts +2 -2
- package/dist/extraction-judge.d.ts +2 -2
- package/dist/extraction-liveness.d.ts +1 -1
- package/dist/extraction-normalization.d.ts +1 -1
- package/dist/extraction-prompt.d.ts +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +1 -1
- package/dist/extraction-source-grounding.d.ts +1 -1
- package/dist/extraction-span-config.d.ts +1 -1
- package/dist/extraction-span-materialize.d.ts +1 -1
- package/dist/extraction-span-wire.d.ts +1 -1
- package/dist/extraction.d.ts +2 -2
- package/dist/extraction.js +15 -15
- package/dist/fallback-llm-codex-subscription.d.ts +1 -1
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/{generic-recall-paths-Bfc7zigS.d.ts → generic-recall-paths-BoueWXYr.d.ts} +1 -1
- package/dist/graph-append-error.d.ts +1 -1
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-jsonl.d.ts +1 -1
- package/dist/graph-path-reconstruction.d.ts +1 -1
- package/dist/graph-path-scoring.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/importers/test-utils.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/{index-C7IA1DxB.d.ts → index-cwbrXoxe.d.ts} +3 -3
- package/dist/index.d.ts +42 -42
- package/dist/index.js +127 -126
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +4 -4
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/{local-llm-DH4tWtck.d.ts → local-llm-B0vd_rp9.d.ts} +1 -1
- package/dist/local-llm-helpers.d.ts +2 -2
- package/dist/local-llm.d.ts +2 -2
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/location/index.d.ts +5 -5
- package/dist/location/index.js +13 -13
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +11 -11
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +11 -11
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +12 -12
- package/dist/{maintenance-n6yeTQhR.d.ts → maintenance-DJgQkoLh.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +14 -14
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-browse-http-glue.d.ts +14 -14
- package/dist/memory-browse-mcp-tools.d.ts +14 -14
- package/dist/memory-browse-operations.js +32 -30
- package/dist/memory-browse.d.ts +1 -1
- package/dist/memory-browse.js +7 -5
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-controller.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-snapshot.d.ts +1 -1
- package/dist/memory-subject-cli.d.ts +14 -14
- package/dist/memory-subject.d.ts +14 -14
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +3 -3
- package/dist/namespaces/migrate.js +12 -12
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +6 -6
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +11 -11
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +14 -14
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +21 -21
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +19 -19
- package/dist/{orchestrator-Cirjo3ZB.d.ts → orchestrator-Kx5zwNUm.d.ts} +10 -10
- package/dist/orchestrator.d.ts +11 -11
- package/dist/orchestrator.js +98 -97
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-DK79FrgH.d.ts → pipeline-9SYxxign.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/proactive-contention.d.ts +2 -2
- package/dist/provenance.d.ts +1 -1
- package/dist/{public-http-DaHHhWRR.d.ts → public-http-Bvol6Jr4.d.ts} +1 -1
- package/dist/{qmd-BT0ErlRS.d.ts → qmd-DjwuG9Xa.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/qmd.js +4 -4
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -1
- package/dist/recall-navigate-access.d.ts +1 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +1 -1
- package/dist/recall-navigate-disclosure.js +2 -2
- package/dist/recall-navigate.d.ts +1 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-navigation-http-glue.d.ts +14 -14
- package/dist/recall-navigation-mcp-tools.d.ts +14 -14
- package/dist/recall-navigation-operations.js +32 -30
- package/dist/recall-navigation-renderer.d.ts +1 -1
- package/dist/recall-navigation.d.ts +1 -1
- package/dist/recall-navigation.js +31 -29
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state-view-admission.d.ts +2 -2
- package/dist/recall-state-view-admission.js +8 -5
- package/dist/recall-state-view-anchors.d.ts +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +1 -1
- package/dist/reconcile/manifest.d.ts +1 -1
- package/dist/reconcile/plan.d.ts +1 -1
- package/dist/replay/normalizers/chatgpt.d.ts +1 -1
- package/dist/replay/normalizers/claude.d.ts +1 -1
- package/dist/replay/normalizers/openclaw.d.ts +1 -1
- package/dist/replay/normalizers/shared.d.ts +1 -1
- package/dist/replay/runner.d.ts +1 -1
- package/dist/replay/types.d.ts +1 -1
- package/dist/replica-divergence.d.ts +1 -1
- package/dist/replica-peers-config.d.ts +1 -1
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +3 -3
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/salvage-envelope.d.ts +1 -1
- package/dist/{scope-profiles-BgPQx9iE.d.ts → scope-profiles-DPegZtRf.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/factory.js +5 -5
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +9 -9
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-BrAWKVcm.d.ts → semantic-consolidation-DMzhKRYl.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +12 -12
- package/dist/semantic-rule-promotion.js +11 -11
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +11 -11
- package/dist/{service-CqHOTg87.d.ts → service-E99KuPvi.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +14 -14
- package/dist/standup/build.js +11 -11
- package/dist/{storage-mD2YQ8_2.d.ts → storage-BS7ux8F7.d.ts} +1 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +10 -10
- package/dist/subject-config.d.ts +1 -1
- package/dist/summarizer.d.ts +1 -1
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/support-passport/index.d.ts +17 -17
- package/dist/support-passport/index.js +34 -32
- package/dist/{tagging-CiAVA-ID.d.ts → tagging-BhOEcSXP.d.ts} +2 -2
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-timeline-recall.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-routing.d.ts +1 -1
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/export-okf.d.ts +1 -1
- package/dist/transfer/export-okf.js +11 -11
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-DgDaoY61.d.ts → types-DQ2H8gAC.d.ts} +19 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +11 -11
- package/dist/who-knows-cli.d.ts +14 -14
- package/dist/who-knows-cli.js +12 -12
- package/dist/who-knows.d.ts +14 -14
- package/dist/who-knows.js +11 -11
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +2 -2
- package/src/config.ts +4 -0
- package/src/directory-sidecars.test.ts +268 -0
- package/src/directory-sidecars.ts +383 -0
- package/src/experience/session-experience-config.ts +51 -0
- package/src/experience/session-experience-lifecycle.test.ts +139 -0
- package/src/experience/session-experience.test.ts +233 -0
- package/src/experience/session-experience.ts +240 -0
- package/src/orchestration/generic-recall-paths.ts +5 -1
- package/src/orchestration/session-context.ts +50 -0
- package/src/types.ts +3 -0
- package/dist/chunk-DE4ZGH2N.js.map +0 -1
- package/dist/chunk-KPYMORPQ.js.map +0 -1
- package/dist/chunk-OSTXIFZW.js.map +0 -1
- package/dist/chunk-WQW6KPVC.js.map +0 -1
- /package/dist/{chunk-MQT3WP3F.js.map → chunk-3MX4GWJO.js.map} +0 -0
- /package/dist/{chunk-PXJ6HE2W.js.map → chunk-3RABJOGD.js.map} +0 -0
- /package/dist/{chunk-NNFB4CU4.js.map → chunk-4WSR7MYV.js.map} +0 -0
- /package/dist/{chunk-6A6HSXWV.js.map → chunk-5WIGM42T.js.map} +0 -0
- /package/dist/{chunk-GGROFIYX.js.map → chunk-6DYCSSHN.js.map} +0 -0
- /package/dist/{chunk-55XWRL6F.js.map → chunk-6VLOKESS.js.map} +0 -0
- /package/dist/{chunk-OS4JVTHR.js.map → chunk-76RTJ533.js.map} +0 -0
- /package/dist/{chunk-4LPIVP77.js.map → chunk-7VTQETLT.js.map} +0 -0
- /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
- /package/dist/{chunk-JIURESYF.js.map → chunk-AIKUSXIS.js.map} +0 -0
- /package/dist/{chunk-MNG536IS.js.map → chunk-AJLQH4RO.js.map} +0 -0
- /package/dist/{chunk-XEHLYA5Z.js.map → chunk-AOMVOC2E.js.map} +0 -0
- /package/dist/{chunk-XXLH6KFO.js.map → chunk-BHXY5FXL.js.map} +0 -0
- /package/dist/{chunk-PA67GXYJ.js.map → chunk-C3YEB7CR.js.map} +0 -0
- /package/dist/{chunk-SK6HEQTW.js.map → chunk-DHTOYRDE.js.map} +0 -0
- /package/dist/{chunk-P3YNEMYY.js.map → chunk-E64HBW7M.js.map} +0 -0
- /package/dist/{chunk-2B2RHLHI.js.map → chunk-EBLKS57G.js.map} +0 -0
- /package/dist/{chunk-MUNR43V3.js.map → chunk-EHUUXLLA.js.map} +0 -0
- /package/dist/{chunk-LYMJ36UI.js.map → chunk-EST3J4LX.js.map} +0 -0
- /package/dist/{chunk-B6VDWDFN.js.map → chunk-EUP4AXIW.js.map} +0 -0
- /package/dist/{chunk-XZUHXKM3.js.map → chunk-FLZJMXFV.js.map} +0 -0
- /package/dist/{chunk-XYGINDIJ.js.map → chunk-FVRZDZ7J.js.map} +0 -0
- /package/dist/{chunk-645WOU5I.js.map → chunk-H7BZBSP6.js.map} +0 -0
- /package/dist/{chunk-TW4MXM7H.js.map → chunk-HIBNECBQ.js.map} +0 -0
- /package/dist/{chunk-QLCMOHRE.js.map → chunk-IIDXU2CY.js.map} +0 -0
- /package/dist/{chunk-JYXLW22X.js.map → chunk-JG4AP36X.js.map} +0 -0
- /package/dist/{chunk-3RKVSECD.js.map → chunk-JI5Q6EOY.js.map} +0 -0
- /package/dist/{chunk-XKHRNAK7.js.map → chunk-JIWZVOQM.js.map} +0 -0
- /package/dist/{chunk-7YUX52XZ.js.map → chunk-JVM3CEGL.js.map} +0 -0
- /package/dist/{chunk-QB4VXCFN.js.map → chunk-K26LFJE4.js.map} +0 -0
- /package/dist/{chunk-Y5VT7BIT.js.map → chunk-K4KE5MYE.js.map} +0 -0
- /package/dist/{chunk-TQSCR5DU.js.map → chunk-KG2OOAFF.js.map} +0 -0
- /package/dist/{chunk-VV5GCNKG.js.map → chunk-KHLNIDWB.js.map} +0 -0
- /package/dist/{chunk-LIAM7U2J.js.map → chunk-LE2UESGS.js.map} +0 -0
- /package/dist/{chunk-YXWMZAAN.js.map → chunk-LLFMZYFS.js.map} +0 -0
- /package/dist/{chunk-PPJLJD2D.js.map → chunk-LX32KV2C.js.map} +0 -0
- /package/dist/{chunk-MKJFPIVG.js.map → chunk-N57PUWUE.js.map} +0 -0
- /package/dist/{chunk-V7IONNTJ.js.map → chunk-NDWBT2VV.js.map} +0 -0
- /package/dist/{chunk-DRLZB3CN.js.map → chunk-OTGIAJQ2.js.map} +0 -0
- /package/dist/{chunk-T3T5HTZZ.js.map → chunk-P36WML7L.js.map} +0 -0
- /package/dist/{chunk-B4WI7OF2.js.map → chunk-PAQ7YGJY.js.map} +0 -0
- /package/dist/{chunk-BIXELUIR.js.map → chunk-PSQRBCGR.js.map} +0 -0
- /package/dist/{chunk-FGRJJBFO.js.map → chunk-PZHN7R35.js.map} +0 -0
- /package/dist/{chunk-QMWKENNK.js.map → chunk-Q4AUIFUA.js.map} +0 -0
- /package/dist/{chunk-CD7VTZIG.js.map → chunk-QQA6VTOY.js.map} +0 -0
- /package/dist/{chunk-R32AEEU3.js.map → chunk-RBHQA2UU.js.map} +0 -0
- /package/dist/{chunk-HG74GEVY.js.map → chunk-RS53SDCA.js.map} +0 -0
- /package/dist/{chunk-SS33RR4F.js.map → chunk-SKYYPVBW.js.map} +0 -0
- /package/dist/{chunk-EWBDJQ5Y.js.map → chunk-SYJZUVTN.js.map} +0 -0
- /package/dist/{chunk-IO7K7GES.js.map → chunk-T3F2HWIG.js.map} +0 -0
- /package/dist/{chunk-KVIMQAER.js.map → chunk-T3OLYUU6.js.map} +0 -0
- /package/dist/{chunk-QGAKUOKU.js.map → chunk-U3ZRHNNG.js.map} +0 -0
- /package/dist/{chunk-LIDJWAQV.js.map → chunk-UB4UVALS.js.map} +0 -0
- /package/dist/{chunk-WYU66IVZ.js.map → chunk-UE7L4EDU.js.map} +0 -0
- /package/dist/{chunk-I6IJDTRP.js.map → chunk-VBRS7Z3O.js.map} +0 -0
- /package/dist/{chunk-EGOWY342.js.map → chunk-WGCASEEQ.js.map} +0 -0
- /package/dist/{chunk-BNX2TUSF.js.map → chunk-WHSNLCRO.js.map} +0 -0
- /package/dist/{chunk-7DU2F7LM.js.map → chunk-XQFHKPNB.js.map} +0 -0
- /package/dist/{chunk-MKLDZNBD.js.map → chunk-YA5M7OC4.js.map} +0 -0
- /package/dist/{chunk-WL3PGPGU.js.map → chunk-YKWWG3CM.js.map} +0 -0
- /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
- /package/dist/{chunk-32ZBIGID.js.map → chunk-YOC3EEZH.js.map} +0 -0
- /package/dist/{chunk-ZEIJQ4I3.js.map → chunk-Z2OKRO3E.js.map} +0 -0
- /package/dist/{chunk-5KBI2MOC.js.map → chunk-ZDGSHXJU.js.map} +0 -0
- /package/dist/{chunk-BMBAA2M5.js.map → chunk-ZYZW46HZ.js.map} +0 -0
|
@@ -22,6 +22,7 @@ import { StorageManager } from "../index.js";
|
|
|
22
22
|
import { LocalLlmClient } from "../local-llm.js";
|
|
23
23
|
import { log } from "../logger.js";
|
|
24
24
|
import { canWriteNamespace, defaultNamespaceForPrincipal, recallNamespacesForPrincipal, resolvePrincipal } from "../namespaces/principal.js";
|
|
25
|
+
import { runSessionExperienceExtraction } from "../experience/session-experience.js";
|
|
25
26
|
import { ExtractionDeadlineError } from "./extraction-run.js";
|
|
26
27
|
import type { ExtractionRunResult } from "./extraction-run.js";
|
|
27
28
|
import type { EntitySynthesisCoordinator } from "./entity-synthesis-coordinator.js";
|
|
@@ -527,6 +528,9 @@ export class SessionContextCoordinator {
|
|
|
527
528
|
})
|
|
528
529
|
.catch(reject);
|
|
529
530
|
});
|
|
531
|
+
if (options.reason === "session_end" && this.deps.config.sessionExperience?.enabled === true) {
|
|
532
|
+
await this.extractSessionEndExperience(turnsForSession, sessionKey, options);
|
|
533
|
+
}
|
|
530
534
|
} finally {
|
|
531
535
|
if (
|
|
532
536
|
retainedTurnsForOtherSessions.length > 0 &&
|
|
@@ -553,6 +557,52 @@ export class SessionContextCoordinator {
|
|
|
553
557
|
}
|
|
554
558
|
}
|
|
555
559
|
|
|
560
|
+
/**
|
|
561
|
+
* Session-end experience extraction (issue #2979): derive at most one
|
|
562
|
+
* Situation/Approach/Reflect episode from the drained session's turns.
|
|
563
|
+
* Best-effort by contract — a failure here must never fail the flush
|
|
564
|
+
* (the fact extraction already committed). Honors the shared abort signal
|
|
565
|
+
* and flush deadline; the write itself is gated, deduped per session, and
|
|
566
|
+
* lands as `pending_review` inside `runSessionExperienceExtraction`.
|
|
567
|
+
*/
|
|
568
|
+
private async extractSessionEndExperience(
|
|
569
|
+
turns: BufferTurn[],
|
|
570
|
+
sessionKey: string,
|
|
571
|
+
options: SessionFlushOptions,
|
|
572
|
+
): Promise<void> {
|
|
573
|
+
try {
|
|
574
|
+
const explicitNamespace =
|
|
575
|
+
typeof options.writeNamespaceOverride === "string" && options.writeNamespaceOverride.trim().length > 0
|
|
576
|
+
? options.writeNamespaceOverride.trim()
|
|
577
|
+
: undefined;
|
|
578
|
+
// Same precedence as the extraction write path: explicit override →
|
|
579
|
+
// scope-profile plan → principal + coding overlay.
|
|
580
|
+
const namespace =
|
|
581
|
+
explicitNamespace ??
|
|
582
|
+
options.scopeProfileWritePlan?.writeNamespace ??
|
|
583
|
+
this.deps.applyCodingNamespaceOverlay(
|
|
584
|
+
sessionKey,
|
|
585
|
+
defaultNamespaceForPrincipal(this.deps.resolvePrincipal(sessionKey), this.deps.config),
|
|
586
|
+
);
|
|
587
|
+
const storage = await this.deps.orchestratorSelf.getStorageForNamespace(namespace);
|
|
588
|
+
const result = await runSessionExperienceExtraction({
|
|
589
|
+
turns,
|
|
590
|
+
sessionKey,
|
|
591
|
+
config: this.deps.config,
|
|
592
|
+
storage,
|
|
593
|
+
abortSignal: options.abortSignal,
|
|
594
|
+
deadlineMs: options.extractionDeadlineMs,
|
|
595
|
+
});
|
|
596
|
+
if (result.written) {
|
|
597
|
+
log.info(`session-experience: recorded ${result.episode.outcomeKind} episode for session end`);
|
|
598
|
+
} else {
|
|
599
|
+
log.debug(`session-experience skipped: ${result.skippedReason}`);
|
|
600
|
+
}
|
|
601
|
+
} catch (error) {
|
|
602
|
+
log.warn(`session-experience extraction failed (non-fatal): ${error}`);
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
|
|
556
606
|
/** Lazily construct the CorrectionService for passive capture. Stateless
|
|
557
607
|
* across requests (per #1580 design); cached for the orchestrator's life. */
|
|
558
608
|
passiveCorrectionService(): CorrectionService {
|
package/src/types.ts
CHANGED
|
@@ -24,6 +24,7 @@ import type { DeepRecallSettings } from "./deep-recall-config.js";
|
|
|
24
24
|
import type { RecallNavigationSettings } from "./recall-navigation-config.js";
|
|
25
25
|
import type { ProceduralMaintenanceConfig } from "./procedural/maintenance-config.js";
|
|
26
26
|
import type { SkillProjectionConfig } from "./procedural/skill-projection.js";
|
|
27
|
+
import type { SessionExperienceConfig } from "./experience/session-experience-config.js";
|
|
27
28
|
import type { ActionGateConfig } from "./coding/action-gate.js";
|
|
28
29
|
import type { ActiveContextConfigFields } from "./active-context-config.js";
|
|
29
30
|
import type { LocalLlmConfig } from "./local-llm-config.js";
|
|
@@ -1241,6 +1242,8 @@ export interface PluginConfig
|
|
|
1241
1242
|
*/
|
|
1242
1243
|
dreamsPhases: DreamsPhasesConfig;
|
|
1243
1244
|
procedural: ProceduralConfig;
|
|
1245
|
+
/** Session-end experience extraction (issue #2979). Default off. */
|
|
1246
|
+
sessionExperience: SessionExperienceConfig;
|
|
1244
1247
|
extractionLiveness: ExtractionLivenessConfig;
|
|
1245
1248
|
/** Span-mode extraction (#2333 Phase B, bench-gated). Default off. */
|
|
1246
1249
|
extraction: ExtractionSpanConfig;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/activity/journal.ts","../src/orchestration/generic-recall-paths.ts"],"sourcesContent":["/**\n * User-owned daily journal (issue #1984 PR1).\n *\n * Files live at `<memoryDir>/journal/<YYYY-MM-DD>.md` — inside the memory\n * directory but outside scan roots, same placement as activity digests.\n * Once written, Remnic never rewrites the file except `seed` with force.\n * All writes go through writeJournalFile, which stats first.\n */\nimport { mkdirSync, statSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nimport { isValidActivityDate } from \"./digest.js\";\n\nexport const JOURNAL_DIR_NAME = \"journal\";\n\n/** Minimal card shape the seed renderer needs. TimelineCard is assignable. */\nexport interface JournalSeedCard {\n title: string;\n startUtc: string;\n endUtc: string;\n}\n\nexport interface SeedJournalInput {\n memoryDir: string;\n date: string;\n cards?: readonly JournalSeedCard[];\n force?: boolean;\n}\n\nexport interface SeedJournalResult {\n path: string;\n wrote: boolean;\n}\n\nconst JOURNAL_DAY_TOPLEVEL = /^journal[\\\\/]\\d{4}-\\d{2}-\\d{2}\\.md$/i;\nconst JOURNAL_DAY_ANYWHERE = /(?:^|[\\\\/])journal[\\\\/]\\d{4}-\\d{2}-\\d{2}\\.md$/i;\n\nexport function journalPath(memoryDir: string, date: string): string {\n if (!isValidActivityDate(date)) {\n throw new RangeError(`Invalid journal date \"${date}\"; expected YYYY-MM-DD.`);\n }\n return path.join(memoryDir, JOURNAL_DIR_NAME, `${date}.md`);\n}\n\n/**\n * Root-aware journal day-file check. With a memory root, only the top-level\n * `journal/<date>.md` matches so a nested `facts/journal/<date>.md` stays\n * recallable. Without a root, fall back to the day-file shape anywhere.\n */\nexport function isJournalDayPath(filePath: string, memoryRoot?: string): boolean {\n if (memoryRoot !== undefined && memoryRoot.length > 0) {\n const relative = path.relative(memoryRoot, path.resolve(memoryRoot, filePath));\n return JOURNAL_DAY_TOPLEVEL.test(relative);\n }\n return JOURNAL_DAY_ANYWHERE.test(filePath);\n}\n\nexport function todayJournalDate(now: Date = new Date()): string {\n const year = now.getFullYear();\n const month = String(now.getMonth() + 1).padStart(2, \"0\");\n const day = String(now.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\nfunction formatCardDuration(card: JournalSeedCard): string {\n const start = Date.parse(card.startUtc);\n const end = Date.parse(card.endUtc);\n const minutes =\n Number.isFinite(start) && Number.isFinite(end) && end > start\n ? Math.round((end - start) / 60_000)\n : 0;\n return `${minutes}m`;\n}\n\nfunction renderJournalSeed(date: string, cards: readonly JournalSeedCard[]): string {\n const ordered = [...cards].sort((left, right) => {\n const byStart = left.startUtc.localeCompare(right.startUtc);\n return byStart !== 0 ? byStart : left.title.localeCompare(right.title);\n });\n const glance =\n ordered.length === 0\n ? [\"_No cards._\"]\n : ordered.map((card) => `- ${formatCardDuration(card)} ${card.title}`);\n return [`# Journal — ${date}`, \"\", \"## Day at a glance\", \"\", ...glance, \"\", \"## Notes\", \"\", \"\"].join(\n \"\\n\",\n );\n}\n\n/** The only journal write. Stats first; existing files are a no-op unless force. */\nexport function writeJournalFile(filePath: string, content: string, force: boolean): boolean {\n let exists = false;\n try {\n statSync(filePath);\n exists = true;\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code !== \"ENOENT\") throw err;\n }\n if (exists && !force) return false;\n mkdirSync(path.dirname(filePath), { recursive: true });\n writeFileSync(filePath, content);\n return true;\n}\n\nexport function seedJournal(input: SeedJournalInput): SeedJournalResult {\n const filePath = journalPath(input.memoryDir, input.date);\n const wrote = writeJournalFile(\n filePath,\n renderJournalSeed(input.date, input.cards ?? []),\n input.force === true,\n );\n return { path: filePath, wrote };\n}\n","import path from \"node:path\";\nimport type { QmdSearchResult } from \"../types.js\";\nimport { isExternalWikiCollectionName } from \"../external-wiki-guard.js\";\nexport { isExternalWikiCollectionName } from \"../external-wiki-guard.js\";\nimport { ALL_CATEGORY_DIRS } from \"../utils/category-dir.js\";\nimport {\n isActivityDigestPath,\n isArtifactMemoryPath,\n isLocationDayPath,\n isMeetingRecordPath,\n} from \"./orchestrator-helpers.js\";\nimport { isJournalDayPath } from \"../activity/journal.js\";\nimport { OKF_RESERVED_BASENAMES } from \"../okf/type-mapping.js\";\n\n\nexport interface GenericRecallPathPolicy {\n readonly memoryDir?: string;\n readonly qmdCollection?: string;\n readonly qmdColdCollection?: string;\n /**\n * The collection THIS request named, when it named one. A caller may select\n * a custom collection whose name is also a memory category, which the\n * configured names alone cannot disambiguate.\n */\n readonly requestedCollection?: string;\n}\n\ntype GenericRecallPathSource = \"filesystem\" | \"qmd\";\n\nconst CATEGORY_MEMORY_ROOTS: Record<string, true> = Object.fromEntries(\n ALL_CATEGORY_DIRS.map((directory) => [directory, true]),\n);\nconst RESERVED_ARCHIVE_ROOTS: Record<string, true> = { archive: true, namespaces: true };\n\nfunction isQmdCollectionPrefix(\n prefix: string,\n collection: string | undefined,\n source: GenericRecallPathSource,\n): boolean {\n if (typeof collection !== \"string\" || collection.length === 0) return false;\n if (prefix.startsWith(`${collection}--`)) return true;\n if (prefix !== collection) return false;\n if (source === \"qmd\") return true;\n return (\n !Object.hasOwn(CATEGORY_MEMORY_ROOTS, prefix) &&\n !Object.hasOwn(RESERVED_ARCHIVE_ROOTS, prefix)\n );\n}\n\nfunction normalizeQmdUriPath(relativePath: string, source: GenericRecallPathSource): string {\n if (source !== \"qmd\" || !relativePath.startsWith(\"qmd://\")) return relativePath;\n try {\n const parsed = new URL(relativePath);\n if (parsed.protocol !== \"qmd:\" || !parsed.hostname) return relativePath;\n const collection = decodeURIComponent(parsed.hostname);\n const pathname = decodeURIComponent(parsed.pathname.replace(/^\\/+/, \"\"));\n return pathname ? `${collection}/${pathname}` : collection;\n } catch {\n return relativePath;\n }\n}\n\nfunction stripQmdCollectionPrefix(\n relativePath: string,\n policy: GenericRecallPathPolicy,\n source: GenericRecallPathSource,\n): string {\n const normalized = path.posix.normalize(normalizeQmdUriPath(relativePath, source).replace(/\\\\/g, \"/\"));\n const slashIndex = normalized.indexOf(\"/\");\n if (slashIndex <= 0 || slashIndex >= normalized.length - 1) return normalized;\n\n const prefix = normalized.slice(0, slashIndex);\n const matchesHotCollection = isQmdCollectionPrefix(prefix, policy.qmdCollection, source);\n const matchesColdCollection = isQmdCollectionPrefix(prefix, policy.qmdColdCollection, source);\n return matchesHotCollection || matchesColdCollection\n ? normalized.slice(slashIndex + 1)\n : normalized;\n}\n\nexport function isTopLevelArchivePath(\n filePath: string,\n policy: GenericRecallPathPolicy = {},\n source: GenericRecallPathSource = \"filesystem\",\n): boolean {\n const isAbsolutePath = path.isAbsolute(filePath);\n const relative =\n policy.memoryDir && isAbsolutePath\n ? path.relative(policy.memoryDir, path.resolve(filePath))\n : filePath;\n const normalized = !isAbsolutePath\n ? stripQmdCollectionPrefix(relative, policy, source)\n : relative;\n return /^(?:archive|namespaces[\\\\/][^\\\\/]+[\\\\/]archive)(?:[\\\\/]|$)/i.test(normalized);\n}\n\nfunction isExternalWikiQmdPath(\n filePath: string,\n source: GenericRecallPathSource,\n): boolean {\n if (source !== \"qmd\") return false;\n const normalized = normalizeQmdUriPath(filePath, source).replace(/\\\\/g, \"/\");\n const slashIndex = normalized.indexOf(\"/\");\n const collection = slashIndex === -1 ? normalized : normalized.slice(0, slashIndex);\n return isExternalWikiCollectionName(collection);\n}\n\n/**\n * Paths an EXPLICIT ranked search must not return.\n *\n * Narrower than {@link isGenericRecallExcludedPath} on purpose. Recall\n * injection also drops archived memories because they are cold by definition,\n * but archive is explicitly reserved for \"explicit read or search surfaces\"\n * (docs/architecture/memory-lifecycle.md) — hiding it from `memory_search`\n * would remove the only way to find it. Everything else stays excluded: those\n * paths flow through their own dedicated surfaces, never a generic search.\n */\nexport function isSearchExcludedPath(\n filePath: string,\n policy: GenericRecallPathPolicy = {},\n source: GenericRecallPathSource = \"filesystem\",\n): boolean {\n if (isExternalWikiQmdPath(filePath, source)) return true;\n // A QMD transport hands back collection-qualified paths\n // (`qmd://<collection>/activity/<date>.md`, or `<collection>/activity/…`),\n // and the collection is not always one this policy knows: a caller may name\n // a custom one, and global search spans every collection. The activity\n // predicate is ROOT-AWARE — it matches only the top-level\n // `activity/<date>.md` so a nested ordinary memory stays recallable — so an\n // un-stripped prefix reads as a nested path and the digest would be served.\n //\n // Both spellings are therefore tested. Widening is safe in this direction\n // and only here: a leading segment is dropped ONLY to re-test the dedicated\n // surface shapes, never to decide anything else, and a segment that names a\n // memory CATEGORY (`facts/proj/activity/…`) is never treated as a\n // collection, so ordinary nested memories stay searchable.\n for (const candidate of collectionSpellings(filePath, policy, source)) {\n if (\n isArtifactMemoryPath(candidate) ||\n isNamespacedActivityDigestPath(candidate, policy.memoryDir) ||\n isNamespacedLocationDayPath(candidate, policy.memoryDir) ||\n isNamespacedJournalDayPath(candidate, policy.memoryDir) ||\n isMeetingRecordPath(candidate)\n ) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The activity check, applied against the NAMESPACE root a hit came from.\n *\n * `isActivityDigestPath` is root-aware — the digest must sit directly under\n * the root it is given — but a namespaced search rewrites hits to absolute\n * paths beneath `…/namespaces/<ns>/`, and only the global `memoryDir` is\n * available here. Measured against that root, a real digest at\n * `<memoryDir>/namespaces/team/activity/<date>.md` reads as nested and is\n * served. Re-measuring against the namespace's own root closes that.\n */\nfunction isNamespacedActivityDigestPath(candidate: string, memoryDir?: string): boolean {\n if (isActivityDigestPath(candidate, memoryDir)) return true;\n if (memoryDir === undefined || memoryDir.length === 0) return false;\n const relative = path.relative(memoryDir, path.resolve(memoryDir, candidate));\n const namespaced = /^namespaces[\\\\/]([^\\\\/]+)[\\\\/](.*)$/.exec(relative);\n if (namespaced === null) return false;\n return isActivityDigestPath(namespaced[2] ?? \"\", memoryDir);\n}\n\n/**\n * The location day-file check, applied against the NAMESPACE root a hit came\n * from — same rationale as `isNamespacedActivityDigestPath`: a namespaced\n * search rewrites hits to absolute paths beneath `…/namespaces/<ns>/`, so the\n * root-aware predicate is re-measured against the namespace's own root.\n */\nfunction isNamespacedLocationDayPath(candidate: string, memoryDir?: string): boolean {\n if (isLocationDayPath(candidate, memoryDir)) return true;\n if (memoryDir === undefined || memoryDir.length === 0) return false;\n const relative = path.relative(memoryDir, path.resolve(memoryDir, candidate));\n const namespaced = /^namespaces[\\\\/]([^\\\\/]+)[\\\\/](.*)$/.exec(relative);\n if (namespaced === null) return false;\n return isLocationDayPath(namespaced[2] ?? \"\", memoryDir);\n}\n\nfunction isNamespacedJournalDayPath(candidate: string, memoryDir?: string): boolean {\n if (isJournalDayPath(candidate, memoryDir)) return true;\n if (memoryDir === undefined || memoryDir.length === 0) return false;\n const relative = path.relative(memoryDir, path.resolve(memoryDir, candidate));\n const namespaced = /^namespaces[\\\\/]([^\\\\/]+)[\\\\/](.*)$/.exec(relative);\n if (namespaced === null) return false;\n return isJournalDayPath(namespaced[2] ?? \"\", memoryDir);\n}\n\n/** A path as given, plus its form with a leading COLLECTION segment removed. */\nfunction collectionSpellings(\n filePath: string,\n policy: GenericRecallPathPolicy,\n source: GenericRecallPathSource,\n): string[] {\n if (path.isAbsolute(filePath)) return [filePath];\n // A `qmd://<collection>/<path>` URI states its collection UNAMBIGUOUSLY in\n // the authority, so the leading segment of its normalized form is never a\n // memory category — strip it outright rather than guessing.\n if (source === \"qmd\" && filePath.startsWith(\"qmd://\")) {\n const normalized = path.posix.normalize(normalizeQmdUriPath(filePath, source).replace(/\\\\/g, \"/\"));\n const slashIndex = normalized.indexOf(\"/\");\n return slashIndex <= 0 || slashIndex >= normalized.length - 1\n ? [normalized]\n : [normalized, normalized.slice(slashIndex + 1)];\n }\n const normalized = path.posix.normalize(\n normalizeQmdUriPath(filePath, source).replace(/\\\\/g, \"/\"),\n );\n const stripped = stripQmdCollectionPrefix(filePath, policy, source);\n const spellings = [stripped];\n // If the AUTHORITATIVE strip already fired — the prefix matched a configured\n // collection — stop. Removing a second segment would take a real directory\n // with it: `memories/projects/activity/<date>.md` would become\n // `activity/<date>.md` and an ordinary nested memory would read as a\n // top-level digest, vanishing from search AND recall.\n if (stripped !== normalized) return spellings;\n const slashIndex = stripped.indexOf(\"/\");\n if (slashIndex <= 0 || slashIndex >= stripped.length - 1) return spellings;\n const prefix = stripped.slice(0, slashIndex);\n // The CALLER's own collection is authoritative: a request for\n // `collection: \"facts\"` means that segment is the collection, whatever it is\n // also the name of. Otherwise a category-shaped prefix stays part of the\n // path, so an ordinary `facts/proj/activity/<date>.md` memory is searchable.\n const requested = policy.requestedCollection;\n if (\n prefix !== requested &&\n (Object.hasOwn(CATEGORY_MEMORY_ROOTS, prefix) || Object.hasOwn(RESERVED_ARCHIVE_ROOTS, prefix))\n ) {\n return spellings;\n }\n spellings.push(stripped.slice(slashIndex + 1));\n return spellings;\n}\n\nexport function isGenericRecallExcludedPath(\n filePath: string,\n policy: GenericRecallPathPolicy = {},\n source: GenericRecallPathSource = \"filesystem\",\n): boolean {\n return (\n isSearchExcludedPath(filePath, policy, source) ||\n isTopLevelArchivePath(filePath, policy, source) ||\n OKF_RESERVED_BASENAMES[path.basename(filePath)] === true\n );\n}\n\nexport function filterRecallCandidates(\n candidates: QmdSearchResult[],\n options: {\n namespacesEnabled: boolean;\n recallNamespaces: string[];\n resolveNamespace: (path: string) => string;\n limit: number;\n pathPolicy?: GenericRecallPathPolicy;\n memoryRoot?: string;\n },\n): QmdSearchResult[] {\n const pathPolicy =\n options.pathPolicy ??\n (options.memoryRoot === undefined ? undefined : { memoryDir: options.memoryRoot });\n const scopedByNamespace = options.namespacesEnabled\n ? candidates.filter((r) =>\n options.recallNamespaces.includes(r.namespace ?? options.resolveNamespace(r.path)),\n )\n : candidates;\n return scopedByNamespace\n .filter((r) => !isGenericRecallExcludedPath(r.path, pathPolicy, \"qmd\"))\n .slice(0, Math.max(0, options.limit));\n}\n"],"mappings":"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","names":["path","path","normalized","slashIndex"]}
|