meldivo 1.0.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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/THIRD_PARTY_NOTICES.md +59 -0
  4. package/bin/meldivo.mjs +514 -0
  5. package/dist/server/harnesses/claude.js +407 -0
  6. package/dist/server/harnesses/claude.js.map +1 -0
  7. package/dist/server/harnesses/index.js +27 -0
  8. package/dist/server/harnesses/index.js.map +1 -0
  9. package/dist/server/harnesses/opencode.js +391 -0
  10. package/dist/server/harnesses/opencode.js.map +1 -0
  11. package/dist/server/harnesses/pi.js +364 -0
  12. package/dist/server/harnesses/pi.js.map +1 -0
  13. package/dist/server/harnesses/types.js +2 -0
  14. package/dist/server/harnesses/types.js.map +1 -0
  15. package/dist/server/hub.js +126 -0
  16. package/dist/server/hub.js.map +1 -0
  17. package/dist/server/index.js +515 -0
  18. package/dist/server/index.js.map +1 -0
  19. package/dist/server/logger.js +98 -0
  20. package/dist/server/logger.js.map +1 -0
  21. package/dist/server/qr.js +16 -0
  22. package/dist/server/qr.js.map +1 -0
  23. package/dist/server/remote.js +166 -0
  24. package/dist/server/remote.js.map +1 -0
  25. package/dist/server/speech.js +323 -0
  26. package/dist/server/speech.js.map +1 -0
  27. package/dist/server/state.js +91 -0
  28. package/dist/server/state.js.map +1 -0
  29. package/dist/web/apple-touch-icon.png +0 -0
  30. package/dist/web/assets/_commonjsHelpers-CqkleIqs.js +1 -0
  31. package/dist/web/assets/browser-CujOq0-h.js +8 -0
  32. package/dist/web/assets/index-B1UGHGdh.css +1 -0
  33. package/dist/web/assets/index-CNq_igvY.js +43 -0
  34. package/dist/web/assets/index-CeWj4ejR.js +2948 -0
  35. package/dist/web/favicon-32.png +0 -0
  36. package/dist/web/index.html +15 -0
  37. package/dist/web/logo-192.png +0 -0
  38. package/dist/web/logo-512.png +0 -0
  39. package/dist/web/voice-assets/ort-wasm-simd-threaded.mjs +59 -0
  40. package/dist/web/voice-assets/ort-wasm-simd-threaded.wasm +0 -0
  41. package/dist/web/voice-assets/silero_vad_v5.onnx +0 -0
  42. package/dist/web/voice-assets/vad.worklet.bundle.min.js +1 -0
  43. package/package.json +78 -0
