@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
|
@@ -5379,7 +5379,7 @@ var ZodIssueCode = {
|
|
|
5379
5379
|
var ZodFirstPartyTypeKind;
|
|
5380
5380
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5381
5381
|
//#endregion
|
|
5382
|
-
//#region ../types/dist/sleep-
|
|
5382
|
+
//#region ../types/dist/sleep-C16NCZR2.mjs
|
|
5383
5383
|
/**
|
|
5384
5384
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5385
5385
|
* window to float samples (D455).
|
|
@@ -10740,6 +10740,26 @@ var ClipSearchStrictnessSchema = _enum([
|
|
|
10740
10740
|
"balanced",
|
|
10741
10741
|
"strict"
|
|
10742
10742
|
]);
|
|
10743
|
+
/** Steps whose effect a root label can BE. */
|
|
10744
|
+
var LABEL_SUPPLY_STEP_IDS = [
|
|
10745
|
+
"animal-classifier",
|
|
10746
|
+
"vehicle-classifier",
|
|
10747
|
+
"package-detection"
|
|
10748
|
+
];
|
|
10749
|
+
/** Steps whose box a root detection can BE. */
|
|
10750
|
+
var CROP_SUPPLY_STEP_IDS = ["plate-detection", "face-detection"];
|
|
10751
|
+
/**
|
|
10752
|
+
* Steps whose per-detection MASK a root detection can carry (D737). The live
|
|
10753
|
+
* mask step is `segmentation` — a frame-plane refiner that runs its own model
|
|
10754
|
+
* once per detection crop. (`instance-segmentation` is a dormant step id that
|
|
10755
|
+
* no camera tree carries.)
|
|
10756
|
+
*/
|
|
10757
|
+
var MASK_SUPPLY_STEP_IDS = ["segmentation"];
|
|
10758
|
+
[
|
|
10759
|
+
...LABEL_SUPPLY_STEP_IDS,
|
|
10760
|
+
...CROP_SUPPLY_STEP_IDS,
|
|
10761
|
+
...MASK_SUPPLY_STEP_IDS
|
|
10762
|
+
];
|
|
10743
10763
|
var MODEL_FORMATS = [
|
|
10744
10764
|
"onnx",
|
|
10745
10765
|
"coreml",
|
|
@@ -10768,7 +10788,53 @@ var ModelFormatEntrySchema = object({
|
|
|
10768
10788
|
/** Multi-file payload (directory members or sibling files). */
|
|
10769
10789
|
files: array(string()).readonly().optional(),
|
|
10770
10790
|
/** Runtime(s) that can use this format. If omitted, inferred from ModelFormat key */
|
|
10771
|
-
runtimes: array(_enum(["python"])).readonly().optional()
|
|
10791
|
+
runtimes: array(_enum(["python"])).readonly().optional(),
|
|
10792
|
+
/**
|
|
10793
|
+
* Content revision of the artefact, for one hosted OFF the CamStack mirror.
|
|
10794
|
+
* A format on the mirror leaves it unset: its revision (the sha256 of its
|
|
10795
|
+
* weight file) comes from the downloader's generated table, kept in step
|
|
10796
|
+
* with the mirror by `scripts/check-hosted-model-revisions.ts` (D744). A
|
|
10797
|
+
* node records the revision it downloaded next to the file
|
|
10798
|
+
* (`<file>.revision`); a copy with no record or a different one is stale
|
|
10799
|
+
* unless its weight file hashes to the revision, and a stale copy is
|
|
10800
|
+
* downloaded again, the old one serving until the new one is complete. No
|
|
10801
|
+
* revision at all ⇒ a file on disk is current, whatever it holds (D743).
|
|
10802
|
+
*/
|
|
10803
|
+
revision: string().min(1).optional()
|
|
10804
|
+
});
|
|
10805
|
+
/**
|
|
10806
|
+
* What a node holds for one (model, format) (D746). `current` is a complete
|
|
10807
|
+
* copy at its catalog revision — exactly what `downloaded: true` means.
|
|
10808
|
+
* `stale` is bytes on disk that are not (yet) proven current under D743/D744:
|
|
10809
|
+
* no or a different revision record, or a missing sibling. `missing` is no
|
|
10810
|
+
* copy. `downloaded` alone folds `stale` into "not downloaded", which hid
|
|
10811
|
+
* reclaimable bytes and a copy about to be replaced.
|
|
10812
|
+
*/
|
|
10813
|
+
var ModelOnDiskStateSchema = _enum([
|
|
10814
|
+
"current",
|
|
10815
|
+
"stale",
|
|
10816
|
+
"missing"
|
|
10817
|
+
]);
|
|
10818
|
+
/**
|
|
10819
|
+
* The numeric precision of one format's BUILD (D746) — reported only when the
|
|
10820
|
+
* build states it (file-name token, an INT8 variant, an EdgeTPU compile, a
|
|
10821
|
+
* CamStack Core ML export). Absent means "not stated", never "fp32".
|
|
10822
|
+
*/
|
|
10823
|
+
var ModelFormatPrecisionSchema = _enum([
|
|
10824
|
+
"fp32",
|
|
10825
|
+
"fp16",
|
|
10826
|
+
"int8"
|
|
10827
|
+
]);
|
|
10828
|
+
/**
|
|
10829
|
+
* One format of one model as a node's `pipelineExecutor.getSchema` reports it.
|
|
10830
|
+
* `onDisk` / `precision` are optional for version skew: a runner that predates
|
|
10831
|
+
* them omits them, and a reader falls back to `downloaded`.
|
|
10832
|
+
*/
|
|
10833
|
+
var PipelineModelFormatStatusSchema = object({
|
|
10834
|
+
downloaded: boolean(),
|
|
10835
|
+
sizeMB: number(),
|
|
10836
|
+
onDisk: ModelOnDiskStateSchema.optional(),
|
|
10837
|
+
precision: ModelFormatPrecisionSchema.optional()
|
|
10772
10838
|
});
|
|
10773
10839
|
/**
|
|
10774
10840
|
* Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
|
|
@@ -10872,6 +10938,46 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
|
|
|
10872
10938
|
/** True when the weights or their data forbid commercial use. */
|
|
10873
10939
|
nonCommercial: boolean().optional()
|
|
10874
10940
|
}));
|
|
10941
|
+
/**
|
|
10942
|
+
* One step a ROOT detector can supply from its own output (D730) — see
|
|
10943
|
+
* `ModelCatalogEntry.suppliesSteps`.
|
|
10944
|
+
*
|
|
10945
|
+
* - `label`: the root's raw class IS the step's answer. `labelToEffect` maps
|
|
10946
|
+
* the root's label to the step's vocabulary; `uncovered` is the vocabulary
|
|
10947
|
+
* the root cannot produce (shown as unavailable, never a blocker).
|
|
10948
|
+
* - `crop`: the root draws the box the step would have found (`license_plate`
|
|
10949
|
+
* for plate-detection, `face` for face-detection). The box becomes a detail
|
|
10950
|
+
* child of the `parentMacro` detection that contains it — never a track.
|
|
10951
|
+
* - `mask`: the root's decode emits an instance mask with every detection (a
|
|
10952
|
+
* YOLO26-seg root, D737) — the `segmentation` step's result, carried on the
|
|
10953
|
+
* detection in the shape that step produces. Derived from the model's
|
|
10954
|
+
* postprocessor on read, never stored by an import.
|
|
10955
|
+
*/
|
|
10956
|
+
var RootStepSupplySchema = discriminatedUnion("kind", [
|
|
10957
|
+
object({
|
|
10958
|
+
kind: literal("label"),
|
|
10959
|
+
stepId: _enum(LABEL_SUPPLY_STEP_IDS),
|
|
10960
|
+
labelToEffect: record(string(), string()),
|
|
10961
|
+
uncovered: array(string()).readonly()
|
|
10962
|
+
}),
|
|
10963
|
+
object({
|
|
10964
|
+
kind: literal("crop"),
|
|
10965
|
+
stepId: _enum(CROP_SUPPLY_STEP_IDS),
|
|
10966
|
+
rootLabels: array(string()).readonly(),
|
|
10967
|
+
parentMacro: _enum(["vehicle", "person"]),
|
|
10968
|
+
childClass: _enum(["plate", "face"]),
|
|
10969
|
+
/**
|
|
10970
|
+
* The root's smaller input side, stamped on read by `rootSuppliesOf` from
|
|
10971
|
+
* the model entry — what a step's `minRootInputPx` gate judges. Never
|
|
10972
|
+
* stored by an import.
|
|
10973
|
+
*/
|
|
10974
|
+
rootInputPx: number().int().positive().optional()
|
|
10975
|
+
}),
|
|
10976
|
+
object({
|
|
10977
|
+
kind: literal("mask"),
|
|
10978
|
+
stepId: _enum(MASK_SUPPLY_STEP_IDS)
|
|
10979
|
+
})
|
|
10980
|
+
]);
|
|
10875
10981
|
var ModelCatalogEntrySchema = object({
|
|
10876
10982
|
id: string(),
|
|
10877
10983
|
name: string(),
|
|
@@ -10937,6 +11043,35 @@ var ModelCatalogEntrySchema = object({
|
|
|
10937
11043
|
*/
|
|
10938
11044
|
defaultConfidence: number().min(0).max(1).optional(),
|
|
10939
11045
|
/**
|
|
11046
|
+
* Per-MODEL default of the per-class confidence floors (`minConfidence<Macro>`
|
|
11047
|
+
* on a detector step), keyed by macro class: `{ person: 0.45 }`. A class
|
|
11048
|
+
* absent here runs at the step slider's global default. The same row shape
|
|
11049
|
+
* the floor measurement produces (`model-floors.json`: modelId → floors), so
|
|
11050
|
+
* a measured table is copied in as-is. An operator override is bound to the
|
|
11051
|
+
* model it was made for and does not survive a model change (D738). A custom
|
|
11052
|
+
* / imported model may declare it; without it, the global defaults apply.
|
|
11053
|
+
*/
|
|
11054
|
+
defaultClassFloors: record(string(), number().min(0).max(1)).optional(),
|
|
11055
|
+
/**
|
|
11056
|
+
* The inference precision this model's OpenVINO IR needs on an Intel GPU.
|
|
11057
|
+
* Absent ⇒ the device default (f16 on a GPU). Set to `'f32'` for an FP32 IR
|
|
11058
|
+
* that produces invalid output at f16 — measured 2026-10-07 for YOLO26
|
|
11059
|
+
* base IRs (`yolo26s`: 0 true / 146 false positives; `yolo26m*`: NaN
|
|
11060
|
+
* scores) on the Core Ultra iGPU and the N100. Threaded to the pool as
|
|
11061
|
+
* `PoolModelConfig.gpuInferencePrecision`; the pool sets
|
|
11062
|
+
* INFERENCE_PRECISION_HINT on a GPU only. Costs ~60% latency on the GPU.
|
|
11063
|
+
*/
|
|
11064
|
+
gpuInferencePrecision: _enum(["f32", "f16"]).optional(),
|
|
11065
|
+
/**
|
|
11066
|
+
* ROOT detectors only: per supplied step (`animal-classifier`, …), the
|
|
11067
|
+
* minimum DETECTION score from which this root's own fine label (species,
|
|
11068
|
+
* vehicle type — D736 root supply) is taken (D741). Below it the detection
|
|
11069
|
+
* keeps its macro class without the fine label. `1` = never take it from
|
|
11070
|
+
* this root. Absent ⇒ no floor beyond the macro floor. The supplied step's
|
|
11071
|
+
* `minConfidence` slider, bound to the ROOT model, overrides it.
|
|
11072
|
+
*/
|
|
11073
|
+
suppliedLabelFloors: record(string(), number().min(0).max(1)).optional(),
|
|
11074
|
+
/**
|
|
10940
11075
|
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
10941
11076
|
* onto the canonical template) before this step runs, instead of a plain
|
|
10942
11077
|
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
@@ -10998,6 +11133,16 @@ var ModelCatalogEntrySchema = object({
|
|
|
10998
11133
|
*/
|
|
10999
11134
|
classMap: DetectionCatalogClassMapSchema.optional(),
|
|
11000
11135
|
/**
|
|
11136
|
+
* The pipeline steps this ROOT detector can supply from its own output
|
|
11137
|
+
* (D730): its labels name a step's effect (`deer` for `animal-classifier`)
|
|
11138
|
+
* or draw a step's box (`license_plate` for `plate-detection`). Computed at
|
|
11139
|
+
* import from THIS model's labelmap by `deriveRootSupplies`, never written
|
|
11140
|
+
* by hand and never assumed per family; a row without it is derived on read
|
|
11141
|
+
* (`rootSuppliesOf`). Whether a camera uses it is the step's own
|
|
11142
|
+
* `useRootModel` flag (`resolveRootSupply`).
|
|
11143
|
+
*/
|
|
11144
|
+
suppliesSteps: array(RootStepSupplySchema).readonly().optional(),
|
|
11145
|
+
/**
|
|
11001
11146
|
* The model's CLIP feature-space contract (text encoder, dimension, vector
|
|
11002
11147
|
* index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
|
|
11003
11148
|
* CLIP image encoder; its absence is what "not a CLIP model" means to the
|
|
@@ -16207,6 +16352,12 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
|
16207
16352
|
kind: "mutation",
|
|
16208
16353
|
auth: "admin"
|
|
16209
16354
|
});
|
|
16355
|
+
var HUB_ADDRESS_ROLES = [
|
|
16356
|
+
"appConnections",
|
|
16357
|
+
"notificationTaps",
|
|
16358
|
+
"internal",
|
|
16359
|
+
"publicEndpoint"
|
|
16360
|
+
];
|
|
16210
16361
|
/**
|
|
16211
16362
|
* Transport bounds for AI capability methods.
|
|
16212
16363
|
*
|
|
@@ -18771,6 +18922,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
18771
18922
|
"stream-offline",
|
|
18772
18923
|
"node-online",
|
|
18773
18924
|
"node-offline",
|
|
18925
|
+
"node-restarting",
|
|
18926
|
+
"node-updating",
|
|
18774
18927
|
"node-inference-unavailable",
|
|
18775
18928
|
"detection-blind",
|
|
18776
18929
|
"addon-crash-loop",
|
|
@@ -20376,7 +20529,13 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20376
20529
|
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20377
20530
|
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20378
20531
|
*/
|
|
20379
|
-
notifySensorRewatched: boolean().optional()
|
|
20532
|
+
notifySensorRewatched: boolean().optional(),
|
|
20533
|
+
/**
|
|
20534
|
+
* D735: notify "ignored" when a sensor this arm bypassed really MOVED while armed (its own
|
|
20535
|
+
* change time is after the arm) and set nothing off. Absent = false (logged, not sent). A
|
|
20536
|
+
* re-sync, a recovery from `unavailable` or a duplicate is never announced, switch or not.
|
|
20537
|
+
*/
|
|
20538
|
+
notifySensorIgnored: boolean().optional()
|
|
20380
20539
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20381
20540
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20382
20541
|
mode: AlarmArmModeSchema,
|
|
@@ -20389,7 +20548,9 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20389
20548
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20390
20549
|
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20391
20550
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20392
|
-
notifySensorRewatched: boolean().nullable().optional()
|
|
20551
|
+
notifySensorRewatched: boolean().nullable().optional(),
|
|
20552
|
+
/** D735: set the switch, or `null` to clear it (back to the default, false). */
|
|
20553
|
+
notifySensorIgnored: boolean().nullable().optional()
|
|
20393
20554
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20394
20555
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20395
20556
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -23304,6 +23465,34 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
23304
23465
|
timestamp: number()
|
|
23305
23466
|
});
|
|
23306
23467
|
/**
|
|
23468
|
+
* A root model's boxes standing in for one crop-kind step's own inference
|
|
23469
|
+
* (D730) — see `runPipeline.suppliedRoot`.
|
|
23470
|
+
*/
|
|
23471
|
+
var SuppliedRootOutputSchema = object({
|
|
23472
|
+
stepId: string(),
|
|
23473
|
+
/** The root model that drew the boxes — stamped on the result. */
|
|
23474
|
+
modelId: string(),
|
|
23475
|
+
detections: array(object({
|
|
23476
|
+
/** `[x1, y1, x2, y2]` in the pixels of the call's image. */
|
|
23477
|
+
bbox: tuple([
|
|
23478
|
+
number(),
|
|
23479
|
+
number(),
|
|
23480
|
+
number(),
|
|
23481
|
+
number()
|
|
23482
|
+
]),
|
|
23483
|
+
score: number(),
|
|
23484
|
+
/**
|
|
23485
|
+
* Five facial landmarks in the same pixels — a face the step's own
|
|
23486
|
+
* detector already re-found inside a root face box (D730), so its
|
|
23487
|
+
* embedder child aligns it exactly as it aligns any detected face.
|
|
23488
|
+
*/
|
|
23489
|
+
landmarks: array(object({
|
|
23490
|
+
x: number(),
|
|
23491
|
+
y: number()
|
|
23492
|
+
})).optional()
|
|
23493
|
+
})).min(1)
|
|
23494
|
+
});
|
|
23495
|
+
/**
|
|
23307
23496
|
* Reference to the frame's retained NATIVE surface + the parent crop's placement
|
|
23308
23497
|
* within the frame, so the executor can re-cut a leaf child ROI at native
|
|
23309
23498
|
* resolution on the detail plane. See the `runPipeline` `nativeCropRef` field.
|
|
@@ -23351,7 +23540,7 @@ var FrameRefSchema = object({
|
|
|
23351
23540
|
timestamp: number(),
|
|
23352
23541
|
capturedAt: number().optional()
|
|
23353
23542
|
});
|
|
23354
|
-
var ModelFormatSchema$
|
|
23543
|
+
var ModelFormatSchema$2 = _enum([
|
|
23355
23544
|
"onnx",
|
|
23356
23545
|
"coreml",
|
|
23357
23546
|
"openvino",
|
|
@@ -23369,7 +23558,7 @@ var PipelineSlotSchema = _enum([
|
|
|
23369
23558
|
var PipelineEngineChoiceSchema = object({
|
|
23370
23559
|
runtime: literal("python"),
|
|
23371
23560
|
backend: string(),
|
|
23372
|
-
format: ModelFormatSchema$
|
|
23561
|
+
format: ModelFormatSchema$2,
|
|
23373
23562
|
device: string().optional()
|
|
23374
23563
|
});
|
|
23375
23564
|
/**
|
|
@@ -23426,14 +23615,12 @@ var PipelineTemplateSchema$1 = object({
|
|
|
23426
23615
|
var PipelineModelOptionSchema = object({
|
|
23427
23616
|
id: string(),
|
|
23428
23617
|
name: string(),
|
|
23429
|
-
formats: record(string(),
|
|
23430
|
-
downloaded: boolean(),
|
|
23431
|
-
sizeMB: number()
|
|
23432
|
-
})),
|
|
23618
|
+
formats: record(string(), PipelineModelFormatStatusSchema),
|
|
23433
23619
|
group: ModelVariantGroupSchema.optional(),
|
|
23434
23620
|
legacy: boolean().optional(),
|
|
23435
23621
|
provider: ModelProviderIdSchema.optional(),
|
|
23436
|
-
defaultConfidence: number().optional()
|
|
23622
|
+
defaultConfidence: number().optional(),
|
|
23623
|
+
suppliesSteps: array(RootStepSupplySchema).readonly().optional()
|
|
23437
23624
|
});
|
|
23438
23625
|
var ConfigFieldBridge = custom();
|
|
23439
23626
|
var PipelineAddonSchemaSchema = object({
|
|
@@ -23595,6 +23782,22 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23595
23782
|
}), {
|
|
23596
23783
|
kind: "mutation",
|
|
23597
23784
|
auth: "admin"
|
|
23785
|
+
}), method(object({
|
|
23786
|
+
nodeId: string(),
|
|
23787
|
+
deviceIds: array(number()).readonly().optional(),
|
|
23788
|
+
dryRun: boolean()
|
|
23789
|
+
}), object({
|
|
23790
|
+
entries: array(object({
|
|
23791
|
+
deviceId: number(),
|
|
23792
|
+
keys: array(string()).readonly()
|
|
23793
|
+
})).readonly(),
|
|
23794
|
+
refused: array(object({
|
|
23795
|
+
deviceId: number(),
|
|
23796
|
+
reason: string()
|
|
23797
|
+
})).readonly()
|
|
23798
|
+
}), {
|
|
23799
|
+
kind: "mutation",
|
|
23800
|
+
auth: "admin"
|
|
23598
23801
|
}), method(object({ nodeId: string() }), object({ unhealthy: array(object({
|
|
23599
23802
|
/** `<backend>:<device>`, e.g. `openvino:gpu`. */
|
|
23600
23803
|
deviceKey: string(),
|
|
@@ -23631,11 +23834,11 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23631
23834
|
}), PipelineTemplateSchema$1, { kind: "mutation" }), method(object({ id: string() }), _void(), { kind: "mutation" }), method(_void(), InferenceCapabilitiesBridge), method(object({ addonId: string() }), ModelAvailabilityListBridge), method(object({
|
|
23632
23835
|
addonId: string(),
|
|
23633
23836
|
modelId: string(),
|
|
23634
|
-
format: ModelFormatSchema$
|
|
23837
|
+
format: ModelFormatSchema$2
|
|
23635
23838
|
}), DownloadModelResultSchema, { kind: "mutation" }), method(object({
|
|
23636
23839
|
addonId: string(),
|
|
23637
23840
|
modelId: string(),
|
|
23638
|
-
format: ModelFormatSchema$
|
|
23841
|
+
format: ModelFormatSchema$2
|
|
23639
23842
|
}), object({ success: literal(true) }), { kind: "mutation" }), method(object({
|
|
23640
23843
|
steps: array(PipelineStepInputSchema).min(1),
|
|
23641
23844
|
frame: FrameInputSchema.optional(),
|
|
@@ -23701,7 +23904,16 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23701
23904
|
* `device-not-servable`), and nothing reaches the camera's live
|
|
23702
23905
|
* trace stream. Absent ⇒ unchanged behaviour.
|
|
23703
23906
|
*/
|
|
23704
|
-
replay: literal(true).optional()
|
|
23907
|
+
replay: literal(true).optional(),
|
|
23908
|
+
/**
|
|
23909
|
+
* Root-supplied detections for the tree's ROOT step (D730). Set by
|
|
23910
|
+
* `runDetailSubtree` when the camera's root model supplies a crop-kind
|
|
23911
|
+
* step (a Frigate+ `license_plate` for `plate-detection`): the step is
|
|
23912
|
+
* NOT inferred, these boxes are its output, and its children (the plate
|
|
23913
|
+
* reader) run on them through their own crop policy. Boxes are in the
|
|
23914
|
+
* PIXELS of the image this call carries. Absent ⇒ the root step runs.
|
|
23915
|
+
*/
|
|
23916
|
+
suppliedRoot: SuppliedRootOutputSchema.optional()
|
|
23705
23917
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
23706
23918
|
steps: array(PipelineStepInputSchema).min(1),
|
|
23707
23919
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
@@ -23783,6 +23995,352 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23783
23995
|
filename: string().optional(),
|
|
23784
23996
|
settings: record(string(), unknown()).optional()
|
|
23785
23997
|
}), AudioTestResultSchema, { kind: "mutation" }), method(_void(), ConfigUISchemaNullableBridge);
|
|
23998
|
+
/**
|
|
23999
|
+
* Wire shapes of the Load balancing surface (D748): the session placement
|
|
24000
|
+
* policy, the atomic share write, the observed placement statistics, the
|
|
24001
|
+
* hardware share suggestion and the stale device pins.
|
|
24002
|
+
*/
|
|
24003
|
+
/**
|
|
24004
|
+
* How a new detection session picks its node and device.
|
|
24005
|
+
* - `least-loaded` — the historical rule: lowest `attached / weight`, a
|
|
24006
|
+
* constant node order at a tie (D37). An idle node always ties at 0, so a
|
|
24007
|
+
* weight only bites once a node already holds a session.
|
|
24008
|
+
* - `share` — the share of PARALLEL sessions is held to the weights, and a
|
|
24009
|
+
* full or drowning node yields to a free one (D748).
|
|
24010
|
+
*/
|
|
24011
|
+
var SessionPlacementPolicySchema = _enum(["least-loaded", "share"]);
|
|
24012
|
+
var LoadBalancingSharesInputSchema = object({
|
|
24013
|
+
/** nodeId → share (> 0). A node left out keeps its weight. */
|
|
24014
|
+
nodes: record(string(), number().positive()).default({}),
|
|
24015
|
+
/** nodeId → deviceKey → share (> 0). A device left out keeps its weight. */
|
|
24016
|
+
devices: record(string(), record(string(), number().positive())).default({})
|
|
24017
|
+
});
|
|
24018
|
+
var PlacementStatsInputSchema = object({
|
|
24019
|
+
/** Window the observed shares are averaged over (default 1 h, max 24 h). */
|
|
24020
|
+
windowMs: number().int().min(6e4).max(1440 * 60 * 1e3).default(3600 * 1e3) });
|
|
24021
|
+
var PlacementDeviceStatsSchema = object({
|
|
24022
|
+
deviceKey: string(),
|
|
24023
|
+
/** Sessions running on this device now. */
|
|
24024
|
+
sessionsNow: number(),
|
|
24025
|
+
/** Sessions started on this device inside the window. */
|
|
24026
|
+
sessionsStarted: number(),
|
|
24027
|
+
/** Time-weighted share of the node's parallel sessions over the window (0–1); null = no session ran. */
|
|
24028
|
+
observedShare: number().nullable()
|
|
24029
|
+
});
|
|
24030
|
+
var PlacementNodeStatsSchema = object({
|
|
24031
|
+
nodeId: string(),
|
|
24032
|
+
sessionsNow: number(),
|
|
24033
|
+
sessionsStarted: number(),
|
|
24034
|
+
/** Time-weighted share of the cluster's parallel sessions over the window (0–1); null = none ran. */
|
|
24035
|
+
observedShare: number().nullable(),
|
|
24036
|
+
/** Most sessions this node ran at once inside the window. */
|
|
24037
|
+
peakSessions: number(),
|
|
24038
|
+
/** Sessions a share election handed elsewhere because this node was full or drowning. */
|
|
24039
|
+
yieldsAway: number(),
|
|
24040
|
+
devices: array(PlacementDeviceStatsSchema).readonly()
|
|
24041
|
+
});
|
|
24042
|
+
/** A camera's device pin that the session path cannot honour. */
|
|
24043
|
+
var StaleDevicePinSchema = object({
|
|
24044
|
+
deviceId: number(),
|
|
24045
|
+
deviceKey: string(),
|
|
24046
|
+
/** `disabled` — the key exists on some node but is not enabled anywhere; `absent` — no node has it. */
|
|
24047
|
+
reason: _enum(["disabled", "absent"])
|
|
24048
|
+
});
|
|
24049
|
+
var PlacementStatsSchema = object({
|
|
24050
|
+
policy: SessionPlacementPolicySchema,
|
|
24051
|
+
windowMs: number(),
|
|
24052
|
+
/** How much of the window was actually observed (the hub keeps it in memory). */
|
|
24053
|
+
observedForMs: number(),
|
|
24054
|
+
sessionsNow: number(),
|
|
24055
|
+
/** Most parallel sessions across the cluster inside the window. */
|
|
24056
|
+
clusterPeakSessions: number(),
|
|
24057
|
+
nodes: array(PlacementNodeStatsSchema).readonly(),
|
|
24058
|
+
stalePins: array(StaleDevicePinSchema).readonly()
|
|
24059
|
+
});
|
|
24060
|
+
var SuggestSharesInputSchema = object({ headroom: number().min(.3).max(.5).default(.4) });
|
|
24061
|
+
var SuggestedDeviceShareSchema = object({
|
|
24062
|
+
deviceKey: string(),
|
|
24063
|
+
/** Share of the node (0–100, rounded). */
|
|
24064
|
+
share: number(),
|
|
24065
|
+
modelId: string().nullable(),
|
|
24066
|
+
/** Inferences per second at that model, from the measured table. */
|
|
24067
|
+
fps: number().nullable(),
|
|
24068
|
+
measured: boolean(),
|
|
24069
|
+
/** Advisory session cap: ⌊fps × (1 − headroom) / camera fps⌋. Never enforced. */
|
|
24070
|
+
suggestedMaxSessions: number().nullable()
|
|
24071
|
+
});
|
|
24072
|
+
var SuggestedNodeShareSchema = object({
|
|
24073
|
+
nodeId: string(),
|
|
24074
|
+
/** Share of the cluster (0–100, rounded); null = node skipped (offline, unknown hardware). */
|
|
24075
|
+
share: number().nullable(),
|
|
24076
|
+
/** Parallel sessions the node sustains at the suggested models with the headroom kept free. */
|
|
24077
|
+
capacitySessions: number(),
|
|
24078
|
+
devices: array(SuggestedDeviceShareSchema).readonly(),
|
|
24079
|
+
skippedReason: string().nullable()
|
|
24080
|
+
});
|
|
24081
|
+
var SuggestSharesResultSchema = object({
|
|
24082
|
+
headroom: number(),
|
|
24083
|
+
/** Camera detection rate the capacity is counted in (the fastest camera's fps). */
|
|
24084
|
+
cameraFps: number(),
|
|
24085
|
+
/** How many share → model → capacity rounds ran before the shares stopped moving (≤ 3). */
|
|
24086
|
+
iterations: number(),
|
|
24087
|
+
nodes: array(SuggestedNodeShareSchema).readonly()
|
|
24088
|
+
});
|
|
24089
|
+
/**
|
|
24090
|
+
* Where the node and device shares come from (D750).
|
|
24091
|
+
* - `auto` — computed by the system from the cluster's measured capacity at
|
|
24092
|
+
* the Auto tune models, and recomputed whenever a node or device joins,
|
|
24093
|
+
* leaves, is switched on or off, or changes model.
|
|
24094
|
+
* - `manual` — the operator's stored sliders. A node or device that cannot
|
|
24095
|
+
* take sessions gives its share to the others in proportion; the stored
|
|
24096
|
+
* values are never rewritten for that.
|
|
24097
|
+
*/
|
|
24098
|
+
var ShareSourceSchema = _enum(["auto", "manual"]);
|
|
24099
|
+
var SetShareSourceInputSchema = object({ source: ShareSourceSchema });
|
|
24100
|
+
object({
|
|
24101
|
+
nodes: record(string(), number()),
|
|
24102
|
+
devices: record(string(), record(string(), number()))
|
|
24103
|
+
});
|
|
24104
|
+
var EffectiveDeviceShareSchema = object({
|
|
24105
|
+
deviceKey: string(),
|
|
24106
|
+
/** Can take sessions now (enabled, available, can run the root). */
|
|
24107
|
+
eligible: boolean(),
|
|
24108
|
+
/** The share the source assigns, as a percentage of the node's devices. */
|
|
24109
|
+
configuredPct: number(),
|
|
24110
|
+
/** The share actually used, after an ineligible device's share went to the others. */
|
|
24111
|
+
effectivePct: number()
|
|
24112
|
+
});
|
|
24113
|
+
var EffectiveNodeShareSchema = object({
|
|
24114
|
+
nodeId: string(),
|
|
24115
|
+
eligible: boolean(),
|
|
24116
|
+
configuredPct: number(),
|
|
24117
|
+
effectivePct: number(),
|
|
24118
|
+
devices: array(EffectiveDeviceShareSchema).readonly()
|
|
24119
|
+
});
|
|
24120
|
+
var EffectiveSharesSchema = object({
|
|
24121
|
+
source: ShareSourceSchema,
|
|
24122
|
+
policy: SessionPlacementPolicySchema,
|
|
24123
|
+
/** `auto` with no computed answer yet: the stored sliders are used meanwhile. */
|
|
24124
|
+
autoPending: boolean(),
|
|
24125
|
+
/** When the automatic shares were last computed (ms epoch); null = never. */
|
|
24126
|
+
computedAt: number().nullable(),
|
|
24127
|
+
/** What made the system recompute them last. */
|
|
24128
|
+
trigger: string().nullable(),
|
|
24129
|
+
nodes: array(EffectiveNodeShareSchema).readonly(),
|
|
24130
|
+
/** The relative weights the election reads (before eligibility). */
|
|
24131
|
+
nodeWeights: record(string(), number()),
|
|
24132
|
+
deviceWeights: record(string(), record(string(), number()))
|
|
24133
|
+
});
|
|
24134
|
+
/**
|
|
24135
|
+
* The wire shapes of the Auto tune plan and apply (D745), used by the
|
|
24136
|
+
* `pipeline-orchestrator` cap. The recommender's own types
|
|
24137
|
+
* (`recommend.ts`, `demand.ts`) are the TS face of the same data; these
|
|
24138
|
+
* schemas are what crosses the cap boundary.
|
|
24139
|
+
*/
|
|
24140
|
+
var ModelFormatSchema$1 = _enum(MODEL_FORMATS);
|
|
24141
|
+
var HardwareClassIdSchema = _enum([
|
|
24142
|
+
"intel-core-ultra",
|
|
24143
|
+
"intel-n-series",
|
|
24144
|
+
"apple-m-base",
|
|
24145
|
+
"apple-m-pro",
|
|
24146
|
+
"unknown"
|
|
24147
|
+
]);
|
|
24148
|
+
var AcceleratorKindSchema = _enum([
|
|
24149
|
+
"intel-npu",
|
|
24150
|
+
"intel-igpu",
|
|
24151
|
+
"x86-cpu",
|
|
24152
|
+
"arm-cpu",
|
|
24153
|
+
"apple-ane",
|
|
24154
|
+
"coral"
|
|
24155
|
+
]);
|
|
24156
|
+
var RecommendationReasonSchema = discriminatedUnion("kind", [
|
|
24157
|
+
object({
|
|
24158
|
+
kind: literal("fits"),
|
|
24159
|
+
utilisation: number()
|
|
24160
|
+
}),
|
|
24161
|
+
object({
|
|
24162
|
+
kind: literal("tie-faster"),
|
|
24163
|
+
over: string(),
|
|
24164
|
+
recallDelta: number()
|
|
24165
|
+
}),
|
|
24166
|
+
object({
|
|
24167
|
+
kind: literal("stepped-down"),
|
|
24168
|
+
from: string(),
|
|
24169
|
+
to: string(),
|
|
24170
|
+
limitedBy: string()
|
|
24171
|
+
}),
|
|
24172
|
+
object({
|
|
24173
|
+
kind: literal("no-fit-lightest"),
|
|
24174
|
+
utilisation: number()
|
|
24175
|
+
}),
|
|
24176
|
+
object({
|
|
24177
|
+
kind: literal("derived-latency"),
|
|
24178
|
+
modelId: string()
|
|
24179
|
+
}),
|
|
24180
|
+
object({
|
|
24181
|
+
kind: literal("estimated-load"),
|
|
24182
|
+
observedForMs: number().nullable()
|
|
24183
|
+
}),
|
|
24184
|
+
object({ kind: literal("cpu-device") }),
|
|
24185
|
+
object({ kind: literal("coral-untouched") }),
|
|
24186
|
+
object({ kind: literal("device-disabled") }),
|
|
24187
|
+
object({ kind: literal("device-unavailable") }),
|
|
24188
|
+
object({ kind: literal("node-offline") }),
|
|
24189
|
+
object({ kind: literal("no-hardware-facts") }),
|
|
24190
|
+
object({
|
|
24191
|
+
kind: literal("no-measured-data"),
|
|
24192
|
+
hardwareClass: HardwareClassIdSchema
|
|
24193
|
+
}),
|
|
24194
|
+
object({
|
|
24195
|
+
kind: literal("no-family-build"),
|
|
24196
|
+
format: ModelFormatSchema$1
|
|
24197
|
+
})
|
|
24198
|
+
]);
|
|
24199
|
+
var DeviceDemandSchema = object({
|
|
24200
|
+
nodeId: string(),
|
|
24201
|
+
deviceKey: string(),
|
|
24202
|
+
demandFps: number(),
|
|
24203
|
+
maxCameraFps: number(),
|
|
24204
|
+
alwaysOnCameras: number(),
|
|
24205
|
+
onMotionSessions: number(),
|
|
24206
|
+
onMotionSource: _enum([
|
|
24207
|
+
"observed-24h",
|
|
24208
|
+
"estimate",
|
|
24209
|
+
"none"
|
|
24210
|
+
]),
|
|
24211
|
+
observedForMs: number().nullable(),
|
|
24212
|
+
/** How on-motion sessions were charged: per-device observation, or split by share (D748). */
|
|
24213
|
+
placement: SessionPlacementPolicySchema
|
|
24214
|
+
});
|
|
24215
|
+
var DeviceModelChoiceSchema = object({
|
|
24216
|
+
modelId: string(),
|
|
24217
|
+
p50Ms: number(),
|
|
24218
|
+
fps: number(),
|
|
24219
|
+
measured: boolean(),
|
|
24220
|
+
utilisation: number(),
|
|
24221
|
+
personRecall: number()
|
|
24222
|
+
});
|
|
24223
|
+
var DeviceRecommendationSchema = object({
|
|
24224
|
+
deviceKey: string(),
|
|
24225
|
+
accelerator: AcceleratorKindSchema.nullable(),
|
|
24226
|
+
enabled: boolean(),
|
|
24227
|
+
available: boolean(),
|
|
24228
|
+
demand: DeviceDemandSchema.nullable(),
|
|
24229
|
+
chosen: DeviceModelChoiceSchema.nullable(),
|
|
24230
|
+
reasons: array(RecommendationReasonSchema).readonly()
|
|
24231
|
+
});
|
|
24232
|
+
var NodeRecommendationSchema = object({
|
|
24233
|
+
nodeId: string(),
|
|
24234
|
+
reachable: boolean(),
|
|
24235
|
+
hardwareClass: HardwareClassIdSchema.nullable(),
|
|
24236
|
+
cpuModel: string().nullable(),
|
|
24237
|
+
skipped: boolean(),
|
|
24238
|
+
acceleratorModelId: string().nullable(),
|
|
24239
|
+
devices: array(DeviceRecommendationSchema).readonly(),
|
|
24240
|
+
reasons: array(RecommendationReasonSchema).readonly()
|
|
24241
|
+
});
|
|
24242
|
+
var ModelPinChangeSchema = object({
|
|
24243
|
+
stepId: string(),
|
|
24244
|
+
before: string().nullable(),
|
|
24245
|
+
after: string().nullable()
|
|
24246
|
+
});
|
|
24247
|
+
var NodeDeviceChangeSchema = object({
|
|
24248
|
+
nodeId: string(),
|
|
24249
|
+
deviceKey: string(),
|
|
24250
|
+
madeExplicit: boolean(),
|
|
24251
|
+
modelPins: array(ModelPinChangeSchema).readonly(),
|
|
24252
|
+
thresholds: array(object({
|
|
24253
|
+
stepId: string(),
|
|
24254
|
+
keys: array(string()).readonly()
|
|
24255
|
+
})).readonly()
|
|
24256
|
+
});
|
|
24257
|
+
var CameraOverrideClearSchema = object({
|
|
24258
|
+
deviceId: number(),
|
|
24259
|
+
source: _enum(["step-override", "wholesale"]),
|
|
24260
|
+
nodeId: string(),
|
|
24261
|
+
deviceKey: string().nullable(),
|
|
24262
|
+
stepId: string(),
|
|
24263
|
+
modelIdBefore: string().nullable(),
|
|
24264
|
+
keys: array(string()).readonly()
|
|
24265
|
+
});
|
|
24266
|
+
var DetectorStoreClearSchema = object({
|
|
24267
|
+
deviceId: number(),
|
|
24268
|
+
keys: array(string()).readonly()
|
|
24269
|
+
});
|
|
24270
|
+
var AutoTuneWarningSchema = discriminatedUnion("kind", [
|
|
24271
|
+
object({
|
|
24272
|
+
kind: literal("detector-store-cluster-wide"),
|
|
24273
|
+
skippedNodes: array(string()).readonly()
|
|
24274
|
+
}),
|
|
24275
|
+
object({
|
|
24276
|
+
kind: literal("detector-store-unreadable"),
|
|
24277
|
+
error: string()
|
|
24278
|
+
}),
|
|
24279
|
+
object({
|
|
24280
|
+
kind: literal("coral-enabled"),
|
|
24281
|
+
nodeId: string(),
|
|
24282
|
+
deviceKey: string()
|
|
24283
|
+
})
|
|
24284
|
+
]);
|
|
24285
|
+
var AutoTuneOptionsSchema = object({
|
|
24286
|
+
/** Share of each accelerator's throughput kept free (0.3–0.5). */
|
|
24287
|
+
headroom: number().min(.3).max(.5).default(.4),
|
|
24288
|
+
/**
|
|
24289
|
+
* What-if shares (D748): plan as if these node/device shares were stored
|
|
24290
|
+
* and the policy were `share`. Absent = the stored shares under the stored
|
|
24291
|
+
* policy. A what-if plan is for display; apply always re-plans from what
|
|
24292
|
+
* is stored.
|
|
24293
|
+
*/
|
|
24294
|
+
shares: LoadBalancingSharesInputSchema.optional()
|
|
24295
|
+
});
|
|
24296
|
+
var AutoTunePlanSchema = object({
|
|
24297
|
+
/** Hash of everything the apply will write — the apply refuses a different one. */
|
|
24298
|
+
planHash: string(),
|
|
24299
|
+
family: literal("yolov9"),
|
|
24300
|
+
headroom: number(),
|
|
24301
|
+
/** Planned under what-if shares (D748): for display — apply refuses it as stale. */
|
|
24302
|
+
whatIf: boolean(),
|
|
24303
|
+
generatedAt: number(),
|
|
24304
|
+
nodes: array(NodeRecommendationSchema).readonly(),
|
|
24305
|
+
nodeChanges: array(NodeDeviceChangeSchema).readonly(),
|
|
24306
|
+
cameraClears: array(CameraOverrideClearSchema).readonly(),
|
|
24307
|
+
detectorStoreClears: array(DetectorStoreClearSchema).readonly(),
|
|
24308
|
+
warnings: array(AutoTuneWarningSchema).readonly()
|
|
24309
|
+
});
|
|
24310
|
+
var AutoTuneApplyInputSchema = object({
|
|
24311
|
+
planHash: string(),
|
|
24312
|
+
headroom: number().min(.3).max(.5).default(.4)
|
|
24313
|
+
});
|
|
24314
|
+
var AutoTunePhaseResultSchema = object({
|
|
24315
|
+
phase: _enum([
|
|
24316
|
+
"download",
|
|
24317
|
+
"camera-overrides",
|
|
24318
|
+
"detector-thresholds",
|
|
24319
|
+
"node-models",
|
|
24320
|
+
"redispatch"
|
|
24321
|
+
]),
|
|
24322
|
+
ok: boolean(),
|
|
24323
|
+
detail: string()
|
|
24324
|
+
});
|
|
24325
|
+
var AutoTuneApplyResultSchema = discriminatedUnion("kind", [
|
|
24326
|
+
object({
|
|
24327
|
+
kind: literal("applied"),
|
|
24328
|
+
planHash: string(),
|
|
24329
|
+
phases: array(AutoTunePhaseResultSchema).readonly()
|
|
24330
|
+
}),
|
|
24331
|
+
object({
|
|
24332
|
+
kind: literal("aborted"),
|
|
24333
|
+
phases: array(AutoTunePhaseResultSchema).readonly()
|
|
24334
|
+
}),
|
|
24335
|
+
object({
|
|
24336
|
+
kind: literal("stale"),
|
|
24337
|
+
plan: AutoTunePlanSchema
|
|
24338
|
+
}),
|
|
24339
|
+
object({
|
|
24340
|
+
kind: literal("refused"),
|
|
24341
|
+
reason: _enum(["apply-in-progress"])
|
|
24342
|
+
})
|
|
24343
|
+
]);
|
|
23786
24344
|
object({
|
|
23787
24345
|
activeCameras: number(),
|
|
23788
24346
|
throttledCameras: number(),
|
|
@@ -24803,7 +25361,22 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
|
|
|
24803
25361
|
*/
|
|
24804
25362
|
cropJpeg: string().optional(),
|
|
24805
25363
|
parent: DetailParentSchema,
|
|
24806
|
-
steps: array(string()).optional()
|
|
25364
|
+
steps: array(string()).optional(),
|
|
25365
|
+
/**
|
|
25366
|
+
* The camera's root model already drew this step's boxes (D730): a
|
|
25367
|
+
* `license_plate` inside the parent vehicle. The named step is NOT
|
|
25368
|
+
* inferred — these FRAME-space boxes are its output — and its
|
|
25369
|
+
* requested children (the plate reader) run on them. Absent ⇒ every
|
|
25370
|
+
* requested step infers as before.
|
|
25371
|
+
*/
|
|
25372
|
+
supplied: object({
|
|
25373
|
+
stepId: string(),
|
|
25374
|
+
modelId: string(),
|
|
25375
|
+
boxes: array(object({
|
|
25376
|
+
bbox: NativeCropBboxSchema,
|
|
25377
|
+
score: number()
|
|
25378
|
+
})).min(1)
|
|
25379
|
+
}).optional()
|
|
24807
25380
|
}), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" }), method(object({
|
|
24808
25381
|
/** Catalog step id, e.g. `clip-embedding`. */
|
|
24809
25382
|
stepId: string(),
|
|
@@ -24948,7 +25521,6 @@ var CameraStepOverridePatchSchema = object({
|
|
|
24948
25521
|
settings: record(string(), unknown()).readonly().optional()
|
|
24949
25522
|
});
|
|
24950
25523
|
var CameraPipelineSettingsSchema = object({
|
|
24951
|
-
pinnedAgentNodeId: string().optional(),
|
|
24952
25524
|
stepToggles: record(string(), boolean()).optional(),
|
|
24953
25525
|
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
24954
25526
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
@@ -25447,12 +26019,6 @@ method(object({
|
|
|
25447
26019
|
}), object({ success: literal(true) }), {
|
|
25448
26020
|
kind: "mutation",
|
|
25449
26021
|
auth: "admin"
|
|
25450
|
-
}), method(object({
|
|
25451
|
-
agentNodeId: string(),
|
|
25452
|
-
detectWeight: number().positive().nullable()
|
|
25453
|
-
}), object({ success: literal(true) }), {
|
|
25454
|
-
kind: "mutation",
|
|
25455
|
-
auth: "admin"
|
|
25456
26022
|
}), method(object({
|
|
25457
26023
|
agentNodeId: string(),
|
|
25458
26024
|
detect: boolean().nullable().optional(),
|
|
@@ -25494,6 +26060,15 @@ method(object({
|
|
|
25494
26060
|
}), {
|
|
25495
26061
|
kind: "mutation",
|
|
25496
26062
|
auth: "admin"
|
|
26063
|
+
}), method(AutoTuneOptionsSchema, AutoTunePlanSchema, { auth: "admin" }), method(AutoTuneApplyInputSchema, AutoTuneApplyResultSchema, {
|
|
26064
|
+
kind: "mutation",
|
|
26065
|
+
auth: "admin"
|
|
26066
|
+
}), method(LoadBalancingSharesInputSchema, object({ success: literal(true) }), {
|
|
26067
|
+
kind: "mutation",
|
|
26068
|
+
auth: "admin"
|
|
26069
|
+
}), method(PlacementStatsInputSchema, PlacementStatsSchema, { auth: "admin" }), method(SuggestSharesInputSchema, SuggestSharesResultSchema, { auth: "admin" }), method(_void(), EffectiveSharesSchema, { auth: "admin" }), method(SetShareSourceInputSchema, object({ success: literal(true) }), {
|
|
26070
|
+
kind: "mutation",
|
|
26071
|
+
auth: "admin"
|
|
25497
26072
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
25498
26073
|
deviceId: number(),
|
|
25499
26074
|
addonId: string(),
|
|
@@ -28104,6 +28679,14 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
28104
28679
|
*/
|
|
28105
28680
|
alive: boolean()
|
|
28106
28681
|
})), method(object({
|
|
28682
|
+
deviceId: number().int().nonnegative(),
|
|
28683
|
+
sessionId: string(),
|
|
28684
|
+
downlinkMbps: number().nonnegative()
|
|
28685
|
+
}), object({
|
|
28686
|
+
outcome: _enum(["switching", "held"]),
|
|
28687
|
+
tier: CamProfileSchema.nullable(),
|
|
28688
|
+
reason: string()
|
|
28689
|
+
}), { kind: "mutation" }), method(object({
|
|
28107
28690
|
deviceId: number().int().nonnegative(),
|
|
28108
28691
|
sessionId: string()
|
|
28109
28692
|
}), WebrtcSessionDebugSchema, { kind: "query" });
|
|
@@ -30779,7 +31362,8 @@ var ConnectionEndpointSchema = object({
|
|
|
30779
31362
|
"lan-ipv6",
|
|
30780
31363
|
"public",
|
|
30781
31364
|
"loopback",
|
|
30782
|
-
"app-link"
|
|
31365
|
+
"app-link",
|
|
31366
|
+
"custom"
|
|
30783
31367
|
]),
|
|
30784
31368
|
/**
|
|
30785
31369
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -30848,7 +31432,7 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
30848
31432
|
localPort: AdvertisedLocalPortSchema
|
|
30849
31433
|
});
|
|
30850
31434
|
/**
|
|
30851
|
-
* The address flagged for notification
|
|
31435
|
+
* The address flagged for notification taps (`notificationTaps`). `baseUrl: null` = AUTO, which
|
|
30852
31436
|
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
30853
31437
|
* so the UI can show it either way.
|
|
30854
31438
|
*/
|
|
@@ -30881,6 +31465,72 @@ var ViewerEndpointsSchema = object({
|
|
|
30881
31465
|
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
30882
31466
|
resolved: array(string()).readonly()
|
|
30883
31467
|
});
|
|
31468
|
+
/**
|
|
31469
|
+
* DEPRECATED compatibility shape of `getHubAddresses` (D729 amendment, kept
|
|
31470
|
+
* for addons built against it): `cluster` is the `internal` role, `browser`
|
|
31471
|
+
* the `publicEndpoint` role; `override` is the flagged address.
|
|
31472
|
+
*/
|
|
31473
|
+
var HubAddressSnapshotSchema = object({
|
|
31474
|
+
override: string().nullable(),
|
|
31475
|
+
resolved: string().nullable(),
|
|
31476
|
+
source: _enum([
|
|
31477
|
+
"override",
|
|
31478
|
+
"auto",
|
|
31479
|
+
"none"
|
|
31480
|
+
])
|
|
31481
|
+
});
|
|
31482
|
+
var HubAddressesSchema = object({
|
|
31483
|
+
cluster: HubAddressSnapshotSchema,
|
|
31484
|
+
browser: HubAddressSnapshotSchema
|
|
31485
|
+
});
|
|
31486
|
+
/**
|
|
31487
|
+
* What an address is used for (`hub-address.ts`, D734). `appConnections` is
|
|
31488
|
+
* many-valued; `notificationTaps`, `publicEndpoint` and `internal` are carried
|
|
31489
|
+
* by at most one address.
|
|
31490
|
+
*/
|
|
31491
|
+
var HubAddressRoleSchema = _enum(HUB_ADDRESS_ROLES);
|
|
31492
|
+
var RoleSourceSchema = _enum([
|
|
31493
|
+
"flagged",
|
|
31494
|
+
"auto",
|
|
31495
|
+
"none"
|
|
31496
|
+
]);
|
|
31497
|
+
/** One single-valued role: the flagged address, the one in use, and why. */
|
|
31498
|
+
var HubAddressRoleResolutionSchema = object({
|
|
31499
|
+
/** The address carrying the flag, or null = automatic. */
|
|
31500
|
+
flagged: string().nullable(),
|
|
31501
|
+
/** The address in use, or null when nothing qualifies (never loopback). */
|
|
31502
|
+
resolved: string().nullable(),
|
|
31503
|
+
source: RoleSourceSchema
|
|
31504
|
+
});
|
|
31505
|
+
var HubAppConnectionsResolutionSchema = object({
|
|
31506
|
+
/** The addresses flagged `appConnections`, or empty = automatic. */
|
|
31507
|
+
flagged: array(string()).readonly(),
|
|
31508
|
+
/** What the apps race right now. */
|
|
31509
|
+
resolved: array(string()).readonly(),
|
|
31510
|
+
source: RoleSourceSchema
|
|
31511
|
+
});
|
|
31512
|
+
var HubAddressBookSchema = object({
|
|
31513
|
+
rows: array(ConnectionEndpointSchema.extend({
|
|
31514
|
+
/** In the hub's detected palette right now. */
|
|
31515
|
+
detected: boolean(),
|
|
31516
|
+
/** Entered by the operator (removable). */
|
|
31517
|
+
custom: boolean(),
|
|
31518
|
+
/** The roles explicitly flagged on this address. */
|
|
31519
|
+
flags: array(HubAddressRoleSchema).readonly(),
|
|
31520
|
+
/** The roles this address serves right now — flagged or automatic. */
|
|
31521
|
+
inUse: array(HubAddressRoleSchema).readonly(),
|
|
31522
|
+
/** The roles this address may be flagged with. */
|
|
31523
|
+
eligible: array(HubAddressRoleSchema).readonly()
|
|
31524
|
+
})).readonly(),
|
|
31525
|
+
roles: object({
|
|
31526
|
+
appConnections: HubAppConnectionsResolutionSchema,
|
|
31527
|
+
notificationTaps: HubAddressRoleResolutionSchema,
|
|
31528
|
+
internal: HubAddressRoleResolutionSchema,
|
|
31529
|
+
publicEndpoint: HubAddressRoleResolutionSchema
|
|
31530
|
+
}),
|
|
31531
|
+
/** The `hub=` an app link carries (D709), or null. */
|
|
31532
|
+
appLinkHub: string().nullable()
|
|
31533
|
+
});
|
|
30884
31534
|
var AllowedAddressesSchema = object({
|
|
30885
31535
|
/**
|
|
30886
31536
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -30924,10 +31574,27 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
30924
31574
|
* tunnel always emits `https://` regardless. */
|
|
30925
31575
|
scheme: _enum(["http", "https"]).optional(),
|
|
30926
31576
|
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
30927
|
-
* an address notification
|
|
31577
|
+
* an address notification taps can be flagged with, not a hub
|
|
30928
31578
|
* route. Default `false`: racers and rankers never see it. */
|
|
30929
31579
|
includeAppLink: boolean().optional()
|
|
30930
|
-
}), 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(
|
|
31580
|
+
}), 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({
|
|
31581
|
+
baseUrl: string(),
|
|
31582
|
+
label: string().max(80)
|
|
31583
|
+
}), HubAddressBookSchema, {
|
|
31584
|
+
kind: "mutation",
|
|
31585
|
+
auth: "admin"
|
|
31586
|
+
}), method(object({ baseUrl: string() }), HubAddressBookSchema, {
|
|
31587
|
+
kind: "mutation",
|
|
31588
|
+
auth: "admin"
|
|
31589
|
+
}), method(object({
|
|
31590
|
+
role: HubAddressRoleSchema,
|
|
31591
|
+
baseUrl: string().nullable(),
|
|
31592
|
+
enabled: boolean(),
|
|
31593
|
+
acceptInsecureHttp: boolean().optional()
|
|
31594
|
+
}), HubAddressBookSchema, {
|
|
31595
|
+
kind: "mutation",
|
|
31596
|
+
auth: "admin"
|
|
31597
|
+
}), 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, {
|
|
30931
31598
|
kind: "mutation",
|
|
30932
31599
|
auth: "admin"
|
|
30933
31600
|
}), method(object({
|
|
@@ -31317,7 +31984,8 @@ object({
|
|
|
31317
31984
|
* writes this slice (not even a boot seed), and neither does the runner's
|
|
31318
31985
|
* phase machine: its phase is "a session is attached" for every on-motion
|
|
31319
31986
|
* session, not motion, and it now has its own `DetectionPhaseTransition`.
|
|
31320
|
-
* A provider's `isDetected`
|
|
31987
|
+
* A provider's `isDetected` and `getStatus` answer from the hub's slice
|
|
31988
|
+
* (`hubMotionNativeProvider`).
|
|
31321
31989
|
* - **Sensors** (Home Assistant binary sensors, Homematic, Matter, Alexa
|
|
31322
31990
|
* imports) — the provider pushes both edges itself, from the upstream
|
|
31323
31991
|
* system's own state change. That is the sensor's own fact.
|
|
@@ -36448,6 +37116,16 @@ DeviceType.Camera, method(object({
|
|
|
36448
37116
|
package: array(ZoneRuleSchema).readonly()
|
|
36449
37117
|
});
|
|
36450
37118
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
37119
|
+
Object.freeze({
|
|
37120
|
+
person: .5,
|
|
37121
|
+
vehicle: .5,
|
|
37122
|
+
animal: .5
|
|
37123
|
+
});
|
|
37124
|
+
Object.freeze({
|
|
37125
|
+
person: .65,
|
|
37126
|
+
vehicle: .65,
|
|
37127
|
+
animal: .65
|
|
37128
|
+
});
|
|
36451
37129
|
/**
|
|
36452
37130
|
* Accessory device helpers — shared across drivers.
|
|
36453
37131
|
*
|
|
@@ -39376,12 +40054,24 @@ Object.freeze({
|
|
|
39376
40054
|
addonId: null,
|
|
39377
40055
|
access: "view"
|
|
39378
40056
|
},
|
|
40057
|
+
"localNetwork.addCustomAddress": {
|
|
40058
|
+
capName: "local-network",
|
|
40059
|
+
capScope: "system",
|
|
40060
|
+
addonId: null,
|
|
40061
|
+
access: "create"
|
|
40062
|
+
},
|
|
39379
40063
|
"localNetwork.downloadCa": {
|
|
39380
40064
|
capName: "local-network",
|
|
39381
40065
|
capScope: "system",
|
|
39382
40066
|
addonId: null,
|
|
39383
40067
|
access: "view"
|
|
39384
40068
|
},
|
|
40069
|
+
"localNetwork.getAddresses": {
|
|
40070
|
+
capName: "local-network",
|
|
40071
|
+
capScope: "system",
|
|
40072
|
+
addonId: null,
|
|
40073
|
+
access: "view"
|
|
40074
|
+
},
|
|
39385
40075
|
"localNetwork.getAllowedAddresses": {
|
|
39386
40076
|
capName: "local-network",
|
|
39387
40077
|
capScope: "system",
|
|
@@ -39394,6 +40084,12 @@ Object.freeze({
|
|
|
39394
40084
|
addonId: null,
|
|
39395
40085
|
access: "view"
|
|
39396
40086
|
},
|
|
40087
|
+
"localNetwork.getHubAddresses": {
|
|
40088
|
+
capName: "local-network",
|
|
40089
|
+
capScope: "system",
|
|
40090
|
+
addonId: null,
|
|
40091
|
+
access: "view"
|
|
40092
|
+
},
|
|
39397
40093
|
"localNetwork.getNotificationEndpoint": {
|
|
39398
40094
|
capName: "local-network",
|
|
39399
40095
|
capScope: "system",
|
|
@@ -39430,6 +40126,12 @@ Object.freeze({
|
|
|
39430
40126
|
addonId: null,
|
|
39431
40127
|
access: "create"
|
|
39432
40128
|
},
|
|
40129
|
+
"localNetwork.removeCustomAddress": {
|
|
40130
|
+
capName: "local-network",
|
|
40131
|
+
capScope: "system",
|
|
40132
|
+
addonId: null,
|
|
40133
|
+
access: "delete"
|
|
40134
|
+
},
|
|
39433
40135
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
39434
40136
|
capName: "local-network",
|
|
39435
40137
|
capScope: "system",
|
|
@@ -39442,6 +40144,12 @@ Object.freeze({
|
|
|
39442
40144
|
addonId: null,
|
|
39443
40145
|
access: "create"
|
|
39444
40146
|
},
|
|
40147
|
+
"localNetwork.setAddressRole": {
|
|
40148
|
+
capName: "local-network",
|
|
40149
|
+
capScope: "system",
|
|
40150
|
+
addonId: null,
|
|
40151
|
+
access: "create"
|
|
40152
|
+
},
|
|
39445
40153
|
"localNetwork.setAllowedAddresses": {
|
|
39446
40154
|
capName: "local-network",
|
|
39447
40155
|
capScope: "system",
|
|
@@ -40936,6 +41644,12 @@ Object.freeze({
|
|
|
40936
41644
|
addonId: null,
|
|
40937
41645
|
access: "delete"
|
|
40938
41646
|
},
|
|
41647
|
+
"pipelineExecutor.clearModelBoundDeviceOverrides": {
|
|
41648
|
+
capName: "pipeline-executor",
|
|
41649
|
+
capScope: "system",
|
|
41650
|
+
addonId: null,
|
|
41651
|
+
access: "delete"
|
|
41652
|
+
},
|
|
40939
41653
|
"pipelineExecutor.deleteModel": {
|
|
40940
41654
|
capName: "pipeline-executor",
|
|
40941
41655
|
capScope: "system",
|
|
@@ -41152,6 +41866,12 @@ Object.freeze({
|
|
|
41152
41866
|
addonId: null,
|
|
41153
41867
|
access: "view"
|
|
41154
41868
|
},
|
|
41869
|
+
"pipelineOrchestrator.applyAutoTune": {
|
|
41870
|
+
capName: "pipeline-orchestrator",
|
|
41871
|
+
capScope: "system",
|
|
41872
|
+
addonId: null,
|
|
41873
|
+
access: "create"
|
|
41874
|
+
},
|
|
41155
41875
|
"pipelineOrchestrator.applyDeviceSettingsPatch": {
|
|
41156
41876
|
capName: "pipeline-orchestrator",
|
|
41157
41877
|
capScope: "system",
|
|
@@ -41266,6 +41986,12 @@ Object.freeze({
|
|
|
41266
41986
|
addonId: null,
|
|
41267
41987
|
access: "view"
|
|
41268
41988
|
},
|
|
41989
|
+
"pipelineOrchestrator.getEffectiveShares": {
|
|
41990
|
+
capName: "pipeline-orchestrator",
|
|
41991
|
+
capScope: "system",
|
|
41992
|
+
addonId: null,
|
|
41993
|
+
access: "view"
|
|
41994
|
+
},
|
|
41269
41995
|
"pipelineOrchestrator.getGlobalMetrics": {
|
|
41270
41996
|
capName: "pipeline-orchestrator",
|
|
41271
41997
|
capScope: "system",
|
|
@@ -41302,6 +42028,12 @@ Object.freeze({
|
|
|
41302
42028
|
addonId: null,
|
|
41303
42029
|
access: "view"
|
|
41304
42030
|
},
|
|
42031
|
+
"pipelineOrchestrator.getPlacementStats": {
|
|
42032
|
+
capName: "pipeline-orchestrator",
|
|
42033
|
+
capScope: "system",
|
|
42034
|
+
addonId: null,
|
|
42035
|
+
access: "view"
|
|
42036
|
+
},
|
|
41305
42037
|
"pipelineOrchestrator.getReconcileFromDiskStatus": {
|
|
41306
42038
|
capName: "pipeline-orchestrator",
|
|
41307
42039
|
capScope: "system",
|
|
@@ -41326,6 +42058,12 @@ Object.freeze({
|
|
|
41326
42058
|
addonId: null,
|
|
41327
42059
|
access: "create"
|
|
41328
42060
|
},
|
|
42061
|
+
"pipelineOrchestrator.planAutoTune": {
|
|
42062
|
+
capName: "pipeline-orchestrator",
|
|
42063
|
+
capScope: "system",
|
|
42064
|
+
addonId: null,
|
|
42065
|
+
access: "view"
|
|
42066
|
+
},
|
|
41329
42067
|
"pipelineOrchestrator.rebalance": {
|
|
41330
42068
|
capName: "pipeline-orchestrator",
|
|
41331
42069
|
capScope: "system",
|
|
@@ -41386,12 +42124,6 @@ Object.freeze({
|
|
|
41386
42124
|
addonId: null,
|
|
41387
42125
|
access: "create"
|
|
41388
42126
|
},
|
|
41389
|
-
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
41390
|
-
capName: "pipeline-orchestrator",
|
|
41391
|
-
capScope: "system",
|
|
41392
|
-
addonId: null,
|
|
41393
|
-
access: "create"
|
|
41394
|
-
},
|
|
41395
42127
|
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
41396
42128
|
capName: "pipeline-orchestrator",
|
|
41397
42129
|
capScope: "system",
|
|
@@ -41446,12 +42178,30 @@ Object.freeze({
|
|
|
41446
42178
|
addonId: null,
|
|
41447
42179
|
access: "create"
|
|
41448
42180
|
},
|
|
42181
|
+
"pipelineOrchestrator.setLoadBalancingShares": {
|
|
42182
|
+
capName: "pipeline-orchestrator",
|
|
42183
|
+
capScope: "system",
|
|
42184
|
+
addonId: null,
|
|
42185
|
+
access: "create"
|
|
42186
|
+
},
|
|
41449
42187
|
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
41450
42188
|
capName: "pipeline-orchestrator",
|
|
41451
42189
|
capScope: "system",
|
|
41452
42190
|
addonId: null,
|
|
41453
42191
|
access: "create"
|
|
41454
42192
|
},
|
|
42193
|
+
"pipelineOrchestrator.setShareSource": {
|
|
42194
|
+
capName: "pipeline-orchestrator",
|
|
42195
|
+
capScope: "system",
|
|
42196
|
+
addonId: null,
|
|
42197
|
+
access: "create"
|
|
42198
|
+
},
|
|
42199
|
+
"pipelineOrchestrator.suggestShares": {
|
|
42200
|
+
capName: "pipeline-orchestrator",
|
|
42201
|
+
capScope: "system",
|
|
42202
|
+
addonId: null,
|
|
42203
|
+
access: "view"
|
|
42204
|
+
},
|
|
41455
42205
|
"pipelineOrchestrator.unassignAudio": {
|
|
41456
42206
|
capName: "pipeline-orchestrator",
|
|
41457
42207
|
capScope: "system",
|
|
@@ -43696,6 +44446,12 @@ Object.freeze({
|
|
|
43696
44446
|
addonId: null,
|
|
43697
44447
|
access: "create"
|
|
43698
44448
|
},
|
|
44449
|
+
"webrtcSession.applyDownlinkProbe": {
|
|
44450
|
+
capName: "webrtc-session",
|
|
44451
|
+
capScope: "device",
|
|
44452
|
+
addonId: null,
|
|
44453
|
+
access: "create"
|
|
44454
|
+
},
|
|
43699
44455
|
"webrtcSession.closeSession": {
|
|
43700
44456
|
capName: "webrtc-session",
|
|
43701
44457
|
capScope: "device",
|
|
@@ -46742,6 +47498,11 @@ Object.freeze({
|
|
|
46742
47498
|
form: "single",
|
|
46743
47499
|
optional: false
|
|
46744
47500
|
}],
|
|
47501
|
+
"pipelineExecutor.clearModelBoundDeviceOverrides": [{
|
|
47502
|
+
name: "deviceIds",
|
|
47503
|
+
form: "array",
|
|
47504
|
+
optional: true
|
|
47505
|
+
}],
|
|
46745
47506
|
"pipelineExecutor.runPipeline": [{
|
|
46746
47507
|
name: "deviceId",
|
|
46747
47508
|
form: "single",
|
|
@@ -47618,6 +48379,11 @@ Object.freeze({
|
|
|
47618
48379
|
form: "single",
|
|
47619
48380
|
optional: false
|
|
47620
48381
|
}],
|
|
48382
|
+
"webrtcSession.applyDownlinkProbe": [{
|
|
48383
|
+
name: "deviceId",
|
|
48384
|
+
form: "single",
|
|
48385
|
+
optional: false
|
|
48386
|
+
}],
|
|
47621
48387
|
"webrtcSession.closeSession": [{
|
|
47622
48388
|
name: "deviceId",
|
|
47623
48389
|
form: "single",
|
|
@@ -47847,6 +48613,8 @@ new Map(Object.entries({
|
|
|
47847
48613
|
"detection-blind": "device-events",
|
|
47848
48614
|
"node-online": "system",
|
|
47849
48615
|
"node-offline": "system",
|
|
48616
|
+
"node-restarting": "system",
|
|
48617
|
+
"node-updating": "system",
|
|
47850
48618
|
"node-inference-unavailable": "system",
|
|
47851
48619
|
"addon-crash-loop": "system",
|
|
47852
48620
|
"addon-update-available": "system",
|
|
@@ -47924,6 +48692,7 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47924
48692
|
kinds: [
|
|
47925
48693
|
"node-offline",
|
|
47926
48694
|
"node-online",
|
|
48695
|
+
"node-restarting",
|
|
47927
48696
|
"node-inference-unavailable"
|
|
47928
48697
|
]
|
|
47929
48698
|
},
|
|
@@ -47945,6 +48714,7 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47945
48714
|
label: "Server & container updates",
|
|
47946
48715
|
kinds: [
|
|
47947
48716
|
"server-update-available",
|
|
48717
|
+
"node-updating",
|
|
47948
48718
|
"server-updated",
|
|
47949
48719
|
"wrapper-update-available"
|
|
47950
48720
|
]
|
|
@@ -48092,6 +48862,7 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48092
48862
|
kinds: [
|
|
48093
48863
|
"node-offline",
|
|
48094
48864
|
"node-online",
|
|
48865
|
+
"node-restarting",
|
|
48095
48866
|
"node-inference-unavailable"
|
|
48096
48867
|
]
|
|
48097
48868
|
},
|
|
@@ -48113,6 +48884,7 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48113
48884
|
example: "server 1.2.377 → 1.2.378",
|
|
48114
48885
|
kinds: [
|
|
48115
48886
|
"server-update-available",
|
|
48887
|
+
"node-updating",
|
|
48116
48888
|
"server-updated",
|
|
48117
48889
|
"wrapper-update-available"
|
|
48118
48890
|
]
|
|
@@ -48145,7 +48917,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
48145
48917
|
{
|
|
48146
48918
|
name: "summarySection",
|
|
48147
48919
|
label: "Summary: this section",
|
|
48148
|
-
description: "The section a per-section summary row is about
|
|
48920
|
+
description: "The section a per-section summary row is about; on a summary sent as one message, every section it reports, comma-separated.",
|
|
48149
48921
|
example: "Batterie scariche",
|
|
48150
48922
|
group: "system",
|
|
48151
48923
|
families: ["rule"],
|
|
@@ -53204,7 +53976,7 @@ var ExportAlexaAddon = class extends BaseAddon {
|
|
|
53204
53976
|
type: "select",
|
|
53205
53977
|
key: "region",
|
|
53206
53978
|
label: "Skill region",
|
|
53207
|
-
description: "
|
|
53979
|
+
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.",
|
|
53208
53980
|
options: [
|
|
53209
53981
|
{
|
|
53210
53982
|
value: "NA",
|
|
@@ -53233,7 +54005,7 @@ var ExportAlexaAddon = class extends BaseAddon {
|
|
|
53233
54005
|
type: "text",
|
|
53234
54006
|
key: "lwaClientId",
|
|
53235
54007
|
label: "LWA client id (proactive events)",
|
|
53236
|
-
description: "From the skill's Permissions → \"Send Alexa Events\" panel. Required for
|
|
54008
|
+
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.",
|
|
53237
54009
|
default: DEFAULT_CONFIG.lwaClientId
|
|
53238
54010
|
}),
|
|
53239
54011
|
this.field({
|