@camstack/addon-post-analysis 1.2.649 → 1.2.650

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 (15) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{clip-model-registry-DLCu17dL.mjs → clip-model-registry-B_mY0hd7.mjs} +128 -6
  3. package/dist/{clip-model-registry-BweA9zEK.js → clip-model-registry-CC7pvitG.js} +128 -6
  4. package/dist/embedding-encoder/index.js +1 -1
  5. package/dist/embedding-encoder/index.mjs +1 -1
  6. package/dist/pipeline-analytics/_stub.js +2 -2
  7. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DFq-lnbD.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-HjnmptAc.mjs} +2 -2
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-YNYqWfWY.mjs +26 -0
  9. package/dist/pipeline-analytics/{_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DQTr4r2P.mjs → _virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-OPayQG8i.mjs} +1 -1
  10. package/dist/pipeline-analytics/{hostInit-Dog0wpFI.mjs → hostInit-BjUFFpLS.mjs} +2 -2
  11. package/dist/pipeline-analytics/index.js +109 -2
  12. package/dist/pipeline-analytics/index.mjs +109 -2
  13. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  14. package/package.json +1 -1
  15. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-YDf26qsN.mjs +0 -26
package/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.2.650] - 2026-10-28
11
+
12
+ ### Changed
13
+
14
+ - A Correct/Wrong tap on a notification whose track has already been discarded now still saves a training frame from the recording, into the Notification verdicts collection.
15
+
10
16
  ## [1.2.649] - 2026-10-28
11
17
 
12
18
  ### Changed
