@4ge/cli 0.1.0

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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +228 -0
  3. package/bin/dev.js +3 -0
  4. package/bin/run.js +3 -0
  5. package/dist/base.js +398 -0
  6. package/dist/commands/auth/login.js +197 -0
  7. package/dist/commands/auth/logout.js +31 -0
  8. package/dist/commands/auth/profile/delete.js +34 -0
  9. package/dist/commands/auth/profile/list.js +32 -0
  10. package/dist/commands/auth/profile/use.js +30 -0
  11. package/dist/commands/auth/status.js +107 -0
  12. package/dist/commands/config/get.js +37 -0
  13. package/dist/commands/config/index.js +9 -0
  14. package/dist/commands/config/manage.js +165 -0
  15. package/dist/commands/config/set.js +42 -0
  16. package/dist/commands/config/show.js +46 -0
  17. package/dist/commands/epic/index.js +10 -0
  18. package/dist/commands/epic/list.js +91 -0
  19. package/dist/commands/epic/pull.js +137 -0
  20. package/dist/commands/epic/show.js +67 -0
  21. package/dist/commands/epic/update.js +104 -0
  22. package/dist/commands/feature/index.js +2 -0
  23. package/dist/commands/feature/list.js +93 -0
  24. package/dist/commands/feature/pull.js +122 -0
  25. package/dist/commands/feature/show.js +60 -0
  26. package/dist/commands/feature/update.js +103 -0
  27. package/dist/commands/idea/create.js +88 -0
  28. package/dist/commands/idea/graduate.js +89 -0
  29. package/dist/commands/idea/index.js +5 -0
  30. package/dist/commands/idea/list.js +83 -0
  31. package/dist/commands/idea/show.js +86 -0
  32. package/dist/commands/idea/update.js +108 -0
  33. package/dist/commands/init.js +354 -0
  34. package/dist/commands/login.js +5 -0
  35. package/dist/commands/plan/index.js +10 -0
  36. package/dist/commands/plan/pull.js +104 -0
  37. package/dist/commands/plan/versions.js +64 -0
  38. package/dist/commands/project/create.js +84 -0
  39. package/dist/commands/project/index.js +9 -0
  40. package/dist/commands/project/info.js +74 -0
  41. package/dist/commands/project/list.js +78 -0
  42. package/dist/commands/project/pull.js +127 -0
  43. package/dist/commands/project/update.js +104 -0
  44. package/dist/commands/root.js +13 -0
  45. package/dist/commands/skill/index.js +8 -0
  46. package/dist/commands/skill/install.js +71 -0
  47. package/dist/commands/story/index.js +10 -0
  48. package/dist/commands/story/list.js +81 -0
  49. package/dist/commands/story/pull.js +125 -0
  50. package/dist/commands/story/show.js +57 -0
  51. package/dist/commands/story/update.js +103 -0
  52. package/dist/commands/template/create.js +72 -0
  53. package/dist/commands/template/delete.js +62 -0
  54. package/dist/commands/template/feature/create.js +70 -0
  55. package/dist/commands/template/feature/delete.js +75 -0
  56. package/dist/commands/template/feature/list.js +69 -0
  57. package/dist/commands/template/feature/update.js +82 -0
  58. package/dist/commands/template/info.js +52 -0
  59. package/dist/commands/template/list.js +76 -0
  60. package/dist/commands/template/pull.js +99 -0
  61. package/dist/commands/template/update.js +71 -0
  62. package/dist/commands/whoami.js +5 -0
  63. package/dist/core/api/action-hints.js +17 -0
  64. package/dist/core/api/index.js +3 -0
  65. package/dist/core/api/retry.js +95 -0
  66. package/dist/core/api/validate-response.js +41 -0
  67. package/dist/core/auth/api-client.js +156 -0
  68. package/dist/core/auth/config.js +3 -0
  69. package/dist/core/auth/credentials.js +143 -0
  70. package/dist/core/auth/email-auth.js +30 -0
  71. package/dist/core/auth/errors.js +20 -0
  72. package/dist/core/auth/index.js +6 -0
  73. package/dist/core/auth/realtime.js +82 -0
  74. package/dist/core/auth/resolution.js +63 -0
  75. package/dist/core/auth/state.js +9 -0
  76. package/dist/core/auth/token-refresh.js +100 -0
  77. package/dist/core/config/defaults.js +31 -0
  78. package/dist/core/config/index.js +3 -0
  79. package/dist/core/config/parser.js +213 -0
  80. package/dist/core/config/schema.js +29 -0
  81. package/dist/core/project/markdown.js +37 -0
  82. package/dist/core/skill/installer.js +59 -0
  83. package/dist/core/skill/paths.js +52 -0
  84. package/dist/generated/api/client/client.gen.js +217 -0
  85. package/dist/generated/api/client/index.js +6 -0
  86. package/dist/generated/api/client/types.gen.js +2 -0
  87. package/dist/generated/api/client/utils.gen.js +231 -0
  88. package/dist/generated/api/client.gen.js +3 -0
  89. package/dist/generated/api/core/auth.gen.js +14 -0
  90. package/dist/generated/api/core/bodySerializer.gen.js +57 -0
  91. package/dist/generated/api/core/params.gen.js +103 -0
  92. package/dist/generated/api/core/pathSerializer.gen.js +114 -0
  93. package/dist/generated/api/core/queryKeySerializer.gen.js +99 -0
  94. package/dist/generated/api/core/serverSentEvents.gen.js +136 -0
  95. package/dist/generated/api/core/types.gen.js +2 -0
  96. package/dist/generated/api/core/utils.gen.js +87 -0
  97. package/dist/generated/api/index.js +2 -0
  98. package/dist/generated/api/sdk.gen.js +556 -0
  99. package/dist/generated/api/types.gen.js +2 -0
  100. package/dist/generated/api/zod.gen.js +1262 -0
  101. package/dist/ui/components/action-hints.js +33 -0
  102. package/dist/ui/components/cli-header.js +91 -0
  103. package/dist/ui/components/confirm-prompt.js +28 -0
  104. package/dist/ui/components/data-table.js +35 -0
  105. package/dist/ui/components/detail-view.js +5 -0
  106. package/dist/ui/components/error-display.js +5 -0
  107. package/dist/ui/components/prompt-layout.js +6 -0
  108. package/dist/ui/components/select-prompt.js +28 -0
  109. package/dist/ui/components/spinner.js +14 -0
  110. package/dist/ui/components/success-message.js +5 -0
  111. package/dist/ui/components/text-input.js +29 -0
  112. package/dist/ui/hooks/use-action-hints.js +21 -0
  113. package/dist/ui/hooks/use-status.js +22 -0
  114. package/dist/ui/index.js +15 -0
  115. package/dist/ui/prompt-helpers.js +55 -0
  116. package/dist/ui/render.js +9 -0
  117. package/package.json +89 -0
  118. package/skills/4ge-cli.md +113 -0
  119. package/usage.md +320 -0
