@camstack/addon-notifiers 1.2.1 → 1.2.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 +66 -6
- package/dist/addon.mjs +66 -6
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -11328,7 +11328,8 @@ var PipelineStepInputSchema = lazy(() => object({
|
|
|
11328
11328
|
modelId: string().optional(),
|
|
11329
11329
|
enabled: boolean().default(true),
|
|
11330
11330
|
children: array(PipelineStepInputSchema).optional(),
|
|
11331
|
-
settings: record(string(), unknown()).optional()
|
|
11331
|
+
settings: record(string(), unknown()).optional(),
|
|
11332
|
+
jumpDeviceKey: string().optional()
|
|
11332
11333
|
}));
|
|
11333
11334
|
var ModelSubstitutionSchema = object({
|
|
11334
11335
|
addonId: string(),
|
|
@@ -11634,8 +11635,24 @@ var NativeCropBboxSchema = object({
|
|
|
11634
11635
|
});
|
|
11635
11636
|
/** Result of a best-effort native-resolution crop (`getNativeCrop`). */
|
|
11636
11637
|
var NativeCropResultSchema = object({
|
|
11637
|
-
/**
|
|
11638
|
-
|
|
11638
|
+
/**
|
|
11639
|
+
* Packed rgb (24-bit) pixels of the crop. Present on the DEFAULT (raw) path —
|
|
11640
|
+
* same-node (in-process / UDS) callers get zero-copy RGB and encode locally.
|
|
11641
|
+
* OMITTED when the caller requested `encodeJpeg` (the cross-node compressed
|
|
11642
|
+
* path below), where shipping raw RGB is both an invariant violation and, for
|
|
11643
|
+
* a native full frame (~26 MB at 4K), larger than Moleculer's 10 MB
|
|
11644
|
+
* `maxPacketSize` → the packet is dropped and the call 60s-times-out. That is
|
|
11645
|
+
* the cross-node native-media miss: `bytes` is replaced by `jpeg`.
|
|
11646
|
+
*/
|
|
11647
|
+
bytes: _instanceof(Uint8Array).optional(),
|
|
11648
|
+
/**
|
|
11649
|
+
* Base64 JPEG of the crop — the COMPRESSED cross-node payload. The OWNING node
|
|
11650
|
+
* (which holds the native surface) encodes it in-process, so a native 4K frame
|
|
11651
|
+
* ships as ~0.5–2 MB (well under `maxPacketSize`) and NO raw pixels ever cross
|
|
11652
|
+
* a process boundary (CLAUDE.md invariant #21). Present ONLY when the request
|
|
11653
|
+
* set `encodeJpeg: true`; `bytes` is then absent.
|
|
11654
|
+
*/
|
|
11655
|
+
jpeg: string().optional(),
|
|
11639
11656
|
width: number().int().positive(),
|
|
11640
11657
|
height: number().int().positive(),
|
|
11641
11658
|
/**
|
|
@@ -11781,6 +11798,20 @@ var RunnerFrameSourceSchema = discriminatedUnion("kind", [object({ kind: literal
|
|
|
11781
11798
|
hubHostnameOverride: string().optional()
|
|
11782
11799
|
})]).describe("Per-camera frame-source mode for the runner (P2c)");
|
|
11783
11800
|
/**
|
|
11801
|
+
* One ENABLED inference device on the runner's node, as the step-tree
|
|
11802
|
+
* device-jump resolver sees it (phase 1). The orchestrator populates this
|
|
11803
|
+
* roster on the attach payload whenever the camera is elected onto a specific
|
|
11804
|
+
* `deviceKey` and the node has ≥2 enabled devices — it is the candidate set the
|
|
11805
|
+
* runner auto-jumps an enrichment step to when the elected device's format
|
|
11806
|
+
* cannot run that step's model. `weight`/`maxSessions` mirror the balancer's
|
|
11807
|
+
* per-device knobs so the auto choice is weighted-least-loaded.
|
|
11808
|
+
*/
|
|
11809
|
+
var RunnerInferenceDeviceSchema = object({
|
|
11810
|
+
deviceKey: string(),
|
|
11811
|
+
weight: number().positive().default(1),
|
|
11812
|
+
maxSessions: number().int().positive().nullable().default(null)
|
|
11813
|
+
});
|
|
11814
|
+
/**
|
|
11784
11815
|
* Camera assignment payload sent by `addon-pipeline-orchestrator` to a
|
|
11785
11816
|
* specific runner instance via `attachCamera`. Carries everything the
|
|
11786
11817
|
* runner needs to subscribe to the local broker and execute inference.
|
|
@@ -11898,7 +11929,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
11898
11929
|
* omitted ⇒ the runner's default device. The engine itself stays node-local —
|
|
11899
11930
|
* this only selects WHICH device pool of that node runs the session.
|
|
11900
11931
|
*/
|
|
11901
|
-
deviceKey: string().optional()
|
|
11932
|
+
deviceKey: string().optional(),
|
|
11933
|
+
/**
|
|
11934
|
+
* Step-tree device-jump roster (phase 1): the node's ENABLED inference
|
|
11935
|
+
* devices, populated by the orchestrator ONLY when `deviceKey` is set and the
|
|
11936
|
+
* node has ≥2 enabled devices. The runner uses it to AUTO-jump an enrichment
|
|
11937
|
+
* step whose model has no build for the elected device's format onto another
|
|
11938
|
+
* enabled device of the SAME node (weighted-least-loaded). Absent/single-entry
|
|
11939
|
+
* ⇒ no jump possible; the step runs on `deviceKey`.
|
|
11940
|
+
*/
|
|
11941
|
+
inferenceDevices: array(RunnerInferenceDeviceSchema).readonly().optional()
|
|
11902
11942
|
});
|
|
11903
11943
|
motionFpsField.min, motionFpsField.max, motionFpsField.step, motionFpsField.default, detectionFpsField.min, detectionFpsField.max, detectionFpsField.step, detectionFpsField.default, motionCooldownMsField.min, motionCooldownMsField.max, motionCooldownMsField.step, motionCooldownMsField.default, occupancyRecheckSecField.min, occupancyRecheckSecField.max, occupancyRecheckSecField.step, occupancyRecheckSecField.default, occupancyRecheckFramesField.min, occupancyRecheckFramesField.max, occupancyRecheckFramesField.step, occupancyRecheckFramesField.default;
|
|
11904
11944
|
/**
|
|
@@ -11954,7 +11994,18 @@ var RunnerLocalMetricsSchema = object({
|
|
|
11954
11994
|
method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mutation" }), method(object({ deviceId: number() }), object({ success: literal(true) }), { kind: "mutation" }), method(ReportMotionInputSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), RunnerLocalLoadSchema), method(_void(), RunnerLocalMetricsSchema), method(object({ deviceId: number() }), CameraMetricsSchema.nullable()), method(_void(), array(CameraMetricsWithDeviceIdSchema).readonly()), method(_void(), array(number()).readonly()), method(object({
|
|
11955
11995
|
handle: FrameHandleSchema,
|
|
11956
11996
|
bbox: NativeCropBboxSchema,
|
|
11957
|
-
maxWidth: number().int().positive().optional()
|
|
11997
|
+
maxWidth: number().int().positive().optional(),
|
|
11998
|
+
/**
|
|
11999
|
+
* When `true`, the runner encodes the resolved crop to JPEG ON THE
|
|
12000
|
+
* OWNING NODE and returns it in `jpeg` (base64) INSTEAD of raw `bytes`.
|
|
12001
|
+
* Callers set this for CROSS-NODE fetches (`handle.nodeId` is a remote
|
|
12002
|
+
* agent) so the compressed payload fits Moleculer's `maxPacketSize` and
|
|
12003
|
+
* no raw pixels cross the process boundary. Same-node callers omit it
|
|
12004
|
+
* and keep the zero-copy raw `bytes` path. Additive + optional: a
|
|
12005
|
+
* pre-encode runner (version skew) ignores it and returns `bytes`, so
|
|
12006
|
+
* the caller falls back to encoding locally.
|
|
12007
|
+
*/
|
|
12008
|
+
encodeJpeg: boolean().optional()
|
|
11958
12009
|
}), NativeCropResultSchema.nullable()), method(object({
|
|
11959
12010
|
deviceId: number(),
|
|
11960
12011
|
frameHandle: FrameHandleSchema.optional(),
|
|
@@ -17116,7 +17167,16 @@ var PipelineTemplateSchema = object({
|
|
|
17116
17167
|
});
|
|
17117
17168
|
var DeviceStepConfigSchema = object({
|
|
17118
17169
|
modelId: string().optional(),
|
|
17119
|
-
settings: record(string(), unknown()).optional()
|
|
17170
|
+
settings: record(string(), unknown()).optional(),
|
|
17171
|
+
/**
|
|
17172
|
+
* Step-tree device jump (same-node, phase 1) — OPTIONAL manual override.
|
|
17173
|
+
* When set, this step runs on the named enabled device of the SAME node
|
|
17174
|
+
* (`<backend>:<device>`) instead of the camera's elected device, bypassing
|
|
17175
|
+
* the runtime AUTO-jump. The orchestrator rejects a `jumpDeviceKey` pointing
|
|
17176
|
+
* at a disabled/absent device on that node at save time. Absent ⇒ the runner
|
|
17177
|
+
* auto-jumps only when the effective device's format cannot run the step.
|
|
17178
|
+
*/
|
|
17179
|
+
jumpDeviceKey: string().optional()
|
|
17120
17180
|
});
|
|
17121
17181
|
var AgentPipelineSettingsSchema = object({
|
|
17122
17182
|
maxCameras: number().int().nonnegative().nullable().default(null),
|
package/dist/addon.mjs
CHANGED
|
@@ -11324,7 +11324,8 @@ var PipelineStepInputSchema = lazy(() => object({
|
|
|
11324
11324
|
modelId: string().optional(),
|
|
11325
11325
|
enabled: boolean().default(true),
|
|
11326
11326
|
children: array(PipelineStepInputSchema).optional(),
|
|
11327
|
-
settings: record(string(), unknown()).optional()
|
|
11327
|
+
settings: record(string(), unknown()).optional(),
|
|
11328
|
+
jumpDeviceKey: string().optional()
|
|
11328
11329
|
}));
|
|
11329
11330
|
var ModelSubstitutionSchema = object({
|
|
11330
11331
|
addonId: string(),
|
|
@@ -11630,8 +11631,24 @@ var NativeCropBboxSchema = object({
|
|
|
11630
11631
|
});
|
|
11631
11632
|
/** Result of a best-effort native-resolution crop (`getNativeCrop`). */
|
|
11632
11633
|
var NativeCropResultSchema = object({
|
|
11633
|
-
/**
|
|
11634
|
-
|
|
11634
|
+
/**
|
|
11635
|
+
* Packed rgb (24-bit) pixels of the crop. Present on the DEFAULT (raw) path —
|
|
11636
|
+
* same-node (in-process / UDS) callers get zero-copy RGB and encode locally.
|
|
11637
|
+
* OMITTED when the caller requested `encodeJpeg` (the cross-node compressed
|
|
11638
|
+
* path below), where shipping raw RGB is both an invariant violation and, for
|
|
11639
|
+
* a native full frame (~26 MB at 4K), larger than Moleculer's 10 MB
|
|
11640
|
+
* `maxPacketSize` → the packet is dropped and the call 60s-times-out. That is
|
|
11641
|
+
* the cross-node native-media miss: `bytes` is replaced by `jpeg`.
|
|
11642
|
+
*/
|
|
11643
|
+
bytes: _instanceof(Uint8Array).optional(),
|
|
11644
|
+
/**
|
|
11645
|
+
* Base64 JPEG of the crop — the COMPRESSED cross-node payload. The OWNING node
|
|
11646
|
+
* (which holds the native surface) encodes it in-process, so a native 4K frame
|
|
11647
|
+
* ships as ~0.5–2 MB (well under `maxPacketSize`) and NO raw pixels ever cross
|
|
11648
|
+
* a process boundary (CLAUDE.md invariant #21). Present ONLY when the request
|
|
11649
|
+
* set `encodeJpeg: true`; `bytes` is then absent.
|
|
11650
|
+
*/
|
|
11651
|
+
jpeg: string().optional(),
|
|
11635
11652
|
width: number().int().positive(),
|
|
11636
11653
|
height: number().int().positive(),
|
|
11637
11654
|
/**
|
|
@@ -11777,6 +11794,20 @@ var RunnerFrameSourceSchema = discriminatedUnion("kind", [object({ kind: literal
|
|
|
11777
11794
|
hubHostnameOverride: string().optional()
|
|
11778
11795
|
})]).describe("Per-camera frame-source mode for the runner (P2c)");
|
|
11779
11796
|
/**
|
|
11797
|
+
* One ENABLED inference device on the runner's node, as the step-tree
|
|
11798
|
+
* device-jump resolver sees it (phase 1). The orchestrator populates this
|
|
11799
|
+
* roster on the attach payload whenever the camera is elected onto a specific
|
|
11800
|
+
* `deviceKey` and the node has ≥2 enabled devices — it is the candidate set the
|
|
11801
|
+
* runner auto-jumps an enrichment step to when the elected device's format
|
|
11802
|
+
* cannot run that step's model. `weight`/`maxSessions` mirror the balancer's
|
|
11803
|
+
* per-device knobs so the auto choice is weighted-least-loaded.
|
|
11804
|
+
*/
|
|
11805
|
+
var RunnerInferenceDeviceSchema = object({
|
|
11806
|
+
deviceKey: string(),
|
|
11807
|
+
weight: number().positive().default(1),
|
|
11808
|
+
maxSessions: number().int().positive().nullable().default(null)
|
|
11809
|
+
});
|
|
11810
|
+
/**
|
|
11780
11811
|
* Camera assignment payload sent by `addon-pipeline-orchestrator` to a
|
|
11781
11812
|
* specific runner instance via `attachCamera`. Carries everything the
|
|
11782
11813
|
* runner needs to subscribe to the local broker and execute inference.
|
|
@@ -11894,7 +11925,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
11894
11925
|
* omitted ⇒ the runner's default device. The engine itself stays node-local —
|
|
11895
11926
|
* this only selects WHICH device pool of that node runs the session.
|
|
11896
11927
|
*/
|
|
11897
|
-
deviceKey: string().optional()
|
|
11928
|
+
deviceKey: string().optional(),
|
|
11929
|
+
/**
|
|
11930
|
+
* Step-tree device-jump roster (phase 1): the node's ENABLED inference
|
|
11931
|
+
* devices, populated by the orchestrator ONLY when `deviceKey` is set and the
|
|
11932
|
+
* node has ≥2 enabled devices. The runner uses it to AUTO-jump an enrichment
|
|
11933
|
+
* step whose model has no build for the elected device's format onto another
|
|
11934
|
+
* enabled device of the SAME node (weighted-least-loaded). Absent/single-entry
|
|
11935
|
+
* ⇒ no jump possible; the step runs on `deviceKey`.
|
|
11936
|
+
*/
|
|
11937
|
+
inferenceDevices: array(RunnerInferenceDeviceSchema).readonly().optional()
|
|
11898
11938
|
});
|
|
11899
11939
|
motionFpsField.min, motionFpsField.max, motionFpsField.step, motionFpsField.default, detectionFpsField.min, detectionFpsField.max, detectionFpsField.step, detectionFpsField.default, motionCooldownMsField.min, motionCooldownMsField.max, motionCooldownMsField.step, motionCooldownMsField.default, occupancyRecheckSecField.min, occupancyRecheckSecField.max, occupancyRecheckSecField.step, occupancyRecheckSecField.default, occupancyRecheckFramesField.min, occupancyRecheckFramesField.max, occupancyRecheckFramesField.step, occupancyRecheckFramesField.default;
|
|
11900
11940
|
/**
|
|
@@ -11950,7 +11990,18 @@ var RunnerLocalMetricsSchema = object({
|
|
|
11950
11990
|
method(RunnerCameraConfigSchema, object({ success: literal(true) }), { kind: "mutation" }), method(object({ deviceId: number() }), object({ success: literal(true) }), { kind: "mutation" }), method(ReportMotionInputSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), RunnerLocalLoadSchema), method(_void(), RunnerLocalMetricsSchema), method(object({ deviceId: number() }), CameraMetricsSchema.nullable()), method(_void(), array(CameraMetricsWithDeviceIdSchema).readonly()), method(_void(), array(number()).readonly()), method(object({
|
|
11951
11991
|
handle: FrameHandleSchema,
|
|
11952
11992
|
bbox: NativeCropBboxSchema,
|
|
11953
|
-
maxWidth: number().int().positive().optional()
|
|
11993
|
+
maxWidth: number().int().positive().optional(),
|
|
11994
|
+
/**
|
|
11995
|
+
* When `true`, the runner encodes the resolved crop to JPEG ON THE
|
|
11996
|
+
* OWNING NODE and returns it in `jpeg` (base64) INSTEAD of raw `bytes`.
|
|
11997
|
+
* Callers set this for CROSS-NODE fetches (`handle.nodeId` is a remote
|
|
11998
|
+
* agent) so the compressed payload fits Moleculer's `maxPacketSize` and
|
|
11999
|
+
* no raw pixels cross the process boundary. Same-node callers omit it
|
|
12000
|
+
* and keep the zero-copy raw `bytes` path. Additive + optional: a
|
|
12001
|
+
* pre-encode runner (version skew) ignores it and returns `bytes`, so
|
|
12002
|
+
* the caller falls back to encoding locally.
|
|
12003
|
+
*/
|
|
12004
|
+
encodeJpeg: boolean().optional()
|
|
11954
12005
|
}), NativeCropResultSchema.nullable()), method(object({
|
|
11955
12006
|
deviceId: number(),
|
|
11956
12007
|
frameHandle: FrameHandleSchema.optional(),
|
|
@@ -17112,7 +17163,16 @@ var PipelineTemplateSchema = object({
|
|
|
17112
17163
|
});
|
|
17113
17164
|
var DeviceStepConfigSchema = object({
|
|
17114
17165
|
modelId: string().optional(),
|
|
17115
|
-
settings: record(string(), unknown()).optional()
|
|
17166
|
+
settings: record(string(), unknown()).optional(),
|
|
17167
|
+
/**
|
|
17168
|
+
* Step-tree device jump (same-node, phase 1) — OPTIONAL manual override.
|
|
17169
|
+
* When set, this step runs on the named enabled device of the SAME node
|
|
17170
|
+
* (`<backend>:<device>`) instead of the camera's elected device, bypassing
|
|
17171
|
+
* the runtime AUTO-jump. The orchestrator rejects a `jumpDeviceKey` pointing
|
|
17172
|
+
* at a disabled/absent device on that node at save time. Absent ⇒ the runner
|
|
17173
|
+
* auto-jumps only when the effective device's format cannot run the step.
|
|
17174
|
+
*/
|
|
17175
|
+
jumpDeviceKey: string().optional()
|
|
17116
17176
|
});
|
|
17117
17177
|
var AgentPipelineSettingsSchema = object({
|
|
17118
17178
|
maxCameras: number().int().nonnegative().nullable().default(null),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-notifiers",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "System notifiers addon for CamStack — a `notification-output` collection provider hosting per-kind notifier adapters (ntfy, pushover, gotify, telegram, discord, webhook, zentik).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|