camstack 1.2.182 → 1.2.184

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.
@@ -14681,7 +14681,7 @@ function date4(params) {
14681
14681
  // ../../node_modules/zod/v4/classic/external.js
14682
14682
  config(en_default());
14683
14683
 
14684
- // ../types/dist/sleep-r3RWkGVx.mjs
14684
+ // ../types/dist/sleep-DwAQ9sqX.mjs
14685
14685
  var AUDIO_CHUNK_FORMATS = [
14686
14686
  "f32le",
14687
14687
  "pcmu",
@@ -16264,6 +16264,19 @@ var CompositionSchema = external_exports.object({
16264
16264
  });
16265
16265
  });
16266
16266
 
16267
+ // ../types/dist/node-color.mjs
16268
+ var NODE_COLOR_IDS = [
16269
+ "node-a",
16270
+ "node-b",
16271
+ "node-c",
16272
+ "node-d",
16273
+ "node-e",
16274
+ "node-f",
16275
+ "node-g",
16276
+ "node-h"
16277
+ ];
16278
+ var NodeColorIdSchema = external_exports.enum(NODE_COLOR_IDS);
16279
+
16267
16280
  // ../types/dist/index.mjs
16268
16281
  var MEDIA_OWNER_TYPES = [
16269
16282
  "track",
@@ -25151,14 +25164,14 @@ var LlmProfileSchema = external_exports.object({
25151
25164
  */
25152
25165
  appleFoundation: external_exports.object({ nodeId: external_exports.string() }).optional()
25153
25166
  });
25154
- var ConfigSchemaPassthrough$1 = external_exports.unknown();
25167
+ var ConfigSchemaPassthrough$3 = external_exports.unknown();
25155
25168
  var LlmProfileKindDescriptorSchema = external_exports.object({
25156
25169
  kind: LlmProfileKindSchema,
25157
25170
  label: external_exports.string(),
25158
25171
  icon: external_exports.string(),
25159
25172
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
25160
25173
  addonId: external_exports.string(),
25161
- configSchema: ConfigSchemaPassthrough$1
25174
+ configSchema: ConfigSchemaPassthrough$3
25162
25175
  });
25163
25176
  var LlmDefaultSelectorSchema = external_exports.union([external_exports.object({ consumer: external_exports.string() }), external_exports.object({ purpose: external_exports.enum(["text", "vision"]) })]);
25164
25177
  var LlmDefaultSchema = external_exports.object({
@@ -26261,7 +26274,7 @@ var TargetKindCapsSchema = external_exports.object({
26261
26274
  ttl: external_exports.boolean(),
26262
26275
  bodyMaxLen: external_exports.number().int().positive()
26263
26276
  });
26264
- var ConfigSchemaPassthrough = external_exports.unknown();
26277
+ var ConfigSchemaPassthrough$2 = external_exports.unknown();
26265
26278
  var TargetKindSchema = external_exports.object({
26266
26279
  kind: external_exports.string(),
26267
26280
  label: external_exports.string(),
@@ -26298,7 +26311,7 @@ var TargetKindSchema = external_exports.object({
26298
26311
  * its raster path, which is the safe default for an unknown image.
26299
26312
  */
26300
26313
  iconMediaType: external_exports.string().optional(),
26301
- configSchema: ConfigSchemaPassthrough,
26314
+ configSchema: ConfigSchemaPassthrough$2,
26302
26315
  /**
26303
26316
  * The config keys that decide WHERE this kind's secrets are sent (server,
26304
26317
  * base URL, instance, chat, recipient). A save that changes any of them
@@ -29053,6 +29066,65 @@ var oauthIntegrationCapability = {
29053
29066
  getDescriptor: method(external_exports.void(), OauthIntegrationDescriptorSchema, { auth: "admin" })
29054
29067
  }
29055
29068
  };
29069
+ var ConfigSchemaPassthrough$1 = external_exports.unknown();
29070
+ var OidcConnectionSchema = external_exports.object({
29071
+ id: external_exports.string().min(1),
29072
+ displayName: external_exports.string(),
29073
+ icon: external_exports.string(),
29074
+ issuerUrl: external_exports.string(),
29075
+ clientId: external_exports.string(),
29076
+ /** Client id + secret present — never the secret value. */
29077
+ configured: external_exports.boolean(),
29078
+ /**
29079
+ * Values for the connection form schema. `clientSecret` is a keychain
29080
+ * {@link SecretFieldView} or `null` / `''`, never plaintext (D789).
29081
+ */
29082
+ formValues: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
29083
+ });
29084
+ var OidcConnectionUpdateInputSchema = external_exports.object({
29085
+ id: external_exports.string().min(1),
29086
+ displayName: external_exports.string().min(1),
29087
+ icon: external_exports.string().optional(),
29088
+ issuerUrl: external_exports.string().optional(),
29089
+ clientId: external_exports.string().optional(),
29090
+ clientSecret: external_exports.union([external_exports.string(), external_exports.object({ $secretClear: external_exports.literal(true) })]).optional(),
29091
+ redirectUri: external_exports.string().optional(),
29092
+ scopes: external_exports.string().optional(),
29093
+ usernameClaim: external_exports.enum([
29094
+ "preferred_username",
29095
+ "email",
29096
+ "sub"
29097
+ ]).optional()
29098
+ });
29099
+ var oidcConnectionsCapability = {
29100
+ name: "oidc-connections",
29101
+ scope: "system",
29102
+ mode: "singleton",
29103
+ methods: {
29104
+ /** Form fields for Add/Edit (ConfigFormBuilder). */
29105
+ connectionFormSchema: method(external_exports.object({}), ConfigSchemaPassthrough$1, { auth: "admin" }),
29106
+ listConnections: method(external_exports.object({}), external_exports.array(OidcConnectionSchema).readonly(), { auth: "admin" }),
29107
+ /**
29108
+ * Create a row with the operator-chosen URL slug. Credentials follow via
29109
+ * `updateConnection` (same Save path as Training Providers).
29110
+ */
29111
+ createConnection: method(external_exports.object({
29112
+ id: external_exports.string().min(1).regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "id must be a lowercase slug"),
29113
+ displayName: external_exports.string().min(1)
29114
+ }), external_exports.object({ id: external_exports.string() }), {
29115
+ kind: "mutation",
29116
+ auth: "admin"
29117
+ }),
29118
+ updateConnection: method(OidcConnectionUpdateInputSchema, external_exports.object({ ok: external_exports.literal(true) }), {
29119
+ kind: "mutation",
29120
+ auth: "admin"
29121
+ }),
29122
+ deleteConnection: method(external_exports.object({ id: external_exports.string().min(1) }), external_exports.object({ ok: external_exports.literal(true) }), {
29123
+ kind: "mutation",
29124
+ auth: "admin"
29125
+ })
29126
+ }
29127
+ };
29056
29128
  var MotionTriggeredBySchema = external_exports.discriminatedUnion("kind", [external_exports.object({ kind: external_exports.literal("camera") }), external_exports.object({
29057
29129
  kind: external_exports.literal("sensor"),
29058
29130
  deviceId: external_exports.number().int().positive()
@@ -30002,17 +30074,58 @@ var RetrainFrameListSchema = external_exports.object({
30002
30074
  /** What the page pre-selects — the native key frame when one survives. */
30003
30075
  autoPickMediaId: external_exports.number().int().optional()
30004
30076
  });
30077
+ var RetrainFrameWorkStateSchema = external_exports.enum([
30078
+ "unannotated",
30079
+ "annotated",
30080
+ "complete"
30081
+ ]);
30082
+ var RetrainCorpusFilterSchema = external_exports.object({
30083
+ workState: RetrainFrameWorkStateSchema.optional(),
30084
+ deviceIds: external_exports.array(external_exports.number()).max(500).optional(),
30085
+ /** When set, only frames in this named collection. */
30086
+ collectionId: external_exports.string().optional(),
30087
+ /** Frames that carry at least one saved annotation in one of these classes. */
30088
+ classes: external_exports.array(RetrainMacroClassSchema).optional(),
30089
+ page: external_exports.number().int().positive().default(1),
30090
+ pageSize: external_exports.number().int().positive().max(100).default(50)
30091
+ });
30092
+ var RetrainCorpusPageFrameSchema = RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema });
30093
+ var RetrainCorpusPageSchema = external_exports.object({
30094
+ frames: external_exports.array(RetrainCorpusPageFrameSchema).readonly(),
30095
+ total: external_exports.number().int().nonnegative(),
30096
+ page: external_exports.number().int().positive(),
30097
+ pageSize: external_exports.number().int().positive()
30098
+ });
30099
+ var RetrainCorpusKpiCameraRowSchema = external_exports.object({
30100
+ deviceId: external_exports.number(),
30101
+ unannotated: external_exports.number().int().nonnegative(),
30102
+ annotated: external_exports.number().int().nonnegative(),
30103
+ complete: external_exports.number().int().nonnegative(),
30104
+ /** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
30105
+ * `null` when the corpus is empty (no ratio). */
30106
+ pctOfCorpus: external_exports.number().min(0).max(1).nullable()
30107
+ });
30108
+ var RetrainCorpusKpiSchema = external_exports.object({
30109
+ total: external_exports.number().int().nonnegative(),
30110
+ unannotated: external_exports.number().int().nonnegative(),
30111
+ annotated: external_exports.number().int().nonnegative(),
30112
+ complete: external_exports.number().int().nonnegative(),
30113
+ cameras: external_exports.array(RetrainCorpusKpiCameraRowSchema).readonly()
30114
+ });
30005
30115
  var RetrainExportFilterSchema = external_exports.object({
30006
30116
  deviceIds: external_exports.array(external_exports.number()).optional(),
30007
30117
  frameIds: external_exports.array(external_exports.string()).max(2e4).optional(),
30008
30118
  /** Only frames in at least one of these named collections. */
30009
30119
  collectionIds: external_exports.array(external_exports.string()).max(200).optional(),
30010
- /** Exactly the frames of this dataset version (and its completeOnly). An
30011
- * unknown id selects nothing. */
30012
- datasetVersionId: external_exports.string().optional(),
30120
+ /** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
30121
+ collectionId: external_exports.string().optional(),
30013
30122
  batchId: external_exports.string().optional(),
30014
30123
  /** Only frames the operator marked complete (all subjects boxed). */
30015
- completeOnly: external_exports.boolean().optional()
30124
+ completeOnly: external_exports.boolean().optional(),
30125
+ /** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
30126
+ workState: RetrainFrameWorkStateSchema.optional(),
30127
+ /** Frames with at least one saved annotation in one of these classes. */
30128
+ classes: external_exports.array(RetrainMacroClassSchema).optional()
30016
30129
  });
30017
30130
  var RetrainExportLayoutSchema = external_exports.enum(["frames", "crops"]);
30018
30131
  var RetrainArchiveTargetSchema = external_exports.object({
@@ -30185,22 +30298,28 @@ var RetrainDatasetVersionSchema = external_exports.object({
30185
30298
  layout: RetrainExportLayoutSchema,
30186
30299
  completeOnly: external_exports.boolean(),
30187
30300
  frameCount: external_exports.number().int(),
30188
- /** sha256 of what the frames taught when the version was frozen. */
30189
30301
  annotationHash: external_exports.string(),
30190
- /** The export manifest schema the version was cut under. */
30191
30302
  manifestSchema: external_exports.string(),
30192
30303
  stats: RetrainDatasetStatsSchema
30193
30304
  });
30194
- var CreateRetrainDatasetVersionResultSchema = external_exports.discriminatedUnion("kind", [external_exports.object({
30195
- kind: external_exports.literal("created"),
30196
- version: RetrainDatasetVersionSchema
30305
+ var RetrainTrainingCorpusSelectionSchema = external_exports.object({
30306
+ collectionIds: external_exports.array(external_exports.string()).min(1),
30307
+ workState: external_exports.enum([
30308
+ "complete",
30309
+ "annotated_or_complete",
30310
+ "any_annotated"
30311
+ ]).default("complete")
30312
+ });
30313
+ var RetrainTrainingCorpusResolveResultSchema = external_exports.discriminatedUnion("kind", [external_exports.object({
30314
+ kind: external_exports.literal("resolved"),
30315
+ frameIds: external_exports.array(external_exports.string()).max(2e4).readonly(),
30316
+ stats: RetrainDatasetStatsSchema,
30317
+ annotationHash: external_exports.string(),
30318
+ layout: RetrainExportLayoutSchema
30197
30319
  }), external_exports.object({
30198
30320
  kind: external_exports.literal("refused"),
30199
- reason: external_exports.enum([
30200
- "empty-name",
30201
- "duplicate-name",
30202
- "no-frames"
30203
- ])
30321
+ reason: external_exports.enum(["unknown-collection", "no-frames"]),
30322
+ detail: external_exports.string()
30204
30323
  })]);
30205
30324
  var RetrainTransitionResultSchema = external_exports.object({
30206
30325
  trackId: external_exports.string(),
@@ -31221,6 +31340,26 @@ var pipelineAnalyticsCapability = {
31221
31340
  auth: "admin"
31222
31341
  }),
31223
31342
  /**
31343
+ * Paginated corpus copies for the Frames grid — index reads only.
31344
+ *
31345
+ * Filters AND (`workState`, cameras, one collection, annotated classes).
31346
+ * An answered empty match is `{ frames: [], total: 0, … }` (D315), never a
31347
+ * pending masquerade. Classification uses `workStateOf` (annotation count
31348
+ * wins over a stray `complete` flag).
31349
+ */
31350
+ listRetrainCorpusPage: method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
31351
+ kind: "query",
31352
+ auth: "admin"
31353
+ }),
31354
+ /**
31355
+ * Global + per-camera corpus KPI. Unfiltered totals; `%` on a camera row is
31356
+ * `complete(camera) / corpus total`, or `null` when the corpus is empty.
31357
+ */
31358
+ getRetrainCorpusKpi: method(external_exports.object({}), RetrainCorpusKpiSchema, {
31359
+ kind: "query",
31360
+ auth: "admin"
31361
+ }),
31362
+ /**
31224
31363
  * What a track can contribute, and what it already has.
31225
31364
  *
31226
31365
  * `candidates` are the track's whole, unannotated frames — index rows only,
@@ -31447,53 +31586,6 @@ var pipelineAnalyticsCapability = {
31447
31586
  auth: "admin",
31448
31587
  timeoutMs: 12e4
31449
31588
  }),
31450
- /** The counts a selection would freeze — class × camera × day/night,
31451
- * completeness — without freezing anything. Index reads only. */
31452
- previewRetrainDataset: method(external_exports.object({
31453
- selection: RetrainDatasetSelectionSchema,
31454
- completeOnly: external_exports.boolean().optional()
31455
- }), RetrainDatasetStatsSchema, {
31456
- kind: "query",
31457
- auth: "admin"
31458
- }),
31459
- /**
31460
- * Freeze a dataset version: the frames the selection yields (the same plan
31461
- * the annotated export builds), the hash of what they teach, the export
31462
- * parameters and the counts. Immutable — a different selection is a new
31463
- * version. Export it with `getRetrainExportUrl({ datasetVersionId })`.
31464
- */
31465
- createRetrainDatasetVersion: method(external_exports.object({
31466
- name: external_exports.string().max(120),
31467
- selection: RetrainDatasetSelectionSchema,
31468
- layout: RetrainExportLayoutSchema,
31469
- completeOnly: external_exports.boolean()
31470
- }), CreateRetrainDatasetVersionResultSchema, {
31471
- kind: "mutation",
31472
- auth: "admin",
31473
- timeoutMs: 12e4
31474
- }),
31475
- /** Every dataset version, newest first. */
31476
- listRetrainDatasetVersions: method(external_exports.object({}), external_exports.array(RetrainDatasetVersionSchema).readonly(), {
31477
- kind: "query",
31478
- auth: "admin"
31479
- }),
31480
- /** Delete a version. Its frames stay in the dataset. */
31481
- deleteRetrainDatasetVersion: method(external_exports.object({ id: external_exports.string() }), external_exports.object({ deleted: external_exports.boolean() }), {
31482
- kind: "mutation",
31483
- auth: "admin"
31484
- }),
31485
- /** Does the corpus still teach what the version froze? `missingFrames`
31486
- * counts frames that left the dataset (or lost every box and tick). */
31487
- verifyRetrainDatasetVersion: method(external_exports.object({ id: external_exports.string() }), external_exports.object({
31488
- found: external_exports.boolean(),
31489
- annotationHash: external_exports.string(),
31490
- matches: external_exports.boolean(),
31491
- missingFrames: external_exports.number().int()
31492
- }), {
31493
- kind: "query",
31494
- auth: "admin",
31495
- timeoutMs: 12e4
31496
- }),
31497
31589
  /** The enabled, vision-capable LLM profiles, each saying whether a frame
31498
31590
  * sent to it leaves the house. */
31499
31591
  listRetrainAssistProfiles: method(external_exports.object({}), external_exports.array(RetrainAssistProfileSchema).readonly(), {
@@ -31540,6 +31632,16 @@ var pipelineAnalyticsCapability = {
31540
31632
  kind: "query",
31541
31633
  auth: "admin"
31542
31634
  }),
31635
+ /**
31636
+ * Resolve a live training corpus selection to frame ids + stats (index
31637
+ * reads only). Same plan the annotated export builds — training plan/start
31638
+ * calls this instead of a frozen dataset version.
31639
+ */
31640
+ resolveRetrainTrainingCorpus: method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
31641
+ kind: "query",
31642
+ auth: "admin",
31643
+ timeoutMs: 6e4
31644
+ }),
31543
31645
  renameRetrainCollection: method(external_exports.object({
31544
31646
  id: external_exports.string(),
31545
31647
  name: external_exports.string().max(120)
@@ -32445,11 +32547,14 @@ var HardwareClassIdSchema = external_exports.enum([
32445
32547
  "intel-n-series",
32446
32548
  "apple-m-base",
32447
32549
  "apple-m-pro",
32550
+ "amd-phoenix",
32448
32551
  "unknown"
32449
32552
  ]);
32450
32553
  var AcceleratorKindSchema = external_exports.enum([
32451
32554
  "intel-npu",
32452
32555
  "intel-igpu",
32556
+ "amd-igpu",
32557
+ "amd-npu",
32453
32558
  "x86-cpu",
32454
32559
  "arm-cpu",
32455
32560
  "apple-ane",
@@ -34375,6 +34480,8 @@ var AgentPipelineSettingsSchema = external_exports.object({
34375
34480
  * address is wrong (multi-homed host, NAT, custom interface).
34376
34481
  */
34377
34482
  reachableHost: external_exports.string().optional(),
34483
+ /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
34484
+ color: NodeColorIdSchema.optional(),
34378
34485
  /**
34379
34486
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
34380
34487
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
@@ -35011,8 +35118,9 @@ var pipelineOrchestratorCapability = {
35011
35118
  */
35012
35119
  setAgentReachableHost: method(external_exports.object({
35013
35120
  agentNodeId: external_exports.string(),
35014
- reachableHost: external_exports.string().nullable()
35015
- }), external_exports.object({ success: external_exports.literal(true) }), {
35121
+ reachableHost: external_exports.string().nullable().optional(),
35122
+ color: NodeColorIdSchema.nullable().optional()
35123
+ }).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), external_exports.object({ success: external_exports.literal(true) }), {
35016
35124
  kind: "mutation",
35017
35125
  auth: "admin"
35018
35126
  }),
@@ -38507,7 +38615,13 @@ var addonsCapability = {
38507
38615
  mode: "singleton",
38508
38616
  nodeIdMode: "data",
38509
38617
  methods: {
38510
- list: method(external_exports.void(), external_exports.array(AddonListItemSchema).readonly()),
38618
+ /**
38619
+ * Installed addon roster for a node. `nodeId` omitted (or `'hub'`)
38620
+ * is the hub's own registry; an agent `nodeId` overlays that agent's
38621
+ * installed package versions (via `$agent.status`) onto hub manifests
38622
+ * and drops packages the agent does not have.
38623
+ */
38624
+ list: method(external_exports.object({ nodeId: external_exports.string().optional() }).optional(), external_exports.array(AddonListItemSchema).readonly()),
38511
38625
  getLogs: method(external_exports.object({
38512
38626
  addonId: external_exports.string(),
38513
38627
  limit: external_exports.number().min(1).max(500).default(100),
@@ -39299,6 +39413,7 @@ var calendarSourceCapability = {
39299
39413
  scope: "system",
39300
39414
  mode: "collection",
39301
39415
  internal: true,
39416
+ providerKind: "calendar",
39302
39417
  methods: {
39303
39418
  listCalendars: method(external_exports.void(), external_exports.array(CalendarInfoSchema).readonly(), { auth: "admin" }),
39304
39419
  listEvents: method(CalendarListEventsInputSchema, external_exports.array(CalendarEventSchema).readonly(), { auth: "admin" })
@@ -43134,7 +43249,13 @@ var TopologyNodeSchema = external_exports.object({
43134
43249
  })).readonly(),
43135
43250
  processes: external_exports.array(TopologyProcessSchema).readonly(),
43136
43251
  categories: external_exports.array(TopologyCategorySchema).readonly(),
43137
- rootPackage: TopologyRootPackageSchema.nullable()
43252
+ rootPackage: TopologyRootPackageSchema.nullable(),
43253
+ /**
43254
+ * How an online AGENT reaches the hub (mesh mTLS Release A): `tls` once it has
43255
+ * completed a mutual-TLS handshake, `clear` otherwise. Absent for the hub,
43256
+ * for offline rows and when the hub cannot tell.
43257
+ */
43258
+ meshTransport: external_exports.enum(["tls", "clear"]).optional()
43138
43259
  });
43139
43260
  var CapUsageEdgeSchema = external_exports.object({
43140
43261
  callerAddonId: external_exports.string(),
@@ -43559,6 +43680,7 @@ var OsdNamedTemplateSchema = external_exports.object({
43559
43680
  parser: external_exports.string().max(256).default("")
43560
43681
  });
43561
43682
  var OsdSourceSchema = external_exports.discriminatedUnion("kind", [
43683
+ external_exports.object({ kind: external_exports.literal("none") }),
43562
43684
  external_exports.object({
43563
43685
  kind: external_exports.literal("static"),
43564
43686
  text: external_exports.string().max(64)
@@ -43706,6 +43828,19 @@ var osdManagerCapability = {
43706
43828
  auth: "admin"
43707
43829
  }),
43708
43830
  /**
43831
+ * Toggle the camera firmware overlay on/off (`osd.setOverlay` `enabled`).
43832
+ * Distinct from the binding's own `enabled` flag — this is what the
43833
+ * operator sees on the live picture (e.g. Reolink camera name layer).
43834
+ */
43835
+ setSlotCameraEnabled: method(external_exports.object({
43836
+ deviceId: external_exports.number().int(),
43837
+ slotId: external_exports.string().min(1),
43838
+ enabled: external_exports.boolean()
43839
+ }), external_exports.object({ success: external_exports.literal(true) }), {
43840
+ kind: "mutation",
43841
+ auth: "admin"
43842
+ }),
43843
+ /**
43709
43844
  * Replace one camera's binding configuration from another. Writable source
43710
43845
  * slots are mapped by ordinal onto writable target slots so different
43711
43846
  * provider slot ids do not make the copied configuration disappear.
@@ -44168,7 +44303,15 @@ var GpuInfoSchema = external_exports.object({
44168
44303
  name: external_exports.string(),
44169
44304
  memoryMB: external_exports.number().optional()
44170
44305
  });
44171
- var NpuInfoSchema = external_exports.object({ type: external_exports.enum(["apple-ane", "intel-npu"]) });
44306
+ var NpuInfoSchema = external_exports.object({
44307
+ type: external_exports.enum([
44308
+ "apple-ane",
44309
+ "intel-npu",
44310
+ "amd-xdna"
44311
+ ]),
44312
+ name: external_exports.string().optional(),
44313
+ generation: external_exports.enum(["xdna1", "xdna2"]).optional()
44314
+ });
44172
44315
  var CoralInfoSchema = external_exports.object({
44173
44316
  type: external_exports.literal("coral-edgetpu"),
44174
44317
  bus: external_exports.string().optional()
@@ -48256,9 +48399,37 @@ var TrainingProviderDefaultsSchema = external_exports.object({
48256
48399
  /** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
48257
48400
  failedDatasetGraceHours: external_exports.number().nonnegative()
48258
48401
  });
48402
+ var ConfigSchemaPassthrough = external_exports.unknown();
48403
+ var TrainingProviderTypeSchema = external_exports.object({
48404
+ typeId: external_exports.string(),
48405
+ label: external_exports.string(),
48406
+ /** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
48407
+ iconAsset: external_exports.string(),
48408
+ /** Owning `training-provider` addon — collection selector for createEntry. */
48409
+ addonId: external_exports.string(),
48410
+ /**
48411
+ * Fields for one entry of this type (credentials + defaults). Absent on a
48412
+ * type that only needs a name. Password fields are keychain-backed on the
48413
+ * provider addon (`secretStatePaths`), not D634 plaintext.
48414
+ */
48415
+ configSchema: ConfigSchemaPassthrough.optional()
48416
+ });
48417
+ var TrainingProviderEntrySchema = external_exports.object({
48418
+ entryId: external_exports.string(),
48419
+ typeId: external_exports.string(),
48420
+ name: external_exports.string(),
48421
+ addonId: external_exports.string(),
48422
+ /** Credentials are present — never the values. */
48423
+ configured: external_exports.boolean()
48424
+ });
48259
48425
  var TrainingProviderDescriptorSchema = external_exports.object({
48260
48426
  addonId: external_exports.string(),
48261
- /** `modal`, `runpod`, `fake`, … */
48427
+ entryId: external_exports.string(),
48428
+ typeId: external_exports.string(),
48429
+ /** Operator-chosen entry name. */
48430
+ name: external_exports.string(),
48431
+ iconAsset: external_exports.string(),
48432
+ /** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
48262
48433
  kind: external_exports.string(),
48263
48434
  label: external_exports.string(),
48264
48435
  gpuTypes: external_exports.array(TrainingGpuOptionSchema).readonly(),
@@ -48270,7 +48441,25 @@ var TrainingProviderDescriptorSchema = external_exports.object({
48270
48441
  dataResidencyNote: external_exports.string(),
48271
48442
  /** Credentials are present — never the values. */
48272
48443
  configured: external_exports.boolean(),
48273
- defaults: TrainingProviderDefaultsSchema
48444
+ defaults: TrainingProviderDefaultsSchema,
48445
+ /**
48446
+ * Values for {@link TrainingProviderTypeSchema}'s `configSchema` — password
48447
+ * fields are keychain {@link SecretFieldView} or `null` / `''` (create),
48448
+ * never plaintext. Same hydrate contract as settings forms (D789).
48449
+ */
48450
+ formValues: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
48451
+ });
48452
+ var TrainingProviderUpdateEntryInputSchema = external_exports.object({
48453
+ entryId: external_exports.string().min(1),
48454
+ name: external_exports.string().min(1),
48455
+ tokenId: external_exports.string().optional(),
48456
+ tokenSecret: external_exports.union([external_exports.string(), external_exports.object({ $secretClear: external_exports.literal(true) })]).optional(),
48457
+ environment: external_exports.string().optional(),
48458
+ gpuType: external_exports.string().optional(),
48459
+ region: external_exports.string().optional(),
48460
+ costCapUsd: external_exports.number().nonnegative().optional(),
48461
+ maxRuntimeSec: external_exports.number().int().positive().optional(),
48462
+ failedDatasetGraceHours: external_exports.number().nonnegative().optional()
48274
48463
  });
48275
48464
  var TrainingCredentialCheckSchema = external_exports.object({
48276
48465
  ok: external_exports.boolean(),
@@ -48317,7 +48506,7 @@ var TrainerSourceRefSchema = external_exports.object({
48317
48506
  revision: external_exports.string().regex(/^[0-9a-f]{7,64}$/)
48318
48507
  });
48319
48508
  var JobRef = {
48320
- addonId: external_exports.string(),
48509
+ entryId: external_exports.string().min(1),
48321
48510
  jobKey: external_exports.string().uuid()
48322
48511
  };
48323
48512
  var TrainingLogLineSchema = external_exports.object({
@@ -48330,17 +48519,45 @@ var trainingProviderCapability = {
48330
48519
  mode: "collection",
48331
48520
  internal: true,
48332
48521
  methods: {
48333
- /** Every provider's offer and settings. Concat-fans across providers. */
48522
+ /** Every entry's offer and settings. Concat-fans across providers. */
48334
48523
  describe: method(external_exports.object({}), external_exports.array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }),
48335
- /** Call the provider with the stored credentials. Never returns them. */
48336
- validateCredentials: method(external_exports.object({ addonId: external_exports.string() }), TrainingCredentialCheckSchema, {
48524
+ /** Creatable types for the Add-entry dialog. Concat-fans. */
48525
+ describeTypes: method(external_exports.object({}), external_exports.array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }),
48526
+ /** Configured entries (pills). Concat-fans. */
48527
+ listEntries: method(external_exports.object({}), external_exports.array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }),
48528
+ /**
48529
+ * Create an entry under this provider type. Pin with `{ addonId }` of the
48530
+ * type's owning addon (from describeTypes).
48531
+ */
48532
+ createEntry: method(external_exports.object({
48533
+ typeId: external_exports.string().min(1),
48534
+ name: external_exports.string().min(1)
48535
+ }), external_exports.object({ entryId: external_exports.string() }), {
48536
+ kind: "mutation",
48537
+ auth: "admin"
48538
+ }),
48539
+ /** Delete an entry. Pin with the owning `{ addonId }`. */
48540
+ deleteEntry: method(external_exports.object({ entryId: external_exports.string().min(1) }), external_exports.object({ ok: external_exports.literal(true) }), {
48541
+ kind: "mutation",
48542
+ auth: "admin"
48543
+ }),
48544
+ /**
48545
+ * Update one entry (name, credentials, defaults). Pin with owning
48546
+ * `{ addonId }`. Empty/omitted `tokenSecret` keeps the stored secret.
48547
+ */
48548
+ updateEntry: method(TrainingProviderUpdateEntryInputSchema, external_exports.object({ ok: external_exports.literal(true) }), {
48549
+ kind: "mutation",
48550
+ auth: "admin"
48551
+ }),
48552
+ /** Call the provider with the entry's stored credentials. Never returns them. */
48553
+ validateCredentials: method(external_exports.object({ entryId: external_exports.string().min(1) }), TrainingCredentialCheckSchema, {
48337
48554
  kind: "mutation",
48338
48555
  auth: "admin",
48339
48556
  timeoutMs: 3e4
48340
48557
  }),
48341
48558
  /** USD range for a run of `gpuSeconds` on `gpuType` in `region`. */
48342
48559
  estimateJob: method(external_exports.object({
48343
- addonId: external_exports.string(),
48560
+ entryId: external_exports.string().min(1),
48344
48561
  gpuType: external_exports.string(),
48345
48562
  region: external_exports.string(),
48346
48563
  datasetBytes: external_exports.number().int().nonnegative(),
@@ -48436,14 +48653,25 @@ var trainingProviderCapability = {
48436
48653
  auth: "admin",
48437
48654
  timeoutMs: 5 * 6e4
48438
48655
  }),
48439
- /** Every job the provider can still see — the orphan sweep diffs it against our records. */
48440
- listJobs: method(external_exports.object({ addonId: external_exports.string() }), external_exports.array(ProviderJobStatusSchema).readonly(), {
48656
+ /**
48657
+ * Jobs this provider can still see. Optional `entryId` filters; omit to
48658
+ * list every entry (orphan sweep). Pin with `{ addonId }`.
48659
+ */
48660
+ listJobs: method(external_exports.object({ entryId: external_exports.string().min(1).optional() }), external_exports.array(ProviderJobStatusSchema).readonly(), {
48441
48661
  auth: "admin",
48442
48662
  timeoutMs: 2 * 6e4
48443
48663
  })
48444
48664
  }
48445
48665
  };
48446
- var TrainingDatasetVersionRowSchema = RetrainDatasetVersionSchema.omit({ frameCount: true }).extend({ frameIds: external_exports.array(external_exports.string()).max(2e4).readonly() });
48666
+ var TrainingCorpusSelectionSchema = external_exports.object({
48667
+ collectionIds: external_exports.array(external_exports.string()).min(1),
48668
+ /** Default complete-only for v1 */
48669
+ workState: external_exports.enum([
48670
+ "complete",
48671
+ "annotated_or_complete",
48672
+ "any_annotated"
48673
+ ]).default("complete")
48674
+ });
48447
48675
  var TrainingBaseModelSchema = external_exports.object({
48448
48676
  modelId: external_exports.string(),
48449
48677
  label: external_exports.string(),
@@ -48460,9 +48688,13 @@ var TrainingPresetSchema = external_exports.enum([
48460
48688
  "thorough"
48461
48689
  ]);
48462
48690
  var TrainingJobRequestSchema = external_exports.object({
48463
- datasetVersionId: external_exports.string().min(1),
48464
- /** The `training-provider` addon that runs it. */
48465
- addonId: external_exports.string().min(1),
48691
+ /** Live collection + work-state criteria; resolved at plan/start. */
48692
+ selection: TrainingCorpusSelectionSchema,
48693
+ /**
48694
+ * The provider **entry** that runs it (credentials + defaults).
48695
+ * Resolve to an owning addon via `training-provider.describe` / `listEntries`.
48696
+ */
48697
+ entryId: external_exports.string().min(1),
48466
48698
  gpuType: external_exports.string().min(1),
48467
48699
  region: external_exports.string(),
48468
48700
  baseModelId: external_exports.string().min(1),
@@ -48515,6 +48747,7 @@ var TrainingJobPlanSchema = external_exports.object({
48515
48747
  dataNotice: external_exports.string()
48516
48748
  });
48517
48749
  var TrainingJobStateSchema = external_exports.enum([
48750
+ "queued",
48518
48751
  "uploading",
48519
48752
  "submitted",
48520
48753
  "starting",
@@ -48568,6 +48801,11 @@ var TrainingJobSchema = external_exports.object({
48568
48801
  createdAt: external_exports.number(),
48569
48802
  updatedAt: external_exports.number(),
48570
48803
  state: TrainingJobStateSchema,
48804
+ /**
48805
+ * Shared by every job enqueued together via `startJobBatch`.
48806
+ * `null` for a lone `startJob`. The engine advances queued siblings by this id.
48807
+ */
48808
+ batchId: external_exports.string().nullable().default(null),
48571
48809
  stage: TrainingStageSchema.nullable(),
48572
48810
  failure: external_exports.object({
48573
48811
  reason: TrainingFailureReasonSchema,
@@ -48579,6 +48817,12 @@ var TrainingJobSchema = external_exports.object({
48579
48817
  maxRuntimeSec: external_exports.number().int().positive(),
48580
48818
  trainer: TrainerSourceRefSchema,
48581
48819
  datasetLayout: RetrainExportLayoutSchema,
48820
+ /** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
48821
+ frameCount: external_exports.number().int().nonnegative(),
48822
+ /** Resolved frame ids at start — the archive ships exactly these. */
48823
+ frameIds: external_exports.array(external_exports.string()).max(2e4).readonly(),
48824
+ /** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
48825
+ annotationHash: external_exports.string(),
48582
48826
  dataset: external_exports.object({
48583
48827
  bytes: external_exports.number().int(),
48584
48828
  sha256: external_exports.string(),
@@ -48626,19 +48870,6 @@ var trainingCapability = {
48626
48870
  mode: "singleton",
48627
48871
  mount: { kind: "hub-only" },
48628
48872
  methods: {
48629
- /** Store a version once. `stored: false` = that id already exists (immutable). */
48630
- putDatasetVersion: method(TrainingDatasetVersionRowSchema, external_exports.object({ stored: external_exports.boolean() }), {
48631
- kind: "mutation",
48632
- auth: "admin"
48633
- }),
48634
- getDatasetVersion: method(IdInput, TrainingDatasetVersionRowSchema.nullable(), { auth: "admin" }),
48635
- /** Every version without its frame list, newest first. */
48636
- listDatasetVersions: method(external_exports.object({}), external_exports.array(RetrainDatasetVersionSchema).readonly(), { auth: "admin" }),
48637
- findDatasetVersionIdByName: method(external_exports.object({ name: external_exports.string() }), external_exports.object({ id: external_exports.string().nullable() }), { auth: "admin" }),
48638
- removeDatasetVersion: method(IdInput, external_exports.object({ removed: external_exports.boolean() }), {
48639
- kind: "mutation",
48640
- auth: "admin"
48641
- }),
48642
48873
  listBaseModels: method(external_exports.object({}), external_exports.array(TrainingBaseModelSchema).readonly(), { auth: "admin" }),
48643
48874
  /** Split, estimate, defaults and any named refusal — nothing is started. */
48644
48875
  planJob: method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
@@ -48667,6 +48898,32 @@ var trainingCapability = {
48667
48898
  auth: "admin",
48668
48899
  timeoutMs: 12e4
48669
48900
  }),
48901
+ /**
48902
+ * Enqueue one job per base model (same selection, entry, caps). The first
48903
+ * becomes `uploading`; the rest stay `queued` until the prior job settles.
48904
+ * One ACTIVE job at a time — a parallel `startJob` still gets
48905
+ * `job-already-running`. The same `idempotencyKey` returns the batch it
48906
+ * already started.
48907
+ */
48908
+ startJobBatch: method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
48909
+ baseModelIds: external_exports.array(external_exports.string().min(1)).min(1),
48910
+ name: external_exports.string().min(1).max(120),
48911
+ maxCostUsd: external_exports.number().positive(),
48912
+ maxRuntimeSec: external_exports.number().int().positive(),
48913
+ idempotencyKey: external_exports.string().min(8).max(80)
48914
+ }), external_exports.discriminatedUnion("kind", [external_exports.object({
48915
+ kind: external_exports.literal("started"),
48916
+ batchId: external_exports.string(),
48917
+ jobs: external_exports.array(TrainingJobSchema).min(1).readonly()
48918
+ }), external_exports.object({
48919
+ kind: external_exports.literal("refused"),
48920
+ reason: TrainingRefusalReasonSchema,
48921
+ detail: external_exports.string()
48922
+ })]), {
48923
+ kind: "mutation",
48924
+ auth: "admin",
48925
+ timeoutMs: 12e4
48926
+ }),
48670
48927
  listJobs: method(external_exports.object({}), external_exports.array(TrainingJobSchema).readonly(), { auth: "admin" }),
48671
48928
  getJob: method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }),
48672
48929
  cancelJob: method(IdInput, TrainingJobSchema, {
@@ -52970,6 +53227,36 @@ var METHOD_ACCESS_MAP = Object.freeze({
52970
53227
  addonId: null,
52971
53228
  access: "view"
52972
53229
  },
53230
+ "oidcConnections.connectionFormSchema": {
53231
+ capName: "oidc-connections",
53232
+ capScope: "system",
53233
+ addonId: null,
53234
+ access: "view"
53235
+ },
53236
+ "oidcConnections.createConnection": {
53237
+ capName: "oidc-connections",
53238
+ capScope: "system",
53239
+ addonId: null,
53240
+ access: "create"
53241
+ },
53242
+ "oidcConnections.deleteConnection": {
53243
+ capName: "oidc-connections",
53244
+ capScope: "system",
53245
+ addonId: null,
53246
+ access: "delete"
53247
+ },
53248
+ "oidcConnections.listConnections": {
53249
+ capName: "oidc-connections",
53250
+ capScope: "system",
53251
+ addonId: null,
53252
+ access: "view"
53253
+ },
53254
+ "oidcConnections.updateConnection": {
53255
+ capName: "oidc-connections",
53256
+ capScope: "system",
53257
+ addonId: null,
53258
+ access: "create"
53259
+ },
52973
53260
  "osd.getStatus": {
52974
53261
  capName: "osd",
52975
53262
  capScope: "device",
@@ -53042,6 +53329,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
53042
53329
  addonId: null,
53043
53330
  access: "create"
53044
53331
  },
53332
+ "osdManager.setSlotCameraEnabled": {
53333
+ capName: "osd-manager",
53334
+ capScope: "system",
53335
+ addonId: null,
53336
+ access: "create"
53337
+ },
53045
53338
  "osdManager.upsertTemplate": {
53046
53339
  capName: "osd-manager",
53047
53340
  capScope: "system",
@@ -53180,12 +53473,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
53180
53473
  addonId: null,
53181
53474
  access: "create"
53182
53475
  },
53183
- "pipelineAnalytics.createRetrainDatasetVersion": {
53184
- capName: "pipeline-analytics",
53185
- capScope: "device",
53186
- addonId: null,
53187
- access: "create"
53188
- },
53189
53476
  "pipelineAnalytics.deleteDeviceEvents": {
53190
53477
  capName: "pipeline-analytics",
53191
53478
  capScope: "device",
@@ -53198,12 +53485,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
53198
53485
  addonId: null,
53199
53486
  access: "delete"
53200
53487
  },
53201
- "pipelineAnalytics.deleteRetrainDatasetVersion": {
53202
- capName: "pipeline-analytics",
53203
- capScope: "device",
53204
- addonId: null,
53205
- access: "delete"
53206
- },
53207
53488
  "pipelineAnalytics.deleteTracks": {
53208
53489
  capName: "pipeline-analytics",
53209
53490
  capScope: "device",
@@ -53306,6 +53587,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
53306
53587
  addonId: null,
53307
53588
  access: "view"
53308
53589
  },
53590
+ "pipelineAnalytics.getRetrainCorpusKpi": {
53591
+ capName: "pipeline-analytics",
53592
+ capScope: "device",
53593
+ addonId: null,
53594
+ access: "view"
53595
+ },
53309
53596
  "pipelineAnalytics.getRetrainExportUrl": {
53310
53597
  capName: "pipeline-analytics",
53311
53598
  capScope: "device",
@@ -53426,7 +53713,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
53426
53713
  addonId: null,
53427
53714
  access: "view"
53428
53715
  },
53429
- "pipelineAnalytics.listRetrainDatasetVersions": {
53716
+ "pipelineAnalytics.listRetrainCorpusPage": {
53430
53717
  capName: "pipeline-analytics",
53431
53718
  capScope: "device",
53432
53719
  addonId: null,
@@ -53480,12 +53767,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
53480
53767
  addonId: null,
53481
53768
  access: "create"
53482
53769
  },
53483
- "pipelineAnalytics.previewRetrainDataset": {
53484
- capName: "pipeline-analytics",
53485
- capScope: "device",
53486
- addonId: null,
53487
- access: "view"
53488
- },
53489
53770
  "pipelineAnalytics.proposeRetrainAnnotations": {
53490
53771
  capName: "pipeline-analytics",
53491
53772
  capScope: "device",
@@ -53564,6 +53845,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
53564
53845
  addonId: null,
53565
53846
  access: "create"
53566
53847
  },
53848
+ "pipelineAnalytics.resolveRetrainTrainingCorpus": {
53849
+ capName: "pipeline-analytics",
53850
+ capScope: "device",
53851
+ addonId: null,
53852
+ access: "view"
53853
+ },
53567
53854
  "pipelineAnalytics.restageRetrainTrack": {
53568
53855
  capName: "pipeline-analytics",
53569
53856
  capScope: "device",
@@ -53624,12 +53911,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
53624
53911
  addonId: null,
53625
53912
  access: "create"
53626
53913
  },
53627
- "pipelineAnalytics.verifyRetrainDatasetVersion": {
53628
- capName: "pipeline-analytics",
53629
- capScope: "device",
53630
- addonId: null,
53631
- access: "view"
53632
- },
53633
53914
  "pipelineAnalytics.wipeAllAnalytics": {
53634
53915
  capName: "pipeline-analytics",
53635
53916
  capScope: "device",
@@ -56024,18 +56305,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
56024
56305
  addonId: null,
56025
56306
  access: "create"
56026
56307
  },
56027
- "training.findDatasetVersionIdByName": {
56028
- capName: "training",
56029
- capScope: "system",
56030
- addonId: null,
56031
- access: "view"
56032
- },
56033
- "training.getDatasetVersion": {
56034
- capName: "training",
56035
- capScope: "system",
56036
- addonId: null,
56037
- access: "view"
56038
- },
56039
56308
  "training.getJob": {
56040
56309
  capName: "training",
56041
56310
  capScope: "system",
@@ -56054,12 +56323,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
56054
56323
  addonId: null,
56055
56324
  access: "view"
56056
56325
  },
56057
- "training.listDatasetVersions": {
56058
- capName: "training",
56059
- capScope: "system",
56060
- addonId: null,
56061
- access: "view"
56062
- },
56063
56326
  "training.listJobs": {
56064
56327
  capName: "training",
56065
56328
  capScope: "system",
@@ -56072,54 +56335,66 @@ var METHOD_ACCESS_MAP = Object.freeze({
56072
56335
  addonId: null,
56073
56336
  access: "view"
56074
56337
  },
56075
- "training.putDatasetVersion": {
56338
+ "training.registerResult": {
56076
56339
  capName: "training",
56077
56340
  capScope: "system",
56078
56341
  addonId: null,
56079
56342
  access: "create"
56080
56343
  },
56081
- "training.registerResult": {
56344
+ "training.rollbackCanary": {
56082
56345
  capName: "training",
56083
56346
  capScope: "system",
56084
56347
  addonId: null,
56085
56348
  access: "create"
56086
56349
  },
56087
- "training.removeDatasetVersion": {
56350
+ "training.startJob": {
56088
56351
  capName: "training",
56089
56352
  capScope: "system",
56090
56353
  addonId: null,
56091
- access: "delete"
56354
+ access: "create"
56092
56355
  },
56093
- "training.rollbackCanary": {
56356
+ "training.startJobBatch": {
56094
56357
  capName: "training",
56095
56358
  capScope: "system",
56096
56359
  addonId: null,
56097
56360
  access: "create"
56098
56361
  },
56099
- "training.startJob": {
56100
- capName: "training",
56362
+ "trainingProvider.cancelJob": {
56363
+ capName: "training-provider",
56101
56364
  capScope: "system",
56102
56365
  addonId: null,
56103
56366
  access: "create"
56104
56367
  },
56105
- "trainingProvider.cancelJob": {
56368
+ "trainingProvider.cleanupJob": {
56106
56369
  capName: "training-provider",
56107
56370
  capScope: "system",
56108
56371
  addonId: null,
56109
56372
  access: "create"
56110
56373
  },
56111
- "trainingProvider.cleanupJob": {
56374
+ "trainingProvider.createEntry": {
56112
56375
  capName: "training-provider",
56113
56376
  capScope: "system",
56114
56377
  addonId: null,
56115
56378
  access: "create"
56116
56379
  },
56380
+ "trainingProvider.deleteEntry": {
56381
+ capName: "training-provider",
56382
+ capScope: "system",
56383
+ addonId: null,
56384
+ access: "delete"
56385
+ },
56117
56386
  "trainingProvider.describe": {
56118
56387
  capName: "training-provider",
56119
56388
  capScope: "system",
56120
56389
  addonId: null,
56121
56390
  access: "view"
56122
56391
  },
56392
+ "trainingProvider.describeTypes": {
56393
+ capName: "training-provider",
56394
+ capScope: "system",
56395
+ addonId: null,
56396
+ access: "view"
56397
+ },
56123
56398
  "trainingProvider.estimateJob": {
56124
56399
  capName: "training-provider",
56125
56400
  capScope: "system",
@@ -56132,6 +56407,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
56132
56407
  addonId: null,
56133
56408
  access: "view"
56134
56409
  },
56410
+ "trainingProvider.listEntries": {
56411
+ capName: "training-provider",
56412
+ capScope: "system",
56413
+ addonId: null,
56414
+ access: "view"
56415
+ },
56135
56416
  "trainingProvider.listJobEvents": {
56136
56417
  capName: "training-provider",
56137
56418
  capScope: "system",
@@ -56162,6 +56443,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
56162
56443
  addonId: null,
56163
56444
  access: "create"
56164
56445
  },
56446
+ "trainingProvider.updateEntry": {
56447
+ capName: "training-provider",
56448
+ capScope: "system",
56449
+ addonId: null,
56450
+ access: "create"
56451
+ },
56165
56452
  "trainingProvider.uploadDataset": {
56166
56453
  capName: "training-provider",
56167
56454
  capScope: "system",
@@ -59410,6 +59697,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
59410
59697
  form: "single",
59411
59698
  optional: false
59412
59699
  }],
59700
+ "osdManager.setSlotCameraEnabled": [{
59701
+ name: "deviceId",
59702
+ form: "single",
59703
+ optional: false
59704
+ }],
59413
59705
  "petFeeder.callPet": [{
59414
59706
  name: "deviceId",
59415
59707
  form: "single",
@@ -59630,6 +59922,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
59630
59922
  form: "array",
59631
59923
  optional: false
59632
59924
  }],
59925
+ "pipelineAnalytics.listRetrainCorpusPage": [{
59926
+ name: "deviceIds",
59927
+ form: "array",
59928
+ optional: true
59929
+ }],
59633
59930
  "pipelineAnalytics.listRetrainStaging": [{
59634
59931
  name: "deviceIds",
59635
59932
  form: "array",
@@ -60739,6 +61036,7 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
60739
61036
  });
60740
61037
  var CAP_PROVIDER_KIND_MAP = Object.freeze({
60741
61038
  "broker": "broker",
61039
+ "calendar-source": "calendar",
60742
61040
  "device-export": "device-export",
60743
61041
  "llm": "ai",
60744
61042
  "mesh-network": "mesh",
@@ -61466,6 +61764,26 @@ var NC_TEMPLATE_VARS = [
61466
61764
  "server-updated"
61467
61765
  ]
61468
61766
  },
61767
+ {
61768
+ name: "nodeName",
61769
+ label: "Node name",
61770
+ example: "little-unraid",
61771
+ group: "system",
61772
+ families: ["rule"],
61773
+ fields: [...RULE_TEXT],
61774
+ kinds: ["system"],
61775
+ systemEventKinds: ["node-online", "node-offline"]
61776
+ },
61777
+ {
61778
+ name: "offlineFor",
61779
+ label: "Offline for",
61780
+ example: "44 min",
61781
+ group: "system",
61782
+ families: ["rule"],
61783
+ fields: [...RULE_TEXT],
61784
+ kinds: ["system"],
61785
+ systemEventKinds: ["node-online"]
61786
+ },
61469
61787
  {
61470
61788
  name: "devices",
61471
61789
  label: "Devices",
@@ -61752,7 +62070,7 @@ var NC_TEMPLATE_VARS = [
61752
62070
  {
61753
62071
  name: "skipped",
61754
62072
  label: "Skipped count",
61755
- description: "How many named devices the mode cannot arm \u2014 muted, detection off, offline (title: m saltati).",
62073
+ description: "How many named devices the mode cannot arm \u2014 muted, detection off, offline, or Arm-anyway exclusions (title: m saltati).",
61756
62074
  example: "1",
61757
62075
  group: "system",
61758
62076
  families: ["rule"],