@camstack/system 1.2.389 → 1.2.391

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 (503) hide show
  1. package/dist/addon/addon-api-factory.d.ts +30 -30
  2. package/dist/addon-routes/addon-route-registry.d.ts +31 -31
  3. package/dist/addon-runner.js +1 -1
  4. package/dist/addon-runner.mjs +1 -1
  5. package/dist/addon-utils.d.ts +22 -22
  6. package/dist/auth/admin-token-manager.d.ts +37 -67
  7. package/dist/auth/api-key-manager.d.ts +8 -8
  8. package/dist/auth/auth-audit-log.d.ts +29 -49
  9. package/dist/auth/auth-manager.d.ts +127 -126
  10. package/dist/auth/cidr.d.ts +8 -8
  11. package/dist/auth/external-identity-manager.d.ts +46 -34
  12. package/dist/auth/jwt-signing-key.d.ts +14 -14
  13. package/dist/auth/login-session-manager.d.ts +95 -135
  14. package/dist/auth/parse-record.d.ts +13 -13
  15. package/dist/auth/scope-matcher.d.ts +7 -7
  16. package/dist/auth/scoped-token-manager.d.ts +62 -62
  17. package/dist/auth/token-expiry.d.ts +49 -26
  18. package/dist/auth/totp-manager.d.ts +48 -48
  19. package/dist/auth/user-management-internal.d.ts +67 -52
  20. package/dist/auth/user-manager.d.ts +58 -58
  21. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts +54 -54
  22. package/dist/builtins/addon-pages-aggregator/dedupe-pages.d.ts +22 -4
  23. package/dist/builtins/addon-pages-aggregator/index.d.ts +1 -1
  24. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts +54 -54
  25. package/dist/builtins/addon-widgets-aggregator/index.d.ts +1 -1
  26. package/dist/builtins/alerts/alerts.addon.d.ts +88 -87
  27. package/dist/builtins/alerts/device-label.d.ts +6 -6
  28. package/dist/builtins/alerts/index.d.ts +1 -1
  29. package/dist/builtins/alerts/prune-policy.d.ts +36 -36
  30. package/dist/builtins/autotrack/autotrack-cameras.d.ts +102 -79
  31. package/dist/builtins/autotrack/autotrack-config.d.ts +81 -81
  32. package/dist/builtins/autotrack/autotrack-decision.d.ts +69 -82
  33. package/dist/builtins/autotrack/autotrack-loop.d.ts +81 -61
  34. package/dist/builtins/autotrack/autotrack.addon.d.ts +103 -66
  35. package/dist/builtins/autotrack/frame-error.d.ts +38 -38
  36. package/dist/builtins/autotrack/frame-measurements.d.ts +79 -79
  37. package/dist/builtins/autotrack/index.d.ts +2 -2
  38. package/dist/builtins/autotrack/ptz-mirror.d.ts +46 -17
  39. package/dist/builtins/autotrack/target-selection.d.ts +33 -47
  40. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts +270 -269
  41. package/dist/builtins/backup-orchestrator/cron-helpers.d.ts +17 -17
  42. package/dist/builtins/backup-orchestrator/destination-policy.d.ts +99 -82
  43. package/dist/builtins/backup-orchestrator/download-helpers.d.ts +9 -9
  44. package/dist/builtins/backup-orchestrator/encryption-key-store.d.ts +40 -29
  45. package/dist/builtins/backup-orchestrator/index.d.ts +2 -2
  46. package/dist/builtins/backup-orchestrator/manifest-store.d.ts +88 -69
  47. package/dist/builtins/backup-orchestrator/restore-archive.d.ts +14 -14
  48. package/dist/builtins/backup-orchestrator/run-queue.d.ts +86 -86
  49. package/dist/builtins/backup-orchestrator/schedule-store.d.ts +53 -37
  50. package/dist/builtins/backup-orchestrator/staging-paths.d.ts +23 -23
  51. package/dist/builtins/backup-orchestrator/write-targets.d.ts +53 -53
  52. package/dist/builtins/calendars/calendar-color.d.ts +5 -1
  53. package/dist/builtins/calendars/calendar-prefs-store.d.ts +18 -12
  54. package/dist/builtins/calendars/calendars.addon.d.ts +16 -11
  55. package/dist/builtins/calendars/index.d.ts +1 -1
  56. package/dist/builtins/camera-grid/acquire-retry.d.ts +26 -26
  57. package/dist/builtins/camera-grid/addon.d.ts +200 -174
  58. package/dist/builtins/camera-grid/flv-join.d.ts +32 -58
  59. package/dist/builtins/camera-grid/grid-activity-mirror.d.ts +37 -37
  60. package/dist/builtins/camera-grid/grid-activity.d.ts +83 -42
  61. package/dist/builtins/camera-grid/grid-camera-declarations.d.ts +46 -46
  62. package/dist/builtins/camera-grid/grid-camera-device.d.ts +60 -34
  63. package/dist/builtins/camera-grid/grid-canvas-derivation.d.ts +50 -15
  64. package/dist/builtins/camera-grid/grid-canvas-seed.d.ts +96 -46
  65. package/dist/builtins/camera-grid/grid-canvas.d.ts +74 -74
  66. package/dist/builtins/camera-grid/grid-child.d.ts +29 -16
  67. package/dist/builtins/camera-grid/grid-compositor-child.d.ts +2 -2
  68. package/dist/builtins/camera-grid/grid-compositor-invocation.d.ts +39 -11
  69. package/dist/builtins/camera-grid/grid-compositor.d.ts +50 -50
  70. package/dist/builtins/camera-grid/grid-detection-mapping.d.ts +52 -22
  71. package/dist/builtins/camera-grid/grid-device-settings.d.ts +31 -7
  72. package/dist/builtins/camera-grid/grid-filter-graph.d.ts +41 -41
  73. package/dist/builtins/camera-grid/grid-frame-sample.d.ts +45 -19
  74. package/dist/builtins/camera-grid/grid-instances.d.ts +20 -50
  75. package/dist/builtins/camera-grid/grid-last-frame-store.d.ts +51 -51
  76. package/dist/builtins/camera-grid/grid-layout-native-provider.d.ts +30 -4
  77. package/dist/builtins/camera-grid/grid-plan.d.ts +30 -20
  78. package/dist/builtins/camera-grid/grid-profiles.d.ts +85 -45
  79. package/dist/builtins/camera-grid/grid-row-normalization.d.ts +6 -6
  80. package/dist/builtins/camera-grid/grid-sentry-sources.d.ts +57 -57
  81. package/dist/builtins/camera-grid/grid-snapshot.d.ts +41 -41
  82. package/dist/builtins/camera-grid/grid-stream-descriptor.d.ts +49 -21
  83. package/dist/builtins/camera-grid/grid-stream-invocation.d.ts +37 -22
  84. package/dist/builtins/camera-grid/grid-stream-relay.d.ts +26 -26
  85. package/dist/builtins/camera-grid/grid-stream-session.d.ts +123 -93
  86. package/dist/builtins/camera-grid/grid-tile-feed.d.ts +47 -47
  87. package/dist/builtins/camera-grid/grid-tile-plan.d.ts +55 -20
  88. package/dist/builtins/camera-grid/grid-wire-format.d.ts +22 -6
  89. package/dist/builtins/camera-grid/index.d.ts +44 -44
  90. package/dist/builtins/camera-grid/silence-analysis.d.ts +31 -14
  91. package/dist/builtins/composer/claim-gate.d.ts +54 -27
  92. package/dist/builtins/composer/composed-device-set.d.ts +40 -26
  93. package/dist/builtins/composer/composed-device.d.ts +39 -17
  94. package/dist/builtins/composer/composer-apply-waits.d.ts +20 -13
  95. package/dist/builtins/composer/composer-grafts.d.ts +57 -38
  96. package/dist/builtins/composer/composer-live-set.d.ts +15 -15
  97. package/dist/builtins/composer/composer-plan.d.ts +76 -60
  98. package/dist/builtins/composer/composer-runtime-factory.d.ts +21 -14
  99. package/dist/builtins/composer/composer-seeds.d.ts +20 -14
  100. package/dist/builtins/composer/composer-verdict.d.ts +28 -14
  101. package/dist/builtins/composer/composer.addon.d.ts +23 -9
  102. package/dist/builtins/composer/composer.d.ts +145 -100
  103. package/dist/builtins/composer/composition-declarations.d.ts +50 -39
  104. package/dist/builtins/composer/composition-evaluation.d.ts +38 -22
  105. package/dist/builtins/composer/composition-runtime.d.ts +178 -125
  106. package/dist/builtins/composer/composition-target.d.ts +38 -34
  107. package/dist/builtins/composer/confirmed-seed.d.ts +35 -23
  108. package/dist/builtins/composer/deadline-timer.d.ts +13 -13
  109. package/dist/builtins/composer/existing-target.d.ts +90 -73
  110. package/dist/builtins/composer/field-record.d.ts +26 -19
  111. package/dist/builtins/composer/graft-host.d.ts +56 -32
  112. package/dist/builtins/composer/held-claims.d.ts +26 -9
  113. package/dist/builtins/composer/index.d.ts +1 -1
  114. package/dist/builtins/composer/own-field-reads.d.ts +26 -15
  115. package/dist/builtins/composer/owned-fields-target.d.ts +75 -44
  116. package/dist/builtins/composer/slice-assembler.d.ts +19 -3
  117. package/dist/builtins/composer/source-readings.d.ts +67 -61
  118. package/dist/builtins/composer/source-tracker.d.ts +133 -69
  119. package/dist/builtins/console-logging/console-destination.d.ts +15 -8
  120. package/dist/builtins/console-logging/console-logging.addon.d.ts +20 -19
  121. package/dist/builtins/console-logging/index.d.ts +3 -3
  122. package/dist/builtins/core-blocks/block-package.d.ts +37 -37
  123. package/dist/builtins/core-blocks/block-settings-store.d.ts +34 -21
  124. package/dist/builtins/core-blocks/block-supervisor.d.ts +138 -117
  125. package/dist/builtins/core-blocks/block-type-defs.d.ts +21 -21
  126. package/dist/builtins/core-blocks/blocks-integration.d.ts +76 -49
  127. package/dist/builtins/core-blocks/compile-block.d.ts +37 -37
  128. package/dist/builtins/core-blocks/composition-api.d.ts +38 -24
  129. package/dist/builtins/core-blocks/composition-peers.d.ts +26 -4
  130. package/dist/builtins/core-blocks/composition-sources.d.ts +25 -10
  131. package/dist/builtins/core-blocks/core-block-store.d.ts +109 -109
  132. package/dist/builtins/core-blocks/core-blocks.addon.d.ts +72 -72
  133. package/dist/builtins/core-blocks/extract-settings-schema.d.ts +4 -4
  134. package/dist/builtins/core-blocks/index.d.ts +8 -8
  135. package/dist/builtins/device-manager/adoption-job-engine.d.ts +141 -98
  136. package/dist/builtins/device-manager/claimed-status-overlay.d.ts +42 -9
  137. package/dist/builtins/device-manager/contribution-cache.d.ts +56 -56
  138. package/dist/builtins/device-manager/day-night-config-schema.d.ts +26 -12
  139. package/dist/builtins/device-manager/device-aggregation-merge.d.ts +17 -17
  140. package/dist/builtins/device-manager/device-aggregation.d.ts +277 -254
  141. package/dist/builtins/device-manager/device-bindings-store.d.ts +232 -220
  142. package/dist/builtins/device-manager/device-config-contribution.d.ts +29 -29
  143. package/dist/builtins/device-manager/device-config-secrets.d.ts +32 -13
  144. package/dist/builtins/device-manager/device-event-propagator.d.ts +22 -22
  145. package/dist/builtins/device-manager/device-extension-linked-slot.d.ts +17 -17
  146. package/dist/builtins/device-manager/device-form-secrets.d.ts +14 -14
  147. package/dist/builtins/device-manager/device-linked-devices.d.ts +159 -98
  148. package/dist/builtins/device-manager/device-manager.addon.d.ts +223 -197
  149. package/dist/builtins/device-manager/device-meta-actions.d.ts +306 -305
  150. package/dist/builtins/device-manager/device-meta-store.d.ts +100 -90
  151. package/dist/builtins/device-manager/device-meta-types.d.ts +250 -241
  152. package/dist/builtins/device-manager/device-online-fallback.d.ts +30 -30
  153. package/dist/builtins/device-manager/device-projection.d.ts +53 -67
  154. package/dist/builtins/device-manager/device-provider-context.d.ts +109 -94
  155. package/dist/builtins/device-manager/device-queries.d.ts +63 -63
  156. package/dist/builtins/device-manager/device-row-store.d.ts +417 -365
  157. package/dist/builtins/device-manager/device-source-activation.d.ts +91 -49
  158. package/dist/builtins/device-manager/device-state-claim-views.d.ts +76 -61
  159. package/dist/builtins/device-manager/device-state-claims.d.ts +53 -30
  160. package/dist/builtins/device-manager/device-state-mirror.d.ts +256 -264
  161. package/dist/builtins/device-manager/device-sync-resolvers.d.ts +25 -25
  162. package/dist/builtins/device-manager/field-claims-index.d.ts +85 -58
  163. package/dist/builtins/device-manager/field-ownership.d.ts +54 -36
  164. package/dist/builtins/device-manager/fleet-read-census.d.ts +99 -61
  165. package/dist/builtins/device-manager/image-settings-config-schema.d.ts +18 -8
  166. package/dist/builtins/device-manager/index.d.ts +2 -2
  167. package/dist/builtins/device-manager/linked-devices-manual-backfill.d.ts +20 -9
  168. package/dist/builtins/device-manager/location-alignment.d.ts +46 -46
  169. package/dist/builtins/device-manager/migrate-device.d.ts +178 -101
  170. package/dist/builtins/device-manager/migrate-guard.d.ts +66 -34
  171. package/dist/builtins/device-manager/migrate-hardware-state.d.ts +59 -59
  172. package/dist/builtins/device-manager/migrate-reload.d.ts +42 -4
  173. package/dist/builtins/device-manager/migration-refused.d.ts +20 -20
  174. package/dist/builtins/device-manager/mirror-row-writer.d.ts +205 -179
  175. package/dist/builtins/device-manager/recording-onboard-config-schema.d.ts +56 -32
  176. package/dist/builtins/device-manager/removal-fence.d.ts +48 -48
  177. package/dist/builtins/device-manager/runtime-state-persist-gate.d.ts +54 -26
  178. package/dist/builtins/device-manager/secret-config-paths.d.ts +17 -17
  179. package/dist/builtins/device-manager/stale-wrapper-activations.d.ts +52 -25
  180. package/dist/builtins/device-manager/write-lock.d.ts +13 -13
  181. package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts +41 -41
  182. package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts +13 -12
  183. package/dist/builtins/hub-forwarder/index.d.ts +3 -3
  184. package/dist/builtins/keychain/index.d.ts +1 -1
  185. package/dist/builtins/keychain/key-sources.d.ts +19 -19
  186. package/dist/builtins/keychain/keychain-crypto.d.ts +4 -4
  187. package/dist/builtins/keychain/keychain-reset-trigger.d.ts +13 -13
  188. package/dist/builtins/keychain/keychain-service.d.ts +128 -128
  189. package/dist/builtins/keychain/keychain-store.d.ts +96 -87
  190. package/dist/builtins/keychain/keychain-usage.d.ts +13 -2
  191. package/dist/builtins/keychain/keychain.addon.d.ts +31 -6
  192. package/dist/builtins/keychain/platform-key-source.d.ts +15 -15
  193. package/dist/builtins/keychain/system-held-secrets.d.ts +17 -4
  194. package/dist/builtins/liveness-monitor/index.d.ts +2 -2
  195. package/dist/builtins/liveness-monitor/liveness-checks.d.ts +73 -52
  196. package/dist/builtins/liveness-monitor/liveness-monitor.addon.d.ts +57 -36
  197. package/dist/builtins/local-auth/admin-account-boot.d.ts +14 -14
  198. package/dist/builtins/local-auth/auth-config-reader.d.ts +34 -17
  199. package/dist/builtins/local-auth/auth-schema.d.ts +92 -69
  200. package/dist/builtins/local-auth/index.d.ts +1 -1
  201. package/dist/builtins/local-auth/jwt-signing-key-keeper.d.ts +22 -22
  202. package/dist/builtins/local-auth/local-auth.addon.d.ts +41 -40
  203. package/dist/builtins/local-auth/oauth-grants.d.ts +57 -57
  204. package/dist/builtins/local-auth/oauth-session-manager.d.ts +62 -62
  205. package/dist/builtins/local-network/address-book.d.ts +61 -36
  206. package/dist/builtins/local-network/index.d.ts +2 -2
  207. package/dist/builtins/local-network/ipv6-lan.d.ts +12 -17
  208. package/dist/builtins/local-network/local-hostname.d.ts +10 -10
  209. package/dist/builtins/local-network/local-network.addon.d.ts +259 -258
  210. package/dist/builtins/loki-logging/index.d.ts +4 -4
  211. package/dist/builtins/loki-logging/loki-destination.d.ts +113 -87
  212. package/dist/builtins/loki-logging/loki-logging.addon.d.ts +61 -42
  213. package/dist/builtins/loki-logging/loki-payload.d.ts +82 -39
  214. package/dist/builtins/loki-logging/retire-enabled-flag.d.ts +37 -12
  215. package/dist/builtins/native-metrics/cgroup-memory.d.ts +206 -159
  216. package/dist/builtins/native-metrics/cgroup-pids.d.ts +138 -91
  217. package/dist/builtins/native-metrics/container-memory-series.d.ts +212 -178
  218. package/dist/builtins/native-metrics/gpu-probe.d.ts +9 -9
  219. package/dist/builtins/native-metrics/index.d.ts +2 -2
  220. package/dist/builtins/native-metrics/load-series-config.d.ts +29 -57
  221. package/dist/builtins/native-metrics/load-series-reader.d.ts +52 -26
  222. package/dist/builtins/native-metrics/load-series-store.d.ts +237 -176
  223. package/dist/builtins/native-metrics/native-metrics-provider.d.ts +43 -43
  224. package/dist/builtins/native-metrics/native-metrics.addon.d.ts +230 -230
  225. package/dist/builtins/native-metrics/node-load-ring.d.ts +196 -196
  226. package/dist/builtins/native-metrics/proc-process-table.d.ts +12 -12
  227. package/dist/builtins/native-metrics/process-classification.d.ts +95 -36
  228. package/dist/builtins/native-metrics/thread-cpu-sampler.d.ts +95 -95
  229. package/dist/builtins/platform-probe/coral-accelerators.d.ts +17 -17
  230. package/dist/builtins/platform-probe/index.d.ts +38 -30
  231. package/dist/builtins/platform-probe/inference-config-resolver.d.ts +27 -27
  232. package/dist/builtins/platform-probe/intel-accelerators.d.ts +8 -8
  233. package/dist/builtins/platform-probe/intel-npu.d.ts +30 -30
  234. package/dist/builtins/platform-probe/platform-scorer.d.ts +35 -35
  235. package/dist/builtins/platform-probe/runtime-packages.d.ts +3 -3
  236. package/dist/builtins/remote-access-orchestrator/enabled-providers-reconcile.d.ts +87 -87
  237. package/dist/builtins/remote-access-orchestrator/index.d.ts +1 -1
  238. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts +66 -35
  239. package/dist/builtins/shared/device-state-changed.d.ts +9 -9
  240. package/dist/builtins/shared/settle-sources.d.ts +16 -16
  241. package/dist/builtins/snapshot/index.d.ts +2 -2
  242. package/dist/builtins/snapshot/snapshot-cache.d.ts +92 -92
  243. package/dist/builtins/snapshot/snapshot-coalescing.d.ts +108 -108
  244. package/dist/builtins/snapshot/snapshot-courtesy.d.ts +48 -48
  245. package/dist/builtins/snapshot/snapshot-durable-store.d.ts +32 -32
  246. package/dist/builtins/snapshot/snapshot-fatigue.d.ts +34 -34
  247. package/dist/builtins/snapshot/snapshot-grab-pick.d.ts +14 -14
  248. package/dist/builtins/snapshot/snapshot-link-url.d.ts +49 -49
  249. package/dist/builtins/snapshot/snapshot-media-handler.d.ts +97 -97
  250. package/dist/builtins/snapshot/snapshot-resize.d.ts +64 -103
  251. package/dist/builtins/snapshot/snapshot.addon.d.ts +569 -568
  252. package/dist/builtins/sqlite-storage/analyze-stats.d.ts +73 -29
  253. package/dist/builtins/sqlite-storage/config-store.d.ts +6 -6
  254. package/dist/builtins/sqlite-storage/device-store.d.ts +16 -16
  255. package/dist/builtins/sqlite-storage/filesystem-browse-provider.d.ts +23 -23
  256. package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts +79 -79
  257. package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts +27 -26
  258. package/dist/builtins/sqlite-storage/filter-compiler.d.ts +107 -107
  259. package/dist/builtins/sqlite-storage/index.d.ts +12 -12
  260. package/dist/builtins/sqlite-storage/integration-registry.d.ts +37 -37
  261. package/dist/builtins/sqlite-storage/path-guard.d.ts +5 -5
  262. package/dist/builtins/sqlite-storage/prefix-range.d.ts +44 -44
  263. package/dist/builtins/sqlite-storage/query-bounds.d.ts +100 -106
  264. package/dist/builtins/sqlite-storage/query-profiler.d.ts +217 -217
  265. package/dist/builtins/sqlite-storage/retired-collections.d.ts +124 -55
  266. package/dist/builtins/sqlite-storage/retired-settings-keys.d.ts +239 -189
  267. package/dist/builtins/sqlite-storage/shm-lock-canary.d.ts +41 -41
  268. package/dist/builtins/sqlite-storage/sqlite-pragmas.d.ts +162 -162
  269. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +458 -458
  270. package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +59 -58
  271. package/dist/builtins/sqlite-storage/sqlite-snapshot-protocol.d.ts +37 -32
  272. package/dist/builtins/sqlite-storage/sqlite-snapshot-worker.d.ts +19 -19
  273. package/dist/builtins/sqlite-storage/sqlite-snapshotter.d.ts +76 -76
  274. package/dist/builtins/sqlite-storage/statement-shape.d.ts +54 -54
  275. package/dist/builtins/sqlite-storage/table-sizes.d.ts +71 -71
  276. package/dist/builtins/sqlite-storage/vector-index-shared.d.ts +63 -54
  277. package/dist/builtins/sqlite-storage/vector-index-vec.d.ts +133 -96
  278. package/dist/builtins/sqlite-storage/wal-checkpoint-policy.d.ts +161 -161
  279. package/dist/builtins/sqlite-storage/wal-checkpointer.d.ts +60 -60
  280. package/dist/builtins/sqlite-storage/wal-maintenance.d.ts +94 -94
  281. package/dist/builtins/storage-orchestrator/access-guards.d.ts +37 -26
  282. package/dist/builtins/storage-orchestrator/data-store-dispatch.d.ts +33 -18
  283. package/dist/builtins/storage-orchestrator/drain-ratchet.d.ts +85 -85
  284. package/dist/builtins/storage-orchestrator/drain-state-store.d.ts +20 -10
  285. package/dist/builtins/storage-orchestrator/hub-settings-forward.d.ts +113 -53
  286. package/dist/builtins/storage-orchestrator/index.d.ts +7 -7
  287. package/dist/builtins/storage-orchestrator/location-occupancy-slice.d.ts +64 -40
  288. package/dist/builtins/storage-orchestrator/location-occupancy.d.ts +14 -14
  289. package/dist/builtins/storage-orchestrator/location-protection.d.ts +13 -13
  290. package/dist/builtins/storage-orchestrator/location-repoint-move.d.ts +44 -44
  291. package/dist/builtins/storage-orchestrator/location-root-collision.d.ts +61 -25
  292. package/dist/builtins/storage-orchestrator/location-secrets.d.ts +99 -58
  293. package/dist/builtins/storage-orchestrator/location-store.d.ts +56 -47
  294. package/dist/builtins/storage-orchestrator/location-volume-capacity.d.ts +37 -37
  295. package/dist/builtins/storage-orchestrator/provider-discovery.d.ts +20 -6
  296. package/dist/builtins/storage-orchestrator/storage-cleanup-coordinator.d.ts +51 -51
  297. package/dist/builtins/storage-orchestrator/storage-migration-coordinator.d.ts +224 -224
  298. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +292 -292
  299. package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts +431 -450
  300. package/dist/builtins/storage-orchestrator/storage-pressure-manager.d.ts +104 -104
  301. package/dist/builtins/system-backup/backup-encryption.d.ts +60 -23
  302. package/dist/builtins/system-backup/system-backup.service.d.ts +240 -240
  303. package/dist/builtins/system-config/cluster-secret-keeper.d.ts +54 -34
  304. package/dist/builtins/system-config/index.d.ts +2 -2
  305. package/dist/builtins/system-config/mesh-actions.d.ts +2 -30
  306. package/dist/builtins/system-config/system-config.addon.d.ts +57 -93
  307. package/dist/builtins/system-config/system-config.addon.js +46 -33
  308. package/dist/builtins/system-config/system-config.addon.mjs +46 -33
  309. package/dist/builtins/winston-logging/index.d.ts +3 -3
  310. package/dist/builtins/winston-logging/winston-destination.d.ts +15 -15
  311. package/dist/builtins/winston-logging/winston-logging.addon.d.ts +14 -13
  312. package/dist/{child-cap-dispatch-nURMuVTX.js → child-cap-dispatch-Bnr8brru.js} +18 -0
  313. package/dist/{child-cap-dispatch-B1gyE35b.mjs → child-cap-dispatch-mHO_6r0G.mjs} +1 -1
  314. package/dist/download/hosted-model-revisions.d.ts +8 -8
  315. package/dist/download/model-download-service.d.ts +32 -32
  316. package/dist/download/model-downloader.d.ts +88 -88
  317. package/dist/events/event-bus.d.ts +6 -6
  318. package/dist/events/system-event-bus.d.ts +11 -11
  319. package/dist/feature/feature-manager.d.ts +6 -6
  320. package/dist/http/asset-compression.d.ts +35 -73
  321. package/dist/http/authenticated-file-server.d.ts +32 -32
  322. package/dist/http/data-plane-registry.d.ts +49 -39
  323. package/dist/http/file-data-plane.d.ts +14 -14
  324. package/dist/http/lan-http-bind.d.ts +24 -13
  325. package/dist/http/reverse-proxy.d.ts +36 -24
  326. package/dist/index.d.ts +137 -137
  327. package/dist/index.js +4 -3
  328. package/dist/index.mjs +2 -4
  329. package/dist/kernel/addon-class-resolver.d.ts +1 -1
  330. package/dist/kernel/addon-engine-manager.d.ts +20 -20
  331. package/dist/kernel/addon-health-monitor.d.ts +151 -151
  332. package/dist/kernel/addon-installer.d.ts +609 -609
  333. package/dist/kernel/addon-loader.d.ts +133 -133
  334. package/dist/kernel/addon-manifest.d.ts +118 -118
  335. package/dist/kernel/addon-residue.d.ts +28 -32
  336. package/dist/kernel/array-buffer-census.d.ts +84 -88
  337. package/dist/kernel/bootstrap-config.d.ts +3 -3
  338. package/dist/kernel/cap-router-builder.d.ts +145 -101
  339. package/dist/kernel/capability-handle.d.ts +41 -41
  340. package/dist/kernel/capability-registry.d.ts +588 -576
  341. package/dist/kernel/config-manager.d.ts +199 -199
  342. package/dist/kernel/config-schema.d.ts +132 -128
  343. package/dist/kernel/custom-action-registry.d.ts +25 -25
  344. package/dist/kernel/deps/addon-deps-manager.d.ts +17 -17
  345. package/dist/kernel/deps/closure-dedupe.d.ts +76 -76
  346. package/dist/kernel/deps/ensure-addon-natives.d.ts +34 -34
  347. package/dist/kernel/deps/ensure-native-prebuilds.d.ts +25 -25
  348. package/dist/kernel/deps/manifest-native-deps.d.ts +38 -38
  349. package/dist/kernel/deps/manifest-python-deps.d.ts +18 -18
  350. package/dist/kernel/deps/manifest-system-deps.d.ts +13 -13
  351. package/dist/kernel/deps/npm-command.d.ts +45 -45
  352. package/dist/kernel/deps/system-package-allowlist.d.ts +9 -9
  353. package/dist/kernel/deps/system-package-broker.d.ts +20 -20
  354. package/dist/kernel/deps/system-package-client.d.ts +3 -3
  355. package/dist/kernel/device-registry.d.ts +27 -27
  356. package/dist/kernel/event-loop-stall-monitor.d.ts +33 -33
  357. package/dist/kernel/event-plane-report.d.ts +174 -174
  358. package/dist/kernel/fs-utils.d.ts +70 -70
  359. package/dist/kernel/gc-census.d.ts +119 -119
  360. package/dist/kernel/heap-spaces.d.ts +87 -87
  361. package/dist/kernel/heap-watch.d.ts +706 -706
  362. package/dist/kernel/host-externals.d.ts +8 -8
  363. package/dist/kernel/hwaccel/hwaccel-resolver.d.ts +27 -27
  364. package/dist/kernel/index.d.ts +115 -113
  365. package/dist/kernel/inference/inference-resolver.d.ts +13 -13
  366. package/dist/kernel/infra-capabilities.d.ts +7 -7
  367. package/dist/kernel/isolated-builtin-phase.d.ts +42 -42
  368. package/dist/kernel/lifecycle/job-journal.d.ts +17 -17
  369. package/dist/kernel/lifecycle/lifecycle-job-engine.d.ts +99 -99
  370. package/dist/kernel/lifecycle/staging-area.d.ts +22 -22
  371. package/dist/kernel/moleculer/addon-context-factory.d.ts +90 -89
  372. package/dist/kernel/moleculer/addon-data-plane-facility.d.ts +12 -12
  373. package/dist/kernel/moleculer/addon-deploy-source.d.ts +11 -11
  374. package/dist/kernel/moleculer/addon-peer-bytes-facility.d.ts +18 -18
  375. package/dist/kernel/moleculer/addon-service-factory.d.ts +41 -41
  376. package/dist/kernel/moleculer/agent-mesh-authenticator.d.ts +60 -33
  377. package/dist/kernel/moleculer/agent-ui-unlock.d.ts +30 -30
  378. package/dist/kernel/moleculer/broker-factory.d.ts +61 -61
  379. package/dist/kernel/moleculer/cap-usage-registry.d.ts +108 -153
  380. package/dist/kernel/moleculer/capabilities-access.d.ts +19 -19
  381. package/dist/kernel/moleculer/child-addon-call-dispatch.d.ts +43 -43
  382. package/dist/kernel/moleculer/child-cap-descriptors.d.ts +26 -26
  383. package/dist/kernel/moleculer/child-cap-dispatch.d.ts +52 -52
  384. package/dist/kernel/moleculer/children-batch-loader.d.ts +86 -34
  385. package/dist/kernel/moleculer/cluster-secret.d.ts +19 -19
  386. package/dist/kernel/moleculer/core-cap-service.d.ts +53 -53
  387. package/dist/kernel/moleculer/crash-supervisor.d.ts +39 -39
  388. package/dist/kernel/moleculer/device-cap-proxy.d.ts +51 -51
  389. package/dist/kernel/moleculer/device-event-ring.d.ts +117 -75
  390. package/dist/kernel/moleculer/event-bus-core.d.ts +171 -159
  391. package/dist/kernel/moleculer/event-bus.d.ts +73 -73
  392. package/dist/kernel/moleculer/hub-log-forwarder.d.ts +30 -30
  393. package/dist/kernel/moleculer/hub-service.d.ts +42 -42
  394. package/dist/kernel/moleculer/init-watchdog.d.ts +49 -49
  395. package/dist/kernel/moleculer/mesh-access-middleware.d.ts +36 -21
  396. package/dist/kernel/moleculer/mesh-auth-mode.d.ts +33 -39
  397. package/dist/kernel/moleculer/mesh-authenticator.d.ts +58 -58
  398. package/dist/kernel/moleculer/mesh-auto-enforce.d.ts +38 -18
  399. package/dist/kernel/moleculer/mesh-join-client.d.ts +67 -45
  400. package/dist/kernel/moleculer/mesh-join-proof.d.ts +8 -8
  401. package/dist/kernel/moleculer/mesh-mtls/constants.d.ts +1 -1
  402. package/dist/kernel/moleculer/mesh-mtls/index.d.ts +10 -10
  403. package/dist/kernel/moleculer/mesh-mtls/mesh-ca-keeper.d.ts +43 -38
  404. package/dist/kernel/moleculer/mesh-mtls/mesh-ca.d.ts +29 -20
  405. package/dist/kernel/moleculer/mesh-mtls/mesh-clear-port.d.ts +32 -32
  406. package/dist/kernel/moleculer/mesh-mtls/mesh-crl.d.ts +11 -11
  407. package/dist/kernel/moleculer/mesh-mtls/mesh-enroll.d.ts +19 -16
  408. package/dist/kernel/moleculer/mesh-mtls/mesh-join-token.d.ts +40 -40
  409. package/dist/kernel/moleculer/mesh-mtls/mesh-tls-enabler.d.ts +5 -1
  410. package/dist/kernel/moleculer/mesh-mtls/tls-tcp-transporter.d.ts +131 -130
  411. package/dist/kernel/moleculer/mesh-queue-report.d.ts +39 -39
  412. package/dist/kernel/moleculer/node-registry.d.ts +120 -120
  413. package/dist/kernel/moleculer/process-context.d.ts +2 -2
  414. package/dist/kernel/moleculer/process-service.d.ts +168 -168
  415. package/dist/kernel/moleculer/provider-registry.d.ts +9 -9
  416. package/dist/kernel/moleculer/readiness-context.d.ts +58 -58
  417. package/dist/kernel/moleculer/readiness-service.d.ts +31 -16
  418. package/dist/kernel/moleculer/register-framework-resolver.d.ts +6 -6
  419. package/dist/kernel/moleculer/register-node-client.d.ts +34 -27
  420. package/dist/kernel/moleculer/remote-logger.d.ts +29 -29
  421. package/dist/kernel/moleculer/resilient-cap-call.d.ts +21 -21
  422. package/dist/kernel/moleculer/runner-native-allocator.d.ts +95 -95
  423. package/dist/kernel/moleculer/runner-process-group.d.ts +57 -57
  424. package/dist/kernel/moleculer/runtime-state-load.d.ts +21 -11
  425. package/dist/kernel/moleculer/settings-read-guard.d.ts +39 -39
  426. package/dist/kernel/moleculer/stream-probe-service.d.ts +25 -6
  427. package/dist/kernel/moleculer/trpc-links.d.ts +203 -203
  428. package/dist/kernel/moleculer/typed-array-serde.d.ts +9 -20
  429. package/dist/kernel/moleculer/worker-device-restore.d.ts +8 -8
  430. package/dist/kernel/outbound-queue-watch.d.ts +74 -74
  431. package/dist/kernel/process-cpu-census.d.ts +55 -55
  432. package/dist/kernel/provider-kind-drift.d.ts +17 -8
  433. package/dist/kernel/restart-coordinator.d.ts +71 -71
  434. package/dist/kernel/settings-door-view.d.ts +36 -25
  435. package/dist/kernel/settings-read-error.d.ts +29 -31
  436. package/dist/kernel/settings-view-types.d.ts +100 -95
  437. package/dist/kernel/socket-plane-report.d.ts +214 -153
  438. package/dist/kernel/status-overlay.d.ts +31 -11
  439. package/dist/kernel/storage-location-registry.d.ts +50 -50
  440. package/dist/kernel/store-settings-view.d.ts +13 -13
  441. package/dist/kernel/system-settings-mirror.d.ts +40 -28
  442. package/dist/kernel/system-settings-policy.d.ts +15 -34
  443. package/dist/kernel/transport/cap-action-census.d.ts +183 -183
  444. package/dist/kernel/transport/cap-action-name.d.ts +84 -84
  445. package/dist/kernel/transport/cap-child-index.d.ts +41 -41
  446. package/dist/kernel/transport/cap-route-resolver.d.ts +237 -212
  447. package/dist/kernel/transport/cap-route.d.ts +139 -139
  448. package/dist/kernel/transport/cap-routing-hints.d.ts +37 -37
  449. package/dist/kernel/transport/child-cap-protocol.d.ts +245 -245
  450. package/dist/kernel/transport/claimed-get-status.d.ts +30 -6
  451. package/dist/kernel/transport/create-local-transport.d.ts +5 -5
  452. package/dist/kernel/transport/frame-codec.d.ts +109 -109
  453. package/dist/kernel/transport/hub-cap-forward.d.ts +81 -59
  454. package/dist/kernel/transport/index.d.ts +36 -36
  455. package/dist/kernel/transport/local-child-client.d.ts +184 -184
  456. package/dist/kernel/transport/local-child-registry.d.ts +592 -592
  457. package/dist/kernel/transport/local-endpoint-path.d.ts +4 -4
  458. package/dist/kernel/transport/local-transport.d.ts +92 -92
  459. package/dist/kernel/transport/parent-unowned-call.d.ts +266 -237
  460. package/dist/kernel/transport/peer-answered-error.d.ts +14 -14
  461. package/dist/kernel/transport/socket-channel.d.ts +110 -110
  462. package/dist/kernel/transport/socket-traffic.d.ts +96 -96
  463. package/dist/kernel/transport/uds-event-bridge.d.ts +77 -50
  464. package/dist/kernel/transport/uds-event-bus.d.ts +75 -26
  465. package/dist/kernel/transport/uds-local-transport.d.ts +14 -14
  466. package/dist/kernel/transport/uds-log-ingest.d.ts +38 -23
  467. package/dist/kernel/transport/uds-logger.d.ts +33 -33
  468. package/dist/kernel/utils/ring-buffer.d.ts +12 -12
  469. package/dist/kernel/workspace-detect.d.ts +7 -7
  470. package/dist/lifecycle/lifecycle-state-machine.d.ts +24 -24
  471. package/dist/logging/formatter.d.ts +52 -25
  472. package/dist/logging/log-manager.d.ts +133 -133
  473. package/dist/logging/log-redactor.d.ts +22 -1
  474. package/dist/logging/log-ring-buffer.d.ts +57 -57
  475. package/dist/logging/logging-gate.d.ts +69 -25
  476. package/dist/logging/logging-gate.singleton.d.ts +12 -1
  477. package/dist/logging/partitioned-log-buffer.d.ts +161 -161
  478. package/dist/logging/scoped-logger.d.ts +14 -14
  479. package/dist/network/network-quality.d.ts +8 -8
  480. package/dist/notification/notification-service.d.ts +37 -37
  481. package/dist/notification/toast-service.d.ts +18 -18
  482. package/dist/pipeline/engine-manager-resolver.d.ts +12 -12
  483. package/dist/pipeline/pipeline-runner.d.ts +6 -6
  484. package/dist/pipeline/pipeline-validator.d.ts +8 -8
  485. package/dist/process/proc-stat.d.ts +51 -51
  486. package/dist/process/resource-monitor.d.ts +19 -19
  487. package/dist/python/python-env-manager.d.ts +10 -10
  488. package/dist/repl/interfaces.d.ts +21 -21
  489. package/dist/repl/repl-engine.d.ts +6 -6
  490. package/dist/storage/fs-storage-backend.d.ts +35 -35
  491. package/dist/storage/storage-location-manager.d.ts +21 -21
  492. package/dist/storage/storage-manager.d.ts +68 -68
  493. package/dist/tls/boot-tls.d.ts +24 -24
  494. package/dist/tls/cert-evaluation.d.ts +25 -25
  495. package/dist/tls/cert-identity.d.ts +39 -39
  496. package/dist/tls/cert-issue.d.ts +37 -17
  497. package/dist/tls/cert-manager.d.ts +86 -84
  498. package/dist/tls/https-listener.d.ts +16 -16
  499. package/dist/tls/index.d.ts +8 -8
  500. package/dist/tls/tls-actions.d.ts +18 -18
  501. package/dist/tls/tls-status.d.ts +15 -15
  502. package/dist/tls/uploaded-cert.d.ts +9 -9
  503. package/package.json +9 -3
