@camstack/addon-matter-broker 0.2.24 → 0.2.26
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
|
@@ -13,7 +13,7 @@ let node_stream_promises = require("node:stream/promises");
|
|
|
13
13
|
let node_net = require("node:net");
|
|
14
14
|
let node_dgram = require("node:dgram");
|
|
15
15
|
node_dgram = require_esm.__toESM(node_dgram, 1);
|
|
16
|
-
//#region ../types/dist/event-category-
|
|
16
|
+
//#region ../types/dist/event-category-CIa_iT6b.mjs
|
|
17
17
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
18
18
|
EventCategory["SystemBoot"] = "system.boot";
|
|
19
19
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -29,6 +29,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
29
29
|
*/
|
|
30
30
|
EventCategory["SystemRestartCompleted"] = "system.restart-completed";
|
|
31
31
|
/**
|
|
32
|
+
* The hub reissued its own TLS certificate at boot (`ensureTlsCert`).
|
|
33
|
+
* Emitted only when the material on disk actually changed, so an
|
|
34
|
+
* operator who trusted the old certificate by hand is told rather than
|
|
35
|
+
* discovering it as a browser error. Payload `TlsCertChangedPayload`.
|
|
36
|
+
*
|
|
37
|
+
* Rule: docs/decisions/adr-0227-*.md
|
|
38
|
+
*/
|
|
39
|
+
EventCategory["SystemTlsCertChanged"] = "system.tls-cert-changed";
|
|
40
|
+
/**
|
|
32
41
|
* A newer addon or server-root package version was found by the
|
|
33
42
|
* authoritative registry check. Emitted once when any observed
|
|
34
43
|
* `latestVersion` changes (or a package/node first appears behind);
|
|
@@ -8025,6 +8034,15 @@ var LabelDefinitionSchema = object({
|
|
|
8025
8034
|
description: string$2().optional(),
|
|
8026
8035
|
icon: string$2().optional()
|
|
8027
8036
|
});
|
|
8037
|
+
var ClassMapDefinitionSchema = object({
|
|
8038
|
+
mapping: record(string$2(), _enum([
|
|
8039
|
+
"person",
|
|
8040
|
+
"vehicle",
|
|
8041
|
+
"animal",
|
|
8042
|
+
"package"
|
|
8043
|
+
])),
|
|
8044
|
+
preserveOriginal: boolean()
|
|
8045
|
+
});
|
|
8028
8046
|
var MODEL_FORMATS = [
|
|
8029
8047
|
"onnx",
|
|
8030
8048
|
"coreml",
|
|
@@ -8203,7 +8221,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8203
8221
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8204
8222
|
* is a presentation overlay resolved back to an `id`.
|
|
8205
8223
|
*/
|
|
8206
|
-
group: ModelVariantGroupSchema.optional()
|
|
8224
|
+
group: ModelVariantGroupSchema.optional(),
|
|
8225
|
+
/**
|
|
8226
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
8227
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8228
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8229
|
+
*/
|
|
8230
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8207
8231
|
});
|
|
8208
8232
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8209
8233
|
format: literal("openvino"),
|
|
@@ -8232,7 +8256,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8232
8256
|
"ocr",
|
|
8233
8257
|
"segmentation"
|
|
8234
8258
|
]),
|
|
8235
|
-
faceAlignment: boolean().optional()
|
|
8259
|
+
faceAlignment: boolean().optional(),
|
|
8260
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8236
8261
|
});
|
|
8237
8262
|
var ConvertResultSchema = object({
|
|
8238
8263
|
entry: ModelCatalogEntrySchema,
|
|
@@ -17591,6 +17616,33 @@ var NativeCropRefSchema = object({
|
|
|
17591
17616
|
h: number()
|
|
17592
17617
|
})
|
|
17593
17618
|
});
|
|
17619
|
+
object({
|
|
17620
|
+
crop: object({
|
|
17621
|
+
left: number(),
|
|
17622
|
+
top: number(),
|
|
17623
|
+
width: number().positive(),
|
|
17624
|
+
height: number().positive()
|
|
17625
|
+
}).optional(),
|
|
17626
|
+
content: object({
|
|
17627
|
+
width: number().int().positive(),
|
|
17628
|
+
height: number().int().positive()
|
|
17629
|
+
}),
|
|
17630
|
+
fit: _enum(["stretch", "contain"]),
|
|
17631
|
+
format: _enum([
|
|
17632
|
+
"rgb",
|
|
17633
|
+
"gray",
|
|
17634
|
+
"jpeg"
|
|
17635
|
+
])
|
|
17636
|
+
});
|
|
17637
|
+
var FrameRefSchema = object({
|
|
17638
|
+
registryId: string$2().min(1),
|
|
17639
|
+
id: string$2().min(1),
|
|
17640
|
+
width: number().int().positive(),
|
|
17641
|
+
height: number().int().positive(),
|
|
17642
|
+
format: _enum(["rgb", "gray"]),
|
|
17643
|
+
timestamp: number(),
|
|
17644
|
+
capturedAt: number().optional()
|
|
17645
|
+
});
|
|
17594
17646
|
var ModelFormatSchema$1 = _enum([
|
|
17595
17647
|
"onnx",
|
|
17596
17648
|
"coreml",
|
|
@@ -17835,6 +17887,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
17835
17887
|
steps: array(PipelineStepInputSchema).min(1),
|
|
17836
17888
|
frame: FrameInputSchema.optional(),
|
|
17837
17889
|
/**
|
|
17890
|
+
* Process-local lazy frame. Valid only when caller and provider resolve
|
|
17891
|
+
* in the same execution-group process; split/cross-node callers use
|
|
17892
|
+
* `frame`/`image` inline compatibility instead.
|
|
17893
|
+
*/
|
|
17894
|
+
frameRef: FrameRefSchema.optional(),
|
|
17895
|
+
/**
|
|
17838
17896
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
17839
17897
|
* the decoded pixels live in. One more member of the one-of
|
|
17840
17898
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -18130,7 +18188,10 @@ var NativeCropResultSchema = object({
|
|
|
18130
18188
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
18131
18189
|
* `keyFrame`) can reject a degraded fallback:
|
|
18132
18190
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
18133
|
-
* quality path).
|
|
18191
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
18192
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
18193
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
18194
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
18134
18195
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
18135
18196
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
18136
18197
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18621,12 +18682,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18621
18682
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18622
18683
|
* working unchanged when they switch to reading from the runner cap.
|
|
18623
18684
|
*/
|
|
18685
|
+
var FrameLazyCountersSchema = object({
|
|
18686
|
+
framesDecoded: number(),
|
|
18687
|
+
framesAdmitted: number(),
|
|
18688
|
+
framesDroppedPixelFree: number(),
|
|
18689
|
+
viewsMaterialized: number(),
|
|
18690
|
+
viewsSkipped: number(),
|
|
18691
|
+
workerToRunnerBytes: number(),
|
|
18692
|
+
runnerToPoolRawBytes: number(),
|
|
18693
|
+
runnerToPoolJpegBytes: number(),
|
|
18694
|
+
onDemandFullFrameRequests: number(),
|
|
18695
|
+
onDemandCropRequests: number(),
|
|
18696
|
+
nativeHits: number(),
|
|
18697
|
+
nativeMisses: number(),
|
|
18698
|
+
tileHits: number(),
|
|
18699
|
+
tileMisses: number(),
|
|
18700
|
+
fallbackHits: number(),
|
|
18701
|
+
fallbackMisses: number(),
|
|
18702
|
+
retainedWritesAvoided: number(),
|
|
18703
|
+
residentRefs: number(),
|
|
18704
|
+
residentBytes: number(),
|
|
18705
|
+
releases: number(),
|
|
18706
|
+
evictions: number(),
|
|
18707
|
+
staleMisses: number()
|
|
18708
|
+
});
|
|
18709
|
+
var FrameLazyMetricsSchema = object({
|
|
18710
|
+
node: FrameLazyCountersSchema,
|
|
18711
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
18712
|
+
});
|
|
18624
18713
|
var RunnerLocalMetricsSchema = object({
|
|
18625
18714
|
nodeId: string$2(),
|
|
18626
18715
|
activeCameras: number(),
|
|
18627
18716
|
throttledCameras: number(),
|
|
18628
18717
|
avgInferenceTimeMs: number(),
|
|
18629
|
-
queueDepth: number()
|
|
18718
|
+
queueDepth: number(),
|
|
18719
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18630
18720
|
});
|
|
18631
18721
|
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({
|
|
18632
18722
|
handle: FrameHandleSchema,
|
|
@@ -19926,6 +20016,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string$2(),
|
|
|
19926
20016
|
location: StorageLocationSchema,
|
|
19927
20017
|
relativePath: string$2()
|
|
19928
20018
|
}), _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" });
|
|
20019
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
20020
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
20021
|
+
var ProfileSettingsBagSchema = record(string$2(), unknown());
|
|
19929
20022
|
/**
|
|
19930
20023
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
19931
20024
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -19955,7 +20048,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
19955
20048
|
var TerminalProfileInfoSchema = object({
|
|
19956
20049
|
profileId: string$2(),
|
|
19957
20050
|
label: string$2(),
|
|
19958
|
-
description: string$2().optional()
|
|
20051
|
+
description: string$2().optional(),
|
|
20052
|
+
/** Spawn defaults the instance form copies on create. */
|
|
20053
|
+
executable: string$2().optional(),
|
|
20054
|
+
args: array(string$2()).readonly().optional(),
|
|
20055
|
+
cwd: string$2().optional(),
|
|
20056
|
+
environment: array(string$2()).readonly().optional(),
|
|
20057
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
20058
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
19959
20059
|
});
|
|
19960
20060
|
/**
|
|
19961
20061
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -19968,7 +20068,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
19968
20068
|
profileId: string$2(),
|
|
19969
20069
|
profileLabel: string$2(),
|
|
19970
20070
|
name: string$2(),
|
|
19971
|
-
enabled: boolean()
|
|
20071
|
+
enabled: boolean(),
|
|
20072
|
+
executable: string$2(),
|
|
20073
|
+
args: array(string$2()).readonly(),
|
|
20074
|
+
cwd: string$2(),
|
|
20075
|
+
environment: array(string$2()).readonly(),
|
|
20076
|
+
profileSettings: ProfileSettingsBagSchema
|
|
19972
20077
|
});
|
|
19973
20078
|
var TerminalLegacyCameraSchema = object({
|
|
19974
20079
|
stableId: string$2(),
|
|
@@ -19998,7 +20103,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
19998
20103
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19999
20104
|
targetNodeId: string$2().min(1),
|
|
20000
20105
|
profileId: string$2().min(1),
|
|
20001
|
-
name: string$2().trim().min(1).max(160).optional()
|
|
20106
|
+
name: string$2().trim().min(1).max(160).optional(),
|
|
20107
|
+
executable: string$2().max(1024).optional(),
|
|
20108
|
+
args: array(string$2().max(2048)).max(64).optional(),
|
|
20109
|
+
cwd: string$2().max(1024).optional(),
|
|
20110
|
+
environment: array(string$2().max(4096)).max(64).optional(),
|
|
20111
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20112
|
+
}), TerminalInstanceInfoSchema, {
|
|
20113
|
+
kind: "mutation",
|
|
20114
|
+
auth: "admin"
|
|
20115
|
+
}), method(object({
|
|
20116
|
+
instanceId: string$2().min(1),
|
|
20117
|
+
name: string$2().trim().min(1).max(160).optional(),
|
|
20118
|
+
executable: string$2().max(1024).optional(),
|
|
20119
|
+
args: array(string$2().max(2048)).max(64).optional(),
|
|
20120
|
+
cwd: string$2().max(1024).optional(),
|
|
20121
|
+
environment: array(string$2().max(4096)).max(64).optional(),
|
|
20122
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20002
20123
|
}), TerminalInstanceInfoSchema, {
|
|
20003
20124
|
kind: "mutation",
|
|
20004
20125
|
auth: "admin"
|
|
@@ -20020,7 +20141,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
20020
20141
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
20021
20142
|
profileId: string$2(),
|
|
20022
20143
|
cols: number().int().positive(),
|
|
20023
|
-
rows: number().int().positive()
|
|
20144
|
+
rows: number().int().positive(),
|
|
20145
|
+
executable: string$2().max(1024).optional(),
|
|
20146
|
+
args: array(string$2().max(2048)).max(64).optional(),
|
|
20147
|
+
cwd: string$2().max(1024).optional(),
|
|
20148
|
+
environment: array(string$2().max(4096)).max(64).optional()
|
|
20024
20149
|
}), TerminalSessionInfoSchema, {
|
|
20025
20150
|
kind: "mutation",
|
|
20026
20151
|
auth: "admin"
|
|
@@ -23912,10 +24037,10 @@ var lawnMowerControlCapability = {
|
|
|
23912
24037
|
*
|
|
23913
24038
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
23914
24039
|
* to receive an ordered list of candidate base URLs it should race
|
|
23915
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
23916
|
-
* then public hostname (if a tunnel is
|
|
23917
|
-
* race them with short timeouts and stick with the
|
|
23918
|
-
* session.
|
|
24040
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
24041
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
24042
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
24043
|
+
* winner for the session.
|
|
23919
24044
|
*
|
|
23920
24045
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
23921
24046
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -24070,6 +24195,17 @@ var NotificationEndpointSchema = object({
|
|
|
24070
24195
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
24071
24196
|
resolved: string$2().nullable()
|
|
24072
24197
|
});
|
|
24198
|
+
/**
|
|
24199
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
24200
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
24201
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
24202
|
+
*/
|
|
24203
|
+
var ViewerEndpointsSchema = object({
|
|
24204
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
24205
|
+
baseUrls: array(string$2()).readonly(),
|
|
24206
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
24207
|
+
resolved: array(string$2()).readonly()
|
|
24208
|
+
});
|
|
24073
24209
|
var AllowedAddressesSchema = object({
|
|
24074
24210
|
/**
|
|
24075
24211
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -24078,6 +24214,20 @@ var AllowedAddressesSchema = object({
|
|
|
24078
24214
|
* Network Addresses admin page and persisted by the addon.
|
|
24079
24215
|
*/
|
|
24080
24216
|
addresses: array(string$2()).readonly() });
|
|
24217
|
+
var TlsStatusSchema = object({
|
|
24218
|
+
mode: _enum([
|
|
24219
|
+
"generated",
|
|
24220
|
+
"uploaded",
|
|
24221
|
+
"disabled"
|
|
24222
|
+
]),
|
|
24223
|
+
leafFingerprintSha256: string$2().nullable(),
|
|
24224
|
+
caFingerprintSha256: string$2().nullable(),
|
|
24225
|
+
validTo: string$2().nullable(),
|
|
24226
|
+
sans: array(string$2()),
|
|
24227
|
+
caCertPem: string$2().nullable(),
|
|
24228
|
+
reissueError: string$2().nullable(),
|
|
24229
|
+
restartRequired: boolean()
|
|
24230
|
+
});
|
|
24081
24231
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
24082
24232
|
/**
|
|
24083
24233
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -24087,17 +24237,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
24087
24237
|
*/
|
|
24088
24238
|
port: number().int().min(1).max(65535).optional(),
|
|
24089
24239
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
24090
|
-
* candidate. Default `
|
|
24240
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
24091
24241
|
includeLoopback: boolean().optional(),
|
|
24092
|
-
/** Skip IPv6 entries.
|
|
24093
|
-
*
|
|
24242
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
24243
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
24244
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
24094
24245
|
ipv4Only: boolean().optional(),
|
|
24095
24246
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
24096
24247
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
24097
24248
|
* to avoid mixed-content blocks in the browser. The public
|
|
24098
24249
|
* tunnel always emits `https://` regardless. */
|
|
24099
24250
|
scheme: _enum(["http", "https"]).optional()
|
|
24100
|
-
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string$2().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" })
|
|
24251
|
+
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string$2().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string$2()).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$2().optional() }), TlsStatusSchema, {
|
|
24252
|
+
kind: "mutation",
|
|
24253
|
+
auth: "admin"
|
|
24254
|
+
}), method(object({
|
|
24255
|
+
certPem: string$2().min(1),
|
|
24256
|
+
keyPem: string$2().min(1),
|
|
24257
|
+
caPem: string$2().optional()
|
|
24258
|
+
}), TlsStatusSchema, {
|
|
24259
|
+
kind: "mutation",
|
|
24260
|
+
auth: "admin"
|
|
24261
|
+
}), method(_void(), object({ pem: string$2() })), method(_void(), TlsStatusSchema, {
|
|
24262
|
+
kind: "mutation",
|
|
24263
|
+
auth: "admin"
|
|
24264
|
+
});
|
|
24101
24265
|
var LockControlStatusSchema = object({
|
|
24102
24266
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
24103
24267
|
* failure to reach the target — operator intervention required. */
|
|
@@ -32124,6 +32288,12 @@ Object.freeze({
|
|
|
32124
32288
|
addonId: null,
|
|
32125
32289
|
access: "create"
|
|
32126
32290
|
},
|
|
32291
|
+
"localNetwork.downloadCa": {
|
|
32292
|
+
capName: "local-network",
|
|
32293
|
+
capScope: "system",
|
|
32294
|
+
addonId: null,
|
|
32295
|
+
access: "view"
|
|
32296
|
+
},
|
|
32127
32297
|
"localNetwork.getAllowedAddresses": {
|
|
32128
32298
|
capName: "local-network",
|
|
32129
32299
|
capScope: "system",
|
|
@@ -32148,18 +32318,42 @@ Object.freeze({
|
|
|
32148
32318
|
addonId: null,
|
|
32149
32319
|
access: "view"
|
|
32150
32320
|
},
|
|
32321
|
+
"localNetwork.getTlsStatus": {
|
|
32322
|
+
capName: "local-network",
|
|
32323
|
+
capScope: "system",
|
|
32324
|
+
addonId: null,
|
|
32325
|
+
access: "view"
|
|
32326
|
+
},
|
|
32327
|
+
"localNetwork.getViewerEndpoints": {
|
|
32328
|
+
capName: "local-network",
|
|
32329
|
+
capScope: "system",
|
|
32330
|
+
addonId: null,
|
|
32331
|
+
access: "view"
|
|
32332
|
+
},
|
|
32151
32333
|
"localNetwork.list": {
|
|
32152
32334
|
capName: "local-network",
|
|
32153
32335
|
capScope: "system",
|
|
32154
32336
|
addonId: null,
|
|
32155
32337
|
access: "view"
|
|
32156
32338
|
},
|
|
32339
|
+
"localNetwork.regenerateCertificate": {
|
|
32340
|
+
capName: "local-network",
|
|
32341
|
+
capScope: "system",
|
|
32342
|
+
addonId: null,
|
|
32343
|
+
access: "create"
|
|
32344
|
+
},
|
|
32157
32345
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
32158
32346
|
capName: "local-network",
|
|
32159
32347
|
capScope: "system",
|
|
32160
32348
|
addonId: null,
|
|
32161
32349
|
access: "delete"
|
|
32162
32350
|
},
|
|
32351
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
32352
|
+
capName: "local-network",
|
|
32353
|
+
capScope: "system",
|
|
32354
|
+
addonId: null,
|
|
32355
|
+
access: "create"
|
|
32356
|
+
},
|
|
32163
32357
|
"localNetwork.setAllowedAddresses": {
|
|
32164
32358
|
capName: "local-network",
|
|
32165
32359
|
capScope: "system",
|
|
@@ -32172,6 +32366,18 @@ Object.freeze({
|
|
|
32172
32366
|
addonId: null,
|
|
32173
32367
|
access: "create"
|
|
32174
32368
|
},
|
|
32369
|
+
"localNetwork.setViewerEndpoints": {
|
|
32370
|
+
capName: "local-network",
|
|
32371
|
+
capScope: "system",
|
|
32372
|
+
addonId: null,
|
|
32373
|
+
access: "create"
|
|
32374
|
+
},
|
|
32375
|
+
"localNetwork.uploadCertificate": {
|
|
32376
|
+
capName: "local-network",
|
|
32377
|
+
capScope: "system",
|
|
32378
|
+
addonId: null,
|
|
32379
|
+
access: "create"
|
|
32380
|
+
},
|
|
32175
32381
|
"lockControl.lock": {
|
|
32176
32382
|
capName: "lock-control",
|
|
32177
32383
|
capScope: "device",
|
|
@@ -35052,6 +35258,12 @@ Object.freeze({
|
|
|
35052
35258
|
addonId: null,
|
|
35053
35259
|
access: "create"
|
|
35054
35260
|
},
|
|
35261
|
+
"terminalSession.updateInstance": {
|
|
35262
|
+
capName: "terminal-session",
|
|
35263
|
+
capScope: "system",
|
|
35264
|
+
addonId: null,
|
|
35265
|
+
access: "create"
|
|
35266
|
+
},
|
|
35055
35267
|
"terminalSession.writeInput": {
|
|
35056
35268
|
capName: "terminal-session",
|
|
35057
35269
|
capScope: "system",
|
|
@@ -37539,6 +37751,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
37539
37751
|
}]
|
|
37540
37752
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
37541
37753
|
string$2().min(1);
|
|
37754
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
37755
|
+
stepId: "face-embedding",
|
|
37756
|
+
key: "minLandmarkFaceSize",
|
|
37757
|
+
label: "Min face size for recognition (detection px)",
|
|
37758
|
+
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.",
|
|
37759
|
+
type: "slider",
|
|
37760
|
+
min: 0,
|
|
37761
|
+
max: 64,
|
|
37762
|
+
step: 2,
|
|
37763
|
+
default: 24
|
|
37764
|
+
}];
|
|
37765
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
37766
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
37767
|
+
}
|
|
37768
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
37769
|
+
function readClusterStepSettings(config) {
|
|
37770
|
+
const out = {};
|
|
37771
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
37772
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
37773
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
37774
|
+
const existing = out[field.stepId] ?? {};
|
|
37775
|
+
out[field.stepId] = {
|
|
37776
|
+
...existing,
|
|
37777
|
+
[field.key]: value
|
|
37778
|
+
};
|
|
37779
|
+
}
|
|
37780
|
+
return out;
|
|
37781
|
+
}
|
|
37782
|
+
readClusterStepSettings({});
|
|
37542
37783
|
object({
|
|
37543
37784
|
/**
|
|
37544
37785
|
* Fraction of the box's own size added on EACH side before cutting.
|
package/dist/addon.mjs
CHANGED
|
@@ -11,7 +11,7 @@ import { networkInterfaces, tmpdir, uptime } from "node:os";
|
|
|
11
11
|
import { finished } from "node:stream/promises";
|
|
12
12
|
import { createConnection, createServer as createServer$2 } from "node:net";
|
|
13
13
|
import * as dgram from "node:dgram";
|
|
14
|
-
//#region ../types/dist/event-category-
|
|
14
|
+
//#region ../types/dist/event-category-CIa_iT6b.mjs
|
|
15
15
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
16
16
|
EventCategory["SystemBoot"] = "system.boot";
|
|
17
17
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -27,6 +27,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
27
27
|
*/
|
|
28
28
|
EventCategory["SystemRestartCompleted"] = "system.restart-completed";
|
|
29
29
|
/**
|
|
30
|
+
* The hub reissued its own TLS certificate at boot (`ensureTlsCert`).
|
|
31
|
+
* Emitted only when the material on disk actually changed, so an
|
|
32
|
+
* operator who trusted the old certificate by hand is told rather than
|
|
33
|
+
* discovering it as a browser error. Payload `TlsCertChangedPayload`.
|
|
34
|
+
*
|
|
35
|
+
* Rule: docs/decisions/adr-0227-*.md
|
|
36
|
+
*/
|
|
37
|
+
EventCategory["SystemTlsCertChanged"] = "system.tls-cert-changed";
|
|
38
|
+
/**
|
|
30
39
|
* A newer addon or server-root package version was found by the
|
|
31
40
|
* authoritative registry check. Emitted once when any observed
|
|
32
41
|
* `latestVersion` changes (or a package/node first appears behind);
|
|
@@ -8023,6 +8032,15 @@ var LabelDefinitionSchema = object({
|
|
|
8023
8032
|
description: string$2().optional(),
|
|
8024
8033
|
icon: string$2().optional()
|
|
8025
8034
|
});
|
|
8035
|
+
var ClassMapDefinitionSchema = object({
|
|
8036
|
+
mapping: record(string$2(), _enum([
|
|
8037
|
+
"person",
|
|
8038
|
+
"vehicle",
|
|
8039
|
+
"animal",
|
|
8040
|
+
"package"
|
|
8041
|
+
])),
|
|
8042
|
+
preserveOriginal: boolean()
|
|
8043
|
+
});
|
|
8026
8044
|
var MODEL_FORMATS = [
|
|
8027
8045
|
"onnx",
|
|
8028
8046
|
"coreml",
|
|
@@ -8201,7 +8219,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8201
8219
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8202
8220
|
* is a presentation overlay resolved back to an `id`.
|
|
8203
8221
|
*/
|
|
8204
|
-
group: ModelVariantGroupSchema.optional()
|
|
8222
|
+
group: ModelVariantGroupSchema.optional(),
|
|
8223
|
+
/**
|
|
8224
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
8225
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8226
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8227
|
+
*/
|
|
8228
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8205
8229
|
});
|
|
8206
8230
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8207
8231
|
format: literal("openvino"),
|
|
@@ -8230,7 +8254,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8230
8254
|
"ocr",
|
|
8231
8255
|
"segmentation"
|
|
8232
8256
|
]),
|
|
8233
|
-
faceAlignment: boolean().optional()
|
|
8257
|
+
faceAlignment: boolean().optional(),
|
|
8258
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8234
8259
|
});
|
|
8235
8260
|
var ConvertResultSchema = object({
|
|
8236
8261
|
entry: ModelCatalogEntrySchema,
|
|
@@ -17589,6 +17614,33 @@ var NativeCropRefSchema = object({
|
|
|
17589
17614
|
h: number()
|
|
17590
17615
|
})
|
|
17591
17616
|
});
|
|
17617
|
+
object({
|
|
17618
|
+
crop: object({
|
|
17619
|
+
left: number(),
|
|
17620
|
+
top: number(),
|
|
17621
|
+
width: number().positive(),
|
|
17622
|
+
height: number().positive()
|
|
17623
|
+
}).optional(),
|
|
17624
|
+
content: object({
|
|
17625
|
+
width: number().int().positive(),
|
|
17626
|
+
height: number().int().positive()
|
|
17627
|
+
}),
|
|
17628
|
+
fit: _enum(["stretch", "contain"]),
|
|
17629
|
+
format: _enum([
|
|
17630
|
+
"rgb",
|
|
17631
|
+
"gray",
|
|
17632
|
+
"jpeg"
|
|
17633
|
+
])
|
|
17634
|
+
});
|
|
17635
|
+
var FrameRefSchema = object({
|
|
17636
|
+
registryId: string$2().min(1),
|
|
17637
|
+
id: string$2().min(1),
|
|
17638
|
+
width: number().int().positive(),
|
|
17639
|
+
height: number().int().positive(),
|
|
17640
|
+
format: _enum(["rgb", "gray"]),
|
|
17641
|
+
timestamp: number(),
|
|
17642
|
+
capturedAt: number().optional()
|
|
17643
|
+
});
|
|
17592
17644
|
var ModelFormatSchema$1 = _enum([
|
|
17593
17645
|
"onnx",
|
|
17594
17646
|
"coreml",
|
|
@@ -17833,6 +17885,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
17833
17885
|
steps: array(PipelineStepInputSchema).min(1),
|
|
17834
17886
|
frame: FrameInputSchema.optional(),
|
|
17835
17887
|
/**
|
|
17888
|
+
* Process-local lazy frame. Valid only when caller and provider resolve
|
|
17889
|
+
* in the same execution-group process; split/cross-node callers use
|
|
17890
|
+
* `frame`/`image` inline compatibility instead.
|
|
17891
|
+
*/
|
|
17892
|
+
frameRef: FrameRefSchema.optional(),
|
|
17893
|
+
/**
|
|
17836
17894
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
17837
17895
|
* the decoded pixels live in. One more member of the one-of
|
|
17838
17896
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -18128,7 +18186,10 @@ var NativeCropResultSchema = object({
|
|
|
18128
18186
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
18129
18187
|
* `keyFrame`) can reject a degraded fallback:
|
|
18130
18188
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
18131
|
-
* quality path).
|
|
18189
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
18190
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
18191
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
18192
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
18132
18193
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
18133
18194
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
18134
18195
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18619,12 +18680,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18619
18680
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18620
18681
|
* working unchanged when they switch to reading from the runner cap.
|
|
18621
18682
|
*/
|
|
18683
|
+
var FrameLazyCountersSchema = object({
|
|
18684
|
+
framesDecoded: number(),
|
|
18685
|
+
framesAdmitted: number(),
|
|
18686
|
+
framesDroppedPixelFree: number(),
|
|
18687
|
+
viewsMaterialized: number(),
|
|
18688
|
+
viewsSkipped: number(),
|
|
18689
|
+
workerToRunnerBytes: number(),
|
|
18690
|
+
runnerToPoolRawBytes: number(),
|
|
18691
|
+
runnerToPoolJpegBytes: number(),
|
|
18692
|
+
onDemandFullFrameRequests: number(),
|
|
18693
|
+
onDemandCropRequests: number(),
|
|
18694
|
+
nativeHits: number(),
|
|
18695
|
+
nativeMisses: number(),
|
|
18696
|
+
tileHits: number(),
|
|
18697
|
+
tileMisses: number(),
|
|
18698
|
+
fallbackHits: number(),
|
|
18699
|
+
fallbackMisses: number(),
|
|
18700
|
+
retainedWritesAvoided: number(),
|
|
18701
|
+
residentRefs: number(),
|
|
18702
|
+
residentBytes: number(),
|
|
18703
|
+
releases: number(),
|
|
18704
|
+
evictions: number(),
|
|
18705
|
+
staleMisses: number()
|
|
18706
|
+
});
|
|
18707
|
+
var FrameLazyMetricsSchema = object({
|
|
18708
|
+
node: FrameLazyCountersSchema,
|
|
18709
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
18710
|
+
});
|
|
18622
18711
|
var RunnerLocalMetricsSchema = object({
|
|
18623
18712
|
nodeId: string$2(),
|
|
18624
18713
|
activeCameras: number(),
|
|
18625
18714
|
throttledCameras: number(),
|
|
18626
18715
|
avgInferenceTimeMs: number(),
|
|
18627
|
-
queueDepth: number()
|
|
18716
|
+
queueDepth: number(),
|
|
18717
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18628
18718
|
});
|
|
18629
18719
|
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({
|
|
18630
18720
|
handle: FrameHandleSchema,
|
|
@@ -19924,6 +20014,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string$2(),
|
|
|
19924
20014
|
location: StorageLocationSchema,
|
|
19925
20015
|
relativePath: string$2()
|
|
19926
20016
|
}), _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" });
|
|
20017
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
20018
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
20019
|
+
var ProfileSettingsBagSchema = record(string$2(), unknown());
|
|
19927
20020
|
/**
|
|
19928
20021
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
19929
20022
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -19953,7 +20046,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
19953
20046
|
var TerminalProfileInfoSchema = object({
|
|
19954
20047
|
profileId: string$2(),
|
|
19955
20048
|
label: string$2(),
|
|
19956
|
-
description: string$2().optional()
|
|
20049
|
+
description: string$2().optional(),
|
|
20050
|
+
/** Spawn defaults the instance form copies on create. */
|
|
20051
|
+
executable: string$2().optional(),
|
|
20052
|
+
args: array(string$2()).readonly().optional(),
|
|
20053
|
+
cwd: string$2().optional(),
|
|
20054
|
+
environment: array(string$2()).readonly().optional(),
|
|
20055
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
20056
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
19957
20057
|
});
|
|
19958
20058
|
/**
|
|
19959
20059
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -19966,7 +20066,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
19966
20066
|
profileId: string$2(),
|
|
19967
20067
|
profileLabel: string$2(),
|
|
19968
20068
|
name: string$2(),
|
|
19969
|
-
enabled: boolean()
|
|
20069
|
+
enabled: boolean(),
|
|
20070
|
+
executable: string$2(),
|
|
20071
|
+
args: array(string$2()).readonly(),
|
|
20072
|
+
cwd: string$2(),
|
|
20073
|
+
environment: array(string$2()).readonly(),
|
|
20074
|
+
profileSettings: ProfileSettingsBagSchema
|
|
19970
20075
|
});
|
|
19971
20076
|
var TerminalLegacyCameraSchema = object({
|
|
19972
20077
|
stableId: string$2(),
|
|
@@ -19996,7 +20101,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
19996
20101
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
19997
20102
|
targetNodeId: string$2().min(1),
|
|
19998
20103
|
profileId: string$2().min(1),
|
|
19999
|
-
name: string$2().trim().min(1).max(160).optional()
|
|
20104
|
+
name: string$2().trim().min(1).max(160).optional(),
|
|
20105
|
+
executable: string$2().max(1024).optional(),
|
|
20106
|
+
args: array(string$2().max(2048)).max(64).optional(),
|
|
20107
|
+
cwd: string$2().max(1024).optional(),
|
|
20108
|
+
environment: array(string$2().max(4096)).max(64).optional(),
|
|
20109
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20110
|
+
}), TerminalInstanceInfoSchema, {
|
|
20111
|
+
kind: "mutation",
|
|
20112
|
+
auth: "admin"
|
|
20113
|
+
}), method(object({
|
|
20114
|
+
instanceId: string$2().min(1),
|
|
20115
|
+
name: string$2().trim().min(1).max(160).optional(),
|
|
20116
|
+
executable: string$2().max(1024).optional(),
|
|
20117
|
+
args: array(string$2().max(2048)).max(64).optional(),
|
|
20118
|
+
cwd: string$2().max(1024).optional(),
|
|
20119
|
+
environment: array(string$2().max(4096)).max(64).optional(),
|
|
20120
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20000
20121
|
}), TerminalInstanceInfoSchema, {
|
|
20001
20122
|
kind: "mutation",
|
|
20002
20123
|
auth: "admin"
|
|
@@ -20018,7 +20139,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
20018
20139
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
20019
20140
|
profileId: string$2(),
|
|
20020
20141
|
cols: number().int().positive(),
|
|
20021
|
-
rows: number().int().positive()
|
|
20142
|
+
rows: number().int().positive(),
|
|
20143
|
+
executable: string$2().max(1024).optional(),
|
|
20144
|
+
args: array(string$2().max(2048)).max(64).optional(),
|
|
20145
|
+
cwd: string$2().max(1024).optional(),
|
|
20146
|
+
environment: array(string$2().max(4096)).max(64).optional()
|
|
20022
20147
|
}), TerminalSessionInfoSchema, {
|
|
20023
20148
|
kind: "mutation",
|
|
20024
20149
|
auth: "admin"
|
|
@@ -23910,10 +24035,10 @@ var lawnMowerControlCapability = {
|
|
|
23910
24035
|
*
|
|
23911
24036
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
23912
24037
|
* to receive an ordered list of candidate base URLs it should race
|
|
23913
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
23914
|
-
* then public hostname (if a tunnel is
|
|
23915
|
-
* race them with short timeouts and stick with the
|
|
23916
|
-
* session.
|
|
24038
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
24039
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
24040
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
24041
|
+
* winner for the session.
|
|
23917
24042
|
*
|
|
23918
24043
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
23919
24044
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -24068,6 +24193,17 @@ var NotificationEndpointSchema = object({
|
|
|
24068
24193
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
24069
24194
|
resolved: string$2().nullable()
|
|
24070
24195
|
});
|
|
24196
|
+
/**
|
|
24197
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
24198
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
24199
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
24200
|
+
*/
|
|
24201
|
+
var ViewerEndpointsSchema = object({
|
|
24202
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
24203
|
+
baseUrls: array(string$2()).readonly(),
|
|
24204
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
24205
|
+
resolved: array(string$2()).readonly()
|
|
24206
|
+
});
|
|
24071
24207
|
var AllowedAddressesSchema = object({
|
|
24072
24208
|
/**
|
|
24073
24209
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -24076,6 +24212,20 @@ var AllowedAddressesSchema = object({
|
|
|
24076
24212
|
* Network Addresses admin page and persisted by the addon.
|
|
24077
24213
|
*/
|
|
24078
24214
|
addresses: array(string$2()).readonly() });
|
|
24215
|
+
var TlsStatusSchema = object({
|
|
24216
|
+
mode: _enum([
|
|
24217
|
+
"generated",
|
|
24218
|
+
"uploaded",
|
|
24219
|
+
"disabled"
|
|
24220
|
+
]),
|
|
24221
|
+
leafFingerprintSha256: string$2().nullable(),
|
|
24222
|
+
caFingerprintSha256: string$2().nullable(),
|
|
24223
|
+
validTo: string$2().nullable(),
|
|
24224
|
+
sans: array(string$2()),
|
|
24225
|
+
caCertPem: string$2().nullable(),
|
|
24226
|
+
reissueError: string$2().nullable(),
|
|
24227
|
+
restartRequired: boolean()
|
|
24228
|
+
});
|
|
24079
24229
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
24080
24230
|
/**
|
|
24081
24231
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -24085,17 +24235,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
24085
24235
|
*/
|
|
24086
24236
|
port: number().int().min(1).max(65535).optional(),
|
|
24087
24237
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
24088
|
-
* candidate. Default `
|
|
24238
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
24089
24239
|
includeLoopback: boolean().optional(),
|
|
24090
|
-
/** Skip IPv6 entries.
|
|
24091
|
-
*
|
|
24240
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
24241
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
24242
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
24092
24243
|
ipv4Only: boolean().optional(),
|
|
24093
24244
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
24094
24245
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
24095
24246
|
* to avoid mixed-content blocks in the browser. The public
|
|
24096
24247
|
* tunnel always emits `https://` regardless. */
|
|
24097
24248
|
scheme: _enum(["http", "https"]).optional()
|
|
24098
|
-
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string$2().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" })
|
|
24249
|
+
}), GetConnectionEndpointsResultSchema), method(_void(), NotificationEndpointSchema), method(object({ baseUrl: string$2().nullable() }), NotificationEndpointSchema, { kind: "mutation" }), method(_void(), ViewerEndpointsSchema), method(object({ baseUrls: array(string$2()).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$2().optional() }), TlsStatusSchema, {
|
|
24250
|
+
kind: "mutation",
|
|
24251
|
+
auth: "admin"
|
|
24252
|
+
}), method(object({
|
|
24253
|
+
certPem: string$2().min(1),
|
|
24254
|
+
keyPem: string$2().min(1),
|
|
24255
|
+
caPem: string$2().optional()
|
|
24256
|
+
}), TlsStatusSchema, {
|
|
24257
|
+
kind: "mutation",
|
|
24258
|
+
auth: "admin"
|
|
24259
|
+
}), method(_void(), object({ pem: string$2() })), method(_void(), TlsStatusSchema, {
|
|
24260
|
+
kind: "mutation",
|
|
24261
|
+
auth: "admin"
|
|
24262
|
+
});
|
|
24099
24263
|
var LockControlStatusSchema = object({
|
|
24100
24264
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
24101
24265
|
* failure to reach the target — operator intervention required. */
|
|
@@ -32122,6 +32286,12 @@ Object.freeze({
|
|
|
32122
32286
|
addonId: null,
|
|
32123
32287
|
access: "create"
|
|
32124
32288
|
},
|
|
32289
|
+
"localNetwork.downloadCa": {
|
|
32290
|
+
capName: "local-network",
|
|
32291
|
+
capScope: "system",
|
|
32292
|
+
addonId: null,
|
|
32293
|
+
access: "view"
|
|
32294
|
+
},
|
|
32125
32295
|
"localNetwork.getAllowedAddresses": {
|
|
32126
32296
|
capName: "local-network",
|
|
32127
32297
|
capScope: "system",
|
|
@@ -32146,18 +32316,42 @@ Object.freeze({
|
|
|
32146
32316
|
addonId: null,
|
|
32147
32317
|
access: "view"
|
|
32148
32318
|
},
|
|
32319
|
+
"localNetwork.getTlsStatus": {
|
|
32320
|
+
capName: "local-network",
|
|
32321
|
+
capScope: "system",
|
|
32322
|
+
addonId: null,
|
|
32323
|
+
access: "view"
|
|
32324
|
+
},
|
|
32325
|
+
"localNetwork.getViewerEndpoints": {
|
|
32326
|
+
capName: "local-network",
|
|
32327
|
+
capScope: "system",
|
|
32328
|
+
addonId: null,
|
|
32329
|
+
access: "view"
|
|
32330
|
+
},
|
|
32149
32331
|
"localNetwork.list": {
|
|
32150
32332
|
capName: "local-network",
|
|
32151
32333
|
capScope: "system",
|
|
32152
32334
|
addonId: null,
|
|
32153
32335
|
access: "view"
|
|
32154
32336
|
},
|
|
32337
|
+
"localNetwork.regenerateCertificate": {
|
|
32338
|
+
capName: "local-network",
|
|
32339
|
+
capScope: "system",
|
|
32340
|
+
addonId: null,
|
|
32341
|
+
access: "create"
|
|
32342
|
+
},
|
|
32155
32343
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
32156
32344
|
capName: "local-network",
|
|
32157
32345
|
capScope: "system",
|
|
32158
32346
|
addonId: null,
|
|
32159
32347
|
access: "delete"
|
|
32160
32348
|
},
|
|
32349
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
32350
|
+
capName: "local-network",
|
|
32351
|
+
capScope: "system",
|
|
32352
|
+
addonId: null,
|
|
32353
|
+
access: "create"
|
|
32354
|
+
},
|
|
32161
32355
|
"localNetwork.setAllowedAddresses": {
|
|
32162
32356
|
capName: "local-network",
|
|
32163
32357
|
capScope: "system",
|
|
@@ -32170,6 +32364,18 @@ Object.freeze({
|
|
|
32170
32364
|
addonId: null,
|
|
32171
32365
|
access: "create"
|
|
32172
32366
|
},
|
|
32367
|
+
"localNetwork.setViewerEndpoints": {
|
|
32368
|
+
capName: "local-network",
|
|
32369
|
+
capScope: "system",
|
|
32370
|
+
addonId: null,
|
|
32371
|
+
access: "create"
|
|
32372
|
+
},
|
|
32373
|
+
"localNetwork.uploadCertificate": {
|
|
32374
|
+
capName: "local-network",
|
|
32375
|
+
capScope: "system",
|
|
32376
|
+
addonId: null,
|
|
32377
|
+
access: "create"
|
|
32378
|
+
},
|
|
32173
32379
|
"lockControl.lock": {
|
|
32174
32380
|
capName: "lock-control",
|
|
32175
32381
|
capScope: "device",
|
|
@@ -35050,6 +35256,12 @@ Object.freeze({
|
|
|
35050
35256
|
addonId: null,
|
|
35051
35257
|
access: "create"
|
|
35052
35258
|
},
|
|
35259
|
+
"terminalSession.updateInstance": {
|
|
35260
|
+
capName: "terminal-session",
|
|
35261
|
+
capScope: "system",
|
|
35262
|
+
addonId: null,
|
|
35263
|
+
access: "create"
|
|
35264
|
+
},
|
|
35053
35265
|
"terminalSession.writeInput": {
|
|
35054
35266
|
capName: "terminal-session",
|
|
35055
35267
|
capScope: "system",
|
|
@@ -37537,6 +37749,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
37537
37749
|
}]
|
|
37538
37750
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
37539
37751
|
string$2().min(1);
|
|
37752
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
37753
|
+
stepId: "face-embedding",
|
|
37754
|
+
key: "minLandmarkFaceSize",
|
|
37755
|
+
label: "Min face size for recognition (detection px)",
|
|
37756
|
+
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.",
|
|
37757
|
+
type: "slider",
|
|
37758
|
+
min: 0,
|
|
37759
|
+
max: 64,
|
|
37760
|
+
step: 2,
|
|
37761
|
+
default: 24
|
|
37762
|
+
}];
|
|
37763
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
37764
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
37765
|
+
}
|
|
37766
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
37767
|
+
function readClusterStepSettings(config) {
|
|
37768
|
+
const out = {};
|
|
37769
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
37770
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
37771
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
37772
|
+
const existing = out[field.stepId] ?? {};
|
|
37773
|
+
out[field.stepId] = {
|
|
37774
|
+
...existing,
|
|
37775
|
+
[field.key]: value
|
|
37776
|
+
};
|
|
37777
|
+
}
|
|
37778
|
+
return out;
|
|
37779
|
+
}
|
|
37780
|
+
readClusterStepSettings({});
|
|
37540
37781
|
object({
|
|
37541
37782
|
/**
|
|
37542
37783
|
* 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-matter-broker",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.26",
|
|
4
4
|
"description": "Matter broker addon for CamStack — owns a Matter fabric (commissioning + the long-lived controller) via the matter.js controller and brokers commissioned Matter nodes into CamStack",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|