@remnic/core 9.69.97 → 9.69.99

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.
Files changed (113) hide show
  1. package/dist/access-admin-ops-surface.js +10 -10
  2. package/dist/access-authorization-probe.js +11 -11
  3. package/dist/access-boundary.js +10 -10
  4. package/dist/access-cli.js +29 -29
  5. package/dist/access-extraction-force-flush.js +10 -10
  6. package/dist/access-http-briefing.js +11 -11
  7. package/dist/access-http-query.js +10 -10
  8. package/dist/access-http.js +23 -23
  9. package/dist/access-identity-continuity-surface.js +10 -10
  10. package/dist/access-lcm-surface.js +10 -10
  11. package/dist/access-mcp.js +17 -17
  12. package/dist/access-namespace-preflight.js +10 -10
  13. package/dist/access-observe-write-category.js +7 -7
  14. package/dist/access-observe-write-surface.js +10 -10
  15. package/dist/access-offline-manifest.js +6 -6
  16. package/dist/access-operations-batch.js +11 -11
  17. package/dist/access-operations.js +16 -16
  18. package/dist/access-recall-concurrency.js +10 -10
  19. package/dist/access-recall-response.js +10 -10
  20. package/dist/access-recall-surface.js +10 -10
  21. package/dist/access-schema.js +6 -6
  22. package/dist/access-service.js +10 -10
  23. package/dist/access-surface-catalog.js +12 -12
  24. package/dist/active-recall.js +6 -6
  25. package/dist/{chunk-ETUZFFPU.js → chunk-3E6DGSGZ.js} +1 -1
  26. package/dist/chunk-3E6DGSGZ.js.map +1 -0
  27. package/dist/{chunk-UG5V3Z3R.js → chunk-3MK4OYYH.js} +3 -3
  28. package/dist/{chunk-MSAI3Q7D.js → chunk-3QH4NT72.js} +2 -2
  29. package/dist/{chunk-CTEUPJMV.js → chunk-42YP6FMP.js} +7 -7
  30. package/dist/{chunk-C6HPNPNK.js → chunk-53X6CL3A.js} +4 -4
  31. package/dist/{chunk-U36GYZ2P.js → chunk-55NZVUNI.js} +2 -2
  32. package/dist/{chunk-OEBUAC3O.js → chunk-76GQBIVX.js} +2 -2
  33. package/dist/{chunk-4NSLQ7EU.js → chunk-ANPRNTPT.js} +3 -3
  34. package/dist/{chunk-4NSLQ7EU.js.map → chunk-ANPRNTPT.js.map} +1 -1
  35. package/dist/{chunk-5S7SNRSJ.js → chunk-BCQU44UV.js} +2 -2
  36. package/dist/{chunk-ZQTYWSO3.js → chunk-GLJNGCCM.js} +2 -2
  37. package/dist/{chunk-SMLKHXPF.js → chunk-HGG63H3A.js} +2 -2
  38. package/dist/{chunk-P62DSJUK.js → chunk-IAKC3KEJ.js} +4 -4
  39. package/dist/{chunk-3BTHXB7Z.js → chunk-JWG43U5K.js} +2 -2
  40. package/dist/{chunk-IVEHY2VT.js → chunk-KJKTDMAD.js} +5 -5
  41. package/dist/chunk-KJKTDMAD.js.map +1 -0
  42. package/dist/{chunk-AXGJMDBS.js → chunk-KO4X4WRJ.js} +2 -2
  43. package/dist/{chunk-HJ3CBZIG.js → chunk-N4JZ7J2I.js} +7 -7
  44. package/dist/{chunk-VOZNBQNL.js → chunk-NHFWYPXN.js} +2 -2
  45. package/dist/{chunk-GXETU7AE.js → chunk-NI5MWLM3.js} +7 -7
  46. package/dist/{chunk-MZAH3CBT.js → chunk-NWBYJ4VH.js} +2 -2
  47. package/dist/{chunk-6BG364RN.js → chunk-ORVH5S7R.js} +2 -2
  48. package/dist/{chunk-ANGZWYL2.js → chunk-PGJYLYPK.js} +3 -3
  49. package/dist/{chunk-A3K2KKSG.js → chunk-PYYQCHJC.js} +2 -2
  50. package/dist/{chunk-WHIGRW7T.js → chunk-RA3OID2N.js} +2 -2
  51. package/dist/{chunk-RMV2JYOT.js → chunk-SZIJJGA2.js} +11 -11
  52. package/dist/{chunk-PH2V7EXZ.js → chunk-TK7G5ABN.js} +2 -2
  53. package/dist/{chunk-KYOZ5E6V.js → chunk-UEU5IURP.js} +2 -2
  54. package/dist/{chunk-NSKXRTVZ.js → chunk-UGEFYQWU.js} +2 -2
  55. package/dist/{chunk-AF5PW35O.js → chunk-XK6GP7QO.js} +2 -2
  56. package/dist/{chunk-YHZWVDP7.js → chunk-YB5GVH36.js} +2 -2
  57. package/dist/cli.js +27 -27
  58. package/dist/config.js +6 -6
  59. package/dist/deep-recall-http-glue.js +7 -7
  60. package/dist/external-wiki-access.js +11 -11
  61. package/dist/index.js +29 -29
  62. package/dist/memory-browse-operations.js +11 -11
  63. package/dist/offline-sync-changeset-generations.js +3 -3
  64. package/dist/offline-sync-embedding-generation.js +2 -2
  65. package/dist/offline-sync-exclude-globs.d.ts +1 -0
  66. package/dist/offline-sync-exclude-globs.d.ts.map +1 -1
  67. package/dist/offline-sync-exclude-globs.js +1 -1
  68. package/dist/offline-sync-snapshot-stream.js +6 -6
  69. package/dist/offline-sync-upload-staging.d.ts +2 -2
  70. package/dist/offline-sync-upload-staging.d.ts.map +1 -1
  71. package/dist/offline-sync-upload-staging.js +1 -1
  72. package/dist/offline-sync.d.ts.map +1 -1
  73. package/dist/offline-sync.js +5 -5
  74. package/dist/operator-toolkit.js +7 -7
  75. package/dist/orchestrator.js +29 -29
  76. package/dist/recall-navigation-operations.js +11 -11
  77. package/dist/recall-navigation.js +10 -10
  78. package/dist/resume-bundles.js +7 -7
  79. package/dist/support-passport/index.js +13 -13
  80. package/package.json +2 -2
  81. package/src/offline-sync-exclude-globs.ts +3 -2
  82. package/src/offline-sync-upload-staging.test.ts +324 -0
  83. package/src/offline-sync-upload-staging.ts +2 -1
  84. package/src/offline-sync.test.ts +12 -0
  85. package/src/offline-sync.ts +1 -6
  86. package/dist/chunk-ETUZFFPU.js.map +0 -1
  87. package/dist/chunk-IVEHY2VT.js.map +0 -1
  88. /package/dist/{chunk-UG5V3Z3R.js.map → chunk-3MK4OYYH.js.map} +0 -0
  89. /package/dist/{chunk-MSAI3Q7D.js.map → chunk-3QH4NT72.js.map} +0 -0
  90. /package/dist/{chunk-CTEUPJMV.js.map → chunk-42YP6FMP.js.map} +0 -0
  91. /package/dist/{chunk-C6HPNPNK.js.map → chunk-53X6CL3A.js.map} +0 -0
  92. /package/dist/{chunk-U36GYZ2P.js.map → chunk-55NZVUNI.js.map} +0 -0
  93. /package/dist/{chunk-OEBUAC3O.js.map → chunk-76GQBIVX.js.map} +0 -0
  94. /package/dist/{chunk-5S7SNRSJ.js.map → chunk-BCQU44UV.js.map} +0 -0
  95. /package/dist/{chunk-ZQTYWSO3.js.map → chunk-GLJNGCCM.js.map} +0 -0
  96. /package/dist/{chunk-SMLKHXPF.js.map → chunk-HGG63H3A.js.map} +0 -0
  97. /package/dist/{chunk-P62DSJUK.js.map → chunk-IAKC3KEJ.js.map} +0 -0
  98. /package/dist/{chunk-3BTHXB7Z.js.map → chunk-JWG43U5K.js.map} +0 -0
  99. /package/dist/{chunk-AXGJMDBS.js.map → chunk-KO4X4WRJ.js.map} +0 -0
  100. /package/dist/{chunk-HJ3CBZIG.js.map → chunk-N4JZ7J2I.js.map} +0 -0
  101. /package/dist/{chunk-VOZNBQNL.js.map → chunk-NHFWYPXN.js.map} +0 -0
  102. /package/dist/{chunk-GXETU7AE.js.map → chunk-NI5MWLM3.js.map} +0 -0
  103. /package/dist/{chunk-MZAH3CBT.js.map → chunk-NWBYJ4VH.js.map} +0 -0
  104. /package/dist/{chunk-6BG364RN.js.map → chunk-ORVH5S7R.js.map} +0 -0
  105. /package/dist/{chunk-ANGZWYL2.js.map → chunk-PGJYLYPK.js.map} +0 -0
  106. /package/dist/{chunk-A3K2KKSG.js.map → chunk-PYYQCHJC.js.map} +0 -0
  107. /package/dist/{chunk-WHIGRW7T.js.map → chunk-RA3OID2N.js.map} +0 -0
  108. /package/dist/{chunk-RMV2JYOT.js.map → chunk-SZIJJGA2.js.map} +0 -0
  109. /package/dist/{chunk-PH2V7EXZ.js.map → chunk-TK7G5ABN.js.map} +0 -0
  110. /package/dist/{chunk-KYOZ5E6V.js.map → chunk-UEU5IURP.js.map} +0 -0
  111. /package/dist/{chunk-NSKXRTVZ.js.map → chunk-UGEFYQWU.js.map} +0 -0
  112. /package/dist/{chunk-AF5PW35O.js.map → chunk-XK6GP7QO.js.map} +0 -0
  113. /package/dist/{chunk-YHZWVDP7.js.map → chunk-YB5GVH36.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  assembleRecallResponse
3
- } from "./chunk-GXETU7AE.js";
3
+ } from "./chunk-NI5MWLM3.js";
4
4
  import "./chunk-W4F3C7N7.js";
