toolroll 0.9.34 → 0.9.36

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 (52) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +7 -0
  3. package/dist/assignment.d.ts +1 -0
  4. package/dist/assignment.js +2 -2
  5. package/dist/browser-workspace.d.ts +3 -3
  6. package/dist/builder.js +4 -7
  7. package/dist/chat-acceptance.d.ts +1 -1
  8. package/dist/contracts/contract.d.ts +33 -5
  9. package/dist/contracts/contract.js +143 -16
  10. package/dist/contracts/flow-propose.d.ts +325 -0
  11. package/dist/contracts/flow-propose.js +41 -0
  12. package/dist/contracts/flow.d.ts +19400 -0
  13. package/dist/contracts/flow.js +359 -0
  14. package/dist/contracts/handoff.d.ts +91 -0
  15. package/dist/contracts/handoff.js +82 -0
  16. package/dist/contracts/proof.d.ts +136 -0
  17. package/dist/contracts/proof.js +110 -0
  18. package/dist/contracts/verification-receipt.d.ts +148 -0
  19. package/dist/contracts/verification-receipt.js +87 -0
  20. package/dist/demo.js +28 -11
  21. package/dist/desktop-update.d.ts +2 -2
  22. package/dist/evidence.d.ts +3 -40
  23. package/dist/evidence.js +5 -1
  24. package/dist/flow-gallery.d.ts +3 -2
  25. package/dist/flow-share.d.ts +10 -32
  26. package/dist/flow-share.js +65 -83
  27. package/dist/flow-starters.d.ts +2 -1
  28. package/dist/flow-triggers.d.ts +15 -72
  29. package/dist/flow-triggers.js +94 -83
  30. package/dist/flows.d.ts +37 -218
  31. package/dist/flows.js +350 -385
  32. package/dist/mate-tools.js +14 -44
  33. package/dist/mcp-connect.d.ts +3 -0
  34. package/dist/mcp-connect.js +16 -4
  35. package/dist/operate.js +31 -2
  36. package/dist/plan.d.ts +5 -5
  37. package/dist/plan.js +5 -25
  38. package/dist/process-recovery-eligibility.d.ts +2 -2
  39. package/dist/process-recovery-eligibility.js +13 -8
  40. package/dist/proof.d.ts +15 -91
  41. package/dist/proof.js +90 -249
  42. package/dist/result-evidence-readers.d.ts +42 -0
  43. package/dist/result-evidence-readers.js +91 -0
  44. package/dist/serve.js +8 -99
  45. package/dist/setup-guide.d.ts +2 -2
  46. package/dist/surface.js +8 -1
  47. package/dist/task-review-brief.d.ts +75 -0
  48. package/dist/task-review-brief.js +179 -0
  49. package/dist/text-limits.d.ts +70 -0
  50. package/dist/text-limits.js +70 -0
  51. package/dist/verification-evidence.js +24 -12
  52. package/package.json +1 -1
