askvireo 0.1.7 → 0.1.8

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/acp.js CHANGED
@@ -1,56 +1,44 @@
1
- import { spawn } from "node:child_process";
2
- import { createRequire } from "node:module";
3
- import { dirname, join } from "node:path";
4
- /**
5
- * Coding agents over the Agent Client Protocol.
6
- *
7
- * `acpx` (openclaw/acpx) is a headless ACP client: it starts a coding agent,
8
- * keeps its session, and mediates permission requests. Vireo drives it as a
9
- * child process and reads its JSON-RPC stream, so every agent acpx knows
10
- * (Claude Code, Codex, opencode, pi, …) works without more code.
11
- */
12
- const require = createRequire(import.meta.url);
13
- /** acpx's CLI entry, from this package's own dependency: nothing to install globally. */
14
- export function acpxEntry() {
15
- return join(dirname(require.resolve("acpx/package.json")), "dist", "cli.js");
16
- }
1
+ import { readdirSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { createAcpRuntime, createAgentRegistry, createFileSessionStore, } from "acpx/runtime";
17
4
  const READ_KINDS = ["read", "search", "think", "fetch"];
18
5
  const WRITE_KINDS = ["edit", "move"];
19
- const DANGEROUS_KINDS = ["delete", "execute", "other"];
20
- export function permissionArgs(mode) {
6
+ /**
7
+ * Codex's own approval presets for each mode. Below full it runs in its read-only sandbox and asks
8
+ * before anything else, edits included; Vireo then answers by the mode. Its default ("agent")
9
+ * would run what it judges safe without asking.
10
+ */
11
+ const CODEX_PRESETS = { "read-only": "read-only", edits: "read-only", full: "agent-full-access" };
12
+ /**
13
+ * What a built-in agent does in `mode` that the mode's name would not suggest: Codex runs shell
14
+ * commands inside the repository without asking whatever it is told, and pi asks about nothing.
15
+ * Undefined when the agent keeps to the mode (or is a command of the owner's, taken at its word).
16
+ */
17
+ export function unasked(command, mode) {
21
18
  if (mode === "full")
22
- return ["--approve-all", "--permission-policy", JSON.stringify({ defaultAction: "approve" }), "--non-interactive-permissions", "deny"];
23
- const policy = mode === "read-only"
24
- ? { autoApprove: READ_KINDS, autoDeny: [...WRITE_KINDS, ...DANGEROUS_KINDS], defaultAction: "deny" }
25
- : { autoApprove: [...READ_KINDS, ...WRITE_KINDS], autoDeny: DANGEROUS_KINDS, defaultAction: "deny" };
26
- // The client's own filesystem and terminal capabilities let an agent act without asking for
27
- // permission at all, so they are what makes a mode mean anything: without the terminal an agent has
28
- // to ask before running a command, and without the filesystem (read-only) it cannot write at all.
29
- const args = ["--deny-all", "--permission-policy", JSON.stringify(policy), "--non-interactive-permissions", "deny", "--no-terminal"];
30
- if (mode === "read-only")
31
- args.push("--no-fs");
32
- return args;
33
- }
34
- /** Global flags, which acpx requires before the agent name. */
35
- export function globalArgs(o) {
36
- const args = ["--cwd", o.cwd, "--format", "json", "--json-strict", "--timeout", String(o.timeoutSeconds), "--ttl", String(o.ttlSeconds), ...permissionArgs(o.mode)];
37
- if (o.agentCommand)
38
- args.push("--agent", o.agentCommand);
39
- if (o.model)
40
- args.push("--model", o.model);
41
- return args;
19
+ return undefined;
20
+ const agent = command.trim();
21
+ if (agent === "codex")
22
+ return "Codex runs shell commands inside the repository without asking (its sandbox keeps it there, with no network)";
23
+ if (agent === "pi")
24
+ return "pi runs every tool, shell commands included, without asking";
25
+ return undefined;
42
26
  }
43
27
  /**
44
- * The agent's name, unless the setup runs a command of its own: acpx refuses a positional agent
45
- * next to --agent, and reads the command's words as the subcommand instead.
28
+ * What a mode makes of one permission request: allowed, refused, or (edits) the owner's to decide.
29
+ * A kind the agent did not name counts as the riskiest, so it is never let through unasked.
46
30
  */
47
- const agentPart = (agent, o) => (o.agentCommand ? [] : [agent]);
48
- export const execArgs = (agent, prompt, o) => [...globalArgs(o), ...agentPart(agent, o), "exec", prompt];
49
- export const sessionPromptArgs = (agent, session, prompt, o) => [...globalArgs(o), ...agentPart(agent, o), "-s", session, "prompt", prompt];
50
- export const sessionEnsureArgs = (agent, session, o) => [...globalArgs(o), ...agentPart(agent, o), "sessions", "ensure", "--name", session];
51
- export const sessionListArgs = (agent, o) => [...globalArgs(o), ...agentPart(agent, o), "sessions", "list", "--local"];
52
- export const sessionCloseArgs = (agent, session, o) => [...globalArgs(o), ...agentPart(agent, o), "sessions", "close", session];
53
- const OUTPUT_CAP = 4 << 20;
31
+ export function permissionFor(mode, kind) {
32
+ if (mode === "full")
33
+ return "allow";
34
+ if (kind && READ_KINDS.includes(kind))
35
+ return "allow";
36
+ if (mode === "read-only")
37
+ return "deny";
38
+ if (kind && WRITE_KINDS.includes(kind))
39
+ return "allow";
40
+ return "ask";
41
+ }
54
42
  /**
55
43
  * Vireo's own settings and credentials stay with Vireo; the agent gets the rest of the environment
56
44
  * (PATH, HOME, its own provider keys) plus what its setup adds.
@@ -58,189 +46,107 @@ const OUTPUT_CAP = 4 << 20;
58
46
  export function agentEnv(base, extra = {}) {
59
47
  const env = {};
60
48
  for (const [k, v] of Object.entries(base))
61
- if (!/^(VIREO_|GOOGLE_CLIENT_)/.test(k))
49
+ if (!VIREO_ONLY.test(k))
62
50
  env[k] = v;
63
51
  return { ...env, ...extra };
64
52
  }
53
+ const VIREO_ONLY = /^(VIREO_|GOOGLE_CLIENT_)/;
65
54
  /**
66
- * Runs acpx and collects its output. `onLine` sees every stdout line however long the run, while
67
- * `stdout` keeps only the first few megabytes; stderr keeps its tail, where the failure is.
68
- * Stopping a run kills acpx's whole process group, so the agent it started goes too.
55
+ * acpx builds the agent's environment from this process's own and lays an overlay on top, so
56
+ * Vireo's keys can only be blanked there, not removed.
69
57
  */
70
- export function runAcpx(args, opts) {
71
- return new Promise((resolve) => {
72
- const child = spawn(process.execPath, [acpxEntry(), ...args], {
73
- cwd: opts.cwd,
74
- env: agentEnv(process.env, opts.env),
75
- stdio: ["ignore", "pipe", "pipe"],
76
- detached: process.platform !== "win32",
77
- });
78
- let stdout = "";
79
- let stderr = "";
80
- let pending = "";
81
- let timedOut = false;
82
- let aborted = false;
83
- let done = false;
84
- const kill = () => {
85
- try {
86
- if (child.pid && process.platform !== "win32")
87
- process.kill(-child.pid, "SIGKILL");
88
- else
89
- child.kill("SIGKILL");
90
- }
91
- catch {
92
- child.kill("SIGKILL");
93
- }
94
- };
95
- const finish = (code) => {
96
- if (done)
97
- return;
98
- done = true;
99
- clearTimeout(timer);
100
- opts.signal?.removeEventListener("abort", onAbort);
101
- if (pending)
102
- opts.onLine?.(pending);
103
- resolve({ code, stdout, stderr, timedOut, aborted });
104
- };
105
- const timer = setTimeout(() => {
106
- timedOut = true;
107
- kill();
108
- }, opts.timeoutMs);
109
- const onAbort = () => {
110
- aborted = true;
111
- kill();
112
- };
113
- if (opts.signal?.aborted)
114
- onAbort();
115
- else
116
- opts.signal?.addEventListener("abort", onAbort, { once: true });
117
- child.stdout.on("data", (chunk) => {
118
- const text = chunk.toString("utf8");
119
- if (stdout.length < OUTPUT_CAP)
120
- stdout += text;
121
- if (!opts.onLine)
122
- return;
123
- const lines = (pending + text).split("\n");
124
- pending = lines.pop() ?? "";
125
- for (const line of lines)
126
- opts.onLine(line);
127
- });
128
- child.stderr.on("data", (chunk) => {
129
- stderr += chunk.toString("utf8");
130
- if (stderr.length > OUTPUT_CAP)
131
- stderr = stderr.slice(-OUTPUT_CAP / 2);
132
- });
133
- child.on("error", (err) => {
134
- stderr += `${stderr ? "\n" : ""}${err.message}`;
135
- finish(-1);
136
- });
137
- child.on("close", (code) => finish(code ?? -1));
138
- });
58
+ export function agentOverlay(base, extra = {}) {
59
+ const blank = {};
60
+ for (const k of Object.keys(base))
61
+ if (VIREO_ONLY.test(k))
62
+ blank[k] = "";
63
+ return { ...blank, ...extra };
139
64
  }
140
65
  const MAX_TOOLS = 60;
141
66
  const MAX_TEXT = 200_000;
142
67
  const str = (v) => (typeof v === "string" ? v : undefined);
143
- function toolSteps(update, turn) {
144
- const id = str(update.toolCallId);
68
+ const num = (v) => (typeof v === "number" && Number.isFinite(v) ? v : undefined);
69
+ /** The step's title, unless an update only says "tool call", which would hide the real one. */
70
+ const GENERIC_TITLE = "tool call";
71
+ function toolStep(e, turn) {
72
+ const id = e.toolCallId;
145
73
  if (!id)
146
- return;
74
+ return undefined;
147
75
  let step = turn.tools.find((t) => t.id === id);
148
76
  if (!step) {
149
77
  // Past the cap new calls are left out, but the ones listed still get their updates.
150
78
  if (turn.tools.length >= MAX_TOOLS)
151
- return;
152
- step = { title: str(update.title) ?? id, id };
79
+ return undefined;
80
+ step = { title: e.title ?? id, id };
153
81
  turn.tools.push(step);
154
82
  }
155
- const title = str(update.title);
156
- if (title)
157
- step.title = title;
158
- const kind = str(update.kind);
159
- if (kind)
160
- step.kind = kind;
161
- const status = str(update.status);
162
- if (status)
163
- step.status = status;
164
- const raw = update.rawInput;
83
+ if (e.title && e.title !== GENERIC_TITLE)
84
+ step.title = e.title;
85
+ if (e.kind)
86
+ step.kind = e.kind;
87
+ if (e.status)
88
+ step.status = e.status;
89
+ const raw = e.rawInput;
165
90
  if (raw && typeof raw === "object") {
166
91
  const input = raw;
167
92
  const detail = str(input.command) ?? str(input.path) ?? str(input.file_path) ?? str(input.pattern);
168
93
  if (detail)
169
94
  step.detail = detail;
170
95
  }
171
- const content = update.content;
172
- if (Array.isArray(content)) {
173
- for (const c of content) {
174
- if (c.type === "diff" && typeof c.path === "string" && !turn.files.includes(c.path))
175
- turn.files.push(c.path);
176
- }
177
- }
178
- if (Array.isArray(update.locations)) {
179
- for (const l of update.locations) {
180
- if (typeof l.path === "string" && !turn.files.includes(l.path))
181
- turn.files.push(l.path);
182
- }
96
+ for (const c of (e.content ?? [])) {
97
+ if (c.type === "diff" && typeof c.path === "string")
98
+ turn.files.push(c.path);
183
99
  }
100
+ for (const l of e.locations ?? [])
101
+ if (typeof l.path === "string")
102
+ turn.files.push(l.path);
103
+ return step;
184
104
  }
185
- /** Reads acpx's JSON-RPC stream, line by line, into what the owner (and the model) needs to see. */
105
+ /** Reads acpx's events, as they come, into what the owner (and the model) needs to see. */
186
106
  export class TurnReader {
187
- turn = { text: "", tools: [], files: [], plans: [], errors: [], refused: [], frames: 0 };
188
- push(line) {
107
+ turn = { text: "", tools: [], files: [], plans: [], errors: [], refused: [], timedOut: false, aborted: false };
108
+ /** Returns a line saying what the agent is doing now, when that changed. */
109
+ push(e) {
189
110
  const turn = this.turn;
190
- const trimmed = line.trim();
191
- if (!trimmed.startsWith("{"))
192
- return;
193
- let msg;
194
- try {
195
- msg = JSON.parse(trimmed);
111
+ if (e.type === "text_delta") {
112
+ if (e.stream !== "thought" && turn.text.length < MAX_TEXT)
113
+ turn.text += e.text;
196
114
  }
197
- catch {
198
- return;
115
+ else if (e.type === "tool_call") {
116
+ const step = toolStep(e, turn);
117
+ if (step && step.title !== step.id && (!step.status || step.status === "pending" || step.status === "in_progress"))
118
+ return step.title;
199
119
  }
200
- turn.frames += 1;
201
- const error = msg.error;
202
- if (error)
203
- turn.errors.push(str(error.message) ?? JSON.stringify(error));
204
- const result = msg.result;
205
- if (result) {
206
- const stop = str(result.stopReason);
207
- if (stop)
208
- turn.stopReason = stop;
209
- const outcome = result.outcome;
210
- if (outcome?.outcome === "selected" && !/allow/i.test(String(outcome.optionId)))
211
- turn.refused.push("a permission request was declined");
212
- const meta = result._meta;
213
- const escalation = meta?.acpx;
214
- if (escalation?.permissionEscalation)
215
- turn.refused.push("a permission request was escalated but could not be approved here");
120
+ else if (e.type === "status" && e.tag === "plan" && e.entries) {
121
+ // Each plan update is the whole plan, not an addition to it.
122
+ turn.plans = e.entries.map((p) => `${p.status}: ${p.content}`);
216
123
  }
217
- if (msg.method !== "session/update")
218
- return;
219
- const params = msg.params;
220
- const update = params?.update;
221
- const tag = str(update?.sessionUpdate);
222
- if (!update || !tag)
223
- return;
224
- if (tag === "agent_message_chunk") {
225
- const content = update.content;
226
- if (content?.type === "text" && typeof content.text === "string" && turn.text.length < MAX_TEXT)
227
- turn.text += content.text;
124
+ else if (e.type === "status" && e.tag === "usage_update" && e.breakdown) {
125
+ // Only a fallback: the result's own count, when there is one, replaces it.
126
+ const usage = {};
127
+ if (e.breakdown.inputTokens !== undefined)
128
+ usage.input = e.breakdown.inputTokens;
129
+ if (e.breakdown.outputTokens !== undefined)
130
+ usage.output = e.breakdown.outputTokens;
131
+ if (e.breakdown.cachedReadTokens !== undefined)
132
+ usage.cached = e.breakdown.cachedReadTokens;
133
+ if (e.breakdown.cachedWriteTokens !== undefined)
134
+ usage.cacheWrite = e.breakdown.cachedWriteTokens;
135
+ turn.usage = usage;
228
136
  }
229
- else if (tag === "tool_call" || tag === "tool_call_update") {
230
- toolSteps(update, turn);
137
+ else if (e.type === "error") {
138
+ turn.errors.push(e.message);
231
139
  }
232
- else if (tag === "plan") {
233
- // Each plan update is the whole plan, not an addition to it.
234
- const entries = update.entries;
235
- if (Array.isArray(entries)) {
236
- turn.plans = [];
237
- for (const e of entries) {
238
- const content = str(e.content);
239
- if (content)
240
- turn.plans.push(`${str(e.status) ?? "pending"}: ${content}`);
241
- }
242
- }
140
+ return undefined;
141
+ }
142
+ /** The turn's end: how it stopped, and the tokens on its result, which count the whole turn. */
143
+ end(result) {
144
+ if (result.status === "failed") {
145
+ this.turn.errors.push(result.error.message);
146
+ return;
243
147
  }
148
+ this.turn.stopReason = result.stopReason;
149
+ this.turn.usage = turnUsage(result._meta) ?? this.turn.usage;
244
150
  }
245
151
  finish() {
246
152
  this.turn.text = this.turn.text.trim();
@@ -248,10 +154,210 @@ export class TurnReader {
248
154
  return this.turn;
249
155
  }
250
156
  }
251
- export function parseTurn(stdout) {
252
- const reader = new TurnReader();
253
- for (const line of stdout.split("\n"))
254
- reader.push(line);
255
- return reader.finish();
157
+ /**
158
+ * The tokens a turn used, from the `_meta.quota` block acpx puts on its prompt result (Claude Code
159
+ * and Codex report it there; pi does not, and then there is nothing to record).
160
+ */
161
+ export function turnUsage(meta) {
162
+ const quota = meta?.quota;
163
+ const count = (quota?.token_count ?? meta?.usage ?? meta?.token_count);
164
+ if (!count || typeof count !== "object")
165
+ return undefined;
166
+ const models = quota?.model_usage;
167
+ const usage = {
168
+ model: str(models?.[0]?.model),
169
+ input: num(count.inputTokens) ?? num(count.input_tokens),
170
+ output: num(count.outputTokens) ?? num(count.output_tokens),
171
+ cached: num(count.cachedInputTokens) ?? num(count.cache_read_input_tokens),
172
+ cacheWrite: num(count.cachedWriteTokens) ?? num(count.cache_creation_input_tokens),
173
+ };
174
+ if (usage.input === undefined && usage.output === undefined)
175
+ return undefined;
176
+ return usage;
177
+ }
178
+ export function describeRequest(request) {
179
+ const call = request.raw.toolCall;
180
+ const input = call?.rawInput;
181
+ const what = str(input?.command) ?? str(input?.file_path) ?? str(input?.path);
182
+ const title = call?.title?.trim() || "a step";
183
+ return what && what !== title ? `${title} (${what})` : title;
184
+ }
185
+ /**
186
+ * The coding agents of all setups, each in its own acpx runtime. Sessions are kept in the plugin's
187
+ * directory; an agent stays running between the turns of its session until the session is closed
188
+ * or Vireo stops.
189
+ */
190
+ export class AcpAgents {
191
+ stateDir;
192
+ runtimes = new Map();
193
+ store;
194
+ constructor(stateDir) {
195
+ this.stateDir = stateDir;
196
+ this.store = createFileSessionStore({ stateDir });
197
+ }
198
+ /**
199
+ * One runtime per setup and mode, so a call that narrows the mode gets a client with narrower
200
+ * powers without stopping the setup's other calls.
201
+ */
202
+ runtime(spec) {
203
+ const slot = `${spec.name}\0${spec.mode}`;
204
+ const key = JSON.stringify([spec.command, spec.cwd, spec.env]);
205
+ const known = this.runtimes.get(slot);
206
+ if (known?.key === key)
207
+ return known.runtime;
208
+ // The setup changed: the agents it started under the old settings go, its sessions stay on disk.
209
+ for (const [other, r] of this.runtimes) {
210
+ if (other.startsWith(`${spec.name}\0`) && r.key !== key) {
211
+ this.runtimes.delete(other);
212
+ void r.runtime.shutdown?.().catch(() => { });
213
+ }
214
+ }
215
+ const runtime = createAcpRuntime({
216
+ cwd: spec.cwd,
217
+ agentProcessEnv: agentOverlay(process.env, spec.env),
218
+ sessionStore: this.store,
219
+ agentRegistry: createAgentRegistry(),
220
+ // Below full the client itself writes nothing, and without its terminal an agent has to ask
221
+ // before it runs a command; what it asks then is decided per turn (`permissionFor`).
222
+ permissionMode: spec.mode === "full" ? "approve-all" : "deny-all",
223
+ nonInteractivePermissions: "deny",
224
+ terminal: spec.mode === "full",
225
+ fs: spec.mode !== "read-only",
226
+ });
227
+ this.runtimes.set(slot, { key, runtime });
228
+ return runtime;
229
+ }
230
+ async ensure(spec, session, oneshot, model) {
231
+ return this.runtime(spec).ensureSession({
232
+ sessionKey: session,
233
+ agent: spec.command,
234
+ mode: oneshot ? "oneshot" : "persistent",
235
+ cwd: spec.cwd,
236
+ sessionOptions: model ? { model } : undefined,
237
+ });
238
+ }
239
+ /**
240
+ * Codex, by default, lets its own reviewer approve a step outside its sandbox. Below full it is put
241
+ * in its preset that asks instead, so such a step reaches the mode's decision (and the owner);
242
+ * inside the sandbox (the repository and /tmp, no network) it runs commands without asking. Codex
243
+ * offers this as its `mode` option; an agent without such an option keeps its own.
244
+ */
245
+ async gate(spec, handle, mode) {
246
+ const record = await this.store.load(handle.acpxRecordId ?? handle.sessionKey);
247
+ const option = record?.acpx?.config_options?.find((o) => o.id === "mode");
248
+ if (!option || option.type !== "select")
249
+ return;
250
+ const values = new Set(option.options.flatMap((o) => ("value" in o ? [o.value] : o.options.map((g) => g.value))));
251
+ const preset = CODEX_PRESETS[mode];
252
+ if (!values.has(CODEX_PRESETS["read-only"]) || !values.has(CODEX_PRESETS.full))
253
+ return;
254
+ if (option.currentValue === preset)
255
+ return;
256
+ await this.runtime(spec).setConfigOption?.({ handle, key: "mode", value: preset });
257
+ }
258
+ async find(spec, session) {
259
+ return this.runtime(spec).findSession?.({ sessionKey: session, agent: spec.command });
260
+ }
261
+ async close(spec, handle, discard = false) {
262
+ await this.runtime(spec).close({ handle, reason: "closed by Vireo", discardPersistentState: discard });
263
+ }
264
+ /** One prompt turn: its steps as they happen, permission requests decided by the mode (or the owner). */
265
+ async turn(spec, handle, o) {
266
+ const reader = new TurnReader();
267
+ const turn = reader.turn;
268
+ const stop = new AbortController();
269
+ const timer = setTimeout(() => {
270
+ turn.timedOut = true;
271
+ stop.abort();
272
+ }, o.timeoutSeconds * 1000);
273
+ const onAbort = () => {
274
+ turn.aborted = true;
275
+ stop.abort();
276
+ };
277
+ if (o.signal?.aborted)
278
+ onAbort();
279
+ else
280
+ o.signal?.addEventListener("abort", onAbort, { once: true });
281
+ const decide = async (request, ctx) => {
282
+ const verdict = permissionFor(o.mode, request.inferredKind);
283
+ if (verdict === "allow")
284
+ return { outcome: "allow_once" };
285
+ if (verdict === "ask" && o.ask) {
286
+ if (await o.ask(request, ctx.signal))
287
+ return { outcome: "allow_once" };
288
+ turn.refused.push(`the owner declined: ${describeRequest(request)}`);
289
+ return { outcome: "reject_once" };
290
+ }
291
+ turn.refused.push(`not allowed in ${o.mode} mode: ${describeRequest(request)}`);
292
+ return { outcome: "reject_once" };
293
+ };
294
+ try {
295
+ // A failure here stops the turn: the agent would otherwise run with its own, wider defaults.
296
+ await this.gate(spec, handle, o.mode);
297
+ const run = this.runtime(spec).startTurn({
298
+ handle,
299
+ text: o.text,
300
+ mode: "prompt",
301
+ requestId: crypto.randomUUID(),
302
+ signal: stop.signal,
303
+ onPermissionRequest: decide,
304
+ });
305
+ for await (const e of run.events) {
306
+ const line = reader.push(e);
307
+ if (line)
308
+ o.onStep?.(line);
309
+ }
310
+ reader.end(await run.result);
311
+ if (turn.usage && !turn.usage.model) {
312
+ try {
313
+ const status = await this.runtime(spec).getStatus?.({ handle });
314
+ const model = status?.models?.currentModelId;
315
+ if (model)
316
+ turn.usage.model = model;
317
+ }
318
+ catch {
319
+ // the session closed before its status could be read; the counts still stand
320
+ }
321
+ }
322
+ }
323
+ catch (err) {
324
+ turn.errors.push(err instanceof Error ? err.message : String(err));
325
+ }
326
+ finally {
327
+ clearTimeout(timer);
328
+ o.signal?.removeEventListener("abort", onAbort);
329
+ }
330
+ return reader.finish();
331
+ }
332
+ /** The persistent sessions saved here whose name starts with `prefix`, latest first. */
333
+ sessions(prefix) {
334
+ const dir = join(this.stateDir, "sessions");
335
+ let files;
336
+ try {
337
+ files = readdirSync(dir).filter((f) => f.endsWith(".json"));
338
+ }
339
+ catch {
340
+ return [];
341
+ }
342
+ const out = [];
343
+ for (const f of files) {
344
+ try {
345
+ const r = JSON.parse(readFileSync(join(dir, f), "utf8"));
346
+ const name = str(r.name);
347
+ if (!name?.startsWith(prefix) || r.closed)
348
+ continue;
349
+ out.push({ name, cwd: str(r.cwd) ?? "", lastUsedAt: str(r.lastUsedAt) ?? str(r.last_used_at) });
350
+ }
351
+ catch {
352
+ // a file being written, or not a session
353
+ }
354
+ }
355
+ return out.sort((a, b) => (b.lastUsedAt ?? "").localeCompare(a.lastUsedAt ?? ""));
356
+ }
357
+ async shutdown() {
358
+ const all = [...this.runtimes.values()];
359
+ this.runtimes.clear();
360
+ await Promise.allSettled(all.map((r) => r.runtime.shutdown?.()));
361
+ }
256
362
  }
257
363
  //# sourceMappingURL=acp.js.map
package/dist/acp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"acp.js","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acp.js","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"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"}