@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.mjs CHANGED
@@ -8,7 +8,7 @@ import { createServer } from "node:http";
8
8
  //#region \0rolldown/runtime.js
9
9
  var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
10
10
  //#endregion
11
- //#region ../types/dist/event-category-DaIZi00R.mjs
11
+ //#region ../types/dist/event-category-C4hVnRo8.mjs
12
12
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
13
13
  EventCategory["SystemBoot"] = "system.boot";
14
14
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -227,7 +227,17 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
227
227
  EventCategory["RecordingStopped"] = "recording.stopped";
228
228
  EventCategory["RecordingError"] = "recording.error";
229
229
  EventCategory["RecordingHealthDegraded"] = "recording.health.degraded";
230
+ /** Recording enabled but no segment finalized for the NC stall window. */
231
+ EventCategory["RecordingHealthStalled"] = "recording.health.stalled";
232
+ /** Recovery from {@link RecordingHealthStalled}. */
233
+ EventCategory["RecordingHealthOk"] = "recording.health.ok";
230
234
  EventCategory["RecordingStorageCritical"] = "recording.storage.critical";
235
+ /** Free space on a storage location crossed the warn bar. */
236
+ EventCategory["StorageLocationLow"] = "storage.location.low";
237
+ /** Free space at/under the critical bar, or capacity probe failed (`null`). */
238
+ EventCategory["StorageLocationCritical"] = "storage.location.critical";
239
+ /** Recovery from low/critical on a storage location. */
240
+ EventCategory["StorageLocationOk"] = "storage.location.ok";
231
241
  EventCategory["RecordingSegmentWritten"] = "recording.segment.written";
232
242
  EventCategory["RecordingPolicyFallback"] = "recording.policy.fallback";
233
243
  EventCategory["RecordingRetentionCompleted"] = "recording.retention.completed";
@@ -5386,7 +5396,7 @@ var ZodIssueCode = {
5386
5396
  var ZodFirstPartyTypeKind;
5387
5397
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5388
5398
  //#endregion
5389
- //#region ../types/dist/sleep-r3RWkGVx.mjs
5399
+ //#region ../types/dist/sleep-Tkp9dHXv.mjs
5390
5400
  /**
5391
5401
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5392
5402
  * window to float samples (D455).
@@ -9451,6 +9461,16 @@ var CompositionSchema = object({
9451
9461
  seen.add(feature.cap);
9452
9462
  });
9453
9463
  });
9464
+ var NodeColorIdSchema = _enum([
9465
+ "node-a",
9466
+ "node-b",
9467
+ "node-c",
9468
+ "node-d",
9469
+ "node-e",
9470
+ "node-f",
9471
+ "node-g",
9472
+ "node-h"
9473
+ ]);
9454
9474
  new Set([
9455
9475
  "track",
9456
9476
  "face",
@@ -13693,7 +13713,14 @@ var BrokerProviderInfoSchema = object({
13693
13713
  /** Broker kinds this provider can create, with a display label. */
13694
13714
  kinds: array(object({
13695
13715
  kind: string(),
13696
- label: string()
13716
+ label: string(),
13717
+ /**
13718
+ * Relative hub path to start an interactive account link (OAuth popup).
13719
+ * May include `{{brokerId}}`; admin-ui substitutes and appends `?popup=1`.
13720
+ */
13721
+ interactiveConnectPath: string().min(1).optional(),
13722
+ /** Relative hub path to disconnect the linked account (same popup pattern). */
13723
+ interactiveDisconnectPath: string().min(1).optional()
13697
13724
  }))
13698
13725
  });
