@camstack/addon-post-analysis 1.2.371 → 1.2.373

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.
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
- //#region ../types/dist/event-category-C4hVnRo8.mjs
2
+ //#region ../types/dist/event-category-BvOFi6PY.mjs
3
3
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4
4
  EventCategory["SystemBoot"] = "system.boot";
5
5
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -63,6 +63,24 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
63
63
  * consumes this category and maps it to the `addon-crash-loop` kind.
64
64
  */
65
65
  EventCategory["AddonRunnerFailed"] = "addon.runner-failed";
66
+ /**
67
+ * A runner whose addon refused to start with a typed reason (D877) - parked
68
+ * in `refused`, never counted by the crash breaker, retried on operator
69
+ * action. One event per refusal.
70
+ */
71
+ EventCategory["AddonRunnerRefused"] = "addon.runner-refused";
72
+ /**
73
+ * A runner settled on a state (D877): `running` (READY), `crashed`, `failed` or
74
+ * `refused`. In-process telemetry for the boot check (re-evaluate while any
75
+ * runner is still pending) and the alert centre (close a recovered runner).
76
+ */
77
+ EventCategory["ProcessStateChanged"] = "process.state-changed";
78
+ /**
79
+ * The node's one-shot runner boot check (D877): planned runners against the
80
+ * process service, `degraded` when any is failed, refused or missing. The
81
+ * alert centre turns it into one alert and a direct critical push.
82
+ */
83
+ EventCategory["SystemRunnerCheck"] = "system.runner-check";
66
84
  EventCategory["AddonError"] = "addon.error";
67
85
  EventCategory["AddonPageReady"] = "addon.page-ready";
68
86
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5459,7 +5477,7 @@ var ZodIssueCode = {
5459
5477
  var ZodFirstPartyTypeKind;
5460
5478
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5461
5479
  //#endregion
5462
- //#region ../types/dist/sleep-DRqxtc0C.mjs
5480
+ //#region ../types/dist/sleep-bgZLodYc.mjs
5463
5481
  /**
5464
5482
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5465
5483
  * window to float samples (D455).
@@ -6710,7 +6728,6 @@ function createHandle(raw, opts) {
6710
6728
  const writeAddon = (patch) => write("addon", opts.addonTree(), void 0, patch, () => readStoredAddonBlob(raw), (p) => raw.writeAddonStore(p));
6711
6729
  const readAddonStoreResult = raw.readAddonStoreResult;
6712
6730
  const readAddonStoreKeyResult = raw.readAddonStoreKeyResult;
6713
- const readDeviceStoreBatch = raw.readDeviceStoreBatch;
6714
6731
  const overrides = {
6715
6732
  readAddonStore: async () => resolveRead("addon", await raw.readAddonStore()),
6716
6733
  ...readAddonStoreResult !== void 0 ? { readAddonStoreResult: async () => {
@@ -6734,12 +6751,12 @@ function createHandle(raw, opts) {
6734
6751
  };
6735
6752
  } } : {},
6736
6753
  readDeviceStore: async (deviceId) => resolveRead(`device:${deviceId}`, await raw.readDeviceStore(deviceId)),
6737
- ...readDeviceStoreBatch !== void 0 ? { readDeviceStoreBatch: async (deviceIds) => {
6738
- const rows = await readDeviceStoreBatch.call(raw, deviceIds);
6754
+ readDeviceStoreBatch: async (deviceIds) => {
6755
+ const rows = await raw.readDeviceStoreBatch(deviceIds);
6739
6756
  const out = /* @__PURE__ */ new Map();
6740
6757
  for (const [deviceId, blob] of rows) out.set(deviceId, await resolveRead(`device:${deviceId}`, blob));
6741
6758
  return out;
6742
- } } : {},
6759
+ },
6743
6760
  writeAddonStore: async (patch) => {
6744
6761
  await writeAddon(patch);
6745
6762
  },
@@ -7566,7 +7583,7 @@ var BaseAddon = class {
7566
7583
  return this._addonSecretTree;
7567
7584
  }
7568
7585
  deviceSecretTree() {
7569
- this._deviceSecretTree ??= secretTreeFromSchema(this.deviceSettingsSchema());
7586
+ this._deviceSecretTree ??= mergeSecretStatePaths(secretTreeFromSchema(this.deviceSettingsSchema()), this.secretStatePaths);
7570
7587
  return this._deviceSecretTree;
7571
7588
  }