5
5
  import "./chunk-MPC7TYTZ.js";
6
6
  import "./chunk-ZHXSOMYH.js";
@@ -32,7 +32,7 @@ import "./chunk-32HO62I4.js";
32
32
  import "./chunk-SOBJ6NEY.js";
33
33
  import "./chunk-QPWUG2S3.js";
34
34
  import "./chunk-R36IBI2M.js";
35
- import "./chunk-C6HPNPNK.js";
35
+ import "./chunk-53X6CL3A.js";
36
36
  import "./chunk-E6UNM67F.js";
37
37
  import "./chunk-6WHJ2EAB.js";
38
38
  import "./chunk-AQEJKOKI.js";
@@ -171,13 +171,13 @@ import "./chunk-Z7L72ZHL.js";
171
171
  import "./chunk-4O4TKIXQ.js";
172
172
  import "./chunk-RMMA44HE.js";
173
173
  import "./chunk-SYOIVK7K.js";
174
- import "./chunk-PH2V7EXZ.js";
174
+ import "./chunk-TK7G5ABN.js";
175
175
  import "./chunk-MY7B3HYC.js";
176
176
  import "./chunk-353C5UNV.js";
177
177
  import "./chunk-5AYUHSAU.js";
178
178
  import "./chunk-BT7NVCML.js";
179
179
  import "./chunk-PO7NXNGC.js";
180
- import "./chunk-3BTHXB7Z.js";
180
+ import "./chunk-JWG43U5K.js";
181
181
  import "./chunk-KQAFEZQX.js";
182
182
  import "./chunk-WEHSQBFR.js";
183
183
  import "./chunk-X7Y7WX73.js";
@@ -188,7 +188,7 @@ import "./chunk-SOAU2OE2.js";
188
188
  import "./chunk-BJMBJZ2Y.js";
189
189
  import "./chunk-UKJAGEXH.js";
190
190
  import "./chunk-FP2373TW.js";
191
- import "./chunk-AF5PW35O.js";
191
+ import "./chunk-XK6GP7QO.js";
192
192
  import "./chunk-N7QV3CMX.js";
193
193
  import "./chunk-PAAJWQH5.js";
194
194
  import "./chunk-2JRB3Z5N.js";
@@ -206,13 +206,13 @@ import "./chunk-C7HJ3NEI.js";
206
206
  import "./chunk-N4PYB235.js";
207
207
  import "./chunk-AW4QUFQF.js";
208
208
  import "./chunk-5FVVY2EB.js";
209
- import "./chunk-IVEHY2VT.js";
209
+ import "./chunk-KJKTDMAD.js";
210
210
  import "./chunk-UI3NYK34.js";
211
- import "./chunk-ETUZFFPU.js";
212
- import "./chunk-MSAI3Q7D.js";
213
- import "./chunk-AXGJMDBS.js";
211
+ import "./chunk-3E6DGSGZ.js";
212
+ import "./chunk-3QH4NT72.js";
213
+ import "./chunk-KO4X4WRJ.js";
214
214
  import "./chunk-TYT4TEQV.js";
215
- import "./chunk-4NSLQ7EU.js";
215
+ import "./chunk-ANPRNTPT.js";
216
216
  import "./chunk-EFHNFTWB.js";
217
217
  import "./chunk-GCGJW34D.js";
218
218
  import "./chunk-75PT4N7Q.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AccessRecallSurface
3
- } from "./chunk-GXETU7AE.js";
3
+ } from "./chunk-NI5MWLM3.js";
4
4
  import "./chunk-W4F3C7N7.js";
5
5
  import "./chunk-MPC7TYTZ.js";
6
6
  import "./chunk-ZHXSOMYH.js";
@@ -32,7 +32,7 @@ import "./chunk-32HO62I4.js";
32
32
  import "./chunk-SOBJ6NEY.js";
33
33
  import "./chunk-QPWUG2S3.js";
34
34
  import "./chunk-R36IBI2M.js";
35
- import "./chunk-C6HPNPNK.js";
35
+ import "./chunk-53X6CL3A.js";
36
36
  import "./chunk-E6UNM67F.js";
37
37
  import "./chunk-6WHJ2EAB.js";
38
38
  import "./chunk-AQEJKOKI.js";
@@ -171,13 +171,13 @@ import "./chunk-Z7L72ZHL.js";
171
171
  import "./chunk-4O4TKIXQ.js";
172
172
  import "./chunk-RMMA44HE.js";
173
173
  import "./chunk-SYOIVK7K.js";
174
- import "./chunk-PH2V7EXZ.js";
174
+ import "./chunk-TK7G5ABN.js";
175
175
  import "./chunk-MY7B3HYC.js";
176
176
  import "./chunk-353C5UNV.js";
177
177
  import "./chunk-5AYUHSAU.js";
178
178
  import "./chunk-BT7NVCML.js";
179
179
  import "./chunk-PO7NXNGC.js";
180
- import "./chunk-3BTHXB7Z.js";
180
+ import "./chunk-JWG43U5K.js";
181
181
  import "./chunk-KQAFEZQX.js";
182
182
  import "./chunk-WEHSQBFR.js";
183
183
  import "./chunk-X7Y7WX73.js";
@@ -188,7 +188,7 @@ import "./chunk-SOAU2OE2.js";
188
188
  import "./chunk-BJMBJZ2Y.js";
189
189
  import "./chunk-UKJAGEXH.js";
190
190
  import "./chunk-FP2373TW.js";
191
- import "./chunk-AF5PW35O.js";
191
+ import "./chunk-XK6GP7QO.js";
192
192
  import "./chunk-N7QV3CMX.js";
193
193
  import "./chunk-PAAJWQH5.js";
194
194
  import "./chunk-2JRB3Z5N.js";
@@ -206,13 +206,13 @@ import "./chunk-C7HJ3NEI.js";
206
206
  import "./chunk-N4PYB235.js";
207
207
  import "./chunk-AW4QUFQF.js";
208
208
  import "./chunk-5FVVY2EB.js";
209
- import "./chunk-IVEHY2VT.js";
209
+ import "./chunk-KJKTDMAD.js";
210
210
  import "./chunk-UI3NYK34.js";
211
- import "./chunk-ETUZFFPU.js";
212
- import "./chunk-MSAI3Q7D.js";
213
- import "./chunk-AXGJMDBS.js";
211
+ import "./chunk-3E6DGSGZ.js";
212
+ import "./chunk-3QH4NT72.js";
213
+ import "./chunk-KO4X4WRJ.js";
214
214
  import "./chunk-TYT4TEQV.js";
215
- import "./chunk-4NSLQ7EU.js";
215
+ import "./chunk-ANPRNTPT.js";
216
216
  import "./chunk-EFHNFTWB.js";
217
217
  import "./chunk-GCGJW34D.js";
218
218
  import "./chunk-75PT4N7Q.js";
@@ -32,7 +32,7 @@ import {
32
32
  trustZoneDemoSeedRequestSchema,
33
33
  trustZonePromoteRequestSchema,
34
34
  validateRequest
35
- } from "./chunk-3BTHXB7Z.js";
35
+ } from "./chunk-JWG43U5K.js";
36
36
  import "./chunk-KQAFEZQX.js";
37
37
  import "./chunk-WEHSQBFR.js";
38
38
  import "./chunk-X7Y7WX73.js";
@@ -43,13 +43,13 @@ import "./chunk-SOAU2OE2.js";
43
43
  import "./chunk-BJMBJZ2Y.js";
