camstack 1.2.145 → 1.2.147

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-CnLyvg3w.mjs
14525
+ // ../types/dist/sleep-DEuj7E3j.mjs
14526
14526
  var AUDIO_CHUNK_FORMATS = [
14527
14527
  "f32le",
14528
14528
  "pcmu",
@@ -15384,7 +15384,7 @@ function sleep(ms) {
15384
15384
  return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
15385
15385
  }
15386
15386
 
15387
- // ../types/dist/canonical-hash-rO1sRmEK.mjs
15387
+ // ../types/dist/canonical-hash-Ch5bSjFG.mjs
15388
15388
  import { createHash } from "crypto";
15389
15389
  var DEFAULT_MAX_UNIT_BYTES = 16 * 1024 * 1024;
15390
15390
 
@@ -15447,7 +15447,23 @@ var VideoEncodeSchema = external_exports.object({
15447
15447
  "zerolatency",
15448
15448
  "film",
15449
15449
  "animation"
15450
- ]).optional()
15450
+ ]).optional(),
15451
+ /**
15452
+ * ONE slice per access unit.
15453
+ *
15454
+ * `-tune zerolatency` turns on x264's sliced threads, and a frame then leaves
15455
+ * the encoder as five NAL slices that share one RTP timestamp and carry one
15456
+ * marker bit. A libwebrtc depacketiser sees five frame-starts and one
15457
+ * frame-end per frame: the first pictures render and the video then freezes
15458
+ * for good while the audio, on its own plane, plays on. Measured on this hub
15459
+ * 2026-09-13 against the Echo, and reduced to one slice by this flag alone.
15460
+ *
15461
+ * A NAMED field and not a raw flag, because {@link EgressEncodeSchema} omits
15462
+ * `outputArgs` on purpose: an opaque array is part of the sharing key, so two
15463
+ * consumers meaning the same thing spelled differently would stop sharing one
15464
+ * child. Absent means "whatever the encoder does" — today's behaviour.
15465
+ */
15466
+ singleSlicePerFrame: external_exports.boolean().optional()
15451
15467
  });