@@ -0,0 +1,325 @@
1
+ /**
2
+ * The lead's `propose_flow` input (docs/plans/zod-revamp.md, item 3): one schema, built from the flow contract's own
3
+ * step and trigger schemas, that is both the JSON Schema the lead is given and the check its call is read with
4
+ * (mate-tools.ts). The lead-tools contract (item 5) imports it from here rather than restating it.
5
+ */
6
+ import { z } from "zod";
7
+ export declare const PROPOSE_FLOW_OPERATIONS: readonly ["create", "edit", "add_card", "move_card", "approve", "send_back", "choose", "cancel_card", "comment", "assign", "follow", "unfollow", "save_script", "add_trigger", "pause_trigger", "resume_trigger", "remove_trigger", "kit", "starter"];
8
+ export declare const proposeFlowInputSchema: z.ZodObject<{
9
+ operation: z.ZodEnum<{
10
+ add_card: "add_card";
11
+ add_trigger: "add_trigger";
12
+ approve: "approve";
13
+ assign: "assign";
14
+ cancel_card: "cancel_card";
15
+ choose: "choose";
16
+ comment: "comment";
17
+ create: "create";
18
+ edit: "edit";
19
+ follow: "follow";
20
+ kit: "kit";
21
+ move_card: "move_card";
22
+ pause_trigger: "pause_trigger";
23
+ remove_trigger: "remove_trigger";
24
+ resume_trigger: "resume_trigger";
25
+ save_script: "save_script";
26
+ send_back: "send_back";
27
+ starter: "starter";
28
+ unfollow: "unfollow";
29
+ }>;
30
+ repo: z.ZodOptional<z.ZodString>;
31
+ flow: z.ZodOptional<z.ZodInt>;
32
+ card: z.ZodOptional<z.ZodInt>;
33
+ kit: z.ZodOptional<z.ZodEnum<{
34
+ [x: string]: string;
35
+ }>>;
36
+ starter: z.ZodOptional<z.ZodEnum<{
37
+ "ci-fix": "ci-fix";
38
+ "issue-task": "issue-task";
39
+ overnight: "overnight";
40
+ "plane-review": "plane-review";
41
+ }>>;
42
+ name: z.ZodOptional<z.ZodString>;
43
+ template: z.ZodOptional<z.ZodEnum<{
44
+ [x: string]: string;
45
+ }>>;
46
+ steps: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<readonly [z.ZodObject<{
47
+ id: z.ZodOptional<z.ZodString>;
48
+ title: z.ZodString;
49
+ kind: z.ZodLiteral<"inbox">;
50
+ ifFails: z.ZodOptional<z.ZodString>;
51
+ next: z.ZodOptional<z.ZodString>;
52
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
53
+ thenMoveTo: z.ZodOptional<z.ZodString>;
54
+ }, z.core.$strict>, z.ZodObject<{
55
+ id: z.ZodOptional<z.ZodString>;
56
+ title: z.ZodString;
57
+ kind: z.ZodLiteral<"task">;
58
+ ifFails: z.ZodOptional<z.ZodString>;
59
+ instructions: z.ZodOptional<z.ZodString>;
60
+ next: z.ZodOptional<z.ZodString>;
61
+ planning: z.ZodOptional<z.ZodEnum<{
62
+ auto: "auto";
63
+ required: "required";
64
+ skip: "skip";
65
+ }>>;
66
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
67
+ repo: z.ZodOptional<z.ZodString>;
68
+ }, z.core.$strict>, z.ZodObject<{
69
+ id: z.ZodOptional<z.ZodString>;
70
+ title: z.ZodString;
71
+ kind: z.ZodLiteral<"report">;
72
+ ifFails: z.ZodOptional<z.ZodString>;
73
+ instructions: z.ZodOptional<z.ZodString>;
74
+ next: z.ZodOptional<z.ZodString>;
75
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
76
+ }, z.core.$strict>, z.ZodObject<{
77
+ id: z.ZodOptional<z.ZodString>;
78
+ title: z.ZodString;
79
+ kind: z.ZodLiteral<"approval">;
80
+ decider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
81
+ ifFails: z.ZodOptional<z.ZodString>;
82
+ next: z.ZodOptional<z.ZodString>;
83
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
84
+ teammate: z.ZodOptional<z.ZodString>;
85
+ thenMoveTo: z.ZodOptional<z.ZodString>;
86
+ }, z.core.$strict>, z.ZodObject<{
87
+ id: z.ZodOptional<z.ZodString>;
88
+ title: z.ZodString;
89
+ kind: z.ZodLiteral<"check">;
90
+ ifFails: z.ZodOptional<z.ZodString>;
91
+ next: z.ZodOptional<z.ZodString>;
92
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
93
+ routes: z.ZodOptional<z.ZodArray<z.ZodObject<{
94
+ answer: z.ZodString;
95
+ goesTo: z.ZodString;
96
+ }, z.core.$strict>>>;
97
+ runIn: z.ZodOptional<z.ZodEnum<{
98
+ copy: "copy";
99
+ folder: "folder";
100
+ }>>;
101
+ script: z.ZodOptional<z.ZodString>;
102
+ secrets: z.ZodOptional<z.ZodArray<z.ZodString>>;
103
+ }, z.core.$strict>, z.ZodObject<{
104
+ id: z.ZodOptional<z.ZodString>;
105
+ title: z.ZodString;
106
+ kind: z.ZodLiteral<"pull-request">;
107
+ ifFails: z.ZodOptional<z.ZodString>;
108
+ merge: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
109
+ merge: "merge";
110
+ rebase: "rebase";
111
+ squash: "squash";
112
+ }>]>>;
113
+ next: z.ZodOptional<z.ZodString>;
114
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
115
+ }, z.core.$strict>, z.ZodObject<{
116
+ id: z.ZodOptional<z.ZodString>;
117
+ title: z.ZodString;
118
+ kind: z.ZodLiteral<"update">;
119
+ close: z.ZodOptional<z.ZodBoolean>;
120
+ ifFails: z.ZodOptional<z.ZodString>;
121
+ message: z.ZodOptional<z.ZodString>;
122
+ next: z.ZodOptional<z.ZodString>;
123
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
124
+ }, z.core.$strict>, z.ZodObject<{
125
+ id: z.ZodOptional<z.ZodString>;
126
+ title: z.ZodString;
127
+ kind: z.ZodLiteral<"notify">;
128
+ ifFails: z.ZodOptional<z.ZodString>;
129
+ message: z.ZodOptional<z.ZodString>;
130
+ next: z.ZodOptional<z.ZodString>;
131
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
132
+ }, z.core.$strict>, z.ZodObject<{
133
+ id: z.ZodOptional<z.ZodString>;
134
+ title: z.ZodString;
135
+ kind: z.ZodLiteral<"sort">;
136
+ alsoNote: z.ZodOptional<z.ZodArray<z.ZodObject<{
137
+ id: z.ZodOptional<z.ZodString>;
138
+ question: z.ZodString;
139
+ kind: z.ZodOptional<z.ZodEnum<{
140
+ score: "score";
141
+ "yes-no": "yes-no";
142
+ }>>;
143
+ levels: z.ZodOptional<z.ZodArray<z.ZodString>>;
144
+ }, z.core.$strict>>>;
145
+ answers: z.ZodOptional<z.ZodArray<z.ZodObject<{
146
+ answer: z.ZodString;
147
+ means: z.ZodOptional<z.ZodString>;
148
+ goesTo: z.ZodString;
149
+ }, z.core.$strict>>>;
150
+ ifNotSure: z.ZodOptional<z.ZodString>;
151
+ question: z.ZodOptional<z.ZodString>;
152
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
153
+ sureAt: z.ZodOptional<z.ZodNumber>;
154
+ }, z.core.$strict>, z.ZodObject<{
155
+ id: z.ZodOptional<z.ZodString>;
156
+ title: z.ZodString;
157
+ kind: z.ZodLiteral<"draft">;
158
+ ifFails: z.ZodOptional<z.ZodString>;
159
+ instructions: z.ZodOptional<z.ZodString>;
160
+ next: z.ZodOptional<z.ZodString>;
161
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
162
+ }, z.core.$strict>, z.ZodObject<{
163
+ id: z.ZodOptional<z.ZodString>;
164
+ title: z.ZodString;
165
+ kind: z.ZodLiteral<"request">;
166
+ body: z.ZodOptional<z.ZodString>;
167
+ headers: z.ZodOptional<z.ZodObject<{}, z.core.$catchall<z.ZodString>>>;
168
+ ifFails: z.ZodOptional<z.ZodString>;
169
+ method: z.ZodOptional<z.ZodEnum<{
170
+ DELETE: "DELETE";
171
+ GET: "GET";
172
+ PATCH: "PATCH";
173
+ POST: "POST";
174
+ PUT: "PUT";
175
+ }>>;
176
+ next: z.ZodOptional<z.ZodString>;
177
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
178
+ url: z.ZodOptional<z.ZodString>;
179
+ }, z.core.$strict>, z.ZodObject<{
180
+ id: z.ZodOptional<z.ZodString>;
181
+ title: z.ZodString;
182
+ kind: z.ZodLiteral<"email">;
183
+ body: z.ZodOptional<z.ZodString>;
184
+ ifFails: z.ZodOptional<z.ZodString>;
185
+ next: z.ZodOptional<z.ZodString>;
186
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
187
+ subject: z.ZodOptional<z.ZodString>;
188
+ to: z.ZodOptional<z.ZodString>;
189
+ }, z.core.$strict>, z.ZodObject<{
190
+ id: z.ZodOptional<z.ZodString>;
191
+ title: z.ZodString;
192
+ kind: z.ZodLiteral<"tool">;
193
+ args: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{}, z.core.$catchall<z.ZodUnknown>>, z.ZodString]>>;
194
+ ifFails: z.ZodOptional<z.ZodString>;
195
+ next: z.ZodOptional<z.ZodString>;
196
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
197
+ server: z.ZodOptional<z.ZodString>;
198
+ tool: z.ZodOptional<z.ZodString>;
199
+ }, z.core.$strict>, z.ZodObject<{
200
+ id: z.ZodOptional<z.ZodString>;
201
+ title: z.ZodString;
202
+ kind: z.ZodLiteral<"wait">;
203
+ from: z.ZodOptional<z.ZodString>;
204
+ ifNoReply: z.ZodOptional<z.ZodString>;
205
+ next: z.ZodOptional<z.ZodString>;
206
+ timeZone: z.ZodOptional<z.ZodString>;
207
+ until: z.ZodOptional<z.ZodString>;
208
+ wait: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
209
+ waitFor: z.ZodOptional<z.ZodEnum<{
210
+ hours: "hours";
211
+ reply: "reply";
212
+ time: "time";
213
+ }>>;
214
+ }, z.core.$strict>, z.ZodObject<{
215
+ id: z.ZodOptional<z.ZodString>;
216
+ title: z.ZodString;
217
+ kind: z.ZodLiteral<"teammate">;
218
+ ifFails: z.ZodOptional<z.ZodString>;
219
+ instructions: z.ZodOptional<z.ZodString>;
220
+ next: z.ZodOptional<z.ZodString>;
221
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
222
+ reply: z.ZodOptional<z.ZodBoolean>;
223
+ routes: z.ZodOptional<z.ZodArray<z.ZodObject<{
224
+ answer: z.ZodString;
225
+ goesTo: z.ZodString;
226
+ }, z.core.$strict>>>;
227
+ teammate: z.ZodOptional<z.ZodString>;
228
+ }, z.core.$strict>, z.ZodObject<{
229
+ id: z.ZodOptional<z.ZodString>;
230
+ title: z.ZodString;
231
+ kind: z.ZodLiteral<"send">;
232
+ ifFails: z.ZodOptional<z.ZodString>;
233
+ next: z.ZodOptional<z.ZodString>;
234
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
235
+ }, z.core.$strict>, z.ZodObject<{
236
+ id: z.ZodOptional<z.ZodString>;
237
+ title: z.ZodString;
238
+ kind: z.ZodLiteral<"choose">;
239
+ ifNoReply: z.ZodOptional<z.ZodString>;
240
+ ifReplied: z.ZodOptional<z.ZodString>;
241
+ options: z.ZodOptional<z.ZodArray<z.ZodObject<{
242
+ label: z.ZodString;
243
+ goesTo: z.ZodOptional<z.ZodString>;
244
+ }, z.core.$strict>>>;
245
+ remindAfter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodInt]>>;
246
+ thenMoveTo: z.ZodOptional<z.ZodString>;
247
+ }, z.core.$strict>, z.ZodObject<{
248
+ id: z.ZodOptional<z.ZodString>;
249
+ title: z.ZodString;
250
+ kind: z.ZodLiteral<"done">;
251
+ }, z.core.$strict>], "kind">>>;
252
+ title: z.ZodOptional<z.ZodString>;
253
+ description: z.ZodOptional<z.ZodString>;
254
+ zone: z.ZodOptional<z.ZodString>;
255
+ note: z.ZodOptional<z.ZodString>;
256
+ choice: z.ZodOptional<z.ZodInt>;
257
+ trigger: z.ZodOptional<z.ZodInt>;
258
+ owner: z.ZodOptional<z.ZodString>;
259
+ script: z.ZodOptional<z.ZodObject<{
260
+ name: z.ZodOptional<z.ZodString>;
261
+ about: z.ZodOptional<z.ZodString>;
262
+ body: z.ZodOptional<z.ZodString>;
263
+ timeoutMinutes: z.ZodOptional<z.ZodInt>;
264
+ language: z.ZodOptional<z.ZodEnum<{
265
+ node: "node";
266
+ python: "python";
267
+ shell: "shell";
268
+ }>>;
269
+ file: z.ZodOptional<z.ZodString>;
270
+ }, z.core.$strict>>;
271
+ settings: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
272
+ zone: z.ZodOptional<z.ZodString>;
273
+ kind: z.ZodLiteral<"button">;
274
+ label: z.ZodString;
275
+ questions: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodString]>>;
276
+ }, z.core.$strict>, z.ZodObject<{
277
+ zone: z.ZodOptional<z.ZodString>;
278
+ kind: z.ZodLiteral<"schedule">;
279
+ schedule: z.ZodString;
280
+ title: z.ZodOptional<z.ZodString>;
281
+ description: z.ZodOptional<z.ZodString>;
282
+ script: z.ZodOptional<z.ZodString>;
283
+ secrets: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodString]>>;
284
+ }, z.core.$strict>, z.ZodObject<{
285
+ zone: z.ZodOptional<z.ZodString>;
286
+ kind: z.ZodLiteral<"github">;
287
+ repo: z.ZodOptional<z.ZodString>;
288
+ watch: z.ZodOptional<z.ZodEnum<{
289
+ checks: "checks";
290
+ issues: "issues";
291
+ pulls: "pulls";
292
+ }>>;
293
+ label: z.ZodOptional<z.ZodString>;
294
+ branch: z.ZodOptional<z.ZodString>;
295
+ from: z.ZodOptional<z.ZodEnum<{
296
+ anyone: "anyone";
297
+ team: "team";
298
+ }>>;
299
+ }, z.core.$strict>, z.ZodObject<{
300
+ zone: z.ZodOptional<z.ZodString>;
301
+ kind: z.ZodLiteral<"linear">;
302
+ team: z.ZodOptional<z.ZodString>;
303
+ state: z.ZodOptional<z.ZodString>;
304
+ label: z.ZodOptional<z.ZodString>;
305
+ }, z.core.$strict>, z.ZodObject<{
306
+ zone: z.ZodOptional<z.ZodString>;
307
+ kind: z.ZodLiteral<"flow">;
308
+ when: z.ZodOptional<z.ZodString>;
309
+ follow: z.ZodInt;
310
+ }, z.core.$strict>, z.ZodObject<{
311
+ zone: z.ZodOptional<z.ZodString>;
312
+ kind: z.ZodLiteral<"email">;
313
+ folder: z.ZodOptional<z.ZodString>;
314
+ sender: z.ZodOptional<z.ZodString>;
315
+ subject: z.ZodOptional<z.ZodString>;
316
+ }, z.core.$strict>, z.ZodObject<{
317
+ zone: z.ZodOptional<z.ZodString>;
318
+ kind: z.ZodLiteral<"plane-review">;
319
+ at: z.ZodOptional<z.ZodString>;
320
+ timeZone: z.ZodOptional<z.ZodString>;
321
+ }, z.core.$strict>], "kind">>;
322
+ }, z.core.$strict>;
323
+ export type ProposeFlowInput = z.infer<typeof proposeFlowInputSchema>;
324
+ /** What the lead is told propose_flow takes: exactly the schema its call is read with. */
325
+ export declare const PROPOSE_FLOW_MODEL_SCHEMA: Readonly<Record<string, unknown>>;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * The lead's `propose_flow` input (docs/plans/zod-revamp.md, item 3): one schema, built from the flow contract's own
3
+ * step and trigger schemas, that is both the JSON Schema the lead is given and the check its call is read with
4
+ * (mate-tools.ts). The lead-tools contract (item 5) imports it from here rather than restating it.
5
+ */
6
+ import { z } from "zod";
7
+ import { LIMITS } from "../decision.js";
8
+ import { STARTER_IDS } from "../flow-starters.js";
9
+ import { FLOW_TEMPLATES } from "../flows.js";
10
+ import { KITS } from "../kits.js";
11
+ import { TEXT_LIMITS } from "../text-limits.js";
12
+ import { toModelSchema } from "./contract.js";
13
+ import { flowStepsSchema, leadTriggerSchema, SCRIPT_LANGUAGES, SCRIPT_NAME } from "./flow.js";
14
+ export const PROPOSE_FLOW_OPERATIONS = ["create", "edit", "add_card", "move_card", "approve", "send_back", "choose", "cancel_card", "comment", "assign", "follow", "unfollow", "save_script", "add_trigger", "pause_trigger", "resume_trigger", "remove_trigger", "kit", "starter"];
15
+ const id = z.int().min(1);
16
+ const enumOf = (values) => z.enum(values);
17
+ export const proposeFlowInputSchema = z.strictObject({
18
+ operation: z.enum(PROPOSE_FLOW_OPERATIONS),
19
+ /** A project as list_repos names it (r1, r2). */
20
+ repo: z.string().regex(/^r[0-9]{1,3}$/, { error: "must be a project from list_repos, like r1" }).optional(),
21
+ flow: id.optional(), card: id.optional(),
22
+ kit: enumOf(KITS.map(one => one.id)).optional(),
23
+ starter: z.enum(STARTER_IDS).optional(),
24
+ name: z.string().max(TEXT_LIMITS.flowName).optional(),
25
+ template: enumOf(FLOW_TEMPLATES.map(one => one.id)).optional(),
26
+ steps: flowStepsSchema.shape.steps.optional(),
27
+ title: z.string().max(TEXT_LIMITS.flowCardTitle).optional(),
28
+ description: z.string().max(TEXT_LIMITS.flowCardDescription).optional(),
29
+ zone: z.string().max(TEXT_LIMITS.flowRef).optional(),
30
+ note: z.string().max(LIMITS.note).describe(`At most ${LIMITS.note} characters; longer is refused with its length, not cut.`).optional(),
31
+ choice: z.int().min(1).max(4).optional(),
32
+ trigger: id.optional(),
33
+ owner: z.string().max(TEXT_LIMITS.flowDecider).optional(),
34
+ script: z.strictObject({
35
+ name: z.string().regex(SCRIPT_NAME, { error: "must be a script's name: lowercase letters, numbers and dashes" }).optional(), about: z.string().max(TEXT_LIMITS.flowScriptAbout).optional(), body: z.string().max(TEXT_LIMITS.flowScriptInline).optional(),
36
+ timeoutMinutes: z.int().min(1).max(60).optional(), language: z.enum(SCRIPT_LANGUAGES).optional(), file: z.string().max(TEXT_LIMITS.flowScriptFile).optional(),
37
+ }).optional(),
38
+ settings: leadTriggerSchema.optional(),
39
+ });
40
+ /** What the lead is told propose_flow takes: exactly the schema its call is read with. */
41
+ export const PROPOSE_FLOW_MODEL_SCHEMA = toModelSchema(proposeFlowInputSchema);