@camstack/addon-post-analysis 1.2.603 → 1.2.608

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/dist/{clip-model-registry-D0-VNIW5.js → clip-model-registry-B11yS32V.js} +548 -39
  2. package/dist/{clip-model-registry-lQ7QWjLf.mjs → clip-model-registry-BItfTZEx.mjs} +507 -40
  3. package/dist/embedding-encoder/index.js +1 -1
  4. package/dist/embedding-encoder/index.mjs +1 -1
  5. package/dist/pipeline-analytics/_stub.js +2 -2
  6. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-CXNgqP3Y.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-LGLlz5Sk.mjs} +3 -3
  7. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-iXmJsQ9Y.mjs +26 -0
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Cm7pZeMH.mjs +26 -0
  9. package/dist/pipeline-analytics/{hostInit-BMh6UjVP.mjs → hostInit-Cko0y33G.mjs} +3 -3
  10. package/dist/pipeline-analytics/index.js +67507 -67010
  11. package/dist/pipeline-analytics/index.mjs +67117 -66620
  12. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  13. package/package.json +1 -1
  14. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-1AlitJg2.mjs +0 -26
  15. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Cfj8Mv5X.mjs +0 -26
@@ -30,7 +30,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
30
30
  }) : target, mod));
31
31
  //#endregion
32
32
  let node_crypto = require("node:crypto");
33
- //#region ../types/dist/event-category-BvOFi6PY.mjs
33
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
34
34
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
35
35
  EventCategory["SystemBoot"] = "system.boot";
36
36
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -109,9 +109,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
109
109
  /**
110
110
  * The node's one-shot runner boot check (D877): planned runners against the
111
111
  * process service, `degraded` when any is failed, refused or missing. The
112
- * alert centre turns it into one alert and a direct critical push.
112
+ * alert centre turns it into one critical alert.
113
113
  */
114
114
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
115
+ /**
116
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
117
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
118
+ * centre sends no notification of its own: Notification Center turns this
119
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
120
+ * system-event kinds, and reconciles from the alerts store because a bus
121
+ * event may be dropped (D8, D11).
122
+ */
123
+ EventCategory["AlertEpisode"] = "alert.episode";
115
124
  EventCategory["AddonError"] = "addon.error";
116
125
  EventCategory["AddonPageReady"] = "addon.page-ready";
117
126
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5634,7 +5643,7 @@ var ZodIssueCode = {
5634
5643
  var ZodFirstPartyTypeKind;
5635
5644
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5636
5645
  //#endregion
5637
- //#region ../types/dist/sleep-BOjuyoPC.mjs
5646
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5638
5647
  /**
5639
5648
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5640
5649
  * window to float samples (D455).
@@ -12826,6 +12835,41 @@ var StorageCleanupJobSchema = object({
12826
12835
  });
12827
12836
  var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
12828
12837
  /**
12838
+ * Start a mover only when no single-location repoint holds an overlapping
12839
+ * physical root. Asks BEFORE (cheap refusal, no job) and AFTER registering the
12840
+ * job: the repoint announces its claim and then lists movers, so a mover that
12841
+ * registers first is seen by it and one that registers second sees the claim —
12842
+ * neither side can miss the other (2026-10-20: a repoint and a relocate job
12843
+ * moved and deleted the same event media with no lock between them).
12844
+ *
12845
+ * Fail CLOSED: a clearance that cannot be asked refuses the start.
12846
+ */
12847
+ async function startMoverUnderClearance(deps) {
12848
+ const refuse = (detail) => {
12849
+ throw new Error(`mover refused: ${detail}`);
12850
+ };
12851
+ const ask = async () => {
12852
+ try {
12853
+ return await deps.clearance(deps.locationIds);
12854
+ } catch (err) {
12855
+ return refuse(`the storage orchestrator could not be asked (${err instanceof Error ? err.message : String(err)})`);
12856
+ }
12857
+ };
12858
+ const blocked = (answer) => `a re-point of "${answer.repointLocationId ?? "a location"}" holds an overlapping storage root`;
12859
+ const before = await ask();
12860
+ if (!before.clear) return refuse(blocked(before));
12861
+ const jobId = deps.start();
12862
+ const after = await ask().catch((err) => {
12863
+ deps.cancel(jobId);
12864
+ throw err;
12865
+ });
12866
+ if (!after.clear) {
12867
+ deps.cancel(jobId);
12868
+ return refuse(blocked(after));
12869
+ }
12870
+ return jobId;
12871
+ }
12872
+ /**
12829
12873
  * The storage-location STATE MODEL (D385) — one typed state, one policy module.
12830
12874
  *
12831
12875
  * A location's state used to be split across two authorities: the typed
@@ -14669,7 +14713,14 @@ var AlertSeveritySchema = _enum([
14669
14713
  ]);
14670
14714
  var AlertActionSchema = object({
14671
14715
  label: string(),
14672
- href: string().optional()
14716
+ href: string().optional(),
14717
+ /**
14718
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
14719
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
14720
+ * start) — the browser must leave the SPA with a full navigation, because
14721
+ * the SPA has no such route and would bounce to the home page.
14722
+ */
14723
+ navigation: _enum(["app", "server"]).optional()
14673
14724
  });
