codedeck 0.1.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.
Files changed (72) hide show
  1. package/README.md +211 -0
  2. package/dist/cli/commands/diff.js +43 -0
  3. package/dist/cli/commands/diff.js.map +1 -0
  4. package/dist/cli/commands/doctor.js +90 -0
  5. package/dist/cli/commands/doctor.js.map +1 -0
  6. package/dist/cli/commands/logs.js +139 -0
  7. package/dist/cli/commands/logs.js.map +1 -0
  8. package/dist/cli/commands/ps.js +59 -0
  9. package/dist/cli/commands/ps.js.map +1 -0
  10. package/dist/cli/commands/run.js +145 -0
  11. package/dist/cli/commands/run.js.map +1 -0
  12. package/dist/cli/commands/send.js +29 -0
  13. package/dist/cli/commands/send.js.map +1 -0
  14. package/dist/cli/commands/show.js +99 -0
  15. package/dist/cli/commands/show.js.map +1 -0
  16. package/dist/cli/commands/stop.js +27 -0
  17. package/dist/cli/commands/stop.js.map +1 -0
  18. package/dist/cli/index.js +63 -0
  19. package/dist/cli/index.js.map +1 -0
  20. package/dist/config/config.js +26 -0
  21. package/dist/config/config.js.map +1 -0
  22. package/dist/config/paths.js +43 -0
  23. package/dist/config/paths.js.map +1 -0
  24. package/dist/core/capabilities.js +14 -0
  25. package/dist/core/capabilities.js.map +1 -0
  26. package/dist/core/driver.js +2 -0
  27. package/dist/core/driver.js.map +1 -0
  28. package/dist/core/errors.js +61 -0
  29. package/dist/core/errors.js.map +1 -0
  30. package/dist/core/events.js +10 -0
  31. package/dist/core/events.js.map +1 -0
  32. package/dist/core/session.js +33 -0
  33. package/dist/core/session.js.map +1 -0
  34. package/dist/daemon/daemon.js +534 -0
  35. package/dist/daemon/daemon.js.map +1 -0
  36. package/dist/daemon/ipc.js +292 -0
  37. package/dist/daemon/ipc.js.map +1 -0
  38. package/dist/daemon/process-manager.js +55 -0
  39. package/dist/daemon/process-manager.js.map +1 -0
  40. package/dist/daemon/protocol.js +2 -0
  41. package/dist/daemon/protocol.js.map +1 -0
  42. package/dist/drivers/claude/driver.js +247 -0
  43. package/dist/drivers/claude/driver.js.map +1 -0
  44. package/dist/drivers/claude/parser.js +184 -0
  45. package/dist/drivers/claude/parser.js.map +1 -0
  46. package/dist/drivers/codex/driver.js +241 -0
  47. package/dist/drivers/codex/driver.js.map +1 -0
  48. package/dist/drivers/codex/parser.js +184 -0
  49. package/dist/drivers/codex/parser.js.map +1 -0
  50. package/dist/drivers/helpers.js +85 -0
  51. package/dist/drivers/helpers.js.map +1 -0
  52. package/dist/drivers/omp/driver.js +372 -0
  53. package/dist/drivers/omp/driver.js.map +1 -0
  54. package/dist/drivers/opencode/driver.js +307 -0
  55. package/dist/drivers/opencode/driver.js.map +1 -0
  56. package/dist/drivers/registry.js +48 -0
  57. package/dist/drivers/registry.js.map +1 -0
  58. package/dist/git/diff.js +100 -0
  59. package/dist/git/diff.js.map +1 -0
  60. package/dist/git/repository.js +68 -0
  61. package/dist/git/repository.js.map +1 -0
  62. package/dist/git/worktree.js +89 -0
  63. package/dist/git/worktree.js.map +1 -0
  64. package/dist/store/database.js +85 -0
  65. package/dist/store/database.js.map +1 -0
  66. package/dist/store/events.js +39 -0
  67. package/dist/store/events.js.map +1 -0
  68. package/dist/store/sessions.js +128 -0
  69. package/dist/store/sessions.js.map +1 -0
  70. package/dist/utils/process.js +35 -0
  71. package/dist/utils/process.js.map +1 -0
  72. package/package.json +43 -0
