@camstack/addon-provider-wyze 0.2.135 → 0.2.136

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 +422 -139
  2. package/dist/addon.mjs +422 -139
  3. package/package.json +1 -1
package/dist/addon.mjs CHANGED
@@ -5388,7 +5388,7 @@ var ZodIssueCode = {
5388
5388
  var ZodFirstPartyTypeKind;
5389
5389
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5390
5390
  //#endregion
5391
- //#region ../types/dist/sleep-r3RWkGVx.mjs
5391
+ //#region ../types/dist/sleep-DwAQ9sqX.mjs
5392
5392
  /**
5393
5393
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5394
5394
  * window to float samples (D455).
@@ -9394,6 +9394,16 @@ var CompositionSchema = object({
9394
9394
  seen.add(feature.cap);
9395
9395
  });
9396
9396
  });
9397
+ var NodeColorIdSchema = _enum([
9398
+ "node-a",
9399
+ "node-b",
9400
+ "node-c",
9401
+ "node-d",
9402
+ "node-e",
9403
+ "node-f",
9404
+ "node-g",
9405
+ "node-h"
9406
+ ]);
9397
9407
  new Set([
9398
9408
  "track",
9399
9409
  "face",
@@ -18460,14 +18470,14 @@ var LlmProfileSchema = object({
18460
18470
  /** ConfigUISchema tree passed through untyped on the wire (the
18461
18471
  * notification-output `ConfigSchemaPassthrough` precedent at
18462
18472
  * notification-output.cap.ts:151); the exported TS type re-tightens it. */
18463
- var ConfigSchemaPassthrough$1 = unknown();
18473
+ var ConfigSchemaPassthrough$3 = unknown();
18464
18474
  var LlmProfileKindDescriptorSchema = object({
18465
18475
  kind: LlmProfileKindSchema,
18466
18476
  label: string(),
18467
18477
  icon: string(),
18468
18478
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
18469
18479
  addonId: string(),
18470
- configSchema: ConfigSchemaPassthrough$1
18480
+ configSchema: ConfigSchemaPassthrough$3
18471
18481
  });
18472
18482
  var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
18473
18483
  var LlmDefaultSchema = object({
@@ -19588,7 +19598,7 @@ var TargetKindCapsSchema = object({
19588
19598
  * the union is large and not meant for runtime validation here; the exported
19589
19599
  * `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
19590
19600
  */
19591
- var ConfigSchemaPassthrough = unknown();
19601
+ var ConfigSchemaPassthrough$2 = unknown();
19592
19602
  var TargetKindSchema = object({
19593
19603
  kind: string(),
19594
19604
  label: string(),
@@ -19625,7 +19635,7 @@ var TargetKindSchema = object({
19625
19635
  * its raster path, which is the safe default for an unknown image.
19626
19636
  */
19627
19637
  iconMediaType: string().optional(),
19628
- configSchema: ConfigSchemaPassthrough,
19638
+ configSchema: ConfigSchemaPassthrough$2,
19629
19639
  /**
19630
19640
  * The config keys that decide WHERE this kind's secrets are sent (server,
19631
19641
  * base URL, instance, chat, recipient). A save that changes any of them
@@ -22962,6 +22972,61 @@ var OauthIntegrationDescriptorSchema = object({
22962
22972
  });
22963
22973
  method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
22964
22974
  /**
22975
+ * `oidc-connections` — CRUD for IdP rows under `auth-oidc` (D828 sibling).
22976
+ *
22977
+ * One hub-only singleton (`auth-oidc`). The Settings UI is a DataTable +
22978
+ * ItemFormDialog; there is no `editable-array` in `globalSettingsSchema`.
22979
+ * Operator-chosen `id` is the URL slug (`/addon/auth-oidc/<id>/…`) and is
22980
+ * immutable after create.
22981
+ */
22982
+ var ConfigSchemaPassthrough$1 = unknown();
22983
+ var OidcConnectionSchema = object({
22984
+ id: string().min(1),
22985
+ displayName: string(),
22986
+ icon: string(),
22987
+ issuerUrl: string(),
22988
+ clientId: string(),
22989
+ /** Client id + secret present — never the secret value. */
22990
+ configured: boolean(),
22991
+ /**
22992
+ * Values for the connection form schema. `clientSecret` is a keychain
22993
+ * {@link SecretFieldView} or `null` / `''`, never plaintext (D789).
22994
+ */
22995
+ formValues: record(string(), unknown()).optional()
22996
+ });
22997
+ /**
22998
+ * Patch one connection. Omitted or empty `clientSecret` keeps the stored
22999
+ * secret (D787). `{ $secretClear: true }` clears it. `id` is never renamed.
23000
+ */
23001
+ var OidcConnectionUpdateInputSchema = object({
23002
+ id: string().min(1),
23003
+ displayName: string().min(1),
23004
+ icon: string().optional(),
23005
+ issuerUrl: string().optional(),
23006
+ clientId: string().optional(),
23007
+ clientSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
23008
+ redirectUri: string().optional(),
23009
+ scopes: string().optional(),
23010
+ usernameClaim: _enum([
23011
+ "preferred_username",
23012
+ "email",
23013
+ "sub"
23014
+ ]).optional()
23015
+ });
23016
+ method(object({}), ConfigSchemaPassthrough$1, { auth: "admin" }), method(object({}), array(OidcConnectionSchema).readonly(), { auth: "admin" }), method(object({
23017
+ id: string().min(1).regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "id must be a lowercase slug"),
23018
+ displayName: string().min(1)
23019
+ }), object({ id: string() }), {
23020
+ kind: "mutation",
23021
+ auth: "admin"
23022
+ }), method(OidcConnectionUpdateInputSchema, object({ ok: literal(true) }), {
23023
+ kind: "mutation",
23024
+ auth: "admin"
23025
+ }), method(object({ id: string().min(1) }), object({ ok: literal(true) }), {
23026
+ kind: "mutation",
23027
+ auth: "admin"
23028
+ });
23029
+ /**
22965
23030
  * What started a camera's onboard motion (D672). `camera` is the camera's own
22966
23031
  * firmware; `sensor` is a device the operator ATTACHED to it. Absent on the
22967
23032
  * wire means the camera: only the camera-sensors bridge ever says `sensor`.
@@ -24318,24 +24383,69 @@ var RetrainFrameListSchema = object({
24318
24383
  /** What the page pre-selects — the native key frame when one survives. */
24319
24384
  autoPickMediaId: number().int().optional()
24320
24385
  });
24386
+ /** Exclusive partition of a corpus copy's annotation progress (design §4.2). */
24387
+ var RetrainFrameWorkStateSchema = _enum([
24388
+ "unannotated",
24389
+ "annotated",
24390
+ "complete"
24391
+ ]);
24392
+ /**
24393
+ * Filters for paginated corpus list, KPI, and matching export (design §4.4).
24394
+ * Every narrowing field is ANDed; omitted fields impose no constraint.
24395
+ */
24396
+ var RetrainCorpusFilterSchema = object({
24397
+ workState: RetrainFrameWorkStateSchema.optional(),
24398
+ deviceIds: array(number()).max(500).optional(),
24399
+ /** When set, only frames in this named collection. */
24400
+ collectionId: string().optional(),
24401
+ /** Frames that carry at least one saved annotation in one of these classes. */
24402
+ classes: array(RetrainMacroClassSchema).optional(),
24403
+ page: number().int().positive().default(1),
24404
+ pageSize: number().int().positive().max(100).default(50)
24405
+ });
24406
+ var RetrainCorpusPageSchema = object({
24407
+ frames: array(RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema })).readonly(),
24408
+ total: number().int().nonnegative(),
24409
+ page: number().int().positive(),
24410
+ pageSize: number().int().positive()
24411
+ });
24412
+ var RetrainCorpusKpiCameraRowSchema = object({
24413
+ deviceId: number(),
24414
+ unannotated: number().int().nonnegative(),
24415
+ annotated: number().int().nonnegative(),
24416
+ complete: number().int().nonnegative(),
24417
+ /** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
24418
+ * `null` when the corpus is empty (no ratio). */
24419
+ pctOfCorpus: number().min(0).max(1).nullable()
24420
+ });
24421
+ var RetrainCorpusKpiSchema = object({
24422
+ total: number().int().nonnegative(),
24423
+ unannotated: number().int().nonnegative(),
24424
+ annotated: number().int().nonnegative(),
24425
+ complete: number().int().nonnegative(),
24426
+ cameras: array(RetrainCorpusKpiCameraRowSchema).readonly()
24427
+ });
24321
24428
  /**
24322
24429
  * Which frames an annotated export carries. Every field narrows; an empty
24323
- * filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
24324
- * list owned by whoever trains (the training orchestrator), so `frameIds` is
24325
- * the primitive a version export uses; `batchId` re-selects what an earlier
24326
- * export carried (`exportedInBatch`).
24430
+ * filter is every annotated copy. `frameIds` is the primitive a job or
24431
+ * download uses; `batchId` re-selects what an earlier export carried
24432
+ * (`exportedInBatch`). Frozen dataset versions were removed — live selection
24433
+ * resolves to `frameIds` at plan/start.
24327
24434
  */
24328
24435
  var RetrainExportFilterSchema = object({
24329
24436
  deviceIds: array(number()).optional(),
24330
24437
  frameIds: array(string()).max(2e4).optional(),
24331
24438
  /** Only frames in at least one of these named collections. */
24332
24439
  collectionIds: array(string()).max(200).optional(),
24333
- /** Exactly the frames of this dataset version (and its completeOnly). An
24334
- * unknown id selects nothing. */
24335
- datasetVersionId: string().optional(),
24440
+ /** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
24441
+ collectionId: string().optional(),
24336
24442
  batchId: string().optional(),
24337
24443
  /** Only frames the operator marked complete (all subjects boxed). */
24338
- completeOnly: boolean().optional()
24444
+ completeOnly: boolean().optional(),
24445
+ /** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
24446
+ workState: RetrainFrameWorkStateSchema.optional(),
24447
+ /** Frames with at least one saved annotation in one of these classes. */
24448
+ classes: array(RetrainMacroClassSchema).optional()
24339
24449
  });
24340
24450
  /**
24341
24451
  * `frames`: the full frame copies, boxes in `annotations.json`.
@@ -24535,8 +24645,7 @@ var RetrainDatasetStatsSchema = object({
24535
24645
  completeFrames: number().int()
24536
24646
  })).readonly()
24537
24647
  });
24538
- /** An immutable dataset version, without its frame list. */
24539
- var RetrainDatasetVersionSchema = object({
24648
+ object({
24540
24649
  id: string(),
24541
24650
  name: string(),
24542
24651
  createdAt: number(),
@@ -24544,22 +24653,33 @@ var RetrainDatasetVersionSchema = object({
24544
24653
  layout: RetrainExportLayoutSchema,
24545
24654
  completeOnly: boolean(),
24546
24655
  frameCount: number().int(),
24547
- /** sha256 of what the frames taught when the version was frozen. */
24548
24656
  annotationHash: string(),
24549
- /** The export manifest schema the version was cut under. */
24550
24657
  manifestSchema: string(),
24551
24658
  stats: RetrainDatasetStatsSchema
24552
24659
  });
24553
- var CreateRetrainDatasetVersionResultSchema = discriminatedUnion("kind", [object({
24554
- kind: literal("created"),
24555
- version: RetrainDatasetVersionSchema
24660
+ /**
24661
+ * Live training corpus criteria — same shape as `TrainingCorpusSelection` on
24662
+ * the training cap. Resolved here so plan/start and the annotated export share
24663
+ * one definition of "the frames" (`buildRetrainExportPlan`).
24664
+ */
24665
+ var RetrainTrainingCorpusSelectionSchema = object({
24666
+ collectionIds: array(string()).min(1),
24667
+ workState: _enum([
24668
+ "complete",
24669
+ "annotated_or_complete",
24670
+ "any_annotated"
24671
+ ]).default("complete")
24672
+ });
24673
+ var RetrainTrainingCorpusResolveResultSchema = discriminatedUnion("kind", [object({
24674
+ kind: literal("resolved"),
24675
+ frameIds: array(string()).max(2e4).readonly(),
24676
+ stats: RetrainDatasetStatsSchema,
24677
+ annotationHash: string(),
24678
+ layout: RetrainExportLayoutSchema
24556
24679
  }), object({
24557
24680
  kind: literal("refused"),
24558
- reason: _enum([
24559
- "empty-name",
24560
- "duplicate-name",
24561
- "no-frames"
24562
- ])
24681
+ reason: _enum(["unknown-collection", "no-frames"]),
24682
+ detail: string()
24563
24683
  })]);
24564
24684
  /** The outcome of a lifecycle move owned by the retrain page. */
24565
24685
  var RetrainTransitionResultSchema = object({
@@ -25266,6 +25386,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25266
25386
  }), array(RetrainTrackSchema).readonly(), {
25267
25387
  kind: "query",
25268
25388
  auth: "admin"
25389
+ }), method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
25390
+ kind: "query",
25391
+ auth: "admin"
25392
+ }), method(object({}), RetrainCorpusKpiSchema, {
25393
+ kind: "query",
25394
+ auth: "admin"
25269
25395
  }), method(object({ trackId: string() }), RetrainFrameListSchema, {
25270
25396
  kind: "query",
25271
25397
  auth: "admin"
@@ -25361,36 +25487,6 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25361
25487
  kind: "mutation",
25362
25488
  auth: "admin",
25363
25489
  timeoutMs: 12e4
25364
- }), method(object({
25365
- selection: RetrainDatasetSelectionSchema,
25366
- completeOnly: boolean().optional()
25367
- }), RetrainDatasetStatsSchema, {
25368
- kind: "query",
25369
- auth: "admin"
25370
- }), method(object({
25371
- name: string().max(120),
25372
- selection: RetrainDatasetSelectionSchema,
25373
- layout: RetrainExportLayoutSchema,
25374
- completeOnly: boolean()
25375
- }), CreateRetrainDatasetVersionResultSchema, {
25376
- kind: "mutation",
25377
- auth: "admin",
25378
- timeoutMs: 12e4
25379
- }), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
25380
- kind: "query",
25381
- auth: "admin"
25382
- }), method(object({ id: string() }), object({ deleted: boolean() }), {
25383
- kind: "mutation",
25384
- auth: "admin"
25385
- }), method(object({ id: string() }), object({
25386
- found: boolean(),
25387
- annotationHash: string(),
25388
- matches: boolean(),
25389
- missingFrames: number().int()
25390
- }), {
25391
- kind: "query",
25392
- auth: "admin",
25393
- timeoutMs: 12e4
25394
25490
  }), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
25395
25491
  kind: "query",
25396
25492
  auth: "admin"
@@ -25417,6 +25513,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25417
25513
  }), method(object({}), array(RetrainCollectionSchema).readonly(), {
25418
25514
  kind: "query",
25419
25515
  auth: "admin"
25516
+ }), method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
25517
+ kind: "query",
25518
+ auth: "admin",
25519
+ timeoutMs: 6e4
25420
25520
  }), method(object({
25421
25521
  id: string(),
25422
25522
  name: string().max(120)
@@ -26033,11 +26133,14 @@ var HardwareClassIdSchema = _enum([
26033
26133
  "intel-n-series",
26034
26134
  "apple-m-base",
26035
26135
  "apple-m-pro",
26136
+ "amd-phoenix",
26036
26137
  "unknown"
26037
26138
  ]);
26038
26139
  var AcceleratorKindSchema = _enum([
26039
26140
  "intel-npu",
26040
26141
  "intel-igpu",
26142
+ "amd-igpu",
26143
+ "amd-npu",
26041
26144
  "x86-cpu",
26042
26145
  "arm-cpu",
26043
26146
  "apple-ane",
@@ -27967,6 +28070,8 @@ var AgentPipelineSettingsSchema = object({
27967
28070
  * address is wrong (multi-homed host, NAT, custom interface).
27968
28071
  */
27969
28072
  reachableHost: string().optional(),
28073
+ /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
28074
+ color: NodeColorIdSchema.optional(),
27970
28075
  /**
27971
28076
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
27972
28077
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
@@ -28516,8 +28621,9 @@ method(object({
28516
28621
  auth: "admin"
28517
28622
  }), method(object({
28518
28623
  agentNodeId: string(),
28519
- reachableHost: string().nullable()
28520
- }), object({ success: literal(true) }), {
28624
+ reachableHost: string().nullable().optional(),
28625
+ color: NodeColorIdSchema.nullable().optional()
28626
+ }).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), object({ success: literal(true) }), {
28521
28627
  kind: "mutation",
28522
28628
  auth: "admin"
28523
28629
  }), method(object({
@@ -31697,7 +31803,7 @@ var CustomActionInputSchema = object({
31697
31803
  action: string().min(1),
31698
31804
  input: unknown()
31699
31805
  });
31700
- method(_void(), array(AddonListItemSchema).readonly()), method(object({
31806
+ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSchema).readonly()), method(object({
31701
31807
  addonId: string(),
31702
31808
  limit: number().min(1).max(500).default(100),
31703
31809
  level: LogLevelSchema$2.optional()
@@ -36767,7 +36873,13 @@ var TopologyNodeSchema = object({
36767
36873
  })).readonly(),
36768
36874
  processes: array(TopologyProcessSchema).readonly(),
36769
36875
  categories: array(TopologyCategorySchema).readonly(),
36770
- rootPackage: TopologyRootPackageSchema.nullable()
36876
+ rootPackage: TopologyRootPackageSchema.nullable(),
36877
+ /**
36878
+ * How an online AGENT reaches the hub (mesh mTLS Release A): `tls` once it has
36879
+ * completed a mutual-TLS handshake, `clear` otherwise. Absent for the hub,
36880
+ * for offline rows and when the hub cannot tell.
36881
+ */
36882
+ meshTransport: _enum(["tls", "clear"]).optional()
36771
36883
  });
36772
36884
  var CapUsageEdgeSchema = object({
36773
36885
  callerAddonId: string(),
@@ -37180,6 +37292,7 @@ var OsdNamedTemplateSchema = object({
37180
37292
  });
37181
37293
  /** Where a slot's value comes from. */
37182
37294
  var OsdSourceSchema = discriminatedUnion("kind", [
37295
+ object({ kind: literal("none") }),
37183
37296
  object({
37184
37297
  kind: literal("static"),
37185
37298
  text: string().max(64)
@@ -37306,6 +37419,13 @@ method(object({ deviceId: number().int() }), object({
37306
37419
  }), object({ success: literal(true) }), {
37307
37420
  kind: "mutation",
37308
37421
  auth: "admin"
37422
+ }), method(object({
37423
+ deviceId: number().int(),
37424
+ slotId: string().min(1),
37425
+ enabled: boolean()
37426
+ }), object({ success: literal(true) }), {
37427
+ kind: "mutation",
37428
+ auth: "admin"
37309
37429
  }), method(object({
37310
37430
  sourceDeviceId: number().int(),
37311
37431
  targetDeviceId: number().int()
@@ -37737,7 +37857,15 @@ var GpuInfoSchema = object({
37737
37857
  name: string(),
37738
37858
  memoryMB: number().optional()
37739
37859
  });
37740
- var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
37860
+ var NpuInfoSchema = object({
37861
+ type: _enum([
37862
+ "apple-ane",
37863
+ "intel-npu",
37864
+ "amd-xdna"
37865
+ ]),
37866
+ name: string().optional(),
37867
+ generation: _enum(["xdna1", "xdna2"]).optional()
37868
+ });
37741
37869
  var CoralInfoSchema = object({
37742
37870
  type: literal("coral-edgetpu"),
37743
37871
  bus: string().optional()
@@ -42480,9 +42608,11 @@ var zoneRulesCapability = {
42480
42608
  * once is what makes a second provider (RunPod, a local NVIDIA node) a new
42481
42609
  * manifest entry and nothing else.
42482
42610
  *
42483
- * Collection, routed by the `addonId` in every single-row input (the `llm` /
42484
- * `notification-output` posture); `describe` concat-fans across providers.
42485
- * Every method is `admin`: these spend money.
42611
+ * Collection of provider **types** (addons). Each addon owns zero or more
42612
+ * **entries** (credentials + defaults). Concat-fans: `describe`,
42613
+ * `describeTypes`, `listEntries`, `listJobs`. Single-row work is keyed by
42614
+ * `entryId`; callers also pass the owning `addonId` as the collection
42615
+ * selector (broker posture). Every method is `admin`: these spend money.
42486
42616
  *
42487
42617
  * Every cloud object a provider creates is tagged with the orchestrator's
42488
42618
  * `jobKey`, so a retried submit finds the job it already started instead of
@@ -42506,8 +42636,8 @@ var TrainingRegionOptionSchema = object({
42506
42636
  priceMultiplier: number().positive()
42507
42637
  });
42508
42638
  /**
42509
- * The provider's per-account settings, as the orchestrator reads them. They
42510
- * live in the PROVIDER addon's settings (operator decision 2026-10-08: they
42639
+ * The provider's per-entry settings, as the orchestrator reads them. They
42640
+ * live on the PROVIDER addon's entry (operator decision 2026-10-08: they
42511
42641
  * depend on the user's account), never hard-coded in the orchestrator.
42512
42642
  */
42513
42643
  var TrainingProviderDefaultsSchema = object({
@@ -42518,9 +42648,44 @@ var TrainingProviderDefaultsSchema = object({
42518
42648
  /** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
42519
42649
  failedDatasetGraceHours: number().nonnegative()
42520
42650
  });
42651
+ /**
42652
+ * Entry form schema for a provider type — same seam as notification
42653
+ * `TargetKind.configSchema` (`z.unknown()` at the wire; callers tighten to
42654
+ * {@link ConfigUISchema}). Drives `ConfigFormBuilder` on Training → Providers.
42655
+ */
42656
+ var ConfigSchemaPassthrough = unknown();
42657
+ /** One creatable provider type, for the Add-entry dialog. */
42658
+ var TrainingProviderTypeSchema = object({
42659
+ typeId: string(),
42660
+ label: string(),
42661
+ /** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
42662
+ iconAsset: string(),
42663
+ /** Owning `training-provider` addon — collection selector for createEntry. */
42664
+ addonId: string(),
42665
+ /**
42666
+ * Fields for one entry of this type (credentials + defaults). Absent on a
42667
+ * type that only needs a name. Password fields are keychain-backed on the
42668
+ * provider addon (`secretStatePaths`), not D634 plaintext.
42669
+ */
42670
+ configSchema: ConfigSchemaPassthrough.optional()
42671
+ });
42672
+ /** One configured account / workspace under a provider type. */
42673
+ var TrainingProviderEntrySchema = object({
42674
+ entryId: string(),
42675
+ typeId: string(),
42676
+ name: string(),
42677
+ addonId: string(),
42678
+ /** Credentials are present — never the values. */
42679
+ configured: boolean()
42680
+ });
42521
42681
  var TrainingProviderDescriptorSchema = object({
42522
42682
  addonId: string(),
42523
- /** `modal`, `runpod`, `fake`, … */
42683
+ entryId: string(),
42684
+ typeId: string(),
42685
+ /** Operator-chosen entry name. */
42686
+ name: string(),
42687
+ iconAsset: string(),
42688
+ /** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
42524
42689
  kind: string(),
42525
42690
  label: string(),
42526
42691
  gpuTypes: array(TrainingGpuOptionSchema).readonly(),
@@ -42532,7 +42697,30 @@ var TrainingProviderDescriptorSchema = object({
42532
42697
  dataResidencyNote: string(),
42533
42698
  /** Credentials are present — never the values. */
42534
42699
  configured: boolean(),
42535
- defaults: TrainingProviderDefaultsSchema
42700
+ defaults: TrainingProviderDefaultsSchema,
42701
+ /**
42702
+ * Values for {@link TrainingProviderTypeSchema}'s `configSchema` — password
42703
+ * fields are keychain {@link SecretFieldView} or `null` / `''` (create),
42704
+ * never plaintext. Same hydrate contract as settings forms (D789).
42705
+ */
42706
+ formValues: record(string(), unknown()).optional()
42707
+ });
42708
+ /**
42709
+ * Patch one entry's name, credentials and defaults. Pin with owning `{ addonId }`.
42710
+ * An omitted or empty `tokenSecret` means KEEP the stored secret (D787).
42711
+ * `{ $secretClear: true }` clears it.
42712
+ */
42713
+ var TrainingProviderUpdateEntryInputSchema = object({
42714
+ entryId: string().min(1),
42715
+ name: string().min(1),
42716
+ tokenId: string().optional(),
42717
+ tokenSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
42718
+ environment: string().optional(),
42719
+ gpuType: string().optional(),
42720
+ region: string().optional(),
42721
+ costCapUsd: number().nonnegative().optional(),
42722
+ maxRuntimeSec: number().int().positive().optional(),
42723
+ failedDatasetGraceHours: number().nonnegative().optional()
42536
42724
  });
42537
42725
  var TrainingCredentialCheckSchema = object({
42538
42726
  ok: boolean(),
@@ -42584,20 +42772,33 @@ var TrainerSourceRefSchema = object({
42584
42772
  /** A commit sha (never a branch) — the job must be reproducible. */
42585
42773
  revision: string().regex(/^[0-9a-f]{7,64}$/)
42586
42774
  });
42775
+ /** Cloud job identity — route with the owning addon's `addonId` selector. */
42587
42776
  var JobRef = {
42588
- addonId: string(),
42777
+ entryId: string().min(1),
42589
42778
  jobKey: string().uuid()
42590
42779
  };
42591
42780
  var TrainingLogLineSchema = object({
42592
42781
  ts: number(),
42593
42782
  text: string()
42594
42783
  });
42595
- method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({ addonId: string() }), TrainingCredentialCheckSchema, {
42784
+ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }), method(object({
42785
+ typeId: string().min(1),
42786
+ name: string().min(1)
42787
+ }), object({ entryId: string() }), {
42788
+ kind: "mutation",
42789
+ auth: "admin"
42790
+ }), method(object({ entryId: string().min(1) }), object({ ok: literal(true) }), {
42791
+ kind: "mutation",
42792
+ auth: "admin"
42793
+ }), method(TrainingProviderUpdateEntryInputSchema, object({ ok: literal(true) }), {
42794
+ kind: "mutation",
42795
+ auth: "admin"
42796
+ }), method(object({ entryId: string().min(1) }), TrainingCredentialCheckSchema, {
42596
42797
  kind: "mutation",
42597
42798
  auth: "admin",
42598
42799
  timeoutMs: 3e4
42599
42800
  }), method(object({
42600
- addonId: string(),
42801
+ entryId: string().min(1),
42601
42802
  gpuType: string(),
42602
42803
  region: string(),
42603
42804
  datasetBytes: number().int().nonnegative(),
@@ -42663,7 +42864,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
42663
42864
  kind: "mutation",
42664
42865
  auth: "admin",
42665
42866
  timeoutMs: 5 * 6e4
42666
- }), method(object({ addonId: string() }), array(ProviderJobStatusSchema).readonly(), {
42867
+ }), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
42667
42868
  auth: "admin",
42668
42869
  timeoutMs: 2 * 6e4
42669
42870
  });
@@ -42673,20 +42874,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
42673
42874
  *
42674
42875
  * It owns what every provider must agree on, written once:
42675
42876
  *
42676
- * - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
42677
- * live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
42678
- * the export plan) and reaches this store through the five row methods
42679
- * below, so the Retrain page and the export did not change.
42680
42877
  * - **Jobs.** A persisted state machine, a reconcile loop against the
42681
42878
  * provider, a cost guard, a daily orphan sweep and the retention rules.
42682
42879
  * - **The return flow.** Verified artefacts → Model Studio
42683
42880
  * (`custom-model-registry.importModelBundle`) → canary on cameras →
42684
42881
  * rollback. Nothing is ever registered automatically.
42685
42882
  *
42883
+ * Plan/start takes a live {@link TrainingCorpusSelection} (collections +
42884
+ * work-state rule); frame ids are resolved via pipeline-analytics at that
42885
+ * moment and snapshotted on the job. No frozen dataset version.
42886
+ *
42686
42887
  * Every method is `admin`.
42687
42888
  */
42688
- /** A version WITH its frame list — what the export and a job read. */
42689
- var TrainingDatasetVersionRowSchema = RetrainDatasetVersionSchema.omit({ frameCount: true }).extend({ frameIds: array(string()).max(2e4).readonly() });
42889
+ /**
42890
+ * Live corpus criteria for plan/start (design §5.2). Default is complete-only.
42891
+ * Frame ids are resolved at plan/start — never a frozen version id.
42892
+ */
42893
+ var TrainingCorpusSelectionSchema = object({
42894
+ collectionIds: array(string()).min(1),
42895
+ /** Default complete-only for v1 */
42896
+ workState: _enum([
42897
+ "complete",
42898
+ "annotated_or_complete",
42899
+ "any_annotated"
42900
+ ]).default("complete")
42901
+ });
42690
42902
  /** A base model a detector job can fine-tune, and the baseline it is judged against. */
42691
42903
  var TrainingBaseModelSchema = object({
42692
42904
  modelId: string(),
@@ -42704,9 +42916,13 @@ var TrainingPresetSchema = _enum([
42704
42916
  "thorough"
42705
42917
  ]);
42706
42918
  var TrainingJobRequestSchema = object({
42707
- datasetVersionId: string().min(1),
42708
- /** The `training-provider` addon that runs it. */
42709
- addonId: string().min(1),
42919
+ /** Live collection + work-state criteria; resolved at plan/start. */
42920
+ selection: TrainingCorpusSelectionSchema,
42921
+ /**
42922
+ * The provider **entry** that runs it (credentials + defaults).
42923
+ * Resolve to an owning addon via `training-provider.describe` / `listEntries`.
42924
+ */
42925
+ entryId: string().min(1),
42710
42926
  gpuType: string().min(1),
42711
42927
  region: string(),
42712
42928
  baseModelId: string().min(1),
@@ -42765,6 +42981,7 @@ var TrainingJobPlanSchema = object({
42765
42981
  * result lives after the operator acted on it.
42766
42982
  */
42767
42983
  var TrainingJobStateSchema = _enum([
42984
+ "queued",
42768
42985
  "uploading",
42769
42986
  "submitted",
42770
42987
  "starting",
@@ -42818,6 +43035,11 @@ var TrainingJobSchema = object({
42818
43035
  createdAt: number(),
42819
43036
  updatedAt: number(),
42820
43037
  state: TrainingJobStateSchema,
43038
+ /**
43039
+ * Shared by every job enqueued together via `startJobBatch`.
43040
+ * `null` for a lone `startJob`. The engine advances queued siblings by this id.
43041
+ */
43042
+ batchId: string().nullable().default(null),
42821
43043
  stage: TrainingStageSchema.nullable(),
42822
43044
  failure: object({
42823
43045
  reason: TrainingFailureReasonSchema,
@@ -42829,6 +43051,12 @@ var TrainingJobSchema = object({
42829
43051
  maxRuntimeSec: number().int().positive(),
42830
43052
  trainer: TrainerSourceRefSchema,
42831
43053
  datasetLayout: RetrainExportLayoutSchema,
43054
+ /** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
43055
+ frameCount: number().int().nonnegative(),
43056
+ /** Resolved frame ids at start — the archive ships exactly these. */
43057
+ frameIds: array(string()).max(2e4).readonly(),
43058
+ /** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
43059
+ annotationHash: string(),
42832
43060
  dataset: object({
42833
43061
  bytes: number().int(),
42834
43062
  sha256: string(),
@@ -42870,13 +43098,7 @@ var TrainingJobSchema = object({
42870
43098
  canary: TrainingCanarySchema.nullable()
42871
43099
  });
42872
43100
  var IdInput = object({ id: string().min(1) });
42873
- method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
42874
- kind: "mutation",
42875
- auth: "admin"
42876
- }), 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() }), {
42877
- kind: "mutation",
42878
- auth: "admin"
42879
- }), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
43101
+ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
42880
43102
  auth: "admin",
42881
43103
  timeoutMs: 6e4
42882
43104
  }), method(TrainingJobRequestSchema.extend({
@@ -42895,6 +43117,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
42895
43117
  kind: "mutation",
42896
43118
  auth: "admin",
42897
43119
  timeoutMs: 12e4
43120
+ }), method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
43121
+ baseModelIds: array(string().min(1)).min(1),
43122
+ name: string().min(1).max(120),
43123
+ maxCostUsd: number().positive(),
43124
+ maxRuntimeSec: number().int().positive(),
43125
+ idempotencyKey: string().min(8).max(80)
43126
+ }), discriminatedUnion("kind", [object({
43127
+ kind: literal("started"),
43128
+ batchId: string(),
43129
+ jobs: array(TrainingJobSchema).min(1).readonly()
43130
+ }), object({
43131
+ kind: literal("refused"),
43132
+ reason: TrainingRefusalReasonSchema,
43133
+ detail: string()
43134
+ })]), {
43135
+ kind: "mutation",
43136
+ auth: "admin",
43137
+ timeoutMs: 12e4
42898
43138
  }), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
42899
43139
  kind: "mutation",
42900
43140
  auth: "admin",
@@ -48453,6 +48693,36 @@ Object.freeze({
48453
48693
  addonId: null,
48454
48694
  access: "view"
48455
48695
  },
48696
+ "oidcConnections.connectionFormSchema": {
48697
+ capName: "oidc-connections",
48698
+ capScope: "system",
48699
+ addonId: null,
48700
+ access: "view"
48701
+ },
48702
+ "oidcConnections.createConnection": {
48703
+ capName: "oidc-connections",
48704
+ capScope: "system",
48705
+ addonId: null,
48706
+ access: "create"
48707
+ },
48708
+ "oidcConnections.deleteConnection": {
48709
+ capName: "oidc-connections",
48710
+ capScope: "system",
48711
+ addonId: null,
48712
+ access: "delete"
48713
+ },
48714
+ "oidcConnections.listConnections": {
48715
+ capName: "oidc-connections",
48716
+ capScope: "system",
48717
+ addonId: null,
48718
+ access: "view"
48719
+ },
48720
+ "oidcConnections.updateConnection": {
48721
+ capName: "oidc-connections",
48722
+ capScope: "system",
48723
+ addonId: null,
48724
+ access: "create"
48725
+ },
48456
48726
  "osd.getStatus": {
48457
48727
  capName: "osd",
48458
48728
  capScope: "device",
@@ -48525,6 +48795,12 @@ Object.freeze({
48525
48795
  addonId: null,
48526
48796
  access: "create"
48527
48797
  },
48798
+ "osdManager.setSlotCameraEnabled": {
48799
+ capName: "osd-manager",
48800
+ capScope: "system",
48801
+ addonId: null,
48802
+ access: "create"
48803
+ },
48528
48804
  "osdManager.upsertTemplate": {
48529
48805
  capName: "osd-manager",
48530
48806
  capScope: "system",
@@ -48663,12 +48939,6 @@ Object.freeze({
48663
48939
  addonId: null,
48664
48940
  access: "create"
48665
48941
  },
48666
- "pipelineAnalytics.createRetrainDatasetVersion": {
48667
- capName: "pipeline-analytics",
48668
- capScope: "device",
48669
- addonId: null,
48670
- access: "create"
48671
- },
48672
48942
  "pipelineAnalytics.deleteDeviceEvents": {
48673
48943
  capName: "pipeline-analytics",
48674
48944
  capScope: "device",
@@ -48681,12 +48951,6 @@ Object.freeze({
48681
48951
  addonId: null,
48682
48952
  access: "delete"
48683
48953
  },
48684
- "pipelineAnalytics.deleteRetrainDatasetVersion": {
48685
- capName: "pipeline-analytics",
48686
- capScope: "device",
48687
- addonId: null,
48688
- access: "delete"
48689
- },
48690
48954
  "pipelineAnalytics.deleteTracks": {
48691
48955
  capName: "pipeline-analytics",
48692
48956
  capScope: "device",
@@ -48789,6 +49053,12 @@ Object.freeze({
48789
49053
  addonId: null,
48790
49054
  access: "view"
48791
49055
  },
49056
+ "pipelineAnalytics.getRetrainCorpusKpi": {
49057
+ capName: "pipeline-analytics",
49058
+ capScope: "device",
49059
+ addonId: null,
49060
+ access: "view"
49061
+ },
48792
49062
  "pipelineAnalytics.getRetrainExportUrl": {
48793
49063
  capName: "pipeline-analytics",
48794
49064
  capScope: "device",
@@ -48909,7 +49179,7 @@ Object.freeze({
48909
49179
  addonId: null,
48910
49180
  access: "view"
48911
49181
  },
48912
- "pipelineAnalytics.listRetrainDatasetVersions": {
49182
+ "pipelineAnalytics.listRetrainCorpusPage": {
48913
49183
  capName: "pipeline-analytics",
48914
49184
  capScope: "device",
48915
49185
  addonId: null,
@@ -48963,12 +49233,6 @@ Object.freeze({
48963
49233
  addonId: null,
48964
49234
  access: "create"
48965
49235
  },
48966
- "pipelineAnalytics.previewRetrainDataset": {
48967
- capName: "pipeline-analytics",
48968
- capScope: "device",
48969
- addonId: null,
48970
- access: "view"
48971
- },
48972
49236
  "pipelineAnalytics.proposeRetrainAnnotations": {
48973
49237
  capName: "pipeline-analytics",
48974
49238
  capScope: "device",
@@ -49047,6 +49311,12 @@ Object.freeze({
49047
49311
  addonId: null,
49048
49312
  access: "create"
49049
49313
  },
49314
+ "pipelineAnalytics.resolveRetrainTrainingCorpus": {
49315
+ capName: "pipeline-analytics",
49316
+ capScope: "device",
49317
+ addonId: null,
49318
+ access: "view"
49319
+ },
49050
49320
  "pipelineAnalytics.restageRetrainTrack": {
49051
49321
  capName: "pipeline-analytics",
49052
49322
  capScope: "device",
@@ -49107,12 +49377,6 @@ Object.freeze({
49107
49377
  addonId: null,
49108
49378
  access: "create"
49109
49379
  },
49110
- "pipelineAnalytics.verifyRetrainDatasetVersion": {
49111
- capName: "pipeline-analytics",
49112
- capScope: "device",
49113
- addonId: null,
49114
- access: "view"
49115
- },
49116
49380
  "pipelineAnalytics.wipeAllAnalytics": {
49117
49381
  capName: "pipeline-analytics",
49118
49382
  capScope: "device",
@@ -51507,18 +51771,6 @@ Object.freeze({
51507
51771
  addonId: null,
51508
51772
  access: "create"
51509
51773
  },
51510
- "training.findDatasetVersionIdByName": {
51511
- capName: "training",
51512
- capScope: "system",
51513
- addonId: null,
51514
- access: "view"
51515
- },
51516
- "training.getDatasetVersion": {
51517
- capName: "training",
51518
- capScope: "system",
51519
- addonId: null,
51520
- access: "view"
51521
- },
51522
51774
  "training.getJob": {
51523
51775
  capName: "training",
51524
51776
  capScope: "system",
@@ -51537,12 +51789,6 @@ Object.freeze({
51537
51789
  addonId: null,
51538
51790
  access: "view"
51539
51791
  },
51540
- "training.listDatasetVersions": {
51541
- capName: "training",
51542
- capScope: "system",
51543
- addonId: null,
51544
- access: "view"
51545
- },
51546
51792
  "training.listJobs": {
51547
51793
  capName: "training",
51548
51794
  capScope: "system",
@@ -51555,54 +51801,66 @@ Object.freeze({
51555
51801
  addonId: null,
51556
51802
  access: "view"
51557
51803
  },
51558
- "training.putDatasetVersion": {
51804
+ "training.registerResult": {
51559
51805
  capName: "training",
51560
51806
  capScope: "system",
51561
51807
  addonId: null,
51562
51808
  access: "create"
51563
51809
  },
51564
- "training.registerResult": {
51810
+ "training.rollbackCanary": {
51565
51811
  capName: "training",
51566
51812
  capScope: "system",
51567
51813
  addonId: null,
51568
51814
  access: "create"
51569
51815
  },
51570
- "training.removeDatasetVersion": {
51816
+ "training.startJob": {
51571
51817
  capName: "training",
51572
51818
  capScope: "system",
51573
51819
  addonId: null,
51574
- access: "delete"
51820
+ access: "create"
51575
51821
  },
51576
- "training.rollbackCanary": {
51822
+ "training.startJobBatch": {
51577
51823
  capName: "training",
51578
51824
  capScope: "system",
51579
51825
  addonId: null,
51580
51826
  access: "create"
51581
51827
  },
51582
- "training.startJob": {
51583
- capName: "training",
51828
+ "trainingProvider.cancelJob": {
51829
+ capName: "training-provider",
51584
51830
  capScope: "system",
51585
51831
  addonId: null,
51586
51832
  access: "create"
51587
51833
  },
51588
- "trainingProvider.cancelJob": {
51834
+ "trainingProvider.cleanupJob": {
51589
51835
  capName: "training-provider",
51590
51836
  capScope: "system",
51591
51837
  addonId: null,
51592
51838
  access: "create"
51593
51839
  },
51594
- "trainingProvider.cleanupJob": {
51840
+ "trainingProvider.createEntry": {
51595
51841
  capName: "training-provider",
51596
51842
  capScope: "system",
51597
51843
  addonId: null,
51598
51844
  access: "create"
51599
51845
  },
51846
+ "trainingProvider.deleteEntry": {
51847
+ capName: "training-provider",
51848
+ capScope: "system",
51849
+ addonId: null,
51850
+ access: "delete"
51851
+ },
51600
51852
  "trainingProvider.describe": {
51601
51853
  capName: "training-provider",
51602
51854
  capScope: "system",
51603
51855
  addonId: null,
51604
51856
  access: "view"
51605
51857
  },
51858
+ "trainingProvider.describeTypes": {
51859
+ capName: "training-provider",
51860
+ capScope: "system",
51861
+ addonId: null,
51862
+ access: "view"
51863
+ },
51606
51864
  "trainingProvider.estimateJob": {
51607
51865
  capName: "training-provider",
51608
51866
  capScope: "system",
@@ -51615,6 +51873,12 @@ Object.freeze({
51615
51873
  addonId: null,
51616
51874
  access: "view"
51617
51875
  },
51876
+ "trainingProvider.listEntries": {
51877
+ capName: "training-provider",
51878
+ capScope: "system",
51879
+ addonId: null,
51880
+ access: "view"
51881
+ },
51618
51882
  "trainingProvider.listJobEvents": {
51619
51883
  capName: "training-provider",
51620
51884
  capScope: "system",
@@ -51645,6 +51909,12 @@ Object.freeze({
51645
51909
  addonId: null,
51646
51910
  access: "create"
51647
51911
  },
51912
+ "trainingProvider.updateEntry": {
51913
+ capName: "training-provider",
51914
+ capScope: "system",
51915
+ addonId: null,
51916
+ access: "create"
51917
+ },
51648
51918
  "trainingProvider.uploadDataset": {
51649
51919
  capName: "training-provider",
51650
51920
  capScope: "system",
@@ -54851,6 +55121,11 @@ Object.freeze({
54851
55121
  form: "single",
54852
55122
  optional: false
54853
55123
  }],
55124
+ "osdManager.setSlotCameraEnabled": [{
55125
+ name: "deviceId",
55126
+ form: "single",
55127
+ optional: false
55128
+ }],
54854
55129
  "petFeeder.callPet": [{
54855
55130
  name: "deviceId",
54856
55131
  form: "single",
@@ -55071,6 +55346,11 @@ Object.freeze({
55071
55346
  form: "array",
55072
55347
  optional: false
55073
55348
  }],
55349
+ "pipelineAnalytics.listRetrainCorpusPage": [{
55350
+ name: "deviceIds",
55351
+ form: "array",
55352
+ optional: true
55353
+ }],
55074
55354
  "pipelineAnalytics.listRetrainStaging": [{
55075
55355
  name: "deviceIds",
55076
55356
  form: "array",
@@ -56180,6 +56460,7 @@ Object.freeze({
56180
56460
  });
56181
56461
  Object.freeze({
56182
56462
  "broker": "broker",
56463
+ "calendar-source": "calendar",
56183
56464
  "device-export": "device-export",
56184
56465
  "llm": "ai",
56185
56466
  "mesh-network": "mesh",
@@ -56665,6 +56946,8 @@ var STATE_SUMMARY_VARS = [
56665
56946
  [...RULE_TEXT],
56666
56947
  [...RULE_TEXT],
56667
56948
  [...RULE_TEXT],
56949
+ [...RULE_TEXT],
56950
+ [...RULE_TEXT],
56668
56951
  ([...RULE_TEXT], [...UPDATES]),
56669
56952
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
56670
56953
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),