@camstack/addon-pipeline-orchestrator 1.2.602 → 1.2.604

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.
package/dist/index.mjs CHANGED
@@ -2,7 +2,7 @@ import { createHash, randomUUID } from "node:crypto";
2
2
  import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
- //#region ../types/dist/event-category-BvOFi6PY.mjs
5
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
6
6
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
7
7
  EventCategory["SystemBoot"] = "system.boot";
8
8
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -81,9 +81,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
81
81
  /**
82
82
  * The node's one-shot runner boot check (D877): planned runners against the
83
83
  * process service, `degraded` when any is failed, refused or missing. The
84
- * alert centre turns it into one alert and a direct critical push.
84
+ * alert centre turns it into one critical alert.
85
85
  */
86
86
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
87
+ /**
88
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
89
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
90
+ * centre sends no notification of its own: Notification Center turns this
91
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
92
+ * system-event kinds, and reconciles from the alerts store because a bus
93
+ * event may be dropped (D8, D11).
94
+ */
95
+ EventCategory["AlertEpisode"] = "alert.episode";
87
96
  EventCategory["AddonError"] = "addon.error";
88
97
  EventCategory["AddonPageReady"] = "addon.page-ready";
89
98
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5541,7 +5550,7 @@ var ZodIssueCode = {
5541
5550
  var ZodFirstPartyTypeKind;
5542
5551
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5543
5552
  //#endregion
5544
- //#region ../types/dist/sleep-BOjuyoPC.mjs
5553
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5545
5554
  /**
5546
5555
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5547
5556
  * window to float samples (D455).
@@ -14523,7 +14532,14 @@ var AlertSeveritySchema = _enum([
14523
14532
  ]);
14524
14533
  var AlertActionSchema = object({
14525
14534
  label: string(),
14526
- href: string().optional()
14535
+ href: string().optional(),
14536
+ /**
14537
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
14538
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
14539
+ * start) — the browser must leave the SPA with a full navigation, because
14540
+ * the SPA has no such route and would bounce to the home page.
14541
+ */
14542
+ navigation: _enum(["app", "server"]).optional()
14527
14543
  });
