@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,196 +1,222 @@
1
- import { IScopedLogger } from '@camstack/types';
2
- import { DeviceManagerSettings } from './device-meta-store.js';
3
- import { MigrationRefusedError } from './migration-refused.js';
4
- import { RuntimeStatePolicyLookup } from './runtime-state-persist-gate.js';
1
+ /**
2
+ * The ROW WRITER of the hub runtime-state mirror (`DeviceStateMirror`): every
3
+ * write of a device's `__device-state:<id>` row goes through here — the
4
+ * debounced writer, a claim's write-through, the migration drain, the shutdown
5
+ * flush.
6
+ *
7
+ * Every row write of a device goes through ONE queue per device
8
+ * (`serialiseWrite`), so two writes are never in flight at once and each
9
+ * carries the memory of the moment it RUNS (`persistableFor`, supplied by the
10
+ * mirror). What is believed to be on disk (`lastPersisted`) is the baseline of
11
+ * the effective-change gate. A migration HOLDS the writer off two rows while it
12
+ * swaps them (`holdDiskWrites`).
13
+ *
14
+ * Extracted from `device-state-mirror.ts` (D663 final review I-2) — the mirror
15
+ * owns memory and the merge; this owns what reaches the row, and when.
16
+ *
17
+ * ── Never write a row this process has not READ (D677) ────────────────────
18
+ * A row write REPLACES the whole row. So every write path — debounced,
19
+ * write-through, drain, shutdown flush — first makes sure the device's row was
20
+ * read into memory (`readRowFirst`, the mirror's single-flight `fill` seed:
21
+ * memory wins per cap, the row fills the gaps). A read that fails writes
22
+ * NOTHING and is logged once per episode with `tags.deviceId`. A write that
23
+ * would still drop a cap the stored row holds is logged at warn, by name: the
24
+ * boot race that did exactly that was silent since at least 09-18 (159 shrinks, 15
25
+ * cameras, 65 of 82 hub restarts).
26
+ */
27
+ import type { IScopedLogger } from "@camstack/types";
28
+ import type { DeviceManagerSettings } from "./device-meta-store.js";
29
+ import { MigrationRefusedError } from "./migration-refused.js";
30
+ import { type RuntimeStatePolicyLookup } from "./runtime-state-persist-gate.js";
5
31
  /** A device's row as it may reach disk: cap name → persistable slice (plus `$owned`). */
6
32
  export type PersistableRow = Record<string, Record<string, unknown>>;
7
33
  /** Which path wrote (or tried to write) a row — named on every line it logs. */
8
- export type RowWritePath = 'debounced' | 'shutdown-flush' | 'drain' | 'claim' | 'release';
34
+ export type RowWritePath = "debounced" | "shutdown-flush" | "drain" | "claim" | "release";
9
35
  /**
10
- * A write-through refused because the device's row could not be read first
11
- * (D677). Nothing was written; the caller rolls its memory change back.
12
- */
36
+ * A write-through refused because the device's row could not be read first
37
+ * (D677). Nothing was written; the caller rolls its memory change back.
38
+ */
13
39
  export declare class RuntimeStateRowUnreadError extends Error {
14
- readonly deviceId: number;
15
- constructor(deviceId: number);
40
+ readonly deviceId: number;
41
+ constructor(deviceId: number);
16
42
  }
17
43
  /**
18
- * The drain before a migration could not vouch for a device's row. Nothing has
19
- * moved yet, so it is a {@link MigrationRefusedError}: the migration refuses
20
- * and restores both cameras' switches.
21
- */
44
+ * The drain before a migration could not vouch for a device's row. Nothing has
45
+ * moved yet, so it is a {@link MigrationRefusedError}: the migration refuses
46
+ * and restores both cameras' switches.
47
+ */
22
48
  export declare class RuntimeStateDrainError extends MigrationRefusedError {
23
- readonly deviceId: number;
24
- constructor(deviceId: number, reason: string, options?: ErrorOptions);
49
+ readonly deviceId: number;
50
+ constructor(deviceId: number, reason: string, options?: ErrorOptions);
25
51
  }
26
52
  /** A migration's hold on the debounced writer (`holdDiskWrites`). */
