@cleocode/core 2026.10.2 → 2026.10.4

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 (228) hide show
  1. package/dist/build-provenance.json +2 -2
  2. package/dist/cloud/http.d.ts +2 -0
  3. package/dist/cloud/http.d.ts.map +1 -1
  4. package/dist/cloud/http.js +3 -0
  5. package/dist/cloud/http.js.map +1 -1
  6. package/dist/cloud/manifest-check.d.ts.map +1 -1
  7. package/dist/cloud/manifest-check.js +13 -0
  8. package/dist/cloud/manifest-check.js.map +1 -1
  9. package/dist/cloud/nexus-enrol.d.ts +9 -0
  10. package/dist/cloud/nexus-enrol.d.ts.map +1 -1
  11. package/dist/cloud/nexus-enrol.js +45 -2
  12. package/dist/cloud/nexus-enrol.js.map +1 -1
  13. package/dist/cloud/nexus-first-run.d.ts +142 -0
  14. package/dist/cloud/nexus-first-run.d.ts.map +1 -0
  15. package/dist/cloud/nexus-first-run.js +352 -0
  16. package/dist/cloud/nexus-first-run.js.map +1 -0
  17. package/dist/cloud/nexus-project-names.d.ts +173 -0
  18. package/dist/cloud/nexus-project-names.d.ts.map +1 -0
  19. package/dist/cloud/nexus-project-names.js +314 -0
  20. package/dist/cloud/nexus-project-names.js.map +1 -0
  21. package/dist/cloud/nexus-vault-keys.d.ts +35 -3
  22. package/dist/cloud/nexus-vault-keys.d.ts.map +1 -1
  23. package/dist/cloud/nexus-vault-keys.js +212 -22
  24. package/dist/cloud/nexus-vault-keys.js.map +1 -1
  25. package/dist/cloud/nexus-vault.d.ts.map +1 -1
  26. package/dist/cloud/nexus-vault.js +14 -2
  27. package/dist/cloud/nexus-vault.js.map +1 -1
  28. package/dist/dispatch/contracts/derive-output-contract.d.ts +1 -1
  29. package/dist/dispatch/contracts/derive-output-contract.d.ts.map +1 -1
  30. package/dist/dispatch/contracts/derive-output-contract.js +2 -1
  31. package/dist/dispatch/contracts/derive-output-contract.js.map +1 -1
  32. package/dist/dispatch/contracts/output-contracts.d.ts +2 -1
  33. package/dist/dispatch/contracts/output-contracts.d.ts.map +1 -1
  34. package/dist/dispatch/contracts/output-contracts.js +1 -1
  35. package/dist/dispatch/contracts/output-contracts.js.map +1 -1
  36. package/dist/dispatch/mvi-projection.d.ts +1 -1
  37. package/dist/dispatch/mvi-projection.d.ts.map +1 -1
  38. package/dist/dispatch/mvi-projection.js +1 -1
  39. package/dist/dispatch/mvi-projection.js.map +1 -1
  40. package/dist/docs/export-document.js +24462 -24572
  41. package/dist/docs/export-document.js.map +3 -3
  42. package/dist/doctor/db-substrate.d.ts +6 -9
  43. package/dist/doctor/db-substrate.d.ts.map +1 -1
  44. package/dist/doctor/db-substrate.js +10 -14
  45. package/dist/doctor/db-substrate.js.map +1 -1
  46. package/dist/doctor/migrations.d.ts +18 -0
  47. package/dist/doctor/migrations.d.ts.map +1 -1
  48. package/dist/doctor/migrations.js +54 -2
  49. package/dist/doctor/migrations.js.map +1 -1
  50. package/dist/error-catalog.js +1 -1
  51. package/dist/error-catalog.js.map +1 -1
  52. package/dist/errors.d.ts +1 -1
  53. package/dist/errors.d.ts.map +1 -1
  54. package/dist/errors.js +1 -1
  55. package/dist/errors.js.map +1 -1
  56. package/dist/init.d.ts.map +1 -1
  57. package/dist/init.js +21 -5
  58. package/dist/init.js.map +1 -1
  59. package/dist/llm/conversation.d.ts.map +1 -1
  60. package/dist/llm/conversation.js +15 -4
  61. package/dist/llm/conversation.js.map +1 -1
  62. package/dist/llm/plugin-facade.js +277 -376
  63. package/dist/llm/plugin-facade.js.map +3 -3
  64. package/dist/llm/transports/bedrock.d.ts +1 -0
  65. package/dist/llm/transports/bedrock.d.ts.map +1 -1
  66. package/dist/llm/transports/bedrock.js +30 -12
  67. package/dist/llm/transports/bedrock.js.map +1 -1
  68. package/dist/memory/decision-contradiction.d.ts.map +1 -1
  69. package/dist/memory/decision-contradiction.js +10 -5
  70. package/dist/memory/decision-contradiction.js.map +1 -1
  71. package/dist/memory/dialectic-evaluator.d.ts.map +1 -1
  72. package/dist/memory/dialectic-evaluator.js +4 -1
  73. package/dist/memory/dialectic-evaluator.js.map +1 -1
  74. package/dist/memory/transcript-extractor.d.ts.map +1 -1
  75. package/dist/memory/transcript-extractor.js +3 -2
  76. package/dist/memory/transcript-extractor.js.map +1 -1
  77. package/dist/metrics/token-service.d.ts +16 -0
  78. package/dist/metrics/token-service.d.ts.map +1 -1
  79. package/dist/metrics/token-service.js +18 -0
  80. package/dist/metrics/token-service.js.map +1 -1
  81. package/dist/nexus/api-contracts.d.ts.map +1 -1
  82. package/dist/nexus/api-contracts.js +27 -11
  83. package/dist/nexus/api-contracts.js.map +1 -1
  84. package/dist/nexus/api-extractors/http-extractor.d.ts +2 -2
  85. package/dist/nexus/api-extractors/http-extractor.d.ts.map +1 -1
  86. package/dist/nexus/api-extractors/http-extractor.js +3 -3
  87. package/dist/nexus/api-extractors/http-extractor.js.map +1 -1
  88. package/dist/nexus/clusters.js +1 -1
  89. package/dist/nexus/clusters.js.map +1 -1
  90. package/dist/nexus/diff.d.ts +1 -1
  91. package/dist/nexus/diff.d.ts.map +1 -1
  92. package/dist/nexus/diff.js +3 -2
  93. package/dist/nexus/diff.js.map +1 -1
  94. package/dist/nexus/flows.js +1 -1
  95. package/dist/nexus/flows.js.map +1 -1
  96. package/dist/nexus/identity.d.ts +8 -0
  97. package/dist/nexus/identity.d.ts.map +1 -1
  98. package/dist/nexus/identity.js +17 -1
  99. package/dist/nexus/identity.js.map +1 -1
  100. package/dist/nexus/index.d.ts +1 -1
  101. package/dist/nexus/index.d.ts.map +1 -1
  102. package/dist/nexus/index.js +2 -2
  103. package/dist/nexus/index.js.map +1 -1
  104. package/dist/nexus/nexus-bridge.d.ts.map +1 -1
  105. package/dist/nexus/nexus-bridge.js +5 -5
  106. package/dist/nexus/nexus-bridge.js.map +1 -1
  107. package/dist/nexus/registry.d.ts +22 -0
  108. package/dist/nexus/registry.d.ts.map +1 -1
  109. package/dist/nexus/registry.js +76 -1
  110. package/dist/nexus/registry.js.map +1 -1
  111. package/dist/paths.js +1 -1
  112. package/dist/paths.js.map +1 -1
  113. package/dist/project-scope.js +1 -1
  114. package/dist/project-scope.js.map +1 -1
  115. package/dist/project-tombstone.js +1 -1
  116. package/dist/project-tombstone.js.map +1 -1
  117. package/dist/release/open.d.ts +3 -6
  118. package/dist/release/open.d.ts.map +1 -1
  119. package/dist/release/open.js +59 -23
  120. package/dist/release/open.js.map +1 -1
  121. package/dist/release/preflight-skip.d.ts +69 -10
  122. package/dist/release/preflight-skip.d.ts.map +1 -1
  123. package/dist/release/preflight-skip.js +195 -47
  124. package/dist/release/preflight-skip.js.map +1 -1
  125. package/dist/render/colors.js +1 -19
  126. package/dist/render/colors.js.map +1 -1
  127. package/dist/render/tasks/colors.js +1 -1
  128. package/dist/render/tasks/colors.js.map +1 -1
  129. package/dist/resources/governor.d.ts +12 -0
  130. package/dist/resources/governor.d.ts.map +1 -1
  131. package/dist/resources/governor.js +5 -1
  132. package/dist/resources/governor.js.map +1 -1
  133. package/dist/resources/heavy-command-hook-delivery.d.ts +144 -0
  134. package/dist/resources/heavy-command-hook-delivery.d.ts.map +1 -0
  135. package/dist/resources/heavy-command-hook-delivery.js +204 -0
  136. package/dist/resources/heavy-command-hook-delivery.js.map +1 -0
  137. package/dist/resources/heavy-command.d.ts +69 -0
  138. package/dist/resources/heavy-command.d.ts.map +1 -1
  139. package/dist/resources/heavy-command.js +479 -7
  140. package/dist/resources/heavy-command.js.map +1 -1
  141. package/dist/resources/run-class.d.ts.map +1 -1
  142. package/dist/resources/run-class.js +1 -0
  143. package/dist/resources/run-class.js.map +1 -1
  144. package/dist/routing/build-command-groups.d.ts +1 -1
  145. package/dist/routing/build-command-groups.d.ts.map +1 -1
  146. package/dist/routing/build-command-groups.js +4 -1
  147. package/dist/routing/build-command-groups.js.map +1 -1
  148. package/dist/scaffold/ensure-skills.d.ts.map +1 -1
  149. package/dist/scaffold/ensure-skills.js +58 -2
  150. package/dist/scaffold/ensure-skills.js.map +1 -1
  151. package/dist/selfimprove/fix-gen.js +277 -376
  152. package/dist/selfimprove/fix-gen.js.map +3 -3
  153. package/dist/sessions/briefing.d.ts.map +1 -1
  154. package/dist/sessions/briefing.js +11 -0
  155. package/dist/sessions/briefing.js.map +1 -1
  156. package/dist/store/dual-scope-db.d.ts.map +1 -1
  157. package/dist/store/dual-scope-db.js +6 -1
  158. package/dist/store/dual-scope-db.js.map +1 -1
  159. package/dist/store/portable-bundle-scan.d.ts +22 -0
  160. package/dist/store/portable-bundle-scan.d.ts.map +1 -1
  161. package/dist/store/portable-bundle-scan.js +97 -25
  162. package/dist/store/portable-bundle-scan.js.map +1 -1
  163. package/dist/store/portable-bundle.d.ts +7 -0
  164. package/dist/store/portable-bundle.d.ts.map +1 -1
  165. package/dist/store/portable-bundle.js +10 -1
  166. package/dist/store/portable-bundle.js.map +1 -1
  167. package/dist/store/table-classification.d.ts +27 -0
  168. package/dist/store/table-classification.d.ts.map +1 -1
  169. package/dist/store/table-classification.js +32 -0
  170. package/dist/store/table-classification.js.map +1 -1
  171. package/dist/store/vault-manifest.d.ts +5 -1
  172. package/dist/store/vault-manifest.d.ts.map +1 -1
  173. package/dist/store/vault-manifest.js +9 -2
  174. package/dist/store/vault-manifest.js.map +1 -1
  175. package/dist/system/health.d.ts +13 -0
  176. package/dist/system/health.d.ts.map +1 -1
  177. package/dist/system/health.js +96 -1
  178. package/dist/system/health.js.map +1 -1
  179. package/dist/tasks/affected-packages.d.ts +20 -7
  180. package/dist/tasks/affected-packages.d.ts.map +1 -1
  181. package/dist/tasks/affected-packages.js +39 -13
  182. package/dist/tasks/affected-packages.js.map +1 -1
  183. package/dist/tasks/affected-template.d.ts +93 -0
  184. package/dist/tasks/affected-template.d.ts.map +1 -0
  185. package/dist/tasks/affected-template.js +198 -0
  186. package/dist/tasks/affected-template.js.map +1 -0
  187. package/dist/tasks/command-line.d.ts +4 -1
  188. package/dist/tasks/command-line.d.ts.map +1 -1
  189. package/dist/tasks/command-line.js +7 -2
  190. package/dist/tasks/command-line.js.map +1 -1
  191. package/dist/tasks/done-plan.d.ts.map +1 -1
  192. package/dist/tasks/done-plan.js +12 -2
  193. package/dist/tasks/done-plan.js.map +1 -1
  194. package/dist/tasks/duplicate-detector.d.ts.map +1 -1
  195. package/dist/tasks/duplicate-detector.js +11 -5
  196. package/dist/tasks/duplicate-detector.js.map +1 -1
  197. package/dist/tasks/evidence.d.ts.map +1 -1
  198. package/dist/tasks/evidence.js +185 -11
  199. package/dist/tasks/evidence.js.map +1 -1
  200. package/dist/tasks/heavy-tool-env.d.ts +385 -18
  201. package/dist/tasks/heavy-tool-env.d.ts.map +1 -1
  202. package/dist/tasks/heavy-tool-env.js +719 -40
  203. package/dist/tasks/heavy-tool-env.js.map +1 -1
  204. package/dist/tasks/index.d.ts +2 -2
  205. package/dist/tasks/index.d.ts.map +1 -1
  206. package/dist/tasks/index.js +1 -1
  207. package/dist/tasks/index.js.map +1 -1
  208. package/dist/tasks/tool-cache-env.d.ts +20 -13
  209. package/dist/tasks/tool-cache-env.d.ts.map +1 -1
  210. package/dist/tasks/tool-cache-env.js +27 -48
  211. package/dist/tasks/tool-cache-env.js.map +1 -1
  212. package/dist/tasks/tool-cache.d.ts +8 -0
  213. package/dist/tasks/tool-cache.d.ts.map +1 -1
  214. package/dist/tasks/tool-cache.js +19 -6
  215. package/dist/tasks/tool-cache.js.map +1 -1
  216. package/dist/tasks/tool-semaphore.d.ts +66 -23
  217. package/dist/tasks/tool-semaphore.d.ts.map +1 -1
  218. package/dist/tasks/tool-semaphore.js +96 -34
  219. package/dist/tasks/tool-semaphore.js.map +1 -1
  220. package/dist/upgrade.d.ts.map +1 -1
  221. package/dist/upgrade.js +37 -4
  222. package/dist/upgrade.js.map +1 -1
  223. package/dist/validation/doctor/checks.d.ts +17 -0
  224. package/dist/validation/doctor/checks.d.ts.map +1 -1
  225. package/dist/validation/doctor/checks.js +83 -0
  226. package/dist/validation/doctor/checks.js.map +1 -1
  227. package/package.json +13 -13
  228. package/schemas/project-context.schema.json +5 -1