7572
7589
  /**
@@ -7642,42 +7659,135 @@ var BaseAddon = class {
7642
7659
  this[timerOf] = timer;
7643
7660
  }
7644
7661
  /**
7645
- * Wrap `ctx.settings.readAddonStore()` with a short retry budget so a
7646
- * transient settings-store outage (mid-restart of sqlite-settings, tsx-watch
7647
- * swap, or any race where the SqliteSettingsBackend is between shutdown and
7648
- * re-initialize) doesn't propagate up into `initialize()` and leave the
7662
+ * Wrap `ctx.settings.readAddonStore()` with a retry budget so a transient
7663
+ * settings-store outage doesn't propagate up into `initialize()` and leave the
7649
7664
  * addon permanently broken.
7650
7665
  *
7651
- * Retry only the two known infra fingerprints. Anything else propagates so
7652
- * real bugs surface immediately. After the budget expires we fall back to
7653
- * `{}` (defaults) — the addon's first successful patch will rehydrate.
7666
+ * Two kinds of outage, two budgets:
7667
+ * - the store's own restart fingerprints (`SqliteSettingsBackend not
7668
+ * initialized`, `provider not available`): a short budget, then the addon
7669
+ * falls back to `{}` (defaults) - its first successful patch rehydrates;
7670
+ * - a TRANSPORT failure (the hub is restarting while this runner boots:
7671
+ * `discovery deadline exceeded`, `parent could not route`, a refused or
7672
+ * timed-out connection). Since D870 a runner's settings read THROWS instead
7673
+ * of answering `{}`, so without a budget a hub restart ends in a respawn
7674
+ * loop. A long, bounded budget; only after it the error propagates - the
7675
+ * addon never runs on defaults for a store it could not ask.
7676
+ * Anything else propagates immediately so real bugs surface.
7654
7677
  */
7655
7678
  async readAddonStoreWithRetry() {
7656
7679
  const settings = this.rawSettings();
7657
7680
  if (!settings) return {};
7658
- const delaysMs = [
7659
- 150,
7660
- 350,
7661
- 600,
7662
- 900
7663
- ];
7664
7681
  let lastErr;
7665
- for (let attempt = 0; attempt <= delaysMs.length; attempt++) try {
7682
+ for (let attempt = 0;; attempt++) try {
7666
7683
  const stored = await settings.readAddonStore() ?? {};
7667
7684
  this.settingsStoreReady = true;
7668
7685
  return stored;
7669
7686
  } catch (err) {
7670
7687
  lastErr = err;
7671
- const msg = err instanceof Error ? err.message : String(err);
7672
- if (!(msg.includes("SqliteSettingsBackend not initialized") || msg.includes("provider not available"))) throw err;
7673
- if (attempt === delaysMs.length) break;
7674
- await new Promise((r) => setTimeout(r, delaysMs[attempt]));
7688
+ const kind = classifyStoreError(err);
7689
+ if (kind === "permanent") throw err;
7690
+ const delay = (kind === "transport" ? TRANSPORT_RETRY_DELAYS_MS : RESTART_RETRY_DELAYS_MS)[attempt];
7691
+ if (delay === void 0) {
7692
+ if (kind === "transport") throw err;
7693
+ break;
7694
+ }
7695
+ await new Promise((r) => setTimeout(r, delay));
7675
7696
  }
7676
7697
  this.settingsStoreReady = false;
7677
7698
  this._ctx?.logger?.warn?.("readAddonStore: settings-store unavailable after retries — using defaults", { meta: { error: lastErr instanceof Error ? lastErr.message : String(lastErr) } });
7678
7699
  return {};
7679
7700
  }
7680
7701
  };