27
53
  export interface MirrorWriteHold {
28
- /** Let the writer back onto the rows; re-arms it so the row converges to memory. */
29
- readonly release: () => void;
54
+ /** Let the writer back onto the rows; re-arms it so the row converges to memory. */
55
+ readonly release: () => void;
30
56
  }
31
57
  /** What the writer needs from the mirror that owns it. */
32
58
  export interface MirrorRowWriterDeps {
33
- readonly logger: IScopedLogger;
34
- /** Per-cap durability + volatile-field policy (D4). */
35
- readonly policyFor: RuntimeStatePolicyLookup;
36
- /** The device's row as memory holds it NOW — taken when a write RUNS. */
37
- readonly persistableFor: (deviceId: number) => PersistableRow;
38
- /** The device's row was read into memory in this process (D677). */
39
- readonly isRowRead: (deviceId: number) => boolean;
40
- /**
41
- * Read the row into memory — single-flight, `fill` (memory wins per cap).
42
- * Rejects when the row cannot be read; memory is then unchanged.
43
- */
44
- readonly readRowFirst: (deviceId: number, settings: DeviceManagerSettings) => Promise<void>;
59
+ readonly logger: IScopedLogger;
60
+ /** Per-cap durability + volatile-field policy (D4). */
61
+ readonly policyFor: RuntimeStatePolicyLookup;
62
+ /** The device's row as memory holds it NOW — taken when a write RUNS. */
63
+ readonly persistableFor: (deviceId: number) => PersistableRow;
64
+ /** The device's row was read into memory in this process (D677). */
65
+ readonly isRowRead: (deviceId: number) => boolean;
66
+ /**
67
+ * Read the row into memory — single-flight, `fill` (memory wins per cap).
68
+ * Rejects when the row cannot be read; memory is then unchanged.
69
+ */
70
+ readonly readRowFirst: (deviceId: number, settings: DeviceManagerSettings) => Promise<void>;
45
71
  }
