@camstack/system 1.2.390 → 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 -100
  307. package/dist/builtins/system-config/system-config.addon.js +37 -33
  308. package/dist/builtins/system-config/system-config.addon.mjs +37 -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,147 +1,147 @@
1
1
  /**
2
- * HubNodeRegistry — the single authority for which capabilities each
3
- * cluster node provides. Holds the union of node manifests delivered by
4
- * the D3 `$hub.registerNode` handshake; a node is dropped on
5
- * `$node.disconnected`. Pure data — no Moleculer, no timers, no scan.
6
- */
2
+ * HubNodeRegistry — the single authority for which capabilities each
3
+ * cluster node provides. Holds the union of node manifests delivered by
4
+ * the D3 `$hub.registerNode` handshake; a node is dropped on
5
+ * `$node.disconnected`. Pure data — no Moleculer, no timers, no scan.
6
+ */
7
7
  /**
8
- * A capability call function — routes a method call to a remote cap provider
9
- * via Moleculer. Moved here from `capability-bridge.ts` when that file was
10
- * deleted as part of the D3 clean-up (Task 11).
11
- */
8
+ * A capability call function — routes a method call to a remote cap provider
9
+ * via Moleculer. Moved here from `capability-bridge.ts` when that file was
10
+ * deleted as part of the D3 clean-up (Task 11).
11
+ */
12
12
  type CallFn = (method: string, params: unknown, targetNodeId?: string) => Promise<unknown>;
13
13
  /** One addon's contribution within a node's registration manifest. */
14
14
  interface RegisteredAddonManifest {
15
- readonly addonId: string;
16
- readonly capabilities: readonly string[];
15
+ readonly addonId: string;
16
+ readonly capabilities: readonly string[];
17
17
  }
18
18
  /**
19
- * One device-scoped native cap a node hosts, with the device ids that
20
- * registered it and the addonId of the registering addon. Device-scoped
21
- * native caps (`ctx.registerNativeCap` from a `BaseDevice` subclass) are
22
- * registered per device AFTER the node's system caps, once background device
23
- * restore completes — so the node re-handshakes carrying these once they are
24
- * known (D3 idempotent replace).
25
- *
26
- * `addonId` is required for the hub to build the correct Moleculer proxy
27
- * target (`<addonId>.native-provider.<capName>.<method>`). It replaces the
28
- * pull-based `syncWorkerNativeCaps` discovery sweep (Task 13).
29
- */
19
+ * One device-scoped native cap a node hosts, with the device ids that
20
+ * registered it and the addonId of the registering addon. Device-scoped
21
+ * native caps (`ctx.registerNativeCap` from a `BaseDevice` subclass) are
22
+ * registered per device AFTER the node's system caps, once background device
23
+ * restore completes — so the node re-handshakes carrying these once they are
24
+ * known (D3 idempotent replace).
25
+ *
26
+ * `addonId` is required for the hub to build the correct Moleculer proxy
27
+ * target (`<addonId>.native-provider.<capName>.<method>`). It replaces the
28
+ * pull-based `syncWorkerNativeCaps` discovery sweep (Task 13).
29
+ */
30
30
  interface RegisteredNativeCap {
31
- readonly capName: string;
32
- readonly addonId: string;
33
- readonly deviceIds: readonly number[];
31
+ readonly capName: string;
32
+ readonly addonId: string;
33
+ readonly deviceIds: readonly number[];
34
34
  }
35
35
  /**
36
- * A node's runtime-updatable ROOT package identity (`@camstack/server` — the
37
- * single root package for every node role) — carried in the `registerNode`
38
- * manifest so the hub knows every node's exact software version (design:
39
- * runtime-updatable node packages, "visibility"). Version skew is SEEN in
40
- * the UI instead of discovered via a black-hole.
41
- */
36
+ * A node's runtime-updatable ROOT package identity (`@camstack/server` — the
37
+ * single root package for every node role) — carried in the `registerNode`
38
+ * manifest so the hub knows every node's exact software version (design:
39
+ * runtime-updatable node packages, "visibility"). Version skew is SEEN in
40
+ * the UI instead of discovered via a black-hole.
41
+ */
42
42
  interface NodeRootPackageInfo {
43
- readonly name: string;
44
- readonly version: string;
43
+ readonly name: string;
44
+ readonly version: string;
45
45
  }
46
46
  /** Payload of the `$hub.registerNode` RPC — a node's COMPLETE manifest. */
