@agtd/agent 0.1.0 → 0.1.2
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/__tests__/codexAdapterFindFile.test.d.ts +2 -0
- package/dist/__tests__/codexAdapterFindFile.test.d.ts.map +1 -0
- package/dist/__tests__/codexAdapterFindFile.test.js +298 -0
- package/dist/__tests__/codexAdapterFindFile.test.js.map +1 -0
- package/dist/__tests__/enrichers.test.d.ts +2 -0
- package/dist/__tests__/enrichers.test.d.ts.map +1 -0
- package/dist/__tests__/enrichers.test.js +47 -0
- package/dist/__tests__/enrichers.test.js.map +1 -0
- package/dist/__tests__/tmux.integration.test.d.ts +2 -0
- package/dist/__tests__/tmux.integration.test.d.ts.map +1 -0
- package/dist/__tests__/tmux.integration.test.js +112 -0
- package/dist/__tests__/tmux.integration.test.js.map +1 -0
- package/dist/__tests__/tmux.test.d.ts +2 -0
- package/dist/__tests__/tmux.test.d.ts.map +1 -0
- package/dist/__tests__/tmux.test.js +26 -0
- package/dist/__tests__/tmux.test.js.map +1 -0
- package/dist/__tests__/transcriptAdapters.test.d.ts +2 -0
- package/dist/__tests__/transcriptAdapters.test.d.ts.map +1 -0
- package/dist/__tests__/transcriptAdapters.test.js +133 -0
- package/dist/__tests__/transcriptAdapters.test.js.map +1 -0
- package/dist/adapters/claude-code.d.ts +3 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +48 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/codex.d.ts +3 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +33 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/generic.d.ts +3 -0
- package/dist/adapters/generic.d.ts.map +1 -0
- package/dist/adapters/generic.js +38 -0
- package/dist/adapters/generic.js.map +1 -0
- package/dist/adapters/index.d.ts +7 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +12 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/agent.d.ts +3 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +49 -6
- package/dist/agent.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +125 -142
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +26 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +48 -0
- package/dist/config.js.map +1 -0
- package/dist/enrichers/git.d.ts +6 -0
- package/dist/enrichers/git.d.ts.map +1 -0
- package/dist/enrichers/git.js +20 -0
- package/dist/enrichers/git.js.map +1 -0
- package/dist/enrichers/pr.d.ts +2 -0
- package/dist/enrichers/pr.d.ts.map +1 -0
- package/dist/enrichers/pr.js +10 -0
- package/dist/enrichers/pr.js.map +1 -0
- package/dist/enrichers/transcript.d.ts +8 -0
- package/dist/enrichers/transcript.d.ts.map +1 -0
- package/dist/enrichers/transcript.js +33 -0
- package/dist/enrichers/transcript.js.map +1 -0
- package/dist/heartbeat.d.ts +4 -0
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +15 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/init.d.ts +10 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +70 -0
- package/dist/init.js.map +1 -0
- package/dist/register.d.ts +3 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +22 -0
- package/dist/register.js.map +1 -0
- package/dist/sessionScanner.d.ts +20 -0
- package/dist/sessionScanner.d.ts.map +1 -0
- package/dist/sessionScanner.js +479 -0
- package/dist/sessionScanner.js.map +1 -0
- package/dist/spawn.d.ts +8 -0
- package/dist/spawn.d.ts.map +1 -0
- package/dist/spawn.js +73 -0
- package/dist/spawn.js.map +1 -0
- package/dist/syncProjects.d.ts +3 -0
- package/dist/syncProjects.d.ts.map +1 -0
- package/dist/syncProjects.js +91 -0
- package/dist/syncProjects.js.map +1 -0
- package/dist/terminalBridge.d.ts +4 -0
- package/dist/terminalBridge.d.ts.map +1 -0
- package/dist/terminalBridge.js +42 -0
- package/dist/terminalBridge.js.map +1 -0
- package/dist/tmux.d.ts +21 -0
- package/dist/tmux.d.ts.map +1 -0
- package/dist/tmux.js +89 -0
- package/dist/tmux.js.map +1 -0
- package/dist/transcriptAdapters/claude-code.d.ts +3 -0
- package/dist/transcriptAdapters/claude-code.d.ts.map +1 -0
- package/dist/transcriptAdapters/claude-code.js +147 -0
- package/dist/transcriptAdapters/claude-code.js.map +1 -0
- package/dist/transcriptAdapters/codex.d.ts +3 -0
- package/dist/transcriptAdapters/codex.d.ts.map +1 -0
- package/dist/transcriptAdapters/codex.js +251 -0
- package/dist/transcriptAdapters/codex.js.map +1 -0
- package/dist/transcriptAdapters/index.d.ts +17 -0
- package/dist/transcriptAdapters/index.d.ts.map +1 -0
- package/dist/transcriptAdapters/index.js +9 -0
- package/dist/transcriptAdapters/index.js.map +1 -0
- package/dist/wsClient.d.ts +6 -0
- package/dist/wsClient.d.ts.map +1 -0
- package/dist/wsClient.js +156 -0
- package/dist/wsClient.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll, afterAll } from "vitest";
|
|
2
|
+
import { writeFileSync, mkdirSync, rmSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { claudeCodeAdapter } from "../transcriptAdapters/claude-code.js";
|
|
6
|
+
import { codexAdapter } from "../transcriptAdapters/codex.js";
|
|
7
|
+
const FAKE_SESSION = {
|
|
8
|
+
id: "sess_test",
|
|
9
|
+
deviceId: "dev1",
|
|
10
|
+
projectId: null,
|
|
11
|
+
agentType: "claude-code",
|
|
12
|
+
agentCommand: "",
|
|
13
|
+
cwd: "/projects/myapp",
|
|
14
|
+
branch: "main",
|
|
15
|
+
status: "idle",
|
|
16
|
+
task: "",
|
|
17
|
+
model: null,
|
|
18
|
+
contextPercent: null,
|
|
19
|
+
mcpServers: null,
|
|
20
|
+
prUrl: null,
|
|
21
|
+
tmuxSession: "aidash-sess_test",
|
|
22
|
+
tmuxWindow: "claude",
|
|
23
|
+
lastHeartbeatAt: new Date().toISOString(),
|
|
24
|
+
codexThreadId: null,
|
|
25
|
+
};
|
|
26
|
+
const USER_LINE = JSON.stringify({
|
|
27
|
+
type: "user",
|
|
28
|
+
uuid: "uuid-1",
|
|
29
|
+
timestamp: "2026-01-01T00:00:00Z",
|
|
30
|
+
message: { content: [{ type: "text", text: "Hello Claude" }] },
|
|
31
|
+
});
|
|
32
|
+
const ASSISTANT_LINE = JSON.stringify({
|
|
33
|
+
type: "assistant",
|
|
34
|
+
uuid: "uuid-2",
|
|
35
|
+
timestamp: "2026-01-01T00:00:01Z",
|
|
36
|
+
message: {
|
|
37
|
+
content: [{ type: "text", text: "Hi there!" }],
|
|
38
|
+
model: "claude-opus-4-6",
|
|
39
|
+
usage: { input_tokens: 10, output_tokens: 5 },
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
describe("claudeCodeAdapter", () => {
|
|
43
|
+
const tmpDir = join(tmpdir(), "agtd-test-" + Date.now());
|
|
44
|
+
// The adapter constructs: join(homeDir, ".claude", "projects", cwd.replace(/\//g, "-"))
|
|
45
|
+
// For cwd="/projects/myapp" the dir name is "-projects-myapp"
|
|
46
|
+
const projectDir = join(tmpDir, ".claude", "projects", "-projects-myapp");
|
|
47
|
+
const jsonlPath = join(projectDir, "session.jsonl");
|
|
48
|
+
beforeAll(() => {
|
|
49
|
+
mkdirSync(projectDir, { recursive: true });
|
|
50
|
+
writeFileSync(jsonlPath, [USER_LINE, ASSISTANT_LINE].join("\n") + "\n");
|
|
51
|
+
});
|
|
52
|
+
afterAll(() => {
|
|
53
|
+
rmSync(tmpDir, { recursive: true, force: true });
|
|
54
|
+
});
|
|
55
|
+
it("findFile returns path when project dir contains a jsonl file", () => {
|
|
56
|
+
// Pass tmpDir as homeDir so the adapter looks in tmpDir/.claude/projects/...
|
|
57
|
+
const path = claudeCodeAdapter.findFile(FAKE_SESSION, tmpDir);
|
|
58
|
+
expect(path).toBe(jsonlPath);
|
|
59
|
+
});
|
|
60
|
+
it("parse returns messages with correct roles", () => {
|
|
61
|
+
const result = claudeCodeAdapter.parse(jsonlPath, 0, 50);
|
|
62
|
+
expect(result.messages).toHaveLength(2);
|
|
63
|
+
expect(result.messages[0].role).toBe("user");
|
|
64
|
+
const c0 = result.messages[0].content[0];
|
|
65
|
+
expect(c0.type).toBe("text");
|
|
66
|
+
expect(c0.text).toBe("Hello Claude");
|
|
67
|
+
expect(result.messages[1].role).toBe("assistant");
|
|
68
|
+
expect(result.messages[1].model).toBe("claude-opus-4-6");
|
|
69
|
+
});
|
|
70
|
+
it("parse respects cursor and limit", () => {
|
|
71
|
+
const result = claudeCodeAdapter.parse(jsonlPath, 1, 1);
|
|
72
|
+
expect(result.messages).toHaveLength(1);
|
|
73
|
+
expect(result.messages[0].role).toBe("assistant");
|
|
74
|
+
expect(result.hasMore).toBe(false);
|
|
75
|
+
expect(result.total).toBe(2);
|
|
76
|
+
});
|
|
77
|
+
it("parse returns empty result for missing file", () => {
|
|
78
|
+
const result = claudeCodeAdapter.parse("/nonexistent/path.jsonl", 0, 50);
|
|
79
|
+
expect(result.messages).toHaveLength(0);
|
|
80
|
+
expect(result.total).toBe(0);
|
|
81
|
+
expect(result.hasMore).toBe(false);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
const CODEX_USER_LINE = JSON.stringify({
|
|
85
|
+
type: "response_item",
|
|
86
|
+
timestamp: "2026-01-01T00:00:00Z",
|
|
87
|
+
payload: {
|
|
88
|
+
type: "message",
|
|
89
|
+
role: "user",
|
|
90
|
+
content: [{ type: "text", text: "fix the bug" }],
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
const CODEX_ASSISTANT_LINE = JSON.stringify({
|
|
94
|
+
type: "response_item",
|
|
95
|
+
timestamp: "2026-01-01T00:00:01Z",
|
|
96
|
+
payload: {
|
|
97
|
+
type: "message",
|
|
98
|
+
role: "assistant",
|
|
99
|
+
content: [{ type: "text", text: "Done!" }],
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
describe("codexAdapter", () => {
|
|
103
|
+
const codexTmpDir = join(tmpdir(), "agtd-codex-test-" + Date.now());
|
|
104
|
+
// Codex sessions are stored under sessions/YEAR/MONTH/DAY/file.jsonl
|
|
105
|
+
const sessionDir = join(codexTmpDir, ".codex", "sessions", "2026", "01", "01");
|
|
106
|
+
const jsonlPath = join(sessionDir, "session.jsonl");
|
|
107
|
+
beforeAll(() => {
|
|
108
|
+
mkdirSync(sessionDir, { recursive: true });
|
|
109
|
+
writeFileSync(jsonlPath, [CODEX_USER_LINE, CODEX_ASSISTANT_LINE].join("\n") + "\n");
|
|
110
|
+
});
|
|
111
|
+
afterAll(() => {
|
|
112
|
+
rmSync(codexTmpDir, { recursive: true, force: true });
|
|
113
|
+
});
|
|
114
|
+
it("findFile returns latest jsonl in sessions dir when SQLite absent", () => {
|
|
115
|
+
const CODEX_SESSION = {
|
|
116
|
+
id: "codex-123",
|
|
117
|
+
cwd: "/projects/x",
|
|
118
|
+
agentType: "codex",
|
|
119
|
+
};
|
|
120
|
+
const path = codexAdapter.findFile(CODEX_SESSION, codexTmpDir);
|
|
121
|
+
expect(path).toBe(jsonlPath);
|
|
122
|
+
});
|
|
123
|
+
it("parse returns user and assistant messages", () => {
|
|
124
|
+
const result = codexAdapter.parse(jsonlPath, 0, 50);
|
|
125
|
+
expect(result.messages).toHaveLength(2);
|
|
126
|
+
expect(result.messages[0].role).toBe("user");
|
|
127
|
+
const c0 = result.messages[0].content[0];
|
|
128
|
+
expect(c0.type).toBe("text");
|
|
129
|
+
expect(c0.text).toBe("fix the bug");
|
|
130
|
+
expect(result.messages[1].role).toBe("assistant");
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=transcriptAdapters.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcriptAdapters.test.js","sourceRoot":"","sources":["../../src/__tests__/transcriptAdapters.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,eAAO,MAAM,iBAAiB,EAAE,YA6C/B,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
function escapeForShell(str) {
|
|
2
|
+
return str.replace(/'/g, "'\\''");
|
|
3
|
+
}
|
|
4
|
+
export const claudeCodeAdapter = {
|
|
5
|
+
type: "claude-code",
|
|
6
|
+
buildSpawnCommand(_task, cwd) {
|
|
7
|
+
const escapedCwd = escapeForShell(cwd);
|
|
8
|
+
// Start in interactive mode (no -p flag which exits after one response)
|
|
9
|
+
return `cd '${escapedCwd}' && claude`;
|
|
10
|
+
},
|
|
11
|
+
hookInstallInstructions() {
|
|
12
|
+
return [
|
|
13
|
+
"To install the Claude Code hook for the agent dashboard:",
|
|
14
|
+
"",
|
|
15
|
+
"1. Edit (or create) ~/.claude/hooks.json",
|
|
16
|
+
"2. Add the following hook configuration:",
|
|
17
|
+
"",
|
|
18
|
+
" {",
|
|
19
|
+
' "hooks": {',
|
|
20
|
+
' "PreToolUse": [',
|
|
21
|
+
" {",
|
|
22
|
+
' "type": "command",',
|
|
23
|
+
' "command": "/path/to/packages/agent/src/hooks/claude-hook.sh PreToolUse"',
|
|
24
|
+
" }",
|
|
25
|
+
" ],",
|
|
26
|
+
' "PostToolUse": [',
|
|
27
|
+
" {",
|
|
28
|
+
' "type": "command",',
|
|
29
|
+
' "command": "/path/to/packages/agent/src/hooks/claude-hook.sh PostToolUse"',
|
|
30
|
+
" }",
|
|
31
|
+
" ],",
|
|
32
|
+
' "Stop": [',
|
|
33
|
+
" {",
|
|
34
|
+
' "type": "command",',
|
|
35
|
+
' "command": "/path/to/packages/agent/src/hooks/claude-hook.sh Stop"',
|
|
36
|
+
" }",
|
|
37
|
+
" ]",
|
|
38
|
+
" }",
|
|
39
|
+
" }",
|
|
40
|
+
"",
|
|
41
|
+
"3. Set the following environment variables:",
|
|
42
|
+
" - AGENT_DASHBOARD_BACKEND (e.g., http://localhost:3001)",
|
|
43
|
+
" - AGENT_DASHBOARD_DEVICE_ID",
|
|
44
|
+
" - AGENT_DASHBOARD_API_KEY",
|
|
45
|
+
].join("\n");
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"AAEA,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C,IAAI,EAAE,aAAa;IAEnB,iBAAiB,CAAC,KAAa,EAAE,GAAW;QAC1C,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACvC,wEAAwE;QACxE,OAAO,OAAO,UAAU,aAAa,CAAC;IACxC,CAAC;IAED,uBAAuB;QACrB,OAAO;YACL,0DAA0D;YAC1D,EAAE;YACF,0CAA0C;YAC1C,0CAA0C;YAC1C,EAAE;YACF,MAAM;YACN,iBAAiB;YACjB,wBAAwB;YACxB,YAAY;YACZ,+BAA+B;YAC/B,qFAAqF;YACrF,YAAY;YACZ,WAAW;YACX,yBAAyB;YACzB,YAAY;YACZ,+BAA+B;YAC/B,sFAAsF;YACtF,YAAY;YACZ,WAAW;YACX,kBAAkB;YAClB,YAAY;YACZ,+BAA+B;YAC/B,+EAA+E;YAC/E,YAAY;YACZ,UAAU;YACV,QAAQ;YACR,MAAM;YACN,EAAE;YACF,6CAA6C;YAC7C,4DAA4D;YAC5D,gCAAgC;YAChC,8BAA8B;SAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,eAAO,MAAM,YAAY,EAAE,YA8B1B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
function escapeForShell(str) {
|
|
2
|
+
return str.replace(/'/g, "'\\''");
|
|
3
|
+
}
|
|
4
|
+
export const codexAdapter = {
|
|
5
|
+
type: "codex",
|
|
6
|
+
buildSpawnCommand(task, cwd) {
|
|
7
|
+
const escapedTask = escapeForShell(task);
|
|
8
|
+
const escapedCwd = escapeForShell(cwd);
|
|
9
|
+
return `cd '${escapedCwd}' && codex '${escapedTask}'`;
|
|
10
|
+
},
|
|
11
|
+
hookInstallInstructions() {
|
|
12
|
+
return [
|
|
13
|
+
"To install the Codex hook for the agent dashboard:",
|
|
14
|
+
"",
|
|
15
|
+
"1. Use the codex-hook.sh wrapper script instead of calling codex directly:",
|
|
16
|
+
"",
|
|
17
|
+
" ./packages/agent/src/hooks/codex-hook.sh 'your task here'",
|
|
18
|
+
"",
|
|
19
|
+
" The wrapper script will:",
|
|
20
|
+
" - Send a working heartbeat before running codex",
|
|
21
|
+
" - Start a background keepalive loop (every 10s)",
|
|
22
|
+
" - Run codex with the provided task",
|
|
23
|
+
" - Send an idle heartbeat on exit",
|
|
24
|
+
"",
|
|
25
|
+
"2. Set the following environment variables:",
|
|
26
|
+
" - AGENT_DASHBOARD_BACKEND (e.g., http://localhost:3001)",
|
|
27
|
+
" - AGENT_DASHBOARD_DEVICE_ID",
|
|
28
|
+
" - AGENT_DASHBOARD_API_KEY",
|
|
29
|
+
" - AGENT_DASHBOARD_SESSION_ID (unique session identifier)",
|
|
30
|
+
].join("\n");
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAEA,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IAEb,iBAAiB,CAAC,IAAY,EAAE,GAAW;QACzC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,OAAO,UAAU,eAAe,WAAW,GAAG,CAAC;IACxD,CAAC;IAED,uBAAuB;QACrB,OAAO;YACL,oDAAoD;YACpD,EAAE;YACF,4EAA4E;YAC5E,EAAE;YACF,8DAA8D;YAC9D,EAAE;YACF,6BAA6B;YAC7B,oDAAoD;YACpD,oDAAoD;YACpD,uCAAuC;YACvC,qCAAqC;YACrC,EAAE;YACF,6CAA6C;YAC7C,4DAA4D;YAC5D,gCAAgC;YAChC,8BAA8B;YAC9B,6DAA6D;SAC9D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../src/adapters/generic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,eAAO,MAAM,cAAc,EAAE,YAmC5B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
function escapeForShell(str) {
|
|
2
|
+
return str.replace(/'/g, "'\\''");
|
|
3
|
+
}
|
|
4
|
+
export const genericAdapter = {
|
|
5
|
+
type: "generic",
|
|
6
|
+
buildSpawnCommand(task, cwd) {
|
|
7
|
+
const escapedTask = escapeForShell(task);
|
|
8
|
+
const escapedCwd = escapeForShell(cwd);
|
|
9
|
+
return `cd '${escapedCwd}' && echo 'Task: ${escapedTask}'`;
|
|
10
|
+
},
|
|
11
|
+
hookInstallInstructions() {
|
|
12
|
+
return [
|
|
13
|
+
"To send heartbeats from a generic agent to the dashboard:",
|
|
14
|
+
"",
|
|
15
|
+
"1. Use the generic-hook.sh script to send manual heartbeat updates:",
|
|
16
|
+
"",
|
|
17
|
+
" ./packages/agent/src/hooks/generic-hook.sh <session_id> <status> [task]",
|
|
18
|
+
"",
|
|
19
|
+
" Examples:",
|
|
20
|
+
' ./packages/agent/src/hooks/generic-hook.sh my-session working "Implementing feature X"',
|
|
21
|
+
" ./packages/agent/src/hooks/generic-hook.sh my-session idle",
|
|
22
|
+
" ./packages/agent/src/hooks/generic-hook.sh my-session awaiting_permission",
|
|
23
|
+
"",
|
|
24
|
+
"2. Or send heartbeats directly via curl:",
|
|
25
|
+
"",
|
|
26
|
+
" curl -X POST $AGENT_DASHBOARD_BACKEND/api/agent/heartbeat \\",
|
|
27
|
+
' -H "Content-Type: application/json" \\',
|
|
28
|
+
' -H "x-api-key: $AGENT_DASHBOARD_API_KEY" \\',
|
|
29
|
+
" -d '{\"deviceId\": \"...\", \"sessionId\": \"...\", \"status\": \"working\"}'",
|
|
30
|
+
"",
|
|
31
|
+
"3. Set the following environment variables:",
|
|
32
|
+
" - AGENT_DASHBOARD_BACKEND (e.g., http://localhost:3001)",
|
|
33
|
+
" - AGENT_DASHBOARD_DEVICE_ID",
|
|
34
|
+
" - AGENT_DASHBOARD_API_KEY",
|
|
35
|
+
].join("\n");
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=generic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic.js","sourceRoot":"","sources":["../../src/adapters/generic.ts"],"names":[],"mappings":"AAEA,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,IAAI,EAAE,SAAS;IAEf,iBAAiB,CAAC,IAAY,EAAE,GAAW;QACzC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,OAAO,UAAU,oBAAoB,WAAW,GAAG,CAAC;IAC7D,CAAC;IAED,uBAAuB;QACrB,OAAO;YACL,2DAA2D;YAC3D,EAAE;YACF,qEAAqE;YACrE,EAAE;YACF,4EAA4E;YAC5E,EAAE;YACF,cAAc;YACd,2FAA2F;YAC3F,+DAA+D;YAC/D,8EAA8E;YAC9E,EAAE;YACF,0CAA0C;YAC1C,EAAE;YACF,iEAAiE;YACjE,6CAA6C;YAC7C,kDAAkD;YAClD,oFAAoF;YACpF,EAAE;YACF,6CAA6C;YAC7C,4DAA4D;YAC5D,gCAAgC;YAChC,8BAA8B;SAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrD,uBAAuB,IAAI,MAAM,CAAC;CACnC;AAYD,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAE1D"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { claudeCodeAdapter } from "./claude-code.js";
|
|
2
|
+
import { codexAdapter } from "./codex.js";
|
|
3
|
+
import { genericAdapter } from "./generic.js";
|
|
4
|
+
const adapters = {
|
|
5
|
+
"claude-code": claudeCodeAdapter,
|
|
6
|
+
"codex": codexAdapter,
|
|
7
|
+
"generic": genericAdapter,
|
|
8
|
+
};
|
|
9
|
+
export function getAdapter(agentType) {
|
|
10
|
+
return adapters[agentType] || genericAdapter;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,QAAQ,GAAiC;IAC7C,aAAa,EAAE,iBAAiB;IAChC,OAAO,EAAE,YAAY;IACrB,SAAS,EAAE,cAAc;CAC1B,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,cAAc,CAAC;AAC/C,CAAC"}
|
package/dist/agent.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA2B/C,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBnE"}
|
package/dist/agent.js
CHANGED
|
@@ -1,6 +1,49 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from "./
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
};
|
|
1
|
+
import { loadConfig } from "./config.js";
|
|
2
|
+
import { registerDevice } from "./register.js";
|
|
3
|
+
import { syncProjects } from "./syncProjects.js";
|
|
4
|
+
import { connectToBackend } from "./wsClient.js";
|
|
5
|
+
import { startSessionScanner } from "./sessionScanner.js";
|
|
6
|
+
import { KEEPALIVE_INTERVAL_MS } from "@agtd/shared";
|
|
7
|
+
async function waitForBackend(config, maxRetries = 30) {
|
|
8
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
9
|
+
try {
|
|
10
|
+
await registerDevice(config);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
const delaySec = Math.min(2 ** Math.min(i, 4), 16);
|
|
15
|
+
console.log(`Backend not ready, retrying in ${delaySec}s... (${i + 1}/${maxRetries})`);
|
|
16
|
+
await new Promise((r) => setTimeout(r, delaySec * 1000));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
throw new Error("Backend not reachable after retries");
|
|
20
|
+
}
|
|
21
|
+
export async function startAgent(config) {
|
|
22
|
+
console.log(`Starting agent for device: ${config.deviceId}`);
|
|
23
|
+
console.log(`Backend: ${config.backendUrl}`);
|
|
24
|
+
await waitForBackend(config);
|
|
25
|
+
await syncProjects(config);
|
|
26
|
+
connectToBackend(config);
|
|
27
|
+
startSessionScanner(config);
|
|
28
|
+
setInterval(async () => {
|
|
29
|
+
try {
|
|
30
|
+
await registerDevice(config);
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
console.error("Keepalive failed:", e);
|
|
34
|
+
}
|
|
35
|
+
}, KEEPALIVE_INTERVAL_MS);
|
|
36
|
+
console.log("Agent running. Press Ctrl+C to stop.");
|
|
37
|
+
}
|
|
38
|
+
// Direct execution (monorepo dev mode)
|
|
39
|
+
const isDirectRun = process.argv[1] &&
|
|
40
|
+
import.meta.url.endsWith(process.argv[1].replace(/\\/g, "/"));
|
|
41
|
+
if (isDirectRun) {
|
|
42
|
+
const configPath = process.argv[2];
|
|
43
|
+
const config = loadConfig(configPath);
|
|
44
|
+
startAgent(config).catch((e) => {
|
|
45
|
+
console.error("Agent failed:", e);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,KAAK,UAAU,cAAc,CAC3B,MAAmB,EACnB,UAAU,GAAG,EAAE;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CACT,kCAAkC,QAAQ,SAAS,CAAC,GAAG,CAAC,IAAI,UAAU,GAAG,CAC1E,CAAC;YACF,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAmB;IAClD,OAAO,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAE7C,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,WAAW,CAAC,KAAK,IAAI,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAE1B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;AACtD,CAAC;AAED,uCAAuC;AACvC,MAAM,WAAW,GACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACf,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAEhE,IAAI,WAAW,EAAE,CAAC;IAChB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface ParsedArgs {
|
|
2
|
+
init: boolean;
|
|
3
|
+
backend?: string;
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
deviceName?: string;
|
|
6
|
+
configPath?: string;
|
|
7
|
+
help: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAaA,UAAU,UAAU;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAmCpD"}
|