@camstack/addon-osd-manager 0.1.240 → 0.1.242

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 (17) hide show
  1. package/dist/{MotionZonesSettings-G8UCebu1.mjs → MotionZonesSettings-BvLGv1T6.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-2NTC9B3W.mjs → PrivacyMaskSettings-BP1o-8R3.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-ByMmaROK.mjs → SceneMonitorEditor-DdOZGeyN.mjs} +3 -3
  4. package/dist/_stub.js +2764 -2730
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-YPnn4L9J.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-X3Ix1Fi3.mjs} +3 -3
  6. package/dist/{_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BFkoKPX3.mjs → _virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C23HfCvI.mjs} +1 -1
  7. package/dist/{hostInit-DX8e2Ucg.mjs → hostInit-CCC6cRfD.mjs} +2 -2
  8. package/dist/index.js +163 -11
  9. package/dist/index.mjs +163 -11
  10. package/dist/{player-overlays-B9Leo3bK.mjs → player-overlays-wuFmgQhe.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-DCFnF6WM.mjs → responsive-CBm_gJiZ.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-B3PBzmS-.mjs → scene-monitor-copy-Ds8DsHQ7.mjs} +1 -1
  14. package/dist/{square-CvNDzXRw.mjs → square-B_a9tj8L.mjs} +1 -1
  15. package/dist/{trash-2-DHcGMoei.mjs → trash-2-ZC2TxXnK.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-JtBdHzmK.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-ChxZqQtq.mjs} +1 -1
  17. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- //#region ../types/dist/event-category-C4hVnRo8.mjs
5
+ //#region ../types/dist/event-category-BvOFi6PY.mjs
6
6
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
7
7
  EventCategory["SystemBoot"] = "system.boot";
8
8
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -66,6 +66,24 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
66
66
  * consumes this category and maps it to the `addon-crash-loop` kind.
67
67
  */
68
68
  EventCategory["AddonRunnerFailed"] = "addon.runner-failed";
69
+ /**
70
+ * A runner whose addon refused to start with a typed reason (D877) - parked
71
+ * in `refused`, never counted by the crash breaker, retried on operator
72
+ * action. One event per refusal.
73
+ */
74
+ EventCategory["AddonRunnerRefused"] = "addon.runner-refused";
75
+ /**
76
+ * A runner settled on a state (D877): `running` (READY), `crashed`, `failed` or
77
+ * `refused`. In-process telemetry for the boot check (re-evaluate while any
78
+ * runner is still pending) and the alert centre (close a recovered runner).
79
+ */
80
+ EventCategory["ProcessStateChanged"] = "process.state-changed";
81
+ /**
82
+ * The node's one-shot runner boot check (D877): planned runners against the
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.
85
+ */
86
+ EventCategory["SystemRunnerCheck"] = "system.runner-check";
69
87
  EventCategory["AddonError"] = "addon.error";
70
88
  EventCategory["AddonPageReady"] = "addon.page-ready";
71
89
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5390,7 +5408,7 @@ var ZodIssueCode = {
5390
5408
  var ZodFirstPartyTypeKind;
5391
5409
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5392
5410
  //#endregion
5393
- //#region ../types/dist/sleep-bwsTj221.mjs
5411
+ //#region ../types/dist/sleep-bgZLodYc.mjs
5394
5412
  /**
5395
5413
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5396
5414
  * window to float samples (D455).
@@ -8255,7 +8273,7 @@ object({
8255
8273
  params: record(string(), union([string(), number()])).optional()
8256
8274
  });
8257
8275
  //#endregion
8258
- //#region ../types/dist/err-msg-DLerKiVO.mjs
8276
+ //#region ../types/dist/err-msg--2RrYiLO.mjs
8259
8277
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8260
8278
  DeviceType["Camera"] = "camera";
8261
8279
  DeviceType["Hub"] = "hub";
@@ -8524,6 +8542,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8524
8542
  /** Virtual HA toggle (input_boolean.*) — distinguishable from a
8525
8543
  * real Switch device for UI rendering / export adapters. */
8526
8544
  DeviceRole["BinaryHelper"] = "binary-helper";
8545
+ /** A smart plug: a `switch` whose source says it is an outlet (HA
8546
+ * `device_class: outlet`). The Alexa export shows it as a SMARTPLUG. */
8547
+ DeviceRole["Outlet"] = "outlet";
8527
8548
  /** Generic motion / occupancy / moving event source. Distinct from
8528
8549
  * the camera accessory PirSensor role: that one is a camera child;
8529
8550
  * this is a standalone HA / 3rd-party motion sensor. */
@@ -8591,7 +8612,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8591
8612
  return DeviceRole;
8592
8613
  }({});