47
47
  interface RegisterNodeParams {
48
- readonly nodeId: string;
49
- readonly addons: readonly RegisteredAddonManifest[];
50
- /**
51
- * Device-scoped native caps the node hosts. Optional — absent (or empty)
52
- * on the FIRST handshake, populated by the re-handshake the node fires
53
- * after `runWorkerDeviceRestoreWithRetry` completes. Each entry includes
54
- * the registering `addonId` so the hub can build the correct Moleculer
55
- * proxy target without the pull-based discovery sweep (Task 13).
56
- */
57
- readonly nativeCaps?: readonly RegisteredNativeCap[];
58
- /**
59
- * SHA-256 hash of the node's cluster secret. Optional — absent
60
- * when the node has no secret configured. Verified by the `registerNode`
61
- * receiver; never carries the raw secret. (Cluster-secret registration gate.)
62
- */
63
- readonly clusterSecretHash?: string;
64
- /**
65
- * The node's root-package identity. Optional — absent from UDS child
66
- * manifests and pre-phase-2 agents; present on agents running the
67
- * runtime-updatable root model.
68
- */
69
- readonly rootPackage?: NodeRootPackageInfo;
48
+ readonly nodeId: string;
49
+ readonly addons: readonly RegisteredAddonManifest[];
50
+ /**
51
+ * Device-scoped native caps the node hosts. Optional — absent (or empty)
52
+ * on the FIRST handshake, populated by the re-handshake the node fires
53
+ * after `runWorkerDeviceRestoreWithRetry` completes. Each entry includes
54
+ * the registering `addonId` so the hub can build the correct Moleculer
55
+ * proxy target without the pull-based discovery sweep (Task 13).
56
+ */
57
+ readonly nativeCaps?: readonly RegisteredNativeCap[];
58
+ /**
59
+ * SHA-256 hash of the node's cluster secret. Optional — absent
60
+ * when the node has no secret configured. Verified by the `registerNode`
61
+ * receiver; never carries the raw secret. (Cluster-secret registration gate.)
62
+ */
63
+ readonly clusterSecretHash?: string;
64
+ /**
65
+ * The node's root-package identity. Optional — absent from UDS child
66
+ * manifests and pre-phase-2 agents; present on agents running the
67
+ * runtime-updatable root model.
68
+ */
69
+ readonly rootPackage?: NodeRootPackageInfo;
70
70
  }
71
71
  /** Ack returned by `$hub.registerNode` — presence of `ok` is the signal. */
72
72
  interface RegisterNodeResult {
73
- readonly ok: true;
73
+ readonly ok: true;
74
74
  }
75
75
  /** Flattened registry view: one row per (node, addon, capability). */
76
76
  interface NodeCapEntry {
77
- readonly nodeId: string;
78
- readonly addonId: string;
79
- readonly capName: string;
77
+ readonly nodeId: string;
78
+ readonly addonId: string;
79
+ readonly capName: string;
80
80
  }
81
81
  /** Flattened native-cap view: one row per (node, native cap, device). */
82
82
  interface NodeNativeCapEntry {
83
- readonly nodeId: string;
84
- readonly addonId: string;
85
- readonly capName: string;
86
- readonly deviceId: number;
83
+ readonly nodeId: string;
84
+ readonly addonId: string;
85
+ readonly capName: string;
86
+ readonly deviceId: number;
87
87
  }
