@cleocode/core 2026.9.26 → 2026.10.2

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 (410) hide show
  1. package/dist/build-provenance.json +2 -2
  2. package/dist/cloud/journal.d.ts +9 -5
  3. package/dist/cloud/journal.d.ts.map +1 -1
  4. package/dist/cloud/journal.js +29 -8
  5. package/dist/cloud/journal.js.map +1 -1
  6. package/dist/cloud/manifest-check.d.ts +140 -4
  7. package/dist/cloud/manifest-check.d.ts.map +1 -1
  8. package/dist/cloud/manifest-check.js +309 -10
  9. package/dist/cloud/manifest-check.js.map +1 -1
  10. package/dist/cloud/nexus-attach.d.ts +119 -0
  11. package/dist/cloud/nexus-attach.d.ts.map +1 -0
  12. package/dist/cloud/nexus-attach.js +267 -0
  13. package/dist/cloud/nexus-attach.js.map +1 -0
  14. package/dist/cloud/nexus-auth.d.ts +15 -3
  15. package/dist/cloud/nexus-auth.d.ts.map +1 -1
  16. package/dist/cloud/nexus-auth.js +90 -6
  17. package/dist/cloud/nexus-auth.js.map +1 -1
  18. package/dist/cloud/nexus-cloud-activity.d.ts +37 -0
  19. package/dist/cloud/nexus-cloud-activity.d.ts.map +1 -0
  20. package/dist/cloud/nexus-cloud-activity.js +79 -0
  21. package/dist/cloud/nexus-cloud-activity.js.map +1 -0
  22. package/dist/cloud/nexus-cloud-status.d.ts +132 -0
  23. package/dist/cloud/nexus-cloud-status.d.ts.map +1 -0
  24. package/dist/cloud/nexus-cloud-status.js +476 -0
  25. package/dist/cloud/nexus-cloud-status.js.map +1 -0
  26. package/dist/cloud/nexus-cloud.d.ts +179 -0
  27. package/dist/cloud/nexus-cloud.d.ts.map +1 -0
  28. package/dist/cloud/nexus-cloud.js +296 -0
  29. package/dist/cloud/nexus-cloud.js.map +1 -0
  30. package/dist/cloud/nexus-device.d.ts +32 -7
  31. package/dist/cloud/nexus-device.d.ts.map +1 -1
  32. package/dist/cloud/nexus-device.js +54 -7
  33. package/dist/cloud/nexus-device.js.map +1 -1
  34. package/dist/cloud/nexus-enrol.d.ts +35 -4
  35. package/dist/cloud/nexus-enrol.d.ts.map +1 -1
  36. package/dist/cloud/nexus-enrol.js +192 -47
  37. package/dist/cloud/nexus-enrol.js.map +1 -1
  38. package/dist/cloud/nexus-home.d.ts +74 -0
  39. package/dist/cloud/nexus-home.d.ts.map +1 -0
  40. package/dist/cloud/nexus-home.js +97 -0
  41. package/dist/cloud/nexus-home.js.map +1 -0
  42. package/dist/cloud/nexus-link.d.ts +8 -1
  43. package/dist/cloud/nexus-link.d.ts.map +1 -1
  44. package/dist/cloud/nexus-link.js +138 -11
  45. package/dist/cloud/nexus-link.js.map +1 -1
  46. package/dist/cloud/nexus-logout.d.ts +114 -0
  47. package/dist/cloud/nexus-logout.d.ts.map +1 -0
  48. package/dist/cloud/nexus-logout.js +429 -0
  49. package/dist/cloud/nexus-logout.js.map +1 -0
  50. package/dist/cloud/nexus-vault-keys.d.ts +129 -0
  51. package/dist/cloud/nexus-vault-keys.d.ts.map +1 -0
  52. package/dist/cloud/nexus-vault-keys.js +277 -0
  53. package/dist/cloud/nexus-vault-keys.js.map +1 -0
  54. package/dist/cloud/nexus-vault-state.d.ts +121 -0
  55. package/dist/cloud/nexus-vault-state.d.ts.map +1 -0
  56. package/dist/cloud/nexus-vault-state.js +274 -0
  57. package/dist/cloud/nexus-vault-state.js.map +1 -0
  58. package/dist/cloud/nexus-vault.d.ts +160 -0
  59. package/dist/cloud/nexus-vault.d.ts.map +1 -0
  60. package/dist/cloud/nexus-vault.js +1733 -0
  61. package/dist/cloud/nexus-vault.js.map +1 -0
  62. package/dist/cloud/signing.d.ts +24 -8
  63. package/dist/cloud/signing.d.ts.map +1 -1
  64. package/dist/cloud/signing.js +61 -15
  65. package/dist/cloud/signing.js.map +1 -1
  66. package/dist/docs/export-document.js +8341 -3317
  67. package/dist/docs/export-document.js.map +3 -3
  68. package/dist/doctor/migrations.d.ts +75 -0
  69. package/dist/doctor/migrations.d.ts.map +1 -0
  70. package/dist/doctor/migrations.js +136 -0
  71. package/dist/doctor/migrations.js.map +1 -0
  72. package/dist/doctor/sync-sealer.d.ts +48 -0
  73. package/dist/doctor/sync-sealer.d.ts.map +1 -0
  74. package/dist/doctor/sync-sealer.js +109 -0
  75. package/dist/doctor/sync-sealer.js.map +1 -0
  76. package/dist/doctor/sync-triggers.d.ts +53 -0
  77. package/dist/doctor/sync-triggers.d.ts.map +1 -0
  78. package/dist/doctor/sync-triggers.js +157 -0
  79. package/dist/doctor/sync-triggers.js.map +1 -0
  80. package/dist/init.d.ts.map +1 -1
  81. package/dist/init.js +5 -1
  82. package/dist/init.js.map +1 -1
  83. package/dist/internal.d.ts +1 -1
  84. package/dist/internal.d.ts.map +1 -1
  85. package/dist/internal.js +1 -1
  86. package/dist/internal.js.map +1 -1
  87. package/dist/llm/plugin-facade.js +8668 -3644
  88. package/dist/llm/plugin-facade.js.map +3 -3
  89. package/dist/nexus/projects-clean.d.ts +3 -0
  90. package/dist/nexus/projects-clean.d.ts.map +1 -1
  91. package/dist/nexus/projects-clean.js +9 -3
  92. package/dist/nexus/projects-clean.js.map +1 -1
  93. package/dist/nexus/registry-roots.d.ts +3 -1
  94. package/dist/nexus/registry-roots.d.ts.map +1 -1
  95. package/dist/nexus/registry-roots.js +5 -2
  96. package/dist/nexus/registry-roots.js.map +1 -1
  97. package/dist/nexus/registry.d.ts +8 -1
  98. package/dist/nexus/registry.d.ts.map +1 -1
  99. package/dist/nexus/registry.js +24 -10
  100. package/dist/nexus/registry.js.map +1 -1
  101. package/dist/nexus/workspace.d.ts +4 -1
  102. package/dist/nexus/workspace.d.ts.map +1 -1
  103. package/dist/nexus/workspace.js +10 -4
  104. package/dist/nexus/workspace.js.map +1 -1
  105. package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
  106. package/dist/orchestrate/spawn-ops.js +7 -2
  107. package/dist/orchestrate/spawn-ops.js.map +1 -1
  108. package/dist/orchestrate/worker-verify.d.ts +121 -12
  109. package/dist/orchestrate/worker-verify.d.ts.map +1 -1
  110. package/dist/orchestrate/worker-verify.js +172 -21
  111. package/dist/orchestrate/worker-verify.js.map +1 -1
  112. package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
  113. package/dist/orchestration/spawn-prompt.js +15 -9
  114. package/dist/orchestration/spawn-prompt.js.map +1 -1
  115. package/dist/release/ci-evidence.d.ts +9 -0
  116. package/dist/release/ci-evidence.d.ts.map +1 -1
  117. package/dist/release/ci-evidence.js +9 -2
  118. package/dist/release/ci-evidence.js.map +1 -1
  119. package/dist/resources/backend.d.ts +15 -3
  120. package/dist/resources/backend.d.ts.map +1 -1
  121. package/dist/resources/backend.js +7 -3
  122. package/dist/resources/backend.js.map +1 -1
  123. package/dist/resources/darwin-backend.d.ts +142 -0
  124. package/dist/resources/darwin-backend.d.ts.map +1 -0
  125. package/dist/resources/darwin-backend.js +288 -0
  126. package/dist/resources/darwin-backend.js.map +1 -0
  127. package/dist/resources/governor.d.ts +44 -1
  128. package/dist/resources/governor.d.ts.map +1 -1
  129. package/dist/resources/governor.js +100 -36
  130. package/dist/resources/governor.js.map +1 -1
  131. package/dist/resources/heavy-command.d.ts +132 -0
  132. package/dist/resources/heavy-command.d.ts.map +1 -0
  133. package/dist/resources/heavy-command.js +768 -0
  134. package/dist/resources/heavy-command.js.map +1 -0
  135. package/dist/resources/monitor.d.ts +50 -1
  136. package/dist/resources/monitor.d.ts.map +1 -1
  137. package/dist/resources/monitor.js +83 -1
  138. package/dist/resources/monitor.js.map +1 -1
  139. package/dist/resources/run-admission.d.ts +303 -0
  140. package/dist/resources/run-admission.d.ts.map +1 -0
  141. package/dist/resources/run-admission.js +648 -0
  142. package/dist/resources/run-admission.js.map +1 -0
  143. package/dist/resources/run-class.d.ts +111 -0
  144. package/dist/resources/run-class.d.ts.map +1 -0
  145. package/dist/resources/run-class.js +658 -0
  146. package/dist/resources/run-class.js.map +1 -0
  147. package/dist/resources/run-governed.d.ts +158 -0
  148. package/dist/resources/run-governed.d.ts.map +1 -0
  149. package/dist/resources/run-governed.js +406 -0
  150. package/dist/resources/run-governed.js.map +1 -0
  151. package/dist/resources/slot-holder.d.ts +267 -0
  152. package/dist/resources/slot-holder.d.ts.map +1 -0
  153. package/dist/resources/slot-holder.js +505 -0
  154. package/dist/resources/slot-holder.js.map +1 -0
  155. package/dist/resources/tool-groups.d.ts +74 -0
  156. package/dist/resources/tool-groups.d.ts.map +1 -0
  157. package/dist/resources/tool-groups.js +118 -0
  158. package/dist/resources/tool-groups.js.map +1 -0
  159. package/dist/routing/build-command-groups.d.ts.map +1 -1
  160. package/dist/routing/build-command-groups.js +1 -0
  161. package/dist/routing/build-command-groups.js.map +1 -1
  162. package/dist/selfimprove/fix-gen.js +8676 -3652
  163. package/dist/selfimprove/fix-gen.js.map +3 -3
  164. package/dist/sentient/cross-project-hygiene.d.ts +3 -2
  165. package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
  166. package/dist/sentient/cross-project-hygiene.js +5 -2
  167. package/dist/sentient/cross-project-hygiene.js.map +1 -1
  168. package/dist/sentient/state.d.ts +7 -0
  169. package/dist/sentient/state.d.ts.map +1 -1
  170. package/dist/sentient/state.js.map +1 -1
  171. package/dist/sentient/tick.d.ts +14 -2
  172. package/dist/sentient/tick.d.ts.map +1 -1
  173. package/dist/sentient/tick.js +63 -4
  174. package/dist/sentient/tick.js.map +1 -1
  175. package/dist/setup/sections/nexus-account.d.ts +8 -6
  176. package/dist/setup/sections/nexus-account.d.ts.map +1 -1
  177. package/dist/setup/sections/nexus-account.js +53 -9
  178. package/dist/setup/sections/nexus-account.js.map +1 -1
  179. package/dist/store/backup-recover.d.ts.map +1 -1
  180. package/dist/store/backup-recover.js +5 -0
  181. package/dist/store/backup-recover.js.map +1 -1
  182. package/dist/store/data-accessor.d.ts +1 -0
  183. package/dist/store/data-accessor.d.ts.map +1 -1
  184. package/dist/store/data-accessor.js +7 -0
  185. package/dist/store/data-accessor.js.map +1 -1
  186. package/dist/store/dual-scope-db.d.ts +23 -1
  187. package/dist/store/dual-scope-db.d.ts.map +1 -1
  188. package/dist/store/dual-scope-db.js +126 -36
  189. package/dist/store/dual-scope-db.js.map +1 -1
  190. package/dist/store/exodus/recovery.d.ts.map +1 -1
  191. package/dist/store/exodus/recovery.js +15 -0
  192. package/dist/store/exodus/recovery.js.map +1 -1
  193. package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
  194. package/dist/store/legacy-tasks-lineage.js +5 -0
  195. package/dist/store/legacy-tasks-lineage.js.map +1 -1
  196. package/dist/store/lock.d.ts +8 -1
  197. package/dist/store/lock.d.ts.map +1 -1
  198. package/dist/store/lock.js +10 -2
  199. package/dist/store/lock.js.map +1 -1
  200. package/dist/store/migration-manager.d.ts +5 -0
  201. package/dist/store/migration-manager.d.ts.map +1 -1
  202. package/dist/store/migration-manager.js +11 -0
  203. package/dist/store/migration-manager.js.map +1 -1
  204. package/dist/store/migration-runner.d.ts +158 -0
  205. package/dist/store/migration-runner.d.ts.map +1 -0
  206. package/dist/store/migration-runner.js +493 -0
  207. package/dist/store/migration-runner.js.map +1 -0
  208. package/dist/store/portable-bundle-import.d.ts +15 -1
  209. package/dist/store/portable-bundle-import.d.ts.map +1 -1
  210. package/dist/store/portable-bundle-import.js +24 -4
  211. package/dist/store/portable-bundle-import.js.map +1 -1
  212. package/dist/store/portable-bundle-relocate.d.ts +43 -0
  213. package/dist/store/portable-bundle-relocate.d.ts.map +1 -1
  214. package/dist/store/portable-bundle-relocate.js +79 -5
  215. package/dist/store/portable-bundle-relocate.js.map +1 -1
  216. package/dist/store/portable-bundle-scan.d.ts +20 -0
  217. package/dist/store/portable-bundle-scan.d.ts.map +1 -1
  218. package/dist/store/portable-bundle-scan.js +38 -3
  219. package/dist/store/portable-bundle-scan.js.map +1 -1
  220. package/dist/store/portable-bundle.d.ts +33 -0
  221. package/dist/store/portable-bundle.d.ts.map +1 -1
  222. package/dist/store/portable-bundle.js +34 -7
  223. package/dist/store/portable-bundle.js.map +1 -1
  224. package/dist/store/row-identity-registry.d.ts +137 -7
  225. package/dist/store/row-identity-registry.d.ts.map +1 -1
  226. package/dist/store/row-identity-registry.js +364 -9
  227. package/dist/store/row-identity-registry.js.map +1 -1
  228. package/dist/store/row-identity.d.ts.map +1 -1
  229. package/dist/store/row-identity.js +9 -10
  230. package/dist/store/row-identity.js.map +1 -1
  231. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  232. package/dist/store/sqlite-data-accessor.js +10 -0
  233. package/dist/store/sqlite-data-accessor.js.map +1 -1
  234. package/dist/store/sqlite.d.ts +31 -0
  235. package/dist/store/sqlite.d.ts.map +1 -1
  236. package/dist/store/sqlite.js +5 -1
  237. package/dist/store/sqlite.js.map +1 -1
  238. package/dist/store/sync/capture.d.ts +203 -0
  239. package/dist/store/sync/capture.d.ts.map +1 -0
  240. package/dist/store/sync/capture.js +562 -0
  241. package/dist/store/sync/capture.js.map +1 -0
  242. package/dist/store/sync/clock-store.d.ts.map +1 -1
  243. package/dist/store/sync/clock-store.js +2 -0
  244. package/dist/store/sync/clock-store.js.map +1 -1
  245. package/dist/store/sync/fk-orphans.d.ts +133 -0
  246. package/dist/store/sync/fk-orphans.d.ts.map +1 -0
  247. package/dist/store/sync/fk-orphans.js +265 -0
  248. package/dist/store/sync/fk-orphans.js.map +1 -0
  249. package/dist/store/sync/flags.d.ts +7 -0
  250. package/dist/store/sync/flags.d.ts.map +1 -1
  251. package/dist/store/sync/flags.js +16 -0
  252. package/dist/store/sync/flags.js.map +1 -1
  253. package/dist/store/sync/hlc.d.ts.map +1 -1
  254. package/dist/store/sync/hlc.js +4 -0
  255. package/dist/store/sync/hlc.js.map +1 -1
  256. package/dist/store/sync/identity-fill.d.ts +45 -0
  257. package/dist/store/sync/identity-fill.d.ts.map +1 -0
  258. package/dist/store/sync/identity-fill.js +85 -0
  259. package/dist/store/sync/identity-fill.js.map +1 -0
  260. package/dist/store/sync/machinery.d.ts +27 -0
  261. package/dist/store/sync/machinery.d.ts.map +1 -0
  262. package/dist/store/sync/machinery.js +44 -0
  263. package/dist/store/sync/machinery.js.map +1 -0
  264. package/dist/store/sync/netting.d.ts +120 -0
  265. package/dist/store/sync/netting.d.ts.map +1 -0
  266. package/dist/store/sync/netting.js +336 -0
  267. package/dist/store/sync/netting.js.map +1 -0
  268. package/dist/store/sync/replica.d.ts +59 -3
  269. package/dist/store/sync/replica.d.ts.map +1 -1
  270. package/dist/store/sync/replica.js +84 -3
  271. package/dist/store/sync/replica.js.map +1 -1
  272. package/dist/store/sync/schema.d.ts +18 -3
  273. package/dist/store/sync/schema.d.ts.map +1 -1
  274. package/dist/store/sync/schema.js +27 -3
  275. package/dist/store/sync/schema.js.map +1 -1
  276. package/dist/store/sync/seal-backlog.d.ts +21 -0
  277. package/dist/store/sync/seal-backlog.d.ts.map +1 -0
  278. package/dist/store/sync/seal-backlog.js +24 -0
  279. package/dist/store/sync/seal-backlog.js.map +1 -0
  280. package/dist/store/sync/sealer-values.d.ts +34 -0
  281. package/dist/store/sync/sealer-values.d.ts.map +1 -0
  282. package/dist/store/sync/sealer-values.js +53 -0
  283. package/dist/store/sync/sealer-values.js.map +1 -0
  284. package/dist/store/sync/sealer.d.ts +145 -0
  285. package/dist/store/sync/sealer.d.ts.map +1 -0
  286. package/dist/store/sync/sealer.js +906 -0
  287. package/dist/store/sync/sealer.js.map +1 -0
  288. package/dist/store/sync/structural.d.ts +63 -0
  289. package/dist/store/sync/structural.d.ts.map +1 -0
  290. package/dist/store/sync/structural.js +180 -0
  291. package/dist/store/sync/structural.js.map +1 -0
  292. package/dist/store/sync/timestamps.d.ts +92 -0
  293. package/dist/store/sync/timestamps.d.ts.map +1 -0
  294. package/dist/store/sync/timestamps.js +228 -0
  295. package/dist/store/sync/timestamps.js.map +1 -0
  296. package/dist/store/sync/tombstones.d.ts +75 -0
  297. package/dist/store/sync/tombstones.d.ts.map +1 -0
  298. package/dist/store/sync/tombstones.js +103 -0
  299. package/dist/store/sync/tombstones.js.map +1 -0
  300. package/dist/store/sync/trigger-classes.d.ts +221 -0
  301. package/dist/store/sync/trigger-classes.d.ts.map +1 -0
  302. package/dist/store/sync/trigger-classes.js +441 -0
  303. package/dist/store/sync/trigger-classes.js.map +1 -0
  304. package/dist/store/sync/trigger-suspend-at-path.d.ts +23 -0
  305. package/dist/store/sync/trigger-suspend-at-path.d.ts.map +1 -0
  306. package/dist/store/sync/trigger-suspend-at-path.js +44 -0
  307. package/dist/store/sync/trigger-suspend-at-path.js.map +1 -0
  308. package/dist/store/sync/writer-version.d.ts +43 -0
  309. package/dist/store/sync/writer-version.d.ts.map +1 -0
  310. package/dist/store/sync/writer-version.js +90 -0
  311. package/dist/store/sync/writer-version.js.map +1 -0
  312. package/dist/store/table-classification.d.ts.map +1 -1
  313. package/dist/store/table-classification.js +102 -0
  314. package/dist/store/table-classification.js.map +1 -1
  315. package/dist/store/trigger-suspend-schema.d.ts +44 -0
  316. package/dist/store/trigger-suspend-schema.d.ts.map +1 -0
  317. package/dist/store/trigger-suspend-schema.js +25 -0
  318. package/dist/store/trigger-suspend-schema.js.map +1 -0
  319. package/dist/store/vault-manifest.d.ts +365 -0
  320. package/dist/store/vault-manifest.d.ts.map +1 -0
  321. package/dist/store/vault-manifest.js +812 -0
  322. package/dist/store/vault-manifest.js.map +1 -0
  323. package/dist/store/writer-lease.d.ts +31 -0
  324. package/dist/store/writer-lease.d.ts.map +1 -1
  325. package/dist/store/writer-lease.js +65 -2
  326. package/dist/store/writer-lease.js.map +1 -1
  327. package/dist/system/health.d.ts.map +1 -1
  328. package/dist/system/health.js +21 -0
  329. package/dist/system/health.js.map +1 -1
  330. package/dist/system/project-health.d.ts.map +1 -1
  331. package/dist/system/project-health.js +3 -1
  332. package/dist/system/project-health.js.map +1 -1
  333. package/dist/tasks/affected-packages.d.ts +58 -0
  334. package/dist/tasks/affected-packages.d.ts.map +1 -1
  335. package/dist/tasks/affected-packages.js +75 -6
  336. package/dist/tasks/affected-packages.js.map +1 -1
  337. package/dist/tasks/affected-scope.d.ts +150 -23
  338. package/dist/tasks/affected-scope.d.ts.map +1 -1
  339. package/dist/tasks/affected-scope.js +320 -32
  340. package/dist/tasks/affected-scope.js.map +1 -1
  341. package/dist/tasks/change-set.d.ts +96 -0
  342. package/dist/tasks/change-set.d.ts.map +1 -1
  343. package/dist/tasks/change-set.js +169 -4
  344. package/dist/tasks/change-set.js.map +1 -1
  345. package/dist/tasks/complete-ci.d.ts +115 -0
  346. package/dist/tasks/complete-ci.d.ts.map +1 -0
  347. package/dist/tasks/complete-ci.js +171 -0
  348. package/dist/tasks/complete-ci.js.map +1 -0
  349. package/dist/tasks/complete.d.ts.map +1 -1
  350. package/dist/tasks/complete.js +50 -17
  351. package/dist/tasks/complete.js.map +1 -1
  352. package/dist/tasks/compute-task-view.d.ts.map +1 -1
  353. package/dist/tasks/compute-task-view.js +7 -0
  354. package/dist/tasks/compute-task-view.js.map +1 -1
  355. package/dist/tasks/done-plan.d.ts.map +1 -1
  356. package/dist/tasks/done-plan.js +51 -30
  357. package/dist/tasks/done-plan.js.map +1 -1
  358. package/dist/tasks/done-record.d.ts +6 -0
  359. package/dist/tasks/done-record.d.ts.map +1 -1
  360. package/dist/tasks/done-record.js +9 -3
  361. package/dist/tasks/done-record.js.map +1 -1
  362. package/dist/tasks/evidence.d.ts +3 -2
  363. package/dist/tasks/evidence.d.ts.map +1 -1
  364. package/dist/tasks/evidence.js +143 -12
  365. package/dist/tasks/evidence.js.map +1 -1
  366. package/dist/tasks/gate-notes.d.ts +22 -0
  367. package/dist/tasks/gate-notes.d.ts.map +1 -0
  368. package/dist/tasks/gate-notes.js +33 -0
  369. package/dist/tasks/gate-notes.js.map +1 -0
  370. package/dist/tasks/index.d.ts +2 -1
  371. package/dist/tasks/index.d.ts.map +1 -1
  372. package/dist/tasks/index.js +2 -1
  373. package/dist/tasks/index.js.map +1 -1
  374. package/dist/tasks/test-run-binding.d.ts +117 -0
  375. package/dist/tasks/test-run-binding.d.ts.map +1 -0
  376. package/dist/tasks/test-run-binding.js +365 -0
  377. package/dist/tasks/test-run-binding.js.map +1 -0
  378. package/dist/tasks/tool-cache-env.d.ts +123 -0
  379. package/dist/tasks/tool-cache-env.d.ts.map +1 -0
  380. package/dist/tasks/tool-cache-env.js +287 -0
  381. package/dist/tasks/tool-cache-env.js.map +1 -0
  382. package/dist/tasks/tool-cache-failed-first.d.ts +155 -0
  383. package/dist/tasks/tool-cache-failed-first.d.ts.map +1 -0
  384. package/dist/tasks/tool-cache-failed-first.js +285 -0
  385. package/dist/tasks/tool-cache-failed-first.js.map +1 -0
  386. package/dist/tasks/tool-cache.d.ts +375 -55
  387. package/dist/tasks/tool-cache.d.ts.map +1 -1
  388. package/dist/tasks/tool-cache.js +912 -303
  389. package/dist/tasks/tool-cache.js.map +1 -1
  390. package/dist/tasks/tool-resolver.d.ts +4 -3
  391. package/dist/tasks/tool-resolver.d.ts.map +1 -1
  392. package/dist/tasks/tool-resolver.js +15 -4
  393. package/dist/tasks/tool-resolver.js.map +1 -1
  394. package/dist/tasks/tool-semaphore.d.ts +67 -7
  395. package/dist/tasks/tool-semaphore.d.ts.map +1 -1
  396. package/dist/tasks/tool-semaphore.js +134 -56
  397. package/dist/tasks/tool-semaphore.js.map +1 -1
  398. package/dist/upgrade.d.ts.map +1 -1
  399. package/dist/upgrade.js +4 -0
  400. package/dist/upgrade.js.map +1 -1
  401. package/dist/validation/engine-ops.d.ts +6 -0
  402. package/dist/validation/engine-ops.d.ts.map +1 -1
  403. package/dist/validation/engine-ops.js +8 -0
  404. package/dist/validation/engine-ops.js.map +1 -1
  405. package/migrations/drizzle-cleo-project/20260930170000_t12819-trigger-suspend-clause/migration.sql +367 -0
  406. package/migrations/sync-journal/20260930120000_t12343-capture/migration.sql +47 -0
  407. package/migrations/sync-journal/20261001170000_t12984-sealer/migration.sql +101 -0
  408. package/package.json +13 -13
  409. package/templates/CLEO-INJECTION.md +5 -5
  410. package/templates/CLEO-REFERENCE.md +8 -4
