@camstack/addon-training 0.1.100 → 0.1.102

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 (25) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{MotionZonesSettings-DBC9oNEy.mjs → MotionZonesSettings-HAJ6awj4.mjs} +2 -2
  3. package/dist/{PrivacyMaskSettings-MPmxoEGa.mjs → PrivacyMaskSettings-BF0NUmVm.mjs} +2 -2
  4. package/dist/{SceneMonitorEditor-q8rm9EAO.mjs → SceneMonitorEditor-CeEWTp0p.mjs} +2 -2
  5. package/dist/_stub.js +6391 -6191
  6. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-BLf4IX1e.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-p2vBd39W.mjs} +3 -3
  7. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CLeWJI6-.mjs +26 -0
  8. package/dist/addon-training.css +1 -1
  9. package/dist/{dist-BHRYlf1o.js → dist-CNkCexYe.js} +199 -12
  10. package/dist/{dist-5otxE_9_.mjs → dist-u3tq3l-n.mjs} +199 -12
  11. package/dist/{hostInit-B98SkU6O.mjs → hostInit-CvBrePIu.mjs} +2 -2
  12. package/dist/{icons-BQdiqxUM.mjs → icons-CXruMajc.mjs} +1078 -1109
  13. package/dist/index.js +1 -1
  14. package/dist/orchestrator/training.addon.js +1 -1
  15. package/dist/orchestrator/training.addon.mjs +1 -1
  16. package/dist/{player-overlays-aX4eEmgd.mjs → player-overlays-NVql0bBe.mjs} +1 -1
  17. package/dist/providers/modal/training-modal.addon.js +1 -1
  18. package/dist/providers/modal/training-modal.addon.mjs +1 -1
  19. package/dist/remoteEntry.js +1 -1
  20. package/dist/{responsive-D9ViDal5.mjs → responsive-Cw10UV1G.mjs} +1 -1
  21. package/dist/{scene-monitor-copy-B7FtvYkD.mjs → scene-monitor-copy-BiaQA_PZ.mjs} +1 -1
  22. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-4OWl-Jop.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-B2ShwDvL.mjs} +1 -1
  23. package/dist/{zoom-out-YWRm0VbK.mjs → zoom-out-D4rm3GoJ.mjs} +95 -64
  24. package/package.json +1 -1
  25. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-4mdhpGoW.mjs +0 -26
@@ -5613,7 +5613,7 @@ var ZodIssueCode = {
5613
5613
  var ZodFirstPartyTypeKind;
5614
5614
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5615
5615
  //#endregion
5616
- //#region ../types/dist/sleep-Crlmu_tO.mjs
5616
+ //#region ../types/dist/sleep-BAvUCi_2.mjs
5617
5617
  /**
5618
5618
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5619
5619
  * window to float samples (D455).
@@ -8995,6 +8995,7 @@ var CAP_NAMES = Object.freeze([
8995
8995
  "image-settings",
8996
8996
  "integrations",
8997
8997
  "intercom",
8998
+ "ir-transmitter",
8998
8999
  "keychain",
8999
9000
  "keychain-admin",
9000
9001
  "lawn-mower-control",
@@ -10242,6 +10243,11 @@ Object.freeze({
10242
10243
  "path": "batteryPower",
10243
10244
  "valueType": "number"
10244
10245
  },
10246
+ {
10247
+ "path": "powerSource",
10248
+ "valueType": "enum",
10249
+ "enumValues": ["mains", "battery"]
10250
+ },
10245
10251
  {
10246
10252
  "path": "desiccantLeftDays",
10247
10253
  "valueType": "number"
@@ -10825,7 +10831,7 @@ object({
10825
10831
  params: record(string(), union([string(), number()])).optional()
10826
10832
  });
10827
10833
  //#endregion
10828
- //#region ../types/dist/err-msg-DIorGYeC.mjs
10834
+ //#region ../types/dist/err-msg-BCdlR2Li.mjs
10829
10835
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
10830
10836
  DeviceType["Camera"] = "camera";
10831
10837
  DeviceType["Hub"] = "hub";
@@ -11171,10 +11177,13 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
11171
11177
  /** Fallback when the notifier service name doesn't match a known
11172
11178
  * pattern. */
11173
11179
  DeviceRole["GenericNotifier"] = "generic-notifier";
11180
+ /** Emits a pulse train (infrared or RF) on request — the `ir-transmitter`
11181
+ * cap. A `DeviceType.Generic` device. */
11182
+ DeviceRole["IrTransmitter"] = "ir-transmitter";
11174
11183
  return DeviceRole;
11175
11184
  }({});
