@camstack/addon-export-alexa 1.2.142 → 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.
@@ -5379,7 +5379,7 @@ var ZodIssueCode = {
5379
5379
  var ZodFirstPartyTypeKind;
5380
5380
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5381
5381
  //#endregion
5382
- //#region ../types/dist/sleep-r3RWkGVx.mjs
5382
+ //#region ../types/dist/sleep-DwAQ9sqX.mjs
5383
5383
  /**
5384
5384
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5385
5385
  * window to float samples (D455).
@@ -9340,6 +9340,16 @@ var CompositionSchema = object({
9340
9340
  seen.add(feature.cap);
9341
9341
  });
9342
9342
  });
9343
+ var NodeColorIdSchema = _enum([
9344
+ "node-a",
9345
+ "node-b",
9346
+ "node-c",
9347
+ "node-d",
9348
+ "node-e",
9349
+ "node-f",
9350
+ "node-g",
9351
+ "node-h"
9352
+ ]);
9343
9353
  new Set([
9344
9354
  "track",
9345
9355
  "face",
@@ -18387,14 +18397,14 @@ var LlmProfileSchema = object({
18387
18397
  /** ConfigUISchema tree passed through untyped on the wire (the
18388
18398
  * notification-output `ConfigSchemaPassthrough` precedent at
18389
18399
  * notification-output.cap.ts:151); the exported TS type re-tightens it. */
18390
- var ConfigSchemaPassthrough$1 = unknown();
18400
+ var ConfigSchemaPassthrough$3 = unknown();
18391
18401
  var LlmProfileKindDescriptorSchema = object({
18392
18402
  kind: LlmProfileKindSchema,
18393
18403
  label: string(),
18394
18404
  icon: string(),
18395
18405
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
18396
18406
  addonId: string(),
18397
- configSchema: ConfigSchemaPassthrough$1
18407
+ configSchema: ConfigSchemaPassthrough$3
18398
18408
  });
18399
18409
  var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
18400
18410
  var LlmDefaultSchema = object({
@@ -19515,7 +19525,7 @@ var TargetKindCapsSchema = object({
19515
19525
  * the union is large and not meant for runtime validation here; the exported
19516
19526
  * `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
19517
19527
  */
19518
- var ConfigSchemaPassthrough = unknown();
19528
+ var ConfigSchemaPassthrough$2 = unknown();
19519
19529
  var TargetKindSchema = object({
19520
19530
  kind: string(),
19521
19531
  label: string(),
@@ -19552,7 +19562,7 @@ var TargetKindSchema = object({
19552
19562
  * its raster path, which is the safe default for an unknown image.
19553
19563
  */
19554
19564
  iconMediaType: string().optional(),
19555
- configSchema: ConfigSchemaPassthrough,
19565
+ configSchema: ConfigSchemaPassthrough$2,
19556
19566
  /**
19557
19567
  * The config keys that decide WHERE this kind's secrets are sent (server,
19558
19568
  * base URL, instance, chat, recipient). A save that changes any of them
@@ -22867,6 +22877,61 @@ var oauthIntegrationCapability = {
22867
22877
  getDescriptor: method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" }) }
22868
22878
  };
22869
22879
  /**
22880
+ * `oidc-connections` — CRUD for IdP rows under `auth-oidc` (D828 sibling).
22881
+ *
22882
+ * One hub-only singleton (`auth-oidc`). The Settings UI is a DataTable +
22883
+ * ItemFormDialog; there is no `editable-array` in `globalSettingsSchema`.
22884
+ * Operator-chosen `id` is the URL slug (`/addon/auth-oidc/<id>/…`) and is
22885
+ * immutable after create.
22886
+ */
22887
+ var ConfigSchemaPassthrough$1 = unknown();
22888
+ var OidcConnectionSchema = object({
22889
+ id: string().min(1),
22890
+ displayName: string(),
22891
+ icon: string(),
22892
+ issuerUrl: string(),
22893
+ clientId: string(),
22894
+ /** Client id + secret present — never the secret value. */
22895
+ configured: boolean(),
22896
+ /**
22897
+ * Values for the connection form schema. `clientSecret` is a keychain
22898
+ * {@link SecretFieldView} or `null` / `''`, never plaintext (D789).
22899
+ */
22900
+ formValues: record(string(), unknown()).optional()
22901
+ });
22902
+ /**
22903
+ * Patch one connection. Omitted or empty `clientSecret` keeps the stored
22904
+ * secret (D787). `{ $secretClear: true }` clears it. `id` is never renamed.
22905
+ */
22906
+ var OidcConnectionUpdateInputSchema = object({
22907
+ id: string().min(1),
22908
+ displayName: string().min(1),
22909
+ icon: string().optional(),
22910
+ issuerUrl: string().optional(),
22911
+ clientId: string().optional(),
22912
+ clientSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
22913
+ redirectUri: string().optional(),
22914
+ scopes: string().optional(),
22915
+ usernameClaim: _enum([
22916
+ "preferred_username",
22917
+ "email",
22918
+ "sub"
22919
+ ]).optional()
22920
+ });
22921
+ method(object({}), ConfigSchemaPassthrough$1, { auth: "admin" }), method(object({}), array(OidcConnectionSchema).readonly(), { auth: "admin" }), method(object({
22922
+ id: string().min(1).regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "id must be a lowercase slug"),
22923
+ displayName: string().min(1)
22924
+ }), object({ id: string() }), {
22925
+ kind: "mutation",
22926
+ auth: "admin"
22927
+ }), method(OidcConnectionUpdateInputSchema, object({ ok: literal(true) }), {
22928
+ kind: "mutation",
22929
+ auth: "admin"
22930
+ }), method(object({ id: string().min(1) }), object({ ok: literal(true) }), {
22931
+ kind: "mutation",
22932
+ auth: "admin"
22933
+ });
22934
+ /**
22870
22935
  * What started a camera's onboard motion (D672). `camera` is the camera's own
22871
22936
  * firmware; `sensor` is a device the operator ATTACHED to it. Absent on the
22872
22937
  * wire means the camera: only the camera-sensors bridge ever says `sensor`.
@@ -24223,24 +24288,69 @@ var RetrainFrameListSchema = object({
24223
24288
  /** What the page pre-selects — the native key frame when one survives. */
24224
24289
  autoPickMediaId: number().int().optional()
24225
24290
  });
24291
+ /** Exclusive partition of a corpus copy's annotation progress (design §4.2). */
24292
+ var RetrainFrameWorkStateSchema = _enum([
24293
+ "unannotated",
24294
+ "annotated",
24295
+ "complete"
24296
+ ]);
24297
+ /**
24298
+ * Filters for paginated corpus list, KPI, and matching export (design §4.4).
24299
+ * Every narrowing field is ANDed; omitted fields impose no constraint.
24300
+ */
24301
+ var RetrainCorpusFilterSchema = object({
24302
+ workState: RetrainFrameWorkStateSchema.optional(),
24303
+ deviceIds: array(number()).max(500).optional(),
24304
+ /** When set, only frames in this named collection. */
24305
+ collectionId: string().optional(),
24306
+ /** Frames that carry at least one saved annotation in one of these classes. */
24307
+ classes: array(RetrainMacroClassSchema).optional(),
24308
+ page: number().int().positive().default(1),
24309
+ pageSize: number().int().positive().max(100).default(50)
24310
+ });
24311
+ var RetrainCorpusPageSchema = object({
24312
+ frames: array(RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema })).readonly(),
24313
+ total: number().int().nonnegative(),
24314
+ page: number().int().positive(),
24315
+ pageSize: number().int().positive()
24316
+ });
24317
+ var RetrainCorpusKpiCameraRowSchema = object({
24318
+ deviceId: number(),
24319
+ unannotated: number().int().nonnegative(),
24320
+ annotated: number().int().nonnegative(),
24321
+ complete: number().int().nonnegative(),
24322
+ /** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
24323
+ * `null` when the corpus is empty (no ratio). */
24324
+ pctOfCorpus: number().min(0).max(1).nullable()
24325
+ });
24326
+ var RetrainCorpusKpiSchema = object({
24327
+ total: number().int().nonnegative(),
24328
+ unannotated: number().int().nonnegative(),
24329
+ annotated: number().int().nonnegative(),
24330
+ complete: number().int().nonnegative(),
24331
+ cameras: array(RetrainCorpusKpiCameraRowSchema).readonly()
24332
+ });
24226
24333
  /**
24227
24334
  * Which frames an annotated export carries. Every field narrows; an empty
24228
- * filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
24229
- * list owned by whoever trains (the training orchestrator), so `frameIds` is
24230
- * the primitive a version export uses; `batchId` re-selects what an earlier
24231
- * export carried (`exportedInBatch`).
24335
+ * filter is every annotated copy. `frameIds` is the primitive a job or
24336
+ * download uses; `batchId` re-selects what an earlier export carried
24337
+ * (`exportedInBatch`). Frozen dataset versions were removed — live selection
24338
+ * resolves to `frameIds` at plan/start.
24232
24339
  */
24233
24340
  var RetrainExportFilterSchema = object({
24234
24341
  deviceIds: array(number()).optional(),
24235
24342
  frameIds: array(string()).max(2e4).optional(),
24236
24343
  /** Only frames in at least one of these named collections. */
24237
24344
  collectionIds: array(string()).max(200).optional(),
24238
- /** Exactly the frames of this dataset version (and its completeOnly). An
24239
- * unknown id selects nothing. */
24240
- datasetVersionId: string().optional(),
24345
+ /** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
24346
+ collectionId: string().optional(),
24241
24347
  batchId: string().optional(),
24242
24348
  /** Only frames the operator marked complete (all subjects boxed). */
24243
- completeOnly: boolean().optional()
24349
+ completeOnly: boolean().optional(),
24350
+ /** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
24351
+ workState: RetrainFrameWorkStateSchema.optional(),
24352
+ /** Frames with at least one saved annotation in one of these classes. */
24353
+ classes: array(RetrainMacroClassSchema).optional()
24244
24354
  });
24245
24355
  /**
24246
24356
  * `frames`: the full frame copies, boxes in `annotations.json`.
@@ -24440,8 +24550,7 @@ var RetrainDatasetStatsSchema = object({
24440
24550
  completeFrames: number().int()
24441
24551
  })).readonly()
24442
24552
  });
24443
- /** An immutable dataset version, without its frame list. */
24444
- var RetrainDatasetVersionSchema = object({
24553
+ object({
24445
24554
  id: string(),
24446
24555
  name: string(),
24447
24556
  createdAt: number(),
@@ -24449,22 +24558,33 @@ var RetrainDatasetVersionSchema = object({
24449
24558
  layout: RetrainExportLayoutSchema,
24450
24559
  completeOnly: boolean(),
24451
24560
  frameCount: number().int(),
24452
- /** sha256 of what the frames taught when the version was frozen. */
24453
24561
  annotationHash: string(),
24454
- /** The export manifest schema the version was cut under. */
24455
24562
  manifestSchema: string(),
24456
24563
  stats: RetrainDatasetStatsSchema
24457
24564
  });
24458
- var CreateRetrainDatasetVersionResultSchema = discriminatedUnion("kind", [object({
24459
- kind: literal("created"),
24460
- version: RetrainDatasetVersionSchema
24565
+ /**
24566
+ * Live training corpus criteria — same shape as `TrainingCorpusSelection` on
24567
+ * the training cap. Resolved here so plan/start and the annotated export share
24568
+ * one definition of "the frames" (`buildRetrainExportPlan`).
24569
+ */
24570
+ var RetrainTrainingCorpusSelectionSchema = object({
24571
+ collectionIds: array(string()).min(1),
24572
+ workState: _enum([
24573
+ "complete",
24574
+ "annotated_or_complete",
24575
+ "any_annotated"
24576
+ ]).default("complete")
24577
+ });
24578
+ var RetrainTrainingCorpusResolveResultSchema = discriminatedUnion("kind", [object({
24579
+ kind: literal("resolved"),
24580
+ frameIds: array(string()).max(2e4).readonly(),
24581
+ stats: RetrainDatasetStatsSchema,
24582
+ annotationHash: string(),
24583
+ layout: RetrainExportLayoutSchema
24461
24584
  }), object({
24462
24585
  kind: literal("refused"),
24463
- reason: _enum([
24464
- "empty-name",
24465
- "duplicate-name",
24466
- "no-frames"
24467
- ])
24586
+ reason: _enum(["unknown-collection", "no-frames"]),
24587
+ detail: string()
24468
24588
  })]);
24469
24589
  /** The outcome of a lifecycle move owned by the retrain page. */
24470
24590
  var RetrainTransitionResultSchema = object({
@@ -25171,6 +25291,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema$1).r
25171
25291
  }), array(RetrainTrackSchema).readonly(), {
25172
25292
  kind: "query",
25173
25293
  auth: "admin"
25294
+ }), method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
25295
+ kind: "query",
25296
+ auth: "admin"
25297
+ }), method(object({}), RetrainCorpusKpiSchema, {
25298
+ kind: "query",
25299
+ auth: "admin"
25174
25300
  }), method(object({ trackId: string() }), RetrainFrameListSchema, {
25175
25301
  kind: "query",
25176
25302
  auth: "admin"
@@ -25266,36 +25392,6 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema$1).r
25266
25392
  kind: "mutation",
25267
25393
  auth: "admin",
25268
25394
  timeoutMs: 12e4
25269
- }), method(object({
25270
- selection: RetrainDatasetSelectionSchema,
25271
- completeOnly: boolean().optional()
25272
- }), RetrainDatasetStatsSchema, {
25273
- kind: "query",
25274
- auth: "admin"
25275
- }), method(object({
25276
- name: string().max(120),
25277
- selection: RetrainDatasetSelectionSchema,
25278
- layout: RetrainExportLayoutSchema,
25279
- completeOnly: boolean()
25280
- }), CreateRetrainDatasetVersionResultSchema, {
25281
- kind: "mutation",
25282
- auth: "admin",
25283
- timeoutMs: 12e4
25284
- }), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
25285
- kind: "query",
25286
- auth: "admin"
25287
- }), method(object({ id: string() }), object({ deleted: boolean() }), {
25288
- kind: "mutation",
25289
- auth: "admin"
25290
- }), method(object({ id: string() }), object({
25291
- found: boolean(),
25292
- annotationHash: string(),
25293
- matches: boolean(),
25294
- missingFrames: number().int()
25295
- }), {
25296
- kind: "query",
25297
- auth: "admin",
25298
- timeoutMs: 12e4
25299
25395
  }), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
25300
25396
  kind: "query",
25301
25397
  auth: "admin"
@@ -25322,6 +25418,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema$1).r
25322
25418
  }), method(object({}), array(RetrainCollectionSchema).readonly(), {
25323
25419
  kind: "query",
25324
25420
  auth: "admin"
25421
+ }), method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
25422
+ kind: "query",
25423
+ auth: "admin",
25424
+ timeoutMs: 6e4
25325
25425
  }), method(object({
25326
25426
  id: string(),
25327
25427
  name: string().max(120)
@@ -25938,11 +26038,14 @@ var HardwareClassIdSchema = _enum([
25938
26038
  "intel-n-series",
25939
26039
  "apple-m-base",
25940
26040
  "apple-m-pro",
26041
+ "amd-phoenix",
25941
26042
  "unknown"
25942
26043
  ]);
25943
26044
  var AcceleratorKindSchema = _enum([
25944
26045
  "intel-npu",
25945
26046
  "intel-igpu",
26047
+ "amd-igpu",
26048
+ "amd-npu",
25946
26049
  "x86-cpu",
25947
26050
  "arm-cpu",
25948
26051
  "apple-ane",
@@ -27832,6 +27935,8 @@ var AgentPipelineSettingsSchema = object({
27832
27935
  * address is wrong (multi-homed host, NAT, custom interface).
27833
27936
  */
27834
27937
  reachableHost: string().optional(),
27938
+ /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
27939
+ color: NodeColorIdSchema.optional(),
27835
27940
  /**
27836
27941
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
27837
27942
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
@@ -28381,8 +28486,9 @@ method(object({
28381
28486
  auth: "admin"
28382
28487
  }), method(object({
28383
28488
  agentNodeId: string(),
28384
- reachableHost: string().nullable()
28385
- }), object({ success: literal(true) }), {
28489
+ reachableHost: string().nullable().optional(),
28490
+ color: NodeColorIdSchema.nullable().optional()
28491
+ }).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), object({ success: literal(true) }), {
28386
28492
  kind: "mutation",
28387
28493
  auth: "admin"
28388
28494
  }), method(object({
@@ -31429,7 +31535,7 @@ var CustomActionInputSchema = object({
31429
31535
  action: string().min(1),
31430
31536
  input: unknown()
31431
31537
  });
31432
- method(_void(), array(AddonListItemSchema).readonly()), method(object({
31538
+ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSchema).readonly()), method(object({
31433
31539
  addonId: string(),
31434
31540
  limit: number().min(1).max(500).default(100),
31435
31541
  level: LogLevelSchema$2.optional()
@@ -35354,6 +35460,7 @@ var OsdNamedTemplateSchema = object({
35354
35460
  });
35355
35461
  /** Where a slot's value comes from. */
35356
35462
  var OsdSourceSchema = discriminatedUnion("kind", [
35463
+ object({ kind: literal("none") }),
35357
35464
  object({
35358
35465
  kind: literal("static"),
35359
35466
  text: string().max(64)
@@ -35480,6 +35587,13 @@ method(object({ deviceId: number().int() }), object({
35480
35587
  }), object({ success: literal(true) }), {
35481
35588
  kind: "mutation",
35482
35589
  auth: "admin"
35590
+ }), method(object({
35591
+ deviceId: number().int(),
35592
+ slotId: string().min(1),
35593
+ enabled: boolean()
35594
+ }), object({ success: literal(true) }), {
35595
+ kind: "mutation",
35596
+ auth: "admin"
35483
35597
  }), method(object({
35484
35598
  sourceDeviceId: number().int(),
35485
35599
  targetDeviceId: number().int()
@@ -35860,7 +35974,15 @@ var GpuInfoSchema = object({
35860
35974
  name: string(),
35861
35975
  memoryMB: number().optional()
35862
35976
  });
35863
- var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
35977
+ var NpuInfoSchema = object({
35978
+ type: _enum([
35979
+ "apple-ane",
35980
+ "intel-npu",
35981
+ "amd-xdna"
35982
+ ]),
35983
+ name: string().optional(),
35984
+ generation: _enum(["xdna1", "xdna2"]).optional()
35985
+ });
35864
35986
  var CoralInfoSchema = object({
35865
35987
  type: literal("coral-edgetpu"),
35866
35988
  bus: string().optional()
@@ -39645,9 +39767,11 @@ DeviceType.Camera, method(object({
39645
39767
  * once is what makes a second provider (RunPod, a local NVIDIA node) a new
39646
39768
  * manifest entry and nothing else.
39647
39769
  *
39648
- * Collection, routed by the `addonId` in every single-row input (the `llm` /
39649
- * `notification-output` posture); `describe` concat-fans across providers.
39650
- * Every method is `admin`: these spend money.
39770
+ * Collection of provider **types** (addons). Each addon owns zero or more
39771
+ * **entries** (credentials + defaults). Concat-fans: `describe`,
39772
+ * `describeTypes`, `listEntries`, `listJobs`. Single-row work is keyed by
39773
+ * `entryId`; callers also pass the owning `addonId` as the collection
39774
+ * selector (broker posture). Every method is `admin`: these spend money.
39651
39775
  *
39652
39776
  * Every cloud object a provider creates is tagged with the orchestrator's
39653
39777
  * `jobKey`, so a retried submit finds the job it already started instead of
@@ -39671,8 +39795,8 @@ var TrainingRegionOptionSchema = object({
39671
39795
  priceMultiplier: number().positive()
39672
39796
  });
39673
39797
  /**
39674
- * The provider's per-account settings, as the orchestrator reads them. They
39675
- * live in the PROVIDER addon's settings (operator decision 2026-10-08: they
39798
+ * The provider's per-entry settings, as the orchestrator reads them. They
39799
+ * live on the PROVIDER addon's entry (operator decision 2026-10-08: they
39676
39800
  * depend on the user's account), never hard-coded in the orchestrator.
39677
39801
  */
39678
39802
  var TrainingProviderDefaultsSchema = object({
@@ -39683,9 +39807,44 @@ var TrainingProviderDefaultsSchema = object({
39683
39807
  /** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
39684
39808
  failedDatasetGraceHours: number().nonnegative()
39685
39809
  });
39810
+ /**
39811
+ * Entry form schema for a provider type — same seam as notification
39812
+ * `TargetKind.configSchema` (`z.unknown()` at the wire; callers tighten to
39813
+ * {@link ConfigUISchema}). Drives `ConfigFormBuilder` on Training → Providers.
39814
+ */
39815
+ var ConfigSchemaPassthrough = unknown();
39816
+ /** One creatable provider type, for the Add-entry dialog. */
39817
+ var TrainingProviderTypeSchema = object({
39818
+ typeId: string(),
39819
+ label: string(),
39820
+ /** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
39821
+ iconAsset: string(),
39822
+ /** Owning `training-provider` addon — collection selector for createEntry. */
39823
+ addonId: string(),
39824
+ /**
39825
+ * Fields for one entry of this type (credentials + defaults). Absent on a
39826
+ * type that only needs a name. Password fields are keychain-backed on the
39827
+ * provider addon (`secretStatePaths`), not D634 plaintext.
39828
+ */
39829
+ configSchema: ConfigSchemaPassthrough.optional()
39830
+ });
39831
+ /** One configured account / workspace under a provider type. */
39832
+ var TrainingProviderEntrySchema = object({
39833
+ entryId: string(),
39834
+ typeId: string(),
39835
+ name: string(),
39836
+ addonId: string(),
39837
+ /** Credentials are present — never the values. */
39838
+ configured: boolean()
39839
+ });
39686
39840
  var TrainingProviderDescriptorSchema = object({
39687
39841
  addonId: string(),
39688
- /** `modal`, `runpod`, `fake`, … */
39842
+ entryId: string(),
39843
+ typeId: string(),
39844
+ /** Operator-chosen entry name. */
39845
+ name: string(),
39846
+ iconAsset: string(),
39847
+ /** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
39689
39848
  kind: string(),
39690
39849
  label: string(),
39691
39850
  gpuTypes: array(TrainingGpuOptionSchema).readonly(),
@@ -39697,7 +39856,30 @@ var TrainingProviderDescriptorSchema = object({
39697
39856
  dataResidencyNote: string(),
39698
39857
  /** Credentials are present — never the values. */
39699
39858
  configured: boolean(),
39700
- defaults: TrainingProviderDefaultsSchema
39859
+ defaults: TrainingProviderDefaultsSchema,
39860
+ /**
39861
+ * Values for {@link TrainingProviderTypeSchema}'s `configSchema` — password
39862
+ * fields are keychain {@link SecretFieldView} or `null` / `''` (create),
39863
+ * never plaintext. Same hydrate contract as settings forms (D789).
39864
+ */
39865
+ formValues: record(string(), unknown()).optional()
39866
+ });
39867
+ /**
39868
+ * Patch one entry's name, credentials and defaults. Pin with owning `{ addonId }`.
39869
+ * An omitted or empty `tokenSecret` means KEEP the stored secret (D787).
39870
+ * `{ $secretClear: true }` clears it.
39871
+ */
39872
+ var TrainingProviderUpdateEntryInputSchema = object({
39873
+ entryId: string().min(1),
39874
+ name: string().min(1),
39875
+ tokenId: string().optional(),
39876
+ tokenSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
39877
+ environment: string().optional(),
39878
+ gpuType: string().optional(),
39879
+ region: string().optional(),
39880
+ costCapUsd: number().nonnegative().optional(),
39881
+ maxRuntimeSec: number().int().positive().optional(),
39882
+ failedDatasetGraceHours: number().nonnegative().optional()
39701
39883
  });
39702
39884
  var TrainingCredentialCheckSchema = object({
39703
39885
  ok: boolean(),
@@ -39749,20 +39931,33 @@ var TrainerSourceRefSchema = object({
39749
39931
  /** A commit sha (never a branch) — the job must be reproducible. */
39750
39932
  revision: string().regex(/^[0-9a-f]{7,64}$/)
39751
39933
  });
39934
+ /** Cloud job identity — route with the owning addon's `addonId` selector. */
39752
39935
  var JobRef = {
39753
- addonId: string(),
39936
+ entryId: string().min(1),
39754
39937
  jobKey: string().uuid()
39755
39938
  };
39756
39939
  var TrainingLogLineSchema = object({
39757
39940
  ts: number(),
39758
39941
  text: string()
39759
39942
  });
39760
- method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({ addonId: string() }), TrainingCredentialCheckSchema, {
39943
+ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }), method(object({
39944
+ typeId: string().min(1),
39945
+ name: string().min(1)
39946
+ }), object({ entryId: string() }), {
39947
+ kind: "mutation",
39948
+ auth: "admin"
39949
+ }), method(object({ entryId: string().min(1) }), object({ ok: literal(true) }), {
39950
+ kind: "mutation",
39951
+ auth: "admin"
39952
+ }), method(TrainingProviderUpdateEntryInputSchema, object({ ok: literal(true) }), {
39953
+ kind: "mutation",
39954
+ auth: "admin"
39955
+ }), method(object({ entryId: string().min(1) }), TrainingCredentialCheckSchema, {
39761
39956
  kind: "mutation",
39762
39957
  auth: "admin",
39763
39958
  timeoutMs: 3e4
39764
39959
  }), method(object({
39765
- addonId: string(),
39960
+ entryId: string().min(1),
39766
39961
  gpuType: string(),
39767
39962
  region: string(),
39768
39963
  datasetBytes: number().int().nonnegative(),
@@ -39828,7 +40023,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
39828
40023
  kind: "mutation",
39829
40024
  auth: "admin",
39830
40025
  timeoutMs: 5 * 6e4
39831
- }), method(object({ addonId: string() }), array(ProviderJobStatusSchema).readonly(), {
40026
+ }), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
39832
40027
  auth: "admin",
39833
40028
  timeoutMs: 2 * 6e4
39834
40029
  });
@@ -39838,20 +40033,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
39838
40033
  *
39839
40034
  * It owns what every provider must agree on, written once:
39840
40035
  *
39841
- * - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
39842
- * live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
39843
- * the export plan) and reaches this store through the five row methods
39844
- * below, so the Retrain page and the export did not change.
39845
40036
  * - **Jobs.** A persisted state machine, a reconcile loop against the
39846
40037
  * provider, a cost guard, a daily orphan sweep and the retention rules.
39847
40038
  * - **The return flow.** Verified artefacts → Model Studio
39848
40039
  * (`custom-model-registry.importModelBundle`) → canary on cameras →
39849
40040
  * rollback. Nothing is ever registered automatically.
39850
40041
  *
40042
+ * Plan/start takes a live {@link TrainingCorpusSelection} (collections +
40043
+ * work-state rule); frame ids are resolved via pipeline-analytics at that
40044
+ * moment and snapshotted on the job. No frozen dataset version.
40045
+ *
39851
40046
  * Every method is `admin`.
39852
40047
  */
39853
- /** A version WITH its frame list — what the export and a job read. */
39854
- var TrainingDatasetVersionRowSchema = RetrainDatasetVersionSchema.omit({ frameCount: true }).extend({ frameIds: array(string()).max(2e4).readonly() });
40048
+ /**
40049
+ * Live corpus criteria for plan/start (design §5.2). Default is complete-only.
40050
+ * Frame ids are resolved at plan/start — never a frozen version id.
40051
+ */
40052
+ var TrainingCorpusSelectionSchema = object({
40053
+ collectionIds: array(string()).min(1),
40054
+ /** Default complete-only for v1 */
40055
+ workState: _enum([
40056
+ "complete",
40057
+ "annotated_or_complete",
40058
+ "any_annotated"
40059
+ ]).default("complete")
40060
+ });
39855
40061
  /** A base model a detector job can fine-tune, and the baseline it is judged against. */
39856
40062
  var TrainingBaseModelSchema = object({
39857
40063
  modelId: string(),
@@ -39869,9 +40075,13 @@ var TrainingPresetSchema = _enum([
39869
40075
  "thorough"
39870
40076
  ]);
39871
40077
  var TrainingJobRequestSchema = object({
39872
- datasetVersionId: string().min(1),
39873
- /** The `training-provider` addon that runs it. */
39874
- addonId: string().min(1),
40078
+ /** Live collection + work-state criteria; resolved at plan/start. */
40079
+ selection: TrainingCorpusSelectionSchema,
40080
+ /**
40081
+ * The provider **entry** that runs it (credentials + defaults).
40082
+ * Resolve to an owning addon via `training-provider.describe` / `listEntries`.
40083
+ */
40084
+ entryId: string().min(1),
39875
40085
  gpuType: string().min(1),
39876
40086
  region: string(),
39877
40087
  baseModelId: string().min(1),
@@ -39930,6 +40140,7 @@ var TrainingJobPlanSchema = object({
39930
40140
  * result lives after the operator acted on it.
39931
40141
  */
39932
40142
  var TrainingJobStateSchema = _enum([
40143
+ "queued",
39933
40144
  "uploading",
39934
40145
  "submitted",
39935
40146
  "starting",
@@ -39983,6 +40194,11 @@ var TrainingJobSchema = object({
39983
40194
  createdAt: number(),
39984
40195
  updatedAt: number(),
39985
40196
  state: TrainingJobStateSchema,
40197
+ /**
40198
+ * Shared by every job enqueued together via `startJobBatch`.
40199
+ * `null` for a lone `startJob`. The engine advances queued siblings by this id.
40200
+ */
40201
+ batchId: string().nullable().default(null),
39986
40202
  stage: TrainingStageSchema.nullable(),
39987
40203
  failure: object({
39988
40204
  reason: TrainingFailureReasonSchema,
@@ -39994,6 +40210,12 @@ var TrainingJobSchema = object({
39994
40210
  maxRuntimeSec: number().int().positive(),
39995
40211
  trainer: TrainerSourceRefSchema,
39996
40212
  datasetLayout: RetrainExportLayoutSchema,
40213
+ /** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
40214
+ frameCount: number().int().nonnegative(),
40215
+ /** Resolved frame ids at start — the archive ships exactly these. */
40216
+ frameIds: array(string()).max(2e4).readonly(),
40217
+ /** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
40218
+ annotationHash: string(),
39997
40219
  dataset: object({
39998
40220
  bytes: number().int(),
39999
40221
  sha256: string(),
@@ -40035,13 +40257,7 @@ var TrainingJobSchema = object({
40035
40257
  canary: TrainingCanarySchema.nullable()
40036
40258
  });
40037
40259
  var IdInput = object({ id: string().min(1) });
40038
- method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
40039
- kind: "mutation",
40040
- auth: "admin"
40041
- }), 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() }), {
40042
- kind: "mutation",
40043
- auth: "admin"
40044
- }), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
40260
+ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
40045
40261
  auth: "admin",
40046
40262
  timeoutMs: 6e4
40047
40263
  }), method(TrainingJobRequestSchema.extend({
@@ -40060,6 +40276,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
40060
40276
  kind: "mutation",
40061
40277
  auth: "admin",
40062
40278
  timeoutMs: 12e4
40279
+ }), method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
40280
+ baseModelIds: array(string().min(1)).min(1),
40281
+ name: string().min(1).max(120),
40282
+ maxCostUsd: number().positive(),
40283
+ maxRuntimeSec: number().int().positive(),
40284
+ idempotencyKey: string().min(8).max(80)
40285
+ }), discriminatedUnion("kind", [object({
40286
+ kind: literal("started"),
40287
+ batchId: string(),
40288
+ jobs: array(TrainingJobSchema).min(1).readonly()
40289
+ }), object({
40290
+ kind: literal("refused"),
40291
+ reason: TrainingRefusalReasonSchema,
40292
+ detail: string()
40293
+ })]), {
40294
+ kind: "mutation",
40295
+ auth: "admin",
40296
+ timeoutMs: 12e4
40063
40297
  }), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
40064
40298
  kind: "mutation",
40065
40299
  auth: "admin",
@@ -44093,6 +44327,36 @@ Object.freeze({
44093
44327
  addonId: null,
44094
44328
  access: "view"
44095
44329
  },
44330
+ "oidcConnections.connectionFormSchema": {
44331
+ capName: "oidc-connections",
44332
+ capScope: "system",
44333
+ addonId: null,
44334
+ access: "view"
44335
+ },
44336
+ "oidcConnections.createConnection": {
44337
+ capName: "oidc-connections",
44338
+ capScope: "system",
44339
+ addonId: null,
44340
+ access: "create"
44341
+ },
44342
+ "oidcConnections.deleteConnection": {
44343
+ capName: "oidc-connections",
44344
+ capScope: "system",
44345
+ addonId: null,
44346
+ access: "delete"
44347
+ },
44348
+ "oidcConnections.listConnections": {
44349
+ capName: "oidc-connections",
44350
+ capScope: "system",
44351
+ addonId: null,
44352
+ access: "view"
44353
+ },
44354
+ "oidcConnections.updateConnection": {
44355
+ capName: "oidc-connections",
44356
+ capScope: "system",
44357
+ addonId: null,
44358
+ access: "create"
44359
+ },
44096
44360
  "osd.getStatus": {
44097
44361
  capName: "osd",
44098
44362
  capScope: "device",
@@ -44165,6 +44429,12 @@ Object.freeze({
44165
44429
  addonId: null,
44166
44430
  access: "create"
44167
44431
  },
44432
+ "osdManager.setSlotCameraEnabled": {
44433
+ capName: "osd-manager",
44434
+ capScope: "system",
44435
+ addonId: null,
44436
+ access: "create"
44437
+ },
44168
44438
  "osdManager.upsertTemplate": {
44169
44439
  capName: "osd-manager",
44170
44440
  capScope: "system",
@@ -44303,12 +44573,6 @@ Object.freeze({
44303
44573
  addonId: null,
44304
44574
  access: "create"
44305
44575
  },
44306
- "pipelineAnalytics.createRetrainDatasetVersion": {
44307
- capName: "pipeline-analytics",
44308
- capScope: "device",
44309
- addonId: null,
44310
- access: "create"
44311
- },
44312
44576
  "pipelineAnalytics.deleteDeviceEvents": {
44313
44577
  capName: "pipeline-analytics",
44314
44578
  capScope: "device",
@@ -44321,12 +44585,6 @@ Object.freeze({
44321
44585
  addonId: null,
44322
44586
  access: "delete"
44323
44587
  },
44324
- "pipelineAnalytics.deleteRetrainDatasetVersion": {
44325
- capName: "pipeline-analytics",
44326
- capScope: "device",
44327
- addonId: null,
44328
- access: "delete"
44329
- },
44330
44588
  "pipelineAnalytics.deleteTracks": {
44331
44589
  capName: "pipeline-analytics",
44332
44590
  capScope: "device",
@@ -44429,6 +44687,12 @@ Object.freeze({
44429
44687
  addonId: null,
44430
44688
  access: "view"
44431
44689
  },
44690
+ "pipelineAnalytics.getRetrainCorpusKpi": {
44691
+ capName: "pipeline-analytics",
44692
+ capScope: "device",
44693
+ addonId: null,
44694
+ access: "view"
44695
+ },
44432
44696
  "pipelineAnalytics.getRetrainExportUrl": {
44433
44697
  capName: "pipeline-analytics",
44434
44698
  capScope: "device",
@@ -44549,7 +44813,7 @@ Object.freeze({
44549
44813
  addonId: null,
44550
44814
  access: "view"
44551
44815
  },
44552
- "pipelineAnalytics.listRetrainDatasetVersions": {
44816
+ "pipelineAnalytics.listRetrainCorpusPage": {
44553
44817
  capName: "pipeline-analytics",
44554
44818
  capScope: "device",
44555
44819
  addonId: null,
@@ -44603,12 +44867,6 @@ Object.freeze({
44603
44867
  addonId: null,
44604
44868
  access: "create"
44605
44869
  },
44606
- "pipelineAnalytics.previewRetrainDataset": {
44607
- capName: "pipeline-analytics",
44608
- capScope: "device",
44609
- addonId: null,
44610
- access: "view"
44611
- },
44612
44870
  "pipelineAnalytics.proposeRetrainAnnotations": {
44613
44871
  capName: "pipeline-analytics",
44614
44872
  capScope: "device",
@@ -44687,6 +44945,12 @@ Object.freeze({
44687
44945
  addonId: null,
44688
44946
  access: "create"
44689
44947
  },
44948
+ "pipelineAnalytics.resolveRetrainTrainingCorpus": {
44949
+ capName: "pipeline-analytics",
44950
+ capScope: "device",
44951
+ addonId: null,
44952
+ access: "view"
44953
+ },
44690
44954
  "pipelineAnalytics.restageRetrainTrack": {
44691
44955
  capName: "pipeline-analytics",
44692
44956
  capScope: "device",
@@ -44747,12 +45011,6 @@ Object.freeze({
44747
45011
  addonId: null,
44748
45012
  access: "create"
44749
45013
  },
44750
- "pipelineAnalytics.verifyRetrainDatasetVersion": {
44751
- capName: "pipeline-analytics",
44752
- capScope: "device",
44753
- addonId: null,
44754
- access: "view"
44755
- },
44756
45014
  "pipelineAnalytics.wipeAllAnalytics": {
44757
45015
  capName: "pipeline-analytics",
44758
45016
  capScope: "device",
@@ -47147,18 +47405,6 @@ Object.freeze({
47147
47405
  addonId: null,
47148
47406
  access: "create"
47149
47407
  },
47150
- "training.findDatasetVersionIdByName": {
47151
- capName: "training",
47152
- capScope: "system",
47153
- addonId: null,
47154
- access: "view"
47155
- },
47156
- "training.getDatasetVersion": {
47157
- capName: "training",
47158
- capScope: "system",
47159
- addonId: null,
47160
- access: "view"
47161
- },
47162
47408
  "training.getJob": {
47163
47409
  capName: "training",
47164
47410
  capScope: "system",
@@ -47177,12 +47423,6 @@ Object.freeze({
47177
47423
  addonId: null,
47178
47424
  access: "view"
47179
47425
  },
47180
- "training.listDatasetVersions": {
47181
- capName: "training",
47182
- capScope: "system",
47183
- addonId: null,
47184
- access: "view"
47185
- },
47186
47426
  "training.listJobs": {
47187
47427
  capName: "training",
47188
47428
  capScope: "system",
@@ -47195,54 +47435,66 @@ Object.freeze({
47195
47435
  addonId: null,
47196
47436
  access: "view"
47197
47437
  },
47198
- "training.putDatasetVersion": {
47438
+ "training.registerResult": {
47199
47439
  capName: "training",
47200
47440
  capScope: "system",
47201
47441
  addonId: null,
47202
47442
  access: "create"
47203
47443
  },
47204
- "training.registerResult": {
47444
+ "training.rollbackCanary": {
47205
47445
  capName: "training",
47206
47446
  capScope: "system",
47207
47447
  addonId: null,
47208
47448
  access: "create"
47209
47449
  },
47210
- "training.removeDatasetVersion": {
47450
+ "training.startJob": {
47211
47451
  capName: "training",
47212
47452
  capScope: "system",
47213
47453
  addonId: null,
47214
- access: "delete"
47454
+ access: "create"
47215
47455
  },
47216
- "training.rollbackCanary": {
47456
+ "training.startJobBatch": {
47217
47457
  capName: "training",
47218
47458
  capScope: "system",
47219
47459
  addonId: null,
47220
47460
  access: "create"
47221
47461
  },
47222
- "training.startJob": {
47223
- capName: "training",
47462
+ "trainingProvider.cancelJob": {
47463
+ capName: "training-provider",
47224
47464
  capScope: "system",
47225
47465
  addonId: null,
47226
47466
  access: "create"
47227
47467
  },
47228
- "trainingProvider.cancelJob": {
47468
+ "trainingProvider.cleanupJob": {
47229
47469
  capName: "training-provider",
47230
47470
  capScope: "system",
47231
47471
  addonId: null,
47232
47472
  access: "create"
47233
47473
  },
47234
- "trainingProvider.cleanupJob": {
47474
+ "trainingProvider.createEntry": {
47235
47475
  capName: "training-provider",
47236
47476
  capScope: "system",
47237
47477
  addonId: null,
47238
47478
  access: "create"
47239
47479
  },
47480
+ "trainingProvider.deleteEntry": {
47481
+ capName: "training-provider",
47482
+ capScope: "system",
47483
+ addonId: null,
47484
+ access: "delete"
47485
+ },
47240
47486
  "trainingProvider.describe": {
47241
47487
  capName: "training-provider",
47242
47488
  capScope: "system",
47243
47489
  addonId: null,
47244
47490
  access: "view"
47245
47491
  },
47492
+ "trainingProvider.describeTypes": {
47493
+ capName: "training-provider",
47494
+ capScope: "system",
47495
+ addonId: null,
47496
+ access: "view"
47497
+ },
47246
47498
  "trainingProvider.estimateJob": {
47247
47499
  capName: "training-provider",
47248
47500
  capScope: "system",
@@ -47255,6 +47507,12 @@ Object.freeze({
47255
47507
  addonId: null,
47256
47508
  access: "view"
47257
47509
  },
47510
+ "trainingProvider.listEntries": {
47511
+ capName: "training-provider",
47512
+ capScope: "system",
47513
+ addonId: null,
47514
+ access: "view"
47515
+ },
47258
47516
  "trainingProvider.listJobEvents": {
47259
47517
  capName: "training-provider",
47260
47518
  capScope: "system",
@@ -47285,6 +47543,12 @@ Object.freeze({
47285
47543
  addonId: null,
47286
47544
  access: "create"
47287
47545
  },
47546
+ "trainingProvider.updateEntry": {
47547
+ capName: "training-provider",
47548
+ capScope: "system",
47549
+ addonId: null,
47550
+ access: "create"
47551
+ },
47288
47552
  "trainingProvider.uploadDataset": {
47289
47553
  capName: "training-provider",
47290
47554
  capScope: "system",
@@ -50491,6 +50755,11 @@ Object.freeze({
50491
50755
  form: "single",
50492
50756
  optional: false
50493
50757
  }],
50758
+ "osdManager.setSlotCameraEnabled": [{
50759
+ name: "deviceId",
50760
+ form: "single",
50761
+ optional: false
50762
+ }],
50494
50763
  "petFeeder.callPet": [{
50495
50764
  name: "deviceId",
50496
50765
  form: "single",
@@ -50711,6 +50980,11 @@ Object.freeze({
50711
50980
  form: "array",
50712
50981
  optional: false
50713
50982
  }],
50983
+ "pipelineAnalytics.listRetrainCorpusPage": [{
50984
+ name: "deviceIds",
50985
+ form: "array",
50986
+ optional: true
50987
+ }],
50714
50988
  "pipelineAnalytics.listRetrainStaging": [{
50715
50989
  name: "deviceIds",
50716
50990
  form: "array",
@@ -51820,6 +52094,7 @@ Object.freeze({
51820
52094
  });
51821
52095
  Object.freeze({
51822
52096
  "broker": "broker",
52097
+ "calendar-source": "calendar",
51823
52098
  "device-export": "device-export",
51824
52099
  "llm": "ai",
51825
52100
  "mesh-network": "mesh",