@camstack/addon-tailscale 1.0.4 → 1.0.5

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.
@@ -24,7 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  enumerable: true
25
25
  }) : target, mod));
26
26
  //#endregion
27
- const require_dist = require("../dist-hLRTPO9P.js");
27
+ const require_dist = require("../dist-C3Gth0Ap.js");
28
28
  let node_child_process = require("node:child_process");
29
29
  let node_util = require("node:util");
30
30
  let node_fs = require("node:fs");
@@ -1,4 +1,4 @@
1
- import { i as networkAccessCapability, n as EventCategory, r as meshNetworkCapability, t as BaseAddon } from "../dist-O8xvcftz.mjs";
1
+ import { i as networkAccessCapability, n as EventCategory, r as meshNetworkCapability, t as BaseAddon } from "../dist-Dr1YikI7.mjs";
2
2
  import { execFile, spawn } from "node:child_process";
3
3
  import { promisify } from "node:util";
4
4
  import * as fs from "node:fs";
@@ -4981,6 +4981,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
4981
4981
  */
4982
4982
  EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
4983
4983
  /**
4984
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
4985
+ * the detection-pipeline provider on every state change of its lazy
4986
+ * engine-provisioning machine (idle → installing → verifying → ready,
4987
+ * or → failed with a `nextRetryAt`). Payload is the
4988
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
4989
+ * node. The Pipeline page subscribes to drive a live "installing
4990
+ * OpenVINO… / ready" indicator per node without polling
4991
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
4992
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
4993
+ */
4994
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
4995
+ /**
4984
4996
  * Cluster topology snapshot. Carries the same payload returned by
4985
4997
  * `nodes.topology` (every reachable node + addons + processes).
4986
4998
  * Emitted by the hub on any agent / addon lifecycle change
@@ -9145,6 +9157,24 @@ var DetectorOutputSchema = object({
9145
9157
  inferenceMs: number(),
9146
9158
  modelId: string()
9147
9159
  });
9160
+ var EngineProvisioningSchema = object({
9161
+ runtimeId: _enum([
9162
+ "onnx",
9163
+ "openvino",
9164
+ "coreml"
9165
+ ]).nullable(),
9166
+ device: string().nullable(),
9167
+ state: _enum([
9168
+ "idle",
9169
+ "installing",
9170
+ "verifying",
9171
+ "ready",
9172
+ "failed"
9173
+ ]),
9174
+ progress: number().optional(),
9175
+ error: string().optional(),
9176
+ nextRetryAt: number().optional()
9177
+ });
9148
9178
  var PipelineStepInputSchema = lazy(() => object({
9149
9179
  addonId: string(),
9150
9180
  modelId: string(),
@@ -9213,7 +9243,7 @@ var PipelineRunResultBridge = custom();
9213
9243
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
9214
9244
  kind: "mutation",
9215
9245
  auth: "admin"
9216
- }), method(_void(), record(string(), object({
9246
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
9217
9247
  modelId: string(),
9218
9248
  settings: record(string(), unknown()).readonly()
9219
9249
  }))), method(object({ steps: record(string(), object({
@@ -12800,7 +12830,10 @@ var AgentAddonConfigSchema = object({
12800
12830
  modelId: string(),
12801
12831
  settings: record(string(), unknown()).readonly()
12802
12832
  });
12803
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
12833
+ var AgentPipelineSettingsSchema = object({
12834
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
12835
+ maxCameras: number().int().nonnegative().nullable().default(null)
12836
+ });
12804
12837
  var CameraPipelineForAgentSchema = object({
12805
12838
  steps: array(PipelineStepInputSchema).readonly(),
12806
12839
  audio: object({
@@ -12902,6 +12935,133 @@ var GlobalMetricsSchema = object({
12902
12935
  * capability providers.
12903
12936
  */
12904
12937
  var CapabilityBindingsSchema = record(string(), string());
