@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
@@ -5580,7 +5580,7 @@ var ZodIssueCode = {
5580
5580
  var ZodFirstPartyTypeKind;
5581
5581
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5582
5582
  //#endregion
5583
- //#region ../types/dist/sleep-Crlmu_tO.mjs
5583
+ //#region ../types/dist/sleep-BAvUCi_2.mjs
5584
5584
  /**
5585
5585
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5586
5586
  * window to float samples (D455).
@@ -8962,6 +8962,7 @@ var CAP_NAMES = Object.freeze([
8962
8962
  "image-settings",
8963
8963
  "integrations",
8964
8964
  "intercom",
8965
+ "ir-transmitter",
8965
8966
  "keychain",
8966
8967
  "keychain-admin",
8967
8968
  "lawn-mower-control",
@@ -10209,6 +10210,11 @@ Object.freeze({
10209
10210
  "path": "batteryPower",
10210
10211
  "valueType": "number"
10211
10212
  },
10213
+ {
10214
+ "path": "powerSource",
10215
+ "valueType": "enum",
10216
+ "enumValues": ["mains", "battery"]
10217
+ },
10212
10218
  {
10213
10219
  "path": "desiccantLeftDays",
10214
10220
  "valueType": "number"
@@ -10792,7 +10798,7 @@ object({
10792
10798
  params: record(string(), union([string(), number()])).optional()
10793
10799
  });
10794
10800
  //#endregion
10795
- //#region ../types/dist/err-msg-DIorGYeC.mjs
10801
+ //#region ../types/dist/err-msg-BCdlR2Li.mjs
10796
10802
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
10797
10803
  DeviceType["Camera"] = "camera";
10798
10804
  DeviceType["Hub"] = "hub";
@@ -11138,10 +11144,13 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
11138
11144
  /** Fallback when the notifier service name doesn't match a known
11139
11145
  * pattern. */
11140
11146
  DeviceRole["GenericNotifier"] = "generic-notifier";
11147
+ /** Emits a pulse train (infrared or RF) on request — the `ir-transmitter`
11148
+ * cap. A `DeviceType.Generic` device. */
11149
+ DeviceRole["IrTransmitter"] = "ir-transmitter";
11141
11150
  return DeviceRole;
11142
11151
  }({});
11143
11152
  //#endregion
11144
- //#region ../types/dist/composition-CZImLpOI.mjs
11153
+ //#region ../types/dist/composition-DpFv_J6D.mjs
11145
11154
  /**
11146
11155
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11147
11156
  *
@@ -19088,12 +19097,13 @@ var CHANGED = {
19088
19097
  expr: "now"
19089
19098
  };
19090
19099
  function numeric(input) {
19100
+ const { alsoFrom, ...base } = input;
19091
19101
  return {
19092
- ...input,
19102
+ ...base,
19093
19103
  family: "numeric",
19094
19104
  deviceType: DeviceType.Sensor,
19095
19105
  memberDeviceType: DeviceType.Sensor,
19096
- memberDeviceTypes: [DeviceType.Sensor],
19106
+ memberDeviceTypes: [DeviceType.Sensor, ...alsoFrom?.deviceTypes ?? []],
19097
19107
  activeWhen: void 0,
19098
19108
  commandCaps: [],
19099
19109
  baseUnit: baseUnitOf(input.quantity),
@@ -19101,9 +19111,10 @@ function numeric(input) {
19101
19111
  accept: [{
19102
19112
  cap: input.outputCap,
19103
19113
  fieldPath: input.outputField
19104
- }]
19114
+ }, ...alsoFrom === void 0 ? [] : [alsoFrom.accept]]
19105
19115
  };
19106
19116
  }
19117
+ var CLIMATE_DEVICES = [DeviceType.Thermostat, DeviceType.Climate];
19107
19118
  function binary(input) {
19108
19119
  return {
19109
19120
  ...input,
@@ -19129,7 +19140,14 @@ var GROUP_TEMPLATES = [
19129
19140
  quantity: "temperature",
19130
19141
  defaultAggregate: "mean",
19131
19142
  empty: "null",
19132
- companions: [NOW$2]
19143
+ companions: [NOW$2],
19144
+ alsoFrom: {
19145
+ deviceTypes: CLIMATE_DEVICES,
19146
+ accept: {
19147
+ cap: "climate-control",
19148
+ fieldPath: "currentTemp"
19149
+ }
19150
+ }
19133
19151
  }),
19134
19152
  numeric({
19135
19153
  id: "humidity",
@@ -19140,7 +19158,14 @@ var GROUP_TEMPLATES = [
19140
19158
  quantity: "humidity",
19141
19159
  defaultAggregate: "mean",
19142
19160
  empty: "null",
19143
- companions: [NOW$2]
19161
+ companions: [NOW$2],
19162
+ alsoFrom: {
19163
+ deviceTypes: CLIMATE_DEVICES,
19164
+ accept: {
19165
+ cap: "climate-control",
19166
+ fieldPath: "currentHumidity"
19167
+ }
19168
+ }
19144
19169
  }),
19145
19170
  numeric({
19146
19171
  id: "pressure",
@@ -43358,6 +43383,17 @@ var LlmProfileSchema = object({
43358
43383
  * field in its editor only when its descriptor lists it in `profileFields`. */
