@camstack/addon-model-studio 1.1.264 → 1.1.266

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-DXOf3xDp.mjs → MotionZonesSettings-QEoTPmcr.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-DasEXHXg.mjs → PrivacyMaskSettings-BbohzLpq.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-ClVvQVl6.mjs → SceneMonitorEditor-9Q681ceG.mjs} +3 -3
  4. package/dist/_stub.js +3116 -3094
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-CU96npOu.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BuCDA9zD.mjs} +3 -3
  6. package/dist/{_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B0F3F6BP.mjs → _virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CVsfrcvP.mjs} +2 -2
  7. package/dist/{hostInit-Bsv1Txh4.mjs → hostInit-CAAwjy3-.mjs} +2 -2
  8. package/dist/model-studio.addon.js +151 -11
  9. package/dist/model-studio.addon.mjs +151 -11
  10. package/dist/{player-overlays-BWxIhTSh.mjs → player-overlays-6oZdPigo.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-Bb8t1Rws.mjs → responsive-DKuK9SrM.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-Bps8TGiG.mjs → scene-monitor-copy-BZutPHjt.mjs} +1 -1
  14. package/dist/{square-DSJt_nVw.mjs → square-BoehEjTT.mjs} +1 -1
  15. package/dist/{trash-2-CzUTU-oX.mjs → trash-2-BTKS3ae6.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DSJOnpOj.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-C0irhDNf.mjs} +1 -1
  17. package/package.json +1 -1
@@ -394,7 +394,7 @@ function buildScryptedRegistryDescriptor(entry) {
394
394
  };
395
395
  }
396
396
  //#endregion
397
- //#region ../types/dist/event-category-C4hVnRo8.mjs
397
+ //#region ../types/dist/event-category-BvOFi6PY.mjs
398
398
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
399
399
  EventCategory["SystemBoot"] = "system.boot";
400
400
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -458,6 +458,24 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
458
458
  * consumes this category and maps it to the `addon-crash-loop` kind.
459
459
  */
460
460
  EventCategory["AddonRunnerFailed"] = "addon.runner-failed";
461
+ /**
462
+ * A runner whose addon refused to start with a typed reason (D877) - parked
463
+ * in `refused`, never counted by the crash breaker, retried on operator
464
+ * action. One event per refusal.
465
+ */
466
+ EventCategory["AddonRunnerRefused"] = "addon.runner-refused";
467
+ /**
468
+ * A runner settled on a state (D877): `running` (READY), `crashed`, `failed` or
469
+ * `refused`. In-process telemetry for the boot check (re-evaluate while any
470
+ * runner is still pending) and the alert centre (close a recovered runner).
471
+ */
472
+ EventCategory["ProcessStateChanged"] = "process.state-changed";
473
+ /**
474
+ * The node's one-shot runner boot check (D877): planned runners against the
475
+ * process service, `degraded` when any is failed, refused or missing. The
476
+ * alert centre turns it into one alert and a direct critical push.
477
+ */
478
+ EventCategory["SystemRunnerCheck"] = "system.runner-check";
461
479
  EventCategory["AddonError"] = "addon.error";
462
480
  EventCategory["AddonPageReady"] = "addon.page-ready";
463
481
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5782,7 +5800,7 @@ var ZodIssueCode = {
5782
5800
  var ZodFirstPartyTypeKind;
5783
5801
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5784
5802
  //#endregion
5785
- //#region ../types/dist/sleep-bwsTj221.mjs
5803
+ //#region ../types/dist/sleep-bgZLodYc.mjs
5786
5804
  /**
5787
5805
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5788
5806
  * window to float samples (D455).
@@ -8728,7 +8746,7 @@ object({
8728
8746
  params: record(string(), union([string(), number()])).optional()
8729
8747
  });
8730
8748
  //#endregion
8731
- //#region ../types/dist/err-msg-DLerKiVO.mjs
8749
+ //#region ../types/dist/err-msg--2RrYiLO.mjs
8732
8750
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8733
8751
  DeviceType["Camera"] = "camera";
8734
8752
  DeviceType["Hub"] = "hub";
@@ -8997,6 +9015,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8997
9015
  /** Virtual HA toggle (input_boolean.*) — distinguishable from a
8998
9016
  * real Switch device for UI rendering / export adapters. */
8999
9017
  DeviceRole["BinaryHelper"] = "binary-helper";
9018
+ /** A smart plug: a `switch` whose source says it is an outlet (HA
9019
+ * `device_class: outlet`). The Alexa export shows it as a SMARTPLUG. */
9020
+ DeviceRole["Outlet"] = "outlet";
9000
9021
  /** Generic motion / occupancy / moving event source. Distinct from
9001
9022
  * the camera accessory PirSensor role: that one is a camera child;
9002
9023
  * this is a standalone HA / 3rd-party motion sensor. */
@@ -9064,7 +9085,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
9064
9085
  return DeviceRole;
9065
9086
  }({});
