hyperbrane 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 (123) hide show
  1. package/README.md +41 -0
  2. package/dist/agent/agentService.d.ts +31 -0
  3. package/dist/agent/agentService.js +388 -0
  4. package/dist/agent/agentStorage.d.ts +27 -0
  5. package/dist/agent/agentStorage.js +52 -0
  6. package/dist/agent/api.d.ts +264 -0
  7. package/dist/agent/api.js +14 -0
  8. package/dist/agent/gatewaySignIns.d.ts +5 -0
  9. package/dist/agent/gatewaySignIns.js +11 -0
  10. package/dist/agent/session/client.d.ts +14 -0
  11. package/dist/agent/session/client.js +47 -0
  12. package/dist/agent/session/sessionStorage.d.ts +66 -0
  13. package/dist/agent/session/sessionStorage.js +89 -0
  14. package/dist/agent/session/sharedConnection.d.ts +13 -0
  15. package/dist/agent/session/sharedConnection.js +55 -0
  16. package/dist/agent/session/worker/jsonRpc.d.ts +39 -0
  17. package/dist/agent/session/worker/jsonRpc.js +102 -0
  18. package/dist/agent/session/worker/protocol.d.ts +120 -0
  19. package/dist/agent/session/worker/protocol.js +32 -0
  20. package/dist/agent/session/workerConnection.d.ts +29 -0
  21. package/dist/agent/session/workerConnection.js +44 -0
  22. package/dist/agent/session/workerSseConnection.d.ts +15 -0
  23. package/dist/agent/session/workerSseConnection.js +26 -0
  24. package/dist/agent/workerBundle.d.ts +19 -0
  25. package/dist/agent/workerBundle.generated.d.ts +1 -0
  26. package/dist/agent/workerBundle.generated.js +2 -0
  27. package/dist/agent/workerBundle.js +31 -0
  28. package/dist/cli/agent.d.ts +3 -0
  29. package/dist/cli/agent.js +423 -0
  30. package/dist/cli/command.d.ts +46 -0
  31. package/dist/cli/command.js +98 -0
  32. package/dist/cli/dimension.d.ts +2 -0
  33. package/dist/cli/dimension.js +85 -0
  34. package/dist/cli/gateway.d.ts +6 -0
  35. package/dist/cli/gateway.js +245 -0
  36. package/dist/cli/main.d.ts +2 -0
  37. package/dist/cli/main.js +125 -0
  38. package/dist/cli/portal.d.ts +2 -0
  39. package/dist/cli/portal.js +39 -0
  40. package/dist/cli/services.d.ts +18 -0
  41. package/dist/cli/services.js +33 -0
  42. package/dist/cli/streamPrinter.d.ts +23 -0
  43. package/dist/cli/streamPrinter.js +251 -0
  44. package/dist/cli/table.d.ts +7 -0
  45. package/dist/cli/table.js +54 -0
  46. package/dist/dimension/api.d.ts +67 -0
  47. package/dist/dimension/api.js +81 -0
  48. package/dist/dimension/http.d.ts +7 -0
  49. package/dist/dimension/http.js +77 -0
  50. package/dist/dimension/image.d.ts +13 -0
  51. package/dist/dimension/image.js +43 -0
  52. package/dist/dimension/imageFiles.generated.d.ts +1 -0
  53. package/dist/dimension/imageFiles.generated.js +5 -0
  54. package/dist/dimension/paths.d.ts +5 -0
  55. package/dist/dimension/paths.js +7 -0
  56. package/dist/dimension/service.d.ts +22 -0
  57. package/dist/dimension/service.js +242 -0
  58. package/dist/dimension/storage.d.ts +39 -0
  59. package/dist/dimension/storage.js +78 -0
  60. package/dist/index.d.ts +18 -0
  61. package/dist/index.js +25 -0
  62. package/dist/lib/docker-api.d.ts +13787 -0
  63. package/dist/lib/docker-api.js +5 -0
  64. package/dist/lib/docker.d.ts +77 -0
  65. package/dist/lib/docker.js +214 -0
  66. package/dist/lib/image.d.ts +14 -0
  67. package/dist/lib/image.js +29 -0
  68. package/dist/lib/jsonDirectory.d.ts +28 -0
  69. package/dist/lib/jsonDirectory.js +102 -0
  70. package/dist/lib/sleep.d.ts +2 -0
  71. package/dist/lib/sleep.js +4 -0
  72. package/dist/lib/tar.d.ts +2 -0
  73. package/dist/lib/tar.js +65 -0
  74. package/dist/lib/version.d.ts +1 -0
  75. package/dist/lib/version.js +1 -0
  76. package/dist/portal-gateway/api.d.ts +98 -0
  77. package/dist/portal-gateway/api.js +12 -0
  78. package/dist/portal-gateway/fakes.d.ts +3 -0
  79. package/dist/portal-gateway/fakes.js +11 -0
  80. package/dist/portal-gateway/gatewayService.d.ts +37 -0
  81. package/dist/portal-gateway/gatewayService.js +380 -0
  82. package/dist/portal-gateway/gatewayStorage.d.ts +66 -0
  83. package/dist/portal-gateway/gatewayStorage.js +125 -0
  84. package/dist/portal-gateway/image.d.ts +6 -0
  85. package/dist/portal-gateway/image.js +13 -0
  86. package/dist/portal-gateway/imageFiles.generated.d.ts +1 -0
  87. package/dist/portal-gateway/imageFiles.generated.js +8 -0
  88. package/dist/portal-gateway/portalService.d.ts +48 -0
  89. package/dist/portal-gateway/portalService.js +327 -0
  90. package/dist/portal-gateway/portalStorage.d.ts +34 -0
  91. package/dist/portal-gateway/portalStorage.js +44 -0
  92. package/dist/portal-gateway/upstream.d.ts +157 -0
  93. package/dist/portal-gateway/upstream.js +4 -0
  94. package/dist/sandbox/api.d.ts +184 -0
  95. package/dist/sandbox/api.js +14 -0
  96. package/dist/sandbox/boatService.d.ts +52 -0
  97. package/dist/sandbox/boatService.js +335 -0
  98. package/dist/sandbox/containerService.d.ts +15 -0
  99. package/dist/sandbox/containerService.js +177 -0
  100. package/dist/sandbox/endpointProxy.d.ts +90 -0
  101. package/dist/sandbox/endpointProxy.js +701 -0
  102. package/dist/sandbox/exeDevAuth.d.ts +16 -0
  103. package/dist/sandbox/exeDevAuth.js +49 -0
  104. package/dist/sandbox/localService.d.ts +19 -0
  105. package/dist/sandbox/localService.js +182 -0
  106. package/dist/sandbox/sseConnection.d.ts +41 -0
  107. package/dist/sandbox/sseConnection.js +166 -0
  108. package/dist/sandbox/sshService.d.ts +30 -0
  109. package/dist/sandbox/sshService.js +647 -0
  110. package/dist/upstreams/anthropic.d.ts +7 -0
  111. package/dist/upstreams/anthropic.js +27 -0
  112. package/dist/upstreams/index.d.ts +6 -0
  113. package/dist/upstreams/index.js +7 -0
  114. package/dist/upstreams/openai.d.ts +7 -0
  115. package/dist/upstreams/openai.js +40 -0
  116. package/dist/vendor-types/claude/agent-sdk/agentSdkTypes.d.ts +1 -0
  117. package/dist/vendor-types/claude/agent-sdk/bridge.d.ts +388 -0
  118. package/dist/vendor-types/claude/agent-sdk/browser-sdk.d.ts +184 -0
  119. package/dist/vendor-types/claude/agent-sdk/core.d.ts +20 -0
  120. package/dist/vendor-types/claude/agent-sdk/extractFromBunfs.d.ts +1 -0
  121. package/dist/vendor-types/claude/agent-sdk/sdk-tools.d.ts +4153 -0
  122. package/dist/vendor-types/claude/agent-sdk/sdk.d.ts +9833 -0
  123. package/package.json +55 -0