43359
43384
  topK: number().int().positive().optional(),
43360
43385
  maxTokens: number().int().positive().optional(),
43386
+ /** How hard the model "thinks" before it answers. Omitted = the model's own
43387
+ * default. `off` matters for structured output: a thinking model can spend
43388
+ * the whole completion on reasoning and return an empty `content`. Carried
43389
+ * only by the wires that have it — a kind offers the field in its editor
43390
+ * only when its descriptor lists it in `profileFields`. */
43391
+ reasoningEffort: _enum([
43392
+ "off",
43393
+ "low",
43394
+ "medium",
43395
+ "high"
43396
+ ]).optional(),
43361
43397
  /** Prompt context window. Advisory for cloud kinds (they enforce their own). */
43362
43398
  contextLength: number().int().positive().optional(),
43363
43399
  /** Default system prompt. A caller's `system` REPLACES it (never appends —
@@ -43396,6 +43432,7 @@ var LlmProfileFieldSchema = _enum([
43396
43432
  "topP",
43397
43433
  "topK",
43398
43434
  "maxTokens",
43435
+ "reasoningEffort",
43399
43436
  "contextLength",
43400
43437
  "systemPrompt",
43401
43438
  "timeoutMs",
@@ -44646,6 +44683,43 @@ var NotificationActionSchema = object({
44646
44683
  */
44647
44684
  mode: _enum(["navigate", "background"]).optional()
44648
44685
  });
44686
+ /** A delivery parameter value: what a notifier declared it takes. */
44687
+ var DeliveryParamValueSchema = union([
44688
+ string(),
44689
+ number(),
44690
+ boolean()
44691
+ ]);
44692
+ /**
44693
+ * One extra delivery parameter a notifier KIND declares (D938). A rule that
44694
+ * addresses a target of that kind may set it; a kind that declares nothing is
44695
+ * never handed one. The admin UI derives its control from this descriptor —
44696
+ * no editor knows a service by name.
44697
+ *
44698
+ * Optional fields are `.optional()`, never `.default()` (a Zod default does not
44699
+ * run on the addon cap path).
44700
+ */
44701
+ var DeliveryParamSchema = object({
44702
+ key: string().min(1),
44703
+ label: string(),
44704
+ /** i18n key of the label, resolved by the declaring addon's namespace. */
44705
+ labelKey: string().optional(),
44706
+ type: _enum([
44707
+ "enum",
44708
+ "number",
44709
+ "boolean",
44710
+ "string"
44711
+ ]),
44712
+ /** `enum` only: the closed set of accepted values. */
44713
+ options: array(object({
44714
+ value: string(),
44715
+ label: string()
44716
+ })).optional(),
44717
+ /** `number` only. */
44718
+ min: number().optional(),
44719
+ max: number().optional(),
44720
+ /** What the notifier does when the rule sets nothing; shown as the placeholder. */
44721
+ default: DeliveryParamValueSchema.optional()
44722
+ });
44649
44723
  /**
44650
44724
  * The canonical notification. `body` is the only hard field (Apprise model).
44651
44725
  * `priority` is a 5-level ORDINAL (1=lowest … 3=normal(default) … 5=urgent),
@@ -44668,7 +44742,13 @@ var NotificationSchema = object({
44668
44742
  tag: string().optional(),
44669
44743
  deviceId: number().optional(),
44670
44744
  eventId: string().optional(),
44671
- metadata: record(string(), unknown()).optional()
44745
+ metadata: record(string(), unknown()).optional(),
44746
+ /**
44747
+ * Values for the parameters the target's kind DECLARES in
44748
+ * {@link TargetKindSchema} `deliveryParams`. Already validated against the
44749
+ * declaration by the sender; a notifier reads only the keys it declared.
44750
+ */
44751
+ delivery: record(string(), DeliveryParamValueSchema).optional()
44672
44752
  });
