@camstack/addon-advanced-notifier 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +194 -1
- package/dist/addon.mjs +194 -1
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -4632,7 +4632,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4632
4632
|
return inst;
|
|
4633
4633
|
}
|
|
4634
4634
|
//#endregion
|
|
4635
|
-
//#region ../types/dist/sleep-
|
|
4635
|
+
//#region ../types/dist/sleep-BV7rLc6Y.mjs
|
|
4636
4636
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4637
4637
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4638
4638
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -5111,6 +5111,12 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
5111
5111
|
* Payload: `{ deviceId, childDeviceIds, hiddenChildIds }`.
|
|
5112
5112
|
*/
|
|
5113
5113
|
EventCategory["AccessoriesChanged"] = "accessories.onAccessoriesChanged";
|
|
5114
|
+
/**
|
|
5115
|
+
* Progress update from a running model conversion job.
|
|
5116
|
+
* Payload: `{ kind: 'model-convert', phase, sessionId?, pct?, detail? }`.
|
|
5117
|
+
* Emitted by `addon-model-studio` on the converting node.
|
|
5118
|
+
*/
|
|
5119
|
+
EventCategory["ModelConvertProgress"] = "model-convert.progress";
|
|
5114
5120
|
return EventCategory;
|
|
5115
5121
|
}({});
|
|
5116
5122
|
Object.fromEntries([
|
|
@@ -6632,6 +6638,13 @@ object({
|
|
|
6632
6638
|
unreachable: number()
|
|
6633
6639
|
})
|
|
6634
6640
|
});
|
|
6641
|
+
var LabelDefinitionSchema = object({
|
|
6642
|
+
id: string(),
|
|
6643
|
+
name: string(),
|
|
6644
|
+
category: string().optional(),
|
|
6645
|
+
description: string().optional(),
|
|
6646
|
+
icon: string().optional()
|
|
6647
|
+
});
|
|
6635
6648
|
var MODEL_FORMATS = [
|
|
6636
6649
|
"onnx",
|
|
6637
6650
|
"coreml",
|
|
@@ -6640,6 +6653,120 @@ var MODEL_FORMATS = [
|
|
|
6640
6653
|
"pt"
|
|
6641
6654
|
];
|
|
6642
6655
|
/**
|
|
6656
|
+
* Multi-file format payload.
|
|
6657
|
+
*
|
|
6658
|
+
* - Directory formats (`isDirectory: true`, e.g. `.mlpackage`): files
|
|
6659
|
+
* relative to the directory root — the downloader fetches each from
|
|
6660
|
+
* `{url}/{file}` into `{modelDir}/{file}`. If omitted, it probes the
|
|
6661
|
+
* HuggingFace API (slower).
|
|
6662
|
+
* - Single-file formats (no `isDirectory`, e.g. OpenVINO IR): sibling
|
|
6663
|
+
* files fetched from the SAME remote directory as `url` and stored flat
|
|
6664
|
+
* alongside the main file — e.g. `['camstack-yolov9t.bin']` for the IR
|
|
6665
|
+
* weights next to `camstack-yolov9t.xml`.
|
|
6666
|
+
*/
|
|
6667
|
+
var ModelFormatEntrySchema = object({
|
|
6668
|
+
url: string(),
|
|
6669
|
+
sizeMB: number(),
|
|
6670
|
+
/** Whether this format is a directory bundle (e.g., .mlpackage) rather than a single file */
|
|
6671
|
+
isDirectory: boolean().optional(),
|
|
6672
|
+
/** Multi-file payload (directory members or sibling files). */
|
|
6673
|
+
files: array(string()).readonly().optional(),
|
|
6674
|
+
/** Runtime(s) that can use this format. If omitted, inferred from ModelFormat key */
|
|
6675
|
+
runtimes: array(_enum(["node", "python"])).readonly().optional()
|
|
6676
|
+
});
|
|
6677
|
+
/**
|
|
6678
|
+
* Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
|
|
6679
|
+
* The downloader fetches from `url` and saves to `{modelsDir}/{filename}`.
|
|
6680
|
+
*/
|
|
6681
|
+
var ModelExtraFileSchema = object({
|
|
6682
|
+
url: string(),
|
|
6683
|
+
filename: string(),
|
|
6684
|
+
sizeMB: number()
|
|
6685
|
+
});
|
|
6686
|
+
/**
|
|
6687
|
+
* Per-format payload map. Modelled as an explicit object (one optional key
|
|
6688
|
+
* per `ModelFormat`) rather than `z.record(enum, …)` — zod v4's enum-keyed
|
|
6689
|
+
* record requires every key, but a catalog entry only ships a subset of
|
|
6690
|
+
* formats.
|
|
6691
|
+
*/
|
|
6692
|
+
var ModelFormatsSchema = object({
|
|
6693
|
+
onnx: ModelFormatEntrySchema.optional(),
|
|
6694
|
+
coreml: ModelFormatEntrySchema.optional(),
|
|
6695
|
+
openvino: ModelFormatEntrySchema.optional(),
|
|
6696
|
+
tflite: ModelFormatEntrySchema.optional(),
|
|
6697
|
+
pt: ModelFormatEntrySchema.optional()
|
|
6698
|
+
});
|
|
6699
|
+
var ModelCatalogEntrySchema = object({
|
|
6700
|
+
id: string(),
|
|
6701
|
+
name: string(),
|
|
6702
|
+
description: string(),
|
|
6703
|
+
formats: ModelFormatsSchema,
|
|
6704
|
+
inputSize: object({
|
|
6705
|
+
width: number(),
|
|
6706
|
+
height: number()
|
|
6707
|
+
}),
|
|
6708
|
+
labels: array(LabelDefinitionSchema).readonly(),
|
|
6709
|
+
inputLayout: _enum(["nchw", "nhwc"]).optional(),
|
|
6710
|
+
inputNormalization: _enum([
|
|
6711
|
+
"zero-one",
|
|
6712
|
+
"imagenet",
|
|
6713
|
+
"none"
|
|
6714
|
+
]).optional(),
|
|
6715
|
+
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
6716
|
+
/**
|
|
6717
|
+
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
6718
|
+
* onto the canonical template) before this step runs, instead of a plain
|
|
6719
|
+
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
6720
|
+
* their embeddings are only discriminative on an aligned input. The face
|
|
6721
|
+
* detector that produced the parent detail must emit 5 landmarks.
|
|
6722
|
+
*/
|
|
6723
|
+
faceAlignment: boolean().optional(),
|
|
6724
|
+
/**
|
|
6725
|
+
* Auxiliary files required at runtime (labels JSON, charset dict, etc.).
|
|
6726
|
+
* Downloaded into the same modelsDir alongside the model file.
|
|
6727
|
+
*/
|
|
6728
|
+
extraFiles: array(ModelExtraFileSchema).readonly().optional()
|
|
6729
|
+
});
|
|
6730
|
+
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
6731
|
+
format: literal("openvino"),
|
|
6732
|
+
precisions: array(_enum(["fp16", "int8"])).min(1).readonly()
|
|
6733
|
+
}), object({ format: literal("coreml") })]);
|
|
6734
|
+
var ModelConvertMetadataSchema = object({
|
|
6735
|
+
id: string().regex(/^[a-zA-Z0-9._-]+$/),
|
|
6736
|
+
name: string(),
|
|
6737
|
+
labels: array(LabelDefinitionSchema).readonly(),
|
|
6738
|
+
inputSize: object({
|
|
6739
|
+
width: number(),
|
|
6740
|
+
height: number()
|
|
6741
|
+
}),
|
|
6742
|
+
inputLayout: _enum(["nchw", "nhwc"]).optional(),
|
|
6743
|
+
inputNormalization: _enum([
|
|
6744
|
+
"zero-one",
|
|
6745
|
+
"imagenet",
|
|
6746
|
+
"none"
|
|
6747
|
+
]).optional(),
|
|
6748
|
+
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
6749
|
+
outputFormat: _enum([
|
|
6750
|
+
"yolo",
|
|
6751
|
+
"ssd",
|
|
6752
|
+
"embedding",
|
|
6753
|
+
"classification",
|
|
6754
|
+
"ocr",
|
|
6755
|
+
"segmentation"
|
|
6756
|
+
]),
|
|
6757
|
+
faceAlignment: boolean().optional()
|
|
6758
|
+
});
|
|
6759
|
+
var ConvertResultSchema = object({
|
|
6760
|
+
entry: ModelCatalogEntrySchema,
|
|
6761
|
+
artifacts: array(object({
|
|
6762
|
+
format: _enum(MODEL_FORMATS),
|
|
6763
|
+
precision: _enum(["fp16", "int8"]).optional(),
|
|
6764
|
+
sizeMB: number(),
|
|
6765
|
+
validated: boolean(),
|
|
6766
|
+
files: array(string()).readonly()
|
|
6767
|
+
})).readonly()
|
|
6768
|
+
});
|
|
6769
|
+
/**
|
|
6643
6770
|
* Numeric day-of-week: 0 = Sunday … 6 = Saturday (matches `Date.getDay`).
|
|
6644
6771
|
* Named `RecordingWeekday` to avoid collision with the string-union
|
|
6645
6772
|
* `Weekday` exported from `interfaces/timezones.ts`.
|
|
@@ -12478,6 +12605,54 @@ var EnrichedWidgetMetadataSchema = WidgetMetadataSchema.extend({
|
|
|
12478
12605
|
bundleUrl: string()
|
|
12479
12606
|
});
|
|
12480
12607
|
method(_void(), array(EnrichedWidgetMetadataSchema).readonly());
|
|
12608
|
+
/**
|
|
12609
|
+
* `custom-model-registry` — collection cap exposing operator-registered
|
|
12610
|
+
* custom detection models. Each provider (today: `addon-model-studio`)
|
|
12611
|
+
* contributes a list of `CustomModelDescriptor`s; the hub auto-concatenates
|
|
12612
|
+
* them across providers (`concatCollection`).
|
|
12613
|
+
*
|
|
12614
|
+
* The detection-pipeline is *aware* of this cap: when at least one provider
|
|
12615
|
+
* exists it unions these descriptors into the per-step model picker and the
|
|
12616
|
+
* runtime model-resolution path, alongside the static catalog. When no
|
|
12617
|
+
* provider exists the consumer no-ops entirely (identical to the catalog-only
|
|
12618
|
+
* behaviour).
|
|
12619
|
+
*
|
|
12620
|
+
* A descriptor carries a full `ModelCatalogEntry` directly — the same shape
|
|
12621
|
+
* the static catalog uses — so the existing download/resolution code consumes
|
|
12622
|
+
* it unchanged. `stepId` is the detection step the model targets
|
|
12623
|
+
* (e.g. `'object-detection'`).
|
|
12624
|
+
*/
|
|
12625
|
+
var CustomModelDescriptorSchema = object({
|
|
12626
|
+
stepId: string(),
|
|
12627
|
+
entry: ModelCatalogEntrySchema
|
|
12628
|
+
});
|
|
12629
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
12630
|
+
method(object({
|
|
12631
|
+
nodeId: string(),
|
|
12632
|
+
modelId: string(),
|
|
12633
|
+
format: _enum(MODEL_FORMATS),
|
|
12634
|
+
entry: ModelCatalogEntrySchema
|
|
12635
|
+
}), object({
|
|
12636
|
+
ok: boolean(),
|
|
12637
|
+
/** sha256 of the staged tarball (empty for a hub-local no-op). */
|
|
12638
|
+
sha256: string(),
|
|
12639
|
+
bytes: number(),
|
|
12640
|
+
/** The target node's modelsDir the artifact landed in. */
|
|
12641
|
+
path: string()
|
|
12642
|
+
}), {
|
|
12643
|
+
kind: "mutation",
|
|
12644
|
+
auth: "admin"
|
|
12645
|
+
});
|
|
12646
|
+
method(object({
|
|
12647
|
+
sourceUrl: string(),
|
|
12648
|
+
metadata: ModelConvertMetadataSchema,
|
|
12649
|
+
targets: array(ConvertTargetSchema).min(1).readonly(),
|
|
12650
|
+
calibrationRef: string().optional(),
|
|
12651
|
+
sessionId: string().optional()
|
|
12652
|
+
}), ConvertResultSchema, {
|
|
12653
|
+
kind: "mutation",
|
|
12654
|
+
auth: "admin"
|
|
12655
|
+
});
|
|
12481
12656
|
var AddonHttpRouteSchema = object({
|
|
12482
12657
|
method: _enum([
|
|
12483
12658
|
"GET",
|
|
@@ -17392,6 +17567,12 @@ Object.freeze({
|
|
|
17392
17567
|
addonId: null,
|
|
17393
17568
|
access: "create"
|
|
17394
17569
|
},
|
|
17570
|
+
"customModelRegistry.listModels": {
|
|
17571
|
+
capName: "custom-model-registry",
|
|
17572
|
+
capScope: "system",
|
|
17573
|
+
addonId: null,
|
|
17574
|
+
access: "view"
|
|
17575
|
+
},
|
|
17395
17576
|
"decoder.createSession": {
|
|
17396
17577
|
capName: "decoder",
|
|
17397
17578
|
capScope: "system",
|
|
@@ -18616,6 +18797,18 @@ Object.freeze({
|
|
|
18616
18797
|
addonId: null,
|
|
18617
18798
|
access: "view"
|
|
18618
18799
|
},
|
|
18800
|
+
"modelConvert.convert": {
|
|
18801
|
+
capName: "model-convert",
|
|
18802
|
+
capScope: "system",
|
|
18803
|
+
addonId: null,
|
|
18804
|
+
access: "create"
|
|
18805
|
+
},
|
|
18806
|
+
"modelDistributor.distributeModel": {
|
|
18807
|
+
capName: "model-distributor",
|
|
18808
|
+
capScope: "system",
|
|
18809
|
+
addonId: null,
|
|
18810
|
+
access: "create"
|
|
18811
|
+
},
|
|
18619
18812
|
"motion.isDetected": {
|
|
18620
18813
|
capName: "motion",
|
|
18621
18814
|
capScope: "device",
|
package/dist/addon.mjs
CHANGED
|
@@ -4628,7 +4628,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4628
4628
|
return inst;
|
|
4629
4629
|
}
|
|
4630
4630
|
//#endregion
|
|
4631
|
-
//#region ../types/dist/sleep-
|
|
4631
|
+
//#region ../types/dist/sleep-BV7rLc6Y.mjs
|
|
4632
4632
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4633
4633
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4634
4634
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -5107,6 +5107,12 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
5107
5107
|
* Payload: `{ deviceId, childDeviceIds, hiddenChildIds }`.
|
|
5108
5108
|
*/
|
|
5109
5109
|
EventCategory["AccessoriesChanged"] = "accessories.onAccessoriesChanged";
|
|
5110
|
+
/**
|
|
5111
|
+
* Progress update from a running model conversion job.
|
|
5112
|
+
* Payload: `{ kind: 'model-convert', phase, sessionId?, pct?, detail? }`.
|
|
5113
|
+
* Emitted by `addon-model-studio` on the converting node.
|
|
5114
|
+
*/
|
|
5115
|
+
EventCategory["ModelConvertProgress"] = "model-convert.progress";
|
|
5110
5116
|
return EventCategory;
|
|
5111
5117
|
}({});
|
|
5112
5118
|
Object.fromEntries([
|
|
@@ -6628,6 +6634,13 @@ object({
|
|
|
6628
6634
|
unreachable: number()
|
|
6629
6635
|
})
|
|
6630
6636
|
});
|
|
6637
|
+
var LabelDefinitionSchema = object({
|
|
6638
|
+
id: string(),
|
|
6639
|
+
name: string(),
|
|
6640
|
+
category: string().optional(),
|
|
6641
|
+
description: string().optional(),
|
|
6642
|
+
icon: string().optional()
|
|
6643
|
+
});
|
|
6631
6644
|
var MODEL_FORMATS = [
|
|
6632
6645
|
"onnx",
|
|
6633
6646
|
"coreml",
|
|
@@ -6636,6 +6649,120 @@ var MODEL_FORMATS = [
|
|
|
6636
6649
|
"pt"
|
|
6637
6650
|
];
|
|
6638
6651
|
/**
|
|
6652
|
+
* Multi-file format payload.
|
|
6653
|
+
*
|
|
6654
|
+
* - Directory formats (`isDirectory: true`, e.g. `.mlpackage`): files
|
|
6655
|
+
* relative to the directory root — the downloader fetches each from
|
|
6656
|
+
* `{url}/{file}` into `{modelDir}/{file}`. If omitted, it probes the
|
|
6657
|
+
* HuggingFace API (slower).
|
|
6658
|
+
* - Single-file formats (no `isDirectory`, e.g. OpenVINO IR): sibling
|
|
6659
|
+
* files fetched from the SAME remote directory as `url` and stored flat
|
|
6660
|
+
* alongside the main file — e.g. `['camstack-yolov9t.bin']` for the IR
|
|
6661
|
+
* weights next to `camstack-yolov9t.xml`.
|
|
6662
|
+
*/
|
|
6663
|
+
var ModelFormatEntrySchema = object({
|
|
6664
|
+
url: string(),
|
|
6665
|
+
sizeMB: number(),
|
|
6666
|
+
/** Whether this format is a directory bundle (e.g., .mlpackage) rather than a single file */
|
|
6667
|
+
isDirectory: boolean().optional(),
|
|
6668
|
+
/** Multi-file payload (directory members or sibling files). */
|
|
6669
|
+
files: array(string()).readonly().optional(),
|
|
6670
|
+
/** Runtime(s) that can use this format. If omitted, inferred from ModelFormat key */
|
|
6671
|
+
runtimes: array(_enum(["node", "python"])).readonly().optional()
|
|
6672
|
+
});
|
|
6673
|
+
/**
|
|
6674
|
+
* Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
|
|
6675
|
+
* The downloader fetches from `url` and saves to `{modelsDir}/{filename}`.
|
|
6676
|
+
*/
|
|
6677
|
+
var ModelExtraFileSchema = object({
|
|
6678
|
+
url: string(),
|
|
6679
|
+
filename: string(),
|
|
6680
|
+
sizeMB: number()
|
|
6681
|
+
});
|
|
6682
|
+
/**
|
|
6683
|
+
* Per-format payload map. Modelled as an explicit object (one optional key
|
|
6684
|
+
* per `ModelFormat`) rather than `z.record(enum, …)` — zod v4's enum-keyed
|
|
6685
|
+
* record requires every key, but a catalog entry only ships a subset of
|
|
6686
|
+
* formats.
|
|
6687
|
+
*/
|
|
6688
|
+
var ModelFormatsSchema = object({
|
|
6689
|
+
onnx: ModelFormatEntrySchema.optional(),
|
|
6690
|
+
coreml: ModelFormatEntrySchema.optional(),
|
|
6691
|
+
openvino: ModelFormatEntrySchema.optional(),
|
|
6692
|
+
tflite: ModelFormatEntrySchema.optional(),
|
|
6693
|
+
pt: ModelFormatEntrySchema.optional()
|
|
6694
|
+
});
|
|
6695
|
+
var ModelCatalogEntrySchema = object({
|
|
6696
|
+
id: string(),
|
|
6697
|
+
name: string(),
|
|
6698
|
+
description: string(),
|
|
6699
|
+
formats: ModelFormatsSchema,
|
|
6700
|
+
inputSize: object({
|
|
6701
|
+
width: number(),
|
|
6702
|
+
height: number()
|
|
6703
|
+
}),
|
|
6704
|
+
labels: array(LabelDefinitionSchema).readonly(),
|
|
6705
|
+
inputLayout: _enum(["nchw", "nhwc"]).optional(),
|
|
6706
|
+
inputNormalization: _enum([
|
|
6707
|
+
"zero-one",
|
|
6708
|
+
"imagenet",
|
|
6709
|
+
"none"
|
|
6710
|
+
]).optional(),
|
|
6711
|
+
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
6712
|
+
/**
|
|
6713
|
+
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
6714
|
+
* onto the canonical template) before this step runs, instead of a plain
|
|
6715
|
+
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
6716
|
+
* their embeddings are only discriminative on an aligned input. The face
|
|
6717
|
+
* detector that produced the parent detail must emit 5 landmarks.
|
|
6718
|
+
*/
|
|
6719
|
+
faceAlignment: boolean().optional(),
|
|
6720
|
+
/**
|
|
6721
|
+
* Auxiliary files required at runtime (labels JSON, charset dict, etc.).
|
|
6722
|
+
* Downloaded into the same modelsDir alongside the model file.
|
|
6723
|
+
*/
|
|
6724
|
+
extraFiles: array(ModelExtraFileSchema).readonly().optional()
|
|
6725
|
+
});
|
|
6726
|
+
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
6727
|
+
format: literal("openvino"),
|
|
6728
|
+
precisions: array(_enum(["fp16", "int8"])).min(1).readonly()
|
|
6729
|
+
}), object({ format: literal("coreml") })]);
|
|
6730
|
+
var ModelConvertMetadataSchema = object({
|
|
6731
|
+
id: string().regex(/^[a-zA-Z0-9._-]+$/),
|
|
6732
|
+
name: string(),
|
|
6733
|
+
labels: array(LabelDefinitionSchema).readonly(),
|
|
6734
|
+
inputSize: object({
|
|
6735
|
+
width: number(),
|
|
6736
|
+
height: number()
|
|
6737
|
+
}),
|
|
6738
|
+
inputLayout: _enum(["nchw", "nhwc"]).optional(),
|
|
6739
|
+
inputNormalization: _enum([
|
|
6740
|
+
"zero-one",
|
|
6741
|
+
"imagenet",
|
|
6742
|
+
"none"
|
|
6743
|
+
]).optional(),
|
|
6744
|
+
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
6745
|
+
outputFormat: _enum([
|
|
6746
|
+
"yolo",
|
|
6747
|
+
"ssd",
|
|
6748
|
+
"embedding",
|
|
6749
|
+
"classification",
|
|
6750
|
+
"ocr",
|
|
6751
|
+
"segmentation"
|
|
6752
|
+
]),
|
|
6753
|
+
faceAlignment: boolean().optional()
|
|
6754
|
+
});
|
|
6755
|
+
var ConvertResultSchema = object({
|
|
6756
|
+
entry: ModelCatalogEntrySchema,
|
|
6757
|
+
artifacts: array(object({
|
|
6758
|
+
format: _enum(MODEL_FORMATS),
|
|
6759
|
+
precision: _enum(["fp16", "int8"]).optional(),
|
|
6760
|
+
sizeMB: number(),
|
|
6761
|
+
validated: boolean(),
|
|
6762
|
+
files: array(string()).readonly()
|
|
6763
|
+
})).readonly()
|
|
6764
|
+
});
|
|
6765
|
+
/**
|
|
6639
6766
|
* Numeric day-of-week: 0 = Sunday … 6 = Saturday (matches `Date.getDay`).
|
|
6640
6767
|
* Named `RecordingWeekday` to avoid collision with the string-union
|
|
6641
6768
|
* `Weekday` exported from `interfaces/timezones.ts`.
|
|
@@ -12474,6 +12601,54 @@ var EnrichedWidgetMetadataSchema = WidgetMetadataSchema.extend({
|
|
|
12474
12601
|
bundleUrl: string()
|
|
12475
12602
|
});
|
|
12476
12603
|
method(_void(), array(EnrichedWidgetMetadataSchema).readonly());
|
|
12604
|
+
/**
|
|
12605
|
+
* `custom-model-registry` — collection cap exposing operator-registered
|
|
12606
|
+
* custom detection models. Each provider (today: `addon-model-studio`)
|
|
12607
|
+
* contributes a list of `CustomModelDescriptor`s; the hub auto-concatenates
|
|
12608
|
+
* them across providers (`concatCollection`).
|
|
12609
|
+
*
|
|
12610
|
+
* The detection-pipeline is *aware* of this cap: when at least one provider
|
|
12611
|
+
* exists it unions these descriptors into the per-step model picker and the
|
|
12612
|
+
* runtime model-resolution path, alongside the static catalog. When no
|
|
12613
|
+
* provider exists the consumer no-ops entirely (identical to the catalog-only
|
|
12614
|
+
* behaviour).
|
|
12615
|
+
*
|
|
12616
|
+
* A descriptor carries a full `ModelCatalogEntry` directly — the same shape
|
|
12617
|
+
* the static catalog uses — so the existing download/resolution code consumes
|
|
12618
|
+
* it unchanged. `stepId` is the detection step the model targets
|
|
12619
|
+
* (e.g. `'object-detection'`).
|
|
12620
|
+
*/
|
|
12621
|
+
var CustomModelDescriptorSchema = object({
|
|
12622
|
+
stepId: string(),
|
|
12623
|
+
entry: ModelCatalogEntrySchema
|
|
12624
|
+
});
|
|
12625
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
12626
|
+
method(object({
|
|
12627
|
+
nodeId: string(),
|
|
12628
|
+
modelId: string(),
|
|
12629
|
+
format: _enum(MODEL_FORMATS),
|
|
12630
|
+
entry: ModelCatalogEntrySchema
|
|
12631
|
+
}), object({
|
|
12632
|
+
ok: boolean(),
|
|
12633
|
+
/** sha256 of the staged tarball (empty for a hub-local no-op). */
|
|
12634
|
+
sha256: string(),
|
|
12635
|
+
bytes: number(),
|
|
12636
|
+
/** The target node's modelsDir the artifact landed in. */
|
|
12637
|
+
path: string()
|
|
12638
|
+
}), {
|
|
12639
|
+
kind: "mutation",
|
|
12640
|
+
auth: "admin"
|
|
12641
|
+
});
|
|
12642
|
+
method(object({
|
|
12643
|
+
sourceUrl: string(),
|
|
12644
|
+
metadata: ModelConvertMetadataSchema,
|
|
12645
|
+
targets: array(ConvertTargetSchema).min(1).readonly(),
|
|
12646
|
+
calibrationRef: string().optional(),
|
|
12647
|
+
sessionId: string().optional()
|
|
12648
|
+
}), ConvertResultSchema, {
|
|
12649
|
+
kind: "mutation",
|
|
12650
|
+
auth: "admin"
|
|
12651
|
+
});
|
|
12477
12652
|
var AddonHttpRouteSchema = object({
|
|
12478
12653
|
method: _enum([
|
|
12479
12654
|
"GET",
|
|
@@ -17388,6 +17563,12 @@ Object.freeze({
|
|
|
17388
17563
|
addonId: null,
|
|
17389
17564
|
access: "create"
|
|
17390
17565
|
},
|
|
17566
|
+
"customModelRegistry.listModels": {
|
|
17567
|
+
capName: "custom-model-registry",
|
|
17568
|
+
capScope: "system",
|
|
17569
|
+
addonId: null,
|
|
17570
|
+
access: "view"
|
|
17571
|
+
},
|
|
17391
17572
|
"decoder.createSession": {
|
|
17392
17573
|
capName: "decoder",
|
|
17393
17574
|
capScope: "system",
|
|
@@ -18612,6 +18793,18 @@ Object.freeze({
|
|
|
18612
18793
|
addonId: null,
|
|
18613
18794
|
access: "view"
|
|
18614
18795
|
},
|
|
18796
|
+
"modelConvert.convert": {
|
|
18797
|
+
capName: "model-convert",
|
|
18798
|
+
capScope: "system",
|
|
18799
|
+
addonId: null,
|
|
18800
|
+
access: "create"
|
|
18801
|
+
},
|
|
18802
|
+
"modelDistributor.distributeModel": {
|
|
18803
|
+
capName: "model-distributor",
|
|
18804
|
+
capScope: "system",
|
|
18805
|
+
addonId: null,
|
|
18806
|
+
access: "create"
|
|
18807
|
+
},
|
|
18615
18808
|
"motion.isDetected": {
|
|
18616
18809
|
capName: "motion",
|
|
18617
18810
|
capScope: "device",
|