@camstack/addon-provider-unraid 0.2.25 → 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 +258 -17
- package/dist/addon.mjs +258 -17
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
//#region ../types/dist/event-category-
|
|
2
|
+
//#region ../types/dist/event-category-CIa_iT6b.mjs
|
|
3
3
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4
4
|
EventCategory["SystemBoot"] = "system.boot";
|
|
5
5
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -15,6 +15,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
15
15
|
*/
|
|
16
16
|
EventCategory["SystemRestartCompleted"] = "system.restart-completed";
|
|
17
17
|
/**
|
|
18
|
+
* The hub reissued its own TLS certificate at boot (`ensureTlsCert`).
|
|
19
|
+
* Emitted only when the material on disk actually changed, so an
|
|
20
|
+
* operator who trusted the old certificate by hand is told rather than
|
|
21
|
+
* discovering it as a browser error. Payload `TlsCertChangedPayload`.
|
|
22
|
+
*
|
|
23
|
+
* Rule: docs/decisions/adr-0227-*.md
|
|
24
|
+
*/
|
|
25
|
+
EventCategory["SystemTlsCertChanged"] = "system.tls-cert-changed";
|
|
26
|
+
/**
|
|
18
27
|
* A newer addon or server-root package version was found by the
|
|
19
28
|
* authoritative registry check. Emitted once when any observed
|
|
20
29
|
* `latestVersion` changes (or a package/node first appears behind);
|
|
@@ -8011,6 +8020,15 @@ var LabelDefinitionSchema = object({
|
|
|
8011
8020
|
description: string().optional(),
|
|
8012
8021
|
icon: string().optional()
|
|
8013
8022
|
});
|
|
8023
|
+
var ClassMapDefinitionSchema = object({
|
|
8024
|
+
mapping: record(string(), _enum([
|
|
8025
|
+
"person",
|
|
8026
|
+
"vehicle",
|
|
8027
|
+
"animal",
|
|
8028
|
+
"package"
|
|
8029
|
+
])),
|
|
8030
|
+
preserveOriginal: boolean()
|
|
8031
|
+
});
|
|
8014
8032
|
var MODEL_FORMATS = [
|
|
8015
8033
|
"onnx",
|
|
8016
8034
|
"coreml",
|
|
@@ -8189,7 +8207,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8189
8207
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8190
8208
|
* is a presentation overlay resolved back to an `id`.
|
|
8191
8209
|
*/
|
|
8192
|
-
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()
|
|
8193
8217
|
});
|
|
8194
8218
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8195
8219
|
format: literal("openvino"),
|
|
@@ -8218,7 +8242,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8218
8242
|
"ocr",
|
|
8219
8243
|
"segmentation"
|
|
8220
8244
|
]),
|
|
8221
|
-
faceAlignment: boolean().optional()
|
|
8245
|
+
faceAlignment: boolean().optional(),
|
|
8246
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8222
8247
|
});
|
|
8223
8248
|
var ConvertResultSchema = object({
|
|
8224
8249
|
entry: ModelCatalogEntrySchema,
|
|
@@ -17511,6 +17536,33 @@ var NativeCropRefSchema = object({
|
|
|
17511
17536
|
h: number()
|
|
17512
17537
|
})
|
|
17513
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
|
+
});
|
|
17514
17566
|
var ModelFormatSchema$1 = _enum([
|
|
17515
17567
|
"onnx",
|
|
17516
17568
|
"coreml",
|
|
@@ -17755,6 +17807,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
17755
17807
|
steps: array(PipelineStepInputSchema).min(1),
|
|
17756
17808
|
frame: FrameInputSchema.optional(),
|
|
17757
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
|
+
/**
|
|
17758
17816
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
17759
17817
|
* the decoded pixels live in. One more member of the one-of
|
|
17760
17818
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -18050,7 +18108,10 @@ var NativeCropResultSchema = object({
|
|
|
18050
18108
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
18051
18109
|
* `keyFrame`) can reject a degraded fallback:
|
|
18052
18110
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
18053
|
-
* 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`).
|
|
18054
18115
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
18055
18116
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
18056
18117
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18541,12 +18602,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18541
18602
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18542
18603
|
* working unchanged when they switch to reading from the runner cap.
|
|
18543
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
|
+
});
|
|
18544
18633
|
var RunnerLocalMetricsSchema = object({
|
|
18545
18634
|
nodeId: string(),
|
|
18546
18635
|
activeCameras: number(),
|
|
18547
18636
|
throttledCameras: number(),
|
|
18548
18637
|
avgInferenceTimeMs: number(),
|
|
18549
|
-
queueDepth: number()
|
|
18638
|
+
queueDepth: number(),
|
|
18639
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18550
18640
|
});
|
|
18551
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({
|
|
18552
18642
|
handle: FrameHandleSchema,
|
|
@@ -19846,6 +19936,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
19846
19936
|
location: StorageLocationSchema,
|
|
19847
19937
|
relativePath: string()
|
|
19848
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());
|
|
19849
19942
|
/**
|
|
19850
19943
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
19851
19944
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -19875,7 +19968,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
19875
19968
|
var TerminalProfileInfoSchema = object({
|
|
19876
19969
|
profileId: string(),
|
|
19877
19970
|
label: string(),
|
|
19878
|
-
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()
|
|
19879
19979
|
});
|
|
19880
19980
|
/**
|
|
19881
19981
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -19888,7 +19988,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
19888
19988
|
profileId: string(),
|
|
19889
19989
|
profileLabel: string(),
|
|
19890
19990
|
name: string(),
|
|
19891
|
-
enabled: boolean()
|
|
19991
|
+
enabled: boolean(),
|
|
19992
|
+
executable: string(),
|
|
19993
|
+
args: array(string()).readonly(),
|
|
19994
|
+
cwd: string(),
|
|
19995
|
+
environment: array(string()).readonly(),
|
|
19996
|
+
profileSettings: ProfileSettingsBagSchema
|
|
19892
19997
|
});
|
|
19893
19998
|
var TerminalLegacyCameraSchema = object({
|
|
19894
19999
|
stableId: string(),
|
|
@@ -19918,7 +20023,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
19918
20023
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19919
20024
|
targetNodeId: string().min(1),
|
|
19920
20025
|
profileId: string().min(1),
|
|
19921
|
-
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()
|
|
19922
20043
|
}), TerminalInstanceInfoSchema, {
|
|
19923
20044
|
kind: "mutation",
|
|
19924
20045
|
auth: "admin"
|
|
@@ -19940,7 +20061,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
19940
20061
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19941
20062
|
profileId: string(),
|
|
19942
20063
|
cols: number().int().positive(),
|
|
19943
|
-
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()
|
|
19944
20069
|
}), TerminalSessionInfoSchema, {
|
|
19945
20070
|
kind: "mutation",
|
|
19946
20071
|
auth: "admin"
|
|
@@ -23832,10 +23957,10 @@ var lawnMowerControlCapability = {
|
|
|
23832
23957
|
*
|
|
23833
23958
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
23834
23959
|
* to receive an ordered list of candidate base URLs it should race
|
|
23835
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
23836
|
-
* then public hostname (if a tunnel is
|
|
23837
|
-
* race them with short timeouts and stick with the
|
|
23838
|
-
* 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.
|
|
23839
23964
|
*
|
|
23840
23965
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
23841
23966
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -23990,6 +24115,17 @@ var NotificationEndpointSchema = object({
|
|
|
23990
24115
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
23991
24116
|
resolved: string().nullable()
|
|
23992
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
|
+
});
|
|
23993
24129
|
var AllowedAddressesSchema = object({
|
|
23994
24130
|
/**
|
|
23995
24131
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -23998,6 +24134,20 @@ var AllowedAddressesSchema = object({
|
|
|
23998
24134
|
* Network Addresses admin page and persisted by the addon.
|
|
23999
24135
|
*/
|
|
24000
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
|
+
});
|
|
24001
24151
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
24002
24152
|
/**
|
|
24003
24153
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -24007,17 +24157,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
24007
24157
|
*/
|
|
24008
24158
|
port: number().int().min(1).max(65535).optional(),
|
|
24009
24159
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
24010
|
-
* candidate. Default `
|
|
24160
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
24011
24161
|
includeLoopback: boolean().optional(),
|
|
24012
|
-
/** Skip IPv6 entries.
|
|
24013
|
-
*
|
|
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`. */
|
|
24014
24165
|
ipv4Only: boolean().optional(),
|
|
24015
24166
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
24016
24167
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
24017
24168
|
* to avoid mixed-content blocks in the browser. The public
|
|
24018
24169
|
* tunnel always emits `https://` regardless. */
|
|
24019
24170
|
scheme: _enum(["http", "https"]).optional()
|
|
24020
|
-
}), 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
|
+
});
|
|
24021
24185
|
var LockControlStatusSchema = object({
|
|
24022
24186
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
24023
24187
|
* failure to reach the target — operator intervention required. */
|
|
@@ -32044,6 +32208,12 @@ Object.freeze({
|
|
|
32044
32208
|
addonId: null,
|
|
32045
32209
|
access: "create"
|
|
32046
32210
|
},
|
|
32211
|
+
"localNetwork.downloadCa": {
|
|
32212
|
+
capName: "local-network",
|
|
32213
|
+
capScope: "system",
|
|
32214
|
+
addonId: null,
|
|
32215
|
+
access: "view"
|
|
32216
|
+
},
|
|
32047
32217
|
"localNetwork.getAllowedAddresses": {
|
|
32048
32218
|
capName: "local-network",
|
|
32049
32219
|
capScope: "system",
|
|
@@ -32068,18 +32238,42 @@ Object.freeze({
|
|
|
32068
32238
|
addonId: null,
|
|
32069
32239
|
access: "view"
|
|
32070
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
|
+
},
|
|
32071
32253
|
"localNetwork.list": {
|
|
32072
32254
|
capName: "local-network",
|
|
32073
32255
|
capScope: "system",
|
|
32074
32256
|
addonId: null,
|
|
32075
32257
|
access: "view"
|
|
32076
32258
|
},
|
|
32259
|
+
"localNetwork.regenerateCertificate": {
|
|
32260
|
+
capName: "local-network",
|
|
32261
|
+
capScope: "system",
|
|
32262
|
+
addonId: null,
|
|
32263
|
+
access: "create"
|
|
32264
|
+
},
|
|
32077
32265
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
32078
32266
|
capName: "local-network",
|
|
32079
32267
|
capScope: "system",
|
|
32080
32268
|
addonId: null,
|
|
32081
32269
|
access: "delete"
|
|
32082
32270
|
},
|
|
32271
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
32272
|
+
capName: "local-network",
|
|
32273
|
+
capScope: "system",
|
|
32274
|
+
addonId: null,
|
|
32275
|
+
access: "create"
|
|
32276
|
+
},
|
|
32083
32277
|
"localNetwork.setAllowedAddresses": {
|
|
32084
32278
|
capName: "local-network",
|
|
32085
32279
|
capScope: "system",
|
|
@@ -32092,6 +32286,18 @@ Object.freeze({
|
|
|
32092
32286
|
addonId: null,
|
|
32093
32287
|
access: "create"
|
|
32094
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
|
+
},
|
|
32095
32301
|
"lockControl.lock": {
|
|
32096
32302
|
capName: "lock-control",
|
|
32097
32303
|
capScope: "device",
|
|
@@ -34972,6 +35178,12 @@ Object.freeze({
|
|
|
34972
35178
|
addonId: null,
|
|
34973
35179
|
access: "create"
|
|
34974
35180
|
},
|
|
35181
|
+
"terminalSession.updateInstance": {
|
|
35182
|
+
capName: "terminal-session",
|
|
35183
|
+
capScope: "system",
|
|
35184
|
+
addonId: null,
|
|
35185
|
+
access: "create"
|
|
35186
|
+
},
|
|
34975
35187
|
"terminalSession.writeInput": {
|
|
34976
35188
|
capName: "terminal-session",
|
|
34977
35189
|
capScope: "system",
|
|
@@ -37459,6 +37671,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
37459
37671
|
}]
|
|
37460
37672
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
37461
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({});
|
|
37462
37703
|
object({
|
|
37463
37704
|
/**
|
|
37464
37705
|
* Fraction of the box's own size added on EACH side before cutting.
|
package/dist/addon.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region ../types/dist/event-category-
|
|
1
|
+
//#region ../types/dist/event-category-CIa_iT6b.mjs
|
|
2
2
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
3
3
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4
4
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -14,6 +14,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
14
14
|
*/
|
|
15
15
|
EventCategory["SystemRestartCompleted"] = "system.restart-completed";
|
|
16
16
|
/**
|
|
17
|
+
* The hub reissued its own TLS certificate at boot (`ensureTlsCert`).
|
|
18
|
+
* Emitted only when the material on disk actually changed, so an
|
|
19
|
+
* operator who trusted the old certificate by hand is told rather than
|
|
20
|
+
* discovering it as a browser error. Payload `TlsCertChangedPayload`.
|
|
21
|
+
*
|
|
22
|
+
* Rule: docs/decisions/adr-0227-*.md
|
|
23
|
+
*/
|
|
24
|
+
EventCategory["SystemTlsCertChanged"] = "system.tls-cert-changed";
|
|
25
|
+
/**
|
|
17
26
|
* A newer addon or server-root package version was found by the
|
|
18
27
|
* authoritative registry check. Emitted once when any observed
|
|
19
28
|
* `latestVersion` changes (or a package/node first appears behind);
|
|
@@ -8010,6 +8019,15 @@ var LabelDefinitionSchema = object({
|
|
|
8010
8019
|
description: string().optional(),
|
|
8011
8020
|
icon: string().optional()
|
|
8012
8021
|
});
|
|
8022
|
+
var ClassMapDefinitionSchema = object({
|
|
8023
|
+
mapping: record(string(), _enum([
|
|
8024
|
+
"person",
|
|
8025
|
+
"vehicle",
|
|
8026
|
+
"animal",
|
|
8027
|
+
"package"
|
|
8028
|
+
])),
|
|
8029
|
+
preserveOriginal: boolean()
|
|
8030
|
+
});
|
|
8013
8031
|
var MODEL_FORMATS = [
|
|
8014
8032
|
"onnx",
|
|
8015
8033
|
"coreml",
|
|
@@ -8188,7 +8206,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8188
8206
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8189
8207
|
* is a presentation overlay resolved back to an `id`.
|
|
8190
8208
|
*/
|
|
8191
|
-
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()
|
|
8192
8216
|
});
|
|
8193
8217
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8194
8218
|
format: literal("openvino"),
|
|
@@ -8217,7 +8241,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8217
8241
|
"ocr",
|
|
8218
8242
|
"segmentation"
|
|
8219
8243
|
]),
|
|
8220
|
-
faceAlignment: boolean().optional()
|
|
8244
|
+
faceAlignment: boolean().optional(),
|
|
8245
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8221
8246
|
});
|
|
8222
8247
|
var ConvertResultSchema = object({
|
|
8223
8248
|
entry: ModelCatalogEntrySchema,
|
|
@@ -17510,6 +17535,33 @@ var NativeCropRefSchema = object({
|
|
|
17510
17535
|
h: number()
|
|
17511
17536
|
})
|
|
17512
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
|
+
});
|
|
17513
17565
|
var ModelFormatSchema$1 = _enum([
|
|
17514
17566
|
"onnx",
|
|
17515
17567
|
"coreml",
|
|
@@ -17754,6 +17806,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
17754
17806
|
steps: array(PipelineStepInputSchema).min(1),
|
|
17755
17807
|
frame: FrameInputSchema.optional(),
|
|
17756
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
|
+
/**
|
|
17757
17815
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
17758
17816
|
* the decoded pixels live in. One more member of the one-of
|
|
17759
17817
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -18049,7 +18107,10 @@ var NativeCropResultSchema = object({
|
|
|
18049
18107
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
18050
18108
|
* `keyFrame`) can reject a degraded fallback:
|
|
18051
18109
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
18052
|
-
* 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`).
|
|
18053
18114
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
18054
18115
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
18055
18116
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18540,12 +18601,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18540
18601
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18541
18602
|
* working unchanged when they switch to reading from the runner cap.
|
|
18542
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
|
+
});
|
|
18543
18632
|
var RunnerLocalMetricsSchema = object({
|
|
18544
18633
|
nodeId: string(),
|
|
18545
18634
|
activeCameras: number(),
|
|
18546
18635
|
throttledCameras: number(),
|
|
18547
18636
|
avgInferenceTimeMs: number(),
|
|
18548
|
-
queueDepth: number()
|
|
18637
|
+
queueDepth: number(),
|
|
18638
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18549
18639
|
});
|
|
18550
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({
|
|
18551
18641
|
handle: FrameHandleSchema,
|
|
@@ -19845,6 +19935,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
19845
19935
|
location: StorageLocationSchema,
|
|
19846
19936
|
relativePath: string()
|
|
19847
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());
|
|
19848
19941
|
/**
|
|
19849
19942
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
19850
19943
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -19874,7 +19967,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
19874
19967
|
var TerminalProfileInfoSchema = object({
|
|
19875
19968
|
profileId: string(),
|
|
19876
19969
|
label: string(),
|
|
19877
|
-
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()
|
|
19878
19978
|
});
|
|
19879
19979
|
/**
|
|
19880
19980
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -19887,7 +19987,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
19887
19987
|
profileId: string(),
|
|
19888
19988
|
profileLabel: string(),
|
|
19889
19989
|
name: string(),
|
|
19890
|
-
enabled: boolean()
|
|
19990
|
+
enabled: boolean(),
|
|
19991
|
+
executable: string(),
|
|
19992
|
+
args: array(string()).readonly(),
|
|
19993
|
+
cwd: string(),
|
|
19994
|
+
environment: array(string()).readonly(),
|
|
19995
|
+
profileSettings: ProfileSettingsBagSchema
|
|
19891
19996
|
});
|
|
19892
19997
|
var TerminalLegacyCameraSchema = object({
|
|
19893
19998
|
stableId: string(),
|
|
@@ -19917,7 +20022,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
19917
20022
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19918
20023
|
targetNodeId: string().min(1),
|
|
19919
20024
|
profileId: string().min(1),
|
|
19920
|
-
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()
|
|
19921
20042
|
}), TerminalInstanceInfoSchema, {
|
|
19922
20043
|
kind: "mutation",
|
|
19923
20044
|
auth: "admin"
|
|
@@ -19939,7 +20060,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
19939
20060
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19940
20061
|
profileId: string(),
|
|
19941
20062
|
cols: number().int().positive(),
|
|
19942
|
-
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()
|
|
19943
20068
|
}), TerminalSessionInfoSchema, {
|
|
19944
20069
|
kind: "mutation",
|
|
19945
20070
|
auth: "admin"
|
|
@@ -23831,10 +23956,10 @@ var lawnMowerControlCapability = {
|
|
|
23831
23956
|
*
|
|
23832
23957
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
23833
23958
|
* to receive an ordered list of candidate base URLs it should race
|
|
23834
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
23835
|
-
* then public hostname (if a tunnel is
|
|
23836
|
-
* race them with short timeouts and stick with the
|
|
23837
|
-
* 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.
|
|
23838
23963
|
*
|
|
23839
23964
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
23840
23965
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -23989,6 +24114,17 @@ var NotificationEndpointSchema = object({
|
|
|
23989
24114
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
23990
24115
|
resolved: string().nullable()
|
|
23991
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
|
+
});
|
|
23992
24128
|
var AllowedAddressesSchema = object({
|
|
23993
24129
|
/**
|
|
23994
24130
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -23997,6 +24133,20 @@ var AllowedAddressesSchema = object({
|
|
|
23997
24133
|
* Network Addresses admin page and persisted by the addon.
|
|
23998
24134
|
*/
|
|
23999
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
|
+
});
|
|
24000
24150
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
24001
24151
|
/**
|
|
24002
24152
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -24006,17 +24156,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
24006
24156
|
*/
|
|
24007
24157
|
port: number().int().min(1).max(65535).optional(),
|
|
24008
24158
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
24009
|
-
* candidate. Default `
|
|
24159
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
24010
24160
|
includeLoopback: boolean().optional(),
|
|
24011
|
-
/** Skip IPv6 entries.
|
|
24012
|
-
*
|
|
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`. */
|
|
24013
24164
|
ipv4Only: boolean().optional(),
|
|
24014
24165
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
24015
24166
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
24016
24167
|
* to avoid mixed-content blocks in the browser. The public
|
|
24017
24168
|
* tunnel always emits `https://` regardless. */
|
|
24018
24169
|
scheme: _enum(["http", "https"]).optional()
|
|
24019
|
-
}), 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
|
+
});
|
|
24020
24184
|
var LockControlStatusSchema = object({
|
|
24021
24185
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
24022
24186
|
* failure to reach the target — operator intervention required. */
|
|
@@ -32043,6 +32207,12 @@ Object.freeze({
|
|
|
32043
32207
|
addonId: null,
|
|
32044
32208
|
access: "create"
|
|
32045
32209
|
},
|
|
32210
|
+
"localNetwork.downloadCa": {
|
|
32211
|
+
capName: "local-network",
|
|
32212
|
+
capScope: "system",
|
|
32213
|
+
addonId: null,
|
|
32214
|
+
access: "view"
|
|
32215
|
+
},
|
|
32046
32216
|
"localNetwork.getAllowedAddresses": {
|
|
32047
32217
|
capName: "local-network",
|
|
32048
32218
|
capScope: "system",
|
|
@@ -32067,18 +32237,42 @@ Object.freeze({
|
|
|
32067
32237
|
addonId: null,
|
|
32068
32238
|
access: "view"
|
|
32069
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
|
+
},
|
|
32070
32252
|
"localNetwork.list": {
|
|
32071
32253
|
capName: "local-network",
|
|
32072
32254
|
capScope: "system",
|
|
32073
32255
|
addonId: null,
|
|
32074
32256
|
access: "view"
|
|
32075
32257
|
},
|
|
32258
|
+
"localNetwork.regenerateCertificate": {
|
|
32259
|
+
capName: "local-network",
|
|
32260
|
+
capScope: "system",
|
|
32261
|
+
addonId: null,
|
|
32262
|
+
access: "create"
|
|
32263
|
+
},
|
|
32076
32264
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
32077
32265
|
capName: "local-network",
|
|
32078
32266
|
capScope: "system",
|
|
32079
32267
|
addonId: null,
|
|
32080
32268
|
access: "delete"
|
|
32081
32269
|
},
|
|
32270
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
32271
|
+
capName: "local-network",
|
|
32272
|
+
capScope: "system",
|
|
32273
|
+
addonId: null,
|
|
32274
|
+
access: "create"
|
|
32275
|
+
},
|
|
32082
32276
|
"localNetwork.setAllowedAddresses": {
|
|
32083
32277
|
capName: "local-network",
|
|
32084
32278
|
capScope: "system",
|
|
@@ -32091,6 +32285,18 @@ Object.freeze({
|
|
|
32091
32285
|
addonId: null,
|
|
32092
32286
|
access: "create"
|
|
32093
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
|
+
},
|
|
32094
32300
|
"lockControl.lock": {
|
|
32095
32301
|
capName: "lock-control",
|
|
32096
32302
|
capScope: "device",
|
|
@@ -34971,6 +35177,12 @@ Object.freeze({
|
|
|
34971
35177
|
addonId: null,
|
|
34972
35178
|
access: "create"
|
|
34973
35179
|
},
|
|
35180
|
+
"terminalSession.updateInstance": {
|
|
35181
|
+
capName: "terminal-session",
|
|
35182
|
+
capScope: "system",
|
|
35183
|
+
addonId: null,
|
|
35184
|
+
access: "create"
|
|
35185
|
+
},
|
|
34974
35186
|
"terminalSession.writeInput": {
|
|
34975
35187
|
capName: "terminal-session",
|
|
34976
35188
|
capScope: "system",
|
|
@@ -37458,6 +37670,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
37458
37670
|
}]
|
|
37459
37671
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
37460
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({});
|
|
37461
37702
|
object({
|
|
37462
37703
|
/**
|
|
37463
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",
|