@camstack/types 1.1.24 → 1.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/capabilities/decoder.cap.d.ts +1 -1
- package/dist/capabilities/pipeline-orchestrator.cap.d.ts +40 -0
- package/dist/generated/addon-api.d.ts +70 -0
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/system-proxy.d.ts +1 -1
- package/dist/index.js +58 -2
- package/dist/index.mjs +58 -2
- package/dist/types/agent-pipeline-settings.d.ts +20 -0
- package/package.json +1 -1
|
@@ -51,7 +51,7 @@ export declare const decoderCapability: {
|
|
|
51
51
|
readonly name: "decoder";
|
|
52
52
|
readonly scope: "system";
|
|
53
53
|
readonly mode: "singleton";
|
|
54
|
-
readonly preferredProvider: "decoder-
|
|
54
|
+
readonly preferredProvider: "decoder-nodeav";
|
|
55
55
|
readonly methods: {
|
|
56
56
|
readonly supportsCodec: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
57
57
|
codec: z.ZodString;
|
|
@@ -687,6 +687,11 @@ export declare const pipelineOrchestratorCapability: {
|
|
|
687
687
|
settings: z.ZodReadonly<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
688
688
|
}, z.core.$strip>>>;
|
|
689
689
|
maxCameras: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
690
|
+
detectWeight: z.ZodOptional<z.ZodNumber>;
|
|
691
|
+
detect: z.ZodOptional<z.ZodBoolean>;
|
|
692
|
+
decode: z.ZodOptional<z.ZodBoolean>;
|
|
693
|
+
audio: z.ZodOptional<z.ZodBoolean>;
|
|
694
|
+
ingest: z.ZodOptional<z.ZodBoolean>;
|
|
690
695
|
}, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
|
|
691
696
|
/** Enumerate every agent's settings (hub + remote runners). */
|
|
692
697
|
readonly listAgentSettings: import("./capability-definition.js").CapabilityMethodSchema<z.ZodVoid, z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
@@ -698,6 +703,11 @@ export declare const pipelineOrchestratorCapability: {
|
|
|
698
703
|
settings: z.ZodReadonly<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
699
704
|
}, z.core.$strip>>>;
|
|
700
705
|
maxCameras: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
706
|
+
detectWeight: z.ZodOptional<z.ZodNumber>;
|
|
707
|
+
detect: z.ZodOptional<z.ZodBoolean>;
|
|
708
|
+
decode: z.ZodOptional<z.ZodBoolean>;
|
|
709
|
+
audio: z.ZodOptional<z.ZodBoolean>;
|
|
710
|
+
ingest: z.ZodOptional<z.ZodBoolean>;
|
|
701
711
|
}, z.core.$strip>;
|
|
702
712
|
}, z.core.$strip>>>, import("./capability-definition.js").CapabilityMethodKind>;
|
|
703
713
|
/** Bulk-replace ALL addon configs on one agent. Used by the agent-level PipelineEditor which emits the full map per edit. Merges on top of existing entries — omitted addonIds are left alone. */
|
|
@@ -745,6 +755,36 @@ export declare const pipelineOrchestratorCapability: {
|
|
|
745
755
|
}, z.core.$strip>, z.ZodObject<{
|
|
746
756
|
success: z.ZodLiteral<true>;
|
|
747
757
|
}, z.core.$strip>, "mutation">;
|
|
758
|
+
/**
|
|
759
|
+
* Set a node's detection WEIGHT (relative share for the quota balancer).
|
|
760
|
+
* `null` clears it (back to the implicit weight 1). Unpinned cameras
|
|
761
|
+
* distribute proportionally to weight; `maxCameras` still clamps on top.
|
|
762
|
+
*/
|
|
763
|
+
readonly setAgentDetectWeight: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
764
|
+
agentNodeId: z.ZodString;
|
|
765
|
+
detectWeight: z.ZodNullable<z.ZodNumber>;
|
|
766
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
767
|
+
success: z.ZodLiteral<true>;
|
|
768
|
+
}, z.core.$strip>, "mutation">;
|
|
769
|
+
/**
|
|
770
|
+
* Set one node's placement CAPABILITIES — the per-node record that
|
|
771
|
+
* replaced the four flat orchestrator lists (`enabledNodes`,
|
|
772
|
+
* `enabledDecoderNodes`, `enabledAudioNodes`, `remoteSourcingNodes`).
|
|
773
|
+
* Each flag is optional in the patch: omit a flag to leave it unchanged,
|
|
774
|
+
* pass `null` to reset it to the node default (`hub` → capable, every
|
|
775
|
+
* other node → not). Detection/decode/audio eligibility is derived from
|
|
776
|
+
* these flags across the cluster; changing them re-derives the enabled
|
|
777
|
+
* sets and reconciles dispatch immediately.
|
|
778
|
+
*/
|
|
779
|
+
readonly setAgentCapabilities: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
780
|
+
agentNodeId: z.ZodString;
|
|
781
|
+
detect: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
782
|
+
decode: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
783
|
+
audio: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
784
|
+
ingest: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
785
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
786
|
+
success: z.ZodLiteral<true>;
|
|
787
|
+
}, z.core.$strip>, "mutation">;
|
|
748
788
|
/** Read one camera's settings. Null when never touched (inherits agent defaults fully). */
|
|
749
789
|
readonly getCameraSettings: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
|
|
750
790
|
deviceId: z.ZodNumber;
|
|
@@ -9830,6 +9830,11 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
|
|
|
9830
9830
|
settings: Readonly<Record<string, unknown>>;
|
|
9831
9831
|
}>>;
|
|
9832
9832
|
maxCameras: number | null;
|
|
9833
|
+
detectWeight?: number | undefined;
|
|
9834
|
+
detect?: boolean | undefined;
|
|
9835
|
+
decode?: boolean | undefined;
|
|
9836
|
+
audio?: boolean | undefined;
|
|
9837
|
+
ingest?: boolean | undefined;
|
|
9833
9838
|
} | null;
|
|
9834
9839
|
meta: object;
|
|
9835
9840
|
}>;
|
|
@@ -9846,6 +9851,11 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
|
|
|
9846
9851
|
settings: Readonly<Record<string, unknown>>;
|
|
9847
9852
|
}>>;
|
|
9848
9853
|
maxCameras: number | null;
|
|
9854
|
+
detectWeight?: number | undefined;
|
|
9855
|
+
detect?: boolean | undefined;
|
|
9856
|
+
decode?: boolean | undefined;
|
|
9857
|
+
audio?: boolean | undefined;
|
|
9858
|
+
ingest?: boolean | undefined;
|
|
9849
9859
|
};
|
|
9850
9860
|
}[];
|
|
9851
9861
|
meta: object;
|
|
@@ -9887,6 +9897,31 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
|
|
|
9887
9897
|
};
|
|
9888
9898
|
meta: object;
|
|
9889
9899
|
}>;
|
|
9900
|
+
setAgentDetectWeight: import("@trpc/server").TRPCMutationProcedure<{
|
|
9901
|
+
input: {
|
|
9902
|
+
[x: string]: unknown;
|
|
9903
|
+
agentNodeId: string;
|
|
9904
|
+
detectWeight: number | null;
|
|
9905
|
+
};
|
|
9906
|
+
output: {
|
|
9907
|
+
success: true;
|
|
9908
|
+
};
|
|
9909
|
+
meta: object;
|
|
9910
|
+
}>;
|
|
9911
|
+
setAgentCapabilities: import("@trpc/server").TRPCMutationProcedure<{
|
|
9912
|
+
input: {
|
|
9913
|
+
[x: string]: unknown;
|
|
9914
|
+
agentNodeId: string;
|
|
9915
|
+
detect?: boolean | null | undefined;
|
|
9916
|
+
decode?: boolean | null | undefined;
|
|
9917
|
+
audio?: boolean | null | undefined;
|
|
9918
|
+
ingest?: boolean | null | undefined;
|
|
9919
|
+
};
|
|
9920
|
+
output: {
|
|
9921
|
+
success: true;
|
|
9922
|
+
};
|
|
9923
|
+
meta: object;
|
|
9924
|
+
}>;
|
|
9890
9925
|
getCameraSettings: import("@trpc/server").TRPCQueryProcedure<{
|
|
9891
9926
|
input: {
|
|
9892
9927
|
[x: string]: unknown;
|
|
@@ -24168,6 +24203,11 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
|
|
|
24168
24203
|
settings: Readonly<Record<string, unknown>>;
|
|
24169
24204
|
}>>;
|
|
24170
24205
|
maxCameras: number | null;
|
|
24206
|
+
detectWeight?: number | undefined;
|
|
24207
|
+
detect?: boolean | undefined;
|
|
24208
|
+
decode?: boolean | undefined;
|
|
24209
|
+
audio?: boolean | undefined;
|
|
24210
|
+
ingest?: boolean | undefined;
|
|
24171
24211
|
} | null;
|
|
24172
24212
|
meta: object;
|
|
24173
24213
|
}>;
|
|
@@ -24184,6 +24224,11 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
|
|
|
24184
24224
|
settings: Readonly<Record<string, unknown>>;
|
|
24185
24225
|
}>>;
|
|
24186
24226
|
maxCameras: number | null;
|
|
24227
|
+
detectWeight?: number | undefined;
|
|
24228
|
+
detect?: boolean | undefined;
|
|
24229
|
+
decode?: boolean | undefined;
|
|
24230
|
+
audio?: boolean | undefined;
|
|
24231
|
+
ingest?: boolean | undefined;
|
|
24187
24232
|
};
|
|
24188
24233
|
}[];
|
|
24189
24234
|
meta: object;
|
|
@@ -24225,6 +24270,31 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
|
|
|
24225
24270
|
};
|
|
24226
24271
|
meta: object;
|
|
24227
24272
|
}>;
|
|
24273
|
+
setAgentDetectWeight: import("@trpc/server").TRPCMutationProcedure<{
|
|
24274
|
+
input: {
|
|
24275
|
+
[x: string]: unknown;
|
|
24276
|
+
agentNodeId: string;
|
|
24277
|
+
detectWeight: number | null;
|
|
24278
|
+
};
|
|
24279
|
+
output: {
|
|
24280
|
+
success: true;
|
|
24281
|
+
};
|
|
24282
|
+
meta: object;
|
|
24283
|
+
}>;
|
|
24284
|
+
setAgentCapabilities: import("@trpc/server").TRPCMutationProcedure<{
|
|
24285
|
+
input: {
|
|
24286
|
+
[x: string]: unknown;
|
|
24287
|
+
agentNodeId: string;
|
|
24288
|
+
detect?: boolean | null | undefined;
|
|
24289
|
+
decode?: boolean | null | undefined;
|
|
24290
|
+
audio?: boolean | null | undefined;
|
|
24291
|
+
ingest?: boolean | null | undefined;
|
|
24292
|
+
};
|
|
24293
|
+
output: {
|
|
24294
|
+
success: true;
|
|
24295
|
+
};
|
|
24296
|
+
meta: object;
|
|
24297
|
+
}>;
|
|
24228
24298
|
getCameraSettings: import("@trpc/server").TRPCQueryProcedure<{
|
|
24229
24299
|
input: {
|
|
24230
24300
|
[x: string]: unknown;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* scope+access check inside `protectedProcedure` (see
|
|
7
7
|
* `server/backend/src/api/trpc/trpc.middleware.ts`).
|
|
8
8
|
*
|
|
9
|
-
* Coverage:
|
|
9
|
+
* Coverage: 735 method paths across 111 capabilities.
|
|
10
10
|
*/
|
|
11
11
|
import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
|
|
12
12
|
export interface MethodAccessRecord {
|
|
@@ -72,7 +72,7 @@ export interface SystemProxy {
|
|
|
72
72
|
readonly nodes: Pick<InferProvider<typeof nodesCapability>, 'topology' | 'deployAddon' | 'undeployAddon' | 'restartAddon' | 'restartProcess' | 'restartNode' | 'shutdownNode' | 'renameNode' | 'clusterAddonStatus' | 'getCapUsageGraph' | 'getNodeAddons' | 'setProcessLogLevel' | 'executeQuery'>;
|
|
73
73
|
readonly notificationOutput: Pick<InferProvider<typeof notificationOutputCapability>, 'listTargetKinds' | 'listTargets' | 'discoverTargets' | 'send' | 'testTarget' | 'upsertTarget' | 'deleteTarget' | 'setTargetEnabled'>;
|
|
74
74
|
readonly pipelineExecutor: Pick<InferProvider<typeof pipelineExecutorCapability>, 'getAvailableEngines' | 'getSelectedEngine' | 'getDefaultSteps' | 'reprobeEngine' | 'getEngineProvisioning' | 'getVideoPipelineSteps' | 'setVideoPipelineSteps' | 'getSchema' | 'getGlobalSteps' | 'getGlobalPipelineConfig' | 'getOrchestratorConfigSchema' | 'listTemplates' | 'saveTemplate' | 'updateTemplate' | 'deleteTemplate' | 'getCapabilities' | 'getAddonModels' | 'downloadModel' | 'deleteModel' | 'detect' | 'cacheFrameInPool' | 'inferCached' | 'uncacheFrame' | 'getEffectiveTuning' | 'listLoadedEngines' | 'spinEngine' | 'killEngine' | 'listReferenceImages' | 'getReferenceImage' | 'getReferenceAudioFiles' | 'getReferenceAudio' | 'getAudioCapabilities' | 'runAudioTest' | 'getDetectionConfigSchema'>;
|
|
75
|
-
readonly pipelineOrchestrator: Pick<InferProvider<typeof pipelineOrchestratorCapability>, 'rebalance' | 'getPipelineAssignments' | 'getAgentLoad' | 'getGlobalMetrics' | 'getCapabilityBindings' | 'setCapabilityBinding' | 'getDecoderAssignments' | 'getAudioNodeLoad' | 'getAgentSettings' | 'listAgentSettings' | 'setAgentAddonDefaults' | 'removeAgentSettings' | 'setAgentMaxCameras' | 'getCameraStatuses' | 'listTemplates' | 'saveTemplate' | 'updateTemplate' | 'deleteTemplate'>;
|
|
75
|
+
readonly pipelineOrchestrator: Pick<InferProvider<typeof pipelineOrchestratorCapability>, 'rebalance' | 'getPipelineAssignments' | 'getAgentLoad' | 'getGlobalMetrics' | 'getCapabilityBindings' | 'setCapabilityBinding' | 'getDecoderAssignments' | 'getAudioNodeLoad' | 'getAgentSettings' | 'listAgentSettings' | 'setAgentAddonDefaults' | 'removeAgentSettings' | 'setAgentMaxCameras' | 'setAgentDetectWeight' | 'setAgentCapabilities' | 'getCameraStatuses' | 'listTemplates' | 'saveTemplate' | 'updateTemplate' | 'deleteTemplate'>;
|
|
76
76
|
readonly pipelineRunner: Pick<InferProvider<typeof pipelineRunnerCapability>, 'attachCamera' | 'reportMotion' | 'getLocalLoad' | 'getLocalMetrics' | 'getAllCameraMetrics' | 'getLocalCameras'>;
|
|
77
77
|
readonly plateGallery: Pick<InferProvider<typeof plateGalleryCapability>, 'getPlateMedia' | 'searchPlates' | 'suggestPlateClusters' | 'correctPlateText' | 'deletePlate'>;
|
|
78
78
|
readonly recording: Pick<InferProvider<typeof recordingCapability>, 'getStorageUsage'>;
|
package/dist/index.js
CHANGED
|
@@ -11998,6 +11998,8 @@ function createSystemProxy(api) {
|
|
|
11998
11998
|
setAgentAddonDefaults: (input) => dispatch("pipelineOrchestrator", "setAgentAddonDefaults", "mutation", input),
|
|
11999
11999
|
removeAgentSettings: (input) => dispatch("pipelineOrchestrator", "removeAgentSettings", "mutation", input),
|
|
12000
12000
|
setAgentMaxCameras: (input) => dispatch("pipelineOrchestrator", "setAgentMaxCameras", "mutation", input),
|
|
12001
|
+
setAgentDetectWeight: (input) => dispatch("pipelineOrchestrator", "setAgentDetectWeight", "mutation", input),
|
|
12002
|
+
setAgentCapabilities: (input) => dispatch("pipelineOrchestrator", "setAgentCapabilities", "mutation", input),
|
|
12001
12003
|
getCameraStatuses: (input) => dispatch("pipelineOrchestrator", "getCameraStatuses", "query", input),
|
|
12002
12004
|
listTemplates: (input) => dispatch("pipelineOrchestrator", "listTemplates", "query", input),
|
|
12003
12005
|
saveTemplate: (input) => dispatch("pipelineOrchestrator", "saveTemplate", "mutation", input),
|
|
@@ -14255,7 +14257,7 @@ var decoderCapability = {
|
|
|
14255
14257
|
name: "decoder",
|
|
14256
14258
|
scope: "system",
|
|
14257
14259
|
mode: "singleton",
|
|
14258
|
-
preferredProvider: "decoder-
|
|
14260
|
+
preferredProvider: "decoder-nodeav",
|
|
14259
14261
|
methods: {
|
|
14260
14262
|
supportsCodec: require_sleep.method(zod.z.object({ codec: zod.z.string() }), zod.z.boolean()),
|
|
14261
14263
|
getInfo: require_sleep.method(zod.z.void(), zod.z.object({
|
|
@@ -16920,7 +16922,17 @@ var AgentAddonConfigSchema = zod.z.object({
|
|
|
16920
16922
|
});
|
|
16921
16923
|
var AgentPipelineSettingsSchema = zod.z.object({
|
|
16922
16924
|
addonDefaults: zod.z.record(zod.z.string(), AgentAddonConfigSchema).readonly(),
|
|
16923
|
-
maxCameras: zod.z.number().int().nonnegative().nullable().default(null)
|
|
16925
|
+
maxCameras: zod.z.number().int().nonnegative().nullable().default(null),
|
|
16926
|
+
/** Per-node detection weight (relative share for the quota balancer). */
|
|
16927
|
+
detectWeight: zod.z.number().positive().optional(),
|
|
16928
|
+
/** Node is eligible to run the detection pipeline (decode + inference). */
|
|
16929
|
+
detect: zod.z.boolean().optional(),
|
|
16930
|
+
/** Node is eligible to host decoder sessions. */
|
|
16931
|
+
decode: zod.z.boolean().optional(),
|
|
16932
|
+
/** Node is eligible to run audio-analyzer sessions. */
|
|
16933
|
+
audio: zod.z.boolean().optional(),
|
|
16934
|
+
/** Node is eligible to be the ingest / source-owner (serve the restream). */
|
|
16935
|
+
ingest: zod.z.boolean().optional()
|
|
16924
16936
|
});
|
|
16925
16937
|
var CameraPipelineForAgentSchema = zod.z.object({
|
|
16926
16938
|
steps: zod.z.array(PipelineStepInputSchema).readonly(),
|
|
@@ -17362,6 +17374,38 @@ var pipelineOrchestratorCapability = {
|
|
|
17362
17374
|
kind: "mutation",
|
|
17363
17375
|
auth: "admin"
|
|
17364
17376
|
}),
|
|
17377
|
+
/**
|
|
17378
|
+
* Set a node's detection WEIGHT (relative share for the quota balancer).
|
|
17379
|
+
* `null` clears it (back to the implicit weight 1). Unpinned cameras
|
|
17380
|
+
* distribute proportionally to weight; `maxCameras` still clamps on top.
|
|
17381
|
+
*/
|
|
17382
|
+
setAgentDetectWeight: require_sleep.method(zod.z.object({
|
|
17383
|
+
agentNodeId: zod.z.string(),
|
|
17384
|
+
detectWeight: zod.z.number().positive().nullable()
|
|
17385
|
+
}), zod.z.object({ success: zod.z.literal(true) }), {
|
|
17386
|
+
kind: "mutation",
|
|
17387
|
+
auth: "admin"
|
|
17388
|
+
}),
|
|
17389
|
+
/**
|
|
17390
|
+
* Set one node's placement CAPABILITIES — the per-node record that
|
|
17391
|
+
* replaced the four flat orchestrator lists (`enabledNodes`,
|
|
17392
|
+
* `enabledDecoderNodes`, `enabledAudioNodes`, `remoteSourcingNodes`).
|
|
17393
|
+
* Each flag is optional in the patch: omit a flag to leave it unchanged,
|
|
17394
|
+
* pass `null` to reset it to the node default (`hub` → capable, every
|
|
17395
|
+
* other node → not). Detection/decode/audio eligibility is derived from
|
|
17396
|
+
* these flags across the cluster; changing them re-derives the enabled
|
|
17397
|
+
* sets and reconciles dispatch immediately.
|
|
17398
|
+
*/
|
|
17399
|
+
setAgentCapabilities: require_sleep.method(zod.z.object({
|
|
17400
|
+
agentNodeId: zod.z.string(),
|
|
17401
|
+
detect: zod.z.boolean().nullable().optional(),
|
|
17402
|
+
decode: zod.z.boolean().nullable().optional(),
|
|
17403
|
+
audio: zod.z.boolean().nullable().optional(),
|
|
17404
|
+
ingest: zod.z.boolean().nullable().optional()
|
|
17405
|
+
}), zod.z.object({ success: zod.z.literal(true) }), {
|
|
17406
|
+
kind: "mutation",
|
|
17407
|
+
auth: "admin"
|
|
17408
|
+
}),
|
|
17365
17409
|
/** Read one camera's settings. Null when never touched (inherits agent defaults fully). */
|
|
17366
17410
|
getCameraSettings: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), CameraPipelineSettingsSchema.nullable()),
|
|
17367
17411
|
/** Set or clear the 3-state toggle for one (camera, addonId). Pass `enabled: null` to clear and revert to agent default. */
|
|
@@ -25789,6 +25833,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
25789
25833
|
addonId: null,
|
|
25790
25834
|
access: "create"
|
|
25791
25835
|
},
|
|
25836
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
25837
|
+
capName: "pipeline-orchestrator",
|
|
25838
|
+
capScope: "system",
|
|
25839
|
+
addonId: null,
|
|
25840
|
+
access: "create"
|
|
25841
|
+
},
|
|
25842
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
25843
|
+
capName: "pipeline-orchestrator",
|
|
25844
|
+
capScope: "system",
|
|
25845
|
+
addonId: null,
|
|
25846
|
+
access: "create"
|
|
25847
|
+
},
|
|
25792
25848
|
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
25793
25849
|
capName: "pipeline-orchestrator",
|
|
25794
25850
|
capScope: "system",
|
package/dist/index.mjs
CHANGED
|
@@ -11997,6 +11997,8 @@ function createSystemProxy(api) {
|
|
|
11997
11997
|
setAgentAddonDefaults: (input) => dispatch("pipelineOrchestrator", "setAgentAddonDefaults", "mutation", input),
|
|
11998
11998
|
removeAgentSettings: (input) => dispatch("pipelineOrchestrator", "removeAgentSettings", "mutation", input),
|
|
11999
11999
|
setAgentMaxCameras: (input) => dispatch("pipelineOrchestrator", "setAgentMaxCameras", "mutation", input),
|
|
12000
|
+
setAgentDetectWeight: (input) => dispatch("pipelineOrchestrator", "setAgentDetectWeight", "mutation", input),
|
|
12001
|
+
setAgentCapabilities: (input) => dispatch("pipelineOrchestrator", "setAgentCapabilities", "mutation", input),
|
|
12000
12002
|
getCameraStatuses: (input) => dispatch("pipelineOrchestrator", "getCameraStatuses", "query", input),
|
|
12001
12003
|
listTemplates: (input) => dispatch("pipelineOrchestrator", "listTemplates", "query", input),
|
|
12002
12004
|
saveTemplate: (input) => dispatch("pipelineOrchestrator", "saveTemplate", "mutation", input),
|
|
@@ -14254,7 +14256,7 @@ var decoderCapability = {
|
|
|
14254
14256
|
name: "decoder",
|
|
14255
14257
|
scope: "system",
|
|
14256
14258
|
mode: "singleton",
|
|
14257
|
-
preferredProvider: "decoder-
|
|
14259
|
+
preferredProvider: "decoder-nodeav",
|
|
14258
14260
|
methods: {
|
|
14259
14261
|
supportsCodec: method(z.object({ codec: z.string() }), z.boolean()),
|
|
14260
14262
|
getInfo: method(z.void(), z.object({
|
|
@@ -16919,7 +16921,17 @@ var AgentAddonConfigSchema = z.object({
|
|
|
16919
16921
|
});
|
|
16920
16922
|
var AgentPipelineSettingsSchema = z.object({
|
|
16921
16923
|
addonDefaults: z.record(z.string(), AgentAddonConfigSchema).readonly(),
|
|
16922
|
-
maxCameras: z.number().int().nonnegative().nullable().default(null)
|
|
16924
|
+
maxCameras: z.number().int().nonnegative().nullable().default(null),
|
|
16925
|
+
/** Per-node detection weight (relative share for the quota balancer). */
|
|
16926
|
+
detectWeight: z.number().positive().optional(),
|
|
16927
|
+
/** Node is eligible to run the detection pipeline (decode + inference). */
|
|
16928
|
+
detect: z.boolean().optional(),
|
|
16929
|
+
/** Node is eligible to host decoder sessions. */
|
|
16930
|
+
decode: z.boolean().optional(),
|
|
16931
|
+
/** Node is eligible to run audio-analyzer sessions. */
|
|
16932
|
+
audio: z.boolean().optional(),
|
|
16933
|
+
/** Node is eligible to be the ingest / source-owner (serve the restream). */
|
|
16934
|
+
ingest: z.boolean().optional()
|
|
16923
16935
|
});
|
|
16924
16936
|
var CameraPipelineForAgentSchema = z.object({
|
|
16925
16937
|
steps: z.array(PipelineStepInputSchema).readonly(),
|
|
@@ -17361,6 +17373,38 @@ var pipelineOrchestratorCapability = {
|
|
|
17361
17373
|
kind: "mutation",
|
|
17362
17374
|
auth: "admin"
|
|
17363
17375
|
}),
|
|
17376
|
+
/**
|
|
17377
|
+
* Set a node's detection WEIGHT (relative share for the quota balancer).
|
|
17378
|
+
* `null` clears it (back to the implicit weight 1). Unpinned cameras
|
|
17379
|
+
* distribute proportionally to weight; `maxCameras` still clamps on top.
|
|
17380
|
+
*/
|
|
17381
|
+
setAgentDetectWeight: method(z.object({
|
|
17382
|
+
agentNodeId: z.string(),
|
|
17383
|
+
detectWeight: z.number().positive().nullable()
|
|
17384
|
+
}), z.object({ success: z.literal(true) }), {
|
|
17385
|
+
kind: "mutation",
|
|
17386
|
+
auth: "admin"
|
|
17387
|
+
}),
|
|
17388
|
+
/**
|
|
17389
|
+
* Set one node's placement CAPABILITIES — the per-node record that
|
|
17390
|
+
* replaced the four flat orchestrator lists (`enabledNodes`,
|
|
17391
|
+
* `enabledDecoderNodes`, `enabledAudioNodes`, `remoteSourcingNodes`).
|
|
17392
|
+
* Each flag is optional in the patch: omit a flag to leave it unchanged,
|
|
17393
|
+
* pass `null` to reset it to the node default (`hub` → capable, every
|
|
17394
|
+
* other node → not). Detection/decode/audio eligibility is derived from
|
|
17395
|
+
* these flags across the cluster; changing them re-derives the enabled
|
|
17396
|
+
* sets and reconciles dispatch immediately.
|
|
17397
|
+
*/
|
|
17398
|
+
setAgentCapabilities: method(z.object({
|
|
17399
|
+
agentNodeId: z.string(),
|
|
17400
|
+
detect: z.boolean().nullable().optional(),
|
|
17401
|
+
decode: z.boolean().nullable().optional(),
|
|
17402
|
+
audio: z.boolean().nullable().optional(),
|
|
17403
|
+
ingest: z.boolean().nullable().optional()
|
|
17404
|
+
}), z.object({ success: z.literal(true) }), {
|
|
17405
|
+
kind: "mutation",
|
|
17406
|
+
auth: "admin"
|
|
17407
|
+
}),
|
|
17364
17408
|
/** Read one camera's settings. Null when never touched (inherits agent defaults fully). */
|
|
17365
17409
|
getCameraSettings: method(z.object({ deviceId: z.number() }), CameraPipelineSettingsSchema.nullable()),
|
|
17366
17410
|
/** Set or clear the 3-state toggle for one (camera, addonId). Pass `enabled: null` to clear and revert to agent default. */
|
|
@@ -25788,6 +25832,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
25788
25832
|
addonId: null,
|
|
25789
25833
|
access: "create"
|
|
25790
25834
|
},
|
|
25835
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
25836
|
+
capName: "pipeline-orchestrator",
|
|
25837
|
+
capScope: "system",
|
|
25838
|
+
addonId: null,
|
|
25839
|
+
access: "create"
|
|
25840
|
+
},
|
|
25841
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
25842
|
+
capName: "pipeline-orchestrator",
|
|
25843
|
+
capScope: "system",
|
|
25844
|
+
addonId: null,
|
|
25845
|
+
access: "create"
|
|
25846
|
+
},
|
|
25791
25847
|
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
25792
25848
|
capName: "pipeline-orchestrator",
|
|
25793
25849
|
capScope: "system",
|
|
@@ -61,6 +61,26 @@ export interface AgentPipelineSettings {
|
|
|
61
61
|
* without migration.
|
|
62
62
|
*/
|
|
63
63
|
readonly maxCameras?: number | null;
|
|
64
|
+
/**
|
|
65
|
+
* Optional per-node detection WEIGHT (relative share). Unpinned cameras
|
|
66
|
+
* distribute proportionally to weight across detect-capable nodes (e.g.
|
|
67
|
+
* Mac 60 / hub 30 / N100 10). `undefined`/absent = weight 1 (equal share,
|
|
68
|
+
* back-compat: identical to score-only balancing). Ceiling (`maxCameras`)
|
|
69
|
+
* still clamps on top of the weight share.
|
|
70
|
+
*/
|
|
71
|
+
readonly detectWeight?: number;
|
|
72
|
+
/**
|
|
73
|
+
* Placement capabilities (placement-model-design §6) — the per-node record
|
|
74
|
+
* that replaced the four flat orchestrator lists (`enabledNodes`,
|
|
75
|
+
* `enabledDecoderNodes`, `enabledAudioNodes`, `remoteSourcingNodes`). Each
|
|
76
|
+
* flag is optional; an absent flag inherits the node default (`hub` →
|
|
77
|
+
* capable, every other node → not). The orchestrator derives its
|
|
78
|
+
* enabled-node sets from these flags across the cluster.
|
|
79
|
+
*/
|
|
80
|
+
readonly detect?: boolean;
|
|
81
|
+
readonly decode?: boolean;
|
|
82
|
+
readonly audio?: boolean;
|
|
83
|
+
readonly ingest?: boolean;
|
|
64
84
|
}
|
|
65
85
|
/**
|
|
66
86
|
* Per-camera pipeline settings. Sparse by design — a camera that has
|