8593
8614
  //#endregion
8594
- //#region ../types/dist/composition-EQ9Ok0Ee.mjs
8615
+ //#region ../types/dist/composition-DOwQB_Ua.mjs
8595
8616
  /**
8596
8617
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8597
8618
  *
@@ -38833,6 +38854,36 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
38833
38854
  timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
38834
38855
  });
38835
38856
  /**
38857
+ * The report of a one-shot "move this owner's plaintext secrets into the
38858
+ * keychain" run (D878). COUNTS only - never a value, never a ref.
38859
+ *
38860
+ * The owner runs it on its own rows, through its own write path; an operator
38861
+ * script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
38862
+ * Dry run (`apply: false`) reports what WOULD move and changes nothing.
38863
+ */
38864
+ var RawSecretMigrationInputSchema = object({
38865
+ /** `false` (the default of the script) = report only. */
38866
+ apply: boolean() });
38867
+ var RawSecretMigrationReportSchema = object({
38868
+ apply: boolean(),
38869
+ /** Rows that can carry a secret (a profile, an enrolment). */
38870
+ rows: number().int(),
38871
+ /** Rows whose secret was plaintext when the run started. */
38872
+ raw: number().int(),
38873
+ /** Rows that already held a keychain marker when the run started. */
38874
+ markers: number().int(),
38875
+ /** Plaintext rows moved by THIS run (always 0 on a dry run). */
38876
+ migrated: number().int(),
38877
+ /** Plaintext rows left in place because the move or its read-back failed. */
38878
+ failed: number().int(),
38879
+ /** After the run: rows still holding plaintext. */
38880
+ remainingRaw: number().int(),
38881
+ /** After the run: markers the keychain could not resolve right now. */
38882
+ unresolvedMarkers: number().int(),
38883
+ /** True when nothing is raw and every marker resolves. */
38884
+ verified: boolean()
38885
+ });
38886
+ /**
38836
38887
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
38837
38888
  * methods concat-fan across providers; single-row methods route to ONE
38838
38889
  * provider by the `addonId` in the call input (the notification-output
@@ -39017,6 +39068,9 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
39017
39068
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
39018
39069
  kind: "mutation",
39019
39070
  auth: "admin"
39071
+ }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
39072
+ kind: "mutation",
39073
+ auth: "admin"
39020
39074
  }), method(ProfileRefInputSchema, _void(), {
39021
39075
  kind: "mutation",
39022
39076
  auth: "admin"
@@ -50008,6 +50062,41 @@ var ServerRollbackInfoSchema = object({
50008
50062
  atMs: number(),
50009
50063
  reason: string()
50010
50064
  });
50065
+ /**
50066
+ * The runner boot check (D877): the runners this node PLANNED (hub: one per
50067
+ * `resolveRunnerId` over its forked addons; agent: the runners its process
50068
+ * service holds, because only the hub plans) against the states the process
50069
+ * service reports. Kept in memory, recomputed by the same one-shot check after
50070
+ * every boot, served on `getServerPackageStatus`.
50071
+ *
50072
+ * `failed` is the D6 breaker's terminal state, `refused` a deterministic Init
50073
+ * refusal (an addon that said "I will not start, and here is why"), `missing` a
50074
+ * planned runner the process service has no entry for.
50075
+ */
50076
+ var RunnerRefusalSchema = object({
50077
+ runnerId: string(),
50078
+ addonIds: array(string()),
50079
+ reason: string()
50080
+ });
50081
+ var RunnerBootCheckSchema = object({
50082
+ checkedAtMs: number(),
50083
+ /** Runners planned for this node. */
50084
+ expected: number(),
50085
+ /** Planned runners whose process is `running`. */
50086
+ running: number(),
50087
+ failed: array(string()),
50088
+ refused: array(RunnerRefusalSchema),
50089
+ missing: array(string()),
50090
+ /**
50091
+ * Runners still on their way: `starting`, or `crashed` waiting on a backoff
50092
+ * respawn. The check is FINAL only when this is empty; until then nothing is
50093
+ * pushed and the verdict is re-evaluated on the next runner state change.
50094
+ * Optional for version skew (absent = settled).
50095
+ */
50096
+ pending: array(string()).optional(),
50097
+ /** True when the plan is the hub's (`missing` is then meaningful); false on an agent. */
50098
+ planKnown: boolean()
50099
+ });
50011
50100
  var ServerPackageStatusSchema = object({
50012
50101
  /** Root package name (`@camstack/server` on the hub). */
50013
50102
  packageName: string(),
@@ -50070,7 +50159,14 @@ var ServerPackageStatusSchema = object({
50070
50159
  * for version skew: an older provider's payload simply omits it, and an
50071
50160
  * absent wrapper is unknown — never `native`.
50072
50161
  */
50073
- wrapper: WrapperIdentitySchema.optional()
50162
+ wrapper: WrapperIdentitySchema.optional(),
50163
+ /**
50164
+ * What this node PLANNED to run against what its process service reports
50165
+ * (D877). Absent until the one-shot boot check has run (~60 s after boot) and
50166
+ * on a provider that predates it. Absent is "not checked yet", never "all
50167
+ * well": a consumer that needs the answer treats it as pending.
50168
+ */
50169
+ runners: RunnerBootCheckSchema.optional()
50074
50170
  });
50075
50171
  var ServerUpdateCheckResultSchema = object({
50076
50172
  packageName: string(),
@@ -50121,6 +50217,13 @@ var ServerUpdateOutcomeSchema = _enum([
50121
50217
  "refused",
50122
50218
  "failed"
50123
50219
  ]);
50220
+ /** One addon the pre-flight found the target version would refuse (D877). */
50221
+ var UpdateBlockerSchema = object({
50222
+ addonId: string(),
50223
+ reason: string(),
50224
+ /** What the operator does about it. */
50225
+ remedy: string()
50226
+ });
50124
50227
  var ServerUpdateActionResultSchema = object({
50125
50228
  accepted: boolean(),
50126
50229
  targetVersion: string().nullable(),
@@ -50138,14 +50241,27 @@ var ServerUpdateActionResultSchema = object({
50138
50241
  * The failure itself, verbatim enough to act on (the npm output for a
50139
50242
  * staging install). Non-null only for `failed`.
50140
50243
  */
50141
- error: string().nullable().optional()
50244
+ error: string().nullable().optional(),
50245
+ /**
50246
+ * The addons the target version would refuse to start on this node's live
50247
+ * store (D877), present when the pre-flight refused the update
50248
+ * (`reason: 'addon-would-refuse'`). Optional for version skew.
50249
+ */
50250
+ blockers: array(UpdateBlockerSchema).optional()
50142
50251
  });
50143
50252
  method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
50144
50253
  kind: "mutation",
50145
50254
  auth: "admin"
50146
- }), method(object({
50147
- /** Explicit target version; omitted = latest from the registry. */
50148
- version: string().optional() }), ServerUpdateActionResultSchema, {
50255
+ }), method(object({
50256
+ /** Explicit target version; omitted = latest from the registry. */
50257
+ version: string().optional(),
50258
+ /**
50259
+ * Apply even though the pre-flight (D877) found addons the target would
50260
+ * refuse to start. Off by default: those addons stay down until the
50261
+ * remedy is run, which is the incident this gate exists to prevent.
50262
+ */
50263
+ acknowledgeRefusals: boolean().optional()
50264
+ }), ServerUpdateActionResultSchema, {
50149
50265
  kind: "mutation",
50150
50266
  auth: "admin",
50151
50267
  timeoutMs: 16 * 6e4
@@ -52558,7 +52674,9 @@ var ManifestShapeSchema = object({
52558
52674
  var AddonProcessSchema = object({
52559
52675
  pid: number().optional(),
52560
52676
  mode: string(),
52561
- state: string()
52677
+ state: string(),
52678
+ /** Why the runner is `refused` (an addon's own words), when it is (D877). */
52679
+ reason: string().optional()
52562
52680
  });
52563
52681
  /**
52564
52682
  * Per-addon health snapshot from the kernel's AddonHealthMonitor.
@@ -53561,6 +53679,12 @@ object({
53561
53679
  /** Horizontal louver swing on/off. Null when the device has no
53562
53680
  * horizontal swing surface (gate with `DeviceFeature.ClimateSwingHorizontal`). */
53563
53681
  swingHorizontal: boolean().nullable(),
53682
+ /** Lowest setpoint the device accepts, Celsius. Absent / null = not reported. */
53683
+ minTemp: number().nullable().optional(),
53684
+ /** Highest setpoint the device accepts, Celsius. Absent / null = not reported. */
53685
+ maxTemp: number().nullable().optional(),
53686
+ /** Setpoint granularity, Celsius (0.5, 1). Absent / null = not reported. */
53687
+ tempStep: number().positive().nullable().optional(),
53564
53688
  /** Ms epoch when the slice was last updated (push or command). */
53565
53689
  lastFetchedAt: number()
53566
53690
  });
@@ -60643,7 +60767,11 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
60643
60767
  kind: "mutation",
60644
60768
  auth: "admin",
60645
60769
  access: "delete"
60646
- }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(object({
60770
+ }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
60771
+ kind: "mutation",
60772
+ auth: "admin",
60773
+ access: "create"
60774
+ }), method(object({
60647
60775
  userId: string(),
60648
60776
  code: string()
60649
60777
  }), object({ valid: boolean() }), {
@@ -65020,6 +65148,12 @@ Object.freeze({
65020
65148
  addonId: null,
65021
65149
  access: "view"
65022
65150
  },
65151
+ "llm.migrateRawSecrets": {
65152
+ capName: "llm",
65153
+ capScope: "system",
65154
+ addonId: null,
65155
+ access: "create"
65156
+ },
65023
65157
  "llm.resolveModelRef": {
65024
65158
  capName: "llm",
65025
65159
  capScope: "system",
@@ -69562,6 +69696,12 @@ Object.freeze({
69562
69696
  addonId: null,
69563
69697
  access: "view"
69564
69698
  },
69699
+ "userManagement.migrateRawSecrets": {
69700
+ capName: "user-management",
69701
+ capScope: "system",
69702
+ addonId: null,
69703
+ access: "create"
69704
+ },
69565
69705
  "userManagement.oauthExchangeCode": {
69566
69706
  capName: "user-management",
69567
69707
  capScope: "system",
@@ -75215,6 +75355,18 @@ var CAP_STATE_LEAVES = Object.freeze({
75215
75355
  {
75216
75356
  "path": "swingHorizontal",
75217
75357
  "valueType": "boolean"
75358
+ },
75359
+ {
75360
+ "path": "minTemp",
75361
+ "valueType": "number"
75362
+ },
75363
+ {
75364
+ "path": "maxTemp",
75365
+ "valueType": "number"
75366
+ },
75367
+ {
75368
+ "path": "tempStep",
75369
+ "valueType": "number"
75218
75370
  }
75219
75371
  ],
75220
75372
  "color": [
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- //#region ../types/dist/event-category-C4hVnRo8.mjs
1
+ //#region ../types/dist/event-category-BvOFi6PY.mjs
2
2
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
3
3
  EventCategory["SystemBoot"] = "system.boot";
4
4
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -62,6 +62,24 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
62
62
  * consumes this category and maps it to the `addon-crash-loop` kind.
63
63
  */
64
64
  EventCategory["AddonRunnerFailed"] = "addon.runner-failed";
65
+ /**
66
+ * A runner whose addon refused to start with a typed reason (D877) - parked
67
+ * in `refused`, never counted by the crash breaker, retried on operator
68
+ * action. One event per refusal.
69
+ */
70
+ EventCategory["AddonRunnerRefused"] = "addon.runner-refused";
71
+ /**
72
+ * A runner settled on a state (D877): `running` (READY), `crashed`, `failed` or
73
+ * `refused`. In-process telemetry for the boot check (re-evaluate while any
74
+ * runner is still pending) and the alert centre (close a recovered runner).
75
+ */
76
+ EventCategory["ProcessStateChanged"] = "process.state-changed";
77
+ /**
78
+ * The node's one-shot runner boot check (D877): planned runners against the
79
+ * process service, `degraded` when any is failed, refused or missing. The
80
+ * alert centre turns it into one alert and a direct critical push.
81
+ */
82
+ EventCategory["SystemRunnerCheck"] = "system.runner-check";
65
83
  EventCategory["AddonError"] = "addon.error";
66
84
  EventCategory["AddonPageReady"] = "addon.page-ready";
67
85
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5386,7 +5404,7 @@ var ZodIssueCode = {
5386
5404
  var ZodFirstPartyTypeKind;
5387
5405
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5388
5406
  //#endregion
5389
- //#region ../types/dist/sleep-bwsTj221.mjs
5407
+ //#region ../types/dist/sleep-bgZLodYc.mjs
5390
5408
  /**
5391
5409
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5392
5410
  * window to float samples (D455).
@@ -8251,7 +8269,7 @@ object({
8251
8269
  params: record(string(), union([string(), number()])).optional()
8252
8270
  });
8253
8271
  //#endregion
8254
- //#region ../types/dist/err-msg-DLerKiVO.mjs
8272
+ //#region ../types/dist/err-msg--2RrYiLO.mjs
8255
8273
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8256
8274
  DeviceType["Camera"] = "camera";
8257
8275
  DeviceType["Hub"] = "hub";
@@ -8520,6 +8538,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8520
8538
  /** Virtual HA toggle (input_boolean.*) — distinguishable from a
8521
8539
  * real Switch device for UI rendering / export adapters. */
8522
8540
  DeviceRole["BinaryHelper"] = "binary-helper";
8541
+ /** A smart plug: a `switch` whose source says it is an outlet (HA
8542
+ * `device_class: outlet`). The Alexa export shows it as a SMARTPLUG. */
8543
+ DeviceRole["Outlet"] = "outlet";
8523
8544
  /** Generic motion / occupancy / moving event source. Distinct from
8524
8545
  * the camera accessory PirSensor role: that one is a camera child;
8525
8546
  * this is a standalone HA / 3rd-party motion sensor. */
@@ -8587,7 +8608,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8587
8608
  return DeviceRole;
8588
8609
  }({});
8589
8610
  //#endregion
8590
- //#region ../types/dist/composition-EQ9Ok0Ee.mjs
8611
+ //#region ../types/dist/composition-DOwQB_Ua.mjs
8591
8612
  /**
8592
8613
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8593
8614
  *
@@ -38829,6 +38850,36 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
38829
38850
  timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
38830
38851
  });
38831
38852
  /**
38853
+ * The report of a one-shot "move this owner's plaintext secrets into the
38854
+ * keychain" run (D878). COUNTS only - never a value, never a ref.
38855
+ *
38856
+ * The owner runs it on its own rows, through its own write path; an operator
38857
+ * script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
38858
+ * Dry run (`apply: false`) reports what WOULD move and changes nothing.
38859
+ */
38860
+ var RawSecretMigrationInputSchema = object({
38861
+ /** `false` (the default of the script) = report only. */
38862
+ apply: boolean() });
38863
+ var RawSecretMigrationReportSchema = object({
38864
+ apply: boolean(),
38865
+ /** Rows that can carry a secret (a profile, an enrolment). */
38866
+ rows: number().int(),
38867
+ /** Rows whose secret was plaintext when the run started. */
38868
+ raw: number().int(),
38869
+ /** Rows that already held a keychain marker when the run started. */
38870
+ markers: number().int(),
38871
+ /** Plaintext rows moved by THIS run (always 0 on a dry run). */
38872
+ migrated: number().int(),
38873
+ /** Plaintext rows left in place because the move or its read-back failed. */
38874
+ failed: number().int(),
38875
+ /** After the run: rows still holding plaintext. */
38876
+ remainingRaw: number().int(),
38877
+ /** After the run: markers the keychain could not resolve right now. */
38878
+ unresolvedMarkers: number().int(),
38879
+ /** True when nothing is raw and every marker resolves. */
38880
+ verified: boolean()
38881
+ });
38882
+ /**
38832
38883
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
38833
38884
  * methods concat-fan across providers; single-row methods route to ONE
38834
38885
  * provider by the `addonId` in the call input (the notification-output
@@ -39013,6 +39064,9 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
39013
39064
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
39014
39065
  kind: "mutation",
39015
39066
  auth: "admin"
39067
+ }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
39068
+ kind: "mutation",
39069
+ auth: "admin"
39016
39070
  }), method(ProfileRefInputSchema, _void(), {
39017
39071
  kind: "mutation",
39018
39072
  auth: "admin"
@@ -50004,6 +50058,41 @@ var ServerRollbackInfoSchema = object({
50004
50058
  atMs: number(),
50005
50059
  reason: string()
50006
50060
  });
50061
+ /**
50062
+ * The runner boot check (D877): the runners this node PLANNED (hub: one per
50063
+ * `resolveRunnerId` over its forked addons; agent: the runners its process
50064
+ * service holds, because only the hub plans) against the states the process
50065
+ * service reports. Kept in memory, recomputed by the same one-shot check after
50066
+ * every boot, served on `getServerPackageStatus`.
50067
+ *
50068
+ * `failed` is the D6 breaker's terminal state, `refused` a deterministic Init
50069
+ * refusal (an addon that said "I will not start, and here is why"), `missing` a
50070
+ * planned runner the process service has no entry for.
50071
+ */
50072
+ var RunnerRefusalSchema = object({
50073
+ runnerId: string(),
50074
+ addonIds: array(string()),
50075
+ reason: string()
50076
+ });
50077
+ var RunnerBootCheckSchema = object({
50078
+ checkedAtMs: number(),
50079
+ /** Runners planned for this node. */
50080
+ expected: number(),
50081
+ /** Planned runners whose process is `running`. */
50082
+ running: number(),
50083
+ failed: array(string()),
50084
+ refused: array(RunnerRefusalSchema),
50085
+ missing: array(string()),
50086
+ /**
50087
+ * Runners still on their way: `starting`, or `crashed` waiting on a backoff
50088
+ * respawn. The check is FINAL only when this is empty; until then nothing is
50089
+ * pushed and the verdict is re-evaluated on the next runner state change.
50090
+ * Optional for version skew (absent = settled).
50091
+ */
50092
+ pending: array(string()).optional(),
50093
+ /** True when the plan is the hub's (`missing` is then meaningful); false on an agent. */
50094
+ planKnown: boolean()
50095
+ });
50007
50096
  var ServerPackageStatusSchema = object({
50008
50097
  /** Root package name (`@camstack/server` on the hub). */
50009
50098
  packageName: string(),
@@ -50066,7 +50155,14 @@ var ServerPackageStatusSchema = object({
50066
50155
  * for version skew: an older provider's payload simply omits it, and an
50067
50156
  * absent wrapper is unknown — never `native`.
50068
50157
  */
50069
- wrapper: WrapperIdentitySchema.optional()
50158
+ wrapper: WrapperIdentitySchema.optional(),
50159
+ /**
50160
+ * What this node PLANNED to run against what its process service reports
50161
+ * (D877). Absent until the one-shot boot check has run (~60 s after boot) and
50162
+ * on a provider that predates it. Absent is "not checked yet", never "all
50163
+ * well": a consumer that needs the answer treats it as pending.
50164
+ */
50165
+ runners: RunnerBootCheckSchema.optional()
50070
50166
  });
50071
50167
  var ServerUpdateCheckResultSchema = object({
50072
50168
  packageName: string(),
@@ -50117,6 +50213,13 @@ var ServerUpdateOutcomeSchema = _enum([
50117
50213
  "refused",
50118
50214
  "failed"
50119
50215
  ]);
50216
+ /** One addon the pre-flight found the target version would refuse (D877). */
50217
+ var UpdateBlockerSchema = object({
50218
+ addonId: string(),
50219
+ reason: string(),
50220
+ /** What the operator does about it. */
50221
+ remedy: string()
50222
+ });
50120
50223
  var ServerUpdateActionResultSchema = object({
50121
50224
  accepted: boolean(),
50122
50225
  targetVersion: string().nullable(),
@@ -50134,14 +50237,27 @@ var ServerUpdateActionResultSchema = object({
50134
50237
  * The failure itself, verbatim enough to act on (the npm output for a
50135
50238
  * staging install). Non-null only for `failed`.
50136
50239
  */
50137
- error: string().nullable().optional()
50240
+ error: string().nullable().optional(),
50241
+ /**
50242
+ * The addons the target version would refuse to start on this node's live
50243
+ * store (D877), present when the pre-flight refused the update
50244
+ * (`reason: 'addon-would-refuse'`). Optional for version skew.
50245
+ */
50246
+ blockers: array(UpdateBlockerSchema).optional()
50138
50247
  });
50139
50248
  method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
50140
50249
  kind: "mutation",
50141
50250
  auth: "admin"
50142
- }), method(object({
50143
- /** Explicit target version; omitted = latest from the registry. */
50144
- version: string().optional() }), ServerUpdateActionResultSchema, {
50251
+ }), method(object({
50252
+ /** Explicit target version; omitted = latest from the registry. */
50253
+ version: string().optional(),
50254
+ /**
50255
+ * Apply even though the pre-flight (D877) found addons the target would
50256
+ * refuse to start. Off by default: those addons stay down until the
50257
+ * remedy is run, which is the incident this gate exists to prevent.
50258
+ */
50259
+ acknowledgeRefusals: boolean().optional()
50260
+ }), ServerUpdateActionResultSchema, {
50145
50261
  kind: "mutation",
50146
50262
  auth: "admin",
50147
50263
  timeoutMs: 16 * 6e4
@@ -52554,7 +52670,9 @@ var ManifestShapeSchema = object({
52554
52670
  var AddonProcessSchema = object({
52555
52671
  pid: number().optional(),
52556
52672
  mode: string(),
52557
- state: string()
52673
+ state: string(),
52674
+ /** Why the runner is `refused` (an addon's own words), when it is (D877). */
52675
+ reason: string().optional()
52558
52676
  });
52559
52677
  /**
52560
52678
  * Per-addon health snapshot from the kernel's AddonHealthMonitor.
@@ -53557,6 +53675,12 @@ object({
53557
53675
  /** Horizontal louver swing on/off. Null when the device has no
53558
53676
  * horizontal swing surface (gate with `DeviceFeature.ClimateSwingHorizontal`). */
53559
53677
  swingHorizontal: boolean().nullable(),
53678
+ /** Lowest setpoint the device accepts, Celsius. Absent / null = not reported. */
53679
+ minTemp: number().nullable().optional(),
53680
+ /** Highest setpoint the device accepts, Celsius. Absent / null = not reported. */
53681
+ maxTemp: number().nullable().optional(),
53682
+ /** Setpoint granularity, Celsius (0.5, 1). Absent / null = not reported. */
53683
+ tempStep: number().positive().nullable().optional(),
53560
53684
  /** Ms epoch when the slice was last updated (push or command). */
53561
53685
  lastFetchedAt: number()
53562
53686
  });
@@ -60639,7 +60763,11 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
60639
60763
  kind: "mutation",
60640
60764
  auth: "admin",
60641
60765
  access: "delete"
60642
- }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(object({
60766
+ }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
60767
+ kind: "mutation",
60768
+ auth: "admin",
60769
+ access: "create"
60770
+ }), method(object({
60643
60771
  userId: string(),
60644
60772
  code: string()
60645
60773
  }), object({ valid: boolean() }), {
@@ -65016,6 +65144,12 @@ Object.freeze({
65016
65144
  addonId: null,
65017
65145
  access: "view"
65018
65146
  },
65147
+ "llm.migrateRawSecrets": {
65148
+ capName: "llm",
65149
+ capScope: "system",
65150
+ addonId: null,
65151
+ access: "create"
65152
+ },
65019
65153
  "llm.resolveModelRef": {
65020
65154
  capName: "llm",
65021
65155
  capScope: "system",
@@ -69558,6 +69692,12 @@ Object.freeze({
69558
69692
  addonId: null,
69559
69693
  access: "view"
69560
69694
  },
69695
+ "userManagement.migrateRawSecrets": {
69696
+ capName: "user-management",
69697
+ capScope: "system",
69698
+ addonId: null,
69699
+ access: "create"
69700
+ },
69561
69701
  "userManagement.oauthExchangeCode": {
69562
69702
  capName: "user-management",
69563
69703
  capScope: "system",
@@ -75211,6 +75351,18 @@ var CAP_STATE_LEAVES = Object.freeze({
75211
75351
  {
75212
75352
  "path": "swingHorizontal",
75213
75353
  "valueType": "boolean"
75354
+ },
75355
+ {
75356
+ "path": "minTemp",
75357
+ "valueType": "number"
75358
+ },
75359
+ {
75360
+ "path": "maxTemp",
75361
+ "valueType": "number"
75362
+ },
75363
+ {
75364
+ "path": "tempStep",
75365
+ "valueType": "number"
75214
75366
  }
75215
75367
  ],
75216
75368
  "color": [
@@ -1,6 +1,6 @@
1
1
  import { S as e, d as t, u as n, v as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C-pbjC7c.mjs";
2
2
  import { n as i, r as a, t as o } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
3
- import { c as s, l as c } from "./responsive-DCFnF6WM.mjs";
3
+ import { c as s, l as c } from "./responsive-CBm_gJiZ.mjs";
4
4
  var l = c("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",
6
6
  key: "qrunsl"
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-JtBdHzmK.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-ChxZqQtq.mjs";
2
2
  export { t as get, e as init };
@@ -1,6 +1,6 @@
1
1
  import { S as e, d as t, g as n, i as r, l as i, n as a, r as o, u as s, v as c, y as l } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C-pbjC7c.mjs";
2
2
  import "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
3
- import { i as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BFkoKPX3.mjs";
3
+ import { i as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C23HfCvI.mjs";
4
4
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
5
5
  e();
6
6
  var d = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), f = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), p = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), m = (e) => {
@@ -1,6 +1,6 @@
1
1
  import { S as e, g as t, l as n, v as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-C-pbjC7c.mjs";
2
2
  import { n as i } from "./ui-text-BitwQ50T.mjs";
3
- import { l as a } from "./responsive-DCFnF6WM.mjs";
3
+ import { l as a } from "./responsive-CBm_gJiZ.mjs";
4
4
  var o = a("camera", [["path", {
5
5
  d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
6
6
  key: "18u6gg"
@@ -1,4 +1,4 @@
1
- import { l as e } from "./responsive-DCFnF6WM.mjs";
1
+ import { l as e } from "./responsive-CBm_gJiZ.mjs";
2
2
  var t = e("eye-off", [
3
3
  ["path", {
4
4
  d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",
@@ -1,4 +1,4 @@
1
- import { l as e } from "./responsive-DCFnF6WM.mjs";
1
+ import { l as e } from "./responsive-CBm_gJiZ.mjs";
2
2
  var t = e("trash-2", [
3
3
  ["path", {
4
4
  d: "M10 11v6",
@@ -2753,7 +2753,7 @@ async function rr(e) {
2753
2753
  }
2754
2754
  }
2755
2755
  async function ir() {
2756
- return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-YPnn4L9J.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-X3Ix1Fi3.mjs")).catch((e) => {
2757
2757
  throw tr = void 0, e;
2758
2758
  }), tr;
2759
2759
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-osd-manager",
3
- "version": "0.1.240",
3
+ "version": "0.1.242",
4
4
  "description": "Binds camera on-screen-display slots to live state and recognitions",
5
5
  "keywords": [
6
6
  "camstack",