linkshell-cli 0.9.0 → 0.10.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.
- package/README.md +11 -6
- package/dist/cli/src/commands/gateway.d.ts +2 -0
- package/dist/cli/src/commands/gateway.js +29 -0
- package/dist/cli/src/commands/gateway.js.map +1 -0
- package/dist/cli/src/commands/host.d.ts +2 -0
- package/dist/cli/src/commands/host.js +12 -2
- package/dist/cli/src/commands/host.js.map +1 -1
- package/dist/cli/src/commands/setup.js +4 -2
- package/dist/cli/src/commands/setup.js.map +1 -1
- package/dist/cli/src/index.js +12 -334
- package/dist/cli/src/index.js.map +1 -1
- package/dist/cli/src/utils/daemon.d.ts +0 -7
- package/dist/cli/src/utils/daemon.js +1 -18
- package/dist/cli/src/utils/daemon.js.map +1 -1
- package/dist/cli/tsconfig.tsbuildinfo +1 -1
- package/dist/gateway/src/accounts.d.ts +6 -0
- package/dist/gateway/src/accounts.js +32 -0
- package/dist/gateway/src/accounts.js.map +1 -0
- package/dist/gateway/src/index.d.ts +4 -0
- package/dist/gateway/src/index.js +5 -0
- package/dist/gateway/src/index.js.map +1 -0
- package/dist/gateway/src/main.d.ts +1 -0
- package/dist/gateway/src/main.js +57 -0
- package/dist/gateway/src/main.js.map +1 -0
- package/dist/gateway/src/rate-limit.d.ts +22 -0
- package/dist/gateway/src/rate-limit.js +66 -0
- package/dist/gateway/src/rate-limit.js.map +1 -0
- package/dist/gateway/src/relay.d.ts +84 -0
- package/dist/gateway/src/relay.js +434 -0
- package/dist/gateway/src/relay.js.map +1 -0
- package/dist/gateway/src/serve.d.ts +34 -0
- package/dist/gateway/src/serve.js +102 -0
- package/dist/gateway/src/serve.js.map +1 -0
- package/dist/gateway/src/store.d.ts +35 -0
- package/dist/gateway/src/store.js +109 -0
- package/dist/gateway/src/store.js.map +1 -0
- package/dist/gateway/src/subscription.d.ts +18 -0
- package/dist/gateway/src/subscription.js +46 -0
- package/dist/gateway/src/subscription.js.map +1 -0
- package/dist/host/src/drivers/claude/transcript.d.ts +23 -23
- package/dist/host/src/fs.d.ts +3 -3
- package/dist/host/src/input.d.ts +4 -4
- package/dist/host/src/terminals.d.ts +1 -1
- package/dist/wire/src/model.d.ts +6 -6
- package/dist/wire/src/relay.d.ts +8 -8
- package/dist/wire/src/rpc.d.ts +818 -818
- package/dist/wire/src/updates.d.ts +18 -18
- package/package.json +4 -13
- package/src/commands/gateway.ts +31 -0
- package/src/commands/host.ts +13 -2
- package/src/commands/setup.ts +4 -2
- package/src/index.ts +14 -429
- package/src/utils/daemon.ts +2 -27
- package/dist/cli/src/config.d.ts +0 -14
- package/dist/cli/src/config.js +0 -23
- package/dist/cli/src/config.js.map +0 -1
- package/dist/cli/src/machine-id.d.ts +0 -6
- package/dist/cli/src/machine-id.js +0 -50
- package/dist/cli/src/machine-id.js.map +0 -1
- package/dist/cli/src/providers.d.ts +0 -13
- package/dist/cli/src/providers.js +0 -77
- package/dist/cli/src/providers.js.map +0 -1
- package/dist/cli/src/runtime/acp/acp-client.d.ts +0 -128
- package/dist/cli/src/runtime/acp/acp-client.js +0 -430
- package/dist/cli/src/runtime/acp/acp-client.js.map +0 -1
- package/dist/cli/src/runtime/acp/agent-process-discovery.d.ts +0 -48
- package/dist/cli/src/runtime/acp/agent-process-discovery.js +0 -278
- package/dist/cli/src/runtime/acp/agent-process-discovery.js.map +0 -1
- package/dist/cli/src/runtime/acp/agent-session.d.ts +0 -62
- package/dist/cli/src/runtime/acp/agent-session.js +0 -1081
- package/dist/cli/src/runtime/acp/agent-session.js.map +0 -1
- package/dist/cli/src/runtime/acp/agent-workspace.d.ts +0 -311
- package/dist/cli/src/runtime/acp/agent-workspace.js +0 -6083
- package/dist/cli/src/runtime/acp/agent-workspace.js.map +0 -1
- package/dist/cli/src/runtime/acp/claude-sdk-client.d.ts +0 -121
- package/dist/cli/src/runtime/acp/claude-sdk-client.js +0 -1147
- package/dist/cli/src/runtime/acp/claude-sdk-client.js.map +0 -1
- package/dist/cli/src/runtime/acp/claude-stream-json-client.d.ts +0 -53
- package/dist/cli/src/runtime/acp/claude-stream-json-client.js +0 -552
- package/dist/cli/src/runtime/acp/claude-stream-json-client.js.map +0 -1
- package/dist/cli/src/runtime/acp/json-rpc.d.ts +0 -22
- package/dist/cli/src/runtime/acp/json-rpc.js +0 -160
- package/dist/cli/src/runtime/acp/json-rpc.js.map +0 -1
- package/dist/cli/src/runtime/acp/provider-resolver.d.ts +0 -16
- package/dist/cli/src/runtime/acp/provider-resolver.js +0 -132
- package/dist/cli/src/runtime/acp/provider-resolver.js.map +0 -1
- package/dist/cli/src/runtime/bridge-session.d.ts +0 -97
- package/dist/cli/src/runtime/bridge-session.js +0 -1364
- package/dist/cli/src/runtime/bridge-session.js.map +0 -1
- package/dist/cli/src/runtime/hook-command.d.ts +0 -9
- package/dist/cli/src/runtime/hook-command.js +0 -80
- package/dist/cli/src/runtime/hook-command.js.map +0 -1
- package/dist/cli/src/runtime/screen-fallback.d.ts +0 -22
- package/dist/cli/src/runtime/screen-fallback.js +0 -202
- package/dist/cli/src/runtime/screen-fallback.js.map +0 -1
- package/dist/cli/src/runtime/screen-share.d.ts +0 -34
- package/dist/cli/src/runtime/screen-share.js +0 -376
- package/dist/cli/src/runtime/screen-share.js.map +0 -1
- package/dist/cli/src/runtime/scrollback.d.ts +0 -11
- package/dist/cli/src/runtime/scrollback.js +0 -33
- package/dist/cli/src/runtime/scrollback.js.map +0 -1
- package/dist/cli/src/runtime/usage-report.d.ts +0 -34
- package/dist/cli/src/runtime/usage-report.js +0 -332
- package/dist/cli/src/runtime/usage-report.js.map +0 -1
- package/dist/cli/src/utils/keep-awake.d.ts +0 -6
- package/dist/cli/src/utils/keep-awake.js +0 -48
- package/dist/cli/src/utils/keep-awake.js.map +0 -1
- package/dist/cli/src/utils/lan-ip.d.ts +0 -9
- package/dist/cli/src/utils/lan-ip.js +0 -61
- package/dist/cli/src/utils/lan-ip.js.map +0 -1
- package/dist/host/src/input-helper.d.ts +0 -1
- package/dist/host/src/input-helper.js +0 -564
- package/dist/host/src/input-helper.js.map +0 -1
- package/dist/shared-protocol/src/index.d.ts +0 -17029
- package/dist/shared-protocol/src/index.js +0 -1064
- package/dist/shared-protocol/src/index.js.map +0 -1
- package/scripts/copy-web.mjs +0 -34
- package/src/config.ts +0 -36
- package/src/machine-id.ts +0 -61
- package/src/providers.ts +0 -97
- package/src/runtime/acp/acp-client.ts +0 -521
- package/src/runtime/acp/agent-process-discovery.ts +0 -308
- package/src/runtime/acp/agent-session.ts +0 -1186
- package/src/runtime/acp/agent-workspace.ts +0 -6590
- package/src/runtime/acp/claude-sdk-client.ts +0 -1221
- package/src/runtime/acp/claude-stream-json-client.ts +0 -633
- package/src/runtime/acp/json-rpc.ts +0 -184
- package/src/runtime/acp/provider-resolver.ts +0 -154
- package/src/runtime/bridge-session.ts +0 -1549
- package/src/runtime/hook-command.ts +0 -73
- package/src/runtime/screen-fallback.ts +0 -235
- package/src/runtime/screen-share.ts +0 -426
- package/src/runtime/scrollback.ts +0 -43
- package/src/runtime/usage-report.ts +0 -342
- package/src/utils/keep-awake.ts +0 -61
- package/src/utils/lan-ip.ts +0 -61
- package/web/assets/FileBrowser-wOAfY-xj.js +0 -2
- package/web/assets/PortPreview-Cbvv7yzA.js +0 -2
- package/web/assets/TerminalPanel-CTSklkct.js +0 -1
- package/web/assets/UsageDashboard-CJ1AsNmd.js +0 -1
- package/web/assets/index-BsnDaeCt.css +0 -33
- package/web/assets/index-q85psYZ5.js +0 -36
- package/web/assets/vendor-highlight-NXWAAyIv.js +0 -5
- package/web/assets/vendor-react-M7xG3qiw.js +0 -49
- package/web/assets/vendor-xterm-D15THcI4.js +0 -9
- package/web/index.html +0 -37
- package/web/logos/claude.png +0 -0
- package/web/logos/codex.png +0 -0
- package/web/logos/copilot.png +0 -0
- package/web/logos/gemini.png +0 -0
- package/web/logos/linkshell-1024.png +0 -0
- package/web/logos/linkshell-splash.png +0 -0
- 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":"AAAA,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAkCjE,0EAA0E;AAC1E,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,CACL,GAAG;QACH,OAAO,CAAC,GAAG,CAAC;aACT,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;aAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CACvB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,OAAO,IAAI,CAAC,kBAAkB,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,iBAAiB,CAAC,YAAoB;IAC7C,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACnC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,IAAc;IACjD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE;YAAE,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;IACjF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,EAAE,CAAC,MAAc;IACxB,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC1F,CAAC;AAED,6EAA6E;AAC7E,2EAA2E;AAC3E,SAAS,qBAAqB,CAAC,OAAgB;IAC7C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAC1C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACxF,OAAO,IAAI,CAAC,IAAI,CAAC;YACnB,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IACD,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAI,OAAO,IAAI,OAAQ,OAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3H,OAAQ,OAA4B,CAAC,IAAI,CAAC;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,gBAAgB,GAAG,WAAW;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC/D,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QACpB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,sBAAsB;IAWd;IAVX,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,KAAK,CAA6C;IAClD,eAAe,CAAqB;IACpC,aAAa,GAAG,KAAK,CAAC;IAC9B,wEAAwE;IACxE,uEAAuE;IACvE,gFAAgF;IACxE,gBAAgB,GAAG,IAAI,GAAG,EAA6E,CAAC;IAEhH,YACmB,KAQhB;QARgB,UAAK,GAAL,KAAK,CAQrB;IACA,CAAC;IAEJ,KAAK,CAAC,UAAU;QACd,0EAA0E;QAC1E,iEAAiE;QACjE,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACxD,QAAQ,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAA4C;QAC3D,2DAA2D;QAC3D,yEAAyE;QACzE,8CAA8C;QAC9C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAA+D;QAC/E,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC;QACvC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KASZ;QACC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAE3B,gEAAgE;QAChE,yEAAyE;QACzE,uEAAuE;QACvE,4EAA4E;QAC5E,gEAAgE;QAChE,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,EAAE,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,KAAK,CACb,iFAAiF;gBACjF,2EAA2E;gBAC3E,mFAAmF,CACpF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAC;YACzC,sBAAsB,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8EAA8E;gBAC9E,uFAAuF;gBACvF,8EAA8E;gBAC9E,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,MAAM,IAAI,GAAa;YACrB,SAAS;YACT,iBAAiB,EAAE,aAAa;YAChC,gBAAgB,EAAE,aAAa;YAC/B,WAAW;YACX,mBAAmB,EAAE,mBAAmB;SACzC,CAAC;QAEF,yFAAyF;QACzF,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC;QACD,4EAA4E;QAC5E,yEAAyE;QACzE,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAE/B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,yBAAyB;QACzB,MAAM,aAAa,GAAI,KAAK,CAAC,OAAoC,CAAC,GAAG,CACnE,CAAC,KAAK,EAAE,EAAE;YACR,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACrG,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QAClD,CAAC,CACF,CAAC;QAEF,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,aAAa;aACvB;SACF,CAAC;QAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACxC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;gBAClC,GAAG;gBACH,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,MAAM,MAAM,GAAG,CAAC,GAAiB,EAAE,MAAe,EAAE,EAAE;gBACpD,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,6DAA6D;gBAC7D,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;gBACzB,CAAC;gBACD,IAAI,GAAG,EAAE,CAAC;oBACR,uFAAuF;oBACvF,+EAA+E;oBAC/E,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC,CAAC;YAEF,kBAAkB;YAClB,IAAI,CAAC;gBACH,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;gBACtD,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACvE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,8DAA8D;YAC9D,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YACzE,IAAI,aAAiC,CAAC;YACtC,IAAI,eAAmC,CAAC;YACxC,IAAI,gBAAoC,CAAC;YACzC,MAAM,cAAc,GAAG,mBAAmB,KAAK,CAAC,eAAe,EAAE,CAAC;YAClE,0EAA0E;YAC1E,yCAAyC;YACzC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;YAE5C,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE;gBACxC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe;gBAClD,IAAI,EAAE;oBACJ,EAAE,EAAE,cAAc;oBAClB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,eAAe;oBACrB,MAAM,EAAE,SAAS;iBAClB;aACF,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC7B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACtB,OAAO;gBACT,CAAC;gBAED,IAAI,KAAwB,CAAC;gBAC7B,IAAI,CAAC;oBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,yBAAyB;gBACnC,CAAC;gBAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;wBACd,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;4BAC7B,qBAAqB;4BACrB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gCACrB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC;4BAC1C,CAAC;4BACD,+EAA+E;4BAC/E,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE;gCAC1C,SAAS,EAAE,KAAK,CAAC,UAAU;gCAC3B,QAAQ,EAAE,KAAK,CAAC,UAAU;6BAC3B,CAAC,CAAC;4BACH,2CAA2C;4BAC3C,MAAM,UAAU,GAA4B;gCAC1C,SAAS,EAAE,KAAK,CAAC,UAAU;gCAC3B,QAAQ,EAAE,KAAK,CAAC,UAAU;gCAC1B,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,GAAG;gCACrB,KAAK,EAAE,KAAK,CAAC,KAAK;6BACnB,CAAC;4BACF,IAAI,KAAK,CAAC,KAAK;gCAAE,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;4BAChD,IAAI,KAAK,CAAC,cAAc;gCAAE,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC;4BAC1E,IAAI,KAAK,CAAC,WAAW;gCAAE,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC;4BACjE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;wBACvD,CAAC;wBACD,gEAAgE;wBAChE,MAAM;oBACR,CAAC;oBAED,KAAK,WAAW,CAAC,CAAC,CAAC;wBACjB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;wBAC9B,IAAI,CAAC,OAAO;4BAAE,MAAM;wBACpB,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAyB,CAAC;wBAChE,mEAAmE;wBACnE,gBAAgB,GAAG,SAAS,CAAC;wBAE7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;4BAC5B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gCACnB,KAAK,UAAU;oCACb,kFAAkF;oCAClF,oFAAoF;oCACpF,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE;wCAC1C,SAAS,EAAE,IAAI,CAAC,eAAe;wCAC/B,IAAI,EAAE;4CACJ,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,UAAU,CAAC;4CAChC,IAAI,EAAE,UAAU;4CAChB,IAAI,EAAE,KAAK,CAAC,QAAQ;4CACpB,MAAM,EAAE,WAAW;yCACpB;qCACF,CAAC,CAAC;oCACH,MAAM;gCAER,KAAK,MAAM;oCACT,gBAAgB,GAAG,CAAC,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;oCACxG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,yBAAyB,EAAE;wCACnD,SAAS,EAAE,IAAI,CAAC,eAAe;wCAC/B,MAAM,EAAE,gBAAgB;wCACxB,KAAK,EAAE,KAAK,CAAC,IAAI;qCAClB,CAAC,CAAC;oCACH,MAAM;gCAER,KAAK,UAAU,CAAC,CAAC,CAAC;oCAChB,aAAa,GAAG,KAAK,CAAC,EAAE,CAAC;oCACzB,eAAe,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC;oCACvC,IAAI,KAAK,CAAC,EAAE;wCAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;oCAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC;oCACtC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE;wCACxC,SAAS,EAAE,IAAI,CAAC,eAAe;wCAC/B,IAAI,EAAE;4CACJ,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC;4CAC1B,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU;4CACxH,QAAQ,EAAE,KAAK,CAAC,IAAI;4CACpB,IAAI,EAAE,KAAK,CAAC,IAAI;4CAChB,KAAK,EAAE,KAAK,CAAC,KAAK;4CAClB,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,OAA6B;4CACnD,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,GAAyB,IAAI,GAAG;4CAClD,MAAM,EAAE,SAAS;yCAClB;qCACF,CAAC,CAAC;oCACH,MAAM;gCACR,CAAC;gCAED,KAAK,aAAa;oCAChB,oDAAoD;oCACpD,MAAM;4BACV,CAAC;wBACH,CAAC;wBAED,0EAA0E;wBAC1E,0EAA0E;wBAC1E,yDAAyD;wBACzD,IAAI,gBAAgB,EAAE,CAAC;4BACrB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE;gCAC1C,SAAS,EAAE,IAAI,CAAC,eAAe;gCAC/B,IAAI,EAAE;oCACJ,EAAE,EAAE,gBAAgB;oCACpB,IAAI,EAAE,cAAc;oCACpB,MAAM,EAAE,WAAW;iCACpB;6BACF,CAAC,CAAC;wBACL,CAAC;wBACD,MAAM;oBACR,CAAC;oBAED,KAAK,MAAM,CAAC,CAAC,CAAC;wBACZ,oDAAoD;wBACpD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;wBAC9B,IAAI,CAAC,OAAO;4BAAE,MAAM;wBACpB,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAyB,CAAC;wBAEhE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;4BAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gCACjC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,IAAI,aAAa,CAAC;gCAClD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC;gCACjF,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;gCACxC,gEAAgE;gCAChE,wEAAwE;gCACxE,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gCACpD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE;oCAC1C,SAAS,EAAE,IAAI,CAAC,eAAe;oCAC/B,IAAI,EAAE;wCACJ,EAAE,EAAE,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC;wCACxB,IAAI,EAAE,UAAU;wCAChB,QAAQ;wCACR,IAAI,EAAE,QAAQ;wCACd,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;wCACxC,MAAM;wCACN,gBAAgB,EAAE,MAAM;wCACxB,OAAO;qCACR;iCACF,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;wBACD,MAAM;oBACR,CAAC;oBAED,KAAK,QAAQ,CAAC,CAAC,CAAC;wBACd,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;wBACrE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE;4BAC1C,SAAS,EAAE,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,SAAS;4BAClD,IAAI,EAAE;gCACJ,EAAE,EAAE,cAAc;gCAClB,IAAI,EAAE,UAAU;gCAChB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY;gCAC5C,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;6BACzC;yBACF,CAAC,CAAC;wBACH,wEAAwE;wBACxE,IAAI,gBAAgB,EAAE,CAAC;4BACrB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE;gCAC1C,SAAS,EAAE,IAAI,CAAC,eAAe;gCAC/B,IAAI,EAAE;oCACJ,EAAE,EAAE,gBAAgB;oCACpB,IAAI,EAAE,cAAc;oCACpB,MAAM,EAAE,WAAW;iCACpB;6BACF,CAAC,CAAC;wBACL,CAAC;wBACD,gBAAgB;wBAChB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE;4BAC1C,SAAS,EAAE,IAAI,CAAC,eAAe;4BAC/B,UAAU,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;4BACjE,UAAU,EAAE,KAAK,CAAC,WAAW;4BAC7B,YAAY,EAAE,KAAK,CAAC,cAAc;4BAClC,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,OAAO;yBACR,CAAC,CAAC;wBACH,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;wBAC3F,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACxC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;gBACxC,IAAI,OAAO;oBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,OAAO,IAAI,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE;oBAC1C,SAAS,EAAE,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,SAAS;oBAClD,IAAI,EAAE;wBACJ,EAAE,EAAE,cAAc;wBAClB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,aAAa;wBACnB,MAAM,EAAE,QAAQ;qBACjB;iBACF,CAAC,CAAC;gBACH,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBAChC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE;wBAC1C,SAAS,EAAE,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,SAAS;wBAClD,IAAI,EAAE;4BACJ,EAAE,EAAE,cAAc;4BAClB,IAAI,EAAE,UAAU;4BAChB,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa;4BACvD,MAAM,EAAE,QAAQ;yBACjB;qBACF,CAAC,CAAC;oBACH,MAAM,CACJ,IAAI,KAAK,CAAC,oCAAoC,IAAI,IAAI,MAAM,YAAY,MAAM,IAAI,MAAM,GAAG,CAAC,EAC5F,SAAS,CACV,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAA8C;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,iBAAiB,CAAC,KAA8F;QAC9G,8DAA8D;QAC9D,mFAAmF;IACrF,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,QAAQ,GAAmC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,UAAU,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC;gBACH,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBACxC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;wBAAE,SAAS;oBAClC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;oBACzC,IAAI,IAAI,CAAC;oBACT,IAAI,CAAC;wBACH,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAC5B,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS,CAAC,oCAAoC;oBAChD,CAAC;oBACD,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACvB,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACjD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;wBAC5E,MAAM,MAAM,GAAG,uBAAuB,CAAC;4BACrC,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;4BACpC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;4BACnB,SAAS;4BACT,iBAAiB,EAAE,IAAI,CAAC,OAAO;yBAChC,CAAC,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;4BAC/D,CAAC,CAAC,MAAM,CAAC,MAAiC;4BAC1C,CAAC,CAAC,EAAE,CAAC;wBACP,MAAM,IAAI,GAA4B;4BACpC,EAAE,EAAE,SAAS;4BACb,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG;4BACxF,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;4BAChD,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;4BACrC,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,cAAc,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO;4BAChD,YAAY,EAAE,IAAI,CAAC,OAAO;yBAC3B,CAAC;wBACF,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;wBACjE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAC9C,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;QACD,4DAA4D;QAC5D,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,YAAY,GAAW,SAAS,CAAC;QACrC,IAAI,eAAqC,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;YACjE,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAmD,CAAC;gBAC7G,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjE,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAClC,CAAC;gBACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;oBACvC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;QACD,MAAM,GAAG,GAAG,eAAe,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;QAC5G,MAAM,MAAM,GAA2B;YACrC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW;YACtE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS;SACjE,CAAC;QACF,OAAO;YACL,YAAY;YACZ,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC"}
|
|
@@ -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
|
-
}
|