@camstack/addon-terminal 0.1.130 → 0.1.132

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.
Files changed (3) hide show
  1. package/dist/addon.js +472 -140
  2. package/dist/addon.mjs +472 -140
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -31,7 +31,7 @@ let node_module = require("node:module");
31
31
  let sharp = require("sharp");
32
32
  sharp = __toESM(sharp);
33
33
  let node_http = require("node:http");
34
- //#region ../types/dist/event-category-DaIZi00R.mjs
34
+ //#region ../types/dist/event-category-C4hVnRo8.mjs
35
35
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
36
36
  EventCategory["SystemBoot"] = "system.boot";
37
37
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -250,7 +250,17 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
250
250
  EventCategory["RecordingStopped"] = "recording.stopped";
251
251
  EventCategory["RecordingError"] = "recording.error";
252
252
  EventCategory["RecordingHealthDegraded"] = "recording.health.degraded";
253
+ /** Recording enabled but no segment finalized for the NC stall window. */
254
+ EventCategory["RecordingHealthStalled"] = "recording.health.stalled";
255
+ /** Recovery from {@link RecordingHealthStalled}. */
256
+ EventCategory["RecordingHealthOk"] = "recording.health.ok";
253
257
  EventCategory["RecordingStorageCritical"] = "recording.storage.critical";
258
+ /** Free space on a storage location crossed the warn bar. */
259
+ EventCategory["StorageLocationLow"] = "storage.location.low";
260
+ /** Free space at/under the critical bar, or capacity probe failed (`null`). */
261
+ EventCategory["StorageLocationCritical"] = "storage.location.critical";
262
+ /** Recovery from low/critical on a storage location. */
263
+ EventCategory["StorageLocationOk"] = "storage.location.ok";
254
264
  EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
255
265
  EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
256
266
  EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
@@ -5409,7 +5419,7 @@ var ZodIssueCode = {
5409
5419
  var ZodFirstPartyTypeKind;
5410
5420
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5411
5421
  //#endregion
5412
- //#region ../types/dist/sleep-r3RWkGVx.mjs
5422
+ //#region ../types/dist/sleep-Tkp9dHXv.mjs
5413
5423
  /**
5414
5424
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5415
5425
  * window to float samples (D455).
@@ -9474,6 +9484,16 @@ var CompositionSchema = object({
9474
9484
  seen.add(feature.cap);
9475
9485
  });
9476
9486
  });
9487
+ var NodeColorIdSchema = _enum([
9488
+ "node-a",
9489
+ "node-b",
9490
+ "node-c",
9491
+ "node-d",
9492
+ "node-e",
9493
+ "node-f",
9494
+ "node-g",
9495
+ "node-h"
9496
+ ]);
9477
9497
  new Set([
9478
9498
  "track",
9479
9499
  "face",
@@ -13716,7 +13736,14 @@ var BrokerProviderInfoSchema = object({
13716
13736
  /** Broker kinds this provider can create, with a display label. */
13717
13737
  kinds: array(object({
13718
13738
  kind: string(),
13719
- label: string()
13739
+ label: string(),
13740
+ /**
13741
+ * Relative hub path to start an interactive account link (OAuth popup).
13742
+ * May include `{{brokerId}}`; admin-ui substitutes and appends `?popup=1`.
13743
+ */
13744
+ interactiveConnectPath: string().min(1).optional(),
13745
+ /** Relative hub path to disconnect the linked account (same popup pattern). */
13746
+ interactiveDisconnectPath: string().min(1).optional()
13720
13747
  }))
13721
13748
  });