11176
11185
  //#endregion
11177
- //#region ../types/dist/composition-CZImLpOI.mjs
11186
+ //#region ../types/dist/composition-DpFv_J6D.mjs
11178
11187
  /**
11179
11188
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11180
11189
  *
@@ -19121,12 +19130,13 @@ var CHANGED = {
19121
19130
  expr: "now"
19122
19131
  };
19123
19132
  function numeric(input) {
19133
+ const { alsoFrom, ...base } = input;
19124
19134
  return {
19125
- ...input,
19135
+ ...base,
19126
19136
  family: "numeric",
19127
19137
  deviceType: DeviceType.Sensor,
19128
19138
  memberDeviceType: DeviceType.Sensor,
19129
- memberDeviceTypes: [DeviceType.Sensor],
19139
+ memberDeviceTypes: [DeviceType.Sensor, ...alsoFrom?.deviceTypes ?? []],
19130
19140
  activeWhen: void 0,
19131
19141
  commandCaps: [],
19132
19142
  baseUnit: baseUnitOf(input.quantity),
@@ -19134,9 +19144,10 @@ function numeric(input) {
19134
19144
  accept: [{
19135
19145
  cap: input.outputCap,
19136
19146
  fieldPath: input.outputField
19137
- }]
19147
+ }, ...alsoFrom === void 0 ? [] : [alsoFrom.accept]]
19138
19148
  };
19139
19149
  }
19150
+ var CLIMATE_DEVICES = [DeviceType.Thermostat, DeviceType.Climate];
19140
19151
  function binary(input) {
19141
19152
  return {
19142
19153
  ...input,
@@ -19162,7 +19173,14 @@ var GROUP_TEMPLATES = [
19162
19173
  quantity: "temperature",
19163
19174
  defaultAggregate: "mean",
19164
19175
  empty: "null",
19165
- companions: [NOW$2]
19176
+ companions: [NOW$2],
19177
+ alsoFrom: {
19178
+ deviceTypes: CLIMATE_DEVICES,
19179
+ accept: {
19180
+ cap: "climate-control",
19181
+ fieldPath: "currentTemp"
19182
+ }
19183
+ }
19166
19184
  }),
19167
19185
  numeric({
19168
19186
  id: "humidity",
@@ -19173,7 +19191,14 @@ var GROUP_TEMPLATES = [
19173
19191
  quantity: "humidity",
19174
19192
  defaultAggregate: "mean",
19175
19193
  empty: "null",
19176
- companions: [NOW$2]
19194
+ companions: [NOW$2],
19195
+ alsoFrom: {
19196
+ deviceTypes: CLIMATE_DEVICES,
19197
+ accept: {
19198
+ cap: "climate-control",
19199
+ fieldPath: "currentHumidity"
19200
+ }
19201
+ }
19177
19202
  }),
19178
19203
  numeric({
19179
19204
  id: "pressure",
@@ -43391,6 +43416,17 @@ var LlmProfileSchema = object({
43391
43416
  * field in its editor only when its descriptor lists it in `profileFields`. */
43392
43417
  topK: number().int().positive().optional(),
43393
43418
  maxTokens: number().int().positive().optional(),
