linkshell-cli 0.9.0 → 0.10.1

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 (168) hide show
  1. package/README.md +11 -6
  2. package/dist/cli/src/commands/gateway.d.ts +2 -0
  3. package/dist/cli/src/commands/gateway.js +29 -0
  4. package/dist/cli/src/commands/gateway.js.map +1 -0
  5. package/dist/cli/src/commands/host.d.ts +2 -0
  6. package/dist/cli/src/commands/host.js +12 -2
  7. package/dist/cli/src/commands/host.js.map +1 -1
  8. package/dist/cli/src/commands/setup.js +4 -2
  9. package/dist/cli/src/commands/setup.js.map +1 -1
  10. package/dist/cli/src/index.js +12 -334
  11. package/dist/cli/src/index.js.map +1 -1
  12. package/dist/cli/src/utils/daemon.d.ts +0 -7
  13. package/dist/cli/src/utils/daemon.js +1 -18
  14. package/dist/cli/src/utils/daemon.js.map +1 -1
  15. package/dist/cli/tsconfig.tsbuildinfo +1 -1
  16. package/dist/gateway/src/accounts.d.ts +6 -0
  17. package/dist/gateway/src/accounts.js +32 -0
  18. package/dist/gateway/src/accounts.js.map +1 -0
  19. package/dist/gateway/src/index.d.ts +4 -0
  20. package/dist/gateway/src/index.js +5 -0
  21. package/dist/gateway/src/index.js.map +1 -0
  22. package/dist/gateway/src/main.d.ts +1 -0
  23. package/dist/gateway/src/main.js +57 -0
  24. package/dist/gateway/src/main.js.map +1 -0
  25. package/dist/gateway/src/rate-limit.d.ts +22 -0
  26. package/dist/gateway/src/rate-limit.js +66 -0
  27. package/dist/gateway/src/rate-limit.js.map +1 -0
  28. package/dist/gateway/src/relay.d.ts +84 -0
  29. package/dist/gateway/src/relay.js +434 -0
  30. package/dist/gateway/src/relay.js.map +1 -0
  31. package/dist/gateway/src/serve.d.ts +34 -0
  32. package/dist/gateway/src/serve.js +102 -0
  33. package/dist/gateway/src/serve.js.map +1 -0
  34. package/dist/gateway/src/store.d.ts +35 -0
  35. package/dist/gateway/src/store.js +109 -0
  36. package/dist/gateway/src/store.js.map +1 -0
  37. package/dist/gateway/src/subscription.d.ts +18 -0
  38. package/dist/gateway/src/subscription.js +46 -0
  39. package/dist/gateway/src/subscription.js.map +1 -0
  40. package/dist/host/src/drivers/claude/transcript.d.ts +23 -23
  41. package/dist/host/src/drivers/codex/app-server.d.ts +31 -6
  42. package/dist/host/src/drivers/codex/app-server.js +99 -24
  43. package/dist/host/src/drivers/codex/app-server.js.map +1 -1
  44. package/dist/host/src/drivers/codex/desktop-ipc.d.ts +8 -0
  45. package/dist/host/src/drivers/codex/desktop-ipc.js +124 -0
  46. package/dist/host/src/drivers/codex/desktop-ipc.js.map +1 -0
  47. package/dist/host/src/drivers/codex/driver.d.ts +111 -2
  48. package/dist/host/src/drivers/codex/driver.js +629 -63
  49. package/dist/host/src/drivers/codex/driver.js.map +1 -1
  50. package/dist/host/src/drivers/codex/mapper.d.ts +21 -0
  51. package/dist/host/src/drivers/codex/mapper.js +45 -6
  52. package/dist/host/src/drivers/codex/mapper.js.map +1 -1
  53. package/dist/host/src/drivers/types.d.ts +6 -0
  54. package/dist/host/src/fs.d.ts +3 -3
  55. package/dist/host/src/hub.js +8 -1
  56. package/dist/host/src/hub.js.map +1 -1
  57. package/dist/host/src/input.d.ts +4 -4
  58. package/dist/host/src/terminals.d.ts +1 -1
  59. package/dist/wire/src/model.d.ts +6 -6
  60. package/dist/wire/src/relay.d.ts +8 -8
  61. package/dist/wire/src/rpc.d.ts +818 -818
  62. package/dist/wire/src/updates.d.ts +18 -18
  63. package/package.json +5 -14
  64. package/src/commands/gateway.ts +31 -0
  65. package/src/commands/host.ts +13 -2
  66. package/src/commands/setup.ts +4 -2
  67. package/src/index.ts +14 -429
  68. package/src/utils/daemon.ts +2 -27
  69. package/dist/cli/src/config.d.ts +0 -14
  70. package/dist/cli/src/config.js +0 -23
  71. package/dist/cli/src/config.js.map +0 -1
  72. package/dist/cli/src/machine-id.d.ts +0 -6
  73. package/dist/cli/src/machine-id.js +0 -50
  74. package/dist/cli/src/machine-id.js.map +0 -1
  75. package/dist/cli/src/providers.d.ts +0 -13
  76. package/dist/cli/src/providers.js +0 -77
  77. package/dist/cli/src/providers.js.map +0 -1
  78. package/dist/cli/src/runtime/acp/acp-client.d.ts +0 -128
  79. package/dist/cli/src/runtime/acp/acp-client.js +0 -430
  80. package/dist/cli/src/runtime/acp/acp-client.js.map +0 -1
  81. package/dist/cli/src/runtime/acp/agent-process-discovery.d.ts +0 -48
  82. package/dist/cli/src/runtime/acp/agent-process-discovery.js +0 -278
  83. package/dist/cli/src/runtime/acp/agent-process-discovery.js.map +0 -1
  84. package/dist/cli/src/runtime/acp/agent-session.d.ts +0 -62
  85. package/dist/cli/src/runtime/acp/agent-session.js +0 -1081
  86. package/dist/cli/src/runtime/acp/agent-session.js.map +0 -1
  87. package/dist/cli/src/runtime/acp/agent-workspace.d.ts +0 -311
  88. package/dist/cli/src/runtime/acp/agent-workspace.js +0 -6083
  89. package/dist/cli/src/runtime/acp/agent-workspace.js.map +0 -1
  90. package/dist/cli/src/runtime/acp/claude-sdk-client.d.ts +0 -121
  91. package/dist/cli/src/runtime/acp/claude-sdk-client.js +0 -1147
  92. package/dist/cli/src/runtime/acp/claude-sdk-client.js.map +0 -1
  93. package/dist/cli/src/runtime/acp/claude-stream-json-client.d.ts +0 -53
  94. package/dist/cli/src/runtime/acp/claude-stream-json-client.js +0 -552
  95. package/dist/cli/src/runtime/acp/claude-stream-json-client.js.map +0 -1
  96. package/dist/cli/src/runtime/acp/json-rpc.d.ts +0 -22
  97. package/dist/cli/src/runtime/acp/json-rpc.js +0 -160
  98. package/dist/cli/src/runtime/acp/json-rpc.js.map +0 -1
  99. package/dist/cli/src/runtime/acp/provider-resolver.d.ts +0 -16
  100. package/dist/cli/src/runtime/acp/provider-resolver.js +0 -132
  101. package/dist/cli/src/runtime/acp/provider-resolver.js.map +0 -1
  102. package/dist/cli/src/runtime/bridge-session.d.ts +0 -97
  103. package/dist/cli/src/runtime/bridge-session.js +0 -1364
  104. package/dist/cli/src/runtime/bridge-session.js.map +0 -1
  105. package/dist/cli/src/runtime/hook-command.d.ts +0 -9
  106. package/dist/cli/src/runtime/hook-command.js +0 -80
  107. package/dist/cli/src/runtime/hook-command.js.map +0 -1
  108. package/dist/cli/src/runtime/screen-fallback.d.ts +0 -22
  109. package/dist/cli/src/runtime/screen-fallback.js +0 -202
  110. package/dist/cli/src/runtime/screen-fallback.js.map +0 -1
  111. package/dist/cli/src/runtime/screen-share.d.ts +0 -34
  112. package/dist/cli/src/runtime/screen-share.js +0 -376
  113. package/dist/cli/src/runtime/screen-share.js.map +0 -1
  114. package/dist/cli/src/runtime/scrollback.d.ts +0 -11
  115. package/dist/cli/src/runtime/scrollback.js +0 -33
  116. package/dist/cli/src/runtime/scrollback.js.map +0 -1
  117. package/dist/cli/src/runtime/usage-report.d.ts +0 -34
  118. package/dist/cli/src/runtime/usage-report.js +0 -332
  119. package/dist/cli/src/runtime/usage-report.js.map +0 -1
  120. package/dist/cli/src/utils/keep-awake.d.ts +0 -6
  121. package/dist/cli/src/utils/keep-awake.js +0 -48
  122. package/dist/cli/src/utils/keep-awake.js.map +0 -1
  123. package/dist/cli/src/utils/lan-ip.d.ts +0 -9
  124. package/dist/cli/src/utils/lan-ip.js +0 -61
  125. package/dist/cli/src/utils/lan-ip.js.map +0 -1
  126. package/dist/host/src/input-helper.d.ts +0 -1
  127. package/dist/host/src/input-helper.js +0 -564
  128. package/dist/host/src/input-helper.js.map +0 -1
  129. package/dist/shared-protocol/src/index.d.ts +0 -17029
  130. package/dist/shared-protocol/src/index.js +0 -1064
  131. package/dist/shared-protocol/src/index.js.map +0 -1
  132. package/scripts/copy-web.mjs +0 -34
  133. package/src/config.ts +0 -36
  134. package/src/machine-id.ts +0 -61
  135. package/src/providers.ts +0 -97
  136. package/src/runtime/acp/acp-client.ts +0 -521
  137. package/src/runtime/acp/agent-process-discovery.ts +0 -308
  138. package/src/runtime/acp/agent-session.ts +0 -1186
  139. package/src/runtime/acp/agent-workspace.ts +0 -6590
  140. package/src/runtime/acp/claude-sdk-client.ts +0 -1221
  141. package/src/runtime/acp/claude-stream-json-client.ts +0 -633
  142. package/src/runtime/acp/json-rpc.ts +0 -184
  143. package/src/runtime/acp/provider-resolver.ts +0 -154
  144. package/src/runtime/bridge-session.ts +0 -1549
  145. package/src/runtime/hook-command.ts +0 -73
  146. package/src/runtime/screen-fallback.ts +0 -235
  147. package/src/runtime/screen-share.ts +0 -426
  148. package/src/runtime/scrollback.ts +0 -43
  149. package/src/runtime/usage-report.ts +0 -342
  150. package/src/utils/keep-awake.ts +0 -61
  151. package/src/utils/lan-ip.ts +0 -61
  152. package/web/assets/FileBrowser-wOAfY-xj.js +0 -2
  153. package/web/assets/PortPreview-Cbvv7yzA.js +0 -2
  154. package/web/assets/TerminalPanel-CTSklkct.js +0 -1
  155. package/web/assets/UsageDashboard-CJ1AsNmd.js +0 -1
  156. package/web/assets/index-BsnDaeCt.css +0 -33
  157. package/web/assets/index-q85psYZ5.js +0 -36
  158. package/web/assets/vendor-highlight-NXWAAyIv.js +0 -5
  159. package/web/assets/vendor-react-M7xG3qiw.js +0 -49
  160. package/web/assets/vendor-xterm-D15THcI4.js +0 -9
  161. package/web/index.html +0 -37
  162. package/web/logos/claude.png +0 -0
  163. package/web/logos/codex.png +0 -0
  164. package/web/logos/copilot.png +0 -0
  165. package/web/logos/gemini.png +0 -0
  166. package/web/logos/linkshell-1024.png +0 -0
  167. package/web/logos/linkshell-splash.png +0 -0
  168. package/web/logos/linkshell.png +0 -0
