@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.
- package/dist/{clip-model-registry-aWakBGm3.js → clip-model-registry-Cy2RokDO.js} +316 -34
- package/dist/{clip-model-registry-DnJSHCsn.mjs → clip-model-registry-jeFu3pma.mjs} +316 -34
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +2 -2
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DzBqyp65.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-ujfvEENv.mjs} +2 -2
- package/dist/pipeline-analytics/{_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BRMRfKVO.mjs → _virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CyYkqCmx.mjs} +1 -1
- package/dist/pipeline-analytics/{_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CYfz4e5v.mjs → _virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Kh1uHJki.mjs} +1 -1
- package/dist/pipeline-analytics/{hostInit-B83y5X7G.mjs → hostInit-Ddz0CyLk.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +72 -77
- package/dist/pipeline-analytics/index.mjs +72 -77
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
|
@@ -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-
|
|
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-
|
|
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).
|
|
@@ -6741,7 +6759,6 @@ function createHandle(raw, opts) {
|
|
|
6741
6759
|
const writeAddon = (patch) => write("addon", opts.addonTree(), void 0, patch, () => readStoredAddonBlob(raw), (p) => raw.writeAddonStore(p));
|
|
6742
6760
|
const readAddonStoreResult = raw.readAddonStoreResult;
|
|
6743
6761
|
const readAddonStoreKeyResult = raw.readAddonStoreKeyResult;
|
|
6744
|
-
const readDeviceStoreBatch = raw.readDeviceStoreBatch;
|
|
6745
6762
|
const overrides = {
|
|
6746
6763
|
readAddonStore: async () => resolveRead("addon", await raw.readAddonStore()),
|
|
6747
6764
|
...readAddonStoreResult !== void 0 ? { readAddonStoreResult: async () => {
|
|
@@ -6765,12 +6782,12 @@ function createHandle(raw, opts) {
|
|
|
6765
6782
|
};
|
|
6766
6783
|
} } : {},
|
|
6767
6784
|
readDeviceStore: async (deviceId) => resolveRead(`device:${deviceId}`, await raw.readDeviceStore(deviceId)),
|
|
6768
|
-
|
|
6769
|
-
const rows = await readDeviceStoreBatch
|
|
6785
|
+
readDeviceStoreBatch: async (deviceIds) => {
|
|
6786
|
+
const rows = await raw.readDeviceStoreBatch(deviceIds);
|
|
6770
6787
|
const out = /* @__PURE__ */ new Map();
|
|
6771
6788
|
for (const [deviceId, blob] of rows) out.set(deviceId, await resolveRead(`device:${deviceId}`, blob));
|
|
6772
6789
|
return out;
|
|
6773
|
-
}
|
|
6790
|
+
},
|
|
6774
6791
|
writeAddonStore: async (patch) => {
|
|
6775
6792
|
await writeAddon(patch);
|
|
6776
6793
|
},
|
|
@@ -7597,7 +7614,7 @@ var BaseAddon = class {
|
|
|
7597
7614
|
return this._addonSecretTree;
|
|
7598
7615
|
}
|
|
7599
7616
|
deviceSecretTree() {
|
|
7600
|
-
this._deviceSecretTree ??= secretTreeFromSchema(this.deviceSettingsSchema());
|
|
7617
|
+
this._deviceSecretTree ??= mergeSecretStatePaths(secretTreeFromSchema(this.deviceSettingsSchema()), this.secretStatePaths);
|
|
7601
7618
|
return this._deviceSecretTree;
|
|
7602
7619
|
}
|
|
7603
7620
|
/**
|
|
@@ -7673,42 +7690,135 @@ var BaseAddon = class {
|
|
|
7673
7690
|
this[timerOf] = timer;
|
|
7674
7691
|
}
|
|
7675
7692
|
/**
|
|
7676
|
-
* Wrap `ctx.settings.readAddonStore()` with a
|
|
7677
|
-
*
|
|
7678
|
-
* swap, or any race where the SqliteSettingsBackend is between shutdown and
|
|
7679
|
-
* re-initialize) doesn't propagate up into `initialize()` and leave the
|
|
7693
|
+
* Wrap `ctx.settings.readAddonStore()` with a retry budget so a transient
|
|
7694
|
+
* settings-store outage doesn't propagate up into `initialize()` and leave the
|
|
7680
7695
|
* addon permanently broken.
|
|
7681
7696
|
*
|
|
7682
|
-
*
|
|
7683
|
-
*
|
|
7684
|
-
* `
|
|
7697
|
+
* Two kinds of outage, two budgets:
|
|
7698
|
+
* - the store's own restart fingerprints (`SqliteSettingsBackend not
|
|
7699
|
+
* initialized`, `provider not available`): a short budget, then the addon
|
|
7700
|
+
* falls back to `{}` (defaults) - its first successful patch rehydrates;
|
|
7701
|
+
* - a TRANSPORT failure (the hub is restarting while this runner boots:
|
|
7702
|
+
* `discovery deadline exceeded`, `parent could not route`, a refused or
|
|
7703
|
+
* timed-out connection). Since D870 a runner's settings read THROWS instead
|
|
7704
|
+
* of answering `{}`, so without a budget a hub restart ends in a respawn
|
|
7705
|
+
* loop. A long, bounded budget; only after it the error propagates - the
|
|
7706
|
+
* addon never runs on defaults for a store it could not ask.
|
|
7707
|
+
* Anything else propagates immediately so real bugs surface.
|
|
7685
7708
|
*/
|
|
7686
7709
|
async readAddonStoreWithRetry() {
|
|
7687
7710
|
const settings = this.rawSettings();
|
|
7688
7711
|
if (!settings) return {};
|
|
7689
|
-
const delaysMs = [
|
|
7690
|
-
150,
|
|
7691
|
-
350,
|
|
7692
|
-
600,
|
|
7693
|
-
900
|
|
7694
|
-
];
|
|
7695
7712
|
let lastErr;
|
|
7696
|
-
for (let attempt = 0
|
|
7713
|
+
for (let attempt = 0;; attempt++) try {
|
|
7697
7714
|
const stored = await settings.readAddonStore() ?? {};
|
|
7698
7715
|
this.settingsStoreReady = true;
|
|
7699
7716
|
return stored;
|
|
7700
7717
|
} catch (err) {
|
|
7701
7718
|
lastErr = err;
|
|
7702
|
-
const
|
|
7703
|
-
if (
|
|
7704
|
-
|
|
7705
|
-
|
|
7719
|
+
const kind = classifyStoreError(err);
|
|
7720
|
+
if (kind === "permanent") throw err;
|
|
7721
|
+
const delay = (kind === "transport" ? TRANSPORT_RETRY_DELAYS_MS : RESTART_RETRY_DELAYS_MS)[attempt];
|
|
7722
|
+
if (delay === void 0) {
|
|
7723
|
+
if (kind === "transport") throw err;
|
|
7724
|
+
break;
|
|
7725
|
+
}
|
|
7726
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
7706
7727
|
}
|
|
7707
7728
|
this.settingsStoreReady = false;
|
|
7708
7729
|
this._ctx?.logger?.warn?.("readAddonStore: settings-store unavailable after retries — using defaults", { meta: { error: lastErr instanceof Error ? lastErr.message : String(lastErr) } });
|
|
7709
7730
|
return {};
|
|
7710
7731
|
}
|
|
7711
7732
|
};
|
|
7733
|
+
/** The settings store's own restart fingerprints. */
|
|
7734
|
+
var RESTART_RETRY_DELAYS_MS = [
|
|
7735
|
+
150,
|
|
7736
|
+
350,
|
|
7737
|
+
600,
|
|
7738
|
+
900
|
|
7739
|
+
];
|
|
7740
|
+
/** A hub restarting under a booting runner: ~100 s in total. */
|
|
7741
|
+
var TRANSPORT_RETRY_DELAYS_MS = [
|
|
7742
|
+
150,
|
|
7743
|
+
350,
|
|
7744
|
+
600,
|
|
7745
|
+
900,
|
|
7746
|
+
2e3,
|
|
7747
|
+
5e3,
|
|
7748
|
+
1e4,
|
|
7749
|
+
2e4,
|
|
7750
|
+
3e4,
|
|
7751
|
+
3e4
|
|
7752
|
+
];
|
|
7753
|
+
var RESTART_FINGERPRINTS = ["SqliteSettingsBackend not initialized", "provider not available"];
|
|
7754
|
+
/** Node / socket error codes of a connection that did not happen or broke. */
|
|
7755
|
+
var TRANSPORT_CODES = new Set([
|
|
7756
|
+
"ECONNREFUSED",
|
|
7757
|
+
"ECONNRESET",
|
|
7758
|
+
"ETIMEDOUT",
|
|
7759
|
+
"EPIPE",
|
|
7760
|
+
"EHOSTUNREACH",
|
|
7761
|
+
"ENETUNREACH"
|
|
7762
|
+
]);
|
|
7763
|
+
/** tRPC error codes that mean "the other side is not answering now", not "your call is wrong". */
|
|
7764
|
+
var UNAVAILABLE_TRPC_CODES = new Set([
|
|
7765
|
+
"TIMEOUT",
|
|
7766
|
+
"SERVICE_UNAVAILABLE",
|
|
7767
|
+
"BAD_GATEWAY",
|
|
7768
|
+
"GATEWAY_TIMEOUT"
|
|
7769
|
+
]);
|
|
7770
|
+
/** The exact phrases OUR transport raises when it cannot reach the hub. */
|
|
7771
|
+
var TRANSPORT_PHRASES = [
|
|
7772
|
+
"discovery deadline exceeded",
|
|
7773
|
+
"parent could not route child unowned cap call",
|
|
7774
|
+
"UDS request timed out after",
|
|
7775
|
+
"channel closed"
|
|
7776
|
+
];
|
|
7777
|
+
/** Moleculer error `type`s of a call that could not be served right now. */
|
|
7778
|
+
var MOLECULER_TRANSIENT_TYPES = new Set([
|
|
7779
|
+
"REQUEST_TIMEOUT",
|
|
7780
|
+
"SERVICE_NOT_FOUND",
|
|
7781
|
+
"SERVICE_NOT_AVAILABLE",
|
|
7782
|
+
"REQUEST_REJECTED",
|
|
7783
|
+
"BROKER_DISCONNECTED"
|
|
7784
|
+
]);
|
|
7785
|
+
function stringProp(value, key) {
|
|
7786
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
7787
|
+
const found = Reflect.get(value, key);
|
|
7788
|
+
return typeof found === "string" ? found : void 0;
|
|
7789
|
+
}
|
|
7790
|
+
/** The code an error carries: its own, its cause's, or a tRPC `data.code`. */
|
|
7791
|
+
function errorCode(err) {
|
|
7792
|
+
const out = {};
|
|
7793
|
+
const cause = typeof err === "object" && err !== null ? Reflect.get(err, "cause") : void 0;
|
|
7794
|
+
const data = typeof err === "object" && err !== null ? Reflect.get(err, "data") : void 0;
|
|
7795
|
+
const node = stringProp(err, "code") ?? stringProp(cause, "code");
|
|
7796
|
+
if (node !== void 0) out.node = node;
|
|
7797
|
+
const trpc = stringProp(data, "code");
|
|
7798
|
+
if (trpc !== void 0) out.trpc = trpc;
|
|
7799
|
+
return out;
|
|
7800
|
+
}
|
|
7801
|
+
/**
|
|
7802
|
+
* Is a settings read failure worth retrying, and with which budget? Only
|
|
7803
|
+
* EXPLICIT signals count: a socket error code, a tRPC "unavailable" code, or
|
|
7804
|
+
* one of the exact phrases our own transport raises. A message that merely
|
|
7805
|
+
* contains "timed out" or "unreachable" is not evidence of anything, and
|
|
7806
|
+
* `settings store not wired` is a wiring bug that retrying cannot fix.
|
|
7807
|
+
*/
|
|
7808
|
+
function classifyStoreError(err) {
|
|
7809
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
7810
|
+
if (RESTART_FINGERPRINTS.some((f) => message.includes(f))) return "restart";
|
|
7811
|
+
const code = errorCode(err);
|
|
7812
|
+
if (code.node !== void 0 && TRANSPORT_CODES.has(code.node)) return "transport";
|
|
7813
|
+
if (code.trpc !== void 0 && UNAVAILABLE_TRPC_CODES.has(code.trpc)) return "transport";
|
|
7814
|
+
if (typeof err === "object" && err !== null) {
|
|
7815
|
+
if (Reflect.get(err, "retryable") === true) return "transport";
|
|
7816
|
+
const type = stringProp(err, "type");
|
|
7817
|
+
if (type !== void 0 && MOLECULER_TRANSIENT_TYPES.has(type)) return "transport";
|
|
7818
|
+
}
|
|
7819
|
+
if (TRANSPORT_PHRASES.some((f) => message.includes(f))) return "transport";
|
|
7820
|
+
return "permanent";
|
|
7821
|
+
}
|
|
7712
7822
|
/**
|
|
7713
7823
|
* Collect the keys of every field marked `perNode: true`, recursing into
|
|
7714
7824
|
* layout containers (`group` fields and `sub-tabs` tabs) the same way
|
|
@@ -8549,7 +8659,7 @@ function sleep(ms) {
|
|
|
8549
8659
|
return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
|
|
8550
8660
|
}
|
|
8551
8661
|
//#endregion
|
|
8552
|
-
//#region ../types/dist/err-msg
|
|
8662
|
+
//#region ../types/dist/err-msg--2RrYiLO.mjs
|
|
8553
8663
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
8554
8664
|
DeviceType["Camera"] = "camera";
|
|
8555
8665
|
DeviceType["Hub"] = "hub";
|
|
@@ -8818,6 +8928,9 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
8818
8928
|
/** Virtual HA toggle (input_boolean.*) — distinguishable from a
|
|
8819
8929
|
* real Switch device for UI rendering / export adapters. */
|
|
8820
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";
|
|
8821
8934
|
/** Generic motion / occupancy / moving event source. Distinct from
|
|
8822
8935
|
* the camera accessory PirSensor role: that one is a camera child;
|
|
8823
8936
|
* this is a standalone HA / 3rd-party motion sensor. */
|
|
@@ -8895,7 +9008,7 @@ function errMsg(err) {
|
|
|
8895
9008
|
return String(err);
|
|
8896
9009
|
}
|
|
8897
9010
|
//#endregion
|
|
8898
|
-
//#region ../types/dist/composition-
|
|
9011
|
+
//#region ../types/dist/composition-DOwQB_Ua.mjs
|
|
8899
9012
|
/**
|
|
8900
9013
|
* Deterministic SHA-256 hash of an arbitrary serialisable value. The
|
|
8901
9014
|
* canonical form sorts object keys alphabetically at every depth so two
|
|
@@ -17238,6 +17351,28 @@ id: union([string(), number()]) }), {
|
|
|
17238
17351
|
kind: "mutation",
|
|
17239
17352
|
auth: "admin"
|
|
17240
17353
|
});
|
|
17354
|
+
/** One table of the settings database. */
|
|
17355
|
+
var StorageTableSchema = object({
|
|
17356
|
+
/** The table's full name, e.g. `recorder:addon-settings` or `addon-device-settings`. */
|
|
17357
|
+
name: string(),
|
|
17358
|
+
/** The owner prefix of a scoped name (`recorder` for `recorder:addon-settings`), else null. */
|
|
17359
|
+
owner: string().nullable(),
|
|
17360
|
+
rows: number().int().nonnegative(),
|
|
17361
|
+
/** Bytes the table's pages occupy (`dbstat`); null when the engine cannot measure. */
|
|
17362
|
+
bytes: number().int().nonnegative().nullable(),
|
|
17363
|
+
/** Declared by an addon since this engine process started (a running addon claims it). */
|
|
17364
|
+
declaredThisBoot: boolean()
|
|
17365
|
+
});
|
|
17366
|
+
method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: array(StorageTableSchema) }), { auth: "admin" }), method(object({
|
|
17367
|
+
collection: string().min(1),
|
|
17368
|
+
expectRows: number().int().nonnegative()
|
|
17369
|
+
}), object({
|
|
17370
|
+
dropped: literal(true),
|
|
17371
|
+
rows: number().int().nonnegative()
|
|
17372
|
+
}), {
|
|
17373
|
+
kind: "mutation",
|
|
17374
|
+
auth: "admin"
|
|
17375
|
+
});
|
|
17241
17376
|
/**
|
|
17242
17377
|
* `keychain` — the hub's encrypted store of secret values (D787).
|
|
17243
17378
|
*
|
|
@@ -17779,6 +17914,16 @@ method(object({}), KeychainStatusSchema, { auth: "admin" }), method(object({}),
|
|
|
17779
17914
|
kind: "mutation",
|
|
17780
17915
|
auth: "admin",
|
|
17781
17916
|
caller: "required"
|
|
17917
|
+
}), method(object({
|
|
17918
|
+
ref: string().min(1),
|
|
17919
|
+
value: string().min(1)
|
|
17920
|
+
}), object({
|
|
17921
|
+
ref: string(),
|
|
17922
|
+
version: number().int()
|
|
17923
|
+
}), {
|
|
17924
|
+
kind: "mutation",
|
|
17925
|
+
auth: "admin",
|
|
17926
|
+
caller: "required"
|
|
17782
17927
|
}), method(object({ refs: array(string().min(1)).max(1e3) }), object({
|
|
17783
17928
|
deleted: array(string()).readonly(),
|
|
17784
17929
|
kept: array(object({
|
|
@@ -40372,6 +40517,36 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
|
|
|
40372
40517
|
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
40373
40518
|
});
|
|
40374
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
|
+
/**
|
|
40375
40550
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
40376
40551
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
40377
40552
|
* provider by the `addonId` in the call input (the notification-output
|
|
@@ -40556,6 +40731,9 @@ method(LlmGenerateBaseInputSchema, LlmGenerateResultSchema, {
|
|
|
40556
40731
|
}), _void(), { kind: "mutation" }), method(object({}), array(LlmProfileKindDescriptorSchema)), method(object({}), array(LlmProfileSchema)), method(object({ profile: LlmProfileSchema }), LlmProfileSchema, {
|
|
40557
40732
|
kind: "mutation",
|
|
40558
40733
|
auth: "admin"
|
|
40734
|
+
}), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
|
|
40735
|
+
kind: "mutation",
|
|
40736
|
+
auth: "admin"
|
|
40559
40737
|
}), method(ProfileRefInputSchema, _void(), {
|
|
40560
40738
|
kind: "mutation",
|
|
40561
40739
|
auth: "admin"
|
|
@@ -52887,6 +53065,41 @@ var ServerRollbackInfoSchema = object({
|
|
|
52887
53065
|
atMs: number(),
|
|
52888
53066
|
reason: string()
|
|
52889
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
|
+
});
|
|
52890
53103
|
var ServerPackageStatusSchema = object({
|
|
52891
53104
|
/** Root package name (`@camstack/server` on the hub). */
|
|
52892
53105
|
packageName: string(),
|
|
@@ -52949,7 +53162,14 @@ var ServerPackageStatusSchema = object({
|
|
|
52949
53162
|
* for version skew: an older provider's payload simply omits it, and an
|
|
52950
53163
|
* absent wrapper is unknown — never `native`.
|
|
52951
53164
|
*/
|
|
52952
|
-
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()
|
|
52953
53173
|
});
|
|
52954
53174
|
var ServerUpdateCheckResultSchema = object({
|
|
52955
53175
|
packageName: string(),
|
|
@@ -53000,6 +53220,13 @@ var ServerUpdateOutcomeSchema = _enum([
|
|
|
53000
53220
|
"refused",
|
|
53001
53221
|
"failed"
|
|
53002
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
|
+
});
|
|
53003
53230
|
var ServerUpdateActionResultSchema = object({
|
|
53004
53231
|
accepted: boolean(),
|
|
53005
53232
|
targetVersion: string().nullable(),
|
|
@@ -53017,14 +53244,27 @@ var ServerUpdateActionResultSchema = object({
|
|
|
53017
53244
|
* The failure itself, verbatim enough to act on (the npm output for a
|
|
53018
53245
|
* staging install). Non-null only for `failed`.
|
|
53019
53246
|
*/
|
|
53020
|
-
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()
|
|
53021
53254
|
});
|
|
53022
53255
|
method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), ServerUpdateCheckResultSchema, {
|
|
53023
53256
|
kind: "mutation",
|
|
53024
53257
|
auth: "admin"
|
|
53025
|
-
}), method(object({
|
|
53026
|
-
/** Explicit target version; omitted = latest from the registry. */
|
|
53027
|
-
version: string().optional()
|
|
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, {
|
|
53028
53268
|
kind: "mutation",
|
|
53029
53269
|
auth: "admin",
|
|
53030
53270
|
timeoutMs: 16 * 6e4
|
|
@@ -55504,7 +55744,9 @@ var ManifestShapeSchema = object({
|
|
|
55504
55744
|
var AddonProcessSchema = object({
|
|
55505
55745
|
pid: number().optional(),
|
|
55506
55746
|
mode: string(),
|
|
55507
|
-
state: string()
|
|
55747
|
+
state: string(),
|
|
55748
|
+
/** Why the runner is `refused` (an addon's own words), when it is (D877). */
|
|
55749
|
+
reason: string().optional()
|
|
55508
55750
|
});
|
|
55509
55751
|
/**
|
|
55510
55752
|
* Per-addon health snapshot from the kernel's AddonHealthMonitor.
|
|
@@ -56920,6 +57162,12 @@ var ClimateControlStatusSchema = object({
|
|
|
56920
57162
|
/** Horizontal louver swing on/off. Null when the device has no
|
|
56921
57163
|
* horizontal swing surface (gate with `DeviceFeature.ClimateSwingHorizontal`). */
|
|
56922
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(),
|
|
56923
57171
|
/** Ms epoch when the slice was last updated (push or command). */
|
|
56924
57172
|
lastFetchedAt: number()
|
|
56925
57173
|
});
|
|
@@ -66455,7 +66703,11 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
66455
66703
|
kind: "mutation",
|
|
66456
66704
|
auth: "admin",
|
|
66457
66705
|
access: "delete"
|
|
66458
|
-
}), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(
|
|
66706
|
+
}), method(object({ userId: string() }), TotpStatusSchema, { auth: "admin" }), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
|
|
66707
|
+
kind: "mutation",
|
|
66708
|
+
auth: "admin",
|
|
66709
|
+
access: "create"
|
|
66710
|
+
}), method(object({
|
|
66459
66711
|
userId: string(),
|
|
66460
66712
|
code: string()
|
|
66461
66713
|
}), object({ valid: boolean() }), {
|
|
@@ -71843,6 +72095,12 @@ Object.freeze({
|
|
|
71843
72095
|
addonId: null,
|
|
71844
72096
|
access: "create"
|
|
71845
72097
|
},
|
|
72098
|
+
"keychainAdmin.importSecret": {
|
|
72099
|
+
capName: "keychain-admin",
|
|
72100
|
+
capScope: "system",
|
|
72101
|
+
addonId: null,
|
|
72102
|
+
access: "create"
|
|
72103
|
+
},
|
|
71846
72104
|
"keychainAdmin.listAudit": {
|
|
71847
72105
|
capName: "keychain-admin",
|
|
71848
72106
|
capScope: "system",
|
|
@@ -72011,6 +72269,12 @@ Object.freeze({
|
|
|
72011
72269
|
addonId: null,
|
|
72012
72270
|
access: "view"
|
|
72013
72271
|
},
|
|
72272
|
+
"llm.migrateRawSecrets": {
|
|
72273
|
+
capName: "llm",
|
|
72274
|
+
capScope: "system",
|
|
72275
|
+
addonId: null,
|
|
72276
|
+
access: "create"
|
|
72277
|
+
},
|
|
72014
72278
|
"llm.resolveModelRef": {
|
|
72015
72279
|
capName: "llm",
|
|
72016
72280
|
capScope: "system",
|
|
@@ -75629,6 +75893,18 @@ Object.freeze({
|
|
|
75629
75893
|
addonId: null,
|
|
75630
75894
|
access: "create"
|
|
75631
75895
|
},
|
|
75896
|
+
"storageAdmin.dropCollection": {
|
|
75897
|
+
capName: "storage-admin",
|
|
75898
|
+
capScope: "system",
|
|
75899
|
+
addonId: null,
|
|
75900
|
+
access: "delete"
|
|
75901
|
+
},
|
|
75902
|
+
"storageAdmin.listTables": {
|
|
75903
|
+
capName: "storage-admin",
|
|
75904
|
+
capScope: "system",
|
|
75905
|
+
addonId: null,
|
|
75906
|
+
access: "view"
|
|
75907
|
+
},
|
|
75632
75908
|
"storageEvictable.evict": {
|
|
75633
75909
|
capName: "storage-evictable",
|
|
75634
75910
|
capScope: "system",
|
|
@@ -76541,6 +76817,12 @@ Object.freeze({
|
|
|
76541
76817
|
addonId: null,
|
|
76542
76818
|
access: "view"
|
|
76543
76819
|
},
|
|
76820
|
+
"userManagement.migrateRawSecrets": {
|
|
76821
|
+
capName: "user-management",
|
|
76822
|
+
capScope: "system",
|
|
76823
|
+
addonId: null,
|
|
76824
|
+
access: "create"
|
|
76825
|
+
},
|
|
76544
76826
|
"userManagement.oauthExchangeCode": {
|
|
76545
76827
|
capName: "user-management",
|
|
76546
76828
|
capScope: "system",
|