@camstack/addon-export-alexa 1.2.32 → 1.2.33
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/export-alexa.addon.js +248 -16
- package/dist/export-alexa.addon.mjs +248 -16
- package/package.json +1 -1
|
@@ -8242,6 +8242,15 @@ var LabelDefinitionSchema = object({
|
|
|
8242
8242
|
description: string().optional(),
|
|
8243
8243
|
icon: string().optional()
|
|
8244
8244
|
});
|
|
8245
|
+
var ClassMapDefinitionSchema = object({
|
|
8246
|
+
mapping: record(string(), _enum([
|
|
8247
|
+
"person",
|
|
8248
|
+
"vehicle",
|
|
8249
|
+
"animal",
|
|
8250
|
+
"package"
|
|
8251
|
+
])),
|
|
8252
|
+
preserveOriginal: boolean()
|
|
8253
|
+
});
|
|
8245
8254
|
var MODEL_FORMATS = [
|
|
8246
8255
|
"onnx",
|
|
8247
8256
|
"coreml",
|
|
@@ -8420,7 +8429,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8420
8429
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8421
8430
|
* is a presentation overlay resolved back to an `id`.
|
|
8422
8431
|
*/
|
|
8423
|
-
group: ModelVariantGroupSchema.optional()
|
|
8432
|
+
group: ModelVariantGroupSchema.optional(),
|
|
8433
|
+
/**
|
|
8434
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
8435
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8436
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8437
|
+
*/
|
|
8438
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8424
8439
|
});
|
|
8425
8440
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8426
8441
|
format: literal("openvino"),
|
|
@@ -8449,7 +8464,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8449
8464
|
"ocr",
|
|
8450
8465
|
"segmentation"
|
|
8451
8466
|
]),
|
|
8452
|
-
faceAlignment: boolean().optional()
|
|
8467
|
+
faceAlignment: boolean().optional(),
|
|
8468
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8453
8469
|
});
|
|
8454
8470
|
var ConvertResultSchema = object({
|
|
8455
8471
|
entry: ModelCatalogEntrySchema,
|
|
@@ -17519,6 +17535,33 @@ var NativeCropRefSchema = object({
|
|
|
17519
17535
|
h: number()
|
|
17520
17536
|
})
|
|
17521
17537
|
});
|
|
17538
|
+
object({
|
|
17539
|
+
crop: object({
|
|
17540
|
+
left: number(),
|
|
17541
|
+
top: number(),
|
|
17542
|
+
width: number().positive(),
|
|
17543
|
+
height: number().positive()
|
|
17544
|
+
}).optional(),
|
|
17545
|
+
content: object({
|
|
17546
|
+
width: number().int().positive(),
|
|
17547
|
+
height: number().int().positive()
|
|
17548
|
+
}),
|
|
17549
|
+
fit: _enum(["stretch", "contain"]),
|
|
17550
|
+
format: _enum([
|
|
17551
|
+
"rgb",
|
|
17552
|
+
"gray",
|
|
17553
|
+
"jpeg"
|
|
17554
|
+
])
|
|
17555
|
+
});
|
|
17556
|
+
var FrameRefSchema = object({
|
|
17557
|
+
registryId: string().min(1),
|
|
17558
|
+
id: string().min(1),
|
|
17559
|
+
width: number().int().positive(),
|
|
17560
|
+
height: number().int().positive(),
|
|
17561
|
+
format: _enum(["rgb", "gray"]),
|
|
17562
|
+
timestamp: number(),
|
|
17563
|
+
capturedAt: number().optional()
|
|
17564
|
+
});
|
|
17522
17565
|
var ModelFormatSchema$1 = _enum([
|
|
17523
17566
|
"onnx",
|
|
17524
17567
|
"coreml",
|
|
@@ -17763,6 +17806,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
17763
17806
|
steps: array(PipelineStepInputSchema).min(1),
|
|
17764
17807
|
frame: FrameInputSchema.optional(),
|
|
17765
17808
|
/**
|
|
17809
|
+
* Process-local lazy frame. Valid only when caller and provider resolve
|
|
17810
|
+
* in the same execution-group process; split/cross-node callers use
|
|
17811
|
+
* `frame`/`image` inline compatibility instead.
|
|
17812
|
+
*/
|
|
17813
|
+
frameRef: FrameRefSchema.optional(),
|
|
17814
|
+
/**
|
|
17766
17815
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
17767
17816
|
* the decoded pixels live in. One more member of the one-of
|
|
17768
17817
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -18018,7 +18067,10 @@ var NativeCropResultSchema = object({
|
|
|
18018
18067
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
18019
18068
|
* `keyFrame`) can reject a degraded fallback:
|
|
18020
18069
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
18021
|
-
* quality path).
|
|
18070
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
18071
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
18072
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
18073
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
18022
18074
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
18023
18075
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
18024
18076
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18509,12 +18561,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18509
18561
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18510
18562
|
* working unchanged when they switch to reading from the runner cap.
|
|
18511
18563
|
*/
|
|
18564
|
+
var FrameLazyCountersSchema = object({
|
|
18565
|
+
framesDecoded: number(),
|
|
18566
|
+
framesAdmitted: number(),
|
|
18567
|
+
framesDroppedPixelFree: number(),
|
|
18568
|
+
viewsMaterialized: number(),
|
|
18569
|
+
viewsSkipped: number(),
|
|
18570
|
+
workerToRunnerBytes: number(),
|
|
18571
|
+
runnerToPoolRawBytes: number(),
|
|
18572
|
+
runnerToPoolJpegBytes: number(),
|
|
18573
|
+
onDemandFullFrameRequests: number(),
|
|
18574
|
+
onDemandCropRequests: number(),
|
|
18575
|
+
nativeHits: number(),
|
|
18576
|
+
nativeMisses: number(),
|
|
18577
|
+
tileHits: number(),
|
|
18578
|
+
tileMisses: number(),
|
|
18579
|
+
fallbackHits: number(),
|
|
18580
|
+
fallbackMisses: number(),
|
|
18581
|
+
retainedWritesAvoided: number(),
|
|
18582
|
+
residentRefs: number(),
|
|
18583
|
+
residentBytes: number(),
|
|
18584
|
+
releases: number(),
|
|
18585
|
+
evictions: number(),
|
|
18586
|
+
staleMisses: number()
|
|
18587
|
+
});
|
|
18588
|
+
var FrameLazyMetricsSchema = object({
|
|
18589
|
+
node: FrameLazyCountersSchema,
|
|
18590
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
18591
|
+
});
|
|
18512
18592
|
var RunnerLocalMetricsSchema = object({
|
|
18513
18593
|
nodeId: string(),
|
|
18514
18594
|
activeCameras: number(),
|
|
18515
18595
|
throttledCameras: number(),
|
|
18516
18596
|
avgInferenceTimeMs: number(),
|
|
18517
|
-
queueDepth: number()
|
|
18597
|
+
queueDepth: number(),
|
|
18598
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18518
18599
|
});
|
|
18519
18600
|
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({
|
|
18520
18601
|
handle: FrameHandleSchema,
|
|
@@ -19814,6 +19895,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
19814
19895
|
location: StorageLocationSchema,
|
|
19815
19896
|
relativePath: string()
|
|
19816
19897
|
}), _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" });
|
|
19898
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
19899
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
19900
|
+
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
19817
19901
|
/**
|
|
19818
19902
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
19819
19903
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -19843,7 +19927,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
19843
19927
|
var TerminalProfileInfoSchema = object({
|
|
19844
19928
|
profileId: string(),
|
|
19845
19929
|
label: string(),
|
|
19846
|
-
description: string().optional()
|
|
19930
|
+
description: string().optional(),
|
|
19931
|
+
/** Spawn defaults the instance form copies on create. */
|
|
19932
|
+
executable: string().optional(),
|
|
19933
|
+
args: array(string()).readonly().optional(),
|
|
19934
|
+
cwd: string().optional(),
|
|
19935
|
+
environment: array(string()).readonly().optional(),
|
|
19936
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
19937
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
19847
19938
|
});
|
|
19848
19939
|
/**
|
|
19849
19940
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -19856,7 +19947,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
19856
19947
|
profileId: string(),
|
|
19857
19948
|
profileLabel: string(),
|
|
19858
19949
|
name: string(),
|
|
19859
|
-
enabled: boolean()
|
|
19950
|
+
enabled: boolean(),
|
|
19951
|
+
executable: string(),
|
|
19952
|
+
args: array(string()).readonly(),
|
|
19953
|
+
cwd: string(),
|
|
19954
|
+
environment: array(string()).readonly(),
|
|
19955
|
+
profileSettings: ProfileSettingsBagSchema
|
|
19860
19956
|
});
|
|
19861
19957
|
var TerminalLegacyCameraSchema = object({
|
|
19862
19958
|
stableId: string(),
|
|
@@ -19886,7 +19982,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
19886
19982
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19887
19983
|
targetNodeId: string().min(1),
|
|
19888
19984
|
profileId: string().min(1),
|
|
19889
|
-
name: string().trim().min(1).max(160).optional()
|
|
19985
|
+
name: string().trim().min(1).max(160).optional(),
|
|
19986
|
+
executable: string().max(1024).optional(),
|
|
19987
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
19988
|
+
cwd: string().max(1024).optional(),
|
|
19989
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
19990
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
19991
|
+
}), TerminalInstanceInfoSchema, {
|
|
19992
|
+
kind: "mutation",
|
|
19993
|
+
auth: "admin"
|
|
19994
|
+
}), method(object({
|
|
19995
|
+
instanceId: string().min(1),
|
|
19996
|
+
name: string().trim().min(1).max(160).optional(),
|
|
19997
|
+
executable: string().max(1024).optional(),
|
|
19998
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
19999
|
+
cwd: string().max(1024).optional(),
|
|
20000
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20001
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
19890
20002
|
}), TerminalInstanceInfoSchema, {
|
|
19891
20003
|
kind: "mutation",
|
|
19892
20004
|
auth: "admin"
|
|
@@ -19908,7 +20020,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
19908
20020
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19909
20021
|
profileId: string(),
|
|
19910
20022
|
cols: number().int().positive(),
|
|
19911
|
-
rows: number().int().positive()
|
|
20023
|
+
rows: number().int().positive(),
|
|
20024
|
+
executable: string().max(1024).optional(),
|
|
20025
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20026
|
+
cwd: string().max(1024).optional(),
|
|
20027
|
+
environment: array(string().max(4096)).max(64).optional()
|
|
19912
20028
|
}), TerminalSessionInfoSchema, {
|
|
19913
20029
|
kind: "mutation",
|
|
19914
20030
|
auth: "admin"
|
|
@@ -22690,10 +22806,10 @@ DeviceType.LawnMower, method(object({ deviceId: number().int().nonnegative() }),
|
|
|
22690
22806
|
*
|
|
22691
22807
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
22692
22808
|
* to receive an ordered list of candidate base URLs it should race
|
|
22693
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
22694
|
-
* then public hostname (if a tunnel is
|
|
22695
|
-
* race them with short timeouts and stick with the
|
|
22696
|
-
* session.
|
|
22809
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
22810
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
22811
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
22812
|
+
* winner for the session.
|
|
22697
22813
|
*
|
|
22698
22814
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
22699
22815
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -22848,6 +22964,17 @@ var NotificationEndpointSchema = object({
|
|
|
22848
22964
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
22849
22965
|
resolved: string().nullable()
|
|
22850
22966
|
});
|
|
22967
|
+
/**
|
|
22968
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
22969
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
22970
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
22971
|
+
*/
|
|
22972
|
+
var ViewerEndpointsSchema = object({
|
|
22973
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
22974
|
+
baseUrls: array(string()).readonly(),
|
|
22975
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
22976
|
+
resolved: array(string()).readonly()
|
|
22977
|
+
});
|
|
22851
22978
|
var AllowedAddressesSchema = object({
|
|
22852
22979
|
/**
|
|
22853
22980
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -22856,6 +22983,20 @@ var AllowedAddressesSchema = object({
|
|
|
22856
22983
|
* Network Addresses admin page and persisted by the addon.
|
|
22857
22984
|
*/
|
|
22858
22985
|
addresses: array(string()).readonly() });
|
|
22986
|
+
var TlsStatusSchema = object({
|
|
22987
|
+
mode: _enum([
|
|
22988
|
+
"generated",
|
|
22989
|
+
"uploaded",
|
|
22990
|
+
"disabled"
|
|
22991
|
+
]),
|
|
22992
|
+
leafFingerprintSha256: string().nullable(),
|
|
22993
|
+
caFingerprintSha256: string().nullable(),
|
|
22994
|
+
validTo: string().nullable(),
|
|
22995
|
+
sans: array(string()),
|
|
22996
|
+
caCertPem: string().nullable(),
|
|
22997
|
+
reissueError: string().nullable(),
|
|
22998
|
+
restartRequired: boolean()
|
|
22999
|
+
});
|
|
22859
23000
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
22860
23001
|
/**
|
|
22861
23002
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -22865,17 +23006,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
22865
23006
|
*/
|
|
22866
23007
|
port: number().int().min(1).max(65535).optional(),
|
|
22867
23008
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
22868
|
-
* candidate. Default `
|
|
23009
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
22869
23010
|
includeLoopback: boolean().optional(),
|
|
22870
|
-
/** Skip IPv6 entries.
|
|
22871
|
-
*
|
|
23011
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
23012
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
23013
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
22872
23014
|
ipv4Only: boolean().optional(),
|
|
22873
23015
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
22874
23016
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
22875
23017
|
* to avoid mixed-content blocks in the browser. The public
|
|
22876
23018
|
* tunnel always emits `https://` regardless. */
|
|
22877
23019
|
scheme: _enum(["http", "https"]).optional()
|
|
22878
|
-
}), 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" })
|
|
23020
|
+
}), 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, {
|
|
23021
|
+
kind: "mutation",
|
|
23022
|
+
auth: "admin"
|
|
23023
|
+
}), method(object({
|
|
23024
|
+
certPem: string().min(1),
|
|
23025
|
+
keyPem: string().min(1),
|
|
23026
|
+
caPem: string().optional()
|
|
23027
|
+
}), TlsStatusSchema, {
|
|
23028
|
+
kind: "mutation",
|
|
23029
|
+
auth: "admin"
|
|
23030
|
+
}), method(_void(), object({ pem: string() })), method(_void(), TlsStatusSchema, {
|
|
23031
|
+
kind: "mutation",
|
|
23032
|
+
auth: "admin"
|
|
23033
|
+
});
|
|
22879
23034
|
object({
|
|
22880
23035
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
22881
23036
|
* failure to reach the target — operator intervention required. */
|
|
@@ -28638,6 +28793,12 @@ Object.freeze({
|
|
|
28638
28793
|
addonId: null,
|
|
28639
28794
|
access: "create"
|
|
28640
28795
|
},
|
|
28796
|
+
"localNetwork.downloadCa": {
|
|
28797
|
+
capName: "local-network",
|
|
28798
|
+
capScope: "system",
|
|
28799
|
+
addonId: null,
|
|
28800
|
+
access: "view"
|
|
28801
|
+
},
|
|
28641
28802
|
"localNetwork.getAllowedAddresses": {
|
|
28642
28803
|
capName: "local-network",
|
|
28643
28804
|
capScope: "system",
|
|
@@ -28662,18 +28823,42 @@ Object.freeze({
|
|
|
28662
28823
|
addonId: null,
|
|
28663
28824
|
access: "view"
|
|
28664
28825
|
},
|
|
28826
|
+
"localNetwork.getTlsStatus": {
|
|
28827
|
+
capName: "local-network",
|
|
28828
|
+
capScope: "system",
|
|
28829
|
+
addonId: null,
|
|
28830
|
+
access: "view"
|
|
28831
|
+
},
|
|
28832
|
+
"localNetwork.getViewerEndpoints": {
|
|
28833
|
+
capName: "local-network",
|
|
28834
|
+
capScope: "system",
|
|
28835
|
+
addonId: null,
|
|
28836
|
+
access: "view"
|
|
28837
|
+
},
|
|
28665
28838
|
"localNetwork.list": {
|
|
28666
28839
|
capName: "local-network",
|
|
28667
28840
|
capScope: "system",
|
|
28668
28841
|
addonId: null,
|
|
28669
28842
|
access: "view"
|
|
28670
28843
|
},
|
|
28844
|
+
"localNetwork.regenerateCertificate": {
|
|
28845
|
+
capName: "local-network",
|
|
28846
|
+
capScope: "system",
|
|
28847
|
+
addonId: null,
|
|
28848
|
+
access: "create"
|
|
28849
|
+
},
|
|
28671
28850
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
28672
28851
|
capName: "local-network",
|
|
28673
28852
|
capScope: "system",
|
|
28674
28853
|
addonId: null,
|
|
28675
28854
|
access: "delete"
|
|
28676
28855
|
},
|
|
28856
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
28857
|
+
capName: "local-network",
|
|
28858
|
+
capScope: "system",
|
|
28859
|
+
addonId: null,
|
|
28860
|
+
access: "create"
|
|
28861
|
+
},
|
|
28677
28862
|
"localNetwork.setAllowedAddresses": {
|
|
28678
28863
|
capName: "local-network",
|
|
28679
28864
|
capScope: "system",
|
|
@@ -28686,6 +28871,18 @@ Object.freeze({
|
|
|
28686
28871
|
addonId: null,
|
|
28687
28872
|
access: "create"
|
|
28688
28873
|
},
|
|
28874
|
+
"localNetwork.setViewerEndpoints": {
|
|
28875
|
+
capName: "local-network",
|
|
28876
|
+
capScope: "system",
|
|
28877
|
+
addonId: null,
|
|
28878
|
+
access: "create"
|
|
28879
|
+
},
|
|
28880
|
+
"localNetwork.uploadCertificate": {
|
|
28881
|
+
capName: "local-network",
|
|
28882
|
+
capScope: "system",
|
|
28883
|
+
addonId: null,
|
|
28884
|
+
access: "create"
|
|
28885
|
+
},
|
|
28689
28886
|
"lockControl.lock": {
|
|
28690
28887
|
capName: "lock-control",
|
|
28691
28888
|
capScope: "device",
|
|
@@ -31566,6 +31763,12 @@ Object.freeze({
|
|
|
31566
31763
|
addonId: null,
|
|
31567
31764
|
access: "create"
|
|
31568
31765
|
},
|
|
31766
|
+
"terminalSession.updateInstance": {
|
|
31767
|
+
capName: "terminal-session",
|
|
31768
|
+
capScope: "system",
|
|
31769
|
+
addonId: null,
|
|
31770
|
+
access: "create"
|
|
31771
|
+
},
|
|
31569
31772
|
"terminalSession.writeInput": {
|
|
31570
31773
|
capName: "terminal-session",
|
|
31571
31774
|
capScope: "system",
|
|
@@ -34053,6 +34256,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
34053
34256
|
}]
|
|
34054
34257
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
34055
34258
|
string().min(1);
|
|
34259
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
34260
|
+
stepId: "face-embedding",
|
|
34261
|
+
key: "minLandmarkFaceSize",
|
|
34262
|
+
label: "Min face size for recognition (detection px)",
|
|
34263
|
+
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.",
|
|
34264
|
+
type: "slider",
|
|
34265
|
+
min: 0,
|
|
34266
|
+
max: 64,
|
|
34267
|
+
step: 2,
|
|
34268
|
+
default: 24
|
|
34269
|
+
}];
|
|
34270
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
34271
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
34272
|
+
}
|
|
34273
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
34274
|
+
function readClusterStepSettings(config) {
|
|
34275
|
+
const out = {};
|
|
34276
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
34277
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
34278
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
34279
|
+
const existing = out[field.stepId] ?? {};
|
|
34280
|
+
out[field.stepId] = {
|
|
34281
|
+
...existing,
|
|
34282
|
+
[field.key]: value
|
|
34283
|
+
};
|
|
34284
|
+
}
|
|
34285
|
+
return out;
|
|
34286
|
+
}
|
|
34287
|
+
readClusterStepSettings({});
|
|
34056
34288
|
object({
|
|
34057
34289
|
/**
|
|
34058
34290
|
* Fraction of the box's own size added on EACH side before cutting.
|
|
@@ -8215,6 +8215,15 @@ var LabelDefinitionSchema = object({
|
|
|
8215
8215
|
description: string().optional(),
|
|
8216
8216
|
icon: string().optional()
|
|
8217
8217
|
});
|
|
8218
|
+
var ClassMapDefinitionSchema = object({
|
|
8219
|
+
mapping: record(string(), _enum([
|
|
8220
|
+
"person",
|
|
8221
|
+
"vehicle",
|
|
8222
|
+
"animal",
|
|
8223
|
+
"package"
|
|
8224
|
+
])),
|
|
8225
|
+
preserveOriginal: boolean()
|
|
8226
|
+
});
|
|
8218
8227
|
var MODEL_FORMATS = [
|
|
8219
8228
|
"onnx",
|
|
8220
8229
|
"coreml",
|
|
@@ -8393,7 +8402,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8393
8402
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8394
8403
|
* is a presentation overlay resolved back to an `id`.
|
|
8395
8404
|
*/
|
|
8396
|
-
group: ModelVariantGroupSchema.optional()
|
|
8405
|
+
group: ModelVariantGroupSchema.optional(),
|
|
8406
|
+
/**
|
|
8407
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
8408
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8409
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8410
|
+
*/
|
|
8411
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8397
8412
|
});
|
|
8398
8413
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8399
8414
|
format: literal("openvino"),
|
|
@@ -8422,7 +8437,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8422
8437
|
"ocr",
|
|
8423
8438
|
"segmentation"
|
|
8424
8439
|
]),
|
|
8425
|
-
faceAlignment: boolean().optional()
|
|
8440
|
+
faceAlignment: boolean().optional(),
|
|
8441
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8426
8442
|
});
|
|
8427
8443
|
var ConvertResultSchema = object({
|
|
8428
8444
|
entry: ModelCatalogEntrySchema,
|
|
@@ -17492,6 +17508,33 @@ var NativeCropRefSchema = object({
|
|
|
17492
17508
|
h: number()
|
|
17493
17509
|
})
|
|
17494
17510
|
});
|
|
17511
|
+
object({
|
|
17512
|
+
crop: object({
|
|
17513
|
+
left: number(),
|
|
17514
|
+
top: number(),
|
|
17515
|
+
width: number().positive(),
|
|
17516
|
+
height: number().positive()
|
|
17517
|
+
}).optional(),
|
|
17518
|
+
content: object({
|
|
17519
|
+
width: number().int().positive(),
|
|
17520
|
+
height: number().int().positive()
|
|
17521
|
+
}),
|
|
17522
|
+
fit: _enum(["stretch", "contain"]),
|
|
17523
|
+
format: _enum([
|
|
17524
|
+
"rgb",
|
|
17525
|
+
"gray",
|
|
17526
|
+
"jpeg"
|
|
17527
|
+
])
|
|
17528
|
+
});
|
|
17529
|
+
var FrameRefSchema = object({
|
|
17530
|
+
registryId: string().min(1),
|
|
17531
|
+
id: string().min(1),
|
|
17532
|
+
width: number().int().positive(),
|
|
17533
|
+
height: number().int().positive(),
|
|
17534
|
+
format: _enum(["rgb", "gray"]),
|
|
17535
|
+
timestamp: number(),
|
|
17536
|
+
capturedAt: number().optional()
|
|
17537
|
+
});
|
|
17495
17538
|
var ModelFormatSchema$1 = _enum([
|
|
17496
17539
|
"onnx",
|
|
17497
17540
|
"coreml",
|
|
@@ -17736,6 +17779,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
17736
17779
|
steps: array(PipelineStepInputSchema).min(1),
|
|
17737
17780
|
frame: FrameInputSchema.optional(),
|
|
17738
17781
|
/**
|
|
17782
|
+
* Process-local lazy frame. Valid only when caller and provider resolve
|
|
17783
|
+
* in the same execution-group process; split/cross-node callers use
|
|
17784
|
+
* `frame`/`image` inline compatibility instead.
|
|
17785
|
+
*/
|
|
17786
|
+
frameRef: FrameRefSchema.optional(),
|
|
17787
|
+
/**
|
|
17739
17788
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
17740
17789
|
* the decoded pixels live in. One more member of the one-of
|
|
17741
17790
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -17991,7 +18040,10 @@ var NativeCropResultSchema = object({
|
|
|
17991
18040
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
17992
18041
|
* `keyFrame`) can reject a degraded fallback:
|
|
17993
18042
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
17994
|
-
* quality path).
|
|
18043
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
18044
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
18045
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
18046
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
17995
18047
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
17996
18048
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
17997
18049
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18482,12 +18534,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18482
18534
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18483
18535
|
* working unchanged when they switch to reading from the runner cap.
|
|
18484
18536
|
*/
|
|
18537
|
+
var FrameLazyCountersSchema = object({
|
|
18538
|
+
framesDecoded: number(),
|
|
18539
|
+
framesAdmitted: number(),
|
|
18540
|
+
framesDroppedPixelFree: number(),
|
|
18541
|
+
viewsMaterialized: number(),
|
|
18542
|
+
viewsSkipped: number(),
|
|
18543
|
+
workerToRunnerBytes: number(),
|
|
18544
|
+
runnerToPoolRawBytes: number(),
|
|
18545
|
+
runnerToPoolJpegBytes: number(),
|
|
18546
|
+
onDemandFullFrameRequests: number(),
|
|
18547
|
+
onDemandCropRequests: number(),
|
|
18548
|
+
nativeHits: number(),
|
|
18549
|
+
nativeMisses: number(),
|
|
18550
|
+
tileHits: number(),
|
|
18551
|
+
tileMisses: number(),
|
|
18552
|
+
fallbackHits: number(),
|
|
18553
|
+
fallbackMisses: number(),
|
|
18554
|
+
retainedWritesAvoided: number(),
|
|
18555
|
+
residentRefs: number(),
|
|
18556
|
+
residentBytes: number(),
|
|
18557
|
+
releases: number(),
|
|
18558
|
+
evictions: number(),
|
|
18559
|
+
staleMisses: number()
|
|
18560
|
+
});
|
|
18561
|
+
var FrameLazyMetricsSchema = object({
|
|
18562
|
+
node: FrameLazyCountersSchema,
|
|
18563
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
18564
|
+
});
|
|
18485
18565
|
var RunnerLocalMetricsSchema = object({
|
|
18486
18566
|
nodeId: string(),
|
|
18487
18567
|
activeCameras: number(),
|
|
18488
18568
|
throttledCameras: number(),
|
|
18489
18569
|
avgInferenceTimeMs: number(),
|
|
18490
|
-
queueDepth: number()
|
|
18570
|
+
queueDepth: number(),
|
|
18571
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18491
18572
|
});
|
|
18492
18573
|
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({
|
|
18493
18574
|
handle: FrameHandleSchema,
|
|
@@ -19787,6 +19868,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
19787
19868
|
location: StorageLocationSchema,
|
|
19788
19869
|
relativePath: string()
|
|
19789
19870
|
}), _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" });
|
|
19871
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
19872
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
19873
|
+
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
19790
19874
|
/**
|
|
19791
19875
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
19792
19876
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -19816,7 +19900,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
19816
19900
|
var TerminalProfileInfoSchema = object({
|
|
19817
19901
|
profileId: string(),
|
|
19818
19902
|
label: string(),
|
|
19819
|
-
description: string().optional()
|
|
19903
|
+
description: string().optional(),
|
|
19904
|
+
/** Spawn defaults the instance form copies on create. */
|
|
19905
|
+
executable: string().optional(),
|
|
19906
|
+
args: array(string()).readonly().optional(),
|
|
19907
|
+
cwd: string().optional(),
|
|
19908
|
+
environment: array(string()).readonly().optional(),
|
|
19909
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
19910
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
19820
19911
|
});
|
|
19821
19912
|
/**
|
|
19822
19913
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -19829,7 +19920,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
19829
19920
|
profileId: string(),
|
|
19830
19921
|
profileLabel: string(),
|
|
19831
19922
|
name: string(),
|
|
19832
|
-
enabled: boolean()
|
|
19923
|
+
enabled: boolean(),
|
|
19924
|
+
executable: string(),
|
|
19925
|
+
args: array(string()).readonly(),
|
|
19926
|
+
cwd: string(),
|
|
19927
|
+
environment: array(string()).readonly(),
|
|
19928
|
+
profileSettings: ProfileSettingsBagSchema
|
|
19833
19929
|
});
|
|
19834
19930
|
var TerminalLegacyCameraSchema = object({
|
|
19835
19931
|
stableId: string(),
|
|
@@ -19859,7 +19955,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
19859
19955
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19860
19956
|
targetNodeId: string().min(1),
|
|
19861
19957
|
profileId: string().min(1),
|
|
19862
|
-
name: string().trim().min(1).max(160).optional()
|
|
19958
|
+
name: string().trim().min(1).max(160).optional(),
|
|
19959
|
+
executable: string().max(1024).optional(),
|
|
19960
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
19961
|
+
cwd: string().max(1024).optional(),
|
|
19962
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
19963
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
19964
|
+
}), TerminalInstanceInfoSchema, {
|
|
19965
|
+
kind: "mutation",
|
|
19966
|
+
auth: "admin"
|
|
19967
|
+
}), method(object({
|
|
19968
|
+
instanceId: string().min(1),
|
|
19969
|
+
name: string().trim().min(1).max(160).optional(),
|
|
19970
|
+
executable: string().max(1024).optional(),
|
|
19971
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
19972
|
+
cwd: string().max(1024).optional(),
|
|
19973
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
19974
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
19863
19975
|
}), TerminalInstanceInfoSchema, {
|
|
19864
19976
|
kind: "mutation",
|
|
19865
19977
|
auth: "admin"
|
|
@@ -19881,7 +19993,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
19881
19993
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19882
19994
|
profileId: string(),
|
|
19883
19995
|
cols: number().int().positive(),
|
|
19884
|
-
rows: number().int().positive()
|
|
19996
|
+
rows: number().int().positive(),
|
|
19997
|
+
executable: string().max(1024).optional(),
|
|
19998
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
19999
|
+
cwd: string().max(1024).optional(),
|
|
20000
|
+
environment: array(string().max(4096)).max(64).optional()
|
|
19885
20001
|
}), TerminalSessionInfoSchema, {
|
|
19886
20002
|
kind: "mutation",
|
|
19887
20003
|
auth: "admin"
|
|
@@ -22663,10 +22779,10 @@ DeviceType.LawnMower, method(object({ deviceId: number().int().nonnegative() }),
|
|
|
22663
22779
|
*
|
|
22664
22780
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
22665
22781
|
* to receive an ordered list of candidate base URLs it should race
|
|
22666
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
22667
|
-
* then public hostname (if a tunnel is
|
|
22668
|
-
* race them with short timeouts and stick with the
|
|
22669
|
-
* session.
|
|
22782
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
22783
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
22784
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
22785
|
+
* winner for the session.
|
|
22670
22786
|
*
|
|
22671
22787
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
22672
22788
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -22821,6 +22937,17 @@ var NotificationEndpointSchema = object({
|
|
|
22821
22937
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
22822
22938
|
resolved: string().nullable()
|
|
22823
22939
|
});
|
|
22940
|
+
/**
|
|
22941
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
22942
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
22943
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
22944
|
+
*/
|
|
22945
|
+
var ViewerEndpointsSchema = object({
|
|
22946
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
22947
|
+
baseUrls: array(string()).readonly(),
|
|
22948
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
22949
|
+
resolved: array(string()).readonly()
|
|
22950
|
+
});
|
|
22824
22951
|
var AllowedAddressesSchema = object({
|
|
22825
22952
|
/**
|
|
22826
22953
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -22829,6 +22956,20 @@ var AllowedAddressesSchema = object({
|
|
|
22829
22956
|
* Network Addresses admin page and persisted by the addon.
|
|
22830
22957
|
*/
|
|
22831
22958
|
addresses: array(string()).readonly() });
|
|
22959
|
+
var TlsStatusSchema = object({
|
|
22960
|
+
mode: _enum([
|
|
22961
|
+
"generated",
|
|
22962
|
+
"uploaded",
|
|
22963
|
+
"disabled"
|
|
22964
|
+
]),
|
|
22965
|
+
leafFingerprintSha256: string().nullable(),
|
|
22966
|
+
caFingerprintSha256: string().nullable(),
|
|
22967
|
+
validTo: string().nullable(),
|
|
22968
|
+
sans: array(string()),
|
|
22969
|
+
caCertPem: string().nullable(),
|
|
22970
|
+
reissueError: string().nullable(),
|
|
22971
|
+
restartRequired: boolean()
|
|
22972
|
+
});
|
|
22832
22973
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
22833
22974
|
/**
|
|
22834
22975
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -22838,17 +22979,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
22838
22979
|
*/
|
|
22839
22980
|
port: number().int().min(1).max(65535).optional(),
|
|
22840
22981
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
22841
|
-
* candidate. Default `
|
|
22982
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
22842
22983
|
includeLoopback: boolean().optional(),
|
|
22843
|
-
/** Skip IPv6 entries.
|
|
22844
|
-
*
|
|
22984
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
22985
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
22986
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
22845
22987
|
ipv4Only: boolean().optional(),
|
|
22846
22988
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
22847
22989
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
22848
22990
|
* to avoid mixed-content blocks in the browser. The public
|
|
22849
22991
|
* tunnel always emits `https://` regardless. */
|
|
22850
22992
|
scheme: _enum(["http", "https"]).optional()
|
|
22851
|
-
}), 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" })
|
|
22993
|
+
}), 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, {
|
|
22994
|
+
kind: "mutation",
|
|
22995
|
+
auth: "admin"
|
|
22996
|
+
}), method(object({
|
|
22997
|
+
certPem: string().min(1),
|
|
22998
|
+
keyPem: string().min(1),
|
|
22999
|
+
caPem: string().optional()
|
|
23000
|
+
}), TlsStatusSchema, {
|
|
23001
|
+
kind: "mutation",
|
|
23002
|
+
auth: "admin"
|
|
23003
|
+
}), method(_void(), object({ pem: string() })), method(_void(), TlsStatusSchema, {
|
|
23004
|
+
kind: "mutation",
|
|
23005
|
+
auth: "admin"
|
|
23006
|
+
});
|
|
22852
23007
|
object({
|
|
22853
23008
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
22854
23009
|
* failure to reach the target — operator intervention required. */
|
|
@@ -28611,6 +28766,12 @@ Object.freeze({
|
|
|
28611
28766
|
addonId: null,
|
|
28612
28767
|
access: "create"
|
|
28613
28768
|
},
|
|
28769
|
+
"localNetwork.downloadCa": {
|
|
28770
|
+
capName: "local-network",
|
|
28771
|
+
capScope: "system",
|
|
28772
|
+
addonId: null,
|
|
28773
|
+
access: "view"
|
|
28774
|
+
},
|
|
28614
28775
|
"localNetwork.getAllowedAddresses": {
|
|
28615
28776
|
capName: "local-network",
|
|
28616
28777
|
capScope: "system",
|
|
@@ -28635,18 +28796,42 @@ Object.freeze({
|
|
|
28635
28796
|
addonId: null,
|
|
28636
28797
|
access: "view"
|
|
28637
28798
|
},
|
|
28799
|
+
"localNetwork.getTlsStatus": {
|
|
28800
|
+
capName: "local-network",
|
|
28801
|
+
capScope: "system",
|
|
28802
|
+
addonId: null,
|
|
28803
|
+
access: "view"
|
|
28804
|
+
},
|
|
28805
|
+
"localNetwork.getViewerEndpoints": {
|
|
28806
|
+
capName: "local-network",
|
|
28807
|
+
capScope: "system",
|
|
28808
|
+
addonId: null,
|
|
28809
|
+
access: "view"
|
|
28810
|
+
},
|
|
28638
28811
|
"localNetwork.list": {
|
|
28639
28812
|
capName: "local-network",
|
|
28640
28813
|
capScope: "system",
|
|
28641
28814
|
addonId: null,
|
|
28642
28815
|
access: "view"
|
|
28643
28816
|
},
|
|
28817
|
+
"localNetwork.regenerateCertificate": {
|
|
28818
|
+
capName: "local-network",
|
|
28819
|
+
capScope: "system",
|
|
28820
|
+
addonId: null,
|
|
28821
|
+
access: "create"
|
|
28822
|
+
},
|
|
28644
28823
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
28645
28824
|
capName: "local-network",
|
|
28646
28825
|
capScope: "system",
|
|
28647
28826
|
addonId: null,
|
|
28648
28827
|
access: "delete"
|
|
28649
28828
|
},
|
|
28829
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
28830
|
+
capName: "local-network",
|
|
28831
|
+
capScope: "system",
|
|
28832
|
+
addonId: null,
|
|
28833
|
+
access: "create"
|
|
28834
|
+
},
|
|
28650
28835
|
"localNetwork.setAllowedAddresses": {
|
|
28651
28836
|
capName: "local-network",
|
|
28652
28837
|
capScope: "system",
|
|
@@ -28659,6 +28844,18 @@ Object.freeze({
|
|
|
28659
28844
|
addonId: null,
|
|
28660
28845
|
access: "create"
|
|
28661
28846
|
},
|
|
28847
|
+
"localNetwork.setViewerEndpoints": {
|
|
28848
|
+
capName: "local-network",
|
|
28849
|
+
capScope: "system",
|
|
28850
|
+
addonId: null,
|
|
28851
|
+
access: "create"
|
|
28852
|
+
},
|
|
28853
|
+
"localNetwork.uploadCertificate": {
|
|
28854
|
+
capName: "local-network",
|
|
28855
|
+
capScope: "system",
|
|
28856
|
+
addonId: null,
|
|
28857
|
+
access: "create"
|
|
28858
|
+
},
|
|
28662
28859
|
"lockControl.lock": {
|
|
28663
28860
|
capName: "lock-control",
|
|
28664
28861
|
capScope: "device",
|
|
@@ -31539,6 +31736,12 @@ Object.freeze({
|
|
|
31539
31736
|
addonId: null,
|
|
31540
31737
|
access: "create"
|
|
31541
31738
|
},
|
|
31739
|
+
"terminalSession.updateInstance": {
|
|
31740
|
+
capName: "terminal-session",
|
|
31741
|
+
capScope: "system",
|
|
31742
|
+
addonId: null,
|
|
31743
|
+
access: "create"
|
|
31744
|
+
},
|
|
31542
31745
|
"terminalSession.writeInput": {
|
|
31543
31746
|
capName: "terminal-session",
|
|
31544
31747
|
capScope: "system",
|
|
@@ -34026,6 +34229,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
34026
34229
|
}]
|
|
34027
34230
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
34028
34231
|
string().min(1);
|
|
34232
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
34233
|
+
stepId: "face-embedding",
|
|
34234
|
+
key: "minLandmarkFaceSize",
|
|
34235
|
+
label: "Min face size for recognition (detection px)",
|
|
34236
|
+
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.",
|
|
34237
|
+
type: "slider",
|
|
34238
|
+
min: 0,
|
|
34239
|
+
max: 64,
|
|
34240
|
+
step: 2,
|
|
34241
|
+
default: 24
|
|
34242
|
+
}];
|
|
34243
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
34244
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
34245
|
+
}
|
|
34246
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
34247
|
+
function readClusterStepSettings(config) {
|
|
34248
|
+
const out = {};
|
|
34249
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
34250
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
34251
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
34252
|
+
const existing = out[field.stepId] ?? {};
|
|
34253
|
+
out[field.stepId] = {
|
|
34254
|
+
...existing,
|
|
34255
|
+
[field.key]: value
|
|
34256
|
+
};
|
|
34257
|
+
}
|
|
34258
|
+
return out;
|
|
34259
|
+
}
|
|
34260
|
+
readClusterStepSettings({});
|
|
34029
34261
|
object({
|
|
34030
34262
|
/**
|
|
34031
34263
|
* Fraction of the box's own size added on EACH side before cutting.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-export-alexa",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.33",
|
|
4
4
|
"description": "Alexa Smart Home Skill export — hub-side OAuth provider + directive handler. The companion AWS Lambda forwards Alexa directives to this addon's /addon/export-alexa/directive endpoint.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|