@camstack/addon-post-analysis 1.2.372 → 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.
@@ -30,7 +30,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
30
30
  }) : target, mod));
31
31
  //#endregion
32
32
  let node_crypto = require("node:crypto");
33
- //#region ../types/dist/event-category-C4hVnRo8.mjs
33
+ //#region ../types/dist/event-category-BvOFi6PY.mjs
34
34
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
35
35
  EventCategory["SystemBoot"] = "system.boot";
36
36
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -94,6 +94,24 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
94
94
  * consumes this category and maps it to the `addon-crash-loop` kind.
95
95
  */
96
96
  EventCategory["AddonRunnerFailed"] = "addon.runner-failed";
97
+ /**
98
+ * A runner whose addon refused to start with a typed reason (D877) - parked
99
+ * in `refused`, never counted by the crash breaker, retried on operator
100
+ * action. One event per refusal.
101
+ */
102
+ EventCategory["AddonRunnerRefused"] = "addon.runner-refused";
103
+ /**
104
+ * A runner settled on a state (D877): `running` (READY), `crashed`, `failed` or
105
+ * `refused`. In-process telemetry for the boot check (re-evaluate while any
106
+ * runner is still pending) and the alert centre (close a recovered runner).
107
+ */
108
+ EventCategory["ProcessStateChanged"] = "process.state-changed";
109
+ /**
110
+ * The node's one-shot runner boot check (D877): planned runners against the
111
+ * process service, `degraded` when any is failed, refused or missing. The
112
+ * alert centre turns it into one alert and a direct critical push.
113
+ */
114
+ EventCategory["SystemRunnerCheck"] = "system.runner-check";
97
115
  EventCategory["AddonError"] = "addon.error";
98
116
  EventCategory["AddonPageReady"] = "addon.page-ready";
