@mobilerun/sdk 6.1.0 → 6.1.1

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 (275) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/client.d.mts +3 -0
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +3 -0
  5. package/client.d.ts.map +1 -1
  6. package/client.js +3 -0
  7. package/client.js.map +1 -1
  8. package/client.mjs +3 -0
  9. package/client.mjs.map +1 -1
  10. package/package.json +1 -1
  11. package/resources/agents/agents.d.mts +307 -0
  12. package/resources/agents/agents.d.mts.map +1 -0
  13. package/resources/agents/agents.d.ts +307 -0
  14. package/resources/agents/agents.d.ts.map +1 -0
  15. package/resources/agents/agents.js +56 -0
  16. package/resources/agents/agents.js.map +1 -0
  17. package/resources/agents/agents.mjs +51 -0
  18. package/resources/agents/agents.mjs.map +1 -0
  19. package/resources/agents/conversations.d.mts +110 -0
  20. package/resources/agents/conversations.d.mts.map +1 -0
  21. package/resources/agents/conversations.d.ts +110 -0
  22. package/resources/agents/conversations.d.ts.map +1 -0
  23. package/resources/agents/conversations.js +24 -0
  24. package/resources/agents/conversations.js.map +1 -0
  25. package/resources/agents/conversations.mjs +20 -0
  26. package/resources/agents/conversations.mjs.map +1 -0
  27. package/resources/agents/files.d.mts +64 -0
  28. package/resources/agents/files.d.mts.map +1 -0
  29. package/resources/agents/files.d.ts +64 -0
  30. package/resources/agents/files.d.ts.map +1 -0
  31. package/resources/agents/files.js +16 -0
  32. package/resources/agents/files.js.map +1 -0
  33. package/resources/agents/files.mjs +12 -0
  34. package/resources/agents/files.mjs.map +1 -0
  35. package/resources/agents/index.d.mts +7 -0
  36. package/resources/agents/index.d.mts.map +1 -0
  37. package/resources/agents/index.d.ts +7 -0
  38. package/resources/agents/index.d.ts.map +1 -0
  39. package/resources/agents/index.js +17 -0
  40. package/resources/agents/index.js.map +1 -0
  41. package/resources/agents/index.mjs +8 -0
  42. package/resources/agents/index.mjs.map +1 -0
  43. package/resources/agents/profile.d.mts +156 -0
  44. package/resources/agents/profile.d.mts.map +1 -0
  45. package/resources/agents/profile.d.ts +156 -0
  46. package/resources/agents/profile.d.ts.map +1 -0
  47. package/resources/agents/profile.js +19 -0
  48. package/resources/agents/profile.js.map +1 -0
  49. package/resources/agents/profile.mjs +15 -0
  50. package/resources/agents/profile.mjs.map +1 -0
  51. package/resources/agents/requests.d.mts +295 -0
  52. package/resources/agents/requests.d.mts.map +1 -0
  53. package/resources/agents/requests.d.ts +295 -0
  54. package/resources/agents/requests.d.ts.map +1 -0
  55. package/resources/agents/requests.js +42 -0
  56. package/resources/agents/requests.js.map +1 -0
  57. package/resources/agents/requests.mjs +38 -0
  58. package/resources/agents/requests.mjs.map +1 -0
  59. package/resources/agents/routines.d.mts +95 -0
  60. package/resources/agents/routines.d.mts.map +1 -0
  61. package/resources/agents/routines.d.ts +95 -0
  62. package/resources/agents/routines.d.ts.map +1 -0
  63. package/resources/agents/routines.js +26 -0
  64. package/resources/agents/routines.js.map +1 -0
  65. package/resources/agents/routines.mjs +22 -0
  66. package/resources/agents/routines.mjs.map +1 -0
  67. package/resources/agents.d.mts +2 -0
  68. package/resources/agents.d.mts.map +1 -0
  69. package/resources/agents.d.ts +2 -0
  70. package/resources/agents.d.ts.map +1 -0
  71. package/resources/agents.js +6 -0
  72. package/resources/agents.js.map +1 -0
  73. package/resources/agents.mjs +3 -0
  74. package/resources/agents.mjs.map +1 -0
  75. package/resources/assistant/conversations.d.mts +114 -38
  76. package/resources/assistant/conversations.d.mts.map +1 -1
  77. package/resources/assistant/conversations.d.ts +114 -38
  78. package/resources/assistant/conversations.d.ts.map +1 -1
  79. package/resources/assistant/conversations.js +20 -19
  80. package/resources/assistant/conversations.js.map +1 -1
  81. package/resources/assistant/conversations.mjs +20 -19
  82. package/resources/assistant/conversations.mjs.map +1 -1
  83. package/resources/devices/actions.d.mts +3 -4
  84. package/resources/devices/actions.d.mts.map +1 -1
  85. package/resources/devices/actions.d.ts +3 -4
  86. package/resources/devices/actions.d.ts.map +1 -1
  87. package/resources/devices/actions.js +3 -4
  88. package/resources/devices/actions.js.map +1 -1
  89. package/resources/devices/actions.mjs +3 -4
  90. package/resources/devices/actions.mjs.map +1 -1
  91. package/resources/devices/devices.d.mts +9 -0
  92. package/resources/devices/devices.d.mts.map +1 -1
  93. package/resources/devices/devices.d.ts +9 -0
  94. package/resources/devices/devices.d.ts.map +1 -1
  95. package/resources/devices/devices.js +8 -0
  96. package/resources/devices/devices.js.map +1 -1
  97. package/resources/devices/devices.mjs +8 -0
  98. package/resources/devices/devices.mjs.map +1 -1
  99. package/resources/devices/index.d.mts +2 -0
  100. package/resources/devices/index.d.mts.map +1 -1
  101. package/resources/devices/index.d.ts +2 -0
  102. package/resources/devices/index.d.ts.map +1 -1
  103. package/resources/devices/index.js +5 -1
  104. package/resources/devices/index.js.map +1 -1
  105. package/resources/devices/index.mjs +2 -0
  106. package/resources/devices/index.mjs.map +1 -1
  107. package/resources/devices/number-bindings.d.mts +40 -0
  108. package/resources/devices/number-bindings.d.mts.map +1 -0
  109. package/resources/devices/number-bindings.d.ts +40 -0
  110. package/resources/devices/number-bindings.d.ts.map +1 -0
  111. package/resources/devices/number-bindings.js +15 -0
  112. package/resources/devices/number-bindings.js.map +1 -0
  113. package/resources/devices/number-bindings.mjs +11 -0
  114. package/resources/devices/number-bindings.mjs.map +1 -0
  115. package/resources/devices/number.d.mts +141 -0
  116. package/resources/devices/number.d.mts.map +1 -0
  117. package/resources/devices/number.d.ts +141 -0
  118. package/resources/devices/number.d.ts.map +1 -0
  119. package/resources/devices/number.js +68 -0
  120. package/resources/devices/number.js.map +1 -0
  121. package/resources/devices/number.mjs +64 -0
  122. package/resources/devices/number.mjs.map +1 -0
  123. package/resources/files.d.mts +13 -7
  124. package/resources/files.d.mts.map +1 -1
  125. package/resources/files.d.ts +13 -7
  126. package/resources/files.d.ts.map +1 -1
  127. package/resources/files.js +9 -7
  128. package/resources/files.js.map +1 -1
  129. package/resources/files.mjs +9 -7
  130. package/resources/files.mjs.map +1 -1
  131. package/resources/index.d.mts +1 -0
  132. package/resources/index.d.mts.map +1 -1
  133. package/resources/index.d.ts +1 -0
  134. package/resources/index.d.ts.map +1 -1
  135. package/resources/index.js +3 -1
  136. package/resources/index.js.map +1 -1
  137. package/resources/index.mjs +1 -0
  138. package/resources/index.mjs.map +1 -1
  139. package/resources/numbers/messages.d.mts +2 -1
  140. package/resources/numbers/messages.d.mts.map +1 -1
  141. package/resources/numbers/messages.d.ts +2 -1
  142. package/resources/numbers/messages.d.ts.map +1 -1
  143. package/resources/numbers/messages.js +2 -1
  144. package/resources/numbers/messages.js.map +1 -1
  145. package/resources/numbers/messages.mjs +2 -1
  146. package/resources/numbers/messages.mjs.map +1 -1
  147. package/resources/numbers/numbers.d.mts +48 -0
  148. package/resources/numbers/numbers.d.mts.map +1 -1
  149. package/resources/numbers/numbers.d.ts +48 -0
  150. package/resources/numbers/numbers.d.ts.map +1 -1
  151. package/resources/numbers/numbers.js.map +1 -1
  152. package/resources/numbers/numbers.mjs.map +1 -1
  153. package/resources/tasks/tasks.d.mts +24 -5
  154. package/resources/tasks/tasks.d.mts.map +1 -1
  155. package/resources/tasks/tasks.d.ts +24 -5
  156. package/resources/tasks/tasks.d.ts.map +1 -1
  157. package/resources/tasks/tasks.js.map +1 -1
  158. package/resources/tasks/tasks.mjs.map +1 -1
  159. package/resources/workflows/action-catalog.d.mts +56 -8
  160. package/resources/workflows/action-catalog.d.mts.map +1 -1
  161. package/resources/workflows/action-catalog.d.ts +56 -8
  162. package/resources/workflows/action-catalog.d.ts.map +1 -1
  163. package/resources/workflows/action-catalog.js +7 -5
  164. package/resources/workflows/action-catalog.js.map +1 -1
  165. package/resources/workflows/action-catalog.mjs +7 -5
  166. package/resources/workflows/action-catalog.mjs.map +1 -1
  167. package/resources/workflows/actions/actions.d.mts +22 -10
  168. package/resources/workflows/actions/actions.d.mts.map +1 -1
  169. package/resources/workflows/actions/actions.d.ts +22 -10
  170. package/resources/workflows/actions/actions.d.ts.map +1 -1
  171. package/resources/workflows/actions/actions.js +7 -5
  172. package/resources/workflows/actions/actions.js.map +1 -1
  173. package/resources/workflows/actions/actions.mjs +7 -5
  174. package/resources/workflows/actions/actions.mjs.map +1 -1
  175. package/resources/workflows/actions/index.d.mts +1 -1
  176. package/resources/workflows/actions/index.d.mts.map +1 -1
  177. package/resources/workflows/actions/index.d.ts +1 -1
  178. package/resources/workflows/actions/index.d.ts.map +1 -1
  179. package/resources/workflows/actions/index.js.map +1 -1
  180. package/resources/workflows/actions/index.mjs.map +1 -1
  181. package/resources/workflows/actions/services.d.mts +1 -1
  182. package/resources/workflows/actions/services.d.mts.map +1 -1
  183. package/resources/workflows/actions/services.d.ts +1 -1
  184. package/resources/workflows/actions/services.d.ts.map +1 -1
  185. package/resources/workflows/events.d.mts +25 -3
  186. package/resources/workflows/events.d.mts.map +1 -1
  187. package/resources/workflows/events.d.ts +25 -3
  188. package/resources/workflows/events.d.ts.map +1 -1
  189. package/resources/workflows/executions/executions.d.mts +16 -0
  190. package/resources/workflows/executions/executions.d.mts.map +1 -1
  191. package/resources/workflows/executions/executions.d.ts +16 -0
  192. package/resources/workflows/executions/executions.d.ts.map +1 -1
  193. package/resources/workflows/executions/executions.js.map +1 -1
  194. package/resources/workflows/executions/executions.mjs.map +1 -1
  195. package/resources/workflows/flows/flows.d.mts +547 -102
  196. package/resources/workflows/flows/flows.d.mts.map +1 -1
  197. package/resources/workflows/flows/flows.d.ts +547 -102
  198. package/resources/workflows/flows/flows.d.ts.map +1 -1
  199. package/resources/workflows/flows/flows.js +15 -2
  200. package/resources/workflows/flows/flows.js.map +1 -1
  201. package/resources/workflows/flows/flows.mjs +15 -2
  202. package/resources/workflows/flows/flows.mjs.map +1 -1
  203. package/resources/workflows/flows/index.d.mts +2 -1
  204. package/resources/workflows/flows/index.d.mts.map +1 -1
  205. package/resources/workflows/flows/index.d.ts +2 -1
  206. package/resources/workflows/flows/index.d.ts.map +1 -1
  207. package/resources/workflows/flows/index.js +3 -1
  208. package/resources/workflows/flows/index.js.map +1 -1
  209. package/resources/workflows/flows/index.mjs +1 -0
  210. package/resources/workflows/flows/index.mjs.map +1 -1
  211. package/resources/workflows/flows/state.d.mts +65 -0
  212. package/resources/workflows/flows/state.d.mts.map +1 -0
  213. package/resources/workflows/flows/state.d.ts +65 -0
  214. package/resources/workflows/flows/state.d.ts.map +1 -0
  215. package/resources/workflows/flows/state.js +33 -0
  216. package/resources/workflows/flows/state.js.map +1 -0
  217. package/resources/workflows/flows/state.mjs +29 -0
  218. package/resources/workflows/flows/state.mjs.map +1 -0
  219. package/resources/workflows/index.d.mts +3 -3
  220. package/resources/workflows/index.d.mts.map +1 -1
  221. package/resources/workflows/index.d.ts +3 -3
  222. package/resources/workflows/index.d.ts.map +1 -1
  223. package/resources/workflows/index.js.map +1 -1
  224. package/resources/workflows/index.mjs.map +1 -1
  225. package/resources/workflows/triggers.d.mts +40 -5
  226. package/resources/workflows/triggers.d.mts.map +1 -1
  227. package/resources/workflows/triggers.d.ts +40 -5
  228. package/resources/workflows/triggers.d.ts.map +1 -1
  229. package/resources/workflows/triggers.js +12 -3
  230. package/resources/workflows/triggers.js.map +1 -1
  231. package/resources/workflows/triggers.mjs +12 -3
  232. package/resources/workflows/triggers.mjs.map +1 -1
  233. package/resources/workflows/workflows.d.mts +6 -6
  234. package/resources/workflows/workflows.d.mts.map +1 -1
  235. package/resources/workflows/workflows.d.ts +6 -6
  236. package/resources/workflows/workflows.d.ts.map +1 -1
  237. package/resources/workflows/workflows.js.map +1 -1
  238. package/resources/workflows/workflows.mjs.map +1 -1
  239. package/src/client.ts +17 -0
  240. package/src/resources/agents/agents.ts +475 -0
  241. package/src/resources/agents/conversations.ts +205 -0
  242. package/src/resources/agents/files.ts +105 -0
  243. package/src/resources/agents/index.ts +34 -0
  244. package/src/resources/agents/profile.ts +225 -0
  245. package/src/resources/agents/requests.ts +495 -0
  246. package/src/resources/agents/routines.ts +156 -0
  247. package/src/resources/agents.ts +3 -0
  248. package/src/resources/assistant/conversations.ts +146 -39
  249. package/src/resources/devices/actions.ts +3 -4
  250. package/src/resources/devices/devices.ts +38 -0
  251. package/src/resources/devices/index.ts +14 -0
  252. package/src/resources/devices/number-bindings.ts +62 -0
  253. package/src/resources/devices/number.ts +261 -0
  254. package/src/resources/files.ts +17 -7
  255. package/src/resources/index.ts +7 -0
  256. package/src/resources/numbers/messages.ts +2 -1
  257. package/src/resources/numbers/numbers.ts +64 -0
  258. package/src/resources/tasks/tasks.ts +26 -5
  259. package/src/resources/workflows/action-catalog.ts +69 -8
  260. package/src/resources/workflows/actions/actions.ts +29 -10
  261. package/src/resources/workflows/actions/index.ts +1 -0
  262. package/src/resources/workflows/actions/services.ts +1 -1
  263. package/src/resources/workflows/events.ts +32 -2
  264. package/src/resources/workflows/executions/executions.ts +26 -0
  265. package/src/resources/workflows/flows/flows.ts +707 -97
  266. package/src/resources/workflows/flows/index.ts +10 -0
  267. package/src/resources/workflows/flows/state.ts +103 -0
  268. package/src/resources/workflows/index.ts +4 -0
  269. package/src/resources/workflows/triggers.ts +34 -5
  270. package/src/resources/workflows/workflows.ts +8 -0
  271. package/src/version.ts +1 -1
  272. package/version.d.mts +1 -1
  273. package/version.d.ts +1 -1
  274. package/version.js +1 -1
  275. package/version.mjs +1 -1