46
72
  export declare class MirrorRowWriter {
47
- private readonly deps;
48
- static readonly RUNTIME_STATE_DEBOUNCE_MS = 1000;
49
- /** Ceiling of the re-arm backoff while a device's row cannot be read (D677, D3). */
50
- static readonly UNREAD_REARM_MAX_MS = 60000;
51
- /** The re-arm delay after `refusals` consecutive unread refusals: 1 s, 2 s, 4 s … capped at 60 s. */
52
- static unreadRearmDelayMs(refusals: number): number;
53
- /**
54
- * Per-device disk-write debouncer for runtime-state. `setCapSlice`
55
- * updates the in-memory mirror synchronously and emits the change
56
- * event immediately, but the disk write is coalesced.
57
- */
58
- private readonly runtimeStateDebounce;
59
- /**
60
- * Devices whose debounced writer is HELD off the row — a migration is
61
- * swapping it (`holdDiskWrites`). A change while held stays in memory only.
62
- */
63
- private readonly writesHeld;
64
- /** Held devices a durable change was scheduled for — what `release` re-arms. */
65
- private readonly heldDirty;
66
- /**
67
- * What is believed to be ON DISK for each device — the persistable projection
68
- * of the last blob actually written (or read at seed time). The
69
- * effective-change gate compares against THIS, not against the previous
70
- * mirror state: two clock-only ticks in a row must not add up to a write just
71
- * because each was compared with its immediate predecessor.
72
- */
73
- private readonly lastPersisted;
74
- /**
75
- * Per-device count of writes the effective-change gate skipped since the last
76
- * real one. Reported on the next write that DOES happen, so the log says how
77
- * much churn the gate absorbed instead of saying nothing at all — a branch
78
- * that drops work silently reads as "never happened".
79
- */
80
- private readonly skippedSinceWrite;
81
- /** Devices whose unreadable-row refusal is already logged — once per episode. */
82
- private readonly rowUnreadLogged;
83
- constructor(deps: MirrorRowWriterDeps);
84
- /** What is believed to be on the device's row; undefined before any read or write. */
85
- persisted(deviceId: number): PersistableRow | undefined;
86
- /** Record what the row now holds — a write that landed, or a row just read. */
87
- markPersisted(deviceId: number, row: PersistableRow): void;
88
- /** A migration holds the writer off this device's row right now. */
89
- isHeld(deviceId: number): boolean;
90
- /**
91
- * Chain a row write behind whatever is in flight for the device. Returns the
92
- * write's own promise (it may reject, to its caller); the queue tail never
93
- * rejects and clears itself once it is the last one out.
94
- */
95
- serialiseWrite<T>(deviceId: number, task: () => Promise<T>): Promise<T>;
96
- private slotFor;
97
- /** Arm the writer for a durable change, or remember it for `release` while a migration holds the device. */
98
- armOrHold(deviceId: number, settings: DeviceManagerSettings): void;
99
- /**
100
- * Debounced disk writer, behind two gates.
101
- *
102
- * GATE — DURABILITY: a change to a `durability: 'session'` cap never even
103
- * arms the timer. That is where the fleet's write rate goes: `audio-metrics`
104
- * and `zone-analytics` are ~90 % of the offered 12–19 writes/s, they change
105
- * genuinely every second, and their restored value is worthless.
106
- *
107
- * GATE — EFFECTIVE CHANGE (at flush): the persistable blob is compared with
108
- * what is believed to be on disk, ignoring the clock fields each cap declared
109
- * volatile. `battery` wrote its blob 526 times in 25 minutes without one
110
- * percentage moving; this is the gate that turns those into one write.
111
- *
112
- * The blob is read from the live mirror at flush time, so the disk picture is
113
- * always the latest state — no risk of writing a stale snapshot.
114
- */
115
- schedule(deviceId: number, settings: DeviceManagerSettings, changedCap: string): void;
116
- /** Arm the debounce timer; at fire, queue a write of the live blob unless disk already has it. */
117
- private armDiskWrite;
118
- /**
119
- * Forget a removed device: cancel its armed write, await one in flight, and
120
- * drop its baseline and counters — nothing writes its row after this.
121
- */
122
- forget(deviceId: number): Promise<void>;
123
- /**
124
- * The row is in memory, or is read now (D677). False when the read failed:
125
- * the caller writes nothing. Logged once per episode, tagged; the episode
126
- * ends at the next successful read.
127
- */
128
- private rowReadOrRefuse;
129
- /**
130
- * The ONE call of `writeDeviceRuntimeState`. A blob that lacks a cap the
131
- * stored row holds is written (memory is the authority once the row was
132
- * read) but never silently: the dropped caps are named at warn (D677).
133
- * `$owned` is excluded — a release that empties it is the claim path's own
134
- * logged business.
135
- */
136
- private writeRow;
137
- /**
138
- * A claim's write-through (D663): queued behind the device's writes, the row
139
- * read first, the blob taken when it runs. Rejects with
140
- * {@link RuntimeStateRowUnreadError} when the row cannot be read, or with the
141
- * write's own error; resolves to what landed.
142
- */
143
- writeThroughRow(deviceId: number, settings: DeviceManagerSettings, path: RowWritePath): Promise<PersistableRow>;
144
- /**
145
- * The debounced write itself: the row read first (D677), then the blob as
146
- * memory holds it NOW, behind the effective-change gate. Never rejects. An
147
- * unreadable row writes nothing; the debounced path re-arms with a backoff
148
- * (1 s doubling to 60 s — never a 1 Hz loop, D3), and the armed timer is
149
- * what a migration drain sees as owed, so a row that has become readable
150
- * drains normally. The shutdown flush does not re-arm.
151
- */
152
- private writeLiveBlob;
153
- /** Re-arm an unread refusal with its backoff, or remember it for `release` while held. */
154
- private rearmAfterUnread;
155
- /**
156
- * Hold the debounced writer off these devices' rows while a migration swaps
157
- * them (D663 re-review N-6). Resolves once each device is DRAINED: a write
158
- * still in its debounce window is written now (it is this hardware's latest
159
- * state, and the swap then carries it to the right number), and a write
160
- * already in flight has landed. Until `release`, nothing the writer does
161
- * reaches these rows — a blob read before the swap and written after it would
162
- * put the other box's state back under the number, and make it the baseline.
163
- *
164
- * Only what the writer already had pending is written — never memory
165
- * wholesale, which for a row nobody read would overwrite it with a partial
166
- * picture. `release` re-arms the writer for a device changed while held:
167
- * after the migration's `replace` reseed memory equals the row and nothing
168
- * is written; after a failed swap the row converges to memory.
169
- *
170
- * The migration must not proceed over a row that is not what memory says it
171
- * is. So a drain write that FAILS, and equally a write that was in flight and
172
- * FAILED (ruling I-2 — awaiting it is not the same as it landing), release
173
- * the hold, log the device and reject with a {@link RuntimeStateDrainError};
174
- * the owed write is re-armed on release.
175
- *
176
- * One hold per device at a time: `writesHeld` is a set, not a refcount, so a
177
- * second overlapping hold would be released by the first. Safe because the
178
- * only caller is `migrateDevice`, serialised by `migrationGuard` and the meta
179
- * write lock; a new caller needs a refcount first.
180
- */
181
- holdDiskWrites(deviceIds: readonly number[], settings: DeviceManagerSettings): Promise<MirrorWriteHold>;
182
- /** Cancel the timer, await the write in flight, then write (queued) what is not yet on disk. */
183
- private drainDiskWrite;
184
- /** A drain that cannot vouch for the row: still owed (re-armed on release), logged, refused. */
185
- private refuseDrain;
186
- /**
187
- * True when `blob` differs from what is believed to be on disk only in fields
188
- * the owning caps declared volatile. Counts the skip so the next real write
189
- * can report how much churn was absorbed.
190
- */
191
- private isAlreadyPersisted;
192
- /** Flush every pending debounced disk write (graceful shutdown). Clears the
193
- * debounce slots after awaiting in-flight + scheduled writes so shutdown is
194
- * lossless. */
195
- flushPendingWrites(settings: DeviceManagerSettings | undefined): Promise<void>;
73
+ private readonly deps;
74
+ static readonly RUNTIME_STATE_DEBOUNCE_MS = 1e3;
75
+ /** Ceiling of the re-arm backoff while a device's row cannot be read (D677, D3). */
76
+ static readonly UNREAD_REARM_MAX_MS = 6e4;
77
+ /** The re-arm delay after `refusals` consecutive unread refusals: 1 s, 2 s, 4 s … capped at 60 s. */
78
+ static unreadRearmDelayMs(refusals: number): number;
79
+ /**
80
+ * Per-device disk-write debouncer for runtime-state. `setCapSlice`
81
+ * updates the in-memory mirror synchronously and emits the change
82
+ * event immediately, but the disk write is coalesced.
83
+ */
84
+ private readonly runtimeStateDebounce;
85
+ /**
86
+ * Devices whose debounced writer is HELD off the row — a migration is
87
+ * swapping it (`holdDiskWrites`). A change while held stays in memory only.
88
+ */
89
+ private readonly writesHeld;
90
+ /** Held devices a durable change was scheduled for — what `release` re-arms. */
91
+ private readonly heldDirty;
92
+ /**
93
+ * What is believed to be ON DISK for each device — the persistable projection
94
+ * of the last blob actually written (or read at seed time). The
95
+ * effective-change gate compares against THIS, not against the previous
96
+ * mirror state: two clock-only ticks in a row must not add up to a write just
97
+ * because each was compared with its immediate predecessor.
98
+ */
99
+ private readonly lastPersisted;
100
+ /**
101
+ * Per-device count of writes the effective-change gate skipped since the last
102
+ * real one. Reported on the next write that DOES happen, so the log says how
103
+ * much churn the gate absorbed instead of saying nothing at all — a branch
104
+ * that drops work silently reads as "never happened".
105
+ */
106
+ private readonly skippedSinceWrite;
107
+ /** Devices whose unreadable-row refusal is already logged — once per episode. */
108
+ private readonly rowUnreadLogged;
109
+ constructor(deps: MirrorRowWriterDeps);
110
+ /** What is believed to be on the device's row; undefined before any read or write. */
111
+ persisted(deviceId: number): PersistableRow | undefined;
112
+ /** Record what the row now holds — a write that landed, or a row just read. */
113
+ markPersisted(deviceId: number, row: PersistableRow): void;
114
+ /** A migration holds the writer off this device's row right now. */
115
+ isHeld(deviceId: number): boolean;
116
+ /**
117
+ * Chain a row write behind whatever is in flight for the device. Returns the
118
+ * write's own promise (it may reject, to its caller); the queue tail never
119
+ * rejects and clears itself once it is the last one out.
120
+ */
121
+ serialiseWrite<T>(deviceId: number, task: () => Promise<T>): Promise<T>;
122
+ private slotFor;
123
+ /** Arm the writer for a durable change, or remember it for `release` while a migration holds the device. */
124
+ armOrHold(deviceId: number, settings: DeviceManagerSettings): void;
125
+ /**
126
+ * Debounced disk writer, behind two gates.
127
+ *
128
+ * GATE — DURABILITY: a change to a `durability: 'session'` cap never even
129
+ * arms the timer. That is where the fleet's write rate goes: `audio-metrics`
130
+ * and `zone-analytics` are ~90 % of the offered 12–19 writes/s, they change
131
+ * genuinely every second, and their restored value is worthless.
132
+ *
133
+ * GATE — EFFECTIVE CHANGE (at flush): the persistable blob is compared with
134
+ * what is believed to be on disk, ignoring the clock fields each cap declared
135
+ * volatile. `battery` wrote its blob 526 times in 25 minutes without one
136
+ * percentage moving; this is the gate that turns those into one write.
137
+ *
138
+ * The blob is read from the live mirror at flush time, so the disk picture is
139
+ * always the latest state — no risk of writing a stale snapshot.
140
+ */
141
+ schedule(deviceId: number, settings: DeviceManagerSettings, changedCap: string): void;
142
+ /** Arm the debounce timer; at fire, queue a write of the live blob unless disk already has it. */
143
+ private armDiskWrite;
144
+ /**
145
+ * Forget a removed device: cancel its armed write, await one in flight, and
146
+ * drop its baseline and counters — nothing writes its row after this.
147
+ */
148
+ forget(deviceId: number): Promise<void>;
149
+ /**
150
+ * The row is in memory, or is read now (D677). False when the read failed:
151
+ * the caller writes nothing. Logged once per episode, tagged; the episode
152
+ * ends at the next successful read.
153
+ */
154
+ private rowReadOrRefuse;
155
+ /**
156
+ * The ONE call of `writeDeviceRuntimeState`. A blob that lacks a cap the
157
+ * stored row holds is written (memory is the authority once the row was
158
+ * read) but never silently: the dropped caps are named at warn (D677).
159
+ * `$owned` is excluded — a release that empties it is the claim path's own
160
+ * logged business.
161
+ */
162
+ private writeRow;
163
+ /**
164
+ * A claim's write-through (D663): queued behind the device's writes, the row
165
+ * read first, the blob taken when it runs. Rejects with
166
+ * {@link RuntimeStateRowUnreadError} when the row cannot be read, or with the
167
+ * write's own error; resolves to what landed.
168
+ */
169
+ writeThroughRow(deviceId: number, settings: DeviceManagerSettings, path: RowWritePath): Promise<PersistableRow>;
170
+ /**
171
+ * The debounced write itself: the row read first (D677), then the blob as
172
+ * memory holds it NOW, behind the effective-change gate. Never rejects. An
173
+ * unreadable row writes nothing; the debounced path re-arms with a backoff
174
+ * (1 s doubling to 60 s — never a 1 Hz loop, D3), and the armed timer is
175
+ * what a migration drain sees as owed, so a row that has become readable
176
+ * drains normally. The shutdown flush does not re-arm.
177
+ */
178
+ private writeLiveBlob;
179
+ /** Re-arm an unread refusal with its backoff, or remember it for `release` while held. */
180
+ private rearmAfterUnread;
181
+ /**
182
+ * Hold the debounced writer off these devices' rows while a migration swaps
183
+ * them (D663 re-review N-6). Resolves once each device is DRAINED: a write
184
+ * still in its debounce window is written now (it is this hardware's latest
185
+ * state, and the swap then carries it to the right number), and a write
186
+ * already in flight has landed. Until `release`, nothing the writer does
187
+ * reaches these rows — a blob read before the swap and written after it would
188
+ * put the other box's state back under the number, and make it the baseline.
189
+ *
190
+ * Only what the writer already had pending is written — never memory
191
+ * wholesale, which for a row nobody read would overwrite it with a partial
192
+ * picture. `release` re-arms the writer for a device changed while held:
193
+ * after the migration's `replace` reseed memory equals the row and nothing
194
+ * is written; after a failed swap the row converges to memory.
195
+ *
196
+ * The migration must not proceed over a row that is not what memory says it
197
+ * is. So a drain write that FAILS, and equally a write that was in flight and
198
+ * FAILED (ruling I-2 — awaiting it is not the same as it landing), release
199
+ * the hold, log the device and reject with a {@link RuntimeStateDrainError};
200
+ * the owed write is re-armed on release.
201
+ *
202
+ * One hold per device at a time: `writesHeld` is a set, not a refcount, so a
203
+ * second overlapping hold would be released by the first. Safe because the
204
+ * only caller is `migrateDevice`, serialised by `migrationGuard` and the meta
205
+ * write lock; a new caller needs a refcount first.
206
+ */
207
+ holdDiskWrites(deviceIds: readonly number[], settings: DeviceManagerSettings): Promise<MirrorWriteHold>;
208
+ /** Cancel the timer, await the write in flight, then write (queued) what is not yet on disk. */
209
+ private drainDiskWrite;
210
+ /** A drain that cannot vouch for the row: still owed (re-armed on release), logged, refused. */
211
+ private refuseDrain;
212
+ /**
213
+ * True when `blob` differs from what is believed to be on disk only in fields
214
+ * the owning caps declared volatile. Counts the skip so the next real write
215
+ * can report how much churn was absorbed.
216
+ */
217
+ private isAlreadyPersisted;
218
+ /** Flush every pending debounced disk write (graceful shutdown). Clears the
219
+ * debounce slots after awaiting in-flight + scheduled writes so shutdown is
220
+ * lossless. */
221
+ flushPendingWrites(settings: DeviceManagerSettings | undefined): Promise<void>;
196
222
  }
