@camstack/addon-provider-reolink 1.2.48 → 1.2.49
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 +248 -16
- package/dist/addon.mjs +248 -16
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -8234,6 +8234,15 @@ var LabelDefinitionSchema = object({
|
|
|
8234
8234
|
description: string().optional(),
|
|
8235
8235
|
icon: string().optional()
|
|
8236
8236
|
});
|
|
8237
|
+
var ClassMapDefinitionSchema = object({
|
|
8238
|
+
mapping: record(string(), _enum([
|
|
8239
|
+
"person",
|
|
8240
|
+
"vehicle",
|
|
8241
|
+
"animal",
|
|
8242
|
+
"package"
|
|
8243
|
+
])),
|
|
8244
|
+
preserveOriginal: boolean()
|
|
8245
|
+
});
|
|
8237
8246
|
var MODEL_FORMATS = [
|
|
8238
8247
|
"onnx",
|
|
8239
8248
|
"coreml",
|
|
@@ -8412,7 +8421,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8412
8421
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8413
8422
|
* is a presentation overlay resolved back to an `id`.
|
|
8414
8423
|
*/
|
|
8415
|
-
group: ModelVariantGroupSchema.optional()
|
|
8424
|
+
group: ModelVariantGroupSchema.optional(),
|
|
8425
|
+
/**
|
|
8426
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
8427
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8428
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8429
|
+
*/
|
|
8430
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8416
8431
|
});
|
|
8417
8432
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8418
8433
|
format: literal("openvino"),
|
|
@@ -8441,7 +8456,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8441
8456
|
"ocr",
|
|
8442
8457
|
"segmentation"
|
|
8443
8458
|
]),
|
|
8444
|
-
faceAlignment: boolean().optional()
|
|
8459
|
+
faceAlignment: boolean().optional(),
|
|
8460
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8445
8461
|
});
|
|
8446
8462
|
var ConvertResultSchema = object({
|
|
8447
8463
|
entry: ModelCatalogEntrySchema,
|
|
@@ -17746,6 +17762,33 @@ var NativeCropRefSchema = object({
|
|
|
17746
17762
|
h: number()
|
|
17747
17763
|
})
|
|
17748
17764
|
});
|
|
17765
|
+
object({
|
|
17766
|
+
crop: object({
|
|
17767
|
+
left: number(),
|
|
17768
|
+
top: number(),
|
|
17769
|
+
width: number().positive(),
|
|
17770
|
+
height: number().positive()
|
|
17771
|
+
}).optional(),
|
|
17772
|
+
content: object({
|
|
17773
|
+
width: number().int().positive(),
|
|
17774
|
+
height: number().int().positive()
|
|
17775
|
+
}),
|
|
17776
|
+
fit: _enum(["stretch", "contain"]),
|
|
17777
|
+
format: _enum([
|
|
17778
|
+
"rgb",
|
|
17779
|
+
"gray",
|
|
17780
|
+
"jpeg"
|
|
17781
|
+
])
|
|
17782
|
+
});
|
|
17783
|
+
var FrameRefSchema = object({
|
|
17784
|
+
registryId: string().min(1),
|
|
17785
|
+
id: string().min(1),
|
|
17786
|
+
width: number().int().positive(),
|
|
17787
|
+
height: number().int().positive(),
|
|
17788
|
+
format: _enum(["rgb", "gray"]),
|
|
17789
|
+
timestamp: number(),
|
|
17790
|
+
capturedAt: number().optional()
|
|
17791
|
+
});
|
|
17749
17792
|
var ModelFormatSchema$1 = _enum([
|
|
17750
17793
|
"onnx",
|
|
17751
17794
|
"coreml",
|
|
@@ -17990,6 +18033,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
17990
18033
|
steps: array(PipelineStepInputSchema).min(1),
|
|
17991
18034
|
frame: FrameInputSchema.optional(),
|
|
17992
18035
|
/**
|
|
18036
|
+
* Process-local lazy frame. Valid only when caller and provider resolve
|
|
18037
|
+
* in the same execution-group process; split/cross-node callers use
|
|
18038
|
+
* `frame`/`image` inline compatibility instead.
|
|
18039
|
+
*/
|
|
18040
|
+
frameRef: FrameRefSchema.optional(),
|
|
18041
|
+
/**
|
|
17993
18042
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
17994
18043
|
* the decoded pixels live in. One more member of the one-of
|
|
17995
18044
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -18285,7 +18334,10 @@ var NativeCropResultSchema = object({
|
|
|
18285
18334
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
18286
18335
|
* `keyFrame`) can reject a degraded fallback:
|
|
18287
18336
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
18288
|
-
* quality path).
|
|
18337
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
18338
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
18339
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
18340
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
18289
18341
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
18290
18342
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
18291
18343
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18776,12 +18828,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18776
18828
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18777
18829
|
* working unchanged when they switch to reading from the runner cap.
|
|
18778
18830
|
*/
|
|
18831
|
+
var FrameLazyCountersSchema = object({
|
|
18832
|
+
framesDecoded: number(),
|
|
18833
|
+
framesAdmitted: number(),
|
|
18834
|
+
framesDroppedPixelFree: number(),
|
|
18835
|
+
viewsMaterialized: number(),
|
|
18836
|
+
viewsSkipped: number(),
|
|
18837
|
+
workerToRunnerBytes: number(),
|
|
18838
|
+
runnerToPoolRawBytes: number(),
|
|
18839
|
+
runnerToPoolJpegBytes: number(),
|
|
18840
|
+
onDemandFullFrameRequests: number(),
|
|
18841
|
+
onDemandCropRequests: number(),
|
|
18842
|
+
nativeHits: number(),
|
|
18843
|
+
nativeMisses: number(),
|
|
18844
|
+
tileHits: number(),
|
|
18845
|
+
tileMisses: number(),
|
|
18846
|
+
fallbackHits: number(),
|
|
18847
|
+
fallbackMisses: number(),
|
|
18848
|
+
retainedWritesAvoided: number(),
|
|
18849
|
+
residentRefs: number(),
|
|
18850
|
+
residentBytes: number(),
|
|
18851
|
+
releases: number(),
|
|
18852
|
+
evictions: number(),
|
|
18853
|
+
staleMisses: number()
|
|
18854
|
+
});
|
|
18855
|
+
var FrameLazyMetricsSchema = object({
|
|
18856
|
+
node: FrameLazyCountersSchema,
|
|
18857
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
18858
|
+
});
|
|
18779
18859
|
var RunnerLocalMetricsSchema = object({
|
|
18780
18860
|
nodeId: string(),
|
|
18781
18861
|
activeCameras: number(),
|
|
18782
18862
|
throttledCameras: number(),
|
|
18783
18863
|
avgInferenceTimeMs: number(),
|
|
18784
|
-
queueDepth: number()
|
|
18864
|
+
queueDepth: number(),
|
|
18865
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18785
18866
|
});
|
|
18786
18867
|
method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mutation" }), method(object({ deviceId: number() }), object({ success: literal(true) }), { kind: "mutation" }), method(ReportMotionInputSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), RunnerLocalLoadSchema), method(_void(), RunnerLocalMetricsSchema), method(object({ deviceId: number() }), CameraMetricsSchema.nullable()), method(_void(), array(CameraMetricsWithDeviceIdSchema).readonly()), method(_void(), array(number()).readonly()), method(object({
|
|
18787
18868
|
handle: FrameHandleSchema,
|
|
@@ -20185,6 +20266,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
20185
20266
|
location: StorageLocationSchema,
|
|
20186
20267
|
relativePath: string()
|
|
20187
20268
|
}), _void(), { kind: "mutation" }), method(object({ location: StorageLocationSchema }), number().nullable()), method(BeginUploadInputSchema, BeginUploadResultSchema, { kind: "mutation" }), method(WriteChunkInputSchema, _void(), { kind: "mutation" }), method(FinalizeUploadInputSchema, _void(), { kind: "mutation" }), method(AbortUploadInputSchema, _void(), { kind: "mutation" }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, { kind: "mutation" }), method(ReadChunkInputSchema, _instanceof(Uint8Array)), method(EndDownloadInputSchema, _void(), { kind: "mutation" });
|
|
20269
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
20270
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
20271
|
+
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
20188
20272
|
/**
|
|
20189
20273
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
20190
20274
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -20214,7 +20298,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
20214
20298
|
var TerminalProfileInfoSchema = object({
|
|
20215
20299
|
profileId: string(),
|
|
20216
20300
|
label: string(),
|
|
20217
|
-
description: string().optional()
|
|
20301
|
+
description: string().optional(),
|
|
20302
|
+
/** Spawn defaults the instance form copies on create. */
|
|
20303
|
+
executable: string().optional(),
|
|
20304
|
+
args: array(string()).readonly().optional(),
|
|
20305
|
+
cwd: string().optional(),
|
|
20306
|
+
environment: array(string()).readonly().optional(),
|
|
20307
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
20308
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
20218
20309
|
});
|
|
20219
20310
|
/**
|
|
20220
20311
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -20227,7 +20318,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
20227
20318
|
profileId: string(),
|
|
20228
20319
|
profileLabel: string(),
|
|
20229
20320
|
name: string(),
|
|
20230
|
-
enabled: boolean()
|
|
20321
|
+
enabled: boolean(),
|
|
20322
|
+
executable: string(),
|
|
20323
|
+
args: array(string()).readonly(),
|
|
20324
|
+
cwd: string(),
|
|
20325
|
+
environment: array(string()).readonly(),
|
|
20326
|
+
profileSettings: ProfileSettingsBagSchema
|
|
20231
20327
|
});
|
|
20232
20328
|
var TerminalLegacyCameraSchema = object({
|
|
20233
20329
|
stableId: string(),
|
|
@@ -20257,7 +20353,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
20257
20353
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
20258
20354
|
targetNodeId: string().min(1),
|
|
20259
20355
|
profileId: string().min(1),
|
|
20260
|
-
name: string().trim().min(1).max(160).optional()
|
|
20356
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20357
|
+
executable: string().max(1024).optional(),
|
|
20358
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20359
|
+
cwd: string().max(1024).optional(),
|
|
20360
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20361
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20362
|
+
}), TerminalInstanceInfoSchema, {
|
|
20363
|
+
kind: "mutation",
|
|
20364
|
+
auth: "admin"
|
|
20365
|
+
}), method(object({
|
|
20366
|
+
instanceId: string().min(1),
|
|
20367
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20368
|
+
executable: string().max(1024).optional(),
|
|
20369
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20370
|
+
cwd: string().max(1024).optional(),
|
|
20371
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20372
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20261
20373
|
}), TerminalInstanceInfoSchema, {
|
|
20262
20374
|
kind: "mutation",
|
|
20263
20375
|
auth: "admin"
|
|
@@ -20279,7 +20391,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
20279
20391
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
20280
20392
|
profileId: string(),
|
|
20281
20393
|
cols: number().int().positive(),
|
|
20282
|
-
rows: number().int().positive()
|
|
20394
|
+
rows: number().int().positive(),
|
|
20395
|
+
executable: string().max(1024).optional(),
|
|
20396
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20397
|
+
cwd: string().max(1024).optional(),
|
|
20398
|
+
environment: array(string().max(4096)).max(64).optional()
|
|
20283
20399
|
}), TerminalSessionInfoSchema, {
|
|
20284
20400
|
kind: "mutation",
|
|
20285
20401
|
auth: "admin"
|
|
@@ -24154,10 +24270,10 @@ var lawnMowerControlCapability = {
|
|
|
24154
24270
|
*
|
|
24155
24271
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
24156
24272
|
* to receive an ordered list of candidate base URLs it should race
|
|
24157
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
24158
|
-
* then public hostname (if a tunnel is
|
|
24159
|
-
* race them with short timeouts and stick with the
|
|
24160
|
-
* session.
|
|
24273
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
24274
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
24275
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
24276
|
+
* winner for the session.
|
|
24161
24277
|
*
|
|
24162
24278
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
24163
24279
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -24312,6 +24428,17 @@ var NotificationEndpointSchema = object({
|
|
|
24312
24428
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
24313
24429
|
resolved: string().nullable()
|
|
24314
24430
|
});
|
|
24431
|
+
/**
|
|
24432
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
24433
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
24434
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
24435
|
+
*/
|
|
24436
|
+
var ViewerEndpointsSchema = object({
|
|
24437
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
24438
|
+
baseUrls: array(string()).readonly(),
|
|
24439
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
24440
|
+
resolved: array(string()).readonly()
|
|
24441
|
+
});
|
|
24315
24442
|
var AllowedAddressesSchema = object({
|
|
24316
24443
|
/**
|
|
24317
24444
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -24320,6 +24447,20 @@ var AllowedAddressesSchema = object({
|
|
|
24320
24447
|
* Network Addresses admin page and persisted by the addon.
|
|
24321
24448
|
*/
|
|
24322
24449
|
addresses: array(string()).readonly() });
|
|
24450
|
+
var TlsStatusSchema = object({
|
|
24451
|
+
mode: _enum([
|
|
24452
|
+
"generated",
|
|
24453
|
+
"uploaded",
|
|
24454
|
+
"disabled"
|
|
24455
|
+
]),
|
|
24456
|
+
leafFingerprintSha256: string().nullable(),
|
|
24457
|
+
caFingerprintSha256: string().nullable(),
|
|
24458
|
+
validTo: string().nullable(),
|
|
24459
|
+
sans: array(string()),
|
|
24460
|
+
caCertPem: string().nullable(),
|
|
24461
|
+
reissueError: string().nullable(),
|
|
24462
|
+
restartRequired: boolean()
|
|
24463
|
+
});
|
|
24323
24464
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
24324
24465
|
/**
|
|
24325
24466
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -24329,17 +24470,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
24329
24470
|
*/
|
|
24330
24471
|
port: number().int().min(1).max(65535).optional(),
|
|
24331
24472
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
24332
|
-
* candidate. Default `
|
|
24473
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
24333
24474
|
includeLoopback: boolean().optional(),
|
|
24334
|
-
/** Skip IPv6 entries.
|
|
24335
|
-
*
|
|
24475
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
24476
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
24477
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
24336
24478
|
ipv4Only: boolean().optional(),
|
|
24337
24479
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
24338
24480
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
24339
24481
|
* to avoid mixed-content blocks in the browser. The public
|
|
24340
24482
|
* tunnel always emits `https://` regardless. */
|
|
24341
24483
|
scheme: _enum(["http", "https"]).optional()
|
|
24342
|
-
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" })
|
|
24484
|
+
}), 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(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
|
|
24485
|
+
kind: "mutation",
|
|
24486
|
+
auth: "admin"
|
|
24487
|
+
}), method(object({
|
|
24488
|
+
certPem: string().min(1),
|
|
24489
|
+
keyPem: string().min(1),
|
|
24490
|
+
caPem: string().optional()
|
|
24491
|
+
}), TlsStatusSchema, {
|
|
24492
|
+
kind: "mutation",
|
|
24493
|
+
auth: "admin"
|
|
24494
|
+
}), method(_void(), object({ pem: string() })), method(_void(), TlsStatusSchema, {
|
|
24495
|
+
kind: "mutation",
|
|
24496
|
+
auth: "admin"
|
|
24497
|
+
});
|
|
24343
24498
|
var LockControlStatusSchema = object({
|
|
24344
24499
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
24345
24500
|
* failure to reach the target — operator intervention required. */
|
|
@@ -32818,6 +32973,12 @@ Object.freeze({
|
|
|
32818
32973
|
addonId: null,
|
|
32819
32974
|
access: "create"
|
|
32820
32975
|
},
|
|
32976
|
+
"localNetwork.downloadCa": {
|
|
32977
|
+
capName: "local-network",
|
|
32978
|
+
capScope: "system",
|
|
32979
|
+
addonId: null,
|
|
32980
|
+
access: "view"
|
|
32981
|
+
},
|
|
32821
32982
|
"localNetwork.getAllowedAddresses": {
|
|
32822
32983
|
capName: "local-network",
|
|
32823
32984
|
capScope: "system",
|
|
@@ -32842,18 +33003,42 @@ Object.freeze({
|
|
|
32842
33003
|
addonId: null,
|
|
32843
33004
|
access: "view"
|
|
32844
33005
|
},
|
|
33006
|
+
"localNetwork.getTlsStatus": {
|
|
33007
|
+
capName: "local-network",
|
|
33008
|
+
capScope: "system",
|
|
33009
|
+
addonId: null,
|
|
33010
|
+
access: "view"
|
|
33011
|
+
},
|
|
33012
|
+
"localNetwork.getViewerEndpoints": {
|
|
33013
|
+
capName: "local-network",
|
|
33014
|
+
capScope: "system",
|
|
33015
|
+
addonId: null,
|
|
33016
|
+
access: "view"
|
|
33017
|
+
},
|
|
32845
33018
|
"localNetwork.list": {
|
|
32846
33019
|
capName: "local-network",
|
|
32847
33020
|
capScope: "system",
|
|
32848
33021
|
addonId: null,
|
|
32849
33022
|
access: "view"
|
|
32850
33023
|
},
|
|
33024
|
+
"localNetwork.regenerateCertificate": {
|
|
33025
|
+
capName: "local-network",
|
|
33026
|
+
capScope: "system",
|
|
33027
|
+
addonId: null,
|
|
33028
|
+
access: "create"
|
|
33029
|
+
},
|
|
32851
33030
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
32852
33031
|
capName: "local-network",
|
|
32853
33032
|
capScope: "system",
|
|
32854
33033
|
addonId: null,
|
|
32855
33034
|
access: "delete"
|
|
32856
33035
|
},
|
|
33036
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
33037
|
+
capName: "local-network",
|
|
33038
|
+
capScope: "system",
|
|
33039
|
+
addonId: null,
|
|
33040
|
+
access: "create"
|
|
33041
|
+
},
|
|
32857
33042
|
"localNetwork.setAllowedAddresses": {
|
|
32858
33043
|
capName: "local-network",
|
|
32859
33044
|
capScope: "system",
|
|
@@ -32866,6 +33051,18 @@ Object.freeze({
|
|
|
32866
33051
|
addonId: null,
|
|
32867
33052
|
access: "create"
|
|
32868
33053
|
},
|
|
33054
|
+
"localNetwork.setViewerEndpoints": {
|
|
33055
|
+
capName: "local-network",
|
|
33056
|
+
capScope: "system",
|
|
33057
|
+
addonId: null,
|
|
33058
|
+
access: "create"
|
|
33059
|
+
},
|
|
33060
|
+
"localNetwork.uploadCertificate": {
|
|
33061
|
+
capName: "local-network",
|
|
33062
|
+
capScope: "system",
|
|
33063
|
+
addonId: null,
|
|
33064
|
+
access: "create"
|
|
33065
|
+
},
|
|
32869
33066
|
"lockControl.lock": {
|
|
32870
33067
|
capName: "lock-control",
|
|
32871
33068
|
capScope: "device",
|
|
@@ -35746,6 +35943,12 @@ Object.freeze({
|
|
|
35746
35943
|
addonId: null,
|
|
35747
35944
|
access: "create"
|
|
35748
35945
|
},
|
|
35946
|
+
"terminalSession.updateInstance": {
|
|
35947
|
+
capName: "terminal-session",
|
|
35948
|
+
capScope: "system",
|
|
35949
|
+
addonId: null,
|
|
35950
|
+
access: "create"
|
|
35951
|
+
},
|
|
35749
35952
|
"terminalSession.writeInput": {
|
|
35750
35953
|
capName: "terminal-session",
|
|
35751
35954
|
capScope: "system",
|
|
@@ -38233,6 +38436,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
38233
38436
|
}]
|
|
38234
38437
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
38235
38438
|
string().min(1);
|
|
38439
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
38440
|
+
stepId: "face-embedding",
|
|
38441
|
+
key: "minLandmarkFaceSize",
|
|
38442
|
+
label: "Min face size for recognition (detection px)",
|
|
38443
|
+
description: "Refuse to embed a face smaller than this IN THE DETECTION FRAME. Applies to every node — the enrolled gallery is one index, and two admission floors would fill it from two policies. 0 disables the gate.",
|
|
38444
|
+
type: "slider",
|
|
38445
|
+
min: 0,
|
|
38446
|
+
max: 64,
|
|
38447
|
+
step: 2,
|
|
38448
|
+
default: 24
|
|
38449
|
+
}];
|
|
38450
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
38451
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
38452
|
+
}
|
|
38453
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
38454
|
+
function readClusterStepSettings(config) {
|
|
38455
|
+
const out = {};
|
|
38456
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
38457
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
38458
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
38459
|
+
const existing = out[field.stepId] ?? {};
|
|
38460
|
+
out[field.stepId] = {
|
|
38461
|
+
...existing,
|
|
38462
|
+
[field.key]: value
|
|
38463
|
+
};
|
|
38464
|
+
}
|
|
38465
|
+
return out;
|
|
38466
|
+
}
|
|
38467
|
+
readClusterStepSettings({});
|
|
38236
38468
|
object({
|
|
38237
38469
|
/**
|
|
38238
38470
|
* Fraction of the box's own size added on EACH side before cutting.
|
package/dist/addon.mjs
CHANGED
|
@@ -8229,6 +8229,15 @@ var LabelDefinitionSchema = object({
|
|
|
8229
8229
|
description: string().optional(),
|
|
8230
8230
|
icon: string().optional()
|
|
8231
8231
|
});
|
|
8232
|
+
var ClassMapDefinitionSchema = object({
|
|
8233
|
+
mapping: record(string(), _enum([
|
|
8234
|
+
"person",
|
|
8235
|
+
"vehicle",
|
|
8236
|
+
"animal",
|
|
8237
|
+
"package"
|
|
8238
|
+
])),
|
|
8239
|
+
preserveOriginal: boolean()
|
|
8240
|
+
});
|
|
8232
8241
|
var MODEL_FORMATS = [
|
|
8233
8242
|
"onnx",
|
|
8234
8243
|
"coreml",
|
|
@@ -8407,7 +8416,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8407
8416
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8408
8417
|
* is a presentation overlay resolved back to an `id`.
|
|
8409
8418
|
*/
|
|
8410
|
-
group: ModelVariantGroupSchema.optional()
|
|
8419
|
+
group: ModelVariantGroupSchema.optional(),
|
|
8420
|
+
/**
|
|
8421
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
8422
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8423
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8424
|
+
*/
|
|
8425
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8411
8426
|
});
|
|
8412
8427
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8413
8428
|
format: literal("openvino"),
|
|
@@ -8436,7 +8451,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8436
8451
|
"ocr",
|
|
8437
8452
|
"segmentation"
|
|
8438
8453
|
]),
|
|
8439
|
-
faceAlignment: boolean().optional()
|
|
8454
|
+
faceAlignment: boolean().optional(),
|
|
8455
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8440
8456
|
});
|
|
8441
8457
|
var ConvertResultSchema = object({
|
|
8442
8458
|
entry: ModelCatalogEntrySchema,
|
|
@@ -17741,6 +17757,33 @@ var NativeCropRefSchema = object({
|
|
|
17741
17757
|
h: number()
|
|
17742
17758
|
})
|
|
17743
17759
|
});
|
|
17760
|
+
object({
|
|
17761
|
+
crop: object({
|
|
17762
|
+
left: number(),
|
|
17763
|
+
top: number(),
|
|
17764
|
+
width: number().positive(),
|
|
17765
|
+
height: number().positive()
|
|
17766
|
+
}).optional(),
|
|
17767
|
+
content: object({
|
|
17768
|
+
width: number().int().positive(),
|
|
17769
|
+
height: number().int().positive()
|
|
17770
|
+
}),
|
|
17771
|
+
fit: _enum(["stretch", "contain"]),
|
|
17772
|
+
format: _enum([
|
|
17773
|
+
"rgb",
|
|
17774
|
+
"gray",
|
|
17775
|
+
"jpeg"
|
|
17776
|
+
])
|
|
17777
|
+
});
|
|
17778
|
+
var FrameRefSchema = object({
|
|
17779
|
+
registryId: string().min(1),
|
|
17780
|
+
id: string().min(1),
|
|
17781
|
+
width: number().int().positive(),
|
|
17782
|
+
height: number().int().positive(),
|
|
17783
|
+
format: _enum(["rgb", "gray"]),
|
|
17784
|
+
timestamp: number(),
|
|
17785
|
+
capturedAt: number().optional()
|
|
17786
|
+
});
|
|
17744
17787
|
var ModelFormatSchema$1 = _enum([
|
|
17745
17788
|
"onnx",
|
|
17746
17789
|
"coreml",
|
|
@@ -17985,6 +18028,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
17985
18028
|
steps: array(PipelineStepInputSchema).min(1),
|
|
17986
18029
|
frame: FrameInputSchema.optional(),
|
|
17987
18030
|
/**
|
|
18031
|
+
* Process-local lazy frame. Valid only when caller and provider resolve
|
|
18032
|
+
* in the same execution-group process; split/cross-node callers use
|
|
18033
|
+
* `frame`/`image` inline compatibility instead.
|
|
18034
|
+
*/
|
|
18035
|
+
frameRef: FrameRefSchema.optional(),
|
|
18036
|
+
/**
|
|
17988
18037
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
17989
18038
|
* the decoded pixels live in. One more member of the one-of
|
|
17990
18039
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -18280,7 +18329,10 @@ var NativeCropResultSchema = object({
|
|
|
18280
18329
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
18281
18330
|
* `keyFrame`) can reject a degraded fallback:
|
|
18282
18331
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
18283
|
-
* quality path).
|
|
18332
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
18333
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
18334
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
18335
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
18284
18336
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
18285
18337
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
18286
18338
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18771,12 +18823,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18771
18823
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18772
18824
|
* working unchanged when they switch to reading from the runner cap.
|
|
18773
18825
|
*/
|
|
18826
|
+
var FrameLazyCountersSchema = object({
|
|
18827
|
+
framesDecoded: number(),
|
|
18828
|
+
framesAdmitted: number(),
|
|
18829
|
+
framesDroppedPixelFree: number(),
|
|
18830
|
+
viewsMaterialized: number(),
|
|
18831
|
+
viewsSkipped: number(),
|
|
18832
|
+
workerToRunnerBytes: number(),
|
|
18833
|
+
runnerToPoolRawBytes: number(),
|
|
18834
|
+
runnerToPoolJpegBytes: number(),
|
|
18835
|
+
onDemandFullFrameRequests: number(),
|
|
18836
|
+
onDemandCropRequests: number(),
|
|
18837
|
+
nativeHits: number(),
|
|
18838
|
+
nativeMisses: number(),
|
|
18839
|
+
tileHits: number(),
|
|
18840
|
+
tileMisses: number(),
|
|
18841
|
+
fallbackHits: number(),
|
|
18842
|
+
fallbackMisses: number(),
|
|
18843
|
+
retainedWritesAvoided: number(),
|
|
18844
|
+
residentRefs: number(),
|
|
18845
|
+
residentBytes: number(),
|
|
18846
|
+
releases: number(),
|
|
18847
|
+
evictions: number(),
|
|
18848
|
+
staleMisses: number()
|
|
18849
|
+
});
|
|
18850
|
+
var FrameLazyMetricsSchema = object({
|
|
18851
|
+
node: FrameLazyCountersSchema,
|
|
18852
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
18853
|
+
});
|
|
18774
18854
|
var RunnerLocalMetricsSchema = object({
|
|
18775
18855
|
nodeId: string(),
|
|
18776
18856
|
activeCameras: number(),
|
|
18777
18857
|
throttledCameras: number(),
|
|
18778
18858
|
avgInferenceTimeMs: number(),
|
|
18779
|
-
queueDepth: number()
|
|
18859
|
+
queueDepth: number(),
|
|
18860
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18780
18861
|
});
|
|
18781
18862
|
method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mutation" }), method(object({ deviceId: number() }), object({ success: literal(true) }), { kind: "mutation" }), method(ReportMotionInputSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), RunnerLocalLoadSchema), method(_void(), RunnerLocalMetricsSchema), method(object({ deviceId: number() }), CameraMetricsSchema.nullable()), method(_void(), array(CameraMetricsWithDeviceIdSchema).readonly()), method(_void(), array(number()).readonly()), method(object({
|
|
18782
18863
|
handle: FrameHandleSchema,
|
|
@@ -20180,6 +20261,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
20180
20261
|
location: StorageLocationSchema,
|
|
20181
20262
|
relativePath: string()
|
|
20182
20263
|
}), _void(), { kind: "mutation" }), method(object({ location: StorageLocationSchema }), number().nullable()), method(BeginUploadInputSchema, BeginUploadResultSchema, { kind: "mutation" }), method(WriteChunkInputSchema, _void(), { kind: "mutation" }), method(FinalizeUploadInputSchema, _void(), { kind: "mutation" }), method(AbortUploadInputSchema, _void(), { kind: "mutation" }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, { kind: "mutation" }), method(ReadChunkInputSchema, _instanceof(Uint8Array)), method(EndDownloadInputSchema, _void(), { kind: "mutation" });
|
|
20264
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
20265
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
20266
|
+
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
20183
20267
|
/**
|
|
20184
20268
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
20185
20269
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -20209,7 +20293,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
20209
20293
|
var TerminalProfileInfoSchema = object({
|
|
20210
20294
|
profileId: string(),
|
|
20211
20295
|
label: string(),
|
|
20212
|
-
description: string().optional()
|
|
20296
|
+
description: string().optional(),
|
|
20297
|
+
/** Spawn defaults the instance form copies on create. */
|
|
20298
|
+
executable: string().optional(),
|
|
20299
|
+
args: array(string()).readonly().optional(),
|
|
20300
|
+
cwd: string().optional(),
|
|
20301
|
+
environment: array(string()).readonly().optional(),
|
|
20302
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
20303
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
20213
20304
|
});
|
|
20214
20305
|
/**
|
|
20215
20306
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -20222,7 +20313,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
20222
20313
|
profileId: string(),
|
|
20223
20314
|
profileLabel: string(),
|
|
20224
20315
|
name: string(),
|
|
20225
|
-
enabled: boolean()
|
|
20316
|
+
enabled: boolean(),
|
|
20317
|
+
executable: string(),
|
|
20318
|
+
args: array(string()).readonly(),
|
|
20319
|
+
cwd: string(),
|
|
20320
|
+
environment: array(string()).readonly(),
|
|
20321
|
+
profileSettings: ProfileSettingsBagSchema
|
|
20226
20322
|
});
|
|
20227
20323
|
var TerminalLegacyCameraSchema = object({
|
|
20228
20324
|
stableId: string(),
|
|
@@ -20252,7 +20348,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
20252
20348
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
20253
20349
|
targetNodeId: string().min(1),
|
|
20254
20350
|
profileId: string().min(1),
|
|
20255
|
-
name: string().trim().min(1).max(160).optional()
|
|
20351
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20352
|
+
executable: string().max(1024).optional(),
|
|
20353
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20354
|
+
cwd: string().max(1024).optional(),
|
|
20355
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20356
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20357
|
+
}), TerminalInstanceInfoSchema, {
|
|
20358
|
+
kind: "mutation",
|
|
20359
|
+
auth: "admin"
|
|
20360
|
+
}), method(object({
|
|
20361
|
+
instanceId: string().min(1),
|
|
20362
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20363
|
+
executable: string().max(1024).optional(),
|
|
20364
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20365
|
+
cwd: string().max(1024).optional(),
|
|
20366
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20367
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20256
20368
|
}), TerminalInstanceInfoSchema, {
|
|
20257
20369
|
kind: "mutation",
|
|
20258
20370
|
auth: "admin"
|
|
@@ -20274,7 +20386,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
20274
20386
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
20275
20387
|
profileId: string(),
|
|
20276
20388
|
cols: number().int().positive(),
|
|
20277
|
-
rows: number().int().positive()
|
|
20389
|
+
rows: number().int().positive(),
|
|
20390
|
+
executable: string().max(1024).optional(),
|
|
20391
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20392
|
+
cwd: string().max(1024).optional(),
|
|
20393
|
+
environment: array(string().max(4096)).max(64).optional()
|
|
20278
20394
|
}), TerminalSessionInfoSchema, {
|
|
20279
20395
|
kind: "mutation",
|
|
20280
20396
|
auth: "admin"
|
|
@@ -24149,10 +24265,10 @@ var lawnMowerControlCapability = {
|
|
|
24149
24265
|
*
|
|
24150
24266
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
24151
24267
|
* to receive an ordered list of candidate base URLs it should race
|
|
24152
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
24153
|
-
* then public hostname (if a tunnel is
|
|
24154
|
-
* race them with short timeouts and stick with the
|
|
24155
|
-
* session.
|
|
24268
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
24269
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
24270
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
24271
|
+
* winner for the session.
|
|
24156
24272
|
*
|
|
24157
24273
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
24158
24274
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -24307,6 +24423,17 @@ var NotificationEndpointSchema = object({
|
|
|
24307
24423
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
24308
24424
|
resolved: string().nullable()
|
|
24309
24425
|
});
|
|
24426
|
+
/**
|
|
24427
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
24428
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
24429
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
24430
|
+
*/
|
|
24431
|
+
var ViewerEndpointsSchema = object({
|
|
24432
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
24433
|
+
baseUrls: array(string()).readonly(),
|
|
24434
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
24435
|
+
resolved: array(string()).readonly()
|
|
24436
|
+
});
|
|
24310
24437
|
var AllowedAddressesSchema = object({
|
|
24311
24438
|
/**
|
|
24312
24439
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -24315,6 +24442,20 @@ var AllowedAddressesSchema = object({
|
|
|
24315
24442
|
* Network Addresses admin page and persisted by the addon.
|
|
24316
24443
|
*/
|
|
24317
24444
|
addresses: array(string()).readonly() });
|
|
24445
|
+
var TlsStatusSchema = object({
|
|
24446
|
+
mode: _enum([
|
|
24447
|
+
"generated",
|
|
24448
|
+
"uploaded",
|
|
24449
|
+
"disabled"
|
|
24450
|
+
]),
|
|
24451
|
+
leafFingerprintSha256: string().nullable(),
|
|
24452
|
+
caFingerprintSha256: string().nullable(),
|
|
24453
|
+
validTo: string().nullable(),
|
|
24454
|
+
sans: array(string()),
|
|
24455
|
+
caCertPem: string().nullable(),
|
|
24456
|
+
reissueError: string().nullable(),
|
|
24457
|
+
restartRequired: boolean()
|
|
24458
|
+
});
|
|
24318
24459
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
24319
24460
|
/**
|
|
24320
24461
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -24324,17 +24465,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
24324
24465
|
*/
|
|
24325
24466
|
port: number().int().min(1).max(65535).optional(),
|
|
24326
24467
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
24327
|
-
* candidate. Default `
|
|
24468
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
24328
24469
|
includeLoopback: boolean().optional(),
|
|
24329
|
-
/** Skip IPv6 entries.
|
|
24330
|
-
*
|
|
24470
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
24471
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
24472
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
24331
24473
|
ipv4Only: boolean().optional(),
|
|
24332
24474
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
24333
24475
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
24334
24476
|
* to avoid mixed-content blocks in the browser. The public
|
|
24335
24477
|
* tunnel always emits `https://` regardless. */
|
|
24336
24478
|
scheme: _enum(["http", "https"]).optional()
|
|
24337
|
-
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" })
|
|
24479
|
+
}), 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(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" }), method(_void(), TlsStatusSchema), method(object({ reason: string().optional() }), TlsStatusSchema, {
|
|
24480
|
+
kind: "mutation",
|
|
24481
|
+
auth: "admin"
|
|
24482
|
+
}), method(object({
|
|
24483
|
+
certPem: string().min(1),
|
|
24484
|
+
keyPem: string().min(1),
|
|
24485
|
+
caPem: string().optional()
|
|
24486
|
+
}), TlsStatusSchema, {
|
|
24487
|
+
kind: "mutation",
|
|
24488
|
+
auth: "admin"
|
|
24489
|
+
}), method(_void(), object({ pem: string() })), method(_void(), TlsStatusSchema, {
|
|
24490
|
+
kind: "mutation",
|
|
24491
|
+
auth: "admin"
|
|
24492
|
+
});
|
|
24338
24493
|
var LockControlStatusSchema = object({
|
|
24339
24494
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
24340
24495
|
* failure to reach the target — operator intervention required. */
|
|
@@ -32813,6 +32968,12 @@ Object.freeze({
|
|
|
32813
32968
|
addonId: null,
|
|
32814
32969
|
access: "create"
|
|
32815
32970
|
},
|
|
32971
|
+
"localNetwork.downloadCa": {
|
|
32972
|
+
capName: "local-network",
|
|
32973
|
+
capScope: "system",
|
|
32974
|
+
addonId: null,
|
|
32975
|
+
access: "view"
|
|
32976
|
+
},
|
|
32816
32977
|
"localNetwork.getAllowedAddresses": {
|
|
32817
32978
|
capName: "local-network",
|
|
32818
32979
|
capScope: "system",
|
|
@@ -32837,18 +32998,42 @@ Object.freeze({
|
|
|
32837
32998
|
addonId: null,
|
|
32838
32999
|
access: "view"
|
|
32839
33000
|
},
|
|
33001
|
+
"localNetwork.getTlsStatus": {
|
|
33002
|
+
capName: "local-network",
|
|
33003
|
+
capScope: "system",
|
|
33004
|
+
addonId: null,
|
|
33005
|
+
access: "view"
|
|
33006
|
+
},
|
|
33007
|
+
"localNetwork.getViewerEndpoints": {
|
|
33008
|
+
capName: "local-network",
|
|
33009
|
+
capScope: "system",
|
|
33010
|
+
addonId: null,
|
|
33011
|
+
access: "view"
|
|
33012
|
+
},
|
|
32840
33013
|
"localNetwork.list": {
|
|
32841
33014
|
capName: "local-network",
|
|
32842
33015
|
capScope: "system",
|
|
32843
33016
|
addonId: null,
|
|
32844
33017
|
access: "view"
|
|
32845
33018
|
},
|
|
33019
|
+
"localNetwork.regenerateCertificate": {
|
|
33020
|
+
capName: "local-network",
|
|
33021
|
+
capScope: "system",
|
|
33022
|
+
addonId: null,
|
|
33023
|
+
access: "create"
|
|
33024
|
+
},
|
|
32846
33025
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
32847
33026
|
capName: "local-network",
|
|
32848
33027
|
capScope: "system",
|
|
32849
33028
|
addonId: null,
|
|
32850
33029
|
access: "delete"
|
|
32851
33030
|
},
|
|
33031
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
33032
|
+
capName: "local-network",
|
|
33033
|
+
capScope: "system",
|
|
33034
|
+
addonId: null,
|
|
33035
|
+
access: "create"
|
|
33036
|
+
},
|
|
32852
33037
|
"localNetwork.setAllowedAddresses": {
|
|
32853
33038
|
capName: "local-network",
|
|
32854
33039
|
capScope: "system",
|
|
@@ -32861,6 +33046,18 @@ Object.freeze({
|
|
|
32861
33046
|
addonId: null,
|
|
32862
33047
|
access: "create"
|
|
32863
33048
|
},
|
|
33049
|
+
"localNetwork.setViewerEndpoints": {
|
|
33050
|
+
capName: "local-network",
|
|
33051
|
+
capScope: "system",
|
|
33052
|
+
addonId: null,
|
|
33053
|
+
access: "create"
|
|
33054
|
+
},
|
|
33055
|
+
"localNetwork.uploadCertificate": {
|
|
33056
|
+
capName: "local-network",
|
|
33057
|
+
capScope: "system",
|
|
33058
|
+
addonId: null,
|
|
33059
|
+
access: "create"
|
|
33060
|
+
},
|
|
32864
33061
|
"lockControl.lock": {
|
|
32865
33062
|
capName: "lock-control",
|
|
32866
33063
|
capScope: "device",
|
|
@@ -35741,6 +35938,12 @@ Object.freeze({
|
|
|
35741
35938
|
addonId: null,
|
|
35742
35939
|
access: "create"
|
|
35743
35940
|
},
|
|
35941
|
+
"terminalSession.updateInstance": {
|
|
35942
|
+
capName: "terminal-session",
|
|
35943
|
+
capScope: "system",
|
|
35944
|
+
addonId: null,
|
|
35945
|
+
access: "create"
|
|
35946
|
+
},
|
|
35744
35947
|
"terminalSession.writeInput": {
|
|
35745
35948
|
capName: "terminal-session",
|
|
35746
35949
|
capScope: "system",
|
|
@@ -38228,6 +38431,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
38228
38431
|
}]
|
|
38229
38432
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
38230
38433
|
string().min(1);
|
|
38434
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
38435
|
+
stepId: "face-embedding",
|
|
38436
|
+
key: "minLandmarkFaceSize",
|
|
38437
|
+
label: "Min face size for recognition (detection px)",
|
|
38438
|
+
description: "Refuse to embed a face smaller than this IN THE DETECTION FRAME. Applies to every node — the enrolled gallery is one index, and two admission floors would fill it from two policies. 0 disables the gate.",
|
|
38439
|
+
type: "slider",
|
|
38440
|
+
min: 0,
|
|
38441
|
+
max: 64,
|
|
38442
|
+
step: 2,
|
|
38443
|
+
default: 24
|
|
38444
|
+
}];
|
|
38445
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
38446
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
38447
|
+
}
|
|
38448
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
38449
|
+
function readClusterStepSettings(config) {
|
|
38450
|
+
const out = {};
|
|
38451
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
38452
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
38453
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
38454
|
+
const existing = out[field.stepId] ?? {};
|
|
38455
|
+
out[field.stepId] = {
|
|
38456
|
+
...existing,
|
|
38457
|
+
[field.key]: value
|
|
38458
|
+
};
|
|
38459
|
+
}
|
|
38460
|
+
return out;
|
|
38461
|
+
}
|
|
38462
|
+
readClusterStepSettings({});
|
|
38231
38463
|
object({
|
|
38232
38464
|
/**
|
|
38233
38465
|
* Fraction of the box's own size added on EACH side before cutting.
|