meldivo 2.2.2 → 2.4.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.
@@ -2,9 +2,21 @@ import { spawn } from "node:child_process";
2
2
  import { closeSync, existsSync, openSync, readdirSync, readFileSync, readSync, statSync } from "node:fs";
3
3
  import { homedir } from "node:os";
4
4
  import path from "node:path";
5
- import { createInterface } from "node:readline";
5
+ import { ClaudePool } from "./claude-warm.js";
6
6
  import { describeTool } from "./tool-activity.js";
7
7
  const TAIL_BYTES = 64 * 1024;
8
+ // Warm Claude Code processes of every adapter, stopped with this server.
9
+ const pools = new Set();
10
+ const ownPids = new Set();
11
+ process.once("exit", () => {
12
+ for (const pool of pools)
13
+ pool.closeAll();
14
+ });
15
+ /** Stops every warm Claude Code process (tests). */
16
+ export function _closeClaudeProcessesForTests() {
17
+ for (const pool of pools)
18
+ pool.closeAll();
19
+ }
8
20
  const HEAD_BYTES = 32 * 1024;
9
21
  /** True if `pid` refers to a currently-running process. */
10
22
  function pidAlive(pid) {
@@ -183,7 +195,8 @@ function readOpenSessions(home) {
183
195
  const data = JSON.parse(readFileSync(path.join(dir, entry), "utf8"));
184
196
  if (!data.sessionId)
185
197
  continue;
186
- if (!pidAlive(pid))
198
+ // meldivo's own warm processes write status files too; they are not a terminal.
199
+ if (ownPids.has(pid) || !pidAlive(pid))
187
200
  continue;
188
201
  result.set(data.sessionId, { sessionId: data.sessionId, busy: data.status === "busy" });
189
202
  }
@@ -198,6 +211,8 @@ export function createClaudeAdapter(options = {}) {
198
211
  const bin = options.bin ?? "claude";
199
212
  const projectsDir = path.join(home, ".claude", "projects");
200
213
  let availableCache;
214
+ const pool = new ClaudePool(bin);
215
+ pools.add(pool);
201
216
  async function checkAvailable() {
202
217
  return new Promise((resolve) => {
203
218
  const child = spawn(bin, ["--version"], { stdio: "ignore" });
@@ -283,135 +298,134 @@ export function createClaudeAdapter(options = {}) {
283
298
  return limit ? sessions.slice(0, limit) : sessions;
284
299
  },
285
300
  async *send(target, text, signal) {
286
- const args = ["-p"];
287
- if (target.id) {
288
- args.push("--resume", target.id);
289
- if (target.fork)
290
- args.push("--fork-session");
301
+ // Reuse the warm process that has this session open, unless something else wrote to it since.
302
+ let proc = target.fork ? undefined : pool.take(target.id, target.cwd, target.model);
303
+ if (proc?.changedOnDisk()) {
304
+ proc.close();
305
+ pool.forget(proc);
306
+ proc = undefined;
291
307
  }
292
- args.push("--output-format", "stream-json", "--verbose", "--include-partial-messages", "--permission-mode", "acceptEdits");
293
- if (target.model)
294
- args.push("--model", target.model);
295
- args.push(text);
296
- const child = spawn(bin, args, {
297
- cwd: target.cwd,
298
- stdio: ["ignore", "pipe", "pipe"],
299
- });
300
- const onAbort = () => {
301
- child.kill("SIGTERM");
302
- };
303
- signal.addEventListener("abort", onAbort, { once: true });
304
- let stderrTail = "";
305
- child.stderr.on("data", (chunk) => {
306
- stderrTail = (stderrTail + chunk.toString("utf8")).slice(-4000);
307
- });
308
- const rl = createInterface({ input: child.stdout });
309
- const events = [];
310
- let resolveNext;
311
- let ended = false;
312
- let exitCode = null;
313
- // A clean exit with no session id or no reply text means the CLI's output format changed.
314
- let sawSession = false;
315
- let sawText = false;
316
- let sessionEmitted = false;
317
- rl.on("line", (line) => {
318
- const trimmed = line.trim();
319
- if (!trimmed)
320
- return;
321
- let obj;
322
- try {
323
- obj = JSON.parse(trimmed);
308
+ if (!proc) {
309
+ const args = ["-p", "--input-format", "stream-json"];
310
+ if (target.id) {
311
+ args.push("--resume", target.id);
312
+ if (target.fork)
313
+ args.push("--fork-session");
324
314
  }
325
- catch {
326
- return;
315
+ args.push("--output-format", "stream-json", "--verbose", "--include-partial-messages", "--permission-mode", "acceptEdits");
316
+ if (target.model)
317
+ args.push("--model", target.model);
318
+ proc = pool.spawn(args, target.cwd, target.model);
319
+ const pid = proc.child.pid;
320
+ if (pid) {
321
+ ownPids.add(pid);
322
+ proc.onExit(() => ownPids.delete(pid));
327
323
  }
328
- const type = obj.type;
329
- if (type === "system" && typeof obj.session_id === "string") {
330
- if (!sessionEmitted) {
331
- sessionEmitted = true;
332
- sawSession = true;
333
- events.push({ type: "session", id: obj.session_id });
334
- }
324
+ }
325
+ yield* runClaudeTurn(proc, text, target.cwd, signal);
326
+ },
327
+ };
328
+ /** Runs one user message on a warm Claude Code process and streams it until its "result". */
329
+ async function* runClaudeTurn(proc, text, cwd, signal) {
330
+ const events = [];
331
+ let wake;
332
+ let finished = false;
333
+ let stopped = false;
334
+ // A clean exit with no session id or no reply text means the CLI's output format changed.
335
+ let sawSession = false;
336
+ let sawText = false;
337
+ const notify = () => wake?.();
338
+ const offRecord = proc.onRecord((obj) => {
339
+ const type = obj.type;
340
+ if (type === "system" && typeof obj.session_id === "string") {
341
+ if (!sawSession) {
342
+ sawSession = true;
343
+ proc.learnSession(obj.session_id, projectsDir);
344
+ pool.register(proc);
345
+ events.push({ type: "session", id: obj.session_id });
335
346
  }
336
- else if (type === "stream_event") {
337
- const event = obj.event;
338
- if (event?.type === "content_block_delta") {
339
- const delta = event.delta;
340
- if (delta?.type === "text_delta" && typeof delta.text === "string") {
341
- sawText = true;
342
- events.push({ type: "delta", text: delta.text });
343
- }
347
+ }
348
+ else if (type === "stream_event") {
349
+ const event = obj.event;
350
+ if (event?.type === "content_block_delta") {
351
+ const delta = event.delta;
352
+ if (delta?.type === "text_delta" && typeof delta.text === "string") {
353
+ sawText = true;
354
+ events.push({ type: "delta", text: delta.text });
344
355
  }
345
356
  }
346
- else if (type === "assistant") {
347
- const message = obj.message;
348
- const content = message?.content;
349
- if (Array.isArray(content)) {
350
- for (const block of content) {
351
- if (block && typeof block === "object" && block.type === "tool_use") {
352
- const name = block.name;
353
- if (typeof name === "string")
354
- events.push({ type: "tool", name, ...describeTool(name, block.input, target.cwd) });
355
- }
357
+ }
358
+ else if (type === "assistant") {
359
+ const message = obj.message;
360
+ const content = message?.content;
361
+ if (Array.isArray(content)) {
362
+ for (const block of content) {
363
+ if (block && typeof block === "object" && block.type === "tool_use") {
364
+ const name = block.name;
365
+ if (typeof name === "string")
366
+ events.push({ type: "tool", name, ...describeTool(name, block.input, cwd) });
356
367
  }
357
368
  }
358
369
  }
359
- else if (type === "result") {
360
- const denials = obj.permission_denials;
361
- if (Array.isArray(denials) && denials.length > 0) {
362
- events.push({ type: "notice", message: "a tool call was denied because no one could approve it" });
363
- }
364
- if (obj.is_error) {
365
- const msg = typeof obj.result === "string" ? obj.result : "claude reported an error";
366
- events.push({ type: "error", message: msg });
367
- sawText = true; // already reported; don't also claim the format changed
368
- }
370
+ }
371
+ else if (type === "result") {
372
+ finished = true;
373
+ const denials = obj.permission_denials;
374
+ if (Array.isArray(denials) && denials.length > 0) {
375
+ events.push({ type: "notice", message: "a tool call was denied because no one could approve it" });
369
376
  }
370
- resolveNext?.();
371
- });
372
- const exitPromise = new Promise((resolve) => {
373
- child.on("close", (code) => {
374
- exitCode = code;
375
- ended = true;
376
- resolveNext?.();
377
- resolve();
378
- });
379
- child.on("error", (err) => {
380
- stderrTail += `\n${String(err)}`;
381
- exitCode = -1;
382
- ended = true;
383
- resolveNext?.();
384
- resolve();
385
- });
386
- });
387
- try {
388
- while (true) {
389
- while (events.length > 0) {
390
- yield events.shift();
391
- }
392
- if (ended)
393
- break;
394
- await new Promise((resolve) => {
395
- resolveNext = resolve;
396
- });
377
+ if (obj.is_error && !signal.aborted) {
378
+ const msg = typeof obj.result === "string" ? obj.result : "claude reported an error";
379
+ events.push({ type: "error", message: msg });
380
+ sawText = true; // already reported; don't also claim the format changed
397
381
  }
398
- await exitPromise;
399
- while (events.length > 0) {
382
+ }
383
+ notify();
384
+ });
385
+ const offExit = proc.onExit(notify);
386
+ const onAbort = () => {
387
+ void proc.interrupt().finally(() => {
388
+ stopped = true;
389
+ notify();
390
+ });
391
+ };
392
+ signal.addEventListener("abort", onAbort, { once: true });
393
+ try {
394
+ proc.sendUserMessage(text);
395
+ while (true) {
396
+ while (events.length > 0)
400
397
  yield events.shift();
398
+ if (finished || stopped || proc.exited)
399
+ break;
400
+ await new Promise((resolve) => {
401
+ wake = resolve;
402
+ });
403
+ wake = undefined;
404
+ }
405
+ while (events.length > 0)
406
+ yield events.shift();
407
+ if (!signal.aborted) {
408
+ if (proc.exited && !finished && proc.exitCode !== 0) {
409
+ yield { type: "error", message: proc.stderrTail.trim() || `claude exited with code ${proc.exitCode}` };
401
410
  }
402
- if (exitCode !== 0 && exitCode !== null) {
403
- yield { type: "error", message: stderrTail.trim() || `claude exited with code ${exitCode}` };
404
- }
405
- if (exitCode === 0 && (!sawSession || !sawText)) {
411
+ else if (!sawSession || !sawText) {
406
412
  yield { type: "notice", message: "Claude Code finished without a reply meldivo could read; this Claude Code version may not be supported yet, so update meldivo" };
407
413
  }
408
414
  }
409
- finally {
410
- signal.removeEventListener("abort", onAbort);
411
- rl.close();
412
- yield { type: "done" };
415
+ }
416
+ finally {
417
+ offRecord();
418
+ offExit();
419
+ signal.removeEventListener("abort", onAbort);
420
+ if (!proc.exited) {
421
+ // A caller that stopped reading early (e.g. a warm-up that reached for a tool) must not leave Claude running.
422
+ if (!finished && !stopped)
423
+ await proc.interrupt();
424
+ if (!proc.exited)
425
+ proc.settle(projectsDir);
413
426
  }
414
- },
415
- };
427
+ yield { type: "done" };
428
+ }
429
+ }
416
430
  }
417
431
  //# sourceMappingURL=claude.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../server/src/harnesses/claude.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../server/src/harnesses/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,260 @@
1
+ import { spawn } from "node:child_process";
2
+ import { statSync } from "node:fs";
3
+ const IDLE_MS = 10 * 60_000;
4
+ const MAX_PROCESSES = 4;
5
+ const ABORT_GRACE_MS = 3_000;
6
+ const START_TIMEOUT_MS = 60_000;
7
+ export const DIALOG_METHODS = new Set(["select", "confirm", "input", "editor"]);
8
+ function stampOf(file) {
9
+ if (!file)
10
+ return undefined;
11
+ try {
12
+ const stat = statSync(file);
13
+ return { size: stat.size, mtimeMs: stat.mtimeMs };
14
+ }
15
+ catch {
16
+ return undefined;
17
+ }
18
+ }
19
+ export class PiRpcProcess {
20
+ child;
21
+ cwd;
22
+ model;
23
+ sessionId;
24
+ sessionFile;
25
+ busy = false;
26
+ exited = false;
27
+ exitCode = null;
28
+ lastUsed = Date.now();
29
+ stderrTail = "";
30
+ /** Set once the process has answered a command, i.e. it speaks the RPC protocol. */
31
+ spoke = false;
32
+ stamp;
33
+ nextId = 0;
34
+ buffered = "";
35
+ pending = new Map();
36
+ listeners = new Set();
37
+ exitListeners = new Set();
38
+ idleTimer;
39
+ constructor(bin, args, cwd, model, onExit) {
40
+ this.cwd = cwd;
41
+ this.model = model;
42
+ this.child = spawn(bin, ["--mode", "rpc", ...args], { cwd, stdio: ["pipe", "pipe", "pipe"] });
43
+ this.child.stdin.on("error", () => undefined);
44
+ this.child.stdout.on("data", (chunk) => this.read(chunk));
45
+ this.child.stderr.on("data", (chunk) => {
46
+ this.stderrTail = (this.stderrTail + chunk.toString("utf8")).slice(-4000);
47
+ });
48
+ const finish = (code) => {
49
+ if (this.exited)
50
+ return;
51
+ this.exited = true;
52
+ this.exitCode = code;
53
+ if (this.idleTimer)
54
+ clearTimeout(this.idleTimer);
55
+ for (const resolve of this.pending.values())
56
+ resolve({ type: "response", success: false, error: "pi exited" });
57
+ this.pending.clear();
58
+ for (const listener of this.exitListeners)
59
+ listener();
60
+ onExit(this);
61
+ };
62
+ this.child.on("close", (code) => finish(code));
63
+ this.child.on("error", (err) => {
64
+ this.stderrTail += `\n${String(err)}`;
65
+ finish(-1);
66
+ });
67
+ }
68
+ read(chunk) {
69
+ this.buffered += chunk.toString("utf8");
70
+ let idx;
71
+ while ((idx = this.buffered.indexOf("\n")) >= 0) {
72
+ const raw = this.buffered.slice(0, idx).replace(/\r$/, "");
73
+ this.buffered = this.buffered.slice(idx + 1);
74
+ if (!raw.trim())
75
+ continue;
76
+ let record;
77
+ try {
78
+ record = JSON.parse(raw);
79
+ }
80
+ catch {
81
+ continue;
82
+ }
83
+ if (record.type === "response" && typeof record.id === "string" && this.pending.has(record.id)) {
84
+ this.spoke = true;
85
+ const resolve = this.pending.get(record.id);
86
+ this.pending.delete(record.id);
87
+ resolve(record);
88
+ continue;
89
+ }
90
+ // Nobody can answer an extension's dialog during a voice turn: decline it, as a headless run would.
91
+ if (record.type === "extension_ui_request" && typeof record.id === "string" && DIALOG_METHODS.has(String(record.method))) {
92
+ this.child.stdin.write(`${JSON.stringify({ type: "extension_ui_response", id: record.id, cancelled: true })}\n`);
93
+ }
94
+ for (const listener of this.listeners)
95
+ listener(record);
96
+ }
97
+ }
98
+ /** Sends one command and resolves with its response (a failed response if pi exits first). */
99
+ command(command, timeoutMs = START_TIMEOUT_MS) {
100
+ if (this.exited)
101
+ return Promise.resolve({ type: "response", success: false, error: "pi exited" });
102
+ const id = `meldivo-${++this.nextId}`;
103
+ return new Promise((resolve) => {
104
+ const timer = setTimeout(() => {
105
+ this.pending.delete(id);
106
+ resolve({ type: "response", success: false, error: "pi did not answer" });
107
+ }, timeoutMs);
108
+ this.pending.set(id, (record) => {
109
+ clearTimeout(timer);
110
+ resolve(record);
111
+ });
112
+ this.child.stdin.write(`${JSON.stringify({ ...command, id })}\n`);
113
+ });
114
+ }
115
+ onRecord(listener) {
116
+ this.listeners.add(listener);
117
+ return () => this.listeners.delete(listener);
118
+ }
119
+ onExit(listener) {
120
+ this.exitListeners.add(listener);
121
+ return () => this.exitListeners.delete(listener);
122
+ }
123
+ /** Reads the session id and file from pi; resolves false if the process doesn't speak RPC. */
124
+ async start() {
125
+ const state = await this.command({ type: "get_state" });
126
+ if (state.success !== true)
127
+ return false;
128
+ const data = (state.data ?? {});
129
+ if (typeof data.sessionId === "string")
130
+ this.sessionId = data.sessionId;
131
+ if (typeof data.sessionFile === "string")
132
+ this.sessionFile = data.sessionFile;
133
+ this.stamp = stampOf(this.sessionFile);
134
+ return true;
135
+ }
136
+ /**
137
+ * Whether something else (a pi open in a terminal, say) wrote to the session file since this
138
+ * process last finished a turn; pi keeps the session in memory, so it must reload first.
139
+ */
140
+ changedOnDisk() {
141
+ const now = stampOf(this.sessionFile);
142
+ if (!now || !this.stamp)
143
+ return false;
144
+ return now.size !== this.stamp.size || now.mtimeMs !== this.stamp.mtimeMs;
145
+ }
146
+ async reload() {
147
+ if (!this.sessionFile)
148
+ return false;
149
+ const response = await this.command({ type: "switch_session", sessionPath: this.sessionFile });
150
+ const cancelled = response.data?.cancelled === true;
151
+ if (response.success !== true || cancelled)
152
+ return false;
153
+ this.stamp = stampOf(this.sessionFile);
154
+ return true;
155
+ }
156
+ /** Marks the end of a turn: remembers the file as this process left it and starts the idle clock. */
157
+ settle() {
158
+ this.busy = false;
159
+ this.lastUsed = Date.now();
160
+ this.stamp = stampOf(this.sessionFile);
161
+ if (this.idleTimer)
162
+ clearTimeout(this.idleTimer);
163
+ this.idleTimer = setTimeout(() => this.close(), IDLE_MS);
164
+ this.idleTimer.unref();
165
+ }
166
+ claim() {
167
+ this.busy = true;
168
+ this.lastUsed = Date.now();
169
+ if (this.idleTimer)
170
+ clearTimeout(this.idleTimer);
171
+ }
172
+ /** Stops the running prompt; the process stays usable. Falls back to killing it. */
173
+ async abort() {
174
+ if (this.exited)
175
+ return;
176
+ const response = await this.command({ type: "abort" }, ABORT_GRACE_MS);
177
+ if (response.success !== true)
178
+ this.kill();
179
+ }
180
+ /** Orderly shutdown: pi exits when its stdin closes. */
181
+ close() {
182
+ if (this.exited)
183
+ return;
184
+ this.child.stdin.end();
185
+ setTimeout(() => this.kill(), ABORT_GRACE_MS).unref();
186
+ }
187
+ kill() {
188
+ if (!this.exited)
189
+ this.child.kill("SIGTERM");
190
+ }
191
+ }
192
+ /** Keeps at most a few warm pi processes, keyed by the id of the session they have open. */
193
+ export class PiRpcPool {
194
+ bin;
195
+ onSpawn;
196
+ bySession = new Map();
197
+ all = new Set();
198
+ constructor(bin, onSpawn = () => undefined) {
199
+ this.bin = bin;
200
+ this.onSpawn = onSpawn;
201
+ }
202
+ /** An idle process that already has session `id` open with the same model and folder, if any. */
203
+ take(id, cwd, model) {
204
+ if (!id)
205
+ return undefined;
206
+ const proc = this.bySession.get(id);
207
+ // A process started without a model runs the session's own model, which is what a turn
208
+ // that names the session's recorded model asks for.
209
+ if (!proc || proc.exited || proc.busy || proc.cwd !== cwd || (proc.model !== undefined && proc.model !== model))
210
+ return undefined;
211
+ proc.claim();
212
+ return proc;
213
+ }
214
+ spawn(args, cwd, model) {
215
+ this.evict();
216
+ const proc = new PiRpcProcess(this.bin, args, cwd, model, (done) => this.forget(done));
217
+ proc.claim();
218
+ this.all.add(proc);
219
+ this.onSpawn(proc);
220
+ return proc;
221
+ }
222
+ /** Files the process under its session id once pi reports it (new sessions and forks get one on start). */
223
+ register(proc) {
224
+ if (!proc.sessionId || proc.exited)
225
+ return;
226
+ const existing = this.bySession.get(proc.sessionId);
227
+ if (existing && existing !== proc) {
228
+ // Two processes on one file would diverge; keep the newer one.
229
+ if (existing.busy)
230
+ return;
231
+ existing.close();
232
+ }
233
+ this.bySession.set(proc.sessionId, proc);
234
+ }
235
+ forget(proc) {
236
+ this.all.delete(proc);
237
+ for (const [id, entry] of this.bySession)
238
+ if (entry === proc)
239
+ this.bySession.delete(id);
240
+ }
241
+ /** Closes the least recently used idle processes beyond the limit. */
242
+ evict() {
243
+ const idle = [...this.all].filter((proc) => !proc.busy && !proc.exited).sort((a, b) => a.lastUsed - b.lastUsed);
244
+ let excess = this.all.size + 1 - MAX_PROCESSES;
245
+ for (const proc of idle) {
246
+ if (excess <= 0)
247
+ break;
248
+ proc.close();
249
+ this.forget(proc);
250
+ excess--;
251
+ }
252
+ }
253
+ closeAll() {
254
+ for (const proc of this.all)
255
+ proc.kill();
256
+ this.all.clear();
257
+ this.bySession.clear();
258
+ }
259
+ }
260
+ //# sourceMappingURL=pi-rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-rpc.js","sourceRoot":"","sources":["../../../server/src/harnesses/pi-rpc.ts"],"names":[],"mappings":"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"}