@camstack/addon-export-alexa 1.2.141 → 1.2.143

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.
@@ -5406,7 +5406,7 @@ var ZodIssueCode = {
5406
5406
  var ZodFirstPartyTypeKind;
5407
5407
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5408
5408
  //#endregion
5409
- //#region ../types/dist/sleep-r3RWkGVx.mjs
5409
+ //#region ../types/dist/sleep-DwAQ9sqX.mjs
5410
5410
  /**
5411
5411
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5412
5412
  * window to float samples (D455).
@@ -9367,6 +9367,16 @@ var CompositionSchema = object({
9367
9367
  seen.add(feature.cap);
9368
9368
  });
9369
9369
  });
9370
+ var NodeColorIdSchema = _enum([
9371
+ "node-a",
9372
+ "node-b",
9373
+ "node-c",
9374
+ "node-d",
9375
+ "node-e",
9376
+ "node-f",
9377
+ "node-g",
9378
+ "node-h"
9379
+ ]);
9370
9380
  new Set([
9371
9381
  "track",
9372
9382
  "face",
@@ -18414,14 +18424,14 @@ var LlmProfileSchema = object({
18414
18424
  /** ConfigUISchema tree passed through untyped on the wire (the
18415
18425
  * notification-output `ConfigSchemaPassthrough` precedent at
18416
18426
  * notification-output.cap.ts:151); the exported TS type re-tightens it. */
18417
- var ConfigSchemaPassthrough$1 = unknown();
18427
+ var ConfigSchemaPassthrough$3 = unknown();
18418
18428
  var LlmProfileKindDescriptorSchema = object({
18419
18429
  kind: LlmProfileKindSchema,
18420
18430
  label: string(),
18421
18431
  icon: string(),
18422
18432
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
18423
18433
  addonId: string(),
18424
- configSchema: ConfigSchemaPassthrough$1
18434
+ configSchema: ConfigSchemaPassthrough$3
18425
18435
  });
18426
18436
  var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
18427
18437
  var LlmDefaultSchema = object({
@@ -19542,7 +19552,7 @@ var TargetKindCapsSchema = object({
19542
19552
  * the union is large and not meant for runtime validation here; the exported
19543
19553
  * `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
19544
19554
  */
19545
- var ConfigSchemaPassthrough = unknown();
19555
+ var ConfigSchemaPassthrough$2 = unknown();
19546
19556
  var TargetKindSchema = object({
19547
19557
  kind: string(),
19548
19558
  label: string(),
@@ -19579,7 +19589,7 @@ var TargetKindSchema = object({
19579
19589
  * its raster path, which is the safe default for an unknown image.
19580
19590
  */
19581
19591
  iconMediaType: string().optional(),
19582
- configSchema: ConfigSchemaPassthrough,
19592
+ configSchema: ConfigSchemaPassthrough$2,
19583
19593
  /**
19584
19594
  * The config keys that decide WHERE this kind's secrets are sent (server,
19585
19595
  * base URL, instance, chat, recipient). A save that changes any of them
@@ -22894,6 +22904,61 @@ var oauthIntegrationCapability = {
22894
22904
  getDescriptor: method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" }) }
22895
22905
  };
22896
22906
  /**
22907
+ * `oidc-connections` — CRUD for IdP rows under `auth-oidc` (D828 sibling).
22908
+ *
22909
+ * One hub-only singleton (`auth-oidc`). The Settings UI is a DataTable +
22910
+ * ItemFormDialog; there is no `editable-array` in `globalSettingsSchema`.
22911
+ * Operator-chosen `id` is the URL slug (`/addon/auth-oidc/<id>/…`) and is
22912
+ * immutable after create.
22913
+ */
22914
+ var ConfigSchemaPassthrough$1 = unknown();
22915
+ var OidcConnectionSchema = object({
22916
+ id: string().min(1),
22917
+ displayName: string(),
22918
+ icon: string(),
22919
+ issuerUrl: string(),
22920
+ clientId: string(),
22921
+ /** Client id + secret present — never the secret value. */
22922
+ configured: boolean(),
22923
+ /**
22924
+ * Values for the connection form schema. `clientSecret` is a keychain
22925
+ * {@link SecretFieldView} or `null` / `''`, never plaintext (D789).
22926
+ */
22927
+ formValues: record(string(), unknown()).optional()
22928
+ });
22929
+ /**
22930
+ * Patch one connection. Omitted or empty `clientSecret` keeps the stored
22931
+ * secret (D787). `{ $secretClear: true }` clears it. `id` is never renamed.
22932
+ */
22933
+ var OidcConnectionUpdateInputSchema = object({
22934
+ id: string().min(1),
22935
+ displayName: string().min(1),
22936
+ icon: string().optional(),
22937
+ issuerUrl: string().optional(),
22938
+ clientId: string().optional(),
22939
+ clientSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
22940
+ redirectUri: string().optional(),
22941
+ scopes: string().optional(),
22942
+ usernameClaim: _enum([
22943
+ "preferred_username",
22944
+ "email",
22945
+ "sub"
22946
+ ]).optional()
22947
+ });
22948
+ method(object({}), ConfigSchemaPassthrough$1, { auth: "admin" }), method(object({}), array(OidcConnectionSchema).readonly(), { auth: "admin" }), method(object({
22949
+ id: string().min(1).regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "id must be a lowercase slug"),
22950
+ displayName: string().min(1)
22951
+ }), object({ id: string() }), {
22952
+ kind: "mutation",
22953
+ auth: "admin"
22954
+ }), method(OidcConnectionUpdateInputSchema, object({ ok: literal(true) }), {
22955
+ kind: "mutation",
22956
+ auth: "admin"
22957
+ }), method(object({ id: string().min(1) }), object({ ok: literal(true) }), {
22958
+ kind: "mutation",
22959
+ auth: "admin"
22960
+ });
22961
+ /**
22897
22962
  * What started a camera's onboard motion (D672). `camera` is the camera's own
22898
22963
  * firmware; `sensor` is a device the operator ATTACHED to it. Absent on the
22899
22964
  * wire means the camera: only the camera-sensors bridge ever says `sensor`.
@@ -24250,24 +24315,69 @@ var RetrainFrameListSchema = object({
24250
24315
  /** What the page pre-selects — the native key frame when one survives. */
24251
24316
  autoPickMediaId: number().int().optional()
24252
24317
  });
24318
+ /** Exclusive partition of a corpus copy's annotation progress (design §4.2). */
24319
+ var RetrainFrameWorkStateSchema = _enum([
24320
+ "unannotated",
24321
+ "annotated",
24322
+ "complete"
24323
+ ]);
24324
+ /**
24325
+ * Filters for paginated corpus list, KPI, and matching export (design §4.4).
24326
+ * Every narrowing field is ANDed; omitted fields impose no constraint.
24327
+ */
24328
+ var RetrainCorpusFilterSchema = object({
24329
+ workState: RetrainFrameWorkStateSchema.optional(),
24330
+ deviceIds: array(number()).max(500).optional(),
24331
+ /** When set, only frames in this named collection. */
24332
+ collectionId: string().optional(),
24333
+ /** Frames that carry at least one saved annotation in one of these classes. */
24334
+ classes: array(RetrainMacroClassSchema).optional(),
24335
+ page: number().int().positive().default(1),
24336
+ pageSize: number().int().positive().max(100).default(50)
24337
+ });
24338
+ var RetrainCorpusPageSchema = object({
24339
+ frames: array(RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema })).readonly(),
24340
+ total: number().int().nonnegative(),
24341
+ page: number().int().positive(),
24342
+ pageSize: number().int().positive()
24343
+ });
24344
+ var RetrainCorpusKpiCameraRowSchema = object({
24345
+ deviceId: number(),
24346
+ unannotated: number().int().nonnegative(),
24347
+ annotated: number().int().nonnegative(),
24348
+ complete: number().int().nonnegative(),
24349
+ /** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
24350
+ * `null` when the corpus is empty (no ratio). */
24351
+ pctOfCorpus: number().min(0).max(1).nullable()
24352
+ });
24353
+ var RetrainCorpusKpiSchema = object({
24354
+ total: number().int().nonnegative(),
24355
+ unannotated: number().int().nonnegative(),
24356
+ annotated: number().int().nonnegative(),
24357
+ complete: number().int().nonnegative(),
24358
+ cameras: array(RetrainCorpusKpiCameraRowSchema).readonly()
24359
+ });
24253
24360
  /**
24254
24361
  * Which frames an annotated export carries. Every field narrows; an empty
24255
- * filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
24256
- * list owned by whoever trains (the training orchestrator), so `frameIds` is
24257
- * the primitive a version export uses; `batchId` re-selects what an earlier
24258
- * export carried (`exportedInBatch`).
24362
+ * filter is every annotated copy. `frameIds` is the primitive a job or
24363
+ * download uses; `batchId` re-selects what an earlier export carried
24364
+ * (`exportedInBatch`). Frozen dataset versions were removed — live selection
24365
+ * resolves to `frameIds` at plan/start.
24259
24366
  */
24260
24367
  var RetrainExportFilterSchema = object({
24261
24368
  deviceIds: array(number()).optional(),
24262
24369
  frameIds: array(string()).max(2e4).optional(),
24263
24370
  /** Only frames in at least one of these named collections. */
24264
24371
  collectionIds: array(string()).max(200).optional(),
24265
- /** Exactly the frames of this dataset version (and its completeOnly). An
24266
- * unknown id selects nothing. */
24267
- datasetVersionId: string().optional(),
24372
+ /** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
24373
+ collectionId: string().optional(),
24268
24374
  batchId: string().optional(),
24269
24375
  /** Only frames the operator marked complete (all subjects boxed). */
24270
- completeOnly: boolean().optional()
24376
+ completeOnly: boolean().optional(),
24377
+ /** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
24378
+ workState: RetrainFrameWorkStateSchema.optional(),
24379
+ /** Frames with at least one saved annotation in one of these classes. */
24380
+ classes: array(RetrainMacroClassSchema).optional()
24271
24381
  });
24272
24382
  /**
24273
24383
  * `frames`: the full frame copies, boxes in `annotations.json`.
@@ -24467,8 +24577,7 @@ var RetrainDatasetStatsSchema = object({
24467
24577
  completeFrames: number().int()
24468
24578
  })).readonly()
24469
24579
  });
24470
- /** An immutable dataset version, without its frame list. */
24471
- var RetrainDatasetVersionSchema = object({
24580
+ object({
24472
24581
  id: string(),
24473
24582
  name: string(),
24474
24583
  createdAt: number(),
@@ -24476,22 +24585,33 @@ var RetrainDatasetVersionSchema = object({
24476
24585
  layout: RetrainExportLayoutSchema,
24477
24586
  completeOnly: boolean(),
24478
24587
  frameCount: number().int(),
24479
- /** sha256 of what the frames taught when the version was frozen. */
24480
24588
  annotationHash: string(),
24481
- /** The export manifest schema the version was cut under. */
24482
24589
  manifestSchema: string(),
24483
24590
  stats: RetrainDatasetStatsSchema
24484
24591
  });
24485
- var CreateRetrainDatasetVersionResultSchema = discriminatedUnion("kind", [object({
24486
- kind: literal("created"),
24487
- version: RetrainDatasetVersionSchema
24592
+ /**
24593
+ * Live training corpus criteria — same shape as `TrainingCorpusSelection` on
24594
+ * the training cap. Resolved here so plan/start and the annotated export share
24595
+ * one definition of "the frames" (`buildRetrainExportPlan`).
24596
+ */
24597
+ var RetrainTrainingCorpusSelectionSchema = object({
24598
+ collectionIds: array(string()).min(1),
24599
+ workState: _enum([
24600
+ "complete",
24601
+ "annotated_or_complete",
24602
+ "any_annotated"
24603
+ ]).default("complete")
24604
+ });
24605
+ var RetrainTrainingCorpusResolveResultSchema = discriminatedUnion("kind", [object({
24606
+ kind: literal("resolved"),
24607
+ frameIds: array(string()).max(2e4).readonly(),
24608
+ stats: RetrainDatasetStatsSchema,
24609
+ annotationHash: string(),
24610
+ layout: RetrainExportLayoutSchema
24488
24611
  }), object({
24489
24612
  kind: literal("refused"),
24490
- reason: _enum([
24491
- "empty-name",
24492
- "duplicate-name",
24493
- "no-frames"
24494
- ])
24613
+ reason: _enum(["unknown-collection", "no-frames"]),
24614
+ detail: string()
24495
24615
  })]);
24496
24616
  /** The outcome of a lifecycle move owned by the retrain page. */
24497
24617
  var RetrainTransitionResultSchema = object({
@@ -25198,6 +25318,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema$1).r
25198
25318
  }), array(RetrainTrackSchema).readonly(), {
25199
25319
  kind: "query",
25200
25320
  auth: "admin"
25321
+ }), method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
25322
+ kind: "query",
25323
+ auth: "admin"
25324
+ }), method(object({}), RetrainCorpusKpiSchema, {
25325
+ kind: "query",
25326
+ auth: "admin"
25201
25327
  }), method(object({ trackId: string() }), RetrainFrameListSchema, {
25202
25328
  kind: "query",
25203
25329
  auth: "admin"
@@ -25293,36 +25419,6 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema$1).r
25293
25419
  kind: "mutation",
25294
25420
  auth: "admin",
25295
25421
  timeoutMs: 12e4
25296
- }), method(object({
25297
- selection: RetrainDatasetSelectionSchema,
25298
- completeOnly: boolean().optional()
25299
- }), RetrainDatasetStatsSchema, {
25300
- kind: "query",
25301
- auth: "admin"
25302
- }), method(object({
25303
- name: string().max(120),
25304
- selection: RetrainDatasetSelectionSchema,
25305
- layout: RetrainExportLayoutSchema,
25306
- completeOnly: boolean()
25307
- }), CreateRetrainDatasetVersionResultSchema, {
25308
- kind: "mutation",
25309
- auth: "admin",
25310
- timeoutMs: 12e4
25311
- }), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
25312
- kind: "query",
25313
- auth: "admin"
25314
- }), method(object({ id: string() }), object({ deleted: boolean() }), {
25315
- kind: "mutation",
25316
- auth: "admin"
25317
- }), method(object({ id: string() }), object({
25318
- found: boolean(),
25319
- annotationHash: string(),
25320
- matches: boolean(),
25321
- missingFrames: number().int()
25322
- }), {
25323
- kind: "query",
25324
- auth: "admin",
25325
- timeoutMs: 12e4
25326
25422
  }), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
25327
25423
  kind: "query",
25328
25424
  auth: "admin"
@@ -25349,6 +25445,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema$1).r
25349
25445
  }), method(object({}), array(RetrainCollectionSchema).readonly(), {
25350
25446
  kind: "query",
25351
25447
  auth: "admin"
25448
+ }), method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
25449
+ kind: "query",
25450
+ auth: "admin",
25451
+ timeoutMs: 6e4
25352
25452
  }), method(object({
25353
25453
  id: string(),
25354
25454
  name: string().max(120)
@@ -25965,11 +26065,14 @@ var HardwareClassIdSchema = _enum([
25965
26065
  "intel-n-series",
25966
26066
  "apple-m-base",
25967
26067
  "apple-m-pro",
26068
+ "amd-phoenix",
25968
26069
  "unknown"
25969
26070
  ]);
25970
26071
  var AcceleratorKindSchema = _enum([
25971
26072
  "intel-npu",
25972
26073
  "intel-igpu",
26074
+ "amd-igpu",
26075
+ "amd-npu",
25973
26076
  "x86-cpu",
25974
26077
  "arm-cpu",
25975
26078
  "apple-ane",
@@ -27859,6 +27962,8 @@ var AgentPipelineSettingsSchema = object({
27859
27962
  * address is wrong (multi-homed host, NAT, custom interface).
27860
27963
  */
27861
27964
  reachableHost: string().optional(),
27965
+ /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
27966
+ color: NodeColorIdSchema.optional(),
27862
27967
  /**
27863
27968
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
27864
27969
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
@@ -28408,8 +28513,9 @@ method(object({
28408
28513
  auth: "admin"
28409
28514
  }), method(object({
28410
28515
  agentNodeId: string(),
28411
- reachableHost: string().nullable()
28412
- }), object({ success: literal(true) }), {
28516
+ reachableHost: string().nullable().optional(),
28517
+ color: NodeColorIdSchema.nullable().optional()
28518
+ }).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), object({ success: literal(true) }), {
28413
28519
  kind: "mutation",
28414
28520
  auth: "admin"
28415
28521
  }), method(object({
@@ -31456,7 +31562,7 @@ var CustomActionInputSchema = object({
31456
31562
  action: string().min(1),
31457
31563
  input: unknown()
31458
31564
  });
31459
- method(_void(), array(AddonListItemSchema).readonly()), method(object({
31565
+ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSchema).readonly()), method(object({
31460
31566
  addonId: string(),
31461
31567
  limit: number().min(1).max(500).default(100),
31462
31568
  level: LogLevelSchema$2.optional()
@@ -35381,6 +35487,7 @@ var OsdNamedTemplateSchema = object({
35381
35487
  });
35382
35488
  /** Where a slot's value comes from. */
35383
35489
  var OsdSourceSchema = discriminatedUnion("kind", [
35490
+ object({ kind: literal("none") }),
35384
35491
  object({
35385
35492
  kind: literal("static"),
35386
35493
  text: string().max(64)
@@ -35507,6 +35614,13 @@ method(object({ deviceId: number().int() }), object({
35507
35614
  }), object({ success: literal(true) }), {
35508
35615
  kind: "mutation",
35509
35616
  auth: "admin"
35617
+ }), method(object({
35618
+ deviceId: number().int(),
35619
+ slotId: string().min(1),
35620
+ enabled: boolean()
35621
+ }), object({ success: literal(true) }), {
35622
+ kind: "mutation",
35623
+ auth: "admin"
35510
35624
  }), method(object({
35511
35625
  sourceDeviceId: number().int(),
35512
35626
  targetDeviceId: number().int()
@@ -35887,7 +36001,15 @@ var GpuInfoSchema = object({
35887
36001
  name: string(),
35888
36002
  memoryMB: number().optional()
35889
36003
  });
35890
- var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
36004
+ var NpuInfoSchema = object({
36005
+ type: _enum([
36006
+ "apple-ane",
36007
+ "intel-npu",
36008
+ "amd-xdna"
36009
+ ]),
36010
+ name: string().optional(),
36011
+ generation: _enum(["xdna1", "xdna2"]).optional()
36012
+ });
35891
36013
  var CoralInfoSchema = object({
35892
36014
  type: literal("coral-edgetpu"),
35893
36015
  bus: string().optional()
@@ -39672,9 +39794,11 @@ DeviceType.Camera, method(object({
39672
39794
  * once is what makes a second provider (RunPod, a local NVIDIA node) a new
39673
39795
  * manifest entry and nothing else.
39674
39796
  *
39675
- * Collection, routed by the `addonId` in every single-row input (the `llm` /
39676
- * `notification-output` posture); `describe` concat-fans across providers.
39677
- * Every method is `admin`: these spend money.
39797
+ * Collection of provider **types** (addons). Each addon owns zero or more
39798
+ * **entries** (credentials + defaults). Concat-fans: `describe`,
39799
+ * `describeTypes`, `listEntries`, `listJobs`. Single-row work is keyed by
39800
+ * `entryId`; callers also pass the owning `addonId` as the collection
39801
+ * selector (broker posture). Every method is `admin`: these spend money.
39678
39802
  *
39679
39803
  * Every cloud object a provider creates is tagged with the orchestrator's
39680
39804
  * `jobKey`, so a retried submit finds the job it already started instead of
@@ -39698,8 +39822,8 @@ var TrainingRegionOptionSchema = object({
39698
39822
  priceMultiplier: number().positive()
39699
39823
  });
39700
39824
  /**
39701
- * The provider's per-account settings, as the orchestrator reads them. They
39702
- * live in the PROVIDER addon's settings (operator decision 2026-10-08: they
39825
+ * The provider's per-entry settings, as the orchestrator reads them. They
39826
+ * live on the PROVIDER addon's entry (operator decision 2026-10-08: they
39703
39827
  * depend on the user's account), never hard-coded in the orchestrator.
39704
39828
  */
39705
39829
  var TrainingProviderDefaultsSchema = object({
@@ -39710,9 +39834,44 @@ var TrainingProviderDefaultsSchema = object({
39710
39834
  /** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
39711
39835
  failedDatasetGraceHours: number().nonnegative()
39712
39836
  });
39837
+ /**
39838
+ * Entry form schema for a provider type — same seam as notification
39839
+ * `TargetKind.configSchema` (`z.unknown()` at the wire; callers tighten to
39840
+ * {@link ConfigUISchema}). Drives `ConfigFormBuilder` on Training → Providers.
39841
+ */
39842
+ var ConfigSchemaPassthrough = unknown();
39843
+ /** One creatable provider type, for the Add-entry dialog. */
39844
+ var TrainingProviderTypeSchema = object({
39845
+ typeId: string(),
39846
+ label: string(),
39847
+ /** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
39848
+ iconAsset: string(),
39849
+ /** Owning `training-provider` addon — collection selector for createEntry. */
39850
+ addonId: string(),
39851
+ /**
39852
+ * Fields for one entry of this type (credentials + defaults). Absent on a
39853
+ * type that only needs a name. Password fields are keychain-backed on the
39854
+ * provider addon (`secretStatePaths`), not D634 plaintext.
39855
+ */
39856
+ configSchema: ConfigSchemaPassthrough.optional()
39857
+ });
39858
+ /** One configured account / workspace under a provider type. */
39859
+ var TrainingProviderEntrySchema = object({
39860
+ entryId: string(),
39861
+ typeId: string(),
39862
+ name: string(),
39863
+ addonId: string(),
39864
+ /** Credentials are present — never the values. */
39865
+ configured: boolean()
39866
+ });
39713
39867
  var TrainingProviderDescriptorSchema = object({
39714
39868
  addonId: string(),
39715
- /** `modal`, `runpod`, `fake`, … */
39869
+ entryId: string(),
39870
+ typeId: string(),
39871
+ /** Operator-chosen entry name. */
39872
+ name: string(),
39873
+ iconAsset: string(),
39874
+ /** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
39716
39875
  kind: string(),
39717
39876
  label: string(),
39718
39877
  gpuTypes: array(TrainingGpuOptionSchema).readonly(),
@@ -39724,7 +39883,30 @@ var TrainingProviderDescriptorSchema = object({
39724
39883
  dataResidencyNote: string(),
39725
39884
  /** Credentials are present — never the values. */
39726
39885
  configured: boolean(),
39727
- defaults: TrainingProviderDefaultsSchema
39886
+ defaults: TrainingProviderDefaultsSchema,
39887
+ /**
39888
+ * Values for {@link TrainingProviderTypeSchema}'s `configSchema` — password
39889
+ * fields are keychain {@link SecretFieldView} or `null` / `''` (create),
39890
+ * never plaintext. Same hydrate contract as settings forms (D789).
39891
+ */
39892
+ formValues: record(string(), unknown()).optional()
39893
+ });
39894
+ /**
39895
+ * Patch one entry's name, credentials and defaults. Pin with owning `{ addonId }`.
39896
+ * An omitted or empty `tokenSecret` means KEEP the stored secret (D787).
39897
+ * `{ $secretClear: true }` clears it.
39898
+ */
39899
+ var TrainingProviderUpdateEntryInputSchema = object({
39900
+ entryId: string().min(1),
39901
+ name: string().min(1),
39902
+ tokenId: string().optional(),
39903
+ tokenSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
39904
+ environment: string().optional(),
39905
+ gpuType: string().optional(),
39906
+ region: string().optional(),
39907
+ costCapUsd: number().nonnegative().optional(),
39908
+ maxRuntimeSec: number().int().positive().optional(),
39909
+ failedDatasetGraceHours: number().nonnegative().optional()
39728
39910
  });
39729
39911
  var TrainingCredentialCheckSchema = object({
39730
39912
  ok: boolean(),
@@ -39776,20 +39958,33 @@ var TrainerSourceRefSchema = object({
39776
39958
  /** A commit sha (never a branch) — the job must be reproducible. */
39777
39959
  revision: string().regex(/^[0-9a-f]{7,64}$/)
39778
39960
  });
39961
+ /** Cloud job identity — route with the owning addon's `addonId` selector. */
39779
39962
  var JobRef = {
39780
- addonId: string(),
39963
+ entryId: string().min(1),
39781
39964
  jobKey: string().uuid()
39782
39965
  };
39783
39966
  var TrainingLogLineSchema = object({
39784
39967
  ts: number(),
39785
39968
  text: string()
39786
39969
  });
39787
- method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({ addonId: string() }), TrainingCredentialCheckSchema, {
39970
+ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }), method(object({
39971
+ typeId: string().min(1),
39972
+ name: string().min(1)
39973
+ }), object({ entryId: string() }), {
39974
+ kind: "mutation",
39975
+ auth: "admin"
39976
+ }), method(object({ entryId: string().min(1) }), object({ ok: literal(true) }), {
39977
+ kind: "mutation",
39978
+ auth: "admin"
39979
+ }), method(TrainingProviderUpdateEntryInputSchema, object({ ok: literal(true) }), {
39980
+ kind: "mutation",
39981
+ auth: "admin"
39982
+ }), method(object({ entryId: string().min(1) }), TrainingCredentialCheckSchema, {
39788
39983
  kind: "mutation",
39789
39984
  auth: "admin",
39790
39985
  timeoutMs: 3e4
39791
39986
  }), method(object({
39792
- addonId: string(),
39987
+ entryId: string().min(1),
39793
39988
  gpuType: string(),
39794
39989
  region: string(),
39795
39990
  datasetBytes: number().int().nonnegative(),
@@ -39855,7 +40050,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
39855
40050
  kind: "mutation",
39856
40051
  auth: "admin",
39857
40052
  timeoutMs: 5 * 6e4
39858
- }), method(object({ addonId: string() }), array(ProviderJobStatusSchema).readonly(), {
40053
+ }), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
39859
40054
  auth: "admin",
39860
40055
  timeoutMs: 2 * 6e4
39861
40056
  });
@@ -39865,20 +40060,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
39865
40060
  *
39866
40061
  * It owns what every provider must agree on, written once:
39867
40062
  *
39868
- * - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
39869
- * live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
39870
- * the export plan) and reaches this store through the five row methods
39871
- * below, so the Retrain page and the export did not change.
39872
40063
  * - **Jobs.** A persisted state machine, a reconcile loop against the
39873
40064
  * provider, a cost guard, a daily orphan sweep and the retention rules.
39874
40065
  * - **The return flow.** Verified artefacts → Model Studio
39875
40066
  * (`custom-model-registry.importModelBundle`) → canary on cameras →
39876
40067
  * rollback. Nothing is ever registered automatically.
39877
40068
  *
40069
+ * Plan/start takes a live {@link TrainingCorpusSelection} (collections +
40070
+ * work-state rule); frame ids are resolved via pipeline-analytics at that
40071
+ * moment and snapshotted on the job. No frozen dataset version.
40072
+ *
39878
40073
  * Every method is `admin`.
39879
40074
  */
39880
- /** A version WITH its frame list — what the export and a job read. */
39881
- var TrainingDatasetVersionRowSchema = RetrainDatasetVersionSchema.omit({ frameCount: true }).extend({ frameIds: array(string()).max(2e4).readonly() });
40075
+ /**
40076
+ * Live corpus criteria for plan/start (design §5.2). Default is complete-only.
40077
+ * Frame ids are resolved at plan/start — never a frozen version id.
40078
+ */
40079
+ var TrainingCorpusSelectionSchema = object({
40080
+ collectionIds: array(string()).min(1),
40081
+ /** Default complete-only for v1 */
40082
+ workState: _enum([
40083
+ "complete",
40084
+ "annotated_or_complete",
40085
+ "any_annotated"
40086
+ ]).default("complete")
40087
+ });
39882
40088
  /** A base model a detector job can fine-tune, and the baseline it is judged against. */
39883
40089
  var TrainingBaseModelSchema = object({
39884
40090
  modelId: string(),
@@ -39896,9 +40102,13 @@ var TrainingPresetSchema = _enum([
39896
40102
  "thorough"
39897
40103
  ]);
39898
40104
  var TrainingJobRequestSchema = object({
39899
- datasetVersionId: string().min(1),
39900
- /** The `training-provider` addon that runs it. */
39901
- addonId: string().min(1),
40105
+ /** Live collection + work-state criteria; resolved at plan/start. */
40106
+ selection: TrainingCorpusSelectionSchema,
40107
+ /**
40108
+ * The provider **entry** that runs it (credentials + defaults).
40109
+ * Resolve to an owning addon via `training-provider.describe` / `listEntries`.
40110
+ */
40111
+ entryId: string().min(1),
39902
40112
  gpuType: string().min(1),
39903
40113
  region: string(),
39904
40114
  baseModelId: string().min(1),
@@ -39957,6 +40167,7 @@ var TrainingJobPlanSchema = object({
39957
40167
  * result lives after the operator acted on it.
39958
40168
  */
39959
40169
  var TrainingJobStateSchema = _enum([
40170
+ "queued",
39960
40171
  "uploading",
39961
40172
  "submitted",
39962
40173
  "starting",
@@ -40010,6 +40221,11 @@ var TrainingJobSchema = object({
40010
40221
  createdAt: number(),
40011
40222
  updatedAt: number(),
40012
40223
  state: TrainingJobStateSchema,
40224
+ /**
40225
+ * Shared by every job enqueued together via `startJobBatch`.
40226
+ * `null` for a lone `startJob`. The engine advances queued siblings by this id.
40227
+ */
40228
+ batchId: string().nullable().default(null),
40013
40229
  stage: TrainingStageSchema.nullable(),
40014
40230
  failure: object({
40015
40231
  reason: TrainingFailureReasonSchema,
@@ -40021,6 +40237,12 @@ var TrainingJobSchema = object({
40021
40237
  maxRuntimeSec: number().int().positive(),
40022
40238
  trainer: TrainerSourceRefSchema,
40023
40239
  datasetLayout: RetrainExportLayoutSchema,
40240
+ /** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
40241
+ frameCount: number().int().nonnegative(),
40242
+ /** Resolved frame ids at start — the archive ships exactly these. */
40243
+ frameIds: array(string()).max(2e4).readonly(),
40244
+ /** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
40245
+ annotationHash: string(),
40024
40246
  dataset: object({
40025
40247
  bytes: number().int(),
40026
40248
  sha256: string(),
@@ -40062,13 +40284,7 @@ var TrainingJobSchema = object({
40062
40284
  canary: TrainingCanarySchema.nullable()
40063
40285
  });
40064
40286
  var IdInput = object({ id: string().min(1) });
40065
- method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
40066
- kind: "mutation",
40067
- auth: "admin"
40068
- }), 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() }), {
40069
- kind: "mutation",
40070
- auth: "admin"
40071
- }), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
40287
+ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
40072
40288
  auth: "admin",
40073
40289
  timeoutMs: 6e4
40074
40290
  }), method(TrainingJobRequestSchema.extend({
@@ -40087,6 +40303,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
40087
40303
  kind: "mutation",
40088
40304
  auth: "admin",
40089
40305
  timeoutMs: 12e4
40306
+ }), method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
40307
+ baseModelIds: array(string().min(1)).min(1),
40308
+ name: string().min(1).max(120),
40309
+ maxCostUsd: number().positive(),
40310
+ maxRuntimeSec: number().int().positive(),
40311
+ idempotencyKey: string().min(8).max(80)
40312
+ }), discriminatedUnion("kind", [object({
40313
+ kind: literal("started"),
40314
+ batchId: string(),
40315
+ jobs: array(TrainingJobSchema).min(1).readonly()
40316
+ }), object({
40317
+ kind: literal("refused"),
40318
+ reason: TrainingRefusalReasonSchema,
40319
+ detail: string()
40320
+ })]), {
40321
+ kind: "mutation",
40322
+ auth: "admin",
40323
+ timeoutMs: 12e4
40090
40324
  }), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
40091
40325
  kind: "mutation",
40092
40326
  auth: "admin",
@@ -44120,6 +44354,36 @@ Object.freeze({
44120
44354
  addonId: null,
44121
44355
  access: "view"
44122
44356
  },
44357
+ "oidcConnections.connectionFormSchema": {
44358
+ capName: "oidc-connections",
44359
+ capScope: "system",
44360
+ addonId: null,
44361
+ access: "view"
44362
+ },
44363
+ "oidcConnections.createConnection": {
44364
+ capName: "oidc-connections",
44365
+ capScope: "system",
44366
+ addonId: null,
44367
+ access: "create"
44368
+ },
44369
+ "oidcConnections.deleteConnection": {
44370
+ capName: "oidc-connections",
44371
+ capScope: "system",
44372
+ addonId: null,
44373
+ access: "delete"
44374
+ },
44375
+ "oidcConnections.listConnections": {
44376
+ capName: "oidc-connections",
44377
+ capScope: "system",
44378
+ addonId: null,
44379
+ access: "view"
44380
+ },
44381
+ "oidcConnections.updateConnection": {
44382
+ capName: "oidc-connections",
44383
+ capScope: "system",
44384
+ addonId: null,
44385
+ access: "create"
44386
+ },
44123
44387
  "osd.getStatus": {
44124
44388
  capName: "osd",
44125
44389
  capScope: "device",
@@ -44192,6 +44456,12 @@ Object.freeze({
44192
44456
  addonId: null,
44193
44457
  access: "create"
44194
44458
  },
44459
+ "osdManager.setSlotCameraEnabled": {
44460
+ capName: "osd-manager",
44461
+ capScope: "system",
44462
+ addonId: null,
44463
+ access: "create"
44464
+ },
44195
44465
  "osdManager.upsertTemplate": {
44196
44466
  capName: "osd-manager",
44197
44467
  capScope: "system",
@@ -44330,12 +44600,6 @@ Object.freeze({
44330
44600
  addonId: null,
44331
44601
  access: "create"
44332
44602
  },
44333
- "pipelineAnalytics.createRetrainDatasetVersion": {
44334
- capName: "pipeline-analytics",
44335
- capScope: "device",
44336
- addonId: null,
44337
- access: "create"
44338
- },
44339
44603
  "pipelineAnalytics.deleteDeviceEvents": {
44340
44604
  capName: "pipeline-analytics",
44341
44605
  capScope: "device",
@@ -44348,12 +44612,6 @@ Object.freeze({
44348
44612
  addonId: null,
44349
44613
  access: "delete"
44350
44614
  },
44351
- "pipelineAnalytics.deleteRetrainDatasetVersion": {
44352
- capName: "pipeline-analytics",
44353
- capScope: "device",
44354
- addonId: null,
44355
- access: "delete"
44356
- },
44357
44615
  "pipelineAnalytics.deleteTracks": {
44358
44616
  capName: "pipeline-analytics",
44359
44617
  capScope: "device",
@@ -44456,6 +44714,12 @@ Object.freeze({
44456
44714
  addonId: null,
44457
44715
  access: "view"
44458
44716
  },
44717
+ "pipelineAnalytics.getRetrainCorpusKpi": {
44718
+ capName: "pipeline-analytics",
44719
+ capScope: "device",
44720
+ addonId: null,
44721
+ access: "view"
44722
+ },
44459
44723
  "pipelineAnalytics.getRetrainExportUrl": {
44460
44724
  capName: "pipeline-analytics",
44461
44725
  capScope: "device",
@@ -44576,7 +44840,7 @@ Object.freeze({
44576
44840
  addonId: null,
44577
44841
  access: "view"
44578
44842
  },
44579
- "pipelineAnalytics.listRetrainDatasetVersions": {
44843
+ "pipelineAnalytics.listRetrainCorpusPage": {
44580
44844
  capName: "pipeline-analytics",
44581
44845
  capScope: "device",
44582
44846
  addonId: null,
@@ -44630,12 +44894,6 @@ Object.freeze({
44630
44894
  addonId: null,
44631
44895
  access: "create"
44632
44896
  },
44633
- "pipelineAnalytics.previewRetrainDataset": {
44634
- capName: "pipeline-analytics",
44635
- capScope: "device",
44636
- addonId: null,
44637
- access: "view"
44638
- },
44639
44897
  "pipelineAnalytics.proposeRetrainAnnotations": {
44640
44898
  capName: "pipeline-analytics",
44641
44899
  capScope: "device",
@@ -44714,6 +44972,12 @@ Object.freeze({
44714
44972
  addonId: null,
44715
44973
  access: "create"
44716
44974
  },
44975
+ "pipelineAnalytics.resolveRetrainTrainingCorpus": {
44976
+ capName: "pipeline-analytics",
44977
+ capScope: "device",
44978
+ addonId: null,
44979
+ access: "view"
44980
+ },
44717
44981
  "pipelineAnalytics.restageRetrainTrack": {
44718
44982
  capName: "pipeline-analytics",
44719
44983
  capScope: "device",
@@ -44774,12 +45038,6 @@ Object.freeze({
44774
45038
  addonId: null,
44775
45039
  access: "create"
44776
45040
  },
44777
- "pipelineAnalytics.verifyRetrainDatasetVersion": {
44778
- capName: "pipeline-analytics",
44779
- capScope: "device",
44780
- addonId: null,
44781
- access: "view"
44782
- },
44783
45041
  "pipelineAnalytics.wipeAllAnalytics": {
44784
45042
  capName: "pipeline-analytics",
44785
45043
  capScope: "device",
@@ -47174,18 +47432,6 @@ Object.freeze({
47174
47432
  addonId: null,
47175
47433
  access: "create"
47176
47434
  },
47177
- "training.findDatasetVersionIdByName": {
47178
- capName: "training",
47179
- capScope: "system",
47180
- addonId: null,
47181
- access: "view"
47182
- },
47183
- "training.getDatasetVersion": {
47184
- capName: "training",
47185
- capScope: "system",
47186
- addonId: null,
47187
- access: "view"
47188
- },
47189
47435
  "training.getJob": {
47190
47436
  capName: "training",
47191
47437
  capScope: "system",
@@ -47204,12 +47450,6 @@ Object.freeze({
47204
47450
  addonId: null,
47205
47451
  access: "view"
47206
47452
  },
47207
- "training.listDatasetVersions": {
47208
- capName: "training",
47209
- capScope: "system",
47210
- addonId: null,
47211
- access: "view"
47212
- },
47213
47453
  "training.listJobs": {
47214
47454
  capName: "training",
47215
47455
  capScope: "system",
@@ -47222,54 +47462,66 @@ Object.freeze({
47222
47462
  addonId: null,
47223
47463
  access: "view"
47224
47464
  },
47225
- "training.putDatasetVersion": {
47465
+ "training.registerResult": {
47226
47466
  capName: "training",
47227
47467
  capScope: "system",
47228
47468
  addonId: null,
47229
47469
  access: "create"
47230
47470
  },
47231
- "training.registerResult": {
47471
+ "training.rollbackCanary": {
47232
47472
  capName: "training",
47233
47473
  capScope: "system",
47234
47474
  addonId: null,
47235
47475
  access: "create"
47236
47476
  },
47237
- "training.removeDatasetVersion": {
47477
+ "training.startJob": {
47238
47478
  capName: "training",
47239
47479
  capScope: "system",
47240
47480
  addonId: null,
47241
- access: "delete"
47481
+ access: "create"
47242
47482
  },
47243
- "training.rollbackCanary": {
47483
+ "training.startJobBatch": {
47244
47484
  capName: "training",
47245
47485
  capScope: "system",
47246
47486
  addonId: null,
47247
47487
  access: "create"
47248
47488
  },
47249
- "training.startJob": {
47250
- capName: "training",
47489
+ "trainingProvider.cancelJob": {
47490
+ capName: "training-provider",
47251
47491
  capScope: "system",
47252
47492
  addonId: null,
47253
47493
  access: "create"
47254
47494
  },
47255
- "trainingProvider.cancelJob": {
47495
+ "trainingProvider.cleanupJob": {
47256
47496
  capName: "training-provider",
47257
47497
  capScope: "system",
47258
47498
  addonId: null,
47259
47499
  access: "create"
47260
47500
  },
47261
- "trainingProvider.cleanupJob": {
47501
+ "trainingProvider.createEntry": {
47262
47502
  capName: "training-provider",
47263
47503
  capScope: "system",
47264
47504
  addonId: null,
47265
47505
  access: "create"
47266
47506
  },
47507
+ "trainingProvider.deleteEntry": {
47508
+ capName: "training-provider",
47509
+ capScope: "system",
47510
+ addonId: null,
47511
+ access: "delete"
47512
+ },
47267
47513
  "trainingProvider.describe": {
47268
47514
  capName: "training-provider",
47269
47515
  capScope: "system",
47270
47516
  addonId: null,
47271
47517
  access: "view"
47272
47518
  },
47519
+ "trainingProvider.describeTypes": {
47520
+ capName: "training-provider",
47521
+ capScope: "system",
47522
+ addonId: null,
47523
+ access: "view"
47524
+ },
47273
47525
  "trainingProvider.estimateJob": {
47274
47526
  capName: "training-provider",
47275
47527
  capScope: "system",
@@ -47282,6 +47534,12 @@ Object.freeze({
47282
47534
  addonId: null,
47283
47535
  access: "view"
47284
47536
  },
47537
+ "trainingProvider.listEntries": {
47538
+ capName: "training-provider",
47539
+ capScope: "system",
47540
+ addonId: null,
47541
+ access: "view"
47542
+ },
47285
47543
  "trainingProvider.listJobEvents": {
47286
47544
  capName: "training-provider",
47287
47545
  capScope: "system",
@@ -47312,6 +47570,12 @@ Object.freeze({
47312
47570
  addonId: null,
47313
47571
  access: "create"
47314
47572
  },
47573
+ "trainingProvider.updateEntry": {
47574
+ capName: "training-provider",
47575
+ capScope: "system",
47576
+ addonId: null,
47577
+ access: "create"
47578
+ },
47315
47579
  "trainingProvider.uploadDataset": {
47316
47580
  capName: "training-provider",
47317
47581
  capScope: "system",
@@ -50518,6 +50782,11 @@ Object.freeze({
50518
50782
  form: "single",
50519
50783
  optional: false
50520
50784
  }],
50785
+ "osdManager.setSlotCameraEnabled": [{
50786
+ name: "deviceId",
50787
+ form: "single",
50788
+ optional: false
50789
+ }],
50521
50790
  "petFeeder.callPet": [{
50522
50791
  name: "deviceId",
50523
50792
  form: "single",
@@ -50738,6 +51007,11 @@ Object.freeze({
50738
51007
  form: "array",
50739
51008
  optional: false
50740
51009
  }],
51010
+ "pipelineAnalytics.listRetrainCorpusPage": [{
51011
+ name: "deviceIds",
51012
+ form: "array",
51013
+ optional: true
51014
+ }],
50741
51015
  "pipelineAnalytics.listRetrainStaging": [{
50742
51016
  name: "deviceIds",
50743
51017
  form: "array",
@@ -51847,6 +52121,7 @@ Object.freeze({
51847
52121
  });
51848
52122
  Object.freeze({
51849
52123
  "broker": "broker",
52124
+ "calendar-source": "calendar",
51850
52125
  "device-export": "device-export",
51851
52126
  "llm": "ai",
51852
52127
  "mesh-network": "mesh",