44
44
  import "./chunk-UKJAGEXH.js";
45
45
  import "./chunk-FP2373TW.js";
46
- import "./chunk-IVEHY2VT.js";
46
+ import "./chunk-KJKTDMAD.js";
47
47
  import "./chunk-UI3NYK34.js";
48
- import "./chunk-ETUZFFPU.js";
49
- import "./chunk-MSAI3Q7D.js";
50
- import "./chunk-AXGJMDBS.js";
48
+ import "./chunk-3E6DGSGZ.js";
49
+ import "./chunk-3QH4NT72.js";
50
+ import "./chunk-KO4X4WRJ.js";
51
51
  import "./chunk-TYT4TEQV.js";
52
- import "./chunk-4NSLQ7EU.js";
52
+ import "./chunk-ANPRNTPT.js";
53
53
  import "./chunk-EFHNFTWB.js";
54
54
  import "./chunk-GCGJW34D.js";
55
55
  import "./chunk-75PT4N7Q.js";
@@ -4,7 +4,7 @@ import {
4
4
  buildProjectedGovernanceProposedActions,
5
5
  hasGroupedGovernanceActions,
6
6
  shapeMemorySummary
7
- } from "./chunk-GXETU7AE.js";
7
+ } from "./chunk-NI5MWLM3.js";
8
8
  import "./chunk-W4F3C7N7.js";
9
9
  import "./chunk-MPC7TYTZ.js";
10
10
  import "./chunk-ZHXSOMYH.js";
@@ -36,7 +36,7 @@ import "./chunk-32HO62I4.js";
36
36
  import "./chunk-SOBJ6NEY.js";
37
37
  import "./chunk-QPWUG2S3.js";
38
38
  import "./chunk-R36IBI2M.js";
39
- import "./chunk-C6HPNPNK.js";
39
+ import "./chunk-53X6CL3A.js";
40
40
  import "./chunk-E6UNM67F.js";
41
41
  import "./chunk-6WHJ2EAB.js";
42
42
  import "./chunk-AQEJKOKI.js";
@@ -175,13 +175,13 @@ import "./chunk-Z7L72ZHL.js";
175
175
  import "./chunk-4O4TKIXQ.js";
176
176
  import "./chunk-RMMA44HE.js";
177
177
  import "./chunk-SYOIVK7K.js";
178
- import "./chunk-PH2V7EXZ.js";
178
+ import "./chunk-TK7G5ABN.js";
179
179
  import "./chunk-MY7B3HYC.js";
180
180
  import "./chunk-353C5UNV.js";
181
181
  import "./chunk-5AYUHSAU.js";
182
182
  import "./chunk-BT7NVCML.js";
183
183
  import "./chunk-PO7NXNGC.js";
184
- import "./chunk-3BTHXB7Z.js";
184
+ import "./chunk-JWG43U5K.js";
185
185
  import "./chunk-KQAFEZQX.js";
186
186
  import "./chunk-WEHSQBFR.js";
187
187
  import "./chunk-X7Y7WX73.js";
@@ -192,7 +192,7 @@ import "./chunk-SOAU2OE2.js";
192
192
  import "./chunk-BJMBJZ2Y.js";
193
193
  import "./chunk-UKJAGEXH.js";
194
194
  import "./chunk-FP2373TW.js";
195
- import "./chunk-AF5PW35O.js";
195
+ import "./chunk-XK6GP7QO.js";
196
196
  import "./chunk-N7QV3CMX.js";
197
197
  import "./chunk-PAAJWQH5.js";
198
198
  import "./chunk-2JRB3Z5N.js";
@@ -210,13 +210,13 @@ import "./chunk-C7HJ3NEI.js";
210
210
  import "./chunk-N4PYB235.js";
211
211
  import "./chunk-AW4QUFQF.js";
212
212
  import "./chunk-5FVVY2EB.js";
213
- import "./chunk-IVEHY2VT.js";
213
+ import "./chunk-KJKTDMAD.js";
214
214
  import "./chunk-UI3NYK34.js";
215
- import "./chunk-ETUZFFPU.js";
216
- import "./chunk-MSAI3Q7D.js";
217
- import "./chunk-AXGJMDBS.js";
215
+ import "./chunk-3E6DGSGZ.js";
216
+ import "./chunk-3QH4NT72.js";
217
+ import "./chunk-KO4X4WRJ.js";
218
218
  import "./chunk-TYT4TEQV.js";
219
- import "./chunk-4NSLQ7EU.js";
219
+ import "./chunk-ANPRNTPT.js";
220
220
  import "./chunk-EFHNFTWB.js";
221
221
  import "./chunk-GCGJW34D.js";
222
222
  import "./chunk-75PT4N7Q.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  SUPPORT_PASSPORT_OWNER_HTTP_ROUTES
3
- } from "./chunk-ZQTYWSO3.js";
3
+ } from "./chunk-GLJNGCCM.js";
4
4
  import {
5
5
  SUPPORT_PASSPORT_PUBLIC_HTTP_ROUTES
6
- } from "./chunk-VOZNBQNL.js";
7
- import "./chunk-GXETU7AE.js";
6
+ } from "./chunk-NHFWYPXN.js";
7
+ import "./chunk-NI5MWLM3.js";
8
8
  import "./chunk-W4F3C7N7.js";
9
9
  import "./chunk-MPC7TYTZ.js";
10
10
  import "./chunk-ZHXSOMYH.js";
@@ -36,7 +36,7 @@ import "./chunk-32HO62I4.js";
36
36
  import "./chunk-SOBJ6NEY.js";
37
37
  import "./chunk-QPWUG2S3.js";
38
38
  import "./chunk-R36IBI2M.js";
39
- import "./chunk-C6HPNPNK.js";
39
+ import "./chunk-53X6CL3A.js";
40
40
  import "./chunk-E6UNM67F.js";
41
41
  import "./chunk-6WHJ2EAB.js";
42
42
  import "./chunk-AQEJKOKI.js";
@@ -175,13 +175,13 @@ import "./chunk-Z7L72ZHL.js";
175
175
  import "./chunk-4O4TKIXQ.js";
176
176
  import "./chunk-RMMA44HE.js";
177
177
  import "./chunk-SYOIVK7K.js";
178
- import "./chunk-PH2V7EXZ.js";
178
+ import "./chunk-TK7G5ABN.js";
179
179
  import "./chunk-MY7B3HYC.js";
180
180
  import "./chunk-353C5UNV.js";
181
181
  import "./chunk-5AYUHSAU.js";
182
182
  import "./chunk-BT7NVCML.js";
183
183
  import "./chunk-PO7NXNGC.js";
184
- import "./chunk-3BTHXB7Z.js";
184
+ import "./chunk-JWG43U5K.js";
185
185
  import "./chunk-KQAFEZQX.js";
186
186
  import "./chunk-WEHSQBFR.js";
187
187
  import "./chunk-X7Y7WX73.js";
@@ -192,7 +192,7 @@ import "./chunk-SOAU2OE2.js";
192
192
  import "./chunk-BJMBJZ2Y.js";
193
193
  import "./chunk-UKJAGEXH.js";
194
194
  import "./chunk-FP2373TW.js";
195
- import "./chunk-AF5PW35O.js";
195
+ import "./chunk-XK6GP7QO.js";
196
196
  import "./chunk-N7QV3CMX.js";
197
197
  import "./chunk-PAAJWQH5.js";
198
198
  import "./chunk-2JRB3Z5N.js";
@@ -210,13 +210,13 @@ import "./chunk-C7HJ3NEI.js";
210
210
  import "./chunk-N4PYB235.js";
211
211
  import "./chunk-AW4QUFQF.js";
212
212
  import "./chunk-5FVVY2EB.js";
213
- import "./chunk-IVEHY2VT.js";
213
+ import "./chunk-KJKTDMAD.js";
214
214
  import "./chunk-UI3NYK34.js";
215
- import "./chunk-ETUZFFPU.js";
216
- import "./chunk-MSAI3Q7D.js";
217
- import "./chunk-AXGJMDBS.js";
215
+ import "./chunk-3E6DGSGZ.js";
216
+ import "./chunk-3QH4NT72.js";
217
+ import "./chunk-KO4X4WRJ.js";
218
218
  import "./chunk-TYT4TEQV.js";
219
- import "./chunk-4NSLQ7EU.js";
219
+ import "./chunk-ANPRNTPT.js";
220
220
  import "./chunk-EFHNFTWB.js";
221
221
  import "./chunk-GCGJW34D.js";
222
222
  import "./chunk-75PT4N7Q.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DEFAULT_REASONING_MODEL
3
- } from "./chunk-U36GYZ2P.js";
3
+ } from "./chunk-55NZVUNI.js";
4
4
  import "./chunk-ZKOPY4WW.js";
