camstack 1.2.65 → 1.2.67

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.
@@ -14522,7 +14522,7 @@ function date4(params) {
14522
14522
  // ../../node_modules/zod/v4/classic/external.js
14523
14523
  config(en_default());
14524
14524
 
14525
- // ../types/dist/sleep-bm0x6zZF.mjs
14525
+ // ../types/dist/sleep-ot6dTHCA.mjs
14526
14526
  var WELL_KNOWN_TABS = [
14527
14527
  {
14528
14528
  id: "overview",
@@ -15772,6 +15772,21 @@ var RelocateJobSchema = external_exports.object({
15772
15772
  bytesMoved: external_exports.number().int(),
15773
15773
  /** Total files discovered up front; null while (or when) unknown. */
15774
15774
  filesTotal: external_exports.number().int().nullable(),
15775
+ /**
15776
+ * Rows this run CORRECTED while moving them — a durable mutation the move
15777
+ * made that nobody asked for, so it is reported where the operator reads the
15778
+ * job rather than only in a log line.
15779
+ *
15780
+ * A footage segment records its byte count in its own NAME, and the durable
15781
+ * hour row derives its aggregates from those names. A file that does not
15782
+ * match its name therefore makes the ledger's sums — and with them quota and
15783
+ * pressure eviction — wrong by the difference, and only a rename can fix it.
15784
+ * On 2026-08-30 one such row also stalled a 110 749-file drain permanently.
15785
+ *
15786
+ * Absent on lanes where the question has no meaning: a media blob's size is
15787
+ * in its row, not in its name, so `MediaRelocateEngine` never reconciles one.
15788
+ */
15789
+ rowsReconciled: external_exports.number().int().nonnegative().optional(),
15775
15790
  startedAt: external_exports.number(),
15776
15791
  finishedAt: external_exports.number().nullable(),
15777
15792
  error: external_exports.string().nullable()
@@ -15814,11 +15829,18 @@ var RelocateMediaInputSchema = external_exports.object({
15814
15829
  /** Omitted = `move`, the pre-existing behaviour. */
15815
15830
  mode: MediaRelocateModeSchema.optional()
15816
15831
  });
15817
- var UnstampedEventMediaCountSchema = external_exports.object({
15818
- media: external_exports.number().int().nonnegative(),
15819
- retrainFrames: external_exports.number().int().nonnegative(),
15820
- total: external_exports.number().int().nonnegative()
15832
+ var UnstampedRowsSchema = external_exports.object({
15833
+ present: external_exports.boolean(),
15834
+ rows: external_exports.number().int().nonnegative().nullable()
15821
15835
  });
15836
+ var UnstampedEventMediaCountSchema = external_exports.object({
15837
+ media: UnstampedRowsSchema,
15838
+ retrainFrames: UnstampedRowsSchema,
15839
+ /** True when EITHER collection holds one. The refusal reads this. */
15840
+ anyPresent: external_exports.boolean(),
15841
+ /** Sum across both, or `null` when either lane could not be counted. */
15842
+ total: external_exports.number().int().nonnegative().nullable()
15843
+ }).nullable();
15822
15844
  var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: external_exports.string().min(1) });
15823
15845
  var StorageMigrationClassSchema = external_exports.enum([
15824
15846
  "recordings",
@@ -15865,6 +15887,10 @@ var StorageMigrationMoveProgressSchema = external_exports.object({
15865
15887
  /** The archive census — the **M** of "N of M" (D295). `null` = unknowable. */
15866
15888
  filesTotal: external_exports.number().int().nonnegative().nullable(),
15867
15889
  bytesMoved: external_exports.number().int().nonnegative(),
15890
+ /** Rows the mover corrected while moving them — see `RelocateJob`. Absent on
15891
+ * a lane that cannot reconcile. A migration that silently rewrote durable
15892
+ * rows would be the same failure as one that silently skipped them. */
15893
+ rowsReconciled: external_exports.number().int().nonnegative().optional(),
15868
15894
  /** The MOVER's start, not the migration's: a drain restarted after an addon
15869
15895
  * crash gets a new mover, and a rate computed from the migration's start
15870
15896
  * would silently average in the time nothing was running. */
@@ -20804,6 +20830,15 @@ var deviceManagerCapability = {
20804
20830
  * calls are sync. Bindings change rarely (only on wrapper toggle or
20805
20831
  * device add/remove) — clients invalidate via the
20806
20832
  * `capability.binding-changed` event.
20833
+ *
20834
+ * "A single round-trip" describes the CLIENT's side and used not to
20835
+ * describe the server's: until 2026-08-30 the resolver read the persisted
20836
+ * wrapper activations once per device, so answering this cost one
20837
+ * settings-door RPC per device — 1 020 on the live 1 019-device hub, and
20838
+ * it did not return in 240 s against `SystemMirror.init`'s 15 s budget.
20839
+ * The server side is now two reads for the whole fleet. Anything PERIODIC
20840
+ * still belongs on `getBindings` / `getBindingsBatch` (D12); this remains
20841
+ * a warm seed.
20807
20842
  */
20808
20843
  getAllBindings: method(external_exports.object({}), external_exports.array(DeviceBindingsForDeviceSchema)),
20809
20844
  /**
@@ -21202,6 +21237,80 @@ var embeddingEncoderCapability = {
21202
21237
  getInfo: method(external_exports.void(), EmbeddingInfoSchema, { auth: "admin" })
21203
21238
  }
21204
21239
  };
21240
+ var FailureReasonCountSchema = external_exports.object({
21241
+ /**
21242
+ * Why the attempt did not land, in the contributor's own vocabulary —
21243
+ * `worker-lease-gone`, `queue-overflow`, `timeout`, `empty-read`. The same
21244
+ * strings that already appear in this repo's logs and, where one exists, the
21245
+ * same string the per-track `previewMissReason` records (D276): a second
21246
+ * vocabulary for the same loss would make the row and the counter
21247
+ * un-joinable.
21248
+ */
21249
+ reason: external_exports.string(),
21250
+ count: external_exports.number().int().nonnegative()
21251
+ });
21252
+ var FailureContributionSchema = external_exports.object({
21253
+ /**
21254
+ * The failing path — `enrichment-crop`, `inference`, `plate-ocr`,
21255
+ * `person-over-vehicle`. Free text, for the reason `load-contribution` keeps
21256
+ * `unit` free: the families are owned by different addons and a shared enum
21257
+ * is a central list that rots invisibly.
21258
+ */
21259
+ family: external_exports.string(),
21260
+ /**
21261
+ * The NUMERIC device id — the same value every log line carries as
21262
+ * `tags.deviceId`. Never nullable and never absent: a contributor that
21263
+ * cannot name the camera must not emit the entry, because a fleet total
21264
+ * cannot answer the only question anybody asks of this surface.
21265
+ */
21266
+ deviceId: external_exports.number().int().positive(),
21267
+ /**
21268
+ * A second dimension inside the family: the model / step id for an inference
21269
+ * timeout, so "which camera AND which model" is one read. Absent when the
21270
+ * family has a single variant.
21271
+ */
21272
+ variant: external_exports.string().optional(),
21273
+ /**
21274
+ * Epoch ms this counter started — the INCARNATION MARKER. A consumer
21275
+ * differencing two reads must drop the interval when it changes, because the
21276
+ * counter restarted from zero in a respawned runner. Same discipline as
21277
+ * `LoadContribution.startedAtMs`.
21278
+ */
21279
+ sinceMs: external_exports.number(),
21280
+ /** Epoch ms it was read. `atMs - sinceMs` is the interval this covers. */
21281
+ atMs: external_exports.number(),
21282
+ /**
21283
+ * THE DENOMINATOR — every attempt on this path for this camera in the
21284
+ * window. A failure count published without it is the mistake this schema
21285
+ * exists to make impossible.
21286
+ */
21287
+ attempts: external_exports.number().int().nonnegative(),
21288
+ /** Attempts that landed. `attempts - succeeded` is the loss. */
21289
+ succeeded: external_exports.number().int().nonnegative(),
21290
+ /** The loss, partitioned. Sums to `attempts - succeeded`. */
21291
+ reasons: external_exports.array(FailureReasonCountSchema).readonly()
21292
+ });
21293
+ var failureContributionCapability = {
21294
+ name: "failure-contribution",
21295
+ scope: "system",
21296
+ mode: "collection",
21297
+ internal: true,
21298
+ methods: {
21299
+ /**
21300
+ * This addon's per-camera failure counters, read live from bounded in-RAM
21301
+ * state it already keeps. Inert: no persistence, no sampling, no timer.
21302
+ *
21303
+ * READING NEVER RESETS. The counters are CUMULATIVE since `sinceMs`, and a
21304
+ * consumer that wants a rate differences two reads. A draining read would
21305
+ * make two operators with the page open each destroy half of the other's
21306
+ * numbers, and `load-contribution` already settled the same question the
21307
+ * same way for `cpuSeconds`.
21308
+ */
21309
+ list: method(external_exports.void(), external_exports.array(FailureContributionSchema).readonly())
21310
+ },
21311
+ /** In-process only — enumerated through `addons.listCapabilityProviders`. */
21312
+ mount: { kind: "skip" }
21313
+ };
21205
21314
  var DirEntrySchema = external_exports.object({
21206
21315
  name: external_exports.string(),
21207
21316
  path: external_exports.string()
@@ -21740,145 +21849,6 @@ var llmCapability = {
21740
21849
  })
21741
21850
  }
21742
21851
  };
21743
- var LogChannelApplyResultSchema = external_exports.object({
21744
- /** How many declared channels are armed in this process after the call. */
21745
- armed: external_exports.number().int().min(0),
21746
- /**
21747
- * Names the document armed that this process does not declare. Reported
21748
- * rather than swallowed: a name here is either a typo or an addon that has
21749
- * not booted, and both deserve a line instead of silence.
21750
- */
21751
- unknown: external_exports.array(external_exports.string()).readonly()
21752
- });
21753
- var logChannelsCapability = {
21754
- name: "log-channels",
21755
- scope: "system",
21756
- mode: "collection",
21757
- internal: true,
21758
- methods: {
21759
- /** The channels this addon declares. Inert: no value, no state. */
21760
- list: method(external_exports.void(), external_exports.array(LogChannelDescriptorSchema).readonly()),
21761
- /**
21762
- * Refresh this process's mirror from the document's FULL set of armed
21763
- * windows.
21764
- *
21765
- * Full and not incremental on purpose: the document is the authority, so a
21766
- * channel it does not name is disarmed here. An incremental apply would
21767
- * let a disarm get lost in transit and leave a channel running that
21768
- * nobody can see is running.
21769
- */
21770
- apply: method(external_exports.object({ windows: external_exports.array(LogChannelWindowSchema).readonly() }), LogChannelApplyResultSchema, { kind: "mutation" })
21771
- },
21772
- /** In-process only — enumerated through `addons.listCapabilityProviders`. */
21773
- mount: { kind: "skip" }
21774
- };
21775
- var LogLevelSchema = external_exports.enum([
21776
- "debug",
21777
- "info",
21778
- "warn",
21779
- "error"
21780
- ]);
21781
- var LogEntrySchema = external_exports.object({
21782
- timestamp: external_exports.date(),
21783
- level: LogLevelSchema,
21784
- scope: external_exports.array(external_exports.string()),
21785
- message: external_exports.string(),
21786
- meta: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
21787
- tags: external_exports.record(external_exports.string(), external_exports.string()).optional()
21788
- });
21789
- var logDestinationCapability = {
21790
- name: "log-destination",
21791
- scope: "system",
21792
- mode: "collection",
21793
- internal: true,
21794
- methods: {
21795
- write: method(LogEntrySchema, external_exports.void(), { kind: "mutation" }),
21796
- query: method(external_exports.object({
21797
- scope: external_exports.array(external_exports.string()).optional(),
21798
- level: LogLevelSchema.optional(),
21799
- since: external_exports.date().optional(),
21800
- until: external_exports.date().optional(),
21801
- limit: external_exports.number().optional(),
21802
- tags: external_exports.record(external_exports.string(), external_exports.string()).optional()
21803
- }), external_exports.array(LogEntrySchema).readonly())
21804
- },
21805
- /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
21806
- mount: { kind: "skip" }
21807
- };
21808
- var FailureReasonCountSchema = external_exports.object({
21809
- /**
21810
- * Why the attempt did not land, in the contributor's own vocabulary —
21811
- * `worker-lease-gone`, `queue-overflow`, `timeout`, `empty-read`. The same
21812
- * strings that already appear in this repo's logs and, where one exists, the
21813
- * same string the per-track `previewMissReason` records (D276): a second
21814
- * vocabulary for the same loss would make the row and the counter
21815
- * un-joinable.
21816
- */
21817
- reason: external_exports.string(),
21818
- count: external_exports.number().int().nonnegative()
21819
- });
21820
- var FailureContributionSchema = external_exports.object({
21821
- /**
21822
- * The failing path — `enrichment-crop`, `inference`, `plate-ocr`,
21823
- * `person-over-vehicle`. Free text, for the reason `load-contribution` keeps
21824
- * `unit` free: the families are owned by different addons and a shared enum
21825
- * is a central list that rots invisibly.
21826
- */
21827
- family: external_exports.string(),
21828
- /**
21829
- * The NUMERIC device id — the same value every log line carries as
21830
- * `tags.deviceId`. Never nullable and never absent: a contributor that
21831
- * cannot name the camera must not emit the entry, because a fleet total
21832
- * cannot answer the only question anybody asks of this surface.
21833
- */
21834
- deviceId: external_exports.number().int().positive(),
21835
- /**
21836
- * A second dimension inside the family: the model / step id for an inference
21837
- * timeout, so "which camera AND which model" is one read. Absent when the
21838
- * family has a single variant.
21839
- */
21840
- variant: external_exports.string().optional(),
21841
- /**
21842
- * Epoch ms this counter started — the INCARNATION MARKER. A consumer
21843
- * differencing two reads must drop the interval when it changes, because the
21844
- * counter restarted from zero in a respawned runner. Same discipline as
21845
- * `LoadContribution.startedAtMs`.
21846
- */
21847
- sinceMs: external_exports.number(),
21848
- /** Epoch ms it was read. `atMs - sinceMs` is the interval this covers. */
21849
- atMs: external_exports.number(),
21850
- /**
21851
- * THE DENOMINATOR — every attempt on this path for this camera in the
21852
- * window. A failure count published without it is the mistake this schema
21853
- * exists to make impossible.
21854
- */
21855
- attempts: external_exports.number().int().nonnegative(),
21856
- /** Attempts that landed. `attempts - succeeded` is the loss. */
21857
- succeeded: external_exports.number().int().nonnegative(),
21858
- /** The loss, partitioned. Sums to `attempts - succeeded`. */
21859
- reasons: external_exports.array(FailureReasonCountSchema).readonly()
21860
- });
21861
- var failureContributionCapability = {
21862
- name: "failure-contribution",
21863
- scope: "system",
21864
- mode: "collection",
21865
- internal: true,
21866
- methods: {
21867
- /**
21868
- * This addon's per-camera failure counters, read live from bounded in-RAM
21869
- * state it already keeps. Inert: no persistence, no sampling, no timer.
21870
- *
21871
- * READING NEVER RESETS. The counters are CUMULATIVE since `sinceMs`, and a
21872
- * consumer that wants a rate differences two reads. A draining read would
21873
- * make two operators with the page open each destroy half of the other's
21874
- * numbers, and `load-contribution` already settled the same question the
21875
- * same way for `cpuSeconds`.
21876
- */
21877
- list: method(external_exports.void(), external_exports.array(FailureContributionSchema).readonly())
21878
- },
21879
- /** In-process only — enumerated through `addons.listCapabilityProviders`. */
21880
- mount: { kind: "skip" }
21881
- };
21882
21852
  var LOAD_CONTRIBUTION_ROLES = [
21883
21853
  "decode",
21884
21854
  "transcode",
@@ -21958,6 +21928,71 @@ var loadContributionCapability = {
21958
21928
  /** In-process only — enumerated through `addons.listCapabilityProviders`. */
21959
21929
  mount: { kind: "skip" }
21960
21930
  };
21931
+ var LogChannelApplyResultSchema = external_exports.object({
21932
+ /** How many declared channels are armed in this process after the call. */
21933
+ armed: external_exports.number().int().min(0),
21934
+ /**
21935
+ * Names the document armed that this process does not declare. Reported
21936
+ * rather than swallowed: a name here is either a typo or an addon that has
21937
+ * not booted, and both deserve a line instead of silence.
21938
+ */
21939
+ unknown: external_exports.array(external_exports.string()).readonly()
21940
+ });
21941
+ var logChannelsCapability = {
21942
+ name: "log-channels",
21943
+ scope: "system",
21944
+ mode: "collection",
21945
+ internal: true,
21946
+ methods: {
21947
+ /** The channels this addon declares. Inert: no value, no state. */
21948
+ list: method(external_exports.void(), external_exports.array(LogChannelDescriptorSchema).readonly()),
21949
+ /**
21950
+ * Refresh this process's mirror from the document's FULL set of armed
21951
+ * windows.
21952
+ *
21953
+ * Full and not incremental on purpose: the document is the authority, so a
21954
+ * channel it does not name is disarmed here. An incremental apply would
21955
+ * let a disarm get lost in transit and leave a channel running that
21956
+ * nobody can see is running.
21957
+ */
21958
+ apply: method(external_exports.object({ windows: external_exports.array(LogChannelWindowSchema).readonly() }), LogChannelApplyResultSchema, { kind: "mutation" })
21959
+ },
21960
+ /** In-process only — enumerated through `addons.listCapabilityProviders`. */
21961
+ mount: { kind: "skip" }
21962
+ };
21963
+ var LogLevelSchema = external_exports.enum([
21964
+ "debug",
21965
+ "info",
21966
+ "warn",
21967
+ "error"
21968
+ ]);
21969
+ var LogEntrySchema = external_exports.object({
21970
+ timestamp: external_exports.date(),
21971
+ level: LogLevelSchema,
21972
+ scope: external_exports.array(external_exports.string()),
21973
+ message: external_exports.string(),
21974
+ meta: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
21975
+ tags: external_exports.record(external_exports.string(), external_exports.string()).optional()
21976
+ });
21977
+ var logDestinationCapability = {
21978
+ name: "log-destination",
21979
+ scope: "system",
21980
+ mode: "collection",
21981
+ internal: true,
21982
+ methods: {
21983
+ write: method(LogEntrySchema, external_exports.void(), { kind: "mutation" }),
21984
+ query: method(external_exports.object({
21985
+ scope: external_exports.array(external_exports.string()).optional(),
21986
+ level: LogLevelSchema.optional(),
21987
+ since: external_exports.date().optional(),
21988
+ until: external_exports.date().optional(),
21989
+ limit: external_exports.number().optional(),
21990
+ tags: external_exports.record(external_exports.string(), external_exports.string()).optional()
21991
+ }), external_exports.array(LogEntrySchema).readonly())
21992
+ },
21993
+ /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
21994
+ mount: { kind: "skip" }
21995
+ };
21961
21996
  var LoginStageEnum = external_exports.enum(["primary", "second-factor"]);
21962
21997
  var RedirectLoginMethodSchema = external_exports.object({
21963
21998
  kind: external_exports.literal("redirect"),
@@ -26046,13 +26081,18 @@ var MediaFileKindEnum = external_exports.enum([
26046
26081
  "keyFrameSmall",
26047
26082
  "thumbnailSmall"
26048
26083
  ]);
26049
- var MediaFileSchema = external_exports.object({
26084
+ var MediaFileRefSchema = external_exports.object({
26050
26085
  key: external_exports.string(),
26051
26086
  kind: MediaFileKindEnum,
26052
- base64: external_exports.string(),
26053
26087
  sizeBytes: external_exports.number(),
26054
26088
  timestamp: external_exports.number()
26055
26089
  });
26090
+ var MediaFileSchema = MediaFileRefSchema.extend({
26091
+ /** `/addon/<addonId>/event-media/<encoded stored key>`. Always present. */
26092
+ url: external_exports.string(),
26093
+ /** @deprecated Transitional — see the schema docblock. Use {@link url}. */
26094
+ base64: external_exports.string()
26095
+ });
26056
26096
  var MediaFileInfoSchema = MediaFileSchema.omit({ base64: true });
26057
26097
  var RetrainMacroClassSchema = external_exports.enum([
26058
26098
  "person",
@@ -26784,6 +26824,17 @@ var pipelineAnalyticsCapability = {
26784
26824
  * happens to stamp it. This count is what the migration planner's
26785
26825
  * non-blocking gate reads; `relocateMedia({ mode: 'seal' })` is what drives
26786
26826
  * it to zero.
26827
+ *
26828
+ * TWO indexed statements per collection, not a walk. It used to page the
26829
+ * whole collection at 200 rows per RPC ordered by an unindexed column, so
26830
+ * on the live hub — 1 254 576 rows — it hit the 60 s RPC deadline every
26831
+ * time it was called, and the migration it gates could never start. The
26832
+ * cheap question (`present`: is there at least one) is asked first and
26833
+ * separately from the expensive one (`rows`), because only the first has
26834
+ * to be answerable for the gate to do its job.
26835
+ *
26836
+ * **`null` is "not measurable", never zero** — at either level. An
26837
+ * unreadable collection must not read as a sealed one.
26787
26838
  */
26788
26839
  countUnstampedEventMedia: method(external_exports.object({}), UnstampedEventMediaCountSchema, { auth: "admin" }),
26789
26840
  /**
@@ -27107,6 +27158,26 @@ var pipelineAnalyticsCapability = {
27107
27158
  deviceId: external_exports.number()
27108
27159
  }), external_exports.array(MediaFileInfoSchema).readonly()),
27109
27160
  /**
27161
+ * What media an EVENT has, without any of it — the twin `getEventMedia`
27162
+ * never had.
27163
+ *
27164
+ * `listTrackMedia` above got this treatment because a track's media is
27165
+ * 5-8 MB. An event's is worse per row, not better: an old-style event owns
27166
+ * a `crop` AND a native-resolution `fullFrameBoxed`, and the track DETAIL
27167
+ * modal — the one surface that legitimately shows the big kinds — unions
27168
+ * both listings to build its filmstrip. It then renders every tile from
27169
+ * the `event-media` plane by key and throws the bytes away. Measured on
27170
+ * the live hub: one event's `fullFrameBoxed` is 2 824 077 B, base64'd to
27171
+ * ~3.8 MB, allocated whole in hub-main's heap, for a list of keys.
27172
+ *
27173
+ * Same `deviceId` authorization subject as `getEventMedia`, and the same
27174
+ * rows — this is a projection of that method, never a different question.
27175
+ */
27176
+ listEventMedia: method(external_exports.object({
27177
+ eventId: external_exports.string(),
27178
+ deviceId: external_exports.number()
27179
+ }), external_exports.array(MediaFileInfoSchema).readonly()),
27180
+ /**
27110
27181
  * Search object events by text query using CLIP cosine similarity.
27111
27182
  * Encodes `text` via the `embedding-encoder` cap, queries the
27112
27183
  * `ObjectEmbeddingStore` with optional prefilters, ranks all matching
@@ -32547,7 +32618,7 @@ var FaceClusterSchema = external_exports.object({
32547
32618
  var MediaFileLiteSchema$1 = external_exports.object({
32548
32619
  key: external_exports.string(),
32549
32620
  kind: external_exports.string(),
32550
- base64: external_exports.string(),
32621
+ url: external_exports.string(),
32551
32622
  sizeBytes: external_exports.number(),
32552
32623
  timestamp: external_exports.number()
32553
32624
  });
@@ -35440,7 +35511,7 @@ var PlateInfoSchema = external_exports.object({
35440
35511
  var MediaFileLiteSchema = external_exports.object({
35441
35512
  key: external_exports.string(),
35442
35513
  kind: external_exports.string(),
35443
- base64: external_exports.string(),
35514
+ url: external_exports.string(),
35444
35515
  sizeBytes: external_exports.number(),
35445
35516
  timestamp: external_exports.number()
35446
35517
  });
@@ -41982,6 +42053,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
41982
42053
  addonId: null,
41983
42054
  access: "view"
41984
42055
  },
42056
+ "pipelineAnalytics.listEventMedia": {
42057
+ capName: "pipeline-analytics",
42058
+ capScope: "device",
42059
+ addonId: null,
42060
+ access: "view"
42061
+ },
41985
42062
  "pipelineAnalytics.listGroups": {
41986
42063
  capName: "pipeline-analytics",
41987
42064
  capScope: "device",
@@ -45605,6 +45682,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
45605
45682
  form: "array",
45606
45683
  optional: false
45607
45684
  }],
45685
+ "pipelineAnalytics.listEventMedia": [{
45686
+ name: "deviceId",
45687
+ form: "single",
45688
+ optional: false
45689
+ }],
45608
45690
  "pipelineAnalytics.listGroups": [{
45609
45691
  name: "deviceIds",
45610
45692
  form: "array",
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-OJ7OCZA6.js";
4
+ } from "./chunk-MYPVHFJL.js";
5
5
  import "./chunk-LMMQX4CK.js";
6
6
 
7
7
  // src/cli.ts
@@ -38,7 +38,7 @@ async function runServe(args) {
38
38
  ...typeof values.data === "string" ? { data: values.data } : {}
39
39
  };
40
40
  Object.assign(process.env, buildServeEnv(opts));
41
- await import("./launcher-3XCU3XJF.js");
41
+ await import("./launcher-5FCVBL5M.js");
42
42
  }
43
43
 
44
44
  // src/commands/agent.ts
@@ -83,7 +83,7 @@ async function runAgent(args) {
83
83
  ...typeof values.port === "string" ? { port: values.port } : {}
84
84
  };
85
85
  Object.assign(process.env, buildAgentEnv(opts));
86
- await import("./launcher-3XCU3XJF.js");
86
+ await import("./launcher-5FCVBL5M.js");
87
87
  }
88
88
 
89
89
  // src/commands/setup.ts
@@ -1130,7 +1130,7 @@ function isUnknown(_value) {
1130
1130
  return true;
1131
1131
  }
1132
1132
  async function resolveServerInteractive(presetNamespace) {
1133
- const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-GAZVSA4I.js");
1133
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-PJINOUDH.js");
1134
1134
  if (presetNamespace) {
1135
1135
  const spinner4 = clack.spinner();
1136
1136
  spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
@@ -5,7 +5,7 @@ import {
5
5
  filterHubNodes,
6
6
  resolveHubFromDiscovered,
7
7
  runDiscover
8
- } from "./chunk-OJ7OCZA6.js";
8
+ } from "./chunk-MYPVHFJL.js";
9
9
  import "./chunk-LMMQX4CK.js";
10
10
  export {
11
11
  DEFAULT_HUB_HTTPS_PORT,