@@ -1,41 +1,65 @@
1
- import { ConfigUISchema, RecordingOnboardOptions, RecordingOnboardStatus } from '@camstack/types';
1
+ /**
2
+ * `recording-onboard` — server-side `ConfigUISchema` builder + form-patch
3
+ * parser. Sibling of `day-night-config-schema.ts`, registered against the
4
+ * `recording-onboard` builderId in `device-config-contribution.ts`.
5
+ *
6
+ * Field keys use the `recordingOnboard_<prop>` prefix so a flat form
7
+ * patch can be re-parsed by {@link parseRecordingOnboardFormPatch}.
8
+ *
9
+ * Two deliberate choices:
10
+ *
11
+ * - **The schedule is ONE field**, an `editable-array` of windows,
12
+ * not a field per trigger per day. The device-manager save path has
13
+ * a single-field entry point (`updateDeviceField`), so a patch may
14
+ * legitimately carry one key; a schedule spread over many keys could
15
+ * not be reassembled from such a patch, and reassembling it from a
16
+ * stale mirror is exactly the second-authority failure D62 forbids.
17
+ * One key means the value that arrives is always complete.
18
+ *
19
+ * - **Every field is rendered on every camera**, and one this camera
20
+ * cannot write is rendered DISABLED with its reason in the
21
+ * description. Not hidden: a control that vanishes is
22
+ * indistinguishable from a feature CamStack never built, and
23
+ * disabled must not look like broken.
24
+ */
25
+ import type { ConfigUISchema, RecordingOnboardOptions, RecordingOnboardStatus } from "@camstack/types";
2
26
  export declare const RECORDING_ONBOARD_KEYS: {
3
- readonly storageBanner: "recordingOnboard_storageBanner";
4
- readonly volumes: "recordingOnboard_volumes";
5
- readonly tracks: "recordingOnboard_tracks";
6
- readonly enabled: "recordingOnboard_enabled";
7
- readonly overwriteWhenFull: "recordingOnboard_overwriteWhenFull";
8
- readonly preRecordSec: "recordingOnboard_preRecordSec";
9
- readonly postRecordSec: "recordingOnboard_postRecordSec";
10
- readonly segmentMinutes: "recordingOnboard_segmentMinutes";
11
- readonly windows: "recordingOnboard_windows";
27
+ readonly storageBanner: string;
28
+ readonly volumes: string;
29
+ readonly tracks: string;
30
+ readonly enabled: string;
31
+ readonly overwriteWhenFull: string;
32
+ readonly preRecordSec: string;
33
+ readonly postRecordSec: string;
34
+ readonly segmentMinutes: string;
35
+ readonly windows: string;
12
36
  };
