@camstack/types 1.2.326 → 1.2.328
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/addon/base-addon.d.ts +58 -0
- package/dist/addon/secret-aware-context.d.ts +27 -0
- package/dist/addon/secret-paths.d.ts +48 -0
- package/dist/addon/secret-settings-view.d.ts +80 -0
- package/dist/addon.d.ts +2 -0
- package/dist/addon.js +54 -4
- package/dist/addon.mjs +27 -5
- package/dist/capabilities/addon-routes.cap.d.ts +2 -2
- package/dist/capabilities/addons.cap.d.ts +4 -4
- package/dist/capabilities/alerts.cap.d.ts +5 -5
- package/dist/capabilities/control.cap.d.ts +11 -11
- package/dist/capabilities/day-night.cap.d.ts +8 -8
- package/dist/capabilities/device-manager.cap.d.ts +9 -0
- package/dist/capabilities/enum-sensor.cap.d.ts +4 -4
- package/dist/capabilities/index.d.ts +7 -3
- package/dist/capabilities/integrations.cap.d.ts +6 -3
- package/dist/capabilities/keychain-admin.cap.d.ts +312 -0
- package/dist/capabilities/keychain.cap.d.ts +180 -0
- package/dist/capabilities/lawn-mower-control.cap.d.ts +4 -4
- package/dist/capabilities/local-network.cap.d.ts +2 -2
- package/dist/capabilities/log-channels.cap.d.ts +1 -1
- package/dist/capabilities/log-destination.cap.d.ts +5 -5
- package/dist/capabilities/login-method.cap.d.ts +3 -0
- package/dist/capabilities/mesh-network.cap.d.ts +3 -3
- package/dist/capabilities/network-access.cap.d.ts +7 -7
- package/dist/capabilities/notification-rules.cap.d.ts +30 -30
- package/dist/capabilities/osd-manager.cap.d.ts +11 -11
- package/dist/capabilities/osd.cap.d.ts +5 -5
- package/dist/capabilities/pipeline-analytics.cap.d.ts +1127 -104
- package/dist/capabilities/pipeline-orchestrator.cap.d.ts +384 -0
- package/dist/capabilities/pipeline-runner.cap.d.ts +145 -2
- package/dist/capabilities/sso-bridge.cap.d.ts +6 -0
- package/dist/capabilities/storage.cap.d.ts +1 -1
- package/dist/capabilities/system.cap.d.ts +21 -21
- package/dist/capabilities/user-management.cap.d.ts +53 -1
- package/dist/capabilities/webrtc-session.cap.d.ts +3 -3
- package/dist/client.js +38 -1
- package/dist/client.mjs +38 -1
- package/dist/device/device-context.d.ts +11 -1
- package/dist/device/display-icon-vocabulary.d.ts +7 -0
- package/dist/device/index.d.ts +2 -1
- package/dist/device/zod-secret.d.ts +35 -0
- package/dist/enums/event-category.d.ts +7 -0
- package/dist/enums.js +1 -1
- package/dist/enums.mjs +1 -1
- package/dist/{event-category-CtBAl88K.js → event-category-CHduMGvg.js} +7 -0
- package/dist/{event-category-B_0XEcLF.mjs → event-category-DaIZi00R.mjs} +7 -0
- package/dist/generated/addon-api.d.ts +376 -0
- package/dist/generated/cap-input-defaults.d.ts +1 -1
- package/dist/generated/capability-router-map.d.ts +8 -2
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/method-device-selectors.d.ts +1 -1
- package/dist/generated/system-proxy.d.ts +5 -3
- package/dist/health/wiring-health.d.ts +8 -8
- package/dist/index.d.ts +8 -3
- package/dist/index.js +1970 -110
- package/dist/index.mjs +1849 -107
- package/dist/interfaces/addon.d.ts +25 -0
- package/dist/interfaces/config-ui-secrets.d.ts +12 -0
- package/dist/interfaces/config-ui.d.ts +60 -3
- package/dist/interfaces/event-bus.d.ts +11 -0
- package/dist/interfaces/pipeline-runner-capability.d.ts +18 -0
- package/dist/keychain/index.d.ts +5 -0
- package/dist/keychain/known-secrets.d.ts +31 -0
- package/dist/keychain/resolve-secret-views.d.ts +2 -0
- package/dist/keychain/secret-marker.d.ts +52 -0
- package/dist/keychain/secret-ref.d.ts +62 -0
- package/dist/keychain/secrets-access.d.ts +77 -0
- package/dist/logging/log-channel.d.ts +2 -2
- package/dist/pipeline/auto-tune/plan-schemas.d.ts +123 -0
- package/dist/pipeline/auto-tune/recommend.d.ts +26 -1
- package/dist/pipeline/load-balancing/schemas.d.ts +8 -7
- package/dist/pipeline/node-benchmark/benchmark-mode.d.ts +57 -0
- package/dist/pipeline/node-benchmark/index.d.ts +9 -0
- package/dist/pipeline/node-benchmark/results.d.ts +52 -0
- package/dist/pipeline/node-benchmark/schemas.d.ts +848 -0
- package/dist/pipeline/node-benchmark/step-tree.d.ts +23 -0
- package/dist/{sleep-BNeXenvr.mjs → sleep-Cr5YOk3m.mjs} +1337 -33
- package/dist/{sleep-DPar9AHl.js → sleep-i3kl-0Na.js} +1628 -66
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_sleep = require("./sleep-
|
|
3
|
-
const require_event_category = require("./event-category-
|
|
2
|
+
const require_sleep = require("./sleep-i3kl-0Na.js");
|
|
3
|
+
const require_event_category = require("./event-category-CHduMGvg.js");
|
|
4
4
|
const require_composition = require("./composition-BLWAivB2.js");
|
|
5
5
|
const require_err_msg = require("./err-msg-Dx2Kor0g.js");
|
|
6
6
|
const require_enums = require("./enums.js");
|
|
@@ -1632,69 +1632,6 @@ function composeSwitchedOff(input) {
|
|
|
1632
1632
|
};
|
|
1633
1633
|
}
|
|
1634
1634
|
//#endregion
|
|
1635
|
-
//#region src/interfaces/config-ui-secrets.ts
|
|
1636
|
-
/**
|
|
1637
|
-
* The value a redacted secret is replaced with on every read surface.
|
|
1638
|
-
*
|
|
1639
|
-
* It is also the WRITE-BACK token: an `upsertLocation` that sends this value
|
|
1640
|
-
* back for a key means "keep what is stored", which is what lets an operator
|
|
1641
|
-
* rename a location without retyping its password. A literal an operator could
|
|
1642
|
-
* plausibly choose as a real password would turn that convenience into a way
|
|
1643
|
-
* to lock yourself out, hence the sentinel shape.
|
|
1644
|
-
*/
|
|
1645
|
-
var REDACTED_SECRET = "__camstack_redacted__";
|
|
1646
|
-
/** Is this field's stored value a credential? */
|
|
1647
|
-
function isSecretConfigField(field) {
|
|
1648
|
-
if (field.type === "password") return true;
|
|
1649
|
-
return "secret" in field && field.secret === true;
|
|
1650
|
-
}
|
|
1651
|
-
/**
|
|
1652
|
-
* Every config key in `schema` whose value is a secret, including keys nested
|
|
1653
|
-
* inside `group` / `sub-tabs` containers.
|
|
1654
|
-
*/
|
|
1655
|
-
function collectSecretConfigKeys(schema) {
|
|
1656
|
-
const keys = /* @__PURE__ */ new Set();
|
|
1657
|
-
for (const section of sectionsOf(schema)) for (const field of fieldsOf(section)) walkField(field, keys);
|
|
1658
|
-
return keys;
|
|
1659
|
-
}
|
|
1660
|
-
/**
|
|
1661
|
-
* True when the value is a readable schema declaring at least one field of any
|
|
1662
|
-
* kind. Lets a caller tell "this provider has no secrets" from "this provider's
|
|
1663
|
-
* schema could not be read", which are the same empty set otherwise.
|
|
1664
|
-
*/
|
|
1665
|
-
function schemaDeclaresAnyField(schema) {
|
|
1666
|
-
for (const section of sectionsOf(schema)) if (fieldsOf(section).length > 0) return true;
|
|
1667
|
-
return false;
|
|
1668
|
-
}
|
|
1669
|
-
function isRecord$3(value) {
|
|
1670
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1671
|
-
}
|
|
1672
|
-
function sectionsOf(schema) {
|
|
1673
|
-
if (!isRecord$3(schema)) return [];
|
|
1674
|
-
const sections = schema["sections"];
|
|
1675
|
-
return Array.isArray(sections) ? sections : [];
|
|
1676
|
-
}
|
|
1677
|
-
function fieldsOf(node) {
|
|
1678
|
-
if (!isRecord$3(node)) return [];
|
|
1679
|
-
const fields = node["fields"];
|
|
1680
|
-
return Array.isArray(fields) ? fields : [];
|
|
1681
|
-
}
|
|
1682
|
-
function walkField(field, out) {
|
|
1683
|
-
if (!isRecord$3(field)) return;
|
|
1684
|
-
const type = field["type"];
|
|
1685
|
-
const key = field["key"];
|
|
1686
|
-
if ((type === "password" || field["secret"] === true) && typeof key === "string" && key.length > 0) out.add(key);
|
|
1687
|
-
if (type === "group") {
|
|
1688
|
-
for (const child of fieldsOf(field)) walkField(child, out);
|
|
1689
|
-
return;
|
|
1690
|
-
}
|
|
1691
|
-
if (type === "sub-tabs") {
|
|
1692
|
-
const tabs = field["tabs"];
|
|
1693
|
-
if (!Array.isArray(tabs)) return;
|
|
1694
|
-
for (const tab of tabs) for (const child of fieldsOf(tab)) walkField(child, out);
|
|
1695
|
-
}
|
|
1696
|
-
}
|
|
1697
|
-
//#endregion
|
|
1698
1635
|
//#region src/interfaces/birth-decision-ledger.ts
|
|
1699
1636
|
/**
|
|
1700
1637
|
* Birth-decision ledger — one durable row per track-birth VERDICT (D409).
|
|
@@ -12591,6 +12528,277 @@ id: zod.z.union([zod.z.string(), zod.z.number()]) }), {
|
|
|
12591
12528
|
}
|
|
12592
12529
|
};
|
|
12593
12530
|
//#endregion
|
|
12531
|
+
//#region src/capabilities/keychain.cap.ts
|
|
12532
|
+
/**
|
|
12533
|
+
* `keychain` — the hub's encrypted store of secret values (D787).
|
|
12534
|
+
*
|
|
12535
|
+
* Settings blobs never hold a secret: they hold a marker
|
|
12536
|
+
* `{"$secret":"secret://<owner>/<scope>/<fieldPath>","v":1}` and the value
|
|
12537
|
+
* lives here, AES-256-GCM under a data key that a master key wraps. This cap
|
|
12538
|
+
* is the OWNER's door to its own values: every method is owner-checked
|
|
12539
|
+
* against the CALLER, never against anything the caller claims.
|
|
12540
|
+
*
|
|
12541
|
+
* Who the caller is: the transport stamps `callerAddonId` into the args of a
|
|
12542
|
+
* call that crossed a process (the parent `LocalChildRegistry` from the UDS
|
|
12543
|
+
* connection, the agent from its child's connection carried in
|
|
12544
|
+
* `$hub-cap-fwd`'s envelope). A stamp always overwrites; a wire call with no
|
|
12545
|
+
* stamp has its claim stripped. Only a hub in-process caller may state its own
|
|
12546
|
+
* identity — `ctx.secrets` does that with the addon id closed over. This is
|
|
12547
|
+
* identity against BUGS and misrouting, not against a malicious addon (every
|
|
12548
|
+
* runner is the same OS user): see the threat model in
|
|
12549
|
+
* `docs/design/2026-10-08-secrets-keychain.md`.
|
|
12550
|
+
*
|
|
12551
|
+
* `callerAddonId` is deliberately NOT in any input schema: the tRPC router
|
|
12552
|
+
* parses the input, so a session can never supply it, and the internal mount
|
|
12553
|
+
* floors every method to admin anyway (D240).
|
|
12554
|
+
*
|
|
12555
|
+
* Internal: addons reach it through `ctx.secrets`, never directly.
|
|
12556
|
+
*/
|
|
12557
|
+
/** Why a value cannot be served right now. Never folded into "missing". */
|
|
12558
|
+
var KeychainUnavailableReasonSchema = zod.z.enum([
|
|
12559
|
+
"key-missing",
|
|
12560
|
+
"wrong-key",
|
|
12561
|
+
"key-file-unreadable",
|
|
12562
|
+
"store-unavailable",
|
|
12563
|
+
"not-initialized",
|
|
12564
|
+
"decrypt-failed"
|
|
12565
|
+
]);
|
|
12566
|
+
var KeychainStateSchema = zod.z.discriminatedUnion("state", [zod.z.object({ state: zod.z.literal("ready") }), zod.z.object({
|
|
12567
|
+
state: zod.z.literal("locked"),
|
|
12568
|
+
reason: KeychainUnavailableReasonSchema
|
|
12569
|
+
})]);
|
|
12570
|
+
var KeychainResolveEntrySchema = zod.z.discriminatedUnion("kind", [
|
|
12571
|
+
zod.z.object({
|
|
12572
|
+
kind: zod.z.literal("value"),
|
|
12573
|
+
value: zod.z.string(),
|
|
12574
|
+
version: zod.z.number().int()
|
|
12575
|
+
}),
|
|
12576
|
+
zod.z.object({ kind: zod.z.literal("missing") }),
|
|
12577
|
+
zod.z.object({
|
|
12578
|
+
kind: zod.z.literal("unavailable"),
|
|
12579
|
+
reason: KeychainUnavailableReasonSchema
|
|
12580
|
+
}),
|
|
12581
|
+
zod.z.object({ kind: zod.z.literal("forbidden") })
|
|
12582
|
+
]);
|
|
12583
|
+
var KeychainResolveResultSchema = zod.z.record(zod.z.string(), KeychainResolveEntrySchema);
|
|
12584
|
+
/** Metadata of one stored value — never the value. */
|
|
12585
|
+
var KeychainSecretMetaSchema = zod.z.object({
|
|
12586
|
+
ref: zod.z.string(),
|
|
12587
|
+
owner: zod.z.string(),
|
|
12588
|
+
/** Formatted scope (`global`, `node/<id>`, `device/<id>`, …). */
|
|
12589
|
+
scope: zod.z.string(),
|
|
12590
|
+
fieldPath: zod.z.string(),
|
|
12591
|
+
version: zod.z.number().int(),
|
|
12592
|
+
createdAt: zod.z.number(),
|
|
12593
|
+
updatedAt: zod.z.number(),
|
|
12594
|
+
/** `addon:<id>` | `user:<id>` | `system`. */
|
|
12595
|
+
updatedBy: zod.z.string(),
|
|
12596
|
+
/** Coarse — written at most once an hour per ref. `null` = never read. */
|
|
12597
|
+
lastReadAt: zod.z.number().nullable()
|
|
12598
|
+
});
|
|
12599
|
+
/** A batch bound: one `resolveConfig` resolves every marker of one blob at once. */
|
|
12600
|
+
var KEYCHAIN_MAX_REFS_PER_CALL = 512;
|
|
12601
|
+
var RefListSchema = zod.z.array(zod.z.string().min(1)).max(512);
|
|
12602
|
+
var keychainCapability = {
|
|
12603
|
+
name: "keychain",
|
|
12604
|
+
scope: "system",
|
|
12605
|
+
mode: "singleton",
|
|
12606
|
+
internal: true,
|
|
12607
|
+
methods: {
|
|
12608
|
+
/** Store (or replace) the caller's value at `ref`. Refused while locked. */
|
|
12609
|
+
put: require_sleep.method(zod.z.object({
|
|
12610
|
+
ref: zod.z.string().min(1),
|
|
12611
|
+
value: zod.z.string().min(1)
|
|
12612
|
+
}), zod.z.object({
|
|
12613
|
+
ref: zod.z.string(),
|
|
12614
|
+
version: zod.z.number().int()
|
|
12615
|
+
}), {
|
|
12616
|
+
kind: "mutation",
|
|
12617
|
+
auth: "admin"
|
|
12618
|
+
}),
|
|
12619
|
+
/**
|
|
12620
|
+
* Resolve the caller's refs in one round-trip. A locked keychain answers
|
|
12621
|
+
* `unavailable` per ref — never `missing`, never an empty value.
|
|
12622
|
+
*/
|
|
12623
|
+
resolve: require_sleep.method(zod.z.object({ refs: RefListSchema }), KeychainResolveResultSchema, { auth: "admin" }),
|
|
12624
|
+
/** Remove the caller's refs. Unknown refs are ignored. */
|
|
12625
|
+
delete: require_sleep.method(zod.z.object({ refs: RefListSchema }), zod.z.object({ deleted: zod.z.number().int() }), {
|
|
12626
|
+
kind: "mutation",
|
|
12627
|
+
auth: "admin"
|
|
12628
|
+
}),
|
|
12629
|
+
/** The caller's own refs, metadata only. */
|
|
12630
|
+
listMeta: require_sleep.method(zod.z.object({}), zod.z.array(KeychainSecretMetaSchema).readonly(), { auth: "admin" }),
|
|
12631
|
+
/** Whether values can be served — the save path refuses a write while locked. */
|
|
12632
|
+
getState: require_sleep.method(zod.z.object({}), KeychainStateSchema, { auth: "admin" })
|
|
12633
|
+
}
|
|
12634
|
+
};
|
|
12635
|
+
//#endregion
|
|
12636
|
+
//#region src/capabilities/keychain-admin.cap.ts
|
|
12637
|
+
/**
|
|
12638
|
+
* `keychain-admin` — the operator's view of the keychain (System → Secrets).
|
|
12639
|
+
*
|
|
12640
|
+
* Every method is `admin`. Two methods hand out material, each audited and
|
|
12641
|
+
* each named for exactly that: {@link keychainAdminCapability.methods.reveal}
|
|
12642
|
+
* (one value, shown briefly by the UI) and `downloadRecoveryKey` (the master
|
|
12643
|
+
* key itself, so the operator can keep a copy off the hub). Nothing else
|
|
12644
|
+
* returns a value.
|
|
12645
|
+
*
|
|
12646
|
+
* The master key's LOCATION is configuration, never an env var (D788):
|
|
12647
|
+
* `keychain.keyFile` in `config.yaml`, the OS keychain on a desktop hub, else
|
|
12648
|
+
* `<dataDir>/.keychain/master.key` — which sits beside the database in every
|
|
12649
|
+
* whole-volume backup, and the status says so.
|
|
12650
|
+
*/
|
|
12651
|
+
/** Where the master key in use came from. */
|
|
12652
|
+
var KeychainKeySourceKindSchema = zod.z.enum([
|
|
12653
|
+
"config-file",
|
|
12654
|
+
"previous-config-file",
|
|
12655
|
+
"platform",
|
|
12656
|
+
"default-file"
|
|
12657
|
+
]);
|
|
12658
|
+
var KeychainKeySourceSchema = zod.z.object({
|
|
12659
|
+
kind: KeychainKeySourceKindSchema,
|
|
12660
|
+
/** File sources only — a path is not a secret. */
|
|
12661
|
+
path: zod.z.string().optional(),
|
|
12662
|
+
/**
|
|
12663
|
+
* True when a whole-volume backup of the data directory carries this key
|
|
12664
|
+
* next to the database it protects (the default file). The page warns.
|
|
12665
|
+
*/
|
|
12666
|
+
sharesBackupWithDatabase: zod.z.boolean()
|
|
12667
|
+
});
|
|
12668
|
+
var KeychainStatusSchema = zod.z.object({
|
|
12669
|
+
keychain: KeychainStateSchema,
|
|
12670
|
+
/** The source of the master key in use; `null` while locked. */
|
|
12671
|
+
keySource: KeychainKeySourceSchema.nullable(),
|
|
12672
|
+
/** The source configured to be primary — differs from `keySource` while a rotation is pending. */
|
|
12673
|
+
configuredSource: KeychainKeySourceSchema,
|
|
12674
|
+
/** Short fingerprint of the master key in use (`HMAC(KEK, label)`, 16 hex). */
|
|
12675
|
+
fingerprint: zod.z.string().nullable(),
|
|
12676
|
+
activeKeyId: zod.z.string().nullable(),
|
|
12677
|
+
/**
|
|
12678
|
+
* The keychain unlocked with a NON-primary source: the configured primary
|
|
12679
|
+
* key is not the one that wraps the data key yet. `rotateMasterKey` moves it.
|
|
12680
|
+
*/
|
|
12681
|
+
rotationPending: zod.z.boolean(),
|
|
12682
|
+
/** Wrapped copies of the data key under a previous master key, kept until purged. */
|
|
12683
|
+
retiredWraps: zod.z.number().int(),
|
|
12684
|
+
recoveryKeyDownloadedAt: zod.z.number().nullable(),
|
|
12685
|
+
secretCount: zod.z.number().int()
|
|
12686
|
+
});
|
|
12687
|
+
/**
|
|
12688
|
+
* Whether a stored value is still pointed at by its owner's settings.
|
|
12689
|
+
* `unknown` is a first-class answer: a scope whose blob could not be read is
|
|
12690
|
+
* never reported as an orphan (and never deleted as one).
|
|
12691
|
+
*/
|
|
12692
|
+
var KeychainSecretUsageSchema = zod.z.enum([
|
|
12693
|
+
"in-use",
|
|
12694
|
+
"orphan",
|
|
12695
|
+
"unknown"
|
|
12696
|
+
]);
|
|
12697
|
+
var KeychainAdminSecretSchema = KeychainSecretMetaSchema.extend({ usage: KeychainSecretUsageSchema });
|
|
12698
|
+
var KeychainAuditActionSchema = zod.z.enum([
|
|
12699
|
+
"put",
|
|
12700
|
+
"delete",
|
|
12701
|
+
"reveal",
|
|
12702
|
+
"rotate-master-key",
|
|
12703
|
+
"purge-retired-keys",
|
|
12704
|
+
"download-recovery-key",
|
|
12705
|
+
"delete-orphans",
|
|
12706
|
+
"reset",
|
|
12707
|
+
"initialize"
|
|
12708
|
+
]);
|
|
12709
|
+
var KeychainAuditEntrySchema = zod.z.object({
|
|
12710
|
+
id: zod.z.string(),
|
|
12711
|
+
at: zod.z.number(),
|
|
12712
|
+
action: KeychainAuditActionSchema,
|
|
12713
|
+
/** `addon:<id>` | `user:<id>` | `system`. */
|
|
12714
|
+
actor: zod.z.string(),
|
|
12715
|
+
ref: zod.z.string().nullable(),
|
|
12716
|
+
detail: zod.z.string().nullable()
|
|
12717
|
+
});
|
|
12718
|
+
var KEYCHAIN_RESET_CONFIRMATION = "RESET KEYCHAIN";
|
|
12719
|
+
var keychainAdminCapability = {
|
|
12720
|
+
name: "keychain-admin",
|
|
12721
|
+
scope: "system",
|
|
12722
|
+
mode: "singleton",
|
|
12723
|
+
methods: {
|
|
12724
|
+
status: require_sleep.method(zod.z.object({}), KeychainStatusSchema, { auth: "admin" }),
|
|
12725
|
+
listSecrets: require_sleep.method(zod.z.object({}), zod.z.array(KeychainAdminSecretSchema).readonly(), { auth: "admin" }),
|
|
12726
|
+
listAudit: require_sleep.method(zod.z.object({ limit: zod.z.number().int().min(1).max(500).optional() }), zod.z.array(KeychainAuditEntrySchema).readonly(), { auth: "admin" }),
|
|
12727
|
+
/**
|
|
12728
|
+
* Show one value to the operator. Audited. The UI hides it again after a
|
|
12729
|
+
* few seconds; nothing caches it.
|
|
12730
|
+
*/
|
|
12731
|
+
reveal: require_sleep.method(zod.z.object({ ref: zod.z.string().min(1) }), zod.z.object({
|
|
12732
|
+
value: zod.z.string(),
|
|
12733
|
+
version: zod.z.number().int()
|
|
12734
|
+
}), {
|
|
12735
|
+
kind: "mutation",
|
|
12736
|
+
auth: "admin",
|
|
12737
|
+
caller: "required"
|
|
12738
|
+
}),
|
|
12739
|
+
/** Delete refs no owner points at any more. Re-checked here; `unknown` is kept. */
|
|
12740
|
+
deleteOrphans: require_sleep.method(zod.z.object({ refs: zod.z.array(zod.z.string().min(1)).max(1e3) }), zod.z.object({
|
|
12741
|
+
deleted: zod.z.array(zod.z.string()).readonly(),
|
|
12742
|
+
kept: zod.z.array(zod.z.object({
|
|
12743
|
+
ref: zod.z.string(),
|
|
12744
|
+
usage: KeychainSecretUsageSchema
|
|
12745
|
+
})).readonly()
|
|
12746
|
+
}), {
|
|
12747
|
+
kind: "mutation",
|
|
12748
|
+
auth: "admin",
|
|
12749
|
+
caller: "required"
|
|
12750
|
+
}),
|
|
12751
|
+
/**
|
|
12752
|
+
* Wrap the data key under the configured primary master key.
|
|
12753
|
+
*
|
|
12754
|
+
* Pending rotation (the keychain unlocked with a previous source): re-wrap
|
|
12755
|
+
* under the primary. Otherwise, with the default file as primary: generate
|
|
12756
|
+
* a new master key, write it there, re-wrap. A file or OS-keychain primary
|
|
12757
|
+
* that is already in use cannot be replaced from here — put the new key at
|
|
12758
|
+
* the source, keep the old one as `keychain.previousKeyFile`, restart, and
|
|
12759
|
+
* rotate. No value is re-encrypted either way; the previous wrap is kept
|
|
12760
|
+
* (retired) until purged.
|
|
12761
|
+
*/
|
|
12762
|
+
rotateMasterKey: require_sleep.method(zod.z.object({}), zod.z.object({
|
|
12763
|
+
fingerprint: zod.z.string(),
|
|
12764
|
+
keySource: KeychainKeySourceSchema
|
|
12765
|
+
}), {
|
|
12766
|
+
kind: "mutation",
|
|
12767
|
+
auth: "admin",
|
|
12768
|
+
caller: "required"
|
|
12769
|
+
}),
|
|
12770
|
+
purgeRetiredKeys: require_sleep.method(zod.z.object({}), zod.z.object({ purged: zod.z.number().int() }), {
|
|
12771
|
+
kind: "mutation",
|
|
12772
|
+
auth: "admin",
|
|
12773
|
+
caller: "required"
|
|
12774
|
+
}),
|
|
12775
|
+
/** The master key, base64. Audited; marks the recovery copy as taken. */
|
|
12776
|
+
downloadRecoveryKey: require_sleep.method(zod.z.object({}), zod.z.object({
|
|
12777
|
+
key: zod.z.string(),
|
|
12778
|
+
fingerprint: zod.z.string(),
|
|
12779
|
+
keySource: KeychainKeySourceSchema
|
|
12780
|
+
}), {
|
|
12781
|
+
kind: "mutation",
|
|
12782
|
+
auth: "admin",
|
|
12783
|
+
caller: "required"
|
|
12784
|
+
}),
|
|
12785
|
+
/**
|
|
12786
|
+
* Lost-key recovery: archive every stored value into a
|
|
12787
|
+
* `keychain:secrets-orphaned-<ts>` table and start over with a new data
|
|
12788
|
+
* key. Every secret field then reads "not set". Requires the typed
|
|
12789
|
+
* confirmation {@link KEYCHAIN_RESET_CONFIRMATION}.
|
|
12790
|
+
*/
|
|
12791
|
+
resetKeychain: require_sleep.method(zod.z.object({ confirm: zod.z.literal(KEYCHAIN_RESET_CONFIRMATION) }), zod.z.object({
|
|
12792
|
+
archivedCollection: zod.z.string().nullable(),
|
|
12793
|
+
archived: zod.z.number().int()
|
|
12794
|
+
}), {
|
|
12795
|
+
kind: "mutation",
|
|
12796
|
+
auth: "admin",
|
|
12797
|
+
caller: "required"
|
|
12798
|
+
})
|
|
12799
|
+
}
|
|
12800
|
+
};
|
|
12801
|
+
//#endregion
|
|
12594
12802
|
//#region src/capabilities/decoder.cap.ts
|
|
12595
12803
|
/**
|
|
12596
12804
|
* Stable UI option list for the `hwaccel` setting. Decoder addons
|
|
@@ -14084,6 +14292,10 @@ var DeviceInfoSchema = zod.z.object({
|
|
|
14084
14292
|
isCamera: zod.z.boolean(),
|
|
14085
14293
|
/** Current config values — serializable snapshot */
|
|
14086
14294
|
config: zod.z.record(zod.z.string(), zod.z.unknown()),
|
|
14295
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
14296
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
14297
|
+
* when the owning runner has not reported them. */
|
|
14298
|
+
secretConfigPaths: zod.z.array(zod.z.string()).optional(),
|
|
14087
14299
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
14088
14300
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
14089
14301
|
metadata: zod.z.record(zod.z.string(), zod.z.unknown()).nullable().optional(),
|
|
@@ -14304,12 +14516,22 @@ var DeviceRegisterPayloadSchema = zod.z.object({
|
|
|
14304
14516
|
* call (workers re-register on init), so probe-driven updates
|
|
14305
14517
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
14306
14518
|
features: zod.z.array(zod.z.string()).optional(),
|
|
14307
|
-
config: zod.z.record(zod.z.string(), zod.z.unknown())
|
|
14519
|
+
config: zod.z.record(zod.z.string(), zod.z.unknown()),
|
|
14520
|
+
/** Config paths the device's own schema DECLARES secret
|
|
14521
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
14522
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
14523
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
14524
|
+
* omits it and the keyword backstop applies. */
|
|
14525
|
+
secretConfigPaths: zod.z.array(zod.z.string()).optional()
|
|
14308
14526
|
});
|
|
14309
14527
|
var DeviceRemovePayloadSchema = zod.z.object({ deviceId: zod.z.number() });
|
|
14310
14528
|
var DevicePersistConfigPayloadSchema = zod.z.object({
|
|
14311
14529
|
deviceId: zod.z.number(),
|
|
14312
|
-
data: zod.z.record(zod.z.string(), zod.z.unknown())
|
|
14530
|
+
data: zod.z.record(zod.z.string(), zod.z.unknown()),
|
|
14531
|
+
/** The paths the device's schema declares secret (D783), when the caller
|
|
14532
|
+
* knows them — those values are kept in the keychain, not the blob (D787).
|
|
14533
|
+
* Absent: the paths the device last reported at `registerDevice` apply. */
|
|
14534
|
+
secretConfigPaths: zod.z.array(zod.z.string()).optional()
|
|
14313
14535
|
});
|
|
14314
14536
|
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
14315
14537
|
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
@@ -17538,7 +17760,14 @@ var RedirectLoginMethodSchema = zod.z.object({
|
|
|
17538
17760
|
icon: zod.z.string().optional(),
|
|
17539
17761
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
17540
17762
|
startUrl: zod.z.string(),
|
|
17541
|
-
stage: LoginStageEnum
|
|
17763
|
+
stage: LoginStageEnum,
|
|
17764
|
+
/**
|
|
17765
|
+
* The provider names an external identity a signed-in user can link to
|
|
17766
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
17767
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
17768
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
17769
|
+
*/
|
|
17770
|
+
linkable: zod.z.boolean().optional()
|
|
17542
17771
|
});
|
|
17543
17772
|
/**
|
|
17544
17773
|
* A Module-Federation widget the login page mounts for an in-page
|
|
@@ -24689,8 +24918,23 @@ var RetrainMacroClassSchema = zod.z.enum([
|
|
|
24689
24918
|
]);
|
|
24690
24919
|
/** A subject to learn, or a phantom to unlearn (taught by OMISSION). */
|
|
24691
24920
|
var RetrainAnnotationKindSchema = zod.z.enum(["subject", "model_error"]);
|
|
24692
|
-
/**
|
|
24693
|
-
|
|
24921
|
+
/**
|
|
24922
|
+
* Where a box came from. A machine-sourced box is a DRAFT on the page until
|
|
24923
|
+
* the operator confirms it; once saved it keeps its source as provenance.
|
|
24924
|
+
*
|
|
24925
|
+
* - `operator` — drawn by hand.
|
|
24926
|
+
* - `assist` — proposed by a detector run on the copy (the camera's own
|
|
24927
|
+
* model, or a larger teacher model).
|
|
24928
|
+
* - `pipeline` — the box the live pipeline actually drew on that frame, read
|
|
24929
|
+
* back from the track store (never a re-run).
|
|
24930
|
+
* - `llm` — proposed by a vision-capable LLM profile.
|
|
24931
|
+
*/
|
|
24932
|
+
var RetrainAnnotationSourceSchema = zod.z.enum([
|
|
24933
|
+
"operator",
|
|
24934
|
+
"assist",
|
|
24935
|
+
"pipeline",
|
|
24936
|
+
"llm"
|
|
24937
|
+
]);
|
|
24694
24938
|
/** Normalised `[0,1]` rectangle against the FULL frame — the canonical form. */
|
|
24695
24939
|
var RetrainBboxSchema = zod.z.object({
|
|
24696
24940
|
x: zod.z.number(),
|
|
@@ -24708,7 +24952,8 @@ var RetrainBboxSchema = zod.z.object({
|
|
|
24708
24952
|
*/
|
|
24709
24953
|
var RetrainAnnotationSchema = zod.z.object({
|
|
24710
24954
|
id: zod.z.string(),
|
|
24711
|
-
|
|
24955
|
+
/** The frame's track. Absent on a recording still, which has none. */
|
|
24956
|
+
trackId: zod.z.string().optional(),
|
|
24712
24957
|
deviceId: zod.z.number(),
|
|
24713
24958
|
/** The COPY in retrain storage — never the source track's media key. */
|
|
24714
24959
|
mediaKey: zod.z.string(),
|
|
@@ -24757,18 +25002,63 @@ var RetrainFrameCandidateSchema = zod.z.object({
|
|
|
24757
25002
|
* fail, whatever became of the original. */
|
|
24758
25003
|
copied: zod.z.boolean()
|
|
24759
25004
|
});
|
|
25005
|
+
/**
|
|
25006
|
+
* One box the live pipeline drew on a copied frame — what a correction starts
|
|
25007
|
+
* from. Derived when the frame is listed, from the track store: the subject
|
|
25008
|
+
* box recorded on the source media row when there is one, else the track
|
|
25009
|
+
* position nearest the frame's capture time. Never stored as an annotation
|
|
25010
|
+
* until the operator confirms it.
|
|
25011
|
+
*/
|
|
25012
|
+
var RetrainPipelineBoxSchema = zod.z.object({
|
|
25013
|
+
/** Normalised `[0,1]` against the full frame. */
|
|
25014
|
+
bbox: RetrainBboxSchema,
|
|
25015
|
+
macroClass: RetrainMacroClassSchema,
|
|
25016
|
+
label: zod.z.string().optional(),
|
|
25017
|
+
subLabel: zod.z.string().optional(),
|
|
25018
|
+
/** The detection score of the position used, when it was recorded. */
|
|
25019
|
+
score: zod.z.number().optional(),
|
|
25020
|
+
/** The root model that produced the track, when it was recorded. */
|
|
25021
|
+
modelId: zod.z.string().optional(),
|
|
25022
|
+
trackId: zod.z.string(),
|
|
25023
|
+
/** `subject-box`: recorded on this very frame. `position`: the track's
|
|
25024
|
+
* position nearest the capture time, `deltaMs` away. */
|
|
25025
|
+
basis: zod.z.enum(["subject-box", "position"]),
|
|
25026
|
+
deltaMs: zod.z.number()
|
|
25027
|
+
});
|
|
25028
|
+
/**
|
|
25029
|
+
* Where a retrain frame came from: a TRACK's stored media (copy-on-select),
|
|
25030
|
+
* or the RECORDING at an instant — the frame a model saw nothing in has no
|
|
25031
|
+
* track at all.
|
|
25032
|
+
*/
|
|
25033
|
+
var RetrainFrameOriginSchema = zod.z.enum(["track", "recording"]);
|
|
24760
25034
|
/** A frame the dataset OWNS: bytes copied at selection time. */
|
|
24761
25035
|
var RetrainFrameSchema = zod.z.object({
|
|
24762
25036
|
frameId: zod.z.string(),
|
|
24763
25037
|
deviceId: zod.z.number(),
|
|
24764
|
-
|
|
24765
|
-
/**
|
|
24766
|
-
|
|
25038
|
+
origin: RetrainFrameOriginSchema,
|
|
25039
|
+
/** The track it was copied from. Absent on a recording still. */
|
|
25040
|
+
trackId: zod.z.string().optional(),
|
|
25041
|
+
/** Provenance only. It may already point at nothing — that is expected.
|
|
25042
|
+
* Absent on a recording still. */
|
|
25043
|
+
sourceMediaId: zod.z.number().int().optional(),
|
|
25044
|
+
/** A recording still: the playhead instant it was taken at. */
|
|
25045
|
+
epochMs: zod.z.number().optional(),
|
|
24767
25046
|
sourceKind: MediaFileKindEnum,
|
|
24768
25047
|
sizeBytes: zod.z.number().int(),
|
|
24769
25048
|
width: zod.z.number().int(),
|
|
24770
25049
|
height: zod.z.number().int(),
|
|
24771
|
-
copiedAt: zod.z.number()
|
|
25050
|
+
copiedAt: zod.z.number(),
|
|
25051
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
25052
|
+
capturedAt: zod.z.number().optional(),
|
|
25053
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
25054
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
25055
|
+
* a false positive. */
|
|
25056
|
+
complete: zod.z.boolean(),
|
|
25057
|
+
/** The boxes the pipeline drew on this frame. Present on list answers;
|
|
25058
|
+
* empty when nothing the track store holds can be placed on it. */
|
|
25059
|
+
pipelineBoxes: zod.z.array(RetrainPipelineBoxSchema).readonly().optional(),
|
|
25060
|
+
/** The named collections this frame belongs to. Present on list answers. */
|
|
25061
|
+
collectionIds: zod.z.array(zod.z.string()).readonly().optional()
|
|
24772
25062
|
});
|
|
24773
25063
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
24774
25064
|
var RetrainCopyRefusalSchema = zod.z.enum([
|
|
@@ -24789,6 +25079,53 @@ var RetrainFrameListSchema = zod.z.object({
|
|
|
24789
25079
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
24790
25080
|
autoPickMediaId: zod.z.number().int().optional()
|
|
24791
25081
|
});
|
|
25082
|
+
/**
|
|
25083
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
25084
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
25085
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
25086
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
25087
|
+
* export carried (`exportedInBatch`).
|
|
25088
|
+
*/
|
|
25089
|
+
var RetrainExportFilterSchema = zod.z.object({
|
|
25090
|
+
deviceIds: zod.z.array(zod.z.number()).optional(),
|
|
25091
|
+
frameIds: zod.z.array(zod.z.string()).max(2e4).optional(),
|
|
25092
|
+
/** Only frames in at least one of these named collections. */
|
|
25093
|
+
collectionIds: zod.z.array(zod.z.string()).max(200).optional(),
|
|
25094
|
+
batchId: zod.z.string().optional(),
|
|
25095
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
25096
|
+
completeOnly: zod.z.boolean().optional()
|
|
25097
|
+
});
|
|
25098
|
+
/**
|
|
25099
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
25100
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
25101
|
+
* convention — the classifier layout.
|
|
25102
|
+
*/
|
|
25103
|
+
var RetrainExportLayoutSchema = zod.z.enum(["frames", "crops"]);
|
|
25104
|
+
/**
|
|
25105
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
25106
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
25107
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
25108
|
+
* logged.
|
|
25109
|
+
*/
|
|
25110
|
+
var RetrainArchiveTargetSchema = zod.z.object({
|
|
25111
|
+
kind: zod.z.literal("http"),
|
|
25112
|
+
method: zod.z.enum(["PUT", "POST"]),
|
|
25113
|
+
url: zod.z.string().url(),
|
|
25114
|
+
headers: zod.z.record(zod.z.string(), zod.z.string()).optional()
|
|
25115
|
+
});
|
|
25116
|
+
var RetrainArchiveResultSchema = zod.z.object({
|
|
25117
|
+
batchId: zod.z.string(),
|
|
25118
|
+
frames: zod.z.number().int(),
|
|
25119
|
+
crops: zod.z.number().int(),
|
|
25120
|
+
annotations: zod.z.number().int(),
|
|
25121
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
25122
|
+
missing: zod.z.number().int(),
|
|
25123
|
+
bytes: zod.z.number().int(),
|
|
25124
|
+
/** sha256 of the exact bytes sent. */
|
|
25125
|
+
sha256: zod.z.string(),
|
|
25126
|
+
/** The target's HTTP status. */
|
|
25127
|
+
status: zod.z.number().int()
|
|
25128
|
+
});
|
|
24792
25129
|
/** What the operator asked the assist to look for. */
|
|
24793
25130
|
var RetrainAssistSubjectSchema = zod.z.discriminatedUnion("kind", [zod.z.object({
|
|
24794
25131
|
kind: zod.z.literal("package"),
|
|
@@ -24818,6 +25155,109 @@ var RetrainAssistResultSchema = zod.z.discriminatedUnion("kind", [zod.z.object({
|
|
|
24818
25155
|
reason: zod.z.string(),
|
|
24819
25156
|
detail: zod.z.string().optional()
|
|
24820
25157
|
})]);
|
|
25158
|
+
/** A named set over the retrain corpus — membership only, it owns no pixels. */
|
|
25159
|
+
var RetrainCollectionSchema = zod.z.object({
|
|
25160
|
+
id: zod.z.string(),
|
|
25161
|
+
name: zod.z.string(),
|
|
25162
|
+
createdAt: zod.z.number(),
|
|
25163
|
+
frameCount: zod.z.number().int()
|
|
25164
|
+
});
|
|
25165
|
+
var RetrainCollectionCreateResultSchema = zod.z.discriminatedUnion("kind", [zod.z.object({
|
|
25166
|
+
kind: zod.z.literal("created"),
|
|
25167
|
+
collection: RetrainCollectionSchema
|
|
25168
|
+
}), zod.z.object({
|
|
25169
|
+
kind: zod.z.literal("refused"),
|
|
25170
|
+
reason: zod.z.enum(["empty-name", "duplicate-name"])
|
|
25171
|
+
})]);
|
|
25172
|
+
var RetrainCollectionRenameResultSchema = zod.z.discriminatedUnion("kind", [zod.z.object({
|
|
25173
|
+
kind: zod.z.literal("renamed"),
|
|
25174
|
+
collection: RetrainCollectionSchema
|
|
25175
|
+
}), zod.z.object({
|
|
25176
|
+
kind: zod.z.literal("refused"),
|
|
25177
|
+
reason: zod.z.enum([
|
|
25178
|
+
"empty-name",
|
|
25179
|
+
"duplicate-name",
|
|
25180
|
+
"unknown-collection"
|
|
25181
|
+
])
|
|
25182
|
+
})]);
|
|
25183
|
+
/**
|
|
25184
|
+
* The outcome of adding the frame at a recording instant. Every refusal is
|
|
25185
|
+
* named: `still-unavailable` (not recording, a gap, or an undecodable frame —
|
|
25186
|
+
* `detail` says which), `still-busy` (the recorder is at its decode bound; try
|
|
25187
|
+
* again), `unreadable-image`, `write-failed`, `unknown-collection`.
|
|
25188
|
+
*/
|
|
25189
|
+
var AddRetrainFrameFromRecordingResultSchema = zod.z.discriminatedUnion("kind", [zod.z.object({
|
|
25190
|
+
kind: zod.z.literal("added"),
|
|
25191
|
+
collectionId: zod.z.string(),
|
|
25192
|
+
frame: RetrainFrameSchema,
|
|
25193
|
+
/** The moment was already in the dataset; nothing was decoded. */
|
|
25194
|
+
reused: zod.z.boolean()
|
|
25195
|
+
}), zod.z.object({
|
|
25196
|
+
kind: zod.z.literal("refused"),
|
|
25197
|
+
reason: zod.z.enum([
|
|
25198
|
+
"unknown-collection",
|
|
25199
|
+
"still-unavailable",
|
|
25200
|
+
"still-busy",
|
|
25201
|
+
"unreadable-image",
|
|
25202
|
+
"write-failed"
|
|
25203
|
+
]),
|
|
25204
|
+
detail: zod.z.string().optional()
|
|
25205
|
+
})]);
|
|
25206
|
+
/** A vision LLM profile the AI assist may use, and where it sends the frame. */
|
|
25207
|
+
var RetrainAssistProfileSchema = zod.z.object({
|
|
25208
|
+
id: zod.z.string(),
|
|
25209
|
+
name: zod.z.string(),
|
|
25210
|
+
model: zod.z.string(),
|
|
25211
|
+
kind: zod.z.string(),
|
|
25212
|
+
/** `true` when the frame would leave the house (a cloud vendor, or an
|
|
25213
|
+
* endpoint that is not on the local network). The page confirms each such
|
|
25214
|
+
* run, and the provider refuses one without `allowCloud`. */
|
|
25215
|
+
leavesHouse: zod.z.boolean()
|
|
25216
|
+
});
|
|
25217
|
+
/** A box the AI assist proposed: a draft, plus the model's own reason. */
|
|
25218
|
+
var RetrainLlmProposalSchema = RetrainAnnotationDraftSchema.extend({ reason: zod.z.string() });
|
|
25219
|
+
/** What the AI assist said about a box that was already on the canvas. */
|
|
25220
|
+
var RetrainLlmReviewSchema = zod.z.object({
|
|
25221
|
+
/** The `ref` the page sent the box under. */
|
|
25222
|
+
ref: zod.z.string(),
|
|
25223
|
+
verdict: zod.z.enum([
|
|
25224
|
+
"confirmed",
|
|
25225
|
+
"wrong-class",
|
|
25226
|
+
"not-an-object",
|
|
25227
|
+
"uncertain"
|
|
25228
|
+
]),
|
|
25229
|
+
suggestedClass: RetrainMacroClassSchema.optional(),
|
|
25230
|
+
reason: zod.z.string()
|
|
25231
|
+
});
|
|
25232
|
+
/**
|
|
25233
|
+
* The AI assist's answer. `proposed` carries drafts (`source: 'llm'`, the
|
|
25234
|
+
* model and its confidence) and reviews; items the model got wrong (a box off
|
|
25235
|
+
* the frame, an unasked class, an unknown ref) are dropped and counted in
|
|
25236
|
+
* `rejected`. A whole answer that is not the schema is `malformed-answer`.
|
|
25237
|
+
*/
|
|
25238
|
+
var RetrainLlmAssistResultSchema = zod.z.discriminatedUnion("kind", [zod.z.object({
|
|
25239
|
+
kind: zod.z.literal("proposed"),
|
|
25240
|
+
profileId: zod.z.string(),
|
|
25241
|
+
model: zod.z.string(),
|
|
25242
|
+
/** The frame was sent outside the house for this answer. */
|
|
25243
|
+
leftHouse: zod.z.boolean(),
|
|
25244
|
+
proposals: zod.z.array(RetrainLlmProposalSchema).readonly(),
|
|
25245
|
+
reviews: zod.z.array(RetrainLlmReviewSchema).readonly(),
|
|
25246
|
+
rejected: zod.z.number().int()
|
|
25247
|
+
}), zod.z.object({
|
|
25248
|
+
kind: zod.z.literal("refused"),
|
|
25249
|
+
reason: zod.z.enum([
|
|
25250
|
+
"unknown-frame",
|
|
25251
|
+
"unreadable-frame",
|
|
25252
|
+
"unknown-profile",
|
|
25253
|
+
"profile-disabled",
|
|
25254
|
+
"no-vision",
|
|
25255
|
+
"cloud-not-confirmed",
|
|
25256
|
+
"llm-error",
|
|
25257
|
+
"malformed-answer"
|
|
25258
|
+
]),
|
|
25259
|
+
detail: zod.z.string().optional()
|
|
25260
|
+
})]);
|
|
24821
25261
|
/** The outcome of a lifecycle move owned by the retrain page. */
|
|
24822
25262
|
var RetrainTransitionResultSchema = zod.z.object({
|
|
24823
25263
|
trackId: zod.z.string(),
|
|
@@ -26053,7 +26493,7 @@ var pipelineAnalyticsCapability = {
|
|
|
26053
26493
|
* a frame leaves the dataset before export. */
|
|
26054
26494
|
deselectRetrainFrame: require_sleep.method(zod.z.object({
|
|
26055
26495
|
deviceId: zod.z.number(),
|
|
26056
|
-
trackId: zod.z.string(),
|
|
26496
|
+
trackId: zod.z.string().optional(),
|
|
26057
26497
|
frameId: zod.z.string()
|
|
26058
26498
|
}), zod.z.object({
|
|
26059
26499
|
removed: zod.z.boolean(),
|
|
@@ -26096,7 +26536,8 @@ var pipelineAnalyticsCapability = {
|
|
|
26096
26536
|
*/
|
|
26097
26537
|
proposeRetrainAnnotations: require_sleep.method(zod.z.object({
|
|
26098
26538
|
deviceId: zod.z.number(),
|
|
26099
|
-
|
|
26539
|
+
/** The frame's track, when it has one — checked against the frame. */
|
|
26540
|
+
trackId: zod.z.string().optional(),
|
|
26100
26541
|
frameId: zod.z.string(),
|
|
26101
26542
|
subject: RetrainAssistSubjectSchema,
|
|
26102
26543
|
/** Which node runs it. Absent ⇒ wherever an unowned call lands. */
|
|
@@ -26105,8 +26546,12 @@ var pipelineAnalyticsCapability = {
|
|
|
26105
26546
|
kind: "mutation",
|
|
26106
26547
|
auth: "admin"
|
|
26107
26548
|
}),
|
|
26108
|
-
/** Every annotation on a track,
|
|
26109
|
-
|
|
26549
|
+
/** Every annotation on a track, or on named frames (a recording still has
|
|
26550
|
+
* no track), oldest first. One of the two is required. */
|
|
26551
|
+
listRetrainAnnotations: require_sleep.method(zod.z.object({
|
|
26552
|
+
trackId: zod.z.string().optional(),
|
|
26553
|
+
frameIds: zod.z.array(zod.z.string()).max(2e3).optional()
|
|
26554
|
+
}), zod.z.array(RetrainAnnotationSchema).readonly(), {
|
|
26110
26555
|
kind: "query",
|
|
26111
26556
|
auth: "admin"
|
|
26112
26557
|
}),
|
|
@@ -26125,7 +26570,8 @@ var pipelineAnalyticsCapability = {
|
|
|
26125
26570
|
*/
|
|
26126
26571
|
saveRetrainAnnotations: require_sleep.method(zod.z.object({
|
|
26127
26572
|
deviceId: zod.z.number(),
|
|
26128
|
-
|
|
26573
|
+
/** The frame's track, when it has one — checked against the frame. */
|
|
26574
|
+
trackId: zod.z.string().optional(),
|
|
26129
26575
|
frameId: zod.z.string(),
|
|
26130
26576
|
annotations: zod.z.array(RetrainAnnotationDraftSchema)
|
|
26131
26577
|
}), zod.z.array(RetrainAnnotationSchema).readonly(), {
|
|
@@ -26177,7 +26623,146 @@ var pipelineAnalyticsCapability = {
|
|
|
26177
26623
|
* out, so two crops of the same subject can never end up in one feature
|
|
26178
26624
|
* space (D52).
|
|
26179
26625
|
*/
|
|
26180
|
-
getRetrainExportUrl: require_sleep.method(
|
|
26626
|
+
getRetrainExportUrl: require_sleep.method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), zod.z.object({ url: zod.z.string() }), {
|
|
26627
|
+
kind: "query",
|
|
26628
|
+
auth: "admin"
|
|
26629
|
+
}),
|
|
26630
|
+
/**
|
|
26631
|
+
* The operator's "every subject in this frame is boxed" — set and cleared
|
|
26632
|
+
* by hand, never derived: a frame with no box may be a complete hard
|
|
26633
|
+
* negative, and a frame with three boxes may still miss a fourth person.
|
|
26634
|
+
*/
|
|
26635
|
+
setRetrainFrameComplete: require_sleep.method(zod.z.object({
|
|
26636
|
+
deviceId: zod.z.number(),
|
|
26637
|
+
trackId: zod.z.string().optional(),
|
|
26638
|
+
frameId: zod.z.string(),
|
|
26639
|
+
complete: zod.z.boolean()
|
|
26640
|
+
}), RetrainFrameSchema, {
|
|
26641
|
+
kind: "mutation",
|
|
26642
|
+
auth: "admin"
|
|
26643
|
+
}),
|
|
26644
|
+
/**
|
|
26645
|
+
* Stream the annotated archive to a TARGET instead of a browser — the
|
|
26646
|
+
* same tar `getRetrainExportUrl` serves (manifest first, one JPEG in
|
|
26647
|
+
* memory at a time, paced), written chunk by chunk into one HTTP request.
|
|
26648
|
+
* The bytes never cross this cap and never land on the hub's disk; the
|
|
26649
|
+
* answer is what was sent, with its sha256.
|
|
26650
|
+
*/
|
|
26651
|
+
writeRetrainArchive: require_sleep.method(zod.z.object({
|
|
26652
|
+
filter: RetrainExportFilterSchema,
|
|
26653
|
+
layout: RetrainExportLayoutSchema,
|
|
26654
|
+
target: RetrainArchiveTargetSchema
|
|
26655
|
+
}), RetrainArchiveResultSchema, {
|
|
26656
|
+
kind: "mutation",
|
|
26657
|
+
auth: "admin",
|
|
26658
|
+
timeoutMs: 60 * 6e4
|
|
26659
|
+
}),
|
|
26660
|
+
/** The enabled, vision-capable LLM profiles, each saying whether a frame
|
|
26661
|
+
* sent to it leaves the house. */
|
|
26662
|
+
listRetrainAssistProfiles: require_sleep.method(zod.z.object({}), zod.z.array(RetrainAssistProfileSchema).readonly(), {
|
|
26663
|
+
kind: "query",
|
|
26664
|
+
auth: "admin"
|
|
26665
|
+
}),
|
|
26666
|
+
/**
|
|
26667
|
+
* Ask a vision LLM (the `llm` capability) about ONE copied frame: list the
|
|
26668
|
+
* objects of `classes` with boxes, and review the boxes already on the
|
|
26669
|
+
* canvas (sent by `ref`). Answers drafts (`source: 'llm'`) and reviews —
|
|
26670
|
+
* nothing is stored, nothing is accepted. A profile that sends the frame
|
|
26671
|
+
* outside the house is refused unless `allowCloud` says the operator
|
|
26672
|
+
* confirmed this run.
|
|
26673
|
+
*/
|
|
26674
|
+
proposeRetrainAnnotationsWithLlm: require_sleep.method(zod.z.object({
|
|
26675
|
+
deviceId: zod.z.number(),
|
|
26676
|
+
trackId: zod.z.string().optional(),
|
|
26677
|
+
frameId: zod.z.string(),
|
|
26678
|
+
profileId: zod.z.string(),
|
|
26679
|
+
classes: zod.z.array(RetrainMacroClassSchema).min(1),
|
|
26680
|
+
boxes: zod.z.array(zod.z.object({
|
|
26681
|
+
ref: zod.z.string(),
|
|
26682
|
+
bbox: RetrainBboxSchema,
|
|
26683
|
+
macroClass: RetrainMacroClassSchema,
|
|
26684
|
+
label: zod.z.string().optional()
|
|
26685
|
+
})).max(50),
|
|
26686
|
+
allowCloud: zod.z.boolean()
|
|
26687
|
+
}), RetrainLlmAssistResultSchema, {
|
|
26688
|
+
kind: "mutation",
|
|
26689
|
+
auth: "admin",
|
|
26690
|
+
timeoutMs: 18e4
|
|
26691
|
+
}),
|
|
26692
|
+
/**
|
|
26693
|
+
* Create a named collection — a set over the retrain corpus ("packages
|
|
26694
|
+
* porch night"). Names are unique case-insensitively and never empty;
|
|
26695
|
+
* both refusals are named.
|
|
26696
|
+
*/
|
|
26697
|
+
createRetrainCollection: require_sleep.method(zod.z.object({ name: zod.z.string().max(120) }), RetrainCollectionCreateResultSchema, {
|
|
26698
|
+
kind: "mutation",
|
|
26699
|
+
auth: "admin"
|
|
26700
|
+
}),
|
|
26701
|
+
/** Every collection, newest first, with its frame count. */
|
|
26702
|
+
listRetrainCollections: require_sleep.method(zod.z.object({}), zod.z.array(RetrainCollectionSchema).readonly(), {
|
|
26703
|
+
kind: "query",
|
|
26704
|
+
auth: "admin"
|
|
26705
|
+
}),
|
|
26706
|
+
renameRetrainCollection: require_sleep.method(zod.z.object({
|
|
26707
|
+
id: zod.z.string(),
|
|
26708
|
+
name: zod.z.string().max(120)
|
|
26709
|
+
}), RetrainCollectionRenameResultSchema, {
|
|
26710
|
+
kind: "mutation",
|
|
26711
|
+
auth: "admin"
|
|
26712
|
+
}),
|
|
26713
|
+
/**
|
|
26714
|
+
* Delete a collection. Its recording stills that no other collection
|
|
26715
|
+
* holds are deleted with their annotations (nothing else reaches them);
|
|
26716
|
+
* frames copied from tracks always stay in the dataset.
|
|
26717
|
+
*/
|
|
26718
|
+
deleteRetrainCollection: require_sleep.method(zod.z.object({ id: zod.z.string() }), zod.z.object({
|
|
26719
|
+
deleted: zod.z.boolean(),
|
|
26720
|
+
removedFrames: zod.z.number().int()
|
|
26721
|
+
}), {
|
|
26722
|
+
kind: "mutation",
|
|
26723
|
+
auth: "admin"
|
|
26724
|
+
}),
|
|
26725
|
+
/**
|
|
26726
|
+
* Add the frame at a recording instant to a collection — the frame the
|
|
26727
|
+
* model may have seen NOTHING in. The recorder re-decodes the native
|
|
26728
|
+
* frame at `epochMs`; the dataset copies it (trackless, durable). The same
|
|
26729
|
+
* moment twice is one copy. Every refusal is named.
|
|
26730
|
+
*/
|
|
26731
|
+
addRetrainFrameFromRecording: require_sleep.method(zod.z.object({
|
|
26732
|
+
collectionId: zod.z.string(),
|
|
26733
|
+
deviceId: zod.z.number(),
|
|
26734
|
+
epochMs: zod.z.number()
|
|
26735
|
+
}), AddRetrainFrameFromRecordingResultSchema, {
|
|
26736
|
+
kind: "mutation",
|
|
26737
|
+
auth: "admin",
|
|
26738
|
+
timeoutMs: 6e4
|
|
26739
|
+
}),
|
|
26740
|
+
/** Add frames already in the dataset to a collection. */
|
|
26741
|
+
addRetrainFramesToCollection: require_sleep.method(zod.z.object({
|
|
26742
|
+
collectionId: zod.z.string(),
|
|
26743
|
+
frameIds: zod.z.array(zod.z.string()).min(1).max(500)
|
|
26744
|
+
}), zod.z.object({
|
|
26745
|
+
added: zod.z.number().int(),
|
|
26746
|
+
alreadyMember: zod.z.number().int(),
|
|
26747
|
+
unknownFrameIds: zod.z.array(zod.z.string()).readonly()
|
|
26748
|
+
}), {
|
|
26749
|
+
kind: "mutation",
|
|
26750
|
+
auth: "admin"
|
|
26751
|
+
}),
|
|
26752
|
+
/** Remove a frame from a collection. A recording still left in no
|
|
26753
|
+
* collection is deleted with its annotations (`deletedFrame`). */
|
|
26754
|
+
removeRetrainFrameFromCollection: require_sleep.method(zod.z.object({
|
|
26755
|
+
collectionId: zod.z.string(),
|
|
26756
|
+
frameId: zod.z.string()
|
|
26757
|
+
}), zod.z.object({
|
|
26758
|
+
removed: zod.z.boolean(),
|
|
26759
|
+
deletedFrame: zod.z.boolean()
|
|
26760
|
+
}), {
|
|
26761
|
+
kind: "mutation",
|
|
26762
|
+
auth: "admin"
|
|
26763
|
+
}),
|
|
26764
|
+
/** The frames of a collection, with their pipeline boxes. */
|
|
26765
|
+
listRetrainCollectionFrames: require_sleep.method(zod.z.object({ collectionId: zod.z.string() }), zod.z.array(RetrainFrameSchema).readonly(), {
|
|
26181
26766
|
kind: "query",
|
|
26182
26767
|
auth: "admin"
|
|
26183
26768
|
}),
|
|
@@ -27127,13 +27712,31 @@ var RecommendationReasonSchema = zod.z.discriminatedUnion("kind", [
|
|
|
27127
27712
|
zod.z.object({
|
|
27128
27713
|
kind: zod.z.literal("no-family-build"),
|
|
27129
27714
|
format: ModelFormatSchema$1
|
|
27715
|
+
}),
|
|
27716
|
+
zod.z.object({
|
|
27717
|
+
kind: zod.z.literal("kept-custom-pin"),
|
|
27718
|
+
modelId: zod.z.string(),
|
|
27719
|
+
deviceKey: zod.z.string()
|
|
27130
27720
|
})
|
|
27131
27721
|
]);
|
|
27722
|
+
/** Why a device is left exactly as it is, whatever the plan would pick (D786). */
|
|
27723
|
+
var KeptReasonSchema = zod.z.enum(["custom-pin"]);
|
|
27724
|
+
/**
|
|
27725
|
+
* Where a choice's latency came from (D791): this node's own benchmark
|
|
27726
|
+
* result, or the hardware-class table. Measured on the node beats the table.
|
|
27727
|
+
*/
|
|
27728
|
+
var LatencySourceSchema = zod.z.discriminatedUnion("kind", [zod.z.object({ kind: zod.z.literal("table") }), zod.z.object({
|
|
27729
|
+
kind: zod.z.literal("node-benchmark"),
|
|
27730
|
+
resultId: zod.z.string(),
|
|
27731
|
+
measuredAtMs: zod.z.number()
|
|
27732
|
+
})]);
|
|
27132
27733
|
var DeviceModelChoiceSchema = zod.z.object({
|
|
27133
27734
|
modelId: zod.z.string(),
|
|
27134
27735
|
p50Ms: zod.z.number(),
|
|
27135
27736
|
fps: zod.z.number(),
|
|
27136
27737
|
measured: zod.z.boolean(),
|
|
27738
|
+
/** Absent on a plan from before D791 — read as the table. */
|
|
27739
|
+
source: LatencySourceSchema.optional(),
|
|
27137
27740
|
/** Parallel sessions at the camera rate with the headroom kept free: ⌊fps × (1 − headroom) / camera fps⌋. */
|
|
27138
27741
|
capacitySessions: zod.z.number(),
|
|
27139
27742
|
personRecall: zod.z.number()
|
|
@@ -27144,6 +27747,8 @@ var DeviceRecommendationSchema = zod.z.object({
|
|
|
27144
27747
|
enabled: zod.z.boolean(),
|
|
27145
27748
|
available: zod.z.boolean(),
|
|
27146
27749
|
chosen: DeviceModelChoiceSchema.nullable(),
|
|
27750
|
+
/** Present when the device is kept as is: Apply writes nothing on it. */
|
|
27751
|
+
kept: KeptReasonSchema.optional(),
|
|
27147
27752
|
reasons: zod.z.array(RecommendationReasonSchema).readonly()
|
|
27148
27753
|
});
|
|
27149
27754
|
var NodeRecommendationSchema = zod.z.object({
|
|
@@ -27197,6 +27802,17 @@ var AutoTuneWarningSchema = zod.z.discriminatedUnion("kind", [
|
|
|
27197
27802
|
kind: zod.z.literal("coral-enabled"),
|
|
27198
27803
|
nodeId: zod.z.string(),
|
|
27199
27804
|
deviceKey: zod.z.string()
|
|
27805
|
+
}),
|
|
27806
|
+
zod.z.object({
|
|
27807
|
+
kind: zod.z.literal("custom-pin-kept"),
|
|
27808
|
+
nodeId: zod.z.string(),
|
|
27809
|
+
deviceKey: zod.z.string().nullable(),
|
|
27810
|
+
deviceId: zod.z.number().nullable(),
|
|
27811
|
+
modelId: zod.z.string()
|
|
27812
|
+
}),
|
|
27813
|
+
zod.z.object({
|
|
27814
|
+
kind: zod.z.literal("custom-registry-unreadable"),
|
|
27815
|
+
error: zod.z.string()
|
|
27200
27816
|
})
|
|
27201
27817
|
]);
|
|
27202
27818
|
var AutoTuneOptionsSchema = zod.z.object({
|
|
@@ -27389,13 +28005,14 @@ var SuggestSharesResultSchema = zod.z.object({
|
|
|
27389
28005
|
nodes: zod.z.array(SuggestedNodeShareSchema).readonly()
|
|
27390
28006
|
});
|
|
27391
28007
|
/**
|
|
27392
|
-
* Where the node and device shares come from (D750, D755).
|
|
27393
|
-
* - `
|
|
27394
|
-
*
|
|
27395
|
-
*
|
|
27396
|
-
*
|
|
27397
|
-
*
|
|
27398
|
-
*
|
|
28008
|
+
* Where the node and device shares come from (D750, D755, D791).
|
|
28009
|
+
* - `benchmark` (default since D791) — each node's capacity as its own node
|
|
28010
|
+
* benchmark measured it; a node without fresh results is sized from
|
|
28011
|
+
* `hardware` and says so. Measured on the node beats the table.
|
|
28012
|
+
* - `hardware` — computed from each node's static capacity only (its
|
|
28013
|
+
* accelerators at their Auto tune models, from the latency table).
|
|
28014
|
+
* Both are recomputed whenever a node or device joins, leaves, is switched
|
|
28015
|
+
* on or off, changes model, or a benchmark result is written. No load input.
|
|
27399
28016
|
* - `manual` — the operator's stored sliders.
|
|
27400
28017
|
* Either way a node or device that cannot take sessions gives its share to
|
|
27401
28018
|
* the others in proportion; the stored values are never rewritten for that.
|
|
@@ -27405,7 +28022,7 @@ var ShareSourceSchema = zod.z.enum([
|
|
|
27405
28022
|
"benchmark",
|
|
27406
28023
|
"manual"
|
|
27407
28024
|
]);
|
|
27408
|
-
var DEFAULT_SHARE_SOURCE = "
|
|
28025
|
+
var DEFAULT_SHARE_SOURCE = "benchmark";
|
|
27409
28026
|
/** `hardware` or `benchmark`: the system computes the shares. */
|
|
27410
28027
|
function isAutomaticShareSource(source) {
|
|
27411
28028
|
return source !== "manual";
|
|
@@ -27419,6 +28036,7 @@ var SHARE_SOURCE_SETTING_KEY = "shareSource";
|
|
|
27419
28036
|
* D755 split it) reads as `hardware` — that is what it computed.
|
|
27420
28037
|
*/
|
|
27421
28038
|
function parseShareSource(value) {
|
|
28039
|
+
if (value === "auto") return "hardware";
|
|
27422
28040
|
const parsed = ShareSourceSchema.safeParse(value);
|
|
27423
28041
|
return parsed.success ? parsed.data : DEFAULT_SHARE_SOURCE;
|
|
27424
28042
|
}
|
|
@@ -27463,6 +28081,371 @@ var EffectiveSharesSchema = zod.z.object({
|
|
|
27463
28081
|
deviceWeights: zod.z.record(zod.z.string(), zod.z.record(zod.z.string(), zod.z.number()))
|
|
27464
28082
|
});
|
|
27465
28083
|
//#endregion
|
|
28084
|
+
//#region src/pipeline/node-benchmark/schemas.ts
|
|
28085
|
+
/**
|
|
28086
|
+
* Wire shapes of the node benchmark (D791): the operator's plan, the
|
|
28087
|
+
* preflight the confirmation shows, the run the orchestrator owns, what the
|
|
28088
|
+
* measuring runner reports, and the result rows Auto tune and the automatic
|
|
28089
|
+
* shares read.
|
|
28090
|
+
*
|
|
28091
|
+
* ONE node at a time, owned by the pipeline orchestrator. While a run is
|
|
28092
|
+
* active the cluster is in BENCHMARK MODE for that node: it is not a
|
|
28093
|
+
* detection candidate, camera pins naming it are ignored so its sessions move
|
|
28094
|
+
* elsewhere, and both come back when the mode ends — after a crash or a hub
|
|
28095
|
+
* restart too (a persisted manifest, reconciled against the registry).
|
|
28096
|
+
*
|
|
28097
|
+
* Two measurements, both on the node, driven by its own runner (frames never
|
|
28098
|
+
* cross a process at frame rate, D9):
|
|
28099
|
+
* - `device` — one accelerator × one candidate detector, root only, open
|
|
28100
|
+
* loop: how many streams at the camera rate it carries inside the frame
|
|
28101
|
+
* interval;
|
|
28102
|
+
* - `pipeline` — the chosen detector plus the operator's detail steps
|
|
28103
|
+
* (faces, plates, classifiers, CLIP…), on varied frames from the bench
|
|
28104
|
+
* clip: how many parallel sessions the node carries before latency, drops,
|
|
28105
|
+
* CPU, RAM or the event loop give out.
|
|
28106
|
+
*/
|
|
28107
|
+
/** Defaults and bounds, one place. */
|
|
28108
|
+
var NODE_BENCHMARK_DEFAULTS = {
|
|
28109
|
+
fpsPerStream: 10,
|
|
28110
|
+
budgetMinutes: 45,
|
|
28111
|
+
minBudgetMinutes: 10,
|
|
28112
|
+
maxBudgetMinutes: 120,
|
|
28113
|
+
/** A result older than this no longer beats the table. */
|
|
28114
|
+
staleAfterDays: 30,
|
|
28115
|
+
/** Warm-in per ramp step (not accounted). */
|
|
28116
|
+
settleSec: 5,
|
|
28117
|
+
/** Accounted window per ramp step. */
|
|
28118
|
+
measureSec: 20,
|
|
28119
|
+
/** Longest the drain may take before the run is refused. */
|
|
28120
|
+
drainTimeoutSec: 120,
|
|
28121
|
+
/** Candidate models per device in one run. */
|
|
28122
|
+
maxModelsPerDevice: 6
|
|
28123
|
+
};
|
|
28124
|
+
/** The two measurements a run can make. */
|
|
28125
|
+
var NodeBenchmarkPhaseSchema = zod.z.enum(["device", "pipeline"]);
|
|
28126
|
+
var NodeBenchmarkDevicePlanSchema = zod.z.object({
|
|
28127
|
+
/** `<backend>:<device>` — `openvino:npu`, `coreml:all`, `cpu`. */
|
|
28128
|
+
deviceKey: zod.z.string().min(1),
|
|
28129
|
+
/**
|
|
28130
|
+
* Root detector candidates for the `device` measurement, in the order
|
|
28131
|
+
* measured. The FIRST is the one the `pipeline` measurement runs.
|
|
28132
|
+
*/
|
|
28133
|
+
modelIds: zod.z.array(zod.z.string().min(1)).min(1).max(NODE_BENCHMARK_DEFAULTS.maxModelsPerDevice)
|
|
28134
|
+
});
|
|
28135
|
+
/** What the operator confirmed. */
|
|
28136
|
+
var NodeBenchmarkPlanSchema = zod.z.object({
|
|
28137
|
+
nodeId: zod.z.string().min(1),
|
|
28138
|
+
devices: zod.z.array(NodeBenchmarkDevicePlanSchema).min(1),
|
|
28139
|
+
/** Which measurements run. At least one. */
|
|
28140
|
+
phases: zod.z.array(NodeBenchmarkPhaseSchema).min(1).default(["device", "pipeline"]),
|
|
28141
|
+
/**
|
|
28142
|
+
* Detail steps (catalog step ids under the root: faces, plates,
|
|
28143
|
+
* classifiers, CLIP…) the `pipeline` measurement enables. The root
|
|
28144
|
+
* detector always runs.
|
|
28145
|
+
*/
|
|
28146
|
+
steps: zod.z.array(zod.z.string().min(1)).default([]),
|
|
28147
|
+
/** Offered rate of one stream / session. */
|
|
28148
|
+
fpsPerStream: zod.z.number().int().min(1).max(30).default(NODE_BENCHMARK_DEFAULTS.fpsPerStream),
|
|
28149
|
+
/** Hard deadline: the mode ends and the cluster is restored when it passes. */
|
|
28150
|
+
budgetMinutes: zod.z.number().int().min(NODE_BENCHMARK_DEFAULTS.minBudgetMinutes).max(NODE_BENCHMARK_DEFAULTS.maxBudgetMinutes).default(NODE_BENCHMARK_DEFAULTS.budgetMinutes),
|
|
28151
|
+
/** Keep the models the run downloaded (default: delete what was not installed before). */
|
|
28152
|
+
keepDownloadedModels: zod.z.boolean().default(false),
|
|
28153
|
+
/** Start although the other nodes' capacity does not cover the sessions running now. */
|
|
28154
|
+
acceptInsufficientHeadroom: zod.z.boolean().default(false)
|
|
28155
|
+
});
|
|
28156
|
+
/** Why a run cannot start. `overridable` ones are lifted by a plan flag. */
|
|
28157
|
+
var NodeBenchmarkRefusalKindSchema = zod.z.enum([
|
|
28158
|
+
"benchmark-active",
|
|
28159
|
+
"node-offline",
|
|
28160
|
+
"unknown-device",
|
|
28161
|
+
"no-phase",
|
|
28162
|
+
"insufficient-headroom"
|
|
28163
|
+
]);
|
|
28164
|
+
var NodeBenchmarkRefusalSchema = zod.z.object({
|
|
28165
|
+
kind: NodeBenchmarkRefusalKindSchema,
|
|
28166
|
+
detail: zod.z.string(),
|
|
28167
|
+
overridable: zod.z.boolean()
|
|
28168
|
+
});
|
|
28169
|
+
/** A camera whose detection leaves the node for the run. */
|
|
28170
|
+
var NodeBenchmarkMovingCameraSchema = zod.z.object({
|
|
28171
|
+
deviceId: zod.z.number(),
|
|
28172
|
+
/** Placed on the node now (a standing attach or a running session). */
|
|
28173
|
+
placedOnNode: zod.z.boolean(),
|
|
28174
|
+
/** A node pin naming this node, ignored for the run. */
|
|
28175
|
+
pinnedToNode: zod.z.boolean()
|
|
28176
|
+
});
|
|
28177
|
+
/** A camera that cannot leave: no other node can obtain its frames. */
|
|
28178
|
+
var NodeBenchmarkStayingCameraSchema = zod.z.object({
|
|
28179
|
+
deviceId: zod.z.number(),
|
|
28180
|
+
reason: zod.z.literal("only-frame-source")
|
|
28181
|
+
});
|
|
28182
|
+
var NodeBenchmarkPreflightSchema = zod.z.object({
|
|
28183
|
+
nodeId: zod.z.string(),
|
|
28184
|
+
online: zod.z.boolean(),
|
|
28185
|
+
moving: zod.z.array(NodeBenchmarkMovingCameraSchema).readonly(),
|
|
28186
|
+
/** Keep running on the node during the run; the result is flagged contaminated. */
|
|
28187
|
+
staying: zod.z.array(NodeBenchmarkStayingCameraSchema).readonly(),
|
|
28188
|
+
estimatedDurationMs: zod.z.number(),
|
|
28189
|
+
/** The run ends and the cluster is restored at the latest after this long. */
|
|
28190
|
+
budgetMs: zod.z.number(),
|
|
28191
|
+
phases: zod.z.array(NodeBenchmarkPhaseSchema).readonly(),
|
|
28192
|
+
steps: zod.z.array(zod.z.string()).readonly(),
|
|
28193
|
+
devices: zod.z.array(NodeBenchmarkDevicePlanSchema).readonly(),
|
|
28194
|
+
/** Parallel sessions the cluster runs now, and what the other nodes can carry. */
|
|
28195
|
+
headroom: zod.z.object({
|
|
28196
|
+
sessionsNow: zod.z.number(),
|
|
28197
|
+
otherNodesCapacitySessions: zod.z.number().nullable()
|
|
28198
|
+
}),
|
|
28199
|
+
refusals: zod.z.array(NodeBenchmarkRefusalSchema).readonly(),
|
|
28200
|
+
canStart: zod.z.boolean()
|
|
28201
|
+
});
|
|
28202
|
+
/** Where the measuring runner is. */
|
|
28203
|
+
var NodeBenchProgressSchema = zod.z.object({
|
|
28204
|
+
phase: zod.z.enum([
|
|
28205
|
+
"preparing",
|
|
28206
|
+
"device",
|
|
28207
|
+
"pipeline",
|
|
28208
|
+
"cleanup"
|
|
28209
|
+
]),
|
|
28210
|
+
deviceKey: zod.z.string().nullable(),
|
|
28211
|
+
modelId: zod.z.string().nullable(),
|
|
28212
|
+
/** Streams (device) or sessions (pipeline) of the step running now. */
|
|
28213
|
+
load: zod.z.number().nullable(),
|
|
28214
|
+
cellsDone: zod.z.number(),
|
|
28215
|
+
cellsTotal: zod.z.number(),
|
|
28216
|
+
message: zod.z.string()
|
|
28217
|
+
});
|
|
28218
|
+
/** What limited a ramp. `none` = the ramp ran out of steps still passing. */
|
|
28219
|
+
var NodeBenchLimitSchema = zod.z.enum([
|
|
28220
|
+
"p95",
|
|
28221
|
+
"drops",
|
|
28222
|
+
"errors",
|
|
28223
|
+
"stall",
|
|
28224
|
+
"cpu",
|
|
28225
|
+
"ram",
|
|
28226
|
+
"none"
|
|
28227
|
+
]);
|
|
28228
|
+
var NodeBenchRampStepSchema = zod.z.object({
|
|
28229
|
+
load: zod.z.number(),
|
|
28230
|
+
pass: zod.z.boolean(),
|
|
28231
|
+
p95Ms: zod.z.number(),
|
|
28232
|
+
dropRatio: zod.z.number(),
|
|
28233
|
+
/** Completed frames per second over the accounted window. */
|
|
28234
|
+
fps: zod.z.number(),
|
|
28235
|
+
cpuPct: zod.z.number().nullable(),
|
|
28236
|
+
ramFreePct: zod.z.number().nullable(),
|
|
28237
|
+
failReasons: zod.z.array(zod.z.string()).readonly()
|
|
28238
|
+
});
|
|
28239
|
+
/** One measured device × detector (the `device` measurement). */
|
|
28240
|
+
var NodeBenchDeviceCellSchema = zod.z.object({
|
|
28241
|
+
phase: zod.z.literal("device"),
|
|
28242
|
+
deviceKey: zod.z.string(),
|
|
28243
|
+
modelId: zod.z.string(),
|
|
28244
|
+
/** Single-stream latency (the K = 1 step). */
|
|
28245
|
+
p50Ms: zod.z.number(),
|
|
28246
|
+
p95Ms: zod.z.number(),
|
|
28247
|
+
p99Ms: zod.z.number(),
|
|
28248
|
+
/** Frames per second sustained at the last passing step. */
|
|
28249
|
+
fps: zod.z.number(),
|
|
28250
|
+
/** Streams at the camera rate the device carried inside the frame interval; 0 = not even one. */
|
|
28251
|
+
kMax: zod.z.number(),
|
|
28252
|
+
limitedBy: NodeBenchLimitSchema,
|
|
28253
|
+
/** First call (model load + warm-up). */
|
|
28254
|
+
warmupMs: zod.z.number(),
|
|
28255
|
+
ramp: zod.z.array(NodeBenchRampStepSchema).readonly()
|
|
28256
|
+
});
|
|
28257
|
+
/** One measured pipeline (the `pipeline` measurement) on a device. */
|
|
28258
|
+
var NodeBenchPipelineCellSchema = zod.z.object({
|
|
28259
|
+
phase: zod.z.literal("pipeline"),
|
|
28260
|
+
deviceKey: zod.z.string(),
|
|
28261
|
+
modelId: zod.z.string(),
|
|
28262
|
+
steps: zod.z.array(zod.z.string()).readonly(),
|
|
28263
|
+
/** Parallel sessions at the camera rate the node carried; 0 = not even one. */
|
|
28264
|
+
maxSessions: zod.z.number(),
|
|
28265
|
+
limitedBy: NodeBenchLimitSchema,
|
|
28266
|
+
/** Detail steps that produced at least one result on the clip — a step that never fired measured nothing. */
|
|
28267
|
+
stepsFired: zod.z.array(zod.z.string()).readonly(),
|
|
28268
|
+
warmupMs: zod.z.number(),
|
|
28269
|
+
ramp: zod.z.array(NodeBenchRampStepSchema).readonly()
|
|
28270
|
+
});
|
|
28271
|
+
var NodeBenchCellSchema = zod.z.discriminatedUnion("phase", [NodeBenchDeviceCellSchema, NodeBenchPipelineCellSchema]);
|
|
28272
|
+
/**
|
|
28273
|
+
* What a result was measured ON. A result whose fingerprint no longer matches
|
|
28274
|
+
* the node no longer beats the table.
|
|
28275
|
+
*/
|
|
28276
|
+
var NodeBenchFingerprintSchema = zod.z.object({
|
|
28277
|
+
pipelineVersion: zod.z.string().nullable(),
|
|
28278
|
+
cpuModel: zod.z.string().nullable(),
|
|
28279
|
+
ramGb: zod.z.number().nullable(),
|
|
28280
|
+
os: zod.z.string().nullable(),
|
|
28281
|
+
/** Per device: the pool the cells ran on (runtime + tuning). */
|
|
28282
|
+
pools: zod.z.record(zod.z.string(), zod.z.object({
|
|
28283
|
+
runtime: zod.z.string(),
|
|
28284
|
+
numWorkers: zod.z.number(),
|
|
28285
|
+
concurrency: zod.z.number(),
|
|
28286
|
+
batchMode: zod.z.string()
|
|
28287
|
+
})).default({})
|
|
28288
|
+
});
|
|
28289
|
+
/** The frames the run used. */
|
|
28290
|
+
var NodeBenchClipSchema = zod.z.object({
|
|
28291
|
+
/** `camstack-bench-v1` or `reference-images` (the fallback when the clip is not reachable). */
|
|
28292
|
+
id: zod.z.string(),
|
|
28293
|
+
revision: zod.z.string().nullable(),
|
|
28294
|
+
frames: zod.z.number(),
|
|
28295
|
+
width: zod.z.number(),
|
|
28296
|
+
height: zod.z.number()
|
|
28297
|
+
});
|
|
28298
|
+
var NodeBenchRunnerInputSchema = zod.z.object({
|
|
28299
|
+
runId: zod.z.string().min(1),
|
|
28300
|
+
devices: zod.z.array(NodeBenchmarkDevicePlanSchema).min(1),
|
|
28301
|
+
phases: zod.z.array(NodeBenchmarkPhaseSchema).min(1),
|
|
28302
|
+
/** The full detail step tree root for the `pipeline` measurement is built on the node from these ids. */
|
|
28303
|
+
steps: zod.z.array(zod.z.string()).default([]),
|
|
28304
|
+
fpsPerStream: zod.z.number().int().min(1).max(30),
|
|
28305
|
+
/** The runner stops on its own past this instant, whatever the hub does. */
|
|
28306
|
+
deadlineAtMs: zod.z.number(),
|
|
28307
|
+
settleSec: zod.z.number().min(0).max(60).default(NODE_BENCHMARK_DEFAULTS.settleSec),
|
|
28308
|
+
measureSec: zod.z.number().min(2).max(300).default(NODE_BENCHMARK_DEFAULTS.measureSec),
|
|
28309
|
+
keepDownloadedModels: zod.z.boolean().default(false)
|
|
28310
|
+
});
|
|
28311
|
+
var NodeBenchRunnerStateSchema = zod.z.enum([
|
|
28312
|
+
"running",
|
|
28313
|
+
"done",
|
|
28314
|
+
"failed",
|
|
28315
|
+
"aborted"
|
|
28316
|
+
]);
|
|
28317
|
+
var NodeBenchRunnerStatusSchema = zod.z.object({
|
|
28318
|
+
runId: zod.z.string(),
|
|
28319
|
+
nodeId: zod.z.string(),
|
|
28320
|
+
state: NodeBenchRunnerStateSchema,
|
|
28321
|
+
progress: NodeBenchProgressSchema.nullable(),
|
|
28322
|
+
/** Every finished cell so far — a run stopped half way keeps what it measured. */
|
|
28323
|
+
cells: zod.z.array(NodeBenchCellSchema).readonly(),
|
|
28324
|
+
fingerprint: NodeBenchFingerprintSchema.nullable(),
|
|
28325
|
+
clip: NodeBenchClipSchema.nullable(),
|
|
28326
|
+
/** Cameras seen running on the node during the run (they share its pools). */
|
|
28327
|
+
activeCameraIds: zod.z.array(zod.z.number()).readonly(),
|
|
28328
|
+
/** Models the run downloaded and then deleted (not installed before). */
|
|
28329
|
+
deletedModels: zod.z.array(zod.z.string()).readonly(),
|
|
28330
|
+
error: zod.z.string().nullable(),
|
|
28331
|
+
startedAtMs: zod.z.number(),
|
|
28332
|
+
finishedAtMs: zod.z.number().nullable()
|
|
28333
|
+
});
|
|
28334
|
+
var NodeBenchmarkStateSchema = zod.z.enum([
|
|
28335
|
+
"draining",
|
|
28336
|
+
"measuring",
|
|
28337
|
+
"restoring",
|
|
28338
|
+
"done",
|
|
28339
|
+
"failed",
|
|
28340
|
+
"aborted"
|
|
28341
|
+
]);
|
|
28342
|
+
/** Why a run ended. */
|
|
28343
|
+
var NodeBenchmarkEndReasonSchema = zod.z.enum([
|
|
28344
|
+
"completed",
|
|
28345
|
+
"operator-abort",
|
|
28346
|
+
"deadline",
|
|
28347
|
+
"node-lost",
|
|
28348
|
+
"runner-lost",
|
|
28349
|
+
"hub-restart",
|
|
28350
|
+
"drain-timeout",
|
|
28351
|
+
"failed"
|
|
28352
|
+
]);
|
|
28353
|
+
var NodeBenchmarkRunSchema = zod.z.object({
|
|
28354
|
+
runId: zod.z.string(),
|
|
28355
|
+
nodeId: zod.z.string(),
|
|
28356
|
+
state: NodeBenchmarkStateSchema,
|
|
28357
|
+
plan: NodeBenchmarkPlanSchema,
|
|
28358
|
+
startedAtMs: zod.z.number(),
|
|
28359
|
+
deadlineAtMs: zod.z.number(),
|
|
28360
|
+
finishedAtMs: zod.z.number().nullable(),
|
|
28361
|
+
endReason: NodeBenchmarkEndReasonSchema.nullable(),
|
|
28362
|
+
error: zod.z.string().nullable(),
|
|
28363
|
+
/** Cameras moved off the node for the run. */
|
|
28364
|
+
moved: zod.z.array(zod.z.number()).readonly(),
|
|
28365
|
+
/** Cameras that stayed (their only frame source is the node). */
|
|
28366
|
+
staying: zod.z.array(zod.z.number()).readonly(),
|
|
28367
|
+
/** Something else ran on the node's pools during the run. */
|
|
28368
|
+
contaminated: zod.z.boolean(),
|
|
28369
|
+
progress: NodeBenchProgressSchema.nullable(),
|
|
28370
|
+
resultIds: zod.z.array(zod.z.string()).readonly()
|
|
28371
|
+
});
|
|
28372
|
+
/** `getNodeBenchmarkStatus`: the active run (or the last one), and whether benchmark mode is on. */
|
|
28373
|
+
var NodeBenchmarkStatusSchema = zod.z.object({
|
|
28374
|
+
/** The node the cluster is in benchmark mode for; null = none. */
|
|
28375
|
+
modeNodeId: zod.z.string().nullable(),
|
|
28376
|
+
run: NodeBenchmarkRunSchema.nullable()
|
|
28377
|
+
});
|
|
28378
|
+
/**
|
|
28379
|
+
* One stored measurement — the only authority Auto tune and the automatic
|
|
28380
|
+
* shares read measured capacity from. Written by the orchestrator when a run
|
|
28381
|
+
* ends, never by anyone else.
|
|
28382
|
+
*/
|
|
28383
|
+
var NodeBenchmarkResultSchema = zod.z.object({
|
|
28384
|
+
id: zod.z.string(),
|
|
28385
|
+
runId: zod.z.string(),
|
|
28386
|
+
nodeId: zod.z.string(),
|
|
28387
|
+
cell: NodeBenchCellSchema,
|
|
28388
|
+
fpsPerStream: zod.z.number(),
|
|
28389
|
+
fingerprint: NodeBenchFingerprintSchema.nullable(),
|
|
28390
|
+
clip: NodeBenchClipSchema.nullable(),
|
|
28391
|
+
/** Other work shared the node's pools (a camera that could not move, or the hub's own duties). */
|
|
28392
|
+
contaminated: zod.z.boolean(),
|
|
28393
|
+
stayingCameras: zod.z.array(zod.z.number()).readonly(),
|
|
28394
|
+
/** The run ended early; the cell itself completed. */
|
|
28395
|
+
partialRun: zod.z.boolean(),
|
|
28396
|
+
measuredAtMs: zod.z.number()
|
|
28397
|
+
});
|
|
28398
|
+
var ListNodeBenchmarkResultsInputSchema = zod.z.object({
|
|
28399
|
+
nodeId: zod.z.string().optional(),
|
|
28400
|
+
deviceKey: zod.z.string().optional()
|
|
28401
|
+
});
|
|
28402
|
+
/** A result with its standing today: does it still beat the table? */
|
|
28403
|
+
var NodeBenchmarkResultViewSchema = NodeBenchmarkResultSchema.extend({
|
|
28404
|
+
/** `fresh` beats the table; `stale` falls back to it; `superseded` = a newer row covers the same cell. */
|
|
28405
|
+
standing: zod.z.enum([
|
|
28406
|
+
"fresh",
|
|
28407
|
+
"stale",
|
|
28408
|
+
"superseded"
|
|
28409
|
+
]),
|
|
28410
|
+
staleWhy: zod.z.enum([
|
|
28411
|
+
"age",
|
|
28412
|
+
"runtime",
|
|
28413
|
+
"pool-tuning"
|
|
28414
|
+
]).nullable()
|
|
28415
|
+
});
|
|
28416
|
+
/** The manifest persisted BEFORE benchmark mode changes anything; its presence means "restore". */
|
|
28417
|
+
var NodeBenchmarkManifestSchema = zod.z.object({
|
|
28418
|
+
runId: zod.z.string(),
|
|
28419
|
+
nodeId: zod.z.string(),
|
|
28420
|
+
startedAtMs: zod.z.number(),
|
|
28421
|
+
deadlineAtMs: zod.z.number(),
|
|
28422
|
+
plan: NodeBenchmarkPlanSchema,
|
|
28423
|
+
moved: zod.z.array(zod.z.number()).readonly(),
|
|
28424
|
+
staying: zod.z.array(zod.z.number()).readonly()
|
|
28425
|
+
});
|
|
28426
|
+
/** Candidate detectors per device, for the plan editor. */
|
|
28427
|
+
var NodeBenchmarkCandidatesSchema = zod.z.object({
|
|
28428
|
+
nodeId: zod.z.string(),
|
|
28429
|
+
reachable: zod.z.boolean(),
|
|
28430
|
+
devices: zod.z.array(zod.z.object({
|
|
28431
|
+
deviceKey: zod.z.string(),
|
|
28432
|
+
enabled: zod.z.boolean(),
|
|
28433
|
+
available: zod.z.boolean(),
|
|
28434
|
+
/** Ordered: what Auto tune would pick first, then the rest of the family by accuracy. */
|
|
28435
|
+
suggested: zod.z.array(zod.z.string()).readonly(),
|
|
28436
|
+
/** Every root detector the device has a build for. */
|
|
28437
|
+
all: zod.z.array(zod.z.string()).readonly(),
|
|
28438
|
+
/** The model the device runs now, when pinned. */
|
|
28439
|
+
currentModelId: zod.z.string().nullable()
|
|
28440
|
+
})).readonly(),
|
|
28441
|
+
/** Detail steps the node's catalog offers under the root (for the `pipeline` measurement). */
|
|
28442
|
+
steps: zod.z.array(zod.z.object({
|
|
28443
|
+
id: zod.z.string(),
|
|
28444
|
+
name: zod.z.string(),
|
|
28445
|
+
slot: zod.z.string()
|
|
28446
|
+
})).readonly()
|
|
28447
|
+
});
|
|
28448
|
+
//#endregion
|
|
27466
28449
|
//#region src/capabilities/schemas/orchestrator-metrics.ts
|
|
27467
28450
|
/** Shared Zod schemas for the runtime pipeline orchestrator metrics. */
|
|
27468
28451
|
var OrchestratorMetricsSchema = zod.z.object({
|
|
@@ -28980,7 +29963,30 @@ var pipelineRunnerCapability = {
|
|
|
28980
29963
|
releaseParkedTrackFrames: require_sleep.method(zod.z.object({
|
|
28981
29964
|
deviceId: zod.z.number(),
|
|
28982
29965
|
trackId: zod.z.string()
|
|
28983
|
-
}), zod.z.object({ released: zod.z.number().int().nonnegative() }), { kind: "mutation" })
|
|
29966
|
+
}), zod.z.object({ released: zod.z.number().int().nonnegative() }), { kind: "mutation" }),
|
|
29967
|
+
/**
|
|
29968
|
+
* Start measuring THIS node for the orchestrator's node benchmark: the
|
|
29969
|
+
* bench clip decoded once into RAM, each device × candidate detector on an
|
|
29970
|
+
* open-loop ramp (`device`), then the chosen pipeline with the requested
|
|
29971
|
+
* detail steps (`pipeline`). Everything runs in-process with the executor
|
|
29972
|
+
* — no frame crosses a node (D9) — and writes nothing: no track, event,
|
|
29973
|
+
* media or notification. Reached by `nodePin(nodeId)`. Answers at once;
|
|
29974
|
+
* one run per node; the run stops itself at `deadlineAtMs`.
|
|
29975
|
+
*/
|
|
29976
|
+
startNodeBench: require_sleep.method(NodeBenchRunnerInputSchema, zod.z.object({
|
|
29977
|
+
accepted: zod.z.literal(true),
|
|
29978
|
+
runId: zod.z.string()
|
|
29979
|
+
}), {
|
|
29980
|
+
kind: "mutation",
|
|
29981
|
+
auth: "admin"
|
|
29982
|
+
}),
|
|
29983
|
+
/** The run's progress and every finished cell; null when this runner does not know `runId`. */
|
|
29984
|
+
getNodeBenchStatus: require_sleep.method(zod.z.object({ runId: zod.z.string() }), NodeBenchRunnerStatusSchema.nullable(), { auth: "admin" }),
|
|
29985
|
+
/** Stop the run; what it finished is kept. */
|
|
29986
|
+
abortNodeBench: require_sleep.method(zod.z.object({ runId: zod.z.string() }), zod.z.object({ aborted: zod.z.boolean() }), {
|
|
29987
|
+
kind: "mutation",
|
|
29988
|
+
auth: "admin"
|
|
29989
|
+
})
|
|
28984
29990
|
}
|
|
28985
29991
|
};
|
|
28986
29992
|
//#endregion
|
|
@@ -29956,6 +30962,51 @@ var pipelineOrchestratorCapability = {
|
|
|
29956
30962
|
kind: "mutation",
|
|
29957
30963
|
auth: "admin"
|
|
29958
30964
|
}),
|
|
30965
|
+
/**
|
|
30966
|
+
* Node benchmark — what a run of this plan would do, without doing it:
|
|
30967
|
+
* the cameras that leave the node, those that cannot (the node is their
|
|
30968
|
+
* only frame source; they stay and flag the run), the estimated duration
|
|
30969
|
+
* and every reason it may not start. The confirmation shows this.
|
|
30970
|
+
*/
|
|
30971
|
+
getNodeBenchmarkPreflight: require_sleep.method(NodeBenchmarkPlanSchema, NodeBenchmarkPreflightSchema, { auth: "admin" }),
|
|
30972
|
+
/**
|
|
30973
|
+
* Node benchmark — start ONE run (cluster-wide lock). The orchestrator
|
|
30974
|
+
* persists a restore manifest, enters benchmark mode for the node (out of
|
|
30975
|
+
* placement, its camera pins ignored, nothing rewritten), drains it, drives
|
|
30976
|
+
* the node's own runner, then restores — always, including after an
|
|
30977
|
+
* abort, a lost node or a hub restart. Answers at once; poll
|
|
30978
|
+
* `getNodeBenchmarkStatus`. Refused runs carry the preflight.
|
|
30979
|
+
*/
|
|
30980
|
+
startNodeBenchmark: require_sleep.method(NodeBenchmarkPlanSchema, zod.z.discriminatedUnion("kind", [zod.z.object({
|
|
30981
|
+
kind: zod.z.literal("started"),
|
|
30982
|
+
runId: zod.z.string()
|
|
30983
|
+
}), zod.z.object({
|
|
30984
|
+
kind: zod.z.literal("refused"),
|
|
30985
|
+
preflight: NodeBenchmarkPreflightSchema
|
|
30986
|
+
})]), {
|
|
30987
|
+
kind: "mutation",
|
|
30988
|
+
auth: "admin"
|
|
30989
|
+
}),
|
|
30990
|
+
/** Node benchmark — the active run (or the last one) and the node in benchmark mode. */
|
|
30991
|
+
getNodeBenchmarkStatus: require_sleep.method(zod.z.void(), NodeBenchmarkStatusSchema, { auth: "admin" }),
|
|
30992
|
+
/** Node benchmark — stop the active run; the cluster is restored as it was. */
|
|
30993
|
+
abortNodeBenchmark: require_sleep.method(zod.z.object({ runId: zod.z.string() }), zod.z.object({ aborted: zod.z.boolean() }), {
|
|
30994
|
+
kind: "mutation",
|
|
30995
|
+
auth: "admin"
|
|
30996
|
+
}),
|
|
30997
|
+
/**
|
|
30998
|
+
* Node benchmark — root detector candidates per device (what Auto tune
|
|
30999
|
+
* would pick first, then the family) and the detail steps the node's
|
|
31000
|
+
* catalog offers, for the plan editor.
|
|
31001
|
+
*/
|
|
31002
|
+
getNodeBenchmarkCandidates: require_sleep.method(zod.z.object({ nodeId: zod.z.string() }), NodeBenchmarkCandidatesSchema, { auth: "admin" }),
|
|
31003
|
+
/** Node benchmark — stored results, newest first, each with its standing today. */
|
|
31004
|
+
listNodeBenchmarkResults: require_sleep.method(ListNodeBenchmarkResultsInputSchema, zod.z.array(NodeBenchmarkResultViewSchema).readonly(), { auth: "admin" }),
|
|
31005
|
+
/** Node benchmark — delete one result; Auto tune and the shares stop reading it. */
|
|
31006
|
+
deleteNodeBenchmarkResult: require_sleep.method(zod.z.object({ id: zod.z.string() }), zod.z.object({ deleted: zod.z.boolean() }), {
|
|
31007
|
+
kind: "mutation",
|
|
31008
|
+
auth: "admin"
|
|
31009
|
+
}),
|
|
29959
31010
|
/** Read one camera's settings. Null when never touched (inherits agent defaults fully). */
|
|
29960
31011
|
getCameraSettings: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), CameraPipelineSettingsSchema.nullable()),
|
|
29961
31012
|
/** Set or clear the 3-state toggle for one (camera, addonId). Pass `enabled: null` to clear and revert to agent default. */
|
|
@@ -30951,7 +32002,19 @@ var SsoBridgeClaimsSchema = zod.z.object({
|
|
|
30951
32002
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
30952
32003
|
* operator already consented to.
|
|
30953
32004
|
*/
|
|
30954
|
-
refreshTtl: zod.z.union([zod.z.number().int().positive(), zod.z.literal("never")]).optional()
|
|
32005
|
+
refreshTtl: zod.z.union([zod.z.number().int().positive(), zod.z.literal("never")]).optional(),
|
|
32006
|
+
/**
|
|
32007
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
32008
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
32009
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
32010
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
32011
|
+
*/
|
|
32012
|
+
linkIntent: zod.z.string().optional(),
|
|
32013
|
+
/**
|
|
32014
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
32015
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
32016
|
+
*/
|
|
32017
|
+
issuer: zod.z.string().optional()
|
|
30955
32018
|
});
|
|
30956
32019
|
var ssoBridgeCapability = {
|
|
30957
32020
|
name: "sso-bridge",
|
|
@@ -38052,6 +39115,9 @@ var CreateIntegrationInputSchema = zod.z.object({
|
|
|
38052
39115
|
enabled: zod.z.boolean().optional(),
|
|
38053
39116
|
info: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
|
|
38054
39117
|
settings: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
|
|
39118
|
+
/** Keys of `settings` the form's schema declares secret (by type) — kept in
|
|
39119
|
+
* the keychain, not the table (D787). */
|
|
39120
|
+
secretKeys: zod.z.array(zod.z.string()).optional(),
|
|
38055
39121
|
skipRestart: zod.z.boolean().optional()
|
|
38056
39122
|
});
|
|
38057
39123
|
var UpdateIntegrationInputSchema = zod.z.object({
|
|
@@ -38087,7 +39153,9 @@ var integrationsCapability = {
|
|
|
38087
39153
|
getSettings: require_sleep.method(zod.z.object({ id: zod.z.string() }), zod.z.record(zod.z.string(), zod.z.unknown()), { auth: "admin" }),
|
|
38088
39154
|
setSettings: require_sleep.method(zod.z.object({
|
|
38089
39155
|
id: zod.z.string(),
|
|
38090
|
-
settings: zod.z.record(zod.z.string(), zod.z.unknown())
|
|
39156
|
+
settings: zod.z.record(zod.z.string(), zod.z.unknown()),
|
|
39157
|
+
/** Keys the form's schema declares secret (by type) — keychain-stored (D787). */
|
|
39158
|
+
secretKeys: zod.z.array(zod.z.string()).optional()
|
|
38091
39159
|
}), zod.z.object({ success: zod.z.boolean() }), {
|
|
38092
39160
|
kind: "mutation",
|
|
38093
39161
|
auth: "admin"
|
|
@@ -47165,6 +48233,22 @@ var TotpStatusSchema = zod.z.object({
|
|
|
47165
48233
|
* delegation, structural caller-scope subset check goes inside the
|
|
47166
48234
|
* provider.
|
|
47167
48235
|
*/
|
|
48236
|
+
var ExternalIdentitySchema = zod.z.object({
|
|
48237
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
48238
|
+
provider: zod.z.string(),
|
|
48239
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
48240
|
+
subject: zod.z.string(),
|
|
48241
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
48242
|
+
issuer: zod.z.string(),
|
|
48243
|
+
userId: zod.z.string(),
|
|
48244
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
48245
|
+
label: zod.z.string().optional(),
|
|
48246
|
+
linkedAt: zod.z.number()
|
|
48247
|
+
});
|
|
48248
|
+
var ExternalIdentityKeySchema = zod.z.object({
|
|
48249
|
+
provider: zod.z.string().min(1),
|
|
48250
|
+
subject: zod.z.string().min(1)
|
|
48251
|
+
});
|
|
47168
48252
|
var userManagementCapability = {
|
|
47169
48253
|
name: "user-management",
|
|
47170
48254
|
scope: "system",
|
|
@@ -47307,6 +48391,32 @@ var userManagementCapability = {
|
|
|
47307
48391
|
username: zod.z.string(),
|
|
47308
48392
|
scopes: zod.z.array(TokenScopeSchema)
|
|
47309
48393
|
}).nullable(), { access: "view" }),
|
|
48394
|
+
listExternalIdentities: require_sleep.method(zod.z.object({ userId: zod.z.string() }), zod.z.array(ExternalIdentitySchema), { auth: "admin" }),
|
|
48395
|
+
/** The user an identity is linked to, or `null`. */
|
|
48396
|
+
findUserByExternalIdentity: require_sleep.method(ExternalIdentityKeySchema, zod.z.object({
|
|
48397
|
+
userId: zod.z.string(),
|
|
48398
|
+
issuer: zod.z.string()
|
|
48399
|
+
}).nullable(), { auth: "admin" }),
|
|
48400
|
+
/**
|
|
48401
|
+
* Link `(provider, subject)` to `userId`. Idempotent for the same user;
|
|
48402
|
+
* REFUSES (throws) an identity already linked to another user, and a
|
|
48403
|
+
* user that does not exist.
|
|
48404
|
+
*/
|
|
48405
|
+
linkExternalIdentity: require_sleep.method(ExternalIdentityKeySchema.extend({
|
|
48406
|
+
userId: zod.z.string(),
|
|
48407
|
+
issuer: zod.z.string().min(1),
|
|
48408
|
+
label: zod.z.string().optional()
|
|
48409
|
+
}), zod.z.object({ success: zod.z.literal(true) }), {
|
|
48410
|
+
kind: "mutation",
|
|
48411
|
+
auth: "admin",
|
|
48412
|
+
access: "create"
|
|
48413
|
+
}),
|
|
48414
|
+
/** Remove one link of `userId`. `success: false` when it was not linked to that user. */
|
|
48415
|
+
unlinkExternalIdentity: require_sleep.method(ExternalIdentityKeySchema.extend({ userId: zod.z.string() }), zod.z.object({ success: zod.z.boolean() }), {
|
|
48416
|
+
kind: "mutation",
|
|
48417
|
+
auth: "admin",
|
|
48418
|
+
access: "delete"
|
|
48419
|
+
}),
|
|
47310
48420
|
listOauthSessions: require_sleep.method(zod.z.void(), zod.z.array(OauthSessionSummarySchema), { auth: "admin" }),
|
|
47311
48421
|
revokeOauthSession: require_sleep.method(zod.z.object({ id: zod.z.string() }), zod.z.object({ success: zod.z.boolean() }), {
|
|
47312
48422
|
kind: "mutation",
|
|
@@ -49739,7 +50849,8 @@ var BaseDevice = class {
|
|
|
49739
50849
|
this.role = options.role;
|
|
49740
50850
|
this.parentDeviceId = ctx.parentDeviceId;
|
|
49741
50851
|
const seedData = ctx.persistedConfig ?? {};
|
|
49742
|
-
|
|
50852
|
+
const declaredSecretPaths = require_sleep.collectZodSecretPaths(schema);
|
|
50853
|
+
this.config = DeviceConfig.fromSchema(schema, (data) => ctx.persistConfig(data, { secretConfigPaths: declaredSecretPaths }), seedData, ({ droppedKeys, issues }) => {
|
|
49743
50854
|
ctx.logger.warn("Device config recovery: dropping invalid persisted fields", {
|
|
49744
50855
|
tags: {
|
|
49745
50856
|
deviceId: ctx.id,
|
|
@@ -54243,6 +55354,90 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
54243
55354
|
addonId: null,
|
|
54244
55355
|
access: "create"
|
|
54245
55356
|
},
|
|
55357
|
+
"keychain.delete": {
|
|
55358
|
+
capName: "keychain",
|
|
55359
|
+
capScope: "system",
|
|
55360
|
+
addonId: null,
|
|
55361
|
+
access: "delete"
|
|
55362
|
+
},
|
|
55363
|
+
"keychain.getState": {
|
|
55364
|
+
capName: "keychain",
|
|
55365
|
+
capScope: "system",
|
|
55366
|
+
addonId: null,
|
|
55367
|
+
access: "view"
|
|
55368
|
+
},
|
|
55369
|
+
"keychain.listMeta": {
|
|
55370
|
+
capName: "keychain",
|
|
55371
|
+
capScope: "system",
|
|
55372
|
+
addonId: null,
|
|
55373
|
+
access: "view"
|
|
55374
|
+
},
|
|
55375
|
+
"keychain.put": {
|
|
55376
|
+
capName: "keychain",
|
|
55377
|
+
capScope: "system",
|
|
55378
|
+
addonId: null,
|
|
55379
|
+
access: "create"
|
|
55380
|
+
},
|
|
55381
|
+
"keychain.resolve": {
|
|
55382
|
+
capName: "keychain",
|
|
55383
|
+
capScope: "system",
|
|
55384
|
+
addonId: null,
|
|
55385
|
+
access: "view"
|
|
55386
|
+
},
|
|
55387
|
+
"keychainAdmin.deleteOrphans": {
|
|
55388
|
+
capName: "keychain-admin",
|
|
55389
|
+
capScope: "system",
|
|
55390
|
+
addonId: null,
|
|
55391
|
+
access: "delete"
|
|
55392
|
+
},
|
|
55393
|
+
"keychainAdmin.downloadRecoveryKey": {
|
|
55394
|
+
capName: "keychain-admin",
|
|
55395
|
+
capScope: "system",
|
|
55396
|
+
addonId: null,
|
|
55397
|
+
access: "create"
|
|
55398
|
+
},
|
|
55399
|
+
"keychainAdmin.listAudit": {
|
|
55400
|
+
capName: "keychain-admin",
|
|
55401
|
+
capScope: "system",
|
|
55402
|
+
addonId: null,
|
|
55403
|
+
access: "view"
|
|
55404
|
+
},
|
|
55405
|
+
"keychainAdmin.listSecrets": {
|
|
55406
|
+
capName: "keychain-admin",
|
|
55407
|
+
capScope: "system",
|
|
55408
|
+
addonId: null,
|
|
55409
|
+
access: "view"
|
|
55410
|
+
},
|
|
55411
|
+
"keychainAdmin.purgeRetiredKeys": {
|
|
55412
|
+
capName: "keychain-admin",
|
|
55413
|
+
capScope: "system",
|
|
55414
|
+
addonId: null,
|
|
55415
|
+
access: "delete"
|
|
55416
|
+
},
|
|
55417
|
+
"keychainAdmin.resetKeychain": {
|
|
55418
|
+
capName: "keychain-admin",
|
|
55419
|
+
capScope: "system",
|
|
55420
|
+
addonId: null,
|
|
55421
|
+
access: "delete"
|
|
55422
|
+
},
|
|
55423
|
+
"keychainAdmin.reveal": {
|
|
55424
|
+
capName: "keychain-admin",
|
|
55425
|
+
capScope: "system",
|
|
55426
|
+
addonId: null,
|
|
55427
|
+
access: "create"
|
|
55428
|
+
},
|
|
55429
|
+
"keychainAdmin.rotateMasterKey": {
|
|
55430
|
+
capName: "keychain-admin",
|
|
55431
|
+
capScope: "system",
|
|
55432
|
+
addonId: null,
|
|
55433
|
+
access: "create"
|
|
55434
|
+
},
|
|
55435
|
+
"keychainAdmin.status": {
|
|
55436
|
+
capName: "keychain-admin",
|
|
55437
|
+
capScope: "system",
|
|
55438
|
+
addonId: null,
|
|
55439
|
+
access: "view"
|
|
55440
|
+
},
|
|
54246
55441
|
"lawnMowerControl.dock": {
|
|
54247
55442
|
capName: "lawn-mower-control",
|
|
54248
55443
|
capScope: "device",
|
|
@@ -55617,6 +56812,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
55617
56812
|
addonId: null,
|
|
55618
56813
|
access: "create"
|
|
55619
56814
|
},
|
|
56815
|
+
"pipelineAnalytics.addRetrainFrameFromRecording": {
|
|
56816
|
+
capName: "pipeline-analytics",
|
|
56817
|
+
capScope: "device",
|
|
56818
|
+
addonId: null,
|
|
56819
|
+
access: "create"
|
|
56820
|
+
},
|
|
56821
|
+
"pipelineAnalytics.addRetrainFramesToCollection": {
|
|
56822
|
+
capName: "pipeline-analytics",
|
|
56823
|
+
capScope: "device",
|
|
56824
|
+
addonId: null,
|
|
56825
|
+
access: "create"
|
|
56826
|
+
},
|
|
55620
56827
|
"pipelineAnalytics.applyDeviceSettingsPatch": {
|
|
55621
56828
|
capName: "pipeline-analytics",
|
|
55622
56829
|
capScope: "device",
|
|
@@ -55665,12 +56872,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
55665
56872
|
addonId: null,
|
|
55666
56873
|
access: "view"
|
|
55667
56874
|
},
|
|
56875
|
+
"pipelineAnalytics.createRetrainCollection": {
|
|
56876
|
+
capName: "pipeline-analytics",
|
|
56877
|
+
capScope: "device",
|
|
56878
|
+
addonId: null,
|
|
56879
|
+
access: "create"
|
|
56880
|
+
},
|
|
55668
56881
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
55669
56882
|
capName: "pipeline-analytics",
|
|
55670
56883
|
capScope: "device",
|
|
55671
56884
|
addonId: null,
|
|
55672
56885
|
access: "delete"
|
|
55673
56886
|
},
|
|
56887
|
+
"pipelineAnalytics.deleteRetrainCollection": {
|
|
56888
|
+
capName: "pipeline-analytics",
|
|
56889
|
+
capScope: "device",
|
|
56890
|
+
addonId: null,
|
|
56891
|
+
access: "delete"
|
|
56892
|
+
},
|
|
55674
56893
|
"pipelineAnalytics.deleteTracks": {
|
|
55675
56894
|
capName: "pipeline-analytics",
|
|
55676
56895
|
capScope: "device",
|
|
@@ -55875,6 +57094,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
55875
57094
|
addonId: null,
|
|
55876
57095
|
access: "view"
|
|
55877
57096
|
},
|
|
57097
|
+
"pipelineAnalytics.listRetrainAssistProfiles": {
|
|
57098
|
+
capName: "pipeline-analytics",
|
|
57099
|
+
capScope: "device",
|
|
57100
|
+
addonId: null,
|
|
57101
|
+
access: "view"
|
|
57102
|
+
},
|
|
57103
|
+
"pipelineAnalytics.listRetrainCollectionFrames": {
|
|
57104
|
+
capName: "pipeline-analytics",
|
|
57105
|
+
capScope: "device",
|
|
57106
|
+
addonId: null,
|
|
57107
|
+
access: "view"
|
|
57108
|
+
},
|
|
57109
|
+
"pipelineAnalytics.listRetrainCollections": {
|
|
57110
|
+
capName: "pipeline-analytics",
|
|
57111
|
+
capScope: "device",
|
|
57112
|
+
addonId: null,
|
|
57113
|
+
access: "view"
|
|
57114
|
+
},
|
|
55878
57115
|
"pipelineAnalytics.listRetrainFrames": {
|
|
55879
57116
|
capName: "pipeline-analytics",
|
|
55880
57117
|
capScope: "device",
|
|
@@ -55923,6 +57160,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
55923
57160
|
addonId: null,
|
|
55924
57161
|
access: "create"
|
|
55925
57162
|
},
|
|
57163
|
+
"pipelineAnalytics.proposeRetrainAnnotationsWithLlm": {
|
|
57164
|
+
capName: "pipeline-analytics",
|
|
57165
|
+
capScope: "device",
|
|
57166
|
+
addonId: null,
|
|
57167
|
+
access: "create"
|
|
57168
|
+
},
|
|
55926
57169
|
"pipelineAnalytics.pruneEvents": {
|
|
55927
57170
|
capName: "pipeline-analytics",
|
|
55928
57171
|
capScope: "device",
|
|
@@ -55977,6 +57220,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
55977
57220
|
addonId: null,
|
|
55978
57221
|
access: "create"
|
|
55979
57222
|
},
|
|
57223
|
+
"pipelineAnalytics.removeRetrainFrameFromCollection": {
|
|
57224
|
+
capName: "pipeline-analytics",
|
|
57225
|
+
capScope: "device",
|
|
57226
|
+
addonId: null,
|
|
57227
|
+
access: "delete"
|
|
57228
|
+
},
|
|
57229
|
+
"pipelineAnalytics.renameRetrainCollection": {
|
|
57230
|
+
capName: "pipeline-analytics",
|
|
57231
|
+
capScope: "device",
|
|
57232
|
+
addonId: null,
|
|
57233
|
+
access: "create"
|
|
57234
|
+
},
|
|
55980
57235
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
55981
57236
|
capName: "pipeline-analytics",
|
|
55982
57237
|
capScope: "device",
|
|
@@ -56007,6 +57262,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56007
57262
|
addonId: null,
|
|
56008
57263
|
access: "create"
|
|
56009
57264
|
},
|
|
57265
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
57266
|
+
capName: "pipeline-analytics",
|
|
57267
|
+
capScope: "device",
|
|
57268
|
+
addonId: null,
|
|
57269
|
+
access: "create"
|
|
57270
|
+
},
|
|
56010
57271
|
"pipelineAnalytics.setTrackFlags": {
|
|
56011
57272
|
capName: "pipeline-analytics",
|
|
56012
57273
|
capScope: "device",
|
|
@@ -56043,6 +57304,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56043
57304
|
addonId: null,
|
|
56044
57305
|
access: "delete"
|
|
56045
57306
|
},
|
|
57307
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
57308
|
+
capName: "pipeline-analytics",
|
|
57309
|
+
capScope: "device",
|
|
57310
|
+
addonId: null,
|
|
57311
|
+
access: "create"
|
|
57312
|
+
},
|
|
56046
57313
|
"pipelineExecutor.cacheFrameInPool": {
|
|
56047
57314
|
capName: "pipeline-executor",
|
|
56048
57315
|
capScope: "system",
|
|
@@ -56253,6 +57520,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56253
57520
|
addonId: null,
|
|
56254
57521
|
access: "view"
|
|
56255
57522
|
},
|
|
57523
|
+
"pipelineOrchestrator.abortNodeBenchmark": {
|
|
57524
|
+
capName: "pipeline-orchestrator",
|
|
57525
|
+
capScope: "system",
|
|
57526
|
+
addonId: null,
|
|
57527
|
+
access: "create"
|
|
57528
|
+
},
|
|
56256
57529
|
"pipelineOrchestrator.applyAutoTune": {
|
|
56257
57530
|
capName: "pipeline-orchestrator",
|
|
56258
57531
|
capScope: "system",
|
|
@@ -56277,6 +57550,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56277
57550
|
addonId: null,
|
|
56278
57551
|
access: "create"
|
|
56279
57552
|
},
|
|
57553
|
+
"pipelineOrchestrator.deleteNodeBenchmarkResult": {
|
|
57554
|
+
capName: "pipeline-orchestrator",
|
|
57555
|
+
capScope: "system",
|
|
57556
|
+
addonId: null,
|
|
57557
|
+
access: "delete"
|
|
57558
|
+
},
|
|
56280
57559
|
"pipelineOrchestrator.getAgentLoad": {
|
|
56281
57560
|
capName: "pipeline-orchestrator",
|
|
56282
57561
|
capScope: "system",
|
|
@@ -56385,6 +57664,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56385
57664
|
addonId: null,
|
|
56386
57665
|
access: "view"
|
|
56387
57666
|
},
|
|
57667
|
+
"pipelineOrchestrator.getNodeBenchmarkCandidates": {
|
|
57668
|
+
capName: "pipeline-orchestrator",
|
|
57669
|
+
capScope: "system",
|
|
57670
|
+
addonId: null,
|
|
57671
|
+
access: "view"
|
|
57672
|
+
},
|
|
57673
|
+
"pipelineOrchestrator.getNodeBenchmarkPreflight": {
|
|
57674
|
+
capName: "pipeline-orchestrator",
|
|
57675
|
+
capScope: "system",
|
|
57676
|
+
addonId: null,
|
|
57677
|
+
access: "view"
|
|
57678
|
+
},
|
|
57679
|
+
"pipelineOrchestrator.getNodeBenchmarkStatus": {
|
|
57680
|
+
capName: "pipeline-orchestrator",
|
|
57681
|
+
capScope: "system",
|
|
57682
|
+
addonId: null,
|
|
57683
|
+
access: "view"
|
|
57684
|
+
},
|
|
56388
57685
|
"pipelineOrchestrator.getNodeInferenceDevices": {
|
|
56389
57686
|
capName: "pipeline-orchestrator",
|
|
56390
57687
|
capScope: "system",
|
|
@@ -56427,6 +57724,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56427
57724
|
addonId: null,
|
|
56428
57725
|
access: "view"
|
|
56429
57726
|
},
|
|
57727
|
+
"pipelineOrchestrator.listNodeBenchmarkResults": {
|
|
57728
|
+
capName: "pipeline-orchestrator",
|
|
57729
|
+
capScope: "system",
|
|
57730
|
+
addonId: null,
|
|
57731
|
+
access: "view"
|
|
57732
|
+
},
|
|
56430
57733
|
"pipelineOrchestrator.pauseForStorageMigration": {
|
|
56431
57734
|
capName: "pipeline-orchestrator",
|
|
56432
57735
|
capScope: "system",
|
|
@@ -56571,6 +57874,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56571
57874
|
addonId: null,
|
|
56572
57875
|
access: "create"
|
|
56573
57876
|
},
|
|
57877
|
+
"pipelineOrchestrator.startNodeBenchmark": {
|
|
57878
|
+
capName: "pipeline-orchestrator",
|
|
57879
|
+
capScope: "system",
|
|
57880
|
+
addonId: null,
|
|
57881
|
+
access: "create"
|
|
57882
|
+
},
|
|
56574
57883
|
"pipelineOrchestrator.suggestShares": {
|
|
56575
57884
|
capName: "pipeline-orchestrator",
|
|
56576
57885
|
capScope: "system",
|
|
@@ -56589,6 +57898,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56589
57898
|
addonId: null,
|
|
56590
57899
|
access: "create"
|
|
56591
57900
|
},
|
|
57901
|
+
"pipelineRunner.abortNodeBench": {
|
|
57902
|
+
capName: "pipeline-runner",
|
|
57903
|
+
capScope: "system",
|
|
57904
|
+
addonId: null,
|
|
57905
|
+
access: "create"
|
|
57906
|
+
},
|
|
56592
57907
|
"pipelineRunner.attachCamera": {
|
|
56593
57908
|
capName: "pipeline-runner",
|
|
56594
57909
|
capScope: "system",
|
|
@@ -56637,6 +57952,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56637
57952
|
addonId: null,
|
|
56638
57953
|
access: "view"
|
|
56639
57954
|
},
|
|
57955
|
+
"pipelineRunner.getNodeBenchStatus": {
|
|
57956
|
+
capName: "pipeline-runner",
|
|
57957
|
+
capScope: "system",
|
|
57958
|
+
addonId: null,
|
|
57959
|
+
access: "view"
|
|
57960
|
+
},
|
|
56640
57961
|
"pipelineRunner.getParkedTrackFrame": {
|
|
56641
57962
|
capName: "pipeline-runner",
|
|
56642
57963
|
capScope: "system",
|
|
@@ -56679,6 +58000,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56679
58000
|
addonId: null,
|
|
56680
58001
|
access: "create"
|
|
56681
58002
|
},
|
|
58003
|
+
"pipelineRunner.startNodeBench": {
|
|
58004
|
+
capName: "pipeline-runner",
|
|
58005
|
+
capScope: "system",
|
|
58006
|
+
addonId: null,
|
|
58007
|
+
access: "create"
|
|
58008
|
+
},
|
|
56682
58009
|
"plateGallery.assignPlate": {
|
|
56683
58010
|
capName: "plate-gallery",
|
|
56684
58011
|
capScope: "system",
|
|
@@ -58395,18 +59722,36 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
58395
59722
|
addonId: null,
|
|
58396
59723
|
access: "delete"
|
|
58397
59724
|
},
|
|
59725
|
+
"userManagement.findUserByExternalIdentity": {
|
|
59726
|
+
capName: "user-management",
|
|
59727
|
+
capScope: "system",
|
|
59728
|
+
addonId: null,
|
|
59729
|
+
access: "view"
|
|
59730
|
+
},
|
|
58398
59731
|
"userManagement.getTotpStatus": {
|
|
58399
59732
|
capName: "user-management",
|
|
58400
59733
|
capScope: "system",
|
|
58401
59734
|
addonId: null,
|
|
58402
59735
|
access: "view"
|
|
58403
59736
|
},
|
|
59737
|
+
"userManagement.linkExternalIdentity": {
|
|
59738
|
+
capName: "user-management",
|
|
59739
|
+
capScope: "system",
|
|
59740
|
+
addonId: null,
|
|
59741
|
+
access: "create"
|
|
59742
|
+
},
|
|
58404
59743
|
"userManagement.listApiKeys": {
|
|
58405
59744
|
capName: "user-management",
|
|
58406
59745
|
capScope: "system",
|
|
58407
59746
|
addonId: null,
|
|
58408
59747
|
access: "view"
|
|
58409
59748
|
},
|
|
59749
|
+
"userManagement.listExternalIdentities": {
|
|
59750
|
+
capName: "user-management",
|
|
59751
|
+
capScope: "system",
|
|
59752
|
+
addonId: null,
|
|
59753
|
+
access: "view"
|
|
59754
|
+
},
|
|
58410
59755
|
"userManagement.listOauthSessions": {
|
|
58411
59756
|
capName: "user-management",
|
|
58412
59757
|
capScope: "system",
|
|
@@ -58485,6 +59830,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
58485
59830
|
addonId: null,
|
|
58486
59831
|
access: "create"
|
|
58487
59832
|
},
|
|
59833
|
+
"userManagement.unlinkExternalIdentity": {
|
|
59834
|
+
capName: "user-management",
|
|
59835
|
+
capScope: "system",
|
|
59836
|
+
addonId: null,
|
|
59837
|
+
access: "delete"
|
|
59838
|
+
},
|
|
58488
59839
|
"userManagement.updateUser": {
|
|
58489
59840
|
capName: "user-management",
|
|
58490
59841
|
capScope: "system",
|
|
@@ -59001,6 +60352,8 @@ var KNOWN_CAP_NAMES = [
|
|
|
59001
60352
|
"image-settings",
|
|
59002
60353
|
"integrations",
|
|
59003
60354
|
"intercom",
|
|
60355
|
+
"keychain",
|
|
60356
|
+
"keychain-admin",
|
|
59004
60357
|
"lawn-mower-control",
|
|
59005
60358
|
"llm",
|
|
59006
60359
|
"llm-runtime",
|
|
@@ -59218,6 +60571,8 @@ var SYSTEM_CAP_NAMES = [
|
|
|
59218
60571
|
"failure-contribution",
|
|
59219
60572
|
"filesystem-browse",
|
|
59220
60573
|
"integrations",
|
|
60574
|
+
"keychain",
|
|
60575
|
+
"keychain-admin",
|
|
59221
60576
|
"llm",
|
|
59222
60577
|
"llm-runtime",
|
|
59223
60578
|
"load-contribution",
|
|
@@ -61350,6 +62705,15 @@ var ENTRY_BY_KEY = new Map(DISPLAY_ICON_VOCABULARY.map((e) => [e.key, e]));
|
|
|
61350
62705
|
function isDisplayIconKey(value) {
|
|
61351
62706
|
return typeof value === "string" && ENTRY_BY_KEY.has(value);
|
|
61352
62707
|
}
|
|
62708
|
+
/**
|
|
62709
|
+
* A stored icon value as a vocabulary key: `value` when it IS one, `fallback`
|
|
62710
|
+
* otherwise. For an `icon` settings field (D780) whose stored value may
|
|
62711
|
+
* predate the vocabulary (a free-text lucide name) — the field's default is
|
|
62712
|
+
* drawn rather than nothing.
|
|
62713
|
+
*/
|
|
62714
|
+
function resolveDisplayIconKey(value, fallback) {
|
|
62715
|
+
return typeof value === "string" && isDisplayIconKey(value) ? value : fallback;
|
|
62716
|
+
}
|
|
61353
62717
|
/** The entry for a key, or `undefined` — never a guessed one. */
|
|
61354
62718
|
function displayIconEntry(key) {
|
|
61355
62719
|
return ENTRY_BY_KEY.get(key);
|
|
@@ -62438,6 +63802,11 @@ function zodToConfigField(key, schema, description) {
|
|
|
62438
63802
|
description,
|
|
62439
63803
|
default: defaultValue
|
|
62440
63804
|
};
|
|
63805
|
+
if (inner instanceof zod.z.ZodString && require_sleep.isZodSecret(schema)) return {
|
|
63806
|
+
...base,
|
|
63807
|
+
type: "password",
|
|
63808
|
+
showToggle: true
|
|
63809
|
+
};
|
|
62441
63810
|
if (inner instanceof zod.z.ZodString) return buildStringField(key, base);
|
|
62442
63811
|
if (inner instanceof zod.z.ZodNumber) return buildNumberField(inner, base);
|
|
62443
63812
|
if (inner instanceof zod.z.ZodBoolean) return {
|
|
@@ -62445,12 +63814,16 @@ function zodToConfigField(key, schema, description) {
|
|
|
62445
63814
|
type: "boolean"
|
|
62446
63815
|
};
|
|
62447
63816
|
if (inner instanceof zod.z.ZodEnum) return buildEnumField(inner, base);
|
|
62448
|
-
if (inner instanceof zod.z.ZodArray || inner instanceof zod.z.ZodObject)
|
|
62449
|
-
|
|
62450
|
-
|
|
62451
|
-
|
|
62452
|
-
|
|
62453
|
-
|
|
63817
|
+
if (inner instanceof zod.z.ZodArray || inner instanceof zod.z.ZodObject) {
|
|
63818
|
+
const holdsSecret = require_sleep.isZodSecret(schema) || require_sleep.collectZodSecretPaths(schema).length > 0;
|
|
63819
|
+
return {
|
|
63820
|
+
...base,
|
|
63821
|
+
type: "textarea",
|
|
63822
|
+
rows: 6,
|
|
63823
|
+
isJson: true,
|
|
63824
|
+
...holdsSecret ? { secret: true } : {}
|
|
63825
|
+
};
|
|
63826
|
+
}
|
|
62454
63827
|
return {
|
|
62455
63828
|
...base,
|
|
62456
63829
|
type: "text"
|
|
@@ -62669,6 +64042,8 @@ var CAPABILITY_NAMES = {
|
|
|
62669
64042
|
imageSettings: "image-settings",
|
|
62670
64043
|
integrations: "integrations",
|
|
62671
64044
|
intercom: "intercom",
|
|
64045
|
+
keychain: "keychain",
|
|
64046
|
+
keychainAdmin: "keychain-admin",
|
|
62672
64047
|
lawnMowerControl: "lawn-mower-control",
|
|
62673
64048
|
llm: "llm",
|
|
62674
64049
|
llmRuntime: "llm-runtime",
|
|
@@ -63062,6 +64437,14 @@ var CAPABILITY_ROUTER_KEYS = [
|
|
|
63062
64437
|
key: "intercom",
|
|
63063
64438
|
name: "intercom"
|
|
63064
64439
|
},
|
|
64440
|
+
{
|
|
64441
|
+
key: "keychain",
|
|
64442
|
+
name: "keychain"
|
|
64443
|
+
},
|
|
64444
|
+
{
|
|
64445
|
+
key: "keychainAdmin",
|
|
64446
|
+
name: "keychain-admin"
|
|
64447
|
+
},
|
|
63065
64448
|
{
|
|
63066
64449
|
key: "lawnMowerControl",
|
|
63067
64450
|
name: "lawn-mower-control"
|
|
@@ -63508,6 +64891,8 @@ var ALL_CAPABILITY_DEFINITIONS = [
|
|
|
63508
64891
|
imageSettingsCapability,
|
|
63509
64892
|
integrationsCapability,
|
|
63510
64893
|
intercomCapability,
|
|
64894
|
+
keychainCapability,
|
|
64895
|
+
keychainAdminCapability,
|
|
63511
64896
|
lawnMowerControlCapability,
|
|
63512
64897
|
llmCapability,
|
|
63513
64898
|
llmRuntimeCapability,
|
|
@@ -64936,6 +66321,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
64936
66321
|
form: "single",
|
|
64937
66322
|
optional: false
|
|
64938
66323
|
}],
|
|
66324
|
+
"pipelineAnalytics.addRetrainFrameFromRecording": [{
|
|
66325
|
+
name: "deviceId",
|
|
66326
|
+
form: "single",
|
|
66327
|
+
optional: false
|
|
66328
|
+
}],
|
|
64939
66329
|
"pipelineAnalytics.applyDeviceSettingsPatch": [{
|
|
64940
66330
|
name: "deviceId",
|
|
64941
66331
|
form: "single",
|
|
@@ -65126,6 +66516,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
65126
66516
|
form: "single",
|
|
65127
66517
|
optional: false
|
|
65128
66518
|
}],
|
|
66519
|
+
"pipelineAnalytics.proposeRetrainAnnotationsWithLlm": [{
|
|
66520
|
+
name: "deviceId",
|
|
66521
|
+
form: "single",
|
|
66522
|
+
optional: false
|
|
66523
|
+
}],
|
|
65129
66524
|
"pipelineAnalytics.pruneEventsBefore": [{
|
|
65130
66525
|
name: "deviceId",
|
|
65131
66526
|
form: "single",
|
|
@@ -65176,6 +66571,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
65176
66571
|
form: "single",
|
|
65177
66572
|
optional: false
|
|
65178
66573
|
}],
|
|
66574
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
66575
|
+
name: "deviceId",
|
|
66576
|
+
form: "single",
|
|
66577
|
+
optional: false
|
|
66578
|
+
}],
|
|
65179
66579
|
"pipelineAnalytics.setTrackFlags": [{
|
|
65180
66580
|
name: "deviceId",
|
|
65181
66581
|
form: "single",
|
|
@@ -67086,6 +68486,17 @@ function createSystemProxy(api) {
|
|
|
67086
68486
|
getAvailableTypes: (input) => dispatch("integrations", "getAvailableTypes", "query", input),
|
|
67087
68487
|
testConnection: (input) => dispatch("integrations", "testConnection", "mutation", input)
|
|
67088
68488
|
},
|
|
68489
|
+
keychainAdmin: {
|
|
68490
|
+
status: (input) => dispatch("keychainAdmin", "status", "query", input),
|
|
68491
|
+
listSecrets: (input) => dispatch("keychainAdmin", "listSecrets", "query", input),
|
|
68492
|
+
listAudit: (input) => dispatch("keychainAdmin", "listAudit", "query", input),
|
|
68493
|
+
reveal: (input) => dispatch("keychainAdmin", "reveal", "mutation", input),
|
|
68494
|
+
deleteOrphans: (input) => dispatch("keychainAdmin", "deleteOrphans", "mutation", input),
|
|
68495
|
+
rotateMasterKey: (input) => dispatch("keychainAdmin", "rotateMasterKey", "mutation", input),
|
|
68496
|
+
purgeRetiredKeys: (input) => dispatch("keychainAdmin", "purgeRetiredKeys", "mutation", input),
|
|
68497
|
+
downloadRecoveryKey: (input) => dispatch("keychainAdmin", "downloadRecoveryKey", "mutation", input),
|
|
68498
|
+
resetKeychain: (input) => dispatch("keychainAdmin", "resetKeychain", "mutation", input)
|
|
68499
|
+
},
|
|
67089
68500
|
llm: {
|
|
67090
68501
|
generate: (input) => dispatch("llm", "generate", "mutation", input),
|
|
67091
68502
|
generateVision: (input) => dispatch("llm", "generateVision", "mutation", input),
|
|
@@ -67305,6 +68716,13 @@ function createSystemProxy(api) {
|
|
|
67305
68716
|
suggestShares: (input) => dispatch("pipelineOrchestrator", "suggestShares", "query", input),
|
|
67306
68717
|
getEffectiveShares: (input) => dispatch("pipelineOrchestrator", "getEffectiveShares", "query", input),
|
|
67307
68718
|
setShareSource: (input) => dispatch("pipelineOrchestrator", "setShareSource", "mutation", input),
|
|
68719
|
+
getNodeBenchmarkPreflight: (input) => dispatch("pipelineOrchestrator", "getNodeBenchmarkPreflight", "query", input),
|
|
68720
|
+
startNodeBenchmark: (input) => dispatch("pipelineOrchestrator", "startNodeBenchmark", "mutation", input),
|
|
68721
|
+
getNodeBenchmarkStatus: (input) => dispatch("pipelineOrchestrator", "getNodeBenchmarkStatus", "query", input),
|
|
68722
|
+
abortNodeBenchmark: (input) => dispatch("pipelineOrchestrator", "abortNodeBenchmark", "mutation", input),
|
|
68723
|
+
getNodeBenchmarkCandidates: (input) => dispatch("pipelineOrchestrator", "getNodeBenchmarkCandidates", "query", input),
|
|
68724
|
+
listNodeBenchmarkResults: (input) => dispatch("pipelineOrchestrator", "listNodeBenchmarkResults", "query", input),
|
|
68725
|
+
deleteNodeBenchmarkResult: (input) => dispatch("pipelineOrchestrator", "deleteNodeBenchmarkResult", "mutation", input),
|
|
67308
68726
|
getCameraStatuses: (input) => dispatch("pipelineOrchestrator", "getCameraStatuses", "query", input),
|
|
67309
68727
|
setCameraSensors: (input) => dispatch("pipelineOrchestrator", "setCameraSensors", "mutation", input),
|
|
67310
68728
|
reconcileFromDisk: (input) => dispatch("pipelineOrchestrator", "reconcileFromDisk", "mutation", input),
|
|
@@ -67318,7 +68736,10 @@ function createSystemProxy(api) {
|
|
|
67318
68736
|
getAllCameraMetrics: (input) => dispatch("pipelineRunner", "getAllCameraMetrics", "query", input),
|
|
67319
68737
|
getLocalCameras: (input) => dispatch("pipelineRunner", "getLocalCameras", "query", input),
|
|
67320
68738
|
getNativeCrop: (input) => dispatch("pipelineRunner", "getNativeCrop", "query", input),
|
|
67321
|
-
runStatelessStep: (input) => dispatch("pipelineRunner", "runStatelessStep", "mutation", input)
|
|
68739
|
+
runStatelessStep: (input) => dispatch("pipelineRunner", "runStatelessStep", "mutation", input),
|
|
68740
|
+
startNodeBench: (input) => dispatch("pipelineRunner", "startNodeBench", "mutation", input),
|
|
68741
|
+
getNodeBenchStatus: (input) => dispatch("pipelineRunner", "getNodeBenchStatus", "query", input),
|
|
68742
|
+
abortNodeBench: (input) => dispatch("pipelineRunner", "abortNodeBench", "mutation", input)
|
|
67322
68743
|
},
|
|
67323
68744
|
plateGallery: {
|
|
67324
68745
|
getPlateMedia: (input) => dispatch("plateGallery", "getPlateMedia", "query", input),
|
|
@@ -67512,6 +68933,10 @@ function createSystemProxy(api) {
|
|
|
67512
68933
|
oauthExchangeCode: (input) => dispatch("userManagement", "oauthExchangeCode", "mutation", input),
|
|
67513
68934
|
oauthRefresh: (input) => dispatch("userManagement", "oauthRefresh", "mutation", input),
|
|
67514
68935
|
oauthVerifyAccessToken: (input) => dispatch("userManagement", "oauthVerifyAccessToken", "query", input),
|
|
68936
|
+
listExternalIdentities: (input) => dispatch("userManagement", "listExternalIdentities", "query", input),
|
|
68937
|
+
findUserByExternalIdentity: (input) => dispatch("userManagement", "findUserByExternalIdentity", "query", input),
|
|
68938
|
+
linkExternalIdentity: (input) => dispatch("userManagement", "linkExternalIdentity", "mutation", input),
|
|
68939
|
+
unlinkExternalIdentity: (input) => dispatch("userManagement", "unlinkExternalIdentity", "mutation", input),
|
|
67515
68940
|
listOauthSessions: (input) => dispatch("userManagement", "listOauthSessions", "query", input),
|
|
67516
68941
|
revokeOauthSession: (input) => dispatch("userManagement", "revokeOauthSession", "mutation", input)
|
|
67517
68942
|
}
|
|
@@ -72901,6 +74326,22 @@ function capacitySessionsOf(fps, headroom, cameraFps) {
|
|
|
72901
74326
|
if (!(fps > 0) || !(cameraFps > 0)) return 0;
|
|
72902
74327
|
return Math.max(0, Math.floor(fps * (1 - headroom) / cameraFps + 1e-9));
|
|
72903
74328
|
}
|
|
74329
|
+
/** The table column with the node's own measurements laid over it. */
|
|
74330
|
+
function overlayMeasured(table, measured) {
|
|
74331
|
+
if (measured === void 0 || Object.keys(measured).length === 0) return table;
|
|
74332
|
+
const out = { ...table };
|
|
74333
|
+
for (const [modelId, m] of Object.entries(measured)) out[modelId] = {
|
|
74334
|
+
p50Ms: m.p50Ms,
|
|
74335
|
+
fps: m.fps,
|
|
74336
|
+
measured: true,
|
|
74337
|
+
source: {
|
|
74338
|
+
kind: "node-benchmark",
|
|
74339
|
+
resultId: m.resultId,
|
|
74340
|
+
measuredAtMs: m.measuredAtMs
|
|
74341
|
+
}
|
|
74342
|
+
};
|
|
74343
|
+
return out;
|
|
74344
|
+
}
|
|
72904
74345
|
function round(value, digits = 3) {
|
|
72905
74346
|
const f = 10 ** digits;
|
|
72906
74347
|
return Math.round(value * f) / f;
|
|
@@ -72973,6 +74414,7 @@ function choiceOn(ctx, modelId, sizing) {
|
|
|
72973
74414
|
p50Ms: cell.p50Ms,
|
|
72974
74415
|
fps: cell.fps,
|
|
72975
74416
|
measured: cell.measured,
|
|
74417
|
+
source: cell.source ?? { kind: "table" },
|
|
72976
74418
|
capacitySessions: sessionsOn(cell, sizing),
|
|
72977
74419
|
personRecall: DETECTOR_ACCURACY[modelId]?.personRecall ?? 0
|
|
72978
74420
|
};
|
|
@@ -73021,11 +74463,14 @@ function recommendNode(input) {
|
|
|
73021
74463
|
if (node.hardware === null) return skippedNode(node, { kind: "no-hardware-facts" }, null);
|
|
73022
74464
|
const hardware = node.hardware;
|
|
73023
74465
|
const { hardwareClass, cpuModel } = classifyInferenceHardware(hardware);
|
|
73024
|
-
const
|
|
73025
|
-
|
|
74466
|
+
const measured = input.measured ?? {};
|
|
74467
|
+
const hasMeasured = Object.values(measured).some((m) => Object.keys(m).length > 0);
|
|
74468
|
+
const knownTable = hardwareClass === "unknown" ? void 0 : perf[hardwareClass];
|
|
74469
|
+
if (knownTable === void 0 && !hasMeasured) return skippedNode(node, {
|
|
73026
74470
|
kind: "no-measured-data",
|
|
73027
74471
|
hardwareClass
|
|
73028
74472
|
}, hardwareClass);
|
|
74473
|
+
const classTable = knownTable ?? {};
|
|
73029
74474
|
const devices = node.devices.toSorted((a, b) => a.key.localeCompare(b.key));
|
|
73030
74475
|
const contexts = /* @__PURE__ */ new Map();
|
|
73031
74476
|
const early = /* @__PURE__ */ new Map();
|
|
@@ -73043,7 +74488,7 @@ function recommendNode(input) {
|
|
|
73043
74488
|
early.set(device.key, [{ kind: "device-unavailable" }]);
|
|
73044
74489
|
continue;
|
|
73045
74490
|
}
|
|
73046
|
-
const column = accelerator === null ? void 0 : classTable[accelerator];
|
|
74491
|
+
const column = accelerator === null ? void 0 : overlayMeasured(classTable[accelerator], measured[device.key]);
|
|
73047
74492
|
if (accelerator === null || column === void 0) {
|
|
73048
74493
|
early.set(device.key, [{
|
|
73049
74494
|
kind: "no-family-build",
|
|
@@ -73058,13 +74503,28 @@ function recommendNode(input) {
|
|
|
73058
74503
|
});
|
|
73059
74504
|
}
|
|
73060
74505
|
const isCpu = (a) => a === "x86-cpu" || a === "arm-cpu";
|
|
73061
|
-
const
|
|
73062
|
-
const
|
|
74506
|
+
const keptByKey = /* @__PURE__ */ new Map();
|
|
74507
|
+
const keptReasonOf = (group) => {
|
|
74508
|
+
const pinned = group.find((c) => c.device.customPinModelId !== void 0);
|
|
74509
|
+
if (pinned?.device.customPinModelId === void 0) return null;
|
|
74510
|
+
const reason = {
|
|
74511
|
+
kind: "kept-custom-pin",
|
|
74512
|
+
modelId: pinned.device.customPinModelId,
|
|
74513
|
+
deviceKey: pinned.device.key
|
|
74514
|
+
};
|
|
74515
|
+
for (const c of group) keptByKey.set(c.device.key, [reason]);
|
|
74516
|
+
return reason;
|
|
74517
|
+
};
|
|
74518
|
+
const acceleratorGroup = [...contexts.values()].filter((c) => !isCpu(c.accelerator));
|
|
74519
|
+
const acceleratorKept = keptReasonOf(acceleratorGroup);
|
|
74520
|
+
const accelerators = acceleratorKept === null ? acceleratorGroup : [];
|
|
74521
|
+
const cpus = [...contexts.values()].filter((c) => isCpu(c.accelerator)).filter((c) => keptReasonOf([c]) === null);
|
|
73063
74522
|
const chosenByKey = /* @__PURE__ */ new Map();
|
|
73064
74523
|
const reasonsByKey = /* @__PURE__ */ new Map();
|
|
73065
74524
|
const nodeReasons = [];
|
|
73066
74525
|
let acceleratorModelId = null;
|
|
73067
74526
|
const groupPick = accelerators.length > 0 ? pickForGroup(accelerators, node.formatsByModel, sizing) : null;
|
|
74527
|
+
if (acceleratorKept !== null) nodeReasons.push(acceleratorKept);
|
|
73068
74528
|
if (groupPick !== null) {
|
|
73069
74529
|
acceleratorModelId = groupPick.modelId;
|
|
73070
74530
|
nodeReasons.push(...groupPick.reasons);
|
|
@@ -73108,7 +74568,8 @@ function recommendNode(input) {
|
|
|
73108
74568
|
enabled: device.enabled,
|
|
73109
74569
|
available: device.available,
|
|
73110
74570
|
chosen: chosenByKey.get(device.key) ?? null,
|
|
73111
|
-
|
|
74571
|
+
...keptByKey.has(device.key) ? { kept: "custom-pin" } : {},
|
|
74572
|
+
reasons: early.get(device.key) ?? keptByKey.get(device.key) ?? reasonsByKey.get(device.key) ?? []
|
|
73112
74573
|
})),
|
|
73113
74574
|
reasons: nodeReasons
|
|
73114
74575
|
};
|
|
@@ -73358,6 +74819,287 @@ function computeCapacityShares(input) {
|
|
|
73358
74819
|
};
|
|
73359
74820
|
}
|
|
73360
74821
|
//#endregion
|
|
74822
|
+
//#region src/pipeline/node-benchmark/benchmark-mode.ts
|
|
74823
|
+
/**
|
|
74824
|
+
* Benchmark mode (D791) — the pure rules of "one node under test". Pure.
|
|
74825
|
+
*
|
|
74826
|
+
* While the cluster is in benchmark mode for node N:
|
|
74827
|
+
* - N is not a detection candidate for any camera that another node can
|
|
74828
|
+
* serve ({@link eligibleUnderBenchmark});
|
|
74829
|
+
* - a node pin naming N is ignored for such a camera
|
|
74830
|
+
* ({@link pinUnderBenchmark}) — the stored pin is never rewritten, so it
|
|
74831
|
+
* is "restored" the moment the mode ends;
|
|
74832
|
+
* - a camera whose ONLY frame source is N stays on N (never blind) and the
|
|
74833
|
+
* run is flagged contaminated.
|
|
74834
|
+
*/
|
|
74835
|
+
/** The detection candidates of one camera while `benchNodeId` is under test. */
|
|
74836
|
+
function eligibleUnderBenchmark(eligible, benchNodeId) {
|
|
74837
|
+
if (benchNodeId === null || !eligible.includes(benchNodeId)) return eligible;
|
|
74838
|
+
const others = eligible.filter((n) => n !== benchNodeId);
|
|
74839
|
+
return others.length > 0 ? others : eligible;
|
|
74840
|
+
}
|
|
74841
|
+
/** A camera's node pin while `benchNodeId` is under test (null = no pin). */
|
|
74842
|
+
function pinUnderBenchmark(pin, benchNodeId, eligible) {
|
|
74843
|
+
if (pin === null || benchNodeId === null || pin !== benchNodeId) return pin;
|
|
74844
|
+
return eligible.some((n) => n !== benchNodeId) ? null : pin;
|
|
74845
|
+
}
|
|
74846
|
+
/** Which cameras leave the node for the run, and which cannot. */
|
|
74847
|
+
function classifyCamerasForBenchmark(nodeId, cameras) {
|
|
74848
|
+
const moving = [];
|
|
74849
|
+
const staying = [];
|
|
74850
|
+
for (const cam of cameras.toSorted((a, b) => a.deviceId - b.deviceId)) {
|
|
74851
|
+
const placedOnNode = cam.placedNodeId === nodeId;
|
|
74852
|
+
const pinnedToNode = cam.nodePin === nodeId;
|
|
74853
|
+
if (!placedOnNode && !pinnedToNode) continue;
|
|
74854
|
+
if (!cam.frameSourceNodes.some((n) => n !== nodeId)) staying.push({
|
|
74855
|
+
deviceId: cam.deviceId,
|
|
74856
|
+
reason: "only-frame-source"
|
|
74857
|
+
});
|
|
74858
|
+
else moving.push({
|
|
74859
|
+
deviceId: cam.deviceId,
|
|
74860
|
+
placedOnNode,
|
|
74861
|
+
pinnedToNode
|
|
74862
|
+
});
|
|
74863
|
+
}
|
|
74864
|
+
return {
|
|
74865
|
+
moving,
|
|
74866
|
+
staying
|
|
74867
|
+
};
|
|
74868
|
+
}
|
|
74869
|
+
/** Ramp steps the runner tries per cell, at most. */
|
|
74870
|
+
var DEVICE_RAMP = [
|
|
74871
|
+
1,
|
|
74872
|
+
2,
|
|
74873
|
+
4,
|
|
74874
|
+
6,
|
|
74875
|
+
8,
|
|
74876
|
+
12,
|
|
74877
|
+
16,
|
|
74878
|
+
24,
|
|
74879
|
+
32
|
|
74880
|
+
];
|
|
74881
|
+
var PIPELINE_RAMP = [
|
|
74882
|
+
1,
|
|
74883
|
+
2,
|
|
74884
|
+
3,
|
|
74885
|
+
4,
|
|
74886
|
+
6,
|
|
74887
|
+
8,
|
|
74888
|
+
10,
|
|
74889
|
+
12,
|
|
74890
|
+
16
|
|
74891
|
+
];
|
|
74892
|
+
/** Fixed costs around the measurement: drain, clip, warm-ups, restore. */
|
|
74893
|
+
var OVERHEAD_MS = 3 * 6e4;
|
|
74894
|
+
var WARMUP_PER_CELL_MS = 2e4;
|
|
74895
|
+
/**
|
|
74896
|
+
* An upper bound on how long the run takes: every ramp step of every cell,
|
|
74897
|
+
* plus the drain, the clip and the restore — capped at the budget, which is
|
|
74898
|
+
* the hard deadline anyway. A ramp usually stops well before its last step.
|
|
74899
|
+
*/
|
|
74900
|
+
function estimateNodeBenchmarkDurationMs(plan, timing = {}) {
|
|
74901
|
+
const stepMs = ((timing.settleSec ?? NODE_BENCHMARK_DEFAULTS.settleSec) + (timing.measureSec ?? NODE_BENCHMARK_DEFAULTS.measureSec)) * 1e3;
|
|
74902
|
+
let total = OVERHEAD_MS;
|
|
74903
|
+
if (plan.phases.includes("device")) for (const device of plan.devices) total += device.modelIds.length * (WARMUP_PER_CELL_MS + DEVICE_RAMP.length * stepMs);
|
|
74904
|
+
if (plan.phases.includes("pipeline")) total += plan.devices.length * (WARMUP_PER_CELL_MS + PIPELINE_RAMP.length * stepMs);
|
|
74905
|
+
return Math.min(total, plan.budgetMinutes * 6e4);
|
|
74906
|
+
}
|
|
74907
|
+
/** Why a run cannot start, in the order the operator should read them. */
|
|
74908
|
+
function nodeBenchmarkRefusals(input) {
|
|
74909
|
+
const out = [];
|
|
74910
|
+
if (input.activeRunNodeId !== null) out.push({
|
|
74911
|
+
kind: "benchmark-active",
|
|
74912
|
+
detail: `A benchmark of ${input.activeRunNodeId} is running — one node at a time.`,
|
|
74913
|
+
overridable: false
|
|
74914
|
+
});
|
|
74915
|
+
if (!input.online) out.push({
|
|
74916
|
+
kind: "node-offline",
|
|
74917
|
+
detail: `${input.plan.nodeId} is not online.`,
|
|
74918
|
+
overridable: false
|
|
74919
|
+
});
|
|
74920
|
+
const unknown = input.plan.devices.map((d) => d.deviceKey).filter((k) => !input.knownDeviceKeys.includes(k));
|
|
74921
|
+
if (unknown.length > 0) out.push({
|
|
74922
|
+
kind: "unknown-device",
|
|
74923
|
+
detail: `${input.plan.nodeId} reports no device ${unknown.join(", ")}.`,
|
|
74924
|
+
overridable: false
|
|
74925
|
+
});
|
|
74926
|
+
if (input.plan.phases.length === 0) out.push({
|
|
74927
|
+
kind: "no-phase",
|
|
74928
|
+
detail: "Choose at least one measurement.",
|
|
74929
|
+
overridable: false
|
|
74930
|
+
});
|
|
74931
|
+
const capacity = input.otherNodesCapacitySessions;
|
|
74932
|
+
if (capacity !== null && input.sessionsNow > capacity && !input.plan.acceptInsufficientHeadroom) out.push({
|
|
74933
|
+
kind: "insufficient-headroom",
|
|
74934
|
+
detail: `The cluster runs ${input.sessionsNow} sessions now; the other nodes can carry ${capacity}.`,
|
|
74935
|
+
overridable: true
|
|
74936
|
+
});
|
|
74937
|
+
return out;
|
|
74938
|
+
}
|
|
74939
|
+
//#endregion
|
|
74940
|
+
//#region src/pipeline/node-benchmark/results.ts
|
|
74941
|
+
/** The cell a row measures — two rows with the same key measure the same thing. */
|
|
74942
|
+
function resultCellKey(row) {
|
|
74943
|
+
const { cell } = row;
|
|
74944
|
+
const steps = cell.phase === "pipeline" ? cell.steps.toSorted().join(",") : "";
|
|
74945
|
+
return [
|
|
74946
|
+
row.nodeId,
|
|
74947
|
+
cell.deviceKey,
|
|
74948
|
+
cell.phase,
|
|
74949
|
+
cell.modelId,
|
|
74950
|
+
steps
|
|
74951
|
+
].join("|");
|
|
74952
|
+
}
|
|
74953
|
+
function staleWhy(row, ctx) {
|
|
74954
|
+
const bound = ctx.staleAfterMs ?? NODE_BENCHMARK_DEFAULTS.staleAfterDays * 864e5;
|
|
74955
|
+
if (ctx.nowMs - row.measuredAtMs > bound) return "age";
|
|
74956
|
+
const now = ctx.currentPools[row.nodeId]?.[row.cell.deviceKey];
|
|
74957
|
+
const then = row.fingerprint?.pools[row.cell.deviceKey];
|
|
74958
|
+
if (now === void 0 || then === void 0) return null;
|
|
74959
|
+
if (now.runtime !== then.runtime) return "runtime";
|
|
74960
|
+
if (now.numWorkers !== then.numWorkers || now.concurrency !== then.concurrency || now.batchMode !== then.batchMode) return "pool-tuning";
|
|
74961
|
+
return null;
|
|
74962
|
+
}
|
|
74963
|
+
/** The standing of every row, by id. */
|
|
74964
|
+
function resultStandings(rows, ctx) {
|
|
74965
|
+
const newest = /* @__PURE__ */ new Map();
|
|
74966
|
+
for (const row of rows) {
|
|
74967
|
+
const key = resultCellKey(row);
|
|
74968
|
+
const held = newest.get(key);
|
|
74969
|
+
if (held === void 0 || row.measuredAtMs > held.measuredAtMs) newest.set(key, row);
|
|
74970
|
+
}
|
|
74971
|
+
const out = /* @__PURE__ */ new Map();
|
|
74972
|
+
for (const row of rows) {
|
|
74973
|
+
if (newest.get(resultCellKey(row))?.id !== row.id) {
|
|
74974
|
+
out.set(row.id, {
|
|
74975
|
+
standing: "superseded",
|
|
74976
|
+
staleWhy: null
|
|
74977
|
+
});
|
|
74978
|
+
continue;
|
|
74979
|
+
}
|
|
74980
|
+
const why = staleWhy(row, ctx);
|
|
74981
|
+
out.set(row.id, why === null ? {
|
|
74982
|
+
standing: "fresh",
|
|
74983
|
+
staleWhy: null
|
|
74984
|
+
} : {
|
|
74985
|
+
standing: "stale",
|
|
74986
|
+
staleWhy: why
|
|
74987
|
+
});
|
|
74988
|
+
}
|
|
74989
|
+
return out;
|
|
74990
|
+
}
|
|
74991
|
+
/** Rows that beat the table today. */
|
|
74992
|
+
function freshResults(rows, ctx) {
|
|
74993
|
+
const standings = resultStandings(rows, ctx);
|
|
74994
|
+
return rows.filter((r) => standings.get(r.id)?.standing === "fresh");
|
|
74995
|
+
}
|
|
74996
|
+
/** deviceKey → modelId → the fresh `device` measurement on `nodeId`. */
|
|
74997
|
+
function measuredDetectorCells(rows, nodeId, ctx) {
|
|
74998
|
+
const out = {};
|
|
74999
|
+
for (const row of freshResults(rows, ctx)) {
|
|
75000
|
+
if (row.nodeId !== nodeId || row.cell.phase !== "device") continue;
|
|
75001
|
+
const perDevice = out[row.cell.deviceKey] ?? {};
|
|
75002
|
+
perDevice[row.cell.modelId] = {
|
|
75003
|
+
p50Ms: Math.round(row.cell.p50Ms * 100) / 100,
|
|
75004
|
+
fps: row.cell.fps,
|
|
75005
|
+
resultId: row.id,
|
|
75006
|
+
measuredAtMs: row.measuredAtMs
|
|
75007
|
+
};
|
|
75008
|
+
out[row.cell.deviceKey] = perDevice;
|
|
75009
|
+
}
|
|
75010
|
+
return out;
|
|
75011
|
+
}
|
|
75012
|
+
/**
|
|
75013
|
+
* Per node, each device at its newest fresh `pipeline` measurement — the
|
|
75014
|
+
* `NodeCapacitySource` answer the automatic shares read.
|
|
75015
|
+
*/
|
|
75016
|
+
function measuredCapacityFromResults(rows, nodeIds, ctx) {
|
|
75017
|
+
const byNode = /* @__PURE__ */ new Map();
|
|
75018
|
+
for (const row of freshResults(rows, ctx)) {
|
|
75019
|
+
if (!nodeIds.includes(row.nodeId) || row.cell.phase !== "pipeline") continue;
|
|
75020
|
+
const devices = byNode.get(row.nodeId) ?? /* @__PURE__ */ new Map();
|
|
75021
|
+
const held = devices.get(row.cell.deviceKey);
|
|
75022
|
+
if (held === void 0 || row.measuredAtMs > held.measuredAtMs) devices.set(row.cell.deviceKey, row);
|
|
75023
|
+
byNode.set(row.nodeId, devices);
|
|
75024
|
+
}
|
|
75025
|
+
const out = /* @__PURE__ */ new Map();
|
|
75026
|
+
for (const nodeId of nodeIds) {
|
|
75027
|
+
const devices = byNode.get(nodeId);
|
|
75028
|
+
if (devices === void 0) continue;
|
|
75029
|
+
out.set(nodeId, {
|
|
75030
|
+
nodeId,
|
|
75031
|
+
devices: [...devices.values()].toSorted((a, b) => a.cell.deviceKey.localeCompare(b.cell.deviceKey)).map((r) => ({
|
|
75032
|
+
deviceKey: r.cell.deviceKey,
|
|
75033
|
+
maxSessions: r.cell.phase === "pipeline" ? r.cell.maxSessions : 0,
|
|
75034
|
+
modelId: r.cell.modelId,
|
|
75035
|
+
measuredAtMs: r.measuredAtMs
|
|
75036
|
+
}))
|
|
75037
|
+
});
|
|
75038
|
+
}
|
|
75039
|
+
return out;
|
|
75040
|
+
}
|
|
75041
|
+
//#endregion
|
|
75042
|
+
//#region src/pipeline/node-benchmark/step-tree.ts
|
|
75043
|
+
var BENCH_ROOT_STEP_ID = "object-detection";
|
|
75044
|
+
function slotAddons(schema, slot) {
|
|
75045
|
+
return schema.slots.find((s) => s.id === slot)?.addons ?? [];
|
|
75046
|
+
}
|
|
75047
|
+
var feeds = (from, to) => to.inputClasses.some((c) => from.outputClasses.includes(c));
|
|
75048
|
+
function layout(schema) {
|
|
75049
|
+
const root = slotAddons(schema, "detector").find((a) => a.id === BENCH_ROOT_STEP_ID);
|
|
75050
|
+
if (root === void 0) return null;
|
|
75051
|
+
const classifiers = slotAddons(schema, "classifier");
|
|
75052
|
+
const croppers = slotAddons(schema, "cropper").filter((c) => feeds(root, c)).map((cropper) => ({
|
|
75053
|
+
cropper,
|
|
75054
|
+
recognizers: classifiers.filter((k) => feeds(cropper, k))
|
|
75055
|
+
}));
|
|
75056
|
+
const underCropper = new Set(croppers.flatMap((c) => c.recognizers.map((r) => r.id)));
|
|
75057
|
+
return {
|
|
75058
|
+
root,
|
|
75059
|
+
croppers,
|
|
75060
|
+
classifiers: classifiers.filter((k) => feeds(root, k) && !underCropper.has(k.id)),
|
|
75061
|
+
refiners: slotAddons(schema, "refiner")
|
|
75062
|
+
};
|
|
75063
|
+
}
|
|
75064
|
+
/** The detail steps the operator can choose, in tree order. */
|
|
75065
|
+
function listBenchDetailSteps(schema) {
|
|
75066
|
+
const l = layout(schema);
|
|
75067
|
+
if (l === null) return [];
|
|
75068
|
+
const of = (a) => ({
|
|
75069
|
+
id: a.id,
|
|
75070
|
+
name: a.name,
|
|
75071
|
+
slot: a.slot
|
|
75072
|
+
});
|
|
75073
|
+
return [
|
|
75074
|
+
...l.croppers.flatMap((c) => [of(c.cropper), ...c.recognizers.map(of)]),
|
|
75075
|
+
...l.classifiers.map(of),
|
|
75076
|
+
...l.refiners.map(of)
|
|
75077
|
+
];
|
|
75078
|
+
}
|
|
75079
|
+
/** Build the tree. Throws when the node's catalog has no object-detection root. */
|
|
75080
|
+
function buildBenchStepTree(schema, rootModelId, enabledStepIds) {
|
|
75081
|
+
const l = layout(schema);
|
|
75082
|
+
if (l === null) throw new Error(`the node's catalog has no ${BENCH_ROOT_STEP_ID} step`);
|
|
75083
|
+
const on = new Set(enabledStepIds);
|
|
75084
|
+
const step = (a, enabled) => ({
|
|
75085
|
+
addonId: a.id,
|
|
75086
|
+
enabled
|
|
75087
|
+
});
|
|
75088
|
+
return [{
|
|
75089
|
+
addonId: l.root.id,
|
|
75090
|
+
modelId: rootModelId,
|
|
75091
|
+
enabled: true,
|
|
75092
|
+
children: [
|
|
75093
|
+
...l.croppers.map(({ cropper, recognizers }) => ({
|
|
75094
|
+
...step(cropper, on.has(cropper.id) || recognizers.some((r) => on.has(r.id))),
|
|
75095
|
+
children: recognizers.map((r) => step(r, on.has(r.id)))
|
|
75096
|
+
})),
|
|
75097
|
+
...l.classifiers.map((k) => step(k, on.has(k.id))),
|
|
75098
|
+
...l.refiners.map((r) => step(r, on.has(r.id)))
|
|
75099
|
+
]
|
|
75100
|
+
}];
|
|
75101
|
+
}
|
|
75102
|
+
//#endregion
|
|
73361
75103
|
//#region src/pipeline/root-face-crop.ts
|
|
73362
75104
|
/** Side of the square, as a multiple of the face box's longer side. */
|
|
73363
75105
|
var ROOT_FACE_REFINE_SCALE = 1.6;
|
|
@@ -75508,6 +77250,7 @@ exports.AcceleratorKindSchema = AcceleratorKindSchema;
|
|
|
75508
77250
|
exports.AccessoriesStatusSchema = AccessoriesStatusSchema;
|
|
75509
77251
|
exports.AccessoryKind = AccessoryKind;
|
|
75510
77252
|
exports.AddBrokerInputSchema = AddBrokerInputSchema;
|
|
77253
|
+
exports.AddRetrainFrameFromRecordingResultSchema = AddRetrainFrameFromRecordingResultSchema;
|
|
75511
77254
|
exports.AddonAutoUpdateSchema = AddonAutoUpdateSchema;
|
|
75512
77255
|
exports.AddonListItemSchema = AddonListItemSchema;
|
|
75513
77256
|
exports.AddonPageDeclarationSchema = AddonPageDeclarationSchema;
|
|
@@ -75589,6 +77332,7 @@ exports.BASE_DEVICE_CAPS = BASE_DEVICE_CAPS;
|
|
|
75589
77332
|
exports.BASE_LIVE_EGRESS_PROFILE = BASE_LIVE_EGRESS_PROFILE;
|
|
75590
77333
|
exports.BATTERY_DEVICE_PROFILE = BATTERY_DEVICE_PROFILE;
|
|
75591
77334
|
exports.BATTERY_UNREACHABLE_AFTER_MS = BATTERY_UNREACHABLE_AFTER_MS;
|
|
77335
|
+
exports.BENCH_ROOT_STEP_ID = BENCH_ROOT_STEP_ID;
|
|
75592
77336
|
exports.BIRTH_DECISION_DEFAULT_LIMIT = BIRTH_DECISION_DEFAULT_LIMIT;
|
|
75593
77337
|
exports.BOOT_RECOVERY_BACKOFF_MS = require_sleep.BOOT_RECOVERY_BACKOFF_MS;
|
|
75594
77338
|
exports.BUILTIN_RESULT_KINDS = BUILTIN_RESULT_KINDS;
|
|
@@ -75897,6 +77641,7 @@ exports.DEVICE_CAP_NAMES = DEVICE_CAP_NAMES;
|
|
|
75897
77641
|
exports.DEVICE_CHILDREN_BATCH_MAX = require_sleep.DEVICE_CHILDREN_BATCH_MAX;
|
|
75898
77642
|
exports.DEVICE_DO_ACTIONS = DEVICE_DO_ACTIONS;
|
|
75899
77643
|
exports.DEVICE_PROFILES = DEVICE_PROFILES;
|
|
77644
|
+
exports.DEVICE_RAMP = DEVICE_RAMP;
|
|
75900
77645
|
exports.DEVICE_RESTORE_RETRY_CONCURRENCY = DEVICE_RESTORE_RETRY_CONCURRENCY;
|
|
75901
77646
|
exports.DEVICE_RESTORE_RETRY_DELAYS_MS = DEVICE_RESTORE_RETRY_DELAYS_MS;
|
|
75902
77647
|
exports.DEVICE_SCOPED_CAPS = require_sleep.DEVICE_SCOPED_CAPS;
|
|
@@ -76051,6 +77796,8 @@ exports.ExtensionSlotValueSchema = ExtensionSlotValueSchema;
|
|
|
76051
77796
|
exports.ExtensionSourceAvailabilitySchema = ExtensionSourceAvailabilitySchema;
|
|
76052
77797
|
exports.ExtensionSourceHealthSchema = ExtensionSourceHealthSchema;
|
|
76053
77798
|
exports.ExtensionSourceSchema = ExtensionSourceSchema;
|
|
77799
|
+
exports.ExternalIdentityKeySchema = ExternalIdentityKeySchema;
|
|
77800
|
+
exports.ExternalIdentitySchema = ExternalIdentitySchema;
|
|
76054
77801
|
exports.FEEDER_EXAMPLE_ADDON_ID = FEEDER_EXAMPLE_ADDON_ID;
|
|
76055
77802
|
exports.FEEDER_EXAMPLE_HA_DEVICE_ID = FEEDER_EXAMPLE_HA_DEVICE_ID;
|
|
76056
77803
|
exports.FFMPEG_PATH_ENV = require_composition.FFMPEG_PATH_ENV;
|
|
@@ -76117,8 +77864,24 @@ exports.IntegrationLiteSchema = IntegrationLiteSchema;
|
|
|
76117
77864
|
exports.IntegrationWithStateSchema = IntegrationWithStateSchema;
|
|
76118
77865
|
exports.IntercomAbilitySchema = IntercomAbilitySchema;
|
|
76119
77866
|
exports.IntercomStatusSchema = IntercomStatusSchema;
|
|
77867
|
+
exports.KEYCHAIN_MAX_REFS_PER_CALL = KEYCHAIN_MAX_REFS_PER_CALL;
|
|
77868
|
+
exports.KEYCHAIN_RESET_CONFIRMATION = KEYCHAIN_RESET_CONFIRMATION;
|
|
76120
77869
|
exports.KNOWN_CAP_NAMES = KNOWN_CAP_NAMES;
|
|
77870
|
+
exports.KeptReasonSchema = KeptReasonSchema;
|
|
76121
77871
|
exports.KeyEventSchema = KeyEventSchema;
|
|
77872
|
+
exports.KeychainAdminSecretSchema = KeychainAdminSecretSchema;
|
|
77873
|
+
exports.KeychainAuditActionSchema = KeychainAuditActionSchema;
|
|
77874
|
+
exports.KeychainAuditEntrySchema = KeychainAuditEntrySchema;
|
|
77875
|
+
exports.KeychainKeySourceKindSchema = KeychainKeySourceKindSchema;
|
|
77876
|
+
exports.KeychainKeySourceSchema = KeychainKeySourceSchema;
|
|
77877
|
+
exports.KeychainResolveEntrySchema = KeychainResolveEntrySchema;
|
|
77878
|
+
exports.KeychainResolveResultSchema = KeychainResolveResultSchema;
|
|
77879
|
+
exports.KeychainSecretMetaSchema = KeychainSecretMetaSchema;
|
|
77880
|
+
exports.KeychainSecretUsageSchema = KeychainSecretUsageSchema;
|
|
77881
|
+
exports.KeychainStateSchema = KeychainStateSchema;
|
|
77882
|
+
exports.KeychainStatusSchema = KeychainStatusSchema;
|
|
77883
|
+
exports.KeychainUnavailableReasonSchema = KeychainUnavailableReasonSchema;
|
|
77884
|
+
exports.KeychainWriteRefusedError = require_sleep.KeychainWriteRefusedError;
|
|
76122
77885
|
exports.LABEL_SUPPLY_MACRO = LABEL_SUPPLY_MACRO;
|
|
76123
77886
|
exports.LABEL_SUPPLY_STEP_IDS = LABEL_SUPPLY_STEP_IDS;
|
|
76124
77887
|
exports.LABEL_SUPPLY_VOCABULARIES = LABEL_SUPPLY_VOCABULARIES;
|
|
@@ -76136,6 +77899,7 @@ exports.LTS_SCOPE_CLASS_SEPARATOR = LTS_SCOPE_CLASS_SEPARATOR;
|
|
|
76136
77899
|
exports.LabelAttributionSchema = LabelAttributionSchema;
|
|
76137
77900
|
exports.LabelDefinitionSchema = LabelDefinitionSchema;
|
|
76138
77901
|
exports.LabelTierSchema = LabelTierSchema;
|
|
77902
|
+
exports.LatencySourceSchema = LatencySourceSchema;
|
|
76139
77903
|
exports.LawnMowerActivitySchema = LawnMowerActivitySchema;
|
|
76140
77904
|
exports.LawnMowerControlStatusSchema = LawnMowerControlStatusSchema;
|
|
76141
77905
|
exports.LedgerWalkDeviceReportSchema = LedgerWalkDeviceReportSchema;
|
|
@@ -76148,6 +77912,7 @@ exports.LegacyStorageLocationDefaultSchema = LegacyStorageLocationDefaultSchema;
|
|
|
76148
77912
|
exports.LinkedDeviceSchema = LinkedDeviceSchema;
|
|
76149
77913
|
exports.LinkedDevicesModeSchema = LinkedDevicesModeSchema;
|
|
76150
77914
|
exports.LinkedDevicesSlotValueSchema = LinkedDevicesSlotValueSchema;
|
|
77915
|
+
exports.ListNodeBenchmarkResultsInputSchema = ListNodeBenchmarkResultsInputSchema;
|
|
76151
77916
|
exports.ListTrackRelationsInputSchema = ListTrackRelationsInputSchema;
|
|
76152
77917
|
exports.ListTrackRelationsResultSchema = ListTrackRelationsResultSchema;
|
|
76153
77918
|
exports.LlmDefaultSchema = LlmDefaultSchema;
|
|
@@ -76235,6 +78000,7 @@ exports.MEDIA_PRESENCE_OWNER_KINDS = MEDIA_PRESENCE_OWNER_KINDS;
|
|
|
76235
78000
|
exports.METHOD_ACCESS_MAP = METHOD_ACCESS_MAP;
|
|
76236
78001
|
exports.METHOD_DEVICE_SELECTORS = METHOD_DEVICE_SELECTORS;
|
|
76237
78002
|
exports.MINUTES_PER_DAY = MINUTES_PER_DAY;
|
|
78003
|
+
exports.MIN_SCRUBBED_LENGTH = require_sleep.MIN_SCRUBBED_LENGTH;
|
|
76238
78004
|
exports.MIN_SESSIONS_PER_DEVICE_RANGE = MIN_SESSIONS_PER_DEVICE_RANGE;
|
|
76239
78005
|
exports.MODEL_FORMATS = MODEL_FORMATS;
|
|
76240
78006
|
exports.MODEL_HOSTING = MODEL_HOSTING;
|
|
@@ -76398,6 +78164,7 @@ exports.NC_TEMPLATE_VARS = NC_TEMPLATE_VARS;
|
|
|
76398
78164
|
exports.NC_UPDATE_EVENT_PACKAGE_NAMES = NC_UPDATE_EVENT_PACKAGE_NAMES;
|
|
76399
78165
|
exports.NETWORK_LINK_TYPES = NETWORK_LINK_TYPES;
|
|
76400
78166
|
exports.NETWORK_LINK_UNKNOWN = NETWORK_LINK_UNKNOWN;
|
|
78167
|
+
exports.NODE_BENCHMARK_DEFAULTS = NODE_BENCHMARK_DEFAULTS;
|
|
76401
78168
|
exports.NO_MEASURED_CAPACITY = NO_MEASURED_CAPACITY;
|
|
76402
78169
|
exports.NativeCropBboxSchema = NativeCropBboxSchema;
|
|
76403
78170
|
exports.NativeCropRefSchema = NativeCropRefSchema;
|
|
@@ -76519,6 +78286,33 @@ exports.NetworkAccessStatusSchema = NetworkAccessStatusSchema;
|
|
|
76519
78286
|
exports.NetworkAddressSchema = NetworkAddressSchema;
|
|
76520
78287
|
exports.NetworkEndpointSchema = NetworkEndpointSchema;
|
|
76521
78288
|
exports.NetworkLinkStatusSchema = NetworkLinkStatusSchema;
|
|
78289
|
+
exports.NodeBenchCellSchema = NodeBenchCellSchema;
|
|
78290
|
+
exports.NodeBenchClipSchema = NodeBenchClipSchema;
|
|
78291
|
+
exports.NodeBenchDeviceCellSchema = NodeBenchDeviceCellSchema;
|
|
78292
|
+
exports.NodeBenchFingerprintSchema = NodeBenchFingerprintSchema;
|
|
78293
|
+
exports.NodeBenchLimitSchema = NodeBenchLimitSchema;
|
|
78294
|
+
exports.NodeBenchPipelineCellSchema = NodeBenchPipelineCellSchema;
|
|
78295
|
+
exports.NodeBenchProgressSchema = NodeBenchProgressSchema;
|
|
78296
|
+
exports.NodeBenchRampStepSchema = NodeBenchRampStepSchema;
|
|
78297
|
+
exports.NodeBenchRunnerInputSchema = NodeBenchRunnerInputSchema;
|
|
78298
|
+
exports.NodeBenchRunnerStateSchema = NodeBenchRunnerStateSchema;
|
|
78299
|
+
exports.NodeBenchRunnerStatusSchema = NodeBenchRunnerStatusSchema;
|
|
78300
|
+
exports.NodeBenchmarkCandidatesSchema = NodeBenchmarkCandidatesSchema;
|
|
78301
|
+
exports.NodeBenchmarkDevicePlanSchema = NodeBenchmarkDevicePlanSchema;
|
|
78302
|
+
exports.NodeBenchmarkEndReasonSchema = NodeBenchmarkEndReasonSchema;
|
|
78303
|
+
exports.NodeBenchmarkManifestSchema = NodeBenchmarkManifestSchema;
|
|
78304
|
+
exports.NodeBenchmarkMovingCameraSchema = NodeBenchmarkMovingCameraSchema;
|
|
78305
|
+
exports.NodeBenchmarkPhaseSchema = NodeBenchmarkPhaseSchema;
|
|
78306
|
+
exports.NodeBenchmarkPlanSchema = NodeBenchmarkPlanSchema;
|
|
78307
|
+
exports.NodeBenchmarkPreflightSchema = NodeBenchmarkPreflightSchema;
|
|
78308
|
+
exports.NodeBenchmarkRefusalKindSchema = NodeBenchmarkRefusalKindSchema;
|
|
78309
|
+
exports.NodeBenchmarkRefusalSchema = NodeBenchmarkRefusalSchema;
|
|
78310
|
+
exports.NodeBenchmarkResultSchema = NodeBenchmarkResultSchema;
|
|
78311
|
+
exports.NodeBenchmarkResultViewSchema = NodeBenchmarkResultViewSchema;
|
|
78312
|
+
exports.NodeBenchmarkRunSchema = NodeBenchmarkRunSchema;
|
|
78313
|
+
exports.NodeBenchmarkStateSchema = NodeBenchmarkStateSchema;
|
|
78314
|
+
exports.NodeBenchmarkStatusSchema = NodeBenchmarkStatusSchema;
|
|
78315
|
+
exports.NodeBenchmarkStayingCameraSchema = NodeBenchmarkStayingCameraSchema;
|
|
76522
78316
|
exports.NodeDeviceChangeSchema = NodeDeviceChangeSchema;
|
|
76523
78317
|
exports.NodeDirectoryEntrySchema = NodeDirectoryEntrySchema;
|
|
76524
78318
|
exports.NodeDirectorySchema = NodeDirectorySchema;
|
|
@@ -76579,6 +78373,7 @@ exports.PET_FEEDER_MANUAL_FEED_MIN = PET_FEEDER_MANUAL_FEED_MIN;
|
|
|
76579
78373
|
exports.PIPELINE_ANALYTICS_CAP_NAME = PIPELINE_ANALYTICS_CAP_NAME;
|
|
76580
78374
|
exports.PIPELINE_FLOW_CAPABILITY_NAMES = PIPELINE_FLOW_CAPABILITY_NAMES;
|
|
76581
78375
|
exports.PIPELINE_OWNER_CAPABILITY_NAMES = PIPELINE_OWNER_CAPABILITY_NAMES;
|
|
78376
|
+
exports.PIPELINE_RAMP = PIPELINE_RAMP;
|
|
76582
78377
|
exports.PRIVACY_MASK_CAP_NAME = PRIVACY_MASK_CAP_NAME;
|
|
76583
78378
|
exports.PROVIDER_KIND_CAP_NAMES = PROVIDER_KIND_CAP_NAMES;
|
|
76584
78379
|
exports.PROVIDER_PIN_FIELD = require_sleep.PROVIDER_PIN_FIELD;
|
|
@@ -76655,11 +78450,12 @@ exports.RECORDING_EXPORT_MAX_READ_BYTES = RECORDING_EXPORT_MAX_READ_BYTES;
|
|
|
76655
78450
|
exports.RECORDING_SOURCE_CAMSTACK = RECORDING_SOURCE_CAMSTACK;
|
|
76656
78451
|
exports.RECORDING_SOURCE_CAMSTACK_ADDON = RECORDING_SOURCE_CAMSTACK_ADDON;
|
|
76657
78452
|
exports.RECORDING_TIMELINE_BATCH_MAX = RECORDING_TIMELINE_BATCH_MAX;
|
|
76658
|
-
exports.REDACTED_SECRET = REDACTED_SECRET;
|
|
78453
|
+
exports.REDACTED_SECRET = require_sleep.REDACTED_SECRET;
|
|
76659
78454
|
exports.REMOVED_MODEL_IDS = REMOVED_MODEL_IDS;
|
|
76660
78455
|
exports.RESERVED_BINDING_NAMES = require_composition.RESERVED_BINDING_NAMES;
|
|
76661
78456
|
exports.RESERVED_COLLECTION_SOURCES = RESERVED_COLLECTION_SOURCES;
|
|
76662
78457
|
exports.RESTORED_CAP_NAMES = RESTORED_CAP_NAMES;
|
|
78458
|
+
exports.REVALIDATE_AFTER_MS = require_sleep.REVALIDATE_AFTER_MS;
|
|
76663
78459
|
exports.ROOM_EXAMPLE_MOTION_SOURCES = ROOM_EXAMPLE_MOTION_SOURCES;
|
|
76664
78460
|
exports.ROOM_EXAMPLE_TEMPERATURE_SOURCES = ROOM_EXAMPLE_TEMPERATURE_SOURCES;
|
|
76665
78461
|
exports.ROOM_OCCUPANCY_WINDOW_MS = ROOM_OCCUPANCY_WINDOW_MS;
|
|
@@ -76741,14 +78537,27 @@ exports.RetrainAnnotationDraftSchema = RetrainAnnotationDraftSchema;
|
|
|
76741
78537
|
exports.RetrainAnnotationKindSchema = RetrainAnnotationKindSchema;
|
|
76742
78538
|
exports.RetrainAnnotationSchema = RetrainAnnotationSchema;
|
|
76743
78539
|
exports.RetrainAnnotationSourceSchema = RetrainAnnotationSourceSchema;
|
|
78540
|
+
exports.RetrainArchiveResultSchema = RetrainArchiveResultSchema;
|
|
78541
|
+
exports.RetrainArchiveTargetSchema = RetrainArchiveTargetSchema;
|
|
78542
|
+
exports.RetrainAssistProfileSchema = RetrainAssistProfileSchema;
|
|
76744
78543
|
exports.RetrainAssistResultSchema = RetrainAssistResultSchema;
|
|
76745
78544
|
exports.RetrainAssistSubjectSchema = RetrainAssistSubjectSchema;
|
|
78545
|
+
exports.RetrainCollectionCreateResultSchema = RetrainCollectionCreateResultSchema;
|
|
78546
|
+
exports.RetrainCollectionRenameResultSchema = RetrainCollectionRenameResultSchema;
|
|
78547
|
+
exports.RetrainCollectionSchema = RetrainCollectionSchema;
|
|
76746
78548
|
exports.RetrainCopyRefusalSchema = RetrainCopyRefusalSchema;
|
|
78549
|
+
exports.RetrainExportFilterSchema = RetrainExportFilterSchema;
|
|
78550
|
+
exports.RetrainExportLayoutSchema = RetrainExportLayoutSchema;
|
|
76747
78551
|
exports.RetrainFrameCandidateSchema = RetrainFrameCandidateSchema;
|
|
76748
78552
|
exports.RetrainFrameListSchema = RetrainFrameListSchema;
|
|
78553
|
+
exports.RetrainFrameOriginSchema = RetrainFrameOriginSchema;
|
|
76749
78554
|
exports.RetrainFrameSchema = RetrainFrameSchema;
|
|
76750
78555
|
exports.RetrainFrameSelectionSchema = RetrainFrameSelectionSchema;
|
|
78556
|
+
exports.RetrainLlmAssistResultSchema = RetrainLlmAssistResultSchema;
|
|
78557
|
+
exports.RetrainLlmProposalSchema = RetrainLlmProposalSchema;
|
|
78558
|
+
exports.RetrainLlmReviewSchema = RetrainLlmReviewSchema;
|
|
76751
78559
|
exports.RetrainMacroClassSchema = RetrainMacroClassSchema;
|
|
78560
|
+
exports.RetrainPipelineBoxSchema = RetrainPipelineBoxSchema;
|
|
76752
78561
|
exports.RetrainStatusSchema = RetrainStatusSchema;
|
|
76753
78562
|
exports.RetrainTrackSchema = RetrainTrackSchema;
|
|
76754
78563
|
exports.RetrainTransitionResultSchema = RetrainTransitionResultSchema;
|
|
@@ -76774,6 +78583,9 @@ exports.SCENE_DEFAULT_UNCOVERED_POLICY = SCENE_DEFAULT_UNCOVERED_POLICY;
|
|
|
76774
78583
|
exports.SCENE_DIVERGED = SCENE_DIVERGED;
|
|
76775
78584
|
exports.SCENE_RESET_RECAPTURES = SCENE_RESET_RECAPTURES;
|
|
76776
78585
|
exports.SCOPE_PRESETS = SCOPE_PRESETS;
|
|
78586
|
+
exports.SECRET_CLEAR = require_sleep.SECRET_CLEAR;
|
|
78587
|
+
exports.SECRET_META = require_sleep.SECRET_META;
|
|
78588
|
+
exports.SECRET_REF_SCHEME = require_sleep.SECRET_REF_SCHEME;
|
|
76777
78589
|
exports.SENSOR_FEATURES = SENSOR_FEATURES;
|
|
76778
78590
|
exports.SENSOR_MAP = SENSOR_MAP;
|
|
76779
78591
|
exports.SESSION_PLACEMENT_SETTING_KEY = SESSION_PLACEMENT_SETTING_KEY;
|
|
@@ -77080,6 +78892,7 @@ exports.applyModeDeviceListEdit = applyModeDeviceListEdit;
|
|
|
77080
78892
|
exports.applyModelBoundSettings = applyModelBoundSettings;
|
|
77081
78893
|
exports.applyNonBlockingEdit = applyNonBlockingEdit;
|
|
77082
78894
|
exports.applySecureOnArmEdit = applySecureOnArmEdit;
|
|
78895
|
+
exports.arrayItemFieldPath = require_sleep.arrayItemFieldPath;
|
|
77083
78896
|
exports.asBoolean = require_sleep.asBoolean;
|
|
77084
78897
|
exports.asJsonArray = require_sleep.asJsonArray;
|
|
77085
78898
|
exports.asJsonObject = require_sleep.asJsonObject;
|
|
@@ -77111,6 +78924,7 @@ exports.brightnessCapability = brightnessCapability;
|
|
|
77111
78924
|
exports.brokerCapability = brokerCapability;
|
|
77112
78925
|
exports.buildAddonRouteProvider = buildAddonRouteProvider;
|
|
77113
78926
|
exports.buildAudioArgs = require_composition.buildAudioArgs;
|
|
78927
|
+
exports.buildBenchStepTree = buildBenchStepTree;
|
|
77114
78928
|
exports.buildCapabilityLookup = buildCapabilityLookup;
|
|
77115
78929
|
exports.buildDeviceAdminUrl = buildDeviceAdminUrl;
|
|
77116
78930
|
exports.buildDoorbellCompositionFeature = buildDoorbellCompositionFeature;
|
|
@@ -77121,6 +78935,7 @@ exports.buildInputArgs = require_composition.buildInputArgs;
|
|
|
77121
78935
|
exports.buildModelVariantGroups = buildModelVariantGroups;
|
|
77122
78936
|
exports.buildNcTaxonomy = buildNcTaxonomy;
|
|
77123
78937
|
exports.buildRoleScopes = buildRoleScopes;
|
|
78938
|
+
exports.buildSecretRef = require_sleep.buildSecretRef;
|
|
77124
78939
|
exports.buildStreamParamsConfigSchema = buildStreamParamsConfigSchema;
|
|
77125
78940
|
exports.buildVideoArgs = require_composition.buildVideoArgs;
|
|
77126
78941
|
exports.buildViewerLink = buildViewerLink;
|
|
@@ -77141,9 +78956,12 @@ exports.carbonMonoxideCapability = carbonMonoxideCapability;
|
|
|
77141
78956
|
exports.cellsToRects = cellsToRects;
|
|
77142
78957
|
exports.checkRoleAddress = checkRoleAddress;
|
|
77143
78958
|
exports.classifyBearerPrincipal = classifyBearerPrincipal;
|
|
78959
|
+
exports.classifyCamerasForBenchmark = classifyCamerasForBenchmark;
|
|
77144
78960
|
exports.classifyInferenceHardware = classifyInferenceHardware;
|
|
78961
|
+
exports.classifySecretWrite = require_sleep.classifySecretWrite;
|
|
77145
78962
|
exports.classifyStream = classifyStream;
|
|
77146
78963
|
exports.classifyStreams = classifyStreams;
|
|
78964
|
+
exports.clearKnownSecrets = require_sleep.clearKnownSecrets;
|
|
77147
78965
|
exports.clearModelBoundOverrides = clearModelBoundOverrides;
|
|
77148
78966
|
exports.clearModelBoundSetting = clearModelBoundSetting;
|
|
77149
78967
|
exports.climateControlCapability = climateControlCapability;
|
|
@@ -77158,8 +78976,11 @@ exports.clusterStepSettingKey = clusterStepSettingKey;
|
|
|
77158
78976
|
exports.codecIsAccepted = codecIsAccepted;
|
|
77159
78977
|
exports.collectHydratedFieldEntries = require_sleep.collectHydratedFieldEntries;
|
|
77160
78978
|
exports.collectHydratedFieldValues = require_sleep.collectHydratedFieldValues;
|
|
78979
|
+
exports.collectKeychainStoredKeys = require_sleep.collectKeychainStoredKeys;
|
|
77161
78980
|
exports.collectModelBoundKeys = collectModelBoundKeys;
|
|
77162
|
-
exports.collectSecretConfigKeys = collectSecretConfigKeys;
|
|
78981
|
+
exports.collectSecretConfigKeys = require_sleep.collectSecretConfigKeys;
|
|
78982
|
+
exports.collectSecretMarkerRefs = require_sleep.collectSecretMarkerRefs;
|
|
78983
|
+
exports.collectZodSecretPaths = require_sleep.collectZodSecretPaths;
|
|
77163
78984
|
exports.colorCapability = colorCapability;
|
|
77164
78985
|
exports.colorForKind = colorForKind;
|
|
77165
78986
|
exports.commitWatchdogRestart = commitWatchdogRestart;
|
|
@@ -77211,6 +79032,7 @@ exports.createLazyTrpcSource = require_sleep.createLazyTrpcSource;
|
|
|
77211
79032
|
exports.createLogChannelsProvider = createLogChannelsProvider;
|
|
77212
79033
|
exports.createMirrorSource = require_sleep.createMirrorSource;
|
|
77213
79034
|
exports.createRuntimeStateBridge = createRuntimeStateBridge;
|
|
79035
|
+
exports.createSecretsAccess = require_sleep.createSecretsAccess;
|
|
77214
79036
|
exports.createSliceHandle = require_sleep.createSliceHandle;
|
|
77215
79037
|
exports.createStatefulExpressionMemory = require_composition.createStatefulExpressionMemory;
|
|
77216
79038
|
exports.createSystemProxy = createSystemProxy;
|
|
@@ -77277,6 +79099,7 @@ exports.effectiveStepSettings = effectiveStepSettings;
|
|
|
77277
79099
|
exports.egressTranscodeSharingKey = egressTranscodeSharingKey;
|
|
77278
79100
|
exports.egressTransportFromRequest = egressTransportFromRequest;
|
|
77279
79101
|
exports.electByShare = electByShare;
|
|
79102
|
+
exports.eligibleUnderBenchmark = eligibleUnderBenchmark;
|
|
77280
79103
|
exports.embeddingEncoderCapability = embeddingEncoderCapability;
|
|
77281
79104
|
exports.embeddingModelFailedError = embeddingModelFailedError;
|
|
77282
79105
|
exports.embeddingModelFailedOf = embeddingModelFailedOf;
|
|
@@ -77294,6 +79117,7 @@ exports.enumerateInferenceDevices = enumerateInferenceDevices;
|
|
|
77294
79117
|
exports.enumerateItemArrayFields = enumerateItemArrayFields;
|
|
77295
79118
|
exports.enumerateSchemaFields = enumerateSchemaFields;
|
|
77296
79119
|
exports.errMsg = require_err_msg.errMsg;
|
|
79120
|
+
exports.estimateNodeBenchmarkDurationMs = estimateNodeBenchmarkDurationMs;
|
|
77297
79121
|
exports.evaluateAst = require_composition.evaluateAst;
|
|
77298
79122
|
exports.evaluateCompositionField = evaluateCompositionField;
|
|
77299
79123
|
exports.evaluateCount = require_composition.evaluateCount;
|
|
@@ -77337,10 +79161,13 @@ exports.findCompositionCycles = findCompositionCycles;
|
|
|
77337
79161
|
exports.findTimezone = findTimezone;
|
|
77338
79162
|
exports.floodCapability = floodCapability;
|
|
77339
79163
|
exports.foldSnapshotByFunction = foldSnapshotByFunction;
|
|
79164
|
+
exports.forgetKnownSecret = require_sleep.forgetKnownSecret;
|
|
77340
79165
|
exports.formatForRuntime = formatForRuntime;
|
|
77341
79166
|
exports.formatMediaOwnerKey = formatMediaOwnerKey;
|
|
77342
79167
|
exports.formatMinutes = formatMinutes;
|
|
77343
79168
|
exports.formatParkedFor = formatParkedFor;
|
|
79169
|
+
exports.formatSecretScope = require_sleep.formatSecretScope;
|
|
79170
|
+
exports.freshResults = freshResults;
|
|
77344
79171
|
exports.frigateDefaultClassFloors = frigateDefaultClassFloors;
|
|
77345
79172
|
exports.frigateLabelFields = frigateLabelFields;
|
|
77346
79173
|
exports.gasCapability = gasCapability;
|
|
@@ -77354,6 +79181,7 @@ exports.getTaxonomyEntry = getTaxonomyEntry;
|
|
|
77354
79181
|
exports.gifDeriveSpeed = gifDeriveSpeed;
|
|
77355
79182
|
exports.gifFilterComplex = gifFilterComplex;
|
|
77356
79183
|
exports.gifFromMp4Args = gifFromMp4Args;
|
|
79184
|
+
exports.globalSecretScope = require_sleep.globalSecretScope;
|
|
77357
79185
|
exports.hasModelBoundOverrides = hasModelBoundOverrides;
|
|
77358
79186
|
exports.hasMotionTrigger = hasMotionTrigger;
|
|
77359
79187
|
exports.hfModelUrl = hfModelUrl;
|
|
@@ -77403,6 +79231,7 @@ exports.isEventOwnerType = isEventOwnerType;
|
|
|
77403
79231
|
exports.isFirstLevelMacroClass = isFirstLevelMacroClass;
|
|
77404
79232
|
exports.isHeldBackTemplateVar = isHeldBackTemplateVar;
|
|
77405
79233
|
exports.isIsolatedBuiltin = isIsolatedBuiltin;
|
|
79234
|
+
exports.isKeychainStoredField = require_sleep.isKeychainStoredField;
|
|
77406
79235
|
exports.isKnownTemplateVar = isKnownTemplateVar;
|
|
77407
79236
|
exports.isLabelSupplyStepId = isLabelSupplyStepId;
|
|
77408
79237
|
exports.isLocationEnabled = isLocationEnabled;
|
|
@@ -77417,7 +79246,12 @@ exports.isRetiredClearKey = isRetiredClearKey;
|
|
|
77417
79246
|
exports.isRootSuppliableStepId = isRootSuppliableStepId;
|
|
77418
79247
|
exports.isSameAddonId = isSameAddonId;
|
|
77419
79248
|
exports.isScheduleActive = isScheduleActive;
|
|
77420
|
-
exports.
|
|
79249
|
+
exports.isSecretClear = require_sleep.isSecretClear;
|
|
79250
|
+
exports.isSecretConfigField = require_sleep.isSecretConfigField;
|
|
79251
|
+
exports.isSecretFieldView = require_sleep.isSecretFieldView;
|
|
79252
|
+
exports.isSecretMarker = require_sleep.isSecretMarker;
|
|
79253
|
+
exports.isSecretMarkerLike = require_sleep.isSecretMarkerLike;
|
|
79254
|
+
exports.isSecretRef = require_sleep.isSecretRef;
|
|
77421
79255
|
exports.isSingleHubAddressRole = isSingleHubAddressRole;
|
|
77422
79256
|
exports.isSoftwareDecode = require_composition.isSoftwareDecode;
|
|
77423
79257
|
exports.isSourceCap = require_composition.isSourceCap;
|
|
@@ -77430,11 +79264,15 @@ exports.isSystemEventSummaryRule = isSystemEventSummaryRule;
|
|
|
77430
79264
|
exports.isSystemRuleKind = isSystemRuleKind;
|
|
77431
79265
|
exports.isVectorIndexDimConflict = isVectorIndexDimConflict;
|
|
77432
79266
|
exports.isVoidInput = isVoidInput;
|
|
79267
|
+
exports.isZodSecret = require_sleep.isZodSecret;
|
|
77433
79268
|
exports.ituDbfsFromPreEpoch = ituDbfsFromPreEpoch;
|
|
77434
79269
|
exports.jobKindSchema = jobKindSchema;
|
|
77435
79270
|
exports.kebabToCamel = kebabToCamel;
|
|
79271
|
+
exports.keychainAdminCapability = keychainAdminCapability;
|
|
79272
|
+
exports.keychainCapability = keychainCapability;
|
|
77436
79273
|
exports.kindOfValue = kindOfValue;
|
|
77437
79274
|
exports.kindsForDiscriminator = kindsForDiscriminator;
|
|
79275
|
+
exports.knownSecretCount = require_sleep.knownSecretCount;
|
|
77438
79276
|
exports.knownValues = knownValues;
|
|
77439
79277
|
exports.lawnMowerControlCapability = lawnMowerControlCapability;
|
|
77440
79278
|
exports.legacyAutoLinkIds = legacyAutoLinkIds;
|
|
@@ -77445,6 +79283,7 @@ exports.lifecycleJobStateSchema = lifecycleJobStateSchema;
|
|
|
77445
79283
|
exports.lifecycleTaskSchema = lifecycleTaskSchema;
|
|
77446
79284
|
exports.linkedLabelStepId = linkedLabelStepId;
|
|
77447
79285
|
exports.linkedStepOf = linkedStepOf;
|
|
79286
|
+
exports.listBenchDetailSteps = listBenchDetailSteps;
|
|
77448
79287
|
exports.llmCapability = llmCapability;
|
|
77449
79288
|
exports.llmRuntimeCapability = llmRuntimeCapability;
|
|
77450
79289
|
exports.loadContributionCapability = loadContributionCapability;
|
|
@@ -77459,6 +79298,7 @@ exports.logLevelAtMost = logLevelAtMost;
|
|
|
77459
79298
|
exports.loginMethodCapability = loginMethodCapability;
|
|
77460
79299
|
exports.looseSchema = looseSchema;
|
|
77461
79300
|
exports.makeProfileBrokerId = require_sleep.makeProfileBrokerId;
|
|
79301
|
+
exports.makeSecretMarker = require_sleep.makeSecretMarker;
|
|
77462
79302
|
exports.makeSourceBrokerId = require_sleep.makeSourceBrokerId;
|
|
77463
79303
|
exports.mapAudioLabelToMacro = mapAudioLabelToMacro;
|
|
77464
79304
|
exports.markdownToHtmlLite = markdownToHtmlLite;
|
|
@@ -77467,8 +79307,11 @@ exports.maskUrlCredentials = maskUrlCredentials;
|
|
|
77467
79307
|
exports.matchDoAction = matchDoAction;
|
|
77468
79308
|
exports.mayReadLocation = mayReadLocation;
|
|
77469
79309
|
exports.mayWriteToLocation = mayWriteToLocation;
|
|
79310
|
+
exports.measuredCapacityFromResults = measuredCapacityFromResults;
|
|
79311
|
+
exports.measuredDetectorCells = measuredDetectorCells;
|
|
77470
79312
|
exports.mediaPlayerCapability = mediaPlayerCapability;
|
|
77471
79313
|
exports.memoizePinnedFfmpeg = memoizePinnedFfmpeg;
|
|
79314
|
+
exports.mergeSecretStatePaths = require_sleep.mergeSecretStatePaths;
|
|
77472
79315
|
exports.mergeSettingsBags = mergeSettingsBags;
|
|
77473
79316
|
exports.mergeSourceInfo = mergeSourceInfo;
|
|
77474
79317
|
exports.meshNetworkCapability = meshNetworkCapability;
|
|
@@ -77495,6 +79338,7 @@ exports.ncAlarmSystemDefaultSettings = ncAlarmSystemDefaultSettings;
|
|
|
77495
79338
|
exports.networkAccessCapability = networkAccessCapability;
|
|
77496
79339
|
exports.networkLinkCapability = networkLinkCapability;
|
|
77497
79340
|
exports.networkQualityCapability = networkQualityCapability;
|
|
79341
|
+
exports.nodeBenchmarkRefusals = nodeBenchmarkRefusals;
|
|
77498
79342
|
exports.nodePickerItems = nodePickerItems;
|
|
77499
79343
|
exports.nodePin = require_sleep.nodePin;
|
|
77500
79344
|
exports.nodesCapability = nodesCapability;
|
|
@@ -77502,6 +79346,7 @@ exports.normalizeAddonInitResult = require_sleep.normalizeAddonInitResult;
|
|
|
77502
79346
|
exports.normalizeAudioLabel = normalizeAudioLabel;
|
|
77503
79347
|
exports.normalizeCoreBlockWrite = normalizeCoreBlockWrite;
|
|
77504
79348
|
exports.normalizeNodeId = require_sleep.normalizeNodeId;
|
|
79349
|
+
exports.normalizeSecretOwner = require_sleep.normalizeSecretOwner;
|
|
77505
79350
|
exports.normalizeTokenScopes = normalizeTokenScopes;
|
|
77506
79351
|
exports.normalizeUnit = normalizeUnit;
|
|
77507
79352
|
exports.notificationOutputCapability = notificationOutputCapability;
|
|
@@ -77529,6 +79374,8 @@ exports.parseOccupancyScope = parseOccupancyScope;
|
|
|
77529
79374
|
exports.parseProcStatus = parseProcStatus;
|
|
77530
79375
|
exports.parseProfileBrokerId = require_sleep.parseProfileBrokerId;
|
|
77531
79376
|
exports.parseRuleSection = parseRuleSection;
|
|
79377
|
+
exports.parseSecretRef = require_sleep.parseSecretRef;
|
|
79378
|
+
exports.parseSecretStatePath = require_sleep.parseSecretStatePath;
|
|
77532
79379
|
exports.parseSessionPlacementPolicy = parseSessionPlacementPolicy;
|
|
77533
79380
|
exports.parseShareSource = parseShareSource;
|
|
77534
79381
|
exports.parseStreamParamsFormPatch = parseStreamParamsFormPatch;
|
|
@@ -77546,6 +79393,7 @@ exports.pickRestartCandidate = pickRestartCandidate;
|
|
|
77546
79393
|
exports.pickVideoEncoder = require_composition.pickVideoEncoder;
|
|
77547
79394
|
exports.pickerForCondition = pickerForCondition;
|
|
77548
79395
|
exports.pickerForRuleClasses = pickerForRuleClasses;
|
|
79396
|
+
exports.pinUnderBenchmark = pinUnderBenchmark;
|
|
77549
79397
|
exports.pipelineAnalyticsCapability = pipelineAnalyticsCapability;
|
|
77550
79398
|
exports.pipelineExecutorCapability = pipelineExecutorCapability;
|
|
77551
79399
|
exports.pipelineOrchestratorCapability = pipelineOrchestratorCapability;
|
|
@@ -77591,6 +79439,7 @@ exports.recordingOnboardCapability = recordingOnboardCapability;
|
|
|
77591
79439
|
exports.recordingSignalCapability = recordingSignalCapability;
|
|
77592
79440
|
exports.rectsToCells = rectsToCells;
|
|
77593
79441
|
exports.reducePoints = reducePoints;
|
|
79442
|
+
exports.registerKnownSecret = require_sleep.registerKnownSecret;
|
|
77594
79443
|
exports.renameAlarmProfile = renameAlarmProfile;
|
|
77595
79444
|
exports.replacedFieldKeys = replacedFieldKeys;
|
|
77596
79445
|
exports.requiredTopLevelKeys = requiredTopLevelKeys;
|
|
@@ -77611,6 +79460,7 @@ exports.resolveCoreBlockFiles = resolveCoreBlockFiles;
|
|
|
77611
79460
|
exports.resolveCreateExportSubject = resolveCreateExportSubject;
|
|
77612
79461
|
exports.resolveDeviceControlKind = resolveDeviceControlKind;
|
|
77613
79462
|
exports.resolveDeviceProfile = resolveDeviceProfile;
|
|
79463
|
+
exports.resolveDisplayIconKey = resolveDisplayIconKey;
|
|
77614
79464
|
exports.resolveEffectiveShares = resolveEffectiveShares;
|
|
77615
79465
|
exports.resolveEgressDecodeHwAccel = resolveEgressDecodeHwAccel;
|
|
77616
79466
|
exports.resolveExportProfiles = resolveExportProfiles;
|
|
@@ -77631,9 +79481,13 @@ exports.resolvePublicEndpoint = resolvePublicEndpoint;
|
|
|
77631
79481
|
exports.resolveRecordingProfiles = resolveRecordingProfiles;
|
|
77632
79482
|
exports.resolveRootSupply = resolveRootSupply;
|
|
77633
79483
|
exports.resolveRunnerId = resolveRunnerId;
|
|
79484
|
+
exports.resolveSecretMarkers = require_sleep.resolveSecretMarkers;
|
|
79485
|
+
exports.resolveSecretViewsIn = require_sleep.resolveSecretViewsIn;
|
|
77634
79486
|
exports.resolveStreamMaps = require_composition.resolveStreamMaps;
|
|
77635
79487
|
exports.resolveVariantModelId = resolveVariantModelId;
|
|
77636
79488
|
exports.resolveViewableDeviceIds = resolveViewableDeviceIds;
|
|
79489
|
+
exports.resultCellKey = resultCellKey;
|
|
79490
|
+
exports.resultStandings = resultStandings;
|
|
77637
79491
|
exports.roleSpec = roleSpec;
|
|
77638
79492
|
exports.roomCompositionExample = roomCompositionExample;
|
|
77639
79493
|
exports.rootSuppliesOf = rootSuppliesOf;
|
|
@@ -77657,14 +79511,17 @@ exports.runtimeStatePolicyFor = runtimeStatePolicyFor;
|
|
|
77657
79511
|
exports.sameDoFamily = sameDoFamily;
|
|
77658
79512
|
exports.sceneMonitorCapability = sceneMonitorCapability;
|
|
77659
79513
|
exports.scheduleForSendTimes = scheduleForSendTimes;
|
|
77660
|
-
exports.schemaDeclaresAnyField = schemaDeclaresAnyField;
|
|
79514
|
+
exports.schemaDeclaresAnyField = require_sleep.schemaDeclaresAnyField;
|
|
77661
79515
|
exports.scopeInherits = scopeInherits;
|
|
77662
79516
|
exports.scopeKey = require_sleep.scopeKey;
|
|
77663
79517
|
exports.scopesAllowAddon = scopesAllowAddon;
|
|
77664
79518
|
exports.scopesAllowDeviceCap = scopesAllowDeviceCap;
|
|
77665
79519
|
exports.scoreRuntimes = scoreRuntimes;
|
|
77666
79520
|
exports.scriptRunnerCapability = scriptRunnerCapability;
|
|
79521
|
+
exports.scrubKnownSecrets = require_sleep.scrubKnownSecrets;
|
|
77667
79522
|
exports.searchDisplayIcons = searchDisplayIcons;
|
|
79523
|
+
exports.secretTreeFromPaths = require_sleep.secretTreeFromPaths;
|
|
79524
|
+
exports.secretTreeFromSchema = require_sleep.secretTreeFromSchema;
|
|
77668
79525
|
exports.secureActuationFor = secureActuationFor;
|
|
77669
79526
|
exports.selectAppConnectionEndpoints = selectAppConnectionEndpoints;
|
|
77670
79527
|
exports.selectAssignedProfileSlots = require_sleep.selectAssignedProfileSlots;
|
|
@@ -77679,6 +79536,7 @@ exports.setByPath = setByPath;
|
|
|
77679
79536
|
exports.settingValuesEqual = settingValuesEqual;
|
|
77680
79537
|
exports.settingsBelow = settingsBelow;
|
|
77681
79538
|
exports.settingsStoreCapability = settingsStoreCapability;
|
|
79539
|
+
exports.shortSecretRefHash = require_sleep.shortSecretRefHash;
|
|
77682
79540
|
exports.signalPercentFromBars = signalPercentFromBars;
|
|
77683
79541
|
exports.signalPercentFromRssi = signalPercentFromRssi;
|
|
77684
79542
|
exports.siteZoneKey = siteZoneKey;
|
|
@@ -77747,11 +79605,13 @@ exports.toDeviceSummary = toDeviceSummary;
|
|
|
77747
79605
|
exports.toExpressionValue = require_composition.toExpressionValue;
|
|
77748
79606
|
exports.toNodeId = require_sleep.toNodeId;
|
|
77749
79607
|
exports.toPercentShares = toPercentShares;
|
|
79608
|
+
exports.toSecretFieldView = require_sleep.toSecretFieldView;
|
|
77750
79609
|
exports.toStreamSourceEntry = toStreamSourceEntry;
|
|
77751
79610
|
exports.toastCapability = toastCapability;
|
|
77752
79611
|
exports.toggleAudioLabel = toggleAudioLabel;
|
|
77753
79612
|
exports.tokenize = require_composition.tokenize;
|
|
77754
79613
|
exports.transcodeBody = transcodeBody;
|
|
79614
|
+
exports.transformSecretWrite = require_sleep.transformSecretWrite;
|
|
77755
79615
|
exports.tryConvertUnit = tryConvertUnit;
|
|
77756
79616
|
exports.turnProviderCapability = turnProviderCapability;
|
|
77757
79617
|
exports.unitDimension = unitDimension;
|