44673
44753
  /** One declared native severity/priority level for a kind. */
44674
44754
  var TargetKindLevelSchema = object({
@@ -44774,6 +44854,11 @@ var TargetKindSchema = object({
44774
44854
  */
44775
44855
  destinationKeys: array(string()).optional(),
44776
44856
  supportsDiscovery: boolean(),
44857
+ /**
44858
+ * Extra delivery parameters a rule may set for a target of this kind (D938).
44859
+ * Absent = none; the rule editor then offers nothing.
44860
+ */
44861
+ deliveryParams: array(DeliveryParamSchema).optional(),
44777
44862
  caps: TargetKindCapsSchema
44778
44863
  });
44779
44864
  /**
@@ -56944,7 +57029,9 @@ var ManifestShapeSchema = object({
56944
57029
  icon: string().optional()
56945
57030
  }).optional(),
56946
57031
  protected: boolean().optional(),
56947
- removable: boolean().optional()
57032
+ removable: boolean().optional(),
57033
+ /** Declared Integrations-page block (mirror of `AddonDeclaration.integrationSection`). */
57034
+ integrationSection: _enum(["system", "providers"]).optional()
56948
57035
  });
56949
57036
  var AddonProcessSchema = object({
56950
57037
  pid: number().optional(),
@@ -57666,6 +57753,56 @@ DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _v
57666
57753
  auth: "protected"
57667
57754
  });
57668
57755
  /**
57756
+ * A pulse train in signed microseconds: mark (+) first, then space (-), strictly
57757
+ * alternating, no zeros, 2..1024 entries.
57758
+ */
57759
+ var IrTimingsSchema = array(number().int()).min(2).max(1024).superRefine((timings, ctx) => {
57760
+ timings.forEach((value, index) => {
57761
+ const expectMark = index % 2 === 0;
57762
+ if (value === 0 || value > 0 !== expectMark) ctx.addIssue({
57763
+ code: "custom",
57764
+ message: `timing ${index} must be a non-zero ${expectMark ? "mark (positive)" : "space (negative)"}`,
57765
+ path: [index]
57766
+ });
57767
+ });
57768
+ });
57769
+ /** Per-command transmit options. Every key is optional; a transmitter applies what it can. */
57770
+ var TransmitSettingsSchema = object({
57771
+ carrierHz: number().int().positive().optional(),
57772
+ dutyCyclePercent: number().int().min(1).max(100).optional(),
57773
+ repeat: number().int().min(0).max(20).optional(),
57774
+ repeatDelayMs: number().int().min(0).optional()
57775
+ });
57776
+ /** The setting keys a transmitter may declare as settable (`getInfo.settable`). */
57777
+ var TransmitSettingKeySchema = _enum([
57778
+ "carrierHz",
57779
+ "dutyCyclePercent",
57780
+ "repeat",
57781
+ "repeatDelayMs"
57782
+ ]);
57783
+ var IrMediumSchema = _enum(["ir", "rf"]);
57784
+ var IrSendResultSchema = object({
57785
+ ok: literal(true),
57786
+ /** Settings the transmitter could not apply; the train was still sent. */
57787
+ ignoredSettings: array(string())
57788
+ });
57789
+ var IrTransmitterInfoSchema = object({
57790
+ media: array(IrMediumSchema),
57791
+ settable: array(TransmitSettingKeySchema),
57792
+ maxTimings: number().int().positive()
57793
+ });
57794
+ DeviceType.Generic, method(object({
57795
+ deviceId: number().int().nonnegative(),
57796
+ timings: IrTimingsSchema,
57797
+ settings: TransmitSettingsSchema.optional()
57798
+ }), IrSendResultSchema, {
57799
+ kind: "mutation",
57800
+ auth: "protected"
57801
+ }), method(object({ deviceId: number().int().nonnegative() }), IrTransmitterInfoSchema, {
57802
+ kind: "query",
57803
+ auth: "protected"
57804
+ });
57805
+ /**
57669
57806
  * `calendar-source` — collection cap exposing per-provider calendars and
57670
57807
  * their events. Every addon that contributes calendars (Home Assistant,
57671
57808
  * a future Google Calendar addon, …) registers a provider here. The hub
@@ -61768,9 +61905,14 @@ object({
61768
61905
  * (`device_class: problem`, on = low). True when the tank reports empty,
61769
61906
  * or, on a dual-hopper model, when EITHER hopper is empty. */