14528
14544
  var AlertStatusSchema = _enum([
14529
14545
  "active",
@@ -18725,7 +18741,11 @@ DeviceType.Hub, DeviceDiscoveryStatusSchema.extend({ lastFetchedAt: number().int
18725
18741
  });
18726
18742
  /**
18727
18743
  * `device-adoption` — generic discovery + adoption surface,
18728
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
18744
+ * system-scoped collection (one provider per integration addon), routed
18745
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
18746
+ * pin model as `connection-test`. The admin UI keeps using
18747
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
18748
+ * successor to `ha-discovery`:
18729
18749
  * keyed by `integrationId` (the addon resolves integrationId → broker
18730
18750
  * internally) rather than a connection-specific `brokerId`, and it
18731
18751
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -42933,6 +42953,9 @@ var NcSystemEventKindSchema = _enum([
42933
42953
  "server-updated",
42934
42954
  "export-completed",
42935
42955
  "backup-completed",
42956
+ "alert-critical",
42957
+ "alert-error",
42958
+ "alert-critical-resolved",
42936
42959
  "camera-online",
42937
42960
  "camera-offline",
42938
42961
  "camera-disabled",
@@ -52915,7 +52938,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
52915
52938
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
52916
52939
  kind: "mutation",
52917
52940
  auth: "admin"
52918
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
52941
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
52942
+ clear: boolean(),
52943
+ repointLocationId: string().optional()
52944
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
52919
52945
  kind: "mutation",
52920
52946
  auth: "admin"
52921
52947
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -56350,6 +56376,11 @@ object({
56350
56376
  *
56351
56377
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
56352
56378
  * provider refreshes the slice on an interval and eagerly after commands.
56379
+ *
56380
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
56381
+ * nullable: `null` means "not known right now" (the appliance has not said,
56382
+ * the link is down, or the description does not carry it) and is never
56383
+ * rendered or exported as `false` / `0`. `availability` says why.
56353
56384
  */
56354
56385
  var DishwasherStateSchema = _enum([
56355
56386
  "idle",
@@ -56359,80 +56390,227 @@ var DishwasherStateSchema = _enum([
56359
56390
  "error",
56360
56391
  "unavailable"
56361
56392
  ]);
56393
+ /**
56394
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
56395
+ * view for compact surfaces; this is what the appliance said.
56396
+ */
56397
+ var DishwasherOperationStateSchema = _enum([
56398
+ "Inactive",
56399
+ "Ready",
56400
+ "DelayedStart",
56401
+ "Run",
56402
+ "Pause",
56403
+ "ActionRequired",
56404
+ "Finished",
56405
+ "Error",
56406
+ "Aborting"
56407
+ ]);
56408
+ /**
56409
+ * Why fields may be `null`:
56410
+ * - `available` — the link is up and the description is loaded;
56411
+ * - `offline` — the local link is down (values are unknown, not last-known);
56412
+ * - `description-missing` — the link is up but the appliance's description could not
56413
+ * be loaded, so its values cannot be decoded.
56414
+ */
56415
+ var DishwasherAvailabilitySchema = _enum([
56416
+ "available",
56417
+ "offline",
56418
+ "description-missing"
56419
+ ]);
56362
56420
  var DishwasherConsumableLevelSchema = _enum([
56363
56421
  "ok",
56364
56422
  "low",
56365
56423
  "empty"
56366
56424
  ]);
56367
56425
  object({
56426
+ availability: DishwasherAvailabilitySchema,
56427
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
56368
56428
  state: DishwasherStateSchema,
56369
- /** Active program id/name, or null when none selected / unknown. */
56429
+ /** The appliance's operation state as reported; null when not known. */
56430
+ operationState: DishwasherOperationStateSchema.nullable(),
56431
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
56370
56432
  program: string().nullable(),
56371
- /** Program tokens the hardware accepts — drives the UI selector. */
56433
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
56434
+ selectedProgram: string().nullable(),
56435
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
56372
56436
  availablePrograms: array(string()),
56373
- /** Minutes remaining on the active cycle, or null when not running. */
56374
- remainingMinutes: number().int().nonnegative().nullable(),
56437
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
56438
+ remainingSeconds: number().int().nonnegative().nullable(),
56439
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
56440
+ delayedStartSeconds: number().int().nonnegative().nullable(),
56375
56441
  /** Cycle completion 0..100, or null when not applicable. */
56376
56442
  progressPercent: number().min(0).max(100).nullable(),
56377
- /** True when the door is reported open. */
56378
- doorOpen: boolean(),
56379
- /** True when remote start is allowed (door closed, power on, etc.). */
56380
- remoteStartAllowed: boolean(),
56381
- /** Main power / switched-on state. */
56382
- powerOn: boolean(),
56443
+ /** True when the door is reported open; null when the door state is not known. */
56444
+ doorOpen: boolean().nullable(),
56445
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
56446
+ doorLocked: boolean().nullable(),
56447
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
56448
+ remoteStartAllowed: boolean().nullable(),
56449
+ /** True when the appliance accepts remote control now; null when not known. */
56450
+ remoteControlActive: boolean().nullable(),
56451
+ /** True while somebody operates the appliance at its panel; null when not reported. */
56452
+ localControlActive: boolean().nullable(),
56453
+ /** Main power / switched-on state; null when not known. */
56454
+ powerOn: boolean().nullable(),
56455
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
56456
+ powerState: string().nullable(),
56383
56457
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
56384
56458
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
56385
- halfLoad: boolean(),
56386
- hygienePlus: boolean(),
56459
+ /** Option states: null when the appliance does not expose the option or has not said. */
56460
+ halfLoad: boolean().nullable(),
56461
+ hygienePlus: boolean().nullable(),
56462
+ /** Extra dry option when the appliance exposes it. */
56463
+ extraDry: boolean().nullable(),
56464
+ /** Intensive zone (lower basket) when the appliance exposes it. */
56465
+ intensiveZone: boolean().nullable(),
56466
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
56467
+ varioSpeedPlus: boolean().nullable(),
56468
+ /** Child lock (controls disabled on the appliance); null when not known. */
56469
+ childLock: boolean().nullable(),
56470
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
56471
+ activeEvents: array(string()),
56472
+ /** Numeric error code when the appliance reports one; null otherwise. */
56387
56473
  errorCode: number().nullable(),
56474
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
56388
56475
  errorLabel: string().nullable(),
56476
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
56389
56477
  lastFetchedAt: number()
56390
56478
  });
56391
- DeviceType.Dishwasher, method(object({ deviceId: number().int().nonnegative() }), _void(), {
56479
+ var DeviceIdSchema = number().int().nonnegative();
56480
+ /** A value a program option or setting can take. */
56481
+ var DishwasherValueSchema = union([
56482
+ boolean(),
56483
+ string(),
56484
+ number()
56485
+ ]);
56486
+ var DishwasherAccessSchema = _enum([
56487
+ "none",
56488
+ "read",
56489
+ "readWrite",
56490
+ "writeOnly",
56491
+ "readStatic"
56492
+ ]);
56493
+ /**
56494
+ * One option or setting the appliance declares, with the constraints its description
56495
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
56496
+ */
56497
+ var DishwasherOptionDescriptorSchema = object({
56498
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
56499
+ key: string(),
56500
+ /** Last segment of the key, for display. */
56501
+ name: string(),
56502
+ type: _enum([
56503
+ "boolean",
56504
+ "number",
56505
+ "enum",
56506
+ "string"
56507
+ ]),
56508
+ access: DishwasherAccessSchema,
56509
+ /** The appliance reports this entity as currently available. */
56510
+ available: boolean(),
56511
+ /** Unit the description declares for a number; null when it declares none. */
56512
+ unit: string().nullable(),
56513
+ min: number().nullable(),
56514
+ max: number().nullable(),
56515
+ step: number().nullable(),
56516
+ /** Allowed members of an enum; null for other types. */
56517
+ enumValues: array(string()).nullable(),
56518
+ defaultValue: DishwasherValueSchema.nullable()
56519
+ });
56520
+ var DishwasherProgramSchema = object({
56521
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
56522
+ key: string(),
56523
+ name: string(),
56524
+ /** The appliance currently offers this program. */
56525
+ available: boolean(),
56526
+ /** The options this program lists, with the program-level access / availability / default. */
56527
+ options: array(DishwasherOptionDescriptorSchema)
56528
+ });
56529
+ var DishwasherOptionsSchema = object({
56530
+ availability: DishwasherAvailabilitySchema,
56531
+ /** What the appliance can be told to do, from the commands its description declares. */
56532
+ supportsStart: boolean(),
56533
+ supportsPause: boolean(),
56534
+ supportsResume: boolean(),
56535
+ supportsStop: boolean(),
56536
+ supportsPower: boolean(),
56537
+ /** Every program the description lists, with its options. */
56538
+ programs: array(DishwasherProgramSchema),
56539
+ /** Every option and setting entity the description lists (programs reference these by key). */
56540
+ options: array(DishwasherOptionDescriptorSchema)
56541
+ });
56542
+ DeviceType.Dishwasher, method(object({
56543
+ deviceId: DeviceIdSchema,
56544
+ program: string().min(1).optional(),
56545
+ options: record(string(), DishwasherValueSchema).optional()
56546
+ }), _void(), {
56392
56547
  kind: "mutation",
56393
56548
  auth: "protected"
56394
- }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
56549
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
56395
56550
  kind: "mutation",
56396
56551
  auth: "protected"
56397
- }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
56552
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
56553
+ kind: "mutation",
56554
+ auth: "protected"
56555
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
56398
56556
  kind: "mutation",
56399
56557
  auth: "protected"
56400
56558
  }), method(object({
56401
- deviceId: number().int().nonnegative(),
56559
+ deviceId: DeviceIdSchema,
56402
56560
  program: string().min(1)
56403
56561
  }), _void(), {
56404
56562
  kind: "mutation",
56405
56563
  auth: "protected"
56406
56564
  }), method(object({
56407
- deviceId: number().int().nonnegative(),
56565
+ deviceId: DeviceIdSchema,
56408
56566
  on: boolean()
56409
56567
  }), _void(), {
56410
56568
  kind: "mutation",
56411
56569
  auth: "protected"
56412
56570
  }), method(object({
56413
- deviceId: number().int().nonnegative(),
56571
+ deviceId: DeviceIdSchema,
56414
56572
  on: boolean()
56415
56573
  }), _void(), {
56416
56574
  kind: "mutation",
56417
56575
  auth: "protected"
56418
56576
  }), method(object({
56419
- deviceId: number().int().nonnegative(),
56577
+ deviceId: DeviceIdSchema,
56420
56578
  on: boolean()
56421
56579
  }), _void(), {
56422
56580
  kind: "mutation",
56423
56581
  auth: "protected"
56424
56582
  }), method(object({
56425
- deviceId: number().int().nonnegative(),
56583
+ deviceId: DeviceIdSchema,
56584
+ on: boolean()
56585
+ }), _void(), {
56586
+ kind: "mutation",
56587
+ auth: "protected"
56588
+ }), method(object({
56589
+ deviceId: DeviceIdSchema,
56590
+ on: boolean()
56591
+ }), _void(), {
56592
+ kind: "mutation",
56593
+ auth: "protected"
56594
+ }), method(object({
56595
+ deviceId: DeviceIdSchema,
56596
+ on: boolean()
56597
+ }), _void(), {
56598
+ kind: "mutation",
56599
+ auth: "protected"
56600
+ }), method(object({
56601
+ deviceId: DeviceIdSchema,
56602
+ on: boolean()
56603
+ }), _void(), {
56604
+ kind: "mutation",
56605
+ auth: "protected"
56606
+ }), method(object({
56607
+ deviceId: DeviceIdSchema,
56426
56608
  key: string().min(1),
56427
- value: union([
56428
- boolean(),
56429
- string(),
56430
- number()
56431
- ])
56609
+ value: DishwasherValueSchema
56432
56610
  }), _void(), {
56433
56611
  kind: "mutation",
56434
56612
  auth: "protected"
56435
- });
56613
+ }), method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" });
56436
56614
  object({
56437
56615
  /** Ms epoch of the last press. null = never observed since this provider started. */
56438
56616
  lastPressedAt: number().nullable(),
@@ -66611,6 +66789,12 @@ Object.freeze({
66611
66789
  addonId: null,
66612
66790
  access: "view"
66613
66791
  },
66792
+ "dishwasher.getOptions": {
66793
+ capName: "dishwasher",
66794
+ capScope: "device",
66795
+ addonId: null,
66796
+ access: "view"
66797
+ },
66614
66798
  "dishwasher.getStatus": {
66615
66799
  capName: "dishwasher",
66616
66800
  capScope: "device",
@@ -66623,6 +66807,24 @@ Object.freeze({
66623
66807
  addonId: null,
66624
66808
  access: "create"
66625
66809
  },
66810
+ "dishwasher.resume": {
66811
+ capName: "dishwasher",
66812
+ capScope: "device",
66813
+ addonId: null,
66814
+ access: "create"
66815
+ },
66816
+ "dishwasher.setChildLock": {
66817
+ capName: "dishwasher",
66818
+ capScope: "device",
66819
+ addonId: null,
66820
+ access: "create"
66821
+ },
66822
+ "dishwasher.setExtraDry": {
66823
+ capName: "dishwasher",
66824
+ capScope: "device",
66825
+ addonId: null,
66826
+ access: "create"
66827
+ },
66626
66828
  "dishwasher.setHalfLoad": {
66627
66829
  capName: "dishwasher",
66628
66830
  capScope: "device",
@@ -66635,6 +66837,12 @@ Object.freeze({
66635
66837
  addonId: null,
66636
66838
  access: "create"
66637
66839
  },
66840
+ "dishwasher.setIntensiveZone": {
66841
+ capName: "dishwasher",
66842
+ capScope: "device",
66843
+ addonId: null,
66844
+ access: "create"
66845
+ },
66638
66846
  "dishwasher.setOption": {
66639
66847
  capName: "dishwasher",
66640
66848
  capScope: "device",
@@ -66653,6 +66861,12 @@ Object.freeze({
66653
66861
  addonId: null,
66654
66862
  access: "create"
66655
66863
  },
66864
+ "dishwasher.setVarioSpeedPlus": {
66865
+ capName: "dishwasher",
66866
+ capScope: "device",
66867
+ addonId: null,
66868
+ access: "create"
66869
+ },
66656
66870
  "dishwasher.start": {
66657
66871
  capName: "dishwasher",
66658
66872
  capScope: "device",
@@ -71099,6 +71313,12 @@ Object.freeze({
71099
71313
  addonId: null,
71100
71314
  access: "view"
71101
71315
  },
71316
+ "storageMigration.moverClearance": {
71317
+ capName: "storage-migration",
71318
+ capScope: "system",
71319
+ addonId: null,
71320
+ access: "view"
71321
+ },
71102
71322
  "storageMigration.movers": {
71103
71323
  capName: "storage-migration",
71104
71324
  capScope: "system",
@@ -73320,6 +73540,11 @@ Object.freeze({
73320
73540
  form: "single",
73321
73541
  optional: false
73322
73542
  }],
73543
+ "dishwasher.getOptions": [{
73544
+ name: "deviceId",
73545
+ form: "single",
73546
+ optional: false
73547
+ }],
73323
73548
  "dishwasher.getStatus": [{
73324
73549
  name: "deviceId",
73325
73550
  form: "single",
@@ -73330,6 +73555,21 @@ Object.freeze({
73330
73555
  form: "single",
73331
73556
  optional: false
73332
73557
  }],
73558
+ "dishwasher.resume": [{
73559
+ name: "deviceId",
73560
+ form: "single",
73561
+ optional: false
73562
+ }],
73563
+ "dishwasher.setChildLock": [{
73564
+ name: "deviceId",
73565
+ form: "single",
73566
+ optional: false
73567
+ }],
73568
+ "dishwasher.setExtraDry": [{
73569
+ name: "deviceId",
73570
+ form: "single",
73571
+ optional: false
73572
+ }],
73333
73573
  "dishwasher.setHalfLoad": [{
73334
73574
  name: "deviceId",
73335
73575
  form: "single",
@@ -73340,6 +73580,11 @@ Object.freeze({
73340
73580
  form: "single",
73341
73581
  optional: false
73342
73582
  }],
73583
+ "dishwasher.setIntensiveZone": [{
73584
+ name: "deviceId",
73585
+ form: "single",
73586
+ optional: false
73587
+ }],
73343
73588
  "dishwasher.setOption": [{
73344
73589
  name: "deviceId",
73345
73590
  form: "single",
@@ -73355,6 +73600,11 @@ Object.freeze({
73355
73600
  form: "single",
73356
73601
  optional: false
73357
73602
  }],
73603
+ "dishwasher.setVarioSpeedPlus": [{
73604
+ name: "deviceId",
73605
+ form: "single",
73606
+ optional: false
73607
+ }],
73358
73608
  "dishwasher.start": [{
73359
73609
  name: "deviceId",
73360
73610
  form: "single",
@@ -75493,6 +75743,9 @@ new Map(Object.entries({
75493
75743
  "wrapper-update-available": "system",
75494
75744
  "backup-completed": "system",
75495
75745
  "export-completed": "system",
75746
+ "alert-critical": "system",
75747
+ "alert-error": "system",
75748
+ "alert-critical-resolved": "system",
75496
75749
  "storage-location-low": "system",
75497
75750
  "storage-location-critical": "system",
75498
75751
  "storage-location-ok": "system",
@@ -75617,6 +75870,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
75617
75870
  "storage-location-ok"
75618
75871
  ]
75619
75872
  },
75873
+ {
75874
+ id: "alerts",
75875
+ family: "system",
75876
+ label: "Alerts",
75877
+ kinds: [
75878
+ "alert-critical",
75879
+ "alert-error",
75880
+ "alert-critical-resolved"
75881
+ ]
75882
+ },
75620
75883
  {
75621
75884
  id: "alarm",
75622
75885
  family: "alarm",
@@ -75661,6 +75924,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
75661
75924
  return [[descriptor.kind, field]];
75662
75925
  })));
75663
75926
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
75927
+ object({
75928
+ phase: _enum(["raised", "resolved"]),
75929
+ episodeId: string().min(1),
75930
+ alertId: string().min(1),
75931
+ severity: AlertSeveritySchema,
75932
+ category: string(),
75933
+ title: string(),
75934
+ message: string(),
75935
+ sourceType: string().optional(),
75936
+ sourceId: string().optional(),
75937
+ nodeId: string().optional(),
75938
+ /** The alert's own action link (where the operator acts on it), when it has one. */
75939
+ actionUrl: string().optional(),
75940
+ at: number()
75941
+ });
75664
75942
  var RULE_BODY_ONLY = ["body"];
75665
75943
  var RULE_TEXT = ["title", "body"];
75666
75944
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -75670,6 +75948,11 @@ var TANK = [
75670
75948
  "device-tank-full",
75671
75949
  "device-tank-normal"
75672
75950
  ];
75951
+ var ALERT_EPISODE = [
75952
+ "alert-critical",
75953
+ "alert-error",
75954
+ "alert-critical-resolved"
75955
+ ];
75673
75956
  var UPDATES = [
75674
75957
  "addon-update-available",
75675
75958
  "server-update-available",
@@ -75862,14 +76145,14 @@ var STATE_SUMMARY_VARS = [
75862
76145
  ([...RULE_TEXT], [...CONSUMABLE]),
75863
76146
  ([...RULE_TEXT], [...TANK]),
75864
76147
  [...RULE_TEXT],
75865
- ([...RULE_TEXT], [...UPDATES]),
75866
- ([...RULE_TEXT], [...UPDATES]),
75867
- [...RULE_TEXT],
76148
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
76149
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
75868
76150
  [...RULE_TEXT],
75869
76151
  [...RULE_TEXT],
75870
76152
  [...RULE_TEXT],
75871
76153
  [...RULE_TEXT],
75872
76154
  [...RULE_TEXT],
76155
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
75873
76156
  [...RULE_TEXT],
75874
76157
  [...RULE_TEXT],
75875
76158
  [...RULE_TEXT],
@@ -75887,7 +76170,11 @@ var STATE_SUMMARY_VARS = [
75887
76170
  [...RULE_TEXT],
75888
76171
  [...RULE_TEXT],
75889
76172
  [...RULE_TEXT],
75890
- [...RULE_TEXT],
76173
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
76174
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
76175
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
76176
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
76177
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
75891
76178
  [...RULE_TEXT],
75892
76179
  [...RULE_TEXT],
75893
76180
  [...RULE_TEXT],
@@ -89033,6 +89320,11 @@ var SERIES_META = [
89033
89320
  displayName: "Node FPS deficit"
89034
89321
  }
89035
89322
  ];
89323
+ function refusalCounts(result) {
89324
+ const counts = {};
89325
+ for (const r of result.refused) counts[r.reason] = (counts[r.reason] ?? 0) + r.count;
89326
+ return counts;
89327
+ }
89036
89328
  var NodeStressHistoryProducer = class {
89037
89329
  accum = new BucketAccumulator();
89038
89330
  deviceHistory;
@@ -89069,7 +89361,20 @@ var NodeStressHistoryProducer = class {
89069
89361
  const closed = this.accum.takeClosed(now ?? this.nowFn());
89070
89362
  if (closed.length === 0) return 0;
89071
89363
  try {
89072
- return (await this.deviceHistory.recordBuckets({ buckets: closed })).accepted;
89364
+ await this.declare();
89365
+ const result = await this.deviceHistory.recordBuckets({ buckets: closed });
89366
+ if (result.refused.length > 0) {
89367
+ if (result.refused.some((r) => r.reason === "undeclared")) {
89368
+ this.declared = false;
89369
+ this.accum.requeue(closed);
89370
+ }
89371
+ this.logger.warn("node-stress history buckets refused", { meta: {
89372
+ buckets: closed.length,
89373
+ accepted: result.accepted,
89374
+ refused: refusalCounts(result)
89375
+ } });
89376
+ }
89377
+ return result.accepted;
89073
89378
  } catch (err) {
89074
89379
  const dropped = this.accum.requeue(closed);
89075
89380
  this.logger.warn("node-stress history flush failed — requeued", { meta: {
@@ -30,7 +30,7 @@ async function d(e) {
30
30
  }
31
31
  }
32
32
  async function f() {
33
- return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_orchestrator_widgets-C4NW33cW.mjs")).catch((e) => {
33
+ return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_orchestrator_widgets-C2QZ2EO2.mjs")).catch((e) => {
34
34
  throw l = void 0, e;
35
35
  }), l;
36
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-pipeline-orchestrator",
3
- "version": "1.2.602",
3
+ "version": "1.2.604",
4
4
  "description": "Hub-side camera-to-agent load balancer — tracks runner capacity and dispatches attachCamera calls to the optimal pipeline-runner instance",
5
5
  "keywords": [
6
6
  "camstack",