@@ -0,0 +1,4153 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated by json-schema-to-typescript.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
5
+ * and run json-schema-to-typescript to regenerate this file.
6
+ */
7
+
8
+ /**
9
+ * JSON Schema definitions for Claude CLI tool inputs
10
+ */
11
+ export type ToolInputSchemas =
12
+ | AgentInput
13
+ | BashInput
14
+ | ExitPlanModeInput
15
+ | FileEditInput
16
+ | FileReadInput
17
+ | FileWriteInput
18
+ | GlobInput
19
+ | GrepInput
20
+ | TaskStopInput
21
+ | ListMcpResourcesInput
22
+ | RefreshMcpToolsInput
23
+ | McpInput
24
+ | NotebookEditInput
25
+ | ReadMcpResourceDirInput
26
+ | ReadMcpResourceInput
27
+ | ReportFindingsInput
28
+ | TodoWriteInput
29
+ | WebFetchInput
30
+ | WebSearchInput
31
+ | AskUserQuestionInput
32
+ | SendFeedbackInput
33
+ | ClaudeDesignInput
34
+ | ProjectsInput
35
+ | EnterPlanModeInput
36
+ | TaskCreateInput
37
+ | TaskGetInput
38
+ | TaskUpdateInput
39
+ | TaskListInput
40
+ | WorkflowInput
41
+ | CronCreateInput
42
+ | CronDeleteInput
43
+ | CronListInput
44
+ | ScheduleWakeupInput
45
+ | RemoteTriggerInput
46
+ | ShowOnboardingRolePickerInput
47
+ | ReadNotificationsInput
48
+ | MonitorInput
49
+ | ProposeSkillsInput
50
+ | ProposeGoalInput
51
+ | ArtifactInput
52
+ | PushNotificationInput
53
+ | EnterWorktreeInput
54
+ | ExitWorktreeInput
55
+ | ToolOutputSchemas;
56
+ export type ToolOutputSchemas =
57
+ | AgentOutput
58
+ | BashOutput
59
+ | ExitPlanModeOutput
60
+ | FileEditOutput
61
+ | FileReadOutput
62
+ | FileWriteOutput
63
+ | GlobOutput
64
+ | GrepOutput
65
+ | TaskStopOutput
66
+ | ListMcpResourcesOutput
67
+ | RefreshMcpToolsOutput
68
+ | McpOutput
69
+ | NotebookEditOutput
70
+ | ReadMcpResourceDirOutput
71
+ | ReadMcpResourceOutput
72
+ | ReportFindingsOutput
73
+ | TodoWriteOutput
74
+ | WebFetchOutput
75
+ | WebSearchOutput
76
+ | AskUserQuestionOutput
77
+ | SendFeedbackOutput
78
+ | EnterWorktreeOutput
79
+ | ExitWorktreeOutput
80
+ | TaskCreateOutput
81
+ | TaskGetOutput
82
+ | TaskUpdateOutput
83
+ | TaskListOutput
84
+ | ArtifactOutput
85
+ | RemoteTriggerOutput
86
+ | ShowOnboardingRolePickerOutput
87
+ | ReadNotificationsOutput
88
+ | ScheduleWakeupOutput
89
+ | MonitorOutput
90
+ | ProposeSkillsOutput
91
+ | ProposeGoalOutput
92
+ | EnterPlanModeOutput
93
+ | WorkflowOutput
94
+ | CronCreateOutput
95
+ | CronDeleteOutput
96
+ | CronListOutput
97
+ | PushNotificationOutput
98
+ | ClaudeDesignOutput
99
+ | ProjectsOutput;
100
+ export type AgentOutput =
101
+ | {
102
+ agentId: string;
103
+ agentType?: string;
104
+ content: {
105
+ type: "text";
106
+ text: string;
107
+ citations?: unknown[] | null;
108
+ }[];
109
+ resolvedModel?: string;
110
+ modelsUsed?: string[];
111
+ totalToolUseCount: number;
112
+ totalDurationMs: number;
113
+ totalTokens: number;
114
+ usage: {
115
+ input_tokens: number;
116
+ output_tokens: number;
117
+ cache_creation_input_tokens: number | null;
118
+ cache_read_input_tokens: number | null;
119
+ server_tool_use: {
120
+ web_search_requests: number;
121
+ web_fetch_requests: number;
122
+ } | null;
123
+ service_tier: string | null;
124
+ cache_creation: {
125
+ ephemeral_1h_input_tokens: number;
126
+ ephemeral_5m_input_tokens: number;
127
+ } | null;
128
+ inference_geo?: string | null;
129
+ speed?: string | null;
130
+ iterations?: unknown;
131
+ output_tokens_details?: {
132
+ thinking_tokens?: number | null;
133
+ } | null;
134
+ };
135
+ toolStats?: {
136
+ readCount: number;
137
+ searchCount: number;
138
+ bashCount: number;
139
+ editFileCount: number;
140
+ linesAdded: number;
141
+ linesRemoved: number;
142
+ otherToolCount: number;
143
+ frameCount?: number;
144
+ };
145
+ status: "completed";
146
+ prompt: string;
147
+ worktreePath?: string;
148
+ worktreeBranch?: string;
149
+ }
150
+ | {
151
+ status: "async_launched";
152
+ isAsync?: true;
153
+ /**
154
+ * The ID of the async agent
155
+ */
156
+ agentId: string;
157
+ /**
158
+ * The description of the task
159
+ */
160
+ description: string;
161
+ /**
162
+ * Model in use at the backgrounding transition (a pre-background swap is reflected here)
163
+ */
164
+ resolvedModel?: string;
165
+ /**
166
+ * Ordered distinct models used before backgrounding (length > 1 means a mid-run swap)
167
+ */
168
+ modelsUsed?: string[];
169
+ /**
170
+ * The prompt for the agent
171
+ */
172
+ prompt: string;
173
+ /**
174
+ * Path to the output file for checking agent progress
175
+ */
176
+ outputFile: string;
177
+ /**
178
+ * Whether the calling agent has Read/Bash tools to check progress
179
+ */
180
+ canReadOutputFile?: boolean;
181
+ }
182
+ | {
183
+ status: "remote_launched";
184
+ /**
185
+ * The ID of the remote agent task
186
+ */
187
+ taskId: string;
188
+ /**
189
+ * The URL of the cloud session
190
+ */
191
+ sessionUrl: string;
192
+ /**
193
+ * The description of the task
194
+ */
195
+ description: string;
196
+ /**
197
+ * The prompt for the agent
198
+ */
199
+ prompt: string;
200
+ /**
201
+ * Path to the output file for checking agent progress
202
+ */
203
+ outputFile: string;
204
+ };
205
+ export type FileReadOutput =
206
+ | {
207
+ type: "text";
208
+ file: {
209
+ /**
210
+ * The path to the file that was read
211
+ */
212
+ filePath: string;
213
+ /**
214
+ * The content of the file
215
+ */
216
+ content: string;
217
+ /**
218
+ * Number of lines in the returned content
219
+ */
220
+ numLines: number;
221
+ /**
222
+ * The starting line number
223
+ */
224
+ startLine: number;
225
+ /**
226
+ * Total number of lines in the file
227
+ */
228
+ totalLines: number;
229
+ /**
230
+ * True when a whole-file read was auto-paginated because it exceeded the token cap (the content is a partial first page). A programmatic signal for internal consumers; survives output reconstruction (unlike the render-time banner).
231
+ */
232
+ truncatedByTokenCap?: boolean;
233
+ };
234
+ /**
235
+ * Set when this Read completed a saved Artifact source file: the Artifact and the version of it that now counts as viewed.
236
+ */
237
+ artifactRead?: {
238
+ slug: string;
239
+ ver: string;
240
+ };
241
+ }
242
+ | {
243
+ type: "image";
244
+ file: {
245
+ /**
246
+ * Base64-encoded image data
247
+ */
248
+ base64: string;
249
+ /**
250
+ * The MIME type of the image
251
+ */
252
+ type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
253
+ /**
254
+ * Original file size in bytes
255
+ */
256
+ originalSize: number;
257
+ /**
258
+ * Image dimension info for coordinate mapping
259
+ */
260
+ dimensions?: {
261
+ /**
262
+ * Original image width in pixels
263
+ */
264
+ originalWidth?: number;
265
+ /**
266
+ * Original image height in pixels
267
+ */
268
+ originalHeight?: number;
269
+ /**
270
+ * Displayed image width in pixels (after resizing)
271
+ */
272
+ displayWidth?: number;
273
+ /**
274
+ * Displayed image height in pixels (after resizing)
275
+ */
276
+ displayHeight?: number;
277
+ };
278
+ };
279
+ }
280
+ | {
281
+ type: "notebook";
282
+ file: {
283
+ /**
284
+ * The path to the notebook file
285
+ */
286
+ filePath: string;
287
+ /**
288
+ * Array of notebook cells
289
+ */
290
+ cells: unknown[];
291
+ };
292
+ }
293
+ | {
294
+ type: "pdf";
295
+ file: {
296
+ /**
297
+ * The path to the PDF file
298
+ */
299
+ filePath: string;
300
+ /**
301
+ * Base64-encoded PDF data
302
+ */
303
+ base64: string;
304
+ /**
305
+ * Original file size in bytes
306
+ */
307
+ originalSize: number;
308
+ };
309
+ }
310
+ | {
311
+ type: "parts";
312
+ file: {
313
+ /**
314
+ * The path to the PDF file
315
+ */
316
+ filePath: string;
317
+ /**
318
+ * Original file size in bytes
319
+ */
320
+ originalSize: number;
321
+ /**
322
+ * Number of pages extracted
323
+ */
324
+ count: number;
325
+ /**
326
+ * Directory containing extracted page images
327
+ */
328
+ outputDir: string;
329
+ };
330
+ /**
331
+ * Document page number of the first extracted page (1 when no range was requested); labels the page images in the model-facing tool_result
332
+ */
333
+ firstPage?: number;
334
+ /**
335
+ * Extracted page images, in page order. Present only transiently in-process: the page image bytes are delivered solely as image blocks in the model-facing tool_result content and are not retained on the tool_use_result, so this key is absent on the emitted/persisted result
336
+ */
337
+ pages?: {
338
+ /**
339
+ * Base64-encoded page image; empty when the page could not be processed
340
+ */
341
+ base64: string;
342
+ /**
343
+ * The MIME type of the image
344
+ */
345
+ mediaType: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
346
+ /**
347
+ * Why the page could not be processed as an image; set only when base64 is empty
348
+ */
349
+ error?: string;
350
+ }[];
351
+ }
352
+ | {
353
+ type: "file_unchanged";
354
+ file: {
355
+ /**
356
+ * The path to the file
357
+ */
358
+ filePath: string;
359
+ };
360
+ /**
361
+ * Set when the dedup matched a startup-seeded entry (CLAUDE.md / nested memory) rather than a prior Read tool_result
362
+ */
363
+ source?: "seeded";
364
+ };
365
+ export type ListMcpResourcesOutput = {
366
+ /**
367
+ * Resource URI
368
+ */
369
+ uri: string;
370
+ /**
371
+ * Resource name
372
+ */
373
+ name: string;
374
+ /**
375
+ * MIME type of the resource
376
+ */
377
+ mimeType?: string;
378
+ /**
379
+ * Resource description
380
+ */
381
+ description?: string;
382
+ /**
383
+ * Server that provides this resource
384
+ */
385
+ server: string;
386
+ }[];
387
+ export type RefreshMcpToolsOutput = {
388
+ /**
389
+ * Server name
390
+ */
391
+ server: string;
392
+ /**
393
+ * refreshed: tool list re-queried and applied. error: the re-query failed and the previous tool set was kept. not_connected: the server has no live connection to query (this tool never dials).
394
+ */
395
+ status: "refreshed" | "error" | "not_connected";
396
+ /**
397
+ * Number of tools now available from this server
398
+ */
399
+ toolCount?: number;
400
+ /**
401
+ * Tool names this refresh added
402
+ */
403
+ added?: string[];
404
+ /**
405
+ * Tool names this refresh removed
406
+ */
407
+ removed?: string[];
408
+ /**
409
+ * Why the refresh failed or the server was unavailable
410
+ */
411
+ error?: string;
412
+ }[];
413
+ /**
414
+ * MCP tool execution result
415
+ */
416
+ export type McpOutput =
417
+ | string
418
+ | {
419
+ type: string;
420
+ [k: string]: unknown;
421
+ }[]
422
+ | {
423
+ [k: string]: unknown;
424
+ };
425
+ export type ArtifactOutput =
426
+ | {
427
+ url: string;
428
+ path: string;
429
+ artifact_id?: string;
430
+ title?: string;
431
+ version?: string;
432
+ capabilities?: unknown;
433
+ stored?: {
434
+ contract: string;
435
+ preferredContract?: string;
436
+ capabilities?: {
437
+ [k: string]: unknown;
438
+ };
439
+ carried?: boolean;
440
+ read?: string;
441
+ };
442
+ warnings?: string[];
443
+ publishesRemaining?: number;
444
+ publishesResetAt?: number;
445
+ contract?: string;
446
+ updated?: boolean;
447
+ icon?: string;
448
+ faviconSent?: true;
449
+ iconDropped?: true;
450
+ audience?: string;
451
+ seq?: number;
452
+ unchanged?: true;
453
+ liveSubscription?: string;
454
+ }
455
+ | {
456
+ artifacts: {
457
+ title: string;
458
+ url: string;
459
+ favicon?: string;
460
+ updatedAt?: string;
461
+ rel?: "mine" | "shared";
462
+ external?: true;
463
+ role?: "editor" | "commenter" | "reader" | "viewer";
464
+ }[];
465
+ truncated?: boolean;
466
+ scope?: "shared" | "all";
467
+ external_listed?: true;
468
+ }
469
+ | {
470
+ read: {
471
+ url: string;
472
+ bytes: number;
473
+ code: number;
474
+ codeText: string;
475
+ result: string;
476
+ durationMs: number;
477
+ };
478
+ artifactRead?: {
479
+ slug: string;
480
+ ver?: string;
481
+ seeded?: false;
482
+ };
483
+ }
484
+ | {
485
+ watch: {
486
+ url: string;
487
+ watching: boolean;
488
+ outcome: string;
489
+ reason?: string;
490
+ durable_skip_reason?: string;
491
+ task_id?: string;
492
+ since?: number;
493
+ token_expires_at?: number;
494
+ rail?: string;
495
+ trigger_id?: string;
496
+ durable_since?: string;
497
+ status?: number;
498
+ detail?: string;
499
+ note?: string;
500
+ events?: string[];
501
+ };
502
+ }
503
+ | {
504
+ unwatch: {
505
+ url: string;
506
+ was_watching: boolean;
507
+ };
508
+ }
509
+ | {
510
+ watches: (
511
+ | {
512
+ url: string;
513
+ task_id: string;
514
+ since: number;
515
+ explicit: boolean;
516
+ connected: boolean;
517
+ connecting?: boolean;
518
+ token_expires_at: number;
519
+ armed_via?: string;
520
+ }
521
+ | {
522
+ url: string;
523
+ rail: "durable_wake";
524
+ trigger_id: string;
525
+ since: string;
526
+ events?: string[];
527
+ restored?: boolean;
528
+ }
529
+ | {
530
+ url: string;
531
+ rail: "live_stopped";
532
+ since?: number;
533
+ explicit?: boolean;
534
+ armed_via?: string;
535
+ stop_kind: string;
536
+ }
537
+ )[];
538
+ filter_url?: string;
539
+ arms?: {
540
+ url: string;
541
+ rail?: string;
542
+ state: string;
543
+ reconnect?: boolean;
544
+ failures?: number;
545
+ max_failures?: number;
546
+ next_in_s?: number;
547
+ last_failure?: string;
548
+ reason?: string;
549
+ detail?: string;
550
+ server_message?: string;
551
+ at?: number;
552
+ }[];
553
+ }
554
+ | {
555
+ written?: {
556
+ url: string;
557
+ };
558
+ asset_upload: {
559
+ id: string;
560
+ url: string;
561
+ size_bytes: number;
562
+ content_type: string;
563
+ sha256?: string;
564
+ file_name: string;
565
+ };
566
+ }
567
+ | {
568
+ written?: {
569
+ url: string;
570
+ };
571
+ asset_uploads: {
572
+ url: string;
573
+ /**
574
+ * @minItems 1
575
+ * @maxItems 25
576
+ */
577
+ results: [
578
+ (
579
+ | {
580
+ file_path: string;
581
+ status: "uploaded";
582
+ id: string;
583
+ url: string;
584
+ size_bytes: number;
585
+ content_type: string;
586
+ sha256?: string;
587
+ file_name: string;
588
+ }
589
+ | {
590
+ file_path: string;
591
+ status: "failed" | "not_attempted";
592
+ reason: string;
593
+ message: string;
594
+ may_be_stored?: true;
595
+ }
596
+ ),
597
+ ...(
598
+ | {
599
+ file_path: string;
600
+ status: "uploaded";
601
+ id: string;
602
+ url: string;
603
+ size_bytes: number;
604
+ content_type: string;
605
+ sha256?: string;
606
+ file_name: string;
607
+ }
608
+ | {
609
+ file_path: string;
610
+ status: "failed" | "not_attempted";
611
+ reason: string;
612
+ message: string;
613
+ may_be_stored?: true;
614
+ }
615
+ )[]
616
+ ];
617
+ };
618
+ }
619
+ | {
620
+ asset_list: {
621
+ url: string;
622
+ /**
623
+ * @maxItems 1000
624
+ */
625
+ assets: {
626
+ id: string;
627
+ url: string;
628
+ content_type: string;
629
+ size_bytes: number;
630
+ sha256?: string;
631
+ created_at: string;
632
+ }[];
633
+ usage: {
634
+ files: number;
635
+ bytes: number;
636
+ max_files: number;
637
+ max_bytes: number;
638
+ };
639
+ next?: string;
640
+ cowritten?: true;
641
+ outside_writer?: true;
642
+ };
643
+ }
644
+ | {
645
+ asset_read: {
646
+ id: string;
647
+ path: string;
648
+ size_bytes: number;
649
+ content_type: string;
650
+ sha256: string;
651
+ cowritten?: true;
652
+ outside_writer?: true;
653
+ public_read?: true;
654
+ foreign?: true;
655
+ };
656
+ }
657
+ | {
658
+ written?: {
659
+ url: string;
660
+ };
661
+ asset_delete: {
662
+ id: string;
663
+ deleted: boolean;
664
+ };
665
+ };
666
+ export type ProjectsOutput =
667
+ | {
668
+ method: "project_info";
669
+ notice?: string;
670
+ name: string;
671
+ description: string;
672
+ instructions: string;
673
+ docs: {
674
+ path: string;
675
+ created_at: string | null;
676
+ }[];
677
+ files?: {
678
+ path: string;
679
+ file_kind: string;
680
+ created_at: string | null;
681
+ }[];
682
+ sync_sources?: {
683
+ type: string | null;
684
+ config: {
685
+ [k: string]: unknown;
686
+ };
687
+ }[];
688
+ knowledge: {
689
+ knowledge_size: number;
690
+ max_knowledge_size: number;
691
+ };
692
+ }
693
+ | {
694
+ method: "project_read";
695
+ notice?: string;
696
+ path: string;
697
+ file_kind?: string;
698
+ content?: string;
699
+ local_file?: string;
700
+ created_at: string | null;
701
+ }
702
+ | {
703
+ method: "project_search";
704
+ notice?: string;
705
+ rag: boolean;
706
+ hits?: {
707
+ name?: string;
708
+ doc_uuid?: string;
709
+ text?: string;
710
+ }[];
711
+ docs?: string[];
712
+ }
713
+ | {
714
+ method: "project_write";
715
+ notice?: string;
716
+ path: string;
717
+ doc_uuid: string;
718
+ replaced: boolean;
719
+ present_to_user?: boolean;
720
+ local_path?: string;
721
+ }
722
+ | {
723
+ method: "project_delete";
724
+ notice?: string;
725
+ path: string;
726
+ deleted: boolean;
727
+ }
728
+ | {
729
+ method: "project_memory_list";
730
+ notice?: string;
731
+ files: {
732
+ path: string;
733
+ size_bytes: number;
734
+ updated_at: string | null;
735
+ truncated: boolean;
736
+ }[];
737
+ truncated: boolean;
738
+ }
739
+ | {
740
+ method: "project_memory_read";
741
+ notice?: string;
742
+ path: string;
743
+ content?: string;
744
+ local_file?: string;
745
+ size_bytes: number;
746
+ updated_at: string | null;
747
+ truncated: boolean;
748
+ };
749
+
750
+ export interface AgentInput {
751
+ /**
752
+ * A short (3-5 word) description of the task
753
+ */
754
+ description: string;
755
+ /**
756
+ * The task for the agent to perform
757
+ */
758
+ prompt: string;
759
+ /**
760
+ * The type of specialized agent to use for this task
761
+ */
762
+ subagent_type?: string;
763
+ /**
764
+ * Optional model override for this agent. Takes precedence over the agent definition's model frontmatter and the configured default subagent model. If omitted, uses the agent definition's model, else the default (inherits from the parent unless a default subagent model is configured). Ignored for subagent_type: "fork" — forks always inherit the parent model.
765
+ */
766
+ model?: "sonnet" | "opus" | "haiku" | "fable";
767
+ /**
768
+ * Agents run in the background by default; you will be notified when one completes. Set to false only when your very next action depends on this agent's result and nothing else could usefully happen while it runs — otherwise leave it in the background so the user can hand you other work.
769
+ */
770
+ run_in_background?: boolean;
771
+ /**
772
+ * Name for the spawned agent. Makes it addressable via SendMessage({to: name}) while running.
773
+ */
774
+ name?: string;
775
+ /**
776
+ * Deprecated; ignored. The session has a single implicit team.
777
+ */
778
+ team_name?: string;
779
+ /**
780
+ * Deprecated; ignored. Subagents inherit the parent session's permission mode; agent-definition frontmatter may override it.
781
+ */
782
+ mode?: "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan";
783
+ /**
784
+ * Isolation mode. "worktree" creates a temporary git worktree so the agent works on an isolated copy of the repo. "remote" launches the agent in a remote cloud environment (always runs in background; availability is gated).
785
+ */
786
+ isolation?: "worktree" | "remote";
787
+ }
788
+ export interface BashInput {
789
+ /**
790
+ * The command to execute
791
+ */
792
+ command: string;
793
+ /**
794
+ * Optional timeout in milliseconds (max 600000)
795
+ */
796
+ timeout?: number;
797
+ /**
798
+ * Clear, concise description of what this command does in active voice. Never use words like "complex" or "risk" in the description - just describe what it does.
799
+ *
800
+ * Say what the command does in plain words: do not echo the command's text, its flags, or file paths - the user reads this description, often without seeing the command.
801
+ *
802
+ * For simple commands (git, npm, standard CLI tools), keep it brief (5-10 words):
803
+ * - ls → "List files in current directory"
804
+ * - git status → "Show working tree status"
805
+ * - npm install → "Install package dependencies"
806
+ *
807
+ * For commands that are harder to parse at a glance (piped commands, obscure flags, etc.), add enough context to clarify what it does:
808
+ * - find . -name "*.tmp" -exec rm {} \; → "Find and delete all .tmp files recursively"
809
+ * - git reset --hard origin/main → "Discard all local changes and match remote main"
810
+ * - curl -s url | jq '.data[]' → "Fetch JSON from URL and extract data array elements"
811
+ */
812
+ description?: string;
813
+ /**
814
+ * Set to true to run this command in the background.
815
+ */
816
+ run_in_background?: boolean;
817
+ /**
818
+ * Set this to true to dangerously override sandbox mode and run commands without sandboxing.
819
+ */
820
+ dangerouslyDisableSandbox?: boolean;
821
+ }
822
+ export interface ExitPlanModeInput {
823
+ /**
824
+ * Deprecated: no longer used.
825
+ */
826
+ allowedPrompts?: {
827
+ /**
828
+ * The tool this prompt applies to
829
+ */
830
+ tool: "Bash";
831
+ /**
832
+ * Semantic description of the action, e.g. "run tests", "install dependencies"
833
+ */
834
+ prompt: string;
835
+ }[];
836
+ [k: string]: unknown;
837
+ }
838
+ export interface FileEditInput {
839
+ /**
840
+ * The absolute path to the file to modify
841
+ */
842
+ file_path: string;
843
+ /**
844
+ * The text to replace
845
+ */
846
+ old_string: string;
847
+ /**
848
+ * The text to replace it with (must be different from old_string)
849
+ */
850
+ new_string: string;
851
+ /**
852
+ * Replace all occurrences of old_string (default false)
853
+ */
854
+ replace_all?: boolean;
855
+ }
856
+ export interface FileReadInput {
857
+ /**
858
+ * The absolute path to the file to read
859
+ */
860
+ file_path: string;
861
+ /**
862
+ * The line number to start reading from. Only provide if the file is too large to read at once
863
+ */
864
+ offset?: number;
865
+ /**
866
+ * The number of lines to read. Only provide if the file is too large to read at once.
867
+ */
868
+ limit?: number;
869
+ /**
870
+ * Page range for PDF files (e.g., "1-5", "3", "10-20"). Only applicable to PDF files. Maximum 20 pages per request.
871
+ */
872
+ pages?: string;
873
+ }
874
+ export interface FileWriteInput {
875
+ /**
876
+ * The absolute path to the file to write (must be absolute, not relative)
877
+ */
878
+ file_path: string;
879
+ /**
880
+ * The content to write to the file
881
+ */
882
+ content: string;
883
+ }
884
+ export interface GlobInput {
885
+ /**
886
+ * The glob pattern to match files against
887
+ */
888
+ pattern: string;
889
+ /**
890
+ * The directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter "undefined" or "null" - simply omit it for the default behavior. Must be a valid directory path if provided.
891
+ */
892
+ path?: string;
893
+ }
894
+ export interface GrepInput {
895
+ /**
896
+ * The regular expression pattern to search for in file contents
897
+ */
898
+ pattern: string;
899
+ /**
900
+ * File or directory to search in (rg PATH). Defaults to current working directory.
901
+ */
902
+ path?: string;
903
+ /**
904
+ * Glob pattern to filter files (e.g. "*.js", "*.{ts,tsx}") - maps to rg --glob
905
+ */
906
+ glob?: string;
907
+ /**
908
+ * Output mode: "content" shows matching lines (supports -A/-B/-C context, -n line numbers, head_limit), "files_with_matches" shows file paths (supports head_limit), "count" shows match counts (supports head_limit). Defaults to "files_with_matches".
909
+ */
910
+ output_mode?: "content" | "files_with_matches" | "count";
911
+ /**
912
+ * Number of lines to show before each match (rg -B). Requires output_mode: "content", ignored otherwise.
913
+ */
914
+ "-B"?: number;
915
+ /**
916
+ * Number of lines to show after each match (rg -A). Requires output_mode: "content", ignored otherwise.
917
+ */
918
+ "-A"?: number;
919
+ /**
920
+ * Alias for context.
921
+ */
922
+ "-C"?: number;
923
+ /**
924
+ * Number of lines to show before and after each match (rg -C). Requires output_mode: "content", ignored otherwise.
925
+ */
926
+ context?: number;
927
+ /**
928
+ * Show line numbers in output (rg -n). Requires output_mode: "content", ignored otherwise. Defaults to true.
929
+ */
930
+ "-n"?: boolean;
931
+ /**
932
+ * Case insensitive search (rg -i)
933
+ */
934
+ "-i"?: boolean;
935
+ /**
936
+ * Print only the matched (non-empty) parts of each matching line, one match per output line (rg -o / --only-matching). Requires output_mode: "content", ignored otherwise. Defaults to false.
937
+ */
938
+ "-o"?: boolean;
939
+ /**
940
+ * File type to search (rg --type). Common types: js, py, rust, go, java, etc. More efficient than include for standard file types.
941
+ */
942
+ type?: string;
943
+ /**
944
+ * Limit output to first N lines/entries, equivalent to "| head -N". Works across all output modes: content (limits output lines), files_with_matches (limits file paths), count (limits count entries). Defaults to 250 when unspecified. Pass 0 for unlimited (use sparingly — large result sets waste context).
945
+ */
946
+ head_limit?: number;
947
+ /**
948
+ * Skip first N lines/entries before applying head_limit, equivalent to "| tail -n +N | head -N". Works across all output modes. Defaults to 0.
949
+ */
950
+ offset?: number;
951
+ /**
952
+ * Enable multiline mode where . matches newlines and patterns can span lines (rg -U --multiline-dotall). Default: false.
953
+ */
954
+ multiline?: boolean;
955
+ }
956
+ export interface TaskStopInput {
957
+ /**
958
+ * The ID of the background task to stop. Agent-team teammates and named background agents are also accepted by agent ID or name.
959
+ */
960
+ task_id?: string;
961
+ /**
962
+ * Deprecated: use task_id instead
963
+ */
964
+ shell_id?: string;
965
+ }
966
+ export interface ListMcpResourcesInput {
967
+ /**
968
+ * Optional server name to filter resources by
969
+ */
970
+ server?: string;
971
+ }
972
+ export interface RefreshMcpToolsInput {
973
+ /**
974
+ * Optional server name: refresh only this server. Omit to refresh all connected servers.
975
+ */
976
+ server?: string;
977
+ }
978
+ export interface McpInput {
979
+ [k: string]: unknown;
980
+ }
981
+ export interface NotebookEditInput {
982
+ /**
983
+ * The absolute path to the Jupyter notebook file to edit (must be absolute, not relative)
984
+ */
985
+ notebook_path: string;
986
+ /**
987
+ * The ID of the cell to edit. When inserting a new cell, the new cell will be inserted after the cell with this ID, or at the beginning if not specified.
988
+ */
989
+ cell_id?: string;
990
+ /**
991
+ * The new source for the cell
992
+ */
993
+ new_source: string;
994
+ /**
995
+ * The type of the cell (code or markdown). If not specified, it defaults to the current cell type. If using edit_mode=insert, this is required.
996
+ */
997
+ cell_type?: "code" | "markdown";
998
+ /**
999
+ * The type of edit to make (replace, insert, delete). Defaults to replace.
1000
+ */
1001
+ edit_mode?: "replace" | "insert" | "delete";
1002
+ }
1003
+ export interface ReadMcpResourceDirInput {
1004
+ /**
1005
+ * The MCP server name
1006
+ */
1007
+ server: string;
1008
+ /**
1009
+ * The directory resource URI to list
1010
+ */
1011
+ uri: string;
1012
+ }
1013
+ export interface ReadMcpResourceInput {
1014
+ /**
1015
+ * The MCP server name
1016
+ */
1017
+ server: string;
1018
+ /**
1019
+ * The resource URI to read
1020
+ */
1021
+ uri: string;
1022
+ }
1023
+ export interface ReportFindingsInput {
1024
+ /**
1025
+ * Effort level the review ran at
1026
+ */
1027
+ level?: "low" | "medium" | "high" | "xhigh" | "max";
1028
+ /**
1029
+ * Verified findings, most-severe first; empty if none survived
1030
+ *
1031
+ * @maxItems 32
1032
+ */
1033
+ findings: {
1034
+ /**
1035
+ * Repo-relative path of the file the finding is in
1036
+ */
1037
+ file: string;
1038
+ /**
1039
+ * 1-indexed line the finding anchors to
1040
+ */
1041
+ line?: number;
1042
+ /**
1043
+ * One-sentence statement of the defect
1044
+ */
1045
+ summary: string;
1046
+ /**
1047
+ * Compressed label for compact UI (≤60 chars): the claim alone, no rationale or consequence clause
1048
+ */
1049
+ short_summary?: string;
1050
+ /**
1051
+ * Concrete inputs/state → wrong output/crash
1052
+ */
1053
+ failure_scenario: string;
1054
+ /**
1055
+ * Short kebab-case slug of the finding type, e.g. "correctness", "simplification", "efficiency", "test-coverage"
1056
+ */
1057
+ category?: string;
1058
+ /**
1059
+ * Set when a verify pass ran; absent on inline-only reviews
1060
+ */
1061
+ verdict?: "CONFIRMED" | "PLAUSIBLE";
1062
+ /**
1063
+ * Set ONLY when re-reporting after applying fixes: what happened to this finding
1064
+ */
1065
+ outcome?: "fixed" | "skipped" | "no_change_needed";
1066
+ }[];
1067
+ }
1068
+ export interface TodoWriteInput {
1069
+ /**
1070
+ * The updated todo list
1071
+ */
1072
+ todos: {
1073
+ content: string;
1074
+ status: "pending" | "in_progress" | "completed";
1075
+ activeForm: string;
1076
+ }[];
1077
+ }
1078
+ export interface WebFetchInput {
1079
+ /**
1080
+ * The URL to fetch content from
1081
+ */
1082
+ url: string;
1083
+ /**
1084
+ * The prompt to run on the fetched content
1085
+ */
1086
+ prompt: string;
1087
+ }
1088
+ export interface WebSearchInput {
1089
+ /**
1090
+ * The search query to use
1091
+ */
1092
+ query: string;
1093
+ /**
1094
+ * Only include search results from these domains
1095
+ */
1096
+ allowed_domains?: string[];
1097
+ /**
1098
+ * Never include search results from these domains
1099
+ */
1100
+ blocked_domains?: string[];
1101
+ }
1102
+ export interface AskUserQuestionInput {
1103
+ /**
1104
+ * Questions to ask the user (1-4 questions)
1105
+ *
1106
+ * @minItems 1
1107
+ * @maxItems 4
1108
+ */
1109
+ questions:
1110
+ | [
1111
+ {
1112
+ /**
1113
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1114
+ */
1115
+ question: string;
1116
+ /**
1117
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1118
+ */
1119
+ header: string;
1120
+ /**
1121
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1122
+ *
1123
+ * @minItems 2
1124
+ * @maxItems 4
1125
+ */
1126
+ options:
1127
+ | [
1128
+ {
1129
+ /**
1130
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1131
+ */
1132
+ label: string;
1133
+ /**
1134
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1135
+ */
1136
+ description: string;
1137
+ /**
1138
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1139
+ */
1140
+ preview?: string;
1141
+ },
1142
+ {
1143
+ /**
1144
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1145
+ */
1146
+ label: string;
1147
+ /**
1148
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1149
+ */
1150
+ description: string;
1151
+ /**
1152
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1153
+ */
1154
+ preview?: string;
1155
+ }
1156
+ ]
1157
+ | [
1158
+ {
1159
+ /**
1160
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1161
+ */
1162
+ label: string;
1163
+ /**
1164
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1165
+ */
1166
+ description: string;
1167
+ /**
1168
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1169
+ */
1170
+ preview?: string;
1171
+ },
1172
+ {
1173
+ /**
1174
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1175
+ */
1176
+ label: string;
1177
+ /**
1178
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1179
+ */
1180
+ description: string;
1181
+ /**
1182
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1183
+ */
1184
+ preview?: string;
1185
+ },
1186
+ {
1187
+ /**
1188
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1189
+ */
1190
+ label: string;
1191
+ /**
1192
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1193
+ */
1194
+ description: string;
1195
+ /**
1196
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1197
+ */
1198
+ preview?: string;
1199
+ }
1200
+ ]
1201
+ | [
1202
+ {
1203
+ /**
1204
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1205
+ */
1206
+ label: string;
1207
+ /**
1208
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1209
+ */
1210
+ description: string;
1211
+ /**
1212
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1213
+ */
1214
+ preview?: string;
1215
+ },
1216
+ {
1217
+ /**
1218
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1219
+ */
1220
+ label: string;
1221
+ /**
1222
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1223
+ */
1224
+ description: string;
1225
+ /**
1226
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1227
+ */
1228
+ preview?: string;
1229
+ },
1230
+ {
1231
+ /**
1232
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1233
+ */
1234
+ label: string;
1235
+ /**
1236
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1237
+ */
1238
+ description: string;
1239
+ /**
1240
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1241
+ */
1242
+ preview?: string;
1243
+ },
1244
+ {
1245
+ /**
1246
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1247
+ */
1248
+ label: string;
1249
+ /**
1250
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1251
+ */
1252
+ description: string;
1253
+ /**
1254
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1255
+ */
1256
+ preview?: string;
1257
+ }
1258
+ ];
1259
+ /**
1260
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
1261
+ */
1262
+ multiSelect: boolean;
1263
+ }
1264
+ ]
1265
+ | [
1266
+ {
1267
+ /**
1268
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1269
+ */
1270
+ question: string;
1271
+ /**
1272
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1273
+ */
1274
+ header: string;
1275
+ /**
1276
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1277
+ *
1278
+ * @minItems 2
1279
+ * @maxItems 4
1280
+ */
1281
+ options:
1282
+ | [
1283
+ {
1284
+ /**
1285
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1286
+ */
1287
+ label: string;
1288
+ /**
1289
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1290
+ */
1291
+ description: string;
1292
+ /**
1293
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1294
+ */
1295
+ preview?: string;
1296
+ },
1297
+ {
1298
+ /**
1299
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1300
+ */
1301
+ label: string;
1302
+ /**
1303
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1304
+ */
1305
+ description: string;
1306
+ /**
1307
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1308
+ */
1309
+ preview?: string;
1310
+ }
1311
+ ]
1312
+ | [
1313
+ {
1314
+ /**
1315
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1316
+ */
1317
+ label: string;
1318
+ /**
1319
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1320
+ */
1321
+ description: string;
1322
+ /**
1323
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1324
+ */
1325
+ preview?: string;
1326
+ },
1327
+ {
1328
+ /**
1329
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1330
+ */
1331
+ label: string;
1332
+ /**
1333
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1334
+ */
1335
+ description: string;
1336
+ /**
1337
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1338
+ */
1339
+ preview?: string;
1340
+ },
1341
+ {
1342
+ /**
1343
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1344
+ */
1345
+ label: string;
1346
+ /**
1347
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1348
+ */
1349
+ description: string;
1350
+ /**
1351
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1352
+ */
1353
+ preview?: string;
1354
+ }
1355
+ ]
1356
+ | [
1357
+ {
1358
+ /**
1359
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1360
+ */
1361
+ label: string;
1362
+ /**
1363
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1364
+ */
1365
+ description: string;
1366
+ /**
1367
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1368
+ */
1369
+ preview?: string;
1370
+ },
1371
+ {
1372
+ /**
1373
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1374
+ */
1375
+ label: string;
1376
+ /**
1377
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1378
+ */
1379
+ description: string;
1380
+ /**
1381
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1382
+ */
1383
+ preview?: string;
1384
+ },
1385
+ {
1386
+ /**
1387
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1388
+ */
1389
+ label: string;
1390
+ /**
1391
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1392
+ */
1393
+ description: string;
1394
+ /**
1395
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1396
+ */
1397
+ preview?: string;
1398
+ },
1399
+ {
1400
+ /**
1401
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1402
+ */
1403
+ label: string;
1404
+ /**
1405
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1406
+ */
1407
+ description: string;
1408
+ /**
1409
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1410
+ */
1411
+ preview?: string;
1412
+ }
1413
+ ];
1414
+ /**
1415
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
1416
+ */
1417
+ multiSelect: boolean;
1418
+ },
1419
+ {
1420
+ /**
1421
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1422
+ */
1423
+ question: string;
1424
+ /**
1425
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1426
+ */
1427
+ header: string;
1428
+ /**
1429
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1430
+ *
1431
+ * @minItems 2
1432
+ * @maxItems 4
1433
+ */
1434
+ options:
1435
+ | [
1436
+ {
1437
+ /**
1438
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1439
+ */
1440
+ label: string;
1441
+ /**
1442
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1443
+ */
1444
+ description: string;
1445
+ /**
1446
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1447
+ */
1448
+ preview?: string;
1449
+ },
1450
+ {
1451
+ /**
1452
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1453
+ */
1454
+ label: string;
1455
+ /**
1456
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1457
+ */
1458
+ description: string;
1459
+ /**
1460
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1461
+ */
1462
+ preview?: string;
1463
+ }
1464
+ ]
1465
+ | [
1466
+ {
1467
+ /**
1468
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1469
+ */
1470
+ label: string;
1471
+ /**
1472
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1473
+ */
1474
+ description: string;
1475
+ /**
1476
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1477
+ */
1478
+ preview?: string;
1479
+ },
1480
+ {
1481
+ /**
1482
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1483
+ */
1484
+ label: string;
1485
+ /**
1486
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1487
+ */
1488
+ description: string;
1489
+ /**
1490
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1491
+ */
1492
+ preview?: string;
1493
+ },
1494
+ {
1495
+ /**
1496
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1497
+ */
1498
+ label: string;
1499
+ /**
1500
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1501
+ */
1502
+ description: string;
1503
+ /**
1504
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1505
+ */
1506
+ preview?: string;
1507
+ }
1508
+ ]
1509
+ | [
1510
+ {
1511
+ /**
1512
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1513
+ */
1514
+ label: string;
1515
+ /**
1516
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1517
+ */
1518
+ description: string;
1519
+ /**
1520
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1521
+ */
1522
+ preview?: string;
1523
+ },
1524
+ {
1525
+ /**
1526
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1527
+ */
1528
+ label: string;
1529
+ /**
1530
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1531
+ */
1532
+ description: string;
1533
+ /**
1534
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1535
+ */
1536
+ preview?: string;
1537
+ },
1538
+ {
1539
+ /**
1540
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1541
+ */
1542
+ label: string;
1543
+ /**
1544
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1545
+ */
1546
+ description: string;
1547
+ /**
1548
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1549
+ */
1550
+ preview?: string;
1551
+ },
1552
+ {
1553
+ /**
1554
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1555
+ */
1556
+ label: string;
1557
+ /**
1558
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1559
+ */
1560
+ description: string;
1561
+ /**
1562
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1563
+ */
1564
+ preview?: string;
1565
+ }
1566
+ ];
1567
+ /**
1568
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
1569
+ */
1570
+ multiSelect: boolean;
1571
+ }
1572
+ ]
1573
+ | [
1574
+ {
1575
+ /**
1576
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1577
+ */
1578
+ question: string;
1579
+ /**
1580
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1581
+ */
1582
+ header: string;
1583
+ /**
1584
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1585
+ *
1586
+ * @minItems 2
1587
+ * @maxItems 4
1588
+ */
1589
+ options:
1590
+ | [
1591
+ {
1592
+ /**
1593
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1594
+ */
1595
+ label: string;
1596
+ /**
1597
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1598
+ */
1599
+ description: string;
1600
+ /**
1601
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1602
+ */
1603
+ preview?: string;
1604
+ },
1605
+ {
1606
+ /**
1607
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1608
+ */
1609
+ label: string;
1610
+ /**
1611
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1612
+ */
1613
+ description: string;
1614
+ /**
1615
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1616
+ */
1617
+ preview?: string;
1618
+ }
1619
+ ]
1620
+ | [
1621
+ {
1622
+ /**
1623
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1624
+ */
1625
+ label: string;
1626
+ /**
1627
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1628
+ */
1629
+ description: string;
1630
+ /**
1631
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1632
+ */
1633
+ preview?: string;
1634
+ },
1635
+ {
1636
+ /**
1637
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1638
+ */
1639
+ label: string;
1640
+ /**
1641
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1642
+ */
1643
+ description: string;
1644
+ /**
1645
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1646
+ */
1647
+ preview?: string;
1648
+ },
1649
+ {
1650
+ /**
1651
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1652
+ */
1653
+ label: string;
1654
+ /**
1655
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1656
+ */
1657
+ description: string;
1658
+ /**
1659
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1660
+ */
1661
+ preview?: string;
1662
+ }
1663
+ ]
1664
+ | [
1665
+ {
1666
+ /**
1667
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1668
+ */
1669
+ label: string;
1670
+ /**
1671
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1672
+ */
1673
+ description: string;
1674
+ /**
1675
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1676
+ */
1677
+ preview?: string;
1678
+ },
1679
+ {
1680
+ /**
1681
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1682
+ */
1683
+ label: string;
1684
+ /**
1685
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1686
+ */
1687
+ description: string;
1688
+ /**
1689
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1690
+ */
1691
+ preview?: string;
1692
+ },
1693
+ {
1694
+ /**
1695
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1696
+ */
1697
+ label: string;
1698
+ /**
1699
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1700
+ */
1701
+ description: string;
1702
+ /**
1703
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1704
+ */
1705
+ preview?: string;
1706
+ },
1707
+ {
1708
+ /**
1709
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1710
+ */
1711
+ label: string;
1712
+ /**
1713
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1714
+ */
1715
+ description: string;
1716
+ /**
1717
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1718
+ */
1719
+ preview?: string;
1720
+ }
1721
+ ];
1722
+ /**
1723
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
1724
+ */
1725
+ multiSelect: boolean;
1726
+ },
1727
+ {
1728
+ /**
1729
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1730
+ */
1731
+ question: string;
1732
+ /**
1733
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1734
+ */
1735
+ header: string;
1736
+ /**
1737
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1738
+ *
1739
+ * @minItems 2
1740
+ * @maxItems 4
1741
+ */
1742
+ options:
1743
+ | [
1744
+ {
1745
+ /**
1746
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1747
+ */
1748
+ label: string;
1749
+ /**
1750
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1751
+ */
1752
+ description: string;
1753
+ /**
1754
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1755
+ */
1756
+ preview?: string;
1757
+ },
1758
+ {
1759
+ /**
1760
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1761
+ */
1762
+ label: string;
1763
+ /**
1764
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1765
+ */
1766
+ description: string;
1767
+ /**
1768
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1769
+ */
1770
+ preview?: string;
1771
+ }
1772
+ ]
1773
+ | [
1774
+ {
1775
+ /**
1776
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1777
+ */
1778
+ label: string;
1779
+ /**
1780
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1781
+ */
1782
+ description: string;
1783
+ /**
1784
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1785
+ */
1786
+ preview?: string;
1787
+ },
1788
+ {
1789
+ /**
1790
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1791
+ */
1792
+ label: string;
1793
+ /**
1794
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1795
+ */
1796
+ description: string;
1797
+ /**
1798
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1799
+ */
1800
+ preview?: string;
1801
+ },
1802
+ {
1803
+ /**
1804
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1805
+ */
1806
+ label: string;
1807
+ /**
1808
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1809
+ */
1810
+ description: string;
1811
+ /**
1812
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1813
+ */
1814
+ preview?: string;
1815
+ }
1816
+ ]
1817
+ | [
1818
+ {
1819
+ /**
1820
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1821
+ */
1822
+ label: string;
1823
+ /**
1824
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1825
+ */
1826
+ description: string;
1827
+ /**
1828
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1829
+ */
1830
+ preview?: string;
1831
+ },
1832
+ {
1833
+ /**
1834
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1835
+ */
1836
+ label: string;
1837
+ /**
1838
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1839
+ */
1840
+ description: string;
1841
+ /**
1842
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1843
+ */
1844
+ preview?: string;
1845
+ },
1846
+ {
1847
+ /**
1848
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1849
+ */
1850
+ label: string;
1851
+ /**
1852
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1853
+ */
1854
+ description: string;
1855
+ /**
1856
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1857
+ */
1858
+ preview?: string;
1859
+ },
1860
+ {
1861
+ /**
1862
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1863
+ */
1864
+ label: string;
1865
+ /**
1866
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1867
+ */
1868
+ description: string;
1869
+ /**
1870
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1871
+ */
1872
+ preview?: string;
1873
+ }
1874
+ ];
1875
+ /**
1876
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
1877
+ */
1878
+ multiSelect: boolean;
1879
+ },
1880
+ {
1881
+ /**
1882
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
1883
+ */
1884
+ question: string;
1885
+ /**
1886
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
1887
+ */
1888
+ header: string;
1889
+ /**
1890
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
1891
+ *
1892
+ * @minItems 2
1893
+ * @maxItems 4
1894
+ */
1895
+ options:
1896
+ | [
1897
+ {
1898
+ /**
1899
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1900
+ */
1901
+ label: string;
1902
+ /**
1903
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1904
+ */
1905
+ description: string;
1906
+ /**
1907
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1908
+ */
1909
+ preview?: string;
1910
+ },
1911
+ {
1912
+ /**
1913
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1914
+ */
1915
+ label: string;
1916
+ /**
1917
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1918
+ */
1919
+ description: string;
1920
+ /**
1921
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1922
+ */
1923
+ preview?: string;
1924
+ }
1925
+ ]
1926
+ | [
1927
+ {
1928
+ /**
1929
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1930
+ */
1931
+ label: string;
1932
+ /**
1933
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1934
+ */
1935
+ description: string;
1936
+ /**
1937
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1938
+ */
1939
+ preview?: string;
1940
+ },
1941
+ {
1942
+ /**
1943
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1944
+ */
1945
+ label: string;
1946
+ /**
1947
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1948
+ */
1949
+ description: string;
1950
+ /**
1951
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1952
+ */
1953
+ preview?: string;
1954
+ },
1955
+ {
1956
+ /**
1957
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1958
+ */
1959
+ label: string;
1960
+ /**
1961
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1962
+ */
1963
+ description: string;
1964
+ /**
1965
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1966
+ */
1967
+ preview?: string;
1968
+ }
1969
+ ]
1970
+ | [
1971
+ {
1972
+ /**
1973
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1974
+ */
1975
+ label: string;
1976
+ /**
1977
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1978
+ */
1979
+ description: string;
1980
+ /**
1981
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1982
+ */
1983
+ preview?: string;
1984
+ },
1985
+ {
1986
+ /**
1987
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
1988
+ */
1989
+ label: string;
1990
+ /**
1991
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
1992
+ */
1993
+ description: string;
1994
+ /**
1995
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
1996
+ */
1997
+ preview?: string;
1998
+ },
1999
+ {
2000
+ /**
2001
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2002
+ */
2003
+ label: string;
2004
+ /**
2005
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2006
+ */
2007
+ description: string;
2008
+ /**
2009
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2010
+ */
2011
+ preview?: string;
2012
+ },
2013
+ {
2014
+ /**
2015
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2016
+ */
2017
+ label: string;
2018
+ /**
2019
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2020
+ */
2021
+ description: string;
2022
+ /**
2023
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2024
+ */
2025
+ preview?: string;
2026
+ }
2027
+ ];
2028
+ /**
2029
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
2030
+ */
2031
+ multiSelect: boolean;
2032
+ }
2033
+ ]
2034
+ | [
2035
+ {
2036
+ /**
2037
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
2038
+ */
2039
+ question: string;
2040
+ /**
2041
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
2042
+ */
2043
+ header: string;
2044
+ /**
2045
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
2046
+ *
2047
+ * @minItems 2
2048
+ * @maxItems 4
2049
+ */
2050
+ options:
2051
+ | [
2052
+ {
2053
+ /**
2054
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2055
+ */
2056
+ label: string;
2057
+ /**
2058
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2059
+ */
2060
+ description: string;
2061
+ /**
2062
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2063
+ */
2064
+ preview?: string;
2065
+ },
2066
+ {
2067
+ /**
2068
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2069
+ */
2070
+ label: string;
2071
+ /**
2072
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2073
+ */
2074
+ description: string;
2075
+ /**
2076
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2077
+ */
2078
+ preview?: string;
2079
+ }
2080
+ ]
2081
+ | [
2082
+ {
2083
+ /**
2084
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2085
+ */
2086
+ label: string;
2087
+ /**
2088
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2089
+ */
2090
+ description: string;
2091
+ /**
2092
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2093
+ */
2094
+ preview?: string;
2095
+ },
2096
+ {
2097
+ /**
2098
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2099
+ */
2100
+ label: string;
2101
+ /**
2102
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2103
+ */
2104
+ description: string;
2105
+ /**
2106
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2107
+ */
2108
+ preview?: string;
2109
+ },
2110
+ {
2111
+ /**
2112
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2113
+ */
2114
+ label: string;
2115
+ /**
2116
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2117
+ */
2118
+ description: string;
2119
+ /**
2120
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2121
+ */
2122
+ preview?: string;
2123
+ }
2124
+ ]
2125
+ | [
2126
+ {
2127
+ /**
2128
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2129
+ */
2130
+ label: string;
2131
+ /**
2132
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2133
+ */
2134
+ description: string;
2135
+ /**
2136
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2137
+ */
2138
+ preview?: string;
2139
+ },
2140
+ {
2141
+ /**
2142
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2143
+ */
2144
+ label: string;
2145
+ /**
2146
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2147
+ */
2148
+ description: string;
2149
+ /**
2150
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2151
+ */
2152
+ preview?: string;
2153
+ },
2154
+ {
2155
+ /**
2156
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2157
+ */
2158
+ label: string;
2159
+ /**
2160
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2161
+ */
2162
+ description: string;
2163
+ /**
2164
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2165
+ */
2166
+ preview?: string;
2167
+ },
2168
+ {
2169
+ /**
2170
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2171
+ */
2172
+ label: string;
2173
+ /**
2174
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2175
+ */
2176
+ description: string;
2177
+ /**
2178
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2179
+ */
2180
+ preview?: string;
2181
+ }
2182
+ ];
2183
+ /**
2184
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
2185
+ */
2186
+ multiSelect: boolean;
2187
+ },
2188
+ {
2189
+ /**
2190
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
2191
+ */
2192
+ question: string;
2193
+ /**
2194
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
2195
+ */
2196
+ header: string;
2197
+ /**
2198
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
2199
+ *
2200
+ * @minItems 2
2201
+ * @maxItems 4
2202
+ */
2203
+ options:
2204
+ | [
2205
+ {
2206
+ /**
2207
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2208
+ */
2209
+ label: string;
2210
+ /**
2211
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2212
+ */
2213
+ description: string;
2214
+ /**
2215
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2216
+ */
2217
+ preview?: string;
2218
+ },
2219
+ {
2220
+ /**
2221
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2222
+ */
2223
+ label: string;
2224
+ /**
2225
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2226
+ */
2227
+ description: string;
2228
+ /**
2229
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2230
+ */
2231
+ preview?: string;
2232
+ }
2233
+ ]
2234
+ | [
2235
+ {
2236
+ /**
2237
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2238
+ */
2239
+ label: string;
2240
+ /**
2241
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2242
+ */
2243
+ description: string;
2244
+ /**
2245
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2246
+ */
2247
+ preview?: string;
2248
+ },
2249
+ {
2250
+ /**
2251
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2252
+ */
2253
+ label: string;
2254
+ /**
2255
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2256
+ */
2257
+ description: string;
2258
+ /**
2259
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2260
+ */
2261
+ preview?: string;
2262
+ },
2263
+ {
2264
+ /**
2265
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2266
+ */
2267
+ label: string;
2268
+ /**
2269
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2270
+ */
2271
+ description: string;
2272
+ /**
2273
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2274
+ */
2275
+ preview?: string;
2276
+ }
2277
+ ]
2278
+ | [
2279
+ {
2280
+ /**
2281
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2282
+ */
2283
+ label: string;
2284
+ /**
2285
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2286
+ */
2287
+ description: string;
2288
+ /**
2289
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2290
+ */
2291
+ preview?: string;
2292
+ },
2293
+ {
2294
+ /**
2295
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2296
+ */
2297
+ label: string;
2298
+ /**
2299
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2300
+ */
2301
+ description: string;
2302
+ /**
2303
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2304
+ */
2305
+ preview?: string;
2306
+ },
2307
+ {
2308
+ /**
2309
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2310
+ */
2311
+ label: string;
2312
+ /**
2313
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2314
+ */
2315
+ description: string;
2316
+ /**
2317
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2318
+ */
2319
+ preview?: string;
2320
+ },
2321
+ {
2322
+ /**
2323
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2324
+ */
2325
+ label: string;
2326
+ /**
2327
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2328
+ */
2329
+ description: string;
2330
+ /**
2331
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2332
+ */
2333
+ preview?: string;
2334
+ }
2335
+ ];
2336
+ /**
2337
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
2338
+ */
2339
+ multiSelect: boolean;
2340
+ },
2341
+ {
2342
+ /**
2343
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
2344
+ */
2345
+ question: string;
2346
+ /**
2347
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
2348
+ */
2349
+ header: string;
2350
+ /**
2351
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
2352
+ *
2353
+ * @minItems 2
2354
+ * @maxItems 4
2355
+ */
2356
+ options:
2357
+ | [
2358
+ {
2359
+ /**
2360
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2361
+ */
2362
+ label: string;
2363
+ /**
2364
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2365
+ */
2366
+ description: string;
2367
+ /**
2368
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2369
+ */
2370
+ preview?: string;
2371
+ },
2372
+ {
2373
+ /**
2374
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2375
+ */
2376
+ label: string;
2377
+ /**
2378
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2379
+ */
2380
+ description: string;
2381
+ /**
2382
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2383
+ */
2384
+ preview?: string;
2385
+ }
2386
+ ]
2387
+ | [
2388
+ {
2389
+ /**
2390
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2391
+ */
2392
+ label: string;
2393
+ /**
2394
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2395
+ */
2396
+ description: string;
2397
+ /**
2398
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2399
+ */
2400
+ preview?: string;
2401
+ },
2402
+ {
2403
+ /**
2404
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2405
+ */
2406
+ label: string;
2407
+ /**
2408
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2409
+ */
2410
+ description: string;
2411
+ /**
2412
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2413
+ */
2414
+ preview?: string;
2415
+ },
2416
+ {
2417
+ /**
2418
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2419
+ */
2420
+ label: string;
2421
+ /**
2422
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2423
+ */
2424
+ description: string;
2425
+ /**
2426
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2427
+ */
2428
+ preview?: string;
2429
+ }
2430
+ ]
2431
+ | [
2432
+ {
2433
+ /**
2434
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2435
+ */
2436
+ label: string;
2437
+ /**
2438
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2439
+ */
2440
+ description: string;
2441
+ /**
2442
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2443
+ */
2444
+ preview?: string;
2445
+ },
2446
+ {
2447
+ /**
2448
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2449
+ */
2450
+ label: string;
2451
+ /**
2452
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2453
+ */
2454
+ description: string;
2455
+ /**
2456
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2457
+ */
2458
+ preview?: string;
2459
+ },
2460
+ {
2461
+ /**
2462
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2463
+ */
2464
+ label: string;
2465
+ /**
2466
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2467
+ */
2468
+ description: string;
2469
+ /**
2470
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2471
+ */
2472
+ preview?: string;
2473
+ },
2474
+ {
2475
+ /**
2476
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2477
+ */
2478
+ label: string;
2479
+ /**
2480
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2481
+ */
2482
+ description: string;
2483
+ /**
2484
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2485
+ */
2486
+ preview?: string;
2487
+ }
2488
+ ];
2489
+ /**
2490
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
2491
+ */
2492
+ multiSelect: boolean;
2493
+ },
2494
+ {
2495
+ /**
2496
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
2497
+ */
2498
+ question: string;
2499
+ /**
2500
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
2501
+ */
2502
+ header: string;
2503
+ /**
2504
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
2505
+ *
2506
+ * @minItems 2
2507
+ * @maxItems 4
2508
+ */
2509
+ options:
2510
+ | [
2511
+ {
2512
+ /**
2513
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2514
+ */
2515
+ label: string;
2516
+ /**
2517
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2518
+ */
2519
+ description: string;
2520
+ /**
2521
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2522
+ */
2523
+ preview?: string;
2524
+ },
2525
+ {
2526
+ /**
2527
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2528
+ */
2529
+ label: string;
2530
+ /**
2531
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2532
+ */
2533
+ description: string;
2534
+ /**
2535
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2536
+ */
2537
+ preview?: string;
2538
+ }
2539
+ ]
2540
+ | [
2541
+ {
2542
+ /**
2543
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2544
+ */
2545
+ label: string;
2546
+ /**
2547
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2548
+ */
2549
+ description: string;
2550
+ /**
2551
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2552
+ */
2553
+ preview?: string;
2554
+ },
2555
+ {
2556
+ /**
2557
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2558
+ */
2559
+ label: string;
2560
+ /**
2561
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2562
+ */
2563
+ description: string;
2564
+ /**
2565
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2566
+ */
2567
+ preview?: string;
2568
+ },
2569
+ {
2570
+ /**
2571
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2572
+ */
2573
+ label: string;
2574
+ /**
2575
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2576
+ */
2577
+ description: string;
2578
+ /**
2579
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2580
+ */
2581
+ preview?: string;
2582
+ }
2583
+ ]
2584
+ | [
2585
+ {
2586
+ /**
2587
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2588
+ */
2589
+ label: string;
2590
+ /**
2591
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2592
+ */
2593
+ description: string;
2594
+ /**
2595
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2596
+ */
2597
+ preview?: string;
2598
+ },
2599
+ {
2600
+ /**
2601
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2602
+ */
2603
+ label: string;
2604
+ /**
2605
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2606
+ */
2607
+ description: string;
2608
+ /**
2609
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2610
+ */
2611
+ preview?: string;
2612
+ },
2613
+ {
2614
+ /**
2615
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2616
+ */
2617
+ label: string;
2618
+ /**
2619
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2620
+ */
2621
+ description: string;
2622
+ /**
2623
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2624
+ */
2625
+ preview?: string;
2626
+ },
2627
+ {
2628
+ /**
2629
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
2630
+ */
2631
+ label: string;
2632
+ /**
2633
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
2634
+ */
2635
+ description: string;
2636
+ /**
2637
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
2638
+ */
2639
+ preview?: string;
2640
+ }
2641
+ ];
2642
+ /**
2643
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
2644
+ */
2645
+ multiSelect: boolean;
2646
+ }
2647
+ ];
2648
+ /**
2649
+ * User answers collected by the permission component
2650
+ */
2651
+ answers?: {
2652
+ [k: string]: string;
2653
+ };
2654
+ /**
2655
+ * Optional per-question annotations from the user (e.g., notes on preview selections). Keyed by question text.
2656
+ */
2657
+ annotations?: {
2658
+ [k: string]: {
2659
+ /**
2660
+ * The preview content of the selected option, if the question used previews.
2661
+ */
2662
+ preview?: string;
2663
+ /**
2664
+ * Free-text notes the user added to their selection.
2665
+ */
2666
+ notes?: string;
2667
+ };
2668
+ };
2669
+ /**
2670
+ * Optional metadata for tracking and analytics purposes. Not displayed to user.
2671
+ */
2672
+ metadata?: {
2673
+ /**
2674
+ * Optional identifier for the source of this question (e.g., "remember" for /remember command). Used for analytics tracking.
2675
+ */
2676
+ source?: string;
2677
+ };
2678
+ }
2679
+ export interface SendFeedbackInput {
2680
+ /**
2681
+ * What kind of feedback this is.
2682
+ */
2683
+ type: "bug" | "idea" | "missing_capability";
2684
+ /**
2685
+ * Short, specific one-line summary of the issue.
2686
+ */
2687
+ title: string;
2688
+ /**
2689
+ * Labeled bullets, in order: **What happened:** (observed vs. expected, exact error text if short); **What the user said:** (quoted, or "User didn't comment; observed by the model."); **Repro:** (minimal steps); **Evidence:** (request IDs, timestamps, paths, versions; omit if none); optionally a final **Cause:** only if verified in-session. One to three lines per bullet. No narrative paragraphs, no speculation, no secrets.
2690
+ */
2691
+ details: string;
2692
+ /**
2693
+ * Optional short tag naming the part of Claude Code this is about (e.g. "hooks config", "/help", "file editing"). Leave blank if unclear.
2694
+ */
2695
+ area?: string;
2696
+ /**
2697
+ * When the report is about MODEL BEHAVIOR (not a product bug), the closest failure mode, or `other` when it is a model-behavior issue that fits no listed value. Omit only when the report is a product/tool bug with no model-behavior component.
2698
+ */
2699
+ failure_mode?:
2700
+ | "instruction_following"
2701
+ | "destructive_actions"
2702
+ | "code_quality"
2703
+ | "repetition_and_looping"
2704
+ | "model_regression"
2705
+ | "overconfidence_and_hallucination"
2706
+ | "context_and_memory"
2707
+ | "overeager"
2708
+ | "over_correction"
2709
+ | "stopping_short"
2710
+ | "dispute_or_decline"
2711
+ | "subagent_overspawn"
2712
+ | "tone_or_preachiness"
2713
+ | "excessive_questions"
2714
+ | "unwanted_scope"
2715
+ | "other";
2716
+ /**
2717
+ * What kind of task the session was doing when the issue occurred, or `other` when it is a clear task that fits no listed value. Omit only if genuinely unclear.
2718
+ */
2719
+ task_category?: "code_edit" | "debug" | "explain" | "plan" | "shell" | "search" | "review" | "other";
2720
+ }
2721
+ export interface ClaudeDesignInput {
2722
+ /**
2723
+ * Claude Design action to perform. Call with "list" first to discover the available operations and their argument schemas.
2724
+ */
2725
+ operation: string;
2726
+ /**
2727
+ * Action input object (server-validated). Pass {} for operations that take no input.
2728
+ */
2729
+ arguments: {
2730
+ [k: string]: unknown;
2731
+ };
2732
+ }
2733
+ export interface ProjectsInput {
2734
+ method:
2735
+ | "project_info"
2736
+ | "project_read"
2737
+ | "project_search"
2738
+ | "project_write"
2739
+ | "project_delete"
2740
+ | "project_memory_list"
2741
+ | "project_memory_read";
2742
+ /**
2743
+ * project_read/project_write/project_delete: doc path. project_write: an existing path is replaced in place; a new bare filename (no "/") is namespaced to "claude/<name>". project_memory_read: memory file path as listed by project_memory_list.
2744
+ */
2745
+ path?: string;
2746
+ /**
2747
+ * project_write: inline doc text. Mutually exclusive with local_path. Use local_path for anything you have on disk.
2748
+ */
2749
+ content?: string;
2750
+ /**
2751
+ * project_write: a file inside the working directory to upload. The tool reads, encodes, and uploads directly — contents never enter your context. Mutually exclusive with content.
2752
+ */
2753
+ local_path?: string;
2754
+ /**
2755
+ * project_write: true marks this doc as the file the user needs to see — the deliverable they asked for or must act on. Defaults to false; leave it unset for routine saves, notes, and bulk writes.
2756
+ */
2757
+ present_to_user?: boolean;
2758
+ /**
2759
+ * project_search: knowledge-base query
2760
+ */
2761
+ query?: string;
2762
+ /**
2763
+ * project_search: number of hits (default 5)
2764
+ */
2765
+ n?: number;
2766
+ }
2767
+ export interface EnterPlanModeInput {}
2768
+ export interface TaskCreateInput {
2769
+ /**
2770
+ * A brief title for the task
2771
+ */
2772
+ subject: string;
2773
+ /**
2774
+ * What needs to be done
2775
+ */
2776
+ description: string;
2777
+ /**
2778
+ * Present continuous form shown in spinner when in_progress (e.g., "Running tests")
2779
+ */
2780
+ activeForm?: string;
2781
+ /**
2782
+ * Arbitrary metadata to attach to the task
2783
+ */
2784
+ metadata?: {
2785
+ [k: string]: unknown;
2786
+ };
2787
+ }
2788
+ export interface TaskGetInput {
2789
+ /**
2790
+ * The ID of the task to retrieve
2791
+ */
2792
+ taskId: string;
2793
+ }
2794
+ export interface TaskUpdateInput {
2795
+ /**
2796
+ * The ID of the task to update
2797
+ */
2798
+ taskId: string;
2799
+ /**
2800
+ * New subject for the task
2801
+ */
2802
+ subject?: string;
2803
+ /**
2804
+ * New description for the task
2805
+ */
2806
+ description?: string;
2807
+ /**
2808
+ * Present continuous form shown in spinner when in_progress (e.g., "Running tests")
2809
+ */
2810
+ activeForm?: string;
2811
+ /**
2812
+ * New status for the task
2813
+ */
2814
+ status?: ("pending" | "in_progress" | "completed") | "deleted";
2815
+ /**
2816
+ * Task IDs that this task blocks
2817
+ */
2818
+ addBlocks?: string[];
2819
+ /**
2820
+ * Task IDs that block this task
2821
+ */
2822
+ addBlockedBy?: string[];
2823
+ /**
2824
+ * New owner for the task
2825
+ */
2826
+ owner?: string;
2827
+ /**
2828
+ * Metadata keys to merge into the task. Set a key to null to delete it.
2829
+ */
2830
+ metadata?: {
2831
+ [k: string]: unknown;
2832
+ };
2833
+ }
2834
+ export interface TaskListInput {}
2835
+ export interface WorkflowInput {
2836
+ /**
2837
+ * Self-contained workflow script. Must begin with `export const meta = { name, description, phases }` (pure literal, no computed values) followed by the script body using agent()/parallel()/pipeline()/phase().
2838
+ */
2839
+ script?: string;
2840
+ /**
2841
+ * Name of a predefined workflow (built-in or from .claude/workflows/). Resolves to a self-contained script.
2842
+ */
2843
+ name?: string;
2844
+ /**
2845
+ * Ignored — set the workflow description in the script's `meta` block.
2846
+ */
2847
+ description?: string;
2848
+ /**
2849
+ * Ignored — set the workflow title in the script's `meta` block.
2850
+ */
2851
+ title?: string;
2852
+ /**
2853
+ * Optional input value exposed to the script as the global `args`, verbatim. Pass arrays/objects as actual JSON values, NOT as a JSON-encoded string — a stringified list breaks `args.filter`/`args.map` in the script. Use for parameterized named workflows (e.g. a research question).
2854
+ */
2855
+ args?: {
2856
+ [k: string]: unknown;
2857
+ };
2858
+ /**
2859
+ * Path to a workflow script file on disk. Every Workflow invocation persists its script under the session directory and returns the path in the tool result. To iterate, edit that file with Write/Edit and re-invoke Workflow with the same `scriptPath` instead of re-sending the full script. Takes precedence over `script` and `name`.
2860
+ */
2861
+ scriptPath?: string;
2862
+ /**
2863
+ * Run ID of a prior Workflow invocation to resume from. Completed agent() calls with unchanged (prompt, opts) return their cached results instantly; only edited or new calls re-run. Same-session only. Stop the prior run first (TaskStop) before resuming.
2864
+ */
2865
+ resumeFromRunId?: string;
2866
+ }
2867
+ export interface CronCreateInput {
2868
+ /**
2869
+ * Standard 5-field cron expression in local time: "M H DoM Mon DoW" (e.g. "* /5 * * * *" = every 5 minutes, "30 14 28 2 *" = Feb 28 at 2:30pm local once).
2870
+ */
2871
+ cron: string;
2872
+ /**
2873
+ * The prompt to enqueue at each fire time.
2874
+ */
2875
+ prompt: string;
2876
+ /**
2877
+ * true (default) = fire on every cron match until deleted or auto-expired after 7 days. false = fire once at the next match, then auto-delete. Use false for "remind me at X" one-shot requests with pinned minute/hour/dom/month.
2878
+ */
2879
+ recurring?: boolean;
2880
+ /**
2881
+ * true = persist to .claude/scheduled_tasks.json and survive restarts. false (default) = in-memory only, dies when this Claude session ends. Use true only when the user asks the task to survive across sessions.
2882
+ */
2883
+ durable?: boolean;
2884
+ }
2885
+ export interface CronDeleteInput {
2886
+ /**
2887
+ * Job ID returned by CronCreate.
2888
+ */
2889
+ id: string;
2890
+ }
2891
+ export interface CronListInput {}
2892
+ export interface ScheduleWakeupInput {
2893
+ /**
2894
+ * Seconds from now to wake up. Clamped to [60, 3600] by the runtime. Required unless `stop` is true.
2895
+ */
2896
+ delaySeconds?: number;
2897
+ /**
2898
+ * One short sentence explaining the chosen delay. Goes to telemetry and is shown to the user. Be specific. Required unless `stop` is true.
2899
+ */
2900
+ reason?: string;
2901
+ /**
2902
+ * The /loop input to fire on wake-up. Pass the same /loop input verbatim each turn so the next firing re-enters the skill and continues the loop. For autonomous /loop (no user prompt), pass the literal sentinel `<<autonomous-loop-dynamic>>` instead (the dynamic-pacing variant, not the CronCreate-mode `<<autonomous-loop>>`). Required unless `stop` is true.
2903
+ */
2904
+ prompt?: string;
2905
+ /**
2906
+ * Set to true to end the dynamic loop immediately instead of scheduling another wakeup. When true, all other fields are ignored and no further wakeups fire.
2907
+ */
2908
+ stop?: boolean;
2909
+ /**
2910
+ * true = nothing changed (you checked and there is nothing to report). false = something happened worth keeping (edited a file, posted a message, advanced state, surfaced a finding). Consecutive noop:true ticks are collapsed in the user's terminal view and tracked as a streak. Required unless `stop` is true.
2911
+ */
2912
+ noop?: boolean;
2913
+ }
2914
+ export interface RemoteTriggerInput {
2915
+ action: "list" | "get" | "create" | "update" | "run" | "create_webhook_trigger" | "list_runs" | "get_run_log";
2916
+ /**
2917
+ * Required for get, update, run, and list_runs
2918
+ */
2919
+ trigger_id?: string;
2920
+ /**
2921
+ * Required for get_run_log: a run session id (cse_… or session_…, from list_runs)
2922
+ */
2923
+ session_id?: string;
2924
+ /**
2925
+ * next_cursor from a previous list_runs or get_run_log page
2926
+ */
2927
+ cursor?: string;
2928
+ /**
2929
+ * Required for create and update; optional for run
2930
+ */
2931
+ body?: {
2932
+ [k: string]: unknown;
2933
+ };
2934
+ }
2935
+ export interface ShowOnboardingRolePickerInput {}
2936
+ export interface ReadNotificationsInput {}
2937
+ export interface MonitorInput {
2938
+ /**
2939
+ * Short human-readable description of what you are monitoring (shown in notifications).
2940
+ */
2941
+ description: string;
2942
+ /**
2943
+ * Kill the monitor after this deadline. Default 300000ms. Deadlines above 1800000ms are capped to 1800000ms. You are notified at expiry and can re-arm.
2944
+ */
2945
+ timeout_ms: number;
2946
+ /**
2947
+ * Shell command or script. Each stdout line is an event; exit ends the watch.
2948
+ */
2949
+ command?: string;
2950
+ /**
2951
+ * WebSocket to open. Each text frame is an event; binary frames are reported as a placeholder line. Socket close ends the watch. Cannot be combined with command.
2952
+ */
2953
+ ws?: {
2954
+ url: string;
2955
+ protocols?: string[];
2956
+ };
2957
+ }
2958
+ export interface ProposeSkillsInput {
2959
+ /**
2960
+ * @minItems 1
2961
+ * @maxItems 3
2962
+ */
2963
+ proposals:
2964
+ | [
2965
+ {
2966
+ /**
2967
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
2968
+ */
2969
+ name: string;
2970
+ kind: "new" | "improvement";
2971
+ /**
2972
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
2973
+ */
2974
+ target?: string;
2975
+ /**
2976
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
2977
+ */
2978
+ description: string;
2979
+ /**
2980
+ * memory file paths where this procedure was observed
2981
+ */
2982
+ evidence?: string[];
2983
+ /**
2984
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
2985
+ */
2986
+ skillMd: string;
2987
+ }
2988
+ ]
2989
+ | [
2990
+ {
2991
+ /**
2992
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
2993
+ */
2994
+ name: string;
2995
+ kind: "new" | "improvement";
2996
+ /**
2997
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
2998
+ */
2999
+ target?: string;
3000
+ /**
3001
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
3002
+ */
3003
+ description: string;
3004
+ /**
3005
+ * memory file paths where this procedure was observed
3006
+ */
3007
+ evidence?: string[];
3008
+ /**
3009
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
3010
+ */
3011
+ skillMd: string;
3012
+ },
3013
+ {
3014
+ /**
3015
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
3016
+ */
3017
+ name: string;
3018
+ kind: "new" | "improvement";
3019
+ /**
3020
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
3021
+ */
3022
+ target?: string;
3023
+ /**
3024
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
3025
+ */
3026
+ description: string;
3027
+ /**
3028
+ * memory file paths where this procedure was observed
3029
+ */
3030
+ evidence?: string[];
3031
+ /**
3032
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
3033
+ */
3034
+ skillMd: string;
3035
+ }
3036
+ ]
3037
+ | [
3038
+ {
3039
+ /**
3040
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
3041
+ */
3042
+ name: string;
3043
+ kind: "new" | "improvement";
3044
+ /**
3045
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
3046
+ */
3047
+ target?: string;
3048
+ /**
3049
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
3050
+ */
3051
+ description: string;
3052
+ /**
3053
+ * memory file paths where this procedure was observed
3054
+ */
3055
+ evidence?: string[];
3056
+ /**
3057
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
3058
+ */
3059
+ skillMd: string;
3060
+ },
3061
+ {
3062
+ /**
3063
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
3064
+ */
3065
+ name: string;
3066
+ kind: "new" | "improvement";
3067
+ /**
3068
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
3069
+ */
3070
+ target?: string;
3071
+ /**
3072
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
3073
+ */
3074
+ description: string;
3075
+ /**
3076
+ * memory file paths where this procedure was observed
3077
+ */
3078
+ evidence?: string[];
3079
+ /**
3080
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
3081
+ */
3082
+ skillMd: string;
3083
+ },
3084
+ {
3085
+ /**
3086
+ * kebab-case skill slug; must not contain "claude" or "anthropic"; at most 64 characters for a new skill
3087
+ */
3088
+ name: string;
3089
+ kind: "new" | "improvement";
3090
+ /**
3091
+ * Name of the existing skill to update. Required when kind is 'improvement'; omit for 'new'.
3092
+ */
3093
+ target?: string;
3094
+ /**
3095
+ * One short sentence saying when to use this skill: aim for under 200 characters, never more than 1024, and no angle brackets. Shown on the review card and saved as the skill's description, which is what decides when the skill is used. For an improvement, reuse the existing skill's description unless the change alters when the skill applies.
3096
+ */
3097
+ description: string;
3098
+ /**
3099
+ * memory file paths where this procedure was observed
3100
+ */
3101
+ evidence?: string[];
3102
+ /**
3103
+ * The complete SKILL.md exactly as it should be saved: frontmatter plus the full body. When the user saves, the body below the frontmatter becomes the skill's entire instructions and the name and description come from the fields above; other frontmatter keys are not kept. For an improvement this replaces the existing skill's SKILL.md entirely, so read that skill's current SKILL.md first and include everything worth keeping, not only the changes.
3104
+ */
3105
+ skillMd: string;
3106
+ }
3107
+ ];
3108
+ }
3109
+ export interface ProposeGoalInput {
3110
+ /**
3111
+ * The completion condition to propose, written so a separate evaluator can verify it from the conversation (e.g. "all tests in test/auth pass (bun test exits 0)"). At most 500 characters — the user must be able to read the whole condition in the approval dialog.
3112
+ */
3113
+ condition: string;
3114
+ /**
3115
+ * Whether to ask the user for approval before the goal is set. Defaults to true — an approval dialog is shown. Set false ONLY when the user's own words in this conversation stated this outcome as what they want; the goal is then set directly, with a visible notice in the transcript, and the user can clear it with /goal clear.
3116
+ */
3117
+ ask_user?: boolean;
3118
+ }
3119
+ export interface ArtifactInput {
3120
+ /**
3121
+ * Omit (or 'publish') to publish file_path. 'list' enumerates artifacts — the user's own by default, see `scope`; only `limit` and `scope` may accompany it. 'read' returns the content of the published artifact at `url` (raw HTML for the user's own; an isolated summary, steered by the optional `prompt`, for one someone else owns, though a page published in this session's own Slack channel can come back in full as untrusted content) — see **Calls**. 'watch', 'unwatch', and 'status' manage live-update subscriptions through which a session keeps track of new versions of an artifact published elsewhere, and those aren't available in this session: 'watch' only reports that — this session does not keep track of new versions — and 'status' lists this session's artifact watches (pass `url` to check one). 'upload_asset' adds one local media, PDF, font, or text file to an existing artifact — pass `url` and `file_path` (or `file_paths` for several in one call). 'list_assets' lists the files in an artifact's asset store (pass `url`; `after` continues a listing), 'read_asset' saves one of them to a local file named by its id (pass `url` and `asset_id`, optionally `out_dir`), and 'delete_asset' permanently removes one (pass `url` and `asset_id`). See **Artifact assets** above.
3122
+ */
3123
+ action?:
3124
+ | "publish"
3125
+ | "list"
3126
+ | "read"
3127
+ | "list_types"
3128
+ | "watch"
3129
+ | "unwatch"
3130
+ | "status"
3131
+ | "upload_asset"
3132
+ | "list_assets"
3133
+ | "read_asset"
3134
+ | "delete_asset";
3135
+ /**
3136
+ * Path to the .html file to render. Required to publish (the default action). Use a short, distinctive basename — it is the last-resort title when the HTML has no <title> and no `title` parameter is given. For 'upload_asset', the local image, video, PDF, font, stylesheet (CSS), script (JS), or text (CSV, Markdown, JSON, plain text) file to upload.
3137
+ */
3138
+ file_path?: string;
3139
+ /**
3140
+ * Deprecated; omit it. Use `icon`.
3141
+ */
3142
+ favicon?: string;
3143
+ /**
3144
+ * One short generic word for the artifact's browser-tab icon, such as chart, calendar, recipe, code or map — a plain signifier, not a product or brand name. Include it on every page's first publish; omit when republishing to keep the current icon, and pass a new one only when the user asks.
3145
+ */
3146
+ icon?: string;
3147
+ /**
3148
+ * list only: maximum artifacts to return (default 25).
3149
+ */
3150
+ limit?: number;
3151
+ /**
3152
+ * list only: 'mine' (default) lists artifacts the user owns; 'shared' lists artifacts other people shared with the user; 'all' lists both. Rows are labeled (mine)/(shared) whenever scope is not 'mine'.
3153
+ */
3154
+ scope?: "mine" | "shared" | "all";
3155
+ /**
3156
+ * Title for the artifact — the name shown in the browser tab and gallery. A short, distinctive noun-phrase name — not a generic label, a summary, or a name with an appended explainer. Prefer a <title> tag at the top of the HTML itself; this parameter fills in only when the file lacks one in the first 8KB of the file, and never overrides the tag. HTML publishes only — Markdown pages keep their filename identity. Content always comes from file_path — there is no inline content parameter.
3157
+ */
3158
+ title?: string;
3159
+ /**
3160
+ * One-sentence subtitle shown on the gallery card. Say what the page is or does.
3161
+ */
3162
+ description?: string;
3163
+ /**
3164
+ * A short name for this publish, max 60 chars (e.g. "Draft to legal"). Optional — a few words, not a description.
3165
+ */
3166
+ label?: string;
3167
+ /**
3168
+ * Existing artifact URL to update in place. Pass whenever the user wants to update an artifact this conversation did not publish — "update my artifact", "keep the same link", a pasted artifact URL — and find the URL with action: "list" or ask the user for the link if you don't have it; without this, the publish creates a separate artifact instead of updating the existing one. Omit for new artifacts and same-conversation redeploys. Must be an artifact the user owns or was given edit access to (a read of it says "writer"). For 'read' and the other url-addressed actions: the artifact to act on.
3169
+ */
3170
+ url?: string;
3171
+ /**
3172
+ * read only: what to extract from an artifact shared with the user — its content reaches you as an isolated summary answering this. Ignored for artifacts the user owns and for a page published in this session's own Slack channel (raw content is returned); optional.
3173
+ */
3174
+ prompt?: string;
3175
+ /**
3176
+ * Last-resort overwrite that DISCARDS the newer published version's page — another session's publish, or someone's save from a page that can publish new versions of itself. On a conflict the fix is to merge your changes onto the newer content (handed to you in the rejection, or re-read) and publish again — not force. Pass force:true only when the user has explicitly said to discard that specific version; never to get past a conflict on your own judgment. The tracked baseVersion is still sent; with force:true the server treats it as informational and overwrites, unless it refuses force over a version saved from inside the page. Omit (or false) so a concurrent write conflicts instead of being silently clobbered.
3177
+ */
3178
+ force?: boolean;
3179
+ /**
3180
+ * read_asset: directory to save into — default: this artifact’s folder in your scratchpad directory, where saving needs no approval and which you can Read from. read_asset names the file by the asset id plus the extension for its type; saving to any directory other than the default is an ordinary file save the user may be asked to approve.
3181
+ */
3182
+ out_dir?: string;
3183
+ /**
3184
+ * upload_asset: several local image, video, PDF, font, stylesheet or script files in place of `file_path`, up to 25 in one call, all into the artifact that `url` names; one approval covers the call, and the result lists each file's id and url, or why it was not uploaded. A CSV, Markdown, JSON or plain-text file, a symbolic or hard link, and a file outside the working directory each go in a call of their own with `file_path`.
3185
+ *
3186
+ * @minItems 1
3187
+ * @maxItems 25
3188
+ */
3189
+ file_paths?: [string, ...string[]];
3190
+ /**
3191
+ * read_asset and delete_asset: the asset's id (32 hex characters), from a list_assets or upload_asset result.
3192
+ */
3193
+ asset_id?: string;
3194
+ /**
3195
+ * list_assets only: the `next` value from a previous list_assets result, to continue that listing.
3196
+ */
3197
+ after?: string;
3198
+ /**
3199
+ * Runtime capabilities this page declares, as {name: config}. The control plane is the authority on valid names and config shapes. An empty object clears any previously stored declaration; omit the field on a redeploy to carry the stored declaration forward unchanged. Before declaring any capability, load the `artifact-capabilities` skill for the current contract and per-capability guidance.
3200
+ */
3201
+ capabilities?: {
3202
+ [k: string]: unknown;
3203
+ };
3204
+ /**
3205
+ * The artifact's runtime version. Omit to keep its current version (the default); 'latest' to upgrade; a specific version to pin or roll back. Changing it changes how the published page behaves — pass only when the author explicitly intends the change, never as a side effect of editing.
3206
+ */
3207
+ contract?: "latest" | string;
3208
+ }
3209
+ export interface PushNotificationInput {
3210
+ /**
3211
+ * The notification body. Keep it under 200 characters; mobile OSes truncate.
3212
+ */
3213
+ message: string;
3214
+ status: "proactive";
3215
+ }
3216
+ export interface EnterWorktreeInput {
3217
+ /**
3218
+ * Optional name for a new worktree. Each "/"-separated segment may contain only letters, digits, dots, underscores, and dashes; max 64 chars total. A random name is generated if not provided. Mutually exclusive with `path`.
3219
+ */
3220
+ name?: string;
3221
+ /**
3222
+ * Path to an existing worktree to switch into instead of creating a new one. Must appear in `git worktree list` for the current repo — or, on first entry from the launch directory, for a repo nested inside it (multi-repo workspace). Mutually exclusive with `name`.
3223
+ */
3224
+ path?: string;
3225
+ }
3226
+ export interface ExitWorktreeInput {
3227
+ /**
3228
+ * "keep" leaves the worktree and branch on disk; "remove" deletes both.
3229
+ */
3230
+ action: "keep" | "remove";
3231
+ /**
3232
+ * Required true when action is "remove" and the worktree has uncommitted files or unmerged commits. The tool will refuse and list them otherwise.
3233
+ */
3234
+ discard_changes?: boolean;
3235
+ }
3236
+ export interface BashOutput {
3237
+ /**
3238
+ * The standard output of the command
3239
+ */
3240
+ stdout: string;
3241
+ /**
3242
+ * The standard error output of the command
3243
+ */
3244
+ stderr: string;
3245
+ /**
3246
+ * Path to raw output file for large MCP tool outputs
3247
+ */
3248
+ rawOutputPath?: string;
3249
+ /**
3250
+ * Whether the command was interrupted
3251
+ */
3252
+ interrupted: boolean;
3253
+ /**
3254
+ * Flag to indicate if stdout contains image data
3255
+ */
3256
+ isImage?: boolean;
3257
+ /**
3258
+ * ID of the background task if command is running in background
3259
+ */
3260
+ backgroundTaskId?: string;
3261
+ /**
3262
+ * True if the user manually backgrounded the command with Ctrl+B
3263
+ */
3264
+ backgroundedByUser?: boolean;
3265
+ /**
3266
+ * Set when the command hit its timeout and was auto-backgrounded; the timeout value in ms
3267
+ */
3268
+ timedOutAfterMs?: number;
3269
+ /**
3270
+ * Model-facing note that the session cwd was not changed by a backgrounded command containing a directory-change builtin (cd/pushd/popd/chdir)
3271
+ */
3272
+ backgroundCwdHint?: string;
3273
+ /**
3274
+ * True when this backgrounded command is owned by a synchronous subagent and is therefore terminated when that agent gives its final response; absent when the command survives (main loop, async subagents)
3275
+ */
3276
+ backgroundEndsWithFinalResponse?: true;
3277
+ /**
3278
+ * Flag to indicate if sandbox mode was overridden
3279
+ */
3280
+ dangerouslyDisableSandbox?: boolean;
3281
+ /**
3282
+ * Semantic interpretation for non-error exit codes with special meaning
3283
+ */
3284
+ returnCodeInterpretation?: string;
3285
+ /**
3286
+ * Whether the command is expected to produce no output on success
3287
+ */
3288
+ noOutputExpected?: boolean;
3289
+ /**
3290
+ * Structured content blocks
3291
+ */
3292
+ structuredContent?: unknown[];
3293
+ /**
3294
+ * Path to the persisted full output in tool-results dir (set when output is too large for inline)
3295
+ */
3296
+ persistedOutputPath?: string;
3297
+ /**
3298
+ * Total size of the output in bytes (set when output is too large for inline)
3299
+ */
3300
+ persistedOutputSize?: number;
3301
+ /**
3302
+ * Model-facing note listing readFileState entries whose mtime bumped during this command (set when WRITE_COMMAND_MARKERS matches)
3303
+ */
3304
+ staleReadFileStateHint?: string;
3305
+ /**
3306
+ * Model-facing system-reminder appended when a gh command reports a GitHub API rate-limit error
3307
+ */
3308
+ ghRateLimitHint?: string;
3309
+ /**
3310
+ * Structured classification of git/gh operations detected in this command (commit/push/merge/rebase/PR). Client-facing — lets clients render git activity without re-parsing stdout; not surfaced to the model.
3311
+ */
3312
+ gitOperation?: {
3313
+ commit?: {
3314
+ sha: string;
3315
+ kind: "committed" | "amended" | "cherry-picked";
3316
+ branch?: string;
3317
+ };
3318
+ push?: {
3319
+ branch: string;
3320
+ };
3321
+ branch?: {
3322
+ ref: string;
3323
+ action: "merged" | "rebased";
3324
+ };
3325
+ pr?: {
3326
+ number: number;
3327
+ url?: string;
3328
+ action:
3329
+ | "created"
3330
+ | "edited"
3331
+ | "merged"
3332
+ | "commented"
3333
+ | "closed"
3334
+ | "reopened"
3335
+ | "ready"
3336
+ | "draft"
3337
+ | "auto-merge-enabled"
3338
+ | "auto-merge-disabled";
3339
+ };
3340
+ };
3341
+ }
3342
+ export interface ExitPlanModeOutput {
3343
+ /**
3344
+ * The plan that was presented to the user
3345
+ */
3346
+ plan: string | null;
3347
+ isAgent: boolean;
3348
+ /**
3349
+ * The file path where the plan was saved
3350
+ */
3351
+ filePath?: string;
3352
+ /**
3353
+ * Whether the Agent tool is available in the current context
3354
+ */
3355
+ hasTaskTool?: boolean;
3356
+ /**
3357
+ * True when the user edited the plan (CCR web UI or Ctrl+G); determines whether the plan is echoed back in tool_result
3358
+ */
3359
+ planWasEdited?: boolean;
3360
+ /**
3361
+ * When true, the teammate has sent a plan approval request to the team leader
3362
+ */
3363
+ awaitingLeaderApproval?: boolean;
3364
+ /**
3365
+ * Unique identifier for the plan approval request
3366
+ */
3367
+ requestId?: string;
3368
+ }
3369
+ export interface FileEditOutput {
3370
+ /**
3371
+ * The file path that was edited
3372
+ */
3373
+ filePath: string;
3374
+ /**
3375
+ * The original string that was replaced
3376
+ */
3377
+ oldString: string;
3378
+ /**
3379
+ * The new string that replaced it
3380
+ */
3381
+ newString: string;
3382
+ /**
3383
+ * The original file contents before editing
3384
+ */
3385
+ originalFile: string | null;
3386
+ /**
3387
+ * Diff patch showing the changes
3388
+ */
3389
+ structuredPatch: {
3390
+ oldStart: number;
3391
+ oldLines: number;
3392
+ newStart: number;
3393
+ newLines: number;
3394
+ lines: string[];
3395
+ }[];
3396
+ /**
3397
+ * Whether the user modified the proposed changes
3398
+ */
3399
+ userModified: boolean;
3400
+ /**
3401
+ * Whether all occurrences were replaced
3402
+ */
3403
+ replaceAll: boolean;
3404
+ gitDiff?: {
3405
+ filename: string;
3406
+ status: "modified" | "added";
3407
+ additions: number;
3408
+ deletions: number;
3409
+ changes: number;
3410
+ patch: string;
3411
+ /**
3412
+ * GitHub owner/repo when available
3413
+ */
3414
+ repository?: string | null;
3415
+ };
3416
+ /**
3417
+ * True when the edit was held for the machine owner to review instead of written; the file is unchanged
3418
+ */
3419
+ staged?: boolean;
3420
+ }
3421
+ export interface FileWriteOutput {
3422
+ /**
3423
+ * Whether a new file was created or an existing file was updated
3424
+ */
3425
+ type: "create" | "update";
3426
+ /**
3427
+ * The path to the file that was written
3428
+ */
3429
+ filePath: string;
3430
+ /**
3431
+ * The content that was written to the file
3432
+ */
3433
+ content: string;
3434
+ /**
3435
+ * Diff patch showing the changes (empty when nothing changed, the diff timed out, or — with originalFile null on an update — the previous content was too large to diff)
3436
+ */
3437
+ structuredPatch: {
3438
+ oldStart: number;
3439
+ oldLines: number;
3440
+ newStart: number;
3441
+ newLines: number;
3442
+ lines: string[];
3443
+ }[];
3444
+ /**
3445
+ * The original file content before the write (null for new files, or when the previous content was too large to include)
3446
+ */
3447
+ originalFile: string | null;
3448
+ gitDiff?: {
3449
+ filename: string;
3450
+ status: "modified" | "added";
3451
+ additions: number;
3452
+ deletions: number;
3453
+ changes: number;
3454
+ patch: string;
3455
+ /**
3456
+ * GitHub owner/repo when available
3457
+ */
3458
+ repository?: string | null;
3459
+ };
3460
+ /**
3461
+ * True when the user edited the proposed content in the permission dialog before accepting
3462
+ */
3463
+ userModified?: boolean;
3464
+ /**
3465
+ * True when the write was held for the machine owner to review instead of written; the file is unchanged
3466
+ */
3467
+ staged?: boolean;
3468
+ }
3469
+ export interface GlobOutput {
3470
+ /**
3471
+ * Time taken to execute the search in milliseconds
3472
+ */
3473
+ durationMs: number;
3474
+ /**
3475
+ * Number of file paths returned (after any truncation)
3476
+ */
3477
+ numFiles: number;
3478
+ /**
3479
+ * Array of file paths that match the pattern
3480
+ */
3481
+ filenames: string[];
3482
+ /**
3483
+ * Whether results were truncated (limited to 100 files)
3484
+ */
3485
+ truncated: boolean;
3486
+ /**
3487
+ * Total number of matching files before truncation. A lower bound when countIsComplete is false. Absent on results persisted by CLI versions predating this field.
3488
+ */
3489
+ totalMatches?: number;
3490
+ /**
3491
+ * Whether totalMatches is the exact total (true) or a floor because the underlying search truncated its own output (false). Absent on results persisted by CLI versions predating this field.
3492
+ */
3493
+ countIsComplete?: boolean;
3494
+ }
3495
+ export interface GrepOutput {
3496
+ mode?: "content" | "files_with_matches" | "count";
3497
+ numFiles: number;
3498
+ filenames: string[];
3499
+ content?: string;
3500
+ numLines?: number;
3501
+ numMatches?: number;
3502
+ totalFiles?: number;
3503
+ totalLines?: number;
3504
+ appliedLimit?: number;
3505
+ appliedOffset?: number;
3506
+ }
3507
+ export interface TaskStopOutput {
3508
+ /**
3509
+ * Status message about the operation
3510
+ */
3511
+ message: string;
3512
+ /**
3513
+ * The ID of the task that was stopped
3514
+ */
3515
+ task_id: string;
3516
+ /**
3517
+ * The type of the task that was stopped
3518
+ */
3519
+ task_type: string;
3520
+ /**
3521
+ * The command or description of the stopped task
3522
+ */
3523
+ command?: string;
3524
+ }
3525
+ export interface NotebookEditOutput {
3526
+ /**
3527
+ * The new source code that was written to the cell
3528
+ */
3529
+ new_source: string;
3530
+ /**
3531
+ * The previous cell source (replace/delete only). Enables cell-relative diff rendering without re-reading the notebook.
3532
+ */
3533
+ old_source?: string;
3534
+ /**
3535
+ * The ID of the cell that was edited
3536
+ */
3537
+ cell_id?: string;
3538
+ /**
3539
+ * The type of the cell
3540
+ */
3541
+ cell_type: "code" | "markdown";
3542
+ /**
3543
+ * The programming language of the notebook
3544
+ */
3545
+ language: string;
3546
+ /**
3547
+ * The edit mode that was used
3548
+ */
3549
+ edit_mode: string;
3550
+ /**
3551
+ * Error message if the operation failed
3552
+ */
3553
+ error?: string;
3554
+ /**
3555
+ * The path to the notebook file
3556
+ */
3557
+ notebook_path: string;
3558
+ /**
3559
+ * The original notebook content before modification
3560
+ */
3561
+ original_file: string;
3562
+ /**
3563
+ * The updated notebook content after modification
3564
+ */
3565
+ updated_file: string;
3566
+ }
3567
+ export interface ReadMcpResourceDirOutput {
3568
+ /**
3569
+ * Direct children of the directory resource. Subdirectories appear with mimeType "inode/directory".
3570
+ */
3571
+ resources: {
3572
+ /**
3573
+ * Child resource URI
3574
+ */
3575
+ uri: string;
3576
+ /**
3577
+ * Child resource name
3578
+ */
3579
+ name: string;
3580
+ /**
3581
+ * Child MIME type
3582
+ */
3583
+ mimeType?: string;
3584
+ }[];
3585
+ /**
3586
+ * Human-readable error when the server could not list the directory
3587
+ */
3588
+ error?: string;
3589
+ }
3590
+ export interface ReadMcpResourceOutput {
3591
+ contents: {
3592
+ /**
3593
+ * Resource URI
3594
+ */
3595
+ uri: string;
3596
+ /**
3597
+ * MIME type of the content
3598
+ */
3599
+ mimeType?: string;
3600
+ /**
3601
+ * Text content of the resource
3602
+ */
3603
+ text?: string;
3604
+ /**
3605
+ * Path where binary blob content was saved
3606
+ */
3607
+ blobSavedTo?: string;
3608
+ }[];
3609
+ /**
3610
+ * Human-readable error when the server could not read the resource
3611
+ */
3612
+ error?: string;
3613
+ }
3614
+ export interface ReportFindingsOutput {
3615
+ /**
3616
+ * Number of findings reported
3617
+ */
3618
+ count: number;
3619
+ /**
3620
+ * Effort level the review ran at
3621
+ */
3622
+ level?: "low" | "medium" | "high" | "xhigh" | "max";
3623
+ /**
3624
+ * Echoed for the result body
3625
+ */
3626
+ findings: {
3627
+ /**
3628
+ * Repo-relative path of the file the finding is in
3629
+ */
3630
+ file: string;
3631
+ /**
3632
+ * 1-indexed line the finding anchors to
3633
+ */
3634
+ line?: number;
3635
+ /**
3636
+ * One-sentence statement of the defect
3637
+ */
3638
+ summary: string;
3639
+ /**
3640
+ * Compressed label for compact UI (≤60 chars): the claim alone, no rationale or consequence clause
3641
+ */
3642
+ short_summary?: string;
3643
+ /**
3644
+ * Concrete inputs/state → wrong output/crash
3645
+ */
3646
+ failure_scenario: string;
3647
+ /**
3648
+ * Short kebab-case slug of the finding type, e.g. "correctness", "simplification", "efficiency", "test-coverage"
3649
+ */
3650
+ category?: string;
3651
+ /**
3652
+ * Set when a verify pass ran; absent on inline-only reviews
3653
+ */
3654
+ verdict?: "CONFIRMED" | "PLAUSIBLE";
3655
+ /**
3656
+ * Set ONLY when re-reporting after applying fixes: what happened to this finding
3657
+ */
3658
+ outcome?: "fixed" | "skipped" | "no_change_needed";
3659
+ }[];
3660
+ }
3661
+ export interface TodoWriteOutput {
3662
+ /**
3663
+ * The todo list before the update
3664
+ */
3665
+ oldTodos: {
3666
+ content: string;
3667
+ status: "pending" | "in_progress" | "completed";
3668
+ activeForm: string;
3669
+ }[];
3670
+ /**
3671
+ * The todo list after the update
3672
+ */
3673
+ newTodos: {
3674
+ content: string;
3675
+ status: "pending" | "in_progress" | "completed";
3676
+ activeForm: string;
3677
+ }[];
3678
+ }
3679
+ export interface WebFetchOutput {
3680
+ /**
3681
+ * Size of the fetched content in bytes
3682
+ */
3683
+ bytes: number;
3684
+ /**
3685
+ * HTTP response code
3686
+ */
3687
+ code: number;
3688
+ /**
3689
+ * HTTP response code text
3690
+ */
3691
+ codeText: string;
3692
+ /**
3693
+ * Processed result from applying the prompt to the content
3694
+ */
3695
+ result: string;
3696
+ /**
3697
+ * Time taken to fetch and process the content
3698
+ */
3699
+ durationMs: number;
3700
+ /**
3701
+ * The URL that was fetched
3702
+ */
3703
+ url: string;
3704
+ artifactRead?: {
3705
+ slug: string;
3706
+ ver?: string;
3707
+ seeded?: false;
3708
+ };
3709
+ }
3710
+ export interface WebSearchOutput {
3711
+ /**
3712
+ * The search query that was executed
3713
+ */
3714
+ query: string;
3715
+ /**
3716
+ * Search results and/or text commentary from the model
3717
+ */
3718
+ results: (
3719
+ | {
3720
+ /**
3721
+ * ID of the tool use
3722
+ */
3723
+ tool_use_id: string;
3724
+ /**
3725
+ * Array of search hits
3726
+ */
3727
+ content: {
3728
+ /**
3729
+ * The title of the search result
3730
+ */
3731
+ title: string;
3732
+ /**
3733
+ * The URL of the search result
3734
+ */
3735
+ url: string;
3736
+ }[];
3737
+ }
3738
+ | string
3739
+ )[];
3740
+ /**
3741
+ * Time taken to complete the search operation
3742
+ */
3743
+ durationSeconds: number;
3744
+ /**
3745
+ * Number of web searches performed
3746
+ */
3747
+ searchCount?: number;
3748
+ }
3749
+ export interface AskUserQuestionOutput {
3750
+ /**
3751
+ * The questions that were asked
3752
+ */
3753
+ questions: {
3754
+ /**
3755
+ * The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"
3756
+ */
3757
+ question: string;
3758
+ /**
3759
+ * Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".
3760
+ */
3761
+ header: string;
3762
+ /**
3763
+ * The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.
3764
+ *
3765
+ * @minItems 2
3766
+ * @maxItems 4
3767
+ */
3768
+ options:
3769
+ | [
3770
+ {
3771
+ /**
3772
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3773
+ */
3774
+ label: string;
3775
+ /**
3776
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3777
+ */
3778
+ description: string;
3779
+ /**
3780
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3781
+ */
3782
+ preview?: string;
3783
+ },
3784
+ {
3785
+ /**
3786
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3787
+ */
3788
+ label: string;
3789
+ /**
3790
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3791
+ */
3792
+ description: string;
3793
+ /**
3794
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3795
+ */
3796
+ preview?: string;
3797
+ }
3798
+ ]
3799
+ | [
3800
+ {
3801
+ /**
3802
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3803
+ */
3804
+ label: string;
3805
+ /**
3806
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3807
+ */
3808
+ description: string;
3809
+ /**
3810
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3811
+ */
3812
+ preview?: string;
3813
+ },
3814
+ {
3815
+ /**
3816
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3817
+ */
3818
+ label: string;
3819
+ /**
3820
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3821
+ */
3822
+ description: string;
3823
+ /**
3824
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3825
+ */
3826
+ preview?: string;
3827
+ },
3828
+ {
3829
+ /**
3830
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3831
+ */
3832
+ label: string;
3833
+ /**
3834
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3835
+ */
3836
+ description: string;
3837
+ /**
3838
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3839
+ */
3840
+ preview?: string;
3841
+ }
3842
+ ]
3843
+ | [
3844
+ {
3845
+ /**
3846
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3847
+ */
3848
+ label: string;
3849
+ /**
3850
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3851
+ */
3852
+ description: string;
3853
+ /**
3854
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3855
+ */
3856
+ preview?: string;
3857
+ },
3858
+ {
3859
+ /**
3860
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3861
+ */
3862
+ label: string;
3863
+ /**
3864
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3865
+ */
3866
+ description: string;
3867
+ /**
3868
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3869
+ */
3870
+ preview?: string;
3871
+ },
3872
+ {
3873
+ /**
3874
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3875
+ */
3876
+ label: string;
3877
+ /**
3878
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3879
+ */
3880
+ description: string;
3881
+ /**
3882
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3883
+ */
3884
+ preview?: string;
3885
+ },
3886
+ {
3887
+ /**
3888
+ * The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice.
3889
+ */
3890
+ label: string;
3891
+ /**
3892
+ * Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications.
3893
+ */
3894
+ description: string;
3895
+ /**
3896
+ * Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.
3897
+ */
3898
+ preview?: string;
3899
+ }
3900
+ ];
3901
+ /**
3902
+ * Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.
3903
+ */
3904
+ multiSelect: boolean;
3905
+ }[];
3906
+ /**
3907
+ * The answers provided by the user (question text -> answer string; multi-select answers are comma-separated)
3908
+ */
3909
+ answers: {
3910
+ [k: string]: string;
3911
+ };
3912
+ /**
3913
+ * Freeform text the user typed instead of selecting a structured option
3914
+ */
3915
+ response?: string;
3916
+ /**
3917
+ * Optional per-question annotations from the user (e.g., notes on preview selections). Keyed by question text.
3918
+ */
3919
+ annotations?: {
3920
+ [k: string]: {
3921
+ /**
3922
+ * The preview content of the selected option, if the question used previews.
3923
+ */
3924
+ preview?: string;
3925
+ /**
3926
+ * Free-text notes the user added to their selection.
3927
+ */
3928
+ notes?: string;
3929
+ };
3930
+ };
3931
+ /**
3932
+ * Set when the dialog auto-resolved after this many milliseconds of idle (user away from keyboard). Absent on every human-resolved path.
3933
+ */
3934
+ afkTimeoutMs?: number;
3935
+ }
3936
+ export interface SendFeedbackOutput {
3937
+ success: boolean;
3938
+ message: string;
3939
+ }
3940
+ export interface EnterWorktreeOutput {
3941
+ worktreePath: string;
3942
+ worktreeBranch?: string;
3943
+ message: string;
3944
+ }
3945
+ export interface ExitWorktreeOutput {
3946
+ action: "keep" | "remove";
3947
+ originalCwd: string;
3948
+ worktreePath: string;
3949
+ worktreeBranch?: string;
3950
+ tmuxSessionName?: string;
3951
+ discardedFiles?: number;
3952
+ discardedCommits?: number;
3953
+ message: string;
3954
+ }
3955
+ export interface TaskCreateOutput {
3956
+ task: {
3957
+ id: string;
3958
+ subject: string;
3959
+ };
3960
+ }
3961
+ export interface TaskGetOutput {
3962
+ task: {
3963
+ id: string;
3964
+ subject: string;
3965
+ description: string;
3966
+ status: "pending" | "in_progress" | "completed";
3967
+ blocks: string[];
3968
+ blockedBy: string[];
3969
+ } | null;
3970
+ }
3971
+ export interface TaskUpdateOutput {
3972
+ success: boolean;
3973
+ taskId: string;
3974
+ updatedFields: string[];
3975
+ error?: string;
3976
+ statusChange?: {
3977
+ from: string;
3978
+ to: string;
3979
+ };
3980
+ }
3981
+ export interface TaskListOutput {
3982
+ tasks: {
3983
+ id: string;
3984
+ subject: string;
3985
+ status: "pending" | "in_progress" | "completed";
3986
+ owner?: string;
3987
+ blockedBy: string[];
3988
+ }[];
3989
+ }
3990
+ export interface RemoteTriggerOutput {
3991
+ status: number;
3992
+ json: string;
3993
+ summary?: string;
3994
+ }
3995
+ export interface ShowOnboardingRolePickerOutput {
3996
+ role?: string;
3997
+ dismissed?: boolean;
3998
+ }
3999
+ export interface ReadNotificationsOutput {
4000
+ notifications: {
4001
+ /**
4002
+ * Server-assigned stable id — the dedup key across redeliveries.
4003
+ */
4004
+ notification_id: string;
4005
+ /**
4006
+ * Server-attested source token: "github_webhook" | "trigger_fire" | "mcp_send_message" (open set; unknown well-formed tokens pass through verbatim, off-grammar values coerce to "unknown").
4007
+ */
4008
+ origin: string;
4009
+ /**
4010
+ * RFC3339 timestamp of when the backend queued it.
4011
+ */
4012
+ queued_at: string;
4013
+ /**
4014
+ * Verbatim notification body.
4015
+ */
4016
+ content: string;
4017
+ }[];
4018
+ /**
4019
+ * Notifications still queued after this drain (drains are size-budgeted); call the tool again to read them.
4020
+ */
4021
+ remaining: number;
4022
+ }
4023
+ export interface ScheduleWakeupOutput {
4024
+ /**
4025
+ * Epoch ms timestamp when the next wakeup will fire
4026
+ */
4027
+ scheduledFor: number;
4028
+ /**
4029
+ * Actual delay used after clamping to runtime bounds
4030
+ */
4031
+ clampedDelaySeconds: number;
4032
+ /**
4033
+ * True if the requested delaySeconds was outside [60, 3600]
4034
+ */
4035
+ wasClamped: boolean;
4036
+ /**
4037
+ * True when the model ended the loop via `stop: true`
4038
+ */
4039
+ stopped?: boolean;
4040
+ /**
4041
+ * How many pending dynamic-loop wakeups stop:true cancelled. 0 means nothing was pending — a recurring /loop cron is not cancelled by stop:true.
4042
+ */
4043
+ cancelledWakeups?: number;
4044
+ }
4045
+ export interface MonitorOutput {
4046
+ /**
4047
+ * ID of the background monitor task.
4048
+ */
4049
+ taskId: string;
4050
+ /**
4051
+ * Timeout deadline in milliseconds (0 when persistent).
4052
+ */
4053
+ timeoutMs: number;
4054
+ /**
4055
+ * No timeout — runs until TaskStop or session end.
4056
+ */
4057
+ persistent?: boolean;
4058
+ }
4059
+ export interface ProposeSkillsOutput {
4060
+ /**
4061
+ * Number of proposals shown on the review card
4062
+ */
4063
+ proposalCount: number;
4064
+ }
4065
+ export interface ProposeGoalOutput {
4066
+ /**
4067
+ * The condition shown to the user for approval, or set directly when ask_user was false
4068
+ */
4069
+ condition: string;
4070
+ /**
4071
+ * Whether the user was asked for approval (true) or the goal was set directly (false)
4072
+ */
4073
+ askUser: boolean;
4074
+ }
4075
+ export interface EnterPlanModeOutput {
4076
+ /**
4077
+ * Confirmation that plan mode was entered
4078
+ */
4079
+ message: string;
4080
+ }
4081
+ export interface WorkflowOutput {
4082
+ status: "async_launched" | "remote_launched";
4083
+ taskId: string;
4084
+ /**
4085
+ * TaskType of the registered background task — 'local_workflow' for in-process runs, 'remote_agent' when remote:true dispatches to CCR. Set on all new writes; absent only on transcripts written before this field existed.
4086
+ */
4087
+ taskType?: "local_workflow" | "remote_agent";
4088
+ /**
4089
+ * meta.name from the workflow script — same value as task_started.workflow_name. Set on all new writes; absent only on transcripts written before this field existed.
4090
+ */
4091
+ workflowName?: string;
4092
+ /**
4093
+ * Local workflow run identifier for resumeFromRunId. Absent for remote_launched (the CCR session URL is the resume handle there) and on transcripts written before this field existed.
4094
+ */
4095
+ runId?: string;
4096
+ summary?: string;
4097
+ /**
4098
+ * Directory where subagent transcripts are written during execution
4099
+ */
4100
+ transcriptDir?: string;
4101
+ /**
4102
+ * Path to the persisted workflow script for this invocation. Editable via Write/Edit; pass back as `scriptPath` to re-run without resending the script.
4103
+ */
4104
+ scriptPath?: string;
4105
+ /**
4106
+ * CCR session URL when status is remote_launched
4107
+ */
4108
+ sessionUrl?: string;
4109
+ /**
4110
+ * Non-blocking heads-up (e.g. local git state diverges from the pushed branch the cloud session will clone)
4111
+ */
4112
+ warning?: string;
4113
+ /**
4114
+ * Set if syntax check failed
4115
+ */
4116
+ error?: string;
4117
+ }
4118
+ export interface CronCreateOutput {
4119
+ id: string;
4120
+ humanSchedule: string;
4121
+ recurring: boolean;
4122
+ durable?: boolean;
4123
+ }
4124
+ export interface CronDeleteOutput {
4125
+ id: string;
4126
+ }
4127
+ export interface CronListOutput {
4128
+ jobs: {
4129
+ id: string;
4130
+ cron: string;
4131
+ humanSchedule: string;
4132
+ prompt: string;
4133
+ recurring?: boolean;
4134
+ durable?: boolean;
4135
+ }[];
4136
+ }
4137
+ export interface PushNotificationOutput {
4138
+ message: string;
4139
+ pushSent?: boolean;
4140
+ localSent?: boolean;
4141
+ disabledReason?: "config_off" | "user_present" | "no_transport";
4142
+ /**
4143
+ * ISO timestamp captured at tool execution on the emitting process. Optional — resumed sessions replay pre-sentAt outputs verbatim.
4144
+ */
4145
+ sentAt?: string;
4146
+ }
4147
+ export interface ClaudeDesignOutput {
4148
+ operation: string;
4149
+ content: {
4150
+ [k: string]: unknown;
4151
+ }[];
4152
+ isError?: boolean;
4153
+ }