13
37
  /** Row keys inside the windows `editable-array`. Local, not prefixed. */
14
38
  export declare const WINDOW_ROW_KEYS: {
15
- readonly trigger: "trigger";
16
- readonly day: "day";
17
- readonly startMinute: "startMinute";
18
- readonly endMinute: "endMinute";
39
+ readonly trigger: "trigger";
40
+ readonly day: "day";
41
+ readonly startMinute: "startMinute";
42
+ readonly endMinute: "endMinute";
19
43
  };
20
44
  /**
21
- * Build the `recording-onboard` `ConfigUISchema`.
22
- *
23
- * Never returns null. The storage read works on every camera in the
24
- * fleet, so the section always has something true to say — and a camera
25
- * CamStack has not reached yet says exactly that, rather than
26
- * disappearing (D315: not-yet-known must not look like not-installed).
27
- */
45
+ * Build the `recording-onboard` `ConfigUISchema`.
46
+ *
47
+ * Never returns null. The storage read works on every camera in the
48
+ * fleet, so the section always has something true to say — and a camera
49
+ * CamStack has not reached yet says exactly that, rather than
50
+ * disappearing (D315: not-yet-known must not look like not-installed).
51
+ */
28
52
  export declare function buildRecordingOnboardConfigSchema(options: RecordingOnboardOptions, status: RecordingOnboardStatus | null): ConfigUISchema | null;