@@ -13,6 +13,9 @@
13
13
  * 2. No escrow and no account keys: this is the account's first vault use.
14
14
  * The client mints MK and escrows it (`PUT`, insert-only). A concurrent
15
15
  * first device loses the insert with 409 and reads the winner's key.
16
+ * Since T13100 `cleo login nexus` runs steps 1 to 4 right after enrolment
17
+ * ({@link provisionNexusAccount}); `cleo cloud push` still does them for a
18
+ * device that logged in before that.
16
19
  * 3. The device certifies itself under MK (a self-grant, `PUT
17
20
  * /v1/devices/:id/key`), so other devices can verify its snapshots.
18
21
  * 4. Signer trust comes from `certifiedSigners` over `GET /v1/devices/trust`,
@@ -33,6 +36,7 @@
33
36
  * No function here logs a key, and no error carries one.
34
37
  *
35
38
  * @task T12336
39
+ * @task T13100
36
40
  * @epic T12322
37
41
  */
38
42
  import { nexusProjectKeysSchema, nexusUserKeysSchema } from '@cleocode/contracts';
@@ -43,6 +47,7 @@ import { Http, NexusError } from './http.js';
43
47
  import { certifiedSigners, createDeviceGrant, homeStreamKey, masterKeyVerifier, newProjectKey, unwrapProjectKey, wrapProjectKey, } from './keys.js';
