@camstack/addon-export-alexa 1.2.129 → 1.2.131
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/export-alexa.addon.js +808 -36
- package/dist/export-alexa.addon.mjs +808 -36
- package/package.json +1 -1
|
@@ -5406,7 +5406,7 @@ var ZodIssueCode = {
|
|
|
5406
5406
|
var ZodFirstPartyTypeKind;
|
|
5407
5407
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5408
5408
|
//#endregion
|
|
5409
|
-
//#region ../types/dist/sleep-
|
|
5409
|
+
//#region ../types/dist/sleep-C16NCZR2.mjs
|
|
5410
5410
|
/**
|
|
5411
5411
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5412
5412
|
* window to float samples (D455).
|
|
@@ -10767,6 +10767,26 @@ var ClipSearchStrictnessSchema = _enum([
|
|
|
10767
10767
|
"balanced",
|
|
10768
10768
|
"strict"
|
|
10769
10769
|
]);
|
|
10770
|
+
/** Steps whose effect a root label can BE. */
|
|
10771
|
+
var LABEL_SUPPLY_STEP_IDS = [
|
|
10772
|
+
"animal-classifier",
|
|
10773
|
+
"vehicle-classifier",
|
|
10774
|
+
"package-detection"
|
|
10775
|
+
];
|
|
10776
|
+
/** Steps whose box a root detection can BE. */
|
|
10777
|
+
var CROP_SUPPLY_STEP_IDS = ["plate-detection", "face-detection"];
|
|
10778
|
+
/**
|
|
10779
|
+
* Steps whose per-detection MASK a root detection can carry (D737). The live
|
|
10780
|
+
* mask step is `segmentation` — a frame-plane refiner that runs its own model
|
|
10781
|
+
* once per detection crop. (`instance-segmentation` is a dormant step id that
|
|
10782
|
+
* no camera tree carries.)
|
|
10783
|
+
*/
|
|
10784
|
+
var MASK_SUPPLY_STEP_IDS = ["segmentation"];
|
|
10785
|
+
[
|
|
10786
|
+
...LABEL_SUPPLY_STEP_IDS,
|
|
10787
|
+
...CROP_SUPPLY_STEP_IDS,
|
|
10788
|
+
...MASK_SUPPLY_STEP_IDS
|
|
10789
|
+
];
|
|
10770
10790
|
var MODEL_FORMATS = [
|
|
10771
10791
|
"onnx",
|
|
10772
10792
|
"coreml",
|
|
@@ -10795,7 +10815,53 @@ var ModelFormatEntrySchema = object({
|
|
|
10795
10815
|
/** Multi-file payload (directory members or sibling files). */
|
|
10796
10816
|
files: array(string()).readonly().optional(),
|
|
10797
10817
|
/** Runtime(s) that can use this format. If omitted, inferred from ModelFormat key */
|
|
10798
|
-
runtimes: array(_enum(["python"])).readonly().optional()
|
|
10818
|
+
runtimes: array(_enum(["python"])).readonly().optional(),
|
|
10819
|
+
/**
|
|
10820
|
+
* Content revision of the artefact, for one hosted OFF the CamStack mirror.
|
|
10821
|
+
* A format on the mirror leaves it unset: its revision (the sha256 of its
|
|
10822
|
+
* weight file) comes from the downloader's generated table, kept in step
|
|
10823
|
+
* with the mirror by `scripts/check-hosted-model-revisions.ts` (D744). A
|
|
10824
|
+
* node records the revision it downloaded next to the file
|
|
10825
|
+
* (`<file>.revision`); a copy with no record or a different one is stale
|
|
10826
|
+
* unless its weight file hashes to the revision, and a stale copy is
|
|
10827
|
+
* downloaded again, the old one serving until the new one is complete. No
|
|
10828
|
+
* revision at all ⇒ a file on disk is current, whatever it holds (D743).
|
|
10829
|
+
*/
|
|
10830
|
+
revision: string().min(1).optional()
|
|
10831
|
+
});
|
|
10832
|
+
/**
|
|
10833
|
+
* What a node holds for one (model, format) (D746). `current` is a complete
|
|
10834
|
+
* copy at its catalog revision — exactly what `downloaded: true` means.
|
|
10835
|
+
* `stale` is bytes on disk that are not (yet) proven current under D743/D744:
|
|
10836
|
+
* no or a different revision record, or a missing sibling. `missing` is no
|
|
10837
|
+
* copy. `downloaded` alone folds `stale` into "not downloaded", which hid
|
|
10838
|
+
* reclaimable bytes and a copy about to be replaced.
|
|
10839
|
+
*/
|
|
10840
|
+
var ModelOnDiskStateSchema = _enum([
|
|
10841
|
+
"current",
|
|
10842
|
+
"stale",
|
|
10843
|
+
"missing"
|
|
10844
|
+
]);
|
|
10845
|
+
/**
|
|
10846
|
+
* The numeric precision of one format's BUILD (D746) — reported only when the
|
|
10847
|
+
* build states it (file-name token, an INT8 variant, an EdgeTPU compile, a
|
|
10848
|
+
* CamStack Core ML export). Absent means "not stated", never "fp32".
|
|
10849
|
+
*/
|
|
10850
|
+
var ModelFormatPrecisionSchema = _enum([
|
|
10851
|
+
"fp32",
|
|
10852
|
+
"fp16",
|
|
10853
|
+
"int8"
|
|
10854
|
+
]);
|
|
10855
|
+
/**
|
|
10856
|
+
* One format of one model as a node's `pipelineExecutor.getSchema` reports it.
|
|
10857
|
+
* `onDisk` / `precision` are optional for version skew: a runner that predates
|
|
10858
|
+
* them omits them, and a reader falls back to `downloaded`.
|
|
10859
|
+
*/
|
|
10860
|
+
var PipelineModelFormatStatusSchema = object({
|
|
10861
|
+
downloaded: boolean(),
|
|
10862
|
+
sizeMB: number(),
|
|
10863
|
+
onDisk: ModelOnDiskStateSchema.optional(),
|
|
10864
|
+
precision: ModelFormatPrecisionSchema.optional()
|
|
10799
10865
|
});
|
|
10800
10866
|
/**
|
|
10801
10867
|
* Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
|
|
@@ -10899,6 +10965,46 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
|
|
|
10899
10965
|
/** True when the weights or their data forbid commercial use. */
|
|
10900
10966
|
nonCommercial: boolean().optional()
|
|
10901
10967
|
}));
|
|
10968
|
+
/**
|
|
10969
|
+
* One step a ROOT detector can supply from its own output (D730) — see
|
|
10970
|
+
* `ModelCatalogEntry.suppliesSteps`.
|
|
10971
|
+
*
|
|
10972
|
+
* - `label`: the root's raw class IS the step's answer. `labelToEffect` maps
|
|
10973
|
+
* the root's label to the step's vocabulary; `uncovered` is the vocabulary
|
|
10974
|
+
* the root cannot produce (shown as unavailable, never a blocker).
|
|
10975
|
+
* - `crop`: the root draws the box the step would have found (`license_plate`
|
|
10976
|
+
* for plate-detection, `face` for face-detection). The box becomes a detail
|
|
10977
|
+
* child of the `parentMacro` detection that contains it — never a track.
|
|
10978
|
+
* - `mask`: the root's decode emits an instance mask with every detection (a
|
|
10979
|
+
* YOLO26-seg root, D737) — the `segmentation` step's result, carried on the
|
|
10980
|
+
* detection in the shape that step produces. Derived from the model's
|
|
10981
|
+
* postprocessor on read, never stored by an import.
|
|
10982
|
+
*/
|
|
10983
|
+
var RootStepSupplySchema = discriminatedUnion("kind", [
|
|
10984
|
+
object({
|
|
10985
|
+
kind: literal("label"),
|
|
10986
|
+
stepId: _enum(LABEL_SUPPLY_STEP_IDS),
|
|
10987
|
+
labelToEffect: record(string(), string()),
|
|
10988
|
+
uncovered: array(string()).readonly()
|
|
10989
|
+
}),
|
|
10990
|
+
object({
|
|
10991
|
+
kind: literal("crop"),
|
|
10992
|
+
stepId: _enum(CROP_SUPPLY_STEP_IDS),
|
|
10993
|
+
rootLabels: array(string()).readonly(),
|
|
10994
|
+
parentMacro: _enum(["vehicle", "person"]),
|
|
10995
|
+
childClass: _enum(["plate", "face"]),
|
|
10996
|
+
/**
|
|
10997
|
+
* The root's smaller input side, stamped on read by `rootSuppliesOf` from
|
|
10998
|
+
* the model entry — what a step's `minRootInputPx` gate judges. Never
|
|
10999
|
+
* stored by an import.
|
|
11000
|
+
*/
|
|
11001
|
+
rootInputPx: number().int().positive().optional()
|
|
11002
|
+
}),
|
|
11003
|
+
object({
|
|
11004
|
+
kind: literal("mask"),
|
|
11005
|
+
stepId: _enum(MASK_SUPPLY_STEP_IDS)
|
|
11006
|
+
})
|
|
11007
|
+
]);
|
|
10902
11008
|
var ModelCatalogEntrySchema = object({
|
|
10903
11009
|
id: string(),
|
|
10904
11010
|
name: string(),
|
|
@@ -10964,6 +11070,35 @@ var ModelCatalogEntrySchema = object({
|
|
|
10964
11070
|
*/
|
|
10965
11071
|
defaultConfidence: number().min(0).max(1).optional(),
|
|
10966
11072
|
/**
|
|
11073
|
+
* Per-MODEL default of the per-class confidence floors (`minConfidence<Macro>`
|
|
11074
|
+
* on a detector step), keyed by macro class: `{ person: 0.45 }`. A class
|
|
11075
|
+
* absent here runs at the step slider's global default. The same row shape
|
|
11076
|
+
* the floor measurement produces (`model-floors.json`: modelId → floors), so
|
|
11077
|
+
* a measured table is copied in as-is. An operator override is bound to the
|
|
11078
|
+
* model it was made for and does not survive a model change (D738). A custom
|
|
11079
|
+
* / imported model may declare it; without it, the global defaults apply.
|
|
11080
|
+
*/
|
|
11081
|
+
defaultClassFloors: record(string(), number().min(0).max(1)).optional(),
|
|
11082
|
+
/**
|
|
11083
|
+
* The inference precision this model's OpenVINO IR needs on an Intel GPU.
|
|
11084
|
+
* Absent ⇒ the device default (f16 on a GPU). Set to `'f32'` for an FP32 IR
|
|
11085
|
+
* that produces invalid output at f16 — measured 2026-10-07 for YOLO26
|
|
11086
|
+
* base IRs (`yolo26s`: 0 true / 146 false positives; `yolo26m*`: NaN
|
|
11087
|
+
* scores) on the Core Ultra iGPU and the N100. Threaded to the pool as
|
|
11088
|
+
* `PoolModelConfig.gpuInferencePrecision`; the pool sets
|
|
11089
|
+
* INFERENCE_PRECISION_HINT on a GPU only. Costs ~60% latency on the GPU.
|
|
11090
|
+
*/
|
|
11091
|
+
gpuInferencePrecision: _enum(["f32", "f16"]).optional(),
|
|
11092
|
+
/**
|
|
11093
|
+
* ROOT detectors only: per supplied step (`animal-classifier`, …), the
|
|
11094
|
+
* minimum DETECTION score from which this root's own fine label (species,
|
|
11095
|
+
* vehicle type — D736 root supply) is taken (D741). Below it the detection
|
|
11096
|
+
* keeps its macro class without the fine label. `1` = never take it from
|
|
11097
|
+
* this root. Absent ⇒ no floor beyond the macro floor. The supplied step's
|
|
11098
|
+
* `minConfidence` slider, bound to the ROOT model, overrides it.
|
|
11099
|
+
*/
|
|
11100
|
+
suppliedLabelFloors: record(string(), number().min(0).max(1)).optional(),
|
|
11101
|
+
/**
|
|
10967
11102
|
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
10968
11103
|
* onto the canonical template) before this step runs, instead of a plain
|
|
10969
11104
|
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
@@ -11025,6 +11160,16 @@ var ModelCatalogEntrySchema = object({
|
|
|
11025
11160
|
*/
|
|
11026
11161
|
classMap: DetectionCatalogClassMapSchema.optional(),
|
|
11027
11162
|
/**
|
|
11163
|
+
* The pipeline steps this ROOT detector can supply from its own output
|
|
11164
|
+
* (D730): its labels name a step's effect (`deer` for `animal-classifier`)
|
|
11165
|
+
* or draw a step's box (`license_plate` for `plate-detection`). Computed at
|
|
11166
|
+
* import from THIS model's labelmap by `deriveRootSupplies`, never written
|
|
11167
|
+
* by hand and never assumed per family; a row without it is derived on read
|
|
11168
|
+
* (`rootSuppliesOf`). Whether a camera uses it is the step's own
|
|
11169
|
+
* `useRootModel` flag (`resolveRootSupply`).
|
|
11170
|
+
*/
|
|
11171
|
+
suppliesSteps: array(RootStepSupplySchema).readonly().optional(),
|
|
11172
|
+
/**
|
|
11028
11173
|
* The model's CLIP feature-space contract (text encoder, dimension, vector
|
|
11029
11174
|
* index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
|
|
11030
11175
|
* CLIP image encoder; its absence is what "not a CLIP model" means to the
|
|
@@ -16234,6 +16379,12 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
|
16234
16379
|
kind: "mutation",
|
|
16235
16380
|
auth: "admin"
|
|
16236
16381
|
});
|
|
16382
|
+
var HUB_ADDRESS_ROLES = [
|
|
16383
|
+
"appConnections",
|
|
16384
|
+
"notificationTaps",
|
|
16385
|
+
"internal",
|
|
16386
|
+
"publicEndpoint"
|
|
16387
|
+
];
|
|
16237
16388
|
/**
|
|
16238
16389
|
* Transport bounds for AI capability methods.
|
|
16239
16390
|
*
|
|
@@ -18798,6 +18949,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
18798
18949
|
"stream-offline",
|
|
18799
18950
|
"node-online",
|
|
18800
18951
|
"node-offline",
|
|
18952
|
+
"node-restarting",
|
|
18953
|
+
"node-updating",
|
|
18801
18954
|
"node-inference-unavailable",
|
|
18802
18955
|
"detection-blind",
|
|
18803
18956
|
"addon-crash-loop",
|
|
@@ -20403,7 +20556,13 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20403
20556
|
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20404
20557
|
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20405
20558
|
*/
|
|
20406
|
-
notifySensorRewatched: boolean().optional()
|
|
20559
|
+
notifySensorRewatched: boolean().optional(),
|
|
20560
|
+
/**
|
|
20561
|
+
* D735: notify "ignored" when a sensor this arm bypassed really MOVED while armed (its own
|
|
20562
|
+
* change time is after the arm) and set nothing off. Absent = false (logged, not sent). A
|
|
20563
|
+
* re-sync, a recovery from `unavailable` or a duplicate is never announced, switch or not.
|
|
20564
|
+
*/
|
|
20565
|
+
notifySensorIgnored: boolean().optional()
|
|
20407
20566
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20408
20567
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20409
20568
|
mode: AlarmArmModeSchema,
|
|
@@ -20416,7 +20575,9 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20416
20575
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20417
20576
|
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20418
20577
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20419
|
-
notifySensorRewatched: boolean().nullable().optional()
|
|
20578
|
+
notifySensorRewatched: boolean().nullable().optional(),
|
|
20579
|
+
/** D735: set the switch, or `null` to clear it (back to the default, false). */
|
|
20580
|
+
notifySensorIgnored: boolean().nullable().optional()
|
|
20420
20581
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20421
20582
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20422
20583
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -23331,6 +23492,34 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
23331
23492
|
timestamp: number()
|
|
23332
23493
|
});
|
|
23333
23494
|
/**
|
|
23495
|
+
* A root model's boxes standing in for one crop-kind step's own inference
|
|
23496
|
+
* (D730) — see `runPipeline.suppliedRoot`.
|
|
23497
|
+
*/
|
|
23498
|
+
var SuppliedRootOutputSchema = object({
|
|
23499
|
+
stepId: string(),
|
|
23500
|
+
/** The root model that drew the boxes — stamped on the result. */
|
|
23501
|
+
modelId: string(),
|
|
23502
|
+
detections: array(object({
|
|
23503
|
+
/** `[x1, y1, x2, y2]` in the pixels of the call's image. */
|
|
23504
|
+
bbox: tuple([
|
|
23505
|
+
number(),
|
|
23506
|
+
number(),
|
|
23507
|
+
number(),
|
|
23508
|
+
number()
|
|
23509
|
+
]),
|
|
23510
|
+
score: number(),
|
|
23511
|
+
/**
|
|
23512
|
+
* Five facial landmarks in the same pixels — a face the step's own
|
|
23513
|
+
* detector already re-found inside a root face box (D730), so its
|
|
23514
|
+
* embedder child aligns it exactly as it aligns any detected face.
|
|
23515
|
+
*/
|
|
23516
|
+
landmarks: array(object({
|
|
23517
|
+
x: number(),
|
|
23518
|
+
y: number()
|
|
23519
|
+
})).optional()
|
|
23520
|
+
})).min(1)
|
|
23521
|
+
});
|
|
23522
|
+
/**
|
|
23334
23523
|
* Reference to the frame's retained NATIVE surface + the parent crop's placement
|
|
23335
23524
|
* within the frame, so the executor can re-cut a leaf child ROI at native
|
|
23336
23525
|
* resolution on the detail plane. See the `runPipeline` `nativeCropRef` field.
|
|
@@ -23378,7 +23567,7 @@ var FrameRefSchema = object({
|
|
|
23378
23567
|
timestamp: number(),
|
|
23379
23568
|
capturedAt: number().optional()
|
|
23380
23569
|
});
|
|
23381
|
-
var ModelFormatSchema$
|
|
23570
|
+
var ModelFormatSchema$2 = _enum([
|
|
23382
23571
|
"onnx",
|
|
23383
23572
|
"coreml",
|
|
23384
23573
|
"openvino",
|
|
@@ -23396,7 +23585,7 @@ var PipelineSlotSchema = _enum([
|
|
|
23396
23585
|
var PipelineEngineChoiceSchema = object({
|
|
23397
23586
|
runtime: literal("python"),
|
|
23398
23587
|
backend: string(),
|
|
23399
|
-
format: ModelFormatSchema$
|
|
23588
|
+
format: ModelFormatSchema$2,
|
|
23400
23589
|
device: string().optional()
|
|
23401
23590
|
});
|
|
23402
23591
|
/**
|
|
@@ -23453,14 +23642,12 @@ var PipelineTemplateSchema$1 = object({
|
|
|
23453
23642
|
var PipelineModelOptionSchema = object({
|
|
23454
23643
|
id: string(),
|
|
23455
23644
|
name: string(),
|
|
23456
|
-
formats: record(string(),
|
|
23457
|
-
downloaded: boolean(),
|
|
23458
|
-
sizeMB: number()
|
|
23459
|
-
})),
|
|
23645
|
+
formats: record(string(), PipelineModelFormatStatusSchema),
|
|
23460
23646
|
group: ModelVariantGroupSchema.optional(),
|
|
23461
23647
|
legacy: boolean().optional(),
|
|
23462
23648
|
provider: ModelProviderIdSchema.optional(),
|
|
23463
|
-
defaultConfidence: number().optional()
|
|
23649
|
+
defaultConfidence: number().optional(),
|
|
23650
|
+
suppliesSteps: array(RootStepSupplySchema).readonly().optional()
|
|
23464
23651
|
});
|
|
23465
23652
|
var ConfigFieldBridge = custom();
|
|
23466
23653
|
var PipelineAddonSchemaSchema = object({
|
|
@@ -23622,6 +23809,22 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23622
23809
|
}), {
|
|
23623
23810
|
kind: "mutation",
|
|
23624
23811
|
auth: "admin"
|
|
23812
|
+
}), method(object({
|
|
23813
|
+
nodeId: string(),
|
|
23814
|
+
deviceIds: array(number()).readonly().optional(),
|
|
23815
|
+
dryRun: boolean()
|
|
23816
|
+
}), object({
|
|
23817
|
+
entries: array(object({
|
|
23818
|
+
deviceId: number(),
|
|
23819
|
+
keys: array(string()).readonly()
|
|
23820
|
+
})).readonly(),
|
|
23821
|
+
refused: array(object({
|
|
23822
|
+
deviceId: number(),
|
|
23823
|
+
reason: string()
|
|
23824
|
+
})).readonly()
|
|
23825
|
+
}), {
|
|
23826
|
+
kind: "mutation",
|
|
23827
|
+
auth: "admin"
|
|
23625
23828
|
}), method(object({ nodeId: string() }), object({ unhealthy: array(object({
|
|
23626
23829
|
/** `<backend>:<device>`, e.g. `openvino:gpu`. */
|
|
23627
23830
|
deviceKey: string(),
|
|
@@ -23658,11 +23861,11 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23658
23861
|
}), PipelineTemplateSchema$1, { kind: "mutation" }), method(object({ id: string() }), _void(), { kind: "mutation" }), method(_void(), InferenceCapabilitiesBridge), method(object({ addonId: string() }), ModelAvailabilityListBridge), method(object({
|
|
23659
23862
|
addonId: string(),
|
|
23660
23863
|
modelId: string(),
|
|
23661
|
-
format: ModelFormatSchema$
|
|
23864
|
+
format: ModelFormatSchema$2
|
|
23662
23865
|
}), DownloadModelResultSchema, { kind: "mutation" }), method(object({
|
|
23663
23866
|
addonId: string(),
|
|
23664
23867
|
modelId: string(),
|
|
23665
|
-
format: ModelFormatSchema$
|
|
23868
|
+
format: ModelFormatSchema$2
|
|
23666
23869
|
}), object({ success: literal(true) }), { kind: "mutation" }), method(object({
|
|
23667
23870
|
steps: array(PipelineStepInputSchema).min(1),
|
|
23668
23871
|
frame: FrameInputSchema.optional(),
|
|
@@ -23728,7 +23931,16 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23728
23931
|
* `device-not-servable`), and nothing reaches the camera's live
|
|
23729
23932
|
* trace stream. Absent ⇒ unchanged behaviour.
|
|
23730
23933
|
*/
|
|
23731
|
-
replay: literal(true).optional()
|
|
23934
|
+
replay: literal(true).optional(),
|
|
23935
|
+
/**
|
|
23936
|
+
* Root-supplied detections for the tree's ROOT step (D730). Set by
|
|
23937
|
+
* `runDetailSubtree` when the camera's root model supplies a crop-kind
|
|
23938
|
+
* step (a Frigate+ `license_plate` for `plate-detection`): the step is
|
|
23939
|
+
* NOT inferred, these boxes are its output, and its children (the plate
|
|
23940
|
+
* reader) run on them through their own crop policy. Boxes are in the
|
|
23941
|
+
* PIXELS of the image this call carries. Absent ⇒ the root step runs.
|
|
23942
|
+
*/
|
|
23943
|
+
suppliedRoot: SuppliedRootOutputSchema.optional()
|
|
23732
23944
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
23733
23945
|
steps: array(PipelineStepInputSchema).min(1),
|
|
23734
23946
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
@@ -23810,6 +24022,352 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23810
24022
|
filename: string().optional(),
|
|
23811
24023
|
settings: record(string(), unknown()).optional()
|
|
23812
24024
|
}), AudioTestResultSchema, { kind: "mutation" }), method(_void(), ConfigUISchemaNullableBridge);
|
|
24025
|
+
/**
|
|
24026
|
+
* Wire shapes of the Load balancing surface (D748): the session placement
|
|
24027
|
+
* policy, the atomic share write, the observed placement statistics, the
|
|
24028
|
+
* hardware share suggestion and the stale device pins.
|
|
24029
|
+
*/
|
|
24030
|
+
/**
|
|
24031
|
+
* How a new detection session picks its node and device.
|
|
24032
|
+
* - `least-loaded` — the historical rule: lowest `attached / weight`, a
|
|
24033
|
+
* constant node order at a tie (D37). An idle node always ties at 0, so a
|
|
24034
|
+
* weight only bites once a node already holds a session.
|
|
24035
|
+
* - `share` — the share of PARALLEL sessions is held to the weights, and a
|
|
24036
|
+
* full or drowning node yields to a free one (D748).
|
|
24037
|
+
*/
|
|
24038
|
+
var SessionPlacementPolicySchema = _enum(["least-loaded", "share"]);
|
|
24039
|
+
var LoadBalancingSharesInputSchema = object({
|
|
24040
|
+
/** nodeId → share (> 0). A node left out keeps its weight. */
|
|
24041
|
+
nodes: record(string(), number().positive()).default({}),
|
|
24042
|
+
/** nodeId → deviceKey → share (> 0). A device left out keeps its weight. */
|
|
24043
|
+
devices: record(string(), record(string(), number().positive())).default({})
|
|
24044
|
+
});
|
|
24045
|
+
var PlacementStatsInputSchema = object({
|
|
24046
|
+
/** Window the observed shares are averaged over (default 1 h, max 24 h). */
|
|
24047
|
+
windowMs: number().int().min(6e4).max(1440 * 60 * 1e3).default(3600 * 1e3) });
|
|
24048
|
+
var PlacementDeviceStatsSchema = object({
|
|
24049
|
+
deviceKey: string(),
|
|
24050
|
+
/** Sessions running on this device now. */
|
|
24051
|
+
sessionsNow: number(),
|
|
24052
|
+
/** Sessions started on this device inside the window. */
|
|
24053
|
+
sessionsStarted: number(),
|
|
24054
|
+
/** Time-weighted share of the node's parallel sessions over the window (0–1); null = no session ran. */
|
|
24055
|
+
observedShare: number().nullable()
|
|
24056
|
+
});
|
|
24057
|
+
var PlacementNodeStatsSchema = object({
|
|
24058
|
+
nodeId: string(),
|
|
24059
|
+
sessionsNow: number(),
|
|
24060
|
+
sessionsStarted: number(),
|
|
24061
|
+
/** Time-weighted share of the cluster's parallel sessions over the window (0–1); null = none ran. */
|
|
24062
|
+
observedShare: number().nullable(),
|
|
24063
|
+
/** Most sessions this node ran at once inside the window. */
|
|
24064
|
+
peakSessions: number(),
|
|
24065
|
+
/** Sessions a share election handed elsewhere because this node was full or drowning. */
|
|
24066
|
+
yieldsAway: number(),
|
|
24067
|
+
devices: array(PlacementDeviceStatsSchema).readonly()
|
|
24068
|
+
});
|
|
24069
|
+
/** A camera's device pin that the session path cannot honour. */
|
|
24070
|
+
var StaleDevicePinSchema = object({
|
|
24071
|
+
deviceId: number(),
|
|
24072
|
+
deviceKey: string(),
|
|
24073
|
+
/** `disabled` — the key exists on some node but is not enabled anywhere; `absent` — no node has it. */
|
|
24074
|
+
reason: _enum(["disabled", "absent"])
|
|
24075
|
+
});
|
|
24076
|
+
var PlacementStatsSchema = object({
|
|
24077
|
+
policy: SessionPlacementPolicySchema,
|
|
24078
|
+
windowMs: number(),
|
|
24079
|
+
/** How much of the window was actually observed (the hub keeps it in memory). */
|
|
24080
|
+
observedForMs: number(),
|
|
24081
|
+
sessionsNow: number(),
|
|
24082
|
+
/** Most parallel sessions across the cluster inside the window. */
|
|
24083
|
+
clusterPeakSessions: number(),
|
|
24084
|
+
nodes: array(PlacementNodeStatsSchema).readonly(),
|
|
24085
|
+
stalePins: array(StaleDevicePinSchema).readonly()
|
|
24086
|
+
});
|
|
24087
|
+
var SuggestSharesInputSchema = object({ headroom: number().min(.3).max(.5).default(.4) });
|
|
24088
|
+
var SuggestedDeviceShareSchema = object({
|
|
24089
|
+
deviceKey: string(),
|
|
24090
|
+
/** Share of the node (0–100, rounded). */
|
|
24091
|
+
share: number(),
|
|
24092
|
+
modelId: string().nullable(),
|
|
24093
|
+
/** Inferences per second at that model, from the measured table. */
|
|
24094
|
+
fps: number().nullable(),
|
|
24095
|
+
measured: boolean(),
|
|
24096
|
+
/** Advisory session cap: ⌊fps × (1 − headroom) / camera fps⌋. Never enforced. */
|
|
24097
|
+
suggestedMaxSessions: number().nullable()
|
|
24098
|
+
});
|
|
24099
|
+
var SuggestedNodeShareSchema = object({
|
|
24100
|
+
nodeId: string(),
|
|
24101
|
+
/** Share of the cluster (0–100, rounded); null = node skipped (offline, unknown hardware). */
|
|
24102
|
+
share: number().nullable(),
|
|
24103
|
+
/** Parallel sessions the node sustains at the suggested models with the headroom kept free. */
|
|
24104
|
+
capacitySessions: number(),
|
|
24105
|
+
devices: array(SuggestedDeviceShareSchema).readonly(),
|
|
24106
|
+
skippedReason: string().nullable()
|
|
24107
|
+
});
|
|
24108
|
+
var SuggestSharesResultSchema = object({
|
|
24109
|
+
headroom: number(),
|
|
24110
|
+
/** Camera detection rate the capacity is counted in (the fastest camera's fps). */
|
|
24111
|
+
cameraFps: number(),
|
|
24112
|
+
/** How many share → model → capacity rounds ran before the shares stopped moving (≤ 3). */
|
|
24113
|
+
iterations: number(),
|
|
24114
|
+
nodes: array(SuggestedNodeShareSchema).readonly()
|
|
24115
|
+
});
|
|
24116
|
+
/**
|
|
24117
|
+
* Where the node and device shares come from (D750).
|
|
24118
|
+
* - `auto` — computed by the system from the cluster's measured capacity at
|
|
24119
|
+
* the Auto tune models, and recomputed whenever a node or device joins,
|
|
24120
|
+
* leaves, is switched on or off, or changes model.
|
|
24121
|
+
* - `manual` — the operator's stored sliders. A node or device that cannot
|
|
24122
|
+
* take sessions gives its share to the others in proportion; the stored
|
|
24123
|
+
* values are never rewritten for that.
|
|
24124
|
+
*/
|
|
24125
|
+
var ShareSourceSchema = _enum(["auto", "manual"]);
|
|
24126
|
+
var SetShareSourceInputSchema = object({ source: ShareSourceSchema });
|
|
24127
|
+
object({
|
|
24128
|
+
nodes: record(string(), number()),
|
|
24129
|
+
devices: record(string(), record(string(), number()))
|
|
24130
|
+
});
|
|
24131
|
+
var EffectiveDeviceShareSchema = object({
|
|
24132
|
+
deviceKey: string(),
|
|
24133
|
+
/** Can take sessions now (enabled, available, can run the root). */
|
|
24134
|
+
eligible: boolean(),
|
|
24135
|
+
/** The share the source assigns, as a percentage of the node's devices. */
|
|
24136
|
+
configuredPct: number(),
|
|
24137
|
+
/** The share actually used, after an ineligible device's share went to the others. */
|
|
24138
|
+
effectivePct: number()
|
|
24139
|
+
});
|
|
24140
|
+
var EffectiveNodeShareSchema = object({
|
|
24141
|
+
nodeId: string(),
|
|
24142
|
+
eligible: boolean(),
|
|
24143
|
+
configuredPct: number(),
|
|
24144
|
+
effectivePct: number(),
|
|
24145
|
+
devices: array(EffectiveDeviceShareSchema).readonly()
|
|
24146
|
+
});
|
|
24147
|
+
var EffectiveSharesSchema = object({
|
|
24148
|
+
source: ShareSourceSchema,
|
|
24149
|
+
policy: SessionPlacementPolicySchema,
|
|
24150
|
+
/** `auto` with no computed answer yet: the stored sliders are used meanwhile. */
|
|
24151
|
+
autoPending: boolean(),
|
|
24152
|
+
/** When the automatic shares were last computed (ms epoch); null = never. */
|
|
24153
|
+
computedAt: number().nullable(),
|
|
24154
|
+
/** What made the system recompute them last. */
|
|
24155
|
+
trigger: string().nullable(),
|
|
24156
|
+
nodes: array(EffectiveNodeShareSchema).readonly(),
|
|
24157
|
+
/** The relative weights the election reads (before eligibility). */
|
|
24158
|
+
nodeWeights: record(string(), number()),
|
|
24159
|
+
deviceWeights: record(string(), record(string(), number()))
|
|
24160
|
+
});
|
|
24161
|
+
/**
|
|
24162
|
+
* The wire shapes of the Auto tune plan and apply (D745), used by the
|
|
24163
|
+
* `pipeline-orchestrator` cap. The recommender's own types
|
|
24164
|
+
* (`recommend.ts`, `demand.ts`) are the TS face of the same data; these
|
|
24165
|
+
* schemas are what crosses the cap boundary.
|
|
24166
|
+
*/
|
|
24167
|
+
var ModelFormatSchema$1 = _enum(MODEL_FORMATS);
|
|
24168
|
+
var HardwareClassIdSchema = _enum([
|
|
24169
|
+
"intel-core-ultra",
|
|
24170
|
+
"intel-n-series",
|
|
24171
|
+
"apple-m-base",
|
|
24172
|
+
"apple-m-pro",
|
|
24173
|
+
"unknown"
|
|
24174
|
+
]);
|
|
24175
|
+
var AcceleratorKindSchema = _enum([
|
|
24176
|
+
"intel-npu",
|
|
24177
|
+
"intel-igpu",
|
|
24178
|
+
"x86-cpu",
|
|
24179
|
+
"arm-cpu",
|
|
24180
|
+
"apple-ane",
|
|
24181
|
+
"coral"
|
|
24182
|
+
]);
|
|
24183
|
+
var RecommendationReasonSchema = discriminatedUnion("kind", [
|
|
24184
|
+
object({
|
|
24185
|
+
kind: literal("fits"),
|
|
24186
|
+
utilisation: number()
|
|
24187
|
+
}),
|
|
24188
|
+
object({
|
|
24189
|
+
kind: literal("tie-faster"),
|
|
24190
|
+
over: string(),
|
|
24191
|
+
recallDelta: number()
|
|
24192
|
+
}),
|
|
24193
|
+
object({
|
|
24194
|
+
kind: literal("stepped-down"),
|
|
24195
|
+
from: string(),
|
|
24196
|
+
to: string(),
|
|
24197
|
+
limitedBy: string()
|
|
24198
|
+
}),
|
|
24199
|
+
object({
|
|
24200
|
+
kind: literal("no-fit-lightest"),
|
|
24201
|
+
utilisation: number()
|
|
24202
|
+
}),
|
|
24203
|
+
object({
|
|
24204
|
+
kind: literal("derived-latency"),
|
|
24205
|
+
modelId: string()
|
|
24206
|
+
}),
|
|
24207
|
+
object({
|
|
24208
|
+
kind: literal("estimated-load"),
|
|
24209
|
+
observedForMs: number().nullable()
|
|
24210
|
+
}),
|
|
24211
|
+
object({ kind: literal("cpu-device") }),
|
|
24212
|
+
object({ kind: literal("coral-untouched") }),
|
|
24213
|
+
object({ kind: literal("device-disabled") }),
|
|
24214
|
+
object({ kind: literal("device-unavailable") }),
|
|
24215
|
+
object({ kind: literal("node-offline") }),
|
|
24216
|
+
object({ kind: literal("no-hardware-facts") }),
|
|
24217
|
+
object({
|
|
24218
|
+
kind: literal("no-measured-data"),
|
|
24219
|
+
hardwareClass: HardwareClassIdSchema
|
|
24220
|
+
}),
|
|
24221
|
+
object({
|
|
24222
|
+
kind: literal("no-family-build"),
|
|
24223
|
+
format: ModelFormatSchema$1
|
|
24224
|
+
})
|
|
24225
|
+
]);
|
|
24226
|
+
var DeviceDemandSchema = object({
|
|
24227
|
+
nodeId: string(),
|
|
24228
|
+
deviceKey: string(),
|
|
24229
|
+
demandFps: number(),
|
|
24230
|
+
maxCameraFps: number(),
|
|
24231
|
+
alwaysOnCameras: number(),
|
|
24232
|
+
onMotionSessions: number(),
|
|
24233
|
+
onMotionSource: _enum([
|
|
24234
|
+
"observed-24h",
|
|
24235
|
+
"estimate",
|
|
24236
|
+
"none"
|
|
24237
|
+
]),
|
|
24238
|
+
observedForMs: number().nullable(),
|
|
24239
|
+
/** How on-motion sessions were charged: per-device observation, or split by share (D748). */
|
|
24240
|
+
placement: SessionPlacementPolicySchema
|
|
24241
|
+
});
|
|
24242
|
+
var DeviceModelChoiceSchema = object({
|
|
24243
|
+
modelId: string(),
|
|
24244
|
+
p50Ms: number(),
|
|
24245
|
+
fps: number(),
|
|
24246
|
+
measured: boolean(),
|
|
24247
|
+
utilisation: number(),
|
|
24248
|
+
personRecall: number()
|
|
24249
|
+
});
|
|
24250
|
+
var DeviceRecommendationSchema = object({
|
|
24251
|
+
deviceKey: string(),
|
|
24252
|
+
accelerator: AcceleratorKindSchema.nullable(),
|
|
24253
|
+
enabled: boolean(),
|
|
24254
|
+
available: boolean(),
|
|
24255
|
+
demand: DeviceDemandSchema.nullable(),
|
|
24256
|
+
chosen: DeviceModelChoiceSchema.nullable(),
|
|
24257
|
+
reasons: array(RecommendationReasonSchema).readonly()
|
|
24258
|
+
});
|
|
24259
|
+
var NodeRecommendationSchema = object({
|
|
24260
|
+
nodeId: string(),
|
|
24261
|
+
reachable: boolean(),
|
|
24262
|
+
hardwareClass: HardwareClassIdSchema.nullable(),
|
|
24263
|
+
cpuModel: string().nullable(),
|
|
24264
|
+
skipped: boolean(),
|
|
24265
|
+
acceleratorModelId: string().nullable(),
|
|
24266
|
+
devices: array(DeviceRecommendationSchema).readonly(),
|
|
24267
|
+
reasons: array(RecommendationReasonSchema).readonly()
|
|
24268
|
+
});
|
|
24269
|
+
var ModelPinChangeSchema = object({
|
|
24270
|
+
stepId: string(),
|
|
24271
|
+
before: string().nullable(),
|
|
24272
|
+
after: string().nullable()
|
|
24273
|
+
});
|
|
24274
|
+
var NodeDeviceChangeSchema = object({
|
|
24275
|
+
nodeId: string(),
|
|
24276
|
+
deviceKey: string(),
|
|
24277
|
+
madeExplicit: boolean(),
|
|
24278
|
+
modelPins: array(ModelPinChangeSchema).readonly(),
|
|
24279
|
+
thresholds: array(object({
|
|
24280
|
+
stepId: string(),
|
|
24281
|
+
keys: array(string()).readonly()
|
|
24282
|
+
})).readonly()
|
|
24283
|
+
});
|
|
24284
|
+
var CameraOverrideClearSchema = object({
|
|
24285
|
+
deviceId: number(),
|
|
24286
|
+
source: _enum(["step-override", "wholesale"]),
|
|
24287
|
+
nodeId: string(),
|
|
24288
|
+
deviceKey: string().nullable(),
|
|
24289
|
+
stepId: string(),
|
|
24290
|
+
modelIdBefore: string().nullable(),
|
|
24291
|
+
keys: array(string()).readonly()
|
|
24292
|
+
});
|
|
24293
|
+
var DetectorStoreClearSchema = object({
|
|
24294
|
+
deviceId: number(),
|
|
24295
|
+
keys: array(string()).readonly()
|
|
24296
|
+
});
|
|
24297
|
+
var AutoTuneWarningSchema = discriminatedUnion("kind", [
|
|
24298
|
+
object({
|
|
24299
|
+
kind: literal("detector-store-cluster-wide"),
|
|
24300
|
+
skippedNodes: array(string()).readonly()
|
|
24301
|
+
}),
|
|
24302
|
+
object({
|
|
24303
|
+
kind: literal("detector-store-unreadable"),
|
|
24304
|
+
error: string()
|
|
24305
|
+
}),
|
|
24306
|
+
object({
|
|
24307
|
+
kind: literal("coral-enabled"),
|
|
24308
|
+
nodeId: string(),
|
|
24309
|
+
deviceKey: string()
|
|
24310
|
+
})
|
|
24311
|
+
]);
|
|
24312
|
+
var AutoTuneOptionsSchema = object({
|
|
24313
|
+
/** Share of each accelerator's throughput kept free (0.3–0.5). */
|
|
24314
|
+
headroom: number().min(.3).max(.5).default(.4),
|
|
24315
|
+
/**
|
|
24316
|
+
* What-if shares (D748): plan as if these node/device shares were stored
|
|
24317
|
+
* and the policy were `share`. Absent = the stored shares under the stored
|
|
24318
|
+
* policy. A what-if plan is for display; apply always re-plans from what
|
|
24319
|
+
* is stored.
|
|
24320
|
+
*/
|
|
24321
|
+
shares: LoadBalancingSharesInputSchema.optional()
|
|
24322
|
+
});
|
|
24323
|
+
var AutoTunePlanSchema = object({
|
|
24324
|
+
/** Hash of everything the apply will write — the apply refuses a different one. */
|
|
24325
|
+
planHash: string(),
|
|
24326
|
+
family: literal("yolov9"),
|
|
24327
|
+
headroom: number(),
|
|
24328
|
+
/** Planned under what-if shares (D748): for display — apply refuses it as stale. */
|
|
24329
|
+
whatIf: boolean(),
|
|
24330
|
+
generatedAt: number(),
|
|
24331
|
+
nodes: array(NodeRecommendationSchema).readonly(),
|
|
24332
|
+
nodeChanges: array(NodeDeviceChangeSchema).readonly(),
|
|
24333
|
+
cameraClears: array(CameraOverrideClearSchema).readonly(),
|
|
24334
|
+
detectorStoreClears: array(DetectorStoreClearSchema).readonly(),
|
|
24335
|
+
warnings: array(AutoTuneWarningSchema).readonly()
|
|
24336
|
+
});
|
|
24337
|
+
var AutoTuneApplyInputSchema = object({
|
|
24338
|
+
planHash: string(),
|
|
24339
|
+
headroom: number().min(.3).max(.5).default(.4)
|
|
24340
|
+
});
|
|
24341
|
+
var AutoTunePhaseResultSchema = object({
|
|
24342
|
+
phase: _enum([
|
|
24343
|
+
"download",
|
|
24344
|
+
"camera-overrides",
|
|
24345
|
+
"detector-thresholds",
|
|
24346
|
+
"node-models",
|
|
24347
|
+
"redispatch"
|
|
24348
|
+
]),
|
|
24349
|
+
ok: boolean(),
|
|
24350
|
+
detail: string()
|
|
24351
|
+
});
|
|
24352
|
+
var AutoTuneApplyResultSchema = discriminatedUnion("kind", [
|
|
24353
|
+
object({
|
|
24354
|
+
kind: literal("applied"),
|
|
24355
|
+
planHash: string(),
|
|
24356
|
+
phases: array(AutoTunePhaseResultSchema).readonly()
|
|
24357
|
+
}),
|
|
24358
|
+
object({
|
|
24359
|
+
kind: literal("aborted"),
|
|
24360
|
+
phases: array(AutoTunePhaseResultSchema).readonly()
|
|
24361
|
+
}),
|
|
24362
|
+
object({
|
|
24363
|
+
kind: literal("stale"),
|
|
24364
|
+
plan: AutoTunePlanSchema
|
|
24365
|
+
}),
|
|
24366
|
+
object({
|
|
24367
|
+
kind: literal("refused"),
|
|
24368
|
+
reason: _enum(["apply-in-progress"])
|
|
24369
|
+
})
|
|
24370
|
+
]);
|
|
23813
24371
|
object({
|
|
23814
24372
|
activeCameras: number(),
|
|
23815
24373
|
throttledCameras: number(),
|
|
@@ -24830,7 +25388,22 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
|
|
|
24830
25388
|
*/
|
|
24831
25389
|
cropJpeg: string().optional(),
|
|
24832
25390
|
parent: DetailParentSchema,
|
|
24833
|
-
steps: array(string()).optional()
|
|
25391
|
+
steps: array(string()).optional(),
|
|
25392
|
+
/**
|
|
25393
|
+
* The camera's root model already drew this step's boxes (D730): a
|
|
25394
|
+
* `license_plate` inside the parent vehicle. The named step is NOT
|
|
25395
|
+
* inferred — these FRAME-space boxes are its output — and its
|
|
25396
|
+
* requested children (the plate reader) run on them. Absent ⇒ every
|
|
25397
|
+
* requested step infers as before.
|
|
25398
|
+
*/
|
|
25399
|
+
supplied: object({
|
|
25400
|
+
stepId: string(),
|
|
25401
|
+
modelId: string(),
|
|
25402
|
+
boxes: array(object({
|
|
25403
|
+
bbox: NativeCropBboxSchema,
|
|
25404
|
+
score: number()
|
|
25405
|
+
})).min(1)
|
|
25406
|
+
}).optional()
|
|
24834
25407
|
}), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" }), method(object({
|
|
24835
25408
|
/** Catalog step id, e.g. `clip-embedding`. */
|
|
24836
25409
|
stepId: string(),
|
|
@@ -24975,7 +25548,6 @@ var CameraStepOverridePatchSchema = object({
|
|
|
24975
25548
|
settings: record(string(), unknown()).readonly().optional()
|
|
24976
25549
|
});
|
|
24977
25550
|
var CameraPipelineSettingsSchema = object({
|
|
24978
|
-
pinnedAgentNodeId: string().optional(),
|
|
24979
25551
|
stepToggles: record(string(), boolean()).optional(),
|
|
24980
25552
|
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
24981
25553
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
@@ -25474,12 +26046,6 @@ method(object({
|
|
|
25474
26046
|
}), object({ success: literal(true) }), {
|
|
25475
26047
|
kind: "mutation",
|
|
25476
26048
|
auth: "admin"
|
|
25477
|
-
}), method(object({
|
|
25478
|
-
agentNodeId: string(),
|
|
25479
|
-
detectWeight: number().positive().nullable()
|
|
25480
|
-
}), object({ success: literal(true) }), {
|
|
25481
|
-
kind: "mutation",
|
|
25482
|
-
auth: "admin"
|
|
25483
26049
|
}), method(object({
|
|
25484
26050
|
agentNodeId: string(),
|
|
25485
26051
|
detect: boolean().nullable().optional(),
|
|
@@ -25521,6 +26087,15 @@ method(object({
|
|
|
25521
26087
|
}), {
|
|
25522
26088
|
kind: "mutation",
|
|
25523
26089
|
auth: "admin"
|
|
26090
|
+
}), method(AutoTuneOptionsSchema, AutoTunePlanSchema, { auth: "admin" }), method(AutoTuneApplyInputSchema, AutoTuneApplyResultSchema, {
|
|
26091
|
+
kind: "mutation",
|
|
26092
|
+
auth: "admin"
|
|
26093
|
+
}), method(LoadBalancingSharesInputSchema, object({ success: literal(true) }), {
|
|
26094
|
+
kind: "mutation",
|
|
26095
|
+
auth: "admin"
|
|
26096
|
+
}), method(PlacementStatsInputSchema, PlacementStatsSchema, { auth: "admin" }), method(SuggestSharesInputSchema, SuggestSharesResultSchema, { auth: "admin" }), method(_void(), EffectiveSharesSchema, { auth: "admin" }), method(SetShareSourceInputSchema, object({ success: literal(true) }), {
|
|
26097
|
+
kind: "mutation",
|
|
26098
|
+
auth: "admin"
|
|
25524
26099
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
25525
26100
|
deviceId: number(),
|
|
25526
26101
|
addonId: string(),
|
|
@@ -28131,6 +28706,14 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
28131
28706
|
*/
|
|
28132
28707
|
alive: boolean()
|
|
28133
28708
|
})), method(object({
|
|
28709
|
+
deviceId: number().int().nonnegative(),
|
|
28710
|
+
sessionId: string(),
|
|
28711
|
+
downlinkMbps: number().nonnegative()
|
|
28712
|
+
}), object({
|
|
28713
|
+
outcome: _enum(["switching", "held"]),
|
|
28714
|
+
tier: CamProfileSchema.nullable(),
|
|
28715
|
+
reason: string()
|
|
28716
|
+
}), { kind: "mutation" }), method(object({
|
|
28134
28717
|
deviceId: number().int().nonnegative(),
|
|
28135
28718
|
sessionId: string()
|
|
28136
28719
|
}), WebrtcSessionDebugSchema, { kind: "query" });
|
|
@@ -30806,7 +31389,8 @@ var ConnectionEndpointSchema = object({
|
|
|
30806
31389
|
"lan-ipv6",
|
|
30807
31390
|
"public",
|
|
30808
31391
|
"loopback",
|
|
30809
|
-
"app-link"
|
|
31392
|
+
"app-link",
|
|
31393
|
+
"custom"
|
|
30810
31394
|
]),
|
|
30811
31395
|
/**
|
|
30812
31396
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -30875,7 +31459,7 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
30875
31459
|
localPort: AdvertisedLocalPortSchema
|
|
30876
31460
|
});
|
|
30877
31461
|
/**
|
|
30878
|
-
* The address flagged for notification
|
|
31462
|
+
* The address flagged for notification taps (`notificationTaps`). `baseUrl: null` = AUTO, which
|
|
30879
31463
|
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
30880
31464
|
* so the UI can show it either way.
|
|
30881
31465
|
*/
|
|
@@ -30908,6 +31492,72 @@ var ViewerEndpointsSchema = object({
|
|
|
30908
31492
|
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
30909
31493
|
resolved: array(string()).readonly()
|
|
30910
31494
|
});
|
|
31495
|
+
/**
|
|
31496
|
+
* DEPRECATED compatibility shape of `getHubAddresses` (D729 amendment, kept
|
|
31497
|
+
* for addons built against it): `cluster` is the `internal` role, `browser`
|
|
31498
|
+
* the `publicEndpoint` role; `override` is the flagged address.
|
|
31499
|
+
*/
|
|
31500
|
+
var HubAddressSnapshotSchema = object({
|
|
31501
|
+
override: string().nullable(),
|
|
31502
|
+
resolved: string().nullable(),
|
|
31503
|
+
source: _enum([
|
|
31504
|
+
"override",
|
|
31505
|
+
"auto",
|
|
31506
|
+
"none"
|
|
31507
|
+
])
|
|
31508
|
+
});
|
|
31509
|
+
var HubAddressesSchema = object({
|
|
31510
|
+
cluster: HubAddressSnapshotSchema,
|
|
31511
|
+
browser: HubAddressSnapshotSchema
|
|
31512
|
+
});
|
|
31513
|
+
/**
|
|
31514
|
+
* What an address is used for (`hub-address.ts`, D734). `appConnections` is
|
|
31515
|
+
* many-valued; `notificationTaps`, `publicEndpoint` and `internal` are carried
|
|
31516
|
+
* by at most one address.
|
|
31517
|
+
*/
|
|
31518
|
+
var HubAddressRoleSchema = _enum(HUB_ADDRESS_ROLES);
|
|
31519
|
+
var RoleSourceSchema = _enum([
|
|
31520
|
+
"flagged",
|
|
31521
|
+
"auto",
|
|
31522
|
+
"none"
|
|
31523
|
+
]);
|
|
31524
|
+
/** One single-valued role: the flagged address, the one in use, and why. */
|
|
31525
|
+
var HubAddressRoleResolutionSchema = object({
|
|
31526
|
+
/** The address carrying the flag, or null = automatic. */
|
|
31527
|
+
flagged: string().nullable(),
|
|
31528
|
+
/** The address in use, or null when nothing qualifies (never loopback). */
|
|
31529
|
+
resolved: string().nullable(),
|
|
31530
|
+
source: RoleSourceSchema
|
|
31531
|
+
});
|
|
31532
|
+
var HubAppConnectionsResolutionSchema = object({
|
|
31533
|
+
/** The addresses flagged `appConnections`, or empty = automatic. */
|
|
31534
|
+
flagged: array(string()).readonly(),
|
|
31535
|
+
/** What the apps race right now. */
|
|
31536
|
+
resolved: array(string()).readonly(),
|
|
31537
|
+
source: RoleSourceSchema
|
|
31538
|
+
});
|
|
31539
|
+
var HubAddressBookSchema = object({
|
|
31540
|
+
rows: array(ConnectionEndpointSchema.extend({
|
|
31541
|
+
/** In the hub's detected palette right now. */
|
|
31542
|
+
detected: boolean(),
|
|
31543
|
+
/** Entered by the operator (removable). */
|
|
31544
|
+
custom: boolean(),
|
|
31545
|
+
/** The roles explicitly flagged on this address. */
|
|
31546
|
+
flags: array(HubAddressRoleSchema).readonly(),
|
|
31547
|
+
/** The roles this address serves right now — flagged or automatic. */
|
|
31548
|
+
inUse: array(HubAddressRoleSchema).readonly(),
|
|
31549
|
+
/** The roles this address may be flagged with. */
|
|
31550
|
+
eligible: array(HubAddressRoleSchema).readonly()
|
|
31551
|
+
})).readonly(),
|
|
31552
|
+
roles: object({
|
|
31553
|
+
appConnections: HubAppConnectionsResolutionSchema,
|
|
31554
|
+
notificationTaps: HubAddressRoleResolutionSchema,
|
|
31555
|
+
internal: HubAddressRoleResolutionSchema,
|
|
31556
|
+
publicEndpoint: HubAddressRoleResolutionSchema
|
|
31557
|
+
}),
|
|
31558
|
+
/** The `hub=` an app link carries (D709), or null. */
|
|
31559
|
+
appLinkHub: string().nullable()
|
|
31560
|
+
});
|
|
30911
31561
|
var AllowedAddressesSchema = object({
|
|
30912
31562
|
/**
|
|
30913
31563
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -30951,10 +31601,27 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
30951
31601
|
* tunnel always emits `https://` regardless. */
|
|
30952
31602
|
scheme: _enum(["http", "https"]).optional(),
|
|
30953
31603
|
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
30954
|
-
* an address notification
|
|
31604
|
+
* an address notification taps can be flagged with, not a hub
|
|
30955
31605
|
* route. Default `false`: racers and rankers never see it. */
|
|
30956
31606
|
includeAppLink: boolean().optional()
|
|
30957
|
-
}), 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(
|
|
31607
|
+
}), 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(object({ scheme: _enum(["http", "https"]).optional() }).optional(), HubAddressBookSchema), method(object({
|
|
31608
|
+
baseUrl: string(),
|
|
31609
|
+
label: string().max(80)
|
|
31610
|
+
}), HubAddressBookSchema, {
|
|
31611
|
+
kind: "mutation",
|
|
31612
|
+
auth: "admin"
|
|
31613
|
+
}), method(object({ baseUrl: string() }), HubAddressBookSchema, {
|
|
31614
|
+
kind: "mutation",
|
|
31615
|
+
auth: "admin"
|
|
31616
|
+
}), method(object({
|
|
31617
|
+
role: HubAddressRoleSchema,
|
|
31618
|
+
baseUrl: string().nullable(),
|
|
31619
|
+
enabled: boolean(),
|
|
31620
|
+
acceptInsecureHttp: boolean().optional()
|
|
31621
|
+
}), HubAddressBookSchema, {
|
|
31622
|
+
kind: "mutation",
|
|
31623
|
+
auth: "admin"
|
|
31624
|
+
}), method(_void(), HubAddressesSchema), 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, {
|
|
30958
31625
|
kind: "mutation",
|
|
30959
31626
|
auth: "admin"
|
|
30960
31627
|
}), method(object({
|
|
@@ -31344,7 +32011,8 @@ object({
|
|
|
31344
32011
|
* writes this slice (not even a boot seed), and neither does the runner's
|
|
31345
32012
|
* phase machine: its phase is "a session is attached" for every on-motion
|
|
31346
32013
|
* session, not motion, and it now has its own `DetectionPhaseTransition`.
|
|
31347
|
-
* A provider's `isDetected`
|
|
32014
|
+
* A provider's `isDetected` and `getStatus` answer from the hub's slice
|
|
32015
|
+
* (`hubMotionNativeProvider`).
|
|
31348
32016
|
* - **Sensors** (Home Assistant binary sensors, Homematic, Matter, Alexa
|
|
31349
32017
|
* imports) — the provider pushes both edges itself, from the upstream
|
|
31350
32018
|
* system's own state change. That is the sensor's own fact.
|
|
@@ -36475,6 +37143,16 @@ DeviceType.Camera, method(object({
|
|
|
36475
37143
|
package: array(ZoneRuleSchema).readonly()
|
|
36476
37144
|
});
|
|
36477
37145
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
37146
|
+
Object.freeze({
|
|
37147
|
+
person: .5,
|
|
37148
|
+
vehicle: .5,
|
|
37149
|
+
animal: .5
|
|
37150
|
+
});
|
|
37151
|
+
Object.freeze({
|
|
37152
|
+
person: .65,
|
|
37153
|
+
vehicle: .65,
|
|
37154
|
+
animal: .65
|
|
37155
|
+
});
|
|
36478
37156
|
/**
|
|
36479
37157
|
* Accessory device helpers — shared across drivers.
|
|
36480
37158
|
*
|
|
@@ -39403,12 +40081,24 @@ Object.freeze({
|
|
|
39403
40081
|
addonId: null,
|
|
39404
40082
|
access: "view"
|
|
39405
40083
|
},
|
|
40084
|
+
"localNetwork.addCustomAddress": {
|
|
40085
|
+
capName: "local-network",
|
|
40086
|
+
capScope: "system",
|
|
40087
|
+
addonId: null,
|
|
40088
|
+
access: "create"
|
|
40089
|
+
},
|
|
39406
40090
|
"localNetwork.downloadCa": {
|
|
39407
40091
|
capName: "local-network",
|
|
39408
40092
|
capScope: "system",
|
|
39409
40093
|
addonId: null,
|
|
39410
40094
|
access: "view"
|
|
39411
40095
|
},
|
|
40096
|
+
"localNetwork.getAddresses": {
|
|
40097
|
+
capName: "local-network",
|
|
40098
|
+
capScope: "system",
|
|
40099
|
+
addonId: null,
|
|
40100
|
+
access: "view"
|
|
40101
|
+
},
|
|
39412
40102
|
"localNetwork.getAllowedAddresses": {
|
|
39413
40103
|
capName: "local-network",
|
|
39414
40104
|
capScope: "system",
|
|
@@ -39421,6 +40111,12 @@ Object.freeze({
|
|
|
39421
40111
|
addonId: null,
|
|
39422
40112
|
access: "view"
|
|
39423
40113
|
},
|
|
40114
|
+
"localNetwork.getHubAddresses": {
|
|
40115
|
+
capName: "local-network",
|
|
40116
|
+
capScope: "system",
|
|
40117
|
+
addonId: null,
|
|
40118
|
+
access: "view"
|
|
40119
|
+
},
|
|
39424
40120
|
"localNetwork.getNotificationEndpoint": {
|
|
39425
40121
|
capName: "local-network",
|
|
39426
40122
|
capScope: "system",
|
|
@@ -39457,6 +40153,12 @@ Object.freeze({
|
|
|
39457
40153
|
addonId: null,
|
|
39458
40154
|
access: "create"
|
|
39459
40155
|
},
|
|
40156
|
+
"localNetwork.removeCustomAddress": {
|
|
40157
|
+
capName: "local-network",
|
|
40158
|
+
capScope: "system",
|
|
40159
|
+
addonId: null,
|
|
40160
|
+
access: "delete"
|
|
40161
|
+
},
|
|
39460
40162
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
39461
40163
|
capName: "local-network",
|
|
39462
40164
|
capScope: "system",
|
|
@@ -39469,6 +40171,12 @@ Object.freeze({
|
|
|
39469
40171
|
addonId: null,
|
|
39470
40172
|
access: "create"
|
|
39471
40173
|
},
|
|
40174
|
+
"localNetwork.setAddressRole": {
|
|
40175
|
+
capName: "local-network",
|
|
40176
|
+
capScope: "system",
|
|
40177
|
+
addonId: null,
|
|
40178
|
+
access: "create"
|
|
40179
|
+
},
|
|
39472
40180
|
"localNetwork.setAllowedAddresses": {
|
|
39473
40181
|
capName: "local-network",
|
|
39474
40182
|
capScope: "system",
|
|
@@ -40963,6 +41671,12 @@ Object.freeze({
|
|
|
40963
41671
|
addonId: null,
|
|
40964
41672
|
access: "delete"
|
|
40965
41673
|
},
|
|
41674
|
+
"pipelineExecutor.clearModelBoundDeviceOverrides": {
|
|
41675
|
+
capName: "pipeline-executor",
|
|
41676
|
+
capScope: "system",
|
|
41677
|
+
addonId: null,
|
|
41678
|
+
access: "delete"
|
|
41679
|
+
},
|
|
40966
41680
|
"pipelineExecutor.deleteModel": {
|
|
40967
41681
|
capName: "pipeline-executor",
|
|
40968
41682
|
capScope: "system",
|
|
@@ -41179,6 +41893,12 @@ Object.freeze({
|
|
|
41179
41893
|
addonId: null,
|
|
41180
41894
|
access: "view"
|
|
41181
41895
|
},
|
|
41896
|
+
"pipelineOrchestrator.applyAutoTune": {
|
|
41897
|
+
capName: "pipeline-orchestrator",
|
|
41898
|
+
capScope: "system",
|
|
41899
|
+
addonId: null,
|
|
41900
|
+
access: "create"
|
|
41901
|
+
},
|
|
41182
41902
|
"pipelineOrchestrator.applyDeviceSettingsPatch": {
|
|
41183
41903
|
capName: "pipeline-orchestrator",
|
|
41184
41904
|
capScope: "system",
|
|
@@ -41293,6 +42013,12 @@ Object.freeze({
|
|
|
41293
42013
|
addonId: null,
|
|
41294
42014
|
access: "view"
|
|
41295
42015
|
},
|
|
42016
|
+
"pipelineOrchestrator.getEffectiveShares": {
|
|
42017
|
+
capName: "pipeline-orchestrator",
|
|
42018
|
+
capScope: "system",
|
|
42019
|
+
addonId: null,
|
|
42020
|
+
access: "view"
|
|
42021
|
+
},
|
|
41296
42022
|
"pipelineOrchestrator.getGlobalMetrics": {
|
|
41297
42023
|
capName: "pipeline-orchestrator",
|
|
41298
42024
|
capScope: "system",
|
|
@@ -41329,6 +42055,12 @@ Object.freeze({
|
|
|
41329
42055
|
addonId: null,
|
|
41330
42056
|
access: "view"
|
|
41331
42057
|
},
|
|
42058
|
+
"pipelineOrchestrator.getPlacementStats": {
|
|
42059
|
+
capName: "pipeline-orchestrator",
|
|
42060
|
+
capScope: "system",
|
|
42061
|
+
addonId: null,
|
|
42062
|
+
access: "view"
|
|
42063
|
+
},
|
|
41332
42064
|
"pipelineOrchestrator.getReconcileFromDiskStatus": {
|
|
41333
42065
|
capName: "pipeline-orchestrator",
|
|
41334
42066
|
capScope: "system",
|
|
@@ -41353,6 +42085,12 @@ Object.freeze({
|
|
|
41353
42085
|
addonId: null,
|
|
41354
42086
|
access: "create"
|
|
41355
42087
|
},
|
|
42088
|
+
"pipelineOrchestrator.planAutoTune": {
|
|
42089
|
+
capName: "pipeline-orchestrator",
|
|
42090
|
+
capScope: "system",
|
|
42091
|
+
addonId: null,
|
|
42092
|
+
access: "view"
|
|
42093
|
+
},
|
|
41356
42094
|
"pipelineOrchestrator.rebalance": {
|
|
41357
42095
|
capName: "pipeline-orchestrator",
|
|
41358
42096
|
capScope: "system",
|
|
@@ -41413,12 +42151,6 @@ Object.freeze({
|
|
|
41413
42151
|
addonId: null,
|
|
41414
42152
|
access: "create"
|
|
41415
42153
|
},
|
|
41416
|
-
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
41417
|
-
capName: "pipeline-orchestrator",
|
|
41418
|
-
capScope: "system",
|
|
41419
|
-
addonId: null,
|
|
41420
|
-
access: "create"
|
|
41421
|
-
},
|
|
41422
42154
|
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
41423
42155
|
capName: "pipeline-orchestrator",
|
|
41424
42156
|
capScope: "system",
|
|
@@ -41473,12 +42205,30 @@ Object.freeze({
|
|
|
41473
42205
|
addonId: null,
|
|
41474
42206
|
access: "create"
|
|
41475
42207
|
},
|
|
42208
|
+
"pipelineOrchestrator.setLoadBalancingShares": {
|
|
42209
|
+
capName: "pipeline-orchestrator",
|
|
42210
|
+
capScope: "system",
|
|
42211
|
+
addonId: null,
|
|
42212
|
+
access: "create"
|
|
42213
|
+
},
|
|
41476
42214
|
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
41477
42215
|
capName: "pipeline-orchestrator",
|
|
41478
42216
|
capScope: "system",
|
|
41479
42217
|
addonId: null,
|
|
41480
42218
|
access: "create"
|
|
41481
42219
|
},
|
|
42220
|
+
"pipelineOrchestrator.setShareSource": {
|
|
42221
|
+
capName: "pipeline-orchestrator",
|
|
42222
|
+
capScope: "system",
|
|
42223
|
+
addonId: null,
|
|
42224
|
+
access: "create"
|
|
42225
|
+
},
|
|
42226
|
+
"pipelineOrchestrator.suggestShares": {
|
|
42227
|
+
capName: "pipeline-orchestrator",
|
|
42228
|
+
capScope: "system",
|
|
42229
|
+
addonId: null,
|
|
42230
|
+
access: "view"
|
|
42231
|
+
},
|
|
41482
42232
|
"pipelineOrchestrator.unassignAudio": {
|
|
41483
42233
|
capName: "pipeline-orchestrator",
|
|
41484
42234
|
capScope: "system",
|
|
@@ -43723,6 +44473,12 @@ Object.freeze({
|
|
|
43723
44473
|
addonId: null,
|
|
43724
44474
|
access: "create"
|
|
43725
44475
|
},
|
|
44476
|
+
"webrtcSession.applyDownlinkProbe": {
|
|
44477
|
+
capName: "webrtc-session",
|
|
44478
|
+
capScope: "device",
|
|
44479
|
+
addonId: null,
|
|
44480
|
+
access: "create"
|
|
44481
|
+
},
|
|
43726
44482
|
"webrtcSession.closeSession": {
|
|
43727
44483
|
capName: "webrtc-session",
|
|
43728
44484
|
capScope: "device",
|
|
@@ -46769,6 +47525,11 @@ Object.freeze({
|
|
|
46769
47525
|
form: "single",
|
|
46770
47526
|
optional: false
|
|
46771
47527
|
}],
|
|
47528
|
+
"pipelineExecutor.clearModelBoundDeviceOverrides": [{
|
|
47529
|
+
name: "deviceIds",
|
|
47530
|
+
form: "array",
|
|
47531
|
+
optional: true
|
|
47532
|
+
}],
|
|
46772
47533
|
"pipelineExecutor.runPipeline": [{
|
|
46773
47534
|
name: "deviceId",
|
|
46774
47535
|
form: "single",
|
|
@@ -47645,6 +48406,11 @@ Object.freeze({
|
|
|
47645
48406
|
form: "single",
|
|
47646
48407
|
optional: false
|
|
47647
48408
|
}],
|
|
48409
|
+
"webrtcSession.applyDownlinkProbe": [{
|
|
48410
|
+
name: "deviceId",
|
|
48411
|
+
form: "single",
|
|
48412
|
+
optional: false
|
|
48413
|
+
}],
|
|
47648
48414
|
"webrtcSession.closeSession": [{
|
|
47649
48415
|
name: "deviceId",
|
|
47650
48416
|
form: "single",
|
|
@@ -47874,6 +48640,8 @@ new Map(Object.entries({
|
|
|
47874
48640
|
"detection-blind": "device-events",
|
|
47875
48641
|
"node-online": "system",
|
|
47876
48642
|
"node-offline": "system",
|
|
48643
|
+
"node-restarting": "system",
|
|
48644
|
+
"node-updating": "system",
|
|
47877
48645
|
"node-inference-unavailable": "system",
|
|
47878
48646
|
"addon-crash-loop": "system",
|
|
47879
48647
|
"addon-update-available": "system",
|
|
@@ -47951,6 +48719,7 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47951
48719
|
kinds: [
|
|
47952
48720
|
"node-offline",
|
|
47953
48721
|
"node-online",
|
|
48722
|
+
"node-restarting",
|
|
47954
48723
|
"node-inference-unavailable"
|
|
47955
48724
|
]
|
|
47956
48725
|
},
|
|
@@ -47972,6 +48741,7 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47972
48741
|
label: "Server & container updates",
|
|
47973
48742
|
kinds: [
|
|
47974
48743
|
"server-update-available",
|
|
48744
|
+
"node-updating",
|
|
47975
48745
|
"server-updated",
|
|
47976
48746
|
"wrapper-update-available"
|
|
47977
48747
|
]
|
|
@@ -48119,6 +48889,7 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48119
48889
|
kinds: [
|
|
48120
48890
|
"node-offline",
|
|
48121
48891
|
"node-online",
|
|
48892
|
+
"node-restarting",
|
|
48122
48893
|
"node-inference-unavailable"
|
|
48123
48894
|
]
|
|
48124
48895
|
},
|
|
@@ -48140,6 +48911,7 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48140
48911
|
example: "server 1.2.377 → 1.2.378",
|
|
48141
48912
|
kinds: [
|
|
48142
48913
|
"server-update-available",
|
|
48914
|
+
"node-updating",
|
|
48143
48915
|
"server-updated",
|
|
48144
48916
|
"wrapper-update-available"
|
|
48145
48917
|
]
|
|
@@ -48172,7 +48944,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
48172
48944
|
{
|
|
48173
48945
|
name: "summarySection",
|
|
48174
48946
|
label: "Summary: this section",
|
|
48175
|
-
description: "The section a per-section summary row is about
|
|
48947
|
+
description: "The section a per-section summary row is about; on a summary sent as one message, every section it reports, comma-separated.",
|
|
48176
48948
|
example: "Batterie scariche",
|
|
48177
48949
|
group: "system",
|
|
48178
48950
|
families: ["rule"],
|
|
@@ -53231,7 +54003,7 @@ var ExportAlexaAddon = class extends BaseAddon {
|
|
|
53231
54003
|
type: "select",
|
|
53232
54004
|
key: "region",
|
|
53233
54005
|
label: "Skill region",
|
|
53234
|
-
description: "
|
|
54006
|
+
description: "The Alexa Event Gateway this hub posts to: doorbell presses, motion, battery level, and the device-list updates sent when you expose or unexpose a camera. Pick the region your Amazon account is in — events sent to another region are rejected.",
|
|
53235
54007
|
options: [
|
|
53236
54008
|
{
|
|
53237
54009
|
value: "NA",
|
|
@@ -53260,7 +54032,7 @@ var ExportAlexaAddon = class extends BaseAddon {
|
|
|
53260
54032
|
type: "text",
|
|
53261
54033
|
key: "lwaClientId",
|
|
53262
54034
|
label: "LWA client id (proactive events)",
|
|
53263
|
-
description: "From the skill's Permissions → \"Send Alexa Events\" panel. Required for
|
|
54035
|
+
description: "From the skill's Permissions → \"Send Alexa Events\" panel. Required for everything the hub pushes to Alexa: doorbell presses, motion, battery level and device-list updates.",
|
|
53264
54036
|
default: DEFAULT_CONFIG.lwaClientId
|
|
53265
54037
|
}),
|
|
53266
54038
|
this.field({
|