@camstack/addon-import-alexa 0.2.124 → 0.2.125

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.js CHANGED
@@ -5416,7 +5416,7 @@ var ZodIssueCode = {
5416
5416
  var ZodFirstPartyTypeKind;
5417
5417
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5418
5418
  //#endregion
5419
- //#region ../types/dist/sleep-r3RWkGVx.mjs
5419
+ //#region ../types/dist/sleep-DwAQ9sqX.mjs
5420
5420
  /**
5421
5421
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5422
5422
  * window to float samples (D455).
@@ -9422,6 +9422,16 @@ var CompositionSchema = object({
9422
9422
  seen.add(feature.cap);
9423
9423
  });
9424
9424
  });
9425
+ var NodeColorIdSchema = _enum([
9426
+ "node-a",
9427
+ "node-b",
9428
+ "node-c",
9429
+ "node-d",
9430
+ "node-e",
9431
+ "node-f",
9432
+ "node-g",
9433
+ "node-h"
9434
+ ]);
9425
9435
  new Set([
9426
9436
  "track",
9427
9437
  "face",
@@ -18653,14 +18663,14 @@ var LlmProfileSchema = object({
18653
18663
  /** ConfigUISchema tree passed through untyped on the wire (the
18654
18664
  * notification-output `ConfigSchemaPassthrough` precedent at
18655
18665
  * notification-output.cap.ts:151); the exported TS type re-tightens it. */
18656
- var ConfigSchemaPassthrough$1 = unknown();
18666
+ var ConfigSchemaPassthrough$3 = unknown();
18657
18667
  var LlmProfileKindDescriptorSchema = object({
18658
18668
  kind: LlmProfileKindSchema,
18659
18669
  label: string(),
18660
18670
  icon: string(),
18661
18671
  /** Stamped by each provider so the concat-fanned catalog stays routable. */
18662
18672
  addonId: string(),
18663
- configSchema: ConfigSchemaPassthrough$1
18673
+ configSchema: ConfigSchemaPassthrough$3
18664
18674
  });
18665
18675
  var LlmDefaultSelectorSchema = union([object({ consumer: string() }), object({ purpose: _enum(["text", "vision"]) })]);
18666
18676
  var LlmDefaultSchema = object({
@@ -19781,7 +19791,7 @@ var TargetKindCapsSchema = object({
19781
19791
  * the union is large and not meant for runtime validation here; the exported
19782
19792
  * `TargetKind` type re-tightens `configSchema` to `ConfigUISchema`.
19783
19793
  */
19784
- var ConfigSchemaPassthrough = unknown();
19794
+ var ConfigSchemaPassthrough$2 = unknown();
19785
19795
  var TargetKindSchema = object({
19786
19796
  kind: string(),
19787
19797
  label: string(),
@@ -19818,7 +19828,7 @@ var TargetKindSchema = object({
19818
19828
  * its raster path, which is the safe default for an unknown image.
19819
19829
  */
19820
19830
  iconMediaType: string().optional(),
19821
- configSchema: ConfigSchemaPassthrough,
19831
+ configSchema: ConfigSchemaPassthrough$2,
19822
19832
  /**
19823
19833
  * The config keys that decide WHERE this kind's secrets are sent (server,
19824
19834
  * base URL, instance, chat, recipient). A save that changes any of them
@@ -23155,6 +23165,61 @@ var OauthIntegrationDescriptorSchema = object({
23155
23165
  });
23156
23166
  method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
23157
23167
  /**
23168
+ * `oidc-connections` — CRUD for IdP rows under `auth-oidc` (D828 sibling).
23169
+ *
23170
+ * One hub-only singleton (`auth-oidc`). The Settings UI is a DataTable +
23171
+ * ItemFormDialog; there is no `editable-array` in `globalSettingsSchema`.
23172
+ * Operator-chosen `id` is the URL slug (`/addon/auth-oidc/<id>/…`) and is
23173
+ * immutable after create.
23174
+ */
23175
+ var ConfigSchemaPassthrough$1 = unknown();
23176
+ var OidcConnectionSchema = object({
23177
+ id: string().min(1),
23178
+ displayName: string(),
23179
+ icon: string(),
23180
+ issuerUrl: string(),
23181
+ clientId: string(),
23182
+ /** Client id + secret present — never the secret value. */
23183
+ configured: boolean(),
23184
+ /**
23185
+ * Values for the connection form schema. `clientSecret` is a keychain
23186
+ * {@link SecretFieldView} or `null` / `''`, never plaintext (D789).
23187
+ */
23188
+ formValues: record(string(), unknown()).optional()
23189
+ });
23190
+ /**
23191
+ * Patch one connection. Omitted or empty `clientSecret` keeps the stored
23192
+ * secret (D787). `{ $secretClear: true }` clears it. `id` is never renamed.
23193
+ */
23194
+ var OidcConnectionUpdateInputSchema = object({
23195
+ id: string().min(1),
23196
+ displayName: string().min(1),
23197
+ icon: string().optional(),
23198
+ issuerUrl: string().optional(),
23199
+ clientId: string().optional(),
23200
+ clientSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
23201
+ redirectUri: string().optional(),
23202
+ scopes: string().optional(),
23203
+ usernameClaim: _enum([
23204
+ "preferred_username",
23205
+ "email",
23206
+ "sub"
23207
+ ]).optional()
23208
+ });
23209
+ method(object({}), ConfigSchemaPassthrough$1, { auth: "admin" }), method(object({}), array(OidcConnectionSchema).readonly(), { auth: "admin" }), method(object({
23210
+ id: string().min(1).regex(/^[a-z0-9][a-z0-9-]{0,63}$/, "id must be a lowercase slug"),
23211
+ displayName: string().min(1)
23212
+ }), object({ id: string() }), {
23213
+ kind: "mutation",
23214
+ auth: "admin"
23215
+ }), method(OidcConnectionUpdateInputSchema, object({ ok: literal(true) }), {
23216
+ kind: "mutation",
23217
+ auth: "admin"
23218
+ }), method(object({ id: string().min(1) }), object({ ok: literal(true) }), {
23219
+ kind: "mutation",
23220
+ auth: "admin"
23221
+ });
23222
+ /**
23158
23223
  * What started a camera's onboard motion (D672). `camera` is the camera's own
23159
23224
  * firmware; `sensor` is a device the operator ATTACHED to it. Absent on the
23160
23225
  * wire means the camera: only the camera-sensors bridge ever says `sensor`.
@@ -24511,24 +24576,69 @@ var RetrainFrameListSchema = object({
24511
24576
  /** What the page pre-selects — the native key frame when one survives. */
24512
24577
  autoPickMediaId: number().int().optional()
24513
24578
  });
24579
+ /** Exclusive partition of a corpus copy's annotation progress (design §4.2). */
24580
+ var RetrainFrameWorkStateSchema = _enum([
24581
+ "unannotated",
24582
+ "annotated",
24583
+ "complete"
24584
+ ]);
24585
+ /**
24586
+ * Filters for paginated corpus list, KPI, and matching export (design §4.4).
24587
+ * Every narrowing field is ANDed; omitted fields impose no constraint.
24588
+ */
24589
+ var RetrainCorpusFilterSchema = object({
24590
+ workState: RetrainFrameWorkStateSchema.optional(),
24591
+ deviceIds: array(number()).max(500).optional(),
24592
+ /** When set, only frames in this named collection. */
24593
+ collectionId: string().optional(),
24594
+ /** Frames that carry at least one saved annotation in one of these classes. */
24595
+ classes: array(RetrainMacroClassSchema).optional(),
24596
+ page: number().int().positive().default(1),
24597
+ pageSize: number().int().positive().max(100).default(50)
24598
+ });
24599
+ var RetrainCorpusPageSchema = object({
24600
+ frames: array(RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema })).readonly(),
24601
+ total: number().int().nonnegative(),
24602
+ page: number().int().positive(),
24603
+ pageSize: number().int().positive()
24604
+ });
24605
+ var RetrainCorpusKpiCameraRowSchema = object({
24606
+ deviceId: number(),
24607
+ unannotated: number().int().nonnegative(),
24608
+ annotated: number().int().nonnegative(),
24609
+ complete: number().int().nonnegative(),
24610
+ /** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
24611
+ * `null` when the corpus is empty (no ratio). */
24612
+ pctOfCorpus: number().min(0).max(1).nullable()
24613
+ });
24614
+ var RetrainCorpusKpiSchema = object({
24615
+ total: number().int().nonnegative(),
24616
+ unannotated: number().int().nonnegative(),
24617
+ annotated: number().int().nonnegative(),
24618
+ complete: number().int().nonnegative(),
24619
+ cameras: array(RetrainCorpusKpiCameraRowSchema).readonly()
24620
+ });
24514
24621
  /**
24515
24622
  * Which frames an annotated export carries. Every field narrows; an empty
24516
- * filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
24517
- * list owned by whoever trains (the training orchestrator), so `frameIds` is
24518
- * the primitive a version export uses; `batchId` re-selects what an earlier
24519
- * export carried (`exportedInBatch`).
24623
+ * filter is every annotated copy. `frameIds` is the primitive a job or
24624
+ * download uses; `batchId` re-selects what an earlier export carried
24625
+ * (`exportedInBatch`). Frozen dataset versions were removed — live selection
24626
+ * resolves to `frameIds` at plan/start.
24520
24627
  */
24521
24628
  var RetrainExportFilterSchema = object({
24522
24629
  deviceIds: array(number()).optional(),
24523
24630
  frameIds: array(string()).max(2e4).optional(),
24524
24631
  /** Only frames in at least one of these named collections. */
24525
24632
  collectionIds: array(string()).max(200).optional(),
24526
- /** Exactly the frames of this dataset version (and its completeOnly). An
24527
- * unknown id selects nothing. */
24528
- datasetVersionId: string().optional(),
24633
+ /** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
24634
+ collectionId: string().optional(),
24529
24635
  batchId: string().optional(),
24530
24636
  /** Only frames the operator marked complete (all subjects boxed). */
24531
- completeOnly: boolean().optional()
24637
+ completeOnly: boolean().optional(),
24638
+ /** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
24639
+ workState: RetrainFrameWorkStateSchema.optional(),
24640
+ /** Frames with at least one saved annotation in one of these classes. */
24641
+ classes: array(RetrainMacroClassSchema).optional()
24532
24642
  });
24533
24643
  /**
24534
24644
  * `frames`: the full frame copies, boxes in `annotations.json`.
@@ -24728,8 +24838,7 @@ var RetrainDatasetStatsSchema = object({
24728
24838
  completeFrames: number().int()
24729
24839
  })).readonly()
24730
24840
  });
24731
- /** An immutable dataset version, without its frame list. */
24732
- var RetrainDatasetVersionSchema = object({
24841
+ object({
24733
24842
  id: string(),
24734
24843
  name: string(),
24735
24844
  createdAt: number(),
@@ -24737,22 +24846,33 @@ var RetrainDatasetVersionSchema = object({
24737
24846
  layout: RetrainExportLayoutSchema,
24738
24847
  completeOnly: boolean(),
24739
24848
  frameCount: number().int(),
24740
- /** sha256 of what the frames taught when the version was frozen. */
24741
24849
  annotationHash: string(),
24742
- /** The export manifest schema the version was cut under. */
24743
24850
  manifestSchema: string(),
24744
24851
  stats: RetrainDatasetStatsSchema
24745
24852
  });
24746
- var CreateRetrainDatasetVersionResultSchema = discriminatedUnion("kind", [object({
24747
- kind: literal("created"),
24748
- version: RetrainDatasetVersionSchema
24853
+ /**
24854
+ * Live training corpus criteria — same shape as `TrainingCorpusSelection` on
24855
+ * the training cap. Resolved here so plan/start and the annotated export share
24856
+ * one definition of "the frames" (`buildRetrainExportPlan`).
24857
+ */
24858
+ var RetrainTrainingCorpusSelectionSchema = object({
24859
+ collectionIds: array(string()).min(1),
24860
+ workState: _enum([
24861
+ "complete",
24862
+ "annotated_or_complete",
24863
+ "any_annotated"
24864
+ ]).default("complete")
24865
+ });
24866
+ var RetrainTrainingCorpusResolveResultSchema = discriminatedUnion("kind", [object({
24867
+ kind: literal("resolved"),
24868
+ frameIds: array(string()).max(2e4).readonly(),
24869
+ stats: RetrainDatasetStatsSchema,
24870
+ annotationHash: string(),
24871
+ layout: RetrainExportLayoutSchema
24749
24872
  }), object({
24750
24873
  kind: literal("refused"),
24751
- reason: _enum([
24752
- "empty-name",
24753
- "duplicate-name",
24754
- "no-frames"
24755
- ])
24874
+ reason: _enum(["unknown-collection", "no-frames"]),
24875
+ detail: string()
24756
24876
  })]);
24757
24877
  /** The outcome of a lifecycle move owned by the retrain page. */
24758
24878
  var RetrainTransitionResultSchema = object({
@@ -25459,6 +25579,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25459
25579
  }), array(RetrainTrackSchema).readonly(), {
25460
25580
  kind: "query",
25461
25581
  auth: "admin"
25582
+ }), method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
25583
+ kind: "query",
25584
+ auth: "admin"
25585
+ }), method(object({}), RetrainCorpusKpiSchema, {
25586
+ kind: "query",
25587
+ auth: "admin"
25462
25588
  }), method(object({ trackId: string() }), RetrainFrameListSchema, {
25463
25589
  kind: "query",
25464
25590
  auth: "admin"
@@ -25554,36 +25680,6 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25554
25680
  kind: "mutation",
25555
25681
  auth: "admin",
25556
25682
  timeoutMs: 12e4
25557
- }), method(object({
25558
- selection: RetrainDatasetSelectionSchema,
25559
- completeOnly: boolean().optional()
25560
- }), RetrainDatasetStatsSchema, {
25561
- kind: "query",
25562
- auth: "admin"
25563
- }), method(object({
25564
- name: string().max(120),
25565
- selection: RetrainDatasetSelectionSchema,
25566
- layout: RetrainExportLayoutSchema,
25567
- completeOnly: boolean()
25568
- }), CreateRetrainDatasetVersionResultSchema, {
25569
- kind: "mutation",
25570
- auth: "admin",
25571
- timeoutMs: 12e4
25572
- }), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
25573
- kind: "query",
25574
- auth: "admin"
25575
- }), method(object({ id: string() }), object({ deleted: boolean() }), {
25576
- kind: "mutation",
25577
- auth: "admin"
25578
- }), method(object({ id: string() }), object({
25579
- found: boolean(),
25580
- annotationHash: string(),
25581
- matches: boolean(),
25582
- missingFrames: number().int()
25583
- }), {
25584
- kind: "query",
25585
- auth: "admin",
25586
- timeoutMs: 12e4
25587
25683
  }), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
25588
25684
  kind: "query",
25589
25685
  auth: "admin"
@@ -25610,6 +25706,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25610
25706
  }), method(object({}), array(RetrainCollectionSchema).readonly(), {
25611
25707
  kind: "query",
25612
25708
  auth: "admin"
25709
+ }), method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
25710
+ kind: "query",
25711
+ auth: "admin",
25712
+ timeoutMs: 6e4
25613
25713
  }), method(object({
25614
25714
  id: string(),
25615
25715
  name: string().max(120)
@@ -26226,11 +26326,14 @@ var HardwareClassIdSchema = _enum([
26226
26326
  "intel-n-series",
26227
26327
  "apple-m-base",
26228
26328
  "apple-m-pro",
26329
+ "amd-phoenix",
26229
26330
  "unknown"
26230
26331
  ]);
26231
26332
  var AcceleratorKindSchema = _enum([
26232
26333
  "intel-npu",
26233
26334
  "intel-igpu",
26335
+ "amd-igpu",
26336
+ "amd-npu",
26234
26337
  "x86-cpu",
26235
26338
  "arm-cpu",
26236
26339
  "apple-ane",
@@ -28160,6 +28263,8 @@ var AgentPipelineSettingsSchema = object({
28160
28263
  * address is wrong (multi-homed host, NAT, custom interface).
28161
28264
  */
28162
28265
  reachableHost: string().optional(),
28266
+ /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
28267
+ color: NodeColorIdSchema.optional(),
28163
28268
  /**
28164
28269
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
28165
28270
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
@@ -28709,8 +28814,9 @@ method(object({
28709
28814
  auth: "admin"
28710
28815
  }), method(object({
28711
28816
  agentNodeId: string(),
28712
- reachableHost: string().nullable()
28713
- }), object({ success: literal(true) }), {
28817
+ reachableHost: string().nullable().optional(),
28818
+ color: NodeColorIdSchema.nullable().optional()
28819
+ }).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), object({ success: literal(true) }), {
28714
28820
  kind: "mutation",
28715
28821
  auth: "admin"
28716
28822
  }), method(object({
@@ -31786,7 +31892,7 @@ var CustomActionInputSchema = object({
31786
31892
  action: string().min(1),
31787
31893
  input: unknown()
31788
31894
  });
31789
- method(_void(), array(AddonListItemSchema).readonly()), method(object({
31895
+ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSchema).readonly()), method(object({
31790
31896
  addonId: string(),
31791
31897
  limit: number().min(1).max(500).default(100),
31792
31898
  level: LogLevelSchema$2.optional()
@@ -36865,7 +36971,13 @@ var TopologyNodeSchema = object({
36865
36971
  })).readonly(),
36866
36972
  processes: array(TopologyProcessSchema).readonly(),
36867
36973
  categories: array(TopologyCategorySchema).readonly(),
36868
- rootPackage: TopologyRootPackageSchema.nullable()
36974
+ rootPackage: TopologyRootPackageSchema.nullable(),
36975
+ /**
36976
+ * How an online AGENT reaches the hub (mesh mTLS Release A): `tls` once it has
36977
+ * completed a mutual-TLS handshake, `clear` otherwise. Absent for the hub,
36978
+ * for offline rows and when the hub cannot tell.
36979
+ */
36980
+ meshTransport: _enum(["tls", "clear"]).optional()
36869
36981
  });
36870
36982
  var CapUsageEdgeSchema = object({
36871
36983
  callerAddonId: string(),
@@ -37278,6 +37390,7 @@ var OsdNamedTemplateSchema = object({
37278
37390
  });
37279
37391
  /** Where a slot's value comes from. */
37280
37392
  var OsdSourceSchema = discriminatedUnion("kind", [
37393
+ object({ kind: literal("none") }),
37281
37394
  object({
37282
37395
  kind: literal("static"),
37283
37396
  text: string().max(64)
@@ -37404,6 +37517,13 @@ method(object({ deviceId: number().int() }), object({
37404
37517
  }), object({ success: literal(true) }), {
37405
37518
  kind: "mutation",
37406
37519
  auth: "admin"
37520
+ }), method(object({
37521
+ deviceId: number().int(),
37522
+ slotId: string().min(1),
37523
+ enabled: boolean()
37524
+ }), object({ success: literal(true) }), {
37525
+ kind: "mutation",
37526
+ auth: "admin"
37407
37527
  }), method(object({
37408
37528
  sourceDeviceId: number().int(),
37409
37529
  targetDeviceId: number().int()
@@ -37835,7 +37955,15 @@ var GpuInfoSchema = object({
37835
37955
  name: string(),
37836
37956
  memoryMB: number().optional()
37837
37957
  });
37838
- var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
37958
+ var NpuInfoSchema = object({
37959
+ type: _enum([
37960
+ "apple-ane",
37961
+ "intel-npu",
37962
+ "amd-xdna"
37963
+ ]),
37964
+ name: string().optional(),
37965
+ generation: _enum(["xdna1", "xdna2"]).optional()
37966
+ });
37839
37967
  var CoralInfoSchema = object({
37840
37968
  type: literal("coral-edgetpu"),
37841
37969
  bus: string().optional()
@@ -42578,9 +42706,11 @@ var zoneRulesCapability = {
42578
42706
  * once is what makes a second provider (RunPod, a local NVIDIA node) a new
42579
42707
  * manifest entry and nothing else.
42580
42708
  *
42581
- * Collection, routed by the `addonId` in every single-row input (the `llm` /
42582
- * `notification-output` posture); `describe` concat-fans across providers.
42583
- * Every method is `admin`: these spend money.
42709
+ * Collection of provider **types** (addons). Each addon owns zero or more
42710
+ * **entries** (credentials + defaults). Concat-fans: `describe`,
42711
+ * `describeTypes`, `listEntries`, `listJobs`. Single-row work is keyed by
42712
+ * `entryId`; callers also pass the owning `addonId` as the collection
42713
+ * selector (broker posture). Every method is `admin`: these spend money.
42584
42714
  *
42585
42715
  * Every cloud object a provider creates is tagged with the orchestrator's
42586
42716
  * `jobKey`, so a retried submit finds the job it already started instead of
@@ -42604,8 +42734,8 @@ var TrainingRegionOptionSchema = object({
42604
42734
  priceMultiplier: number().positive()
42605
42735
  });
42606
42736
  /**
42607
- * The provider's per-account settings, as the orchestrator reads them. They
42608
- * live in the PROVIDER addon's settings (operator decision 2026-10-08: they
42737
+ * The provider's per-entry settings, as the orchestrator reads them. They
42738
+ * live on the PROVIDER addon's entry (operator decision 2026-10-08: they
42609
42739
  * depend on the user's account), never hard-coded in the orchestrator.
42610
42740
  */
42611
42741
  var TrainingProviderDefaultsSchema = object({
@@ -42616,9 +42746,44 @@ var TrainingProviderDefaultsSchema = object({
42616
42746
  /** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
42617
42747
  failedDatasetGraceHours: number().nonnegative()
42618
42748
  });
42749
+ /**
42750
+ * Entry form schema for a provider type — same seam as notification
42751
+ * `TargetKind.configSchema` (`z.unknown()` at the wire; callers tighten to
42752
+ * {@link ConfigUISchema}). Drives `ConfigFormBuilder` on Training → Providers.
42753
+ */
42754
+ var ConfigSchemaPassthrough = unknown();
42755
+ /** One creatable provider type, for the Add-entry dialog. */
42756
+ var TrainingProviderTypeSchema = object({
42757
+ typeId: string(),
42758
+ label: string(),
42759
+ /** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
42760
+ iconAsset: string(),
42761
+ /** Owning `training-provider` addon — collection selector for createEntry. */
42762
+ addonId: string(),
42763
+ /**
42764
+ * Fields for one entry of this type (credentials + defaults). Absent on a
42765
+ * type that only needs a name. Password fields are keychain-backed on the
42766
+ * provider addon (`secretStatePaths`), not D634 plaintext.
42767
+ */
42768
+ configSchema: ConfigSchemaPassthrough.optional()
42769
+ });
42770
+ /** One configured account / workspace under a provider type. */
42771
+ var TrainingProviderEntrySchema = object({
42772
+ entryId: string(),
42773
+ typeId: string(),
42774
+ name: string(),
42775
+ addonId: string(),
42776
+ /** Credentials are present — never the values. */
42777
+ configured: boolean()
42778
+ });
42619
42779
  var TrainingProviderDescriptorSchema = object({
42620
42780
  addonId: string(),
42621
- /** `modal`, `runpod`, `fake`, … */
42781
+ entryId: string(),
42782
+ typeId: string(),
42783
+ /** Operator-chosen entry name. */
42784
+ name: string(),
42785
+ iconAsset: string(),
42786
+ /** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
42622
42787
  kind: string(),
42623
42788
  label: string(),
42624
42789
  gpuTypes: array(TrainingGpuOptionSchema).readonly(),
@@ -42630,7 +42795,30 @@ var TrainingProviderDescriptorSchema = object({
42630
42795
  dataResidencyNote: string(),
42631
42796
  /** Credentials are present — never the values. */
42632
42797
  configured: boolean(),
42633
- defaults: TrainingProviderDefaultsSchema
42798
+ defaults: TrainingProviderDefaultsSchema,
42799
+ /**
42800
+ * Values for {@link TrainingProviderTypeSchema}'s `configSchema` — password
42801
+ * fields are keychain {@link SecretFieldView} or `null` / `''` (create),
42802
+ * never plaintext. Same hydrate contract as settings forms (D789).
42803
+ */
42804
+ formValues: record(string(), unknown()).optional()
42805
+ });
42806
+ /**
42807
+ * Patch one entry's name, credentials and defaults. Pin with owning `{ addonId }`.
42808
+ * An omitted or empty `tokenSecret` means KEEP the stored secret (D787).
42809
+ * `{ $secretClear: true }` clears it.
42810
+ */
42811
+ var TrainingProviderUpdateEntryInputSchema = object({
42812
+ entryId: string().min(1),
42813
+ name: string().min(1),
42814
+ tokenId: string().optional(),
42815
+ tokenSecret: union([string(), object({ $secretClear: literal(true) })]).optional(),
42816
+ environment: string().optional(),
42817
+ gpuType: string().optional(),
42818
+ region: string().optional(),
42819
+ costCapUsd: number().nonnegative().optional(),
42820
+ maxRuntimeSec: number().int().positive().optional(),
42821
+ failedDatasetGraceHours: number().nonnegative().optional()
42634
42822
  });
42635
42823
  var TrainingCredentialCheckSchema = object({
42636
42824
  ok: boolean(),
@@ -42682,20 +42870,33 @@ var TrainerSourceRefSchema = object({
42682
42870
  /** A commit sha (never a branch) — the job must be reproducible. */
42683
42871
  revision: string().regex(/^[0-9a-f]{7,64}$/)
42684
42872
  });
42873
+ /** Cloud job identity — route with the owning addon's `addonId` selector. */
42685
42874
  var JobRef = {
42686
- addonId: string(),
42875
+ entryId: string().min(1),
42687
42876
  jobKey: string().uuid()
42688
42877
  };
42689
42878
  var TrainingLogLineSchema = object({
42690
42879
  ts: number(),
42691
42880
  text: string()
42692
42881
  });
42693
- method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({ addonId: string() }), TrainingCredentialCheckSchema, {
42882
+ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }), method(object({
42883
+ typeId: string().min(1),
42884
+ name: string().min(1)
42885
+ }), object({ entryId: string() }), {
42886
+ kind: "mutation",
42887
+ auth: "admin"
42888
+ }), method(object({ entryId: string().min(1) }), object({ ok: literal(true) }), {
42889
+ kind: "mutation",
42890
+ auth: "admin"
42891
+ }), method(TrainingProviderUpdateEntryInputSchema, object({ ok: literal(true) }), {
42892
+ kind: "mutation",
42893
+ auth: "admin"
42894
+ }), method(object({ entryId: string().min(1) }), TrainingCredentialCheckSchema, {
42694
42895
  kind: "mutation",
42695
42896
  auth: "admin",
42696
42897
  timeoutMs: 3e4
42697
42898
  }), method(object({
42698
- addonId: string(),
42899
+ entryId: string().min(1),
42699
42900
  gpuType: string(),
42700
42901
  region: string(),
42701
42902
  datasetBytes: number().int().nonnegative(),
@@ -42761,7 +42962,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
42761
42962
  kind: "mutation",
42762
42963
  auth: "admin",
42763
42964
  timeoutMs: 5 * 6e4
42764
- }), method(object({ addonId: string() }), array(ProviderJobStatusSchema).readonly(), {
42965
+ }), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
42765
42966
  auth: "admin",
42766
42967
  timeoutMs: 2 * 6e4
42767
42968
  });
@@ -42771,20 +42972,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
42771
42972
  *
42772
42973
  * It owns what every provider must agree on, written once:
42773
42974
  *
42774
- * - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
42775
- * live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
42776
- * the export plan) and reaches this store through the five row methods
42777
- * below, so the Retrain page and the export did not change.
42778
42975
  * - **Jobs.** A persisted state machine, a reconcile loop against the
42779
42976
  * provider, a cost guard, a daily orphan sweep and the retention rules.
42780
42977
  * - **The return flow.** Verified artefacts → Model Studio
42781
42978
  * (`custom-model-registry.importModelBundle`) → canary on cameras →
42782
42979
  * rollback. Nothing is ever registered automatically.
42783
42980
  *
42981
+ * Plan/start takes a live {@link TrainingCorpusSelection} (collections +
42982
+ * work-state rule); frame ids are resolved via pipeline-analytics at that
42983
+ * moment and snapshotted on the job. No frozen dataset version.
42984
+ *
42784
42985
  * Every method is `admin`.
42785
42986
  */
42786
- /** A version WITH its frame list — what the export and a job read. */
42787
- var TrainingDatasetVersionRowSchema = RetrainDatasetVersionSchema.omit({ frameCount: true }).extend({ frameIds: array(string()).max(2e4).readonly() });
42987
+ /**
42988
+ * Live corpus criteria for plan/start (design §5.2). Default is complete-only.
42989
+ * Frame ids are resolved at plan/start — never a frozen version id.
42990
+ */
42991
+ var TrainingCorpusSelectionSchema = object({
42992
+ collectionIds: array(string()).min(1),
42993
+ /** Default complete-only for v1 */
42994
+ workState: _enum([
42995
+ "complete",
42996
+ "annotated_or_complete",
42997
+ "any_annotated"
42998
+ ]).default("complete")
42999
+ });
42788
43000
  /** A base model a detector job can fine-tune, and the baseline it is judged against. */
42789
43001
  var TrainingBaseModelSchema = object({
42790
43002
  modelId: string(),
@@ -42802,9 +43014,13 @@ var TrainingPresetSchema = _enum([
42802
43014
  "thorough"
42803
43015
  ]);
42804
43016
  var TrainingJobRequestSchema = object({
42805
- datasetVersionId: string().min(1),
42806
- /** The `training-provider` addon that runs it. */
42807
- addonId: string().min(1),
43017
+ /** Live collection + work-state criteria; resolved at plan/start. */
43018
+ selection: TrainingCorpusSelectionSchema,
43019
+ /**
43020
+ * The provider **entry** that runs it (credentials + defaults).
43021
+ * Resolve to an owning addon via `training-provider.describe` / `listEntries`.
43022
+ */
43023
+ entryId: string().min(1),
42808
43024
  gpuType: string().min(1),
42809
43025
  region: string(),
42810
43026
  baseModelId: string().min(1),
@@ -42863,6 +43079,7 @@ var TrainingJobPlanSchema = object({
42863
43079
  * result lives after the operator acted on it.
42864
43080
  */
42865
43081
  var TrainingJobStateSchema = _enum([
43082
+ "queued",
42866
43083
  "uploading",
42867
43084
  "submitted",
42868
43085
  "starting",
@@ -42916,6 +43133,11 @@ var TrainingJobSchema = object({
42916
43133
  createdAt: number(),
42917
43134
  updatedAt: number(),
42918
43135
  state: TrainingJobStateSchema,
43136
+ /**
43137
+ * Shared by every job enqueued together via `startJobBatch`.
43138
+ * `null` for a lone `startJob`. The engine advances queued siblings by this id.
43139
+ */
43140
+ batchId: string().nullable().default(null),
42919
43141
  stage: TrainingStageSchema.nullable(),
42920
43142
  failure: object({
42921
43143
  reason: TrainingFailureReasonSchema,
@@ -42927,6 +43149,12 @@ var TrainingJobSchema = object({
42927
43149
  maxRuntimeSec: number().int().positive(),
42928
43150
  trainer: TrainerSourceRefSchema,
42929
43151
  datasetLayout: RetrainExportLayoutSchema,
43152
+ /** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
43153
+ frameCount: number().int().nonnegative(),
43154
+ /** Resolved frame ids at start — the archive ships exactly these. */
43155
+ frameIds: array(string()).max(2e4).readonly(),
43156
+ /** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
43157
+ annotationHash: string(),
42930
43158
  dataset: object({
42931
43159
  bytes: number().int(),
42932
43160
  sha256: string(),
@@ -42968,13 +43196,7 @@ var TrainingJobSchema = object({
42968
43196
  canary: TrainingCanarySchema.nullable()
42969
43197
  });
42970
43198
  var IdInput = object({ id: string().min(1) });
42971
- method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
42972
- kind: "mutation",
42973
- auth: "admin"
42974
- }), 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() }), {
42975
- kind: "mutation",
42976
- auth: "admin"
42977
- }), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
43199
+ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
42978
43200
  auth: "admin",
42979
43201
  timeoutMs: 6e4
42980
43202
  }), method(TrainingJobRequestSchema.extend({
@@ -42993,6 +43215,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
42993
43215
  kind: "mutation",
42994
43216
  auth: "admin",
42995
43217
  timeoutMs: 12e4
43218
+ }), method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
43219
+ baseModelIds: array(string().min(1)).min(1),
43220
+ name: string().min(1).max(120),
43221
+ maxCostUsd: number().positive(),
43222
+ maxRuntimeSec: number().int().positive(),
43223
+ idempotencyKey: string().min(8).max(80)
43224
+ }), discriminatedUnion("kind", [object({
43225
+ kind: literal("started"),
43226
+ batchId: string(),
43227
+ jobs: array(TrainingJobSchema).min(1).readonly()
43228
+ }), object({
43229
+ kind: literal("refused"),
43230
+ reason: TrainingRefusalReasonSchema,
43231
+ detail: string()
43232
+ })]), {
43233
+ kind: "mutation",
43234
+ auth: "admin",
43235
+ timeoutMs: 12e4
42996
43236
  }), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
42997
43237
  kind: "mutation",
42998
43238
  auth: "admin",
@@ -48551,6 +48791,36 @@ Object.freeze({
48551
48791
  addonId: null,
48552
48792
  access: "view"
48553
48793
  },
48794
+ "oidcConnections.connectionFormSchema": {
48795
+ capName: "oidc-connections",
48796
+ capScope: "system",
48797
+ addonId: null,
48798
+ access: "view"
48799
+ },
48800
+ "oidcConnections.createConnection": {
48801
+ capName: "oidc-connections",
48802
+ capScope: "system",
48803
+ addonId: null,
48804
+ access: "create"
48805
+ },
48806
+ "oidcConnections.deleteConnection": {
48807
+ capName: "oidc-connections",
48808
+ capScope: "system",
48809
+ addonId: null,
48810
+ access: "delete"
48811
+ },
48812
+ "oidcConnections.listConnections": {
48813
+ capName: "oidc-connections",
48814
+ capScope: "system",
48815
+ addonId: null,
48816
+ access: "view"
48817
+ },
48818
+ "oidcConnections.updateConnection": {
48819
+ capName: "oidc-connections",
48820
+ capScope: "system",
48821
+ addonId: null,
48822
+ access: "create"
48823
+ },
48554
48824
  "osd.getStatus": {
48555
48825
  capName: "osd",
48556
48826
  capScope: "device",
@@ -48623,6 +48893,12 @@ Object.freeze({
48623
48893
  addonId: null,
48624
48894
  access: "create"
48625
48895
  },
48896
+ "osdManager.setSlotCameraEnabled": {
48897
+ capName: "osd-manager",
48898
+ capScope: "system",
48899
+ addonId: null,
48900
+ access: "create"
48901
+ },
48626
48902
  "osdManager.upsertTemplate": {
48627
48903
  capName: "osd-manager",
48628
48904
  capScope: "system",
@@ -48761,12 +49037,6 @@ Object.freeze({
48761
49037
  addonId: null,
48762
49038
  access: "create"
48763
49039
  },
48764
- "pipelineAnalytics.createRetrainDatasetVersion": {
48765
- capName: "pipeline-analytics",
48766
- capScope: "device",
48767
- addonId: null,
48768
- access: "create"
48769
- },
48770
49040
  "pipelineAnalytics.deleteDeviceEvents": {
48771
49041
  capName: "pipeline-analytics",
48772
49042
  capScope: "device",
@@ -48779,12 +49049,6 @@ Object.freeze({
48779
49049
  addonId: null,
48780
49050
  access: "delete"
48781
49051
  },
48782
- "pipelineAnalytics.deleteRetrainDatasetVersion": {
48783
- capName: "pipeline-analytics",
48784
- capScope: "device",
48785
- addonId: null,
48786
- access: "delete"
48787
- },
48788
49052
  "pipelineAnalytics.deleteTracks": {
48789
49053
  capName: "pipeline-analytics",
48790
49054
  capScope: "device",
@@ -48887,6 +49151,12 @@ Object.freeze({
48887
49151
  addonId: null,
48888
49152
  access: "view"
48889
49153
  },
49154
+ "pipelineAnalytics.getRetrainCorpusKpi": {
49155
+ capName: "pipeline-analytics",
49156
+ capScope: "device",
49157
+ addonId: null,
49158
+ access: "view"
49159
+ },
48890
49160
  "pipelineAnalytics.getRetrainExportUrl": {
48891
49161
  capName: "pipeline-analytics",
48892
49162
  capScope: "device",
@@ -49007,7 +49277,7 @@ Object.freeze({
49007
49277
  addonId: null,
49008
49278
  access: "view"
49009
49279
  },
49010
- "pipelineAnalytics.listRetrainDatasetVersions": {
49280
+ "pipelineAnalytics.listRetrainCorpusPage": {
49011
49281
  capName: "pipeline-analytics",
49012
49282
  capScope: "device",
49013
49283
  addonId: null,
@@ -49061,12 +49331,6 @@ Object.freeze({
49061
49331
  addonId: null,
49062
49332
  access: "create"
49063
49333
  },
49064
- "pipelineAnalytics.previewRetrainDataset": {
49065
- capName: "pipeline-analytics",
49066
- capScope: "device",
49067
- addonId: null,
49068
- access: "view"
49069
- },
49070
49334
  "pipelineAnalytics.proposeRetrainAnnotations": {
49071
49335
  capName: "pipeline-analytics",
49072
49336
  capScope: "device",
@@ -49145,6 +49409,12 @@ Object.freeze({
49145
49409
  addonId: null,
49146
49410
  access: "create"
49147
49411
  },
49412
+ "pipelineAnalytics.resolveRetrainTrainingCorpus": {
49413
+ capName: "pipeline-analytics",
49414
+ capScope: "device",
49415
+ addonId: null,
49416
+ access: "view"
49417
+ },
49148
49418
  "pipelineAnalytics.restageRetrainTrack": {
49149
49419
  capName: "pipeline-analytics",
49150
49420
  capScope: "device",
@@ -49205,12 +49475,6 @@ Object.freeze({
49205
49475
  addonId: null,
49206
49476
  access: "create"
49207
49477
  },
49208
- "pipelineAnalytics.verifyRetrainDatasetVersion": {
49209
- capName: "pipeline-analytics",
49210
- capScope: "device",
49211
- addonId: null,
49212
- access: "view"
49213
- },
49214
49478
  "pipelineAnalytics.wipeAllAnalytics": {
49215
49479
  capName: "pipeline-analytics",
49216
49480
  capScope: "device",
@@ -51605,18 +51869,6 @@ Object.freeze({
51605
51869
  addonId: null,
51606
51870
  access: "create"
51607
51871
  },
51608
- "training.findDatasetVersionIdByName": {
51609
- capName: "training",
51610
- capScope: "system",
51611
- addonId: null,
51612
- access: "view"
51613
- },
51614
- "training.getDatasetVersion": {
51615
- capName: "training",
51616
- capScope: "system",
51617
- addonId: null,
51618
- access: "view"
51619
- },
51620
51872
  "training.getJob": {
51621
51873
  capName: "training",
51622
51874
  capScope: "system",
@@ -51635,12 +51887,6 @@ Object.freeze({
51635
51887
  addonId: null,
51636
51888
  access: "view"
51637
51889
  },
51638
- "training.listDatasetVersions": {
51639
- capName: "training",
51640
- capScope: "system",
51641
- addonId: null,
51642
- access: "view"
51643
- },
51644
51890
  "training.listJobs": {
51645
51891
  capName: "training",
51646
51892
  capScope: "system",
@@ -51653,54 +51899,66 @@ Object.freeze({
51653
51899
  addonId: null,
51654
51900
  access: "view"
51655
51901
  },
51656
- "training.putDatasetVersion": {
51902
+ "training.registerResult": {
51657
51903
  capName: "training",
51658
51904
  capScope: "system",
51659
51905
  addonId: null,
51660
51906
  access: "create"
51661
51907
  },
51662
- "training.registerResult": {
51908
+ "training.rollbackCanary": {
51663
51909
  capName: "training",
51664
51910
  capScope: "system",
51665
51911
  addonId: null,
51666
51912
  access: "create"
51667
51913
  },
51668
- "training.removeDatasetVersion": {
51914
+ "training.startJob": {
51669
51915
  capName: "training",
51670
51916
  capScope: "system",
51671
51917
  addonId: null,
51672
- access: "delete"
51918
+ access: "create"
51673
51919
  },
51674
- "training.rollbackCanary": {
51920
+ "training.startJobBatch": {
51675
51921
  capName: "training",
51676
51922
  capScope: "system",
51677
51923
  addonId: null,
51678
51924
  access: "create"
51679
51925
  },
51680
- "training.startJob": {
51681
- capName: "training",
51926
+ "trainingProvider.cancelJob": {
51927
+ capName: "training-provider",
51682
51928
  capScope: "system",
51683
51929
  addonId: null,
51684
51930
  access: "create"
51685
51931
  },
51686
- "trainingProvider.cancelJob": {
51932
+ "trainingProvider.cleanupJob": {
51687
51933
  capName: "training-provider",
51688
51934
  capScope: "system",
51689
51935
  addonId: null,
51690
51936
  access: "create"
51691
51937
  },
51692
- "trainingProvider.cleanupJob": {
51938
+ "trainingProvider.createEntry": {
51693
51939
  capName: "training-provider",
51694
51940
  capScope: "system",
51695
51941
  addonId: null,
51696
51942
  access: "create"
51697
51943
  },
51944
+ "trainingProvider.deleteEntry": {
51945
+ capName: "training-provider",
51946
+ capScope: "system",
51947
+ addonId: null,
51948
+ access: "delete"
51949
+ },
51698
51950
  "trainingProvider.describe": {
51699
51951
  capName: "training-provider",
51700
51952
  capScope: "system",
51701
51953
  addonId: null,
51702
51954
  access: "view"
51703
51955
  },
51956
+ "trainingProvider.describeTypes": {
51957
+ capName: "training-provider",
51958
+ capScope: "system",
51959
+ addonId: null,
51960
+ access: "view"
51961
+ },
51704
51962
  "trainingProvider.estimateJob": {
51705
51963
  capName: "training-provider",
51706
51964
  capScope: "system",
@@ -51713,6 +51971,12 @@ Object.freeze({
51713
51971
  addonId: null,
51714
51972
  access: "view"
51715
51973
  },
51974
+ "trainingProvider.listEntries": {
51975
+ capName: "training-provider",
51976
+ capScope: "system",
51977
+ addonId: null,
51978
+ access: "view"
51979
+ },
51716
51980
  "trainingProvider.listJobEvents": {
51717
51981
  capName: "training-provider",
51718
51982
  capScope: "system",
@@ -51743,6 +52007,12 @@ Object.freeze({
51743
52007
  addonId: null,
51744
52008
  access: "create"
51745
52009
  },
52010
+ "trainingProvider.updateEntry": {
52011
+ capName: "training-provider",
52012
+ capScope: "system",
52013
+ addonId: null,
52014
+ access: "create"
52015
+ },
51746
52016
  "trainingProvider.uploadDataset": {
51747
52017
  capName: "training-provider",
51748
52018
  capScope: "system",
@@ -54949,6 +55219,11 @@ Object.freeze({
54949
55219
  form: "single",
54950
55220
  optional: false
54951
55221
  }],
55222
+ "osdManager.setSlotCameraEnabled": [{
55223
+ name: "deviceId",
55224
+ form: "single",
55225
+ optional: false
55226
+ }],
54952
55227
  "petFeeder.callPet": [{
54953
55228
  name: "deviceId",
54954
55229
  form: "single",
@@ -55169,6 +55444,11 @@ Object.freeze({
55169
55444
  form: "array",
55170
55445
  optional: false
55171
55446
  }],
55447
+ "pipelineAnalytics.listRetrainCorpusPage": [{
55448
+ name: "deviceIds",
55449
+ form: "array",
55450
+ optional: true
55451
+ }],
55172
55452
  "pipelineAnalytics.listRetrainStaging": [{
55173
55453
  name: "deviceIds",
55174
55454
  form: "array",
@@ -56278,6 +56558,7 @@ Object.freeze({
56278
56558
  });
56279
56559
  Object.freeze({
56280
56560
  "broker": "broker",
56561
+ "calendar-source": "calendar",
56281
56562
  "device-export": "device-export",
56282
56563
  "llm": "ai",
56283
56564
  "mesh-network": "mesh",
@@ -56763,6 +57044,8 @@ var STATE_SUMMARY_VARS = [
56763
57044
  [...RULE_TEXT],
56764
57045
  [...RULE_TEXT],
56765
57046
  [...RULE_TEXT],
57047
+ [...RULE_TEXT],
57048
+ [...RULE_TEXT],
56766
57049
  ([...RULE_TEXT], [...UPDATES]),
56767
57050
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
56768
57051
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),