@camstack/addon-provider-rtsp 0.1.25 → 0.1.26

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/addon.mjs CHANGED
@@ -8693,10 +8693,30 @@ const StatusSchema = object({
8693
8693
  }
8694
8694
  });
8695
8695
  const LinkStateSchema = _enum(["unlinked", "linked", "error"]);
8696
+ const ExportSetupFieldSchema = object({
8697
+ label: string(),
8698
+ value: string(),
8699
+ /** Mask the value by default + render a reveal toggle (client id, secrets). */
8700
+ secret: boolean().optional()
8701
+ });
8702
+ const ExportSetupSchema = object({
8703
+ /** A string to render as a scannable QR — HAP `X-HM://…` URI, a pairing URL, etc. Omitted when there's nothing to scan. */
8704
+ qr: string().optional(),
8705
+ /** Label/value rows shown with a copy button (HAP setup code, OAuth URLs, client id, linked-account count, …). */
8706
+ fields: array(ExportSetupFieldSchema).readonly().optional(),
8707
+ /** Free-form operator instructions rendered above the fields. */
8708
+ note: string().optional()
8709
+ });
8696
8710
  const DeviceExportStatusSchema = object({
8697
8711
  linkState: LinkStateSchema,
8698
8712
  exposedDeviceCount: number(),
8699
- error: string().optional()
8713
+ error: string().optional(),
8714
+ /**
8715
+ * Optional pairing/account info the panel renders in a generic
8716
+ * "Setup" section. Addon-agnostic — the addon id identifies the
8717
+ * export target, never an `ecosystem` key here.
8718
+ */
8719
+ setup: ExportSetupSchema.optional()
8700
8720
  });
8701
8721
  const DeviceKindSchema = string();
