@camstack/types 1.2.443 → 1.2.445
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/CHANGELOG.md +20 -0
- package/dist/addon.d.ts +5 -1
- package/dist/addon.js +21 -5
- package/dist/addon.mjs +17 -6
- package/dist/automation/export-entities.d.ts +98 -0
- package/dist/capabilities/capability-definition.d.ts +1 -1
- package/dist/capabilities/composer.cap.d.ts +34 -0
- package/dist/capabilities/consumables.cap.d.ts +4 -5
- package/dist/capabilities/core-blocks.cap.d.ts +244 -0
- package/dist/capabilities/device-export.cap.d.ts +111 -1
- package/dist/capabilities/index.d.ts +6 -4
- package/dist/capabilities/metrics-provider.cap.d.ts +16 -16
- package/dist/capabilities/nodes.cap.d.ts +2 -2
- package/dist/capabilities/pet-fountain.cap.d.ts +138 -0
- package/dist/capabilities/pipeline-executor.cap.d.ts +6 -22
- package/dist/capabilities/pipeline-orchestrator.cap.d.ts +2 -2
- package/dist/capabilities/pipeline-runner.cap.d.ts +2 -2
- package/dist/capabilities/pipeline-step-input.d.ts +33 -0
- package/dist/capabilities/server-management.cap.d.ts +28 -0
- package/dist/client.js +820 -799
- package/dist/client.mjs +820 -799
- package/dist/composition/composition-items.d.ts +3 -3
- package/dist/composition/composition-report.d.ts +17 -0
- package/dist/composition/composition.d.ts +68 -1
- package/dist/composition/index.d.ts +2 -0
- package/dist/composition/presets/pet-fountain.d.ts +36 -0
- package/dist/composition/validate-forward.d.ts +31 -0
- package/dist/{composition-C0dlyG9U.js → composition-CO6Sak-s.js} +49 -5
- package/dist/{composition-bIBW5_13.mjs → composition-kSuOifuG.mjs} +32 -6
- package/dist/device/cap-vocabulary/entries/appliances.d.ts +1 -1
- package/dist/device/device-control-resolution.d.ts +1 -1
- package/dist/device/device-type.d.ts +4 -0
- package/dist/{err-msg-BCdlR2Li.mjs → err-msg-DWXWc0Di.mjs} +4 -0
- package/dist/{err-msg-COHgq7Mb.js → err-msg-EJhsFHqa.js} +4 -0
- package/dist/generated/addon-api.d.ts +148 -32
- package/dist/generated/addon-cap-facts.d.ts +1 -1
- package/dist/generated/cap-status-types.d.ts +3 -1
- package/dist/generated/capability-router-map.d.ts +5 -2
- package/dist/generated/collection-array-methods.d.ts +2 -2
- package/dist/generated/customize-catalog.d.ts +1 -1
- package/dist/generated/device-local-state.d.ts +3 -0
- package/dist/generated/device-proxy.d.ts +3 -0
- package/dist/generated/device-scoped-caps.d.ts +1 -1
- package/dist/generated/history-catalog.d.ts +1 -1
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/method-device-selectors.d.ts +1 -1
- package/dist/generated/runtime-state-durability.d.ts +1 -1
- package/dist/generated/system-proxy.d.ts +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1465 -603
- package/dist/index.mjs +1433 -592
- package/dist/interfaces/agent.d.ts +6 -2
- package/dist/interfaces/event-bus.d.ts +1 -1
- package/dist/node.js +2 -2
- package/dist/node.mjs +2 -2
- package/dist/{sleep-C_u6cEAJ.mjs → sleep-6eG9C8Xl.mjs} +223 -72
- package/dist/{sleep-E7qAQwTE.js → sleep-UXDHn-oJ.js} +246 -71
- package/package.json +1 -1
|
@@ -71,7 +71,8 @@ export interface AgentHealth {
|
|
|
71
71
|
readonly hubAddress: string | null;
|
|
72
72
|
readonly addons: AgentHealthAddonCounts;
|
|
73
73
|
readonly cpuPercent: number;
|
|
74
|
-
|
|
74
|
+
/** `null` when the memory read failed (D393). */
|
|
75
|
+
readonly memoryPercent: number | null;
|
|
75
76
|
/** ISO timestamp when this snapshot was generated. */
|
|
76
77
|
readonly checkedAt: string;
|
|
77
78
|
}
|
|
@@ -154,7 +155,10 @@ export interface AgentListItem {
|
|
|
154
155
|
readonly status: {
|
|
155
156
|
readonly activeCameras: number;
|
|
156
157
|
readonly cpuPercent: number;
|
|
157
|
-
|
|
158
|
+
/** `null` when the memory read failed or was never reported (D393). */
|
|
159
|
+
readonly memoryPercent: number | null;
|
|
160
|
+
/** RSS of the node's own (core) process; absent from an agent that predates the field. */
|
|
161
|
+
readonly processRssBytes?: number | null;
|
|
158
162
|
readonly fps: Readonly<Record<string, number>>;
|
|
159
163
|
readonly errors: readonly string[];
|
|
160
164
|
};
|
|
@@ -736,7 +736,7 @@ export interface TopologyNode {
|
|
|
736
736
|
readonly isHub: boolean;
|
|
737
737
|
readonly isOnline: boolean;
|
|
738
738
|
readonly cpuPercent: number;
|
|
739
|
-
readonly memoryPercent: number;
|
|
739
|
+
readonly memoryPercent: number | null;
|
|
740
740
|
readonly uptime: number;
|
|
741
741
|
readonly lastSeen: string;
|
|
742
742
|
/** Local IP addresses visible on the network (non-internal, IPv4/IPv6). */
|
package/dist/node.js
CHANGED
|
@@ -21,8 +21,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
enumerable: true
|
|
22
22
|
}) : target, mod));
|
|
23
23
|
//#endregion
|
|
24
|
-
const require_composition = require("./composition-
|
|
25
|
-
const require_err_msg = require("./err-msg-
|
|
24
|
+
const require_composition = require("./composition-CO6Sak-s.js");
|
|
25
|
+
const require_err_msg = require("./err-msg-EJhsFHqa.js");
|
|
26
26
|
let node_crypto = require("node:crypto");
|
|
27
27
|
let node_fs = require("node:fs");
|
|
28
28
|
node_fs = __toESM(node_fs);
|
package/dist/node.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as errMsg } from "./err-msg-
|
|
1
|
+
import { Bn as getFfmpegDownloadUrl, Fn as FFMPEG_PATH_ENV, Hn as Fmp4BoxSplitter, In as chooseFfmpegBinary, L as compositionSourceKey, Ln as ffmpegBinaryName, Rn as FFMPEG_RELEASE, Vn as canonicalHash, Zn as isSoftwareDecode, a as CUSTOMIZATION_BLOCK_NAME_PREFIX, qn as buildFfmpegArgs, zn as getFfmpegArtifact } from "./composition-kSuOifuG.mjs";
|
|
2
|
+
import { t as errMsg } from "./err-msg-DWXWc0Di.mjs";
|
|
3
3
|
import { createHash, createHmac, randomUUID, timingSafeEqual } from "node:crypto";
|
|
4
4
|
import * as fs from "node:fs";
|
|
5
5
|
import { chmodSync, copyFileSync, createWriteStream, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
|
|
@@ -6055,76 +6055,6 @@ var MODEL_FORMATS = [
|
|
|
6055
6055
|
"pt",
|
|
6056
6056
|
"gguf"
|
|
6057
6057
|
];
|
|
6058
|
-
//#endregion
|
|
6059
|
-
//#region src/cap-call-context.ts
|
|
6060
|
-
/**
|
|
6061
|
-
* Per-call node pinning for `ctx.api` capability calls.
|
|
6062
|
-
*
|
|
6063
|
-
* A capability call normally resolves to its DEFAULT provider — a `singleton`
|
|
6064
|
-
* cap resolves to the hub, a device-scoped cap to the device's owning node. To
|
|
6065
|
-
* query a SPECIFIC node's provider instead (e.g. a remote agent's own
|
|
6066
|
-
* in-process `platform-probe` hardware, which the hub cannot probe), pin the
|
|
6067
|
-
* call to that node.
|
|
6068
|
-
*
|
|
6069
|
-
* The nodeId rides OUT-OF-BAND in the tRPC call context (NOT in the validated
|
|
6070
|
-
* method args), so capability method signatures stay `nodeId`-free — node
|
|
6071
|
-
* targeting is a property of the CALL, not of the method. The transport lifts
|
|
6072
|
-
* it from `op.context` onto the `CapCallInput.nodeId` field (`ipcParentLink`),
|
|
6073
|
-
* and the hub parent's `onUnownedCall` passes it to the `CapRouteResolver`,
|
|
6074
|
-
* which classifies a pinned agent node as `agent-child-forward`
|
|
6075
|
-
* (`$agent-cap-fwd.forward` → the agent's in-process provider).
|
|
6076
|
-
*
|
|
6077
|
-
* Usage at a call site:
|
|
6078
|
-
*
|
|
6079
|
-
* await api.platformProbe.getCapabilities.query(undefined, nodePin(nodeId))
|
|
6080
|
-
*/
|
|
6081
|
-
/** tRPC `op.context` key carrying a per-call node pin. */
|
|
6082
|
-
var CAP_NODE_PIN_CONTEXT_KEY = "__camstackNodePin";
|
|
6083
|
-
/**
|
|
6084
|
-
* Build the tRPC request options that pin a single capability call to `nodeId`.
|
|
6085
|
-
* Pass as the second argument to `.query(input, …)` / `.mutate(input, …)`.
|
|
6086
|
-
*
|
|
6087
|
-
* ## The id is normalised here, and it has to be
|
|
6088
|
-
*
|
|
6089
|
-
* A forked addon reads its own node from `ctx.kernel.localNodeId`, and inside a
|
|
6090
|
-
* worker that value is a RUNNER id — `hub/export-hap`, not `hub`. Routing
|
|
6091
|
-
* compares a pin against real node ids, so such a pin matches nothing and the
|
|
6092
|
-
* call fails with `no provider registered for cap "…"`. The local-first
|
|
6093
|
-
* resolver already guarded against this (`localNodeId.split('/')[0]`), which
|
|
6094
|
-
* made the hazard invisible: unpinned calls worked, and only an explicit pin —
|
|
6095
|
-
* the thing you reach for when you specifically need THIS node — silently
|
|
6096
|
-
* addressed a node that does not exist.
|
|
6097
|
-
*
|
|
6098
|
-
* Cost of it being missing: `addon-export-hap` pinned `decoder.getInfo` to its
|
|
6099
|
-
* own node to read the host's hardware-decode backend. It never once answered,
|
|
6100
|
-
* so every HomeKit egress transcode decoded in SOFTWARE — including 4K H.265 —
|
|
6101
|
-
* while D67's whole premise was that the decoder addon is the authority on
|
|
6102
|
-
* hardware. The warn said `decoding in SOFTWARE` and read as "this node has no
|
|
6103
|
-
* hardware", which was false.
|
|
6104
|
-
*
|
|
6105
|
-
* Normalising in the ONE constructor fixes every caller at once, which is why
|
|
6106
|
-
* it is here and not at the call sites.
|
|
6107
|
-
*/
|
|
6108
|
-
function nodePin(nodeId) {
|
|
6109
|
-
return { context: { [CAP_NODE_PIN_CONTEXT_KEY]: toNodeId(nodeId) } };
|
|
6110
|
-
}
|
|
6111
|
-
/**
|
|
6112
|
-
* A runner id is `<nodeId>/<addonId>`; a node id has no slash. Taking the head
|
|
6113
|
-
* is idempotent, so passing an already-clean id costs nothing.
|
|
6114
|
-
*/
|
|
6115
|
-
function toNodeId(idOrRunnerId) {
|
|
6116
|
-
const head = idOrRunnerId.split("/")[0];
|
|
6117
|
-
return head === void 0 || head.length === 0 ? idOrRunnerId : head;
|
|
6118
|
-
}
|
|
6119
|
-
/**
|
|
6120
|
-
* Read a per-call node pin out of a tRPC `op.context` (transport side).
|
|
6121
|
-
* Returns the pinned nodeId, or `undefined` when no pin is present.
|
|
6122
|
-
*/
|
|
6123
|
-
function readNodePin(context) {
|
|
6124
|
-
if (context === null || typeof context !== "object") return void 0;
|
|
6125
|
-
const value = Reflect.get(context, CAP_NODE_PIN_CONTEXT_KEY);
|
|
6126
|
-
return typeof value === "string" ? value : void 0;
|
|
6127
|
-
}
|
|
6128
6058
|
z.object({
|
|
6129
6059
|
field: z.string().min(1),
|
|
6130
6060
|
on: z.literal("advance")
|
|
@@ -6146,6 +6076,7 @@ var HISTORY_UNIT_LABELS = {
|
|
|
6146
6076
|
ppm: "ppm",
|
|
6147
6077
|
ppb: "ppb",
|
|
6148
6078
|
"µg/m³": "µg/m³",
|
|
6079
|
+
L: "L",
|
|
6149
6080
|
hPa: "hPa",
|
|
6150
6081
|
count: "count",
|
|
6151
6082
|
ratio: "ratio",
|
|
@@ -6342,6 +6273,141 @@ function isDeviceConfigCap(def) {
|
|
|
6342
6273
|
return def?.deviceConfig !== void 0;
|
|
6343
6274
|
}
|
|
6344
6275
|
//#endregion
|
|
6276
|
+
//#region src/cap-call-context.ts
|
|
6277
|
+
/**
|
|
6278
|
+
* Per-call node pinning for `ctx.api` capability calls.
|
|
6279
|
+
*
|
|
6280
|
+
* A capability call normally resolves to its DEFAULT provider — a `singleton`
|
|
6281
|
+
* cap resolves to the hub, a device-scoped cap to the device's owning node. To
|
|
6282
|
+
* query a SPECIFIC node's provider instead (e.g. a remote agent's own
|
|
6283
|
+
* in-process `platform-probe` hardware, which the hub cannot probe), pin the
|
|
6284
|
+
* call to that node.
|
|
6285
|
+
*
|
|
6286
|
+
* The nodeId rides OUT-OF-BAND in the tRPC call context (NOT in the validated
|
|
6287
|
+
* method args), so capability method signatures stay `nodeId`-free — node
|
|
6288
|
+
* targeting is a property of the CALL, not of the method. The transport lifts
|
|
6289
|
+
* it from `op.context` onto the `CapCallInput.nodeId` field (`ipcParentLink`),
|
|
6290
|
+
* and the hub parent's `onUnownedCall` passes it to the `CapRouteResolver`,
|
|
6291
|
+
* which classifies a pinned agent node as `agent-child-forward`
|
|
6292
|
+
* (`$agent-cap-fwd.forward` → the agent's in-process provider).
|
|
6293
|
+
*
|
|
6294
|
+
* Usage at a call site:
|
|
6295
|
+
*
|
|
6296
|
+
* await api.platformProbe.getCapabilities.query(undefined, nodePin(nodeId))
|
|
6297
|
+
*/
|
|
6298
|
+
/** tRPC `op.context` key carrying a per-call node pin. */
|
|
6299
|
+
var CAP_NODE_PIN_CONTEXT_KEY = "__camstackNodePin";
|
|
6300
|
+
/**
|
|
6301
|
+
* Build the tRPC request options that pin a single capability call to `nodeId`.
|
|
6302
|
+
* Pass as the second argument to `.query(input, …)` / `.mutate(input, …)`.
|
|
6303
|
+
*
|
|
6304
|
+
* ## The id is normalised here, and it has to be
|
|
6305
|
+
*
|
|
6306
|
+
* A forked addon reads its own node from `ctx.kernel.localNodeId`, and inside a
|
|
6307
|
+
* worker that value is a RUNNER id — `hub/export-hap`, not `hub`. Routing
|
|
6308
|
+
* compares a pin against real node ids, so such a pin matches nothing and the
|
|
6309
|
+
* call fails with `no provider registered for cap "…"`. The local-first
|
|
6310
|
+
* resolver already guarded against this (`localNodeId.split('/')[0]`), which
|
|
6311
|
+
* made the hazard invisible: unpinned calls worked, and only an explicit pin —
|
|
6312
|
+
* the thing you reach for when you specifically need THIS node — silently
|
|
6313
|
+
* addressed a node that does not exist.
|
|
6314
|
+
*
|
|
6315
|
+
* Cost of it being missing: `addon-export-hap` pinned `decoder.getInfo` to its
|
|
6316
|
+
* own node to read the host's hardware-decode backend. It never once answered,
|
|
6317
|
+
* so every HomeKit egress transcode decoded in SOFTWARE — including 4K H.265 —
|
|
6318
|
+
* while D67's whole premise was that the decoder addon is the authority on
|
|
6319
|
+
* hardware. The warn said `decoding in SOFTWARE` and read as "this node has no
|
|
6320
|
+
* hardware", which was false.
|
|
6321
|
+
*
|
|
6322
|
+
* Normalising in the ONE constructor fixes every caller at once, which is why
|
|
6323
|
+
* it is here and not at the call sites.
|
|
6324
|
+
*/
|
|
6325
|
+
function nodePin(nodeId) {
|
|
6326
|
+
return { context: { [CAP_NODE_PIN_CONTEXT_KEY]: toNodeId(nodeId) } };
|
|
6327
|
+
}
|
|
6328
|
+
/**
|
|
6329
|
+
* A runner id is `<nodeId>/<addonId>`; a node id has no slash. Taking the head
|
|
6330
|
+
* is idempotent, so passing an already-clean id costs nothing.
|
|
6331
|
+
*/
|
|
6332
|
+
function toNodeId(idOrRunnerId) {
|
|
6333
|
+
const head = idOrRunnerId.split("/")[0];
|
|
6334
|
+
return head === void 0 || head.length === 0 ? idOrRunnerId : head;
|
|
6335
|
+
}
|
|
6336
|
+
/**
|
|
6337
|
+
* Read a per-call node pin out of a tRPC `op.context` (transport side).
|
|
6338
|
+
* Returns the pinned nodeId, or `undefined` when no pin is present.
|
|
6339
|
+
*/
|
|
6340
|
+
function readNodePin(context) {
|
|
6341
|
+
if (context === null || typeof context !== "object") return void 0;
|
|
6342
|
+
const value = Reflect.get(context, CAP_NODE_PIN_CONTEXT_KEY);
|
|
6343
|
+
return typeof value === "string" ? value : void 0;
|
|
6344
|
+
}
|
|
6345
|
+
//#endregion
|
|
6346
|
+
//#region src/capabilities/addon-pages-source.cap.ts
|
|
6347
|
+
/**
|
|
6348
|
+
* `addon-pages-source` — collection cap exposing per-provider raw page
|
|
6349
|
+
* declarations. Every addon that contributes a UI page registers a
|
|
6350
|
+
* provider here. The hub-side singleton aggregator (`addon-pages` cap,
|
|
6351
|
+
* see `addon-pages.cap.ts`) walks this collection, stamps versioned
|
|
6352
|
+
* `bundleUrl` values, and returns the enriched `AddonPageInfo[]` list
|
|
6353
|
+
* that admin-ui consumes.
|
|
6354
|
+
*
|
|
6355
|
+
* The split exists because the public listing has a different output
|
|
6356
|
+
* shape than the per-provider raw declarations, and we want both ends
|
|
6357
|
+
* to flow through codegen instead of relying on a hand-written wrapper.
|
|
6358
|
+
*/
|
|
6359
|
+
var AddonPageDeclarationSchema = z.object({
|
|
6360
|
+
id: z.string(),
|
|
6361
|
+
label: z.string(),
|
|
6362
|
+
icon: z.string(),
|
|
6363
|
+
path: z.string(),
|
|
6364
|
+
/**
|
|
6365
|
+
* Module Federation remote name — must match the `name` field on the
|
|
6366
|
+
* page addon's `federation()` plugin config. Used by admin-ui's
|
|
6367
|
+
* `<AddonPageLoader>` to call `loadRemote('<remoteName>/page')`.
|
|
6368
|
+
* Conventionally `addon_<id>_page` (snake_case; MF names cannot
|
|
6369
|
+
* contain hyphens).
|
|
6370
|
+
*/
|
|
6371
|
+
remoteName: z.string(),
|
|
6372
|
+
/**
|
|
6373
|
+
* Bundle filename inside the addon's `dist/` dir served at
|
|
6374
|
+
* `/api/addon-pages/<addonId>/<bundle>`. With Module Federation this
|
|
6375
|
+
* is always `'remoteEntry.js'`; the value is kept on the metadata so
|
|
6376
|
+
* the static-file route can compute an mtime-based cache-buster URL
|
|
6377
|
+
* without a separate filesystem stat.
|
|
6378
|
+
*/
|
|
6379
|
+
bundle: z.string(),
|
|
6380
|
+
/**
|
|
6381
|
+
* Sidebar section this page docks into. Well-known ids: `'detection'`,
|
|
6382
|
+
* `'cluster'`, `'administration'` — the page renders inside that group.
|
|
6383
|
+
* Any OTHER string creates (or joins) a custom section rendered after
|
|
6384
|
+
* the built-in groups; its label comes from `sectionLabel` (first
|
|
6385
|
+
* declaration wins), falling back to the id. Absent → the legacy
|
|
6386
|
+
* "Addon Pages" group.
|
|
6387
|
+
*/
|
|
6388
|
+
section: z.string().optional(),
|
|
6389
|
+
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
6390
|
+
sectionLabel: z.string().optional()
|
|
6391
|
+
});
|
|
6392
|
+
var addonPagesSourceCapability = {
|
|
6393
|
+
name: "addon-pages-source",
|
|
6394
|
+
scope: "system",
|
|
6395
|
+
mode: "collection",
|
|
6396
|
+
internal: true,
|
|
6397
|
+
methods: {
|
|
6398
|
+
/**
|
|
6399
|
+
* `internal: true` did not gate the mount (see the 2026-08-26 note on
|
|
6400
|
+
* `data-store-provider`) — this was reachable on the AppRouter by ANY
|
|
6401
|
+
* authenticated session at the default `auth: 'protected'`. The only
|
|
6402
|
+
* consumer, the `addon-pages-aggregator` builtin, reads it via
|
|
6403
|
+
* `ctx.capabilities.getCollection('addon-pages-source')` — LOCAL-PROCESS
|
|
6404
|
+
* only, never tRPC (per `ctx.capabilities` seeing only the local
|
|
6405
|
+
* process). The public, enriched listing admin-ui actually consumes is
|
|
6406
|
+
* the separate `addon-pages` cap, unaffected by this change.
|
|
6407
|
+
*/
|
|
6408
|
+
listPages: method(z.void(), z.array(AddonPageDeclarationSchema).readonly(), { auth: "admin" }) }
|
|
6409
|
+
};
|
|
6410
|
+
//#endregion
|
|
6345
6411
|
//#region src/capabilities/admin-ui.cap.ts
|
|
6346
6412
|
var StaticDirOutputSchema$1 = z.object({ staticDir: z.string() });
|
|
6347
6413
|
var VersionOutputSchema$1 = z.object({ version: z.string() });
|
|
@@ -6475,6 +6541,29 @@ function withoutCallerStamp(input) {
|
|
|
6475
6541
|
*/
|
|
6476
6542
|
var DEVICE_CHILDREN_BATCH_MAX = 256;
|
|
6477
6543
|
//#endregion
|
|
6544
|
+
//#region src/capabilities/pipeline-step-input.ts
|
|
6545
|
+
/**
|
|
6546
|
+
* The pipeline step-input shape and the run-result bridge, in a module that
|
|
6547
|
+
* imports nothing but zod and types.
|
|
6548
|
+
*
|
|
6549
|
+
* WHY A SEPARATE FILE (addon footprint, D28): both were declared in
|
|
6550
|
+
* `pipeline-executor.cap.ts`, whose import evaluates the whole executor schema
|
|
6551
|
+
* graph. An addon that only needs these two (the benchmark's `runPipelineTest`
|
|
6552
|
+
* action) paid ~130 MB of heap at load. `pipeline-executor.cap.ts` re-exports
|
|
6553
|
+
* them, so every existing import keeps working; addon server code takes them
|
|
6554
|
+
* from `@camstack/types/addon`.
|
|
6555
|
+
*/
|
|
6556
|
+
var PipelineStepInputSchema = z.lazy(() => z.object({
|
|
6557
|
+
addonId: z.string(),
|
|
6558
|
+
modelId: z.string().optional(),
|
|
6559
|
+
enabled: z.boolean().default(true),
|
|
6560
|
+
children: z.array(PipelineStepInputSchema).optional(),
|
|
6561
|
+
settings: z.record(z.string(), z.unknown()).optional(),
|
|
6562
|
+
jumpDeviceKey: z.string().optional()
|
|
6563
|
+
}));
|
|
6564
|
+
/** Typed bridge to the recursive `FrameResult` graph; validation is structural. */
|
|
6565
|
+
var PipelineRunResultBridge = z.custom();
|
|
6566
|
+
//#endregion
|
|
6478
6567
|
//#region src/capabilities/viewer-ui.cap.ts
|
|
6479
6568
|
var StaticDirOutputSchema = z.object({ staticDir: z.string() });
|
|
6480
6569
|
var VersionOutputSchema = z.object({ version: z.string() });
|
|
@@ -6766,6 +6855,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
6766
6855
|
"osd",
|
|
6767
6856
|
"osd-manager",
|
|
6768
6857
|
"pet-feeder",
|
|
6858
|
+
"pet-fountain",
|
|
6769
6859
|
"pipeline-analytics",
|
|
6770
6860
|
"pipeline-executor",
|
|
6771
6861
|
"pipeline-orchestrator",
|
|
@@ -8046,6 +8136,56 @@ var CAP_STATE_LEAVES = Object.freeze({
|
|
|
8046
8136
|
"valueType": "number"
|
|
8047
8137
|
}
|
|
8048
8138
|
],
|
|
8139
|
+
"pet-fountain": [
|
|
8140
|
+
{
|
|
8141
|
+
"path": "waterLevel",
|
|
8142
|
+
"valueType": "number"
|
|
8143
|
+
},
|
|
8144
|
+
{
|
|
8145
|
+
"path": "waterVolume",
|
|
8146
|
+
"valueType": "number"
|
|
8147
|
+
},
|
|
8148
|
+
{
|
|
8149
|
+
"path": "empty",
|
|
8150
|
+
"valueType": "boolean"
|
|
8151
|
+
},
|
|
8152
|
+
{
|
|
8153
|
+
"path": "pumpRunning",
|
|
8154
|
+
"valueType": "boolean"
|
|
8155
|
+
},
|
|
8156
|
+
{
|
|
8157
|
+
"path": "pumpIntervalEnabled",
|
|
8158
|
+
"valueType": "boolean"
|
|
8159
|
+
},
|
|
8160
|
+
{
|
|
8161
|
+
"path": "pumpOnTime",
|
|
8162
|
+
"valueType": "number"
|
|
8163
|
+
},
|
|
8164
|
+
{
|
|
8165
|
+
"path": "pumpOffTime",
|
|
8166
|
+
"valueType": "number"
|
|
8167
|
+
},
|
|
8168
|
+
{
|
|
8169
|
+
"path": "lastDrink",
|
|
8170
|
+
"valueType": "number"
|
|
8171
|
+
},
|
|
8172
|
+
{
|
|
8173
|
+
"path": "currentHourDrink",
|
|
8174
|
+
"valueType": "number"
|
|
8175
|
+
},
|
|
8176
|
+
{
|
|
8177
|
+
"path": "last24hDrink",
|
|
8178
|
+
"valueType": "number"
|
|
8179
|
+
},
|
|
8180
|
+
{
|
|
8181
|
+
"path": "todayDrink",
|
|
8182
|
+
"valueType": "number"
|
|
8183
|
+
},
|
|
8184
|
+
{
|
|
8185
|
+
"path": "error",
|
|
8186
|
+
"valueType": "string"
|
|
8187
|
+
}
|
|
8188
|
+
],
|
|
8049
8189
|
"power-meter": [
|
|
8050
8190
|
{
|
|
8051
8191
|
"path": "power",
|
|
@@ -9271,6 +9411,14 @@ function createDeviceProxy(api, binding, opts) {
|
|
|
9271
9411
|
setVolume: (input) => dispatch("pet-feeder", "petFeeder", "setVolume", "mutation", input),
|
|
9272
9412
|
getStatus: (input) => dispatch("pet-feeder", "petFeeder", "getStatus", "query", input)
|
|
9273
9413
|
};
|
|
9414
|
+
const petFountainInterface = {
|
|
9415
|
+
setPump: (input) => dispatch("pet-fountain", "petFountain", "setPump", "mutation", input),
|
|
9416
|
+
setPumpInterval: (input) => dispatch("pet-fountain", "petFountain", "setPumpInterval", "mutation", input),
|
|
9417
|
+
setPumpOnMinutes: (input) => dispatch("pet-fountain", "petFountain", "setPumpOnMinutes", "mutation", input),
|
|
9418
|
+
setPumpOffMinutes: (input) => dispatch("pet-fountain", "petFountain", "setPumpOffMinutes", "mutation", input),
|
|
9419
|
+
resetDailyConsumption: (input) => dispatch("pet-fountain", "petFountain", "resetDailyConsumption", "mutation", input),
|
|
9420
|
+
getStatus: (input) => dispatch("pet-fountain", "petFountain", "getStatus", "query", input)
|
|
9421
|
+
};
|
|
9274
9422
|
const pipelineAnalyticsInterface = {
|
|
9275
9423
|
getActiveTracks: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getActiveTracks", "query", input),
|
|
9276
9424
|
getTrack: (input) => dispatch("pipeline-analytics", "pipelineAnalytics", "getTrack", "query", input),
|
|
@@ -9739,6 +9887,7 @@ function createDeviceProxy(api, binding, opts) {
|
|
|
9739
9887
|
notifier: createSliceHandle(stateSource, binding.deviceId, "notifier"),
|
|
9740
9888
|
numericSensor: createSliceHandle(stateSource, binding.deviceId, "numeric-sensor"),
|
|
9741
9889
|
petFeeder: createSliceHandle(stateSource, binding.deviceId, "pet-feeder"),
|
|
9890
|
+
petFountain: createSliceHandle(stateSource, binding.deviceId, "pet-fountain"),
|
|
9742
9891
|
powerMeter: createSliceHandle(stateSource, binding.deviceId, "power-meter"),
|
|
9743
9892
|
presence: createSliceHandle(stateSource, binding.deviceId, "presence"),
|
|
9744
9893
|
pressureSensor: createSliceHandle(stateSource, binding.deviceId, "pressure-sensor"),
|
|
@@ -9829,6 +9978,7 @@ function createDeviceProxy(api, binding, opts) {
|
|
|
9829
9978
|
...bound("numeric-sensor") ? { numericSensor: numericSensorInterface } : {},
|
|
9830
9979
|
...bound("osd") ? { osd: osdInterface } : {},
|
|
9831
9980
|
...bound("pet-feeder") ? { petFeeder: petFeederInterface } : {},
|
|
9981
|
+
...bound("pet-fountain") ? { petFountain: petFountainInterface } : {},
|
|
9832
9982
|
...bound("pipeline-analytics") ? { pipelineAnalytics: pipelineAnalyticsInterface } : {},
|
|
9833
9983
|
...bound("power-meter") ? { powerMeter: powerMeterInterface } : {},
|
|
9834
9984
|
...bound("presence") ? { presence: presenceInterface } : {},
|
|
@@ -9892,7 +10042,7 @@ function createDeviceProxy(api, binding, opts) {
|
|
|
9892
10042
|
* can answer "may a rule actuate this?" without importing the schema barrel
|
|
9893
10043
|
* (~144MB RSS per runner, D28).
|
|
9894
10044
|
*
|
|
9895
|
-
* Coverage:
|
|
10045
|
+
* Coverage: 97 device-scoped capabilities.
|
|
9896
10046
|
*/
|
|
9897
10047
|
var DEVICE_SCOPED_CAPS = new Set([
|
|
9898
10048
|
"accessories",
|
|
@@ -9958,6 +10108,7 @@ var DEVICE_SCOPED_CAPS = new Set([
|
|
|
9958
10108
|
"numeric-sensor",
|
|
9959
10109
|
"osd",
|
|
9960
10110
|
"pet-feeder",
|
|
10111
|
+
"pet-fountain",
|
|
9961
10112
|
"pipeline-analytics",
|
|
9962
10113
|
"power-meter",
|
|
9963
10114
|
"presence",
|
|
@@ -10290,4 +10441,4 @@ function sleepCancellable(ms, signal) {
|
|
|
10290
10441
|
});
|
|
10291
10442
|
}
|
|
10292
10443
|
//#endregion
|
|
10293
|
-
export {
|
|
10444
|
+
export { toNodeId as $, RECORD_SECRET_COLLECTION_PREFIX as $n, SECRET_CLEAR as $r, entryBody as $t, HF_REPO as A, RECORDS_ERROR_CODES as An, resolveSecretMarkers as Ar, FrameHandleSchema as At, DEVICE_CHILDREN_BATCH_MAX as B, asRecordsError as Bn, normalizeNodeId as Br, parseProfileBrokerId as Bt, addonSliceHandleApi as C, BatchTooLargeError as Cn, mergeSecretStatePaths as Cr, BrokerStatusSchema as Ct, createSliceHandle as D, InvalidRecordError as Dn, KeychainWriteRefusedError as Dr, CamStreamResolutionSchema as Dt, createMirrorSource as E, ForeignSecretMarkerError as En, secretTreeFromSchema as Er, CamStreamKindSchema as Et, RawStateResultSchema as F, RecordsError as Fn, formatSecretScope as Fr, StreamSourceSchema as Ft, describeCustomActions as G, RECORD_DATABASES as Gn, WELL_KNOWN_TABS as Gr, ReadingQuantitySchema as Gt, withoutCallerStamp as H, RECORD_BATCH_MAX as Hn, createEvent as Hr, DEFAULT_DISPLAY_PREFERENCE as Ht, deviceOpsCapability as I, RevConflictError as In, globalSecretScope as Ir, SubscribeAudioChunksInputSchema as It, AddonPageDeclarationSchema as J, RECORD_ID_MAX_LENGTH as Jn, collectHydratedFieldValues as Jr, historyUnitFor as Jt, deviceCustomAction as K, RECORD_DEFAULT_MAX_DATA_BYTES as Kn, WELL_KNOWN_TAB_MAP as Kr, baseUnitOf as Kt, viewerUiCapability as L, TransactRefusedError as Ln, isSecretRef as Lr, SubscribeAudioChunksResultSchema as Lt, CAP_ADVANCE_FIELDS as M, RecordSecretUnavailableError as Mn, SECRET_REF_SCHEME as Mr, ProfileSlotSchema as Mt, CAP_NAMES as N, RecordTooLargeError as Nn, arrayItemFieldPath as Nr, ProfileSlotStatusSchema as Nt, DEFAULT_TOKEN_EXPIRY as O, NoCallerError as On, collectSecretMarkerRefs as Or, CameraStreamSchema as Ot, CAP_STATE_LEAVES as P, RecordUniqueViolationError as Pn, buildSecretRef as Pr, StreamSourceEntrySchema$1 as Pt, readNodePin as Q, RECORD_QUERY_MAX as Qn, resolveHydratedFieldValue as Qr, defineEntryKind as Qt, PipelineRunResultBridge as R, UnindexedFilterError as Rn, normalizeSecretOwner as Rr, makeProfileBrokerId as Rt, invokeTrpcLeaf as S, isZodSecret as Sn, normalizeAddonInitResult as Sr, BrokerStatsSchema as St, createLazyTrpcSource as T, FilterRequiredError as Tn, secretTreeFromPaths as Tr, CamProfileSchema as Tt, customAction as U, RECORD_BATCH_MAX_BYTES as Un, emitReadiness as Ur, DISPLAY_PREFERENCES as Ut, CALLER_STAMPED_CAPABILITIES as V, recordsErrorFromMessage as Vn, createDurableState as Vr, selectAssignedProfileSlots as Vt, defineCustomActions as W, RECORD_CLASSES as Wn, isEvent as Wr, QUANTITY_BASE as Wt, CAP_NODE_PIN_CONTEXT_KEY as X, RECORD_MAX_INDEXES as Xn, dehydrateSchema as Xr, readingMeta as Xt, addonPagesSourceCapability as Y, RECORD_MAX_DATA_BYTES as Yn, dehydrateConfigField as Yr, isReadingQuantity as Yt, nodePin as Z, RECORD_MAX_INDEX_FIELDS as Zn, hydrateSchema as Zr, makeInMemoryRecords as Zt, readErrorI18n as _, isAudioChunkFormat as _i, recordSecretCollection as _n, DATAPLANE_SECRET_HEADER as _r, emitDownForOwnedCaps as _t, asJsonArray as a, makeSecretMarker as ai, RecordKindDeclarationSchema as an, MIN_SCRUBBED_LENGTH as ar, PROVIDER_PIN_FIELD as at, isDeviceScopedCap as b, SECRET_META as bn, BaseAddon as br, AudioChunkFormatSchema as bt, asString as c, collectKeychainStoredKeys as ci, StoredRecordKindDeclarationSchema as cn, knownSecretCount as cr, historyItemFieldPath as ct, parseJsonUnknown as d, isSecretConfigField as di, defineRecordKinds as dn, shortSecretRefHash as dr, optionalMethod as dt, classifySecretWrite as ei, createRecordsAccess as en, RECORD_SETTINGS_MAX_ROWS as er, DEFAULT_RUNTIME_STATE_DURABILITY as et, hfModelUrl as f, omitTransientConfig as fi, REMOVE_LEAF as fn, PEER_BYTES_CHUNK_BYTES as fr, resolveCapMount as ft, ErrorI18nPayloadSchema as g, expandAudioChunkToF32le as gi, recordArrayItemPath as gn, PeerBytesTicketSchema as gr, ReadinessTimeoutError as gt, ErrorCodeSchema as h, audioChunkBytesPerSample as hi, parseSecretPath as hn, PEER_BYTES_TICKET_TTL_MS as hr, ReadinessRegistry as ht, asBoolean as i, isSecretMarkerLike as ii, RecordIndexSchema as in, createSecretsAccess as ir, HISTORY_UNIT_LABELS as it, RUNTIME_DEFAULTS as j, RecordNotFoundError as jn, transformSecretWrite as jr, ProfileRtspEntrySchema as jt, HF_BASE_URL as k, PlaintextSecretError as kn, isSecretRefOwnedBy as kr, DecodedAudioChunkSchema as kt, parseJsonArray as l, collectSecretConfigKeys as li, assertValidDeclaration as ln, registerKnownSecret as lr, isDeviceConfigCap as lt, CamstackError as m, AUDIO_CHUNK_FORMATS as mi, mapSecretLeaves as mn, PEER_BYTES_STALL_MS as mr, MODEL_FORMATS as mt, sleepCancellable as n, isSecretFieldView as ni, EntryDescriptorSchema as nn, resolveSecretViewsIn as nr, DEVICE_STATUS_METHOD as nt, asJsonObject as o, toSecretFieldView as oi, RecordKindNameSchema as on, clearKnownSecrets as or, event as ot, BOOT_RECOVERY_BACKOFF_MS as p, schemaDeclaresAnyField as pi, collectSecretLeaves as pn, PEER_BYTES_MAX_OUTSTANDING as pr, systemMethod as pt, adminUiCapability as q, RECORD_DELETE_BATCH as qn, collectHydratedFieldEntries as qr, displayUnitFor as qt, maskUrlCredentials as r, isSecretMarker as ri, RecordFieldPathSchema as rn, REVALIDATE_AFTER_MS as rr, HISTORY_DEFAULT_MIN_INTERVAL_MS as rt, asNumber as s, REDACTED_SECRET as si, RecordRetentionSchema as sn, forgetKnownSecret as sr, expandCapMethods as st, sleep as t, isSecretClear as ti, assertTransactScope as tn, RECORD_SWEEP_INTERVAL_MS as tr, DEVICE_SETTINGS_CONTRIBUTION_METHODS as tt, parseJsonObject as u, isKeychainStoredField as ui, declarationsOf as un, scrubKnownSecrets as ur, method as ut, userError as v, recordSecretRef as vn, SHARE_VIEW_KINDS as vr, readinessKey as vt, createEventBusSliceSource as w, DeclarationRefusedError as wn, parseSecretStatePath as wr, CAM_PROFILE_ORDER as wt, createDeviceProxy as x, collectZodSecretPaths as xn, classifyStoreError as xr, AudioStreamPickSchema as xt, DEVICE_SCOPED_CAPS as y, secretArrayPrefixes as yn, DisposerChain as yr, scopeKey as yt, PipelineStepInputSchema as z, UnknownRecordKindError as zn, parseSecretRef as zr, makeSourceBrokerId as zt };
|