linkshell-cli 0.5.1 → 0.5.2
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/dist/cli/src/index.js +1 -1
- package/dist/cli/src/index.js.map +1 -1
- package/dist/cli/src/runtime/acp/acp-client.d.ts +16 -0
- package/dist/cli/src/runtime/acp/acp-client.js +40 -2
- package/dist/cli/src/runtime/acp/acp-client.js.map +1 -1
- package/dist/cli/src/runtime/acp/agent-workspace-git.d.ts +63 -0
- package/dist/cli/src/runtime/acp/agent-workspace-git.js +297 -0
- package/dist/cli/src/runtime/acp/agent-workspace-git.js.map +1 -0
- package/dist/cli/src/runtime/acp/agent-workspace.d.ts +6 -0
- package/dist/cli/src/runtime/acp/agent-workspace.js +690 -81
- package/dist/cli/src/runtime/acp/agent-workspace.js.map +1 -1
- package/dist/cli/src/runtime/acp/claude-sdk-client.d.ts +17 -1
- package/dist/cli/src/runtime/acp/claude-sdk-client.js +331 -19
- package/dist/cli/src/runtime/acp/claude-sdk-client.js.map +1 -1
- package/dist/cli/src/runtime/acp/claude-stream-json-client.js +69 -14
- package/dist/cli/src/runtime/acp/claude-stream-json-client.js.map +1 -1
- package/dist/cli/src/runtime/acp/json-rpc.d.ts +1 -0
- package/dist/cli/src/runtime/acp/json-rpc.js +6 -0
- package/dist/cli/src/runtime/acp/json-rpc.js.map +1 -1
- package/dist/cli/src/runtime/acp-relay.d.ts +23 -0
- package/dist/cli/src/runtime/acp-relay.js +73 -0
- package/dist/cli/src/runtime/acp-relay.js.map +1 -0
- package/dist/cli/src/runtime/bridge-session.d.ts +5 -0
- package/dist/cli/src/runtime/bridge-session.js +104 -57
- package/dist/cli/src/runtime/bridge-session.js.map +1 -1
- package/dist/cli/tsconfig.tsbuildinfo +1 -1
- package/dist/shared-protocol/src/index.d.ts +2505 -2479
- package/dist/shared-protocol/src/index.js +46 -0
- package/dist/shared-protocol/src/index.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +1 -1
- package/src/runtime/acp/acp-client.ts +53 -2
- package/src/runtime/acp/agent-workspace.ts +752 -76
- package/src/runtime/acp/claude-sdk-client.ts +352 -31
- package/src/runtime/acp/claude-stream-json-client.ts +66 -16
- package/src/runtime/acp/json-rpc.ts +5 -0
- package/src/runtime/bridge-session.ts +114 -61
- package/dist/cli/src/runtime/acp/claude-sessions.d.ts +0 -57
- package/dist/cli/src/runtime/acp/claude-sessions.js +0 -506
- package/dist/cli/src/runtime/acp/claude-sessions.js.map +0 -1
- package/dist/cli/src/runtime/acp/codex-rpc-bridge.d.ts +0 -34
- package/dist/cli/src/runtime/acp/codex-rpc-bridge.js +0 -204
- package/dist/cli/src/runtime/acp/codex-rpc-bridge.js.map +0 -1
- package/dist/cli/src/runtime/acp/codex-sessions.d.ts +0 -60
- package/dist/cli/src/runtime/acp/codex-sessions.js +0 -731
- package/dist/cli/src/runtime/acp/codex-sessions.js.map +0 -1
|
@@ -1,506 +0,0 @@
|
|
|
1
|
-
import { closeSync, existsSync, openSync, readFileSync, readdirSync, readSync, statSync } from "node:fs";
|
|
2
|
-
import { homedir } from "node:os";
|
|
3
|
-
import { basename, join, resolve } from "node:path";
|
|
4
|
-
const SAMPLE_BYTES = 64 * 1024;
|
|
5
|
-
const HISTORY_BYTES = 2 * 1024 * 1024;
|
|
6
|
-
const MAX_SESSIONS = 200;
|
|
7
|
-
const MAX_HISTORY_ITEMS = 200;
|
|
8
|
-
function asRecord(value) {
|
|
9
|
-
return value && typeof value === "object" && !Array.isArray(value)
|
|
10
|
-
? value
|
|
11
|
-
: undefined;
|
|
12
|
-
}
|
|
13
|
-
function parseTimestamp(value) {
|
|
14
|
-
if (typeof value === "number" && Number.isFinite(value)) {
|
|
15
|
-
return value > 10_000_000_000 ? value : value * 1000;
|
|
16
|
-
}
|
|
17
|
-
if (typeof value === "string" && value.trim()) {
|
|
18
|
-
const parsed = Date.parse(value);
|
|
19
|
-
return Number.isNaN(parsed) ? undefined : parsed;
|
|
20
|
-
}
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
function normalizeTitle(value) {
|
|
24
|
-
const compact = value?.replace(/\s+/g, " ").trim();
|
|
25
|
-
if (!compact)
|
|
26
|
-
return undefined;
|
|
27
|
-
return compact.length > 80 ? `${compact.slice(0, 77)}...` : compact;
|
|
28
|
-
}
|
|
29
|
-
function findStringDeep(value, keys, depth = 0) {
|
|
30
|
-
if (depth > 4)
|
|
31
|
-
return undefined;
|
|
32
|
-
const record = asRecord(value);
|
|
33
|
-
if (!record)
|
|
34
|
-
return undefined;
|
|
35
|
-
for (const key of keys) {
|
|
36
|
-
const candidate = record[key];
|
|
37
|
-
if (typeof candidate === "string" && candidate.trim())
|
|
38
|
-
return candidate;
|
|
39
|
-
}
|
|
40
|
-
for (const candidate of Object.values(record)) {
|
|
41
|
-
if (candidate && typeof candidate === "object") {
|
|
42
|
-
const found = findStringDeep(candidate, keys, depth + 1);
|
|
43
|
-
if (found)
|
|
44
|
-
return found;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return undefined;
|
|
48
|
-
}
|
|
49
|
-
function extractMessageText(value) {
|
|
50
|
-
if (typeof value === "string")
|
|
51
|
-
return normalizeTitle(value);
|
|
52
|
-
if (Array.isArray(value)) {
|
|
53
|
-
const text = value
|
|
54
|
-
.map((part) => {
|
|
55
|
-
if (typeof part === "string")
|
|
56
|
-
return part;
|
|
57
|
-
const record = asRecord(part);
|
|
58
|
-
if (record?.type === "tool_use" || record?.type === "tool_result")
|
|
59
|
-
return "";
|
|
60
|
-
return typeof record?.text === "string" ? record.text : "";
|
|
61
|
-
})
|
|
62
|
-
.join(" ");
|
|
63
|
-
return normalizeTitle(text);
|
|
64
|
-
}
|
|
65
|
-
const record = asRecord(value);
|
|
66
|
-
if (!record)
|
|
67
|
-
return undefined;
|
|
68
|
-
return extractMessageText(record.content ?? record.text);
|
|
69
|
-
}
|
|
70
|
-
function extractHistoryText(value) {
|
|
71
|
-
if (typeof value === "string") {
|
|
72
|
-
const text = value.replace(/\r\n/g, "\n").trim();
|
|
73
|
-
return text || undefined;
|
|
74
|
-
}
|
|
75
|
-
if (Array.isArray(value)) {
|
|
76
|
-
const text = value
|
|
77
|
-
.map((part) => {
|
|
78
|
-
if (typeof part === "string")
|
|
79
|
-
return part;
|
|
80
|
-
const record = asRecord(part);
|
|
81
|
-
return typeof record?.text === "string"
|
|
82
|
-
? record.text
|
|
83
|
-
: typeof record?.content === "string"
|
|
84
|
-
? record.content
|
|
85
|
-
: "";
|
|
86
|
-
})
|
|
87
|
-
.filter(Boolean)
|
|
88
|
-
.join("\n")
|
|
89
|
-
.trim();
|
|
90
|
-
return text || undefined;
|
|
91
|
-
}
|
|
92
|
-
const record = asRecord(value);
|
|
93
|
-
if (!record)
|
|
94
|
-
return undefined;
|
|
95
|
-
return extractHistoryText(record.content ?? record.text ?? record.message);
|
|
96
|
-
}
|
|
97
|
-
function extractVisibleClaudeText(value) {
|
|
98
|
-
if (!Array.isArray(value))
|
|
99
|
-
return extractHistoryText(value);
|
|
100
|
-
const text = value
|
|
101
|
-
.map((part) => {
|
|
102
|
-
if (typeof part === "string")
|
|
103
|
-
return part;
|
|
104
|
-
const record = asRecord(part);
|
|
105
|
-
if (!record || record.type === "tool_use" || record.type === "tool_result")
|
|
106
|
-
return "";
|
|
107
|
-
return typeof record.text === "string"
|
|
108
|
-
? record.text
|
|
109
|
-
: typeof record.content === "string"
|
|
110
|
-
? record.content
|
|
111
|
-
: "";
|
|
112
|
-
})
|
|
113
|
-
.filter(Boolean)
|
|
114
|
-
.join("\n")
|
|
115
|
-
.trim();
|
|
116
|
-
return text || undefined;
|
|
117
|
-
}
|
|
118
|
-
function stringifyHistoryValue(value) {
|
|
119
|
-
if (value === undefined || value === null || value === "")
|
|
120
|
-
return undefined;
|
|
121
|
-
if (typeof value === "string")
|
|
122
|
-
return value;
|
|
123
|
-
try {
|
|
124
|
-
return JSON.stringify(value, null, 2);
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
return String(value);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
function guessCwdFromProjectDir(projectDirName, fallbackCwd) {
|
|
131
|
-
const trimmed = projectDirName.replace(/^-+/, "");
|
|
132
|
-
if (!trimmed)
|
|
133
|
-
return resolve(fallbackCwd);
|
|
134
|
-
return `/${trimmed.split("-").filter(Boolean).join("/")}`;
|
|
135
|
-
}
|
|
136
|
-
function readSample(filePath, size) {
|
|
137
|
-
let fd;
|
|
138
|
-
try {
|
|
139
|
-
fd = openSync(filePath, "r");
|
|
140
|
-
if (size <= SAMPLE_BYTES * 2) {
|
|
141
|
-
const buffer = Buffer.alloc(size);
|
|
142
|
-
const bytesRead = readSync(fd, buffer, 0, size, 0);
|
|
143
|
-
return buffer.subarray(0, bytesRead).toString("utf8");
|
|
144
|
-
}
|
|
145
|
-
const head = Buffer.alloc(SAMPLE_BYTES);
|
|
146
|
-
const tail = Buffer.alloc(SAMPLE_BYTES);
|
|
147
|
-
const headBytes = readSync(fd, head, 0, SAMPLE_BYTES, 0);
|
|
148
|
-
const tailBytes = readSync(fd, tail, 0, SAMPLE_BYTES, Math.max(0, size - SAMPLE_BYTES));
|
|
149
|
-
return `${head.subarray(0, headBytes).toString("utf8")}\n${tail.subarray(0, tailBytes).toString("utf8")}`;
|
|
150
|
-
}
|
|
151
|
-
catch {
|
|
152
|
-
return "";
|
|
153
|
-
}
|
|
154
|
-
finally {
|
|
155
|
-
if (typeof fd === "number") {
|
|
156
|
-
try {
|
|
157
|
-
closeSync(fd);
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
// Ignore close failures while listing best-effort local history.
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
function readHistorySample(filePath, size) {
|
|
166
|
-
try {
|
|
167
|
-
if (size <= HISTORY_BYTES)
|
|
168
|
-
return readFileSync(filePath, "utf8");
|
|
169
|
-
}
|
|
170
|
-
catch {
|
|
171
|
-
return "";
|
|
172
|
-
}
|
|
173
|
-
let fd;
|
|
174
|
-
try {
|
|
175
|
-
fd = openSync(filePath, "r");
|
|
176
|
-
const buffer = Buffer.alloc(HISTORY_BYTES);
|
|
177
|
-
const bytesRead = readSync(fd, buffer, 0, HISTORY_BYTES, Math.max(0, size - HISTORY_BYTES));
|
|
178
|
-
return buffer.subarray(0, bytesRead).toString("utf8");
|
|
179
|
-
}
|
|
180
|
-
catch {
|
|
181
|
-
return "";
|
|
182
|
-
}
|
|
183
|
-
finally {
|
|
184
|
-
if (typeof fd === "number") {
|
|
185
|
-
try {
|
|
186
|
-
closeSync(fd);
|
|
187
|
-
}
|
|
188
|
-
catch {
|
|
189
|
-
// Ignore close failures while reading best-effort local history.
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
function readClaudeSessionMetadata(filePath, fallbackCwd) {
|
|
195
|
-
let statMtime;
|
|
196
|
-
let statSize = 0;
|
|
197
|
-
try {
|
|
198
|
-
const stat = statSync(filePath);
|
|
199
|
-
statMtime = stat.mtimeMs;
|
|
200
|
-
statSize = stat.size;
|
|
201
|
-
}
|
|
202
|
-
catch {
|
|
203
|
-
// Best effort only.
|
|
204
|
-
}
|
|
205
|
-
const sample = readSample(filePath, statSize);
|
|
206
|
-
let cwd;
|
|
207
|
-
let title;
|
|
208
|
-
let createdAt;
|
|
209
|
-
let lastActivityAt;
|
|
210
|
-
for (const line of sample.split(/\r?\n/)) {
|
|
211
|
-
const trimmed = line.trim();
|
|
212
|
-
if (!trimmed.startsWith("{"))
|
|
213
|
-
continue;
|
|
214
|
-
try {
|
|
215
|
-
const entry = JSON.parse(trimmed);
|
|
216
|
-
const record = asRecord(entry);
|
|
217
|
-
if (!record)
|
|
218
|
-
continue;
|
|
219
|
-
cwd ??= findStringDeep(record, ["cwd", "workingDirectory", "workspacePath"]);
|
|
220
|
-
const timestamp = parseTimestamp(record.timestamp ?? record.createdAt ?? record.created_at);
|
|
221
|
-
createdAt ??= timestamp;
|
|
222
|
-
if (timestamp)
|
|
223
|
-
lastActivityAt = timestamp;
|
|
224
|
-
if (!title && record.type === "user") {
|
|
225
|
-
title = extractMessageText(asRecord(record.message)?.content ?? record.content);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
// The sample may start in the middle of a JSONL line; skip partial lines.
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
return {
|
|
233
|
-
cwd: cwd ?? resolve(fallbackCwd),
|
|
234
|
-
title,
|
|
235
|
-
createdAt,
|
|
236
|
-
lastModified: lastActivityAt ?? statMtime,
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
export function listClaudeStoredSessions(inputCwd) {
|
|
240
|
-
const root = join(homedir(), ".claude", "projects");
|
|
241
|
-
if (!existsSync(root))
|
|
242
|
-
return { sessions: [] };
|
|
243
|
-
const sessions = [];
|
|
244
|
-
try {
|
|
245
|
-
for (const projectEntry of readdirSync(root, { withFileTypes: true })) {
|
|
246
|
-
if (!projectEntry.isDirectory())
|
|
247
|
-
continue;
|
|
248
|
-
const projectDir = join(root, projectEntry.name);
|
|
249
|
-
const fallbackCwd = guessCwdFromProjectDir(projectEntry.name, inputCwd);
|
|
250
|
-
for (const sessionEntry of readdirSync(projectDir, { withFileTypes: true })) {
|
|
251
|
-
if (!sessionEntry.isFile() || !sessionEntry.name.endsWith(".jsonl"))
|
|
252
|
-
continue;
|
|
253
|
-
const filePath = join(projectDir, sessionEntry.name);
|
|
254
|
-
try {
|
|
255
|
-
const stat = statSync(filePath);
|
|
256
|
-
const metadata = readClaudeSessionMetadata(filePath, fallbackCwd);
|
|
257
|
-
sessions.push({
|
|
258
|
-
id: basename(sessionEntry.name, ".jsonl"),
|
|
259
|
-
cwd: metadata.cwd,
|
|
260
|
-
title: metadata.title,
|
|
261
|
-
createdAt: metadata.createdAt,
|
|
262
|
-
lastModified: metadata.lastModified ?? stat.mtimeMs,
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
catch {
|
|
266
|
-
// Skip individual history files that disappear or are unreadable during the scan.
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
catch {
|
|
272
|
-
// Ignore unreadable Claude storage; the caller treats an empty list as no local history.
|
|
273
|
-
}
|
|
274
|
-
sessions.sort((a, b) => b.lastModified - a.lastModified);
|
|
275
|
-
return { sessions: sessions.slice(0, MAX_SESSIONS) };
|
|
276
|
-
}
|
|
277
|
-
function findClaudeSessionFile(sessionId) {
|
|
278
|
-
const root = join(homedir(), ".claude", "projects");
|
|
279
|
-
if (!existsSync(root))
|
|
280
|
-
return undefined;
|
|
281
|
-
try {
|
|
282
|
-
for (const projectEntry of readdirSync(root, { withFileTypes: true })) {
|
|
283
|
-
if (!projectEntry.isDirectory())
|
|
284
|
-
continue;
|
|
285
|
-
const projectDir = join(root, projectEntry.name);
|
|
286
|
-
for (const sessionEntry of readdirSync(projectDir, { withFileTypes: true })) {
|
|
287
|
-
if (!sessionEntry.isFile() || !sessionEntry.name.endsWith(".jsonl"))
|
|
288
|
-
continue;
|
|
289
|
-
if (basename(sessionEntry.name, ".jsonl") === sessionId) {
|
|
290
|
-
return join(projectDir, sessionEntry.name);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
catch {
|
|
296
|
-
return undefined;
|
|
297
|
-
}
|
|
298
|
-
return undefined;
|
|
299
|
-
}
|
|
300
|
-
function historyMessage(conversationId, index, role, text, createdAt, source) {
|
|
301
|
-
return {
|
|
302
|
-
id: `history:${source}:${index}`,
|
|
303
|
-
conversationId,
|
|
304
|
-
type: "message",
|
|
305
|
-
role,
|
|
306
|
-
content: [{ type: "text", text }],
|
|
307
|
-
text,
|
|
308
|
-
createdAt,
|
|
309
|
-
metadata: { source: "device-history", provider: "claude" },
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
function claudeToolName(name) {
|
|
313
|
-
if (!name)
|
|
314
|
-
return "工具";
|
|
315
|
-
if (name === "Bash")
|
|
316
|
-
return "命令";
|
|
317
|
-
if (isClaudeFileTool(name))
|
|
318
|
-
return "文件修改";
|
|
319
|
-
return name;
|
|
320
|
-
}
|
|
321
|
-
function isClaudeFileTool(name) {
|
|
322
|
-
return name === "Edit" || name === "MultiEdit" || name === "Write" || name === "NotebookEdit";
|
|
323
|
-
}
|
|
324
|
-
function claudeToolKind(name) {
|
|
325
|
-
if (name === "Bash")
|
|
326
|
-
return "command_execution";
|
|
327
|
-
if (isClaudeFileTool(name))
|
|
328
|
-
return "file_change";
|
|
329
|
-
return "tool_activity";
|
|
330
|
-
}
|
|
331
|
-
function claudeFileEntry(name, input) {
|
|
332
|
-
if (!isClaudeFileTool(name) || !input)
|
|
333
|
-
return undefined;
|
|
334
|
-
const rawPath = input.file_path ?? input.path ?? input.notebook_path;
|
|
335
|
-
if (typeof rawPath !== "string" || !rawPath.trim())
|
|
336
|
-
return undefined;
|
|
337
|
-
const path = rawPath.trim();
|
|
338
|
-
const kind = name === "Write" ? "create" : "update";
|
|
339
|
-
const edits = Array.isArray(input.edits) ? input.edits.map((entry) => asRecord(entry)).filter(Boolean) : [];
|
|
340
|
-
const added = typeof input.new_string === "string"
|
|
341
|
-
? countNonEmptyLines(input.new_string)
|
|
342
|
-
: typeof input.content === "string"
|
|
343
|
-
? countNonEmptyLines(input.content)
|
|
344
|
-
: edits.length > 0
|
|
345
|
-
? edits.reduce((sum, edit) => sum + countNonEmptyLines(typeof edit?.new_string === "string" ? edit.new_string : ""), 0)
|
|
346
|
-
: undefined;
|
|
347
|
-
const removed = typeof input.old_string === "string"
|
|
348
|
-
? countNonEmptyLines(input.old_string)
|
|
349
|
-
: edits.length > 0
|
|
350
|
-
? edits.reduce((sum, edit) => sum + countNonEmptyLines(typeof edit?.old_string === "string" ? edit.old_string : ""), 0)
|
|
351
|
-
: undefined;
|
|
352
|
-
const entry = { path, kind };
|
|
353
|
-
if (added && added > 0)
|
|
354
|
-
entry.added = added;
|
|
355
|
-
if (removed && removed > 0)
|
|
356
|
-
entry.removed = removed;
|
|
357
|
-
return {
|
|
358
|
-
entries: [entry],
|
|
359
|
-
summary: [kind, path].filter(Boolean).join(" "),
|
|
360
|
-
status: "running",
|
|
361
|
-
};
|
|
362
|
-
}
|
|
363
|
-
function countNonEmptyLines(value) {
|
|
364
|
-
return value.split(/\r?\n/).filter((line) => line.length > 0).length;
|
|
365
|
-
}
|
|
366
|
-
function claudeCommandExecution(input) {
|
|
367
|
-
if (!input)
|
|
368
|
-
return undefined;
|
|
369
|
-
const command = typeof input.command === "string" ? input.command : undefined;
|
|
370
|
-
const cwd = typeof input.cwd === "string" ? input.cwd : undefined;
|
|
371
|
-
if (!command && !cwd)
|
|
372
|
-
return undefined;
|
|
373
|
-
return { command, cwd, status: "running" };
|
|
374
|
-
}
|
|
375
|
-
function createClaudeToolItem(conversationId, toolUseId, name, input, createdAt) {
|
|
376
|
-
const kind = claudeToolKind(name);
|
|
377
|
-
const inputText = stringifyHistoryValue(input);
|
|
378
|
-
const fileChange = claudeFileEntry(name, input);
|
|
379
|
-
return {
|
|
380
|
-
id: `history-tool:${toolUseId}`,
|
|
381
|
-
conversationId,
|
|
382
|
-
type: "tool_call",
|
|
383
|
-
kind,
|
|
384
|
-
itemId: toolUseId,
|
|
385
|
-
toolCall: {
|
|
386
|
-
id: toolUseId,
|
|
387
|
-
name: claudeToolName(name),
|
|
388
|
-
input: inputText,
|
|
389
|
-
createdAt,
|
|
390
|
-
status: "running",
|
|
391
|
-
},
|
|
392
|
-
commandExecution: name === "Bash" ? claudeCommandExecution(input) : undefined,
|
|
393
|
-
fileChange,
|
|
394
|
-
text: fileChange ? `已编辑 ${fileChange.entries.length} 个文件` : undefined,
|
|
395
|
-
createdAt,
|
|
396
|
-
updatedAt: createdAt,
|
|
397
|
-
metadata: { source: "device-history", provider: "claude", toolName: name },
|
|
398
|
-
};
|
|
399
|
-
}
|
|
400
|
-
function completeClaudeToolItem(itemsById, conversationId, toolUseId, output, failed, createdAt) {
|
|
401
|
-
const id = `history-tool:${toolUseId}`;
|
|
402
|
-
const existing = itemsById.get(id);
|
|
403
|
-
const status = failed ? "failed" : "completed";
|
|
404
|
-
itemsById.set(id, {
|
|
405
|
-
id,
|
|
406
|
-
conversationId,
|
|
407
|
-
type: "tool_call",
|
|
408
|
-
kind: existing?.kind ?? "tool_activity",
|
|
409
|
-
itemId: toolUseId,
|
|
410
|
-
toolCall: {
|
|
411
|
-
id: toolUseId,
|
|
412
|
-
name: existing?.toolCall?.name ?? "工具",
|
|
413
|
-
input: existing?.toolCall?.input,
|
|
414
|
-
output,
|
|
415
|
-
createdAt: existing?.toolCall?.createdAt ?? createdAt,
|
|
416
|
-
status,
|
|
417
|
-
},
|
|
418
|
-
commandExecution: existing?.commandExecution
|
|
419
|
-
? { ...existing.commandExecution, output, status }
|
|
420
|
-
: undefined,
|
|
421
|
-
fileChange: existing?.fileChange
|
|
422
|
-
? { ...existing.fileChange, summary: output ?? existing.fileChange.summary, status }
|
|
423
|
-
: undefined,
|
|
424
|
-
text: existing?.text,
|
|
425
|
-
createdAt: existing?.createdAt ?? createdAt,
|
|
426
|
-
updatedAt: createdAt,
|
|
427
|
-
metadata: existing?.metadata ?? { source: "device-history", provider: "claude" },
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
export function loadClaudeStoredTimeline(sessionId, conversationId, options = {}) {
|
|
431
|
-
const filePath = findClaudeSessionFile(sessionId);
|
|
432
|
-
if (!filePath)
|
|
433
|
-
return { items: [] };
|
|
434
|
-
let statMtime = Date.now();
|
|
435
|
-
let statSize = 0;
|
|
436
|
-
try {
|
|
437
|
-
const stat = statSync(filePath);
|
|
438
|
-
statMtime = stat.mtimeMs;
|
|
439
|
-
statSize = stat.size;
|
|
440
|
-
}
|
|
441
|
-
catch {
|
|
442
|
-
return { items: [] };
|
|
443
|
-
}
|
|
444
|
-
const itemsById = new Map();
|
|
445
|
-
let index = 0;
|
|
446
|
-
for (const line of readHistorySample(filePath, statSize).split(/\r?\n/)) {
|
|
447
|
-
const trimmed = line.trim();
|
|
448
|
-
if (!trimmed.startsWith("{"))
|
|
449
|
-
continue;
|
|
450
|
-
try {
|
|
451
|
-
const record = asRecord(JSON.parse(trimmed));
|
|
452
|
-
if (!record)
|
|
453
|
-
continue;
|
|
454
|
-
const message = asRecord(record.message);
|
|
455
|
-
const rawRole = typeof record.role === "string"
|
|
456
|
-
? record.role
|
|
457
|
-
: typeof message?.role === "string"
|
|
458
|
-
? message.role
|
|
459
|
-
: typeof record.type === "string"
|
|
460
|
-
? record.type
|
|
461
|
-
: undefined;
|
|
462
|
-
const role = rawRole === "assistant" ? "assistant" : rawRole === "user" ? "user" : undefined;
|
|
463
|
-
if (!role)
|
|
464
|
-
continue;
|
|
465
|
-
const createdAt = parseTimestamp(record.timestamp ?? record.createdAt ?? record.created_at) ??
|
|
466
|
-
statMtime + index;
|
|
467
|
-
const content = message?.content ?? record.content ?? record.text;
|
|
468
|
-
const text = extractVisibleClaudeText(content);
|
|
469
|
-
if (text) {
|
|
470
|
-
itemsById.set(`history:${sessionId}:${index}`, historyMessage(conversationId, index, role, text, createdAt, sessionId));
|
|
471
|
-
index += 1;
|
|
472
|
-
}
|
|
473
|
-
if (Array.isArray(content)) {
|
|
474
|
-
for (const part of content) {
|
|
475
|
-
const block = asRecord(part);
|
|
476
|
-
if (!block)
|
|
477
|
-
continue;
|
|
478
|
-
if (role === "assistant" && block.type === "tool_use") {
|
|
479
|
-
const toolUseId = typeof block.id === "string" ? block.id : undefined;
|
|
480
|
-
if (!toolUseId)
|
|
481
|
-
continue;
|
|
482
|
-
const name = typeof block.name === "string" ? block.name : undefined;
|
|
483
|
-
const input = asRecord(block.input);
|
|
484
|
-
const item = createClaudeToolItem(conversationId, toolUseId, name, input, createdAt);
|
|
485
|
-
itemsById.set(item.id, item);
|
|
486
|
-
}
|
|
487
|
-
else if (role === "user" && block.type === "tool_result") {
|
|
488
|
-
const toolUseId = typeof block.tool_use_id === "string" ? block.tool_use_id : undefined;
|
|
489
|
-
if (!toolUseId)
|
|
490
|
-
continue;
|
|
491
|
-
completeClaudeToolItem(itemsById, conversationId, toolUseId, extractHistoryText(block.content), block.is_error === true, createdAt);
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
catch {
|
|
497
|
-
// Ignore malformed or partial JSONL lines in the history window.
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
return {
|
|
501
|
-
items: [...itemsById.values()]
|
|
502
|
-
.sort((a, b) => a.createdAt - b.createdAt)
|
|
503
|
-
.slice(-Math.max(1, options.maxItems ?? MAX_HISTORY_ITEMS)),
|
|
504
|
-
};
|
|
505
|
-
}
|
|
506
|
-
//# sourceMappingURL=claude-sessions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-sessions.js","sourceRoot":"","sources":["../../../../../src/runtime/acp/claude-sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { Envelope } from "@linkshell/protocol";
|
|
2
|
-
import { type AgentCommandConfig } from "./provider-resolver.js";
|
|
3
|
-
export declare class CodexRpcBridge {
|
|
4
|
-
private readonly input;
|
|
5
|
-
private transport;
|
|
6
|
-
private transportReady;
|
|
7
|
-
private starting;
|
|
8
|
-
private stopping;
|
|
9
|
-
private candidateIndex;
|
|
10
|
-
private startupTimer;
|
|
11
|
-
private queuedMessages;
|
|
12
|
-
private inFlightRequests;
|
|
13
|
-
constructor(input: {
|
|
14
|
-
command?: string;
|
|
15
|
-
commandCandidates?: AgentCommandConfig[];
|
|
16
|
-
cwd: string;
|
|
17
|
-
hostDeviceId: string;
|
|
18
|
-
send: (envelope: Envelope) => void;
|
|
19
|
-
verbose?: boolean;
|
|
20
|
-
});
|
|
21
|
-
send(message: unknown): void;
|
|
22
|
-
stop(): void;
|
|
23
|
-
private ensureTransport;
|
|
24
|
-
private commandCandidates;
|
|
25
|
-
private startCandidate;
|
|
26
|
-
private handleTransportExit;
|
|
27
|
-
private flushQueued;
|
|
28
|
-
private failQueued;
|
|
29
|
-
private emitError;
|
|
30
|
-
private handleTransportStderr;
|
|
31
|
-
private rememberRequest;
|
|
32
|
-
private forgetRequest;
|
|
33
|
-
private failInFlight;
|
|
34
|
-
}
|