8702
8722
  const ExposedDeviceSchema = object({
@@ -12134,7 +12154,25 @@ const MeshStatusSchema = object({
12134
12154
  * doesn't rotate keys for the bound host. Operator-facing surface
12135
12155
  * for "your access expires on …" banners.
12136
12156
  */
12137
- keyExpiry: number().nullable()
12157
+ keyExpiry: number().nullable(),
12158
+ // ── Onboard-daemon handoff (Tailscale, generic slot) ────────────
12159
+ /**
12160
+ * When the provider runs its OWN mesh daemon (e.g. the Tailscale
12161
+ * client addon in `onboard` mode spawns a private `tailscaled`),
12162
+ * this carries the local control-socket path. Companion addons that
12163
+ * must drive the SAME daemon — chiefly `tailscale-ingress` for
12164
+ * Serve/Funnel — read it to point their CLI at the right socket
12165
+ * instead of the system default. Empty when the provider uses the
12166
+ * host's system daemon (or doesn't have the concept).
12167
+ */
12168
+ daemonSocket: string().optional(),
12169
+ /**
12170
+ * Path to the mesh CLI binary the provider downloaded for onboard
12171
+ * mode. Companion addons reuse it so they don't need a system
12172
+ * install when the operator chose a fully self-contained mesh.
12173
+ * Empty in host mode.
12174
+ */
12175
+ daemonCliPath: string().optional()
12138
12176
  });
12139
12177
  ({
12140
12178
  methods: {
@@ -13020,6 +13058,21 @@ const AddonAutoUpdateSchema = ChannelWithInheritSchema;
13020
13058
  const RestartAddonResultSchema = unknown();
13021
13059
  const InstallPackageResultSchema = unknown();
13022
13060
  const ReloadPackagesResultSchema = unknown();
13061
+ const UpdateFrameworkPackageResultSchema = object({
13062
+ packageName: string(),
13063
+ fromVersion: string(),
13064
+ toVersion: string(),
13065
+ /** Ms-epoch the server scheduled its self-restart. */
13066
+ restartingAt: number()
13067
+ });
13068
+ const FrameworkPackageStatusSchema = object({
13069
+ packageName: string(),
13070
+ currentVersion: string(),
13071
+ latestVersion: string().nullable(),
13072
+ hasUpdate: boolean(),
13073
+ /** Optional manifest description for the row tooltip. */
13074
+ description: string().optional()
13075
+ });
13023
13076
  const LogStreamEntrySchema = object({
13024
13077
  timestamp: string(),
13025
13078
  level: string(),
@@ -13079,13 +13132,29 @@ const CustomActionInputSchema = object({
13079
13132
  object({ query: string().optional() }),
13080
13133
  array(SearchResultSchema)
13081
13134
  ),
13135
+ /**
13136
+ * Available package updates for a node. `nodeId` omitted (or
13137
+ * `'hub'`) checks the hub's own installed packages; an agent
13138
+ * `nodeId` checks that agent's installed roster against npm
13139
+ * (the hub does the npm lookups + diff — agents stay npm-free).
13140
+ */
13082
13141
  listUpdates: method(
13083
- _void(),
13142
+ object({ nodeId: string().optional() }),
13084
13143
  array(PackageUpdateSchema).readonly(),
13085
13144
  { auth: "admin" }
13086
13145
  ),
13146
+ /**
13147
+ * Update one package on a node. `nodeId` omitted (or `'hub'`)
13148
+ * installs on the hub via npm; an agent `nodeId` makes the hub
13149
+ * pack the resolved version and push the tarball to that agent
13150
+ * (`$agent.deploy` + `$agent.reload`) — agents need no npm runtime.
13151
+ */
13087
13152
  updatePackage: method(
13088
- object({ name: string().min(1), version: string().optional() }),
13153
+ object({
13154
+ name: string().min(1),
13155
+ version: string().optional(),
13156
+ nodeId: string().optional()
13157
+ }),
13089
13158
  unknown(),
13090
13159
  { kind: "mutation", auth: "admin" }
13091
13160
  ),
@@ -13106,12 +13175,105 @@ const CustomActionInputSchema = object({
13106
13175
  object({ rolledBackTo: string().nullable() }),
13107
13176
  { kind: "mutation", auth: "admin" }
13108
13177
  ),
13109
- forceRefresh: method(_void(), unknown(), { kind: "mutation", auth: "admin" }),
13178
+ /** Re-check updates for a node, bypassing any cache. `nodeId`
13179
+ * omitted (or `'hub'`) refreshes the hub; an agent `nodeId`
13180
+ * re-checks that agent's roster. */
13181
+ forceRefresh: method(
13182
+ object({ nodeId: string().optional() }),
13183
+ unknown(),
13184
+ { kind: "mutation", auth: "admin" }
13185
+ ),
13110
13186
  restartServer: method(
13111
13187
  object({ confirm: literal(true) }),
13112
13188
  unknown(),
13113
13189
  { kind: "mutation", auth: "admin" }
13114
13190
  ),
13191
+ /**
13192
+ * Most-recent restart marker (kind / packageName / from→to versions
13193
+ * / requestedBy / requestedAt). Returns `null` when this process
13194
+ * didn't boot from a tracked restart, or when the
13195
+ * post-boot retention window (5 min) has elapsed.
13196
+ *
13197
+ * Drives the admin-UI reconnect overlay's success toast — the
13198
+ * `system.restart-completed` event itself is fired before the
13199
+ * client has time to re-subscribe, so the client queries this on
13200
+ * first reconnect instead.
13201
+ */
13202
+ getLastRestart: method(
13203
+ _void(),
13204
+ object({
13205
+ kind: _enum(["framework-update", "manual", "system"]),
13206
+ packageName: string().optional(),
13207
+ fromVersion: string().optional(),
13208
+ toVersion: string().optional(),
13209
+ requestedBy: string().optional(),
13210
+ requestedAt: number()
13211
+ }).nullable(),
13212
+ { auth: "admin" }
13213
+ ),
13214
+ /**
13215
+ * Snapshot of the framework packages installed under the hub's
13216
+ * `<appRoot>/node_modules/`. Each row carries the currently
13217
+ * installed version and (best-effort) the latest version
13218
+ * available on npm. Drives the admin-UI "System packages" panel.
13219
+ *
13220
+ * Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
13221
+ */
13222
+ listFrameworkPackages: method(
13223
+ _void(),
13224
+ array(FrameworkPackageStatusSchema).readonly(),
13225
+ { auth: "admin" }
13226
+ ),
13227
+ /**
13228
+ * Cluster-wide capability-provider discovery. Returns the list of
13229
+ * `{ addonId, mode, isActive }` tuples for whatever addon(s)
13230
+ * currently provide the requested capability across the cluster.
13231
+ *
13232
+ * Why this lives on `addons` (and not on a `capabilities` cap of
13233
+ * its own): the hub's main-process `CapabilityRegistry` already
13234
+ * aggregates registrations from every forked group-runner and
13235
+ * remote agent via Moleculer event propagation — there's no
13236
+ * cross-process registry mirror to build, just an introspection
13237
+ * shim.
13238
+ *
13239
+ * Use this from addon code when you need to know whether another
13240
+ * addon has registered a specific cap (e.g. `tailscale-ingress`
13241
+ * checking `tailscale-client` is up before calling `tailscale
13242
+ * serve`). Don't reach for `ctx.capabilities.getCollectionEntries`
13243
+ * — that reads the LOCAL registry of the calling addon's group
13244
+ * runner and never sees providers in other processes. See
13245
+ * `CLAUDE.md` → Critical rules → ctx.api vs ctx.capabilities.
13246
+ */
13247
+ listCapabilityProviders: method(
13248
+ object({ capName: string().min(1) }),
13249
+ array(object({
13250
+ addonId: string(),
13251
+ mode: _enum(["singleton", "collection"]),
13252
+ isActive: boolean()
13253
+ })).readonly()
13254
+ ),
13255
+ /**
13256
+ * Live-update one of the framework packages marked
13257
+ * `camstack.system: true` (`@camstack/types|kernel|core|sdk|ui-library`).
13258
+ * Runs `npm install --prefix <appRoot> <name>@<version> --no-save`,
13259
+ * writes a `.restart-pending` marker, emits `system.restarting`
13260
+ * and schedules a graceful process exit. The supervisor (Docker /
13261
+ * Electron / systemd) brings the hub back up; on first boot after
13262
+ * the restart the marker fires `system.restart-completed`.
13263
+ *
13264
+ * `version` defaults to `'latest'`. The allow-list of valid
13265
+ * `packageName` values is enforced server-side.
13266
+ *
13267
+ * Spec: docs/superpowers/specs/2026-05-14-framework-live-update-design.md
13268
+ */
13269
+ updateFrameworkPackage: method(
13270
+ object({
13271
+ packageName: string().min(1),
13272
+ version: string().optional()
13273
+ }),
13274
+ UpdateFrameworkPackageResultSchema,
13275
+ { kind: "mutation", auth: "admin" }
13276
+ ),
13115
13277
  getVersions: method(
13116
13278
  object({ name: string() }),
13117
13279
  array(PackageVersionInfoSchema).readonly()
@@ -13182,6 +13344,7 @@ var EventCategory = /* @__PURE__ */ ((EventCategory2) => {
13182
13344
  EventCategory2["SystemBoot"] = "system.boot";
13183
13345
  EventCategory2["SystemAddonsReady"] = "system.addons-ready";
13184
13346
  EventCategory2["SystemRestarting"] = "system.restarting";
13347
+ EventCategory2["SystemRestartCompleted"] = "system.restart-completed";
13185
13348
  EventCategory2["SystemReadyState"] = "system.ready-state";
13186
13349
  EventCategory2["AddonStarted"] = "addon.started";
13187
13350
  EventCategory2["AddonStopped"] = "addon.stopped";