@camera.ui/server 2.2.2 → 2.2.4

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 (441) hide show
  1. package/dist/interface/assets/{404-bSMSPWcp.js → 404-Bdbp69ox.js} +1 -1
  2. package/dist/interface/assets/{About-DqMxC4AO.js → About-DmtCok-y.js} +1 -1
  3. package/dist/interface/assets/{Assistant-CIHF-bHs.js → Assistant-D-Lv6JtY.js} +1 -1
  4. package/dist/interface/assets/{Automation-CUDypjZw.js → Automation-LQ3TssrU.js} +3 -3
  5. package/dist/interface/assets/{AutomationImport-Cr14tF-Q.js → AutomationImport-B_ra3G3_.js} +2 -2
  6. package/dist/interface/assets/{AutomationStore-BnZgfI9i.js → AutomationStore-DSXSaQjp.js} +2 -2
  7. package/dist/interface/assets/AutomationStoreDetail-B5_Meb6R.js +2 -0
  8. package/dist/interface/assets/Automations-DHfPRe8W.js +2 -0
  9. package/dist/interface/assets/Camera-B4ojNnKb.css +1 -0
  10. package/dist/interface/assets/Camera-CDbfvtJv.js +2 -0
  11. package/dist/interface/assets/{CameraConsole-BK8TqHgA.js → CameraConsole-DX-IRmd_.js} +1 -1
  12. package/dist/interface/assets/Cameras-D9m2bxWj.js +651 -0
  13. package/dist/interface/assets/Camview-DKOYY6TI.js +1 -0
  14. package/dist/interface/assets/{CertificateUpload-PfgVZa4M.js → CertificateUpload-B8ccb3n-.js} +1 -1
  15. package/dist/interface/assets/{Config-DapgreIX.js → Config-DCIUUWCv.js} +1 -1
  16. package/dist/interface/assets/{ConfigActionAssistant-v0w4E-mE.js → ConfigActionAssistant-6IUzZeNW.js} +1 -1
  17. package/dist/interface/assets/{ConfigActionCameraControl-fdrsnRyE.js → ConfigActionCameraControl-EXuiNMuG.js} +1 -1
  18. package/dist/interface/assets/{ConfigActionDelay-C_dq3ozL.js → ConfigActionDelay-Cs4sYEk-.js} +1 -1
  19. package/dist/interface/assets/{ConfigActionHttp-1hDI-38w.js → ConfigActionHttp-gUM6RQ6Y.js} +1 -1
  20. package/dist/interface/assets/{ConfigActionImageInput-DCF8qeg9.js → ConfigActionImageInput-CPl5kVgO.js} +1 -1
  21. package/dist/interface/assets/{ConfigActionMqtt-XpVD7lFg.js → ConfigActionMqtt-BeBMCOJ-.js} +1 -1
  22. package/dist/interface/assets/{ConfigActionNotification-CB1ymMRz.js → ConfigActionNotification-DJFHdFDN.js} +1 -1
  23. package/dist/interface/assets/{ConfigActionNotificationControl-BfDtLS5h.js → ConfigActionNotificationControl-BXoztPTs.js} +1 -1
  24. package/dist/interface/assets/{ConfigActionOutput-CMfXI1b3.js → ConfigActionOutput-BGrFWqZ1.js} +1 -1
  25. package/dist/interface/assets/{ConfigActionPlugin-CZo6SudQ.js → ConfigActionPlugin-CdIIMcJZ.js} +1 -1
  26. package/dist/interface/assets/{ConfigActionSensor-CetFuASa.js → ConfigActionSensor-MRVGJ22A.js} +1 -1
  27. package/dist/interface/assets/{ConfigActionSnapshot-BpPhHpIk.js → ConfigActionSnapshot-CxA4f5ag.js} +1 -1
  28. package/dist/interface/assets/{ConfigActionVariable-SJomTISn.js → ConfigActionVariable-DmU4seLh.js} +1 -1
  29. package/dist/interface/assets/{ConfigConditionIfElse-ClTxvZJz.js → ConfigConditionIfElse-Tgdrk7lo.js} +1 -1
  30. package/dist/interface/assets/{ConfigConditionSensorState-FbLmmHyP.js → ConfigConditionSensorState-CyyzoL6Q.js} +1 -1
  31. package/dist/interface/assets/{ConfigConditionSwitch--qAHkOdE.js → ConfigConditionSwitch-DprK5AbR.js} +1 -1
  32. package/dist/interface/assets/{ConfigConditionTime-BqjDUPVR.js → ConfigConditionTime-CDruEvBp.js} +1 -1
  33. package/dist/interface/assets/{ConfigSensorValueInput-B1dLcmSO.js → ConfigSensorValueInput-BhlgTOW9.js} +1 -1
  34. package/dist/interface/assets/{ConfigTriggerDetection-CMZyEWui.js → ConfigTriggerDetection-4vdEST9Y.js} +1 -1
  35. package/dist/interface/assets/{ConfigTriggerGeofence-B9JPVvhP.js → ConfigTriggerGeofence-1B0BdCOw.js} +1 -1
  36. package/dist/interface/assets/{ConfigTriggerManual-CSdF69jM.js → ConfigTriggerManual-BQLDqwZh.js} +1 -1
  37. package/dist/interface/assets/{ConfigTriggerMqtt-BzN7_xVm.js → ConfigTriggerMqtt-B3YNOB6U.js} +1 -1
  38. package/dist/interface/assets/{ConfigTriggerSchedule-BK_Ogvxn.js → ConfigTriggerSchedule-DhbJGOT7.js} +1 -1
  39. package/dist/interface/assets/{ConfigTriggerSensor-BaQklhHP.js → ConfigTriggerSensor-iMPg_Pmb.js} +1 -1
  40. package/dist/interface/assets/{ConfigTriggerSystem-DIX95l0X.js → ConfigTriggerSystem-MaNZTO3h.js} +1 -1
  41. package/dist/interface/assets/{ConfigTriggerWebhook-_EOJAgNk.js → ConfigTriggerWebhook-B3WfXjPv.js} +1 -1
  42. package/dist/interface/assets/Console-BQLINPCG.js +1 -0
  43. package/dist/interface/assets/{CuiAssistantConversation-CWCLLi3b.css → CuiAssistantConversation-DmSdiv1b.css} +1 -1
  44. package/dist/interface/assets/CuiAssistantConversation-yCRlgjtr.js +5 -0
  45. package/dist/interface/assets/{CuiAutomationRunsDialog-DpskKeEe.js → CuiAutomationRunsDialog-CJ0mzDLL.js} +1 -1
  46. package/dist/interface/assets/{CuiBottomSheet-Bg_AIuGY.js → CuiBottomSheet-BbP0T2v3.js} +1 -1
  47. package/dist/interface/assets/CuiBottomSheet-BpMMQhmJ.js +1 -0
  48. package/dist/interface/assets/CuiCameraPipCard-1EhYM5kQ.js +1 -0
  49. package/dist/interface/assets/CuiCameraRecordings-CkkHbNyY.css +1 -0
  50. package/dist/interface/assets/CuiCameraRecordings-D2jG47AV.js +1 -0
  51. package/dist/interface/assets/CuiCameraShares-IpkomKkl.js +1 -0
  52. package/dist/interface/assets/CuiCameraTable-CNclH1KS.js +1 -0
  53. package/dist/interface/assets/{CuiCameraTable-CyAYYPvd.js → CuiCameraTable-DlL-z_na.js} +2 -2
  54. package/dist/interface/assets/{CuiChartTable-BklHSjRr.js → CuiChartTable-B0EPcrgv.js} +1 -1
  55. package/dist/interface/assets/CuiChartTable-DXY7rY3O.css +1 -0
  56. package/dist/interface/assets/{CuiConsole-4rDfDj0a.js → CuiConsole-D8Xk2LXY.js} +2 -2
  57. package/dist/interface/assets/CuiDataTable-DPIbKnvU.css +1 -0
  58. package/dist/interface/assets/CuiDataTable-DtRTB560.js +1 -0
  59. package/dist/interface/assets/CuiLightControl-CtL3sA8k.js +1 -0
  60. package/dist/interface/assets/{CuiList-BafzuN0H.js → CuiList-Bn7DT_Ao.js} +1 -1
  61. package/dist/interface/assets/CuiPluginCard-B-4x6Mno.js +2 -0
  62. package/dist/interface/assets/{CuiPluginCategoryChip-B4w2DH_j.js → CuiPluginCategoryChip-Dih4zKtO.js} +1 -1
  63. package/dist/interface/assets/{CuiPluginOAuthButton-C_jxPrPQ.js → CuiPluginOAuthButton-D-Y9KYJz.js} +2 -2
  64. package/dist/interface/assets/{CuiPluginTrustBadge-pLnF2Ggn.js → CuiPluginTrustBadge-_g3Ctrg4.js} +1 -1
  65. package/dist/interface/assets/{CuiQRCode-8Q6cFdfs.js → CuiQRCode-D6hzmPzV.js} +1 -1
  66. package/dist/interface/assets/CuiSchema-Dh8Mu4BK.js +1 -0
  67. package/dist/interface/assets/{CuiTopNavbarItem-BZXzuV42.js → CuiTopNavbarItem-CgX21E5K.js} +1 -1
  68. package/dist/interface/assets/Faces-CgDoKVkp.js +1 -0
  69. package/dist/interface/assets/{FirstSteps-BNcAFp2c.js → FirstSteps-CZSTX7Ot.js} +1 -1
  70. package/dist/interface/assets/Floorplan-CRvmaf45.js +1 -0
  71. package/dist/interface/assets/{Instances-DUWWy-El.js → Instances-DRkhTQKC.js} +1 -1
  72. package/dist/interface/assets/{Logs-7CxXc2Re.js → Logs-CIDJSpdH.js} +2 -2
  73. package/dist/interface/assets/Menu-CM_F1jfd.js +1 -0
  74. package/dist/interface/assets/Metrics-DgJEg-ZK.js +9 -0
  75. package/dist/interface/assets/Metrics-Ebv4qK2a.css +1 -0
  76. package/dist/interface/assets/OAuthDeviceFlow-BZ9LcgmJ.js +1 -0
  77. package/dist/interface/assets/Plugin-BBDpg6U_.js +1 -0
  78. package/dist/interface/assets/{PluginConsole-BOaU7Ey0.js → PluginConsole-DxVlTuNy.js} +1 -1
  79. package/dist/interface/assets/PluginDetail-fLGD3R-u.js +2 -0
  80. package/dist/interface/assets/PluginSchema-CewD2H-K.js +1 -0
  81. package/dist/interface/assets/PluginSearch-5wX7WEcz.js +2 -0
  82. package/dist/interface/assets/PluginSearch-rDbuXm2z.js +1 -0
  83. package/dist/interface/assets/{PluginUpdateProgress-DFg14vV8.js → PluginUpdateProgress-B7Lj0ttd.js} +1 -1
  84. package/dist/interface/assets/Plugins-DVQ476iL.js +1 -0
  85. package/dist/interface/assets/{RecentEventsFilter-B6Ph-pxb.js → RecentEventsFilter-CWNBI2Ge.js} +1 -1
  86. package/dist/interface/assets/Recordings-DSRgRVhN.js +1 -0
  87. package/dist/interface/assets/{SensorEdit-DEenjJ8S.js → SensorEdit-B1mYmxDV.js} +1 -1
  88. package/dist/interface/assets/{SensorHistory-CU1Uwf5f.js → SensorHistory-D1kKroxp.js} +1 -1
  89. package/dist/interface/assets/{Sensors-LnVLPDWf.js → Sensors-yAc1M-oO.js} +2 -2
  90. package/dist/interface/assets/{Settings-uk3RVXCS.js → Settings-DBKgECRK.js} +1 -1
  91. package/dist/interface/assets/SettingsAccount-CM3XGNL6.js +1 -0
  92. package/dist/interface/assets/SettingsAccount-i2nzGFdV.js +1 -0
  93. package/dist/interface/assets/{SettingsAppearance-CRYcal9v.js → SettingsAppearance-C-nllv3m.js} +1 -1
  94. package/dist/interface/assets/SettingsAppearance-DCgu01FJ.js +1 -0
  95. package/dist/interface/assets/SettingsAssistant-BESab92C.css +1 -0
  96. package/dist/interface/assets/SettingsAssistant-ClRO04fv.js +1 -0
  97. package/dist/interface/assets/{SettingsBackup-CSvGqsru.js → SettingsBackup-Cq_eLVCR.js} +1 -1
  98. package/dist/interface/assets/{SettingsList-BQR6jnP-.js → SettingsList-Bklt3TQO.js} +1 -1
  99. package/dist/interface/assets/SettingsMqtt-BLkP0en6.js +1 -0
  100. package/dist/interface/assets/{SettingsNotifications-8sSoP-8S.js → SettingsNotifications-CeUKfEnH.js} +1 -1
  101. package/dist/interface/assets/{SettingsPermissions-D7kYdjfw.js → SettingsPermissions-Cpka-k3Q.js} +1 -1
  102. package/dist/interface/assets/{SettingsRecordings-DjLYqbKo.js → SettingsRecordings-k20qTe7K.js} +1 -1
  103. package/dist/interface/assets/SettingsRemote-CdUj0nZ1.js +2 -0
  104. package/dist/interface/assets/{SettingsSystem-BxQNJc8n.js → SettingsSystem-6OChvWL7.js} +2 -2
  105. package/dist/interface/assets/SettingsUsers-B57uZ8jn.js +1 -0
  106. package/dist/interface/assets/{Terminal-Bsnvs8gs.js → Terminal-WMgVSORW.js} +2 -2
  107. package/dist/interface/assets/Training-BkWlywj_.js +1 -0
  108. package/dist/interface/assets/Training-Dwf5rXyC.css +1 -0
  109. package/dist/interface/assets/{Updates-Dsn_fJ-N.js → Updates-Dwrd6PQl.js} +1 -1
  110. package/dist/interface/assets/{VariableInput-DCWiIgaZ.js → VariableInput-CDJXnzEV.js} +1 -1
  111. package/dist/interface/assets/{VariableSuggestions-BhIlXJ6r.js → VariableSuggestions-CNq7O1o-.js} +1 -1
  112. package/dist/interface/assets/{VersionsHandler-DM_Jf4EA.js → VersionsHandler-C0A8Ryhn.js} +1 -1
  113. package/dist/interface/assets/{VirtualSensorCreate-Q4kd0dfE.js → VirtualSensorCreate-zEehu8Fg.js} +1 -1
  114. package/dist/interface/assets/Workers-Be7q2vOK.js +2 -0
  115. package/dist/interface/assets/{api-LjAY3aa3.js → api-CSl3-BNZ.js} +1 -1
  116. package/dist/interface/assets/api-DcaDMCnj.css +2 -0
  117. package/dist/interface/assets/api-vegsDz6n.js +4 -0
  118. package/dist/interface/assets/{assistant-BFc44oq-.js → assistant-jARIkvB1.js} +1 -1
  119. package/dist/interface/assets/{auth-CUPvHARA.js → auth-Bov4B1jy.js} +1 -1
  120. package/dist/interface/assets/{automations-Dw4L5sT0.js → automations-CJe7TvLk.js} +1 -1
  121. package/dist/interface/assets/{cameraSources-CzENFiZx.js → cameraSources-CDiYtBzG.js} +1 -1
  122. package/dist/interface/assets/cloudHandoff-BoV37fDI.js +1 -0
  123. package/dist/interface/assets/{config-EBcNBZkb.js → config-iO2vrtak.js} +1 -1
  124. package/dist/interface/assets/{flowSchema-CdzBw69a.js → flowSchema-B0vIoy4y.js} +1 -1
  125. package/dist/interface/assets/{intercomService-DIfdcsXc.js → intercomService-IAAXcRPG.js} +1 -1
  126. package/dist/interface/assets/main-DQgH1fon.js +3 -0
  127. package/dist/interface/assets/{mqtt-D_wH18eJ.js → mqtt-DfpSLxes.js} +1 -1
  128. package/dist/interface/assets/{notifications-wLsrlI9N.js → notifications-jTSwwN1i.js} +1 -1
  129. package/dist/interface/assets/pause-B7ud2O8d.js +1 -0
  130. package/dist/interface/assets/{plugins-DwmkpOPJ.js → plugins-ChyJXprl.js} +1 -1
  131. package/dist/interface/assets/rooms-BMWJpAXC.js +1 -0
  132. package/dist/interface/assets/{sensorIcons-BY853M0u.js → sensorIcons-dUp8Tone.js} +1 -1
  133. package/dist/interface/assets/{sensorSlots-DnRJdaTG.js → sensorSlots-CosoVMys.js} +1 -1
  134. package/dist/interface/assets/{sensors-B9etOqBI.js → sensors-DLdbNuoj.js} +1 -1
  135. package/dist/interface/assets/{server-BTKgKMye.js → server-D-qkU2-U.js} +1 -1
  136. package/dist/interface/assets/{theme-CbtGvohq.js → theme-DhneHMji.js} +1 -1
  137. package/dist/interface/assets/types-CngwbyEy.js +1 -0
  138. package/dist/interface/assets/{types-CEhVWRYD.js → types-DDpq8alD.js} +1 -1
  139. package/dist/interface/assets/{types-COlvVtDn.js → types-DdyAGRju.js} +1 -1
  140. package/dist/interface/assets/{ungrouped-Dbr16vFt.css → ungrouped-DBRZ-Ori.css} +1 -1
  141. package/dist/interface/assets/ungrouped-e2tQIZD2.js +1 -0
  142. package/dist/interface/assets/{updates-BQ6Ugcup.js → updates-DnVisGT3.js} +1 -1
  143. package/dist/interface/assets/{useAppVersion-BO-3jbup.js → useAppVersion-gtzMlM4b.js} +1 -1
  144. package/dist/interface/assets/{useAssistantActions-CRVHZw4o.js → useAssistantActions-BIHVky9T.js} +1 -1
  145. package/dist/interface/assets/useBackupRestore-DfgufKp3.js +1 -0
  146. package/dist/interface/assets/{useCameraOptions-C7tgceJ1.js → useCameraOptions-B9yEPgGd.js} +1 -1
  147. package/dist/interface/assets/{useKeyboardInset-yu3BVnj7.js → useKeyboardInset-1sUlRSeV.js} +1 -1
  148. package/dist/interface/assets/{useLogsSocket-B4wTnSno.js → useLogsSocket-C2QUQqkZ.js} +1 -1
  149. package/dist/interface/assets/{useNavLayout-Z61-OsIG.js → useNavLayout-Br4MtSjQ.js} +1 -1
  150. package/dist/interface/assets/{usePermissions-Bjx4t0x3.js → usePermissions-B8pw9jk1.js} +1 -1
  151. package/dist/interface/assets/{usePluginUpdates-Dv3_XJTK.js → usePluginUpdates-Cx9PwENn.js} +1 -1
  152. package/dist/interface/assets/{usePushRegistration-CHNMZ94f.js → usePushRegistration-CLEyagJM.js} +1 -1
  153. package/dist/interface/assets/{useServerRestart-C-AsOdJP.js → useServerRestart-BBp4cko_.js} +1 -1
  154. package/dist/interface/assets/{useStreamStatus-BJoJF68x.js → useStreamStatus-BrPjpyzs.js} +1 -1
  155. package/dist/interface/assets/{useTabSwipe-b_K3BIkW.js → useTabSwipe-B4edrv6o.js} +1 -1
  156. package/dist/interface/assets/{useUpdateChannel-Cc4IrrDy.js → useUpdateChannel-DugwYo8J.js} +1 -1
  157. package/dist/interface/assets/{useUpdatesSocket-Cz9lN4Bc.js → useUpdatesSocket-CgCXGGVg.js} +1 -1
  158. package/dist/interface/assets/{useUserOptions-DrNB17kY.js → useUserOptions-DTlKtp_u.js} +1 -1
  159. package/dist/interface/assets/vendor-cameraui-D0VXSxSF.js +2326 -0
  160. package/dist/interface/assets/{vendor-core-BTkC8NzR.js → vendor-core-Ba81bBNM.js} +1 -1
  161. package/dist/interface/assets/{vendor-primevue-DQz5Qnqu.js → vendor-primevue-LZEE4d1W.js} +1 -1
  162. package/dist/interface/assets/{vendor-zod-BigRv4ty.js → vendor-zod-CBbC1rE7.js} +2 -2
  163. package/dist/interface/ha/{404-Bg2Vlt5S.js → 404-CkAIe5nc.js} +1 -1
  164. package/dist/interface/ha/{About-C6u2wgUi.js → About-C7HxP7hM.js} +6 -6
  165. package/dist/interface/ha/{Assistant-BCyiVnwD.js → Assistant-DJYxiCOY.js} +207 -192
  166. package/dist/interface/ha/{Automation-DU_qv5xD.js → Automation-CfNHCeIm.js} +191 -191
  167. package/dist/interface/ha/{AutomationImport-BpDyhabF.js → AutomationImport-Dn3C1604.js} +6 -6
  168. package/dist/interface/ha/{AutomationStore-DPQsunpH.js → AutomationStore-D63G9w2Y.js} +5 -5
  169. package/dist/interface/ha/{AutomationStoreDetail-CASMQ-mD.js → AutomationStoreDetail-HoUC8cSY.js} +13 -13
  170. package/dist/interface/ha/{Automations-DSHVzwX4.js → Automations-BOlE1Evb.js} +104 -117
  171. package/dist/interface/ha/{Camera-ESmteicm.js → Camera-6Vvo7nee.js} +234 -222
  172. package/dist/interface/ha/{CameraConsole-BE_jl4Co.js → CameraConsole-DYSNDW4P.js} +5 -5
  173. package/dist/interface/ha/{Cameras-otaj2xZO.js → Cameras-CxgwXUaG.js} +307 -307
  174. package/dist/interface/ha/{Camview-BU1027if.js → Camview-DPjoUMSP.js} +513 -513
  175. package/dist/interface/ha/{Config-BlEvHYVP.js → Config-BzBFIWVF.js} +110 -110
  176. package/dist/interface/ha/{ConfigActionAssistant-uDf5fgoJ.js → ConfigActionAssistant-BpHf4Pdi.js} +4 -4
  177. package/dist/interface/ha/{ConfigActionCameraControl-BAQsXVLz.js → ConfigActionCameraControl-CmbCTwZ8.js} +3 -3
  178. package/dist/interface/ha/{ConfigActionHttp-Dy2MZHSm.js → ConfigActionHttp-BxN2KOA6.js} +2 -2
  179. package/dist/interface/ha/{ConfigActionImageInput-B5kyV3Un.js → ConfigActionImageInput-CrXUZ-cM.js} +1 -1
  180. package/dist/interface/ha/{ConfigActionMqtt-DHCgh1xx.js → ConfigActionMqtt-DYq-6_S6.js} +4 -4
  181. package/dist/interface/ha/{ConfigActionNotification-mbA5PfcJ.js → ConfigActionNotification-DPUSAVLI.js} +3 -3
  182. package/dist/interface/ha/{ConfigActionNotificationControl-TLaL7tYm.js → ConfigActionNotificationControl-h4zta4Db.js} +2 -2
  183. package/dist/interface/ha/{ConfigActionOutput-CJ40Fniw.js → ConfigActionOutput-Dwa0-7cq.js} +1 -1
  184. package/dist/interface/ha/{ConfigActionPlugin-BwTd-mdQ.js → ConfigActionPlugin-DXx1a-Hr.js} +5 -5
  185. package/dist/interface/ha/{ConfigActionSensor-BI438ihg.js → ConfigActionSensor-CfLIHqS8.js} +5 -5
  186. package/dist/interface/ha/{ConfigActionSnapshot-DJ4zI2a0.js → ConfigActionSnapshot-O0OBVq-R.js} +2 -2
  187. package/dist/interface/ha/{ConfigActionVariable-Bhy5jf_w.js → ConfigActionVariable-CbaIxRRe.js} +1 -1
  188. package/dist/interface/ha/{ConfigConditionIfElse-I7Qq8nfN.js → ConfigConditionIfElse-B7ax92bG.js} +3 -3
  189. package/dist/interface/ha/{ConfigConditionSensorState-CTLP3ppx.js → ConfigConditionSensorState-B5XIrEGU.js} +4 -4
  190. package/dist/interface/ha/{ConfigConditionSwitch-UUupXf1b.js → ConfigConditionSwitch-DJSz6bI5.js} +5 -5
  191. package/dist/interface/ha/{ConfigSensorValueInput-CoHheDT0.js → ConfigSensorValueInput-fE2SBn1B.js} +4 -4
  192. package/dist/interface/ha/{ConfigTriggerDetection-Cg_jKNed.js → ConfigTriggerDetection-BuShu78G.js} +2 -2
  193. package/dist/interface/ha/{ConfigTriggerGeofence-WlJbu3sC.js → ConfigTriggerGeofence-pBgXBkb6.js} +5 -5
  194. package/dist/interface/ha/{ConfigTriggerMqtt-BeRJoceK.js → ConfigTriggerMqtt-Dyf_TLfU.js} +1 -1
  195. package/dist/interface/ha/{ConfigTriggerSensor-k58gVKdG.js → ConfigTriggerSensor-C5YUm9ff.js} +1 -1
  196. package/dist/interface/ha/{ConfigTriggerSystem-Ckm5yoUm.js → ConfigTriggerSystem-CylHWw4i.js} +2 -2
  197. package/dist/interface/ha/{ConfigTriggerWebhook-D425z-p1.js → ConfigTriggerWebhook-ZlHsaLu4.js} +6 -6
  198. package/dist/interface/ha/{Console-C1Ub4Rji.js → Console-PNAQjW_1.js} +100 -100
  199. package/dist/interface/ha/{CuiAutomationRunsDialog-opy5qXwE.js → CuiAutomationRunsDialog-D_q8K7QO.js} +2 -2
  200. package/dist/interface/ha/{CuiBottomSheet-DbCwVXl1.js → CuiBottomSheet-BbJG-998.js} +1 -1
  201. package/dist/interface/ha/{CuiCameraRecordings-CifJLj7G.js → CuiCameraRecordings-BSI8Yn3v.js} +14 -15
  202. package/dist/interface/ha/{CuiCameraShares-Xty8LRcn.js → CuiCameraShares-DKHZJT-z.js} +6 -6
  203. package/dist/interface/ha/{CuiCameraTable-CqfxX0Yn.js → CuiCameraTable-BTdP1pEP.js} +9 -9
  204. package/dist/interface/ha/{CuiChartTable-ABHnLdR0.js → CuiChartTable-aFRfsewt.js} +46 -44
  205. package/dist/interface/ha/{CuiConsole-3JwbeUYD.js → CuiConsole-BD9jYvrD.js} +4 -4
  206. package/dist/interface/ha/{CuiDataTable-BwE7D2h5.js → CuiDataTable-C2lOduPV.js} +16 -10
  207. package/dist/interface/ha/{CuiPluginCard-bzxiy1yb.js → CuiPluginCard-C-gpcLCH.js} +78 -78
  208. package/dist/interface/ha/{CuiPluginOAuthButton-DSxrzDmg.js → CuiPluginOAuthButton-B763Rz1n.js} +6 -6
  209. package/dist/interface/ha/{CuiPluginTrustBadge-g0XkvDt8.js → CuiPluginTrustBadge-j5PKYI-V.js} +1 -1
  210. package/dist/interface/ha/{CuiQRCode-uyRFbzd6.js → CuiQRCode-D7WV4czh.js} +6 -6
  211. package/dist/interface/ha/{CuiSchema-DZIrlY8R.js → CuiSchema-BfsT0mAh.js} +155 -155
  212. package/dist/interface/ha/{CuiTopNavbarItem-C3a5NA7u.js → CuiTopNavbarItem-BwpXgGJ-.js} +1 -1
  213. package/dist/interface/ha/{Faces-D2eca8MN.js → Faces-C0e-m9EY.js} +109 -109
  214. package/dist/interface/ha/{FirstSteps-CdTE1cvw.js → FirstSteps-DsDmM44G.js} +8 -8
  215. package/dist/interface/ha/{Floorplan-BrEC2Au5.js → Floorplan-Bei9kIhS.js} +288 -288
  216. package/dist/interface/ha/{Instances-ClOsPOi8.js → Instances-BY5G1zFD.js} +70 -70
  217. package/dist/interface/ha/{Logs-DnY1gTnb.js → Logs-DDycObDv.js} +12 -12
  218. package/dist/interface/ha/{Menu-cLDE76XZ.js → Menu-9r_oFG_-.js} +15 -20
  219. package/dist/interface/ha/{Metrics-pMQX_0m1.js → Metrics-BMTIXqn6.js} +296 -292
  220. package/dist/interface/ha/{OAuthDeviceFlow-D1PGQ8r9.js → OAuthDeviceFlow-Dee5fynX.js} +9 -9
  221. package/dist/interface/ha/{Plugin-DiC23P97.js → Plugin-B5o4pLyu.js} +106 -106
  222. package/dist/interface/ha/{PluginConsole-B-lX5KJu.js → PluginConsole-REtxP1Wi.js} +4 -4
  223. package/dist/interface/ha/{PluginDetail-B_tVJf6y.js → PluginDetail-BHrKifvP.js} +6 -6
  224. package/dist/interface/ha/{PluginSearch-n8nfjx9q.js → PluginSearch-oNHMMeJD.js} +32 -32
  225. package/dist/interface/ha/{PluginUpdateProgress-BjsYyrRk.js → PluginUpdateProgress-CqllA4eR.js} +3 -3
  226. package/dist/interface/ha/{Plugins-CFhOUaqq.js → Plugins-B6y7z5yD.js} +55 -55
  227. package/dist/interface/ha/{Recordings-B07eUJwH.js → Recordings-CyhOVNoM.js} +250 -275
  228. package/dist/interface/ha/{SensorEdit-DFPiBXQD.js → SensorEdit-CnUU2PEv.js} +58 -58
  229. package/dist/interface/ha/{SensorHistory-B2FOK4Qa.js → SensorHistory-z5hDuybW.js} +2 -2
  230. package/dist/interface/ha/{Sensors-DtzmTc-L.js → Sensors-wpoB-X4r.js} +519 -519
  231. package/dist/interface/ha/{Settings-ClqSoFjT.js → Settings-C6wTksxb.js} +22 -22
  232. package/dist/interface/ha/{SettingsAccount-Bh8FfH7J.js → SettingsAccount-DByg5uzj.js} +175 -175
  233. package/dist/interface/ha/{SettingsAppearance--FJgY8cj.js → SettingsAppearance-QgPo4M8O.js} +6 -6
  234. package/dist/interface/ha/{SettingsAssistant-ClDfxd_d.js → SettingsAssistant-Bg4BhUgb.js} +603 -496
  235. package/dist/interface/ha/{SettingsBackup-BYM55pQ7.js → SettingsBackup-BgtZSRub.js} +41 -41
  236. package/dist/interface/ha/{SettingsList-CMSEKVCD.js → SettingsList-DB3j7buh.js} +1 -1
  237. package/dist/interface/ha/{SettingsMqtt-CFpgJ-E5.js → SettingsMqtt-DVx0z8vf.js} +149 -149
  238. package/dist/interface/ha/{SettingsNotifications-CzgsBNtW.js → SettingsNotifications-osO2kMMO.js} +4 -4
  239. package/dist/interface/ha/{SettingsRecordings-Bz686yU7.js → SettingsRecordings-BFEp160g.js} +4 -4
  240. package/dist/interface/ha/{SettingsRemote-DT4ZMjJO.js → SettingsRemote-DQW4FhFn.js} +303 -303
  241. package/dist/interface/ha/{SettingsSystem-CHctt06D.js → SettingsSystem-Cs1MHOTi.js} +9 -9
  242. package/dist/interface/ha/{SettingsUsers-C_hvntON.js → SettingsUsers-BtbuHlRZ.js} +31 -31
  243. package/dist/interface/ha/{Terminal-B5FXq4-Z.js → Terminal-BuXCoMle.js} +8 -8
  244. package/dist/interface/ha/Training-CnsWyeaJ.js +1505 -0
  245. package/dist/interface/ha/{Updates-D0osNjqS.js → Updates-BxU1Jpru.js} +13 -13
  246. package/dist/interface/ha/{VariableInput-BK0qqMc7.js → VariableInput-DgENnHvk.js} +1 -1
  247. package/dist/interface/ha/{VersionsHandler-B-vpKHJN.js → VersionsHandler-DQTSSqti.js} +10 -10
  248. package/dist/interface/ha/{VirtualSensorCreate-Bp2201iM.js → VirtualSensorCreate-Bsr6zTQp.js} +2 -2
  249. package/dist/interface/ha/{Workers-BQ_luGWk.js → Workers-0jZDuLbP.js} +93 -93
  250. package/dist/interface/ha/{api-BufZW7-A.js → api-B8xb-N_g.js} +1 -1
  251. package/dist/interface/ha/{api-JPS8NpNG.js → api-VnpXqKYj.js} +11331 -10921
  252. package/dist/interface/ha/{assistant-BXVGCw2q.js → assistant-DDwonneA.js} +11 -11
  253. package/dist/interface/ha/{auth-CJC9G9BA.js → auth-CXX7ago-.js} +38 -38
  254. package/dist/interface/ha/{automationBlueprint-DWuBiu_Q.js → automationBlueprint-BUkXOKb1.js} +3 -3
  255. package/dist/interface/ha/cameraui-cards.js +1 -1
  256. package/dist/interface/ha/{cards-CGP6dWjy.js → cards-CMel6uVq.js} +641 -639
  257. package/dist/interface/ha/{config-BVURO_DZ.js → config-9vwosYC8.js} +5 -5
  258. package/dist/interface/ha/{dist-Ca4K4HIm.js → dist-jxJIsKjm.js} +307 -283
  259. package/dist/interface/ha/{mqtt-DY6EvMC9.js → mqtt-Fm_GzbBi.js} +5 -5
  260. package/dist/interface/ha/{notifications-BdIqgnrC.js → notifications-CwSeoLx0.js} +7 -7
  261. package/dist/interface/ha/pause-Ch6v65wA.js +19 -0
  262. package/dist/interface/ha/{pinia-CqffEnzx.js → pinia-D2fpp6nV.js} +161 -150
  263. package/dist/interface/ha/{plugins-Bnq2Iw00.js → plugins-CgqO91Hg.js} +18 -18
  264. package/dist/interface/ha/{rooms-AiJ5Tfir.js → rooms-DGnhPCGr.js} +1 -1
  265. package/dist/interface/ha/{server-BHhFn2RZ.js → server-BqNJbXKJ.js} +8 -8
  266. package/dist/interface/ha/{types-7oMK8VO-.js → types-Ca-1kOA9.js} +32 -18
  267. package/dist/interface/ha/{ungrouped-hib17Nvu.js → ungrouped-B1RIFH36.js} +109 -127
  268. package/dist/interface/ha/{updates-DvnEEUsx.js → updates-Dn9WR43I.js} +10 -10
  269. package/dist/interface/ha/{useAppVersion-BmWXr96y.js → useAppVersion-FMZfQhEd.js} +1 -1
  270. package/dist/interface/ha/{useLogsSocket-BKlJKGCB.js → useLogsSocket-Ch8C8inE.js} +1 -1
  271. package/dist/interface/ha/{useNavLayout-Dt0NH-G5.js → useNavLayout-DPjjtXVR.js} +2 -2
  272. package/dist/interface/ha/{useServerRestart-DWs2dqQc.js → useServerRestart-DoozgL8o.js} +1 -1
  273. package/dist/interface/ha/{useTabSwipe-vX79p6V_.js → useTabSwipe-CxXAmZNc.js} +1 -1
  274. package/dist/interface/ha/{useUpdateChannel-CHlRp8uj.js → useUpdateChannel-CBwS4cI2.js} +2 -2
  275. package/dist/interface/ha/{useUpdatesSocket-B40Cx-2L.js → useUpdatesSocket-GrlBqyU4.js} +1 -1
  276. package/dist/interface/ha/{useUserOptions-hXz79rIV.js → useUserOptions-54hnf6hX.js} +1 -1
  277. package/dist/interface/index.html +34 -34
  278. package/dist/interface/sw.js +1 -1
  279. package/dist/server/package.json +10 -11
  280. package/dist/server/requirements.txt +1 -1
  281. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +2 -0
  282. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/__init__.py +2 -0
  283. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/frames.py +9 -5
  284. package/dist/server/src/api/controllers/assistant.controller.js +2 -1
  285. package/dist/server/src/api/controllers/assistant.controller.js.map +1 -1
  286. package/dist/server/src/api/controllers/plugins.controller.js +3 -3
  287. package/dist/server/src/api/controllers/plugins.controller.js.map +1 -1
  288. package/dist/server/src/api/database/index.d.ts +1 -1
  289. package/dist/server/src/api/database/index.js +1 -1
  290. package/dist/server/src/api/database/index.js.map +1 -1
  291. package/dist/server/src/api/database/migrations/v2-2-3.d.ts +3 -0
  292. package/dist/server/src/api/database/migrations/v2-2-3.js +22 -0
  293. package/dist/server/src/api/database/migrations/v2-2-3.js.map +1 -0
  294. package/dist/server/src/api/database/record-schemas.d.ts +10 -10
  295. package/dist/server/src/api/schemas/cameras.schema.d.ts +54 -38
  296. package/dist/server/src/api/schemas/cameras.schema.js +5 -5
  297. package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
  298. package/dist/server/src/api/schemas/users.schema.d.ts +70 -70
  299. package/dist/server/src/api/websocket/nsp/logs.d.ts +5 -2
  300. package/dist/server/src/api/websocket/nsp/logs.js +20 -5
  301. package/dist/server/src/api/websocket/nsp/logs.js.map +1 -1
  302. package/dist/server/src/api/websocket/nsp/metrics.d.ts +0 -1
  303. package/dist/server/src/api/websocket/nsp/metrics.js +2 -48
  304. package/dist/server/src/api/websocket/nsp/metrics.js.map +1 -1
  305. package/dist/server/src/api/websocket/nsp/training.d.ts +1 -1
  306. package/dist/server/src/api/websocket/nsp/training.js +3 -2
  307. package/dist/server/src/api/websocket/nsp/training.js.map +1 -1
  308. package/dist/server/src/api/websocket/nsp/worker-perf.d.ts +3 -0
  309. package/dist/server/src/api/websocket/nsp/worker-perf.js +58 -0
  310. package/dist/server/src/api/websocket/nsp/worker-perf.js.map +1 -0
  311. package/dist/server/src/api/websocket/types.d.ts +1 -0
  312. package/dist/server/src/assistant/manager.d.ts +1 -0
  313. package/dist/server/src/assistant/manager.js +24 -2
  314. package/dist/server/src/assistant/manager.js.map +1 -1
  315. package/dist/server/src/assistant/reasoning.d.ts +1 -1
  316. package/dist/server/src/assistant/reasoning.js +6 -3
  317. package/dist/server/src/assistant/reasoning.js.map +1 -1
  318. package/dist/server/src/assistant/retry.d.ts +4 -0
  319. package/dist/server/src/assistant/retry.js +3 -0
  320. package/dist/server/src/assistant/retry.js.map +1 -1
  321. package/dist/server/src/assistant/search.d.ts +11 -11
  322. package/dist/server/src/assistant/tool-names.d.ts +2 -0
  323. package/dist/server/src/assistant/tool-names.js +23 -0
  324. package/dist/server/src/assistant/tool-names.js.map +1 -0
  325. package/dist/server/src/assistant/tools/api.js +2 -0
  326. package/dist/server/src/assistant/tools/api.js.map +1 -1
  327. package/dist/server/src/assistant/tools/docs.js +1 -0
  328. package/dist/server/src/assistant/tools/docs.js.map +1 -1
  329. package/dist/server/src/assistant/tools/memory.js +1 -0
  330. package/dist/server/src/assistant/tools/memory.js.map +1 -1
  331. package/dist/server/src/assistant/tools/settings.js +1 -0
  332. package/dist/server/src/assistant/tools/settings.js.map +1 -1
  333. package/dist/server/src/automations/utilities/imageInput.js +4 -2
  334. package/dist/server/src/automations/utilities/imageInput.js.map +1 -1
  335. package/dist/server/src/camera/controller.d.ts +3 -0
  336. package/dist/server/src/camera/controller.js +41 -28
  337. package/dist/server/src/camera/controller.js.map +1 -1
  338. package/dist/server/src/camera/decoder/detection-coordinator.d.ts +6 -0
  339. package/dist/server/src/camera/decoder/detection-coordinator.js +117 -20
  340. package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
  341. package/dist/server/src/camera/decoder/detection-pipeline.d.ts +3 -1
  342. package/dist/server/src/camera/decoder/detection-pipeline.js +4 -0
  343. package/dist/server/src/camera/decoder/detection-pipeline.js.map +1 -1
  344. package/dist/server/src/camera/decoder/event-manager.d.ts +1 -0
  345. package/dist/server/src/camera/decoder/event-manager.js +5 -2
  346. package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
  347. package/dist/server/src/camera/decoder/event-thumbnailer.d.ts +4 -0
  348. package/dist/server/src/camera/decoder/event-thumbnailer.js +3 -0
  349. package/dist/server/src/camera/decoder/event-thumbnailer.js.map +1 -1
  350. package/dist/server/src/camera/decoder/event-trace.d.ts +2 -0
  351. package/dist/server/src/camera/decoder/event-trace.js +9 -5
  352. package/dist/server/src/camera/decoder/event-trace.js.map +1 -1
  353. package/dist/server/src/camera/decoder/perf-tracker.d.ts +5 -1
  354. package/dist/server/src/camera/decoder/perf-tracker.js +10 -2
  355. package/dist/server/src/camera/decoder/perf-tracker.js.map +1 -1
  356. package/dist/server/src/camera/decoder/types.d.ts +5 -1
  357. package/dist/server/src/camera/decoder/types.js.map +1 -1
  358. package/dist/server/src/camera/index.d.ts +1 -7
  359. package/dist/server/src/camera/index.js +0 -13
  360. package/dist/server/src/camera/index.js.map +1 -1
  361. package/dist/server/src/camera/privacy/snapshot.js +4 -2
  362. package/dist/server/src/camera/privacy/snapshot.js.map +1 -1
  363. package/dist/server/src/camera/snapshot-store.d.ts +22 -0
  364. package/dist/server/src/camera/snapshot-store.js +78 -0
  365. package/dist/server/src/camera/snapshot-store.js.map +1 -0
  366. package/dist/server/src/camera/streaming/fmp4-session.d.ts +2 -1
  367. package/dist/server/src/camera/streaming/fmp4-session.js +4 -0
  368. package/dist/server/src/camera/streaming/fmp4-session.js.map +1 -1
  369. package/dist/server/src/camera/streaming/rtp-session.js +1 -0
  370. package/dist/server/src/camera/streaming/rtp-session.js.map +1 -1
  371. package/dist/server/src/manager/trainingCandidateManager.js +17 -13
  372. package/dist/server/src/manager/trainingCandidateManager.js.map +1 -1
  373. package/dist/server/src/manager/types.d.ts +4 -0
  374. package/dist/server/src/rpc/interfaces/detection.d.ts +1 -0
  375. package/dist/server/src/rpc/interfaces/device.d.ts +1 -0
  376. package/dist/server/src/sensors/registry.d.ts +1 -0
  377. package/dist/server/src/sensors/registry.js +11 -5
  378. package/dist/server/src/sensors/registry.js.map +1 -1
  379. package/dist/server/src/sensors/sensor.js +2 -3
  380. package/dist/server/src/sensors/sensor.js.map +1 -1
  381. package/dist/server/src/sensors/types.d.ts +2 -1
  382. package/dist/server/src/sensors/types.js +7 -1
  383. package/dist/server/src/sensors/types.js.map +1 -1
  384. package/dist/server/src/utils/image.d.ts +1 -0
  385. package/dist/server/src/utils/image.js +95 -0
  386. package/dist/server/src/utils/image.js.map +1 -0
  387. package/package.json +10 -11
  388. package/dist/interface/assets/AutomationStoreDetail-btcIglkw.js +0 -2
  389. package/dist/interface/assets/Automations-CKpwXTyc.js +0 -2
  390. package/dist/interface/assets/Camera-BEP_HAQm.js +0 -2
  391. package/dist/interface/assets/Camera-gYRy6ECP.css +0 -1
  392. package/dist/interface/assets/Cameras-DJreIgtW.js +0 -651
  393. package/dist/interface/assets/Camview-D4VNMv_l.js +0 -1
  394. package/dist/interface/assets/Console-Y1IutnkC.js +0 -1
  395. package/dist/interface/assets/CuiAssistantConversation-C4RYcMAM.js +0 -5
  396. package/dist/interface/assets/CuiBottomSheet-S8bM23jj.js +0 -1
  397. package/dist/interface/assets/CuiCameraPipCard-HTjvF3yG.js +0 -1
  398. package/dist/interface/assets/CuiCameraRecordings-B7BhgPpP.css +0 -1
  399. package/dist/interface/assets/CuiCameraRecordings-Cx6FYz3Y.js +0 -1
  400. package/dist/interface/assets/CuiCameraShares-J728G9wF.js +0 -1
  401. package/dist/interface/assets/CuiCameraTable-CKur0qLE.js +0 -1
  402. package/dist/interface/assets/CuiChartTable-DCGY-zVy.css +0 -1
  403. package/dist/interface/assets/CuiDataTable-BLyeEEAp.js +0 -1
  404. package/dist/interface/assets/CuiDataTable-DbkFXZeg.css +0 -1
  405. package/dist/interface/assets/CuiLightControl-C1YSJSWd.js +0 -1
  406. package/dist/interface/assets/CuiPluginCard-enc00hbc.js +0 -2
  407. package/dist/interface/assets/CuiSchema-CRHUMY0B.js +0 -1
  408. package/dist/interface/assets/Faces-fMMd6-PY.js +0 -1
  409. package/dist/interface/assets/Floorplan-BQbOWCCf.js +0 -1
  410. package/dist/interface/assets/Menu-B3VA0LMx.js +0 -1
  411. package/dist/interface/assets/Metrics-C0q2BdKH.js +0 -9
  412. package/dist/interface/assets/Metrics-DX59XXDc.css +0 -1
  413. package/dist/interface/assets/OAuthDeviceFlow-ZiCl4400.js +0 -1
  414. package/dist/interface/assets/Plugin-C0CPlt4f.js +0 -1
  415. package/dist/interface/assets/PluginDetail-DDh6PfMd.js +0 -2
  416. package/dist/interface/assets/PluginSchema-BWlRMPo6.js +0 -1
  417. package/dist/interface/assets/PluginSearch-BR_ei8Pa.js +0 -1
  418. package/dist/interface/assets/PluginSearch-C2AXz2KG.js +0 -2
  419. package/dist/interface/assets/Plugins-CN1YIfNk.js +0 -1
  420. package/dist/interface/assets/Recordings-jhxwdrQY.js +0 -1
  421. package/dist/interface/assets/SettingsAccount-CJ_fPrT-.js +0 -1
  422. package/dist/interface/assets/SettingsAccount-CYn81m0Z.js +0 -1
  423. package/dist/interface/assets/SettingsAppearance-DFe8JsT5.js +0 -1
  424. package/dist/interface/assets/SettingsAssistant-CDyI6fee.css +0 -1
  425. package/dist/interface/assets/SettingsAssistant-Dm4oINqB.js +0 -1
  426. package/dist/interface/assets/SettingsMqtt-ByQYIRkm.js +0 -1
  427. package/dist/interface/assets/SettingsRemote-7iDccnV9.js +0 -2
  428. package/dist/interface/assets/SettingsUsers-yYobKcPv.js +0 -1
  429. package/dist/interface/assets/Training-BUhrkDzA.css +0 -1
  430. package/dist/interface/assets/Training-SOWa6Ay1.js +0 -1
  431. package/dist/interface/assets/Workers-D7mXpfvC.js +0 -2
  432. package/dist/interface/assets/api-BKiE8A_V.css +0 -2
  433. package/dist/interface/assets/api-Cl7JjXOQ.js +0 -4
  434. package/dist/interface/assets/cloudHandoff-CGMLCwMb.js +0 -1
  435. package/dist/interface/assets/main-W8WcKa2g.js +0 -3
  436. package/dist/interface/assets/rooms-D_7As09p.js +0 -1
  437. package/dist/interface/assets/types-BEy4uGJ0.js +0 -1
  438. package/dist/interface/assets/ungrouped-BJyBDv5e.js +0 -1
  439. package/dist/interface/assets/useBackupRestore-D305pYHT.js +0 -1
  440. package/dist/interface/assets/vendor-cameraui-CqKq4Yeo.js +0 -2326
  441. package/dist/interface/ha/Training-BgvpsKPM.js +0 -1469
