@camstack/addon-provider-hikvision 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
|
@@ -4631,7 +4631,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4631
4631
|
return inst;
|
|
4632
4632
|
}
|
|
4633
4633
|
//#endregion
|
|
4634
|
-
//#region ../types/dist/sleep-
|
|
4634
|
+
//#region ../types/dist/sleep-BV7rLc6Y.mjs
|
|
4635
4635
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4636
4636
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4637
4637
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -5110,6 +5110,12 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
5110
5110
|
* Payload: `{ deviceId, childDeviceIds, hiddenChildIds }`.
|
|
5111
5111
|
*/
|
|
5112
5112
|
EventCategory["AccessoriesChanged"] = "accessories.onAccessoriesChanged";
|
|
5113
|
+
/**
|
|
5114
|
+
* Progress update from a running model conversion job.
|
|
5115
|
+
* Payload: `{ kind: 'model-convert', phase, sessionId?, pct?, detail? }`.
|
|
5116
|
+
* Emitted by `addon-model-studio` on the converting node.
|
|
5117
|
+
*/
|
|
5118
|
+
EventCategory["ModelConvertProgress"] = "model-convert.progress";
|
|
5113
5119
|
return EventCategory;
|
|
5114
5120
|
}({});
|
|
5115
5121
|
Object.fromEntries([
|
|
@@ -6635,6 +6641,13 @@ object({
|
|
|
6635
6641
|
unreachable: number()
|
|
6636
6642
|
})
|
|
6637
6643
|
});
|
|
6644
|
+
var LabelDefinitionSchema = object({
|
|
6645
|
+
id: string(),
|
|
6646
|
+
name: string(),
|
|
6647
|
+
category: string().optional(),
|
|
6648
|
+
description: string().optional(),
|
|
6649
|
+
icon: string().optional()
|
|
6650
|
+
});
|
|
6638
6651
|
var MODEL_FORMATS = [
|
|
6639
6652
|
"onnx",
|
|
6640
6653
|
"coreml",
|
|
@@ -6642,6 +6655,120 @@ var MODEL_FORMATS = [
|
|
|
6642
6655
|
"tflite",
|
|
6643
6656
|
"pt"
|
|
6644
6657
|
];
|
|
6658
|
+
/**
|
|
6659
|
+
* Multi-file format payload.
|
|
6660
|
+
*
|
|
6661
|
+
* - Directory formats (`isDirectory: true`, e.g. `.mlpackage`): files
|
|
6662
|
+
* relative to the directory root — the downloader fetches each from
|
|
6663
|
+
* `{url}/{file}` into `{modelDir}/{file}`. If omitted, it probes the
|
|
6664
|
+
* HuggingFace API (slower).
|
|
6665
|
+
* - Single-file formats (no `isDirectory`, e.g. OpenVINO IR): sibling
|
|
6666
|
+
* files fetched from the SAME remote directory as `url` and stored flat
|
|
6667
|
+
* alongside the main file — e.g. `['camstack-yolov9t.bin']` for the IR
|
|
6668
|
+
* weights next to `camstack-yolov9t.xml`.
|
|
6669
|
+
*/
|
|
6670
|
+
var ModelFormatEntrySchema = object({
|
|
6671
|
+
url: string(),
|
|
6672
|
+
sizeMB: number(),
|
|
6673
|
+
/** Whether this format is a directory bundle (e.g., .mlpackage) rather than a single file */
|
|
6674
|
+
isDirectory: boolean().optional(),
|
|
6675
|
+
/** Multi-file payload (directory members or sibling files). */
|
|
6676
|
+
files: array(string()).readonly().optional(),
|
|
6677
|
+
/** Runtime(s) that can use this format. If omitted, inferred from ModelFormat key */
|
|
6678
|
+
runtimes: array(_enum(["node", "python"])).readonly().optional()
|
|
6679
|
+
});
|
|
6680
|
+
/**
|
|
6681
|
+
* Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
|
|
6682
|
+
* The downloader fetches from `url` and saves to `{modelsDir}/{filename}`.
|
|
6683
|
+
*/
|
|
6684
|
+
var ModelExtraFileSchema = object({
|
|
6685
|
+
url: string(),
|
|
6686
|
+
filename: string(),
|
|
6687
|
+
sizeMB: number()
|
|
6688
|
+
});
|
|
6689
|
+
/**
|
|
6690
|
+
* Per-format payload map. Modelled as an explicit object (one optional key
|
|
6691
|
+
* per `ModelFormat`) rather than `z.record(enum, …)` — zod v4's enum-keyed
|
|
6692
|
+
* record requires every key, but a catalog entry only ships a subset of
|
|
6693
|
+
* formats.
|
|
6694
|
+
*/
|
|
6695
|
+
var ModelFormatsSchema = object({
|
|
6696
|
+
onnx: ModelFormatEntrySchema.optional(),
|
|
6697
|
+
coreml: ModelFormatEntrySchema.optional(),
|
|
6698
|
+
openvino: ModelFormatEntrySchema.optional(),
|
|
6699
|
+
tflite: ModelFormatEntrySchema.optional(),
|
|
6700
|
+
pt: ModelFormatEntrySchema.optional()
|
|
6701
|
+
});
|
|
6702
|
+
var ModelCatalogEntrySchema = object({
|
|
6703
|
+
id: string(),
|
|
6704
|
+
name: string(),
|
|
6705
|
+
description: string(),
|
|
6706
|
+
formats: ModelFormatsSchema,
|
|
6707
|
+
inputSize: object({
|
|
6708
|
+
width: number(),
|
|
6709
|
+
height: number()
|
|
6710
|
+
}),
|
|
6711
|
+
labels: array(LabelDefinitionSchema).readonly(),
|
|
6712
|
+
inputLayout: _enum(["nchw", "nhwc"]).optional(),
|
|
6713
|
+
inputNormalization: _enum([
|
|
6714
|
+
"zero-one",
|
|
6715
|
+
"imagenet",
|
|
6716
|
+
"none"
|
|
6717
|
+
]).optional(),
|
|
6718
|
+
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
6719
|
+
/**
|
|
6720
|
+
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
6721
|
+
* onto the canonical template) before this step runs, instead of a plain
|
|
6722
|
+
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
6723
|
+
* their embeddings are only discriminative on an aligned input. The face
|
|
6724
|
+
* detector that produced the parent detail must emit 5 landmarks.
|
|
6725
|
+
*/
|
|
6726
|
+
faceAlignment: boolean().optional(),
|
|
6727
|
+
/**
|
|
6728
|
+
* Auxiliary files required at runtime (labels JSON, charset dict, etc.).
|
|
6729
|
+
* Downloaded into the same modelsDir alongside the model file.
|
|
6730
|
+
*/
|
|
6731
|
+
extraFiles: array(ModelExtraFileSchema).readonly().optional()
|
|
6732
|
+
});
|
|
6733
|
+
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
6734
|
+
format: literal("openvino"),
|
|
6735
|
+
precisions: array(_enum(["fp16", "int8"])).min(1).readonly()
|
|
6736
|
+
}), object({ format: literal("coreml") })]);
|
|
6737
|
+
var ModelConvertMetadataSchema = object({
|
|
6738
|
+
id: string().regex(/^[a-zA-Z0-9._-]+$/),
|
|
6739
|
+
name: string(),
|
|
6740
|
+
labels: array(LabelDefinitionSchema).readonly(),
|
|
6741
|
+
inputSize: object({
|
|
6742
|
+
width: number(),
|
|
6743
|
+
height: number()
|
|
6744
|
+
}),
|
|
6745
|
+
inputLayout: _enum(["nchw", "nhwc"]).optional(),
|
|
6746
|
+
inputNormalization: _enum([
|
|
6747
|
+
"zero-one",
|
|
6748
|
+
"imagenet",
|
|
6749
|
+
"none"
|
|
6750
|
+
]).optional(),
|
|
6751
|
+
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
6752
|
+
outputFormat: _enum([
|
|
6753
|
+
"yolo",
|
|
6754
|
+
"ssd",
|
|
6755
|
+
"embedding",
|
|
6756
|
+
"classification",
|
|
6757
|
+
"ocr",
|
|
6758
|
+
"segmentation"
|
|
6759
|
+
]),
|
|
6760
|
+
faceAlignment: boolean().optional()
|
|
6761
|
+
});
|
|
6762
|
+
var ConvertResultSchema = object({
|
|
6763
|
+
entry: ModelCatalogEntrySchema,
|
|
6764
|
+
artifacts: array(object({
|
|
6765
|
+
format: _enum(MODEL_FORMATS),
|
|
6766
|
+
precision: _enum(["fp16", "int8"]).optional(),
|
|
6767
|
+
sizeMB: number(),
|
|
6768
|
+
validated: boolean(),
|
|
6769
|
+
files: array(string()).readonly()
|
|
6770
|
+
})).readonly()
|
|
6771
|
+
});
|
|
6645
6772
|
var EU_DST = {
|
|
6646
6773
|
offsetHours: 1,
|
|
6647
6774
|
startMonth: 3,
|
|
@@ -15471,6 +15598,54 @@ var EnrichedWidgetMetadataSchema = WidgetMetadataSchema.extend({
|
|
|
15471
15598
|
bundleUrl: string()
|
|
15472
15599
|
});
|
|
15473
15600
|
method(_void(), array(EnrichedWidgetMetadataSchema).readonly());
|
|
15601
|
+
/**
|
|
15602
|
+
* `custom-model-registry` — collection cap exposing operator-registered
|
|
15603
|
+
* custom detection models. Each provider (today: `addon-model-studio`)
|
|
15604
|
+
* contributes a list of `CustomModelDescriptor`s; the hub auto-concatenates
|
|
15605
|
+
* them across providers (`concatCollection`).
|
|
15606
|
+
*
|
|
15607
|
+
* The detection-pipeline is *aware* of this cap: when at least one provider
|
|
15608
|
+
* exists it unions these descriptors into the per-step model picker and the
|
|
15609
|
+
* runtime model-resolution path, alongside the static catalog. When no
|
|
15610
|
+
* provider exists the consumer no-ops entirely (identical to the catalog-only
|
|
15611
|
+
* behaviour).
|
|
15612
|
+
*
|
|
15613
|
+
* A descriptor carries a full `ModelCatalogEntry` directly — the same shape
|
|
15614
|
+
* the static catalog uses — so the existing download/resolution code consumes
|
|
15615
|
+
* it unchanged. `stepId` is the detection step the model targets
|
|
15616
|
+
* (e.g. `'object-detection'`).
|
|
15617
|
+
*/
|
|
15618
|
+
var CustomModelDescriptorSchema = object({
|
|
15619
|
+
stepId: string(),
|
|
15620
|
+
entry: ModelCatalogEntrySchema
|
|
15621
|
+
});
|
|
15622
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
15623
|
+
method(object({
|
|
15624
|
+
nodeId: string(),
|
|
15625
|
+
modelId: string(),
|
|
15626
|
+
format: _enum(MODEL_FORMATS),
|
|
15627
|
+
entry: ModelCatalogEntrySchema
|
|
15628
|
+
}), object({
|
|
15629
|
+
ok: boolean(),
|
|
15630
|
+
/** sha256 of the staged tarball (empty for a hub-local no-op). */
|
|
15631
|
+
sha256: string(),
|
|
15632
|
+
bytes: number(),
|
|
15633
|
+
/** The target node's modelsDir the artifact landed in. */
|
|
15634
|
+
path: string()
|
|
15635
|
+
}), {
|
|
15636
|
+
kind: "mutation",
|
|
15637
|
+
auth: "admin"
|
|
15638
|
+
});
|
|
15639
|
+
method(object({
|
|
15640
|
+
sourceUrl: string(),
|
|
15641
|
+
metadata: ModelConvertMetadataSchema,
|
|
15642
|
+
targets: array(ConvertTargetSchema).min(1).readonly(),
|
|
15643
|
+
calibrationRef: string().optional(),
|
|
15644
|
+
sessionId: string().optional()
|
|
15645
|
+
}), ConvertResultSchema, {
|
|
15646
|
+
kind: "mutation",
|
|
15647
|
+
auth: "admin"
|
|
15648
|
+
});
|
|
15474
15649
|
var AddonHttpRouteSchema = object({
|
|
15475
15650
|
method: _enum([
|
|
15476
15651
|
"GET",
|
|
@@ -20783,6 +20958,12 @@ Object.freeze({
|
|
|
20783
20958
|
addonId: null,
|
|
20784
20959
|
access: "create"
|
|
20785
20960
|
},
|
|
20961
|
+
"customModelRegistry.listModels": {
|
|
20962
|
+
capName: "custom-model-registry",
|
|
20963
|
+
capScope: "system",
|
|
20964
|
+
addonId: null,
|
|
20965
|
+
access: "view"
|
|
20966
|
+
},
|
|
20786
20967
|
"decoder.createSession": {
|
|
20787
20968
|
capName: "decoder",
|
|
20788
20969
|
capScope: "system",
|
|
@@ -22007,6 +22188,18 @@ Object.freeze({
|
|
|
22007
22188
|
addonId: null,
|
|
22008
22189
|
access: "view"
|
|
22009
22190
|
},
|
|
22191
|
+
"modelConvert.convert": {
|
|
22192
|
+
capName: "model-convert",
|
|
22193
|
+
capScope: "system",
|
|
22194
|
+
addonId: null,
|
|
22195
|
+
access: "create"
|
|
22196
|
+
},
|
|
22197
|
+
"modelDistributor.distributeModel": {
|
|
22198
|
+
capName: "model-distributor",
|
|
22199
|
+
capScope: "system",
|
|
22200
|
+
addonId: null,
|
|
22201
|
+
access: "create"
|
|
22202
|
+
},
|
|
22010
22203
|
"motion.isDetected": {
|
|
22011
22204
|
capName: "motion",
|
|
22012
22205
|
capScope: "device",
|
package/dist/addon.mjs
CHANGED
|
@@ -4630,7 +4630,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4630
4630
|
return inst;
|
|
4631
4631
|
}
|
|
4632
4632
|
//#endregion
|
|
4633
|
-
//#region ../types/dist/sleep-
|
|
4633
|
+
//#region ../types/dist/sleep-BV7rLc6Y.mjs
|
|
4634
4634
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4635
4635
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4636
4636
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -5109,6 +5109,12 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
5109
5109
|
* Payload: `{ deviceId, childDeviceIds, hiddenChildIds }`.
|
|
5110
5110
|
*/
|
|
5111
5111
|
EventCategory["AccessoriesChanged"] = "accessories.onAccessoriesChanged";
|
|
5112
|
+
/**
|
|
5113
|
+
* Progress update from a running model conversion job.
|
|
5114
|
+
* Payload: `{ kind: 'model-convert', phase, sessionId?, pct?, detail? }`.
|
|
5115
|
+
* Emitted by `addon-model-studio` on the converting node.
|
|
5116
|
+
*/
|
|
5117
|
+
EventCategory["ModelConvertProgress"] = "model-convert.progress";
|
|
5112
5118
|
return EventCategory;
|
|
5113
5119
|
}({});
|
|
5114
5120
|
Object.fromEntries([
|
|
@@ -6634,6 +6640,13 @@ object({
|
|
|
6634
6640
|
unreachable: number()
|
|
6635
6641
|
})
|
|
6636
6642
|
});
|
|
6643
|
+
var LabelDefinitionSchema = object({
|
|
6644
|
+
id: string(),
|
|
6645
|
+
name: string(),
|
|
6646
|
+
category: string().optional(),
|
|
6647
|
+
description: string().optional(),
|
|
6648
|
+
icon: string().optional()
|
|
6649
|
+
});
|
|
6637
6650
|
var MODEL_FORMATS = [
|
|
6638
6651
|
"onnx",
|
|
6639
6652
|
"coreml",
|
|
@@ -6641,6 +6654,120 @@ var MODEL_FORMATS = [
|
|
|
6641
6654
|
"tflite",
|
|
6642
6655
|
"pt"
|
|
6643
6656
|
];
|
|
6657
|
+
/**
|
|
6658
|
+
* Multi-file format payload.
|
|
6659
|
+
*
|
|
6660
|
+
* - Directory formats (`isDirectory: true`, e.g. `.mlpackage`): files
|
|
6661
|
+
* relative to the directory root — the downloader fetches each from
|
|
6662
|
+
* `{url}/{file}` into `{modelDir}/{file}`. If omitted, it probes the
|
|
6663
|
+
* HuggingFace API (slower).
|
|
6664
|
+
* - Single-file formats (no `isDirectory`, e.g. OpenVINO IR): sibling
|
|
6665
|
+
* files fetched from the SAME remote directory as `url` and stored flat
|
|
6666
|
+
* alongside the main file — e.g. `['camstack-yolov9t.bin']` for the IR
|
|
6667
|
+
* weights next to `camstack-yolov9t.xml`.
|
|
6668
|
+
*/
|
|
6669
|
+
var ModelFormatEntrySchema = object({
|
|
6670
|
+
url: string(),
|
|
6671
|
+
sizeMB: number(),
|
|
6672
|
+
/** Whether this format is a directory bundle (e.g., .mlpackage) rather than a single file */
|
|
6673
|
+
isDirectory: boolean().optional(),
|
|
6674
|
+
/** Multi-file payload (directory members or sibling files). */
|
|
6675
|
+
files: array(string()).readonly().optional(),
|
|
6676
|
+
/** Runtime(s) that can use this format. If omitted, inferred from ModelFormat key */
|
|
6677
|
+
runtimes: array(_enum(["node", "python"])).readonly().optional()
|
|
6678
|
+
});
|
|
6679
|
+
/**
|
|
6680
|
+
* Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
|
|
6681
|
+
* The downloader fetches from `url` and saves to `{modelsDir}/{filename}`.
|
|
6682
|
+
*/
|
|
6683
|
+
var ModelExtraFileSchema = object({
|
|
6684
|
+
url: string(),
|
|
6685
|
+
filename: string(),
|
|
6686
|
+
sizeMB: number()
|
|
6687
|
+
});
|
|
6688
|
+
/**
|
|
6689
|
+
* Per-format payload map. Modelled as an explicit object (one optional key
|
|
6690
|
+
* per `ModelFormat`) rather than `z.record(enum, …)` — zod v4's enum-keyed
|
|
6691
|
+
* record requires every key, but a catalog entry only ships a subset of
|
|
6692
|
+
* formats.
|
|
6693
|
+
*/
|
|
6694
|
+
var ModelFormatsSchema = object({
|
|
6695
|
+
onnx: ModelFormatEntrySchema.optional(),
|
|
6696
|
+
coreml: ModelFormatEntrySchema.optional(),
|
|
6697
|
+
openvino: ModelFormatEntrySchema.optional(),
|
|
6698
|
+
tflite: ModelFormatEntrySchema.optional(),
|
|
6699
|
+
pt: ModelFormatEntrySchema.optional()
|
|
6700
|
+
});
|
|
6701
|
+
var ModelCatalogEntrySchema = object({
|
|
6702
|
+
id: string(),
|
|
6703
|
+
name: string(),
|
|
6704
|
+
description: string(),
|
|
6705
|
+
formats: ModelFormatsSchema,
|
|
6706
|
+
inputSize: object({
|
|
6707
|
+
width: number(),
|
|
6708
|
+
height: number()
|
|
6709
|
+
}),
|
|
6710
|
+
labels: array(LabelDefinitionSchema).readonly(),
|
|
6711
|
+
inputLayout: _enum(["nchw", "nhwc"]).optional(),
|
|
6712
|
+
inputNormalization: _enum([
|
|
6713
|
+
"zero-one",
|
|
6714
|
+
"imagenet",
|
|
6715
|
+
"none"
|
|
6716
|
+
]).optional(),
|
|
6717
|
+
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
6718
|
+
/**
|
|
6719
|
+
* When true, the executor produces a landmark-aligned crop (similarity warp
|
|
6720
|
+
* onto the canonical template) before this step runs, instead of a plain
|
|
6721
|
+
* axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
|
|
6722
|
+
* their embeddings are only discriminative on an aligned input. The face
|
|
6723
|
+
* detector that produced the parent detail must emit 5 landmarks.
|
|
6724
|
+
*/
|
|
6725
|
+
faceAlignment: boolean().optional(),
|
|
6726
|
+
/**
|
|
6727
|
+
* Auxiliary files required at runtime (labels JSON, charset dict, etc.).
|
|
6728
|
+
* Downloaded into the same modelsDir alongside the model file.
|
|
6729
|
+
*/
|
|
6730
|
+
extraFiles: array(ModelExtraFileSchema).readonly().optional()
|
|
6731
|
+
});
|
|
6732
|
+
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
6733
|
+
format: literal("openvino"),
|
|
6734
|
+
precisions: array(_enum(["fp16", "int8"])).min(1).readonly()
|
|
6735
|
+
}), object({ format: literal("coreml") })]);
|
|
6736
|
+
var ModelConvertMetadataSchema = object({
|
|
6737
|
+
id: string().regex(/^[a-zA-Z0-9._-]+$/),
|
|
6738
|
+
name: string(),
|
|
6739
|
+
labels: array(LabelDefinitionSchema).readonly(),
|
|
6740
|
+
inputSize: object({
|
|
6741
|
+
width: number(),
|
|
6742
|
+
height: number()
|
|
6743
|
+
}),
|
|
6744
|
+
inputLayout: _enum(["nchw", "nhwc"]).optional(),
|
|
6745
|
+
inputNormalization: _enum([
|
|
6746
|
+
"zero-one",
|
|
6747
|
+
"imagenet",
|
|
6748
|
+
"none"
|
|
6749
|
+
]).optional(),
|
|
6750
|
+
preprocessMode: _enum(["letterbox", "resize"]).optional(),
|
|
6751
|
+
outputFormat: _enum([
|
|
6752
|
+
"yolo",
|
|
6753
|
+
"ssd",
|
|
6754
|
+
"embedding",
|
|
6755
|
+
"classification",
|
|
6756
|
+
"ocr",
|
|
6757
|
+
"segmentation"
|
|
6758
|
+
]),
|
|
6759
|
+
faceAlignment: boolean().optional()
|
|
6760
|
+
});
|
|
6761
|
+
var ConvertResultSchema = object({
|
|
6762
|
+
entry: ModelCatalogEntrySchema,
|
|
6763
|
+
artifacts: array(object({
|
|
6764
|
+
format: _enum(MODEL_FORMATS),
|
|
6765
|
+
precision: _enum(["fp16", "int8"]).optional(),
|
|
6766
|
+
sizeMB: number(),
|
|
6767
|
+
validated: boolean(),
|
|
6768
|
+
files: array(string()).readonly()
|
|
6769
|
+
})).readonly()
|
|
6770
|
+
});
|
|
6644
6771
|
var EU_DST = {
|
|
6645
6772
|
offsetHours: 1,
|
|
6646
6773
|
startMonth: 3,
|
|
@@ -15470,6 +15597,54 @@ var EnrichedWidgetMetadataSchema = WidgetMetadataSchema.extend({
|
|
|
15470
15597
|
bundleUrl: string()
|
|
15471
15598
|
});
|
|
15472
15599
|
method(_void(), array(EnrichedWidgetMetadataSchema).readonly());
|
|
15600
|
+
/**
|
|
15601
|
+
* `custom-model-registry` — collection cap exposing operator-registered
|
|
15602
|
+
* custom detection models. Each provider (today: `addon-model-studio`)
|
|
15603
|
+
* contributes a list of `CustomModelDescriptor`s; the hub auto-concatenates
|
|
15604
|
+
* them across providers (`concatCollection`).
|
|
15605
|
+
*
|
|
15606
|
+
* The detection-pipeline is *aware* of this cap: when at least one provider
|
|
15607
|
+
* exists it unions these descriptors into the per-step model picker and the
|
|
15608
|
+
* runtime model-resolution path, alongside the static catalog. When no
|
|
15609
|
+
* provider exists the consumer no-ops entirely (identical to the catalog-only
|
|
15610
|
+
* behaviour).
|
|
15611
|
+
*
|
|
15612
|
+
* A descriptor carries a full `ModelCatalogEntry` directly — the same shape
|
|
15613
|
+
* the static catalog uses — so the existing download/resolution code consumes
|
|
15614
|
+
* it unchanged. `stepId` is the detection step the model targets
|
|
15615
|
+
* (e.g. `'object-detection'`).
|
|
15616
|
+
*/
|
|
15617
|
+
var CustomModelDescriptorSchema = object({
|
|
15618
|
+
stepId: string(),
|
|
15619
|
+
entry: ModelCatalogEntrySchema
|
|
15620
|
+
});
|
|
15621
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
15622
|
+
method(object({
|
|
15623
|
+
nodeId: string(),
|
|
15624
|
+
modelId: string(),
|
|
15625
|
+
format: _enum(MODEL_FORMATS),
|
|
15626
|
+
entry: ModelCatalogEntrySchema
|
|
15627
|
+
}), object({
|
|
15628
|
+
ok: boolean(),
|
|
15629
|
+
/** sha256 of the staged tarball (empty for a hub-local no-op). */
|
|
15630
|
+
sha256: string(),
|
|
15631
|
+
bytes: number(),
|
|
15632
|
+
/** The target node's modelsDir the artifact landed in. */
|
|
15633
|
+
path: string()
|
|
15634
|
+
}), {
|
|
15635
|
+
kind: "mutation",
|
|
15636
|
+
auth: "admin"
|
|
15637
|
+
});
|
|
15638
|
+
method(object({
|
|
15639
|
+
sourceUrl: string(),
|
|
15640
|
+
metadata: ModelConvertMetadataSchema,
|
|
15641
|
+
targets: array(ConvertTargetSchema).min(1).readonly(),
|
|
15642
|
+
calibrationRef: string().optional(),
|
|
15643
|
+
sessionId: string().optional()
|
|
15644
|
+
}), ConvertResultSchema, {
|
|
15645
|
+
kind: "mutation",
|
|
15646
|
+
auth: "admin"
|
|
15647
|
+
});
|
|
15473
15648
|
var AddonHttpRouteSchema = object({
|
|
15474
15649
|
method: _enum([
|
|
15475
15650
|
"GET",
|
|
@@ -20782,6 +20957,12 @@ Object.freeze({
|
|
|
20782
20957
|
addonId: null,
|
|
20783
20958
|
access: "create"
|
|
20784
20959
|
},
|
|
20960
|
+
"customModelRegistry.listModels": {
|
|
20961
|
+
capName: "custom-model-registry",
|
|
20962
|
+
capScope: "system",
|
|
20963
|
+
addonId: null,
|
|
20964
|
+
access: "view"
|
|
20965
|
+
},
|
|
20785
20966
|
"decoder.createSession": {
|
|
20786
20967
|
capName: "decoder",
|
|
20787
20968
|
capScope: "system",
|
|
@@ -22006,6 +22187,18 @@ Object.freeze({
|
|
|
22006
22187
|
addonId: null,
|
|
22007
22188
|
access: "view"
|
|
22008
22189
|
},
|
|
22190
|
+
"modelConvert.convert": {
|
|
22191
|
+
capName: "model-convert",
|
|
22192
|
+
capScope: "system",
|
|
22193
|
+
addonId: null,
|
|
22194
|
+
access: "create"
|
|
22195
|
+
},
|
|
22196
|
+
"modelDistributor.distributeModel": {
|
|
22197
|
+
capName: "model-distributor",
|
|
22198
|
+
capScope: "system",
|
|
22199
|
+
addonId: null,
|
|
22200
|
+
access: "create"
|
|
22201
|
+
},
|
|
22009
22202
|
"motion.isDetected": {
|
|
22010
22203
|
capName: "motion",
|
|
22011
22204
|
capScope: "device",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-hikvision",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Hikvision camera device provider addon for CamStack — ISAPI over HTTP(S) with digest auth (snapshot, alarm stream, RTSP discovery)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|