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