5
5
  import "./chunk-62OKGIJA.js";
6
6
  import "./chunk-EUL3S3LE.js";
@@ -126,13 +126,13 @@ import "./chunk-C7HJ3NEI.js";
126
126
  import "./chunk-N4PYB235.js";
127
127
  import "./chunk-AW4QUFQF.js";
128
128
  import "./chunk-5FVVY2EB.js";
129
- import "./chunk-IVEHY2VT.js";
129
+ import "./chunk-KJKTDMAD.js";
130
130
  import "./chunk-UI3NYK34.js";
131
- import "./chunk-ETUZFFPU.js";
132
- import "./chunk-MSAI3Q7D.js";
133
- import "./chunk-AXGJMDBS.js";
131
+ import "./chunk-3E6DGSGZ.js";
132
+ import "./chunk-3QH4NT72.js";
133
+ import "./chunk-KO4X4WRJ.js";
134
134
  import "./chunk-TYT4TEQV.js";
135
- import "./chunk-4NSLQ7EU.js";
135
+ import "./chunk-ANPRNTPT.js";
136
136
  import "./chunk-EFHNFTWB.js";
137
137
  import "./chunk-GCGJW34D.js";
138
138
  import "./chunk-75PT4N7Q.js";
@@ -215,4 +215,4 @@ export {
215
215
  writeSafeFileFromUpload,
216
216
  cleanupOfflineUpload
217
217
  };
218
- //# sourceMappingURL=chunk-ETUZFFPU.js.map
218
+ //# sourceMappingURL=chunk-3E6DGSGZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/offline-sync-upload-staging.ts"],"sourcesContent":["// Offline-sync upload staging: chunked upload spool under\n// `.offline-sync/uploads/` (issue #2033). Extracted from offline-sync.ts so\n// the god-file line-count ratchet does not grow; behavior is unchanged.\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { lstat, mkdir, open, readFile, readdir, rename, rm, stat, unlink, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { SYNC_INTERNAL_DIR, setSafeFileMtime } from \"./offline-sync-file-io.js\";\nimport type { OfflineSyncFileTarget } from \"./offline-sync-file-io.js\";\nimport type {\n OfflineSyncFileStagingWriteTarget,\n OfflineSyncFileWriteChunksTarget,\n OfflineSyncFileWriteTarget,\n} from \"./offline-sync.js\";\nimport { type SafeArchiveRoot, resolveSafeArchiveTarget } from \"./transfer/fs-utils.js\";\n\nconst OFFLINE_SYNC_UPLOAD_STAGING_MAX_AGE_MS = 24 * 60 * 60 * 1000;\n\nexport function hashText(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\n/** A staged upload spool returned by writeOfflineUploadChunk; consumed by digest/cleanup/finalize. */\nexport interface OfflineUploadStaging {\n kind: \"single\" | \"chunks\";\n relPath: string;\n filePath: string;\n}\n\nfunction offlineUploadRelPath(options: {\n sourceId: string;\n relPath: string;\n sha256: string;\n bytes: number;\n}): string {\n const key = hashText([options.sourceId, options.relPath, options.sha256, String(options.bytes)].join(\"\\0\"));\n return `${SYNC_INTERNAL_DIR}/uploads/${key}.part`;\n}\n\nasync function offlineUploadPath(\n root: SafeArchiveRoot,\n options: {\n sourceId: string;\n relPath: string;\n sha256: string;\n bytes: number;\n }\n): Promise<OfflineUploadStaging> {\n const relPath = offlineUploadRelPath(options);\n return {\n kind: \"single\",\n relPath,\n filePath: await resolveSafeArchiveTarget(root, relPath),\n };\n}\n\nasync function offlineUploadChunkPath(\n root: SafeArchiveRoot,\n options: {\n sourceId: string;\n relPath: string;\n sha256: string;\n bytes: number;\n offset: number;\n }\n): Promise<OfflineUploadStaging> {\n const uploadRelPath = offlineUploadRelPath(options);\n const relPath = `${uploadRelPath}/${String(options.offset).padStart(20, \"0\")}.part`;\n return {\n kind: \"chunks\",\n relPath,\n filePath: await resolveSafeArchiveTarget(root, relPath),\n };\n}\n\nexport async function writeOfflineUploadChunk(options: {\n root: SafeArchiveRoot;\n sourceId: string;\n relPath: string;\n sha256: string;\n bytes: number;\n offset: number;\n content: Buffer;\n readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;\n writeFile?: (target: OfflineSyncFileWriteTarget) => Promise<void>;\n writeStagingFile?: (target: OfflineSyncFileStagingWriteTarget) => Promise<void>;\n}): Promise<OfflineUploadStaging> {\n if ((options.writeFile || options.writeStagingFile) && !options.readFile) {\n throw new Error(\"offline sync upload chunk storage hooks require readFile\");\n }\n const uploadRoot = {\n ...(await offlineUploadPath(options.root, options)),\n kind: \"chunks\" as const,\n };\n if (options.offset === 0) {\n await rm(uploadRoot.filePath, { recursive: true, force: true }).catch(() => {});\n } else {\n const existing = await stat(uploadRoot.filePath).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n });\n if (!existing || !existing.isDirectory()) {\n throw new Error(`offline sync upload is missing initial chunk for ${options.relPath}`);\n }\n }\n const chunk = await offlineUploadChunkPath(options.root, { ...options, offset: options.offset });\n\n const writeStagingFile = options.writeStagingFile ?? options.writeFile;\n if (writeStagingFile) {\n // Storage-backed services provide these hooks so secure-store deployments\n // keep staged partial uploads encrypted at rest without mutating indexes.\n await writeOfflineUploadContent({\n root: options.root,\n relPath: chunk.relPath,\n filePath: chunk.filePath,\n content: options.content,\n writeFile: writeStagingFile,\n });\n return uploadRoot;\n }\n\n await mkdir(path.dirname(chunk.filePath), { recursive: true });\n const existingChunk = await lstat(chunk.filePath).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n });\n if (existingChunk?.isSymbolicLink()) {\n throw new Error(`offline sync upload chunk is a symlink: ${chunk.relPath}`);\n }\n await writeFile(chunk.filePath, options.content, { mode: 0o600 });\n return uploadRoot;\n}\n\nexport async function pruneOfflineUploadStaging(root: SafeArchiveRoot): Promise<void> {\n const uploadsRelPath = `${SYNC_INTERNAL_DIR}/uploads`;\n const uploadsPath = await resolveSafeArchiveTarget(root, uploadsRelPath);\n const entries = await readdir(uploadsPath, { withFileTypes: true }).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return [];\n throw error;\n });\n const now = Date.now();\n await Promise.all(\n entries.map(async (entry) => {\n if (!/^[a-f0-9]{64}\\.part$/i.test(entry.name)) return;\n const relPath = `${uploadsRelPath}/${entry.name}`;\n const filePath = await resolveSafeArchiveTarget(root, relPath);\n const info = await lstat(filePath).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n });\n if (!info) return;\n if (now - info.mtimeMs <= OFFLINE_SYNC_UPLOAD_STAGING_MAX_AGE_MS) return;\n await rm(filePath, { recursive: true, force: true });\n })\n );\n}\n\nasync function* readOfflineUploadStagingChunks(options: {\n root: SafeArchiveRoot;\n upload: OfflineUploadStaging;\n readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;\n}): AsyncGenerator<Buffer> {\n if (options.upload.kind === \"single\") {\n yield await readOfflineUploadContent({\n root: options.root,\n relPath: options.upload.relPath,\n filePath: options.upload.filePath,\n readFile: options.readFile,\n });\n return;\n }\n\n const entries = await readdir(options.upload.filePath);\n const chunkNames = entries.filter((entry) => /^\\d{20}\\.part$/.test(entry)).sort();\n if (chunkNames.length === 0) {\n throw new Error(`offline sync upload is missing chunks for ${options.upload.relPath}`);\n }\n let expectedOffset = 0;\n for (const chunkName of chunkNames) {\n const offset = Number(chunkName.slice(0, 20));\n if (!Number.isSafeInteger(offset) || offset !== expectedOffset) {\n throw new Error(\n `offline sync upload offset mismatch for ${options.upload.relPath}: expected ${expectedOffset}, got ${offset}`\n );\n }\n const relPath = `${options.upload.relPath}/${chunkName}`;\n const filePath = await resolveSafeArchiveTarget(options.root, relPath);\n const content = await readOfflineUploadContent({\n root: options.root,\n relPath,\n filePath,\n readFile: options.readFile,\n });\n expectedOffset += content.length;\n yield content;\n }\n}\n\nexport async function digestOfflineUploadStagingContent(options: {\n root: SafeArchiveRoot;\n upload: OfflineUploadStaging;\n readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;\n}): Promise<{ sha256: string; bytes: number }> {\n const hash = createHash(\"sha256\");\n let bytes = 0;\n for await (const chunk of readOfflineUploadStagingChunks(options)) {\n hash.update(chunk);\n bytes += chunk.length;\n }\n return { sha256: hash.digest(\"hex\"), bytes };\n}\n\nexport async function writeSafeFileFromUpload(\n root: SafeArchiveRoot,\n relPath: string,\n upload: OfflineUploadStaging,\n readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>,\n writeFileChunks?: (target: OfflineSyncFileWriteChunksTarget) => Promise<void>,\n mtimeMs?: number\n): Promise<void> {\n const target = await resolveSafeArchiveTarget(root, relPath);\n const chunks = readOfflineUploadStagingChunks({ root, upload, readFile });\n if (writeFileChunks) {\n await writeFileChunks({ root: root.abs, path: relPath, filePath: target, chunks });\n await setSafeFileMtime(root, relPath, mtimeMs);\n return;\n }\n\n await mkdir(path.dirname(target), { recursive: true });\n const tmp = path.join(path.dirname(target), `.remnic-sync.${process.pid}.${randomUUID()}.tmp`);\n const handle = await open(tmp, \"w\", 0o600);\n try {\n for await (const chunk of chunks) {\n if (chunk.length > 0) await handle.write(chunk);\n }\n await handle.close();\n const targetStat = await lstat(target).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n });\n if (targetStat?.isSymbolicLink()) {\n throw new Error(`offline sync target is a symlink: ${relPath}`);\n }\n await rename(tmp, target);\n await setSafeFileMtime(root, relPath, mtimeMs);\n } catch (error) {\n await handle.close().catch(() => {});\n await unlink(tmp).catch(() => {});\n throw error;\n }\n}\n\nexport async function cleanupOfflineUpload(upload: OfflineUploadStaging): Promise<void> {\n if (upload.kind === \"chunks\") {\n await rm(upload.filePath, { recursive: true, force: true });\n return;\n }\n await unlink(upload.filePath).catch((error: unknown) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return;\n throw error;\n });\n}\n\nasync function readOfflineUploadContent(options: {\n root: SafeArchiveRoot;\n relPath: string;\n filePath: string;\n readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;\n}): Promise<Buffer> {\n if (options.readFile) {\n return options.readFile({\n root: options.root.abs,\n path: options.relPath,\n filePath: options.filePath,\n });\n }\n return readFile(options.filePath);\n}\n\nasync function writeOfflineUploadContent(options: {\n root: SafeArchiveRoot;\n relPath: string;\n filePath: string;\n content: Buffer;\n writeFile: (target: OfflineSyncFileWriteTarget) => Promise<void>;\n}): Promise<void> {\n await options.writeFile({\n root: options.root.abs,\n path: options.relPath,\n filePath: options.filePath,\n content: options.content,\n });\n}\n"],"mappings":"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","names":["readFile"]}
@@ -21,7 +21,7 @@ import {
21
21
  defineOperation,
22
22
  parseNamespacePreflightWriteOp,
23
23
  resolveAuthorizedNamespaceWritablePreflight
24
- } from "./chunk-GXETU7AE.js";
24
+ } from "./chunk-NI5MWLM3.js";
25
25
  import {
26
26
  parseSharedWriteOutputControls
27
27
  } from "./chunk-IFBSZGW3.js";