@@ -1,469 +1,450 @@
1
- import { IScopedLogger, IStorageProviderImpl, StorageAccess, StorageLocation, StorageLocationDeclaration, StorageLocationRef } from '@camstack/types';
2
- import { ResolveRoot } from './location-root-collision.js';
3
- import { ILocationStore } from './location-store.js';
1
+ import type { IScopedLogger, IStorageProviderImpl, StorageAccess, StorageLocation, StorageLocationDeclaration, StorageLocationRef } from "@camstack/types";
2
+ import type { ResolveRoot } from "./location-root-collision.js";
3
+ import type { ILocationStore } from "./location-store.js";
4
4
  export interface ListLocationsFilter {
5
- readonly type?: string;
5
+ readonly type?: string;
6
6
  }
7
7
  /**
8
- * Minimal structural shape the orchestrator needs from the kernel's
9
- * `StorageLocationRegistry` — the cardinality lookup plus the full
10
- * declaration list (the admin-UI Data screen renders one group per
11
- * declaration). Declared locally so core's builtins don't import the
12
- * kernel's registry type directly; the addon passes the real
13
- * `buildStorageLocationRegistry(...)` result, which structurally
14
- * satisfies this interface.
15
- */
8
+ * Minimal structural shape the orchestrator needs from the kernel's
9
+ * `StorageLocationRegistry` — the cardinality lookup plus the full
10
+ * declaration list (the admin-UI Data screen renders one group per
11
+ * declaration). Declared locally so core's builtins don't import the
12
+ * kernel's registry type directly; the addon passes the real
13
+ * `buildStorageLocationRegistry(...)` result, which structurally
14
+ * satisfies this interface.
15
+ */
16
16
  export interface DeclarationSource {
17
- cardinalityOf(id: string): 'single' | 'multi' | null;
18
- /**
19
- * Effective {@link StorageAccess} of a declared location kind — the
20
- * constraint that decides which providers may back it. `null` = the kind
21
- * was never declared. See `upsertLocation`'s remote-provider refusal.
22
- */
23
- accessOf(id: string): StorageAccess | null;
24
- list(): readonly StorageLocationDeclaration[];
17
+ cardinalityOf(id: string): "single" | "multi" | null;
18
+ /**
19
+ * Effective {@link StorageAccess} of a declared location kind — the
20
+ * constraint that decides which providers may back it. `null` = the kind
21
+ * was never declared. See `upsertLocation`'s remote-provider refusal.
22
+ */
23
+ accessOf(id: string): StorageAccess | null;
24
+ list(): readonly StorageLocationDeclaration[];
25
25
  }
