@camstack/types 0.1.14 → 0.1.16

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 (467) hide show
  1. package/dist/addon/base-addon.d.ts +262 -0
  2. package/dist/addon/base-addon.d.ts.map +1 -0
  3. package/dist/auth-records-BDg37fy9.mjs +8297 -0
  4. package/dist/auth-records-BDg37fy9.mjs.map +1 -0
  5. package/dist/auth-records-D5ZNaUos.js +8296 -0
  6. package/dist/auth-records-D5ZNaUos.js.map +1 -0
  7. package/dist/capabilities/accessories.cap.d.ts +42 -0
  8. package/dist/capabilities/accessories.cap.d.ts.map +1 -0
  9. package/dist/capabilities/addon-pages-source.cap.d.ts +41 -0
  10. package/dist/capabilities/addon-pages-source.cap.d.ts.map +1 -0
  11. package/dist/capabilities/addon-pages.cap.d.ts +36 -0
  12. package/dist/capabilities/addon-pages.cap.d.ts.map +1 -0
  13. package/dist/capabilities/addon-routes.cap.d.ts +22 -0
  14. package/dist/capabilities/addon-routes.cap.d.ts.map +1 -0
  15. package/dist/capabilities/addon-settings.cap.d.ts +170 -0
  16. package/dist/capabilities/addon-settings.cap.d.ts.map +1 -0
  17. package/dist/capabilities/addon-widgets-source.cap.d.ts +103 -0
  18. package/dist/capabilities/addon-widgets-source.cap.d.ts.map +1 -0
  19. package/dist/capabilities/addon-widgets.cap.d.ts +98 -0
  20. package/dist/capabilities/addon-widgets.cap.d.ts.map +1 -0
  21. package/dist/capabilities/addons.cap.d.ts +356 -0
  22. package/dist/capabilities/addons.cap.d.ts.map +1 -0
  23. package/dist/capabilities/admin-ui.cap.d.ts +14 -0
  24. package/dist/capabilities/admin-ui.cap.d.ts.map +1 -0
  25. package/dist/capabilities/advanced-notifier.cap.d.ts +60 -0
  26. package/dist/capabilities/advanced-notifier.cap.d.ts.map +1 -0
  27. package/dist/capabilities/alerts.cap.d.ts +164 -0
  28. package/dist/capabilities/alerts.cap.d.ts.map +1 -0
  29. package/dist/capabilities/audio-analysis.cap.d.ts +46 -0
  30. package/dist/capabilities/audio-analysis.cap.d.ts.map +1 -0
  31. package/dist/capabilities/audio-analyzer.cap.d.ts +148 -0
  32. package/dist/capabilities/audio-analyzer.cap.d.ts.map +1 -0
  33. package/dist/capabilities/audio-codec.cap.d.ts +202 -0
  34. package/dist/capabilities/audio-codec.cap.d.ts.map +1 -0
  35. package/dist/capabilities/audio-metrics.cap.d.ts +174 -0
  36. package/dist/capabilities/audio-metrics.cap.d.ts.map +1 -0
  37. package/dist/capabilities/auth-provider.cap.d.ts +49 -0
  38. package/dist/capabilities/auth-provider.cap.d.ts.map +1 -0
  39. package/dist/capabilities/authentication.cap.d.ts +83 -0
  40. package/dist/capabilities/authentication.cap.d.ts.map +1 -0
  41. package/dist/capabilities/backup.cap.d.ts +269 -0
  42. package/dist/capabilities/backup.cap.d.ts.map +1 -0
  43. package/dist/capabilities/battery.cap.d.ts +85 -0
  44. package/dist/capabilities/battery.cap.d.ts.map +1 -0
  45. package/dist/capabilities/brightness.cap.d.ts +64 -0
  46. package/dist/capabilities/brightness.cap.d.ts.map +1 -0
  47. package/dist/capabilities/camera-credentials.cap.d.ts +102 -0
  48. package/dist/capabilities/camera-credentials.cap.d.ts.map +1 -0
  49. package/dist/capabilities/camera-streams.cap.d.ts +214 -0
  50. package/dist/capabilities/camera-streams.cap.d.ts.map +1 -0
  51. package/dist/capabilities/capability-definition.d.ts +474 -0
  52. package/dist/capabilities/capability-definition.d.ts.map +1 -0
  53. package/dist/capabilities/custom-actions.d.ts +47 -0
  54. package/dist/capabilities/custom-actions.d.ts.map +1 -0
  55. package/dist/capabilities/decoder.cap.d.ts +173 -0
  56. package/dist/capabilities/decoder.cap.d.ts.map +1 -0
  57. package/dist/capabilities/detection-pipeline.cap.d.ts +34 -0
  58. package/dist/capabilities/detection-pipeline.cap.d.ts.map +1 -0
  59. package/dist/capabilities/device-discovery.cap.d.ts +247 -0
  60. package/dist/capabilities/device-discovery.cap.d.ts.map +1 -0
  61. package/dist/capabilities/device-manager.cap.d.ts +709 -0
  62. package/dist/capabilities/device-manager.cap.d.ts.map +1 -0
  63. package/dist/capabilities/device-ops.cap.d.ts +87 -0
  64. package/dist/capabilities/device-ops.cap.d.ts.map +1 -0
  65. package/dist/capabilities/device-provider.cap.d.ts +151 -0
  66. package/dist/capabilities/device-provider.cap.d.ts.map +1 -0
  67. package/dist/capabilities/device-state.cap.d.ts +97 -0
  68. package/dist/capabilities/device-state.cap.d.ts.map +1 -0
  69. package/dist/capabilities/device-status.cap.d.ts +54 -0
  70. package/dist/capabilities/device-status.cap.d.ts.map +1 -0
  71. package/dist/capabilities/doorbell.cap.d.ts +62 -0
  72. package/dist/capabilities/doorbell.cap.d.ts.map +1 -0
  73. package/dist/capabilities/embedding-encoder.cap.d.ts +41 -0
  74. package/dist/capabilities/embedding-encoder.cap.d.ts.map +1 -0
  75. package/dist/capabilities/events.cap.d.ts +48 -0
  76. package/dist/capabilities/events.cap.d.ts.map +1 -0
  77. package/dist/capabilities/feature-probe.cap.d.ts +79 -0
  78. package/dist/capabilities/feature-probe.cap.d.ts.map +1 -0
  79. package/dist/capabilities/index.d.ts +191 -0
  80. package/dist/capabilities/index.d.ts.map +1 -0
  81. package/dist/capabilities/integrations.cap.d.ts +182 -0
  82. package/dist/capabilities/integrations.cap.d.ts.map +1 -0
  83. package/dist/capabilities/intercom.cap.d.ts +108 -0
  84. package/dist/capabilities/intercom.cap.d.ts.map +1 -0
  85. package/dist/capabilities/local-network.cap.d.ts +216 -0
  86. package/dist/capabilities/local-network.cap.d.ts.map +1 -0
  87. package/dist/capabilities/log-destination.cap.d.ts +70 -0
  88. package/dist/capabilities/log-destination.cap.d.ts.map +1 -0
  89. package/dist/capabilities/mesh-network.cap.d.ts +160 -0
  90. package/dist/capabilities/mesh-network.cap.d.ts.map +1 -0
  91. package/dist/capabilities/mesh-orchestrator.cap.d.ts +96 -0
  92. package/dist/capabilities/mesh-orchestrator.cap.d.ts.map +1 -0
  93. package/dist/capabilities/metrics-provider.cap.d.ts +522 -0
  94. package/dist/capabilities/metrics-provider.cap.d.ts.map +1 -0
  95. package/dist/capabilities/motion-detection.cap.d.ts +107 -0
  96. package/dist/capabilities/motion-detection.cap.d.ts.map +1 -0
  97. package/dist/capabilities/motion-trigger.cap.d.ts +78 -0
  98. package/dist/capabilities/motion-trigger.cap.d.ts.map +1 -0
  99. package/dist/capabilities/motion.cap.d.ts +122 -0
  100. package/dist/capabilities/motion.cap.d.ts.map +1 -0
  101. package/dist/capabilities/native-object-detection.cap.d.ts +127 -0
  102. package/dist/capabilities/native-object-detection.cap.d.ts.map +1 -0
  103. package/dist/capabilities/network-access.cap.d.ts +67 -0
  104. package/dist/capabilities/network-access.cap.d.ts.map +1 -0
  105. package/dist/capabilities/network-quality.cap.d.ts +95 -0
  106. package/dist/capabilities/network-quality.cap.d.ts.map +1 -0
  107. package/dist/capabilities/nodes.cap.d.ts +200 -0
  108. package/dist/capabilities/nodes.cap.d.ts.map +1 -0
  109. package/dist/capabilities/notification-output.cap.d.ts +44 -0
  110. package/dist/capabilities/notification-output.cap.d.ts.map +1 -0
  111. package/dist/capabilities/osd.cap.d.ts +236 -0
  112. package/dist/capabilities/osd.cap.d.ts.map +1 -0
  113. package/dist/capabilities/pipeline-analytics.cap.d.ts +501 -0
  114. package/dist/capabilities/pipeline-analytics.cap.d.ts.map +1 -0
  115. package/dist/capabilities/pipeline-executor.cap.d.ts +922 -0
  116. package/dist/capabilities/pipeline-executor.cap.d.ts.map +1 -0
  117. package/dist/capabilities/pipeline-orchestrator.cap.d.ts +793 -0
  118. package/dist/capabilities/pipeline-orchestrator.cap.d.ts.map +1 -0
  119. package/dist/capabilities/pipeline-runner.cap.d.ts +393 -0
  120. package/dist/capabilities/pipeline-runner.cap.d.ts.map +1 -0
  121. package/dist/capabilities/platform-probe.cap.d.ts +168 -0
  122. package/dist/capabilities/platform-probe.cap.d.ts.map +1 -0
  123. package/dist/capabilities/ptz-autotrack.cap.d.ts +188 -0
  124. package/dist/capabilities/ptz-autotrack.cap.d.ts.map +1 -0
  125. package/dist/capabilities/ptz.cap.d.ts +80 -0
  126. package/dist/capabilities/ptz.cap.d.ts.map +1 -0
  127. package/dist/capabilities/reboot.cap.d.ts +32 -0
  128. package/dist/capabilities/reboot.cap.d.ts.map +1 -0
  129. package/dist/capabilities/recording-engine.cap.d.ts +477 -0
  130. package/dist/capabilities/recording-engine.cap.d.ts.map +1 -0
  131. package/dist/capabilities/recording.cap.d.ts +43 -0
  132. package/dist/capabilities/recording.cap.d.ts.map +1 -0
  133. package/dist/capabilities/remote-access.cap.d.ts +103 -0
  134. package/dist/capabilities/remote-access.cap.d.ts.map +1 -0
  135. package/dist/capabilities/restreamer.cap.d.ts +51 -0
  136. package/dist/capabilities/restreamer.cap.d.ts.map +1 -0
  137. package/dist/capabilities/schemas/detection-shared.d.ts +63 -0
  138. package/dist/capabilities/schemas/detection-shared.d.ts.map +1 -0
  139. package/dist/capabilities/schemas/orchestrator-metrics.d.ts +44 -0
  140. package/dist/capabilities/schemas/orchestrator-metrics.d.ts.map +1 -0
  141. package/dist/capabilities/schemas/streaming-shared.d.ts +177 -0
  142. package/dist/capabilities/schemas/streaming-shared.d.ts.map +1 -0
  143. package/dist/capabilities/schemas/zone-rule.d.ts +74 -0
  144. package/dist/capabilities/schemas/zone-rule.d.ts.map +1 -0
  145. package/dist/capabilities/settings-store.cap.d.ts +198 -0
  146. package/dist/capabilities/settings-store.cap.d.ts.map +1 -0
  147. package/dist/capabilities/snapshot-provider.cap.d.ts +40 -0
  148. package/dist/capabilities/snapshot-provider.cap.d.ts.map +1 -0
  149. package/dist/capabilities/snapshot.cap.d.ts +78 -0
  150. package/dist/capabilities/snapshot.cap.d.ts.map +1 -0
  151. package/dist/capabilities/storage-provider.cap.d.ts +432 -0
  152. package/dist/capabilities/storage-provider.cap.d.ts.map +1 -0
  153. package/dist/capabilities/storage.cap.d.ts +367 -0
  154. package/dist/capabilities/storage.cap.d.ts.map +1 -0
  155. package/dist/capabilities/stream-broker.cap.d.ts +416 -0
  156. package/dist/capabilities/stream-broker.cap.d.ts.map +1 -0
  157. package/dist/capabilities/streaming-engine.cap.d.ts +58 -0
  158. package/dist/capabilities/streaming-engine.cap.d.ts.map +1 -0
  159. package/dist/capabilities/switch.cap.d.ts +66 -0
  160. package/dist/capabilities/switch.cap.d.ts.map +1 -0
  161. package/dist/capabilities/system.cap.d.ts +86 -0
  162. package/dist/capabilities/system.cap.d.ts.map +1 -0
  163. package/dist/capabilities/toast.cap.d.ts +56 -0
  164. package/dist/capabilities/toast.cap.d.ts.map +1 -0
  165. package/dist/capabilities/turn-orchestrator.cap.d.ts +74 -0
  166. package/dist/capabilities/turn-orchestrator.cap.d.ts.map +1 -0
  167. package/dist/capabilities/turn-provider.cap.d.ts +43 -0
  168. package/dist/capabilities/turn-provider.cap.d.ts.map +1 -0
  169. package/dist/capabilities/user-management.cap.d.ts +378 -0
  170. package/dist/capabilities/user-management.cap.d.ts.map +1 -0
  171. package/dist/capabilities/webrtc-session.cap.d.ts +181 -0
  172. package/dist/capabilities/webrtc-session.cap.d.ts.map +1 -0
  173. package/dist/capabilities/webrtc.cap.d.ts +72 -0
  174. package/dist/capabilities/webrtc.cap.d.ts.map +1 -0
  175. package/dist/capabilities/zone-analytics.cap.d.ts +213 -0
  176. package/dist/capabilities/zone-analytics.cap.d.ts.map +1 -0
  177. package/dist/capabilities/zone-rules.cap.d.ts +129 -0
  178. package/dist/capabilities/zone-rules.cap.d.ts.map +1 -0
  179. package/dist/capabilities/zones.cap.d.ts +151 -0
  180. package/dist/capabilities/zones.cap.d.ts.map +1 -0
  181. package/dist/catalogs/audio-classmap.d.ts +16 -0
  182. package/dist/catalogs/audio-classmap.d.ts.map +1 -0
  183. package/dist/catalogs/coco-classmap.d.ts.map +1 -1
  184. package/dist/constants.d.ts +50 -0
  185. package/dist/constants.d.ts.map +1 -1
  186. package/dist/deps/binary-downloader.d.ts +41 -0
  187. package/dist/deps/binary-downloader.d.ts.map +1 -0
  188. package/dist/deps/ffmpeg-downloader.d.ts +13 -0
  189. package/dist/deps/ffmpeg-downloader.d.ts.map +1 -0
  190. package/dist/deps/index.d.ts +4 -0
  191. package/dist/deps/index.d.ts.map +1 -0
  192. package/dist/deps/python-downloader.d.ts +34 -0
  193. package/dist/deps/python-downloader.d.ts.map +1 -0
  194. package/dist/device/accessory.d.ts +62 -0
  195. package/dist/device/accessory.d.ts.map +1 -0
  196. package/dist/device/base-device-provider.d.ts +178 -0
  197. package/dist/device/base-device-provider.d.ts.map +1 -0
  198. package/dist/device/base-device.d.ts +287 -0
  199. package/dist/device/base-device.d.ts.map +1 -0
  200. package/dist/device/camera-device.d.ts +49 -0
  201. package/dist/device/camera-device.d.ts.map +1 -0
  202. package/dist/device/device-binding.d.ts +23 -0
  203. package/dist/device/device-binding.d.ts.map +1 -0
  204. package/dist/device/device-config.d.ts +65 -0
  205. package/dist/device/device-config.d.ts.map +1 -0
  206. package/dist/device/device-context.d.ts +256 -0
  207. package/dist/device/device-context.d.ts.map +1 -0
  208. package/dist/device/device-management.d.ts +118 -0
  209. package/dist/device/device-management.d.ts.map +1 -0
  210. package/dist/device/device-profile.d.ts +161 -0
  211. package/dist/device/device-profile.d.ts.map +1 -0
  212. package/dist/device/device-runtime-state.d.ts +124 -0
  213. package/dist/device/device-runtime-state.d.ts.map +1 -0
  214. package/dist/device/device-state-handle.d.ts +161 -0
  215. package/dist/device/device-state-handle.d.ts.map +1 -0
  216. package/dist/device/device-type.d.ts +68 -0
  217. package/dist/device/device-type.d.ts.map +1 -0
  218. package/dist/device/device.d.ts +87 -0
  219. package/dist/device/device.d.ts.map +1 -0
  220. package/dist/device/features.d.ts +29 -0
  221. package/dist/device/features.d.ts.map +1 -0
  222. package/dist/device/index.d.ts +20 -0
  223. package/dist/device/index.d.ts.map +1 -0
  224. package/dist/device/runtime-state-helpers.d.ts +69 -0
  225. package/dist/device/runtime-state-helpers.d.ts.map +1 -0
  226. package/dist/device/system-mirror.d.ts +318 -0
  227. package/dist/device/system-mirror.d.ts.map +1 -0
  228. package/dist/device/zod-to-config-ui.d.ts +23 -0
  229. package/dist/device/zod-to-config-ui.d.ts.map +1 -0
  230. package/dist/disposer-chain.d.ts +32 -0
  231. package/dist/disposer-chain.d.ts.map +1 -0
  232. package/dist/enums/event-category.d.ts +361 -0
  233. package/dist/enums/event-category.d.ts.map +1 -0
  234. package/dist/enums/event-source-type.d.ts +8 -0
  235. package/dist/enums/event-source-type.d.ts.map +1 -0
  236. package/dist/enums/index.d.ts +3 -0
  237. package/dist/enums/index.d.ts.map +1 -0
  238. package/dist/generated/addon-api.d.ts +14604 -3217
  239. package/dist/generated/addon-api.d.ts.map +1 -1
  240. package/dist/generated/cap-status-types.d.ts +51 -0
  241. package/dist/generated/cap-status-types.d.ts.map +1 -0
  242. package/dist/generated/capability-router-map.d.ts +278 -0
  243. package/dist/generated/capability-router-map.d.ts.map +1 -0
  244. package/dist/generated/device-local-state.d.ts +82 -0
  245. package/dist/generated/device-local-state.d.ts.map +1 -0
  246. package/dist/generated/device-proxy.d.ts +146 -0
  247. package/dist/generated/device-proxy.d.ts.map +1 -0
  248. package/dist/generated/system-proxy.d.ts +92 -0
  249. package/dist/generated/system-proxy.d.ts.map +1 -0
  250. package/dist/helpers/bind-addon-actions.d.ts +19 -0
  251. package/dist/helpers/bind-addon-actions.d.ts.map +1 -0
  252. package/dist/index.d.ts +91 -22
  253. package/dist/index.d.ts.map +1 -1
  254. package/dist/index.js +4843 -477
  255. package/dist/index.js.map +1 -1
  256. package/dist/index.mjs +4832 -415
  257. package/dist/index.mjs.map +1 -1
  258. package/dist/interfaces/addon.d.ts +760 -132
  259. package/dist/interfaces/addon.d.ts.map +1 -1
  260. package/dist/interfaces/advanced-notifier.d.ts +3 -2
  261. package/dist/interfaces/advanced-notifier.d.ts.map +1 -1
  262. package/dist/interfaces/agent-protocol.d.ts +17 -173
  263. package/dist/interfaces/agent-protocol.d.ts.map +1 -1
  264. package/dist/interfaces/agent.d.ts +61 -0
  265. package/dist/interfaces/agent.d.ts.map +1 -1
  266. package/dist/interfaces/alerts.d.ts +14 -0
  267. package/dist/interfaces/alerts.d.ts.map +1 -0
  268. package/dist/interfaces/analysis-persistence.d.ts +37 -19
  269. package/dist/interfaces/analysis-persistence.d.ts.map +1 -1
  270. package/dist/interfaces/analysis.d.ts +33 -4
  271. package/dist/interfaces/analysis.d.ts.map +1 -1
  272. package/dist/interfaces/api-responses.d.ts +124 -0
  273. package/dist/interfaces/api-responses.d.ts.map +1 -0
  274. package/dist/interfaces/api-shared.d.ts +5 -79
  275. package/dist/interfaces/api-shared.d.ts.map +1 -1
  276. package/dist/interfaces/audio-analyzer.d.ts +49 -0
  277. package/dist/interfaces/audio-analyzer.d.ts.map +1 -0
  278. package/dist/interfaces/audio-codec.d.ts +123 -0
  279. package/dist/interfaces/audio-codec.d.ts.map +1 -0
  280. package/dist/interfaces/audio-inference-engine.d.ts +19 -0
  281. package/dist/interfaces/audio-inference-engine.d.ts.map +1 -0
  282. package/dist/interfaces/auth-provider.d.ts.map +1 -1
  283. package/dist/interfaces/auth.d.ts +4 -25
  284. package/dist/interfaces/auth.d.ts.map +1 -1
  285. package/dist/interfaces/camera-pipeline.d.ts +7 -20
  286. package/dist/interfaces/camera-pipeline.d.ts.map +1 -1
  287. package/dist/interfaces/capability.d.ts +171 -24
  288. package/dist/interfaces/capability.d.ts.map +1 -1
  289. package/dist/interfaces/config-ui.d.ts +746 -24
  290. package/dist/interfaces/config-ui.d.ts.map +1 -1
  291. package/dist/interfaces/context.d.ts +9 -4
  292. package/dist/interfaces/context.d.ts.map +1 -1
  293. package/dist/interfaces/decoder.d.ts +38 -3
  294. package/dist/interfaces/decoder.d.ts.map +1 -1
  295. package/dist/interfaces/detection-addon.d.ts +6 -6
  296. package/dist/interfaces/detection-addon.d.ts.map +1 -1
  297. package/dist/interfaces/device-capabilities/camera.d.ts +95 -18
  298. package/dist/interfaces/device-capabilities/camera.d.ts.map +1 -1
  299. package/dist/interfaces/device-capabilities/index.d.ts +0 -13
  300. package/dist/interfaces/device-capabilities/index.d.ts.map +1 -1
  301. package/dist/interfaces/device-provider.d.ts +18 -16
  302. package/dist/interfaces/device-provider.d.ts.map +1 -1
  303. package/dist/interfaces/device.d.ts +4 -21
  304. package/dist/interfaces/device.d.ts.map +1 -1
  305. package/dist/interfaces/embedding-encoder.d.ts +19 -0
  306. package/dist/interfaces/embedding-encoder.d.ts.map +1 -0
  307. package/dist/interfaces/engine-slots.d.ts +10 -0
  308. package/dist/interfaces/engine-slots.d.ts.map +1 -0
  309. package/dist/interfaces/event-bus.d.ts +710 -26
  310. package/dist/interfaces/event-bus.d.ts.map +1 -1
  311. package/dist/interfaces/inference-capabilities.d.ts +0 -17
  312. package/dist/interfaces/inference-capabilities.d.ts.map +1 -1
  313. package/dist/interfaces/inference-engine.d.ts +30 -10
  314. package/dist/interfaces/inference-engine.d.ts.map +1 -1
  315. package/dist/interfaces/integration-registry.d.ts +20 -20
  316. package/dist/interfaces/integration-registry.d.ts.map +1 -1
  317. package/dist/interfaces/kernel-abstractions.d.ts +83 -0
  318. package/dist/interfaces/kernel-abstractions.d.ts.map +1 -0
  319. package/dist/interfaces/logging.d.ts +89 -8
  320. package/dist/interfaces/logging.d.ts.map +1 -1
  321. package/dist/interfaces/metrics-provider.d.ts +17 -0
  322. package/dist/interfaces/metrics-provider.d.ts.map +1 -0
  323. package/dist/interfaces/network-quality.d.ts +4 -4
  324. package/dist/interfaces/network.d.ts +0 -16
  325. package/dist/interfaces/network.d.ts.map +1 -1
  326. package/dist/interfaces/notification.d.ts +1 -1
  327. package/dist/interfaces/pipeline-executor-capability.d.ts +200 -0
  328. package/dist/interfaces/pipeline-executor-capability.d.ts.map +1 -0
  329. package/dist/interfaces/pipeline-orchestrator-capability.d.ts +165 -0
  330. package/dist/interfaces/pipeline-orchestrator-capability.d.ts.map +1 -0
  331. package/dist/interfaces/pipeline-runner-capability.d.ts +147 -0
  332. package/dist/interfaces/pipeline-runner-capability.d.ts.map +1 -0
  333. package/dist/interfaces/pipeline-runner.d.ts +18 -2
  334. package/dist/interfaces/pipeline-runner.d.ts.map +1 -1
  335. package/dist/interfaces/platform.d.ts +1 -1
  336. package/dist/interfaces/platform.d.ts.map +1 -1
  337. package/dist/interfaces/queryable.d.ts +26 -0
  338. package/dist/interfaces/queryable.d.ts.map +1 -0
  339. package/dist/interfaces/raw-tensor-engine.d.ts +16 -0
  340. package/dist/interfaces/raw-tensor-engine.d.ts.map +1 -0
  341. package/dist/interfaces/readiness.d.ts +101 -0
  342. package/dist/interfaces/readiness.d.ts.map +1 -0
  343. package/dist/interfaces/repl.d.ts +1 -1
  344. package/dist/interfaces/restreamer.d.ts +3 -3
  345. package/dist/interfaces/scoped-token.d.ts +1 -21
  346. package/dist/interfaces/scoped-token.d.ts.map +1 -1
  347. package/dist/interfaces/server-analysis.d.ts +30 -87
  348. package/dist/interfaces/server-analysis.d.ts.map +1 -1
  349. package/dist/interfaces/storage-location.d.ts +120 -0
  350. package/dist/interfaces/storage-location.d.ts.map +1 -0
  351. package/dist/interfaces/storage.d.ts +124 -50
  352. package/dist/interfaces/storage.d.ts.map +1 -1
  353. package/dist/interfaces/stream-broker.d.ts +285 -17
  354. package/dist/interfaces/stream-broker.d.ts.map +1 -1
  355. package/dist/interfaces/webrtc-provider.d.ts +24 -0
  356. package/dist/interfaces/webrtc-provider.d.ts.map +1 -1
  357. package/dist/node.d.ts +6 -0
  358. package/dist/node.d.ts.map +1 -0
  359. package/dist/node.js +481 -0
  360. package/dist/node.js.map +1 -0
  361. package/dist/node.mjs +443 -0
  362. package/dist/node.mjs.map +1 -0
  363. package/dist/readiness/index.d.ts +3 -0
  364. package/dist/readiness/index.d.ts.map +1 -0
  365. package/dist/readiness/readiness-registry.d.ts +183 -0
  366. package/dist/readiness/readiness-registry.d.ts.map +1 -0
  367. package/dist/schemas/auth-records.d.ts +81 -0
  368. package/dist/schemas/auth-records.d.ts.map +1 -0
  369. package/dist/storage/filesystem-storage-provider.d.ts +37 -0
  370. package/dist/storage/filesystem-storage-provider.d.ts.map +1 -0
  371. package/dist/types/agent-pipeline-settings.d.ts +94 -0
  372. package/dist/types/agent-pipeline-settings.d.ts.map +1 -0
  373. package/dist/types/camera-pipeline.d.ts +58 -0
  374. package/dist/types/camera-pipeline.d.ts.map +1 -0
  375. package/dist/types/detection.d.ts +195 -38
  376. package/dist/types/detection.d.ts.map +1 -1
  377. package/dist/types/device-type.d.ts +4 -0
  378. package/dist/types/device-type.d.ts.map +1 -1
  379. package/dist/types/engine-output.d.ts +24 -0
  380. package/dist/types/engine-output.d.ts.map +1 -0
  381. package/dist/types/io.d.ts +57 -3
  382. package/dist/types/io.d.ts.map +1 -1
  383. package/dist/types/models.d.ts +3 -1
  384. package/dist/types/models.d.ts.map +1 -1
  385. package/dist/types/pipeline-schema.d.ts +15 -72
  386. package/dist/types/pipeline-schema.d.ts.map +1 -1
  387. package/dist/types/pipeline-step.d.ts +201 -0
  388. package/dist/types/pipeline-step.d.ts.map +1 -0
  389. package/dist/types/pipeline.d.ts +24 -1
  390. package/dist/types/pipeline.d.ts.map +1 -1
  391. package/dist/utils/element-config-store.d.ts +29 -0
  392. package/dist/utils/element-config-store.d.ts.map +1 -0
  393. package/dist/utils/err-msg.d.ts +7 -0
  394. package/dist/utils/err-msg.d.ts.map +1 -0
  395. package/dist/utils/json-safe.d.ts +33 -0
  396. package/dist/utils/json-safe.d.ts.map +1 -0
  397. package/dist/utils/mask-url.d.ts +10 -0
  398. package/dist/utils/mask-url.d.ts.map +1 -0
  399. package/dist/utils/ring-buffer.d.ts +16 -0
  400. package/dist/utils/ring-buffer.d.ts.map +1 -0
  401. package/dist/utils/run-inference-step.d.ts +26 -0
  402. package/dist/utils/run-inference-step.d.ts.map +1 -0
  403. package/dist/utils/runtime-mapping.d.ts +88 -0
  404. package/dist/utils/runtime-mapping.d.ts.map +1 -0
  405. package/dist/utils/zone-rule-eval.d.ts +47 -0
  406. package/dist/utils/zone-rule-eval.d.ts.map +1 -0
  407. package/package.json +11 -2
  408. package/dist/__tests__/addon-capability-provider.test.d.ts +0 -2
  409. package/dist/__tests__/addon-capability-provider.test.d.ts.map +0 -1
  410. package/dist/__tests__/addon-declaration.test.d.ts +0 -2
  411. package/dist/__tests__/addon-declaration.test.d.ts.map +0 -1
  412. package/dist/__tests__/capability.test.d.ts +0 -2
  413. package/dist/__tests__/capability.test.d.ts.map +0 -1
  414. package/dist/interfaces/addon-i18n.d.ts +0 -41
  415. package/dist/interfaces/addon-i18n.d.ts.map +0 -1
  416. package/dist/interfaces/classifier.d.ts +0 -8
  417. package/dist/interfaces/classifier.d.ts.map +0 -1
  418. package/dist/interfaces/cropper.d.ts +0 -8
  419. package/dist/interfaces/cropper.d.ts.map +0 -1
  420. package/dist/interfaces/detector.d.ts +0 -8
  421. package/dist/interfaces/detector.d.ts.map +0 -1
  422. package/dist/interfaces/device-capabilities/accessory.d.ts +0 -14
  423. package/dist/interfaces/device-capabilities/accessory.d.ts.map +0 -1
  424. package/dist/interfaces/device-capabilities/audio-detector.d.ts +0 -12
  425. package/dist/interfaces/device-capabilities/audio-detector.d.ts.map +0 -1
  426. package/dist/interfaces/device-capabilities/doorbell.d.ts +0 -10
  427. package/dist/interfaces/device-capabilities/doorbell.d.ts.map +0 -1
  428. package/dist/interfaces/device-capabilities/events.d.ts +0 -47
  429. package/dist/interfaces/device-capabilities/events.d.ts.map +0 -1
  430. package/dist/interfaces/device-capabilities/motion-sensor.d.ts +0 -7
  431. package/dist/interfaces/device-capabilities/motion-sensor.d.ts.map +0 -1
  432. package/dist/interfaces/device-capabilities/native-detection.d.ts +0 -14
  433. package/dist/interfaces/device-capabilities/native-detection.d.ts.map +0 -1
  434. package/dist/interfaces/device-capabilities/object-detector.d.ts +0 -59
  435. package/dist/interfaces/device-capabilities/object-detector.d.ts.map +0 -1
  436. package/dist/interfaces/device-capabilities/pan-tilt-zoom.d.ts +0 -29
  437. package/dist/interfaces/device-capabilities/pan-tilt-zoom.d.ts.map +0 -1
  438. package/dist/interfaces/device-capabilities/recording.d.ts +0 -18
  439. package/dist/interfaces/device-capabilities/recording.d.ts.map +0 -1
  440. package/dist/interfaces/device-capabilities/siren.d.ts +0 -8
  441. package/dist/interfaces/device-capabilities/siren.d.ts.map +0 -1
  442. package/dist/interfaces/device-capabilities/status-light.d.ts +0 -7
  443. package/dist/interfaces/device-capabilities/status-light.d.ts.map +0 -1
  444. package/dist/interfaces/device-capabilities/switch.d.ts +0 -8
  445. package/dist/interfaces/device-capabilities/switch.d.ts.map +0 -1
  446. package/dist/interfaces/device-capabilities/two-way-audio.d.ts +0 -8
  447. package/dist/interfaces/device-capabilities/two-way-audio.d.ts.map +0 -1
  448. package/dist/interfaces/device-capability.d.ts +0 -14
  449. package/dist/interfaces/device-capability.d.ts.map +0 -1
  450. package/dist/interfaces/model-catalog.d.ts +0 -25
  451. package/dist/interfaces/model-catalog.d.ts.map +0 -1
  452. package/dist/interfaces/refiner.d.ts +0 -8
  453. package/dist/interfaces/refiner.d.ts.map +0 -1
  454. package/dist/interfaces/repositories.d.ts +0 -20
  455. package/dist/interfaces/repositories.d.ts.map +0 -1
  456. package/dist/interfaces/scene-intelligence.d.ts +0 -21
  457. package/dist/interfaces/scene-intelligence.d.ts.map +0 -1
  458. package/dist/interfaces/storage-backend.d.ts +0 -27
  459. package/dist/interfaces/storage-backend.d.ts.map +0 -1
  460. package/dist/interfaces/worker-protocol.d.ts +0 -110
  461. package/dist/interfaces/worker-protocol.d.ts.map +0 -1
  462. package/dist/schemas/system-settings-schemas.d.ts +0 -27
  463. package/dist/schemas/system-settings-schemas.d.ts.map +0 -1
  464. package/dist/types/benchmark.d.ts +0 -112
  465. package/dist/types/benchmark.d.ts.map +0 -1
  466. package/dist/types/zones.d.ts +0 -48
  467. package/dist/types/zones.d.ts.map +0 -1
