@camstack/addon-pipeline 1.2.154 → 1.2.156
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 +2 -2
- package/dist/audio-analyzer/index.mjs +2 -2
- package/dist/detection-pipeline/index.js +5 -5
- package/dist/detection-pipeline/index.mjs +4 -4
- package/dist/{dist-CNyaLgDE.js → dist-C499qEUf.js} +296 -4
- package/dist/{dist-B3LRtscY.mjs → dist-C9ohtgTQ.mjs} +296 -4
- package/dist/{lazy-sharp-BtcZ-K2I.js → lazy-sharp-D5uApbbe.js} +1 -1
- package/dist/{local-frame-registry-C5pZ5QSM.mjs → local-frame-registry-DAVug-jA.mjs} +1 -1
- package/dist/{local-frame-registry-TkoMo5_E.js → local-frame-registry-VkzIezFI.js} +1 -1
- package/dist/motion-wasm/index.js +2 -2
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/{node-CtIkY7To.mjs → node-CwIlVFyz.mjs} +1 -1
- package/dist/{node-Ctiow9ZV.js → node-DEq8mutP.js} +1 -1
- package/dist/pipeline-runner/index.js +5 -5
- package/dist/pipeline-runner/index.mjs +4 -4
- package/dist/{process-memory-C87TCFw5.mjs → process-memory-DWw7FrV5.mjs} +1 -1
- package/dist/{process-memory-W1prDrmt.js → process-memory-DzycAIEm.js} +1 -1
- package/dist/recorder/index.js +668 -100
- package/dist/recorder/index.mjs +668 -100
- package/dist/{segment-demux-js-BXma5CQd.mjs → segment-demux-js-D2InpBpa.mjs} +1 -1
- package/dist/{segment-demux-js-CnRETfAK.js → segment-demux-js-Df1rAqNh.js} +1 -1
- package/dist/session-decode/decode-worker-child.js +2 -2
- package/dist/session-decode/decode-worker-child.mjs +1 -1
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-oS7jpj-4.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BJlcLzCs.mjs} +3 -3
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-lMPlG5w5.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-yWrVN7u8.mjs +26 -0
- package/dist/stream-broker/demux-worker-child.js +1 -1
- package/dist/stream-broker/demux-worker-child.mjs +1 -1
- package/dist/stream-broker/{hostInit-BMp9L2lF.mjs → hostInit-QpJx-TgK.mjs} +3 -3
- package/dist/stream-broker/index.js +3 -3
- package/dist/stream-broker/index.mjs +3 -3
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/dist/{worker-protocol-DlDGOO8p.mjs → worker-protocol-CFHcqXoS.mjs} +1 -1
- package/dist/{worker-protocol-DOFTntiF.js → worker-protocol-ge8Ce0Bo.js} +1 -1
- package/package.json +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CVQG3RZ2.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-Vtqzcp6N.mjs +0 -26
|
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
6
|
-
const require_process_memory = require("../process-memory-
|
|
5
|
+
const require_dist = require("../dist-C499qEUf.js");
|
|
6
|
+
const require_process_memory = require("../process-memory-DzycAIEm.js");
|
|
7
7
|
let node_fs = require("node:fs");
|
|
8
8
|
node_fs = require_dist.__toESM(node_fs);
|
|
9
9
|
let node_path = require("node:path");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __require } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { A as audioAnalysisCapability, It as hydrateSchema, S as PoolMemoryWatchdog, _t as resolvePoolMemoryPolicy, j as audioAnalyzerCapability, jt as BaseAddon, n as AUDIO_BACKEND_CHOICES, nt as mapAudioLabelToMacro, s as DEFAULT_AUDIO_ANALYZER_CONFIG, v as HF_BASE_URL, wt as errMsg } from "../dist-
|
|
3
|
-
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-
|
|
2
|
+
import { A as audioAnalysisCapability, It as hydrateSchema, S as PoolMemoryWatchdog, _t as resolvePoolMemoryPolicy, j as audioAnalyzerCapability, jt as BaseAddon, n as AUDIO_BACKEND_CHOICES, nt as mapAudioLabelToMacro, s as DEFAULT_AUDIO_ANALYZER_CONFIG, v as HF_BASE_URL, wt as errMsg } from "../dist-C9ohtgTQ.mjs";
|
|
3
|
+
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-DWw7FrV5.mjs";
|
|
4
4
|
import * as fs from "node:fs";
|
|
5
5
|
import * as path$1 from "node:path";
|
|
6
6
|
import { downloadFile } from "@camstack/system/addon-utils";
|
|
@@ -2,12 +2,12 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
6
|
-
const require_node = require("../node-
|
|
7
|
-
const require_local_frame_registry = require("../local-frame-registry-
|
|
8
|
-
const require_lazy_sharp = require("../lazy-sharp-
|
|
5
|
+
const require_dist = require("../dist-C499qEUf.js");
|
|
6
|
+
const require_node = require("../node-DEq8mutP.js");
|
|
7
|
+
const require_local_frame_registry = require("../local-frame-registry-VkzIezFI.js");
|
|
8
|
+
const require_lazy_sharp = require("../lazy-sharp-D5uApbbe.js");
|
|
9
9
|
const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-DaUBcb13.js");
|
|
10
|
-
const require_process_memory = require("../process-memory-
|
|
10
|
+
const require_process_memory = require("../process-memory-DzycAIEm.js");
|
|
11
11
|
let node_fs = require("node:fs");
|
|
12
12
|
node_fs = require_dist.__toESM(node_fs);
|
|
13
13
|
let node_path = require("node:path");
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { n as __require } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { Bt as nodePin, Ft as createEvent, It as hydrateSchema, Kt as array, O as YAMNET_TO_MACRO, Q as inferModelProvider, Qt as object, S as PoolMemoryWatchdog, St as supportedRuntimes$1, Vt as parseJsonUnknown, W as detectionPipelineCapability, Wt as sleep, Y as evaluateZoneRules, _t as resolvePoolMemoryPolicy, at as overlayClusterStepSettings, c as DEFAULT_CLUSTER_STEP_MODELS, ct as pickClusterStepSettings, dt as pipelineExecutorCapability, en as string, et as loadContributionCapability, ht as resolveClusterStepModelId, jt as BaseAddon, l as DEFAULT_CLUSTER_STEP_SETTINGS, m as DEVICE_BACKEND_TO_FORMAT, nn as EventCategory, q as enumerateInferenceDevices, st as pickClusterStepModels, t as APPLE_SA_TO_MACRO, tn as union, wt as errMsg, yt as runtimeDevices$1, z as defaultDeviceFor$1 } from "../dist-
|
|
3
|
-
import { a as readProcessCost } from "../node-
|
|
4
|
-
import { a as getDefaultModelForFormat, c as getStepDefinition, i as ALL_STEPS, l as resolveModelForFormat, o as getDefaultModelForFormatFromDef, r as ALL_PIPELINE_STEPS, s as getStep, t as localFrameRegistry, u as landmarkPrecisionVerdict } from "../local-frame-registry-
|
|
2
|
+
import { Bt as nodePin, Ft as createEvent, It as hydrateSchema, Kt as array, O as YAMNET_TO_MACRO, Q as inferModelProvider, Qt as object, S as PoolMemoryWatchdog, St as supportedRuntimes$1, Vt as parseJsonUnknown, W as detectionPipelineCapability, Wt as sleep, Y as evaluateZoneRules, _t as resolvePoolMemoryPolicy, at as overlayClusterStepSettings, c as DEFAULT_CLUSTER_STEP_MODELS, ct as pickClusterStepSettings, dt as pipelineExecutorCapability, en as string, et as loadContributionCapability, ht as resolveClusterStepModelId, jt as BaseAddon, l as DEFAULT_CLUSTER_STEP_SETTINGS, m as DEVICE_BACKEND_TO_FORMAT, nn as EventCategory, q as enumerateInferenceDevices, st as pickClusterStepModels, t as APPLE_SA_TO_MACRO, tn as union, wt as errMsg, yt as runtimeDevices$1, z as defaultDeviceFor$1 } from "../dist-C9ohtgTQ.mjs";
|
|
3
|
+
import { a as readProcessCost } from "../node-CwIlVFyz.mjs";
|
|
4
|
+
import { a as getDefaultModelForFormat, c as getStepDefinition, i as ALL_STEPS, l as resolveModelForFormat, o as getDefaultModelForFormatFromDef, r as ALL_PIPELINE_STEPS, s as getStep, t as localFrameRegistry, u as landmarkPrecisionVerdict } from "../local-frame-registry-DAVug-jA.mjs";
|
|
5
5
|
import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
|
|
6
6
|
import { n as startEventLoopStallMonitor } from "../event-loop-stall-monitor-DXLNBMkY.mjs";
|
|
7
|
-
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-
|
|
7
|
+
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-DWw7FrV5.mjs";
|
|
8
8
|
import * as fs from "node:fs";
|
|
9
9
|
import * as path$1 from "node:path";
|
|
10
10
|
import { spawn } from "node:child_process";
|
|
@@ -9353,6 +9353,20 @@ var RelocateJobSchema = object({
|
|
|
9353
9353
|
* in its row, not in its name, so `MediaRelocateEngine` never reconciles one.
|
|
9354
9354
|
*/
|
|
9355
9355
|
rowsReconciled: number().int().nonnegative().optional(),
|
|
9356
|
+
/**
|
|
9357
|
+
* Rows this run FORGOT because the file they name is not on disk.
|
|
9358
|
+
*
|
|
9359
|
+
* The mover derived the path from the row's own fields and `stat`ed it; an
|
|
9360
|
+
* ENOENT there is a per-path confirmation that the segment is gone (D296),
|
|
9361
|
+
* and the durable row is dropped through the same channel eviction uses. It
|
|
9362
|
+
* is reported for the same reason `rowsReconciled` is: this is a durable
|
|
9363
|
+
* mutation nobody asked for, and a migration that quietly erases hour rows is
|
|
9364
|
+
* the same failure as one that quietly skips them (D295).
|
|
9365
|
+
*
|
|
9366
|
+
* The production drain of 2026-08-30 would have reported 11 074 here — the
|
|
9367
|
+
* ledger claimed 5.65 GB of footage that no longer existed.
|
|
9368
|
+
*/
|
|
9369
|
+
rowsForgotten: number().int().nonnegative().optional(),
|
|
9356
9370
|
startedAt: number(),
|
|
9357
9371
|
finishedAt: number().nullable(),
|
|
9358
9372
|
error: string().nullable()
|
|
@@ -9716,6 +9730,91 @@ var RelocateResidueSchema = object({
|
|
|
9716
9730
|
segments: number().int().nonnegative(),
|
|
9717
9731
|
bytes: number().int().nonnegative()
|
|
9718
9732
|
}).nullable();
|
|
9733
|
+
/**
|
|
9734
|
+
* Ask one location whether its durable hour rows describe the disk — the walk
|
|
9735
|
+
* (D319).
|
|
9736
|
+
*
|
|
9737
|
+
* `apply` DEFAULTS TO FALSE and that default is the product: the operator's
|
|
9738
|
+
* missing tool is the question, and the dry run is how they sanity-check the
|
|
9739
|
+
* destructive run before authorising it.
|
|
9740
|
+
*/
|
|
9741
|
+
var LedgerWalkInputSchema = object({
|
|
9742
|
+
locationId: string().min(1),
|
|
9743
|
+
/** Forget the confirmed-absent rows, rather than only counting them. */
|
|
9744
|
+
apply: boolean().optional(),
|
|
9745
|
+
/** Narrow to one camera. */
|
|
9746
|
+
deviceId: number().int().positive().optional(),
|
|
9747
|
+
/** Narrow to these recording profiles; empty/absent = every profile. */
|
|
9748
|
+
profiles: array(string().min(1)).optional()
|
|
9749
|
+
});
|
|
9750
|
+
/** Why a whole walk did nothing. Every one leaves the ledger untouched. */
|
|
9751
|
+
var LedgerWalkRefusalSchema = _enum([
|
|
9752
|
+
"location-unknown",
|
|
9753
|
+
"source-writable",
|
|
9754
|
+
"no-ledger",
|
|
9755
|
+
"archive-unreadable",
|
|
9756
|
+
"anchor-absent",
|
|
9757
|
+
"anchor-unreadable",
|
|
9758
|
+
"anchor-moved"
|
|
9759
|
+
]);
|
|
9760
|
+
_enum([
|
|
9761
|
+
"live-tail",
|
|
9762
|
+
"listing-error",
|
|
9763
|
+
"path-mismatch",
|
|
9764
|
+
"durable-refused"
|
|
9765
|
+
]);
|
|
9766
|
+
/** Every skip reason, always present, always a number — so a reason that never
|
|
9767
|
+
* fired reports as zero rather than absent and the report shape is constant
|
|
9768
|
+
* between passes. Spelled out rather than `z.record` for exactly that. */
|
|
9769
|
+
var LedgerWalkSkipCountsSchema = object({
|
|
9770
|
+
"live-tail": number().int().nonnegative(),
|
|
9771
|
+
"listing-error": number().int().nonnegative(),
|
|
9772
|
+
"path-mismatch": number().int().nonnegative(),
|
|
9773
|
+
"durable-refused": number().int().nonnegative()
|
|
9774
|
+
});
|
|
9775
|
+
/** One camera's share of a walk, so a report names cameras and not rows. */
|
|
9776
|
+
var LedgerWalkDeviceReportSchema = object({
|
|
9777
|
+
deviceId: number().int(),
|
|
9778
|
+
hoursWalked: number().int().nonnegative(),
|
|
9779
|
+
hoursMissing: number().int().nonnegative(),
|
|
9780
|
+
ghostSegments: number().int().nonnegative(),
|
|
9781
|
+
ghostBytes: number().int().nonnegative(),
|
|
9782
|
+
forgottenSegments: number().int().nonnegative(),
|
|
9783
|
+
orphanFiles: number().int().nonnegative()
|
|
9784
|
+
});
|
|
9785
|
+
/**
|
|
9786
|
+
* What one walk claimed, listed, found and (only when armed) forgot.
|
|
9787
|
+
*
|
|
9788
|
+
* `archiveSegments` is the **M** and `segmentsClaimed` the **N** (D295), so a
|
|
9789
|
+
* walk that saw a fraction of the location is visible in its own report rather
|
|
9790
|
+
* than in the absence of one.
|
|
9791
|
+
*/
|
|
9792
|
+
var LedgerWalkReportSchema = object({
|
|
9793
|
+
locationId: string(),
|
|
9794
|
+
applied: boolean(),
|
|
9795
|
+
refused: LedgerWalkRefusalSchema.nullable(),
|
|
9796
|
+
archiveSegments: number().int().nonnegative().nullable(),
|
|
9797
|
+
archiveBytes: number().int().nonnegative().nullable(),
|
|
9798
|
+
hoursClaimed: number().int().nonnegative(),
|
|
9799
|
+
hoursWalked: number().int().nonnegative(),
|
|
9800
|
+
hoursMissing: number().int().nonnegative(),
|
|
9801
|
+
/** `readdir` calls issued — the cost, stated in the unit that is paid. */
|
|
9802
|
+
listings: number().int().nonnegative(),
|
|
9803
|
+
segmentsClaimed: number().int().nonnegative(),
|
|
9804
|
+
ghostSegments: number().int().nonnegative(),
|
|
9805
|
+
ghostBytes: number().int().nonnegative(),
|
|
9806
|
+
ghostHoursWhole: number().int().nonnegative(),
|
|
9807
|
+
forgottenSegments: number().int().nonnegative(),
|
|
9808
|
+
forgottenBytes: number().int().nonnegative(),
|
|
9809
|
+
/** Files under a claimed hour that no durable row names. Never deleted. */
|
|
9810
|
+
orphanFiles: number().int().nonnegative(),
|
|
9811
|
+
orphanSample: array(string()).readonly(),
|
|
9812
|
+
hoursSkipped: number().int().nonnegative(),
|
|
9813
|
+
skippedByReason: LedgerWalkSkipCountsSchema,
|
|
9814
|
+
/** The walk stopped at its per-pass hour bound with claims unwalked. */
|
|
9815
|
+
bounded: boolean(),
|
|
9816
|
+
byDevice: array(LedgerWalkDeviceReportSchema).readonly()
|
|
9817
|
+
});
|
|
9719
9818
|
/** How many rows a media pass would still act on against a given target — the
|
|
9720
9819
|
* media lane's denominator AND its residue, from ONE derivation so the two can
|
|
9721
9820
|
* never disagree. `null` = the count could not be taken. */
|
|
@@ -21151,13 +21250,15 @@ var ListGroupsPageSchema = object({
|
|
|
21151
21250
|
groups: array(AnalyticsGroupRecordSchema).readonly(),
|
|
21152
21251
|
nextCursor: string().nullable()
|
|
21153
21252
|
});
|
|
21253
|
+
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
21254
|
+
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
21154
21255
|
var KeyEventQueryInput = object({
|
|
21155
21256
|
deviceId: number(),
|
|
21156
21257
|
/** Window lower bound (track firstSeen ≥ since). */
|
|
21157
21258
|
since: number(),
|
|
21158
21259
|
/** Window upper bound (track firstSeen ≤ until). */
|
|
21159
21260
|
until: number(),
|
|
21160
|
-
limit: number().int().min(1).max(
|
|
21261
|
+
limit: number().int().min(1).max(KEY_EVENTS_MAX_LIMIT).default(KEY_EVENTS_DEFAULT_LIMIT),
|
|
21161
21262
|
/** Drop tracks scoring below this importance. */
|
|
21162
21263
|
minImportance: number().min(0).max(1).optional(),
|
|
21163
21264
|
/** Restrict to a single class (e.g. 'person'). */
|
|
@@ -21179,6 +21280,32 @@ var KeyEventSchema = object({
|
|
|
21179
21280
|
...TrackFlagFields,
|
|
21180
21281
|
...TrackRetrainFields
|
|
21181
21282
|
});
|
|
21283
|
+
/** `getKeyEvents`' window and filters, asked of a SET of cameras at once. */
|
|
21284
|
+
var KeyEventBatchQueryInput = object({
|
|
21285
|
+
deviceIds: array(number()).min(1).max(200),
|
|
21286
|
+
since: number(),
|
|
21287
|
+
until: number(),
|
|
21288
|
+
/** Applied PER CAMERA, exactly as `getKeyEvents.limit` is — never a total
|
|
21289
|
+
* across the set, which would let a busy camera starve a quiet one of its
|
|
21290
|
+
* rows and change what the merged feed contains. */
|
|
21291
|
+
limit: number().int().min(1).max(KEY_EVENTS_MAX_LIMIT).default(KEY_EVENTS_DEFAULT_LIMIT),
|
|
21292
|
+
minImportance: number().min(0).max(1).optional(),
|
|
21293
|
+
classFilter: string().optional()
|
|
21294
|
+
});
|
|
21295
|
+
/**
|
|
21296
|
+
* One camera's key events in a batch answer.
|
|
21297
|
+
*
|
|
21298
|
+
* The row exists for every requested id. `getKeyEvents` degrades to `[]` on
|
|
21299
|
+
* error rather than throwing, so a camera whose store read failed and one with
|
|
21300
|
+
* no events in the window were ALREADY indistinguishable per camera — the
|
|
21301
|
+
* batch does not make that worse, and the row keeps the deviceId the single
|
|
21302
|
+
* method's output never carried (the caller used to stamp it from the fan-out
|
|
21303
|
+
* key, which only worked because there was one query per camera).
|
|
21304
|
+
*/
|
|
21305
|
+
var KeyEventsForDeviceSchema = object({
|
|
21306
|
+
deviceId: number(),
|
|
21307
|
+
events: array(KeyEventSchema).readonly()
|
|
21308
|
+
});
|
|
21182
21309
|
object({
|
|
21183
21310
|
trackId: string(),
|
|
21184
21311
|
className: string(),
|
|
@@ -21398,6 +21525,47 @@ var RebuildStatusSchema = object({
|
|
|
21398
21525
|
/** Present when the pass ended by throwing. */
|
|
21399
21526
|
error: string().nullable()
|
|
21400
21527
|
});
|
|
21528
|
+
/**
|
|
21529
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
21530
|
+
*
|
|
21531
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
21532
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
21533
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
21534
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
21535
|
+
*/
|
|
21536
|
+
var MediaReclaimStartResultSchema = object({
|
|
21537
|
+
started: boolean(),
|
|
21538
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
21539
|
+
alreadyRunning: boolean()
|
|
21540
|
+
});
|
|
21541
|
+
var MediaReclaimInputSchema = object({
|
|
21542
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
21543
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
21544
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
21545
|
+
restart: boolean().optional(),
|
|
21546
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
21547
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
21548
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
21549
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
21550
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
21551
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
21552
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
21553
|
+
});
|
|
21554
|
+
var MediaReclaimStatusSchema = object({
|
|
21555
|
+
running: boolean(),
|
|
21556
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
21557
|
+
totalExamined: number(),
|
|
21558
|
+
totalEligible: number(),
|
|
21559
|
+
totalReclaimed: number(),
|
|
21560
|
+
totalBytesReclaimed: number(),
|
|
21561
|
+
totalRefused: number(),
|
|
21562
|
+
/** Device+scope windows finished in this pass. */
|
|
21563
|
+
devicesDone: number(),
|
|
21564
|
+
complete: boolean().nullable(),
|
|
21565
|
+
startedAtMs: number().nullable(),
|
|
21566
|
+
finishedAtMs: number().nullable(),
|
|
21567
|
+
error: string().nullable()
|
|
21568
|
+
});
|
|
21401
21569
|
var ReplayFrameInputSchema = object({
|
|
21402
21570
|
timestamp: number(),
|
|
21403
21571
|
frame: PipelineRunResultBridge
|
|
@@ -21448,7 +21616,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21448
21616
|
until: number().optional(),
|
|
21449
21617
|
kinds: array(string()).optional(),
|
|
21450
21618
|
limit: number().int().min(1).max(MAX_EVENT_QUERY_LIMIT).default(DEFAULT_EVENT_QUERY_LIMIT)
|
|
21451
|
-
}), array(SensorEventSchema).readonly()), method(KeyEventQueryInput, array(KeyEventSchema).readonly()), method(object({
|
|
21619
|
+
}), array(SensorEventSchema).readonly()), method(KeyEventQueryInput, array(KeyEventSchema).readonly()), method(KeyEventBatchQueryInput, array(KeyEventsForDeviceSchema).readonly()), method(object({
|
|
21452
21620
|
deviceId: number(),
|
|
21453
21621
|
since: number(),
|
|
21454
21622
|
until: number(),
|
|
@@ -21539,6 +21707,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21539
21707
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
21540
21708
|
kind: "query",
|
|
21541
21709
|
auth: "admin"
|
|
21710
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
21711
|
+
kind: "mutation",
|
|
21712
|
+
auth: "admin"
|
|
21713
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
21714
|
+
kind: "query",
|
|
21715
|
+
auth: "admin"
|
|
21542
21716
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
21543
21717
|
kind: "query",
|
|
21544
21718
|
auth: "admin"
|
|
@@ -29519,6 +29693,23 @@ var recordingCapability = {
|
|
|
29519
29693
|
kind: "query",
|
|
29520
29694
|
auth: "admin"
|
|
29521
29695
|
}),
|
|
29696
|
+
/**
|
|
29697
|
+
* Does this location's LEDGER tell the truth about its disk? (D319)
|
|
29698
|
+
*
|
|
29699
|
+
* One `readdir` per claimed hour, diffed both ways: durable rows whose file
|
|
29700
|
+
* is not there, and files no durable row names. `apply` defaults to FALSE —
|
|
29701
|
+
* the report is the product, and the dry run is how an operator
|
|
29702
|
+
* sanity-checks the destructive run before authorising it.
|
|
29703
|
+
*
|
|
29704
|
+
* REFUSES a source that is still a write target: a listing of a live
|
|
29705
|
+
* location is a lower bound, which is not the strong evidence that lets
|
|
29706
|
+
* this pass forget without a budget. A live location is reconciled by the
|
|
29707
|
+
* mover, under D318's bound.
|
|
29708
|
+
*/
|
|
29709
|
+
reconcileLedgerAgainstDisk: method(LedgerWalkInputSchema, LedgerWalkReportSchema, {
|
|
29710
|
+
kind: "mutation",
|
|
29711
|
+
auth: "admin"
|
|
29712
|
+
}),
|
|
29522
29713
|
/** Cancel a running or queued relocate job. A queued job never runs. */
|
|
29523
29714
|
cancelRelocateJob: method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
29524
29715
|
kind: "mutation",
|
|
@@ -29972,7 +30163,26 @@ var SceneMonitorStatusSchema = object({
|
|
|
29972
30163
|
monitors: array(SceneMonitorSchema),
|
|
29973
30164
|
lastFetchedAt: number()
|
|
29974
30165
|
});
|
|
29975
|
-
|
|
30166
|
+
/**
|
|
30167
|
+
* One camera's row in a `listScenesBatch` answer.
|
|
30168
|
+
*
|
|
30169
|
+
* `status` is NULLABLE and the nullability is the whole point. `scene-monitor`
|
|
30170
|
+
* is a `defaultActive` wrapper, so every camera is asked; a camera whose
|
|
30171
|
+
* provider is absent (pipeline-analytics not deployed, the post-processing node
|
|
30172
|
+
* down) cannot answer, and that is not the same fact as a camera with no scenes
|
|
30173
|
+
* configured. Fanned out per camera the difference was visible — one query
|
|
30174
|
+
* errored while the others resolved — and a batch that returned only the rows
|
|
30175
|
+
* it managed would have destroyed it, silently, by making an unreachable camera
|
|
30176
|
+
* indistinguishable from one that answered `monitors: []`.
|
|
30177
|
+
*
|
|
30178
|
+
* So: EVERY requested deviceId gets a row. `status: null` means "this camera
|
|
30179
|
+
* could not be read"; `status.monitors: []` means "read, and it has none".
|
|
30180
|
+
*/
|
|
30181
|
+
var SceneMonitorStatusForDeviceSchema = object({
|
|
30182
|
+
deviceId: number(),
|
|
30183
|
+
status: SceneMonitorStatusSchema.nullable()
|
|
30184
|
+
});
|
|
30185
|
+
DeviceType.Camera, method(object({ deviceId: number() }), SceneMonitorStatusSchema), method(object({ deviceIds: array(number()).min(1).max(200) }), array(SceneMonitorStatusForDeviceSchema).readonly()), method(object({
|
|
29976
30186
|
deviceId: number(),
|
|
29977
30187
|
label: string(),
|
|
29978
30188
|
roi: MaskRectShapeSchema,
|
|
@@ -31296,6 +31506,27 @@ var CameraOccupancySnapshotSchema = object({
|
|
|
31296
31506
|
stationaryObjects: array(StationaryObjectSchema).readonly().optional()
|
|
31297
31507
|
});
|
|
31298
31508
|
/**
|
|
31509
|
+
* One camera's row in a `getCurrentSnapshotBatch` answer.
|
|
31510
|
+
*
|
|
31511
|
+
* THREE outcomes, and the single-camera method could only express two of them
|
|
31512
|
+
* because `snapshot: null` was already spoken for:
|
|
31513
|
+
*
|
|
31514
|
+
* - `read: 'read'`, `snapshot` present — the live occupancy reading.
|
|
31515
|
+
* - `read: 'read'`, `snapshot: null` — read, and this camera has no reading
|
|
31516
|
+
* yet: no frame since boot, and no parked-object registry to hydrate from.
|
|
31517
|
+
* - `read: 'unreadable'` — the owner could not answer for this
|
|
31518
|
+
* camera. `snapshot` is null, and it does NOT mean "nothing parked here".
|
|
31519
|
+
*
|
|
31520
|
+
* Collapsing the last two is the failure this field exists to prevent: a
|
|
31521
|
+
* hydration that threw would otherwise render as an empty Stationary section,
|
|
31522
|
+
* which is a definite claim about a camera nobody could read.
|
|
31523
|
+
*/
|
|
31524
|
+
var CameraOccupancySnapshotForDeviceSchema = object({
|
|
31525
|
+
deviceId: number(),
|
|
31526
|
+
read: _enum(["read", "unreadable"]),
|
|
31527
|
+
snapshot: CameraOccupancySnapshotSchema.nullable()
|
|
31528
|
+
});
|
|
31529
|
+
/**
|
|
31299
31530
|
* Time-series resolution. The history methods return one bucket per
|
|
31300
31531
|
* step over the requested range. Smaller resolutions cost more
|
|
31301
31532
|
* memory + bandwidth; bound to discrete steps so caller cannot ask
|
|
@@ -31319,7 +31550,7 @@ var HistoryPointSchema = object({
|
|
|
31319
31550
|
/** Object count averaged over the bucket (rounded to nearest integer). */
|
|
31320
31551
|
count: number().int().nonnegative()
|
|
31321
31552
|
});
|
|
31322
|
-
DeviceType.Camera, method(object({ deviceId: number() }), CameraOccupancySnapshotSchema.nullable()), method(object({
|
|
31553
|
+
DeviceType.Camera, method(object({ deviceId: number() }), CameraOccupancySnapshotSchema.nullable()), method(object({ deviceIds: array(number()).min(1).max(200) }), array(CameraOccupancySnapshotForDeviceSchema).readonly()), method(object({
|
|
31323
31554
|
deviceId: number(),
|
|
31324
31555
|
zoneId: string(),
|
|
31325
31556
|
className: string().optional()
|
|
@@ -34783,6 +35014,18 @@ Object.freeze({
|
|
|
34783
35014
|
addonId: null,
|
|
34784
35015
|
access: "view"
|
|
34785
35016
|
},
|
|
35017
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
35018
|
+
capName: "pipeline-analytics",
|
|
35019
|
+
capScope: "device",
|
|
35020
|
+
addonId: null,
|
|
35021
|
+
access: "view"
|
|
35022
|
+
},
|
|
35023
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
35024
|
+
capName: "pipeline-analytics",
|
|
35025
|
+
capScope: "device",
|
|
35026
|
+
addonId: null,
|
|
35027
|
+
access: "view"
|
|
35028
|
+
},
|
|
34786
35029
|
"pipelineAnalytics.getMotionEvents": {
|
|
34787
35030
|
capName: "pipeline-analytics",
|
|
34788
35031
|
capScope: "device",
|
|
@@ -34957,6 +35200,12 @@ Object.freeze({
|
|
|
34957
35200
|
addonId: null,
|
|
34958
35201
|
access: "create"
|
|
34959
35202
|
},
|
|
35203
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
35204
|
+
capName: "pipeline-analytics",
|
|
35205
|
+
capScope: "device",
|
|
35206
|
+
addonId: null,
|
|
35207
|
+
access: "create"
|
|
35208
|
+
},
|
|
34960
35209
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
34961
35210
|
capName: "pipeline-analytics",
|
|
34962
35211
|
capScope: "device",
|
|
@@ -35959,6 +36208,12 @@ Object.freeze({
|
|
|
35959
36208
|
addonId: null,
|
|
35960
36209
|
access: "view"
|
|
35961
36210
|
},
|
|
36211
|
+
"recording.reconcileLedgerAgainstDisk": {
|
|
36212
|
+
capName: "recording",
|
|
36213
|
+
capScope: "system",
|
|
36214
|
+
addonId: null,
|
|
36215
|
+
access: "create"
|
|
36216
|
+
},
|
|
35962
36217
|
"recording.refreshStorageLocationsForMigration": {
|
|
35963
36218
|
capName: "recording",
|
|
35964
36219
|
capScope: "system",
|
|
@@ -36085,6 +36340,12 @@ Object.freeze({
|
|
|
36085
36340
|
addonId: null,
|
|
36086
36341
|
access: "view"
|
|
36087
36342
|
},
|
|
36343
|
+
"sceneMonitor.listScenesBatch": {
|
|
36344
|
+
capName: "scene-monitor",
|
|
36345
|
+
capScope: "device",
|
|
36346
|
+
addonId: null,
|
|
36347
|
+
access: "view"
|
|
36348
|
+
},
|
|
36088
36349
|
"sceneMonitor.recheckNow": {
|
|
36089
36350
|
capName: "scene-monitor",
|
|
36090
36351
|
capScope: "device",
|
|
@@ -37441,6 +37702,12 @@ Object.freeze({
|
|
|
37441
37702
|
addonId: null,
|
|
37442
37703
|
access: "view"
|
|
37443
37704
|
},
|
|
37705
|
+
"zoneAnalytics.getCurrentSnapshotBatch": {
|
|
37706
|
+
capName: "zone-analytics",
|
|
37707
|
+
capScope: "device",
|
|
37708
|
+
addonId: null,
|
|
37709
|
+
access: "view"
|
|
37710
|
+
},
|
|
37444
37711
|
"zoneAnalytics.getUnzonedHistory": {
|
|
37445
37712
|
capName: "zone-analytics",
|
|
37446
37713
|
capScope: "device",
|
|
@@ -38445,6 +38712,11 @@ Object.freeze({
|
|
|
38445
38712
|
form: "single",
|
|
38446
38713
|
optional: false
|
|
38447
38714
|
}],
|
|
38715
|
+
"pipelineAnalytics.getKeyEventsBatch": [{
|
|
38716
|
+
name: "deviceIds",
|
|
38717
|
+
form: "array",
|
|
38718
|
+
optional: false
|
|
38719
|
+
}],
|
|
38448
38720
|
"pipelineAnalytics.getMotionEvents": [{
|
|
38449
38721
|
name: "deviceId",
|
|
38450
38722
|
form: "single",
|
|
@@ -38550,6 +38822,11 @@ Object.freeze({
|
|
|
38550
38822
|
form: "single",
|
|
38551
38823
|
optional: true
|
|
38552
38824
|
}],
|
|
38825
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
38826
|
+
name: "deviceIds",
|
|
38827
|
+
form: "array",
|
|
38828
|
+
optional: true
|
|
38829
|
+
}],
|
|
38553
38830
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
38554
38831
|
name: "deviceId",
|
|
38555
38832
|
form: "single",
|
|
@@ -38885,6 +39162,11 @@ Object.freeze({
|
|
|
38885
39162
|
form: "single",
|
|
38886
39163
|
optional: false
|
|
38887
39164
|
}],
|
|
39165
|
+
"recording.reconcileLedgerAgainstDisk": [{
|
|
39166
|
+
name: "deviceId",
|
|
39167
|
+
form: "single",
|
|
39168
|
+
optional: true
|
|
39169
|
+
}],
|
|
38888
39170
|
"recording.relocateFootage": [{
|
|
38889
39171
|
name: "deviceId",
|
|
38890
39172
|
form: "single",
|
|
@@ -38950,6 +39232,11 @@ Object.freeze({
|
|
|
38950
39232
|
form: "single",
|
|
38951
39233
|
optional: false
|
|
38952
39234
|
}],
|
|
39235
|
+
"sceneMonitor.listScenesBatch": [{
|
|
39236
|
+
name: "deviceIds",
|
|
39237
|
+
form: "array",
|
|
39238
|
+
optional: false
|
|
39239
|
+
}],
|
|
38953
39240
|
"sceneMonitor.recheckNow": [{
|
|
38954
39241
|
name: "deviceId",
|
|
38955
39242
|
form: "single",
|
|
@@ -39211,6 +39498,11 @@ Object.freeze({
|
|
|
39211
39498
|
form: "single",
|
|
39212
39499
|
optional: false
|
|
39213
39500
|
}],
|
|
39501
|
+
"zoneAnalytics.getCurrentSnapshotBatch": [{
|
|
39502
|
+
name: "deviceIds",
|
|
39503
|
+
form: "array",
|
|
39504
|
+
optional: false
|
|
39505
|
+
}],
|
|
39214
39506
|
"zoneAnalytics.getUnzonedHistory": [{
|
|
39215
39507
|
name: "deviceId",
|
|
39216
39508
|
form: "single",
|