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