@@ -5645,7 +5645,7 @@ var ZodIssueCode = {
5645
5645
  var ZodFirstPartyTypeKind;
5646
5646
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5647
5647
  //#endregion
5648
- //#region ../types/dist/sleep-Crlmu_tO.mjs
5648
+ //#region ../types/dist/sleep-BAvUCi_2.mjs
5649
5649
  /**
5650
5650
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5651
5651
  * window to float samples (D455).
@@ -9078,6 +9078,7 @@ var CAP_NAMES = Object.freeze([
9078
9078
  "image-settings",
9079
9079
  "integrations",
9080
9080
  "intercom",
9081
+ "ir-transmitter",
9081
9082
  "keychain",
9082
9083
  "keychain-admin",
9083
9084
  "lawn-mower-control",
@@ -10325,6 +10326,11 @@ Object.freeze({
10325
10326
  "path": "batteryPower",
10326
10327
  "valueType": "number"
10327
10328
  },
10329
+ {
10330
+ "path": "powerSource",
10331
+ "valueType": "enum",
10332
+ "enumValues": ["mains", "battery"]
10333
+ },
10328
10334
  {
10329
10335
  "path": "desiccantLeftDays",
10330
10336
  "valueType": "number"
@@ -10910,7 +10916,7 @@ Object.freeze({
10910
10916
  * can answer "may a rule actuate this?" without importing the schema barrel
10911
10917
  * (~144MB RSS per runner, D28).
10912
10918
  *
10913
- * Coverage: 95 device-scoped capabilities.
10919
+ * Coverage: 96 device-scoped capabilities.
10914
10920
  */
10915
10921
  var DEVICE_SCOPED_CAPS = new Set([
10916
10922
  "accessories",
@@ -10960,6 +10966,7 @@ var DEVICE_SCOPED_CAPS = new Set([
10960
10966
  "image",
10961
10967
  "image-settings",
10962
10968
  "intercom",
10969
+ "ir-transmitter",
10963
10970
  "lawn-mower-control",
10964
10971
  "lock-control",
10965
10972
  "media-player",
@@ -11053,7 +11060,7 @@ function sleep(ms) {
11053
11060
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
11054
11061
  }
11055
11062
  //#endregion
11056
- //#region ../types/dist/err-msg-DIorGYeC.mjs
11063
+ //#region ../types/dist/err-msg-BCdlR2Li.mjs
11057
11064
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
11058
11065
  DeviceType["Camera"] = "camera";
11059
11066
  DeviceType["Hub"] = "hub";
@@ -11399,6 +11406,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
11399
11406
  /** Fallback when the notifier service name doesn't match a known
11400
11407
  * pattern. */
11401
11408
  DeviceRole["GenericNotifier"] = "generic-notifier";
11409
+ /** Emits a pulse train (infrared or RF) on request — the `ir-transmitter`
11410
+ * cap. A `DeviceType.Generic` device. */
11411
+ DeviceRole["IrTransmitter"] = "ir-transmitter";
11402
11412
  return DeviceRole;
11403
11413
  }({});
11404
11414
  /**
@@ -11412,7 +11422,7 @@ function errMsg(err) {
11412
11422
  return String(err);
11413
11423
  }
11414
11424
  //#endregion
11415
- //#region ../types/dist/composition-DwA0uVW5.mjs
11425
+ //#region ../types/dist/composition-DpFv_J6D.mjs
11416
11426
  /**
11417
11427
  * Deterministic SHA-256 hash of an arbitrary serialisable value. The
11418
11428
  * canonical form sorts object keys alphabetically at every depth so two
@@ -44996,6 +45006,17 @@ var LlmProfileSchema = object({
44996
45006
  * field in its editor only when its descriptor lists it in `profileFields`. */
44997
45007
  topK: number().int().positive().optional(),
44998
45008
  maxTokens: number().int().positive().optional(),
45009
+ /** How hard the model "thinks" before it answers. Omitted = the model's own
45010
+ * default. `off` matters for structured output: a thinking model can spend
45011
+ * the whole completion on reasoning and return an empty `content`. Carried
45012
+ * only by the wires that have it — a kind offers the field in its editor
45013
+ * only when its descriptor lists it in `profileFields`. */
45014
+ reasoningEffort: _enum([
45015
+ "off",
45016
+ "low",
45017
+ "medium",
45018
+ "high"
45019
+ ]).optional(),
44999
45020
  /** Prompt context window. Advisory for cloud kinds (they enforce their own). */
45000
45021
  contextLength: number().int().positive().optional(),
45001
45022
  /** Default system prompt. A caller's `system` REPLACES it (never appends —
@@ -45034,6 +45055,7 @@ var LlmProfileFieldSchema = _enum([
45034
45055
  "topP",
45035
45056
  "topK",
45036
45057
  "maxTokens",
45058
+ "reasoningEffort",
45037
45059
  "contextLength",
45038
45060
  "systemPrompt",
45039
45061
  "timeoutMs",
@@ -61749,6 +61771,56 @@ DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _v
61749
61771
  auth: "protected"
61750
61772
  });
61751
61773
  /**
61774
+ * A pulse train in signed microseconds: mark (+) first, then space (-), strictly
61775
+ * alternating, no zeros, 2..1024 entries.
61776
+ */
61777
+ var IrTimingsSchema = array(number().int()).min(2).max(1024).superRefine((timings, ctx) => {
61778
+ timings.forEach((value, index) => {
61779
+ const expectMark = index % 2 === 0;
61780
+ if (value === 0 || value > 0 !== expectMark) ctx.addIssue({
61781
+ code: "custom",
61782
+ message: `timing ${index} must be a non-zero ${expectMark ? "mark (positive)" : "space (negative)"}`,
61783
+ path: [index]
61784
+ });
61785
+ });
61786
+ });
61787
+ /** Per-command transmit options. Every key is optional; a transmitter applies what it can. */
61788
+ var TransmitSettingsSchema = object({
61789
+ carrierHz: number().int().positive().optional(),
61790
+ dutyCyclePercent: number().int().min(1).max(100).optional(),
61791
+ repeat: number().int().min(0).max(20).optional(),
61792
+ repeatDelayMs: number().int().min(0).optional()
61793
+ });
61794
+ /** The setting keys a transmitter may declare as settable (`getInfo.settable`). */
61795
+ var TransmitSettingKeySchema = _enum([
61796
+ "carrierHz",
61797
+ "dutyCyclePercent",
61798
+ "repeat",
61799
+ "repeatDelayMs"
61800
+ ]);
61801
+ var IrMediumSchema = _enum(["ir", "rf"]);
61802
+ var IrSendResultSchema = object({
61803
+ ok: literal(true),
61804
+ /** Settings the transmitter could not apply; the train was still sent. */
61805
+ ignoredSettings: array(string())
61806
+ });
61807
+ var IrTransmitterInfoSchema = object({
61808
+ media: array(IrMediumSchema),
61809
+ settable: array(TransmitSettingKeySchema),
61810
+ maxTimings: number().int().positive()
61811
+ });
61812
+ DeviceType.Generic, method(object({
61813
+ deviceId: number().int().nonnegative(),
61814
+ timings: IrTimingsSchema,
61815
+ settings: TransmitSettingsSchema.optional()
61816
+ }), IrSendResultSchema, {
61817
+ kind: "mutation",
61818
+ auth: "protected"
61819
+ }), method(object({ deviceId: number().int().nonnegative() }), IrTransmitterInfoSchema, {
61820
+ kind: "query",
61821
+ auth: "protected"
61822
+ });
61823
+ /**
61752
61824
  * `calendar-source` — collection cap exposing per-provider calendars and
61753
61825
  * their events. Every addon that contributes calendars (Home Assistant,
61754
61826
  * a future Google Calendar addon, …) registers a provider here. The hub
@@ -67924,9 +67996,14 @@ var PetFeederStatusSchema = object({
67924
67996
  * (`device_class: problem`, on = low). True when the tank reports empty,
67925
67997
  * or, on a dual-hopper model, when EITHER hopper is empty. */
67926
67998
  lowFood: boolean(),
67927
- /** Battery charge 0..100 (%). Null on mains-powered models or when the
67928
- * device has no battery reading. */
67999
+ /** Battery charge 0..100 (%). On a feeder running on `mains` this is the
68000
+ * BACKUP battery's charge, not the power source. Null when the device has
68001
+ * no battery reading. */
67929
68002
  batteryPower: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
68003
+ /** What the feeder is powered from right now: `mains` (plugged in, the
68004
+ * battery is only a backup) or `battery`. Null when the device does not
68005
+ * report it. */
68006
+ powerSource: _enum(["mains", "battery"]).nullable(),
67930
68007
  /**
67931
68008
  * Desiccant life remaining, stored in seconds (duration base, D944).
67932
68009
  * Providers convert from the days the feeder reports. Null when the
@@ -78801,6 +78878,20 @@ Object.freeze({
78801
78878
  access: "create",
78802
78879
  role: "viewer"
78803
78880
  },
78881
+ "irTransmitter.getInfo": {
78882
+ capName: "ir-transmitter",
78883
+ capScope: "device",
78884
+ addonId: null,
78885
+ access: "view",
78886
+ role: "viewer"
78887
+ },
78888
+ "irTransmitter.send": {
78889
+ capName: "ir-transmitter",
78890
+ capScope: "device",
78891
+ addonId: null,
78892
+ access: "create",
78893
+ role: "viewer"
78894
+ },
78804
78895
  "keychain.delete": {
78805
78896
  capName: "keychain",
78806
78897
  capScope: "system",
@@ -86424,6 +86515,11 @@ var ACTUATOR_CAP_VOCABULARY = {
86424
86515
  icon: "circle-dot"
86425
86516
  }]
86426
86517
  },
86518
+ "ir-transmitter": {
86519
+ scope: "device",
86520
+ noun: t("IR / RF transmitter", "Trasmettitore IR / RF"),
86521
+ notOperatorFacing: { send: "a raw pulse train is not something an operator composes in an automation; the remote that owns the command table sends it" }
86522
+ },
86427
86523
  control: {
86428
86524
  scope: "device",
86429
86525
  noun: t("Control", "Controllo"),
@@ -90143,6 +90239,16 @@ Object.freeze({
90143
90239
  form: "single",
90144
90240
  optional: false
90145
90241
  }],
90242
+ "irTransmitter.getInfo": [{
90243
+ name: "deviceId",
90244
+ form: "single",
90245
+ optional: false
90246
+ }],
90247
+ "irTransmitter.send": [{
90248
+ name: "deviceId",
90249
+ form: "single",
90250
+ optional: false
90251
+ }],
90146
90252
  "keychain.deleteDeviceScope": [{
90147
90253
  name: "deviceId",
90148
90254
  form: "single",
@@ -96737,6 +96843,22 @@ function armRemovalReconcile(opts) {
96737
96843
  timer.unref?.();
96738
96844
  return () => clearInterval(timer);
96739
96845
  }
96846
+ discriminatedUnion("kind", [object({
96847
+ kind: literal("raw"),
96848
+ timings: array(number().int()),
96849
+ settings: TransmitSettingsSchema.optional()
96850
+ }), object({
96851
+ kind: literal("pronto"),
96852
+ code: string()
96853
+ })]);
96854
+ object({
96855
+ manufacturer: string().optional(),
96856
+ supportedModels: array(string()).optional(),
96857
+ supportedController: string().optional(),
96858
+ commandsEncoding: string(),
96859
+ delay: number().nonnegative().optional(),
96860
+ commands: record(string(), unknown())
96861
+ });
96740
96862
  //#endregion
96741
96863
  //#region src/pipeline-analytics/cluster-model-pin.ts
96742
96864
  /**
@@ -5676,7 +5676,7 @@ var ZodIssueCode = {
5676
5676
  var ZodFirstPartyTypeKind;
5677
5677
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5678
5678
  //#endregion
5679
- //#region ../types/dist/sleep-Crlmu_tO.mjs
5679
+ //#region ../types/dist/sleep-BAvUCi_2.mjs
5680
5680
  /**
5681
5681
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5682
5682
  * window to float samples (D455).
@@ -9109,6 +9109,7 @@ var CAP_NAMES = Object.freeze([
9109
9109
  "image-settings",
9110
9110
  "integrations",
9111
9111
  "intercom",
9112
+ "ir-transmitter",
9112
9113
  "keychain",
9113
9114
  "keychain-admin",
9114
9115
  "lawn-mower-control",
@@ -10356,6 +10357,11 @@ Object.freeze({
10356
10357
  "path": "batteryPower",
10357
10358
  "valueType": "number"
10358
10359
  },
10360
+ {
10361
+ "path": "powerSource",
10362
+ "valueType": "enum",
10363
+ "enumValues": ["mains", "battery"]
10364
+ },
10359
10365
  {
10360
10366
  "path": "desiccantLeftDays",
10361
10367
  "valueType": "number"
@@ -10941,7 +10947,7 @@ Object.freeze({
10941
10947
  * can answer "may a rule actuate this?" without importing the schema barrel
10942
10948
  * (~144MB RSS per runner, D28).
10943
10949
  *
10944
- * Coverage: 95 device-scoped capabilities.
10950
+ * Coverage: 96 device-scoped capabilities.
10945
10951
  */
10946
10952
  var DEVICE_SCOPED_CAPS = new Set([
10947
10953
  "accessories",
@@ -10991,6 +10997,7 @@ var DEVICE_SCOPED_CAPS = new Set([
10991
10997
  "image",
10992
10998
  "image-settings",
10993
10999
  "intercom",
11000
+ "ir-transmitter",
10994
11001
  "lawn-mower-control",
10995
11002
  "lock-control",
10996
11003
  "media-player",
@@ -11084,7 +11091,7 @@ function sleep(ms) {
11084
11091
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
11085
11092
  }
11086
11093
  //#endregion
11087
- //#region ../types/dist/err-msg-DIorGYeC.mjs
11094
+ //#region ../types/dist/err-msg-BCdlR2Li.mjs
11088
11095
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
11089
11096
  DeviceType["Camera"] = "camera";
11090
11097
  DeviceType["Hub"] = "hub";
@@ -11430,6 +11437,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
11430
11437
  /** Fallback when the notifier service name doesn't match a known
11431
11438
  * pattern. */
11432
11439
  DeviceRole["GenericNotifier"] = "generic-notifier";
11440
+ /** Emits a pulse train (infrared or RF) on request — the `ir-transmitter`
11441
+ * cap. A `DeviceType.Generic` device. */
11442
+ DeviceRole["IrTransmitter"] = "ir-transmitter";
11433
11443
  return DeviceRole;
11434
11444
  }({});
11435
11445
  /**
@@ -11443,7 +11453,7 @@ function errMsg(err) {
11443
11453
  return String(err);
11444
11454
  }
11445
11455
  //#endregion
11446
- //#region ../types/dist/composition-DwA0uVW5.mjs
11456
+ //#region ../types/dist/composition-DpFv_J6D.mjs
11447
11457
  /**
11448
11458
  * Deterministic SHA-256 hash of an arbitrary serialisable value. The
11449
11459
  * canonical form sorts object keys alphabetically at every depth so two
@@ -45027,6 +45037,17 @@ var LlmProfileSchema = object({
45027
45037
  * field in its editor only when its descriptor lists it in `profileFields`. */
45028
45038
  topK: number().int().positive().optional(),
45029
45039
  maxTokens: number().int().positive().optional(),
45040
+ /** How hard the model "thinks" before it answers. Omitted = the model's own
45041
+ * default. `off` matters for structured output: a thinking model can spend
45042
+ * the whole completion on reasoning and return an empty `content`. Carried
45043
+ * only by the wires that have it — a kind offers the field in its editor
45044
+ * only when its descriptor lists it in `profileFields`. */
45045
+ reasoningEffort: _enum([
45046
+ "off",
45047
+ "low",
45048
+ "medium",
45049
+ "high"
45050
+ ]).optional(),
45030
45051
  /** Prompt context window. Advisory for cloud kinds (they enforce their own). */
45031
45052
  contextLength: number().int().positive().optional(),
45032
45053
  /** Default system prompt. A caller's `system` REPLACES it (never appends —
@@ -45065,6 +45086,7 @@ var LlmProfileFieldSchema = _enum([
45065
45086
  "topP",
45066
45087
  "topK",
45067
45088
  "maxTokens",
45089
+ "reasoningEffort",
45068
45090
  "contextLength",
45069
45091
  "systemPrompt",
45070
45092
  "timeoutMs",
@@ -61780,6 +61802,56 @@ DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _v
61780
61802
  auth: "protected"
61781
61803
  });
61782
61804
  /**
61805
+ * A pulse train in signed microseconds: mark (+) first, then space (-), strictly
61806
+ * alternating, no zeros, 2..1024 entries.
61807
+ */
61808
+ var IrTimingsSchema = array(number().int()).min(2).max(1024).superRefine((timings, ctx) => {
61809
+ timings.forEach((value, index) => {
61810
+ const expectMark = index % 2 === 0;
61811
+ if (value === 0 || value > 0 !== expectMark) ctx.addIssue({
61812
+ code: "custom",
61813
+ message: `timing ${index} must be a non-zero ${expectMark ? "mark (positive)" : "space (negative)"}`,
61814
+ path: [index]
61815
+ });
61816
+ });
61817
+ });
61818
+ /** Per-command transmit options. Every key is optional; a transmitter applies what it can. */
61819
+ var TransmitSettingsSchema = object({
61820
+ carrierHz: number().int().positive().optional(),
61821
+ dutyCyclePercent: number().int().min(1).max(100).optional(),
61822
+ repeat: number().int().min(0).max(20).optional(),
61823
+ repeatDelayMs: number().int().min(0).optional()
61824
+ });
61825
+ /** The setting keys a transmitter may declare as settable (`getInfo.settable`). */
61826
+ var TransmitSettingKeySchema = _enum([
61827
+ "carrierHz",
61828
+ "dutyCyclePercent",
61829
+ "repeat",
61830
+ "repeatDelayMs"
61831
+ ]);
61832
+ var IrMediumSchema = _enum(["ir", "rf"]);
61833
+ var IrSendResultSchema = object({
61834
+ ok: literal(true),
61835
+ /** Settings the transmitter could not apply; the train was still sent. */
61836
+ ignoredSettings: array(string())
61837
+ });
61838
+ var IrTransmitterInfoSchema = object({
61839
+ media: array(IrMediumSchema),
61840
+ settable: array(TransmitSettingKeySchema),
61841
+ maxTimings: number().int().positive()
61842
+ });
61843
+ DeviceType.Generic, method(object({
61844
+ deviceId: number().int().nonnegative(),
61845
+ timings: IrTimingsSchema,
61846
+ settings: TransmitSettingsSchema.optional()
61847
+ }), IrSendResultSchema, {
61848
+ kind: "mutation",
61849
+ auth: "protected"
61850
+ }), method(object({ deviceId: number().int().nonnegative() }), IrTransmitterInfoSchema, {
61851
+ kind: "query",
61852
+ auth: "protected"
61853
+ });
61854
+ /**
61783
61855
  * `calendar-source` — collection cap exposing per-provider calendars and
61784
61856
  * their events. Every addon that contributes calendars (Home Assistant,
61785
61857
  * a future Google Calendar addon, …) registers a provider here. The hub
@@ -67955,9 +68027,14 @@ var PetFeederStatusSchema = object({
67955
68027
  * (`device_class: problem`, on = low). True when the tank reports empty,
67956
68028
  * or, on a dual-hopper model, when EITHER hopper is empty. */
67957
68029
  lowFood: boolean(),
67958
- /** Battery charge 0..100 (%). Null on mains-powered models or when the
67959
- * device has no battery reading. */
68030
+ /** Battery charge 0..100 (%). On a feeder running on `mains` this is the
68031
+ * BACKUP battery's charge, not the power source. Null when the device has
68032
+ * no battery reading. */
67960
68033
  batteryPower: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
68034
+ /** What the feeder is powered from right now: `mains` (plugged in, the
68035
+ * battery is only a backup) or `battery`. Null when the device does not
68036
+ * report it. */
68037
+ powerSource: _enum(["mains", "battery"]).nullable(),
67961
68038
  /**
67962
68039
  * Desiccant life remaining, stored in seconds (duration base, D944).
67963
68040
  * Providers convert from the days the feeder reports. Null when the
@@ -78832,6 +78909,20 @@ Object.freeze({
78832
78909
  access: "create",
78833
78910
  role: "viewer"
78834
78911
  },
78912
+ "irTransmitter.getInfo": {
78913
+ capName: "ir-transmitter",
78914
+ capScope: "device",
78915
+ addonId: null,
78916
+ access: "view",
78917
+ role: "viewer"
78918
+ },
78919
+ "irTransmitter.send": {
78920
+ capName: "ir-transmitter",
78921
+ capScope: "device",
78922
+ addonId: null,
78923
+ access: "create",
78924
+ role: "viewer"
78925
+ },
78835
78926
  "keychain.delete": {
78836
78927
  capName: "keychain",
78837
78928
  capScope: "system",
@@ -86455,6 +86546,11 @@ var ACTUATOR_CAP_VOCABULARY = {
86455
86546
  icon: "circle-dot"
86456
86547
  }]
86457
86548
  },
86549
+ "ir-transmitter": {
86550
+ scope: "device",
86551
+ noun: t("IR / RF transmitter", "Trasmettitore IR / RF"),
86552
+ notOperatorFacing: { send: "a raw pulse train is not something an operator composes in an automation; the remote that owns the command table sends it" }
86553
+ },
86458
86554
  control: {
86459
86555
  scope: "device",
86460
86556
  noun: t("Control", "Controllo"),
@@ -90174,6 +90270,16 @@ Object.freeze({
90174
90270
  form: "single",
90175
90271
  optional: false
90176
90272
  }],
90273
+ "irTransmitter.getInfo": [{
90274
+ name: "deviceId",
90275
+ form: "single",
90276
+ optional: false
90277
+ }],
90278
+ "irTransmitter.send": [{
90279
+ name: "deviceId",
90280
+ form: "single",
90281
+ optional: false
90282
+ }],
90177
90283
  "keychain.deleteDeviceScope": [{
90178
90284
  name: "deviceId",
90179
90285
  form: "single",
@@ -96768,6 +96874,22 @@ function armRemovalReconcile(opts) {
96768
96874
  timer.unref?.();
96769
96875
  return () => clearInterval(timer);
96770
96876
  }
96877
+ discriminatedUnion("kind", [object({
96878
+ kind: literal("raw"),
96879
+ timings: array(number().int()),
96880
+ settings: TransmitSettingsSchema.optional()
96881
+ }), object({
96882
+ kind: literal("pronto"),
96883
+ code: string()
96884
+ })]);
96885
+ object({
96886
+ manufacturer: string().optional(),
96887
+ supportedModels: array(string()).optional(),
96888
+ supportedController: string().optional(),
96889
+ commandsEncoding: string(),
96890
+ delay: number().nonnegative().optional(),
96891
+ commands: record(string(), unknown())
96892
+ });
96771
96893
  //#endregion
96772
96894
  //#region src/pipeline-analytics/cluster-model-pin.ts
96773
96895
  /**
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_clip_model_registry = require("../clip-model-registry-BweA9zEK.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-CC7pvitG.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_clip_model_registry.__toESM(node_fs);
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { $i as BaseAddon, _i as resolvePoolMemoryPolicy, _r as embeddingRequirementsUnavailableError, a as CLIP_EMBEDDING_STEP_ID, fa as normalizeNodeId, gr as embeddingRequirementsFailedError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, mr as embeddingModelFailedError, n as DEFAULT_CLIP_MODEL, ni as parseProcStatus, pr as embeddingEncoderCapability, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS, tn as PoolMemoryWatchdog } from "../clip-model-registry-DLCu17dL.mjs";
1
+ import { $i as BaseAddon, _i as resolvePoolMemoryPolicy, _r as embeddingRequirementsUnavailableError, a as CLIP_EMBEDDING_STEP_ID, fa as normalizeNodeId, gr as embeddingRequirementsFailedError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, mr as embeddingModelFailedError, n as DEFAULT_CLIP_MODEL, ni as parseProcStatus, pr as embeddingEncoderCapability, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS, tn as PoolMemoryWatchdog } from "../clip-model-registry-B_mY0hd7.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -1,8 +1,8 @@
1
1
  import { a as e, i as t, n, o as r, r as i, t as a } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-Cx9AsA5q.mjs";
2
2
  import { t as o } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-B3Wx5J80.mjs";
3
- import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DQTr4r2P.mjs";
3
+ import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-OPayQG8i.mjs";
4
4
  import { n as x, t as S } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-CkwmHEi0.mjs";
5
- import { t as C } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-YDf26qsN.mjs";
5
+ import { t as C } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-YNYqWfWY.mjs";
6
6
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
7
7
  var w = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), T = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), E = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), D = (e) => {
8
8
  let t = E(e);
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.436",
21
+ version: "1.2.438",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_analytics_widgets",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.345",
36
+ version: "1.2.346",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",