88
88
  declare class HubNodeRegistry {
89
- /** nodeId → its complete addon manifest (last `registerNode` wins). */
90
- private readonly nodes;
91
- /** nodeId → its device-scoped native caps (last `registerNode` wins). */
92
- private readonly nativeCaps;
93
- /** nodeId → its root-package identity (last `registerNode` wins). */
94
- private readonly rootPackages;
95
- /**
96
- * deviceId → flat native-cap entries for THAT device, across all nodes.
97
- * Maintained incrementally on every `registerNode`/`removeNode` so a
98
- * per-device lookup is O(caps-for-device) instead of flattening the whole
99
- * cluster (`listNativeCapEntries()`) and filtering — the latter makes the
100
- * per-device `getBindings`, run for every device in `getAllBindings`, an
101
- * O(D²·C) boot-time hot spot. Insertion order mirrors `listNativeCapEntries`
102
- * (node-registration order) so consumers that take the first match are
103
- * unaffected.
104
- */
105
- private readonly nativeCapsByDevice;
106
- /**
107
- * Drop every `nativeCapsByDevice` entry contributed by `nodeId`, reading the
108
- * node's CURRENT (about-to-be-replaced) native caps to know which device
109
- * rows it touched. Must run BEFORE `nativeCaps` is overwritten/deleted.
110
- */
111
- private dropNodeFromDeviceIndex;
112
- /**
113
- * Replace the node's ENTIRE manifest atomically — addons AND native
114
- * caps. Idempotent: a reconnect, hot-update, or post-device-restore
115
- * re-handshake simply overwrites. Partial state is impossible because
116
- * the node sends its complete picture every time.
117
- */
118
- registerNode(params: RegisterNodeParams): void;
119
- /** Drop a node entirely — caps AND native caps — on `$node.disconnected`. */
120
- removeNode(nodeId: string): void;
121
- /** The node's root-package identity, or null when it never reported one. */
122
- getNodeRootPackage(nodeId: string): NodeRootPackageInfo | null;
123
- /** The node's manifest, or undefined when the node never registered. */
124
- getNodeManifest(nodeId: string): readonly RegisteredAddonManifest[] | undefined;
125
- /**
126
- * The node's device-scoped native caps. `[]` when the node registered
127
- * without any (or has not yet re-handshaked post-device-restore);
128
- * `undefined` when the node never registered at all.
129
- */
130
- getNodeNativeCaps(nodeId: string): readonly RegisteredNativeCap[] | undefined;
131
- /** Flat (nodeId, addonId, capName) view of the whole cluster. */
132
- listEntries(): readonly NodeCapEntry[];
133
- /** Flat (nodeId, addonId, capName, deviceId) native-cap view of the whole cluster. */
134
- listNativeCapEntries(): readonly NodeNativeCapEntry[];
135
- /**
136
- * Native-cap entries for ONE device, across all nodes — O(caps-for-device).
137
- * Equivalent to `listNativeCapEntries().filter(e => e.deviceId === deviceId)`
138
- * but served from the incrementally-maintained `nativeCapsByDevice` index, so
139
- * per-device resolution (and `getAllBindings`, which runs it per device)
140
- * doesn't flatten the whole cluster each call.
141
- */
142
- listNativeCapEntriesForDevice(deviceId: number): readonly NodeNativeCapEntry[];
143
- /** Every node id currently registered. */
144
- listNodeIds(): readonly string[];
89
+ /** nodeId → its complete addon manifest (last `registerNode` wins). */
90
+ private readonly nodes;
91
+ /** nodeId → its device-scoped native caps (last `registerNode` wins). */
92
+ private readonly nativeCaps;
93
+ /** nodeId → its root-package identity (last `registerNode` wins). */
94
+ private readonly rootPackages;
95
+ /**
96
+ * deviceId → flat native-cap entries for THAT device, across all nodes.
97
+ * Maintained incrementally on every `registerNode`/`removeNode` so a
98
+ * per-device lookup is O(caps-for-device) instead of flattening the whole
99
+ * cluster (`listNativeCapEntries()`) and filtering — the latter makes the
100
+ * per-device `getBindings`, run for every device in `getAllBindings`, an
101
+ * O(D²·C) boot-time hot spot. Insertion order mirrors `listNativeCapEntries`
102
+ * (node-registration order) so consumers that take the first match are
103
+ * unaffected.
104
+ */
105
+ private readonly nativeCapsByDevice;
106
+ /**
107
+ * Drop every `nativeCapsByDevice` entry contributed by `nodeId`, reading the
108
+ * node's CURRENT (about-to-be-replaced) native caps to know which device
109
+ * rows it touched. Must run BEFORE `nativeCaps` is overwritten/deleted.
110
+ */
111
+ private dropNodeFromDeviceIndex;
112
+ /**
113
+ * Replace the node's ENTIRE manifest atomically — addons AND native
114
+ * caps. Idempotent: a reconnect, hot-update, or post-device-restore
115
+ * re-handshake simply overwrites. Partial state is impossible because
116
+ * the node sends its complete picture every time.
117
+ */
118
+ registerNode(params: RegisterNodeParams): void;
119
+ /** Drop a node entirely — caps AND native caps — on `$node.disconnected`. */
120
+ removeNode(nodeId: string): void;
121
+ /** The node's root-package identity, or null when it never reported one. */
122
+ getNodeRootPackage(nodeId: string): NodeRootPackageInfo | null;
123
+ /** The node's manifest, or undefined when the node never registered. */
124
+ getNodeManifest(nodeId: string): readonly RegisteredAddonManifest[] | undefined;
125
+ /**
126
+ * The node's device-scoped native caps. `[]` when the node registered
127
+ * without any (or has not yet re-handshaked post-device-restore);
128
+ * `undefined` when the node never registered at all.
129
+ */
130
+ getNodeNativeCaps(nodeId: string): readonly RegisteredNativeCap[] | undefined;
131
+ /** Flat (nodeId, addonId, capName) view of the whole cluster. */
132
+ listEntries(): readonly NodeCapEntry[];
133
+ /** Flat (nodeId, addonId, capName, deviceId) native-cap view of the whole cluster. */
134
+ listNativeCapEntries(): readonly NodeNativeCapEntry[];
135
+ /**
136
+ * Native-cap entries for ONE device, across all nodes — O(caps-for-device).
137
+ * Equivalent to `listNativeCapEntries().filter(e => e.deviceId === deviceId)`
138
+ * but served from the incrementally-maintained `nativeCapsByDevice` index, so
139
+ * per-device resolution (and `getAllBindings`, which runs it per device)
140
+ * doesn't flatten the whole cluster each call.
141
+ */
142
+ listNativeCapEntriesForDevice(deviceId: number): readonly NodeNativeCapEntry[];
143
+ /** Every node id currently registered. */
144
+ listNodeIds(): readonly string[];
145
145
  }