@@ -13,12 +13,22 @@ import {
13
13
  ActionReplaceResponse,
14
14
  Actions,
15
15
  } from './actions';
16
+ import * as StateAPI from './state';
17
+ import {
18
+ State,
19
+ StateDeleteParams,
20
+ StateDeleteResponse,
21
+ StateListResponse,
22
+ StateListVersionsParams,
23
+ StateListVersionsResponse,
24
+ } from './state';
16
25
  import { APIPromise } from '../../../core/api-promise';
17
26
  import { RequestOptions } from '../../../internal/request-options';
18
27
  import { path } from '../../../internal/utils/path';
19
28
 
20
29
  export class Flows extends APIResource {
21
30
  actions: ActionsAPI.Actions = new ActionsAPI.Actions(this._client);
31
+ state: StateAPI.State = new StateAPI.State(this._client);
22
32
 
23
33
  /**
24
34
  * Create a flow that binds a trigger (`triggerId`) to an ordered list of actions,
@@ -142,7 +152,8 @@ export class Flows extends APIResource {
142
152
  * the trigger conditions.
143
153
  * - `custom`: validates the payload against the custom payload schema (conditions
144
154
  * do not apply).
145
- * - `schedule`: ignores the payload and reports the next fire time.
155
+ * - `schedule`: validates the stored trigger payload and its step references, and
156
+ * reports the next fire time; request payload overrides are ignored.
146
157
  *
147
158
  * The response reports `wouldFire` — whether the flow would actually run right now
148
159
  * — alongside the gates that decide it (enabled, device attached, blocked,
@@ -163,6 +174,18 @@ export class Flows extends APIResource {
163
174
  return this._client.get(path`/flows/${flowID}/repairs`, options);
164
175
  }
165
176
 
177
+ /**
178
+ * Get a self-healing repair episode
179
+ */
180
+ retrieveRepair(
181
+ episodeID: string,
182
+ params: FlowRetrieveRepairParams,
183
+ options?: RequestOptions,
184
+ ): APIPromise<FlowRetrieveRepairResponse> {
185
+ const { flowId } = params;
186
+ return this._client.get(path`/flows/${flowId}/repairs/${episodeID}`, options);
187
+ }
188
+
166
189
  /**
167
190
  * Immediately enqueue one live execution on every device bound to the flow,
168
191
  * regardless of whether its trigger is event-based, custom, or scheduled.
@@ -225,7 +248,8 @@ export class Flows extends APIResource {
225
248
  * - `event`: validates the payload against the event catalog schema and evaluates
226
249
  * the trigger conditions; a failing gate returns 409 `conditions_not_met` with
227
250
  * the dry-run report.
228
- * - `schedule`: the payload is ignored.
251
+ * - `schedule`: uses the stored trigger payload as event.payload; request payload
252
+ * overrides are ignored.
229
253
  */
230
254
  verify(flowID: string, body: FlowVerifyParams, options?: RequestOptions): APIPromise<FlowVerifyResponse> {
231
255
  return this._client.post(path`/flows/${flowID}/verify`, { body, ...options });
@@ -272,8 +296,14 @@ export namespace FlowCreateResponse {
272
296
 
273
297
  lastFailureAt: string | null;
274
298
 
299
+ /**
300
+ * Curated flow failure class. device_unavailable blocks immediately for a
301
+ * terminated device or a device confirmed gone; event deviceState="gone" is
302
+ * triggers-defined for a deleted/not-found device.
303
+ */
275
304
  lastFailureCode:
276
305
  | 'device_not_found'
306
+ | 'device_unavailable'
277
307
  | 'permission_denied'
278
308
  | 'client_error'
279
309
  | 'transient'
@@ -295,6 +325,8 @@ export namespace FlowCreateResponse {
295
325
 
296
326
  ownerId: string;
297
327
 
328
+ ownerWake: 'final' | 'off';
329
+
298
330
  /**
299
331
  * @deprecated Deprecated: use recordingPolicy.mode ("flow" =
300
332
  * recordingEnabled=true, "off" = recordingEnabled=false).
@@ -303,6 +335,12 @@ export namespace FlowCreateResponse {
303
335
 
304
336
  recordingPolicy: Data.RecordingPolicy;
305
337
 
338
+ /**
339
+ * Effective routine result delivery: the stored setting, else message for a chat
340
+ * sink, else none.
341
+ */
342
+ resultDelivery: 'none' | 'message' | 'wake';
343
+
306
344
  selfHealingEnabled: boolean;
307
345
 
308
346
  selfHealingMaxAttempts: number;
@@ -333,7 +371,15 @@ export namespace FlowCreateResponse {
333
371
  destination: 'mobilerun' | 'one_drive' | 'google_drive';
334
372
 
335
373
  /**
336
- * not allowed when destination is mobilerun
374
+ * Absolute destination folder; not allowed when destination is mobilerun. May
375
+ * contain {{meta.<name>}} (for example {{meta.shortDate}} = YYMMDD,
376
+ * {{meta.fileTime}} = HH-mm, in the trigger timezone) and
377
+ * {{event.payload.<field>}} placeholders, resolved once per run so every artifact
378
+ * of that run lands in the same folder. Each substituted value must be a single
379
+ * safe folder name (no "/", "\", "..", control characters); otherwise delivery
380
+ * fails with invalid_delivery_folder. With a placeholder folder, screenshots are
381
+ * delivered directly into the resolved folder; with a static folder they go into a
382
+ * per-run "<flow>-<timestamp>-<id>-screenshots" subfolder.
337
383
  */
338
384
  folder?: string;
339
385
 
@@ -390,12 +436,20 @@ export namespace FlowRetrieveResponse {
390
436
  */
391
437
  enabled: boolean;
392
438
 
439
+ health: Data.Health;
440
+
393
441
  healthMonitoringEnabled: boolean;
394
442
 
395
443
  lastFailureAt: string | null;
396
444
 
445
+ /**
446
+ * Curated flow failure class. device_unavailable blocks immediately for a
447
+ * terminated device or a device confirmed gone; event deviceState="gone" is
448
+ * triggers-defined for a deleted/not-found device.
449
+ */
397
450
  lastFailureCode:
398
451
  | 'device_not_found'
452
+ | 'device_unavailable'
399
453
  | 'permission_denied'
400
454
  | 'client_error'
401
455
  | 'transient'
@@ -417,6 +471,8 @@ export namespace FlowRetrieveResponse {
417
471
 
418
472
  ownerId: string;
419
473
 
474
+ ownerWake: 'final' | 'off';
475
+
420
476
  /**
421
477
  * @deprecated Deprecated: use recordingPolicy.mode ("flow" =
422
478
  * recordingEnabled=true, "off" = recordingEnabled=false).
@@ -425,6 +481,12 @@ export namespace FlowRetrieveResponse {
425
481
 
426
482
  recordingPolicy: Data.RecordingPolicy;
427
483
 
484
+ /**
485
+ * Effective routine result delivery: the stored setting, else message for a chat
486
+ * sink, else none.
487
+ */
488
+ resultDelivery: 'none' | 'message' | 'wake';
489
+
428
490
  selfHealingEnabled: boolean;
429
491
 
430
492
  selfHealingMaxAttempts: number;
@@ -455,7 +517,15 @@ export namespace FlowRetrieveResponse {
455
517
  destination: 'mobilerun' | 'one_drive' | 'google_drive';
456
518
 
457
519
  /**
458
- * not allowed when destination is mobilerun
520
+ * Absolute destination folder; not allowed when destination is mobilerun. May
521
+ * contain {{meta.<name>}} (for example {{meta.shortDate}} = YYMMDD,
522
+ * {{meta.fileTime}} = HH-mm, in the trigger timezone) and
523
+ * {{event.payload.<field>}} placeholders, resolved once per run so every artifact
524
+ * of that run lands in the same folder. Each substituted value must be a single
525
+ * safe folder name (no "/", "\", "..", control characters); otherwise delivery
526
+ * fails with invalid_delivery_folder. With a placeholder folder, screenshots are
527
+ * delivered directly into the resolved folder; with a static folder they go into a
528
+ * per-run "<flow>-<timestamp>-<id>-screenshots" subfolder.
459
529
  */
460
530
  folder?: string;
461
531
 
@@ -470,6 +540,48 @@ export namespace FlowRetrieveResponse {
470
540
  }
471
541
  }
472
542
 
543
+ export interface Health {
544
+ /**
545
+ * Whether automatic health-status transitions are enabled; healthMonitoringEnabled
546
+ * must also be true.
547
+ */
548
+ autoBlockEnabled: boolean;
549
+
550
+ blockThreshold: number;
551
+
552
+ failingThreshold: number;
553
+
554
+ /**
555
+ * Default for new routines; this flow uses selfHealingMaxAttempts.
556
+ */
557
+ maxAttemptsDefault: number;
558
+
559
+ /**
560
+ * Permanent failure classes count toward the thresholds; invalid_config, preflight
561
+ * device_not_found, and device_unavailable with a terminated or confirmed gone
562
+ * device block immediately. Event deviceState="gone" is triggers-defined for a
563
+ * deleted/not-found device. Other device_unavailable states use normal thresholds;
564
+ * transient never counts.
565
+ */
566
+ permanentFailureCodes: Array<
567
+ | 'device_not_found'
568
+ | 'device_unavailable'
569
+ | 'permission_denied'
570
+ | 'client_error'
571
+ | 'transient'
572
+ | 'logic'
573
+ | 'invalid_config'
574
+ | null
575
+ >;
576
+
577
+ /**
578
+ * Configuration eligibility: health monitoring and self-healing are both enabled,
579
+ * and the flow is enabled and not deleted. Actual repair additionally requires an
580
+ * enabled repair worker and an eligible script execution/timeout failure.
581
+ */
582
+ selfHealingEligible: boolean;
583
+ }
584
+
473
585
  export interface RecordingPolicy {
474
586
  mode: 'off' | 'flow' | 'selected_steps';
475
587
  }
@@ -516,8 +628,14 @@ export namespace FlowUpdateResponse {
516
628
 
517
629
  lastFailureAt: string | null;
518
630
 
631
+ /**
632
+ * Curated flow failure class. device_unavailable blocks immediately for a
633
+ * terminated device or a device confirmed gone; event deviceState="gone" is
634
+ * triggers-defined for a deleted/not-found device.
635
+ */
519
636
  lastFailureCode:
520
637
  | 'device_not_found'
638
+ | 'device_unavailable'
521
639
  | 'permission_denied'
522
640
  | 'client_error'
523
641
  | 'transient'
@@ -539,6 +657,8 @@ export namespace FlowUpdateResponse {
539
657
 
540
658
  ownerId: string;
541
659
 
660
+ ownerWake: 'final' | 'off';
661
+
542
662
  /**
543
663
  * @deprecated Deprecated: use recordingPolicy.mode ("flow" =
544
664
  * recordingEnabled=true, "off" = recordingEnabled=false).
@@ -547,6 +667,12 @@ export namespace FlowUpdateResponse {
547
667
 
548
668
  recordingPolicy: Data.RecordingPolicy;
549
669
 
670
+ /**
671
+ * Effective routine result delivery: the stored setting, else message for a chat
672
+ * sink, else none.
673
+ */
674
+ resultDelivery: 'none' | 'message' | 'wake';
675
+
550
676
  selfHealingEnabled: boolean;
551
677
 
552
678
  selfHealingMaxAttempts: number;
@@ -577,7 +703,15 @@ export namespace FlowUpdateResponse {
577
703
  destination: 'mobilerun' | 'one_drive' | 'google_drive';
578
704
 
579
705
  /**
580
- * not allowed when destination is mobilerun
706
+ * Absolute destination folder; not allowed when destination is mobilerun. May
707
+ * contain {{meta.<name>}} (for example {{meta.shortDate}} = YYMMDD,
708
+ * {{meta.fileTime}} = HH-mm, in the trigger timezone) and
709
+ * {{event.payload.<field>}} placeholders, resolved once per run so every artifact
710
+ * of that run lands in the same folder. Each substituted value must be a single
711
+ * safe folder name (no "/", "\", "..", control characters); otherwise delivery
712
+ * fails with invalid_delivery_folder. With a placeholder folder, screenshots are
713
+ * delivered directly into the resolved folder; with a static folder they go into a
714
+ * per-run "<flow>-<timestamp>-<id>-screenshots" subfolder.
581
715
  */
582
716
  folder?: string;
583
717
 
@@ -640,8 +774,14 @@ export namespace FlowListResponse {
640
774
 
641
775
  lastFailureAt: string | null;
642
776
 
777
+ /**
778
+ * Curated flow failure class. device_unavailable blocks immediately for a
779
+ * terminated device or a device confirmed gone; event deviceState="gone" is
780
+ * triggers-defined for a deleted/not-found device.
781
+ */
643
782
  lastFailureCode:
644
783
  | 'device_not_found'
784
+ | 'device_unavailable'
645
785
  | 'permission_denied'
646
786
  | 'client_error'
647
787
  | 'transient'
@@ -663,6 +803,8 @@ export namespace FlowListResponse {
663
803
 
664
804
  ownerId: string;
665
805
 
806
+ ownerWake: 'final' | 'off';
807
+
666
808
  /**
667
809
  * @deprecated Deprecated: use recordingPolicy.mode ("flow" =
668
810
  * recordingEnabled=true, "off" = recordingEnabled=false).
@@ -671,6 +813,12 @@ export namespace FlowListResponse {
671
813
 
672
814
  recordingPolicy: Item.RecordingPolicy;
673
815
 
816
+ /**
817
+ * Effective routine result delivery: the stored setting, else message for a chat
818
+ * sink, else none.
819
+ */
820
+ resultDelivery: 'none' | 'message' | 'wake';
821
+
674
822
  selfHealingEnabled: boolean;
675
823
 
676
824
  selfHealingMaxAttempts: number;
@@ -701,7 +849,15 @@ export namespace FlowListResponse {
701
849
  destination: 'mobilerun' | 'one_drive' | 'google_drive';
702
850
 
703
851
  /**
704
- * not allowed when destination is mobilerun
852
+ * Absolute destination folder; not allowed when destination is mobilerun. May
853
+ * contain {{meta.<name>}} (for example {{meta.shortDate}} = YYMMDD,
854
+ * {{meta.fileTime}} = HH-mm, in the trigger timezone) and
855
+ * {{event.payload.<field>}} placeholders, resolved once per run so every artifact
856
+ * of that run lands in the same folder. Each substituted value must be a single
857
+ * safe folder name (no "/", "\", "..", control characters); otherwise delivery
858
+ * fails with invalid_delivery_folder. With a placeholder folder, screenshots are
859
+ * delivered directly into the resolved folder; with a static folder they go into a
860
+ * per-run "<flow>-<timestamp>-<id>-screenshots" subfolder.
705
861
  */
706
862
  folder?: string;
707
863
 
@@ -766,8 +922,14 @@ export namespace FlowActivateResponse {
766
922
 
767
923
  lastFailureAt: string | null;
768
924
 
925
+ /**
926
+ * Curated flow failure class. device_unavailable blocks immediately for a
927
+ * terminated device or a device confirmed gone; event deviceState="gone" is
928
+ * triggers-defined for a deleted/not-found device.
929
+ */
769
930
  lastFailureCode:
770
931
  | 'device_not_found'
932
+ | 'device_unavailable'
771
933
  | 'permission_denied'
772
934
  | 'client_error'
773
935
  | 'transient'
@@ -789,6 +951,8 @@ export namespace FlowActivateResponse {
789
951
 
790
952
  ownerId: string;
791
953
 
954
+ ownerWake: 'final' | 'off';
955
+
792
956
  /**
793
957
  * @deprecated Deprecated: use recordingPolicy.mode ("flow" =
794
958
  * recordingEnabled=true, "off" = recordingEnabled=false).
@@ -797,6 +961,12 @@ export namespace FlowActivateResponse {
797
961
 
798
962
  recordingPolicy: Data.RecordingPolicy;
799
963
 
964
+ /**
965
+ * Effective routine result delivery: the stored setting, else message for a chat
966
+ * sink, else none.
967
+ */
968
+ resultDelivery: 'none' | 'message' | 'wake';
969
+
800
970
  selfHealingEnabled: boolean;
801
971
 
802
972
  selfHealingMaxAttempts: number;
@@ -827,7 +997,15 @@ export namespace FlowActivateResponse {
827
997
  destination: 'mobilerun' | 'one_drive' | 'google_drive';
828
998
 
829
999
  /**
830
- * not allowed when destination is mobilerun
1000
+ * Absolute destination folder; not allowed when destination is mobilerun. May
1001
+ * contain {{meta.<name>}} (for example {{meta.shortDate}} = YYMMDD,
1002
+ * {{meta.fileTime}} = HH-mm, in the trigger timezone) and
1003
+ * {{event.payload.<field>}} placeholders, resolved once per run so every artifact
1004
+ * of that run lands in the same folder. Each substituted value must be a single
1005
+ * safe folder name (no "/", "\", "..", control characters); otherwise delivery
1006
+ * fails with invalid_delivery_folder. With a placeholder folder, screenshots are
1007
+ * delivered directly into the resolved folder; with a static folder they go into a
1008
+ * per-run "<flow>-<timestamp>-<id>-screenshots" subfolder.
831
1009
  */
832
1010
  folder?: string;
833
1011
 
@@ -902,8 +1080,14 @@ export namespace FlowCloneResponse {
902
1080
 
903
1081
  lastFailureAt: string | null;
904
1082
 
1083
+ /**
1084
+ * Curated flow failure class. device_unavailable blocks immediately for a
1085
+ * terminated device or a device confirmed gone; event deviceState="gone" is
1086
+ * triggers-defined for a deleted/not-found device.
1087
+ */
905
1088
  lastFailureCode:
906
1089
  | 'device_not_found'
1090
+ | 'device_unavailable'
907
1091
  | 'permission_denied'
908
1092
  | 'client_error'
909
1093
  | 'transient'
@@ -925,6 +1109,8 @@ export namespace FlowCloneResponse {
925
1109
 
926
1110
  ownerId: string;
927
1111
 
1112
+ ownerWake: 'final' | 'off';
1113
+
928
1114
  /**
929
1115
  * @deprecated Deprecated: use recordingPolicy.mode ("flow" =
930
1116
  * recordingEnabled=true, "off" = recordingEnabled=false).
@@ -933,6 +1119,12 @@ export namespace FlowCloneResponse {
933
1119
 
934
1120
  recordingPolicy: Data.RecordingPolicy;
935
1121
 
1122
+ /**
1123
+ * Effective routine result delivery: the stored setting, else message for a chat
1124
+ * sink, else none.
1125
+ */
1126
+ resultDelivery: 'none' | 'message' | 'wake';
1127
+
936
1128
  selfHealingEnabled: boolean;
937
1129
 
938
1130
  selfHealingMaxAttempts: number;
@@ -963,7 +1155,15 @@ export namespace FlowCloneResponse {
963
1155
  destination: 'mobilerun' | 'one_drive' | 'google_drive';
964
1156
 
965
1157
  /**
966
- * not allowed when destination is mobilerun
1158
+ * Absolute destination folder; not allowed when destination is mobilerun. May
1159
+ * contain {{meta.<name>}} (for example {{meta.shortDate}} = YYMMDD,
1160
+ * {{meta.fileTime}} = HH-mm, in the trigger timezone) and
1161
+ * {{event.payload.<field>}} placeholders, resolved once per run so every artifact
1162
+ * of that run lands in the same folder. Each substituted value must be a single
1163
+ * safe folder name (no "/", "\", "..", control characters); otherwise delivery
1164
+ * fails with invalid_delivery_folder. With a placeholder folder, screenshots are
1165
+ * delivered directly into the resolved folder; with a static folder they go into a
1166
+ * per-run "<flow>-<timestamp>-<id>-screenshots" subfolder.
967
1167
  */
968
1168
  folder?: string;
969
1169
 
@@ -1062,7 +1262,7 @@ export namespace FlowDryRunResponse {
1062
1262
 
1063
1263
  recordingEnabled: boolean;
1064
1264
 
1065
- service: 'tasks_api' | 'devices_api' | 'agents_api' | 'webhooks' | 'integrations_api';
1265
+ service: 'tasks_api' | 'devices_api' | 'agents_api' | 'webhooks' | 'integrations_api' | 'triggers_api';
1066
1266
 
1067
1267
  /**
1068
1268
  * Nested child actions (loop/branch bodies), each the same shape as a
@@ -1157,6 +1357,64 @@ export namespace FlowListRepairsResponse {
1157
1357
  }
1158
1358
  }
1159
1359
 
1360
+ export interface FlowRetrieveRepairResponse {
1361
+ data: FlowRetrieveRepairResponse.Data;
1362
+ }
1363
+
1364
+ export namespace FlowRetrieveRepairResponse {
1365
+ export interface Data {
1366
+ id: string;
1367
+
1368
+ agentRunId: string | null;
1369
+
1370
+ attempt: number;
1371
+
1372
+ candidateSlug: string;
1373
+
1374
+ chatSessionId: string | null;
1375
+
1376
+ createdAt: string | null;
1377
+
1378
+ deviceId: string | null;
1379
+
1380
+ episode: number;
1381
+
1382
+ error: string | null;
1383
+
1384
+ failedStepIndex: number;
1385
+
1386
+ finishedAt: string | null;
1387
+
1388
+ flowId: string;
1389
+
1390
+ flowStatus: 'healthy' | 'failing' | 'blocked';
1391
+
1392
+ maxAttempts: number;
1393
+
1394
+ originalSlug: string;
1395
+
1396
+ sourceExecutionId: string;
1397
+
1398
+ startedAt: string | null;
1399
+
1400
+ status: 'pending' | 'running' | 'canary' | 'promoting' | 'repaired' | 'failed' | 'escalated';
1401
+
1402
+ updatedAt: string | null;
1403
+
1404
+ verdict: Data.Verdict | null;
1405
+ }
1406
+
1407
+ export namespace Data {
1408
+ export interface Verdict {
1409
+ outcome: 'ok' | 'flaky' | 'broken';
1410
+
1411
+ summary: string;
1412
+
1413
+ reason?: string;
1414
+ }
1415
+ }
1416
+ }
1417
+
1160
1418
  export interface FlowRunResponse {
1161
1419
  data: FlowRunResponse.Data;
1162
1420
  }
@@ -1170,6 +1428,33 @@ export namespace FlowRunResponse {
1170
1428
  * the original run.
1171
1429
  */
1172
1430
  executionIds: Array<string>;
1431
+
1432
+ /**
1433
+ * At least one admitted execution failed queue submission. This is an enqueue
1434
+ * error, not a skip. Keyed runs report prepared executions; post-commit submission
1435
+ * failures are recorded on the execution instead.
1436
+ */
1437
+ enqueueFailed?: true;
1438
+
1439
+ /**
1440
+ * Why no execution was admitted: device_required means no device and actions are
1441
+ * not device-free eligible; flow_disabled means disabled at admission;
1442
+ * flow_unavailable means missing or archived at admission. Blocked flows keep
1443
+ * their existing error response. Manual runs bypass trigger conditions.
1444
+ */
1445
+ skipped?: Data.Skipped;
1446
+ }
1447
+
1448
+ export namespace Data {
1449
+ /**
1450
+ * Why no execution was admitted: device_required means no device and actions are
1451
+ * not device-free eligible; flow_disabled means disabled at admission;
1452
+ * flow_unavailable means missing or archived at admission. Blocked flows keep
1453
+ * their existing error response. Manual runs bypass trigger conditions.
1454
+ */
1455
+ export interface Skipped {
1456
+ reason: 'device_required' | 'flow_disabled' | 'flow_unavailable';
1457
+ }
1173
1458
  }
1174
1459
  }
1175
1460
 
@@ -1206,7 +1491,20 @@ export namespace FlowTemplateContextResponse {
1206
1491
 
1207
1492
  name: string;
1208
1493
 
1209
- shape?: unknown;
1494
+ /**
1495
+ * Known root members; meta lists all execution calendar variables
1496
+ */
1497
+ shape: Array<Root.Shape> | null;
1498
+ }
1499
+
1500
+ export namespace Root {
1501
+ export interface Shape {
1502
+ description: string;
1503
+
1504
+ example: string;
1505
+
1506
+ name: string;
1507
+ }
1210
1508
  }
1211
1509
 
1212
1510
  export interface StepReference {
@@ -1261,8 +1559,14 @@ export namespace FlowUnblockResponse {
1261
1559
 
1262
1560
  lastFailureAt: string | null;
1263
1561
 
1562
+ /**
1563
+ * Curated flow failure class. device_unavailable blocks immediately for a
1564
+ * terminated device or a device confirmed gone; event deviceState="gone" is
1565
+ * triggers-defined for a deleted/not-found device.
1566
+ */
1264
1567
  lastFailureCode:
1265
1568
  | 'device_not_found'
1569
+ | 'device_unavailable'
1266
1570
  | 'permission_denied'
1267
1571
  | 'client_error'
1268
1572
  | 'transient'
@@ -1284,6 +1588,8 @@ export namespace FlowUnblockResponse {
1284
1588
 
1285
1589
  ownerId: string;
1286
1590
 
1591
+ ownerWake: 'final' | 'off';
1592
+
1287
1593
  /**
1288
1594
  * @deprecated Deprecated: use recordingPolicy.mode ("flow" =
1289
1595
  * recordingEnabled=true, "off" = recordingEnabled=false).
@@ -1292,6 +1598,12 @@ export namespace FlowUnblockResponse {
1292
1598
 
1293
1599
  recordingPolicy: Data.RecordingPolicy;
1294
1600
 
1601
+ /**
1602
+ * Effective routine result delivery: the stored setting, else message for a chat
1603
+ * sink, else none.
1604
+ */
1605
+ resultDelivery: 'none' | 'message' | 'wake';
1606
+
1295
1607
  selfHealingEnabled: boolean;
1296
1608
 
1297
1609
  selfHealingMaxAttempts: number;
@@ -1322,7 +1634,15 @@ export namespace FlowUnblockResponse {
1322
1634
  destination: 'mobilerun' | 'one_drive' | 'google_drive';
1323
1635
 
1324
1636
  /**
1325
- * not allowed when destination is mobilerun
1637
+ * Absolute destination folder; not allowed when destination is mobilerun. May
1638
+ * contain {{meta.<name>}} (for example {{meta.shortDate}} = YYMMDD,
1639
+ * {{meta.fileTime}} = HH-mm, in the trigger timezone) and
1640
+ * {{event.payload.<field>}} placeholders, resolved once per run so every artifact
1641
+ * of that run lands in the same folder. Each substituted value must be a single
1642
+ * safe folder name (no "/", "\", "..", control characters); otherwise delivery
1643
+ * fails with invalid_delivery_folder. With a placeholder folder, screenshots are
1644
+ * delivered directly into the resolved folder; with a static folder they go into a
1645
+ * per-run "<flow>-<timestamp>-<id>-screenshots" subfolder.
1326
1646
  */
1327
1647
  folder?: string;
1328
1648
 
@@ -1364,9 +1684,21 @@ export namespace FlowValidateResponse {
1364
1684
 
1365
1685
  message: string;
1366
1686
 
1687
+ actionId?: string;
1688
+
1367
1689
  knownSteps?: Array<string>;
1368
1690
 
1369
1691
  reference?: string;
1692
+
1693
+ repair?: Error.Repair;
1694
+ }
1695
+
1696
+ export namespace Error {
1697
+ export interface Repair {
1698
+ action: 'fix_spec_and_restart' | 'ask_user' | 'retry_later';
1699
+
1700
+ hint: string;
1701
+ }
1370
1702
  }
1371
1703
 
1372
1704
  export interface Warning {
@@ -1440,6 +1772,8 @@ export interface FlowCreateParams {
1440
1772
 
1441
1773
  notifyWebhookId?: string | null;
1442
1774
 
1775
+ ownerWake?: 'final' | 'off';
1776
+
1443
1777
  recordingEnabled?: boolean;
1444
1778
 
1445
1779
  recordingPolicy?: FlowCreateParams.RecordingPolicy;
@@ -1514,7 +1848,15 @@ export namespace FlowCreateParams {
1514
1848
  destination: 'mobilerun' | 'one_drive' | 'google_drive';
1515
1849
 
1516
1850
  /**
1517
- * not allowed when destination is mobilerun
1851
+ * Absolute destination folder; not allowed when destination is mobilerun. May
1852
+ * contain {{meta.<name>}} (for example {{meta.shortDate}} = YYMMDD,
1853
+ * {{meta.fileTime}} = HH-mm, in the trigger timezone) and
1854
+ * {{event.payload.<field>}} placeholders, resolved once per run so every artifact
1855
+ * of that run lands in the same folder. Each substituted value must be a single
1856
+ * safe folder name (no "/", "\", "..", control characters); otherwise delivery
1857
+ * fails with invalid_delivery_folder. With a placeholder folder, screenshots are
1858
+ * delivered directly into the resolved folder; with a static folder they go into a
1859
+ * per-run "<flow>-<timestamp>-<id>-screenshots" subfolder.
1518
1860
  */
1519
1861
  folder?: string;
1520
1862
 
@@ -1562,6 +1904,8 @@ export interface FlowUpdateParams {
1562
1904
 
1563
1905
  notifyWebhookId?: string | null;
1564
1906
 
1907
+ ownerWake?: 'final' | 'off';
1908
+
1565
1909
  /**
1566
1910
  * @deprecated Deprecated compatibility field. true maps to
1567
1911
  * recordingPolicy.mode="flow"; false maps to "off".
@@ -1582,7 +1926,15 @@ export namespace FlowUpdateParams {
1582
1926
  destination: 'mobilerun' | 'one_drive' | 'google_drive';
1583
1927
 
1584
1928
  /**
1585
- * not allowed when destination is mobilerun
1929
+ * Absolute destination folder; not allowed when destination is mobilerun. May
1930
+ * contain {{meta.<name>}} (for example {{meta.shortDate}} = YYMMDD,
1931
+ * {{meta.fileTime}} = HH-mm, in the trigger timezone) and
1932
+ * {{event.payload.<field>}} placeholders, resolved once per run so every artifact
1933
+ * of that run lands in the same folder. Each substituted value must be a single
1934
+ * safe folder name (no "/", "\", "..", control characters); otherwise delivery
1935
+ * fails with invalid_delivery_folder. With a placeholder folder, screenshots are
1936
+ * delivered directly into the resolved folder; with a static folder they go into a
1937
+ * per-run "<flow>-<timestamp>-<id>-screenshots" subfolder.
1586
1938
  */
1587
1939
  folder?: string;
1588
1940
 
@@ -1658,6 +2010,10 @@ export interface FlowDryRunParams {
1658
2010
  payload?: { [key: string]: unknown };
1659
2011
  }
1660
2012
 
2013
+ export interface FlowRetrieveRepairParams {
2014
+ flowId: string;
2015
+ }
2016
+
1661
2017
  export interface FlowRunParams {
1662
2018
  /**
1663
2019
  * Record and keep this run's scripts.run screenshots
@@ -1673,71 +2029,110 @@ export interface FlowTemplateContextParams {
1673
2029
  templateResolutionVersion?: number;
1674
2030
  }
1675
2031
 
1676
- export interface FlowValidateParams {
1677
- actions: Array<FlowValidateParams.FlowActionInput | FlowValidateParams.FlowDraftActionInput>;
2032
+ export type FlowValidateParams = FlowValidateParams.Variant0 | FlowValidateParams.Variant1;
1678
2033
 
1679
- name: string;
2034
+ export declare namespace FlowValidateParams {
2035
+ export interface Variant0 {
2036
+ actions: Array<Variant0.FlowActionInput | Variant0.FlowDraftActionInput>;
1680
2037
 
1681
- cooldownScope?: 'flow' | 'device';
2038
+ name: string;
1682
2039
 
1683
- cooldownSeconds?: number | null;
2040
+ cooldownScope?: 'flow' | 'device';
1684
2041
 
1685
- delivery?: FlowValidateParams.Delivery;
2042
+ cooldownSeconds?: number | null;
1686
2043
 
1687
- description?: string;
2044
+ delivery?: Variant0.Delivery;
1688
2045
 
1689
- deviceIds?: Array<string>;
2046
+ description?: string;
1690
2047
 
1691
- enabled?: boolean;
2048
+ deviceIds?: Array<string>;
1692
2049
 
1693
- healthMonitoringEnabled?: boolean;
2050
+ enabled?: boolean;
1694
2051
 
1695
- notifyOnFailure?: boolean;
2052
+ healthMonitoringEnabled?: boolean;
1696
2053
 
1697
- notifyOnSuccess?: boolean;
2054
+ notifyOnFailure?: boolean;
1698
2055
 
1699
- notifyWebhookId?: string | null;
2056
+ notifyOnSuccess?: boolean;
1700
2057
 
1701
- recordingEnabled?: boolean;
2058
+ notifyWebhookId?: string | null;
1702
2059
 
1703
- recordingPolicy?: FlowValidateParams.RecordingPolicy;
2060
+ ownerWake?: 'final' | 'off';
1704
2061
 
1705
- selfHealingEnabled?: boolean;
2062
+ recordingEnabled?: boolean;
1706
2063
 
1707
- selfHealingMaxAttempts?: number;
2064
+ recordingPolicy?: Variant0.RecordingPolicy;
1708
2065
 
1709
- triggerId?: string;
1710
- }
2066
+ selfHealingEnabled?: boolean;
1711
2067
 
1712
- export namespace FlowValidateParams {
1713
- export interface FlowActionInput {
1714
- actionId: string;
2068
+ selfHealingMaxAttempts?: number;
1715
2069
 
1716
- position: number;
2070
+ triggerId?: string;
2071
+ }
1717
2072
 
1718
- children?: Array<FlowActionInput.Child>;
2073
+ export namespace Variant0 {
2074
+ export interface FlowActionInput {
2075
+ actionId: string;
1719
2076
 
1720
- continueOnError?: boolean;
2077
+ position: number;
1721
2078
 
1722
- /**
1723
- * Stable identifier used by template resolution v2+ to address this step as
1724
- * {{key.field}}. Omitted keys are derived from the step name whenever a flow is
1725
- * created. For template resolution v3, replacing an existing flow's full action
1726
- * tree requires every step to carry an explicit key — a missing key is rejected
1727
- * there, not derived, so a name change can never silently move a step's key.
1728
- */
1729
- key?: string;
2079
+ children?: Array<FlowActionInput.Child>;
1730
2080
 
1731
- nameOverride?: string;
2081
+ continueOnError?: boolean;
1732
2082
 
1733
- overrides?: FlowActionInput.Overrides | null;
2083
+ /**
2084
+ * Stable identifier used by template resolution v2+ to address this step as
2085
+ * {{key.field}}. Omitted keys are derived from the step name whenever a flow is
2086
+ * created. For template resolution v3, replacing an existing flow's full action
2087
+ * tree requires every step to carry an explicit key — a missing key is rejected
2088
+ * there, not derived, so a name change can never silently move a step's key.
2089
+ */
2090
+ key?: string;
1734
2091
 
1735
- recordingEnabled?: boolean;
1736
- }
2092
+ nameOverride?: string;
1737
2093
 
1738
- export namespace FlowActionInput {
1739
- export interface Child {
1740
- actionId: string;
2094
+ overrides?: FlowActionInput.Overrides | null;
2095
+
2096
+ recordingEnabled?: boolean;
2097
+ }
2098
+
2099
+ export namespace FlowActionInput {
2100
+ export interface Child {
2101
+ actionId: string;
2102
+
2103
+ position: number;
2104
+
2105
+ continueOnError?: boolean;
2106
+
2107
+ /**
2108
+ * Stable identifier used by template resolution v2+ to address this step as
2109
+ * {{key.field}}. Omitted keys are derived from the step name whenever a flow is
2110
+ * created. For template resolution v3, replacing an existing flow's full action
2111
+ * tree requires every step to carry an explicit key — a missing key is rejected
2112
+ * there, not derived, so a name change can never silently move a step's key.
2113
+ */
2114
+ key?: string;
2115
+
2116
+ nameOverride?: string;
2117
+
2118
+ overrides?: Child.Overrides | null;
2119
+
2120
+ recordingEnabled?: boolean;
2121
+ }
2122
+
2123
+ export namespace Child {
2124
+ export interface Overrides {
2125
+ params?: { [key: string]: unknown };
2126
+ }
2127
+ }
2128
+
2129
+ export interface Overrides {
2130
+ params?: { [key: string]: unknown };
2131
+ }
2132
+ }
2133
+
2134
+ export interface FlowDraftActionInput {
2135
+ draft: FlowDraftActionInput.Draft;
1741
2136
 
1742
2137
  position: number;
1743
2138
 
@@ -1754,82 +2149,285 @@ export namespace FlowValidateParams {
1754
2149
 
1755
2150
  nameOverride?: string;
1756
2151
 
1757
- overrides?: Child.Overrides | null;
2152
+ overrides?: FlowDraftActionInput.Overrides | null;
1758
2153
 
1759
2154
  recordingEnabled?: boolean;
1760
2155
  }
1761
2156
 
1762
- export namespace Child {
2157
+ export namespace FlowDraftActionInput {
2158
+ export interface Draft {
2159
+ method: string;
2160
+
2161
+ name: string;
2162
+
2163
+ service: string;
2164
+
2165
+ params?: { [key: string]: unknown };
2166
+ }
2167
+
1763
2168
  export interface Overrides {
1764
2169
  params?: { [key: string]: unknown };
1765
2170
  }
1766
2171
  }
1767
2172
 
1768
- export interface Overrides {
1769
- params?: { [key: string]: unknown };
1770
- }
1771
- }
2173
+ export interface Delivery {
2174
+ destination: 'mobilerun' | 'one_drive' | 'google_drive';
1772
2175
 
1773
- export interface FlowDraftActionInput {
1774
- draft: FlowDraftActionInput.Draft;
2176
+ /**
2177
+ * Absolute destination folder; not allowed when destination is mobilerun. May
2178
+ * contain {{meta.<name>}} (for example {{meta.shortDate}} = YYMMDD,
2179
+ * {{meta.fileTime}} = HH-mm, in the trigger timezone) and
2180
+ * {{event.payload.<field>}} placeholders, resolved once per run so every artifact
2181
+ * of that run lands in the same folder. Each substituted value must be a single
2182
+ * safe folder name (no "/", "\", "..", control characters); otherwise delivery
2183
+ * fails with invalid_delivery_folder. With a placeholder folder, screenshots are
2184
+ * delivered directly into the resolved folder; with a static folder they go into a
2185
+ * per-run "<flow>-<timestamp>-<id>-screenshots" subfolder.
2186
+ */
2187
+ folder?: string;
1775
2188
 
1776
- position: number;
2189
+ recording?: Delivery.Recording;
1777
2190
 
1778
- continueOnError?: boolean;
2191
+ screenshots?: unknown;
2192
+ }
1779
2193
 
1780
- /**
1781
- * Stable identifier used by template resolution v2+ to address this step as
1782
- * {{key.field}}. Omitted keys are derived from the step name whenever a flow is
1783
- * created. For template resolution v3, replacing an existing flow's full action
1784
- * tree requires every step to carry an explicit key — a missing key is rejected
1785
- * there, not derived, so a name change can never silently move a step's key.
1786
- */
1787
- key?: string;
2194
+ export namespace Delivery {
2195
+ export interface Recording {
2196
+ filename: string;
2197
+ }
2198
+ }
1788
2199
 
1789
- nameOverride?: string;
2200
+ export interface RecordingPolicy {
2201
+ mode: 'off' | 'flow' | 'selected_steps';
2202
+ }
2203
+ }
1790
2204
 
1791
- overrides?: FlowDraftActionInput.Overrides | null;
2205
+ export interface Variant1 {
2206
+ draft: Variant1.Draft;
1792
2207
 
1793
- recordingEnabled?: boolean;
2208
+ agentId?: string;
2209
+
2210
+ contract?: Variant1.Contract;
2211
+
2212
+ verify?: Variant1.Verify;
1794
2213
  }
1795
2214
 
1796
- export namespace FlowDraftActionInput {
2215
+ export namespace Variant1 {
1797
2216
  export interface Draft {
1798
- method: string;
2217
+ actions: Array<Draft.Action>;
1799
2218
 
1800
- name: string;
2219
+ flow: Draft.Flow;
1801
2220
 
1802
- service: string;
2221
+ trigger: { [key: string]: unknown };
2222
+ }
1803
2223
 
1804
- params?: { [key: string]: unknown };
2224
+ export namespace Draft {
2225
+ export interface Action {
2226
+ catalogEntryId: string;
2227
+
2228
+ name: string;
2229
+
2230
+ position: number;
2231
+
2232
+ role: string;
2233
+
2234
+ description?: string;
2235
+
2236
+ params?: { [key: string]: unknown };
2237
+ }
2238
+
2239
+ export interface Flow {
2240
+ cooldownScope?: 'flow' | 'device';
2241
+
2242
+ cooldownSeconds?: number | null;
2243
+
2244
+ delivery?: Flow.Delivery;
2245
+
2246
+ description?: string;
2247
+
2248
+ deviceIds?: Array<string>;
2249
+
2250
+ executionMode?: 'device' | 'cloud';
2251
+
2252
+ healthMonitoringEnabled?: boolean;
2253
+
2254
+ name?: string;
2255
+
2256
+ recordingPolicy?: Flow.RecordingPolicy;
2257
+
2258
+ selfHealingEnabled?: boolean;
2259
+
2260
+ selfHealingMaxAttempts?: number;
2261
+ }
2262
+
2263
+ export namespace Flow {
2264
+ export interface Delivery {
2265
+ destination: 'mobilerun' | 'one_drive' | 'google_drive';
2266
+
2267
+ /**
2268
+ * Absolute destination folder; not allowed when destination is mobilerun. May
2269
+ * contain {{meta.<name>}} (for example {{meta.shortDate}} = YYMMDD,
2270
+ * {{meta.fileTime}} = HH-mm, in the trigger timezone) and
2271
+ * {{event.payload.<field>}} placeholders, resolved once per run so every artifact
2272
+ * of that run lands in the same folder. Each substituted value must be a single
2273
+ * safe folder name (no "/", "\", "..", control characters); otherwise delivery
2274
+ * fails with invalid_delivery_folder. With a placeholder folder, screenshots are
2275
+ * delivered directly into the resolved folder; with a static folder they go into a
2276
+ * per-run "<flow>-<timestamp>-<id>-screenshots" subfolder.
2277
+ */
2278
+ folder?: string;
2279
+
2280
+ recording?: Delivery.Recording;
2281
+
2282
+ screenshots?: unknown;
2283
+ }
2284
+
2285
+ export namespace Delivery {
2286
+ export interface Recording {
2287
+ filename: string;
2288
+ }
2289
+ }
2290
+
2291
+ export interface RecordingPolicy {
2292
+ mode: 'off' | 'flow' | 'selected_steps';
2293
+ }
2294
+ }
1805
2295
  }
1806
2296
 
1807
- export interface Overrides {
1808
- params?: { [key: string]: unknown };
2297
+ export interface Contract {
2298
+ /**
2299
+ * Required without profile. Ignored with agent_routine; derived from
2300
+ * meta.sink.type.
2301
+ */
2302
+ deliverable?: 'none' | 'file' | 'chat' | 'integration';
2303
+
2304
+ /**
2305
+ * Ignored with agent_routine; derived from the action graph.
2306
+ */
2307
+ integrationRole?: string;
2308
+
2309
+ meta?: Contract.Meta;
2310
+
2311
+ /**
2312
+ * Ignored with agent_routine; derived from the action graph.
2313
+ */
2314
+ producerRoles?: Array<string>;
2315
+
2316
+ profile?: 'agent_routine';
2317
+
2318
+ slug?: string;
2319
+
2320
+ /**
2321
+ * Ignored with agent_routine; derived from the action graph.
2322
+ */
2323
+ uploadRole?: string;
1809
2324
  }
1810
- }
1811
2325
 
1812
- export interface Delivery {
1813
- destination: 'mobilerun' | 'one_drive' | 'google_drive';
2326
+ export namespace Contract {
2327
+ export interface Meta {
2328
+ flow: Meta.Flow;
1814
2329
 
1815
- /**
1816
- * not allowed when destination is mobilerun
1817
- */
1818
- folder?: string;
2330
+ sink: Meta.Sink;
1819
2331
 
1820
- recording?: Delivery.Recording;
2332
+ timezone: string | null;
1821
2333
 
1822
- screenshots?: unknown;
1823
- }
2334
+ trigger: Meta.Trigger;
1824
2335
 
1825
- export namespace Delivery {
1826
- export interface Recording {
1827
- filename: string;
2336
+ verification: 'rules' | 'agent_review' | 'rules_then_review' | 'none';
2337
+
2338
+ cloudActions?: Array<Meta.CloudAction>;
2339
+
2340
+ outputFilename?: string | null;
2341
+ }
2342
+
2343
+ export namespace Meta {
2344
+ export interface Flow {
2345
+ healthMonitoringEnabled: boolean;
2346
+
2347
+ selfHealingEnabled: boolean;
2348
+
2349
+ selfHealingMaxAttempts: number;
2350
+
2351
+ recordingMode?: 'off' | 'flow' | 'selected_steps';
2352
+
2353
+ resultDelivery?: 'none' | 'message' | 'wake';
2354
+ }
2355
+
2356
+ export interface Sink {
2357
+ type: 'chat' | 'file' | 'webhook';
2358
+
2359
+ endpointId?: string | null;
2360
+ }
2361
+
2362
+ export interface Trigger {
2363
+ /**
2364
+ * Accepted for compatibility; derived from trigger.type with agent_routine.
2365
+ */
2366
+ activation: 'event' | 'schedule' | 'custom';
2367
+
2368
+ cadence: string | null;
2369
+
2370
+ eventType: string | null;
2371
+
2372
+ scheduleRule: Trigger.ScheduleRule;
2373
+
2374
+ timezone: string | null;
2375
+
2376
+ type: 'schedule' | 'app_event' | 'device_event' | 'platform_event' | 'custom';
2377
+ }
2378
+
2379
+ export namespace Trigger {
2380
+ export interface ScheduleRule {
2381
+ type: 'once' | 'cron' | 'recurring';
2382
+
2383
+ /**
2384
+ * ISO 8601 datetime (for type=once)
2385
+ */
2386
+ dateTime?: string;
2387
+
2388
+ /**
2389
+ * Cron expression (for type=cron)
2390
+ */
2391
+ expression?: string;
2392
+
2393
+ /**
2394
+ * Optional per-occurrence random window around the nominal schedule time
2395
+ */
2396
+ jitter?: ScheduleRule.Jitter;
2397
+
2398
+ /**
2399
+ * RRULE string (for type=recurring)
2400
+ */
2401
+ rrule?: string;
2402
+
2403
+ [k: string]: unknown;
2404
+ }
2405
+
2406
+ export namespace ScheduleRule {
2407
+ /**
2408
+ * Optional per-occurrence random window around the nominal schedule time
2409
+ */
2410
+ export interface Jitter {
2411
+ afterMinutes?: number;
2412
+
2413
+ beforeMinutes?: number;
2414
+ }
2415
+ }
2416
+ }
2417
+
2418
+ export interface CloudAction {
2419
+ method: string;
2420
+
2421
+ role: string;
2422
+ }
2423
+ }
1828
2424
  }
1829
- }
1830
2425
 
1831
- export interface RecordingPolicy {
1832
- mode: 'off' | 'flow' | 'selected_steps';
2426
+ export interface Verify {
2427
+ deviceId?: string;
2428
+
2429
+ payload?: { [key: string]: unknown };
2430
+ }
1833
2431
  }
1834
2432
  }
1835
2433
 
@@ -1852,6 +2450,7 @@ export interface FlowVerifyParams {
1852
2450
  }
1853
2451
 
1854
2452
  Flows.Actions = Actions;
2453
+ Flows.State = State;
1855
2454
 
1856
2455
  export declare namespace Flows {
1857
2456
  export {
@@ -1866,6 +2465,7 @@ export declare namespace Flows {
1866
2465
  type FlowDeliveryOptionsResponse as FlowDeliveryOptionsResponse,
1867
2466
  type FlowDryRunResponse as FlowDryRunResponse,
1868
2467
  type FlowListRepairsResponse as FlowListRepairsResponse,
2468
+ type FlowRetrieveRepairResponse as FlowRetrieveRepairResponse,
1869
2469
  type FlowRunResponse as FlowRunResponse,
1870
2470
  type FlowTemplateContextResponse as FlowTemplateContextResponse,
1871
2471
  type FlowUnblockResponse as FlowUnblockResponse,
@@ -1878,6 +2478,7 @@ export declare namespace Flows {
1878
2478
  type FlowCapacityParams as FlowCapacityParams,
1879
2479
  type FlowCloneParams as FlowCloneParams,
1880
2480
  type FlowDryRunParams as FlowDryRunParams,
2481
+ type FlowRetrieveRepairParams as FlowRetrieveRepairParams,
1881
2482
  type FlowRunParams as FlowRunParams,
1882
2483
  type FlowTemplateContextParams as FlowTemplateContextParams,
1883
2484
  type FlowValidateParams as FlowValidateParams,
@@ -1894,4 +2495,13 @@ export declare namespace Flows {
1894
2495
  type ActionRemoveParams as ActionRemoveParams,
1895
2496
  type ActionReplaceParams as ActionReplaceParams,
1896
2497
  };
2498
+
2499
+ export {
2500
+ State as State,
2501
+ type StateListResponse as StateListResponse,
2502
+ type StateDeleteResponse as StateDeleteResponse,
2503
+ type StateListVersionsResponse as StateListVersionsResponse,
2504
+ type StateDeleteParams as StateDeleteParams,
2505
+ type StateListVersionsParams as StateListVersionsParams,
2506
+ };
1897
2507
  }