61770
61907
  lowFood: boolean(),
61771
- /** Battery charge 0..100 (%). Null on mains-powered models or when the
61772
- * device has no battery reading. */
61908
+ /** Battery charge 0..100 (%). On a feeder running on `mains` this is the
61909
+ * BACKUP battery's charge, not the power source. Null when the device has
61910
+ * no battery reading. */
61773
61911
  batteryPower: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61912
+ /** What the feeder is powered from right now: `mains` (plugged in, the
61913
+ * battery is only a backup) or `battery`. Null when the device does not
61914
+ * report it. */
61915
+ powerSource: _enum(["mains", "battery"]).nullable(),
61774
61916
  /**
61775
61917
  * Desiccant life remaining, stored in seconds (duration base, D944).
61776
61918
  * Providers convert from the days the feeder reports. Null when the
@@ -70148,6 +70290,20 @@ Object.freeze({
70148
70290
  access: "create",
70149
70291
  role: "viewer"
70150
70292
  },
70293
+ "irTransmitter.getInfo": {
70294
+ capName: "ir-transmitter",
70295
+ capScope: "device",
70296
+ addonId: null,
70297
+ access: "view",
70298
+ role: "viewer"
70299
+ },
70300
+ "irTransmitter.send": {
70301
+ capName: "ir-transmitter",
70302
+ capScope: "device",
70303
+ addonId: null,
70304
+ access: "create",
70305
+ role: "viewer"
70306
+ },
70151
70307
  "keychain.delete": {
70152
70308
  capName: "keychain",
70153
70309
  capScope: "system",
@@ -77771,6 +77927,11 @@ var ACTUATOR_CAP_VOCABULARY = {
77771
77927
  icon: "circle-dot"
77772
77928
  }]
77773
77929
  },
77930
+ "ir-transmitter": {
77931
+ scope: "device",
77932
+ noun: t("IR / RF transmitter", "Trasmettitore IR / RF"),
77933
+ notOperatorFacing: { send: "a raw pulse train is not something an operator composes in an automation; the remote that owns the command table sends it" }
77934
+ },
77774
77935
  control: {
77775
77936
  scope: "device",
77776
77937
  noun: t("Control", "Controllo"),
@@ -81490,6 +81651,16 @@ Object.freeze({
81490
81651
  form: "single",
81491
81652
  optional: false
81492
81653
  }],
81654
+ "irTransmitter.getInfo": [{
81655
+ name: "deviceId",
81656
+ form: "single",
81657
+ optional: false
81658
+ }],
81659
+ "irTransmitter.send": [{
81660
+ name: "deviceId",
81661
+ form: "single",
81662
+ optional: false
81663
+ }],
81493
81664
  "keychain.deleteDeviceScope": [{
81494
81665
  name: "deviceId",
81495
81666
  form: "single",
@@ -84523,5 +84694,21 @@ DEFAULT_NATIVE_LEASE_SETTINGS.admission;
84523
84694
  String.raw`(?<=^|["'(\s>,\[{])`;
84524
84695
  var MB = 1024 * 1024;
84525
84696
  1024 * MB, 3072 * MB;
84697
+ discriminatedUnion("kind", [object({
84698
+ kind: literal("raw"),
84699
+ timings: array(number().int()),
84700
+ settings: TransmitSettingsSchema.optional()
84701
+ }), object({
84702
+ kind: literal("pronto"),
84703
+ code: string()
84704
+ })]);
84705
+ object({
84706
+ manufacturer: string().optional(),
84707
+ supportedModels: array(string()).optional(),
84708
+ supportedController: string().optional(),
84709
+ commandsEncoding: string(),
84710
+ delay: number().nonnegative().optional(),
84711
+ commands: record(string(), unknown())
84712
+ });
84526
84713
  //#endregion
84527
84714
  export { record as C, object as S, isSecretClear as _, addonPagesSourceCapability as a, boolean as b, trainingProviderCapability as c, SECRET_CLEAR as d, arrayItemFieldPath as f, globalSecretScope as g, entryBody as h, TrainingResultSchema as i, BaseAddon as l, defineRecordKinds as m, TrainingJobSchema as n, parseTrainingEventLine as o, defineEntryKind as p, TrainingJobSpecSchema as r, trainingCapability as s, TRAINING_JOB_SCHEMA as t, RECORD_MAX_DATA_BYTES as u, isSecretMarker as v, string as w, number as x, toSecretFieldView as y };
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.435",
39
+ version: "1.2.438",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.343",
84
+ version: "1.2.346",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,