@remnic/core 9.69.74 → 9.69.76
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.js +35 -36
- package/dist/access-authorization-probe.js +36 -37
- package/dist/access-boundary.js +35 -36
- package/dist/access-cli.js +94 -94
- package/dist/access-extraction-force-flush.js +35 -36
- package/dist/access-http-briefing.js +36 -37
- package/dist/access-http-query.js +37 -38
- package/dist/access-http.js +55 -56
- package/dist/access-identity-continuity-surface.js +35 -36
- package/dist/access-lcm-surface.js +35 -36
- package/dist/access-mcp.js +46 -47
- package/dist/access-namespace-preflight.js +35 -36
- package/dist/access-observe-write-category.js +7 -7
- package/dist/access-observe-write-surface.js +35 -36
- package/dist/access-offline-manifest.js +3 -3
- package/dist/access-operations-batch.js +37 -38
- package/dist/access-operations.js +44 -45
- package/dist/access-recall-concurrency.js +35 -36
- package/dist/access-recall-diagnostics.js +2 -2
- package/dist/access-recall-response.js +35 -36
- package/dist/access-recall-surface.js +35 -36
- package/dist/access-schema.js +4 -4
- package/dist/access-service.js +35 -36
- package/dist/access-surface-catalog.js +37 -38
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/active-recall.js +9 -8
- package/dist/active-recall.js.map +1 -1
- package/dist/{auto-sync-QJNIKZHV.js → auto-sync-WEUDMXUW.js} +4 -4
- package/dist/briefing.js +8 -7
- package/dist/buffer.js +4 -4
- package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
- package/dist/causal-consolidation.js +9 -8
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/{chunk-SYTPPMCM.js → chunk-252U6XYX.js} +2 -2
- package/dist/{chunk-IXLHREAB.js → chunk-2MLWQMXH.js} +2 -2
- package/dist/{chunk-ZL3Q4OWJ.js → chunk-34R75BVF.js} +2 -2
- package/dist/{chunk-3SBDUMPW.js → chunk-364F6EMG.js} +2 -2
- package/dist/{chunk-ZMV67JXV.js → chunk-4GPI3GVE.js} +4 -4
- package/dist/{chunk-V6ULW25E.js → chunk-4MONIKIY.js} +2 -2
- package/dist/{chunk-SIV2ENTD.js → chunk-5D6IMOW6.js} +30 -30
- package/dist/{chunk-BRJNNP7R.js → chunk-5ELXQQY7.js} +2 -2
- package/dist/{chunk-ZUT4FK5W.js → chunk-5Z574AVZ.js} +2 -2
- package/dist/{chunk-NS2SFWKC.js → chunk-6FJCKMSJ.js} +3 -3
- package/dist/{chunk-PDY7C73D.js → chunk-6OACG7JV.js} +2 -2
- package/dist/{chunk-QOL6OTIK.js → chunk-6OR3AQHP.js} +2 -2
- package/dist/{chunk-AG5QWIU7.js → chunk-6RBUAPQT.js} +19 -25
- package/dist/chunk-6RBUAPQT.js.map +1 -0
- package/dist/{chunk-WQC54W25.js → chunk-6VQFPA3J.js} +2 -2
- package/dist/{chunk-GM2UUMWJ.js → chunk-74C5FI4S.js} +5 -5
- package/dist/{chunk-A7AI3WDN.js → chunk-AV5K5QH4.js} +4 -4
- package/dist/{chunk-BMTR244T.js → chunk-BFDBLAVG.js} +2 -2
- package/dist/{chunk-IGEZE6QB.js → chunk-BMYZTZ5D.js} +4 -4
- package/dist/{chunk-7JFQI6DQ.js → chunk-BOUFVFV2.js} +2 -2
- package/dist/{chunk-CGO3A7SR.js → chunk-BRBB62TS.js} +2 -2
- package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
- package/dist/{chunk-GZBNEZIU.js → chunk-DBYAY6UW.js} +3 -3
- package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
- package/dist/{chunk-U3NBO4IX.js → chunk-FAT6HY7N.js} +119 -37
- package/dist/chunk-FAT6HY7N.js.map +1 -0
- package/dist/{chunk-ML64HXAN.js → chunk-FCVPZIHF.js} +2 -2
- package/dist/{chunk-B5EZWPSM.js → chunk-FUWW7ED4.js} +2 -2
- package/dist/{chunk-HXRZRYHQ.js → chunk-GN7YTM5I.js} +2 -2
- package/dist/{chunk-XDOXR3U6.js → chunk-HC4RWJR3.js} +2 -2
- package/dist/{chunk-HA5V67N4.js → chunk-HKPGEFIT.js} +2 -2
- package/dist/{chunk-MB3HMRXM.js → chunk-I6PZTU3Q.js} +2 -2
- package/dist/{chunk-KSJP3AWY.js → chunk-IGJL6JOD.js} +2 -2
- package/dist/{chunk-KK6TS7ED.js → chunk-IV2CY3RE.js} +3 -3
- package/dist/{chunk-ZIJ5FAI4.js → chunk-J3NN2Q4Z.js} +5 -5
- package/dist/{chunk-2JJVJMN6.js → chunk-JBHCTDYF.js} +2 -2
- package/dist/{chunk-D4SPMHEW.js → chunk-JLPNONPH.js} +2 -2
- package/dist/{chunk-BFUYPEJB.js → chunk-JOAR32R6.js} +2 -2
- package/dist/{chunk-FJZUIM5G.js → chunk-JU5MAF2L.js} +2 -2
- package/dist/{chunk-AEGQ5PJ7.js → chunk-JX6USXZR.js} +2 -2
- package/dist/{chunk-VEBYLZQQ.js → chunk-KN6CIN7I.js} +2 -2
- package/dist/{chunk-UJX4I26O.js → chunk-KOXUUJE3.js} +2 -2
- package/dist/{chunk-5UBH37SL.js → chunk-LI76ESJL.js} +4 -4
- package/dist/chunk-LJLGH2DE.js +65 -0
- package/dist/chunk-LJLGH2DE.js.map +1 -0
- package/dist/{chunk-B2PGHXTP.js → chunk-LTS2XIU3.js} +2 -2
- package/dist/{chunk-A7GQBJP5.js → chunk-LVFI5LG7.js} +7 -7
- package/dist/{chunk-WZGSSLYI.js → chunk-MKGIW5W6.js} +2 -2
- package/dist/{chunk-5LWVTSF7.js → chunk-MOQPEFLN.js} +4 -4
- package/dist/{chunk-4ETSHAIZ.js → chunk-N25RPRSI.js} +8 -8
- package/dist/{chunk-5W62ZVC6.js → chunk-N6TUO3O6.js} +2 -2
- package/dist/{chunk-2IH2WNM6.js → chunk-NC7OAEYY.js} +3 -3
- package/dist/{chunk-GXHRNONR.js → chunk-NQBD3R24.js} +2 -2
- package/dist/{chunk-S52VKUUW.js → chunk-NRPLDEFR.js} +2 -2
- package/dist/{chunk-VSBY5HAI.js → chunk-OH6AMNSA.js} +2 -2
- package/dist/{chunk-NVPE6AJ3.js → chunk-OIKX22FU.js} +1 -1
- package/dist/{chunk-T3XDF5RO.js → chunk-OJMAM4RO.js} +2 -2
- package/dist/{chunk-NKIK4VFP.js → chunk-OMYCECTS.js} +2 -2
- package/dist/{chunk-UHQ5UPAQ.js → chunk-OOWUOWXK.js} +2 -2
- package/dist/{chunk-RBAG3VUT.js → chunk-P2FJ2KYJ.js} +17 -17
- package/dist/{chunk-F5O6WEDO.js → chunk-PWF4JXKD.js} +1 -1
- package/dist/chunk-PWF4JXKD.js.map +1 -0
- package/dist/{chunk-A5HBAR5Y.js → chunk-RQIETS2K.js} +2 -2
- package/dist/{chunk-RWQXTR35.js → chunk-SFDZ66MD.js} +2 -2
- package/dist/{chunk-YR6A6ZK7.js → chunk-SSUDD72S.js} +2 -2
- package/dist/{chunk-5TS5QOZS.js → chunk-TWUMZCGA.js} +6 -6
- package/dist/{chunk-Y4IQFWGD.js → chunk-TYR4D4GH.js} +2 -2
- package/dist/{chunk-VE456O3R.js → chunk-UHKME3I7.js} +2 -2
- package/dist/{chunk-IPLYGWQF.js → chunk-VDX2J7OX.js} +6 -6
- package/dist/{chunk-542IROS3.js → chunk-VKWMW32Y.js} +2 -2
- package/dist/{chunk-YF3JERFZ.js → chunk-VL4X7ZHC.js} +2 -2
- package/dist/{chunk-ZHXSOMYH.js → chunk-VVX5PZFS.js} +2 -2
- package/dist/{chunk-GLX4SU4W.js → chunk-W5VYWOU3.js} +2 -2
- package/dist/{chunk-FRD5N3CS.js → chunk-WZ7M2QRP.js} +2 -2
- package/dist/{chunk-OMU54WOM.js → chunk-X2PBZOYZ.js} +2 -2
- package/dist/{chunk-HVWLZ7ZQ.js → chunk-XC4MDMQE.js} +4 -4
- package/dist/{chunk-JLNJ7AGH.js → chunk-XIA4CN3T.js} +7 -7
- package/dist/{chunk-JTGL6UX7.js → chunk-XLLRMUMH.js} +8 -7
- package/dist/chunk-XLLRMUMH.js.map +1 -0
- package/dist/{chunk-SUD76OMV.js → chunk-XNTIX4LA.js} +97 -50
- package/dist/chunk-XNTIX4LA.js.map +1 -0
- package/dist/{chunk-QNUK4SUE.js → chunk-XQSAPG34.js} +2 -2
- package/dist/{chunk-QXDZYPBL.js → chunk-Y37KZVUM.js} +2 -2
- package/dist/{chunk-NNPJWVGN.js → chunk-YNNXM6FN.js} +38 -38
- package/dist/{chunk-SB4ZWVKI.js → chunk-YPWOZ6ME.js} +3 -5
- package/dist/{chunk-SB4ZWVKI.js.map → chunk-YPWOZ6ME.js.map} +1 -1
- package/dist/{chunk-47AONXWB.js → chunk-YYI5DZAQ.js} +2 -2
- package/dist/{chunk-HZZIH5SW.js → chunk-YZENVZWY.js} +2 -2
- package/dist/cli.js +74 -75
- package/dist/coding/export-okf-codegraph.js +8 -7
- package/dist/coding/export-okf-codegraph.js.map +1 -1
- package/dist/compounding/engine.js +8 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -8
- package/dist/connectors/codex-materialize-runner.js +8 -7
- package/dist/connectors/index.js +8 -7
- package/dist/convergence-refresh.js +10 -10
- package/dist/corpus-watermark.js +10 -9
- package/dist/deep-recall-http-glue.js +5 -5
- package/dist/directory-sidecars.d.ts +3 -0
- package/dist/directory-sidecars.d.ts.map +1 -1
- package/dist/directory-sidecars.js +7 -4
- package/dist/entity-retrieval.js +8 -7
- package/dist/external-wiki-access.js +36 -37
- package/dist/extraction.js +12 -12
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/index.js +102 -102
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.js +8 -8
- package/dist/location/index.js +11 -11
- package/dist/maintenance/memory-governance.js +8 -7
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +8 -8
- package/dist/maintenance/rebuild-memory-projection.js +9 -9
- package/dist/memory-browse-operations.js +36 -37
- package/dist/memory-browse.js +3 -4
- package/dist/namespaces/migrate.js +9 -8
- package/dist/namespaces/search.js +3 -3
- package/dist/namespaces/storage.js +8 -7
- package/dist/offline-sync-impression-drain.js +2 -2
- package/dist/operator-doctor-corpus.js +11 -10
- package/dist/operator-toolkit.js +18 -17
- package/dist/orchestration/maintenance.js +17 -17
- package/dist/orchestration/recall-entry.d.ts.map +1 -1
- package/dist/orchestration/recall-search-pipeline.d.ts.map +1 -1
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +94 -94
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.js +2 -2
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-navigation-operations.js +36 -37
- package/dist/recall-navigation.js +35 -36
- package/dist/recall-state-view-admission.js +3 -4
- package/dist/recall-state.js +2 -2
- package/dist/recall-why-service.js +3 -4
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.js +2 -2
- package/dist/resume-bundles.js +10 -9
- package/dist/search/factory.js +2 -2
- package/dist/search/index.js +4 -4
- package/dist/semantic-consolidation.js +9 -8
- package/dist/semantic-rule-promotion.js +8 -7
- package/dist/semantic-rule-verifier.js +8 -7
- package/dist/source-agent-qualifier.js +11 -11
- package/dist/standing-memory-recall.d.ts +22 -0
- package/dist/standing-memory-recall.d.ts.map +1 -0
- package/dist/standing-memory-recall.js +16 -0
- package/dist/standing-memory-recall.js.map +1 -0
- package/dist/standup/build.js +8 -7
- package/dist/storage.d.ts +1 -19
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +7 -6
- package/dist/support-passport/index.js +38 -39
- package/dist/transfer/autodetect.js +1 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +3 -3
- package/dist/transfer/capsule-import.js +2 -2
- package/dist/transfer/export-okf.js +9 -8
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/verified-recall.js +8 -7
- package/dist/who-knows-cli.js +9 -8
- package/dist/who-knows.js +8 -7
- package/package.json +2 -2
- package/src/config.ts +2 -3
- package/src/directory-sidecars-config.test.ts +34 -0
- package/src/directory-sidecars.ts +27 -6
- package/src/orchestration/recall-entry.ts +54 -13
- package/src/orchestration/recall-search-pipeline.ts +4 -6
- package/src/orchestrator.ts +8 -0
- package/src/standing-memory-block.test.ts +4 -3
- package/src/standing-memory-recall.test.ts +30 -0
- package/src/standing-memory-recall.ts +87 -0
- package/src/storage.ts +13 -22
- package/src/types.ts +3 -3
- package/dist/chunk-AG5QWIU7.js.map +0 -1
- package/dist/chunk-F5O6WEDO.js.map +0 -1
- package/dist/chunk-JTGL6UX7.js.map +0 -1
- package/dist/chunk-PCEYGOSL.js +0 -66
- package/dist/chunk-PCEYGOSL.js.map +0 -1
- package/dist/chunk-SUD76OMV.js.map +0 -1
- package/dist/chunk-U3NBO4IX.js.map +0 -1
- /package/dist/{auto-sync-QJNIKZHV.js.map → auto-sync-WEUDMXUW.js.map} +0 -0
- /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
- /package/dist/{chunk-SYTPPMCM.js.map → chunk-252U6XYX.js.map} +0 -0
- /package/dist/{chunk-IXLHREAB.js.map → chunk-2MLWQMXH.js.map} +0 -0
- /package/dist/{chunk-ZL3Q4OWJ.js.map → chunk-34R75BVF.js.map} +0 -0
- /package/dist/{chunk-3SBDUMPW.js.map → chunk-364F6EMG.js.map} +0 -0
- /package/dist/{chunk-ZMV67JXV.js.map → chunk-4GPI3GVE.js.map} +0 -0
- /package/dist/{chunk-V6ULW25E.js.map → chunk-4MONIKIY.js.map} +0 -0
- /package/dist/{chunk-SIV2ENTD.js.map → chunk-5D6IMOW6.js.map} +0 -0
- /package/dist/{chunk-BRJNNP7R.js.map → chunk-5ELXQQY7.js.map} +0 -0
- /package/dist/{chunk-ZUT4FK5W.js.map → chunk-5Z574AVZ.js.map} +0 -0
- /package/dist/{chunk-NS2SFWKC.js.map → chunk-6FJCKMSJ.js.map} +0 -0
- /package/dist/{chunk-PDY7C73D.js.map → chunk-6OACG7JV.js.map} +0 -0
- /package/dist/{chunk-QOL6OTIK.js.map → chunk-6OR3AQHP.js.map} +0 -0
- /package/dist/{chunk-WQC54W25.js.map → chunk-6VQFPA3J.js.map} +0 -0
- /package/dist/{chunk-GM2UUMWJ.js.map → chunk-74C5FI4S.js.map} +0 -0
- /package/dist/{chunk-A7AI3WDN.js.map → chunk-AV5K5QH4.js.map} +0 -0
- /package/dist/{chunk-BMTR244T.js.map → chunk-BFDBLAVG.js.map} +0 -0
- /package/dist/{chunk-IGEZE6QB.js.map → chunk-BMYZTZ5D.js.map} +0 -0
- /package/dist/{chunk-7JFQI6DQ.js.map → chunk-BOUFVFV2.js.map} +0 -0
- /package/dist/{chunk-CGO3A7SR.js.map → chunk-BRBB62TS.js.map} +0 -0
- /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
- /package/dist/{chunk-GZBNEZIU.js.map → chunk-DBYAY6UW.js.map} +0 -0
- /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
- /package/dist/{chunk-ML64HXAN.js.map → chunk-FCVPZIHF.js.map} +0 -0
- /package/dist/{chunk-B5EZWPSM.js.map → chunk-FUWW7ED4.js.map} +0 -0
- /package/dist/{chunk-HXRZRYHQ.js.map → chunk-GN7YTM5I.js.map} +0 -0
- /package/dist/{chunk-XDOXR3U6.js.map → chunk-HC4RWJR3.js.map} +0 -0
- /package/dist/{chunk-HA5V67N4.js.map → chunk-HKPGEFIT.js.map} +0 -0
- /package/dist/{chunk-MB3HMRXM.js.map → chunk-I6PZTU3Q.js.map} +0 -0
- /package/dist/{chunk-KSJP3AWY.js.map → chunk-IGJL6JOD.js.map} +0 -0
- /package/dist/{chunk-KK6TS7ED.js.map → chunk-IV2CY3RE.js.map} +0 -0
- /package/dist/{chunk-ZIJ5FAI4.js.map → chunk-J3NN2Q4Z.js.map} +0 -0
- /package/dist/{chunk-2JJVJMN6.js.map → chunk-JBHCTDYF.js.map} +0 -0
- /package/dist/{chunk-D4SPMHEW.js.map → chunk-JLPNONPH.js.map} +0 -0
- /package/dist/{chunk-BFUYPEJB.js.map → chunk-JOAR32R6.js.map} +0 -0
- /package/dist/{chunk-FJZUIM5G.js.map → chunk-JU5MAF2L.js.map} +0 -0
- /package/dist/{chunk-AEGQ5PJ7.js.map → chunk-JX6USXZR.js.map} +0 -0
- /package/dist/{chunk-VEBYLZQQ.js.map → chunk-KN6CIN7I.js.map} +0 -0
- /package/dist/{chunk-UJX4I26O.js.map → chunk-KOXUUJE3.js.map} +0 -0
- /package/dist/{chunk-5UBH37SL.js.map → chunk-LI76ESJL.js.map} +0 -0
- /package/dist/{chunk-B2PGHXTP.js.map → chunk-LTS2XIU3.js.map} +0 -0
- /package/dist/{chunk-A7GQBJP5.js.map → chunk-LVFI5LG7.js.map} +0 -0
- /package/dist/{chunk-WZGSSLYI.js.map → chunk-MKGIW5W6.js.map} +0 -0
- /package/dist/{chunk-5LWVTSF7.js.map → chunk-MOQPEFLN.js.map} +0 -0
- /package/dist/{chunk-4ETSHAIZ.js.map → chunk-N25RPRSI.js.map} +0 -0
- /package/dist/{chunk-5W62ZVC6.js.map → chunk-N6TUO3O6.js.map} +0 -0
- /package/dist/{chunk-2IH2WNM6.js.map → chunk-NC7OAEYY.js.map} +0 -0
- /package/dist/{chunk-GXHRNONR.js.map → chunk-NQBD3R24.js.map} +0 -0
- /package/dist/{chunk-S52VKUUW.js.map → chunk-NRPLDEFR.js.map} +0 -0
- /package/dist/{chunk-VSBY5HAI.js.map → chunk-OH6AMNSA.js.map} +0 -0
- /package/dist/{chunk-NVPE6AJ3.js.map → chunk-OIKX22FU.js.map} +0 -0
- /package/dist/{chunk-T3XDF5RO.js.map → chunk-OJMAM4RO.js.map} +0 -0
- /package/dist/{chunk-NKIK4VFP.js.map → chunk-OMYCECTS.js.map} +0 -0
- /package/dist/{chunk-UHQ5UPAQ.js.map → chunk-OOWUOWXK.js.map} +0 -0
- /package/dist/{chunk-RBAG3VUT.js.map → chunk-P2FJ2KYJ.js.map} +0 -0
- /package/dist/{chunk-A5HBAR5Y.js.map → chunk-RQIETS2K.js.map} +0 -0
- /package/dist/{chunk-RWQXTR35.js.map → chunk-SFDZ66MD.js.map} +0 -0
- /package/dist/{chunk-YR6A6ZK7.js.map → chunk-SSUDD72S.js.map} +0 -0
- /package/dist/{chunk-5TS5QOZS.js.map → chunk-TWUMZCGA.js.map} +0 -0
- /package/dist/{chunk-Y4IQFWGD.js.map → chunk-TYR4D4GH.js.map} +0 -0
- /package/dist/{chunk-VE456O3R.js.map → chunk-UHKME3I7.js.map} +0 -0
- /package/dist/{chunk-IPLYGWQF.js.map → chunk-VDX2J7OX.js.map} +0 -0
- /package/dist/{chunk-542IROS3.js.map → chunk-VKWMW32Y.js.map} +0 -0
- /package/dist/{chunk-YF3JERFZ.js.map → chunk-VL4X7ZHC.js.map} +0 -0
- /package/dist/{chunk-ZHXSOMYH.js.map → chunk-VVX5PZFS.js.map} +0 -0
- /package/dist/{chunk-GLX4SU4W.js.map → chunk-W5VYWOU3.js.map} +0 -0
- /package/dist/{chunk-FRD5N3CS.js.map → chunk-WZ7M2QRP.js.map} +0 -0
- /package/dist/{chunk-OMU54WOM.js.map → chunk-X2PBZOYZ.js.map} +0 -0
- /package/dist/{chunk-HVWLZ7ZQ.js.map → chunk-XC4MDMQE.js.map} +0 -0
- /package/dist/{chunk-JLNJ7AGH.js.map → chunk-XIA4CN3T.js.map} +0 -0
- /package/dist/{chunk-QNUK4SUE.js.map → chunk-XQSAPG34.js.map} +0 -0
- /package/dist/{chunk-QXDZYPBL.js.map → chunk-Y37KZVUM.js.map} +0 -0
- /package/dist/{chunk-NNPJWVGN.js.map → chunk-YNNXM6FN.js.map} +0 -0
- /package/dist/{chunk-47AONXWB.js.map → chunk-YYI5DZAQ.js.map} +0 -0
- /package/dist/{chunk-HZZIH5SW.js.map → chunk-YZENVZWY.js.map} +0 -0
|
@@ -23,7 +23,12 @@ import type { IdentityInjectionMode, PluginConfig, QmdSearchResult } from "../ty
|
|
|
23
23
|
import { stateViewPacketActive } from "../recall-state-view-anchors.js";
|
|
24
24
|
import { resultStateViewKey, stateViewPacketKeys } from "../recall-state-view.js";
|
|
25
25
|
import { applyRecallStateViews } from "../recall-state-view-wire.js";
|
|
26
|
-
import { composeRecallContext } from "../recall-context-composition.js";
|
|
26
|
+
import { composeRecallContext, type RecallContextComposition } from "../recall-context-composition.js";
|
|
27
|
+
import {
|
|
28
|
+
memoriesToStandingEntries,
|
|
29
|
+
prefixStandingMemoryBlock,
|
|
30
|
+
renderStandingMemoryBlock,
|
|
31
|
+
} from "../standing-memory-recall.js";
|
|
27
32
|
import {
|
|
28
33
|
notifyContextComposition,
|
|
29
34
|
recallFailureComposition,
|
|
@@ -151,16 +156,53 @@ export class RecallEntryCoordinator {
|
|
|
151
156
|
return lockedMsg;
|
|
152
157
|
}
|
|
153
158
|
|
|
154
|
-
|
|
155
|
-
|
|
159
|
+
let standingText = "";
|
|
160
|
+
const standingBudget =
|
|
161
|
+
typeof options.budgetCharsOverride === "number" &&
|
|
162
|
+
Number.isInteger(options.budgetCharsOverride) &&
|
|
163
|
+
options.budgetCharsOverride >= 0
|
|
164
|
+
? options.budgetCharsOverride
|
|
165
|
+
: this.deps.config.recallBudgetChars;
|
|
166
|
+
if (this.deps.config.recallStandingBlock && !namespacesEnabled && standingBudget !== 0 && !options.asOf) {
|
|
167
|
+
try {
|
|
168
|
+
const memories = await this.deps.storage.readAllMemories({
|
|
169
|
+
abortSignal: abortController.signal,
|
|
170
|
+
});
|
|
171
|
+
standingText = renderStandingMemoryBlock(
|
|
172
|
+
this.deps.config,
|
|
173
|
+
memoriesToStandingEntries(memories, { requestingConnector: options.sourceConnector }),
|
|
174
|
+
);
|
|
175
|
+
} catch (err) {
|
|
176
|
+
log.warn(`standing memory block skipped: ${err}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const innerObserver = options.onContextComposition;
|
|
180
|
+
const innerBudget =
|
|
181
|
+
standingText.length > 0 && standingBudget && standingBudget > 0
|
|
182
|
+
? Math.max(0, standingBudget - standingText.length - 2)
|
|
183
|
+
: options.budgetCharsOverride;
|
|
184
|
+
const recallOptions = {
|
|
185
|
+
...options,
|
|
186
|
+
abortSignal: abortController.signal,
|
|
187
|
+
budgetCharsOverride: innerBudget,
|
|
188
|
+
onContextComposition:
|
|
189
|
+
standingText.length > 0
|
|
190
|
+
? (composition: RecallContextComposition) =>
|
|
191
|
+
innerObserver?.({
|
|
192
|
+
...composition,
|
|
193
|
+
context: prefixStandingMemoryBlock(
|
|
194
|
+
composition.context ?? "",
|
|
195
|
+
standingText,
|
|
196
|
+
standingBudget,
|
|
197
|
+
),
|
|
198
|
+
})
|
|
199
|
+
: innerObserver,
|
|
200
|
+
};
|
|
156
201
|
try {
|
|
157
|
-
const recallPromise = this.deps.recallInternal(prompt, sessionKey,
|
|
158
|
-
...options,
|
|
159
|
-
abortSignal: abortController.signal,
|
|
160
|
-
}, caps, graphCaps);
|
|
202
|
+
const recallPromise = this.deps.recallInternal(prompt, sessionKey, recallOptions, caps, graphCaps);
|
|
161
203
|
const RECALL_TIMEOUT_MS = this.deps.config.recallOuterTimeoutMs ?? 75_000;
|
|
162
204
|
if (RECALL_TIMEOUT_MS <= 0) {
|
|
163
|
-
return await recallPromise;
|
|
205
|
+
return prefixStandingMemoryBlock(await recallPromise, standingText, standingBudget);
|
|
164
206
|
}
|
|
165
207
|
|
|
166
208
|
let timeoutHandle: NodeJS.Timeout | null = null;
|
|
@@ -196,18 +238,17 @@ export class RecallEntryCoordinator {
|
|
|
196
238
|
}
|
|
197
239
|
}
|
|
198
240
|
|
|
199
|
-
return recallResult;
|
|
241
|
+
return prefixStandingMemoryBlock(recallResult, standingText, standingBudget);
|
|
200
242
|
} catch (err) {
|
|
201
243
|
this.deps.logRecallFailure(err);
|
|
202
|
-
// endTrace() is safe here: if no trace is active (disabled or already
|
|
203
|
-
// closed by recallInternal's try/finally), it returns null immediately.
|
|
204
244
|
this.deps.profiler.endTrace();
|
|
205
|
-
// Caller-cancelled recalls stay quiet: the failure was the caller's
|
|
206
|
-
// abort, not a recall degradation (issue #2972 contract).
|
|
207
245
|
const missing = options.abortSignal?.aborted
|
|
208
246
|
? null
|
|
209
247
|
: recallFailureComposition(err);
|
|
210
248
|
if (!missing) return "";
|
|
249
|
+
if (standingText.length > 0) {
|
|
250
|
+
missing.context = prefixStandingMemoryBlock(missing.context ?? "", standingText, standingBudget);
|
|
251
|
+
}
|
|
211
252
|
notifyContextComposition(options.onContextComposition, missing, (observerErr) => {
|
|
212
253
|
log.warn("recall: context composition observer failed open", observerErr);
|
|
213
254
|
});
|
|
@@ -22,6 +22,7 @@ import { abortError } from "../abort-error.js";
|
|
|
22
22
|
import { type CapabilitySet, type GraphConstructionCapabilitySet, resolveCapabilities, resolveConversationContextCapabilities, resolveGraphConstructionCapabilities, resolveIndexingCapabilities, resolveMemoryLifecycleCapabilities, resolveNamespaceCapabilities, resolvePipelineProcessingCapabilities, resolveQmdCapabilities, resolveRecallEnhancementCapabilities } from "../capabilities.js";
|
|
23
23
|
import { EmbeddingFallback } from "../embedding-fallback.js";
|
|
24
24
|
import { StorageManager } from "../index.js";
|
|
25
|
+
import { applyDirectorySidecarDrillDown, isDirectorySidecarsEnabledForDir } from "../directory-sidecars.js";
|
|
25
26
|
import { inferIntentFromText, intentCompatibilityScore } from "../intent.js";
|
|
26
27
|
import { log } from "../logger.js";
|
|
27
28
|
import { NamespaceStorageRouter } from "../namespaces/storage.js";
|
|
@@ -342,9 +343,6 @@ export class RecallSearchPipelineCoordinator {
|
|
|
342
343
|
const debugSearchOptions = backendHonorsQmdSearchSignals
|
|
343
344
|
? resolvedSearchOptions
|
|
344
345
|
: undefined;
|
|
345
|
-
// Cross-lingual recall (#2197): lexical tiers cannot match a query whose
|
|
346
|
-
// dominant script differs from the corpus's, whatever the page fill.
|
|
347
|
-
// Supplement with the embedding-fallback tier ONCE, before widening.
|
|
348
346
|
const crossScriptVectorHits = options.crossScript
|
|
349
347
|
? await this.searchEmbeddingFallback(prompt, fetchLimit)
|
|
350
348
|
: [];
|
|
@@ -517,7 +515,7 @@ export class RecallSearchPipelineCoordinator {
|
|
|
517
515
|
if (filteredResults.length >= qmdFetchLimit) {
|
|
518
516
|
const capped = filteredResults.slice(0, qmdFetchLimit);
|
|
519
517
|
await emitDebugSnapshot(capped, fetchLimit);
|
|
520
|
-
return capped;
|
|
518
|
+
return await applyDirectorySidecarDrillDown(this.deps.storage?.dir ?? "", prompt, capped, { enabled: Boolean(this.deps.storage?.dir) && isDirectorySidecarsEnabledForDir(this.deps.storage.dir), namespaces: options.namespacesEnabled ? options.recallNamespaces ?? [] : undefined });
|
|
521
519
|
}
|
|
522
520
|
if (filteredResults.length > bestFiltered.length) {
|
|
523
521
|
bestFiltered = filteredResults;
|
|
@@ -526,7 +524,7 @@ export class RecallSearchPipelineCoordinator {
|
|
|
526
524
|
// hits). Keep widening until the backend itself underfills the page.
|
|
527
525
|
if (primaryResults.length < fetchLimit) {
|
|
528
526
|
await emitDebugSnapshot(filteredResults, fetchLimit);
|
|
529
|
-
return filteredResults;
|
|
527
|
+
return await applyDirectorySidecarDrillDown(this.deps.storage?.dir ?? "", prompt, filteredResults, { enabled: Boolean(this.deps.storage?.dir) && isDirectorySidecarsEnabledForDir(this.deps.storage.dir), namespaces: options.namespacesEnabled ? options.recallNamespaces ?? [] : undefined });
|
|
530
528
|
}
|
|
531
529
|
if (fetchLimit >= maxFetchLimit) {
|
|
532
530
|
break;
|
|
@@ -538,7 +536,7 @@ export class RecallSearchPipelineCoordinator {
|
|
|
538
536
|
|
|
539
537
|
const capped = bestFiltered.slice(0, qmdFetchLimit);
|
|
540
538
|
await emitDebugSnapshot(capped, fetchLimit);
|
|
541
|
-
return capped;
|
|
539
|
+
return await applyDirectorySidecarDrillDown(this.deps.storage?.dir ?? "", prompt, capped, { enabled: Boolean(this.deps.storage?.dir) && isDirectorySidecarsEnabledForDir(this.deps.storage.dir), namespaces: options.namespacesEnabled ? options.recallNamespaces ?? [] : undefined });
|
|
542
540
|
}
|
|
543
541
|
|
|
544
542
|
async searchEmbeddingFallback(
|
package/src/orchestrator.ts
CHANGED
|
@@ -143,6 +143,7 @@ import { WorkspaceOpsCoordinator } from "./orchestration/workspace-ops.js";
|
|
|
143
143
|
import { NamespaceReadFanoutCoordinator } from "./orchestration/namespace-read-fanout.js";
|
|
144
144
|
import { selfDeps } from "./orchestration/self-deps.js";
|
|
145
145
|
import { RecallEntryCoordinator } from "./orchestration/recall-entry.js";
|
|
146
|
+
import { setDirectorySidecarsEnabledForDir } from "./directory-sidecars.js";
|
|
146
147
|
import { SessionContextCoordinator, type SessionFlushOptions } from "./orchestration/session-context.js";
|
|
147
148
|
import { drainRecallWrites, trackRecallWrite } from "./orchestration/recall-background-writes.js";
|
|
148
149
|
import { XrayCaptureQueue } from "./orchestration/xray-capture-queue.js";
|
|
@@ -1971,6 +1972,13 @@ export class Orchestrator {
|
|
|
1971
1972
|
async initialize(): Promise<void> {
|
|
1972
1973
|
this.extractionQueueCoordinator.resumeAccepting();
|
|
1973
1974
|
await this.orchestratorInitCoordinator.initialize();
|
|
1975
|
+
{
|
|
1976
|
+
const memoryDir = this.storage?.dir;
|
|
1977
|
+
if (typeof memoryDir === "string" && memoryDir.length > 0) {
|
|
1978
|
+
const { directorySidecarsEnabled } = this.config;
|
|
1979
|
+
setDirectorySidecarsEnabledForDir(memoryDir, directorySidecarsEnabled);
|
|
1980
|
+
}
|
|
1981
|
+
}
|
|
1974
1982
|
if (isDependencyPropagationEnabled(this.config)) {
|
|
1975
1983
|
this._dependencyPropagationRecovery = this.dependencyPropagationDelivery
|
|
1976
1984
|
.recover()
|
|
@@ -230,6 +230,7 @@ async function writeFact(memoryDir: string): Promise<void> {
|
|
|
230
230
|
`created: ${now}`,
|
|
231
231
|
`updated: ${now}`,
|
|
232
232
|
"source: extraction",
|
|
233
|
+
"origin: user",
|
|
233
234
|
"confidence: 0.8",
|
|
234
235
|
"confidenceTier: high",
|
|
235
236
|
"tags: []",
|
|
@@ -242,7 +243,7 @@ async function writeFact(memoryDir: string): Promise<void> {
|
|
|
242
243
|
await writeFile(path.join(factsDir, "standing-fact.md"), `${fact.join("\n")}\n`, "utf-8");
|
|
243
244
|
}
|
|
244
245
|
|
|
245
|
-
test("
|
|
246
|
+
test("recall injects the standing memory block when the flag is on", async () => {
|
|
246
247
|
const off = await makeOrchestrator();
|
|
247
248
|
const on = await makeOrchestrator({ recallStandingBlock: true });
|
|
248
249
|
try {
|
|
@@ -250,8 +251,8 @@ test("zero-diff: recall output is byte-identical with the flag off vs on (pre-wi
|
|
|
250
251
|
await writeFact(on.memoryDir);
|
|
251
252
|
const outOff = await off.orchestrator.recall("how do deploys go out", "sess-standing-off");
|
|
252
253
|
const outOn = await on.orchestrator.recall("how do deploys go out", "sess-standing-on");
|
|
253
|
-
assert.
|
|
254
|
-
assert.ok(
|
|
254
|
+
assert.ok(!outOff.includes("## Standing Memory (Remnic)"), "flag off keeps recall unchanged");
|
|
255
|
+
assert.ok(outOn.includes("## Standing Memory (Remnic)"), "flag on injects the standing block");
|
|
255
256
|
assert.ok(outOn.includes("blue pipeline"), "sanity: the fact is recalled");
|
|
256
257
|
} finally {
|
|
257
258
|
await off.orchestrator.destroy();
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
|
|
4
|
+
import { parseConfig } from "./config.js";
|
|
5
|
+
import {
|
|
6
|
+
memoriesToStandingEntries,
|
|
7
|
+
prefixStandingMemoryBlock,
|
|
8
|
+
renderStandingMemoryBlock,
|
|
9
|
+
} from "./standing-memory-recall.js";
|
|
10
|
+
|
|
11
|
+
test("#3089 standing block is omitted when recallStandingBlock is off", () => {
|
|
12
|
+
const off = parseConfig({});
|
|
13
|
+
const on = parseConfig({ recallStandingBlock: true });
|
|
14
|
+
const entries = memoriesToStandingEntries([
|
|
15
|
+
{
|
|
16
|
+
id: "fact-1",
|
|
17
|
+
content: "The blue pipeline is the only deploy path.",
|
|
18
|
+
frontmatter: { id: "fact-1", pinned: true, origin: "user" },
|
|
19
|
+
},
|
|
20
|
+
]);
|
|
21
|
+
const recall = "per-turn recall";
|
|
22
|
+
assert.equal(renderStandingMemoryBlock(off, entries), "");
|
|
23
|
+
assert.equal(prefixStandingMemoryBlock(recall, renderStandingMemoryBlock(off, entries)), recall);
|
|
24
|
+
const standing = renderStandingMemoryBlock(on, entries);
|
|
25
|
+
assert.ok(standing.includes("## Standing Memory (Remnic)"));
|
|
26
|
+
assert.ok(standing.includes("blue pipeline"));
|
|
27
|
+
const prefixed = prefixStandingMemoryBlock(recall, standing);
|
|
28
|
+
assert.ok(prefixed.startsWith(standing));
|
|
29
|
+
assert.ok(prefixed.includes("per-turn recall"));
|
|
30
|
+
});
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_UNTRUSTED_ORIGINS,
|
|
3
|
+
isUntrustedOrigin,
|
|
4
|
+
parseOriginClass,
|
|
5
|
+
} from "./security/origin-authority.js";
|
|
6
|
+
import type { PluginConfig } from "./types.js";
|
|
7
|
+
import {
|
|
8
|
+
buildStandingMemoryBlock,
|
|
9
|
+
lintStandingBlockVolatility,
|
|
10
|
+
type StandingMemoryEntry,
|
|
11
|
+
} from "./standing-memory-block.js";
|
|
12
|
+
|
|
13
|
+
export interface StandingMemorySource {
|
|
14
|
+
id?: string;
|
|
15
|
+
path?: string;
|
|
16
|
+
content: string;
|
|
17
|
+
frontmatter: {
|
|
18
|
+
id?: unknown;
|
|
19
|
+
pinned?: unknown;
|
|
20
|
+
updated?: unknown;
|
|
21
|
+
origin?: unknown;
|
|
22
|
+
status?: unknown;
|
|
23
|
+
toolScoped?: unknown;
|
|
24
|
+
sourceConnector?: unknown;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function memoriesToStandingEntries(
|
|
29
|
+
memories: readonly StandingMemorySource[],
|
|
30
|
+
opts: { requestingConnector?: string } = {},
|
|
31
|
+
): StandingMemoryEntry[] {
|
|
32
|
+
const entries: StandingMemoryEntry[] = [];
|
|
33
|
+
for (const memory of memories) {
|
|
34
|
+
const id = String(memory.frontmatter.id ?? memory.id ?? memory.path ?? "");
|
|
35
|
+
if (!id) continue;
|
|
36
|
+
if (isUntrustedOrigin(parseOriginClass(memory.frontmatter.origin), DEFAULT_UNTRUSTED_ORIGINS)) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (typeof memory.frontmatter.status === "string" && memory.frontmatter.status !== "active") {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const requestingConnector = opts.requestingConnector?.trim();
|
|
43
|
+
const memoryConnector =
|
|
44
|
+
typeof memory.frontmatter.sourceConnector === "string" ? memory.frontmatter.sourceConnector.trim() : "";
|
|
45
|
+
if (memory.frontmatter.toolScoped === true && memoryConnector && requestingConnector && memoryConnector !== requestingConnector) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const description =
|
|
49
|
+
memory.content
|
|
50
|
+
.split("\n")
|
|
51
|
+
.map((line) => line.trim())
|
|
52
|
+
.find((line) => line.length > 0 && !line.startsWith("#") && !line.startsWith("---")) ?? "";
|
|
53
|
+
if (description.length < 8) continue;
|
|
54
|
+
if (lintStandingBlockVolatility(description).length > 0) continue;
|
|
55
|
+
const pinned = memory.frontmatter.pinned === true;
|
|
56
|
+
const lastChangedAt =
|
|
57
|
+
typeof memory.frontmatter.updated === "string" ? memory.frontmatter.updated : undefined;
|
|
58
|
+
entries.push({ id, description: description.slice(0, 200), pinned, lastChangedAt });
|
|
59
|
+
}
|
|
60
|
+
return entries;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function renderStandingMemoryBlock(config: PluginConfig, entries: StandingMemoryEntry[]): string {
|
|
64
|
+
if (!config.recallStandingBlock || entries.length === 0) return "";
|
|
65
|
+
try {
|
|
66
|
+
return buildStandingMemoryBlock({
|
|
67
|
+
entries,
|
|
68
|
+
nowMs: Date.now(),
|
|
69
|
+
maxChars: config.standingBlockMaxChars,
|
|
70
|
+
freshDays: config.standingBlockFreshDays,
|
|
71
|
+
}).text;
|
|
72
|
+
} catch {
|
|
73
|
+
return "";
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function prefixStandingMemoryBlock(
|
|
78
|
+
recallResult: string,
|
|
79
|
+
standingText: string,
|
|
80
|
+
budgetChars?: number,
|
|
81
|
+
): string {
|
|
82
|
+
if (standingText.length === 0) return recallResult;
|
|
83
|
+
if (budgetChars === 0) return recallResult;
|
|
84
|
+
const combined = `${standingText}\n\n${recallResult}`;
|
|
85
|
+
if (!budgetChars || combined.length <= budgetChars) return combined;
|
|
86
|
+
return combined.slice(0, budgetChars);
|
|
87
|
+
}
|
package/src/storage.ts
CHANGED
|
@@ -248,8 +248,7 @@ import {
|
|
|
248
248
|
sealedWriteToLegacyArgs,
|
|
249
249
|
type SealedMemoryEnvelope,
|
|
250
250
|
} from "./write-envelope.js";
|
|
251
|
-
|
|
252
|
-
// skip-with-warning strategy (Finding 1 — Uhol). See ensureFactHashIndexAuthoritative.
|
|
251
|
+
import { isDirectorySidecarsEnabledForDir, refreshDirectorySidecarsAfterWrite } from "./directory-sidecars.js";
|
|
253
252
|
type SharedVersionKind = "memory-status" | "artifact-write" | "cold-write" | "memory-corpus" | "entity-mutation";
|
|
254
253
|
|
|
255
254
|
type OfflineSyncDigestCacheEntry = {
|
|
@@ -3973,25 +3972,7 @@ export class StorageManager extends TombstoneBlockedCaptureIndexHost {
|
|
|
3973
3972
|
return { id, tombstoneBlocked, ...(fm.blockedBy ? { blockedBy: fm.blockedBy } : {}), memory: { path: filePath, frontmatter: fm, content: sanitized.text } };
|
|
3974
3973
|
}
|
|
3975
3974
|
|
|
3976
|
-
/**
|
|
3977
|
-
* Sealed-envelope write entry point (issue #1989 PR2).
|
|
3978
|
-
*
|
|
3979
|
-
* Byte-identity with `writeMemory` is BY DELEGATION: the envelope-owned
|
|
3980
|
-
* fields are unpacked into the exact `writeMemory` arguments a legacy
|
|
3981
|
-
* caller would have passed, so the persisted output is produced by the
|
|
3982
|
-
* same code path. The composer's `persistedBody` was assembled with the
|
|
3983
|
-
* same `assemblePersistedBody` helper `writeMemory` uses, so fingerprints
|
|
3984
|
-
* derived from the envelope match the stored body (§13).
|
|
3985
|
-
*
|
|
3986
|
-
* Differences from a raw `writeMemory` call are REJECTIONS, not silent
|
|
3987
|
-
* changes: the composer enforces tag/attribute caps, strict validAt, and
|
|
3988
|
-
* plain-object attributes that the legacy path never validated.
|
|
3989
|
-
*
|
|
3990
|
-
* `envelope.ttl` maps to `expiresAt` verbatim; converting duration
|
|
3991
|
-
* expressions (`"90d"`) to instants remains the access layer's job (PR3).
|
|
3992
|
-
* `envelope.sourceReason` is access-layer metadata with no frontmatter
|
|
3993
|
-
* field and is deliberately not persisted here.
|
|
3994
|
-
*/
|
|
3975
|
+
/** Sealed-envelope write entry point (issue #1989 PR2). */
|
|
3995
3976
|
async writeSealedMemory(envelope: SealedMemoryEnvelope, extras: SealedWriteExtras = {}) {
|
|
3996
3977
|
if (!isSealedMemoryEnvelope(envelope)) {
|
|
3997
3978
|
throw new Error(
|
|
@@ -3999,7 +3980,17 @@ export class StorageManager extends TombstoneBlockedCaptureIndexHost {
|
|
|
3999
3980
|
);
|
|
4000
3981
|
}
|
|
4001
3982
|
const { category, content, options } = sealedWriteToLegacyArgs(envelope, extras);
|
|
4002
|
-
|
|
3983
|
+
const result = await this.writeMemory(category, content, options as WriteMemoryOptions);
|
|
3984
|
+
try {
|
|
3985
|
+
await refreshDirectorySidecarsAfterWrite(
|
|
3986
|
+
this.dir,
|
|
3987
|
+
result.memory?.path ?? "",
|
|
3988
|
+
isDirectorySidecarsEnabledForDir(this.dir),
|
|
3989
|
+
);
|
|
3990
|
+
} catch (err) {
|
|
3991
|
+
log.warn(`directory sidecar refresh failed after write: ${err}`);
|
|
3992
|
+
}
|
|
3993
|
+
return result;
|
|
4003
3994
|
}
|
|
4004
3995
|
|
|
4005
3996
|
async hasFactContentHash(content: string): Promise<boolean> {
|
package/src/types.ts
CHANGED
|
@@ -996,12 +996,12 @@ export interface PluginConfig
|
|
|
996
996
|
recallDirectAnswerEnabled: boolean;
|
|
997
997
|
/** Recall state views (issue #1952): label current/historical/transition on change-intent queries. Default false. */
|
|
998
998
|
recallStateViews: boolean;
|
|
999
|
-
/** Standing memory block (issue #2971)
|
|
999
|
+
/** Standing memory block (issue #2971). Default false. */
|
|
1000
1000
|
recallStandingBlock: boolean;
|
|
1001
|
-
/** Days a memory stays in the standing block's full-text fresh band. Default 14. */
|
|
1002
1001
|
standingBlockFreshDays: number;
|
|
1003
|
-
/** Hard character budget for the standing memory block. Default 2048. */
|
|
1004
1002
|
standingBlockMaxChars: number;
|
|
1003
|
+
/** Directory sidecars (issue #3088). Default false. */
|
|
1004
|
+
directorySidecarsEnabled: boolean;
|
|
1005
1005
|
/**
|
|
1006
1006
|
* Disclosure auto-escalation policy (issue #677 PR 4/4). `"auto"`
|
|
1007
1007
|
* escalates chunk → section when top-K confidence falls below
|