43419
+ /** How hard the model "thinks" before it answers. Omitted = the model's own
43420
+ * default. `off` matters for structured output: a thinking model can spend
43421
+ * the whole completion on reasoning and return an empty `content`. Carried
43422
+ * only by the wires that have it — a kind offers the field in its editor
43423
+ * only when its descriptor lists it in `profileFields`. */
43424
+ reasoningEffort: _enum([
43425
+ "off",
43426
+ "low",
43427
+ "medium",
43428
+ "high"
43429
+ ]).optional(),
43394
43430
  /** Prompt context window. Advisory for cloud kinds (they enforce their own). */
43395
43431
  contextLength: number().int().positive().optional(),
43396
43432
  /** Default system prompt. A caller's `system` REPLACES it (never appends —
@@ -43429,6 +43465,7 @@ var LlmProfileFieldSchema = _enum([
43429
43465
  "topP",
43430
43466
  "topK",
43431
43467
  "maxTokens",
43468
+ "reasoningEffort",
43432
43469
  "contextLength",
43433
43470
  "systemPrompt",
43434
43471
  "timeoutMs",
@@ -44679,6 +44716,43 @@ var NotificationActionSchema = object({
44679
44716
  */
44680
44717
  mode: _enum(["navigate", "background"]).optional()
44681
44718
  });
44719
+ /** A delivery parameter value: what a notifier declared it takes. */
44720
+ var DeliveryParamValueSchema = union([
44721
+ string(),
44722
+ number(),
44723
+ boolean()
44724
+ ]);
44725
+ /**
44726
+ * One extra delivery parameter a notifier KIND declares (D938). A rule that
44727
+ * addresses a target of that kind may set it; a kind that declares nothing is
44728
+ * never handed one. The admin UI derives its control from this descriptor —
44729
+ * no editor knows a service by name.
44730
+ *
44731
+ * Optional fields are `.optional()`, never `.default()` (a Zod default does not
44732
+ * run on the addon cap path).
44733
+ */
44734
+ var DeliveryParamSchema = object({
44735
+ key: string().min(1),
44736
+ label: string(),
44737
+ /** i18n key of the label, resolved by the declaring addon's namespace. */
44738
+ labelKey: string().optional(),
44739
+ type: _enum([
44740
+ "enum",
44741
+ "number",
44742
+ "boolean",
44743
+ "string"
44744
+ ]),
44745
+ /** `enum` only: the closed set of accepted values. */
44746
+ options: array(object({
44747
+ value: string(),
44748
+ label: string()
44749
+ })).optional(),
44750
+ /** `number` only. */
44751
+ min: number().optional(),
44752
+ max: number().optional(),
44753
+ /** What the notifier does when the rule sets nothing; shown as the placeholder. */
44754
+ default: DeliveryParamValueSchema.optional()
44755
+ });
44682
44756
  /**
44683
44757
  * The canonical notification. `body` is the only hard field (Apprise model).
44684
44758
  * `priority` is a 5-level ORDINAL (1=lowest … 3=normal(default) … 5=urgent),
@@ -44701,7 +44775,13 @@ var NotificationSchema = object({
44701
44775
  tag: string().optional(),
44702
44776
  deviceId: number().optional(),
44703
44777
  eventId: string().optional(),
44704
- metadata: record(string(), unknown()).optional()
44778
+ metadata: record(string(), unknown()).optional(),
44779
+ /**
44780
+ * Values for the parameters the target's kind DECLARES in
44781
+ * {@link TargetKindSchema} `deliveryParams`. Already validated against the
44782
+ * declaration by the sender; a notifier reads only the keys it declared.
44783
+ */
44784
+ delivery: record(string(), DeliveryParamValueSchema).optional()
44705
44785
  });
44706
44786
  /** One declared native severity/priority level for a kind. */
