@log0u7/opencode-mesh 0.2.0 → 0.3.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/CHANGELOG.md +127 -0
- package/README.md +46 -13
- package/dist/lib/db.d.ts.map +1 -1
- package/dist/lib/db.js +19 -1
- package/dist/lib/db.js.map +1 -1
- package/dist/lib/discovery.d.ts +1 -0
- package/dist/lib/discovery.d.ts.map +1 -1
- package/dist/lib/discovery.js +27 -4
- package/dist/lib/discovery.js.map +1 -1
- package/dist/lib/identity.d.ts +0 -8
- package/dist/lib/identity.d.ts.map +1 -1
- package/dist/lib/identity.js +53 -34
- package/dist/lib/identity.js.map +1 -1
- package/dist/lib/locks.d.ts.map +1 -1
- package/dist/lib/locks.js +20 -12
- package/dist/lib/locks.js.map +1 -1
- package/dist/lib/peers.d.ts +9 -0
- package/dist/lib/peers.d.ts.map +1 -1
- package/dist/lib/peers.js +49 -11
- package/dist/lib/peers.js.map +1 -1
- package/dist/lib/serve.d.ts +2 -0
- package/dist/lib/serve.d.ts.map +1 -1
- package/dist/lib/serve.js +53 -68
- package/dist/lib/serve.js.map +1 -1
- package/dist/lib/spawn.d.ts +14 -4
- package/dist/lib/spawn.d.ts.map +1 -1
- package/dist/lib/spawn.js +210 -21
- package/dist/lib/spawn.js.map +1 -1
- package/dist/lib/sqlite.d.ts.map +1 -1
- package/dist/lib/sqlite.js +15 -4
- package/dist/lib/sqlite.js.map +1 -1
- package/dist/lib/workers.d.ts +2 -0
- package/dist/lib/workers.d.ts.map +1 -1
- package/dist/lib/workers.js +45 -12
- package/dist/lib/workers.js.map +1 -1
- package/dist/lib/worktree.d.ts +22 -4
- package/dist/lib/worktree.d.ts.map +1 -1
- package/dist/lib/worktree.js +54 -6
- package/dist/lib/worktree.js.map +1 -1
- package/dist/plugin-v2.d.ts.map +1 -1
- package/dist/plugin-v2.js +64 -337
- package/dist/plugin-v2.js.map +1 -1
- package/dist/plugin.d.ts +2 -6
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +118 -265
- package/dist/plugin.js.map +1 -1
- package/dist/tools.d.ts +30 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +308 -0
- package/dist/tools.js.map +1 -0
- package/package.json +10 -8
package/dist/lib/spawn.js
CHANGED
|
@@ -1,63 +1,157 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import { appendFileSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { appendFileSync, closeSync, fstatSync, mkdirSync, openSync, readSync, renameSync, rmSync, statSync, } from "node:fs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { insertWorker, setWorkerSession, setWorkerStatus } from "./workers.js";
|
|
4
|
+
import { getWorker, insertWorker, setWorkerPid, setWorkerSession, setWorkerStatus, } from "./workers.js";
|
|
5
|
+
// A child must not boot its own mesh node: a pool of N workers would otherwise
|
|
6
|
+
// cost N servers, N mDNS advertisers and N databases.
|
|
7
|
+
export const CHILD_ENV = { OPENCODE_MESH_CHILD: "1" };
|
|
5
8
|
// Real adapter used by the plugin: node child_process wrapped to the minimal
|
|
6
9
|
// SpawnedProcess surface (works under Bun's node compat at runtime).
|
|
7
|
-
export function nodeSpawn(argv) {
|
|
10
|
+
export function nodeSpawn(argv, env) {
|
|
11
|
+
// Detached on POSIX: the worker becomes a process group leader, so a stop
|
|
12
|
+
// takes down its own children too instead of orphaning them.
|
|
13
|
+
const detached = process.platform !== "win32";
|
|
8
14
|
const child = spawn(argv[0] ?? "", argv.slice(1), {
|
|
9
15
|
stdio: ["ignore", "pipe", "pipe"],
|
|
16
|
+
...(detached ? { detached: true } : {}),
|
|
17
|
+
...(env !== undefined ? { env: { ...process.env, ...env } } : {}),
|
|
10
18
|
});
|
|
11
19
|
const pid = child.pid ?? -1;
|
|
12
20
|
return {
|
|
13
21
|
pid,
|
|
14
22
|
stdout: {
|
|
15
|
-
on: (
|
|
16
|
-
child.stdout?.on(
|
|
23
|
+
on: (_event, listener) => {
|
|
24
|
+
child.stdout?.on("data", (chunk) => listener(chunk.toString("utf8")));
|
|
17
25
|
},
|
|
18
26
|
},
|
|
19
|
-
|
|
20
|
-
|
|
27
|
+
stderr: {
|
|
28
|
+
on: (_event, listener) => {
|
|
29
|
+
child.stderr?.on("data", (chunk) => listener(chunk.toString("utf8")));
|
|
30
|
+
},
|
|
21
31
|
},
|
|
32
|
+
on: ((event, listener) => {
|
|
33
|
+
if (event === "error") {
|
|
34
|
+
child.on("error", listener);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
child.on("exit", listener);
|
|
38
|
+
}
|
|
39
|
+
}),
|
|
22
40
|
kill: (signal) => {
|
|
23
|
-
|
|
41
|
+
const sig = (signal ?? "SIGTERM");
|
|
42
|
+
if (detached && pid > 0) {
|
|
43
|
+
try {
|
|
44
|
+
// Negative pid targets the whole group: worker plus its children.
|
|
45
|
+
process.kill(-pid, sig);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Group already gone; fall through to the direct signal.
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
child.kill(sig);
|
|
24
53
|
},
|
|
25
54
|
};
|
|
26
55
|
}
|
|
27
56
|
const LIVE_PROCESSES = new Map();
|
|
57
|
+
const PENDING_KILLS = new Map();
|
|
58
|
+
const DEFAULT_KILL_GRACE_MS = 3000;
|
|
59
|
+
// Session-id line-buffer cap: session lines are short, 64 KiB is generous.
|
|
60
|
+
const PENDING_MAX_CHARS = 64 * 1024;
|
|
28
61
|
// Headless worker: one prompt in an isolated worktree, tracked by pid and log.
|
|
29
62
|
export function runWorker(db, dataDir, input) {
|
|
30
|
-
const argv = buildArgv(input);
|
|
31
|
-
const proc = input.spawnFn(argv);
|
|
32
63
|
mkdirSync(join(dataDir, "workers"), { recursive: true });
|
|
64
|
+
// Insert first: a process spawned before the row exists would be untracked if
|
|
65
|
+
// the insert threw, and the pid is only known after spawnFn returns.
|
|
33
66
|
const worker = insertWorker(db, {
|
|
34
67
|
task: input.task,
|
|
35
68
|
worktree_path: input.worktree_path,
|
|
36
69
|
branch: input.branch,
|
|
37
|
-
pid:
|
|
70
|
+
pid: null,
|
|
38
71
|
});
|
|
72
|
+
let proc;
|
|
73
|
+
try {
|
|
74
|
+
proc = input.spawnFn(buildArgv(input), CHILD_ENV);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
finalize(db, worker.id, "failed", null);
|
|
78
|
+
return { ...worker, status: "failed", finished_at: Date.now() };
|
|
79
|
+
}
|
|
80
|
+
// A failed spawn reports pid -1 (child.pid undefined): never persist it.
|
|
81
|
+
if (proc.pid > 0) {
|
|
82
|
+
setWorkerPid(db, worker.id, proc.pid);
|
|
83
|
+
worker.pid = proc.pid;
|
|
84
|
+
}
|
|
39
85
|
let sawSessionId = false;
|
|
86
|
+
let pending = "";
|
|
87
|
+
const captureSession = (text) => {
|
|
88
|
+
if (sawSessionId) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const sessionId = parseSessionId(text);
|
|
92
|
+
if (sessionId) {
|
|
93
|
+
sawSessionId = true;
|
|
94
|
+
setWorkerSession(db, worker.id, sessionId);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
40
97
|
proc.stdout.on("data", (chunk) => {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
98
|
+
appendLog(dataDir, worker.id, chunk);
|
|
99
|
+
// Buffer across chunks: a JSON line split between two reads must still be
|
|
100
|
+
// parsed once, not dropped as two invalid halves. Cap host memory: a
|
|
101
|
+
// newline-free chatty stream would otherwise accumulate forever.
|
|
102
|
+
pending += chunk;
|
|
103
|
+
if (pending.length > PENDING_MAX_CHARS) {
|
|
104
|
+
pending = pending.slice(-PENDING_MAX_CHARS);
|
|
105
|
+
}
|
|
106
|
+
const lastBreak = pending.lastIndexOf("\n");
|
|
107
|
+
if (lastBreak === -1) {
|
|
108
|
+
return;
|
|
48
109
|
}
|
|
110
|
+
const complete = pending.slice(0, lastBreak);
|
|
111
|
+
pending = pending.slice(lastBreak + 1);
|
|
112
|
+
captureSession(complete);
|
|
113
|
+
});
|
|
114
|
+
// stderr is piped: someone must drain it or the child blocks once the pipe
|
|
115
|
+
// fills (~64 KB). Fold it into the same log so diagnostics survive.
|
|
116
|
+
proc.stderr.on("data", (chunk) => {
|
|
117
|
+
appendLog(dataDir, worker.id, chunk);
|
|
118
|
+
});
|
|
119
|
+
// A spawn failure (binary not on PATH) emits 'error' and never 'exit': without
|
|
120
|
+
// this the row stays 'running' forever and the live entry leaks.
|
|
121
|
+
proc.on("error", () => {
|
|
122
|
+
LIVE_PROCESSES.delete(worker.id);
|
|
123
|
+
clearPendingKill(worker.id);
|
|
124
|
+
finalize(db, worker.id, "failed", null);
|
|
49
125
|
});
|
|
50
126
|
proc.on("exit", (code) => {
|
|
51
127
|
LIVE_PROCESSES.delete(worker.id);
|
|
128
|
+
clearPendingKill(worker.id);
|
|
129
|
+
captureSession(pending);
|
|
130
|
+
// A deliberate stopWorker already recorded a terminal state; the OS-level
|
|
131
|
+
// exit event that follows must not fight it.
|
|
132
|
+
const current = getWorker(db, worker.id);
|
|
133
|
+
if (current === null || current.status !== "running") {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
52
136
|
setWorkerStatus(db, worker.id, code === 0 ? "completed" : "failed", { exit_code: code });
|
|
53
137
|
});
|
|
138
|
+
// A pid <= 0 means the child never spawned (a real ENOENT reports pid -1
|
|
139
|
+
// synchronously and delivers 'error' a tick later). Finalize now so the tool
|
|
140
|
+
// reports the failure; the later 'error' event finds a terminal row and is a
|
|
141
|
+
// no-op. Listeners stay attached so an unhandled 'error' cannot crash the host.
|
|
142
|
+
if (proc.pid <= 0) {
|
|
143
|
+
finalize(db, worker.id, "failed", null);
|
|
144
|
+
return { ...worker, status: "failed", finished_at: Date.now() };
|
|
145
|
+
}
|
|
54
146
|
LIVE_PROCESSES.set(worker.id, proc);
|
|
55
147
|
return worker;
|
|
56
148
|
}
|
|
57
|
-
// Stop a running worker. The default kill sends SIGTERM to the recorded pid
|
|
58
|
-
//
|
|
149
|
+
// Stop a running worker. The default kill sends SIGTERM to the recorded pid and
|
|
150
|
+
// escalates to SIGKILL after graceMs if the process ignores it; killFn is an
|
|
151
|
+
// injection seam for tests (and disables escalation).
|
|
59
152
|
export function stopWorker(db, id, options = {}) {
|
|
60
|
-
|
|
153
|
+
const proc = LIVE_PROCESSES.get(id);
|
|
154
|
+
if (proc === undefined) {
|
|
61
155
|
throw new Error(`worker ${id} is not running`);
|
|
62
156
|
}
|
|
63
157
|
const kill = options.killFn ?? defaultKill;
|
|
@@ -66,8 +160,37 @@ export function stopWorker(db, id, options = {}) {
|
|
|
66
160
|
// time to reap the process (or a test fake ignores the signal).
|
|
67
161
|
LIVE_PROCESSES.delete(id);
|
|
68
162
|
setWorkerStatus(db, id, "stopped", { exit_code: null });
|
|
163
|
+
const graceMs = options.graceMs ?? DEFAULT_KILL_GRACE_MS;
|
|
164
|
+
if (options.killFn === undefined && proc.pid > 0 && graceMs > 0) {
|
|
165
|
+
clearPendingKill(id);
|
|
166
|
+
const timer = setTimeout(() => {
|
|
167
|
+
PENDING_KILLS.delete(id);
|
|
168
|
+
try {
|
|
169
|
+
proc.kill("SIGKILL");
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// Process group already gone.
|
|
173
|
+
}
|
|
174
|
+
}, graceMs);
|
|
175
|
+
timer.unref?.();
|
|
176
|
+
PENDING_KILLS.set(id, timer);
|
|
177
|
+
}
|
|
69
178
|
return true;
|
|
70
179
|
}
|
|
180
|
+
function clearPendingKill(id) {
|
|
181
|
+
const timer = PENDING_KILLS.get(id);
|
|
182
|
+
if (timer !== undefined) {
|
|
183
|
+
clearTimeout(timer);
|
|
184
|
+
PENDING_KILLS.delete(id);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function finalize(db, id, status, exitCode) {
|
|
188
|
+
const current = getWorker(db, id);
|
|
189
|
+
if (current === null || current.status !== "running") {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
setWorkerStatus(db, id, status, { exit_code: exitCode });
|
|
193
|
+
}
|
|
71
194
|
function defaultKill(id, signal) {
|
|
72
195
|
const proc = LIVE_PROCESSES.get(id);
|
|
73
196
|
proc?.kill(signal);
|
|
@@ -121,4 +244,70 @@ function parseSessionId(chunk) {
|
|
|
121
244
|
function logPath(dataDir, id) {
|
|
122
245
|
return join(dataDir, "workers", `${id}.log`);
|
|
123
246
|
}
|
|
247
|
+
// Bound one worker's log to ~LOG_MAX_BYTES: rotate to `.1` (overwritten) once it
|
|
248
|
+
// grows past the cap, so a chatty worker cannot fill the disk. The tail reader
|
|
249
|
+
// only ever needs the last LOG_WINDOW_BYTES anyway.
|
|
250
|
+
const LOG_MAX_BYTES = 512 * 1024;
|
|
251
|
+
function appendLog(dataDir, id, chunk) {
|
|
252
|
+
const path = logPath(dataDir, id);
|
|
253
|
+
try {
|
|
254
|
+
if (statSync(path).size > LOG_MAX_BYTES) {
|
|
255
|
+
renameSync(path, `${path}.1`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
// No log yet: nothing to rotate.
|
|
260
|
+
}
|
|
261
|
+
appendFileSync(path, chunk);
|
|
262
|
+
}
|
|
263
|
+
// Remove a worker's captured log, including the rotated generation.
|
|
264
|
+
export function removeWorkerLog(dataDir, id) {
|
|
265
|
+
const path = logPath(dataDir, id);
|
|
266
|
+
rmSync(path, { force: true });
|
|
267
|
+
rmSync(`${path}.1`, { force: true });
|
|
268
|
+
}
|
|
269
|
+
// Bounded tail read: a chatty worker can produce tens of MB, and the host's
|
|
270
|
+
// event loop must not pay for a full readFileSync on every mesh_worker_logs
|
|
271
|
+
// call. Reads at most LOG_WINDOW bytes from the end, then keeps the last
|
|
272
|
+
// `limit` complete lines.
|
|
273
|
+
const LOG_WINDOW_BYTES = 256 * 1024;
|
|
274
|
+
export function readLogTail(dataDir, id, limit) {
|
|
275
|
+
const count = Number.isFinite(limit) ? Math.max(0, Math.floor(limit)) : 50;
|
|
276
|
+
if (count === 0) {
|
|
277
|
+
return "";
|
|
278
|
+
}
|
|
279
|
+
let fd;
|
|
280
|
+
try {
|
|
281
|
+
fd = openSync(logPath(dataDir, id), "r");
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
return "";
|
|
285
|
+
}
|
|
286
|
+
try {
|
|
287
|
+
const size = fstatSync(fd).size;
|
|
288
|
+
const start = Math.max(0, size - LOG_WINDOW_BYTES);
|
|
289
|
+
const chunk = Buffer.alloc(size - start);
|
|
290
|
+
// readSync may return a short count (pipes, signals): loop until filled.
|
|
291
|
+
let read = 0;
|
|
292
|
+
while (read < chunk.length) {
|
|
293
|
+
const n = readSync(fd, chunk, read, chunk.length - read, start + read);
|
|
294
|
+
if (n <= 0) {
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
read += n;
|
|
298
|
+
}
|
|
299
|
+
const lines = chunk.subarray(0, read).toString("utf8").split("\n");
|
|
300
|
+
if (lines.at(-1) === "") {
|
|
301
|
+
lines.pop();
|
|
302
|
+
}
|
|
303
|
+
if (start > 0 && lines.length > 0) {
|
|
304
|
+
// The window may begin mid-line: drop the partial line.
|
|
305
|
+
lines.shift();
|
|
306
|
+
}
|
|
307
|
+
return lines.slice(-count).join("\n");
|
|
308
|
+
}
|
|
309
|
+
finally {
|
|
310
|
+
closeSync(fd);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
124
313
|
//# sourceMappingURL=spawn.js.map
|
package/dist/lib/spawn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/lib/spawn.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/lib/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,cAAc,EACd,SAAS,EACT,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,MAAM,EACN,QAAQ,GACT,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAGhB,MAAM,cAAc,CAAC;AAgBtB,+EAA+E;AAC/E,sDAAsD;AACtD,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC;AAEtD,6EAA6E;AAC7E,qEAAqE;AACrE,MAAM,UAAU,SAAS,CAAC,IAAc,EAAE,GAA4B;IACpE,0EAA0E;IAC1E,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAChD,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC5B,OAAO;QACL,GAAG;QACH,MAAM,EAAE;YACN,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;gBACvB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChF,CAAC;SACF;QACD,MAAM,EAAE;YACN,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;gBACvB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChF,CAAC;SACF;QACD,EAAE,EAAE,CAAC,CAAC,KAAuB,EAAE,QAA8B,EAAE,EAAE;YAC/D,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBACtB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAkC,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,QAAyC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAyB;QAC1B,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;YACf,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,SAAS,CAAmB,CAAC;YACpD,IAAI,QAAQ,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,kEAAkE;oBAClE,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACxB,OAAO;gBACT,CAAC;gBAAC,MAAM,CAAC;oBACP,yDAAyD;gBAC3D,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAiBD,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;AACzD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAyC,CAAC;AACvE,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpC,+EAA+E;AAC/E,MAAM,UAAU,SAAS,CAAC,EAAU,EAAE,OAAe,EAAE,KAAqB;IAC1E,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,8EAA8E;IAC9E,qEAAqE;IACrE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE;QAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,EAAE,IAAI;KACV,CAAC,CAAC;IAEH,IAAI,IAAoB,CAAC;IACzB,IAAI,CAAC;QACH,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAClE,CAAC;IAED,yEAAyE;IACzE,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACjB,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACxB,CAAC;IAED,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,MAAM,cAAc,GAAG,CAAC,IAAY,EAAQ,EAAE;QAC5C,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,GAAG,IAAI,CAAC;YACpB,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAC/B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACrC,0EAA0E;QAC1E,qEAAqE;QACrE,iEAAiE;QACjE,OAAO,IAAI,KAAK,CAAC;QACjB,IAAI,OAAO,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YACvC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC7C,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACvC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,oEAAoE;IACpE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAC/B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,iEAAiE;IACjE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACpB,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACvB,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,cAAc,CAAC,OAAO,CAAC,CAAC;QACxB,0EAA0E;QAC1E,6CAA6C;QAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACrD,OAAO;QACT,CAAC;QACD,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,6EAA6E;IAC7E,6EAA6E;IAC7E,gFAAgF;IAChF,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAClE,CAAC;IAED,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gFAAgF;AAChF,6EAA6E;AAC7E,sDAAsD;AACtD,MAAM,UAAU,UAAU,CAAC,EAAU,EAAE,EAAU,EAAE,OAAO,GAAgB,EAAE;IAC1E,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC;IAC3C,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACpB,2EAA2E;IAC3E,gEAAgE;IAChE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,qBAAqB,CAAC;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChE,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;QACH,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAU;IAClC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAAU,EAAE,EAAU,EAAE,MAAoB,EAAE,QAAuB;IACrF,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAClC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACrD,OAAO;IACT,CAAC;IACD,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,WAAW,CAAC,EAAU,EAAE,MAAc;IAC7C,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,yEAAyE;AACzE,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,OAAO,GAAgB,EAAE;IAClE,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;QACrE,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,SAAS,CAAC,KAAqB;IACtC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACnF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,qEAAqE;IACrE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrD,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;YAC9D,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxE,OAAO,MAAM,CAAC,SAAS,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,OAAO,CAAC,OAAe,EAAE,EAAU;IAC1C,OAAO,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,iFAAiF;AACjF,+EAA+E;AAC/E,oDAAoD;AACpD,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC;AAEjC,SAAS,SAAS,CAAC,OAAe,EAAE,EAAU,EAAE,KAAa;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,aAAa,EAAE,CAAC;YACxC,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IACD,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,EAAU;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,0BAA0B;AAC1B,MAAM,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC;AAEpC,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,EAAU,EAAE,KAAa;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,EAAU,CAAC;IACf,IAAI,CAAC;QACH,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,gBAAgB,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QACzC,yEAAyE;QACzE,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;YACvE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACX,MAAM;YACR,CAAC;YACD,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,wDAAwD;YACxD,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;AACH,CAAC"}
|
package/dist/lib/sqlite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/lib/sqlite.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;IACvD,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAC5D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC3C,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,IAAI,IAAI,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/lib/sqlite.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;IACvD,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAC5D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC3C,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,IAAI,IAAI,CAAC;CACf;AA6FD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAmBnD"}
|
package/dist/lib/sqlite.js
CHANGED
|
@@ -47,6 +47,15 @@ try {
|
|
|
47
47
|
catch {
|
|
48
48
|
BunSqliteEngine = null;
|
|
49
49
|
}
|
|
50
|
+
let NodeSqliteEngine = null;
|
|
51
|
+
try {
|
|
52
|
+
NodeSqliteEngine =
|
|
53
|
+
(await import("node:sqlite")).default ??
|
|
54
|
+
(await import("node:sqlite"));
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
NodeSqliteEngine = null;
|
|
58
|
+
}
|
|
50
59
|
export function openSqlite(path) {
|
|
51
60
|
const globalRuntime = globalThis;
|
|
52
61
|
if (globalRuntime.Bun?.sqlite?.Database) {
|
|
@@ -55,9 +64,11 @@ export function openSqlite(path) {
|
|
|
55
64
|
if (BunSqliteEngine) {
|
|
56
65
|
return createBunConn(new BunSqliteEngine.Database(path));
|
|
57
66
|
}
|
|
58
|
-
// node:sqlite ships with Node >= 22.5;
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
|
|
67
|
+
// node:sqlite ships with Node >= 22.5; a failed import leaves the engine
|
|
68
|
+
// null, so tests get a clear error instead of a hidden require() ReferenceError.
|
|
69
|
+
if (!NodeSqliteEngine) {
|
|
70
|
+
throw new Error("no sqlite engine available: expected bun:sqlite or node:sqlite");
|
|
71
|
+
}
|
|
72
|
+
return createPreparedConn(new NodeSqliteEngine.DatabaseSync(path));
|
|
62
73
|
}
|
|
63
74
|
//# sourceMappingURL=sqlite.js.map
|
package/dist/lib/sqlite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/lib/sqlite.ts"],"names":[],"mappings":"AA0BA,SAAS,kBAAkB,CAAC,EAAsB;IAChD,OAAO;QACL,GAAG,CAAc,GAAW,EAAE,MAAkB;YAC9C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAQ,CAAC;QAC5C,CAAC;QACD,GAAG,CAAc,GAAW,EAAE,MAAkB;YAC9C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAmB,IAAI,IAAI,CAAC;QAChE,CAAC;QACD,GAAG,CAAC,GAAW,EAAE,MAAkB;YACjC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,GAAW;YACd,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QACD,KAAK;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB;IAC1C,OAAO;QACL,GAAG,CAAc,GAAW,EAAE,MAAkB;YAC9C,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAQ,CAAC;QACrD,CAAC;QACD,GAAG,CAAc,GAAW,EAAE,MAAkB;YAC9C,OAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAmB,IAAI,IAAI,CAAC;QACzE,CAAC;QACD,GAAG,CAAC,GAAW,EAAE,MAAkB;YACjC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,GAAW;YACd,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,CAAC;QACD,KAAK;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/lib/sqlite.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/workers.d.ts
CHANGED
|
@@ -22,8 +22,10 @@ export declare function insertWorker(db: MeshDb, input: {
|
|
|
22
22
|
export declare function getWorker(db: MeshDb, id: string): Worker | null;
|
|
23
23
|
export declare function listWorkers(db: MeshDb): Worker[];
|
|
24
24
|
export declare function setWorkerSession(db: MeshDb, id: string, sessionId: string): void;
|
|
25
|
+
export declare function setWorkerPid(db: MeshDb, id: string, pid: number): void;
|
|
25
26
|
export declare function setWorkerStatus(db: MeshDb, id: string, status: WorkerStatus, options?: {
|
|
26
27
|
exit_code?: number | null;
|
|
27
28
|
}): void;
|
|
28
29
|
export declare function deleteWorker(db: MeshDb, id: string): boolean;
|
|
30
|
+
export declare function reconcileWorkers(db: MeshDb): number;
|
|
29
31
|
//# sourceMappingURL=workers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workers.d.ts","sourceRoot":"","sources":["../../src/lib/workers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1E,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAMF,wBAAgB,YAAY,CAC1B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC9F,MAAM,CAsBR;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAIhD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"workers.d.ts","sourceRoot":"","sources":["../../src/lib/workers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1E,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAMF,wBAAgB,YAAY,CAC1B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC9F,MAAM,CAsBR;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAIhD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOhF;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC1C,IAAI,CAyBN;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAG5D;AAID,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAenD"}
|
package/dist/lib/workers.js
CHANGED
|
@@ -28,29 +28,62 @@ export function listWorkers(db) {
|
|
|
28
28
|
.map(rowToWorker);
|
|
29
29
|
}
|
|
30
30
|
export function setWorkerSession(db, id, sessionId) {
|
|
31
|
-
|
|
31
|
+
// A late stdout chunk after the process finalized must not resurrect a
|
|
32
|
+
// session id on a terminal row.
|
|
33
|
+
db.conn.run("UPDATE workers SET session_id = ? WHERE id = ? AND status = 'running'", [
|
|
34
|
+
sessionId,
|
|
35
|
+
id,
|
|
36
|
+
]);
|
|
37
|
+
}
|
|
38
|
+
export function setWorkerPid(db, id, pid) {
|
|
39
|
+
db.conn.run("UPDATE workers SET pid = ? WHERE id = ?", [pid, id]);
|
|
32
40
|
}
|
|
33
41
|
export function setWorkerStatus(db, id, status, options = {}) {
|
|
42
|
+
const finished = TERMINAL_STATUSES.has(status) ? Date.now() : null;
|
|
43
|
+
const exitCode = "exit_code" in options ? (options.exit_code ?? null) : null;
|
|
44
|
+
// Guard the transition inside the UPDATE: a concurrent finalize in another
|
|
45
|
+
// process must not be overwritten by a stale read-then-write. The terminal
|
|
46
|
+
// list comes from TERMINAL_STATUSES so it cannot drift.
|
|
47
|
+
const terminals = [...TERMINAL_STATUSES];
|
|
48
|
+
db.conn.run(`UPDATE workers SET status = ?, exit_code = ?, finished_at = ?
|
|
49
|
+
WHERE id = ? AND status NOT IN (${terminals.map(() => "?").join(", ")})`, [status, exitCode, finished, id, ...terminals]);
|
|
50
|
+
const changed = (db.conn.get("SELECT changes() AS changes")?.changes ?? 0) > 0;
|
|
51
|
+
if (changed) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
34
54
|
const existing = getWorker(db, id);
|
|
35
55
|
if (!existing) {
|
|
36
56
|
throw new Error(`unknown worker: ${id}`);
|
|
37
57
|
}
|
|
38
|
-
|
|
39
|
-
throw new Error(`worker ${id} is in terminal state ${existing.status}; refusing transition to ${status}`);
|
|
40
|
-
}
|
|
41
|
-
const finished = TERMINAL_STATUSES.has(status) ? Date.now() : null;
|
|
42
|
-
const exitCode = "exit_code" in options ? (options.exit_code ?? null) : null;
|
|
43
|
-
db.conn.run("UPDATE workers SET status = ?, exit_code = ?, finished_at = ? WHERE id = ?", [
|
|
44
|
-
status,
|
|
45
|
-
exitCode,
|
|
46
|
-
finished,
|
|
47
|
-
id,
|
|
48
|
-
]);
|
|
58
|
+
throw new Error(`worker ${id} is in terminal state ${existing.status}; refusing transition to ${status}`);
|
|
49
59
|
}
|
|
50
60
|
export function deleteWorker(db, id) {
|
|
51
61
|
db.conn.run("DELETE FROM workers WHERE id = ?", [id]);
|
|
52
62
|
return (db.conn.get("SELECT changes() AS changes")?.changes ?? 0) > 0;
|
|
53
63
|
}
|
|
64
|
+
// After a host restart the in-memory process map is gone, so 'running' rows can
|
|
65
|
+
// never be stopped again. Rows whose pid no longer exists are marked stopped.
|
|
66
|
+
export function reconcileWorkers(db) {
|
|
67
|
+
const rows = db.conn.all("SELECT id, pid FROM workers WHERE status = 'running'");
|
|
68
|
+
let reconciled = 0;
|
|
69
|
+
for (const row of rows) {
|
|
70
|
+
if (row.pid === null || !pidAlive(row.pid)) {
|
|
71
|
+
db.conn.run("UPDATE workers SET status = 'stopped', exit_code = NULL, finished_at = ? WHERE id = ?", [Date.now(), row.id]);
|
|
72
|
+
reconciled++;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return reconciled;
|
|
76
|
+
}
|
|
77
|
+
function pidAlive(pid) {
|
|
78
|
+
try {
|
|
79
|
+
process.kill(pid, 0);
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
// EPERM means the process exists but belongs to someone else.
|
|
84
|
+
return error.code === "EPERM";
|
|
85
|
+
}
|
|
86
|
+
}
|
|
54
87
|
function rowToWorker(row) {
|
|
55
88
|
return {
|
|
56
89
|
id: row.id,
|
package/dist/lib/workers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workers.js","sourceRoot":"","sources":["../../src/lib/workers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAmBzC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAe,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAIpF,MAAM,UAAU,YAAY,CAC1B,EAAU,EACV,KAA+F;IAE/F,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,UAAU,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,EAAE,CAAC,IAAI,CAAC,GAAG,CACT;4DACwD,EACxD,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CACpE,CAAC;IAEF,OAAO;QACL,EAAE;QACF,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,GAAG;QACf,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAU,EAAE,EAAU;IAC9C,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAY,oCAAoC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,OAAO,EAAE,CAAC,IAAI;SACX,GAAG,CAAY,4DAA4D,CAAC;SAC5E,GAAG,CAAC,WAAW,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAU,EAAE,EAAU,EAAE,SAAiB;IACxE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"workers.js","sourceRoot":"","sources":["../../src/lib/workers.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/worktree.d.ts
CHANGED
|
@@ -1,22 +1,40 @@
|
|
|
1
1
|
type WorktreeInfo = {
|
|
2
|
-
name
|
|
2
|
+
name?: string;
|
|
3
3
|
branch?: string;
|
|
4
4
|
directory: string;
|
|
5
5
|
};
|
|
6
|
+
export type { WorktreeInfo };
|
|
7
|
+
type WorktreeCallOptions = {
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
};
|
|
6
10
|
export type WorktreeClient = {
|
|
7
11
|
worktree: {
|
|
8
12
|
create(parameters: {
|
|
9
13
|
worktreeCreateInput?: {
|
|
10
14
|
name?: string;
|
|
11
15
|
};
|
|
12
|
-
}): Promise<unknown>;
|
|
16
|
+
}, options?: WorktreeCallOptions): Promise<unknown>;
|
|
13
17
|
remove(parameters: {
|
|
14
18
|
worktreeRemoveInput: {
|
|
15
19
|
directory: string;
|
|
16
20
|
};
|
|
17
|
-
}): Promise<unknown>;
|
|
21
|
+
}, options?: WorktreeCallOptions): Promise<unknown>;
|
|
18
22
|
};
|
|
19
23
|
};
|
|
24
|
+
export type WorktreeDomain = {
|
|
25
|
+
create(input: {
|
|
26
|
+
projectID: string;
|
|
27
|
+
name?: string;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
directory: string;
|
|
30
|
+
}>;
|
|
31
|
+
remove(input: {
|
|
32
|
+
projectID: string;
|
|
33
|
+
directory: string;
|
|
34
|
+
force: boolean;
|
|
35
|
+
}): Promise<void>;
|
|
36
|
+
};
|
|
37
|
+
export declare const WORKTREE_TIMEOUT_MS = 15000;
|
|
20
38
|
export type WorktreeFactory = (baseUrl: string, directory: string, fetchOverride?: typeof fetch) => WorktreeClient;
|
|
21
39
|
export declare const defaultWorktreeFactory: WorktreeFactory;
|
|
22
40
|
export declare function extractClientFetch(pluginClient: unknown): typeof fetch | undefined;
|
|
@@ -26,5 +44,5 @@ export declare function createWorkerWorktree(client: WorktreeClient, input: {
|
|
|
26
44
|
export declare function removeWorkerWorktree(client: WorktreeClient, input: {
|
|
27
45
|
directory: string;
|
|
28
46
|
}): Promise<boolean>;
|
|
29
|
-
export
|
|
47
|
+
export declare function v2WorktreeDomainClient(domain: WorktreeDomain, projectID: string): WorktreeClient;
|
|
30
48
|
//# sourceMappingURL=worktree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,KAAK,mBAAmB,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAIpD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE;QACR,MAAM,CACJ,UAAU,EAAE;YAAE,mBAAmB,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,EACvD,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,MAAM,CACJ,UAAU,EAAE;YAAE,mBAAmB,EAAE;gBAAE,SAAS,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,EAC1D,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;KACrB,CAAC;CACH,CAAC;AAKF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxF,CAAC;AAKF,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAW1C,MAAM,MAAM,eAAe,GAAG,CAC5B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,OAAO,KAAK,KACzB,cAAc,CAAC;AAEpB,eAAO,MAAM,sBAAsB,EAAE,eAKJ,CAAC;AAMlC,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,KAAK,GAAG,SAAS,CAUlF;AAcD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvB,OAAO,CAAC,YAAY,CAAC,CAiBvB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,OAAO,CAAC,CAUlB;AAOD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CAuBhG"}
|
package/dist/lib/worktree.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { createOpencodeClient } from "@opencode-ai/sdk/v2";
|
|
2
|
+
// Worktree setup/teardown shells out to git; a hung git process must not pin a
|
|
3
|
+
// tool call forever. The timeout only reaches the 1.x REST client, which
|
|
4
|
+
// forwards the signal to fetch; the 2.x in-process domain ignores it.
|
|
5
|
+
export const WORKTREE_TIMEOUT_MS = 15_000;
|
|
6
|
+
function callOptions() {
|
|
7
|
+
return { signal: AbortSignal.timeout(WORKTREE_TIMEOUT_MS) };
|
|
8
|
+
}
|
|
2
9
|
export const defaultWorktreeFactory = (baseUrl, directory, fetchOverride) => createOpencodeClient({
|
|
3
10
|
baseUrl,
|
|
4
11
|
directory,
|
|
@@ -26,18 +33,59 @@ function unwrap(envelope, fallback) {
|
|
|
26
33
|
const detail = parsed.error.data?.message ?? parsed.error.message ?? fallback;
|
|
27
34
|
throw new Error(`worktree API error: ${detail}`);
|
|
28
35
|
}
|
|
36
|
+
if (parsed.data === undefined) {
|
|
37
|
+
throw new Error(`worktree API error: ${fallback} (empty response)`);
|
|
38
|
+
}
|
|
29
39
|
return parsed.data;
|
|
30
40
|
}
|
|
31
41
|
export async function createWorkerWorktree(client, input) {
|
|
32
42
|
const envelope = await client.worktree.create({
|
|
33
43
|
worktreeCreateInput: input.name !== undefined ? { name: input.name } : {},
|
|
34
|
-
});
|
|
35
|
-
|
|
44
|
+
}, callOptions());
|
|
45
|
+
const info = unwrap(envelope, "worktree create failed");
|
|
46
|
+
if (typeof info !== "object" ||
|
|
47
|
+
info === null ||
|
|
48
|
+
typeof info.directory !== "string" ||
|
|
49
|
+
info.directory === "") {
|
|
50
|
+
throw new Error("worktree API error: worktree create failed (response had no directory)");
|
|
51
|
+
}
|
|
52
|
+
return info;
|
|
36
53
|
}
|
|
37
54
|
export async function removeWorkerWorktree(client, input) {
|
|
38
|
-
const envelope = await client.worktree.remove({
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
55
|
+
const envelope = await client.worktree.remove({ worktreeRemoveInput: { directory: input.directory } }, callOptions());
|
|
56
|
+
const removed = unwrap(envelope, "worktree remove failed");
|
|
57
|
+
if (typeof removed !== "boolean") {
|
|
58
|
+
throw new Error("worktree API error: worktree remove failed (response was not a boolean)");
|
|
59
|
+
}
|
|
60
|
+
return removed;
|
|
61
|
+
}
|
|
62
|
+
// OpenCode 2.x hands the plugin an in-process worktree domain whose methods
|
|
63
|
+
// take FLAT, project-scoped inputs and resolve the payload directly instead of
|
|
64
|
+
// the `{ worktreeCreateInput }` / `{ data, error }` REST envelope the tools are
|
|
65
|
+
// written against (see issue #29). Wrap it back into the same WorktreeClient
|
|
66
|
+
// shape so both host generations share one code path.
|
|
67
|
+
export function v2WorktreeDomainClient(domain, projectID) {
|
|
68
|
+
return {
|
|
69
|
+
worktree: {
|
|
70
|
+
create: async (parameters) => {
|
|
71
|
+
const name = parameters.worktreeCreateInput?.name;
|
|
72
|
+
const info = await domain.create({
|
|
73
|
+
projectID,
|
|
74
|
+
...(name !== undefined ? { name } : {}),
|
|
75
|
+
});
|
|
76
|
+
return { data: info };
|
|
77
|
+
},
|
|
78
|
+
// The domain resolves void on success (it throws otherwise); surface that
|
|
79
|
+
// as the v1 boolean so removeWorkerWorktree sees a successful removal.
|
|
80
|
+
remove: async (parameters) => {
|
|
81
|
+
await domain.remove({
|
|
82
|
+
projectID,
|
|
83
|
+
directory: parameters.worktreeRemoveInput.directory,
|
|
84
|
+
force: true,
|
|
85
|
+
});
|
|
86
|
+
return { data: true };
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
};
|
|
42
90
|
}
|
|
43
91
|
//# sourceMappingURL=worktree.js.map
|
package/dist/lib/worktree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"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"}
|