@agtd/agent 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.js +6 -49
- package/dist/{chunk-24ORBJSI.js → chunk-RJLNNX7L.js} +489 -32
- package/dist/cli.js +186 -120
- package/package.json +2 -1
- package/dist/__tests__/codexAdapterFindFile.test.d.ts +0 -2
- package/dist/__tests__/codexAdapterFindFile.test.d.ts.map +0 -1
- package/dist/__tests__/codexAdapterFindFile.test.js +0 -298
- package/dist/__tests__/codexAdapterFindFile.test.js.map +0 -1
- package/dist/__tests__/enrichers.test.d.ts +0 -2
- package/dist/__tests__/enrichers.test.d.ts.map +0 -1
- package/dist/__tests__/enrichers.test.js +0 -47
- package/dist/__tests__/enrichers.test.js.map +0 -1
- package/dist/__tests__/tmux.integration.test.d.ts +0 -2
- package/dist/__tests__/tmux.integration.test.d.ts.map +0 -1
- package/dist/__tests__/tmux.integration.test.js +0 -112
- package/dist/__tests__/tmux.integration.test.js.map +0 -1
- package/dist/__tests__/tmux.test.d.ts +0 -2
- package/dist/__tests__/tmux.test.d.ts.map +0 -1
- package/dist/__tests__/tmux.test.js +0 -26
- package/dist/__tests__/tmux.test.js.map +0 -1
- package/dist/__tests__/transcriptAdapters.test.d.ts +0 -2
- package/dist/__tests__/transcriptAdapters.test.d.ts.map +0 -1
- package/dist/__tests__/transcriptAdapters.test.js +0 -133
- package/dist/__tests__/transcriptAdapters.test.js.map +0 -1
- package/dist/adapters/claude-code.d.ts +0 -3
- package/dist/adapters/claude-code.d.ts.map +0 -1
- package/dist/adapters/claude-code.js +0 -48
- package/dist/adapters/claude-code.js.map +0 -1
- package/dist/adapters/codex.d.ts +0 -3
- package/dist/adapters/codex.d.ts.map +0 -1
- package/dist/adapters/codex.js +0 -33
- package/dist/adapters/codex.js.map +0 -1
- package/dist/adapters/generic.d.ts +0 -3
- package/dist/adapters/generic.d.ts.map +0 -1
- package/dist/adapters/generic.js +0 -38
- package/dist/adapters/generic.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -7
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -12
- package/dist/adapters/index.js.map +0 -1
- package/dist/agent.d.ts +0 -3
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js.map +0 -1
- package/dist/cli.d.ts +0 -11
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts +0 -26
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -48
- package/dist/config.js.map +0 -1
- package/dist/enrichers/git.d.ts +0 -6
- package/dist/enrichers/git.d.ts.map +0 -1
- package/dist/enrichers/git.js +0 -20
- package/dist/enrichers/git.js.map +0 -1
- package/dist/enrichers/pr.d.ts +0 -2
- package/dist/enrichers/pr.d.ts.map +0 -1
- package/dist/enrichers/pr.js +0 -10
- package/dist/enrichers/pr.js.map +0 -1
- package/dist/enrichers/transcript.d.ts +0 -8
- package/dist/enrichers/transcript.d.ts.map +0 -1
- package/dist/enrichers/transcript.js +0 -33
- package/dist/enrichers/transcript.js.map +0 -1
- package/dist/heartbeat.d.ts +0 -4
- package/dist/heartbeat.d.ts.map +0 -1
- package/dist/heartbeat.js +0 -15
- package/dist/heartbeat.js.map +0 -1
- package/dist/init.d.ts +0 -10
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -70
- package/dist/init.js.map +0 -1
- package/dist/register.d.ts +0 -3
- package/dist/register.d.ts.map +0 -1
- package/dist/register.js +0 -22
- package/dist/register.js.map +0 -1
- package/dist/sessionScanner.d.ts +0 -20
- package/dist/sessionScanner.d.ts.map +0 -1
- package/dist/sessionScanner.js +0 -479
- package/dist/sessionScanner.js.map +0 -1
- package/dist/spawn.d.ts +0 -8
- package/dist/spawn.d.ts.map +0 -1
- package/dist/spawn.js +0 -73
- package/dist/spawn.js.map +0 -1
- package/dist/syncProjects.d.ts +0 -3
- package/dist/syncProjects.d.ts.map +0 -1
- package/dist/syncProjects.js +0 -91
- package/dist/syncProjects.js.map +0 -1
- package/dist/terminalBridge.d.ts +0 -4
- package/dist/terminalBridge.d.ts.map +0 -1
- package/dist/terminalBridge.js +0 -42
- package/dist/terminalBridge.js.map +0 -1
- package/dist/tmux.d.ts +0 -21
- package/dist/tmux.d.ts.map +0 -1
- package/dist/tmux.js +0 -89
- package/dist/tmux.js.map +0 -1
- package/dist/transcriptAdapters/claude-code.d.ts +0 -3
- package/dist/transcriptAdapters/claude-code.d.ts.map +0 -1
- package/dist/transcriptAdapters/claude-code.js +0 -147
- package/dist/transcriptAdapters/claude-code.js.map +0 -1
- package/dist/transcriptAdapters/codex.d.ts +0 -3
- package/dist/transcriptAdapters/codex.d.ts.map +0 -1
- package/dist/transcriptAdapters/codex.js +0 -251
- package/dist/transcriptAdapters/codex.js.map +0 -1
- package/dist/transcriptAdapters/index.d.ts +0 -17
- package/dist/transcriptAdapters/index.d.ts.map +0 -1
- package/dist/transcriptAdapters/index.js +0 -9
- package/dist/transcriptAdapters/index.js.map +0 -1
- package/dist/wsClient.d.ts +0 -6
- package/dist/wsClient.d.ts.map +0 -1
- package/dist/wsClient.js +0 -156
- package/dist/wsClient.js.map +0 -1
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
// packages/agent/src/transcriptAdapters/codex.ts
|
|
2
|
-
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { homedir } from "node:os";
|
|
5
|
-
import { execSync } from "node:child_process";
|
|
6
|
-
import { registerAdapter, } from "./index.js";
|
|
7
|
-
function truncate(s, max) {
|
|
8
|
-
if (!s)
|
|
9
|
-
return "";
|
|
10
|
-
return s.length > max ? s.slice(0, max) + "..." : s;
|
|
11
|
-
}
|
|
12
|
-
function extractCodexText(content) {
|
|
13
|
-
if (!content)
|
|
14
|
-
return "";
|
|
15
|
-
if (typeof content === "string")
|
|
16
|
-
return content;
|
|
17
|
-
if (!Array.isArray(content))
|
|
18
|
-
return "";
|
|
19
|
-
return content
|
|
20
|
-
.map((c) => c.text || "")
|
|
21
|
-
.filter((t) => t.trim())
|
|
22
|
-
.join("\n");
|
|
23
|
-
}
|
|
24
|
-
function summarizeCodexToolInput(name, args) {
|
|
25
|
-
if (name === "exec_command" || name === "shell")
|
|
26
|
-
return { cmd: truncate(args.cmd, 200) };
|
|
27
|
-
if (name === "read_file" || name === "write_file")
|
|
28
|
-
return {
|
|
29
|
-
path: args.path || args.file_path,
|
|
30
|
-
content: args.content ? truncate(args.content, 100) : undefined,
|
|
31
|
-
};
|
|
32
|
-
return Object.fromEntries(Object.entries(args)
|
|
33
|
-
.slice(0, 3)
|
|
34
|
-
.map(([k, v]) => [k, typeof v === "string" ? truncate(v, 150) : v]));
|
|
35
|
-
}
|
|
36
|
-
function parseRecord(record, counter) {
|
|
37
|
-
if (!record.type || !record.payload)
|
|
38
|
-
return null;
|
|
39
|
-
const p = record.payload;
|
|
40
|
-
const ts = record.timestamp || "";
|
|
41
|
-
if (record.type !== "response_item")
|
|
42
|
-
return null;
|
|
43
|
-
if (p.type === "message" && p.role === "user") {
|
|
44
|
-
// Split multi-item content into separate messages so each appears as its own bubble
|
|
45
|
-
const texts = Array.isArray(p.content)
|
|
46
|
-
? p.content
|
|
47
|
-
.map((c) => (typeof c === "string" ? c : c.text || ""))
|
|
48
|
-
.filter((t) => t.trim() && !t.startsWith("#") && !t.startsWith("<permissions"))
|
|
49
|
-
: (() => {
|
|
50
|
-
const t = extractCodexText(p.content);
|
|
51
|
-
return t && !t.startsWith("#") && !t.startsWith("<permissions")
|
|
52
|
-
? [t]
|
|
53
|
-
: [];
|
|
54
|
-
})();
|
|
55
|
-
if (texts.length === 0)
|
|
56
|
-
return null;
|
|
57
|
-
if (texts.length === 1)
|
|
58
|
-
return {
|
|
59
|
-
id: `codex-${++counter.value}`,
|
|
60
|
-
role: "user",
|
|
61
|
-
timestamp: ts,
|
|
62
|
-
content: [{ type: "text", text: texts[0] }],
|
|
63
|
-
};
|
|
64
|
-
return texts.map((text) => ({
|
|
65
|
-
id: `codex-${++counter.value}`,
|
|
66
|
-
role: "user",
|
|
67
|
-
timestamp: ts,
|
|
68
|
-
content: [{ type: "text", text }],
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
71
|
-
if (p.type === "message" && p.role === "assistant") {
|
|
72
|
-
const text = extractCodexText(p.content);
|
|
73
|
-
if (!text)
|
|
74
|
-
return null;
|
|
75
|
-
return {
|
|
76
|
-
id: `codex-${++counter.value}`,
|
|
77
|
-
role: "assistant",
|
|
78
|
-
timestamp: ts,
|
|
79
|
-
content: [{ type: "text", text }],
|
|
80
|
-
model: "codex",
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
if (p.type === "reasoning") {
|
|
84
|
-
const summaryText = Array.isArray(p.summary) && p.summary.length > 0
|
|
85
|
-
? p.summary.map((s) => s.text || "").join("\n")
|
|
86
|
-
: null;
|
|
87
|
-
if (!summaryText)
|
|
88
|
-
return null;
|
|
89
|
-
return {
|
|
90
|
-
id: `codex-${++counter.value}`,
|
|
91
|
-
role: "assistant",
|
|
92
|
-
timestamp: ts,
|
|
93
|
-
content: [{ type: "thinking", text: summaryText }],
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
if (p.type === "function_call") {
|
|
97
|
-
let args = {};
|
|
98
|
-
try {
|
|
99
|
-
args =
|
|
100
|
-
typeof p.arguments === "string"
|
|
101
|
-
? JSON.parse(p.arguments)
|
|
102
|
-
: p.arguments || {};
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
args = { raw: truncate(p.arguments, 200) };
|
|
106
|
-
}
|
|
107
|
-
return {
|
|
108
|
-
id: `codex-${++counter.value}`,
|
|
109
|
-
role: "assistant",
|
|
110
|
-
timestamp: ts,
|
|
111
|
-
content: [
|
|
112
|
-
{
|
|
113
|
-
type: "tool_use",
|
|
114
|
-
toolName: p.name || "unknown",
|
|
115
|
-
toolInput: summarizeCodexToolInput(p.name, args),
|
|
116
|
-
},
|
|
117
|
-
],
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
if (p.type === "function_call_output") {
|
|
121
|
-
const output = typeof p.output === "string" ? p.output : "";
|
|
122
|
-
if (!output.trim())
|
|
123
|
-
return null;
|
|
124
|
-
return {
|
|
125
|
-
id: `codex-${++counter.value}`,
|
|
126
|
-
role: "assistant",
|
|
127
|
-
timestamp: ts,
|
|
128
|
-
content: [{ type: "tool_result", text: truncate(output, 500) }],
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
function safeReaddir(dir) {
|
|
134
|
-
try {
|
|
135
|
-
return readdirSync(dir);
|
|
136
|
-
}
|
|
137
|
-
catch {
|
|
138
|
-
return [];
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
function findLatestJsonl(dir) {
|
|
142
|
-
let latest = null;
|
|
143
|
-
try {
|
|
144
|
-
for (const year of readdirSync(dir)) {
|
|
145
|
-
for (const month of safeReaddir(join(dir, year))) {
|
|
146
|
-
for (const day of safeReaddir(join(dir, year, month))) {
|
|
147
|
-
for (const file of safeReaddir(join(dir, year, month, day))) {
|
|
148
|
-
if (!file.endsWith(".jsonl"))
|
|
149
|
-
continue;
|
|
150
|
-
const fp = join(dir, year, month, day, file);
|
|
151
|
-
try {
|
|
152
|
-
const { mtimeMs } = statSync(fp);
|
|
153
|
-
if (!latest || mtimeMs > latest.mtime)
|
|
154
|
-
latest = { path: fp, mtime: mtimeMs };
|
|
155
|
-
}
|
|
156
|
-
catch {
|
|
157
|
-
continue;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
catch {
|
|
165
|
-
/* ignore */
|
|
166
|
-
}
|
|
167
|
-
return latest?.path ?? null;
|
|
168
|
-
}
|
|
169
|
-
export const codexAdapter = {
|
|
170
|
-
findFile(session, homeDir = homedir()) {
|
|
171
|
-
const s = session;
|
|
172
|
-
const dbPath = join(homeDir, ".codex", "state_5.sqlite");
|
|
173
|
-
if (existsSync(dbPath)) {
|
|
174
|
-
try {
|
|
175
|
-
const safeDb = dbPath.replace(/'/g, "'\\''");
|
|
176
|
-
// Prefer the stored Codex thread ID — set at spawn time, uniquely identifies
|
|
177
|
-
// this session's thread even when multiple sessions share the same cwd.
|
|
178
|
-
if (s.codexThreadId) {
|
|
179
|
-
// Thread IDs are UUIDs — no special chars, single-quote wrapping is fine
|
|
180
|
-
const safeId = s.codexThreadId.replace(/'/g, "'\\''");
|
|
181
|
-
const idOutput = execSync(`sqlite3 '${safeDb}' "SELECT rollout_path FROM threads WHERE id='${safeId}' LIMIT 1;"`, { encoding: "utf-8", timeout: 3000, stdio: "pipe" }).trim();
|
|
182
|
-
if (idOutput && existsSync(idOutput))
|
|
183
|
-
return idOutput;
|
|
184
|
-
}
|
|
185
|
-
// Fallback: use tmux session creation time to find the right thread.
|
|
186
|
-
// The tmux session was created when agtd spawned the agent, so the Codex thread
|
|
187
|
-
// created at or after that time belongs to this session.
|
|
188
|
-
if (session.cwd && s.tmuxSession) {
|
|
189
|
-
try {
|
|
190
|
-
const safeTmux = s.tmuxSession.replace(/'/g, "'\\''");
|
|
191
|
-
const tmuxCreated = execSync(`tmux display-message -t '${safeTmux}' -p '#{session_created}'`, { encoding: "utf-8", timeout: 2000, stdio: "pipe" }).trim();
|
|
192
|
-
if (tmuxCreated && /^\d+$/.test(tmuxCreated)) {
|
|
193
|
-
// Use double-quote outer wrapping so the cwd single quotes are literal
|
|
194
|
-
const safeCwd = session.cwd.replace(/"/g, '\\"');
|
|
195
|
-
const tsOutput = execSync(`sqlite3 '${safeDb}' "SELECT rollout_path FROM threads WHERE cwd='${safeCwd}' AND archived=0 AND created_at >= ${tmuxCreated} ORDER BY created_at ASC LIMIT 1;"`, { encoding: "utf-8", timeout: 3000, stdio: "pipe" }).trim();
|
|
196
|
-
if (tsOutput && existsSync(tsOutput))
|
|
197
|
-
return tsOutput;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
catch {
|
|
201
|
-
/* tmux unavailable or session gone — fall through to Tier 3 */
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
// Last resort: most recently updated thread for this cwd.
|
|
205
|
-
if (session.cwd) {
|
|
206
|
-
const safeCwd = session.cwd.replace(/"/g, '\\"');
|
|
207
|
-
const cwdOutput = execSync(`sqlite3 '${safeDb}' "SELECT rollout_path FROM threads WHERE cwd='${safeCwd}' AND archived=0 ORDER BY updated_at DESC LIMIT 1;"`, { encoding: "utf-8", timeout: 3000, stdio: "pipe" }).trim();
|
|
208
|
-
if (cwdOutput && existsSync(cwdOutput))
|
|
209
|
-
return cwdOutput;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
catch {
|
|
213
|
-
/* SQLite unavailable */
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
const sessionsDir = join(homeDir, ".codex", "sessions");
|
|
217
|
-
if (!existsSync(sessionsDir))
|
|
218
|
-
return null;
|
|
219
|
-
return findLatestJsonl(sessionsDir);
|
|
220
|
-
},
|
|
221
|
-
parse(filePath, cursor, limit) {
|
|
222
|
-
try {
|
|
223
|
-
const content = readFileSync(filePath, "utf-8");
|
|
224
|
-
const lines = content.split("\n").filter((l) => l.trim());
|
|
225
|
-
const counter = { value: 0 };
|
|
226
|
-
const messages = [];
|
|
227
|
-
for (const line of lines) {
|
|
228
|
-
try {
|
|
229
|
-
const record = JSON.parse(line);
|
|
230
|
-
const msg = parseRecord(record, counter);
|
|
231
|
-
if (Array.isArray(msg))
|
|
232
|
-
messages.push(...msg);
|
|
233
|
-
else if (msg)
|
|
234
|
-
messages.push(msg);
|
|
235
|
-
}
|
|
236
|
-
catch {
|
|
237
|
-
/* skip */
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
const total = messages.length;
|
|
241
|
-
const page = messages.slice(cursor, cursor + limit);
|
|
242
|
-
const nextCursor = cursor + page.length;
|
|
243
|
-
return { messages: page, total, hasMore: nextCursor < total, nextCursor };
|
|
244
|
-
}
|
|
245
|
-
catch {
|
|
246
|
-
return { messages: [], total: 0, hasMore: false, nextCursor: 0 };
|
|
247
|
-
}
|
|
248
|
-
},
|
|
249
|
-
};
|
|
250
|
-
registerAdapter("codex", codexAdapter);
|
|
251
|
-
//# sourceMappingURL=codex.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/transcriptAdapters/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { TranscriptMessage, Session } from "@agtd/shared";
|
|
2
|
-
export interface ParseResult {
|
|
3
|
-
messages: TranscriptMessage[];
|
|
4
|
-
total: number;
|
|
5
|
-
hasMore: boolean;
|
|
6
|
-
nextCursor: number;
|
|
7
|
-
}
|
|
8
|
-
export interface TranscriptAdapter {
|
|
9
|
-
/** Return absolute path to transcript file, or null if not found.
|
|
10
|
-
* `homeDir` is optional and defaults to `os.homedir()` — used in tests to inject a tmp dir. */
|
|
11
|
-
findFile(session: Session, homeDir?: string): string | null;
|
|
12
|
-
/** Parse messages starting from `cursor` (0-based index into the message array), returning up to `limit` */
|
|
13
|
-
parse(filePath: string, cursor: number, limit: number): ParseResult;
|
|
14
|
-
}
|
|
15
|
-
export declare function registerAdapter(agentType: string, adapter: TranscriptAdapter): void;
|
|
16
|
-
export declare function getAdapter(agentType: string): TranscriptAdapter | undefined;
|
|
17
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transcriptAdapters/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC;oGACgG;IAChG,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5D,4GAA4G;IAC5G,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;CACrE;AAKD,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAEN;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAE3E"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
// Registry is populated by the individual adapter modules
|
|
2
|
-
const adapters = new Map();
|
|
3
|
-
export function registerAdapter(agentType, adapter) {
|
|
4
|
-
adapters.set(agentType, adapter);
|
|
5
|
-
}
|
|
6
|
-
export function getAdapter(agentType) {
|
|
7
|
-
return adapters.get(agentType);
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transcriptAdapters/index.ts"],"names":[],"mappings":"AAkBA,0DAA0D;AAC1D,MAAM,QAAQ,GAAmC,IAAI,GAAG,EAAE,CAAC;AAE3D,MAAM,UAAU,eAAe,CAC7B,SAAiB,EACjB,OAA0B;IAE1B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/wsClient.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import WebSocket from "ws";
|
|
2
|
-
import type { AgentConfig } from "./config.js";
|
|
3
|
-
import "./transcriptAdapters/claude-code.js";
|
|
4
|
-
import "./transcriptAdapters/codex.js";
|
|
5
|
-
export declare function connectToBackend(config: AgentConfig): WebSocket;
|
|
6
|
-
//# sourceMappingURL=wsClient.d.ts.map
|
package/dist/wsClient.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wsClient.d.ts","sourceRoot":"","sources":["../src/wsClient.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAY/C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,+BAA+B,CAAC;AAIvC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAwL/D"}
|
package/dist/wsClient.js
DELETED
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import WebSocket from "ws";
|
|
2
|
-
import { spawnAgentSession } from "./spawn.js";
|
|
3
|
-
import { startTerminalBridge, stopTerminalBridge } from "./terminalBridge.js";
|
|
4
|
-
import { sendKeys, isTmuxAvailable, tmuxExec, tmuxSessionExists, sanitizeShellArg, } from "./tmux.js";
|
|
5
|
-
import { getAdapter } from "./transcriptAdapters/index.js";
|
|
6
|
-
import "./transcriptAdapters/claude-code.js"; // side-effect: registers adapter
|
|
7
|
-
import "./transcriptAdapters/codex.js"; // side-effect: registers adapter
|
|
8
|
-
let reconnectAttempts = 0;
|
|
9
|
-
export function connectToBackend(config) {
|
|
10
|
-
const wsUrl = config.backendUrl.replace(/^http/, "ws") +
|
|
11
|
-
`/ws/agent/${config.deviceId}?apiKey=${encodeURIComponent(config.apiKey)}`;
|
|
12
|
-
console.log(`Connecting to backend WS: ${config.backendUrl}/ws/agent/${config.deviceId}`);
|
|
13
|
-
const ws = new WebSocket(wsUrl);
|
|
14
|
-
ws.on("open", () => {
|
|
15
|
-
reconnectAttempts = 0;
|
|
16
|
-
console.log("Connected to backend WebSocket");
|
|
17
|
-
});
|
|
18
|
-
ws.on("message", async (data) => {
|
|
19
|
-
try {
|
|
20
|
-
const msg = JSON.parse(data.toString());
|
|
21
|
-
switch (msg.type) {
|
|
22
|
-
case "spawn-session": {
|
|
23
|
-
const { projectPath, projectName, agentType, task } = msg.payload;
|
|
24
|
-
const sessionId = await spawnAgentSession(config, {
|
|
25
|
-
projectPath,
|
|
26
|
-
projectName,
|
|
27
|
-
agentType,
|
|
28
|
-
task,
|
|
29
|
-
});
|
|
30
|
-
ws.send(JSON.stringify({
|
|
31
|
-
type: "session-started",
|
|
32
|
-
payload: { sessionId },
|
|
33
|
-
}));
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
case "kill-session": {
|
|
37
|
-
const { sessionId, tmuxSession } = msg.payload;
|
|
38
|
-
stopTerminalBridge(sessionId);
|
|
39
|
-
if (tmuxSession && tmuxSessionExists(tmuxSession)) {
|
|
40
|
-
tmuxExec(`tmux kill-session -t '${sanitizeShellArg(tmuxSession)}'`);
|
|
41
|
-
console.log(`Killed tmux session: ${tmuxSession}`);
|
|
42
|
-
}
|
|
43
|
-
ws.send(JSON.stringify({
|
|
44
|
-
type: "session-ended",
|
|
45
|
-
payload: { sessionId },
|
|
46
|
-
}));
|
|
47
|
-
break;
|
|
48
|
-
}
|
|
49
|
-
case "attach-terminal": {
|
|
50
|
-
const { sessionId, tmuxSession } = msg.payload;
|
|
51
|
-
startTerminalBridge(sessionId, tmuxSession, ws);
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
case "detach-terminal": {
|
|
55
|
-
stopTerminalBridge(msg.payload.sessionId);
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
case "terminal-input": {
|
|
59
|
-
if (isTmuxAvailable()) {
|
|
60
|
-
sendKeys(msg.payload.tmuxSession, msg.payload.data);
|
|
61
|
-
}
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
case "user-message": {
|
|
65
|
-
const tmuxAvail = isTmuxAvailable();
|
|
66
|
-
const sessionExists = tmuxSessionExists(msg.payload.tmuxSession);
|
|
67
|
-
// Dump current pane list so we can see active window/pane
|
|
68
|
-
let paneInfo = "n/a";
|
|
69
|
-
try {
|
|
70
|
-
paneInfo = tmuxExec(`tmux list-panes -t '${sanitizeShellArg(msg.payload.tmuxSession)}' -F '#I:#P #{pane_current_command} #{pane_active}'`).trim();
|
|
71
|
-
}
|
|
72
|
-
catch { }
|
|
73
|
-
console.log(`[user-message] session=${msg.payload.tmuxSession} exists=${sessionExists} available=${tmuxAvail} panes="${paneInfo}" msg="${msg.payload.message?.slice(0, 80)}"`);
|
|
74
|
-
if (tmuxAvail && sessionExists) {
|
|
75
|
-
try {
|
|
76
|
-
// Capture pane BEFORE send so we can see Codex's current state in logs
|
|
77
|
-
let paneBefore = "";
|
|
78
|
-
try {
|
|
79
|
-
paneBefore = tmuxExec(`tmux capture-pane -t '${sanitizeShellArg(msg.payload.tmuxSession)}' -p -S -10`)
|
|
80
|
-
.split("\n")
|
|
81
|
-
.slice(-5)
|
|
82
|
-
.join(" | ");
|
|
83
|
-
}
|
|
84
|
-
catch { }
|
|
85
|
-
console.log(`[user-message] pane-before: ${paneBefore}`);
|
|
86
|
-
// Send text first, then CR (0x0d) as a SEPARATE tmux command with a
|
|
87
|
-
// short delay. When text+CR arrive in one PTY write Codex processes the
|
|
88
|
-
// text chars but drops the CR. xterm.js sends each keystroke as a separate
|
|
89
|
-
// write — sending CR separately mirrors that and Codex accepts the Enter.
|
|
90
|
-
sendKeys(msg.payload.tmuxSession, msg.payload.message);
|
|
91
|
-
await new Promise((r) => setTimeout(r, 80));
|
|
92
|
-
sendKeys(msg.payload.tmuxSession, "\r");
|
|
93
|
-
console.log(`[user-message] sent OK`);
|
|
94
|
-
// Capture pane AFTER send to verify bytes arrived
|
|
95
|
-
await new Promise((r) => setTimeout(r, 500));
|
|
96
|
-
let paneAfter = "";
|
|
97
|
-
try {
|
|
98
|
-
paneAfter = tmuxExec(`tmux capture-pane -t '${sanitizeShellArg(msg.payload.tmuxSession)}' -p -S -10`)
|
|
99
|
-
.split("\n")
|
|
100
|
-
.slice(-5)
|
|
101
|
-
.join(" | ");
|
|
102
|
-
}
|
|
103
|
-
catch { }
|
|
104
|
-
console.log(`[user-message] pane-after: ${paneAfter}`);
|
|
105
|
-
}
|
|
106
|
-
catch (e) {
|
|
107
|
-
console.error(`[user-message] sendKeys failed:`, e);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
break;
|
|
111
|
-
}
|
|
112
|
-
case "get-transcript": {
|
|
113
|
-
// Single destructure — all fields come from the same payload object
|
|
114
|
-
const { requestId, sessionId, agentType, cwd, cursor = 0, limit = 50, codexThreadId = null, tmuxSession = null, } = msg.payload;
|
|
115
|
-
const adapter = getAdapter(agentType);
|
|
116
|
-
let result = {
|
|
117
|
-
messages: [],
|
|
118
|
-
total: 0,
|
|
119
|
-
hasMore: false,
|
|
120
|
-
nextCursor: 0,
|
|
121
|
-
};
|
|
122
|
-
if (adapter) {
|
|
123
|
-
const fakeSession = {
|
|
124
|
-
id: sessionId,
|
|
125
|
-
cwd,
|
|
126
|
-
agentType,
|
|
127
|
-
codexThreadId,
|
|
128
|
-
tmuxSession,
|
|
129
|
-
};
|
|
130
|
-
const filePath = adapter.findFile(fakeSession);
|
|
131
|
-
if (filePath) {
|
|
132
|
-
result = adapter.parse(filePath, cursor, limit);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
ws.send(JSON.stringify({
|
|
136
|
-
type: "transcript-response",
|
|
137
|
-
payload: { requestId, ...result },
|
|
138
|
-
}));
|
|
139
|
-
break;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
catch (e) {
|
|
144
|
-
console.error("Error handling WS message:", e);
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
ws.on("close", () => {
|
|
148
|
-
const delaySec = Math.min(2 ** Math.min(reconnectAttempts, 5), 32);
|
|
149
|
-
reconnectAttempts++;
|
|
150
|
-
console.log(`Disconnected. Reconnecting in ${delaySec}s...`);
|
|
151
|
-
setTimeout(() => connectToBackend(config), delaySec * 1000);
|
|
152
|
-
});
|
|
153
|
-
ws.on("error", (e) => console.error("WS error:", e.message));
|
|
154
|
-
return ws;
|
|
155
|
-
}
|
|
156
|
-
//# sourceMappingURL=wsClient.js.map
|
package/dist/wsClient.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wsClient.js","sourceRoot":"","sources":["../src/wsClient.ts"],"names":[],"mappings":"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"}
|