29
53
  /**
30
- * Re-parse a flat `ConfigFormBuilder` patch into a
31
- * `RecordingOnboardPatch`-shaped object.
32
- *
33
- * Returns only the keys the patch actually carried. The windows key is
34
- * all-or-nothing on purpose: the field is a single editable array, so
35
- * its presence means the operator submitted the COMPLETE window set. A
36
- * row that cannot be read is DROPPED and the remaining set is still
37
- * submitted — the provider then refuses or applies a set the operator
38
- * can see in the form, rather than the form and the camera silently
39
- * disagreeing about a row neither shows.
40
- */
54
+ * Re-parse a flat `ConfigFormBuilder` patch into a
55
+ * `RecordingOnboardPatch`-shaped object.
56
+ *
57
+ * Returns only the keys the patch actually carried. The windows key is
58
+ * all-or-nothing on purpose: the field is a single editable array, so
59
+ * its presence means the operator submitted the COMPLETE window set. A
60
+ * row that cannot be read is DROPPED and the remaining set is still
61
+ * submitted — the provider then refuses or applies a set the operator
62
+ * can see in the form, rather than the form and the camera silently
63
+ * disagreeing about a row neither shows.
64
+ */
41
65
  export declare function parseRecordingOnboardFormPatch(patch: Record<string, unknown>): Record<string, unknown>;