12938
+ /** Source block — always present; derives from the stream catalog. */
12939
+ var CameraSourceStatusSchema = object({ streams: array(object({
12940
+ camStreamId: string(),
12941
+ codec: string(),
12942
+ width: number(),
12943
+ height: number(),
12944
+ fps: number(),
12945
+ kind: string()
12946
+ })).readonly() });
12947
+ /** Assignment block — always present (orchestrator-local, no remote call). */
12948
+ var CameraAssignmentStatusSchema = object({
12949
+ detectionNodeId: string().nullable(),
12950
+ decoderNodeId: string().nullable(),
12951
+ audioNodeId: string().nullable(),
12952
+ pinned: object({
12953
+ detection: boolean(),
12954
+ decoder: boolean(),
12955
+ audio: boolean()
12956
+ }),
12957
+ reasons: object({
12958
+ detection: string().optional(),
12959
+ decoder: string().optional(),
12960
+ audio: string().optional()
12961
+ })
12962
+ });
12963
+ /** Broker block — null when the broker stage is unreachable or inactive. */
12964
+ var CameraBrokerStatusSchema = object({
12965
+ profiles: array(object({
12966
+ profile: string(),
12967
+ status: string(),
12968
+ codec: string(),
12969
+ width: number(),
12970
+ height: number(),
12971
+ subscribers: number(),
12972
+ inFps: number(),
12973
+ outFps: number()
12974
+ })).readonly(),
12975
+ webrtcSessions: number(),
12976
+ rtspRestream: boolean()
12977
+ });
12978
+ /** Shared-memory ring statistics within the decoder block. */
12979
+ var CameraDecoderShmSchema = object({
12980
+ framesWritten: number(),
12981
+ getFrameHits: number(),
12982
+ getFrameMisses: number(),
12983
+ budgetMb: number()
12984
+ });
12985
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
12986
+ var CameraDecoderStatusSchema = object({
12987
+ nodeId: string(),
12988
+ formats: array(string()).readonly(),
12989
+ sessionCount: number(),
12990
+ shm: CameraDecoderShmSchema
12991
+ });
12992
+ /** Motion block — null when motion detection is not active for this device. */
12993
+ var CameraMotionStatusSchema = object({
12994
+ enabled: boolean(),
12995
+ fps: number()
12996
+ });
12997
+ /** Detection provisioning sub-block. */
12998
+ var CameraDetectionProvisioningSchema = object({
12999
+ state: _enum([
13000
+ "idle",
13001
+ "installing",
13002
+ "verifying",
13003
+ "ready",
13004
+ "failed"
13005
+ ]),
13006
+ error: string().optional()
13007
+ });
13008
+ /** Detection phase — derived from the runner's engine phase. */
13009
+ var CameraDetectionPhaseSchema = _enum([
13010
+ "idle",
13011
+ "watching",
13012
+ "active"
13013
+ ]);
13014
+ /** Detection block — null when no detection node is assigned or reachable. */
13015
+ var CameraDetectionStatusSchema = object({
13016
+ nodeId: string(),
13017
+ engine: object({
13018
+ backend: string(),
13019
+ device: string()
13020
+ }),
13021
+ phase: CameraDetectionPhaseSchema,
13022
+ configuredFps: number(),
13023
+ actualFps: number(),
13024
+ queueDepth: number(),
13025
+ avgInferenceMs: number(),
13026
+ provisioning: CameraDetectionProvisioningSchema
13027
+ });
13028
+ /** Audio block — null when no audio node is assigned or reachable. */
13029
+ var CameraAudioStatusSchema = object({
13030
+ nodeId: string(),
13031
+ enabled: boolean()
13032
+ });
13033
+ /** Recording block — null when no recording cap is active for this device. */
13034
+ var CameraRecordingStatusSchema = object({
13035
+ mode: _enum([
13036
+ "off",
13037
+ "continuous",
13038
+ "events"
13039
+ ]),
13040
+ active: boolean(),
13041
+ storageBytes: number()
13042
+ });
13043
+ /**
13044
+ * Aggregated per-camera pipeline status — server-composed, single call.
13045
+ *
13046
+ * The `assignment` and `source` blocks are always present.
13047
+ * Every other block is `null` when the stage is inactive or unreachable
13048
+ * during the bounded parallel fan-out in the orchestrator implementation.
13049
+ *
13050
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
13051
+ */
13052
+ var CameraStatusSchema = object({
13053
+ deviceId: number(),
13054
+ assignment: CameraAssignmentStatusSchema,
13055
+ source: CameraSourceStatusSchema,
13056
+ broker: CameraBrokerStatusSchema.nullable(),
13057
+ decoder: CameraDecoderStatusSchema.nullable(),
13058
+ motion: CameraMotionStatusSchema.nullable(),
13059
+ detection: CameraDetectionStatusSchema.nullable(),
13060
+ audio: CameraAudioStatusSchema.nullable(),
13061
+ recording: CameraRecordingStatusSchema.nullable(),
13062
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
13063
+ fetchedAt: number()
13064
+ });
12905
13065
  method(object({
12906
13066
  deviceId: number(),
12907
13067
  agentNodeId: string()
@@ -12969,6 +13129,12 @@ method(object({
12969
13129
  }), {
12970
13130
  kind: "mutation",
12971
13131
  auth: "admin"
13132
+ }), method(object({
13133
+ agentNodeId: string(),
13134
+ maxCameras: number().int().nonnegative().nullable()
13135
+ }), object({ success: literal(true) }), {
13136
+ kind: "mutation",
13137
+ auth: "admin"
12972
13138
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
12973
13139
  deviceId: number(),
12974
13140
  addonId: string(),
@@ -12994,7 +13160,7 @@ method(object({
12994
13160
  }), method(object({
12995
13161
  deviceId: number(),
12996
13162
  agentNodeId: string().optional()
12997
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
13163
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
12998
13164
  name: string(),
12999
13165
  description: string().optional(),
13000
13166
  config: CameraPipelineConfigSchema
@@ -18864,6 +19030,12 @@ Object.freeze({
18864
19030
  addonId: null,
18865
19031
  access: "view"
18866
19032
  },
19033
+ "pipelineExecutor.getEngineProvisioning": {
19034
+ capName: "pipeline-executor",
19035
+ capScope: "system",
19036
+ addonId: null,
19037
+ access: "view"
19038
+ },
18867
19039
  "pipelineExecutor.getGlobalPipelineConfig": {
18868
19040
  capName: "pipeline-executor",
18869
19041
  capScope: "system",
@@ -19068,6 +19240,18 @@ Object.freeze({
19068
19240
  addonId: null,
19069
19241
  access: "view"
19070
19242
  },
19243
+ "pipelineOrchestrator.getCameraStatus": {
19244
+ capName: "pipeline-orchestrator",
19245
+ capScope: "system",
19246
+ addonId: null,
19247
+ access: "view"
19248
+ },
19249
+ "pipelineOrchestrator.getCameraStatuses": {
19250
+ capName: "pipeline-orchestrator",
19251
+ capScope: "system",
19252
+ addonId: null,
19253
+ access: "view"
19254
+ },
19071
19255
  "pipelineOrchestrator.getCameraStepOverrides": {
19072
19256
  capName: "pipeline-orchestrator",
19073
19257
  capScope: "system",
@@ -19152,6 +19336,12 @@ Object.freeze({
19152
19336
  addonId: null,
19153
19337
  access: "create"
19154
19338
  },
19339
+ "pipelineOrchestrator.setAgentMaxCameras": {
19340
+ capName: "pipeline-orchestrator",
19341
+ capScope: "system",
19342
+ addonId: null,
19343
+ access: "create"
19344
+ },
19155
19345
  "pipelineOrchestrator.setCameraPipelineForAgent": {
19156
19346
  capName: "pipeline-orchestrator",
19157
19347
  capScope: "system",
@@ -4981,6 +4981,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
4981
4981
  */
4982
4982
  EventCategory["PipelineEngineMetricsSnapshot"] = "pipeline.engine-metrics-snapshot";
4983
4983
  /**
4984
+ * Per-node detection-engine runtime-provisioning transition. Emitted by
4985
+ * the detection-pipeline provider on every state change of its lazy
4986
+ * engine-provisioning machine (idle → installing → verifying → ready,
4987
+ * or → failed with a `nextRetryAt`). Payload is the
4988
+ * `EngineProvisioningState` snapshot; `event.source.nodeId` carries the
4989
+ * node. The Pipeline page subscribes to drive a live "installing
4990
+ * OpenVINO… / ready" indicator per node without polling
4991
+ * `pipelineExecutor.getEngineProvisioning`. Telemetry-grade (D8): the UI
4992
+ * also reads the cap snapshot on mount / reconnect. Phase 2.
4993
+ */
4994
+ EventCategory["PipelineEngineProvisioning"] = "pipeline.engine-provisioning";
4995
+ /**
4984
4996
  * Cluster topology snapshot. Carries the same payload returned by
4985
4997
  * `nodes.topology` (every reachable node + addons + processes).
4986
4998
  * Emitted by the hub on any agent / addon lifecycle change
@@ -9145,6 +9157,24 @@ var DetectorOutputSchema = object({
9145
9157
  inferenceMs: number(),
9146
9158
  modelId: string()
9147
9159
  });
9160
+ var EngineProvisioningSchema = object({
9161
+ runtimeId: _enum([
9162
+ "onnx",
9163
+ "openvino",
9164
+ "coreml"
9165
+ ]).nullable(),
9166
+ device: string().nullable(),
9167
+ state: _enum([
9168
+ "idle",
9169
+ "installing",
9170
+ "verifying",
9171
+ "ready",
9172
+ "failed"
9173
+ ]),
9174
+ progress: number().optional(),
9175
+ error: string().optional(),
9176
+ nextRetryAt: number().optional()
9177
+ });
9148
9178
  var PipelineStepInputSchema = lazy(() => object({
9149
9179
  addonId: string(),
9150
9180
  modelId: string(),
@@ -9213,7 +9243,7 @@ var PipelineRunResultBridge = custom();
9213
9243
  method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngineChoiceSchema), method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)), method(_void(), PipelineEngineChoiceSchema, {
9214
9244
  kind: "mutation",
9215
9245
  auth: "admin"
9216
- }), method(_void(), record(string(), object({
9246
+ }), method(object({ nodeId: string() }), EngineProvisioningSchema), method(_void(), record(string(), object({
9217
9247
  modelId: string(),
9218
9248
  settings: record(string(), unknown()).readonly()
9219
9249
  }))), method(object({ steps: record(string(), object({
@@ -12800,7 +12830,10 @@ var AgentAddonConfigSchema = object({
12800
12830
  modelId: string(),
12801
12831
  settings: record(string(), unknown()).readonly()
12802
12832
  });
12803
- var AgentPipelineSettingsSchema = object({ addonDefaults: record(string(), AgentAddonConfigSchema).readonly() });
12833
+ var AgentPipelineSettingsSchema = object({
12834
+ addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
12835
+ maxCameras: number().int().nonnegative().nullable().default(null)
12836
+ });
12804
12837
  var CameraPipelineForAgentSchema = object({
12805
12838
  steps: array(PipelineStepInputSchema).readonly(),
12806
12839
  audio: object({
@@ -12902,6 +12935,133 @@ var GlobalMetricsSchema = object({
12902
12935
  * capability providers.
12903
12936
  */
12904
12937
  var CapabilityBindingsSchema = record(string(), string());
12938
+ /** Source block — always present; derives from the stream catalog. */
12939
+ var CameraSourceStatusSchema = object({ streams: array(object({
12940
+ camStreamId: string(),
12941
+ codec: string(),
12942
+ width: number(),
12943
+ height: number(),
12944
+ fps: number(),
12945
+ kind: string()
12946
+ })).readonly() });
12947
+ /** Assignment block — always present (orchestrator-local, no remote call). */
12948
+ var CameraAssignmentStatusSchema = object({
12949
+ detectionNodeId: string().nullable(),
12950
+ decoderNodeId: string().nullable(),
12951
+ audioNodeId: string().nullable(),
12952
+ pinned: object({
12953
+ detection: boolean(),
12954
+ decoder: boolean(),
12955
+ audio: boolean()
12956
+ }),
12957
+ reasons: object({
12958
+ detection: string().optional(),
12959
+ decoder: string().optional(),
12960
+ audio: string().optional()
12961
+ })
12962
+ });
12963
+ /** Broker block — null when the broker stage is unreachable or inactive. */
12964
+ var CameraBrokerStatusSchema = object({
12965
+ profiles: array(object({
12966
+ profile: string(),
12967
+ status: string(),
12968
+ codec: string(),
12969
+ width: number(),
12970
+ height: number(),
12971
+ subscribers: number(),
12972
+ inFps: number(),
12973
+ outFps: number()
12974
+ })).readonly(),
12975
+ webrtcSessions: number(),
12976
+ rtspRestream: boolean()
12977
+ });
12978
+ /** Shared-memory ring statistics within the decoder block. */
12979
+ var CameraDecoderShmSchema = object({
12980
+ framesWritten: number(),
12981
+ getFrameHits: number(),
12982
+ getFrameMisses: number(),
12983
+ budgetMb: number()
12984
+ });
12985
+ /** Decoder block — null when the decoder stage is unreachable or inactive. */
12986
+ var CameraDecoderStatusSchema = object({
12987
+ nodeId: string(),
12988
+ formats: array(string()).readonly(),
12989
+ sessionCount: number(),
12990
+ shm: CameraDecoderShmSchema
12991
+ });
12992
+ /** Motion block — null when motion detection is not active for this device. */
12993
+ var CameraMotionStatusSchema = object({
12994
+ enabled: boolean(),
12995
+ fps: number()
12996
+ });
12997
+ /** Detection provisioning sub-block. */
12998
+ var CameraDetectionProvisioningSchema = object({
12999
+ state: _enum([
13000
+ "idle",
13001
+ "installing",
13002
+ "verifying",
13003
+ "ready",
13004
+ "failed"
13005
+ ]),
13006
+ error: string().optional()
13007
+ });
13008
+ /** Detection phase — derived from the runner's engine phase. */
13009
+ var CameraDetectionPhaseSchema = _enum([
13010
+ "idle",
13011
+ "watching",
13012
+ "active"
13013
+ ]);
13014
+ /** Detection block — null when no detection node is assigned or reachable. */
13015
+ var CameraDetectionStatusSchema = object({
13016
+ nodeId: string(),
13017
+ engine: object({
13018
+ backend: string(),
13019
+ device: string()
13020
+ }),
13021
+ phase: CameraDetectionPhaseSchema,
13022
+ configuredFps: number(),
13023
+ actualFps: number(),
13024
+ queueDepth: number(),
13025
+ avgInferenceMs: number(),
13026
+ provisioning: CameraDetectionProvisioningSchema
13027
+ });
13028
+ /** Audio block — null when no audio node is assigned or reachable. */
13029
+ var CameraAudioStatusSchema = object({
13030
+ nodeId: string(),
13031
+ enabled: boolean()
13032
+ });
13033
+ /** Recording block — null when no recording cap is active for this device. */
13034
+ var CameraRecordingStatusSchema = object({
13035
+ mode: _enum([
13036
+ "off",
13037
+ "continuous",
13038
+ "events"
13039
+ ]),
13040
+ active: boolean(),
13041
+ storageBytes: number()
13042
+ });
13043
+ /**
13044
+ * Aggregated per-camera pipeline status — server-composed, single call.
13045
+ *
13046
+ * The `assignment` and `source` blocks are always present.
13047
+ * Every other block is `null` when the stage is inactive or unreachable
13048
+ * during the bounded parallel fan-out in the orchestrator implementation.
13049
+ *
13050
+ * See spec: `docs/superpowers/specs/2026-06-24-camera-status-aggregator-cap.md`
13051
+ */
13052
+ var CameraStatusSchema = object({
13053
+ deviceId: number(),
13054
+ assignment: CameraAssignmentStatusSchema,
13055
+ source: CameraSourceStatusSchema,
13056
+ broker: CameraBrokerStatusSchema.nullable(),
13057
+ decoder: CameraDecoderStatusSchema.nullable(),
13058
+ motion: CameraMotionStatusSchema.nullable(),
13059
+ detection: CameraDetectionStatusSchema.nullable(),
13060
+ audio: CameraAudioStatusSchema.nullable(),
13061
+ recording: CameraRecordingStatusSchema.nullable(),
13062
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
13063
+ fetchedAt: number()
13064
+ });
12905
13065
  method(object({
12906
13066
  deviceId: number(),
12907
13067
  agentNodeId: string()
@@ -12969,6 +13129,12 @@ method(object({
12969
13129
  }), {
12970
13130
  kind: "mutation",
12971
13131
  auth: "admin"
13132
+ }), method(object({
13133
+ agentNodeId: string(),
13134
+ maxCameras: number().int().nonnegative().nullable()
13135
+ }), object({ success: literal(true) }), {
13136
+ kind: "mutation",
13137
+ auth: "admin"
12972
13138
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
12973
13139
  deviceId: number(),
12974
13140
  addonId: string(),
@@ -12994,7 +13160,7 @@ method(object({
12994
13160
  }), method(object({
12995
13161
  deviceId: number(),
12996
13162
  agentNodeId: string().optional()
12997
- }), CameraPipelineConfigSchema), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
13163
+ }), CameraPipelineConfigSchema), method(object({ deviceId: number() }), CameraStatusSchema), method(object({ deviceIds: array(number()).optional() }), array(CameraStatusSchema).readonly()), method(_void(), array(PipelineTemplateSchema).readonly()), method(object({
12998
13164
  name: string(),
12999
13165
  description: string().optional(),
13000
13166
  config: CameraPipelineConfigSchema
@@ -18864,6 +19030,12 @@ Object.freeze({
18864
19030
  addonId: null,
18865
19031
  access: "view"
18866
19032
  },
19033
+ "pipelineExecutor.getEngineProvisioning": {
19034
+ capName: "pipeline-executor",
19035
+ capScope: "system",
19036
+ addonId: null,
19037
+ access: "view"
19038
+ },
18867
19039
  "pipelineExecutor.getGlobalPipelineConfig": {
18868
19040
  capName: "pipeline-executor",
18869
19041
  capScope: "system",
@@ -19068,6 +19240,18 @@ Object.freeze({
19068
19240
  addonId: null,
19069
19241
  access: "view"
19070
19242
  },
19243
+ "pipelineOrchestrator.getCameraStatus": {
19244
+ capName: "pipeline-orchestrator",
19245
+ capScope: "system",
19246
+ addonId: null,
19247
+ access: "view"
19248
+ },
19249
+ "pipelineOrchestrator.getCameraStatuses": {
19250
+ capName: "pipeline-orchestrator",
19251
+ capScope: "system",
19252
+ addonId: null,
19253
+ access: "view"
19254
+ },
19071
19255
  "pipelineOrchestrator.getCameraStepOverrides": {
19072
19256
  capName: "pipeline-orchestrator",
19073
19257
  capScope: "system",
@@ -19152,6 +19336,12 @@ Object.freeze({
19152
19336
  addonId: null,
19153
19337
  access: "create"
19154
19338
  },
19339
+ "pipelineOrchestrator.setAgentMaxCameras": {
19340
+ capName: "pipeline-orchestrator",
19341
+ capScope: "system",
19342
+ addonId: null,
19343
+ access: "create"
19344
+ },
19155
19345
  "pipelineOrchestrator.setCameraPipelineForAgent": {
19156
19346
  capName: "pipeline-orchestrator",
19157
19347
  capScope: "system",
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-hLRTPO9P.js");
5
+ const require_dist = require("../dist-C3Gth0Ap.js");
6
6
  let node_child_process = require("node:child_process");
7
7
  let node_util = require("node:util");
8
8
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { i as networkAccessCapability, n as EventCategory, t as BaseAddon } from "../dist-O8xvcftz.mjs";
1
+ import { i as networkAccessCapability, n as EventCategory, t as BaseAddon } from "../dist-Dr1YikI7.mjs";
2
2
  import { execFile } from "node:child_process";
3
3
  import { promisify } from "node:util";
4
4
  import { randomUUID } from "node:crypto";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-tailscale",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Tailscale bundle for CamStack — joins the host to a tailnet (client) and exposes the hub via Serve/Funnel (ingress). Multi-entry npm package shipping 2 addons under a single bundle.",
5
5
  "keywords": [
6
6
  "camstack",