@camstack/addon-provider-petkit 0.2.26 → 0.2.27
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
|
@@ -9122,6 +9122,15 @@ var LabelDefinitionSchema = object({
|
|
|
9122
9122
|
description: string().optional(),
|
|
9123
9123
|
icon: string().optional()
|
|
9124
9124
|
});
|
|
9125
|
+
var ClassMapDefinitionSchema = object({
|
|
9126
|
+
mapping: record(string(), _enum([
|
|
9127
|
+
"person",
|
|
9128
|
+
"vehicle",
|
|
9129
|
+
"animal",
|
|
9130
|
+
"package"
|
|
9131
|
+
])),
|
|
9132
|
+
preserveOriginal: boolean()
|
|
9133
|
+
});
|
|
9125
9134
|
var MODEL_FORMATS = [
|
|
9126
9135
|
"onnx",
|
|
9127
9136
|
"coreml",
|
|
@@ -9300,7 +9309,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
9300
9309
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
9301
9310
|
* is a presentation overlay resolved back to an `id`.
|
|
9302
9311
|
*/
|
|
9303
|
-
group: ModelVariantGroupSchema.optional()
|
|
9312
|
+
group: ModelVariantGroupSchema.optional(),
|
|
9313
|
+
/**
|
|
9314
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
9315
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
9316
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
9317
|
+
*/
|
|
9318
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
9304
9319
|
});
|
|
9305
9320
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
9306
9321
|
format: literal("openvino"),
|
|
@@ -9329,7 +9344,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
9329
9344
|
"ocr",
|
|
9330
9345
|
"segmentation"
|
|
9331
9346
|
]),
|
|
9332
|
-
faceAlignment: boolean().optional()
|
|
9347
|
+
faceAlignment: boolean().optional(),
|
|
9348
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
9333
9349
|
});
|
|
9334
9350
|
var ConvertResultSchema = object({
|
|
9335
9351
|
entry: ModelCatalogEntrySchema,
|
|
@@ -18639,6 +18655,33 @@ var NativeCropRefSchema = object({
|
|
|
18639
18655
|
h: number()
|
|
18640
18656
|
})
|
|
18641
18657
|
});
|
|
18658
|
+
object({
|
|
18659
|
+
crop: object({
|
|
18660
|
+
left: number(),
|
|
18661
|
+
top: number(),
|
|
18662
|
+
width: number().positive(),
|
|
18663
|
+
height: number().positive()
|
|
18664
|
+
}).optional(),
|
|
18665
|
+
content: object({
|
|
18666
|
+
width: number().int().positive(),
|
|
18667
|
+
height: number().int().positive()
|
|
18668
|
+
}),
|
|
18669
|
+
fit: _enum(["stretch", "contain"]),
|
|
18670
|
+
format: _enum([
|
|
18671
|
+
"rgb",
|
|
18672
|
+
"gray",
|
|
18673
|
+
"jpeg"
|
|
18674
|
+
])
|
|
18675
|
+
});
|
|
18676
|
+
var FrameRefSchema = object({
|
|
18677
|
+
registryId: string().min(1),
|
|
18678
|
+
id: string().min(1),
|
|
18679
|
+
width: number().int().positive(),
|
|
18680
|
+
height: number().int().positive(),
|
|
18681
|
+
format: _enum(["rgb", "gray"]),
|
|
18682
|
+
timestamp: number(),
|
|
18683
|
+
capturedAt: number().optional()
|
|
18684
|
+
});
|
|
18642
18685
|
var ModelFormatSchema$1 = _enum([
|
|
18643
18686
|
"onnx",
|
|
18644
18687
|
"coreml",
|
|
@@ -18883,6 +18926,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
18883
18926
|
steps: array(PipelineStepInputSchema).min(1),
|
|
18884
18927
|
frame: FrameInputSchema.optional(),
|
|
18885
18928
|
/**
|
|
18929
|
+
* Process-local lazy frame. Valid only when caller and provider resolve
|
|
18930
|
+
* in the same execution-group process; split/cross-node callers use
|
|
18931
|
+
* `frame`/`image` inline compatibility instead.
|
|
18932
|
+
*/
|
|
18933
|
+
frameRef: FrameRefSchema.optional(),
|
|
18934
|
+
/**
|
|
18886
18935
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
18887
18936
|
* the decoded pixels live in. One more member of the one-of
|
|
18888
18937
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -19178,7 +19227,10 @@ var NativeCropResultSchema = object({
|
|
|
19178
19227
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
19179
19228
|
* `keyFrame`) can reject a degraded fallback:
|
|
19180
19229
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
19181
|
-
* quality path).
|
|
19230
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
19231
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
19232
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
19233
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
19182
19234
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
19183
19235
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
19184
19236
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -19669,12 +19721,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
19669
19721
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
19670
19722
|
* working unchanged when they switch to reading from the runner cap.
|
|
19671
19723
|
*/
|
|
19724
|
+
var FrameLazyCountersSchema = object({
|
|
19725
|
+
framesDecoded: number(),
|
|
19726
|
+
framesAdmitted: number(),
|
|
19727
|
+
framesDroppedPixelFree: number(),
|
|
19728
|
+
viewsMaterialized: number(),
|
|
19729
|
+
viewsSkipped: number(),
|
|
19730
|
+
workerToRunnerBytes: number(),
|
|
19731
|
+
runnerToPoolRawBytes: number(),
|
|
19732
|
+
runnerToPoolJpegBytes: number(),
|
|
19733
|
+
onDemandFullFrameRequests: number(),
|
|
19734
|
+
onDemandCropRequests: number(),
|
|
19735
|
+
nativeHits: number(),
|
|
19736
|
+
nativeMisses: number(),
|
|
19737
|
+
tileHits: number(),
|
|
19738
|
+
tileMisses: number(),
|
|
19739
|
+
fallbackHits: number(),
|
|
19740
|
+
fallbackMisses: number(),
|
|
19741
|
+
retainedWritesAvoided: number(),
|
|
19742
|
+
residentRefs: number(),
|
|
19743
|
+
residentBytes: number(),
|
|
19744
|
+
releases: number(),
|
|
19745
|
+
evictions: number(),
|
|
19746
|
+
staleMisses: number()
|
|
19747
|
+
});
|
|
19748
|
+
var FrameLazyMetricsSchema = object({
|
|
19749
|
+
node: FrameLazyCountersSchema,
|
|
19750
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
19751
|
+
});
|
|
19672
19752
|
var RunnerLocalMetricsSchema = object({
|
|
19673
19753
|
nodeId: string(),
|
|
19674
19754
|
activeCameras: number(),
|
|
19675
19755
|
throttledCameras: number(),
|
|
19676
19756
|
avgInferenceTimeMs: number(),
|
|
19677
|
-
queueDepth: number()
|
|
19757
|
+
queueDepth: number(),
|
|
19758
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
19678
19759
|
});
|
|
19679
19760
|
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({
|
|
19680
19761
|
handle: FrameHandleSchema,
|
|
@@ -20974,6 +21055,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
20974
21055
|
location: StorageLocationSchema,
|
|
20975
21056
|
relativePath: string()
|
|
20976
21057
|
}), _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" });
|
|
21058
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
21059
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
21060
|
+
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
20977
21061
|
/**
|
|
20978
21062
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
20979
21063
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -21003,7 +21087,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
21003
21087
|
var TerminalProfileInfoSchema = object({
|
|
21004
21088
|
profileId: string(),
|
|
21005
21089
|
label: string(),
|
|
21006
|
-
description: string().optional()
|
|
21090
|
+
description: string().optional(),
|
|
21091
|
+
/** Spawn defaults the instance form copies on create. */
|
|
21092
|
+
executable: string().optional(),
|
|
21093
|
+
args: array(string()).readonly().optional(),
|
|
21094
|
+
cwd: string().optional(),
|
|
21095
|
+
environment: array(string()).readonly().optional(),
|
|
21096
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
21097
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
21007
21098
|
});
|
|
21008
21099
|
/**
|
|
21009
21100
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -21016,7 +21107,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
21016
21107
|
profileId: string(),
|
|
21017
21108
|
profileLabel: string(),
|
|
21018
21109
|
name: string(),
|
|
21019
|
-
enabled: boolean()
|
|
21110
|
+
enabled: boolean(),
|
|
21111
|
+
executable: string(),
|
|
21112
|
+
args: array(string()).readonly(),
|
|
21113
|
+
cwd: string(),
|
|
21114
|
+
environment: array(string()).readonly(),
|
|
21115
|
+
profileSettings: ProfileSettingsBagSchema
|
|
21020
21116
|
});
|
|
21021
21117
|
var TerminalLegacyCameraSchema = object({
|
|
21022
21118
|
stableId: string(),
|
|
@@ -21046,7 +21142,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
21046
21142
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
21047
21143
|
targetNodeId: string().min(1),
|
|
21048
21144
|
profileId: string().min(1),
|
|
21049
|
-
name: string().trim().min(1).max(160).optional()
|
|
21145
|
+
name: string().trim().min(1).max(160).optional(),
|
|
21146
|
+
executable: string().max(1024).optional(),
|
|
21147
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
21148
|
+
cwd: string().max(1024).optional(),
|
|
21149
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
21150
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
21151
|
+
}), TerminalInstanceInfoSchema, {
|
|
21152
|
+
kind: "mutation",
|
|
21153
|
+
auth: "admin"
|
|
21154
|
+
}), method(object({
|
|
21155
|
+
instanceId: string().min(1),
|
|
21156
|
+
name: string().trim().min(1).max(160).optional(),
|
|
21157
|
+
executable: string().max(1024).optional(),
|
|
21158
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
21159
|
+
cwd: string().max(1024).optional(),
|
|
21160
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
21161
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
21050
21162
|
}), TerminalInstanceInfoSchema, {
|
|
21051
21163
|
kind: "mutation",
|
|
21052
21164
|
auth: "admin"
|
|
@@ -21068,7 +21180,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
21068
21180
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
21069
21181
|
profileId: string(),
|
|
21070
21182
|
cols: number().int().positive(),
|
|
21071
|
-
rows: number().int().positive()
|
|
21183
|
+
rows: number().int().positive(),
|
|
21184
|
+
executable: string().max(1024).optional(),
|
|
21185
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
21186
|
+
cwd: string().max(1024).optional(),
|
|
21187
|
+
environment: array(string().max(4096)).max(64).optional()
|
|
21072
21188
|
}), TerminalSessionInfoSchema, {
|
|
21073
21189
|
kind: "mutation",
|
|
21074
21190
|
auth: "admin"
|
|
@@ -24951,10 +25067,10 @@ var lawnMowerControlCapability = {
|
|
|
24951
25067
|
*
|
|
24952
25068
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
24953
25069
|
* to receive an ordered list of candidate base URLs it should race
|
|
24954
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
24955
|
-
* then public hostname (if a tunnel is
|
|
24956
|
-
* race them with short timeouts and stick with the
|
|
24957
|
-
* session.
|
|
25070
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
25071
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
25072
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
25073
|
+
* winner for the session.
|
|
24958
25074
|
*
|
|
24959
25075
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
24960
25076
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -25109,6 +25225,17 @@ var NotificationEndpointSchema = object({
|
|
|
25109
25225
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
25110
25226
|
resolved: string().nullable()
|
|
25111
25227
|
});
|
|
25228
|
+
/**
|
|
25229
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
25230
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
25231
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
25232
|
+
*/
|
|
25233
|
+
var ViewerEndpointsSchema = object({
|
|
25234
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
25235
|
+
baseUrls: array(string()).readonly(),
|
|
25236
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
25237
|
+
resolved: array(string()).readonly()
|
|
25238
|
+
});
|
|
25112
25239
|
var AllowedAddressesSchema = object({
|
|
25113
25240
|
/**
|
|
25114
25241
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -25117,6 +25244,20 @@ var AllowedAddressesSchema = object({
|
|
|
25117
25244
|
* Network Addresses admin page and persisted by the addon.
|
|
25118
25245
|
*/
|
|
25119
25246
|
addresses: array(string()).readonly() });
|
|
25247
|
+
var TlsStatusSchema = object({
|
|
25248
|
+
mode: _enum([
|
|
25249
|
+
"generated",
|
|
25250
|
+
"uploaded",
|
|
25251
|
+
"disabled"
|
|
25252
|
+
]),
|
|
25253
|
+
leafFingerprintSha256: string().nullable(),
|
|
25254
|
+
caFingerprintSha256: string().nullable(),
|
|
25255
|
+
validTo: string().nullable(),
|
|
25256
|
+
sans: array(string()),
|
|
25257
|
+
caCertPem: string().nullable(),
|
|
25258
|
+
reissueError: string().nullable(),
|
|
25259
|
+
restartRequired: boolean()
|
|
25260
|
+
});
|
|
25120
25261
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
25121
25262
|
/**
|
|
25122
25263
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -25126,17 +25267,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
25126
25267
|
*/
|
|
25127
25268
|
port: number().int().min(1).max(65535).optional(),
|
|
25128
25269
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
25129
|
-
* candidate. Default `
|
|
25270
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
25130
25271
|
includeLoopback: boolean().optional(),
|
|
25131
|
-
/** Skip IPv6 entries.
|
|
25132
|
-
*
|
|
25272
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
25273
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
25274
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
25133
25275
|
ipv4Only: boolean().optional(),
|
|
25134
25276
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
25135
25277
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
25136
25278
|
* to avoid mixed-content blocks in the browser. The public
|
|
25137
25279
|
* tunnel always emits `https://` regardless. */
|
|
25138
25280
|
scheme: _enum(["http", "https"]).optional()
|
|
25139
|
-
}), 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" })
|
|
25281
|
+
}), 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, {
|
|
25282
|
+
kind: "mutation",
|
|
25283
|
+
auth: "admin"
|
|
25284
|
+
}), method(object({
|
|
25285
|
+
certPem: string().min(1),
|
|
25286
|
+
keyPem: string().min(1),
|
|
25287
|
+
caPem: string().optional()
|
|
25288
|
+
}), TlsStatusSchema, {
|
|
25289
|
+
kind: "mutation",
|
|
25290
|
+
auth: "admin"
|
|
25291
|
+
}), method(_void(), object({ pem: string() })), method(_void(), TlsStatusSchema, {
|
|
25292
|
+
kind: "mutation",
|
|
25293
|
+
auth: "admin"
|
|
25294
|
+
});
|
|
25140
25295
|
var LockControlStatusSchema = object({
|
|
25141
25296
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
25142
25297
|
* failure to reach the target — operator intervention required. */
|
|
@@ -33163,6 +33318,12 @@ Object.freeze({
|
|
|
33163
33318
|
addonId: null,
|
|
33164
33319
|
access: "create"
|
|
33165
33320
|
},
|
|
33321
|
+
"localNetwork.downloadCa": {
|
|
33322
|
+
capName: "local-network",
|
|
33323
|
+
capScope: "system",
|
|
33324
|
+
addonId: null,
|
|
33325
|
+
access: "view"
|
|
33326
|
+
},
|
|
33166
33327
|
"localNetwork.getAllowedAddresses": {
|
|
33167
33328
|
capName: "local-network",
|
|
33168
33329
|
capScope: "system",
|
|
@@ -33187,18 +33348,42 @@ Object.freeze({
|
|
|
33187
33348
|
addonId: null,
|
|
33188
33349
|
access: "view"
|
|
33189
33350
|
},
|
|
33351
|
+
"localNetwork.getTlsStatus": {
|
|
33352
|
+
capName: "local-network",
|
|
33353
|
+
capScope: "system",
|
|
33354
|
+
addonId: null,
|
|
33355
|
+
access: "view"
|
|
33356
|
+
},
|
|
33357
|
+
"localNetwork.getViewerEndpoints": {
|
|
33358
|
+
capName: "local-network",
|
|
33359
|
+
capScope: "system",
|
|
33360
|
+
addonId: null,
|
|
33361
|
+
access: "view"
|
|
33362
|
+
},
|
|
33190
33363
|
"localNetwork.list": {
|
|
33191
33364
|
capName: "local-network",
|
|
33192
33365
|
capScope: "system",
|
|
33193
33366
|
addonId: null,
|
|
33194
33367
|
access: "view"
|
|
33195
33368
|
},
|
|
33369
|
+
"localNetwork.regenerateCertificate": {
|
|
33370
|
+
capName: "local-network",
|
|
33371
|
+
capScope: "system",
|
|
33372
|
+
addonId: null,
|
|
33373
|
+
access: "create"
|
|
33374
|
+
},
|
|
33196
33375
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
33197
33376
|
capName: "local-network",
|
|
33198
33377
|
capScope: "system",
|
|
33199
33378
|
addonId: null,
|
|
33200
33379
|
access: "delete"
|
|
33201
33380
|
},
|
|
33381
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
33382
|
+
capName: "local-network",
|
|
33383
|
+
capScope: "system",
|
|
33384
|
+
addonId: null,
|
|
33385
|
+
access: "create"
|
|
33386
|
+
},
|
|
33202
33387
|
"localNetwork.setAllowedAddresses": {
|
|
33203
33388
|
capName: "local-network",
|
|
33204
33389
|
capScope: "system",
|
|
@@ -33211,6 +33396,18 @@ Object.freeze({
|
|
|
33211
33396
|
addonId: null,
|
|
33212
33397
|
access: "create"
|
|
33213
33398
|
},
|
|
33399
|
+
"localNetwork.setViewerEndpoints": {
|
|
33400
|
+
capName: "local-network",
|
|
33401
|
+
capScope: "system",
|
|
33402
|
+
addonId: null,
|
|
33403
|
+
access: "create"
|
|
33404
|
+
},
|
|
33405
|
+
"localNetwork.uploadCertificate": {
|
|
33406
|
+
capName: "local-network",
|
|
33407
|
+
capScope: "system",
|
|
33408
|
+
addonId: null,
|
|
33409
|
+
access: "create"
|
|
33410
|
+
},
|
|
33214
33411
|
"lockControl.lock": {
|
|
33215
33412
|
capName: "lock-control",
|
|
33216
33413
|
capScope: "device",
|
|
@@ -36091,6 +36288,12 @@ Object.freeze({
|
|
|
36091
36288
|
addonId: null,
|
|
36092
36289
|
access: "create"
|
|
36093
36290
|
},
|
|
36291
|
+
"terminalSession.updateInstance": {
|
|
36292
|
+
capName: "terminal-session",
|
|
36293
|
+
capScope: "system",
|
|
36294
|
+
addonId: null,
|
|
36295
|
+
access: "create"
|
|
36296
|
+
},
|
|
36094
36297
|
"terminalSession.writeInput": {
|
|
36095
36298
|
capName: "terminal-session",
|
|
36096
36299
|
capScope: "system",
|
|
@@ -38578,6 +38781,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
38578
38781
|
}]
|
|
38579
38782
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
38580
38783
|
string().min(1);
|
|
38784
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
38785
|
+
stepId: "face-embedding",
|
|
38786
|
+
key: "minLandmarkFaceSize",
|
|
38787
|
+
label: "Min face size for recognition (detection px)",
|
|
38788
|
+
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.",
|
|
38789
|
+
type: "slider",
|
|
38790
|
+
min: 0,
|
|
38791
|
+
max: 64,
|
|
38792
|
+
step: 2,
|
|
38793
|
+
default: 24
|
|
38794
|
+
}];
|
|
38795
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
38796
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
38797
|
+
}
|
|
38798
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
38799
|
+
function readClusterStepSettings(config) {
|
|
38800
|
+
const out = {};
|
|
38801
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
38802
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
38803
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
38804
|
+
const existing = out[field.stepId] ?? {};
|
|
38805
|
+
out[field.stepId] = {
|
|
38806
|
+
...existing,
|
|
38807
|
+
[field.key]: value
|
|
38808
|
+
};
|
|
38809
|
+
}
|
|
38810
|
+
return out;
|
|
38811
|
+
}
|
|
38812
|
+
readClusterStepSettings({});
|
|
38581
38813
|
object({
|
|
38582
38814
|
/**
|
|
38583
38815
|
* Fraction of the box's own size added on EACH side before cutting.
|
package/dist/addon.mjs
CHANGED
|
@@ -9121,6 +9121,15 @@ var LabelDefinitionSchema = object({
|
|
|
9121
9121
|
description: string().optional(),
|
|
9122
9122
|
icon: string().optional()
|
|
9123
9123
|
});
|
|
9124
|
+
var ClassMapDefinitionSchema = object({
|
|
9125
|
+
mapping: record(string(), _enum([
|
|
9126
|
+
"person",
|
|
9127
|
+
"vehicle",
|
|
9128
|
+
"animal",
|
|
9129
|
+
"package"
|
|
9130
|
+
])),
|
|
9131
|
+
preserveOriginal: boolean()
|
|
9132
|
+
});
|
|
9124
9133
|
var MODEL_FORMATS = [
|
|
9125
9134
|
"onnx",
|
|
9126
9135
|
"coreml",
|
|
@@ -9299,7 +9308,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
9299
9308
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
9300
9309
|
* is a presentation overlay resolved back to an `id`.
|
|
9301
9310
|
*/
|
|
9302
|
-
group: ModelVariantGroupSchema.optional()
|
|
9311
|
+
group: ModelVariantGroupSchema.optional(),
|
|
9312
|
+
/**
|
|
9313
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
9314
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
9315
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
9316
|
+
*/
|
|
9317
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
9303
9318
|
});
|
|
9304
9319
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
9305
9320
|
format: literal("openvino"),
|
|
@@ -9328,7 +9343,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
9328
9343
|
"ocr",
|
|
9329
9344
|
"segmentation"
|
|
9330
9345
|
]),
|
|
9331
|
-
faceAlignment: boolean().optional()
|
|
9346
|
+
faceAlignment: boolean().optional(),
|
|
9347
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
9332
9348
|
});
|
|
9333
9349
|
var ConvertResultSchema = object({
|
|
9334
9350
|
entry: ModelCatalogEntrySchema,
|
|
@@ -18638,6 +18654,33 @@ var NativeCropRefSchema = object({
|
|
|
18638
18654
|
h: number()
|
|
18639
18655
|
})
|
|
18640
18656
|
});
|
|
18657
|
+
object({
|
|
18658
|
+
crop: object({
|
|
18659
|
+
left: number(),
|
|
18660
|
+
top: number(),
|
|
18661
|
+
width: number().positive(),
|
|
18662
|
+
height: number().positive()
|
|
18663
|
+
}).optional(),
|
|
18664
|
+
content: object({
|
|
18665
|
+
width: number().int().positive(),
|
|
18666
|
+
height: number().int().positive()
|
|
18667
|
+
}),
|
|
18668
|
+
fit: _enum(["stretch", "contain"]),
|
|
18669
|
+
format: _enum([
|
|
18670
|
+
"rgb",
|
|
18671
|
+
"gray",
|
|
18672
|
+
"jpeg"
|
|
18673
|
+
])
|
|
18674
|
+
});
|
|
18675
|
+
var FrameRefSchema = object({
|
|
18676
|
+
registryId: string().min(1),
|
|
18677
|
+
id: string().min(1),
|
|
18678
|
+
width: number().int().positive(),
|
|
18679
|
+
height: number().int().positive(),
|
|
18680
|
+
format: _enum(["rgb", "gray"]),
|
|
18681
|
+
timestamp: number(),
|
|
18682
|
+
capturedAt: number().optional()
|
|
18683
|
+
});
|
|
18641
18684
|
var ModelFormatSchema$1 = _enum([
|
|
18642
18685
|
"onnx",
|
|
18643
18686
|
"coreml",
|
|
@@ -18882,6 +18925,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
18882
18925
|
steps: array(PipelineStepInputSchema).min(1),
|
|
18883
18926
|
frame: FrameInputSchema.optional(),
|
|
18884
18927
|
/**
|
|
18928
|
+
* Process-local lazy frame. Valid only when caller and provider resolve
|
|
18929
|
+
* in the same execution-group process; split/cross-node callers use
|
|
18930
|
+
* `frame`/`image` inline compatibility instead.
|
|
18931
|
+
*/
|
|
18932
|
+
frameRef: FrameRefSchema.optional(),
|
|
18933
|
+
/**
|
|
18885
18934
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
18886
18935
|
* the decoded pixels live in. One more member of the one-of
|
|
18887
18936
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -19177,7 +19226,10 @@ var NativeCropResultSchema = object({
|
|
|
19177
19226
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
19178
19227
|
* `keyFrame`) can reject a degraded fallback:
|
|
19179
19228
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
19180
|
-
* quality path).
|
|
19229
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
19230
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
19231
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
19232
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
19181
19233
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
19182
19234
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
19183
19235
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -19668,12 +19720,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
19668
19720
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
19669
19721
|
* working unchanged when they switch to reading from the runner cap.
|
|
19670
19722
|
*/
|
|
19723
|
+
var FrameLazyCountersSchema = object({
|
|
19724
|
+
framesDecoded: number(),
|
|
19725
|
+
framesAdmitted: number(),
|
|
19726
|
+
framesDroppedPixelFree: number(),
|
|
19727
|
+
viewsMaterialized: number(),
|
|
19728
|
+
viewsSkipped: number(),
|
|
19729
|
+
workerToRunnerBytes: number(),
|
|
19730
|
+
runnerToPoolRawBytes: number(),
|
|
19731
|
+
runnerToPoolJpegBytes: number(),
|
|
19732
|
+
onDemandFullFrameRequests: number(),
|
|
19733
|
+
onDemandCropRequests: number(),
|
|
19734
|
+
nativeHits: number(),
|
|
19735
|
+
nativeMisses: number(),
|
|
19736
|
+
tileHits: number(),
|
|
19737
|
+
tileMisses: number(),
|
|
19738
|
+
fallbackHits: number(),
|
|
19739
|
+
fallbackMisses: number(),
|
|
19740
|
+
retainedWritesAvoided: number(),
|
|
19741
|
+
residentRefs: number(),
|
|
19742
|
+
residentBytes: number(),
|
|
19743
|
+
releases: number(),
|
|
19744
|
+
evictions: number(),
|
|
19745
|
+
staleMisses: number()
|
|
19746
|
+
});
|
|
19747
|
+
var FrameLazyMetricsSchema = object({
|
|
19748
|
+
node: FrameLazyCountersSchema,
|
|
19749
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
19750
|
+
});
|
|
19671
19751
|
var RunnerLocalMetricsSchema = object({
|
|
19672
19752
|
nodeId: string(),
|
|
19673
19753
|
activeCameras: number(),
|
|
19674
19754
|
throttledCameras: number(),
|
|
19675
19755
|
avgInferenceTimeMs: number(),
|
|
19676
|
-
queueDepth: number()
|
|
19756
|
+
queueDepth: number(),
|
|
19757
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
19677
19758
|
});
|
|
19678
19759
|
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({
|
|
19679
19760
|
handle: FrameHandleSchema,
|
|
@@ -20973,6 +21054,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
20973
21054
|
location: StorageLocationSchema,
|
|
20974
21055
|
relativePath: string()
|
|
20975
21056
|
}), _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" });
|
|
21057
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
21058
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
21059
|
+
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
20976
21060
|
/**
|
|
20977
21061
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
20978
21062
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -21002,7 +21086,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
21002
21086
|
var TerminalProfileInfoSchema = object({
|
|
21003
21087
|
profileId: string(),
|
|
21004
21088
|
label: string(),
|
|
21005
|
-
description: string().optional()
|
|
21089
|
+
description: string().optional(),
|
|
21090
|
+
/** Spawn defaults the instance form copies on create. */
|
|
21091
|
+
executable: string().optional(),
|
|
21092
|
+
args: array(string()).readonly().optional(),
|
|
21093
|
+
cwd: string().optional(),
|
|
21094
|
+
environment: array(string()).readonly().optional(),
|
|
21095
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
21096
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
21006
21097
|
});
|
|
21007
21098
|
/**
|
|
21008
21099
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -21015,7 +21106,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
21015
21106
|
profileId: string(),
|
|
21016
21107
|
profileLabel: string(),
|
|
21017
21108
|
name: string(),
|
|
21018
|
-
enabled: boolean()
|
|
21109
|
+
enabled: boolean(),
|
|
21110
|
+
executable: string(),
|
|
21111
|
+
args: array(string()).readonly(),
|
|
21112
|
+
cwd: string(),
|
|
21113
|
+
environment: array(string()).readonly(),
|
|
21114
|
+
profileSettings: ProfileSettingsBagSchema
|
|
21019
21115
|
});
|
|
21020
21116
|
var TerminalLegacyCameraSchema = object({
|
|
21021
21117
|
stableId: string(),
|
|
@@ -21045,7 +21141,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
21045
21141
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
21046
21142
|
targetNodeId: string().min(1),
|
|
21047
21143
|
profileId: string().min(1),
|
|
21048
|
-
name: string().trim().min(1).max(160).optional()
|
|
21144
|
+
name: string().trim().min(1).max(160).optional(),
|
|
21145
|
+
executable: string().max(1024).optional(),
|
|
21146
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
21147
|
+
cwd: string().max(1024).optional(),
|
|
21148
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
21149
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
21150
|
+
}), TerminalInstanceInfoSchema, {
|
|
21151
|
+
kind: "mutation",
|
|
21152
|
+
auth: "admin"
|
|
21153
|
+
}), method(object({
|
|
21154
|
+
instanceId: string().min(1),
|
|
21155
|
+
name: string().trim().min(1).max(160).optional(),
|
|
21156
|
+
executable: string().max(1024).optional(),
|
|
21157
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
21158
|
+
cwd: string().max(1024).optional(),
|
|
21159
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
21160
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
21049
21161
|
}), TerminalInstanceInfoSchema, {
|
|
21050
21162
|
kind: "mutation",
|
|
21051
21163
|
auth: "admin"
|
|
@@ -21067,7 +21179,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
21067
21179
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
21068
21180
|
profileId: string(),
|
|
21069
21181
|
cols: number().int().positive(),
|
|
21070
|
-
rows: number().int().positive()
|
|
21182
|
+
rows: number().int().positive(),
|
|
21183
|
+
executable: string().max(1024).optional(),
|
|
21184
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
21185
|
+
cwd: string().max(1024).optional(),
|
|
21186
|
+
environment: array(string().max(4096)).max(64).optional()
|
|
21071
21187
|
}), TerminalSessionInfoSchema, {
|
|
21072
21188
|
kind: "mutation",
|
|
21073
21189
|
auth: "admin"
|
|
@@ -24950,10 +25066,10 @@ var lawnMowerControlCapability = {
|
|
|
24950
25066
|
*
|
|
24951
25067
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
24952
25068
|
* to receive an ordered list of candidate base URLs it should race
|
|
24953
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
24954
|
-
* then public hostname (if a tunnel is
|
|
24955
|
-
* race them with short timeouts and stick with the
|
|
24956
|
-
* session.
|
|
25069
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
25070
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
25071
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
25072
|
+
* winner for the session.
|
|
24957
25073
|
*
|
|
24958
25074
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
24959
25075
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -25108,6 +25224,17 @@ var NotificationEndpointSchema = object({
|
|
|
25108
25224
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
25109
25225
|
resolved: string().nullable()
|
|
25110
25226
|
});
|
|
25227
|
+
/**
|
|
25228
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
25229
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
25230
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
25231
|
+
*/
|
|
25232
|
+
var ViewerEndpointsSchema = object({
|
|
25233
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
25234
|
+
baseUrls: array(string()).readonly(),
|
|
25235
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
25236
|
+
resolved: array(string()).readonly()
|
|
25237
|
+
});
|
|
25111
25238
|
var AllowedAddressesSchema = object({
|
|
25112
25239
|
/**
|
|
25113
25240
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -25116,6 +25243,20 @@ var AllowedAddressesSchema = object({
|
|
|
25116
25243
|
* Network Addresses admin page and persisted by the addon.
|
|
25117
25244
|
*/
|
|
25118
25245
|
addresses: array(string()).readonly() });
|
|
25246
|
+
var TlsStatusSchema = object({
|
|
25247
|
+
mode: _enum([
|
|
25248
|
+
"generated",
|
|
25249
|
+
"uploaded",
|
|
25250
|
+
"disabled"
|
|
25251
|
+
]),
|
|
25252
|
+
leafFingerprintSha256: string().nullable(),
|
|
25253
|
+
caFingerprintSha256: string().nullable(),
|
|
25254
|
+
validTo: string().nullable(),
|
|
25255
|
+
sans: array(string()),
|
|
25256
|
+
caCertPem: string().nullable(),
|
|
25257
|
+
reissueError: string().nullable(),
|
|
25258
|
+
restartRequired: boolean()
|
|
25259
|
+
});
|
|
25119
25260
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
25120
25261
|
/**
|
|
25121
25262
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -25125,17 +25266,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
25125
25266
|
*/
|
|
25126
25267
|
port: number().int().min(1).max(65535).optional(),
|
|
25127
25268
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
25128
|
-
* candidate. Default `
|
|
25269
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
25129
25270
|
includeLoopback: boolean().optional(),
|
|
25130
|
-
/** Skip IPv6 entries.
|
|
25131
|
-
*
|
|
25271
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
25272
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
25273
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
25132
25274
|
ipv4Only: boolean().optional(),
|
|
25133
25275
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
25134
25276
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
25135
25277
|
* to avoid mixed-content blocks in the browser. The public
|
|
25136
25278
|
* tunnel always emits `https://` regardless. */
|
|
25137
25279
|
scheme: _enum(["http", "https"]).optional()
|
|
25138
|
-
}), 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" })
|
|
25280
|
+
}), 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, {
|
|
25281
|
+
kind: "mutation",
|
|
25282
|
+
auth: "admin"
|
|
25283
|
+
}), method(object({
|
|
25284
|
+
certPem: string().min(1),
|
|
25285
|
+
keyPem: string().min(1),
|
|
25286
|
+
caPem: string().optional()
|
|
25287
|
+
}), TlsStatusSchema, {
|
|
25288
|
+
kind: "mutation",
|
|
25289
|
+
auth: "admin"
|
|
25290
|
+
}), method(_void(), object({ pem: string() })), method(_void(), TlsStatusSchema, {
|
|
25291
|
+
kind: "mutation",
|
|
25292
|
+
auth: "admin"
|
|
25293
|
+
});
|
|
25139
25294
|
var LockControlStatusSchema = object({
|
|
25140
25295
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
25141
25296
|
* failure to reach the target — operator intervention required. */
|
|
@@ -33162,6 +33317,12 @@ Object.freeze({
|
|
|
33162
33317
|
addonId: null,
|
|
33163
33318
|
access: "create"
|
|
33164
33319
|
},
|
|
33320
|
+
"localNetwork.downloadCa": {
|
|
33321
|
+
capName: "local-network",
|
|
33322
|
+
capScope: "system",
|
|
33323
|
+
addonId: null,
|
|
33324
|
+
access: "view"
|
|
33325
|
+
},
|
|
33165
33326
|
"localNetwork.getAllowedAddresses": {
|
|
33166
33327
|
capName: "local-network",
|
|
33167
33328
|
capScope: "system",
|
|
@@ -33186,18 +33347,42 @@ Object.freeze({
|
|
|
33186
33347
|
addonId: null,
|
|
33187
33348
|
access: "view"
|
|
33188
33349
|
},
|
|
33350
|
+
"localNetwork.getTlsStatus": {
|
|
33351
|
+
capName: "local-network",
|
|
33352
|
+
capScope: "system",
|
|
33353
|
+
addonId: null,
|
|
33354
|
+
access: "view"
|
|
33355
|
+
},
|
|
33356
|
+
"localNetwork.getViewerEndpoints": {
|
|
33357
|
+
capName: "local-network",
|
|
33358
|
+
capScope: "system",
|
|
33359
|
+
addonId: null,
|
|
33360
|
+
access: "view"
|
|
33361
|
+
},
|
|
33189
33362
|
"localNetwork.list": {
|
|
33190
33363
|
capName: "local-network",
|
|
33191
33364
|
capScope: "system",
|
|
33192
33365
|
addonId: null,
|
|
33193
33366
|
access: "view"
|
|
33194
33367
|
},
|
|
33368
|
+
"localNetwork.regenerateCertificate": {
|
|
33369
|
+
capName: "local-network",
|
|
33370
|
+
capScope: "system",
|
|
33371
|
+
addonId: null,
|
|
33372
|
+
access: "create"
|
|
33373
|
+
},
|
|
33195
33374
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
33196
33375
|
capName: "local-network",
|
|
33197
33376
|
capScope: "system",
|
|
33198
33377
|
addonId: null,
|
|
33199
33378
|
access: "delete"
|
|
33200
33379
|
},
|
|
33380
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
33381
|
+
capName: "local-network",
|
|
33382
|
+
capScope: "system",
|
|
33383
|
+
addonId: null,
|
|
33384
|
+
access: "create"
|
|
33385
|
+
},
|
|
33201
33386
|
"localNetwork.setAllowedAddresses": {
|
|
33202
33387
|
capName: "local-network",
|
|
33203
33388
|
capScope: "system",
|
|
@@ -33210,6 +33395,18 @@ Object.freeze({
|
|
|
33210
33395
|
addonId: null,
|
|
33211
33396
|
access: "create"
|
|
33212
33397
|
},
|
|
33398
|
+
"localNetwork.setViewerEndpoints": {
|
|
33399
|
+
capName: "local-network",
|
|
33400
|
+
capScope: "system",
|
|
33401
|
+
addonId: null,
|
|
33402
|
+
access: "create"
|
|
33403
|
+
},
|
|
33404
|
+
"localNetwork.uploadCertificate": {
|
|
33405
|
+
capName: "local-network",
|
|
33406
|
+
capScope: "system",
|
|
33407
|
+
addonId: null,
|
|
33408
|
+
access: "create"
|
|
33409
|
+
},
|
|
33213
33410
|
"lockControl.lock": {
|
|
33214
33411
|
capName: "lock-control",
|
|
33215
33412
|
capScope: "device",
|
|
@@ -36090,6 +36287,12 @@ Object.freeze({
|
|
|
36090
36287
|
addonId: null,
|
|
36091
36288
|
access: "create"
|
|
36092
36289
|
},
|
|
36290
|
+
"terminalSession.updateInstance": {
|
|
36291
|
+
capName: "terminal-session",
|
|
36292
|
+
capScope: "system",
|
|
36293
|
+
addonId: null,
|
|
36294
|
+
access: "create"
|
|
36295
|
+
},
|
|
36093
36296
|
"terminalSession.writeInput": {
|
|
36094
36297
|
capName: "terminal-session",
|
|
36095
36298
|
capScope: "system",
|
|
@@ -38577,6 +38780,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
38577
38780
|
}]
|
|
38578
38781
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
38579
38782
|
string().min(1);
|
|
38783
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
38784
|
+
stepId: "face-embedding",
|
|
38785
|
+
key: "minLandmarkFaceSize",
|
|
38786
|
+
label: "Min face size for recognition (detection px)",
|
|
38787
|
+
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.",
|
|
38788
|
+
type: "slider",
|
|
38789
|
+
min: 0,
|
|
38790
|
+
max: 64,
|
|
38791
|
+
step: 2,
|
|
38792
|
+
default: 24
|
|
38793
|
+
}];
|
|
38794
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
38795
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
38796
|
+
}
|
|
38797
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
38798
|
+
function readClusterStepSettings(config) {
|
|
38799
|
+
const out = {};
|
|
38800
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
38801
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
38802
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
38803
|
+
const existing = out[field.stepId] ?? {};
|
|
38804
|
+
out[field.stepId] = {
|
|
38805
|
+
...existing,
|
|
38806
|
+
[field.key]: value
|
|
38807
|
+
};
|
|
38808
|
+
}
|
|
38809
|
+
return out;
|
|
38810
|
+
}
|
|
38811
|
+
readClusterStepSettings({});
|
|
38580
38812
|
object({
|
|
38581
38813
|
/**
|
|
38582
38814
|
* Fraction of the box's own size added on EACH side before cutting.
|
package/package.json
CHANGED