@@ -1,58 +1,58 @@
1
1
  /**
2
- * A removed device stays removed.
3
- *
4
- * `removeDevice` deletes the row and clears the device's config store, but
5
- * NOTHING stopped a write that was already on its way from putting the row
6
- * back: `registerDevice` upserts unconditionally (`upsertRegistration` doubles
7
- * as the INSERT), and `allocateDeviceId` mints a fresh row for any
8
- * `(addonId, stableId)` it cannot find. A live device object whose runner had
9
- * not finished tearing down — a probe retry, a reconcile, an accessory
10
- * re-register — therefore resurrected the row it had just lost, with its
11
- * construction-time name and type intact and its config GONE, because the
12
- * config was cleared by the removal and `registerDevice` does not write config.
13
- *
14
- * That is exactly the shell device 614 ("Videocamera studio") was left in on
15
- * 2026-09-05: row present, `config: {}`, `disabled: false`, `online: true`,
16
- * failing its provider's Zod schema on `host`/`password` at every boot for a
17
- * day. See D376.
18
- *
19
- * The fence is deliberately IN-MEMORY and short-lived. The race it closes is
20
- * a teardown that is seconds wide, in the one process that owns the rows; a
21
- * durable tombstone would be a second authority on "does this device exist"
22
- * and this repo has been burned by those. A deliberate re-add of the same
23
- * hardware (`createDevice` / `adoptDevice`) lifts the fence for that pair
24
- * explicitly, so an operator is never told "no" for their own action.
25
- */
2
+ * A removed device stays removed.
3
+ *
4
+ * `removeDevice` deletes the row and clears the device's config store, but
5
+ * NOTHING stopped a write that was already on its way from putting the row
6
+ * back: `registerDevice` upserts unconditionally (`upsertRegistration` doubles
7
+ * as the INSERT), and `allocateDeviceId` mints a fresh row for any
8
+ * `(addonId, stableId)` it cannot find. A live device object whose runner had
9
+ * not finished tearing down — a probe retry, a reconcile, an accessory
10
+ * re-register — therefore resurrected the row it had just lost, with its
11
+ * construction-time name and type intact and its config GONE, because the
12
+ * config was cleared by the removal and `registerDevice` does not write config.
13
+ *
14
+ * That is exactly the shell device 614 ("Videocamera studio") was left in on
15
+ * 2026-09-05: row present, `config: {}`, `disabled: false`, `online: true`,
16
+ * failing its provider's Zod schema on `host`/`password` at every boot for a
17
+ * day. See D376.
18
+ *
19
+ * The fence is deliberately IN-MEMORY and short-lived. The race it closes is
20
+ * a teardown that is seconds wide, in the one process that owns the rows; a
21
+ * durable tombstone would be a second authority on "does this device exist"
22
+ * and this repo has been burned by those. A deliberate re-add of the same
23
+ * hardware (`createDevice` / `adoptDevice`) lifts the fence for that pair
24
+ * explicitly, so an operator is never told "no" for their own action.
25
+ */
26
26
  /** How long a removed identity refuses to be re-created. */