146
146
  export { HubNodeRegistry };
147
- export type { CallFn, NodeRootPackageInfo, RegisteredAddonManifest, RegisteredNativeCap, RegisterNodeParams, RegisterNodeResult, NodeCapEntry, NodeNativeCapEntry, };
147
+ export type { CallFn, NodeRootPackageInfo, RegisteredAddonManifest, RegisteredNativeCap, RegisterNodeParams, RegisterNodeResult, NodeCapEntry, NodeNativeCapEntry };
@@ -1,4 +1,4 @@
1
- import { ServiceBroker } from 'moleculer';
2
- import { IAddonProcessManager } from '@camstack/types';
1
+ import type { ServiceBroker } from "moleculer";
2
+ import type { IAddonProcessManager } from "@camstack/types";
3
3
  declare function createScopedProcessManager(broker: ServiceBroker, addonId: string): IAddonProcessManager;
4
4
  export { createScopedProcessManager };
@@ -1,185 +1,185 @@
1
- import { ChildProcess, SpawnOptions } from 'node:child_process';
2
- import { ServiceSchema } from 'moleculer';
3
- import { ProcessGroupOps } from './runner-process-group.js';
1
+ import { type ChildProcess, type SpawnOptions } from "node:child_process";
2
+ import type { ServiceSchema } from "moleculer";
3
+ import { type ProcessGroupOps } from "./runner-process-group.js";
4
4
  /** One addon hosted inside a runner subprocess. */
5
5
  interface RunnerAddonSpec {
6
- readonly addonId: string;
7
- readonly addonDir: string;
6
+ readonly addonId: string;
7
+ readonly addonDir: string;
8
8
  }
