@camstack/addon-provider-homeassistant 1.2.38 → 1.2.40
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 +1 -1
- package/dist/addon.mjs +1 -1
- package/dist/{dist-3KejG9q2.js → dist-BoTrJXhA.js} +258 -17
- package/dist/{dist-CJ3sUHKH.mjs → dist-DeursJRH.mjs} +258 -17
- package/dist/ha-export/ha-export.addon.js +1 -1
- package/dist/ha-export/ha-export.addon.mjs +1 -1
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_dist = require("./dist-
|
|
2
|
+
const require_dist = require("./dist-BoTrJXhA.js");
|
|
3
3
|
let node_crypto = require("node:crypto");
|
|
4
4
|
let node_zlib = require("node:zlib");
|
|
5
5
|
//#region src/ha-device-source.ts
|
package/dist/addon.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as pressureSensorCapability, A as coverCapability, B as imageCapability, C as buttonCapability, Ct as record, D as connectivityCapability, Dt as url, E as colorCapability, Et as unknown, F as fanControlCapability, G as normalizeUnit, H as lockControlCapability, I as floodCapability, J as numericSensorCapability, K as notificationOutputCapability, L as gasCapability, N as enumSensorCapability, O as contactCapability, Ot as EventCategory, P as eventEmitterCapability, Q as presenceCapability, R as humidifierCapability, S as buildAddonRouteProvider, St as object, T as climateControlCapability, Tt as union, U as mediaPlayerCapability, V as lawnMowerControlCapability, W as motionCapability, X as powerMeterCapability, Z as prepareNotification, _ as batteryCapability, _t as _enum, at as updateCapability, b as brightnessCapability, bt as literal, ct as vibrationCapability, d as accessoriesCapability, dt as errMsg, et as scriptRunnerCapability, f as addonRoutesCapability, g as automationControlCapability, gt as createEvent, h as ambientLightSensorCapability, ht as DeviceType, it as temperatureSensorCapability, j as deviceAdoptionCapability, k as controlCapability, lt as waterHeaterCapability, m as alarmPanelCapability, mt as DeviceRole, n as BaseDevice, nt as switchCapability, o as EnumSensorDateTimeFormatSchema, ot as vacuumControlCapability, p as airQualitySensorCapability, pt as DeviceFeature, q as notifierCapability, r as BaseDeviceProvider, rt as tamperCapability, st as valveCapability, tt as smokeCapability, u as TargetSchema, ut as weatherCapability, v as bestLocationMatch, vt as array, w as carbonMonoxideCapability, wt as string, x as brokerCapability, xt as number, y as binaryCapability, yt as discriminatedUnion, z as humiditySensorCapability } from "./dist-
|
|
1
|
+
import { $ as pressureSensorCapability, A as coverCapability, B as imageCapability, C as buttonCapability, Ct as record, D as connectivityCapability, Dt as url, E as colorCapability, Et as unknown, F as fanControlCapability, G as normalizeUnit, H as lockControlCapability, I as floodCapability, J as numericSensorCapability, K as notificationOutputCapability, L as gasCapability, N as enumSensorCapability, O as contactCapability, Ot as EventCategory, P as eventEmitterCapability, Q as presenceCapability, R as humidifierCapability, S as buildAddonRouteProvider, St as object, T as climateControlCapability, Tt as union, U as mediaPlayerCapability, V as lawnMowerControlCapability, W as motionCapability, X as powerMeterCapability, Z as prepareNotification, _ as batteryCapability, _t as _enum, at as updateCapability, b as brightnessCapability, bt as literal, ct as vibrationCapability, d as accessoriesCapability, dt as errMsg, et as scriptRunnerCapability, f as addonRoutesCapability, g as automationControlCapability, gt as createEvent, h as ambientLightSensorCapability, ht as DeviceType, it as temperatureSensorCapability, j as deviceAdoptionCapability, k as controlCapability, lt as waterHeaterCapability, m as alarmPanelCapability, mt as DeviceRole, n as BaseDevice, nt as switchCapability, o as EnumSensorDateTimeFormatSchema, ot as vacuumControlCapability, p as airQualitySensorCapability, pt as DeviceFeature, q as notifierCapability, r as BaseDeviceProvider, rt as tamperCapability, st as valveCapability, tt as smokeCapability, u as TargetSchema, ut as weatherCapability, v as bestLocationMatch, vt as array, w as carbonMonoxideCapability, wt as string, x as brokerCapability, xt as number, y as binaryCapability, yt as discriminatedUnion, z as humiditySensorCapability } from "./dist-DeursJRH.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { brotliCompressSync, deflateSync, gzipSync } from "node:zlib";
|
|
4
4
|
//#region src/ha-device-source.ts
|
|
@@ -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);
|
|
@@ -8129,6 +8138,15 @@ var LabelDefinitionSchema = object({
|
|
|
8129
8138
|
description: string().optional(),
|
|
8130
8139
|
icon: string().optional()
|
|
8131
8140
|
});
|
|
8141
|
+
var ClassMapDefinitionSchema = object({
|
|
8142
|
+
mapping: record(string(), _enum([
|
|
8143
|
+
"person",
|
|
8144
|
+
"vehicle",
|
|
8145
|
+
"animal",
|
|
8146
|
+
"package"
|
|
8147
|
+
])),
|
|
8148
|
+
preserveOriginal: boolean()
|
|
8149
|
+
});
|
|
8132
8150
|
var MODEL_FORMATS = [
|
|
8133
8151
|
"onnx",
|
|
8134
8152
|
"coreml",
|
|
@@ -8307,7 +8325,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8307
8325
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8308
8326
|
* is a presentation overlay resolved back to an `id`.
|
|
8309
8327
|
*/
|
|
8310
|
-
group: ModelVariantGroupSchema.optional()
|
|
8328
|
+
group: ModelVariantGroupSchema.optional(),
|
|
8329
|
+
/**
|
|
8330
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
8331
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8332
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8333
|
+
*/
|
|
8334
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8311
8335
|
});
|
|
8312
8336
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8313
8337
|
format: literal("openvino"),
|
|
@@ -8336,7 +8360,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8336
8360
|
"ocr",
|
|
8337
8361
|
"segmentation"
|
|
8338
8362
|
]),
|
|
8339
|
-
faceAlignment: boolean().optional()
|
|
8363
|
+
faceAlignment: boolean().optional(),
|
|
8364
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8340
8365
|
});
|
|
8341
8366
|
var ConvertResultSchema = object({
|
|
8342
8367
|
entry: ModelCatalogEntrySchema,
|
|
@@ -17804,6 +17829,33 @@ var NativeCropRefSchema = object({
|
|
|
17804
17829
|
h: number()
|
|
17805
17830
|
})
|
|
17806
17831
|
});
|
|
17832
|
+
object({
|
|
17833
|
+
crop: object({
|
|
17834
|
+
left: number(),
|
|
17835
|
+
top: number(),
|
|
17836
|
+
width: number().positive(),
|
|
17837
|
+
height: number().positive()
|
|
17838
|
+
}).optional(),
|
|
17839
|
+
content: object({
|
|
17840
|
+
width: number().int().positive(),
|
|
17841
|
+
height: number().int().positive()
|
|
17842
|
+
}),
|
|
17843
|
+
fit: _enum(["stretch", "contain"]),
|
|
17844
|
+
format: _enum([
|
|
17845
|
+
"rgb",
|
|
17846
|
+
"gray",
|
|
17847
|
+
"jpeg"
|
|
17848
|
+
])
|
|
17849
|
+
});
|
|
17850
|
+
var FrameRefSchema = object({
|
|
17851
|
+
registryId: string().min(1),
|
|
17852
|
+
id: string().min(1),
|
|
17853
|
+
width: number().int().positive(),
|
|
17854
|
+
height: number().int().positive(),
|
|
17855
|
+
format: _enum(["rgb", "gray"]),
|
|
17856
|
+
timestamp: number(),
|
|
17857
|
+
capturedAt: number().optional()
|
|
17858
|
+
});
|
|
17807
17859
|
var ModelFormatSchema$1 = _enum([
|
|
17808
17860
|
"onnx",
|
|
17809
17861
|
"coreml",
|
|
@@ -18048,6 +18100,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
18048
18100
|
steps: array(PipelineStepInputSchema).min(1),
|
|
18049
18101
|
frame: FrameInputSchema.optional(),
|
|
18050
18102
|
/**
|
|
18103
|
+
* Process-local lazy frame. Valid only when caller and provider resolve
|
|
18104
|
+
* in the same execution-group process; split/cross-node callers use
|
|
18105
|
+
* `frame`/`image` inline compatibility instead.
|
|
18106
|
+
*/
|
|
18107
|
+
frameRef: FrameRefSchema.optional(),
|
|
18108
|
+
/**
|
|
18051
18109
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
18052
18110
|
* the decoded pixels live in. One more member of the one-of
|
|
18053
18111
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -18343,7 +18401,10 @@ var NativeCropResultSchema = object({
|
|
|
18343
18401
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
18344
18402
|
* `keyFrame`) can reject a degraded fallback:
|
|
18345
18403
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
18346
|
-
* quality path).
|
|
18404
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
18405
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
18406
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
18407
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
18347
18408
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
18348
18409
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
18349
18410
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18834,12 +18895,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18834
18895
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18835
18896
|
* working unchanged when they switch to reading from the runner cap.
|
|
18836
18897
|
*/
|
|
18898
|
+
var FrameLazyCountersSchema = object({
|
|
18899
|
+
framesDecoded: number(),
|
|
18900
|
+
framesAdmitted: number(),
|
|
18901
|
+
framesDroppedPixelFree: number(),
|
|
18902
|
+
viewsMaterialized: number(),
|
|
18903
|
+
viewsSkipped: number(),
|
|
18904
|
+
workerToRunnerBytes: number(),
|
|
18905
|
+
runnerToPoolRawBytes: number(),
|
|
18906
|
+
runnerToPoolJpegBytes: number(),
|
|
18907
|
+
onDemandFullFrameRequests: number(),
|
|
18908
|
+
onDemandCropRequests: number(),
|
|
18909
|
+
nativeHits: number(),
|
|
18910
|
+
nativeMisses: number(),
|
|
18911
|
+
tileHits: number(),
|
|
18912
|
+
tileMisses: number(),
|
|
18913
|
+
fallbackHits: number(),
|
|
18914
|
+
fallbackMisses: number(),
|
|
18915
|
+
retainedWritesAvoided: number(),
|
|
18916
|
+
residentRefs: number(),
|
|
18917
|
+
residentBytes: number(),
|
|
18918
|
+
releases: number(),
|
|
18919
|
+
evictions: number(),
|
|
18920
|
+
staleMisses: number()
|
|
18921
|
+
});
|
|
18922
|
+
var FrameLazyMetricsSchema = object({
|
|
18923
|
+
node: FrameLazyCountersSchema,
|
|
18924
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
18925
|
+
});
|
|
18837
18926
|
var RunnerLocalMetricsSchema = object({
|
|
18838
18927
|
nodeId: string(),
|
|
18839
18928
|
activeCameras: number(),
|
|
18840
18929
|
throttledCameras: number(),
|
|
18841
18930
|
avgInferenceTimeMs: number(),
|
|
18842
|
-
queueDepth: number()
|
|
18931
|
+
queueDepth: number(),
|
|
18932
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18843
18933
|
});
|
|
18844
18934
|
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({
|
|
18845
18935
|
handle: FrameHandleSchema,
|
|
@@ -20139,6 +20229,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
20139
20229
|
location: StorageLocationSchema,
|
|
20140
20230
|
relativePath: string()
|
|
20141
20231
|
}), _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" });
|
|
20232
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
20233
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
20234
|
+
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
20142
20235
|
/**
|
|
20143
20236
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
20144
20237
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -20168,7 +20261,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
20168
20261
|
var TerminalProfileInfoSchema = object({
|
|
20169
20262
|
profileId: string(),
|
|
20170
20263
|
label: string(),
|
|
20171
|
-
description: string().optional()
|
|
20264
|
+
description: string().optional(),
|
|
20265
|
+
/** Spawn defaults the instance form copies on create. */
|
|
20266
|
+
executable: string().optional(),
|
|
20267
|
+
args: array(string()).readonly().optional(),
|
|
20268
|
+
cwd: string().optional(),
|
|
20269
|
+
environment: array(string()).readonly().optional(),
|
|
20270
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
20271
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
20172
20272
|
});
|
|
20173
20273
|
/**
|
|
20174
20274
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -20181,7 +20281,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
20181
20281
|
profileId: string(),
|
|
20182
20282
|
profileLabel: string(),
|
|
20183
20283
|
name: string(),
|
|
20184
|
-
enabled: boolean()
|
|
20284
|
+
enabled: boolean(),
|
|
20285
|
+
executable: string(),
|
|
20286
|
+
args: array(string()).readonly(),
|
|
20287
|
+
cwd: string(),
|
|
20288
|
+
environment: array(string()).readonly(),
|
|
20289
|
+
profileSettings: ProfileSettingsBagSchema
|
|
20185
20290
|
});
|
|
20186
20291
|
var TerminalLegacyCameraSchema = object({
|
|
20187
20292
|
stableId: string(),
|
|
@@ -20211,7 +20316,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
20211
20316
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
20212
20317
|
targetNodeId: string().min(1),
|
|
20213
20318
|
profileId: string().min(1),
|
|
20214
|
-
name: string().trim().min(1).max(160).optional()
|
|
20319
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20320
|
+
executable: string().max(1024).optional(),
|
|
20321
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20322
|
+
cwd: string().max(1024).optional(),
|
|
20323
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20324
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20325
|
+
}), TerminalInstanceInfoSchema, {
|
|
20326
|
+
kind: "mutation",
|
|
20327
|
+
auth: "admin"
|
|
20328
|
+
}), method(object({
|
|
20329
|
+
instanceId: string().min(1),
|
|
20330
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20331
|
+
executable: string().max(1024).optional(),
|
|
20332
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20333
|
+
cwd: string().max(1024).optional(),
|
|
20334
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20335
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20215
20336
|
}), TerminalInstanceInfoSchema, {
|
|
20216
20337
|
kind: "mutation",
|
|
20217
20338
|
auth: "admin"
|
|
@@ -20233,7 +20354,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
20233
20354
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
20234
20355
|
profileId: string(),
|
|
20235
20356
|
cols: number().int().positive(),
|
|
20236
|
-
rows: number().int().positive()
|
|
20357
|
+
rows: number().int().positive(),
|
|
20358
|
+
executable: string().max(1024).optional(),
|
|
20359
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20360
|
+
cwd: string().max(1024).optional(),
|
|
20361
|
+
environment: array(string().max(4096)).max(64).optional()
|
|
20237
20362
|
}), TerminalSessionInfoSchema, {
|
|
20238
20363
|
kind: "mutation",
|
|
20239
20364
|
auth: "admin"
|
|
@@ -24197,10 +24322,10 @@ var lawnMowerControlCapability = {
|
|
|
24197
24322
|
*
|
|
24198
24323
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
24199
24324
|
* to receive an ordered list of candidate base URLs it should race
|
|
24200
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
24201
|
-
* then public hostname (if a tunnel is
|
|
24202
|
-
* race them with short timeouts and stick with the
|
|
24203
|
-
* session.
|
|
24325
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
24326
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
24327
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
24328
|
+
* winner for the session.
|
|
24204
24329
|
*
|
|
24205
24330
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
24206
24331
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -24355,6 +24480,17 @@ var NotificationEndpointSchema = object({
|
|
|
24355
24480
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
24356
24481
|
resolved: string().nullable()
|
|
24357
24482
|
});
|
|
24483
|
+
/**
|
|
24484
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
24485
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
24486
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
24487
|
+
*/
|
|
24488
|
+
var ViewerEndpointsSchema = object({
|
|
24489
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
24490
|
+
baseUrls: array(string()).readonly(),
|
|
24491
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
24492
|
+
resolved: array(string()).readonly()
|
|
24493
|
+
});
|
|
24358
24494
|
var AllowedAddressesSchema = object({
|
|
24359
24495
|
/**
|
|
24360
24496
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -24363,6 +24499,20 @@ var AllowedAddressesSchema = object({
|
|
|
24363
24499
|
* Network Addresses admin page and persisted by the addon.
|
|
24364
24500
|
*/
|
|
24365
24501
|
addresses: array(string()).readonly() });
|
|
24502
|
+
var TlsStatusSchema = object({
|
|
24503
|
+
mode: _enum([
|
|
24504
|
+
"generated",
|
|
24505
|
+
"uploaded",
|
|
24506
|
+
"disabled"
|
|
24507
|
+
]),
|
|
24508
|
+
leafFingerprintSha256: string().nullable(),
|
|
24509
|
+
caFingerprintSha256: string().nullable(),
|
|
24510
|
+
validTo: string().nullable(),
|
|
24511
|
+
sans: array(string()),
|
|
24512
|
+
caCertPem: string().nullable(),
|
|
24513
|
+
reissueError: string().nullable(),
|
|
24514
|
+
restartRequired: boolean()
|
|
24515
|
+
});
|
|
24366
24516
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
24367
24517
|
/**
|
|
24368
24518
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -24372,17 +24522,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
24372
24522
|
*/
|
|
24373
24523
|
port: number().int().min(1).max(65535).optional(),
|
|
24374
24524
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
24375
|
-
* candidate. Default `
|
|
24525
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
24376
24526
|
includeLoopback: boolean().optional(),
|
|
24377
|
-
/** Skip IPv6 entries.
|
|
24378
|
-
*
|
|
24527
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
24528
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
24529
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
24379
24530
|
ipv4Only: boolean().optional(),
|
|
24380
24531
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
24381
24532
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
24382
24533
|
* to avoid mixed-content blocks in the browser. The public
|
|
24383
24534
|
* tunnel always emits `https://` regardless. */
|
|
24384
24535
|
scheme: _enum(["http", "https"]).optional()
|
|
24385
|
-
}), 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" })
|
|
24536
|
+
}), 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, {
|
|
24537
|
+
kind: "mutation",
|
|
24538
|
+
auth: "admin"
|
|
24539
|
+
}), method(object({
|
|
24540
|
+
certPem: string().min(1),
|
|
24541
|
+
keyPem: string().min(1),
|
|
24542
|
+
caPem: string().optional()
|
|
24543
|
+
}), TlsStatusSchema, {
|
|
24544
|
+
kind: "mutation",
|
|
24545
|
+
auth: "admin"
|
|
24546
|
+
}), method(_void(), object({ pem: string() })), method(_void(), TlsStatusSchema, {
|
|
24547
|
+
kind: "mutation",
|
|
24548
|
+
auth: "admin"
|
|
24549
|
+
});
|
|
24386
24550
|
var LockControlStatusSchema = object({
|
|
24387
24551
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
24388
24552
|
* failure to reach the target — operator intervention required. */
|
|
@@ -32409,6 +32573,12 @@ Object.freeze({
|
|
|
32409
32573
|
addonId: null,
|
|
32410
32574
|
access: "create"
|
|
32411
32575
|
},
|
|
32576
|
+
"localNetwork.downloadCa": {
|
|
32577
|
+
capName: "local-network",
|
|
32578
|
+
capScope: "system",
|
|
32579
|
+
addonId: null,
|
|
32580
|
+
access: "view"
|
|
32581
|
+
},
|
|
32412
32582
|
"localNetwork.getAllowedAddresses": {
|
|
32413
32583
|
capName: "local-network",
|
|
32414
32584
|
capScope: "system",
|
|
@@ -32433,18 +32603,42 @@ Object.freeze({
|
|
|
32433
32603
|
addonId: null,
|
|
32434
32604
|
access: "view"
|
|
32435
32605
|
},
|
|
32606
|
+
"localNetwork.getTlsStatus": {
|
|
32607
|
+
capName: "local-network",
|
|
32608
|
+
capScope: "system",
|
|
32609
|
+
addonId: null,
|
|
32610
|
+
access: "view"
|
|
32611
|
+
},
|
|
32612
|
+
"localNetwork.getViewerEndpoints": {
|
|
32613
|
+
capName: "local-network",
|
|
32614
|
+
capScope: "system",
|
|
32615
|
+
addonId: null,
|
|
32616
|
+
access: "view"
|
|
32617
|
+
},
|
|
32436
32618
|
"localNetwork.list": {
|
|
32437
32619
|
capName: "local-network",
|
|
32438
32620
|
capScope: "system",
|
|
32439
32621
|
addonId: null,
|
|
32440
32622
|
access: "view"
|
|
32441
32623
|
},
|
|
32624
|
+
"localNetwork.regenerateCertificate": {
|
|
32625
|
+
capName: "local-network",
|
|
32626
|
+
capScope: "system",
|
|
32627
|
+
addonId: null,
|
|
32628
|
+
access: "create"
|
|
32629
|
+
},
|
|
32442
32630
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
32443
32631
|
capName: "local-network",
|
|
32444
32632
|
capScope: "system",
|
|
32445
32633
|
addonId: null,
|
|
32446
32634
|
access: "delete"
|
|
32447
32635
|
},
|
|
32636
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
32637
|
+
capName: "local-network",
|
|
32638
|
+
capScope: "system",
|
|
32639
|
+
addonId: null,
|
|
32640
|
+
access: "create"
|
|
32641
|
+
},
|
|
32448
32642
|
"localNetwork.setAllowedAddresses": {
|
|
32449
32643
|
capName: "local-network",
|
|
32450
32644
|
capScope: "system",
|
|
@@ -32457,6 +32651,18 @@ Object.freeze({
|
|
|
32457
32651
|
addonId: null,
|
|
32458
32652
|
access: "create"
|
|
32459
32653
|
},
|
|
32654
|
+
"localNetwork.setViewerEndpoints": {
|
|
32655
|
+
capName: "local-network",
|
|
32656
|
+
capScope: "system",
|
|
32657
|
+
addonId: null,
|
|
32658
|
+
access: "create"
|
|
32659
|
+
},
|
|
32660
|
+
"localNetwork.uploadCertificate": {
|
|
32661
|
+
capName: "local-network",
|
|
32662
|
+
capScope: "system",
|
|
32663
|
+
addonId: null,
|
|
32664
|
+
access: "create"
|
|
32665
|
+
},
|
|
32460
32666
|
"lockControl.lock": {
|
|
32461
32667
|
capName: "lock-control",
|
|
32462
32668
|
capScope: "device",
|
|
@@ -35337,6 +35543,12 @@ Object.freeze({
|
|
|
35337
35543
|
addonId: null,
|
|
35338
35544
|
access: "create"
|
|
35339
35545
|
},
|
|
35546
|
+
"terminalSession.updateInstance": {
|
|
35547
|
+
capName: "terminal-session",
|
|
35548
|
+
capScope: "system",
|
|
35549
|
+
addonId: null,
|
|
35550
|
+
access: "create"
|
|
35551
|
+
},
|
|
35340
35552
|
"terminalSession.writeInput": {
|
|
35341
35553
|
capName: "terminal-session",
|
|
35342
35554
|
capScope: "system",
|
|
@@ -38031,6 +38243,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
38031
38243
|
}]
|
|
38032
38244
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
38033
38245
|
string().min(1);
|
|
38246
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
38247
|
+
stepId: "face-embedding",
|
|
38248
|
+
key: "minLandmarkFaceSize",
|
|
38249
|
+
label: "Min face size for recognition (detection px)",
|
|
38250
|
+
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.",
|
|
38251
|
+
type: "slider",
|
|
38252
|
+
min: 0,
|
|
38253
|
+
max: 64,
|
|
38254
|
+
step: 2,
|
|
38255
|
+
default: 24
|
|
38256
|
+
}];
|
|
38257
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
38258
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
38259
|
+
}
|
|
38260
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
38261
|
+
function readClusterStepSettings(config) {
|
|
38262
|
+
const out = {};
|
|
38263
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
38264
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
38265
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
38266
|
+
const existing = out[field.stepId] ?? {};
|
|
38267
|
+
out[field.stepId] = {
|
|
38268
|
+
...existing,
|
|
38269
|
+
[field.key]: value
|
|
38270
|
+
};
|
|
38271
|
+
}
|
|
38272
|
+
return out;
|
|
38273
|
+
}
|
|
38274
|
+
readClusterStepSettings({});
|
|
38034
38275
|
object({
|
|
38035
38276
|
/**
|
|
38036
38277
|
* Fraction of the box's own size added on EACH side before cutting.
|
|
@@ -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);
|
|
@@ -8129,6 +8138,15 @@ var LabelDefinitionSchema = object({
|
|
|
8129
8138
|
description: string().optional(),
|
|
8130
8139
|
icon: string().optional()
|
|
8131
8140
|
});
|
|
8141
|
+
var ClassMapDefinitionSchema = object({
|
|
8142
|
+
mapping: record(string(), _enum([
|
|
8143
|
+
"person",
|
|
8144
|
+
"vehicle",
|
|
8145
|
+
"animal",
|
|
8146
|
+
"package"
|
|
8147
|
+
])),
|
|
8148
|
+
preserveOriginal: boolean()
|
|
8149
|
+
});
|
|
8132
8150
|
var MODEL_FORMATS = [
|
|
8133
8151
|
"onnx",
|
|
8134
8152
|
"coreml",
|
|
@@ -8307,7 +8325,13 @@ var ModelCatalogEntrySchema = object({
|
|
|
8307
8325
|
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
8308
8326
|
* is a presentation overlay resolved back to an `id`.
|
|
8309
8327
|
*/
|
|
8310
|
-
group: ModelVariantGroupSchema.optional()
|
|
8328
|
+
group: ModelVariantGroupSchema.optional(),
|
|
8329
|
+
/**
|
|
8330
|
+
* Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
|
|
8331
|
+
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8332
|
+
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8333
|
+
*/
|
|
8334
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8311
8335
|
});
|
|
8312
8336
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8313
8337
|
format: literal("openvino"),
|
|
@@ -8336,7 +8360,8 @@ var ModelConvertMetadataSchema = object({
|
|
|
8336
8360
|
"ocr",
|
|
8337
8361
|
"segmentation"
|
|
8338
8362
|
]),
|
|
8339
|
-
faceAlignment: boolean().optional()
|
|
8363
|
+
faceAlignment: boolean().optional(),
|
|
8364
|
+
classMap: ClassMapDefinitionSchema.optional()
|
|
8340
8365
|
});
|
|
8341
8366
|
var ConvertResultSchema = object({
|
|
8342
8367
|
entry: ModelCatalogEntrySchema,
|
|
@@ -17804,6 +17829,33 @@ var NativeCropRefSchema = object({
|
|
|
17804
17829
|
h: number()
|
|
17805
17830
|
})
|
|
17806
17831
|
});
|
|
17832
|
+
object({
|
|
17833
|
+
crop: object({
|
|
17834
|
+
left: number(),
|
|
17835
|
+
top: number(),
|
|
17836
|
+
width: number().positive(),
|
|
17837
|
+
height: number().positive()
|
|
17838
|
+
}).optional(),
|
|
17839
|
+
content: object({
|
|
17840
|
+
width: number().int().positive(),
|
|
17841
|
+
height: number().int().positive()
|
|
17842
|
+
}),
|
|
17843
|
+
fit: _enum(["stretch", "contain"]),
|
|
17844
|
+
format: _enum([
|
|
17845
|
+
"rgb",
|
|
17846
|
+
"gray",
|
|
17847
|
+
"jpeg"
|
|
17848
|
+
])
|
|
17849
|
+
});
|
|
17850
|
+
var FrameRefSchema = object({
|
|
17851
|
+
registryId: string().min(1),
|
|
17852
|
+
id: string().min(1),
|
|
17853
|
+
width: number().int().positive(),
|
|
17854
|
+
height: number().int().positive(),
|
|
17855
|
+
format: _enum(["rgb", "gray"]),
|
|
17856
|
+
timestamp: number(),
|
|
17857
|
+
capturedAt: number().optional()
|
|
17858
|
+
});
|
|
17807
17859
|
var ModelFormatSchema$1 = _enum([
|
|
17808
17860
|
"onnx",
|
|
17809
17861
|
"coreml",
|
|
@@ -18048,6 +18100,12 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
18048
18100
|
steps: array(PipelineStepInputSchema).min(1),
|
|
18049
18101
|
frame: FrameInputSchema.optional(),
|
|
18050
18102
|
/**
|
|
18103
|
+
* Process-local lazy frame. Valid only when caller and provider resolve
|
|
18104
|
+
* in the same execution-group process; split/cross-node callers use
|
|
18105
|
+
* `frame`/`image` inline compatibility instead.
|
|
18106
|
+
*/
|
|
18107
|
+
frameRef: FrameRefSchema.optional(),
|
|
18108
|
+
/**
|
|
18051
18109
|
* CB5 shm passthrough — a `FrameHandle` naming the same ring slot
|
|
18052
18110
|
* the decoded pixels live in. One more member of the one-of
|
|
18053
18111
|
* frame/frameHandle/image/imageBase64/referenceImage group.
|
|
@@ -18343,7 +18401,10 @@ var NativeCropResultSchema = object({
|
|
|
18343
18401
|
* Which source served this crop, so a quality-sensitive consumer (the native
|
|
18344
18402
|
* `keyFrame`) can reject a degraded fallback:
|
|
18345
18403
|
* - `native` — cut from the decode worker's retained NATIVE surface (the
|
|
18346
|
-
* quality path).
|
|
18404
|
+
* quality path). A subject-tile serve is also native-resolution and stays
|
|
18405
|
+
* `native` here: the public enum cannot name `tile` without a breaking cap
|
|
18406
|
+
* change. Runner telemetry distinguishes lease vs tile via `source` on the
|
|
18407
|
+
* internal crop result (`nativeHits` vs `tileHits`).
|
|
18347
18408
|
* - `ram-fullframe` — the native surface MISSED but the request was full-frame,
|
|
18348
18409
|
* so the ≤640 RAM `RetainedFrameStore` served it (honest lower-res; legit for
|
|
18349
18410
|
* the blank-frame guard / 640-snapshot resolve, NOT for the clean keyFrame).
|
|
@@ -18834,12 +18895,41 @@ var RunnerLocalLoadSchema = object({
|
|
|
18834
18895
|
* legacy `OrchestratorMetricsSchema` shape so existing dashboards keep
|
|
18835
18896
|
* working unchanged when they switch to reading from the runner cap.
|
|
18836
18897
|
*/
|
|
18898
|
+
var FrameLazyCountersSchema = object({
|
|
18899
|
+
framesDecoded: number(),
|
|
18900
|
+
framesAdmitted: number(),
|
|
18901
|
+
framesDroppedPixelFree: number(),
|
|
18902
|
+
viewsMaterialized: number(),
|
|
18903
|
+
viewsSkipped: number(),
|
|
18904
|
+
workerToRunnerBytes: number(),
|
|
18905
|
+
runnerToPoolRawBytes: number(),
|
|
18906
|
+
runnerToPoolJpegBytes: number(),
|
|
18907
|
+
onDemandFullFrameRequests: number(),
|
|
18908
|
+
onDemandCropRequests: number(),
|
|
18909
|
+
nativeHits: number(),
|
|
18910
|
+
nativeMisses: number(),
|
|
18911
|
+
tileHits: number(),
|
|
18912
|
+
tileMisses: number(),
|
|
18913
|
+
fallbackHits: number(),
|
|
18914
|
+
fallbackMisses: number(),
|
|
18915
|
+
retainedWritesAvoided: number(),
|
|
18916
|
+
residentRefs: number(),
|
|
18917
|
+
residentBytes: number(),
|
|
18918
|
+
releases: number(),
|
|
18919
|
+
evictions: number(),
|
|
18920
|
+
staleMisses: number()
|
|
18921
|
+
});
|
|
18922
|
+
var FrameLazyMetricsSchema = object({
|
|
18923
|
+
node: FrameLazyCountersSchema,
|
|
18924
|
+
cameras: array(FrameLazyCountersSchema.extend({ deviceId: number() }))
|
|
18925
|
+
});
|
|
18837
18926
|
var RunnerLocalMetricsSchema = object({
|
|
18838
18927
|
nodeId: string(),
|
|
18839
18928
|
activeCameras: number(),
|
|
18840
18929
|
throttledCameras: number(),
|
|
18841
18930
|
avgInferenceTimeMs: number(),
|
|
18842
|
-
queueDepth: number()
|
|
18931
|
+
queueDepth: number(),
|
|
18932
|
+
frameLazy: FrameLazyMetricsSchema.optional()
|
|
18843
18933
|
});
|
|
18844
18934
|
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({
|
|
18845
18935
|
handle: FrameHandleSchema,
|
|
@@ -20139,6 +20229,9 @@ method(_void(), ProviderInfoSchema), method(object({ config: record(string(), un
|
|
|
20139
20229
|
location: StorageLocationSchema,
|
|
20140
20230
|
relativePath: string()
|
|
20141
20231
|
}), _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" });
|
|
20232
|
+
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
20233
|
+
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
20234
|
+
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
20142
20235
|
/**
|
|
20143
20236
|
* A live terminal session hosted by the provider addon. Output and input do
|
|
20144
20237
|
* NOT flow through the capability — they use the addon data plane
|
|
@@ -20168,7 +20261,14 @@ var TerminalSessionInfoSchema = object({
|
|
|
20168
20261
|
var TerminalProfileInfoSchema = object({
|
|
20169
20262
|
profileId: string(),
|
|
20170
20263
|
label: string(),
|
|
20171
|
-
description: string().optional()
|
|
20264
|
+
description: string().optional(),
|
|
20265
|
+
/** Spawn defaults the instance form copies on create. */
|
|
20266
|
+
executable: string().optional(),
|
|
20267
|
+
args: array(string()).readonly().optional(),
|
|
20268
|
+
cwd: string().optional(),
|
|
20269
|
+
environment: array(string()).readonly().optional(),
|
|
20270
|
+
/** ConfigUISchema for instance knobs, or null when the profile has none. */
|
|
20271
|
+
settingsSchema: ProfileSettingsSchemaBridge.optional()
|
|
20172
20272
|
});
|
|
20173
20273
|
/**
|
|
20174
20274
|
* A durable operator-created Terminal instance. Profiles are templates; only
|
|
@@ -20181,7 +20281,12 @@ var TerminalInstanceInfoSchema = object({
|
|
|
20181
20281
|
profileId: string(),
|
|
20182
20282
|
profileLabel: string(),
|
|
20183
20283
|
name: string(),
|
|
20184
|
-
enabled: boolean()
|
|
20284
|
+
enabled: boolean(),
|
|
20285
|
+
executable: string(),
|
|
20286
|
+
args: array(string()).readonly(),
|
|
20287
|
+
cwd: string(),
|
|
20288
|
+
environment: array(string()).readonly(),
|
|
20289
|
+
profileSettings: ProfileSettingsBagSchema
|
|
20185
20290
|
});
|
|
20186
20291
|
var TerminalLegacyCameraSchema = object({
|
|
20187
20292
|
stableId: string(),
|
|
@@ -20211,7 +20316,23 @@ var TerminalOutputBatchSchema = object({
|
|
|
20211
20316
|
method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
20212
20317
|
targetNodeId: string().min(1),
|
|
20213
20318
|
profileId: string().min(1),
|
|
20214
|
-
name: string().trim().min(1).max(160).optional()
|
|
20319
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20320
|
+
executable: string().max(1024).optional(),
|
|
20321
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20322
|
+
cwd: string().max(1024).optional(),
|
|
20323
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20324
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20325
|
+
}), TerminalInstanceInfoSchema, {
|
|
20326
|
+
kind: "mutation",
|
|
20327
|
+
auth: "admin"
|
|
20328
|
+
}), method(object({
|
|
20329
|
+
instanceId: string().min(1),
|
|
20330
|
+
name: string().trim().min(1).max(160).optional(),
|
|
20331
|
+
executable: string().max(1024).optional(),
|
|
20332
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20333
|
+
cwd: string().max(1024).optional(),
|
|
20334
|
+
environment: array(string().max(4096)).max(64).optional(),
|
|
20335
|
+
profileSettings: ProfileSettingsBagSchema.optional()
|
|
20215
20336
|
}), TerminalInstanceInfoSchema, {
|
|
20216
20337
|
kind: "mutation",
|
|
20217
20338
|
auth: "admin"
|
|
@@ -20233,7 +20354,11 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
|
|
|
20233
20354
|
}), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
20234
20355
|
profileId: string(),
|
|
20235
20356
|
cols: number().int().positive(),
|
|
20236
|
-
rows: number().int().positive()
|
|
20357
|
+
rows: number().int().positive(),
|
|
20358
|
+
executable: string().max(1024).optional(),
|
|
20359
|
+
args: array(string().max(2048)).max(64).optional(),
|
|
20360
|
+
cwd: string().max(1024).optional(),
|
|
20361
|
+
environment: array(string().max(4096)).max(64).optional()
|
|
20237
20362
|
}), TerminalSessionInfoSchema, {
|
|
20238
20363
|
kind: "mutation",
|
|
20239
20364
|
auth: "admin"
|
|
@@ -24197,10 +24322,10 @@ var lawnMowerControlCapability = {
|
|
|
24197
24322
|
*
|
|
24198
24323
|
* • The SDK (mobile / web client) consumes `getConnectionEndpoints()`
|
|
24199
24324
|
* to receive an ordered list of candidate base URLs it should race
|
|
24200
|
-
* on connect — LAN IPv4 first (lowest latency
|
|
24201
|
-
* then public hostname (if a tunnel is
|
|
24202
|
-
* race them with short timeouts and stick with the
|
|
24203
|
-
* session.
|
|
24325
|
+
* on connect — LAN IPv4 and stable LAN IPv6 first (lowest latency
|
|
24326
|
+
* when on the same network), then public hostname (if a tunnel is
|
|
24327
|
+
* up). The SDK can race them with short timeouts and stick with the
|
|
24328
|
+
* winner for the session.
|
|
24204
24329
|
*
|
|
24205
24330
|
* Why hub-only: agents are not directly addressable by the operator's
|
|
24206
24331
|
* clients — they reverse-connect to the hub. Exposing their interfaces
|
|
@@ -24355,6 +24480,17 @@ var NotificationEndpointSchema = object({
|
|
|
24355
24480
|
/** What the ranking currently resolves to (null when nothing is reachable). */
|
|
24356
24481
|
resolved: string().nullable()
|
|
24357
24482
|
});
|
|
24483
|
+
/**
|
|
24484
|
+
* The URLs the SDK / viewer should race for API access. `baseUrls` empty =
|
|
24485
|
+
* AUTO (every LAN IPv4 + the public tunnel). `resolved` is what that choice
|
|
24486
|
+
* currently expands to, so the UI can show the effective set either way.
|
|
24487
|
+
*/
|
|
24488
|
+
var ViewerEndpointsSchema = object({
|
|
24489
|
+
/** The operator's explicit race set, or empty for AUTO. */
|
|
24490
|
+
baseUrls: array(string()).readonly(),
|
|
24491
|
+
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
24492
|
+
resolved: array(string()).readonly()
|
|
24493
|
+
});
|
|
24358
24494
|
var AllowedAddressesSchema = object({
|
|
24359
24495
|
/**
|
|
24360
24496
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -24363,6 +24499,20 @@ var AllowedAddressesSchema = object({
|
|
|
24363
24499
|
* Network Addresses admin page and persisted by the addon.
|
|
24364
24500
|
*/
|
|
24365
24501
|
addresses: array(string()).readonly() });
|
|
24502
|
+
var TlsStatusSchema = object({
|
|
24503
|
+
mode: _enum([
|
|
24504
|
+
"generated",
|
|
24505
|
+
"uploaded",
|
|
24506
|
+
"disabled"
|
|
24507
|
+
]),
|
|
24508
|
+
leafFingerprintSha256: string().nullable(),
|
|
24509
|
+
caFingerprintSha256: string().nullable(),
|
|
24510
|
+
validTo: string().nullable(),
|
|
24511
|
+
sans: array(string()),
|
|
24512
|
+
caCertPem: string().nullable(),
|
|
24513
|
+
reissueError: string().nullable(),
|
|
24514
|
+
restartRequired: boolean()
|
|
24515
|
+
});
|
|
24366
24516
|
method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(object({
|
|
24367
24517
|
/**
|
|
24368
24518
|
* LEGACY HINT — do not send from new code. Kept optional so clients
|
|
@@ -24372,17 +24522,31 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
24372
24522
|
*/
|
|
24373
24523
|
port: number().int().min(1).max(65535).optional(),
|
|
24374
24524
|
/** Include `http(s)://127.0.0.1:<port>` as the lowest-priority
|
|
24375
|
-
* candidate. Default `
|
|
24525
|
+
* candidate. Default `false` — loopback is not a client route. */
|
|
24376
24526
|
includeLoopback: boolean().optional(),
|
|
24377
|
-
/** Skip IPv6 entries.
|
|
24378
|
-
*
|
|
24527
|
+
/** Skip IPv6 entries. Default `false` — the palette includes stable
|
|
24528
|
+
* LAN IPv6 (ICE/WebRTC uses dual-stack regardless). Pass `true` to
|
|
24529
|
+
* hide them. The viewer HTTP/WS race is `getViewerEndpoints`. */
|
|
24379
24530
|
ipv4Only: boolean().optional(),
|
|
24380
24531
|
/** Scheme to emit for LAN/loopback URLs. Default `'http'`.
|
|
24381
24532
|
* Pass `'https'` when the caller is itself loaded over HTTPS
|
|
24382
24533
|
* to avoid mixed-content blocks in the browser. The public
|
|
24383
24534
|
* tunnel always emits `https://` regardless. */
|
|
24384
24535
|
scheme: _enum(["http", "https"]).optional()
|
|
24385
|
-
}), 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" })
|
|
24536
|
+
}), 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, {
|
|
24537
|
+
kind: "mutation",
|
|
24538
|
+
auth: "admin"
|
|
24539
|
+
}), method(object({
|
|
24540
|
+
certPem: string().min(1),
|
|
24541
|
+
keyPem: string().min(1),
|
|
24542
|
+
caPem: string().optional()
|
|
24543
|
+
}), TlsStatusSchema, {
|
|
24544
|
+
kind: "mutation",
|
|
24545
|
+
auth: "admin"
|
|
24546
|
+
}), method(_void(), object({ pem: string() })), method(_void(), TlsStatusSchema, {
|
|
24547
|
+
kind: "mutation",
|
|
24548
|
+
auth: "admin"
|
|
24549
|
+
});
|
|
24386
24550
|
var LockControlStatusSchema = object({
|
|
24387
24551
|
/** Lifecycle state of the lock. `jammed` means the motor reported
|
|
24388
24552
|
* failure to reach the target — operator intervention required. */
|
|
@@ -32409,6 +32573,12 @@ Object.freeze({
|
|
|
32409
32573
|
addonId: null,
|
|
32410
32574
|
access: "create"
|
|
32411
32575
|
},
|
|
32576
|
+
"localNetwork.downloadCa": {
|
|
32577
|
+
capName: "local-network",
|
|
32578
|
+
capScope: "system",
|
|
32579
|
+
addonId: null,
|
|
32580
|
+
access: "view"
|
|
32581
|
+
},
|
|
32412
32582
|
"localNetwork.getAllowedAddresses": {
|
|
32413
32583
|
capName: "local-network",
|
|
32414
32584
|
capScope: "system",
|
|
@@ -32433,18 +32603,42 @@ Object.freeze({
|
|
|
32433
32603
|
addonId: null,
|
|
32434
32604
|
access: "view"
|
|
32435
32605
|
},
|
|
32606
|
+
"localNetwork.getTlsStatus": {
|
|
32607
|
+
capName: "local-network",
|
|
32608
|
+
capScope: "system",
|
|
32609
|
+
addonId: null,
|
|
32610
|
+
access: "view"
|
|
32611
|
+
},
|
|
32612
|
+
"localNetwork.getViewerEndpoints": {
|
|
32613
|
+
capName: "local-network",
|
|
32614
|
+
capScope: "system",
|
|
32615
|
+
addonId: null,
|
|
32616
|
+
access: "view"
|
|
32617
|
+
},
|
|
32436
32618
|
"localNetwork.list": {
|
|
32437
32619
|
capName: "local-network",
|
|
32438
32620
|
capScope: "system",
|
|
32439
32621
|
addonId: null,
|
|
32440
32622
|
access: "view"
|
|
32441
32623
|
},
|
|
32624
|
+
"localNetwork.regenerateCertificate": {
|
|
32625
|
+
capName: "local-network",
|
|
32626
|
+
capScope: "system",
|
|
32627
|
+
addonId: null,
|
|
32628
|
+
access: "create"
|
|
32629
|
+
},
|
|
32442
32630
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
32443
32631
|
capName: "local-network",
|
|
32444
32632
|
capScope: "system",
|
|
32445
32633
|
addonId: null,
|
|
32446
32634
|
access: "delete"
|
|
32447
32635
|
},
|
|
32636
|
+
"localNetwork.revertToGeneratedCertificate": {
|
|
32637
|
+
capName: "local-network",
|
|
32638
|
+
capScope: "system",
|
|
32639
|
+
addonId: null,
|
|
32640
|
+
access: "create"
|
|
32641
|
+
},
|
|
32448
32642
|
"localNetwork.setAllowedAddresses": {
|
|
32449
32643
|
capName: "local-network",
|
|
32450
32644
|
capScope: "system",
|
|
@@ -32457,6 +32651,18 @@ Object.freeze({
|
|
|
32457
32651
|
addonId: null,
|
|
32458
32652
|
access: "create"
|
|
32459
32653
|
},
|
|
32654
|
+
"localNetwork.setViewerEndpoints": {
|
|
32655
|
+
capName: "local-network",
|
|
32656
|
+
capScope: "system",
|
|
32657
|
+
addonId: null,
|
|
32658
|
+
access: "create"
|
|
32659
|
+
},
|
|
32660
|
+
"localNetwork.uploadCertificate": {
|
|
32661
|
+
capName: "local-network",
|
|
32662
|
+
capScope: "system",
|
|
32663
|
+
addonId: null,
|
|
32664
|
+
access: "create"
|
|
32665
|
+
},
|
|
32460
32666
|
"lockControl.lock": {
|
|
32461
32667
|
capName: "lock-control",
|
|
32462
32668
|
capScope: "device",
|
|
@@ -35337,6 +35543,12 @@ Object.freeze({
|
|
|
35337
35543
|
addonId: null,
|
|
35338
35544
|
access: "create"
|
|
35339
35545
|
},
|
|
35546
|
+
"terminalSession.updateInstance": {
|
|
35547
|
+
capName: "terminal-session",
|
|
35548
|
+
capScope: "system",
|
|
35549
|
+
addonId: null,
|
|
35550
|
+
access: "create"
|
|
35551
|
+
},
|
|
35340
35552
|
"terminalSession.writeInput": {
|
|
35341
35553
|
capName: "terminal-session",
|
|
35342
35554
|
capScope: "system",
|
|
@@ -38031,6 +38243,35 @@ Object.freeze(Object.fromEntries([{
|
|
|
38031
38243
|
}]
|
|
38032
38244
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
38033
38245
|
string().min(1);
|
|
38246
|
+
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
38247
|
+
stepId: "face-embedding",
|
|
38248
|
+
key: "minLandmarkFaceSize",
|
|
38249
|
+
label: "Min face size for recognition (detection px)",
|
|
38250
|
+
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.",
|
|
38251
|
+
type: "slider",
|
|
38252
|
+
min: 0,
|
|
38253
|
+
max: 64,
|
|
38254
|
+
step: 2,
|
|
38255
|
+
default: 24
|
|
38256
|
+
}];
|
|
38257
|
+
function clusterStepSettingKey(stepId, fieldKey) {
|
|
38258
|
+
return `clusterStepSetting:${stepId}:${fieldKey}`;
|
|
38259
|
+
}
|
|
38260
|
+
var ClusterSettingNumberSchema = number().finite();
|
|
38261
|
+
function readClusterStepSettings(config) {
|
|
38262
|
+
const out = {};
|
|
38263
|
+
for (const field of CLUSTER_STEP_SETTING_FIELDS) {
|
|
38264
|
+
const parsed = ClusterSettingNumberSchema.safeParse(config[clusterStepSettingKey(field.stepId, field.key)]);
|
|
38265
|
+
const value = parsed.success ? parsed.data : field.default;
|
|
38266
|
+
const existing = out[field.stepId] ?? {};
|
|
38267
|
+
out[field.stepId] = {
|
|
38268
|
+
...existing,
|
|
38269
|
+
[field.key]: value
|
|
38270
|
+
};
|
|
38271
|
+
}
|
|
38272
|
+
return out;
|
|
38273
|
+
}
|
|
38274
|
+
readClusterStepSettings({});
|
|
38034
38275
|
object({
|
|
38035
38276
|
/**
|
|
38036
38277
|
* Fraction of the box's own size added on EACH side before cutting.
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
//#endregion
|
|
6
|
-
const require_dist = require("../dist-
|
|
6
|
+
const require_dist = require("../dist-BoTrJXhA.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
//#region src/ha-export/topics.ts
|
|
9
9
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as deviceExportCapability, Ot as EventCategory, S as buildAddonRouteProvider, Y as oauthIntegrationCapability, a as CameraSwitchIdSchema, c as HvacModeSchema, f as addonRoutesCapability, ft as BaseAddon, i as COCO_TO_MACRO, l as MediaPlayerRepeatSchema, s as FanDirectionSchema, t as AlarmArmModeSchema, wt as string } from "../dist-
|
|
1
|
+
import { M as deviceExportCapability, Ot as EventCategory, S as buildAddonRouteProvider, Y as oauthIntegrationCapability, a as CameraSwitchIdSchema, c as HvacModeSchema, f as addonRoutesCapability, ft as BaseAddon, i as COCO_TO_MACRO, l as MediaPlayerRepeatSchema, s as FanDirectionSchema, t as AlarmArmModeSchema, wt as string } from "../dist-DeursJRH.mjs";
|
|
2
2
|
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
3
3
|
//#region src/ha-export/topics.ts
|
|
4
4
|
/**
|