@camstack/system 1.2.420 → 1.2.422

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.
Files changed (70) hide show
  1. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/autotrack/index.js +1 -1
  8. package/dist/builtins/autotrack/index.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  11. package/dist/builtins/calendars/calendars.addon.js +1 -1
  12. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  13. package/dist/builtins/camera-grid/index.js +1 -1
  14. package/dist/builtins/camera-grid/index.mjs +1 -1
  15. package/dist/builtins/composer/composer.addon.js +2 -2
  16. package/dist/builtins/composer/composer.addon.mjs +2 -2
  17. package/dist/builtins/console-logging/index.js +1 -1
  18. package/dist/builtins/console-logging/index.mjs +1 -1
  19. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  20. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  21. package/dist/builtins/device-manager/contribution-cache.d.ts +18 -1
  22. package/dist/builtins/device-manager/device-aggregation.d.ts +7 -1
  23. package/dist/builtins/device-manager/device-manager.addon.js +53 -8
  24. package/dist/builtins/device-manager/device-manager.addon.mjs +53 -8
  25. package/dist/builtins/hub-forwarder/index.js +1 -1
  26. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  27. package/dist/builtins/keychain/index.js +3 -3
  28. package/dist/builtins/keychain/index.mjs +3 -3
  29. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  30. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  31. package/dist/builtins/local-auth/local-auth.addon.js +2 -2
  32. package/dist/builtins/local-auth/local-auth.addon.mjs +2 -2
  33. package/dist/builtins/local-network/local-network.addon.js +1 -1
  34. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  35. package/dist/builtins/loki-logging/index.js +1 -1
  36. package/dist/builtins/loki-logging/index.mjs +1 -1
  37. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  38. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  39. package/dist/builtins/platform-probe/index.js +1 -1
  40. package/dist/builtins/platform-probe/index.mjs +1 -1
  41. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  42. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  43. package/dist/builtins/snapshot/index.js +1 -1
  44. package/dist/builtins/snapshot/index.mjs +1 -1
  45. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  46. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  47. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +44 -1
  48. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  49. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  50. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +3 -1
  51. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +3 -1
  52. package/dist/builtins/system-config/system-config.addon.js +2 -2
  53. package/dist/builtins/system-config/system-config.addon.mjs +2 -2
  54. package/dist/builtins/winston-logging/index.js +1 -1
  55. package/dist/builtins/winston-logging/index.mjs +1 -1
  56. package/dist/{composition-sources-OaDYklhR.js → composition-sources-BstNkBVe.js} +1 -1
  57. package/dist/{composition-sources-562ib2dL.mjs → composition-sources-f_VjTBgs.mjs} +1 -1
  58. package/dist/{constants-ik5xtasS.js → constants-CY4vXTV-.js} +1 -1
  59. package/dist/{constants-BeQWXybC.mjs → constants-iLQM7god.mjs} +1 -1
  60. package/dist/{dist-C0wYvAHC.mjs → dist-CHsJCqrf.mjs} +325 -4
  61. package/dist/{dist-DLHPmdoV.js → dist-FSNJUw7p.js} +325 -4
  62. package/dist/index.js +4 -4
  63. package/dist/index.mjs +4 -4
  64. package/dist/{jwt-signing-key-CWmNKLQi.js → jwt-signing-key-CPha_bf7.js} +1 -1
  65. package/dist/{jwt-signing-key-dkTVfsLI.mjs → jwt-signing-key-DUVvfILp.mjs} +1 -1
  66. package/dist/{restore-archive-DZeFVS2l.js → restore-archive-BwGWspP1.js} +1 -1
  67. package/dist/{restore-archive-Bt65Em24.mjs → restore-archive-J_BsGRBy.mjs} +1 -1
  68. package/dist/{retired-settings-keys-BHlKEYNL.mjs → retired-settings-keys-3SMjMqj0.mjs} +1 -1
  69. package/dist/{retired-settings-keys-DibNtLmU.js → retired-settings-keys-BuQBYfu0.js} +1 -1
  70. package/package.json +1 -1
@@ -718,7 +718,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
718
718
  return EventCategory;
719
719
  }({});
720
720
  //#endregion