9
9
  /**
10
- * Default old-space ceiling for a HEAVY runner, in MB.
11
- *
12
- * ## Why a heavy runner needs a ceiling at all
13
- *
14
- * `heapProfile: 'heavy'` used to mean "V8 defaults", i.e. no `--max-old-space-size` — which on this
15
- * host is V8's own memory-derived default (multiple GB). Nothing then bounds a burst, and V8 does
16
- * not hand committed pages back (the long argument for that is in `kernel/heap-watch.ts`), so a
17
- * one-off burst becomes the runner's permanent RSS.
18
- *
19
- * Measured on the live hub, 2026-08-17: the `recorder` runner reaches **2122 MB RSS** and stays
20
- * there. The same addon on two agent nodes carrying the same code and a smaller archive sits at
21
- * **58 MB**.
22
- *
23
- * ⚠ This paragraph used to attribute that ~2 GB to "walk garbage" from the deferred archive walk,
24
- * and to argue from a ~21 MB `RecordingIndex`. Both were wrong, and the error cost a session on
25
- * 2026-08-27. The deferred walk had NO CALLER and never ran (it has since been deleted). And the
26
- * index is not 21 MB: a 2026-08-27 profile of the live recorder read `heapUsed = 1606 MB` against
27
- * `external = 8 MB`, with an `smaps` census putting 1510 MB in V8's 256 KB page ranges against
28
- * 54 MB of native heap — LIVE JavaScript retainers, not high-water garbage. The retained set is
29
- * ~7.1 M `SegmentRow`s plus their path strings and Map entries (13 cameras x 2 profiles x 8 640
30
- * segments/day x ~30 days), reseeded at boot by `SegmentHourLedger.hydrateIndex`.
31
- *
32
- * The lesson for anyone sizing this flag: a heap number needs a RETAINER, and "garbage the GC has
33
- * no reason to collect" is the explanation to reach for last, not first.
34
- *
35
- * ## Why 1024
36
- *
37
- * From the same live topology snapshot, every heavy runner's FULL RSS — which is a strict
38
- * over-estimate of its old space, since it also contains native allocations, `external` and
39
- * `arrayBuffers`, none of which `--max-old-space-size` bounds:
40
- *
41
- * detection 471 MB · provider-reolink 507 MB · pipeline-orchestrator 238 MB · ml 218 MB ·
42
- * snapshot 185 MB · decoder-nodeav 174 MB · audio-analyzer 170 MB
43
- *
44
- * 1024 MB clears the largest of those by ~2x while cutting the recorder's observed ratchet by
45
- * more than half. It is a CEILING, not a target: a runner that fits today keeps behaving exactly
46
- * as it does now, because V8 only collects harder as it approaches the limit.
47
- *
48
- * A runner whose working set genuinely does not fit declares its own number in its manifest
49
- * (`execution.maxOldSpaceMb`) — the number belongs next to the addon that knows its working set.
50
- * `recorder` (3072 MB; peak 2341 MB heapTotal) is the one shipped addon that does. `stream-broker` does NOT, despite 1585 MB peak RSS: ~1 GB of that is
51
- * `arrayBuffers` (47 RTP rings), which this flag does not bound and never will — its actual old
52
- * space peaks at 224 MB. Size the declaration from `heapTotal` in the `[mem]` heartbeat, never
53
- * from RSS.
54
- *
55
- * ## What this flag CANNOT do
56
- *
57
- * It bounds old space and nothing else — not `external`, not `arrayBuffers`, not what a native
58
- * addon mallocs. `hub/pipeline-analytics` reached 7334 MB RSS with this flag set to 1024 the
59
- * whole time, because 96% of it was native. That half is bounded in `runner-native-allocator.ts`.
60
- * Reaching for a bigger number here when RSS is the complaint is the standard wrong move.
61
- */
10
+ * Default old-space ceiling for a HEAVY runner, in MB.
11
+ *
12
+ * ## Why a heavy runner needs a ceiling at all
13
+ *
14
+ * `heapProfile: 'heavy'` used to mean "V8 defaults", i.e. no `--max-old-space-size` — which on this
15
+ * host is V8's own memory-derived default (multiple GB). Nothing then bounds a burst, and V8 does
16
+ * not hand committed pages back (the long argument for that is in `kernel/heap-watch.ts`), so a
17
+ * one-off burst becomes the runner's permanent RSS.
18
+ *
19
+ * Measured on the live hub, 2026-08-17: the `recorder` runner reaches **2122 MB RSS** and stays
20
+ * there. The same addon on two agent nodes carrying the same code and a smaller archive sits at
21
+ * **58 MB**.
22
+ *
23
+ * ⚠ This paragraph used to attribute that ~2 GB to "walk garbage" from the deferred archive walk,
24
+ * and to argue from a ~21 MB `RecordingIndex`. Both were wrong, and the error cost a session on
25
+ * 2026-08-27. The deferred walk had NO CALLER and never ran (it has since been deleted). And the
26
+ * index is not 21 MB: a 2026-08-27 profile of the live recorder read `heapUsed = 1606 MB` against
27
+ * `external = 8 MB`, with an `smaps` census putting 1510 MB in V8's 256 KB page ranges against
28
+ * 54 MB of native heap — LIVE JavaScript retainers, not high-water garbage. The retained set is
29
+ * ~7.1 M `SegmentRow`s plus their path strings and Map entries (13 cameras x 2 profiles x 8 640
30
+ * segments/day x ~30 days), reseeded at boot by `SegmentHourLedger.hydrateIndex`.
31
+ *
32
+ * The lesson for anyone sizing this flag: a heap number needs a RETAINER, and "garbage the GC has
33
+ * no reason to collect" is the explanation to reach for last, not first.
34
+ *
35
+ * ## Why 1024
36
+ *
37
+ * From the same live topology snapshot, every heavy runner's FULL RSS — which is a strict
38
+ * over-estimate of its old space, since it also contains native allocations, `external` and
39
+ * `arrayBuffers`, none of which `--max-old-space-size` bounds:
40
+ *
41
+ * detection 471 MB · provider-reolink 507 MB · pipeline-orchestrator 238 MB · ml 218 MB ·
42
+ * snapshot 185 MB · decoder-nodeav 174 MB · audio-analyzer 170 MB
43
+ *
44
+ * 1024 MB clears the largest of those by ~2x while cutting the recorder's observed ratchet by
45
+ * more than half. It is a CEILING, not a target: a runner that fits today keeps behaving exactly
46
+ * as it does now, because V8 only collects harder as it approaches the limit.
47
+ *
48
+ * A runner whose working set genuinely does not fit declares its own number in its manifest
49
+ * (`execution.maxOldSpaceMb`) — the number belongs next to the addon that knows its working set.
50
+ * `recorder` (3072 MB; peak 2341 MB heapTotal) is the one shipped addon that does. `stream-broker` does NOT, despite 1585 MB peak RSS: ~1 GB of that is
51
+ * `arrayBuffers` (47 RTP rings), which this flag does not bound and never will — its actual old
52
+ * space peaks at 224 MB. Size the declaration from `heapTotal` in the `[mem]` heartbeat, never
53
+ * from RSS.
54
+ *
55
+ * ## What this flag CANNOT do
56
+ *
57
+ * It bounds old space and nothing else — not `external`, not `arrayBuffers`, not what a native
58
+ * addon mallocs. `hub/pipeline-analytics` reached 7334 MB RSS with this flag set to 1024 the
59
+ * whole time, because 96% of it was native. That half is bounded in `runner-native-allocator.ts`.
60
+ * Reaching for a bigger number here when RSS is the complaint is the standard wrong move.
61
+ */
62
62
  export declare const HEAVY_MAX_OLD_MB_DEFAULT = 1024;