13699
13726
  var ListInputSchema = object({
@@ -18431,14 +18458,14 @@ var LlmProfileSchema = object({
18431
18458
  /** ConfigUISchema tree passed through untyped on the wire (the
18432
18459
  * notification-output `ConfigSchemaPassthrough` precedent at
18433
18460
  * notification-output.cap.ts:151); the exported TS type re-tightens it. */
18434
- var ConfigSchemaPassthrough$1 = unknown();
18461
+ var ConfigSchemaPassthrough$3 = unknown();
18435
18462
  var LlmProfileKindDescriptorSchema = object({
18436
18463
  kind: LlmProfileKindSchema,
18437
18464
  label: string(),
18438
18465
  icon: string(),
18439
18466
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
18440
18467
  addonId: string(),
18441
- configSchema: ConfigSchemaPassthrough$1
18468
+ configSchema: ConfigSchemaPassthrough$3
18442
18469
  });
18443
18470
  var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
18444
18471
  var LlmDefaultSchema = object({
@@ -19559,7 +19586,7 @@ var TargetKindCapsSchema = object({
19559
19586
  * the union is large and not meant for runtime validation here; the exported
19560
19587
  * `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
19561
19588
  */
19562
- var ConfigSchemaPassthrough = unknown();
19589
+ var ConfigSchemaPassthrough$2 = unknown();
19563
19590
  var TargetKindSchema = object({
19564
19591
  kind: string(),
19565
19592
  label: string(),
@@ -19596,7 +19623,7 @@ var TargetKindSchema = object({
19596
19623
  * its raster path, which is the safe default for an unknown image.
19597
19624
  */
19598
19625
  iconMediaType: string().optional(),
19599
- configSchema: ConfigSchemaPassthrough,
19626
+ configSchema: ConfigSchemaPassthrough$2,
19600
19627
  /**
19601
19628
  * The config keys that decide WHERE this kind's secrets are sent (server,
19602
19629
  * base URL, instance, chat, recipient). A save that changes any of them
@@ -20553,6 +20580,12 @@ var NcSystemEventKindSchema = _enum([
20553
20580
  "node-updating",
20554
20581
  "node-inference-unavailable",
20555
20582
  "detection-blind",
20583
+ "recording-stalled",
20584
+ "recording-healthy",
20585
+ "recording-degraded",
20586
+ "storage-location-low",
20587
+ "storage-location-critical",
20588
+ "storage-location-ok",
20556
20589
  "addon-crash-loop",
20557
20590
  "addon-update-available",
20558
20591
  "server-update-available",
@@ -22933,6 +22966,61 @@ var OauthIntegrationDescriptorSchema = object({
22933
22966
  });
22934
22967
  method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
22935
22968
  /**
22969
+ * `oidc-connections` — CRUD for IdP rows under `auth-oidc` (D828 sibling).
22970
+ *
22971
+ * One hub-only singleton (`auth-oidc`). The Settings UI is a DataTable +
22972
+ * ItemFormDialog; there is no `editable-array` in `globalSettingsSchema`.
22973
+ * Operator-chosen `id` is the URL slug (`/addon/auth-oidc/<id>/…`) and is
22974
+ * immutable after create.
22975
+ */
22976
+ var ConfigSchemaPassthrough$1 = unknown();
22977
+ var OidcConnectionSchema = object({
22978
+ id: string().min(1),
22979
+ displayName: string(),
22980
+ icon: string(),
22981
+ issuerUrl: string(),
22982
+ clientId: string(),
22983
+ /** Client id + secret present — never the secret value. */
22984
+ configured: boolean(),
22985
+ /**
22986
+ * Values for the connection form schema. `clientSecret` is a keychain
22987
+ * {@link SecretFieldView} or `null` / `''`, never plaintext (D789).
22988
+ */
22989
+ formValues: record(string(), unknown()).optional()
22990
+ });
22991
+ /**
22992
+ * Patch one connection. Omitted or empty `clientSecret` keeps the stored
22993
+ * secret (D787). `{ $secretClear: true }` clears it. `id` is never renamed.
22994
+ */
22995
+ var OidcConnectionUpdateInputSchema = object({
22996
+ id: string().min(1),
22997
+ displayName: string().min(1),
22998
+ icon: string().optional(),
22999
+ issuerUrl: string().optional(),
23000
+ clientId: string().optional(),
23001
+ clientSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
23002
+ redirectUri: string().optional(),
23003
+ scopes: string().optional(),
23004
+ usernameClaim: _enum([
23005
+ "preferred_username",
23006
+ "email",
23007
+ "sub"
23008
+ ]).optional()
23009
+ });
23010
+ method(object({}), ConfigSchemaPassthrough$1, { auth: "admin" }), method(object({}), array(OidcConnectionSchema).readonly(), { auth: "admin" }), method(object({
23011
+ id: string().min(1).regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "id must be a lowercase slug"),
23012
+ displayName: string().min(1)
23013
+ }), object({ id: string() }), {
23014
+ kind: "mutation",
23015
+ auth: "admin"
23016
+ }), method(OidcConnectionUpdateInputSchema, object({ ok: literal(true) }), {
23017
+ kind: "mutation",
23018
+ auth: "admin"
23019
+ }), method(object({ id: string().min(1) }), object({ ok: literal(true) }), {
23020
+ kind: "mutation",
23021
+ auth: "admin"
23022
+ });
23023
+ /**
22936
23024
  * What started a camera's onboard motion (D672). `camera` is the camera's own
22937
23025
  * firmware; `sensor` is a device the operator ATTACHED to it. Absent on the
22938
23026
  * wire means the camera: only the camera-sensors bridge ever says `sensor`.
@@ -24289,24 +24377,69 @@ var RetrainFrameListSchema = object({
24289
24377
  /** What the page pre-selects — the native key frame when one survives. */
24290
24378
  autoPickMediaId: number().int().optional()
24291
24379
  });
24380
+ /** Exclusive partition of a corpus copy's annotation progress (design §4.2). */
24381
+ var RetrainFrameWorkStateSchema = _enum([
24382
+ "unannotated",
24383
+ "annotated",
24384
+ "complete"
24385
+ ]);
24386
+ /**
24387
+ * Filters for paginated corpus list, KPI, and matching export (design §4.4).
24388
+ * Every narrowing field is ANDed; omitted fields impose no constraint.
24389
+ */
24390
+ var RetrainCorpusFilterSchema = object({
24391
+ workState: RetrainFrameWorkStateSchema.optional(),
24392
+ deviceIds: array(number()).max(500).optional(),
24393
+ /** When set, only frames in this named collection. */
24394
+ collectionId: string().optional(),
24395
+ /** Frames that carry at least one saved annotation in one of these classes. */
24396
+ classes: array(RetrainMacroClassSchema).optional(),
24397
+ page: number().int().positive().default(1),
24398
+ pageSize: number().int().positive().max(100).default(50)
24399
+ });
24400
+ var RetrainCorpusPageSchema = object({
24401
+ frames: array(RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema })).readonly(),
24402
+ total: number().int().nonnegative(),
24403
+ page: number().int().positive(),
24404
+ pageSize: number().int().positive()
24405
+ });
24406
+ var RetrainCorpusKpiCameraRowSchema = object({
24407
+ deviceId: number(),
24408
+ unannotated: number().int().nonnegative(),
24409
+ annotated: number().int().nonnegative(),
24410
+ complete: number().int().nonnegative(),
24411
+ /** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
24412
+ * `null` when the corpus is empty (no ratio). */
24413
+ pctOfCorpus: number().min(0).max(1).nullable()
24414
+ });
24415
+ var RetrainCorpusKpiSchema = object({
24416
+ total: number().int().nonnegative(),
24417
+ unannotated: number().int().nonnegative(),
24418
+ annotated: number().int().nonnegative(),
24419
+ complete: number().int().nonnegative(),
24420
+ cameras: array(RetrainCorpusKpiCameraRowSchema).readonly()
24421
+ });
24292
24422
  /**
24293
24423
  * Which frames an annotated export carries. Every field narrows; an empty
24294
- * filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
24295
- * list owned by whoever trains (the training orchestrator), so `frameIds` is
24296
- * the primitive a version export uses; `batchId` re-selects what an earlier
24297
- * export carried (`exportedInBatch`).
24424
+ * filter is every annotated copy. `frameIds` is the primitive a job or
24425
+ * download uses; `batchId` re-selects what an earlier export carried
24426
+ * (`exportedInBatch`). Frozen dataset versions were removed — live selection
24427
+ * resolves to `frameIds` at plan/start.
24298
24428
  */
24299
24429
  var RetrainExportFilterSchema = object({
24300
24430
  deviceIds: array(number()).optional(),
24301
24431
  frameIds: array(string()).max(2e4).optional(),
24302
24432
  /** Only frames in at least one of these named collections. */
24303
24433
  collectionIds: array(string()).max(200).optional(),
24304
- /** Exactly the frames of this dataset version (and its completeOnly). An
24305
- * unknown id selects nothing. */
24306
- datasetVersionId: string().optional(),
24434
+ /** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
24435
+ collectionId: string().optional(),
24307
24436
  batchId: string().optional(),
24308
24437
  /** Only frames the operator marked complete (all subjects boxed). */
24309
- completeOnly: boolean().optional()
24438
+ completeOnly: boolean().optional(),
24439
+ /** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
24440
+ workState: RetrainFrameWorkStateSchema.optional(),
24441
+ /** Frames with at least one saved annotation in one of these classes. */
24442
+ classes: array(RetrainMacroClassSchema).optional()
24310
24443
  });
24311
24444
  /**
24312
24445
  * `frames`: the full frame copies, boxes in `annotations.json`.
@@ -24506,8 +24639,7 @@ var RetrainDatasetStatsSchema = object({
24506
24639
  completeFrames: number().int()
24507
24640
  })).readonly()
24508
24641
  });
24509
- /** An immutable dataset version, without its frame list. */
24510
- var RetrainDatasetVersionSchema = object({
24642
+ object({
24511
24643
  id: string(),
24512
24644
  name: string(),
24513
24645
  createdAt: number(),
@@ -24515,22 +24647,33 @@ var RetrainDatasetVersionSchema = object({
24515
24647
  layout: RetrainExportLayoutSchema,
24516
24648
  completeOnly: boolean(),
24517
24649
  frameCount: number().int(),
24518
- /** sha256 of what the frames taught when the version was frozen. */
24519
24650
  annotationHash: string(),
24520
- /** The export manifest schema the version was cut under. */
24521
24651
  manifestSchema: string(),
24522
24652
  stats: RetrainDatasetStatsSchema
24523
24653
  });
24524
- var CreateRetrainDatasetVersionResultSchema = discriminatedUnion("kind", [object({
24525
- kind: literal("created"),
24526
- version: RetrainDatasetVersionSchema
24654
+ /**
24655
+ * Live training corpus criteria — same shape as `TrainingCorpusSelection` on
24656
+ * the training cap. Resolved here so plan/start and the annotated export share
24657
+ * one definition of "the frames" (`buildRetrainExportPlan`).
24658
+ */
24659
+ var RetrainTrainingCorpusSelectionSchema = object({
24660
+ collectionIds: array(string()).min(1),
24661
+ workState: _enum([
24662
+ "complete",
24663
+ "annotated_or_complete",
24664
+ "any_annotated"
24665
+ ]).default("complete")
24666
+ });
24667
+ var RetrainTrainingCorpusResolveResultSchema = discriminatedUnion("kind", [object({
24668
+ kind: literal("resolved"),
24669
+ frameIds: array(string()).max(2e4).readonly(),
24670
+ stats: RetrainDatasetStatsSchema,
24671
+ annotationHash: string(),
24672
+ layout: RetrainExportLayoutSchema
24527
24673
  }), object({
24528
24674
  kind: literal("refused"),
24529
- reason: _enum([
24530
- "empty-name",
24531
- "duplicate-name",
24532
- "no-frames"
24533
- ])
24675
+ reason: _enum(["unknown-collection", "no-frames"]),
24676
+ detail: string()
24534
24677
  })]);
24535
24678
  /** The outcome of a lifecycle move owned by the retrain page. */
24536
24679
  var RetrainTransitionResultSchema = object({
@@ -25237,6 +25380,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25237
25380
  }), array(RetrainTrackSchema).readonly(), {
25238
25381
  kind: "query",
25239
25382
  auth: "admin"
25383
+ }), method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
25384
+ kind: "query",
25385
+ auth: "admin"
25386
+ }), method(object({}), RetrainCorpusKpiSchema, {
25387
+ kind: "query",
25388
+ auth: "admin"
25240
25389
  }), method(object({ trackId: string() }), RetrainFrameListSchema, {
25241
25390
  kind: "query",
25242
25391
  auth: "admin"
@@ -25332,36 +25481,6 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25332
25481
  kind: "mutation",
25333
25482
  auth: "admin",
25334
25483
  timeoutMs: 12e4
25335
- }), method(object({
25336
- selection: RetrainDatasetSelectionSchema,
25337
- completeOnly: boolean().optional()
25338
- }), RetrainDatasetStatsSchema, {
25339
- kind: "query",
25340
- auth: "admin"
25341
- }), method(object({
25342
- name: string().max(120),
25343
- selection: RetrainDatasetSelectionSchema,
25344
- layout: RetrainExportLayoutSchema,
25345
- completeOnly: boolean()
25346
- }), CreateRetrainDatasetVersionResultSchema, {
25347
- kind: "mutation",
25348
- auth: "admin",
25349
- timeoutMs: 12e4
25350
- }), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
25351
- kind: "query",
25352
- auth: "admin"
25353
- }), method(object({ id: string() }), object({ deleted: boolean() }), {
25354
- kind: "mutation",
25355
- auth: "admin"
25356
- }), method(object({ id: string() }), object({
25357
- found: boolean(),
25358
- annotationHash: string(),
25359
- matches: boolean(),
25360
- missingFrames: number().int()
25361
- }), {
25362
- kind: "query",
25363
- auth: "admin",
25364
- timeoutMs: 12e4
25365
25484
  }), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
25366
25485
  kind: "query",
25367
25486
  auth: "admin"
@@ -25388,6 +25507,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25388
25507
  }), method(object({}), array(RetrainCollectionSchema).readonly(), {
25389
25508
  kind: "query",
25390
25509
  auth: "admin"
25510
+ }), method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
25511
+ kind: "query",
25512
+ auth: "admin",
25513
+ timeoutMs: 6e4
25391
25514
  }), method(object({
25392
25515
  id: string(),
25393
25516
  name: string().max(120)
@@ -26004,11 +26127,14 @@ var HardwareClassIdSchema = _enum([
26004
26127
  "intel-n-series",
26005
26128
  "apple-m-base",
26006
26129
  "apple-m-pro",
26130
+ "amd-phoenix",
26007
26131
  "unknown"
26008
26132
  ]);
26009
26133
  var AcceleratorKindSchema = _enum([
26010
26134
  "intel-npu",
26011
26135
  "intel-igpu",
26136
+ "amd-igpu",
26137
+ "amd-npu",
26012
26138
  "x86-cpu",
26013
26139
  "arm-cpu",
26014
26140
  "apple-ane",
@@ -27938,6 +28064,8 @@ var AgentPipelineSettingsSchema = object({
27938
28064
  * address is wrong (multi-homed host, NAT, custom interface).
27939
28065
  */
27940
28066
  reachableHost: string().optional(),
28067
+ /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
28068
+ color: NodeColorIdSchema.optional(),
27941
28069
  /**
27942
28070
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
27943
28071
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
@@ -28487,8 +28615,9 @@ method(object({
28487
28615
  auth: "admin"
28488
28616
  }), method(object({
28489
28617
  agentNodeId: string(),
28490
- reachableHost: string().nullable()
28491
- }), object({ success: literal(true) }), {
28618
+ reachableHost: string().nullable().optional(),
28619
+ color: NodeColorIdSchema.nullable().optional()
28620
+ }).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), object({ success: literal(true) }), {
28492
28621
  kind: "mutation",
28493
28622
  auth: "admin"
28494
28623
  }), method(object({
@@ -31712,7 +31841,7 @@ var CustomActionInputSchema = object({
31712
31841
  action: string().min(1),
31713
31842
  input: unknown()
31714
31843
  });
31715
- method(_void(), array(AddonListItemSchema).readonly()), method(object({
31844
+ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSchema).readonly()), method(object({
31716
31845
  addonId: string(),
31717
31846
  limit: number().min(1).max(500).default(100),
31718
31847
  level: LogLevelSchema$2.optional()
@@ -37193,6 +37322,7 @@ var OsdNamedTemplateSchema = object({
37193
37322
  });
37194
37323
  /** Where a slot's value comes from. */
37195
37324
  var OsdSourceSchema = discriminatedUnion("kind", [
37325
+ object({ kind: literal("none") }),
37196
37326
  object({
37197
37327
  kind: literal("static"),
37198
37328
  text: string().max(64)
@@ -37319,6 +37449,13 @@ method(object({ deviceId: number().int() }), object({
37319
37449
  }), object({ success: literal(true) }), {
37320
37450
  kind: "mutation",
37321
37451
  auth: "admin"
37452
+ }), method(object({
37453
+ deviceId: number().int(),
37454
+ slotId: string().min(1),
37455
+ enabled: boolean()
37456
+ }), object({ success: literal(true) }), {
37457
+ kind: "mutation",
37458
+ auth: "admin"
37322
37459
  }), method(object({
37323
37460
  sourceDeviceId: number().int(),
37324
37461
  targetDeviceId: number().int()
@@ -37750,7 +37887,15 @@ var GpuInfoSchema = object({
37750
37887
  name: string(),
37751
37888
  memoryMB: number().optional()
37752
37889
  });
37753
- var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
37890
+ var NpuInfoSchema = object({
37891
+ type: _enum([
37892
+ "apple-ane",
37893
+ "intel-npu",
37894
+ "amd-xdna"
37895
+ ]),
37896
+ name: string().optional(),
37897
+ generation: _enum(["xdna1", "xdna2"]).optional()
37898
+ });
37754
37899
  var CoralInfoSchema = object({
37755
37900
  type: literal("coral-edgetpu"),
37756
37901
  bus: string().optional()
@@ -42493,9 +42638,11 @@ var zoneRulesCapability = {
42493
42638
  * once is what makes a second provider (RunPod, a local NVIDIA node) a new
42494
42639
  * manifest entry and nothing else.
42495
42640
  *
42496
- * Collection, routed by the `addonId` in every single-row input (the `llm` /
42497
- * `notification-output` posture); `describe` concat-fans across providers.
42498
- * Every method is `admin`: these spend money.
42641
+ * Collection of provider **types** (addons). Each addon owns zero or more
42642
+ * **entries** (credentials + defaults). Concat-fans: `describe`,
42643
+ * `describeTypes`, `listEntries`, `listJobs`. Single-row work is keyed by
42644
+ * `entryId`; callers also pass the owning `addonId` as the collection
42645
+ * selector (broker posture). Every method is `admin`: these spend money.
42499
42646
  *
42500
42647
  * Every cloud object a provider creates is tagged with the orchestrator's
42501
42648
  * `jobKey`, so a retried submit finds the job it already started instead of
@@ -42519,8 +42666,8 @@ var TrainingRegionOptionSchema = object({
42519
42666
  priceMultiplier: number().positive()
42520
42667
  });
42521
42668
  /**
42522
- * The provider's per-account settings, as the orchestrator reads them. They
42523
- * live in the PROVIDER addon's settings (operator decision 2026-10-08: they
42669
+ * The provider's per-entry settings, as the orchestrator reads them. They
42670
+ * live on the PROVIDER addon's entry (operator decision 2026-10-08: they
42524
42671
  * depend on the user's account), never hard-coded in the orchestrator.
42525
42672
  */
42526
42673
  var TrainingProviderDefaultsSchema = object({
@@ -42531,9 +42678,44 @@ var TrainingProviderDefaultsSchema = object({
42531
42678
  /** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
42532
42679
  failedDatasetGraceHours: number().nonnegative()
42533
42680
  });
42681
+ /**
42682
+ * Entry form schema for a provider type — same seam as notification
42683
+ * `TargetKind.configSchema` (`z.unknown()` at the wire; callers tighten to
42684
+ * {@link ConfigUISchema}). Drives `ConfigFormBuilder` on Training → Providers.
42685
+ */
42686
+ var ConfigSchemaPassthrough = unknown();
42687
+ /** One creatable provider type, for the Add-entry dialog. */
42688
+ var TrainingProviderTypeSchema = object({
42689
+ typeId: string(),
42690
+ label: string(),
42691
+ /** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
42692
+ iconAsset: string(),
42693
+ /** Owning `training-provider` addon — collection selector for createEntry. */
42694
+ addonId: string(),
42695
+ /**
42696
+ * Fields for one entry of this type (credentials + defaults). Absent on a
42697
+ * type that only needs a name. Password fields are keychain-backed on the
42698
+ * provider addon (`secretStatePaths`), not D634 plaintext.
42699
+ */
42700
+ configSchema: ConfigSchemaPassthrough.optional()
42701
+ });
42702
+ /** One configured account / workspace under a provider type. */
42703
+ var TrainingProviderEntrySchema = object({
42704
+ entryId: string(),
42705
+ typeId: string(),
42706
+ name: string(),
42707
+ addonId: string(),
42708
+ /** Credentials are present — never the values. */
42709
+ configured: boolean()
42710
+ });
42534
42711
  var TrainingProviderDescriptorSchema = object({
42535
42712
  addonId: string(),
42536
- /** `modal`, `runpod`, `fake`, … */
42713
+ entryId: string(),
42714
+ typeId: string(),
42715
+ /** Operator-chosen entry name. */
42716
+ name: string(),
42717
+ iconAsset: string(),
42718
+ /** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
42537
42719
  kind: string(),
42538
42720
  label: string(),
42539
42721
  gpuTypes: array(TrainingGpuOptionSchema).readonly(),
@@ -42545,7 +42727,30 @@ var TrainingProviderDescriptorSchema = object({
42545
42727
  dataResidencyNote: string(),
42546
42728
  /** Credentials are present — never the values. */
42547
42729
  configured: boolean(),
42548
- defaults: TrainingProviderDefaultsSchema
42730
+ defaults: TrainingProviderDefaultsSchema,
42731
+ /**
42732
+ * Values for {@link TrainingProviderTypeSchema}'s `configSchema` — password
42733
+ * fields are keychain {@link SecretFieldView} or `null` / `''` (create),
42734
+ * never plaintext. Same hydrate contract as settings forms (D789).
42735
+ */
42736
+ formValues: record(string(), unknown()).optional()
42737
+ });
42738
+ /**
42739
+ * Patch one entry's name, credentials and defaults. Pin with owning `{ addonId }`.
42740
+ * An omitted or empty `tokenSecret` means KEEP the stored secret (D787).
42741
+ * `{ $secretClear: true }` clears it.
42742
+ */
42743
+ var TrainingProviderUpdateEntryInputSchema = object({
42744
+ entryId: string().min(1),
42745
+ name: string().min(1),
42746
+ tokenId: string().optional(),
42747
+ tokenSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
42748
+ environment: string().optional(),
42749
+ gpuType: string().optional(),
42750
+ region: string().optional(),
42751
+ costCapUsd: number().nonnegative().optional(),
42752
+ maxRuntimeSec: number().int().positive().optional(),
42753
+ failedDatasetGraceHours: number().nonnegative().optional()
42549
42754
  });
42550
42755
  var TrainingCredentialCheckSchema = object({
42551
42756
  ok: boolean(),
@@ -42597,20 +42802,33 @@ var TrainerSourceRefSchema = object({
42597
42802
  /** A commit sha (never a branch) — the job must be reproducible. */
42598
42803
  revision: string().regex(/^[0-9a-f]{7,64}$/)
42599
42804
  });
42805
+ /** Cloud job identity — route with the owning addon's `addonId` selector. */
42600
42806
  var JobRef = {
42601
- addonId: string(),
42807
+ entryId: string().min(1),
42602
42808
  jobKey: string().uuid()
42603
42809
  };
42604
42810
  var TrainingLogLineSchema = object({
42605
42811
  ts: number(),
42606
42812
  text: string()
42607
42813
  });
42608
- method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({ addonId: string() }), TrainingCredentialCheckSchema, {
42814
+ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }), method(object({
42815
+ typeId: string().min(1),
42816
+ name: string().min(1)
42817
+ }), object({ entryId: string() }), {
42818
+ kind: "mutation",
42819
+ auth: "admin"
42820
+ }), method(object({ entryId: string().min(1) }), object({ ok: literal(true) }), {
42821
+ kind: "mutation",
42822
+ auth: "admin"
42823
+ }), method(TrainingProviderUpdateEntryInputSchema, object({ ok: literal(true) }), {
42824
+ kind: "mutation",
42825
+ auth: "admin"
42826
+ }), method(object({ entryId: string().min(1) }), TrainingCredentialCheckSchema, {
42609
42827
  kind: "mutation",
42610
42828
  auth: "admin",
42611
42829
  timeoutMs: 3e4
42612
42830
  }), method(object({
42613
- addonId: string(),
42831
+ entryId: string().min(1),
42614
42832
  gpuType: string(),
42615
42833
  region: string(),
42616
42834
  datasetBytes: number().int().nonnegative(),
@@ -42676,7 +42894,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
42676
42894
  kind: "mutation",
42677
42895
  auth: "admin",
42678
42896
  timeoutMs: 5 * 6e4
42679
- }), method(object({ addonId: string() }), array(ProviderJobStatusSchema).readonly(), {
42897
+ }), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
42680
42898
  auth: "admin",
42681
42899
  timeoutMs: 2 * 6e4
42682
42900
  });
@@ -42686,20 +42904,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
42686
42904
  *
42687
42905
  * It owns what every provider must agree on, written once:
42688
42906
  *
42689
- * - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
42690
- * live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
42691
- * the export plan) and reaches this store through the five row methods
42692
- * below, so the Retrain page and the export did not change.
42693
42907
  * - **Jobs.** A persisted state machine, a reconcile loop against the
42694
42908
  * provider, a cost guard, a daily orphan sweep and the retention rules.
42695
42909
  * - **The return flow.** Verified artefacts → Model Studio
42696
42910
  * (`custom-model-registry.importModelBundle`) → canary on cameras →
42697
42911
  * rollback. Nothing is ever registered automatically.
42698
42912
  *
42913
+ * Plan/start takes a live {@link TrainingCorpusSelection} (collections +
42914
+ * work-state rule); frame ids are resolved via pipeline-analytics at that
42915
+ * moment and snapshotted on the job. No frozen dataset version.
42916
+ *
42699
42917
  * Every method is `admin`.
42700
42918
  */
42701
- /** A version WITH its frame list — what the export and a job read. */
42702
- var TrainingDatasetVersionRowSchema = RetrainDatasetVersionSchema.omit({ frameCount: true }).extend({ frameIds: array(string()).max(2e4).readonly() });
42919
+ /**
42920
+ * Live corpus criteria for plan/start (design §5.2). Default is complete-only.
42921
+ * Frame ids are resolved at plan/start — never a frozen version id.
42922
+ */
42923
+ var TrainingCorpusSelectionSchema = object({
42924
+ collectionIds: array(string()).min(1),
42925
+ /** Default complete-only for v1 */
42926
+ workState: _enum([
42927
+ "complete",
42928
+ "annotated_or_complete",
42929
+ "any_annotated"
42930
+ ]).default("complete")
42931
+ });
42703
42932
  /** A base model a detector job can fine-tune, and the baseline it is judged against. */
42704
42933
  var TrainingBaseModelSchema = object({
42705
42934
  modelId: string(),
@@ -42717,9 +42946,13 @@ var TrainingPresetSchema = _enum([
42717
42946
  "thorough"
42718
42947
  ]);
42719
42948
  var TrainingJobRequestSchema = object({
42720
- datasetVersionId: string().min(1),
42721
- /** The `training-provider` addon that runs it. */
42722
- addonId: string().min(1),
42949
+ /** Live collection + work-state criteria; resolved at plan/start. */
42950
+ selection: TrainingCorpusSelectionSchema,
42951
+ /**
42952
+ * The provider **entry** that runs it (credentials + defaults).
42953
+ * Resolve to an owning addon via `training-provider.describe` / `listEntries`.
42954
+ */
42955
+ entryId: string().min(1),
42723
42956
  gpuType: string().min(1),
42724
42957
  region: string(),
42725
42958
  baseModelId: string().min(1),
@@ -42778,6 +43011,7 @@ var TrainingJobPlanSchema = object({
42778
43011
  * result lives after the operator acted on it.
42779
43012
  */
42780
43013
  var TrainingJobStateSchema = _enum([
43014
+ "queued",
42781
43015
  "uploading",
42782
43016
  "submitted",
42783
43017
  "starting",
@@ -42831,6 +43065,11 @@ var TrainingJobSchema = object({
42831
43065
  createdAt: number(),
42832
43066
  updatedAt: number(),
42833
43067
  state: TrainingJobStateSchema,
43068
+ /**
43069
+ * Shared by every job enqueued together via `startJobBatch`.
43070
+ * `null` for a lone `startJob`. The engine advances queued siblings by this id.
43071
+ */
43072
+ batchId: string().nullable().default(null),
42834
43073
  stage: TrainingStageSchema.nullable(),
42835
43074
  failure: object({
42836
43075
  reason: TrainingFailureReasonSchema,
@@ -42842,6 +43081,12 @@ var TrainingJobSchema = object({
42842
43081
  maxRuntimeSec: number().int().positive(),
42843
43082
  trainer: TrainerSourceRefSchema,
42844
43083
  datasetLayout: RetrainExportLayoutSchema,
43084
+ /** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
43085
+ frameCount: number().int().nonnegative(),
43086
+ /** Resolved frame ids at start — the archive ships exactly these. */
43087
+ frameIds: array(string()).max(2e4).readonly(),
43088
+ /** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
43089
+ annotationHash: string(),
42845
43090
  dataset: object({
42846
43091
  bytes: number().int(),
42847
43092
  sha256: string(),
@@ -42883,13 +43128,7 @@ var TrainingJobSchema = object({
42883
43128
  canary: TrainingCanarySchema.nullable()
42884
43129
  });
42885
43130
  var IdInput = object({ id: string().min(1) });
42886
- method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
42887
- kind: "mutation",
42888
- auth: "admin"
42889
- }), 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() }), {
42890
- kind: "mutation",
42891
- auth: "admin"
42892
- }), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
43131
+ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
42893
43132
  auth: "admin",
42894
43133
  timeoutMs: 6e4
42895
43134
  }), method(TrainingJobRequestSchema.extend({
@@ -42908,6 +43147,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
42908
43147
  kind: "mutation",
42909
43148
  auth: "admin",
42910
43149
  timeoutMs: 12e4
43150
+ }), method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
43151
+ baseModelIds: array(string().min(1)).min(1),
43152
+ name: string().min(1).max(120),
43153
+ maxCostUsd: number().positive(),
43154
+ maxRuntimeSec: number().int().positive(),
43155
+ idempotencyKey: string().min(8).max(80)
43156
+ }), discriminatedUnion("kind", [object({
43157
+ kind: literal("started"),
43158
+ batchId: string(),
43159
+ jobs: array(TrainingJobSchema).min(1).readonly()
43160
+ }), object({
43161
+ kind: literal("refused"),
43162
+ reason: TrainingRefusalReasonSchema,
43163
+ detail: string()
43164
+ })]), {
43165
+ kind: "mutation",
43166
+ auth: "admin",
43167
+ timeoutMs: 12e4
42911
43168
  }), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
42912
43169
  kind: "mutation",
42913
43170
  auth: "admin",
@@ -47989,6 +48246,36 @@ Object.freeze({
47989
48246
  addonId: null,
47990
48247
  access: "view"
47991
48248
  },
48249
+ "oidcConnections.connectionFormSchema": {
48250
+ capName: "oidc-connections",
48251
+ capScope: "system",
48252
+ addonId: null,
48253
+ access: "view"
48254
+ },
48255
+ "oidcConnections.createConnection": {
48256
+ capName: "oidc-connections",
48257
+ capScope: "system",
48258
+ addonId: null,
48259
+ access: "create"
48260
+ },
48261
+ "oidcConnections.deleteConnection": {
48262
+ capName: "oidc-connections",
48263
+ capScope: "system",
48264
+ addonId: null,
48265
+ access: "delete"
48266
+ },
48267
+ "oidcConnections.listConnections": {
48268
+ capName: "oidc-connections",
48269
+ capScope: "system",
48270
+ addonId: null,
48271
+ access: "view"
48272
+ },
48273
+ "oidcConnections.updateConnection": {
48274
+ capName: "oidc-connections",
48275
+ capScope: "system",
48276
+ addonId: null,
48277
+ access: "create"
48278
+ },
47992
48279
  "osd.getStatus": {
47993
48280
  capName: "osd",
47994
48281
  capScope: "device",
@@ -48061,6 +48348,12 @@ Object.freeze({
48061
48348
  addonId: null,
48062
48349
  access: "create"
48063
48350
  },
48351
+ "osdManager.setSlotCameraEnabled": {
48352
+ capName: "osd-manager",
48353
+ capScope: "system",
48354
+ addonId: null,
48355
+ access: "create"
48356
+ },
48064
48357
  "osdManager.upsertTemplate": {
48065
48358
  capName: "osd-manager",
48066
48359
  capScope: "system",
@@ -48199,12 +48492,6 @@ Object.freeze({
48199
48492
  addonId: null,
48200
48493
  access: "create"
48201
48494
  },
48202
- "pipelineAnalytics.createRetrainDatasetVersion": {
48203
- capName: "pipeline-analytics",
48204
- capScope: "device",
48205
- addonId: null,
48206
- access: "create"
48207
- },
48208
48495
  "pipelineAnalytics.deleteDeviceEvents": {
48209
48496
  capName: "pipeline-analytics",
48210
48497
  capScope: "device",
@@ -48217,12 +48504,6 @@ Object.freeze({
48217
48504
  addonId: null,
48218
48505
  access: "delete"
48219
48506
  },
48220
- "pipelineAnalytics.deleteRetrainDatasetVersion": {
48221
- capName: "pipeline-analytics",
48222
- capScope: "device",
48223
- addonId: null,
48224
- access: "delete"
48225
- },
48226
48507
  "pipelineAnalytics.deleteTracks": {
48227
48508
  capName: "pipeline-analytics",
48228
48509
  capScope: "device",
@@ -48325,6 +48606,12 @@ Object.freeze({
48325
48606
  addonId: null,
48326
48607
  access: "view"
48327
48608
  },
48609
+ "pipelineAnalytics.getRetrainCorpusKpi": {
48610
+ capName: "pipeline-analytics",
48611
+ capScope: "device",
48612
+ addonId: null,
48613
+ access: "view"
48614
+ },
48328
48615
  "pipelineAnalytics.getRetrainExportUrl": {
48329
48616
  capName: "pipeline-analytics",
48330
48617
  capScope: "device",
@@ -48445,7 +48732,7 @@ Object.freeze({
48445
48732
  addonId: null,
48446
48733
  access: "view"
48447
48734
  },
48448
- "pipelineAnalytics.listRetrainDatasetVersions": {
48735
+ "pipelineAnalytics.listRetrainCorpusPage": {
48449
48736
  capName: "pipeline-analytics",
48450
48737
  capScope: "device",
48451
48738
  addonId: null,
@@ -48499,12 +48786,6 @@ Object.freeze({
48499
48786
  addonId: null,
48500
48787
  access: "create"
48501
48788
  },
48502
- "pipelineAnalytics.previewRetrainDataset": {
48503
- capName: "pipeline-analytics",
48504
- capScope: "device",
48505
- addonId: null,
48506
- access: "view"
48507
- },
48508
48789
  "pipelineAnalytics.proposeRetrainAnnotations": {
48509
48790
  capName: "pipeline-analytics",
48510
48791
  capScope: "device",
@@ -48583,6 +48864,12 @@ Object.freeze({
48583
48864
  addonId: null,
48584
48865
  access: "create"
48585
48866
  },
48867
+ "pipelineAnalytics.resolveRetrainTrainingCorpus": {
48868
+ capName: "pipeline-analytics",
48869
+ capScope: "device",
48870
+ addonId: null,
48871
+ access: "view"
48872
+ },
48586
48873
  "pipelineAnalytics.restageRetrainTrack": {
48587
48874
  capName: "pipeline-analytics",
48588
48875
  capScope: "device",
@@ -48643,12 +48930,6 @@ Object.freeze({
48643
48930
  addonId: null,
48644
48931
  access: "create"
48645
48932
  },
48646
- "pipelineAnalytics.verifyRetrainDatasetVersion": {
48647
- capName: "pipeline-analytics",
48648
- capScope: "device",
48649
- addonId: null,
48650
- access: "view"
48651
- },
48652
48933
  "pipelineAnalytics.wipeAllAnalytics": {
48653
48934
  capName: "pipeline-analytics",
48654
48935
  capScope: "device",
@@ -51043,18 +51324,6 @@ Object.freeze({
51043
51324
  addonId: null,
51044
51325
  access: "create"
51045
51326
  },
51046
- "training.findDatasetVersionIdByName": {
51047
- capName: "training",
51048
- capScope: "system",
51049
- addonId: null,
51050
- access: "view"
51051
- },
51052
- "training.getDatasetVersion": {
51053
- capName: "training",
51054
- capScope: "system",
51055
- addonId: null,
51056
- access: "view"
51057
- },
51058
51327
  "training.getJob": {
51059
51328
  capName: "training",
51060
51329
  capScope: "system",
@@ -51073,12 +51342,6 @@ Object.freeze({
51073
51342
  addonId: null,
51074
51343
  access: "view"
51075
51344
  },
51076
- "training.listDatasetVersions": {
51077
- capName: "training",
51078
- capScope: "system",
51079
- addonId: null,
51080
- access: "view"
51081
- },
51082
51345
  "training.listJobs": {
51083
51346
  capName: "training",
51084
51347
  capScope: "system",
@@ -51091,54 +51354,66 @@ Object.freeze({
51091
51354
  addonId: null,
51092
51355
  access: "view"
51093
51356
  },
51094
- "training.putDatasetVersion": {
51357
+ "training.registerResult": {
51095
51358
  capName: "training",
51096
51359
  capScope: "system",
51097
51360
  addonId: null,
51098
51361
  access: "create"
51099
51362
  },
51100
- "training.registerResult": {
51363
+ "training.rollbackCanary": {
51101
51364
  capName: "training",
51102
51365
  capScope: "system",
51103
51366
  addonId: null,
51104
51367
  access: "create"
51105
51368
  },
51106
- "training.removeDatasetVersion": {
51369
+ "training.startJob": {
51107
51370
  capName: "training",
51108
51371
  capScope: "system",
51109
51372
  addonId: null,
51110
- access: "delete"
51373
+ access: "create"
51111
51374
  },
51112
- "training.rollbackCanary": {
51375
+ "training.startJobBatch": {
51113
51376
  capName: "training",
51114
51377
  capScope: "system",
51115
51378
  addonId: null,
51116
51379
  access: "create"
51117
51380
  },
51118
- "training.startJob": {
51119
- capName: "training",
51381
+ "trainingProvider.cancelJob": {
51382
+ capName: "training-provider",
51120
51383
  capScope: "system",
51121
51384
  addonId: null,
51122
51385
  access: "create"
51123
51386
  },
51124
- "trainingProvider.cancelJob": {
51387
+ "trainingProvider.cleanupJob": {
51125
51388
  capName: "training-provider",
51126
51389
  capScope: "system",
51127
51390
  addonId: null,
51128
51391
  access: "create"
51129
51392
  },
51130
- "trainingProvider.cleanupJob": {
51393
+ "trainingProvider.createEntry": {
51131
51394
  capName: "training-provider",
51132
51395
  capScope: "system",
51133
51396
  addonId: null,
51134
51397
  access: "create"
51135
51398
  },
51399
+ "trainingProvider.deleteEntry": {
51400
+ capName: "training-provider",
51401
+ capScope: "system",
51402
+ addonId: null,
51403
+ access: "delete"
51404
+ },
51136
51405
  "trainingProvider.describe": {
51137
51406
  capName: "training-provider",
51138
51407
  capScope: "system",
51139
51408
  addonId: null,
51140
51409
  access: "view"
51141
51410
  },
51411
+ "trainingProvider.describeTypes": {
51412
+ capName: "training-provider",
51413
+ capScope: "system",
51414
+ addonId: null,
51415
+ access: "view"
51416
+ },
51142
51417
  "trainingProvider.estimateJob": {
51143
51418
  capName: "training-provider",
51144
51419
  capScope: "system",
@@ -51151,6 +51426,12 @@ Object.freeze({
51151
51426
  addonId: null,
51152
51427
  access: "view"
51153
51428
  },
51429
+ "trainingProvider.listEntries": {
51430
+ capName: "training-provider",
51431
+ capScope: "system",
51432
+ addonId: null,
51433
+ access: "view"
51434
+ },
51154
51435
  "trainingProvider.listJobEvents": {
51155
51436
  capName: "training-provider",
51156
51437
  capScope: "system",
@@ -51181,6 +51462,12 @@ Object.freeze({
51181
51462
  addonId: null,
51182
51463
  access: "create"
51183
51464
  },
51465
+ "trainingProvider.updateEntry": {
51466
+ capName: "training-provider",
51467
+ capScope: "system",
51468
+ addonId: null,
51469
+ access: "create"
51470
+ },
51184
51471
  "trainingProvider.uploadDataset": {
51185
51472
  capName: "training-provider",
51186
51473
  capScope: "system",
@@ -54387,6 +54674,11 @@ Object.freeze({
54387
54674
  form: "single",
54388
54675
  optional: false
54389
54676
  }],
54677
+ "osdManager.setSlotCameraEnabled": [{
54678
+ name: "deviceId",
54679
+ form: "single",
54680
+ optional: false
54681
+ }],
54390
54682
  "petFeeder.callPet": [{
54391
54683
  name: "deviceId",
54392
54684
  form: "single",
@@ -54607,6 +54899,11 @@ Object.freeze({
54607
54899
  form: "array",
54608
54900
  optional: false
54609
54901
  }],
54902
+ "pipelineAnalytics.listRetrainCorpusPage": [{
54903
+ name: "deviceIds",
54904
+ form: "array",
54905
+ optional: true
54906
+ }],
54610
54907
  "pipelineAnalytics.listRetrainStaging": [{
54611
54908
  name: "deviceIds",
54612
54909
  form: "array",
@@ -55716,6 +56013,7 @@ Object.freeze({
55716
56013
  });
55717
56014
  Object.freeze({
55718
56015
  "broker": "broker",
56016
+ "calendar-source": "calendar",
55719
56017
  "device-export": "device-export",
55720
56018
  "llm": "ai",
55721
56019
  "mesh-network": "mesh",
@@ -55840,6 +56138,9 @@ new Map(Object.entries({
55840
56138
  "stream-online": "device-events",
55841
56139
  "stream-offline": "device-events",
55842
56140
  "detection-blind": "device-events",
56141
+ "recording-stalled": "device-events",
56142
+ "recording-healthy": "device-events",
56143
+ "recording-degraded": "device-events",
55843
56144
  "node-online": "system",
55844
56145
  "node-offline": "system",
55845
56146
  "node-restarting": "system",
@@ -55853,6 +56154,9 @@ new Map(Object.entries({
55853
56154
  "wrapper-update-available": "system",
55854
56155
  "backup-completed": "system",
55855
56156
  "export-completed": "system",
56157
+ "storage-location-low": "system",
56158
+ "storage-location-critical": "system",
56159
+ "storage-location-ok": "system",
55856
56160
  "alarm-triggered": "alarm",
55857
56161
  "alarm-armed": "alarm",
55858
56162
  "alarm-disarmed": "alarm",
@@ -55914,6 +56218,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
55914
56218
  label: "Detecting nothing",
55915
56219
  kinds: ["detection-blind"]
55916
56220
  },
56221
+ {
56222
+ id: "recording",
56223
+ family: "device-events",
56224
+ label: "Recording",
56225
+ kinds: [
56226
+ "recording-stalled",
56227
+ "recording-healthy",
56228
+ "recording-degraded"
56229
+ ]
56230
+ },
55917
56231
  {
55918
56232
  id: "nodes",
55919
56233
  family: "system",
@@ -55954,6 +56268,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
55954
56268
  label: "Backups & exports",
55955
56269
  kinds: ["backup-completed", "export-completed"]
55956
56270
  },
56271
+ {
56272
+ id: "storage",
56273
+ family: "system",
56274
+ label: "Storage locations",
56275
+ kinds: [
56276
+ "storage-location-low",
56277
+ "storage-location-critical",
56278
+ "storage-location-ok"
56279
+ ]
56280
+ },
55957
56281
  {
55958
56282
  id: "alarm",
55959
56283
  family: "alarm",
@@ -56036,6 +56360,9 @@ var DEVICE_EVENTS = [
56036
56360
  "stream-online",
56037
56361
  "stream-offline",
56038
56362
  "detection-blind",
56363
+ "recording-stalled",
56364
+ "recording-healthy",
56365
+ "recording-degraded",
56039
56366
  ...ALARM
56040
56367
  ];
56041
56368
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -56203,6 +56530,11 @@ var STATE_SUMMARY_VARS = [
56203
56530
  [...RULE_TEXT],
56204
56531
  [...RULE_TEXT],
56205
56532
  [...RULE_TEXT],
56533
+ [...RULE_TEXT],
56534
+ [...RULE_TEXT],
56535
+ [...RULE_TEXT],
56536
+ [...RULE_TEXT],
56537
+ [...RULE_TEXT],
56206
56538
  ([...RULE_TEXT], [...UPDATES]),
56207
56539
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
56208
56540
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),