@remnic/core 9.69.102 → 9.69.104
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 +53 -52
- package/dist/access-authorization-probe.js +54 -53
- package/dist/access-boundary.js +53 -52
- package/dist/access-cli.js +153 -150
- package/dist/access-cli.js.map +1 -1
- package/dist/access-extraction-force-flush.js +53 -52
- package/dist/access-http-briefing.js +54 -53
- package/dist/access-http-query.js +55 -54
- package/dist/access-http.js +77 -76
- package/dist/access-identity-continuity-surface.js +53 -52
- package/dist/access-lcm-surface.js +53 -52
- package/dist/access-mcp.js +66 -65
- package/dist/access-namespace-preflight.js +53 -52
- package/dist/access-observe-write-category.js +9 -9
- package/dist/access-observe-write-surface.js +53 -52
- package/dist/access-offline-manifest.js +6 -6
- package/dist/access-operations-batch.js +57 -56
- package/dist/access-operations.js +64 -63
- package/dist/access-recall-concurrency.js +53 -52
- package/dist/access-recall-response.js +53 -52
- package/dist/access-recall-surface.js +53 -52
- package/dist/access-schema.js +8 -8
- package/dist/access-service.js +53 -52
- package/dist/access-surface-catalog.js +55 -54
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/active-recall.js +21 -20
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/briefing.js +14 -13
- package/dist/buffer.js +5 -5
- package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
- package/dist/{capsule-merge-ZCXUPLNJ.js → capsule-merge-42GJGDUC.js} +4 -3
- package/dist/{capsule-merge-ZCXUPLNJ.js.map → capsule-merge-42GJGDUC.js.map} +1 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.js +17 -16
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.js +3 -3
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-47LTKAGL.js → chunk-2COXDQ6C.js} +21 -6
- package/dist/chunk-2COXDQ6C.js.map +1 -0
- package/dist/{chunk-IOYY6ROU.js → chunk-2MMBJE53.js} +7 -7
- package/dist/{chunk-QSXEQPC4.js → chunk-2OFDC3AK.js} +2 -2
- package/dist/{chunk-4MP2Q2EI.js → chunk-2TCNEJ36.js} +4 -4
- package/dist/{chunk-5FAGCOZD.js → chunk-2U3R3DDH.js} +9 -9
- package/dist/{chunk-SCXURCVT.js → chunk-2UPTRDGM.js} +3 -3
- package/dist/{chunk-XVZA6VXC.js → chunk-3SL52JKD.js} +4 -4
- package/dist/{chunk-SBOCJ47I.js → chunk-5R4YPRAR.js} +19 -6
- package/dist/chunk-5R4YPRAR.js.map +1 -0
- package/dist/{chunk-ANPRNTPT.js → chunk-63LFM77Z.js} +15 -2
- package/dist/chunk-63LFM77Z.js.map +1 -0
- package/dist/{chunk-DINOVGA5.js → chunk-6WRHNA4I.js} +48 -48
- package/dist/chunk-6WRHNA4I.js.map +1 -0
- package/dist/{chunk-DSPWVQZ6.js → chunk-73R4HOOK.js} +3 -3
- package/dist/chunk-7CT3AI52.js +84 -0
- package/dist/chunk-7CT3AI52.js.map +1 -0
- package/dist/{chunk-PHBH74Q6.js → chunk-7NBUE5VY.js} +2 -2
- package/dist/{chunk-S533KGX6.js → chunk-7X7A7KVN.js} +2 -2
- package/dist/{chunk-XEATJBNB.js → chunk-7YQR6XHY.js} +71 -71
- package/dist/{chunk-F5MINS3R.js → chunk-A6WNTVA7.js} +3 -3
- package/dist/{chunk-F5MINS3R.js.map → chunk-A6WNTVA7.js.map} +1 -1
- package/dist/{chunk-533RHNHB.js → chunk-ATFFWIKL.js} +2 -2
- package/dist/{chunk-QCYUIZK2.js → chunk-AU43D3IT.js} +7 -7
- package/dist/{chunk-JZ66PN72.js → chunk-AWSP3WNM.js} +2 -2
- package/dist/{chunk-IY47KPML.js → chunk-B3OFQP5Y.js} +6 -6
- package/dist/{chunk-4DXNOVNW.js → chunk-B454SHPU.js} +6 -6
- package/dist/{chunk-3LMOJXZR.js → chunk-BKVCTTEN.js} +2 -2
- package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
- package/dist/{chunk-CZN53OT5.js → chunk-CGBE3N7T.js} +2 -2
- package/dist/{chunk-HWLIMQE2.js → chunk-CHDGJJV6.js} +2 -2
- package/dist/{chunk-UYPQOASU.js → chunk-CNBGAFDY.js} +2 -2
- package/dist/{chunk-JTC3PBNH.js → chunk-DB6XFMOF.js} +3 -3
- package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
- package/dist/{chunk-UFIZRMQZ.js → chunk-E4XLFYHV.js} +61 -29
- package/dist/chunk-E4XLFYHV.js.map +1 -0
- package/dist/{chunk-4OXXDL3X.js → chunk-EWWK65CI.js} +2 -2
- package/dist/{chunk-DFPG47ET.js → chunk-EZ3F4YIN.js} +11 -11
- package/dist/{chunk-V3I4NLZP.js → chunk-FYX2LXIX.js} +2 -2
- package/dist/{chunk-PNVOKGAX.js → chunk-G5I5ZT6O.js} +2 -2
- package/dist/{chunk-7Z2UKRNJ.js → chunk-GQ6ZF4LD.js} +2 -2
- package/dist/{chunk-PEZAHDDU.js → chunk-GZ2KV2RO.js} +5 -5
- package/dist/chunk-H6Z3RNW3.js +330 -0
- package/dist/chunk-H6Z3RNW3.js.map +1 -0
- package/dist/{chunk-645WOU5I.js → chunk-H7BZBSP6.js} +4 -4
- package/dist/{chunk-AXHU56C3.js → chunk-HWGFTTPS.js} +2 -2
- package/dist/{chunk-2SGLMP2E.js → chunk-IDSZNHIP.js} +2 -2
- package/dist/{chunk-LO4UKPKX.js → chunk-IFCKHPY4.js} +2 -2
- package/dist/{chunk-ZHXSOMYH.js → chunk-IOMLGJHG.js} +4 -4
- package/dist/{chunk-YRULQW5J.js → chunk-ISX7GVZE.js} +4 -4
- package/dist/{chunk-5PHZSD75.js → chunk-J3ZJBX7I.js} +2 -2
- package/dist/{chunk-X5TAWDRO.js → chunk-JC7QQ2DJ.js} +2 -2
- package/dist/{chunk-RFQT7IZO.js → chunk-JRDL3FGM.js} +3 -3
- package/dist/{chunk-OGZC2WUX.js → chunk-JWFTPRYD.js} +2 -2
- package/dist/{chunk-7OA4JWP5.js → chunk-KFHEZJQZ.js} +2 -2
- package/dist/{chunk-P3WRFSYF.js → chunk-KMN2JE4D.js} +2 -2
- package/dist/{chunk-GNBZB43J.js → chunk-KV7LFOPF.js} +2 -2
- package/dist/{chunk-L6YCGS7I.js → chunk-KYUVFCT2.js} +2 -2
- package/dist/{chunk-5BVL2XUD.js → chunk-LHDSCWDK.js} +17 -17
- package/dist/{chunk-SF7CWSR6.js → chunk-LXJZUNLX.js} +2 -2
- package/dist/{chunk-XCB6QDL6.js → chunk-M5GVCJSJ.js} +8 -2
- package/dist/chunk-M5GVCJSJ.js.map +1 -0
- package/dist/{chunk-DGS34QSY.js → chunk-MFZACYZ6.js} +2 -2
- package/dist/{chunk-PYYQCHJC.js → chunk-MZOQ26LH.js} +2 -2
- package/dist/{chunk-R2TVWQLR.js → chunk-NT2Q6AHC.js} +2 -2
- package/dist/{chunk-ABGM2BN4.js → chunk-O43AAJFQ.js} +2 -2
- package/dist/{chunk-G3BW6SDE.js → chunk-OFGTRDWX.js} +3 -3
- package/dist/{chunk-6Z263Z3E.js → chunk-OWV6LKNZ.js} +2 -2
- package/dist/{chunk-HIHN4XHL.js → chunk-PQ7EB5AD.js} +3 -3
- package/dist/{chunk-VVYLVE6R.js → chunk-PQKZLBCJ.js} +1 -1
- package/dist/{chunk-OFFW73OZ.js → chunk-PRNR47DI.js} +2 -2
- package/dist/{chunk-UL7KDVLC.js → chunk-PZ2QQULY.js} +11 -11
- package/dist/{chunk-55NZVUNI.js → chunk-QAIVTLL2.js} +3 -3
- package/dist/{chunk-M7T2NKET.js → chunk-QKCGOECM.js} +2 -2
- package/dist/{chunk-ARY6O3JN.js → chunk-QUNCLKHM.js} +2 -2
- package/dist/{chunk-Z3O53WZR.js → chunk-QWUJWBZ5.js} +2 -2
- package/dist/{chunk-RZXFXKWY.js → chunk-QX3K3INR.js} +2 -2
- package/dist/{chunk-HFOY2SBG.js → chunk-RYN4AIRM.js} +7 -5
- package/dist/chunk-RYN4AIRM.js.map +1 -0
- package/dist/{chunk-4LNCLZNK.js → chunk-S2GR3T7W.js} +2 -2
- package/dist/{chunk-VPOAMPDD.js → chunk-SFDBLCZV.js} +59 -59
- package/dist/{chunk-2IWBHZ3H.js → chunk-SIGDETMB.js} +2 -2
- package/dist/chunk-SP4DB6SX.js +19 -0
- package/dist/chunk-SP4DB6SX.js.map +1 -0
- package/dist/{chunk-DBWNTLLI.js → chunk-STQC2FYQ.js} +6 -6
- package/dist/{chunk-S5R77WHV.js → chunk-SWXPR5SE.js} +2 -2
- package/dist/{chunk-3DNTFZAT.js → chunk-T32YYUT2.js} +2 -2
- package/dist/{chunk-W5JQSVPZ.js → chunk-T6RQNV7E.js} +2 -2
- package/dist/{chunk-O23QMYN4.js → chunk-TRN56SPQ.js} +2 -2
- package/dist/{chunk-NM3BT2OH.js → chunk-TXTRHF3B.js} +2 -2
- package/dist/{chunk-7AUIGOH4.js → chunk-VDVHIRCK.js} +2 -2
- package/dist/{chunk-KQAFEZQX.js → chunk-VDX2J7OX.js} +2 -2
- package/dist/{chunk-ZGYLPCWN.js → chunk-VO2BNAA2.js} +3 -3
- package/dist/{chunk-WVEECBCG.js → chunk-VV2MVHCJ.js} +2 -2
- package/dist/{chunk-HVDEKJJR.js → chunk-VYIBRCVW.js} +70 -61
- package/dist/chunk-VYIBRCVW.js.map +1 -0
- package/dist/{chunk-B3O3IRZN.js → chunk-VZBW6CDG.js} +1 -1
- package/dist/{chunk-JPKK466T.js → chunk-W5XWHTDO.js} +2 -2
- package/dist/{chunk-CYG3K2T2.js → chunk-WR66CTVU.js} +6 -6
- package/dist/{chunk-JNAOTN7B.js → chunk-XLWMNDQR.js} +4 -4
- package/dist/chunk-XLWMNDQR.js.map +1 -0
- package/dist/{chunk-RP7RSENW.js → chunk-XQWKB6PY.js} +2 -2
- package/dist/{chunk-64S6X4IU.js → chunk-XTN54NML.js} +4 -4
- package/dist/{chunk-UCPGOUDZ.js → chunk-Y57GJDG5.js} +108 -3
- package/dist/chunk-Y57GJDG5.js.map +1 -0
- package/dist/{chunk-KYLYXGKD.js → chunk-YI6XIFQV.js} +2 -2
- package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
- package/dist/{chunk-Y7427SL7.js → chunk-Z6EZCN6Z.js} +10 -10
- package/dist/{chunk-5K2ALMSZ.js → chunk-ZRUC7FD3.js} +2 -2
- package/dist/cli.js +103 -102
- package/dist/coding/export-okf-codegraph.js +13 -12
- package/dist/coding/export-okf-codegraph.js.map +1 -1
- package/dist/coding/pre-action-gate.js +2 -2
- package/dist/compounding/engine.js +14 -13
- package/dist/config.js +21 -20
- package/dist/connectors/codex-materialize-runner.js +14 -13
- package/dist/connectors/index.js +14 -13
- package/dist/consolidation-provenance-check.js +4 -3
- package/dist/consolidation-undo.js +3 -2
- package/dist/consolidation-undo.js.map +1 -1
- package/dist/contradiction/index.js +3 -2
- package/dist/convergence-refresh.js +16 -15
- package/dist/corpus-watermark.js +16 -15
- package/dist/dashboard-runtime.js +2 -2
- package/dist/deep-recall-http-glue.js +9 -9
- package/dist/deep-recall.js +2 -2
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/embedding-fallback.d.ts.map +1 -1
- package/dist/embedding-fallback.js +2 -2
- package/dist/embedding-index-storage.d.ts +28 -1
- package/dist/embedding-index-storage.d.ts.map +1 -1
- package/dist/embedding-index-storage.js +1 -1
- package/dist/entity-mention-carry.d.ts +16 -0
- package/dist/entity-mention-carry.d.ts.map +1 -0
- package/dist/entity-mention-carry.js +8 -0
- package/dist/entity-mention-epoch.d.ts +22 -0
- package/dist/entity-mention-epoch.d.ts.map +1 -0
- package/dist/entity-mention-epoch.js +8 -0
- package/dist/entity-mention-index-cache.d.ts +28 -0
- package/dist/entity-mention-index-cache.d.ts.map +1 -0
- package/dist/entity-mention-index-cache.js +29 -0
- package/dist/entity-mention-index-cache.js.map +1 -0
- package/dist/entity-retrieval.d.ts.map +1 -1
- package/dist/entity-retrieval.js +18 -15
- package/dist/event-order-recall.js +2 -2
- package/dist/external-wiki-access.js +54 -53
- package/dist/extraction-span-materialize.js +2 -2
- package/dist/extraction.js +21 -20
- package/dist/{graph-edge-decay-MKIRZ762.js → graph-edge-decay-PVKDKLQK.js} +6 -6
- package/dist/graph-edge-decay-PVKDKLQK.js.map +1 -0
- package/dist/graph-jsonl.js +4 -4
- package/dist/graph-snapshot.js +4 -4
- package/dist/graph.js +5 -5
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/index.js +187 -184
- package/dist/lcm/engine.js +4 -4
- package/dist/lcm/index.js +13 -13
- package/dist/location/index.js +16 -15
- package/dist/maintenance/memory-governance.js +14 -13
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -13
- package/dist/maintenance/rebuild-memory-projection.js +15 -14
- package/dist/memory-browse-operations.js +54 -53
- package/dist/memory-browse.js +5 -5
- package/dist/memory-corpus-version.d.ts +8 -3
- package/dist/memory-corpus-version.d.ts.map +1 -1
- package/dist/memory-corpus-version.js +2 -1
- package/dist/namespaces/migrate.js +15 -14
- package/dist/namespaces/search.js +7 -7
- package/dist/namespaces/storage.js +14 -13
- package/dist/offline-sync-changeset-generations.js +4 -4
- package/dist/offline-sync-embedding-generation.js +3 -3
- package/dist/offline-sync-exclude-globs.d.ts +8 -0
- package/dist/offline-sync-exclude-globs.d.ts.map +1 -1
- package/dist/offline-sync-exclude-globs.js +3 -1
- package/dist/offline-sync-snapshot-stream.js +6 -6
- package/dist/offline-sync.d.ts.map +1 -1
- package/dist/offline-sync.js +9 -9
- package/dist/operator-doctor-corpus.js +17 -16
- package/dist/operator-toolkit.js +34 -33
- package/dist/orchestration/maintenance.js +22 -21
- package/dist/orchestrator.js +153 -150
- package/dist/page-versioning.js +3 -2
- package/dist/preferences/preference-drift.d.ts.map +1 -1
- package/dist/procedural/library-maintenance.d.ts.map +1 -1
- package/dist/qmd.js +4 -4
- package/dist/recall-navigation-operations.js +54 -53
- package/dist/recall-navigation.js +53 -52
- package/dist/recall-state-view-admission.js +5 -5
- package/dist/recall-why-service.js +5 -5
- package/dist/{resolution-BROE3TRO.js → resolution-RSG4HZTL.js} +4 -3
- package/dist/resolution-RSG4HZTL.js.map +1 -0
- package/dist/resume-bundles.js +22 -21
- package/dist/search/factory.js +6 -6
- package/dist/search/index.js +12 -12
- package/dist/semantic-consolidation.js +15 -14
- package/dist/semantic-rule-promotion.js +14 -13
- package/dist/semantic-rule-verifier.js +14 -13
- package/dist/source-agent-qualifier.js +17 -16
- package/dist/standup/build.js +14 -13
- package/dist/storage/entity-mention-frontmatter-hold.d.ts +14 -0
- package/dist/storage/entity-mention-frontmatter-hold.d.ts.map +1 -0
- package/dist/storage.d.ts +13 -9
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +13 -12
- package/dist/support-passport/index.js +56 -55
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +5 -4
- package/dist/transfer/export-okf.js +14 -13
- package/dist/verified-recall.js +14 -13
- package/dist/who-knows-cli.js +15 -14
- package/dist/who-knows.js +14 -13
- package/package.json +2 -2
- package/src/embedding-fallback-cross-process.test.ts +533 -0
- package/src/embedding-fallback.ts +19 -7
- package/src/embedding-index-storage.test.ts +482 -2
- package/src/embedding-index-storage.ts +131 -2
- package/src/entity-mention-carry.ts +31 -0
- package/src/entity-mention-epoch.ts +120 -0
- package/src/entity-mention-index-cache.ts +443 -0
- package/src/entity-retrieval.ts +72 -71
- package/src/maintenance/rebuild-memory-projection.ts +1 -1
- package/src/memory-corpus-version.ts +13 -3
- package/src/offline-sync-exclude-globs.ts +23 -0
- package/src/offline-sync.test.ts +325 -0
- package/src/offline-sync.ts +17 -1
- package/src/preferences/preference-drift.ts +5 -3
- package/src/procedural/library-maintenance.ts +4 -3
- package/src/semantic-rule-promotion.ts +1 -1
- package/src/storage/entity-mention-frontmatter-hold.ts +44 -0
- package/src/storage.ts +40 -38
- package/dist/chunk-47LTKAGL.js.map +0 -1
- package/dist/chunk-ANPRNTPT.js.map +0 -1
- package/dist/chunk-DINOVGA5.js.map +0 -1
- package/dist/chunk-HFOY2SBG.js.map +0 -1
- package/dist/chunk-HVDEKJJR.js.map +0 -1
- package/dist/chunk-JNAOTN7B.js.map +0 -1
- package/dist/chunk-SBOCJ47I.js.map +0 -1
- package/dist/chunk-UCPGOUDZ.js.map +0 -1
- package/dist/chunk-UFIZRMQZ.js.map +0 -1
- package/dist/chunk-XCB6QDL6.js.map +0 -1
- /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
- /package/dist/{chunk-IOYY6ROU.js.map → chunk-2MMBJE53.js.map} +0 -0
- /package/dist/{chunk-QSXEQPC4.js.map → chunk-2OFDC3AK.js.map} +0 -0
- /package/dist/{chunk-4MP2Q2EI.js.map → chunk-2TCNEJ36.js.map} +0 -0
- /package/dist/{chunk-5FAGCOZD.js.map → chunk-2U3R3DDH.js.map} +0 -0
- /package/dist/{chunk-SCXURCVT.js.map → chunk-2UPTRDGM.js.map} +0 -0
- /package/dist/{chunk-XVZA6VXC.js.map → chunk-3SL52JKD.js.map} +0 -0
- /package/dist/{chunk-DSPWVQZ6.js.map → chunk-73R4HOOK.js.map} +0 -0
- /package/dist/{chunk-PHBH74Q6.js.map → chunk-7NBUE5VY.js.map} +0 -0
- /package/dist/{chunk-S533KGX6.js.map → chunk-7X7A7KVN.js.map} +0 -0
- /package/dist/{chunk-XEATJBNB.js.map → chunk-7YQR6XHY.js.map} +0 -0
- /package/dist/{chunk-533RHNHB.js.map → chunk-ATFFWIKL.js.map} +0 -0
- /package/dist/{chunk-QCYUIZK2.js.map → chunk-AU43D3IT.js.map} +0 -0
- /package/dist/{chunk-JZ66PN72.js.map → chunk-AWSP3WNM.js.map} +0 -0
- /package/dist/{chunk-IY47KPML.js.map → chunk-B3OFQP5Y.js.map} +0 -0
- /package/dist/{chunk-4DXNOVNW.js.map → chunk-B454SHPU.js.map} +0 -0
- /package/dist/{chunk-3LMOJXZR.js.map → chunk-BKVCTTEN.js.map} +0 -0
- /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
- /package/dist/{chunk-CZN53OT5.js.map → chunk-CGBE3N7T.js.map} +0 -0
- /package/dist/{chunk-HWLIMQE2.js.map → chunk-CHDGJJV6.js.map} +0 -0
- /package/dist/{chunk-UYPQOASU.js.map → chunk-CNBGAFDY.js.map} +0 -0
- /package/dist/{chunk-JTC3PBNH.js.map → chunk-DB6XFMOF.js.map} +0 -0
- /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
- /package/dist/{chunk-4OXXDL3X.js.map → chunk-EWWK65CI.js.map} +0 -0
- /package/dist/{chunk-DFPG47ET.js.map → chunk-EZ3F4YIN.js.map} +0 -0
- /package/dist/{chunk-V3I4NLZP.js.map → chunk-FYX2LXIX.js.map} +0 -0
- /package/dist/{chunk-PNVOKGAX.js.map → chunk-G5I5ZT6O.js.map} +0 -0
- /package/dist/{chunk-7Z2UKRNJ.js.map → chunk-GQ6ZF4LD.js.map} +0 -0
- /package/dist/{chunk-PEZAHDDU.js.map → chunk-GZ2KV2RO.js.map} +0 -0
- /package/dist/{chunk-645WOU5I.js.map → chunk-H7BZBSP6.js.map} +0 -0
- /package/dist/{chunk-AXHU56C3.js.map → chunk-HWGFTTPS.js.map} +0 -0
- /package/dist/{chunk-2SGLMP2E.js.map → chunk-IDSZNHIP.js.map} +0 -0
- /package/dist/{chunk-LO4UKPKX.js.map → chunk-IFCKHPY4.js.map} +0 -0
- /package/dist/{chunk-ZHXSOMYH.js.map → chunk-IOMLGJHG.js.map} +0 -0
- /package/dist/{chunk-YRULQW5J.js.map → chunk-ISX7GVZE.js.map} +0 -0
- /package/dist/{chunk-5PHZSD75.js.map → chunk-J3ZJBX7I.js.map} +0 -0
- /package/dist/{chunk-X5TAWDRO.js.map → chunk-JC7QQ2DJ.js.map} +0 -0
- /package/dist/{chunk-RFQT7IZO.js.map → chunk-JRDL3FGM.js.map} +0 -0
- /package/dist/{chunk-OGZC2WUX.js.map → chunk-JWFTPRYD.js.map} +0 -0
- /package/dist/{chunk-7OA4JWP5.js.map → chunk-KFHEZJQZ.js.map} +0 -0
- /package/dist/{chunk-P3WRFSYF.js.map → chunk-KMN2JE4D.js.map} +0 -0
- /package/dist/{chunk-GNBZB43J.js.map → chunk-KV7LFOPF.js.map} +0 -0
- /package/dist/{chunk-L6YCGS7I.js.map → chunk-KYUVFCT2.js.map} +0 -0
- /package/dist/{chunk-5BVL2XUD.js.map → chunk-LHDSCWDK.js.map} +0 -0
- /package/dist/{chunk-SF7CWSR6.js.map → chunk-LXJZUNLX.js.map} +0 -0
- /package/dist/{chunk-DGS34QSY.js.map → chunk-MFZACYZ6.js.map} +0 -0
- /package/dist/{chunk-PYYQCHJC.js.map → chunk-MZOQ26LH.js.map} +0 -0
- /package/dist/{chunk-R2TVWQLR.js.map → chunk-NT2Q6AHC.js.map} +0 -0
- /package/dist/{chunk-ABGM2BN4.js.map → chunk-O43AAJFQ.js.map} +0 -0
- /package/dist/{chunk-G3BW6SDE.js.map → chunk-OFGTRDWX.js.map} +0 -0
- /package/dist/{chunk-6Z263Z3E.js.map → chunk-OWV6LKNZ.js.map} +0 -0
- /package/dist/{chunk-HIHN4XHL.js.map → chunk-PQ7EB5AD.js.map} +0 -0
- /package/dist/{chunk-VVYLVE6R.js.map → chunk-PQKZLBCJ.js.map} +0 -0
- /package/dist/{chunk-OFFW73OZ.js.map → chunk-PRNR47DI.js.map} +0 -0
- /package/dist/{chunk-UL7KDVLC.js.map → chunk-PZ2QQULY.js.map} +0 -0
- /package/dist/{chunk-55NZVUNI.js.map → chunk-QAIVTLL2.js.map} +0 -0
- /package/dist/{chunk-M7T2NKET.js.map → chunk-QKCGOECM.js.map} +0 -0
- /package/dist/{chunk-ARY6O3JN.js.map → chunk-QUNCLKHM.js.map} +0 -0
- /package/dist/{chunk-Z3O53WZR.js.map → chunk-QWUJWBZ5.js.map} +0 -0
- /package/dist/{chunk-RZXFXKWY.js.map → chunk-QX3K3INR.js.map} +0 -0
- /package/dist/{chunk-4LNCLZNK.js.map → chunk-S2GR3T7W.js.map} +0 -0
- /package/dist/{chunk-VPOAMPDD.js.map → chunk-SFDBLCZV.js.map} +0 -0
- /package/dist/{chunk-2IWBHZ3H.js.map → chunk-SIGDETMB.js.map} +0 -0
- /package/dist/{chunk-DBWNTLLI.js.map → chunk-STQC2FYQ.js.map} +0 -0
- /package/dist/{chunk-S5R77WHV.js.map → chunk-SWXPR5SE.js.map} +0 -0
- /package/dist/{chunk-3DNTFZAT.js.map → chunk-T32YYUT2.js.map} +0 -0
- /package/dist/{chunk-W5JQSVPZ.js.map → chunk-T6RQNV7E.js.map} +0 -0
- /package/dist/{chunk-O23QMYN4.js.map → chunk-TRN56SPQ.js.map} +0 -0
- /package/dist/{chunk-NM3BT2OH.js.map → chunk-TXTRHF3B.js.map} +0 -0
- /package/dist/{chunk-7AUIGOH4.js.map → chunk-VDVHIRCK.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-VDX2J7OX.js.map} +0 -0
- /package/dist/{chunk-ZGYLPCWN.js.map → chunk-VO2BNAA2.js.map} +0 -0
- /package/dist/{chunk-WVEECBCG.js.map → chunk-VV2MVHCJ.js.map} +0 -0
- /package/dist/{chunk-B3O3IRZN.js.map → chunk-VZBW6CDG.js.map} +0 -0
- /package/dist/{chunk-JPKK466T.js.map → chunk-W5XWHTDO.js.map} +0 -0
- /package/dist/{chunk-CYG3K2T2.js.map → chunk-WR66CTVU.js.map} +0 -0
- /package/dist/{chunk-RP7RSENW.js.map → chunk-XQWKB6PY.js.map} +0 -0
- /package/dist/{chunk-64S6X4IU.js.map → chunk-XTN54NML.js.map} +0 -0
- /package/dist/{chunk-KYLYXGKD.js.map → chunk-YI6XIFQV.js.map} +0 -0
- /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
- /package/dist/{chunk-Y7427SL7.js.map → chunk-Z6EZCN6Z.js.map} +0 -0
- /package/dist/{chunk-5K2ALMSZ.js.map → chunk-ZRUC7FD3.js.map} +0 -0
- /package/dist/{graph-edge-decay-MKIRZ762.js.map → entity-mention-carry.js.map} +0 -0
- /package/dist/{resolution-BROE3TRO.js.map → entity-mention-epoch.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS,
|
|
3
3
|
SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6WRHNA4I.js";
|
|
5
5
|
import {
|
|
6
6
|
SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH
|
|
7
7
|
} from "./chunk-PWPIERBM.js";
|
|
@@ -343,4 +343,4 @@ export {
|
|
|
343
343
|
parseSupportPassportModelJob,
|
|
344
344
|
SupportPassportModelBridge
|
|
345
345
|
};
|
|
346
|
-
//# sourceMappingURL=chunk-
|
|
346
|
+
//# sourceMappingURL=chunk-TXTRHF3B.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SupportPassportError,
|
|
3
3
|
getOperation
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6WRHNA4I.js";
|
|
5
5
|
import {
|
|
6
6
|
abortError,
|
|
7
7
|
isAbortError
|
|
@@ -499,4 +499,4 @@ export {
|
|
|
499
499
|
buildSupportPassportPublicRequestHandler,
|
|
500
500
|
composeSupportPassportExternalRequestHandlers
|
|
501
501
|
};
|
|
502
|
-
//# sourceMappingURL=chunk-
|
|
502
|
+
//# sourceMappingURL=chunk-VDVHIRCK.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-WEHSQBFR.js";
|
|
7
7
|
import {
|
|
8
8
|
encryptCapsuleFile
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-DQEMWVMT.js";
|
|
10
10
|
import {
|
|
11
11
|
CAPSULE_SCHEMA_VERSION,
|
|
12
12
|
EXPORT_FORMAT
|
|
@@ -261,4 +261,4 @@ export {
|
|
|
261
261
|
exportCapsule,
|
|
262
262
|
isValidCapsuleSince
|
|
263
263
|
};
|
|
264
|
-
//# sourceMappingURL=chunk-
|
|
264
|
+
//# sourceMappingURL=chunk-VDX2J7OX.js.map
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
} from "./chunk-TBBDFYXW.js";
|
|
4
4
|
import {
|
|
5
5
|
StorageManager
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-E4XLFYHV.js";
|
|
7
7
|
import {
|
|
8
8
|
bumpMemoryCorpusVersionForDir
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-M5GVCJSJ.js";
|
|
10
10
|
import {
|
|
11
11
|
requestEntityCanonicalIdReconcile
|
|
12
12
|
} from "./chunk-R7QY5ZVB.js";
|
|
@@ -765,4 +765,4 @@ export {
|
|
|
765
765
|
listMemoryGovernanceRuns,
|
|
766
766
|
readMemoryGovernanceRunArtifact
|
|
767
767
|
};
|
|
768
|
-
//# sourceMappingURL=chunk-
|
|
768
|
+
//# sourceMappingURL=chunk-VO2BNAA2.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
computeCorpusWatermarks,
|
|
6
6
|
resolveCorpusNamespaceRoots
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-TRN56SPQ.js";
|
|
8
8
|
|
|
9
9
|
// src/operator-doctor-corpus.ts
|
|
10
10
|
var DIGEST_PREFIX_LENGTH = 12;
|
|
@@ -78,4 +78,4 @@ export {
|
|
|
78
78
|
corpusWatermarksFromCheck,
|
|
79
79
|
summarizeCorpusAndReplica
|
|
80
80
|
};
|
|
81
|
-
//# sourceMappingURL=chunk-
|
|
81
|
+
//# sourceMappingURL=chunk-VV2MVHCJ.js.map
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
entityMentionCacheGeneration,
|
|
3
|
+
entityMentionIdentity,
|
|
4
|
+
entityMentionPersistedIndexReadable,
|
|
5
|
+
entityMentionScopeKey,
|
|
6
|
+
resolveEntityMentionIndex,
|
|
7
|
+
writePersistedEntityMentionIndex
|
|
8
|
+
} from "./chunk-H6Z3RNW3.js";
|
|
8
9
|
import {
|
|
9
10
|
buildOriginStructuredSections,
|
|
10
11
|
sanitizeOriginatedFacts
|
|
@@ -15,6 +16,16 @@ import {
|
|
|
15
16
|
yieldEntityRecallScan,
|
|
16
17
|
yieldEntityRecallScanEvery
|
|
17
18
|
} from "./chunk-5AUY5Z5E.js";
|
|
19
|
+
import {
|
|
20
|
+
containsPhrase
|
|
21
|
+
} from "./chunk-SVH57F5Z.js";
|
|
22
|
+
import {
|
|
23
|
+
detectEntityQueryMode,
|
|
24
|
+
isStructuralEntityFollowUpQuery
|
|
25
|
+
} from "./chunk-MKYRCCSN.js";
|
|
26
|
+
import {
|
|
27
|
+
applyCarriedMemorySnippets
|
|
28
|
+
} from "./chunk-SP4DB6SX.js";
|
|
18
29
|
import {
|
|
19
30
|
collectNativeKnowledgeChunks
|
|
20
31
|
} from "./chunk-2DQ2XREU.js";
|
|
@@ -23,7 +34,7 @@ import {
|
|
|
23
34
|
} from "./chunk-NVKO5YKP.js";
|
|
24
35
|
import {
|
|
25
36
|
compareEntityTimestamps
|
|
26
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-E4XLFYHV.js";
|
|
27
38
|
import {
|
|
28
39
|
normalizeEntityText,
|
|
29
40
|
resolveRequestedEntitySectionKeys
|
|
@@ -43,7 +54,7 @@ import {
|
|
|
43
54
|
|
|
44
55
|
// src/entity-retrieval.ts
|
|
45
56
|
import { createHash } from "crypto";
|
|
46
|
-
import {
|
|
57
|
+
import { readFile } from "fs/promises";
|
|
47
58
|
import path from "path";
|
|
48
59
|
var ENTITY_INDEX_VERSION = 3;
|
|
49
60
|
var RECENT_TRANSCRIPT_LOOKBACK_HOURS = 24;
|
|
@@ -276,13 +287,17 @@ async function readCurrentPersistedEntityIndex(storage, config, recallNamespaces
|
|
|
276
287
|
return null;
|
|
277
288
|
}
|
|
278
289
|
const index = await readEntityIndexState(storage);
|
|
279
|
-
if (!index || index.entityStatusVersion !== storage.getMemoryStatusVersion()) {
|
|
290
|
+
if (!entityMentionPersistedIndexReadable(storage.dir) || !index || index.entityStatusVersion !== storage.getMemoryStatusVersion()) {
|
|
280
291
|
return null;
|
|
281
292
|
}
|
|
282
293
|
return index;
|
|
283
294
|
}
|
|
284
|
-
|
|
285
|
-
|
|
295
|
+
function carriedMemorySnippets(index) {
|
|
296
|
+
return new Map(index.entities.map((entry) => [entry.canonicalId, {
|
|
297
|
+
memorySnippets: entry.memorySnippets.slice(),
|
|
298
|
+
memorySnippetOrigins: entry.memorySnippetOrigins?.slice()
|
|
299
|
+
}]));
|
|
300
|
+
}
|
|
286
301
|
function nativeEntityIndexRevision(chunks) {
|
|
287
302
|
const projection = chunks.map((chunk) => [
|
|
288
303
|
chunk.chunkId,
|
|
@@ -295,28 +310,8 @@ function nativeEntityIndexRevision(chunks) {
|
|
|
295
310
|
]);
|
|
296
311
|
return createHash("sha256").update(JSON.stringify(projection)).digest("hex");
|
|
297
312
|
}
|
|
298
|
-
function
|
|
299
|
-
|
|
300
|
-
const storageKey = storages.map((scopedStorage) => {
|
|
301
|
-
const aliases = Object.entries(scopedStorage.entityAliases).sort(([left], [right]) => left.localeCompare(right));
|
|
302
|
-
return `${path.resolve(scopedStorage.dir)}@${scopedStorage.getMemoryStatusVersion()}:${scopedStorage.getMemoryCorpusVersion()}:${scopedStorage.getEntityMutationVersion()}:${scopedStorage.hotCacheKeyId()}:${JSON.stringify(aliases)}`;
|
|
303
|
-
}).join("");
|
|
304
|
-
return `${namespaceKey}${storageKey}${nativeRevision}`;
|
|
305
|
-
}
|
|
306
|
-
function rememberNamespaceEntityIndex(key, index) {
|
|
307
|
-
if (namespaceEntityIndexCache.size >= MAX_NAMESPACE_ENTITY_INDEX_CACHE_ENTRIES) {
|
|
308
|
-
const oldestKey = namespaceEntityIndexCache.keys().next().value;
|
|
309
|
-
if (typeof oldestKey === "string") namespaceEntityIndexCache.delete(oldestKey);
|
|
310
|
-
}
|
|
311
|
-
namespaceEntityIndexCache.set(key, index);
|
|
312
|
-
}
|
|
313
|
-
async function writeEntityIndexState(storage, index) {
|
|
314
|
-
const statePath = entityIndexStatePath(storage);
|
|
315
|
-
await mkdir(path.dirname(statePath), { recursive: true });
|
|
316
|
-
const nextContent = JSON.stringify(index, null, 2) + "\n";
|
|
317
|
-
const currentContent = await readFile(statePath, "utf-8").catch(() => "");
|
|
318
|
-
if (currentContent === nextContent) return;
|
|
319
|
-
await writeFile(statePath, nextContent, "utf-8");
|
|
313
|
+
async function writeEntityIndexState(storage, index, persistGeneration) {
|
|
314
|
+
await writePersistedEntityMentionIndex(storage.dir, persistGeneration, JSON.stringify(index, null, 2) + "\n");
|
|
320
315
|
}
|
|
321
316
|
function nativePseudoCanonicalId(chunk) {
|
|
322
317
|
return `native:${createHash("sha256").update(chunk.sourcePath).digest("hex").slice(0, 12)}`;
|
|
@@ -373,7 +368,7 @@ function hasFreshNativeExplicitMention(index, nativeChunks, query) {
|
|
|
373
368
|
};
|
|
374
369
|
return resolveLanguageIndependentExplicitCandidates(freshNativeIndex, query).length > 0;
|
|
375
370
|
}
|
|
376
|
-
async function buildEntityMentionIndex(storage, config, recallNamespaces, namespaceStorage, nativeChunksOverride, resolvedStorages, abortSignal) {
|
|
371
|
+
async function buildEntityMentionIndex(storage, config, recallNamespaces, namespaceStorage, nativeChunksOverride, resolvedStorages, abortSignal, carrySnippets) {
|
|
377
372
|
checkEntityRecallAbort(abortSignal);
|
|
378
373
|
const storages = resolvedStorages ?? await resolveEntityIndexStorages(
|
|
379
374
|
storage,
|
|
@@ -382,11 +377,12 @@ async function buildEntityMentionIndex(storage, config, recallNamespaces, namesp
|
|
|
382
377
|
namespaceStorage
|
|
383
378
|
);
|
|
384
379
|
const shouldPersistIndex = storages.length === 1 && path.resolve(storages[0].dir) === path.resolve(storage.dir);
|
|
380
|
+
const persistGeneration = entityMentionCacheGeneration(storage.dir);
|
|
385
381
|
const entityStatusVersionBefore = shouldPersistIndex ? storage.getMemoryStatusVersion() : void 0;
|
|
386
382
|
const [previousIndex, entityFileSets, memorySets, nativeChunks] = await Promise.all([
|
|
387
383
|
shouldPersistIndex ? readEntityIndexState(storage) : Promise.resolve(null),
|
|
388
384
|
Promise.all(storages.map((scopedStorage) => scopedStorage.readAllEntityFiles({ abortSignal }))),
|
|
389
|
-
Promise.all(storages.map((scopedStorage) => scopedStorage.readAllMemories({ abortSignal }))),
|
|
385
|
+
carrySnippets ? Promise.resolve([]) : Promise.all(storages.map((scopedStorage) => scopedStorage.readAllMemories({ abortSignal }))),
|
|
390
386
|
nativeChunksOverride ? Promise.resolve(nativeChunksOverride) : readNativeChunks(config, recallNamespaces)
|
|
391
387
|
]);
|
|
392
388
|
checkEntityRecallAbort(abortSignal);
|
|
@@ -434,15 +430,18 @@ async function buildEntityMentionIndex(storage, config, recallNamespaces, namesp
|
|
|
434
430
|
});
|
|
435
431
|
}
|
|
436
432
|
scanned = 0;
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
433
|
+
const pendingSnippetReconcile = carrySnippets ? applyCarriedMemorySnippets(entities.values(), carrySnippets) : false;
|
|
434
|
+
if (!carrySnippets) {
|
|
435
|
+
for (const memory of memories) {
|
|
436
|
+
scanned += 1;
|
|
437
|
+
await yieldEntityRecallScanEvery(scanned, abortSignal);
|
|
438
|
+
const entry = typeof memory.frontmatter.entityRef === "string" ? entities.get(memory.frontmatter.entityRef) : void 0;
|
|
439
|
+
if (!entry) continue;
|
|
440
|
+
const snippet = await readMemorySnippet(memory);
|
|
441
|
+
if (entry.memorySnippets.includes(snippet)) continue;
|
|
442
|
+
entry.memorySnippets.push(snippet);
|
|
443
|
+
entry.memorySnippetOrigins = [...entry.memorySnippetOrigins ?? [], memory.frontmatter.origin];
|
|
444
|
+
}
|
|
446
445
|
}
|
|
447
446
|
await yieldEntityRecallScan(abortSignal);
|
|
448
447
|
const aliasIndex = buildAliasIndex([...entities.values()]);
|
|
@@ -471,7 +470,7 @@ async function buildEntityMentionIndex(storage, config, recallNamespaces, namesp
|
|
|
471
470
|
await yieldEntityRecallScan(abortSignal);
|
|
472
471
|
const nextEntities = JSON.stringify(sortedEntities);
|
|
473
472
|
const entityStatusVersionAfter = shouldPersistIndex ? storage.getMemoryStatusVersion() : void 0;
|
|
474
|
-
const canPersistIndex = shouldPersistIndex && entityStatusVersionBefore === entityStatusVersionAfter;
|
|
473
|
+
const canPersistIndex = shouldPersistIndex && entityStatusVersionBefore === entityStatusVersionAfter && persistGeneration === entityMentionCacheGeneration(storage.dir);
|
|
475
474
|
const index = {
|
|
476
475
|
version: ENTITY_INDEX_VERSION,
|
|
477
476
|
updatedAt: previousIndex && previousEntities === nextEntities ? previousIndex.updatedAt : (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -480,8 +479,9 @@ async function buildEntityMentionIndex(storage, config, recallNamespaces, namesp
|
|
|
480
479
|
};
|
|
481
480
|
if (canPersistIndex) {
|
|
482
481
|
checkEntityRecallAbort(abortSignal);
|
|
483
|
-
await writeEntityIndexState(storage, index);
|
|
482
|
+
await writeEntityIndexState(storage, index, persistGeneration);
|
|
484
483
|
}
|
|
484
|
+
if (pendingSnippetReconcile) index.pendingSnippetReconcile = true;
|
|
485
485
|
return index;
|
|
486
486
|
}
|
|
487
487
|
function resolveExplicitCandidates(index, query) {
|
|
@@ -834,25 +834,34 @@ async function buildEntityRecallSection(options) {
|
|
|
834
834
|
options.recallNamespaces,
|
|
835
835
|
options.namespaceStorage
|
|
836
836
|
) : void 0;
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
837
|
+
if (!nativeChunks) {
|
|
838
|
+
nativeChunks = await readNativeChunks(options.config, options.recallNamespaces);
|
|
839
|
+
}
|
|
840
|
+
const indexStorages = resolvedStorages ?? [options.storage];
|
|
841
|
+
const index = await resolveEntityMentionIndex({
|
|
842
|
+
scopeKey: entityMentionScopeKey(options.recallNamespaces, indexStorages, nativeEntityIndexRevision(nativeChunks)),
|
|
843
|
+
currentIdentity: () => entityMentionIdentity(indexStorages),
|
|
844
|
+
abortSignal: options.abortSignal,
|
|
845
|
+
buildFull: (signal) => buildEntityMentionIndex(
|
|
846
846
|
options.storage,
|
|
847
847
|
options.config,
|
|
848
848
|
options.recallNamespaces,
|
|
849
849
|
options.namespaceStorage,
|
|
850
850
|
nativeChunks,
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
)
|
|
854
|
-
|
|
855
|
-
|
|
851
|
+
indexStorages,
|
|
852
|
+
signal
|
|
853
|
+
),
|
|
854
|
+
rebuildEntities: (previous, signal) => buildEntityMentionIndex(
|
|
855
|
+
options.storage,
|
|
856
|
+
options.config,
|
|
857
|
+
options.recallNamespaces,
|
|
858
|
+
options.namespaceStorage,
|
|
859
|
+
nativeChunks,
|
|
860
|
+
indexStorages,
|
|
861
|
+
signal,
|
|
862
|
+
carriedMemorySnippets(previous)
|
|
863
|
+
)
|
|
864
|
+
});
|
|
856
865
|
await yieldEntityRecallScan(options.abortSignal);
|
|
857
866
|
const explicitCandidates = resolveExplicitCandidates(index, options.query);
|
|
858
867
|
await yieldEntityRecallScan(options.abortSignal);
|
|
@@ -918,4 +927,4 @@ export {
|
|
|
918
927
|
entityIndexVersion,
|
|
919
928
|
entityRecentTranscriptLookbackHours
|
|
920
929
|
};
|
|
921
|
-
//# sourceMappingURL=chunk-
|
|
930
|
+
//# sourceMappingURL=chunk-VYIBRCVW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/entity-retrieval.ts"],"sourcesContent":["import { resolveNamespaceCapabilities } from \"./capabilities.js\";\nimport { renderAuthorityBoundContent } from \"./recall-context-composition.js\";\nimport { createHash } from \"node:crypto\";\nimport { sanitizeMemoryContent } from \"./sanitize.js\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { collectNativeKnowledgeChunks, type NativeKnowledgeChunk } from \"./native-knowledge.js\";\nimport { compareEntityTimestamps, normalizeEntityName, type StorageManager } from \"./storage.js\";\nimport { normalizeEntityText, resolveRequestedEntitySectionKeys } from \"./entity-schema.js\";\nimport type { EntityStructuredSection, MemoryFile, PluginConfig, TranscriptEntry } from \"./types.js\";\nimport { truncateGraphemeSafe } from \"./whitespace.js\";\nimport { containsPhrase } from \"./entity-retrieval-boundaries.js\";\nimport {\n detectEntityQueryMode,\n isStructuralEntityFollowUpQuery,\n type EntityQueryMode,\n} from \"./entity-retrieval-i18n.js\";\nimport { buildOriginStructuredSections, sanitizeOriginatedFacts, type EntityOriginStructuredSection } from \"./entity-origin-fields.js\";\nimport {\n checkEntityRecallAbort,\n entityRecallSectionAbsent,\n yieldEntityRecallScan,\n yieldEntityRecallScanEvery,\n} from \"./entity-recall-cancellation.js\";\nimport { applyCarriedMemorySnippets } from \"./entity-mention-carry.js\";\nimport {\n entityMentionCacheGeneration,\n entityMentionIdentity,\n entityMentionPersistedIndexReadable,\n entityMentionScopeKey,\n resolveEntityMentionIndex,\n writePersistedEntityMentionIndex,\n} from \"./entity-mention-index-cache.js\";\nconst ENTITY_INDEX_VERSION = 3;\nconst RECENT_TRANSCRIPT_LOOKBACK_HOURS = 24;\nconst INSTRUCTION_LIKE_RE = /\\b(always|never|must|should|remember to|do not|don't|process|workflow|template|checklist|instruction)\\b/i;\nconst METADATA_WRAPPER_RE = /^(source|context|metadata|notes?):/i;\nconst BELIEF_LEDGER_SECTION_KEY = \"belief_ledger\";\nconst BELIEF_LEDGER_FACT_RE = /^claim=([^;]+);\\s*status=([^;]+);\\s*updatedAt=([^;]+);\\s*(.+)$/;\ntype EntityMentionIndexEntry = {\n canonicalId: string;\n name: string;\n type: string;\n summary?: string;\n aliases: string[];\n facts: string[];\n timelineFacts: string[];\n timelineFactOrigins?: Array<string | undefined>;\n structuredSections: EntityOriginStructuredSection[];\n timeline: Array<{\n timestamp: string;\n text: string;\n source?: string;\n sessionKey?: string;\n principal?: string;\n origin?: string;\n }>;\n relationships: Array<{ target: string; label: string }>;\n activity: Array<{ date: string; note: string }>;\n factCount: number;\n memorySnippets: string[]; memorySnippetOrigins?: Array<string | undefined>;\n nativeChunks: Array<{\n chunkId: string;\n title: string;\n sourceKind: NativeKnowledgeChunk[\"sourceKind\"];\n sourcePath: string;\n snippet: string;\n derivedDate?: string;\n }>;\n};\ntype EntityMentionIndex = {\n version: number;\n updatedAt: string;\n entityStatusVersion?: number;\n entities: EntityMentionIndexEntry[];\n /** In-memory only. A new canonical id had no snippets to carry. */\n pendingSnippetReconcile?: boolean;\n};\ntype EntityCandidate = {\n entry: EntityMentionIndexEntry;\n alias: string;\n score: number;\n source: \"query\" | \"recent_turn\";\n};\ntype EntityHintSnippet = {\n text: string;\n score: number;\n kind: \"summary\" | \"fact\" | \"section\" | \"relationship\" | \"activity\" | \"memory\" | \"native\"; origin?: string;\n};\nexport interface BuildEntityRecallSectionOptions {\n config: PluginConfig;\n storage: StorageManager;\n namespaceStorage?: (namespace: string) => Promise<StorageManager>;\n query: string;\n recallNamespaces?: string[];\n recentTurns: number;\n maxHints: number;\n maxSupportingFacts: number;\n maxRelatedEntities: number;\n maxChars: number;\n transcriptEntries: TranscriptEntry[];\n originAuthorityEnabled?: boolean; untrustedOrigins?: readonly string[];\n /**\n * Cancels the build at its next checkpoint (issue #2291). Entity recall reads\n * every entity and memory file across the recalled namespaces, which is\n * minutes of work on a large or slow store; without this the scan kept running\n * after the recall that asked for it had been abandoned.\n */\n abortSignal?: AbortSignal;\n}\nfunction tokenize(value: string): string[] {\n return normalizeEntityText(value).split(/\\s+/).filter((token) => token.length >= 2);\n}\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values.map((value) => value.trim()).filter((value) => value.length > 0))];\n}\nfunction compactLine(value: string, maxLength: number = 220): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (normalized.length <= maxLength) return normalized;\n return `${truncateGraphemeSafe(normalized, maxLength - 1).trimEnd()}…`;\n}\nfunction dedupeHintSnippetsByText(snippets: EntityHintSnippet[]): EntityHintSnippet[] {\n const deduped = new Map<string, EntityHintSnippet>();\n for (const snippet of snippets) {\n const key = normalizeEntityText(snippet.text);\n const existing = deduped.get(key);\n if (!existing) {\n deduped.set(key, snippet);\n continue;\n }\n if (existing.origin !== snippet.origin) {\n existing.origin = undefined;\n }\n }\n return [...deduped.values()];\n}\nfunction isBeliefLedgerSection(section: Pick<EntityStructuredSection, \"key\">): boolean {\n return normalizeEntityText(section.key).replace(/\\s+/g, \"_\") === BELIEF_LEDGER_SECTION_KEY;\n}\nfunction beliefLedgerFactKeys(sections: EntityStructuredSection[]): Set<string> {\n const keys = new Set<string>();\n for (const section of sections) {\n if (!isBeliefLedgerSection(section)) continue;\n for (const fact of section.facts) {\n keys.add(normalizeEntityText(fact));\n }\n }\n return keys;\n}\ntype RecalledEntityFact = { text: string; sourceIndex: number };\nfunction recallFactsForStructuredSection(section: EntityStructuredSection): RecalledEntityFact[] {\n if (!isBeliefLedgerSection(section)) {\n return section.facts.map((text, sourceIndex) => ({ text, sourceIndex }));\n }\n return currentActiveBeliefLedgerFactTexts(section.facts);\n}\nfunction currentActiveBeliefLedgerFactTexts(facts: string[]): RecalledEntityFact[] {\n const byClaim = new Map<string, { status: string; updatedAtMs: number; texts: RecalledEntityFact[] }>();\n for (const [sourceIndex, fact] of facts.entries()) {\n const match = BELIEF_LEDGER_FACT_RE.exec(fact.trim());\n if (!match) continue;\n const [, claimId, status, updatedAt, text] = match;\n const updatedAtMs = Date.parse(updatedAt);\n if (!claimId?.trim() || !status?.trim() || !Number.isFinite(updatedAtMs) || !text?.trim()) continue;\n const normalizedStatus = status.trim().toLowerCase();\n const normalizedClaimId = claimId.trim();\n const current = byClaim.get(normalizedClaimId);\n const inactiveTieWins =\n current &&\n updatedAtMs === current.updatedAtMs &&\n current.status === \"active\" &&\n normalizedStatus !== \"active\";\n if (!current || updatedAtMs > current.updatedAtMs || inactiveTieWins) {\n byClaim.set(normalizedClaimId, { status: normalizedStatus, updatedAtMs, texts: [{ text: text.trim(), sourceIndex }] });\n continue;\n }\n if (updatedAtMs === current.updatedAtMs && current.status === normalizedStatus) {\n current.texts.push({ text: text.trim(), sourceIndex });\n }\n }\n return [...byClaim.values()].flatMap((current) => current.status === \"active\" ? current.texts : []);\n}\nfunction relationLine(entry: EntityMentionIndexEntry, relationship: { target: string; label: string }): string {\n const normalizedLabel = relationship.label.replace(/\\s+/g, \" \").trim();\n if (normalizedLabel.length === 0) return `${entry.name} is connected to ${relationship.target}`;\n return `${entry.name} ${normalizedLabel} ${relationship.target}`;\n}\nfunction scoreAliasMatch(query: string, alias: string): number {\n const normalizedQuery = normalizeEntityText(query);\n const normalizedAlias = normalizeEntityText(alias);\n if (!normalizedAlias) return 0;\n if (normalizedQuery === normalizedAlias) return 10;\n if (containsPhrase(normalizedQuery, normalizedAlias)) return 8 + Math.min(normalizedAlias.split(/\\s+/).length, 3);\n const queryTokens = new Set(tokenize(normalizedQuery));\n const aliasTokens = tokenize(normalizedAlias);\n if (aliasTokens.length === 0) return 0;\n const overlap = aliasTokens.filter((token) => queryTokens.has(token)).length;\n if (overlap === 0) return 0;\n // Cross-entity contamination guard (#682 PR 2/3 R-2). For multi-token\n // aliases, partial-token overlap that hits ONLY shared common tokens\n // (like \"person\" in \"Person-A1\" / \"Person-B1\") would surface every\n // similarly-prefixed entity for a query that named only one. Require\n // that the overlap include at least one DISTINCTIVE alias token —\n // i.e. a token that does not also appear in any other entity's\n // alias-token vocabulary. Since this function is pure / per-pair, we\n // approximate \"distinctive\" by requiring the overlap to include at\n // least one token that is not a substring-of common identifier\n // affixes. The aliasTokens with length > 1 must contribute at least\n // one non-affix overlap. \"Alice Example\" ([\"alice\", \"example\"])\n // matched by query \"Tell me about Alice\" → overlap = 1 on \"alice\",\n // and \"alice\" is not an affix → score = 1. \"Person-A1\" tokens\n // [\"person\", \"a1\"] matched by query \"Who is Person-B1?\" → overlap =\n // 1 on \"person\", and \"person\" IS an affix → score = 0.\n if (aliasTokens.length > 1) {\n const nonAffixOverlap = aliasTokens.filter(\n (token) => queryTokens.has(token) && !isAliasAffixToken(token),\n ).length;\n if (nonAffixOverlap === 0) return 0;\n }\n return overlap;\n}\n/**\n * Tokens that look like type prefixes / generic role identifiers and\n * therefore should not, on their own, count as evidence that a\n * multi-token alias matches a query (#682 PR 2/3 R-2).\n *\n * Kept as a small explicit list rather than a regex so additions are\n * deliberate. The list mirrors the entity types listed in\n * `entity-schema.ts` plus the most common generic role identifiers\n * that frequently appear as the leading token of a display name.\n */\nconst ALIAS_AFFIX_TOKENS = new Set<string>([\n \"person\", \"people\", \"user\", \"users\", \"team\", \"teams\",\n \"project\", \"projects\", \"topic\", \"topics\",\n \"org\", \"orgs\", \"organization\", \"organizations\", \"company\", \"companies\",\n \"place\", \"places\", \"tool\", \"tools\", \"service\", \"services\",\n \"system\", \"systems\", \"agent\", \"agents\", \"bot\", \"bots\",\n]);\nfunction isAliasAffixToken(token: string): boolean {\n return ALIAS_AFFIX_TOKENS.has(token);\n}\nfunction isLikelyInstructionLike(value: string): boolean {\n return INSTRUCTION_LIKE_RE.test(value) || METADATA_WRAPPER_RE.test(value);\n}\nfunction sanitizeEntityFact(fact: string): string {\n const sanitized = sanitizeMemoryContent(fact);\n const clean = sanitized.text.trim();\n if (!clean) return \"\";\n if (INSTRUCTION_LIKE_RE.test(clean) && clean.length > 100) return \"\";\n return clean;\n}\nfunction scoreHintSnippet(snippet: EntityHintSnippet, queryTokens: string[]): EntityHintSnippet | null {\n const normalized = normalizeEntityText(snippet.text);\n if (!normalized) return null;\n const scored = { ...snippet };\n if (isLikelyInstructionLike(scored.text) && scored.kind !== \"summary\") {\n scored.score -= 3;\n }\n const overlap = queryTokens.filter((token) => normalized.includes(token)).length;\n scored.score += overlap * 2;\n if (METADATA_WRAPPER_RE.test(scored.text)) scored.score -= 2;\n if (scored.text.length <= 160) scored.score += 1;\n return scored.score > 0 ? scored : null;\n}\nfunction sortTimelineEntriesDesc(\n left: EntityMentionIndexEntry[\"timeline\"][number],\n right: EntityMentionIndexEntry[\"timeline\"][number],\n): number {\n const timestampOrder = compareEntityTimestamps(right.timestamp, left.timestamp);\n if (timestampOrder !== 0) {\n return timestampOrder;\n }\n return right.text.localeCompare(left.text);\n}\nfunction jaccardSimilarity(a: string, b: string): number {\n const aTokens = new Set(tokenize(a));\n const bTokens = new Set(tokenize(b));\n if (aTokens.size === 0 || bTokens.size === 0) return 0;\n let intersection = 0;\n for (const token of aTokens) {\n if (bTokens.has(token)) intersection += 1;\n }\n const union = new Set([...aTokens, ...bTokens]).size;\n return union === 0 ? 0 : intersection / union;\n}\nfunction buildAliasIndex(entries: EntityMentionIndexEntry[]): Map<string, EntityMentionIndexEntry[]> {\n const index = new Map<string, EntityMentionIndexEntry[]>();\n for (const entry of entries) {\n const aliases = uniqueStrings([entry.name, ...entry.aliases]).map(normalizeEntityText).filter(Boolean);\n for (const alias of aliases) {\n const existing = index.get(alias) ?? [];\n existing.push(entry);\n index.set(alias, existing);\n }\n }\n return index;\n}\nasync function readNativeChunks(\n config: PluginConfig,\n recallNamespaces?: string[],\n): Promise<NativeKnowledgeChunk[]> {\n if (!config.nativeKnowledge?.enabled) return [];\n return collectNativeKnowledgeChunks({\n workspaceDir: config.workspaceDir,\n memoryDir: config.memoryDir,\n config: config.nativeKnowledge,\n recallNamespaces: resolveNamespaceCapabilities(config).namespaces ? recallNamespaces : undefined,\n defaultNamespace: config.defaultNamespace,\n }).catch(() => []);\n}\nasync function resolveEntityIndexStorages(\n storage: StorageManager,\n config: PluginConfig,\n recallNamespaces?: string[],\n namespaceStorage?: (namespace: string) => Promise<StorageManager>,\n): Promise<StorageManager[]> {\n if (\n !resolveNamespaceCapabilities(config).namespaces ||\n !namespaceStorage ||\n !recallNamespaces ||\n recallNamespaces.length === 0\n ) {\n return [storage];\n }\n const storages: StorageManager[] = [];\n const seenDirs = new Set<string>();\n for (const namespace of uniqueStrings(recallNamespaces)) {\n try {\n const scopedStorage = await namespaceStorage(namespace);\n const storageDir = path.resolve(scopedStorage.dir);\n if (seenDirs.has(storageDir)) continue;\n seenDirs.add(storageDir);\n storages.push(scopedStorage);\n } catch {\n continue;\n }\n }\n return storages.length > 0 ? storages : [storage];\n}\nfunction entityIndexStatePath(storage: StorageManager): string {\n return path.join(storage.dir, \"state\", \"entity-mention-index.json\");\n}\n\nasync function readEntityIndexState(storage: StorageManager): Promise<EntityMentionIndex | null> {\n const raw = await readFile(entityIndexStatePath(storage), \"utf-8\").catch(() => \"\");\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw) as Partial<EntityMentionIndex>;\n if (parsed.version !== ENTITY_INDEX_VERSION || !Array.isArray(parsed.entities)) return null;\n return parsed as EntityMentionIndex;\n } catch {\n return null;\n }\n}\nasync function readCurrentPersistedEntityIndex(\n storage: StorageManager,\n config: PluginConfig,\n recallNamespaces?: string[],\n namespaceStorage?: (namespace: string) => Promise<StorageManager>,\n): Promise<EntityMentionIndex | null> {\n if (\n resolveNamespaceCapabilities(config).namespaces &&\n namespaceStorage &&\n recallNamespaces &&\n recallNamespaces.length > 0\n ) {\n return null;\n }\n const index = await readEntityIndexState(storage);\n if (!entityMentionPersistedIndexReadable(storage.dir) || !index || index.entityStatusVersion !== storage.getMemoryStatusVersion()) {\n return null;\n }\n return index;\n}\ntype CarriedMemorySnippets = Map<string, { memorySnippets: string[]; memorySnippetOrigins?: (string | undefined)[] }>;\n\nfunction carriedMemorySnippets(index: EntityMentionIndex): CarriedMemorySnippets {\n return new Map(index.entities.map((entry) => [entry.canonicalId, {\n memorySnippets: entry.memorySnippets.slice(),\n memorySnippetOrigins: entry.memorySnippetOrigins?.slice(),\n }]));\n}\n\nfunction nativeEntityIndexRevision(chunks: NativeKnowledgeChunk[]): string {\n const projection = chunks.map((chunk) => [\n chunk.chunkId,\n chunk.sourcePath,\n chunk.title,\n chunk.sourceKind,\n uniqueStrings(chunk.aliases ?? []),\n compactLine(chunk.content, 180),\n chunk.derivedDate ?? null,\n ]);\n return createHash(\"sha256\").update(JSON.stringify(projection)).digest(\"hex\");\n}\n\nasync function writeEntityIndexState(\n storage: StorageManager,\n index: EntityMentionIndex,\n persistGeneration: number,\n): Promise<void> {\n await writePersistedEntityMentionIndex(storage.dir, persistGeneration, JSON.stringify(index, null, 2) + \"\\n\");\n}\n\nfunction nativePseudoCanonicalId(chunk: NativeKnowledgeChunk): string {\n return `native:${createHash(\"sha256\").update(chunk.sourcePath).digest(\"hex\").slice(0, 12)}`;\n}\n\nfunction createPseudoNativeEntry(chunk: NativeKnowledgeChunk): EntityMentionIndexEntry {\n const canonicalId = nativePseudoCanonicalId(chunk);\n return {\n canonicalId,\n name: chunk.title,\n type: chunk.sourceKind,\n aliases: uniqueStrings(chunk.aliases ?? []),\n facts: [],\n structuredSections: [],\n timelineFacts: [],\n timeline: [],\n relationships: [],\n activity: [],\n factCount: 0,\n memorySnippets: [],\n nativeChunks: [\n {\n chunkId: chunk.chunkId,\n title: chunk.title,\n sourceKind: chunk.sourceKind,\n sourcePath: chunk.sourcePath,\n snippet: compactLine(chunk.content, 180),\n derivedDate: chunk.derivedDate,\n },\n ],\n };\n}\n\nfunction mergeNativeChunk(entry: EntityMentionIndexEntry, chunk: NativeKnowledgeChunk): void {\n const existing = entry.nativeChunks.find((item) => item.chunkId === chunk.chunkId);\n if (existing) return;\n entry.nativeChunks.push({\n chunkId: chunk.chunkId,\n title: chunk.title,\n sourceKind: chunk.sourceKind,\n sourcePath: chunk.sourcePath,\n snippet: compactLine(chunk.content, 180),\n derivedDate: chunk.derivedDate,\n });\n entry.aliases = uniqueStrings([...entry.aliases, ...(chunk.aliases ?? [])]);\n}\n\nfunction hasFreshNativeExplicitMention(\n index: EntityMentionIndex,\n nativeChunks: NativeKnowledgeChunk[],\n query: string,\n): boolean {\n if (nativeChunks.length === 0) return false;\n const nativeCanonicalIds = new Set(nativeChunks.map(nativePseudoCanonicalId));\n const freshNativeIndex: EntityMentionIndex = {\n ...index,\n entities: [\n ...index.entities.filter((entry) => !nativeCanonicalIds.has(entry.canonicalId)),\n ...nativeChunks.map(createPseudoNativeEntry),\n ],\n };\n return resolveLanguageIndependentExplicitCandidates(freshNativeIndex, query).length > 0;\n}\n\nasync function buildEntityMentionIndex(\n storage: StorageManager,\n config: PluginConfig,\n recallNamespaces?: string[],\n namespaceStorage?: (namespace: string) => Promise<StorageManager>,\n nativeChunksOverride?: NativeKnowledgeChunk[],\n resolvedStorages?: StorageManager[],\n abortSignal?: AbortSignal,\n carrySnippets?: CarriedMemorySnippets,\n): Promise<EntityMentionIndex> {\n checkEntityRecallAbort(abortSignal);\n const storages = resolvedStorages ?? await resolveEntityIndexStorages(\n storage,\n config,\n recallNamespaces,\n namespaceStorage,\n );\n const shouldPersistIndex =\n storages.length === 1 && path.resolve(storages[0]!.dir) === path.resolve(storage.dir);\n const persistGeneration = entityMentionCacheGeneration(storage.dir);\n const entityStatusVersionBefore = shouldPersistIndex ? storage.getMemoryStatusVersion() : undefined;\n const [previousIndex, entityFileSets, memorySets, nativeChunks] = await Promise.all([\n shouldPersistIndex ? readEntityIndexState(storage) : Promise.resolve(null),\n Promise.all(storages.map((scopedStorage) => scopedStorage.readAllEntityFiles({ abortSignal }))),\n carrySnippets\n ? Promise.resolve([])\n : Promise.all(storages.map((scopedStorage) => scopedStorage.readAllMemories({ abortSignal }))),\n nativeChunksOverride ? Promise.resolve(nativeChunksOverride) : readNativeChunks(config, recallNamespaces),\n ]);\n // The bulk reads now stop at their own scan boundaries (issue #2307); this\n // checkpoint still guards the (larger) indexing pass over their results.\n checkEntityRecallAbort(abortSignal);\n // Pair each entity with the storage that owns it (#1534): canonical ids must\n // reflect that store's aliases and historical migration mappings, never another\n // namespace's.\n const entityRecords = entityFileSets.flatMap((set, index) =>\n set.map((entity) => ({ entity, storage: storages[index]! })),\n );\n const memories = memorySets.flat();\n\n // The two passes over the corpus below never await real I/O, so without an\n // explicit yield they hold the event loop and no recall section deadline can\n // fire during them (issue #2291).\n let scanned = 0;\n const entities = new Map<string, EntityMentionIndexEntry>();\n for (const { entity, storage: entityStorage } of entityRecords) {\n scanned += 1;\n await yieldEntityRecallScanEvery(scanned, abortSignal);\n const canonicalId =\n typeof entityStorage.normalizeEntityName === \"function\"\n ? entityStorage.normalizeEntityName(entity.name, entity.type)\n : normalizeEntityName(entity.name, entity.type, entityStorage.entityAliases);\n const rawStructuredSections = entity.structuredSections ?? [];\n const rawBeliefLedgerFactKeys = beliefLedgerFactKeys(rawStructuredSections);\n const sanitizedFacts = entity.facts\n .map((fact) => sanitizeEntityFact(fact))\n .filter(Boolean)\n .filter((fact) => !rawBeliefLedgerFactKeys.has(normalizeEntityText(fact)))\n .map((fact) => compactLine(fact, 180));\n const { facts: timelineFacts, origins: timelineFactOrigins } = sanitizeOriginatedFacts(\n entity.timeline,\n sanitizeEntityFact,\n compactLine,\n true,\n );\n const structuredSections = buildOriginStructuredSections(\n rawStructuredSections,\n recallFactsForStructuredSection,\n sanitizeEntityFact,\n compactLine,\n );\n entities.set(canonicalId, {\n canonicalId,\n name: entity.name,\n type: entity.type,\n aliases: uniqueStrings(entity.aliases),\n summary: entity.synthesis?.trim() || entity.summary?.trim() || undefined,\n facts: sanitizedFacts,\n timelineFacts,\n ...(timelineFactOrigins.some((origin) => origin !== undefined) ? { timelineFactOrigins } : {}),\n structuredSections,\n timeline: entity.timeline.map((entry) => ({ ...entry })),\n relationships: entity.relationships.map((relationship) => ({ ...relationship })),\n activity: entity.activity.map((activity) => ({ ...activity })),\n factCount: sanitizedFacts.length,\n memorySnippets: [],\n nativeChunks: [],\n });\n }\n\n scanned = 0;\n const pendingSnippetReconcile = carrySnippets\n ? applyCarriedMemorySnippets(entities.values(), carrySnippets)\n : false;\n if (!carrySnippets) {\n for (const memory of memories) {\n scanned += 1;\n await yieldEntityRecallScanEvery(scanned, abortSignal);\n const entry = typeof memory.frontmatter.entityRef === \"string\" ? entities.get(memory.frontmatter.entityRef) : undefined;\n if (!entry) continue;\n const snippet = await readMemorySnippet(memory);\n if (entry.memorySnippets.includes(snippet)) continue;\n entry.memorySnippets.push(snippet);\n entry.memorySnippetOrigins = [...(entry.memorySnippetOrigins ?? []), memory.frontmatter.origin];\n }\n }\n // Each remaining phase is another synchronous pass over the whole index\n // (alias map, native-chunk merge, sort, two full serializations). Yield between\n // them so a section deadline can fire between passes instead of only after all\n // of them (issue #2291).\n await yieldEntityRecallScan(abortSignal);\n const aliasIndex = buildAliasIndex([...entities.values()]);\n for (const chunk of nativeChunks) {\n const existingPseudo = entities.get(nativePseudoCanonicalId(chunk));\n if (existingPseudo) {\n mergeNativeChunk(existingPseudo, chunk);\n continue;\n }\n const candidateAliases = uniqueStrings([chunk.title, ...(chunk.aliases ?? [])]).map(normalizeEntityText).filter(Boolean);\n let matched = false;\n for (const alias of candidateAliases) {\n for (const entry of aliasIndex.get(alias) ?? []) {\n mergeNativeChunk(entry, chunk);\n matched = true;\n }\n }\n if (matched) continue;\n const pseudoEntry = createPseudoNativeEntry(chunk);\n entities.set(pseudoEntry.canonicalId, pseudoEntry);\n }\n\n await yieldEntityRecallScan(abortSignal);\n const sortedEntities = [...entities.values()].sort((left, right) => left.name.localeCompare(right.name));\n await yieldEntityRecallScan(abortSignal);\n const previousEntities = previousIndex ? JSON.stringify(previousIndex.entities) : \"\";\n await yieldEntityRecallScan(abortSignal);\n const nextEntities = JSON.stringify(sortedEntities);\n const entityStatusVersionAfter = shouldPersistIndex ? storage.getMemoryStatusVersion() : undefined;\n const canPersistIndex = shouldPersistIndex && entityStatusVersionBefore === entityStatusVersionAfter && persistGeneration === entityMentionCacheGeneration(storage.dir);\n const index: EntityMentionIndex = {\n version: ENTITY_INDEX_VERSION,\n updatedAt:\n previousIndex && previousEntities === nextEntities\n ? previousIndex.updatedAt\n : new Date().toISOString(),\n entityStatusVersion: canPersistIndex ? entityStatusVersionAfter : undefined,\n entities: sortedEntities,\n };\n if (canPersistIndex) {\n checkEntityRecallAbort(abortSignal);\n await writeEntityIndexState(storage, index, persistGeneration);\n }\n if (pendingSnippetReconcile) index.pendingSnippetReconcile = true;\n return index;\n}\n\nfunction resolveExplicitCandidates(\n index: EntityMentionIndex,\n query: string,\n): EntityCandidate[] {\n const candidates: EntityCandidate[] = [];\n for (const entry of index.entities) {\n const aliases = uniqueStrings([entry.name, ...entry.aliases]);\n let bestAlias = \"\";\n let bestScore = 0;\n for (const alias of aliases) {\n const score = scoreAliasMatch(query, alias);\n if (score > bestScore) {\n bestAlias = alias;\n bestScore = score;\n }\n }\n if (bestScore <= 0) continue;\n candidates.push({ entry, alias: bestAlias, score: bestScore, source: \"query\" });\n }\n return candidates.sort((left, right) => right.score - left.score);\n}\n\nconst EXPLICIT_ENTITY_MENTION_SCORE = 9;\n\nconst IMPLICIT_ENTITY_STOP_WORDS = new Set([\n \"a\",\n \"an\",\n \"and\",\n \"are\",\n \"as\",\n \"at\",\n \"be\",\n \"by\",\n \"can\",\n \"do\",\n \"for\",\n \"from\",\n \"has\",\n \"how\",\n \"i\",\n \"if\",\n \"in\",\n \"is\",\n \"it\",\n \"me\",\n \"my\",\n \"of\",\n \"on\",\n \"or\",\n \"the\",\n \"to\",\n \"was\",\n \"what\",\n \"when\",\n \"where\",\n \"who\",\n \"why\",\n \"with\",\n \"you\",\n \"your\",\n]);\n\nfunction isDistinctiveImplicitAlias(normalizedAlias: string): boolean {\n const tokens = normalizedAlias.split(/\\s+/).filter(Boolean);\n if (tokens.length > 1 && tokens.every((token) => IMPLICIT_ENTITY_STOP_WORDS.has(token))) return false;\n if (tokens.length !== 1) return true;\n const token = tokens[0]!;\n return Array.from(token).length > 1 && !IMPLICIT_ENTITY_STOP_WORDS.has(token);\n}\n\nfunction isShortLatinAlias(alias: string): boolean {\n return /^[A-Za-z]{2,3}$/.test(alias.trim());\n}\n\nfunction hasStrongShortLatinAliasMention(query: string, alias: string): boolean {\n const normalizedAlias = alias.trim();\n const titleCaseAlias = `${normalizedAlias[0]!.toUpperCase()}${normalizedAlias.slice(1).toLowerCase()}`;\n const forms = new Set([normalizedAlias, normalizedAlias.toUpperCase(), titleCaseAlias]);\n return [...forms].some((form) => {\n if (form === form.toLowerCase()) return false;\n const escaped = form.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return new RegExp(`(?:^|[^A-Za-z0-9])${escaped}(?:$|[^A-Za-z0-9])`).test(query);\n });\n}\n\nfunction resolveLanguageIndependentExplicitCandidates(\n index: EntityMentionIndex,\n query: string,\n): EntityCandidate[] {\n const canonicalIdsByAlias = new Map<string, Set<string>>();\n for (const entry of index.entities) {\n for (const alias of uniqueStrings([entry.name, ...entry.aliases])) {\n const normalizedAlias = normalizeEntityText(alias);\n if (!normalizedAlias) continue;\n const canonicalIds = canonicalIdsByAlias.get(normalizedAlias) ?? new Set<string>();\n canonicalIds.add(entry.canonicalId);\n canonicalIdsByAlias.set(normalizedAlias, canonicalIds);\n }\n }\n\n const candidates: EntityCandidate[] = [];\n for (const entry of index.entities) {\n let bestAlias = \"\";\n let bestScore = 0;\n for (const alias of uniqueStrings([entry.name, ...entry.aliases])) {\n const normalizedAlias = normalizeEntityText(alias);\n const score = scoreAliasMatch(query, alias);\n if (\n !normalizedAlias ||\n !isDistinctiveImplicitAlias(normalizedAlias) ||\n (isShortLatinAlias(alias) && !hasStrongShortLatinAliasMention(query, alias)) ||\n canonicalIdsByAlias.get(normalizedAlias)?.size !== 1 ||\n score < EXPLICIT_ENTITY_MENTION_SCORE ||\n score <= bestScore\n ) {\n continue;\n }\n bestAlias = alias;\n bestScore = score;\n }\n if (bestAlias) {\n candidates.push({ entry, alias: bestAlias, score: bestScore, source: \"query\" });\n }\n }\n\n return candidates.sort(\n (left, right) => right.score - left.score || left.entry.name.localeCompare(right.entry.name),\n );\n}\n\nfunction resolveRecentTurnCandidates(\n index: EntityMentionIndex,\n transcriptEntries: TranscriptEntry[],\n recentTurns: number,\n): EntityCandidate[] {\n if (recentTurns <= 0 || transcriptEntries.length === 0) return [];\n const recentEntries = transcriptEntries.slice(-recentTurns);\n const candidates = new Map<string, EntityCandidate>();\n for (let indexOffset = recentEntries.length - 1; indexOffset >= 0; indexOffset -= 1) {\n const turn = recentEntries[indexOffset];\n const recencyBoost = recentEntries.length - indexOffset;\n const roleWeight = turn.role === \"user\" ? 2 : turn.role === \"assistant\" ? -1 : 0;\n for (const entry of index.entities) {\n const aliases = uniqueStrings([entry.name, ...entry.aliases]);\n for (const alias of aliases) {\n const score = scoreAliasMatch(turn.content, alias);\n if (score <= 0) continue;\n const current = candidates.get(entry.canonicalId);\n const weightedScore = score + Math.max(0, 6 - recencyBoost) + roleWeight;\n if (!current || weightedScore > current.score) {\n candidates.set(entry.canonicalId, {\n entry,\n alias,\n score: weightedScore,\n source: \"recent_turn\",\n });\n }\n }\n }\n }\n return [...candidates.values()].sort((left, right) => right.score - left.score);\n}\n\nasync function readMemorySnippet(memory: MemoryFile): Promise<string> {\n const content = memory.content.replace(/\\s+/g, \" \").trim();\n return compactLine(content, 180);\n}\n\nasync function buildHintSnippets(\n entry: EntityMentionIndexEntry,\n queryTokens: string[],\n mode: EntityQueryMode,\n maxSupportingFacts: number,\n requestedSectionKeys: Set<string>,\n): Promise<EntityHintSnippet[]> {\n const snippets: EntityHintSnippet[] = [];\n const aliasTokens = new Set(tokenize(uniqueStrings([entry.name, ...entry.aliases]).join(\" \")));\n if (entry.summary) {\n snippets.push({ text: compactLine(entry.summary, 180), score: 10, kind: \"summary\" });\n }\n if (requestedSectionKeys.size > 0) {\n for (const section of entry.structuredSections) {\n if (!requestedSectionKeys.has(normalizeEntityText(section.key).replace(/\\s+/g, \"_\"))) continue;\n for (const [index, fact] of section.facts.entries()) {\n snippets.push({\n text: fact,\n score: mode === \"direct\" ? 8 : 9,\n kind: \"section\",\n origin: section.factOrigins?.[index],\n });\n }\n }\n } else {\n for (const [index, fact] of entry.timelineFacts.entries()) {\n snippets.push({\n text: fact,\n score: mode === \"direct\" ? 6 : 7,\n kind: \"fact\",\n origin: entry.timelineFactOrigins?.[index],\n });\n }\n for (const section of entry.structuredSections) {\n for (const [index, fact] of section.facts.entries()) {\n const normalizedFact = normalizeEntityText(fact);\n const hasNonAliasQueryOverlap = queryTokens.some((token) =>\n !aliasTokens.has(token) && normalizedFact.includes(token)\n );\n if (entry.timelineFacts.length > 0 && !hasNonAliasQueryOverlap) {\n continue;\n }\n snippets.push({\n text: fact,\n score: mode === \"direct\" ? 6 : 7,\n kind: \"fact\",\n origin: section.factOrigins?.[index],\n });\n }\n }\n if (entry.timelineFacts.length === 0 && entry.structuredSections.length === 0) {\n for (const fact of entry.facts) {\n if (!fact.trim()) continue;\n snippets.push({ text: fact, score: mode === \"direct\" ? 6 : 7, kind: \"fact\" });\n }\n }\n }\n\n if (requestedSectionKeys.size === 0) {\n for (const relationship of entry.relationships) {\n snippets.push({\n text: compactLine(relationLine(entry, relationship), 180),\n score: mode === \"direct\" && entry.type.toLowerCase() === \"person\" ? 6 : 4,\n kind: \"relationship\",\n });\n }\n\n for (const activity of entry.activity) {\n snippets.push({\n text: compactLine(`${activity.date}: ${activity.note}`, 180),\n score: 4,\n kind: \"activity\",\n });\n }\n\n for (const [index, memorySnippet] of entry.memorySnippets.slice(0, Math.min(maxSupportingFacts, 4)).entries()) {\n snippets.push({ text: memorySnippet, score: 5, kind: \"memory\", origin: entry.memorySnippetOrigins?.[index] });\n }\n\n for (const chunk of entry.nativeChunks) {\n snippets.push({\n text: compactLine(chunk.snippet, 180),\n score: 3,\n kind: \"native\",\n });\n }\n }\n\n const deduped = new Map<string, EntityHintSnippet>();\n for (const snippet of snippets) {\n const scored = scoreHintSnippet(snippet, queryTokens);\n if (!scored) continue;\n const normalized = normalizeEntityText(scored.text);\n const existing = deduped.get(normalized);\n if (!existing) {\n deduped.set(normalized, scored);\n } else if (existing.origin !== scored.origin) {\n deduped.set(normalized, { ...(scored.score > existing.score ? scored : existing), origin: undefined });\n } else if (scored.score > existing.score) {\n deduped.set(normalized, scored);\n }\n }\n\n return [...deduped.values()]\n .filter((snippet) => snippet.score > 0)\n .sort((left, right) => right.score - left.score)\n .slice(0, maxSupportingFacts);\n}\n\nfunction summarizeUncertainty(snippets: EntityHintSnippet[]): string | null {\n const direct = snippets.filter((snippet) =>\n snippet.kind === \"summary\"\n || snippet.kind === \"fact\"\n || snippet.kind === \"section\"\n || snippet.kind === \"memory\"\n );\n if (direct.length < 2) return null;\n for (let index = 0; index < direct.length; index += 1) {\n for (let compare = index + 1; compare < direct.length; compare += 1) {\n if (jaccardSimilarity(direct[index].text, direct[compare].text) < 0.2) {\n return \"Evidence is mixed across stored facts; treat the hints below as partial and verify before answering definitively.\";\n }\n }\n }\n return null;\n}\n\nfunction formatEntityHintSection(\n candidates: Array<{\n candidate: EntityCandidate;\n snippets: EntityHintSnippet[];\n uncertainty: string | null;\n }>,\n queryTokens: string[],\n mode: EntityQueryMode,\n maxRelatedEntities: number,\n maxChars: number,\n originAuthorityEnabled: boolean, untrustedOrigins: readonly string[],\n): string | null {\n if (candidates.length === 0) return null;\n const lines: string[] = [\"## entity_answer_hints\", \"\"];\n // #1955 review: non-native snippet kinds may embed extraction-written content\n // without per-field origin — fence as unknown (least privilege; plumbing #2397).\n const renderSnippet = (snippet: EntityHintSnippet): string => snippet.kind !== \"native\"\n ? renderAuthorityBoundContent(snippet.text, snippet.origin, { enabled: originAuthorityEnabled, untrustedOrigins }) : snippet.text;\n // (see comment above)\n // #1955 review: inline fields (names/types/aliases/targets) cannot carry the\n // multi-line block fence without collapsing the hint list structure —\n // per-field origin plumbing is tracked in #2397.\n for (const { candidate, snippets, uncertainty } of candidates) {\n const hasSummary = Boolean(candidate.entry.summary?.trim());\n const preferredTopSnippets = hasSummary\n ? snippets.filter((snippet) => snippet.kind !== \"fact\")\n : snippets;\n let topSnippets = (\n preferredTopSnippets.length > 0 ? preferredTopSnippets : snippets\n ).slice(0, 3);\n const buildTimelineSnippets = (seedExcludedTexts: Set<string>): EntityHintSnippet[] => {\n const explicitTimelinePool = dedupeHintSnippetsByText(\n (candidate.entry.timeline ?? [])\n .slice()\n .sort(sortTimelineEntriesDesc)\n .map((entry) => {\n const text = sanitizeEntityFact(entry.text);\n return text\n ? scoreHintSnippet({\n text: compactLine(text, 180),\n score: 7,\n kind: \"activity\" as const,\n origin: entry.origin,\n }, queryTokens)\n : null;\n })\n .filter((snippet): snippet is EntityHintSnippet => snippet !== null)\n .filter((snippet) => !seedExcludedTexts.has(normalizeEntityText(snippet.text))),\n ).slice(0, 2);\n const activityTimelinePool = dedupeHintSnippetsByText(\n snippets\n .filter((snippet) => (\n snippet.kind === \"activity\" || snippet.kind === \"memory\"\n ) && !seedExcludedTexts.has(normalizeEntityText(snippet.text))),\n ).slice(0, 2);\n return explicitTimelinePool.length > 0\n ? explicitTimelinePool\n : activityTimelinePool.length > 0\n ? activityTimelinePool\n : dedupeHintSnippetsByText(\n snippets\n .filter((snippet) => (\n snippet.kind === \"fact\" || snippet.kind === \"summary\"\n ) && !seedExcludedTexts.has(normalizeEntityText(snippet.text))),\n ).slice(0, 2);\n };\n const baseTopSnippetTexts = new Set(topSnippets.map((snippet) => normalizeEntityText(snippet.text)));\n const timelinePool = mode !== \"direct\" ? buildTimelineSnippets(baseTopSnippetTexts) : [];\n if (mode !== \"direct\" && hasSummary && topSnippets.length < 2) {\n if (timelinePool.length > 0) {\n topSnippets = [...topSnippets, timelinePool[0]!].slice(0, 3);\n }\n }\n const topSnippetTexts = new Set(topSnippets.map((snippet) => normalizeEntityText(snippet.text)));\n lines.push(`- target: ${candidate.entry.name} (${candidate.entry.type})`);\n lines.push(`- resolution: ${candidate.source === \"recent_turn\" ? \"carried forward from recent turns via alias\" : \"matched alias\"} \"${candidate.alias}\"${candidate.source === \"recent_turn\" ? \"\" : \" in the query\"}`);\n if (uncertainty) lines.push(`- uncertainty: ${uncertainty}`);\n if (topSnippets.length > 0) {\n lines.push(\"- likely answer:\");\n for (const snippet of topSnippets) {\n lines.push(` - ${renderSnippet(snippet)}`);\n }\n }\n if (mode !== \"direct\") {\n const fallbackTimeline = timelinePool.filter(\n (snippet) => !topSnippetTexts.has(normalizeEntityText(snippet.text)),\n );\n if (fallbackTimeline.length > 0) {\n lines.push(\"- recent timeline:\");\n for (const snippet of fallbackTimeline) {\n lines.push(` - ${renderSnippet(snippet)}`);\n }\n }\n }\n const related = candidate.entry.relationships.slice(0, maxRelatedEntities).map((relationship) => relationship.target);\n if (related.length > 0) {\n lines.push(`- related entities: ${related.join(\", \")}`);\n }\n lines.push(`- support counts: facts=${candidate.entry.factCount}, memories=${candidate.entry.memorySnippets.length}, native=${candidate.entry.nativeChunks.length}`);\n lines.push(\"\");\n }\n\n let result = lines.join(\"\\n\");\n if (result.length > maxChars) {\n result = `${truncateGraphemeSafe(result, Math.max(0, maxChars - 15)).trimEnd()}\\n\\n...(trimmed)\\n`;\n }\n return result.trim().length > 0 ? result.trimEnd() : null;\n}\n\nexport async function buildEntityRecallSection(options: BuildEntityRecallSectionOptions): Promise<string | null> {\n // Checkpoints sit at the real I/O boundaries below (persisted-index read,\n // native-chunk read, storage resolution, index build). The per-candidate\n // formatting that follows never awaits real I/O, so a deadline that fires\n // during a scan is observed here (issue #2291).\n checkEntityRecallAbort(options.abortSignal);\n const prefixedMode = detectEntityQueryMode(options.query);\n // #2193: in zero-pronoun scripts a short question with no entity name\n // never trips a pronoun word list, so the structural signal routes it\n // into the same coreference path as an English \"what about him?\".\n // Latin-script queries stay on the cue tables / English rules so the\n // generic technical-question guard keeps working. Resolution gates.\n const structuralFollowUp = prefixedMode === null\n && isStructuralEntityFollowUpQuery(\n options.query,\n options.recentTurns > 0 && options.transcriptEntries.length > 0,\n );\n const earlyMode = prefixedMode ?? (structuralFollowUp ? \"follow_up\" : null);\n const persistedIndex = earlyMode\n ? null\n : await readCurrentPersistedEntityIndex(\n options.storage,\n options.config,\n options.recallNamespaces,\n options.namespaceStorage,\n );\n checkEntityRecallAbort(options.abortSignal);\n let nativeChunks: NativeKnowledgeChunk[] | undefined;\n if (\n !earlyMode &&\n persistedIndex &&\n resolveLanguageIndependentExplicitCandidates(persistedIndex, options.query).length === 0\n ) {\n nativeChunks = await readNativeChunks(options.config, options.recallNamespaces);\n if (!hasFreshNativeExplicitMention(persistedIndex, nativeChunks, options.query)) {\n return entityRecallSectionAbsent(options.abortSignal);\n }\n }\n const namespaceScoped =\n resolveNamespaceCapabilities(options.config).namespaces &&\n options.namespaceStorage !== undefined &&\n (options.recallNamespaces?.length ?? 0) > 0;\n if (namespaceScoped) {\n nativeChunks = await readNativeChunks(options.config, options.recallNamespaces);\n }\n const resolvedStorages = namespaceScoped\n ? await resolveEntityIndexStorages(\n options.storage,\n options.config,\n options.recallNamespaces,\n options.namespaceStorage,\n )\n : undefined;\n if (!nativeChunks) {\n nativeChunks = await readNativeChunks(options.config, options.recallNamespaces);\n }\n const indexStorages = resolvedStorages ?? [options.storage];\n const index = await resolveEntityMentionIndex({\n scopeKey: entityMentionScopeKey(options.recallNamespaces, indexStorages, nativeEntityIndexRevision(nativeChunks)),\n currentIdentity: () => entityMentionIdentity(indexStorages),\n abortSignal: options.abortSignal,\n buildFull: (signal) => buildEntityMentionIndex(\n options.storage,\n options.config,\n options.recallNamespaces,\n options.namespaceStorage,\n nativeChunks,\n indexStorages,\n signal,\n ),\n rebuildEntities: (previous, signal) => buildEntityMentionIndex(\n options.storage,\n options.config,\n options.recallNamespaces,\n options.namespaceStorage,\n nativeChunks,\n indexStorages,\n signal,\n carriedMemorySnippets(previous),\n ),\n });\n // Candidate resolution is another synchronous pass over every entity and alias,\n // reached even on a cache hit that did no I/O at all — so yield here too, or a\n // cached corpus could still hold the loop past the section budget (issue #2291).\n await yieldEntityRecallScan(options.abortSignal);\n const explicitCandidates = resolveExplicitCandidates(index, options.query);\n await yieldEntityRecallScan(options.abortSignal);\n const queryCandidates = prefixedMode\n ? explicitCandidates\n : resolveLanguageIndependentExplicitCandidates(index, options.query);\n if (\n queryCandidates.length === 0\n && /^what does (?:this|that|it|the|a|an|my|our|your|their)\\b/i.test(normalizeEntityText(options.query))\n ) {\n return entityRecallSectionAbsent(options.abortSignal);\n }\n\n // Explicit mentions keep #2161 behavior (direct mode) even when the\n // structural follow-up signal also fired; only name-less short questions\n // fall through to coreference.\n const mode = prefixedMode\n ?? (queryCandidates.length > 0\n ? \"direct\"\n : structuralFollowUp\n ? \"follow_up\"\n : null);\n if (!mode) return entityRecallSectionAbsent(options.abortSignal);\n\n const candidates = queryCandidates.length > 0\n ? queryCandidates\n : resolveRecentTurnCandidates(index, options.transcriptEntries, options.recentTurns);\n\n if (candidates.length === 0) return entityRecallSectionAbsent(options.abortSignal);\n\n const queryTokens = tokenize(options.query);\n const candidateLimit = queryCandidates.length === 0 && mode === \"follow_up\"\n ? 1\n : options.maxHints;\n const rankedCandidates = candidates.slice(0, candidateLimit);\n const enriched = await Promise.all(\n rankedCandidates.map(async (candidate) => {\n const requestedSectionKeys = new Set(\n resolveRequestedEntitySectionKeys(\n options.query,\n candidate.entry.type,\n candidate.entry.structuredSections,\n options.config.entitySchemas,\n ),\n );\n const snippets = await buildHintSnippets(\n candidate.entry,\n queryTokens,\n mode,\n options.maxSupportingFacts,\n requestedSectionKeys,\n );\n return {\n candidate,\n snippets,\n uncertainty: summarizeUncertainty(snippets),\n };\n }),\n );\n\n const section = formatEntityHintSection(\n enriched,\n queryTokens,\n mode,\n options.maxRelatedEntities,\n options.maxChars,\n options.originAuthorityEnabled === true,\n options.untrustedOrigins ?? [],\n );\n // `entityRecallSectionAbsent` so a cancelled build is not recorded as a\n // successful section that simply found no entities.\n if (!section) return entityRecallSectionAbsent(options.abortSignal);\n return section;\n}\n\nexport async function readRecentEntityTranscriptEntries(\n transcriptEntriesPromise: Promise<TranscriptEntry[]>,\n recentTurns: number,\n): Promise<TranscriptEntry[]> {\n if (recentTurns <= 0) return [];\n const transcriptEntries = await transcriptEntriesPromise.catch(() => []);\n if (transcriptEntries.length === 0) return [];\n return transcriptEntries.slice(-Math.max(1, recentTurns * 2));\n}\n\nexport const entityIndexVersion = ENTITY_INDEX_VERSION;\nexport const entityRecentTranscriptLookbackHours = RECENT_TRANSCRIPT_LOOKBACK_HOURS;\n"],"mappings":"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","names":["index","token"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
bumpMemoryCorpusVersionForDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-M5GVCJSJ.js";
|
|
4
4
|
import {
|
|
5
5
|
pathMayCarryEntityRefs,
|
|
6
6
|
requestEntityCanonicalIdReconcile,
|
|
@@ -448,4 +448,4 @@ export {
|
|
|
448
448
|
revertToVersion,
|
|
449
449
|
diffVersions
|
|
450
450
|
};
|
|
451
|
-
//# sourceMappingURL=chunk-
|
|
451
|
+
//# sourceMappingURL=chunk-W5XWHTDO.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runGraphEdgeDecayMaintenanceAcrossNamespaces
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2UPTRDGM.js";
|
|
4
4
|
import {
|
|
5
5
|
normalizeDreamsStatusWindowHours
|
|
6
6
|
} from "./chunk-EQWEIIKQ.js";
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
executeResolution,
|
|
9
9
|
isValidResolutionVerb,
|
|
10
10
|
runPreferenceDriftScan
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-RYN4AIRM.js";
|
|
12
12
|
import {
|
|
13
13
|
getRecallTimingStatus,
|
|
14
14
|
isRecallTimingsOperator
|
|
@@ -21,13 +21,13 @@ import {
|
|
|
21
21
|
defineOperation,
|
|
22
22
|
parseNamespacePreflightWriteOp,
|
|
23
23
|
resolveAuthorizedNamespaceWritablePreflight
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-6WRHNA4I.js";
|
|
25
25
|
import {
|
|
26
26
|
parseSharedWriteOutputControls
|
|
27
27
|
} from "./chunk-IFBSZGW3.js";
|
|
28
28
|
import {
|
|
29
29
|
validateBriefingFormat
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-ZRUC7FD3.js";
|
|
31
31
|
import {
|
|
32
32
|
parseDeepRecallMaxSteps
|
|
33
33
|
} from "./chunk-A7AISUJI.js";
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
recallRequestSchema,
|
|
37
37
|
retainedCategoryAlias,
|
|
38
38
|
suggestionSubmitRequestSchema
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-OFGTRDWX.js";
|
|
40
40
|
import {
|
|
41
41
|
enforceNamespaceAllowList,
|
|
42
42
|
tokenCapabilityStore
|
|
@@ -603,4 +603,4 @@ defineOperation({ name: "graph_events", description: "SSE graph events.", schema
|
|
|
603
603
|
defineOperation({ name: "chat_message", description: "Chat message.", schema: strictSchema({ message: S.str, chatSessionId: S.str }), handler: async (_i, _ctx) => ({ result: { ok: true } }) });
|
|
604
604
|
defineOperation({ name: "chat_events", description: "SSE chat events.", schema: strictSchema({}), handler: async (_i, _ctx) => ({ result: { stream: "sse" } }) });
|
|
605
605
|
defineOperation({ name: "adapters_status", description: "Adapter registry metadata (issue #1850 round 5). Marker op: the HTTP transport builds the response from its own adapterRegistry, but the op still must be registered so it appears in listRegisteredOperations and enforceTokenOp can gate it for scoped tokens.", schema: strictSchema({}), handler: async (_i, _ctx) => ({ result: { ok: true } }) });
|
|
606
|
-
//# sourceMappingURL=chunk-
|
|
606
|
+
//# sourceMappingURL=chunk-WR66CTVU.js.map
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
listMemoryGovernanceRuns,
|
|
9
9
|
readMemoryGovernanceRunArtifact
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-VO2BNAA2.js";
|
|
11
11
|
import {
|
|
12
12
|
StorageManager
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-E4XLFYHV.js";
|
|
14
14
|
import {
|
|
15
15
|
normalizeProjectionPreview,
|
|
16
16
|
normalizeProjectionTags
|
|
@@ -370,7 +370,7 @@ function deduplicateTimelineEvents(events, sourcePathFor) {
|
|
|
370
370
|
}
|
|
371
371
|
async function loadAuthoritativeProjectionSnapshot(options) {
|
|
372
372
|
const storage = assertInjectedStorageRooted("rebuildMemoryProjection", options.memoryDir, options.storage) ?? new StorageManager(options.memoryDir);
|
|
373
|
-
storage.invalidateAllMemoriesCacheForDir();
|
|
373
|
+
storage.invalidateAllMemoriesCacheForDir({ indexedText: false });
|
|
374
374
|
const selected = selectProjectionMemories([
|
|
375
375
|
await storage.readAllMemories(),
|
|
376
376
|
await storage.readAllColdMemories(),
|
|
@@ -1005,4 +1005,4 @@ export {
|
|
|
1005
1005
|
verifyMemoryProjection,
|
|
1006
1006
|
repairMemoryProjection
|
|
1007
1007
|
};
|
|
1008
|
-
//# sourceMappingURL=chunk-
|
|
1008
|
+
//# sourceMappingURL=chunk-XLWMNDQR.js.map
|