7702
+ /** The settings store's own restart fingerprints. */
7703
+ var RESTART_RETRY_DELAYS_MS = [
7704
+ 150,
7705
+ 350,
7706
+ 600,
7707
+ 900
7708
+ ];
7709
+ /** A hub restarting under a booting runner: ~100 s in total. */
7710
+ var TRANSPORT_RETRY_DELAYS_MS = [
7711
+ 150,
7712
+ 350,
7713
+ 600,
7714
+ 900,
7715
+ 2e3,
7716
+ 5e3,
7717
+ 1e4,
7718
+ 2e4,
7719
+ 3e4,
7720
+ 3e4
7721
+ ];
7722
+ var RESTART_FINGERPRINTS = ["SqliteSettingsBackend not initialized", "provider not available"];
7723
+ /** Node / socket error codes of a connection that did not happen or broke. */
7724
+ var TRANSPORT_CODES = new Set([
7725
+ "ECONNREFUSED",
7726
+ "ECONNRESET",
7727
+ "ETIMEDOUT",
7728
+ "EPIPE",
7729
+ "EHOSTUNREACH",
7730
+ "ENETUNREACH"
7731
+ ]);
7732
+ /** tRPC error codes that mean "the other side is not answering now", not "your call is wrong". */
7733
+ var UNAVAILABLE_TRPC_CODES = new Set([
7734
+ "TIMEOUT",
7735
+ "SERVICE_UNAVAILABLE",
7736
+ "BAD_GATEWAY",
7737
+ "GATEWAY_TIMEOUT"
7738
+ ]);
7739
+ /** The exact phrases OUR transport raises when it cannot reach the hub. */
7740
+ var TRANSPORT_PHRASES = [
7741
+ "discovery deadline exceeded",
7742
+ "parent could not route child unowned cap call",
7743
+ "UDS request timed out after",
7744
+ "channel closed"
7745
+ ];
7746
+ /** Moleculer error `type`s of a call that could not be served right now. */
7747
+ var MOLECULER_TRANSIENT_TYPES = new Set([
7748
+ "REQUEST_TIMEOUT",
7749
+ "SERVICE_NOT_FOUND",
7750
+ "SERVICE_NOT_AVAILABLE",
7751
+ "REQUEST_REJECTED",
7752
+ "BROKER_DISCONNECTED"
7753
+ ]);
7754
+ function stringProp(value, key) {
7755
+ if (typeof value !== "object" || value === null) return void 0;
7756
+ const found = Reflect.get(value, key);
7757
+ return typeof found === "string" ? found : void 0;
7758
+ }
7759
+ /** The code an error carries: its own, its cause's, or a tRPC `data.code`. */
7760
+ function errorCode(err) {
7761
+ const out = {};
7762
+ const cause = typeof err === "object" && err !== null ? Reflect.get(err, "cause") : void 0;
7763
+ const data = typeof err === "object" && err !== null ? Reflect.get(err, "data") : void 0;
7764
+ const node = stringProp(err, "code") ?? stringProp(cause, "code");
7765
+ if (node !== void 0) out.node = node;
7766
+ const trpc = stringProp(data, "code");
7767
+ if (trpc !== void 0) out.trpc = trpc;
7768
+ return out;
7769
+ }
7770
+ /**
7771
+ * Is a settings read failure worth retrying, and with which budget? Only
7772
+ * EXPLICIT signals count: a socket error code, a tRPC "unavailable" code, or
7773
+ * one of the exact phrases our own transport raises. A message that merely
7774
+ * contains "timed out" or "unreachable" is not evidence of anything, and
7775
+ * `settings store not wired` is a wiring bug that retrying cannot fix.
7776
+ */
7777
+ function classifyStoreError(err) {
7778
+ const message = err instanceof Error ? err.message : String(err);
7779
+ if (RESTART_FINGERPRINTS.some((f) => message.includes(f))) return "restart";
7780
+ const code = errorCode(err);
7781
+ if (code.node !== void 0 && TRANSPORT_CODES.has(code.node)) return "transport";
7782
+ if (code.trpc !== void 0 && UNAVAILABLE_TRPC_CODES.has(code.trpc)) return "transport";
7783
+ if (typeof err === "object" && err !== null) {
7784
+ if (Reflect.get(err, "retryable") === true) return "transport";
7785
+ const type = stringProp(err, "type");
7786
+ if (type !== void 0 && MOLECULER_TRANSIENT_TYPES.has(type)) return "transport";
7787
+ }
7788
+ if (TRANSPORT_PHRASES.some((f) => message.includes(f))) return "transport";
7789
+ return "permanent";
7790
+ }
7681
7791
  /**
7682
7792
  * Collect the keys of every field marked `perNode: true`, recursing into
7683
7793
  * layout containers (`group` fields and `sub-tabs` tabs) the same way
@@ -8518,7 +8628,7 @@ function sleep(ms) {
8518
8628
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
8519
8629
  }
8520
8630
  //#endregion
8521
- //#region ../types/dist/err-msg-DLerKiVO.mjs
8631
+ //#region ../types/dist/err-msg--2RrYiLO.mjs
8522
8632
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8523
8633
  DeviceType["Camera"] = "camera";
8524
8634
  DeviceType["Hub"] = "hub";
@@ -8787,6 +8897,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8787
8897
  /** Virtual HA toggle (input_boolean.*) — distinguishable from a
8788
8898
  * real Switch device for UI rendering / export adapters. */