@@ -0,0 +1,256 @@
1
+ import type { IScopedLogger } from '../interfaces/logging.js';
2
+ import type { IEventBus } from '../interfaces/event-bus.js';
3
+ import type { IDevice } from './device.js';
4
+ import type { CapabilityDefinition, InferNativeProvider } from '../capabilities/capability-definition.js';
5
+ import type { IKernelStreamProbe } from '../interfaces/addon.js';
6
+ import type { AddonApi } from '../generated/addon-api.js';
7
+ import type { DeviceProxy } from '../generated/device-proxy.js';
8
+ import type { DeviceMeta, InitialDeviceMeta } from './device-management.js';
9
+ export interface DeviceContext {
10
+ /** Progressive, system-wide unique numeric device id. Injected from the
11
+ * hub's `device-manager` via `DeviceManagerApi.allocateDeviceId` before
12
+ * `BaseDevice` is constructed, so `IDevice.id` is always populated. */
13
+ readonly id: number;
14
+ readonly stableId: string;
15
+ /** Numeric id of the parent device, or null when standalone. Resolved
16
+ * by the caller of `DeviceManagerApi.create()` from the parent IDevice. */
17
+ readonly parentDeviceId: number | null;
18
+ readonly logger: IScopedLogger;
19
+ readonly api: AddonApi;
20
+ readonly eventBus: IEventBus;
21
+ readonly persistConfig: (data: unknown) => Promise<void>;
22
+ /**
23
+ * Snapshot of the persisted runtime-state blob loaded at boot.
24
+ * `BaseDevice` hands this to `DeviceRuntimeState.fromInitial` so
25
+ * the device wakes up with the last-known battery / sleep flag
26
+ * already populated. Empty object on first boot or for ctx
27
+ * factories that don't wire runtime state (tests).
28
+ *
29
+ * Runtime-state WRITES route through `fetchDevice(id).deviceState
30
+ * .setCapSlice(...)` — the canonical cross-layer entrypoint via the
31
+ * codegen DeviceProxy. `BaseDevice.runtimeState.setCapState` lazily
32
+ * resolves the proxy and pre-binds `deviceId`.
33
+ */
34
+ readonly initialRuntimeState?: Record<string, unknown>;
35
+ /**
36
+ * Snapshot of the persisted device-config blob loaded from the
37
+ * per-device DB at boot. Symmetric with `initialRuntimeState` —
38
+ * the kernel pre-loads from disk before the BaseDevice constructor
39
+ * runs so the in-memory `DeviceConfig` wakes up with operator-
40
+ * edited values without the addon having to thread `saved.config`
41
+ * through `kernel.devices.create()`.
42
+ *
43
+ * Optional only to support test harnesses that build a bare ctx;
44
+ * production kernel context factories always populate it.
45
+ */
46
+ readonly persistedConfig?: Record<string, unknown>;
47
+ /**
48
+ * Read-only snapshot of the operator-organisational meta surface
49
+ * (name / location / disabled / type / parentDeviceId / addonId).
50
+ * Loaded by the kernel from the device-meta DB row before the
51
+ * device class constructor runs — `BaseDevice` reads `name` /
52
+ * `location` / `disabled` from here so subclass schemas don't
53
+ * have to duplicate the fields. Mutations go through
54
+ * `devices.setName / setLocation / setDisabled` — `applySettingsPatch`
55
+ * is hardware-config only.
56
+ *
57
+ * Always populated by the kernel in production. Test fixtures must
58
+ * supply a non-null value too — `BaseDevice` constructor throws
59
+ * when missing.
60
+ */
61
+ readonly deviceMeta: DeviceMeta;
62
+ /**
63
+ * Lazy resolver for a device-scoped facade — same shape as
64
+ * `AddonContext.fetchDevice(id)`. Returns a `DeviceProxy` with
65
+ * `deviceId` pre-bound on every cap method, so callers say
66
+ * `dev.deviceState.setCapSlice({capName, slice})` instead of
67
+ * `ctx.api.deviceState.setCapSlice.mutate({deviceId: ctx.id, ...})`.
68
+ * Always wired by the production context factory; test ctx
69
+ * fixtures supply a stub.
70
+ */
71
+ readonly fetchDevice: (deviceId: number) => Promise<DeviceProxy>;
72
+ /**
73
+ * Reverse-pointer hook called by `BaseDevice` constructor right
74
+ * after building its `runtimeState`. The kernel context factory
75
+ * stashes the reference so that `registerNativeCap`, fired from
76
+ * inside the same constructor's call chain, can install the cap's
77
+ * `runtimeState` schema onto the device's state without needing
78
+ * the device to be registered in `DeviceRegistry` yet (it isn't —
79
+ * register happens AFTER the constructor returns).
80
+ *
81
+ * Optional for tests / backwards compat — caps with `runtimeState`
82
+ * registered in a context without this hook silently skip schema
83
+ * installation, falling back to memory-only state.
84
+ */
85
+ readonly bindRuntimeState?: (state: import('./device-runtime-state.js').IDeviceRuntimeState) => void;
86
+ readonly devices: DeviceManagerApi;
87
+ /**
88
+ * Kernel stream-probe entrypoint — same typed contract as the
89
+ * one exposed to addons via `ctx.kernel.streamProbe`. Mirrored
90
+ * onto the device context so devices that reprobe their inputs
91
+ * on edit (e.g. RTSP multi-stream reclassification) never need
92
+ * to branch on transport or reach through `ctx.api`. Optional
93
+ * only to support test harnesses that build a bare ctx.
94
+ */
95
+ readonly streamProbe?: IKernelStreamProbe;
96
+ /** Register a native provider for `cap` on the device this context belongs to.
97
+ * Multiple calls for the same cap throw. */
98
+ registerNativeCap<TCap extends CapabilityDefinition>(cap: TCap, provider: InferNativeProvider<TCap>): void;
99
+ }
100
+ /** Constructor type for BaseDevice subclasses.
101
+ *
102
+ * Deliberately ONE-ARG: the device class receives only its `ctx`,
103
+ * and the kernel pre-loads the persisted config blob into
104
+ * `ctx.persistedConfig` BEFORE this constructor runs. This makes
105
+ * the device entirely self-managing — no operator-supplied config
106
+ * ever bypasses the per-device DB. Providers create new devices by
107
+ * passing initial config to `kernel.devices.create()` (or
108
+ * `persistInitialConfig` for the advanced flow) which writes to the
109
+ * DB FIRST; the constructor then reads that same blob from
110
+ * `ctx.persistedConfig`.
111
+ *
112
+ * Subclasses with extra constructor args (e.g. accessory child
113
+ * devices that take a `parent` reference) extend this contract by
114
+ * having their own concrete signature; the kernel-side `create()`
115
+ * uses `DeviceConstructor` only for the standard 1-arg path.
116
+ * Custom-arg subclasses go through the lower-level `allocateDeviceId
117
+ * + persistInitialConfig + createContext + register` flow.
118
+ */
119
+ export type DeviceConstructor<T extends IDevice = IDevice> = new (ctx: DeviceContext) => T;
120
+ export interface DeviceManagerApi {
121
+ /**
122
+ * Create, register, and persist a device in one call.
123
+ * Handles: context creation → instantiation → registry + DB persistence.
124
+ */
125
+ create<T extends IDevice>(stableId: string, DeviceClass: DeviceConstructor<T>, config: Record<string, unknown>, parentDeviceId?: number | null,
126
+ /**
127
+ * Operator-supplied meta (`name` / `location` / `disabled`) the
128
+ * kernel writes to the meta row BEFORE the device class
129
+ * constructor runs. The constructor reads these via
130
+ * `ctx.deviceMeta`. Mandatory when creating a NEW device — the
131
+ * placeholder `name = stableId` would otherwise stick. Restore
132
+ * paths omit it (the persisted row already carries the
133
+ * operator's edits).
134
+ */
135
+ initialMeta?: InitialDeviceMeta): Promise<T>;
136
+ /**
137
+ * Reserve (or re-resolve) the progressive numeric id for a given
138
+ * `(addonId, stableId)` pair. Idempotent: repeated calls for the same
139
+ * stableId return the same id — allocation only happens the first time.
140
+ * Callers that bypass `create()` (boot-restore, discovery adoption) call
141
+ * this first so `createContext` and `BaseDevice` have the id to bind.
142
+ */
143
+ allocateDeviceId(stableId: string): Promise<number>;
144
+ /** Low-level context creation (for hub devices managing children).
145
+ * `id` MUST come from `allocateDeviceId` — feeding it here binds
146
+ * `DeviceContext.id` so `BaseDevice` exposes it on `IDevice.id`.
147
+ *
148
+ * `persistedConfig` is stuffed into `DeviceContext.persistedConfig`
149
+ * so the device's BaseDevice constructor self-hydrates. Pass the
150
+ * result of `loadConfig(id)` for the restore path; default `{}` for
151
+ * a fresh device. Callers wired through `kernel.devices.create()`
152
+ * don't need to think about this — the standard `create()` shortcut
153
+ * loads it automatically. */
154
+ createContext(stableId: string, id: number, parentDeviceId?: number | null, persistedConfig?: Record<string, unknown>): DeviceContext;
155
+ /** Read the per-device persisted config blob from the DB. Returns
156
+ * `{}` for devices that have no persisted row yet (newly allocated
157
+ * but not registered). Used by callers going through the manual
158
+ * `allocateDeviceId + createContext + register` flow (e.g. accessory
159
+ * child devices that need a custom-arg constructor) to self-hydrate
160
+ * the child without threading `saved.config` from the addon's
161
+ * `onRestoreDevices` boundary. */
162
+ loadConfig(deviceId: number): Promise<Record<string, unknown>>;
163
+ /** Pre-persist an initial config blob to the per-device DB BEFORE
164
+ * the device class is instantiated. The constructor then reads
165
+ * the same blob via `ctx.persistedConfig`. Mandatory when a
166
+ * provider needs to seed a NEW device with operator-supplied
167
+ * config (form input from the Add-Device modal) — the device
168
+ * class never receives the config directly, only via the DB.
169
+ * Idempotent: calling for an already-persisted id overwrites the
170
+ * blob (used for re-seed flows like "operator re-edits during
171
+ * initial wizard"). */
172
+ persistInitialConfig(stableId: string, config: Record<string, unknown>): Promise<number>;
173
+ /** Update the device's display name. Surfaces immediately in
174
+ * the UI device list + on `IDevice.name` for live consumers. */
175
+ setName(deviceId: number, name: string): Promise<void>;
176
+ /** Set the operator-organisational location label
177
+ * ("Kitchen" / "Front yard" / …). Pass `null` to clear. */
178
+ setLocation(deviceId: number, location: string | null): Promise<void>;
179
+ /** Soft-disable the device. Disabled devices stay in the registry
180
+ * + DB so the operator can flip back on without re-adding, but
181
+ * BaseDevice gates lifecycle hooks (publishToBroker, alarm-stream
182
+ * subscribe, …) to skip work. */
183
+ setDisabled(deviceId: number, disabled: boolean): Promise<void>;
184
+ /** Low-level registration (for advanced use cases) */
185
+ register(device: IDevice): Promise<void>;
186
+ /** Remove a device and all its children (cascading) */
187
+ remove(deviceId: number): Promise<void>;
188
+ /**
189
+ * Tear a device (and its children) down in-memory WITHOUT touching
190
+ * the persisted device-meta / config / bindings. Used by addon
191
+ * shutdown paths (graceful SIGTERM in group-runner, in-process
192
+ * `restartAddon`) so each device's `removeDevice()` lifecycle hook
193
+ * fires (closes alarm streams, ISAPI clients, polling timers,
194
+ * intercom sessions, …) and native caps unregister cleanly. The
195
+ * persisted index remains intact so the next boot's
196
+ * `restoreDevices` rehydrates the same set.
197
+ *
198
+ * Difference from `remove(id)`: same in-memory teardown, but no
199
+ * `device-manager.removeDevice` call. Use `remove` when the operator
200
+ * deletes a device from the UI; use `decommission` for restart /
201
+ * shutdown lifecycle paths where the device should reappear on
202
+ * the next boot.
203
+ */
204
+ decommission(deviceId: number): Promise<void>;
205
+ /** List all devices for this addon */
206
+ getAll(): Promise<ReadonlyArray<IDevice>>;
207
+ /** List children of a specific device */
208
+ getChildren(parentDeviceId: number): Promise<ReadonlyArray<IDevice>>;
209
+ }
210
+ /**
211
+ * Read-only global view of the kernel `DeviceRegistry`, exposed to addons
212
+ * that need to observe devices across ALL addons (not just their own).
213
+ *
214
+ * Typical consumers are infrastructure addons that provide a service
215
+ * to every device in the system — e.g. `addon-stream-broker` registers
216
+ * stream sources for every camera regardless of which provider addon
217
+ * instantiated it, so it needs to enumerate cameras coming from
218
+ * `addon-provider-rtsp`, `addon-provider-frigate`, etc.
219
+ *
220
+ * The interface is deliberately read-only: addons can list / query but
221
+ * never mutate the registry. Mutations still go through the per-addon
222
+ * `DeviceManagerApi` (`ctx.devices`) so each addon only creates devices
223
+ * under its own id.
224
+ */
225
+ export interface IDeviceRegistryReader {
226
+ /** Return every device across every addon. Snapshot — does not subscribe. */
227
+ getAll(): readonly IDevice[];
228
+ /** Look up any registered device by its progressive numeric id. */
229
+ getById(id: number): IDevice | null;
230
+ /** Owning addonId for a registered numeric id, or null if unknown. */
231
+ getAddonId(id: number): string | null;
232
+ /** Return every child of a parent device. */
233
+ getChildren(parentDeviceId: number): readonly IDevice[];
234
+ }
235
+ /**
236
+ * Full device registry — extends the reader with listing helpers and
237
+ * mutation methods. Exposed on `AddonContext.deviceRegistry` for
238
+ * infrastructure addons that manage devices across all providers
239
+ * (e.g. `device-manager`).
240
+ *
241
+ * Hub-only: agents/workers don't have a local device registry.
242
+ */
243
+ export interface IDeviceRegistry extends IDeviceRegistryReader {
244
+ /** Return all devices for a specific addon. */
245
+ getAllForAddon(addonId: string): readonly IDevice[];
246
+ /** Return every device paired with its owning addon id. */
247
+ getAllWithAddonId(): readonly {
248
+ addonId: string;
249
+ device: IDevice;
250
+ }[];
251
+ /** Return all addon ids that have registered devices. */
252
+ getAddonIds(): readonly string[];
253
+ /** Remove a device from the registry. */
254
+ remove(deviceId: number): void;
255
+ }
256
+ //# sourceMappingURL=device-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-context.d.ts","sourceRoot":"","sources":["../../src/device/device-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import type { z } from 'zod';
2
+ import type { DeviceType } from './device-type.js';
3
+ import type { IDevice } from './device.js';
4
+ export interface DeviceManualCreation {
5
+ getChildCreationSchema(type: DeviceType): z.ZodObject<z.core.$ZodLooseShape>;
6
+ createDevice(type: DeviceType, config: unknown): Promise<IDevice>;
7
+ }
8
+ export interface DeviceDiscovery {
9
+ discoverDevices(): Promise<readonly DiscoveredDevice[]>;
10
+ adoptDiscoveredDevice(candidate: DiscoveredDevice): Promise<IDevice>;
11
+ }
12
+ export interface DiscoveredDevice {
13
+ readonly stableId: string;
14
+ readonly type: DeviceType;
15
+ readonly suggestedName: string;
16
+ readonly prefilledConfig: Record<string, unknown>;
17
+ }
18
+ export interface SavedDevice {
19
+ /** Numeric id reserved at allocateDeviceId time. */
20
+ readonly id: number;
21
+ /** External-system identifier — passed to `kernel.devices.create()`. */
22
+ readonly stableId: string;
23
+ readonly type: DeviceType;
24
+ readonly name: string;
25
+ /**
26
+ * Operator-organisational label (room / location / area). `null`
27
+ * when unset. Free-text — providers don't interpret it; the UI
28
+ * groups devices by this field for "show me all cameras in
29
+ * Kitchen" filters.
30
+ */
31
+ readonly location: string | null;
32
+ /**
33
+ * Soft-disabled flag. When `true`, the device class is still
34
+ * instantiated and visible in the UI (so the operator can flip it
35
+ * back on without re-adding) but lifecycle hooks
36
+ * (publishToBroker, alarm-stream subscribe, …) are gated off by
37
+ * BaseDevice. Used for "this camera is in maintenance" without
38
+ * destroying its persisted config + bindings + per-device settings.
39
+ */
40
+ readonly disabled: boolean;
41
+ readonly parentDeviceId: number | null;
42
+ readonly config: Record<string, unknown>;
43
+ }
44
+ /**
45
+ * Read-only snapshot of the device-meta surface, exposed on
46
+ * `DeviceContext.deviceMeta`. The kernel populates it before the
47
+ * device class constructor runs so `BaseDevice` can resolve
48
+ * `name` / `location` / `disabled` without each subclass
49
+ * duplicating those fields in its config schema.
50
+ *
51
+ * Mutations go through `kernel.devices.{setName,setLocation,
52
+ * setDisabled}` — never through `applySettingsPatch`. The two
53
+ * surfaces are deliberately disjoint: `meta` is operator-organisational
54
+ * (free-text labels, on/off toggle), `config` is hardware-specific
55
+ * (host, port, credentials, debug flags, deviceCache).
56
+ */
57
+ /**
58
+ * Free-form device metadata — hardware identity + driver-populated
59
+ * facts the operator can both read and edit. Mirrors Scrypted's
60
+ * `info: { manufacturer, model, serialNumber, ... }` device-level
61
+ * surface but stored as a single JSON blob so future fields (HA
62
+ * matter id, ONVIF profile token, …) don't require schema changes.
63
+ *
64
+ * Conventional keys (drivers should populate when known):
65
+ * - `manufacturer` e.g. 'Reolink'
66
+ * - `model` e.g. 'Argus PT Ultra'
67
+ * - `serialNumber`
68
+ * - `firmware` software version
69
+ * - `hardware` hardware revision
70
+ * - `mac` MAC address
71
+ * - `uid` vendor-specific globally-unique id (Reolink, etc.)
72
+ *
73
+ * Anything else the driver knows can land alongside (`onvifProfile`,
74
+ * `ipAddress`, `apiPort`, …). All values must be JSON-serializable.
75
+ */
76
+ export type DeviceMetadata = Record<string, unknown>;
77
+ export interface DeviceMeta {
78
+ readonly id: number;
79
+ readonly stableId: string;
80
+ readonly addonId: string;
81
+ readonly type: DeviceType;
82
+ readonly name: string;
83
+ readonly location: string | null;
84
+ readonly disabled: boolean;
85
+ readonly parentDeviceId: number | null;
86
+ /** Hardware + identity blob; null when nothing has been populated yet. */
87
+ readonly metadata: DeviceMetadata | null;
88
+ }
89
+ /**
90
+ * Initial meta a provider supplies on `onCreateDevice`. Differs
91
+ * from `DeviceMeta` in that `id` / `stableId` / `addonId` are
92
+ * kernel-allocated, not operator-supplied.
93
+ */
94
+ export interface InitialDeviceMeta {
95
+ readonly type: DeviceType;
96
+ readonly name: string;
97
+ readonly location?: string | null;
98
+ }
99
+ /**
100
+ * Single-call payload returned by `BaseDeviceProvider.onCreateDevice`.
101
+ * Splits operator-organisational labels (`meta`) from hardware-
102
+ * specific config (`config`) — kernel handles the rest:
103
+ * stableId allocation, persistence, instantiation, register.
104
+ *
105
+ * `onAfterCreate` is the escape hatch for providers that need to
106
+ * inject creation-time-only state into the freshly-built device
107
+ * (e.g. Reolink's autodetect handshake hands a live Baichuan API
108
+ * instance; adoption skips a second login). Fires AFTER `register`
109
+ * + `device.onCreated` + accessory auto-spawn complete — the
110
+ * device is fully alive when the callback runs. Best-effort:
111
+ * failures log but don't unwind the already-registered device.
112
+ */
113
+ export interface CreateDeviceSpec {
114
+ readonly meta: InitialDeviceMeta;
115
+ readonly config: Record<string, unknown>;
116
+ readonly onAfterCreate?: (device: IDevice) => Promise<void> | void;
117
+ }
118
+ //# sourceMappingURL=device-management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-management.d.ts","sourceRoot":"","sources":["../../src/device/device-management.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Bindings × Modes contract
3
+ * ─────────────────────────
4
+ *
5
+ * Two independent layers gate every analyzer phase (detection / audio):
6
+ *
7
+ * 1. **Bindings** (low-level wiring, escape hatch)
8
+ * The cap-router decides whether the addon is MOUNTED for a
9
+ * device at all. `setWrapperActive(deviceId, capName, false)`
10
+ * fully dismounts the cap; nothing the cap exposes (provider
11
+ * methods, runtime-state, events) is reachable. The operator
12
+ * rarely touches this from the UI — it's the "uninstall this
13
+ * addon for this device" button. Default: every wrapper bound.
14
+ *
15
+ * 2. **Modes** (operator-facing scheduling)
16
+ * The `detectionMode` / `audioMode` selectors decide WHEN the
17
+ * mounted cap actually fires. `'disabled'` is the runtime-level
18
+ * off switch — the cap stays mounted, schema present, RPCs
19
+ * callable, but the runner / orchestrator skip the substream
20
+ * subscriber. The other 2 modes (`'always-on'`, `'on-motion'`)
21
+ * drive when the subscribe + analyze cycle runs.
22
+ *
23
+ * **AND-gate semantics**: a phase fires iff `(binding bound) AND
24
+ * (mode != 'disabled')`. Either layer disables → cap inactive.
25
+ * Neither layer overrides the other; the operator picks whichever
26
+ * lever maps to their intent.
27
+ *
28
+ * - "I never want SW detection on this camera" → unbind via
29
+ * bindings UI (extreme — also disables the cap surface).
30
+ * - "Pause detection for now, keep wired" → set
31
+ * `detectionMode = 'disabled'`. Settings still surface; no
32
+ * substream demand.
33
+ * - "Detection only when motion fires" → `detectionMode = 'on-motion'`,
34
+ * binding stays bound.
35
+ *
36
+ * Profile defaults populate modes when the operator hasn't picked.
37
+ * Bindings are bound by their wrappers' `defaultActive: true` flag,
38
+ * unaffected by the profile.
39
+ *
40
+ * ─────────────────────────
41
+ *
42
+ * DeviceProfile — declarative defaults applied to devices that match a
43
+ * feature predicate.
44
+ *
45
+ * Solves the "battery cams shouldn't run continuous analyzers" problem
46
+ * (and adjacent policy questions like low-bandwidth fallback) by
47
+ * centralising the operator-facing defaults in ONE place. The profile
48
+ * does NOT touch capability bindings — those stay as the low-level
49
+ * wiring escape hatch. Instead the profile drives the per-device
50
+ * pipeline behaviour through three operator-visible "mode" knobs that
51
+ * the runner / orchestrator interpret directly.
52
+ *
53
+ * - `motionSources` — already a per-device setting today; the profile
54
+ * just supplies a sensible default (`['onboard']` when firmware
55
+ * motion is available; `[]` otherwise so a battery cam with no PIR
56
+ * and no firmware push gates everything off until the operator opts
57
+ * into `'analyzer'` SW motion).
58
+ *
59
+ * - `audioMode` (NEW) — selects when the audio classifier runs:
60
+ * `'disabled'`, `'always-on'`, `'on-motion'`. Replaces the implicit
61
+ * "audio runs when wrapper bound" behaviour. Wrappers stay bound;
62
+ * the addon reads this mode at runtime to decide whether to
63
+ * subscribe to the audio decoded stream.
64
+ *
65
+ * - `detectionMode` (NEW) — selects when object detection runs:
66
+ * `'disabled'`, `'always-on'`, `'on-motion'`. Mirrors `audioMode`
67
+ * and replaces the legacy `priority: 'default'|'always-on'` toggle
68
+ * with explicit semantics.
69
+ *
70
+ * ─── Sticky-by-construction ───────────────────────────────────────────
71
+ *
72
+ * Nothing in the runtime re-applies a profile. Operator changes always
73
+ * win because the persistence layer captures them as concrete entries
74
+ * (config blob value); the profile is consulted only when no entry
75
+ * exists yet. If a setting is absent from the blob the resolver falls
76
+ * back to the profile's default, then the schema's static default.
77
+ */
78
+ import type { DeviceFeature } from './device-type.js';
79
+ /**
80
+ * Match clause: the profile applies to a device iff its `features`
81
+ * array contains `hasFeature`. Single-feature gate keeps matching
82
+ * cheap; the profile-stack iterates in order and the first match wins.
83
+ */
84
+ export interface DeviceProfileMatch {
85
+ readonly hasFeature: DeviceFeature;
86
+ }
87
+ /**
88
+ * When-mode selector for analyzer phases (audio classification, object
89
+ * detection). `'disabled'` keeps the addon idle; `'always-on'` runs
90
+ * continuously; `'on-motion'` activates only when the motion-gate is
91
+ * open (firmware motion event OR analyzer-derived motion).
92
+ */
93
+ export type PipelinePhaseMode = 'disabled' | 'always-on' | 'on-motion';
94
+ /**
95
+ * Operator-facing settings the profile populates at creation time +
96
+ * resolver fallback time. These are NOT tightly bound to a single
97
+ * config schema field — the resolver (in pipeline-orchestrator) reads
98
+ * them when computing the runner config, and persists operator changes
99
+ * back to the same keys via the existing per-device store.
100
+ */
101
+ export interface DeviceProfileDefaults {
102
+ /** Default `motionSources` array when the operator hasn't picked
103
+ * one. Empty array means "no motion source" — useful for battery
104
+ * cams without firmware motion (operator opts into `'analyzer'`
105
+ * explicitly to enable SW motion). PIR-sourced motion currently
106
+ * flows through `'onboard'` because Reolink's accessory PIRs feed
107
+ * the parent camera's firmware motion event channel. */
108
+ readonly motionSources?: readonly ('onboard' | 'analyzer')[];
109
+ readonly audioMode?: PipelinePhaseMode;
110
+ readonly detectionMode?: PipelinePhaseMode;
111
+ }
112
+ export interface DeviceProfile {
113
+ readonly id: string;
114
+ readonly label: string;
115
+ readonly when: DeviceProfileMatch;
116
+ /**
117
+ * Default phase modes + motion-source pick. Resolver reads these
118
+ * when no operator value is persisted; profile never overrides a
119
+ * concrete operator choice.
120
+ */
121
+ readonly defaults: DeviceProfileDefaults;
122
+ /**
123
+ * Generic settings overrides (snapshot interval, pre-buffer flag,
124
+ * etc.). Same sticky semantics as defaults — applied on first read,
125
+ * operator override wins. Keys are dot-paths interpreted by the
126
+ * per-driver / per-addon config schema.
127
+ */
128
+ readonly settings: Readonly<Record<string, unknown>>;
129
+ }
130
+ /**
131
+ * Heuristic check — `device.features?.includes(profile.when.hasFeature)`.
132
+ */
133
+ export declare function deviceMatchesProfile(features: readonly string[] | undefined, profile: DeviceProfile): boolean;
134
+ /**
135
+ * Battery-operated cameras default policy. The substream stays dialed
136
+ * only when there's something for the runner to actually process —
137
+ * audio is off, detection only runs on motion.
138
+ *
139
+ * `motionSources` is NOT in the profile defaults: the orchestrator's
140
+ * resolver already prefers `'onboard'` whenever the device exposes a
141
+ * native motion cap (firmware-driven motion), independent of profile.
142
+ * Battery cams without firmware motion fall back to `[]` (no source) —
143
+ * the operator must opt into `'analyzer'` SW motion explicitly.
144
+ *
145
+ * Object detection on motion: when motion fires, the runner attaches
146
+ * the substream + runs detection until the motion gate closes, then
147
+ * releases. Firmware idle-disconnect fires shortly after, the camera
148
+ * goes back to sleep.
149
+ */
150
+ export declare const BATTERY_DEVICE_PROFILE: DeviceProfile;
151
+ /**
152
+ * Profile registry — order matters when multiple profiles match the
153
+ * same device (first match wins). Today there's only one entry.
154
+ */
155
+ export declare const DEVICE_PROFILES: readonly DeviceProfile[];
156
+ /**
157
+ * Resolve the profile that matches a device's features, or `null` when
158
+ * no profile matches. First-match-wins.
159
+ */
160
+ export declare function resolveDeviceProfile(features: readonly string[] | undefined): DeviceProfile | null;
161
+ //# sourceMappingURL=device-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-profile.d.ts","sourceRoot":"","sources":["../../src/device/device-profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGrD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAA;CACnC;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,WAAW,GACX,WAAW,CAAA;AAEf;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;6DAKyD;IACzD,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,CAAA;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAA;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAA;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACvC,OAAO,EAAE,aAAa,GACrB,OAAO,CAGT;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAYpC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAEnD,CAAA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACtC,aAAa,GAAG,IAAI,CAKtB"}