@@ -0,0 +1,1262 @@
1
+ // This file is auto-generated by @hey-api/openapi-ts
2
+ import * as z from "zod";
3
+ /**
4
+ * Successful response
5
+ */
6
+ export const zCliAuthLoginResponse = z.object({
7
+ data: z.unknown(),
8
+ error: z.unknown(),
9
+ metadata: z.object({
10
+ timestamp: z.string(),
11
+ request_id: z.string(),
12
+ action_hints: z.array(z.unknown()).optional(),
13
+ }),
14
+ });
15
+ export const zCliAuthEmailLoginBody = z.object({
16
+ email: z.email(),
17
+ password: z.string().min(6),
18
+ });
19
+ /**
20
+ * Successful response
21
+ */
22
+ export const zCliAuthEmailLoginResponse = z.object({
23
+ data: z.object({
24
+ access_token: z.string(),
25
+ refresh_token: z.string(),
26
+ expires_at: z.number(),
27
+ expires_in: z.number(),
28
+ user: z.object({
29
+ id: z.string(),
30
+ email: z.email(),
31
+ }),
32
+ }),
33
+ error: z.unknown(),
34
+ metadata: z.object({
35
+ timestamp: z.string(),
36
+ request_id: z.string(),
37
+ action_hints: z.array(z.unknown()).optional(),
38
+ }),
39
+ });
40
+ export const zCliAuthCallbackQuery = z.object({
41
+ code: z.string(),
42
+ state: z.string(),
43
+ });
44
+ /**
45
+ * Successful response
46
+ */
47
+ export const zCliAuthCallbackResponse = z.object({
48
+ data: z.unknown(),
49
+ error: z.unknown(),
50
+ metadata: z.object({
51
+ timestamp: z.string(),
52
+ request_id: z.string(),
53
+ action_hints: z.array(z.unknown()).optional(),
54
+ }),
55
+ });
56
+ /**
57
+ * Successful response
58
+ */
59
+ export const zCliAuthStatusResponse = z.object({
60
+ data: z.unknown(),
61
+ error: z.unknown(),
62
+ metadata: z.object({
63
+ timestamp: z.string(),
64
+ request_id: z.string(),
65
+ action_hints: z.array(z.unknown()).optional(),
66
+ }),
67
+ });
68
+ export const zCliAuthRefreshBody = z.object({
69
+ refresh_token: z.string(),
70
+ });
71
+ /**
72
+ * Successful response
73
+ */
74
+ export const zCliAuthRefreshResponse = z.object({
75
+ data: z.unknown(),
76
+ error: z.unknown(),
77
+ metadata: z.object({
78
+ timestamp: z.string(),
79
+ request_id: z.string(),
80
+ action_hints: z.array(z.unknown()).optional(),
81
+ }),
82
+ });
83
+ /**
84
+ * Successful response
85
+ */
86
+ export const zListWorkspacesResponse = z.object({
87
+ data: z.array(z.object({
88
+ id: z.uuid(),
89
+ name: z.string(),
90
+ })),
91
+ error: z.unknown(),
92
+ metadata: z.object({
93
+ timestamp: z.string(),
94
+ request_id: z.string(),
95
+ action_hints: z.array(z.unknown()).optional(),
96
+ }),
97
+ });
98
+ export const zListProjectsHeaders = z.object({
99
+ "x-workspace-id": z.uuid().optional(),
100
+ });
101
+ export const zListProjectsQuery = z.object({
102
+ workspace_id: z.uuid().optional(),
103
+ });
104
+ /**
105
+ * Successful response
106
+ */
107
+ export const zListProjectsResponse = z.object({
108
+ data: z.array(z.object({
109
+ id: z.uuid(),
110
+ name: z.string(),
111
+ description: z.string().nullable(),
112
+ status: z.string(),
113
+ personas: z
114
+ .array(z.object({
115
+ id: z.string(),
116
+ name: z.string().min(1),
117
+ description: z.string().min(1),
118
+ ahaMoment: z.string().min(1),
119
+ desiredOutcome: z.string().min(1),
120
+ }))
121
+ .nullish()
122
+ .default([]),
123
+ created_at: z.iso.datetime().nullable(),
124
+ updated_at: z.iso.datetime().nullable(),
125
+ })),
126
+ error: z.unknown(),
127
+ metadata: z.object({
128
+ timestamp: z.string(),
129
+ request_id: z.string(),
130
+ action_hints: z.array(z.unknown()).optional(),
131
+ }),
132
+ });
133
+ export const zCreateProjectBody = z.object({
134
+ name: z.string().min(1),
135
+ description: z.string().optional(),
136
+ problem_statement: z.string().optional(),
137
+ project_rules: z.string().optional(),
138
+ personas: z
139
+ .array(z.object({
140
+ id: z.string(),
141
+ name: z.string().min(1),
142
+ description: z.string().min(1),
143
+ ahaMoment: z.string().min(1),
144
+ desiredOutcome: z.string().min(1),
145
+ }))
146
+ .nullish(),
147
+ project_type_id: z.uuid().optional(),
148
+ workspace_id: z.uuid().min(1),
149
+ });
150
+ /**
151
+ * Successful response
152
+ */
153
+ export const zCreateProjectResponse = z.object({
154
+ data: z.object({
155
+ id: z.uuid(),
156
+ name: z.string(),
157
+ description: z.string().nullable(),
158
+ status: z.string(),
159
+ personas: z
160
+ .array(z.object({
161
+ id: z.string(),
162
+ name: z.string().min(1),
163
+ description: z.string().min(1),
164
+ ahaMoment: z.string().min(1),
165
+ desiredOutcome: z.string().min(1),
166
+ }))
167
+ .nullish()
168
+ .default([]),
169
+ created_at: z.iso.datetime().nullable(),
170
+ updated_at: z.iso.datetime().nullable(),
171
+ problem_statement: z.string().nullable(),
172
+ project_rules: z.string().nullable(),
173
+ workspace_id: z.uuid(),
174
+ project_type_id: z.uuid().nullable(),
175
+ }),
176
+ error: z.unknown(),
177
+ metadata: z.object({
178
+ timestamp: z.string(),
179
+ request_id: z.string(),
180
+ action_hints: z.array(z.unknown()).optional(),
181
+ }),
182
+ });
183
+ export const zGetProjectDetailPath = z.object({
184
+ projectId: z.uuid(),
185
+ });
186
+ /**
187
+ * Successful response
188
+ */
189
+ export const zGetProjectDetailResponse = z.object({
190
+ data: z.object({
191
+ id: z.uuid(),
192
+ name: z.string(),
193
+ description: z.string().nullable(),
194
+ status: z.string(),
195
+ personas: z
196
+ .array(z.object({
197
+ id: z.string(),
198
+ name: z.string().min(1),
199
+ description: z.string().min(1),
200
+ ahaMoment: z.string().min(1),
201
+ desiredOutcome: z.string().min(1),
202
+ }))
203
+ .nullish()
204
+ .default([]),
205
+ created_at: z.iso.datetime().nullable(),
206
+ updated_at: z.iso.datetime().nullable(),
207
+ problem_statement: z.string().nullable(),
208
+ project_rules: z.string().nullable(),
209
+ workspace_id: z.uuid(),
210
+ project_type_id: z.uuid().nullable(),
211
+ }),
212
+ error: z.unknown(),
213
+ metadata: z.object({
214
+ timestamp: z.string(),
215
+ request_id: z.string(),
216
+ action_hints: z.array(z.unknown()).optional(),
217
+ }),
218
+ });
219
+ export const zUpdateProjectBody = z.object({
220
+ name: z.string().min(1).optional(),
221
+ description: z.string().optional(),
222
+ problem_statement: z.string().optional(),
223
+ project_rules: z.string().optional(),
224
+ personas: z
225
+ .array(z.object({
226
+ id: z.string(),
227
+ name: z.string().min(1),
228
+ description: z.string().min(1),
229
+ ahaMoment: z.string().min(1),
230
+ desiredOutcome: z.string().min(1),
231
+ }))
232
+ .nullish(),
233
+ project_type_id: z.uuid().optional(),
234
+ });
235
+ export const zUpdateProjectPath = z.object({
236
+ projectId: z.uuid(),
237
+ });
238
+ /**
239
+ * Successful response
240
+ */
241
+ export const zUpdateProjectResponse = z.object({
242
+ data: z.object({
243
+ id: z.uuid(),
244
+ name: z.string(),
245
+ description: z.string().nullable(),
246
+ status: z.string(),
247
+ personas: z
248
+ .array(z.object({
249
+ id: z.string(),
250
+ name: z.string().min(1),
251
+ description: z.string().min(1),
252
+ ahaMoment: z.string().min(1),
253
+ desiredOutcome: z.string().min(1),
254
+ }))
255
+ .nullish()
256
+ .default([]),
257
+ created_at: z.iso.datetime().nullable(),
258
+ updated_at: z.iso.datetime().nullable(),
259
+ problem_statement: z.string().nullable(),
260
+ project_rules: z.string().nullable(),
261
+ workspace_id: z.uuid(),
262
+ project_type_id: z.uuid().nullable(),
263
+ }),
264
+ error: z.unknown(),
265
+ metadata: z.object({
266
+ timestamp: z.string(),
267
+ request_id: z.string(),
268
+ action_hints: z.array(z.unknown()).optional(),
269
+ }),
270
+ });
271
+ export const zGetPlanMetadataPath = z.object({
272
+ projectId: z.uuid(),
273
+ });
274
+ /**
275
+ * Successful response
276
+ */
277
+ export const zGetPlanMetadataResponse = z.object({
278
+ data: z.object({
279
+ id: z.uuid(),
280
+ projectId: z.uuid(),
281
+ name: z.string(),
282
+ versionCount: z.number().optional(),
283
+ latestVersion: z.number().optional(),
284
+ createdAt: z.iso.datetime().nullable(),
285
+ updatedAt: z.iso.datetime().nullable(),
286
+ }),
287
+ error: z.unknown(),
288
+ metadata: z.object({
289
+ timestamp: z.string(),
290
+ request_id: z.string(),
291
+ action_hints: z.array(z.unknown()).optional(),
292
+ }),
293
+ });
294
+ export const zGetPlanTreePath = z.object({
295
+ projectId: z.uuid(),
296
+ });
297
+ export const zGetPlanTreeQuery = z.object({
298
+ roadmap: z.enum(["now", "next", "later"]).optional(),
299
+ status: z.string().optional(),
300
+ });
301
+ /**
302
+ * Successful response
303
+ */
304
+ export const zGetPlanTreeResponse = z.object({
305
+ data: z.array(z.unknown()),
306
+ error: z.unknown(),
307
+ metadata: z.object({
308
+ timestamp: z.string(),
309
+ request_id: z.string(),
310
+ action_hints: z.array(z.unknown()).optional(),
311
+ }),
312
+ });
313
+ export const zGetPlanVersionsPath = z.object({
314
+ projectId: z.uuid(),
315
+ });
316
+ /**
317
+ * Successful response
318
+ */
319
+ export const zGetPlanVersionsResponse = z.object({
320
+ data: z.object({
321
+ versions: z.array(z.object({
322
+ id: z.string(),
323
+ versionNumber: z.number(),
324
+ changeDescription: z.string().nullable(),
325
+ createdAt: z.string(),
326
+ createdBy: z.string().nullable(),
327
+ parentVersionId: z.string().nullish(),
328
+ })),
329
+ latestVersion: z.number(),
330
+ }),
331
+ error: z.unknown(),
332
+ metadata: z.object({
333
+ timestamp: z.string(),
334
+ request_id: z.string(),
335
+ action_hints: z.array(z.unknown()).optional(),
336
+ }),
337
+ });
338
+ export const zGetLatestPlanVersionPath = z.object({
339
+ projectId: z.uuid(),
340
+ });
341
+ /**
342
+ * Successful response
343
+ */
344
+ export const zGetLatestPlanVersionResponse = z.object({
345
+ data: z.object({
346
+ id: z.string(),
347
+ versionNumber: z.number(),
348
+ changeDescription: z.string().nullable(),
349
+ snapshotData: z.record(z.string(), z.unknown()),
350
+ createdAt: z.string(),
351
+ createdBy: z.string().nullable(),
352
+ }),
353
+ error: z.unknown(),
354
+ metadata: z.object({
355
+ timestamp: z.string(),
356
+ request_id: z.string(),
357
+ action_hints: z.array(z.unknown()).optional(),
358
+ }),
359
+ });
360
+ export const zGetPlanVersionDetailPath = z.object({
361
+ projectId: z.uuid(),
362
+ versionId: z.string(),
363
+ });
364
+ /**
365
+ * Successful response
366
+ */
367
+ export const zGetPlanVersionDetailResponse = z.object({
368
+ data: z.unknown().optional(),
369
+ error: z.unknown(),
370
+ metadata: z.object({
371
+ timestamp: z.string(),
372
+ request_id: z.string(),
373
+ action_hints: z.array(z.unknown()).optional(),
374
+ }),
375
+ });
376
+ export const zListEpicsPath = z.object({
377
+ projectId: z.uuid(),
378
+ });
379
+ export const zListEpicsQuery = z.object({
380
+ roadmap: z.enum(["now", "next", "later"]).optional(),
381
+ status: z.string().optional(),
382
+ });
383
+ /**
384
+ * Successful response
385
+ */
386
+ export const zListEpicsResponse = z.object({
387
+ data: z.array(z.object({
388
+ id: z.uuid(),
389
+ label: z.string(),
390
+ description: z.string().nullable(),
391
+ node_type: z.enum([
392
+ "epic",
393
+ "userstory",
394
+ "feature",
395
+ "useraction",
396
+ "systemresponse",
397
+ "conditional",
398
+ ]),
399
+ status: z.enum([
400
+ "BACKLOG",
401
+ "NOT_STARTED",
402
+ "IN_PLANNING",
403
+ "READY_FOR_DEVELOPMENT",
404
+ "IN_DEVELOPMENT",
405
+ "BLOCKED",
406
+ "REVIEW",
407
+ "COMPLETE",
408
+ ]),
409
+ priority: z.string().nullable(),
410
+ roadmap_status: z
411
+ .enum(["now", "next", "later", "someday", "released"])
412
+ .optional(),
413
+ parent_id: z.uuid().nullable(),
414
+ parent_feature_id: z.uuid().nullish(),
415
+ project_id: z.uuid(),
416
+ workspace_id: z.uuid(),
417
+ position_x: z.number().optional(),
418
+ position_y: z.number().optional(),
419
+ })),
420
+ error: z.unknown(),
421
+ metadata: z.object({
422
+ timestamp: z.string(),
423
+ request_id: z.string(),
424
+ action_hints: z.array(z.unknown()).optional(),
425
+ }),
426
+ });
427
+ export const zGetEpicDetailPath = z.object({
428
+ projectId: z.uuid(),
429
+ epicId: z.uuid(),
430
+ });
431
+ /**
432
+ * Successful response
433
+ */
434
+ export const zGetEpicDetailResponse = z.object({
435
+ data: z.object({
436
+ id: z.uuid(),
437
+ label: z.string(),
438
+ description: z.string().nullable(),
439
+ node_type: z.enum([
440
+ "epic",
441
+ "userstory",
442
+ "feature",
443
+ "useraction",
444
+ "systemresponse",
445
+ "conditional",
446
+ ]),
447
+ status: z.enum([
448
+ "BACKLOG",
449
+ "NOT_STARTED",
450
+ "IN_PLANNING",
451
+ "READY_FOR_DEVELOPMENT",
452
+ "IN_DEVELOPMENT",
453
+ "BLOCKED",
454
+ "REVIEW",
455
+ "COMPLETE",
456
+ ]),
457
+ priority: z.string().nullable(),
458
+ roadmap_status: z
459
+ .enum(["now", "next", "later", "someday", "released"])
460
+ .optional(),
461
+ parent_id: z.uuid().nullable(),
462
+ parent_feature_id: z.uuid().nullish(),
463
+ project_id: z.uuid(),
464
+ workspace_id: z.uuid(),
465
+ position_x: z.number().optional(),
466
+ position_y: z.number().optional(),
467
+ }),
468
+ error: z.unknown(),
469
+ metadata: z.object({
470
+ timestamp: z.string(),
471
+ request_id: z.string(),
472
+ action_hints: z.array(z.unknown()).optional(),
473
+ }),
474
+ });
475
+ export const zUpdateEpicBody = z.object({
476
+ label: z.string().min(1).optional(),
477
+ description: z.string().optional(),
478
+ status: z
479
+ .enum([
480
+ "BACKLOG",
481
+ "NOT_STARTED",
482
+ "IN_PLANNING",
483
+ "READY_FOR_DEVELOPMENT",
484
+ "IN_DEVELOPMENT",
485
+ "BLOCKED",
486
+ "REVIEW",
487
+ "COMPLETE",
488
+ ])
489
+ .optional(),
490
+ priority: z.enum(["MUST_HAVE", "SHOULD_HAVE", "BACKLOG"]).optional(),
491
+ roadmap_status: z
492
+ .enum(["now", "next", "later", "someday", "released"])
493
+ .optional(),
494
+ });
495
+ export const zUpdateEpicPath = z.object({
496
+ projectId: z.uuid(),
497
+ epicId: z.uuid(),
498
+ });
499
+ /**
500
+ * Successful response
501
+ */
502
+ export const zUpdateEpicResponse = z.object({
503
+ data: z.object({
504
+ id: z.uuid(),
505
+ label: z.string(),
506
+ description: z.string().nullable(),
507
+ node_type: z.enum([
508
+ "epic",
509
+ "userstory",
510
+ "feature",
511
+ "useraction",
512
+ "systemresponse",
513
+ "conditional",
514
+ ]),
515
+ status: z.enum([
516
+ "BACKLOG",
517
+ "NOT_STARTED",
518
+ "IN_PLANNING",
519
+ "READY_FOR_DEVELOPMENT",
520
+ "IN_DEVELOPMENT",
521
+ "BLOCKED",
522
+ "REVIEW",
523
+ "COMPLETE",
524
+ ]),
525
+ priority: z.string().nullable(),
526
+ roadmap_status: z
527
+ .enum(["now", "next", "later", "someday", "released"])
528
+ .optional(),
529
+ parent_id: z.uuid().nullable(),
530
+ parent_feature_id: z.uuid().nullish(),
531
+ project_id: z.uuid(),
532
+ workspace_id: z.uuid(),
533
+ position_x: z.number().optional(),
534
+ position_y: z.number().optional(),
535
+ }),
536
+ error: z.unknown(),
537
+ metadata: z.object({
538
+ timestamp: z.string(),
539
+ request_id: z.string(),
540
+ action_hints: z.array(z.unknown()).optional(),
541
+ }),
542
+ });
543
+ export const zGetEpicTreePath = z.object({
544
+ projectId: z.uuid(),
545
+ epicId: z.uuid(),
546
+ });
547
+ export const zGetEpicTreeQuery = z.object({
548
+ roadmap: z.enum(["now", "next", "later"]).optional(),
549
+ status: z.string().optional(),
550
+ });
551
+ /**
552
+ * Successful response
553
+ */
554
+ export const zGetEpicTreeResponse = z.object({
555
+ data: z.unknown().optional(),
556
+ error: z.unknown(),
557
+ metadata: z.object({
558
+ timestamp: z.string(),
559
+ request_id: z.string(),
560
+ action_hints: z.array(z.unknown()).optional(),
561
+ }),
562
+ });
563
+ export const zListFeaturesPath = z.object({
564
+ projectId: z.uuid(),
565
+ });
566
+ export const zListFeaturesQuery = z.object({
567
+ roadmap: z.enum(["now", "next", "later"]).optional(),
568
+ status: z.string().optional(),
569
+ });
570
+ /**
571
+ * Successful response
572
+ */
573
+ export const zListFeaturesResponse = z.object({
574
+ data: z.array(z.object({
575
+ id: z.uuid(),
576
+ label: z.string(),
577
+ description: z.string().nullable(),
578
+ node_type: z.enum([
579
+ "epic",
580
+ "userstory",
581
+ "feature",
582
+ "useraction",
583
+ "systemresponse",
584
+ "conditional",
585
+ ]),
586
+ status: z.enum([
587
+ "BACKLOG",
588
+ "NOT_STARTED",
589
+ "IN_PLANNING",
590
+ "READY_FOR_DEVELOPMENT",
591
+ "IN_DEVELOPMENT",
592
+ "BLOCKED",
593
+ "REVIEW",
594
+ "COMPLETE",
595
+ ]),
596
+ priority: z.string().nullable(),
597
+ roadmap_status: z
598
+ .enum(["now", "next", "later", "someday", "released"])
599
+ .optional(),
600
+ parent_id: z.uuid().nullable(),
601
+ parent_feature_id: z.uuid().nullish(),
602
+ project_id: z.uuid(),
603
+ workspace_id: z.uuid(),
604
+ position_x: z.number().optional(),
605
+ position_y: z.number().optional(),
606
+ })),
607
+ error: z.unknown(),
608
+ metadata: z.object({
609
+ timestamp: z.string(),
610
+ request_id: z.string(),
611
+ action_hints: z.array(z.unknown()).optional(),
612
+ }),
613
+ });
614
+ export const zGetFeatureDetailPath = z.object({
615
+ projectId: z.uuid(),
616
+ featureId: z.uuid(),
617
+ });
618
+ /**
619
+ * Successful response
620
+ */
621
+ export const zGetFeatureDetailResponse = z.object({
622
+ data: z.object({
623
+ id: z.uuid(),
624
+ label: z.string(),
625
+ description: z.string().nullable(),
626
+ node_type: z.enum([
627
+ "epic",
628
+ "userstory",
629
+ "feature",
630
+ "useraction",
631
+ "systemresponse",
632
+ "conditional",
633
+ ]),
634
+ status: z.enum([
635
+ "BACKLOG",
636
+ "NOT_STARTED",
637
+ "IN_PLANNING",
638
+ "READY_FOR_DEVELOPMENT",
639
+ "IN_DEVELOPMENT",
640
+ "BLOCKED",
641
+ "REVIEW",
642
+ "COMPLETE",
643
+ ]),
644
+ priority: z.string().nullable(),
645
+ roadmap_status: z
646
+ .enum(["now", "next", "later", "someday", "released"])
647
+ .optional(),
648
+ parent_id: z.uuid().nullable(),
649
+ parent_feature_id: z.uuid().nullish(),
650
+ project_id: z.uuid(),
651
+ workspace_id: z.uuid(),
652
+ position_x: z.number().optional(),
653
+ position_y: z.number().optional(),
654
+ }),
655
+ error: z.unknown(),
656
+ metadata: z.object({
657
+ timestamp: z.string(),
658
+ request_id: z.string(),
659
+ action_hints: z.array(z.unknown()).optional(),
660
+ }),
661
+ });
662
+ export const zUpdateFeatureBody = z.object({
663
+ label: z.string().min(1).optional(),
664
+ description: z.string().optional(),
665
+ status: z
666
+ .enum([
667
+ "BACKLOG",
668
+ "NOT_STARTED",
669
+ "IN_PLANNING",
670
+ "READY_FOR_DEVELOPMENT",
671
+ "IN_DEVELOPMENT",
672
+ "BLOCKED",
673
+ "REVIEW",
674
+ "COMPLETE",
675
+ ])
676
+ .optional(),
677
+ priority: z.enum(["MUST_HAVE", "SHOULD_HAVE", "BACKLOG"]).optional(),
678
+ roadmap_status: z
679
+ .enum(["now", "next", "later", "someday", "released"])
680
+ .optional(),
681
+ parent_id: z.uuid().optional(),
682
+ });
683
+ export const zUpdateFeaturePath = z.object({
684
+ projectId: z.uuid(),
685
+ featureId: z.uuid(),
686
+ });
687
+ /**
688
+ * Successful response
689
+ */
690
+ export const zUpdateFeatureResponse = z.object({
691
+ data: z.object({
692
+ id: z.uuid(),
693
+ label: z.string(),
694
+ description: z.string().nullable(),
695
+ node_type: z.enum([
696
+ "epic",
697
+ "userstory",
698
+ "feature",
699
+ "useraction",
700
+ "systemresponse",
701
+ "conditional",
702
+ ]),
703
+ status: z.enum([
704
+ "BACKLOG",
705
+ "NOT_STARTED",
706
+ "IN_PLANNING",
707
+ "READY_FOR_DEVELOPMENT",
708
+ "IN_DEVELOPMENT",
709
+ "BLOCKED",
710
+ "REVIEW",
711
+ "COMPLETE",
712
+ ]),
713
+ priority: z.string().nullable(),
714
+ roadmap_status: z
715
+ .enum(["now", "next", "later", "someday", "released"])
716
+ .optional(),
717
+ parent_id: z.uuid().nullable(),
718
+ parent_feature_id: z.uuid().nullish(),
719
+ project_id: z.uuid(),
720
+ workspace_id: z.uuid(),
721
+ position_x: z.number().optional(),
722
+ position_y: z.number().optional(),
723
+ }),
724
+ error: z.unknown(),
725
+ metadata: z.object({
726
+ timestamp: z.string(),
727
+ request_id: z.string(),
728
+ action_hints: z.array(z.unknown()).optional(),
729
+ }),
730
+ });
731
+ export const zGetFeatureTreePath = z.object({
732
+ projectId: z.uuid(),
733
+ featureId: z.uuid(),
734
+ });
735
+ export const zGetFeatureTreeQuery = z.object({
736
+ roadmap: z.enum(["now", "next", "later"]).optional(),
737
+ status: z.string().optional(),
738
+ });
739
+ /**
740
+ * Successful response
741
+ */
742
+ export const zGetFeatureTreeResponse = z.object({
743
+ data: z.unknown().optional(),
744
+ error: z.unknown(),
745
+ metadata: z.object({
746
+ timestamp: z.string(),
747
+ request_id: z.string(),
748
+ action_hints: z.array(z.unknown()).optional(),
749
+ }),
750
+ });
751
+ export const zListStoriesPath = z.object({
752
+ projectId: z.uuid(),
753
+ });
754
+ export const zListStoriesQuery = z.object({
755
+ roadmap: z.enum(["now", "next", "later"]).optional(),
756
+ status: z.string().optional(),
757
+ });
758
+ /**
759
+ * Successful response
760
+ */
761
+ export const zListStoriesResponse = z.object({
762
+ data: z.array(z.object({
763
+ id: z.uuid(),
764
+ label: z.string(),
765
+ description: z.string().nullable(),
766
+ node_type: z.enum([
767
+ "epic",
768
+ "userstory",
769
+ "feature",
770
+ "useraction",
771
+ "systemresponse",
772
+ "conditional",
773
+ ]),
774
+ status: z.enum([
775
+ "BACKLOG",
776
+ "NOT_STARTED",
777
+ "IN_PLANNING",
778
+ "READY_FOR_DEVELOPMENT",
779
+ "IN_DEVELOPMENT",
780
+ "BLOCKED",
781
+ "REVIEW",
782
+ "COMPLETE",
783
+ ]),
784
+ priority: z.string().nullable(),
785
+ roadmap_status: z
786
+ .enum(["now", "next", "later", "someday", "released"])
787
+ .optional(),
788
+ parent_id: z.uuid().nullable(),
789
+ parent_feature_id: z.uuid().nullish(),
790
+ project_id: z.uuid(),
791
+ workspace_id: z.uuid(),
792
+ position_x: z.number().optional(),
793
+ position_y: z.number().optional(),
794
+ })),
795
+ error: z.unknown(),
796
+ metadata: z.object({
797
+ timestamp: z.string(),
798
+ request_id: z.string(),
799
+ action_hints: z.array(z.unknown()).optional(),
800
+ }),
801
+ });
802
+ export const zGetStoryDetailPath = z.object({
803
+ projectId: z.uuid(),
804
+ storyId: z.uuid(),
805
+ });
806
+ /**
807
+ * Successful response
808
+ */
809
+ export const zGetStoryDetailResponse = z.object({
810
+ data: z.object({
811
+ id: z.uuid(),
812
+ label: z.string(),
813
+ description: z.string().nullable(),
814
+ node_type: z.enum([
815
+ "epic",
816
+ "userstory",
817
+ "feature",
818
+ "useraction",
819
+ "systemresponse",
820
+ "conditional",
821
+ ]),
822
+ status: z.enum([
823
+ "BACKLOG",
824
+ "NOT_STARTED",
825
+ "IN_PLANNING",
826
+ "READY_FOR_DEVELOPMENT",
827
+ "IN_DEVELOPMENT",
828
+ "BLOCKED",
829
+ "REVIEW",
830
+ "COMPLETE",
831
+ ]),
832
+ priority: z.string().nullable(),
833
+ roadmap_status: z
834
+ .enum(["now", "next", "later", "someday", "released"])
835
+ .optional(),
836
+ parent_id: z.uuid().nullable(),
837
+ parent_feature_id: z.uuid().nullish(),
838
+ project_id: z.uuid(),
839
+ workspace_id: z.uuid(),
840
+ position_x: z.number().optional(),
841
+ position_y: z.number().optional(),
842
+ }),
843
+ error: z.unknown(),
844
+ metadata: z.object({
845
+ timestamp: z.string(),
846
+ request_id: z.string(),
847
+ action_hints: z.array(z.unknown()).optional(),
848
+ }),
849
+ });
850
+ export const zUpdateStoryBody = z.object({
851
+ label: z.string().min(1).optional(),
852
+ description: z.string().optional(),
853
+ status: z
854
+ .enum([
855
+ "BACKLOG",
856
+ "NOT_STARTED",
857
+ "IN_PLANNING",
858
+ "READY_FOR_DEVELOPMENT",
859
+ "IN_DEVELOPMENT",
860
+ "BLOCKED",
861
+ "REVIEW",
862
+ "COMPLETE",
863
+ ])
864
+ .optional(),
865
+ priority: z.enum(["MUST_HAVE", "SHOULD_HAVE", "BACKLOG"]).optional(),
866
+ roadmap_status: z
867
+ .enum(["now", "next", "later", "someday", "released"])
868
+ .optional(),
869
+ parent_id: z.uuid().optional(),
870
+ });
871
+ export const zUpdateStoryPath = z.object({
872
+ projectId: z.uuid(),
873
+ storyId: z.uuid(),
874
+ });
875
+ /**
876
+ * Successful response
877
+ */
878
+ export const zUpdateStoryResponse = z.object({
879
+ data: z.object({
880
+ id: z.uuid(),
881
+ label: z.string(),
882
+ description: z.string().nullable(),
883
+ node_type: z.enum([
884
+ "epic",
885
+ "userstory",
886
+ "feature",
887
+ "useraction",
888
+ "systemresponse",
889
+ "conditional",
890
+ ]),
891
+ status: z.enum([
892
+ "BACKLOG",
893
+ "NOT_STARTED",
894
+ "IN_PLANNING",
895
+ "READY_FOR_DEVELOPMENT",
896
+ "IN_DEVELOPMENT",
897
+ "BLOCKED",
898
+ "REVIEW",
899
+ "COMPLETE",
900
+ ]),
901
+ priority: z.string().nullable(),
902
+ roadmap_status: z
903
+ .enum(["now", "next", "later", "someday", "released"])
904
+ .optional(),
905
+ parent_id: z.uuid().nullable(),
906
+ parent_feature_id: z.uuid().nullish(),
907
+ project_id: z.uuid(),
908
+ workspace_id: z.uuid(),
909
+ position_x: z.number().optional(),
910
+ position_y: z.number().optional(),
911
+ }),
912
+ error: z.unknown(),
913
+ metadata: z.object({
914
+ timestamp: z.string(),
915
+ request_id: z.string(),
916
+ action_hints: z.array(z.unknown()).optional(),
917
+ }),
918
+ });
919
+ export const zGetStoryTreePath = z.object({
920
+ projectId: z.uuid(),
921
+ storyId: z.uuid(),
922
+ });
923
+ export const zGetStoryTreeQuery = z.object({
924
+ roadmap: z.enum(["now", "next", "later"]).optional(),
925
+ status: z.string().optional(),
926
+ });
927
+ /**
928
+ * Successful response
929
+ */
930
+ export const zGetStoryTreeResponse = z.object({
931
+ data: z.unknown().optional(),
932
+ error: z.unknown(),
933
+ metadata: z.object({
934
+ timestamp: z.string(),
935
+ request_id: z.string(),
936
+ action_hints: z.array(z.unknown()).optional(),
937
+ }),
938
+ });
939
+ export const zListTemplatesHeaders = z.object({
940
+ "x-workspace-id": z.uuid().optional(),
941
+ });
942
+ /**
943
+ * Successful response
944
+ */
945
+ export const zListTemplatesResponse = z.object({
946
+ data: z.array(z.object({
947
+ id: z.string(),
948
+ name: z.string(),
949
+ description: z.string(),
950
+ author: z.string(),
951
+ isOfficial: z.boolean(),
952
+ framework: z.string(),
953
+ featuresCount: z.number(),
954
+ createdAt: z.string(),
955
+ })),
956
+ error: z.unknown(),
957
+ metadata: z.object({
958
+ timestamp: z.string(),
959
+ request_id: z.string(),
960
+ action_hints: z.array(z.unknown()).optional(),
961
+ }),
962
+ });
963
+ export const zCreateTemplateBody = z.object({
964
+ workspace_id: z.uuid(),
965
+ name: z.string().min(1).max(255),
966
+ description: z.string().optional(),
967
+ });
968
+ /**
969
+ * Successful response
970
+ */
971
+ export const zCreateTemplateResponse = z.object({
972
+ data: z.object({
973
+ id: z.string(),
974
+ name: z.string(),
975
+ description: z.string(),
976
+ author: z.string(),
977
+ isOfficial: z.boolean(),
978
+ framework: z.string(),
979
+ featuresCount: z.number(),
980
+ createdAt: z.string(),
981
+ }),
982
+ error: z.unknown(),
983
+ metadata: z.object({
984
+ timestamp: z.string(),
985
+ request_id: z.string(),
986
+ action_hints: z.array(z.unknown()).optional(),
987
+ }),
988
+ });
989
+ export const zDeleteTemplatePath = z.object({
990
+ templateId: z.uuid(),
991
+ });
992
+ /**
993
+ * Successful response
994
+ */
995
+ export const zDeleteTemplateResponse = z.object({
996
+ data: z.unknown(),
997
+ error: z.unknown(),
998
+ metadata: z.object({
999
+ timestamp: z.string(),
1000
+ request_id: z.string(),
1001
+ action_hints: z.array(z.unknown()).optional(),
1002
+ }),
1003
+ });
1004
+ export const zGetTemplateDetailPath = z.object({
1005
+ templateId: z.uuid(),
1006
+ });
1007
+ /**
1008
+ * Successful response
1009
+ */
1010
+ export const zGetTemplateDetailResponse = z.object({
1011
+ data: z.object({
1012
+ id: z.string(),
1013
+ name: z.string(),
1014
+ description: z.string(),
1015
+ author: z.string(),
1016
+ isOfficial: z.boolean(),
1017
+ framework: z.string(),
1018
+ featuresCount: z.number(),
1019
+ createdAt: z.string(),
1020
+ }),
1021
+ error: z.unknown(),
1022
+ metadata: z.object({
1023
+ timestamp: z.string(),
1024
+ request_id: z.string(),
1025
+ action_hints: z.array(z.unknown()).optional(),
1026
+ }),
1027
+ });
1028
+ export const zUpdateTemplateBody = z.object({
1029
+ name: z.string().min(1).max(255).optional(),
1030
+ description: z.string().optional(),
1031
+ });
1032
+ export const zUpdateTemplatePath = z.object({
1033
+ templateId: z.uuid(),
1034
+ });
1035
+ /**
1036
+ * Successful response
1037
+ */
1038
+ export const zUpdateTemplateResponse = z.object({
1039
+ data: z.object({
1040
+ id: z.string(),
1041
+ name: z.string(),
1042
+ description: z.string(),
1043
+ author: z.string(),
1044
+ isOfficial: z.boolean(),
1045
+ framework: z.string(),
1046
+ featuresCount: z.number(),
1047
+ createdAt: z.string(),
1048
+ }),
1049
+ error: z.unknown(),
1050
+ metadata: z.object({
1051
+ timestamp: z.string(),
1052
+ request_id: z.string(),
1053
+ action_hints: z.array(z.unknown()).optional(),
1054
+ }),
1055
+ });
1056
+ export const zListTemplateFeaturesPath = z.object({
1057
+ templateId: z.uuid(),
1058
+ });
1059
+ /**
1060
+ * Successful response
1061
+ */
1062
+ export const zListTemplateFeaturesResponse = z.object({
1063
+ data: z.unknown().optional(),
1064
+ error: z.unknown(),
1065
+ metadata: z.object({
1066
+ timestamp: z.string(),
1067
+ request_id: z.string(),
1068
+ action_hints: z.array(z.unknown()).optional(),
1069
+ }),
1070
+ });
1071
+ export const zCreateTemplateFeatureBody = z.object({
1072
+ name: z.string().min(1).max(255),
1073
+ description: z.string().optional(),
1074
+ is_public: z.boolean().optional().default(false),
1075
+ });
1076
+ export const zCreateTemplateFeaturePath = z.object({
1077
+ templateId: z.uuid(),
1078
+ });
1079
+ /**
1080
+ * Successful response
1081
+ */
1082
+ export const zCreateTemplateFeatureResponse = z.object({
1083
+ data: z.object({
1084
+ id: z.uuid(),
1085
+ name: z.string(),
1086
+ description: z.string().nullable(),
1087
+ is_public: z.boolean(),
1088
+ created_at: z.string(),
1089
+ }),
1090
+ error: z.unknown(),
1091
+ metadata: z.object({
1092
+ timestamp: z.string(),
1093
+ request_id: z.string(),
1094
+ action_hints: z.array(z.unknown()).optional(),
1095
+ }),
1096
+ });
1097
+ export const zDeleteTemplateFeaturePath = z.object({
1098
+ templateId: z.uuid(),
1099
+ featureId: z.uuid(),
1100
+ });
1101
+ /**
1102
+ * Successful response
1103
+ */
1104
+ export const zDeleteTemplateFeatureResponse = z.object({
1105
+ data: z.unknown(),
1106
+ error: z.unknown(),
1107
+ metadata: z.object({
1108
+ timestamp: z.string(),
1109
+ request_id: z.string(),
1110
+ action_hints: z.array(z.unknown()).optional(),
1111
+ }),
1112
+ });
1113
+ export const zUpdateTemplateFeatureBody = z.object({
1114
+ name: z.string().min(1).max(255).optional(),
1115
+ description: z.string().optional(),
1116
+ is_public: z.boolean().optional(),
1117
+ });
1118
+ export const zUpdateTemplateFeaturePath = z.object({
1119
+ templateId: z.uuid(),
1120
+ featureId: z.uuid(),
1121
+ });
1122
+ /**
1123
+ * Successful response
1124
+ */
1125
+ export const zUpdateTemplateFeatureResponse = z.object({
1126
+ data: z.object({
1127
+ id: z.uuid(),
1128
+ name: z.string(),
1129
+ description: z.string().nullable(),
1130
+ is_public: z.boolean(),
1131
+ created_at: z.string(),
1132
+ }),
1133
+ error: z.unknown(),
1134
+ metadata: z.object({
1135
+ timestamp: z.string(),
1136
+ request_id: z.string(),
1137
+ action_hints: z.array(z.unknown()).optional(),
1138
+ }),
1139
+ });
1140
+ export const zListIdeasPath = z.object({
1141
+ workspaceId: z.uuid(),
1142
+ });
1143
+ /**
1144
+ * Successful response
1145
+ */
1146
+ export const zListIdeasResponse = z.object({
1147
+ data: z.array(z.object({
1148
+ id: z.uuid(),
1149
+ workspace_id: z.uuid(),
1150
+ title: z.string(),
1151
+ description: z.string().nullable(),
1152
+ status: z.string(),
1153
+ converted_project_id: z.uuid().nullable(),
1154
+ created_at: z.iso.datetime().nullable(),
1155
+ updated_at: z.iso.datetime().nullable(),
1156
+ })),
1157
+ error: z.unknown(),
1158
+ metadata: z.object({
1159
+ timestamp: z.string(),
1160
+ request_id: z.string(),
1161
+ action_hints: z.array(z.unknown()).optional(),
1162
+ }),
1163
+ });
1164
+ export const zCreateIdeaBody = z.object({
1165
+ title: z.string().min(1),
1166
+ description: z.string().optional(),
1167
+ status: z.string().optional(),
1168
+ });
1169
+ export const zCreateIdeaPath = z.object({
1170
+ workspaceId: z.uuid(),
1171
+ });
1172
+ /**
1173
+ * Successful response
1174
+ */
1175
+ export const zCreateIdeaResponse = z.object({
1176
+ data: z.object({
1177
+ id: z.uuid(),
1178
+ workspace_id: z.uuid(),
1179
+ title: z.string(),
1180
+ description: z.string().nullable(),
1181
+ status: z.string(),
1182
+ converted_project_id: z.uuid().nullable(),
1183
+ created_at: z.iso.datetime().nullable(),
1184
+ updated_at: z.iso.datetime().nullable(),
1185
+ }),
1186
+ error: z.unknown(),
1187
+ metadata: z.object({
1188
+ timestamp: z.string(),
1189
+ request_id: z.string(),
1190
+ action_hints: z.array(z.unknown()).optional(),
1191
+ }),
1192
+ });
1193
+ export const zUpdateIdeaBody = z.object({
1194
+ title: z.string().min(1).optional(),
1195
+ description: z.string().optional(),
1196
+ status: z.string().optional(),
1197
+ });
1198
+ export const zUpdateIdeaPath = z.object({
1199
+ workspaceId: z.uuid(),
1200
+ ideaId: z.uuid(),
1201
+ });
1202
+ /**
1203
+ * Successful response
1204
+ */
1205
+ export const zUpdateIdeaResponse = z.object({
1206
+ data: z.object({
1207
+ id: z.uuid(),
1208
+ workspace_id: z.uuid(),
1209
+ title: z.string(),
1210
+ description: z.string().nullable(),
1211
+ status: z.string(),
1212
+ converted_project_id: z.uuid().nullable(),
1213
+ created_at: z.iso.datetime().nullable(),
1214
+ updated_at: z.iso.datetime().nullable(),
1215
+ }),
1216
+ error: z.unknown(),
1217
+ metadata: z.object({
1218
+ timestamp: z.string(),
1219
+ request_id: z.string(),
1220
+ action_hints: z.array(z.unknown()).optional(),
1221
+ }),
1222
+ });
1223
+ export const zGraduateIdeaBody = z.object({
1224
+ project_name: z.string().optional(),
1225
+ });
1226
+ export const zGraduateIdeaPath = z.object({
1227
+ workspaceId: z.uuid(),
1228
+ ideaId: z.uuid(),
1229
+ });
1230
+ /**
1231
+ * Successful response
1232
+ */
1233
+ export const zGraduateIdeaResponse = z.object({
1234
+ data: z.object({
1235
+ id: z.uuid(),
1236
+ name: z.string(),
1237
+ description: z.string().nullable(),
1238
+ status: z.string(),
1239
+ personas: z
1240
+ .array(z.object({
1241
+ id: z.string(),
1242
+ name: z.string().min(1),
1243
+ description: z.string().min(1),
1244
+ ahaMoment: z.string().min(1),
1245
+ desiredOutcome: z.string().min(1),
1246
+ }))
1247
+ .nullish()
1248
+ .default([]),
1249
+ created_at: z.iso.datetime().nullable(),
1250
+ updated_at: z.iso.datetime().nullable(),
1251
+ problem_statement: z.string().nullable(),
1252
+ project_rules: z.string().nullable(),
1253
+ workspace_id: z.uuid(),
1254
+ project_type_id: z.uuid().nullable(),
1255
+ }),
1256
+ error: z.unknown(),
1257
+ metadata: z.object({
1258
+ timestamp: z.string(),
1259
+ request_id: z.string(),
1260
+ action_hints: z.array(z.unknown()).optional(),
1261
+ }),
1262
+ });