44707
44787
  var TargetKindLevelSchema = object({
@@ -44807,6 +44887,11 @@ var TargetKindSchema = object({
44807
44887
  */
44808
44888
  destinationKeys: array(string()).optional(),
44809
44889
  supportsDiscovery: boolean(),
44890
+ /**
44891
+ * Extra delivery parameters a rule may set for a target of this kind (D938).
44892
+ * Absent = none; the rule editor then offers nothing.
44893
+ */
44894
+ deliveryParams: array(DeliveryParamSchema).optional(),
44810
44895
  caps: TargetKindCapsSchema
44811
44896
  });
44812
44897
  /**
@@ -56977,7 +57062,9 @@ var ManifestShapeSchema = object({
56977
57062
  icon: string().optional()
56978
57063
  }).optional(),
56979
57064
  protected: boolean().optional(),
56980
- removable: boolean().optional()
57065
+ removable: boolean().optional(),
57066
+ /** Declared Integrations-page block (mirror of `AddonDeclaration.integrationSection`). */
57067
+ integrationSection: _enum(["system", "providers"]).optional()
56981
57068
  });
56982
57069
  var AddonProcessSchema = object({
56983
57070
  pid: number().optional(),
@@ -57699,6 +57786,56 @@ DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _v
57699
57786
  auth: "protected"
57700
57787
  });
57701
57788
  /**
57789
+ * A pulse train in signed microseconds: mark (+) first, then space (-), strictly
57790
+ * alternating, no zeros, 2..1024 entries.
57791
+ */
57792
+ var IrTimingsSchema = array(number().int()).min(2).max(1024).superRefine((timings, ctx) => {
57793
+ timings.forEach((value, index) => {
57794
+ const expectMark = index % 2 === 0;
57795
+ if (value === 0 || value > 0 !== expectMark) ctx.addIssue({
57796
+ code: "custom",
57797
+ message: `timing ${index} must be a non-zero ${expectMark ? "mark (positive)" : "space (negative)"}`,
57798
+ path: [index]
57799
+ });
57800
+ });
57801
+ });
57802
+ /** Per-command transmit options. Every key is optional; a transmitter applies what it can. */
57803
+ var TransmitSettingsSchema = object({
57804
+ carrierHz: number().int().positive().optional(),
57805
+ dutyCyclePercent: number().int().min(1).max(100).optional(),
57806
+ repeat: number().int().min(0).max(20).optional(),
57807
+ repeatDelayMs: number().int().min(0).optional()
57808
+ });
57809
+ /** The setting keys a transmitter may declare as settable (`getInfo.settable`). */
57810
+ var TransmitSettingKeySchema = _enum([
57811
+ "carrierHz",
57812
+ "dutyCyclePercent",
57813
+ "repeat",
57814
+ "repeatDelayMs"
57815
+ ]);
57816
+ var IrMediumSchema = _enum(["ir", "rf"]);
57817
+ var IrSendResultSchema = object({
57818
+ ok: literal(true),
57819
+ /** Settings the transmitter could not apply; the train was still sent. */
57820
+ ignoredSettings: array(string())
57821
+ });
57822
+ var IrTransmitterInfoSchema = object({
57823
+ media: array(IrMediumSchema),
57824
+ settable: array(TransmitSettingKeySchema),
57825
+ maxTimings: number().int().positive()
57826
+ });
57827
+ DeviceType.Generic, method(object({
57828
+ deviceId: number().int().nonnegative(),
57829
+ timings: IrTimingsSchema,
57830
+ settings: TransmitSettingsSchema.optional()
57831
+ }), IrSendResultSchema, {
57832
+ kind: "mutation",
57833
+ auth: "protected"
57834
+ }), method(object({ deviceId: number().int().nonnegative() }), IrTransmitterInfoSchema, {
57835
+ kind: "query",
57836
+ auth: "protected"
57837
+ });
57838
+ /**
57702
57839
  * `calendar-source` — collection cap exposing per-provider calendars and
57703
57840
  * their events. Every addon that contributes calendars (Home Assistant,
57704
57841
  * a future Google Calendar addon, …) registers a provider here. The hub
@@ -61801,9 +61938,14 @@ object({
61801
61938
  * (`device_class: problem`, on = low). True when the tank reports empty,
61802
61939
  * or, on a dual-hopper model, when EITHER hopper is empty. */
