@gulbanana/jagman 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +663 -0
- package/README.md +40 -0
- package/bin/jagman.js +35 -0
- package/build/client/_app/immutable/assets/0.B3c8us65.css +1 -0
- package/build/client/_app/immutable/assets/0.B3c8us65.css.br +0 -0
- package/build/client/_app/immutable/assets/0.B3c8us65.css.gz +0 -0
- package/build/client/_app/immutable/assets/2.QhF3SmLf.css +1 -0
- package/build/client/_app/immutable/assets/2.QhF3SmLf.css.br +0 -0
- package/build/client/_app/immutable/assets/2.QhF3SmLf.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.BoAskxZr.css +1 -0
- package/build/client/_app/immutable/assets/4.BoAskxZr.css.br +0 -0
- package/build/client/_app/immutable/assets/4.BoAskxZr.css.gz +0 -0
- package/build/client/_app/immutable/assets/5.DYpN9IwI.css +1 -0
- package/build/client/_app/immutable/assets/5.DYpN9IwI.css.br +0 -0
- package/build/client/_app/immutable/assets/5.DYpN9IwI.css.gz +0 -0
- package/build/client/_app/immutable/assets/7.BBPBRqyF.css +1 -0
- package/build/client/_app/immutable/assets/7.BBPBRqyF.css.br +0 -0
- package/build/client/_app/immutable/assets/7.BBPBRqyF.css.gz +0 -0
- package/build/client/_app/immutable/assets/8.WP6ZlE0M.css +1 -0
- package/build/client/_app/immutable/assets/8.WP6ZlE0M.css.br +0 -0
- package/build/client/_app/immutable/assets/8.WP6ZlE0M.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.DH8YZ1_b.css +1 -0
- package/build/client/_app/immutable/assets/9.DH8YZ1_b.css.br +0 -0
- package/build/client/_app/immutable/assets/9.DH8YZ1_b.css.gz +0 -0
- package/build/client/_app/immutable/assets/ErrorSpan.BarpW_JY.css +1 -0
- package/build/client/_app/immutable/assets/ErrorSpan.BarpW_JY.css.br +0 -0
- package/build/client/_app/immutable/assets/ErrorSpan.BarpW_JY.css.gz +0 -0
- package/build/client/_app/immutable/assets/Icon.Di_GsCEs.css +1 -0
- package/build/client/_app/immutable/assets/Icon.Di_GsCEs.css.br +0 -0
- package/build/client/_app/immutable/assets/Icon.Di_GsCEs.css.gz +0 -0
- package/build/client/_app/immutable/assets/Pane.LvSW-vL-.css +1 -0
- package/build/client/_app/immutable/assets/Pane.LvSW-vL-.css.br +0 -0
- package/build/client/_app/immutable/assets/Pane.LvSW-vL-.css.gz +0 -0
- package/build/client/_app/immutable/assets/favicon.DGDeBov5.svg +191 -0
- package/build/client/_app/immutable/assets/favicon.DGDeBov5.svg.br +0 -0
- package/build/client/_app/immutable/assets/favicon.DGDeBov5.svg.gz +0 -0
- package/build/client/_app/immutable/assets/feather-sprite.BfIm3Xr9.svg +1 -0
- package/build/client/_app/immutable/assets/feather-sprite.BfIm3Xr9.svg.br +0 -0
- package/build/client/_app/immutable/assets/feather-sprite.BfIm3Xr9.svg.gz +0 -0
- package/build/client/_app/immutable/assets/gc-dark.DHisUerN.svg +101 -0
- package/build/client/_app/immutable/assets/gc-dark.DHisUerN.svg.br +0 -0
- package/build/client/_app/immutable/assets/gc-dark.DHisUerN.svg.gz +0 -0
- package/build/client/_app/immutable/assets/gc-light.C55NzigM.svg +100 -0
- package/build/client/_app/immutable/assets/gc-light.C55NzigM.svg.br +0 -0
- package/build/client/_app/immutable/assets/gc-light.C55NzigM.svg.gz +0 -0
- package/build/client/_app/immutable/chunks/B3ZkAhB4.js +1 -0
- package/build/client/_app/immutable/chunks/B3ZkAhB4.js.br +0 -0
- package/build/client/_app/immutable/chunks/B3ZkAhB4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B9tazVuH.js +2 -0
- package/build/client/_app/immutable/chunks/B9tazVuH.js.br +0 -0
- package/build/client/_app/immutable/chunks/B9tazVuH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BdkrN5mN.js +1 -0
- package/build/client/_app/immutable/chunks/BdkrN5mN.js.br +0 -0
- package/build/client/_app/immutable/chunks/BdkrN5mN.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ByNAvWKi.js +1 -0
- package/build/client/_app/immutable/chunks/ByNAvWKi.js.br +0 -0
- package/build/client/_app/immutable/chunks/ByNAvWKi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C8oOvULD.js +1 -0
- package/build/client/_app/immutable/chunks/C8oOvULD.js.br +0 -0
- package/build/client/_app/immutable/chunks/C8oOvULD.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CCH3sm1V.js +1 -0
- package/build/client/_app/immutable/chunks/CCH3sm1V.js.br +0 -0
- package/build/client/_app/immutable/chunks/CCH3sm1V.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CDD8JGhu.js +1 -0
- package/build/client/_app/immutable/chunks/CDD8JGhu.js.br +0 -0
- package/build/client/_app/immutable/chunks/CDD8JGhu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CKIpFoVh.js +1 -0
- package/build/client/_app/immutable/chunks/CKIpFoVh.js.br +0 -0
- package/build/client/_app/immutable/chunks/CKIpFoVh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CMyhPqp1.js +1 -0
- package/build/client/_app/immutable/chunks/CMyhPqp1.js.br +0 -0
- package/build/client/_app/immutable/chunks/CMyhPqp1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/COe4_SPO.js +1 -0
- package/build/client/_app/immutable/chunks/COe4_SPO.js.br +0 -0
- package/build/client/_app/immutable/chunks/COe4_SPO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CaZKc3PV.js +2 -0
- package/build/client/_app/immutable/chunks/CaZKc3PV.js.br +0 -0
- package/build/client/_app/immutable/chunks/CaZKc3PV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cj8zunyE.js +1 -0
- package/build/client/_app/immutable/chunks/Cj8zunyE.js.br +2 -0
- package/build/client/_app/immutable/chunks/Cj8zunyE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CvfIoSRb.js +1 -0
- package/build/client/_app/immutable/chunks/CvfIoSRb.js.br +0 -0
- package/build/client/_app/immutable/chunks/CvfIoSRb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DhBP0au1.js +1 -0
- package/build/client/_app/immutable/chunks/DhBP0au1.js.br +0 -0
- package/build/client/_app/immutable/chunks/DhBP0au1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/F2VqmO6x.js +1 -0
- package/build/client/_app/immutable/chunks/F2VqmO6x.js.br +0 -0
- package/build/client/_app/immutable/chunks/F2VqmO6x.js.gz +0 -0
- package/build/client/_app/immutable/chunks/hlNgmD7C.js +1 -0
- package/build/client/_app/immutable/chunks/hlNgmD7C.js.br +0 -0
- package/build/client/_app/immutable/chunks/hlNgmD7C.js.gz +0 -0
- package/build/client/_app/immutable/chunks/tW0gGpbB.js +2 -0
- package/build/client/_app/immutable/chunks/tW0gGpbB.js.br +0 -0
- package/build/client/_app/immutable/chunks/tW0gGpbB.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.BJglbmCx.js +2 -0
- package/build/client/_app/immutable/entry/app.BJglbmCx.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BJglbmCx.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.f6OGjaz6.js +1 -0
- package/build/client/_app/immutable/entry/start.f6OGjaz6.js.br +2 -0
- package/build/client/_app/immutable/entry/start.f6OGjaz6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.BcUb2smo.js +1 -0
- package/build/client/_app/immutable/nodes/0.BcUb2smo.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BcUb2smo.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.xem2AZVD.js +1 -0
- package/build/client/_app/immutable/nodes/1.xem2AZVD.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.xem2AZVD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.CDTJMs0M.js +1 -0
- package/build/client/_app/immutable/nodes/2.CDTJMs0M.js.br +1 -0
- package/build/client/_app/immutable/nodes/2.CDTJMs0M.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.Kr4ly1KY.js +1 -0
- package/build/client/_app/immutable/nodes/3.Kr4ly1KY.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.Kr4ly1KY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.CkrrNwwZ.js +1 -0
- package/build/client/_app/immutable/nodes/4.CkrrNwwZ.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CkrrNwwZ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.Ck9pAYWh.js +3 -0
- package/build/client/_app/immutable/nodes/5.Ck9pAYWh.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.Ck9pAYWh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BZru-VFo.js +1 -0
- package/build/client/_app/immutable/nodes/6.BZru-VFo.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BZru-VFo.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.DQKVlDfB.js +1 -0
- package/build/client/_app/immutable/nodes/7.DQKVlDfB.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.DQKVlDfB.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.CRaTbcsI.js +1 -0
- package/build/client/_app/immutable/nodes/8.CRaTbcsI.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.CRaTbcsI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.ZY9fPTpH.js +1 -0
- package/build/client/_app/immutable/nodes/9.ZY9fPTpH.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.ZY9fPTpH.js.gz +0 -0
- package/build/client/_app/version.json +1 -0
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/env.js +94 -0
- package/build/handler.js +1494 -0
- package/build/index.js +345 -0
- package/build/server/chunks/0-DFKHNL47.js +9 -0
- package/build/server/chunks/0-DFKHNL47.js.map +1 -0
- package/build/server/chunks/1-rBV5UzK8.js +9 -0
- package/build/server/chunks/1-rBV5UzK8.js.map +1 -0
- package/build/server/chunks/2-DNhpm2f0.js +9 -0
- package/build/server/chunks/2-DNhpm2f0.js.map +1 -0
- package/build/server/chunks/3-BriZP-4z.js +9 -0
- package/build/server/chunks/3-BriZP-4z.js.map +1 -0
- package/build/server/chunks/4-BRqbjiow.js +9 -0
- package/build/server/chunks/4-BRqbjiow.js.map +1 -0
- package/build/server/chunks/5-DxPUkn7K.js +9 -0
- package/build/server/chunks/5-DxPUkn7K.js.map +1 -0
- package/build/server/chunks/6-OQ8ks1e7.js +19 -0
- package/build/server/chunks/6-OQ8ks1e7.js.map +1 -0
- package/build/server/chunks/7-wbR5qPH1.js +9 -0
- package/build/server/chunks/7-wbR5qPH1.js.map +1 -0
- package/build/server/chunks/8-BL7_9qSi.js +9 -0
- package/build/server/chunks/8-BL7_9qSi.js.map +1 -0
- package/build/server/chunks/9-DC9G3Slz.js +9 -0
- package/build/server/chunks/9-DC9G3Slz.js.map +1 -0
- package/build/server/chunks/ErrorSpan-BSqKaGqG.js +9 -0
- package/build/server/chunks/ErrorSpan-BSqKaGqG.js.map +1 -0
- package/build/server/chunks/Icon-Dr5EwAkb.js +10 -0
- package/build/server/chunks/Icon-Dr5EwAkb.js.map +1 -0
- package/build/server/chunks/Pane-DcSwhEiL.js +41 -0
- package/build/server/chunks/Pane-DcSwhEiL.js.map +1 -0
- package/build/server/chunks/_error.svelte-Cw0MGN-r.js +18 -0
- package/build/server/chunks/_error.svelte-Cw0MGN-r.js.map +1 -0
- package/build/server/chunks/_layout.svelte-CFeu3znf.js +14 -0
- package/build/server/chunks/_layout.svelte-CFeu3znf.js.map +1 -0
- package/build/server/chunks/_layout.svelte-CQ3MtcgC.js +33 -0
- package/build/server/chunks/_layout.svelte-CQ3MtcgC.js.map +1 -0
- package/build/server/chunks/_layout.svelte-D_GQeKpE.js +9 -0
- package/build/server/chunks/_layout.svelte-D_GQeKpE.js.map +1 -0
- package/build/server/chunks/_page.svelte-C8O6i1zq.js +282 -0
- package/build/server/chunks/_page.svelte-C8O6i1zq.js.map +1 -0
- package/build/server/chunks/_page.svelte-CfJpXtNh.js +104 -0
- package/build/server/chunks/_page.svelte-CfJpXtNh.js.map +1 -0
- package/build/server/chunks/_page.svelte-CkpYjdBP.js +68 -0
- package/build/server/chunks/_page.svelte-CkpYjdBP.js.map +1 -0
- package/build/server/chunks/_page.svelte-DbAHpdpc.js +6 -0
- package/build/server/chunks/_page.svelte-DbAHpdpc.js.map +1 -0
- package/build/server/chunks/agent-C7A3zEr3.js +708 -0
- package/build/server/chunks/agent-C7A3zEr3.js.map +1 -0
- package/build/server/chunks/data.remote-3GWudL8p.js +28 -0
- package/build/server/chunks/data.remote-3GWudL8p.js.map +1 -0
- package/build/server/chunks/data.remote2-DPGOveFg.js +23 -0
- package/build/server/chunks/data.remote2-DPGOveFg.js.map +1 -0
- package/build/server/chunks/data.remote3-CDhxyD61.js +25 -0
- package/build/server/chunks/data.remote3-CDhxyD61.js.map +1 -0
- package/build/server/chunks/error.svelte-D0cH8izO.js +13 -0
- package/build/server/chunks/error.svelte-D0cH8izO.js.map +1 -0
- package/build/server/chunks/exports-DsGzTZ0S.js +121 -0
- package/build/server/chunks/exports-DsGzTZ0S.js.map +1 -0
- package/build/server/chunks/hooks.server-Cke-TrVc.js +14 -0
- package/build/server/chunks/hooks.server-Cke-TrVc.js.map +1 -0
- package/build/server/chunks/index-CoD1IJuy.js +190 -0
- package/build/server/chunks/index-CoD1IJuy.js.map +1 -0
- package/build/server/chunks/index-DwoWbz0A.js +1819 -0
- package/build/server/chunks/index-DwoWbz0A.js.map +1 -0
- package/build/server/chunks/index2-Ej5CkWKF.js +44 -0
- package/build/server/chunks/index2-Ej5CkWKF.js.map +1 -0
- package/build/server/chunks/mock-data-D8qN6SIX.js +18 -0
- package/build/server/chunks/mock-data-D8qN6SIX.js.map +1 -0
- package/build/server/chunks/opencode-vgZ5DMQ2.js +452 -0
- package/build/server/chunks/opencode-vgZ5DMQ2.js.map +1 -0
- package/build/server/chunks/remote-1jrju9-CYV2OBS9.js +16 -0
- package/build/server/chunks/remote-1jrju9-CYV2OBS9.js.map +1 -0
- package/build/server/chunks/remote-1t3e9fx-Bq2E-Huu.js +16 -0
- package/build/server/chunks/remote-1t3e9fx-Bq2E-Huu.js.map +1 -0
- package/build/server/chunks/remote-dsfuc2-DwI4AU9q.js +15 -0
- package/build/server/chunks/remote-dsfuc2-DwI4AU9q.js.map +1 -0
- package/build/server/chunks/root-C5lyo0VT.js +2906 -0
- package/build/server/chunks/root-C5lyo0VT.js.map +1 -0
- package/build/server/chunks/shared-bytReIJX.js +1236 -0
- package/build/server/chunks/shared-bytReIJX.js.map +1 -0
- package/build/server/index.js +4422 -0
- package/build/server/index.js.map +1 -0
- package/build/server/manifest.js +83 -0
- package/build/server/manifest.js.map +1 -0
- package/build/shims.js +32 -0
- package/package.json +70 -0
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
import { execFile, spawn, exec } from 'node:child_process';
|
|
2
|
+
import { createOpencodeClient } from '@opencode-ai/sdk';
|
|
3
|
+
import { readdir, readFile, readlink } from 'node:fs/promises';
|
|
4
|
+
import { basename, normalize } from 'node:path';
|
|
5
|
+
import { platform } from 'node:os';
|
|
6
|
+
|
|
7
|
+
const AGENT_NAMES = ["claude", "opencode"];
|
|
8
|
+
let cache = null;
|
|
9
|
+
const CACHE_TTL = 5e3;
|
|
10
|
+
async function getAgentProcesses() {
|
|
11
|
+
if (cache && Date.now() - cache.timestamp < CACHE_TTL) {
|
|
12
|
+
return cache.result;
|
|
13
|
+
}
|
|
14
|
+
let result;
|
|
15
|
+
try {
|
|
16
|
+
switch (platform()) {
|
|
17
|
+
case "win32":
|
|
18
|
+
result = await getWindowsProcesses();
|
|
19
|
+
break;
|
|
20
|
+
case "linux":
|
|
21
|
+
result = await getLinuxProcesses();
|
|
22
|
+
break;
|
|
23
|
+
case "darwin":
|
|
24
|
+
result = await getDarwinProcesses();
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
result = [];
|
|
28
|
+
}
|
|
29
|
+
} catch {
|
|
30
|
+
result = [];
|
|
31
|
+
}
|
|
32
|
+
cache = { timestamp: Date.now(), result };
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
function getWorkspacesWithAgent(processes, agentName, excludeCommandPattern) {
|
|
36
|
+
const workspaces = /* @__PURE__ */ new Set();
|
|
37
|
+
for (const proc of processes) {
|
|
38
|
+
if (proc.name !== agentName) continue;
|
|
39
|
+
if (excludeCommandPattern && excludeCommandPattern.test(proc.commandLine)) continue;
|
|
40
|
+
if (proc.cwd) {
|
|
41
|
+
workspaces.add(proc.cwd.toLowerCase());
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return workspaces;
|
|
45
|
+
}
|
|
46
|
+
function markExternalSessions(sessions, activeWorkspaces) {
|
|
47
|
+
const byWorkspace = /* @__PURE__ */ new Map();
|
|
48
|
+
for (const session of sessions) {
|
|
49
|
+
const key = session.workspace.toLowerCase();
|
|
50
|
+
let list = byWorkspace.get(key);
|
|
51
|
+
if (!list) {
|
|
52
|
+
list = [];
|
|
53
|
+
byWorkspace.set(key, list);
|
|
54
|
+
}
|
|
55
|
+
list.push(session);
|
|
56
|
+
}
|
|
57
|
+
for (const [workspace, workspaceSessions] of byWorkspace) {
|
|
58
|
+
if (!activeWorkspaces.has(workspace)) continue;
|
|
59
|
+
let mostRecent = null;
|
|
60
|
+
for (const s of workspaceSessions) {
|
|
61
|
+
if (s.status !== "inactive") continue;
|
|
62
|
+
if (!mostRecent || s.timestamp > mostRecent.timestamp) {
|
|
63
|
+
mostRecent = s;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (mostRecent) {
|
|
67
|
+
mostRecent.status = "external";
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function execAsync(command, timeout = 1e4) {
|
|
72
|
+
return new Promise((resolve, reject) => {
|
|
73
|
+
exec(command, { timeout }, (error, stdout) => {
|
|
74
|
+
if (error) return reject(error);
|
|
75
|
+
resolve(stdout);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const PS_SCRIPT = `
|
|
80
|
+
Add-Type -TypeDefinition @'
|
|
81
|
+
using System;
|
|
82
|
+
using System.Runtime.InteropServices;
|
|
83
|
+
|
|
84
|
+
public class JagmanProcCwd {
|
|
85
|
+
[DllImport("ntdll.dll")]
|
|
86
|
+
static extern int NtQueryInformationProcess(IntPtr h, int c, ref PBI p, int s, out int r);
|
|
87
|
+
[DllImport("kernel32.dll", SetLastError=true)]
|
|
88
|
+
static extern IntPtr OpenProcess(int a, bool b, int pid);
|
|
89
|
+
[DllImport("kernel32.dll", SetLastError=true)]
|
|
90
|
+
static extern bool ReadProcessMemory(IntPtr h, IntPtr addr, byte[] buf, int sz, out int read);
|
|
91
|
+
[DllImport("kernel32.dll")]
|
|
92
|
+
static extern bool CloseHandle(IntPtr h);
|
|
93
|
+
|
|
94
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
95
|
+
struct PBI { public IntPtr R1, Peb, R2a, R2b, Pid, R3; }
|
|
96
|
+
|
|
97
|
+
public static string Get(int pid) {
|
|
98
|
+
IntPtr h = OpenProcess(0x0410, false, pid);
|
|
99
|
+
if (h == IntPtr.Zero) return null;
|
|
100
|
+
try {
|
|
101
|
+
var pbi = new PBI(); int rl;
|
|
102
|
+
if (NtQueryInformationProcess(h, 0, ref pbi, Marshal.SizeOf(pbi), out rl) != 0) return null;
|
|
103
|
+
byte[] b = new byte[8]; int br;
|
|
104
|
+
if (!ReadProcessMemory(h, pbi.Peb + 0x20, b, 8, out br)) return null;
|
|
105
|
+
IntPtr pp = (IntPtr)BitConverter.ToInt64(b, 0);
|
|
106
|
+
byte[] us = new byte[16];
|
|
107
|
+
if (!ReadProcessMemory(h, pp + 0x38, us, 16, out br)) return null;
|
|
108
|
+
short len = BitConverter.ToInt16(us, 0);
|
|
109
|
+
IntPtr bp = (IntPtr)BitConverter.ToInt64(us, 8);
|
|
110
|
+
byte[] pb = new byte[len];
|
|
111
|
+
if (!ReadProcessMemory(h, bp, pb, len, out br)) return null;
|
|
112
|
+
return System.Text.Encoding.Unicode.GetString(pb).TrimEnd(new char[]{(char)92});
|
|
113
|
+
} finally { CloseHandle(h); }
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
'@ -ErrorAction SilentlyContinue
|
|
117
|
+
|
|
118
|
+
Get-CimInstance Win32_Process -Filter "Name='claude.exe' OR Name='opencode.exe'" | ForEach-Object {
|
|
119
|
+
$cwd = [JagmanProcCwd]::Get($_.ProcessId)
|
|
120
|
+
[PSCustomObject]@{ name=$_.Name; pid=[int]$_.ProcessId; cwd=$cwd; cmd=$_.CommandLine }
|
|
121
|
+
} | ConvertTo-Json -Compress
|
|
122
|
+
`;
|
|
123
|
+
async function getWindowsProcesses() {
|
|
124
|
+
const encoded = Buffer.from(PS_SCRIPT, "utf16le").toString("base64");
|
|
125
|
+
return new Promise((resolve) => {
|
|
126
|
+
execFile(
|
|
127
|
+
"powershell.exe",
|
|
128
|
+
["-NoProfile", "-ExecutionPolicy", "Bypass", "-EncodedCommand", encoded],
|
|
129
|
+
{ timeout: 15e3 },
|
|
130
|
+
(error, stdout) => {
|
|
131
|
+
if (error) {
|
|
132
|
+
resolve([]);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
const trimmed = stdout.trim();
|
|
137
|
+
if (!trimmed) {
|
|
138
|
+
resolve([]);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const raw = JSON.parse(trimmed);
|
|
142
|
+
const items = Array.isArray(raw) ? raw : [raw];
|
|
143
|
+
resolve(
|
|
144
|
+
items.filter((item) => item.cwd).map((item) => ({
|
|
145
|
+
name: item.name.replace(/\.exe$/i, "").toLowerCase(),
|
|
146
|
+
pid: item.pid,
|
|
147
|
+
cwd: normalize(item.cwd),
|
|
148
|
+
commandLine: item.cmd || ""
|
|
149
|
+
}))
|
|
150
|
+
);
|
|
151
|
+
} catch {
|
|
152
|
+
resolve([]);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
async function getLinuxProcesses() {
|
|
159
|
+
const results = [];
|
|
160
|
+
let entries;
|
|
161
|
+
try {
|
|
162
|
+
entries = await readdir("/proc");
|
|
163
|
+
} catch {
|
|
164
|
+
return results;
|
|
165
|
+
}
|
|
166
|
+
await Promise.allSettled(
|
|
167
|
+
entries.map(async (entry) => {
|
|
168
|
+
const pid = parseInt(entry);
|
|
169
|
+
if (isNaN(pid)) return;
|
|
170
|
+
const comm = (await readFile(`/proc/${pid}/comm`, "utf8")).trim();
|
|
171
|
+
if (!AGENT_NAMES.includes(comm)) return;
|
|
172
|
+
const cwd = await readlink(`/proc/${pid}/cwd`);
|
|
173
|
+
const cmdline = (await readFile(`/proc/${pid}/cmdline`, "utf8")).replace(/\0/g, " ").trim();
|
|
174
|
+
results.push({ name: comm, pid, cwd, commandLine: cmdline });
|
|
175
|
+
})
|
|
176
|
+
);
|
|
177
|
+
return results;
|
|
178
|
+
}
|
|
179
|
+
async function getDarwinProcesses() {
|
|
180
|
+
const results = [];
|
|
181
|
+
const psOutput = await execAsync("ps -axo pid=,comm=,args=");
|
|
182
|
+
const agentPids = [];
|
|
183
|
+
for (const line of psOutput.split("\n")) {
|
|
184
|
+
const match = line.trim().match(/^\s*(\d+)\s+(\S+)\s+(.*)$/);
|
|
185
|
+
if (!match) continue;
|
|
186
|
+
const pid = parseInt(match[1]);
|
|
187
|
+
const name = basename(match[2]).toLowerCase();
|
|
188
|
+
const commandLine = match[3];
|
|
189
|
+
if (AGENT_NAMES.includes(name)) {
|
|
190
|
+
agentPids.push({ pid, name, commandLine });
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (agentPids.length === 0) return results;
|
|
194
|
+
const pids = agentPids.map((p) => p.pid).join(",");
|
|
195
|
+
let lsofOutput;
|
|
196
|
+
try {
|
|
197
|
+
lsofOutput = await execAsync(`lsof -d cwd -Fn -p ${pids} 2>/dev/null`);
|
|
198
|
+
} catch {
|
|
199
|
+
lsofOutput = "";
|
|
200
|
+
}
|
|
201
|
+
const cwdMap = /* @__PURE__ */ new Map();
|
|
202
|
+
let currentPid = 0;
|
|
203
|
+
for (const line of lsofOutput.split("\n")) {
|
|
204
|
+
if (line.startsWith("p")) {
|
|
205
|
+
currentPid = parseInt(line.slice(1));
|
|
206
|
+
} else if (line.startsWith("n") && currentPid) {
|
|
207
|
+
cwdMap.set(currentPid, line.slice(1));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
for (const { pid, name, commandLine } of agentPids) {
|
|
211
|
+
const cwd = cwdMap.get(pid) ?? "";
|
|
212
|
+
if (cwd) {
|
|
213
|
+
results.push({ name, pid, cwd, commandLine });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return results;
|
|
217
|
+
}
|
|
218
|
+
let serverHandle = null;
|
|
219
|
+
const clients = /* @__PURE__ */ new Map();
|
|
220
|
+
const sessionRepoCache = /* @__PURE__ */ new Map();
|
|
221
|
+
async function ensureServer() {
|
|
222
|
+
if (!serverHandle) {
|
|
223
|
+
const timeout = 5e3;
|
|
224
|
+
const args = ["serve", "--hostname=127.0.0.1", "--port=0"];
|
|
225
|
+
const proc = spawn("opencode", args, {
|
|
226
|
+
shell: true,
|
|
227
|
+
env: {
|
|
228
|
+
...process.env,
|
|
229
|
+
OPENCODE_CONFIG_CONTENT: JSON.stringify({})
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
const url = await new Promise((resolve, reject) => {
|
|
233
|
+
const id = setTimeout(() => {
|
|
234
|
+
reject(new Error(`Timeout waiting for opencode server to start after ${timeout}ms`));
|
|
235
|
+
}, timeout);
|
|
236
|
+
let output = "";
|
|
237
|
+
proc.stdout?.on("data", (chunk) => {
|
|
238
|
+
output += chunk.toString();
|
|
239
|
+
const lines = output.split("\n");
|
|
240
|
+
for (const line of lines) {
|
|
241
|
+
if (line.startsWith("opencode server listening")) {
|
|
242
|
+
const match = line.match(/on\s+(https?:\/\/[^\s]+)/);
|
|
243
|
+
if (!match) {
|
|
244
|
+
clearTimeout(id);
|
|
245
|
+
reject(new Error(`Failed to parse server url from output: ${line}`));
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
clearTimeout(id);
|
|
249
|
+
resolve(match[1]);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
proc.stderr?.on("data", (chunk) => {
|
|
255
|
+
output += chunk.toString();
|
|
256
|
+
});
|
|
257
|
+
proc.on("exit", (code) => {
|
|
258
|
+
clearTimeout(id);
|
|
259
|
+
let msg = `opencode server exited with code ${code}`;
|
|
260
|
+
if (output.trim()) {
|
|
261
|
+
msg += `
|
|
262
|
+
Server output: ${output}`;
|
|
263
|
+
}
|
|
264
|
+
reject(new Error(msg));
|
|
265
|
+
});
|
|
266
|
+
proc.on("error", (error) => {
|
|
267
|
+
clearTimeout(id);
|
|
268
|
+
reject(error);
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
serverHandle = { url, proc };
|
|
272
|
+
}
|
|
273
|
+
return serverHandle.url;
|
|
274
|
+
}
|
|
275
|
+
async function getClient(directory) {
|
|
276
|
+
const key = directory.toLowerCase();
|
|
277
|
+
let client = clients.get(key);
|
|
278
|
+
if (!client) {
|
|
279
|
+
const baseUrl = await ensureServer();
|
|
280
|
+
client = createOpencodeClient({ baseUrl, directory });
|
|
281
|
+
clients.set(key, client);
|
|
282
|
+
}
|
|
283
|
+
return client;
|
|
284
|
+
}
|
|
285
|
+
function closeOpenCodeServers() {
|
|
286
|
+
if (serverHandle) {
|
|
287
|
+
serverHandle.proc.kill();
|
|
288
|
+
serverHandle = null;
|
|
289
|
+
}
|
|
290
|
+
clients.clear();
|
|
291
|
+
sessionRepoCache.clear();
|
|
292
|
+
}
|
|
293
|
+
function mapOcStatus(status) {
|
|
294
|
+
if (!status) return "inactive";
|
|
295
|
+
switch (status.type) {
|
|
296
|
+
case "busy":
|
|
297
|
+
return "running";
|
|
298
|
+
case "retry":
|
|
299
|
+
return "waiting";
|
|
300
|
+
case "idle":
|
|
301
|
+
default:
|
|
302
|
+
return "inactive";
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
function mapOcMode(mode) {
|
|
306
|
+
if (!mode) return null;
|
|
307
|
+
if (mode === "plan") return "plan";
|
|
308
|
+
return "standard";
|
|
309
|
+
}
|
|
310
|
+
function toTimestamp(ms) {
|
|
311
|
+
return new Date(ms).toISOString();
|
|
312
|
+
}
|
|
313
|
+
class OpenCodeAgent {
|
|
314
|
+
brand = "oc";
|
|
315
|
+
async loadRepos(repoPaths) {
|
|
316
|
+
const repos = await Promise.all(repoPaths.map((path) => this.loadRepo(path)));
|
|
317
|
+
const processes = await getAgentProcesses();
|
|
318
|
+
const activeWorkspaces = getWorkspacesWithAgent(
|
|
319
|
+
processes,
|
|
320
|
+
"opencode",
|
|
321
|
+
/\bopencode(?:\.exe)?\s+(?:serve|x|run)\b/
|
|
322
|
+
);
|
|
323
|
+
markExternalSessions(repos.flatMap((r) => r.sessions), activeWorkspaces);
|
|
324
|
+
return repos;
|
|
325
|
+
}
|
|
326
|
+
async loadRepo(repoPath) {
|
|
327
|
+
const client = await getClient(repoPath);
|
|
328
|
+
const [sessionsList, statusMap, vcsInfo] = await Promise.all([
|
|
329
|
+
client.session.list().then((r) => r.data ?? []),
|
|
330
|
+
client.session.status().then((r) => r.data ?? {}),
|
|
331
|
+
client.vcs.get().then((r) => r.data ?? { branch: "HEAD" })
|
|
332
|
+
]);
|
|
333
|
+
const repoSessions = sessionsList.filter(
|
|
334
|
+
(s) => s.directory.toLowerCase() === repoPath.toLowerCase()
|
|
335
|
+
);
|
|
336
|
+
const sessions = await Promise.all(
|
|
337
|
+
repoSessions.map(
|
|
338
|
+
(session) => this.mapSession(client, session, statusMap, repoPath)
|
|
339
|
+
)
|
|
340
|
+
);
|
|
341
|
+
return {
|
|
342
|
+
path: repoPath,
|
|
343
|
+
branch: vcsInfo.branch || "HEAD",
|
|
344
|
+
sessions
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
async mapSession(client, session, statusMap, repoPath) {
|
|
348
|
+
sessionRepoCache.set(session.id, repoPath);
|
|
349
|
+
const result = await client.session.messages({
|
|
350
|
+
path: { id: session.id }
|
|
351
|
+
});
|
|
352
|
+
const messages = result.data ?? [];
|
|
353
|
+
let mode = null;
|
|
354
|
+
let lastAssistantText = null;
|
|
355
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
356
|
+
if (messages[i].info.role === "assistant") {
|
|
357
|
+
if (mode === null) {
|
|
358
|
+
mode = mapOcMode(
|
|
359
|
+
messages[i].info.mode
|
|
360
|
+
);
|
|
361
|
+
}
|
|
362
|
+
if (lastAssistantText === null) {
|
|
363
|
+
const textParts = messages[i].parts.filter(
|
|
364
|
+
(p) => p.type === "text"
|
|
365
|
+
);
|
|
366
|
+
const text = textParts.map((p) => p.text).join("\n");
|
|
367
|
+
if (text) lastAssistantText = text;
|
|
368
|
+
}
|
|
369
|
+
if (mode !== null && lastAssistantText !== null) break;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
return {
|
|
373
|
+
id: session.id,
|
|
374
|
+
workspace: repoPath,
|
|
375
|
+
title: session.title || session.id,
|
|
376
|
+
status: mapOcStatus(statusMap[session.id]),
|
|
377
|
+
mode,
|
|
378
|
+
timestamp: session.time.updated,
|
|
379
|
+
lastAssistantText
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
async loadSession(id) {
|
|
383
|
+
const repoPath = sessionRepoCache.get(id);
|
|
384
|
+
if (repoPath) {
|
|
385
|
+
return this.fetchSession(id, repoPath);
|
|
386
|
+
}
|
|
387
|
+
for (const [dir] of clients) {
|
|
388
|
+
const result = await this.fetchSession(id, dir);
|
|
389
|
+
if (result) return result;
|
|
390
|
+
}
|
|
391
|
+
return null;
|
|
392
|
+
}
|
|
393
|
+
async fetchSession(id, directory) {
|
|
394
|
+
const client = await getClient(directory);
|
|
395
|
+
const [sessionResult, messagesResult] = await Promise.all([
|
|
396
|
+
client.session.get({ path: { id } }),
|
|
397
|
+
client.session.messages({ path: { id } })
|
|
398
|
+
]);
|
|
399
|
+
const session = sessionResult.data;
|
|
400
|
+
const messages = messagesResult.data ?? [];
|
|
401
|
+
if (!session) return null;
|
|
402
|
+
const log = [];
|
|
403
|
+
for (const { info, parts } of messages) {
|
|
404
|
+
const timestamp = toTimestamp(info.time.created);
|
|
405
|
+
if (info.role === "user") {
|
|
406
|
+
const textParts = parts.filter(
|
|
407
|
+
(p) => p.type === "text"
|
|
408
|
+
);
|
|
409
|
+
const text = textParts.map((p) => p.text).join("\n");
|
|
410
|
+
if (text) {
|
|
411
|
+
log.push({ type: "user", text, timestamp });
|
|
412
|
+
}
|
|
413
|
+
} else if (info.role === "assistant") {
|
|
414
|
+
const textParts = parts.filter(
|
|
415
|
+
(p) => p.type === "text"
|
|
416
|
+
);
|
|
417
|
+
const text = textParts.map((p) => p.text).join("\n");
|
|
418
|
+
if (text) {
|
|
419
|
+
log.push({ type: "assistant", text, timestamp });
|
|
420
|
+
}
|
|
421
|
+
const toolParts = parts.filter(
|
|
422
|
+
(p) => p.type === "tool"
|
|
423
|
+
);
|
|
424
|
+
for (const toolPart of toolParts) {
|
|
425
|
+
let toolTimestamp = timestamp;
|
|
426
|
+
if (toolPart.state.status === "running" || toolPart.state.status === "completed" || toolPart.state.status === "error") {
|
|
427
|
+
toolTimestamp = toTimestamp(
|
|
428
|
+
toolPart.state.time.start
|
|
429
|
+
);
|
|
430
|
+
}
|
|
431
|
+
log.push({
|
|
432
|
+
type: "tool_use",
|
|
433
|
+
tool: toolPart.tool,
|
|
434
|
+
args: new Map(
|
|
435
|
+
Object.entries(toolPart.state.input)
|
|
436
|
+
),
|
|
437
|
+
success: toolPart.state.status === "completed",
|
|
438
|
+
timestamp: toolTimestamp
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
return {
|
|
444
|
+
id,
|
|
445
|
+
title: session.title || id,
|
|
446
|
+
log
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
export { OpenCodeAgent as O, getWorkspacesWithAgent as a, closeOpenCodeServers as c, getAgentProcesses as g, markExternalSessions as m };
|
|
452
|
+
//# sourceMappingURL=opencode-vgZ5DMQ2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-vgZ5DMQ2.js","sources":["../../../.svelte-kit/adapter-node/chunks/opencode.js"],"sourcesContent":["import { execFile, exec, spawn } from \"node:child_process\";\nimport { createOpencodeClient } from \"@opencode-ai/sdk\";\nimport { readdir, readFile, readlink } from \"node:fs/promises\";\nimport { basename, normalize } from \"node:path\";\nimport { platform } from \"node:os\";\nconst AGENT_NAMES = [\"claude\", \"opencode\"];\nlet cache = null;\nconst CACHE_TTL = 5e3;\nasync function getAgentProcesses() {\n if (cache && Date.now() - cache.timestamp < CACHE_TTL) {\n return cache.result;\n }\n let result;\n try {\n switch (platform()) {\n case \"win32\":\n result = await getWindowsProcesses();\n break;\n case \"linux\":\n result = await getLinuxProcesses();\n break;\n case \"darwin\":\n result = await getDarwinProcesses();\n break;\n default:\n result = [];\n }\n } catch {\n result = [];\n }\n cache = { timestamp: Date.now(), result };\n return result;\n}\nfunction getWorkspacesWithAgent(processes, agentName, excludeCommandPattern) {\n const workspaces = /* @__PURE__ */ new Set();\n for (const proc of processes) {\n if (proc.name !== agentName) continue;\n if (excludeCommandPattern && excludeCommandPattern.test(proc.commandLine)) continue;\n if (proc.cwd) {\n workspaces.add(proc.cwd.toLowerCase());\n }\n }\n return workspaces;\n}\nfunction markExternalSessions(sessions, activeWorkspaces) {\n const byWorkspace = /* @__PURE__ */ new Map();\n for (const session of sessions) {\n const key = session.workspace.toLowerCase();\n let list = byWorkspace.get(key);\n if (!list) {\n list = [];\n byWorkspace.set(key, list);\n }\n list.push(session);\n }\n for (const [workspace, workspaceSessions] of byWorkspace) {\n if (!activeWorkspaces.has(workspace)) continue;\n let mostRecent = null;\n for (const s of workspaceSessions) {\n if (s.status !== \"inactive\") continue;\n if (!mostRecent || s.timestamp > mostRecent.timestamp) {\n mostRecent = s;\n }\n }\n if (mostRecent) {\n mostRecent.status = \"external\";\n }\n }\n}\nfunction execAsync(command, timeout = 1e4) {\n return new Promise((resolve, reject) => {\n exec(command, { timeout }, (error, stdout) => {\n if (error) return reject(error);\n resolve(stdout);\n });\n });\n}\nconst PS_SCRIPT = `\nAdd-Type -TypeDefinition @'\nusing System;\nusing System.Runtime.InteropServices;\n\npublic class JagmanProcCwd {\n [DllImport(\"ntdll.dll\")]\n static extern int NtQueryInformationProcess(IntPtr h, int c, ref PBI p, int s, out int r);\n [DllImport(\"kernel32.dll\", SetLastError=true)]\n static extern IntPtr OpenProcess(int a, bool b, int pid);\n [DllImport(\"kernel32.dll\", SetLastError=true)]\n static extern bool ReadProcessMemory(IntPtr h, IntPtr addr, byte[] buf, int sz, out int read);\n [DllImport(\"kernel32.dll\")]\n static extern bool CloseHandle(IntPtr h);\n\n [StructLayout(LayoutKind.Sequential)]\n struct PBI { public IntPtr R1, Peb, R2a, R2b, Pid, R3; }\n\n public static string Get(int pid) {\n IntPtr h = OpenProcess(0x0410, false, pid);\n if (h == IntPtr.Zero) return null;\n try {\n var pbi = new PBI(); int rl;\n if (NtQueryInformationProcess(h, 0, ref pbi, Marshal.SizeOf(pbi), out rl) != 0) return null;\n byte[] b = new byte[8]; int br;\n if (!ReadProcessMemory(h, pbi.Peb + 0x20, b, 8, out br)) return null;\n IntPtr pp = (IntPtr)BitConverter.ToInt64(b, 0);\n byte[] us = new byte[16];\n if (!ReadProcessMemory(h, pp + 0x38, us, 16, out br)) return null;\n short len = BitConverter.ToInt16(us, 0);\n IntPtr bp = (IntPtr)BitConverter.ToInt64(us, 8);\n byte[] pb = new byte[len];\n if (!ReadProcessMemory(h, bp, pb, len, out br)) return null;\n return System.Text.Encoding.Unicode.GetString(pb).TrimEnd(new char[]{(char)92});\n } finally { CloseHandle(h); }\n }\n}\n'@ -ErrorAction SilentlyContinue\n\nGet-CimInstance Win32_Process -Filter \"Name='claude.exe' OR Name='opencode.exe'\" | ForEach-Object {\n $cwd = [JagmanProcCwd]::Get($_.ProcessId)\n [PSCustomObject]@{ name=$_.Name; pid=[int]$_.ProcessId; cwd=$cwd; cmd=$_.CommandLine }\n} | ConvertTo-Json -Compress\n`;\nasync function getWindowsProcesses() {\n const encoded = Buffer.from(PS_SCRIPT, \"utf16le\").toString(\"base64\");\n return new Promise((resolve) => {\n execFile(\n \"powershell.exe\",\n [\"-NoProfile\", \"-ExecutionPolicy\", \"Bypass\", \"-EncodedCommand\", encoded],\n { timeout: 15e3 },\n (error, stdout) => {\n if (error) {\n resolve([]);\n return;\n }\n try {\n const trimmed = stdout.trim();\n if (!trimmed) {\n resolve([]);\n return;\n }\n const raw = JSON.parse(trimmed);\n const items = Array.isArray(raw) ? raw : [raw];\n resolve(\n items.filter((item) => item.cwd).map((item) => ({\n name: item.name.replace(/\\.exe$/i, \"\").toLowerCase(),\n pid: item.pid,\n cwd: normalize(item.cwd),\n commandLine: item.cmd || \"\"\n }))\n );\n } catch {\n resolve([]);\n }\n }\n );\n });\n}\nasync function getLinuxProcesses() {\n const results = [];\n let entries;\n try {\n entries = await readdir(\"/proc\");\n } catch {\n return results;\n }\n await Promise.allSettled(\n entries.map(async (entry) => {\n const pid = parseInt(entry);\n if (isNaN(pid)) return;\n const comm = (await readFile(`/proc/${pid}/comm`, \"utf8\")).trim();\n if (!AGENT_NAMES.includes(comm)) return;\n const cwd = await readlink(`/proc/${pid}/cwd`);\n const cmdline = (await readFile(`/proc/${pid}/cmdline`, \"utf8\")).replace(/\\0/g, \" \").trim();\n results.push({ name: comm, pid, cwd, commandLine: cmdline });\n })\n );\n return results;\n}\nasync function getDarwinProcesses() {\n const results = [];\n const psOutput = await execAsync(\"ps -axo pid=,comm=,args=\");\n const agentPids = [];\n for (const line of psOutput.split(\"\\n\")) {\n const match = line.trim().match(/^\\s*(\\d+)\\s+(\\S+)\\s+(.*)$/);\n if (!match) continue;\n const pid = parseInt(match[1]);\n const name = basename(match[2]).toLowerCase();\n const commandLine = match[3];\n if (AGENT_NAMES.includes(name)) {\n agentPids.push({ pid, name, commandLine });\n }\n }\n if (agentPids.length === 0) return results;\n const pids = agentPids.map((p) => p.pid).join(\",\");\n let lsofOutput;\n try {\n lsofOutput = await execAsync(`lsof -d cwd -Fn -p ${pids} 2>/dev/null`);\n } catch {\n lsofOutput = \"\";\n }\n const cwdMap = /* @__PURE__ */ new Map();\n let currentPid = 0;\n for (const line of lsofOutput.split(\"\\n\")) {\n if (line.startsWith(\"p\")) {\n currentPid = parseInt(line.slice(1));\n } else if (line.startsWith(\"n\") && currentPid) {\n cwdMap.set(currentPid, line.slice(1));\n }\n }\n for (const { pid, name, commandLine } of agentPids) {\n const cwd = cwdMap.get(pid) ?? \"\";\n if (cwd) {\n results.push({ name, pid, cwd, commandLine });\n }\n }\n return results;\n}\nlet serverHandle = null;\nconst clients = /* @__PURE__ */ new Map();\nconst sessionRepoCache = /* @__PURE__ */ new Map();\nasync function ensureServer() {\n if (!serverHandle) {\n const timeout = 5e3;\n const args = [\"serve\", \"--hostname=127.0.0.1\", \"--port=0\"];\n const proc = spawn(\"opencode\", args, {\n shell: true,\n env: {\n ...process.env,\n OPENCODE_CONFIG_CONTENT: JSON.stringify({})\n }\n });\n const url = await new Promise((resolve, reject) => {\n const id = setTimeout(() => {\n reject(new Error(`Timeout waiting for opencode server to start after ${timeout}ms`));\n }, timeout);\n let output = \"\";\n proc.stdout?.on(\"data\", (chunk) => {\n output += chunk.toString();\n const lines = output.split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"opencode server listening\")) {\n const match = line.match(/on\\s+(https?:\\/\\/[^\\s]+)/);\n if (!match) {\n clearTimeout(id);\n reject(new Error(`Failed to parse server url from output: ${line}`));\n return;\n }\n clearTimeout(id);\n resolve(match[1]);\n return;\n }\n }\n });\n proc.stderr?.on(\"data\", (chunk) => {\n output += chunk.toString();\n });\n proc.on(\"exit\", (code) => {\n clearTimeout(id);\n let msg = `opencode server exited with code ${code}`;\n if (output.trim()) {\n msg += `\nServer output: ${output}`;\n }\n reject(new Error(msg));\n });\n proc.on(\"error\", (error) => {\n clearTimeout(id);\n reject(error);\n });\n });\n serverHandle = { url, proc };\n }\n return serverHandle.url;\n}\nasync function getClient(directory) {\n const key = directory.toLowerCase();\n let client = clients.get(key);\n if (!client) {\n const baseUrl = await ensureServer();\n client = createOpencodeClient({ baseUrl, directory });\n clients.set(key, client);\n }\n return client;\n}\nfunction closeOpenCodeServers() {\n if (serverHandle) {\n serverHandle.proc.kill();\n serverHandle = null;\n }\n clients.clear();\n sessionRepoCache.clear();\n}\nfunction mapOcStatus(status) {\n if (!status) return \"inactive\";\n switch (status.type) {\n case \"busy\":\n return \"running\";\n case \"retry\":\n return \"waiting\";\n case \"idle\":\n default:\n return \"inactive\";\n }\n}\nfunction mapOcMode(mode) {\n if (!mode) return null;\n if (mode === \"plan\") return \"plan\";\n return \"standard\";\n}\nfunction toTimestamp(ms) {\n return new Date(ms).toISOString();\n}\nclass OpenCodeAgent {\n brand = \"oc\";\n async loadRepos(repoPaths) {\n const repos = await Promise.all(repoPaths.map((path) => this.loadRepo(path)));\n const processes = await getAgentProcesses();\n const activeWorkspaces = getWorkspacesWithAgent(\n processes,\n \"opencode\",\n /\\bopencode(?:\\.exe)?\\s+(?:serve|x|run)\\b/\n );\n markExternalSessions(repos.flatMap((r) => r.sessions), activeWorkspaces);\n return repos;\n }\n async loadRepo(repoPath) {\n const client = await getClient(repoPath);\n const [sessionsList, statusMap, vcsInfo] = await Promise.all([\n client.session.list().then((r) => r.data ?? []),\n client.session.status().then((r) => r.data ?? {}),\n client.vcs.get().then((r) => r.data ?? { branch: \"HEAD\" })\n ]);\n const repoSessions = sessionsList.filter(\n (s) => s.directory.toLowerCase() === repoPath.toLowerCase()\n );\n const sessions = await Promise.all(\n repoSessions.map(\n (session) => this.mapSession(client, session, statusMap, repoPath)\n )\n );\n return {\n path: repoPath,\n branch: vcsInfo.branch || \"HEAD\",\n sessions\n };\n }\n async mapSession(client, session, statusMap, repoPath) {\n sessionRepoCache.set(session.id, repoPath);\n const result = await client.session.messages({\n path: { id: session.id }\n });\n const messages = result.data ?? [];\n let mode = null;\n let lastAssistantText = null;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].info.role === \"assistant\") {\n if (mode === null) {\n mode = mapOcMode(\n messages[i].info.mode\n );\n }\n if (lastAssistantText === null) {\n const textParts = messages[i].parts.filter(\n (p) => p.type === \"text\"\n );\n const text = textParts.map((p) => p.text).join(\"\\n\");\n if (text) lastAssistantText = text;\n }\n if (mode !== null && lastAssistantText !== null) break;\n }\n }\n return {\n id: session.id,\n workspace: repoPath,\n title: session.title || session.id,\n status: mapOcStatus(statusMap[session.id]),\n mode,\n timestamp: session.time.updated,\n lastAssistantText\n };\n }\n async loadSession(id) {\n const repoPath = sessionRepoCache.get(id);\n if (repoPath) {\n return this.fetchSession(id, repoPath);\n }\n for (const [dir] of clients) {\n const result = await this.fetchSession(id, dir);\n if (result) return result;\n }\n return null;\n }\n async fetchSession(id, directory) {\n const client = await getClient(directory);\n const [sessionResult, messagesResult] = await Promise.all([\n client.session.get({ path: { id } }),\n client.session.messages({ path: { id } })\n ]);\n const session = sessionResult.data;\n const messages = messagesResult.data ?? [];\n if (!session) return null;\n const log = [];\n for (const { info, parts } of messages) {\n const timestamp = toTimestamp(info.time.created);\n if (info.role === \"user\") {\n const textParts = parts.filter(\n (p) => p.type === \"text\"\n );\n const text = textParts.map((p) => p.text).join(\"\\n\");\n if (text) {\n log.push({ type: \"user\", text, timestamp });\n }\n } else if (info.role === \"assistant\") {\n const textParts = parts.filter(\n (p) => p.type === \"text\"\n );\n const text = textParts.map((p) => p.text).join(\"\\n\");\n if (text) {\n log.push({ type: \"assistant\", text, timestamp });\n }\n const toolParts = parts.filter(\n (p) => p.type === \"tool\"\n );\n for (const toolPart of toolParts) {\n let toolTimestamp = timestamp;\n if (toolPart.state.status === \"running\" || toolPart.state.status === \"completed\" || toolPart.state.status === \"error\") {\n toolTimestamp = toTimestamp(\n toolPart.state.time.start\n );\n }\n log.push({\n type: \"tool_use\",\n tool: toolPart.tool,\n args: new Map(\n Object.entries(toolPart.state.input)\n ),\n success: toolPart.state.status === \"completed\",\n timestamp: toolTimestamp\n });\n }\n }\n }\n return {\n id,\n title: session.title || id,\n log\n };\n }\n}\nexport {\n OpenCodeAgent as O,\n getWorkspacesWithAgent as a,\n closeOpenCodeServers as c,\n getAgentProcesses as g,\n markExternalSessions as m\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { m as default } from './data.remote-3GWudL8p.js';
|
|
2
|
+
import './root-C5lyo0VT.js';
|
|
3
|
+
import './index-DwoWbz0A.js';
|
|
4
|
+
import './agent-C7A3zEr3.js';
|
|
5
|
+
import './shared-bytReIJX.js';
|
|
6
|
+
import './index-CoD1IJuy.js';
|
|
7
|
+
import 'node:os';
|
|
8
|
+
import 'node:fs/promises';
|
|
9
|
+
import 'node:path';
|
|
10
|
+
import 'node:fs';
|
|
11
|
+
import 'node:readline';
|
|
12
|
+
import './opencode-vgZ5DMQ2.js';
|
|
13
|
+
import 'node:child_process';
|
|
14
|
+
import '@opencode-ai/sdk';
|
|
15
|
+
import './mock-data-D8qN6SIX.js';
|
|
16
|
+
//# sourceMappingURL=remote-1jrju9-CYV2OBS9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-1jrju9-CYV2OBS9.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { m as default } from './data.remote3-CDhxyD61.js';
|
|
2
|
+
import './root-C5lyo0VT.js';
|
|
3
|
+
import './index-DwoWbz0A.js';
|
|
4
|
+
import './agent-C7A3zEr3.js';
|
|
5
|
+
import './shared-bytReIJX.js';
|
|
6
|
+
import './index-CoD1IJuy.js';
|
|
7
|
+
import 'node:os';
|
|
8
|
+
import 'node:fs/promises';
|
|
9
|
+
import 'node:path';
|
|
10
|
+
import 'node:fs';
|
|
11
|
+
import 'node:readline';
|
|
12
|
+
import './opencode-vgZ5DMQ2.js';
|
|
13
|
+
import 'node:child_process';
|
|
14
|
+
import '@opencode-ai/sdk';
|
|
15
|
+
import './mock-data-D8qN6SIX.js';
|
|
16
|
+
//# sourceMappingURL=remote-1t3e9fx-Bq2E-Huu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-1t3e9fx-Bq2E-Huu.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { m as default } from './data.remote2-DPGOveFg.js';
|
|
2
|
+
import './root-C5lyo0VT.js';
|
|
3
|
+
import './index-DwoWbz0A.js';
|
|
4
|
+
import './agent-C7A3zEr3.js';
|
|
5
|
+
import './shared-bytReIJX.js';
|
|
6
|
+
import './index-CoD1IJuy.js';
|
|
7
|
+
import 'node:os';
|
|
8
|
+
import 'node:fs/promises';
|
|
9
|
+
import 'node:path';
|
|
10
|
+
import 'node:fs';
|
|
11
|
+
import 'node:readline';
|
|
12
|
+
import './opencode-vgZ5DMQ2.js';
|
|
13
|
+
import 'node:child_process';
|
|
14
|
+
import '@opencode-ai/sdk';
|
|
15
|
+
//# sourceMappingURL=remote-dsfuc2-DwI4AU9q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-dsfuc2-DwI4AU9q.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
|