@camstack/types 1.2.327 → 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 +1 -0
- package/dist/addon.js +52 -4
- package/dist/addon.mjs +27 -5
- 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 +2 -0
- package/dist/capabilities/enum-sensor.cap.d.ts +4 -4
- package/dist/capabilities/index.d.ts +6 -2
- 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/log-channels.cap.d.ts +1 -1
- package/dist/capabilities/log-destination.cap.d.ts +5 -5
- 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 +996 -118
- package/dist/capabilities/pipeline-orchestrator.cap.d.ts +384 -0
- package/dist/capabilities/pipeline-runner.cap.d.ts +145 -2
- package/dist/capabilities/storage.cap.d.ts +1 -1
- package/dist/capabilities/system.cap.d.ts +16 -16
- package/dist/capabilities/webrtc-session.cap.d.ts +3 -3
- package/dist/client.js +32 -1
- package/dist/client.mjs +32 -1
- package/dist/device/device-context.d.ts +11 -1
- package/dist/device/index.d.ts +1 -1
- 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 +254 -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 +4 -2
- package/dist/health/wiring-health.d.ts +8 -8
- package/dist/index.d.ts +6 -2
- package/dist/index.js +1736 -101
- package/dist/index.mjs +1625 -98
- 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 +29 -1
- 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-B0JG7-_F.mjs → sleep-Cr5YOk3m.mjs} +1335 -121
- package/dist/{sleep-az1qiFzK.js → sleep-i3kl-0Na.js} +1575 -121
- 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
|
|
@@ -14319,7 +14527,11 @@ var DeviceRegisterPayloadSchema = zod.z.object({
|
|
|
14319
14527
|
var DeviceRemovePayloadSchema = zod.z.object({ deviceId: zod.z.number() });
|
|
14320
14528
|
var DevicePersistConfigPayloadSchema = zod.z.object({
|
|
14321
14529
|
deviceId: zod.z.number(),
|
|
14322
|
-
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()
|
|
14323
14535
|
});
|
|
14324
14536
|
/** What a migration actually did, per switch. `unreachable` is a first-class
|
|
14325
14537
|
* answer: a camera that could not be asked is not a camera that was silenced. */
|
|
@@ -24706,8 +24918,23 @@ var RetrainMacroClassSchema = zod.z.enum([
|
|
|
24706
24918
|
]);
|
|
24707
24919
|
/** A subject to learn, or a phantom to unlearn (taught by OMISSION). */
|
|
24708
24920
|
var RetrainAnnotationKindSchema = zod.z.enum(["subject", "model_error"]);
|
|
24709
|
-
/**
|
|
24710
|
-
|
|
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
|
+
]);
|
|
24711
24938
|
/** Normalised `[0,1]` rectangle against the FULL frame — the canonical form. */
|
|
24712
24939
|
var RetrainBboxSchema = zod.z.object({
|
|
24713
24940
|
x: zod.z.number(),
|
|
@@ -24725,7 +24952,8 @@ var RetrainBboxSchema = zod.z.object({
|
|
|
24725
24952
|
*/
|
|
24726
24953
|
var RetrainAnnotationSchema = zod.z.object({
|
|
24727
24954
|
id: zod.z.string(),
|
|
24728
|
-
|
|
24955
|
+
/** The frame's track. Absent on a recording still, which has none. */
|
|
24956
|
+
trackId: zod.z.string().optional(),
|
|
24729
24957
|
deviceId: zod.z.number(),
|
|
24730
24958
|
/** The COPY in retrain storage — never the source track's media key. */
|
|
24731
24959
|
mediaKey: zod.z.string(),
|
|
@@ -24774,13 +25002,47 @@ var RetrainFrameCandidateSchema = zod.z.object({
|
|
|
24774
25002
|
* fail, whatever became of the original. */
|
|
24775
25003
|
copied: zod.z.boolean()
|
|
24776
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"]);
|
|
24777
25034
|
/** A frame the dataset OWNS: bytes copied at selection time. */
|
|
24778
25035
|
var RetrainFrameSchema = zod.z.object({
|
|
24779
25036
|
frameId: zod.z.string(),
|
|
24780
25037
|
deviceId: zod.z.number(),
|
|
24781
|
-
|
|
24782
|
-
/**
|
|
24783
|
-
|
|
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(),
|
|
24784
25046
|
sourceKind: MediaFileKindEnum,
|
|
24785
25047
|
sizeBytes: zod.z.number().int(),
|
|
24786
25048
|
width: zod.z.number().int(),
|
|
@@ -24791,7 +25053,12 @@ var RetrainFrameSchema = zod.z.object({
|
|
|
24791
25053
|
/** The operator's "every subject in this frame is boxed". Detector
|
|
24792
25054
|
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
24793
25055
|
* a false positive. */
|
|
24794
|
-
complete: zod.z.boolean()
|
|
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()
|
|
24795
25062
|
});
|
|
24796
25063
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
24797
25064
|
var RetrainCopyRefusalSchema = zod.z.enum([
|
|
@@ -24822,6 +25089,8 @@ var RetrainFrameListSchema = zod.z.object({
|
|
|
24822
25089
|
var RetrainExportFilterSchema = zod.z.object({
|
|
24823
25090
|
deviceIds: zod.z.array(zod.z.number()).optional(),
|
|
24824
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(),
|
|
24825
25094
|
batchId: zod.z.string().optional(),
|
|
24826
25095
|
/** Only frames the operator marked complete (all subjects boxed). */
|
|
24827
25096
|
completeOnly: zod.z.boolean().optional()
|
|
@@ -24886,6 +25155,109 @@ var RetrainAssistResultSchema = zod.z.discriminatedUnion("kind", [zod.z.object({
|
|
|
24886
25155
|
reason: zod.z.string(),
|
|
24887
25156
|
detail: zod.z.string().optional()
|
|
24888
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
|
+
})]);
|
|
24889
25261
|
/** The outcome of a lifecycle move owned by the retrain page. */
|
|
24890
25262
|
var RetrainTransitionResultSchema = zod.z.object({
|
|
24891
25263
|
trackId: zod.z.string(),
|
|
@@ -26121,7 +26493,7 @@ var pipelineAnalyticsCapability = {
|
|
|
26121
26493
|
* a frame leaves the dataset before export. */
|
|
26122
26494
|
deselectRetrainFrame: require_sleep.method(zod.z.object({
|
|
26123
26495
|
deviceId: zod.z.number(),
|
|
26124
|
-
trackId: zod.z.string(),
|
|
26496
|
+
trackId: zod.z.string().optional(),
|
|
26125
26497
|
frameId: zod.z.string()
|
|
26126
26498
|
}), zod.z.object({
|
|
26127
26499
|
removed: zod.z.boolean(),
|
|
@@ -26164,7 +26536,8 @@ var pipelineAnalyticsCapability = {
|
|
|
26164
26536
|
*/
|
|
26165
26537
|
proposeRetrainAnnotations: require_sleep.method(zod.z.object({
|
|
26166
26538
|
deviceId: zod.z.number(),
|
|
26167
|
-
|
|
26539
|
+
/** The frame's track, when it has one — checked against the frame. */
|
|
26540
|
+
trackId: zod.z.string().optional(),
|
|
26168
26541
|
frameId: zod.z.string(),
|
|
26169
26542
|
subject: RetrainAssistSubjectSchema,
|
|
26170
26543
|
/** Which node runs it. Absent ⇒ wherever an unowned call lands. */
|
|
@@ -26173,8 +26546,12 @@ var pipelineAnalyticsCapability = {
|
|
|
26173
26546
|
kind: "mutation",
|
|
26174
26547
|
auth: "admin"
|
|
26175
26548
|
}),
|
|
26176
|
-
/** Every annotation on a track,
|
|
26177
|
-
|
|
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(), {
|
|
26178
26555
|
kind: "query",
|
|
26179
26556
|
auth: "admin"
|
|
26180
26557
|
}),
|
|
@@ -26193,7 +26570,8 @@ var pipelineAnalyticsCapability = {
|
|
|
26193
26570
|
*/
|
|
26194
26571
|
saveRetrainAnnotations: require_sleep.method(zod.z.object({
|
|
26195
26572
|
deviceId: zod.z.number(),
|
|
26196
|
-
|
|
26573
|
+
/** The frame's track, when it has one — checked against the frame. */
|
|
26574
|
+
trackId: zod.z.string().optional(),
|
|
26197
26575
|
frameId: zod.z.string(),
|
|
26198
26576
|
annotations: zod.z.array(RetrainAnnotationDraftSchema)
|
|
26199
26577
|
}), zod.z.array(RetrainAnnotationSchema).readonly(), {
|
|
@@ -26256,7 +26634,7 @@ var pipelineAnalyticsCapability = {
|
|
|
26256
26634
|
*/
|
|
26257
26635
|
setRetrainFrameComplete: require_sleep.method(zod.z.object({
|
|
26258
26636
|
deviceId: zod.z.number(),
|
|
26259
|
-
trackId: zod.z.string(),
|
|
26637
|
+
trackId: zod.z.string().optional(),
|
|
26260
26638
|
frameId: zod.z.string(),
|
|
26261
26639
|
complete: zod.z.boolean()
|
|
26262
26640
|
}), RetrainFrameSchema, {
|
|
@@ -26279,6 +26657,115 @@ var pipelineAnalyticsCapability = {
|
|
|
26279
26657
|
auth: "admin",
|
|
26280
26658
|
timeoutMs: 60 * 6e4
|
|
26281
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(), {
|
|
26766
|
+
kind: "query",
|
|
26767
|
+
auth: "admin"
|
|
26768
|
+
}),
|
|
26282
26769
|
/**
|
|
26283
26770
|
* The media an EVENT owns.
|
|
26284
26771
|
*
|
|
@@ -27225,13 +27712,31 @@ var RecommendationReasonSchema = zod.z.discriminatedUnion("kind", [
|
|
|
27225
27712
|
zod.z.object({
|
|
27226
27713
|
kind: zod.z.literal("no-family-build"),
|
|
27227
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()
|
|
27228
27720
|
})
|
|
27229
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
|
+
})]);
|
|
27230
27733
|
var DeviceModelChoiceSchema = zod.z.object({
|
|
27231
27734
|
modelId: zod.z.string(),
|
|
27232
27735
|
p50Ms: zod.z.number(),
|
|
27233
27736
|
fps: zod.z.number(),
|
|
27234
27737
|
measured: zod.z.boolean(),
|
|
27738
|
+
/** Absent on a plan from before D791 — read as the table. */
|
|
27739
|
+
source: LatencySourceSchema.optional(),
|
|
27235
27740
|
/** Parallel sessions at the camera rate with the headroom kept free: ⌊fps × (1 − headroom) / camera fps⌋. */
|
|
27236
27741
|
capacitySessions: zod.z.number(),
|
|
27237
27742
|
personRecall: zod.z.number()
|
|
@@ -27242,6 +27747,8 @@ var DeviceRecommendationSchema = zod.z.object({
|
|
|
27242
27747
|
enabled: zod.z.boolean(),
|
|
27243
27748
|
available: zod.z.boolean(),
|
|
27244
27749
|
chosen: DeviceModelChoiceSchema.nullable(),
|
|
27750
|
+
/** Present when the device is kept as is: Apply writes nothing on it. */
|
|
27751
|
+
kept: KeptReasonSchema.optional(),
|
|
27245
27752
|
reasons: zod.z.array(RecommendationReasonSchema).readonly()
|
|
27246
27753
|
});
|
|
27247
27754
|
var NodeRecommendationSchema = zod.z.object({
|
|
@@ -27295,6 +27802,17 @@ var AutoTuneWarningSchema = zod.z.discriminatedUnion("kind", [
|
|
|
27295
27802
|
kind: zod.z.literal("coral-enabled"),
|
|
27296
27803
|
nodeId: zod.z.string(),
|
|
27297
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()
|
|
27298
27816
|
})
|
|
27299
27817
|
]);
|
|
27300
27818
|
var AutoTuneOptionsSchema = zod.z.object({
|
|
@@ -27487,13 +28005,14 @@ var SuggestSharesResultSchema = zod.z.object({
|
|
|
27487
28005
|
nodes: zod.z.array(SuggestedNodeShareSchema).readonly()
|
|
27488
28006
|
});
|
|
27489
28007
|
/**
|
|
27490
|
-
* Where the node and device shares come from (D750, D755).
|
|
27491
|
-
* - `
|
|
27492
|
-
*
|
|
27493
|
-
*
|
|
27494
|
-
*
|
|
27495
|
-
*
|
|
27496
|
-
*
|
|
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.
|
|
27497
28016
|
* - `manual` — the operator's stored sliders.
|
|
27498
28017
|
* Either way a node or device that cannot take sessions gives its share to
|
|
27499
28018
|
* the others in proportion; the stored values are never rewritten for that.
|
|
@@ -27503,7 +28022,7 @@ var ShareSourceSchema = zod.z.enum([
|
|
|
27503
28022
|
"benchmark",
|
|
27504
28023
|
"manual"
|
|
27505
28024
|
]);
|
|
27506
|
-
var DEFAULT_SHARE_SOURCE = "
|
|
28025
|
+
var DEFAULT_SHARE_SOURCE = "benchmark";
|
|
27507
28026
|
/** `hardware` or `benchmark`: the system computes the shares. */
|
|
27508
28027
|
function isAutomaticShareSource(source) {
|
|
27509
28028
|
return source !== "manual";
|
|
@@ -27517,6 +28036,7 @@ var SHARE_SOURCE_SETTING_KEY = "shareSource";
|
|
|
27517
28036
|
* D755 split it) reads as `hardware` — that is what it computed.
|
|
27518
28037
|
*/
|
|
27519
28038
|
function parseShareSource(value) {
|
|
28039
|
+
if (value === "auto") return "hardware";
|
|
27520
28040
|
const parsed = ShareSourceSchema.safeParse(value);
|
|
27521
28041
|
return parsed.success ? parsed.data : DEFAULT_SHARE_SOURCE;
|
|
27522
28042
|
}
|
|
@@ -27561,6 +28081,371 @@ var EffectiveSharesSchema = zod.z.object({
|
|
|
27561
28081
|
deviceWeights: zod.z.record(zod.z.string(), zod.z.record(zod.z.string(), zod.z.number()))
|
|
27562
28082
|
});
|
|
27563
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
|
|
27564
28449
|
//#region src/capabilities/schemas/orchestrator-metrics.ts
|
|
27565
28450
|
/** Shared Zod schemas for the runtime pipeline orchestrator metrics. */
|
|
27566
28451
|
var OrchestratorMetricsSchema = zod.z.object({
|
|
@@ -29078,7 +29963,30 @@ var pipelineRunnerCapability = {
|
|
|
29078
29963
|
releaseParkedTrackFrames: require_sleep.method(zod.z.object({
|
|
29079
29964
|
deviceId: zod.z.number(),
|
|
29080
29965
|
trackId: zod.z.string()
|
|
29081
|
-
}), 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
|
+
})
|
|
29082
29990
|
}
|
|
29083
29991
|
};
|
|
29084
29992
|
//#endregion
|
|
@@ -30054,6 +30962,51 @@ var pipelineOrchestratorCapability = {
|
|
|
30054
30962
|
kind: "mutation",
|
|
30055
30963
|
auth: "admin"
|
|
30056
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
|
+
}),
|
|
30057
31010
|
/** Read one camera's settings. Null when never touched (inherits agent defaults fully). */
|
|
30058
31011
|
getCameraSettings: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), CameraPipelineSettingsSchema.nullable()),
|
|
30059
31012
|
/** Set or clear the 3-state toggle for one (camera, addonId). Pass `enabled: null` to clear and revert to agent default. */
|
|
@@ -38162,6 +39115,9 @@ var CreateIntegrationInputSchema = zod.z.object({
|
|
|
38162
39115
|
enabled: zod.z.boolean().optional(),
|
|
38163
39116
|
info: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
|
|
38164
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(),
|
|
38165
39121
|
skipRestart: zod.z.boolean().optional()
|
|
38166
39122
|
});
|
|
38167
39123
|
var UpdateIntegrationInputSchema = zod.z.object({
|
|
@@ -38197,7 +39153,9 @@ var integrationsCapability = {
|
|
|
38197
39153
|
getSettings: require_sleep.method(zod.z.object({ id: zod.z.string() }), zod.z.record(zod.z.string(), zod.z.unknown()), { auth: "admin" }),
|
|
38198
39154
|
setSettings: require_sleep.method(zod.z.object({
|
|
38199
39155
|
id: zod.z.string(),
|
|
38200
|
-
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()
|
|
38201
39159
|
}), zod.z.object({ success: zod.z.boolean() }), {
|
|
38202
39160
|
kind: "mutation",
|
|
38203
39161
|
auth: "admin"
|
|
@@ -49891,7 +50849,8 @@ var BaseDevice = class {
|
|
|
49891
50849
|
this.role = options.role;
|
|
49892
50850
|
this.parentDeviceId = ctx.parentDeviceId;
|
|
49893
50851
|
const seedData = ctx.persistedConfig ?? {};
|
|
49894
|
-
|
|
50852
|
+
const declaredSecretPaths = require_sleep.collectZodSecretPaths(schema);
|
|
50853
|
+
this.config = DeviceConfig.fromSchema(schema, (data) => ctx.persistConfig(data, { secretConfigPaths: declaredSecretPaths }), seedData, ({ droppedKeys, issues }) => {
|
|
49895
50854
|
ctx.logger.warn("Device config recovery: dropping invalid persisted fields", {
|
|
49896
50855
|
tags: {
|
|
49897
50856
|
deviceId: ctx.id,
|
|
@@ -54395,6 +55354,90 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
54395
55354
|
addonId: null,
|
|
54396
55355
|
access: "create"
|
|
54397
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
|
+
},
|
|
54398
55441
|
"lawnMowerControl.dock": {
|
|
54399
55442
|
capName: "lawn-mower-control",
|
|
54400
55443
|
capScope: "device",
|
|
@@ -55769,6 +56812,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
55769
56812
|
addonId: null,
|
|
55770
56813
|
access: "create"
|
|
55771
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
|
+
},
|
|
55772
56827
|
"pipelineAnalytics.applyDeviceSettingsPatch": {
|
|
55773
56828
|
capName: "pipeline-analytics",
|
|
55774
56829
|
capScope: "device",
|
|
@@ -55817,12 +56872,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
55817
56872
|
addonId: null,
|
|
55818
56873
|
access: "view"
|
|
55819
56874
|
},
|
|
56875
|
+
"pipelineAnalytics.createRetrainCollection": {
|
|
56876
|
+
capName: "pipeline-analytics",
|
|
56877
|
+
capScope: "device",
|
|
56878
|
+
addonId: null,
|
|
56879
|
+
access: "create"
|
|
56880
|
+
},
|
|
55820
56881
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
55821
56882
|
capName: "pipeline-analytics",
|
|
55822
56883
|
capScope: "device",
|
|
55823
56884
|
addonId: null,
|
|
55824
56885
|
access: "delete"
|
|
55825
56886
|
},
|
|
56887
|
+
"pipelineAnalytics.deleteRetrainCollection": {
|
|
56888
|
+
capName: "pipeline-analytics",
|
|
56889
|
+
capScope: "device",
|
|
56890
|
+
addonId: null,
|
|
56891
|
+
access: "delete"
|
|
56892
|
+
},
|
|
55826
56893
|
"pipelineAnalytics.deleteTracks": {
|
|
55827
56894
|
capName: "pipeline-analytics",
|
|
55828
56895
|
capScope: "device",
|
|
@@ -56027,6 +57094,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56027
57094
|
addonId: null,
|
|
56028
57095
|
access: "view"
|
|
56029
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
|
+
},
|
|
56030
57115
|
"pipelineAnalytics.listRetrainFrames": {
|
|
56031
57116
|
capName: "pipeline-analytics",
|
|
56032
57117
|
capScope: "device",
|
|
@@ -56075,6 +57160,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56075
57160
|
addonId: null,
|
|
56076
57161
|
access: "create"
|
|
56077
57162
|
},
|
|
57163
|
+
"pipelineAnalytics.proposeRetrainAnnotationsWithLlm": {
|
|
57164
|
+
capName: "pipeline-analytics",
|
|
57165
|
+
capScope: "device",
|
|
57166
|
+
addonId: null,
|
|
57167
|
+
access: "create"
|
|
57168
|
+
},
|
|
56078
57169
|
"pipelineAnalytics.pruneEvents": {
|
|
56079
57170
|
capName: "pipeline-analytics",
|
|
56080
57171
|
capScope: "device",
|
|
@@ -56129,6 +57220,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56129
57220
|
addonId: null,
|
|
56130
57221
|
access: "create"
|
|
56131
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
|
+
},
|
|
56132
57235
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
56133
57236
|
capName: "pipeline-analytics",
|
|
56134
57237
|
capScope: "device",
|
|
@@ -56417,6 +57520,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56417
57520
|
addonId: null,
|
|
56418
57521
|
access: "view"
|
|
56419
57522
|
},
|
|
57523
|
+
"pipelineOrchestrator.abortNodeBenchmark": {
|
|
57524
|
+
capName: "pipeline-orchestrator",
|
|
57525
|
+
capScope: "system",
|
|
57526
|
+
addonId: null,
|
|
57527
|
+
access: "create"
|
|
57528
|
+
},
|
|
56420
57529
|
"pipelineOrchestrator.applyAutoTune": {
|
|
56421
57530
|
capName: "pipeline-orchestrator",
|
|
56422
57531
|
capScope: "system",
|
|
@@ -56441,6 +57550,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56441
57550
|
addonId: null,
|
|
56442
57551
|
access: "create"
|
|
56443
57552
|
},
|
|
57553
|
+
"pipelineOrchestrator.deleteNodeBenchmarkResult": {
|
|
57554
|
+
capName: "pipeline-orchestrator",
|
|
57555
|
+
capScope: "system",
|
|
57556
|
+
addonId: null,
|
|
57557
|
+
access: "delete"
|
|
57558
|
+
},
|
|
56444
57559
|
"pipelineOrchestrator.getAgentLoad": {
|
|
56445
57560
|
capName: "pipeline-orchestrator",
|
|
56446
57561
|
capScope: "system",
|
|
@@ -56549,6 +57664,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56549
57664
|
addonId: null,
|
|
56550
57665
|
access: "view"
|
|
56551
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
|
+
},
|
|
56552
57685
|
"pipelineOrchestrator.getNodeInferenceDevices": {
|
|
56553
57686
|
capName: "pipeline-orchestrator",
|
|
56554
57687
|
capScope: "system",
|
|
@@ -56591,6 +57724,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56591
57724
|
addonId: null,
|
|
56592
57725
|
access: "view"
|
|
56593
57726
|
},
|
|
57727
|
+
"pipelineOrchestrator.listNodeBenchmarkResults": {
|
|
57728
|
+
capName: "pipeline-orchestrator",
|
|
57729
|
+
capScope: "system",
|
|
57730
|
+
addonId: null,
|
|
57731
|
+
access: "view"
|
|
57732
|
+
},
|
|
56594
57733
|
"pipelineOrchestrator.pauseForStorageMigration": {
|
|
56595
57734
|
capName: "pipeline-orchestrator",
|
|
56596
57735
|
capScope: "system",
|
|
@@ -56735,6 +57874,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56735
57874
|
addonId: null,
|
|
56736
57875
|
access: "create"
|
|
56737
57876
|
},
|
|
57877
|
+
"pipelineOrchestrator.startNodeBenchmark": {
|
|
57878
|
+
capName: "pipeline-orchestrator",
|
|
57879
|
+
capScope: "system",
|
|
57880
|
+
addonId: null,
|
|
57881
|
+
access: "create"
|
|
57882
|
+
},
|
|
56738
57883
|
"pipelineOrchestrator.suggestShares": {
|
|
56739
57884
|
capName: "pipeline-orchestrator",
|
|
56740
57885
|
capScope: "system",
|
|
@@ -56753,6 +57898,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56753
57898
|
addonId: null,
|
|
56754
57899
|
access: "create"
|
|
56755
57900
|
},
|
|
57901
|
+
"pipelineRunner.abortNodeBench": {
|
|
57902
|
+
capName: "pipeline-runner",
|
|
57903
|
+
capScope: "system",
|
|
57904
|
+
addonId: null,
|
|
57905
|
+
access: "create"
|
|
57906
|
+
},
|
|
56756
57907
|
"pipelineRunner.attachCamera": {
|
|
56757
57908
|
capName: "pipeline-runner",
|
|
56758
57909
|
capScope: "system",
|
|
@@ -56801,6 +57952,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56801
57952
|
addonId: null,
|
|
56802
57953
|
access: "view"
|
|
56803
57954
|
},
|
|
57955
|
+
"pipelineRunner.getNodeBenchStatus": {
|
|
57956
|
+
capName: "pipeline-runner",
|
|
57957
|
+
capScope: "system",
|
|
57958
|
+
addonId: null,
|
|
57959
|
+
access: "view"
|
|
57960
|
+
},
|
|
56804
57961
|
"pipelineRunner.getParkedTrackFrame": {
|
|
56805
57962
|
capName: "pipeline-runner",
|
|
56806
57963
|
capScope: "system",
|
|
@@ -56843,6 +58000,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
56843
58000
|
addonId: null,
|
|
56844
58001
|
access: "create"
|
|
56845
58002
|
},
|
|
58003
|
+
"pipelineRunner.startNodeBench": {
|
|
58004
|
+
capName: "pipeline-runner",
|
|
58005
|
+
capScope: "system",
|
|
58006
|
+
addonId: null,
|
|
58007
|
+
access: "create"
|
|
58008
|
+
},
|
|
56846
58009
|
"plateGallery.assignPlate": {
|
|
56847
58010
|
capName: "plate-gallery",
|
|
56848
58011
|
capScope: "system",
|
|
@@ -59189,6 +60352,8 @@ var KNOWN_CAP_NAMES = [
|
|
|
59189
60352
|
"image-settings",
|
|
59190
60353
|
"integrations",
|
|
59191
60354
|
"intercom",
|
|
60355
|
+
"keychain",
|
|
60356
|
+
"keychain-admin",
|
|
59192
60357
|
"lawn-mower-control",
|
|
59193
60358
|
"llm",
|
|
59194
60359
|
"llm-runtime",
|
|
@@ -59406,6 +60571,8 @@ var SYSTEM_CAP_NAMES = [
|
|
|
59406
60571
|
"failure-contribution",
|
|
59407
60572
|
"filesystem-browse",
|
|
59408
60573
|
"integrations",
|
|
60574
|
+
"keychain",
|
|
60575
|
+
"keychain-admin",
|
|
59409
60576
|
"llm",
|
|
59410
60577
|
"llm-runtime",
|
|
59411
60578
|
"load-contribution",
|
|
@@ -62875,6 +64042,8 @@ var CAPABILITY_NAMES = {
|
|
|
62875
64042
|
imageSettings: "image-settings",
|
|
62876
64043
|
integrations: "integrations",
|
|
62877
64044
|
intercom: "intercom",
|
|
64045
|
+
keychain: "keychain",
|
|
64046
|
+
keychainAdmin: "keychain-admin",
|
|
62878
64047
|
lawnMowerControl: "lawn-mower-control",
|
|
62879
64048
|
llm: "llm",
|
|
62880
64049
|
llmRuntime: "llm-runtime",
|
|
@@ -63268,6 +64437,14 @@ var CAPABILITY_ROUTER_KEYS = [
|
|
|
63268
64437
|
key: "intercom",
|
|
63269
64438
|
name: "intercom"
|
|
63270
64439
|
},
|
|
64440
|
+
{
|
|
64441
|
+
key: "keychain",
|
|
64442
|
+
name: "keychain"
|
|
64443
|
+
},
|
|
64444
|
+
{
|
|
64445
|
+
key: "keychainAdmin",
|
|
64446
|
+
name: "keychain-admin"
|
|
64447
|
+
},
|
|
63271
64448
|
{
|
|
63272
64449
|
key: "lawnMowerControl",
|
|
63273
64450
|
name: "lawn-mower-control"
|
|
@@ -63714,6 +64891,8 @@ var ALL_CAPABILITY_DEFINITIONS = [
|
|
|
63714
64891
|
imageSettingsCapability,
|
|
63715
64892
|
integrationsCapability,
|
|
63716
64893
|
intercomCapability,
|
|
64894
|
+
keychainCapability,
|
|
64895
|
+
keychainAdminCapability,
|
|
63717
64896
|
lawnMowerControlCapability,
|
|
63718
64897
|
llmCapability,
|
|
63719
64898
|
llmRuntimeCapability,
|
|
@@ -65142,6 +66321,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
65142
66321
|
form: "single",
|
|
65143
66322
|
optional: false
|
|
65144
66323
|
}],
|
|
66324
|
+
"pipelineAnalytics.addRetrainFrameFromRecording": [{
|
|
66325
|
+
name: "deviceId",
|
|
66326
|
+
form: "single",
|
|
66327
|
+
optional: false
|
|
66328
|
+
}],
|
|
65145
66329
|
"pipelineAnalytics.applyDeviceSettingsPatch": [{
|
|
65146
66330
|
name: "deviceId",
|
|
65147
66331
|
form: "single",
|
|
@@ -65332,6 +66516,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
65332
66516
|
form: "single",
|
|
65333
66517
|
optional: false
|
|
65334
66518
|
}],
|
|
66519
|
+
"pipelineAnalytics.proposeRetrainAnnotationsWithLlm": [{
|
|
66520
|
+
name: "deviceId",
|
|
66521
|
+
form: "single",
|
|
66522
|
+
optional: false
|
|
66523
|
+
}],
|
|
65335
66524
|
"pipelineAnalytics.pruneEventsBefore": [{
|
|
65336
66525
|
name: "deviceId",
|
|
65337
66526
|
form: "single",
|
|
@@ -67297,6 +68486,17 @@ function createSystemProxy(api) {
|
|
|
67297
68486
|
getAvailableTypes: (input) => dispatch("integrations", "getAvailableTypes", "query", input),
|
|
67298
68487
|
testConnection: (input) => dispatch("integrations", "testConnection", "mutation", input)
|
|
67299
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
|
+
},
|
|
67300
68500
|
llm: {
|
|
67301
68501
|
generate: (input) => dispatch("llm", "generate", "mutation", input),
|
|
67302
68502
|
generateVision: (input) => dispatch("llm", "generateVision", "mutation", input),
|
|
@@ -67516,6 +68716,13 @@ function createSystemProxy(api) {
|
|
|
67516
68716
|
suggestShares: (input) => dispatch("pipelineOrchestrator", "suggestShares", "query", input),
|
|
67517
68717
|
getEffectiveShares: (input) => dispatch("pipelineOrchestrator", "getEffectiveShares", "query", input),
|
|
67518
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),
|
|
67519
68726
|
getCameraStatuses: (input) => dispatch("pipelineOrchestrator", "getCameraStatuses", "query", input),
|
|
67520
68727
|
setCameraSensors: (input) => dispatch("pipelineOrchestrator", "setCameraSensors", "mutation", input),
|
|
67521
68728
|
reconcileFromDisk: (input) => dispatch("pipelineOrchestrator", "reconcileFromDisk", "mutation", input),
|
|
@@ -67529,7 +68736,10 @@ function createSystemProxy(api) {
|
|
|
67529
68736
|
getAllCameraMetrics: (input) => dispatch("pipelineRunner", "getAllCameraMetrics", "query", input),
|
|
67530
68737
|
getLocalCameras: (input) => dispatch("pipelineRunner", "getLocalCameras", "query", input),
|
|
67531
68738
|
getNativeCrop: (input) => dispatch("pipelineRunner", "getNativeCrop", "query", input),
|
|
67532
|
-
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)
|
|
67533
68743
|
},
|
|
67534
68744
|
plateGallery: {
|
|
67535
68745
|
getPlateMedia: (input) => dispatch("plateGallery", "getPlateMedia", "query", input),
|
|
@@ -73116,6 +74326,22 @@ function capacitySessionsOf(fps, headroom, cameraFps) {
|
|
|
73116
74326
|
if (!(fps > 0) || !(cameraFps > 0)) return 0;
|
|
73117
74327
|
return Math.max(0, Math.floor(fps * (1 - headroom) / cameraFps + 1e-9));
|
|
73118
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
|
+
}
|
|
73119
74345
|
function round(value, digits = 3) {
|
|
73120
74346
|
const f = 10 ** digits;
|
|
73121
74347
|
return Math.round(value * f) / f;
|
|
@@ -73188,6 +74414,7 @@ function choiceOn(ctx, modelId, sizing) {
|
|
|
73188
74414
|
p50Ms: cell.p50Ms,
|
|
73189
74415
|
fps: cell.fps,
|
|
73190
74416
|
measured: cell.measured,
|
|
74417
|
+
source: cell.source ?? { kind: "table" },
|
|
73191
74418
|
capacitySessions: sessionsOn(cell, sizing),
|
|
73192
74419
|
personRecall: DETECTOR_ACCURACY[modelId]?.personRecall ?? 0
|
|
73193
74420
|
};
|
|
@@ -73236,11 +74463,14 @@ function recommendNode(input) {
|
|
|
73236
74463
|
if (node.hardware === null) return skippedNode(node, { kind: "no-hardware-facts" }, null);
|
|
73237
74464
|
const hardware = node.hardware;
|
|
73238
74465
|
const { hardwareClass, cpuModel } = classifyInferenceHardware(hardware);
|
|
73239
|
-
const
|
|
73240
|
-
|
|
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, {
|
|
73241
74470
|
kind: "no-measured-data",
|
|
73242
74471
|
hardwareClass
|
|
73243
74472
|
}, hardwareClass);
|
|
74473
|
+
const classTable = knownTable ?? {};
|
|
73244
74474
|
const devices = node.devices.toSorted((a, b) => a.key.localeCompare(b.key));
|
|
73245
74475
|
const contexts = /* @__PURE__ */ new Map();
|
|
73246
74476
|
const early = /* @__PURE__ */ new Map();
|
|
@@ -73258,7 +74488,7 @@ function recommendNode(input) {
|
|
|
73258
74488
|
early.set(device.key, [{ kind: "device-unavailable" }]);
|
|
73259
74489
|
continue;
|
|
73260
74490
|
}
|
|
73261
|
-
const column = accelerator === null ? void 0 : classTable[accelerator];
|
|
74491
|
+
const column = accelerator === null ? void 0 : overlayMeasured(classTable[accelerator], measured[device.key]);
|
|
73262
74492
|
if (accelerator === null || column === void 0) {
|
|
73263
74493
|
early.set(device.key, [{
|
|
73264
74494
|
kind: "no-family-build",
|
|
@@ -73273,13 +74503,28 @@ function recommendNode(input) {
|
|
|
73273
74503
|
});
|
|
73274
74504
|
}
|
|
73275
74505
|
const isCpu = (a) => a === "x86-cpu" || a === "arm-cpu";
|
|
73276
|
-
const
|
|
73277
|
-
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);
|
|
73278
74522
|
const chosenByKey = /* @__PURE__ */ new Map();
|
|
73279
74523
|
const reasonsByKey = /* @__PURE__ */ new Map();
|
|
73280
74524
|
const nodeReasons = [];
|
|
73281
74525
|
let acceleratorModelId = null;
|
|
73282
74526
|
const groupPick = accelerators.length > 0 ? pickForGroup(accelerators, node.formatsByModel, sizing) : null;
|
|
74527
|
+
if (acceleratorKept !== null) nodeReasons.push(acceleratorKept);
|
|
73283
74528
|
if (groupPick !== null) {
|
|
73284
74529
|
acceleratorModelId = groupPick.modelId;
|
|
73285
74530
|
nodeReasons.push(...groupPick.reasons);
|
|
@@ -73323,7 +74568,8 @@ function recommendNode(input) {
|
|
|
73323
74568
|
enabled: device.enabled,
|
|
73324
74569
|
available: device.available,
|
|
73325
74570
|
chosen: chosenByKey.get(device.key) ?? null,
|
|
73326
|
-
|
|
74571
|
+
...keptByKey.has(device.key) ? { kept: "custom-pin" } : {},
|
|
74572
|
+
reasons: early.get(device.key) ?? keptByKey.get(device.key) ?? reasonsByKey.get(device.key) ?? []
|
|
73327
74573
|
})),
|
|
73328
74574
|
reasons: nodeReasons
|
|
73329
74575
|
};
|
|
@@ -73573,6 +74819,287 @@ function computeCapacityShares(input) {
|
|
|
73573
74819
|
};
|
|
73574
74820
|
}
|
|
73575
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
|
|
73576
75103
|
//#region src/pipeline/root-face-crop.ts
|
|
73577
75104
|
/** Side of the square, as a multiple of the face box's longer side. */
|
|
73578
75105
|
var ROOT_FACE_REFINE_SCALE = 1.6;
|
|
@@ -75723,6 +77250,7 @@ exports.AcceleratorKindSchema = AcceleratorKindSchema;
|
|
|
75723
77250
|
exports.AccessoriesStatusSchema = AccessoriesStatusSchema;
|
|
75724
77251
|
exports.AccessoryKind = AccessoryKind;
|
|
75725
77252
|
exports.AddBrokerInputSchema = AddBrokerInputSchema;
|
|
77253
|
+
exports.AddRetrainFrameFromRecordingResultSchema = AddRetrainFrameFromRecordingResultSchema;
|
|
75726
77254
|
exports.AddonAutoUpdateSchema = AddonAutoUpdateSchema;
|
|
75727
77255
|
exports.AddonListItemSchema = AddonListItemSchema;
|
|
75728
77256
|
exports.AddonPageDeclarationSchema = AddonPageDeclarationSchema;
|
|
@@ -75804,6 +77332,7 @@ exports.BASE_DEVICE_CAPS = BASE_DEVICE_CAPS;
|
|
|
75804
77332
|
exports.BASE_LIVE_EGRESS_PROFILE = BASE_LIVE_EGRESS_PROFILE;
|
|
75805
77333
|
exports.BATTERY_DEVICE_PROFILE = BATTERY_DEVICE_PROFILE;
|
|
75806
77334
|
exports.BATTERY_UNREACHABLE_AFTER_MS = BATTERY_UNREACHABLE_AFTER_MS;
|
|
77335
|
+
exports.BENCH_ROOT_STEP_ID = BENCH_ROOT_STEP_ID;
|
|
75807
77336
|
exports.BIRTH_DECISION_DEFAULT_LIMIT = BIRTH_DECISION_DEFAULT_LIMIT;
|
|
75808
77337
|
exports.BOOT_RECOVERY_BACKOFF_MS = require_sleep.BOOT_RECOVERY_BACKOFF_MS;
|
|
75809
77338
|
exports.BUILTIN_RESULT_KINDS = BUILTIN_RESULT_KINDS;
|
|
@@ -76112,6 +77641,7 @@ exports.DEVICE_CAP_NAMES = DEVICE_CAP_NAMES;
|
|
|
76112
77641
|
exports.DEVICE_CHILDREN_BATCH_MAX = require_sleep.DEVICE_CHILDREN_BATCH_MAX;
|
|
76113
77642
|
exports.DEVICE_DO_ACTIONS = DEVICE_DO_ACTIONS;
|
|
76114
77643
|
exports.DEVICE_PROFILES = DEVICE_PROFILES;
|
|
77644
|
+
exports.DEVICE_RAMP = DEVICE_RAMP;
|
|
76115
77645
|
exports.DEVICE_RESTORE_RETRY_CONCURRENCY = DEVICE_RESTORE_RETRY_CONCURRENCY;
|
|
76116
77646
|
exports.DEVICE_RESTORE_RETRY_DELAYS_MS = DEVICE_RESTORE_RETRY_DELAYS_MS;
|
|
76117
77647
|
exports.DEVICE_SCOPED_CAPS = require_sleep.DEVICE_SCOPED_CAPS;
|
|
@@ -76334,8 +77864,24 @@ exports.IntegrationLiteSchema = IntegrationLiteSchema;
|
|
|
76334
77864
|
exports.IntegrationWithStateSchema = IntegrationWithStateSchema;
|
|
76335
77865
|
exports.IntercomAbilitySchema = IntercomAbilitySchema;
|
|
76336
77866
|
exports.IntercomStatusSchema = IntercomStatusSchema;
|
|
77867
|
+
exports.KEYCHAIN_MAX_REFS_PER_CALL = KEYCHAIN_MAX_REFS_PER_CALL;
|
|
77868
|
+
exports.KEYCHAIN_RESET_CONFIRMATION = KEYCHAIN_RESET_CONFIRMATION;
|
|
76337
77869
|
exports.KNOWN_CAP_NAMES = KNOWN_CAP_NAMES;
|
|
77870
|
+
exports.KeptReasonSchema = KeptReasonSchema;
|
|
76338
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;
|
|
76339
77885
|
exports.LABEL_SUPPLY_MACRO = LABEL_SUPPLY_MACRO;
|
|
76340
77886
|
exports.LABEL_SUPPLY_STEP_IDS = LABEL_SUPPLY_STEP_IDS;
|
|
76341
77887
|
exports.LABEL_SUPPLY_VOCABULARIES = LABEL_SUPPLY_VOCABULARIES;
|
|
@@ -76353,6 +77899,7 @@ exports.LTS_SCOPE_CLASS_SEPARATOR = LTS_SCOPE_CLASS_SEPARATOR;
|
|
|
76353
77899
|
exports.LabelAttributionSchema = LabelAttributionSchema;
|
|
76354
77900
|
exports.LabelDefinitionSchema = LabelDefinitionSchema;
|
|
76355
77901
|
exports.LabelTierSchema = LabelTierSchema;
|
|
77902
|
+
exports.LatencySourceSchema = LatencySourceSchema;
|
|
76356
77903
|
exports.LawnMowerActivitySchema = LawnMowerActivitySchema;
|
|
76357
77904
|
exports.LawnMowerControlStatusSchema = LawnMowerControlStatusSchema;
|
|
76358
77905
|
exports.LedgerWalkDeviceReportSchema = LedgerWalkDeviceReportSchema;
|
|
@@ -76365,6 +77912,7 @@ exports.LegacyStorageLocationDefaultSchema = LegacyStorageLocationDefaultSchema;
|
|
|
76365
77912
|
exports.LinkedDeviceSchema = LinkedDeviceSchema;
|
|
76366
77913
|
exports.LinkedDevicesModeSchema = LinkedDevicesModeSchema;
|
|
76367
77914
|
exports.LinkedDevicesSlotValueSchema = LinkedDevicesSlotValueSchema;
|
|
77915
|
+
exports.ListNodeBenchmarkResultsInputSchema = ListNodeBenchmarkResultsInputSchema;
|
|
76368
77916
|
exports.ListTrackRelationsInputSchema = ListTrackRelationsInputSchema;
|
|
76369
77917
|
exports.ListTrackRelationsResultSchema = ListTrackRelationsResultSchema;
|
|
76370
77918
|
exports.LlmDefaultSchema = LlmDefaultSchema;
|
|
@@ -76452,6 +78000,7 @@ exports.MEDIA_PRESENCE_OWNER_KINDS = MEDIA_PRESENCE_OWNER_KINDS;
|
|
|
76452
78000
|
exports.METHOD_ACCESS_MAP = METHOD_ACCESS_MAP;
|
|
76453
78001
|
exports.METHOD_DEVICE_SELECTORS = METHOD_DEVICE_SELECTORS;
|
|
76454
78002
|
exports.MINUTES_PER_DAY = MINUTES_PER_DAY;
|
|
78003
|
+
exports.MIN_SCRUBBED_LENGTH = require_sleep.MIN_SCRUBBED_LENGTH;
|
|
76455
78004
|
exports.MIN_SESSIONS_PER_DEVICE_RANGE = MIN_SESSIONS_PER_DEVICE_RANGE;
|
|
76456
78005
|
exports.MODEL_FORMATS = MODEL_FORMATS;
|
|
76457
78006
|
exports.MODEL_HOSTING = MODEL_HOSTING;
|
|
@@ -76615,6 +78164,7 @@ exports.NC_TEMPLATE_VARS = NC_TEMPLATE_VARS;
|
|
|
76615
78164
|
exports.NC_UPDATE_EVENT_PACKAGE_NAMES = NC_UPDATE_EVENT_PACKAGE_NAMES;
|
|
76616
78165
|
exports.NETWORK_LINK_TYPES = NETWORK_LINK_TYPES;
|
|
76617
78166
|
exports.NETWORK_LINK_UNKNOWN = NETWORK_LINK_UNKNOWN;
|
|
78167
|
+
exports.NODE_BENCHMARK_DEFAULTS = NODE_BENCHMARK_DEFAULTS;
|
|
76618
78168
|
exports.NO_MEASURED_CAPACITY = NO_MEASURED_CAPACITY;
|
|
76619
78169
|
exports.NativeCropBboxSchema = NativeCropBboxSchema;
|
|
76620
78170
|
exports.NativeCropRefSchema = NativeCropRefSchema;
|
|
@@ -76736,6 +78286,33 @@ exports.NetworkAccessStatusSchema = NetworkAccessStatusSchema;
|
|
|
76736
78286
|
exports.NetworkAddressSchema = NetworkAddressSchema;
|
|
76737
78287
|
exports.NetworkEndpointSchema = NetworkEndpointSchema;
|
|
76738
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;
|
|
76739
78316
|
exports.NodeDeviceChangeSchema = NodeDeviceChangeSchema;
|
|
76740
78317
|
exports.NodeDirectoryEntrySchema = NodeDirectoryEntrySchema;
|
|
76741
78318
|
exports.NodeDirectorySchema = NodeDirectorySchema;
|
|
@@ -76796,6 +78373,7 @@ exports.PET_FEEDER_MANUAL_FEED_MIN = PET_FEEDER_MANUAL_FEED_MIN;
|
|
|
76796
78373
|
exports.PIPELINE_ANALYTICS_CAP_NAME = PIPELINE_ANALYTICS_CAP_NAME;
|
|
76797
78374
|
exports.PIPELINE_FLOW_CAPABILITY_NAMES = PIPELINE_FLOW_CAPABILITY_NAMES;
|
|
76798
78375
|
exports.PIPELINE_OWNER_CAPABILITY_NAMES = PIPELINE_OWNER_CAPABILITY_NAMES;
|
|
78376
|
+
exports.PIPELINE_RAMP = PIPELINE_RAMP;
|
|
76799
78377
|
exports.PRIVACY_MASK_CAP_NAME = PRIVACY_MASK_CAP_NAME;
|
|
76800
78378
|
exports.PROVIDER_KIND_CAP_NAMES = PROVIDER_KIND_CAP_NAMES;
|
|
76801
78379
|
exports.PROVIDER_PIN_FIELD = require_sleep.PROVIDER_PIN_FIELD;
|
|
@@ -76872,11 +78450,12 @@ exports.RECORDING_EXPORT_MAX_READ_BYTES = RECORDING_EXPORT_MAX_READ_BYTES;
|
|
|
76872
78450
|
exports.RECORDING_SOURCE_CAMSTACK = RECORDING_SOURCE_CAMSTACK;
|
|
76873
78451
|
exports.RECORDING_SOURCE_CAMSTACK_ADDON = RECORDING_SOURCE_CAMSTACK_ADDON;
|
|
76874
78452
|
exports.RECORDING_TIMELINE_BATCH_MAX = RECORDING_TIMELINE_BATCH_MAX;
|
|
76875
|
-
exports.REDACTED_SECRET = REDACTED_SECRET;
|
|
78453
|
+
exports.REDACTED_SECRET = require_sleep.REDACTED_SECRET;
|
|
76876
78454
|
exports.REMOVED_MODEL_IDS = REMOVED_MODEL_IDS;
|
|
76877
78455
|
exports.RESERVED_BINDING_NAMES = require_composition.RESERVED_BINDING_NAMES;
|
|
76878
78456
|
exports.RESERVED_COLLECTION_SOURCES = RESERVED_COLLECTION_SOURCES;
|
|
76879
78457
|
exports.RESTORED_CAP_NAMES = RESTORED_CAP_NAMES;
|
|
78458
|
+
exports.REVALIDATE_AFTER_MS = require_sleep.REVALIDATE_AFTER_MS;
|
|
76880
78459
|
exports.ROOM_EXAMPLE_MOTION_SOURCES = ROOM_EXAMPLE_MOTION_SOURCES;
|
|
76881
78460
|
exports.ROOM_EXAMPLE_TEMPERATURE_SOURCES = ROOM_EXAMPLE_TEMPERATURE_SOURCES;
|
|
76882
78461
|
exports.ROOM_OCCUPANCY_WINDOW_MS = ROOM_OCCUPANCY_WINDOW_MS;
|
|
@@ -76960,16 +78539,25 @@ exports.RetrainAnnotationSchema = RetrainAnnotationSchema;
|
|
|
76960
78539
|
exports.RetrainAnnotationSourceSchema = RetrainAnnotationSourceSchema;
|
|
76961
78540
|
exports.RetrainArchiveResultSchema = RetrainArchiveResultSchema;
|
|
76962
78541
|
exports.RetrainArchiveTargetSchema = RetrainArchiveTargetSchema;
|
|
78542
|
+
exports.RetrainAssistProfileSchema = RetrainAssistProfileSchema;
|
|
76963
78543
|
exports.RetrainAssistResultSchema = RetrainAssistResultSchema;
|
|
76964
78544
|
exports.RetrainAssistSubjectSchema = RetrainAssistSubjectSchema;
|
|
78545
|
+
exports.RetrainCollectionCreateResultSchema = RetrainCollectionCreateResultSchema;
|
|
78546
|
+
exports.RetrainCollectionRenameResultSchema = RetrainCollectionRenameResultSchema;
|
|
78547
|
+
exports.RetrainCollectionSchema = RetrainCollectionSchema;
|
|
76965
78548
|
exports.RetrainCopyRefusalSchema = RetrainCopyRefusalSchema;
|
|
76966
78549
|
exports.RetrainExportFilterSchema = RetrainExportFilterSchema;
|
|
76967
78550
|
exports.RetrainExportLayoutSchema = RetrainExportLayoutSchema;
|
|
76968
78551
|
exports.RetrainFrameCandidateSchema = RetrainFrameCandidateSchema;
|
|
76969
78552
|
exports.RetrainFrameListSchema = RetrainFrameListSchema;
|
|
78553
|
+
exports.RetrainFrameOriginSchema = RetrainFrameOriginSchema;
|
|
76970
78554
|
exports.RetrainFrameSchema = RetrainFrameSchema;
|
|
76971
78555
|
exports.RetrainFrameSelectionSchema = RetrainFrameSelectionSchema;
|
|
78556
|
+
exports.RetrainLlmAssistResultSchema = RetrainLlmAssistResultSchema;
|
|
78557
|
+
exports.RetrainLlmProposalSchema = RetrainLlmProposalSchema;
|
|
78558
|
+
exports.RetrainLlmReviewSchema = RetrainLlmReviewSchema;
|
|
76972
78559
|
exports.RetrainMacroClassSchema = RetrainMacroClassSchema;
|
|
78560
|
+
exports.RetrainPipelineBoxSchema = RetrainPipelineBoxSchema;
|
|
76973
78561
|
exports.RetrainStatusSchema = RetrainStatusSchema;
|
|
76974
78562
|
exports.RetrainTrackSchema = RetrainTrackSchema;
|
|
76975
78563
|
exports.RetrainTransitionResultSchema = RetrainTransitionResultSchema;
|
|
@@ -76995,7 +78583,9 @@ exports.SCENE_DEFAULT_UNCOVERED_POLICY = SCENE_DEFAULT_UNCOVERED_POLICY;
|
|
|
76995
78583
|
exports.SCENE_DIVERGED = SCENE_DIVERGED;
|
|
76996
78584
|
exports.SCENE_RESET_RECAPTURES = SCENE_RESET_RECAPTURES;
|
|
76997
78585
|
exports.SCOPE_PRESETS = SCOPE_PRESETS;
|
|
78586
|
+
exports.SECRET_CLEAR = require_sleep.SECRET_CLEAR;
|
|
76998
78587
|
exports.SECRET_META = require_sleep.SECRET_META;
|
|
78588
|
+
exports.SECRET_REF_SCHEME = require_sleep.SECRET_REF_SCHEME;
|
|
76999
78589
|
exports.SENSOR_FEATURES = SENSOR_FEATURES;
|
|
77000
78590
|
exports.SENSOR_MAP = SENSOR_MAP;
|
|
77001
78591
|
exports.SESSION_PLACEMENT_SETTING_KEY = SESSION_PLACEMENT_SETTING_KEY;
|
|
@@ -77302,6 +78892,7 @@ exports.applyModeDeviceListEdit = applyModeDeviceListEdit;
|
|
|
77302
78892
|
exports.applyModelBoundSettings = applyModelBoundSettings;
|
|
77303
78893
|
exports.applyNonBlockingEdit = applyNonBlockingEdit;
|
|
77304
78894
|
exports.applySecureOnArmEdit = applySecureOnArmEdit;
|
|
78895
|
+
exports.arrayItemFieldPath = require_sleep.arrayItemFieldPath;
|
|
77305
78896
|
exports.asBoolean = require_sleep.asBoolean;
|
|
77306
78897
|
exports.asJsonArray = require_sleep.asJsonArray;
|
|
77307
78898
|
exports.asJsonObject = require_sleep.asJsonObject;
|
|
@@ -77333,6 +78924,7 @@ exports.brightnessCapability = brightnessCapability;
|
|
|
77333
78924
|
exports.brokerCapability = brokerCapability;
|
|
77334
78925
|
exports.buildAddonRouteProvider = buildAddonRouteProvider;
|
|
77335
78926
|
exports.buildAudioArgs = require_composition.buildAudioArgs;
|
|
78927
|
+
exports.buildBenchStepTree = buildBenchStepTree;
|
|
77336
78928
|
exports.buildCapabilityLookup = buildCapabilityLookup;
|
|
77337
78929
|
exports.buildDeviceAdminUrl = buildDeviceAdminUrl;
|
|
77338
78930
|
exports.buildDoorbellCompositionFeature = buildDoorbellCompositionFeature;
|
|
@@ -77343,6 +78935,7 @@ exports.buildInputArgs = require_composition.buildInputArgs;
|
|
|
77343
78935
|
exports.buildModelVariantGroups = buildModelVariantGroups;
|
|
77344
78936
|
exports.buildNcTaxonomy = buildNcTaxonomy;
|
|
77345
78937
|
exports.buildRoleScopes = buildRoleScopes;
|
|
78938
|
+
exports.buildSecretRef = require_sleep.buildSecretRef;
|
|
77346
78939
|
exports.buildStreamParamsConfigSchema = buildStreamParamsConfigSchema;
|
|
77347
78940
|
exports.buildVideoArgs = require_composition.buildVideoArgs;
|
|
77348
78941
|
exports.buildViewerLink = buildViewerLink;
|
|
@@ -77363,9 +78956,12 @@ exports.carbonMonoxideCapability = carbonMonoxideCapability;
|
|
|
77363
78956
|
exports.cellsToRects = cellsToRects;
|
|
77364
78957
|
exports.checkRoleAddress = checkRoleAddress;
|
|
77365
78958
|
exports.classifyBearerPrincipal = classifyBearerPrincipal;
|
|
78959
|
+
exports.classifyCamerasForBenchmark = classifyCamerasForBenchmark;
|
|
77366
78960
|
exports.classifyInferenceHardware = classifyInferenceHardware;
|
|
78961
|
+
exports.classifySecretWrite = require_sleep.classifySecretWrite;
|
|
77367
78962
|
exports.classifyStream = classifyStream;
|
|
77368
78963
|
exports.classifyStreams = classifyStreams;
|
|
78964
|
+
exports.clearKnownSecrets = require_sleep.clearKnownSecrets;
|
|
77369
78965
|
exports.clearModelBoundOverrides = clearModelBoundOverrides;
|
|
77370
78966
|
exports.clearModelBoundSetting = clearModelBoundSetting;
|
|
77371
78967
|
exports.climateControlCapability = climateControlCapability;
|
|
@@ -77380,8 +78976,10 @@ exports.clusterStepSettingKey = clusterStepSettingKey;
|
|
|
77380
78976
|
exports.codecIsAccepted = codecIsAccepted;
|
|
77381
78977
|
exports.collectHydratedFieldEntries = require_sleep.collectHydratedFieldEntries;
|
|
77382
78978
|
exports.collectHydratedFieldValues = require_sleep.collectHydratedFieldValues;
|
|
78979
|
+
exports.collectKeychainStoredKeys = require_sleep.collectKeychainStoredKeys;
|
|
77383
78980
|
exports.collectModelBoundKeys = collectModelBoundKeys;
|
|
77384
|
-
exports.collectSecretConfigKeys = collectSecretConfigKeys;
|
|
78981
|
+
exports.collectSecretConfigKeys = require_sleep.collectSecretConfigKeys;
|
|
78982
|
+
exports.collectSecretMarkerRefs = require_sleep.collectSecretMarkerRefs;
|
|
77385
78983
|
exports.collectZodSecretPaths = require_sleep.collectZodSecretPaths;
|
|
77386
78984
|
exports.colorCapability = colorCapability;
|
|
77387
78985
|
exports.colorForKind = colorForKind;
|
|
@@ -77434,6 +79032,7 @@ exports.createLazyTrpcSource = require_sleep.createLazyTrpcSource;
|
|
|
77434
79032
|
exports.createLogChannelsProvider = createLogChannelsProvider;
|
|
77435
79033
|
exports.createMirrorSource = require_sleep.createMirrorSource;
|
|
77436
79034
|
exports.createRuntimeStateBridge = createRuntimeStateBridge;
|
|
79035
|
+
exports.createSecretsAccess = require_sleep.createSecretsAccess;
|
|
77437
79036
|
exports.createSliceHandle = require_sleep.createSliceHandle;
|
|
77438
79037
|
exports.createStatefulExpressionMemory = require_composition.createStatefulExpressionMemory;
|
|
77439
79038
|
exports.createSystemProxy = createSystemProxy;
|
|
@@ -77500,6 +79099,7 @@ exports.effectiveStepSettings = effectiveStepSettings;
|
|
|
77500
79099
|
exports.egressTranscodeSharingKey = egressTranscodeSharingKey;
|
|
77501
79100
|
exports.egressTransportFromRequest = egressTransportFromRequest;
|
|
77502
79101
|
exports.electByShare = electByShare;
|
|
79102
|
+
exports.eligibleUnderBenchmark = eligibleUnderBenchmark;
|
|
77503
79103
|
exports.embeddingEncoderCapability = embeddingEncoderCapability;
|
|
77504
79104
|
exports.embeddingModelFailedError = embeddingModelFailedError;
|
|
77505
79105
|
exports.embeddingModelFailedOf = embeddingModelFailedOf;
|
|
@@ -77517,6 +79117,7 @@ exports.enumerateInferenceDevices = enumerateInferenceDevices;
|
|
|
77517
79117
|
exports.enumerateItemArrayFields = enumerateItemArrayFields;
|
|
77518
79118
|
exports.enumerateSchemaFields = enumerateSchemaFields;
|
|
77519
79119
|
exports.errMsg = require_err_msg.errMsg;
|
|
79120
|
+
exports.estimateNodeBenchmarkDurationMs = estimateNodeBenchmarkDurationMs;
|
|
77520
79121
|
exports.evaluateAst = require_composition.evaluateAst;
|
|
77521
79122
|
exports.evaluateCompositionField = evaluateCompositionField;
|
|
77522
79123
|
exports.evaluateCount = require_composition.evaluateCount;
|
|
@@ -77560,10 +79161,13 @@ exports.findCompositionCycles = findCompositionCycles;
|
|
|
77560
79161
|
exports.findTimezone = findTimezone;
|
|
77561
79162
|
exports.floodCapability = floodCapability;
|
|
77562
79163
|
exports.foldSnapshotByFunction = foldSnapshotByFunction;
|
|
79164
|
+
exports.forgetKnownSecret = require_sleep.forgetKnownSecret;
|
|
77563
79165
|
exports.formatForRuntime = formatForRuntime;
|
|
77564
79166
|
exports.formatMediaOwnerKey = formatMediaOwnerKey;
|
|
77565
79167
|
exports.formatMinutes = formatMinutes;
|
|
77566
79168
|
exports.formatParkedFor = formatParkedFor;
|
|
79169
|
+
exports.formatSecretScope = require_sleep.formatSecretScope;
|
|
79170
|
+
exports.freshResults = freshResults;
|
|
77567
79171
|
exports.frigateDefaultClassFloors = frigateDefaultClassFloors;
|
|
77568
79172
|
exports.frigateLabelFields = frigateLabelFields;
|
|
77569
79173
|
exports.gasCapability = gasCapability;
|
|
@@ -77577,6 +79181,7 @@ exports.getTaxonomyEntry = getTaxonomyEntry;
|
|
|
77577
79181
|
exports.gifDeriveSpeed = gifDeriveSpeed;
|
|
77578
79182
|
exports.gifFilterComplex = gifFilterComplex;
|
|
77579
79183
|
exports.gifFromMp4Args = gifFromMp4Args;
|
|
79184
|
+
exports.globalSecretScope = require_sleep.globalSecretScope;
|
|
77580
79185
|
exports.hasModelBoundOverrides = hasModelBoundOverrides;
|
|
77581
79186
|
exports.hasMotionTrigger = hasMotionTrigger;
|
|
77582
79187
|
exports.hfModelUrl = hfModelUrl;
|
|
@@ -77626,6 +79231,7 @@ exports.isEventOwnerType = isEventOwnerType;
|
|
|
77626
79231
|
exports.isFirstLevelMacroClass = isFirstLevelMacroClass;
|
|
77627
79232
|
exports.isHeldBackTemplateVar = isHeldBackTemplateVar;
|
|
77628
79233
|
exports.isIsolatedBuiltin = isIsolatedBuiltin;
|
|
79234
|
+
exports.isKeychainStoredField = require_sleep.isKeychainStoredField;
|
|
77629
79235
|
exports.isKnownTemplateVar = isKnownTemplateVar;
|
|
77630
79236
|
exports.isLabelSupplyStepId = isLabelSupplyStepId;
|
|
77631
79237
|
exports.isLocationEnabled = isLocationEnabled;
|
|
@@ -77640,7 +79246,12 @@ exports.isRetiredClearKey = isRetiredClearKey;
|
|
|
77640
79246
|
exports.isRootSuppliableStepId = isRootSuppliableStepId;
|
|
77641
79247
|
exports.isSameAddonId = isSameAddonId;
|
|
77642
79248
|
exports.isScheduleActive = isScheduleActive;
|
|
77643
|
-
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;
|
|
77644
79255
|
exports.isSingleHubAddressRole = isSingleHubAddressRole;
|
|
77645
79256
|
exports.isSoftwareDecode = require_composition.isSoftwareDecode;
|
|
77646
79257
|
exports.isSourceCap = require_composition.isSourceCap;
|
|
@@ -77657,8 +79268,11 @@ exports.isZodSecret = require_sleep.isZodSecret;
|
|
|
77657
79268
|
exports.ituDbfsFromPreEpoch = ituDbfsFromPreEpoch;
|
|
77658
79269
|
exports.jobKindSchema = jobKindSchema;
|
|
77659
79270
|
exports.kebabToCamel = kebabToCamel;
|
|
79271
|
+
exports.keychainAdminCapability = keychainAdminCapability;
|
|
79272
|
+
exports.keychainCapability = keychainCapability;
|
|
77660
79273
|
exports.kindOfValue = kindOfValue;
|
|
77661
79274
|
exports.kindsForDiscriminator = kindsForDiscriminator;
|
|
79275
|
+
exports.knownSecretCount = require_sleep.knownSecretCount;
|
|
77662
79276
|
exports.knownValues = knownValues;
|
|
77663
79277
|
exports.lawnMowerControlCapability = lawnMowerControlCapability;
|
|
77664
79278
|
exports.legacyAutoLinkIds = legacyAutoLinkIds;
|
|
@@ -77669,6 +79283,7 @@ exports.lifecycleJobStateSchema = lifecycleJobStateSchema;
|
|
|
77669
79283
|
exports.lifecycleTaskSchema = lifecycleTaskSchema;
|
|
77670
79284
|
exports.linkedLabelStepId = linkedLabelStepId;
|
|
77671
79285
|
exports.linkedStepOf = linkedStepOf;
|
|
79286
|
+
exports.listBenchDetailSteps = listBenchDetailSteps;
|
|
77672
79287
|
exports.llmCapability = llmCapability;
|
|
77673
79288
|
exports.llmRuntimeCapability = llmRuntimeCapability;
|
|
77674
79289
|
exports.loadContributionCapability = loadContributionCapability;
|
|
@@ -77683,6 +79298,7 @@ exports.logLevelAtMost = logLevelAtMost;
|
|
|
77683
79298
|
exports.loginMethodCapability = loginMethodCapability;
|
|
77684
79299
|
exports.looseSchema = looseSchema;
|
|
77685
79300
|
exports.makeProfileBrokerId = require_sleep.makeProfileBrokerId;
|
|
79301
|
+
exports.makeSecretMarker = require_sleep.makeSecretMarker;
|
|
77686
79302
|
exports.makeSourceBrokerId = require_sleep.makeSourceBrokerId;
|
|
77687
79303
|
exports.mapAudioLabelToMacro = mapAudioLabelToMacro;
|
|
77688
79304
|
exports.markdownToHtmlLite = markdownToHtmlLite;
|
|
@@ -77691,8 +79307,11 @@ exports.maskUrlCredentials = maskUrlCredentials;
|
|
|
77691
79307
|
exports.matchDoAction = matchDoAction;
|
|
77692
79308
|
exports.mayReadLocation = mayReadLocation;
|
|
77693
79309
|
exports.mayWriteToLocation = mayWriteToLocation;
|
|
79310
|
+
exports.measuredCapacityFromResults = measuredCapacityFromResults;
|
|
79311
|
+
exports.measuredDetectorCells = measuredDetectorCells;
|
|
77694
79312
|
exports.mediaPlayerCapability = mediaPlayerCapability;
|
|
77695
79313
|
exports.memoizePinnedFfmpeg = memoizePinnedFfmpeg;
|
|
79314
|
+
exports.mergeSecretStatePaths = require_sleep.mergeSecretStatePaths;
|
|
77696
79315
|
exports.mergeSettingsBags = mergeSettingsBags;
|
|
77697
79316
|
exports.mergeSourceInfo = mergeSourceInfo;
|
|
77698
79317
|
exports.meshNetworkCapability = meshNetworkCapability;
|
|
@@ -77719,6 +79338,7 @@ exports.ncAlarmSystemDefaultSettings = ncAlarmSystemDefaultSettings;
|
|
|
77719
79338
|
exports.networkAccessCapability = networkAccessCapability;
|
|
77720
79339
|
exports.networkLinkCapability = networkLinkCapability;
|
|
77721
79340
|
exports.networkQualityCapability = networkQualityCapability;
|
|
79341
|
+
exports.nodeBenchmarkRefusals = nodeBenchmarkRefusals;
|
|
77722
79342
|
exports.nodePickerItems = nodePickerItems;
|
|
77723
79343
|
exports.nodePin = require_sleep.nodePin;
|
|
77724
79344
|
exports.nodesCapability = nodesCapability;
|
|
@@ -77726,6 +79346,7 @@ exports.normalizeAddonInitResult = require_sleep.normalizeAddonInitResult;
|
|
|
77726
79346
|
exports.normalizeAudioLabel = normalizeAudioLabel;
|
|
77727
79347
|
exports.normalizeCoreBlockWrite = normalizeCoreBlockWrite;
|
|
77728
79348
|
exports.normalizeNodeId = require_sleep.normalizeNodeId;
|
|
79349
|
+
exports.normalizeSecretOwner = require_sleep.normalizeSecretOwner;
|
|
77729
79350
|
exports.normalizeTokenScopes = normalizeTokenScopes;
|
|
77730
79351
|
exports.normalizeUnit = normalizeUnit;
|
|
77731
79352
|
exports.notificationOutputCapability = notificationOutputCapability;
|
|
@@ -77753,6 +79374,8 @@ exports.parseOccupancyScope = parseOccupancyScope;
|
|
|
77753
79374
|
exports.parseProcStatus = parseProcStatus;
|
|
77754
79375
|
exports.parseProfileBrokerId = require_sleep.parseProfileBrokerId;
|
|
77755
79376
|
exports.parseRuleSection = parseRuleSection;
|
|
79377
|
+
exports.parseSecretRef = require_sleep.parseSecretRef;
|
|
79378
|
+
exports.parseSecretStatePath = require_sleep.parseSecretStatePath;
|
|
77756
79379
|
exports.parseSessionPlacementPolicy = parseSessionPlacementPolicy;
|
|
77757
79380
|
exports.parseShareSource = parseShareSource;
|
|
77758
79381
|
exports.parseStreamParamsFormPatch = parseStreamParamsFormPatch;
|
|
@@ -77770,6 +79393,7 @@ exports.pickRestartCandidate = pickRestartCandidate;
|
|
|
77770
79393
|
exports.pickVideoEncoder = require_composition.pickVideoEncoder;
|
|
77771
79394
|
exports.pickerForCondition = pickerForCondition;
|
|
77772
79395
|
exports.pickerForRuleClasses = pickerForRuleClasses;
|
|
79396
|
+
exports.pinUnderBenchmark = pinUnderBenchmark;
|
|
77773
79397
|
exports.pipelineAnalyticsCapability = pipelineAnalyticsCapability;
|
|
77774
79398
|
exports.pipelineExecutorCapability = pipelineExecutorCapability;
|
|
77775
79399
|
exports.pipelineOrchestratorCapability = pipelineOrchestratorCapability;
|
|
@@ -77815,6 +79439,7 @@ exports.recordingOnboardCapability = recordingOnboardCapability;
|
|
|
77815
79439
|
exports.recordingSignalCapability = recordingSignalCapability;
|
|
77816
79440
|
exports.rectsToCells = rectsToCells;
|
|
77817
79441
|
exports.reducePoints = reducePoints;
|
|
79442
|
+
exports.registerKnownSecret = require_sleep.registerKnownSecret;
|
|
77818
79443
|
exports.renameAlarmProfile = renameAlarmProfile;
|
|
77819
79444
|
exports.replacedFieldKeys = replacedFieldKeys;
|
|
77820
79445
|
exports.requiredTopLevelKeys = requiredTopLevelKeys;
|
|
@@ -77856,9 +79481,13 @@ exports.resolvePublicEndpoint = resolvePublicEndpoint;
|
|
|
77856
79481
|
exports.resolveRecordingProfiles = resolveRecordingProfiles;
|
|
77857
79482
|
exports.resolveRootSupply = resolveRootSupply;
|
|
77858
79483
|
exports.resolveRunnerId = resolveRunnerId;
|
|
79484
|
+
exports.resolveSecretMarkers = require_sleep.resolveSecretMarkers;
|
|
79485
|
+
exports.resolveSecretViewsIn = require_sleep.resolveSecretViewsIn;
|
|
77859
79486
|
exports.resolveStreamMaps = require_composition.resolveStreamMaps;
|
|
77860
79487
|
exports.resolveVariantModelId = resolveVariantModelId;
|
|
77861
79488
|
exports.resolveViewableDeviceIds = resolveViewableDeviceIds;
|
|
79489
|
+
exports.resultCellKey = resultCellKey;
|
|
79490
|
+
exports.resultStandings = resultStandings;
|
|
77862
79491
|
exports.roleSpec = roleSpec;
|
|
77863
79492
|
exports.roomCompositionExample = roomCompositionExample;
|
|
77864
79493
|
exports.rootSuppliesOf = rootSuppliesOf;
|
|
@@ -77882,14 +79511,17 @@ exports.runtimeStatePolicyFor = runtimeStatePolicyFor;
|
|
|
77882
79511
|
exports.sameDoFamily = sameDoFamily;
|
|
77883
79512
|
exports.sceneMonitorCapability = sceneMonitorCapability;
|
|
77884
79513
|
exports.scheduleForSendTimes = scheduleForSendTimes;
|
|
77885
|
-
exports.schemaDeclaresAnyField = schemaDeclaresAnyField;
|
|
79514
|
+
exports.schemaDeclaresAnyField = require_sleep.schemaDeclaresAnyField;
|
|
77886
79515
|
exports.scopeInherits = scopeInherits;
|
|
77887
79516
|
exports.scopeKey = require_sleep.scopeKey;
|
|
77888
79517
|
exports.scopesAllowAddon = scopesAllowAddon;
|
|
77889
79518
|
exports.scopesAllowDeviceCap = scopesAllowDeviceCap;
|
|
77890
79519
|
exports.scoreRuntimes = scoreRuntimes;
|
|
77891
79520
|
exports.scriptRunnerCapability = scriptRunnerCapability;
|
|
79521
|
+
exports.scrubKnownSecrets = require_sleep.scrubKnownSecrets;
|
|
77892
79522
|
exports.searchDisplayIcons = searchDisplayIcons;
|
|
79523
|
+
exports.secretTreeFromPaths = require_sleep.secretTreeFromPaths;
|
|
79524
|
+
exports.secretTreeFromSchema = require_sleep.secretTreeFromSchema;
|
|
77893
79525
|
exports.secureActuationFor = secureActuationFor;
|
|
77894
79526
|
exports.selectAppConnectionEndpoints = selectAppConnectionEndpoints;
|
|
77895
79527
|
exports.selectAssignedProfileSlots = require_sleep.selectAssignedProfileSlots;
|
|
@@ -77904,6 +79536,7 @@ exports.setByPath = setByPath;
|
|
|
77904
79536
|
exports.settingValuesEqual = settingValuesEqual;
|
|
77905
79537
|
exports.settingsBelow = settingsBelow;
|
|
77906
79538
|
exports.settingsStoreCapability = settingsStoreCapability;
|
|
79539
|
+
exports.shortSecretRefHash = require_sleep.shortSecretRefHash;
|
|
77907
79540
|
exports.signalPercentFromBars = signalPercentFromBars;
|
|
77908
79541
|
exports.signalPercentFromRssi = signalPercentFromRssi;
|
|
77909
79542
|
exports.siteZoneKey = siteZoneKey;
|
|
@@ -77972,11 +79605,13 @@ exports.toDeviceSummary = toDeviceSummary;
|
|
|
77972
79605
|
exports.toExpressionValue = require_composition.toExpressionValue;
|
|
77973
79606
|
exports.toNodeId = require_sleep.toNodeId;
|
|
77974
79607
|
exports.toPercentShares = toPercentShares;
|
|
79608
|
+
exports.toSecretFieldView = require_sleep.toSecretFieldView;
|
|
77975
79609
|
exports.toStreamSourceEntry = toStreamSourceEntry;
|
|
77976
79610
|
exports.toastCapability = toastCapability;
|
|
77977
79611
|
exports.toggleAudioLabel = toggleAudioLabel;
|
|
77978
79612
|
exports.tokenize = require_composition.tokenize;
|
|
77979
79613
|
exports.transcodeBody = transcodeBody;
|
|
79614
|
+
exports.transformSecretWrite = require_sleep.transformSecretWrite;
|
|
77980
79615
|
exports.tryConvertUnit = tryConvertUnit;
|
|
77981
79616
|
exports.turnProviderCapability = turnProviderCapability;
|
|
77982
79617
|
exports.unitDimension = unitDimension;
|