@camstack/addon-smtp-nodemailer 1.2.121 → 1.2.122

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.
@@ -5414,7 +5414,7 @@ var ZodIssueCode = {
5414
5414
  var ZodFirstPartyTypeKind;
5415
5415
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5416
5416
  //#endregion
5417
- //#region ../types/dist/sleep-r3RWkGVx.mjs
5417
+ //#region ../types/dist/sleep-DwAQ9sqX.mjs
5418
5418
  /**
5419
5419
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5420
5420
  * window to float samples (D455).
@@ -9343,6 +9343,16 @@ var CompositionSchema = object({
9343
9343
  seen.add(feature.cap);
9344
9344
  });
9345
9345
  });
9346
+ var NodeColorIdSchema = _enum([
9347
+ "node-a",
9348
+ "node-b",
9349
+ "node-c",
9350
+ "node-d",
9351
+ "node-e",
9352
+ "node-f",
9353
+ "node-g",
9354
+ "node-h"
9355
+ ]);
9346
9356
  new Set([
9347
9357
  "track",
9348
9358
  "face",
@@ -18082,14 +18092,14 @@ var LlmProfileSchema = object({
18082
18092
  /** ConfigUISchema tree passed through untyped on the wire (the
18083
18093
  * notification-output `ConfigSchemaPassthrough` precedent at
18084
18094
  * notification-output.cap.ts:151); the exported TS type re-tightens it. */
18085
- var ConfigSchemaPassthrough$1 = unknown();
18095
+ var ConfigSchemaPassthrough$3 = unknown();
18086
18096
  var LlmProfileKindDescriptorSchema = object({
18087
18097
  kind: LlmProfileKindSchema,
18088
18098
  label: string(),
18089
18099
  icon: string(),
18090
18100
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
18091
18101
  addonId: string(),
18092
- configSchema: ConfigSchemaPassthrough$1
18102
+ configSchema: ConfigSchemaPassthrough$3
18093
18103
  });
18094
18104
  var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
18095
18105
  var LlmDefaultSchema = object({
@@ -19210,7 +19220,7 @@ var TargetKindCapsSchema = object({
19210
19220
  * the union is large and not meant for runtime validation here; the exported
19211
19221
  * `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
19212
19222
  */
19213
- var ConfigSchemaPassthrough = unknown();
19223
+ var ConfigSchemaPassthrough$2 = unknown();
19214
19224
  var TargetKindSchema = object({
19215
19225
  kind: string(),
19216
19226
  label: string(),
@@ -19247,7 +19257,7 @@ var TargetKindSchema = object({
19247
19257
  * its raster path, which is the safe default for an unknown image.
19248
19258
  */
19249
19259
  iconMediaType: string().optional(),
19250
- configSchema: ConfigSchemaPassthrough,
19260
+ configSchema: ConfigSchemaPassthrough$2,
19251
19261
  /**
19252
19262
  * The config keys that decide WHERE this kind's secrets are sent (server,
19253
19263
  * base URL, instance, chat, recipient). A save that changes any of them
@@ -22546,6 +22556,61 @@ var OauthIntegrationDescriptorSchema = object({
22546
22556
  });
22547
22557
  method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
22548
22558
  /**
22559
+ * `oidc-connections` — CRUD for IdP rows under `auth-oidc` (D828 sibling).
22560
+ *
22561
+ * One hub-only singleton (`auth-oidc`). The Settings UI is a DataTable +
22562
+ * ItemFormDialog; there is no `editable-array` in `globalSettingsSchema`.
22563
+ * Operator-chosen `id` is the URL slug (`/addon/auth-oidc/<id>/…`) and is
22564
+ * immutable after create.
22565
+ */
22566
+ var ConfigSchemaPassthrough$1 = unknown();
22567
+ var OidcConnectionSchema = object({
22568
+ id: string().min(1),
22569
+ displayName: string(),
22570
+ icon: string(),
22571
+ issuerUrl: string(),
22572
+ clientId: string(),
22573
+ /** Client id + secret present — never the secret value. */
22574
+ configured: boolean(),
22575
+ /**
22576
+ * Values for the connection form schema. `clientSecret` is a keychain
22577
+ * {@link SecretFieldView} or `null` / `''`, never plaintext (D789).
22578
+ */
22579
+ formValues: record(string(), unknown()).optional()
22580
+ });
22581
+ /**
22582
+ * Patch one connection. Omitted or empty `clientSecret` keeps the stored
22583
+ * secret (D787). `{ $secretClear: true }` clears it. `id` is never renamed.
22584
+ */
22585
+ var OidcConnectionUpdateInputSchema = object({
22586
+ id: string().min(1),
22587
+ displayName: string().min(1),
22588
+ icon: string().optional(),
22589
+ issuerUrl: string().optional(),
22590
+ clientId: string().optional(),
22591
+ clientSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
22592
+ redirectUri: string().optional(),
22593
+ scopes: string().optional(),
22594
+ usernameClaim: _enum([
22595
+ "preferred_username",
22596
+ "email",
22597
+ "sub"
22598
+ ]).optional()
22599
+ });
22600
+ method(object({}), ConfigSchemaPassthrough$1, { auth: "admin" }), method(object({}), array(OidcConnectionSchema).readonly(), { auth: "admin" }), method(object({
22601
+ id: string().min(1).regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "id must be a lowercase slug"),
22602
+ displayName: string().min(1)
22603
+ }), object({ id: string() }), {
22604
+ kind: "mutation",
22605
+ auth: "admin"
22606
+ }), method(OidcConnectionUpdateInputSchema, object({ ok: literal(true) }), {
22607
+ kind: "mutation",
22608
+ auth: "admin"
22609
+ }), method(object({ id: string().min(1) }), object({ ok: literal(true) }), {
22610
+ kind: "mutation",
22611
+ auth: "admin"
22612
+ });
22613
+ /**
22549
22614
  * What started a camera's onboard motion (D672). `camera` is the camera's own
22550
22615
  * firmware; `sensor` is a device the operator ATTACHED to it. Absent on the
22551
22616
  * wire means the camera: only the camera-sensors bridge ever says `sensor`.
@@ -23902,24 +23967,69 @@ var RetrainFrameListSchema = object({
23902
23967
  /** What the page pre-selects — the native key frame when one survives. */
23903
23968
  autoPickMediaId: number().int().optional()
23904
23969
  });
23970
+ /** Exclusive partition of a corpus copy's annotation progress (design §4.2). */
23971
+ var RetrainFrameWorkStateSchema = _enum([
23972
+ "unannotated",
23973
+ "annotated",
23974
+ "complete"
23975
+ ]);
23976
+ /**
23977
+ * Filters for paginated corpus list, KPI, and matching export (design §4.4).
23978
+ * Every narrowing field is ANDed; omitted fields impose no constraint.
23979
+ */
23980
+ var RetrainCorpusFilterSchema = object({
23981
+ workState: RetrainFrameWorkStateSchema.optional(),
23982
+ deviceIds: array(number()).max(500).optional(),
23983
+ /** When set, only frames in this named collection. */
23984
+ collectionId: string().optional(),
23985
+ /** Frames that carry at least one saved annotation in one of these classes. */
23986
+ classes: array(RetrainMacroClassSchema).optional(),
23987
+ page: number().int().positive().default(1),
23988
+ pageSize: number().int().positive().max(100).default(50)
23989
+ });
23990
+ var RetrainCorpusPageSchema = object({
23991
+ frames: array(RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema })).readonly(),
23992
+ total: number().int().nonnegative(),
23993
+ page: number().int().positive(),
23994
+ pageSize: number().int().positive()
23995
+ });
23996
+ var RetrainCorpusKpiCameraRowSchema = object({
23997
+ deviceId: number(),
23998
+ unannotated: number().int().nonnegative(),
23999
+ annotated: number().int().nonnegative(),
24000
+ complete: number().int().nonnegative(),
24001
+ /** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
24002
+ * `null` when the corpus is empty (no ratio). */
24003
+ pctOfCorpus: number().min(0).max(1).nullable()
24004
+ });
24005
+ var RetrainCorpusKpiSchema = object({
24006
+ total: number().int().nonnegative(),
24007
+ unannotated: number().int().nonnegative(),
24008
+ annotated: number().int().nonnegative(),
24009
+ complete: number().int().nonnegative(),
24010
+ cameras: array(RetrainCorpusKpiCameraRowSchema).readonly()
24011
+ });
23905
24012
  /**
23906
24013
  * Which frames an annotated export carries. Every field narrows; an empty
23907
- * filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
23908
- * list owned by whoever trains (the training orchestrator), so `frameIds` is
23909
- * the primitive a version export uses; `batchId` re-selects what an earlier
23910
- * export carried (`exportedInBatch`).
24014
+ * filter is every annotated copy. `frameIds` is the primitive a job or
24015
+ * download uses; `batchId` re-selects what an earlier export carried
24016
+ * (`exportedInBatch`). Frozen dataset versions were removed — live selection
24017
+ * resolves to `frameIds` at plan/start.
23911
24018
  */
23912
24019
  var RetrainExportFilterSchema = object({
23913
24020
  deviceIds: array(number()).optional(),
23914
24021
  frameIds: array(string()).max(2e4).optional(),
23915
24022
  /** Only frames in at least one of these named collections. */
23916
24023
  collectionIds: array(string()).max(200).optional(),
23917
- /** Exactly the frames of this dataset version (and its completeOnly). An
23918
- * unknown id selects nothing. */
23919
- datasetVersionId: string().optional(),
24024
+ /** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
24025
+ collectionId: string().optional(),
23920
24026
  batchId: string().optional(),
23921
24027
  /** Only frames the operator marked complete (all subjects boxed). */
23922
- completeOnly: boolean().optional()
24028
+ completeOnly: boolean().optional(),
24029
+ /** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
24030
+ workState: RetrainFrameWorkStateSchema.optional(),
24031
+ /** Frames with at least one saved annotation in one of these classes. */
24032
+ classes: array(RetrainMacroClassSchema).optional()
23923
24033
  });
23924
24034
  /**
23925
24035
  * `frames`: the full frame copies, boxes in `annotations.json`.
@@ -24119,8 +24229,7 @@ var RetrainDatasetStatsSchema = object({
24119
24229
  completeFrames: number().int()
24120
24230
  })).readonly()
24121
24231
  });
24122
- /** An immutable dataset version, without its frame list. */
24123
- var RetrainDatasetVersionSchema = object({
24232
+ object({
24124
24233
  id: string(),
24125
24234
  name: string(),
24126
24235
  createdAt: number(),
@@ -24128,22 +24237,33 @@ var RetrainDatasetVersionSchema = object({
24128
24237
  layout: RetrainExportLayoutSchema,
24129
24238
  completeOnly: boolean(),
24130
24239
  frameCount: number().int(),
24131
- /** sha256 of what the frames taught when the version was frozen. */
24132
24240
  annotationHash: string(),
24133
- /** The export manifest schema the version was cut under. */
24134
24241
  manifestSchema: string(),
24135
24242
  stats: RetrainDatasetStatsSchema
24136
24243
  });
24137
- var CreateRetrainDatasetVersionResultSchema = discriminatedUnion("kind", [object({
24138
- kind: literal("created"),
24139
- version: RetrainDatasetVersionSchema
24244
+ /**
24245
+ * Live training corpus criteria — same shape as `TrainingCorpusSelection` on
24246
+ * the training cap. Resolved here so plan/start and the annotated export share
24247
+ * one definition of "the frames" (`buildRetrainExportPlan`).
24248
+ */
24249
+ var RetrainTrainingCorpusSelectionSchema = object({
24250
+ collectionIds: array(string()).min(1),
24251
+ workState: _enum([
24252
+ "complete",
24253
+ "annotated_or_complete",
24254
+ "any_annotated"
24255
+ ]).default("complete")
24256
+ });
24257
+ var RetrainTrainingCorpusResolveResultSchema = discriminatedUnion("kind", [object({
24258
+ kind: literal("resolved"),
24259
+ frameIds: array(string()).max(2e4).readonly(),
24260
+ stats: RetrainDatasetStatsSchema,
24261
+ annotationHash: string(),
24262
+ layout: RetrainExportLayoutSchema
24140
24263
  }), object({
24141
24264
  kind: literal("refused"),
24142
- reason: _enum([
24143
- "empty-name",
24144
- "duplicate-name",
24145
- "no-frames"
24146
- ])
24265
+ reason: _enum(["unknown-collection", "no-frames"]),
24266
+ detail: string()
24147
24267
  })]);
24148
24268
  /** The outcome of a lifecycle move owned by the retrain page. */
24149
24269
  var RetrainTransitionResultSchema = object({
@@ -24850,6 +24970,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
24850
24970
  }), array(RetrainTrackSchema).readonly(), {
24851
24971
  kind: "query",
24852
24972
  auth: "admin"
24973
+ }), method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
24974
+ kind: "query",
24975
+ auth: "admin"
24976
+ }), method(object({}), RetrainCorpusKpiSchema, {
24977
+ kind: "query",
24978
+ auth: "admin"
24853
24979
  }), method(object({ trackId: string() }), RetrainFrameListSchema, {
24854
24980
  kind: "query",
24855
24981
  auth: "admin"
@@ -24945,36 +25071,6 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
24945
25071
  kind: "mutation",
24946
25072
  auth: "admin",
24947
25073
  timeoutMs: 12e4
24948
- }), method(object({
24949
- selection: RetrainDatasetSelectionSchema,
24950
- completeOnly: boolean().optional()
24951
- }), RetrainDatasetStatsSchema, {
24952
- kind: "query",
24953
- auth: "admin"
24954
- }), method(object({
24955
- name: string().max(120),
24956
- selection: RetrainDatasetSelectionSchema,
24957
- layout: RetrainExportLayoutSchema,
24958
- completeOnly: boolean()
24959
- }), CreateRetrainDatasetVersionResultSchema, {
24960
- kind: "mutation",
24961
- auth: "admin",
24962
- timeoutMs: 12e4
24963
- }), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
24964
- kind: "query",
24965
- auth: "admin"
24966
- }), method(object({ id: string() }), object({ deleted: boolean() }), {
24967
- kind: "mutation",
24968
- auth: "admin"
24969
- }), method(object({ id: string() }), object({
24970
- found: boolean(),
24971
- annotationHash: string(),
24972
- matches: boolean(),
24973
- missingFrames: number().int()
24974
- }), {
24975
- kind: "query",
24976
- auth: "admin",
24977
- timeoutMs: 12e4
24978
25074
  }), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
24979
25075
  kind: "query",
24980
25076
  auth: "admin"
@@ -25001,6 +25097,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25001
25097
  }), method(object({}), array(RetrainCollectionSchema).readonly(), {
25002
25098
  kind: "query",
25003
25099
  auth: "admin"
25100
+ }), method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
25101
+ kind: "query",
25102
+ auth: "admin",
25103
+ timeoutMs: 6e4
25004
25104
  }), method(object({
25005
25105
  id: string(),
25006
25106
  name: string().max(120)
@@ -25617,11 +25717,14 @@ var HardwareClassIdSchema = _enum([
25617
25717
  "intel-n-series",
25618
25718
  "apple-m-base",
25619
25719
  "apple-m-pro",
25720
+ "amd-phoenix",
25620
25721
  "unknown"
25621
25722
  ]);
25622
25723
  var AcceleratorKindSchema = _enum([
25623
25724
  "intel-npu",
25624
25725
  "intel-igpu",
25726
+ "amd-igpu",
25727
+ "amd-npu",
25625
25728
  "x86-cpu",
25626
25729
  "arm-cpu",
25627
25730
  "apple-ane",
@@ -27511,6 +27614,8 @@ var AgentPipelineSettingsSchema = object({
27511
27614
  * address is wrong (multi-homed host, NAT, custom interface).
27512
27615
  */
27513
27616
  reachableHost: string().optional(),
27617
+ /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
27618
+ color: NodeColorIdSchema.optional(),
27514
27619
  /**
27515
27620
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
27516
27621
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
@@ -28060,8 +28165,9 @@ method(object({
28060
28165
  auth: "admin"
28061
28166
  }), method(object({
28062
28167
  agentNodeId: string(),
28063
- reachableHost: string().nullable()
28064
- }), object({ success: literal(true) }), {
28168
+ reachableHost: string().nullable().optional(),
28169
+ color: NodeColorIdSchema.nullable().optional()
28170
+ }).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), object({ success: literal(true) }), {
28065
28171
  kind: "mutation",
28066
28172
  auth: "admin"
28067
28173
  }), method(object({
@@ -31121,7 +31227,7 @@ var CustomActionInputSchema = object({
31121
31227
  action: string().min(1),
31122
31228
  input: unknown()
31123
31229
  });
31124
- method(_void(), array(AddonListItemSchema).readonly()), method(object({
31230
+ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSchema).readonly()), method(object({
31125
31231
  addonId: string(),
31126
31232
  limit: number().min(1).max(500).default(100),
31127
31233
  level: LogLevelSchema$2.optional()
@@ -35014,6 +35120,7 @@ var OsdNamedTemplateSchema = object({
35014
35120
  });
35015
35121
  /** Where a slot's value comes from. */
35016
35122
  var OsdSourceSchema = discriminatedUnion("kind", [
35123
+ object({ kind: literal("none") }),
35017
35124
  object({
35018
35125
  kind: literal("static"),
35019
35126
  text: string().max(64)
@@ -35140,6 +35247,13 @@ method(object({ deviceId: number().int() }), object({
35140
35247
  }), object({ success: literal(true) }), {
35141
35248
  kind: "mutation",
35142
35249
  auth: "admin"
35250
+ }), method(object({
35251
+ deviceId: number().int(),
35252
+ slotId: string().min(1),
35253
+ enabled: boolean()
35254
+ }), object({ success: literal(true) }), {
35255
+ kind: "mutation",
35256
+ auth: "admin"
35143
35257
  }), method(object({
35144
35258
  sourceDeviceId: number().int(),
35145
35259
  targetDeviceId: number().int()
@@ -35520,7 +35634,15 @@ var GpuInfoSchema = object({
35520
35634
  name: string(),
35521
35635
  memoryMB: number().optional()
35522
35636
  });
35523
- var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
35637
+ var NpuInfoSchema = object({
35638
+ type: _enum([
35639
+ "apple-ane",
35640
+ "intel-npu",
35641
+ "amd-xdna"
35642
+ ]),
35643
+ name: string().optional(),
35644
+ generation: _enum(["xdna1", "xdna2"]).optional()
35645
+ });
35524
35646
  var CoralInfoSchema = object({
35525
35647
  type: literal("coral-edgetpu"),
35526
35648
  bus: string().optional()
@@ -39282,9 +39404,11 @@ DeviceType.Camera, method(object({
39282
39404
  * once is what makes a second provider (RunPod, a local NVIDIA node) a new
39283
39405
  * manifest entry and nothing else.
39284
39406
  *
39285
- * Collection, routed by the `addonId` in every single-row input (the `llm` /
39286
- * `notification-output` posture); `describe` concat-fans across providers.
39287
- * Every method is `admin`: these spend money.
39407
+ * Collection of provider **types** (addons). Each addon owns zero or more
39408
+ * **entries** (credentials + defaults). Concat-fans: `describe`,
39409
+ * `describeTypes`, `listEntries`, `listJobs`. Single-row work is keyed by
39410
+ * `entryId`; callers also pass the owning `addonId` as the collection
39411
+ * selector (broker posture). Every method is `admin`: these spend money.
39288
39412
  *
39289
39413
  * Every cloud object a provider creates is tagged with the orchestrator's
39290
39414
  * `jobKey`, so a retried submit finds the job it already started instead of
@@ -39308,8 +39432,8 @@ var TrainingRegionOptionSchema = object({
39308
39432
  priceMultiplier: number().positive()
39309
39433
  });
39310
39434
  /**
39311
- * The provider's per-account settings, as the orchestrator reads them. They
39312
- * live in the PROVIDER addon's settings (operator decision 2026-10-08: they
39435
+ * The provider's per-entry settings, as the orchestrator reads them. They
39436
+ * live on the PROVIDER addon's entry (operator decision 2026-10-08: they
39313
39437
  * depend on the user's account), never hard-coded in the orchestrator.
39314
39438
  */
39315
39439
  var TrainingProviderDefaultsSchema = object({
@@ -39320,9 +39444,44 @@ var TrainingProviderDefaultsSchema = object({
39320
39444
  /** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
39321
39445
  failedDatasetGraceHours: number().nonnegative()
39322
39446
  });
39447
+ /**
39448
+ * Entry form schema for a provider type — same seam as notification
39449
+ * `TargetKind.configSchema` (`z.unknown()` at the wire; callers tighten to
39450
+ * {@link ConfigUISchema}). Drives `ConfigFormBuilder` on Training → Providers.
39451
+ */
39452
+ var ConfigSchemaPassthrough = unknown();
39453
+ /** One creatable provider type, for the Add-entry dialog. */
39454
+ var TrainingProviderTypeSchema = object({
39455
+ typeId: string(),
39456
+ label: string(),
39457
+ /** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
39458
+ iconAsset: string(),
39459
+ /** Owning `training-provider` addon — collection selector for createEntry. */
39460
+ addonId: string(),
39461
+ /**
39462
+ * Fields for one entry of this type (credentials + defaults). Absent on a
39463
+ * type that only needs a name. Password fields are keychain-backed on the
39464
+ * provider addon (`secretStatePaths`), not D634 plaintext.
39465
+ */
39466
+ configSchema: ConfigSchemaPassthrough.optional()
39467
+ });
39468
+ /** One configured account / workspace under a provider type. */
39469
+ var TrainingProviderEntrySchema = object({
39470
+ entryId: string(),
39471
+ typeId: string(),
39472
+ name: string(),
39473
+ addonId: string(),
39474
+ /** Credentials are present — never the values. */
39475
+ configured: boolean()
39476
+ });
39323
39477
  var TrainingProviderDescriptorSchema = object({
39324
39478
  addonId: string(),
39325
- /** `modal`, `runpod`, `fake`, … */
39479
+ entryId: string(),
39480
+ typeId: string(),
39481
+ /** Operator-chosen entry name. */
39482
+ name: string(),
39483
+ iconAsset: string(),
39484
+ /** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
39326
39485
  kind: string(),
39327
39486
  label: string(),
39328
39487
  gpuTypes: array(TrainingGpuOptionSchema).readonly(),
@@ -39334,7 +39493,30 @@ var TrainingProviderDescriptorSchema = object({
39334
39493
  dataResidencyNote: string(),
39335
39494
  /** Credentials are present — never the values. */
39336
39495
  configured: boolean(),
39337
- defaults: TrainingProviderDefaultsSchema
39496
+ defaults: TrainingProviderDefaultsSchema,
39497
+ /**
39498
+ * Values for {@link TrainingProviderTypeSchema}'s `configSchema` — password
39499
+ * fields are keychain {@link SecretFieldView} or `null` / `''` (create),
39500
+ * never plaintext. Same hydrate contract as settings forms (D789).
39501
+ */
39502
+ formValues: record(string(), unknown()).optional()
39503
+ });
39504
+ /**
39505
+ * Patch one entry's name, credentials and defaults. Pin with owning `{ addonId }`.
39506
+ * An omitted or empty `tokenSecret` means KEEP the stored secret (D787).
39507
+ * `{ $secretClear: true }` clears it.
39508
+ */
39509
+ var TrainingProviderUpdateEntryInputSchema = object({
39510
+ entryId: string().min(1),
39511
+ name: string().min(1),
39512
+ tokenId: string().optional(),
39513
+ tokenSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
39514
+ environment: string().optional(),
39515
+ gpuType: string().optional(),
39516
+ region: string().optional(),
39517
+ costCapUsd: number().nonnegative().optional(),
39518
+ maxRuntimeSec: number().int().positive().optional(),
39519
+ failedDatasetGraceHours: number().nonnegative().optional()
39338
39520
  });
39339
39521
  var TrainingCredentialCheckSchema = object({
39340
39522
  ok: boolean(),
@@ -39386,20 +39568,33 @@ var TrainerSourceRefSchema = object({
39386
39568
  /** A commit sha (never a branch) — the job must be reproducible. */
39387
39569
  revision: string().regex(/^[0-9a-f]{7,64}$/)
39388
39570
  });
39571
+ /** Cloud job identity — route with the owning addon's `addonId` selector. */
39389
39572
  var JobRef = {
39390
- addonId: string(),
39573
+ entryId: string().min(1),
39391
39574
  jobKey: string().uuid()
39392
39575
  };
39393
39576
  var TrainingLogLineSchema = object({
39394
39577
  ts: number(),
39395
39578
  text: string()
39396
39579
  });
39397
- method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({ addonId: string() }), TrainingCredentialCheckSchema, {
39580
+ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }), method(object({
39581
+ typeId: string().min(1),
39582
+ name: string().min(1)
39583
+ }), object({ entryId: string() }), {
39584
+ kind: "mutation",
39585
+ auth: "admin"
39586
+ }), method(object({ entryId: string().min(1) }), object({ ok: literal(true) }), {
39587
+ kind: "mutation",
39588
+ auth: "admin"
39589
+ }), method(TrainingProviderUpdateEntryInputSchema, object({ ok: literal(true) }), {
39590
+ kind: "mutation",
39591
+ auth: "admin"
39592
+ }), method(object({ entryId: string().min(1) }), TrainingCredentialCheckSchema, {
39398
39593
  kind: "mutation",
39399
39594
  auth: "admin",
39400
39595
  timeoutMs: 3e4
39401
39596
  }), method(object({
39402
- addonId: string(),
39597
+ entryId: string().min(1),
39403
39598
  gpuType: string(),
39404
39599
  region: string(),
39405
39600
  datasetBytes: number().int().nonnegative(),
@@ -39465,7 +39660,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
39465
39660
  kind: "mutation",
39466
39661
  auth: "admin",
39467
39662
  timeoutMs: 5 * 6e4
39468
- }), method(object({ addonId: string() }), array(ProviderJobStatusSchema).readonly(), {
39663
+ }), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
39469
39664
  auth: "admin",
39470
39665
  timeoutMs: 2 * 6e4
39471
39666
  });
@@ -39475,20 +39670,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
39475
39670
  *
39476
39671
  * It owns what every provider must agree on, written once:
39477
39672
  *
39478
- * - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
39479
- * live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
39480
- * the export plan) and reaches this store through the five row methods
39481
- * below, so the Retrain page and the export did not change.
39482
39673
  * - **Jobs.** A persisted state machine, a reconcile loop against the
39483
39674
  * provider, a cost guard, a daily orphan sweep and the retention rules.
39484
39675
  * - **The return flow.** Verified artefacts → Model Studio
39485
39676
  * (`custom-model-registry.importModelBundle`) → canary on cameras →
39486
39677
  * rollback. Nothing is ever registered automatically.
39487
39678
  *
39679
+ * Plan/start takes a live {@link TrainingCorpusSelection} (collections +
39680
+ * work-state rule); frame ids are resolved via pipeline-analytics at that
39681
+ * moment and snapshotted on the job. No frozen dataset version.
39682
+ *
39488
39683
  * Every method is `admin`.
39489
39684
  */
39490
- /** A version WITH its frame list — what the export and a job read. */
39491
- var TrainingDatasetVersionRowSchema = RetrainDatasetVersionSchema.omit({ frameCount: true }).extend({ frameIds: array(string()).max(2e4).readonly() });
39685
+ /**
39686
+ * Live corpus criteria for plan/start (design §5.2). Default is complete-only.
39687
+ * Frame ids are resolved at plan/start — never a frozen version id.
39688
+ */
39689
+ var TrainingCorpusSelectionSchema = object({
39690
+ collectionIds: array(string()).min(1),
39691
+ /** Default complete-only for v1 */
39692
+ workState: _enum([
39693
+ "complete",
39694
+ "annotated_or_complete",
39695
+ "any_annotated"
39696
+ ]).default("complete")
39697
+ });
39492
39698
  /** A base model a detector job can fine-tune, and the baseline it is judged against. */
39493
39699
  var TrainingBaseModelSchema = object({
39494
39700
  modelId: string(),
@@ -39506,9 +39712,13 @@ var TrainingPresetSchema = _enum([
39506
39712
  "thorough"
39507
39713
  ]);
39508
39714
  var TrainingJobRequestSchema = object({
39509
- datasetVersionId: string().min(1),
39510
- /** The `training-provider` addon that runs it. */
39511
- addonId: string().min(1),
39715
+ /** Live collection + work-state criteria; resolved at plan/start. */
39716
+ selection: TrainingCorpusSelectionSchema,
39717
+ /**
39718
+ * The provider **entry** that runs it (credentials + defaults).
39719
+ * Resolve to an owning addon via `training-provider.describe` / `listEntries`.
39720
+ */
39721
+ entryId: string().min(1),
39512
39722
  gpuType: string().min(1),
39513
39723
  region: string(),
39514
39724
  baseModelId: string().min(1),
@@ -39567,6 +39777,7 @@ var TrainingJobPlanSchema = object({
39567
39777
  * result lives after the operator acted on it.
39568
39778
  */
39569
39779
  var TrainingJobStateSchema = _enum([
39780
+ "queued",
39570
39781
  "uploading",
39571
39782
  "submitted",
39572
39783
  "starting",
@@ -39620,6 +39831,11 @@ var TrainingJobSchema = object({
39620
39831
  createdAt: number(),
39621
39832
  updatedAt: number(),
39622
39833
  state: TrainingJobStateSchema,
39834
+ /**
39835
+ * Shared by every job enqueued together via `startJobBatch`.
39836
+ * `null` for a lone `startJob`. The engine advances queued siblings by this id.
39837
+ */
39838
+ batchId: string().nullable().default(null),
39623
39839
  stage: TrainingStageSchema.nullable(),
39624
39840
  failure: object({
39625
39841
  reason: TrainingFailureReasonSchema,
@@ -39631,6 +39847,12 @@ var TrainingJobSchema = object({
39631
39847
  maxRuntimeSec: number().int().positive(),
39632
39848
  trainer: TrainerSourceRefSchema,
39633
39849
  datasetLayout: RetrainExportLayoutSchema,
39850
+ /** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
39851
+ frameCount: number().int().nonnegative(),
39852
+ /** Resolved frame ids at start — the archive ships exactly these. */
39853
+ frameIds: array(string()).max(2e4).readonly(),
39854
+ /** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
39855
+ annotationHash: string(),
39634
39856
  dataset: object({
39635
39857
  bytes: number().int(),
39636
39858
  sha256: string(),
@@ -39672,13 +39894,7 @@ var TrainingJobSchema = object({
39672
39894
  canary: TrainingCanarySchema.nullable()
39673
39895
  });
39674
39896
  var IdInput = object({ id: string().min(1) });
39675
- method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
39676
- kind: "mutation",
39677
- auth: "admin"
39678
- }), 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() }), {
39679
- kind: "mutation",
39680
- auth: "admin"
39681
- }), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
39897
+ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
39682
39898
  auth: "admin",
39683
39899
  timeoutMs: 6e4
39684
39900
  }), method(TrainingJobRequestSchema.extend({
@@ -39697,6 +39913,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
39697
39913
  kind: "mutation",
39698
39914
  auth: "admin",
39699
39915
  timeoutMs: 12e4
39916
+ }), method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
39917
+ baseModelIds: array(string().min(1)).min(1),
39918
+ name: string().min(1).max(120),
39919
+ maxCostUsd: number().positive(),
39920
+ maxRuntimeSec: number().int().positive(),
39921
+ idempotencyKey: string().min(8).max(80)
39922
+ }), discriminatedUnion("kind", [object({
39923
+ kind: literal("started"),
39924
+ batchId: string(),
39925
+ jobs: array(TrainingJobSchema).min(1).readonly()
39926
+ }), object({
39927
+ kind: literal("refused"),
39928
+ reason: TrainingRefusalReasonSchema,
39929
+ detail: string()
39930
+ })]), {
39931
+ kind: "mutation",
39932
+ auth: "admin",
39933
+ timeoutMs: 12e4
39700
39934
  }), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
39701
39935
  kind: "mutation",
39702
39936
  auth: "admin",
@@ -43730,6 +43964,36 @@ Object.freeze({
43730
43964
  addonId: null,
43731
43965
  access: "view"
43732
43966
  },
43967
+ "oidcConnections.connectionFormSchema": {
43968
+ capName: "oidc-connections",
43969
+ capScope: "system",
43970
+ addonId: null,
43971
+ access: "view"
43972
+ },
43973
+ "oidcConnections.createConnection": {
43974
+ capName: "oidc-connections",
43975
+ capScope: "system",
43976
+ addonId: null,
43977
+ access: "create"
43978
+ },
43979
+ "oidcConnections.deleteConnection": {
43980
+ capName: "oidc-connections",
43981
+ capScope: "system",
43982
+ addonId: null,
43983
+ access: "delete"
43984
+ },
43985
+ "oidcConnections.listConnections": {
43986
+ capName: "oidc-connections",
43987
+ capScope: "system",
43988
+ addonId: null,
43989
+ access: "view"
43990
+ },
43991
+ "oidcConnections.updateConnection": {
43992
+ capName: "oidc-connections",
43993
+ capScope: "system",
43994
+ addonId: null,
43995
+ access: "create"
43996
+ },
43733
43997
  "osd.getStatus": {
43734
43998
  capName: "osd",
43735
43999
  capScope: "device",
@@ -43802,6 +44066,12 @@ Object.freeze({
43802
44066
  addonId: null,
43803
44067
  access: "create"
43804
44068
  },
44069
+ "osdManager.setSlotCameraEnabled": {
44070
+ capName: "osd-manager",
44071
+ capScope: "system",
44072
+ addonId: null,
44073
+ access: "create"
44074
+ },
43805
44075
  "osdManager.upsertTemplate": {
43806
44076
  capName: "osd-manager",
43807
44077
  capScope: "system",
@@ -43940,12 +44210,6 @@ Object.freeze({
43940
44210
  addonId: null,
43941
44211
  access: "create"
43942
44212
  },
43943
- "pipelineAnalytics.createRetrainDatasetVersion": {
43944
- capName: "pipeline-analytics",
43945
- capScope: "device",
43946
- addonId: null,
43947
- access: "create"
43948
- },
43949
44213
  "pipelineAnalytics.deleteDeviceEvents": {
43950
44214
  capName: "pipeline-analytics",
43951
44215
  capScope: "device",
@@ -43958,12 +44222,6 @@ Object.freeze({
43958
44222
  addonId: null,
43959
44223
  access: "delete"
43960
44224
  },
43961
- "pipelineAnalytics.deleteRetrainDatasetVersion": {
43962
- capName: "pipeline-analytics",
43963
- capScope: "device",
43964
- addonId: null,
43965
- access: "delete"
43966
- },
43967
44225
  "pipelineAnalytics.deleteTracks": {
43968
44226
  capName: "pipeline-analytics",
43969
44227
  capScope: "device",
@@ -44066,6 +44324,12 @@ Object.freeze({
44066
44324
  addonId: null,
44067
44325
  access: "view"
44068
44326
  },
44327
+ "pipelineAnalytics.getRetrainCorpusKpi": {
44328
+ capName: "pipeline-analytics",
44329
+ capScope: "device",
44330
+ addonId: null,
44331
+ access: "view"
44332
+ },
44069
44333
  "pipelineAnalytics.getRetrainExportUrl": {
44070
44334
  capName: "pipeline-analytics",
44071
44335
  capScope: "device",
@@ -44186,7 +44450,7 @@ Object.freeze({
44186
44450
  addonId: null,
44187
44451
  access: "view"
44188
44452
  },
44189
- "pipelineAnalytics.listRetrainDatasetVersions": {
44453
+ "pipelineAnalytics.listRetrainCorpusPage": {
44190
44454
  capName: "pipeline-analytics",
44191
44455
  capScope: "device",
44192
44456
  addonId: null,
@@ -44240,12 +44504,6 @@ Object.freeze({
44240
44504
  addonId: null,
44241
44505
  access: "create"
44242
44506
  },
44243
- "pipelineAnalytics.previewRetrainDataset": {
44244
- capName: "pipeline-analytics",
44245
- capScope: "device",
44246
- addonId: null,
44247
- access: "view"
44248
- },
44249
44507
  "pipelineAnalytics.proposeRetrainAnnotations": {
44250
44508
  capName: "pipeline-analytics",
44251
44509
  capScope: "device",
@@ -44324,6 +44582,12 @@ Object.freeze({
44324
44582
  addonId: null,
44325
44583
  access: "create"
44326
44584
  },
44585
+ "pipelineAnalytics.resolveRetrainTrainingCorpus": {
44586
+ capName: "pipeline-analytics",
44587
+ capScope: "device",
44588
+ addonId: null,
44589
+ access: "view"
44590
+ },
44327
44591
  "pipelineAnalytics.restageRetrainTrack": {
44328
44592
  capName: "pipeline-analytics",
44329
44593
  capScope: "device",
@@ -44384,12 +44648,6 @@ Object.freeze({
44384
44648
  addonId: null,
44385
44649
  access: "create"
44386
44650
  },
44387
- "pipelineAnalytics.verifyRetrainDatasetVersion": {
44388
- capName: "pipeline-analytics",
44389
- capScope: "device",
44390
- addonId: null,
44391
- access: "view"
44392
- },
44393
44651
  "pipelineAnalytics.wipeAllAnalytics": {
44394
44652
  capName: "pipeline-analytics",
44395
44653
  capScope: "device",
@@ -46784,18 +47042,6 @@ Object.freeze({
46784
47042
  addonId: null,
46785
47043
  access: "create"
46786
47044
  },
46787
- "training.findDatasetVersionIdByName": {
46788
- capName: "training",
46789
- capScope: "system",
46790
- addonId: null,
46791
- access: "view"
46792
- },
46793
- "training.getDatasetVersion": {
46794
- capName: "training",
46795
- capScope: "system",
46796
- addonId: null,
46797
- access: "view"
46798
- },
46799
47045
  "training.getJob": {
46800
47046
  capName: "training",
46801
47047
  capScope: "system",
@@ -46814,12 +47060,6 @@ Object.freeze({
46814
47060
  addonId: null,
46815
47061
  access: "view"
46816
47062
  },
46817
- "training.listDatasetVersions": {
46818
- capName: "training",
46819
- capScope: "system",
46820
- addonId: null,
46821
- access: "view"
46822
- },
46823
47063
  "training.listJobs": {
46824
47064
  capName: "training",
46825
47065
  capScope: "system",
@@ -46832,54 +47072,66 @@ Object.freeze({
46832
47072
  addonId: null,
46833
47073
  access: "view"
46834
47074
  },
46835
- "training.putDatasetVersion": {
47075
+ "training.registerResult": {
46836
47076
  capName: "training",
46837
47077
  capScope: "system",
46838
47078
  addonId: null,
46839
47079
  access: "create"
46840
47080
  },
46841
- "training.registerResult": {
47081
+ "training.rollbackCanary": {
46842
47082
  capName: "training",
46843
47083
  capScope: "system",
46844
47084
  addonId: null,
46845
47085
  access: "create"
46846
47086
  },
46847
- "training.removeDatasetVersion": {
47087
+ "training.startJob": {
46848
47088
  capName: "training",
46849
47089
  capScope: "system",
46850
47090
  addonId: null,
46851
- access: "delete"
47091
+ access: "create"
46852
47092
  },
46853
- "training.rollbackCanary": {
47093
+ "training.startJobBatch": {
46854
47094
  capName: "training",
46855
47095
  capScope: "system",
46856
47096
  addonId: null,
46857
47097
  access: "create"
46858
47098
  },
46859
- "training.startJob": {
46860
- capName: "training",
47099
+ "trainingProvider.cancelJob": {
47100
+ capName: "training-provider",
46861
47101
  capScope: "system",
46862
47102
  addonId: null,
46863
47103
  access: "create"
46864
47104
  },
46865
- "trainingProvider.cancelJob": {
47105
+ "trainingProvider.cleanupJob": {
46866
47106
  capName: "training-provider",
46867
47107
  capScope: "system",
46868
47108
  addonId: null,
46869
47109
  access: "create"
46870
47110
  },
46871
- "trainingProvider.cleanupJob": {
47111
+ "trainingProvider.createEntry": {
46872
47112
  capName: "training-provider",
46873
47113
  capScope: "system",
46874
47114
  addonId: null,
46875
47115
  access: "create"
46876
47116
  },
47117
+ "trainingProvider.deleteEntry": {
47118
+ capName: "training-provider",
47119
+ capScope: "system",
47120
+ addonId: null,
47121
+ access: "delete"
47122
+ },
46877
47123
  "trainingProvider.describe": {
46878
47124
  capName: "training-provider",
46879
47125
  capScope: "system",
46880
47126
  addonId: null,
46881
47127
  access: "view"
46882
47128
  },
47129
+ "trainingProvider.describeTypes": {
47130
+ capName: "training-provider",
47131
+ capScope: "system",
47132
+ addonId: null,
47133
+ access: "view"
47134
+ },
46883
47135
  "trainingProvider.estimateJob": {
46884
47136
  capName: "training-provider",
46885
47137
  capScope: "system",
@@ -46892,6 +47144,12 @@ Object.freeze({
46892
47144
  addonId: null,
46893
47145
  access: "view"
46894
47146
  },
47147
+ "trainingProvider.listEntries": {
47148
+ capName: "training-provider",
47149
+ capScope: "system",
47150
+ addonId: null,
47151
+ access: "view"
47152
+ },
46895
47153
  "trainingProvider.listJobEvents": {
46896
47154
  capName: "training-provider",
46897
47155
  capScope: "system",
@@ -46922,6 +47180,12 @@ Object.freeze({
46922
47180
  addonId: null,
46923
47181
  access: "create"
46924
47182
  },
47183
+ "trainingProvider.updateEntry": {
47184
+ capName: "training-provider",
47185
+ capScope: "system",
47186
+ addonId: null,
47187
+ access: "create"
47188
+ },
46925
47189
  "trainingProvider.uploadDataset": {
46926
47190
  capName: "training-provider",
46927
47191
  capScope: "system",
@@ -50128,6 +50392,11 @@ Object.freeze({
50128
50392
  form: "single",
50129
50393
  optional: false
50130
50394
  }],
50395
+ "osdManager.setSlotCameraEnabled": [{
50396
+ name: "deviceId",
50397
+ form: "single",
50398
+ optional: false
50399
+ }],
50131
50400
  "petFeeder.callPet": [{
50132
50401
  name: "deviceId",
50133
50402
  form: "single",
@@ -50348,6 +50617,11 @@ Object.freeze({
50348
50617
  form: "array",
50349
50618
  optional: false
50350
50619
  }],
50620
+ "pipelineAnalytics.listRetrainCorpusPage": [{
50621
+ name: "deviceIds",
50622
+ form: "array",
50623
+ optional: true
50624
+ }],
50351
50625
  "pipelineAnalytics.listRetrainStaging": [{
50352
50626
  name: "deviceIds",
50353
50627
  form: "array",
@@ -51457,6 +51731,7 @@ Object.freeze({
51457
51731
  });
51458
51732
  Object.freeze({
51459
51733
  "broker": "broker",
51734
+ "calendar-source": "calendar",
51460
51735
  "device-export": "device-export",
51461
51736
  "llm": "ai",
51462
51737
  "mesh-network": "mesh",