History

Add Claude fast mode support across adapter and composer controls

- support `claudeAgent.fastMode` in shared/contracts, provider dispatch, and Claude adapter SDK settings - gate fast mode to supported Claude models and restart/forward options in orchestration - unify draft/UI fast mode state (not Codex-only) and add browser/server tests plus SDK probe

Julius Marminge committed 8 months ago

Commit f98679d1 parent 5c9cfcd19 files · +661 −57Browse files

Showing the changes to scripts (2 of 19 files). Show all

Unified · Split

2 files
  1. scripts/claude-fast-mode-probe.ts +129 −0
  2. scripts/package.json +2 −0
scripts/claude-fast-mode-probe.ts+129−0
@@ -0,0 +1,129 @@
1import { query, type SDKMessage } from "@anthropic-ai/claude-agent-sdk";
2
3type ProbeMode = "off" | "on";
4
5async function* emptyPrompt(): AsyncGenerator<never, void, void> {}
6
7function parseArgs(argv: ReadonlyArray<string>): {
8 readonly mode: ProbeMode | "both";
9 readonly model?: string;
10 readonly cwd?: string;
11 readonly prompt?: string;
12} {
13 let mode: ProbeMode | "both" = "both";
14 let model: string | undefined;
15 let cwd: string | undefined;
16 let prompt: string | undefined;
17
18 for (let index = 0; index < argv.length; index += 1) {
19 const value = argv[index];
20 if (!value) {
21 continue;
22 }
23 if (value === "--mode") {
24 const next = argv[index + 1];
25 if (next === "off" || next === "on" || next === "both") {
26 mode = next;
27 index += 1;
28 }
29 continue;
30 }
31 if (value === "--model") {
32 model = argv[index + 1];
33 index += 1;
34 continue;
35 }
36 if (value === "--cwd") {
37 cwd = argv[index + 1];
38 index += 1;
39 continue;
40 }
41 if (value === "--prompt") {
42 prompt = argv[index + 1] ?? prompt;
43 index += 1;
44 }
45 }
46
47 return {
48 mode,
49 ...(model ? { model } : {}),
50 ...(cwd ? { cwd } : {}),
51 ...(prompt ? { prompt } : {}),
52 };
53}
54
55async function runProbe(input: {
56 readonly mode: ProbeMode;
57 readonly model?: string;
58 readonly cwd?: string;
59 readonly prompt?: string;
60}): Promise<void> {
61 const messages = query({
62 prompt: input.prompt ?? emptyPrompt(),
63 options: {
64 ...(input.model ? { model: input.model } : {}),
65 ...(input.cwd ? { cwd: input.cwd } : {}),
66 persistSession: false,
67 tools: [],
68 permissionMode: "plan",
69 includePartialMessages: true,
70 ...(input.mode === "on" ? { settings: { fastMode: true } } : {}),
71 },
72 });
73
74 const summary = {
75 mode: input.mode,
76 initFastModeState: null as string | null,
77 resultFastModeState: null as string | null,
78 resultSubtype: null as string | null,
79 resultText: null as string | null,
80 };
81
82 const initialization = await messages.initializationResult();
83 summary.initFastModeState = initialization.fast_mode_state ?? null;
84
85 if (!input.prompt) {
86 messages.close();
87 console.log(JSON.stringify(summary, null, 2));
88 return;
89 }
90
91 for await (const message of messages) {
92 handleProbeMessage(message, summary);
93 }
94 console.log(JSON.stringify(summary, null, 2));
95}
96
97function handleProbeMessage(
98 message: SDKMessage,
99 summary: {
100 mode: ProbeMode;
101 initFastModeState: string | null;
102 resultFastModeState: string | null;
103 resultSubtype: string | null;
104 resultText: string | null;
105 },
106): void {
107 if (message.type !== "result") {
108 return;
109 }
110 summary.resultSubtype = message.subtype;
111 summary.resultFastModeState = message.fast_mode_state ?? null;
112 summary.resultText = message.subtype === "success" ? message.result : message.errors.join("\n");
113}
114
115async function main(): Promise<void> {
116 const args = parseArgs(process.argv.slice(2));
117 const modes = args.mode === "both" ? (["off", "on"] as const) : [args.mode];
118
119 for (const mode of modes) {
120 await runProbe({
121 mode,
122 ...(args.model ? { model: args.model } : {}),
123 ...(args.cwd ? { cwd: args.cwd } : {}),
124 ...(args.prompt ? { prompt: args.prompt } : {}),
125 });
126 }
127}
128
129await main();
scripts/package.json+2−0
@@ -4,10 +4,12 @@ · 3 unmodified lines
4 "type": "module",4 "type": "module",
5 "scripts": {5 "scripts": {
6 "prepare": "effect-language-service patch",6 "prepare": "effect-language-service patch",
7 "claude-fast-mode-probe": "bun run claude-fast-mode-probe.ts",
7 "typecheck": "tsc --noEmit",8 "typecheck": "tsc --noEmit",
8 "test": "vitest run"9 "test": "vitest run"
9 },10 },
10 "dependencies": {11 "dependencies": {
12 "@anthropic-ai/claude-agent-sdk": "^0.2.77",
11 "@effect/platform-node": "catalog:",13 "@effect/platform-node": "catalog:",
12 "@t3tools/contracts": "workspace:*",14 "@t3tools/contracts": "workspace:*",
13 "@t3tools/shared": "workspace:*",15 "@t3tools/shared": "workspace:*",

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t