@@ -36,7 +36,7 @@ import {
36
36
  recallRequestSchema,
37
37
  retainedCategoryAlias,
38
38
  suggestionSubmitRequestSchema
39
- } from "./chunk-3BTHXB7Z.js";
39
+ } from "./chunk-JWG43U5K.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-UG5V3Z3R.js.map
606
+ //# sourceMappingURL=chunk-3MK4OYYH.js.map
@@ -5,7 +5,7 @@ import {
5
5
  embeddingGenerationMembership,
6
6
  embeddingShardDirOf,
7
7
  isEmbeddingGenerationDirPath
8
- } from "./chunk-AXGJMDBS.js";
8
+ } from "./chunk-KO4X4WRJ.js";
9
9
  import {
10
10
  EMBEDDING_SHARD_FILE_PATTERN
11
11
  } from "./chunk-TYT4TEQV.js";
@@ -369,4 +369,4 @@ export {
369
369
  applyChangesetEmbeddingGenerations,
370
370
  buildChangesetGenerationManifest
371
371
  };
372
- //# sourceMappingURL=chunk-MSAI3Q7D.js.map
372
+ //# sourceMappingURL=chunk-3QH4NT72.js.map
@@ -228,7 +228,7 @@ import {
228
228
  runTimelinePublishCli,
229
229
  screenCandidateFact,
230
230
  summarizeVaultPublish
231
- } from "./chunk-HJ3CBZIG.js";
231
+ } from "./chunk-N4JZ7J2I.js";
232
232
  import {
233
233
  RoutingRulesStore
234
234
  } from "./chunk-TBUEE7XF.js";
@@ -258,7 +258,7 @@ import {
258
258
  import {
259
259
  runNamespaceMaintenanceFanout,
260
260
  summarizeNamespaceMaintenanceHealth
261
- } from "./chunk-OEBUAC3O.js";
261
+ } from "./chunk-76GQBIVX.js";
262
262
  import {
263
263
  planNamespaceMaintenance
264
264
  } from "./chunk-WTZQM74L.js";
@@ -329,7 +329,7 @@ import {
329
329
  embeddingsFromCosineHits,
330
330
  normalizeConnectorScope,
331
331
  runSeedGraduationPass
332
- } from "./chunk-U36GYZ2P.js";
332
+ } from "./chunk-55NZVUNI.js";
333
333
  import {
334
334
  compileCorrectionRule,
335
335
  correctionsFilePath,
@@ -367,7 +367,7 @@ import {
367
367
  } from "./chunk-QW27DOHG.js";
368
368
  import {
369
369
  MeetingsInputError
370
- } from "./chunk-RMV2JYOT.js";
370
+ } from "./chunk-SZIJJGA2.js";
371
371
  import {
372
372
  WearablesInputError,
373
373
  describeErrorForOperator
@@ -394,7 +394,7 @@ import {
394
394
  detectPassiveCorrections,
395
395
  renderSessionExperiencePreview,
396
396
  scoreSessionExperienceForPrompt
397
- } from "./chunk-GXETU7AE.js";
397
+ } from "./chunk-NI5MWLM3.js";
398
398
  import {
399
399
  importCapsule
400
400
  } from "./chunk-ZHXSOMYH.js";
@@ -754,7 +754,7 @@ import {
754
754
  } from "./chunk-N4PYB235.js";
755
755
  import {
756
756
  storageBackedIndexStoreIo
757
- } from "./chunk-AXGJMDBS.js";
757
+ } from "./chunk-KO4X4WRJ.js";
758
758
  import {
759
759
  assertIsDirectoryNotSymlink,
760
760
  assertRealpathInsideRoot
@@ -31096,4 +31096,4 @@ export {
31096
31096
  qmdStartupCollectionChecksWithTimeout,
31097
31097
  Orchestrator
31098
31098
  };
31099
- //# sourceMappingURL=chunk-CTEUPJMV.js.map
31099
+ //# sourceMappingURL=chunk-42YP6FMP.js.map
@@ -2,14 +2,14 @@ import {
2
2
  OFFLINE_SYNC_SNAPSHOT_FORMAT,
3
3
  filterOfflineSyncDeletionRevisions,
4
4
  iterateOfflineSyncSnapshotFileRecords
5
- } from "./chunk-IVEHY2VT.js";
5
+ } from "./chunk-KJKTDMAD.js";
6
6
  import {
7
7
  computeOmittedEmbeddingGenerationPaths,
8
8
  embeddingGenerationMembership
9
- } from "./chunk-AXGJMDBS.js";
9
+ } from "./chunk-KO4X4WRJ.js";
10
10
  import {
11
11
  matchesOfflineSyncDefaultExclude
12
- } from "./chunk-4NSLQ7EU.js";
12
+ } from "./chunk-ANPRNTPT.js";
13
13
 
14
14
  // src/offline-sync-snapshot-stream.ts
15
15
  import { createHash } from "crypto";
@@ -61,4 +61,4 @@ async function buildEmbeddingAwareSnapshotStream(options) {
61
61
  export {
62
62
  buildEmbeddingAwareSnapshotStream
63
63
  };
64
- //# sourceMappingURL=chunk-C6HPNPNK.js.map
64
+ //# sourceMappingURL=chunk-53X6CL3A.js.map
@@ -141,7 +141,7 @@ import {
141
141
  } from "./chunk-7RJUVTVF.js";
142
142
  import {
143
143
  parseOfflineSyncExcludes
144
- } from "./chunk-4NSLQ7EU.js";
144
+ } from "./chunk-ANPRNTPT.js";
145
145
  import {
146
146
  excludeSupportPassportPrivateMemories
147
147
  } from "./chunk-PWPIERBM.js";
