@remnic/core 9.33.0 → 9.35.0
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 +16 -16
- package/dist/access-authorization-probe.js +17 -17
- package/dist/access-boundary.js +16 -16
- package/dist/access-cli.js +39 -38
- package/dist/access-cli.js.map +1 -1
- package/dist/access-extraction-force-flush.js +16 -16
- package/dist/access-http.js +25 -25
- package/dist/access-identity-continuity-surface.js +16 -16
- package/dist/access-lcm-surface.js +16 -16
- package/dist/access-mcp.js +20 -20
- package/dist/access-namespace-preflight.js +16 -16
- package/dist/access-observe-write-surface.js +16 -16
- package/dist/access-operations-batch.js +17 -17
- package/dist/access-operations.js +19 -19
- package/dist/access-recall-concurrency.js +16 -16
- package/dist/access-recall-response.js +16 -16
- package/dist/access-recall-surface.js +16 -16
- package/dist/access-schema.js +3 -3
- package/dist/access-service.js +16 -16
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
- package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
- package/dist/{chunk-SPPL77NI.js → chunk-2NUC473W.js} +49 -29
- package/dist/chunk-2NUC473W.js.map +1 -0
- package/dist/{chunk-N2B56SIS.js → chunk-2SHIWGY7.js} +2 -2
- package/dist/{chunk-I5DQ6KZK.js → chunk-3F2LKUMU.js} +2 -2
- package/dist/{chunk-ATUURSST.js → chunk-5FHE4JI7.js} +3 -3
- package/dist/{chunk-YFQMW2TH.js → chunk-5HTAJCTO.js} +11 -11
- package/dist/{chunk-6NPZ3FP2.js → chunk-65ZPVYTA.js} +2 -2
- package/dist/{chunk-MPH263X2.js → chunk-AHZYNPLX.js} +2 -2
- package/dist/{chunk-77CNV7DY.js → chunk-BLAKS3CP.js} +4 -4
- package/dist/{chunk-J6BYDVPL.js → chunk-EH5U2YCX.js} +2 -2
- package/dist/{chunk-PTN6UAUA.js → chunk-ES36HTSC.js} +4 -4
- package/dist/{chunk-SIKCTPRK.js → chunk-GHR7WHZX.js} +3 -3
- package/dist/{chunk-TITQYVKD.js → chunk-HEVWWPTL.js} +16 -16
- package/dist/{chunk-V2MVDDJF.js → chunk-IOQFPVGY.js} +2 -2
- package/dist/{chunk-VDX2J7OX.js → chunk-KQAFEZQX.js} +2 -2
- package/dist/chunk-KWMXR7XS.js +138 -0
- package/dist/chunk-KWMXR7XS.js.map +1 -0
- package/dist/{chunk-7RZJWZ46.js → chunk-LEPOP46W.js} +5 -5
- package/dist/{chunk-PYHOAXTI.js → chunk-LRGSLV7M.js} +4 -4
- package/dist/{chunk-2QSZNTDO.js → chunk-RKNJBZ55.js} +4 -4
- package/dist/{chunk-RYHWZ52A.js → chunk-S2BBISHU.js} +4 -4
- package/dist/{chunk-YJ7PWEWI.js → chunk-SA3WJJF2.js} +2 -2
- package/dist/{chunk-C4PEMCP4.js → chunk-SLPLPGJQ.js} +7 -7
- package/dist/{chunk-6JE3HGS4.js → chunk-T4HH5Q3U.js} +2 -2
- package/dist/{chunk-EHNENZHZ.js → chunk-TJLLYV2X.js} +3 -3
- package/dist/{chunk-SFW2NABJ.js → chunk-UZQCNOPS.js} +7 -7
- package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
- package/dist/{chunk-6NNNURLK.js → chunk-Z54EM5YZ.js} +4 -4
- package/dist/cli.js +33 -33
- package/dist/conversation-index/backend.js +2 -2
- package/dist/corpus-watermark.js +11 -11
- package/dist/index.d.ts +1 -1
- package/dist/index.js +54 -53
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.js +2 -2
- package/dist/namespaces/migrate.js +10 -10
- package/dist/namespaces/search.js +9 -9
- package/dist/operator-doctor-corpus.js +12 -12
- package/dist/operator-toolkit.js +13 -13
- package/dist/orchestrator.js +39 -38
- package/dist/reconcile/plan.d.ts +175 -0
- package/dist/reconcile/plan.js +420 -0
- package/dist/reconcile/plan.js.map +1 -0
- package/dist/search/factory.js +8 -8
- package/dist/search/index.js +12 -12
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/orama-backend.js +2 -2
- package/dist/tool-scoped-memory.d.ts +47 -0
- package/dist/tool-scoped-memory.js +12 -0
- package/dist/tool-scoped-memory.js.map +1 -0
- 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/import-sqlite.js +2 -2
- package/package.json +12 -2
- package/src/extraction-redaction-rules.test.ts +53 -0
- package/src/index.ts +1 -1
- package/src/orchestration/extraction-persist.ts +31 -32
- package/src/reconcile/plan.test.ts +1013 -0
- package/src/reconcile/plan.ts +813 -0
- package/src/tool-scoped-memory.test.ts +199 -0
- package/src/tool-scoped-memory.ts +190 -0
- package/dist/chunk-SPPL77NI.js.map +0 -1
- /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
- /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
- /package/dist/{chunk-N2B56SIS.js.map → chunk-2SHIWGY7.js.map} +0 -0
- /package/dist/{chunk-I5DQ6KZK.js.map → chunk-3F2LKUMU.js.map} +0 -0
- /package/dist/{chunk-ATUURSST.js.map → chunk-5FHE4JI7.js.map} +0 -0
- /package/dist/{chunk-YFQMW2TH.js.map → chunk-5HTAJCTO.js.map} +0 -0
- /package/dist/{chunk-6NPZ3FP2.js.map → chunk-65ZPVYTA.js.map} +0 -0
- /package/dist/{chunk-MPH263X2.js.map → chunk-AHZYNPLX.js.map} +0 -0
- /package/dist/{chunk-77CNV7DY.js.map → chunk-BLAKS3CP.js.map} +0 -0
- /package/dist/{chunk-J6BYDVPL.js.map → chunk-EH5U2YCX.js.map} +0 -0
- /package/dist/{chunk-PTN6UAUA.js.map → chunk-ES36HTSC.js.map} +0 -0
- /package/dist/{chunk-SIKCTPRK.js.map → chunk-GHR7WHZX.js.map} +0 -0
- /package/dist/{chunk-TITQYVKD.js.map → chunk-HEVWWPTL.js.map} +0 -0
- /package/dist/{chunk-V2MVDDJF.js.map → chunk-IOQFPVGY.js.map} +0 -0
- /package/dist/{chunk-VDX2J7OX.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-7RZJWZ46.js.map → chunk-LEPOP46W.js.map} +0 -0
- /package/dist/{chunk-PYHOAXTI.js.map → chunk-LRGSLV7M.js.map} +0 -0
- /package/dist/{chunk-2QSZNTDO.js.map → chunk-RKNJBZ55.js.map} +0 -0
- /package/dist/{chunk-RYHWZ52A.js.map → chunk-S2BBISHU.js.map} +0 -0
- /package/dist/{chunk-YJ7PWEWI.js.map → chunk-SA3WJJF2.js.map} +0 -0
- /package/dist/{chunk-C4PEMCP4.js.map → chunk-SLPLPGJQ.js.map} +0 -0
- /package/dist/{chunk-6JE3HGS4.js.map → chunk-T4HH5Q3U.js.map} +0 -0
- /package/dist/{chunk-EHNENZHZ.js.map → chunk-TJLLYV2X.js.map} +0 -0
- /package/dist/{chunk-SFW2NABJ.js.map → chunk-UZQCNOPS.js.map} +0 -0
- /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
- /package/dist/{chunk-6NNNURLK.js.map → chunk-Z54EM5YZ.js.map} +0 -0
|
@@ -2,26 +2,26 @@ import {
|
|
|
2
2
|
corpusWatermarksFromCheck,
|
|
3
3
|
summarizeCorpusAndReplica,
|
|
4
4
|
summarizeCorpusWatermark
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-AHZYNPLX.js";
|
|
6
6
|
import "./chunk-WDISJRMG.js";
|
|
7
7
|
import "./chunk-XOQSEF7X.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-SA3WJJF2.js";
|
|
9
|
+
import "./chunk-2SHIWGY7.js";
|
|
10
|
+
import "./chunk-IOQFPVGY.js";
|
|
11
|
+
import "./chunk-UZQCNOPS.js";
|
|
12
|
+
import "./chunk-ES36HTSC.js";
|
|
12
13
|
import "./chunk-3Y224NYC.js";
|
|
13
14
|
import "./chunk-H24WNPA2.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-CYEPCZN5.js";
|
|
17
|
-
import "./chunk-PTN6UAUA.js";
|
|
18
|
-
import "./chunk-CINZGPSJ.js";
|
|
15
|
+
import "./chunk-BLAKS3CP.js";
|
|
16
|
+
import "./chunk-S2BBISHU.js";
|
|
19
17
|
import "./chunk-W7IGLX4G.js";
|
|
18
|
+
import "./chunk-CINZGPSJ.js";
|
|
19
|
+
import "./chunk-CYEPCZN5.js";
|
|
20
20
|
import "./chunk-Y2ZD2RVG.js";
|
|
21
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-LEPOP46W.js";
|
|
22
|
+
import "./chunk-72A4L5JJ.js";
|
|
22
23
|
import "./chunk-A7Q43EUZ.js";
|
|
23
24
|
import "./chunk-ET356KSB.js";
|
|
24
|
-
import "./chunk-72A4L5JJ.js";
|
|
25
25
|
import "./chunk-3ONXXHQO.js";
|
|
26
26
|
import "./chunk-ONHRRJZM.js";
|
|
27
27
|
import "./chunk-YV32N67O.js";
|
package/dist/operator-toolkit.js
CHANGED
|
@@ -14,11 +14,11 @@ import {
|
|
|
14
14
|
summarizeProvenanceCoverage,
|
|
15
15
|
summarizeTierDistribution,
|
|
16
16
|
summarizeTombstoneStatus
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-TJLLYV2X.js";
|
|
18
18
|
import "./chunk-TCIWHK3N.js";
|
|
19
19
|
import "./chunk-KFY3SGN7.js";
|
|
20
20
|
import "./chunk-CMTINOFS.js";
|
|
21
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-AHZYNPLX.js";
|
|
22
22
|
import "./chunk-WDISJRMG.js";
|
|
23
23
|
import "./chunk-OZKOPQCM.js";
|
|
24
24
|
import "./chunk-2DQ2XREU.js";
|
|
@@ -37,23 +37,23 @@ import "./chunk-KFZY2OFH.js";
|
|
|
37
37
|
import "./chunk-J6SLNQRO.js";
|
|
38
38
|
import "./chunk-ULARSG5Z.js";
|
|
39
39
|
import "./chunk-XOQSEF7X.js";
|
|
40
|
-
import "./chunk-
|
|
41
|
-
import "./chunk-
|
|
42
|
-
import "./chunk-
|
|
43
|
-
import "./chunk-
|
|
40
|
+
import "./chunk-SA3WJJF2.js";
|
|
41
|
+
import "./chunk-2SHIWGY7.js";
|
|
42
|
+
import "./chunk-IOQFPVGY.js";
|
|
43
|
+
import "./chunk-UZQCNOPS.js";
|
|
44
|
+
import "./chunk-ES36HTSC.js";
|
|
44
45
|
import "./chunk-3Y224NYC.js";
|
|
45
46
|
import "./chunk-H24WNPA2.js";
|
|
46
|
-
import "./chunk-
|
|
47
|
-
import "./chunk-
|
|
48
|
-
import "./chunk-CYEPCZN5.js";
|
|
49
|
-
import "./chunk-PTN6UAUA.js";
|
|
50
|
-
import "./chunk-CINZGPSJ.js";
|
|
47
|
+
import "./chunk-BLAKS3CP.js";
|
|
48
|
+
import "./chunk-S2BBISHU.js";
|
|
51
49
|
import "./chunk-W7IGLX4G.js";
|
|
50
|
+
import "./chunk-CINZGPSJ.js";
|
|
51
|
+
import "./chunk-CYEPCZN5.js";
|
|
52
52
|
import "./chunk-Y2ZD2RVG.js";
|
|
53
|
-
import "./chunk-
|
|
53
|
+
import "./chunk-LEPOP46W.js";
|
|
54
|
+
import "./chunk-72A4L5JJ.js";
|
|
54
55
|
import "./chunk-A7Q43EUZ.js";
|
|
55
56
|
import "./chunk-ET356KSB.js";
|
|
56
|
-
import "./chunk-72A4L5JJ.js";
|
|
57
57
|
import "./chunk-3ONXXHQO.js";
|
|
58
58
|
import "./chunk-L2DPF4DF.js";
|
|
59
59
|
import "./chunk-2LSZVONP.js";
|
package/dist/orchestrator.js
CHANGED
|
@@ -4,27 +4,27 @@ import {
|
|
|
4
4
|
filterRecallCandidates,
|
|
5
5
|
graphPathRelativeToStorage,
|
|
6
6
|
mergeGraphExpandedResults
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-2NUC473W.js";
|
|
8
8
|
import "./chunk-UV72DEZD.js";
|
|
9
|
+
import "./chunk-I74SUMNI.js";
|
|
10
|
+
import "./chunk-ILNPU5W5.js";
|
|
9
11
|
import {
|
|
10
12
|
formatCompressionGuidelinesForRecall
|
|
11
13
|
} from "./chunk-6LKEUCEM.js";
|
|
12
14
|
import "./chunk-IZXTZ7BF.js";
|
|
13
|
-
import "./chunk-I74SUMNI.js";
|
|
14
|
-
import "./chunk-ILNPU5W5.js";
|
|
15
15
|
import "./chunk-7HYPN2GC.js";
|
|
16
16
|
import "./chunk-666A3MOW.js";
|
|
17
17
|
import "./chunk-KBL3JJR6.js";
|
|
18
18
|
import "./chunk-FQ7HAWWC.js";
|
|
19
19
|
import "./chunk-VDC6RZI4.js";
|
|
20
20
|
import "./chunk-UWK5OXUJ.js";
|
|
21
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-Z54EM5YZ.js";
|
|
22
|
+
import "./chunk-TPDBFYEG.js";
|
|
22
23
|
import "./chunk-UXPUUL3G.js";
|
|
23
24
|
import "./chunk-DDA47TES.js";
|
|
24
25
|
import "./chunk-PBGWYM3H.js";
|
|
25
26
|
import "./chunk-LTAVSOZW.js";
|
|
26
27
|
import "./chunk-7N4KAIGN.js";
|
|
27
|
-
import "./chunk-TPDBFYEG.js";
|
|
28
28
|
import "./chunk-V5OCT34X.js";
|
|
29
29
|
import "./chunk-TECVW3JP.js";
|
|
30
30
|
import "./chunk-C5JF6EZ7.js";
|
|
@@ -34,6 +34,7 @@ import "./chunk-LXOM6IQU.js";
|
|
|
34
34
|
import "./chunk-VOUOLGIP.js";
|
|
35
35
|
import "./chunk-S75M5ZRK.js";
|
|
36
36
|
import "./chunk-ECZU5BJH.js";
|
|
37
|
+
import "./chunk-KWMXR7XS.js";
|
|
37
38
|
import "./chunk-UHGBNIOS.js";
|
|
38
39
|
import "./chunk-I6WYQSX4.js";
|
|
39
40
|
import "./chunk-4EX5WZ4M.js";
|
|
@@ -94,21 +95,21 @@ import "./chunk-VEWZZM3H.js";
|
|
|
94
95
|
import "./chunk-Q6IP2ARR.js";
|
|
95
96
|
import "./chunk-6HEM6HTQ.js";
|
|
96
97
|
import "./chunk-3I4FUAVJ.js";
|
|
97
|
-
import "./chunk-
|
|
98
|
+
import "./chunk-HEVWWPTL.js";
|
|
98
99
|
import "./chunk-MMACM5G2.js";
|
|
99
100
|
import "./chunk-54BGIBCR.js";
|
|
100
101
|
import "./chunk-H4CKS5B2.js";
|
|
101
102
|
import "./chunk-FXZTL7F7.js";
|
|
102
103
|
import "./chunk-HDDRVXX4.js";
|
|
103
|
-
import "./chunk-
|
|
104
|
-
import "./chunk-UP6MOYCB.js";
|
|
105
|
-
import "./chunk-BV2TIZ4F.js";
|
|
106
|
-
import "./chunk-Z734BLO3.js";
|
|
104
|
+
import "./chunk-LRGSLV7M.js";
|
|
107
105
|
import "./chunk-OZKVVUJB.js";
|
|
108
106
|
import "./chunk-2DL3OFLD.js";
|
|
109
107
|
import "./chunk-G4IAEX6D.js";
|
|
110
|
-
import "./chunk-
|
|
108
|
+
import "./chunk-2NLLXCJG.js";
|
|
109
|
+
import "./chunk-UP6MOYCB.js";
|
|
111
110
|
import "./chunk-765K3SAT.js";
|
|
111
|
+
import "./chunk-BV2TIZ4F.js";
|
|
112
|
+
import "./chunk-Z734BLO3.js";
|
|
112
113
|
import "./chunk-FGDKJJZS.js";
|
|
113
114
|
import "./chunk-AJVLDJU6.js";
|
|
114
115
|
import "./chunk-XL24QQ63.js";
|
|
@@ -135,12 +136,12 @@ import "./chunk-ZRWB5D4H.js";
|
|
|
135
136
|
import "./chunk-HYQJQGD3.js";
|
|
136
137
|
import "./chunk-DMT2RGAZ.js";
|
|
137
138
|
import "./chunk-33JBK2XP.js";
|
|
138
|
-
import "./chunk-
|
|
139
|
+
import "./chunk-TJLLYV2X.js";
|
|
139
140
|
import "./chunk-TCIWHK3N.js";
|
|
140
141
|
import "./chunk-KFY3SGN7.js";
|
|
141
142
|
import "./chunk-3T74IZB3.js";
|
|
142
143
|
import "./chunk-CMTINOFS.js";
|
|
143
|
-
import "./chunk-
|
|
144
|
+
import "./chunk-AHZYNPLX.js";
|
|
144
145
|
import "./chunk-WDISJRMG.js";
|
|
145
146
|
import "./chunk-UR6PBX2J.js";
|
|
146
147
|
import "./chunk-6GUG4YNM.js";
|
|
@@ -182,21 +183,21 @@ import "./chunk-OO42R444.js";
|
|
|
182
183
|
import "./chunk-PIG4WJFQ.js";
|
|
183
184
|
import "./chunk-KFZY2OFH.js";
|
|
184
185
|
import "./chunk-LBJBNWS2.js";
|
|
185
|
-
import "./chunk-
|
|
186
|
+
import "./chunk-SLPLPGJQ.js";
|
|
186
187
|
import "./chunk-V7IZKJI3.js";
|
|
187
188
|
import "./chunk-SEDEKFYQ.js";
|
|
188
|
-
import "./chunk-
|
|
189
|
+
import "./chunk-RKNJBZ55.js";
|
|
190
|
+
import "./chunk-J64TK33U.js";
|
|
189
191
|
import "./chunk-RSUYKGGZ.js";
|
|
190
192
|
import "./chunk-42NQ7AVG.js";
|
|
191
193
|
import "./chunk-TMSXWOBZ.js";
|
|
192
|
-
import "./chunk-MKQBXQKU.js";
|
|
193
|
-
import "./chunk-J64TK33U.js";
|
|
194
194
|
import "./chunk-7RXCMVFQ.js";
|
|
195
|
-
import "./chunk-
|
|
195
|
+
import "./chunk-MKQBXQKU.js";
|
|
196
|
+
import "./chunk-5FHE4JI7.js";
|
|
196
197
|
import "./chunk-57QKLRBV.js";
|
|
197
198
|
import "./chunk-D24OXEPB.js";
|
|
198
|
-
import "./chunk-
|
|
199
|
-
import "./chunk-
|
|
199
|
+
import "./chunk-GHR7WHZX.js";
|
|
200
|
+
import "./chunk-T4HH5Q3U.js";
|
|
200
201
|
import "./chunk-HNZKVLAN.js";
|
|
201
202
|
import "./chunk-EQWEIIKQ.js";
|
|
202
203
|
import "./chunk-UTRO5UJU.js";
|
|
@@ -204,25 +205,25 @@ import "./chunk-WG5HSQ4P.js";
|
|
|
204
205
|
import "./chunk-35NN3ZFA.js";
|
|
205
206
|
import "./chunk-CEN6DW6X.js";
|
|
206
207
|
import "./chunk-T4WDJPEZ.js";
|
|
207
|
-
import "./chunk-
|
|
208
|
+
import "./chunk-3F2LKUMU.js";
|
|
208
209
|
import "./chunk-56BSXSHC.js";
|
|
209
210
|
import "./chunk-WWUVONGW.js";
|
|
210
211
|
import "./chunk-5IVLTFOV.js";
|
|
211
212
|
import "./chunk-VCD4PSK2.js";
|
|
212
213
|
import "./chunk-OADWQ5CR.js";
|
|
213
|
-
import "./chunk-
|
|
214
|
+
import "./chunk-EH5U2YCX.js";
|
|
214
215
|
import {
|
|
215
216
|
hasIdentityRecoveryIntent,
|
|
216
217
|
resolveEffectiveIdentityInjectionMode
|
|
217
|
-
} from "./chunk-
|
|
218
|
+
} from "./chunk-5HTAJCTO.js";
|
|
218
219
|
import "./chunk-GDASG7NC.js";
|
|
219
220
|
import "./chunk-GDB4J2H3.js";
|
|
220
|
-
import "./chunk-
|
|
221
|
+
import "./chunk-65ZPVYTA.js";
|
|
221
222
|
import "./chunk-VQ7B2Q6M.js";
|
|
222
223
|
import "./chunk-PJSK6OJM.js";
|
|
223
|
-
import "./chunk-JGSKJHF7.js";
|
|
224
224
|
import "./chunk-GNVZQ5JN.js";
|
|
225
225
|
import "./chunk-YN2UN7N3.js";
|
|
226
|
+
import "./chunk-JGSKJHF7.js";
|
|
226
227
|
import "./chunk-P5FPO2BR.js";
|
|
227
228
|
import "./chunk-S4DDLTPX.js";
|
|
228
229
|
import "./chunk-H7XKCNR6.js";
|
|
@@ -249,23 +250,23 @@ import "./chunk-NLE6TSLG.js";
|
|
|
249
250
|
import "./chunk-QDW3E4RD.js";
|
|
250
251
|
import "./chunk-PH3ZWL3W.js";
|
|
251
252
|
import "./chunk-C37ZRXX7.js";
|
|
252
|
-
import "./chunk-
|
|
253
|
-
import "./chunk-
|
|
254
|
-
import "./chunk-
|
|
255
|
-
import "./chunk-
|
|
253
|
+
import "./chunk-SA3WJJF2.js";
|
|
254
|
+
import "./chunk-2SHIWGY7.js";
|
|
255
|
+
import "./chunk-IOQFPVGY.js";
|
|
256
|
+
import "./chunk-UZQCNOPS.js";
|
|
257
|
+
import "./chunk-ES36HTSC.js";
|
|
256
258
|
import "./chunk-3Y224NYC.js";
|
|
257
259
|
import "./chunk-H24WNPA2.js";
|
|
258
|
-
import "./chunk-
|
|
259
|
-
import "./chunk-
|
|
260
|
-
import "./chunk-CYEPCZN5.js";
|
|
261
|
-
import "./chunk-PTN6UAUA.js";
|
|
262
|
-
import "./chunk-CINZGPSJ.js";
|
|
260
|
+
import "./chunk-BLAKS3CP.js";
|
|
261
|
+
import "./chunk-S2BBISHU.js";
|
|
263
262
|
import "./chunk-W7IGLX4G.js";
|
|
263
|
+
import "./chunk-CINZGPSJ.js";
|
|
264
|
+
import "./chunk-CYEPCZN5.js";
|
|
264
265
|
import "./chunk-Y2ZD2RVG.js";
|
|
265
|
-
import "./chunk-
|
|
266
|
+
import "./chunk-LEPOP46W.js";
|
|
267
|
+
import "./chunk-72A4L5JJ.js";
|
|
266
268
|
import "./chunk-A7Q43EUZ.js";
|
|
267
269
|
import "./chunk-ET356KSB.js";
|
|
268
|
-
import "./chunk-72A4L5JJ.js";
|
|
269
270
|
import "./chunk-3ONXXHQO.js";
|
|
270
271
|
import "./chunk-UFGFMWAD.js";
|
|
271
272
|
import "./chunk-L2DPF4DF.js";
|
|
@@ -380,9 +381,9 @@ import "./chunk-6MKAMLQL.js";
|
|
|
380
381
|
import "./chunk-JAKIDQB2.js";
|
|
381
382
|
import "./chunk-TBBDFYXW.js";
|
|
382
383
|
import "./chunk-ZBJMUXZH.js";
|
|
383
|
-
import "./chunk-
|
|
384
|
+
import "./chunk-KQAFEZQX.js";
|
|
384
385
|
import "./chunk-WEHSQBFR.js";
|
|
385
|
-
import "./chunk-
|
|
386
|
+
import "./chunk-X7Y7WX73.js";
|
|
386
387
|
import "./chunk-J4EB7DNW.js";
|
|
387
388
|
import "./chunk-BJMBJZ2Y.js";
|
|
388
389
|
import "./chunk-UKJAGEXH.js";
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { OfflineSyncFileState } from '../offline-sync.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Bootstrap reconciliation planner for two peer daemons whose corpora have
|
|
5
|
+
* already diverged (issue #2150).
|
|
6
|
+
*
|
|
7
|
+
* The offline-sync protocol assumes a satellite that shares a common base with
|
|
8
|
+
* one daemon: every path it does not know about is a pull, and a conflict is
|
|
9
|
+
* rare. Two long-lived daemons are the opposite case — each side holds months
|
|
10
|
+
* of history the other never saw, both sides are authoritative, and there is
|
|
11
|
+
* NO common base on the first run. That is a different decision problem, so it
|
|
12
|
+
* gets its own planner rather than another mode flag inside `applyOfflineSync*`.
|
|
13
|
+
*
|
|
14
|
+
* This module is deliberately pure: it takes two file censuses and returns what
|
|
15
|
+
* to do. No I/O, no transport, no clock. Everything that makes reconciliation
|
|
16
|
+
* risky — which side wins, what counts as converged, what is reported — is
|
|
17
|
+
* decided here where it can be exhaustively tested, and the transport layer is
|
|
18
|
+
* left to carry out an already-settled plan.
|
|
19
|
+
*/
|
|
20
|
+
/** Which way a path must move for the two corpora to agree. */
|
|
21
|
+
type ReconcileAction = "pull" | "push" | "identical" | "conflict" | "suppress";
|
|
22
|
+
/**
|
|
23
|
+
* How a path present on BOTH sides with different content is settled.
|
|
24
|
+
*
|
|
25
|
+
* `manual` is the safe default: on a bootstrap merge the two sides are equally
|
|
26
|
+
* authoritative, so silently picking one is data loss with extra steps. An
|
|
27
|
+
* operator opts into an automatic rule once they know the shape of their split.
|
|
28
|
+
*/
|
|
29
|
+
type ReconcileConflictPolicy = "manual" | "newest-wins" | "keep-both";
|
|
30
|
+
/**
|
|
31
|
+
* What the planner decided for a conflicting path.
|
|
32
|
+
*
|
|
33
|
+
* `keep-both` never overwrites: the older side is retained and linked as
|
|
34
|
+
* superseded by the newer one, which is the only resolution that cannot lose a
|
|
35
|
+
* fact neither corpus has seen.
|
|
36
|
+
*/
|
|
37
|
+
type ReconcileResolution = "local-wins" | "peer-wins" | "supersede-link" | "unresolved";
|
|
38
|
+
interface ReconcilePlanEntry {
|
|
39
|
+
path: string;
|
|
40
|
+
namespace: string;
|
|
41
|
+
action: ReconcileAction;
|
|
42
|
+
/** Stable machine-readable cause, safe to assert on and to aggregate. */
|
|
43
|
+
reason: ReconcileReason;
|
|
44
|
+
localSha256?: string;
|
|
45
|
+
peerSha256?: string;
|
|
46
|
+
/** Present only when a prior converged run left a cursor covering this path. */
|
|
47
|
+
baseSha256?: string;
|
|
48
|
+
/** Set only when `action` is `conflict`. */
|
|
49
|
+
resolution?: ReconcileResolution;
|
|
50
|
+
/**
|
|
51
|
+
* Which side holds the retracted revision. Set only when `action` is
|
|
52
|
+
* `suppress`: with different digests on each side and only one retracted,
|
|
53
|
+
* the entry would otherwise be identical either way and transport could
|
|
54
|
+
* delete the live copy instead of the retracted one.
|
|
55
|
+
*/
|
|
56
|
+
suppressSide?: "local" | "peer" | "both";
|
|
57
|
+
/**
|
|
58
|
+
* Which revision is newer, set only for a `supersede-link` resolution.
|
|
59
|
+
*
|
|
60
|
+
* The contract is that the older revision is linked as superseded by the
|
|
61
|
+
* newer one, so transport needs the direction. Absent when the timestamps
|
|
62
|
+
* cannot order the two - which is exactly when `newest-wins` degrades to
|
|
63
|
+
* `supersede-link` - and the link direction is then an operator decision.
|
|
64
|
+
*/
|
|
65
|
+
newerSide?: "local" | "peer";
|
|
66
|
+
}
|
|
67
|
+
type ReconcileReason = "peer_only" | "local_only"
|
|
68
|
+
/** Cursor showed only that side moved since agreement; both still hold the path. */
|
|
69
|
+
| "peer_changed" | "local_changed" | "same_content" | "both_modified" | "peer_deleted" | "local_deleted"
|
|
70
|
+
/** Peer deleted it while this side edited it — the offline-sync delete/modify pair. */
|
|
71
|
+
| "local_modified_peer_deleted" | "local_deleted_peer_modified" | "tombstoned";
|
|
72
|
+
interface ReconcileNamespaceReport {
|
|
73
|
+
namespace: string;
|
|
74
|
+
pull: number;
|
|
75
|
+
push: number;
|
|
76
|
+
identical: number;
|
|
77
|
+
conflict: number;
|
|
78
|
+
/** Local retractions the peer must be told about before the pair agrees. */
|
|
79
|
+
suppress: number;
|
|
80
|
+
/**
|
|
81
|
+
* Conflicts still needing an operator: those the policy declined to settle,
|
|
82
|
+
* plus supersede links whose direction could not be determined.
|
|
83
|
+
*/
|
|
84
|
+
unresolved: number;
|
|
85
|
+
}
|
|
86
|
+
interface ReconcilePlan {
|
|
87
|
+
entries: ReconcilePlanEntry[];
|
|
88
|
+
byNamespace: ReconcileNamespaceReport[];
|
|
89
|
+
/**
|
|
90
|
+
* True when the two corpora already agree — every shared path matches and
|
|
91
|
+
* neither side holds a path the other lacks.
|
|
92
|
+
*
|
|
93
|
+
* This is the idempotency contract from #2150: running reconciliation against
|
|
94
|
+
* an already-converged peer must be a no-op, and a caller can skip the whole
|
|
95
|
+
* transfer phase on this flag alone.
|
|
96
|
+
*/
|
|
97
|
+
converged: boolean;
|
|
98
|
+
}
|
|
99
|
+
/** Minimal shape the planner needs; `OfflineSyncFileState` satisfies it. */
|
|
100
|
+
type ReconcileFileState = Pick<OfflineSyncFileState, "path" | "sha256"> & Partial<Pick<OfflineSyncFileState, "mtimeMs" | "bytes">>;
|
|
101
|
+
interface ReconcileNamespaceInput {
|
|
102
|
+
namespace: string;
|
|
103
|
+
local: Iterable<ReconcileFileState>;
|
|
104
|
+
peer: Iterable<ReconcileFileState>;
|
|
105
|
+
/**
|
|
106
|
+
* File states agreed at the end of the last converged run with THIS peer.
|
|
107
|
+
* Absent on a bootstrap merge, which is why a path missing from one side is
|
|
108
|
+
* read as "never seen" rather than "deleted".
|
|
109
|
+
*/
|
|
110
|
+
base?: Iterable<ReconcileFileState>;
|
|
111
|
+
/**
|
|
112
|
+
* Digests of FILES this side has retracted, in the same form as
|
|
113
|
+
* `ReconcileFileState.sha256` — a hash of the serialized file.
|
|
114
|
+
*
|
|
115
|
+
* Deliberately NOT `TombstoneEntry.contentHash`, which hashes the canonical
|
|
116
|
+
* raw fact text and therefore never equals a file digest (§13: one content
|
|
117
|
+
* form, everywhere). Mapping retracted fact hashes onto the file digests that
|
|
118
|
+
* carry them is the caller's job, because only the caller can read its own
|
|
119
|
+
* corpus; handing this the wrong form would silently plan `pull` and
|
|
120
|
+
* resurrect every retracted fact, so the parameter name states the form.
|
|
121
|
+
*/
|
|
122
|
+
tombstonedFileSha256?: Iterable<string>;
|
|
123
|
+
/**
|
|
124
|
+
* Digests the PEER has retracted, same form.
|
|
125
|
+
*
|
|
126
|
+
* Without this a bootstrap merge cannot tell "the peer never had it" from
|
|
127
|
+
* "the peer deliberately retracted it": the peer census simply omits both,
|
|
128
|
+
* so a file we still hold is planned `push` and the peer's retraction is
|
|
129
|
+
* undone. Reconciliation is symmetric, so retraction has to be too.
|
|
130
|
+
*
|
|
131
|
+
* SCOPE: these sets decide what happens to files that still EXIST on one
|
|
132
|
+
* side. Sharing the retraction records themselves is not modelled here -
|
|
133
|
+
* tombstones are corpus files (`state/tombstones.jsonl`), so they reconcile
|
|
134
|
+
* as ordinary paths through this same plan. A digest both censuses have
|
|
135
|
+
* already dropped therefore produces no entry, by design: there is no file
|
|
136
|
+
* left to act on, and synthesizing a path-less entry would hand transport
|
|
137
|
+
* something it cannot apply.
|
|
138
|
+
*/
|
|
139
|
+
peerTombstonedFileSha256?: Iterable<string>;
|
|
140
|
+
}
|
|
141
|
+
interface ReconcileOptions {
|
|
142
|
+
conflictPolicy?: ReconcileConflictPolicy;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* A census the planner refuses to reason about.
|
|
146
|
+
*
|
|
147
|
+
* Dropping a malformed or contradictory record would let the planner return
|
|
148
|
+
* `converged: true` for a corpus it could not actually read, and transport is
|
|
149
|
+
* invited to skip everything on that flag — so bad input fails loudly instead
|
|
150
|
+
* (§1/§39).
|
|
151
|
+
*/
|
|
152
|
+
declare class ReconcilePlanInputError extends Error {
|
|
153
|
+
constructor(message: string);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Plan one namespace. Exposed for callers that stream namespaces one at a time.
|
|
157
|
+
*
|
|
158
|
+
* Residency is one peer index + a set of local paths + the entry list. The
|
|
159
|
+
* local census is consumed as a stream and never materialized, so a 100k-file
|
|
160
|
+
* corpus does not hold two full censuses at once — but this is NOT constant
|
|
161
|
+
* memory, and a caller holding its own census arrays adds to that.
|
|
162
|
+
*/
|
|
163
|
+
declare function planNamespaceReconciliation(input: ReconcileNamespaceInput, options?: ReconcileOptions): ReconcilePlanEntry[];
|
|
164
|
+
/** Aggregate entries into the per-namespace convergence report (#2150). */
|
|
165
|
+
declare function summarizeReconcilePlan(entries: readonly ReconcilePlanEntry[]): ReconcileNamespaceReport[];
|
|
166
|
+
/**
|
|
167
|
+
* Plan a full reconciliation across namespaces.
|
|
168
|
+
*
|
|
169
|
+
* `converged` is an affirmative claim that nothing needs to move, so it is
|
|
170
|
+
* derived from the entries rather than tracked alongside them: any action other
|
|
171
|
+
* than `identical` disproves it.
|
|
172
|
+
*/
|
|
173
|
+
declare function planReconciliation(namespaces: readonly ReconcileNamespaceInput[], options?: ReconcileOptions): ReconcilePlan;
|
|
174
|
+
|
|
175
|
+
export { type ReconcileAction, type ReconcileConflictPolicy, type ReconcileFileState, type ReconcileNamespaceInput, type ReconcileNamespaceReport, type ReconcileOptions, type ReconcilePlan, type ReconcilePlanEntry, ReconcilePlanInputError, type ReconcileReason, type ReconcileResolution, planNamespaceReconciliation, planReconciliation, summarizeReconcilePlan };
|