@camstack/addon-provider-unraid 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
|
@@ -8020,6 +8020,15 @@ var LabelDefinitionSchema = object({
|
|
|
8020
8020
|
description: string().optional(),
|
|
8021
8021
|
icon: string().optional()
|
|
8022
8022
|
});
|
|
8023
|
+
var ClassMapDefinitionSchema = object({
|
|
8024
|
+
mapping: record(string(), _enum([
|
|
8025
|
+
"person",
|
|
8026
|
+
"vehicle",
|
|
8027
|
+
"animal",
|
|
8028
|
+
"package"
|
|
8029
|
+
])),
|
|
8030
|
+
preserveOriginal: boolean()
|
|
8031
|
+
});
|
|
8023
8032
|
var MODEL_FORMATS = [
|
|
8024
8033
|
"onnx",
|
|
8025
8034
|
"coreml",
|
|
@@ -8198,7 +8207,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8198
8207
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8199
8208
|
* is a presentation overlay resolved back to an `id`.
|
|
8200
8209
|
*/
|
|
8201
|
-
group: ModelVariantGroupSchema.optional()
|
|
8210
|
+
group: ModelVariantGroupSchema.optional(),
|
|
8211
|
+
/**
|
|
8212
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
8213
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8214
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8215
|
+
*/
|
|
8216
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8202
8217
|
});
|
|
8203
8218
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8204
8219
|
format: literal("openvino"),
|
|
@@ -8227,7 +8242,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8227
8242
|
"ocr",
|
|
8228
8243
|
"segmentation"
|
|
8229
8244
|
]),
|
|
8230
|
-
faceAlignment: boolean().optional()
|
|
8245
|
+
faceAlignment: boolean().optional(),
|
|
8246
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8231
8247
|
});
|
|
8232
8248
|
var ConvertResultSchema = object({
|
|
8233
8249
|
entry: ModelCatalogEntrySchema,
|
|
@@ -17520,6 +17536,33 @@ var NativeCropRefSchema = object({
|
|
|
17520
17536
|
h: number()
|
|
17521
17537
|
})
|
|
17522
17538
|
});
|
|
17539
|
+
object({
|
|
17540
|
+
crop: object({
|
|
17541
|
+
left: number(),
|
|
17542
|
+
top: number(),
|
|
17543
|
+
width: number().positive(),
|
|
17544
|
+
height: number().positive()
|
|
17545
|
+
}).optional(),
|
|
17546
|
+
content: object({
|
|
17547
|
+
width: number().int().positive(),
|
|
17548
|
+
height: number().int().positive()
|
|
17549
|
+
}),
|
|
17550
|
+
fit: _enum(["stretch", "contain"]),
|
|
17551
|
+
format: _enum([
|
|
17552
|
+
"rgb",
|
|
17553
|
+
"gray",
|
|
17554
|
+
"jpeg"
|
|
17555
|
+
])
|
|
17556
|
+
});
|
|
17557
|
+
var FrameRefSchema = object({
|
|
17558
|
+
registryId: string().min(1),
|
|
17559
|
+
id: string().min(1),
|
|
17560
|
+
width: number().int().positive(),
|
|
17561
|
+
height: number().int().positive(),
|
|
17562
|
+
format: _enum(["rgb", "gray"]),
|
|
17563
|
+
timestamp: number(),
|
|
17564
|
+
capturedAt: number().optional()
|
|
17565
|
+
});
|
|
17523
17566
|
var ModelFormatSchema$1 = _enum([
|
|
17524
17567
|
"onnx",
|
|
17525
17568
|
"coreml",
|
|
@@ -17764,6 +17807,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
17764
17807
|
steps: array(PipelineStepInputSchema).min(1),
|
|
17765
17808
|
frame: FrameInputSchema.optional(),
|
|
17766
17809
|
/**
|
|
17810
|
+
* Process-local lazy frame. Valid only when caller and provider resolve
|
|
17811
|
+
* in the same execution-group process; split/cross-node callers use
|
|
17812
|
+
* `frame`/`image` inline compatibility instead.
|
|
17813
|
+
*/
|
|
17814
|
+
frameRef: FrameRefSchema.optional(),
|
|
17815
|
+
/**
|
|
17767
17816
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
17768
17817
|
* the decoded pixels live in. One more member of the one-of
|
|
17769
17818
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -18059,7 +18108,10 @@ var NativeCropResultSchema = object({
|
|
|
18059
18108
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
18060
18109
|
* `keyFrame`) can reject a degraded fallback:
|
|
18061
18110
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
18062
|
-
* quality path).
|
|
18111
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
18112
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
18113
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
18114
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
18063
18115
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
18064
18116
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
18065
18117
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18550,12 +18602,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18550
18602
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18551
18603
|
* working unchanged when they switch to reading from the runner cap.
|
|
18552
18604
|
*/
|
|
18605
|
+
var FrameLazyCountersSchema = object({
|
|
18606
|
+
framesDecoded: number(),
|
|
18607
|
+
framesAdmitted: number(),
|
|
18608
|
+
framesDroppedPixelFree: number(),
|
|
18609
|
+
viewsMaterialized: number(),
|
|
18610
|
+
viewsSkipped: number(),
|
|
18611
|
+
workerToRunnerBytes: number(),
|
|
18612
|
+
runnerToPoolRawBytes: number(),
|
|
18613
|
+
runnerToPoolJpegBytes: number(),
|
|
18614
|
+
onDemandFullFrameRequests: number(),
|
|
18615
|
+
onDemandCropRequests: number(),
|
|
18616
|
+
nativeHits: number(),
|
|
18617
|
+
nativeMisses: number(),
|
|
18618
|
+
tileHits: number(),
|
|
18619
|
+
tileMisses: number(),
|
|
18620
|
+
fallbackHits: number(),
|
|
18621
|
+
fallbackMisses: number(),
|
|
18622
|
+
retainedWritesAvoided: number(),
|
|
18623
|
+
residentRefs: number(),
|
|
18624
|
+
residentBytes: number(),
|
|
18625
|
+
releases: number(),
|
|
18626
|
+
evictions: number(),
|
|
18627
|
+
staleMisses: number()
|
|
18628
|
+
});
|
|
18629
|
+
var FrameLazyMetricsSchema = object({
|
|
18630
|
+
node: FrameLazyCountersSchema,
|
|
18631
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
18632
|
+
});
|
|
18553
18633
|
var RunnerLocalMetricsSchema = object({
|
|
18554
18634
|
nodeId: string(),
|
|
18555
18635
|
activeCameras: number(),
|
|
18556
18636
|
throttledCameras: number(),
|
|
18557
18637
|
avgInferenceTimeMs: number(),
|
|
18558
|
-
queueDepth: number()
|
|
18638
|
+
queueDepth: number(),
|
|
18639
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18559
18640
|
});
|
|
18560
18641
|
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({
|
|
18561
18642
|
handle: FrameHandleSchema,
|
|
@@ -19855,6 +19936,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
19855
19936
|
location: StorageLocationSchema,
|
|
19856
19937
|
relativePath: string()
|
|
19857
19938
|
}), _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" });
|
|
19939
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
19940
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
19941
|
+
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
19858
19942
|
/**
|
|
19859
19943
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
19860
19944
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -19884,7 +19968,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
19884
19968
|
var TerminalProfileInfoSchema = object({
|
|
19885
19969
|
profileId: string(),
|
|
19886
19970
|
label: string(),
|
|
19887
|
-
description: string().optional()
|
|
19971
|
+
description: string().optional(),
|
|
19972
|
+
/** Spawn defaults the instance form copies on create. */
|
|
19973
|
+
executable: string().optional(),
|
|
19974
|
+
args: array(string()).readonly().optional(),
|
|
19975
|
+
cwd: string().optional(),
|
|
19976
|
+
environment: array(string()).readonly().optional(),
|
|
19977
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
19978
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
19888
19979
|
});
|
|
19889
19980
|
/**
|
|
19890
19981
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -19897,7 +19988,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
19897
19988
|
profileId: string(),
|
|
19898
19989
|
profileLabel: string(),
|
|
19899
19990
|
name: string(),
|
|
19900
|
-
enabled: boolean()
|
|
19991
|
+
enabled: boolean(),
|
|
19992
|
+
executable: string(),
|
|
19993
|
+
args: array(string()).readonly(),
|
|
19994
|
+
cwd: string(),
|
|
19995
|
+
environment: array(string()).readonly(),
|
|
19996
|
+
profileSettings: ProfileSettingsBagSchema
|
|
19901
19997
|
});
|
|
19902
19998
|
var TerminalLegacyCameraSchema = object({
|
|
19903
19999
|
stableId: string(),
|
|
@@ -19927,7 +20023,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
19927
20023
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19928
20024
|
targetNodeId: string().min(1),
|
|
19929
20025
|
profileId: string().min(1),
|
|
19930
|
-
name: string().trim().min(1).max(160).optional()
|
|
20026
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20027
|
+
executable: string().max(1024).optional(),
|
|
20028
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20029
|
+
cwd: string().max(1024).optional(),
|
|
20030
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20031
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20032
|
+
}), TerminalInstanceInfoSchema, {
|
|
20033
|
+
kind: "mutation",
|
|
20034
|
+
auth: "admin"
|
|
20035
|
+
}), method(object({
|
|
20036
|
+
instanceId: string().min(1),
|
|
20037
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20038
|
+
executable: string().max(1024).optional(),
|
|
20039
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20040
|
+
cwd: string().max(1024).optional(),
|
|
20041
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20042
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
19931
20043
|
}), TerminalInstanceInfoSchema, {
|
|
19932
20044
|
kind: "mutation",
|
|
19933
20045
|
auth: "admin"
|
|
@@ -19949,7 +20061,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
19949
20061
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19950
20062
|
profileId: string(),
|
|
19951
20063
|
cols: number().int().positive(),
|
|
19952
|
-
rows: number().int().positive()
|
|
20064
|
+
rows: number().int().positive(),
|
|
20065
|
+
executable: string().max(1024).optional(),
|
|
20066
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20067
|
+
cwd: string().max(1024).optional(),
|
|
20068
|
+
environment: array(string().max(4096)).max(64).optional()
|
|
19953
20069
|
}), TerminalSessionInfoSchema, {
|
|
19954
20070
|
kind: "mutation",
|
|
19955
20071
|
auth: "admin"
|
|
@@ -23841,10 +23957,10 @@ var lawnMowerControlCapability = {
|
|
|
23841
23957
|
*
|
|
23842
23958
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
23843
23959
|
* to receive an ordered list of candidate base URLs it should race
|
|
23844
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
23845
|
-
* then public hostname (if a tunnel is
|
|
23846
|
-
* race them with short timeouts and stick with the
|
|
23847
|
-
* session.
|
|
23960
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
23961
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
23962
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
23963
|
+
* winner for the session.
|
|
23848
23964
|
*
|
|
23849
23965
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
23850
23966
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -23999,6 +24115,17 @@ var NotificationEndpointSchema = object({
|
|
|
23999
24115
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
24000
24116
|
resolved: string().nullable()
|
|
24001
24117
|
});
|
|
24118
|
+
/**
|
|
24119
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
24120
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
24121
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
24122
|
+
*/
|
|
24123
|
+
var ViewerEndpointsSchema = object({
|
|
24124
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
24125
|
+
baseUrls: array(string()).readonly(),
|
|
24126
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
24127
|
+
resolved: array(string()).readonly()
|
|
24128
|
+
});
|
|
24002
24129
|
var AllowedAddressesSchema = object({
|
|
24003
24130
|
/**
|
|
24004
24131
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -24007,6 +24134,20 @@ var AllowedAddressesSchema = object({
|
|
|
24007
24134
|
* Network Addresses admin page and persisted by the addon.
|
|
24008
24135
|
*/
|
|
24009
24136
|
addresses: array(string()).readonly() });
|
|
24137
|
+
var TlsStatusSchema = object({
|
|
24138
|
+
mode: _enum([
|
|
24139
|
+
"generated",
|
|
24140
|
+
"uploaded",
|
|
24141
|
+
"disabled"
|
|
24142
|
+
]),
|
|
24143
|
+
leafFingerprintSha256: string().nullable(),
|
|
24144
|
+
caFingerprintSha256: string().nullable(),
|
|
24145
|
+
validTo: string().nullable(),
|
|
24146
|
+
sans: array(string()),
|
|
24147
|
+
caCertPem: string().nullable(),
|
|
24148
|
+
reissueError: string().nullable(),
|
|
24149
|
+
restartRequired: boolean()
|
|
24150
|
+
});
|
|
24010
24151
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
24011
24152
|
/**
|
|
24012
24153
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -24016,17 +24157,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
24016
24157
|
*/
|
|
24017
24158
|
port: number().int().min(1).max(65535).optional(),
|
|
24018
24159
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
24019
|
-
* candidate. Default `
|
|
24160
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
24020
24161
|
includeLoopback: boolean().optional(),
|
|
24021
|
-
/** Skip IPv6 entries.
|
|
24022
|
-
*
|
|
24162
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
24163
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
24164
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
24023
24165
|
ipv4Only: boolean().optional(),
|
|
24024
24166
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
24025
24167
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
24026
24168
|
* to avoid mixed-content blocks in the browser. The public
|
|
24027
24169
|
* tunnel always emits `https://` regardless. */
|
|
24028
24170
|
scheme: _enum(["http", "https"]).optional()
|
|
24029
|
-
}), 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" })
|
|
24171
|
+
}), 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, {
|
|
24172
|
+
kind: "mutation",
|
|
24173
|
+
auth: "admin"
|
|
24174
|
+
}), method(object({
|
|
24175
|
+
certPem: string().min(1),
|
|
24176
|
+
keyPem: string().min(1),
|
|
24177
|
+
caPem: string().optional()
|
|
24178
|
+
}), TlsStatusSchema, {
|
|
24179
|
+
kind: "mutation",
|
|
24180
|
+
auth: "admin"
|
|
24181
|
+
}), method(_void(), object({ pem: string() })), method(_void(), TlsStatusSchema, {
|
|
24182
|
+
kind: "mutation",
|
|
24183
|
+
auth: "admin"
|
|
24184
|
+
});
|
|
24030
24185
|
var LockControlStatusSchema = object({
|
|
24031
24186
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
24032
24187
|
* failure to reach the target — operator intervention required. */
|
|
@@ -32053,6 +32208,12 @@ Object.freeze({
|
|
|
32053
32208
|
addonId: null,
|
|
32054
32209
|
access: "create"
|
|
32055
32210
|
},
|
|
32211
|
+
"localNetwork.downloadCa": {
|
|
32212
|
+
capName: "local-network",
|
|
32213
|
+
capScope: "system",
|
|
32214
|
+
addonId: null,
|
|
32215
|
+
access: "view"
|
|
32216
|
+
},
|
|
32056
32217
|
"localNetwork.getAllowedAddresses": {
|
|
32057
32218
|
capName: "local-network",
|
|
32058
32219
|
capScope: "system",
|
|
@@ -32077,18 +32238,42 @@ Object.freeze({
|
|
|
32077
32238
|
addonId: null,
|
|
32078
32239
|
access: "view"
|
|
32079
32240
|
},
|
|
32241
|
+
"localNetwork.getTlsStatus": {
|
|
32242
|
+
capName: "local-network",
|
|
32243
|
+
capScope: "system",
|
|
32244
|
+
addonId: null,
|
|
32245
|
+
access: "view"
|
|
32246
|
+
},
|
|
32247
|
+
"localNetwork.getViewerEndpoints": {
|
|
32248
|
+
capName: "local-network",
|
|
32249
|
+
capScope: "system",
|
|
32250
|
+
addonId: null,
|
|
32251
|
+
access: "view"
|
|
32252
|
+
},
|
|
32080
32253
|
"localNetwork.list": {
|
|
32081
32254
|
capName: "local-network",
|
|
32082
32255
|
capScope: "system",
|
|
32083
32256
|
addonId: null,
|
|
32084
32257
|
access: "view"
|
|
32085
32258
|
},
|
|
32259
|
+
"localNetwork.regenerateCertificate": {
|
|
32260
|
+
capName: "local-network",
|
|
32261
|
+
capScope: "system",
|
|
32262
|
+
addonId: null,
|
|
32263
|
+
access: "create"
|
|
32264
|
+
},
|
|
32086
32265
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
32087
32266
|
capName: "local-network",
|
|
32088
32267
|
capScope: "system",
|
|
32089
32268
|
addonId: null,
|
|
32090
32269
|
access: "delete"
|
|
32091
32270
|
},
|
|
32271
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
32272
|
+
capName: "local-network",
|
|
32273
|
+
capScope: "system",
|
|
32274
|
+
addonId: null,
|
|
32275
|
+
access: "create"
|
|
32276
|
+
},
|
|
32092
32277
|
"localNetwork.setAllowedAddresses": {
|
|
32093
32278
|
capName: "local-network",
|
|
32094
32279
|
capScope: "system",
|
|
@@ -32101,6 +32286,18 @@ Object.freeze({
|
|
|
32101
32286
|
addonId: null,
|
|
32102
32287
|
access: "create"
|
|
32103
32288
|
},
|
|
32289
|
+
"localNetwork.setViewerEndpoints": {
|
|
32290
|
+
capName: "local-network",
|
|
32291
|
+
capScope: "system",
|
|
32292
|
+
addonId: null,
|
|
32293
|
+
access: "create"
|
|
32294
|
+
},
|
|
32295
|
+
"localNetwork.uploadCertificate": {
|
|
32296
|
+
capName: "local-network",
|
|
32297
|
+
capScope: "system",
|
|
32298
|
+
addonId: null,
|
|
32299
|
+
access: "create"
|
|
32300
|
+
},
|
|
32104
32301
|
"lockControl.lock": {
|
|
32105
32302
|
capName: "lock-control",
|
|
32106
32303
|
capScope: "device",
|
|
@@ -34981,6 +35178,12 @@ Object.freeze({
|
|
|
34981
35178
|
addonId: null,
|
|
34982
35179
|
access: "create"
|
|
34983
35180
|
},
|
|
35181
|
+
"terminalSession.updateInstance": {
|
|
35182
|
+
capName: "terminal-session",
|
|
35183
|
+
capScope: "system",
|
|
35184
|
+
addonId: null,
|
|
35185
|
+
access: "create"
|
|
35186
|
+
},
|
|
34984
35187
|
"terminalSession.writeInput": {
|
|
34985
35188
|
capName: "terminal-session",
|
|
34986
35189
|
capScope: "system",
|
|
@@ -37468,6 +37671,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
37468
37671
|
}]
|
|
37469
37672
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
37470
37673
|
string().min(1);
|
|
37674
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
37675
|
+
stepId: "face-embedding",
|
|
37676
|
+
key: "minLandmarkFaceSize",
|
|
37677
|
+
label: "Min face size for recognition (detection px)",
|
|
37678
|
+
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.",
|
|
37679
|
+
type: "slider",
|
|
37680
|
+
min: 0,
|
|
37681
|
+
max: 64,
|
|
37682
|
+
step: 2,
|
|
37683
|
+
default: 24
|
|
37684
|
+
}];
|
|
37685
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
37686
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
37687
|
+
}
|
|
37688
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
37689
|
+
function readClusterStepSettings(config) {
|
|
37690
|
+
const out = {};
|
|
37691
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
37692
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
37693
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
37694
|
+
const existing = out[field.stepId] ?? {};
|
|
37695
|
+
out[field.stepId] = {
|
|
37696
|
+
...existing,
|
|
37697
|
+
[field.key]: value
|
|
37698
|
+
};
|
|
37699
|
+
}
|
|
37700
|
+
return out;
|
|
37701
|
+
}
|
|
37702
|
+
readClusterStepSettings({});
|
|
37471
37703
|
object({
|
|
37472
37704
|
/**
|
|
37473
37705
|
* Fraction of the box's own size added on EACH side before cutting.
|
package/dist/addon.mjs
CHANGED
|
@@ -8019,6 +8019,15 @@ var LabelDefinitionSchema = object({
|
|
|
8019
8019
|
description: string().optional(),
|
|
8020
8020
|
icon: string().optional()
|
|
8021
8021
|
});
|
|
8022
|
+
var ClassMapDefinitionSchema = object({
|
|
8023
|
+
mapping: record(string(), _enum([
|
|
8024
|
+
"person",
|
|
8025
|
+
"vehicle",
|
|
8026
|
+
"animal",
|
|
8027
|
+
"package"
|
|
8028
|
+
])),
|
|
8029
|
+
preserveOriginal: boolean()
|
|
8030
|
+
});
|
|
8022
8031
|
var MODEL_FORMATS = [
|
|
8023
8032
|
"onnx",
|
|
8024
8033
|
"coreml",
|
|
@@ -8197,7 +8206,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8197
8206
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8198
8207
|
* is a presentation overlay resolved back to an `id`.
|
|
8199
8208
|
*/
|
|
8200
|
-
group: ModelVariantGroupSchema.optional()
|
|
8209
|
+
group: ModelVariantGroupSchema.optional(),
|
|
8210
|
+
/**
|
|
8211
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
8212
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8213
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8214
|
+
*/
|
|
8215
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8201
8216
|
});
|
|
8202
8217
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8203
8218
|
format: literal("openvino"),
|
|
@@ -8226,7 +8241,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8226
8241
|
"ocr",
|
|
8227
8242
|
"segmentation"
|
|
8228
8243
|
]),
|
|
8229
|
-
faceAlignment: boolean().optional()
|
|
8244
|
+
faceAlignment: boolean().optional(),
|
|
8245
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8230
8246
|
});
|
|
8231
8247
|
var ConvertResultSchema = object({
|
|
8232
8248
|
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.
|
|
@@ -18058,7 +18107,10 @@ var NativeCropResultSchema = object({
|
|
|
18058
18107
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
18059
18108
|
* `keyFrame`) can reject a degraded fallback:
|
|
18060
18109
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
18061
|
-
* quality path).
|
|
18110
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
18111
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
18112
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
18113
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
18062
18114
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
18063
18115
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
18064
18116
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18549,12 +18601,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18549
18601
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18550
18602
|
* working unchanged when they switch to reading from the runner cap.
|
|
18551
18603
|
*/
|
|
18604
|
+
var FrameLazyCountersSchema = object({
|
|
18605
|
+
framesDecoded: number(),
|
|
18606
|
+
framesAdmitted: number(),
|
|
18607
|
+
framesDroppedPixelFree: number(),
|
|
18608
|
+
viewsMaterialized: number(),
|
|
18609
|
+
viewsSkipped: number(),
|
|
18610
|
+
workerToRunnerBytes: number(),
|
|
18611
|
+
runnerToPoolRawBytes: number(),
|
|
18612
|
+
runnerToPoolJpegBytes: number(),
|
|
18613
|
+
onDemandFullFrameRequests: number(),
|
|
18614
|
+
onDemandCropRequests: number(),
|
|
18615
|
+
nativeHits: number(),
|
|
18616
|
+
nativeMisses: number(),
|
|
18617
|
+
tileHits: number(),
|
|
18618
|
+
tileMisses: number(),
|
|
18619
|
+
fallbackHits: number(),
|
|
18620
|
+
fallbackMisses: number(),
|
|
18621
|
+
retainedWritesAvoided: number(),
|
|
18622
|
+
residentRefs: number(),
|
|
18623
|
+
residentBytes: number(),
|
|
18624
|
+
releases: number(),
|
|
18625
|
+
evictions: number(),
|
|
18626
|
+
staleMisses: number()
|
|
18627
|
+
});
|
|
18628
|
+
var FrameLazyMetricsSchema = object({
|
|
18629
|
+
node: FrameLazyCountersSchema,
|
|
18630
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
18631
|
+
});
|
|
18552
18632
|
var RunnerLocalMetricsSchema = object({
|
|
18553
18633
|
nodeId: string(),
|
|
18554
18634
|
activeCameras: number(),
|
|
18555
18635
|
throttledCameras: number(),
|
|
18556
18636
|
avgInferenceTimeMs: number(),
|
|
18557
|
-
queueDepth: number()
|
|
18637
|
+
queueDepth: number(),
|
|
18638
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18558
18639
|
});
|
|
18559
18640
|
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({
|
|
18560
18641
|
handle: FrameHandleSchema,
|
|
@@ -19854,6 +19935,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
19854
19935
|
location: StorageLocationSchema,
|
|
19855
19936
|
relativePath: string()
|
|
19856
19937
|
}), _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" });
|
|
19938
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
19939
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
19940
|
+
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
19857
19941
|
/**
|
|
19858
19942
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
19859
19943
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -19883,7 +19967,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
19883
19967
|
var TerminalProfileInfoSchema = object({
|
|
19884
19968
|
profileId: string(),
|
|
19885
19969
|
label: string(),
|
|
19886
|
-
description: string().optional()
|
|
19970
|
+
description: string().optional(),
|
|
19971
|
+
/** Spawn defaults the instance form copies on create. */
|
|
19972
|
+
executable: string().optional(),
|
|
19973
|
+
args: array(string()).readonly().optional(),
|
|
19974
|
+
cwd: string().optional(),
|
|
19975
|
+
environment: array(string()).readonly().optional(),
|
|
19976
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
19977
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
19887
19978
|
});
|
|
19888
19979
|
/**
|
|
19889
19980
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -19896,7 +19987,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
19896
19987
|
profileId: string(),
|
|
19897
19988
|
profileLabel: string(),
|
|
19898
19989
|
name: string(),
|
|
19899
|
-
enabled: boolean()
|
|
19990
|
+
enabled: boolean(),
|
|
19991
|
+
executable: string(),
|
|
19992
|
+
args: array(string()).readonly(),
|
|
19993
|
+
cwd: string(),
|
|
19994
|
+
environment: array(string()).readonly(),
|
|
19995
|
+
profileSettings: ProfileSettingsBagSchema
|
|
19900
19996
|
});
|
|
19901
19997
|
var TerminalLegacyCameraSchema = object({
|
|
19902
19998
|
stableId: string(),
|
|
@@ -19926,7 +20022,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
19926
20022
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19927
20023
|
targetNodeId: string().min(1),
|
|
19928
20024
|
profileId: string().min(1),
|
|
19929
|
-
name: string().trim().min(1).max(160).optional()
|
|
20025
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20026
|
+
executable: string().max(1024).optional(),
|
|
20027
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20028
|
+
cwd: string().max(1024).optional(),
|
|
20029
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20030
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20031
|
+
}), TerminalInstanceInfoSchema, {
|
|
20032
|
+
kind: "mutation",
|
|
20033
|
+
auth: "admin"
|
|
20034
|
+
}), method(object({
|
|
20035
|
+
instanceId: string().min(1),
|
|
20036
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20037
|
+
executable: string().max(1024).optional(),
|
|
20038
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20039
|
+
cwd: string().max(1024).optional(),
|
|
20040
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20041
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
19930
20042
|
}), TerminalInstanceInfoSchema, {
|
|
19931
20043
|
kind: "mutation",
|
|
19932
20044
|
auth: "admin"
|
|
@@ -19948,7 +20060,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
19948
20060
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19949
20061
|
profileId: string(),
|
|
19950
20062
|
cols: number().int().positive(),
|
|
19951
|
-
rows: number().int().positive()
|
|
20063
|
+
rows: number().int().positive(),
|
|
20064
|
+
executable: string().max(1024).optional(),
|
|
20065
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20066
|
+
cwd: string().max(1024).optional(),
|
|
20067
|
+
environment: array(string().max(4096)).max(64).optional()
|
|
19952
20068
|
}), TerminalSessionInfoSchema, {
|
|
19953
20069
|
kind: "mutation",
|
|
19954
20070
|
auth: "admin"
|
|
@@ -23840,10 +23956,10 @@ var lawnMowerControlCapability = {
|
|
|
23840
23956
|
*
|
|
23841
23957
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
23842
23958
|
* to receive an ordered list of candidate base URLs it should race
|
|
23843
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
23844
|
-
* then public hostname (if a tunnel is
|
|
23845
|
-
* race them with short timeouts and stick with the
|
|
23846
|
-
* session.
|
|
23959
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
23960
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
23961
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
23962
|
+
* winner for the session.
|
|
23847
23963
|
*
|
|
23848
23964
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
23849
23965
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -23998,6 +24114,17 @@ var NotificationEndpointSchema = object({
|
|
|
23998
24114
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
23999
24115
|
resolved: string().nullable()
|
|
24000
24116
|
});
|
|
24117
|
+
/**
|
|
24118
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
24119
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
24120
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
24121
|
+
*/
|
|
24122
|
+
var ViewerEndpointsSchema = object({
|
|
24123
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
24124
|
+
baseUrls: array(string()).readonly(),
|
|
24125
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
24126
|
+
resolved: array(string()).readonly()
|
|
24127
|
+
});
|
|
24001
24128
|
var AllowedAddressesSchema = object({
|
|
24002
24129
|
/**
|
|
24003
24130
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -24006,6 +24133,20 @@ var AllowedAddressesSchema = object({
|
|
|
24006
24133
|
* Network Addresses admin page and persisted by the addon.
|
|
24007
24134
|
*/
|
|
24008
24135
|
addresses: array(string()).readonly() });
|
|
24136
|
+
var TlsStatusSchema = object({
|
|
24137
|
+
mode: _enum([
|
|
24138
|
+
"generated",
|
|
24139
|
+
"uploaded",
|
|
24140
|
+
"disabled"
|
|
24141
|
+
]),
|
|
24142
|
+
leafFingerprintSha256: string().nullable(),
|
|
24143
|
+
caFingerprintSha256: string().nullable(),
|
|
24144
|
+
validTo: string().nullable(),
|
|
24145
|
+
sans: array(string()),
|
|
24146
|
+
caCertPem: string().nullable(),
|
|
24147
|
+
reissueError: string().nullable(),
|
|
24148
|
+
restartRequired: boolean()
|
|
24149
|
+
});
|
|
24009
24150
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
24010
24151
|
/**
|
|
24011
24152
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -24015,17 +24156,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
24015
24156
|
*/
|
|
24016
24157
|
port: number().int().min(1).max(65535).optional(),
|
|
24017
24158
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
24018
|
-
* candidate. Default `
|
|
24159
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
24019
24160
|
includeLoopback: boolean().optional(),
|
|
24020
|
-
/** Skip IPv6 entries.
|
|
24021
|
-
*
|
|
24161
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
24162
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
24163
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
24022
24164
|
ipv4Only: boolean().optional(),
|
|
24023
24165
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
24024
24166
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
24025
24167
|
* to avoid mixed-content blocks in the browser. The public
|
|
24026
24168
|
* tunnel always emits `https://` regardless. */
|
|
24027
24169
|
scheme: _enum(["http", "https"]).optional()
|
|
24028
|
-
}), 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" })
|
|
24170
|
+
}), 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, {
|
|
24171
|
+
kind: "mutation",
|
|
24172
|
+
auth: "admin"
|
|
24173
|
+
}), method(object({
|
|
24174
|
+
certPem: string().min(1),
|
|
24175
|
+
keyPem: string().min(1),
|
|
24176
|
+
caPem: string().optional()
|
|
24177
|
+
}), TlsStatusSchema, {
|
|
24178
|
+
kind: "mutation",
|
|
24179
|
+
auth: "admin"
|
|
24180
|
+
}), method(_void(), object({ pem: string() })), method(_void(), TlsStatusSchema, {
|
|
24181
|
+
kind: "mutation",
|
|
24182
|
+
auth: "admin"
|
|
24183
|
+
});
|
|
24029
24184
|
var LockControlStatusSchema = object({
|
|
24030
24185
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
24031
24186
|
* failure to reach the target — operator intervention required. */
|
|
@@ -32052,6 +32207,12 @@ Object.freeze({
|
|
|
32052
32207
|
addonId: null,
|
|
32053
32208
|
access: "create"
|
|
32054
32209
|
},
|
|
32210
|
+
"localNetwork.downloadCa": {
|
|
32211
|
+
capName: "local-network",
|
|
32212
|
+
capScope: "system",
|
|
32213
|
+
addonId: null,
|
|
32214
|
+
access: "view"
|
|
32215
|
+
},
|
|
32055
32216
|
"localNetwork.getAllowedAddresses": {
|
|
32056
32217
|
capName: "local-network",
|
|
32057
32218
|
capScope: "system",
|
|
@@ -32076,18 +32237,42 @@ Object.freeze({
|
|
|
32076
32237
|
addonId: null,
|
|
32077
32238
|
access: "view"
|
|
32078
32239
|
},
|
|
32240
|
+
"localNetwork.getTlsStatus": {
|
|
32241
|
+
capName: "local-network",
|
|
32242
|
+
capScope: "system",
|
|
32243
|
+
addonId: null,
|
|
32244
|
+
access: "view"
|
|
32245
|
+
},
|
|
32246
|
+
"localNetwork.getViewerEndpoints": {
|
|
32247
|
+
capName: "local-network",
|
|
32248
|
+
capScope: "system",
|
|
32249
|
+
addonId: null,
|
|
32250
|
+
access: "view"
|
|
32251
|
+
},
|
|
32079
32252
|
"localNetwork.list": {
|
|
32080
32253
|
capName: "local-network",
|
|
32081
32254
|
capScope: "system",
|
|
32082
32255
|
addonId: null,
|
|
32083
32256
|
access: "view"
|
|
32084
32257
|
},
|
|
32258
|
+
"localNetwork.regenerateCertificate": {
|
|
32259
|
+
capName: "local-network",
|
|
32260
|
+
capScope: "system",
|
|
32261
|
+
addonId: null,
|
|
32262
|
+
access: "create"
|
|
32263
|
+
},
|
|
32085
32264
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
32086
32265
|
capName: "local-network",
|
|
32087
32266
|
capScope: "system",
|
|
32088
32267
|
addonId: null,
|
|
32089
32268
|
access: "delete"
|
|
32090
32269
|
},
|
|
32270
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
32271
|
+
capName: "local-network",
|
|
32272
|
+
capScope: "system",
|
|
32273
|
+
addonId: null,
|
|
32274
|
+
access: "create"
|
|
32275
|
+
},
|
|
32091
32276
|
"localNetwork.setAllowedAddresses": {
|
|
32092
32277
|
capName: "local-network",
|
|
32093
32278
|
capScope: "system",
|
|
@@ -32100,6 +32285,18 @@ Object.freeze({
|
|
|
32100
32285
|
addonId: null,
|
|
32101
32286
|
access: "create"
|
|
32102
32287
|
},
|
|
32288
|
+
"localNetwork.setViewerEndpoints": {
|
|
32289
|
+
capName: "local-network",
|
|
32290
|
+
capScope: "system",
|
|
32291
|
+
addonId: null,
|
|
32292
|
+
access: "create"
|
|
32293
|
+
},
|
|
32294
|
+
"localNetwork.uploadCertificate": {
|
|
32295
|
+
capName: "local-network",
|
|
32296
|
+
capScope: "system",
|
|
32297
|
+
addonId: null,
|
|
32298
|
+
access: "create"
|
|
32299
|
+
},
|
|
32103
32300
|
"lockControl.lock": {
|
|
32104
32301
|
capName: "lock-control",
|
|
32105
32302
|
capScope: "device",
|
|
@@ -34980,6 +35177,12 @@ Object.freeze({
|
|
|
34980
35177
|
addonId: null,
|
|
34981
35178
|
access: "create"
|
|
34982
35179
|
},
|
|
35180
|
+
"terminalSession.updateInstance": {
|
|
35181
|
+
capName: "terminal-session",
|
|
35182
|
+
capScope: "system",
|
|
35183
|
+
addonId: null,
|
|
35184
|
+
access: "create"
|
|
35185
|
+
},
|
|
34983
35186
|
"terminalSession.writeInput": {
|
|
34984
35187
|
capName: "terminal-session",
|
|
34985
35188
|
capScope: "system",
|
|
@@ -37467,6 +37670,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
37467
37670
|
}]
|
|
37468
37671
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
37469
37672
|
string().min(1);
|
|
37673
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
37674
|
+
stepId: "face-embedding",
|
|
37675
|
+
key: "minLandmarkFaceSize",
|
|
37676
|
+
label: "Min face size for recognition (detection px)",
|
|
37677
|
+
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.",
|
|
37678
|
+
type: "slider",
|
|
37679
|
+
min: 0,
|
|
37680
|
+
max: 64,
|
|
37681
|
+
step: 2,
|
|
37682
|
+
default: 24
|
|
37683
|
+
}];
|
|
37684
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
37685
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
37686
|
+
}
|
|
37687
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
37688
|
+
function readClusterStepSettings(config) {
|
|
37689
|
+
const out = {};
|
|
37690
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
37691
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
37692
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
37693
|
+
const existing = out[field.stepId] ?? {};
|
|
37694
|
+
out[field.stepId] = {
|
|
37695
|
+
...existing,
|
|
37696
|
+
[field.key]: value
|
|
37697
|
+
};
|
|
37698
|
+
}
|
|
37699
|
+
return out;
|
|
37700
|
+
}
|
|
37701
|
+
readClusterStepSettings({});
|
|
37470
37702
|
object({
|
|
37471
37703
|
/**
|
|
37472
37704
|
* 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-provider-unraid",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.27",
|
|
4
4
|
"description": "Unraid device-provider addon for CamStack — one Container per Unraid instance fanning out array, disk, docker and notification entities",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|