13722
13749
  var ListInputSchema = object({
@@ -18454,14 +18481,14 @@ var LlmProfileSchema = object({
18454
18481
  /** ConfigUISchema tree passed through untyped on the wire (the
18455
18482
  * notification-output `ConfigSchemaPassthrough` precedent at
18456
18483
  * notification-output.cap.ts:151); the exported TS type re-tightens it. */
18457
- var ConfigSchemaPassthrough$1 = unknown();
18484
+ var ConfigSchemaPassthrough$3 = unknown();
18458
18485
  var LlmProfileKindDescriptorSchema = object({
18459
18486
  kind: LlmProfileKindSchema,
18460
18487
  label: string(),
18461
18488
  icon: string(),
18462
18489
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
18463
18490
  addonId: string(),
18464
- configSchema: ConfigSchemaPassthrough$1
18491
+ configSchema: ConfigSchemaPassthrough$3
18465
18492
  });
18466
18493
  var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
18467
18494
  var LlmDefaultSchema = object({
@@ -19582,7 +19609,7 @@ var TargetKindCapsSchema = object({
19582
19609
  * the union is large and not meant for runtime validation here; the exported
19583
19610
  * `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
19584
19611
  */
19585
- var ConfigSchemaPassthrough = unknown();
19612
+ var ConfigSchemaPassthrough$2 = unknown();
19586
19613
  var TargetKindSchema = object({
19587
19614
  kind: string(),
19588
19615
  label: string(),
@@ -19619,7 +19646,7 @@ var TargetKindSchema = object({
19619
19646
  * its raster path, which is the safe default for an unknown image.
19620
19647
  */
19621
19648
  iconMediaType: string().optional(),
19622
- configSchema: ConfigSchemaPassthrough,
19649
+ configSchema: ConfigSchemaPassthrough$2,
19623
19650
  /**
19624
19651
  * The config keys that decide WHERE this kind's secrets are sent (server,
19625
19652
  * base URL, instance, chat, recipient). A save that changes any of them
@@ -20576,6 +20603,12 @@ var NcSystemEventKindSchema = _enum([
20576
20603
  "node-updating",
20577
20604
  "node-inference-unavailable",
20578
20605
  "detection-blind",
20606
+ "recording-stalled",
20607
+ "recording-healthy",
20608
+ "recording-degraded",
20609
+ "storage-location-low",
20610
+ "storage-location-critical",
20611
+ "storage-location-ok",
20579
20612
  "addon-crash-loop",
20580
20613
  "addon-update-available",
20581
20614
  "server-update-available",
@@ -22956,6 +22989,61 @@ var OauthIntegrationDescriptorSchema = object({
22956
22989
  });
22957
22990
  method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
22958
22991
  /**
22992
+ * `oidc-connections` — CRUD for IdP rows under `auth-oidc` (D828 sibling).
22993
+ *
22994
+ * One hub-only singleton (`auth-oidc`). The Settings UI is a DataTable +
22995
+ * ItemFormDialog; there is no `editable-array` in `globalSettingsSchema`.
22996
+ * Operator-chosen `id` is the URL slug (`/addon/auth-oidc/<id>/…`) and is
22997
+ * immutable after create.
22998
+ */
22999
+ var ConfigSchemaPassthrough$1 = unknown();
23000
+ var OidcConnectionSchema = object({
23001
+ id: string().min(1),
23002
+ displayName: string(),
23003
+ icon: string(),
23004
+ issuerUrl: string(),
23005
+ clientId: string(),
23006
+ /** Client id + secret present — never the secret value. */
23007
+ configured: boolean(),
23008
+ /**
23009
+ * Values for the connection form schema. `clientSecret` is a keychain
23010
+ * {@link SecretFieldView} or `null` / `''`, never plaintext (D789).
23011
+ */
23012
+ formValues: record(string(), unknown()).optional()
23013
+ });
23014
+ /**
23015
+ * Patch one connection. Omitted or empty `clientSecret` keeps the stored
23016
+ * secret (D787). `{ $secretClear: true }` clears it. `id` is never renamed.
23017
+ */
23018
+ var OidcConnectionUpdateInputSchema = object({
23019
+ id: string().min(1),
23020
+ displayName: string().min(1),
23021
+ icon: string().optional(),
23022
+ issuerUrl: string().optional(),
23023
+ clientId: string().optional(),
23024
+ clientSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
23025
+ redirectUri: string().optional(),
23026
+ scopes: string().optional(),
23027
+ usernameClaim: _enum([
23028
+ "preferred_username",
23029
+ "email",
23030
+ "sub"
23031
+ ]).optional()
23032
+ });
23033
+ method(object({}), ConfigSchemaPassthrough$1, { auth: "admin" }), method(object({}), array(OidcConnectionSchema).readonly(), { auth: "admin" }), method(object({
23034
+ id: string().min(1).regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "id must be a lowercase slug"),
23035
+ displayName: string().min(1)
23036
+ }), object({ id: string() }), {
23037
+ kind: "mutation",
23038
+ auth: "admin"
23039
+ }), method(OidcConnectionUpdateInputSchema, object({ ok: literal(true) }), {
23040
+ kind: "mutation",
23041
+ auth: "admin"
23042
+ }), method(object({ id: string().min(1) }), object({ ok: literal(true) }), {
23043
+ kind: "mutation",
23044
+ auth: "admin"
23045
+ });
23046
+ /**
22959
23047
  * What started a camera's onboard motion (D672). `camera` is the camera's own
22960
23048
  * firmware; `sensor` is a device the operator ATTACHED to it. Absent on the
22961
23049
  * wire means the camera: only the camera-sensors bridge ever says `sensor`.
@@ -24312,24 +24400,69 @@ var RetrainFrameListSchema = object({
24312
24400
  /** What the page pre-selects — the native key frame when one survives. */
24313
24401
  autoPickMediaId: number().int().optional()
24314
24402
  });
24403
+ /** Exclusive partition of a corpus copy's annotation progress (design §4.2). */
24404
+ var RetrainFrameWorkStateSchema = _enum([
24405
+ "unannotated",
24406
+ "annotated",
24407
+ "complete"
24408
+ ]);
24409
+ /**
24410
+ * Filters for paginated corpus list, KPI, and matching export (design §4.4).
24411
+ * Every narrowing field is ANDed; omitted fields impose no constraint.
24412
+ */
24413
+ var RetrainCorpusFilterSchema = object({
24414
+ workState: RetrainFrameWorkStateSchema.optional(),
24415
+ deviceIds: array(number()).max(500).optional(),
24416
+ /** When set, only frames in this named collection. */
24417
+ collectionId: string().optional(),
24418
+ /** Frames that carry at least one saved annotation in one of these classes. */
24419
+ classes: array(RetrainMacroClassSchema).optional(),
24420
+ page: number().int().positive().default(1),
24421
+ pageSize: number().int().positive().max(100).default(50)
24422
+ });
24423
+ var RetrainCorpusPageSchema = object({
24424
+ frames: array(RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema })).readonly(),
24425
+ total: number().int().nonnegative(),
24426
+ page: number().int().positive(),
24427
+ pageSize: number().int().positive()
24428
+ });
24429
+ var RetrainCorpusKpiCameraRowSchema = object({
24430
+ deviceId: number(),
24431
+ unannotated: number().int().nonnegative(),
24432
+ annotated: number().int().nonnegative(),
24433
+ complete: number().int().nonnegative(),
24434
+ /** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
24435
+ * `null` when the corpus is empty (no ratio). */
24436
+ pctOfCorpus: number().min(0).max(1).nullable()
24437
+ });
24438
+ var RetrainCorpusKpiSchema = object({
24439
+ total: number().int().nonnegative(),
24440
+ unannotated: number().int().nonnegative(),
24441
+ annotated: number().int().nonnegative(),
24442
+ complete: number().int().nonnegative(),
24443
+ cameras: array(RetrainCorpusKpiCameraRowSchema).readonly()
24444
+ });
24315
24445
  /**
24316
24446
  * Which frames an annotated export carries. Every field narrows; an empty
24317
- * filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
24318
- * list owned by whoever trains (the training orchestrator), so `frameIds` is
24319
- * the primitive a version export uses; `batchId` re-selects what an earlier
24320
- * export carried (`exportedInBatch`).
24447
+ * filter is every annotated copy. `frameIds` is the primitive a job or
24448
+ * download uses; `batchId` re-selects what an earlier export carried
24449
+ * (`exportedInBatch`). Frozen dataset versions were removed — live selection
24450
+ * resolves to `frameIds` at plan/start.
24321
24451
  */
24322
24452
  var RetrainExportFilterSchema = object({
24323
24453
  deviceIds: array(number()).optional(),
24324
24454
  frameIds: array(string()).max(2e4).optional(),
24325
24455
  /** Only frames in at least one of these named collections. */
24326
24456
  collectionIds: array(string()).max(200).optional(),
24327
- /** Exactly the frames of this dataset version (and its completeOnly). An
24328
- * unknown id selects nothing. */
24329
- datasetVersionId: string().optional(),
24457
+ /** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
24458
+ collectionId: string().optional(),
24330
24459
  batchId: string().optional(),
24331
24460
  /** Only frames the operator marked complete (all subjects boxed). */
24332
- completeOnly: boolean().optional()
24461
+ completeOnly: boolean().optional(),
24462
+ /** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
24463
+ workState: RetrainFrameWorkStateSchema.optional(),
24464
+ /** Frames with at least one saved annotation in one of these classes. */
24465
+ classes: array(RetrainMacroClassSchema).optional()
24333
24466
  });
24334
24467
  /**
24335
24468
  * `frames`: the full frame copies, boxes in `annotations.json`.
@@ -24529,8 +24662,7 @@ var RetrainDatasetStatsSchema = object({
24529
24662
  completeFrames: number().int()
24530
24663
  })).readonly()
24531
24664
  });
24532
- /** An immutable dataset version, without its frame list. */
24533
- var RetrainDatasetVersionSchema = object({
24665
+ object({
24534
24666
  id: string(),
24535
24667
  name: string(),
24536
24668
  createdAt: number(),
@@ -24538,22 +24670,33 @@ var RetrainDatasetVersionSchema = object({
24538
24670
  layout: RetrainExportLayoutSchema,
24539
24671
  completeOnly: boolean(),
24540
24672
  frameCount: number().int(),
24541
- /** sha256 of what the frames taught when the version was frozen. */
24542
24673
  annotationHash: string(),
24543
- /** The export manifest schema the version was cut under. */
24544
24674
  manifestSchema: string(),
24545
24675
  stats: RetrainDatasetStatsSchema
24546
24676
  });
24547
- var CreateRetrainDatasetVersionResultSchema = discriminatedUnion("kind", [object({
24548
- kind: literal("created"),
24549
- version: RetrainDatasetVersionSchema
24677
+ /**
24678
+ * Live training corpus criteria — same shape as `TrainingCorpusSelection` on
24679
+ * the training cap. Resolved here so plan/start and the annotated export share
24680
+ * one definition of "the frames" (`buildRetrainExportPlan`).
24681
+ */
24682
+ var RetrainTrainingCorpusSelectionSchema = object({
24683
+ collectionIds: array(string()).min(1),
24684
+ workState: _enum([
24685
+ "complete",
24686
+ "annotated_or_complete",
24687
+ "any_annotated"
24688
+ ]).default("complete")
24689
+ });
24690
+ var RetrainTrainingCorpusResolveResultSchema = discriminatedUnion("kind", [object({
24691
+ kind: literal("resolved"),
24692
+ frameIds: array(string()).max(2e4).readonly(),
24693
+ stats: RetrainDatasetStatsSchema,
24694
+ annotationHash: string(),
24695
+ layout: RetrainExportLayoutSchema
24550
24696
  }), object({
24551
24697
  kind: literal("refused"),
24552
- reason: _enum([
24553
- "empty-name",
24554
- "duplicate-name",
24555
- "no-frames"
24556
- ])
24698
+ reason: _enum(["unknown-collection", "no-frames"]),
24699
+ detail: string()
24557
24700
  })]);
24558
24701
  /** The outcome of a lifecycle move owned by the retrain page. */
24559
24702
  var RetrainTransitionResultSchema = object({
@@ -25260,6 +25403,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25260
25403
  }), array(RetrainTrackSchema).readonly(), {
25261
25404
  kind: "query",
25262
25405
  auth: "admin"
25406
+ }), method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
25407
+ kind: "query",
25408
+ auth: "admin"
25409
+ }), method(object({}), RetrainCorpusKpiSchema, {
25410
+ kind: "query",
25411
+ auth: "admin"
25263
25412
  }), method(object({ trackId: string() }), RetrainFrameListSchema, {
25264
25413
  kind: "query",
25265
25414
  auth: "admin"
@@ -25355,36 +25504,6 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25355
25504
  kind: "mutation",
25356
25505
  auth: "admin",
25357
25506
  timeoutMs: 12e4
25358
- }), method(object({
25359
- selection: RetrainDatasetSelectionSchema,
25360
- completeOnly: boolean().optional()
25361
- }), RetrainDatasetStatsSchema, {
25362
- kind: "query",
25363
- auth: "admin"
25364
- }), method(object({
25365
- name: string().max(120),
25366
- selection: RetrainDatasetSelectionSchema,
25367
- layout: RetrainExportLayoutSchema,
25368
- completeOnly: boolean()
25369
- }), CreateRetrainDatasetVersionResultSchema, {
25370
- kind: "mutation",
25371
- auth: "admin",
25372
- timeoutMs: 12e4
25373
- }), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
25374
- kind: "query",
25375
- auth: "admin"
25376
- }), method(object({ id: string() }), object({ deleted: boolean() }), {
25377
- kind: "mutation",
25378
- auth: "admin"
25379
- }), method(object({ id: string() }), object({
25380
- found: boolean(),
25381
- annotationHash: string(),
25382
- matches: boolean(),
25383
- missingFrames: number().int()
25384
- }), {
25385
- kind: "query",
25386
- auth: "admin",
25387
- timeoutMs: 12e4
25388
25507
  }), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
25389
25508
  kind: "query",
25390
25509
  auth: "admin"
@@ -25411,6 +25530,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25411
25530
  }), method(object({}), array(RetrainCollectionSchema).readonly(), {
25412
25531
  kind: "query",
25413
25532
  auth: "admin"
25533
+ }), method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
25534
+ kind: "query",
25535
+ auth: "admin",
25536
+ timeoutMs: 6e4
25414
25537
  }), method(object({
25415
25538
  id: string(),
25416
25539
  name: string().max(120)
@@ -26027,11 +26150,14 @@ var HardwareClassIdSchema = _enum([
26027
26150
  "intel-n-series",
26028
26151
  "apple-m-base",
26029
26152
  "apple-m-pro",
26153
+ "amd-phoenix",
26030
26154
  "unknown"
26031
26155
  ]);
26032
26156
  var AcceleratorKindSchema = _enum([
26033
26157
  "intel-npu",
26034
26158
  "intel-igpu",
26159
+ "amd-igpu",
26160
+ "amd-npu",
26035
26161
  "x86-cpu",
26036
26162
  "arm-cpu",
26037
26163
  "apple-ane",
@@ -27961,6 +28087,8 @@ var AgentPipelineSettingsSchema = object({
27961
28087
  * address is wrong (multi-homed host, NAT, custom interface).
27962
28088
  */
27963
28089
  reachableHost: string().optional(),
28090
+ /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
28091
+ color: NodeColorIdSchema.optional(),
27964
28092
  /**
27965
28093
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
27966
28094
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
@@ -28510,8 +28638,9 @@ method(object({
28510
28638
  auth: "admin"
28511
28639
  }), method(object({
28512
28640
  agentNodeId: string(),
28513
- reachableHost: string().nullable()
28514
- }), object({ success: literal(true) }), {
28641
+ reachableHost: string().nullable().optional(),
28642
+ color: NodeColorIdSchema.nullable().optional()
28643
+ }).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), object({ success: literal(true) }), {
28515
28644
  kind: "mutation",
28516
28645
  auth: "admin"
28517
28646
  }), method(object({
@@ -31735,7 +31864,7 @@ var CustomActionInputSchema = object({
31735
31864
  action: string().min(1),
31736
31865
  input: unknown()
31737
31866
  });
31738
- method(_void(), array(AddonListItemSchema).readonly()), method(object({
31867
+ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSchema).readonly()), method(object({
31739
31868
  addonId: string(),
31740
31869
  limit: number().min(1).max(500).default(100),
31741
31870
  level: LogLevelSchema$2.optional()
@@ -37216,6 +37345,7 @@ var OsdNamedTemplateSchema = object({
37216
37345
  });
37217
37346
  /** Where a slot's value comes from. */
37218
37347
  var OsdSourceSchema = discriminatedUnion("kind", [
37348
+ object({ kind: literal("none") }),
37219
37349
  object({
37220
37350
  kind: literal("static"),
37221
37351
  text: string().max(64)
@@ -37342,6 +37472,13 @@ method(object({ deviceId: number().int() }), object({
37342
37472
  }), object({ success: literal(true) }), {
37343
37473
  kind: "mutation",
37344
37474
  auth: "admin"
37475
+ }), method(object({
37476
+ deviceId: number().int(),
37477
+ slotId: string().min(1),
37478
+ enabled: boolean()
37479
+ }), object({ success: literal(true) }), {
37480
+ kind: "mutation",
37481
+ auth: "admin"
37345
37482
  }), method(object({
37346
37483
  sourceDeviceId: number().int(),
37347
37484
  targetDeviceId: number().int()
@@ -37773,7 +37910,15 @@ var GpuInfoSchema = object({
37773
37910
  name: string(),
37774
37911
  memoryMB: number().optional()
37775
37912
  });
37776
- var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
37913
+ var NpuInfoSchema = object({
37914
+ type: _enum([
37915
+ "apple-ane",
37916
+ "intel-npu",
37917
+ "amd-xdna"
37918
+ ]),
37919
+ name: string().optional(),
37920
+ generation: _enum(["xdna1", "xdna2"]).optional()
37921
+ });
37777
37922
  var CoralInfoSchema = object({
37778
37923
  type: literal("coral-edgetpu"),
37779
37924
  bus: string().optional()
@@ -42516,9 +42661,11 @@ var zoneRulesCapability = {
42516
42661
  * once is what makes a second provider (RunPod, a local NVIDIA node) a new
42517
42662
  * manifest entry and nothing else.
42518
42663
  *
42519
- * Collection, routed by the `addonId` in every single-row input (the `llm` /
42520
- * `notification-output` posture); `describe` concat-fans across providers.
42521
- * Every method is `admin`: these spend money.
42664
+ * Collection of provider **types** (addons). Each addon owns zero or more
42665
+ * **entries** (credentials + defaults). Concat-fans: `describe`,
42666
+ * `describeTypes`, `listEntries`, `listJobs`. Single-row work is keyed by
42667
+ * `entryId`; callers also pass the owning `addonId` as the collection
42668
+ * selector (broker posture). Every method is `admin`: these spend money.
42522
42669
  *
42523
42670
  * Every cloud object a provider creates is tagged with the orchestrator's
42524
42671
  * `jobKey`, so a retried submit finds the job it already started instead of
@@ -42542,8 +42689,8 @@ var TrainingRegionOptionSchema = object({
42542
42689
  priceMultiplier: number().positive()
42543
42690
  });
42544
42691
  /**
42545
- * The provider's per-account settings, as the orchestrator reads them. They
42546
- * live in the PROVIDER addon's settings (operator decision 2026-10-08: they
42692
+ * The provider's per-entry settings, as the orchestrator reads them. They
42693
+ * live on the PROVIDER addon's entry (operator decision 2026-10-08: they
42547
42694
  * depend on the user's account), never hard-coded in the orchestrator.
42548
42695
  */
42549
42696
  var TrainingProviderDefaultsSchema = object({
@@ -42554,9 +42701,44 @@ var TrainingProviderDefaultsSchema = object({
42554
42701
  /** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
42555
42702
  failedDatasetGraceHours: number().nonnegative()
42556
42703
  });
42704
+ /**
42705
+ * Entry form schema for a provider type — same seam as notification
42706
+ * `TargetKind.configSchema` (`z.unknown()` at the wire; callers tighten to
42707
+ * {@link ConfigUISchema}). Drives `ConfigFormBuilder` on Training → Providers.
42708
+ */
42709
+ var ConfigSchemaPassthrough = unknown();
42710
+ /** One creatable provider type, for the Add-entry dialog. */
42711
+ var TrainingProviderTypeSchema = object({
42712
+ typeId: string(),
42713
+ label: string(),
42714
+ /** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
42715
+ iconAsset: string(),
42716
+ /** Owning `training-provider` addon — collection selector for createEntry. */
42717
+ addonId: string(),
42718
+ /**
42719
+ * Fields for one entry of this type (credentials + defaults). Absent on a
42720
+ * type that only needs a name. Password fields are keychain-backed on the
42721
+ * provider addon (`secretStatePaths`), not D634 plaintext.
42722
+ */
42723
+ configSchema: ConfigSchemaPassthrough.optional()
42724
+ });
42725
+ /** One configured account / workspace under a provider type. */
42726
+ var TrainingProviderEntrySchema = object({
42727
+ entryId: string(),
42728
+ typeId: string(),
42729
+ name: string(),
42730
+ addonId: string(),
42731
+ /** Credentials are present — never the values. */
42732
+ configured: boolean()
42733
+ });
42557
42734
  var TrainingProviderDescriptorSchema = object({
42558
42735
  addonId: string(),
42559
- /** `modal`, `runpod`, `fake`, … */
42736
+ entryId: string(),
42737
+ typeId: string(),
42738
+ /** Operator-chosen entry name. */
42739
+ name: string(),
42740
+ iconAsset: string(),
42741
+ /** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
42560
42742
  kind: string(),
42561
42743
  label: string(),
42562
42744
  gpuTypes: array(TrainingGpuOptionSchema).readonly(),
@@ -42568,7 +42750,30 @@ var TrainingProviderDescriptorSchema = object({
42568
42750
  dataResidencyNote: string(),
42569
42751
  /** Credentials are present — never the values. */
42570
42752
  configured: boolean(),
42571
- defaults: TrainingProviderDefaultsSchema
42753
+ defaults: TrainingProviderDefaultsSchema,
42754
+ /**
42755
+ * Values for {@link TrainingProviderTypeSchema}'s `configSchema` — password
42756
+ * fields are keychain {@link SecretFieldView} or `null` / `''` (create),
42757
+ * never plaintext. Same hydrate contract as settings forms (D789).
42758
+ */
42759
+ formValues: record(string(), unknown()).optional()
42760
+ });
42761
+ /**
42762
+ * Patch one entry's name, credentials and defaults. Pin with owning `{ addonId }`.
42763
+ * An omitted or empty `tokenSecret` means KEEP the stored secret (D787).
42764
+ * `{ $secretClear: true }` clears it.
42765
+ */
42766
+ var TrainingProviderUpdateEntryInputSchema = object({
42767
+ entryId: string().min(1),
42768
+ name: string().min(1),
42769
+ tokenId: string().optional(),
42770
+ tokenSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
42771
+ environment: string().optional(),
42772
+ gpuType: string().optional(),
42773
+ region: string().optional(),
42774
+ costCapUsd: number().nonnegative().optional(),
42775
+ maxRuntimeSec: number().int().positive().optional(),
42776
+ failedDatasetGraceHours: number().nonnegative().optional()
42572
42777
  });
42573
42778
  var TrainingCredentialCheckSchema = object({
42574
42779
  ok: boolean(),
@@ -42620,20 +42825,33 @@ var TrainerSourceRefSchema = object({
42620
42825
  /** A commit sha (never a branch) — the job must be reproducible. */
42621
42826
  revision: string().regex(/^[0-9a-f]{7,64}$/)
42622
42827
  });
42828
+ /** Cloud job identity — route with the owning addon's `addonId` selector. */
42623
42829
  var JobRef = {
42624
- addonId: string(),
42830
+ entryId: string().min(1),
42625
42831
  jobKey: string().uuid()
42626
42832
  };
42627
42833
  var TrainingLogLineSchema = object({
42628
42834
  ts: number(),
42629
42835
  text: string()
42630
42836
  });
42631
- method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({ addonId: string() }), TrainingCredentialCheckSchema, {
42837
+ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }), method(object({
42838
+ typeId: string().min(1),
42839
+ name: string().min(1)
42840
+ }), object({ entryId: string() }), {
42841
+ kind: "mutation",
42842
+ auth: "admin"
42843
+ }), method(object({ entryId: string().min(1) }), object({ ok: literal(true) }), {
42844
+ kind: "mutation",
42845
+ auth: "admin"
42846
+ }), method(TrainingProviderUpdateEntryInputSchema, object({ ok: literal(true) }), {
42847
+ kind: "mutation",
42848
+ auth: "admin"
42849
+ }), method(object({ entryId: string().min(1) }), TrainingCredentialCheckSchema, {
42632
42850
  kind: "mutation",
42633
42851
  auth: "admin",
42634
42852
  timeoutMs: 3e4
42635
42853
  }), method(object({
42636
- addonId: string(),
42854
+ entryId: string().min(1),
42637
42855
  gpuType: string(),
42638
42856
  region: string(),
42639
42857
  datasetBytes: number().int().nonnegative(),
@@ -42699,7 +42917,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
42699
42917
  kind: "mutation",
42700
42918
  auth: "admin",
42701
42919
  timeoutMs: 5 * 6e4
42702
- }), method(object({ addonId: string() }), array(ProviderJobStatusSchema).readonly(), {
42920
+ }), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
42703
42921
  auth: "admin",
42704
42922
  timeoutMs: 2 * 6e4
42705
42923
  });
@@ -42709,20 +42927,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
42709
42927
  *
42710
42928
  * It owns what every provider must agree on, written once:
42711
42929
  *
42712
- * - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
42713
- * live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
42714
- * the export plan) and reaches this store through the five row methods
42715
- * below, so the Retrain page and the export did not change.
42716
42930
  * - **Jobs.** A persisted state machine, a reconcile loop against the
42717
42931
  * provider, a cost guard, a daily orphan sweep and the retention rules.
42718
42932
  * - **The return flow.** Verified artefacts → Model Studio
42719
42933
  * (`custom-model-registry.importModelBundle`) → canary on cameras →
42720
42934
  * rollback. Nothing is ever registered automatically.
42721
42935
  *
42936
+ * Plan/start takes a live {@link TrainingCorpusSelection} (collections +
42937
+ * work-state rule); frame ids are resolved via pipeline-analytics at that
42938
+ * moment and snapshotted on the job. No frozen dataset version.
42939
+ *
42722
42940
  * Every method is `admin`.
42723
42941
  */
42724
- /** A version WITH its frame list — what the export and a job read. */
42725
- var TrainingDatasetVersionRowSchema = RetrainDatasetVersionSchema.omit({ frameCount: true }).extend({ frameIds: array(string()).max(2e4).readonly() });
42942
+ /**
42943
+ * Live corpus criteria for plan/start (design §5.2). Default is complete-only.
42944
+ * Frame ids are resolved at plan/start — never a frozen version id.
42945
+ */
42946
+ var TrainingCorpusSelectionSchema = object({
42947
+ collectionIds: array(string()).min(1),
42948
+ /** Default complete-only for v1 */
42949
+ workState: _enum([
42950
+ "complete",
42951
+ "annotated_or_complete",
42952
+ "any_annotated"
42953
+ ]).default("complete")
42954
+ });
42726
42955
  /** A base model a detector job can fine-tune, and the baseline it is judged against. */
42727
42956
  var TrainingBaseModelSchema = object({
42728
42957
  modelId: string(),
@@ -42740,9 +42969,13 @@ var TrainingPresetSchema = _enum([
42740
42969
  "thorough"
42741
42970
  ]);
42742
42971
  var TrainingJobRequestSchema = object({
42743
- datasetVersionId: string().min(1),
42744
- /** The `training-provider` addon that runs it. */
42745
- addonId: string().min(1),
42972
+ /** Live collection + work-state criteria; resolved at plan/start. */
42973
+ selection: TrainingCorpusSelectionSchema,
42974
+ /**
42975
+ * The provider **entry** that runs it (credentials + defaults).
42976
+ * Resolve to an owning addon via `training-provider.describe` / `listEntries`.
42977
+ */
42978
+ entryId: string().min(1),
42746
42979
  gpuType: string().min(1),
42747
42980
  region: string(),
42748
42981
  baseModelId: string().min(1),
@@ -42801,6 +43034,7 @@ var TrainingJobPlanSchema = object({
42801
43034
  * result lives after the operator acted on it.
42802
43035
  */
42803
43036
  var TrainingJobStateSchema = _enum([
43037
+ "queued",
42804
43038
  "uploading",
42805
43039
  "submitted",
42806
43040
  "starting",
@@ -42854,6 +43088,11 @@ var TrainingJobSchema = object({
42854
43088
  createdAt: number(),
42855
43089
  updatedAt: number(),
42856
43090
  state: TrainingJobStateSchema,
43091
+ /**
43092
+ * Shared by every job enqueued together via `startJobBatch`.
43093
+ * `null` for a lone `startJob`. The engine advances queued siblings by this id.
43094
+ */
43095
+ batchId: string().nullable().default(null),
42857
43096
  stage: TrainingStageSchema.nullable(),
42858
43097
  failure: object({
42859
43098
  reason: TrainingFailureReasonSchema,
@@ -42865,6 +43104,12 @@ var TrainingJobSchema = object({
42865
43104
  maxRuntimeSec: number().int().positive(),
42866
43105
  trainer: TrainerSourceRefSchema,
42867
43106
  datasetLayout: RetrainExportLayoutSchema,
43107
+ /** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
43108
+ frameCount: number().int().nonnegative(),
43109
+ /** Resolved frame ids at start — the archive ships exactly these. */
43110
+ frameIds: array(string()).max(2e4).readonly(),
43111
+ /** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
43112
+ annotationHash: string(),
42868
43113
  dataset: object({
42869
43114
  bytes: number().int(),
42870
43115
  sha256: string(),
@@ -42906,13 +43151,7 @@ var TrainingJobSchema = object({
42906
43151
  canary: TrainingCanarySchema.nullable()
42907
43152
  });
42908
43153
  var IdInput = object({ id: string().min(1) });
42909
- method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
42910
- kind: "mutation",
42911
- auth: "admin"
42912
- }), method(IdInput, TrainingDatasetVersionRowSchema.nullable(), { auth: "admin" }), method(object({}), array(RetrainDatasetVersionSchema).readonly(), { auth: "admin" }), method(object({ name: string() }), object({ id: string().nullable() }), { auth: "admin" }), method(IdInput, object({ removed: boolean() }), {
42913
- kind: "mutation",
42914
- auth: "admin"
42915
- }), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
43154
+ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
42916
43155
  auth: "admin",
42917
43156
  timeoutMs: 6e4
42918
43157
  }), method(TrainingJobRequestSchema.extend({
@@ -42931,6 +43170,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
42931
43170
  kind: "mutation",
42932
43171
  auth: "admin",
42933
43172
  timeoutMs: 12e4
43173
+ }), method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
43174
+ baseModelIds: array(string().min(1)).min(1),
43175
+ name: string().min(1).max(120),
43176
+ maxCostUsd: number().positive(),
43177
+ maxRuntimeSec: number().int().positive(),
43178
+ idempotencyKey: string().min(8).max(80)
43179
+ }), discriminatedUnion("kind", [object({
43180
+ kind: literal("started"),
43181
+ batchId: string(),
43182
+ jobs: array(TrainingJobSchema).min(1).readonly()
43183
+ }), object({
43184
+ kind: literal("refused"),
43185
+ reason: TrainingRefusalReasonSchema,
43186
+ detail: string()
43187
+ })]), {
43188
+ kind: "mutation",
43189
+ auth: "admin",
43190
+ timeoutMs: 12e4
42934
43191
  }), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
42935
43192
  kind: "mutation",
42936
43193
  auth: "admin",
@@ -48012,6 +48269,36 @@ Object.freeze({
48012
48269
  addonId: null,
48013
48270
  access: "view"
48014
48271
  },
48272
+ "oidcConnections.connectionFormSchema": {
48273
+ capName: "oidc-connections",
48274
+ capScope: "system",
48275
+ addonId: null,
48276
+ access: "view"
48277
+ },
48278
+ "oidcConnections.createConnection": {
48279
+ capName: "oidc-connections",
48280
+ capScope: "system",
48281
+ addonId: null,
48282
+ access: "create"
48283
+ },
48284
+ "oidcConnections.deleteConnection": {
48285
+ capName: "oidc-connections",
48286
+ capScope: "system",
48287
+ addonId: null,
48288
+ access: "delete"
48289
+ },
48290
+ "oidcConnections.listConnections": {
48291
+ capName: "oidc-connections",
48292
+ capScope: "system",
48293
+ addonId: null,
48294
+ access: "view"
48295
+ },
48296
+ "oidcConnections.updateConnection": {
48297
+ capName: "oidc-connections",
48298
+ capScope: "system",
48299
+ addonId: null,
48300
+ access: "create"
48301
+ },
48015
48302
  "osd.getStatus": {
48016
48303
  capName: "osd",
48017
48304
  capScope: "device",
@@ -48084,6 +48371,12 @@ Object.freeze({
48084
48371
  addonId: null,
48085
48372
  access: "create"
48086
48373
  },
48374
+ "osdManager.setSlotCameraEnabled": {
48375
+ capName: "osd-manager",
48376
+ capScope: "system",
48377
+ addonId: null,
48378
+ access: "create"
48379
+ },
48087
48380
  "osdManager.upsertTemplate": {
48088
48381
  capName: "osd-manager",
48089
48382
  capScope: "system",
@@ -48222,12 +48515,6 @@ Object.freeze({
48222
48515
  addonId: null,
48223
48516
  access: "create"
48224
48517
  },
48225
- "pipelineAnalytics.createRetrainDatasetVersion": {
48226
- capName: "pipeline-analytics",
48227
- capScope: "device",
48228
- addonId: null,
48229
- access: "create"
48230
- },
48231
48518
  "pipelineAnalytics.deleteDeviceEvents": {
48232
48519
  capName: "pipeline-analytics",
48233
48520
  capScope: "device",
@@ -48240,12 +48527,6 @@ Object.freeze({
48240
48527
  addonId: null,
48241
48528
  access: "delete"
48242
48529
  },
48243
- "pipelineAnalytics.deleteRetrainDatasetVersion": {
48244
- capName: "pipeline-analytics",
48245
- capScope: "device",
48246
- addonId: null,
48247
- access: "delete"
48248
- },
48249
48530
  "pipelineAnalytics.deleteTracks": {
48250
48531
  capName: "pipeline-analytics",
48251
48532
  capScope: "device",
@@ -48348,6 +48629,12 @@ Object.freeze({
48348
48629
  addonId: null,
48349
48630
  access: "view"
48350
48631
  },
48632
+ "pipelineAnalytics.getRetrainCorpusKpi": {
48633
+ capName: "pipeline-analytics",
48634
+ capScope: "device",
48635
+ addonId: null,
48636
+ access: "view"
48637
+ },
48351
48638
  "pipelineAnalytics.getRetrainExportUrl": {
48352
48639
  capName: "pipeline-analytics",
48353
48640
  capScope: "device",
@@ -48468,7 +48755,7 @@ Object.freeze({
48468
48755
  addonId: null,
48469
48756
  access: "view"
48470
48757
  },
48471
- "pipelineAnalytics.listRetrainDatasetVersions": {
48758
+ "pipelineAnalytics.listRetrainCorpusPage": {
48472
48759
  capName: "pipeline-analytics",
48473
48760
  capScope: "device",
48474
48761
  addonId: null,
@@ -48522,12 +48809,6 @@ Object.freeze({
48522
48809
  addonId: null,
48523
48810
  access: "create"
48524
48811
  },
48525
- "pipelineAnalytics.previewRetrainDataset": {
48526
- capName: "pipeline-analytics",
48527
- capScope: "device",
48528
- addonId: null,
48529
- access: "view"
48530
- },
48531
48812
  "pipelineAnalytics.proposeRetrainAnnotations": {
48532
48813
  capName: "pipeline-analytics",
48533
48814
  capScope: "device",
@@ -48606,6 +48887,12 @@ Object.freeze({
48606
48887
  addonId: null,
48607
48888
  access: "create"
48608
48889
  },
48890
+ "pipelineAnalytics.resolveRetrainTrainingCorpus": {
48891
+ capName: "pipeline-analytics",
48892
+ capScope: "device",
48893
+ addonId: null,
48894
+ access: "view"
48895
+ },
48609
48896
  "pipelineAnalytics.restageRetrainTrack": {
48610
48897
  capName: "pipeline-analytics",
48611
48898
  capScope: "device",
@@ -48666,12 +48953,6 @@ Object.freeze({
48666
48953
  addonId: null,
48667
48954
  access: "create"
48668
48955
  },
48669
- "pipelineAnalytics.verifyRetrainDatasetVersion": {
48670
- capName: "pipeline-analytics",
48671
- capScope: "device",
48672
- addonId: null,
48673
- access: "view"
48674
- },
48675
48956
  "pipelineAnalytics.wipeAllAnalytics": {
48676
48957
  capName: "pipeline-analytics",
48677
48958
  capScope: "device",
@@ -51066,18 +51347,6 @@ Object.freeze({
51066
51347
  addonId: null,
51067
51348
  access: "create"
51068
51349
  },
51069
- "training.findDatasetVersionIdByName": {
51070
- capName: "training",
51071
- capScope: "system",
51072
- addonId: null,
51073
- access: "view"
51074
- },
51075
- "training.getDatasetVersion": {
51076
- capName: "training",
51077
- capScope: "system",
51078
- addonId: null,
51079
- access: "view"
51080
- },
51081
51350
  "training.getJob": {
51082
51351
  capName: "training",
51083
51352
  capScope: "system",
@@ -51096,12 +51365,6 @@ Object.freeze({
51096
51365
  addonId: null,
51097
51366
  access: "view"
51098
51367
  },
51099
- "training.listDatasetVersions": {
51100
- capName: "training",
51101
- capScope: "system",
51102
- addonId: null,
51103
- access: "view"
51104
- },
51105
51368
  "training.listJobs": {
51106
51369
  capName: "training",
51107
51370
  capScope: "system",
@@ -51114,54 +51377,66 @@ Object.freeze({
51114
51377
  addonId: null,
51115
51378
  access: "view"
51116
51379
  },
51117
- "training.putDatasetVersion": {
51380
+ "training.registerResult": {
51118
51381
  capName: "training",
51119
51382
  capScope: "system",
51120
51383
  addonId: null,
51121
51384
  access: "create"
51122
51385
  },
51123
- "training.registerResult": {
51386
+ "training.rollbackCanary": {
51124
51387
  capName: "training",
51125
51388
  capScope: "system",
51126
51389
  addonId: null,
51127
51390
  access: "create"
51128
51391
  },
51129
- "training.removeDatasetVersion": {
51392
+ "training.startJob": {
51130
51393
  capName: "training",
51131
51394
  capScope: "system",
51132
51395
  addonId: null,
51133
- access: "delete"
51396
+ access: "create"
51134
51397
  },
51135
- "training.rollbackCanary": {
51398
+ "training.startJobBatch": {
51136
51399
  capName: "training",
51137
51400
  capScope: "system",
51138
51401
  addonId: null,
51139
51402
  access: "create"
51140
51403
  },
51141
- "training.startJob": {
51142
- capName: "training",
51404
+ "trainingProvider.cancelJob": {
51405
+ capName: "training-provider",
51143
51406
  capScope: "system",
51144
51407
  addonId: null,
51145
51408
  access: "create"
51146
51409
  },
51147
- "trainingProvider.cancelJob": {
51410
+ "trainingProvider.cleanupJob": {
51148
51411
  capName: "training-provider",
51149
51412
  capScope: "system",
51150
51413
  addonId: null,
51151
51414
  access: "create"
51152
51415
  },
51153
- "trainingProvider.cleanupJob": {
51416
+ "trainingProvider.createEntry": {
51154
51417
  capName: "training-provider",
51155
51418
  capScope: "system",
51156
51419
  addonId: null,
51157
51420
  access: "create"
51158
51421
  },
51422
+ "trainingProvider.deleteEntry": {
51423
+ capName: "training-provider",
51424
+ capScope: "system",
51425
+ addonId: null,
51426
+ access: "delete"
51427
+ },
51159
51428
  "trainingProvider.describe": {
51160
51429
  capName: "training-provider",
51161
51430
  capScope: "system",
51162
51431
  addonId: null,
51163
51432
  access: "view"
51164
51433
  },
51434
+ "trainingProvider.describeTypes": {
51435
+ capName: "training-provider",
51436
+ capScope: "system",
51437
+ addonId: null,
51438
+ access: "view"
51439
+ },
51165
51440
  "trainingProvider.estimateJob": {
51166
51441
  capName: "training-provider",
51167
51442
  capScope: "system",
@@ -51174,6 +51449,12 @@ Object.freeze({
51174
51449
  addonId: null,
51175
51450
  access: "view"
51176
51451
  },
51452
+ "trainingProvider.listEntries": {
51453
+ capName: "training-provider",
51454
+ capScope: "system",
51455
+ addonId: null,
51456
+ access: "view"
51457
+ },
51177
51458
  "trainingProvider.listJobEvents": {
51178
51459
  capName: "training-provider",
51179
51460
  capScope: "system",
@@ -51204,6 +51485,12 @@ Object.freeze({
51204
51485
  addonId: null,
51205
51486
  access: "create"
51206
51487
  },
51488
+ "trainingProvider.updateEntry": {
51489
+ capName: "training-provider",
51490
+ capScope: "system",
51491
+ addonId: null,
51492
+ access: "create"
51493
+ },
51207
51494
  "trainingProvider.uploadDataset": {
51208
51495
  capName: "training-provider",
51209
51496
  capScope: "system",
@@ -54410,6 +54697,11 @@ Object.freeze({
54410
54697
  form: "single",
54411
54698
  optional: false
54412
54699
  }],
54700
+ "osdManager.setSlotCameraEnabled": [{
54701
+ name: "deviceId",
54702
+ form: "single",
54703
+ optional: false
54704
+ }],
54413
54705
  "petFeeder.callPet": [{
54414
54706
  name: "deviceId",
54415
54707
  form: "single",
@@ -54630,6 +54922,11 @@ Object.freeze({
54630
54922
  form: "array",
54631
54923
  optional: false
54632
54924
  }],
54925
+ "pipelineAnalytics.listRetrainCorpusPage": [{
54926
+ name: "deviceIds",
54927
+ form: "array",
54928
+ optional: true
54929
+ }],
54633
54930
  "pipelineAnalytics.listRetrainStaging": [{
54634
54931
  name: "deviceIds",
54635
54932
  form: "array",
@@ -55739,6 +56036,7 @@ Object.freeze({
55739
56036
  });
55740
56037
  Object.freeze({
55741
56038
  "broker": "broker",
56039
+ "calendar-source": "calendar",
55742
56040
  "device-export": "device-export",
55743
56041
  "llm": "ai",
55744
56042
  "mesh-network": "mesh",
@@ -55863,6 +56161,9 @@ new Map(Object.entries({
55863
56161
  "stream-online": "device-events",
55864
56162
  "stream-offline": "device-events",
55865
56163
  "detection-blind": "device-events",
56164
+ "recording-stalled": "device-events",
56165
+ "recording-healthy": "device-events",
56166
+ "recording-degraded": "device-events",
55866
56167
  "node-online": "system",
55867
56168
  "node-offline": "system",
55868
56169
  "node-restarting": "system",
@@ -55876,6 +56177,9 @@ new Map(Object.entries({
55876
56177
  "wrapper-update-available": "system",
55877
56178
  "backup-completed": "system",
55878
56179
  "export-completed": "system",
56180
+ "storage-location-low": "system",
56181
+ "storage-location-critical": "system",
56182
+ "storage-location-ok": "system",
55879
56183
  "alarm-triggered": "alarm",
55880
56184
  "alarm-armed": "alarm",
55881
56185
  "alarm-disarmed": "alarm",
@@ -55937,6 +56241,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
55937
56241
  label: "Detecting nothing",
55938
56242
  kinds: ["detection-blind"]
55939
56243
  },
56244
+ {
56245
+ id: "recording",
56246
+ family: "device-events",
56247
+ label: "Recording",
56248
+ kinds: [
56249
+ "recording-stalled",
56250
+ "recording-healthy",
56251
+ "recording-degraded"
56252
+ ]
56253
+ },
55940
56254
  {
55941
56255
  id: "nodes",
55942
56256
  family: "system",
@@ -55977,6 +56291,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
55977
56291
  label: "Backups & exports",
55978
56292
  kinds: ["backup-completed", "export-completed"]
55979
56293
  },
56294
+ {
56295
+ id: "storage",
56296
+ family: "system",
56297
+ label: "Storage locations",
56298
+ kinds: [
56299
+ "storage-location-low",
56300
+ "storage-location-critical",
56301
+ "storage-location-ok"
56302
+ ]
56303
+ },
55980
56304
  {
55981
56305
  id: "alarm",
55982
56306
  family: "alarm",
@@ -56059,6 +56383,9 @@ var DEVICE_EVENTS = [
56059
56383
  "stream-online",
56060
56384
  "stream-offline",
56061
56385
  "detection-blind",
56386
+ "recording-stalled",
56387
+ "recording-healthy",
56388
+ "recording-degraded",
56062
56389
  ...ALARM
56063
56390
  ];
56064
56391
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -56226,6 +56553,11 @@ var STATE_SUMMARY_VARS = [
56226
56553
  [...RULE_TEXT],
56227
56554
  [...RULE_TEXT],
56228
56555
  [...RULE_TEXT],
56556
+ [...RULE_TEXT],
56557
+ [...RULE_TEXT],
56558
+ [...RULE_TEXT],
56559
+ [...RULE_TEXT],
56560
+ [...RULE_TEXT],
56229
56561
  ([...RULE_TEXT], [...UPDATES]),
56230
56562
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
56231
56563
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),