@@ -0,0 +1,274 @@
1
+ /**
2
+ * This machine's cloud vault state (`<cleoHome>/nexus-vault.json`):
3
+ * secret-free, machine-local bookkeeping the vault needs between runs.
4
+ *
5
+ * - Per account: the signer {@link TrustState} learned from
6
+ * `certifiedSigners` (trust only tightens, so it must survive restarts).
7
+ * - Per (stream, local store): the snapshot this store last pushed or
8
+ * restored, which decides "behind" (another device pushed since) and
9
+ * "pending changes" (this store changed since).
10
+ *
11
+ * Every read-modify-write runs under a lock file and writes atomically (temp
12
+ * file + rename). A file this version cannot read (truncated, invalid, or
13
+ * written by a newer CLEO) is moved aside with a warning, never reset in
14
+ * place, so a downgrade or a torn write cannot silently discard the signer
15
+ * pins. Nothing here is secret: keys and tokens stay in the sealed device
16
+ * store.
17
+ *
18
+ * @task T12336
19
+ * @epic T12322
20
+ */
21
+ import fs from 'node:fs';
22
+ import path from 'node:path';
23
+ import { resolveNexusVaultStatePath } from '@cleocode/paths';
24
+ import lockfile from 'proper-lockfile';
25
+ import { z } from 'zod';
26
+ import { initialTrustState } from './keys.js';
27
+ const trustStateSchema = z.object({
28
+ keyVersion: z.number().int().nonnegative(),
29
+ pins: z.record(z.string(), z.object({
30
+ replicas: z.record(z.string(), z.number().int().nonnegative()),
31
+ checkpoints: z.record(z.string(), z.number().int().nonnegative()),
32
+ })),
33
+ revoked: z.array(z.string()),
34
+ });
35
+ const streamStateSchema = z.looseObject({
36
+ /** The snapshot this store last pushed or restored. */
37
+ lastCheckpointId: z.string().nullable(),
38
+ /** Its coversSeq: an older snapshot is never restored over it without `--checkpoint`. */
39
+ lastCoversSeq: z.number().int().nonnegative(),
40
+ updatedAt: z.string(),
41
+ /**
42
+ * A push from this store that had not recorded its snapshot yet: the parent it
43
+ * pushed over (T13007). Cleared when the snapshot is recorded.
44
+ */
45
+ pushInFlight: z
46
+ .object({
47
+ parentCheckpointId: z.string().nullable(),
48
+ at: z.string(),
49
+ /** The pushed snapshot's marks and per-path digests, for a recovered push (#1773 R6). */
50
+ gitTracked: z.array(z.string()).optional(),
51
+ files: z.record(z.string(), z.string()).optional(),
52
+ })
53
+ .optional(),
54
+ /**
55
+ * Paths (relative to the section root) the last synced snapshot marks as
56
+ * git-tracked: git's job, so they are left out of every file comparison
57
+ * with it, and a machine without git carries the marks on (T13019).
58
+ */
59
+ gitTracked: z.array(z.string()).optional(),
60
+ /**
61
+ * The last synced snapshot's plain files, path to digest (a prefix of the
62
+ * vault file digest), so a later comparison judges each file on its own,
63
+ * whatever either side's git tracks (T13038).
64
+ */
65
+ files: z.record(z.string(), z.string()).optional(),
66
+ });
67
+ const accountStateSchema = z.looseObject({
68
+ trust: trustStateSchema,
69
+ streams: z.record(z.string(), streamStateSchema).default({}),
70
+ });
71
+ const stateSchema = z.looseObject({
72
+ version: z.literal(1),
73
+ accounts: z.record(z.string(), accountStateSchema).default({}),
74
+ });
75
+ /** Key of one account in the state file. */
76
+ const accountKey = (apiUrl, userId) => `${apiUrl} ${userId}`;
77
+ /** Key of one local store on one stream. */
78
+ export const vaultStreamKey = (streamId, storeRoot) => `${streamId}|${path.resolve(storeRoot)}`;
79
+ /** How long a state access waits for another process's lock. */
80
+ const LOCK_WAIT_MS = 15_000;
81
+ /** Age after which a lock whose holder stopped refreshing it may be taken over. */
82
+ const LOCK_STALE_MS = 10_000;
83
+ /** Warning code: the state file was unreadable or newer, and was moved aside. */
84
+ export const W_NEXUS_VAULT_STATE_MOVED = 'W_NEXUS_VAULT_STATE_MOVED';
85
+ function sleepSync(ms) {
86
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
87
+ }
88
+ /**
89
+ * Read/modify/write access to the vault state file.
90
+ */
91
+ export class NexusVaultState {
92
+ /** Absolute path of the state file. */
93
+ path;
94
+ warnings = [];
95
+ /** @param filePath - Override for tests; defaults to {@link resolveNexusVaultStatePath}. */
96
+ constructor(filePath) {
97
+ this.path = filePath ?? resolveNexusVaultStatePath();
98
+ }
99
+ /** Warnings raised since the last call (a moved-aside file), for the command's result. */
100
+ drainWarnings() {
101
+ const out = this.warnings;
102
+ this.warnings = [];
103
+ return out;
104
+ }
105
+ /** Run `fn` holding the state file's lock. */
106
+ locked(fn) {
107
+ fs.mkdirSync(path.dirname(this.path), { recursive: true });
108
+ const deadline = Date.now() + LOCK_WAIT_MS;
109
+ let release;
110
+ for (;;) {
111
+ try {
112
+ release = lockfile.lockSync(this.path, { realpath: false, stale: LOCK_STALE_MS });
113
+ break;
114
+ }
115
+ catch (err) {
116
+ const code = err.code;
117
+ if (code !== 'ELOCKED' || Date.now() > deadline) {
118
+ throw new Error(`cannot lock the cloud vault state ${this.path}: ${err instanceof Error ? err.message : String(err)}`);
119
+ }
120
+ sleepSync(25);
121
+ }
122
+ }
123
+ try {
124
+ return fn();
125
+ }
126
+ finally {
127
+ release();
128
+ }
129
+ }
130
+ /** Move an unusable file aside (never overwrite it) and start empty. */
131
+ moveAside(why) {
132
+ const aside = `${this.path}.${why}-${new Date().toISOString().replace(/[:.]/g, '-')}`;
133
+ fs.renameSync(this.path, aside);
134
+ this.warnings.push({
135
+ code: W_NEXUS_VAULT_STATE_MOVED,
136
+ message: why === 'newer'
137
+ ? `the cloud vault state was written by a newer CLEO; it was moved to ${aside} and this machine starts with empty vault state (re-run with the newer CLEO, or restore that file after upgrading)`
138
+ : `the cloud vault state could not be read; it was moved to ${aside} and this machine starts with empty vault state (signer trust is re-learned on the next command; the next push or pull resyncs)`,
139
+ });
140
+ return { version: 1, accounts: {} };
141
+ }
142
+ read() {
143
+ let raw;
144
+ try {
145
+ raw = fs.readFileSync(this.path, 'utf8');
146
+ }
147
+ catch (err) {
148
+ if (err.code === 'ENOENT')
149
+ return { version: 1, accounts: {} };
150
+ throw err;
151
+ }
152
+ let json;
153
+ try {
154
+ json = JSON.parse(raw);
155
+ }
156
+ catch {
157
+ return this.moveAside('unreadable');
158
+ }
159
+ const version = json !== null && typeof json === 'object' ? json.version : null;
160
+ if (typeof version === 'number' && version > 1)
161
+ return this.moveAside('newer');
162
+ const parsed = stateSchema.safeParse(json);
163
+ return parsed.success ? parsed.data : this.moveAside('unreadable');
164
+ }
165
+ write(state) {
166
+ const tmp = `${this.path}.${process.pid}.${Date.now()}.tmp`;
167
+ const fd = fs.openSync(tmp, 'w', 0o600);
168
+ try {
169
+ fs.writeSync(fd, `${JSON.stringify(state, null, 2)}\n`);
170
+ fs.fsyncSync(fd);
171
+ }
172
+ finally {
173
+ fs.closeSync(fd);
174
+ }
175
+ fs.renameSync(tmp, this.path);
176
+ }
177
+ /** Read, let `fn` change the state, and write it back, all under the lock. */
178
+ update(fn) {
179
+ return this.locked(() => {
180
+ const state = this.read();
181
+ const out = fn(state);
182
+ this.write(state);
183
+ return out;
184
+ });
185
+ }
186
+ /** Read under the lock (moving an unusable file aside). */
187
+ snapshot() {
188
+ return this.locked(() => this.read());
189
+ }
190
+ account(state, apiUrl, userId) {
191
+ const k = accountKey(apiUrl, userId);
192
+ state.accounts[k] ??= { trust: initialTrustState(), streams: {} };
193
+ return state.accounts[k];
194
+ }
195
+ /** The account's persisted signer trust state. */
196
+ trust(apiUrl, userId) {
197
+ const s = this.snapshot();
198
+ return structuredClone(this.account(s, apiUrl, userId).trust);
199
+ }
200
+ /** Persist the trust state returned by `certifiedSigners`. */
201
+ saveTrust(apiUrl, userId, trust) {
202
+ this.update((s) => {
203
+ this.account(s, apiUrl, userId).trust = structuredClone(trust);
204
+ });
205
+ }
206
+ /**
207
+ * Read the account's trust state, let `fn` evaluate it, and persist the
208
+ * trust it returns, all under one lock.
209
+ *
210
+ * @param apiUrl - Account API URL.
211
+ * @param userId - Account user id.
212
+ * @param fn - Receives the current trust; returns the trust to store and a result.
213
+ * @returns `fn`'s result.
214
+ */
215
+ updateTrust(apiUrl, userId, fn) {
216
+ return this.update((s) => {
217
+ const a = this.account(s, apiUrl, userId);
218
+ const { trust, result } = fn(structuredClone(a.trust));
219
+ a.trust = structuredClone(trust);
220
+ return result;
221
+ });
222
+ }
223
+ /** What `storeRoot` last synced with on `streamId`, or `null`. */
224
+ stream(apiUrl, userId, streamId, storeRoot) {
225
+ const s = this.snapshot();
226
+ return this.account(s, apiUrl, userId).streams[vaultStreamKey(streamId, storeRoot)] ?? null;
227
+ }
228
+ /**
229
+ * Record that a push from `storeRoot` is about to create a snapshot over
230
+ * `parentCheckpointId` (T13007). {@link saveStream} clears the mark; when a
231
+ * crash loses that write, the mark tells the next command that the head
232
+ * this device and replica pushed over that parent is this store's own, and
233
+ * what that snapshot marks and holds (`pushed`), so recovering it loses no
234
+ * per-path digest.
235
+ */
236
+ markPushInFlight(apiUrl, userId, streamId, storeRoot, parentCheckpointId, pushed = {}) {
237
+ this.update((s) => {
238
+ const streams = this.account(s, apiUrl, userId).streams;
239
+ const key = vaultStreamKey(streamId, storeRoot);
240
+ const prior = streams[key];
241
+ streams[key] = {
242
+ ...prior,
243
+ lastCheckpointId: prior?.lastCheckpointId ?? null,
244
+ lastCoversSeq: prior?.lastCoversSeq ?? 0,
245
+ // Never synced: any fork is news to this store.
246
+ updatedAt: prior?.updatedAt ?? new Date(0).toISOString(),
247
+ pushInFlight: {
248
+ parentCheckpointId,
249
+ at: new Date().toISOString(),
250
+ ...(pushed.gitTracked !== undefined && pushed.gitTracked.length > 0
251
+ ? { gitTracked: [...pushed.gitTracked].sort() }
252
+ : {}),
253
+ ...(pushed.files !== undefined ? { files: { ...pushed.files } } : {}),
254
+ },
255
+ };
256
+ });
257
+ }
258
+ /** Record that `storeRoot` now holds `checkpointId` on `streamId`. */
259
+ saveStream(apiUrl, userId, streamId, storeRoot, value) {
260
+ const { gitTracked, files, ...rest } = value;
261
+ this.update((s) => {
262
+ // In the schema's key order, so a later read-modify-write keeps the bytes.
263
+ this.account(s, apiUrl, userId).streams[vaultStreamKey(streamId, storeRoot)] = {
264
+ ...rest,
265
+ updatedAt: new Date().toISOString(),
266
+ ...(gitTracked !== undefined && gitTracked.length > 0
267
+ ? { gitTracked: [...gitTracked].sort() }
268
+ : {}),
269
+ ...(files !== undefined ? { files: { ...files } } : {}),
270
+ };
271
+ });
272
+ }
273
+ }
274
+ //# sourceMappingURL=nexus-vault-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexus-vault-state.js","sourceRoot":"","sources":["../../src/cloud/nexus-vault-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * The cloud vault: encrypted snapshots of a project's (or this account's
3
+ * global) CLEO store on Cleo Nexus, with lineage, a single-writer lease and
4
+ * verified restore (T12336 protocol, T12337 CLI, T12338 lease handoff).
5
+ *
6
+ * A snapshot is a checkpoint on the store's journal stream (`project:<id>`,
7
+ * or the account's `home:<userId>`):
8
+ *
9
+ * - **Bundle**: the store's portable bundle (`exportPortableBundle`, no
10
+ * secrets; for the global store without machine-local state or the config
11
+ * home), sealed with the stream data key and uploaded as a blob. The data
12
+ * key derives from the account master key, which is escrowed on Cleo Nexus
13
+ * (released only to your approved devices; see `nexus-vault-keys.ts` for the
14
+ * threat model), so this is encrypted at rest, not zero-knowledge.
15
+ * - **Manifest** (plaintext): per-table row counts and keyed hashes of the
16
+ * store's syncing tables (`buildVaultManifest`). The server checks counts
17
+ * reconcile with the journal; only key holders can check hashes.
18
+ * - **Lineage**: each snapshot names its parent; the server refuses one that
19
+ * does not descend from the stream head (E_LINEAGE). The client refuses
20
+ * earlier, with `E_NEXUS_VAULT_BEHIND`, when the head is not the snapshot
21
+ * this store last pushed or restored: another device wrote since.
22
+ * - **Counts**: a non-genesis snapshot's counts must equal the parent's plus
23
+ * the per-table deltas of the journal segments between them. A push whose
24
+ * counts changed appends one signed "vault delta" segment carrying exactly
25
+ * the difference (the journal sync of Stage C will carry real ops).
26
+ * - **Lease**: a push takes the stream's `writer` lease. Another device's
27
+ * live lease refuses the push (`E_NEXUS_VAULT_LEASE_HELD`); `--force`
28
+ * takes it, and the server labels the take as a fork from the holder.
29
+ * - **Fork label**: a `--force` push over a head this store had not synced,
30
+ * or over another device's lease, carries `zz_vault_fork` (0 rows) in its
31
+ * signed manifest, so every device's verify still sees the fork after the
32
+ * lease is released (T13007).
33
+ * - **Stream format** (T13034): the vault writes checkpoint/v2 and stamps
34
+ * `SYNC_SCHEMA_VERSION` (shared with the change journal) on its segments
35
+ * and manifests. It reads and verifies the segment/v3 and checkpoint/v3 the
36
+ * journal writes, and refuses a push onto a stream whose head snapshot is
37
+ * checkpoint/v3 (the server's `E_STREAM_VERSION` ratchet) or that holds a
38
+ * newer sync schema before it writes anything
39
+ * (`E_NEXUS_VAULT_STREAM_UPGRADED`).
40
+ *
41
+ * Restore downloads, verifies the author's signature, decrypts, and checks
42
+ * every table's count and hash against the manifest before anything is
43
+ * placed; this machine's `local-only` rows are carried into the snapshot so
44
+ * machine state (replica binding, registry paths) is never overwritten, and
45
+ * what the snapshot no longer lists is removed afterwards (T13004).
46
+ *
47
+ * Nothing here blocks normal commands: the vault runs only when asked.
48
+ *
49
+ * @task T12336
50
+ * @task T12337
51
+ * @task T12338
52
+ * @epic T12322
53
+ */
54
+ import type { CloudLeaseReleaseResult, CloudPushResult, CloudRestoreResult, CloudVaultScope, CloudVaultStatusResult, CloudVerifyResult } from '@cleocode/contracts';
55
+ import { type NexusVaultOptions } from './nexus-vault-keys.js';
56
+ /** Default lease length of a push: long enough for a large upload, short enough to hand off. */
57
+ export declare const NEXUS_VAULT_LEASE_TTL_SECONDS = 900;
58
+ /**
59
+ * Global-home paths a vault snapshot never carries (T12968): this machine's
60
+ * identity and runtime state, and the content CLEO's installer writes for its
61
+ * own version (T13022: templates, harness skills, hooks, extensions, the
62
+ * model catalog, migration markers, the CleoOS hub extensions and identity,
63
+ * and the CANT starter bundle the CleoOS postinstall rewrites, T13038).
64
+ * A global pull must leave them as they are, so the bundle does not hold them
65
+ * at all. The config home is left out too.
66
+ */
67
+ export declare const VAULT_GLOBAL_EXCLUSIONS: {
68
+ readonly dirs: {
69
+ readonly state: "machine-local state (on macOS the replica registries live here); never in a vault snapshot";
70
+ readonly keys: "machine-local keys (evidence cache key); never in a vault snapshot";
71
+ readonly 'rate-limit-state': "machine-local rate-limit counters; never in a vault snapshot";
72
+ readonly templates: "installed by this machine's CLEO version (devices on other versions would downgrade it); never in a vault snapshot";
73
+ readonly skills: "installed by this machine's CLEO version (devices on other versions would downgrade it); never in a vault snapshot";
74
+ readonly hooks: "installed by this machine's CLEO version (devices on other versions would downgrade it); never in a vault snapshot";
75
+ readonly extensions: "installed by this machine's CLEO version (devices on other versions would downgrade it); never in a vault snapshot";
76
+ readonly 'pi-extensions': "installed by this machine's CLEO version (devices on other versions would downgrade it); never in a vault snapshot";
77
+ readonly 'llm-catalog': "installed by this machine's CLEO version (devices on other versions would downgrade it); never in a vault snapshot";
78
+ readonly '.migrations': "installed by this machine's CLEO version (devices on other versions would downgrade it); never in a vault snapshot";
79
+ readonly 'cant/starter': "installed by this machine's CLEO version (devices on other versions would downgrade it); never in a vault snapshot";
80
+ };
81
+ readonly files: {
82
+ readonly 'CLEOOS-IDENTITY.md': "installed by this machine's CLEO version (devices on other versions would downgrade it); never in a vault snapshot";
83
+ readonly 'device-id': "this machine's stable device id; never in a vault snapshot";
84
+ readonly 'web-server.json': "machine-local web server runtime state; never in a vault snapshot";
85
+ readonly 'sentient-state.json': "machine-local daemon state; never in a vault snapshot";
86
+ readonly 'device-heartbeat.stamp': "machine-local heartbeat; never in a vault snapshot";
87
+ readonly 'nexus.db': "machine-local code index (rebuilt per machine); never in a vault snapshot";
88
+ readonly 'exodus-complete': "machine-local migration marker; never in a vault snapshot";
89
+ readonly 'telemetry-config.json': "this install's telemetry opt-in and anonymous id; never in a vault snapshot";
90
+ readonly 'decide/spend.json': "this machine's decision spend ledger (in-flight reservations); never in a vault snapshot";
91
+ readonly 'decide/budget.json': "this machine's decision request token bucket; never in a vault snapshot";
92
+ };
93
+ };
94
+ /** Options shared by the vault commands. */
95
+ export interface NexusVaultCommandOptions extends NexusVaultOptions {
96
+ /** `project` (the current project, default) or `global` (this account's global store). */
97
+ scope?: CloudVaultScope;
98
+ }
99
+ /** Options of {@link restoreNexusVault}. */
100
+ export interface NexusVaultRestoreOptions extends NexusVaultCommandOptions {
101
+ /** `pull`: bring this store to the head; `restore`: any snapshot (`checkpointId`), or a project onto a new machine. */
102
+ mode: 'pull' | 'restore';
103
+ /** A specific snapshot (restore only). */
104
+ checkpointId?: string;
105
+ /** Overwrite local changes (a safety backup is taken first). */
106
+ force?: boolean;
107
+ /** Restore a project this machine does not have: its server id. */
108
+ projectId?: string;
109
+ /** Where to place a project restored onto this machine (default: the current directory). */
110
+ into?: string;
111
+ /** Called after a project restore to attach this store (defaults to `linkProjectToNexus`). */
112
+ relink?: (projectRoot: string) => Promise<string[]>;
113
+ }
114
+ /** Safety bundles kept per store under `backups/vault`; older ones are removed (T13007). */
115
+ export declare const NEXUS_VAULT_SAFETY_BUNDLES_KEPT = 10;
116
+ /**
117
+ * `cleo cloud push`: snapshot this store into the vault under the write lease.
118
+ *
119
+ * @param opts - Scope, `force` (take the lease, push over a newer head as a labelled fork),
120
+ * `hold` (keep the writer lease after the push instead of releasing it) and overrides.
121
+ * @returns What was pushed.
122
+ * @throws {NexusAccountError} `E_NEXUS_VAULT_LEASE_HELD`, `E_NEXUS_VAULT_BEHIND`, `E_NEXUS_VAULT_REFUSED`,
123
+ * `E_NEXUS_VAULT_STREAM_UPGRADED`, `E_NEXUS_VAULT_NOT_LINKED`, `E_NEXUS_VAULT_KEY_UNAVAILABLE`, or a
124
+ * mapped API error.
125
+ */
126
+ export declare function pushNexusVault(opts?: NexusVaultCommandOptions & {
127
+ force?: boolean;
128
+ hold?: boolean;
129
+ }): Promise<CloudPushResult>;
130
+ /**
131
+ * `cleo cloud pull` / `cleo cloud restore`: verify and activate a snapshot.
132
+ *
133
+ * @param opts - Mode, snapshot, project and target overrides.
134
+ * @returns What was restored.
135
+ * @throws {NexusAccountError} `E_NEXUS_VAULT_LOCAL_CHANGES`, `E_NEXUS_VAULT_VERIFY_FAILED`,
136
+ * `E_NEXUS_VAULT_EMPTY`, `E_NEXUS_VAULT_KEY_UNAVAILABLE`, or a mapped API error.
137
+ */
138
+ export declare function restoreNexusVault(opts: NexusVaultRestoreOptions): Promise<CloudRestoreResult>;
139
+ /**
140
+ * `cleo cloud vault`: the vault's lineage, last push per device, pending changes and leases.
141
+ *
142
+ * @param opts - Scope and overrides.
143
+ * @returns The vault status.
144
+ */
145
+ export declare function nexusVaultStatus(opts?: NexusVaultCommandOptions): Promise<CloudVaultStatusResult>;
146
+ /**
147
+ * `cleo cloud verify`: compare this store with the cloud and every device's newest snapshot.
148
+ *
149
+ * @param opts - Scope and overrides.
150
+ * @returns The verdict and per-table comparison.
151
+ */
152
+ export declare function verifyNexusVault(opts?: NexusVaultCommandOptions): Promise<CloudVerifyResult>;
153
+ /**
154
+ * `cleo cloud lease release`: hand the write lease back.
155
+ *
156
+ * @param opts - Scope and overrides.
157
+ * @returns Whether a lease was released.
158
+ */
159
+ export declare function releaseNexusVaultLease(opts?: NexusVaultCommandOptions): Promise<CloudLeaseReleaseResult>;
160
+ //# sourceMappingURL=nexus-vault.d.ts.map
@@ -0,0 +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"}