@camstack/addon-pipeline 1.2.38 → 1.2.39
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/audio-analyzer/index.js +1 -1
- package/dist/audio-analyzer/index.mjs +1 -1
- package/dist/detection-pipeline/index.js +145 -175
- package/dist/detection-pipeline/index.mjs +120 -150
- package/dist/{dist-BvFLZyhW.js → dist-BtAvtroH.js} +260 -108
- package/dist/{dist-Du7_SNiR.mjs → dist-COgGdFMv.mjs} +260 -108
- package/dist/{step-definitions-C8tk9fPJ.mjs → event-loop-stall-monitor-naFYvcOO.mjs} +139 -2
- package/dist/{step-definitions-i8O-hxyI.js → event-loop-stall-monitor-shfwi1_b.js} +150 -1
- package/dist/lazy-sharp-B-mb8uWx.mjs +20 -0
- package/dist/lazy-sharp-CcYuXtsa.js +25 -0
- package/dist/motion-wasm/index.js +3 -3
- package/dist/motion-wasm/index.mjs +3 -3
- package/dist/pipeline-runner/index.js +3316 -2428
- package/dist/pipeline-runner/index.mjs +3315 -2428
- package/dist/recorder/index.js +102 -664
- package/dist/recorder/index.mjs +102 -658
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-ByuMjhL3.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CjrKd4xX.mjs} +2 -2
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B59GNAJq.mjs +26 -0
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-83qNzMSL.mjs +26 -0
- package/dist/stream-broker/{hostInit-CfC64ye2.mjs → hostInit-BFH17kSk.mjs} +2 -2
- package/dist/stream-broker/index.js +717 -211
- package/dist/stream-broker/index.mjs +717 -211
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-Dx-Vrpyt.js → MaskShapeCanvas-DI4BY7W2-yeSHfpUy.js} +1 -1
- package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-9D-BWwQP.js → MotionZonesSettings-NcxxQN8r-Df4WxM6N.js} +1 -1
- package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-HvAetfA4.js → PrivacyMaskSettings-APgPLF7p-COHSiTGq.js} +1 -1
- package/embed-dist/assets/index-4fJzjj4H.css +2 -0
- package/embed-dist/assets/index-Ct9M2v5n.js +112 -0
- package/embed-dist/index.html +2 -2
- package/package.json +2 -2
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-ByHi7ZAe.mjs +0 -26
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CscpvIRR.mjs +0 -26
- package/embed-dist/assets/index-9Ob2YrIf.js +0 -343
- package/embed-dist/assets/index-CAe6Dg-X.css +0 -2
- package/python/__pycache__/inference_pool.cpython-312.pyc +0 -0
- package/python/__pycache__/inference_pool.cpython-313.pyc +0 -0
- package/python/__pycache__/inference_pool.cpython-314.pyc +0 -0
- package/python/__pycache__/test_inference_pool_backpressure.cpython-314.pyc +0 -0
- package/python/__pycache__/test_inference_pool_coreml_cache.cpython-314.pyc +0 -0
- package/python/__pycache__/test_inference_pool_device_selection.cpython-314.pyc +0 -0
- package/python/__pycache__/test_inference_pool_layout.cpython-314.pyc +0 -0
- package/python/__pycache__/test_inference_pool_preprocess.cpython-314.pyc +0 -0
- package/python/__pycache__/yamnet_audio.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/__init__.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/__init__.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/_safety.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/arcface.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/arcface.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/arcface.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/clip.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/clip.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/clip.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/ctc.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/ctc.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/ctc.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/saliency.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/saliency.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/saliency.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/scrfd.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/scrfd.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/scrfd.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/softmax.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/softmax.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/softmax.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/ssd.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/ssd.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/ssd.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/test_clip.cpython-312-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_clip.cpython-313-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_ctc.cpython-312-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_ctc.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/test_ctc.cpython-313-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_ctc.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/test_saliency.cpython-312-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_saliency.cpython-313-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_softmax.cpython-312-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_yolo_nms.cpython-312-pytest-9.1.1.pyc +0 -0
- package/python/postprocessors/__pycache__/test_yolo_nms.cpython-39.pyc +0 -0
- package/python/postprocessors/__pycache__/yamnet.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/yamnet.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/yamnet.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo.cpython-314.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo.cpython-39.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo_seg.cpython-312.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo_seg.cpython-313.pyc +0 -0
- package/python/postprocessors/__pycache__/yolo_seg.cpython-314.pyc +0 -0
|
@@ -7497,14 +7497,7 @@ var RecordingConfigSchema = object({
|
|
|
7497
7497
|
* windows only — existing sheets are immutable, and each window's index
|
|
7498
7498
|
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7499
7499
|
*/
|
|
7500
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7501
|
-
/**
|
|
7502
|
-
* OPT-IN thumbnail-strip generation for this camera: every keyframe of the
|
|
7503
|
-
* low recording saved as a JPEG (the fast-drag scrub depth), a derived
|
|
7504
|
-
* cache that eviction reclaims with the footage. Absent/false = no strips
|
|
7505
|
-
* are written and scrub reads exact keyframes at every velocity.
|
|
7506
|
-
*/
|
|
7507
|
-
stripsEnabled: boolean().optional()
|
|
7500
|
+
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7508
7501
|
}).strict();
|
|
7509
7502
|
/**
|
|
7510
7503
|
* Derive the {@link RecordingStorageModeSchema} summary from the authoritative
|
|
@@ -7582,7 +7575,7 @@ var OpsLogQueryInputSchema = object({
|
|
|
7582
7575
|
/**
|
|
7583
7576
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
7584
7577
|
*
|
|
7585
|
-
* One shape shared by the recorder's `relocateFootage` (segments
|
|
7578
|
+
* One shape shared by the recorder's `relocateFootage` (segments) and
|
|
7586
7579
|
* pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
|
|
7587
7580
|
* page renders both movers with one component. Jobs are in-RAM (a restart
|
|
7588
7581
|
* forgets them — re-running is safe by construction: copy-if-absent, delete
|
|
@@ -7604,7 +7597,7 @@ var RelocateJobSchema = object({
|
|
|
7604
7597
|
toLocationId: string(),
|
|
7605
7598
|
/** Scoped device, or null = every device. */
|
|
7606
7599
|
deviceId: number().nullable(),
|
|
7607
|
-
/** What the job moves (owner-addon specific: segments
|
|
7600
|
+
/** What the job moves (owner-addon specific: segments or media). */
|
|
7608
7601
|
entities: array(string()),
|
|
7609
7602
|
filesMoved: number().int(),
|
|
7610
7603
|
bytesMoved: number().int(),
|
|
@@ -7618,7 +7611,7 @@ var RelocateFootageInputSchema = object({
|
|
|
7618
7611
|
deviceId: number().optional(),
|
|
7619
7612
|
fromLocationId: string(),
|
|
7620
7613
|
toLocationId: string(),
|
|
7621
|
-
entities: array(_enum(["segments"
|
|
7614
|
+
entities: array(_enum(["segments"])).optional(),
|
|
7622
7615
|
/** Copy throttle in MB/s (default 40) — the drain is a background chore,
|
|
7623
7616
|
* never allowed to starve live writers. */
|
|
7624
7617
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
@@ -16266,6 +16259,167 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
16266
16259
|
auth: "admin"
|
|
16267
16260
|
});
|
|
16268
16261
|
/**
|
|
16262
|
+
* Query filter for settings-store collections.
|
|
16263
|
+
*/
|
|
16264
|
+
var QueryFilterSchema = object({
|
|
16265
|
+
where: record(string(), unknown()).optional(),
|
|
16266
|
+
whereIn: record(string(), array(unknown())).optional(),
|
|
16267
|
+
whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
|
|
16268
|
+
orderBy: object({
|
|
16269
|
+
field: string(),
|
|
16270
|
+
direction: _enum(["asc", "desc"])
|
|
16271
|
+
}).optional(),
|
|
16272
|
+
limit: number().optional(),
|
|
16273
|
+
offset: number().optional()
|
|
16274
|
+
});
|
|
16275
|
+
/** A single stored record: `{ id, data }`. */
|
|
16276
|
+
var SettingsRecordSchema = object({
|
|
16277
|
+
id: string(),
|
|
16278
|
+
data: record(string(), unknown())
|
|
16279
|
+
});
|
|
16280
|
+
/**
|
|
16281
|
+
* Column declaration for a structured (SQL-backed) collection.
|
|
16282
|
+
*
|
|
16283
|
+
* Logical types — the backend translates each to the matching SQLite
|
|
16284
|
+
* storage class and handles per-type marshaling:
|
|
16285
|
+
* - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
|
|
16286
|
+
* - `JSON` — TEXT under the hood; serialised on write, parsed on read
|
|
16287
|
+
* - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
|
|
16288
|
+
*/
|
|
16289
|
+
var CollectionColumnSchema = object({
|
|
16290
|
+
name: string(),
|
|
16291
|
+
type: _enum([
|
|
16292
|
+
"TEXT",
|
|
16293
|
+
"INTEGER",
|
|
16294
|
+
"REAL",
|
|
16295
|
+
"JSON",
|
|
16296
|
+
"BOOLEAN"
|
|
16297
|
+
]),
|
|
16298
|
+
primaryKey: boolean().optional(),
|
|
16299
|
+
notNull: boolean().optional(),
|
|
16300
|
+
unique: boolean().optional()
|
|
16301
|
+
});
|
|
16302
|
+
var CollectionIndexSchema = object({
|
|
16303
|
+
name: string(),
|
|
16304
|
+
columns: array(string()).readonly(),
|
|
16305
|
+
unique: boolean().optional()
|
|
16306
|
+
});
|
|
16307
|
+
method(object({
|
|
16308
|
+
namespace: string().optional(),
|
|
16309
|
+
collection: string(),
|
|
16310
|
+
key: string()
|
|
16311
|
+
}), unknown()), method(object({
|
|
16312
|
+
namespace: string().optional(),
|
|
16313
|
+
collection: string(),
|
|
16314
|
+
key: string(),
|
|
16315
|
+
value: unknown()
|
|
16316
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16317
|
+
namespace: string().optional(),
|
|
16318
|
+
collection: string(),
|
|
16319
|
+
filter: QueryFilterSchema.optional()
|
|
16320
|
+
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
16321
|
+
namespace: string().optional(),
|
|
16322
|
+
collection: string(),
|
|
16323
|
+
record: SettingsRecordSchema
|
|
16324
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16325
|
+
namespace: string().optional(),
|
|
16326
|
+
collection: string(),
|
|
16327
|
+
id: string(),
|
|
16328
|
+
data: record(string(), unknown())
|
|
16329
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16330
|
+
namespace: string().optional(),
|
|
16331
|
+
collection: string(),
|
|
16332
|
+
key: string()
|
|
16333
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16334
|
+
namespace: string().optional(),
|
|
16335
|
+
collection: string(),
|
|
16336
|
+
filter: QueryFilterSchema.optional()
|
|
16337
|
+
}), number()), method(object({
|
|
16338
|
+
namespace: string().optional(),
|
|
16339
|
+
collection: string(),
|
|
16340
|
+
field: string(),
|
|
16341
|
+
bucketSize: number().int().positive(),
|
|
16342
|
+
origin: number().int(),
|
|
16343
|
+
filter: QueryFilterSchema.optional()
|
|
16344
|
+
}), array(object({
|
|
16345
|
+
bucket: number().int(),
|
|
16346
|
+
count: number().int()
|
|
16347
|
+
})).readonly()), method(object({
|
|
16348
|
+
namespace: string().optional(),
|
|
16349
|
+
collection: string()
|
|
16350
|
+
}), boolean()), method(object({
|
|
16351
|
+
namespace: string().optional(),
|
|
16352
|
+
collection: string(),
|
|
16353
|
+
columns: array(CollectionColumnSchema).readonly(),
|
|
16354
|
+
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
16355
|
+
}), _void(), { kind: "mutation" });
|
|
16356
|
+
/**
|
|
16357
|
+
* What one engine says about itself. The orchestrator uses `kind` to pick
|
|
16358
|
+
* a registrant for a collection; `engineId` is what a log line names when
|
|
16359
|
+
* a call is routed or refused.
|
|
16360
|
+
*/
|
|
16361
|
+
var EngineInfoSchema = object({
|
|
16362
|
+
engineId: string(),
|
|
16363
|
+
/**
|
|
16364
|
+
* `relational` — rows, columns, indexes, the surface `settings-store`
|
|
16365
|
+
* has always described. `vector` — an embedding store answering
|
|
16366
|
+
* similarity queries. A registrant declares exactly one; an engine that
|
|
16367
|
+
* does both registers twice, because "both" would make the routing
|
|
16368
|
+
* decision ambiguous at exactly the point it must not be.
|
|
16369
|
+
*/
|
|
16370
|
+
kind: _enum(["relational", "vector"]),
|
|
16371
|
+
displayName: string()
|
|
16372
|
+
});
|
|
16373
|
+
method(_void(), EngineInfoSchema), method(object({
|
|
16374
|
+
namespace: string().optional(),
|
|
16375
|
+
collection: string(),
|
|
16376
|
+
key: string()
|
|
16377
|
+
}), unknown()), method(object({
|
|
16378
|
+
namespace: string().optional(),
|
|
16379
|
+
collection: string(),
|
|
16380
|
+
key: string(),
|
|
16381
|
+
value: unknown()
|
|
16382
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16383
|
+
namespace: string().optional(),
|
|
16384
|
+
collection: string(),
|
|
16385
|
+
filter: QueryFilterSchema.optional()
|
|
16386
|
+
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
16387
|
+
namespace: string().optional(),
|
|
16388
|
+
collection: string(),
|
|
16389
|
+
record: SettingsRecordSchema
|
|
16390
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16391
|
+
namespace: string().optional(),
|
|
16392
|
+
collection: string(),
|
|
16393
|
+
id: string(),
|
|
16394
|
+
data: record(string(), unknown())
|
|
16395
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16396
|
+
namespace: string().optional(),
|
|
16397
|
+
collection: string(),
|
|
16398
|
+
key: string()
|
|
16399
|
+
}), _void(), { kind: "mutation" }), method(object({
|
|
16400
|
+
namespace: string().optional(),
|
|
16401
|
+
collection: string(),
|
|
16402
|
+
filter: QueryFilterSchema.optional()
|
|
16403
|
+
}), number()), method(object({
|
|
16404
|
+
namespace: string().optional(),
|
|
16405
|
+
collection: string(),
|
|
16406
|
+
field: string(),
|
|
16407
|
+
bucketSize: number().int().positive(),
|
|
16408
|
+
origin: number().int(),
|
|
16409
|
+
filter: QueryFilterSchema.optional()
|
|
16410
|
+
}), array(object({
|
|
16411
|
+
bucket: number().int(),
|
|
16412
|
+
count: number().int()
|
|
16413
|
+
})).readonly()), method(object({
|
|
16414
|
+
namespace: string().optional(),
|
|
16415
|
+
collection: string()
|
|
16416
|
+
}), boolean()), method(object({
|
|
16417
|
+
namespace: string().optional(),
|
|
16418
|
+
collection: string(),
|
|
16419
|
+
columns: array(CollectionColumnSchema).readonly(),
|
|
16420
|
+
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
16421
|
+
}), _void(), { kind: "mutation" });
|
|
16422
|
+
/**
|
|
16269
16423
|
* detection-pipeline — device-scoped facade over the system
|
|
16270
16424
|
* `pipeline-executor`.
|
|
16271
16425
|
*
|
|
@@ -19528,6 +19682,28 @@ var ServerUpdateStateSchema = _enum([
|
|
|
19528
19682
|
"pending-restart",
|
|
19529
19683
|
"awaiting-confirmation"
|
|
19530
19684
|
]);
|
|
19685
|
+
var ImageContractSchema = object({
|
|
19686
|
+
state: _enum([
|
|
19687
|
+
"in-sync",
|
|
19688
|
+
"behind-patch",
|
|
19689
|
+
"behind-series",
|
|
19690
|
+
"ahead",
|
|
19691
|
+
"unknown"
|
|
19692
|
+
]),
|
|
19693
|
+
/** The baked seed closure version — the image/app-bundle fingerprint. */
|
|
19694
|
+
seedVersion: string().nullable(),
|
|
19695
|
+
/** Best-known version the deployment contract delivers today. */
|
|
19696
|
+
contractVersion: string().nullable(),
|
|
19697
|
+
/**
|
|
19698
|
+
* Where `contractVersion` came from: a real registry check (`registry`), or
|
|
19699
|
+
* the node's own running version (`running` — a node can never run code
|
|
19700
|
+
* newer than the newest release, so `seed < running` proves image staleness
|
|
19701
|
+
* even before any registry check has run).
|
|
19702
|
+
*/
|
|
19703
|
+
contractSource: _enum(["registry", "running"]).nullable(),
|
|
19704
|
+
/** One operator-grade sentence: this node runs image X; the contract says Y. */
|
|
19705
|
+
message: string()
|
|
19706
|
+
});
|
|
19531
19707
|
var ServerRollbackInfoSchema = object({
|
|
19532
19708
|
/** The version that failed (or was manually rolled back). */
|
|
19533
19709
|
fromVersion: string(),
|
|
@@ -19564,7 +19740,12 @@ var ServerPackageStatusSchema = object({
|
|
|
19564
19740
|
* versions are being IGNORED. Surfaced as a warning in the UI.
|
|
19565
19741
|
*/
|
|
19566
19742
|
stateFileCorrupt: boolean(),
|
|
19567
|
-
lastCheckedAtMs: number().nullable()
|
|
19743
|
+
lastCheckedAtMs: number().nullable(),
|
|
19744
|
+
/**
|
|
19745
|
+
* Seed-vs-contract verdict (see {@link ImageContractSchema}). Optional for
|
|
19746
|
+
* version skew: an older provider's payload simply omits it.
|
|
19747
|
+
*/
|
|
19748
|
+
imageContract: ImageContractSchema.optional()
|
|
19568
19749
|
});
|
|
19569
19750
|
var ServerUpdateCheckResultSchema = object({
|
|
19570
19751
|
packageName: string(),
|
|
@@ -19599,101 +19780,6 @@ version: string().optional() }), ServerUpdateActionResultSchema, {
|
|
|
19599
19780
|
auth: "admin"
|
|
19600
19781
|
});
|
|
19601
19782
|
/**
|
|
19602
|
-
* Query filter for settings-store collections.
|
|
19603
|
-
*/
|
|
19604
|
-
var QueryFilterSchema = object({
|
|
19605
|
-
where: record(string(), unknown()).optional(),
|
|
19606
|
-
whereIn: record(string(), array(unknown())).optional(),
|
|
19607
|
-
whereBetween: record(string(), tuple([unknown(), unknown()])).optional(),
|
|
19608
|
-
orderBy: object({
|
|
19609
|
-
field: string(),
|
|
19610
|
-
direction: _enum(["asc", "desc"])
|
|
19611
|
-
}).optional(),
|
|
19612
|
-
limit: number().optional(),
|
|
19613
|
-
offset: number().optional()
|
|
19614
|
-
});
|
|
19615
|
-
/** A single stored record: `{ id, data }`. */
|
|
19616
|
-
var SettingsRecordSchema = object({
|
|
19617
|
-
id: string(),
|
|
19618
|
-
data: record(string(), unknown())
|
|
19619
|
-
});
|
|
19620
|
-
/**
|
|
19621
|
-
* Column declaration for a structured (SQL-backed) collection.
|
|
19622
|
-
*
|
|
19623
|
-
* Logical types — the backend translates each to the matching SQLite
|
|
19624
|
-
* storage class and handles per-type marshaling:
|
|
19625
|
-
* - `TEXT` / `INTEGER` / `REAL` — native SQLite types, pass-through
|
|
19626
|
-
* - `JSON` — TEXT under the hood; serialised on write, parsed on read
|
|
19627
|
-
* - `BOOLEAN` — INTEGER 0/1 under the hood; coerced both directions
|
|
19628
|
-
*/
|
|
19629
|
-
var CollectionColumnSchema = object({
|
|
19630
|
-
name: string(),
|
|
19631
|
-
type: _enum([
|
|
19632
|
-
"TEXT",
|
|
19633
|
-
"INTEGER",
|
|
19634
|
-
"REAL",
|
|
19635
|
-
"JSON",
|
|
19636
|
-
"BOOLEAN"
|
|
19637
|
-
]),
|
|
19638
|
-
primaryKey: boolean().optional(),
|
|
19639
|
-
notNull: boolean().optional(),
|
|
19640
|
-
unique: boolean().optional()
|
|
19641
|
-
});
|
|
19642
|
-
var CollectionIndexSchema = object({
|
|
19643
|
-
name: string(),
|
|
19644
|
-
columns: array(string()).readonly(),
|
|
19645
|
-
unique: boolean().optional()
|
|
19646
|
-
});
|
|
19647
|
-
method(object({
|
|
19648
|
-
namespace: string().optional(),
|
|
19649
|
-
collection: string(),
|
|
19650
|
-
key: string()
|
|
19651
|
-
}), unknown()), method(object({
|
|
19652
|
-
namespace: string().optional(),
|
|
19653
|
-
collection: string(),
|
|
19654
|
-
key: string(),
|
|
19655
|
-
value: unknown()
|
|
19656
|
-
}), _void(), { kind: "mutation" }), method(object({
|
|
19657
|
-
namespace: string().optional(),
|
|
19658
|
-
collection: string(),
|
|
19659
|
-
filter: QueryFilterSchema.optional()
|
|
19660
|
-
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
19661
|
-
namespace: string().optional(),
|
|
19662
|
-
collection: string(),
|
|
19663
|
-
record: SettingsRecordSchema
|
|
19664
|
-
}), _void(), { kind: "mutation" }), method(object({
|
|
19665
|
-
namespace: string().optional(),
|
|
19666
|
-
collection: string(),
|
|
19667
|
-
id: string(),
|
|
19668
|
-
data: record(string(), unknown())
|
|
19669
|
-
}), _void(), { kind: "mutation" }), method(object({
|
|
19670
|
-
namespace: string().optional(),
|
|
19671
|
-
collection: string(),
|
|
19672
|
-
key: string()
|
|
19673
|
-
}), _void(), { kind: "mutation" }), method(object({
|
|
19674
|
-
namespace: string().optional(),
|
|
19675
|
-
collection: string(),
|
|
19676
|
-
filter: QueryFilterSchema.optional()
|
|
19677
|
-
}), number()), method(object({
|
|
19678
|
-
namespace: string().optional(),
|
|
19679
|
-
collection: string(),
|
|
19680
|
-
field: string(),
|
|
19681
|
-
bucketSize: number().int().positive(),
|
|
19682
|
-
origin: number().int(),
|
|
19683
|
-
filter: QueryFilterSchema.optional()
|
|
19684
|
-
}), array(object({
|
|
19685
|
-
bucket: number().int(),
|
|
19686
|
-
count: number().int()
|
|
19687
|
-
})).readonly()), method(object({
|
|
19688
|
-
namespace: string().optional(),
|
|
19689
|
-
collection: string()
|
|
19690
|
-
}), boolean()), method(object({
|
|
19691
|
-
namespace: string().optional(),
|
|
19692
|
-
collection: string(),
|
|
19693
|
-
columns: array(CollectionColumnSchema).readonly(),
|
|
19694
|
-
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
19695
|
-
}), _void(), { kind: "mutation" });
|
|
19696
|
-
/**
|
|
19697
19783
|
* `smtp-provider` — pluggable email delivery surface.
|
|
19698
19784
|
*
|
|
19699
19785
|
* Collection cap: a deployment may install multiple SMTP relays (e.g.
|
|
@@ -22458,7 +22544,7 @@ var recordingCapability = {
|
|
|
22458
22544
|
auth: "admin"
|
|
22459
22545
|
}),
|
|
22460
22546
|
/**
|
|
22461
|
-
* Move footage (segments
|
|
22547
|
+
* Move footage (recorded segments) from one recordings location to
|
|
22462
22548
|
* another — the drain workflow's mover (entity-routing spec Phase 4).
|
|
22463
22549
|
* Throttled copy → size-verify → delete source → index refresh; resumable
|
|
22464
22550
|
* by construction (copy-if-absent). Single-flight: one job at a time.
|
|
@@ -23783,6 +23869,72 @@ Object.freeze({
|
|
|
23783
23869
|
addonId: null,
|
|
23784
23870
|
access: "view"
|
|
23785
23871
|
},
|
|
23872
|
+
"dataStoreProvider.count": {
|
|
23873
|
+
capName: "data-store-provider",
|
|
23874
|
+
capScope: "system",
|
|
23875
|
+
addonId: null,
|
|
23876
|
+
access: "view"
|
|
23877
|
+
},
|
|
23878
|
+
"dataStoreProvider.declareCollection": {
|
|
23879
|
+
capName: "data-store-provider",
|
|
23880
|
+
capScope: "system",
|
|
23881
|
+
addonId: null,
|
|
23882
|
+
access: "create"
|
|
23883
|
+
},
|
|
23884
|
+
"dataStoreProvider.delete": {
|
|
23885
|
+
capName: "data-store-provider",
|
|
23886
|
+
capScope: "system",
|
|
23887
|
+
addonId: null,
|
|
23888
|
+
access: "delete"
|
|
23889
|
+
},
|
|
23890
|
+
"dataStoreProvider.get": {
|
|
23891
|
+
capName: "data-store-provider",
|
|
23892
|
+
capScope: "system",
|
|
23893
|
+
addonId: null,
|
|
23894
|
+
access: "view"
|
|
23895
|
+
},
|
|
23896
|
+
"dataStoreProvider.getEngineInfo": {
|
|
23897
|
+
capName: "data-store-provider",
|
|
23898
|
+
capScope: "system",
|
|
23899
|
+
addonId: null,
|
|
23900
|
+
access: "view"
|
|
23901
|
+
},
|
|
23902
|
+
"dataStoreProvider.histogram": {
|
|
23903
|
+
capName: "data-store-provider",
|
|
23904
|
+
capScope: "system",
|
|
23905
|
+
addonId: null,
|
|
23906
|
+
access: "view"
|
|
23907
|
+
},
|
|
23908
|
+
"dataStoreProvider.insert": {
|
|
23909
|
+
capName: "data-store-provider",
|
|
23910
|
+
capScope: "system",
|
|
23911
|
+
addonId: null,
|
|
23912
|
+
access: "create"
|
|
23913
|
+
},
|
|
23914
|
+
"dataStoreProvider.isEmpty": {
|
|
23915
|
+
capName: "data-store-provider",
|
|
23916
|
+
capScope: "system",
|
|
23917
|
+
addonId: null,
|
|
23918
|
+
access: "view"
|
|
23919
|
+
},
|
|
23920
|
+
"dataStoreProvider.query": {
|
|
23921
|
+
capName: "data-store-provider",
|
|
23922
|
+
capScope: "system",
|
|
23923
|
+
addonId: null,
|
|
23924
|
+
access: "view"
|
|
23925
|
+
},
|
|
23926
|
+
"dataStoreProvider.set": {
|
|
23927
|
+
capName: "data-store-provider",
|
|
23928
|
+
capScope: "system",
|
|
23929
|
+
addonId: null,
|
|
23930
|
+
access: "create"
|
|
23931
|
+
},
|
|
23932
|
+
"dataStoreProvider.update": {
|
|
23933
|
+
capName: "data-store-provider",
|
|
23934
|
+
capScope: "system",
|
|
23935
|
+
addonId: null,
|
|
23936
|
+
access: "create"
|
|
23937
|
+
},
|
|
23786
23938
|
"dayNight.getOptions": {
|
|
23787
23939
|
capName: "day-night",
|
|
23788
23940
|
capScope: "device",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { D as hfModelUrl, a as COCO_TO_MACRO, i as COCO_80_LABELS, r as AUDIO_MACRO_LABELS } from "./dist-
|
|
1
|
+
import { D as hfModelUrl, a as COCO_TO_MACRO, i as COCO_80_LABELS, r as AUDIO_MACRO_LABELS } from "./dist-COgGdFMv.mjs";
|
|
2
|
+
import { PerformanceObserver } from "node:perf_hooks";
|
|
2
3
|
//#region src/detection-pipeline/registry/model-catalogs.ts
|
|
3
4
|
var HF_REPO = "camstack/camstack-models";
|
|
4
5
|
var HF_SCRYPTED = "scrypted/plugin-models";
|
|
@@ -1807,4 +1808,140 @@ function resolveModelForFormat(stepId, chosenModelId, format) {
|
|
|
1807
1808
|
return getDefaultModelForFormat(stepId, format);
|
|
1808
1809
|
}
|
|
1809
1810
|
//#endregion
|
|
1810
|
-
|
|
1811
|
+
//#region src/detection-pipeline/diagnostics/event-loop-stall-monitor.ts
|
|
1812
|
+
/**
|
|
1813
|
+
* event-loop-stall-monitor — names the thing that freezes the detection process.
|
|
1814
|
+
*
|
|
1815
|
+
* ## What this exists to settle
|
|
1816
|
+
*
|
|
1817
|
+
* On 2026-08-01/02 inference across the whole fleet stalled in bursts: 759
|
|
1818
|
+
* calls in 90 minutes crossed the runner's 20s deadline, p50 41s and max 80s,
|
|
1819
|
+
* and EVERY one of them eventually resolved. Six explanations were killed with
|
|
1820
|
+
* telemetry alone:
|
|
1821
|
+
*
|
|
1822
|
+
* - not a slow GPU or a wedged pool — the work completes, just enormously late;
|
|
1823
|
+
* - not CPU starvation — hosts sat at 8-48% during the freezes;
|
|
1824
|
+
* - not swap — `pswpin/pswpout` are flat zero on every host;
|
|
1825
|
+
* - not a logging artifact — Loki's timestamp trails the in-process one by
|
|
1826
|
+
* 0.1-1.0s at p95, so the gaps are real, not buffered delivery;
|
|
1827
|
+
* - not the v1.2.30 release — the stalls predate it by a day;
|
|
1828
|
+
* - not only the idle-pool recompile — that is real and hub-side, but the
|
|
1829
|
+
* agent stalls with no eviction and no compile at all.
|
|
1830
|
+
*
|
|
1831
|
+
* What IS established: the 10s stats timer — which touches no inference code —
|
|
1832
|
+
* stops firing for 22-88s and resumes at the same instant the abandoned calls
|
|
1833
|
+
* settle. The event loop itself freezes. From outside the process, GC and a
|
|
1834
|
+
* synchronous block are indistinguishable, and guessing between them is how
|
|
1835
|
+
* this investigation would go wrong. So measure it.
|
|
1836
|
+
*
|
|
1837
|
+
* ## How
|
|
1838
|
+
*
|
|
1839
|
+
* A 1s interval whose LATENESS is the freeze: a tick that arrives 40s late means
|
|
1840
|
+
* the loop was blocked ~39s, whatever blocked it. In the same window the GC
|
|
1841
|
+
* observer accumulates pause time. The two numbers together answer the question
|
|
1842
|
+
* outright:
|
|
1843
|
+
*
|
|
1844
|
+
* - `gcMs` ≈ `stallMs` → garbage collection. Look at heap growth.
|
|
1845
|
+
* - `gcMs` ≈ 0 → something SYNCHRONOUS blocked the loop, and GC is innocent.
|
|
1846
|
+
*
|
|
1847
|
+
* Heap and RSS ride along because if it is GC, the next question is always
|
|
1848
|
+
* "growing since when?".
|
|
1849
|
+
*
|
|
1850
|
+
* Deliberately not a histogram (`monitorEventLoopDelay`): that reports a
|
|
1851
|
+
* distribution, and the question here is about ONE outlier and what coincided
|
|
1852
|
+
* with it.
|
|
1853
|
+
*/
|
|
1854
|
+
/** Tick period. Small enough to bound attribution error, large enough to cost
|
|
1855
|
+
* nothing on a process already doing frame work. */
|
|
1856
|
+
var STALL_TICK_MS = 1e3;
|
|
1857
|
+
/**
|
|
1858
|
+
* Report a freeze only past this. The runner's own inference deadline is 20s
|
|
1859
|
+
* and the observed freezes run 22-88s, so this is far below the signal while
|
|
1860
|
+
* staying clear of ordinary scheduling jitter (a busy frame path routinely
|
|
1861
|
+
* overruns a 1s timer by tens of ms).
|
|
1862
|
+
*/
|
|
1863
|
+
var STALL_REPORT_MS = 2e3;
|
|
1864
|
+
/**
|
|
1865
|
+
* Attribute a freeze. Pure, because this is the ONE judgement the whole module
|
|
1866
|
+
* exists to make and it must be testable without freezing a real event loop.
|
|
1867
|
+
*
|
|
1868
|
+
* `gc` when garbage collection accounts for most of the stall; a
|
|
1869
|
+
* `synchronous-block` when it accounts for almost none — that verdict points
|
|
1870
|
+
* away from the heap entirely and at whatever ran without yielding.
|
|
1871
|
+
*/
|
|
1872
|
+
function attributeStall(stallMs, gcMs, gcCount, longestGcMs) {
|
|
1873
|
+
const share = stallMs > 0 ? gcMs / stallMs : 0;
|
|
1874
|
+
return {
|
|
1875
|
+
stallMs,
|
|
1876
|
+
gcMs,
|
|
1877
|
+
gcCount,
|
|
1878
|
+
longestGcMs,
|
|
1879
|
+
cause: share >= .7 ? "gc" : share <= .2 ? "synchronous-block" : "mixed"
|
|
1880
|
+
};
|
|
1881
|
+
}
|
|
1882
|
+
/**
|
|
1883
|
+
* Start watching. Returns a stop function; safe to call twice.
|
|
1884
|
+
*
|
|
1885
|
+
* Never throws into the caller: a diagnostic that can take the detection
|
|
1886
|
+
* process down is worse than no diagnostic. `PerformanceObserver` for `gc` is
|
|
1887
|
+
* unavailable in some embedded runtimes, and that must degrade to
|
|
1888
|
+
* stall-detection-without-attribution rather than a boot failure.
|
|
1889
|
+
*/
|
|
1890
|
+
function startEventLoopStallMonitor(logger, reportThresholdMs = STALL_REPORT_MS) {
|
|
1891
|
+
let gc = {
|
|
1892
|
+
totalMs: 0,
|
|
1893
|
+
count: 0,
|
|
1894
|
+
longestMs: 0
|
|
1895
|
+
};
|
|
1896
|
+
let observer = null;
|
|
1897
|
+
try {
|
|
1898
|
+
observer = new PerformanceObserver((list) => {
|
|
1899
|
+
for (const entry of list.getEntries()) {
|
|
1900
|
+
gc.totalMs += entry.duration;
|
|
1901
|
+
gc.count += 1;
|
|
1902
|
+
if (entry.duration > gc.longestMs) gc.longestMs = entry.duration;
|
|
1903
|
+
}
|
|
1904
|
+
});
|
|
1905
|
+
observer.observe({ entryTypes: ["gc"] });
|
|
1906
|
+
} catch {
|
|
1907
|
+
observer = null;
|
|
1908
|
+
}
|
|
1909
|
+
let expected = Date.now() + STALL_TICK_MS;
|
|
1910
|
+
const timer = setInterval(() => {
|
|
1911
|
+
const now = Date.now();
|
|
1912
|
+
const lateBy = now - expected;
|
|
1913
|
+
const window = gc;
|
|
1914
|
+
gc = {
|
|
1915
|
+
totalMs: 0,
|
|
1916
|
+
count: 0,
|
|
1917
|
+
longestMs: 0
|
|
1918
|
+
};
|
|
1919
|
+
expected = now + STALL_TICK_MS;
|
|
1920
|
+
if (lateBy < reportThresholdMs) return;
|
|
1921
|
+
const verdict = attributeStall(lateBy, Math.round(window.totalMs), window.count, Math.round(window.longestMs));
|
|
1922
|
+
const mem = process.memoryUsage();
|
|
1923
|
+
logger.warn("event loop stalled", { meta: {
|
|
1924
|
+
stallMs: verdict.stallMs,
|
|
1925
|
+
cause: verdict.cause,
|
|
1926
|
+
gcMs: verdict.gcMs,
|
|
1927
|
+
gcCount: verdict.gcCount,
|
|
1928
|
+
longestGcMs: verdict.longestGcMs,
|
|
1929
|
+
gcObserved: observer !== null,
|
|
1930
|
+
heapUsedMb: Math.round(mem.heapUsed / 1e6),
|
|
1931
|
+
heapTotalMb: Math.round(mem.heapTotal / 1e6),
|
|
1932
|
+
rssMb: Math.round(mem.rss / 1e6),
|
|
1933
|
+
externalMb: Math.round(mem.external / 1e6),
|
|
1934
|
+
arrayBuffersMb: Math.round(mem.arrayBuffers / 1e6)
|
|
1935
|
+
} });
|
|
1936
|
+
}, STALL_TICK_MS);
|
|
1937
|
+
timer.unref?.();
|
|
1938
|
+
let stopped = false;
|
|
1939
|
+
return () => {
|
|
1940
|
+
if (stopped) return;
|
|
1941
|
+
stopped = true;
|
|
1942
|
+
clearInterval(timer);
|
|
1943
|
+
observer?.disconnect();
|
|
1944
|
+
};
|
|
1945
|
+
}
|
|
1946
|
+
//#endregion
|
|
1947
|
+
export { getDefaultModelForFormat as a, getStepDefinition as c, ALL_STEPS as i, resolveModelForFormat as l, startEventLoopStallMonitor as n, getDefaultModelForFormatFromDef as o, ALL_PIPELINE_STEPS as r, getStep as s, attributeStall as t };
|