61803
61940
  lowFood: boolean(),
61804
- /** Battery charge 0..100 (%). Null on mains-powered models or when the
61805
- * device has no battery reading. */
61941
+ /** Battery charge 0..100 (%). On a feeder running on `mains` this is the
61942
+ * BACKUP battery's charge, not the power source. Null when the device has
61943
+ * no battery reading. */
61806
61944
  batteryPower: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61945
+ /** What the feeder is powered from right now: `mains` (plugged in, the
61946
+ * battery is only a backup) or `battery`. Null when the device does not
61947
+ * report it. */
61948
+ powerSource: _enum(["mains", "battery"]).nullable(),
61807
61949
  /**
61808
61950
  * Desiccant life remaining, stored in seconds (duration base, D944).
61809
61951
  * Providers convert from the days the feeder reports. Null when the
@@ -70181,6 +70323,20 @@ Object.freeze({
70181
70323
  access: "create",
70182
70324
  role: "viewer"
70183
70325
  },
70326
+ "irTransmitter.getInfo": {
70327
+ capName: "ir-transmitter",
70328
+ capScope: "device",
70329
+ addonId: null,
70330
+ access: "view",
70331
+ role: "viewer"
70332
+ },
70333
+ "irTransmitter.send": {
70334
+ capName: "ir-transmitter",
70335
+ capScope: "device",
70336
+ addonId: null,
70337
+ access: "create",
70338
+ role: "viewer"
70339
+ },
70184
70340
  "keychain.delete": {
70185
70341
  capName: "keychain",
70186
70342
  capScope: "system",
@@ -77804,6 +77960,11 @@ var ACTUATOR_CAP_VOCABULARY = {
77804
77960
  icon: "circle-dot"
77805
77961
  }]
77806
77962
  },
77963
+ "ir-transmitter": {
77964
+ scope: "device",
77965
+ noun: t("IR / RF transmitter", "Trasmettitore IR / RF"),
77966
+ notOperatorFacing: { send: "a raw pulse train is not something an operator composes in an automation; the remote that owns the command table sends it" }
77967
+ },
77807
77968
  control: {
77808
77969
  scope: "device",
77809
77970
  noun: t("Control", "Controllo"),
@@ -81523,6 +81684,16 @@ Object.freeze({
81523
81684
  form: "single",
81524
81685
  optional: false
81525
81686
  }],
81687
+ "irTransmitter.getInfo": [{
81688
+ name: "deviceId",
81689
+ form: "single",
81690
+ optional: false
81691
+ }],
81692
+ "irTransmitter.send": [{
81693
+ name: "deviceId",
81694
+ form: "single",
81695
+ optional: false
81696
+ }],
81526
81697
  "keychain.deleteDeviceScope": [{
81527
81698
  name: "deviceId",
81528
81699
  form: "single",
@@ -84556,6 +84727,22 @@ DEFAULT_NATIVE_LEASE_SETTINGS.admission;
84556
84727
  String.raw`(?<=^|["'(\s>,\[{])`;
84557
84728
  var MB = 1024 * 1024;
84558
84729
  1024 * MB, 3072 * MB;
84730
+ discriminatedUnion("kind", [object({
84731
+ kind: literal("raw"),
84732
+ timings: array(number().int()),
84733
+ settings: TransmitSettingsSchema.optional()
84734
+ }), object({
84735
+ kind: literal("pronto"),
84736
+ code: string()
84737
+ })]);
84738
+ object({
84739
+ manufacturer: string().optional(),
84740
+ supportedModels: array(string()).optional(),
84741
+ supportedController: string().optional(),
84742
+ commandsEncoding: string(),
84743
+ delay: number().nonnegative().optional(),
84744
+ commands: record(string(), unknown())
84745
+ });
84559
84746
  //#endregion
84560
84747
  Object.defineProperty(exports, "BaseAddon", {
84561
84748
  enumerable: true,