@camstack/addon-export-alexa 1.2.130 → 1.2.132
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 +846 -97
- package/dist/export-alexa.addon.mjs +846 -97
- package/lambda-template/README.md +116 -0
- package/lambda-template/icons/alexa-skill-icon-108.png +0 -0
- package/lambda-template/icons/alexa-skill-icon-512.png +0 -0
- package/lambda-template/index.js +567 -0
- package/package.json +3 -2
|
@@ -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,57 +10740,26 @@ var ClipSearchStrictnessSchema = _enum([
|
|
|
10740
10740
|
"balanced",
|
|
10741
10741
|
"strict"
|
|
10742
10742
|
]);
|
|
10743
|
-
|
|
10744
|
-
|
|
10745
|
-
id: "person",
|
|
10746
|
-
name: "Person"
|
|
10747
|
-
},
|
|
10748
|
-
{
|
|
10749
|
-
id: "vehicle",
|
|
10750
|
-
name: "Vehicle"
|
|
10751
|
-
},
|
|
10752
|
-
{
|
|
10753
|
-
id: "animal",
|
|
10754
|
-
name: "Animal"
|
|
10755
|
-
},
|
|
10756
|
-
{
|
|
10757
|
-
id: "package",
|
|
10758
|
-
name: "Package"
|
|
10759
|
-
}
|
|
10760
|
-
].map((l) => l.id));
|
|
10761
|
-
var COCO_TO_MACRO = {
|
|
10762
|
-
mapping: {
|
|
10763
|
-
person: "person",
|
|
10764
|
-
bicycle: "vehicle",
|
|
10765
|
-
car: "vehicle",
|
|
10766
|
-
motorcycle: "vehicle",
|
|
10767
|
-
airplane: "vehicle",
|
|
10768
|
-
bus: "vehicle",
|
|
10769
|
-
train: "vehicle",
|
|
10770
|
-
truck: "vehicle",
|
|
10771
|
-
boat: "vehicle",
|
|
10772
|
-
bird: "animal",
|
|
10773
|
-
cat: "animal",
|
|
10774
|
-
dog: "animal",
|
|
10775
|
-
horse: "animal",
|
|
10776
|
-
sheep: "animal",
|
|
10777
|
-
cow: "animal",
|
|
10778
|
-
elephant: "animal",
|
|
10779
|
-
bear: "animal",
|
|
10780
|
-
zebra: "animal",
|
|
10781
|
-
giraffe: "animal",
|
|
10782
|
-
suitcase: "package",
|
|
10783
|
-
backpack: "package",
|
|
10784
|
-
handbag: "package"
|
|
10785
|
-
},
|
|
10786
|
-
preserveOriginal: false
|
|
10787
|
-
};
|
|
10788
|
-
/** Steps a root detector may declare it fills. */
|
|
10789
|
-
var FILLABLE_STEP_IDS = [
|
|
10743
|
+
/** Steps whose effect a root label can BE. */
|
|
10744
|
+
var LABEL_SUPPLY_STEP_IDS = [
|
|
10790
10745
|
"animal-classifier",
|
|
10791
10746
|
"vehicle-classifier",
|
|
10792
10747
|
"package-detection"
|
|
10793
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
|
+
];
|
|
10794
10763
|
var MODEL_FORMATS = [
|
|
10795
10764
|
"onnx",
|
|
10796
10765
|
"coreml",
|
|
@@ -10819,7 +10788,53 @@ var ModelFormatEntrySchema = object({
|
|
|
10819
10788
|
/** Multi-file payload (directory members or sibling files). */
|
|
10820
10789
|
files: array(string()).readonly().optional(),
|
|
10821
10790
|
/** Runtime(s) that can use this format. If omitted, inferred from ModelFormat key */
|
|
10822
|
-
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()
|
|
10823
10838
|
});
|
|
10824
10839
|
/**
|
|
10825
10840
|
* Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
|
|
@@ -10923,12 +10938,46 @@ var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { wei
|
|
|
10923
10938
|
/** True when the weights or their data forbid commercial use. */
|
|
10924
10939
|
nonCommercial: boolean().optional()
|
|
10925
10940
|
}));
|
|
10926
|
-
/**
|
|
10927
|
-
|
|
10928
|
-
|
|
10929
|
-
|
|
10930
|
-
|
|
10931
|
-
|
|
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
|
+
]);
|
|
10932
10981
|
var ModelCatalogEntrySchema = object({
|
|
10933
10982
|
id: string(),
|
|
10934
10983
|
name: string(),
|
|
@@ -10994,6 +11043,35 @@ var ModelCatalogEntrySchema = object({
|
|
|
10994
11043
|
*/
|
|
10995
11044
|
defaultConfidence: number().min(0).max(1).optional(),
|
|
10996
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
|
+
/**
|
|
10997
11075
|
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
10998
11076
|
* onto the canonical template) before this step runs, instead of a plain
|
|
10999
11077
|
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
@@ -11055,15 +11133,15 @@ var ModelCatalogEntrySchema = object({
|
|
|
11055
11133
|
*/
|
|
11056
11134
|
classMap: DetectionCatalogClassMapSchema.optional(),
|
|
11057
11135
|
/**
|
|
11058
|
-
* The pipeline steps this ROOT detector
|
|
11059
|
-
* its labels name
|
|
11060
|
-
*
|
|
11061
|
-
* labelmap by `
|
|
11062
|
-
*
|
|
11063
|
-
*
|
|
11064
|
-
* `
|
|
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`).
|
|
11065
11143
|
*/
|
|
11066
|
-
|
|
11144
|
+
suppliesSteps: array(RootStepSupplySchema).readonly().optional(),
|
|
11067
11145
|
/**
|
|
11068
11146
|
* The model's CLIP feature-space contract (text encoder, dimension, vector
|
|
11069
11147
|
* index, token window, search floor) — see `clip-model.ts`. Present ONLY on a
|
|
@@ -16274,6 +16352,12 @@ method(_void(), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
|
16274
16352
|
kind: "mutation",
|
|
16275
16353
|
auth: "admin"
|
|
16276
16354
|
});
|
|
16355
|
+
var HUB_ADDRESS_ROLES = [
|
|
16356
|
+
"appConnections",
|
|
16357
|
+
"notificationTaps",
|
|
16358
|
+
"internal",
|
|
16359
|
+
"publicEndpoint"
|
|
16360
|
+
];
|
|
16277
16361
|
/**
|
|
16278
16362
|
* Transport bounds for AI capability methods.
|
|
16279
16363
|
*
|
|
@@ -18036,6 +18120,51 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
|
|
|
18036
18120
|
kind: "mutation",
|
|
18037
18121
|
auth: "admin"
|
|
18038
18122
|
});
|
|
18123
|
+
new Set([
|
|
18124
|
+
{
|
|
18125
|
+
id: "person",
|
|
18126
|
+
name: "Person"
|
|
18127
|
+
},
|
|
18128
|
+
{
|
|
18129
|
+
id: "vehicle",
|
|
18130
|
+
name: "Vehicle"
|
|
18131
|
+
},
|
|
18132
|
+
{
|
|
18133
|
+
id: "animal",
|
|
18134
|
+
name: "Animal"
|
|
18135
|
+
},
|
|
18136
|
+
{
|
|
18137
|
+
id: "package",
|
|
18138
|
+
name: "Package"
|
|
18139
|
+
}
|
|
18140
|
+
].map((l) => l.id));
|
|
18141
|
+
var COCO_TO_MACRO = {
|
|
18142
|
+
mapping: {
|
|
18143
|
+
person: "person",
|
|
18144
|
+
bicycle: "vehicle",
|
|
18145
|
+
car: "vehicle",
|
|
18146
|
+
motorcycle: "vehicle",
|
|
18147
|
+
airplane: "vehicle",
|
|
18148
|
+
bus: "vehicle",
|
|
18149
|
+
train: "vehicle",
|
|
18150
|
+
truck: "vehicle",
|
|
18151
|
+
boat: "vehicle",
|
|
18152
|
+
bird: "animal",
|
|
18153
|
+
cat: "animal",
|
|
18154
|
+
dog: "animal",
|
|
18155
|
+
horse: "animal",
|
|
18156
|
+
sheep: "animal",
|
|
18157
|
+
cow: "animal",
|
|
18158
|
+
elephant: "animal",
|
|
18159
|
+
bear: "animal",
|
|
18160
|
+
zebra: "animal",
|
|
18161
|
+
giraffe: "animal",
|
|
18162
|
+
suitcase: "package",
|
|
18163
|
+
backpack: "package",
|
|
18164
|
+
handbag: "package"
|
|
18165
|
+
},
|
|
18166
|
+
preserveOriginal: false
|
|
18167
|
+
};
|
|
18039
18168
|
var AUDIO_MACRO_LABELS = [
|
|
18040
18169
|
{
|
|
18041
18170
|
id: "speech",
|
|
@@ -18793,6 +18922,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
18793
18922
|
"stream-offline",
|
|
18794
18923
|
"node-online",
|
|
18795
18924
|
"node-offline",
|
|
18925
|
+
"node-restarting",
|
|
18926
|
+
"node-updating",
|
|
18796
18927
|
"node-inference-unavailable",
|
|
18797
18928
|
"detection-blind",
|
|
18798
18929
|
"addon-crash-loop",
|
|
@@ -20398,7 +20529,13 @@ var NcAlarmModeDelaysListSchema = array(object({
|
|
|
20398
20529
|
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
20399
20530
|
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
20400
20531
|
*/
|
|
20401
|
-
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()
|
|
20402
20539
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
20403
20540
|
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
20404
20541
|
mode: AlarmArmModeSchema,
|
|
@@ -20411,7 +20548,9 @@ var NcAlarmModeDelaysEditListSchema = array(object({
|
|
|
20411
20548
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20412
20549
|
notifyDuringEntryDelay: boolean().nullable().optional(),
|
|
20413
20550
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
20414
|
-
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()
|
|
20415
20554
|
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
20416
20555
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
20417
20556
|
var NcAlarmNonBlockingEditSchema = object({
|
|
@@ -23326,6 +23465,34 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
23326
23465
|
timestamp: number()
|
|
23327
23466
|
});
|
|
23328
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
|
+
/**
|
|
23329
23496
|
* Reference to the frame's retained NATIVE surface + the parent crop's placement
|
|
23330
23497
|
* within the frame, so the executor can re-cut a leaf child ROI at native
|
|
23331
23498
|
* resolution on the detail plane. See the `runPipeline` `nativeCropRef` field.
|
|
@@ -23373,7 +23540,7 @@ var FrameRefSchema = object({
|
|
|
23373
23540
|
timestamp: number(),
|
|
23374
23541
|
capturedAt: number().optional()
|
|
23375
23542
|
});
|
|
23376
|
-
var ModelFormatSchema$
|
|
23543
|
+
var ModelFormatSchema$2 = _enum([
|
|
23377
23544
|
"onnx",
|
|
23378
23545
|
"coreml",
|
|
23379
23546
|
"openvino",
|
|
@@ -23391,7 +23558,7 @@ var PipelineSlotSchema = _enum([
|
|
|
23391
23558
|
var PipelineEngineChoiceSchema = object({
|
|
23392
23559
|
runtime: literal("python"),
|
|
23393
23560
|
backend: string(),
|
|
23394
|
-
format: ModelFormatSchema$
|
|
23561
|
+
format: ModelFormatSchema$2,
|
|
23395
23562
|
device: string().optional()
|
|
23396
23563
|
});
|
|
23397
23564
|
/**
|
|
@@ -23448,15 +23615,12 @@ var PipelineTemplateSchema$1 = object({
|
|
|
23448
23615
|
var PipelineModelOptionSchema = object({
|
|
23449
23616
|
id: string(),
|
|
23450
23617
|
name: string(),
|
|
23451
|
-
formats: record(string(),
|
|
23452
|
-
downloaded: boolean(),
|
|
23453
|
-
sizeMB: number()
|
|
23454
|
-
})),
|
|
23618
|
+
formats: record(string(), PipelineModelFormatStatusSchema),
|
|
23455
23619
|
group: ModelVariantGroupSchema.optional(),
|
|
23456
23620
|
legacy: boolean().optional(),
|
|
23457
23621
|
provider: ModelProviderIdSchema.optional(),
|
|
23458
23622
|
defaultConfidence: number().optional(),
|
|
23459
|
-
|
|
23623
|
+
suppliesSteps: array(RootStepSupplySchema).readonly().optional()
|
|
23460
23624
|
});
|
|
23461
23625
|
var ConfigFieldBridge = custom();
|
|
23462
23626
|
var PipelineAddonSchemaSchema = object({
|
|
@@ -23618,6 +23782,22 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23618
23782
|
}), {
|
|
23619
23783
|
kind: "mutation",
|
|
23620
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"
|
|
23621
23801
|
}), method(object({ nodeId: string() }), object({ unhealthy: array(object({
|
|
23622
23802
|
/** `<backend>:<device>`, e.g. `openvino:gpu`. */
|
|
23623
23803
|
deviceKey: string(),
|
|
@@ -23654,11 +23834,11 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23654
23834
|
}), PipelineTemplateSchema$1, { kind: "mutation" }), method(object({ id: string() }), _void(), { kind: "mutation" }), method(_void(), InferenceCapabilitiesBridge), method(object({ addonId: string() }), ModelAvailabilityListBridge), method(object({
|
|
23655
23835
|
addonId: string(),
|
|
23656
23836
|
modelId: string(),
|
|
23657
|
-
format: ModelFormatSchema$
|
|
23837
|
+
format: ModelFormatSchema$2
|
|
23658
23838
|
}), DownloadModelResultSchema, { kind: "mutation" }), method(object({
|
|
23659
23839
|
addonId: string(),
|
|
23660
23840
|
modelId: string(),
|
|
23661
|
-
format: ModelFormatSchema$
|
|
23841
|
+
format: ModelFormatSchema$2
|
|
23662
23842
|
}), object({ success: literal(true) }), { kind: "mutation" }), method(object({
|
|
23663
23843
|
steps: array(PipelineStepInputSchema).min(1),
|
|
23664
23844
|
frame: FrameInputSchema.optional(),
|
|
@@ -23724,7 +23904,16 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23724
23904
|
* `device-not-servable`), and nothing reaches the camera's live
|
|
23725
23905
|
* trace stream. Absent ⇒ unchanged behaviour.
|
|
23726
23906
|
*/
|
|
23727
|
-
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()
|
|
23728
23917
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
23729
23918
|
steps: array(PipelineStepInputSchema).min(1),
|
|
23730
23919
|
frames: array(FrameInputSchema).min(1).max(255),
|
|
@@ -23806,6 +23995,352 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
23806
23995
|
filename: string().optional(),
|
|
23807
23996
|
settings: record(string(), unknown()).optional()
|
|
23808
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
|
+
]);
|
|
23809
24344
|
object({
|
|
23810
24345
|
activeCameras: number(),
|
|
23811
24346
|
throttledCameras: number(),
|
|
@@ -24826,7 +25361,22 @@ method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mu
|
|
|
24826
25361
|
*/
|
|
24827
25362
|
cropJpeg: string().optional(),
|
|
24828
25363
|
parent: DetailParentSchema,
|
|
24829
|
-
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()
|
|
24830
25380
|
}), object({ details: array(DetailResultSchema) }).nullable(), { kind: "mutation" }), method(object({
|
|
24831
25381
|
/** Catalog step id, e.g. `clip-embedding`. */
|
|
24832
25382
|
stepId: string(),
|
|
@@ -24971,7 +25521,6 @@ var CameraStepOverridePatchSchema = object({
|
|
|
24971
25521
|
settings: record(string(), unknown()).readonly().optional()
|
|
24972
25522
|
});
|
|
24973
25523
|
var CameraPipelineSettingsSchema = object({
|
|
24974
|
-
pinnedAgentNodeId: string().optional(),
|
|
24975
25524
|
stepToggles: record(string(), boolean()).optional(),
|
|
24976
25525
|
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
24977
25526
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
@@ -25470,12 +26019,6 @@ method(object({
|
|
|
25470
26019
|
}), object({ success: literal(true) }), {
|
|
25471
26020
|
kind: "mutation",
|
|
25472
26021
|
auth: "admin"
|
|
25473
|
-
}), method(object({
|
|
25474
|
-
agentNodeId: string(),
|
|
25475
|
-
detectWeight: number().positive().nullable()
|
|
25476
|
-
}), object({ success: literal(true) }), {
|
|
25477
|
-
kind: "mutation",
|
|
25478
|
-
auth: "admin"
|
|
25479
26022
|
}), method(object({
|
|
25480
26023
|
agentNodeId: string(),
|
|
25481
26024
|
detect: boolean().nullable().optional(),
|
|
@@ -25517,6 +26060,15 @@ method(object({
|
|
|
25517
26060
|
}), {
|
|
25518
26061
|
kind: "mutation",
|
|
25519
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"
|
|
25520
26072
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
25521
26073
|
deviceId: number(),
|
|
25522
26074
|
addonId: string(),
|
|
@@ -28127,6 +28679,14 @@ DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), ar
|
|
|
28127
28679
|
*/
|
|
28128
28680
|
alive: boolean()
|
|
28129
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({
|
|
28130
28690
|
deviceId: number().int().nonnegative(),
|
|
28131
28691
|
sessionId: string()
|
|
28132
28692
|
}), WebrtcSessionDebugSchema, { kind: "query" });
|
|
@@ -30802,7 +31362,8 @@ var ConnectionEndpointSchema = object({
|
|
|
30802
31362
|
"lan-ipv6",
|
|
30803
31363
|
"public",
|
|
30804
31364
|
"loopback",
|
|
30805
|
-
"app-link"
|
|
31365
|
+
"app-link",
|
|
31366
|
+
"custom"
|
|
30806
31367
|
]),
|
|
30807
31368
|
/**
|
|
30808
31369
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -30871,7 +31432,7 @@ var GetConnectionEndpointsResultSchema = object({
|
|
|
30871
31432
|
localPort: AdvertisedLocalPortSchema
|
|
30872
31433
|
});
|
|
30873
31434
|
/**
|
|
30874
|
-
* The address flagged for notification
|
|
31435
|
+
* The address flagged for notification taps (`notificationTaps`). `baseUrl: null` = AUTO, which
|
|
30875
31436
|
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
30876
31437
|
* so the UI can show it either way.
|
|
30877
31438
|
*/
|
|
@@ -30904,6 +31465,72 @@ var ViewerEndpointsSchema = object({
|
|
|
30904
31465
|
/** What the ranking currently resolves to (may be empty if nothing is up). */
|
|
30905
31466
|
resolved: array(string()).readonly()
|
|
30906
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
|
+
});
|
|
30907
31534
|
var AllowedAddressesSchema = object({
|
|
30908
31535
|
/**
|
|
30909
31536
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -30947,10 +31574,27 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
|
|
|
30947
31574
|
* tunnel always emits `https://` regardless. */
|
|
30948
31575
|
scheme: _enum(["http", "https"]).optional(),
|
|
30949
31576
|
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
30950
|
-
* an address notification
|
|
31577
|
+
* an address notification taps can be flagged with, not a hub
|
|
30951
31578
|
* route. Default `false`: racers and rankers never see it. */
|
|
30952
31579
|
includeAppLink: boolean().optional()
|
|
30953
|
-
}), 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, {
|
|
30954
31598
|
kind: "mutation",
|
|
30955
31599
|
auth: "admin"
|
|
30956
31600
|
}), method(object({
|
|
@@ -31340,7 +31984,8 @@ object({
|
|
|
31340
31984
|
* writes this slice (not even a boot seed), and neither does the runner's
|
|
31341
31985
|
* phase machine: its phase is "a session is attached" for every on-motion
|
|
31342
31986
|
* session, not motion, and it now has its own `DetectionPhaseTransition`.
|
|
31343
|
-
* A provider's `isDetected`
|
|
31987
|
+
* A provider's `isDetected` and `getStatus` answer from the hub's slice
|
|
31988
|
+
* (`hubMotionNativeProvider`).
|
|
31344
31989
|
* - **Sensors** (Home Assistant binary sensors, Homematic, Matter, Alexa
|
|
31345
31990
|
* imports) — the provider pushes both edges itself, from the upstream
|
|
31346
31991
|
* system's own state change. That is the sensor's own fact.
|
|
@@ -36471,6 +37116,16 @@ DeviceType.Camera, method(object({
|
|
|
36471
37116
|
package: array(ZoneRuleSchema).readonly()
|
|
36472
37117
|
});
|
|
36473
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
|
+
});
|
|
36474
37129
|
/**
|
|
36475
37130
|
* Accessory device helpers — shared across drivers.
|
|
36476
37131
|
*
|
|
@@ -39399,12 +40054,24 @@ Object.freeze({
|
|
|
39399
40054
|
addonId: null,
|
|
39400
40055
|
access: "view"
|
|
39401
40056
|
},
|
|
40057
|
+
"localNetwork.addCustomAddress": {
|
|
40058
|
+
capName: "local-network",
|
|
40059
|
+
capScope: "system",
|
|
40060
|
+
addonId: null,
|
|
40061
|
+
access: "create"
|
|
40062
|
+
},
|
|
39402
40063
|
"localNetwork.downloadCa": {
|
|
39403
40064
|
capName: "local-network",
|
|
39404
40065
|
capScope: "system",
|
|
39405
40066
|
addonId: null,
|
|
39406
40067
|
access: "view"
|
|
39407
40068
|
},
|
|
40069
|
+
"localNetwork.getAddresses": {
|
|
40070
|
+
capName: "local-network",
|
|
40071
|
+
capScope: "system",
|
|
40072
|
+
addonId: null,
|
|
40073
|
+
access: "view"
|
|
40074
|
+
},
|
|
39408
40075
|
"localNetwork.getAllowedAddresses": {
|
|
39409
40076
|
capName: "local-network",
|
|
39410
40077
|
capScope: "system",
|
|
@@ -39417,6 +40084,12 @@ Object.freeze({
|
|
|
39417
40084
|
addonId: null,
|
|
39418
40085
|
access: "view"
|
|
39419
40086
|
},
|
|
40087
|
+
"localNetwork.getHubAddresses": {
|
|
40088
|
+
capName: "local-network",
|
|
40089
|
+
capScope: "system",
|
|
40090
|
+
addonId: null,
|
|
40091
|
+
access: "view"
|
|
40092
|
+
},
|
|
39420
40093
|
"localNetwork.getNotificationEndpoint": {
|
|
39421
40094
|
capName: "local-network",
|
|
39422
40095
|
capScope: "system",
|
|
@@ -39453,6 +40126,12 @@ Object.freeze({
|
|
|
39453
40126
|
addonId: null,
|
|
39454
40127
|
access: "create"
|
|
39455
40128
|
},
|
|
40129
|
+
"localNetwork.removeCustomAddress": {
|
|
40130
|
+
capName: "local-network",
|
|
40131
|
+
capScope: "system",
|
|
40132
|
+
addonId: null,
|
|
40133
|
+
access: "delete"
|
|
40134
|
+
},
|
|
39456
40135
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
39457
40136
|
capName: "local-network",
|
|
39458
40137
|
capScope: "system",
|
|
@@ -39465,6 +40144,12 @@ Object.freeze({
|
|
|
39465
40144
|
addonId: null,
|
|
39466
40145
|
access: "create"
|
|
39467
40146
|
},
|
|
40147
|
+
"localNetwork.setAddressRole": {
|
|
40148
|
+
capName: "local-network",
|
|
40149
|
+
capScope: "system",
|
|
40150
|
+
addonId: null,
|
|
40151
|
+
access: "create"
|
|
40152
|
+
},
|
|
39468
40153
|
"localNetwork.setAllowedAddresses": {
|
|
39469
40154
|
capName: "local-network",
|
|
39470
40155
|
capScope: "system",
|
|
@@ -40959,6 +41644,12 @@ Object.freeze({
|
|
|
40959
41644
|
addonId: null,
|
|
40960
41645
|
access: "delete"
|
|
40961
41646
|
},
|
|
41647
|
+
"pipelineExecutor.clearModelBoundDeviceOverrides": {
|
|
41648
|
+
capName: "pipeline-executor",
|
|
41649
|
+
capScope: "system",
|
|
41650
|
+
addonId: null,
|
|
41651
|
+
access: "delete"
|
|
41652
|
+
},
|
|
40962
41653
|
"pipelineExecutor.deleteModel": {
|
|
40963
41654
|
capName: "pipeline-executor",
|
|
40964
41655
|
capScope: "system",
|
|
@@ -41175,6 +41866,12 @@ Object.freeze({
|
|
|
41175
41866
|
addonId: null,
|
|
41176
41867
|
access: "view"
|
|
41177
41868
|
},
|
|
41869
|
+
"pipelineOrchestrator.applyAutoTune": {
|
|
41870
|
+
capName: "pipeline-orchestrator",
|
|
41871
|
+
capScope: "system",
|
|
41872
|
+
addonId: null,
|
|
41873
|
+
access: "create"
|
|
41874
|
+
},
|
|
41178
41875
|
"pipelineOrchestrator.applyDeviceSettingsPatch": {
|
|
41179
41876
|
capName: "pipeline-orchestrator",
|
|
41180
41877
|
capScope: "system",
|
|
@@ -41289,6 +41986,12 @@ Object.freeze({
|
|
|
41289
41986
|
addonId: null,
|
|
41290
41987
|
access: "view"
|
|
41291
41988
|
},
|
|
41989
|
+
"pipelineOrchestrator.getEffectiveShares": {
|
|
41990
|
+
capName: "pipeline-orchestrator",
|
|
41991
|
+
capScope: "system",
|
|
41992
|
+
addonId: null,
|
|
41993
|
+
access: "view"
|
|
41994
|
+
},
|
|
41292
41995
|
"pipelineOrchestrator.getGlobalMetrics": {
|
|
41293
41996
|
capName: "pipeline-orchestrator",
|
|
41294
41997
|
capScope: "system",
|
|
@@ -41325,6 +42028,12 @@ Object.freeze({
|
|
|
41325
42028
|
addonId: null,
|
|
41326
42029
|
access: "view"
|
|
41327
42030
|
},
|
|
42031
|
+
"pipelineOrchestrator.getPlacementStats": {
|
|
42032
|
+
capName: "pipeline-orchestrator",
|
|
42033
|
+
capScope: "system",
|
|
42034
|
+
addonId: null,
|
|
42035
|
+
access: "view"
|
|
42036
|
+
},
|
|
41328
42037
|
"pipelineOrchestrator.getReconcileFromDiskStatus": {
|
|
41329
42038
|
capName: "pipeline-orchestrator",
|
|
41330
42039
|
capScope: "system",
|
|
@@ -41349,6 +42058,12 @@ Object.freeze({
|
|
|
41349
42058
|
addonId: null,
|
|
41350
42059
|
access: "create"
|
|
41351
42060
|
},
|
|
42061
|
+
"pipelineOrchestrator.planAutoTune": {
|
|
42062
|
+
capName: "pipeline-orchestrator",
|
|
42063
|
+
capScope: "system",
|
|
42064
|
+
addonId: null,
|
|
42065
|
+
access: "view"
|
|
42066
|
+
},
|
|
41352
42067
|
"pipelineOrchestrator.rebalance": {
|
|
41353
42068
|
capName: "pipeline-orchestrator",
|
|
41354
42069
|
capScope: "system",
|
|
@@ -41409,12 +42124,6 @@ Object.freeze({
|
|
|
41409
42124
|
addonId: null,
|
|
41410
42125
|
access: "create"
|
|
41411
42126
|
},
|
|
41412
|
-
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
41413
|
-
capName: "pipeline-orchestrator",
|
|
41414
|
-
capScope: "system",
|
|
41415
|
-
addonId: null,
|
|
41416
|
-
access: "create"
|
|
41417
|
-
},
|
|
41418
42127
|
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
41419
42128
|
capName: "pipeline-orchestrator",
|
|
41420
42129
|
capScope: "system",
|
|
@@ -41469,12 +42178,30 @@ Object.freeze({
|
|
|
41469
42178
|
addonId: null,
|
|
41470
42179
|
access: "create"
|
|
41471
42180
|
},
|
|
42181
|
+
"pipelineOrchestrator.setLoadBalancingShares": {
|
|
42182
|
+
capName: "pipeline-orchestrator",
|
|
42183
|
+
capScope: "system",
|
|
42184
|
+
addonId: null,
|
|
42185
|
+
access: "create"
|
|
42186
|
+
},
|
|
41472
42187
|
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
41473
42188
|
capName: "pipeline-orchestrator",
|
|
41474
42189
|
capScope: "system",
|
|
41475
42190
|
addonId: null,
|
|
41476
42191
|
access: "create"
|
|
41477
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
|
+
},
|
|
41478
42205
|
"pipelineOrchestrator.unassignAudio": {
|
|
41479
42206
|
capName: "pipeline-orchestrator",
|
|
41480
42207
|
capScope: "system",
|
|
@@ -43719,6 +44446,12 @@ Object.freeze({
|
|
|
43719
44446
|
addonId: null,
|
|
43720
44447
|
access: "create"
|
|
43721
44448
|
},
|
|
44449
|
+
"webrtcSession.applyDownlinkProbe": {
|
|
44450
|
+
capName: "webrtc-session",
|
|
44451
|
+
capScope: "device",
|
|
44452
|
+
addonId: null,
|
|
44453
|
+
access: "create"
|
|
44454
|
+
},
|
|
43722
44455
|
"webrtcSession.closeSession": {
|
|
43723
44456
|
capName: "webrtc-session",
|
|
43724
44457
|
capScope: "device",
|
|
@@ -46765,6 +47498,11 @@ Object.freeze({
|
|
|
46765
47498
|
form: "single",
|
|
46766
47499
|
optional: false
|
|
46767
47500
|
}],
|
|
47501
|
+
"pipelineExecutor.clearModelBoundDeviceOverrides": [{
|
|
47502
|
+
name: "deviceIds",
|
|
47503
|
+
form: "array",
|
|
47504
|
+
optional: true
|
|
47505
|
+
}],
|
|
46768
47506
|
"pipelineExecutor.runPipeline": [{
|
|
46769
47507
|
name: "deviceId",
|
|
46770
47508
|
form: "single",
|
|
@@ -47641,6 +48379,11 @@ Object.freeze({
|
|
|
47641
48379
|
form: "single",
|
|
47642
48380
|
optional: false
|
|
47643
48381
|
}],
|
|
48382
|
+
"webrtcSession.applyDownlinkProbe": [{
|
|
48383
|
+
name: "deviceId",
|
|
48384
|
+
form: "single",
|
|
48385
|
+
optional: false
|
|
48386
|
+
}],
|
|
47644
48387
|
"webrtcSession.closeSession": [{
|
|
47645
48388
|
name: "deviceId",
|
|
47646
48389
|
form: "single",
|
|
@@ -47870,6 +48613,8 @@ new Map(Object.entries({
|
|
|
47870
48613
|
"detection-blind": "device-events",
|
|
47871
48614
|
"node-online": "system",
|
|
47872
48615
|
"node-offline": "system",
|
|
48616
|
+
"node-restarting": "system",
|
|
48617
|
+
"node-updating": "system",
|
|
47873
48618
|
"node-inference-unavailable": "system",
|
|
47874
48619
|
"addon-crash-loop": "system",
|
|
47875
48620
|
"addon-update-available": "system",
|
|
@@ -47947,6 +48692,7 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47947
48692
|
kinds: [
|
|
47948
48693
|
"node-offline",
|
|
47949
48694
|
"node-online",
|
|
48695
|
+
"node-restarting",
|
|
47950
48696
|
"node-inference-unavailable"
|
|
47951
48697
|
]
|
|
47952
48698
|
},
|
|
@@ -47968,6 +48714,7 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
|
|
|
47968
48714
|
label: "Server & container updates",
|
|
47969
48715
|
kinds: [
|
|
47970
48716
|
"server-update-available",
|
|
48717
|
+
"node-updating",
|
|
47971
48718
|
"server-updated",
|
|
47972
48719
|
"wrapper-update-available"
|
|
47973
48720
|
]
|
|
@@ -48115,6 +48862,7 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48115
48862
|
kinds: [
|
|
48116
48863
|
"node-offline",
|
|
48117
48864
|
"node-online",
|
|
48865
|
+
"node-restarting",
|
|
48118
48866
|
"node-inference-unavailable"
|
|
48119
48867
|
]
|
|
48120
48868
|
},
|
|
@@ -48136,6 +48884,7 @@ var STATE_SUMMARY_SECTION_VARS = [
|
|
|
48136
48884
|
example: "server 1.2.377 → 1.2.378",
|
|
48137
48885
|
kinds: [
|
|
48138
48886
|
"server-update-available",
|
|
48887
|
+
"node-updating",
|
|
48139
48888
|
"server-updated",
|
|
48140
48889
|
"wrapper-update-available"
|
|
48141
48890
|
]
|
|
@@ -48168,7 +48917,7 @@ var STATE_SUMMARY_VARS = [
|
|
|
48168
48917
|
{
|
|
48169
48918
|
name: "summarySection",
|
|
48170
48919
|
label: "Summary: this section",
|
|
48171
|
-
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.",
|
|
48172
48921
|
example: "Batterie scariche",
|
|
48173
48922
|
group: "system",
|
|
48174
48923
|
families: ["rule"],
|
|
@@ -53227,7 +53976,7 @@ var ExportAlexaAddon = class extends BaseAddon {
|
|
|
53227
53976
|
type: "select",
|
|
53228
53977
|
key: "region",
|
|
53229
53978
|
label: "Skill region",
|
|
53230
|
-
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.",
|
|
53231
53980
|
options: [
|
|
53232
53981
|
{
|
|
53233
53982
|
value: "NA",
|
|
@@ -53256,7 +54005,7 @@ var ExportAlexaAddon = class extends BaseAddon {
|
|
|
53256
54005
|
type: "text",
|
|
53257
54006
|
key: "lwaClientId",
|
|
53258
54007
|
label: "LWA client id (proactive events)",
|
|
53259
|
-
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.",
|
|
53260
54009
|
default: DEFAULT_CONFIG.lwaClientId
|
|
53261
54010
|
}),
|
|
53262
54011
|
this.field({
|