@remnic/core 9.65.8 → 9.66.1
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 +11 -12
- package/dist/access-admin-ops-surface.js +54 -51
- package/dist/access-authorization-probe.d.ts +11 -12
- package/dist/access-authorization-probe.js +55 -52
- package/dist/access-boundary.d.ts +11 -12
- package/dist/access-boundary.js +54 -51
- package/dist/access-citation-namespace.js +3 -3
- package/dist/access-cli.js +132 -125
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +1 -2
- package/dist/access-coding-context-resolution.js +2 -2
- package/dist/access-extraction-force-flush.d.ts +11 -12
- package/dist/access-extraction-force-flush.js +54 -51
- package/dist/access-health-types.d.ts +1 -2
- package/dist/access-http-lcm-compaction.d.ts +11 -12
- package/dist/access-http-lifecycle-flush.d.ts +11 -12
- package/dist/access-http-offline-stream.d.ts +11 -12
- package/dist/access-http-query.d.ts +2 -3
- package/dist/access-http-query.js +56 -53
- package/dist/access-http.d.ts +12 -13
- package/dist/access-http.js +77 -74
- package/dist/access-identity-continuity-surface.d.ts +9 -10
- package/dist/access-identity-continuity-surface.js +54 -51
- package/dist/access-lcm-surface.d.ts +11 -12
- package/dist/access-lcm-surface.js +54 -51
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +11 -12
- package/dist/access-mcp.js +67 -64
- package/dist/access-memory-search-fanout.d.ts +2 -3
- package/dist/{access-namespace-preflight-CpAOrS-9.d.ts → access-namespace-preflight-50VIkPhB.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -4
- package/dist/access-namespace-preflight.js +54 -51
- package/dist/access-observe-write-surface.d.ts +11 -12
- package/dist/access-observe-write-surface.js +54 -51
- package/dist/access-offline-manifest.d.ts +9 -10
- package/dist/access-offline-manifest.js +15 -15
- package/dist/access-operations-batch.js +59 -56
- package/dist/access-operations.d.ts +12 -13
- package/dist/access-operations.js +64 -61
- package/dist/access-recall-concurrency.d.ts +11 -12
- package/dist/access-recall-concurrency.js +54 -51
- package/dist/access-recall-response.d.ts +11 -12
- package/dist/access-recall-response.js +54 -51
- package/dist/access-recall-surface.d.ts +11 -12
- package/dist/access-recall-surface.js +54 -51
- package/dist/access-schema.d.ts +12 -12
- package/dist/access-schema.js +5 -5
- package/dist/{access-service-Diu61Cfv.d.ts → access-service-C2tV2-uL.d.ts} +8 -8
- package/dist/access-service-helpers.d.ts +11 -12
- package/dist/access-service.d.ts +11 -12
- package/dist/access-service.js +54 -51
- package/dist/access-surface-catalog.d.ts +11 -12
- package/dist/access-surface-catalog.js +58 -53
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +3 -4
- package/dist/action-confidence.d.ts +1 -2
- package/dist/active-memory-bridge.d.ts +1 -2
- package/dist/active-memory-bridge.js +2 -2
- package/dist/active-recall.d.ts +1 -2
- package/dist/active-recall.js +11 -11
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/registry.js +3 -3
- package/dist/ambient-provenance.d.ts +1 -2
- package/dist/artifact-search.d.ts +1 -2
- package/dist/{auto-sync-2YPITIWN.js → auto-sync-Q6Q2FVSC.js} +9 -9
- package/dist/behavior-learner.d.ts +1 -2
- package/dist/behavior-signals.d.ts +1 -2
- package/dist/bootstrap.d.ts +9 -10
- package/dist/briefing-window.d.ts +2 -3
- package/dist/briefing.d.ts +2 -3
- package/dist/briefing.js +28 -28
- package/dist/buffer-surprise-report.d.ts +1 -2
- package/dist/buffer-turn-helpers.d.ts +1 -2
- package/dist/buffer.d.ts +2 -3
- package/dist/buffer.js +20 -4
- package/dist/bulk-import/index.d.ts +3 -4
- package/dist/calibration.d.ts +1 -2
- package/dist/calibration.js +1 -1
- package/dist/capabilities.d.ts +1 -2
- package/dist/{capsule-merge-SGIVB3WA.js → capsule-merge-SEHERWWP.js} +4 -4
- package/dist/{catalog-9f-vEQLS.d.ts → catalog-C2jA-gLm.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -2
- package/dist/causal-consolidation.d.ts +1 -2
- package/dist/causal-consolidation.js +29 -29
- package/dist/causal-trajectory-graph.d.ts +1 -2
- package/dist/{chunk-LEPOP46W.js → chunk-227UFSEQ.js} +4 -4
- package/dist/{chunk-TFR3HG4K.js → chunk-2FA7U5XY.js} +4 -4
- package/dist/{chunk-PO7NXBG2.js → chunk-2GF27PGH.js} +5 -5
- package/dist/{chunk-W2BAGGEW.js → chunk-2ITZ74A6.js} +40 -31
- package/dist/{chunk-W2BAGGEW.js.map → chunk-2ITZ74A6.js.map} +1 -1
- package/dist/{chunk-MY2BC6UE.js → chunk-2X6BGKQL.js} +11 -11
- package/dist/{chunk-UEBDCMOO.js → chunk-3TSU662L.js} +3 -3
- package/dist/{chunk-XAB6STPO.js → chunk-46XR5FNZ.js} +53 -3
- package/dist/chunk-46XR5FNZ.js.map +1 -0
- package/dist/{chunk-FP7YTTVO.js → chunk-4OFKZAJG.js} +2 -1
- package/dist/chunk-4OFKZAJG.js.map +1 -0
- package/dist/{chunk-S5XOSTYM.js → chunk-4XLTUR6R.js} +3 -3
- package/dist/{chunk-BWGCOLEL.js → chunk-65JOGLIS.js} +2 -2
- package/dist/{chunk-HMZKGHMD.js → chunk-7UOXCCCI.js} +3 -3
- package/dist/{chunk-7WOWGRAU.js → chunk-AF5H7TKI.js} +108 -23
- package/dist/chunk-AF5H7TKI.js.map +1 -0
- package/dist/{chunk-7BDZTALN.js → chunk-AJTG3CP7.js} +12 -2
- package/dist/chunk-AJTG3CP7.js.map +1 -0
- package/dist/{chunk-2LWQSV6A.js → chunk-AL3UYZ5N.js} +3 -2
- package/dist/chunk-AL3UYZ5N.js.map +1 -0
- package/dist/{chunk-4F4AQFWL.js → chunk-B4AOWRYF.js} +10 -10
- package/dist/{chunk-ODU2CNNX.js → chunk-C5IUOBCN.js} +2 -2
- package/dist/{chunk-3A2NJP2U.js → chunk-CHGG74CY.js} +3 -3
- package/dist/{chunk-76DIF5KT.js → chunk-CX4OLNIH.js} +2 -2
- package/dist/{chunk-Z3YEGSR4.js → chunk-D3UXGE5D.js} +10 -10
- package/dist/{chunk-5HK3CJAR.js → chunk-D6Q5EPOV.js} +2 -2
- package/dist/{chunk-EGBDFJ36.js → chunk-DD5JFCWM.js} +2 -2
- package/dist/{chunk-XBGHAAKR.js → chunk-DDX6KIXF.js} +2 -2
- package/dist/{chunk-JIYDRBVZ.js → chunk-DJORULH3.js} +2 -2
- package/dist/{chunk-7KQB4EBS.js → chunk-DUAJKRR2.js} +2 -2
- package/dist/{chunk-XDL5CYZN.js → chunk-EEOUMG3J.js} +2 -1
- package/dist/{chunk-XDL5CYZN.js.map → chunk-EEOUMG3J.js.map} +1 -1
- package/dist/{chunk-Q57GOHLF.js → chunk-EGALNSZ4.js} +3 -3
- package/dist/{chunk-DPCXDG7G.js → chunk-EH65UV2Z.js} +2 -2
- package/dist/{chunk-KCT36JAW.js → chunk-ESNFSSO4.js} +2 -2
- package/dist/{chunk-XQ3HXAQH.js → chunk-ET2CNMLD.js} +4 -4
- package/dist/{chunk-TUHBYJXL.js → chunk-EWKVYCFP.js} +1 -1
- package/dist/{chunk-NPFUNWNX.js → chunk-FFUMTH27.js} +2 -2
- package/dist/{chunk-3PKAS6VL.js → chunk-GAJK3DQ5.js} +2 -2
- package/dist/{chunk-DA7ITC5Z.js → chunk-GBEOUCBB.js} +2 -2
- package/dist/{chunk-UENKPWCS.js → chunk-H2IRSXZN.js} +6 -6
- package/dist/{chunk-CFVTRUR3.js → chunk-H6RSANGQ.js} +2 -2
- package/dist/chunk-HVAEXYPL.js +98 -0
- package/dist/chunk-HVAEXYPL.js.map +1 -0
- package/dist/{chunk-EUYWQ7TS.js → chunk-IEZ6CGTW.js} +2 -2
- package/dist/{chunk-3SZD4CYO.js → chunk-IGZCAHFL.js} +3 -3
- package/dist/{chunk-UPFNQJC7.js → chunk-INUBU6I5.js} +2 -2
- package/dist/{chunk-PMVPCZJZ.js → chunk-J2R275FN.js} +3 -3
- package/dist/{chunk-UW5NPZJ2.js → chunk-JALOAKSZ.js} +59 -7
- package/dist/chunk-JALOAKSZ.js.map +1 -0
- package/dist/{chunk-2QSZNTDO.js → chunk-JBPKEARU.js} +7 -7
- package/dist/{chunk-3BCULS4U.js → chunk-JKTV3JNX.js} +145 -507
- package/dist/chunk-JKTV3JNX.js.map +1 -0
- package/dist/{chunk-5ACCD4L7.js → chunk-JRRQ747T.js} +7 -7
- package/dist/{chunk-V4IDF3EZ.js → chunk-JTWZKNUH.js} +5 -5
- package/dist/{chunk-AZMLH5UT.js → chunk-KI64TTBL.js} +2 -2
- package/dist/{chunk-DEACDKE3.js → chunk-KJXCD7VR.js} +112 -87
- package/dist/chunk-KJXCD7VR.js.map +1 -0
- package/dist/chunk-LJABGXC4.js +267 -0
- package/dist/chunk-LJABGXC4.js.map +1 -0
- package/dist/{chunk-NPIBN2VL.js → chunk-LK4TOYPU.js} +2 -2
- package/dist/{chunk-UTQUEHC7.js → chunk-LUDBXTBJ.js} +8 -8
- package/dist/{chunk-PU56CXZA.js → chunk-LYUUA6QB.js} +2 -2
- package/dist/{chunk-P36Z4JRA.js → chunk-M5ERTI4I.js} +2 -2
- package/dist/{chunk-LDKPDODJ.js → chunk-ME35HVDJ.js} +2 -2
- package/dist/{chunk-773TRRGT.js → chunk-MJUCDM3C.js} +2 -2
- package/dist/{chunk-OXRRJXPR.js → chunk-MUEGIKKY.js} +476 -1796
- package/dist/chunk-MUEGIKKY.js.map +1 -0
- package/dist/{chunk-AHPIFKNG.js → chunk-N4F7ZSSG.js} +2 -2
- package/dist/{chunk-JOZUBF4A.js → chunk-NACLNNFQ.js} +2 -2
- package/dist/{chunk-LC2BDILZ.js → chunk-NBP4EX5N.js} +2 -2
- package/dist/{chunk-T7XP6IZE.js → chunk-NFP4KPTA.js} +2 -2
- package/dist/{chunk-ZVPVTPGI.js → chunk-NNZFPYYX.js} +4 -4
- package/dist/{chunk-LPNCR4QK.js → chunk-NSTNGMSS.js} +14 -14
- package/dist/{chunk-5RWZH6PH.js → chunk-NUF7VSEX.js} +2 -2
- package/dist/{chunk-7VZFRUQU.js → chunk-O7ERGZDA.js} +5 -5
- package/dist/{chunk-HSZMX3ZJ.js → chunk-ODW5GDFE.js} +2 -2
- package/dist/{chunk-5DHKCO52.js → chunk-OJUEUQDJ.js} +2 -2
- package/dist/{chunk-LOXHYCVS.js → chunk-OMX6TKXH.js} +2 -2
- package/dist/{chunk-J2WC5LF4.js → chunk-QBC33MPY.js} +2 -1
- package/dist/{chunk-SEEJOGQX.js → chunk-QBNE55VA.js} +4 -4
- package/dist/chunk-QJCWK2A7.js +1466 -0
- package/dist/chunk-QJCWK2A7.js.map +1 -0
- package/dist/{chunk-YEUXERJ6.js → chunk-RDGKVH6T.js} +7 -3
- package/dist/{chunk-YEUXERJ6.js.map → chunk-RDGKVH6T.js.map} +1 -1
- package/dist/{chunk-JYSN42VN.js → chunk-RPIS5FQ7.js} +237 -183
- package/dist/chunk-RPIS5FQ7.js.map +1 -0
- package/dist/{chunk-F7XUD3PL.js → chunk-S4CDUXQY.js} +2 -2
- package/dist/{chunk-WNXYT4MK.js → chunk-S4Z2OBTX.js} +4 -4
- package/dist/{chunk-UL4MKZHI.js → chunk-SN4JXNLL.js} +2 -2
- package/dist/{chunk-CAMNRAJF.js → chunk-SZMYGDSM.js} +2 -2
- package/dist/chunk-TB2MJRI6.js +866 -0
- package/dist/chunk-TB2MJRI6.js.map +1 -0
- package/dist/{chunk-XNWXSGHS.js → chunk-TBCDF556.js} +28 -10
- package/dist/chunk-TBCDF556.js.map +1 -0
- package/dist/{chunk-LKYIOCWL.js → chunk-TCF4MU7L.js} +967 -132
- package/dist/chunk-TCF4MU7L.js.map +1 -0
- package/dist/chunk-TCQRIIIN.js +202 -0
- package/dist/chunk-TCQRIIIN.js.map +1 -0
- package/dist/{chunk-7PHI6GUI.js → chunk-TEZ2HTC7.js} +42 -2
- package/dist/chunk-TEZ2HTC7.js.map +1 -0
- package/dist/{chunk-CPA5NBHN.js → chunk-TNGH4ZYI.js} +2 -2
- package/dist/{chunk-F3NVYTTA.js → chunk-TNXNECAN.js} +6 -6
- package/dist/{chunk-BEC4YBNA.js → chunk-TVW4C7PV.js} +2 -2
- package/dist/{chunk-UFKPQBXH.js → chunk-U62OK7BB.js} +2 -2
- package/dist/{chunk-KZIF6XHX.js → chunk-U65VJSCJ.js} +32 -19
- package/dist/chunk-U65VJSCJ.js.map +1 -0
- package/dist/{chunk-4QEYREAV.js → chunk-U6NGKS32.js} +8 -8
- package/dist/{chunk-HRHO3ZNG.js → chunk-UW4RYPWC.js} +2 -2
- package/dist/{chunk-AX7UXCHJ.js → chunk-UYA36DQ7.js} +2 -1
- package/dist/chunk-UYA36DQ7.js.map +1 -0
- package/dist/{chunk-T6ILXUAH.js → chunk-VG4SSPAW.js} +2 -2
- package/dist/chunk-VOSWUO3K.js +100 -0
- package/dist/chunk-VOSWUO3K.js.map +1 -0
- package/dist/chunk-WFCWP4XU.js +17 -0
- package/dist/chunk-WFCWP4XU.js.map +1 -0
- package/dist/{chunk-H2YSH3DG.js → chunk-WKAXBXVA.js} +2 -2
- package/dist/{chunk-SXIMQLGV.js → chunk-WVGXCBOC.js} +2 -2
- package/dist/{chunk-UNUMFURP.js → chunk-X5PIDJ3L.js} +3 -3
- package/dist/{chunk-CRML27CO.js → chunk-X5YYSAZX.js} +4 -4
- package/dist/{chunk-FZEEWOI2.js → chunk-XJJYSX6F.js} +2 -2
- package/dist/{chunk-U7EW2W4W.js → chunk-XKNHFDTT.js} +26 -6
- package/dist/chunk-XKNHFDTT.js.map +1 -0
- package/dist/{chunk-OA2O2GJ4.js → chunk-XOHYGIWF.js} +3 -3
- package/dist/{chunk-UG6VXIOK.js → chunk-XSTNGNJP.js} +2 -2
- package/dist/{chunk-MINHJ55X.js → chunk-XXW32OL7.js} +1 -1
- package/dist/{chunk-MINHJ55X.js.map → chunk-XXW32OL7.js.map} +1 -1
- package/dist/{chunk-YDPAE2RD.js → chunk-YFLLGRXO.js} +2 -2
- package/dist/{chunk-MDD2RINF.js → chunk-YWPLOJ7T.js} +3 -3
- package/dist/{chunk-Q4WONDMJ.js → chunk-YYGZJPOK.js} +2 -2
- package/dist/{chunk-GTO56JY5.js → chunk-ZPS724LT.js} +2 -2
- package/dist/{chunk-SNOIKAHM.js → chunk-ZZZWEDF4.js} +3 -3
- package/dist/{cli-O3F-ht3i.d.ts → cli-CsfFMe6n.d.ts} +5 -5
- package/dist/cli.d.ts +13 -14
- package/dist/cli.js +101 -96
- package/dist/coding/export-okf-codegraph.d.ts +56 -0
- package/dist/coding/export-okf-codegraph.js +526 -0
- package/dist/coding/export-okf-codegraph.js.map +1 -0
- package/dist/coding/pre-action-gate.d.ts +1 -2
- package/dist/compounding/engine.d.ts +2 -3
- package/dist/compounding/engine.js +29 -29
- package/dist/compounding/preference-consolidator.d.ts +1 -2
- package/dist/compression-optimizer.d.ts +1 -2
- package/dist/config.d.ts +1 -2
- package/dist/config.js +11 -11
- package/dist/connectors/codex-materialize-runner.d.ts +1 -2
- package/dist/connectors/codex-materialize-runner.js +28 -28
- package/dist/connectors/codex-materialize.d.ts +1 -2
- package/dist/connectors/index.d.ts +1 -2
- package/dist/connectors/index.js +28 -28
- package/dist/consolidation-provenance-check.d.ts +2 -3
- package/dist/consolidation-provenance-check.js +4 -4
- package/dist/consolidation-undo.d.ts +2 -3
- package/dist/consolidation-undo.js +3 -3
- package/dist/contradiction/index.d.ts +3 -4
- package/dist/contradiction/index.js +9 -9
- package/dist/{contradiction-scan-AKUWPX5N.js → contradiction-scan-NOYMFG66.js} +3 -3
- package/dist/converge-config.d.ts +1 -2
- package/dist/convergence-refresh.d.ts +2 -3
- package/dist/convergence-refresh.js +30 -30
- package/dist/conversation-index/backend.d.ts +1 -2
- package/dist/conversation-index/backend.js +2 -2
- package/dist/conversation-index/chunker.d.ts +1 -2
- package/dist/conversation-index/faiss-adapter.d.ts +1 -2
- package/dist/conversation-index/indexer.d.ts +1 -2
- package/dist/conversation-index/search.d.ts +1 -2
- package/dist/corpus-watermark.d.ts +1 -2
- package/dist/corpus-watermark.js +30 -30
- package/dist/cross-lingual-recall.d.ts +1 -2
- package/dist/day-summary.d.ts +1 -2
- package/dist/delinearize.d.ts +1 -2
- package/dist/dependency-propagation-config.d.ts +1 -2
- package/dist/{dependency-propagation-delivery-CL6RWXTA.d.ts → dependency-propagation-delivery-D4WMbOwA.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -2
- package/dist/direct-answer.d.ts +1 -2
- package/dist/embedding-fallback.d.ts +1 -2
- package/dist/enrichment/index.d.ts +1 -2
- package/dist/entity-origin-fields.d.ts +1 -2
- package/dist/entity-retrieval.d.ts +2 -3
- package/dist/entity-retrieval.js +28 -28
- package/dist/entity-schema.d.ts +1 -2
- package/dist/episodic-context.d.ts +1 -2
- package/dist/eval-trajectory-contracts.d.ts +1 -2
- package/dist/eval-trajectory-store.d.ts +1 -2
- package/dist/eval-trajectory.d.ts +1 -2
- package/dist/explicit-capture.d.ts +9 -10
- package/dist/explicit-capture.js +11 -11
- package/dist/external-wiki-access.d.ts +11 -12
- package/dist/external-wiki-access.js +55 -52
- package/dist/external-wiki-collection-registration.d.ts +1 -2
- package/dist/external-wiki-collection.d.ts +1 -2
- package/dist/external-wiki-mcp-tools.d.ts +11 -12
- package/dist/extraction-error-classification.d.ts +1 -2
- package/dist/extraction-faithfulness.d.ts +1 -2
- package/dist/extraction-faithfulness.js +2 -2
- package/dist/extraction-judge-telemetry.d.ts +1 -2
- package/dist/extraction-judge-training.d.ts +1 -2
- package/dist/extraction-judge.d.ts +1 -2
- package/dist/extraction-judge.js +2 -2
- package/dist/extraction-liveness.d.ts +1 -2
- package/dist/extraction-normalization.d.ts +1 -2
- package/dist/extraction-prompt.d.ts +1 -2
- package/dist/extraction-source-grounding-rules.d.ts +1 -2
- package/dist/extraction-source-grounding.d.ts +1 -2
- package/dist/extraction.d.ts +1 -2
- package/dist/extraction.js +37 -34
- package/dist/fallback-llm.d.ts +7 -2
- package/dist/fallback-llm.js +1 -1
- package/dist/{first-start-migration-4NETATFF.js → first-start-migration-KHIMCBIC.js} +3 -3
- package/dist/graph-dashboard-diff.d.ts +1 -2
- package/dist/graph-dashboard-key.d.ts +1 -2
- package/dist/graph-dashboard-parser.d.ts +1 -2
- package/dist/graph-edge-reinforcement.d.ts +1 -2
- package/dist/graph-path-reconstruction.d.ts +1 -2
- package/dist/graph-path-scoring.d.ts +1 -2
- package/dist/graph-snapshot.d.ts +1 -2
- package/dist/graph.d.ts +1 -2
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/importance.d.ts +1 -2
- package/dist/importers/index.d.ts +1 -2
- package/dist/in-flight-reads.d.ts +1 -2
- package/dist/{index-C7Xep6S9.d.ts → index-DuJnzwHv.d.ts} +2 -2
- package/dist/index.d.ts +364 -26
- package/dist/index.js +232 -169
- package/dist/intent.d.ts +1 -2
- package/dist/lcm/engine.d.ts +1 -2
- package/dist/lcm/engine.js +4 -4
- package/dist/lcm/index.d.ts +1 -2
- package/dist/lcm/index.js +10 -10
- package/dist/lcm/tools.d.ts +1 -2
- package/dist/lifecycle.d.ts +1 -2
- package/dist/live-connectors-runner.d.ts +1 -2
- package/dist/local-llm.d.ts +1 -2
- package/dist/local-model-endpoint.d.ts +1 -2
- package/dist/location/index.d.ts +315 -6
- package/dist/location/index.js +151 -19
- package/dist/maintenance/memory-governance.d.ts +1 -2
- package/dist/maintenance/memory-governance.js +28 -28
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -3
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +28 -28
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -3
- package/dist/maintenance/rebuild-memory-projection.js +29 -29
- package/dist/{maintenance-CJ-xqFp0.d.ts → maintenance-BBeaeYRR.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +11 -12
- package/dist/mcp-read-only-tools.js +1 -1
- package/dist/memory-action-policy.d.ts +1 -2
- package/dist/memory-cache.d.ts +1 -2
- package/dist/memory-controller.d.ts +1 -2
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -2
- package/dist/memory-projection-mutations.js +3 -3
- package/dist/memory-projection-store.d.ts +1 -2
- package/dist/memory-projection-store.js +1 -1
- package/dist/memory-provenance.d.ts +1 -2
- package/dist/memory-snapshot.d.ts +1 -2
- package/dist/memory-subject-cli.d.ts +11 -12
- package/dist/memory-subject.d.ts +11 -12
- package/dist/memory-subject.js +4 -4
- package/dist/memory-worth-outcomes.d.ts +2 -3
- package/dist/models-json.d.ts +1 -2
- package/dist/namespaces/migrate.d.ts +3 -4
- package/dist/namespaces/migrate.js +29 -29
- package/dist/namespaces/principal.d.ts +1 -2
- package/dist/namespaces/search.d.ts +1 -2
- package/dist/namespaces/search.js +8 -8
- package/dist/namespaces/storage.d.ts +3 -4
- package/dist/namespaces/storage.js +28 -28
- package/dist/native-knowledge.d.ts +1 -2
- package/dist/offline-sync-file-io.js +3 -3
- package/dist/offline-sync-impression-drain.d.ts +1 -2
- package/dist/offline-sync-impression-drain.js +9 -9
- package/dist/offline-sync.js +4 -4
- package/dist/operator-doctor-corpus.d.ts +1 -2
- package/dist/operator-doctor-corpus.js +31 -31
- package/dist/operator-doctor-replica.d.ts +1 -2
- package/dist/operator-toolkit.d.ts +3 -4
- package/dist/operator-toolkit.js +47 -47
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -3
- package/dist/orchestration/maintenance.d.ts +4 -5
- package/dist/orchestration/maintenance.js +42 -41
- package/dist/{orchestrator-BsntWxLy.d.ts → orchestrator-CaqnwNwM.d.ts} +8 -8
- package/dist/orchestrator.d.ts +9 -10
- package/dist/orchestrator.js +132 -125
- package/dist/page-versioning.js +3 -3
- package/dist/patterns-cli.d.ts +1 -2
- package/dist/{pipeline-CVoysPm2.d.ts → pipeline-CrxVjlJr.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -2
- package/dist/proactive-contention.d.ts +1 -2
- package/dist/provenance.d.ts +1 -2
- package/dist/{public-http-CuOxlTC2.d.ts → public-http-Cwvl4QZr.d.ts} +1 -1
- package/dist/{purge-GB7PZHT2.js → purge-OP6BEDFY.js} +2 -2
- package/dist/{qmd-DWMAGA5l.d.ts → qmd-BZgbJm0g.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -3
- package/dist/qmd-recall-cache.d.ts +1 -2
- package/dist/qmd.d.ts +2 -3
- package/dist/recall-concurrency-config.d.ts +1 -2
- package/dist/recall-deep.d.ts +37 -0
- package/dist/recall-deep.js +81 -0
- package/dist/recall-deep.js.map +1 -0
- package/dist/recall-disclosure-escalation.d.ts +1 -2
- package/dist/recall-explain-renderer.d.ts +1 -2
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -2
- package/dist/recall-navigate.d.ts +70 -0
- package/dist/recall-navigate.js +51 -0
- package/dist/recall-navigate.js.map +1 -0
- package/dist/recall-planner-llm.d.ts +1 -2
- package/dist/recall-planner-llm.js +1 -1
- package/dist/recall-state-view-wire.d.ts +14 -0
- package/dist/recall-state-view-wire.js +11 -0
- package/dist/recall-state-view.d.ts +25 -0
- package/dist/recall-state-view.js +22 -0
- package/dist/recall-state-view.js.map +1 -0
- package/dist/recall-state.d.ts +1 -2
- package/dist/recall-tag-filter.d.ts +1 -2
- package/dist/recall-timings.d.ts +1 -2
- package/dist/recall-xray-cli.d.ts +1 -2
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -2
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -2
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +1 -2
- package/dist/reconcile/manifest.d.ts +1 -2
- package/dist/reconcile/manifest.js +4 -4
- package/dist/reconcile/plan.d.ts +1 -2
- package/dist/replay/normalizers/chatgpt.d.ts +1 -2
- package/dist/replay/normalizers/claude.d.ts +1 -2
- package/dist/replay/normalizers/openclaw.d.ts +1 -2
- package/dist/replay/normalizers/shared.d.ts +1 -2
- package/dist/replay/runner.d.ts +1 -2
- package/dist/replay/types.d.ts +1 -2
- package/dist/replica-divergence.d.ts +1 -2
- package/dist/replica-peers-config.d.ts +1 -2
- package/dist/{resolution-XWBPKYFB.js → resolution-4DLI3IOR.js} +10 -10
- package/dist/resolution-4DLI3IOR.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +1 -2
- package/dist/resume-bundles.js +12 -12
- package/dist/retrieval-agents.d.ts +2 -3
- package/dist/retrieval-tiers.d.ts +1 -2
- package/dist/routing/engine.d.ts +1 -2
- package/dist/routing/store.d.ts +1 -2
- package/dist/salvage-envelope.d.ts +1 -2
- package/dist/salvage-envelope.js +6 -6
- package/dist/schemas.d.ts +570 -105
- package/dist/schemas.js +3 -1
- package/dist/{scope-profiles-CPWkW_dI.d.ts → scope-profiles-DFaojvoP.d.ts} +1 -1
- package/dist/search/document-scanner.js +1 -1
- package/dist/search/embed-helper.d.ts +1 -2
- package/dist/search/factory.d.ts +1 -2
- package/dist/search/factory.js +7 -7
- package/dist/search/index.d.ts +1 -2
- package/dist/search/index.js +13 -13
- package/dist/search/lancedb-backend.d.ts +1 -2
- package/dist/search/lancedb-backend.js +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -2
- package/dist/search/meilisearch-backend.js +1 -1
- package/dist/search/noop-backend.d.ts +1 -2
- package/dist/search/orama-backend.d.ts +1 -2
- package/dist/search/orama-backend.js +1 -1
- package/dist/search/port.d.ts +1 -2
- package/dist/search/remote-backend.d.ts +1 -2
- package/dist/secure-store/index.js +3 -3
- package/dist/{semantic-consolidation-CNFVBXFc.d.ts → semantic-consolidation-BiX68wZA.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -3
- package/dist/semantic-consolidation.js +29 -29
- package/dist/semantic-rule-promotion.js +28 -28
- package/dist/semantic-rule-verifier.d.ts +1 -2
- package/dist/semantic-rule-verifier.js +28 -28
- package/dist/{service-Bb-JIdQ0.d.ts → service-D5h2zZ0M.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +1 -2
- package/dist/session-observer-state.d.ts +1 -2
- package/dist/shared-context/manager.d.ts +1 -2
- package/dist/signal.d.ts +1 -2
- package/dist/source-agent-qualifier.d.ts +1 -2
- package/dist/source-agent-qualifier.js +35 -32
- package/dist/standup/build.d.ts +16 -0
- package/dist/standup/build.js +17 -0
- package/dist/standup/build.js.map +1 -0
- package/dist/{storage-CukrlNKk.d.ts → storage-CtsaojWD.d.ts} +1 -1
- package/dist/storage.d.ts +2 -3
- package/dist/storage.js +27 -27
- package/dist/subject-config.d.ts +1 -2
- package/dist/subject-config.js +5 -5
- package/dist/summarizer.d.ts +1 -2
- package/dist/summarizer.js +2 -2
- package/dist/summary-snapshot.d.ts +1 -2
- package/dist/support-passport/index.d.ts +16 -17
- package/dist/support-passport/index.js +57 -54
- package/dist/temporal-supersession.d.ts +2 -3
- package/dist/temporal-timeline-recall.d.ts +1 -2
- package/dist/temporal-validity.d.ts +1 -2
- package/dist/threading.d.ts +1 -2
- package/dist/tier-migration.d.ts +2 -3
- package/dist/tier-routing.d.ts +1 -2
- package/dist/tier-routing.js +2 -2
- package/dist/{tier-stats-4B5IJ3NE.js → tier-stats-2TOW3QNL.js} +3 -3
- package/dist/topics.d.ts +1 -2
- package/dist/transcript.d.ts +1 -2
- package/dist/transfer/capsule-import.js +4 -4
- package/dist/transfer/export-okf.d.ts +39 -0
- package/dist/transfer/export-okf.js +112 -0
- package/dist/transfer/export-okf.js.map +1 -0
- package/dist/trust-score-stage.d.ts +1 -2
- package/dist/trust-score.d.ts +1 -2
- package/dist/{types-djxQlxJ7.d.ts → types-CIpfYz1I.d.ts} +132 -12
- package/dist/types.d.ts +1 -2
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -2
- package/dist/verified-recall.js +28 -28
- package/dist/who-knows-cli.d.ts +11 -12
- package/dist/who-knows-cli.js +29 -29
- package/dist/who-knows.d.ts +11 -12
- package/dist/who-knows.js +28 -28
- package/dist/write-envelope.d.ts +1 -2
- package/dist/write-envelope.js +5 -5
- package/package.json +34 -3
- package/src/access-admin-ops-surface.ts +6 -1
- package/src/access-boundary.ts +1 -0
- package/src/access-http.ts +3 -1
- package/src/access-mcp-output-schemas.ts +1 -0
- package/src/access-mcp.ts +3 -3
- package/src/access-operations.ts +1 -0
- package/src/access-service-offline-file-content.test.ts +63 -0
- package/src/access-surface-catalog.ts +2 -0
- package/src/activity/config.test.ts +1 -0
- package/src/activity/config.ts +66 -1
- package/src/activity/index.ts +3 -0
- package/src/activity/journal.test.ts +97 -0
- package/src/activity/journal.ts +113 -0
- package/src/activity/privacy.test.ts +53 -0
- package/src/activity/privacy.ts +80 -0
- package/src/activity/timeline/build.ts +279 -0
- package/src/activity/timeline/categories.ts +111 -0
- package/src/activity/timeline/classify.ts +110 -0
- package/src/activity/timeline/corrections.ts +145 -0
- package/src/activity/timeline/index.ts +8 -0
- package/src/activity/timeline/journal-recap.test.ts +113 -0
- package/src/activity/timeline/journal-recap.ts +130 -0
- package/src/activity/timeline/query.test.ts +198 -0
- package/src/activity/timeline/query.ts +313 -0
- package/src/activity/timeline/timeline.test.ts +277 -0
- package/src/activity/timeline/types.ts +106 -0
- package/src/activity/timeline/weekly.test.ts +215 -0
- package/src/activity/timeline/weekly.ts +234 -0
- package/src/activity/types.ts +20 -0
- package/src/activity/vault-publish.test.ts +166 -0
- package/src/activity/vault-publish.ts +101 -0
- package/src/cli/okf-commands.ts +45 -0
- package/src/cli.ts +2 -2
- package/src/coding/export-okf-codegraph.test.ts +381 -0
- package/src/coding/export-okf-codegraph.ts +565 -0
- package/src/config.test.ts +1 -0
- package/src/config.ts +2 -22
- package/src/dedup/merge-on-write.test.ts +91 -0
- package/src/dedup/merge-on-write.ts +75 -0
- package/src/dedup/novelty-gate.test.ts +143 -0
- package/src/dedup/novelty-gate.ts +163 -0
- package/src/extraction-prompt-safety.test.ts +14 -2
- package/src/extraction.ts +21 -1
- package/src/fallback-llm.test.ts +134 -0
- package/src/fallback-llm.ts +77 -5
- package/src/location/access-operations.ts +17 -8
- package/src/location/backfill.ts +137 -0
- package/src/location/config.test.ts +3 -0
- package/src/location/config.ts +46 -2
- package/src/location/http-glue.ts +1 -1
- package/src/location/index.ts +3 -0
- package/src/location/intervals.ts +1 -0
- package/src/location/matching.test.ts +65 -0
- package/src/location/matching.ts +354 -0
- package/src/location/mcp-tools.ts +2 -1
- package/src/location/recall-exclusion.test.ts +1 -0
- package/src/location/surfaces.test.ts +15 -2
- package/src/location/surfaces.ts +95 -18
- package/src/location/tagging.test.ts +119 -0
- package/src/location/tagging.ts +277 -0
- package/src/location/types.ts +23 -1
- package/src/mcp-read-only-tools.ts +1 -0
- package/src/memory-projection-store.ts +3 -1
- package/src/okf/cli.ts +18 -5
- package/src/okf/config.ts +5 -0
- package/src/okf/index-files.test.ts +60 -0
- package/src/okf/index-files.ts +114 -0
- package/src/okf/render.ts +133 -0
- package/src/okf/type-mapping.test.ts +3 -0
- package/src/okf/type-mapping.ts +2 -0
- package/src/orchestration/extraction-persist.ts +22 -23
- package/src/orchestration/extraction-run.ts +2 -1
- package/src/orchestration/generic-recall-paths.ts +15 -3
- package/src/orchestration/recall-entry.ts +8 -3
- package/src/recall-deep.test.ts +72 -0
- package/src/recall-deep.ts +113 -0
- package/src/recall-navigate.test.ts +84 -0
- package/src/recall-navigate.ts +100 -0
- package/src/recall-state-view-wire.test.ts +35 -0
- package/src/recall-state-view-wire.ts +28 -0
- package/src/recall-state-view.test.ts +131 -0
- package/src/recall-state-view.ts +138 -0
- package/src/schemas.ts +17 -1
- package/src/shared-context/governance.test.ts +53 -0
- package/src/shared-context/governance.ts +86 -0
- package/src/standup/access-operations.ts +14 -0
- package/src/standup/build.test.ts +34 -0
- package/src/standup/build.ts +115 -0
- package/src/standup/http-glue.ts +15 -0
- package/src/standup/mcp-tools.ts +16 -0
- package/src/support-passport/card-projection.ts +1 -0
- package/src/support-passport/card-service-commit-forwarding.test.ts +1 -0
- package/src/support-passport/card-service.test.ts +75 -1
- package/src/support-passport/card-service.ts +6 -3
- package/src/support-passport/card-state.ts +5 -1
- package/src/support-passport/offline-sync-guard.ts +14 -1
- package/src/transfer/export-okf.test.ts +164 -0
- package/src/transfer/export-okf.ts +286 -0
- package/src/types.ts +3 -10
- package/dist/chunk-2LWQSV6A.js.map +0 -1
- package/dist/chunk-3BCULS4U.js.map +0 -1
- package/dist/chunk-7BDZTALN.js.map +0 -1
- package/dist/chunk-7PHI6GUI.js.map +0 -1
- package/dist/chunk-7WOWGRAU.js.map +0 -1
- package/dist/chunk-AX7UXCHJ.js.map +0 -1
- package/dist/chunk-DEACDKE3.js.map +0 -1
- package/dist/chunk-FP7YTTVO.js.map +0 -1
- package/dist/chunk-JYSN42VN.js.map +0 -1
- package/dist/chunk-KZIF6XHX.js.map +0 -1
- package/dist/chunk-LKYIOCWL.js.map +0 -1
- package/dist/chunk-OXRRJXPR.js.map +0 -1
- package/dist/chunk-U7EW2W4W.js.map +0 -1
- package/dist/chunk-UW5NPZJ2.js.map +0 -1
- package/dist/chunk-XAB6STPO.js.map +0 -1
- package/dist/chunk-XNWXSGHS.js.map +0 -1
- package/dist/types-CM86alG1.d.ts +0 -89
- /package/dist/{auto-sync-2YPITIWN.js.map → auto-sync-Q6Q2FVSC.js.map} +0 -0
- /package/dist/{capsule-merge-SGIVB3WA.js.map → capsule-merge-SEHERWWP.js.map} +0 -0
- /package/dist/{chunk-LEPOP46W.js.map → chunk-227UFSEQ.js.map} +0 -0
- /package/dist/{chunk-TFR3HG4K.js.map → chunk-2FA7U5XY.js.map} +0 -0
- /package/dist/{chunk-PO7NXBG2.js.map → chunk-2GF27PGH.js.map} +0 -0
- /package/dist/{chunk-MY2BC6UE.js.map → chunk-2X6BGKQL.js.map} +0 -0
- /package/dist/{chunk-UEBDCMOO.js.map → chunk-3TSU662L.js.map} +0 -0
- /package/dist/{chunk-S5XOSTYM.js.map → chunk-4XLTUR6R.js.map} +0 -0
- /package/dist/{chunk-BWGCOLEL.js.map → chunk-65JOGLIS.js.map} +0 -0
- /package/dist/{chunk-HMZKGHMD.js.map → chunk-7UOXCCCI.js.map} +0 -0
- /package/dist/{chunk-4F4AQFWL.js.map → chunk-B4AOWRYF.js.map} +0 -0
- /package/dist/{chunk-ODU2CNNX.js.map → chunk-C5IUOBCN.js.map} +0 -0
- /package/dist/{chunk-3A2NJP2U.js.map → chunk-CHGG74CY.js.map} +0 -0
- /package/dist/{chunk-76DIF5KT.js.map → chunk-CX4OLNIH.js.map} +0 -0
- /package/dist/{chunk-Z3YEGSR4.js.map → chunk-D3UXGE5D.js.map} +0 -0
- /package/dist/{chunk-5HK3CJAR.js.map → chunk-D6Q5EPOV.js.map} +0 -0
- /package/dist/{chunk-EGBDFJ36.js.map → chunk-DD5JFCWM.js.map} +0 -0
- /package/dist/{chunk-XBGHAAKR.js.map → chunk-DDX6KIXF.js.map} +0 -0
- /package/dist/{chunk-JIYDRBVZ.js.map → chunk-DJORULH3.js.map} +0 -0
- /package/dist/{chunk-7KQB4EBS.js.map → chunk-DUAJKRR2.js.map} +0 -0
- /package/dist/{chunk-Q57GOHLF.js.map → chunk-EGALNSZ4.js.map} +0 -0
- /package/dist/{chunk-DPCXDG7G.js.map → chunk-EH65UV2Z.js.map} +0 -0
- /package/dist/{chunk-KCT36JAW.js.map → chunk-ESNFSSO4.js.map} +0 -0
- /package/dist/{chunk-XQ3HXAQH.js.map → chunk-ET2CNMLD.js.map} +0 -0
- /package/dist/{chunk-TUHBYJXL.js.map → chunk-EWKVYCFP.js.map} +0 -0
- /package/dist/{chunk-NPFUNWNX.js.map → chunk-FFUMTH27.js.map} +0 -0
- /package/dist/{chunk-3PKAS6VL.js.map → chunk-GAJK3DQ5.js.map} +0 -0
- /package/dist/{chunk-DA7ITC5Z.js.map → chunk-GBEOUCBB.js.map} +0 -0
- /package/dist/{chunk-UENKPWCS.js.map → chunk-H2IRSXZN.js.map} +0 -0
- /package/dist/{chunk-CFVTRUR3.js.map → chunk-H6RSANGQ.js.map} +0 -0
- /package/dist/{chunk-EUYWQ7TS.js.map → chunk-IEZ6CGTW.js.map} +0 -0
- /package/dist/{chunk-3SZD4CYO.js.map → chunk-IGZCAHFL.js.map} +0 -0
- /package/dist/{chunk-UPFNQJC7.js.map → chunk-INUBU6I5.js.map} +0 -0
- /package/dist/{chunk-PMVPCZJZ.js.map → chunk-J2R275FN.js.map} +0 -0
- /package/dist/{chunk-2QSZNTDO.js.map → chunk-JBPKEARU.js.map} +0 -0
- /package/dist/{chunk-5ACCD4L7.js.map → chunk-JRRQ747T.js.map} +0 -0
- /package/dist/{chunk-V4IDF3EZ.js.map → chunk-JTWZKNUH.js.map} +0 -0
- /package/dist/{chunk-AZMLH5UT.js.map → chunk-KI64TTBL.js.map} +0 -0
- /package/dist/{chunk-NPIBN2VL.js.map → chunk-LK4TOYPU.js.map} +0 -0
- /package/dist/{chunk-UTQUEHC7.js.map → chunk-LUDBXTBJ.js.map} +0 -0
- /package/dist/{chunk-PU56CXZA.js.map → chunk-LYUUA6QB.js.map} +0 -0
- /package/dist/{chunk-P36Z4JRA.js.map → chunk-M5ERTI4I.js.map} +0 -0
- /package/dist/{chunk-LDKPDODJ.js.map → chunk-ME35HVDJ.js.map} +0 -0
- /package/dist/{chunk-773TRRGT.js.map → chunk-MJUCDM3C.js.map} +0 -0
- /package/dist/{chunk-AHPIFKNG.js.map → chunk-N4F7ZSSG.js.map} +0 -0
- /package/dist/{chunk-JOZUBF4A.js.map → chunk-NACLNNFQ.js.map} +0 -0
- /package/dist/{chunk-LC2BDILZ.js.map → chunk-NBP4EX5N.js.map} +0 -0
- /package/dist/{chunk-T7XP6IZE.js.map → chunk-NFP4KPTA.js.map} +0 -0
- /package/dist/{chunk-ZVPVTPGI.js.map → chunk-NNZFPYYX.js.map} +0 -0
- /package/dist/{chunk-LPNCR4QK.js.map → chunk-NSTNGMSS.js.map} +0 -0
- /package/dist/{chunk-5RWZH6PH.js.map → chunk-NUF7VSEX.js.map} +0 -0
- /package/dist/{chunk-7VZFRUQU.js.map → chunk-O7ERGZDA.js.map} +0 -0
- /package/dist/{chunk-HSZMX3ZJ.js.map → chunk-ODW5GDFE.js.map} +0 -0
- /package/dist/{chunk-5DHKCO52.js.map → chunk-OJUEUQDJ.js.map} +0 -0
- /package/dist/{chunk-LOXHYCVS.js.map → chunk-OMX6TKXH.js.map} +0 -0
- /package/dist/{chunk-J2WC5LF4.js.map → chunk-QBC33MPY.js.map} +0 -0
- /package/dist/{chunk-SEEJOGQX.js.map → chunk-QBNE55VA.js.map} +0 -0
- /package/dist/{chunk-F7XUD3PL.js.map → chunk-S4CDUXQY.js.map} +0 -0
- /package/dist/{chunk-WNXYT4MK.js.map → chunk-S4Z2OBTX.js.map} +0 -0
- /package/dist/{chunk-UL4MKZHI.js.map → chunk-SN4JXNLL.js.map} +0 -0
- /package/dist/{chunk-CAMNRAJF.js.map → chunk-SZMYGDSM.js.map} +0 -0
- /package/dist/{chunk-CPA5NBHN.js.map → chunk-TNGH4ZYI.js.map} +0 -0
- /package/dist/{chunk-F3NVYTTA.js.map → chunk-TNXNECAN.js.map} +0 -0
- /package/dist/{chunk-BEC4YBNA.js.map → chunk-TVW4C7PV.js.map} +0 -0
- /package/dist/{chunk-UFKPQBXH.js.map → chunk-U62OK7BB.js.map} +0 -0
- /package/dist/{chunk-4QEYREAV.js.map → chunk-U6NGKS32.js.map} +0 -0
- /package/dist/{chunk-HRHO3ZNG.js.map → chunk-UW4RYPWC.js.map} +0 -0
- /package/dist/{chunk-T6ILXUAH.js.map → chunk-VG4SSPAW.js.map} +0 -0
- /package/dist/{chunk-H2YSH3DG.js.map → chunk-WKAXBXVA.js.map} +0 -0
- /package/dist/{chunk-SXIMQLGV.js.map → chunk-WVGXCBOC.js.map} +0 -0
- /package/dist/{chunk-UNUMFURP.js.map → chunk-X5PIDJ3L.js.map} +0 -0
- /package/dist/{chunk-CRML27CO.js.map → chunk-X5YYSAZX.js.map} +0 -0
- /package/dist/{chunk-FZEEWOI2.js.map → chunk-XJJYSX6F.js.map} +0 -0
- /package/dist/{chunk-OA2O2GJ4.js.map → chunk-XOHYGIWF.js.map} +0 -0
- /package/dist/{chunk-UG6VXIOK.js.map → chunk-XSTNGNJP.js.map} +0 -0
- /package/dist/{chunk-YDPAE2RD.js.map → chunk-YFLLGRXO.js.map} +0 -0
- /package/dist/{chunk-MDD2RINF.js.map → chunk-YWPLOJ7T.js.map} +0 -0
- /package/dist/{chunk-Q4WONDMJ.js.map → chunk-YYGZJPOK.js.map} +0 -0
- /package/dist/{chunk-GTO56JY5.js.map → chunk-ZPS724LT.js.map} +0 -0
- /package/dist/{chunk-SNOIKAHM.js.map → chunk-ZZZWEDF4.js.map} +0 -0
- /package/dist/{contradiction-scan-AKUWPX5N.js.map → contradiction-scan-NOYMFG66.js.map} +0 -0
- /package/dist/{first-start-migration-4NETATFF.js.map → first-start-migration-KHIMCBIC.js.map} +0 -0
- /package/dist/{purge-GB7PZHT2.js.map → purge-OP6BEDFY.js.map} +0 -0
- /package/dist/{resolution-XWBPKYFB.js.map → recall-state-view-wire.js.map} +0 -0
- /package/dist/{tier-stats-4B5IJ3NE.js.map → tier-stats-2TOW3QNL.js.map} +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { readdirSync, readFileSync, statSync, unlinkSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
import { writeFileAtomically } from "../maintenance/atomic-file.js";
|
|
5
|
+
import { normalizeProjectionPreview } from "../memory-projection-format.js";
|
|
6
|
+
import { OKF_RESERVED_BASENAMES } from "./type-mapping.js";
|
|
7
|
+
|
|
8
|
+
export const OKF_INDEX_MARKER = "<!-- remnic-okf-index -->";
|
|
9
|
+
|
|
10
|
+
const INDEXED_ROOTS = ["entities", "facts", "corrections", "summaries"] as const;
|
|
11
|
+
|
|
12
|
+
export interface OkfIndexReport {
|
|
13
|
+
written: string[];
|
|
14
|
+
removed: string[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export async function runOkfIndexMaintenance(
|
|
18
|
+
memoryDir: string,
|
|
19
|
+
enabled: boolean,
|
|
20
|
+
): Promise<OkfIndexReport> {
|
|
21
|
+
const written: string[] = [];
|
|
22
|
+
const removed: string[] = [];
|
|
23
|
+
const dirs = collectIndexDirs(memoryDir);
|
|
24
|
+
for (const dir of dirs) {
|
|
25
|
+
const indexPath = path.join(dir, "index.md");
|
|
26
|
+
if (!enabled) {
|
|
27
|
+
if (isGeneratedIndex(indexPath)) {
|
|
28
|
+
unlinkSync(indexPath);
|
|
29
|
+
removed.push(indexPath);
|
|
30
|
+
}
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const next = renderIndex(dir);
|
|
34
|
+
if (next === null) continue;
|
|
35
|
+
if (isUnchangedGenerated(indexPath, next)) continue;
|
|
36
|
+
await writeFileAtomically(indexPath, next);
|
|
37
|
+
written.push(indexPath);
|
|
38
|
+
}
|
|
39
|
+
return { written, removed };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function collectIndexDirs(memoryDir: string): string[] {
|
|
43
|
+
const dirs = [memoryDir];
|
|
44
|
+
for (const root of INDEXED_ROOTS) {
|
|
45
|
+
const full = path.join(memoryDir, root);
|
|
46
|
+
if (!isDir(full)) continue;
|
|
47
|
+
dirs.push(full);
|
|
48
|
+
if (root === "facts") {
|
|
49
|
+
for (const entry of safeList(full)) {
|
|
50
|
+
const child = path.join(full, entry);
|
|
51
|
+
if (isDir(child) && /^\d{4}-\d{2}-\d{2}$/.test(entry)) dirs.push(child);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return dirs;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function renderIndex(dir: string): string | null {
|
|
59
|
+
const entries = safeList(dir)
|
|
60
|
+
.filter((name) => name.endsWith(".md") && OKF_RESERVED_BASENAMES[name] !== true)
|
|
61
|
+
.sort((a, b) => a.localeCompare(b));
|
|
62
|
+
if (entries.length === 0) return null;
|
|
63
|
+
const lines = [OKF_INDEX_MARKER, "", `# ${path.basename(dir)}`, ""];
|
|
64
|
+
for (const name of entries) {
|
|
65
|
+
const preview = previewFile(path.join(dir, name));
|
|
66
|
+
lines.push(`* [${titleFrom(name, preview)}](${name}) - ${preview}`);
|
|
67
|
+
}
|
|
68
|
+
lines.push("");
|
|
69
|
+
return lines.join("\n");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function previewFile(filePath: string): string {
|
|
73
|
+
try {
|
|
74
|
+
return normalizeProjectionPreview(readFileSync(filePath, "utf8"), 120);
|
|
75
|
+
} catch {
|
|
76
|
+
return "";
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function titleFrom(name: string, preview: string): string {
|
|
81
|
+
return preview.split(" ").slice(0, 8).join(" ") || name.replace(/\.md$/, "");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function isGeneratedIndex(filePath: string): boolean {
|
|
85
|
+
try {
|
|
86
|
+
return readFileSync(filePath, "utf8").includes(OKF_INDEX_MARKER);
|
|
87
|
+
} catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function isUnchangedGenerated(filePath: string, next: string): boolean {
|
|
93
|
+
try {
|
|
94
|
+
return readFileSync(filePath, "utf8") === next;
|
|
95
|
+
} catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function isDir(dir: string): boolean {
|
|
101
|
+
try {
|
|
102
|
+
return statSync(dir).isDirectory();
|
|
103
|
+
} catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function safeList(dir: string): string[] {
|
|
109
|
+
try {
|
|
110
|
+
return readdirSync(dir);
|
|
111
|
+
} catch {
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared OKF bundle-rendering helpers (issues #1948 + #1950).
|
|
3
|
+
*
|
|
4
|
+
* One source of truth for the mechanics every OKF bundle exporter uses:
|
|
5
|
+
* deterministic frontmatter rendering, staging-directory file writes, the
|
|
6
|
+
* symlink-guarded atomic publish, and the bundle version stamp. The memory
|
|
7
|
+
* exporter (transfer/export-okf.ts) and the codegraph exporter
|
|
8
|
+
* (coding/export-okf-codegraph.ts) both consume this module so their
|
|
9
|
+
* bundles are byte-compatible in convention (rule 38 — deterministic
|
|
10
|
+
* rendering discipline; rule 9 — stable seam over shared mechanics).
|
|
11
|
+
*/
|
|
12
|
+
import { lstatSync, mkdirSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
13
|
+
import path from "node:path";
|
|
14
|
+
|
|
15
|
+
/** OKF spec version emitted in every bundle root index. */
|
|
16
|
+
export const OKF_EXPORT_VERSION = "0.1";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Render a YAML frontmatter block from a flat field map.
|
|
20
|
+
*
|
|
21
|
+
* Key order: the canonical OKF keys first (`type`, `title`, `description`,
|
|
22
|
+
* `tags`, `timestamp`), everything else alphabetical — one deterministic
|
|
23
|
+
* layout so identical inputs always render byte-identical files. A key set
|
|
24
|
+
* to `undefined` is omitted; callers must not pass a key twice.
|
|
25
|
+
*/
|
|
26
|
+
export function renderFrontmatter(fields: Record<string, unknown>): string {
|
|
27
|
+
const keys = Object.keys(fields).sort((a, b) => {
|
|
28
|
+
const order = ["type", "title", "description", "tags", "timestamp"];
|
|
29
|
+
const ai = order.indexOf(a);
|
|
30
|
+
const bi = order.indexOf(b);
|
|
31
|
+
if (ai >= 0 || bi >= 0) return (ai < 0 ? 99 : ai) - (bi < 0 ? 99 : bi);
|
|
32
|
+
return a.localeCompare(b);
|
|
33
|
+
});
|
|
34
|
+
const lines = keys.flatMap((key) => yamlLine(key, fields[key]));
|
|
35
|
+
return `---\n${lines.join("\n")}\n---\n\n`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function yamlLine(key: string, value: unknown): string[] {
|
|
39
|
+
if (value === undefined) return [];
|
|
40
|
+
if (Array.isArray(value)) {
|
|
41
|
+
if (value.length === 0) return [`${key}: []`];
|
|
42
|
+
if (value.every((item) => typeof item !== "object" || item === null)) {
|
|
43
|
+
return [`${key}:`, ...value.map((item) => ` - ${yamlScalar(item)}`)];
|
|
44
|
+
}
|
|
45
|
+
return [`${key}: ${JSON.stringify(value)}`];
|
|
46
|
+
}
|
|
47
|
+
if (typeof value === "object" && value !== null) return [`${key}: ${JSON.stringify(value)}`];
|
|
48
|
+
return [`${key}: ${yamlScalar(value)}`];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function yamlScalar(value: unknown): string {
|
|
52
|
+
if (typeof value === "string") {
|
|
53
|
+
if (value === "" || /[:#\n]/.test(value) || value !== value.trim()) return JSON.stringify(value);
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
return String(value);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Write one file into a bundle staging tree. `rel` is a POSIX-style
|
|
61
|
+
* bundle-relative path; parent directories are created as needed.
|
|
62
|
+
*/
|
|
63
|
+
export function writeBundleFile(root: string, rel: string, content: string): void {
|
|
64
|
+
const dest = path.join(root, ...rel.split("/"));
|
|
65
|
+
mkdirSync(path.dirname(dest), { recursive: true });
|
|
66
|
+
writeFileSync(dest, content, "utf8");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Publish a staged bundle: refuse a non-empty target without `--force`,
|
|
71
|
+
* swap via rename so the target is never observed half-written, and keep a
|
|
72
|
+
* restorable backup when replacing an existing tree.
|
|
73
|
+
*/
|
|
74
|
+
export function publishBundle(staging: string, outDir: string, force: boolean): void {
|
|
75
|
+
let exists = false;
|
|
76
|
+
try {
|
|
77
|
+
const stat = lstatSync(outDir);
|
|
78
|
+
if (stat.isSymbolicLink()) throw new Error(`--out must not be a symlink: ${outDir}`);
|
|
79
|
+
exists = true;
|
|
80
|
+
const entries = readdirSync(outDir).filter((name) => name !== "." && name !== "..");
|
|
81
|
+
if (entries.length > 0 && !force) {
|
|
82
|
+
rmSync(staging, { recursive: true, force: true });
|
|
83
|
+
throw new Error(`--out ${outDir} is not empty; pass --force to replace it`);
|
|
84
|
+
}
|
|
85
|
+
} catch (err) {
|
|
86
|
+
if ((err as NodeJS.ErrnoException).code !== "ENOENT") throw err;
|
|
87
|
+
}
|
|
88
|
+
mkdirSync(path.dirname(outDir), { recursive: true });
|
|
89
|
+
if (exists && force) {
|
|
90
|
+
const backup = `${outDir}.okf-prev`;
|
|
91
|
+
try {
|
|
92
|
+
renameSync(outDir, backup);
|
|
93
|
+
} catch {
|
|
94
|
+
rmSync(staging, { recursive: true, force: true });
|
|
95
|
+
throw new Error(`cannot replace --out ${outDir}`);
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
renameSync(staging, outDir);
|
|
99
|
+
rmSync(backup, { recursive: true, force: true });
|
|
100
|
+
} catch (err) {
|
|
101
|
+
try {
|
|
102
|
+
renameSync(backup, outDir);
|
|
103
|
+
} catch {
|
|
104
|
+
// Keep backup if restore fails.
|
|
105
|
+
}
|
|
106
|
+
throw err;
|
|
107
|
+
}
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
renameSync(staging, outDir);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Reject a --out path with a symlink anywhere in its component chain
|
|
115
|
+
* (pattern 42 + hermes-shim precedent): a symlinked component could aim
|
|
116
|
+
* the atomic rename outside the operator's chosen directory.
|
|
117
|
+
*/
|
|
118
|
+
export function rejectSymlinkPath(target: string): void {
|
|
119
|
+
let current = path.resolve(target);
|
|
120
|
+
while (true) {
|
|
121
|
+
try {
|
|
122
|
+
if (lstatSync(current).isSymbolicLink()) {
|
|
123
|
+
throw new Error(`--out path component is a symlink: ${current}`);
|
|
124
|
+
}
|
|
125
|
+
} catch (err) {
|
|
126
|
+
if ((err as NodeJS.ErrnoException).code !== "ENOENT") throw err;
|
|
127
|
+
}
|
|
128
|
+
const parent = path.dirname(current);
|
|
129
|
+
if (parent === current) break;
|
|
130
|
+
current = parent;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
@@ -49,6 +49,7 @@ test("parseOkfConfig treats false as a real disable", () => {
|
|
|
49
49
|
assert.deepEqual(parseOkfConfig({ conformanceEnabled: false, sweepEnabled: "false" }), {
|
|
50
50
|
conformanceEnabled: false,
|
|
51
51
|
sweepEnabled: false,
|
|
52
|
+
indexFilesEnabled: false,
|
|
52
53
|
});
|
|
53
54
|
assert.throws(() => parseOkfConfig("nope"), /okf must be an object/);
|
|
54
55
|
});
|
|
@@ -164,6 +165,7 @@ test("runOkfCliCommand handles help and rejects unexpected tokens", async () =>
|
|
|
164
165
|
memoryDir: "/tmp",
|
|
165
166
|
conformanceEnabled: true,
|
|
166
167
|
sweepEnabled: false,
|
|
168
|
+
indexFilesEnabled: false,
|
|
167
169
|
});
|
|
168
170
|
assert.equal(code, 0);
|
|
169
171
|
assert.match(chunks.join(""), /usage: remnic okf/);
|
|
@@ -176,6 +178,7 @@ test("runOkfCliCommand handles help and rejects unexpected tokens", async () =>
|
|
|
176
178
|
memoryDir: "/tmp",
|
|
177
179
|
conformanceEnabled: true,
|
|
178
180
|
sweepEnabled: false,
|
|
181
|
+
indexFilesEnabled: false,
|
|
179
182
|
});
|
|
180
183
|
assert.equal(code, 1);
|
|
181
184
|
assert.match(errChunks.join(""), new RegExp(`unexpected argument '${token}'`));
|
package/src/okf/type-mapping.ts
CHANGED
|
@@ -57,6 +57,8 @@ export function okfTypeForEntityKind(kind: string | undefined): string {
|
|
|
57
57
|
export const OKF_PROFILE_TYPE = "Profile";
|
|
58
58
|
export const OKF_QUESTION_TYPE = "Question";
|
|
59
59
|
export const OKF_DECISION_RECORD_TYPE = "Decision Record";
|
|
60
|
+
export const OKF_ARCHITECTURE_CARD_TYPE = "Architecture Card";
|
|
61
|
+
export const OKF_CODE_MODULE_TYPE = "Code Module";
|
|
60
62
|
|
|
61
63
|
/**
|
|
62
64
|
* OKF §6/§7 reserve `index.md` and `log.md` for bundle-level files with a
|
|
@@ -83,6 +83,7 @@ import {
|
|
|
83
83
|
} from "../fallback-llm.js";
|
|
84
84
|
import { EmbeddingFallback } from "../embedding-fallback.js";
|
|
85
85
|
import { decideSemanticDedup, type SemanticDedupDecision, type SemanticDedupHit } from "../dedup/semantic.js";
|
|
86
|
+
import { applyNoveltyGate, embeddingsFromCosineHits } from "../dedup/novelty-gate.js";
|
|
86
87
|
import { selectRouteRule, type RouteRule, type RoutingEngineOptions } from "../routing/engine.js";
|
|
87
88
|
import { ThreadingManager } from "../threading.js";
|
|
88
89
|
import { NamespaceStorageRouter } from "../namespaces/storage.js";
|
|
@@ -1919,26 +1920,24 @@ export class ExtractionPersistCoordinator {
|
|
|
1919
1920
|
: undefined;
|
|
1920
1921
|
const faithfulnessEnforceStatus = faithfulnessGateStatus ?? requireSpansPendingStatus ?? injectionScreenStatus;
|
|
1921
1922
|
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
// a high-similarity update/correction is linked as a superseding
|
|
1939
|
-
// contradiction rather than silently dropped.
|
|
1923
|
+
const novelty = await applyNoveltyGate({
|
|
1924
|
+
enabled: this.deps.config["noveltyGateEnabled"] === true,
|
|
1925
|
+
addThreshold: this.deps.config.noveltyAddThreshold,
|
|
1926
|
+
noopThreshold: this.deps.config.noveltyNoopThreshold,
|
|
1927
|
+
lookup: async () =>
|
|
1928
|
+
embeddingsFromCosineHits(
|
|
1929
|
+
await this.deps.semanticDedupLookup(
|
|
1930
|
+
fact.content,
|
|
1931
|
+
this.deps.config.semanticDedupCandidates,
|
|
1932
|
+
targetStorage,
|
|
1933
|
+
),
|
|
1934
|
+
// Same connector scoping as decideSemanticDedup below: a
|
|
1935
|
+
// cross-connector neighbor must not noop this candidate.
|
|
1936
|
+
{ candidateConnector: sourceContext?.sourceConnector },
|
|
1937
|
+
),
|
|
1938
|
+
});
|
|
1940
1939
|
let pendingSemanticSkip: (SemanticDedupDecision & { action: "skip" }) | null = null;
|
|
1941
|
-
if (resolvePipelineProcessingCapabilities(this.deps.config).semanticDedup && injectionScreenStatus !== "pending_review") {
|
|
1940
|
+
if (novelty.decision !== "add" && resolvePipelineProcessingCapabilities(this.deps.config).semanticDedup && injectionScreenStatus !== "pending_review") {
|
|
1942
1941
|
let semanticDecision: SemanticDedupDecision;
|
|
1943
1942
|
// UUI2: skip embedding lookup for the rest of this batch once we know
|
|
1944
1943
|
// the backend is unavailable. The flag is reset per-batch (set to false
|
|
@@ -2100,17 +2099,17 @@ export class ExtractionPersistCoordinator {
|
|
|
2100
2099
|
// gate's contract is "persists with status: pending_review, never
|
|
2101
2100
|
// silently dropped" (issue #1576).
|
|
2102
2101
|
if (
|
|
2103
|
-
pendingSemanticSkip &&
|
|
2102
|
+
(pendingSemanticSkip || novelty.decision === "noop") &&
|
|
2104
2103
|
!contradictionDetected &&
|
|
2105
2104
|
!isCorrection &&
|
|
2106
2105
|
faithfulnessEnforceStatus !== "pending_review"
|
|
2107
2106
|
) {
|
|
2108
2107
|
log.debug(
|
|
2109
|
-
`dedup: skipping semantic near-duplicate fact "${fact.content
|
|
2108
|
+
`dedup: skipping ${pendingSemanticSkip ? "semantic near-duplicate" : "novelty-noop"} fact "${fact.content
|
|
2110
2109
|
.slice(0, 60)
|
|
2111
|
-
.replace(/\s+/g, " ")}…" score=${pendingSemanticSkip
|
|
2110
|
+
.replace(/\s+/g, " ")}…" score=${(pendingSemanticSkip?.topScore ?? novelty.score).toFixed(
|
|
2112
2111
|
3,
|
|
2113
|
-
)} neighbor=${pendingSemanticSkip.
|
|
2112
|
+
)} neighbor=${pendingSemanticSkip?.topId ?? novelty.neighborId}`,
|
|
2114
2113
|
);
|
|
2115
2114
|
dedupedCount++;
|
|
2116
2115
|
// Do NOT add fact.content to contentHashIndex here. No memory was
|
|
@@ -40,6 +40,7 @@ import {
|
|
|
40
40
|
type MemoryLifecycleCapabilitySet,
|
|
41
41
|
} from "../capabilities.js";
|
|
42
42
|
import { parseFlexibleIsoTimestamp } from "../utils/iso-timestamp.js";
|
|
43
|
+
import { tagPersistedMemories } from "../location/tagging.js";
|
|
43
44
|
import { log } from "../logger.js";
|
|
44
45
|
import type { PluginConfig, BufferTurn, ExtractionResult, MetaState, ExtractionFailureClass } from "../types.js";
|
|
45
46
|
import type { TierMigrationCycleSummary } from "../recall-state.js";
|
|
@@ -62,7 +63,6 @@ export class ExtractionDeadlineError extends Error {
|
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
|
|
66
66
|
/** Dependencies injected by the orchestrator. All stable references or
|
|
67
67
|
* live accessors — lazy getters for anything tests reassign
|
|
68
68
|
* post-construction (buffer, extraction, storageRouter, threading). */
|
|
@@ -1090,6 +1090,7 @@ export class ExtractionRunCoordinator {
|
|
|
1090
1090
|
log.warn("runExtraction: durable-commit callback failed", error);
|
|
1091
1091
|
}
|
|
1092
1092
|
const runPostPersistBestEffort = runExtractionPostPersistBestEffort.bind(null, runDeadlineAware);
|
|
1093
|
+
await tagPersistedMemories(storage, persistedIds, this.config);
|
|
1093
1094
|
const postPersist = await runExtractionPostPersist({
|
|
1094
1095
|
result,
|
|
1095
1096
|
storage,
|
|
@@ -9,6 +9,9 @@ import {
|
|
|
9
9
|
isLocationDayPath,
|
|
10
10
|
isMeetingRecordPath,
|
|
11
11
|
} from "./orchestrator-helpers.js";
|
|
12
|
+
import { isJournalDayPath } from "../activity/journal.js";
|
|
13
|
+
import { OKF_RESERVED_BASENAMES } from "../okf/type-mapping.js";
|
|
14
|
+
|
|
12
15
|
|
|
13
16
|
export interface GenericRecallPathPolicy {
|
|
14
17
|
readonly memoryDir?: string;
|
|
@@ -135,6 +138,7 @@ export function isSearchExcludedPath(
|
|
|
135
138
|
isArtifactMemoryPath(candidate) ||
|
|
136
139
|
isNamespacedActivityDigestPath(candidate, policy.memoryDir) ||
|
|
137
140
|
isNamespacedLocationDayPath(candidate, policy.memoryDir) ||
|
|
141
|
+
isNamespacedJournalDayPath(candidate, policy.memoryDir) ||
|
|
138
142
|
isMeetingRecordPath(candidate)
|
|
139
143
|
) {
|
|
140
144
|
return true;
|
|
@@ -177,6 +181,15 @@ function isNamespacedLocationDayPath(candidate: string, memoryDir?: string): boo
|
|
|
177
181
|
return isLocationDayPath(namespaced[2] ?? "", memoryDir);
|
|
178
182
|
}
|
|
179
183
|
|
|
184
|
+
function isNamespacedJournalDayPath(candidate: string, memoryDir?: string): boolean {
|
|
185
|
+
if (isJournalDayPath(candidate, memoryDir)) return true;
|
|
186
|
+
if (memoryDir === undefined || memoryDir.length === 0) return false;
|
|
187
|
+
const relative = path.relative(memoryDir, path.resolve(memoryDir, candidate));
|
|
188
|
+
const namespaced = /^namespaces[\\/]([^\\/]+)[\\/](.*)$/.exec(relative);
|
|
189
|
+
if (namespaced === null) return false;
|
|
190
|
+
return isJournalDayPath(namespaced[2] ?? "", memoryDir);
|
|
191
|
+
}
|
|
192
|
+
|
|
180
193
|
/** A path as given, plus its form with a leading COLLECTION segment removed. */
|
|
181
194
|
function collectionSpellings(
|
|
182
195
|
filePath: string,
|
|
@@ -230,9 +243,8 @@ export function isGenericRecallExcludedPath(
|
|
|
230
243
|
): boolean {
|
|
231
244
|
return (
|
|
232
245
|
isSearchExcludedPath(filePath, policy, source) ||
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
isTopLevelArchivePath(filePath, policy, source)
|
|
246
|
+
isTopLevelArchivePath(filePath, policy, source) ||
|
|
247
|
+
OKF_RESERVED_BASENAMES[path.basename(filePath)] === true
|
|
236
248
|
);
|
|
237
249
|
}
|
|
238
250
|
|
|
@@ -20,6 +20,7 @@ import { ProfilingCollector } from "../profiling.js";
|
|
|
20
20
|
import { trustResultFor, type TrustStageResultItem } from "../trust-score-stage.js";
|
|
21
21
|
import type { RecallResultFormatter } from "./recall-result-formatter.js";
|
|
22
22
|
import type { IdentityInjectionMode, PluginConfig, QmdSearchResult } from "../types.js";
|
|
23
|
+
import { applyRecallStateViews } from "../recall-state-view-wire.js";
|
|
23
24
|
|
|
24
25
|
export interface RecallEntryDeps {
|
|
25
26
|
appendRecallSection(
|
|
@@ -274,9 +275,13 @@ export class RecallEntryCoordinator {
|
|
|
274
275
|
}): void {
|
|
275
276
|
const sectionId = "memories";
|
|
276
277
|
const trustByPath = options.trustByPath ?? null;
|
|
277
|
-
const injectable =
|
|
278
|
-
|
|
279
|
-
|
|
278
|
+
const injectable = applyRecallStateViews(
|
|
279
|
+
trustByPath
|
|
280
|
+
? options.results.filter((r) => !trustResultFor(trustByPath, r)?.quarantined)
|
|
281
|
+
: options.results,
|
|
282
|
+
options.retrievalQuery,
|
|
283
|
+
this.deps.config,
|
|
284
|
+
);
|
|
280
285
|
if (injectable.length === 0) return;
|
|
281
286
|
|
|
282
287
|
const formatted = this.deps.recallResultFormatter.formatQmdResultEntries(
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
runDeepRecall,
|
|
6
|
+
runDeepRecallStep,
|
|
7
|
+
type DeepRecallState,
|
|
8
|
+
} from "./recall-deep.js";
|
|
9
|
+
|
|
10
|
+
function seed(extra: Partial<DeepRecallState> = {}): DeepRecallState {
|
|
11
|
+
return {
|
|
12
|
+
query: "who met at the cafe",
|
|
13
|
+
workingSet: ["m-seed"],
|
|
14
|
+
frontier: ["m-b", "m-c"],
|
|
15
|
+
budget: 2,
|
|
16
|
+
...extra,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
test("budget 0 stops without calling the policy", () => {
|
|
21
|
+
const result = runDeepRecall(seed({ budget: 0 }), () => {
|
|
22
|
+
throw new Error("policy must not run when budget is 0");
|
|
23
|
+
});
|
|
24
|
+
assert.equal(result.trace.length, 1);
|
|
25
|
+
assert.equal(result.trace[0]?.action, "stop");
|
|
26
|
+
assert.equal(result.state.budget, 0);
|
|
27
|
+
assert.deepEqual(result.state.workingSet, ["m-seed"]);
|
|
28
|
+
assert.deepEqual(result.state.frontier, ["m-b", "m-c"]);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("expand consumes budget and pulls the next frontier item", () => {
|
|
32
|
+
const result = runDeepRecallStep(seed({ budget: 2 }), "expand");
|
|
33
|
+
assert.equal(result.step.action, "expand");
|
|
34
|
+
assert.equal(result.state.budget, 1);
|
|
35
|
+
assert.deepEqual(result.state.workingSet, ["m-seed", "m-b"]);
|
|
36
|
+
assert.deepEqual(result.state.frontier, ["m-c"]);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("stop ends while budget remains", () => {
|
|
40
|
+
let calls = 0;
|
|
41
|
+
const result = runDeepRecall(seed({ budget: 4 }), () => {
|
|
42
|
+
calls += 1;
|
|
43
|
+
return "stop";
|
|
44
|
+
});
|
|
45
|
+
assert.equal(calls, 1);
|
|
46
|
+
assert.equal(result.trace.length, 1);
|
|
47
|
+
assert.equal(result.trace[0]?.action, "stop");
|
|
48
|
+
assert.equal(result.state.budget, 4);
|
|
49
|
+
assert.deepEqual(result.state.workingSet, ["m-seed"]);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("unknown action throws", () => {
|
|
53
|
+
assert.throws(() => runDeepRecallStep(seed(), "rewrite"), /unknown deep recall action/);
|
|
54
|
+
assert.throws(
|
|
55
|
+
() => runDeepRecall(seed(), () => "rewrite"),
|
|
56
|
+
/unknown deep recall action/,
|
|
57
|
+
);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test("same state and policy produce the same trace", () => {
|
|
61
|
+
const policy = (state: DeepRecallState) => (state.budget > 1 ? "expand" : "refine");
|
|
62
|
+
const start = seed({ budget: 3, frontier: ["m-z", "m-a"] });
|
|
63
|
+
const first = runDeepRecall(start, policy);
|
|
64
|
+
const second = runDeepRecall(start, policy);
|
|
65
|
+
assert.deepEqual(first, second);
|
|
66
|
+
assert.deepEqual(
|
|
67
|
+
first.trace.map((step) => step.action),
|
|
68
|
+
["expand", "expand", "refine", "stop"],
|
|
69
|
+
);
|
|
70
|
+
assert.equal(start.budget, 3);
|
|
71
|
+
assert.deepEqual(start.frontier, ["m-z", "m-a"]);
|
|
72
|
+
});
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Budgeted REFINE/EXPAND/STOP loop (issue #2332 first slice).
|
|
3
|
+
*
|
|
4
|
+
* Pure state stepper. Policy is injected. No LLM, no orchestrator recall,
|
|
5
|
+
* no IO. Surfaces and parseConfig wait for a later PR — config.ts is at
|
|
6
|
+
* its fileSizeGrandfather ceiling.
|
|
7
|
+
*
|
|
8
|
+
* Budget 0 stops without calling the policy. Unknown actions throw.
|
|
9
|
+
*/
|
|
10
|
+
export const DEEP_RECALL_ACTIONS = ["refine", "expand", "stop"] as const;
|
|
11
|
+
|
|
12
|
+
export type DeepRecallAction = (typeof DEEP_RECALL_ACTIONS)[number];
|
|
13
|
+
|
|
14
|
+
export interface DeepRecallState {
|
|
15
|
+
query: string;
|
|
16
|
+
workingSet: readonly string[];
|
|
17
|
+
frontier: readonly string[];
|
|
18
|
+
budget: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface DeepRecallTraceStep {
|
|
22
|
+
action: DeepRecallAction;
|
|
23
|
+
budget: number;
|
|
24
|
+
workingSet: readonly string[];
|
|
25
|
+
frontier: readonly string[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface DeepRecallStepResult {
|
|
29
|
+
state: DeepRecallState;
|
|
30
|
+
step: DeepRecallTraceStep;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface DeepRecallResult {
|
|
34
|
+
state: DeepRecallState;
|
|
35
|
+
trace: readonly DeepRecallTraceStep[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type DeepRecallPolicy = (state: DeepRecallState) => string;
|
|
39
|
+
|
|
40
|
+
export function isDeepRecallAction(value: unknown): value is DeepRecallAction {
|
|
41
|
+
return typeof value === "string" && (DEEP_RECALL_ACTIONS as readonly string[]).includes(value);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function snapshot(state: DeepRecallState): DeepRecallState {
|
|
45
|
+
return {
|
|
46
|
+
query: state.query,
|
|
47
|
+
workingSet: [...state.workingSet],
|
|
48
|
+
frontier: [...state.frontier],
|
|
49
|
+
budget: state.budget,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function runDeepRecallStep(state: DeepRecallState, action: string): DeepRecallStepResult {
|
|
54
|
+
if (!isDeepRecallAction(action)) {
|
|
55
|
+
throw new Error(
|
|
56
|
+
`unknown deep recall action: ${JSON.stringify(action)}. Valid: ${DEEP_RECALL_ACTIONS.join(", ")}`,
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
if (!Number.isFinite(state.budget) || state.budget <= 0 || action === "stop") {
|
|
60
|
+
const stopped = snapshot(state);
|
|
61
|
+
return {
|
|
62
|
+
state: stopped,
|
|
63
|
+
step: {
|
|
64
|
+
action: "stop",
|
|
65
|
+
budget: stopped.budget,
|
|
66
|
+
workingSet: stopped.workingSet,
|
|
67
|
+
frontier: stopped.frontier,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const next = snapshot(state);
|
|
73
|
+
next.budget = state.budget - 1;
|
|
74
|
+
if (action === "expand") {
|
|
75
|
+
const [head, ...rest] = next.frontier;
|
|
76
|
+
if (head !== undefined && !next.workingSet.includes(head)) {
|
|
77
|
+
next.workingSet = [...next.workingSet, head];
|
|
78
|
+
}
|
|
79
|
+
next.frontier = rest;
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
state: next,
|
|
83
|
+
step: {
|
|
84
|
+
action,
|
|
85
|
+
budget: next.budget,
|
|
86
|
+
workingSet: next.workingSet,
|
|
87
|
+
frontier: next.frontier,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function runDeepRecall(state: DeepRecallState, policy: DeepRecallPolicy): DeepRecallResult {
|
|
93
|
+
const trace: DeepRecallTraceStep[] = [];
|
|
94
|
+
let current = snapshot(state);
|
|
95
|
+
while (true) {
|
|
96
|
+
if (!Number.isFinite(current.budget) || current.budget <= 0) {
|
|
97
|
+
const stopped = snapshot(current);
|
|
98
|
+
trace.push({
|
|
99
|
+
action: "stop",
|
|
100
|
+
budget: stopped.budget,
|
|
101
|
+
workingSet: stopped.workingSet,
|
|
102
|
+
frontier: stopped.frontier,
|
|
103
|
+
});
|
|
104
|
+
return { state: stopped, trace };
|
|
105
|
+
}
|
|
106
|
+
const stepped = runDeepRecallStep(current, policy(current));
|
|
107
|
+
trace.push(stepped.step);
|
|
108
|
+
current = stepped.state;
|
|
109
|
+
if (stepped.step.action === "stop") {
|
|
110
|
+
return { state: current, trace };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|