14674
14725
  var AlertStatusSchema = _enum([
14675
14726
  "active",
@@ -19061,7 +19112,11 @@ var deviceDiscoveryCapability = {
19061
19112
  };
19062
19113
  /**
19063
19114
  * `device-adoption` — generic discovery + adoption surface,
19064
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
19115
+ * system-scoped collection (one provider per integration addon), routed
19116
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
19117
+ * pin model as `connection-test`. The admin UI keeps using
19118
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
19119
+ * successor to `ha-discovery`:
19065
19120
  * keyed by `integrationId` (the addon resolves integrationId → broker
19066
19121
  * internally) rather than a connection-specific `brokerId`, and it
19067
19122
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -43539,6 +43594,9 @@ var NcSystemEventKindSchema = _enum([
43539
43594
  "server-updated",
43540
43595
  "export-completed",
43541
43596
  "backup-completed",
43597
+ "alert-critical",
43598
+ "alert-error",
43599
+ "alert-critical-resolved",
43542
43600
  "camera-online",
43543
43601
  "camera-offline",
43544
43602
  "camera-disabled",
@@ -45104,6 +45162,18 @@ var NC_CONDITION_CATALOG = [
45104
45162
  value: "backup-completed",
45105
45163
  label: "Backup completed"
45106
45164
  },
45165
+ {
45166
+ value: "alert-critical",
45167
+ label: "Critical alert raised"
45168
+ },
45169
+ {
45170
+ value: "alert-error",
45171
+ label: "Error alert raised"
45172
+ },
45173
+ {
45174
+ value: "alert-critical-resolved",
45175
+ label: "Critical alert resolved"
45176
+ },
45107
45177
  {
45108
45178
  value: "alarm-arm-refused",
45109
45179
  label: "Alarm arm refused"
@@ -54407,7 +54477,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
54407
54477
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
54408
54478
  kind: "mutation",
54409
54479
  auth: "admin"
54410
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
54480
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
54481
+ clear: boolean(),
54482
+ repointLocationId: string().optional()
54483
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
54411
54484
  kind: "mutation",
54412
54485
  auth: "admin"
54413
54486
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -58746,6 +58819,11 @@ onStatusChanged: { data: object({
58746
58819
  *
58747
58820
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
58748
58821
  * provider refreshes the slice on an interval and eagerly after commands.
58822
+ *
58823
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
58824
+ * nullable: `null` means "not known right now" (the appliance has not said,
58825
+ * the link is down, or the description does not carry it) and is never
58826
+ * rendered or exported as `false` / `0`. `availability` says why.
58749
58827
  */
58750
58828
  var DishwasherStateSchema = _enum([
58751
58829
  "idle",
@@ -58755,35 +58833,155 @@ var DishwasherStateSchema = _enum([
58755
58833
  "error",
58756
58834
  "unavailable"
58757
58835
  ]);
58836
+ /**
58837
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
58838
+ * view for compact surfaces; this is what the appliance said.
58839
+ */
58840
+ var DishwasherOperationStateSchema = _enum([
58841
+ "Inactive",
58842
+ "Ready",
58843
+ "DelayedStart",
58844
+ "Run",
58845
+ "Pause",
58846
+ "ActionRequired",
58847
+ "Finished",
58848
+ "Error",
58849
+ "Aborting"
58850
+ ]);
58851
+ /**
58852
+ * Why fields may be `null`:
58853
+ * - `available` — the link is up and the description is loaded;
58854
+ * - `offline` — the local link is down (values are unknown, not last-known);
58855
+ * - `description-missing` — the link is up but the appliance's description could not
58856
+ * be loaded, so its values cannot be decoded.
58857
+ */
58858
+ var DishwasherAvailabilitySchema = _enum([
58859
+ "available",
58860
+ "offline",
58861
+ "description-missing"
58862
+ ]);
58758
58863
  var DishwasherConsumableLevelSchema = _enum([
58759
58864
  "ok",
58760
58865
  "low",
58761
58866
  "empty"
58762
58867
  ]);
58763
58868
  var DishwasherStatusSchema = object({
58869
+ availability: DishwasherAvailabilitySchema,
58870
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
58764
58871
  state: DishwasherStateSchema,
58765
- /** Active program id/name, or null when none selected / unknown. */
58872
+ /** The appliance's operation state as reported; null when not known. */
58873
+ operationState: DishwasherOperationStateSchema.nullable(),
58874
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
58766
58875
  program: string().nullable(),
58767
- /** Program tokens the hardware accepts — drives the UI selector. */
58876
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
58877
+ selectedProgram: string().nullable(),
58878
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
58768
58879
  availablePrograms: array(string()),
58769
- /** Minutes remaining on the active cycle, or null when not running. */
58770
- remainingMinutes: number().int().nonnegative().nullable(),
58880
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
58881
+ remainingSeconds: number().int().nonnegative().nullable(),
58882
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
58883
+ delayedStartSeconds: number().int().nonnegative().nullable(),
58771
58884
  /** Cycle completion 0..100, or null when not applicable. */
58772
58885
  progressPercent: number().min(0).max(100).nullable(),
58773
- /** True when the door is reported open. */
58774
- doorOpen: boolean(),
58775
- /** True when remote start is allowed (door closed, power on, etc.). */
58776
- remoteStartAllowed: boolean(),
58777
- /** Main power / switched-on state. */
58778
- powerOn: boolean(),
58886
+ /** True when the door is reported open; null when the door state is not known. */
58887
+ doorOpen: boolean().nullable(),
58888
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
58889
+ doorLocked: boolean().nullable(),
58890
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
58891
+ remoteStartAllowed: boolean().nullable(),
58892
+ /** True when the appliance accepts remote control now; null when not known. */
58893
+ remoteControlActive: boolean().nullable(),
58894
+ /** True while somebody operates the appliance at its panel; null when not reported. */
58895
+ localControlActive: boolean().nullable(),
58896
+ /** Main power / switched-on state; null when not known. */
58897
+ powerOn: boolean().nullable(),
58898
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
58899
+ powerState: string().nullable(),
58779
58900
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
58780
58901
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
58781
- halfLoad: boolean(),
58782
- hygienePlus: boolean(),
58902
+ /** Option states: null when the appliance does not expose the option or has not said. */
58903
+ halfLoad: boolean().nullable(),
58904
+ hygienePlus: boolean().nullable(),
58905
+ /** Extra dry option when the appliance exposes it. */
58906
+ extraDry: boolean().nullable(),
58907
+ /** Intensive zone (lower basket) when the appliance exposes it. */
58908
+ intensiveZone: boolean().nullable(),
58909
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
58910
+ varioSpeedPlus: boolean().nullable(),
58911
+ /** Child lock (controls disabled on the appliance); null when not known. */
58912
+ childLock: boolean().nullable(),
58913
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
58914
+ activeEvents: array(string()),
58915
+ /** Numeric error code when the appliance reports one; null otherwise. */
58783
58916
  errorCode: number().nullable(),
58917
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
58784
58918
  errorLabel: string().nullable(),
58919
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
58785
58920
  lastFetchedAt: number()
58786
58921
  });
58922
+ var DeviceIdSchema = number().int().nonnegative();
58923
+ /** A value a program option or setting can take. */
58924
+ var DishwasherValueSchema = union([
58925
+ boolean(),
58926
+ string(),
58927
+ number()
58928
+ ]);
58929
+ var DishwasherAccessSchema = _enum([
58930
+ "none",
58931
+ "read",
58932
+ "readWrite",
58933
+ "writeOnly",
58934
+ "readStatic"
58935
+ ]);
58936
+ /**
58937
+ * One option or setting the appliance declares, with the constraints its description
58938
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
58939
+ */
58940
+ var DishwasherOptionDescriptorSchema = object({
58941
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
58942
+ key: string(),
58943
+ /** Last segment of the key, for display. */
58944
+ name: string(),
58945
+ type: _enum([
58946
+ "boolean",
58947
+ "number",
58948
+ "enum",
58949
+ "string"
58950
+ ]),
58951
+ access: DishwasherAccessSchema,
58952
+ /** The appliance reports this entity as currently available. */
58953
+ available: boolean(),
58954
+ /** Unit the description declares for a number; null when it declares none. */
58955
+ unit: string().nullable(),
58956
+ min: number().nullable(),
58957
+ max: number().nullable(),
58958
+ step: number().nullable(),
58959
+ /** Allowed members of an enum; null for other types. */
58960
+ enumValues: array(string()).nullable(),
58961
+ defaultValue: DishwasherValueSchema.nullable()
58962
+ });
58963
+ var DishwasherProgramSchema = object({
58964
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
58965
+ key: string(),
58966
+ name: string(),
58967
+ /** The appliance currently offers this program. */
58968
+ available: boolean(),
58969
+ /** The options this program lists, with the program-level access / availability / default. */
58970
+ options: array(DishwasherOptionDescriptorSchema)
58971
+ });
58972
+ var DishwasherOptionsSchema = object({
58973
+ availability: DishwasherAvailabilitySchema,
58974
+ /** What the appliance can be told to do, from the commands its description declares. */
58975
+ supportsStart: boolean(),
58976
+ supportsPause: boolean(),
58977
+ supportsResume: boolean(),
58978
+ supportsStop: boolean(),
58979
+ supportsPower: boolean(),
58980
+ /** Every program the description lists, with its options. */
58981
+ programs: array(DishwasherProgramSchema),
58982
+ /** Every option and setting entity the description lists (programs reference these by key). */
58983
+ options: array(DishwasherOptionDescriptorSchema)
58984
+ });
58787
58985
  var dishwasherCapability = {
58788
58986
  name: "dishwasher",
58789
58987
  scope: "device",
@@ -58791,58 +58989,102 @@ var dishwasherCapability = {
58791
58989
  mode: "singleton",
58792
58990
  deviceTypes: [DeviceType.Dishwasher],
58793
58991
  methods: {
58794
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
58992
+ /**
58993
+ * Start a program. Without `program` the selected one starts. `options` are
58994
+ * option feature keys; each is checked against the program's constraints.
58995
+ */
58996
+ start: method(object({
58997
+ deviceId: DeviceIdSchema,
58998
+ program: string().min(1).optional(),
58999
+ options: record(string(), DishwasherValueSchema).optional()
59000
+ }), _void(), {
58795
59001
  kind: "mutation",
58796
59002
  auth: "protected"
58797
59003
  }),
58798
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
59004
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
58799
59005
  kind: "mutation",
58800
59006
  auth: "protected"
58801
59007
  }),
58802
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
59008
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
58803
59009
  kind: "mutation",
58804
59010
  auth: "protected"
58805
59011
  }),
59012
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
59013
+ kind: "mutation",
59014
+ auth: "protected"
59015
+ }),
59016
+ /** Select (not start) a program; refused when the appliance does not offer it. */
58806
59017
  setProgram: method(object({
58807
- deviceId: number().int().nonnegative(),
59018
+ deviceId: DeviceIdSchema,
58808
59019
  program: string().min(1)
58809
59020
  }), _void(), {
58810
59021
  kind: "mutation",
58811
59022
  auth: "protected"
58812
59023
  }),
58813
59024
  setPower: method(object({
58814
- deviceId: number().int().nonnegative(),
59025
+ deviceId: DeviceIdSchema,
58815
59026
  on: boolean()
58816
59027
  }), _void(), {
58817
59028
  kind: "mutation",
58818
59029
  auth: "protected"
58819
59030
  }),
58820
59031
  setHalfLoad: method(object({
58821
- deviceId: number().int().nonnegative(),
59032
+ deviceId: DeviceIdSchema,
58822
59033
  on: boolean()
58823
59034
  }), _void(), {
58824
59035
  kind: "mutation",
58825
59036
  auth: "protected"
58826
59037
  }),
58827
59038
  setHygienePlus: method(object({
58828
- deviceId: number().int().nonnegative(),
59039
+ deviceId: DeviceIdSchema,
59040
+ on: boolean()
59041
+ }), _void(), {
59042
+ kind: "mutation",
59043
+ auth: "protected"
59044
+ }),
59045
+ setExtraDry: method(object({
59046
+ deviceId: DeviceIdSchema,
58829
59047
  on: boolean()
58830
59048
  }), _void(), {
58831
59049
  kind: "mutation",
58832
59050
  auth: "protected"
58833
59051
  }),
59052
+ setIntensiveZone: method(object({
59053
+ deviceId: DeviceIdSchema,
59054
+ on: boolean()
59055
+ }), _void(), {
59056
+ kind: "mutation",
59057
+ auth: "protected"
59058
+ }),
59059
+ setVarioSpeedPlus: method(object({
59060
+ deviceId: DeviceIdSchema,
59061
+ on: boolean()
59062
+ }), _void(), {
59063
+ kind: "mutation",
59064
+ auth: "protected"
59065
+ }),
59066
+ setChildLock: method(object({
59067
+ deviceId: DeviceIdSchema,
59068
+ on: boolean()
59069
+ }), _void(), {
59070
+ kind: "mutation",
59071
+ auth: "protected"
59072
+ }),
59073
+ /**
59074
+ * Write any option or setting by feature key. Refused when the description does
59075
+ * not list it, it is not writable or not available now, or the value is outside
59076
+ * its declared range / members.
59077
+ */
58834
59078
  setOption: method(object({
58835
- deviceId: number().int().nonnegative(),
59079
+ deviceId: DeviceIdSchema,
58836
59080
  key: string().min(1),
58837
- value: union([
58838
- boolean(),
58839
- string(),
58840
- number()
58841
- ])
59081
+ value: DishwasherValueSchema
58842
59082
  }), _void(), {
58843
59083
  kind: "mutation",
58844
59084
  auth: "protected"
58845
- })
59085
+ }),
59086
+ /** What this appliance can do, from its own description — the UI is derived from it. */
59087
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
58846
59088
  },