63
63
  /**
64
- * V8 platform worker threads for a LIGHT runner (`--v8-pool-size`).
65
- *
66
- * ## What this bounds
67
- *
68
- * Node gives every process a V8 platform thread pool — background compilation,
69
- * parallel marking and sweeping — defaulted to 4. It is not the libuv pool
70
- * (`UV_THREADPOOL_SIZE`, which serves `fs`/`dns`/`zlib`/`crypto`) and it is
71
- * deliberately not touched here; see below.
72
- *
73
- * ## Why it is worth a flag
74
- *
75
- * A container cgroup counts THREADS, not processes, and this cluster forks a
76
- * runner per addon (D2). Measured on the live hub 2026-09-18 (20 cores,
77
- * `pids.max=2048`), after 22 fork refusals in 45 minutes earlier that day:
78
- *
79
- * pids.current 991 · 47 node processes holding 469 threads
80
- * of those, 29 LIGHT runners holding 274 (mean 9.4 threads each)
81
- *
82
- * A light runner is a control-plane addon with a 2 MB young generation. It does
83
- * not generate the background GC work four marking threads exist for, and it
84
- * pays 4 threads of the cgroup's pid budget for them anyway. Two returns ~58
85
- * threads — ~6% of the container's live thread count — for background GC that
86
- * is, on these heaps, a few milliseconds a cycle.
87
- *
88
- * ## Why TWO and never ZERO
89
- *
90
- * `--v8-pool-size=0` does not disable the pool: it tells V8 to size it from the
91
- * detected parallelism. Measured locally 2026-09-18 on a node process holding
92
- * the libuv pool open:
93
- *
94
- * default 11 threads
95
- * --v8-pool-size=2 9 threads
96
- * --v8-pool-size=0 18 threads
97
- *
98
- * So the flag is only ever passed with a value of at least 1 — the same trap as
99
- * `MALLOC_ARENA_MAX=0` in `runner-native-allocator.ts`.
100
- *
101
- * ## What is deliberately NOT bounded
102
- *
103
- * HEAVY runners keep V8's default: they hold real heaps (the recorder declares
104
- * 3072 MB) where parallel marking is the difference between a pause and a stall.
105
- *
106
- * `UV_THREADPOOL_SIZE` is left alone on every runner. Its 4 threads are lazily
107
- * spawned, and the measurement above says most light runners have spawned all
108
- * four — i.e. they really do run concurrent `fs` work. Halving that would trade
109
- * ~58 more threads for serialized filesystem I/O in runners whose I/O profile
110
- * has not been measured, on a media system. A thread saving is not worth a
111
- * media gap.
112
- */
64
+ * V8 platform worker threads for a LIGHT runner (`--v8-pool-size`).
65
+ *
66
+ * ## What this bounds
67
+ *
68
+ * Node gives every process a V8 platform thread pool — background compilation,
69
+ * parallel marking and sweeping — defaulted to 4. It is not the libuv pool
70
+ * (`UV_THREADPOOL_SIZE`, which serves `fs`/`dns`/`zlib`/`crypto`) and it is
71
+ * deliberately not touched here; see below.
72
+ *
73
+ * ## Why it is worth a flag
74
+ *
75
+ * A container cgroup counts THREADS, not processes, and this cluster forks a
76
+ * runner per addon (D2). Measured on the live hub 2026-09-18 (20 cores,
77
+ * `pids.max=2048`), after 22 fork refusals in 45 minutes earlier that day:
78
+ *
79
+ * pids.current 991 · 47 node processes holding 469 threads
80
+ * of those, 29 LIGHT runners holding 274 (mean 9.4 threads each)
81
+ *
82
+ * A light runner is a control-plane addon with a 2 MB young generation. It does
83
+ * not generate the background GC work four marking threads exist for, and it
84
+ * pays 4 threads of the cgroup's pid budget for them anyway. Two returns ~58
85
+ * threads — ~6% of the container's live thread count — for background GC that
86
+ * is, on these heaps, a few milliseconds a cycle.
87
+ *
88
+ * ## Why TWO and never ZERO
89
+ *
90
+ * `--v8-pool-size=0` does not disable the pool: it tells V8 to size it from the
91
+ * detected parallelism. Measured locally 2026-09-18 on a node process holding
92
+ * the libuv pool open:
93
+ *
94
+ * default 11 threads
95
+ * --v8-pool-size=2 9 threads
96
+ * --v8-pool-size=0 18 threads
97
+ *
98
+ * So the flag is only ever passed with a value of at least 1 — the same trap as
99
+ * `MALLOC_ARENA_MAX=0` in `runner-native-allocator.ts`.
100
+ *
101
+ * ## What is deliberately NOT bounded
102
+ *
103
+ * HEAVY runners keep V8's default: they hold real heaps (the recorder declares
104
+ * 3072 MB) where parallel marking is the difference between a pause and a stall.
105
+ *
106
+ * `UV_THREADPOOL_SIZE` is left alone on every runner. Its 4 threads are lazily
107
+ * spawned, and the measurement above says most light runners have spawned all
108
+ * four — i.e. they really do run concurrent `fs` work. Halving that would trade
109
+ * ~58 more threads for serialized filesystem I/O in runners whose I/O profile
110
+ * has not been measured, on a media system. A thread saving is not worth a
111
+ * media gap.
112
+ */
113
113
  export declare const LIGHT_V8_POOL_SIZE_DEFAULT = 2;