26
26
  /**
27
- * Provider lookup callback. Returns the live set of `storage-provider`
28
- * registrants. Called per-dispatch (cheap registry scan) so newly
29
- * loaded addons surface immediately.
30
- */
27
+ * Provider lookup callback. Returns the live set of `storage-provider`
28
+ * registrants. Called per-dispatch (cheap registry scan) so newly
29
+ * loaded addons surface immediately.
30
+ */
31
31
  export type StorageProviderLookup = () => readonly IStorageProviderImpl[];
32
32
  /**
33
- * Synchronous `providerId → nodeLocal` resolver, injected by the addon
34
- * from a cached snapshot of `storage-provider.getProviderInfo()` (the
35
- * `getProviderInfo` round-trip is async, so a sync cache keeps
36
- * `upsertLocation` synchronous — the contract its many callers rely on).
37
- *
38
- * Returns:
39
- * - `true` — node-local provider (filesystem): its locations bind to a
40
- * single node, so a `nodeId` is required.
41
- * - `false` — node-agnostic provider (S3/SFTP/WebDAV): `nodeId` optional.
42
- * - `undefined` — provider not (yet) known. Treated as non-node-local:
43
- * validation does not reject (the provider may register later / be
44
- * remote), the safe default for the early-boot / in-memory path.
45
- */
33
+ * Synchronous `providerId → nodeLocal` resolver, injected by the addon
34
+ * from a cached snapshot of `storage-provider.getProviderInfo()` (the
35
+ * `getProviderInfo` round-trip is async, so a sync cache keeps
36
+ * `upsertLocation` synchronous — the contract its many callers rely on).
37
+ *
38
+ * Returns:
39
+ * - `true` — node-local provider (filesystem): its locations bind to a
40
+ * single node, so a `nodeId` is required.
41
+ * - `false` — node-agnostic provider (S3/SFTP/WebDAV): `nodeId` optional.
42
+ * - `undefined` — provider not (yet) known. Treated as non-node-local:
43
+ * validation does not reject (the provider may register later / be
44
+ * remote), the safe default for the early-boot / in-memory path.
45
+ */
46
46
  export type NodeLocalResolver = (providerId: string) => boolean | undefined;