99
117
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5490,7 +5508,7 @@ var ZodIssueCode = {
5490
5508
  var ZodFirstPartyTypeKind;
5491
5509
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5492
5510
  //#endregion
5493
- //#region ../types/dist/sleep-bwsTj221.mjs
5511
+ //#region ../types/dist/sleep-bgZLodYc.mjs
5494
5512
  /**
5495
5513
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5496
5514
  * window to float samples (D455).
@@ -8641,7 +8659,7 @@ function sleep(ms) {
8641
8659
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
8642
8660
  }
8643
8661
  //#endregion
8644
- //#region ../types/dist/err-msg-DLerKiVO.mjs
8662
+ //#region ../types/dist/err-msg--2RrYiLO.mjs
8645
8663
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8646
8664
  DeviceType["Camera"] = "camera";
8647
8665
  DeviceType["Hub"] = "hub";
@@ -8910,6 +8928,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8910
8928
  /** Virtual HA toggle (input_boolean.*) — distinguishable from a
8911
8929
  * real Switch device for UI rendering / export adapters. */
8912
8930
  DeviceRole["BinaryHelper"] = "binary-helper";
8931
+ /** A smart plug: a `switch` whose source says it is an outlet (HA
8932
+ * `device_class: outlet`). The Alexa export shows it as a SMARTPLUG. */
8933
+ DeviceRole["Outlet"] = "outlet";
8913
8934
  /** Generic motion / occupancy / moving event source. Distinct from
8914
8935
  * the camera accessory PirSensor role: that one is a camera child;
8915
8936
  * this is a standalone HA / 3rd-party motion sensor. */
@@ -8987,7 +9008,7 @@ function errMsg(err) {
8987
9008
  return String(err);
8988
9009
  }
8989
9010
  //#endregion
8990
- //#region ../types/dist/composition-EQ9Ok0Ee.mjs
9011
+ //#region ../types/dist/composition-DOwQB_Ua.mjs
8991
9012
  /**
8992
9013
  * Deterministic SHA-256 hash of an arbitrary serialisable value. The
8993
9014
  * canonical form sorts object keys alphabetically at every depth so two
@@ -40496,6 +40517,36 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
40496
40517
  timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
40497
40518
  });
40498
40519
  /**
40520
+ * The report of a one-shot "move this owner's plaintext secrets into the
40521
+ * keychain" run (D878). COUNTS only - never a value, never a ref.
40522
+ *
40523
+ * The owner runs it on its own rows, through its own write path; an operator
40524
+ * script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
40525
+ * Dry run (`apply: false`) reports what WOULD move and changes nothing.
40526
+ */
40527
+ var RawSecretMigrationInputSchema = object({
40528
+ /** `false` (the default of the script) = report only. */
40529
+ apply: boolean() });
40530
+ var RawSecretMigrationReportSchema = object({
40531
+ apply: boolean(),
40532
+ /** Rows that can carry a secret (a profile, an enrolment). */
40533
+ rows: number().int(),
40534
+ /** Rows whose secret was plaintext when the run started. */
40535
+ raw: number().int(),
40536
+ /** Rows that already held a keychain marker when the run started. */
40537
+ markers: number().int(),
40538
+ /** Plaintext rows moved by THIS run (always 0 on a dry run). */
40539
+ migrated: number().int(),
40540
+ /** Plaintext rows left in place because the move or its read-back failed. */
40541
+ failed: number().int(),
40542
+ /** After the run: rows still holding plaintext. */
40543
+ remainingRaw: number().int(),
40544
+ /** After the run: markers the keychain could not resolve right now. */
40545
+ unresolvedMarkers: number().int(),
40546
+ /** True when nothing is raw and every marker resolves. */
40547
+ verified: boolean()
40548
+ });
40549
+ /**
40499
40550
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
40500
40551
  * methods concat-fan across providers; single-row methods route to ONE
40501
40552
  * provider by the `addonId` in the call input (the notification-output
@@ -40680,6 +40731,9 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
40680
40731
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
40681
40732
  kind: "mutation",
40682
40733
  auth: "admin"
40734
+ }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
40735
+ kind: "mutation",
40736
+ auth: "admin"
40683
40737
  }), method(ProfileRefInputSchema, _void(), {
40684
40738
  kind: "mutation",
40685
40739
  auth: "admin"
@@ -53011,6 +53065,41 @@ var ServerRollbackInfoSchema = object({
53011
53065
  atMs: number(),
53012
53066
  reason: string()
53013
53067
  });
53068
+ /**
53069
+ * The runner boot check (D877): the runners this node PLANNED (hub: one per
53070
+ * `resolveRunnerId` over its forked addons; agent: the runners its process
53071
+ * service holds, because only the hub plans) against the states the process
53072
+ * service reports. Kept in memory, recomputed by the same one-shot check after
53073
+ * every boot, served on `getServerPackageStatus`.
53074
+ *
53075
+ * `failed` is the D6 breaker's terminal state, `refused` a deterministic Init
53076
+ * refusal (an addon that said "I will not start, and here is why"), `missing` a
53077
+ * planned runner the process service has no entry for.
53078
+ */
53079
+ var RunnerRefusalSchema = object({
53080
+ runnerId: string(),
53081
+ addonIds: array(string()),
53082
+ reason: string()
53083
+ });
53084
+ var RunnerBootCheckSchema = object({
53085
+ checkedAtMs: number(),
53086
+ /** Runners planned for this node. */
53087
+ expected: number(),
53088
+ /** Planned runners whose process is `running`. */
53089
+ running: number(),
53090
+ failed: array(string()),
53091
+ refused: array(RunnerRefusalSchema),
53092
+ missing: array(string()),
53093
+ /**
53094
+ * Runners still on their way: `starting`, or `crashed` waiting on a backoff
53095
+ * respawn. The check is FINAL only when this is empty; until then nothing is
53096
+ * pushed and the verdict is re-evaluated on the next runner state change.
53097
+ * Optional for version skew (absent = settled).
53098
+ */
53099
+ pending: array(string()).optional(),
53100
+ /** True when the plan is the hub's (`missing` is then meaningful); false on an agent. */
53101
+ planKnown: boolean()
53102
+ });
53014
53103
  var ServerPackageStatusSchema = object({
53015
53104
  /** Root package name (`@camstack/server` on the hub). */
53016
53105
  packageName: string(),
@@ -53073,7 +53162,14 @@ var ServerPackageStatusSchema = object({
53073
53162
  * for version skew: an older provider's payload simply omits it, and an
53074
53163
  * absent wrapper is unknown — never `native`.
53075
53164
  */
53076
- wrapper: WrapperIdentitySchema.optional()
53165
+ wrapper: WrapperIdentitySchema.optional(),
53166
+ /**
53167
+ * What this node PLANNED to run against what its process service reports
53168
+ * (D877). Absent until the one-shot boot check has run (~60 s after boot) and
53169
+ * on a provider that predates it. Absent is "not checked yet", never "all
53170
+ * well": a consumer that needs the answer treats it as pending.
53171
+ */
53172
+ runners: RunnerBootCheckSchema.optional()
53077
53173
  });
53078
53174
  var ServerUpdateCheckResultSchema = object({
53079
53175
  packageName: string(),
@@ -53124,6 +53220,13 @@ var ServerUpdateOutcomeSchema = _enum([
53124
53220
  "refused",
53125
53221
  "failed"
53126
53222
  ]);
53223
+ /** One addon the pre-flight found the target version would refuse (D877). */
53224
+ var UpdateBlockerSchema = object({
53225
+ addonId: string(),
53226
+ reason: string(),
53227
+ /** What the operator does about it. */
53228
+ remedy: string()
53229
+ });
53127
53230
  var ServerUpdateActionResultSchema = object({
53128
53231
  accepted: boolean(),
53129
53232
  targetVersion: string().nullable(),
@@ -53141,14 +53244,27 @@ var ServerUpdateActionResultSchema = object({
53141
53244
  * The failure itself, verbatim enough to act on (the npm output for a
53142
53245
  * staging install). Non-null only for `failed`.
53143
53246
  */
53144
- error: string().nullable().optional()
53247
+ error: string().nullable().optional(),
53248
+ /**
53249
+ * The addons the target version would refuse to start on this node's live
53250
+ * store (D877), present when the pre-flight refused the update
53251
+ * (`reason: 'addon-would-refuse'`). Optional for version skew.
53252
+ */
53253
+ blockers: array(UpdateBlockerSchema).optional()
53145
53254
  });
53146
53255
  method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
53147
53256
  kind: "mutation",
53148
53257
  auth: "admin"
53149
- }), method(object({
53150
- /** Explicit target version; omitted = latest from the registry. */
53151
- version: string().optional() }), ServerUpdateActionResultSchema, {
53258
+ }), method(object({
53259
+ /** Explicit target version; omitted = latest from the registry. */
53260
+ version: string().optional(),
53261
+ /**
53262
+ * Apply even though the pre-flight (D877) found addons the target would
53263
+ * refuse to start. Off by default: those addons stay down until the
53264
+ * remedy is run, which is the incident this gate exists to prevent.
53265
+ */
53266
+ acknowledgeRefusals: boolean().optional()
53267
+ }), ServerUpdateActionResultSchema, {
53152
53268
  kind: "mutation",
53153
53269
  auth: "admin",
53154
53270
  timeoutMs: 16 * 6e4
@@ -55628,7 +55744,9 @@ var ManifestShapeSchema = object({
55628
55744
  var AddonProcessSchema = object({
55629
55745
  pid: number().optional(),
55630
55746
  mode: string(),
55631
- state: string()
55747
+ state: string(),
55748
+ /** Why the runner is `refused` (an addon's own words), when it is (D877). */
55749
+ reason: string().optional()
55632
55750
  });
55633
55751
  /**
55634
55752
  * Per-addon health snapshot from the kernel's AddonHealthMonitor.
@@ -57044,6 +57162,12 @@ var ClimateControlStatusSchema = object({
57044
57162
  /** Horizontal louver swing on/off. Null when the device has no
57045
57163
  * horizontal swing surface (gate with `DeviceFeature.ClimateSwingHorizontal`). */
57046
57164
  swingHorizontal: boolean().nullable(),
57165
+ /** Lowest setpoint the device accepts, Celsius. Absent / null = not reported. */
57166
+ minTemp: number().nullable().optional(),
57167
+ /** Highest setpoint the device accepts, Celsius. Absent / null = not reported. */
57168
+ maxTemp: number().nullable().optional(),
57169
+ /** Setpoint granularity, Celsius (0.5, 1). Absent / null = not reported. */
57170
+ tempStep: number().positive().nullable().optional(),
57047
57171
  /** Ms epoch when the slice was last updated (push or command). */
57048
57172
  lastFetchedAt: number()
57049
57173
  });
@@ -66579,7 +66703,11 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
66579
66703
  kind: "mutation",
66580
66704
  auth: "admin",
66581
66705
  access: "delete"
66582
- }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(object({
66706
+ }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
66707
+ kind: "mutation",
66708
+ auth: "admin",
66709
+ access: "create"
66710
+ }), method(object({
66583
66711
  userId: string(),
66584
66712
  code: string()
66585
66713
  }), object({ valid: boolean() }), {
@@ -72141,6 +72269,12 @@ Object.freeze({
72141
72269
  addonId: null,
72142
72270
  access: "view"
72143
72271
  },
72272
+ "llm.migrateRawSecrets": {
72273
+ capName: "llm",
72274
+ capScope: "system",
72275
+ addonId: null,
72276
+ access: "create"
72277
+ },
72144
72278
  "llm.resolveModelRef": {
72145
72279
  capName: "llm",
72146
72280
  capScope: "system",
@@ -76683,6 +76817,12 @@ Object.freeze({
76683
76817
  addonId: null,
76684
76818
  access: "view"
76685
76819
  },
76820
+ "userManagement.migrateRawSecrets": {
76821
+ capName: "user-management",
76822
+ capScope: "system",
76823
+ addonId: null,
76824
+ access: "create"
76825
+ },
76686
76826
  "userManagement.oauthExchangeCode": {
76687
76827
  capName: "user-management",
76688
76828
  capScope: "system",
@@ -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-bwsTj221.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).
@@ -8610,7 +8628,7 @@ function sleep(ms) {
8610
8628
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
8611
8629
  }
8612
8630
  //#endregion
8613
- //#region ../types/dist/err-msg-DLerKiVO.mjs
8631
+ //#region ../types/dist/err-msg--2RrYiLO.mjs
8614
8632
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8615
8633
  DeviceType["Camera"] = "camera";
8616
8634
  DeviceType["Hub"] = "hub";
@@ -8879,6 +8897,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8879
8897
  /** Virtual HA toggle (input_boolean.*) — distinguishable from a
8880
8898
  * real Switch device for UI rendering / export adapters. */
8881
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";
8882
8903
  /** Generic motion / occupancy / moving event source. Distinct from
8883
8904
  * the camera accessory PirSensor role: that one is a camera child;
8884
8905
  * this is a standalone HA / 3rd-party motion sensor. */
@@ -8956,7 +8977,7 @@ function errMsg(err) {
8956
8977
  return String(err);
8957
8978
  }
8958
8979
  //#endregion
8959
- //#region ../types/dist/composition-EQ9Ok0Ee.mjs
8980
+ //#region ../types/dist/composition-DOwQB_Ua.mjs
8960
8981
  /**
8961
8982
  * Deterministic SHA-256 hash of an arbitrary serialisable value. The
8962
8983
  * canonical form sorts object keys alphabetically at every depth so two
@@ -40465,6 +40486,36 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
40465
40486
  timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
40466
40487
  });
40467
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
+ /**
40468
40519
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
40469
40520
  * methods concat-fan across providers; single-row methods route to ONE
40470
40521
  * provider by the `addonId` in the call input (the notification-output
@@ -40649,6 +40700,9 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
40649
40700
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
40650
40701
  kind: "mutation",
40651
40702
  auth: "admin"
40703
+ }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
40704
+ kind: "mutation",
40705
+ auth: "admin"
40652
40706
  }), method(ProfileRefInputSchema, _void(), {
40653
40707
  kind: "mutation",
40654
40708
  auth: "admin"
@@ -52980,6 +53034,41 @@ var ServerRollbackInfoSchema = object({
52980
53034
  atMs: number(),
52981
53035
  reason: string()
52982
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
+ });
52983
53072
  var ServerPackageStatusSchema = object({
52984
53073
  /** Root package name (`@camstack/server` on the hub). */
52985
53074
  packageName: string(),
@@ -53042,7 +53131,14 @@ var ServerPackageStatusSchema = object({
53042
53131
  * for version skew: an older provider's payload simply omits it, and an
53043
53132
  * absent wrapper is unknown — never `native`.
53044
53133
  */
53045
- 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()
53046
53142
  });
53047
53143
  var ServerUpdateCheckResultSchema = object({
53048
53144
  packageName: string(),
@@ -53093,6 +53189,13 @@ var ServerUpdateOutcomeSchema = _enum([
53093
53189
  "refused",
53094
53190
  "failed"
53095
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
+ });
53096
53199
  var ServerUpdateActionResultSchema = object({
53097
53200
  accepted: boolean(),
53098
53201
  targetVersion: string().nullable(),
@@ -53110,14 +53213,27 @@ var ServerUpdateActionResultSchema = object({
53110
53213
  * The failure itself, verbatim enough to act on (the npm output for a
53111
53214
  * staging install). Non-null only for `failed`.
53112
53215
  */
53113
- 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()
53114
53223
  });
53115
53224
  method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
53116
53225
  kind: "mutation",
53117
53226
  auth: "admin"
53118
- }), method(object({
53119
- /** Explicit target version; omitted = latest from the registry. */
53120
- 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, {
53121
53237
  kind: "mutation",
53122
53238
  auth: "admin",
53123
53239
  timeoutMs: 16 * 6e4
@@ -55597,7 +55713,9 @@ var ManifestShapeSchema = object({
55597
55713
  var AddonProcessSchema = object({
55598
55714
  pid: number().optional(),
55599
55715
  mode: string(),
55600
- state: string()
55716
+ state: string(),
55717
+ /** Why the runner is `refused` (an addon's own words), when it is (D877). */
55718
+ reason: string().optional()
55601
55719
  });
55602
55720
  /**
55603
55721
  * Per-addon health snapshot from the kernel's AddonHealthMonitor.
@@ -57013,6 +57131,12 @@ var ClimateControlStatusSchema = object({
57013
57131
  /** Horizontal louver swing on/off. Null when the device has no
57014
57132
  * horizontal swing surface (gate with `DeviceFeature.ClimateSwingHorizontal`). */
57015
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(),
57016
57140
  /** Ms epoch when the slice was last updated (push or command). */
57017
57141
  lastFetchedAt: number()
57018
57142
  });
@@ -66548,7 +66672,11 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
66548
66672
  kind: "mutation",
66549
66673
  auth: "admin",
66550
66674
  access: "delete"
66551
- }), 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({
66552
66680
  userId: string(),
66553
66681
  code: string()
66554
66682
  }), object({ valid: boolean() }), {
@@ -72110,6 +72238,12 @@ Object.freeze({
72110
72238
  addonId: null,
72111
72239
  access: "view"
72112
72240
  },
72241
+ "llm.migrateRawSecrets": {
72242
+ capName: "llm",
72243
+ capScope: "system",
72244
+ addonId: null,
72245
+ access: "create"
72246
+ },
72113
72247
  "llm.resolveModelRef": {
72114
72248
  capName: "llm",
72115
72249
  capScope: "system",
@@ -76652,6 +76786,12 @@ Object.freeze({
76652
76786
  addonId: null,
76653
76787
  access: "view"
76654
76788
  },
76789
+ "userManagement.migrateRawSecrets": {
76790
+ capName: "user-management",
76791
+ capScope: "system",
76792
+ addonId: null,
76793
+ access: "create"
76794
+ },
76655
76795
  "userManagement.oauthExchangeCode": {
76656
76796
  capName: "user-management",
76657
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-CJMlelSr.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-YcxOhKAs.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-XFjQPo0r.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-BrZNQ-qA.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.376",
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.294",
36
+ version: "1.2.296",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",