camstack 1.0.6 → 1.0.7

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.
@@ -14522,49 +14522,7 @@ function date4(params) {
14522
14522
  // ../../node_modules/zod/v4/classic/external.js
14523
14523
  config(en_default());
14524
14524
 
14525
- // ../types/dist/index.mjs
14526
- var wiringProbeKindSchema = external_exports.enum([
14527
- "singleton",
14528
- "device",
14529
- "widget"
14530
- ]);
14531
- var wiringProbeResultSchema = external_exports.object({
14532
- capName: external_exports.string(),
14533
- kind: wiringProbeKindSchema,
14534
- deviceId: external_exports.number().optional(),
14535
- reachable: external_exports.boolean(),
14536
- latencyMs: external_exports.number(),
14537
- error: external_exports.string().optional()
14538
- });
14539
- var wiringAddonHealthSchema = external_exports.object({
14540
- addonId: external_exports.string(),
14541
- caps: external_exports.array(wiringProbeResultSchema).readonly(),
14542
- widgets: external_exports.array(wiringProbeResultSchema).readonly()
14543
- });
14544
- var wiringNodeHealthSchema = external_exports.object({
14545
- nodeId: external_exports.string(),
14546
- addons: external_exports.array(wiringAddonHealthSchema).readonly()
14547
- });
14548
- var wiringHealthSnapshotSchema = external_exports.object({
14549
- /** True only when every probed target is reachable. */
14550
- ok: external_exports.boolean(),
14551
- /** True when at least one target is unreachable. */
14552
- degraded: external_exports.boolean(),
14553
- checkedAt: external_exports.string(),
14554
- nodes: external_exports.array(wiringNodeHealthSchema).readonly(),
14555
- summary: external_exports.object({
14556
- total: external_exports.number(),
14557
- reachable: external_exports.number(),
14558
- unreachable: external_exports.number()
14559
- })
14560
- });
14561
- var MODEL_FORMATS = [
14562
- "onnx",
14563
- "coreml",
14564
- "openvino",
14565
- "tflite",
14566
- "pt"
14567
- ];
14525
+ // ../types/dist/sleep-D7JeS58T.mjs
14568
14526
  var WELL_KNOWN_TABS = [
14569
14527
  {
14570
14528
  id: "overview",
@@ -14805,7 +14763,7 @@ var ProfileSlotSchema = external_exports.object({
14805
14763
  preBufferSec: external_exports.number().nonnegative().optional(),
14806
14764
  errorMessage: external_exports.string().optional()
14807
14765
  });
14808
- var StreamSourceEntrySchema = external_exports.object({
14766
+ var StreamSourceEntrySchema$1 = external_exports.object({
14809
14767
  id: external_exports.string(),
14810
14768
  label: external_exports.string(),
14811
14769
  protocol: external_exports.enum([
@@ -14912,63 +14870,415 @@ var SubscribeAudioChunksResultSchema = external_exports.object({
14912
14870
  /** Opaque id passed to `pullAudioChunks` / `unsubscribeAudioChunks`. */
14913
14871
  subscriptionId: external_exports.string()
14914
14872
  });
14915
- var BrokerStatusSchema = external_exports.enum([
14916
- "idle",
14917
- "connecting",
14918
- "streaming",
14919
- "error",
14920
- "stopped"
14921
- ]);
14922
- var BrokerStatsSchema = external_exports.object({
14923
- status: BrokerStatusSchema,
14924
- inputFps: external_exports.number(),
14925
- decodeFps: external_exports.number(),
14926
- encodedSubscribers: external_exports.number(),
14927
- decodedSubscribers: external_exports.number(),
14928
- uptimeMs: external_exports.number(),
14929
- bitrateKbps: external_exports.number(),
14930
- idrIntervalMs: external_exports.number(),
14931
- codec: external_exports.string().optional(),
14932
- totalBytes: external_exports.number(),
14933
- packetCount: external_exports.number(),
14934
- rtspClients: external_exports.number(),
14935
- pipeClients: external_exports.number(),
14936
- preBufferSec: external_exports.number(),
14937
- preBufferMs: external_exports.number(),
14938
- preBufferPackets: external_exports.number(),
14939
- /**
14940
- * Moleculer node id of the decoder provider currently servicing this
14941
- * stream's decoded subscribers. `null` until the deferred decoder is
14942
- * created (no decoded clients yet, or codec not detected). Surfaces the
14943
- * runtime decoder placement so the UI can show "Decoder: <agent>" without
14944
- * a separate cap call per broker.
14945
- */
14946
- decoderNodeId: external_exports.string().nullable(),
14947
- /**
14948
- * Detected audio track parameters from the RTSP DESCRIBE / SDP. `null`
14949
- * when the stream has no audio track or the broker is in cold start.
14950
- * `supported = false` means the codec was detected but the local
14951
- * decoder pipeline cannot produce PCM chunks (e.g. AAC without the
14952
- * AAC pipeline wired). Surfaced in the UI device-overview so operators
14953
- * can pre-pick the audio-analysis model that matches the codec.
14954
- */
14955
- audio: external_exports.object({
14956
- codec: external_exports.string(),
14957
- sampleRate: external_exports.number(),
14958
- channels: external_exports.number(),
14959
- supported: external_exports.boolean()
14960
- }).nullable().optional()
14873
+ var BrokerStatusSchema = external_exports.enum([
14874
+ "idle",
14875
+ "connecting",
14876
+ "streaming",
14877
+ "error",
14878
+ "stopped"
14879
+ ]);
14880
+ var BrokerStatsSchema = external_exports.object({
14881
+ status: BrokerStatusSchema,
14882
+ inputFps: external_exports.number(),
14883
+ decodeFps: external_exports.number(),
14884
+ encodedSubscribers: external_exports.number(),
14885
+ decodedSubscribers: external_exports.number(),
14886
+ uptimeMs: external_exports.number(),
14887
+ bitrateKbps: external_exports.number(),
14888
+ idrIntervalMs: external_exports.number(),
14889
+ codec: external_exports.string().optional(),
14890
+ totalBytes: external_exports.number(),
14891
+ packetCount: external_exports.number(),
14892
+ rtspClients: external_exports.number(),
14893
+ pipeClients: external_exports.number(),
14894
+ preBufferSec: external_exports.number(),
14895
+ preBufferMs: external_exports.number(),
14896
+ preBufferPackets: external_exports.number(),
14897
+ /**
14898
+ * Moleculer node id of the decoder provider currently servicing this
14899
+ * stream's decoded subscribers. `null` until the deferred decoder is
14900
+ * created (no decoded clients yet, or codec not detected). Surfaces the
14901
+ * runtime decoder placement so the UI can show "Decoder: <agent>" without
14902
+ * a separate cap call per broker.
14903
+ */
14904
+ decoderNodeId: external_exports.string().nullable(),
14905
+ /**
14906
+ * Detected audio track parameters from the RTSP DESCRIBE / SDP. `null`
14907
+ * when the stream has no audio track or the broker is in cold start.
14908
+ * `supported = false` means the codec was detected but the local
14909
+ * decoder pipeline cannot produce PCM chunks (e.g. AAC without the
14910
+ * AAC pipeline wired). Surfaced in the UI device-overview so operators
14911
+ * can pre-pick the audio-analysis model that matches the codec.
14912
+ */
14913
+ audio: external_exports.object({
14914
+ codec: external_exports.string(),
14915
+ sampleRate: external_exports.number(),
14916
+ channels: external_exports.number(),
14917
+ supported: external_exports.boolean()
14918
+ }).nullable().optional()
14919
+ });
14920
+ var ProfileRtspEntrySchema = external_exports.object({
14921
+ profile: CamProfileSchema,
14922
+ /** Profile-keyed broker id, format `${deviceId}/${profile}` (e.g. `"15/high"`). */
14923
+ brokerId: external_exports.string(),
14924
+ url: external_exports.string(),
14925
+ mutedUrl: external_exports.string(),
14926
+ enabled: external_exports.boolean(),
14927
+ codec: external_exports.string().optional(),
14928
+ resolution: CamStreamResolutionSchema.optional()
14929
+ });
14930
+ var DeviceType = /* @__PURE__ */ (function(DeviceType2) {
14931
+ DeviceType2["Camera"] = "camera";
14932
+ DeviceType2["Hub"] = "hub";
14933
+ DeviceType2["Light"] = "light";
14934
+ DeviceType2["Siren"] = "siren";
14935
+ DeviceType2["Switch"] = "switch";
14936
+ DeviceType2["Sensor"] = "sensor";
14937
+ DeviceType2["Thermostat"] = "thermostat";
14938
+ DeviceType2["Button"] = "button";
14939
+ DeviceType2["EventEmitter"] = "event-emitter";
14940
+ DeviceType2["Update"] = "update";
14941
+ DeviceType2["Generic"] = "generic";
14942
+ DeviceType2["Notifier"] = "notifier";
14943
+ DeviceType2["Script"] = "script";
14944
+ DeviceType2["Automation"] = "automation";
14945
+ DeviceType2["Lock"] = "lock";
14946
+ DeviceType2["Cover"] = "cover";
14947
+ DeviceType2["Valve"] = "valve";
14948
+ DeviceType2["Humidifier"] = "humidifier";
14949
+ DeviceType2["WaterHeater"] = "water-heater";
14950
+ DeviceType2["Fan"] = "fan";
14951
+ DeviceType2["MediaPlayer"] = "media-player";
14952
+ DeviceType2["AlarmPanel"] = "alarm-panel";
14953
+ DeviceType2["Control"] = "control";
14954
+ DeviceType2["Presence"] = "presence";
14955
+ DeviceType2["Weather"] = "weather";
14956
+ DeviceType2["Vacuum"] = "vacuum";
14957
+ DeviceType2["LawnMower"] = "lawn-mower";
14958
+ DeviceType2["Container"] = "container";
14959
+ DeviceType2["Image"] = "image";
14960
+ return DeviceType2;
14961
+ })({});
14962
+ var DeviceFeature = /* @__PURE__ */ (function(DeviceFeature2) {
14963
+ DeviceFeature2["BatteryOperated"] = "battery-operated";
14964
+ DeviceFeature2["Rebootable"] = "rebootable";
14965
+ DeviceFeature2["Resyncable"] = "resyncable";
14966
+ DeviceFeature2["NativeSnapshot"] = "native-snapshot";
14967
+ DeviceFeature2["DoorbellButton"] = "doorbell-button";
14968
+ DeviceFeature2["TwoWayAudio"] = "two-way-audio";
14969
+ DeviceFeature2["PanTiltZoom"] = "pan-tilt-zoom";
14970
+ DeviceFeature2["PtzAutotrack"] = "ptz-autotrack";
14971
+ DeviceFeature2["MotionTrigger"] = "motion-trigger";
14972
+ DeviceFeature2["LightColorRgb"] = "light-color-rgb";
14973
+ DeviceFeature2["LightColorHsv"] = "light-color-hsv";
14974
+ DeviceFeature2["LightColorMired"] = "light-color-mired";
14975
+ DeviceFeature2["ClimateDualSetpoint"] = "climate-dual-setpoint";
14976
+ DeviceFeature2["ClimateHumidity"] = "climate-humidity";
14977
+ DeviceFeature2["ClimateFanMode"] = "climate-fan-mode";
14978
+ DeviceFeature2["ClimatePreset"] = "climate-preset";
14979
+ DeviceFeature2["CoverPositionable"] = "cover-positionable";
14980
+ DeviceFeature2["CoverTilt"] = "cover-tilt";
14981
+ DeviceFeature2["ValvePositionable"] = "valve-positionable";
14982
+ DeviceFeature2["FanSpeed"] = "fan-speed";
14983
+ DeviceFeature2["FanPreset"] = "fan-preset";
14984
+ DeviceFeature2["FanDirection"] = "fan-direction";
14985
+ DeviceFeature2["FanOscillating"] = "fan-oscillating";
14986
+ DeviceFeature2["LockPinRequired"] = "lock-pin-required";
14987
+ DeviceFeature2["LockOpen"] = "lock-open";
14988
+ DeviceFeature2["MediaPlayerSeek"] = "media-player-seek";
14989
+ DeviceFeature2["MediaPlayerVolume"] = "media-player-volume";
14990
+ DeviceFeature2["MediaPlayerMute"] = "media-player-mute";
14991
+ DeviceFeature2["MediaPlayerShuffle"] = "media-player-shuffle";
14992
+ DeviceFeature2["MediaPlayerRepeat"] = "media-player-repeat";
14993
+ DeviceFeature2["MediaPlayerSelectSource"] = "media-player-select-source";
14994
+ DeviceFeature2["MediaPlayerPlayMedia"] = "media-player-play-media";
14995
+ DeviceFeature2["MediaPlayerNext"] = "media-player-next";
14996
+ DeviceFeature2["MediaPlayerPrevious"] = "media-player-previous";
14997
+ DeviceFeature2["MediaPlayerStop"] = "media-player-stop";
14998
+ DeviceFeature2["AlarmPinRequired"] = "alarm-pin-required";
14999
+ DeviceFeature2["PresenceGps"] = "presence-gps";
15000
+ DeviceFeature2["NotifierImage"] = "notifier-image";
15001
+ DeviceFeature2["NotifierPriority"] = "notifier-priority";
15002
+ DeviceFeature2["NotifierData"] = "notifier-data";
15003
+ DeviceFeature2["NotifierActions"] = "notifier-actions";
15004
+ DeviceFeature2["NotifierRecipients"] = "notifier-recipients";
15005
+ DeviceFeature2["ScriptVariables"] = "script-variables";
15006
+ DeviceFeature2["AutomationSkipCondition"] = "automation-skip-condition";
15007
+ return DeviceFeature2;
15008
+ })({});
15009
+ var DeviceRole = /* @__PURE__ */ (function(DeviceRole2) {
15010
+ DeviceRole2["Siren"] = "siren";
15011
+ DeviceRole2["Floodlight"] = "floodlight";
15012
+ DeviceRole2["Spotlight"] = "spotlight";
15013
+ DeviceRole2["PirSensor"] = "pir-sensor";
15014
+ DeviceRole2["Chime"] = "chime";
15015
+ DeviceRole2["Autotrack"] = "autotrack";
15016
+ DeviceRole2["Nightvision"] = "nightvision";
15017
+ DeviceRole2["PrivacyMask"] = "privacy-mask";
15018
+ DeviceRole2["Doorbell"] = "doorbell";
15019
+ DeviceRole2["BinaryHelper"] = "binary-helper";
15020
+ DeviceRole2["MotionSensor"] = "motion-sensor";
15021
+ DeviceRole2["ContactSensor"] = "contact-sensor";
15022
+ DeviceRole2["LeakSensor"] = "leak-sensor";
15023
+ DeviceRole2["SmokeSensor"] = "smoke-sensor";
15024
+ DeviceRole2["COSensor"] = "co-sensor";
15025
+ DeviceRole2["GasSensor"] = "gas-sensor";
15026
+ DeviceRole2["TamperSensor"] = "tamper-sensor";
15027
+ DeviceRole2["VibrationSensor"] = "vibration-sensor";
15028
+ DeviceRole2["ConnectivitySensor"] = "connectivity-sensor";
15029
+ DeviceRole2["SoundSensor"] = "sound-sensor";
15030
+ DeviceRole2["BinarySensor"] = "binary-sensor";
15031
+ DeviceRole2["TemperatureSensor"] = "temperature-sensor";
15032
+ DeviceRole2["HumiditySensor"] = "humidity-sensor";
15033
+ DeviceRole2["AmbientLightSensor"] = "ambient-light-sensor";
15034
+ DeviceRole2["PressureSensor"] = "pressure-sensor";
15035
+ DeviceRole2["PowerSensor"] = "power-sensor";
15036
+ DeviceRole2["EnergySensor"] = "energy-sensor";
15037
+ DeviceRole2["VoltageSensor"] = "voltage-sensor";
15038
+ DeviceRole2["CurrentSensor"] = "current-sensor";
15039
+ DeviceRole2["AirQualitySensor"] = "air-quality-sensor";
15040
+ DeviceRole2["BatterySensor"] = "battery-sensor";
15041
+ DeviceRole2["NumericSensor"] = "numeric-sensor";
15042
+ DeviceRole2["EnumSensor"] = "enum-sensor";
15043
+ DeviceRole2["DateTimeSensor"] = "datetime-sensor";
15044
+ DeviceRole2["GenericSensor"] = "generic-sensor";
15045
+ DeviceRole2["NumericControl"] = "numeric-control";
15046
+ DeviceRole2["SelectControl"] = "select-control";
15047
+ DeviceRole2["TextControl"] = "text-control";
15048
+ DeviceRole2["DateTimeControl"] = "datetime-control";
15049
+ DeviceRole2["MobilePushNotifier"] = "mobile-push-notifier";
15050
+ DeviceRole2["MessagingNotifier"] = "messaging-notifier";
15051
+ DeviceRole2["EmailNotifier"] = "email-notifier";
15052
+ DeviceRole2["GenericNotifier"] = "generic-notifier";
15053
+ return DeviceRole2;
15054
+ })({});
15055
+ var ContributionSectionSchema = external_exports.object({
15056
+ id: external_exports.string(),
15057
+ title: external_exports.string(),
15058
+ description: external_exports.string().optional(),
15059
+ style: external_exports.enum(["card", "accordion"]).optional(),
15060
+ defaultCollapsed: external_exports.boolean().optional(),
15061
+ columns: external_exports.union([
15062
+ external_exports.literal(1),
15063
+ external_exports.literal(2),
15064
+ external_exports.literal(3),
15065
+ external_exports.literal(4)
15066
+ ]).optional(),
15067
+ tab: external_exports.string().optional(),
15068
+ location: external_exports.enum(["settings", "top-tab"]).optional(),
15069
+ order: external_exports.number().optional(),
15070
+ fields: external_exports.array(external_exports.any())
15071
+ });
15072
+ var ContributionTabSchema = external_exports.object({
15073
+ id: external_exports.string(),
15074
+ label: external_exports.string(),
15075
+ icon: external_exports.string(),
15076
+ order: external_exports.number().optional()
15077
+ });
15078
+ var ContributionOutputSchema = external_exports.object({
15079
+ tabs: external_exports.array(ContributionTabSchema).optional(),
15080
+ sections: external_exports.array(ContributionSectionSchema)
15081
+ }).nullable();
15082
+ var DEVICE_SETTINGS_CONTRIBUTION_METHODS = {
15083
+ getDeviceSettingsContribution: {
15084
+ input: external_exports.object({ deviceId: external_exports.number() }),
15085
+ output: ContributionOutputSchema,
15086
+ kind: "query",
15087
+ auth: "protected"
15088
+ },
15089
+ getDeviceLiveContribution: {
15090
+ input: external_exports.object({ deviceId: external_exports.number() }),
15091
+ output: ContributionOutputSchema,
15092
+ kind: "query",
15093
+ auth: "protected"
15094
+ },
15095
+ applyDeviceSettingsPatch: {
15096
+ input: external_exports.object({
15097
+ deviceId: external_exports.number(),
15098
+ patch: external_exports.record(external_exports.string(), external_exports.unknown())
15099
+ }),
15100
+ output: external_exports.object({ success: external_exports.literal(true) }),
15101
+ kind: "mutation",
15102
+ auth: "admin"
15103
+ }
15104
+ };
15105
+ var DEVICE_STATUS_METHOD = { getStatus: {
15106
+ input: external_exports.object({ deviceId: external_exports.number() }),
15107
+ output: external_exports.unknown().nullable(),
15108
+ kind: "query",
15109
+ auth: "protected"
15110
+ } };
15111
+ function method(input, output, options) {
15112
+ return {
15113
+ input,
15114
+ output,
15115
+ kind: options?.kind ?? "query",
15116
+ auth: options?.auth ?? "protected",
15117
+ ...options?.access !== void 0 ? { access: options.access } : {},
15118
+ timeoutMs: options?.timeoutMs
15119
+ };
15120
+ }
15121
+ function event(data) {
15122
+ return { data };
15123
+ }
15124
+ var StaticDirOutputSchema = external_exports.object({ staticDir: external_exports.string() });
15125
+ var VersionOutputSchema = external_exports.object({ version: external_exports.string() });
15126
+ var adminUiCapability = {
15127
+ name: "admin-ui",
15128
+ scope: "system",
15129
+ mode: "singleton",
15130
+ internal: true,
15131
+ methods: {
15132
+ getStaticDir: method(external_exports.void(), StaticDirOutputSchema),
15133
+ getVersion: method(external_exports.void(), VersionOutputSchema)
15134
+ }
15135
+ };
15136
+ var StreamSourceEntrySchema = external_exports.object({
15137
+ id: external_exports.string(),
15138
+ label: external_exports.string(),
15139
+ protocol: external_exports.enum([
15140
+ "rtsp",
15141
+ "rtmp",
15142
+ "annexb",
15143
+ "http-mjpeg",
15144
+ "webrtc",
15145
+ "custom"
15146
+ ]),
15147
+ url: external_exports.string().optional(),
15148
+ resolution: external_exports.object({
15149
+ width: external_exports.number(),
15150
+ height: external_exports.number()
15151
+ }).optional(),
15152
+ fps: external_exports.number().optional(),
15153
+ bitrate: external_exports.number().optional(),
15154
+ codec: external_exports.string().optional(),
15155
+ profileHint: CamProfileSchema.optional(),
15156
+ sdp: external_exports.string().optional()
15157
+ });
15158
+ var ConfigEntrySchema = external_exports.object({
15159
+ key: external_exports.string(),
15160
+ value: external_exports.unknown()
15161
+ });
15162
+ var RawStateResultSchema = external_exports.object({
15163
+ /** Originating provider id, e.g. 'homeassistant' | 'reolink' | 'hikvision'. */
15164
+ source: external_exports.string(),
15165
+ /** Opaque, DISPLAY-SAFE upstream blob (no secrets/PII). */
15166
+ data: external_exports.record(external_exports.string(), external_exports.unknown())
15167
+ });
15168
+ var deviceOpsCapability = {
15169
+ name: "device-ops",
15170
+ scope: "device",
15171
+ deviceNative: true,
15172
+ mode: "singleton",
15173
+ methods: {
15174
+ /**
15175
+ * Return stream sources for camera-like devices. Non-camera devices
15176
+ * return an empty array (the bridge did the same; preserved for compat).
15177
+ */
15178
+ getStreamSources: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.array(StreamSourceEntrySchema)),
15179
+ /**
15180
+ * Return the device's config entries (key + current value). Used by
15181
+ * the device-manager aggregator when reading the driver's schema+values.
15182
+ */
15183
+ getConfigEntries: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.array(ConfigEntrySchema)),
15184
+ /**
15185
+ * Bulk-apply a config patch via `IDevice.config.setAll`. Covers the
15186
+ * updateConfig / setStreamProfileMap / enable-as-config paths from
15187
+ * the old bridge.
15188
+ */
15189
+ setConfig: method(external_exports.object({
15190
+ deviceId: external_exports.number(),
15191
+ values: external_exports.record(external_exports.string(), external_exports.unknown())
15192
+ }), external_exports.void(), { kind: "mutation" }),
15193
+ /**
15194
+ * Invoke a device custom action on a forked/remote device (the
15195
+ * cross-process transport for `IDevice.runDeviceAction`). Mirrors
15196
+ * `setConfig` — the device-manager calls this when the device is not
15197
+ * hub-local.
15198
+ */
15199
+ runAction: method(external_exports.object({
15200
+ deviceId: external_exports.number(),
15201
+ action: external_exports.string().min(1),
15202
+ input: external_exports.unknown()
15203
+ }), external_exports.unknown(), { kind: "mutation" }),
15204
+ /**
15205
+ * Invoke `IDevice.removeDevice()` so the driver can release resources
15206
+ * (close sockets, stop background tasks, …). The device-manager still
15207
+ * performs its own persistence cleanup before/after this call.
15208
+ */
15209
+ removeDevice: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.void(), { kind: "mutation" }),
15210
+ /**
15211
+ * Build the ConfigUISchema (FormBuilder input shape) from the device's
15212
+ * Zod config schema. Runs on the worker that owns the IDevice so the
15213
+ * Zod types stay local (they're function references, not
15214
+ * serializable). Returns a fully JSON-serializable schema with
15215
+ * sections/fields the admin UI renders directly.
15216
+ *
15217
+ * Needed because the hub-side `device-manager.getSettingsSchema`
15218
+ * couldn't reach forked-worker devices — it had no registry entry
15219
+ * and no cross-process lookup, so the UI silently rendered an empty
15220
+ * settings panel for every worker-owned device.
15221
+ *
15222
+ * Returns `null` when the device isn't found on this worker.
15223
+ */
15224
+ getSettingsSchema: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.unknown().nullable()),
15225
+ /**
15226
+ * Opt-in: return the device's RAW upstream state (the provider's
15227
+ * cached values) as a display-safe `{ source, data }` blob. Returns
15228
+ * `null` when the device exposes no raw state — the State panel hides
15229
+ * its Raw toggle in that case. One-shot (read the provider's existing
15230
+ * cache; no upstream round-trip).
15231
+ */
15232
+ getRawState: method(external_exports.object({ deviceId: external_exports.number() }), RawStateResultSchema.nullable(), { auth: "protected" })
15233
+ }
15234
+ };
15235
+ function sleep(ms) {
15236
+ return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
15237
+ }
15238
+
15239
+ // ../types/dist/index.mjs
15240
+ var wiringProbeKindSchema = external_exports.enum([
15241
+ "singleton",
15242
+ "device",
15243
+ "widget"
15244
+ ]);
15245
+ var wiringProbeResultSchema = external_exports.object({
15246
+ capName: external_exports.string(),
15247
+ kind: wiringProbeKindSchema,
15248
+ deviceId: external_exports.number().optional(),
15249
+ reachable: external_exports.boolean(),
15250
+ latencyMs: external_exports.number(),
15251
+ error: external_exports.string().optional()
15252
+ });
15253
+ var wiringAddonHealthSchema = external_exports.object({
15254
+ addonId: external_exports.string(),
15255
+ caps: external_exports.array(wiringProbeResultSchema).readonly(),
15256
+ widgets: external_exports.array(wiringProbeResultSchema).readonly()
15257
+ });
15258
+ var wiringNodeHealthSchema = external_exports.object({
15259
+ nodeId: external_exports.string(),
15260
+ addons: external_exports.array(wiringAddonHealthSchema).readonly()
14961
15261
  });
14962
- var ProfileRtspEntrySchema = external_exports.object({
14963
- profile: CamProfileSchema,
14964
- /** Profile-keyed broker id, format `${deviceId}/${profile}` (e.g. `"15/high"`). */
14965
- brokerId: external_exports.string(),
14966
- url: external_exports.string(),
14967
- mutedUrl: external_exports.string(),
14968
- enabled: external_exports.boolean(),
14969
- codec: external_exports.string().optional(),
14970
- resolution: CamStreamResolutionSchema.optional()
15262
+ var wiringHealthSnapshotSchema = external_exports.object({
15263
+ /** True only when every probed target is reachable. */
15264
+ ok: external_exports.boolean(),
15265
+ /** True when at least one target is unreachable. */
15266
+ degraded: external_exports.boolean(),
15267
+ checkedAt: external_exports.string(),
15268
+ nodes: external_exports.array(wiringNodeHealthSchema).readonly(),
15269
+ summary: external_exports.object({
15270
+ total: external_exports.number(),
15271
+ reachable: external_exports.number(),
15272
+ unreachable: external_exports.number()
15273
+ })
14971
15274
  });
15275
+ var MODEL_FORMATS = [
15276
+ "onnx",
15277
+ "coreml",
15278
+ "openvino",
15279
+ "tflite",
15280
+ "pt"
15281
+ ];
14972
15282
  var RecordingWeekdaySchema = external_exports.number().int().min(0).max(6);
14973
15283
  var HHMM = /^([01]\d|2[0-3]):[0-5]\d$/;
14974
15284
  var RecordingScheduleSchema = external_exports.discriminatedUnion("kind", [external_exports.object({ kind: external_exports.literal("always") }), external_exports.object({
@@ -15425,183 +15735,58 @@ var APPLE_SA_TO_MACRO = {
15425
15735
  fire_alarm: "alarm",
15426
15736
  car_alarm: "alarm",
15427
15737
  siren: "siren",
15428
- police_siren: "siren",
15429
- ambulance_siren: "siren",
15430
- doorbell: "doorbell",
15431
- door_knock: "doorbell",
15432
- knocking: "doorbell",
15433
- glass_breaking: "glass_breaking",
15434
- glass_shatter: "glass_breaking",
15435
- gunshot: "gunshot",
15436
- explosion: "gunshot",
15437
- fireworks: "gunshot",
15438
- car: "vehicle",
15439
- truck: "vehicle",
15440
- motorcycle: "vehicle",
15441
- car_horn: "vehicle",
15442
- vehicle_horn: "vehicle",
15443
- traffic: "vehicle",
15444
- fire: "fire",
15445
- fire_crackle: "fire",
15446
- water: "water",
15447
- rain: "water",
15448
- ocean: "water",
15449
- splash: "water",
15450
- wind: "wind",
15451
- thunder: "wind",
15452
- thunderstorm: "wind",
15453
- door: "door",
15454
- door_slam: "door",
15455
- sliding_door: "door",
15456
- footsteps: "footsteps",
15457
- walking: "footsteps",
15458
- running: "footsteps",
15459
- crowd: "crowd",
15460
- chatter: "crowd",
15461
- cheering: "crowd",
15462
- applause: "crowd",
15463
- telephone_ring: "telephone",
15464
- ringtone: "telephone",
15465
- engine: "engine",
15466
- engine_starting: "engine",
15467
- lawn_mower: "engine",
15468
- chainsaw: "engine",
15469
- hammer: "tools",
15470
- jackhammer: "tools",
15471
- drill: "tools",
15472
- power_tool: "tools",
15473
- silence: "silence"
15474
- },
15475
- preserveOriginal: false
15476
- };
15477
- var _macroLookup = /* @__PURE__ */ new Map();
15478
- for (const [k, v] of Object.entries(YAMNET_TO_MACRO.mapping)) _macroLookup.set(k.toLowerCase(), v);
15479
- for (const [k, v] of Object.entries(APPLE_SA_TO_MACRO.mapping)) _macroLookup.set(k.toLowerCase(), v);
15480
- var DeviceType = /* @__PURE__ */ (function(DeviceType2) {
15481
- DeviceType2["Camera"] = "camera";
15482
- DeviceType2["Hub"] = "hub";
15483
- DeviceType2["Light"] = "light";
15484
- DeviceType2["Siren"] = "siren";
15485
- DeviceType2["Switch"] = "switch";
15486
- DeviceType2["Sensor"] = "sensor";
15487
- DeviceType2["Thermostat"] = "thermostat";
15488
- DeviceType2["Button"] = "button";
15489
- DeviceType2["EventEmitter"] = "event-emitter";
15490
- DeviceType2["Update"] = "update";
15491
- DeviceType2["Generic"] = "generic";
15492
- DeviceType2["Notifier"] = "notifier";
15493
- DeviceType2["Script"] = "script";
15494
- DeviceType2["Automation"] = "automation";
15495
- DeviceType2["Lock"] = "lock";
15496
- DeviceType2["Cover"] = "cover";
15497
- DeviceType2["Valve"] = "valve";
15498
- DeviceType2["Humidifier"] = "humidifier";
15499
- DeviceType2["WaterHeater"] = "water-heater";
15500
- DeviceType2["Fan"] = "fan";
15501
- DeviceType2["MediaPlayer"] = "media-player";
15502
- DeviceType2["AlarmPanel"] = "alarm-panel";
15503
- DeviceType2["Control"] = "control";
15504
- DeviceType2["Presence"] = "presence";
15505
- DeviceType2["Weather"] = "weather";
15506
- DeviceType2["Vacuum"] = "vacuum";
15507
- DeviceType2["LawnMower"] = "lawn-mower";
15508
- DeviceType2["Container"] = "container";
15509
- DeviceType2["Image"] = "image";
15510
- return DeviceType2;
15511
- })({});
15512
- var DeviceFeature = /* @__PURE__ */ (function(DeviceFeature2) {
15513
- DeviceFeature2["BatteryOperated"] = "battery-operated";
15514
- DeviceFeature2["Rebootable"] = "rebootable";
15515
- DeviceFeature2["Resyncable"] = "resyncable";
15516
- DeviceFeature2["NativeSnapshot"] = "native-snapshot";
15517
- DeviceFeature2["DoorbellButton"] = "doorbell-button";
15518
- DeviceFeature2["TwoWayAudio"] = "two-way-audio";
15519
- DeviceFeature2["PanTiltZoom"] = "pan-tilt-zoom";
15520
- DeviceFeature2["PtzAutotrack"] = "ptz-autotrack";
15521
- DeviceFeature2["MotionTrigger"] = "motion-trigger";
15522
- DeviceFeature2["LightColorRgb"] = "light-color-rgb";
15523
- DeviceFeature2["LightColorHsv"] = "light-color-hsv";
15524
- DeviceFeature2["LightColorMired"] = "light-color-mired";
15525
- DeviceFeature2["ClimateDualSetpoint"] = "climate-dual-setpoint";
15526
- DeviceFeature2["ClimateHumidity"] = "climate-humidity";
15527
- DeviceFeature2["ClimateFanMode"] = "climate-fan-mode";
15528
- DeviceFeature2["ClimatePreset"] = "climate-preset";
15529
- DeviceFeature2["CoverPositionable"] = "cover-positionable";
15530
- DeviceFeature2["CoverTilt"] = "cover-tilt";
15531
- DeviceFeature2["ValvePositionable"] = "valve-positionable";
15532
- DeviceFeature2["FanSpeed"] = "fan-speed";
15533
- DeviceFeature2["FanPreset"] = "fan-preset";
15534
- DeviceFeature2["FanDirection"] = "fan-direction";
15535
- DeviceFeature2["FanOscillating"] = "fan-oscillating";
15536
- DeviceFeature2["LockPinRequired"] = "lock-pin-required";
15537
- DeviceFeature2["LockOpen"] = "lock-open";
15538
- DeviceFeature2["MediaPlayerSeek"] = "media-player-seek";
15539
- DeviceFeature2["MediaPlayerVolume"] = "media-player-volume";
15540
- DeviceFeature2["MediaPlayerMute"] = "media-player-mute";
15541
- DeviceFeature2["MediaPlayerShuffle"] = "media-player-shuffle";
15542
- DeviceFeature2["MediaPlayerRepeat"] = "media-player-repeat";
15543
- DeviceFeature2["MediaPlayerSelectSource"] = "media-player-select-source";
15544
- DeviceFeature2["MediaPlayerPlayMedia"] = "media-player-play-media";
15545
- DeviceFeature2["MediaPlayerNext"] = "media-player-next";
15546
- DeviceFeature2["MediaPlayerPrevious"] = "media-player-previous";
15547
- DeviceFeature2["MediaPlayerStop"] = "media-player-stop";
15548
- DeviceFeature2["AlarmPinRequired"] = "alarm-pin-required";
15549
- DeviceFeature2["PresenceGps"] = "presence-gps";
15550
- DeviceFeature2["NotifierImage"] = "notifier-image";
15551
- DeviceFeature2["NotifierPriority"] = "notifier-priority";
15552
- DeviceFeature2["NotifierData"] = "notifier-data";
15553
- DeviceFeature2["NotifierActions"] = "notifier-actions";
15554
- DeviceFeature2["NotifierRecipients"] = "notifier-recipients";
15555
- DeviceFeature2["ScriptVariables"] = "script-variables";
15556
- DeviceFeature2["AutomationSkipCondition"] = "automation-skip-condition";
15557
- return DeviceFeature2;
15558
- })({});
15559
- var DeviceRole = /* @__PURE__ */ (function(DeviceRole2) {
15560
- DeviceRole2["Siren"] = "siren";
15561
- DeviceRole2["Floodlight"] = "floodlight";
15562
- DeviceRole2["Spotlight"] = "spotlight";
15563
- DeviceRole2["PirSensor"] = "pir-sensor";
15564
- DeviceRole2["Chime"] = "chime";
15565
- DeviceRole2["Autotrack"] = "autotrack";
15566
- DeviceRole2["Nightvision"] = "nightvision";
15567
- DeviceRole2["PrivacyMask"] = "privacy-mask";
15568
- DeviceRole2["Doorbell"] = "doorbell";
15569
- DeviceRole2["BinaryHelper"] = "binary-helper";
15570
- DeviceRole2["MotionSensor"] = "motion-sensor";
15571
- DeviceRole2["ContactSensor"] = "contact-sensor";
15572
- DeviceRole2["LeakSensor"] = "leak-sensor";
15573
- DeviceRole2["SmokeSensor"] = "smoke-sensor";
15574
- DeviceRole2["COSensor"] = "co-sensor";
15575
- DeviceRole2["GasSensor"] = "gas-sensor";
15576
- DeviceRole2["TamperSensor"] = "tamper-sensor";
15577
- DeviceRole2["VibrationSensor"] = "vibration-sensor";
15578
- DeviceRole2["ConnectivitySensor"] = "connectivity-sensor";
15579
- DeviceRole2["SoundSensor"] = "sound-sensor";
15580
- DeviceRole2["BinarySensor"] = "binary-sensor";
15581
- DeviceRole2["TemperatureSensor"] = "temperature-sensor";
15582
- DeviceRole2["HumiditySensor"] = "humidity-sensor";
15583
- DeviceRole2["AmbientLightSensor"] = "ambient-light-sensor";
15584
- DeviceRole2["PressureSensor"] = "pressure-sensor";
15585
- DeviceRole2["PowerSensor"] = "power-sensor";
15586
- DeviceRole2["EnergySensor"] = "energy-sensor";
15587
- DeviceRole2["VoltageSensor"] = "voltage-sensor";
15588
- DeviceRole2["CurrentSensor"] = "current-sensor";
15589
- DeviceRole2["AirQualitySensor"] = "air-quality-sensor";
15590
- DeviceRole2["BatterySensor"] = "battery-sensor";
15591
- DeviceRole2["NumericSensor"] = "numeric-sensor";
15592
- DeviceRole2["EnumSensor"] = "enum-sensor";
15593
- DeviceRole2["DateTimeSensor"] = "datetime-sensor";
15594
- DeviceRole2["GenericSensor"] = "generic-sensor";
15595
- DeviceRole2["NumericControl"] = "numeric-control";
15596
- DeviceRole2["SelectControl"] = "select-control";
15597
- DeviceRole2["TextControl"] = "text-control";
15598
- DeviceRole2["DateTimeControl"] = "datetime-control";
15599
- DeviceRole2["MobilePushNotifier"] = "mobile-push-notifier";
15600
- DeviceRole2["MessagingNotifier"] = "messaging-notifier";
15601
- DeviceRole2["EmailNotifier"] = "email-notifier";
15602
- DeviceRole2["GenericNotifier"] = "generic-notifier";
15603
- return DeviceRole2;
15604
- })({});
15738
+ police_siren: "siren",
15739
+ ambulance_siren: "siren",
15740
+ doorbell: "doorbell",
15741
+ door_knock: "doorbell",
15742
+ knocking: "doorbell",
15743
+ glass_breaking: "glass_breaking",
15744
+ glass_shatter: "glass_breaking",
15745
+ gunshot: "gunshot",
15746
+ explosion: "gunshot",
15747
+ fireworks: "gunshot",
15748
+ car: "vehicle",
15749
+ truck: "vehicle",
15750
+ motorcycle: "vehicle",
15751
+ car_horn: "vehicle",
15752
+ vehicle_horn: "vehicle",
15753
+ traffic: "vehicle",
15754
+ fire: "fire",
15755
+ fire_crackle: "fire",
15756
+ water: "water",
15757
+ rain: "water",
15758
+ ocean: "water",
15759
+ splash: "water",
15760
+ wind: "wind",
15761
+ thunder: "wind",
15762
+ thunderstorm: "wind",
15763
+ door: "door",
15764
+ door_slam: "door",
15765
+ sliding_door: "door",
15766
+ footsteps: "footsteps",
15767
+ walking: "footsteps",
15768
+ running: "footsteps",
15769
+ crowd: "crowd",
15770
+ chatter: "crowd",
15771
+ cheering: "crowd",
15772
+ applause: "crowd",
15773
+ telephone_ring: "telephone",
15774
+ ringtone: "telephone",
15775
+ engine: "engine",
15776
+ engine_starting: "engine",
15777
+ lawn_mower: "engine",
15778
+ chainsaw: "engine",
15779
+ hammer: "tools",
15780
+ jackhammer: "tools",
15781
+ drill: "tools",
15782
+ power_tool: "tools",
15783
+ silence: "silence"
15784
+ },
15785
+ preserveOriginal: false
15786
+ };
15787
+ var _macroLookup = /* @__PURE__ */ new Map();
15788
+ for (const [k, v] of Object.entries(YAMNET_TO_MACRO.mapping)) _macroLookup.set(k.toLowerCase(), v);
15789
+ for (const [k, v] of Object.entries(APPLE_SA_TO_MACRO.mapping)) _macroLookup.set(k.toLowerCase(), v);
15605
15790
  var AccessoryKind = {
15606
15791
  Siren: DeviceRole.Siren,
15607
15792
  Floodlight: DeviceRole.Floodlight,
@@ -15758,75 +15943,6 @@ var airQualitySensorCapability = {
15758
15943
  },
15759
15944
  runtimeState: AirQualitySensorStatusSchema
15760
15945
  };
15761
- var ContributionSectionSchema = external_exports.object({
15762
- id: external_exports.string(),
15763
- title: external_exports.string(),
15764
- description: external_exports.string().optional(),
15765
- style: external_exports.enum(["card", "accordion"]).optional(),
15766
- defaultCollapsed: external_exports.boolean().optional(),
15767
- columns: external_exports.union([
15768
- external_exports.literal(1),
15769
- external_exports.literal(2),
15770
- external_exports.literal(3),
15771
- external_exports.literal(4)
15772
- ]).optional(),
15773
- tab: external_exports.string().optional(),
15774
- location: external_exports.enum(["settings", "top-tab"]).optional(),
15775
- order: external_exports.number().optional(),
15776
- fields: external_exports.array(external_exports.any())
15777
- });
15778
- var ContributionTabSchema = external_exports.object({
15779
- id: external_exports.string(),
15780
- label: external_exports.string(),
15781
- icon: external_exports.string(),
15782
- order: external_exports.number().optional()
15783
- });
15784
- var ContributionOutputSchema = external_exports.object({
15785
- tabs: external_exports.array(ContributionTabSchema).optional(),
15786
- sections: external_exports.array(ContributionSectionSchema)
15787
- }).nullable();
15788
- var DEVICE_SETTINGS_CONTRIBUTION_METHODS = {
15789
- getDeviceSettingsContribution: {
15790
- input: external_exports.object({ deviceId: external_exports.number() }),
15791
- output: ContributionOutputSchema,
15792
- kind: "query",
15793
- auth: "protected"
15794
- },
15795
- getDeviceLiveContribution: {
15796
- input: external_exports.object({ deviceId: external_exports.number() }),
15797
- output: ContributionOutputSchema,
15798
- kind: "query",
15799
- auth: "protected"
15800
- },
15801
- applyDeviceSettingsPatch: {
15802
- input: external_exports.object({
15803
- deviceId: external_exports.number(),
15804
- patch: external_exports.record(external_exports.string(), external_exports.unknown())
15805
- }),
15806
- output: external_exports.object({ success: external_exports.literal(true) }),
15807
- kind: "mutation",
15808
- auth: "admin"
15809
- }
15810
- };
15811
- var DEVICE_STATUS_METHOD = { getStatus: {
15812
- input: external_exports.object({ deviceId: external_exports.number() }),
15813
- output: external_exports.unknown().nullable(),
15814
- kind: "query",
15815
- auth: "protected"
15816
- } };
15817
- function method(input, output, options) {
15818
- return {
15819
- input,
15820
- output,
15821
- kind: options?.kind ?? "query",
15822
- auth: options?.auth ?? "protected",
15823
- ...options?.access !== void 0 ? { access: options.access } : {},
15824
- timeoutMs: options?.timeoutMs
15825
- };
15826
- }
15827
- function event(data) {
15828
- return { data };
15829
- }
15830
15946
  var AlarmStateSchema = external_exports.enum([
15831
15947
  "disarmed",
15832
15948
  "armed_home",
@@ -21097,18 +21213,6 @@ var logDestinationCapability = {
21097
21213
  }), external_exports.array(LogEntrySchema).readonly())
21098
21214
  }
21099
21215
  };
21100
- var StaticDirOutputSchema = external_exports.object({ staticDir: external_exports.string() });
21101
- var VersionOutputSchema = external_exports.object({ version: external_exports.string() });
21102
- var adminUiCapability = {
21103
- name: "admin-ui",
21104
- scope: "system",
21105
- mode: "singleton",
21106
- internal: true,
21107
- methods: {
21108
- getStaticDir: method(external_exports.void(), StaticDirOutputSchema),
21109
- getVersion: method(external_exports.void(), VersionOutputSchema)
21110
- }
21111
- };
21112
21216
  var MethodAccessSchema = external_exports.enum([
21113
21217
  "view",
21114
21218
  "create",
@@ -23257,7 +23361,7 @@ var DeviceInfoSchema = external_exports.object({
23257
23361
  /** Operator-authored cross-device field wirings. See `DeviceMeta.deviceLinks`. */
23258
23362
  deviceLinks: external_exports.array(DeviceLinkSchema).readonly().optional()
23259
23363
  });
23260
- var ConfigEntrySchema = external_exports.object({
23364
+ var ConfigEntrySchema2 = external_exports.object({
23261
23365
  key: external_exports.string(),
23262
23366
  value: external_exports.unknown(),
23263
23367
  description: external_exports.string().optional()
@@ -23570,9 +23674,9 @@ var deviceManagerCapability = {
23570
23674
  /** List children of a parent device (by parent numeric id). */
23571
23675
  getChildren: method(external_exports.object({ parentDeviceId: external_exports.number() }), external_exports.array(DeviceInfoSchema)),
23572
23676
  /** Get stream sources for a camera device. */
23573
- getStreamSources: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.array(StreamSourceEntrySchema)),
23677
+ getStreamSources: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.array(StreamSourceEntrySchema$1)),
23574
23678
  /** Get config entries (key + value + description) for a device. */
23575
- getConfigSchema: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.array(ConfigEntrySchema)),
23679
+ getConfigSchema: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.array(ConfigEntrySchema2)),
23576
23680
  /** Get the ConfigUISchema for a device's settings (for admin UI rendering). */
23577
23681
  getSettingsSchema: method(external_exports.object({ deviceId: external_exports.number() }), ConfigUISchemaOutput),
23578
23682
  /** Update device config values (partial merge). */
@@ -24549,7 +24653,20 @@ var DiskSpaceInfoSchema = external_exports.object({
24549
24653
  var PidResourceStatsSchema = external_exports.object({
24550
24654
  pid: external_exports.number(),
24551
24655
  cpu: external_exports.number(),
24552
- memory: external_exports.number()
24656
+ memory: external_exports.number(),
24657
+ /**
24658
+ * Private (anonymous) resident bytes — the per-process V8 heap + native
24659
+ * allocations NOT shared with other processes (Linux RssAnon). This is the
24660
+ * "real" per-runner cost; summing it across runners is meaningful, unlike
24661
+ * `memory` (RSS), which double-counts the shared mmap'd framework code.
24662
+ * Undefined where /proc is unavailable (e.g. macOS).
24663
+ */
24664
+ privateBytes: external_exports.number().optional(),
24665
+ /**
24666
+ * Shared file-backed resident bytes (Linux RssFile) — mmap'd framework/lib
24667
+ * code shared copy-on-write across runners. Undefined on macOS.
24668
+ */
24669
+ sharedBytes: external_exports.number().optional()
24553
24670
  });
24554
24671
  var AddonInstanceSchema = external_exports.object({
24555
24672
  addonId: external_exports.string(),
@@ -24598,6 +24715,18 @@ var KillProcessResultSchema = external_exports.object({
24598
24715
  reason: external_exports.string().optional(),
24599
24716
  signal: external_exports.enum(["SIGTERM", "SIGKILL"]).optional()
24600
24717
  });
24718
+ var DumpHeapSnapshotInputSchema = external_exports.object({
24719
+ /** The addon whose runner should dump a heap snapshot. */
24720
+ addonId: external_exports.string()
24721
+ });
24722
+ var DumpHeapSnapshotResultSchema = external_exports.object({
24723
+ success: external_exports.boolean(),
24724
+ /** Path of the written .heapsnapshot inside the runner's container/host. */
24725
+ path: external_exports.string().optional(),
24726
+ /** Process pid that was signalled. */
24727
+ pid: external_exports.number().optional(),
24728
+ reason: external_exports.string().optional()
24729
+ });
24601
24730
  var SystemMetricsSchema = external_exports.object({
24602
24731
  cpuPercent: external_exports.number(),
24603
24732
  memoryPercent: external_exports.number(),
@@ -24658,6 +24787,17 @@ var metricsProviderCapability = {
24658
24787
  killProcess: method(KillProcessInputSchema, KillProcessResultSchema, {
24659
24788
  kind: "mutation",
24660
24789
  auth: "admin"
24790
+ }),
24791
+ /**
24792
+ * Tell the addon's forked runner to write a V8 heap snapshot to disk (via
24793
+ * SIGUSR2 — the runner's diagnostic handler). Also logs its
24794
+ * `process.memoryUsage()` + heap-space breakdown. Refuses pids not in the
24795
+ * live `listNodeProcesses()` snapshot. Use for deep per-addon memory
24796
+ * attribution; copy the returned path off the node to analyze.
24797
+ */
24798
+ dumpHeapSnapshot: method(DumpHeapSnapshotInputSchema, DumpHeapSnapshotResultSchema, {
24799
+ kind: "mutation",
24800
+ auth: "admin"
24661
24801
  })
24662
24802
  }
24663
24803
  };
@@ -25136,105 +25276,6 @@ var recordingCapability = {
25136
25276
  })
25137
25277
  }
25138
25278
  };
25139
- var StreamSourceEntrySchema$1 = external_exports.object({
25140
- id: external_exports.string(),
25141
- label: external_exports.string(),
25142
- protocol: external_exports.enum([
25143
- "rtsp",
25144
- "rtmp",
25145
- "annexb",
25146
- "http-mjpeg",
25147
- "webrtc",
25148
- "custom"
25149
- ]),
25150
- url: external_exports.string().optional(),
25151
- resolution: external_exports.object({
25152
- width: external_exports.number(),
25153
- height: external_exports.number()
25154
- }).optional(),
25155
- fps: external_exports.number().optional(),
25156
- bitrate: external_exports.number().optional(),
25157
- codec: external_exports.string().optional(),
25158
- profileHint: CamProfileSchema.optional(),
25159
- sdp: external_exports.string().optional()
25160
- });
25161
- var ConfigEntrySchema$1 = external_exports.object({
25162
- key: external_exports.string(),
25163
- value: external_exports.unknown()
25164
- });
25165
- var RawStateResultSchema = external_exports.object({
25166
- /** Originating provider id, e.g. 'homeassistant' | 'reolink' | 'hikvision'. */
25167
- source: external_exports.string(),
25168
- /** Opaque, DISPLAY-SAFE upstream blob (no secrets/PII). */
25169
- data: external_exports.record(external_exports.string(), external_exports.unknown())
25170
- });
25171
- var deviceOpsCapability = {
25172
- name: "device-ops",
25173
- scope: "device",
25174
- deviceNative: true,
25175
- mode: "singleton",
25176
- methods: {
25177
- /**
25178
- * Return stream sources for camera-like devices. Non-camera devices
25179
- * return an empty array (the bridge did the same; preserved for compat).
25180
- */
25181
- getStreamSources: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.array(StreamSourceEntrySchema$1)),
25182
- /**
25183
- * Return the device's config entries (key + current value). Used by
25184
- * the device-manager aggregator when reading the driver's schema+values.
25185
- */
25186
- getConfigEntries: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.array(ConfigEntrySchema$1)),
25187
- /**
25188
- * Bulk-apply a config patch via `IDevice.config.setAll`. Covers the
25189
- * updateConfig / setStreamProfileMap / enable-as-config paths from
25190
- * the old bridge.
25191
- */
25192
- setConfig: method(external_exports.object({
25193
- deviceId: external_exports.number(),
25194
- values: external_exports.record(external_exports.string(), external_exports.unknown())
25195
- }), external_exports.void(), { kind: "mutation" }),
25196
- /**
25197
- * Invoke a device custom action on a forked/remote device (the
25198
- * cross-process transport for `IDevice.runDeviceAction`). Mirrors
25199
- * `setConfig` — the device-manager calls this when the device is not
25200
- * hub-local.
25201
- */
25202
- runAction: method(external_exports.object({
25203
- deviceId: external_exports.number(),
25204
- action: external_exports.string().min(1),
25205
- input: external_exports.unknown()
25206
- }), external_exports.unknown(), { kind: "mutation" }),
25207
- /**
25208
- * Invoke `IDevice.removeDevice()` so the driver can release resources
25209
- * (close sockets, stop background tasks, …). The device-manager still
25210
- * performs its own persistence cleanup before/after this call.
25211
- */
25212
- removeDevice: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.void(), { kind: "mutation" }),
25213
- /**
25214
- * Build the ConfigUISchema (FormBuilder input shape) from the device's
25215
- * Zod config schema. Runs on the worker that owns the IDevice so the
25216
- * Zod types stay local (they're function references, not
25217
- * serializable). Returns a fully JSON-serializable schema with
25218
- * sections/fields the admin UI renders directly.
25219
- *
25220
- * Needed because the hub-side `device-manager.getSettingsSchema`
25221
- * couldn't reach forked-worker devices — it had no registry entry
25222
- * and no cross-process lookup, so the UI silently rendered an empty
25223
- * settings panel for every worker-owned device.
25224
- *
25225
- * Returns `null` when the device isn't found on this worker.
25226
- */
25227
- getSettingsSchema: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.unknown().nullable()),
25228
- /**
25229
- * Opt-in: return the device's RAW upstream state (the provider's
25230
- * cached values) as a display-safe `{ source, data }` blob. Returns
25231
- * `null` when the device exposes no raw state — the State panel hides
25232
- * its Raw toggle in that case. One-shot (read the provider's existing
25233
- * cache; no upstream round-trip).
25234
- */
25235
- getRawState: method(external_exports.object({ deviceId: external_exports.number() }), RawStateResultSchema.nullable(), { auth: "protected" })
25236
- }
25237
- };
25238
25279
  var CameraCredentialsSchema = external_exports.object({
25239
25280
  /** Camera IP or hostname (no scheme). */
25240
25281
  host: external_exports.string(),
@@ -29265,6 +29306,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
29265
29306
  addonId: null,
29266
29307
  access: "view"
29267
29308
  },
29309
+ "metricsProvider.dumpHeapSnapshot": {
29310
+ capName: "metrics-provider",
29311
+ capScope: "system",
29312
+ addonId: null,
29313
+ access: "create"
29314
+ },
29268
29315
  "metricsProvider.getAddonStats": {
29269
29316
  capName: "metrics-provider",
29270
29317
  capScope: "system",
@@ -31532,9 +31579,6 @@ var frameworkSwapConfirmSchema = external_exports.object({
31532
31579
  bootAttempts: external_exports.number(),
31533
31580
  schemaVersion: external_exports.literal(1)
31534
31581
  });
31535
- function sleep(ms) {
31536
- return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
31537
- }
31538
31582
 
31539
31583
  // src/commands/discover.ts
31540
31584
  var DEFAULT_MULTICAST_GROUP = "239.0.0.0";
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-YPXFYDJW.js";
4
+ } from "./chunk-DIOLB5F6.js";
5
5
  import "./chunk-K3NQKI34.js";
6
6
 
7
7
  // src/cli.ts
@@ -608,7 +608,7 @@ function isUnknown(_value) {
608
608
  return true;
609
609
  }
610
610
  async function resolveServerInteractive(presetNamespace) {
611
- const { discoverNodes, resolveHubFromDiscovered } = await import("./discover-ETACVQW3.js");
611
+ const { discoverNodes, resolveHubFromDiscovered } = await import("./discover-LO4NFCP6.js");
612
612
  if (presetNamespace) {
613
613
  const spinner4 = clack.spinner();
614
614
  spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
@@ -3,7 +3,7 @@ import {
3
3
  discoverNodes,
4
4
  resolveHubFromDiscovered,
5
5
  runDiscover
6
- } from "./chunk-YPXFYDJW.js";
6
+ } from "./chunk-DIOLB5F6.js";
7
7
  import "./chunk-K3NQKI34.js";
8
8
  export {
9
9
  discoverNodes,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",