@camstack/addon-provider-reolink 1.2.177 → 1.2.178
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.js +1178 -533
- package/dist/addon.mjs +1178 -533
- package/package.json +1 -1
package/dist/addon.mjs
CHANGED
|
@@ -27,7 +27,7 @@ import { URL as URL$1 } from "url";
|
|
|
27
27
|
import { spawn as spawn$1 } from "node:child_process";
|
|
28
28
|
import os, { tmpdir } from "node:os";
|
|
29
29
|
import { createReadStream } from "node:fs";
|
|
30
|
-
//#region ../types/dist/event-category-
|
|
30
|
+
//#region ../types/dist/event-category-B_0XEcLF.mjs
|
|
31
31
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
32
32
|
EventCategory["SystemBoot"] = "system.boot";
|
|
33
33
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -528,15 +528,6 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
528
528
|
EventCategory["AgentWsDisconnected"] = "agent.ws.disconnected";
|
|
529
529
|
EventCategory["AgentBackupActivated"] = "agent.backup.activated";
|
|
530
530
|
EventCategory["OrchestrationSettingsUpdated"] = "orchestration.settings-updated";
|
|
531
|
-
/**
|
|
532
|
-
* Per-agent hwaccel preference changed (user override set, cleared, or
|
|
533
|
-
* re-probed). Observability event — decoders pull the current pref at
|
|
534
|
-
* `createSession`, so running sessions keep their current backend until
|
|
535
|
-
* they rotate naturally (camera add/remove, stream restart). Future
|
|
536
|
-
* work can wire a listener in stream-broker that force-rotates live
|
|
537
|
-
* sessions; for now this event powers logs + admin-UI toast feedback.
|
|
538
|
-
*/
|
|
539
|
-
EventCategory["PipelineAgentHwaccelChanged"] = "pipeline.agent-hwaccel-changed";
|
|
540
531
|
EventCategory["MotionAnalysis"] = "detection.motion-analysis";
|
|
541
532
|
/** All raw motion zones from CCL before minArea filter — for UI debug overlay. */
|
|
542
533
|
EventCategory["MotionZonesRaw"] = "detection.motion-zones-raw";
|
|
@@ -5407,7 +5398,7 @@ var ZodIssueCode = {
|
|
|
5407
5398
|
var ZodFirstPartyTypeKind;
|
|
5408
5399
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5409
5400
|
//#endregion
|
|
5410
|
-
//#region ../types/dist/sleep-
|
|
5401
|
+
//#region ../types/dist/sleep-B0JG7-_F.mjs
|
|
5411
5402
|
/**
|
|
5412
5403
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5413
5404
|
* window to float samples (D455).
|
|
@@ -6773,32 +6764,12 @@ object({
|
|
|
6773
6764
|
audioCodec: string().optional(),
|
|
6774
6765
|
metadata: record(string(), unknown()).readonly().optional()
|
|
6775
6766
|
});
|
|
6776
|
-
var EncodedPacketSchema = object({
|
|
6777
|
-
type: _enum(["video", "audio"]),
|
|
6778
|
-
data: _instanceof(Uint8Array),
|
|
6779
|
-
pts: number(),
|
|
6780
|
-
dts: number(),
|
|
6781
|
-
keyframe: boolean(),
|
|
6782
|
-
codec: string()
|
|
6783
|
-
});
|
|
6784
|
-
var DecodedFrameSchema = object({
|
|
6785
|
-
data: _instanceof(Uint8Array),
|
|
6786
|
-
width: number(),
|
|
6787
|
-
height: number(),
|
|
6788
|
-
format: _enum([
|
|
6789
|
-
"jpeg",
|
|
6790
|
-
"rgb",
|
|
6791
|
-
"bgr",
|
|
6792
|
-
"yuv420",
|
|
6793
|
-
"gray"
|
|
6794
|
-
]),
|
|
6795
|
-
timestamp: number()
|
|
6796
|
-
});
|
|
6797
6767
|
/**
|
|
6798
6768
|
* Wire schema for `FrameHandle` — a zero-pixel, serialisable reference to a
|
|
6799
6769
|
* frame in a shared-memory ring (Phase 5 / D9). Mirrors the `FrameHandle` TS
|
|
6800
|
-
* interface in `interfaces/frame-handle.ts` field-for-field so a
|
|
6801
|
-
*
|
|
6770
|
+
* interface in `interfaces/frame-handle.ts` field-for-field so a cap method
|
|
6771
|
+
* (the runner's native-crop and pipeline-executor inputs) can carry handles
|
|
6772
|
+
* over tRPC / Moleculer.
|
|
6802
6773
|
*
|
|
6803
6774
|
* The `satisfies` assertion below pins this schema to the interface: if a
|
|
6804
6775
|
* field is added to / removed from `FrameHandle` without a matching schema
|
|
@@ -6824,50 +6795,6 @@ var FrameHandleSchema = object({
|
|
|
6824
6795
|
slotCount: number().int().positive()
|
|
6825
6796
|
});
|
|
6826
6797
|
/**
|
|
6827
|
-
* Pixel format a frame-handle subscriber can request from the broker
|
|
6828
|
-
* (Phase 5 / D9). The packed, raster subset of `FrameFormat` — the formats a
|
|
6829
|
-
* `frameSink: 'shm'` decoder session can write into a `FrameRing` slot.
|
|
6830
|
-
* `jpeg` is excluded: a variable-length stream is not a fixed-stride ring
|
|
6831
|
-
* payload, and no decoded-frame consumer requests it over the shm plane.
|
|
6832
|
-
*/
|
|
6833
|
-
var FrameHandleFormatSchema = _enum([
|
|
6834
|
-
"rgb",
|
|
6835
|
-
"bgr",
|
|
6836
|
-
"yuv420",
|
|
6837
|
-
"gray"
|
|
6838
|
-
]);
|
|
6839
|
-
/**
|
|
6840
|
-
* Input for `stream-broker.subscribeFrames` (Phase 5 / D9). A consumer asks the
|
|
6841
|
-
* broker for a `FrameHandle` stream of one `format`; the broker maintains one
|
|
6842
|
-
* shared-memory ring per `(brokerId, format)` actually requested, so a `gray`
|
|
6843
|
-
* subscriber (motion) and an `rgb` subscriber (detection) each read the format
|
|
6844
|
-
* they asked for with no broker-side conversion.
|
|
6845
|
-
*/
|
|
6846
|
-
var SubscribeFramesInputSchema = object({
|
|
6847
|
-
brokerId: string(),
|
|
6848
|
-
format: FrameHandleFormatSchema,
|
|
6849
|
-
/**
|
|
6850
|
-
* Optional reader-side cadence hint in frames per second. The broker does
|
|
6851
|
-
* NOT throttle — latest-wins ring reads drop frames implicitly for a slow
|
|
6852
|
-
* consumer. The value is echoed back in `SubscribeFramesResult.maxFps` so
|
|
6853
|
-
* the consumer can pace its own `pullFrameHandles` polling.
|
|
6854
|
-
*/
|
|
6855
|
-
maxFps: number().positive().optional(),
|
|
6856
|
-
/** Short caller-identity tag (`motion`, `detection`, …) for diagnostics. */
|
|
6857
|
-
tag: string().optional()
|
|
6858
|
-
});
|
|
6859
|
-
/**
|
|
6860
|
-
* Result of `stream-broker.subscribeFrames`. The consumer then polls
|
|
6861
|
-
* `pullFrameHandles({ subscriptionId, maxCount })` and feeds each returned
|
|
6862
|
-
* `FrameHandle` to a `FrameRingReader`.
|
|
6863
|
-
*/
|
|
6864
|
-
var SubscribeFramesResultSchema = object({
|
|
6865
|
-
/** Opaque id the consumer passes to `pullFrameHandles` / `unsubscribeFrames`. */
|
|
6866
|
-
subscriptionId: string(),
|
|
6867
|
-
/** Reader-side cadence hint (frames/s) — echoes `SubscribeFramesInput.maxFps`. */
|
|
6868
|
-
maxFps: number().nonnegative()
|
|
6869
|
-
});
|
|
6870
|
-
/**
|
|
6871
6798
|
* Wire schema for a decoded audio chunk (Phase 5 / D9). Mirrors the
|
|
6872
6799
|
* `DecodedAudioChunk` TS interface in `interfaces/stream-broker.ts`: PCM
|
|
6873
6800
|
* sample bytes plus the track parameters a consumer needs to interpret them.
|
|
@@ -6875,8 +6802,8 @@ var SubscribeFramesResultSchema = object({
|
|
|
6875
6802
|
* Audio chunks are tiny (a ~500ms AudioCodecSession window is a few KB of
|
|
6876
6803
|
* Float32 PCM), so unlike video frames they ship their bytes INLINE over
|
|
6877
6804
|
* tRPC / Moleculer — no shared-memory plane. `data` is typed `Uint8Array`
|
|
6878
|
-
* (the wire-serialisable supertype of `Buffer`)
|
|
6879
|
-
*
|
|
6805
|
+
* (the wire-serialisable supertype of `Buffer`); a `Buffer` is assignable to
|
|
6806
|
+
* it.
|
|
6880
6807
|
*/
|
|
6881
6808
|
var AudioChunkFormatSchema = _enum(AUDIO_CHUNK_FORMATS);
|
|
6882
6809
|
var DecodedAudioChunkSchema = object({
|
|
@@ -6894,11 +6821,10 @@ var DecodedAudioChunkSchema = object({
|
|
|
6894
6821
|
format: AudioChunkFormatSchema.optional()
|
|
6895
6822
|
});
|
|
6896
6823
|
/**
|
|
6897
|
-
* Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9).
|
|
6898
|
-
*
|
|
6899
|
-
*
|
|
6900
|
-
*
|
|
6901
|
-
* `pullAudioChunks`.
|
|
6824
|
+
* Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9). Audio ships
|
|
6825
|
+
* its bytes inline: a consumer asks the broker for the decoded audio-chunk
|
|
6826
|
+
* stream of one broker; the broker keeps a per-subscription bounded FIFO queue
|
|
6827
|
+
* the consumer drains via `pullAudioChunks`.
|
|
6902
6828
|
*/
|
|
6903
6829
|
var SubscribeAudioChunksInputSchema = object({
|
|
6904
6830
|
brokerId: string(),
|
|
@@ -6929,9 +6855,7 @@ var BrokerStatsSchema = object({
|
|
|
6929
6855
|
"stopped"
|
|
6930
6856
|
]),
|
|
6931
6857
|
inputFps: number(),
|
|
6932
|
-
decodeFps: number(),
|
|
6933
6858
|
encodedSubscribers: number(),
|
|
6934
|
-
decodedSubscribers: number(),
|
|
6935
6859
|
uptimeMs: number(),
|
|
6936
6860
|
bitrateKbps: number(),
|
|
6937
6861
|
idrIntervalMs: number(),
|
|
@@ -6944,14 +6868,6 @@ var BrokerStatsSchema = object({
|
|
|
6944
6868
|
preBufferMs: number(),
|
|
6945
6869
|
preBufferPackets: number(),
|
|
6946
6870
|
/**
|
|
6947
|
-
* Moleculer node id of the decoder provider currently servicing this
|
|
6948
|
-
* stream's decoded subscribers. `null` until the deferred decoder is
|
|
6949
|
-
* created (no decoded clients yet, or codec not detected). Surfaces the
|
|
6950
|
-
* runtime decoder placement so the UI can show "Decoder: <agent>" without
|
|
6951
|
-
* a separate cap call per broker.
|
|
6952
|
-
*/
|
|
6953
|
-
decoderNodeId: string().nullable(),
|
|
6954
|
-
/**
|
|
6955
6871
|
* Detected audio track parameters from the RTSP DESCRIBE / SDP. `null`
|
|
6956
6872
|
* when the stream has no audio track or the broker is in cold start.
|
|
6957
6873
|
* `supported = false` means the codec was detected but the local
|
|
@@ -10355,70 +10271,6 @@ var StorageLocationDeclarationSchema = object({
|
|
|
10355
10271
|
"backup"
|
|
10356
10272
|
]).optional()
|
|
10357
10273
|
});
|
|
10358
|
-
var DecoderStatsSchema = object({
|
|
10359
|
-
inputFps: number(),
|
|
10360
|
-
outputFps: number(),
|
|
10361
|
-
avgDecodeTimeMs: number(),
|
|
10362
|
-
droppedFrames: number(),
|
|
10363
|
-
/**
|
|
10364
|
-
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
10365
|
-
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
10366
|
-
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
10367
|
-
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
10368
|
-
*/
|
|
10369
|
-
lagMs: number().optional(),
|
|
10370
|
-
effectiveFps: number().optional(),
|
|
10371
|
-
adaptiveFps: number().optional()
|
|
10372
|
-
});
|
|
10373
|
-
var DecoderSessionConfigSchema = object({
|
|
10374
|
-
codec: string(),
|
|
10375
|
-
maxFps: number().default(0),
|
|
10376
|
-
outputFormat: _enum([
|
|
10377
|
-
"jpeg",
|
|
10378
|
-
"rgb",
|
|
10379
|
-
"bgr",
|
|
10380
|
-
"yuv420",
|
|
10381
|
-
"gray"
|
|
10382
|
-
]).default("jpeg"),
|
|
10383
|
-
scale: number().default(1),
|
|
10384
|
-
width: number().optional(),
|
|
10385
|
-
height: number().optional(),
|
|
10386
|
-
/**
|
|
10387
|
-
* Identifier of the camera this decoder session serves. Optional
|
|
10388
|
-
* because the cap is generic (any caller could request decode), but
|
|
10389
|
-
* stream-broker passes it so decoder logs include `deviceId` for
|
|
10390
|
-
* per-camera filtering when diagnosing failures (e.g. node-av
|
|
10391
|
-
* sendPacket errors on a single hung camera).
|
|
10392
|
-
*/
|
|
10393
|
-
deviceId: number().int().nonnegative().optional(),
|
|
10394
|
-
/**
|
|
10395
|
-
* Free-form tag for log scoping. Stream-broker uses
|
|
10396
|
-
* `broker:<deviceId>/<profile>`. Decoder session logger surfaces it
|
|
10397
|
-
* on every line so `grep tag=broker:5/high` filters one camera
|
|
10398
|
-
* profile cleanly.
|
|
10399
|
-
*/
|
|
10400
|
-
tag: string().optional(),
|
|
10401
|
-
/**
|
|
10402
|
-
* Where the session delivers decoded frames (Phase 5 / D9):
|
|
10403
|
-
*
|
|
10404
|
-
* - `'callback'` (default) — the legacy pixel path: decoded frames are
|
|
10405
|
-
* buffered as `DecodedFrame`s and drained via `pullFrames`.
|
|
10406
|
-
* - `'shm'` — the shared-memory frame plane: decoded frames are written
|
|
10407
|
-
* into an OS shared-memory ring and drained as zero-pixel
|
|
10408
|
-
* `FrameHandle`s via `pullHandles`. A session is one mode or the
|
|
10409
|
-
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
10410
|
-
* `pullHandles` returns nothing for a `'callback'` session.
|
|
10411
|
-
*/
|
|
10412
|
-
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
10413
|
-
/**
|
|
10414
|
-
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
10415
|
-
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
10416
|
-
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
10417
|
-
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
10418
|
-
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
10419
|
-
*/
|
|
10420
|
-
debug: boolean().optional()
|
|
10421
|
-
});
|
|
10422
10274
|
var EU_DST = {
|
|
10423
10275
|
offsetHours: 1,
|
|
10424
10276
|
startMonth: 3,
|
|
@@ -11093,57 +10945,26 @@ var ClipSearchStrictnessSchema = _enum([
|
|
|
11093
10945
|
"balanced",
|
|
11094
10946
|
"strict"
|
|
11095
10947
|
]);
|
|
11096
|
-
|
|
11097
|
-
|
|
11098
|
-
id: "person",
|
|
11099
|
-
name: "Person"
|
|
11100
|
-
},
|
|
11101
|
-
{
|
|
11102
|
-
id: "vehicle",
|
|
11103
|
-
name: "Vehicle"
|
|
11104
|
-
},
|
|
11105
|
-
{
|
|
11106
|
-
id: "animal",
|
|
11107
|
-
name: "Animal"
|
|
11108
|
-
},
|
|
11109
|
-
{
|
|
11110
|
-
id: "package",
|
|
11111
|
-
name: "Package"
|
|
11112
|
-
}
|
|
11113
|
-
].map((l) => l.id));
|
|
11114
|
-
var COCO_TO_MACRO = {
|
|
11115
|
-
mapping: {
|
|
11116
|
-
person: "person",
|
|
11117
|
-
bicycle: "vehicle",
|
|
11118
|
-
car: "vehicle",
|
|
11119
|
-
motorcycle: "vehicle",
|
|
11120
|
-
airplane: "vehicle",
|
|
11121
|
-
bus: "vehicle",
|
|
11122
|
-
train: "vehicle",
|
|
11123
|
-
truck: "vehicle",
|
|
11124
|
-
boat: "vehicle",
|
|
11125
|
-
bird: "animal",
|
|
11126
|
-
cat: "animal",
|
|
11127
|
-
dog: "animal",
|
|
11128
|
-
horse: "animal",
|
|
11129
|
-
sheep: "animal",
|
|
11130
|
-
cow: "animal",
|
|
11131
|
-
elephant: "animal",
|
|
11132
|
-
bear: "animal",
|
|
11133
|
-
zebra: "animal",
|
|
11134
|
-
giraffe: "animal",
|
|
11135
|
-
suitcase: "package",
|
|
11136
|
-
backpack: "package",
|
|
11137
|
-
handbag: "package"
|
|
11138
|
-
},
|
|
11139
|
-
preserveOriginal: false
|
|
11140
|
-
};
|
|
11141
|
-
/** Steps a root detector may declare it fills. */
|
|
11142
|
-
var FILLABLE_STEP_IDS = [
|
|
10948
|
+
/** Steps whose effect a root label can BE. */
|
|
10949
|
+
var LABEL_SUPPLY_STEP_IDS = [
|
|
11143
10950
|
"animal-classifier",
|
|
11144
10951
|
"vehicle-classifier",
|
|
11145
10952
|
"package-detection"
|
|
11146
10953
|
];
|
|
10954
|
+
/** Steps whose box a root detection can BE. */
|
|
10955
|
+
var CROP_SUPPLY_STEP_IDS = ["plate-detection", "face-detection"];
|
|
10956
|
+
/**
|
|
10957
|
+
* Steps whose per-detection MASK a root detection can carry (D737). The live
|
|
10958
|
+
* mask step is `segmentation` — a frame-plane refiner that runs its own model
|
|
10959
|
+
* once per detection crop. (`instance-segmentation` is a dormant step id that
|
|
10960
|
+
* no camera tree carries.)
|
|
10961
|
+
*/
|
|
10962
|
+
var MASK_SUPPLY_STEP_IDS = ["segmentation"];
|
|
10963
|
+
[
|
|
10964
|
+
...LABEL_SUPPLY_STEP_IDS,
|
|
10965
|
+
...CROP_SUPPLY_STEP_IDS,
|
|
10966
|
+
...MASK_SUPPLY_STEP_IDS
|
|
10967
|
+
];
|
|
11147
10968
|
var MODEL_FORMATS = [
|
|
11148
10969
|
"onnx",
|
|
11149
10970
|
"coreml",
|
|
@@ -11172,7 +10993,53 @@ var ModelFormatEntrySchema = object({
|
|
|
11172
10993
|
/** Multi-file payload (directory members or sibling files). */
|
|
11173
10994
|
files: array(string()).readonly().optional(),
|
|
11174
10995
|
/** Runtime(s) that can use this format. If omitted, inferred from ModelFormat key */
|
|
11175
|
-
runtimes: array(_enum(["python"])).readonly().optional()
|
|
10996
|
+
runtimes: array(_enum(["python"])).readonly().optional(),
|
|
10997
|
+
/**
|
|
10998
|
+
* Content revision of the artefact, for one hosted OFF the CamStack mirror.
|
|
10999
|
+
* A format on the mirror leaves it unset: its revision (the sha256 of its
|
|
11000
|
+
* weight file) comes from the downloader's generated table, kept in step
|
|
11001
|
+
* with the mirror by `scripts/check-hosted-model-revisions.ts` (D744). A
|
|
11002
|
+
* node records the revision it downloaded next to the file
|
|
11003
|
+
* (`<file>.revision`); a copy with no record or a different one is stale
|
|
11004
|
+
* unless its weight file hashes to the revision, and a stale copy is
|
|
11005
|
+
* downloaded again, the old one serving until the new one is complete. No
|
|
11006
|
+
* revision at all ⇒ a file on disk is current, whatever it holds (D743).
|
|
11007
|
+
*/
|
|
11008
|
+
revision: string().min(1).optional()
|
|
11009
|
+
});
|
|
11010
|
+
/**
|
|
11011
|
+
* What a node holds for one (model, format) (D746). `current` is a complete
|
|
11012
|
+
* copy at its catalog revision — exactly what `downloaded: true` means.
|
|
11013
|
+
* `stale` is bytes on disk that are not (yet) proven current under D743/D744:
|
|
11014
|
+
* no or a different revision record, or a missing sibling. `missing` is no
|
|
11015
|
+
* copy. `downloaded` alone folds `stale` into "not downloaded", which hid
|
|
11016
|
+
* reclaimable bytes and a copy about to be replaced.
|
|
11017
|
+
*/
|
|
11018
|
+
var ModelOnDiskStateSchema = _enum([
|
|
11019
|
+
"current",
|
|
11020
|
+
"stale",
|
|
11021
|
+
"missing"
|
|
11022
|
+
]);
|
|
11023
|
+
/**
|
|
11024
|
+
* The numeric precision of one format's BUILD (D746) — reported only when the
|
|
11025
|
+
* build states it (file-name token, an INT8 variant, an EdgeTPU compile, a
|
|
11026
|
+
* CamStack Core ML export). Absent means "not stated", never "fp32".
|
|
11027
|
+
*/
|
|
11028
|
+
var ModelFormatPrecisionSchema = _enum([
|
|
11029
|
+
"fp32",
|
|
11030
|
+
"fp16",
|
|
11031
|
+
"int8"
|
|
11032
|
+
]);
|
|
11033
|
+
/**
|
|
11034
|
+
* One format of one model as a node's `pipelineExecutor.getSchema` reports it.
|
|
11035
|
+
* `onDisk` / `precision` are optional for version skew: a runner that predates
|
|
11036
|
+
* them omits them, and a reader falls back to `downloaded`.
|
|
11037
|
+
*/
|
|
11038
|
+
var PipelineModelFormatStatusSchema = object({
|
|
11039
|
+
downloaded: boolean(),
|
|
11040
|
+
sizeMB: number(),
|
|
11041
|
+
onDisk: ModelOnDiskStateSchema.optional(),
|
|
11042
|
+
precision: ModelFormatPrecisionSchema.optional()
|
|
11176
11043
|
});
|
|
11177
11044
|
/**
|
|
11178
11045
|
* Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
|
|
@@ -11276,12 +11143,46 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
|
|
|
11276
11143
|
/** True when the weights or their data forbid commercial use. */
|
|
11277
11144
|
nonCommercial: boolean().optional()
|
|
11278
11145
|
}));
|
|
11279
|
-
/**
|
|
11280
|
-
|
|
11281
|
-
|
|
11282
|
-
|
|
11283
|
-
|
|
11284
|
-
|
|
11146
|
+
/**
|
|
11147
|
+
* One step a ROOT detector can supply from its own output (D730) — see
|
|
11148
|
+
* `ModelCatalogEntry.suppliesSteps`.
|
|
11149
|
+
*
|
|
11150
|
+
* - `label`: the root's raw class IS the step's answer. `labelToEffect` maps
|
|
11151
|
+
* the root's label to the step's vocabulary; `uncovered` is the vocabulary
|
|
11152
|
+
* the root cannot produce (shown as unavailable, never a blocker).
|
|
11153
|
+
* - `crop`: the root draws the box the step would have found (`license_plate`
|
|
11154
|
+
* for plate-detection, `face` for face-detection). The box becomes a detail
|
|
11155
|
+
* child of the `parentMacro` detection that contains it — never a track.
|
|
11156
|
+
* - `mask`: the root's decode emits an instance mask with every detection (a
|
|
11157
|
+
* YOLO26-seg root, D737) — the `segmentation` step's result, carried on the
|
|
11158
|
+
* detection in the shape that step produces. Derived from the model's
|
|
11159
|
+
* postprocessor on read, never stored by an import.
|
|
11160
|
+
*/
|
|
11161
|
+
var RootStepSupplySchema = discriminatedUnion("kind", [
|
|
11162
|
+
object({
|
|
11163
|
+
kind: literal("label"),
|
|
11164
|
+
stepId: _enum(LABEL_SUPPLY_STEP_IDS),
|
|
11165
|
+
labelToEffect: record(string(), string()),
|
|
11166
|
+
uncovered: array(string()).readonly()
|
|
11167
|
+
}),
|
|
11168
|
+
object({
|
|
11169
|
+
kind: literal("crop"),
|
|
11170
|
+
stepId: _enum(CROP_SUPPLY_STEP_IDS),
|
|
11171
|
+
rootLabels: array(string()).readonly(),
|
|
11172
|
+
parentMacro: _enum(["vehicle", "person"]),
|
|
11173
|
+
childClass: _enum(["plate", "face"]),
|
|
11174
|
+
/**
|
|
11175
|
+
* The root's smaller input side, stamped on read by `rootSuppliesOf` from
|
|
11176
|
+
* the model entry — what a step's `minRootInputPx` gate judges. Never
|
|
11177
|
+
* stored by an import.
|
|
11178
|
+
*/
|
|
11179
|
+
rootInputPx: number().int().positive().optional()
|
|
11180
|
+
}),
|
|
11181
|
+
object({
|
|
11182
|
+
kind: literal("mask"),
|
|
11183
|
+
stepId: _enum(MASK_SUPPLY_STEP_IDS)
|
|
11184
|
+
})
|
|
11185
|
+
]);
|
|
11285
11186
|
var ModelCatalogEntrySchema = object({
|
|
11286
11187
|
id: string(),
|
|
11287
11188
|
name: string(),
|
|
@@ -11347,6 +11248,35 @@ var ModelCatalogEntrySchema = object({
|
|
|
11347
11248
|
*/
|
|
11348
11249
|
defaultConfidence: number().min(0).max(1).optional(),
|
|
11349
11250
|
/**
|
|
11251
|
+
* Per-MODEL default of the per-class confidence floors (`minConfidence<Macro>`
|
|
11252
|
+
* on a detector step), keyed by macro class: `{ person: 0.45 }`. A class
|
|
11253
|
+
* absent here runs at the step slider's global default. The same row shape
|
|
11254
|
+
* the floor measurement produces (`model-floors.json`: modelId → floors), so
|
|
11255
|
+
* a measured table is copied in as-is. An operator override is bound to the
|
|
11256
|
+
* model it was made for and does not survive a model change (D738). A custom
|
|
11257
|
+
* / imported model may declare it; without it, the global defaults apply.
|
|
11258
|
+
*/
|
|
11259
|
+
defaultClassFloors: record(string(), number().min(0).max(1)).optional(),
|
|
11260
|
+
/**
|
|
11261
|
+
* The inference precision this model's OpenVINO IR needs on an Intel GPU.
|
|
11262
|
+
* Absent ⇒ the device default (f16 on a GPU). Set to `'f32'` for an FP32 IR
|
|
11263
|
+
* that produces invalid output at f16 — measured 2026-10-07 for YOLO26
|
|
11264
|
+
* base IRs (`yolo26s`: 0 true / 146 false positives; `yolo26m*`: NaN
|
|
11265
|
+
* scores) on the Core Ultra iGPU and the N100. Threaded to the pool as
|
|
11266
|
+
* `PoolModelConfig.gpuInferencePrecision`; the pool sets
|
|
11267
|
+
* INFERENCE_PRECISION_HINT on a GPU only. Costs ~60% latency on the GPU.
|
|
11268
|
+
*/
|
|
11269
|
+
gpuInferencePrecision: _enum(["f32", "f16"]).optional(),
|
|
11270
|
+
/**
|
|
11271
|
+
* ROOT detectors only: per supplied step (`animal-classifier`, …), the
|
|
11272
|
+
* minimum DETECTION score from which this root's own fine label (species,
|
|
11273
|
+
* vehicle type — D736 root supply) is taken (D741). Below it the detection
|
|
11274
|
+
* keeps its macro class without the fine label. `1` = never take it from
|
|
11275
|
+
* this root. Absent ⇒ no floor beyond the macro floor. The supplied step's
|
|
11276
|
+
* `minConfidence` slider, bound to the ROOT model, overrides it.
|
|
11277
|
+
*/
|
|
11278
|
+
suppliedLabelFloors: record(string(), number().min(0).max(1)).optional(),
|
|
11279
|
+
/**
|
|
11350
11280
|
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
11351
11281
|
* onto the canonical template) before this step runs, instead of a plain
|
|
11352
11282
|
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
@@ -11408,15 +11338,15 @@ var ModelCatalogEntrySchema = object({
|
|
|
11408
11338
|
*/
|
|
11409
11339
|
classMap: DetectionCatalogClassMapSchema.optional(),
|
|
11410
11340
|
/**
|
|
11411
|
-
* The pipeline steps this ROOT detector
|
|
11412
|
-
* its labels name
|
|
11413
|
-
*
|
|
11414
|
-
* labelmap by `
|
|
11415
|
-
*
|
|
11416
|
-
*
|
|
11417
|
-
* `
|
|
11341
|
+
* The pipeline steps this ROOT detector can supply from its own output
|
|
11342
|
+
* (D730): its labels name a step's effect (`deer` for `animal-classifier`)
|
|
11343
|
+
* or draw a step's box (`license_plate` for `plate-detection`). Computed at
|
|
11344
|
+
* import from THIS model's labelmap by `deriveRootSupplies`, never written
|
|
11345
|
+
* by hand and never assumed per family; a row without it is derived on read
|
|
11346
|
+
* (`rootSuppliesOf`). Whether a camera uses it is the step's own
|
|
11347
|
+
* `useRootModel` flag (`resolveRootSupply`).
|
|
11418
11348
|
*/
|
|
11419
|
-
|
|
11349
|
+
suppliesSteps: array(RootStepSupplySchema).readonly().optional(),
|
|
11420
11350
|
/**
|
|
11421
11351
|
* The model's CLIP feature-space contract (text encoder, dimension, vector
|
|
11422
11352
|
* index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
|
|
@@ -13019,13 +12949,6 @@ var BrokerRtspClientSchema = object({
|
|
|
13019
12949
|
lastRtpAt: number(),
|
|
13020
12950
|
bytesSent: number()
|
|
13021
12951
|
});
|
|
13022
|
-
var BrokerDecodedClientSchema = object({
|
|
13023
|
-
tag: string(),
|
|
13024
|
-
subscribedAt: number(),
|
|
13025
|
-
maxFps: number(),
|
|
13026
|
-
framesDelivered: number(),
|
|
13027
|
-
framesDropped: number()
|
|
13028
|
-
});
|
|
13029
12952
|
var BrokerAudioClientSchema = object({
|
|
13030
12953
|
tag: string(),
|
|
13031
12954
|
subscribedAt: number(),
|
|
@@ -13117,7 +13040,6 @@ var BrokerEncodedClientSchema = object({
|
|
|
13117
13040
|
});
|
|
13118
13041
|
var BrokerClientsSchema = object({
|
|
13119
13042
|
rtsp: array(BrokerRtspClientSchema).readonly(),
|
|
13120
|
-
decoded: array(BrokerDecodedClientSchema).readonly(),
|
|
13121
13043
|
audio: array(BrokerAudioClientSchema).readonly(),
|
|
13122
13044
|
encoded: array(BrokerEncodedClientSchema).readonly(),
|
|
13123
13045
|
pipeClients: number(),
|
|
@@ -13486,11 +13408,7 @@ method(object({
|
|
|
13486
13408
|
auth: "admin"
|
|
13487
13409
|
}), method(object({ brokerId: string() }), BrokerClientsSchema), method(object({
|
|
13488
13410
|
brokerId: string(),
|
|
13489
|
-
channel: _enum([
|
|
13490
|
-
"rtsp",
|
|
13491
|
-
"decoded",
|
|
13492
|
-
"audio"
|
|
13493
|
-
]),
|
|
13411
|
+
channel: _enum(["rtsp", "audio"]),
|
|
13494
13412
|
handle: string()
|
|
13495
13413
|
}), object({ killed: boolean() }), {
|
|
13496
13414
|
kind: "mutation",
|
|
@@ -13525,10 +13443,7 @@ method(object({
|
|
|
13525
13443
|
}), method(SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, { kind: "mutation" }), method(object({
|
|
13526
13444
|
subscriptionId: string(),
|
|
13527
13445
|
maxCount: number().int().positive().default(8)
|
|
13528
|
-
}), array(DecodedAudioChunkSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(
|
|
13529
|
-
subscriptionId: string(),
|
|
13530
|
-
maxCount: number().int().positive().default(4)
|
|
13531
|
-
}), array(FrameHandleSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(object({
|
|
13446
|
+
}), array(DecodedAudioChunkSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(object({
|
|
13532
13447
|
brokerId: string(),
|
|
13533
13448
|
seconds: number().min(0).max(30)
|
|
13534
13449
|
}), _void(), {
|
|
@@ -14787,54 +14702,12 @@ id: union([string(), number()]) }), {
|
|
|
14787
14702
|
kind: "mutation",
|
|
14788
14703
|
auth: "admin"
|
|
14789
14704
|
});
|
|
14790
|
-
|
|
14791
|
-
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
14792
|
-
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
14793
|
-
* observe ring pressure (slot count, byte budget, hit/miss ratio).
|
|
14794
|
-
*/
|
|
14795
|
-
var ShmRingStatsSchema = object({
|
|
14796
|
-
sessionId: string(),
|
|
14797
|
-
slotCount: number().int(),
|
|
14798
|
-
slotByteLength: number().int(),
|
|
14799
|
-
segmentBytes: number().int(),
|
|
14800
|
-
budgetMb: number().int(),
|
|
14801
|
-
framesWritten: number().int(),
|
|
14802
|
-
getFrameHits: number().int(),
|
|
14803
|
-
getFrameMisses: number().int()
|
|
14804
|
-
});
|
|
14805
|
-
method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
14705
|
+
method(_void(), object({
|
|
14806
14706
|
id: string(),
|
|
14807
14707
|
name: string(),
|
|
14808
|
-
isPullMode: boolean().optional(),
|
|
14809
|
-
priority: number().optional(),
|
|
14810
14708
|
hwaccel: string().optional(),
|
|
14811
14709
|
probedBestHwaccel: string().optional()
|
|
14812
|
-
})), method(
|
|
14813
|
-
sessionId: string(),
|
|
14814
|
-
nodeId: string()
|
|
14815
|
-
})), method(object({ sessionId: string() }), _void()), method(object({
|
|
14816
|
-
sessionId: string(),
|
|
14817
|
-
packet: EncodedPacketSchema
|
|
14818
|
-
}), _void()), method(object({
|
|
14819
|
-
sessionId: string(),
|
|
14820
|
-
url: string()
|
|
14821
|
-
}), _void()), method(object({
|
|
14822
|
-
sessionId: string(),
|
|
14823
|
-
maxCount: number().default(1),
|
|
14824
|
-
waitMs: number().optional()
|
|
14825
|
-
}), array(DecodedFrameSchema)), method(object({
|
|
14826
|
-
sessionId: string(),
|
|
14827
|
-
maxCount: number().default(1),
|
|
14828
|
-
waitMs: number().optional()
|
|
14829
|
-
}), array(FrameHandleSchema)), method(object({ handle: FrameHandleSchema }), DecodedFrameSchema.nullable()), method(object({ sessionId: string() }), ShmRingStatsSchema.nullable()), method(object({
|
|
14830
|
-
sessionId: string(),
|
|
14831
|
-
config: DecoderSessionConfigSchema.partial()
|
|
14832
|
-
}), _void()), method(object({ sessionId: string() }), DecoderStatsSchema), method(_void(), array(object({
|
|
14833
|
-
sessionId: string(),
|
|
14834
|
-
codec: string(),
|
|
14835
|
-
outputFormat: string(),
|
|
14836
|
-
createdAtMs: number()
|
|
14837
|
-
})).readonly()), method(_void(), object({ backend: string() }), {
|
|
14710
|
+
})), method(_void(), object({ backend: string() }), {
|
|
14838
14711
|
kind: "mutation",
|
|
14839
14712
|
auth: "admin"
|
|
14840
14713
|
});
|
|
@@ -15947,6 +15820,10 @@ var DeviceInfoSchema = object({
|
|
|
15947
15820
|
isCamera: boolean(),
|
|
15948
15821
|
/** Current config values — serializable snapshot */
|
|
15949
15822
|
config: record(string(), unknown()),
|
|
15823
|
+
/** Paths inside `config` the device's schema declares secret (D783) —
|
|
15824
|
+
* what the non-admin redaction withholds. Paths, never values. Absent
|
|
15825
|
+
* when the owning runner has not reported them. */
|
|
15826
|
+
secretConfigPaths: array(string()).optional(),
|
|
15950
15827
|
/** Hardware + identity blob (manufacturer / model / firmware / sn /
|
|
15951
15828
|
* uid / mac / …). Populated by drivers; editable via setMetadata. */
|
|
15952
15829
|
metadata: record(string(), unknown()).nullable().optional(),
|
|
@@ -16152,7 +16029,13 @@ var DeviceRegisterPayloadSchema = object({
|
|
|
16152
16029
|
* call (workers re-register on init), so probe-driven updates
|
|
16153
16030
|
* (e.g. PTZ flag flipping after the abilities probe) propagate. */
|
|
16154
16031
|
features: array(string()).optional(),
|
|
16155
|
-
config: record(string(), unknown())
|
|
16032
|
+
config: record(string(), unknown()),
|
|
16033
|
+
/** Config paths the device's own schema DECLARES secret
|
|
16034
|
+
* (`.meta({ secret: true })` — dotted, `[]` for array items, e.g.
|
|
16035
|
+
* `connection.password`). Re-published on every register; the non-admin
|
|
16036
|
+
* redaction withholds them at any depth (D783). Optional: an older runner
|
|
16037
|
+
* omits it and the keyword backstop applies. */
|
|
16038
|
+
secretConfigPaths: array(string()).optional()
|
|
16156
16039
|
});
|
|
16157
16040
|
var DeviceRemovePayloadSchema = object({ deviceId: number() });
|
|
16158
16041
|
var DevicePersistConfigPayloadSchema = object({
|
|
@@ -16998,6 +16881,12 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
|
16998
16881
|
kind: "mutation",
|
|
16999
16882
|
auth: "admin"
|
|
17000
16883
|
});
|
|
16884
|
+
var HUB_ADDRESS_ROLES = [
|
|
16885
|
+
"appConnections",
|
|
16886
|
+
"notificationTaps",
|
|
16887
|
+
"internal",
|
|
16888
|
+
"publicEndpoint"
|
|
16889
|
+
];
|
|
17001
16890
|
/**
|
|
17002
16891
|
* Transport bounds for AI capability methods.
|
|
17003
16892
|
*
|
|
@@ -17845,7 +17734,14 @@ var LoginMethodContributionSchema = discriminatedUnion("kind", [
|
|
|
17845
17734
|
icon: string().optional(),
|
|
17846
17735
|
/** Addon-owned HTTP route the button navigates to (GET). */
|
|
17847
17736
|
startUrl: string(),
|
|
17848
|
-
stage: LoginStageEnum
|
|
17737
|
+
stage: LoginStageEnum,
|
|
17738
|
+
/**
|
|
17739
|
+
* The provider names an external identity a signed-in user can link to
|
|
17740
|
+
* their own account (D782): `auth.listLinkableProviders` /
|
|
17741
|
+
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
17742
|
+
* whatever their id. Absent / false — a login button only (magic-link).
|
|
17743
|
+
*/
|
|
17744
|
+
linkable: boolean().optional()
|
|
17849
17745
|
}),
|
|
17850
17746
|
object({
|
|
17851
17747
|
kind: literal("widget"),
|
|
@@ -18781,6 +18677,51 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
|
|
|
18781
18677
|
kind: "mutation",
|
|
18782
18678
|
auth: "admin"
|
|
18783
18679
|
});
|
|
18680
|
+
new Set([
|
|
18681
|
+
{
|
|
18682
|
+
id: "person",
|
|
18683
|
+
name: "Person"
|
|
18684
|
+
},
|
|
18685
|
+
{
|
|
18686
|
+
id: "vehicle",
|
|
18687
|
+
name: "Vehicle"
|
|
18688
|
+
},
|
|
18689
|
+
{
|
|
18690
|
+
id: "animal",
|
|
18691
|
+
name: "Animal"
|
|
18692
|
+
},
|
|
18693
|
+
{
|
|
18694
|
+
id: "package",
|
|
18695
|
+
name: "Package"
|
|
18696
|
+
}
|
|
18697
|
+
].map((l) => l.id));
|
|
18698
|
+
var COCO_TO_MACRO = {
|
|
18699
|
+
mapping: {
|
|
18700
|
+
person: "person",
|
|
18701
|
+
bicycle: "vehicle",
|
|
18702
|
+
car: "vehicle",
|
|
18703
|
+
motorcycle: "vehicle",
|
|
18704
|
+
airplane: "vehicle",
|
|
18705
|
+
bus: "vehicle",
|
|
18706
|
+
train: "vehicle",
|
|
18707
|
+
truck: "vehicle",
|
|
18708
|
+
boat: "vehicle",
|
|
18709
|
+
bird: "animal",
|
|
18710
|
+
cat: "animal",
|
|
18711
|
+
dog: "animal",
|
|
18712
|
+
horse: "animal",
|
|
18713
|
+
sheep: "animal",
|
|
18714
|
+
cow: "animal",
|
|
18715
|
+
elephant: "animal",
|
|
18716
|
+
bear: "animal",
|
|
18717
|
+
zebra: "animal",
|
|
18718
|
+
giraffe: "animal",
|
|
18719
|
+
suitcase: "package",
|
|
18720
|
+
backpack: "package",
|
|
18721
|
+
handbag: "package"
|
|
18722
|
+
},
|
|
18723
|
+
preserveOriginal: false
|
|
18724
|
+
};
|
|
18784
18725
|
var AUDIO_MACRO_LABELS = [
|
|
18785
18726
|
{
|
|
18786
18727
|
id: "speech",
|
|
@@ -21183,7 +21124,13 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
21183
21124
|
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
21184
21125
|
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
21185
21126
|
*/
|
|
21186
|
-
notifySensorRewatched: boolean().optional()
|
|
21127
|
+
notifySensorRewatched: boolean().optional(),
|
|
21128
|
+
/**
|
|
21129
|
+
* D735: notify "ignored" when a sensor this arm bypassed really MOVED while armed (its own
|
|
21130
|
+
* change time is after the arm) and set nothing off. Absent = false (logged, not sent). A
|
|
21131
|
+
* re-sync, a recovery from `unavailable` or a duplicate is never announced, switch or not.
|
|
21132
|
+
*/
|
|
21133
|
+
notifySensorIgnored: boolean().optional()
|
|
21187
21134
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
21188
21135
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
21189
21136
|
mode: AlarmArmModeSchema,
|
|
@@ -21196,7 +21143,9 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
21196
21143
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
21197
21144
|
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
21198
21145
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
21199
|
-
notifySensorRewatched: boolean().nullable().optional()
|
|
21146
|
+
notifySensorRewatched: boolean().nullable().optional(),
|
|
21147
|
+
/** D735: set the switch, or `null` to clear it (back to the default, false). */
|
|
21148
|
+
notifySensorIgnored: boolean().nullable().optional()
|
|
21200
21149
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
21201
21150
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
21202
21151
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -22174,8 +22123,8 @@ Object.freeze(Object.fromEntries([{
|
|
|
22174
22123
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
22175
22124
|
stepId: "face-embedding",
|
|
22176
22125
|
key: "minLandmarkFaceSize",
|
|
22177
|
-
label: "Min face size
|
|
22178
|
-
description: "
|
|
22126
|
+
label: "Min face size to embed (detection-frame px)",
|
|
22127
|
+
description: "Faces smaller than this in the small frame the detector sees are not embedded, so they can never be recognised. Below it the face cannot be aligned reliably and a bad embedding matches everyone. Same value on every node. 0 = no limit.",
|
|
22179
22128
|
type: "slider",
|
|
22180
22129
|
min: 0,
|
|
22181
22130
|
max: 64,
|
|
@@ -23227,7 +23176,13 @@ var RetrainFrameSchema = object({
|
|
|
23227
23176
|
sizeBytes: number().int(),
|
|
23228
23177
|
width: number().int(),
|
|
23229
23178
|
height: number().int(),
|
|
23230
|
-
copiedAt: number()
|
|
23179
|
+
copiedAt: number(),
|
|
23180
|
+
/** When the CAMERA captured the frame. Absent on a copy taken before D785. */
|
|
23181
|
+
capturedAt: number().optional(),
|
|
23182
|
+
/** The operator's "every subject in this frame is boxed". Detector
|
|
23183
|
+
* evaluation keeps only complete frames: an unboxed subject would count as
|
|
23184
|
+
* a false positive. */
|
|
23185
|
+
complete: boolean()
|
|
23231
23186
|
});
|
|
23232
23187
|
/** Why a copy-on-select could not be honoured — named, never a silent skip. */
|
|
23233
23188
|
var RetrainCopyRefusalSchema = _enum([
|
|
@@ -23248,6 +23203,51 @@ var RetrainFrameListSchema = object({
|
|
|
23248
23203
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
23249
23204
|
autoPickMediaId: number().int().optional()
|
|
23250
23205
|
});
|
|
23206
|
+
/**
|
|
23207
|
+
* Which frames an annotated export carries. Every field narrows; an empty
|
|
23208
|
+
* filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
|
|
23209
|
+
* list owned by whoever trains (the training orchestrator), so `frameIds` is
|
|
23210
|
+
* the primitive a version export uses; `batchId` re-selects what an earlier
|
|
23211
|
+
* export carried (`exportedInBatch`).
|
|
23212
|
+
*/
|
|
23213
|
+
var RetrainExportFilterSchema = object({
|
|
23214
|
+
deviceIds: array(number()).optional(),
|
|
23215
|
+
frameIds: array(string()).max(2e4).optional(),
|
|
23216
|
+
batchId: string().optional(),
|
|
23217
|
+
/** Only frames the operator marked complete (all subjects boxed). */
|
|
23218
|
+
completeOnly: boolean().optional()
|
|
23219
|
+
});
|
|
23220
|
+
/**
|
|
23221
|
+
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
23222
|
+
* `crops`: additionally one JPEG per subject, cut with the runtime detail-crop
|
|
23223
|
+
* convention — the classifier layout.
|
|
23224
|
+
*/
|
|
23225
|
+
var RetrainExportLayoutSchema = _enum(["frames", "crops"]);
|
|
23226
|
+
/**
|
|
23227
|
+
* Where `writeRetrainArchive` streams the tar: one HTTP request whose body is
|
|
23228
|
+
* the archive, sent chunk by chunk. Covers a presigned PUT and a provider
|
|
23229
|
+
* addon's data-plane upload route alike. Headers are sent verbatim and never
|
|
23230
|
+
* logged.
|
|
23231
|
+
*/
|
|
23232
|
+
var RetrainArchiveTargetSchema = object({
|
|
23233
|
+
kind: literal("http"),
|
|
23234
|
+
method: _enum(["PUT", "POST"]),
|
|
23235
|
+
url: string().url(),
|
|
23236
|
+
headers: record(string(), string()).optional()
|
|
23237
|
+
});
|
|
23238
|
+
var RetrainArchiveResultSchema = object({
|
|
23239
|
+
batchId: string(),
|
|
23240
|
+
frames: number().int(),
|
|
23241
|
+
crops: number().int(),
|
|
23242
|
+
annotations: number().int(),
|
|
23243
|
+
/** Frames planned but not shipped (unreadable copy, path too long). */
|
|
23244
|
+
missing: number().int(),
|
|
23245
|
+
bytes: number().int(),
|
|
23246
|
+
/** sha256 of the exact bytes sent. */
|
|
23247
|
+
sha256: string(),
|
|
23248
|
+
/** The target's HTTP status. */
|
|
23249
|
+
status: number().int()
|
|
23250
|
+
});
|
|
23251
23251
|
/** What the operator asked the assist to look for. */
|
|
23252
23252
|
var RetrainAssistSubjectSchema = discriminatedUnion("kind", [object({
|
|
23253
23253
|
kind: literal("package"),
|
|
@@ -24042,9 +24042,25 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
24042
24042
|
}), RetrainTransitionResultSchema, {
|
|
24043
24043
|
kind: "mutation",
|
|
24044
24044
|
auth: "admin"
|
|
24045
|
-
}), method(
|
|
24045
|
+
}), method(RetrainExportFilterSchema.extend({ layout: RetrainExportLayoutSchema.optional() }), object({ url: string() }), {
|
|
24046
24046
|
kind: "query",
|
|
24047
24047
|
auth: "admin"
|
|
24048
|
+
}), method(object({
|
|
24049
|
+
deviceId: number(),
|
|
24050
|
+
trackId: string(),
|
|
24051
|
+
frameId: string(),
|
|
24052
|
+
complete: boolean()
|
|
24053
|
+
}), RetrainFrameSchema, {
|
|
24054
|
+
kind: "mutation",
|
|
24055
|
+
auth: "admin"
|
|
24056
|
+
}), method(object({
|
|
24057
|
+
filter: RetrainExportFilterSchema,
|
|
24058
|
+
layout: RetrainExportLayoutSchema,
|
|
24059
|
+
target: RetrainArchiveTargetSchema
|
|
24060
|
+
}), RetrainArchiveResultSchema, {
|
|
24061
|
+
kind: "mutation",
|
|
24062
|
+
auth: "admin",
|
|
24063
|
+
timeoutMs: 60 * 6e4
|
|
24048
24064
|
}), method(object({
|
|
24049
24065
|
/** Which of the three event tables owns the row. */
|
|
24050
24066
|
ownerType: EventOwnerTypeSchema,
|
|
@@ -24095,6 +24111,34 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
24095
24111
|
timestamp: number()
|
|
24096
24112
|
});
|
|
24097
24113
|
/**
|
|
24114
|
+
* A root model's boxes standing in for one crop-kind step's own inference
|
|
24115
|
+
* (D730) — see `runPipeline.suppliedRoot`.
|
|
24116
|
+
*/
|
|
24117
|
+
var SuppliedRootOutputSchema = object({
|
|
24118
|
+
stepId: string(),
|
|
24119
|
+
/** The root model that drew the boxes — stamped on the result. */
|
|
24120
|
+
modelId: string(),
|
|
24121
|
+
detections: array(object({
|
|
24122
|
+
/** `[x1, y1, x2, y2]` in the pixels of the call's image. */
|
|
24123
|
+
bbox: tuple([
|
|
24124
|
+
number(),
|
|
24125
|
+
number(),
|
|
24126
|
+
number(),
|
|
24127
|
+
number()
|
|
24128
|
+
]),
|
|
24129
|
+
score: number(),
|
|
24130
|
+
/**
|
|
24131
|
+
* Five facial landmarks in the same pixels — a face the step's own
|
|
24132
|
+
* detector already re-found inside a root face box (D730), so its
|
|
24133
|
+
* embedder child aligns it exactly as it aligns any detected face.
|
|
24134
|
+
*/
|
|
24135
|
+
landmarks: array(object({
|
|
24136
|
+
x: number(),
|
|
24137
|
+
y: number()
|
|
24138
|
+
})).optional()
|
|
24139
|
+
})).min(1)
|
|
24140
|
+
});
|
|
24141
|
+
/**
|
|
24098
24142
|
* Reference to the frame's retained NATIVE surface + the parent crop's placement
|
|
24099
24143
|
* within the frame, so the executor can re-cut a leaf child ROI at native
|
|
24100
24144
|
* resolution on the detail plane. See the `runPipeline` `nativeCropRef` field.
|
|
@@ -24142,7 +24186,7 @@ var FrameRefSchema = object({
|
|
|
24142
24186
|
timestamp: number(),
|
|
24143
24187
|
capturedAt: number().optional()
|
|
24144
24188
|
});
|
|
24145
|
-
var ModelFormatSchema$
|
|
24189
|
+
var ModelFormatSchema$2 = _enum([
|
|
24146
24190
|
"onnx",
|
|
24147
24191
|
"coreml",
|
|
24148
24192
|
"openvino",
|
|
@@ -24160,7 +24204,7 @@ var PipelineSlotSchema = _enum([
|
|
|
24160
24204
|
var PipelineEngineChoiceSchema = object({
|
|
24161
24205
|
runtime: literal("python"),
|
|
24162
24206
|
backend: string(),
|
|
24163
|
-
format: ModelFormatSchema$
|
|
24207
|
+
format: ModelFormatSchema$2,
|
|
24164
24208
|
device: string().optional()
|
|
24165
24209
|
});
|
|
24166
24210
|
/**
|
|
@@ -24199,33 +24243,15 @@ var PipelineDefaultStepSchema = lazy(() => object({
|
|
|
24199
24243
|
group: string().optional(),
|
|
24200
24244
|
settings: record(string(), unknown()).optional()
|
|
24201
24245
|
}));
|
|
24202
|
-
var PipelineTemplateStepSchema = lazy(() => object({
|
|
24203
|
-
addonId: string(),
|
|
24204
|
-
enabled: boolean(),
|
|
24205
|
-
modelId: string(),
|
|
24206
|
-
children: array(PipelineTemplateStepSchema).readonly(),
|
|
24207
|
-
settings: record(string(), unknown()).optional()
|
|
24208
|
-
}));
|
|
24209
|
-
var PipelineTemplateSchema$1 = object({
|
|
24210
|
-
id: string(),
|
|
24211
|
-
name: string(),
|
|
24212
|
-
createdAt: string(),
|
|
24213
|
-
updatedAt: string(),
|
|
24214
|
-
engine: PipelineEngineChoiceSchema,
|
|
24215
|
-
steps: array(PipelineTemplateStepSchema).readonly()
|
|
24216
|
-
});
|
|
24217
24246
|
var PipelineModelOptionSchema = object({
|
|
24218
24247
|
id: string(),
|
|
24219
24248
|
name: string(),
|
|
24220
|
-
formats: record(string(),
|
|
24221
|
-
downloaded: boolean(),
|
|
24222
|
-
sizeMB: number()
|
|
24223
|
-
})),
|
|
24249
|
+
formats: record(string(), PipelineModelFormatStatusSchema),
|
|
24224
24250
|
group: ModelVariantGroupSchema.optional(),
|
|
24225
24251
|
legacy: boolean().optional(),
|
|
24226
24252
|
provider: ModelProviderIdSchema.optional(),
|
|
24227
24253
|
defaultConfidence: number().optional(),
|
|
24228
|
-
|
|
24254
|
+
suppliesSteps: array(RootStepSupplySchema).readonly().optional()
|
|
24229
24255
|
});
|
|
24230
24256
|
var ConfigFieldBridge = custom();
|
|
24231
24257
|
var PipelineAddonSchemaSchema = object({
|
|
@@ -24387,6 +24413,22 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
24387
24413
|
}), {
|
|
24388
24414
|
kind: "mutation",
|
|
24389
24415
|
auth: "admin"
|
|
24416
|
+
}), method(object({
|
|
24417
|
+
nodeId: string(),
|
|
24418
|
+
deviceIds: array(number()).readonly().optional(),
|
|
24419
|
+
dryRun: boolean()
|
|
24420
|
+
}), object({
|
|
24421
|
+
entries: array(object({
|
|
24422
|
+
deviceId: number(),
|
|
24423
|
+
keys: array(string()).readonly()
|
|
24424
|
+
})).readonly(),
|
|
24425
|
+
refused: array(object({
|
|
24426
|
+
deviceId: number(),
|
|
24427
|
+
reason: string()
|
|
24428
|
+
})).readonly()
|
|
24429
|
+
}), {
|
|
24430
|
+
kind: "mutation",
|
|
24431
|
+
auth: "admin"
|
|
24390
24432
|
}), method(object({ nodeId: string() }), object({ unhealthy: array(object({
|
|
24391
24433
|
/** `<backend>:<device>`, e.g. `openvino:gpu`. */
|
|
24392
24434
|
deviceKey: string(),
|
|
@@ -24412,22 +24454,14 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
24412
24454
|
}), method(_void(), PipelineSchemaSchema), method(_void(), array(PipelineDefaultStepSchema).readonly().nullable()), method(_void(), PipelineConfigBridge), method(_void(), ConfigUISchemaBridge), method(object({
|
|
24413
24455
|
steps: array(PipelineStepInputSchema),
|
|
24414
24456
|
deviceKey: string().optional()
|
|
24415
|
-
}), PipelineValidationResultSchema), method(_void(),
|
|
24416
|
-
name: string(),
|
|
24417
|
-
steps: array(PipelineTemplateStepSchema).readonly(),
|
|
24418
|
-
engine: PipelineEngineChoiceSchema
|
|
24419
|
-
}), PipelineTemplateSchema$1, { kind: "mutation" }), method(object({
|
|
24420
|
-
id: string(),
|
|
24421
|
-
name: string().optional(),
|
|
24422
|
-
steps: array(PipelineTemplateStepSchema).readonly().optional()
|
|
24423
|
-
}), PipelineTemplateSchema$1, { kind: "mutation" }), method(object({ id: string() }), _void(), { kind: "mutation" }), method(_void(), InferenceCapabilitiesBridge), method(object({ addonId: string() }), ModelAvailabilityListBridge), method(object({
|
|
24457
|
+
}), PipelineValidationResultSchema), method(_void(), InferenceCapabilitiesBridge), method(object({ addonId: string() }), ModelAvailabilityListBridge), method(object({
|
|
24424
24458
|
addonId: string(),
|
|
24425
24459
|
modelId: string(),
|
|
24426
|
-
format: ModelFormatSchema$
|
|
24460
|
+
format: ModelFormatSchema$2
|
|
24427
24461
|
}), DownloadModelResultSchema, { kind: "mutation" }), method(object({
|
|
24428
24462
|
addonId: string(),
|
|
24429
24463
|
modelId: string(),
|
|
24430
|
-
format: ModelFormatSchema$
|
|
24464
|
+
format: ModelFormatSchema$2
|
|
24431
24465
|
}), object({ success: literal(true) }), { kind: "mutation" }), method(object({
|
|
24432
24466
|
steps: array(PipelineStepInputSchema).min(1),
|
|
24433
24467
|
frame: FrameInputSchema.optional(),
|
|
@@ -24493,7 +24527,16 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
24493
24527
|
* `device-not-servable`), and nothing reaches the camera's live
|
|
24494
24528
|
* trace stream. Absent ⇒ unchanged behaviour.
|
|
24495
24529
|
*/
|
|
24496
|
-
replay: literal(true).optional()
|
|
24530
|
+
replay: literal(true).optional(),
|
|
24531
|
+
/**
|
|
24532
|
+
* Root-supplied detections for the tree's ROOT step (D730). Set by
|
|
24533
|
+
* `runDetailSubtree` when the camera's root model supplies a crop-kind
|
|
24534
|
+
* step (a Frigate+ `license_plate` for `plate-detection`): the step is
|
|
24535
|
+
* NOT inferred, these boxes are its output, and its children (the plate
|
|
24536
|
+
* reader) run on them through their own crop policy. Boxes are in the
|
|
24537
|
+
* PIXELS of the image this call carries. Absent ⇒ the root step runs.
|
|
24538
|
+
*/
|
|
24539
|
+
suppliedRoot: SuppliedRootOutputSchema.optional()
|
|
24497
24540
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
24498
24541
|
steps: array(PipelineStepInputSchema).min(1),
|
|
24499
24542
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
@@ -24575,6 +24618,375 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
24575
24618
|
filename: string().optional(),
|
|
24576
24619
|
settings: record(string(), unknown()).optional()
|
|
24577
24620
|
}), AudioTestResultSchema, { kind: "mutation" }), method(_void(), ConfigUISchemaNullableBridge);
|
|
24621
|
+
/**
|
|
24622
|
+
* The wire shapes of the Auto tune plan and apply (D745), used by the
|
|
24623
|
+
* `pipeline-orchestrator` cap. The recommender's own types
|
|
24624
|
+
* (`recommend.ts`) are the TS face of the same data; these
|
|
24625
|
+
* schemas are what crosses the cap boundary.
|
|
24626
|
+
*/
|
|
24627
|
+
var ModelFormatSchema$1 = _enum(MODEL_FORMATS);
|
|
24628
|
+
/** The operator's range for it. */
|
|
24629
|
+
var MIN_SESSIONS_PER_DEVICE_RANGE = {
|
|
24630
|
+
min: 1,
|
|
24631
|
+
max: 8
|
|
24632
|
+
};
|
|
24633
|
+
var HardwareClassIdSchema = _enum([
|
|
24634
|
+
"intel-core-ultra",
|
|
24635
|
+
"intel-n-series",
|
|
24636
|
+
"apple-m-base",
|
|
24637
|
+
"apple-m-pro",
|
|
24638
|
+
"unknown"
|
|
24639
|
+
]);
|
|
24640
|
+
var AcceleratorKindSchema = _enum([
|
|
24641
|
+
"intel-npu",
|
|
24642
|
+
"intel-igpu",
|
|
24643
|
+
"x86-cpu",
|
|
24644
|
+
"arm-cpu",
|
|
24645
|
+
"apple-ane",
|
|
24646
|
+
"coral"
|
|
24647
|
+
]);
|
|
24648
|
+
var RecommendationReasonSchema = discriminatedUnion("kind", [
|
|
24649
|
+
object({
|
|
24650
|
+
kind: literal("capacity"),
|
|
24651
|
+
sessions: number(),
|
|
24652
|
+
minSessions: number()
|
|
24653
|
+
}),
|
|
24654
|
+
object({
|
|
24655
|
+
kind: literal("tie-faster"),
|
|
24656
|
+
over: string(),
|
|
24657
|
+
recallDelta: number()
|
|
24658
|
+
}),
|
|
24659
|
+
object({
|
|
24660
|
+
kind: literal("stepped-down"),
|
|
24661
|
+
from: string(),
|
|
24662
|
+
to: string(),
|
|
24663
|
+
limitedBy: string()
|
|
24664
|
+
}),
|
|
24665
|
+
object({
|
|
24666
|
+
kind: literal("no-fit-lightest"),
|
|
24667
|
+
sessions: number(),
|
|
24668
|
+
minSessions: number()
|
|
24669
|
+
}),
|
|
24670
|
+
object({
|
|
24671
|
+
kind: literal("derived-latency"),
|
|
24672
|
+
modelId: string()
|
|
24673
|
+
}),
|
|
24674
|
+
object({ kind: literal("cpu-device") }),
|
|
24675
|
+
object({ kind: literal("coral-untouched") }),
|
|
24676
|
+
object({ kind: literal("device-disabled") }),
|
|
24677
|
+
object({ kind: literal("device-unavailable") }),
|
|
24678
|
+
object({ kind: literal("node-offline") }),
|
|
24679
|
+
object({ kind: literal("no-hardware-facts") }),
|
|
24680
|
+
object({
|
|
24681
|
+
kind: literal("no-measured-data"),
|
|
24682
|
+
hardwareClass: HardwareClassIdSchema
|
|
24683
|
+
}),
|
|
24684
|
+
object({
|
|
24685
|
+
kind: literal("no-family-build"),
|
|
24686
|
+
format: ModelFormatSchema$1
|
|
24687
|
+
})
|
|
24688
|
+
]);
|
|
24689
|
+
var DeviceModelChoiceSchema = object({
|
|
24690
|
+
modelId: string(),
|
|
24691
|
+
p50Ms: number(),
|
|
24692
|
+
fps: number(),
|
|
24693
|
+
measured: boolean(),
|
|
24694
|
+
/** Parallel sessions at the camera rate with the headroom kept free: ⌊fps × (1 − headroom) / camera fps⌋. */
|
|
24695
|
+
capacitySessions: number(),
|
|
24696
|
+
personRecall: number()
|
|
24697
|
+
});
|
|
24698
|
+
var DeviceRecommendationSchema = object({
|
|
24699
|
+
deviceKey: string(),
|
|
24700
|
+
accelerator: AcceleratorKindSchema.nullable(),
|
|
24701
|
+
enabled: boolean(),
|
|
24702
|
+
available: boolean(),
|
|
24703
|
+
chosen: DeviceModelChoiceSchema.nullable(),
|
|
24704
|
+
reasons: array(RecommendationReasonSchema).readonly()
|
|
24705
|
+
});
|
|
24706
|
+
var NodeRecommendationSchema = object({
|
|
24707
|
+
nodeId: string(),
|
|
24708
|
+
reachable: boolean(),
|
|
24709
|
+
hardwareClass: HardwareClassIdSchema.nullable(),
|
|
24710
|
+
cpuModel: string().nullable(),
|
|
24711
|
+
skipped: boolean(),
|
|
24712
|
+
acceleratorModelId: string().nullable(),
|
|
24713
|
+
devices: array(DeviceRecommendationSchema).readonly(),
|
|
24714
|
+
reasons: array(RecommendationReasonSchema).readonly()
|
|
24715
|
+
});
|
|
24716
|
+
var ModelPinChangeSchema = object({
|
|
24717
|
+
stepId: string(),
|
|
24718
|
+
before: string().nullable(),
|
|
24719
|
+
after: string().nullable()
|
|
24720
|
+
});
|
|
24721
|
+
var NodeDeviceChangeSchema = object({
|
|
24722
|
+
nodeId: string(),
|
|
24723
|
+
deviceKey: string(),
|
|
24724
|
+
madeExplicit: boolean(),
|
|
24725
|
+
modelPins: array(ModelPinChangeSchema).readonly(),
|
|
24726
|
+
thresholds: array(object({
|
|
24727
|
+
stepId: string(),
|
|
24728
|
+
keys: array(string()).readonly()
|
|
24729
|
+
})).readonly()
|
|
24730
|
+
});
|
|
24731
|
+
var CameraOverrideClearSchema = object({
|
|
24732
|
+
deviceId: number(),
|
|
24733
|
+
source: _enum(["step-override", "wholesale"]),
|
|
24734
|
+
nodeId: string(),
|
|
24735
|
+
deviceKey: string().nullable(),
|
|
24736
|
+
stepId: string(),
|
|
24737
|
+
modelIdBefore: string().nullable(),
|
|
24738
|
+
keys: array(string()).readonly()
|
|
24739
|
+
});
|
|
24740
|
+
var DetectorStoreClearSchema = object({
|
|
24741
|
+
deviceId: number(),
|
|
24742
|
+
keys: array(string()).readonly()
|
|
24743
|
+
});
|
|
24744
|
+
var AutoTuneWarningSchema = discriminatedUnion("kind", [
|
|
24745
|
+
object({
|
|
24746
|
+
kind: literal("detector-store-cluster-wide"),
|
|
24747
|
+
skippedNodes: array(string()).readonly()
|
|
24748
|
+
}),
|
|
24749
|
+
object({
|
|
24750
|
+
kind: literal("detector-store-unreadable"),
|
|
24751
|
+
error: string()
|
|
24752
|
+
}),
|
|
24753
|
+
object({
|
|
24754
|
+
kind: literal("coral-enabled"),
|
|
24755
|
+
nodeId: string(),
|
|
24756
|
+
deviceKey: string()
|
|
24757
|
+
})
|
|
24758
|
+
]);
|
|
24759
|
+
var AutoTuneOptionsSchema = object({
|
|
24760
|
+
/** Share of each accelerator's throughput kept free (0.3–0.5). */
|
|
24761
|
+
headroom: number().min(.3).max(.5).default(.4),
|
|
24762
|
+
/**
|
|
24763
|
+
* The least number of parallel sessions every device must sustain at the
|
|
24764
|
+
* camera rate with the headroom kept free (D755). The most accurate model
|
|
24765
|
+
* that reaches it wins.
|
|
24766
|
+
*/
|
|
24767
|
+
minSessionsPerDevice: number().int().min(MIN_SESSIONS_PER_DEVICE_RANGE.min).max(MIN_SESSIONS_PER_DEVICE_RANGE.max).default(2)
|
|
24768
|
+
});
|
|
24769
|
+
var AutoTunePlanSchema = object({
|
|
24770
|
+
/** Hash of everything the apply will write — the apply refuses a different one. */
|
|
24771
|
+
planHash: string(),
|
|
24772
|
+
family: literal("yolov9"),
|
|
24773
|
+
headroom: number(),
|
|
24774
|
+
minSessionsPerDevice: number(),
|
|
24775
|
+
/** The detection rate a session is counted at (the fastest camera running the pipeline root). */
|
|
24776
|
+
cameraFps: number(),
|
|
24777
|
+
generatedAt: number(),
|
|
24778
|
+
nodes: array(NodeRecommendationSchema).readonly(),
|
|
24779
|
+
nodeChanges: array(NodeDeviceChangeSchema).readonly(),
|
|
24780
|
+
cameraClears: array(CameraOverrideClearSchema).readonly(),
|
|
24781
|
+
detectorStoreClears: array(DetectorStoreClearSchema).readonly(),
|
|
24782
|
+
warnings: array(AutoTuneWarningSchema).readonly()
|
|
24783
|
+
});
|
|
24784
|
+
var AutoTuneApplyInputSchema = object({
|
|
24785
|
+
planHash: string(),
|
|
24786
|
+
headroom: number().min(.3).max(.5).default(.4),
|
|
24787
|
+
minSessionsPerDevice: number().int().min(MIN_SESSIONS_PER_DEVICE_RANGE.min).max(MIN_SESSIONS_PER_DEVICE_RANGE.max).default(2)
|
|
24788
|
+
});
|
|
24789
|
+
var AutoTunePhaseResultSchema = object({
|
|
24790
|
+
phase: _enum([
|
|
24791
|
+
"download",
|
|
24792
|
+
"camera-overrides",
|
|
24793
|
+
"detector-thresholds",
|
|
24794
|
+
"node-models",
|
|
24795
|
+
"redispatch"
|
|
24796
|
+
]),
|
|
24797
|
+
ok: boolean(),
|
|
24798
|
+
detail: string()
|
|
24799
|
+
});
|
|
24800
|
+
var AutoTuneApplyResultSchema = discriminatedUnion("kind", [
|
|
24801
|
+
object({
|
|
24802
|
+
kind: literal("applied"),
|
|
24803
|
+
planHash: string(),
|
|
24804
|
+
phases: array(AutoTunePhaseResultSchema).readonly()
|
|
24805
|
+
}),
|
|
24806
|
+
object({
|
|
24807
|
+
kind: literal("aborted"),
|
|
24808
|
+
phases: array(AutoTunePhaseResultSchema).readonly()
|
|
24809
|
+
}),
|
|
24810
|
+
object({
|
|
24811
|
+
kind: literal("stale"),
|
|
24812
|
+
plan: AutoTunePlanSchema
|
|
24813
|
+
}),
|
|
24814
|
+
object({
|
|
24815
|
+
kind: literal("refused"),
|
|
24816
|
+
reason: _enum(["apply-in-progress"])
|
|
24817
|
+
})
|
|
24818
|
+
]);
|
|
24819
|
+
/**
|
|
24820
|
+
* Wire shapes of the Load balancing surface (D748): the session placement
|
|
24821
|
+
* policy, the atomic share write, the observed placement statistics, the
|
|
24822
|
+
* hardware share suggestion and the stale device pins.
|
|
24823
|
+
*/
|
|
24824
|
+
/**
|
|
24825
|
+
* How a new detection session picks its node and device.
|
|
24826
|
+
* - `least-loaded` — the historical rule: lowest `attached / weight`, a
|
|
24827
|
+
* constant node order at a tie (D37). An idle node always ties at 0, so a
|
|
24828
|
+
* weight only bites once a node already holds a session.
|
|
24829
|
+
* - `share` — the share of PARALLEL sessions is held to the weights, and a
|
|
24830
|
+
* full or drowning node yields to a free one (D748).
|
|
24831
|
+
*/
|
|
24832
|
+
var SessionPlacementPolicySchema = _enum(["least-loaded", "share"]);
|
|
24833
|
+
var LoadBalancingSharesInputSchema = object({
|
|
24834
|
+
/** nodeId → share (> 0). A node left out keeps its weight. */
|
|
24835
|
+
nodes: record(string(), number().positive()).default({}),
|
|
24836
|
+
/** nodeId → deviceKey → share (> 0). A device left out keeps its weight. */
|
|
24837
|
+
devices: record(string(), record(string(), number().positive())).default({})
|
|
24838
|
+
});
|
|
24839
|
+
var PlacementStatsInputSchema = object({
|
|
24840
|
+
/** Window the observed shares are averaged over (default 1 h, max 24 h). */
|
|
24841
|
+
windowMs: number().int().min(6e4).max(1440 * 60 * 1e3).default(3600 * 1e3) });
|
|
24842
|
+
var PlacementDeviceStatsSchema = object({
|
|
24843
|
+
deviceKey: string(),
|
|
24844
|
+
/** Sessions running on this device now. */
|
|
24845
|
+
sessionsNow: number(),
|
|
24846
|
+
/** Sessions started on this device inside the window. */
|
|
24847
|
+
sessionsStarted: number(),
|
|
24848
|
+
/** Time-weighted share of the node's parallel sessions over the window (0–1); null = no session ran. */
|
|
24849
|
+
observedShare: number().nullable()
|
|
24850
|
+
});
|
|
24851
|
+
var PlacementNodeStatsSchema = object({
|
|
24852
|
+
nodeId: string(),
|
|
24853
|
+
sessionsNow: number(),
|
|
24854
|
+
sessionsStarted: number(),
|
|
24855
|
+
/** Time-weighted share of the cluster's parallel sessions over the window (0–1); null = none ran. */
|
|
24856
|
+
observedShare: number().nullable(),
|
|
24857
|
+
/** Most sessions this node ran at once inside the window. */
|
|
24858
|
+
peakSessions: number(),
|
|
24859
|
+
/** Sessions a share election handed elsewhere because this node was full or drowning. */
|
|
24860
|
+
yieldsAway: number(),
|
|
24861
|
+
devices: array(PlacementDeviceStatsSchema).readonly()
|
|
24862
|
+
});
|
|
24863
|
+
/** A camera's device pin that the session path cannot honour. */
|
|
24864
|
+
var StaleDevicePinSchema = object({
|
|
24865
|
+
deviceId: number(),
|
|
24866
|
+
deviceKey: string(),
|
|
24867
|
+
/** `disabled` — the key exists on some node but is not enabled anywhere; `absent` — no node has it. */
|
|
24868
|
+
reason: _enum(["disabled", "absent"])
|
|
24869
|
+
});
|
|
24870
|
+
var PlacementStatsSchema = object({
|
|
24871
|
+
policy: SessionPlacementPolicySchema,
|
|
24872
|
+
windowMs: number(),
|
|
24873
|
+
/** How much of the window was actually observed (the hub keeps it in memory). */
|
|
24874
|
+
observedForMs: number(),
|
|
24875
|
+
sessionsNow: number(),
|
|
24876
|
+
/** Most parallel sessions across the cluster inside the window. */
|
|
24877
|
+
clusterPeakSessions: number(),
|
|
24878
|
+
nodes: array(PlacementNodeStatsSchema).readonly(),
|
|
24879
|
+
stalePins: array(StaleDevicePinSchema).readonly()
|
|
24880
|
+
});
|
|
24881
|
+
/**
|
|
24882
|
+
* Where an automatic share's capacity comes from (D755).
|
|
24883
|
+
* - `hardware` — the static capacity of each device at its Auto tune model:
|
|
24884
|
+
* the measured latency table for the node's hardware class.
|
|
24885
|
+
* - `benchmark` — the node's own measured capacity (node benchmark results).
|
|
24886
|
+
* A node with no results falls back to `hardware`, and says so.
|
|
24887
|
+
*/
|
|
24888
|
+
var CapacitySourceSchema = _enum(["hardware", "benchmark"]);
|
|
24889
|
+
/** Why a node under the `benchmark` source was sized from hardware instead. */
|
|
24890
|
+
var CapacityFallbackSchema = _enum(["no-benchmark-results", "partial-benchmark-results"]);
|
|
24891
|
+
var SuggestSharesInputSchema = object({
|
|
24892
|
+
headroom: number().min(.3).max(.5).default(.4),
|
|
24893
|
+
/** Default `hardware`. */
|
|
24894
|
+
source: CapacitySourceSchema.default("hardware")
|
|
24895
|
+
});
|
|
24896
|
+
var SuggestedDeviceShareSchema = object({
|
|
24897
|
+
deviceKey: string(),
|
|
24898
|
+
/** Share of the node (0–100, rounded). */
|
|
24899
|
+
share: number(),
|
|
24900
|
+
modelId: string().nullable(),
|
|
24901
|
+
/** Inferences per second at that model, from the measured table; null when sized by a benchmark. */
|
|
24902
|
+
fps: number().nullable(),
|
|
24903
|
+
/** False for a table cell derived from another chip; true for a measured cell or a benchmark. */
|
|
24904
|
+
measured: boolean(),
|
|
24905
|
+
/**
|
|
24906
|
+
* Advisory session cap: ⌊fps × (1 − headroom) / camera fps⌋ from the table,
|
|
24907
|
+
* or the benchmark's measured max sessions. Never enforced.
|
|
24908
|
+
*/
|
|
24909
|
+
suggestedMaxSessions: number().nullable()
|
|
24910
|
+
});
|
|
24911
|
+
var SuggestedNodeShareSchema = object({
|
|
24912
|
+
nodeId: string(),
|
|
24913
|
+
/** Share of the cluster (0–100, rounded); null = node skipped (offline, unknown hardware). */
|
|
24914
|
+
share: number().nullable(),
|
|
24915
|
+
/** Parallel sessions the node sustains at the suggested models with the headroom kept free. */
|
|
24916
|
+
capacitySessions: number(),
|
|
24917
|
+
devices: array(SuggestedDeviceShareSchema).readonly(),
|
|
24918
|
+
skippedReason: string().nullable(),
|
|
24919
|
+
/** What this node's capacity was read from; null when the node is skipped. */
|
|
24920
|
+
capacitySource: CapacitySourceSchema.nullable(),
|
|
24921
|
+
/** Set when the `benchmark` source was asked for and this node used `hardware`. */
|
|
24922
|
+
capacityFallback: CapacityFallbackSchema.nullable()
|
|
24923
|
+
});
|
|
24924
|
+
var SuggestSharesResultSchema = object({
|
|
24925
|
+
headroom: number(),
|
|
24926
|
+
/** The source asked for; each node says what it actually used. */
|
|
24927
|
+
source: CapacitySourceSchema,
|
|
24928
|
+
/** Camera detection rate the capacity is counted in (the fastest camera's fps). */
|
|
24929
|
+
cameraFps: number(),
|
|
24930
|
+
/** The Auto tune capacity floor the models were picked at. */
|
|
24931
|
+
minSessionsPerDevice: number(),
|
|
24932
|
+
nodes: array(SuggestedNodeShareSchema).readonly()
|
|
24933
|
+
});
|
|
24934
|
+
/**
|
|
24935
|
+
* Where the node and device shares come from (D750, D755).
|
|
24936
|
+
* - `hardware` (default) — computed by the system from each node's static
|
|
24937
|
+
* capacity (its accelerators at their Auto tune models, from the measured
|
|
24938
|
+
* latency table), recomputed whenever a node or device joins, leaves, is
|
|
24939
|
+
* switched on or off, or changes model. No load input.
|
|
24940
|
+
* - `benchmark` — the same, from each node's measured capacity (node
|
|
24941
|
+
* benchmark results); a node without results falls back to `hardware`.
|
|
24942
|
+
* - `manual` — the operator's stored sliders.
|
|
24943
|
+
* Either way a node or device that cannot take sessions gives its share to
|
|
24944
|
+
* the others in proportion; the stored values are never rewritten for that.
|
|
24945
|
+
*/
|
|
24946
|
+
var ShareSourceSchema = _enum([
|
|
24947
|
+
"hardware",
|
|
24948
|
+
"benchmark",
|
|
24949
|
+
"manual"
|
|
24950
|
+
]);
|
|
24951
|
+
var SetShareSourceInputSchema = object({ source: ShareSourceSchema });
|
|
24952
|
+
object({
|
|
24953
|
+
nodes: record(string(), number()),
|
|
24954
|
+
devices: record(string(), record(string(), number()))
|
|
24955
|
+
});
|
|
24956
|
+
var EffectiveDeviceShareSchema = object({
|
|
24957
|
+
deviceKey: string(),
|
|
24958
|
+
/** Can take sessions now (enabled, available, can run the root). */
|
|
24959
|
+
eligible: boolean(),
|
|
24960
|
+
/** The share the source assigns, as a percentage of the node's devices. */
|
|
24961
|
+
configuredPct: number(),
|
|
24962
|
+
/** The share actually used, after an ineligible device's share went to the others. */
|
|
24963
|
+
effectivePct: number()
|
|
24964
|
+
});
|
|
24965
|
+
var EffectiveNodeShareSchema = object({
|
|
24966
|
+
nodeId: string(),
|
|
24967
|
+
eligible: boolean(),
|
|
24968
|
+
configuredPct: number(),
|
|
24969
|
+
effectivePct: number(),
|
|
24970
|
+
/** Automatic sources: what this node's share was computed from; null under `manual` or before the first answer. */
|
|
24971
|
+
capacitySource: CapacitySourceSchema.nullable(),
|
|
24972
|
+
/** Automatic `benchmark`: why this node used `hardware` instead. */
|
|
24973
|
+
capacityFallback: CapacityFallbackSchema.nullable(),
|
|
24974
|
+
devices: array(EffectiveDeviceShareSchema).readonly()
|
|
24975
|
+
});
|
|
24976
|
+
var EffectiveSharesSchema = object({
|
|
24977
|
+
source: ShareSourceSchema,
|
|
24978
|
+
policy: SessionPlacementPolicySchema,
|
|
24979
|
+
/** An automatic source with no computed answer yet: the stored sliders are used meanwhile. */
|
|
24980
|
+
autoPending: boolean(),
|
|
24981
|
+
/** When the automatic shares were last computed (ms epoch); null = never. */
|
|
24982
|
+
computedAt: number().nullable(),
|
|
24983
|
+
/** What made the system recompute them last. */
|
|
24984
|
+
trigger: string().nullable(),
|
|
24985
|
+
nodes: array(EffectiveNodeShareSchema).readonly(),
|
|
24986
|
+
/** The relative weights the election reads (before eligibility). */
|
|
24987
|
+
nodeWeights: record(string(), number()),
|
|
24988
|
+
deviceWeights: record(string(), record(string(), number()))
|
|
24989
|
+
});
|
|
24578
24990
|
object({
|
|
24579
24991
|
activeCameras: number(),
|
|
24580
24992
|
throttledCameras: number(),
|
|
@@ -25492,14 +25904,15 @@ var RunnerLocalLoadSchema = object({
|
|
|
25492
25904
|
* Per-inference-device live load (multi-device C4). One entry per deviceKey
|
|
25493
25905
|
* this runner currently has attached cameras on, so the orchestrator's second
|
|
25494
25906
|
* `balance()` pass (over a node's devices) weights on real per-pool session
|
|
25495
|
-
* counts. Empty on single-device / pre-multi-device runners.
|
|
25496
|
-
* per
|
|
25907
|
+
* counts. Empty on single-device / pre-multi-device runners. There is no
|
|
25908
|
+
* per-device queue depth: the inference pool's backlog has no accessor, and
|
|
25909
|
+
* a field that always read 0 was removed rather than shown as a measurement
|
|
25910
|
+
* (D762).
|
|
25497
25911
|
*/
|
|
25498
25912
|
devices: array(object({
|
|
25499
25913
|
deviceKey: string(),
|
|
25500
25914
|
backend: string(),
|
|
25501
|
-
attachedCameras: number()
|
|
25502
|
-
queueDepthTotal: number()
|
|
25915
|
+
attachedCameras: number()
|
|
25503
25916
|
})).default([]),
|
|
25504
25917
|
/** Hardware capability flags reported by this node. */
|
|
25505
25918
|
hardware: object({
|
|
@@ -25635,7 +26048,22 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
|
|
|
25635
26048
|
*/
|
|
25636
26049
|
cropJpeg: string().optional(),
|
|
25637
26050
|
parent: DetailParentSchema,
|
|
25638
|
-
steps: array(string()).optional()
|
|
26051
|
+
steps: array(string()).optional(),
|
|
26052
|
+
/**
|
|
26053
|
+
* The camera's root model already drew this step's boxes (D730): a
|
|
26054
|
+
* `license_plate` inside the parent vehicle. The named step is NOT
|
|
26055
|
+
* inferred — these FRAME-space boxes are its output — and its
|
|
26056
|
+
* requested children (the plate reader) run on them. Absent ⇒ every
|
|
26057
|
+
* requested step infers as before.
|
|
26058
|
+
*/
|
|
26059
|
+
supplied: object({
|
|
26060
|
+
stepId: string(),
|
|
26061
|
+
modelId: string(),
|
|
26062
|
+
boxes: array(object({
|
|
26063
|
+
bbox: NativeCropBboxSchema,
|
|
26064
|
+
score: number()
|
|
26065
|
+
})).min(1)
|
|
26066
|
+
}).optional()
|
|
25639
26067
|
}), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" }), method(object({
|
|
25640
26068
|
/** Catalog step id, e.g. `clip-embedding`. */
|
|
25641
26069
|
stepId: string(),
|
|
@@ -25698,14 +26126,6 @@ var CameraPipelineConfigSchema = object({
|
|
|
25698
26126
|
settings: record(string(), unknown()).readonly().optional()
|
|
25699
26127
|
}).nullable().optional()
|
|
25700
26128
|
});
|
|
25701
|
-
var PipelineTemplateSchema = object({
|
|
25702
|
-
id: string(),
|
|
25703
|
-
name: string(),
|
|
25704
|
-
description: string().optional(),
|
|
25705
|
-
config: CameraPipelineConfigSchema,
|
|
25706
|
-
createdAt: string(),
|
|
25707
|
-
updatedAt: string()
|
|
25708
|
-
});
|
|
25709
26129
|
var DeviceStepConfigSchema = object({
|
|
25710
26130
|
modelId: string().optional(),
|
|
25711
26131
|
settings: record(string(), unknown()).optional(),
|
|
@@ -25779,9 +26199,10 @@ var CameraStepOverridePatchSchema = object({
|
|
|
25779
26199
|
modelId: string().optional(),
|
|
25780
26200
|
settings: record(string(), unknown()).readonly().optional()
|
|
25781
26201
|
});
|
|
26202
|
+
var CameraStepSettingsSchema = record(string(), record(string(), unknown()).readonly());
|
|
25782
26203
|
var CameraPipelineSettingsSchema = object({
|
|
25783
|
-
pinnedAgentNodeId: string().optional(),
|
|
25784
26204
|
stepToggles: record(string(), boolean()).optional(),
|
|
26205
|
+
stepSettings: CameraStepSettingsSchema.optional(),
|
|
25785
26206
|
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
25786
26207
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
25787
26208
|
});
|
|
@@ -25814,7 +26235,10 @@ var PipelineAssignmentSchema = object({
|
|
|
25814
26235
|
});
|
|
25815
26236
|
/**
|
|
25816
26237
|
* Per-agent load summary surfaced to the load balancer + dashboards.
|
|
25817
|
-
* Aggregated from each runner's `getLocalLoad` cap call.
|
|
26238
|
+
* Aggregated from each runner's `getLocalLoad` cap call. In the
|
|
26239
|
+
* `getAgentLoad` report, a single-device node's default-pool sessions (no
|
|
26240
|
+
* `deviceKey`) are credited to its one eligible device in `load.devices` —
|
|
26241
|
+
* the default pool IS that device (D745); the balancer's census stays raw.
|
|
25818
26242
|
*/
|
|
25819
26243
|
var AgentLoadSummarySchema = object({
|
|
25820
26244
|
nodeId: string(),
|
|
@@ -25903,26 +26327,27 @@ var CameraBrokerStatusSchema = object({
|
|
|
25903
26327
|
width: number(),
|
|
25904
26328
|
height: number(),
|
|
25905
26329
|
subscribers: number(),
|
|
25906
|
-
|
|
25907
|
-
|
|
26330
|
+
/**
|
|
26331
|
+
* Encoded packets/s the broker receives from the camera. null when the
|
|
26332
|
+
* broker's stats read failed — unknown, never 0 (a 0 here reads as a stall).
|
|
26333
|
+
* There is no output rate: decoding runs in the session decode workers, not
|
|
26334
|
+
* in the broker, so the broker's own decoded-frame rate is 0 on every live
|
|
26335
|
+
* camera and is not served (D758).
|
|
26336
|
+
*/
|
|
26337
|
+
inFps: number().nullable()
|
|
25908
26338
|
})).readonly(),
|
|
25909
26339
|
webrtcSessions: number(),
|
|
25910
26340
|
rtspRestream: boolean()
|
|
25911
26341
|
});
|
|
25912
|
-
/**
|
|
25913
|
-
|
|
25914
|
-
|
|
25915
|
-
|
|
25916
|
-
|
|
25917
|
-
|
|
25918
|
-
|
|
25919
|
-
|
|
25920
|
-
var CameraDecoderStatusSchema = object({
|
|
25921
|
-
nodeId: string(),
|
|
25922
|
-
formats: array(string()).readonly(),
|
|
25923
|
-
sessionCount: number(),
|
|
25924
|
-
shm: CameraDecoderShmSchema
|
|
25925
|
-
});
|
|
26342
|
+
/**
|
|
26343
|
+
* Decoder block — WHERE decode runs (co-located with the detection node by
|
|
26344
|
+
* construction); null when the camera has no detection node. It carries no
|
|
26345
|
+
* frame counter: the shared-memory plane whose counters it used to serve is
|
|
26346
|
+
* gone, and those fields read 0 forever. Whether frames actually flow is read
|
|
26347
|
+
* from `detection.actualFps` (frames delivered to and processed by the
|
|
26348
|
+
* detector), never from a counter nothing feeds.
|
|
26349
|
+
*/
|
|
26350
|
+
var CameraDecoderStatusSchema = object({ nodeId: string() });
|
|
25926
26351
|
/** Motion block — null when motion detection is not active for this device. */
|
|
25927
26352
|
var CameraMotionStatusSchema = object({
|
|
25928
26353
|
enabled: boolean(),
|
|
@@ -26279,12 +26704,6 @@ method(object({
|
|
|
26279
26704
|
}), object({ success: literal(true) }), {
|
|
26280
26705
|
kind: "mutation",
|
|
26281
26706
|
auth: "admin"
|
|
26282
|
-
}), method(object({
|
|
26283
|
-
agentNodeId: string(),
|
|
26284
|
-
detectWeight: number().positive().nullable()
|
|
26285
|
-
}), object({ success: literal(true) }), {
|
|
26286
|
-
kind: "mutation",
|
|
26287
|
-
auth: "admin"
|
|
26288
26707
|
}), method(object({
|
|
26289
26708
|
agentNodeId: string(),
|
|
26290
26709
|
detect: boolean().nullable().optional(),
|
|
@@ -26326,6 +26745,15 @@ method(object({
|
|
|
26326
26745
|
}), {
|
|
26327
26746
|
kind: "mutation",
|
|
26328
26747
|
auth: "admin"
|
|
26748
|
+
}), method(AutoTuneOptionsSchema, AutoTunePlanSchema, { auth: "admin" }), method(AutoTuneApplyInputSchema, AutoTuneApplyResultSchema, {
|
|
26749
|
+
kind: "mutation",
|
|
26750
|
+
auth: "admin"
|
|
26751
|
+
}), method(LoadBalancingSharesInputSchema, object({ success: literal(true) }), {
|
|
26752
|
+
kind: "mutation",
|
|
26753
|
+
auth: "admin"
|
|
26754
|
+
}), method(PlacementStatsInputSchema, PlacementStatsSchema, { auth: "admin" }), method(SuggestSharesInputSchema, SuggestSharesResultSchema, { auth: "admin" }), method(_void(), EffectiveSharesSchema, { auth: "admin" }), method(SetShareSourceInputSchema, object({ success: literal(true) }), {
|
|
26755
|
+
kind: "mutation",
|
|
26756
|
+
auth: "admin"
|
|
26329
26757
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
26330
26758
|
deviceId: number(),
|
|
26331
26759
|
addonId: string(),
|
|
@@ -26342,6 +26770,13 @@ method(object({
|
|
|
26342
26770
|
}), object({ success: literal(true) }), {
|
|
26343
26771
|
kind: "mutation",
|
|
26344
26772
|
auth: "admin"
|
|
26773
|
+
}), method(object({
|
|
26774
|
+
deviceId: number(),
|
|
26775
|
+
addonId: string(),
|
|
26776
|
+
settings: record(string(), unknown()).nullable()
|
|
26777
|
+
}), object({ success: literal(true) }), {
|
|
26778
|
+
kind: "mutation",
|
|
26779
|
+
auth: "admin"
|
|
26345
26780
|
}), method(object({
|
|
26346
26781
|
deviceId: number(),
|
|
26347
26782
|
agentNodeId: string(),
|
|
@@ -26365,25 +26800,7 @@ method(object({
|
|
|
26365
26800
|
}), method(_void(), DiskReconcileJobSchema, {
|
|
26366
26801
|
kind: "mutation",
|
|
26367
26802
|
auth: "admin"
|
|
26368
|
-
}), method(_void(), DiskReconcileJobSchema, { auth: "admin" })
|
|
26369
|
-
name: string(),
|
|
26370
|
-
description: string().optional(),
|
|
26371
|
-
config: CameraPipelineConfigSchema
|
|
26372
|
-
}), PipelineTemplateSchema, {
|
|
26373
|
-
kind: "mutation",
|
|
26374
|
-
auth: "admin"
|
|
26375
|
-
}), method(object({
|
|
26376
|
-
id: string(),
|
|
26377
|
-
name: string().optional(),
|
|
26378
|
-
description: string().optional(),
|
|
26379
|
-
config: CameraPipelineConfigSchema.optional()
|
|
26380
|
-
}), PipelineTemplateSchema, {
|
|
26381
|
-
kind: "mutation",
|
|
26382
|
-
auth: "admin"
|
|
26383
|
-
}), method(object({ id: string() }), object({ success: literal(true) }), {
|
|
26384
|
-
kind: "mutation",
|
|
26385
|
-
auth: "admin"
|
|
26386
|
-
});
|
|
26803
|
+
}), method(_void(), DiskReconcileJobSchema, { auth: "admin" });
|
|
26387
26804
|
/**
|
|
26388
26805
|
* Cap → event-kind mapping for the SENSOR / CONTROL cap families — the table
|
|
26389
26806
|
* `pipeline-analytics.listEventKinds` uses to turn a linked device's bound
|
|
@@ -27077,7 +27494,19 @@ var SsoBridgeClaimsSchema = object({
|
|
|
27077
27494
|
* editing a descriptor must not retroactively extend or shorten a link the
|
|
27078
27495
|
* operator already consented to.
|
|
27079
27496
|
*/
|
|
27080
|
-
refreshTtl: union([number().int().positive(), literal("never")]).optional()
|
|
27497
|
+
refreshTtl: union([number().int().positive(), literal("never")]).optional(),
|
|
27498
|
+
/**
|
|
27499
|
+
* Opaque handle of a hub-side LINK intent (D782). Set by an OIDC callback
|
|
27500
|
+
* that was started from a signed-in user's "Link" button: the finish then
|
|
27501
|
+
* links this identity to the intent's user instead of signing anyone in.
|
|
27502
|
+
* The handle carries no user id — the hub resolves it, single-use.
|
|
27503
|
+
*/
|
|
27504
|
+
linkIntent: string().optional(),
|
|
27505
|
+
/**
|
|
27506
|
+
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
27507
|
+
* subject is unique only per issuer, so a link is bound to it.
|
|
27508
|
+
*/
|
|
27509
|
+
issuer: string().optional()
|
|
27081
27510
|
});
|
|
27082
27511
|
method(object({
|
|
27083
27512
|
claims: SsoBridgeClaimsSchema,
|
|
@@ -29154,8 +29583,6 @@ var WebrtcStreamChoiceSchema = object({
|
|
|
29154
29583
|
]).nullable(),
|
|
29155
29584
|
/** Input FPS from the camera (null for adaptive). */
|
|
29156
29585
|
inputFps: number().nullable(),
|
|
29157
|
-
/** Decoded FPS (null for adaptive). */
|
|
29158
|
-
decodeFps: number().nullable(),
|
|
29159
29586
|
/** Bitrate in kbps (null for adaptive). */
|
|
29160
29587
|
bitrateKbps: number().nullable()
|
|
29161
29588
|
});
|
|
@@ -29432,7 +29859,22 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
29432
29859
|
* field their hints were silently stripped by the schema and the
|
|
29433
29860
|
* adaptive ladder started blind on the client's display size.
|
|
29434
29861
|
*/
|
|
29435
|
-
hints: webrtcClientHintsSchema.optional()
|
|
29862
|
+
hints: webrtcClientHintsSchema.optional(),
|
|
29863
|
+
/**
|
|
29864
|
+
* Talk-back (D771): relay the PEER's audio to the device's speaker
|
|
29865
|
+
* through the `intercom` cap's push-talk triple. When `true` and the
|
|
29866
|
+
* offer lets the peer send audio, the answer's audio is `sendrecv`
|
|
29867
|
+
* and every inbound frame goes to `intercom.pushTalkAudio` for this
|
|
29868
|
+
* `deviceId`; absent/false answers `sendonly`, as for every viewer.
|
|
29869
|
+
*
|
|
29870
|
+
* TRUSTED-CALLER ONLY. Set by the Alexa export for an Echo on a camera
|
|
29871
|
+
* with `intercom`, when the linked user may control that camera. The
|
|
29872
|
+
* hub STRIPS it from every request-bound call (a browser), exactly as
|
|
29873
|
+
* it overwrites `relayOnly` — a viewer's talk permission is the
|
|
29874
|
+
* intercom cap's own surface (share tokens gate it there), and this
|
|
29875
|
+
* flag must not become a second door to the camera's speaker.
|
|
29876
|
+
*/
|
|
29877
|
+
talkback: boolean().optional()
|
|
29436
29878
|
}), object({
|
|
29437
29879
|
sessionId: string(),
|
|
29438
29880
|
sdpAnswer: string()
|
|
@@ -29487,6 +29929,14 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
29487
29929
|
*/
|
|
29488
29930
|
alive: boolean()
|
|
29489
29931
|
})), method(object({
|
|
29932
|
+
deviceId: number().int().nonnegative(),
|
|
29933
|
+
sessionId: string(),
|
|
29934
|
+
downlinkMbps: number().nonnegative()
|
|
29935
|
+
}), object({
|
|
29936
|
+
outcome: _enum(["switching", "held"]),
|
|
29937
|
+
tier: CamProfileSchema.nullable(),
|
|
29938
|
+
reason: string()
|
|
29939
|
+
}), { kind: "mutation" }), method(object({
|
|
29490
29940
|
deviceId: number().int().nonnegative(),
|
|
29491
29941
|
sessionId: string()
|
|
29492
29942
|
}), WebrtcSessionDebugSchema, { kind: "query" });
|
|
@@ -29726,6 +30176,59 @@ var AddonAutoUpdateSchema = ChannelWithInheritSchema;
|
|
|
29726
30176
|
var RestartAddonResultSchema = unknown();
|
|
29727
30177
|
var InstallPackageResultSchema = unknown();
|
|
29728
30178
|
var ReloadPackagesResultSchema = unknown();
|
|
30179
|
+
/**
|
|
30180
|
+
* What an uninstall did on ONE node.
|
|
30181
|
+
* - `uninstalled` — removed: runner(s) stopped, caps gone, code deleted.
|
|
30182
|
+
* - `not-installed` — the node did not have it (nothing to do).
|
|
30183
|
+
* - `refused` — protected / bootstrap package; nothing touched.
|
|
30184
|
+
* - `failed` — attempted and did not complete; `error` says why.
|
|
30185
|
+
* - `pending-reconnect` — the node is OFFLINE: its record was pruned so the
|
|
30186
|
+
* back-fill never returns the package, and the stale-addon sweep removes the
|
|
30187
|
+
* copy when the node registers again (only once the hub no longer has it).
|
|
30188
|
+
*/
|
|
30189
|
+
var UninstallNodeOutcomeSchema = _enum([
|
|
30190
|
+
"uninstalled",
|
|
30191
|
+
"not-installed",
|
|
30192
|
+
"refused",
|
|
30193
|
+
"failed",
|
|
30194
|
+
"pending-reconnect"
|
|
30195
|
+
]);
|
|
30196
|
+
var UninstallNodeResultSchema = object({
|
|
30197
|
+
nodeId: string(),
|
|
30198
|
+
outcome: UninstallNodeOutcomeSchema,
|
|
30199
|
+
error: string().optional(),
|
|
30200
|
+
addonIds: array(string()).readonly(),
|
|
30201
|
+
runnersStopped: array(string()).readonly(),
|
|
30202
|
+
warnings: array(string()).readonly()
|
|
30203
|
+
});
|
|
30204
|
+
var UninstallPackageResultSchema = object({
|
|
30205
|
+
/** Every targeted node ended `uninstalled`, `not-installed` or `pending-reconnect`. */
|
|
30206
|
+
success: boolean(),
|
|
30207
|
+
packageName: string(),
|
|
30208
|
+
results: array(UninstallNodeResultSchema).readonly()
|
|
30209
|
+
});
|
|
30210
|
+
/**
|
|
30211
|
+
* `unreachable` lists online agents whose status read FAILED — absence from
|
|
30212
|
+
* `installations` is only "not installed" for a node that answered (D315).
|
|
30213
|
+
*/
|
|
30214
|
+
var PackageInstallationsSchema = object({
|
|
30215
|
+
installations: array(object({
|
|
30216
|
+
packageName: string(),
|
|
30217
|
+
nodeId: string(),
|
|
30218
|
+
nodeName: string(),
|
|
30219
|
+
isHub: boolean(),
|
|
30220
|
+
isOnline: boolean(),
|
|
30221
|
+
version: string().nullable(),
|
|
30222
|
+
addonIds: array(string()).readonly(),
|
|
30223
|
+
source: _enum(["live", "recorded"]),
|
|
30224
|
+
/** The hub installs this package too. `false` on an agent row = an orphan. */
|
|
30225
|
+
onHub: boolean()
|
|
30226
|
+
})).readonly(),
|
|
30227
|
+
unreachable: array(object({
|
|
30228
|
+
nodeId: string(),
|
|
30229
|
+
error: string()
|
|
30230
|
+
})).readonly()
|
|
30231
|
+
});
|
|
29729
30232
|
var BulkUpdateItemStatusSchema = _enum([
|
|
29730
30233
|
"queued",
|
|
29731
30234
|
"updating",
|
|
@@ -29808,10 +30311,14 @@ method(_void(), array(AddonListItemSchema).readonly()), method(object({
|
|
|
29808
30311
|
}), method(object({ packageName: string() }), InstallPackageResultSchema, {
|
|
29809
30312
|
kind: "mutation",
|
|
29810
30313
|
auth: "admin"
|
|
29811
|
-
}), method(_void(), boolean()), method(_void(), array(unknown()).readonly()), method(object({
|
|
30314
|
+
}), method(_void(), boolean()), method(_void(), array(unknown()).readonly()), method(object({
|
|
30315
|
+
packageName: string().min(1),
|
|
30316
|
+
nodeId: string().optional(),
|
|
30317
|
+
everywhere: boolean().optional()
|
|
30318
|
+
}), UninstallPackageResultSchema, {
|
|
29812
30319
|
kind: "mutation",
|
|
29813
30320
|
auth: "admin"
|
|
29814
|
-
}), method(_void(), ReloadPackagesResultSchema, {
|
|
30321
|
+
}), method(object({ packageName: string().optional() }), PackageInstallationsSchema, { auth: "admin" }), method(_void(), ReloadPackagesResultSchema, {
|
|
29815
30322
|
kind: "mutation",
|
|
29816
30323
|
auth: "admin"
|
|
29817
30324
|
}), method(object({ query: string().optional() }), array(SearchResultSchema)), method(object({ nodeId: string().optional() }), array(PackageUpdateSchema).readonly(), { auth: "admin" }), method(object({
|
|
@@ -33298,7 +33805,8 @@ var ConnectionEndpointSchema = object({
|
|
|
33298
33805
|
"lan-ipv6",
|
|
33299
33806
|
"public",
|
|
33300
33807
|
"loopback",
|
|
33301
|
-
"app-link"
|
|
33808
|
+
"app-link",
|
|
33809
|
+
"custom"
|
|
33302
33810
|
]),
|
|
33303
33811
|
/**
|
|
33304
33812
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -33367,7 +33875,7 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
33367
33875
|
localPort: AdvertisedLocalPortSchema
|
|
33368
33876
|
});
|
|
33369
33877
|
/**
|
|
33370
|
-
* The address flagged for notification
|
|
33878
|
+
* The address flagged for notification taps (`notificationTaps`). `baseUrl: null` = AUTO, which
|
|
33371
33879
|
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
33372
33880
|
* so the UI can show it either way.
|
|
33373
33881
|
*/
|
|
@@ -33400,6 +33908,72 @@ var ViewerEndpointsSchema = object({
|
|
|
33400
33908
|
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
33401
33909
|
resolved: array(string()).readonly()
|
|
33402
33910
|
});
|
|
33911
|
+
/**
|
|
33912
|
+
* DEPRECATED compatibility shape of `getHubAddresses` (D729 amendment, kept
|
|
33913
|
+
* for addons built against it): `cluster` is the `internal` role, `browser`
|
|
33914
|
+
* the `publicEndpoint` role; `override` is the flagged address.
|
|
33915
|
+
*/
|
|
33916
|
+
var HubAddressSnapshotSchema = object({
|
|
33917
|
+
override: string().nullable(),
|
|
33918
|
+
resolved: string().nullable(),
|
|
33919
|
+
source: _enum([
|
|
33920
|
+
"override",
|
|
33921
|
+
"auto",
|
|
33922
|
+
"none"
|
|
33923
|
+
])
|
|
33924
|
+
});
|
|
33925
|
+
var HubAddressesSchema = object({
|
|
33926
|
+
cluster: HubAddressSnapshotSchema,
|
|
33927
|
+
browser: HubAddressSnapshotSchema
|
|
33928
|
+
});
|
|
33929
|
+
/**
|
|
33930
|
+
* What an address is used for (`hub-address.ts`, D734). `appConnections` is
|
|
33931
|
+
* many-valued; `notificationTaps`, `publicEndpoint` and `internal` are carried
|
|
33932
|
+
* by at most one address.
|
|
33933
|
+
*/
|
|
33934
|
+
var HubAddressRoleSchema = _enum(HUB_ADDRESS_ROLES);
|
|
33935
|
+
var RoleSourceSchema = _enum([
|
|
33936
|
+
"flagged",
|
|
33937
|
+
"auto",
|
|
33938
|
+
"none"
|
|
33939
|
+
]);
|
|
33940
|
+
/** One single-valued role: the flagged address, the one in use, and why. */
|
|
33941
|
+
var HubAddressRoleResolutionSchema = object({
|
|
33942
|
+
/** The address carrying the flag, or null = automatic. */
|
|
33943
|
+
flagged: string().nullable(),
|
|
33944
|
+
/** The address in use, or null when nothing qualifies (never loopback). */
|
|
33945
|
+
resolved: string().nullable(),
|
|
33946
|
+
source: RoleSourceSchema
|
|
33947
|
+
});
|
|
33948
|
+
var HubAppConnectionsResolutionSchema = object({
|
|
33949
|
+
/** The addresses flagged `appConnections`, or empty = automatic. */
|
|
33950
|
+
flagged: array(string()).readonly(),
|
|
33951
|
+
/** What the apps race right now. */
|
|
33952
|
+
resolved: array(string()).readonly(),
|
|
33953
|
+
source: RoleSourceSchema
|
|
33954
|
+
});
|
|
33955
|
+
var HubAddressBookSchema = object({
|
|
33956
|
+
rows: array(ConnectionEndpointSchema.extend({
|
|
33957
|
+
/** In the hub's detected palette right now. */
|
|
33958
|
+
detected: boolean(),
|
|
33959
|
+
/** Entered by the operator (removable). */
|
|
33960
|
+
custom: boolean(),
|
|
33961
|
+
/** The roles explicitly flagged on this address. */
|
|
33962
|
+
flags: array(HubAddressRoleSchema).readonly(),
|
|
33963
|
+
/** The roles this address serves right now — flagged or automatic. */
|
|
33964
|
+
inUse: array(HubAddressRoleSchema).readonly(),
|
|
33965
|
+
/** The roles this address may be flagged with. */
|
|
33966
|
+
eligible: array(HubAddressRoleSchema).readonly()
|
|
33967
|
+
})).readonly(),
|
|
33968
|
+
roles: object({
|
|
33969
|
+
appConnections: HubAppConnectionsResolutionSchema,
|
|
33970
|
+
notificationTaps: HubAddressRoleResolutionSchema,
|
|
33971
|
+
internal: HubAddressRoleResolutionSchema,
|
|
33972
|
+
publicEndpoint: HubAddressRoleResolutionSchema
|
|
33973
|
+
}),
|
|
33974
|
+
/** The `hub=` an app link carries (D709), or null. */
|
|
33975
|
+
appLinkHub: string().nullable()
|
|
33976
|
+
});
|
|
33403
33977
|
var AllowedAddressesSchema = object({
|
|
33404
33978
|
/**
|
|
33405
33979
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -33443,10 +34017,27 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
33443
34017
|
* tunnel always emits `https://` regardless. */
|
|
33444
34018
|
scheme: _enum(["http", "https"]).optional(),
|
|
33445
34019
|
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
33446
|
-
* an address notification
|
|
34020
|
+
* an address notification taps can be flagged with, not a hub
|
|
33447
34021
|
* route. Default `false`: racers and rankers never see it. */
|
|
33448
34022
|
includeAppLink: boolean().optional()
|
|
33449
|
-
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(
|
|
34023
|
+
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }), method(object({ scheme: _enum(["http", "https"]).optional() }).optional(), HubAddressBookSchema), method(object({
|
|
34024
|
+
baseUrl: string(),
|
|
34025
|
+
label: string().max(80)
|
|
34026
|
+
}), HubAddressBookSchema, {
|
|
34027
|
+
kind: "mutation",
|
|
34028
|
+
auth: "admin"
|
|
34029
|
+
}), method(object({ baseUrl: string() }), HubAddressBookSchema, {
|
|
34030
|
+
kind: "mutation",
|
|
34031
|
+
auth: "admin"
|
|
34032
|
+
}), method(object({
|
|
34033
|
+
role: HubAddressRoleSchema,
|
|
34034
|
+
baseUrl: string().nullable(),
|
|
34035
|
+
enabled: boolean(),
|
|
34036
|
+
acceptInsecureHttp: boolean().optional()
|
|
34037
|
+
}), HubAddressBookSchema, {
|
|
34038
|
+
kind: "mutation",
|
|
34039
|
+
auth: "admin"
|
|
34040
|
+
}), method(_void(), HubAddressesSchema), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
|
|
33450
34041
|
kind: "mutation",
|
|
33451
34042
|
auth: "admin"
|
|
33452
34043
|
}), method(object({
|
|
@@ -40207,6 +40798,32 @@ var TotpStatusSchema = object({
|
|
|
40207
40798
|
/** Null when no row exists OR the row is still pending confirmation. */
|
|
40208
40799
|
confirmedAt: number().nullable()
|
|
40209
40800
|
});
|
|
40801
|
+
/**
|
|
40802
|
+
* user-management — singleton capability for user accounts, API keys,
|
|
40803
|
+
* and scoped tokens.
|
|
40804
|
+
*
|
|
40805
|
+
* v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
|
|
40806
|
+
* — the subset check on `setUserScopes` / `createScopedToken` is moot
|
|
40807
|
+
* because non-admins never reach these. If/when we open non-admin
|
|
40808
|
+
* delegation, structural caller-scope subset check goes inside the
|
|
40809
|
+
* provider.
|
|
40810
|
+
*/
|
|
40811
|
+
var ExternalIdentitySchema = object({
|
|
40812
|
+
/** Login-method id of the provider instance, e.g. `auth-oidc/authentik`. */
|
|
40813
|
+
provider: string(),
|
|
40814
|
+
/** The IdP's stable subject (`sub`) for this account. */
|
|
40815
|
+
subject: string(),
|
|
40816
|
+
/** The verified `iss` of the IdP the identity was linked under — `sub` is unique only per issuer. */
|
|
40817
|
+
issuer: string(),
|
|
40818
|
+
userId: string(),
|
|
40819
|
+
/** What the IdP called the account at link time (username / email) — display only. */
|
|
40820
|
+
label: string().optional(),
|
|
40821
|
+
linkedAt: number()
|
|
40822
|
+
});
|
|
40823
|
+
var ExternalIdentityKeySchema = object({
|
|
40824
|
+
provider: string().min(1),
|
|
40825
|
+
subject: string().min(1)
|
|
40826
|
+
});
|
|
40210
40827
|
method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserInputSchema, UserSummarySchema, {
|
|
40211
40828
|
kind: "mutation",
|
|
40212
40829
|
auth: "admin",
|
|
@@ -40320,7 +40937,22 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
|
|
|
40320
40937
|
userId: string(),
|
|
40321
40938
|
username: string(),
|
|
40322
40939
|
scopes: array(TokenScopeSchema)
|
|
40323
|
-
}).nullable(), { access: "view" }), method(
|
|
40940
|
+
}).nullable(), { access: "view" }), method(object({ userId: string() }), array(ExternalIdentitySchema), { auth: "admin" }), method(ExternalIdentityKeySchema, object({
|
|
40941
|
+
userId: string(),
|
|
40942
|
+
issuer: string()
|
|
40943
|
+
}).nullable(), { auth: "admin" }), method(ExternalIdentityKeySchema.extend({
|
|
40944
|
+
userId: string(),
|
|
40945
|
+
issuer: string().min(1),
|
|
40946
|
+
label: string().optional()
|
|
40947
|
+
}), object({ success: literal(true) }), {
|
|
40948
|
+
kind: "mutation",
|
|
40949
|
+
auth: "admin",
|
|
40950
|
+
access: "create"
|
|
40951
|
+
}), method(ExternalIdentityKeySchema.extend({ userId: string() }), object({ success: boolean() }), {
|
|
40952
|
+
kind: "mutation",
|
|
40953
|
+
auth: "admin",
|
|
40954
|
+
access: "delete"
|
|
40955
|
+
}), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: boolean() }), {
|
|
40324
40956
|
kind: "mutation",
|
|
40325
40957
|
auth: "admin",
|
|
40326
40958
|
access: "delete"
|
|
@@ -41022,6 +41654,16 @@ var zoneRulesCapability = {
|
|
|
41022
41654
|
durability: "restored"
|
|
41023
41655
|
};
|
|
41024
41656
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
41657
|
+
Object.freeze({
|
|
41658
|
+
person: .5,
|
|
41659
|
+
vehicle: .5,
|
|
41660
|
+
animal: .5
|
|
41661
|
+
});
|
|
41662
|
+
Object.freeze({
|
|
41663
|
+
person: .65,
|
|
41664
|
+
vehicle: .65,
|
|
41665
|
+
animal: .65
|
|
41666
|
+
});
|
|
41025
41667
|
/**
|
|
41026
41668
|
* Accessory device helpers — shared across drivers.
|
|
41027
41669
|
*
|
|
@@ -42746,6 +43388,12 @@ Object.freeze({
|
|
|
42746
43388
|
addonId: null,
|
|
42747
43389
|
access: "view"
|
|
42748
43390
|
},
|
|
43391
|
+
"addons.listInstallations": {
|
|
43392
|
+
capName: "addons",
|
|
43393
|
+
capScope: "system",
|
|
43394
|
+
addonId: null,
|
|
43395
|
+
access: "view"
|
|
43396
|
+
},
|
|
42749
43397
|
"addons.listJobs": {
|
|
42750
43398
|
capName: "addons",
|
|
42751
43399
|
capScope: "system",
|
|
@@ -43928,90 +44576,18 @@ Object.freeze({
|
|
|
43928
44576
|
addonId: null,
|
|
43929
44577
|
access: "create"
|
|
43930
44578
|
},
|
|
43931
|
-
"decoder.createSession": {
|
|
43932
|
-
capName: "decoder",
|
|
43933
|
-
capScope: "system",
|
|
43934
|
-
addonId: null,
|
|
43935
|
-
access: "view"
|
|
43936
|
-
},
|
|
43937
|
-
"decoder.destroySession": {
|
|
43938
|
-
capName: "decoder",
|
|
43939
|
-
capScope: "system",
|
|
43940
|
-
addonId: null,
|
|
43941
|
-
access: "delete"
|
|
43942
|
-
},
|
|
43943
|
-
"decoder.getFrame": {
|
|
43944
|
-
capName: "decoder",
|
|
43945
|
-
capScope: "system",
|
|
43946
|
-
addonId: null,
|
|
43947
|
-
access: "view"
|
|
43948
|
-
},
|
|
43949
44579
|
"decoder.getInfo": {
|
|
43950
44580
|
capName: "decoder",
|
|
43951
44581
|
capScope: "system",
|
|
43952
44582
|
addonId: null,
|
|
43953
44583
|
access: "view"
|
|
43954
44584
|
},
|
|
43955
|
-
"decoder.getShmStats": {
|
|
43956
|
-
capName: "decoder",
|
|
43957
|
-
capScope: "system",
|
|
43958
|
-
addonId: null,
|
|
43959
|
-
access: "view"
|
|
43960
|
-
},
|
|
43961
|
-
"decoder.getStats": {
|
|
43962
|
-
capName: "decoder",
|
|
43963
|
-
capScope: "system",
|
|
43964
|
-
addonId: null,
|
|
43965
|
-
access: "view"
|
|
43966
|
-
},
|
|
43967
|
-
"decoder.listActiveSessions": {
|
|
43968
|
-
capName: "decoder",
|
|
43969
|
-
capScope: "system",
|
|
43970
|
-
addonId: null,
|
|
43971
|
-
access: "view"
|
|
43972
|
-
},
|
|
43973
|
-
"decoder.openStream": {
|
|
43974
|
-
capName: "decoder",
|
|
43975
|
-
capScope: "system",
|
|
43976
|
-
addonId: null,
|
|
43977
|
-
access: "view"
|
|
43978
|
-
},
|
|
43979
|
-
"decoder.pullFrames": {
|
|
43980
|
-
capName: "decoder",
|
|
43981
|
-
capScope: "system",
|
|
43982
|
-
addonId: null,
|
|
43983
|
-
access: "view"
|
|
43984
|
-
},
|
|
43985
|
-
"decoder.pullHandles": {
|
|
43986
|
-
capName: "decoder",
|
|
43987
|
-
capScope: "system",
|
|
43988
|
-
addonId: null,
|
|
43989
|
-
access: "view"
|
|
43990
|
-
},
|
|
43991
|
-
"decoder.pushPacket": {
|
|
43992
|
-
capName: "decoder",
|
|
43993
|
-
capScope: "system",
|
|
43994
|
-
addonId: null,
|
|
43995
|
-
access: "view"
|
|
43996
|
-
},
|
|
43997
44585
|
"decoder.reprobeHwaccel": {
|
|
43998
44586
|
capName: "decoder",
|
|
43999
44587
|
capScope: "system",
|
|
44000
44588
|
addonId: null,
|
|
44001
44589
|
access: "create"
|
|
44002
44590
|
},
|
|
44003
|
-
"decoder.supportsCodec": {
|
|
44004
|
-
capName: "decoder",
|
|
44005
|
-
capScope: "system",
|
|
44006
|
-
addonId: null,
|
|
44007
|
-
access: "view"
|
|
44008
|
-
},
|
|
44009
|
-
"decoder.updateConfig": {
|
|
44010
|
-
capName: "decoder",
|
|
44011
|
-
capScope: "system",
|
|
44012
|
-
addonId: null,
|
|
44013
|
-
access: "view"
|
|
44014
|
-
},
|
|
44015
44591
|
"detectionPipeline.applyDeviceSettingsPatch": {
|
|
44016
44592
|
capName: "detection-pipeline",
|
|
44017
44593
|
capScope: "device",
|
|
@@ -45500,12 +46076,24 @@ Object.freeze({
|
|
|
45500
46076
|
addonId: null,
|
|
45501
46077
|
access: "view"
|
|
45502
46078
|
},
|
|
46079
|
+
"localNetwork.addCustomAddress": {
|
|
46080
|
+
capName: "local-network",
|
|
46081
|
+
capScope: "system",
|
|
46082
|
+
addonId: null,
|
|
46083
|
+
access: "create"
|
|
46084
|
+
},
|
|
45503
46085
|
"localNetwork.downloadCa": {
|
|
45504
46086
|
capName: "local-network",
|
|
45505
46087
|
capScope: "system",
|
|
45506
46088
|
addonId: null,
|
|
45507
46089
|
access: "view"
|
|
45508
46090
|
},
|
|
46091
|
+
"localNetwork.getAddresses": {
|
|
46092
|
+
capName: "local-network",
|
|
46093
|
+
capScope: "system",
|
|
46094
|
+
addonId: null,
|
|
46095
|
+
access: "view"
|
|
46096
|
+
},
|
|
45509
46097
|
"localNetwork.getAllowedAddresses": {
|
|
45510
46098
|
capName: "local-network",
|
|
45511
46099
|
capScope: "system",
|
|
@@ -45518,6 +46106,12 @@ Object.freeze({
|
|
|
45518
46106
|
addonId: null,
|
|
45519
46107
|
access: "view"
|
|
45520
46108
|
},
|
|
46109
|
+
"localNetwork.getHubAddresses": {
|
|
46110
|
+
capName: "local-network",
|
|
46111
|
+
capScope: "system",
|
|
46112
|
+
addonId: null,
|
|
46113
|
+
access: "view"
|
|
46114
|
+
},
|
|
45521
46115
|
"localNetwork.getNotificationEndpoint": {
|
|
45522
46116
|
capName: "local-network",
|
|
45523
46117
|
capScope: "system",
|
|
@@ -45554,6 +46148,12 @@ Object.freeze({
|
|
|
45554
46148
|
addonId: null,
|
|
45555
46149
|
access: "create"
|
|
45556
46150
|
},
|
|
46151
|
+
"localNetwork.removeCustomAddress": {
|
|
46152
|
+
capName: "local-network",
|
|
46153
|
+
capScope: "system",
|
|
46154
|
+
addonId: null,
|
|
46155
|
+
access: "delete"
|
|
46156
|
+
},
|
|
45557
46157
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
45558
46158
|
capName: "local-network",
|
|
45559
46159
|
capScope: "system",
|
|
@@ -45566,6 +46166,12 @@ Object.freeze({
|
|
|
45566
46166
|
addonId: null,
|
|
45567
46167
|
access: "create"
|
|
45568
46168
|
},
|
|
46169
|
+
"localNetwork.setAddressRole": {
|
|
46170
|
+
capName: "local-network",
|
|
46171
|
+
capScope: "system",
|
|
46172
|
+
addonId: null,
|
|
46173
|
+
access: "create"
|
|
46174
|
+
},
|
|
45569
46175
|
"localNetwork.setAllowedAddresses": {
|
|
45570
46176
|
capName: "local-network",
|
|
45571
46177
|
capScope: "system",
|
|
@@ -47012,6 +47618,12 @@ Object.freeze({
|
|
|
47012
47618
|
addonId: null,
|
|
47013
47619
|
access: "create"
|
|
47014
47620
|
},
|
|
47621
|
+
"pipelineAnalytics.setRetrainFrameComplete": {
|
|
47622
|
+
capName: "pipeline-analytics",
|
|
47623
|
+
capScope: "device",
|
|
47624
|
+
addonId: null,
|
|
47625
|
+
access: "create"
|
|
47626
|
+
},
|
|
47015
47627
|
"pipelineAnalytics.setTrackFlags": {
|
|
47016
47628
|
capName: "pipeline-analytics",
|
|
47017
47629
|
capScope: "device",
|
|
@@ -47048,6 +47660,12 @@ Object.freeze({
|
|
|
47048
47660
|
addonId: null,
|
|
47049
47661
|
access: "delete"
|
|
47050
47662
|
},
|
|
47663
|
+
"pipelineAnalytics.writeRetrainArchive": {
|
|
47664
|
+
capName: "pipeline-analytics",
|
|
47665
|
+
capScope: "device",
|
|
47666
|
+
addonId: null,
|
|
47667
|
+
access: "create"
|
|
47668
|
+
},
|
|
47051
47669
|
"pipelineExecutor.cacheFrameInPool": {
|
|
47052
47670
|
capName: "pipeline-executor",
|
|
47053
47671
|
capScope: "system",
|
|
@@ -47060,13 +47678,13 @@ Object.freeze({
|
|
|
47060
47678
|
addonId: null,
|
|
47061
47679
|
access: "delete"
|
|
47062
47680
|
},
|
|
47063
|
-
"pipelineExecutor.
|
|
47681
|
+
"pipelineExecutor.clearModelBoundDeviceOverrides": {
|
|
47064
47682
|
capName: "pipeline-executor",
|
|
47065
47683
|
capScope: "system",
|
|
47066
47684
|
addonId: null,
|
|
47067
47685
|
access: "delete"
|
|
47068
47686
|
},
|
|
47069
|
-
"pipelineExecutor.
|
|
47687
|
+
"pipelineExecutor.deleteModel": {
|
|
47070
47688
|
capName: "pipeline-executor",
|
|
47071
47689
|
capScope: "system",
|
|
47072
47690
|
addonId: null,
|
|
@@ -47210,12 +47828,6 @@ Object.freeze({
|
|
|
47210
47828
|
addonId: null,
|
|
47211
47829
|
access: "view"
|
|
47212
47830
|
},
|
|
47213
|
-
"pipelineExecutor.listTemplates": {
|
|
47214
|
-
capName: "pipeline-executor",
|
|
47215
|
-
capScope: "system",
|
|
47216
|
-
addonId: null,
|
|
47217
|
-
access: "view"
|
|
47218
|
-
},
|
|
47219
47831
|
"pipelineExecutor.rearmInferenceDevice": {
|
|
47220
47832
|
capName: "pipeline-executor",
|
|
47221
47833
|
capScope: "system",
|
|
@@ -47240,12 +47852,6 @@ Object.freeze({
|
|
|
47240
47852
|
addonId: null,
|
|
47241
47853
|
access: "create"
|
|
47242
47854
|
},
|
|
47243
|
-
"pipelineExecutor.saveTemplate": {
|
|
47244
|
-
capName: "pipeline-executor",
|
|
47245
|
-
capScope: "system",
|
|
47246
|
-
addonId: null,
|
|
47247
|
-
access: "create"
|
|
47248
|
-
},
|
|
47249
47855
|
"pipelineExecutor.setVideoPipelineSteps": {
|
|
47250
47856
|
capName: "pipeline-executor",
|
|
47251
47857
|
capScope: "system",
|
|
@@ -47264,41 +47870,35 @@ Object.freeze({
|
|
|
47264
47870
|
addonId: null,
|
|
47265
47871
|
access: "create"
|
|
47266
47872
|
},
|
|
47267
|
-
"pipelineExecutor.updateTemplate": {
|
|
47268
|
-
capName: "pipeline-executor",
|
|
47269
|
-
capScope: "system",
|
|
47270
|
-
addonId: null,
|
|
47271
|
-
access: "create"
|
|
47272
|
-
},
|
|
47273
47873
|
"pipelineExecutor.validatePipeline": {
|
|
47274
47874
|
capName: "pipeline-executor",
|
|
47275
47875
|
capScope: "system",
|
|
47276
47876
|
addonId: null,
|
|
47277
47877
|
access: "view"
|
|
47278
47878
|
},
|
|
47279
|
-
"pipelineOrchestrator.
|
|
47879
|
+
"pipelineOrchestrator.applyAutoTune": {
|
|
47280
47880
|
capName: "pipeline-orchestrator",
|
|
47281
47881
|
capScope: "system",
|
|
47282
47882
|
addonId: null,
|
|
47283
47883
|
access: "create"
|
|
47284
47884
|
},
|
|
47285
|
-
"pipelineOrchestrator.
|
|
47885
|
+
"pipelineOrchestrator.applyDeviceSettingsPatch": {
|
|
47286
47886
|
capName: "pipeline-orchestrator",
|
|
47287
47887
|
capScope: "system",
|
|
47288
47888
|
addonId: null,
|
|
47289
47889
|
access: "create"
|
|
47290
47890
|
},
|
|
47291
|
-
"pipelineOrchestrator.
|
|
47891
|
+
"pipelineOrchestrator.assignAudio": {
|
|
47292
47892
|
capName: "pipeline-orchestrator",
|
|
47293
47893
|
capScope: "system",
|
|
47294
47894
|
addonId: null,
|
|
47295
47895
|
access: "create"
|
|
47296
47896
|
},
|
|
47297
|
-
"pipelineOrchestrator.
|
|
47897
|
+
"pipelineOrchestrator.assignPipeline": {
|
|
47298
47898
|
capName: "pipeline-orchestrator",
|
|
47299
47899
|
capScope: "system",
|
|
47300
47900
|
addonId: null,
|
|
47301
|
-
access: "
|
|
47901
|
+
access: "create"
|
|
47302
47902
|
},
|
|
47303
47903
|
"pipelineOrchestrator.getAgentLoad": {
|
|
47304
47904
|
capName: "pipeline-orchestrator",
|
|
@@ -47390,6 +47990,12 @@ Object.freeze({
|
|
|
47390
47990
|
addonId: null,
|
|
47391
47991
|
access: "view"
|
|
47392
47992
|
},
|
|
47993
|
+
"pipelineOrchestrator.getEffectiveShares": {
|
|
47994
|
+
capName: "pipeline-orchestrator",
|
|
47995
|
+
capScope: "system",
|
|
47996
|
+
addonId: null,
|
|
47997
|
+
access: "view"
|
|
47998
|
+
},
|
|
47393
47999
|
"pipelineOrchestrator.getGlobalMetrics": {
|
|
47394
48000
|
capName: "pipeline-orchestrator",
|
|
47395
48001
|
capScope: "system",
|
|
@@ -47426,19 +48032,19 @@ Object.freeze({
|
|
|
47426
48032
|
addonId: null,
|
|
47427
48033
|
access: "view"
|
|
47428
48034
|
},
|
|
47429
|
-
"pipelineOrchestrator.
|
|
48035
|
+
"pipelineOrchestrator.getPlacementStats": {
|
|
47430
48036
|
capName: "pipeline-orchestrator",
|
|
47431
48037
|
capScope: "system",
|
|
47432
48038
|
addonId: null,
|
|
47433
48039
|
access: "view"
|
|
47434
48040
|
},
|
|
47435
|
-
"pipelineOrchestrator.
|
|
48041
|
+
"pipelineOrchestrator.getReconcileFromDiskStatus": {
|
|
47436
48042
|
capName: "pipeline-orchestrator",
|
|
47437
48043
|
capScope: "system",
|
|
47438
48044
|
addonId: null,
|
|
47439
48045
|
access: "view"
|
|
47440
48046
|
},
|
|
47441
|
-
"pipelineOrchestrator.
|
|
48047
|
+
"pipelineOrchestrator.listAgentSettings": {
|
|
47442
48048
|
capName: "pipeline-orchestrator",
|
|
47443
48049
|
capScope: "system",
|
|
47444
48050
|
addonId: null,
|
|
@@ -47450,6 +48056,12 @@ Object.freeze({
|
|
|
47450
48056
|
addonId: null,
|
|
47451
48057
|
access: "create"
|
|
47452
48058
|
},
|
|
48059
|
+
"pipelineOrchestrator.planAutoTune": {
|
|
48060
|
+
capName: "pipeline-orchestrator",
|
|
48061
|
+
capScope: "system",
|
|
48062
|
+
addonId: null,
|
|
48063
|
+
access: "view"
|
|
48064
|
+
},
|
|
47453
48065
|
"pipelineOrchestrator.rebalance": {
|
|
47454
48066
|
capName: "pipeline-orchestrator",
|
|
47455
48067
|
capScope: "system",
|
|
@@ -47492,12 +48104,6 @@ Object.freeze({
|
|
|
47492
48104
|
addonId: null,
|
|
47493
48105
|
access: "create"
|
|
47494
48106
|
},
|
|
47495
|
-
"pipelineOrchestrator.saveTemplate": {
|
|
47496
|
-
capName: "pipeline-orchestrator",
|
|
47497
|
-
capScope: "system",
|
|
47498
|
-
addonId: null,
|
|
47499
|
-
access: "create"
|
|
47500
|
-
},
|
|
47501
48107
|
"pipelineOrchestrator.setAgentCapabilities": {
|
|
47502
48108
|
capName: "pipeline-orchestrator",
|
|
47503
48109
|
capScope: "system",
|
|
@@ -47510,12 +48116,6 @@ Object.freeze({
|
|
|
47510
48116
|
addonId: null,
|
|
47511
48117
|
access: "create"
|
|
47512
48118
|
},
|
|
47513
|
-
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
47514
|
-
capName: "pipeline-orchestrator",
|
|
47515
|
-
capScope: "system",
|
|
47516
|
-
addonId: null,
|
|
47517
|
-
access: "create"
|
|
47518
|
-
},
|
|
47519
48119
|
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
47520
48120
|
capName: "pipeline-orchestrator",
|
|
47521
48121
|
capScope: "system",
|
|
@@ -47552,6 +48152,12 @@ Object.freeze({
|
|
|
47552
48152
|
addonId: null,
|
|
47553
48153
|
access: "create"
|
|
47554
48154
|
},
|
|
48155
|
+
"pipelineOrchestrator.setCameraStepSettings": {
|
|
48156
|
+
capName: "pipeline-orchestrator",
|
|
48157
|
+
capScope: "system",
|
|
48158
|
+
addonId: null,
|
|
48159
|
+
access: "create"
|
|
48160
|
+
},
|
|
47555
48161
|
"pipelineOrchestrator.setCameraStepToggle": {
|
|
47556
48162
|
capName: "pipeline-orchestrator",
|
|
47557
48163
|
capScope: "system",
|
|
@@ -47570,25 +48176,37 @@ Object.freeze({
|
|
|
47570
48176
|
addonId: null,
|
|
47571
48177
|
access: "create"
|
|
47572
48178
|
},
|
|
48179
|
+
"pipelineOrchestrator.setLoadBalancingShares": {
|
|
48180
|
+
capName: "pipeline-orchestrator",
|
|
48181
|
+
capScope: "system",
|
|
48182
|
+
addonId: null,
|
|
48183
|
+
access: "create"
|
|
48184
|
+
},
|
|
47573
48185
|
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
47574
48186
|
capName: "pipeline-orchestrator",
|
|
47575
48187
|
capScope: "system",
|
|
47576
48188
|
addonId: null,
|
|
47577
48189
|
access: "create"
|
|
47578
48190
|
},
|
|
47579
|
-
"pipelineOrchestrator.
|
|
48191
|
+
"pipelineOrchestrator.setShareSource": {
|
|
47580
48192
|
capName: "pipeline-orchestrator",
|
|
47581
48193
|
capScope: "system",
|
|
47582
48194
|
addonId: null,
|
|
47583
48195
|
access: "create"
|
|
47584
48196
|
},
|
|
47585
|
-
"pipelineOrchestrator.
|
|
48197
|
+
"pipelineOrchestrator.suggestShares": {
|
|
48198
|
+
capName: "pipeline-orchestrator",
|
|
48199
|
+
capScope: "system",
|
|
48200
|
+
addonId: null,
|
|
48201
|
+
access: "view"
|
|
48202
|
+
},
|
|
48203
|
+
"pipelineOrchestrator.unassignAudio": {
|
|
47586
48204
|
capName: "pipeline-orchestrator",
|
|
47587
48205
|
capScope: "system",
|
|
47588
48206
|
addonId: null,
|
|
47589
48207
|
access: "create"
|
|
47590
48208
|
},
|
|
47591
|
-
"pipelineOrchestrator.
|
|
48209
|
+
"pipelineOrchestrator.unassignPipeline": {
|
|
47592
48210
|
capName: "pipeline-orchestrator",
|
|
47593
48211
|
capScope: "system",
|
|
47594
48212
|
addonId: null,
|
|
@@ -49028,12 +49646,6 @@ Object.freeze({
|
|
|
49028
49646
|
addonId: null,
|
|
49029
49647
|
access: "view"
|
|
49030
49648
|
},
|
|
49031
|
-
"streamBroker.pullFrameHandles": {
|
|
49032
|
-
capName: "stream-broker",
|
|
49033
|
-
capScope: "system",
|
|
49034
|
-
addonId: null,
|
|
49035
|
-
access: "view"
|
|
49036
|
-
},
|
|
49037
49649
|
"streamBroker.regenerateRtspToken": {
|
|
49038
49650
|
capName: "stream-broker",
|
|
49039
49651
|
capScope: "system",
|
|
@@ -49100,12 +49712,6 @@ Object.freeze({
|
|
|
49100
49712
|
addonId: null,
|
|
49101
49713
|
access: "create"
|
|
49102
49714
|
},
|
|
49103
|
-
"streamBroker.subscribeFrames": {
|
|
49104
|
-
capName: "stream-broker",
|
|
49105
|
-
capScope: "system",
|
|
49106
|
-
addonId: null,
|
|
49107
|
-
access: "create"
|
|
49108
|
-
},
|
|
49109
49715
|
"streamBroker.unassignProfile": {
|
|
49110
49716
|
capName: "stream-broker",
|
|
49111
49717
|
capScope: "system",
|
|
@@ -49118,12 +49724,6 @@ Object.freeze({
|
|
|
49118
49724
|
addonId: null,
|
|
49119
49725
|
access: "create"
|
|
49120
49726
|
},
|
|
49121
|
-
"streamBroker.unsubscribeFrames": {
|
|
49122
|
-
capName: "stream-broker",
|
|
49123
|
-
capScope: "system",
|
|
49124
|
-
addonId: null,
|
|
49125
|
-
access: "create"
|
|
49126
|
-
},
|
|
49127
49727
|
"streamCatalog.getCatalog": {
|
|
49128
49728
|
capName: "stream-catalog",
|
|
49129
49729
|
capScope: "device",
|
|
@@ -49418,18 +50018,36 @@ Object.freeze({
|
|
|
49418
50018
|
addonId: null,
|
|
49419
50019
|
access: "delete"
|
|
49420
50020
|
},
|
|
50021
|
+
"userManagement.findUserByExternalIdentity": {
|
|
50022
|
+
capName: "user-management",
|
|
50023
|
+
capScope: "system",
|
|
50024
|
+
addonId: null,
|
|
50025
|
+
access: "view"
|
|
50026
|
+
},
|
|
49421
50027
|
"userManagement.getTotpStatus": {
|
|
49422
50028
|
capName: "user-management",
|
|
49423
50029
|
capScope: "system",
|
|
49424
50030
|
addonId: null,
|
|
49425
50031
|
access: "view"
|
|
49426
50032
|
},
|
|
50033
|
+
"userManagement.linkExternalIdentity": {
|
|
50034
|
+
capName: "user-management",
|
|
50035
|
+
capScope: "system",
|
|
50036
|
+
addonId: null,
|
|
50037
|
+
access: "create"
|
|
50038
|
+
},
|
|
49427
50039
|
"userManagement.listApiKeys": {
|
|
49428
50040
|
capName: "user-management",
|
|
49429
50041
|
capScope: "system",
|
|
49430
50042
|
addonId: null,
|
|
49431
50043
|
access: "view"
|
|
49432
50044
|
},
|
|
50045
|
+
"userManagement.listExternalIdentities": {
|
|
50046
|
+
capName: "user-management",
|
|
50047
|
+
capScope: "system",
|
|
50048
|
+
addonId: null,
|
|
50049
|
+
access: "view"
|
|
50050
|
+
},
|
|
49433
50051
|
"userManagement.listOauthSessions": {
|
|
49434
50052
|
capName: "user-management",
|
|
49435
50053
|
capScope: "system",
|
|
@@ -49508,6 +50126,12 @@ Object.freeze({
|
|
|
49508
50126
|
addonId: null,
|
|
49509
50127
|
access: "create"
|
|
49510
50128
|
},
|
|
50129
|
+
"userManagement.unlinkExternalIdentity": {
|
|
50130
|
+
capName: "user-management",
|
|
50131
|
+
capScope: "system",
|
|
50132
|
+
addonId: null,
|
|
50133
|
+
access: "delete"
|
|
50134
|
+
},
|
|
49511
50135
|
"userManagement.updateUser": {
|
|
49512
50136
|
capName: "user-management",
|
|
49513
50137
|
capScope: "system",
|
|
@@ -49820,6 +50444,12 @@ Object.freeze({
|
|
|
49820
50444
|
addonId: null,
|
|
49821
50445
|
access: "create"
|
|
49822
50446
|
},
|
|
50447
|
+
"webrtcSession.applyDownlinkProbe": {
|
|
50448
|
+
capName: "webrtc-session",
|
|
50449
|
+
capScope: "device",
|
|
50450
|
+
addonId: null,
|
|
50451
|
+
access: "create"
|
|
50452
|
+
},
|
|
49823
50453
|
"webrtcSession.closeSession": {
|
|
49824
50454
|
capName: "webrtc-session",
|
|
49825
50455
|
capScope: "device",
|
|
@@ -51783,11 +52413,6 @@ Object.freeze({
|
|
|
51783
52413
|
form: "single",
|
|
51784
52414
|
optional: false
|
|
51785
52415
|
}],
|
|
51786
|
-
"decoder.createSession": [{
|
|
51787
|
-
name: "deviceId",
|
|
51788
|
-
form: "single",
|
|
51789
|
-
optional: true
|
|
51790
|
-
}],
|
|
51791
52416
|
"detectionPipeline.applyDeviceSettingsPatch": [{
|
|
51792
52417
|
name: "deviceId",
|
|
51793
52418
|
form: "single",
|
|
@@ -52998,6 +53623,11 @@ Object.freeze({
|
|
|
52998
53623
|
form: "single",
|
|
52999
53624
|
optional: false
|
|
53000
53625
|
}],
|
|
53626
|
+
"pipelineAnalytics.setRetrainFrameComplete": [{
|
|
53627
|
+
name: "deviceId",
|
|
53628
|
+
form: "single",
|
|
53629
|
+
optional: false
|
|
53630
|
+
}],
|
|
53001
53631
|
"pipelineAnalytics.setTrackFlags": [{
|
|
53002
53632
|
name: "deviceId",
|
|
53003
53633
|
form: "single",
|
|
@@ -53018,6 +53648,11 @@ Object.freeze({
|
|
|
53018
53648
|
form: "single",
|
|
53019
53649
|
optional: false
|
|
53020
53650
|
}],
|
|
53651
|
+
"pipelineExecutor.clearModelBoundDeviceOverrides": [{
|
|
53652
|
+
name: "deviceIds",
|
|
53653
|
+
form: "array",
|
|
53654
|
+
optional: true
|
|
53655
|
+
}],
|
|
53021
53656
|
"pipelineExecutor.runPipeline": [{
|
|
53022
53657
|
name: "deviceId",
|
|
53023
53658
|
form: "single",
|
|
@@ -53123,6 +53758,11 @@ Object.freeze({
|
|
|
53123
53758
|
form: "single",
|
|
53124
53759
|
optional: false
|
|
53125
53760
|
}],
|
|
53761
|
+
"pipelineOrchestrator.setCameraStepSettings": [{
|
|
53762
|
+
name: "deviceId",
|
|
53763
|
+
form: "single",
|
|
53764
|
+
optional: false
|
|
53765
|
+
}],
|
|
53126
53766
|
"pipelineOrchestrator.setCameraStepToggle": [{
|
|
53127
53767
|
name: "deviceId",
|
|
53128
53768
|
form: "single",
|
|
@@ -53894,6 +54534,11 @@ Object.freeze({
|
|
|
53894
54534
|
form: "single",
|
|
53895
54535
|
optional: false
|
|
53896
54536
|
}],
|
|
54537
|
+
"webrtcSession.applyDownlinkProbe": [{
|
|
54538
|
+
name: "deviceId",
|
|
54539
|
+
form: "single",
|
|
54540
|
+
optional: false
|
|
54541
|
+
}],
|
|
53897
54542
|
"webrtcSession.closeSession": [{
|
|
53898
54543
|
name: "deviceId",
|
|
53899
54544
|
form: "single",
|
|
@@ -54427,7 +55072,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
54427
55072
|
{
|
|
54428
55073
|
name: "summarySection",
|
|
54429
55074
|
label: "Summary: this section",
|
|
54430
|
-
description: "The section a per-section summary row is about
|
|
55075
|
+
description: "The section a per-section summary row is about; on a summary sent as one message, every section it reports, comma-separated.",
|
|
54431
55076
|
example: "Batterie scariche",
|
|
54432
55077
|
group: "system",
|
|
54433
55078
|
families: ["rule"],
|
|
@@ -156085,7 +156730,7 @@ function buildInitialStatus2(config, enabled) {
|
|
|
156085
156730
|
* Node-only (`node:child_process`), so it lives under `@camstack/types/node`.
|
|
156086
156731
|
*/
|
|
156087
156732
|
/** The detail a site refusing for want of a binary puts in its refusal. */
|
|
156088
|
-
var NO_PINNED_FFMPEG_DETAIL = "no pinned ffmpeg on this node
|
|
156733
|
+
var NO_PINNED_FFMPEG_DETAIL = "no pinned ffmpeg on this node";
|
|
156089
156734
|
/**
|
|
156090
156735
|
* {@link pinnedFfmpegSpawner}, asked at the point of use through the node's
|
|
156091
156736
|
* resolver (`memoizePinnedFfmpeg`). A site that keeps the RESOLVER rather than
|
|
@@ -156225,7 +156870,7 @@ var reolinkCameraSchema = object({
|
|
|
156225
156870
|
host: string().describe("Camera IP or hostname"),
|
|
156226
156871
|
port: number().default(9e3).describe("Baichuan port (default 9000)"),
|
|
156227
156872
|
username: string().default("admin").describe("Username"),
|
|
156228
|
-
password: string().describe("Password"),
|
|
156873
|
+
password: string().describe("Password").meta({ secret: true }),
|
|
156229
156874
|
/**
|
|
156230
156875
|
* Transport mode resolved at creation time by autodetect (Slice 15).
|
|
156231
156876
|
* - `tcp` : standard TCP-based Baichuan (regular cameras, NVR/Hub)
|
|
@@ -156906,7 +157551,7 @@ var reolinkHubSchema = object({
|
|
|
156906
157551
|
host: string().describe("Hub IP or hostname"),
|
|
156907
157552
|
port: number().default(9e3).describe("Baichuan port (default 9000)"),
|
|
156908
157553
|
username: string().default("admin"),
|
|
156909
|
-
password: string(),
|
|
157554
|
+
password: string().meta({ secret: true }),
|
|
156910
157555
|
/** Hubs are TCP-only on supported firmwares — kept here for symmetry. */
|
|
156911
157556
|
transport: _enum(["tcp", "udp"]).default("tcp"),
|
|
156912
157557
|
/** UID is unused on Hubs (no UDP discovery), but persisted for symmetry. */
|