@@ -5515,4 +5515,4 @@ export {
5515
5515
  VALID_MEMORY_CATEGORIES,
5516
5516
  parseConfig
5517
5517
  };
5518
- //# sourceMappingURL=chunk-U36GYZ2P.js.map
5518
+ //# sourceMappingURL=chunk-55NZVUNI.js.map
@@ -38,7 +38,7 @@ import {
38
38
  } from "./chunk-YBPYIAA5.js";
39
39
  import {
40
40
  parseConfig
41
- } from "./chunk-U36GYZ2P.js";
41
+ } from "./chunk-55NZVUNI.js";
42
42
  import {
43
43
  readAggregateExtractionWatermark
44
44
  } from "./chunk-R36IBI2M.js";
@@ -1683,4 +1683,4 @@ export {
1683
1683
  runBenchmarkRecall,
1684
1684
  runOperatorRepair
1685
1685
  };
1686
- //# sourceMappingURL=chunk-OEBUAC3O.js.map
1686
+ //# sourceMappingURL=chunk-76GQBIVX.js.map
@@ -74,11 +74,11 @@ function globToRegExp(glob) {
74
74
  if (ch === "*") {
75
75
  if (glob[i + 1] === "*") {
76
76
  if (glob[i + 2] === "/") {
77
- source += "(?:.*/)?";
77
+ source += "(?:[\\s\\S]*/)?";
78
78
  i += 2;
79
79
  continue;
80
80
  }
81
- source += ".*";
81
+ source += "[\\s\\S]*";
82
82
  i += 1;
83
83
  continue;
84
84
  }
@@ -134,4 +134,4 @@ export {
134
134
  compileOfflineSyncExcludeGlobs,
135
135
  parseOfflineSyncExcludes
136
136
  };
137
- //# sourceMappingURL=chunk-4NSLQ7EU.js.map
137
+ //# sourceMappingURL=chunk-ANPRNTPT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/offline-sync-exclude-globs.ts"],"sourcesContent":["// Issue #1786: node-local runtime state that each node rebuilds from synced\n// records. Pushing these wastes bandwidth, corrupts the remote's live state\n// dir, and trips the large-file push retry loop on a live SQLite database.\n// Extracted from offline-sync.ts (issue #1995) so the god-file line-count\n// ratchet does not grow when the list gains entries; behavior is unchanged.\n/**\n * Directory-name prefix for the transient plaintext staging dir the CLI offline\n * decrypt path (`offline-storage-io.ts`) creates under the memory root when it\n * must materialize a decrypted secure-store file before hashing/pushing (#2033\n * P1). Shared here so the hard-exclude glob below and the CLI's `mkdtemp` prefix\n * can never drift apart: a crash-orphaned staging dir must NEVER be enumerated\n * into an offline snapshot, or decrypted secure-store plaintext would leak into\n * the remote push.\n */\nexport const OFFLINE_DECRYPT_STAGING_DIR_PREFIX = \".remnic-offline-decrypt-\";\n\nexport const DEFAULT_OFFLINE_SYNC_EXCLUDE_GLOBS: readonly string[] = [\n // Leading `**/` matches zero or more segments, so each pattern covers both\n // the root `state/` dir AND per-namespace `namespaces/<ns>/state/` dirs\n // (Cursor review on PR #1793: multi-namespace deployments previously kept\n // pushing their namespaced live sqlite files).\n \"**/state/*.sqlite\",\n \"**/state/*.sqlite-*\",\n \"**/state/index_tags.json\",\n \"**/state/entity-mention-index.json\",\n \"**/state/memory-governance/runs/**\",\n // Rotated recall-impression archives (issue #1910). The active\n // recall_impressions.jsonl stays remote-authoritative; only the .1..N\n // archives and the .lock are node-local and never pushed/hashed.\n \"**/state/recall_impressions.jsonl.*\",\n // Durable recall-impression pending spill directory (issue #2033). Node-local:\n // an impression spills a per-event file here when its rotation lock cannot be\n // acquired, and the next lock holder folds them back into the synced active\n // recall_impressions.jsonl. The `.*` glob above matches the directory name but\n // not its children, so exclude the contents explicitly.\n \"**/state/recall_impressions.jsonl.pending.d/**\",\n // Durable lifecycle-append pending spill directory (issue #2033). Node-local:\n // an append spills a per-event file here when it cannot get the ledger lock,\n // and the next lock holder folds them back into the synced\n // memory-lifecycle-ledger.jsonl. Pushing them would duplicate rows remotely.\n // The offline-sync snapshot entrypoints drain this queue first (access-service\n // `drainPendingLifecycleForSync` -> `StorageManager.drainPendingMemoryLifecycleEventsForSync`),\n // aborting the snapshot when durable rows cannot be folded, so excluding the\n // dir never silently drops append-only lifecycle history (promotions/imports).\n \"**/state/memory-lifecycle-ledger.jsonl.pending.d/**\",\n // The active lifecycle ledger lock is node-local and must never be\n // transferred to another node during an offline snapshot.\n \"**/state/memory-lifecycle-ledger.jsonl.lock\",\n // Transient plaintext decrypt staging (issue #2033 P1). The CLI offline\n // decrypt path materializes a decrypted secure-store file under an owner-only\n // `<OFFLINE_DECRYPT_STAGING_DIR_PREFIX>*` dir before hashing/pushing, removing\n // it in a `finally`. A hard crash between create and cleanup would otherwise\n // let a later snapshot walk `<prefix>*/content` and push decrypted secure-store\n // plaintext to the remote. Exclude the dir and its contents unconditionally so\n // a crash-orphan can never be enumerated into a snapshot; the leading `**/`\n // matches the root-level dir (zero segments) and any nested placement.\n \"**/.remnic-offline-decrypt-*/**\",\n // Embedding-index transaction leftovers (issue #3146, PR #3148). The\n // identity-replacement backup (`embeddings.pre-replace.tmp`) can hold a\n // full obsolete generation and `embeddings.staging.tmp-*` holds a\n // partially staged one; both are node-local recovery state that must\n // never be enumerated into a snapshot. The demoted legacy recovery file\n // (`embeddings.json.pre-migration.tmp-*`) is likewise node-local.\n \"**/state/embeddings.pre-replace.tmp/**\",\n \"**/state/embeddings.staging.tmp-*/**\",\n \"**/state/embeddings.json.pre-migration.tmp-*\",\n \"**/namespaces/*/state/embeddings.pre-replace.tmp/**\",\n \"**/namespaces/*/state/embeddings.staging.tmp-*/**\",\n \"**/namespaces/*/state/embeddings.json.pre-migration.tmp-*\",\n];\n\n\nconst DEFAULT_OFFLINE_SYNC_EXCLUDE_REGEXPS: readonly RegExp[] =\n DEFAULT_OFFLINE_SYNC_EXCLUDE_GLOBS.map((glob) => globToRegExp(glob));\n\n/**\n * Precompiled-once default-exclude check for the snapshot enumeration hot\n * path (Kilo review, PR #1793). Moved here from offline-sync.ts with the\n * glob list so the two can never drift (issue #1995).\n */\nexport function matchesOfflineSyncDefaultExclude(relPosix: string): boolean {\n for (const regexp of DEFAULT_OFFLINE_SYNC_EXCLUDE_REGEXPS) {\n if (regexp.test(relPosix)) return true;\n }\n return false;\n}\n\nexport function globToRegExp(glob: string): RegExp {\n if (typeof glob !== \"string\" || glob.length === 0) {\n throw new Error(\"offlineSyncExcludes entry must be a non-empty string\");\n }\n if (glob.includes(\"\\0\")) {\n throw new Error(\"offlineSyncExcludes entry must not contain NUL bytes\");\n }\n let source = \"\";\n for (let i = 0; i < glob.length; i += 1) {\n const ch = glob[i];\n if (ch === \"*\") {\n if (glob[i + 1] === \"*\") {\n // `**` is cross-segment wherever it appears:\n // leading `**/` -> zero or more whole segments\n // `/**` at end -> everything under the directory\n // `a/**/b` -> any depth between segments\n // (Cursor review on PR #1793: trailing `scratch/**` must match\n // nested `scratch/a/b.md`, matching the offline-mode guide.)\n if (glob[i + 2] === \"/\") {\n source += \"(?:.*/)?\";\n i += 2;\n continue;\n }\n source += \".*\";\n i += 1;\n continue;\n }\n source += \"[^/]*\";\n continue;\n }\n if (ch === \"?\") {\n source += \"[^/]\";\n continue;\n }\n if (ch === \"/\") {\n source += \"/\";\n continue;\n }\n source += ch.replace(/[\\\\^$.+()|{}\\[\\]]/g, \"\\\\$&\");\n }\n return new RegExp(`^${source}$`);\n}\n\nexport function compileOfflineSyncExcludeGlobs(\n globs: readonly unknown[],\n): RegExp[] {\n const out: RegExp[] = [];\n for (const entry of globs) {\n if (typeof entry !== \"string\" || entry.length === 0) {\n throw new Error(\"offlineSyncExcludes must contain only non-empty strings\");\n }\n out.push(globToRegExp(entry));\n }\n return out;\n}\n\n/**\n * Validate the operator-supplied offline-sync exclude list (#1786).\n * Rejects loudly instead of silently defaulting (CLAUDE.md rule 39):\n * a misspelled key value must fail config parse, not be ignored.\n * Lives next to the glob compiler so config.ts only carries the call.\n */\nexport function parseOfflineSyncExcludes(raw: unknown): string[] {\n if (raw === undefined || raw === null) return [];\n if (!Array.isArray(raw)) {\n throw new Error(\n `offlineSyncExcludes must be an array of non-empty glob strings; got ${typeof raw}`,\n );\n }\n for (const entry of raw) {\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new Error(\n \"offlineSyncExcludes must contain only non-empty glob strings\",\n );\n }\n }\n const globs = raw.map((entry) => (entry as string).trim());\n // Compile-check every glob now so a bad pattern fails at parse time\n // rather than mid-sync. compileOfflineSyncExcludeGlobs throws with a\n // per-entry message.\n compileOfflineSyncExcludeGlobs(globs);\n return globs;\n}\n"],"mappings":";AAcO,IAAM,qCAAqC;AAE3C,IAAM,qCAAwD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA;AAAA;AAAA;AAAA,EAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGA,IAAM,uCACJ,mCAAmC,IAAI,CAAC,SAAS,aAAa,IAAI,CAAC;AAO9D,SAAS,iCAAiC,UAA2B;AAC1E,aAAW,UAAU,sCAAsC;AACzD,QAAI,OAAO,KAAK,QAAQ,EAAG,QAAO;AAAA,EACpC;AACA,SAAO;AACT;AAEO,SAAS,aAAa,MAAsB;AACjD,MAAI,OAAO,SAAS,YAAY,KAAK,WAAW,GAAG;AACjD,UAAM,IAAI,MAAM,sDAAsD;AAAA,EACxE;AACA,MAAI,KAAK,SAAS,IAAI,GAAG;AACvB,UAAM,IAAI,MAAM,sDAAsD;AAAA,EACxE;AACA,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;AACvC,UAAM,KAAK,KAAK,CAAC;AACjB,QAAI,OAAO,KAAK;AACd,UAAI,KAAK,IAAI,CAAC,MAAM,KAAK;AAOvB,YAAI,KAAK,IAAI,CAAC,MAAM,KAAK;AACvB,oBAAU;AACV,eAAK;AACL;AAAA,QACF;AACA,kBAAU;AACV,aAAK;AACL;AAAA,MACF;AACA,gBAAU;AACV;AAAA,IACF;AACA,QAAI,OAAO,KAAK;AACd,gBAAU;AACV;AAAA,IACF;AACA,QAAI,OAAO,KAAK;AACd,gBAAU;AACV;AAAA,IACF;AACA,cAAU,GAAG,QAAQ,sBAAsB,MAAM;AAAA,EACnD;AACA,SAAO,IAAI,OAAO,IAAI,MAAM,GAAG;AACjC;AAEO,SAAS,+BACd,OACU;AACV,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,OAAO;AACzB,QAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,YAAM,IAAI,MAAM,yDAAyD;AAAA,IAC3E;AACA,QAAI,KAAK,aAAa,KAAK,CAAC;AAAA,EAC9B;AACA,SAAO;AACT;AAQO,SAAS,yBAAyB,KAAwB;AAC/D,MAAI,QAAQ,UAAa,QAAQ,KAAM,QAAO,CAAC;AAC/C,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACvB,UAAM,IAAI;AAAA,MACR,uEAAuE,OAAO,GAAG;AAAA,IACnF;AAAA,EACF;AACA,aAAW,SAAS,KAAK;AACvB,QAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAC1D,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,IAAI,IAAI,CAAC,UAAW,MAAiB,KAAK,CAAC;AAIzD,iCAA+B,KAAK;AACpC,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/offline-sync-exclude-globs.ts"],"sourcesContent":["// Issue #1786: node-local runtime state that each node rebuilds from synced\n// records. Pushing these wastes bandwidth, corrupts the remote's live state\n// dir, and trips the large-file push retry loop on a live SQLite database.\n// Extracted from offline-sync.ts (issue #1995) so the god-file line-count\n// ratchet does not grow when the list gains entries; behavior is unchanged.\n/**\n * Directory-name prefix for the transient plaintext staging dir the CLI offline\n * decrypt path (`offline-storage-io.ts`) creates under the memory root when it\n * must materialize a decrypted secure-store file before hashing/pushing (#2033\n * P1). Shared here so the hard-exclude glob below and the CLI's `mkdtemp` prefix\n * can never drift apart: a crash-orphaned staging dir must NEVER be enumerated\n * into an offline snapshot, or decrypted secure-store plaintext would leak into\n * the remote push.\n */\nexport const OFFLINE_DECRYPT_STAGING_DIR_PREFIX = \".remnic-offline-decrypt-\";\n\nexport const DEFAULT_OFFLINE_SYNC_EXCLUDE_GLOBS: readonly string[] = [\n // Leading `**/` matches zero or more segments, so each pattern covers both\n // the root `state/` dir AND per-namespace `namespaces/<ns>/state/` dirs\n // (Cursor review on PR #1793: multi-namespace deployments previously kept\n // pushing their namespaced live sqlite files).\n \"**/state/*.sqlite\",\n \"**/state/*.sqlite-*\",\n \"**/state/index_tags.json\",\n \"**/state/entity-mention-index.json\",\n \"**/state/memory-governance/runs/**\",\n // Rotated recall-impression archives (issue #1910). The active\n // recall_impressions.jsonl stays remote-authoritative; only the .1..N\n // archives and the .lock are node-local and never pushed/hashed.\n \"**/state/recall_impressions.jsonl.*\",\n // Durable recall-impression pending spill directory (issue #2033). Node-local:\n // an impression spills a per-event file here when its rotation lock cannot be\n // acquired, and the next lock holder folds them back into the synced active\n // recall_impressions.jsonl. The `.*` glob above matches the directory name but\n // not its children, so exclude the contents explicitly.\n \"**/state/recall_impressions.jsonl.pending.d/**\",\n // Durable lifecycle-append pending spill directory (issue #2033). Node-local:\n // an append spills a per-event file here when it cannot get the ledger lock,\n // and the next lock holder folds them back into the synced\n // memory-lifecycle-ledger.jsonl. Pushing them would duplicate rows remotely.\n // The offline-sync snapshot entrypoints drain this queue first (access-service\n // `drainPendingLifecycleForSync` -> `StorageManager.drainPendingMemoryLifecycleEventsForSync`),\n // aborting the snapshot when durable rows cannot be folded, so excluding the\n // dir never silently drops append-only lifecycle history (promotions/imports).\n \"**/state/memory-lifecycle-ledger.jsonl.pending.d/**\",\n // The active lifecycle ledger lock is node-local and must never be\n // transferred to another node during an offline snapshot.\n \"**/state/memory-lifecycle-ledger.jsonl.lock\",\n // Transient plaintext decrypt staging (issue #2033 P1). The CLI offline\n // decrypt path materializes a decrypted secure-store file under an owner-only\n // `<OFFLINE_DECRYPT_STAGING_DIR_PREFIX>*` dir before hashing/pushing, removing\n // it in a `finally`. A hard crash between create and cleanup would otherwise\n // let a later snapshot walk `<prefix>*/content` and push decrypted secure-store\n // plaintext to the remote. Exclude the dir and its contents unconditionally so\n // a crash-orphan can never be enumerated into a snapshot; the leading `**/`\n // matches the root-level dir (zero segments) and any nested placement.\n \"**/.remnic-offline-decrypt-*/**\",\n // Embedding-index transaction leftovers (issue #3146, PR #3148). The\n // identity-replacement backup (`embeddings.pre-replace.tmp`) can hold a\n // full obsolete generation and `embeddings.staging.tmp-*` holds a\n // partially staged one; both are node-local recovery state that must\n // never be enumerated into a snapshot. The demoted legacy recovery file\n // (`embeddings.json.pre-migration.tmp-*`) is likewise node-local.\n \"**/state/embeddings.pre-replace.tmp/**\",\n \"**/state/embeddings.staging.tmp-*/**\",\n \"**/state/embeddings.json.pre-migration.tmp-*\",\n \"**/namespaces/*/state/embeddings.pre-replace.tmp/**\",\n \"**/namespaces/*/state/embeddings.staging.tmp-*/**\",\n \"**/namespaces/*/state/embeddings.json.pre-migration.tmp-*\",\n];\n\n\nconst DEFAULT_OFFLINE_SYNC_EXCLUDE_REGEXPS: readonly RegExp[] =\n DEFAULT_OFFLINE_SYNC_EXCLUDE_GLOBS.map((glob) => globToRegExp(glob));\n\n/**\n * Precompiled-once default-exclude check for the snapshot enumeration hot\n * path (Kilo review, PR #1793). Moved here from offline-sync.ts with the\n * glob list so the two can never drift (issue #1995).\n */\nexport function matchesOfflineSyncDefaultExclude(relPosix: string): boolean {\n for (const regexp of DEFAULT_OFFLINE_SYNC_EXCLUDE_REGEXPS) {\n if (regexp.test(relPosix)) return true;\n }\n return false;\n}\n\nexport function globToRegExp(glob: string): RegExp {\n if (typeof glob !== \"string\" || glob.length === 0) {\n throw new Error(\"offlineSyncExcludes entry must be a non-empty string\");\n }\n if (glob.includes(\"\\0\")) {\n throw new Error(\"offlineSyncExcludes entry must not contain NUL bytes\");\n }\n let source = \"\";\n for (let i = 0; i < glob.length; i += 1) {\n const ch = glob[i];\n if (ch === \"*\") {\n if (glob[i + 1] === \"*\") {\n // `**` is cross-segment wherever it appears:\n // leading `**/` -> zero or more whole segments\n // `/**` at end -> everything under the directory\n // `a/**/b` -> any depth between segments\n // (Cursor review on PR #1793: trailing `scratch/**` must match\n // nested `scratch/a/b.md`, matching the offline-mode guide.)\n if (glob[i + 2] === \"/\") {\n source += \"(?:[\\\\s\\\\S]*/)?\";\n i += 2;\n continue;\n }\n source += \"[\\\\s\\\\S]*\";\n i += 1;\n continue;\n }\n source += \"[^/]*\";\n continue;\n }\n if (ch === \"?\") {\n source += \"[^/]\";\n continue;\n }\n if (ch === \"/\") {\n source += \"/\";\n continue;\n }\n source += ch.replace(/[\\\\^$.+()|{}\\[\\]]/g, \"\\\\$&\");\n }\n return new RegExp(`^${source}$`);\n}\n\n/** Match relative POSIX paths: `*` stays within a segment; `**` crosses separators and matches every path alone. */\nexport function compileOfflineSyncExcludeGlobs(\n globs: readonly unknown[],\n): RegExp[] {\n const out: RegExp[] = [];\n for (const entry of globs) {\n if (typeof entry !== \"string\" || entry.length === 0) {\n throw new Error(\"offlineSyncExcludes must contain only non-empty strings\");\n }\n out.push(globToRegExp(entry));\n }\n return out;\n}\n\n/**\n * Validate the operator-supplied offline-sync exclude list (#1786).\n * Rejects loudly instead of silently defaulting (CLAUDE.md rule 39):\n * a misspelled key value must fail config parse, not be ignored.\n * Lives next to the glob compiler so config.ts only carries the call.\n */\nexport function parseOfflineSyncExcludes(raw: unknown): string[] {\n if (raw === undefined || raw === null) return [];\n if (!Array.isArray(raw)) {\n throw new Error(\n `offlineSyncExcludes must be an array of non-empty glob strings; got ${typeof raw}`,\n );\n }\n for (const entry of raw) {\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new Error(\n \"offlineSyncExcludes must contain only non-empty glob strings\",\n );\n }\n }\n const globs = raw.map((entry) => (entry as string).trim());\n // Compile-check every glob now so a bad pattern fails at parse time\n // rather than mid-sync. compileOfflineSyncExcludeGlobs throws with a\n // per-entry message.\n compileOfflineSyncExcludeGlobs(globs);\n return globs;\n}\n"],"mappings":";AAcO,IAAM,qCAAqC;AAE3C,IAAM,qCAAwD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA;AAAA;AAAA;AAAA,EAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGA,IAAM,uCACJ,mCAAmC,IAAI,CAAC,SAAS,aAAa,IAAI,CAAC;AAO9D,SAAS,iCAAiC,UAA2B;AAC1E,aAAW,UAAU,sCAAsC;AACzD,QAAI,OAAO,KAAK,QAAQ,EAAG,QAAO;AAAA,EACpC;AACA,SAAO;AACT;AAEO,SAAS,aAAa,MAAsB;AACjD,MAAI,OAAO,SAAS,YAAY,KAAK,WAAW,GAAG;AACjD,UAAM,IAAI,MAAM,sDAAsD;AAAA,EACxE;AACA,MAAI,KAAK,SAAS,IAAI,GAAG;AACvB,UAAM,IAAI,MAAM,sDAAsD;AAAA,EACxE;AACA,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;AACvC,UAAM,KAAK,KAAK,CAAC;AACjB,QAAI,OAAO,KAAK;AACd,UAAI,KAAK,IAAI,CAAC,MAAM,KAAK;AAOvB,YAAI,KAAK,IAAI,CAAC,MAAM,KAAK;AACvB,oBAAU;AACV,eAAK;AACL;AAAA,QACF;AACA,kBAAU;AACV,aAAK;AACL;AAAA,MACF;AACA,gBAAU;AACV;AAAA,IACF;AACA,QAAI,OAAO,KAAK;AACd,gBAAU;AACV;AAAA,IACF;AACA,QAAI,OAAO,KAAK;AACd,gBAAU;AACV;AAAA,IACF;AACA,cAAU,GAAG,QAAQ,sBAAsB,MAAM;AAAA,EACnD;AACA,SAAO,IAAI,OAAO,IAAI,MAAM,GAAG;AACjC;AAGO,SAAS,+BACd,OACU;AACV,QAAM,MAAgB,CAAC;AACvB,aAAW,SAAS,OAAO;AACzB,QAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,YAAM,IAAI,MAAM,yDAAyD;AAAA,IAC3E;AACA,QAAI,KAAK,aAAa,KAAK,CAAC;AAAA,EAC9B;AACA,SAAO;AACT;AAQO,SAAS,yBAAyB,KAAwB;AAC/D,MAAI,QAAQ,UAAa,QAAQ,KAAM,QAAO,CAAC;AAC/C,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACvB,UAAM,IAAI;AAAA,MACR,uEAAuE,OAAO,GAAG;AAAA,IACnF;AAAA,EACF;AACA,aAAW,SAAS,KAAK;AACvB,QAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAC1D,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,IAAI,IAAI,CAAC,UAAW,MAAiB,KAAK,CAAC;AAIzD,iCAA+B,KAAK;AACpC,SAAO;AACT;","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-7T4TOGMS.js";
4
4
  import {
5
5
  defineOperation
6
- } from "./chunk-GXETU7AE.js";
6
+ } from "./chunk-NI5MWLM3.js";
7
7
 
8
8
  // src/external-wiki-access.ts
9
9
  import { z } from "zod";
@@ -26,4 +26,4 @@ var externalWikiSearchOperation = defineOperation({
26
26
  export {
27
27
  externalWikiSearchOperation
28
28
  };
29
- //# sourceMappingURL=chunk-5S7SNRSJ.js.map
29
+ //# sourceMappingURL=chunk-BCQU44UV.js.map
@@ -2,7 +2,7 @@ import {
2
2
  SupportPassportError,
3
3
  SupportPassportOwnerCreateGrantRequestSchema,
4
4
  getOperation
5
- } from "./chunk-GXETU7AE.js";
5
+ } from "./chunk-NI5MWLM3.js";
6
6
 
7
7
  // src/support-passport/access-http.ts
8
8
  var OWNER_ROOT = "/engram/v1/support-passport";
@@ -137,4 +137,4 @@ export {
137
137
  SUPPORT_PASSPORT_OWNER_HTTP_ROUTES,
138
138
  handleSupportPassportOwnerHttp
139
139
  };
140
- //# sourceMappingURL=chunk-ZQTYWSO3.js.map
140
+ //# sourceMappingURL=chunk-GLJNGCCM.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SupportPassportCreateGrantRequestSchema,
3
3
  defineOperation
4
- } from "./chunk-GXETU7AE.js";
4
+ } from "./chunk-NI5MWLM3.js";
5
5
  import {
6
6
  SupportPassportCardCategorySchema,
7
7
  SupportPassportMemoryIdSchema,
@@ -220,4 +220,4 @@ var supportPassportGrantAskOperation = defineOperation({
220
220
  result: await ctx.service.supportPassportAskGrant(grantId, secret, question, ctx.abortSignal)
221
221
  })
222
222
  });
223
- //# sourceMappingURL=chunk-SMLKHXPF.js.map
223
+ //# sourceMappingURL=chunk-HGG63H3A.js.map