58847
59089
  status: {
58848
59090
  schema: DishwasherStatusSchema,
@@ -72530,6 +72772,12 @@ Object.freeze({
72530
72772
  addonId: null,
72531
72773
  access: "view"
72532
72774
  },
72775
+ "dishwasher.getOptions": {
72776
+ capName: "dishwasher",
72777
+ capScope: "device",
72778
+ addonId: null,
72779
+ access: "view"
72780
+ },
72533
72781
  "dishwasher.getStatus": {
72534
72782
  capName: "dishwasher",
72535
72783
  capScope: "device",
@@ -72542,6 +72790,24 @@ Object.freeze({
72542
72790
  addonId: null,
72543
72791
  access: "create"
72544
72792
  },
72793
+ "dishwasher.resume": {
72794
+ capName: "dishwasher",
72795
+ capScope: "device",
72796
+ addonId: null,
72797
+ access: "create"
72798
+ },
72799
+ "dishwasher.setChildLock": {
72800
+ capName: "dishwasher",
72801
+ capScope: "device",
72802
+ addonId: null,
72803
+ access: "create"
72804
+ },
72805
+ "dishwasher.setExtraDry": {
72806
+ capName: "dishwasher",
72807
+ capScope: "device",
72808
+ addonId: null,
72809
+ access: "create"
72810
+ },
72545
72811
  "dishwasher.setHalfLoad": {
72546
72812
  capName: "dishwasher",
72547
72813
  capScope: "device",
@@ -72554,6 +72820,12 @@ Object.freeze({
72554
72820
  addonId: null,
72555
72821
  access: "create"
72556
72822
  },
72823
+ "dishwasher.setIntensiveZone": {
72824
+ capName: "dishwasher",
72825
+ capScope: "device",
72826
+ addonId: null,
72827
+ access: "create"
72828
+ },
72557
72829
  "dishwasher.setOption": {
72558
72830
  capName: "dishwasher",
72559
72831
  capScope: "device",
@@ -72572,6 +72844,12 @@ Object.freeze({
72572
72844
  addonId: null,
72573
72845
  access: "create"
72574
72846
  },
72847
+ "dishwasher.setVarioSpeedPlus": {
72848
+ capName: "dishwasher",
72849
+ capScope: "device",
72850
+ addonId: null,
72851
+ access: "create"
72852
+ },
72575
72853
  "dishwasher.start": {
72576
72854
  capName: "dishwasher",
72577
72855
  capScope: "device",
@@ -77018,6 +77296,12 @@ Object.freeze({
77018
77296
  addonId: null,
77019
77297
  access: "view"
77020
77298
  },
77299
+ "storageMigration.moverClearance": {
77300
+ capName: "storage-migration",
77301
+ capScope: "system",
77302
+ addonId: null,
77303
+ access: "view"
77304
+ },
77021
77305
  "storageMigration.movers": {
77022
77306
  capName: "storage-migration",
77023
77307
  capScope: "system",
@@ -79211,6 +79495,11 @@ Object.freeze({
79211
79495
  form: "single",
79212
79496
  optional: false
79213
79497
  }],
79498
+ "dishwasher.getOptions": [{
79499
+ name: "deviceId",
79500
+ form: "single",
79501
+ optional: false
79502
+ }],
79214
79503
  "dishwasher.getStatus": [{
79215
79504
  name: "deviceId",
79216
79505
  form: "single",
@@ -79221,6 +79510,21 @@ Object.freeze({
79221
79510
  form: "single",
79222
79511
  optional: false
79223
79512
  }],
79513
+ "dishwasher.resume": [{
79514
+ name: "deviceId",
79515
+ form: "single",
79516
+ optional: false
79517
+ }],
79518
+ "dishwasher.setChildLock": [{
79519
+ name: "deviceId",
79520
+ form: "single",
79521
+ optional: false
79522
+ }],
79523
+ "dishwasher.setExtraDry": [{
79524
+ name: "deviceId",
79525
+ form: "single",
79526
+ optional: false
79527
+ }],
79224
79528
  "dishwasher.setHalfLoad": [{
79225
79529
  name: "deviceId",
79226
79530
  form: "single",
@@ -79231,6 +79535,11 @@ Object.freeze({
79231
79535
  form: "single",
79232
79536
  optional: false
79233
79537
  }],
79538
+ "dishwasher.setIntensiveZone": [{
79539
+ name: "deviceId",
79540
+ form: "single",
79541
+ optional: false
79542
+ }],
79234
79543
  "dishwasher.setOption": [{
79235
79544
  name: "deviceId",
79236
79545
  form: "single",
@@ -79246,6 +79555,11 @@ Object.freeze({
79246
79555
  form: "single",
79247
79556
  optional: false
79248
79557
  }],
79558
+ "dishwasher.setVarioSpeedPlus": [{
79559
+ name: "deviceId",
79560
+ form: "single",
79561
+ optional: false
79562
+ }],
79249
79563
  "dishwasher.start": [{
79250
79564
  name: "deviceId",
79251
79565
  form: "single",
@@ -81398,7 +81712,7 @@ function systemEventFilterApplies(kind, filter) {
81398
81712
  switch (filter) {
81399
81713
  case "deviceIds": return kind.startsWith("device-") || kind.startsWith("stream-") || kind === "detection-blind" || kind.startsWith("recording-") || kind === "alarm-triggered";
81400
81714
  case "deviceTypes": return kind.startsWith("device-") || kind === "detection-blind";
81401
- case "nodeIds": return kind.startsWith("node-") || kind === "addon-crash-loop" || kind === "addon-update-available" || kind === "addon-updated" || kind === "server-update-available" || kind === "wrapper-update-available" || kind === "server-updated" || kind.startsWith("storage-location-");
81715
+ case "nodeIds": return kind.startsWith("node-") || kind === "addon-crash-loop" || kind === "addon-update-available" || kind === "addon-updated" || kind === "server-update-available" || kind === "wrapper-update-available" || kind === "server-updated" || kind.startsWith("storage-location-") || kind.startsWith("alert-");
81402
81716
  case "packageNames": return kind.endsWith("update-available") || kind === "addon-updated" || kind === "node-updating" || kind === "server-updated";
81403
81717
  case "consumableLowPercent": return NC_CONSUMABLE_SYSTEM_EVENT_KINDS.includes(kind);
81404
81718
  }
@@ -81458,6 +81772,9 @@ var NC_SYSTEM_EVENT_FAMILY = {
81458
81772
  "wrapper-update-available": "system",
81459
81773
  "backup-completed": "system",
81460
81774
  "export-completed": "system",
81775
+ "alert-critical": "system",
81776
+ "alert-error": "system",
81777
+ "alert-critical-resolved": "system",
81461
81778
  "storage-location-low": "system",
81462
81779
  "storage-location-critical": "system",
81463
81780
  "storage-location-ok": "system",
@@ -81600,6 +81917,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
81600
81917
  "storage-location-ok"
81601
81918
  ]
81602
81919
  },
81920
+ {
81921
+ id: "alerts",
81922
+ family: "system",
81923
+ label: "Alerts",
81924
+ kinds: [
81925
+ "alert-critical",
81926
+ "alert-error",
81927
+ "alert-critical-resolved"
81928
+ ]
81929
+ },
81603
81930
  {
81604
81931
  id: "alarm",
81605
81932
  family: "alarm",
@@ -82411,6 +82738,96 @@ function sensorRaisedOf(kind, value) {
82411
82738
  const raw = Object.entries(value).find(([key]) => key === field)?.[1];
82412
82739
  return typeof raw === "boolean" ? raw : void 0;
82413
82740
  }
82741
+ /**
82742
+ * An alert EPISODE as a notification subject.
82743
+ *
82744
+ * The alert centre sends nothing of its own. A critical or error alert reaches
82745
+ * the operator through Notification Center system-event rules, and this file is
82746
+ * the one vocabulary the two sides share: the alert centre mints the episode
82747
+ * identity and announces its two edges on the bus (`alert.episode`), and
82748
+ * Notification Center derives the same identity when it RECONCILES from the
82749
+ * alerts store, because a bus event may be dropped (D8, D11).
82750
+ *
82751
+ * ## Episode identity
82752
+ *
82753
+ * `metadata.episodeId`, minted by the alert centre when an alert opens (new, or
82754
+ * re-opened after it was completed/dismissed, or its emitter changed
82755
+ * `metadata.episodeKey`) and kept through every re-emit while it stays open. An
82756
+ * alert row written before the alert centre minted ids has none: its episode is
82757
+ * `<id>@<createdAt>`, derived here so both sides agree.
82758
+ */
82759
+ /** The bus payload of `EventCategory.AlertEpisode`. */
82760
+ var AlertEpisodePayloadSchema = object({
82761
+ phase: _enum(["raised", "resolved"]),
82762
+ episodeId: string().min(1),
82763
+ alertId: string().min(1),
82764
+ severity: AlertSeveritySchema,
82765
+ category: string(),
82766
+ title: string(),
82767
+ message: string(),
82768
+ sourceType: string().optional(),
82769
+ sourceId: string().optional(),
82770
+ nodeId: string().optional(),
82771
+ /** The alert's own action link (where the operator acts on it), when it has one. */
82772
+ actionUrl: string().optional(),
82773
+ at: number()
82774
+ });
82775
+ /** The payload of an `alert.episode` event's `data`, or `null` when it is not one. */
82776
+ function parseAlertEpisodePayload(data) {
82777
+ const parsed = AlertEpisodePayloadSchema.safeParse(data);
82778
+ return parsed.success ? parsed.data : null;
82779
+ }
82780
+ /** An episode is closed once its alert is completed or dismissed. */
82781
+ function isAlertEpisodeOpen(status) {
82782
+ return status !== "completed" && status !== "dismissed";
82783
+ }
82784
+ /** Only these severities are ever announced. */
82785
+ function isAlertEpisodeSeverity(severity) {
82786
+ return severity === "critical" || severity === "error";
82787
+ }
82788
+ function alertEpisodeId(alert) {
82789
+ const minted = alert.metadata?.["episodeId"];
82790
+ return typeof minted === "string" && minted.length > 0 ? minted : `${alert.id}@${String(alert.createdAt)}`;
82791
+ }
82792
+ /** The node an alert is about, from the places emitters put it. */
82793
+ function alertNodeId(alert) {
82794
+ const direct = alert.metadata?.["nodeId"];
82795
+ if (typeof direct === "string") return direct;
82796
+ const runner = alert.metadata?.["runner"];
82797
+ if (typeof runner === "object" && runner !== null && "nodeId" in runner) {
82798
+ const id = runner.nodeId;
82799
+ if (typeof id === "string") return id;
82800
+ }
82801
+ return alert.source?.type === "node" ? alert.source.id : void 0;
82802
+ }
82803
+ /**
82804
+ * The system-event kind of an episode edge, or `null` when none is announced
82805
+ * (an `error` episode announces its opening only).
82806
+ */
82807
+ function alertEpisodeKind(severity, phase) {
82808
+ if (severity === "critical") return phase === "raised" ? "alert-critical" : "alert-critical-resolved";
82809
+ if (severity === "error" && phase === "raised") return "alert-error";
82810
+ return null;
82811
+ }
82812
+ function alertEpisodePayload(alert, phase, at) {
82813
+ const nodeId = alertNodeId(alert);
82814
+ return {
82815
+ phase,
82816
+ episodeId: alertEpisodeId(alert),
82817
+ alertId: alert.id,
82818
+ severity: alert.severity,
82819
+ category: alert.category,
82820
+ title: alert.title,
82821
+ message: alert.message,
82822
+ ...alert.source !== void 0 ? {
82823
+ sourceType: alert.source.type,
82824
+ sourceId: alert.source.id
82825
+ } : {},
82826
+ ...nodeId !== void 0 ? { nodeId } : {},
82827
+ ...alert.action?.href !== void 0 ? { actionUrl: alert.action.href } : {},
82828
+ at
82829
+ };
82830
+ }
82414
82831
  var RULE_BODY_ONLY = ["body"];
82415
82832
  var RULE_TEXT = ["title", "body"];
82416
82833
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -82420,6 +82837,11 @@ var TANK = [
82420
82837
  "device-tank-full",
82421
82838
  "device-tank-normal"
82422
82839
  ];
82840
+ var ALERT_EPISODE = [
82841
+ "alert-critical",
82842
+ "alert-error",
82843
+ "alert-critical-resolved"
82844
+ ];
82423
82845
  var UPDATES = [
82424
82846
  "addon-update-available",
82425
82847
  "server-update-available",
@@ -82944,7 +83366,8 @@ var NC_TEMPLATE_VARS = [
82944
83366
  "server-updated",
82945
83367
  "storage-location-low",
82946
83368
  "storage-location-critical",
82947
- "storage-location-ok"
83369
+ "storage-location-ok",
83370
+ ...ALERT_EPISODE
82948
83371
  ]
82949
83372
  },
82950
83373
  {
@@ -82966,7 +83389,8 @@ var NC_TEMPLATE_VARS = [
82966
83389
  "server-updated",
82967
83390
  "storage-location-low",
82968
83391
  "storage-location-critical",
82969
- "storage-location-ok"
83392
+ "storage-location-ok",
83393
+ ...ALERT_EPISODE
82970
83394
  ]
82971
83395
  },
82972
83396
  {
@@ -83033,7 +83457,7 @@ var NC_TEMPLATE_VARS = [
83033
83457
  families: ["rule"],
83034
83458
  fields: [...RULE_TEXT],
83035
83459
  kinds: ["system"],
83036
- systemEventKinds: ["recording-degraded"]
83460
+ systemEventKinds: ["recording-degraded", ...ALERT_EPISODE]
83037
83461
  },
83038
83462
  {
83039
83463
  name: "locationName",
@@ -83230,13 +83654,53 @@ var NC_TEMPLATE_VARS = [
83230
83654
  },
83231
83655
  {
83232
83656
  name: "title",
83233
- label: "Export title",
83657
+ label: "Export or alert title",
83234
83658
  example: "Ingresso 08:00",
83235
83659
  group: "system",
83236
83660
  families: ["rule"],
83237
83661
  fields: [...RULE_TEXT],
83238
83662
  kinds: ["system"],
83239
- systemEventKinds: ["export-completed"]
83663
+ systemEventKinds: ["export-completed", ...ALERT_EPISODE]
83664
+ },
83665
+ {
83666
+ name: "severity",
83667
+ label: "Alert severity",
83668
+ example: "critical",
83669
+ group: "system",
83670
+ families: ["rule"],
83671
+ fields: [...RULE_TEXT],
83672
+ kinds: ["system"],
83673
+ systemEventKinds: [...ALERT_EPISODE]
83674
+ },
83675
+ {
83676
+ name: "category",
83677
+ label: "Alert category",
83678
+ example: "addon.runner-failed",
83679
+ group: "system",
83680
+ families: ["rule"],
83681
+ fields: [...RULE_TEXT],
83682
+ kinds: ["system"],
83683
+ systemEventKinds: [...ALERT_EPISODE]
83684
+ },
83685
+ {
83686
+ name: "source",
83687
+ label: "Alert source (addon, node or runner)",
83688
+ example: "recorder",
83689
+ group: "system",
83690
+ families: ["rule"],
83691
+ fields: [...RULE_TEXT],
83692
+ kinds: ["system"],
83693
+ systemEventKinds: [...ALERT_EPISODE]
83694
+ },
83695
+ {
83696
+ name: "actionUrl",
83697
+ label: "Alert action link",
83698
+ example: "/system/addons",
83699
+ group: "system",
83700
+ families: ["rule"],
83701
+ fields: [...RULE_TEXT],
83702
+ kinds: ["system"],
83703
+ systemEventKinds: [...ALERT_EPISODE]
83240
83704
  },
83241
83705
  {
83242
83706
  name: "exportId",
@@ -83447,7 +83911,10 @@ var NC_TEMPLATE_HELD_BACK_SYSTEM_EVENT_KINDS = [
83447
83911
  "device-tank-full",
83448
83912
  "device-tank-normal",
83449
83913
  "node-restarting",
83450
- "node-updating"
83914
+ "node-updating",
83915
+ "alert-critical",
83916
+ "alert-error",
83917
+ "alert-critical-resolved"
83451
83918
  ];
83452
83919
  /**
83453
83920
  * The catalog as `getTemplateCatalog` SERVES it: every descriptor, with the
@@ -86247,6 +86714,24 @@ Object.defineProperty(exports, "alarmPanelCapability", {
86247
86714
  return alarmPanelCapability;
86248
86715
  }
86249
86716
  });
86717
+ Object.defineProperty(exports, "alertEpisodeId", {
86718
+ enumerable: true,
86719
+ get: function() {
86720
+ return alertEpisodeId;
86721
+ }
86722
+ });
86723
+ Object.defineProperty(exports, "alertEpisodeKind", {
86724
+ enumerable: true,
86725
+ get: function() {
86726
+ return alertEpisodeKind;
86727
+ }
86728
+ });
86729
+ Object.defineProperty(exports, "alertEpisodePayload", {
86730
+ enumerable: true,
86731
+ get: function() {
86732
+ return alertEpisodePayload;
86733
+ }
86734
+ });
86250
86735
  Object.defineProperty(exports, "applyBlockingEdit", {
86251
86736
  enumerable: true,
86252
86737
  get: function() {
@@ -86541,6 +87026,18 @@ Object.defineProperty(exports, "isAlarmControllableCap", {
86541
87026
  return isAlarmControllableCap;
86542
87027
  }
86543
87028
  });
87029
+ Object.defineProperty(exports, "isAlertEpisodeOpen", {
87030
+ enumerable: true,
87031
+ get: function() {
87032
+ return isAlertEpisodeOpen;
87033
+ }
87034
+ });
87035
+ Object.defineProperty(exports, "isAlertEpisodeSeverity", {
87036
+ enumerable: true,
87037
+ get: function() {
87038
+ return isAlertEpisodeSeverity;
87039
+ }
87040
+ });
86544
87041
  Object.defineProperty(exports, "isAppLinkBase", {
86545
87042
  enumerable: true,
86546
87043
  get: function() {
@@ -86715,6 +87212,12 @@ Object.defineProperty(exports, "occupancyScope", {
86715
87212
  return occupancyScope;
86716
87213
  }
86717
87214
  });
87215
+ Object.defineProperty(exports, "parseAlertEpisodePayload", {
87216
+ enumerable: true,
87217
+ get: function() {
87218
+ return parseAlertEpisodePayload;
87219
+ }
87220
+ });
86718
87221
  Object.defineProperty(exports, "parseProcStatus", {
86719
87222
  enumerable: true,
86720
87223
  get: function() {
@@ -86889,6 +87392,12 @@ Object.defineProperty(exports, "sleep", {
86889
87392
  return sleep;
86890
87393
  }
86891
87394
  });
87395
+ Object.defineProperty(exports, "startMoverUnderClearance", {
87396
+ enumerable: true,
87397
+ get: function() {
87398
+ return startMoverUnderClearance;
87399
+ }
87400
+ });
86892
87401
  Object.defineProperty(exports, "storageOccupancyCapability", {
86893
87402
  enumerable: true,
86894
87403
  get: function() {