114
114
  interface SpawnedProcess {
115
- readonly pid: number;
116
- readonly nodeId: string;
117
- readonly name: string;
118
- /**
119
- * Synthetic supervisor label `runner:${runnerId}` — the real list of
120
- * hosted addons lives on `runnerAddons`. The normal case is a size-1
121
- * `runnerAddons` array (one addon, one process); the media-pipeline
122
- * group is the sole multi-addon exception.
123
- */
124
- readonly addonId: string;
125
- readonly addonDir: string;
126
- /** Every addon hosted by this runner subprocess (size 1 in the normal case). */
127
- readonly runnerAddons: readonly RunnerAddonSpec[];
128
- readonly startedAt: number;
129
- restartCount: number;
130
- /**
131
- * Runner lifecycle state. `failed` is terminal — the D6 crash
132
- * circuit-breaker tripped (too many crashes inside `CRASH_WINDOW_MS`)
133
- * and the runner will NOT be respawned. `crashed` is transient — the
134
- * window between an exit and the next backoff respawn.
135
- */
136
- state: 'starting' | 'running' | 'stopping' | 'stopped' | 'crashed' | 'failed';
137
- child: ChildProcess;
138
- /** The runner leads its own process group (POSIX, D668); its pgid is its `pid`. */
139
- readonly ownsGroup: boolean;
140
- /** The reap of this runner's group, once started. Memoized: every exit path shares it. */
141
- groupReap: Promise<void> | null;
115
+ readonly pid: number;
116
+ readonly nodeId: string;
117
+ readonly name: string;
118
+ /**
119
+ * Synthetic supervisor label `runner:${runnerId}` — the real list of
120
+ * hosted addons lives on `runnerAddons`. The normal case is a size-1
121
+ * `runnerAddons` array (one addon, one process); the media-pipeline
122
+ * group is the sole multi-addon exception.
123
+ */
124
+ readonly addonId: string;
125
+ readonly addonDir: string;
126
+ /** Every addon hosted by this runner subprocess (size 1 in the normal case). */
127
+ readonly runnerAddons: readonly RunnerAddonSpec[];
128
+ readonly startedAt: number;
129
+ restartCount: number;
130
+ /**
131
+ * Runner lifecycle state. `failed` is terminal — the D6 crash
132
+ * circuit-breaker tripped (too many crashes inside `CRASH_WINDOW_MS`)
133
+ * and the runner will NOT be respawned. `crashed` is transient — the
134
+ * window between an exit and the next backoff respawn.
135
+ */
136
+ state: "starting" | "running" | "stopping" | "stopped" | "crashed" | "failed";
137
+ child: ChildProcess;
138
+ /** The runner leads its own process group (POSIX, D668); its pgid is its `pid`. */
139
+ readonly ownsGroup: boolean;
140
+ /** The reap of this runner's group, once started. Memoized: every exit path shares it. */
141
+ groupReap: Promise<void> | null;
142
142
  }