@@ -0,0 +1,85 @@
1
+ import { spawn } from "node:child_process";
2
+ import { execFile } from "node:child_process";
3
+ import { promisify } from "node:util";
4
+ const execFileAsync = promisify(execFile);
5
+ export function spawnHarness(cmd, args, cwd, env) {
6
+ const proc = spawn(cmd, args, {
7
+ cwd,
8
+ env: { ...process.env, ...env },
9
+ stdio: ["pipe", "pipe", "pipe"],
10
+ });
11
+ return proc;
12
+ }
13
+ export async function detectBinary(cmd, versionArgs = ["--version"]) {
14
+ try {
15
+ const { stdout: whichOut } = await execFileAsync("which", [cmd]);
16
+ const path = whichOut.trim();
17
+ if (!path)
18
+ return { installed: false };
19
+ let version;
20
+ try {
21
+ const { stdout } = await execFileAsync(cmd, versionArgs, { timeout: 5000 });
22
+ version = stdout.trim().split("\n")[0].slice(0, 200);
23
+ }
24
+ catch {
25
+ try {
26
+ const { stdout } = await execFileAsync(cmd, ["--help"], { timeout: 5000 });
27
+ version = stdout.trim().split("\n")[0].slice(0, 200);
28
+ }
29
+ catch (e) {
30
+ version = undefined;
31
+ }
32
+ }
33
+ return { installed: true, path, version };
34
+ }
35
+ catch (e) {
36
+ // Try command -v fallback
37
+ try {
38
+ const { stdout } = await execFileAsync("bash", ["-lc", `command -v ${cmd}`], { timeout: 3000 });
39
+ if (stdout.trim()) {
40
+ return { installed: true, path: stdout.trim(), version: undefined };
41
+ }
42
+ }
43
+ catch { }
44
+ return { installed: false, error: e instanceof Error ? e.message : String(e) };
45
+ }
46
+ }
47
+ export function createLineReader(stream, onLine, onError) {
48
+ let buf = "";
49
+ const handler = (chunk) => {
50
+ buf += chunk.toString();
51
+ let idx;
52
+ while ((idx = buf.indexOf("\n")) >= 0) {
53
+ const line = buf.slice(0, idx).trim();
54
+ buf = buf.slice(idx + 1);
55
+ if (line) {
56
+ try {
57
+ onLine(line);
58
+ }
59
+ catch (e) {
60
+ onError?.(e);
61
+ }
62
+ }
63
+ }
64
+ };
65
+ stream.on("data", handler);
66
+ const cleanup = () => {
67
+ stream.off("data", handler);
68
+ if (buf.trim()) {
69
+ try {
70
+ onLine(buf.trim());
71
+ }
72
+ catch { }
73
+ }
74
+ };
75
+ return cleanup;
76
+ }
77
+ export function safeJsonParse(s) {
78
+ try {
79
+ return JSON.parse(s);
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/drivers/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,372 @@
1
+ import { spawn } from "node:child_process";
2
+ import { detectBinary, createLineReader } from "../helpers.js";
3
+ import { EventEmitter } from "node:events";
4
+ function parseOmpLine(line, sessionId) {
5
+ let obj;
6
+ try {
7
+ obj = JSON.parse(line);
8
+ }
9
+ catch {
10
+ return [];
11
+ }
12
+ const ts = new Date().toISOString();
13
+ const raw = obj;
14
+ const events = [];
15
+ // OMP RPC mode emits JSON objects with type field
16
+ // Observed rpc mode may emit {"type":"text","text":"..."} etc.
17
+ // Handle generic
18
+ if (obj.error) {
19
+ events.push({
20
+ type: "session.failed",
21
+ sessionId,
22
+ timestamp: ts,
23
+ error: typeof obj.error === "string" ? obj.error : obj.error.message || JSON.stringify(obj.error),
24
+ raw,
25
+ });
26
+ return events;
27
+ }
28
+ if (obj.type === "session.started" || obj.type === "session_created") {
29
+ events.push({
30
+ type: "session.started",
31
+ sessionId,
32
+ timestamp: ts,
33
+ nativeSessionId: obj.session_id || obj.sessionID || obj.id,
34
+ raw,
35
+ });
36
+ return events;
37
+ }
38
+ if (obj.type === "assistant" || obj.type === "message") {
39
+ const content = obj.content || obj.text || obj.delta || "";
40
+ if (content) {
41
+ events.push({
42
+ type: "message",
43
+ sessionId,
44
+ timestamp: ts,
45
+ role: "assistant",
46
+ content: String(content),
47
+ raw,
48
+ });
49
+ }
50
+ return events;
51
+ }
52
+ if (obj.type === "text_delta" || obj.type === "text.delta") {
53
+ events.push({
54
+ type: "text.delta",
55
+ sessionId,
56
+ timestamp: ts,
57
+ delta: String(obj.delta || obj.text || ""),
58
+ raw,
59
+ });
60
+ return events;
61
+ }
62
+ if (obj.type === "tool.started" || obj.type === "tool_use") {
63
+ events.push({
64
+ type: "tool.started",
65
+ sessionId,
66
+ timestamp: ts,
67
+ tool: { name: obj.name || obj.tool || "tool", id: obj.id, input: obj.input },
68
+ raw,
69
+ });
70
+ return events;
71
+ }
72
+ if (obj.type === "tool.completed" || obj.type === "tool_result") {
73
+ events.push({
74
+ type: "tool.completed",
75
+ sessionId,
76
+ timestamp: ts,
77
+ tool: { name: obj.name || "tool", id: obj.id, output: obj.output, success: !obj.is_error },
78
+ raw,
79
+ });
80
+ return events;
81
+ }
82
+ if (obj.type === "usage" || obj.type === "usage.updated") {
83
+ events.push({
84
+ type: "usage.updated",
85
+ sessionId,
86
+ timestamp: ts,
87
+ usage: {
88
+ inputTokens: obj.input_tokens || obj.inputTokens,
89
+ outputTokens: obj.output_tokens || obj.outputTokens,
90
+ cost: obj.cost,
91
+ },
92
+ raw,
93
+ });
94
+ return events;
95
+ }
96
+ if (obj.type === "session.completed" || obj.type === "done" || obj.type === "result") {
97
+ const isError = obj.is_error || obj.error;
98
+ if (isError) {
99
+ events.push({
100
+ type: "session.failed",
101
+ sessionId,
102
+ timestamp: ts,
103
+ error: obj.error || obj.result || "OMP failed",
104
+ raw,
105
+ });
106
+ }
107
+ else {
108
+ if (obj.result && typeof obj.result === "string") {
109
+ events.push({
110
+ type: "message",
111
+ sessionId,
112
+ timestamp: ts,
113
+ role: "assistant",
114
+ content: obj.result,
115
+ raw,
116
+ });
117
+ }
118
+ events.push({
119
+ type: "session.completed",
120
+ sessionId,
121
+ timestamp: ts,
122
+ reason: "completed",
123
+ raw,
124
+ });
125
+ }
126
+ return events;
127
+ }
128
+ // If raw contains text field and session
129
+ if (obj.text && typeof obj.text === "string") {
130
+ events.push({
131
+ type: "message",
132
+ sessionId,
133
+ timestamp: ts,
134
+ role: "assistant",
135
+ content: obj.text,
136
+ raw,
137
+ });
138
+ return events;
139
+ }
140
+ // Unknown: try to treat method field for JSON-RPC
141
+ if (obj.method) {
142
+ // JSON-RPC notification? Example: {"jsonrpc":"2.0","method":"display","params":{...}}
143
+ if (obj.params?.text) {
144
+ events.push({
145
+ type: "text.delta",
146
+ sessionId,
147
+ timestamp: ts,
148
+ delta: String(obj.params.text),
149
+ raw,
150
+ });
151
+ }
152
+ return events;
153
+ }
154
+ return [];
155
+ }
156
+ export class OmpDriver {
157
+ id = "omp";
158
+ handles = new Map();
159
+ capabilities() {
160
+ return {
161
+ streaming: true,
162
+ resume: true,
163
+ fork: false,
164
+ approvals: true,
165
+ usage: true,
166
+ cost: true,
167
+ modelSelection: true,
168
+ nativeDiff: false,
169
+ interrupt: true,
170
+ };
171
+ }
172
+ async detect() {
173
+ const res = await detectBinary("omp");
174
+ if (!res.installed) {
175
+ // Also try pi binary? OMP may be installed as pi?
176
+ const res2 = await detectBinary("pi");
177
+ if (!res2.installed)
178
+ return { installed: false, error: "omp/pi binary not found" };
179
+ return { installed: true, path: res2.path, version: res2.version, details: "omp via pi binary" };
180
+ }
181
+ return { installed: true, path: res.path, version: res.version, details: "omp --mode rpc" };
182
+ }
183
+ async start(options) {
184
+ // Use omp --mode rpc --print for non-interactive? But spec says prefer --mode rpc with NDJSON
185
+ // For MVP we use: omp --mode json -p "prompt" (print mode with json?)
186
+ // Let's use: omp --mode rpc -p "prompt" and capture output; fallback to text mode
187
+ // Simpler: Use omp --mode json -p "prompt" if rpc not available
188
+ // We'll try omp --mode rpc -p "prompt" first; if fails, fallback to omp -p
189
+ const baseArgs = [];
190
+ // Determine args based on resume
191
+ let args;
192
+ if (options.resumeSessionId) {
193
+ // OMP resume: omp --resume <id> --mode rpc -p "prompt"
194
+ args = ["--resume", options.resumeSessionId, "--mode", "rpc", "-p", options.prompt];
195
+ }
196
+ else {
197
+ args = ["--mode", "rpc", "-p", options.prompt];
198
+ }
199
+ if (options.model) {
200
+ args.unshift("--model", options.model);
201
+ // Actually model flag should be before --mode? order doesn't matter much
202
+ }
203
+ const proc = spawn("omp", args, {
204
+ cwd: options.cwd,
205
+ env: { ...process.env },
206
+ stdio: ["pipe", "pipe", "pipe"],
207
+ });
208
+ proc.stdin?.end();
209
+ const emitter = new EventEmitter();
210
+ const buffer = [];
211
+ let nativeId = options.resumeSessionId;
212
+ let done = false;
213
+ let exitCode = null;
214
+ const push = (ev) => {
215
+ ev.sessionId = options.sessionId;
216
+ if (ev.nativeSessionId)
217
+ nativeId = ev.nativeSessionId;
218
+ if (ev.raw?.session_id)
219
+ nativeId = ev.raw.session_id;
220
+ if (ev.raw?.sessionID)
221
+ nativeId = ev.raw.sessionID;
222
+ buffer.push(ev);
223
+ emitter.emit("event", ev);
224
+ };
225
+ createLineReader(proc.stdout, (line) => {
226
+ const evs = parseOmpLine(line, options.sessionId);
227
+ for (const ev of evs)
228
+ push(ev);
229
+ // Try to salvage session id
230
+ try {
231
+ const obj = JSON.parse(line);
232
+ if (obj.session_id && !nativeId)
233
+ nativeId = obj.session_id;
234
+ if (obj.sessionID && !nativeId)
235
+ nativeId = obj.sessionID;
236
+ // Sometimes omp rpc emits {"id":"...","result":{...}}
237
+ }
238
+ catch {
239
+ // If not JSON, treat as text delta?
240
+ if (line.trim()) {
241
+ push({
242
+ type: "text.delta",
243
+ sessionId: options.sessionId,
244
+ timestamp: new Date().toISOString(),
245
+ delta: line + "\n",
246
+ raw: line,
247
+ });
248
+ }
249
+ }
250
+ });
251
+ let stderrBuf = "";
252
+ proc.stderr?.on("data", (c) => (stderrBuf += c.toString()));
253
+ proc.on("close", (code) => {
254
+ exitCode = code;
255
+ done = true;
256
+ const hasTerminal = buffer.some((e) => e.type === "session.completed" || e.type === "session.failed");
257
+ if (!hasTerminal) {
258
+ // If we got text but no terminal, emit completed
259
+ const hasMessage = buffer.some((e) => e.type === "message" || e.type === "text.delta");
260
+ if (code === 0) {
261
+ if (!hasMessage && stderrBuf.trim()) {
262
+ // May have printed to stderr?
263
+ }
264
+ push({
265
+ type: "session.completed",
266
+ sessionId: options.sessionId,
267
+ timestamp: new Date().toISOString(),
268
+ reason: "exit 0",
269
+ exitCode: 0,
270
+ raw: { stderr: stderrBuf.slice(0, 2000) },
271
+ });
272
+ }
273
+ else {
274
+ push({
275
+ type: "session.failed",
276
+ sessionId: options.sessionId,
277
+ timestamp: new Date().toISOString(),
278
+ error: stderrBuf.slice(0, 2000) || `OMP exited with code ${code}`,
279
+ exitCode: code ?? 1,
280
+ raw: { stderr: stderrBuf.slice(0, 2000) },
281
+ });
282
+ }
283
+ }
284
+ emitter.emit("done");
285
+ });
286
+ proc.on("error", (err) => {
287
+ push({
288
+ type: "session.failed",
289
+ sessionId: options.sessionId,
290
+ timestamp: new Date().toISOString(),
291
+ error: err.message,
292
+ raw: err,
293
+ });
294
+ done = true;
295
+ emitter.emit("done");
296
+ });
297
+ const handle = { proc, emitter, buffer, done, exitCode, nativeSessionId: nativeId };
298
+ this.handles.set(options.sessionId, handle);
299
+ return {
300
+ id: options.sessionId,
301
+ nativeSessionId: nativeId,
302
+ pid: proc.pid,
303
+ cwd: options.cwd,
304
+ model: options.model,
305
+ handle,
306
+ };
307
+ }
308
+ async send(session, message) {
309
+ const h = this.handles.get(session.id);
310
+ let nativeId = session.nativeSessionId || h?.nativeSessionId;
311
+ if (!nativeId)
312
+ throw new Error("No native session id for OMP resume");
313
+ const newSession = await this.start({
314
+ sessionId: session.id,
315
+ prompt: message,
316
+ cwd: session.cwd,
317
+ model: session.model,
318
+ resumeSessionId: nativeId,
319
+ });
320
+ session.pid = newSession.pid;
321
+ session.handle = newSession.handle;
322
+ }
323
+ async stop(session) {
324
+ const h = this.handles.get(session.id);
325
+ const proc = (h?.proc ?? session.handle?.proc);
326
+ if (!proc || proc.killed)
327
+ return;
328
+ try {
329
+ proc.kill("SIGTERM");
330
+ await new Promise((resolve) => {
331
+ let done = false;
332
+ const t = setTimeout(() => { if (!done) {
333
+ try {
334
+ proc.kill("SIGKILL");
335
+ }
336
+ catch { }
337
+ ;
338
+ done = true;
339
+ resolve();
340
+ } }, 3000);
341
+ proc.once("close", () => { if (!done) {
342
+ clearTimeout(t);
343
+ done = true;
344
+ resolve();
345
+ } });
346
+ });
347
+ }
348
+ catch { }
349
+ }
350
+ async *events(session) {
351
+ const h = this.handles.get(session.id);
352
+ if (!h)
353
+ return;
354
+ let idx = 0;
355
+ while (true) {
356
+ while (idx < h.buffer.length)
357
+ yield h.buffer[idx++];
358
+ if (h.done && idx >= h.buffer.length)
359
+ break;
360
+ await new Promise((resolve) => {
361
+ const onEvent = () => { h.emitter.off("event", onEvent); h.emitter.off("done", onDone); resolve(); };
362
+ const onDone = () => { h.emitter.off("event", onEvent); h.emitter.off("done", onDone); resolve(); };
363
+ h.emitter.once("event", onEvent);
364
+ h.emitter.once("done", onDone);
365
+ });
366
+ }
367
+ }
368
+ getHandle(sessionId) {
369
+ return this.handles.get(sessionId);
370
+ }
371
+ }
372
+ //# sourceMappingURL=driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/drivers/omp/driver.ts"],"names":[],"mappings":"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"}