9066
9087
  //#endregion
9067
- //#region ../types/dist/composition-EQ9Ok0Ee.mjs
9088
+ //#region ../types/dist/composition-DOwQB_Ua.mjs
9068
9089
  /**
9069
9090
  * The ffmpeg build every CamStack node downloads, per platform and arch.
9070
9091
  *
@@ -39428,6 +39449,36 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
39428
39449
  timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
39429
39450
  });
39430
39451
  /**
39452
+ * The report of a one-shot "move this owner's plaintext secrets into the
39453
+ * keychain" run (D878). COUNTS only - never a value, never a ref.
39454
+ *
39455
+ * The owner runs it on its own rows, through its own write path; an operator
39456
+ * script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
39457
+ * Dry run (`apply: false`) reports what WOULD move and changes nothing.
39458
+ */
39459
+ var RawSecretMigrationInputSchema = object({
39460
+ /** `false` (the default of the script) = report only. */
39461
+ apply: boolean() });
39462
+ var RawSecretMigrationReportSchema = object({
39463
+ apply: boolean(),
39464
+ /** Rows that can carry a secret (a profile, an enrolment). */
39465
+ rows: number().int(),
39466
+ /** Rows whose secret was plaintext when the run started. */
39467
+ raw: number().int(),
39468
+ /** Rows that already held a keychain marker when the run started. */
39469
+ markers: number().int(),
39470
+ /** Plaintext rows moved by THIS run (always 0 on a dry run). */
39471
+ migrated: number().int(),
39472
+ /** Plaintext rows left in place because the move or its read-back failed. */
39473
+ failed: number().int(),
39474
+ /** After the run: rows still holding plaintext. */
39475
+ remainingRaw: number().int(),
39476
+ /** After the run: markers the keychain could not resolve right now. */
39477
+ unresolvedMarkers: number().int(),
39478
+ /** True when nothing is raw and every marker resolves. */
39479
+ verified: boolean()
39480
+ });
39481
+ /**
39431
39482
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
39432
39483
  * methods concat-fan across providers; single-row methods route to ONE
39433
39484
  * provider by the `addonId` in the call input (the notification-output
@@ -39612,6 +39663,9 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
39612
39663
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
39613
39664
  kind: "mutation",
39614
39665
  auth: "admin"
39666
+ }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
39667
+ kind: "mutation",
39668
+ auth: "admin"
39615
39669
  }), method(ProfileRefInputSchema, _void(), {
39616
39670
  kind: "mutation",
39617
39671
  auth: "admin"
@@ -50041,6 +50095,41 @@ var ServerRollbackInfoSchema = object({
50041
50095
  atMs: number(),
50042
50096
  reason: string()
50043
50097
  });
50098
+ /**
50099
+ * The runner boot check (D877): the runners this node PLANNED (hub: one per
50100
+ * `resolveRunnerId` over its forked addons; agent: the runners its process
50101
+ * service holds, because only the hub plans) against the states the process
50102
+ * service reports. Kept in memory, recomputed by the same one-shot check after
50103
+ * every boot, served on `getServerPackageStatus`.
50104
+ *
50105
+ * `failed` is the D6 breaker's terminal state, `refused` a deterministic Init
50106
+ * refusal (an addon that said "I will not start, and here is why"), `missing` a
50107
+ * planned runner the process service has no entry for.
50108
+ */
50109
+ var RunnerRefusalSchema = object({
50110
+ runnerId: string(),
50111
+ addonIds: array(string()),
50112
+ reason: string()
50113
+ });
50114
+ var RunnerBootCheckSchema = object({
50115
+ checkedAtMs: number(),
50116
+ /** Runners planned for this node. */
50117
+ expected: number(),
50118
+ /** Planned runners whose process is `running`. */
50119
+ running: number(),
50120
+ failed: array(string()),
50121
+ refused: array(RunnerRefusalSchema),
50122
+ missing: array(string()),
50123
+ /**
50124
+ * Runners still on their way: `starting`, or `crashed` waiting on a backoff
50125
+ * respawn. The check is FINAL only when this is empty; until then nothing is
50126
+ * pushed and the verdict is re-evaluated on the next runner state change.
50127
+ * Optional for version skew (absent = settled).
50128
+ */
50129
+ pending: array(string()).optional(),
50130
+ /** True when the plan is the hub's (`missing` is then meaningful); false on an agent. */
50131
+ planKnown: boolean()
50132
+ });
50044
50133
  var ServerPackageStatusSchema = object({
50045
50134
  /** Root package name (`@camstack/server` on the hub). */
50046
50135
  packageName: string(),
@@ -50103,7 +50192,14 @@ var ServerPackageStatusSchema = object({
50103
50192
  * for version skew: an older provider's payload simply omits it, and an
50104
50193
  * absent wrapper is unknown — never `native`.
50105
50194
  */
50106
- wrapper: WrapperIdentitySchema.optional()
50195
+ wrapper: WrapperIdentitySchema.optional(),
50196
+ /**
50197
+ * What this node PLANNED to run against what its process service reports
50198
+ * (D877). Absent until the one-shot boot check has run (~60 s after boot) and
50199
+ * on a provider that predates it. Absent is "not checked yet", never "all
50200
+ * well": a consumer that needs the answer treats it as pending.
50201
+ */
50202
+ runners: RunnerBootCheckSchema.optional()
50107
50203
  });
50108
50204
  var ServerUpdateCheckResultSchema = object({
50109
50205
  packageName: string(),
@@ -50154,6 +50250,13 @@ var ServerUpdateOutcomeSchema = _enum([
50154
50250
  "refused",
50155
50251
  "failed"
50156
50252
  ]);
50253
+ /** One addon the pre-flight found the target version would refuse (D877). */
50254
+ var UpdateBlockerSchema = object({
50255
+ addonId: string(),
50256
+ reason: string(),
50257
+ /** What the operator does about it. */
50258
+ remedy: string()
50259
+ });
50157
50260
  var ServerUpdateActionResultSchema = object({
50158
50261
  accepted: boolean(),
50159
50262
  targetVersion: string().nullable(),
@@ -50171,14 +50274,27 @@ var ServerUpdateActionResultSchema = object({
50171
50274
  * The failure itself, verbatim enough to act on (the npm output for a
50172
50275
  * staging install). Non-null only for `failed`.
50173
50276
  */
50174
- error: string().nullable().optional()
50277
+ error: string().nullable().optional(),
50278
+ /**
50279
+ * The addons the target version would refuse to start on this node's live
50280
+ * store (D877), present when the pre-flight refused the update
50281
+ * (`reason: 'addon-would-refuse'`). Optional for version skew.
50282
+ */
50283
+ blockers: array(UpdateBlockerSchema).optional()
50175
50284
  });
50176
50285
  method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
50177
50286
  kind: "mutation",
50178
50287
  auth: "admin"
50179
- }), method(object({
50180
- /** Explicit target version; omitted = latest from the registry. */
50181
- version: string().optional() }), ServerUpdateActionResultSchema, {
50288
+ }), method(object({
50289
+ /** Explicit target version; omitted = latest from the registry. */
50290
+ version: string().optional(),
50291
+ /**
50292
+ * Apply even though the pre-flight (D877) found addons the target would
50293
+ * refuse to start. Off by default: those addons stay down until the
50294
+ * remedy is run, which is the incident this gate exists to prevent.
50295
+ */
50296
+ acknowledgeRefusals: boolean().optional()
50297
+ }), ServerUpdateActionResultSchema, {
50182
50298
  kind: "mutation",
50183
50299
  auth: "admin",
50184
50300
  timeoutMs: 16 * 6e4
@@ -52591,7 +52707,9 @@ var ManifestShapeSchema = object({
52591
52707
  var AddonProcessSchema = object({
52592
52708
  pid: number().optional(),
52593
52709
  mode: string(),
52594
- state: string()
52710
+ state: string(),
52711
+ /** Why the runner is `refused` (an addon's own words), when it is (D877). */
52712
+ reason: string().optional()
52595
52713
  });
52596
52714
  /**
52597
52715
  * Per-addon health snapshot from the kernel's AddonHealthMonitor.
@@ -53594,6 +53712,12 @@ object({
53594
53712
  /** Horizontal louver swing on/off. Null when the device has no
53595
53713
  * horizontal swing surface (gate with `DeviceFeature.ClimateSwingHorizontal`). */
53596
53714
  swingHorizontal: boolean().nullable(),
53715
+ /** Lowest setpoint the device accepts, Celsius. Absent / null = not reported. */
53716
+ minTemp: number().nullable().optional(),
53717
+ /** Highest setpoint the device accepts, Celsius. Absent / null = not reported. */
53718
+ maxTemp: number().nullable().optional(),
53719
+ /** Setpoint granularity, Celsius (0.5, 1). Absent / null = not reported. */
53720
+ tempStep: number().positive().nullable().optional(),
53597
53721
  /** Ms epoch when the slice was last updated (push or command). */
53598
53722
  lastFetchedAt: number()
53599
53723
  });
@@ -60614,7 +60738,11 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
60614
60738
  kind: "mutation",
60615
60739
  auth: "admin",
60616
60740
  access: "delete"
60617
- }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(object({
60741
+ }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
60742
+ kind: "mutation",
60743
+ auth: "admin",
60744
+ access: "create"
60745
+ }), method(object({
60618
60746
  userId: string(),
60619
60747
  code: string()
60620
60748
  }), object({ valid: boolean() }), {
@@ -64773,6 +64901,12 @@ Object.freeze({
64773
64901
  addonId: null,
64774
64902
  access: "view"
64775
64903
  },
64904
+ "llm.migrateRawSecrets": {
64905
+ capName: "llm",
64906
+ capScope: "system",
64907
+ addonId: null,
64908
+ access: "create"
64909
+ },
64776
64910
  "llm.resolveModelRef": {
64777
64911
  capName: "llm",
64778
64912
  capScope: "system",
@@ -69315,6 +69449,12 @@ Object.freeze({
69315
69449
  addonId: null,
69316
69450
  access: "view"
69317
69451
  },
69452
+ "userManagement.migrateRawSecrets": {
69453
+ capName: "user-management",
69454
+ capScope: "system",
69455
+ addonId: null,
69456
+ access: "create"
69457
+ },
69318
69458
  "userManagement.oauthExchangeCode": {
69319
69459
  capName: "user-management",
69320
69460
  capScope: "system",
@@ -368,7 +368,7 @@ function buildScryptedRegistryDescriptor(entry) {
368
368
  };
369
369
  }
370
370
  //#endregion
371
- //#region ../types/dist/event-category-C4hVnRo8.mjs
371
+ //#region ../types/dist/event-category-BvOFi6PY.mjs
372
372
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
373
373
  EventCategory["SystemBoot"] = "system.boot";
374
374
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -432,6 +432,24 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
432
432
  * consumes this category and maps it to the `addon-crash-loop` kind.
433
433
  */
434
434
  EventCategory["AddonRunnerFailed"] = "addon.runner-failed";
435
+ /**
436
+ * A runner whose addon refused to start with a typed reason (D877) - parked
437
+ * in `refused`, never counted by the crash breaker, retried on operator
438
+ * action. One event per refusal.
439
+ */
440
+ EventCategory["AddonRunnerRefused"] = "addon.runner-refused";
441
+ /**
442
+ * A runner settled on a state (D877): `running` (READY), `crashed`, `failed` or
443
+ * `refused`. In-process telemetry for the boot check (re-evaluate while any
444
+ * runner is still pending) and the alert centre (close a recovered runner).
445
+ */
446
+ EventCategory["ProcessStateChanged"] = "process.state-changed";
447
+ /**
448
+ * The node's one-shot runner boot check (D877): planned runners against the
449
+ * process service, `degraded` when any is failed, refused or missing. The
450
+ * alert centre turns it into one alert and a direct critical push.
451
+ */
452
+ EventCategory["SystemRunnerCheck"] = "system.runner-check";
435
453
  EventCategory["AddonError"] = "addon.error";
436
454
  EventCategory["AddonPageReady"] = "addon.page-ready";
437
455
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5756,7 +5774,7 @@ var ZodIssueCode = {
5756
5774
  var ZodFirstPartyTypeKind;
5757
5775
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5758
5776
  //#endregion
5759
- //#region ../types/dist/sleep-bwsTj221.mjs
5777
+ //#region ../types/dist/sleep-bgZLodYc.mjs
5760
5778
  /**
5761
5779
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5762
5780
  * window to float samples (D455).
@@ -8702,7 +8720,7 @@ object({
8702
8720
  params: record(string(), union([string(), number()])).optional()
8703
8721
  });
8704
8722
  //#endregion
8705
- //#region ../types/dist/err-msg-DLerKiVO.mjs
8723
+ //#region ../types/dist/err-msg--2RrYiLO.mjs
8706
8724
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8707
8725
  DeviceType["Camera"] = "camera";
8708
8726
  DeviceType["Hub"] = "hub";
@@ -8971,6 +8989,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8971
8989
  /** Virtual HA toggle (input_boolean.*) — distinguishable from a
8972
8990
  * real Switch device for UI rendering / export adapters. */
8973
8991
  DeviceRole["BinaryHelper"] = "binary-helper";
8992
+ /** A smart plug: a `switch` whose source says it is an outlet (HA
8993
+ * `device_class: outlet`). The Alexa export shows it as a SMARTPLUG. */
8994
+ DeviceRole["Outlet"] = "outlet";
8974
8995
  /** Generic motion / occupancy / moving event source. Distinct from
8975
8996
  * the camera accessory PirSensor role: that one is a camera child;
8976
8997
  * this is a standalone HA / 3rd-party motion sensor. */
@@ -9038,7 +9059,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
9038
9059
  return DeviceRole;
9039
9060
  }({});
9040
9061
  //#endregion
9041
- //#region ../types/dist/composition-EQ9Ok0Ee.mjs
9062
+ //#region ../types/dist/composition-DOwQB_Ua.mjs
9042
9063
  /**
9043
9064
  * The ffmpeg build every CamStack node downloads, per platform and arch.
9044
9065
  *
@@ -39402,6 +39423,36 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
39402
39423
  timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
39403
39424
  });
39404
39425
  /**
39426
+ * The report of a one-shot "move this owner's plaintext secrets into the
39427
+ * keychain" run (D878). COUNTS only - never a value, never a ref.
39428
+ *
39429
+ * The owner runs it on its own rows, through its own write path; an operator
39430
+ * script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
39431
+ * Dry run (`apply: false`) reports what WOULD move and changes nothing.
39432
+ */
39433
+ var RawSecretMigrationInputSchema = object({
39434
+ /** `false` (the default of the script) = report only. */
39435
+ apply: boolean() });
39436
+ var RawSecretMigrationReportSchema = object({
39437
+ apply: boolean(),
39438
+ /** Rows that can carry a secret (a profile, an enrolment). */
39439
+ rows: number().int(),
39440
+ /** Rows whose secret was plaintext when the run started. */
39441
+ raw: number().int(),
39442
+ /** Rows that already held a keychain marker when the run started. */
39443
+ markers: number().int(),
39444
+ /** Plaintext rows moved by THIS run (always 0 on a dry run). */
39445
+ migrated: number().int(),
39446
+ /** Plaintext rows left in place because the move or its read-back failed. */
39447
+ failed: number().int(),
39448
+ /** After the run: rows still holding plaintext. */
39449
+ remainingRaw: number().int(),
39450
+ /** After the run: markers the keychain could not resolve right now. */
39451
+ unresolvedMarkers: number().int(),
39452
+ /** True when nothing is raw and every marker resolves. */
39453
+ verified: boolean()
39454
+ });
39455
+ /**
39405
39456
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
39406
39457
  * methods concat-fan across providers; single-row methods route to ONE
39407
39458
  * provider by the `addonId` in the call input (the notification-output
@@ -39586,6 +39637,9 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
39586
39637
  }), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
39587
39638
  kind: "mutation",
39588
39639
  auth: "admin"
39640
+ }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
39641
+ kind: "mutation",
39642
+ auth: "admin"
39589
39643
  }), method(ProfileRefInputSchema, _void(), {
39590
39644
  kind: "mutation",
39591
39645
  auth: "admin"
@@ -50015,6 +50069,41 @@ var ServerRollbackInfoSchema = object({
50015
50069
  atMs: number(),
50016
50070
  reason: string()
50017
50071
  });
50072
+ /**
50073
+ * The runner boot check (D877): the runners this node PLANNED (hub: one per
50074
+ * `resolveRunnerId` over its forked addons; agent: the runners its process
50075
+ * service holds, because only the hub plans) against the states the process
50076
+ * service reports. Kept in memory, recomputed by the same one-shot check after
50077
+ * every boot, served on `getServerPackageStatus`.
50078
+ *
50079
+ * `failed` is the D6 breaker's terminal state, `refused` a deterministic Init
50080
+ * refusal (an addon that said "I will not start, and here is why"), `missing` a
50081
+ * planned runner the process service has no entry for.
50082
+ */
50083
+ var RunnerRefusalSchema = object({
50084
+ runnerId: string(),
50085
+ addonIds: array(string()),
50086
+ reason: string()
50087
+ });
50088
+ var RunnerBootCheckSchema = object({
50089
+ checkedAtMs: number(),
50090
+ /** Runners planned for this node. */
50091
+ expected: number(),
50092
+ /** Planned runners whose process is `running`. */
50093
+ running: number(),
50094
+ failed: array(string()),
50095
+ refused: array(RunnerRefusalSchema),
50096
+ missing: array(string()),
50097
+ /**
50098
+ * Runners still on their way: `starting`, or `crashed` waiting on a backoff
50099
+ * respawn. The check is FINAL only when this is empty; until then nothing is
50100
+ * pushed and the verdict is re-evaluated on the next runner state change.
50101
+ * Optional for version skew (absent = settled).
50102
+ */
50103
+ pending: array(string()).optional(),
50104
+ /** True when the plan is the hub's (`missing` is then meaningful); false on an agent. */
50105
+ planKnown: boolean()
50106
+ });
50018
50107
  var ServerPackageStatusSchema = object({
50019
50108
  /** Root package name (`@camstack/server` on the hub). */
50020
50109
  packageName: string(),
@@ -50077,7 +50166,14 @@ var ServerPackageStatusSchema = object({
50077
50166
  * for version skew: an older provider's payload simply omits it, and an
50078
50167
  * absent wrapper is unknown — never `native`.
50079
50168
  */
50080
- wrapper: WrapperIdentitySchema.optional()
50169
+ wrapper: WrapperIdentitySchema.optional(),
50170
+ /**
50171
+ * What this node PLANNED to run against what its process service reports
50172
+ * (D877). Absent until the one-shot boot check has run (~60 s after boot) and
50173
+ * on a provider that predates it. Absent is "not checked yet", never "all
50174
+ * well": a consumer that needs the answer treats it as pending.
50175
+ */
50176
+ runners: RunnerBootCheckSchema.optional()
50081
50177
  });
50082
50178
  var ServerUpdateCheckResultSchema = object({
50083
50179
  packageName: string(),
@@ -50128,6 +50224,13 @@ var ServerUpdateOutcomeSchema = _enum([
50128
50224
  "refused",
50129
50225
  "failed"
50130
50226
  ]);
50227
+ /** One addon the pre-flight found the target version would refuse (D877). */
50228
+ var UpdateBlockerSchema = object({
50229
+ addonId: string(),
50230
+ reason: string(),
50231
+ /** What the operator does about it. */
50232
+ remedy: string()
50233
+ });
50131
50234
  var ServerUpdateActionResultSchema = object({
50132
50235
  accepted: boolean(),
50133
50236
  targetVersion: string().nullable(),
@@ -50145,14 +50248,27 @@ var ServerUpdateActionResultSchema = object({
50145
50248
  * The failure itself, verbatim enough to act on (the npm output for a
50146
50249
  * staging install). Non-null only for `failed`.
50147
50250
  */
50148
- error: string().nullable().optional()
50251
+ error: string().nullable().optional(),
50252
+ /**
50253
+ * The addons the target version would refuse to start on this node's live
50254
+ * store (D877), present when the pre-flight refused the update
50255
+ * (`reason: 'addon-would-refuse'`). Optional for version skew.
50256
+ */
50257
+ blockers: array(UpdateBlockerSchema).optional()
50149
50258
  });
50150
50259
  method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
50151
50260
  kind: "mutation",
50152
50261
  auth: "admin"
50153
- }), method(object({
50154
- /** Explicit target version; omitted = latest from the registry. */
50155
- version: string().optional() }), ServerUpdateActionResultSchema, {
50262
+ }), method(object({
50263
+ /** Explicit target version; omitted = latest from the registry. */
50264
+ version: string().optional(),
50265
+ /**
50266
+ * Apply even though the pre-flight (D877) found addons the target would
50267
+ * refuse to start. Off by default: those addons stay down until the
50268
+ * remedy is run, which is the incident this gate exists to prevent.
50269
+ */
50270
+ acknowledgeRefusals: boolean().optional()
50271
+ }), ServerUpdateActionResultSchema, {
50156
50272
  kind: "mutation",
50157
50273
  auth: "admin",
50158
50274
  timeoutMs: 16 * 6e4
@@ -52565,7 +52681,9 @@ var ManifestShapeSchema = object({
52565
52681
  var AddonProcessSchema = object({
52566
52682
  pid: number().optional(),
52567
52683
  mode: string(),
52568
- state: string()
52684
+ state: string(),
52685
+ /** Why the runner is `refused` (an addon's own words), when it is (D877). */
52686
+ reason: string().optional()
52569
52687
  });
52570
52688
  /**
52571
52689
  * Per-addon health snapshot from the kernel's AddonHealthMonitor.
@@ -53568,6 +53686,12 @@ object({
53568
53686
  /** Horizontal louver swing on/off. Null when the device has no
53569
53687
  * horizontal swing surface (gate with `DeviceFeature.ClimateSwingHorizontal`). */
53570
53688
  swingHorizontal: boolean().nullable(),
53689
+ /** Lowest setpoint the device accepts, Celsius. Absent / null = not reported. */
53690
+ minTemp: number().nullable().optional(),
53691
+ /** Highest setpoint the device accepts, Celsius. Absent / null = not reported. */
53692
+ maxTemp: number().nullable().optional(),
53693
+ /** Setpoint granularity, Celsius (0.5, 1). Absent / null = not reported. */
53694
+ tempStep: number().positive().nullable().optional(),
53571
53695
  /** Ms epoch when the slice was last updated (push or command). */
53572
53696
  lastFetchedAt: number()
53573
53697
  });
@@ -60588,7 +60712,11 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
60588
60712
  kind: "mutation",
60589
60713
  auth: "admin",
60590
60714
  access: "delete"
60591
- }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(object({
60715
+ }), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
60716
+ kind: "mutation",
60717
+ auth: "admin",
60718
+ access: "create"
60719
+ }), method(object({
60592
60720
  userId: string(),
60593
60721
  code: string()
60594
60722
  }), object({ valid: boolean() }), {
@@ -64747,6 +64875,12 @@ Object.freeze({
64747
64875
  addonId: null,
64748
64876
  access: "view"
64749
64877
  },
64878
+ "llm.migrateRawSecrets": {
64879
+ capName: "llm",
64880
+ capScope: "system",
64881
+ addonId: null,
64882
+ access: "create"
64883
+ },
64750
64884
  "llm.resolveModelRef": {
64751
64885
  capName: "llm",
64752
64886
  capScope: "system",
@@ -69289,6 +69423,12 @@ Object.freeze({
69289
69423
  addonId: null,
69290
69424
  access: "view"
69291
69425
  },
69426
+ "userManagement.migrateRawSecrets": {
69427
+ capName: "user-management",
69428
+ capScope: "system",
69429
+ addonId: null,
69430
+ access: "create"
69431
+ },
69292
69432
  "userManagement.oauthExchangeCode": {
69293
69433
  capName: "user-management",
69294
69434
  capScope: "system",
@@ -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_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
2
2
  import { n as i, r as a, t as o } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
3
- import { g as s, h as c } from "./responsive-Bb8t1Rws.mjs";
3
+ import { g as s, h as c } from "./responsive-DKuK9SrM.mjs";
4
4
  var l = s("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_model_studio_page__remoteEntry_js-DSJOnpOj.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-C0irhDNf.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_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
2
2
  import "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
3
- import { h as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B0F3F6BP.mjs";
3
+ import { g as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CVsfrcvP.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_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
2
2
  import { n as i } from "./ui-text-BqZa5BNK.mjs";
3
- import { g as a } from "./responsive-Bb8t1Rws.mjs";
3
+ import { g as a } from "./responsive-DKuK9SrM.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 { g as e } from "./responsive-Bb8t1Rws.mjs";
1
+ import { g as e } from "./responsive-DKuK9SrM.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 { g as e } from "./responsive-Bb8t1Rws.mjs";
1
+ import { g as e } from "./responsive-DKuK9SrM.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_model_studio_page-CU96npOu.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BuCDA9zD.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-model-studio",
3
- "version": "1.1.264",
3
+ "version": "1.1.266",
4
4
  "description": "Custom detection model registry, conversion & distribution for CamStack",
5
5
  "keywords": [
6
6
  "camstack",