@@ -0,0 +1,407 @@
1
+ import { spawn } from "node:child_process";
2
+ import { closeSync, existsSync, openSync, readdirSync, readFileSync, readSync, statSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import path from "node:path";
5
+ import { createInterface } from "node:readline";
6
+ const TAIL_BYTES = 64 * 1024;
7
+ const HEAD_BYTES = 32 * 1024;
8
+ /** True if `pid` refers to a currently-running process. */
9
+ function pidAlive(pid) {
10
+ if (process.platform === "darwin") {
11
+ try {
12
+ process.kill(pid, 0);
13
+ return true;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ return existsSync(`/proc/${pid}`);
20
+ }
21
+ function isRealUserText(content) {
22
+ let text;
23
+ if (typeof content === "string") {
24
+ text = content;
25
+ }
26
+ else if (Array.isArray(content)) {
27
+ for (const block of content) {
28
+ if (block && typeof block === "object" && block.type === "text") {
29
+ text = block.text;
30
+ if (text)
31
+ break;
32
+ }
33
+ }
34
+ }
35
+ if (!text)
36
+ return undefined;
37
+ const trimmed = text.trim();
38
+ if (!trimmed)
39
+ return undefined;
40
+ if (trimmed.startsWith("<command-") ||
41
+ trimmed.startsWith("<local-command") ||
42
+ trimmed.startsWith("<system-reminder>")) {
43
+ return undefined;
44
+ }
45
+ return trimmed;
46
+ }
47
+ /** Reads the last `maxBytes` of a file as text (or the whole file if smaller). */
48
+ function readTail(file, maxBytes) {
49
+ const size = statSync(file).size;
50
+ const start = Math.max(0, size - maxBytes);
51
+ const fd = openSync(file, "r");
52
+ try {
53
+ const len = size - start;
54
+ const buf = Buffer.alloc(len);
55
+ readSync(fd, buf, 0, len, start);
56
+ return buf.toString("utf8");
57
+ }
58
+ finally {
59
+ closeSync(fd);
60
+ }
61
+ }
62
+ function readHead(file, maxBytes) {
63
+ const fd = openSync(file, "r");
64
+ try {
65
+ const size = statSync(file).size;
66
+ const len = Math.min(size, maxBytes);
67
+ const buf = Buffer.alloc(len);
68
+ readSync(fd, buf, 0, len, 0);
69
+ return buf.toString("utf8");
70
+ }
71
+ finally {
72
+ closeSync(fd);
73
+ }
74
+ }
75
+ function parseLines(text) {
76
+ const out = [];
77
+ for (const line of text.split("\n")) {
78
+ const trimmed = line.trim();
79
+ if (!trimmed)
80
+ continue;
81
+ try {
82
+ out.push(JSON.parse(trimmed));
83
+ }
84
+ catch {
85
+ // partial line at a chunk boundary; skip
86
+ }
87
+ }
88
+ return out;
89
+ }
90
+ function parseSessionFile(file) {
91
+ let stat;
92
+ try {
93
+ stat = statSync(file);
94
+ }
95
+ catch {
96
+ return undefined;
97
+ }
98
+ if (!stat.isFile())
99
+ return undefined;
100
+ const head = readHead(file, HEAD_BYTES);
101
+ const tail = stat.size > HEAD_BYTES ? readTail(file, TAIL_BYTES) : head;
102
+ const headLines = parseLines(head);
103
+ const tailLines = stat.size > HEAD_BYTES ? parseLines(tail) : headLines;
104
+ let cwd;
105
+ let id;
106
+ let firstUserText;
107
+ for (const raw of headLines) {
108
+ const line = raw;
109
+ if (!cwd && typeof line.cwd === "string")
110
+ cwd = line.cwd;
111
+ if (!id && typeof line.sessionId === "string")
112
+ id = line.sessionId;
113
+ if (firstUserText === undefined &&
114
+ line.type === "user" &&
115
+ line.isMeta !== true &&
116
+ line.message &&
117
+ typeof line.message === "object") {
118
+ const text = isRealUserText(line.message.content);
119
+ if (text)
120
+ firstUserText = text;
121
+ }
122
+ }
123
+ // In case cwd/id weren't in the head (unlikely for the header/first turn), scan tail too.
124
+ if (!cwd || !id) {
125
+ for (const raw of tailLines) {
126
+ const line = raw;
127
+ if (!cwd && typeof line.cwd === "string")
128
+ cwd = line.cwd;
129
+ if (!id && typeof line.sessionId === "string")
130
+ id = line.sessionId;
131
+ }
132
+ }
133
+ let customTitle;
134
+ let aiTitle;
135
+ let model;
136
+ for (const raw of tailLines) {
137
+ const line = raw;
138
+ if (line.type === "custom-title" && typeof line.customTitle === "string") {
139
+ customTitle = line.customTitle;
140
+ }
141
+ if (line.type === "ai-title" && typeof line.aiTitle === "string") {
142
+ aiTitle = line.aiTitle;
143
+ }
144
+ if (line.type === "assistant" && line.message && typeof line.message === "object") {
145
+ const m = line.message.model;
146
+ if (typeof m === "string")
147
+ model = m;
148
+ }
149
+ }
150
+ if (!id) {
151
+ id = path.basename(file, ".jsonl");
152
+ }
153
+ if (!cwd)
154
+ return undefined;
155
+ const title = customTitle ?? aiTitle ?? firstUserText ?? "(untitled)";
156
+ return {
157
+ id,
158
+ title,
159
+ cwd,
160
+ updatedAt: stat.mtimeMs,
161
+ model,
162
+ };
163
+ }
164
+ function readOpenSessions(home) {
165
+ const dir = path.join(home, ".claude", "sessions");
166
+ const result = new Map();
167
+ let entries;
168
+ try {
169
+ entries = readdirSync(dir);
170
+ }
171
+ catch {
172
+ return result;
173
+ }
174
+ for (const entry of entries) {
175
+ if (!entry.endsWith(".json"))
176
+ continue;
177
+ const pidStr = entry.split(".")[0];
178
+ const pid = Number(pidStr);
179
+ if (!Number.isFinite(pid))
180
+ continue;
181
+ try {
182
+ const data = JSON.parse(readFileSync(path.join(dir, entry), "utf8"));
183
+ if (!data.sessionId)
184
+ continue;
185
+ if (!pidAlive(pid))
186
+ continue;
187
+ result.set(data.sessionId, { sessionId: data.sessionId, busy: data.status === "busy" });
188
+ }
189
+ catch {
190
+ // ignore malformed/racy status files
191
+ }
192
+ }
193
+ return result;
194
+ }
195
+ export function createClaudeAdapter(options = {}) {
196
+ const home = options.home ?? homedir();
197
+ const bin = options.bin ?? "claude";
198
+ const projectsDir = path.join(home, ".claude", "projects");
199
+ let availableCache;
200
+ async function checkAvailable() {
201
+ return new Promise((resolve) => {
202
+ const child = spawn(bin, ["--version"], { stdio: "ignore" });
203
+ child.on("error", () => resolve(false));
204
+ child.on("exit", (code) => resolve(code === 0));
205
+ });
206
+ }
207
+ return {
208
+ id: "claude",
209
+ label: "Claude Code",
210
+ async available() {
211
+ const now = Date.now();
212
+ if (availableCache && now - availableCache.at < 60_000)
213
+ return availableCache.value;
214
+ const value = await checkAvailable();
215
+ availableCache = { value, at: now };
216
+ return value;
217
+ },
218
+ async listSessions(limit) {
219
+ let projectDirs;
220
+ try {
221
+ projectDirs = readdirSync(projectsDir);
222
+ }
223
+ catch {
224
+ return [];
225
+ }
226
+ const files = [];
227
+ for (const projectDir of projectDirs) {
228
+ const full = path.join(projectsDir, projectDir);
229
+ let stat;
230
+ try {
231
+ stat = statSync(full);
232
+ }
233
+ catch {
234
+ continue;
235
+ }
236
+ if (!stat.isDirectory())
237
+ continue;
238
+ let sessionFiles;
239
+ try {
240
+ sessionFiles = readdirSync(full);
241
+ }
242
+ catch {
243
+ continue;
244
+ }
245
+ for (const sf of sessionFiles) {
246
+ if (sf.endsWith(".jsonl"))
247
+ files.push(path.join(full, sf));
248
+ }
249
+ }
250
+ const withMtime = files
251
+ .map((file) => {
252
+ try {
253
+ return { file, mtimeMs: statSync(file).mtimeMs };
254
+ }
255
+ catch {
256
+ return undefined;
257
+ }
258
+ })
259
+ .filter((v) => v !== undefined)
260
+ .sort((a, b) => b.mtimeMs - a.mtimeMs);
261
+ const capped = limit ? withMtime.slice(0, limit) : withMtime;
262
+ const openSessions = readOpenSessions(home);
263
+ const sessions = [];
264
+ for (const { file } of capped) {
265
+ const parsed = parseSessionFile(file);
266
+ if (!parsed)
267
+ continue;
268
+ const openEntry = openSessions.get(parsed.id);
269
+ sessions.push({
270
+ key: `claude:${parsed.id}`,
271
+ harness: "claude",
272
+ id: parsed.id,
273
+ title: parsed.title,
274
+ cwd: parsed.cwd,
275
+ updatedAt: parsed.updatedAt,
276
+ open: openEntry !== undefined,
277
+ busy: openEntry?.busy,
278
+ model: parsed.model,
279
+ });
280
+ }
281
+ sessions.sort((a, b) => b.updatedAt - a.updatedAt);
282
+ return limit ? sessions.slice(0, limit) : sessions;
283
+ },
284
+ async *send(target, text, signal) {
285
+ const args = ["-p"];
286
+ if (target.id) {
287
+ args.push("--resume", target.id);
288
+ if (target.fork)
289
+ args.push("--fork-session");
290
+ }
291
+ args.push("--output-format", "stream-json", "--verbose", "--include-partial-messages", "--permission-mode", "acceptEdits");
292
+ if (target.model)
293
+ args.push("--model", target.model);
294
+ args.push(text);
295
+ const child = spawn(bin, args, {
296
+ cwd: target.cwd,
297
+ stdio: ["ignore", "pipe", "pipe"],
298
+ });
299
+ const onAbort = () => {
300
+ child.kill("SIGTERM");
301
+ };
302
+ signal.addEventListener("abort", onAbort, { once: true });
303
+ let stderrTail = "";
304
+ child.stderr.on("data", (chunk) => {
305
+ stderrTail = (stderrTail + chunk.toString("utf8")).slice(-4000);
306
+ });
307
+ const rl = createInterface({ input: child.stdout });
308
+ const events = [];
309
+ let resolveNext;
310
+ let ended = false;
311
+ let exitCode = null;
312
+ let sessionEmitted = false;
313
+ rl.on("line", (line) => {
314
+ const trimmed = line.trim();
315
+ if (!trimmed)
316
+ return;
317
+ let obj;
318
+ try {
319
+ obj = JSON.parse(trimmed);
320
+ }
321
+ catch {
322
+ return;
323
+ }
324
+ const type = obj.type;
325
+ if (type === "system" && typeof obj.session_id === "string") {
326
+ if (!sessionEmitted) {
327
+ sessionEmitted = true;
328
+ events.push({ type: "session", id: obj.session_id });
329
+ }
330
+ }
331
+ else if (type === "stream_event") {
332
+ const event = obj.event;
333
+ if (event?.type === "content_block_delta") {
334
+ const delta = event.delta;
335
+ if (delta?.type === "text_delta" && typeof delta.text === "string") {
336
+ events.push({ type: "delta", text: delta.text });
337
+ }
338
+ }
339
+ }
340
+ else if (type === "assistant") {
341
+ const message = obj.message;
342
+ const content = message?.content;
343
+ if (Array.isArray(content)) {
344
+ for (const block of content) {
345
+ if (block && typeof block === "object" && block.type === "tool_use") {
346
+ const name = block.name;
347
+ if (typeof name === "string")
348
+ events.push({ type: "tool", name });
349
+ }
350
+ }
351
+ }
352
+ }
353
+ else if (type === "result") {
354
+ const denials = obj.permission_denials;
355
+ if (Array.isArray(denials) && denials.length > 0) {
356
+ events.push({ type: "notice", message: "a tool call was denied because no one could approve it" });
357
+ }
358
+ if (obj.is_error) {
359
+ const msg = typeof obj.result === "string" ? obj.result : "claude reported an error";
360
+ events.push({ type: "error", message: msg });
361
+ }
362
+ }
363
+ resolveNext?.();
364
+ });
365
+ const exitPromise = new Promise((resolve) => {
366
+ child.on("close", (code) => {
367
+ exitCode = code;
368
+ ended = true;
369
+ resolveNext?.();
370
+ resolve();
371
+ });
372
+ child.on("error", (err) => {
373
+ stderrTail += `\n${String(err)}`;
374
+ exitCode = -1;
375
+ ended = true;
376
+ resolveNext?.();
377
+ resolve();
378
+ });
379
+ });
380
+ try {
381
+ while (true) {
382
+ while (events.length > 0) {
383
+ yield events.shift();
384
+ }
385
+ if (ended)
386
+ break;
387
+ await new Promise((resolve) => {
388
+ resolveNext = resolve;
389
+ });
390
+ }
391
+ await exitPromise;
392
+ while (events.length > 0) {
393
+ yield events.shift();
394
+ }
395
+ if (exitCode !== 0 && exitCode !== null) {
396
+ yield { type: "error", message: stderrTail.trim() || `claude exited with code ${exitCode}` };
397
+ }
398
+ }
399
+ finally {
400
+ signal.removeEventListener("abort", onAbort);
401
+ rl.close();
402
+ yield { type: "done" };
403
+ }
404
+ },
405
+ };
406
+ }
407
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../server/src/harnesses/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { createClaudeAdapter } from "./claude.js";
2
+ import { createOpenCodeAdapter, openCodeLivePort } from "./opencode.js";
3
+ import { createPiAdapter } from "./pi.js";
4
+ export { createClaudeAdapter, createOpenCodeAdapter, createPiAdapter, openCodeLivePort };
5
+ /** Builds the three harness adapters in fallback order [pi, opencode, claude]. */
6
+ export function createAdapters(options = {}) {
7
+ const { home, bins } = options;
8
+ return [
9
+ createPiAdapter({ home, bin: bins?.pi }),
10
+ createOpenCodeAdapter({ home, bin: bins?.opencode }),
11
+ createClaudeAdapter({ home, bin: bins?.claude }),
12
+ ];
13
+ }
14
+ /** Lists sessions across all adapters, merged and sorted most-recently-updated first. */
15
+ export async function listAllSessions(adapters, limit) {
16
+ const perAdapter = await Promise.all(adapters.map(async (adapter) => {
17
+ try {
18
+ return await adapter.listSessions(limit);
19
+ }
20
+ catch {
21
+ return [];
22
+ }
23
+ }));
24
+ const merged = perAdapter.flat().sort((a, b) => b.updatedAt - a.updatedAt);
25
+ return limit ? merged.slice(0, limit) : merged;
26
+ }
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/src/harnesses/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI1C,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC;AASzF,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAC/B,OAAO;QACL,eAAe,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACxC,qBAAqB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACpD,mBAAmB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAA0B,EAAE,KAAc;IAC9E,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC"}