@@ -1,552 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { createInterface } from "node:readline";
3
- import { homedir } from "node:os";
4
- import { readdirSync, existsSync, readFileSync, statSync } from "node:fs";
5
- import { join, resolve } from "node:path";
6
- import { parseClaudeJsonlSession } from "./claude-sdk-client.js";
7
- // Hash a directory path the same way Claude Code does for project storage
8
- function projectHash(cwd) {
9
- return ("-" +
10
- resolve(cwd)
11
- .replace(/\/$/, "")
12
- .replace(/\//g, "-"));
13
- }
14
- function claudeProjectsRoot() {
15
- return join(homedir(), ".claude", "projects");
16
- }
17
- function claudeProjectDir(cwd) {
18
- return join(claudeProjectsRoot(), projectHash(cwd));
19
- }
20
- function claudeProjectDirs(preferredCwd) {
21
- const root = claudeProjectsRoot();
22
- const preferred = claudeProjectDir(preferredCwd);
23
- const dirs = [];
24
- if (existsSync(preferred))
25
- dirs.push(preferred);
26
- if (!existsSync(root))
27
- return dirs;
28
- try {
29
- for (const entry of readdirSync(root)) {
30
- const fullPath = join(root, entry);
31
- if (fullPath !== preferred && statSync(fullPath).isDirectory()) {
32
- dirs.push(fullPath);
33
- }
34
- }
35
- }
36
- catch {
37
- // Ignore unreadable Claude storage.
38
- }
39
- return dirs;
40
- }
41
- function stringField(value, keys) {
42
- if (!value || typeof value !== "object")
43
- return undefined;
44
- const record = value;
45
- for (const key of keys) {
46
- const candidate = record[key];
47
- if (typeof candidate === "string" && candidate.trim())
48
- return candidate.trim();
49
- }
50
- return undefined;
51
- }
52
- function id(prefix) {
53
- return `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
54
- }
55
- // Claude stream-json returns tool_result content as either a plain string or
56
- // an array of content-block objects. Extract the text regardless of shape.
57
- function extractToolResultText(content) {
58
- if (typeof content === "string")
59
- return content;
60
- if (Array.isArray(content)) {
61
- return content
62
- .map((part) => {
63
- if (typeof part === "string")
64
- return part;
65
- if (part && typeof part === "object" && "text" in part && typeof part.text === "string") {
66
- return part.text;
67
- }
68
- return "";
69
- })
70
- .join("");
71
- }
72
- if (content && typeof content === "object" && "text" in content && typeof content.text === "string") {
73
- return content.text;
74
- }
75
- return String(content ?? "");
76
- }
77
- function splitImageDataUrl(value, fallbackMimeType = "image/png") {
78
- const match = value.match(/^data:([^;,]+)?;base64,(.*)$/is);
79
- if (!match)
80
- return { data: value, mimeType: fallbackMimeType };
81
- return {
82
- data: match[2] ?? "",
83
- mimeType: match[1] || fallbackMimeType,
84
- };
85
- }
86
- export class ClaudeStreamJsonClient {
87
- input;
88
- static warnedBypass = false;
89
- child;
90
- claudeSessionId;
91
- pendingCancel = false;
92
- // Per-file cache for listSessions: skip re-reading/parsing an unchanged
93
- // transcript (same mtime+size). fs.watch re-syncs fire every ~1.5s, so
94
- // without this each sync would re-parse every transcript in ~/.claude/projects.
95
- sessionMetaCache = new Map();
96
- constructor(input) {
97
- this.input = input;
98
- }
99
- async initialize() {
100
- // No persistent process to start — we'll capture session on first prompt.
101
- // But we can verify the binary exists by running a quick --help.
102
- try {
103
- const { execSync } = await import("node:child_process");
104
- execSync("claude --version", { stdio: "ignore", timeout: 5000 });
105
- }
106
- catch {
107
- throw new Error("Claude Code CLI not found or not executable");
108
- }
109
- return { status: "ok" };
110
- }
111
- async newSession(input) {
112
- // Start a dry-run prompt to get a session_id, then cancel.
113
- // Actually, we just store that there's no session yet — the real session
114
- // will be created on the first prompt() call.
115
- this.claudeSessionId = undefined;
116
- return { sessionId: undefined, status: "ready" };
117
- }
118
- async loadSession(input) {
119
- this.claudeSessionId = input.sessionId;
120
- return { sessionId: input.sessionId, status: "loaded" };
121
- }
122
- async prompt(input) {
123
- if (this.child) {
124
- this.stop();
125
- }
126
- this.pendingCancel = false;
127
- // SECURITY: the headless stream-json fallback can only run with
128
- // --permission-mode bypassPermissions (there is no TTY to prompt on), so
129
- // remotely-submitted prompts execute tools — including shell — without
130
- // confirmation. The SDK path (preferred when @anthropic-ai/claude-agent-sdk
131
- // is installed) routes tool approvals to the mobile UI instead.
132
- if (/^(1|true|yes)$/i.test(process.env.LINKSHELL_REQUIRE_AGENT_PERMISSIONS ?? "")) {
133
- throw new Error("Agent permission enforcement is required (LINKSHELL_REQUIRE_AGENT_PERMISSIONS) " +
134
- "but the Claude stream-json fallback can only run with bypassPermissions. " +
135
- "Install @anthropic-ai/claude-agent-sdk to enable permission-gated tool approvals.");
136
- }
137
- if (!ClaudeStreamJsonClient.warnedBypass) {
138
- ClaudeStreamJsonClient.warnedBypass = true;
139
- process.stderr.write("[bridge] WARNING: Claude stream-json fallback runs with bypassPermissions — " +
140
- "remotely submitted prompts can execute tools (including shell) without confirmation. " +
141
- "Install @anthropic-ai/claude-agent-sdk for permission-gated control, or set " +
142
- "LINKSHELL_REQUIRE_AGENT_PERMISSIONS=true to refuse the unsafe fallback.\n");
143
- }
144
- // Build Claude args
145
- const args = [
146
- "--print",
147
- "--output-format", "stream-json",
148
- "--input-format", "stream-json",
149
- "--verbose",
150
- "--permission-mode", "bypassPermissions",
151
- ];
152
- // Use stored session for --resume (only when we have a real session ID from system.init)
153
- if (this.claudeSessionId) {
154
- args.push("--resume", this.claudeSessionId);
155
- }
156
- // Allow up to 10 turns so Claude can execute tools and continue responding.
157
- // With bypassPermissions, tools auto-execute — a generous limit prevents
158
- // infinite loops while still allowing complex multi-step workflows.
159
- args.push("--max-turns", "10");
160
- if (input.model) {
161
- args.push("--model", input.model);
162
- }
163
- // Build the user message
164
- const contentBlocks = input.content.map((block) => {
165
- if (block.type === "image" && block.data) {
166
- const image = splitImageDataUrl(block.data, block.mimeType);
167
- return { type: "image", source: { type: "base64", media_type: image.mimeType, data: image.data } };
168
- }
169
- return { type: "text", text: block.text ?? "" };
170
- });
171
- const userMessage = {
172
- type: "user",
173
- message: {
174
- role: "user",
175
- content: contentBlocks,
176
- },
177
- };
178
- return new Promise((resolve, reject) => {
179
- const cwd = input.cwd ?? this.input.cwd;
180
- const child = spawn("claude", args, {
181
- cwd,
182
- env: process.env,
183
- stdio: ["pipe", "pipe", "pipe"],
184
- });
185
- this.child = child;
186
- let settled = false;
187
- const finish = (err, result) => {
188
- if (settled)
189
- return;
190
- settled = true;
191
- // Only clear reference if this child is still the active one
192
- if (this.child === child) {
193
- this.child = undefined;
194
- }
195
- if (err) {
196
- // Don't call onExit for per-prompt failures — the client can still accept new prompts.
197
- // onExit is reserved for fatal errors (e.g. binary not found in initialize()).
198
- reject(err);
199
- }
200
- else {
201
- resolve(result);
202
- }
203
- };
204
- // Send the prompt
205
- try {
206
- child.stdin.write(JSON.stringify(userMessage) + "\n");
207
- child.stdin.end();
208
- }
209
- catch (err) {
210
- child.kill("SIGTERM");
211
- finish(err instanceof Error ? err : new Error(String(err)), undefined);
212
- return child;
213
- }
214
- // Read stdout line by line (stream-json is newline-delimited)
215
- const rl = createInterface({ input: child.stdout, crlfDelay: Infinity });
216
- let currentToolId;
217
- let currentToolName;
218
- let currentMessageId;
219
- const progressItemId = `claude-progress:${input.clientMessageId}`;
220
- // Map tool_use_id → tool_name so tool_result can look up the correct name
221
- // even when multiple tools are in flight
222
- const toolNames = new Map();
223
- this.input.onNotification("item/started", {
224
- sessionId: input.sessionId ?? this.claudeSessionId,
225
- item: {
226
- id: progressItemId,
227
- type: "thinking",
228
- text: "Claude 正在处理请求",
229
- status: "running",
230
- },
231
- });
232
- rl.on("line", (line) => {
233
- if (this.pendingCancel) {
234
- child.kill("SIGTERM");
235
- return;
236
- }
237
- let event;
238
- try {
239
- event = JSON.parse(line);
240
- }
241
- catch {
242
- return; // skip unparseable lines
243
- }
244
- switch (event.type) {
245
- case "system": {
246
- if (event.subtype === "init") {
247
- // Capture session ID
248
- if (event.session_id) {
249
- this.claudeSessionId = event.session_id;
250
- }
251
- // Emit thread/started so workspace/session proxies update their agentSessionId
252
- this.input.onNotification("thread/started", {
253
- sessionId: event.session_id,
254
- threadId: event.session_id,
255
- });
256
- // Also send initialized with full metadata
257
- const initParams = {
258
- sessionId: event.session_id,
259
- threadId: event.session_id,
260
- cwd: event.cwd ?? cwd,
261
- model: event.model,
262
- };
263
- if (event.tools)
264
- initParams.tools = event.tools;
265
- if (event.slash_commands)
266
- initParams.slashCommands = event.slash_commands;
267
- if (event.mcp_servers)
268
- initParams.mcpServers = event.mcp_servers;
269
- this.input.onNotification("initialized", initParams);
270
- }
271
- // Hook events and other system messages are informational, skip
272
- break;
273
- }
274
- case "assistant": {
275
- const message = event.message;
276
- if (!message)
277
- break;
278
- const content = (message.content ?? []);
279
- // Reset per-message tracking — each assistant message starts fresh
280
- currentMessageId = undefined;
281
- for (const block of content) {
282
- switch (block.type) {
283
- case "thinking":
284
- // Use item/completed since thinking blocks arrive complete (not streaming deltas)
285
- // item/started would leave isStreaming=true forever with no matching item/completed
286
- this.input.onNotification("item/completed", {
287
- sessionId: this.claudeSessionId,
288
- item: {
289
- id: event.uuid ?? id("thinking"),
290
- type: "thinking",
291
- text: block.thinking,
292
- status: "completed",
293
- },
294
- });
295
- break;
296
- case "text":
297
- currentMessageId = (typeof message.id === "string" ? message.id : undefined) ?? event.uuid ?? id("msg");
298
- this.input.onNotification("item/agentMessage/delta", {
299
- sessionId: this.claudeSessionId,
300
- itemId: currentMessageId,
301
- delta: block.text,
302
- });
303
- break;
304
- case "tool_use": {
305
- currentToolId = block.id;
306
- currentToolName = block.name ?? "tool";
307
- if (block.id)
308
- toolNames.set(block.id, block.name ?? "tool");
309
- const toolName = block.name ?? "tool";
310
- this.input.onNotification("item/started", {
311
- sessionId: this.claudeSessionId,
312
- item: {
313
- id: block.id ?? id("tool"),
314
- type: toolName === "Bash" ? "commandExecution" : toolName === "Write" || toolName === "Edit" ? "fileChange" : "toolCall",
315
- toolName: block.name,
316
- tool: block.name,
317
- input: block.input,
318
- command: block.input?.command,
319
- cwd: block.input?.cwd ?? cwd,
320
- status: "running",
321
- },
322
- });
323
- break;
324
- }
325
- case "tool_result":
326
- // tool_result comes in user messages, not assistant
327
- break;
328
- }
329
- }
330
- // Mark this assistant message as complete — the full message has arrived.
331
- // Each text block was streamed via item/agentMessage/delta; now we signal
332
- // that streaming is done so the UI stops showing "正在生成".
333
- if (currentMessageId) {
334
- this.input.onNotification("item/completed", {
335
- sessionId: this.claudeSessionId,
336
- item: {
337
- id: currentMessageId,
338
- type: "agentMessage",
339
- status: "completed",
340
- },
341
- });
342
- }
343
- break;
344
- }
345
- case "user": {
346
- // User messages in stream-json contain tool results
347
- const message = event.message;
348
- if (!message)
349
- break;
350
- const content = (message.content ?? []);
351
- for (const block of content) {
352
- if (block.type === "tool_result") {
353
- const toolId = block.tool_use_id ?? currentToolId;
354
- const toolName = (toolId ? toolNames.get(toolId) : undefined) ?? currentToolName;
355
- const isError = block.is_error === true;
356
- // Claude stream-json may return content as a plain string or as
357
- // an array of content-block objects (e.g. [{type:"text", text:"..."}]).
358
- const output = extractToolResultText(block.content);
359
- this.input.onNotification("item/completed", {
360
- sessionId: this.claudeSessionId,
361
- item: {
362
- id: toolId ?? id("tool"),
363
- type: "toolCall",
364
- toolName,
365
- tool: toolName,
366
- status: isError ? "failed" : "completed",
367
- output,
368
- aggregatedOutput: output,
369
- isError,
370
- },
371
- });
372
- }
373
- }
374
- break;
375
- }
376
- case "result": {
377
- const isError = event.subtype === "error" || event.is_error === true;
378
- this.input.onNotification("item/completed", {
379
- sessionId: this.claudeSessionId ?? input.sessionId,
380
- item: {
381
- id: progressItemId,
382
- type: "thinking",
383
- text: isError ? "Claude 运行出错" : "Claude 已完成",
384
- status: isError ? "failed" : "completed",
385
- },
386
- });
387
- // Mark the last agent message as complete so isStreaming flips to false
388
- if (currentMessageId) {
389
- this.input.onNotification("item/completed", {
390
- sessionId: this.claudeSessionId,
391
- item: {
392
- id: currentMessageId,
393
- type: "agentMessage",
394
- status: "completed",
395
- },
396
- });
397
- }
398
- // Turn complete
399
- this.input.onNotification("turn/completed", {
400
- sessionId: this.claudeSessionId,
401
- stopReason: event.stop_reason ?? (isError ? "error" : "end_turn"),
402
- durationMs: event.duration_ms,
403
- totalCostUsd: event.total_cost_usd,
404
- usage: event.usage,
405
- isError,
406
- });
407
- finish(null, { sessionId: this.claudeSessionId, status: isError ? "error" : "completed" });
408
- break;
409
- }
410
- }
411
- });
412
- child.stderr.on("data", (chunk) => {
413
- const trimmed = chunk.toString().trim();
414
- if (trimmed)
415
- process.stderr.write(`[claude:stderr] ${trimmed}\n`);
416
- });
417
- child.on("error", (err) => {
418
- this.input.onNotification("item/completed", {
419
- sessionId: this.claudeSessionId ?? input.sessionId,
420
- item: {
421
- id: progressItemId,
422
- type: "thinking",
423
- text: "Claude 运行出错",
424
- status: "failed",
425
- },
426
- });
427
- finish(err, undefined);
428
- });
429
- child.on("exit", (code, signal) => {
430
- if (!settled) {
431
- this.input.onNotification("item/completed", {
432
- sessionId: this.claudeSessionId ?? input.sessionId,
433
- item: {
434
- id: progressItemId,
435
- type: "thinking",
436
- text: this.pendingCancel ? "Claude 已停止" : "Claude 意外退出",
437
- status: "failed",
438
- },
439
- });
440
- finish(new Error(`Claude exited unexpectedly (code=${code ?? "null"}, signal=${signal ?? "null"})`), undefined);
441
- }
442
- });
443
- });
444
- }
445
- cancel(input) {
446
- this.pendingCancel = true;
447
- if (this.child && !this.child.killed) {
448
- this.child.kill("SIGTERM");
449
- }
450
- this.child = undefined;
451
- }
452
- respondPermission(input) {
453
- // In bypassPermissions mode, permission requests don't occur.
454
- // If we later switch to hook-based permissions, we'd send the response via a hook.
455
- }
456
- async listSessions() {
457
- const sessions = [];
458
- const seen = new Set();
459
- const liveKeys = new Set();
460
- for (const projectDir of claudeProjectDirs(this.input.cwd)) {
461
- try {
462
- for (const entry of readdirSync(projectDir)) {
463
- if (!entry.endsWith(".jsonl"))
464
- continue;
465
- const sessionId = entry.replace(".jsonl", "");
466
- if (seen.has(sessionId))
467
- continue;
468
- seen.add(sessionId);
469
- const filePath = join(projectDir, entry);
470
- let stat;
471
- try {
472
- stat = statSync(filePath);
473
- }
474
- catch {
475
- continue; // vanished between readdir and stat
476
- }
477
- liveKeys.add(filePath);
478
- let cached = this.sessionMetaCache.get(filePath);
479
- if (!cached || cached.mtimeMs !== stat.mtimeMs || cached.size !== stat.size) {
480
- const parsed = parseClaudeJsonlSession({
481
- text: readFileSync(filePath, "utf8"),
482
- cwd: this.input.cwd,
483
- sessionId,
484
- fallbackUpdatedAt: stat.mtimeMs,
485
- });
486
- const thread = parsed.thread && typeof parsed.thread === "object"
487
- ? parsed.thread
488
- : {};
489
- const item = {
490
- id: sessionId,
491
- cwd: stringField(thread, ["cwd", "workingDirectory", "workspacePath"]) ?? this.input.cwd,
492
- title: stringField(thread, ["title", "preview"]),
493
- model: stringField(thread, ["model"]),
494
- createdAt: thread.createdAt,
495
- lastActivityAt: thread.updatedAt ?? stat.mtimeMs,
496
- lastModified: stat.mtimeMs,
497
- };
498
- cached = { mtimeMs: stat.mtimeMs, size: stat.size, entry: item };
499
- this.sessionMetaCache.set(filePath, cached);
500
- }
501
- sessions.push(cached.entry);
502
- }
503
- }
504
- catch {
505
- // directory read failed
506
- }
507
- }
508
- // Prune cache entries for transcripts that no longer exist.
509
- if (this.sessionMetaCache.size > liveKeys.size) {
510
- for (const key of this.sessionMetaCache.keys()) {
511
- if (!liveKeys.has(key))
512
- this.sessionMetaCache.delete(key);
513
- }
514
- }
515
- return { sessions };
516
- }
517
- async listModels() {
518
- let defaultModel = "default";
519
- let availableModels;
520
- try {
521
- const settingsPath = join(homedir(), ".claude", "settings.json");
522
- if (existsSync(settingsPath)) {
523
- const raw = JSON.parse(readFileSync(settingsPath, "utf8"));
524
- if (typeof raw.model === "string" && raw.model.trim().length > 0) {
525
- defaultModel = raw.model.trim();
526
- }
527
- if (Array.isArray(raw.availableModels)) {
528
- availableModels = raw.availableModels.filter((m) => typeof m === "string");
529
- }
530
- }
531
- }
532
- catch {
533
- // Fallback to defaults if settings file is unreadable.
534
- }
535
- const ids = availableModels ?? ["default", "sonnet", "opus", "opusplan", "haiku", "sonnet[1m]", "opus[1m]"];
536
- const LABELS = {
537
- default: "默认模型", sonnet: "Sonnet", opus: "Opus", opusplan: "Opus Plan",
538
- haiku: "Haiku", "sonnet[1m]": "Sonnet 1M", "opus[1m]": "Opus 1M",
539
- };
540
- return {
541
- defaultModel,
542
- models: ids.map((id) => ({ id, label: LABELS[id] ?? id })),
543
- };
544
- }
545
- stop() {
546
- if (this.child && !this.child.killed) {
547
- this.child.kill("SIGTERM");
548
- }
549
- this.child = undefined;
550
- }
551
- }
552
- //# sourceMappingURL=claude-stream-json-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-stream-json-client.js","sourceRoot":"","sources":["../../../../../src/runtime/acp/claude-stream-json-client.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import type { AgentFraming } from "./provider-resolver.js";
2
- export declare class JsonRpcStdioTransport {
3
- private readonly command;
4
- private readonly framing;
5
- private readonly onNotification;
6
- private readonly onRequest;
7
- private readonly onExit;
8
- private child;
9
- private nextId;
10
- private pending;
11
- private buffer;
12
- private closed;
13
- constructor(command: string, framing: AgentFraming, onNotification: (method: string, params: unknown) => void, onRequest: (method: string, params: unknown) => Promise<unknown> | unknown, onExit: (message: string) => void);
14
- start(cwd: string): void;
15
- request(method: string, params?: unknown, timeoutMs?: number | null): Promise<unknown>;
16
- notify(method: string, params?: unknown): void;
17
- stop(): void;
18
- private write;
19
- private read;
20
- private dispatch;
21
- private failAll;
22
- }