15452
15468
  var AudioEncodeSchema = external_exports.union([external_exports.literal("passthrough"), external_exports.object({
15453
15469
  codec: external_exports.enum([
@@ -15506,7 +15522,11 @@ var WEBRTC_EGRESS_PROFILE = {
15506
15522
  };
15507
15523
  var ALEXA_EGRESS_PROFILE = {
15508
15524
  ...BASE_LIVE_EGRESS_PROFILE,
15509
- audio: { codec: "opus" }
15525
+ audio: { codec: "opus" },
15526
+ video: {
15527
+ ...BASE_LIVE_EGRESS_PROFILE.video,
15528
+ singleSlicePerFrame: true
15529
+ }
15510
15530
  };
15511
15531
  var wiringProbeKindSchema = external_exports.enum([
15512
15532
  "singleton",
@@ -18768,6 +18788,39 @@ var cameraPipelineConfigCapability = {
18768
18788
  exposesDeviceSettings: true,
18769
18789
  methods: {}
18770
18790
  };
18791
+ var StreamSignalSchema = external_exports.object({
18792
+ /** Stable id chosen by the provider, e.g. `'motion'`, `'person'`, `'tamper'`. */
18793
+ code: external_exports.string().min(1),
18794
+ /** What an operator reads in the picker. The provider's own wording. */
18795
+ label: external_exports.string().min(1),
18796
+ /**
18797
+ * Whether the provider recommends this signal ON when a camera is first set
18798
+ * up. A provider knows which of its signals are cheap and reliable; an
18799
+ * operator should not have to discover that by trial. Reolink recommends
18800
+ * both of its own.
18801
+ */
18802
+ recommended: external_exports.boolean()
18803
+ });
18804
+ var StreamSignalsStatusSchema = external_exports.object({
18805
+ signals: external_exports.array(StreamSignalSchema),
18806
+ lastFetchedAt: external_exports.number()
18807
+ });
18808
+ var streamSignalsCapability = {
18809
+ name: "stream-signals",
18810
+ scope: "device",
18811
+ deviceNative: true,
18812
+ mode: "singleton",
18813
+ deviceTypes: Object.values(DeviceType),
18814
+ runtimeState: StreamSignalsStatusSchema,
18815
+ methods: {
18816
+ /**
18817
+ * What this device can emit. Empty is a valid and common answer — most
18818
+ * cameras have nothing to offer here, and an empty list is what makes the
18819
+ * broker's picker show nothing rather than a false choice.
18820
+ */
18821
+ listSignals: method(external_exports.void(), external_exports.array(StreamSignalSchema).readonly())
18822
+ }
18823
+ };
18771
18824
  var StreamFormatSchema = external_exports.enum([
18772
18825
  "webrtc",
18773
18826
  "hls",
@@ -19120,6 +19173,46 @@ var streamBrokerCapability = {
19120
19173
  mode: "singleton",
19121
19174
  exposesDeviceSettings: true,
19122
19175
  methods: {
19176
+ /**
19177
+ * A device reporting that one of ITS OWN signals just fired.
19178
+ *
19179
+ * The provider calls this; nothing polls. The broker then decides whether
19180
+ * to wake the source, and the decision has two terms that must BOTH hold:
19181
+ *
19182
+ * - the signal is ENABLED for this camera (the operator's per-camera
19183
+ * choice — a camera may declare a signal the operator does not want
19184
+ * waking anything), and
19185
+ * - a consumer is actually attached and waiting on the prestream. Waking
19186
+ * a camera nobody is watching is the one thing a battery camera must
19187
+ * never do, and a signal arriving with no consumer is exactly that.
19188
+ *
19189
+ * Reported, never inferred: a signal that fires while the stream is
19190
+ * already up refreshes the hold instead of starting a second one, which is
19191
+ * what makes continuous motion keep a camera awake without stacking
19192
+ * timers.
19193
+ *
19194
+ * `code` is the provider's own, from `streamSignals.listSignals`. An
19195
+ * unknown code is REFUSED rather than treated as a wildcard wake — a
19196
+ * provider and an operator disagreeing about a name must not become a
19197
+ * camera that wakes for everything.
19198
+ */
19199
+ reportStreamSignal: method(external_exports.object({
19200
+ deviceId: external_exports.number().int().nonnegative(),
19201
+ /** The provider's signal code. */
19202
+ code: external_exports.string().min(1),
19203
+ /** Ms epoch. Absent ⇒ now. */
19204
+ at: external_exports.number().optional()
19205
+ }), external_exports.object({
19206
+ /** Whether the broker acted on it, and if not, why. */
19207
+ accepted: external_exports.boolean(),
19208
+ reason: external_exports.enum([
19209
+ "woke",
19210
+ "hold-extended",
19211
+ "not-enabled",
19212
+ "no-consumer",
19213
+ "unknown-code"
19214
+ ])
19215
+ }), { kind: "mutation" }),
19123
19216
  publishCameraStream: method(external_exports.object({
19124
19217
  deviceId: external_exports.number().int().nonnegative(),
19125
19218
  camStreamId: external_exports.string().min(1),
@@ -19597,6 +19690,16 @@ var PickStreamRequirementsSchema = external_exports.object({
19597
19690
  acceptCodecs: external_exports.array(StreamCodecSchema).readonly().optional(),
19598
19691
  /** Minimum vertical resolution. Streams shorter than this are dropped. */
19599
19692
  minHeight: external_exports.number().int().positive().optional(),
19693
+ /**
19694
+ * Maximum vertical resolution. Streams TALLER than this are dropped.
19695
+ *
19696
+ * A consumer can have a ceiling as real as its floor: Alexa documents
19697
+ * 480p to 1080p, and a 4K stream is as unusable to an Echo as a 360p one.
19698
+ * Without this the ceiling had to be re-implemented by every caller — and
19699
+ * one caller implementing it privately is how a second scoring authority
19700
+ * gets born.
19701
+ */
19702
+ maxHeight: external_exports.number().int().positive().optional(),
19600
19703
  /** Minimum horizontal resolution. */
19601
19704
  minWidth: external_exports.number().int().positive().optional(),
19602
19705
  /**
@@ -19613,7 +19716,22 @@ var PickStreamRequirementsSchema = external_exports.object({
19613
19716
  * transcoded" guard: if the device is already serving the consumer's
19614
19717
  * codec end-to-end, there's nothing to optimise.
19615
19718
  */
19616
- requireSiblingCodec: external_exports.array(StreamCodecSchema).readonly().optional()
19719
+ requireSiblingCodec: external_exports.array(StreamCodecSchema).readonly().optional(),
19720
+ /**
19721
+ * Whether a stream the consumer CANNOT decode may still be picked, on the
19722
+ * understanding that it will be transcoded.
19723
+ *
19724
+ * Default `false` — today's behaviour, and the right one for a bypass
19725
+ * question ("is there a stream I can forward untouched?"). Set `true` to
19726
+ * ask the larger question: "what is the best stream for me, transcoding if
19727
+ * I must?" A stream that satisfies `acceptCodecs` always outranks one that
19728
+ * does not, so a passthrough is never lost to a transcode; the answer says
19729
+ * which it is in {@link PickedCamStreamSchema.transcodes}.
19730
+ *
19731
+ * This is what lets one picker serve both the bypass and the full source
19732
+ * choice, instead of a consumer scoring privately when the bypass misses.
19733
+ */
19734
+ allowTranscode: external_exports.boolean().optional()
19617
19735
  }).readonly();
19618
19736
  var PickStreamPreferencesSchema = external_exports.object({
19619
19737
  /**
@@ -19627,12 +19745,32 @@ var PickStreamPreferencesSchema = external_exports.object({
19627
19745
  * picks the tallest stream; `'lowest'` picks the shortest (used by
19628
19746
  * memory-constrained consumers / Apple Home guest sessions).
19629
19747
  */
19630
- resolutionPreference: external_exports.enum(["highest", "lowest"]).optional()
19748
+ resolutionPreference: external_exports.enum(["highest", "lowest"]).optional(),
19749
+ /**
19750
+ * The height the consumer actually wants to DELIVER.
19751
+ *
19752
+ * Not a constraint — an ordering. With it set, the SMALLEST stream at or
19753
+ * above the target wins, and only if nothing reaches it does the tallest
19754
+ * take over. Pulling 1296 lines to draw 720 on a 1280x800 Echo panel costs
19755
+ * a decode and buys nothing, and `resolutionPreference: 'highest'` cannot
19756
+ * express that: it says "as big as possible", which is a different wish.
19757
+ *
19758
+ * Ignored when absent, so every existing caller keeps its ordering.
19759
+ */
19760
+ targetHeight: external_exports.number().int().positive().optional()
19631
19761
  }).readonly();
19632
19762
  var PickedCamStreamSchema = external_exports.object({
19633
19763
  camStreamId: external_exports.string(),
19634
19764
  codec: external_exports.string().optional(),
19635
19765
  resolution: CamStreamResolutionSchema.optional(),
19766
+ /**
19767
+ * Whether serving this stream requires a decode + re-encode.
19768
+ *
19769
+ * `false` is a stream the consumer can take as it stands. Only ever `true`
19770
+ * when the caller asked for it with `allowTranscode`, so a caller that did
19771
+ * not ask cannot be handed a cost it never agreed to pay.
19772
+ */
19773
+ transcodes: external_exports.boolean(),
19636
19774
  /** One-line explanation of why this stream won — for logs / debug UI. */
19637
19775
  reason: external_exports.string()
19638
19776
  });
@@ -24443,6 +24581,8 @@ var NcSystemEventKindSchema = external_exports.enum([
24443
24581
  "device-enabled",
24444
24582
  "device-battery-low",
24445
24583
  "device-battery-normal",
24584
+ "device-consumable-low",
24585
+ "device-consumable-normal",
24446
24586
  "stream-online",
24447
24587
  "stream-offline",
24448
24588
  "node-online",
@@ -24461,6 +24601,7 @@ var NcSystemEventKindSchema = external_exports.enum([
24461
24601
  "addon-updated",
24462
24602
  "server-updated",
24463
24603
  "export-completed",
24604
+ "backup-completed",
24464
24605
  "camera-online",
24465
24606
  "camera-offline",
24466
24607
  "camera-disabled",
@@ -27320,13 +27461,91 @@ var SummariesQueryInput = external_exports.object({
27320
27461
  deviceIds: external_exports.array(external_exports.number()).min(1),
27321
27462
  since: external_exports.number().optional(),
27322
27463
  until: external_exports.number().optional(),
27323
- limit: external_exports.number().int().min(1).max(200).default(50)
27464
+ limit: external_exports.number().int().min(1).max(200).default(50),
27465
+ /** The same member-wise filter {@link listRecentSummaries} takes — one
27466
+ * meaning of "dog" on every summary surface. */
27467
+ classes: external_exports.array(external_exports.string().min(1).max(60)).max(40).optional()
27468
+ });
27469
+ var SummaryMemberSchema = external_exports.object({
27470
+ trackId: external_exports.string(),
27471
+ /**
27472
+ * The track's class at the time it JOINED, or `null` when it was unresolved
27473
+ * and the track no longer exists to fill it.
27474
+ *
27475
+ * The join, not the latest opinion: class voting can re-decide a track's
27476
+ * class afterwards, and a group's composition is the history of who came
27477
+ * together. A consumer counts these to badge a thumbnail — "two people and a
27478
+ * dog" — rather than being handed a second, denormalised tally that would
27479
+ * drift from the members it claims to describe.
27480
+ */
27481
+ className: external_exports.string().nullable(),
27482
+ /** `primary` is the one member that carries the group's identity. */
27483
+ role: external_exports.enum([
27484
+ "primary",
27485
+ "sibling",
27486
+ "child"
27487
+ ]).nullable(),
27488
+ joinedAt: external_exports.number(),
27489
+ /** Tier 1 — the sub-class (`dog`, `van`), resolved from the member's track
27490
+ * at read time. Absent when nothing resolved, never an empty string. */
27491
+ label: external_exports.string().optional(),
27492
+ /** Tier 2 — the instance: a person's name, a plate. Absent when the pipeline
27493
+ * recognised nobody, and absent for a member whose track has been pruned —
27494
+ * a thumbnail that names the wrong person is worse than one naming nobody. */
27495
+ subLabel: external_exports.string().optional()
27324
27496
  });
27325
- var SummariesPageSchema = external_exports.object({ summaries: external_exports.array(SummarySchema).readonly() });
27326
27497
  var SummaryDetailSchema = external_exports.object({
27327
27498
  summary: SummarySchema,
27328
- /** Member track ids, in absorption order. */
27329
- trackIds: external_exports.array(external_exports.string()).readonly()
27499
+ /** Members in absorption order, oldest join first. */
27500
+ members: external_exports.array(SummaryMemberSchema).readonly()
27501
+ });
27502
+ var SummaryListItemSchema = external_exports.object({
27503
+ summary: SummarySchema,
27504
+ /** Class counts, most numerous first; `className: null` is a member whose
27505
+ * class never resolved, counted so the counts add up to `memberCount`. */
27506
+ classes: external_exports.array(external_exports.object({
27507
+ className: external_exports.string().nullable(),
27508
+ count: external_exports.number().int().positive()
27509
+ })).readonly()
27510
+ });
27511
+ var SummariesPageSchema = external_exports.object({ summaries: external_exports.array(SummaryListItemSchema).readonly() });
27512
+ var RecentSummariesQueryInput = external_exports.object({
27513
+ /** Devices to merge. An empty array yields an empty page. */
27514
+ deviceIds: external_exports.array(external_exports.number()),
27515
+ /** Window lower bound on `lastActiveAt` (inclusive). */
27516
+ since: external_exports.number().optional(),
27517
+ /** Window upper bound on `lastActiveAt` (inclusive). */
27518
+ until: external_exports.number().optional(),
27519
+ limit: external_exports.number().int().min(1).max(500).default(100),
27520
+ /** Opaque continuation cursor from a previous page's `nextCursor`. */
27521
+ cursor: external_exports.string().optional(),
27522
+ /**
27523
+ * Restrict to these classes — THE SAME FIELD `listRecentTracks` takes, and
27524
+ * deliberately the same name: the events filter tree emits one list of ticked
27525
+ * taxonomy nodes, and a summaries feed that called it something else would
27526
+ * make the operator's one filter component produce two shapes.
27527
+ *
27528
+ * A question about the MEMBERS: a group matches when ANY of them does. "Show
27529
+ * me the arrivals with a dog" has to return the group of four people who had
27530
+ * one with them; a filter on the group's own fields could only ever answer
27531
+ * about its primary.
27532
+ *
27533
+ * Matched against all THREE tiers of a member — the class (`animal`), the
27534
+ * sub-class (`dog`) and the instance (a name, a plate) — because which tier a
27535
+ * ticked node lives on is the taxonomy's business, not the caller's. `dog` is
27536
+ * an event kind in the tree and a tier-1 label on an `animal` track; a filter
27537
+ * that read only the class would answer "animal" and never "dog".
27538
+ *
27539
+ * ABSENT or EMPTY means no filter — absent is not a selection of none.
27540
+ */
27541
+ classes: external_exports.array(external_exports.string().min(1).max(60)).max(40).optional()
27542
+ });
27543
+ var RecentSummariesPageSchema = external_exports.object({
27544
+ /** Ordered by (`lastActiveAt` DESC, id DESC). Same light item as
27545
+ * {@link listSummaries} — one list shape, so a card renders the same
27546
+ * whichever feed drew it. */
27547
+ summaries: external_exports.array(SummaryListItemSchema).readonly(),
27548
+ nextCursor: external_exports.string().nullable()
27330
27549
  });
27331
27550
  var RecentTracksPageSchema = external_exports.object({
27332
27551
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
@@ -27678,6 +27897,11 @@ var pipelineAnalyticsCapability = {
27678
27897
  listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
27679
27898
  /** Newest first by `openedAt`, for a camera set, inside an optional window. */
27680
27899
  listSummaries: method(SummariesQueryInput, SummariesPageSchema),
27900
+ /**
27901
+ * The PAGED feed — the reel and the Events gallery. Same cursor contract as
27902
+ * {@link listRecentTracks}, so one screen cannot hold two ideas of newest.
27903
+ */
27904
+ listRecentSummaries: method(RecentSummariesQueryInput, RecentSummariesPageSchema),
27681
27905
  /** One summary with its member track ids; `null` for an id nobody wrote. */
27682
27906
  getSummary: method(external_exports.object({ id: external_exports.string() }), SummaryDetailSchema.nullable()),
27683
27907
  clearTracks: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.void(), {
@@ -32142,10 +32366,28 @@ var webrtcSessionCapability = {
32142
32366
  getSessionState: method(external_exports.object({
32143
32367
  deviceId: external_exports.number().int().nonnegative(),
32144
32368
  sessionId: external_exports.string()
32145
- }), external_exports.object({ pendingRenegotiation: external_exports.object({
32146
- target: WebrtcStreamTargetSchema,
32147
- epoch: external_exports.number()
32148
- }).nullable() }))
32369
+ }), external_exports.object({
32370
+ pendingRenegotiation: external_exports.object({
32371
+ target: WebrtcStreamTargetSchema,
32372
+ epoch: external_exports.number()
32373
+ }).nullable(),
32374
+ /**
32375
+ * Whether the session still EXISTS.
32376
+ *
32377
+ * A consumer that holds a resource for the life of a session needs to
32378
+ * be able to ask, because a session does not always end the way it
32379
+ * began. Measured on this hub 2026-09-13: an Echo that got stuck never
32380
+ * sent `SessionDisconnected`, so the Alexa exporter's
32381
+ * `releaseEgressTranscode` never ran, and a 2304x1296 HEVC to 720p
32382
+ * H.264 transcode kept running for NOBODY for more than twenty
32383
+ * minutes. The WebRTC session had logged `WebRTC session closed`
32384
+ * minutes earlier — the broker knew; the holder had no way to ask.
32385
+ *
32386
+ * `false` for a session id the provider has never heard of, which is
32387
+ * the same answer as "it ended": either way nothing is holding it up.
32388
+ */
32389
+ alive: external_exports.boolean()
32390
+ }))
32149
32391
  },
32150
32392
  /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
32151
32393
  mount: { kind: "server-provided" }
@@ -39867,7 +40109,29 @@ var LoggingSettingsPatchSchema = external_exports.object({
39867
40109
  * disarmed the channels it did not mention would make the Levels page and
39868
40110
  * the Diagnostics page fight over the same value.
39869
40111
  */
39870
- channels: external_exports.array(LogChannelWindowPatchSchema).readonly().optional()
40112
+ channels: external_exports.array(LogChannelWindowPatchSchema).readonly().optional(),
40113
+ /**
40114
+ * How many days the analytics OPS LOG is kept — the audit trail of what
40115
+ * retention actually deleted.
40116
+ *
40117
+ * It lives HERE, on the logging document, and not on the analytics addon's
40118
+ * settings form, on the operator's instruction: every other log-ish window in
40119
+ * this system is configured through this one document, and a retention audit
40120
+ * configured somewhere else is a second place to look when the question is
40121
+ * "what happened to my data".
40122
+ *
40123
+ * That placement has a cost worth stating: this document ships in the
40124
+ * framework closure, so this knob needs a published `@camstack/server` while
40125
+ * the four windows beside it (D485) reach a node on `camstack deploy`.
40126
+ *
40127
+ * `retention-model.ts` argued this one must NOT follow a device window,
40128
+ * because the audit trail is the history of the SWEEP and not of the camera.
40129
+ * That argument stands and is untouched — what changes is that 30 days stops
40130
+ * being a constant nobody can reach. `0` keeps it forever. The floor is 1 day
40131
+ * rather than 0-as-delete: an audit log truncated to nothing is precisely the
40132
+ * state in which the next 9.5 GiB leak cannot be explained.
40133
+ */
40134
+ opsLogRetentionDays: external_exports.number().int().min(0).max(3650).optional()
39871
40135
  });
39872
40136
  var ReportedLoadContributionSchema = LoadContributionSchema.extend({ addonId: external_exports.string() });
39873
40137
  var ReportedFailureContributionSchema = FailureContributionSchema.extend({ addonId: external_exports.string() });
@@ -39906,6 +40170,14 @@ var LoggingSettingsStateSchema = external_exports.object({
39906
40170
  channels: external_exports.array(LogChannelDescriptorSchema).readonly(),
39907
40171
  /** The channels ARMED right now, each with its deadline. */
39908
40172
  activeChannels: external_exports.array(LogChannelWindowStateSchema).readonly(),
40173
+ /**
40174
+ * The ops-log window in days, as it is in force. `0` = kept forever.
40175
+ *
40176
+ * Reported rather than left to the caller's memory of what it wrote: this is
40177
+ * the value the analytics sweep will actually use, and an operator asking how
40178
+ * long their audit trail lives should not have to infer it from a default.
40179
+ */
40180
+ opsLogRetentionDays: external_exports.number().int().min(0),
39909
40181
  persisted: external_exports.boolean()
39910
40182
  });
39911
40183
  var systemCapability = {
@@ -44435,6 +44707,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
44435
44707
  addonId: null,
44436
44708
  access: "view"
44437
44709
  },
44710
+ "pipelineAnalytics.listRecentSummaries": {
44711
+ capName: "pipeline-analytics",
44712
+ capScope: "device",
44713
+ addonId: null,
44714
+ access: "view"
44715
+ },
44438
44716
  "pipelineAnalytics.listRecentTracks": {
44439
44717
  capName: "pipeline-analytics",
44440
44718
  capScope: "device",
@@ -46397,6 +46675,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
46397
46675
  addonId: null,
46398
46676
  access: "create"
46399
46677
  },
46678
+ "streamBroker.reportStreamSignal": {
46679
+ capName: "stream-broker",
46680
+ capScope: "system",
46681
+ addonId: null,
46682
+ access: "create"
46683
+ },
46400
46684
  "streamBroker.restartProfile": {
46401
46685
  capName: "stream-broker",
46402
46686
  capScope: "system",
@@ -46481,6 +46765,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
46481
46765
  addonId: null,
46482
46766
  access: "create"
46483
46767
  },
46768
+ "streamSignals.listSignals": {
46769
+ capName: "stream-signals",
46770
+ capScope: "device",
46771
+ addonId: null,
46772
+ access: "view"
46773
+ },
46484
46774
  "switch.setState": {
46485
46775
  capName: "switch",
46486
46776
  capScope: "device",
@@ -48262,6 +48552,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
48262
48552
  form: "single",
48263
48553
  optional: true
48264
48554
  }],
48555
+ "pipelineAnalytics.listRecentSummaries": [{
48556
+ name: "deviceIds",
48557
+ form: "array",
48558
+ optional: false
48559
+ }],
48265
48560
  "pipelineAnalytics.listRecentTracks": [{
48266
48561
  name: "deviceIds",
48267
48562
  form: "array",
@@ -48848,6 +49143,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
48848
49143
  form: "single",
48849
49144
  optional: false
48850
49145
  }],
49146
+ "streamBroker.reportStreamSignal": [{
49147
+ name: "deviceId",
49148
+ form: "single",
49149
+ optional: false
49150
+ }],
48851
49151
  "streamBroker.restartProfile": [{
48852
49152
  name: "deviceId",
48853
49153
  form: "single",
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-W67ATFOA.js";
4
+ } from "./chunk-IGFZA22D.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-LICFWRGL.js");
41
+ await import("./launcher-26BZ4JHD.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-LICFWRGL.js");
86
+ await import("./launcher-26BZ4JHD.js");
87
87
  }
88
88
 
89
89
  // src/commands/setup.ts
@@ -1140,7 +1140,7 @@ function isUnknown(_value) {
1140
1140
  return true;
1141
1141
  }
1142
1142
  async function resolveServerInteractive(presetNamespace) {
1143
- const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-CPDHVQWB.js");
1143
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-ZCOCQKSU.js");
1144
1144
  if (presetNamespace) {
1145
1145
  const spinner4 = clack.spinner();
1146
1146
  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-W67ATFOA.js";
8
+ } from "./chunk-IGFZA22D.js";
9
9
  import "./chunk-LMMQX4CK.js";
10
10
  export {
11
11
  DEFAULT_HUB_HTTPS_PORT,