@remnic/core 9.69.6 → 9.69.8
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 +26 -26
- package/dist/access-authorization-probe.js +27 -27
- package/dist/access-boundary.js +26 -26
- package/dist/access-cli.js +84 -84
- package/dist/access-extraction-force-flush.js +26 -26
- package/dist/access-http-query.js +28 -28
- package/dist/access-http.js +44 -44
- package/dist/access-identity-continuity-surface.js +26 -26
- package/dist/access-lcm-surface.js +26 -26
- package/dist/access-mcp.js +35 -35
- package/dist/access-namespace-preflight.js +26 -26
- package/dist/access-observe-write-surface.js +26 -26
- package/dist/access-offline-manifest.js +3 -3
- package/dist/access-operations-batch.js +29 -29
- package/dist/access-operations.js +34 -34
- package/dist/access-recall-concurrency.js +26 -26
- package/dist/access-recall-response.js +26 -26
- package/dist/access-recall-surface.js +26 -26
- package/dist/access-schema.js +5 -5
- package/dist/access-service.js +26 -26
- package/dist/access-surface-catalog.js +28 -28
- package/dist/active-recall.js +5 -5
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/registry.js +3 -3
- package/dist/briefing.js +6 -6
- package/dist/buffer.js +3 -3
- package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.js +9 -9
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.js +2 -2
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-7RZJWZ46.js → chunk-227UFSEQ.js} +5 -5
- package/dist/{chunk-QA6H4PIO.js → chunk-26JWBSWD.js} +3 -3
- package/dist/{chunk-7VA7PARC.js → chunk-2MW3UQNX.js} +2 -2
- package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
- package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
- package/dist/{chunk-P6GKRT2H.js → chunk-2Z3DG5CQ.js} +1 -1
- package/dist/{chunk-6EXRODDF.js → chunk-3FXXFLVK.js} +2 -2
- package/dist/{chunk-XOGYSWQZ.js → chunk-3QWF54M4.js} +18 -18
- package/dist/{chunk-YTCE2JQL.js → chunk-44HBCMOA.js} +99 -48
- package/dist/chunk-44HBCMOA.js.map +1 -0
- package/dist/{chunk-IE7N2YK6.js → chunk-4PJYD2L3.js} +2 -2
- package/dist/{chunk-MWLBRFLY.js → chunk-5PTS43CH.js} +2 -2
- package/dist/{chunk-NM5EOKN7.js → chunk-6C57JBJ3.js} +2 -2
- package/dist/{chunk-WTWHORVW.js → chunk-754GA2UE.js} +5 -5
- package/dist/{chunk-VDX2J7OX.js → chunk-7LCGFUMB.js} +4 -4
- package/dist/{chunk-YPNTBYEV.js → chunk-A3WMMQAH.js} +3 -3
- package/dist/{chunk-SZZGVXKC.js → chunk-ANN5VMHT.js} +2 -2
- package/dist/{chunk-OLBZ2WGG.js → chunk-C2JCVZWX.js} +2 -2
- package/dist/{chunk-7DXW5V2W.js → chunk-CTCGHNWN.js} +5 -5
- package/dist/{chunk-JJAOVJ3E.js → chunk-DJZWNKFO.js} +2 -2
- package/dist/{chunk-PY5E3UOD.js → chunk-DKZR56A3.js} +2 -2
- package/dist/{chunk-6JYTP3JP.js → chunk-E5WTGEWX.js} +3 -3
- package/dist/{chunk-WAPSYHNR.js → chunk-EN75MUTO.js} +5 -5
- package/dist/{chunk-OMA2B7GY.js → chunk-G4MCAHMF.js} +2 -2
- package/dist/{chunk-EJJ57PTY.js → chunk-GD7D7WP2.js} +2 -2
- package/dist/{chunk-X3DTN2RC.js → chunk-GFGQOZGG.js} +10 -10
- package/dist/{chunk-EVLHZ6F3.js → chunk-GISV63M2.js} +2 -2
- package/dist/{chunk-YERBUSU2.js → chunk-H3HOC6UT.js} +2 -2
- package/dist/{chunk-AJFKQJQK.js → chunk-HINMCD7V.js} +2 -2
- package/dist/{chunk-ISDSX7GW.js → chunk-IGUWU5BD.js} +1 -1
- package/dist/{chunk-W6V2XVUO.js → chunk-IIO4C3YL.js} +4 -4
- package/dist/{chunk-SKVSBTFQ.js → chunk-IWO4HEOL.js} +2 -2
- package/dist/{chunk-TB2MJRI6.js → chunk-J3NGQ5SC.js} +2 -2
- package/dist/chunk-J3NGQ5SC.js.map +1 -0
- package/dist/{chunk-ZIZUB6VB.js → chunk-J55NAXDH.js} +34 -34
- package/dist/{chunk-3X7Z467X.js → chunk-JAU4MRKB.js} +2 -2
- package/dist/{chunk-XJJYSX6F.js → chunk-JCUG7AXZ.js} +4 -4
- package/dist/{chunk-BX6GW4KC.js → chunk-JMAG7WZ7.js} +2 -2
- package/dist/{chunk-NAB4MKTJ.js → chunk-KAVQ5GYY.js} +6 -5
- package/dist/{chunk-NAB4MKTJ.js.map → chunk-KAVQ5GYY.js.map} +1 -1
- package/dist/{chunk-MDQXW235.js → chunk-KLL5SPER.js} +2 -2
- package/dist/{chunk-DD2BKHSD.js → chunk-KZMFU7YL.js} +2 -2
- package/dist/{chunk-C5FRCM4B.js → chunk-LHGIBXVX.js} +2 -2
- package/dist/{chunk-CGFDT752.js → chunk-LVYO2HZJ.js} +4 -4
- package/dist/{chunk-TP3N5364.js → chunk-M5GBTETG.js} +2 -2
- package/dist/{chunk-PGD3DXZP.js → chunk-M5UJJUON.js} +3 -3
- package/dist/{chunk-HDEQRI2O.js → chunk-NAZROP6I.js} +2 -2
- package/dist/{chunk-R3YVNAJB.js → chunk-NDE7CH6C.js} +2 -2
- package/dist/{chunk-BIJAWZYW.js → chunk-OLT3YTDH.js} +4 -4
- package/dist/{chunk-4OH6FGAO.js → chunk-PEOFTEUC.js} +12 -12
- package/dist/{chunk-GM35IHF7.js → chunk-PRK4WTPU.js} +2 -2
- package/dist/{chunk-MOUCCUET.js → chunk-QGUFN25Q.js} +2 -2
- package/dist/{chunk-5HP6LVWU.js → chunk-QHYSECIG.js} +2 -2
- package/dist/{chunk-SZ3SRRYZ.js → chunk-RXS4SQ5S.js} +2 -2
- package/dist/{chunk-6KQLDPKA.js → chunk-S6AHHQ6C.js} +2 -2
- package/dist/{chunk-R4FPBSFD.js → chunk-SO73GYOZ.js} +2 -2
- package/dist/{chunk-M4MNLPO7.js → chunk-SXQZMC7R.js} +2 -2
- package/dist/{chunk-JHTF22NQ.js → chunk-TA7UZZMW.js} +2 -2
- package/dist/{chunk-UJICQ77Y.js → chunk-UCNQV43K.js} +2 -2
- package/dist/{chunk-OUAK37ID.js → chunk-VGTXHTWU.js} +2 -2
- package/dist/{chunk-TGDFKC7X.js → chunk-VOPOPTZ7.js} +2 -2
- package/dist/{chunk-IFHT77WK.js → chunk-WF2WCZCR.js} +2 -2
- package/dist/{chunk-6F5WBXE2.js → chunk-X2NFFBTO.js} +4 -4
- package/dist/{chunk-IHFN3JTR.js → chunk-X5TGZAP2.js} +3 -3
- package/dist/{chunk-RJ57OOCD.js → chunk-X66BHMAU.js} +2 -2
- package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
- package/dist/{chunk-FGV7V2N4.js → chunk-Y3WMJAZ3.js} +2 -2
- package/dist/{chunk-ZET6A3OF.js → chunk-YHCBJULX.js} +2 -2
- package/dist/{chunk-LGVIKA7O.js → chunk-YJPFTF57.js} +6 -6
- package/dist/{chunk-EAG7YMIS.js → chunk-YVMTXBJJ.js} +2 -2
- package/dist/{chunk-OUKBMQ2O.js → chunk-Z3SQEEB6.js} +2 -2
- package/dist/{chunk-MVH7YAWY.js → chunk-ZPN6SSWA.js} +2 -2
- package/dist/cli.js +62 -62
- package/dist/coding/export-okf-codegraph.js +6 -6
- package/dist/coding/pre-action-gate.js +2 -2
- package/dist/compounding/engine.js +6 -6
- package/dist/config.js +5 -5
- package/dist/connectors/codex-materialize-runner.js +6 -6
- package/dist/connectors/index.js +6 -6
- package/dist/convergence-refresh.js +8 -8
- package/dist/conversation-index/backend.js +2 -2
- package/dist/corpus-watermark.js +8 -8
- package/dist/entity-retrieval.js +6 -6
- package/dist/external-wiki-access.js +27 -27
- package/dist/extraction-span-source-hash.d.ts +45 -0
- package/dist/extraction-span-source-hash.js +52 -0
- package/dist/extraction-span-source-hash.js.map +1 -0
- package/dist/extraction.js +10 -10
- package/dist/{graph-edge-decay-FXGELBFA.js → graph-edge-decay-DGTBFALQ.js} +4 -4
- package/dist/graph-snapshot.js +3 -3
- package/dist/graph.js +2 -2
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/index.d.ts +14 -1
- package/dist/index.js +94 -90
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.js +2 -2
- package/dist/location/index.js +9 -9
- package/dist/maintenance/memory-governance.js +6 -6
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +6 -6
- package/dist/maintenance/rebuild-memory-projection.js +7 -7
- package/dist/namespaces/migrate.js +7 -7
- package/dist/namespaces/search.js +4 -4
- package/dist/namespaces/storage.js +6 -6
- package/dist/offline-sync.js +2 -2
- package/dist/operator-doctor-corpus.js +9 -9
- package/dist/operator-toolkit.js +21 -21
- package/dist/orchestration/maintenance.js +15 -15
- package/dist/orchestrator.js +86 -86
- package/dist/recall-state-view-zero-diff.d.ts +23 -0
- package/dist/recall-state-view-zero-diff.js +84 -0
- package/dist/recall-state-view-zero-diff.js.map +1 -0
- package/dist/reconcile/cursor.js +7 -2
- package/dist/reconcile/cursor.js.map +1 -1
- package/dist/resume-bundles.js +6 -6
- package/dist/search/factory.js +3 -3
- package/dist/search/index.js +3 -3
- package/dist/semantic-consolidation.js +7 -7
- package/dist/semantic-rule-promotion.js +6 -6
- package/dist/semantic-rule-verifier.js +6 -6
- package/dist/source-agent-qualifier.js +9 -9
- package/dist/standup/build.js +6 -6
- package/dist/storage.js +5 -5
- package/dist/support-passport/index.js +29 -29
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +2 -2
- package/dist/transfer/export-okf.d.ts +2 -1
- package/dist/transfer/export-okf.js +9 -7
- package/dist/verified-recall.js +6 -6
- package/dist/who-knows-cli.js +7 -7
- package/dist/who-knows.js +6 -6
- package/package.json +2 -2
- package/src/activity/timeline/index.ts +1 -0
- package/src/activity/timeline/week-config-hash.test.ts +207 -0
- package/src/activity/timeline/week-config-hash.ts +83 -0
- package/src/extraction-span-source-hash.test.ts +165 -0
- package/src/extraction-span-source-hash.ts +100 -0
- package/src/location/matching.test.ts +31 -1
- package/src/location/matching.ts +6 -1
- package/src/recall-state-view-zero-diff.test.ts +282 -0
- package/src/recall-state-view-zero-diff.ts +125 -0
- package/src/reconcile/cursor.test.ts +18 -0
- package/src/reconcile/cursor.ts +13 -2
- package/src/shared-context/authority-precedence.test.ts +127 -0
- package/src/shared-context/authority-precedence.ts +68 -0
- package/src/transfer/export-okf.test.ts +22 -0
- package/src/transfer/export-okf.ts +6 -2
- package/dist/chunk-TB2MJRI6.js.map +0 -1
- package/dist/chunk-YTCE2JQL.js.map +0 -1
- /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
- /package/dist/{chunk-7RZJWZ46.js.map → chunk-227UFSEQ.js.map} +0 -0
- /package/dist/{chunk-QA6H4PIO.js.map → chunk-26JWBSWD.js.map} +0 -0
- /package/dist/{chunk-7VA7PARC.js.map → chunk-2MW3UQNX.js.map} +0 -0
- /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
- /package/dist/{chunk-P6GKRT2H.js.map → chunk-2Z3DG5CQ.js.map} +0 -0
- /package/dist/{chunk-6EXRODDF.js.map → chunk-3FXXFLVK.js.map} +0 -0
- /package/dist/{chunk-XOGYSWQZ.js.map → chunk-3QWF54M4.js.map} +0 -0
- /package/dist/{chunk-IE7N2YK6.js.map → chunk-4PJYD2L3.js.map} +0 -0
- /package/dist/{chunk-MWLBRFLY.js.map → chunk-5PTS43CH.js.map} +0 -0
- /package/dist/{chunk-NM5EOKN7.js.map → chunk-6C57JBJ3.js.map} +0 -0
- /package/dist/{chunk-WTWHORVW.js.map → chunk-754GA2UE.js.map} +0 -0
- /package/dist/{chunk-VDX2J7OX.js.map → chunk-7LCGFUMB.js.map} +0 -0
- /package/dist/{chunk-YPNTBYEV.js.map → chunk-A3WMMQAH.js.map} +0 -0
- /package/dist/{chunk-SZZGVXKC.js.map → chunk-ANN5VMHT.js.map} +0 -0
- /package/dist/{chunk-OLBZ2WGG.js.map → chunk-C2JCVZWX.js.map} +0 -0
- /package/dist/{chunk-7DXW5V2W.js.map → chunk-CTCGHNWN.js.map} +0 -0
- /package/dist/{chunk-JJAOVJ3E.js.map → chunk-DJZWNKFO.js.map} +0 -0
- /package/dist/{chunk-PY5E3UOD.js.map → chunk-DKZR56A3.js.map} +0 -0
- /package/dist/{chunk-6JYTP3JP.js.map → chunk-E5WTGEWX.js.map} +0 -0
- /package/dist/{chunk-WAPSYHNR.js.map → chunk-EN75MUTO.js.map} +0 -0
- /package/dist/{chunk-OMA2B7GY.js.map → chunk-G4MCAHMF.js.map} +0 -0
- /package/dist/{chunk-EJJ57PTY.js.map → chunk-GD7D7WP2.js.map} +0 -0
- /package/dist/{chunk-X3DTN2RC.js.map → chunk-GFGQOZGG.js.map} +0 -0
- /package/dist/{chunk-EVLHZ6F3.js.map → chunk-GISV63M2.js.map} +0 -0
- /package/dist/{chunk-YERBUSU2.js.map → chunk-H3HOC6UT.js.map} +0 -0
- /package/dist/{chunk-AJFKQJQK.js.map → chunk-HINMCD7V.js.map} +0 -0
- /package/dist/{chunk-ISDSX7GW.js.map → chunk-IGUWU5BD.js.map} +0 -0
- /package/dist/{chunk-W6V2XVUO.js.map → chunk-IIO4C3YL.js.map} +0 -0
- /package/dist/{chunk-SKVSBTFQ.js.map → chunk-IWO4HEOL.js.map} +0 -0
- /package/dist/{chunk-ZIZUB6VB.js.map → chunk-J55NAXDH.js.map} +0 -0
- /package/dist/{chunk-3X7Z467X.js.map → chunk-JAU4MRKB.js.map} +0 -0
- /package/dist/{chunk-XJJYSX6F.js.map → chunk-JCUG7AXZ.js.map} +0 -0
- /package/dist/{chunk-BX6GW4KC.js.map → chunk-JMAG7WZ7.js.map} +0 -0
- /package/dist/{chunk-MDQXW235.js.map → chunk-KLL5SPER.js.map} +0 -0
- /package/dist/{chunk-DD2BKHSD.js.map → chunk-KZMFU7YL.js.map} +0 -0
- /package/dist/{chunk-C5FRCM4B.js.map → chunk-LHGIBXVX.js.map} +0 -0
- /package/dist/{chunk-CGFDT752.js.map → chunk-LVYO2HZJ.js.map} +0 -0
- /package/dist/{chunk-TP3N5364.js.map → chunk-M5GBTETG.js.map} +0 -0
- /package/dist/{chunk-PGD3DXZP.js.map → chunk-M5UJJUON.js.map} +0 -0
- /package/dist/{chunk-HDEQRI2O.js.map → chunk-NAZROP6I.js.map} +0 -0
- /package/dist/{chunk-R3YVNAJB.js.map → chunk-NDE7CH6C.js.map} +0 -0
- /package/dist/{chunk-BIJAWZYW.js.map → chunk-OLT3YTDH.js.map} +0 -0
- /package/dist/{chunk-4OH6FGAO.js.map → chunk-PEOFTEUC.js.map} +0 -0
- /package/dist/{chunk-GM35IHF7.js.map → chunk-PRK4WTPU.js.map} +0 -0
- /package/dist/{chunk-MOUCCUET.js.map → chunk-QGUFN25Q.js.map} +0 -0
- /package/dist/{chunk-5HP6LVWU.js.map → chunk-QHYSECIG.js.map} +0 -0
- /package/dist/{chunk-SZ3SRRYZ.js.map → chunk-RXS4SQ5S.js.map} +0 -0
- /package/dist/{chunk-6KQLDPKA.js.map → chunk-S6AHHQ6C.js.map} +0 -0
- /package/dist/{chunk-R4FPBSFD.js.map → chunk-SO73GYOZ.js.map} +0 -0
- /package/dist/{chunk-M4MNLPO7.js.map → chunk-SXQZMC7R.js.map} +0 -0
- /package/dist/{chunk-JHTF22NQ.js.map → chunk-TA7UZZMW.js.map} +0 -0
- /package/dist/{chunk-UJICQ77Y.js.map → chunk-UCNQV43K.js.map} +0 -0
- /package/dist/{chunk-OUAK37ID.js.map → chunk-VGTXHTWU.js.map} +0 -0
- /package/dist/{chunk-TGDFKC7X.js.map → chunk-VOPOPTZ7.js.map} +0 -0
- /package/dist/{chunk-IFHT77WK.js.map → chunk-WF2WCZCR.js.map} +0 -0
- /package/dist/{chunk-6F5WBXE2.js.map → chunk-X2NFFBTO.js.map} +0 -0
- /package/dist/{chunk-IHFN3JTR.js.map → chunk-X5TGZAP2.js.map} +0 -0
- /package/dist/{chunk-RJ57OOCD.js.map → chunk-X66BHMAU.js.map} +0 -0
- /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
- /package/dist/{chunk-FGV7V2N4.js.map → chunk-Y3WMJAZ3.js.map} +0 -0
- /package/dist/{chunk-ZET6A3OF.js.map → chunk-YHCBJULX.js.map} +0 -0
- /package/dist/{chunk-LGVIKA7O.js.map → chunk-YJPFTF57.js.map} +0 -0
- /package/dist/{chunk-EAG7YMIS.js.map → chunk-YVMTXBJJ.js.map} +0 -0
- /package/dist/{chunk-OUKBMQ2O.js.map → chunk-Z3SQEEB6.js.map} +0 -0
- /package/dist/{chunk-MVH7YAWY.js.map → chunk-ZPN6SSWA.js.map} +0 -0
- /package/dist/{graph-edge-decay-FXGELBFA.js.map → graph-edge-decay-DGTBFALQ.js.map} +0 -0
package/dist/orchestrator.js
CHANGED
|
@@ -3,46 +3,46 @@ import {
|
|
|
3
3
|
blendGraphExpandedRecallScore,
|
|
4
4
|
graphPathRelativeToStorage,
|
|
5
5
|
mergeGraphExpandedResults
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-44HBCMOA.js";
|
|
7
7
|
import "./chunk-3TSU662L.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-WAPSYHNR.js";
|
|
10
|
-
import "./chunk-I74SUMNI.js";
|
|
11
|
-
import "./chunk-ILNPU5W5.js";
|
|
12
|
-
import "./chunk-7HYPN2GC.js";
|
|
8
|
+
import "./chunk-KZMFU7YL.js";
|
|
13
9
|
import {
|
|
14
10
|
formatCompressionGuidelinesForRecall
|
|
15
11
|
} from "./chunk-UXREWVW4.js";
|
|
12
|
+
import "./chunk-EN75MUTO.js";
|
|
13
|
+
import "./chunk-I74SUMNI.js";
|
|
14
|
+
import "./chunk-ILNPU5W5.js";
|
|
15
|
+
import "./chunk-7HYPN2GC.js";
|
|
16
16
|
import "./chunk-666A3MOW.js";
|
|
17
|
-
import "./chunk-3X7Z467X.js";
|
|
18
|
-
import "./chunk-KBL3JJR6.js";
|
|
19
|
-
import "./chunk-FQ7HAWWC.js";
|
|
20
17
|
import "./chunk-VDC6RZI4.js";
|
|
21
18
|
import "./chunk-UWK5OXUJ.js";
|
|
22
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-JAU4MRKB.js";
|
|
20
|
+
import "./chunk-KBL3JJR6.js";
|
|
21
|
+
import "./chunk-FQ7HAWWC.js";
|
|
22
|
+
import "./chunk-X2NFFBTO.js";
|
|
23
|
+
import "./chunk-TPDBFYEG.js";
|
|
23
24
|
import "./chunk-UXPUUL3G.js";
|
|
24
25
|
import "./chunk-DDA47TES.js";
|
|
25
26
|
import "./chunk-KOLJJN5G.js";
|
|
26
27
|
import "./chunk-WVP2I6C5.js";
|
|
27
28
|
import "./chunk-7N4KAIGN.js";
|
|
28
|
-
import "./chunk-TPDBFYEG.js";
|
|
29
29
|
import "./chunk-V5OCT34X.js";
|
|
30
30
|
import "./chunk-TECVW3JP.js";
|
|
31
31
|
import "./chunk-C5JF6EZ7.js";
|
|
32
|
-
import "./chunk-
|
|
32
|
+
import "./chunk-PRK4WTPU.js";
|
|
33
33
|
import "./chunk-VI637ILW.js";
|
|
34
|
+
import "./chunk-VOPOPTZ7.js";
|
|
35
|
+
import "./chunk-47DU4SGJ.js";
|
|
34
36
|
import "./chunk-SEF4IOFE.js";
|
|
35
|
-
import "./chunk-TGDFKC7X.js";
|
|
36
37
|
import "./chunk-KVDUKH5E.js";
|
|
37
|
-
import "./chunk-
|
|
38
|
+
import "./chunk-2NKY7OC6.js";
|
|
38
39
|
import "./chunk-4EX5WZ4M.js";
|
|
39
40
|
import "./chunk-YRFAYOFQ.js";
|
|
40
41
|
import "./chunk-DD5JFCWM.js";
|
|
41
42
|
import "./chunk-ECZU5BJH.js";
|
|
42
|
-
import "./chunk-T67LUYCR.js";
|
|
43
|
-
import "./chunk-2NKY7OC6.js";
|
|
44
43
|
import "./chunk-IEZ6CGTW.js";
|
|
45
44
|
import "./chunk-6DNMUYEE.js";
|
|
45
|
+
import "./chunk-T67LUYCR.js";
|
|
46
46
|
import "./chunk-ODZKV2F7.js";
|
|
47
47
|
import "./chunk-6TCXIRP5.js";
|
|
48
48
|
import "./chunk-QJ622LTI.js";
|
|
@@ -66,18 +66,18 @@ import "./chunk-573TEZCD.js";
|
|
|
66
66
|
import "./chunk-3GPTTA4J.js";
|
|
67
67
|
import "./chunk-IBJ6U753.js";
|
|
68
68
|
import "./chunk-HTIIXNJQ.js";
|
|
69
|
+
import "./chunk-MEW53VQJ.js";
|
|
69
70
|
import "./chunk-YAZNBMNF.js";
|
|
70
71
|
import "./chunk-XXSOVESA.js";
|
|
71
72
|
import "./chunk-PHRLJFWZ.js";
|
|
72
73
|
import "./chunk-64NJRYU2.js";
|
|
73
|
-
import "./chunk-
|
|
74
|
-
import "./chunk-
|
|
75
|
-
import "./chunk-OMA2B7GY.js";
|
|
76
|
-
import "./chunk-IE7N2YK6.js";
|
|
74
|
+
import "./chunk-G4MCAHMF.js";
|
|
75
|
+
import "./chunk-4PJYD2L3.js";
|
|
77
76
|
import "./chunk-AJTG3CP7.js";
|
|
78
77
|
import "./chunk-54V4BZWP.js";
|
|
79
78
|
import "./chunk-2CGLBUW3.js";
|
|
80
79
|
import "./chunk-WLZYGLJ4.js";
|
|
80
|
+
import "./chunk-OH7QLI6W.js";
|
|
81
81
|
import "./chunk-R4OCGPSH.js";
|
|
82
82
|
import "./chunk-HMKPFW7R.js";
|
|
83
83
|
import "./chunk-27IOSH2W.js";
|
|
@@ -96,7 +96,7 @@ import "./chunk-LUPVCGYK.js";
|
|
|
96
96
|
import "./chunk-BUYVPUEM.js";
|
|
97
97
|
import "./chunk-IAIPNEHD.js";
|
|
98
98
|
import "./chunk-DGFU5MSX.js";
|
|
99
|
-
import "./chunk-
|
|
99
|
+
import "./chunk-LHGIBXVX.js";
|
|
100
100
|
import "./chunk-GKUA4MGB.js";
|
|
101
101
|
import "./chunk-5AUY5Z5E.js";
|
|
102
102
|
import "./chunk-SVH57F5Z.js";
|
|
@@ -107,65 +107,65 @@ import "./chunk-VEWZZM3H.js";
|
|
|
107
107
|
import "./chunk-VY47VI2T.js";
|
|
108
108
|
import "./chunk-PYIR4SSB.js";
|
|
109
109
|
import "./chunk-DFEODULB.js";
|
|
110
|
-
import "./chunk-
|
|
111
|
-
import "./chunk-
|
|
110
|
+
import "./chunk-Y3WMJAZ3.js";
|
|
111
|
+
import "./chunk-J55NAXDH.js";
|
|
112
112
|
import "./chunk-MMACM5G2.js";
|
|
113
113
|
import "./chunk-54BGIBCR.js";
|
|
114
114
|
import "./chunk-H4CKS5B2.js";
|
|
115
115
|
import "./chunk-FXZTL7F7.js";
|
|
116
116
|
import "./chunk-HDDRVXX4.js";
|
|
117
117
|
import "./chunk-PYHOAXTI.js";
|
|
118
|
+
import "./chunk-2NLLXCJG.js";
|
|
118
119
|
import "./chunk-UP6MOYCB.js";
|
|
119
|
-
import "./chunk-
|
|
120
|
+
import "./chunk-KAVQ5GYY.js";
|
|
120
121
|
import "./chunk-BV2TIZ4F.js";
|
|
121
122
|
import "./chunk-Z734BLO3.js";
|
|
122
123
|
import "./chunk-OZKVVUJB.js";
|
|
123
124
|
import "./chunk-2DL3OFLD.js";
|
|
124
125
|
import "./chunk-G4IAEX6D.js";
|
|
125
|
-
import "./chunk-BXLOS5AJ.js";
|
|
126
126
|
import "./chunk-765K3SAT.js";
|
|
127
127
|
import "./chunk-TBUEE7XF.js";
|
|
128
|
+
import "./chunk-PYIFUBRK.js";
|
|
128
129
|
import "./chunk-FGDKJJZS.js";
|
|
129
130
|
import "./chunk-AJVLDJU6.js";
|
|
131
|
+
import "./chunk-DQTCGVFK.js";
|
|
130
132
|
import "./chunk-EEC4PCG5.js";
|
|
131
|
-
import "./chunk-PYIFUBRK.js";
|
|
132
133
|
import "./chunk-IIFFC3RL.js";
|
|
133
|
-
import "./chunk-7VA7PARC.js";
|
|
134
|
-
import "./chunk-DQTCGVFK.js";
|
|
135
134
|
import "./chunk-AXFWMRKI.js";
|
|
135
|
+
import "./chunk-2MW3UQNX.js";
|
|
136
136
|
import "./chunk-YLBE6PLR.js";
|
|
137
|
+
import "./chunk-IWO4HEOL.js";
|
|
137
138
|
import "./chunk-CDKHKZL5.js";
|
|
138
139
|
import "./chunk-HSSERO3E.js";
|
|
139
140
|
import "./chunk-NOUJNHWG.js";
|
|
140
|
-
import "./chunk-SKVSBTFQ.js";
|
|
141
141
|
import "./chunk-HDQUQBPW.js";
|
|
142
142
|
import "./chunk-6FC3IZ26.js";
|
|
143
|
-
import "./chunk-
|
|
143
|
+
import "./chunk-QGUFN25Q.js";
|
|
144
144
|
import "./chunk-HL4DB7TO.js";
|
|
145
145
|
import "./chunk-OJP3N7UK.js";
|
|
146
|
-
import "./chunk-
|
|
147
|
-
import "./chunk-
|
|
148
|
-
import "./chunk-
|
|
146
|
+
import "./chunk-SO73GYOZ.js";
|
|
147
|
+
import "./chunk-GISV63M2.js";
|
|
148
|
+
import "./chunk-SXQZMC7R.js";
|
|
149
149
|
import "./chunk-NRLELHAY.js";
|
|
150
150
|
import "./chunk-AM4T6CHX.js";
|
|
151
151
|
import "./chunk-X5PIDJ3L.js";
|
|
152
152
|
import "./chunk-3T74IZB3.js";
|
|
153
153
|
import "./chunk-2LA3H54D.js";
|
|
154
|
-
import "./chunk-
|
|
155
|
-
import "./chunk-
|
|
154
|
+
import "./chunk-GFGQOZGG.js";
|
|
155
|
+
import "./chunk-X5TGZAP2.js";
|
|
156
156
|
import "./chunk-KFY3SGN7.js";
|
|
157
157
|
import "./chunk-CMTINOFS.js";
|
|
158
|
-
import "./chunk-
|
|
158
|
+
import "./chunk-QHYSECIG.js";
|
|
159
159
|
import "./chunk-RMMVQQA6.js";
|
|
160
160
|
import "./chunk-UR6PBX2J.js";
|
|
161
161
|
import "./chunk-6GUG4YNM.js";
|
|
162
|
-
import "./chunk-
|
|
162
|
+
import "./chunk-IGUWU5BD.js";
|
|
163
163
|
import "./chunk-UOBPK2OS.js";
|
|
164
164
|
import "./chunk-C7SRUWBW.js";
|
|
165
165
|
import "./chunk-OZKOPQCM.js";
|
|
166
166
|
import "./chunk-MCA2X4WH.js";
|
|
167
167
|
import "./chunk-CIO7GCWE.js";
|
|
168
|
-
import "./chunk-
|
|
168
|
+
import "./chunk-E5WTGEWX.js";
|
|
169
169
|
import "./chunk-KJTKLXTH.js";
|
|
170
170
|
import "./chunk-2DQ2XREU.js";
|
|
171
171
|
import "./chunk-ACPCA4NO.js";
|
|
@@ -177,13 +177,13 @@ import "./chunk-OKTXM5H4.js";
|
|
|
177
177
|
import "./chunk-DUAJKRR2.js";
|
|
178
178
|
import "./chunk-NOB2T2FC.js";
|
|
179
179
|
import "./chunk-3I4FUAVJ.js";
|
|
180
|
-
import "./chunk-
|
|
180
|
+
import "./chunk-H3HOC6UT.js";
|
|
181
181
|
import "./chunk-5JMAGU26.js";
|
|
182
182
|
import "./chunk-YBPYIAA5.js";
|
|
183
183
|
import "./chunk-HK6KYIF6.js";
|
|
184
184
|
import "./chunk-2GBFKHBZ.js";
|
|
185
185
|
import "./chunk-6TBIWIAG.js";
|
|
186
|
-
import "./chunk-
|
|
186
|
+
import "./chunk-5PTS43CH.js";
|
|
187
187
|
import "./chunk-2AD5SXO4.js";
|
|
188
188
|
import "./chunk-7CBKAQIG.js";
|
|
189
189
|
import "./chunk-C6WMSXCJ.js";
|
|
@@ -196,12 +196,12 @@ import "./chunk-MI2OTWV5.js";
|
|
|
196
196
|
import "./chunk-43HUVDTD.js";
|
|
197
197
|
import "./chunk-4RA3C3EV.js";
|
|
198
198
|
import "./chunk-YFLLGRXO.js";
|
|
199
|
-
import "./chunk-
|
|
199
|
+
import "./chunk-26JWBSWD.js";
|
|
200
200
|
import "./chunk-ZKOPY4WW.js";
|
|
201
201
|
import "./chunk-62OKGIJA.js";
|
|
202
202
|
import "./chunk-KJUWWN3T.js";
|
|
203
203
|
import "./chunk-TEZ2HTC7.js";
|
|
204
|
-
import "./chunk-
|
|
204
|
+
import "./chunk-TA7UZZMW.js";
|
|
205
205
|
import "./chunk-SN4JXNLL.js";
|
|
206
206
|
import "./chunk-Z5LAYHGJ.js";
|
|
207
207
|
import "./chunk-6ZMAMSHS.js";
|
|
@@ -216,42 +216,42 @@ import "./chunk-JI7U6AS3.js";
|
|
|
216
216
|
import "./chunk-KFZY2OFH.js";
|
|
217
217
|
import "./chunk-B32WYRXX.js";
|
|
218
218
|
import "./chunk-QW27DOHG.js";
|
|
219
|
-
import "./chunk-
|
|
219
|
+
import "./chunk-PEOFTEUC.js";
|
|
220
220
|
import "./chunk-V7IZKJI3.js";
|
|
221
221
|
import "./chunk-SEDEKFYQ.js";
|
|
222
|
-
import "./chunk-
|
|
222
|
+
import "./chunk-2QSZNTDO.js";
|
|
223
|
+
import "./chunk-RSUYKGGZ.js";
|
|
224
|
+
import "./chunk-42NQ7AVG.js";
|
|
223
225
|
import "./chunk-TMSXWOBZ.js";
|
|
224
226
|
import "./chunk-TB6CBZ5V.js";
|
|
225
227
|
import "./chunk-J64TK33U.js";
|
|
226
|
-
import "./chunk-RSUYKGGZ.js";
|
|
227
|
-
import "./chunk-42NQ7AVG.js";
|
|
228
228
|
import "./chunk-7RXCMVFQ.js";
|
|
229
229
|
import "./chunk-3HSRWJTC.js";
|
|
230
|
-
import "./chunk-
|
|
231
|
-
import "./chunk-
|
|
232
|
-
import "./chunk-
|
|
230
|
+
import "./chunk-DKZR56A3.js";
|
|
231
|
+
import "./chunk-3FXXFLVK.js";
|
|
232
|
+
import "./chunk-LVYO2HZJ.js";
|
|
233
233
|
import "./chunk-4OFKZAJG.js";
|
|
234
234
|
import "./chunk-A5KNZSNA.js";
|
|
235
235
|
import "./chunk-D24OXEPB.js";
|
|
236
|
-
import "./chunk-
|
|
237
|
-
import "./chunk-
|
|
238
|
-
import "./chunk-
|
|
239
|
-
import "./chunk-
|
|
240
|
-
import "./chunk-
|
|
236
|
+
import "./chunk-YJPFTF57.js";
|
|
237
|
+
import "./chunk-HINMCD7V.js";
|
|
238
|
+
import "./chunk-VGTXHTWU.js";
|
|
239
|
+
import "./chunk-IIO4C3YL.js";
|
|
240
|
+
import "./chunk-M5GBTETG.js";
|
|
241
241
|
import "./chunk-7T4TOGMS.js";
|
|
242
242
|
import "./chunk-7YQ6ESEA.js";
|
|
243
243
|
import "./chunk-ZQUVBZI4.js";
|
|
244
|
-
import "./chunk-
|
|
245
|
-
import "./chunk-
|
|
244
|
+
import "./chunk-754GA2UE.js";
|
|
245
|
+
import "./chunk-C2JCVZWX.js";
|
|
246
246
|
import "./chunk-EQWEIIKQ.js";
|
|
247
247
|
import "./chunk-JTWZKNUH.js";
|
|
248
248
|
import "./chunk-YYGZJPOK.js";
|
|
249
249
|
import "./chunk-CTVWELNK.js";
|
|
250
250
|
import "./chunk-CEN6DW6X.js";
|
|
251
251
|
import "./chunk-E4RMZGRS.js";
|
|
252
|
-
import "./chunk-
|
|
253
|
-
import "./chunk-
|
|
254
|
-
import "./chunk-
|
|
252
|
+
import "./chunk-M5UJJUON.js";
|
|
253
|
+
import "./chunk-YVMTXBJJ.js";
|
|
254
|
+
import "./chunk-RXS4SQ5S.js";
|
|
255
255
|
import "./chunk-AB3A7EFH.js";
|
|
256
256
|
import "./chunk-K4E3Y3ZX.js";
|
|
257
257
|
import "./chunk-SRT6SHVZ.js";
|
|
@@ -260,19 +260,19 @@ import "./chunk-GZ3R6XOE.js";
|
|
|
260
260
|
import "./chunk-CK5KOVHW.js";
|
|
261
261
|
import "./chunk-DJUKBGAD.js";
|
|
262
262
|
import "./chunk-G73MCJKL.js";
|
|
263
|
-
import "./chunk-
|
|
263
|
+
import "./chunk-KLL5SPER.js";
|
|
264
264
|
import {
|
|
265
265
|
filterRecallCandidates,
|
|
266
266
|
hasIdentityRecoveryIntent,
|
|
267
267
|
resolveEffectiveIdentityInjectionMode
|
|
268
|
-
} from "./chunk-
|
|
268
|
+
} from "./chunk-3QWF54M4.js";
|
|
269
269
|
import "./chunk-GDASG7NC.js";
|
|
270
270
|
import "./chunk-GDB4J2H3.js";
|
|
271
|
-
import "./chunk-
|
|
271
|
+
import "./chunk-CTCGHNWN.js";
|
|
272
272
|
import "./chunk-QJCWK2A7.js";
|
|
273
273
|
import "./chunk-VQ7B2Q6M.js";
|
|
274
|
+
import "./chunk-6C57JBJ3.js";
|
|
274
275
|
import "./chunk-PJSK6OJM.js";
|
|
275
|
-
import "./chunk-NM5EOKN7.js";
|
|
276
276
|
import "./chunk-GNVZQ5JN.js";
|
|
277
277
|
import "./chunk-YN2UN7N3.js";
|
|
278
278
|
import "./chunk-5QZR2RA3.js";
|
|
@@ -283,7 +283,7 @@ import "./chunk-H7XKCNR6.js";
|
|
|
283
283
|
import "./chunk-H6RSANGQ.js";
|
|
284
284
|
import "./chunk-SOBJ6NEY.js";
|
|
285
285
|
import "./chunk-LK4TOYPU.js";
|
|
286
|
-
import "./chunk-
|
|
286
|
+
import "./chunk-NDE7CH6C.js";
|
|
287
287
|
import "./chunk-CVILPI77.js";
|
|
288
288
|
import "./chunk-2HIJHXB3.js";
|
|
289
289
|
import "./chunk-AQEJKOKI.js";
|
|
@@ -291,7 +291,7 @@ import "./chunk-HTP6XRUI.js";
|
|
|
291
291
|
import "./chunk-UD7UNYRD.js";
|
|
292
292
|
import "./chunk-IISBCCWR.js";
|
|
293
293
|
import "./chunk-2YA5N2BY.js";
|
|
294
|
-
import "./chunk-
|
|
294
|
+
import "./chunk-Z3SQEEB6.js";
|
|
295
295
|
import "./chunk-EI6V5UXY.js";
|
|
296
296
|
import "./chunk-J3JEW5CT.js";
|
|
297
297
|
import "./chunk-5TBO7CDR.js";
|
|
@@ -304,25 +304,25 @@ import "./chunk-LTHVM4XN.js";
|
|
|
304
304
|
import "./chunk-X5YYSAZX.js";
|
|
305
305
|
import "./chunk-C37ZRXX7.js";
|
|
306
306
|
import "./chunk-7ZNJN5WZ.js";
|
|
307
|
-
import "./chunk-
|
|
308
|
-
import "./chunk-
|
|
309
|
-
import "./chunk-
|
|
310
|
-
import "./chunk-
|
|
307
|
+
import "./chunk-ANN5VMHT.js";
|
|
308
|
+
import "./chunk-NAZROP6I.js";
|
|
309
|
+
import "./chunk-A3WMMQAH.js";
|
|
310
|
+
import "./chunk-GD7D7WP2.js";
|
|
311
311
|
import "./chunk-UFGFMWAD.js";
|
|
312
|
-
import "./chunk-
|
|
312
|
+
import "./chunk-S6AHHQ6C.js";
|
|
313
313
|
import "./chunk-3UXOZBHV.js";
|
|
314
314
|
import "./chunk-ZXBTTMGZ.js";
|
|
315
|
-
import "./chunk-
|
|
315
|
+
import "./chunk-OLT3YTDH.js";
|
|
316
|
+
import "./chunk-DEUNUKTD.js";
|
|
316
317
|
import "./chunk-LXY5VVGM.js";
|
|
317
318
|
import "./chunk-2LSZVONP.js";
|
|
318
|
-
import "./chunk-
|
|
319
|
-
import "./chunk-
|
|
320
|
-
import "./chunk-IFHT77WK.js";
|
|
319
|
+
import "./chunk-ZPN6SSWA.js";
|
|
320
|
+
import "./chunk-WF2WCZCR.js";
|
|
321
321
|
import "./chunk-UHVXE24Y.js";
|
|
322
322
|
import "./chunk-4ZWCQJNM.js";
|
|
323
323
|
import "./chunk-WVGXCBOC.js";
|
|
324
|
-
import "./chunk-
|
|
325
|
-
import "./chunk-
|
|
324
|
+
import "./chunk-YHCBJULX.js";
|
|
325
|
+
import "./chunk-DJZWNKFO.js";
|
|
326
326
|
import "./chunk-N37X5RU7.js";
|
|
327
327
|
import "./chunk-NNBZS3DY.js";
|
|
328
328
|
import "./chunk-CYEPCZN5.js";
|
|
@@ -331,10 +331,10 @@ import "./chunk-YQNNHLCG.js";
|
|
|
331
331
|
import "./chunk-W7IGLX4G.js";
|
|
332
332
|
import "./chunk-6KTXE6A3.js";
|
|
333
333
|
import "./chunk-GUMZC2BO.js";
|
|
334
|
-
import "./chunk-
|
|
335
|
-
import "./chunk-A7Q43EUZ.js";
|
|
334
|
+
import "./chunk-227UFSEQ.js";
|
|
336
335
|
import "./chunk-ET356KSB.js";
|
|
337
336
|
import "./chunk-72A4L5JJ.js";
|
|
337
|
+
import "./chunk-A7Q43EUZ.js";
|
|
338
338
|
import "./chunk-S2V7RUCL.js";
|
|
339
339
|
import "./chunk-XXW32OL7.js";
|
|
340
340
|
import "./chunk-S2HLHAZ4.js";
|
|
@@ -394,8 +394,8 @@ import {
|
|
|
394
394
|
throwIfRecallAborted,
|
|
395
395
|
tokenizeRecallQuery,
|
|
396
396
|
utcDateKeysForLocalDay
|
|
397
|
-
} from "./chunk-
|
|
398
|
-
import "./chunk-
|
|
397
|
+
} from "./chunk-UCNQV43K.js";
|
|
398
|
+
import "./chunk-J3NGQ5SC.js";
|
|
399
399
|
import "./chunk-CSAKJVXW.js";
|
|
400
400
|
import "./chunk-K2XUWZBM.js";
|
|
401
401
|
import "./chunk-OD4FM2U7.js";
|
|
@@ -431,7 +431,7 @@ import "./chunk-K6MV3TRQ.js";
|
|
|
431
431
|
import "./chunk-236PXYG7.js";
|
|
432
432
|
import "./chunk-ZCUTSMR2.js";
|
|
433
433
|
import "./chunk-QDW3E4RD.js";
|
|
434
|
-
import "./chunk-
|
|
434
|
+
import "./chunk-2Z3DG5CQ.js";
|
|
435
435
|
import "./chunk-NXH34IPL.js";
|
|
436
436
|
import "./chunk-ZIKENA2C.js";
|
|
437
437
|
import "./chunk-M6L7HI7R.js";
|
|
@@ -440,9 +440,9 @@ import "./chunk-6Q3ZTEF6.js";
|
|
|
440
440
|
import "./chunk-YCVB7X56.js";
|
|
441
441
|
import "./chunk-PQVCH2AE.js";
|
|
442
442
|
import "./chunk-PJKTFXE2.js";
|
|
443
|
-
import "./chunk-
|
|
443
|
+
import "./chunk-7LCGFUMB.js";
|
|
444
|
+
import "./chunk-X7Y7WX73.js";
|
|
444
445
|
import "./chunk-WEHSQBFR.js";
|
|
445
|
-
import "./chunk-DQEMWVMT.js";
|
|
446
446
|
import "./chunk-J4EB7DNW.js";
|
|
447
447
|
import "./chunk-BJMBJZ2Y.js";
|
|
448
448
|
import "./chunk-UKJAGEXH.js";
|
|
@@ -453,7 +453,7 @@ import "./chunk-SOAU2OE2.js";
|
|
|
453
453
|
import "./chunk-3QL24R5Y.js";
|
|
454
454
|
import "./chunk-ZN7SMKAK.js";
|
|
455
455
|
import "./chunk-LNEWDF2A.js";
|
|
456
|
-
import "./chunk-
|
|
456
|
+
import "./chunk-X66BHMAU.js";
|
|
457
457
|
import "./chunk-DDX6KIXF.js";
|
|
458
458
|
import "./chunk-ZRUEP4IK.js";
|
|
459
459
|
import "./chunk-2OXIPF3A.js";
|
|
@@ -476,11 +476,11 @@ import "./chunk-5FVVY2EB.js";
|
|
|
476
476
|
import "./chunk-JDSVLVCG.js";
|
|
477
477
|
import "./chunk-5GKPFL3S.js";
|
|
478
478
|
import "./chunk-JAKIDQB2.js";
|
|
479
|
-
import "./chunk-
|
|
479
|
+
import "./chunk-JCUG7AXZ.js";
|
|
480
480
|
import "./chunk-UI3NYK34.js";
|
|
481
481
|
import "./chunk-GCGJW34D.js";
|
|
482
|
-
import "./chunk-AREGMX2J.js";
|
|
483
482
|
import "./chunk-NBP4EX5N.js";
|
|
483
|
+
import "./chunk-AREGMX2J.js";
|
|
484
484
|
import "./chunk-LQWOFU6L.js";
|
|
485
485
|
import "./chunk-P7FMDTKL.js";
|
|
486
486
|
import "./chunk-MRV7VSQK.js";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface StateViewLine {
|
|
2
|
+
memoryId: string;
|
|
3
|
+
/** The line as it would be injected. */
|
|
4
|
+
text: string;
|
|
5
|
+
stateLabel: string;
|
|
6
|
+
}
|
|
7
|
+
type ZeroDiffCheck = {
|
|
8
|
+
ok: true;
|
|
9
|
+
reason: "verified" | "not_applicable";
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
error: "current_line_changed";
|
|
13
|
+
memoryId: string;
|
|
14
|
+
} | {
|
|
15
|
+
ok: false;
|
|
16
|
+
error: "order_changed";
|
|
17
|
+
};
|
|
18
|
+
declare function checkStateViewZeroDiff(input: {
|
|
19
|
+
baseline: readonly StateViewLine[];
|
|
20
|
+
annotated: readonly StateViewLine[];
|
|
21
|
+
}): ZeroDiffCheck;
|
|
22
|
+
|
|
23
|
+
export { type StateViewLine, type ZeroDiffCheck, checkStateViewZeroDiff };
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import "./chunk-PZ5AY32C.js";
|
|
2
|
+
|
|
3
|
+
// src/recall-state-view-zero-diff.ts
|
|
4
|
+
var STATE_LABELS = Object.freeze(
|
|
5
|
+
["current", "historical", "transition"]
|
|
6
|
+
);
|
|
7
|
+
function isStateLabel(value) {
|
|
8
|
+
return STATE_LABELS.includes(value);
|
|
9
|
+
}
|
|
10
|
+
function validateLines(lines, name) {
|
|
11
|
+
for (const line of lines) {
|
|
12
|
+
if (line === null || typeof line !== "object") {
|
|
13
|
+
throw new TypeError(`${name} line must be an object`);
|
|
14
|
+
}
|
|
15
|
+
if (typeof line.memoryId !== "string") {
|
|
16
|
+
throw new TypeError(`${name} line memoryId must be a string`);
|
|
17
|
+
}
|
|
18
|
+
if (typeof line.text !== "string") {
|
|
19
|
+
throw new TypeError(`${name} line text must be a string`);
|
|
20
|
+
}
|
|
21
|
+
if (typeof line.stateLabel !== "string" || !isStateLabel(line.stateLabel)) {
|
|
22
|
+
throw new TypeError(
|
|
23
|
+
`unknown state label: ${JSON.stringify(line.stateLabel)} (allowed: ${STATE_LABELS.join(", ")})`
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const seen = /* @__PURE__ */ new Set();
|
|
28
|
+
for (const line of lines) {
|
|
29
|
+
if (seen.has(line.memoryId)) {
|
|
30
|
+
throw new RangeError(`duplicate memoryId in ${name}: ${line.memoryId}`);
|
|
31
|
+
}
|
|
32
|
+
seen.add(line.memoryId);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function checkStateViewZeroDiff(input) {
|
|
36
|
+
if (input === null || typeof input !== "object") {
|
|
37
|
+
throw new TypeError("input must be an object");
|
|
38
|
+
}
|
|
39
|
+
if (!Array.isArray(input.baseline)) {
|
|
40
|
+
throw new TypeError("baseline must be an array");
|
|
41
|
+
}
|
|
42
|
+
if (!Array.isArray(input.annotated)) {
|
|
43
|
+
throw new TypeError("annotated must be an array");
|
|
44
|
+
}
|
|
45
|
+
const baseline = input.baseline;
|
|
46
|
+
const annotated = input.annotated;
|
|
47
|
+
validateLines(baseline, "baseline");
|
|
48
|
+
validateLines(annotated, "annotated");
|
|
49
|
+
for (const line of baseline) {
|
|
50
|
+
if (line.stateLabel !== "current") {
|
|
51
|
+
throw new RangeError(
|
|
52
|
+
`baseline may only contain current lines, got ${JSON.stringify(line.stateLabel)}`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const hasHistorical = annotated.some(
|
|
57
|
+
(line) => line.stateLabel === "historical" || line.stateLabel === "transition"
|
|
58
|
+
);
|
|
59
|
+
if (hasHistorical) {
|
|
60
|
+
return { ok: true, reason: "not_applicable" };
|
|
61
|
+
}
|
|
62
|
+
const baselineText = /* @__PURE__ */ new Map();
|
|
63
|
+
for (const line of baseline) {
|
|
64
|
+
baselineText.set(line.memoryId, line.text);
|
|
65
|
+
}
|
|
66
|
+
for (const line of annotated) {
|
|
67
|
+
if (baselineText.has(line.memoryId) && baselineText.get(line.memoryId) !== line.text) {
|
|
68
|
+
return { ok: false, error: "current_line_changed", memoryId: line.memoryId };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (baseline.length !== annotated.length) {
|
|
72
|
+
return { ok: false, error: "order_changed" };
|
|
73
|
+
}
|
|
74
|
+
for (let i = 0; i < baseline.length; i++) {
|
|
75
|
+
if (baseline[i].memoryId !== annotated[i].memoryId) {
|
|
76
|
+
return { ok: false, error: "order_changed" };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return { ok: true, reason: "verified" };
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
checkStateViewZeroDiff
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=recall-state-view-zero-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/recall-state-view-zero-diff.ts"],"sourcesContent":["/**\n * Zero-diff guard for recall state views (issue #1952).\n *\n * The issue promises: current items are unchanged — zero diff for existing\n * users when no historical item qualifies. This module makes that promise\n * checkable. It compares the lines the pipeline would inject WITHOUT state\n * views (baseline) against the lines it would inject WITH them (annotated).\n *\n * Ok reasons are named for what a reader will assume they mean:\n * - `verified`: no historical or transition item is present, so the promise\n * applies, and the byte-exact comparison ran and held.\n * - `not_applicable`: at least one historical or transition item is present,\n * so the \"when no historical item qualifies\" precondition is false and\n * nothing was compared.\n *\n * Text comparison is byte-exact; a trailing space added by a renderer is a\n * diff. Current-line text mismatches are reported before order mismatches,\n * so `order_changed` means every line matched by memoryId had identical\n * text and only the memoryId sequence moved.\n *\n * Pure: no I/O, inputs are never mutated. Tests drive it through the live\n * recall route (`applyRecallStateViews` then\n * `RecallResultFormatter.formatQmdResultEntries`); wiring the guard into a\n * runtime caller is a later slice.\n */\nimport type { StateLabel } from \"./recall-state-view.js\";\n\nexport interface StateViewLine {\n memoryId: string;\n /** The line as it would be injected. */\n text: string;\n stateLabel: string;\n}\n\nexport type ZeroDiffCheck =\n | { ok: true; reason: \"verified\" | \"not_applicable\" }\n | { ok: false; error: \"current_line_changed\"; memoryId: string }\n | { ok: false; error: \"order_changed\" };\n\nconst STATE_LABELS = Object.freeze(\n [\"current\", \"historical\", \"transition\"] as const satisfies readonly StateLabel[],\n);\n\nfunction isStateLabel(value: string): value is StateLabel {\n return (STATE_LABELS as readonly string[]).includes(value);\n}\n\nfunction validateLines(lines: readonly StateViewLine[], name: string): void {\n for (const line of lines) {\n if (line === null || typeof line !== \"object\") {\n throw new TypeError(`${name} line must be an object`);\n }\n if (typeof line.memoryId !== \"string\") {\n throw new TypeError(`${name} line memoryId must be a string`);\n }\n if (typeof line.text !== \"string\") {\n throw new TypeError(`${name} line text must be a string`);\n }\n if (typeof line.stateLabel !== \"string\" || !isStateLabel(line.stateLabel)) {\n throw new TypeError(\n `unknown state label: ${JSON.stringify(line.stateLabel)} (allowed: ${STATE_LABELS.join(\", \")})`,\n );\n }\n }\n const seen = new Set<string>();\n for (const line of lines) {\n if (seen.has(line.memoryId)) {\n throw new RangeError(`duplicate memoryId in ${name}: ${line.memoryId}`);\n }\n seen.add(line.memoryId);\n }\n}\n\nexport function checkStateViewZeroDiff(input: {\n baseline: readonly StateViewLine[];\n annotated: readonly StateViewLine[];\n}): ZeroDiffCheck {\n if (input === null || typeof input !== \"object\") {\n throw new TypeError(\"input must be an object\");\n }\n if (!Array.isArray(input.baseline)) {\n throw new TypeError(\"baseline must be an array\");\n }\n if (!Array.isArray(input.annotated)) {\n throw new TypeError(\"annotated must be an array\");\n }\n const baseline = input.baseline;\n const annotated = input.annotated;\n validateLines(baseline, \"baseline\");\n validateLines(annotated, \"annotated\");\n for (const line of baseline) {\n if (line.stateLabel !== \"current\") {\n throw new RangeError(\n `baseline may only contain current lines, got ${JSON.stringify(line.stateLabel)}`,\n );\n }\n }\n\n const hasHistorical = annotated.some(\n (line) => line.stateLabel === \"historical\" || line.stateLabel === \"transition\",\n );\n if (hasHistorical) {\n return { ok: true, reason: \"not_applicable\" };\n }\n\n const baselineText = new Map<string, string>();\n for (const line of baseline) {\n baselineText.set(line.memoryId, line.text);\n }\n for (const line of annotated) {\n if (baselineText.has(line.memoryId) && baselineText.get(line.memoryId) !== line.text) {\n return { ok: false, error: \"current_line_changed\", memoryId: line.memoryId };\n }\n }\n\n if (baseline.length !== annotated.length) {\n return { ok: false, error: \"order_changed\" };\n }\n for (let i = 0; i < baseline.length; i++) {\n if (baseline[i].memoryId !== annotated[i].memoryId) {\n return { ok: false, error: \"order_changed\" };\n }\n }\n return { ok: true, reason: \"verified\" };\n}\n"],"mappings":";;;AAuCA,IAAM,eAAe,OAAO;AAAA,EAC1B,CAAC,WAAW,cAAc,YAAY;AACxC;AAEA,SAAS,aAAa,OAAoC;AACxD,SAAQ,aAAmC,SAAS,KAAK;AAC3D;AAEA,SAAS,cAAc,OAAiC,MAAoB;AAC1E,aAAW,QAAQ,OAAO;AACxB,QAAI,SAAS,QAAQ,OAAO,SAAS,UAAU;AAC7C,YAAM,IAAI,UAAU,GAAG,IAAI,yBAAyB;AAAA,IACtD;AACA,QAAI,OAAO,KAAK,aAAa,UAAU;AACrC,YAAM,IAAI,UAAU,GAAG,IAAI,iCAAiC;AAAA,IAC9D;AACA,QAAI,OAAO,KAAK,SAAS,UAAU;AACjC,YAAM,IAAI,UAAU,GAAG,IAAI,6BAA6B;AAAA,IAC1D;AACA,QAAI,OAAO,KAAK,eAAe,YAAY,CAAC,aAAa,KAAK,UAAU,GAAG;AACzE,YAAM,IAAI;AAAA,QACR,wBAAwB,KAAK,UAAU,KAAK,UAAU,CAAC,cAAc,aAAa,KAAK,IAAI,CAAC;AAAA,MAC9F;AAAA,IACF;AAAA,EACF;AACA,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,IAAI,KAAK,QAAQ,GAAG;AAC3B,YAAM,IAAI,WAAW,yBAAyB,IAAI,KAAK,KAAK,QAAQ,EAAE;AAAA,IACxE;AACA,SAAK,IAAI,KAAK,QAAQ;AAAA,EACxB;AACF;AAEO,SAAS,uBAAuB,OAGrB;AAChB,MAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;AAC/C,UAAM,IAAI,UAAU,yBAAyB;AAAA,EAC/C;AACA,MAAI,CAAC,MAAM,QAAQ,MAAM,QAAQ,GAAG;AAClC,UAAM,IAAI,UAAU,2BAA2B;AAAA,EACjD;AACA,MAAI,CAAC,MAAM,QAAQ,MAAM,SAAS,GAAG;AACnC,UAAM,IAAI,UAAU,4BAA4B;AAAA,EAClD;AACA,QAAM,WAAW,MAAM;AACvB,QAAM,YAAY,MAAM;AACxB,gBAAc,UAAU,UAAU;AAClC,gBAAc,WAAW,WAAW;AACpC,aAAW,QAAQ,UAAU;AAC3B,QAAI,KAAK,eAAe,WAAW;AACjC,YAAM,IAAI;AAAA,QACR,gDAAgD,KAAK,UAAU,KAAK,UAAU,CAAC;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB,UAAU;AAAA,IAC9B,CAAC,SAAS,KAAK,eAAe,gBAAgB,KAAK,eAAe;AAAA,EACpE;AACA,MAAI,eAAe;AACjB,WAAO,EAAE,IAAI,MAAM,QAAQ,iBAAiB;AAAA,EAC9C;AAEA,QAAM,eAAe,oBAAI,IAAoB;AAC7C,aAAW,QAAQ,UAAU;AAC3B,iBAAa,IAAI,KAAK,UAAU,KAAK,IAAI;AAAA,EAC3C;AACA,aAAW,QAAQ,WAAW;AAC5B,QAAI,aAAa,IAAI,KAAK,QAAQ,KAAK,aAAa,IAAI,KAAK,QAAQ,MAAM,KAAK,MAAM;AACpF,aAAO,EAAE,IAAI,OAAO,OAAO,wBAAwB,UAAU,KAAK,SAAS;AAAA,IAC7E;AAAA,EACF;AAEA,MAAI,SAAS,WAAW,UAAU,QAAQ;AACxC,WAAO,EAAE,IAAI,OAAO,OAAO,gBAAgB;AAAA,EAC7C;AACA,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,SAAS,CAAC,EAAE,aAAa,UAAU,CAAC,EAAE,UAAU;AAClD,aAAO,EAAE,IAAI,OAAO,OAAO,gBAAgB;AAAA,IAC7C;AAAA,EACF;AACA,SAAO,EAAE,IAAI,MAAM,QAAQ,WAAW;AACxC;","names":[]}
|
package/dist/reconcile/cursor.js
CHANGED
|
@@ -11,6 +11,11 @@ import "../chunk-PZ5AY32C.js";
|
|
|
11
11
|
import { createHash, randomUUID } from "crypto";
|
|
12
12
|
import * as fs from "fs/promises";
|
|
13
13
|
import * as path from "path";
|
|
14
|
+
function stripTrailingSlashes(value) {
|
|
15
|
+
let end = value.length;
|
|
16
|
+
while (end > 0 && value[end - 1] === "/") end -= 1;
|
|
17
|
+
return end === value.length ? value : value.slice(0, end);
|
|
18
|
+
}
|
|
14
19
|
function normalizeConvergePeerUrl(peerUrl) {
|
|
15
20
|
const trimmed = peerUrl.trim();
|
|
16
21
|
try {
|
|
@@ -19,10 +24,10 @@ function normalizeConvergePeerUrl(peerUrl) {
|
|
|
19
24
|
url.password = "";
|
|
20
25
|
url.search = "";
|
|
21
26
|
url.hash = "";
|
|
22
|
-
url.pathname = url.pathname
|
|
27
|
+
url.pathname = stripTrailingSlashes(url.pathname);
|
|
23
28
|
return url.toString().replace(/\/$/, "");
|
|
24
29
|
} catch {
|
|
25
|
-
return trimmed
|
|
30
|
+
return stripTrailingSlashes(trimmed);
|
|
26
31
|
}
|
|
27
32
|
}
|
|
28
33
|
function hashPeerNamespace(peerUrl, namespace) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/reconcile/cursor.ts"],"sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport {\n type ReconcilePlanEntry,\n type ReconcileSemanticAgreement,\n semanticAgreementKey,\n} from \"./plan.js\";\n\nexport type ConvergeRefreshTarget = \"local\" | \"receiver\";\n\nexport interface ConvergeCursorFileState {\n path: string;\n sha256: string;\n mtimeMs?: number;\n bytes?: number;\n}\n\nexport interface ConvergeCursorState {\n version: 1;\n peerUrl: string;\n namespace: string;\n lastConvergedAt?: string;\n baseFiles: ConvergeCursorFileState[];\n semanticAgreements?: ReconcileSemanticAgreement[];\n completedPaths?: string[];\n pendingRefreshes?: ConvergeRefreshTarget[];\n}\n\nexport function normalizeConvergePeerUrl(peerUrl: string): string {\n const trimmed = peerUrl.trim();\n try {\n const url = new URL(trimmed);\n url.username = \"\";\n url.password = \"\";\n url.search = \"\";\n url.hash = \"\";\n url.pathname = url.pathname.replace(/\\/+$/, \"\");\n return url.toString().replace(/\\/$/, \"\");\n } catch {\n return trimmed.replace(/\\/+$/, \"\");\n }\n}\n\nexport function hashPeerNamespace(peerUrl: string, namespace: string): string {\n const normalizedUrl = normalizeConvergePeerUrl(peerUrl);\n const normalizedNs = namespace.trim().toLowerCase();\n return createHash(\"sha256\")\n .update(`${normalizedUrl}\\0${normalizedNs}`)\n .digest(\"hex\")\n .slice(0, 16);\n}\n\nexport function defaultConvergeCursorPath(\n memoryDir: string,\n peerUrl: string,\n namespace: string,\n): string {\n const key = hashPeerNamespace(peerUrl, namespace);\n return path.join(path.resolve(memoryDir), \".remnic\", \"state\", \"converge-cursors\", `${key}.json`);\n}\n\nfunction normalizeSemanticFileState(input: unknown): { path: string; sha256: string } | undefined {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) return undefined;\n const file = input as Record<string, unknown>;\n if (typeof file.path !== \"string\" || typeof file.sha256 !== \"string\") return undefined;\n return { path: file.path, sha256: file.sha256 };\n}\n\nfunction digestAfterReconcile(entry: ReconcilePlanEntry): string | undefined {\n if (entry.action === \"push\") return entry.localSha256;\n if (entry.action === \"pull\") return entry.peerSha256;\n if (entry.action === \"conflict\") {\n if (entry.resolution === \"local-wins\") return entry.localSha256;\n if (entry.resolution === \"peer-wins\") return entry.peerSha256;\n return undefined;\n }\n if (entry.action !== \"identical\") return undefined;\n if (entry.localSha256 && entry.peerSha256 && entry.localSha256 !== entry.peerSha256) return undefined;\n return entry.localSha256 ?? entry.peerSha256;\n}\n\nexport function deriveConvergeCursorBase(\n entries: readonly ReconcilePlanEntry[],\n namespace: string,\n priorSemanticAgreements: readonly ReconcileSemanticAgreement[] = [],\n): Pick<ConvergeCursorState, \"baseFiles\" | \"semanticAgreements\"> {\n const baseFiles: ConvergeCursorFileState[] = [];\n const semanticAgreementsByPathPair = new Map(\n priorSemanticAgreements.map((agreement) => [semanticAgreementKey(agreement), agreement])\n );\n for (const entry of entries) {\n if (entry.namespace !== namespace) continue;\n if (entry.semanticAgreement) {\n semanticAgreementsByPathPair.set(semanticAgreementKey(entry.semanticAgreement), entry.semanticAgreement);\n continue;\n }\n const sha256 = digestAfterReconcile(entry);\n if (sha256) baseFiles.push({ path: entry.path, sha256 });\n }\n baseFiles.sort((left, right) => left.path.localeCompare(right.path));\n const semanticAgreements = [...semanticAgreementsByPathPair.values()];\n semanticAgreements.sort((left, right) =>\n left.local.path.localeCompare(right.local.path) || left.peer.path.localeCompare(right.peer.path)\n );\n return { baseFiles, semanticAgreements };\n}\n\nexport function normalizeConvergeCursor(input: unknown): ConvergeCursorState {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n throw new Error(\"converge cursor must be an object\");\n }\n const obj = input as Record<string, unknown>;\n if (obj.version !== 1) {\n throw new Error(\"converge cursor version must be 1\");\n }\n if (typeof obj.peerUrl !== \"string\" || !obj.peerUrl.trim()) {\n throw new Error(\"converge cursor missing peerUrl\");\n }\n if (typeof obj.namespace !== \"string\" || !obj.namespace.trim()) {\n throw new Error(\"converge cursor missing namespace\");\n }\n const baseFiles: ConvergeCursorFileState[] = [];\n if (Array.isArray(obj.baseFiles)) {\n for (const item of obj.baseFiles) {\n if (item && typeof item === \"object\") {\n const fileItem = item as Record<string, unknown>;\n if (typeof fileItem.path === \"string\" && typeof fileItem.sha256 === \"string\") {\n baseFiles.push({\n path: fileItem.path,\n sha256: fileItem.sha256,\n mtimeMs: typeof fileItem.mtimeMs === \"number\" ? fileItem.mtimeMs : undefined,\n bytes: typeof fileItem.bytes === \"number\" ? fileItem.bytes : undefined,\n });\n }\n }\n }\n }\n const semanticAgreements: ReconcileSemanticAgreement[] = [];\n if (Array.isArray(obj.semanticAgreements)) {\n for (const item of obj.semanticAgreements) {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) continue;\n const agreement = item as Record<string, unknown>;\n const local = normalizeSemanticFileState(agreement.local);\n const peer = normalizeSemanticFileState(agreement.peer);\n if (local && peer) semanticAgreements.push({ local, peer });\n }\n }\n const completedPaths: string[] = [];\n if (Array.isArray(obj.completedPaths)) {\n for (const item of obj.completedPaths) {\n if (typeof item === \"string\") {\n completedPaths.push(item);\n }\n }\n }\n const pendingRefreshes: ConvergeRefreshTarget[] = [];\n if (Array.isArray(obj.pendingRefreshes)) {\n if (obj.pendingRefreshes.includes(\"local\")) pendingRefreshes.push(\"local\");\n if (obj.pendingRefreshes.includes(\"receiver\")) pendingRefreshes.push(\"receiver\");\n }\n return {\n version: 1,\n peerUrl: obj.peerUrl.trim(),\n namespace: obj.namespace.trim(),\n lastConvergedAt: typeof obj.lastConvergedAt === \"string\" ? obj.lastConvergedAt : undefined,\n baseFiles,\n semanticAgreements,\n completedPaths,\n pendingRefreshes,\n };\n}\n\nexport async function readConvergeCursor(\n cursorPath: string,\n): Promise<ConvergeCursorState | null> {\n try {\n const raw = await fs.readFile(path.resolve(cursorPath), \"utf-8\");\n const parsed = JSON.parse(raw);\n return normalizeConvergeCursor(parsed);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n return null;\n }\n}\n\nexport async function writeConvergeCursor(\n cursorPath: string,\n cursor: ConvergeCursorState,\n): Promise<void> {\n const normalized = normalizeConvergeCursor(cursor);\n const target = path.resolve(cursorPath);\n await fs.mkdir(path.dirname(target), { recursive: true });\n const tmp = path.join(\n path.dirname(target),\n `.converge-cursor.${process.pid}.${randomUUID()}.tmp`,\n );\n await fs.writeFile(tmp, JSON.stringify(normalized, null, 2) + \"\\n\", \"utf-8\");\n try {\n await fs.rename(tmp, target);\n } catch (error) {\n await fs.unlink(tmp).catch(() => {});\n throw error;\n }\n}\n\nexport async function markConvergeRefreshPending(\n cursorPath: string,\n options: {\n peerUrl: string;\n namespace: string;\n target: ConvergeRefreshTarget;\n },\n): Promise<void> {\n const current = await readConvergeCursor(cursorPath);\n const pendingRefreshes = new Set(current?.pendingRefreshes ?? []);\n pendingRefreshes.add(options.target);\n await writeConvergeCursor(cursorPath, {\n version: 1,\n peerUrl: current?.peerUrl ?? options.peerUrl,\n namespace: current?.namespace ?? options.namespace,\n lastConvergedAt: current?.lastConvergedAt,\n baseFiles: current?.baseFiles ?? [],\n semanticAgreements: current?.semanticAgreements ?? [],\n completedPaths: current?.completedPaths ?? [],\n pendingRefreshes: [...pendingRefreshes].sort(),\n });\n}\n\nexport async function clearConvergeRefreshPending(\n cursorPath: string,\n target: ConvergeRefreshTarget,\n): Promise<void> {\n const current = await readConvergeCursor(cursorPath);\n if (!current?.pendingRefreshes?.includes(target)) return;\n await writeConvergeCursor(cursorPath, {\n ...current,\n pendingRefreshes: current.pendingRefreshes.filter((pending) => pending !== target),\n });\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/reconcile/cursor.ts"],"sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport {\n type ReconcilePlanEntry,\n type ReconcileSemanticAgreement,\n semanticAgreementKey,\n} from \"./plan.js\";\n\nexport type ConvergeRefreshTarget = \"local\" | \"receiver\";\n\nexport interface ConvergeCursorFileState {\n path: string;\n sha256: string;\n mtimeMs?: number;\n bytes?: number;\n}\n\nexport interface ConvergeCursorState {\n version: 1;\n peerUrl: string;\n namespace: string;\n lastConvergedAt?: string;\n baseFiles: ConvergeCursorFileState[];\n semanticAgreements?: ReconcileSemanticAgreement[];\n completedPaths?: string[];\n pendingRefreshes?: ConvergeRefreshTarget[];\n}\n\n/**\n * Linear trailing-slash trim. `/\\/+$/` backtracks quadratically on long\n * slash runs that do not end in a slash (CodeQL js/polynomial-redos); a\n * bounded character loop cannot.\n */\nfunction stripTrailingSlashes(value: string): string {\n let end = value.length;\n while (end > 0 && value[end - 1] === \"/\") end -= 1;\n return end === value.length ? value : value.slice(0, end);\n}\n\nexport function normalizeConvergePeerUrl(peerUrl: string): string {\n const trimmed = peerUrl.trim();\n try {\n const url = new URL(trimmed);\n url.username = \"\";\n url.password = \"\";\n url.search = \"\";\n url.hash = \"\";\n url.pathname = stripTrailingSlashes(url.pathname);\n return url.toString().replace(/\\/$/, \"\");\n } catch {\n return stripTrailingSlashes(trimmed);\n }\n}\n\nexport function hashPeerNamespace(peerUrl: string, namespace: string): string {\n const normalizedUrl = normalizeConvergePeerUrl(peerUrl);\n const normalizedNs = namespace.trim().toLowerCase();\n return createHash(\"sha256\")\n .update(`${normalizedUrl}\\0${normalizedNs}`)\n .digest(\"hex\")\n .slice(0, 16);\n}\n\nexport function defaultConvergeCursorPath(\n memoryDir: string,\n peerUrl: string,\n namespace: string,\n): string {\n const key = hashPeerNamespace(peerUrl, namespace);\n return path.join(path.resolve(memoryDir), \".remnic\", \"state\", \"converge-cursors\", `${key}.json`);\n}\n\nfunction normalizeSemanticFileState(input: unknown): { path: string; sha256: string } | undefined {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) return undefined;\n const file = input as Record<string, unknown>;\n if (typeof file.path !== \"string\" || typeof file.sha256 !== \"string\") return undefined;\n return { path: file.path, sha256: file.sha256 };\n}\n\nfunction digestAfterReconcile(entry: ReconcilePlanEntry): string | undefined {\n if (entry.action === \"push\") return entry.localSha256;\n if (entry.action === \"pull\") return entry.peerSha256;\n if (entry.action === \"conflict\") {\n if (entry.resolution === \"local-wins\") return entry.localSha256;\n if (entry.resolution === \"peer-wins\") return entry.peerSha256;\n return undefined;\n }\n if (entry.action !== \"identical\") return undefined;\n if (entry.localSha256 && entry.peerSha256 && entry.localSha256 !== entry.peerSha256) return undefined;\n return entry.localSha256 ?? entry.peerSha256;\n}\n\nexport function deriveConvergeCursorBase(\n entries: readonly ReconcilePlanEntry[],\n namespace: string,\n priorSemanticAgreements: readonly ReconcileSemanticAgreement[] = [],\n): Pick<ConvergeCursorState, \"baseFiles\" | \"semanticAgreements\"> {\n const baseFiles: ConvergeCursorFileState[] = [];\n const semanticAgreementsByPathPair = new Map(\n priorSemanticAgreements.map((agreement) => [semanticAgreementKey(agreement), agreement])\n );\n for (const entry of entries) {\n if (entry.namespace !== namespace) continue;\n if (entry.semanticAgreement) {\n semanticAgreementsByPathPair.set(semanticAgreementKey(entry.semanticAgreement), entry.semanticAgreement);\n continue;\n }\n const sha256 = digestAfterReconcile(entry);\n if (sha256) baseFiles.push({ path: entry.path, sha256 });\n }\n baseFiles.sort((left, right) => left.path.localeCompare(right.path));\n const semanticAgreements = [...semanticAgreementsByPathPair.values()];\n semanticAgreements.sort((left, right) =>\n left.local.path.localeCompare(right.local.path) || left.peer.path.localeCompare(right.peer.path)\n );\n return { baseFiles, semanticAgreements };\n}\n\nexport function normalizeConvergeCursor(input: unknown): ConvergeCursorState {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n throw new Error(\"converge cursor must be an object\");\n }\n const obj = input as Record<string, unknown>;\n if (obj.version !== 1) {\n throw new Error(\"converge cursor version must be 1\");\n }\n if (typeof obj.peerUrl !== \"string\" || !obj.peerUrl.trim()) {\n throw new Error(\"converge cursor missing peerUrl\");\n }\n if (typeof obj.namespace !== \"string\" || !obj.namespace.trim()) {\n throw new Error(\"converge cursor missing namespace\");\n }\n const baseFiles: ConvergeCursorFileState[] = [];\n if (Array.isArray(obj.baseFiles)) {\n for (const item of obj.baseFiles) {\n if (item && typeof item === \"object\") {\n const fileItem = item as Record<string, unknown>;\n if (typeof fileItem.path === \"string\" && typeof fileItem.sha256 === \"string\") {\n baseFiles.push({\n path: fileItem.path,\n sha256: fileItem.sha256,\n mtimeMs: typeof fileItem.mtimeMs === \"number\" ? fileItem.mtimeMs : undefined,\n bytes: typeof fileItem.bytes === \"number\" ? fileItem.bytes : undefined,\n });\n }\n }\n }\n }\n const semanticAgreements: ReconcileSemanticAgreement[] = [];\n if (Array.isArray(obj.semanticAgreements)) {\n for (const item of obj.semanticAgreements) {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) continue;\n const agreement = item as Record<string, unknown>;\n const local = normalizeSemanticFileState(agreement.local);\n const peer = normalizeSemanticFileState(agreement.peer);\n if (local && peer) semanticAgreements.push({ local, peer });\n }\n }\n const completedPaths: string[] = [];\n if (Array.isArray(obj.completedPaths)) {\n for (const item of obj.completedPaths) {\n if (typeof item === \"string\") {\n completedPaths.push(item);\n }\n }\n }\n const pendingRefreshes: ConvergeRefreshTarget[] = [];\n if (Array.isArray(obj.pendingRefreshes)) {\n if (obj.pendingRefreshes.includes(\"local\")) pendingRefreshes.push(\"local\");\n if (obj.pendingRefreshes.includes(\"receiver\")) pendingRefreshes.push(\"receiver\");\n }\n return {\n version: 1,\n peerUrl: obj.peerUrl.trim(),\n namespace: obj.namespace.trim(),\n lastConvergedAt: typeof obj.lastConvergedAt === \"string\" ? obj.lastConvergedAt : undefined,\n baseFiles,\n semanticAgreements,\n completedPaths,\n pendingRefreshes,\n };\n}\n\nexport async function readConvergeCursor(\n cursorPath: string,\n): Promise<ConvergeCursorState | null> {\n try {\n const raw = await fs.readFile(path.resolve(cursorPath), \"utf-8\");\n const parsed = JSON.parse(raw);\n return normalizeConvergeCursor(parsed);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n return null;\n }\n}\n\nexport async function writeConvergeCursor(\n cursorPath: string,\n cursor: ConvergeCursorState,\n): Promise<void> {\n const normalized = normalizeConvergeCursor(cursor);\n const target = path.resolve(cursorPath);\n await fs.mkdir(path.dirname(target), { recursive: true });\n const tmp = path.join(\n path.dirname(target),\n `.converge-cursor.${process.pid}.${randomUUID()}.tmp`,\n );\n await fs.writeFile(tmp, JSON.stringify(normalized, null, 2) + \"\\n\", \"utf-8\");\n try {\n await fs.rename(tmp, target);\n } catch (error) {\n await fs.unlink(tmp).catch(() => {});\n throw error;\n }\n}\n\nexport async function markConvergeRefreshPending(\n cursorPath: string,\n options: {\n peerUrl: string;\n namespace: string;\n target: ConvergeRefreshTarget;\n },\n): Promise<void> {\n const current = await readConvergeCursor(cursorPath);\n const pendingRefreshes = new Set(current?.pendingRefreshes ?? []);\n pendingRefreshes.add(options.target);\n await writeConvergeCursor(cursorPath, {\n version: 1,\n peerUrl: current?.peerUrl ?? options.peerUrl,\n namespace: current?.namespace ?? options.namespace,\n lastConvergedAt: current?.lastConvergedAt,\n baseFiles: current?.baseFiles ?? [],\n semanticAgreements: current?.semanticAgreements ?? [],\n completedPaths: current?.completedPaths ?? [],\n pendingRefreshes: [...pendingRefreshes].sort(),\n });\n}\n\nexport async function clearConvergeRefreshPending(\n cursorPath: string,\n target: ConvergeRefreshTarget,\n): Promise<void> {\n const current = await readConvergeCursor(cursorPath);\n if (!current?.pendingRefreshes?.includes(target)) return;\n await writeConvergeCursor(cursorPath, {\n ...current,\n pendingRefreshes: current.pendingRefreshes.filter((pending) => pending !== target),\n });\n}\n"],"mappings":"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","names":[]}
|