camstack 1.0.5 → 1.0.6

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.
@@ -18242,6 +18242,24 @@ var DetectorOutputSchema = external_exports.object({
18242
18242
  inferenceMs: external_exports.number(),
18243
18243
  modelId: external_exports.string()
18244
18244
  });
18245
+ var EngineProvisioningSchema = external_exports.object({
18246
+ runtimeId: external_exports.enum([
18247
+ "onnx",
18248
+ "openvino",
18249
+ "coreml"
18250
+ ]).nullable(),
18251
+ device: external_exports.string().nullable(),
18252
+ state: external_exports.enum([
18253
+ "idle",
18254
+ "installing",
18255
+ "verifying",
18256
+ "ready",
18257
+ "failed"
18258
+ ]),
18259
+ progress: external_exports.number().optional(),
18260
+ error: external_exports.string().optional(),
18261
+ nextRetryAt: external_exports.number().optional()
18262
+ });
18245
18263
  var PipelineStepInputSchema = external_exports.lazy(() => external_exports.object({
18246
18264
  addonId: external_exports.string(),
18247
18265
  modelId: external_exports.string(),
@@ -18319,6 +18337,15 @@ var pipelineExecutorCapability = {
18319
18337
  kind: "mutation",
18320
18338
  auth: "admin"
18321
18339
  }),
18340
+ /**
18341
+ * Per-node detection-engine provisioning snapshot. Returns the live
18342
+ * state of the lazy runtime-provisioning machine on `nodeId`
18343
+ * (idle / installing / verifying / ready / failed). The UI pairs this
18344
+ * one-shot query with the `pipeline.engine-provisioning` live event
18345
+ * (emitted on every transition) to drive a per-node "engine ready?"
18346
+ * indicator without polling. Phase 2.
18347
+ */
18348
+ getEngineProvisioning: method(external_exports.object({ nodeId: external_exports.string() }), EngineProvisioningSchema),
18322
18349
  getVideoPipelineSteps: method(external_exports.void(), external_exports.record(external_exports.string(), external_exports.object({
18323
18350
  modelId: external_exports.string(),
18324
18351
  settings: external_exports.record(external_exports.string(), external_exports.unknown()).readonly()
@@ -22474,7 +22501,10 @@ var AgentAddonConfigSchema = external_exports.object({
22474
22501
  modelId: external_exports.string(),
22475
22502
  settings: external_exports.record(external_exports.string(), external_exports.unknown()).readonly()
22476
22503
  });
22477
- var AgentPipelineSettingsSchema = external_exports.object({ addonDefaults: external_exports.record(external_exports.string(), AgentAddonConfigSchema).readonly() });
22504
+ var AgentPipelineSettingsSchema = external_exports.object({
22505
+ addonDefaults: external_exports.record(external_exports.string(), AgentAddonConfigSchema).readonly(),
22506
+ maxCameras: external_exports.number().int().nonnegative().nullable().default(null)
22507
+ });
22478
22508
  var CameraPipelineForAgentSchema = external_exports.object({
22479
22509
  steps: external_exports.array(PipelineStepInputSchema).readonly(),
22480
22510
  audio: external_exports.object({
@@ -22543,6 +22573,117 @@ var GlobalMetricsSchema = external_exports.object({
22543
22573
  queueDepth: external_exports.number()
22544
22574
  });
22545
22575
  var CapabilityBindingsSchema = external_exports.record(external_exports.string(), external_exports.string());
22576
+ var CameraSourceStreamSchema = external_exports.object({
22577
+ camStreamId: external_exports.string(),
22578
+ codec: external_exports.string(),
22579
+ width: external_exports.number(),
22580
+ height: external_exports.number(),
22581
+ fps: external_exports.number(),
22582
+ kind: external_exports.string()
22583
+ });
22584
+ var CameraSourceStatusSchema = external_exports.object({ streams: external_exports.array(CameraSourceStreamSchema).readonly() });
22585
+ var CameraAssignmentStatusSchema = external_exports.object({
22586
+ detectionNodeId: external_exports.string().nullable(),
22587
+ decoderNodeId: external_exports.string().nullable(),
22588
+ audioNodeId: external_exports.string().nullable(),
22589
+ pinned: external_exports.object({
22590
+ detection: external_exports.boolean(),
22591
+ decoder: external_exports.boolean(),
22592
+ audio: external_exports.boolean()
22593
+ }),
22594
+ reasons: external_exports.object({
22595
+ detection: external_exports.string().optional(),
22596
+ decoder: external_exports.string().optional(),
22597
+ audio: external_exports.string().optional()
22598
+ })
22599
+ });
22600
+ var CameraBrokerProfileSchema = external_exports.object({
22601
+ profile: external_exports.string(),
22602
+ status: external_exports.string(),
22603
+ codec: external_exports.string(),
22604
+ width: external_exports.number(),
22605
+ height: external_exports.number(),
22606
+ subscribers: external_exports.number(),
22607
+ inFps: external_exports.number(),
22608
+ outFps: external_exports.number()
22609
+ });
22610
+ var CameraBrokerStatusSchema = external_exports.object({
22611
+ profiles: external_exports.array(CameraBrokerProfileSchema).readonly(),
22612
+ webrtcSessions: external_exports.number(),
22613
+ rtspRestream: external_exports.boolean()
22614
+ });
22615
+ var CameraDecoderShmSchema = external_exports.object({
22616
+ framesWritten: external_exports.number(),
22617
+ getFrameHits: external_exports.number(),
22618
+ getFrameMisses: external_exports.number(),
22619
+ budgetMb: external_exports.number()
22620
+ });
22621
+ var CameraDecoderStatusSchema = external_exports.object({
22622
+ nodeId: external_exports.string(),
22623
+ formats: external_exports.array(external_exports.string()).readonly(),
22624
+ sessionCount: external_exports.number(),
22625
+ shm: CameraDecoderShmSchema
22626
+ });
22627
+ var CameraMotionStatusSchema = external_exports.object({
22628
+ enabled: external_exports.boolean(),
22629
+ fps: external_exports.number()
22630
+ });
22631
+ var CameraDetectionProvisioningStateSchema = external_exports.enum([
22632
+ "idle",
22633
+ "installing",
22634
+ "verifying",
22635
+ "ready",
22636
+ "failed"
22637
+ ]);
22638
+ var CameraDetectionProvisioningSchema = external_exports.object({
22639
+ state: CameraDetectionProvisioningStateSchema,
22640
+ error: external_exports.string().optional()
22641
+ });
22642
+ var CameraDetectionPhaseSchema = external_exports.enum([
22643
+ "idle",
22644
+ "watching",
22645
+ "active"
22646
+ ]);
22647
+ var CameraDetectionStatusSchema = external_exports.object({
22648
+ nodeId: external_exports.string(),
22649
+ engine: external_exports.object({
22650
+ backend: external_exports.string(),
22651
+ device: external_exports.string()
22652
+ }),
22653
+ phase: CameraDetectionPhaseSchema,
22654
+ configuredFps: external_exports.number(),
22655
+ actualFps: external_exports.number(),
22656
+ queueDepth: external_exports.number(),
22657
+ avgInferenceMs: external_exports.number(),
22658
+ provisioning: CameraDetectionProvisioningSchema
22659
+ });
22660
+ var CameraAudioStatusSchema = external_exports.object({
22661
+ nodeId: external_exports.string(),
22662
+ enabled: external_exports.boolean()
22663
+ });
22664
+ var CameraRecordingModeSchema = external_exports.enum([
22665
+ "off",
22666
+ "continuous",
22667
+ "events"
22668
+ ]);
22669
+ var CameraRecordingStatusSchema = external_exports.object({
22670
+ mode: CameraRecordingModeSchema,
22671
+ active: external_exports.boolean(),
22672
+ storageBytes: external_exports.number()
22673
+ });
22674
+ var CameraStatusSchema = external_exports.object({
22675
+ deviceId: external_exports.number(),
22676
+ assignment: CameraAssignmentStatusSchema,
22677
+ source: CameraSourceStatusSchema,
22678
+ broker: CameraBrokerStatusSchema.nullable(),
22679
+ decoder: CameraDecoderStatusSchema.nullable(),
22680
+ motion: CameraMotionStatusSchema.nullable(),
22681
+ detection: CameraDetectionStatusSchema.nullable(),
22682
+ audio: CameraAudioStatusSchema.nullable(),
22683
+ recording: CameraRecordingStatusSchema.nullable(),
22684
+ /** Unix timestamp (ms) when this snapshot was composed server-side. */
22685
+ fetchedAt: external_exports.number()
22686
+ });
22546
22687
  var pipelineOrchestratorCapability = {
22547
22688
  name: "pipeline-orchestrator",
22548
22689
  scope: "system",
@@ -22707,6 +22848,25 @@ var pipelineOrchestratorCapability = {
22707
22848
  kind: "mutation",
22708
22849
  auth: "admin"
22709
22850
  }),
22851
+ /**
22852
+ * Set the per-node camera cap for one agent.
22853
+ *
22854
+ * `maxCameras: 0` and `maxCameras: null` are both treated as unlimited
22855
+ * by the load balancer (0 is stored as-is; the balancer treats ≤0 as
22856
+ * unlimited alongside null). Pass `null` to clear an existing cap.
22857
+ * Note: the admin UI normalises 0→null before calling this method, so
22858
+ * `maxCameras: 0` only reaches the store via direct SDK or CLI calls.
22859
+ * Changes take effect immediately on the next dispatch cycle — cameras
22860
+ * currently assigned over-cap are left in place (no forced eviction),
22861
+ * but new assignments obey the updated cap.
22862
+ */
22863
+ setAgentMaxCameras: method(external_exports.object({
22864
+ agentNodeId: external_exports.string(),
22865
+ maxCameras: external_exports.number().int().nonnegative().nullable()
22866
+ }), external_exports.object({ success: external_exports.literal(true) }), {
22867
+ kind: "mutation",
22868
+ auth: "admin"
22869
+ }),
22710
22870
  /** Read one camera's settings. Null when never touched (inherits agent defaults fully). */
22711
22871
  getCameraSettings: method(external_exports.object({ deviceId: external_exports.number() }), CameraPipelineSettingsSchema.nullable()),
22712
22872
  /** Set or clear the 3-state toggle for one (camera, addonId). Pass `enabled: null` to clear and revert to agent default. */
@@ -22747,6 +22907,29 @@ var pipelineOrchestratorCapability = {
22747
22907
  deviceId: external_exports.number(),
22748
22908
  agentNodeId: external_exports.string().optional()
22749
22909
  }), CameraPipelineConfigSchema),
22910
+ /**
22911
+ * Server-composed aggregated status for a single camera.
22912
+ *
22913
+ * Fans out in parallel (bounded, per-stage graceful degradation) to
22914
+ * broker / decoder / motion / detection / audio / recording source caps
22915
+ * via `ctx.api`. A stage whose source errors or times out becomes `null`
22916
+ * in the returned payload — one slow agent never breaks the whole call.
22917
+ *
22918
+ * Intended for "on open / on camera select" snapshots. Live deltas
22919
+ * keep arriving from the existing ~1Hz events the UI already subscribes to.
22920
+ */
22921
+ getCameraStatus: method(external_exports.object({ deviceId: external_exports.number() }), CameraStatusSchema),
22922
+ /**
22923
+ * Server-composed aggregated status for multiple cameras in one call.
22924
+ *
22925
+ * `deviceIds` defaults to all cameras currently tracked by the
22926
+ * orchestrator's assignment map when omitted.
22927
+ *
22928
+ * Runs per-device composition in parallel (bounded). Use this to
22929
+ * populate the cluster assignments table and the pipeline flow overview
22930
+ * rail without issuing N parallel browser round-trips.
22931
+ */
22932
+ getCameraStatuses: method(external_exports.object({ deviceIds: external_exports.array(external_exports.number()).optional() }), external_exports.array(CameraStatusSchema).readonly()),
22750
22933
  /** List every template the operator has saved. */
22751
22934
  listTemplates: method(external_exports.void(), external_exports.array(PipelineTemplateSchema).readonly()),
22752
22935
  /** Create a new named preset from a given CameraPipelineConfig. */
@@ -29538,6 +29721,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
29538
29721
  addonId: null,
29539
29722
  access: "view"
29540
29723
  },
29724
+ "pipelineExecutor.getEngineProvisioning": {
29725
+ capName: "pipeline-executor",
29726
+ capScope: "system",
29727
+ addonId: null,
29728
+ access: "view"
29729
+ },
29541
29730
  "pipelineExecutor.getGlobalPipelineConfig": {
29542
29731
  capName: "pipeline-executor",
29543
29732
  capScope: "system",
@@ -29742,6 +29931,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
29742
29931
  addonId: null,
29743
29932
  access: "view"
29744
29933
  },
29934
+ "pipelineOrchestrator.getCameraStatus": {
29935
+ capName: "pipeline-orchestrator",
29936
+ capScope: "system",
29937
+ addonId: null,
29938
+ access: "view"
29939
+ },
29940
+ "pipelineOrchestrator.getCameraStatuses": {
29941
+ capName: "pipeline-orchestrator",
29942
+ capScope: "system",
29943
+ addonId: null,
29944
+ access: "view"
29945
+ },
29745
29946
  "pipelineOrchestrator.getCameraStepOverrides": {
29746
29947
  capName: "pipeline-orchestrator",
29747
29948
  capScope: "system",
@@ -29826,6 +30027,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
29826
30027
  addonId: null,
29827
30028
  access: "create"
29828
30029
  },
30030
+ "pipelineOrchestrator.setAgentMaxCameras": {
30031
+ capName: "pipeline-orchestrator",
30032
+ capScope: "system",
30033
+ addonId: null,
30034
+ access: "create"
30035
+ },
29829
30036
  "pipelineOrchestrator.setCameraPipelineForAgent": {
29830
30037
  capName: "pipeline-orchestrator",
29831
30038
  capScope: "system",
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-JJEKVTZK.js";
4
+ } from "./chunk-YPXFYDJW.js";
5
5
  import "./chunk-K3NQKI34.js";
6
6
 
7
7
  // src/cli.ts
@@ -608,7 +608,7 @@ function isUnknown(_value) {
608
608
  return true;
609
609
  }
610
610
  async function resolveServerInteractive(presetNamespace) {
611
- const { discoverNodes, resolveHubFromDiscovered } = await import("./discover-2Y5KB2PB.js");
611
+ const { discoverNodes, resolveHubFromDiscovered } = await import("./discover-ETACVQW3.js");
612
612
  if (presetNamespace) {
613
613
  const spinner4 = clack.spinner();
614
614
  spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
@@ -3,7 +3,7 @@ import {
3
3
  discoverNodes,
4
4
  resolveHubFromDiscovered,
5
5
  runDiscover
6
- } from "./chunk-JJEKVTZK.js";
6
+ } from "./chunk-YPXFYDJW.js";
7
7
  import "./chunk-K3NQKI34.js";
8
8
  export {
9
9
  discoverNodes,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",