@camstack/addon-model-studio 1.1.214 → 1.1.216
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/{MotionZonesSettings-BQ0UOfb8.mjs → MotionZonesSettings-4HEAfNAZ.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-q_9yxl4v.mjs → PrivacyMaskSettings-CyrRi4XA.mjs} +4 -4
- package/dist/{SceneMonitorEditor-Bmz5Y9X5.mjs → SceneMonitorEditor-CprmQzlB.mjs} +3 -3
- package/dist/_stub.js +3416 -3117
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-uW1Zd-nw.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DuZ4j4Tj.mjs} +4 -4
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CQ2lOvCS.mjs +26 -0
- package/dist/addon-model-studio.css +1 -1
- package/dist/{hostInit-XNV3DgEX.mjs → hostInit-DgQAw-Tm.mjs} +3 -3
- package/dist/model-studio.addon.js +45 -439
- package/dist/model-studio.addon.mjs +45 -439
- package/dist/{player-overlays-DyBPgoW8.mjs → player-overlays-2W0Mwbzt.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-CvxBWUH9.mjs → responsive-B69r95CT.mjs} +1 -1
- package/dist/{scene-monitor-copy-Bbrh5uOi.mjs → scene-monitor-copy-CeTU5shK.mjs} +1 -1
- package/dist/{square-Ebm5mZPx.mjs → square-Sw6O7lEO.mjs} +1 -1
- package/dist/{trash-2-BX4TiX8o.mjs → trash-2-Bess9rqf.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-r8bN15Ml.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BTcms_55.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CL_c14D8.mjs +0 -26
|
@@ -367,7 +367,7 @@ function buildScryptedRegistryDescriptor(entry) {
|
|
|
367
367
|
};
|
|
368
368
|
}
|
|
369
369
|
//#endregion
|
|
370
|
-
//#region ../types/dist/event-category-
|
|
370
|
+
//#region ../types/dist/event-category-B_0XEcLF.mjs
|
|
371
371
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
372
372
|
EventCategory["SystemBoot"] = "system.boot";
|
|
373
373
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -868,15 +868,6 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
868
868
|
EventCategory["AgentWsDisconnected"] = "agent.ws.disconnected";
|
|
869
869
|
EventCategory["AgentBackupActivated"] = "agent.backup.activated";
|
|
870
870
|
EventCategory["OrchestrationSettingsUpdated"] = "orchestration.settings-updated";
|
|
871
|
-
/**
|
|
872
|
-
* Per-agent hwaccel preference changed (user override set, cleared, or
|
|
873
|
-
* re-probed). Observability event — decoders pull the current pref at
|
|
874
|
-
* `createSession`, so running sessions keep their current backend until
|
|
875
|
-
* they rotate naturally (camera add/remove, stream restart). Future
|
|
876
|
-
* work can wire a listener in stream-broker that force-rotates live
|
|
877
|
-
* sessions; for now this event powers logs + admin-UI toast feedback.
|
|
878
|
-
*/
|
|
879
|
-
EventCategory["PipelineAgentHwaccelChanged"] = "pipeline.agent-hwaccel-changed";
|
|
880
871
|
EventCategory["MotionAnalysis"] = "detection.motion-analysis";
|
|
881
872
|
/** All raw motion zones from CCL before minArea filter — for UI debug overlay. */
|
|
882
873
|
EventCategory["MotionZonesRaw"] = "detection.motion-zones-raw";
|
|
@@ -5747,7 +5738,7 @@ var ZodIssueCode = {
|
|
|
5747
5738
|
var ZodFirstPartyTypeKind;
|
|
5748
5739
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5749
5740
|
//#endregion
|
|
5750
|
-
//#region ../types/dist/sleep-
|
|
5741
|
+
//#region ../types/dist/sleep-BNeXenvr.mjs
|
|
5751
5742
|
/**
|
|
5752
5743
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5753
5744
|
* window to float samples (D455).
|
|
@@ -7113,32 +7104,12 @@ object({
|
|
|
7113
7104
|
audioCodec: string().optional(),
|
|
7114
7105
|
metadata: record(string(), unknown()).readonly().optional()
|
|
7115
7106
|
});
|
|
7116
|
-
var EncodedPacketSchema = object({
|
|
7117
|
-
type: _enum(["video", "audio"]),
|
|
7118
|
-
data: _instanceof(Uint8Array),
|
|
7119
|
-
pts: number(),
|
|
7120
|
-
dts: number(),
|
|
7121
|
-
keyframe: boolean(),
|
|
7122
|
-
codec: string()
|
|
7123
|
-
});
|
|
7124
|
-
var DecodedFrameSchema = object({
|
|
7125
|
-
data: _instanceof(Uint8Array),
|
|
7126
|
-
width: number(),
|
|
7127
|
-
height: number(),
|
|
7128
|
-
format: _enum([
|
|
7129
|
-
"jpeg",
|
|
7130
|
-
"rgb",
|
|
7131
|
-
"bgr",
|
|
7132
|
-
"yuv420",
|
|
7133
|
-
"gray"
|
|
7134
|
-
]),
|
|
7135
|
-
timestamp: number()
|
|
7136
|
-
});
|
|
7137
7107
|
/**
|
|
7138
7108
|
* Wire schema for `FrameHandle` — a zero-pixel, serialisable reference to a
|
|
7139
7109
|
* frame in a shared-memory ring (Phase 5 / D9). Mirrors the `FrameHandle` TS
|
|
7140
|
-
* interface in `interfaces/frame-handle.ts` field-for-field so a
|
|
7141
|
-
*
|
|
7110
|
+
* interface in `interfaces/frame-handle.ts` field-for-field so a cap method
|
|
7111
|
+
* (the runner's native-crop and pipeline-executor inputs) can carry handles
|
|
7112
|
+
* over tRPC / Moleculer.
|
|
7142
7113
|
*
|
|
7143
7114
|
* The `satisfies` assertion below pins this schema to the interface: if a
|
|
7144
7115
|
* field is added to / removed from `FrameHandle` without a matching schema
|
|
@@ -7164,50 +7135,6 @@ var FrameHandleSchema = object({
|
|
|
7164
7135
|
slotCount: number().int().positive()
|
|
7165
7136
|
});
|
|
7166
7137
|
/**
|
|
7167
|
-
* Pixel format a frame-handle subscriber can request from the broker
|
|
7168
|
-
* (Phase 5 / D9). The packed, raster subset of `FrameFormat` — the formats a
|
|
7169
|
-
* `frameSink: 'shm'` decoder session can write into a `FrameRing` slot.
|
|
7170
|
-
* `jpeg` is excluded: a variable-length stream is not a fixed-stride ring
|
|
7171
|
-
* payload, and no decoded-frame consumer requests it over the shm plane.
|
|
7172
|
-
*/
|
|
7173
|
-
var FrameHandleFormatSchema = _enum([
|
|
7174
|
-
"rgb",
|
|
7175
|
-
"bgr",
|
|
7176
|
-
"yuv420",
|
|
7177
|
-
"gray"
|
|
7178
|
-
]);
|
|
7179
|
-
/**
|
|
7180
|
-
* Input for `stream-broker.subscribeFrames` (Phase 5 / D9). A consumer asks the
|
|
7181
|
-
* broker for a `FrameHandle` stream of one `format`; the broker maintains one
|
|
7182
|
-
* shared-memory ring per `(brokerId, format)` actually requested, so a `gray`
|
|
7183
|
-
* subscriber (motion) and an `rgb` subscriber (detection) each read the format
|
|
7184
|
-
* they asked for with no broker-side conversion.
|
|
7185
|
-
*/
|
|
7186
|
-
var SubscribeFramesInputSchema = object({
|
|
7187
|
-
brokerId: string(),
|
|
7188
|
-
format: FrameHandleFormatSchema,
|
|
7189
|
-
/**
|
|
7190
|
-
* Optional reader-side cadence hint in frames per second. The broker does
|
|
7191
|
-
* NOT throttle — latest-wins ring reads drop frames implicitly for a slow
|
|
7192
|
-
* consumer. The value is echoed back in `SubscribeFramesResult.maxFps` so
|
|
7193
|
-
* the consumer can pace its own `pullFrameHandles` polling.
|
|
7194
|
-
*/
|
|
7195
|
-
maxFps: number().positive().optional(),
|
|
7196
|
-
/** Short caller-identity tag (`motion`, `detection`, …) for diagnostics. */
|
|
7197
|
-
tag: string().optional()
|
|
7198
|
-
});
|
|
7199
|
-
/**
|
|
7200
|
-
* Result of `stream-broker.subscribeFrames`. The consumer then polls
|
|
7201
|
-
* `pullFrameHandles({ subscriptionId, maxCount })` and feeds each returned
|
|
7202
|
-
* `FrameHandle` to a `FrameRingReader`.
|
|
7203
|
-
*/
|
|
7204
|
-
var SubscribeFramesResultSchema = object({
|
|
7205
|
-
/** Opaque id the consumer passes to `pullFrameHandles` / `unsubscribeFrames`. */
|
|
7206
|
-
subscriptionId: string(),
|
|
7207
|
-
/** Reader-side cadence hint (frames/s) — echoes `SubscribeFramesInput.maxFps`. */
|
|
7208
|
-
maxFps: number().nonnegative()
|
|
7209
|
-
});
|
|
7210
|
-
/**
|
|
7211
7138
|
* Wire schema for a decoded audio chunk (Phase 5 / D9). Mirrors the
|
|
7212
7139
|
* `DecodedAudioChunk` TS interface in `interfaces/stream-broker.ts`: PCM
|
|
7213
7140
|
* sample bytes plus the track parameters a consumer needs to interpret them.
|
|
@@ -7215,8 +7142,8 @@ var SubscribeFramesResultSchema = object({
|
|
|
7215
7142
|
* Audio chunks are tiny (a ~500ms AudioCodecSession window is a few KB of
|
|
7216
7143
|
* Float32 PCM), so unlike video frames they ship their bytes INLINE over
|
|
7217
7144
|
* tRPC / Moleculer — no shared-memory plane. `data` is typed `Uint8Array`
|
|
7218
|
-
* (the wire-serialisable supertype of `Buffer`)
|
|
7219
|
-
*
|
|
7145
|
+
* (the wire-serialisable supertype of `Buffer`); a `Buffer` is assignable to
|
|
7146
|
+
* it.
|
|
7220
7147
|
*/
|
|
7221
7148
|
var AudioChunkFormatSchema = _enum(AUDIO_CHUNK_FORMATS);
|
|
7222
7149
|
var DecodedAudioChunkSchema = object({
|
|
@@ -7234,11 +7161,10 @@ var DecodedAudioChunkSchema = object({
|
|
|
7234
7161
|
format: AudioChunkFormatSchema.optional()
|
|
7235
7162
|
});
|
|
7236
7163
|
/**
|
|
7237
|
-
* Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9).
|
|
7238
|
-
*
|
|
7239
|
-
*
|
|
7240
|
-
*
|
|
7241
|
-
* `pullAudioChunks`.
|
|
7164
|
+
* Input for `stream-broker.subscribeAudioChunks` (Phase 5 / D9). Audio ships
|
|
7165
|
+
* its bytes inline: a consumer asks the broker for the decoded audio-chunk
|
|
7166
|
+
* stream of one broker; the broker keeps a per-subscription bounded FIFO queue
|
|
7167
|
+
* the consumer drains via `pullAudioChunks`.
|
|
7242
7168
|
*/
|
|
7243
7169
|
var SubscribeAudioChunksInputSchema = object({
|
|
7244
7170
|
brokerId: string(),
|
|
@@ -7269,9 +7195,7 @@ var BrokerStatsSchema = object({
|
|
|
7269
7195
|
"stopped"
|
|
7270
7196
|
]),
|
|
7271
7197
|
inputFps: number(),
|
|
7272
|
-
decodeFps: number(),
|
|
7273
7198
|
encodedSubscribers: number(),
|
|
7274
|
-
decodedSubscribers: number(),
|
|
7275
7199
|
uptimeMs: number(),
|
|
7276
7200
|
bitrateKbps: number(),
|
|
7277
7201
|
idrIntervalMs: number(),
|
|
@@ -7284,14 +7208,6 @@ var BrokerStatsSchema = object({
|
|
|
7284
7208
|
preBufferMs: number(),
|
|
7285
7209
|
preBufferPackets: number(),
|
|
7286
7210
|
/**
|
|
7287
|
-
* Moleculer node id of the decoder provider currently servicing this
|
|
7288
|
-
* stream's decoded subscribers. `null` until the deferred decoder is
|
|
7289
|
-
* created (no decoded clients yet, or codec not detected). Surfaces the
|
|
7290
|
-
* runtime decoder placement so the UI can show "Decoder: <agent>" without
|
|
7291
|
-
* a separate cap call per broker.
|
|
7292
|
-
*/
|
|
7293
|
-
decoderNodeId: string().nullable(),
|
|
7294
|
-
/**
|
|
7295
7211
|
* Detected audio track parameters from the RTSP DESCRIBE / SDP. `null`
|
|
7296
7212
|
* when the stream has no audio track or the broker is in cold start.
|
|
7297
7213
|
* `supported = false` means the codec was detected but the local
|
|
@@ -10694,70 +10610,6 @@ var StorageLocationDeclarationSchema = object({
|
|
|
10694
10610
|
"backup"
|
|
10695
10611
|
]).optional()
|
|
10696
10612
|
});
|
|
10697
|
-
var DecoderStatsSchema = object({
|
|
10698
|
-
inputFps: number(),
|
|
10699
|
-
outputFps: number(),
|
|
10700
|
-
avgDecodeTimeMs: number(),
|
|
10701
|
-
droppedFrames: number(),
|
|
10702
|
-
/**
|
|
10703
|
-
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
10704
|
-
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
10705
|
-
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
10706
|
-
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
10707
|
-
*/
|
|
10708
|
-
lagMs: number().optional(),
|
|
10709
|
-
effectiveFps: number().optional(),
|
|
10710
|
-
adaptiveFps: number().optional()
|
|
10711
|
-
});
|
|
10712
|
-
var DecoderSessionConfigSchema = object({
|
|
10713
|
-
codec: string(),
|
|
10714
|
-
maxFps: number().default(0),
|
|
10715
|
-
outputFormat: _enum([
|
|
10716
|
-
"jpeg",
|
|
10717
|
-
"rgb",
|
|
10718
|
-
"bgr",
|
|
10719
|
-
"yuv420",
|
|
10720
|
-
"gray"
|
|
10721
|
-
]).default("jpeg"),
|
|
10722
|
-
scale: number().default(1),
|
|
10723
|
-
width: number().optional(),
|
|
10724
|
-
height: number().optional(),
|
|
10725
|
-
/**
|
|
10726
|
-
* Identifier of the camera this decoder session serves. Optional
|
|
10727
|
-
* because the cap is generic (any caller could request decode), but
|
|
10728
|
-
* stream-broker passes it so decoder logs include `deviceId` for
|
|
10729
|
-
* per-camera filtering when diagnosing failures (e.g. node-av
|
|
10730
|
-
* sendPacket errors on a single hung camera).
|
|
10731
|
-
*/
|
|
10732
|
-
deviceId: number().int().nonnegative().optional(),
|
|
10733
|
-
/**
|
|
10734
|
-
* Free-form tag for log scoping. Stream-broker uses
|
|
10735
|
-
* `broker:<deviceId>/<profile>`. Decoder session logger surfaces it
|
|
10736
|
-
* on every line so `grep tag=broker:5/high` filters one camera
|
|
10737
|
-
* profile cleanly.
|
|
10738
|
-
*/
|
|
10739
|
-
tag: string().optional(),
|
|
10740
|
-
/**
|
|
10741
|
-
* Where the session delivers decoded frames (Phase 5 / D9):
|
|
10742
|
-
*
|
|
10743
|
-
* - `'callback'` (default) — the legacy pixel path: decoded frames are
|
|
10744
|
-
* buffered as `DecodedFrame`s and drained via `pullFrames`.
|
|
10745
|
-
* - `'shm'` — the shared-memory frame plane: decoded frames are written
|
|
10746
|
-
* into an OS shared-memory ring and drained as zero-pixel
|
|
10747
|
-
* `FrameHandle`s via `pullHandles`. A session is one mode or the
|
|
10748
|
-
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
10749
|
-
* `pullHandles` returns nothing for a `'callback'` session.
|
|
10750
|
-
*/
|
|
10751
|
-
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
10752
|
-
/**
|
|
10753
|
-
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
10754
|
-
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
10755
|
-
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
10756
|
-
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
10757
|
-
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
10758
|
-
*/
|
|
10759
|
-
debug: boolean().optional()
|
|
10760
|
-
});
|
|
10761
10613
|
/**
|
|
10762
10614
|
* Per-component log CHANNELS — the gate a hot path consults, and the registry
|
|
10763
10615
|
* an addon declares its channels in.
|
|
@@ -13060,13 +12912,6 @@ var BrokerRtspClientSchema = object({
|
|
|
13060
12912
|
lastRtpAt: number(),
|
|
13061
12913
|
bytesSent: number()
|
|
13062
12914
|
});
|
|
13063
|
-
var BrokerDecodedClientSchema = object({
|
|
13064
|
-
tag: string(),
|
|
13065
|
-
subscribedAt: number(),
|
|
13066
|
-
maxFps: number(),
|
|
13067
|
-
framesDelivered: number(),
|
|
13068
|
-
framesDropped: number()
|
|
13069
|
-
});
|
|
13070
12915
|
var BrokerAudioClientSchema = object({
|
|
13071
12916
|
tag: string(),
|
|
13072
12917
|
subscribedAt: number(),
|
|
@@ -13158,7 +13003,6 @@ var BrokerEncodedClientSchema = object({
|
|
|
13158
13003
|
});
|
|
13159
13004
|
var BrokerClientsSchema = object({
|
|
13160
13005
|
rtsp: array(BrokerRtspClientSchema).readonly(),
|
|
13161
|
-
decoded: array(BrokerDecodedClientSchema).readonly(),
|
|
13162
13006
|
audio: array(BrokerAudioClientSchema).readonly(),
|
|
13163
13007
|
encoded: array(BrokerEncodedClientSchema).readonly(),
|
|
13164
13008
|
pipeClients: number(),
|
|
@@ -13527,11 +13371,7 @@ method(object({
|
|
|
13527
13371
|
auth: "admin"
|
|
13528
13372
|
}), method(object({ brokerId: string() }), BrokerClientsSchema), method(object({
|
|
13529
13373
|
brokerId: string(),
|
|
13530
|
-
channel: _enum([
|
|
13531
|
-
"rtsp",
|
|
13532
|
-
"decoded",
|
|
13533
|
-
"audio"
|
|
13534
|
-
]),
|
|
13374
|
+
channel: _enum(["rtsp", "audio"]),
|
|
13535
13375
|
handle: string()
|
|
13536
13376
|
}), object({ killed: boolean() }), {
|
|
13537
13377
|
kind: "mutation",
|
|
@@ -13566,10 +13406,7 @@ method(object({
|
|
|
13566
13406
|
}), method(SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, { kind: "mutation" }), method(object({
|
|
13567
13407
|
subscriptionId: string(),
|
|
13568
13408
|
maxCount: number().int().positive().default(8)
|
|
13569
|
-
}), array(DecodedAudioChunkSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(
|
|
13570
|
-
subscriptionId: string(),
|
|
13571
|
-
maxCount: number().int().positive().default(4)
|
|
13572
|
-
}), array(FrameHandleSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(object({
|
|
13409
|
+
}), array(DecodedAudioChunkSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(object({
|
|
13573
13410
|
brokerId: string(),
|
|
13574
13411
|
seconds: number().min(0).max(30)
|
|
13575
13412
|
}), _void(), {
|
|
@@ -14742,54 +14579,12 @@ id: union([string(), number()]) }), {
|
|
|
14742
14579
|
kind: "mutation",
|
|
14743
14580
|
auth: "admin"
|
|
14744
14581
|
});
|
|
14745
|
-
|
|
14746
|
-
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
14747
|
-
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
14748
|
-
* observe ring pressure (slot count, byte budget, hit/miss ratio).
|
|
14749
|
-
*/
|
|
14750
|
-
var ShmRingStatsSchema = object({
|
|
14751
|
-
sessionId: string(),
|
|
14752
|
-
slotCount: number().int(),
|
|
14753
|
-
slotByteLength: number().int(),
|
|
14754
|
-
segmentBytes: number().int(),
|
|
14755
|
-
budgetMb: number().int(),
|
|
14756
|
-
framesWritten: number().int(),
|
|
14757
|
-
getFrameHits: number().int(),
|
|
14758
|
-
getFrameMisses: number().int()
|
|
14759
|
-
});
|
|
14760
|
-
method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
14582
|
+
method(_void(), object({
|
|
14761
14583
|
id: string(),
|
|
14762
14584
|
name: string(),
|
|
14763
|
-
isPullMode: boolean().optional(),
|
|
14764
|
-
priority: number().optional(),
|
|
14765
14585
|
hwaccel: string().optional(),
|
|
14766
14586
|
probedBestHwaccel: string().optional()
|
|
14767
|
-
})), method(
|
|
14768
|
-
sessionId: string(),
|
|
14769
|
-
nodeId: string()
|
|
14770
|
-
})), method(object({ sessionId: string() }), _void()), method(object({
|
|
14771
|
-
sessionId: string(),
|
|
14772
|
-
packet: EncodedPacketSchema
|
|
14773
|
-
}), _void()), method(object({
|
|
14774
|
-
sessionId: string(),
|
|
14775
|
-
url: string()
|
|
14776
|
-
}), _void()), method(object({
|
|
14777
|
-
sessionId: string(),
|
|
14778
|
-
maxCount: number().default(1),
|
|
14779
|
-
waitMs: number().optional()
|
|
14780
|
-
}), array(DecodedFrameSchema)), method(object({
|
|
14781
|
-
sessionId: string(),
|
|
14782
|
-
maxCount: number().default(1),
|
|
14783
|
-
waitMs: number().optional()
|
|
14784
|
-
}), array(FrameHandleSchema)), method(object({ handle: FrameHandleSchema }), DecodedFrameSchema.nullable()), method(object({ sessionId: string() }), ShmRingStatsSchema.nullable()), method(object({
|
|
14785
|
-
sessionId: string(),
|
|
14786
|
-
config: DecoderSessionConfigSchema.partial()
|
|
14787
|
-
}), _void()), method(object({ sessionId: string() }), DecoderStatsSchema), method(_void(), array(object({
|
|
14788
|
-
sessionId: string(),
|
|
14789
|
-
codec: string(),
|
|
14790
|
-
outputFormat: string(),
|
|
14791
|
-
createdAtMs: number()
|
|
14792
|
-
})).readonly()), method(_void(), object({ backend: string() }), {
|
|
14587
|
+
})), method(_void(), object({ backend: string() }), {
|
|
14793
14588
|
kind: "mutation",
|
|
14794
14589
|
auth: "admin"
|
|
14795
14590
|
});
|
|
@@ -21815,8 +21610,8 @@ Object.freeze(Object.fromEntries([{
|
|
|
21815
21610
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
21816
21611
|
stepId: "face-embedding",
|
|
21817
21612
|
key: "minLandmarkFaceSize",
|
|
21818
|
-
label: "Min face size
|
|
21819
|
-
description: "
|
|
21613
|
+
label: "Min face size to embed (detection-frame px)",
|
|
21614
|
+
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.",
|
|
21820
21615
|
type: "slider",
|
|
21821
21616
|
min: 0,
|
|
21822
21617
|
max: 64,
|
|
@@ -23868,21 +23663,6 @@ var PipelineDefaultStepSchema = lazy(() => object({
|
|
|
23868
23663
|
group: string().optional(),
|
|
23869
23664
|
settings: record(string(), unknown()).optional()
|
|
23870
23665
|
}));
|
|
23871
|
-
var PipelineTemplateStepSchema = lazy(() => object({
|
|
23872
|
-
addonId: string(),
|
|
23873
|
-
enabled: boolean(),
|
|
23874
|
-
modelId: string(),
|
|
23875
|
-
children: array(PipelineTemplateStepSchema).readonly(),
|
|
23876
|
-
settings: record(string(), unknown()).optional()
|
|
23877
|
-
}));
|
|
23878
|
-
var PipelineTemplateSchema$1 = object({
|
|
23879
|
-
id: string(),
|
|
23880
|
-
name: string(),
|
|
23881
|
-
createdAt: string(),
|
|
23882
|
-
updatedAt: string(),
|
|
23883
|
-
engine: PipelineEngineChoiceSchema,
|
|
23884
|
-
steps: array(PipelineTemplateStepSchema).readonly()
|
|
23885
|
-
});
|
|
23886
23666
|
var PipelineModelOptionSchema = object({
|
|
23887
23667
|
id: string(),
|
|
23888
23668
|
name: string(),
|
|
@@ -24094,15 +23874,7 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
24094
23874
|
}), method(_void(), PipelineSchemaSchema), method(_void(), array(PipelineDefaultStepSchema).readonly().nullable()), method(_void(), PipelineConfigBridge), method(_void(), ConfigUISchemaBridge), method(object({
|
|
24095
23875
|
steps: array(PipelineStepInputSchema),
|
|
24096
23876
|
deviceKey: string().optional()
|
|
24097
|
-
}), PipelineValidationResultSchema), method(_void(),
|
|
24098
|
-
name: string(),
|
|
24099
|
-
steps: array(PipelineTemplateStepSchema).readonly(),
|
|
24100
|
-
engine: PipelineEngineChoiceSchema
|
|
24101
|
-
}), PipelineTemplateSchema$1, { kind: "mutation" }), method(object({
|
|
24102
|
-
id: string(),
|
|
24103
|
-
name: string().optional(),
|
|
24104
|
-
steps: array(PipelineTemplateStepSchema).readonly().optional()
|
|
24105
|
-
}), PipelineTemplateSchema$1, { kind: "mutation" }), method(object({ id: string() }), _void(), { kind: "mutation" }), method(_void(), InferenceCapabilitiesBridge), method(object({ addonId: string() }), ModelAvailabilityListBridge), method(object({
|
|
23877
|
+
}), PipelineValidationResultSchema), method(_void(), InferenceCapabilitiesBridge), method(object({ addonId: string() }), ModelAvailabilityListBridge), method(object({
|
|
24106
23878
|
addonId: string(),
|
|
24107
23879
|
modelId: string(),
|
|
24108
23880
|
format: ModelFormatSchema$2
|
|
@@ -25512,14 +25284,15 @@ var RunnerLocalLoadSchema = object({
|
|
|
25512
25284
|
* Per-inference-device live load (multi-device C4). One entry per deviceKey
|
|
25513
25285
|
* this runner currently has attached cameras on, so the orchestrator's second
|
|
25514
25286
|
* `balance()` pass (over a node's devices) weights on real per-pool session
|
|
25515
|
-
* counts. Empty on single-device / pre-multi-device runners.
|
|
25516
|
-
* per
|
|
25287
|
+
* counts. Empty on single-device / pre-multi-device runners. There is no
|
|
25288
|
+
* per-device queue depth: the inference pool's backlog has no accessor, and
|
|
25289
|
+
* a field that always read 0 was removed rather than shown as a measurement
|
|
25290
|
+
* (D762).
|
|
25517
25291
|
*/
|
|
25518
25292
|
devices: array(object({
|
|
25519
25293
|
deviceKey: string(),
|
|
25520
25294
|
backend: string(),
|
|
25521
|
-
attachedCameras: number()
|
|
25522
|
-
queueDepthTotal: number()
|
|
25295
|
+
attachedCameras: number()
|
|
25523
25296
|
})).default([]),
|
|
25524
25297
|
/** Hardware capability flags reported by this node. */
|
|
25525
25298
|
hardware: object({
|
|
@@ -25733,14 +25506,6 @@ var CameraPipelineConfigSchema = object({
|
|
|
25733
25506
|
settings: record(string(), unknown()).readonly().optional()
|
|
25734
25507
|
}).nullable().optional()
|
|
25735
25508
|
});
|
|
25736
|
-
var PipelineTemplateSchema = object({
|
|
25737
|
-
id: string(),
|
|
25738
|
-
name: string(),
|
|
25739
|
-
description: string().optional(),
|
|
25740
|
-
config: CameraPipelineConfigSchema,
|
|
25741
|
-
createdAt: string(),
|
|
25742
|
-
updatedAt: string()
|
|
25743
|
-
});
|
|
25744
25509
|
var DeviceStepConfigSchema = object({
|
|
25745
25510
|
modelId: string().optional(),
|
|
25746
25511
|
settings: record(string(), unknown()).optional(),
|
|
@@ -25850,7 +25615,10 @@ var PipelineAssignmentSchema = object({
|
|
|
25850
25615
|
});
|
|
25851
25616
|
/**
|
|
25852
25617
|
* Per-agent load summary surfaced to the load balancer + dashboards.
|
|
25853
|
-
* Aggregated from each runner's `getLocalLoad` cap call.
|
|
25618
|
+
* Aggregated from each runner's `getLocalLoad` cap call. In the
|
|
25619
|
+
* `getAgentLoad` report, a single-device node's default-pool sessions (no
|
|
25620
|
+
* `deviceKey`) are credited to its one eligible device in `load.devices` —
|
|
25621
|
+
* the default pool IS that device (D745); the balancer's census stays raw.
|
|
25854
25622
|
*/
|
|
25855
25623
|
var AgentLoadSummarySchema = object({
|
|
25856
25624
|
nodeId: string(),
|
|
@@ -25939,26 +25707,27 @@ var CameraBrokerStatusSchema = object({
|
|
|
25939
25707
|
width: number(),
|
|
25940
25708
|
height: number(),
|
|
25941
25709
|
subscribers: number(),
|
|
25942
|
-
|
|
25943
|
-
|
|
25710
|
+
/**
|
|
25711
|
+
* Encoded packets/s the broker receives from the camera. null when the
|
|
25712
|
+
* broker's stats read failed — unknown, never 0 (a 0 here reads as a stall).
|
|
25713
|
+
* There is no output rate: decoding runs in the session decode workers, not
|
|
25714
|
+
* in the broker, so the broker's own decoded-frame rate is 0 on every live
|
|
25715
|
+
* camera and is not served (D758).
|
|
25716
|
+
*/
|
|
25717
|
+
inFps: number().nullable()
|
|
25944
25718
|
})).readonly(),
|
|
25945
25719
|
webrtcSessions: number(),
|
|
25946
25720
|
rtspRestream: boolean()
|
|
25947
25721
|
});
|
|
25948
|
-
/**
|
|
25949
|
-
|
|
25950
|
-
|
|
25951
|
-
|
|
25952
|
-
|
|
25953
|
-
|
|
25954
|
-
|
|
25955
|
-
|
|
25956
|
-
var CameraDecoderStatusSchema = object({
|
|
25957
|
-
nodeId: string(),
|
|
25958
|
-
formats: array(string()).readonly(),
|
|
25959
|
-
sessionCount: number(),
|
|
25960
|
-
shm: CameraDecoderShmSchema
|
|
25961
|
-
});
|
|
25722
|
+
/**
|
|
25723
|
+
* Decoder block — WHERE decode runs (co-located with the detection node by
|
|
25724
|
+
* construction); null when the camera has no detection node. It carries no
|
|
25725
|
+
* frame counter: the shared-memory plane whose counters it used to serve is
|
|
25726
|
+
* gone, and those fields read 0 forever. Whether frames actually flow is read
|
|
25727
|
+
* from `detection.actualFps` (frames delivered to and processed by the
|
|
25728
|
+
* detector), never from a counter nothing feeds.
|
|
25729
|
+
*/
|
|
25730
|
+
var CameraDecoderStatusSchema = object({ nodeId: string() });
|
|
25962
25731
|
/** Motion block — null when motion detection is not active for this device. */
|
|
25963
25732
|
var CameraMotionStatusSchema = object({
|
|
25964
25733
|
enabled: boolean(),
|
|
@@ -26411,25 +26180,7 @@ method(object({
|
|
|
26411
26180
|
}), method(_void(), DiskReconcileJobSchema, {
|
|
26412
26181
|
kind: "mutation",
|
|
26413
26182
|
auth: "admin"
|
|
26414
|
-
}), method(_void(), DiskReconcileJobSchema, { auth: "admin" })
|
|
26415
|
-
name: string(),
|
|
26416
|
-
description: string().optional(),
|
|
26417
|
-
config: CameraPipelineConfigSchema
|
|
26418
|
-
}), PipelineTemplateSchema, {
|
|
26419
|
-
kind: "mutation",
|
|
26420
|
-
auth: "admin"
|
|
26421
|
-
}), method(object({
|
|
26422
|
-
id: string(),
|
|
26423
|
-
name: string().optional(),
|
|
26424
|
-
description: string().optional(),
|
|
26425
|
-
config: CameraPipelineConfigSchema.optional()
|
|
26426
|
-
}), PipelineTemplateSchema, {
|
|
26427
|
-
kind: "mutation",
|
|
26428
|
-
auth: "admin"
|
|
26429
|
-
}), method(object({ id: string() }), object({ success: literal(true) }), {
|
|
26430
|
-
kind: "mutation",
|
|
26431
|
-
auth: "admin"
|
|
26432
|
-
});
|
|
26183
|
+
}), method(_void(), DiskReconcileJobSchema, { auth: "admin" });
|
|
26433
26184
|
/**
|
|
26434
26185
|
* Cap → event-kind mapping for the SENSOR / CONTROL cap families — the table
|
|
26435
26186
|
* `pipeline-analytics.listEventKinds` uses to turn a linked device's bound
|
|
@@ -28649,8 +28400,6 @@ var WebrtcStreamChoiceSchema = object({
|
|
|
28649
28400
|
]).nullable(),
|
|
28650
28401
|
/** Input FPS from the camera (null for adaptive). */
|
|
28651
28402
|
inputFps: number().nullable(),
|
|
28652
|
-
/** Decoded FPS (null for adaptive). */
|
|
28653
|
-
decodeFps: number().nullable(),
|
|
28654
28403
|
/** Bitrate in kbps (null for adaptive). */
|
|
28655
28404
|
bitrateKbps: number().nullable()
|
|
28656
28405
|
});
|
|
@@ -38883,90 +38632,18 @@ Object.freeze({
|
|
|
38883
38632
|
addonId: null,
|
|
38884
38633
|
access: "create"
|
|
38885
38634
|
},
|
|
38886
|
-
"decoder.createSession": {
|
|
38887
|
-
capName: "decoder",
|
|
38888
|
-
capScope: "system",
|
|
38889
|
-
addonId: null,
|
|
38890
|
-
access: "view"
|
|
38891
|
-
},
|
|
38892
|
-
"decoder.destroySession": {
|
|
38893
|
-
capName: "decoder",
|
|
38894
|
-
capScope: "system",
|
|
38895
|
-
addonId: null,
|
|
38896
|
-
access: "delete"
|
|
38897
|
-
},
|
|
38898
|
-
"decoder.getFrame": {
|
|
38899
|
-
capName: "decoder",
|
|
38900
|
-
capScope: "system",
|
|
38901
|
-
addonId: null,
|
|
38902
|
-
access: "view"
|
|
38903
|
-
},
|
|
38904
38635
|
"decoder.getInfo": {
|
|
38905
38636
|
capName: "decoder",
|
|
38906
38637
|
capScope: "system",
|
|
38907
38638
|
addonId: null,
|
|
38908
38639
|
access: "view"
|
|
38909
38640
|
},
|
|
38910
|
-
"decoder.getShmStats": {
|
|
38911
|
-
capName: "decoder",
|
|
38912
|
-
capScope: "system",
|
|
38913
|
-
addonId: null,
|
|
38914
|
-
access: "view"
|
|
38915
|
-
},
|
|
38916
|
-
"decoder.getStats": {
|
|
38917
|
-
capName: "decoder",
|
|
38918
|
-
capScope: "system",
|
|
38919
|
-
addonId: null,
|
|
38920
|
-
access: "view"
|
|
38921
|
-
},
|
|
38922
|
-
"decoder.listActiveSessions": {
|
|
38923
|
-
capName: "decoder",
|
|
38924
|
-
capScope: "system",
|
|
38925
|
-
addonId: null,
|
|
38926
|
-
access: "view"
|
|
38927
|
-
},
|
|
38928
|
-
"decoder.openStream": {
|
|
38929
|
-
capName: "decoder",
|
|
38930
|
-
capScope: "system",
|
|
38931
|
-
addonId: null,
|
|
38932
|
-
access: "view"
|
|
38933
|
-
},
|
|
38934
|
-
"decoder.pullFrames": {
|
|
38935
|
-
capName: "decoder",
|
|
38936
|
-
capScope: "system",
|
|
38937
|
-
addonId: null,
|
|
38938
|
-
access: "view"
|
|
38939
|
-
},
|
|
38940
|
-
"decoder.pullHandles": {
|
|
38941
|
-
capName: "decoder",
|
|
38942
|
-
capScope: "system",
|
|
38943
|
-
addonId: null,
|
|
38944
|
-
access: "view"
|
|
38945
|
-
},
|
|
38946
|
-
"decoder.pushPacket": {
|
|
38947
|
-
capName: "decoder",
|
|
38948
|
-
capScope: "system",
|
|
38949
|
-
addonId: null,
|
|
38950
|
-
access: "view"
|
|
38951
|
-
},
|
|
38952
38641
|
"decoder.reprobeHwaccel": {
|
|
38953
38642
|
capName: "decoder",
|
|
38954
38643
|
capScope: "system",
|
|
38955
38644
|
addonId: null,
|
|
38956
38645
|
access: "create"
|
|
38957
38646
|
},
|
|
38958
|
-
"decoder.supportsCodec": {
|
|
38959
|
-
capName: "decoder",
|
|
38960
|
-
capScope: "system",
|
|
38961
|
-
addonId: null,
|
|
38962
|
-
access: "view"
|
|
38963
|
-
},
|
|
38964
|
-
"decoder.updateConfig": {
|
|
38965
|
-
capName: "decoder",
|
|
38966
|
-
capScope: "system",
|
|
38967
|
-
addonId: null,
|
|
38968
|
-
access: "view"
|
|
38969
|
-
},
|
|
38970
38647
|
"detectionPipeline.applyDeviceSettingsPatch": {
|
|
38971
38648
|
capName: "detection-pipeline",
|
|
38972
38649
|
capScope: "device",
|
|
@@ -42057,12 +41734,6 @@ Object.freeze({
|
|
|
42057
41734
|
addonId: null,
|
|
42058
41735
|
access: "delete"
|
|
42059
41736
|
},
|
|
42060
|
-
"pipelineExecutor.deleteTemplate": {
|
|
42061
|
-
capName: "pipeline-executor",
|
|
42062
|
-
capScope: "system",
|
|
42063
|
-
addonId: null,
|
|
42064
|
-
access: "delete"
|
|
42065
|
-
},
|
|
42066
41737
|
"pipelineExecutor.downloadModel": {
|
|
42067
41738
|
capName: "pipeline-executor",
|
|
42068
41739
|
capScope: "system",
|
|
@@ -42201,12 +41872,6 @@ Object.freeze({
|
|
|
42201
41872
|
addonId: null,
|
|
42202
41873
|
access: "view"
|
|
42203
41874
|
},
|
|
42204
|
-
"pipelineExecutor.listTemplates": {
|
|
42205
|
-
capName: "pipeline-executor",
|
|
42206
|
-
capScope: "system",
|
|
42207
|
-
addonId: null,
|
|
42208
|
-
access: "view"
|
|
42209
|
-
},
|
|
42210
41875
|
"pipelineExecutor.rearmInferenceDevice": {
|
|
42211
41876
|
capName: "pipeline-executor",
|
|
42212
41877
|
capScope: "system",
|
|
@@ -42231,12 +41896,6 @@ Object.freeze({
|
|
|
42231
41896
|
addonId: null,
|
|
42232
41897
|
access: "create"
|
|
42233
41898
|
},
|
|
42234
|
-
"pipelineExecutor.saveTemplate": {
|
|
42235
|
-
capName: "pipeline-executor",
|
|
42236
|
-
capScope: "system",
|
|
42237
|
-
addonId: null,
|
|
42238
|
-
access: "create"
|
|
42239
|
-
},
|
|
42240
41899
|
"pipelineExecutor.setVideoPipelineSteps": {
|
|
42241
41900
|
capName: "pipeline-executor",
|
|
42242
41901
|
capScope: "system",
|
|
@@ -42255,12 +41914,6 @@ Object.freeze({
|
|
|
42255
41914
|
addonId: null,
|
|
42256
41915
|
access: "create"
|
|
42257
41916
|
},
|
|
42258
|
-
"pipelineExecutor.updateTemplate": {
|
|
42259
|
-
capName: "pipeline-executor",
|
|
42260
|
-
capScope: "system",
|
|
42261
|
-
addonId: null,
|
|
42262
|
-
access: "create"
|
|
42263
|
-
},
|
|
42264
41917
|
"pipelineExecutor.validatePipeline": {
|
|
42265
41918
|
capName: "pipeline-executor",
|
|
42266
41919
|
capScope: "system",
|
|
@@ -42291,12 +41944,6 @@ Object.freeze({
|
|
|
42291
41944
|
addonId: null,
|
|
42292
41945
|
access: "create"
|
|
42293
41946
|
},
|
|
42294
|
-
"pipelineOrchestrator.deleteTemplate": {
|
|
42295
|
-
capName: "pipeline-orchestrator",
|
|
42296
|
-
capScope: "system",
|
|
42297
|
-
addonId: null,
|
|
42298
|
-
access: "delete"
|
|
42299
|
-
},
|
|
42300
41947
|
"pipelineOrchestrator.getAgentLoad": {
|
|
42301
41948
|
capName: "pipeline-orchestrator",
|
|
42302
41949
|
capScope: "system",
|
|
@@ -42447,12 +42094,6 @@ Object.freeze({
|
|
|
42447
42094
|
addonId: null,
|
|
42448
42095
|
access: "view"
|
|
42449
42096
|
},
|
|
42450
|
-
"pipelineOrchestrator.listTemplates": {
|
|
42451
|
-
capName: "pipeline-orchestrator",
|
|
42452
|
-
capScope: "system",
|
|
42453
|
-
addonId: null,
|
|
42454
|
-
access: "view"
|
|
42455
|
-
},
|
|
42456
42097
|
"pipelineOrchestrator.pauseForStorageMigration": {
|
|
42457
42098
|
capName: "pipeline-orchestrator",
|
|
42458
42099
|
capScope: "system",
|
|
@@ -42507,12 +42148,6 @@ Object.freeze({
|
|
|
42507
42148
|
addonId: null,
|
|
42508
42149
|
access: "create"
|
|
42509
42150
|
},
|
|
42510
|
-
"pipelineOrchestrator.saveTemplate": {
|
|
42511
|
-
capName: "pipeline-orchestrator",
|
|
42512
|
-
capScope: "system",
|
|
42513
|
-
addonId: null,
|
|
42514
|
-
access: "create"
|
|
42515
|
-
},
|
|
42516
42151
|
"pipelineOrchestrator.setAgentCapabilities": {
|
|
42517
42152
|
capName: "pipeline-orchestrator",
|
|
42518
42153
|
capScope: "system",
|
|
@@ -42621,12 +42256,6 @@ Object.freeze({
|
|
|
42621
42256
|
addonId: null,
|
|
42622
42257
|
access: "create"
|
|
42623
42258
|
},
|
|
42624
|
-
"pipelineOrchestrator.updateTemplate": {
|
|
42625
|
-
capName: "pipeline-orchestrator",
|
|
42626
|
-
capScope: "system",
|
|
42627
|
-
addonId: null,
|
|
42628
|
-
access: "create"
|
|
42629
|
-
},
|
|
42630
42259
|
"pipelineRunner.attachCamera": {
|
|
42631
42260
|
capName: "pipeline-runner",
|
|
42632
42261
|
capScope: "system",
|
|
@@ -44061,12 +43690,6 @@ Object.freeze({
|
|
|
44061
43690
|
addonId: null,
|
|
44062
43691
|
access: "view"
|
|
44063
43692
|
},
|
|
44064
|
-
"streamBroker.pullFrameHandles": {
|
|
44065
|
-
capName: "stream-broker",
|
|
44066
|
-
capScope: "system",
|
|
44067
|
-
addonId: null,
|
|
44068
|
-
access: "view"
|
|
44069
|
-
},
|
|
44070
43693
|
"streamBroker.regenerateRtspToken": {
|
|
44071
43694
|
capName: "stream-broker",
|
|
44072
43695
|
capScope: "system",
|
|
@@ -44133,12 +43756,6 @@ Object.freeze({
|
|
|
44133
43756
|
addonId: null,
|
|
44134
43757
|
access: "create"
|
|
44135
43758
|
},
|
|
44136
|
-
"streamBroker.subscribeFrames": {
|
|
44137
|
-
capName: "stream-broker",
|
|
44138
|
-
capScope: "system",
|
|
44139
|
-
addonId: null,
|
|
44140
|
-
access: "create"
|
|
44141
|
-
},
|
|
44142
43759
|
"streamBroker.unassignProfile": {
|
|
44143
43760
|
capName: "stream-broker",
|
|
44144
43761
|
capScope: "system",
|
|
@@ -44151,12 +43768,6 @@ Object.freeze({
|
|
|
44151
43768
|
addonId: null,
|
|
44152
43769
|
access: "create"
|
|
44153
43770
|
},
|
|
44154
|
-
"streamBroker.unsubscribeFrames": {
|
|
44155
|
-
capName: "stream-broker",
|
|
44156
|
-
capScope: "system",
|
|
44157
|
-
addonId: null,
|
|
44158
|
-
access: "create"
|
|
44159
|
-
},
|
|
44160
43771
|
"streamCatalog.getCatalog": {
|
|
44161
43772
|
capName: "stream-catalog",
|
|
44162
43773
|
capScope: "device",
|
|
@@ -46670,11 +46281,6 @@ Object.freeze({
|
|
|
46670
46281
|
form: "single",
|
|
46671
46282
|
optional: false
|
|
46672
46283
|
}],
|
|
46673
|
-
"decoder.createSession": [{
|
|
46674
|
-
name: "deviceId",
|
|
46675
|
-
form: "single",
|
|
46676
|
-
optional: true
|
|
46677
|
-
}],
|
|
46678
46284
|
"detectionPipeline.applyDeviceSettingsPatch": [{
|
|
46679
46285
|
name: "deviceId",
|
|
46680
46286
|
form: "single",
|