27
27
  export declare const REMOVAL_FENCE_TTL_MS: number;
28
28
  export interface RemovalFenceEntry {
29
- readonly deviceId: number;
30
- readonly addonId: string;
31
- readonly stableId: string;
32
- readonly removedAt: number;
29
+ readonly deviceId: number;
30
+ readonly addonId: string;
31
+ readonly stableId: string;
32
+ readonly removedAt: number;
33
33
  }
34
34
  export interface RemovalFence {
35
- /** Record a completed removal. */
36
- record(entry: Omit<RemovalFenceEntry, 'removedAt'>): void;
37
- /** Is this numeric id fenced? */
38
- isIdFenced(deviceId: number): RemovalFenceEntry | null;
39
- /** Is this addon-facing identity fenced? */
40
- isPairFenced(addonId: string, stableId: string): RemovalFenceEntry | null;
41
- /** Lift the fence for one identity — an operator re-adding the device. */
42
- lift(addonId: string, stableId: string): void;
43
- /**
44
- * Run an operator-initiated create/adopt with the fence down.
45
- *
46
- * `createDevice` / `adoptDevice` do not know the stableId in advance — the
47
- * provider derives it from the hardware — so re-adding a camera that was
48
- * just deleted cannot lift a single pair. It suspends the whole fence for
49
- * the duration of the operator's own action instead, which is the one case
50
- * where "this identity was removed" must not win.
51
- */
52
- runUnfenced<T>(fn: () => Promise<T>): Promise<T>;
35
+ /** Record a completed removal. */
36
+ record(entry: Omit<RemovalFenceEntry, "removedAt">): void;
37
+ /** Is this numeric id fenced? */
38
+ isIdFenced(deviceId: number): RemovalFenceEntry | null;
39
+ /** Is this addon-facing identity fenced? */
40
+ isPairFenced(addonId: string, stableId: string): RemovalFenceEntry | null;
41
+ /** Lift the fence for one identity — an operator re-adding the device. */
42
+ lift(addonId: string, stableId: string): void;
43
+ /**
44
+ * Run an operator-initiated create/adopt with the fence down.
45
+ *
46
+ * `createDevice` / `adoptDevice` do not know the stableId in advance — the
47
+ * provider derives it from the hardware — so re-adding a camera that was
48
+ * just deleted cannot lift a single pair. It suspends the whole fence for
49
+ * the duration of the operator's own action instead, which is the one case
50
+ * where "this identity was removed" must not win.
51
+ */
52
+ runUnfenced<T>(fn: () => Promise<T>): Promise<T>;
53
53
  }
54
54
  export interface RemovalFenceOptions {
55
- readonly ttlMs?: number;
56
- readonly now?: () => number;
55
+ readonly ttlMs?: number;
56
+ readonly now?: () => number;
57
57
  }
58
58
  export declare function createRemovalFence(options?: RemovalFenceOptions): RemovalFence;