@camstack/types 1.2.452 → 1.2.454

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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.2.454] - 2026-10-31
11
+
12
+ ### Changed
13
+
14
+ - Remote layout groups accept an optional size and hideTitle for dividers
15
+
16
+ ## [1.2.453] - 2026-10-30
17
+
18
+ ### Changed
19
+
20
+ - Terminal instances report nodeInCluster and updateInstance accepts targetNodeId to re-point an instance.
21
+ - Notification targets pick a broker and list their options inside the add/edit form; the page-wide Find devices dialog is gone
22
+
10
23
  ## [1.2.452] - 2026-10-30
11
24
 
12
25
  ### Added
@@ -40,6 +40,7 @@ declare const TerminalInstanceInfoSchema: z.ZodObject<{
40
40
  instanceId: z.ZodString;
41
41
  cameraStableId: z.ZodString;
42
42
  nodeId: z.ZodString;
43
+ nodeInCluster: z.ZodBoolean;
43
44
  profileId: z.ZodString;
44
45
  profileLabel: z.ZodString;
45
46
  name: z.ZodString;
@@ -111,6 +112,7 @@ export declare const terminalSessionCapability: {
111
112
  instanceId: z.ZodString;
112
113
  cameraStableId: z.ZodString;
113
114
  nodeId: z.ZodString;
115
+ nodeInCluster: z.ZodBoolean;
114
116
  profileId: z.ZodString;
115
117
  profileLabel: z.ZodString;
116
118
  name: z.ZodString;
@@ -134,6 +136,7 @@ export declare const terminalSessionCapability: {
134
136
  instanceId: z.ZodString;
135
137
  cameraStableId: z.ZodString;
136
138
  nodeId: z.ZodString;
139
+ nodeInCluster: z.ZodBoolean;
137
140
  profileId: z.ZodString;
138
141
  profileLabel: z.ZodString;
139
142
  name: z.ZodString;
@@ -146,6 +149,7 @@ export declare const terminalSessionCapability: {
146
149
  }, z.core.$strip>, "mutation">;
147
150
  readonly updateInstance: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
148
151
  instanceId: z.ZodString;
152
+ targetNodeId: z.ZodOptional<z.ZodString>;
149
153
  name: z.ZodOptional<z.ZodString>;
150
154
  executable: z.ZodOptional<z.ZodString>;
151
155
  args: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -156,6 +160,7 @@ export declare const terminalSessionCapability: {
156
160
  instanceId: z.ZodString;
157
161
  cameraStableId: z.ZodString;
158
162
  nodeId: z.ZodString;
163
+ nodeInCluster: z.ZodBoolean;
159
164
  profileId: z.ZodString;
160
165
  profileLabel: z.ZodString;
161
166
  name: z.ZodString;
@@ -176,6 +181,7 @@ export declare const terminalSessionCapability: {
176
181
  instanceId: z.ZodString;
177
182
  cameraStableId: z.ZodString;
178
183
  nodeId: z.ZodString;
184
+ nodeInCluster: z.ZodBoolean;
179
185
  profileId: z.ZodString;
180
186
  profileLabel: z.ZodString;
181
187
  name: z.ZodString;
@@ -203,6 +209,7 @@ export declare const terminalSessionCapability: {
203
209
  instanceId: z.ZodString;
204
210
  cameraStableId: z.ZodString;
205
211
  nodeId: z.ZodString;
212
+ nodeInCluster: z.ZodBoolean;
206
213
  profileId: z.ZodString;
207
214
  profileLabel: z.ZodString;
208
215
  name: z.ZodString;
package/dist/index.js CHANGED
@@ -63448,6 +63448,12 @@ var TerminalInstanceInfoSchema = zod.z.object({
63448
63448
  instanceId: zod.z.string(),
63449
63449
  cameraStableId: zod.z.string(),
63450
63450
  nodeId: zod.z.string(),
63451
+ /**
63452
+ * False while the node the instance is bound to is not in the cluster
63453
+ * topology (forgotten, renamed, re-paired). The instance is kept; the
63454
+ * operator re-points it with `updateInstance({ targetNodeId })`.
63455
+ */
63456
+ nodeInCluster: zod.z.boolean(),
63451
63457
  profileId: zod.z.string(),
63452
63458
  profileLabel: zod.z.string(),
63453
63459
  name: zod.z.string(),
@@ -63514,6 +63520,8 @@ var terminalSessionCapability = {
63514
63520
  }),
63515
63521
  updateInstance: require_sleep.method(zod.z.object({
63516
63522
  instanceId: zod.z.string().min(1),
63523
+ /** Re-point the instance to another node; the profile must exist there. */
63524
+ targetNodeId: zod.z.string().min(1).max(256).optional(),
63517
63525
  name: zod.z.string().trim().min(1).max(160).optional(),
63518
63526
  executable: zod.z.string().max(1024).optional(),
63519
63527
  args: zod.z.array(zod.z.string().max(2048)).max(64).optional(),
@@ -67705,7 +67713,14 @@ var RemoteLayoutGroupSchema = zod.z.object({
67705
67713
  col: zod.z.number().int().min(0).max(24),
67706
67714
  rowSpan: zod.z.number().int().min(1).max(24),
67707
67715
  colSpan: zod.z.number().int().min(1).max(24),
67708
- title: zod.z.string().min(1).max(40).optional()
67716
+ title: zod.z.string().min(1).max(40).optional(),
67717
+ /**
67718
+ * How much room a divider takes: `compact` (the default) is a slim rule,
67719
+ * `normal` a full grid row. Other frames ignore it.
67720
+ */
67721
+ size: zod.z.enum(["compact", "normal"]).optional(),
67722
+ /** Keep the title in the layout but draw only the rule. */
67723
+ hideTitle: zod.z.boolean().optional()
67709
67724
  });
67710
67725
  function rectsOverlap(a, b) {
67711
67726
  return a.row < b.row + b.rowSpan && b.row < a.row + a.rowSpan && a.col < b.col + b.colSpan && b.col < a.col + a.colSpan;
package/dist/index.mjs CHANGED
@@ -63447,6 +63447,12 @@ var TerminalInstanceInfoSchema = z.object({
63447
63447
  instanceId: z.string(),
63448
63448
  cameraStableId: z.string(),
63449
63449
  nodeId: z.string(),
63450
+ /**
63451
+ * False while the node the instance is bound to is not in the cluster
63452
+ * topology (forgotten, renamed, re-paired). The instance is kept; the
63453
+ * operator re-points it with `updateInstance({ targetNodeId })`.
63454
+ */
63455
+ nodeInCluster: z.boolean(),
63450
63456
  profileId: z.string(),
63451
63457
  profileLabel: z.string(),
63452
63458
  name: z.string(),
@@ -63513,6 +63519,8 @@ var terminalSessionCapability = {
63513
63519
  }),
63514
63520
  updateInstance: method(z.object({
63515
63521
  instanceId: z.string().min(1),
63522
+ /** Re-point the instance to another node; the profile must exist there. */
63523
+ targetNodeId: z.string().min(1).max(256).optional(),
63516
63524
  name: z.string().trim().min(1).max(160).optional(),
63517
63525
  executable: z.string().max(1024).optional(),
63518
63526
  args: z.array(z.string().max(2048)).max(64).optional(),
@@ -67704,7 +67712,14 @@ var RemoteLayoutGroupSchema = z.object({
67704
67712
  col: z.number().int().min(0).max(24),
67705
67713
  rowSpan: z.number().int().min(1).max(24),
67706
67714
  colSpan: z.number().int().min(1).max(24),
67707
- title: z.string().min(1).max(40).optional()
67715
+ title: z.string().min(1).max(40).optional(),
67716
+ /**
67717
+ * How much room a divider takes: `compact` (the default) is a slim rule,
67718
+ * `normal` a full grid row. Other frames ignore it.
67719
+ */
67720
+ size: z.enum(["compact", "normal"]).optional(),
67721
+ /** Keep the title in the layout but draw only the rule. */
67722
+ hideTitle: z.boolean().optional()
67708
67723
  });
67709
67724
  function rectsOverlap(a, b) {
67710
67725
  return a.row < b.row + b.rowSpan && b.row < a.row + a.rowSpan && a.col < b.col + b.colSpan && b.col < a.col + a.colSpan;
@@ -86,7 +86,7 @@ export interface ConfigSection {
86
86
  readonly immediate?: boolean;
87
87
  readonly fields: readonly ConfigField[];
88
88
  }
89
- export type ConfigField = ConfigTextField | ConfigNumberField | ConfigBooleanField | ConfigSelectField | ConfigMultiSelectField | ConfigTimezoneField | ConfigDateTimeField | ConfigColorField | ConfigIconField | ConfigPasswordField | ConfigTextAreaField | ConfigSliderField | ConfigTagsField | ConfigScheduleField | ConfigGroupField | ConfigSubTabsField | ConfigSeparatorField | ConfigInfoField | ConfigQrCodeField | ConfigObjectArrayField | ConfigEditableArrayField | ConfigModelSelectorField | ConfigStorageLocationField | ConfigProbeField | ConfigButtonField | ConfigNodeSelectField | ConfigNodeMultiSelectField | ConfigDeviceSelectField | ConfigDeviceMultiSelectField | ConfigNotificationTargetSelectField | ConfigNotificationTargetMultiSelectField | ConfigWidgetField | ConfigAddonActionSelectField | ConfigAddonActionButtonField | ConfigDeviceActionButtonField | ConfigAccountSignInField | ConfigSecretPresenceField;
89
+ export type ConfigField = ConfigTextField | ConfigNumberField | ConfigBooleanField | ConfigSelectField | ConfigMultiSelectField | ConfigTimezoneField | ConfigDateTimeField | ConfigColorField | ConfigIconField | ConfigPasswordField | ConfigTextAreaField | ConfigSliderField | ConfigTagsField | ConfigScheduleField | ConfigGroupField | ConfigSubTabsField | ConfigSeparatorField | ConfigInfoField | ConfigQrCodeField | ConfigObjectArrayField | ConfigEditableArrayField | ConfigModelSelectorField | ConfigStorageLocationField | ConfigProbeField | ConfigButtonField | ConfigNodeSelectField | ConfigNodeMultiSelectField | ConfigDeviceSelectField | ConfigDeviceMultiSelectField | ConfigNotificationTargetSelectField | ConfigNotificationTargetMultiSelectField | ConfigBrokerSelectField | ConfigWidgetField | ConfigAddonActionSelectField | ConfigAddonActionButtonField | ConfigDeviceActionButtonField | ConfigAccountSignInField | ConfigSecretPresenceField;
90
90
  /**
91
91
  * Per-MODEL applicability of a pipeline-step setting (D214).
92
92
  *
@@ -385,6 +385,27 @@ export interface ConfigSelectField extends ConfigFieldBase {
385
385
  */
386
386
  optionsFrom?: string;
387
387
  dependsOn?: Record<string, unknown>;
388
+ /**
389
+ * Options fetched from the provider of a notification kind once what it needs
390
+ * has been entered. See {@link ConfigDiscoverOptions}. Free text stays
391
+ * possible when the fetch fails or answers nothing.
392
+ */
393
+ discoverOptions?: ConfigDiscoverOptions;
394
+ }
395
+ /**
396
+ * A select whose options are the candidates a notification kind's
397
+ * `discoverTargets` answers for the form's CURRENT values.
398
+ *
399
+ * Nothing is fetched until every field in `dependsOn` has a value (a broker
400
+ * picked, a token typed), so a credential-gated kind is never asked without its
401
+ * credentials. A candidate becomes an option: value = `candidate.config[<this
402
+ * field's key>]`, label = `candidate.suggestedName`.
403
+ */
404
+ export interface ConfigDiscoverOptions {
405
+ /** The notification kind whose provider answers the discovery. */
406
+ readonly kind: string;
407
+ /** Form keys that must all be non-empty before the first fetch; sent as `config`. */
408
+ readonly dependsOn: readonly string[];
388
409
  }
389
410
  export interface ConfigMultiSelectField extends ConfigFieldBase {
390
411
  type: 'multiselect';
@@ -520,6 +541,16 @@ export interface ConfigDeviceMultiSelectField extends ConfigFieldBase {
520
541
  export interface ConfigNotificationTargetSelectField extends ConfigFieldBase {
521
542
  type: 'notification-target-select';
522
543
  }
544
+ /**
545
+ * Pick an existing broker of one kind, or create one in place. Stored value is
546
+ * the broker id string. The host mounts the picker (it owns the sign-in
547
+ * dialogs); without one the field lists the brokers without "Create new".
548
+ */
549
+ export interface ConfigBrokerSelectField extends ConfigFieldBase {
550
+ type: 'broker-select';
551
+ /** The broker kind to list and to create. */
552
+ brokerKind: string;
553
+ }
523
554
  /**
524
555
  * Pick MULTIPLE `notification-output` targets. Stored value is a `string[]`
525
556
  * of target ids.
@@ -1136,6 +1167,8 @@ export type ConfigFieldWithValue = (ConfigTextField & {
1136
1167
  readonly value: unknown;
1137
1168
  }) | (ConfigNotificationTargetMultiSelectField & {
1138
1169
  readonly value: unknown;
1170
+ }) | (ConfigBrokerSelectField & {
1171
+ readonly value: unknown;
1139
1172
  }) | ConfigWidgetField | (ConfigAddonActionSelectField & {
1140
1173
  readonly value: unknown;
1141
1174
  }) | ConfigAddonActionButtonField | ConfigDeviceActionButtonField | ConfigAccountSignInField | ConfigSecretPresenceField;
@@ -176,6 +176,11 @@ export declare const RemoteLayoutGroupSchema: z.ZodObject<{
176
176
  rowSpan: z.ZodNumber;
177
177
  colSpan: z.ZodNumber;
178
178
  title: z.ZodOptional<z.ZodString>;
179
+ size: z.ZodOptional<z.ZodEnum<{
180
+ compact: "compact";
181
+ normal: "normal";
182
+ }>>;
183
+ hideTitle: z.ZodOptional<z.ZodBoolean>;
179
184
  }, z.core.$strip>;
180
185
  export type RemoteLayoutGroup = z.infer<typeof RemoteLayoutGroupSchema>;
181
186
  export interface LayoutRect {
@@ -232,6 +237,11 @@ export declare const RemoteLayoutPayloadSchema: z.ZodObject<{
232
237
  rowSpan: z.ZodNumber;
233
238
  colSpan: z.ZodNumber;
234
239
  title: z.ZodOptional<z.ZodString>;
240
+ size: z.ZodOptional<z.ZodEnum<{
241
+ compact: "compact";
242
+ normal: "normal";
243
+ }>>;
244
+ hideTitle: z.ZodOptional<z.ZodBoolean>;
235
245
  }, z.core.$strip>>>;
236
246
  }, z.core.$strip>;
237
247
  export type RemoteLayoutPayload = z.infer<typeof RemoteLayoutPayloadSchema>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.452",
3
+ "version": "1.2.454",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",