@@ -40,6 +40,8 @@ const TRAINING_FRAME_MAX_WIDTH = 1280;
40
40
  const TRAINING_ATTRIBUTE_BONUS = 0.2;
41
41
  const TRAINING_FRAME_QUALITY = 80;
42
42
  const MOMENT_EVENTS = new Set(['objectEntered', 'objectWoke', 'objectRecovered', 'bestShotUpdated']);
43
+ const WITNESS_WINDOW_MS = 3000;
44
+ const HELD_MOMENT_MS = 4000;
43
45
  const MOMENT_MOVING_SPEED = 0.05;
44
46
  const MOMENT_ATTRIBUTE_MIN_AREA = 600;
45
47
  const DEFAULT_CASCADE_TIMEOUT = 10;
@@ -77,6 +79,10 @@ let DetectionCoordinator = class DetectionCoordinator {
77
79
  platesSeen = new Set();
78
80
  classifierLabels = new Map();
79
81
  feedingSensors = new Map();
82
+ witnessSensors = new Set();
83
+ // label -> when a witness last reported it, for the trace
84
+ witnessSeen = new Map();
85
+ heldMoments = new Map();
80
86
  dwell = new DwellManager();
81
87
  privacy;
82
88
  // debugging
@@ -223,6 +229,8 @@ let DetectionCoordinator = class DetectionCoordinator {
223
229
  return this.config.detectionSettings;
224
230
  }
225
231
  getPerfSnapshot() {
232
+ // decodes outside the loop (external reports, pictures) count as well
233
+ this.collectDecodeStats();
226
234
  const { timings, ...counters } = this.perf.snapshot();
227
235
  const detectors = {};
228
236
  for (const type of DETECTOR_METRIC_TYPES) {
@@ -247,8 +255,19 @@ let DetectionCoordinator = class DetectionCoordinator {
247
255
  };
248
256
  }
249
257
  resetPerf() {
258
+ // what was decoded before the reset must not land in the new period
259
+ this.frameSource.takeDecodeStats();
260
+ this.thumbnailer.takeHqDecodeStats();
250
261
  this.perf.reset();
251
262
  }
263
+ collectDecodeStats() {
264
+ const decode = this.frameSource.takeDecodeStats();
265
+ this.perf.decodeMs += decode.ms;
266
+ this.perf.decodedFrames += decode.frames;
267
+ const main = this.thumbnailer.takeHqDecodeStats();
268
+ this.perf.mainDecodeMs += main.ms;
269
+ this.perf.mainDecodedFrames += main.frames;
270
+ }
252
271
  pauseForBenchmark(paused) {
253
272
  this.benchmarkRunning = paused;
254
273
  }
@@ -334,6 +353,7 @@ let DetectionCoordinator = class DetectionCoordinator {
334
353
  }
335
354
  }
336
355
  async dispose() {
356
+ this.heldMoments.clear();
337
357
  await this.stopVideoLoop();
338
358
  await this.frameSource.stop();
339
359
  await this.audioLoop.stop();
@@ -349,6 +369,12 @@ let DetectionCoordinator = class DetectionCoordinator {
349
369
  this.currentDetectionState = {};
350
370
  }
351
371
  async onSensorAdded(sensor) {
372
+ if (sensor.role === 'witness') {
373
+ this.feedingSensors.delete(sensor.sensorId);
374
+ this.witnessSensors.add(sensor.sensorId);
375
+ return;
376
+ }
377
+ this.witnessSensors.delete(sensor.sensorId);
352
378
  if (DETECTION_SENSOR_TYPES.has(sensor.sensorType)) {
353
379
  this.feedingSensors.set(sensor.sensorId, sensor.sensorType);
354
380
  }
@@ -364,6 +390,7 @@ let DetectionCoordinator = class DetectionCoordinator {
364
390
  }
365
391
  }
366
392
  async onSensorRemoved(sensorId) {
393
+ this.witnessSensors.delete(sensorId);
367
394
  this.classifierLabels.delete(sensorId);
368
395
  const sensorType = this.feedingSensors.get(sensorId);
369
396
  if (sensorType === SensorType.Face)
@@ -392,7 +419,12 @@ let DetectionCoordinator = class DetectionCoordinator {
392
419
  this.ptzAutotracker.setCapabilities(sensorId, capabilities);
393
420
  }
394
421
  async reportSensorWrite(sensorId, sensorType, properties) {
395
- // the registry only announces the plugin assigned for this type, everyone else reports into the void
422
+ if (sensorType === SensorType.Object && this.witnessSensors.has(sensorId)) {
423
+ this.recordWitness(properties);
424
+ return;
425
+ }
426
+ // the registry announces the plugin assigned for this type and the
427
+ // witnesses, everyone else reports into the void
396
428
  if (!this.feedingSensors.has(sensorId))
397
429
  return;
398
430
  // a detector reports its spec again once its models finished loading
@@ -677,6 +709,25 @@ let DetectionCoordinator = class DetectionCoordinator {
677
709
  ...(result.decibels !== undefined ? { decibels: result.decibels } : {}),
678
710
  });
679
711
  }
712
+ recordWitness(properties) {
713
+ if (properties.detected !== true)
714
+ return;
715
+ const detections = properties.detections ?? [];
716
+ const labels = new Set();
717
+ for (const detection of detections) {
718
+ const label = detection.label?.toLowerCase();
719
+ if (label && this.pipeline.objectLabelAllowed(label))
720
+ labels.add(label);
721
+ }
722
+ if (labels.size === 0)
723
+ return;
724
+ const at = Date.now();
725
+ for (const label of labels) {
726
+ this.pipeline.attest(label, at);
727
+ this.witnessSeen.set(label, at);
728
+ }
729
+ this.logger.trace(`[witness] ${[...labels].join(', ')}`);
730
+ }
680
731
  writeSensorProperties(sensorId, properties) {
681
732
  const msg = {
682
733
  sensorId,
@@ -1087,6 +1138,7 @@ let DetectionCoordinator = class DetectionCoordinator {
1087
1138
  let firstFrame = true;
1088
1139
  while (this.loopRunning) {
1089
1140
  const tickStart = Date.now();
1141
+ let onMainStream = false;
1090
1142
  const snap = await this.frameSource.nextFrame(lastFrameId);
1091
1143
  if (!snap)
1092
1144
  break; // source stopped
@@ -1115,6 +1167,7 @@ let DetectionCoordinator = class DetectionCoordinator {
1115
1167
  // motion always reads the low stream: switching its input resolution
1116
1168
  // would reset the background model on every transition
1117
1169
  const analysis = await this.acquireAnalysisFrame(snap);
1170
+ onMainStream = analysis.isMainStream;
1118
1171
  // debugging
1119
1172
  detectionRecord.setFrame(analysis.isMainStream ? 'main' : 'low', analysis.frame.width, analysis.frame.height, analysis.rtp, analysis.role);
1120
1173
  try {
@@ -1147,9 +1200,7 @@ let DetectionCoordinator = class DetectionCoordinator {
1147
1200
  // ignore
1148
1201
  }
1149
1202
  }
1150
- const decode = this.frameSource.takeDecodeStats();
1151
- this.perf.decodeMs += decode.ms;
1152
- this.perf.decodedFrames += decode.frames;
1203
+ this.collectDecodeStats();
1153
1204
  // activity, not stream choice: cameras without main-stream analysis still count as active
1154
1205
  if (this.worldSpans.size > 0 || this.eventManager.hasActiveSegment())
1155
1206
  this.perf.activeTicks++;
@@ -1159,7 +1210,12 @@ let DetectionCoordinator = class DetectionCoordinator {
1159
1210
  const remaining = (this.mainStreamActive ? ACTIVE_TICK_MS : IDLE_TICK_MS) - (Date.now() - tickStart);
1160
1211
  if (remaining > 0)
1161
1212
  await sleep(remaining);
1162
- this.perf.loopMs += Date.now() - tickStart;
1213
+ const tickMs = Date.now() - tickStart;
1214
+ this.perf.loopMs += tickMs;
1215
+ if (onMainStream) {
1216
+ this.perf.mainTicks++;
1217
+ this.perf.mainLoopMs += tickMs;
1218
+ }
1163
1219
  }
1164
1220
  await this.frameSource.detach();
1165
1221
  this.frameScaler.clearCache();
@@ -1167,12 +1223,9 @@ let DetectionCoordinator = class DetectionCoordinator {
1167
1223
  }
1168
1224
  async acquireAnalysisFrame(snap) {
1169
1225
  if (this.mainStreamActive) {
1170
- const t0 = Date.now();
1171
1226
  try {
1172
1227
  const main = await this.thumbnailer.acquireHqFrame(0);
1173
1228
  if (main) {
1174
- this.perf.mainFrames++;
1175
- this.perf.mainDecodeMs += Date.now() - t0;
1176
1229
  return { frame: main.frame, scaler: main.scaler, isMainStream: true, rtp: main.rtp, role: this.thumbnailer.mainStreamRole };
1177
1230
  }
1178
1231
  }
@@ -1185,12 +1238,9 @@ let DetectionCoordinator = class DetectionCoordinator {
1185
1238
  async acquireOpeningHqFrame() {
1186
1239
  if (!this.mainStreamAvailable)
1187
1240
  return undefined;
1188
- const t0 = Date.now();
1189
1241
  try {
1190
1242
  const main = await this.thumbnailer.acquireHqFrame(0);
1191
1243
  if (main) {
1192
- this.perf.mainFrames++;
1193
- this.perf.mainDecodeMs += Date.now() - t0;
1194
1244
  return { frame: main.frame, scaler: main.scaler, isMainStream: true, rtp: main.rtp, role: this.thumbnailer.mainStreamRole };
1195
1245
  }
1196
1246
  }
@@ -1225,6 +1275,9 @@ let DetectionCoordinator = class DetectionCoordinator {
1225
1275
  trace.rtp = analysis.rtp;
1226
1276
  trace.src = analysis.role?.replace('-resolution', '');
1227
1277
  trace.attrs = traceAttributes(results);
1278
+ const witness = [...this.witnessSeen].filter(([, at]) => Math.abs(trace.tMs - at) <= WITNESS_WINDOW_MS).map(([label]) => label);
1279
+ if (witness.length > 0)
1280
+ trace.witness = witness;
1228
1281
  // debugging
1229
1282
  detectionRecord.tick({ ...trace });
1230
1283
  return trace;
@@ -1259,8 +1312,10 @@ let DetectionCoordinator = class DetectionCoordinator {
1259
1312
  const motionDue = t0 - this.lastMotionAt >= MOTION_INTERVAL_MS - TICK_SLACK_MS;
1260
1313
  const motionScaleStart = Date.now();
1261
1314
  const motionFrame = motionDue ? await this.scaleForMotion(motionRawFrame) : undefined;
1262
- if (motionDue)
1263
- this.perf.scaleMs += Date.now() - motionScaleStart;
1315
+ if (motionDue) {
1316
+ this.perf.motionScaleMs += Date.now() - motionScaleStart;
1317
+ this.perf.motionScaleCount++;
1318
+ }
1264
1319
  if (!this.loopRunning)
1265
1320
  return;
1266
1321
  if (motionFrame) {
@@ -1306,7 +1361,8 @@ let DetectionCoordinator = class DetectionCoordinator {
1306
1361
  if (localizeDue && this.localizerWanted) {
1307
1362
  const scaleStart = Date.now();
1308
1363
  const gray = await this.scaleForMotionInput(motionRawFrame);
1309
- this.perf.scaleMs += Date.now() - scaleStart;
1364
+ this.perf.motionScaleMs += Date.now() - scaleStart;
1365
+ this.perf.motionScaleCount++;
1310
1366
  if (!this.loopRunning)
1311
1367
  return;
1312
1368
  if (gray)
@@ -1344,6 +1400,7 @@ let DetectionCoordinator = class DetectionCoordinator {
1344
1400
  if (this.updateWorldSpans(pipelineResult) && !analysis.isMainStream) {
1345
1401
  this.hqUpgrade = await this.acquireOpeningHqFrame();
1346
1402
  }
1403
+ await this.holdSightingMoments(pipelineResult, this.hqUpgrade ?? analysis, t0);
1347
1404
  await this.captureMoments(pipelineResult, this.hqUpgrade ?? analysis, t0);
1348
1405
  // open spans and a lingering segment keep the cascade armed: the
1349
1406
  // world can only observe absence or a reappearance while it still
@@ -1648,6 +1705,35 @@ let DetectionCoordinator = class DetectionCoordinator {
1648
1705
  }
1649
1706
  return opened;
1650
1707
  }
1708
+ async holdSightingMoments(result, analysis, at) {
1709
+ for (const [trackId, held] of this.heldMoments) {
1710
+ if (at - held.capturedAt > HELD_MOMENT_MS)
1711
+ this.heldMoments.delete(trackId);
1712
+ }
1713
+ for (const id of result.removed)
1714
+ this.heldMoments.delete(id);
1715
+ if (this.witnessSensors.size === 0)
1716
+ return;
1717
+ const confirmed = new Set(result.created);
1718
+ for (const sighting of result.sightings) {
1719
+ // confirmed in the same tick: the regular moment cuts this frame anyway
1720
+ if (confirmed.has(sighting.trackId))
1721
+ continue;
1722
+ const box = { x: sighting.x, y: sighting.y, width: sighting.width, height: sighting.height };
1723
+ const rendered = await this.renderMoment({ subject: box, base: box }, analysis);
1724
+ if (!rendered)
1725
+ continue;
1726
+ const score = sighting.confidence * Math.sqrt(sighting.width * sighting.height);
1727
+ this.heldMoments.set(sighting.trackId, {
1728
+ strip: rendered.strip,
1729
+ card: rendered.card,
1730
+ capturedAt: at,
1731
+ score,
1732
+ rank: MOMENT_RANK_OBJECT,
1733
+ stream: analysis.isMainStream ? 'main' : 'low',
1734
+ });
1735
+ }
1736
+ }
1651
1737
  async captureMoments(result, analysis, at) {
1652
1738
  let subject;
1653
1739
  let bestScore = -1;
@@ -1672,6 +1758,16 @@ let DetectionCoordinator = class DetectionCoordinator {
1672
1758
  // one frame per tick, not one per object: they share the picture
1673
1759
  if (!subject)
1674
1760
  return;
1761
+ // a track confirmed through a witness after its only sighting: the
1762
+ // current frame no longer shows it, the picture held at the sighting does
1763
+ const held = this.heldMoments.get(subject.trackId);
1764
+ this.heldMoments.delete(subject.trackId);
1765
+ if (held && trigger === 'objectEntered' && subject.lastSeenMs < at) {
1766
+ if (!this.eventManager.wantsMoment(held.rank, held.score, held.stream, at))
1767
+ return;
1768
+ this.eventManager.offerMoment({ ...held, capturedAt: at, shownAt: held.capturedAt });
1769
+ return;
1770
+ }
1675
1771
  if (!this.eventManager.wantsMoment(MOMENT_RANK_OBJECT, bestScore, analysis.isMainStream ? 'main' : 'low', at))
1676
1772
  return;
1677
1773
  await this.captureMoment(subject, bestScore, trigger, result.tracked, analysis, at);
@@ -1921,7 +2017,9 @@ let DetectionCoordinator = class DetectionCoordinator {
1921
2017
  const perWindow = await Promise.all(windows.map((window) => this.detectInWindow(objectPlugin, analysis.frame, analysis.scaler, window, inputSpec)));
1922
2018
  this.perf.objectMs += Date.now() - inferStart;
1923
2019
  this.perf.objectCount++;
1924
- return mergeWindowDetections(perWindow.flat());
2020
+ for (const window of perWindow)
2021
+ this.perf.scaleMs += window.cropMs;
2022
+ return mergeWindowDetections(perWindow.flatMap((window) => window.detections));
1925
2023
  }
1926
2024
  const scaleStart = Date.now();
1927
2025
  const objectFrame = await this.scaleForObject(analysis.frame, analysis.scaler);
@@ -1937,11 +2035,11 @@ let DetectionCoordinator = class DetectionCoordinator {
1937
2035
  async detectInWindow(plugin, frame, scaler, window, spec) {
1938
2036
  const scaleStart = Date.now();
1939
2037
  const cropped = await scaler.cropToSpec(frame, window, spec);
1940
- this.perf.scaleMs += Date.now() - scaleStart;
2038
+ const cropMs = Date.now() - scaleStart;
1941
2039
  if (!cropped)
1942
- return [];
2040
+ return { detections: [], cropMs };
1943
2041
  const result = await PromiseTimeout(plugin.proxy.detectObjects(scaler.toVideoFrameData(cropped.padded, 'model')), DETECT_TIMEOUT_MS, undefined, `Object detection timed out after ${DETECT_TIMEOUT_MS}ms`);
1944
- return FrameScaler.undoLetterbox(ensureDetectionBoxes(result.detections), cropped.geometry);
2042
+ return { detections: FrameScaler.undoLetterbox(ensureDetectionBoxes(result.detections), cropped.geometry), cropMs };
1945
2043
  }
1946
2044
  async scaleFrameForPlugin(rawFrame, plugin, scaler = this.frameScaler) {
1947
2045
  const inputSpec = plugin.modelSpec?.input;
@@ -1990,7 +2088,6 @@ let DetectionCoordinator = class DetectionCoordinator {
1990
2088
  const found = boxed.filter((d) => reportedLabels.size === 0 || reportedLabels.has(d.label.toLowerCase()));
1991
2089
  if (found.length === 0)
1992
2090
  return { detections: reported, assisted: false };
1993
- this.perf.objects += found.length;
1994
2091
  return { detections: found, assisted: true };
1995
2092
  }
1996
2093
  catch (error) {
@@ -2013,7 +2110,7 @@ let DetectionCoordinator = class DetectionCoordinator {
2013
2110
  if (windows.length > 0) {
2014
2111
  detectionRecord.zoom({ kind: 'assist', anchors, windows });
2015
2112
  const perWindow = await Promise.all(windows.map((window) => this.detectInWindow(assist, frame, scaler, window, inputSpec)));
2016
- return mergeWindowDetections(perWindow.flat());
2113
+ return mergeWindowDetections(perWindow.flatMap((window) => window.detections));
2017
2114
  }
2018
2115
  }
2019
2116
  detectionRecord.tick({