@camstack/addon-post-analysis 1.2.5 → 1.2.7
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/{dist-Dlb4YrCt.js → dist-BW-IoQDL.js} +446 -3
- package/dist/{dist-Db0CsDGK.mjs → dist-D5fcvkof.mjs} +429 -4
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/{node-DWX3J7jh.js → node-AdCpDGpz.js} +1 -1
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-ACzsl3tP.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-6_8G5GUI.mjs} +1 -1
- package/dist/pipeline-analytics/{hostInit-BdlfdPP1.mjs → hostInit-DAKHmSht.mjs} +1 -1
- package/dist/pipeline-analytics/index.js +6244 -3495
- package/dist/pipeline-analytics/index.mjs +6243 -3494
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +4 -1
|
@@ -6815,7 +6815,6 @@ object({ deviceId: number() }), object({ deviceId: number() }), object({
|
|
|
6815
6815
|
patch: record(string(), unknown())
|
|
6816
6816
|
}), object({ success: literal(true) });
|
|
6817
6817
|
object({ deviceId: number() }), unknown().nullable();
|
|
6818
|
-
/** Shorthand to define a method schema */
|
|
6819
6818
|
function method(input, output, options) {
|
|
6820
6819
|
return {
|
|
6821
6820
|
input,
|
|
@@ -6823,6 +6822,7 @@ function method(input, output, options) {
|
|
|
6823
6822
|
kind: options?.kind ?? "query",
|
|
6824
6823
|
auth: options?.auth ?? "protected",
|
|
6825
6824
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
6825
|
+
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
6826
6826
|
timeoutMs: options?.timeoutMs
|
|
6827
6827
|
};
|
|
6828
6828
|
}
|
|
@@ -11017,6 +11017,22 @@ var CameraMetricsSchema = object({
|
|
|
11017
11017
|
])
|
|
11018
11018
|
});
|
|
11019
11019
|
var CameraMetricsWithDeviceIdSchema = CameraMetricsSchema.extend({ deviceId: number() });
|
|
11020
|
+
/**
|
|
11021
|
+
* Reference to the frame's retained NATIVE surface + the parent crop's placement
|
|
11022
|
+
* within the frame, so the executor can re-cut a leaf child ROI at native
|
|
11023
|
+
* resolution on the detail plane. See the `runPipeline` `nativeCropRef` field.
|
|
11024
|
+
*/
|
|
11025
|
+
var NativeCropRefSchema = object({
|
|
11026
|
+
/** Handle keying the retained native surface (node-pinned to its owner). */
|
|
11027
|
+
handle: FrameHandleSchema,
|
|
11028
|
+
/** The parent crop's padded/clamped rectangle in FRAME-space pixels. */
|
|
11029
|
+
cropFrameSpace: object({
|
|
11030
|
+
x: number(),
|
|
11031
|
+
y: number(),
|
|
11032
|
+
w: number(),
|
|
11033
|
+
h: number()
|
|
11034
|
+
})
|
|
11035
|
+
});
|
|
11020
11036
|
var ModelFormatSchema$1 = _enum([
|
|
11021
11037
|
"onnx",
|
|
11022
11038
|
"coreml",
|
|
@@ -11292,7 +11308,22 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
|
|
|
11292
11308
|
* Omitted ⇒ the runner's default device (current single-engine
|
|
11293
11309
|
* behaviour). Selects WHICH device pool of the node runs the call.
|
|
11294
11310
|
*/
|
|
11295
|
-
deviceKey: string().optional()
|
|
11311
|
+
deviceKey: string().optional(),
|
|
11312
|
+
/**
|
|
11313
|
+
* Two-plane NATIVE child-crop reference. Set by `runDetailSubtree` ONLY
|
|
11314
|
+
* when the parent crop was resolved from the frame's retained NATIVE
|
|
11315
|
+
* surface (a frameHandle HIT). Lets the executor re-cut a LEAF crop
|
|
11316
|
+
* child's ROI (plate-ocr, face-embedding, leaf classifiers) at native
|
|
11317
|
+
* resolution from that surface — the SAME quality path faces already
|
|
11318
|
+
* had — instead of the downscaled parent tile. `handle` keys the native
|
|
11319
|
+
* surface (node-pinned to its owner); `cropFrameSpace` is the parent
|
|
11320
|
+
* crop's padded/clamped rectangle in FRAME-space pixels, used to compose
|
|
11321
|
+
* the executor's crop-normalized child ROI back into frame-normalized
|
|
11322
|
+
* coordinates. Auxiliary to the image source (`image`/`frame`/…), NOT one
|
|
11323
|
+
* of the mutually-exclusive image inputs. Absent ⇒ tile-crop children
|
|
11324
|
+
* (today's behaviour on the fallback path).
|
|
11325
|
+
*/
|
|
11326
|
+
nativeCropRef: NativeCropRefSchema.optional()
|
|
11296
11327
|
}), PipelineRunResultBridge, { kind: "mutation" }), method(object({
|
|
11297
11328
|
engine: PipelineEngineChoiceSchema.optional(),
|
|
11298
11329
|
steps: array(PipelineStepInputSchema).min(1),
|
|
@@ -11508,7 +11539,11 @@ var DetailResultSchema = object({
|
|
|
11508
11539
|
bbox: NativeCropBboxSchema.optional(),
|
|
11509
11540
|
embedding: string().optional(),
|
|
11510
11541
|
label: string().optional(),
|
|
11511
|
-
alignedCropJpeg: string().optional()
|
|
11542
|
+
alignedCropJpeg: string().optional(),
|
|
11543
|
+
/** Face short side (px) measured on the NATIVE crop surface. The `bbox`
|
|
11544
|
+
* above is detection-frame px (≈6× smaller on a 4K camera) — min-face-size
|
|
11545
|
+
* consumers MUST prefer this when present (2026-07-22 native-gate fix). */
|
|
11546
|
+
nativeFaceShortSidePx: number().optional()
|
|
11512
11547
|
});
|
|
11513
11548
|
/**
|
|
11514
11549
|
* Per-camera tunable ranges + defaults. Single source of truth used
|
|
@@ -15950,6 +15985,348 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
|
|
|
15950
15985
|
enabled: boolean()
|
|
15951
15986
|
}), _void(), { kind: "mutation" });
|
|
15952
15987
|
/**
|
|
15988
|
+
* notification-rules — the Notification Center rule surface (P1 core).
|
|
15989
|
+
*
|
|
15990
|
+
* Spec: `docs/superpowers/specs/2026-07-22-notification-center-requirements.md`
|
|
15991
|
+
* (operator decisions D-1/D-2/D-3 are binding):
|
|
15992
|
+
*
|
|
15993
|
+
* - D-2: rule EVALUATION lives in `addon-post-analysis` (the
|
|
15994
|
+
* `notification-center` module), hooked on the durable persistence
|
|
15995
|
+
* moments (object-event insert, TrackCloser.closeExpired) with a
|
|
15996
|
+
* persisted outbox + retry — never the lossy telemetry bus (D8).
|
|
15997
|
+
* - D-3: urgency belongs to the RULE. `delivery: 'immediate'` fires on the
|
|
15998
|
+
* FIRST persisted detection matching the conditions (per-track dedup,
|
|
15999
|
+
* `maxPerTrack` fixed at 1 — see {@link NC_MAX_PER_TRACK_IMMEDIATE});
|
|
16000
|
+
* `delivery: 'track-end'` evaluates the finalized track record at close.
|
|
16001
|
+
* - DISPATCH stays behind `notification-output` (rules reference targets
|
|
16002
|
+
* by id; per-backend params are a passthrough blob capped by the
|
|
16003
|
+
* target kind's own caps/degrade engine).
|
|
16004
|
+
*
|
|
16005
|
+
* P1 scope: admin-authored rules only (`createdBy` stamped from the
|
|
16006
|
+
* server-injected caller identity — the first `caller: 'required'`
|
|
16007
|
+
* adopter). The P1 condition subset is: devices, classes(+exclude),
|
|
16008
|
+
* minConfidence, admin zones (any/all + exclude), weekly schedule
|
|
16009
|
+
* windows, and the optional label/identity/plate matchers. User rules,
|
|
16010
|
+
* private zones, per-recipient fan-out and the wider condition table are
|
|
16011
|
+
* P2+ (see spec §7).
|
|
16012
|
+
*
|
|
16013
|
+
* All schemas here are the single source of truth — `NcRule` etc. are
|
|
16014
|
+
* `z.infer` exports; no duplicate interfaces (the advanced-notifier
|
|
16015
|
+
* schema/interface drift is explicitly not repeated).
|
|
16016
|
+
*/
|
|
16017
|
+
/** D-3: the urgency of a rule — which persistence moment evaluates it. */
|
|
16018
|
+
var NcDeliverySchema = _enum(["immediate", "track-end"]);
|
|
16019
|
+
/** Weekly schedule — OR of windows; absence on the rule = always active. */
|
|
16020
|
+
var NcScheduleSchema = object({
|
|
16021
|
+
windows: array(object({
|
|
16022
|
+
/** Days of week the window STARTS on (0 = Sunday … 6 = Saturday). */
|
|
16023
|
+
days: array(number().int().min(0).max(6)).min(1),
|
|
16024
|
+
startMinute: number().int().min(0).max(1439),
|
|
16025
|
+
endMinute: number().int().min(0).max(1439)
|
|
16026
|
+
})).min(1),
|
|
16027
|
+
/** IANA timezone; default = hub host timezone. */
|
|
16028
|
+
timezone: string().optional(),
|
|
16029
|
+
/** Active OUTSIDE the windows (e.g. "only outside business hours"). */
|
|
16030
|
+
invert: boolean().optional()
|
|
16031
|
+
});
|
|
16032
|
+
/** Fuzzy plate matcher — OCR noise makes exact match useless (spec row 12/13). */
|
|
16033
|
+
var NcPlateMatcherSchema = object({
|
|
16034
|
+
values: array(string().min(1)).min(1),
|
|
16035
|
+
/** Max Levenshtein distance after normalization (uppercase alphanumeric). */
|
|
16036
|
+
maxDistance: number().int().min(0).max(3).default(1)
|
|
16037
|
+
});
|
|
16038
|
+
/** Admin-zone membership condition (zone IDs as stamped by the ZoneEngine). */
|
|
16039
|
+
var NcZoneConditionSchema = object({
|
|
16040
|
+
ids: array(string().min(1)).min(1),
|
|
16041
|
+
/** Quantifier over `ids` — at least one / every one visited. */
|
|
16042
|
+
match: _enum(["any", "all"]).default("any")
|
|
16043
|
+
});
|
|
16044
|
+
/**
|
|
16045
|
+
* The P1 condition set — a flat AND of groups; absent group = pass;
|
|
16046
|
+
* membership lists are OR within the list (spec §2.3).
|
|
16047
|
+
*/
|
|
16048
|
+
var NcConditionsSchema = object({
|
|
16049
|
+
/** Device scope — absent = all devices. */
|
|
16050
|
+
devices: array(number()).optional(),
|
|
16051
|
+
/** Detector class names (any overlap with the record's class set). */
|
|
16052
|
+
classes: array(string().min(1)).optional(),
|
|
16053
|
+
/** Veto classes — any overlap fails the rule. */
|
|
16054
|
+
classesExclude: array(string().min(1)).optional(),
|
|
16055
|
+
/** Minimum detection confidence 0–1 (fails when the record has none). */
|
|
16056
|
+
minConfidence: number().min(0).max(1).optional(),
|
|
16057
|
+
/** Admin zone membership over event `zones` / track `zonesVisited`. */
|
|
16058
|
+
zones: NcZoneConditionSchema.optional(),
|
|
16059
|
+
/** Veto zones — any hit fails the rule. */
|
|
16060
|
+
zonesExclude: array(string().min(1)).optional(),
|
|
16061
|
+
/**
|
|
16062
|
+
* Exact (case-insensitive) match on the record's collapsed `label`
|
|
16063
|
+
* (identity name / plate text / subclass).
|
|
16064
|
+
*/
|
|
16065
|
+
labelEquals: array(string().min(1)).optional(),
|
|
16066
|
+
/**
|
|
16067
|
+
* Identity matcher. P1 boundary: matched against the record's collapsed
|
|
16068
|
+
* `label` (the identity display name propagated by the face pipeline) —
|
|
16069
|
+
* identity-ID matching rides in P2 when identity ids reach the record.
|
|
16070
|
+
*/
|
|
16071
|
+
identities: array(string().min(1)).optional(),
|
|
16072
|
+
/** Fuzzy plate matcher against the record's `label` (plate text). */
|
|
16073
|
+
plates: NcPlateMatcherSchema.optional()
|
|
16074
|
+
});
|
|
16075
|
+
/** One delivery target: a `notification-output` Target ref + passthrough params. */
|
|
16076
|
+
var NcRuleTargetSchema = object({
|
|
16077
|
+
/** `notification-output` Target id. */
|
|
16078
|
+
targetId: string().min(1),
|
|
16079
|
+
/**
|
|
16080
|
+
* Per-backend passthrough. Recognized keys are mapped onto the canonical
|
|
16081
|
+
* Notification (`priority`, `level`, `sound`, `clickUrl`, `ttl`); the
|
|
16082
|
+
* degrade engine drops what the backend can't render.
|
|
16083
|
+
*/
|
|
16084
|
+
params: record(string(), unknown()).optional()
|
|
16085
|
+
});
|
|
16086
|
+
/**
|
|
16087
|
+
* Media attachment policy (P1 still-image subset). `best` = the best
|
|
16088
|
+
* AVAILABLE media at dispatch time (D-3); `best-matching` (track-end
|
|
16089
|
+
* condition-best) is deferred — operator open point.
|
|
16090
|
+
*/
|
|
16091
|
+
var NcMediaPolicySchema = object({ attach: _enum([
|
|
16092
|
+
"best",
|
|
16093
|
+
"keyFrame",
|
|
16094
|
+
"none"
|
|
16095
|
+
]).default("best") });
|
|
16096
|
+
/** Throttle — cooldown survives restarts (rebuilt from the outbox on boot). */
|
|
16097
|
+
var NcThrottleSchema = object({
|
|
16098
|
+
cooldownSec: number().int().min(0).max(86400).default(60),
|
|
16099
|
+
/** `rule` = one shared cooldown; `rule-device` = per-camera cooldown. */
|
|
16100
|
+
scope: _enum(["rule", "rule-device"]).default("rule-device")
|
|
16101
|
+
});
|
|
16102
|
+
/** Client-supplied rule fields (server stamps id/createdBy/createdAt/updatedAt). */
|
|
16103
|
+
var NcRuleInputSchema = object({
|
|
16104
|
+
name: string().min(1).max(200),
|
|
16105
|
+
enabled: boolean().default(true),
|
|
16106
|
+
delivery: NcDeliverySchema,
|
|
16107
|
+
conditions: NcConditionsSchema.default({}),
|
|
16108
|
+
schedule: NcScheduleSchema.optional(),
|
|
16109
|
+
targets: array(NcRuleTargetSchema).min(1),
|
|
16110
|
+
media: NcMediaPolicySchema.default({ attach: "best" }),
|
|
16111
|
+
throttle: NcThrottleSchema.default({
|
|
16112
|
+
cooldownSec: 60,
|
|
16113
|
+
scope: "rule-device"
|
|
16114
|
+
}),
|
|
16115
|
+
/** `{{var}}` templating over camera/class/label/zones/confidence/time. */
|
|
16116
|
+
template: object({
|
|
16117
|
+
title: string().max(500).optional(),
|
|
16118
|
+
body: string().max(2e3).optional()
|
|
16119
|
+
}).optional(),
|
|
16120
|
+
/** Canonical notification priority ordinal (1..5); per-target overridable. */
|
|
16121
|
+
priority: number().int().min(1).max(5).default(3)
|
|
16122
|
+
});
|
|
16123
|
+
/** Partial patch for `updateRule` — any subset of the input fields. */
|
|
16124
|
+
var NcRulePatchSchema = NcRuleInputSchema.partial();
|
|
16125
|
+
/** A persisted rule. */
|
|
16126
|
+
var NcRuleSchema = NcRuleInputSchema.extend({
|
|
16127
|
+
id: string(),
|
|
16128
|
+
/** userId of the admin who created the rule (server-stamped caller). */
|
|
16129
|
+
createdBy: string(),
|
|
16130
|
+
createdAt: number(),
|
|
16131
|
+
updatedAt: number()
|
|
16132
|
+
});
|
|
16133
|
+
var NcTestResultSchema = object({
|
|
16134
|
+
recordId: string(),
|
|
16135
|
+
recordKind: _enum(["object-event", "track"]),
|
|
16136
|
+
deviceId: number(),
|
|
16137
|
+
timestamp: number(),
|
|
16138
|
+
wouldFire: boolean(),
|
|
16139
|
+
/** Condition id that failed (first failing group), when `wouldFire` is false. */
|
|
16140
|
+
failedCondition: string().optional(),
|
|
16141
|
+
className: string().optional(),
|
|
16142
|
+
label: string().optional()
|
|
16143
|
+
});
|
|
16144
|
+
var NcConditionDescriptorSchema = object({
|
|
16145
|
+
/** Field id inside `NcConditions` (or `'schedule'` for the rule-level group). */
|
|
16146
|
+
id: string(),
|
|
16147
|
+
group: _enum([
|
|
16148
|
+
"scope",
|
|
16149
|
+
"class",
|
|
16150
|
+
"zones",
|
|
16151
|
+
"quality",
|
|
16152
|
+
"label",
|
|
16153
|
+
"schedule"
|
|
16154
|
+
]),
|
|
16155
|
+
label: string(),
|
|
16156
|
+
/** Editor widget the UI renders — never hardcode per-condition forms. */
|
|
16157
|
+
valueType: _enum([
|
|
16158
|
+
"deviceIdList",
|
|
16159
|
+
"stringList",
|
|
16160
|
+
"number01",
|
|
16161
|
+
"zoneSelection",
|
|
16162
|
+
"zoneIdList",
|
|
16163
|
+
"schedule",
|
|
16164
|
+
"plateMatcher"
|
|
16165
|
+
]),
|
|
16166
|
+
operator: _enum([
|
|
16167
|
+
"in",
|
|
16168
|
+
"notIn",
|
|
16169
|
+
"anyOf",
|
|
16170
|
+
"allOf",
|
|
16171
|
+
"gte",
|
|
16172
|
+
"fuzzyIn",
|
|
16173
|
+
"withinSchedule"
|
|
16174
|
+
]),
|
|
16175
|
+
/** Which delivery kinds the condition applies to. */
|
|
16176
|
+
appliesTo: array(NcDeliverySchema),
|
|
16177
|
+
phase: string(),
|
|
16178
|
+
description: string().optional()
|
|
16179
|
+
});
|
|
16180
|
+
/**
|
|
16181
|
+
* The P1 condition surface as data — served by `getConditionCatalog` so
|
|
16182
|
+
* rule editors render from the catalog, not hardcoded forms (spec §4.2).
|
|
16183
|
+
*/
|
|
16184
|
+
var NC_CONDITION_CATALOG = [
|
|
16185
|
+
{
|
|
16186
|
+
id: "devices",
|
|
16187
|
+
group: "scope",
|
|
16188
|
+
label: "Cameras",
|
|
16189
|
+
valueType: "deviceIdList",
|
|
16190
|
+
operator: "in",
|
|
16191
|
+
appliesTo: ["immediate", "track-end"],
|
|
16192
|
+
phase: "P1",
|
|
16193
|
+
description: "Restrict the rule to these devices; absent = all devices."
|
|
16194
|
+
},
|
|
16195
|
+
{
|
|
16196
|
+
id: "classes",
|
|
16197
|
+
group: "class",
|
|
16198
|
+
label: "Object classes",
|
|
16199
|
+
valueType: "stringList",
|
|
16200
|
+
operator: "in",
|
|
16201
|
+
appliesTo: ["immediate", "track-end"],
|
|
16202
|
+
phase: "P1",
|
|
16203
|
+
description: "Any overlap with the detection class set passes."
|
|
16204
|
+
},
|
|
16205
|
+
{
|
|
16206
|
+
id: "classesExclude",
|
|
16207
|
+
group: "class",
|
|
16208
|
+
label: "Excluded classes",
|
|
16209
|
+
valueType: "stringList",
|
|
16210
|
+
operator: "notIn",
|
|
16211
|
+
appliesTo: ["immediate", "track-end"],
|
|
16212
|
+
phase: "P1"
|
|
16213
|
+
},
|
|
16214
|
+
{
|
|
16215
|
+
id: "minConfidence",
|
|
16216
|
+
group: "quality",
|
|
16217
|
+
label: "Minimum confidence",
|
|
16218
|
+
valueType: "number01",
|
|
16219
|
+
operator: "gte",
|
|
16220
|
+
appliesTo: ["immediate", "track-end"],
|
|
16221
|
+
phase: "P1"
|
|
16222
|
+
},
|
|
16223
|
+
{
|
|
16224
|
+
id: "zones",
|
|
16225
|
+
group: "zones",
|
|
16226
|
+
label: "Zones",
|
|
16227
|
+
valueType: "zoneSelection",
|
|
16228
|
+
operator: "anyOf",
|
|
16229
|
+
appliesTo: ["immediate", "track-end"],
|
|
16230
|
+
phase: "P1",
|
|
16231
|
+
description: "Admin zone ids; quantifier any/all over the visited set."
|
|
16232
|
+
},
|
|
16233
|
+
{
|
|
16234
|
+
id: "zonesExclude",
|
|
16235
|
+
group: "zones",
|
|
16236
|
+
label: "Excluded zones",
|
|
16237
|
+
valueType: "zoneIdList",
|
|
16238
|
+
operator: "notIn",
|
|
16239
|
+
appliesTo: ["immediate", "track-end"],
|
|
16240
|
+
phase: "P1"
|
|
16241
|
+
},
|
|
16242
|
+
{
|
|
16243
|
+
id: "labelEquals",
|
|
16244
|
+
group: "label",
|
|
16245
|
+
label: "Label equals",
|
|
16246
|
+
valueType: "stringList",
|
|
16247
|
+
operator: "in",
|
|
16248
|
+
appliesTo: ["immediate", "track-end"],
|
|
16249
|
+
phase: "P1",
|
|
16250
|
+
description: "Exact match on the collapsed label (identity / plate / subclass)."
|
|
16251
|
+
},
|
|
16252
|
+
{
|
|
16253
|
+
id: "identities",
|
|
16254
|
+
group: "label",
|
|
16255
|
+
label: "Identities",
|
|
16256
|
+
valueType: "stringList",
|
|
16257
|
+
operator: "in",
|
|
16258
|
+
appliesTo: ["immediate", "track-end"],
|
|
16259
|
+
phase: "P1",
|
|
16260
|
+
description: "P1: matched against the identity display name on the record label."
|
|
16261
|
+
},
|
|
16262
|
+
{
|
|
16263
|
+
id: "plates",
|
|
16264
|
+
group: "label",
|
|
16265
|
+
label: "License plates",
|
|
16266
|
+
valueType: "plateMatcher",
|
|
16267
|
+
operator: "fuzzyIn",
|
|
16268
|
+
appliesTo: ["immediate", "track-end"],
|
|
16269
|
+
phase: "P1",
|
|
16270
|
+
description: "Levenshtein-tolerant match against the plate text."
|
|
16271
|
+
},
|
|
16272
|
+
{
|
|
16273
|
+
id: "schedule",
|
|
16274
|
+
group: "schedule",
|
|
16275
|
+
label: "Schedule",
|
|
16276
|
+
valueType: "schedule",
|
|
16277
|
+
operator: "withinSchedule",
|
|
16278
|
+
appliesTo: ["immediate", "track-end"],
|
|
16279
|
+
phase: "P1",
|
|
16280
|
+
description: "Weekly activation windows (invertible); absent = always active."
|
|
16281
|
+
}
|
|
16282
|
+
];
|
|
16283
|
+
var notificationRulesCapability = {
|
|
16284
|
+
name: "notification-rules",
|
|
16285
|
+
scope: "system",
|
|
16286
|
+
mode: "singleton",
|
|
16287
|
+
methods: {
|
|
16288
|
+
listRules: method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }),
|
|
16289
|
+
getRule: method(object({ ruleId: string() }), object({ rule: NcRuleSchema.nullable() }), { auth: "admin" }),
|
|
16290
|
+
createRule: method(object({ rule: NcRuleInputSchema }), object({ rule: NcRuleSchema }), {
|
|
16291
|
+
kind: "mutation",
|
|
16292
|
+
auth: "admin",
|
|
16293
|
+
caller: "required"
|
|
16294
|
+
}),
|
|
16295
|
+
updateRule: method(object({
|
|
16296
|
+
ruleId: string(),
|
|
16297
|
+
patch: NcRulePatchSchema
|
|
16298
|
+
}), object({ rule: NcRuleSchema }), {
|
|
16299
|
+
kind: "mutation",
|
|
16300
|
+
auth: "admin",
|
|
16301
|
+
caller: "required"
|
|
16302
|
+
}),
|
|
16303
|
+
deleteRule: method(object({ ruleId: string() }), object({ success: literal(true) }), {
|
|
16304
|
+
kind: "mutation",
|
|
16305
|
+
auth: "admin"
|
|
16306
|
+
}),
|
|
16307
|
+
setRuleEnabled: method(object({
|
|
16308
|
+
ruleId: string(),
|
|
16309
|
+
enabled: boolean()
|
|
16310
|
+
}), object({ success: literal(true) }), {
|
|
16311
|
+
kind: "mutation",
|
|
16312
|
+
auth: "admin"
|
|
16313
|
+
}),
|
|
16314
|
+
/**
|
|
16315
|
+
* Dry-run a rule against recently persisted records (object events for
|
|
16316
|
+
* `immediate`, closed tracks for `track-end`). Mutation kind only to
|
|
16317
|
+
* carry the full rule object safely; no side effects.
|
|
16318
|
+
*/
|
|
16319
|
+
testRule: method(object({
|
|
16320
|
+
rule: NcRuleInputSchema,
|
|
16321
|
+
lookbackMinutes: number().int().min(1).max(1440).default(60)
|
|
16322
|
+
}), object({ results: array(NcTestResultSchema) }), {
|
|
16323
|
+
kind: "mutation",
|
|
16324
|
+
auth: "admin"
|
|
16325
|
+
}),
|
|
16326
|
+
getConditionCatalog: method(object({}), object({ catalog: array(NcConditionDescriptorSchema) }))
|
|
16327
|
+
}
|
|
16328
|
+
};
|
|
16329
|
+
/**
|
|
15953
16330
|
* Shared LLM generate contracts — imported by BOTH `llm.cap.ts` (consumer
|
|
15954
16331
|
* surface) and `llm-runtime.cap.ts` (node-side managed executor) so the two
|
|
15955
16332
|
* caps stay wire-compatible without a circular cap→cap import.
|
|
@@ -23591,6 +23968,54 @@ Object.freeze({
|
|
|
23591
23968
|
addonId: null,
|
|
23592
23969
|
access: "create"
|
|
23593
23970
|
},
|
|
23971
|
+
"notificationRules.createRule": {
|
|
23972
|
+
capName: "notification-rules",
|
|
23973
|
+
capScope: "system",
|
|
23974
|
+
addonId: null,
|
|
23975
|
+
access: "create"
|
|
23976
|
+
},
|
|
23977
|
+
"notificationRules.deleteRule": {
|
|
23978
|
+
capName: "notification-rules",
|
|
23979
|
+
capScope: "system",
|
|
23980
|
+
addonId: null,
|
|
23981
|
+
access: "delete"
|
|
23982
|
+
},
|
|
23983
|
+
"notificationRules.getConditionCatalog": {
|
|
23984
|
+
capName: "notification-rules",
|
|
23985
|
+
capScope: "system",
|
|
23986
|
+
addonId: null,
|
|
23987
|
+
access: "view"
|
|
23988
|
+
},
|
|
23989
|
+
"notificationRules.getRule": {
|
|
23990
|
+
capName: "notification-rules",
|
|
23991
|
+
capScope: "system",
|
|
23992
|
+
addonId: null,
|
|
23993
|
+
access: "view"
|
|
23994
|
+
},
|
|
23995
|
+
"notificationRules.listRules": {
|
|
23996
|
+
capName: "notification-rules",
|
|
23997
|
+
capScope: "system",
|
|
23998
|
+
addonId: null,
|
|
23999
|
+
access: "view"
|
|
24000
|
+
},
|
|
24001
|
+
"notificationRules.setRuleEnabled": {
|
|
24002
|
+
capName: "notification-rules",
|
|
24003
|
+
capScope: "system",
|
|
24004
|
+
addonId: null,
|
|
24005
|
+
access: "create"
|
|
24006
|
+
},
|
|
24007
|
+
"notificationRules.testRule": {
|
|
24008
|
+
capName: "notification-rules",
|
|
24009
|
+
capScope: "system",
|
|
24010
|
+
addonId: null,
|
|
24011
|
+
access: "create"
|
|
24012
|
+
},
|
|
24013
|
+
"notificationRules.updateRule": {
|
|
24014
|
+
capName: "notification-rules",
|
|
24015
|
+
capScope: "system",
|
|
24016
|
+
addonId: null,
|
|
24017
|
+
access: "create"
|
|
24018
|
+
},
|
|
23594
24019
|
"notifier.cancel": {
|
|
23595
24020
|
capName: "notifier",
|
|
23596
24021
|
capScope: "device",
|
|
@@ -25804,4 +26229,4 @@ Object.freeze({
|
|
|
25804
26229
|
"smtp-provider": "email"
|
|
25805
26230
|
});
|
|
25806
26231
|
//#endregion
|
|
25807
|
-
export {
|
|
26232
|
+
export { object as A, BaseAddon as C, array as D, hydrateSchema as E, EventCategory as M, boolean as O, errMsg as S, createEvent as T, pipelineAnalyticsCapability as _, NC_CONDITION_CATALOG as a, videoclipsCapability as b, addonWidgetsSourceCapability as c, cosineSimilarity as d, embeddingEncoderCapability as f, notificationRulesCapability as g, nodePin as h, MACRO_LABELS as i, string as j, number as k, audioMetricsCapability as l, hfModelUrl as m, EVENT_KIND_BY_CAP as n, NcRuleSchema as o, faceGalleryCapability as p, EVENT_PAD_MS as r, OpsLogEntrySchema as s, DEFAULT_EVENT_COLOR as t, buildEventKindDescriptor as u, plateGalleryCapability as v, DeviceType as w, zoneAnalyticsCapability as x, subKindsOf as y };
|
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
5
|
+
const require_dist = require("../dist-BW-IoQDL.js");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
let node_fs$1 = require_dist.__toESM(node_fs, 1);
|
|
8
8
|
node_fs = require_dist.__toESM(node_fs);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { C as BaseAddon, f as embeddingEncoderCapability, m as hfModelUrl } from "../dist-D5fcvkof.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import * as path$1 from "node:path";
|