@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.
- package/dist/client/tailscale.addon.js +1 -1
- package/dist/client/tailscale.addon.mjs +1 -1
- package/dist/{dist-hLRTPO9P.js → dist-C3Gth0Ap.js} +193 -3
- package/dist/{dist-O8xvcftz.mjs → dist-Dr1YikI7.mjs} +193 -3
- package/dist/ingress/tailscale-ingress.addon.js +1 -1
- package/dist/ingress/tailscale-ingress.addon.mjs +1 -1
- package/package.json +1 -1
|
@@ -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-
|
|
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-
|
|
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({
|
|
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({
|
|
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-
|
|
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-
|
|
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.
|
|
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",
|