143
143
  interface ProcessInfo {
144
- readonly pid: number;
145
- readonly nodeId: string;
146
- readonly name: string;
147
- readonly addonId: string;
148
- /**
149
- * The full list of addon ids inside this runner subprocess. Size 1 in
150
- * the normal one-addon-one-process case; longer only for the media
151
- * group. Cluster page UI expands this to render every addon under the
152
- * same process card so operators see what's running where.
153
- */
154
- readonly addonIds: readonly string[];
155
- /** Runner label — the `runnerId` this subprocess was spawned with. */
156
- readonly groupId: string;
157
- readonly isolated: boolean;
158
- readonly spawnedBy: string | null;
159
- readonly startedAt: number;
160
- readonly restartCount: number;
161
- readonly state: string;
162
- readonly cpuPercent: number;
163
- readonly memoryRss: number;
164
- readonly uptimeSeconds: number;
144
+ readonly pid: number;
145
+ readonly nodeId: string;
146
+ readonly name: string;
147
+ readonly addonId: string;
148
+ /**
149
+ * The full list of addon ids inside this runner subprocess. Size 1 in
150
+ * the normal one-addon-one-process case; longer only for the media
151
+ * group. Cluster page UI expands this to render every addon under the
152
+ * same process card so operators see what's running where.
153
+ */
154
+ readonly addonIds: readonly string[];
155
+ /** Runner label — the `runnerId` this subprocess was spawned with. */
156
+ readonly groupId: string;
157
+ readonly isolated: boolean;
158
+ readonly spawnedBy: string | null;
159
+ readonly startedAt: number;
160
+ readonly restartCount: number;
161
+ readonly state: string;
162
+ readonly cpuPercent: number;
163
+ readonly memoryRss: number;
164
+ readonly uptimeSeconds: number;
165
165
  }
166
166
  /**
167
- * Subprocess spawner injected into `createProcessService`. Production
168
- * code passes `child_process.spawn`; tests pass a fake that records
169
- * the call shape and returns a stub `ChildProcess`. Centralising the
170
- * dependency here is the only ESM-safe way to intercept spawn — the
171
- * `node:child_process` module export is non-configurable so `vi.spyOn`
172
- * fails. The injection point is private to this module: callers don't
173
- * see it, so the public `createProcessService(parentNodeId, dataDir)`
174
- * shape stays unchanged.
175
- */
167
+ * Subprocess spawner injected into `createProcessService`. Production
168
+ * code passes `child_process.spawn`; tests pass a fake that records
169
+ * the call shape and returns a stub `ChildProcess`. Centralising the
170
+ * dependency here is the only ESM-safe way to intercept spawn — the
171
+ * `node:child_process` module export is non-configurable so `vi.spyOn`
172
+ * fails. The injection point is private to this module: callers don't
173
+ * see it, so the public `createProcessService(parentNodeId, dataDir)`
174
+ * shape stays unchanged.
175
+ */
176
176
  type SpawnFn = (command: string, args: readonly string[], opts: SpawnOptions) => ChildProcess;
177
177
  interface ProcessServiceDeps {
178
- readonly spawnFn?: SpawnFn;
179
- /** Group signalling + member listing. Tests inject a fake: a fake pid must never be signalled. */
180
- readonly processGroups?: ProcessGroupOps;
181
- /** Platform deciding whether a runner leads a process group. Defaults to `process.platform`. */
182
- readonly platform?: NodeJS.Platform;
178
+ readonly spawnFn?: SpawnFn;
179
+ /** Group signalling + member listing. Tests inject a fake: a fake pid must never be signalled. */
180
+ readonly processGroups?: ProcessGroupOps;
181
+ /** Platform deciding whether a runner leads a process group. Defaults to `process.platform`. */
182
+ readonly platform?: NodeJS.Platform;
183
183
  }
184
184
  declare function createProcessService(parentNodeId: string, dataDir: string, deps?: ProcessServiceDeps, parentTcpPort?: number, parentUdsPath?: string): ServiceSchema;
185
185
  export type { ProcessInfo, SpawnedProcess };