44
48
  import { NexusAccountError, resolveNexusApiUrl } from './nexus-auth.js';
45
49
  import { assertNexusCloudDeviceMode, NEXUS_CLOUD_TIMEOUT_MS, nexusCredentialWarnings, } from './nexus-cloud.js';
50
+ import { redactNexusDeviceSecrets } from './nexus-device.js';
46
51
  import { ensureNexusDeviceCredential, nexusApiErrorToAccountError } from './nexus-enrol.js';
47
52
  import { NexusVaultState } from './nexus-vault-state.js';
48
53
  /** Timeout of a snapshot blob upload or download. */
@@ -64,7 +69,10 @@ export async function connectNexusVault(opts = {}) {
64
69
  assertNexusCloudDeviceMode();
65
70
  const apiUrl = resolveNexusApiUrl(opts.apiUrl);
66
71
  const handle = await ensureNexusDeviceCredential({ ...opts, apiUrl });
67
- const device = handle.device;
72
+ return vaultConnectionOf(handle.device, apiUrl, opts, handle.warnings);
73
+ }
74
+ /** A vault connection acting as `device` (its current credential and keys). */
75
+ function vaultConnectionOf(device, apiUrl, opts, credentialWarnings) {
68
76
  const bearer = device.currentBearer();
69
77
  if (bearer === null) {
70
78
  throw new NexusAccountError('E_NEXUS_NOT_SIGNED_IN', `not signed in to Cleo Nexus at ${apiUrl}`, 'run `cleo login nexus`');
@@ -93,7 +101,7 @@ export async function connectNexusVault(opts = {}) {
93
101
  http,
94
102
  blobFetch: (input, init) => base(input, { ...init, signal: AbortSignal.timeout(blobTimeoutMs) }),
95
103
  state: opts.vaultState ?? new NexusVaultState(),
96
- warnings: nexusCredentialWarnings(handle.warnings),
104
+ warnings: nexusCredentialWarnings(credentialWarnings),
97
105
  raw,
98
106
  async call(method, path, schema, body) {
99
107
  try {
@@ -121,10 +129,36 @@ const isConflict = (err, reason) => err instanceof NexusError &&
121
129
  function keyUnavailable(message, fix) {
122
130
  return new NexusAccountError('E_NEXUS_VAULT_KEY_UNAVAILABLE', message, fix);
123
131
  }
132
+ /**
133
+ * The server answered 404 because it has no such route, not because the resource is missing: its
134
+ * fallback handler says `E_NOT_FOUND` "route not found" (cleo-nexus app.notFound), while a missing
135
+ * escrow is "key escrow not found" (T13049).
136
+ */
137
+ function isRouteMissing(err) {
138
+ return (err instanceof NexusError &&
139
+ err.status === 404 &&
140
+ err.code === 'E_NOT_FOUND' &&
141
+ err.serverMessage === 'route not found');
142
+ }
143
+ /** A Cleo Nexus server older than account key escrow (cleo-nexus T082) cannot hold a vault (T13049). */
144
+ function vaultUnsupported() {
145
+ return new NexusAccountError('E_NEXUS_VAULT_UNSUPPORTED', 'this Cleo Nexus server does not support the cloud vault yet: it has no account key escrow', 'upgrade the Cleo Nexus server (account key escrow, cleo-nexus T082), or point CLEO at one that has it; nothing was written');
146
+ }
124
147
  async function openEscrow(conn) {
125
- const grant = await conn.find('/v1/account/keys/escrow', KeyEscrowGrant);
126
- if (grant === null)
127
- return null;
148
+ let grant;
149
+ try {
150
+ grant = await conn.raw('GET', '/v1/account/keys/escrow', KeyEscrowGrant);
151
+ }
152
+ catch (err) {
153
+ if (isRouteMissing(err))
154
+ throw vaultUnsupported();
155
+ // A supporting server with nothing escrowed yet: the account has no vault key. Only the
156
+ // server's own E_NOT_FOUND counts; a 404 page from something else (a proxy, a wrong
157
+ // --api-url) is a failed request, never an empty vault.
158
+ if (err instanceof NexusError && err.status === 404 && err.code === 'E_NOT_FOUND')
159
+ return null;
160
+ throw nexusApiErrorToAccountError(err);
161
+ }
128
162
  if (grant.deviceId !== conn.deviceId) {
129
163
  throw keyUnavailable('the server released the account key to another device id');
130
164
  }
@@ -140,6 +174,10 @@ async function openEscrow(conn) {
140
174
  }
141
175
  return { mk, kv: grant.keyVersion };
142
176
  }
177
+ /**
178
+ * Mint the account master key and escrow it (insert-only). `adopted` is `true` when another
179
+ * device escrowed first (409): its key is read and used, and this device never mints again.
180
+ */
143
181
  async function mintEscrow(conn) {
144
182
  const existing = await conn.find('/v1/account/keys', nexusUserKeysSchema);
145
183
  if (existing !== null) {
@@ -152,24 +190,29 @@ async function mintEscrow(conn) {
152
190
  keyVersion: 1,
153
191
  masterKeyVerifier: masterKeyVerifier(mk),
154
192
  });
155
- return { mk, kv: 1 };
193
+ return { mk, kv: 1, adopted: false };
156
194
  }
157
195
  catch (err) {
196
+ // Backstop: unreachable while GET and PUT escrow ship together (cleo-nexus #24), since
197
+ // openEscrow already refused; kept for a server that exposes one without the other.
198
+ if (isRouteMissing(err))
199
+ throw vaultUnsupported();
158
200
  if (!isConflict(err))
159
201
  throw nexusApiErrorToAccountError(err);
160
202
  // Another device escrowed first: use its key.
161
203
  const won = await openEscrow(conn);
162
204
  if (won === null)
163
205
  throw keyUnavailable('the account key was escrowed concurrently but is not readable');
164
- return won;
206
+ return { ...won, adopted: true };
165
207
  }
166
208
  }
209
+ /** Certify this device under MK unless it already is; `wrote` says whether this call did. */
167
210
  async function ensureCertified(conn, mk, kv) {
168
211
  const trust = await conn.call('GET', '/v1/devices/trust', DeviceTrustSchema);
169
212
  const mine = conn.keys.signing.publicKey.toString('base64');
170
213
  const certified = trust.certificates.some((c) => c.deviceId === conn.deviceId && c.keyVersion === kv && c.signingPublicKey === mine && c.live);
171
214
  if (certified)
172
- return trust;
215
+ return { trust, wrote: false };
173
216
  const grant = createDeviceGrant({
174
217
  masterKey: mk,
175
218
  userId: conn.userId,
@@ -182,7 +225,7 @@ async function ensureCertified(conn, mk, kv) {
182
225
  signer: { deviceId: conn.deviceId, signing: conn.keys.signing },
183
226
  });
184
227
  await conn.call('PUT', `/v1/devices/${encodeURIComponent(conn.deviceId)}/key`, z.looseObject({}), grant);
185
- return conn.call('GET', '/v1/devices/trust', DeviceTrustSchema);
228
+ return { trust: await conn.call('GET', '/v1/devices/trust', DeviceTrustSchema), wrote: true };
186
229
  }
187
230
  /**
188
231
  * Get the account master key for this device, minting and escrowing it on
@@ -193,19 +236,50 @@ async function ensureCertified(conn, mk, kv) {
193
236
  * `E_NEXUS_VAULT_EMPTY`.
194
237
  * @returns The key, its version and the trusted signers.
195
238
  * @throws {NexusAccountError} `E_NEXUS_VAULT_KEY_UNAVAILABLE` when the key
196
- * cannot be obtained or verified; a mapped API error otherwise.
239
+ * cannot be obtained or verified; `E_NEXUS_VAULT_UNSUPPORTED` when the server
240
+ * has no key escrow route; a mapped API error otherwise.
197
241
  */
198
242
  export async function unlockNexusAccountKey(conn, opts = {}) {
243
+ return (await unlockAccount(conn, opts.readOnly === true, { step: 'escrow-read' })).key;
244
+ }
245
+ /**
246
+ * {@link unlockNexusAccountKey}, reporting how the key was obtained. `progress.step` names the
247
+ * step running, so a caller that catches a failure can say where it happened.
248
+ */
249
+ async function unlockAccount(conn, readOnly, progress) {
250
+ progress.step = 'escrow-read';
199
251
  const escrowed = await openEscrow(conn);
200
- if (escrowed === null && opts.readOnly === true) {
252
+ if (escrowed === null && readOnly) {
201
253
  // Nothing was ever pushed from any device: a read has nothing to read, and
202
254
  // must not mint the account key as a side effect.
203
255
  throw new NexusAccountError('E_NEXUS_VAULT_EMPTY', 'the cloud vault is empty: no device has pushed a snapshot to this account yet', 'run `cleo cloud push` on a device that has the data');
204
256
  }
205
- const unlocked = escrowed ?? (await mintEscrow(conn));
206
- const trust = opts.readOnly === true
207
- ? await conn.call('GET', '/v1/devices/trust', DeviceTrustSchema)
208
- : await ensureCertified(conn, unlocked.mk, unlocked.kv);
257
+ let unlocked;
258
+ let escrow;
259
+ if (escrowed !== null) {
260
+ unlocked = escrowed;
261
+ escrow = 'fetched';
262
+ }
263
+ else {
264
+ // The account's first device. Since T13100 `cleo login nexus` does this right after
265
+ // enrolment; a push still gets here for a device that logged in before that.
266
+ progress.step = 'escrow-mint';
267
+ const minted = await mintEscrow(conn);
268
+ unlocked = minted;
269
+ escrow = minted.adopted ? 'adopted' : 'minted';
270
+ }
271
+ progress.step = 'certify';
272
+ let trust;
273
+ let certificate = null;
274
+ if (readOnly) {
275
+ trust = await conn.call('GET', '/v1/devices/trust', DeviceTrustSchema);
276
+ }
277
+ else {
278
+ const certified = await ensureCertified(conn, unlocked.mk, unlocked.kv);
279
+ trust = certified.trust;
280
+ certificate = certified.wrote ? 'new' : 'existing';
281
+ }
282
+ progress.step = 'trust';
209
283
  // Read, evaluate and persist the trust state under one lock, so two
210
284
  // concurrent commands cannot interleave and lose a narrowed pin.
211
285
  const evaluation = conn.state.updateTrust(conn.apiUrl, conn.userId, (current) => {
@@ -217,7 +291,107 @@ export async function unlockNexusAccountKey(conn, opts = {}) {
217
291
  ? 'the account key was rotated and this device does not hold the new one'
218
292
  : 'the server declared an account key version no rotation explains');
219
293
  }
220
- return { masterKey: unlocked.mk, keyVersion: unlocked.kv, signers: evaluation.signers };
294
+ return {
295
+ key: { masterKey: unlocked.mk, keyVersion: unlocked.kv, signers: evaluation.signers },
296
+ escrow,
297
+ certificate,
298
+ };
299
+ }
300
+ /** What each setup step does, for a failure message. */
301
+ const SETUP_STEP_LABELS = {
302
+ connect: 'opening the vault connection with the device credential',
303
+ 'escrow-read': 'reading the escrowed account key',
304
+ 'escrow-mint': 'creating and escrowing the account key',
305
+ certify: 'certifying this device under the account key',
306
+ trust: 'recording the device trust state',
307
+ };
308
+ /** The remedy of a failed setup step whose error carried none. */
309
+ const SETUP_RETRY_FIX = 'run `cleo login nexus` again; `cleo cloud push` also finishes the setup on this device';
310
+ /**
311
+ * Make the account ready for encrypted backups on this device (onboarding A,
312
+ * T13100): read the escrowed account master key, or mint and escrow it when
313
+ * the account has none (a 409 means another device won: its key is read,
314
+ * never re-minted), then certify this device under it and record the signer
315
+ * trust state in {@link NexusVaultState}. It is {@link unlockNexusAccountKey}
316
+ * with a report, so a later `cleo cloud push` finds everything in place and
317
+ * mints nothing; it is idempotent.
318
+ *
319
+ * It never throws: a server without key escrow answers `unsupported`, any
320
+ * other failure answers `failed` with the step and the remedy. No key is in
321
+ * the result, and a failure message is redacted of the device credential.
322
+ *
323
+ * @param opts - API URL, stores, the device to act as, and test overrides.
324
+ * @returns What the setup did.
325
+ */
326
+ export async function provisionNexusAccount(opts = {}) {
327
+ const progress = { step: 'connect' };
328
+ // The bearer in use, so a failure message that quotes it (fetch quotes a malformed header
329
+ // value) is redacted even when it does not have the credential's shape.
330
+ let bearer = opts.device?.currentBearer() ?? null;
331
+ try {
332
+ const conn = opts.device !== undefined
333
+ ? vaultConnectionOf(opts.device, resolveNexusApiUrl(opts.apiUrl), opts, [])
334
+ : await connectNexusVault(opts);
335
+ bearer = conn.device.currentBearer();
336
+ const unlocked = await unlockAccount(conn, false, progress);
337
+ const how = unlocked.escrow === 'minted'
338
+ ? 'the account key was created and escrowed on Cleo Nexus'
339
+ : 'this device received the account key from Cleo Nexus escrow';
340
+ return {
341
+ status: 'ready',
342
+ escrow: unlocked.escrow,
343
+ certificate: unlocked.certificate ?? 'existing',
344
+ keyVersion: unlocked.key.keyVersion,
345
+ summary: `Your account is ready for encrypted backups: ${how}, and this device is certified to use it.`,
346
+ };
347
+ }
348
+ catch (err) {
349
+ if (err instanceof NexusAccountError && err.code === 'E_NEXUS_VAULT_UNSUPPORTED') {
350
+ const fix = err.fix ?? 'upgrade the Cleo Nexus server';
351
+ return {
352
+ status: 'unsupported',
353
+ code: err.code,
354
+ fix,
355
+ summary: `signed in, but encrypted backups are not available: ${err.message}. Fix: ${fix}`,
356
+ };
357
+ }
358
+ const code = err instanceof NexusAccountError ? err.code : 'E_NEXUS_REQUEST_FAILED';
359
+ const raw = err instanceof Error ? err.message : String(err);
360
+ const message = redactNexusDeviceSecrets(bearer !== null && bearer !== '' ? raw.split(bearer).join('[redacted]') : raw);
361
+ const fix = (err instanceof NexusAccountError ? err.fix : undefined) ?? SETUP_RETRY_FIX;
362
+ const step = progress.step;
363
+ return {
364
+ status: 'failed',
365
+ step,
366
+ code,
367
+ message,
368
+ fix,
369
+ summary: `signed in, but encrypted backups are not set up: step ${step} (${SETUP_STEP_LABELS[step]}) failed with ${code}: ${message}. Fix: ${fix}`,
370
+ };
371
+ }
372
+ }
373
+ /**
374
+ * Why Cleo Nexus refused this device's first key for a project (403), as an
375
+ * account error with a remedy, or `null` for any other failure. A device may
376
+ * create only version 1, of a keyless project its own user registered
377
+ * (cleo-nexus #33); this function is reached only when this account holds no
378
+ * key for the project (T13098).
379
+ */
380
+ function refusedFirstKey(err, projectId) {
381
+ if (!(err instanceof NexusError) || err.status !== 403)
382
+ return null;
383
+ switch (err.details?.['reason']) {
384
+ case 'not-registrant':
385
+ return keyUnavailable(`project ${projectId} has no key yet, and only a device of the account that registered it may create the first one`, 'run the first `cleo cloud push` from a device of the account that first ran `cleo project link` for this project');
386
+ case 'session-required':
387
+ return keyUnavailable(`project ${projectId} already has a key, but it has not been shared with this account`, 'ask the project owner to share the project key with this account');
388
+ case 'project-role':
389
+ // Checked before the server knows whether the project has a key, so an owner may already
390
+ // have created one and not shared it with this account.
391
+ return keyUnavailable(`this account holds no key for project ${projectId}, and only a project owner can create one`, 'ask a project owner to share the project key with this account, or, if the project has no key yet, to run the first `cleo cloud push`');
392
+ default:
393
+ return null;
394
+ }
221
395
  }
222
396
  /**
223
397
  * The data key of a project stream: unwrap the newest wrapped key, or mint
@@ -251,16 +425,32 @@ export async function nexusProjectDataKey(conn, mk, projectId, mint) {
251
425
  await conn.raw('PUT', `${path}/${encodeURIComponent(conn.userId)}`, z.looseObject({}), {
252
426
  wrappedProjectKey: wrapProjectKey(mk, pdk, projectId, 1),
253
427
  keyVersion: 1,
428
+ // Cleo Nexus accepts a new key version, the first one included, only as a rotation naming
429
+ // the current highest version (cleo-nexus T12856). The two fields stay out of the shared
430
+ // contract until cleo-nexus adds them there too (T064), as the server does.
431
+ rotate: true,
432
+ expectedMax: 0,
254
433
  });
255
434
  return pdk;
256
435
  }
257
436
  catch (err) {
258
- if (!isConflict(err))
259
- throw nexusApiErrorToAccountError(err);
260
- const won = await read();
261
- if (won === null)
262
- throw keyUnavailable(`the project key of ${projectId} is not readable`);
263
- return won;
437
+ const refused = refusedFirstKey(err, projectId);
438
+ if (refused)
439
+ throw refused;
440
+ if (isConflict(err, 'rotation-stale') || isConflict(err, 'keys-exist')) {
441
+ // Another device created version 1 first: use its key (T13098).
442
+ const won = await read();
443
+ if (won === null) {
444
+ throw keyUnavailable(`the project key of ${projectId} was created by another account and has not been shared with this one`, 'ask the project owner to share the project with this account');
445
+ }
446
+ return won;
447
+ }
448
+ if (isConflict(err)) {
449
+ const e = err;
450
+ const reason = typeof e.details?.['reason'] === 'string' ? ` (${e.details['reason']})` : '';
451
+ throw keyUnavailable(`Cleo Nexus refused to store the project key of ${projectId}${reason}: ${e.serverMessage}`);
452
+ }
453
+ throw nexusApiErrorToAccountError(err);
264
454
  }
265
455
  }
266
456
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"nexus-vault-keys.js","sourceRoot":"","sources":["../../src/cloud/nexus-vault-keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nexus-vault-keys.js","sourceRoot":"","sources":["../../src/cloud/nexus-vault-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAEL,WAAW,IAAI,iBAAiB,EAChC,cAAc,EACd,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAgB,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAkB,IAAI,EAAE,UAAU,EAAuB,MAAM,WAAW,CAAC;AAClF,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,aAAa,EAEb,gBAAgB,EAChB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EAEtB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAA0B,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,qDAAqD;AACrD,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,MAAM,CAAC;AAEvD,4FAA4F;AAC5F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,EAAE,CAChE,wBAAwB,MAAM,IAAI,QAAQ,EAAE,CAAC;AAgC/C,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAEpD,SAAS,SAAS,CAAC,EAA6C;IAC9D,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA0B,EAAE;IAE5B,0BAA0B,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AACzE,CAAC;AAED,+EAA+E;AAC/E,SAAS,iBAAiB,CACxB,MAAyB,EACzB,MAAc,EACd,IAAuB,EACvB,kBAAqC;IAErC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IACtC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,iBAAiB,CACzB,uBAAuB,EACvB,kCAAkC,MAAM,EAAE,EAC1C,wBAAwB,CACzB,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;IACvC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,iBAAiB,CACzB,+BAA+B,EAC/B,0EAA0E,EAC1E,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GACR,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAa,EAAE,IAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,sBAAsB,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,2BAA2B,CAAC;IACxE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;QACpB,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACxF,WAAW,EAAE,CAAC;KACf,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,CAAI,MAAc,EAAE,IAAY,EAAE,MAAyB,EAAE,IAAc,EAAE,EAAE,CACzF,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3C,OAAO;QACL,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM;QACN,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;QAC5F,IAAI;QACJ,SAAS,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CACzB,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACtE,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,eAAe,EAAE;QAC/C,QAAQ,EAAE,uBAAuB,CAAC,kBAAkB,CAAC;QACrD,GAAG;QACH,KAAK,CAAC,IAAI,CAAI,MAAc,EAAE,IAAY,EAAE,MAAyB,EAAE,IAAc;YACnF,IAAI,CAAC;gBACH,OAAO,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,MAAyB;YACnD,IAAI,CAAC;gBACH,OAAO,MAAM,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;oBAAE,OAAO,IAAI,CAAC;gBACjE,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,MAAe,EAAE,EAAE,CACnD,GAAG,YAAY,UAAU;IACzB,GAAG,CAAC,MAAM,KAAK,GAAG;IAClB,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,CAAC;AAE/D,SAAS,cAAc,CAAC,OAAe,EAAE,GAAY;IACnD,OAAO,IAAI,iBAAiB,CAAC,+BAA+B,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,GAAY;IAClC,OAAO,CACL,GAAG,YAAY,UAAU;QACzB,GAAG,CAAC,MAAM,KAAK,GAAG;QAClB,GAAG,CAAC,IAAI,KAAK,aAAa;QAC1B,GAAG,CAAC,aAAa,KAAK,iBAAiB,CACxC,CAAC;AACJ,CAAC;AAED,wGAAwG;AACxG,SAAS,gBAAgB;IACvB,OAAO,IAAI,iBAAiB,CAC1B,2BAA2B,EAC3B,2FAA2F,EAC3F,4HAA4H,CAC7H,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAA0B;IAClD,IAAI,KAAqC,CAAC;IAC1C,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,yBAAyB,EAAE,cAAc,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,cAAc,CAAC,GAAG,CAAC;YAAE,MAAM,gBAAgB,EAAE,CAAC;QAClD,wFAAwF;QACxF,oFAAoF;QACpF,wDAAwD;QACxD,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,IAAI,CAAC;QAC/F,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,cAAc,CAAC,0DAA0D,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,EAAU,CAAC;IACf,IAAI,CAAC;QACH,EAAE,GAAG,UAAU,CACb,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,EAC1B,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAC1C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,cAAc,CAClB,6DAA6D,EAC7D,qFAAqF,CACtF,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,IAAI,iBAAiB,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1E,MAAM,cAAc,CAAC,sDAAsD,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,UAAU,CACvB,IAA0B;IAE1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;IAC1E,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,cAAc,CAClB,gGAAgG,EAChG,qFAAqF,CACtF,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,yBAAyB,EAAE,kBAAkB,EAAE;YACnE,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YACnC,UAAU,EAAE,CAAC;YACb,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,CAAC;SACzC,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uFAAuF;QACvF,oFAAoF;QACpF,IAAI,cAAc,CAAC,GAAG,CAAC;YAAE,MAAM,gBAAgB,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;QAC7D,8CAA8C;QAC9C,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,IAAI;YACd,MAAM,cAAc,CAAC,+DAA+D,CAAC,CAAC;QACxF,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,6FAA6F;AAC7F,KAAK,UAAU,eAAe,CAC5B,IAA0B,EAC1B,EAAU,EACV,EAAU;IAEV,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,EAAE,IAAI,CAAC,CAAC,gBAAgB,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAC/F,CAAC;IACF,IAAI,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,iBAAiB,CAAC;QAC9B,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,EAAE;QACd,SAAS,EAAE;YACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS;YACnD,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS;SAC9C;QACD,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;KAChE,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,IAAI,CACb,KAAK,EACL,eAAe,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EACtD,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,EACjB,KAAK,CACN,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAChG,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAA0B,EAC1B,OAA+B,EAAE;IAEjC,OAAO,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1F,CAAC;AAUD;;;GAGG;AACH,KAAK,UAAU,aAAa,CAC1B,IAA0B,EAC1B,QAAiB,EACjB,QAAyC;IAEzC,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,EAAE,CAAC;QAClC,2EAA2E;QAC3E,kDAAkD;QAClD,MAAM,IAAI,iBAAiB,CACzB,qBAAqB,EACrB,+EAA+E,EAC/E,qDAAqD,CACtD,CAAC;IACJ,CAAC;IACD,IAAI,QAAoC,CAAC;IACzC,IAAI,MAAiC,CAAC;IACtC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,QAAQ,GAAG,QAAQ,CAAC;QACpB,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,oFAAoF;QACpF,6EAA6E;QAC7E,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACtC,QAAQ,GAAG,MAAM,CAAC;QAClB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjD,CAAC;IACD,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;IAC1B,IAAI,KAAkB,CAAC;IACvB,IAAI,WAAW,GAAmC,IAAI,CAAC;IACvD,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxE,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QACxB,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;IACrD,CAAC;IACD,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;IACxB,oEAAoE;IACpE,iEAAiE;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAC9E,MAAM,CAAC,GAAG,gBAAgB,CACxB,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EACrC,IAAI,CAAC,MAAM,EACX,KAAK,EACL,OAAO,EACP,QAAQ,CAAC,EAAE,CACZ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACjF,CAAC,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,cAAc,CAClB,UAAU,CAAC,UAAU;YACnB,CAAC,CAAC,uEAAuE;YACzE,CAAC,CAAC,iEAAiE,CACtE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE;QACrF,MAAM;QACN,WAAW;KACZ,CAAC;AACJ,CAAC;AAaD,wDAAwD;AACxD,MAAM,iBAAiB,GAAoD;IACzE,OAAO,EAAE,yDAAyD;IAClE,aAAa,EAAE,kCAAkC;IACjD,aAAa,EAAE,wCAAwC;IACvD,OAAO,EAAE,8CAA8C;IACvD,KAAK,EAAE,kCAAkC;CAC1C,CAAC;AAEF,kEAAkE;AAClE,MAAM,eAAe,GACnB,wFAAwF,CAAC;AAE3F;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAqC,EAAE;IAEvC,MAAM,QAAQ,GAAoC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACtE,0FAA0F;IAC1F,wEAAwE;IACxE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,IAAI,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,IAAI,GACR,IAAI,CAAC,MAAM,KAAK,SAAS;YACvB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;YAC3E,CAAC,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5D,MAAM,GAAG,GACP,QAAQ,CAAC,MAAM,KAAK,QAAQ;YAC1B,CAAC,CAAC,wDAAwD;YAC1D,CAAC,CAAC,6DAA6D,CAAC;QACpE,OAAO;YACL,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,UAAU;YAC/C,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU;YACnC,OAAO,EAAE,gDAAgD,GAAG,2CAA2C;SACxG,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;YACjF,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,+BAA+B,CAAC;YACvD,OAAO;gBACL,MAAM,EAAE,aAAa;gBACrB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,GAAG;gBACH,OAAO,EAAE,uDAAuD,GAAG,CAAC,OAAO,UAAU,GAAG,EAAE;aAC3F,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,YAAY,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACpF,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,wBAAwB,CACtC,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAC9E,CAAC;QACF,MAAM,GAAG,GAAG,CAAC,GAAG,YAAY,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC;QACxF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,IAAI;YACJ,IAAI;YACJ,OAAO;YACP,GAAG;YACH,OAAO,EAAE,yDAAyD,IAAI,KAAK,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,IAAI,KAAK,OAAO,UAAU,GAAG,EAAE;SACnJ,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,GAAY,EAAE,SAAiB;IACtD,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACpE,QAAQ,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,KAAK,gBAAgB;YACnB,OAAO,cAAc,CACnB,WAAW,SAAS,+FAA+F,EACnH,kHAAkH,CACnH,CAAC;QACJ,KAAK,kBAAkB;YACrB,OAAO,cAAc,CACnB,WAAW,SAAS,kEAAkE,EACtF,kEAAkE,CACnE,CAAC;QACJ,KAAK,cAAc;YACjB,yFAAyF;YACzF,wDAAwD;YACxD,OAAO,cAAc,CACnB,yCAAyC,SAAS,2CAA2C,EAC7F,uIAAuI,CACxI,CAAC;QACJ;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAA0B,EAC1B,EAAU,EACV,SAAiB,EACjB,IAAa;IAEb,MAAM,IAAI,GAAG,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC;IAClE,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,iBAAiB,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACtF,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,cAAc,CAAC,sBAAsB,SAAS,wCAAwC,CAAC,CAAC;QAChG,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,CAAC;IAC1B,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;YACrF,iBAAiB,EAAE,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;YACxD,UAAU,EAAE,CAAC;YACb,0FAA0F;YAC1F,yFAAyF;YACzF,4EAA4E;YAC5E,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,CAAC;SACf,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,OAAO;YAAE,MAAM,OAAO,CAAC;QAC3B,IAAI,UAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,CAAC;YACvE,gEAAgE;YAChE,MAAM,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC;YACzB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,MAAM,cAAc,CAClB,sBAAsB,SAAS,uEAAuE,EACtG,8DAA8D,CAC/D,CAAC;YACJ,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,GAAiB,CAAC;YAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,MAAM,cAAc,CAClB,kDAAkD,SAAS,GAAG,MAAM,KAAK,CAAC,CAAC,aAAa,EAAE,CAC3F,CAAC;QACJ,CAAC;QACD,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,6DAA6D;AAC7D,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"nexus-vault.d.ts","sourceRoot":"","sources":["../../src/cloud/nexus-vault.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAMH,OAAO,KAAK,EACV,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAElB,eAAe,EAEf,sBAAsB,EAEtB,iBAAiB,EAGlB,MAAM,qBAAqB,CAAC;AA+D7B,OAAO,EAGL,KAAK,iBAAiB,EAIvB,MAAM,uBAAuB,CAAC;AAI/B,gGAAgG;AAChG,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAMjD;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B1B,CAAC;AAkCX,4CAA4C;AAC5C,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,0FAA0F;IAC1F,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAgkCD,4CAA4C;AAC5C,MAAM,WAAW,wBAAyB,SAAQ,wBAAwB;IACxE,uHAAuH;IACvH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACrD;AAyDD,4FAA4F;AAC5F,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAitBlD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,IAAI,GAAE,wBAAwB,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GACxE,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE7F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,GAAE,wBAA6B,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAEjC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,wBAA6B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAEhG;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,GAAE,wBAA6B,GAClC,OAAO,CAAC,uBAAuB,CAAC,CAElC"}
1
+ {"version":3,"file":"nexus-vault.d.ts","sourceRoot":"","sources":["../../src/cloud/nexus-vault.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAMH,OAAO,KAAK,EACV,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAElB,eAAe,EAEf,sBAAsB,EAEtB,iBAAiB,EAGlB,MAAM,qBAAqB,CAAC;AA+D7B,OAAO,EAGL,KAAK,iBAAiB,EAIvB,MAAM,uBAAuB,CAAC;AAI/B,gGAAgG;AAChG,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAMjD;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B1B,CAAC;AAkCX,4CAA4C;AAC5C,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,0FAA0F;IAC1F,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AA6kCD,4CAA4C;AAC5C,MAAM,WAAW,wBAAyB,SAAQ,wBAAwB;IACxE,uHAAuH;IACvH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACrD;AAyDD,4FAA4F;AAC5F,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAitBlD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,IAAI,GAAE,wBAAwB,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GACxE,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE7F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,GAAE,wBAA6B,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAEjC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,wBAA6B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAEhG;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,GAAE,wBAA6B,GAClC,OAAO,CAAC,uBAAuB,CAAC,CAElC"}
@@ -544,10 +544,21 @@ function compareWithSynced(local, snapshot, git, changes) {
544
544
  return rows;
545
545
  return rows.map((r) => (r.table === VAULT_FILES_KEY ? { ...r, match: changes.length === 0 } : r));
546
546
  }
547
+ /**
548
+ * This device's local-only change journal, emptied in every vault snapshot
549
+ * (T13042): capture, undo and quarantined images hold values the snapshot
550
+ * strips, and a restore takes these tables from the live store anyway.
551
+ */
552
+ const VAULT_CLEARED_JOURNAL_TABLES = [
553
+ '_sync_capture',
554
+ '_sync_undo',
555
+ '_sync_frame',
556
+ '_sync_quarantine',
557
+ ];
547
558
  /**
548
559
  * Export the store the way the vault snapshots it: no secrets, no `strip`
549
- * columns (T13007), and for the global store without machine-local state or
550
- * the config home (T12968).
560
+ * columns (T13007), no local change journal (T13042), and for the global
561
+ * store without machine-local state or the config home (T12968).
551
562
  */
552
563
  async function exportVaultBundle(t, outputPath, label, tracked) {
553
564
  await exportPortableBundle({
@@ -558,6 +569,7 @@ async function exportVaultBundle(t, outputPath, label, tracked) {
558
569
  : {}),
559
570
  ...(t.scope === 'project' && tracked.size > 0 ? { gitTrackedFiles: tracked } : {}),
560
571
  stripColumns: vaultStripColumns(tableScopeOf(t)),
572
+ clearTables: VAULT_CLEARED_JOURNAL_TABLES,
561
573
  outputPath,
562
574
  label,
563
575
  });