@camstack/system 1.2.440 → 1.2.442

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 (85) hide show
  1. package/dist/addon-runner.js +72 -2
  2. package/dist/addon-runner.mjs +72 -2
  3. package/dist/auth/totp-manager.d.ts +46 -1
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  8. package/dist/builtins/alerts/alerts.addon.d.ts +41 -1
  9. package/dist/builtins/alerts/alerts.addon.js +638 -26
  10. package/dist/builtins/alerts/alerts.addon.mjs +638 -26
  11. package/dist/builtins/alerts/critical-push.d.ts +86 -0
  12. package/dist/builtins/alerts/runner-alert.d.ts +71 -0
  13. package/dist/builtins/autotrack/index.js +1 -1
  14. package/dist/builtins/autotrack/index.mjs +1 -1
  15. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  16. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  17. package/dist/builtins/calendars/calendars.addon.js +1 -1
  18. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  19. package/dist/builtins/camera-grid/index.js +1 -1
  20. package/dist/builtins/camera-grid/index.mjs +1 -1
  21. package/dist/builtins/composer/composer.addon.js +2 -2
  22. package/dist/builtins/composer/composer.addon.mjs +2 -2
  23. package/dist/builtins/console-logging/index.js +1 -1
  24. package/dist/builtins/console-logging/index.mjs +1 -1
  25. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  26. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  27. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  28. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  29. package/dist/builtins/hub-forwarder/index.js +1 -1
  30. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  31. package/dist/builtins/keychain/index.js +3 -3
  32. package/dist/builtins/keychain/index.mjs +3 -3
  33. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  34. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  35. package/dist/builtins/local-auth/auth-schema.d.ts +1 -1
  36. package/dist/builtins/local-auth/local-auth.addon.js +226 -17
  37. package/dist/builtins/local-auth/local-auth.addon.mjs +226 -17
  38. package/dist/builtins/local-network/local-network.addon.js +2 -2
  39. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  40. package/dist/builtins/loki-logging/index.js +1 -1
  41. package/dist/builtins/loki-logging/index.mjs +1 -1
  42. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  43. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  44. package/dist/builtins/platform-probe/index.js +1 -1
  45. package/dist/builtins/platform-probe/index.mjs +1 -1
  46. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  47. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  48. package/dist/builtins/snapshot/index.js +1 -1
  49. package/dist/builtins/snapshot/index.mjs +1 -1
  50. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  51. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  52. package/dist/builtins/sqlite-storage/index.js +1 -1
  53. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  54. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +2 -2
  55. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +2 -2
  56. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  57. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  58. package/dist/builtins/system-config/system-config.addon.js +2 -2
  59. package/dist/builtins/system-config/system-config.addon.mjs +283 -283
  60. package/dist/builtins/winston-logging/index.js +1 -1
  61. package/dist/builtins/winston-logging/index.mjs +1 -1
  62. package/dist/{composition-sources-CS0D7imL.mjs → composition-sources-CftPpY4O.mjs} +1 -1
  63. package/dist/{composition-sources-cBG8fBTu.js → composition-sources-DmSEMtUD.js} +1 -1
  64. package/dist/{constants-CIzPjw7L.mjs → constants-2iWQ-Nx-.mjs} +1 -1
  65. package/dist/{constants-CRI3QzT4.js → constants-b7kpjuO4.js} +1 -1
  66. package/dist/{device-ca-DLKXYseS.mjs → device-ca-BJpYTAPg.mjs} +1 -1
  67. package/dist/{device-ca-DNHjts4_.js → device-ca-tKY_ZS9H.js} +1 -1
  68. package/dist/{dist-BKhlcYz6.js → dist-CyIHDLCg.js} +169 -10
  69. package/dist/{dist-9fcsrFU3.mjs → dist-DsrQYcLm.mjs} +164 -11
  70. package/dist/file-host-worker.js +1 -1
  71. package/dist/file-host-worker.mjs +1 -1
  72. package/dist/{hub-mdns-ciao-Dy2YjRqC.mjs → hub-mdns-ciao-BS2akjWx.mjs} +1 -1
  73. package/dist/{hub-mdns-ciao-3Zc9G9MS.js → hub-mdns-ciao-Da-0NEyr.js} +1 -1
  74. package/dist/index.js +142 -13
  75. package/dist/index.mjs +137 -14
  76. package/dist/kernel/addon-refused-error.d.ts +30 -0
  77. package/dist/kernel/index.d.ts +3 -0
  78. package/dist/kernel/legacy-blob-guard.d.ts +6 -1
  79. package/dist/kernel/moleculer/process-service.d.ts +16 -1
  80. package/dist/kernel/moleculer/runner-refusal.d.ts +27 -0
  81. package/dist/{restore-archive-49aZwkp8.js → restore-archive-Cdf09dHm.js} +1 -1
  82. package/dist/{restore-archive-DgvDecXM.mjs → restore-archive-RaA3uZ7H.mjs} +82 -82
  83. package/dist/{wal-maintenance-C041zn6V.js → wal-maintenance-C-bmkDhm.js} +0 -0
  84. package/dist/{wal-maintenance-BZGmF-3U.mjs → wal-maintenance-DE8QrreK.mjs} +0 -0
  85. package/package.json +1 -1
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BKhlcYz6.js");
6
+ const require_dist = require("../../dist-CyIHDLCg.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { gn as logDestinationCapability, jr as BaseAddon } from "../../dist-9fcsrFU3.mjs";
1
+ import { gn as logDestinationCapability, jr as BaseAddon } from "../../dist-DsrQYcLm.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import path from "node:path";
@@ -1,4 +1,4 @@
1
- import { Ar as errMsg, Cr as compositionSourceKey } from "./dist-9fcsrFU3.mjs";
1
+ import { Ar as errMsg, Cr as compositionSourceKey } from "./dist-DsrQYcLm.mjs";
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-BKhlcYz6.js");
1
+ const require_dist = require("./dist-CyIHDLCg.js");
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -1,4 +1,4 @@
1
- import { Wr as buildSecretRef } from "./dist-9fcsrFU3.mjs";
1
+ import { Wr as buildSecretRef } from "./dist-DsrQYcLm.mjs";
2
2
  /** `secret://system/global/meshCaKey` — EC P-256 PKCS#8 PEM of the hub mesh CA. */
3
3
  var MESH_CA_KEY_REF = buildSecretRef({
4
4
  owner: "system",
@@ -1,5 +1,5 @@
1
1
  /** `secret://system/global/meshCaKey` — EC P-256 PKCS#8 PEM of the hub mesh CA. */
2
- var MESH_CA_KEY_REF = require("./dist-BKhlcYz6.js").buildSecretRef({
2
+ var MESH_CA_KEY_REF = require("./dist-CyIHDLCg.js").buildSecretRef({
3
3
  owner: "system",
4
4
  scope: { kind: "global" },
5
5
  fieldPath: "meshCaKey"
@@ -1,4 +1,4 @@
1
- import { D as DEVICE_SAN_CREDENTIAL_PREFIX, O as DEVICE_SAN_USER_PREFIX, Wr as buildSecretRef } from "./dist-9fcsrFU3.mjs";
1
+ import { D as DEVICE_SAN_CREDENTIAL_PREFIX, O as DEVICE_SAN_USER_PREFIX, Wr as buildSecretRef } from "./dist-DsrQYcLm.mjs";
2
2
  import { S as backdatedNotBefore, a as KeyUsageFlags, d as SubjectKeyIdentifierExtension, f as X509Certificate$1, m as cryptoProvider, n as BasicConstraintsExtension, o as KeyUsagesExtension, p as X509CertificateGenerator, r as ExtendedKeyUsageExtension, s as PemConverter, t as AuthorityKeyIdentifierExtension, u as SubjectAlternativeNameExtension } from "./x509.es-DK__ETIe.mjs";
3
3
  import { X509Certificate, createPublicKey, randomBytes, verify, webcrypto } from "node:crypto";
4
4
  //#region src/auth/jwt-signing-key.ts
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-BKhlcYz6.js");
1
+ const require_dist = require("./dist-CyIHDLCg.js");
2
2
  const require_x509_es = require("./x509.es-C4cOo48M.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  //#region src/auth/jwt-signing-key.ts
@@ -1,6 +1,6 @@
1
1
  let zod = require("zod");
2
2
  require("node:crypto");
3
- //#region ../types/dist/event-category-C4hVnRo8.mjs
3
+ //#region ../types/dist/event-category-BvOFi6PY.mjs
4
4
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
5
5
  EventCategory["SystemBoot"] = "system.boot";
6
6
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -64,6 +64,24 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
64
64
  * consumes this category and maps it to the `addon-crash-loop` kind.
65
65
  */
66
66
  EventCategory["AddonRunnerFailed"] = "addon.runner-failed";
67
+ /**
68
+ * A runner whose addon refused to start with a typed reason (D877) - parked
69
+ * in `refused`, never counted by the crash breaker, retried on operator
70
+ * action. One event per refusal.
71
+ */
72
+ EventCategory["AddonRunnerRefused"] = "addon.runner-refused";
73
+ /**
74
+ * A runner settled on a state (D877): `running` (READY), `crashed`, `failed` or
75
+ * `refused`. In-process telemetry for the boot check (re-evaluate while any
76
+ * runner is still pending) and the alert centre (close a recovered runner).
77
+ */
78
+ EventCategory["ProcessStateChanged"] = "process.state-changed";
79
+ /**
80
+ * The node's one-shot runner boot check (D877): planned runners against the
81
+ * process service, `degraded` when any is failed, refused or missing. The
82
+ * alert centre turns it into one alert and a direct critical push.
83
+ */
84
+ EventCategory["SystemRunnerCheck"] = "system.runner-check";
67
85
  EventCategory["AddonError"] = "addon.error";
68
86
  EventCategory["AddonPageReady"] = "addon.page-ready";
69
87
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -718,7 +736,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
718
736
  return EventCategory;
719
737
  }({});
720
738
  //#endregion
721
- //#region ../types/dist/sleep-bwsTj221.mjs
739
+ //#region ../types/dist/sleep-bgZLodYc.mjs
722
740
  /**
723
741
  * The audio chunk plane's byte format, and the ONE expansion from a coded
724
742
  * window to float samples (D455).
@@ -4607,7 +4625,7 @@ function sleep(ms) {
4607
4625
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
4608
4626
  }
4609
4627
  //#endregion
4610
- //#region ../types/dist/err-msg-DLerKiVO.mjs
4628
+ //#region ../types/dist/err-msg--2RrYiLO.mjs
4611
4629
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
4612
4630
  DeviceType["Camera"] = "camera";
4613
4631
  DeviceType["Hub"] = "hub";
@@ -4876,6 +4894,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
4876
4894
  /** Virtual HA toggle (input_boolean.*) — distinguishable from a
4877
4895
  * real Switch device for UI rendering / export adapters. */
4878
4896
  DeviceRole["BinaryHelper"] = "binary-helper";
4897
+ /** A smart plug: a `switch` whose source says it is an outlet (HA
4898
+ * `device_class: outlet`). The Alexa export shows it as a SMARTPLUG. */
4899
+ DeviceRole["Outlet"] = "outlet";
4879
4900
  /** Generic motion / occupancy / moving event source. Distinct from
4880
4901
  * the camera accessory PirSensor role: that one is a camera child;
4881
4902
  * this is a standalone HA / 3rd-party motion sensor. */
@@ -4953,7 +4974,7 @@ function errMsg(err) {
4953
4974
  return String(err);
4954
4975
  }
4955
4976
  //#endregion
4956
- //#region ../types/dist/composition-EQ9Ok0Ee.mjs
4977
+ //#region ../types/dist/composition-DOwQB_Ua.mjs
4957
4978
  var AUDIO_ENCODER_BY_CODEC = {
4958
4979
  opus: "libopus",
4959
4980
  aac: "aac",
@@ -41043,6 +41064,36 @@ var llmRuntimeCapability = {
41043
41064
  }
41044
41065
  };
41045
41066
  /**
41067
+ * The report of a one-shot "move this owner's plaintext secrets into the
41068
+ * keychain" run (D878). COUNTS only - never a value, never a ref.
41069
+ *
41070
+ * The owner runs it on its own rows, through its own write path; an operator
41071
+ * script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
41072
+ * Dry run (`apply: false`) reports what WOULD move and changes nothing.
41073
+ */
41074
+ var RawSecretMigrationInputSchema = zod.z.object({
41075
+ /** `false` (the default of the script) = report only. */
41076
+ apply: zod.z.boolean() });
41077
+ var RawSecretMigrationReportSchema = zod.z.object({
41078
+ apply: zod.z.boolean(),
41079
+ /** Rows that can carry a secret (a profile, an enrolment). */
41080
+ rows: zod.z.number().int(),
41081
+ /** Rows whose secret was plaintext when the run started. */
41082
+ raw: zod.z.number().int(),
41083
+ /** Rows that already held a keychain marker when the run started. */
41084
+ markers: zod.z.number().int(),
41085
+ /** Plaintext rows moved by THIS run (always 0 on a dry run). */
41086
+ migrated: zod.z.number().int(),
41087
+ /** Plaintext rows left in place because the move or its read-back failed. */
41088
+ failed: zod.z.number().int(),
41089
+ /** After the run: rows still holding plaintext. */
41090
+ remainingRaw: zod.z.number().int(),
41091
+ /** After the run: markers the keychain could not resolve right now. */
41092
+ unresolvedMarkers: zod.z.number().int(),
41093
+ /** True when nothing is raw and every marker resolves. */
41094
+ verified: zod.z.boolean()
41095
+ });
41096
+ /**
41046
41097
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
41047
41098
  * methods concat-fan across providers; single-row methods route to ONE
41048
41099
  * provider by the `addonId` in the call input (the notification-output
@@ -41249,6 +41300,16 @@ var llmCapability = {
41249
41300
  kind: "mutation",
41250
41301
  auth: "admin"
41251
41302
  }),
41303
+ /**
41304
+ * D878: move every profile's plaintext `apiKey` into the keychain (owner
41305
+ * `ai`), leaving a marker in the row. Dry run unless `apply`; idempotent;
41306
+ * counts only. The plaintext is cleared only after the keychain read-back
41307
+ * matched.
41308
+ */
41309
+ migrateRawSecrets: method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
41310
+ kind: "mutation",
41311
+ auth: "admin"
41312
+ }),
41252
41313
  deleteProfile: method(ProfileRefInputSchema, zod.z.void(), {
41253
41314
  kind: "mutation",
41254
41315
  auth: "admin"
@@ -54029,6 +54090,41 @@ var ServerRollbackInfoSchema = zod.z.object({
54029
54090
  atMs: zod.z.number(),
54030
54091
  reason: zod.z.string()
54031
54092
  });
54093
+ /**
54094
+ * The runner boot check (D877): the runners this node PLANNED (hub: one per
54095
+ * `resolveRunnerId` over its forked addons; agent: the runners its process
54096
+ * service holds, because only the hub plans) against the states the process
54097
+ * service reports. Kept in memory, recomputed by the same one-shot check after
54098
+ * every boot, served on `getServerPackageStatus`.
54099
+ *
54100
+ * `failed` is the D6 breaker's terminal state, `refused` a deterministic Init
54101
+ * refusal (an addon that said "I will not start, and here is why"), `missing` a
54102
+ * planned runner the process service has no entry for.
54103
+ */
54104
+ var RunnerRefusalSchema = zod.z.object({
54105
+ runnerId: zod.z.string(),
54106
+ addonIds: zod.z.array(zod.z.string()),
54107
+ reason: zod.z.string()
54108
+ });
54109
+ var RunnerBootCheckSchema = zod.z.object({
54110
+ checkedAtMs: zod.z.number(),
54111
+ /** Runners planned for this node. */
54112
+ expected: zod.z.number(),
54113
+ /** Planned runners whose process is `running`. */
54114
+ running: zod.z.number(),
54115
+ failed: zod.z.array(zod.z.string()),
54116
+ refused: zod.z.array(RunnerRefusalSchema),
54117
+ missing: zod.z.array(zod.z.string()),
54118
+ /**
54119
+ * Runners still on their way: `starting`, or `crashed` waiting on a backoff
54120
+ * respawn. The check is FINAL only when this is empty; until then nothing is
54121
+ * pushed and the verdict is re-evaluated on the next runner state change.
54122
+ * Optional for version skew (absent = settled).
54123
+ */
54124
+ pending: zod.z.array(zod.z.string()).optional(),
54125
+ /** True when the plan is the hub's (`missing` is then meaningful); false on an agent. */
54126
+ planKnown: zod.z.boolean()
54127
+ });
54032
54128
  var ServerPackageStatusSchema = zod.z.object({
54033
54129
  /** Root package name (`@camstack/server` on the hub). */
54034
54130
  packageName: zod.z.string(),
@@ -54091,7 +54187,14 @@ var ServerPackageStatusSchema = zod.z.object({
54091
54187
  * for version skew: an older provider's payload simply omits it, and an
54092
54188
  * absent wrapper is unknown — never `native`.
54093
54189
  */
54094
- wrapper: WrapperIdentitySchema.optional()
54190
+ wrapper: WrapperIdentitySchema.optional(),
54191
+ /**
54192
+ * What this node PLANNED to run against what its process service reports
54193
+ * (D877). Absent until the one-shot boot check has run (~60 s after boot) and
54194
+ * on a provider that predates it. Absent is "not checked yet", never "all
54195
+ * well": a consumer that needs the answer treats it as pending.
54196
+ */
54197
+ runners: RunnerBootCheckSchema.optional()
54095
54198
  });
54096
54199
  var ServerUpdateCheckResultSchema = zod.z.object({
54097
54200
  packageName: zod.z.string(),
@@ -54142,6 +54245,13 @@ var ServerUpdateOutcomeSchema = zod.z.enum([
54142
54245
  "refused",
54143
54246
  "failed"
54144
54247
  ]);
54248
+ /** One addon the pre-flight found the target version would refuse (D877). */
54249
+ var UpdateBlockerSchema = zod.z.object({
54250
+ addonId: zod.z.string(),
54251
+ reason: zod.z.string(),
54252
+ /** What the operator does about it. */
54253
+ remedy: zod.z.string()
54254
+ });
54145
54255
  var ServerUpdateActionResultSchema = zod.z.object({
54146
54256
  accepted: zod.z.boolean(),
54147
54257
  targetVersion: zod.z.string().nullable(),
@@ -54159,7 +54269,13 @@ var ServerUpdateActionResultSchema = zod.z.object({
54159
54269
  * The failure itself, verbatim enough to act on (the npm output for a
54160
54270
  * staging install). Non-null only for `failed`.
54161
54271
  */
54162
- error: zod.z.string().nullable().optional()
54272
+ error: zod.z.string().nullable().optional(),
54273
+ /**
54274
+ * The addons the target version would refuse to start on this node's live
54275
+ * store (D877), present when the pre-flight refused the update
54276
+ * (`reason: 'addon-would-refuse'`). Optional for version skew.
54277
+ */
54278
+ blockers: zod.z.array(UpdateBlockerSchema).optional()
54163
54279
  });
54164
54280
  var serverManagementCapability = {
54165
54281
  name: "server-management",
@@ -54171,9 +54287,16 @@ var serverManagementCapability = {
54171
54287
  kind: "mutation",
54172
54288
  auth: "admin"
54173
54289
  }),
54174
- applyServerUpdate: method(zod.z.object({
54175
- /** Explicit target version; omitted = latest from the registry. */
54176
- version: zod.z.string().optional() }), ServerUpdateActionResultSchema, {
54290
+ applyServerUpdate: method(zod.z.object({
54291
+ /** Explicit target version; omitted = latest from the registry. */
54292
+ version: zod.z.string().optional(),
54293
+ /**
54294
+ * Apply even though the pre-flight (D877) found addons the target would
54295
+ * refuse to start. Off by default: those addons stay down until the
54296
+ * remedy is run, which is the incident this gate exists to prevent.
54297
+ */
54298
+ acknowledgeRefusals: zod.z.boolean().optional()
54299
+ }), ServerUpdateActionResultSchema, {
54177
54300
  kind: "mutation",
54178
54301
  auth: "admin",
54179
54302
  timeoutMs: 16 * 6e4
@@ -57495,7 +57618,9 @@ var ManifestShapeSchema = zod.z.object({
57495
57618
  var AddonProcessSchema = zod.z.object({
57496
57619
  pid: zod.z.number().optional(),
57497
57620
  mode: zod.z.string(),
57498
- state: zod.z.string()
57621
+ state: zod.z.string(),
57622
+ /** Why the runner is `refused` (an addon's own words), when it is (D877). */
57623
+ reason: zod.z.string().optional()
57499
57624
  });
57500
57625
  /**
57501
57626
  * Per-addon health snapshot from the kernel's AddonHealthMonitor.
@@ -59183,6 +59308,12 @@ var ClimateControlStatusSchema = zod.z.object({
59183
59308
  /** Horizontal louver swing on/off. Null when the device has no
59184
59309
  * horizontal swing surface (gate with `DeviceFeature.ClimateSwingHorizontal`). */
59185
59310
  swingHorizontal: zod.z.boolean().nullable(),
59311
+ /** Lowest setpoint the device accepts, Celsius. Absent / null = not reported. */
59312
+ minTemp: zod.z.number().nullable().optional(),
59313
+ /** Highest setpoint the device accepts, Celsius. Absent / null = not reported. */
59314
+ maxTemp: zod.z.number().nullable().optional(),
59315
+ /** Setpoint granularity, Celsius (0.5, 1). Absent / null = not reported. */
59316
+ tempStep: zod.z.number().positive().nullable().optional(),
59186
59317
  /** Ms epoch when the slice was last updated (push or command). */
59187
59318
  lastFetchedAt: zod.z.number()
59188
59319
  });
@@ -70095,6 +70226,16 @@ var userManagementCapability = {
70095
70226
  access: "delete"
70096
70227
  }),
70097
70228
  getTotpStatus: method(zod.z.object({ userId: zod.z.string() }), TotpStatusSchema, { auth: "admin" }),
70229
+ /**
70230
+ * D878: move every TOTP seed stored in plaintext into the keychain (owner
70231
+ * `system`), leaving a marker in the row. Dry run unless `apply`;
70232
+ * idempotent; counts only.
70233
+ */
70234
+ migrateRawSecrets: method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
70235
+ kind: "mutation",
70236
+ auth: "admin",
70237
+ access: "create"
70238
+ }),
70098
70239
  verifyTotp: method(zod.z.object({
70099
70240
  userId: zod.z.string(),
70100
70241
  code: zod.z.string()
@@ -76474,6 +76615,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
76474
76615
  addonId: null,
76475
76616
  access: "view"
76476
76617
  },
76618
+ "llm.migrateRawSecrets": {
76619
+ capName: "llm",
76620
+ capScope: "system",
76621
+ addonId: null,
76622
+ access: "create"
76623
+ },
76477
76624
  "llm.resolveModelRef": {
76478
76625
  capName: "llm",
76479
76626
  capScope: "system",
@@ -81016,6 +81163,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
81016
81163
  addonId: null,
81017
81164
  access: "view"
81018
81165
  },
81166
+ "userManagement.migrateRawSecrets": {
81167
+ capName: "user-management",
81168
+ capScope: "system",
81169
+ addonId: null,
81170
+ access: "create"
81171
+ },
81019
81172
  "userManagement.oauthExchangeCode": {
81020
81173
  capName: "user-management",
81021
81174
  capScope: "system",
@@ -87149,6 +87302,12 @@ Object.defineProperty(exports, "looseSchema", {
87149
87302
  return looseSchema;
87150
87303
  }
87151
87304
  });
87305
+ Object.defineProperty(exports, "makeSecretMarker", {
87306
+ enumerable: true,
87307
+ get: function() {
87308
+ return makeSecretMarker;
87309
+ }
87310
+ });
87152
87311
  Object.defineProperty(exports, "mayReadLocation", {
87153
87312
  enumerable: true,
87154
87313
  get: function() {