721
- //#region ../types/dist/sleep-vWTnHq9G.mjs
721
+ //#region ../types/dist/sleep-BBF1iXUi.mjs
722
722
  /**
723
723
  * The audio chunk plane's byte format, and the ONE expansion from a coded
724
724
  * window to float samples (D455).
@@ -7338,6 +7338,15 @@ z.discriminatedUnion("type", [
7338
7338
  message: z.string()
7339
7339
  })
7340
7340
  ]);
7341
+ /** Every status, in the order a summary lists them. */
7342
+ var RETRAIN_REVIEW_STATUSES = [
7343
+ "unchanged",
7344
+ "adjusted",
7345
+ "reclassified",
7346
+ "added",
7347
+ "removed",
7348
+ "model-error"
7349
+ ];
7341
7350
  /**
7342
7351
  * What the gate decided about a birth, from the CALLER's point of view.
7343
7352
  *
@@ -12004,6 +12013,16 @@ var BrokerClientsSchema = z.object({
12004
12013
  /** Total encoded + raw-RTP callback subscriber count (sum of `encoded[].length`). */
12005
12014
  encodedSubscribers: z.number()
12006
12015
  });
12016
+ /**
12017
+ * How many people are watching one camera LIVE right now — see
12018
+ * `getLiveViewerCounts`. A camera with nobody watching is absent from the list
12019
+ * (so `viewers` is always at least 1): the listing carries the cameras that
12020
+ * have viewers, never a row of zeros.
12021
+ */
12022
+ var LiveViewerCountSchema = z.object({
12023
+ deviceId: z.number().int().nonnegative(),
12024
+ viewers: z.number().int().positive()
12025
+ });
12007
12026
  z.enum([
12008
12027
  "reconnecting",
12009
12028
  "sleeping",
@@ -12487,6 +12506,24 @@ var streamBrokerCapability = {
12487
12506
  auth: "admin"
12488
12507
  }),
12489
12508
  listClients: method(z.object({ brokerId: z.string() }), BrokerClientsSchema),
12509
+ /**
12510
+ * People watching each camera LIVE right now, for every camera at once —
12511
+ * cheap enough to poll (a walk of the live session maps, no I/O).
12512
+ *
12513
+ * Counts EXTERNAL viewers only: WebRTC sessions of a viewer kind
12514
+ * (`webrtc-browser` / `-mobile` / `-whep`, `alexa`, `homekit`) that are on
12515
+ * the live edge, plus RTSP restream clients from outside that are playing.
12516
+ * The system's own consumers are never counted: the detection decoder, the
12517
+ * recorder, snapshots, the prebuffer hold, audio analysis, and the RTSP
12518
+ * dials an agent's derived broker makes. One WebRTC session or RTSP
12519
+ * connection is one viewer, so two tabs on one camera read 2.
12520
+ *
12521
+ * The count is read off the live session maps at call time, so a session
12522
+ * that ends — cleanly or by the peer vanishing — stops counting with no
12523
+ * counter to leak. It covers the sessions THIS provider serves; a node
12524
+ * with its own stream-broker is asked with a `nodeId` pin.
12525
+ */
12526
+ getLiveViewerCounts: method(z.void(), z.array(LiveViewerCountSchema).readonly()),
12490
12527
  killClient: method(z.object({
12491
12528
  brokerId: z.string(),
12492
12529
  channel: z.enum(["rtsp", "audio"]),
@@ -15096,6 +15133,38 @@ var BulkRecordSchema = z.object({
15096
15133
  data: z.record(z.string(), z.unknown())
15097
15134
  });
15098
15135
  /**
15136
+ * One write inside a {@link settingsStoreCapability.methods.transact} call.
15137
+ * Only the three that a "replace this set, bump that revision" write needs.
15138
+ */
15139
+ var TransactOpSchema = z.discriminatedUnion("op", [
15140
+ z.object({
15141
+ op: z.literal("deleteWhere"),
15142
+ collection: z.string(),
15143
+ filter: MutationFilterSchema
15144
+ }),
15145
+ z.object({
15146
+ op: z.literal("insertMany"),
15147
+ collection: z.string(),
15148
+ records: z.array(BulkRecordSchema).readonly()
15149
+ }),
15150
+ z.object({
15151
+ op: z.literal("update"),
15152
+ collection: z.string(),
15153
+ id: z.string(),
15154
+ data: z.record(z.string(), z.unknown())
15155
+ })
15156
+ ]);
15157
+ /**
15158
+ * The precondition of a transaction: the row `key` of `collection` must hold
15159
+ * `equals` in `column`, read INSIDE the transaction.
15160
+ */
15161
+ var TransactGuardSchema = z.object({
15162
+ collection: z.string(),
15163
+ key: z.string(),
15164
+ column: z.string(),
15165
+ equals: z.unknown()
15166
+ });
15167
+ /**
15099
15168
  * Column declaration for a structured (SQL-backed) collection.
15100
15169
  *
15101
15170
  * Logical types — the backend translates each to the matching SQLite
@@ -15320,6 +15389,36 @@ id: z.union([z.string(), z.number()]) }), {
15320
15389
  kind: "mutation",
15321
15390
  auth: "admin"
15322
15391
  }),
15392
+ /**
15393
+ * Several writes, ONE transaction, behind an optional precondition.
15394
+ *
15395
+ * The multi-collection twin of {@link insertMany}: a write that has to move
15396
+ * a set of rows in one collection AND a revision in another cannot be
15397
+ * expressed as separate calls without a window in which a reader (or a
15398
+ * crash) sees half of it. The retrain annotation save replaces a frame's
15399
+ * rows, its dismissed set and its revision this way.
15400
+ *
15401
+ * `guard`, when given, is read inside the transaction: if the row is
15402
+ * missing or its column differs from `equals`, NOTHING is written and the
15403
+ * answer is `{ applied: false, current }` with what was found — the
15404
+ * compare-and-set a revisioned write needs, with no second reader able to
15405
+ * slip between the check and the writes.
15406
+ *
15407
+ * **All or nothing**, like {@link insertMany}: a throw in any op rolls the
15408
+ * whole call back. Ops run in the order given (delete before insert to
15409
+ * replace a set). `namespace` applies to every collection named.
15410
+ */
15411
+ transact: method(z.object({
15412
+ namespace: z.string().optional(),
15413
+ guard: TransactGuardSchema.optional(),
15414
+ ops: z.array(TransactOpSchema).readonly()
15415
+ }), z.object({
15416
+ applied: z.boolean(),
15417
+ current: z.unknown().optional()
15418
+ }), {
15419
+ kind: "mutation",
15420
+ auth: "admin"
15421
+ }),
15323
15422
  /** Update an existing record by ID. */
15324
15423
  update: method(z.object({
15325
15424
  namespace: z.string().optional(),
@@ -15604,6 +15703,18 @@ id: z.union([z.string(), z.number()]) }), {
15604
15703
  kind: "mutation",
15605
15704
  auth: "admin"
15606
15705
  }),
15706
+ /** Several writes in ONE transaction behind an optional guard; see the door. */
15707
+ transact: method(z.object({
15708
+ namespace: z.string().optional(),
15709
+ guard: TransactGuardSchema.optional(),
15710
+ ops: z.array(TransactOpSchema).readonly()
15711
+ }), z.object({
15712
+ applied: z.boolean(),
15713
+ current: z.unknown().optional()
15714
+ }), {
15715
+ kind: "mutation",
15716
+ auth: "admin"
15717
+ }),
15607
15718
  /** Update an existing record by ID. */
15608
15719
  update: method(z.object({
15609
15720
  namespace: z.string().optional(),
@@ -26285,6 +26396,56 @@ var RetrainBboxSchema = z.object({
26285
26396
  h: z.number()
26286
26397
  });
26287
26398
  /**
26399
+ * What a box LOOKED LIKE when it was offered, snapshotted at the moment the
26400
+ * operator accepted it. The saved row keeps only the final rectangle; this is
26401
+ * the other half of the pair, and the pair is what says whether the operator
26402
+ * accepted, nudged, relabelled or replaced a proposal (`retrain-review.ts`).
26403
+ *
26404
+ * `ref` names the proposal inside its frame: `pipeline:<trackId>` for a box the
26405
+ * live pipeline drew, `assist:<n>` for the n-th box of a detector or LLM run,
26406
+ * and anything unique for an operator-drawn box (`operator:<n>`). Re-derived
26407
+ * pipeline boxes carry the same ref every time, which is what lets a dismissal
26408
+ * stay dismissed.
26409
+ */
26410
+ var RetrainOriginSchema = z.object({
26411
+ source: RetrainAnnotationSourceSchema,
26412
+ ref: z.string().min(1),
26413
+ bbox: RetrainBboxSchema,
26414
+ macroClass: RetrainMacroClassSchema,
26415
+ label: z.string().optional(),
26416
+ score: z.number().optional(),
26417
+ modelId: z.string().optional()
26418
+ });
26419
+ /**
26420
+ * A proposal the operator deleted. Durable on the frame, so a deleted pipeline
26421
+ * box does not come back as a draft every time the frame is reopened, and so
26422
+ * the deletion itself is a recorded fact rather than an absence.
26423
+ */
26424
+ var RetrainDismissedSchema = z.object({
26425
+ ref: z.string().min(1),
26426
+ snapshot: RetrainOriginSchema
26427
+ });
26428
+ /** What the operator did with a proposal (see `retrain-review.ts`). */
26429
+ var RetrainReviewStatusSchema = z.enum(RETRAIN_REVIEW_STATUSES);
26430
+ var RetrainBoxReviewSchema = z.object({
26431
+ ref: z.string(),
26432
+ savedId: z.string().optional(),
26433
+ status: RetrainReviewStatusSchema,
26434
+ /** The baseline was re-derived, not snapshotted (a pre-origin row). */
26435
+ approximate: z.boolean(),
26436
+ origin: RetrainOriginSchema.optional(),
26437
+ iou: z.number().optional()
26438
+ });
26439
+ var RetrainFrameReviewSchema = z.object({
26440
+ boxes: z.array(RetrainBoxReviewSchema).readonly(),
26441
+ summary: z.object({
26442
+ counts: z.record(RetrainReviewStatusSchema, z.number().int()),
26443
+ total: z.number().int(),
26444
+ changed: z.number().int(),
26445
+ approximate: z.boolean()
26446
+ })
26447
+ });
26448
+ /**
26288
26449
  * One annotated subject.
26289
26450
  *
26290
26451
  * `bbox` is normalised against the full frame, ALWAYS. The per-model shapes
@@ -26308,6 +26469,9 @@ var RetrainAnnotationSchema = z.object({
26308
26469
  /** Which model proposed this box — or, on a `model_error`, drew the phantom. */
26309
26470
  assistModelId: z.string().optional(),
26310
26471
  assistScore: z.number().optional(),
26472
+ /** The proposal this box started from, snapshotted at accept time. `null` on
26473
+ * a row saved before origins existed; absent on a draft nobody snapshotted. */
26474
+ origin: RetrainOriginSchema.nullable().optional(),
26311
26475
  exportedInBatch: z.string().optional(),
26312
26476
  createdAt: z.number()
26313
26477
  });
@@ -26400,7 +26564,19 @@ var RetrainFrameSchema = z.object({
26400
26564
  * empty when nothing the track store holds can be placed on it. */
26401
26565
  pipelineBoxes: z.array(RetrainPipelineBoxSchema).readonly().optional(),
26402
26566
  /** The named collections this frame belongs to. Present on list answers. */
26403
- collectionIds: z.array(z.string()).readonly().optional()
26567
+ collectionIds: z.array(z.string()).readonly().optional(),
26568
+ /** Bumped by every annotation save. A save that names a stale
26569
+ * `expectedRevision` is refused, so two surfaces cannot overwrite each other. */
26570
+ revision: z.number().int().optional(),
26571
+ /** Proposals the operator deleted — never re-seeded as drafts. */
26572
+ dismissed: z.array(RetrainDismissedSchema).readonly().optional(),
26573
+ /** What the operator did with the proposals, computed by the server. */
26574
+ review: RetrainFrameReviewSchema.optional(),
26575
+ /** The frame's pixels over the admin data plane (full size). Fetch with the
26576
+ * admin bearer token; relative to the hub root. */
26577
+ imageUrl: z.string().optional(),
26578
+ /** The same, as a ~480 px thumbnail for grids. */
26579
+ thumbnailUrl: z.string().optional()
26404
26580
  });
26405
26581
  /** Why a copy-on-select could not be honoured — named, never a silent skip. */
26406
26582
  var RetrainCopyRefusalSchema = z.enum([
@@ -27943,6 +28119,11 @@ var pipelineAnalyticsCapability = {
27943
28119
  /**
27944
28120
  * The pixels of ONE copied frame, base64.
27945
28121
  *
28122
+ * @deprecated Use `RetrainFrame.imageUrl` / `thumbnailUrl` (the admin
28123
+ * `retrain-frame` data plane, D613). A base64 envelope holds the frame
28124
+ * whole in the producer AND the caller, and a grid of tiles paid that for
28125
+ * every tile. Kept for one release for callers that cannot fetch a URL.
28126
+ *
27946
28127
  * Through the cap rather than a data plane because it is genuinely one
27947
28128
  * frame at a time, on demand, at human speed — the shape D9/D18 permit
27948
28129
  * (what they forbid is frames crossing a boundary at frame RATE). The
@@ -28005,18 +28186,59 @@ var pipelineAnalyticsCapability = {
28005
28186
  * Refuses a macro class typed into `label` or `subLabel` — the tiers are
28006
28187
  * separate and the guard is at the WRITE, because a mixed taxonomy cannot
28007
28188
  * be un-mixed by reading it.
28189
+ *
28190
+ * ATOMIC and REVISIONED: the replaced rows, the frame's `dismissed` set and
28191
+ * its `revision` move in one transaction, guarded by the revision the
28192
+ * caller saw. A stale `expectedRevision` writes nothing and throws
28193
+ * `retrain-revision-conflict` (parse it with `parseRetrainRevisionConflict`);
28194
+ * the UI and an MCP agent no longer overwrite each other silently.
28008
28195
  */
28009
28196
  saveRetrainAnnotations: method(z.object({
28010
28197
  deviceId: z.number(),
28011
28198
  /** The frame's track, when it has one — checked against the frame. */
28012
28199
  trackId: z.string().optional(),
28013
28200
  frameId: z.string(),
28014
- annotations: z.array(RetrainAnnotationDraftSchema)
28201
+ annotations: z.array(RetrainAnnotationDraftSchema),
28202
+ /** The frame's `revision` the caller saw. A different current revision
28203
+ * refuses the save with a `retrain-revision-conflict` error
28204
+ * (`parseRetrainRevisionConflict`). Absent ⇒ last write wins. */
28205
+ expectedRevision: z.number().int().optional(),
28206
+ /** The proposals the operator deleted. Absent ⇒ keep the frame's
28207
+ * current set; present ⇒ replace it (an empty array un-dismisses). */
28208
+ dismissed: z.array(RetrainDismissedSchema).optional()
28015
28209
  }), z.array(RetrainAnnotationSchema).readonly(), {
28016
28210
  kind: "mutation",
28017
28211
  auth: "admin"
28018
28212
  }),
28019
28213
  /**
28214
+ * Give annotations saved BEFORE origins existed the origin a caller
28215
+ * reconstructed for them (the MCP `track_review_backfill_origin` tool
28216
+ * matches each row to the pipeline box it equals).
28217
+ *
28218
+ * Writes `origin` and nothing else: ids, creation time and the export stamp
28219
+ * are untouched (a re-save through `saveRetrainAnnotations` would reset all
28220
+ * three). A row that already has an origin is SKIPPED — a snapshot taken at
28221
+ * accept time is evidence, a reconstruction is a guess. Atomic and
28222
+ * revision-guarded like the save; bumps the frame's `revision`.
28223
+ */
28224
+ backfillRetrainOrigins: method(z.object({
28225
+ deviceId: z.number(),
28226
+ trackId: z.string().optional(),
28227
+ frameId: z.string(),
28228
+ expectedRevision: z.number().int().optional(),
28229
+ origins: z.array(z.object({
28230
+ annotationId: z.string(),
28231
+ origin: RetrainOriginSchema
28232
+ })).min(1).max(500)
28233
+ }), z.object({
28234
+ updated: z.number().int(),
28235
+ skipped: z.number().int(),
28236
+ revision: z.number().int()
28237
+ }), {
28238
+ kind: "mutation",
28239
+ auth: "admin"
28240
+ }),
28241
+ /**
28020
28242
  * Finish with a track: `staging → trained`. **The only writer of that
28021
28243
  * state** — D81 shipped the column with it deliberately unreachable.
28022
28244
  *
@@ -31304,6 +31526,12 @@ var CameraStepOverridePatchSchema = z.object({
31304
31526
  settings: z.record(z.string(), z.unknown()).readonly().optional()
31305
31527
  });
31306
31528
  var CameraStepSettingsSchema = z.record(z.string(), z.record(z.string(), z.unknown()).readonly());
31529
+ /** The three root-detector choices a camera has (D507: at most one root). */
31530
+ var CameraDetectionSourceSchema = z.enum([
31531
+ "pipeline",
31532
+ "onboard",
31533
+ "none"
31534
+ ]);
31307
31535
  var CameraPipelineSettingsSchema = z.object({
31308
31536
  stepToggles: z.record(z.string(), z.boolean()).optional(),
31309
31537
  stepSettings: CameraStepSettingsSchema.optional(),
@@ -32232,6 +32460,41 @@ var pipelineOrchestratorCapability = {
32232
32460
  kind: "mutation",
32233
32461
  auth: "admin"
32234
32462
  }),
32463
+ /**
32464
+ * Where this camera's first-level detections come from: this node's own
32465
+ * root step (`pipeline`), the camera's onboard detector alone (`onboard`),
32466
+ * or no root detector (`none`). A camera runs at most one root detector
32467
+ * (D507), so there is no "both". Read from the camera's stored
32468
+ * `detectionSources` — the one authority; `explicit` is false while the
32469
+ * operator has never picked and the default stands.
32470
+ */
32471
+ getCameraDetectionSource: method(z.object({ deviceId: z.number() }), z.object({
32472
+ source: CameraDetectionSourceSchema,
32473
+ explicit: z.boolean(),
32474
+ onboard: z.object({
32475
+ /** The camera has an onboard detector this system can read. */
32476
+ available: z.boolean(),
32477
+ /** What its detections carry — a camera with no box cannot be a root step. */
32478
+ geometry: z.enum([
32479
+ "boxed",
32480
+ "while-streaming",
32481
+ "flag-only",
32482
+ "unknown"
32483
+ ])
32484
+ })
32485
+ })),
32486
+ /**
32487
+ * Pick where this camera's detections come from. Writes `detectionSources`
32488
+ * and arms (or disarms) the vendor's boxed sub-stream that the choice
32489
+ * drives. Refuses `onboard` on a camera with no onboard detector.
32490
+ */
32491
+ setCameraDetectionSource: method(z.object({
32492
+ deviceId: z.number(),
32493
+ source: CameraDetectionSourceSchema
32494
+ }), z.object({ success: z.literal(true) }), {
32495
+ kind: "mutation",
32496
+ auth: "admin"
32497
+ }),
32235
32498
  /** Read every per-(node,device) override map for a device. Null when device has no overrides. */
32236
32499
  getCameraStepOverrides: method(z.object({ deviceId: z.number() }), z.record(z.string(), z.record(z.string(), z.record(z.string(), CameraStepOverridePatchSchema))).nullable()),
32237
32500
  /**
@@ -42089,7 +42352,14 @@ var TopologyNodeSchema = z.object({
42089
42352
  * completed a mutual-TLS handshake, `clear` otherwise. Absent for the hub,
42090
42353
  * for offline rows and when the hub cannot tell.
42091
42354
  */
42092
- meshTransport: z.enum(["tls", "clear"]).optional()
42355
+ meshTransport: z.enum(["tls", "clear"]).optional(),
42356
+ /**
42357
+ * Whether the hub holds this online AGENT's capability registration (its
42358
+ * `registerNode` manifest). `false` = online in the mesh but not ready: the
42359
+ * hub dropped the registration on a disconnect only it saw and the agent has
42360
+ * not re-sent it. Absent for the hub and offline rows.
42361
+ */
42362
+ capabilitiesRegistered: z.boolean().optional()
42093
42363
  });
42094
42364
  var CapUsageEdgeSchema = z.object({
42095
42365
  callerAddonId: z.string(),
@@ -52801,6 +53071,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
52801
53071
  addonId: null,
52802
53072
  access: "create"
52803
53073
  },
53074
+ "dataStoreProvider.transact": {
53075
+ capName: "data-store-provider",
53076
+ capScope: "system",
53077
+ addonId: null,
53078
+ access: "create"
53079
+ },
52804
53080
  "dataStoreProvider.update": {
52805
53081
  capName: "data-store-provider",
52806
53082
  capScope: "system",
@@ -55645,6 +55921,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
55645
55921
  addonId: null,
55646
55922
  access: "create"
55647
55923
  },
55924
+ "pipelineAnalytics.backfillRetrainOrigins": {
55925
+ capName: "pipeline-analytics",
55926
+ capScope: "device",
55927
+ addonId: null,
55928
+ access: "create"
55929
+ },
55648
55930
  "pipelineAnalytics.cancelRelocateMedia": {
55649
55931
  capName: "pipeline-analytics",
55650
55932
  capScope: "device",
@@ -56425,6 +56707,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
56425
56707
  addonId: null,
56426
56708
  access: "view"
56427
56709
  },
56710
+ "pipelineOrchestrator.getCameraDetectionSource": {
56711
+ capName: "pipeline-orchestrator",
56712
+ capScope: "system",
56713
+ addonId: null,
56714
+ access: "view"
56715
+ },
56428
56716
  "pipelineOrchestrator.getCameraMetrics": {
56429
56717
  capName: "pipeline-orchestrator",
56430
56718
  capScope: "system",
@@ -56653,6 +56941,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
56653
56941
  addonId: null,
56654
56942
  access: "create"
56655
56943
  },
56944
+ "pipelineOrchestrator.setCameraDetectionSource": {
56945
+ capName: "pipeline-orchestrator",
56946
+ capScope: "system",
56947
+ addonId: null,
56948
+ access: "create"
56949
+ },
56656
56950
  "pipelineOrchestrator.setCameraPipelineForAgent": {
56657
56951
  capName: "pipeline-orchestrator",
56658
56952
  capScope: "system",
@@ -57625,6 +57919,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
57625
57919
  addonId: null,
57626
57920
  access: "create"
57627
57921
  },
57922
+ "settingsStore.transact": {
57923
+ capName: "settings-store",
57924
+ capScope: "system",
57925
+ addonId: null,
57926
+ access: "create"
57927
+ },
57628
57928
  "settingsStore.update": {
57629
57929
  capName: "settings-store",
57630
57930
  capScope: "system",
@@ -58105,6 +58405,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
58105
58405
  addonId: null,
58106
58406
  access: "view"
58107
58407
  },
58408
+ "streamBroker.getLiveViewerCounts": {
58409
+ capName: "stream-broker",
58410
+ capScope: "system",
58411
+ addonId: null,
58412
+ access: "view"
58413
+ },
58108
58414
  "streamBroker.getPreBufferInfo": {
58109
58415
  capName: "stream-broker",
58110
58416
  capScope: "system",
@@ -62205,6 +62511,11 @@ Object.freeze({
62205
62511
  form: "single",
62206
62512
  optional: false
62207
62513
  }],
62514
+ "pipelineAnalytics.backfillRetrainOrigins": [{
62515
+ name: "deviceId",
62516
+ form: "single",
62517
+ optional: false
62518
+ }],
62208
62519
  "pipelineAnalytics.clearTrackRelation": [{
62209
62520
  name: "deviceId",
62210
62521
  form: "single",
@@ -62510,6 +62821,11 @@ Object.freeze({
62510
62821
  form: "single",
62511
62822
  optional: false
62512
62823
  }],
62824
+ "pipelineOrchestrator.getCameraDetectionSource": [{
62825
+ name: "deviceId",
62826
+ form: "single",
62827
+ optional: false
62828
+ }],
62513
62829
  "pipelineOrchestrator.getCameraMetrics": [{
62514
62830
  name: "deviceId",
62515
62831
  form: "single",
@@ -62570,6 +62886,11 @@ Object.freeze({
62570
62886
  form: "single",
62571
62887
  optional: false
62572
62888
  }],
62889
+ "pipelineOrchestrator.setCameraDetectionSource": [{
62890
+ name: "deviceId",
62891
+ form: "single",
62892
+ optional: false
62893
+ }],
62573
62894
  "pipelineOrchestrator.setCameraPipelineForAgent": [{
62574
62895
  name: "deviceId",
62575
62896
  form: "single",