47
47
  /**
48
- * Whether a location still holds anything — the only question `deleteLocation`
49
- * is allowed to destroy a record on the answer to.
50
- *
51
- * - `'occupied'` — something is there. Deleting the record now strands it.
52
- * - `'empty'` — the location was reached and holds nothing.
53
- * - `'unknown'` — it could not be reached at all: a remote provider, another
54
- * node's disk, an unmounted root. NOT "empty". A read that
55
- * fails must never authorise a destruction (D49).
56
- */
57
- export type LocationOccupancy = 'occupied' | 'empty' | 'unknown';
48
+ * Whether a location still holds anything — the only question `deleteLocation`
49
+ * is allowed to destroy a record on the answer to.
50
+ *
51
+ * - `'occupied'` — something is there. Deleting the record now strands it.
52
+ * - `'empty'` — the location was reached and holds nothing.
53
+ * - `'unknown'` — it could not be reached at all: a remote provider, another
54
+ * node's disk, an unmounted root. NOT "empty". A read that
55
+ * fails must never authorise a destruction (D49).
56
+ */
57
+ export type LocationOccupancy = "occupied" | "empty" | "unknown";
58
58
  export type LocationOccupancyProbe = (location: StorageLocation) => Promise<LocationOccupancy>;
59
59
  export interface DeleteLocationOptions {
60
- /** Override an `occupied` or `unknown` verdict. See the cap docblock. */
61
- readonly force?: boolean;
60
+ /** Override an `occupied` or `unknown` verdict. See the cap docblock. */
61
+ readonly force?: boolean;
62
62
  }