8789
8899
  DeviceRole["BinaryHelper"] = "binary-helper";
8900
+ /** A smart plug: a `switch` whose source says it is an outlet (HA
8901
+ * `device_class: outlet`). The Alexa export shows it as a SMARTPLUG. */
8902
+ DeviceRole["Outlet"] = "outlet";
8790
8903
  /** Generic motion / occupancy / moving event source. Distinct from
8791
8904
  * the camera accessory PirSensor role: that one is a camera child;
8792
8905
  * this is a standalone HA / 3rd-party motion sensor. */
@@ -8864,7 +8977,7 @@ function errMsg(err) {
8864
8977
  return String(err);
8865
8978
  }
8866
8979
  //#endregion
8867
- //#region ../types/dist/composition-EQ9Ok0Ee.mjs
8980
+ //#region ../types/dist/composition-DOwQB_Ua.mjs
8868
8981
  /**
8869
8982
  * Deterministic SHA-256 hash of an arbitrary serialisable value. The
8870
8983
  * canonical form sorts object keys alphabetically at every depth so two
@@ -17207,6 +17320,28 @@ id: union([string(), number()]) }), {
17207
17320
  kind: "mutation",
17208
17321
  auth: "admin"
17209
17322
  });
17323
+ /** One table of the settings database. */
17324
+ var StorageTableSchema = object({
17325
+ /** The table's full name, e.g. `recorder:addon-settings` or `addon-device-settings`. */
17326
+ name: string(),
17327
+ /** The owner prefix of a scoped name (`recorder` for `recorder:addon-settings`), else null. */
17328
+ owner: string().nullable(),
17329
+ rows: number().int().nonnegative(),
17330
+ /** Bytes the table's pages occupy (`dbstat`); null when the engine cannot measure. */
17331
+ bytes: number().int().nonnegative().nullable(),
17332
+ /** Declared by an addon since this engine process started (a running addon claims it). */
17333
+ declaredThisBoot: boolean()
17334
+ });
17335
+ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: array(StorageTableSchema) }), { auth: "admin" }), method(object({
17336
+ collection: string().min(1),
17337
+ expectRows: number().int().nonnegative()
17338
+ }), object({
17339
+ dropped: literal(true),
17340
+ rows: number().int().nonnegative()
17341
+ }), {
17342
+ kind: "mutation",
17343
+ auth: "admin"
17344
+ });
17210
17345
  /**
17211
17346
  * `keychain` — the hub's encrypted store of secret values (D787).
17212
17347
  *
@@ -17748,6 +17883,16 @@ method(object({}), KeychainStatusSchema, { auth: "admin" }), method(object({}),
17748
17883
  kind: "mutation",
17749
17884
  auth: "admin",
17750
17885
  caller: "required"
17886
+ }), method(object({
17887
+ ref: string().min(1),
17888
+ value: string().min(1)
17889
+ }), object({
17890
+ ref: string(),
17891
+ version: number().int()
17892
+ }), {
17893
+ kind: "mutation",
17894
+ auth: "admin",
17895
+ caller: "required"
17751
17896
  }), method(object({ refs: array(string().min(1)).max(1e3) }), object({
17752
17897
  deleted: array(string()).readonly(),
17753
17898
  kept: array(object({
@@ -40341,6 +40486,36 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
40341
40486
  timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
40342
40487
  });
40343
40488
  /**
40489
+ * The report of a one-shot "move this owner's plaintext secrets into the
40490
+ * keychain" run (D878). COUNTS only - never a value, never a ref.
40491
+ *
40492
+ * The owner runs it on its own rows, through its own write path; an operator
40493
+ * script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
40494
+ * Dry run (`apply: false`) reports what WOULD move and changes nothing.
40495
+ */
40496
+ var RawSecretMigrationInputSchema = object({
40497
+ /** `false` (the default of the script) = report only. */
40498
+ apply: boolean() });
40499
+ var RawSecretMigrationReportSchema = object({
40500
+ apply: boolean(),
40501
+ /** Rows that can carry a secret (a profile, an enrolment). */
40502
+ rows: number().int(),
40503
+ /** Rows whose secret was plaintext when the run started. */
40504
+ raw: number().int(),
40505
+ /** Rows that already held a keychain marker when the run started. */
40506
+ markers: number().int(),
40507
+ /** Plaintext rows moved by THIS run (always 0 on a dry run). */
40508
+ migrated: number().int(),
40509
+ /** Plaintext rows left in place because the move or its read-back failed. */
40510
+ failed: number().int(),
40511
+ /** After the run: rows still holding plaintext. */
40512
+ remainingRaw: number().int(),
40513
+ /** After the run: markers the keychain could not resolve right now. */
40514
+ unresolvedMarkers: number().int(),
40515
+ /** True when nothing is raw and every marker resolves. */
40516
+ verified: boolean()
40517
+ });
40518
+ /**
40344
40519
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
40345
40520
  * methods concat-fan across providers; single-row methods route to ONE
40346
40521
  * provider by the `addonId` in the call input (the notification-output
@@ -40525,6 +40700,9 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
40525
40700
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
40526
40701
  kind: "mutation",
40527
40702
  auth: "admin"
40703
+ }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
40704
+ kind: "mutation",
40705
+ auth: "admin"
40528
40706
  }), method(ProfileRefInputSchema, _void(), {
40529
40707
  kind: "mutation",
40530
40708
  auth: "admin"
@@ -52856,6 +53034,41 @@ var ServerRollbackInfoSchema = object({
52856
53034
  atMs: number(),
52857
53035
  reason: string()
52858
53036
  });
53037
+ /**
53038
+ * The runner boot check (D877): the runners this node PLANNED (hub: one per
53039
+ * `resolveRunnerId` over its forked addons; agent: the runners its process
53040
+ * service holds, because only the hub plans) against the states the process
53041
+ * service reports. Kept in memory, recomputed by the same one-shot check after
53042
+ * every boot, served on `getServerPackageStatus`.
53043
+ *
53044
+ * `failed` is the D6 breaker's terminal state, `refused` a deterministic Init
53045
+ * refusal (an addon that said "I will not start, and here is why"), `missing` a
53046
+ * planned runner the process service has no entry for.
53047
+ */
53048
+ var RunnerRefusalSchema = object({
53049
+ runnerId: string(),
53050
+ addonIds: array(string()),
53051
+ reason: string()
53052
+ });
53053
+ var RunnerBootCheckSchema = object({
53054
+ checkedAtMs: number(),
53055
+ /** Runners planned for this node. */
53056
+ expected: number(),
53057
+ /** Planned runners whose process is `running`. */
53058
+ running: number(),
53059
+ failed: array(string()),
53060
+ refused: array(RunnerRefusalSchema),
53061
+ missing: array(string()),
53062
+ /**
53063
+ * Runners still on their way: `starting`, or `crashed` waiting on a backoff
53064
+ * respawn. The check is FINAL only when this is empty; until then nothing is
53065
+ * pushed and the verdict is re-evaluated on the next runner state change.
53066
+ * Optional for version skew (absent = settled).
53067
+ */
53068
+ pending: array(string()).optional(),
53069
+ /** True when the plan is the hub's (`missing` is then meaningful); false on an agent. */
53070
+ planKnown: boolean()
53071
+ });
52859
53072
  var ServerPackageStatusSchema = object({
52860
53073
  /** Root package name (`@camstack/server` on the hub). */
52861
53074
  packageName: string(),
@@ -52918,7 +53131,14 @@ var ServerPackageStatusSchema = object({
52918
53131
  * for version skew: an older provider's payload simply omits it, and an
52919
53132
  * absent wrapper is unknown — never `native`.
52920
53133
  */
52921
- wrapper: WrapperIdentitySchema.optional()
53134
+ wrapper: WrapperIdentitySchema.optional(),
53135
+ /**
53136
+ * What this node PLANNED to run against what its process service reports
53137
+ * (D877). Absent until the one-shot boot check has run (~60 s after boot) and
53138
+ * on a provider that predates it. Absent is "not checked yet", never "all
53139
+ * well": a consumer that needs the answer treats it as pending.
53140
+ */
53141
+ runners: RunnerBootCheckSchema.optional()
52922
53142
  });
52923
53143
  var ServerUpdateCheckResultSchema = object({
52924
53144
  packageName: string(),
@@ -52969,6 +53189,13 @@ var ServerUpdateOutcomeSchema = _enum([
52969
53189
  "refused",
52970
53190
  "failed"
52971
53191
  ]);
53192
+ /** One addon the pre-flight found the target version would refuse (D877). */
53193
+ var UpdateBlockerSchema = object({
53194
+ addonId: string(),
53195
+ reason: string(),
53196
+ /** What the operator does about it. */
53197
+ remedy: string()
53198
+ });
52972
53199
  var ServerUpdateActionResultSchema = object({
52973
53200
  accepted: boolean(),
52974
53201
  targetVersion: string().nullable(),
@@ -52986,14 +53213,27 @@ var ServerUpdateActionResultSchema = object({
52986
53213
  * The failure itself, verbatim enough to act on (the npm output for a
52987
53214
  * staging install). Non-null only for `failed`.
52988
53215
  */
52989
- error: string().nullable().optional()
53216
+ error: string().nullable().optional(),
53217
+ /**
53218
+ * The addons the target version would refuse to start on this node's live
53219
+ * store (D877), present when the pre-flight refused the update
53220
+ * (`reason: 'addon-would-refuse'`). Optional for version skew.
53221
+ */
53222
+ blockers: array(UpdateBlockerSchema).optional()
52990
53223
  });
52991
53224
  method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
52992
53225
  kind: "mutation",
52993
53226
  auth: "admin"
52994
- }), method(object({
52995
- /** Explicit target version; omitted = latest from the registry. */
52996
- version: string().optional() }), ServerUpdateActionResultSchema, {
53227
+ }), method(object({
53228
+ /** Explicit target version; omitted = latest from the registry. */
53229
+ version: string().optional(),
53230
+ /**
53231
+ * Apply even though the pre-flight (D877) found addons the target would
53232
+ * refuse to start. Off by default: those addons stay down until the
53233
+ * remedy is run, which is the incident this gate exists to prevent.
53234
+ */
53235
+ acknowledgeRefusals: boolean().optional()
53236
+ }), ServerUpdateActionResultSchema, {
52997
53237
  kind: "mutation",
52998
53238
  auth: "admin",
52999
53239
  timeoutMs: 16 * 6e4
@@ -55473,7 +55713,9 @@ var ManifestShapeSchema = object({
55473
55713
  var AddonProcessSchema = object({
55474
55714
  pid: number().optional(),
55475
55715
  mode: string(),
55476
- state: string()
55716
+ state: string(),
55717
+ /** Why the runner is `refused` (an addon's own words), when it is (D877). */
55718
+ reason: string().optional()
55477
55719
  });
55478
55720
  /**
55479
55721
  * Per-addon health snapshot from the kernel's AddonHealthMonitor.
@@ -56889,6 +57131,12 @@ var ClimateControlStatusSchema = object({
56889
57131
  /** Horizontal louver swing on/off. Null when the device has no
56890
57132
  * horizontal swing surface (gate with `DeviceFeature.ClimateSwingHorizontal`). */
56891
57133
  swingHorizontal: boolean().nullable(),
57134
+ /** Lowest setpoint the device accepts, Celsius. Absent / null = not reported. */
57135
+ minTemp: number().nullable().optional(),
57136
+ /** Highest setpoint the device accepts, Celsius. Absent / null = not reported. */
57137
+ maxTemp: number().nullable().optional(),
57138
+ /** Setpoint granularity, Celsius (0.5, 1). Absent / null = not reported. */
57139
+ tempStep: number().positive().nullable().optional(),
56892
57140
  /** Ms epoch when the slice was last updated (push or command). */
56893
57141
  lastFetchedAt: number()
56894
57142
  });
@@ -66424,7 +66672,11 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
66424
66672
  kind: "mutation",
66425
66673
  auth: "admin",
66426
66674
  access: "delete"
66427
- }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(object({
66675
+ }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
66676
+ kind: "mutation",
66677
+ auth: "admin",
66678
+ access: "create"
66679
+ }), method(object({
66428
66680
  userId: string(),
66429
66681
  code: string()
66430
66682
  }), object({ valid: boolean() }), {
@@ -71812,6 +72064,12 @@ Object.freeze({
71812
72064
  addonId: null,
71813
72065
  access: "create"
71814
72066
  },
72067
+ "keychainAdmin.importSecret": {
72068
+ capName: "keychain-admin",
72069
+ capScope: "system",
72070
+ addonId: null,
72071
+ access: "create"
72072
+ },
71815
72073
  "keychainAdmin.listAudit": {
71816
72074
  capName: "keychain-admin",
71817
72075
  capScope: "system",
@@ -71980,6 +72238,12 @@ Object.freeze({
71980
72238
  addonId: null,
71981
72239
  access: "view"
71982
72240
  },
72241
+ "llm.migrateRawSecrets": {
72242
+ capName: "llm",
72243
+ capScope: "system",
72244
+ addonId: null,
72245
+ access: "create"
72246
+ },
71983
72247
  "llm.resolveModelRef": {
71984
72248
  capName: "llm",
71985
72249
  capScope: "system",
@@ -75598,6 +75862,18 @@ Object.freeze({
75598
75862
  addonId: null,
75599
75863
  access: "create"
75600
75864
  },
75865
+ "storageAdmin.dropCollection": {
75866
+ capName: "storage-admin",
75867
+ capScope: "system",
75868
+ addonId: null,
75869
+ access: "delete"
75870
+ },
75871
+ "storageAdmin.listTables": {
75872
+ capName: "storage-admin",
75873
+ capScope: "system",
75874
+ addonId: null,
75875
+ access: "view"
75876
+ },
75601
75877
  "storageEvictable.evict": {
75602
75878
  capName: "storage-evictable",
75603
75879
  capScope: "system",
@@ -76510,6 +76786,12 @@ Object.freeze({
76510
76786
  addonId: null,
76511
76787
  access: "view"
76512
76788
  },
76789
+ "userManagement.migrateRawSecrets": {
76790
+ capName: "user-management",
76791
+ capScope: "system",
76792
+ addonId: null,
76793
+ access: "create"
76794
+ },
76513
76795
  "userManagement.oauthExchangeCode": {
76514
76796
  capName: "user-management",
76515
76797
  capScope: "system",
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_clip_model_registry = require("../clip-model-registry-aWakBGm3.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-Cy2RokDO.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_clip_model_registry.__toESM(node_fs);
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { $t as PoolMemoryWatchdog, Ii as normalizeNodeId, Oi as BaseAddon, Rr as parseProcStatus, Xr as resolvePoolMemoryPolicy, a as CLIP_EMBEDDING_STEP_ID, i as CLIP_TEXT_MODELS, ir as embeddingModelFailedError, l as resolveClusterModelPin, n as DEFAULT_CLIP_MODEL, or as embeddingRequirementsFailedError, r as CLIP_IMAGE_MODELS, rr as embeddingEncoderCapability, sr as embeddingRequirementsUnavailableError, t as BUILTIN_CLIP_MODELS } from "../clip-model-registry-DnJSHCsn.mjs";
1
+ import { $t as PoolMemoryWatchdog, Ii as normalizeNodeId, Oi as BaseAddon, Rr as parseProcStatus, Xr as resolvePoolMemoryPolicy, a as CLIP_EMBEDDING_STEP_ID, i as CLIP_TEXT_MODELS, ir as embeddingModelFailedError, l as resolveClusterModelPin, n as DEFAULT_CLIP_MODEL, or as embeddingRequirementsFailedError, r as CLIP_IMAGE_MODELS, rr as embeddingEncoderCapability, sr as embeddingRequirementsUnavailableError, t as BUILTIN_CLIP_MODELS } from "../clip-model-registry-jeFu3pma.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -1,8 +1,8 @@
1
1
  import { a as e, i as t, n, o as r, r as i, t as a } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-C0AuF9av.mjs";
2
2
  import { t as o } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-B3Wx5J80.mjs";
3
- import { a as s, c, i as l, n as u, o as d, r as f, s as p, t as m } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CYfz4e5v.mjs";
3
+ import { a as s, c, i as l, n as u, o as d, r as f, s as p, t as m } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Kh1uHJki.mjs";
4
4
  import { n as h, r as g, t as _ } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-Bm-iyjmq.mjs";
5
- import { t as v } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BRMRfKVO.mjs";
5
+ import { t as v } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CyYkqCmx.mjs";
6
6
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
7
7
  var y = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), b = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), x = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), S = (e) => {
8
8
  let t = x(e);
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.375",
21
+ version: "1.2.378",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_analytics_widgets",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.293",
36
+ version: "1.2.296",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",