63
63
  /**
64
- * Where a single dispatch must execute: which `storage-provider`, on which
65
- * node. `providerId` alone is NOT a routing key — every node's filesystem
66
- * provider registers under the same id, so a target without its `nodeId`
67
- * silently resolves to whichever node asked (the hub).
68
- *
69
- * `nodeId` absent = node-agnostic (S3/SFTP/WebDAV): reachable from anywhere,
70
- * so the local provider runs it.
71
- */
64
+ * Where a single dispatch must execute: which `storage-provider`, on which
65
+ * node. `providerId` alone is NOT a routing key — every node's filesystem
66
+ * provider registers under the same id, so a target without its `nodeId`
67
+ * silently resolves to whichever node asked (the hub).
68
+ *
69
+ * `nodeId` absent = node-agnostic (S3/SFTP/WebDAV): reachable from anywhere,
70
+ * so the local provider runs it.
71
+ */
72
72
  export interface StorageDispatchTarget {
73
- readonly providerId: string;
74
- readonly nodeId?: string;
73
+ readonly providerId: string;
74
+ readonly nodeId?: string;
75
75
  }
76
76
  /** The two chunked-I/O session families the orchestrator tracks. */
77
- export type StorageSessionKind = 'upload' | 'download';
77
+ export type StorageSessionKind = "upload" | "download";
78
78
  export declare class StorageOrchestratorService {
79
- private readonly logger;
80
- private readonly getProviders;
81
- /**
82
- * Optional persistence backend. When supplied, `initialize()`
83
- * hydrates the in-memory map from the store, and every mutation
84
- * (upsert/delete) mirrors to it. When `null` / `undefined`, the
85
- * service is in-memory only — the contract used by the existing
86
- * routing tests, where re-creating the service deliberately
87
- * forgets every location.
88
- *
89
- * Mutable because production boot wires it late: the `settings-store`
90
- * cap often isn't registered when the orchestrator initializes, so the
91
- * service starts store-less and the addon calls {@link attachStore} once
92
- * the provider appears. See {@link attachStore}.
93
- */
94
- private locationStore;
95
- /** Cross-node provider resolver (hub wiring: a node-routed capability
96
- * proxy over `storage-provider`). Absent → remote locations error. */
97
- private readonly getRemoteProvider?;
98
- private readonly locations;
99
- /**
100
- * Declaration-driven cardinality source, injected by the addon after
101
- * the kernel aggregates `storageLocations` declarations. `null` until
102
- * `setRegistry` runs — `upsertLocation` then treats every type as
103
- * `'multi'` (no singleton enforcement), the safe default for the
104
- * in-memory-only / early-boot path.
105
- */
106
- private registry;
107
- /**
108
- * Injected `providerId → nodeLocal` resolver (see {@link NodeLocalResolver}).
109
- * `null` until {@link setNodeLocalResolver} runs — `upsertLocation` then
110
- * skips the node-local requirement check entirely (every provider is
111
- * treated as node-agnostic), the safe default for the in-memory-only /
112
- * early-boot path that predates the resolver wiring.
113
- */
114
- private nodeLocalResolver;
115
- /**
116
- * Injected occupancy probe (see {@link LocationOccupancyProbe}). `null` until
117
- * {@link setOccupancyProbe} runs, and a `null` probe answers `unknown` — so a
118
- * service with no probe REFUSES an unforced delete rather than performing one
119
- * it could not check. The check is the point; a check that defaults to
120
- * "permit" is a paragraph, not a guard.
121
- */
122
- private occupancyProbe;
123
- /** `localNodeId` with any forked-child `/addon` suffix stripped. */
124
- private readonly localNode;
125
- /**
126
- * `<kind>:<sessionId>` → the dispatch target that OPENED the session.
127
- * Chunked I/O carries no `StorageLocation` after the first hop, so without
128
- * this the follow-up chunks fall back to a `providerId`-only lookup — which
129
- * on a multi-node cluster means the hub's filesystem, not the agent's.
130
- */
131
- private readonly sessionTargets;
132
- constructor(logger: IScopedLogger, getProviders: StorageProviderLookup,
133
- /**
134
- * Optional persistence backend. When supplied, `initialize()`
135
- * hydrates the in-memory map from the store, and every mutation
136
- * (upsert/delete) mirrors to it. When `null` / `undefined`, the
137
- * service is in-memory only — the contract used by the existing
138
- * routing tests, where re-creating the service deliberately
139
- * forgets every location.
140
- *
141
- * Mutable because production boot wires it late: the `settings-store`
142
- * cap often isn't registered when the orchestrator initializes, so the
143
- * service starts store-less and the addon calls {@link attachStore} once
144
- * the provider appears. See {@link attachStore}.
145
- */
146
- locationStore?: ILocationStore | null,
147
- /** This node's id — locations pinned to OTHER nodes dispatch remotely. */
148
- localNodeId?: string,
149
- /** Cross-node provider resolver (hub wiring: a node-routed capability
150
- * proxy over `storage-provider`). Absent → remote locations error. */
151
- getRemoteProvider?: ((nodeId: string) => IStorageProviderImpl | null) | undefined);
152
- /**
153
- * The node this orchestrator runs on, with any forked-child `/addon`
154
- * suffix stripped. A location whose `nodeId` differs is NOT this node's
155
- * to touch — its bytes, and its free space, live elsewhere.
156
- */
157
- getLocalNodeId(): string;
158
- /** True once a persistence store is wired (constructor or {@link attachStore}). */
159
- hasStore(): boolean;
160
- /**
161
- * Late-bind the persistence store (production boot: the `settings-store`
162
- * cap registers after the orchestrator initializes, so the service runs
163
- * in-memory-only until then). Idempotent — a second call once a store is
164
- * wired is a no-op.
165
- *
166
- * Reconciles both directions so operator edits survive a reboot:
167
- * 1. hydrate — DB rows win over any early in-memory seed (restores
168
- * operator config like `minFreePercent` that the pre-store boot
169
- * can't see);
170
- * 2. backfill — in-memory locations the DB doesn't have yet (the
171
- * pre-store seed defaults on a fresh install) are persisted, so the
172
- * store becomes the durable source of truth from here on.
173
- *
174
- * **The re-entry guard latches on a SUCCESSFUL hydrate, not on the attempt** —
175
- * `loadAll()` is awaited BEFORE `this.locationStore` is assigned, and the
176
- * order is load-bearing. Latching first meant one transient read error
177
- * answered `hasStore()` true forever, so the addon's `ensureStoreWired` gate
178
- * skipped every retry; the service then ran the whole process lifetime on
179
- * pre-store seed defaults while `upsert` mirrored them onto rows it had never
180
- * read, silently replacing the operator's persisted `minFreePercent`. Failing
181
- * back to store-less is the safe direction: an in-memory-only service writes
182
- * nothing over what is on disk, and the next `capability:provider-registered`
183
- * event tries again. Held by
184
- * `__tests__/storage-orchestrator-persistence.spec.ts`.
185
- */
186
- attachStore(store: ILocationStore): Promise<void>;
187
- /**
188
- * ONE explicit migration onto the four-state model (D385), run once per boot
189
- * against the rows that came off disk. Idempotent: the second boot finds
190
- * nothing to do.
191
- *
192
- * Two steps, in order, and each one is a WRITE — the point is that "absent"
193
- * stops existing rather than being re-interpreted on every read forever:
194
- *
195
- * 1. A row with no `mode` is stamped with the mode its legacy flags imply
196
- * (`legacyModeOf`): `config.readOnly === true` → `readonly` and the
197
- * config key is DELETED; `enabled === false` → `readonly` (the
198
- * CONSERVATIVE direction — a state change must never start deleting
199
- * footage on its own); everything else → `active`. `withLocationMode`
200
- * derives `enabled` from the mode, so the two can never disagree, and
201
- * this subsumes the D383 pass that stamped flagless rows `enabled: true`.
202
- * 2. A type left with NO write target — only reachable from a hand-edited
203
- * store or a row an older build wrote — gets one made `active`, chosen as
204
- * the row the RETIRED default flag named, else the `:default`-slugged
205
- * row, else the lexicographically first. Loudly: a class with no write
206
- * target records nowhere, and refusing to repair it here would leave the
207
- * hub silently unable to write with no operator action pending.
208
- *
209
- * An operator's explicit `readonly`/`drain`/`disabled` is never reversed by
210
- * step 1 — only step 2 touches it, and only when the alternative is a class
211
- * that cannot write at all.
212
- *
213
- * On the live hub every location is enabled with no `readOnly`, so step 1 is
214
- * a no-op that stamps `active` and nothing else changes.
215
- */
216
- private migrateOntoTheWriteSet;
217
- /** Apply one migrated row in memory and mirror it to the store. */
218
- private persistMigrated;
219
- /**
220
- * Inject the declaration-driven cardinality source. Called once by the
221
- * addon after the kernel aggregates every addon's `storageLocations`
222
- * declarations into a `StorageLocationRegistry`.
223
- */
224
- setRegistry(registry: DeclarationSource | null): void;
225
- /**
226
- * Inject the synchronous `providerId → nodeLocal` resolver (SP1). Called
227
- * by the addon from a cached snapshot of every `storage-provider`'s
228
- * `getProviderInfo().nodeLocal`, refreshed when the provider collection
229
- * changes. Powers the node-local upsert guard and the boot backfill.
230
- */
231
- setNodeLocalResolver(resolver: NodeLocalResolver | null): void;
232
- /**
233
- * Inject the "does this location still hold anything" probe read by
234
- * {@link deleteLocation}. Absent → every delete sees `unknown` and therefore
235
- * REFUSES without `force`, which is the safe direction for a service wired
236
- * without one.
237
- */
238
- setOccupancyProbe(probe: LocationOccupancyProbe | null): void;
239
- /**
240
- * The full set of addon-declared storage locations, as aggregated by
241
- * the kernel and injected via {@link setRegistry}. Powers the admin-UI
242
- * Data screen's per-declaration grouping. Empty until the registry is
243
- * injected (early-boot / in-memory-only path).
244
- */
245
- listDeclarations(): readonly StorageLocationDeclaration[];
246
- /**
247
- * Hydrate the in-memory map from the persistence layer. Called once
248
- * by the addon during `onInitialize`, before the eager seed pass.
249
- * Idempotent — running it twice with the same store contents
250
- * produces the same map. No-op when the service was constructed
251
- * without a store.
252
- *
253
- * Errors loading individual rows are tolerated: the bad row is
254
- * skipped and logged so a single corrupted record doesn't lock the
255
- * whole orchestrator out of boot. (The store-side validation pass
256
- * before insert means only schema-invalid SQL state can produce
257
- * such a row.)
258
- */
259
- initialize(): Promise<void>;
260
- /**
261
- * Boot backfill (SP1): stamp `nodeId` on every persisted node-local
262
- * location that lacks one. Single-node deployments seeded their
263
- * filesystem locations before `nodeId` existed — they live on `hubNodeId`
264
- * (the hub). Node-agnostic (remote) locations are left untouched: their
265
- * absent `nodeId` is correct (reachable from any node).
266
- *
267
- * Idempotent — a location that already carries a `nodeId` (any value) is
268
- * never re-touched, so re-running on a populated map (or a re-boot) is a
269
- * no-op. A plain local update, not versioned-migration machinery: only
270
- * the rows missing `nodeId` are mutated + persisted.
271
- *
272
- * No-op until the node-local resolver is wired (it classifies which
273
- * providers are node-local).
274
- */
275
- backfillNodeIds(hubNodeId: string): Promise<void>;
276
- listLocations(filter?: ListLocationsFilter): readonly StorageLocation[];
277
- /**
278
- * The WRITE SET of a type: every enabled location of it, in stable id order.
279
- * This replaced `getDefaultLocation` (D383) — a type does not have one write
280
- * target any more, it has a pool, and every consumer that must pick one picks
281
- * from here by its own rule (the recorder by headroom, a drain by an operator
282
- * -named destination).
283
- */
284
- writeTargets(type: string): readonly StorageLocation[];
285
- /**
286
- * Change the WRITE SET as one compensated commit: each named location is
287
- * enabled (it joins the pool) or disabled (it becomes read-only — still read,
288
- * still played back, still age-swept, still drained).
289
- *
290
- * This is the cutover verb, and its only caller is the migration coordinator,
291
- * which persists its `repointing` phase BEFORE calling so a crash mid-write
292
- * is recovered by replaying the same idempotent set before writers resume.
293
- *
294
- * It moves ONLY the locations it is given: a cutover from A to C on a class
295
- * that also writes to B leaves B in the pool, because the operator's pool is
296
- * the authority and a migration is not a licence to shrink it. The commit is
297
- * refused when it would leave a write-serving type with nothing enabled —
298
- * the same refusal `upsertLocation` applies, judged on the RESULT so an
299
- * enable and a disable in one commit are weighed together.
300
- */
301
- setWriteTargets(enabledByLocationId: ReadonlyMap<string, boolean>): Promise<void>;
302
- /**
303
- * Insert or update a location.
304
- *
305
- * When a persistence store is wired (Task 6), the record is mirrored to it;
306
- * the mirror is fire-and-forget and its errors reach the logger.
307
- */
308
- /**
309
- * Refuse a `(location kind, provider)` pair the kind cannot use.
310
- *
311
- * The rule, in one line: a `'local-path'` kind requires a provider whose
312
- * `getProviderInfo().nodeLocal` is `true`.
313
- *
314
- * `nodeLocal` is the honest name for "this provider's `resolve` returns a
315
- * path on the filesystem of the node that resolved it". The
316
- * `storage-provider` cap's own discriminated union already forces every
317
- * provider to declare it, and all four remote providers declare `false`, so
318
- * no new cap surface is needed to ask the question.
319
- *
320
- * Three-valued on purpose. Only a POSITIVE `false` refuses:
321
- * - `true` → node-local, always fine.
322
- * - `false` → the provider is known and known to be remote. REFUSE.
323
- * - `undefined` → the provider has not registered yet (early boot, an addon
324
- * still loading). That is "unknown", not "remote", and a read that could
325
- * not be made must never destroy work (D49) — the system seed runs
326
- * through this path before any provider registers. Allowed, and logged,
327
- * so the allowance is never silent.
328
- *
329
- * The DECLARATION side is read the same way. A kind the registry does not
330
- * know is `local-path` (fail-closed: an unknown kind is not a permissive
331
- * one), but NO REGISTRY AT ALL is a different statement — nothing has been
332
- * loaded, so nothing can be concluded about any kind. The addon injects the
333
- * registry inside `onInitialize`, before the `storage` cap is mounted, so
334
- * there is no window in which an operator upsert sees this branch; a service
335
- * constructed without one is the in-memory/early-boot path.
336
- */
337
- private refuseIncompatibleProvider;
338
- upsertLocation(input: Omit<StorageLocation, 'createdAt' | 'updatedAt'>): StorageLocation;
339
- /**
340
- * Remove a location. Refuses the last location of a type and the last
341
- * enabled location of a type. `isSystem` is informational — a frozen
342
- * recordings `:default` is deletable once a sibling is live. Occupancy still
343
- * refuses unless `force` is set; force never overrides uniqueness /
344
- * last-enabled.
345
- */
346
- deleteLocation(id: string, options?: DeleteLocationOptions): Promise<void>;
347
- /**
348
- * Run the injected occupancy probe, converting "no probe" and "the probe
349
- * threw" into `unknown` rather than into a permit.
350
- */
351
- private probeOccupancy;
352
- /**
353
- * Remove seed-shaped locations (`<type>:default`) whose type is no longer
354
- * declared by any addon (stale defaults from a removed location type).
355
- * Operator-added locations of an undeclared type are KEPT but warned.
356
- *
357
- * FAIL-SAFE: if the registry is EMPTY (no addon declared any location), we
358
- * refuse to prune anything. An empty registry almost always means
359
- * declarations failed to load (boot ordering, a stale install) — pruning
360
- * "everything undeclared" in that state would wipe every seeded location
361
- * (data/logs/recordings/…). Better to keep stale rows than destroy live ones.
362
- */
363
- pruneUndeclaredSystemLocations(): void;
364
- /**
365
- * Resolve a `StorageLocationRef` to a concrete `StorageLocation`.
366
- * - bare type (e.g. `'backups'`) → default location of that type
367
- * - fully-qualified id (e.g. `'backups:nas-01'`) → that exact instance
368
- *
369
- * Throws an actionable error when nothing matches — every consumer of
370
- * the singleton `storage` cap funnels through here, so the error
371
- * message is what operators see when the orchestrator's view of the
372
- * world doesn't match expectations.
373
- */
374
- resolveRef(ref: StorageLocationRef): StorageLocation;
375
- /**
376
- * Find the storage-provider that backs a given location — the entry point
377
- * every consumer-facing `storage` cap method funnels through.
378
- *
379
- * Routing key is `(providerId, nodeId)`, never `providerId` alone: every
380
- * node's FilesystemStorageProvider registers under the SAME providerId, so
381
- * a providerId-only match resolves to whichever node asked. That is how a
382
- * location created on an agent ended up writing to the HUB's filesystem
383
- * (root-caused 2026-07-29).
384
- */
385
- getProviderFor(location: StorageLocation): Promise<IStorageProviderImpl>;
386
- /**
387
- * Resolve one dispatch target to the provider that must execute it.
388
- *
389
- * `descriptor` is the operator-facing subject of the error message
390
- * (`location "recordings:disk"`, `uploadId "u-42"`); `locationId` is the
391
- * structured tag for the log line when there is a location behind the
392
- * dispatch (chunked sessions carry only the session id).
393
- *
394
- * Both failure branches LOG before throwing, and NEITHER falls back to the
395
- * local provider — a silent fallback is the bug this method exists to fix.
396
- */
397
- private getProviderForTarget;
398
- /**
399
- * Remember which provider — and on which NODE — opened a chunked session.
400
- * `beginUpload` / `beginDownload` carry a `StorageLocation`; every later
401
- * chunk carries only the session id, and a session id issued by an agent
402
- * means nothing to the hub's provider.
403
- */
404
- rememberSession(kind: StorageSessionKind, sessionId: string, location: StorageLocation): void;
405
- /** Drop a session's routing entry (finalize / abort / end). */
406
- forgetSession(kind: StorageSessionKind, sessionId: string): void;
407
- /** Drop every session entry (addon shutdown). */
408
- clearSessions(): void;
409
- /**
410
- * Resolve the provider that owns an in-flight chunked session, on the node
411
- * that opened it. Throws when the orchestrator has no record of the open
412
- * call (provider gone, or a chunk for a session it never issued).
413
- */
414
- getProviderForSession(kind: StorageSessionKind, sessionId: string): Promise<IStorageProviderImpl>;
415
- /** Convenience: lookup by id (returns `undefined` if not found). */
416
- getLocationById(id: string): StorageLocation | undefined;
417
- /**
418
- * Seed one default `StorageLocation` per addon-declared location that
419
- * doesn't already have one. Idempotent — re-running with the same
420
- * declarations on a populated map is a no-op (each declared `id`
421
- * already resolves to an existing `<id>:default`).
422
- *
423
- * The seeded row is born ENABLED — a fresh install must be able to write the
424
- * moment it boots, and `enabled` is the only write switch there is (D383).
425
- * The `:default` suffix is a NAME kept for idempotency across existing
426
- * installs, not a flag: the stored `id` is `'recordings:default'` so it
427
- * satisfies the
428
- * `^[a-z][a-z0-9-]*:[a-z0-9-]+$` regex on `StorageLocationSchema.id`.
429
- *
430
- * `basePath` is the storage root (e.g. `<CAMSTACK_DATA>`). Each
431
- * location's `config.basePath` is `<basePath>/<id>`, except when the
432
- * declaration sets `defaultsTo` — then it inherits the resolved root of
433
- * the referenced location's default instance (sharing the same root
434
- * directory for derivative slots like `recordingsLow` → `recordings`).
435
- */
436
- seedDefaults(input: {
437
- readonly providerId: string;
438
- readonly basePath: string;
439
- /**
440
- * Root for declarations marked `defaultRoot: 'media'` (the dedicated media
441
- * volume, `CAMSTACK_MEDIA_ROOT`). Absent → media declarations fall back to
442
- * `basePath` like everything else.
443
- */
444
- readonly mediaBasePath?: string;
445
- /**
446
- * Root for declarations marked `defaultRoot: 'backup'` (the dedicated
447
- * backup volume, `CAMSTACK_BACKUP_ROOT`, default `/backups`). Absent →
448
- * backup declarations fall back to `basePath`.
449
- */
450
- readonly backupBasePath?: string;
451
- readonly declarations: readonly StorageLocationDeclaration[];
452
- }): void;
453
- /**
454
- * The same-type physical-root refusal (D389).
455
- *
456
- * An unresolvable root — another node's disk, a remote provider, a path that
457
- * does not exist yet — WARNS and lets the write through. Refusing on a read
458
- * that could not be taken blocks the operator on a doubt, and the recorder's
459
- * demotion still catches what slips past (D49's spirit).
460
- */
461
- private refuseSameTypeRootCollision;
462
- /** Injectable so a test can drive symlinks and unresolvable paths without
463
- * touching a real filesystem. Production takes the shared derivation. */
464
- private resolveRoot;
465
- /** Test seam for {@link refuseSameTypeRootCollision}. */
466
- setRootResolver(resolveRoot: ResolveRoot): void;
467
- /** Internal: check whether any location of the given type exists. */
468
- private hasAnyLocationOfType;
79
+ private readonly logger;
80
+ private readonly getProviders;
81
+ /**
82
+ * Optional persistence backend. When supplied, `initialize()`
83
+ * hydrates the in-memory map from the store, and every mutation
84
+ * (upsert/delete) mirrors to it. When `null` / `undefined`, the
85
+ * service is in-memory only — the contract used by the existing
86
+ * routing tests, where re-creating the service deliberately
87
+ * forgets every location.
88
+ *
89
+ * Mutable because production boot wires it late: the `settings-store`
90
+ * cap often isn't registered when the orchestrator initializes, so the
91
+ * service starts store-less and the addon calls {@link attachStore} once
92
+ * the provider appears. See {@link attachStore}.
93
+ */
94
+ private locationStore;
95
+ /** Cross-node provider resolver (hub wiring: a node-routed capability
96
+ * proxy over `storage-provider`). Absent → remote locations error. */
97
+ private readonly getRemoteProvider?;
98
+ private readonly locations;
99
+ /**
100
+ * Declaration-driven cardinality source, injected by the addon after
101
+ * the kernel aggregates `storageLocations` declarations. `null` until
102
+ * `setRegistry` runs — `upsertLocation` then treats every type as
103
+ * `'multi'` (no singleton enforcement), the safe default for the
104
+ * in-memory-only / early-boot path.
105
+ */
106
+ private registry;
107
+ /**
108
+ * Injected `providerId → nodeLocal` resolver (see {@link NodeLocalResolver}).
109
+ * `null` until {@link setNodeLocalResolver} runs — `upsertLocation` then
110
+ * skips the node-local requirement check entirely (every provider is
111
+ * treated as node-agnostic), the safe default for the in-memory-only /
112
+ * early-boot path that predates the resolver wiring.
113
+ */
114
+ private nodeLocalResolver;
115
+ /**
116
+ * Injected occupancy probe (see {@link LocationOccupancyProbe}). `null` until
117
+ * {@link setOccupancyProbe} runs, and a `null` probe answers `unknown` — so a
118
+ * service with no probe REFUSES an unforced delete rather than performing one
119
+ * it could not check. The check is the point; a check that defaults to
120
+ * "permit" is a paragraph, not a guard.
121
+ */
122
+ private occupancyProbe;
123
+ /** `localNodeId` with any forked-child `/addon` suffix stripped. */
124
+ private readonly localNode;
125
+ /**
126
+ * `<kind>:<sessionId>` → the dispatch target that OPENED the session.
127
+ * Chunked I/O carries no `StorageLocation` after the first hop, so without
128
+ * this the follow-up chunks fall back to a `providerId`-only lookup — which
129
+ * on a multi-node cluster means the hub's filesystem, not the agent's.
130
+ */
131
+ private readonly sessionTargets;
132
+ constructor(logger: IScopedLogger, getProviders: StorageProviderLookup, locationStore?: ILocationStore | null, localNodeId?: string, getRemoteProvider?: ((nodeId: string) => IStorageProviderImpl | null) | undefined);
133
+ /**
134
+ * The node this orchestrator runs on, with any forked-child `/addon`
135
+ * suffix stripped. A location whose `nodeId` differs is NOT this node's
136
+ * to touch — its bytes, and its free space, live elsewhere.
137
+ */
138
+ getLocalNodeId(): string;
139
+ /** True once a persistence store is wired (constructor or {@link attachStore}). */
140
+ hasStore(): boolean;
141
+ /**
142
+ * Late-bind the persistence store (production boot: the `settings-store`
143
+ * cap registers after the orchestrator initializes, so the service runs
144
+ * in-memory-only until then). Idempotent — a second call once a store is
145
+ * wired is a no-op.
146
+ *
147
+ * Reconciles both directions so operator edits survive a reboot:
148
+ * 1. hydrate — DB rows win over any early in-memory seed (restores
149
+ * operator config like `minFreePercent` that the pre-store boot
150
+ * can't see);
151
+ * 2. backfill — in-memory locations the DB doesn't have yet (the
152
+ * pre-store seed defaults on a fresh install) are persisted, so the
153
+ * store becomes the durable source of truth from here on.
154
+ *
155
+ * **The re-entry guard latches on a SUCCESSFUL hydrate, not on the attempt** —
156
+ * `loadAll()` is awaited BEFORE `this.locationStore` is assigned, and the
157
+ * order is load-bearing. Latching first meant one transient read error
158
+ * answered `hasStore()` true forever, so the addon's `ensureStoreWired` gate
159
+ * skipped every retry; the service then ran the whole process lifetime on
160
+ * pre-store seed defaults while `upsert` mirrored them onto rows it had never
161
+ * read, silently replacing the operator's persisted `minFreePercent`. Failing
162
+ * back to store-less is the safe direction: an in-memory-only service writes
163
+ * nothing over what is on disk, and the next `capability:provider-registered`
164
+ * event tries again. Held by
165
+ * `__tests__/storage-orchestrator-persistence.spec.ts`.
166
+ */
167
+ attachStore(store: ILocationStore): Promise<void>;
168
+ /**
169
+ * ONE explicit migration onto the four-state model (D385), run once per boot
170
+ * against the rows that came off disk. Idempotent: the second boot finds
171
+ * nothing to do.
172
+ *
173
+ * Two steps, in order, and each one is a WRITE — the point is that "absent"
174
+ * stops existing rather than being re-interpreted on every read forever:
175
+ *
176
+ * 1. A row with no `mode` is stamped with the mode its legacy flags imply
177
+ * (`legacyModeOf`): `config.readOnly === true` → `readonly` and the
178
+ * config key is DELETED; `enabled === false` → `readonly` (the
179
+ * CONSERVATIVE direction — a state change must never start deleting
180
+ * footage on its own); everything else → `active`. `withLocationMode`
181
+ * derives `enabled` from the mode, so the two can never disagree, and
182
+ * this subsumes the D383 pass that stamped flagless rows `enabled: true`.
183
+ * 2. A type left with NO write target — only reachable from a hand-edited
184
+ * store or a row an older build wrote — gets one made `active`, chosen as
185
+ * the row the RETIRED default flag named, else the `:default`-slugged
186
+ * row, else the lexicographically first. Loudly: a class with no write
187
+ * target records nowhere, and refusing to repair it here would leave the
188
+ * hub silently unable to write with no operator action pending.
189
+ *
190
+ * An operator's explicit `readonly`/`drain`/`disabled` is never reversed by
191
+ * step 1 — only step 2 touches it, and only when the alternative is a class
192
+ * that cannot write at all.
193
+ *
194
+ * On the live hub every location is enabled with no `readOnly`, so step 1 is
195
+ * a no-op that stamps `active` and nothing else changes.
196
+ */
197
+ private migrateOntoTheWriteSet;
198
+ /** Apply one migrated row in memory and mirror it to the store. */
199
+ private persistMigrated;
200
+ /**
201
+ * Inject the declaration-driven cardinality source. Called once by the
202
+ * addon after the kernel aggregates every addon's `storageLocations`
203
+ * declarations into a `StorageLocationRegistry`.
204
+ */
205
+ setRegistry(registry: DeclarationSource | null): void;
206
+ /**
207
+ * Inject the synchronous `providerId → nodeLocal` resolver (SP1). Called
208
+ * by the addon from a cached snapshot of every `storage-provider`'s
209
+ * `getProviderInfo().nodeLocal`, refreshed when the provider collection
210
+ * changes. Powers the node-local upsert guard and the boot backfill.
211
+ */
212
+ setNodeLocalResolver(resolver: NodeLocalResolver | null): void;
213
+ /**
214
+ * Inject the "does this location still hold anything" probe read by
215
+ * {@link deleteLocation}. Absent → every delete sees `unknown` and therefore
216
+ * REFUSES without `force`, which is the safe direction for a service wired
217
+ * without one.
218
+ */
219
+ setOccupancyProbe(probe: LocationOccupancyProbe | null): void;
220
+ /**
221
+ * The full set of addon-declared storage locations, as aggregated by
222
+ * the kernel and injected via {@link setRegistry}. Powers the admin-UI
223
+ * Data screen's per-declaration grouping. Empty until the registry is
224
+ * injected (early-boot / in-memory-only path).
225
+ */
226
+ listDeclarations(): readonly StorageLocationDeclaration[];
227
+ /**
228
+ * Hydrate the in-memory map from the persistence layer. Called once
229
+ * by the addon during `onInitialize`, before the eager seed pass.
230
+ * Idempotent — running it twice with the same store contents
231
+ * produces the same map. No-op when the service was constructed
232
+ * without a store.
233
+ *
234
+ * Errors loading individual rows are tolerated: the bad row is
235
+ * skipped and logged so a single corrupted record doesn't lock the
236
+ * whole orchestrator out of boot. (The store-side validation pass
237
+ * before insert means only schema-invalid SQL state can produce
238
+ * such a row.)
239
+ */
240
+ initialize(): Promise<void>;
241
+ /**
242
+ * Boot backfill (SP1): stamp `nodeId` on every persisted node-local
243
+ * location that lacks one. Single-node deployments seeded their
244
+ * filesystem locations before `nodeId` existed — they live on `hubNodeId`
245
+ * (the hub). Node-agnostic (remote) locations are left untouched: their
246
+ * absent `nodeId` is correct (reachable from any node).
247
+ *
248
+ * Idempotent — a location that already carries a `nodeId` (any value) is
249
+ * never re-touched, so re-running on a populated map (or a re-boot) is a
250
+ * no-op. A plain local update, not versioned-migration machinery: only
251
+ * the rows missing `nodeId` are mutated + persisted.
252
+ *
253
+ * No-op until the node-local resolver is wired (it classifies which
254
+ * providers are node-local).
255
+ */
256
+ backfillNodeIds(hubNodeId: string): Promise<void>;
257
+ listLocations(filter?: ListLocationsFilter): readonly StorageLocation[];
258
+ /**
259
+ * The WRITE SET of a type: every enabled location of it, in stable id order.
260
+ * This replaced `getDefaultLocation` (D383) — a type does not have one write
261
+ * target any more, it has a pool, and every consumer that must pick one picks
262
+ * from here by its own rule (the recorder by headroom, a drain by an operator
263
+ * -named destination).
264
+ */
265
+ writeTargets(type: string): readonly StorageLocation[];
266
+ /**
267
+ * Change the WRITE SET as one compensated commit: each named location is
268
+ * enabled (it joins the pool) or disabled (it becomes read-only — still read,
269
+ * still played back, still age-swept, still drained).
270
+ *
271
+ * This is the cutover verb, and its only caller is the migration coordinator,
272
+ * which persists its `repointing` phase BEFORE calling so a crash mid-write
273
+ * is recovered by replaying the same idempotent set before writers resume.
274
+ *
275
+ * It moves ONLY the locations it is given: a cutover from A to C on a class
276
+ * that also writes to B leaves B in the pool, because the operator's pool is
277
+ * the authority and a migration is not a licence to shrink it. The commit is
278
+ * refused when it would leave a write-serving type with nothing enabled —
279
+ * the same refusal `upsertLocation` applies, judged on the RESULT so an
280
+ * enable and a disable in one commit are weighed together.
281
+ */
282
+ setWriteTargets(enabledByLocationId: ReadonlyMap<string, boolean>): Promise<void>;
283
+ /**
284
+ * Insert or update a location.
285
+ *
286
+ * When a persistence store is wired (Task 6), the record is mirrored to it;
287
+ * the mirror is fire-and-forget and its errors reach the logger.
288
+ */
289
+ /**
290
+ * Refuse a `(location kind, provider)` pair the kind cannot use.
291
+ *
292
+ * The rule, in one line: a `'local-path'` kind requires a provider whose
293
+ * `getProviderInfo().nodeLocal` is `true`.
294
+ *
295
+ * `nodeLocal` is the honest name for "this provider's `resolve` returns a
296
+ * path on the filesystem of the node that resolved it". The
297
+ * `storage-provider` cap's own discriminated union already forces every
298
+ * provider to declare it, and all four remote providers declare `false`, so
299
+ * no new cap surface is needed to ask the question.
300
+ *
301
+ * Three-valued on purpose. Only a POSITIVE `false` refuses:
302
+ * - `true` → node-local, always fine.
303
+ * - `false` → the provider is known and known to be remote. REFUSE.
304
+ * - `undefined` → the provider has not registered yet (early boot, an addon
305
+ * still loading). That is "unknown", not "remote", and a read that could
306
+ * not be made must never destroy work (D49) — the system seed runs
307
+ * through this path before any provider registers. Allowed, and logged,
308
+ * so the allowance is never silent.
309
+ *
310
+ * The DECLARATION side is read the same way. A kind the registry does not
311
+ * know is `local-path` (fail-closed: an unknown kind is not a permissive
312
+ * one), but NO REGISTRY AT ALL is a different statement — nothing has been
313
+ * loaded, so nothing can be concluded about any kind. The addon injects the
314
+ * registry inside `onInitialize`, before the `storage` cap is mounted, so
315
+ * there is no window in which an operator upsert sees this branch; a service
316
+ * constructed without one is the in-memory/early-boot path.
317
+ */
318
+ private refuseIncompatibleProvider;
319
+ upsertLocation(input: Omit<StorageLocation, "createdAt" | "updatedAt">): StorageLocation;
320
+ /**
321
+ * Remove a location. Refuses the last location of a type and the last
322
+ * enabled location of a type. `isSystem` is informational — a frozen
323
+ * recordings `:default` is deletable once a sibling is live. Occupancy still
324
+ * refuses unless `force` is set; force never overrides uniqueness /
325
+ * last-enabled.
326
+ */
327
+ deleteLocation(id: string, options?: DeleteLocationOptions): Promise<void>;
328
+ /**
329
+ * Run the injected occupancy probe, converting "no probe" and "the probe
330
+ * threw" into `unknown` rather than into a permit.
331
+ */
332
+ private probeOccupancy;
333
+ /**
334
+ * Remove seed-shaped locations (`<type>:default`) whose type is no longer
335
+ * declared by any addon (stale defaults from a removed location type).
336
+ * Operator-added locations of an undeclared type are KEPT but warned.
337
+ *
338
+ * FAIL-SAFE: if the registry is EMPTY (no addon declared any location), we
339
+ * refuse to prune anything. An empty registry almost always means
340
+ * declarations failed to load (boot ordering, a stale install) — pruning
341
+ * "everything undeclared" in that state would wipe every seeded location
342
+ * (data/logs/recordings/…). Better to keep stale rows than destroy live ones.
343
+ */
344
+ pruneUndeclaredSystemLocations(): void;
345
+ /**
346
+ * Resolve a `StorageLocationRef` to a concrete `StorageLocation`.
347
+ * - bare type (e.g. `'backups'`) → default location of that type
348
+ * - fully-qualified id (e.g. `'backups:nas-01'`) → that exact instance
349
+ *
350
+ * Throws an actionable error when nothing matches — every consumer of
351
+ * the singleton `storage` cap funnels through here, so the error
352
+ * message is what operators see when the orchestrator's view of the
353
+ * world doesn't match expectations.
354
+ */
355
+ resolveRef(ref: StorageLocationRef): StorageLocation;
356
+ /**
357
+ * Find the storage-provider that backs a given location — the entry point
358
+ * every consumer-facing `storage` cap method funnels through.
359
+ *
360
+ * Routing key is `(providerId, nodeId)`, never `providerId` alone: every
361
+ * node's FilesystemStorageProvider registers under the SAME providerId, so
362
+ * a providerId-only match resolves to whichever node asked. That is how a
363
+ * location created on an agent ended up writing to the HUB's filesystem
364
+ * (root-caused 2026-07-29).
365
+ */
366
+ getProviderFor(location: StorageLocation): Promise<IStorageProviderImpl>;
367
+ /**
368
+ * Resolve one dispatch target to the provider that must execute it.
369
+ *
370
+ * `descriptor` is the operator-facing subject of the error message
371
+ * (`location "recordings:disk"`, `uploadId "u-42"`); `locationId` is the
372
+ * structured tag for the log line when there is a location behind the
373
+ * dispatch (chunked sessions carry only the session id).
374
+ *
375
+ * Both failure branches LOG before throwing, and NEITHER falls back to the
376
+ * local provider — a silent fallback is the bug this method exists to fix.
377
+ */
378
+ private getProviderForTarget;
379
+ /**
380
+ * Remember which provider — and on which NODE — opened a chunked session.
381
+ * `beginUpload` / `beginDownload` carry a `StorageLocation`; every later
382
+ * chunk carries only the session id, and a session id issued by an agent
383
+ * means nothing to the hub's provider.
384
+ */
385
+ rememberSession(kind: StorageSessionKind, sessionId: string, location: StorageLocation): void;
386
+ /** Drop a session's routing entry (finalize / abort / end). */
387
+ forgetSession(kind: StorageSessionKind, sessionId: string): void;
388
+ /** Drop every session entry (addon shutdown). */
389
+ clearSessions(): void;
390
+ /**
391
+ * Resolve the provider that owns an in-flight chunked session, on the node
392
+ * that opened it. Throws when the orchestrator has no record of the open
393
+ * call (provider gone, or a chunk for a session it never issued).
394
+ */
395
+ getProviderForSession(kind: StorageSessionKind, sessionId: string): Promise<IStorageProviderImpl>;
396
+ /** Convenience: lookup by id (returns `undefined` if not found). */
397
+ getLocationById(id: string): StorageLocation | undefined;
398
+ /**
399
+ * Seed one default `StorageLocation` per addon-declared location that
400
+ * doesn't already have one. Idempotent — re-running with the same
401
+ * declarations on a populated map is a no-op (each declared `id`
402
+ * already resolves to an existing `<id>:default`).
403
+ *
404
+ * The seeded row is born ENABLED — a fresh install must be able to write the
405
+ * moment it boots, and `enabled` is the only write switch there is (D383).
406
+ * The `:default` suffix is a NAME kept for idempotency across existing
407
+ * installs, not a flag: the stored `id` is `'recordings:default'` so it
408
+ * satisfies the
409
+ * `^[a-z][a-z0-9-]*:[a-z0-9-]+$` regex on `StorageLocationSchema.id`.
410
+ *
411
+ * `basePath` is the storage root (e.g. `<CAMSTACK_DATA>`). Each
412
+ * location's `config.basePath` is `<basePath>/<id>`, except when the
413
+ * declaration sets `defaultsTo` — then it inherits the resolved root of
414
+ * the referenced location's default instance (sharing the same root
415
+ * directory for derivative slots like `recordingsLow` → `recordings`).
416
+ */
417
+ seedDefaults(input: {
418
+ readonly providerId: string;
419
+ readonly basePath: string;
420
+ /**
421
+ * Root for declarations marked `defaultRoot: 'media'` (the dedicated media
422
+ * volume, `CAMSTACK_MEDIA_ROOT`). Absent → media declarations fall back to
423
+ * `basePath` like everything else.
424
+ */
425
+ readonly mediaBasePath?: string;
426
+ /**
427
+ * Root for declarations marked `defaultRoot: 'backup'` (the dedicated
428
+ * backup volume, `CAMSTACK_BACKUP_ROOT`, default `/backups`). Absent →
429
+ * backup declarations fall back to `basePath`.
430
+ */
431
+ readonly backupBasePath?: string;
432
+ readonly declarations: readonly StorageLocationDeclaration[];
433
+ }): void;
434
+ /**
435
+ * The same-type physical-root refusal (D389).
436
+ *
437
+ * An unresolvable root — another node's disk, a remote provider, a path that
438
+ * does not exist yet — WARNS and lets the write through. Refusing on a read
439
+ * that could not be taken blocks the operator on a doubt, and the recorder's
440
+ * demotion still catches what slips past (D49's spirit).
441
+ */
442
+ private refuseSameTypeRootCollision;
443
+ /** Injectable so a test can drive symlinks and unresolvable paths without
444
+ * touching a real filesystem. Production takes the shared derivation. */
445
+ private resolveRoot;
446
+ /** Test seam for {@link refuseSameTypeRootCollision}. */
447
+ setRootResolver(resolveRoot: ResolveRoot): void;
448
+ /** Internal: check whether any location of the given type exists. */
449
+ private hasAnyLocationOfType;
469
450
  }