agentpane 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/agentpane.js +3 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/acp-client.d.ts +33 -0
- package/dist/lib/acp-client.js +464 -0
- package/dist/lib/acp-client.js.map +1 -0
- package/dist/lib/db.d.ts +4 -0
- package/dist/lib/db.js +57 -0
- package/dist/lib/db.js.map +1 -0
- package/dist/lib/event-broadcaster.d.ts +22 -0
- package/dist/lib/event-broadcaster.js +116 -0
- package/dist/lib/event-broadcaster.js.map +1 -0
- package/dist/lib/providers.d.ts +8 -0
- package/dist/lib/providers.js +25 -0
- package/dist/lib/providers.js.map +1 -0
- package/dist/lib/runtime.d.ts +4 -0
- package/dist/lib/runtime.js +7 -0
- package/dist/lib/runtime.js.map +1 -0
- package/dist/lib/schema.d.ts +95 -0
- package/dist/lib/schema.js +35 -0
- package/dist/lib/schema.js.map +1 -0
- package/dist/lib/session-repo.d.ts +24 -0
- package/dist/lib/session-repo.js +125 -0
- package/dist/lib/session-repo.js.map +1 -0
- package/dist/routes/sessions.d.ts +2 -0
- package/dist/routes/sessions.js +189 -0
- package/dist/routes/sessions.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import { streamSSE } from "hono/streaming";
|
|
3
|
+
import { Effect, Exit } from "effect";
|
|
4
|
+
import { AppRuntime } from "../lib/runtime.js";
|
|
5
|
+
import { SessionRepo } from "../lib/session-repo.js";
|
|
6
|
+
import { AcpClient } from "../lib/acp-client.js";
|
|
7
|
+
const matchRouteExit = (exit, c, successStatus = 200) => Exit.match(exit, {
|
|
8
|
+
onFailure: (cause) => {
|
|
9
|
+
if (cause._tag === "Fail") {
|
|
10
|
+
const err = cause.error;
|
|
11
|
+
switch (err._tag) {
|
|
12
|
+
case "SessionNotFoundError":
|
|
13
|
+
return c.json({ error: "Session not found" }, 404);
|
|
14
|
+
case "AcpConnectionError":
|
|
15
|
+
return c.json({ error: err.message }, 502);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return c.json({ error: "Internal error" }, 500);
|
|
19
|
+
},
|
|
20
|
+
onSuccess: (result) => c.json(result, successStatus),
|
|
21
|
+
});
|
|
22
|
+
const app = new Hono();
|
|
23
|
+
// GET /sessions — list all sessions with connection status
|
|
24
|
+
app.get("/", async (c) => {
|
|
25
|
+
const result = await AppRuntime.runPromise(Effect.gen(function* () {
|
|
26
|
+
const repo = yield* SessionRepo;
|
|
27
|
+
const acp = yield* AcpClient;
|
|
28
|
+
const sessions = yield* repo.list();
|
|
29
|
+
const connected = acp.connectedSessionIds();
|
|
30
|
+
const prompting = acp.promptingSessionIds();
|
|
31
|
+
return sessions.map((s) => ({
|
|
32
|
+
...s,
|
|
33
|
+
connected: connected.has(s.id),
|
|
34
|
+
prompting: prompting.has(s.id),
|
|
35
|
+
}));
|
|
36
|
+
}));
|
|
37
|
+
return c.json(result);
|
|
38
|
+
});
|
|
39
|
+
// POST /sessions — create a new session, optionally auto-connect
|
|
40
|
+
app.post("/", async (c) => {
|
|
41
|
+
const body = await c.req.json().catch(() => ({}));
|
|
42
|
+
const exit = await AppRuntime.runPromiseExit(Effect.gen(function* () {
|
|
43
|
+
const repo = yield* SessionRepo;
|
|
44
|
+
const acp = yield* AcpClient;
|
|
45
|
+
const session = yield* repo.create(body.name, body.agent_type);
|
|
46
|
+
// Ensure broadcaster exists immediately so EventSource works
|
|
47
|
+
acp.ensureBroadcaster(session.id);
|
|
48
|
+
// If agent_type provided, await connection (atomic create+connect)
|
|
49
|
+
let connected = false;
|
|
50
|
+
if (body.agent_type) {
|
|
51
|
+
yield* acp.connect(session.id, session.cwd, session.agent_type);
|
|
52
|
+
connected = true;
|
|
53
|
+
}
|
|
54
|
+
return { ...session, connected, prompting: false };
|
|
55
|
+
}));
|
|
56
|
+
return matchRouteExit(exit, c, 201);
|
|
57
|
+
});
|
|
58
|
+
// GET /sessions/status — quick connection/prompting status check
|
|
59
|
+
app.get("/status", async (c) => {
|
|
60
|
+
const { connected, prompting } = await AppRuntime.runPromise(Effect.map(AcpClient, (acp) => ({
|
|
61
|
+
connected: [...acp.connectedSessionIds()],
|
|
62
|
+
prompting: [...acp.promptingSessionIds()],
|
|
63
|
+
})));
|
|
64
|
+
return c.json({ connected, prompting });
|
|
65
|
+
});
|
|
66
|
+
// GET /sessions/:id — get a single session
|
|
67
|
+
app.get("/:id", async (c) => {
|
|
68
|
+
const id = c.req.param("id");
|
|
69
|
+
const exit = await AppRuntime.runPromiseExit(Effect.gen(function* () {
|
|
70
|
+
const repo = yield* SessionRepo;
|
|
71
|
+
const acp = yield* AcpClient;
|
|
72
|
+
const session = yield* repo.get(id);
|
|
73
|
+
const connected = yield* acp.isConnected(id);
|
|
74
|
+
return { ...session, connected };
|
|
75
|
+
}));
|
|
76
|
+
return matchRouteExit(exit, c);
|
|
77
|
+
});
|
|
78
|
+
// PATCH /sessions/:id — rename a session
|
|
79
|
+
app.patch("/:id", async (c) => {
|
|
80
|
+
const id = c.req.param("id");
|
|
81
|
+
const body = await c.req.json();
|
|
82
|
+
const exit = await AppRuntime.runPromiseExit(Effect.flatMap(SessionRepo, (repo) => repo.rename(id, body.name)));
|
|
83
|
+
return matchRouteExit(exit, c);
|
|
84
|
+
});
|
|
85
|
+
// DELETE /sessions/:id — delete a session
|
|
86
|
+
app.delete("/:id", async (c) => {
|
|
87
|
+
const id = c.req.param("id");
|
|
88
|
+
await AppRuntime.runPromise(Effect.gen(function* () {
|
|
89
|
+
const acp = yield* AcpClient;
|
|
90
|
+
yield* acp.disconnect(id);
|
|
91
|
+
acp.removeBroadcaster(id);
|
|
92
|
+
const repo = yield* SessionRepo;
|
|
93
|
+
yield* repo.remove(id);
|
|
94
|
+
}));
|
|
95
|
+
return c.body(null, 204);
|
|
96
|
+
});
|
|
97
|
+
// GET /sessions/:id/conversation — get full conversation history
|
|
98
|
+
app.get("/:id/conversation", async (c) => {
|
|
99
|
+
const id = c.req.param("id");
|
|
100
|
+
const conversation = await AppRuntime.runPromise(Effect.flatMap(SessionRepo, (repo) => repo.getConversation(id)));
|
|
101
|
+
return c.json(conversation);
|
|
102
|
+
});
|
|
103
|
+
// POST /sessions/:id/prompt — send a prompt to the agent
|
|
104
|
+
app.post("/:id/prompt", async (c) => {
|
|
105
|
+
const id = c.req.param("id");
|
|
106
|
+
const body = await c.req.json();
|
|
107
|
+
const { content } = body;
|
|
108
|
+
if (!content || typeof content !== "string") {
|
|
109
|
+
return c.json({ error: "content is required" }, 400);
|
|
110
|
+
}
|
|
111
|
+
const exit = await AppRuntime.runPromiseExit(Effect.gen(function* () {
|
|
112
|
+
const acp = yield* AcpClient;
|
|
113
|
+
// No auto-connect — return error if not connected
|
|
114
|
+
return yield* acp.prompt(id, content);
|
|
115
|
+
}));
|
|
116
|
+
return matchRouteExit(exit, c);
|
|
117
|
+
});
|
|
118
|
+
// POST /sessions/:id/cancel — cancel an in-progress prompt
|
|
119
|
+
app.post("/:id/cancel", async (c) => {
|
|
120
|
+
const id = c.req.param("id");
|
|
121
|
+
await AppRuntime.runPromise(Effect.flatMap(AcpClient, (acp) => acp.cancel(id)));
|
|
122
|
+
return c.body(null, 204);
|
|
123
|
+
});
|
|
124
|
+
// GET /sessions/:id/events — SSE event stream
|
|
125
|
+
app.get("/:id/events", (c) => {
|
|
126
|
+
const id = c.req.param("id");
|
|
127
|
+
// SSE standard: EventSource sends Last-Event-ID on auto-reconnect
|
|
128
|
+
const lastEventIdHeader = c.req.header("Last-Event-ID");
|
|
129
|
+
const afterEventId = lastEventIdHeader ? parseInt(lastEventIdHeader, 10) : undefined;
|
|
130
|
+
return streamSSE(c, async (stream) => {
|
|
131
|
+
const { subscriberId, stream: eventStream, prompting, assistantTurnId, latestEventId } = await AppRuntime.runPromise(Effect.flatMap(AcpClient, (acp) => acp.subscribe(id, afterEventId)));
|
|
132
|
+
// Send initial status event (id: 0)
|
|
133
|
+
await stream.writeSSE({
|
|
134
|
+
id: "0",
|
|
135
|
+
data: JSON.stringify({
|
|
136
|
+
sessionUpdate: "status",
|
|
137
|
+
prompting,
|
|
138
|
+
assistantTurnId,
|
|
139
|
+
latestEventId,
|
|
140
|
+
}),
|
|
141
|
+
});
|
|
142
|
+
// Pipe broadcaster events
|
|
143
|
+
const reader = eventStream.getReader();
|
|
144
|
+
try {
|
|
145
|
+
while (true) {
|
|
146
|
+
const { done, value } = await reader.read();
|
|
147
|
+
if (done)
|
|
148
|
+
break;
|
|
149
|
+
// value is already SSE-formatted ("id: N\ndata: {...}\n\n")
|
|
150
|
+
await stream.write(value);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Stream ended
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
await AppRuntime.runPromise(Effect.flatMap(AcpClient, (acp) => acp.unsubscribe(id, subscriberId))).catch(() => { });
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
// POST /sessions/:id/connect — connect agent to session
|
|
162
|
+
app.post("/:id/connect", async (c) => {
|
|
163
|
+
const id = c.req.param("id");
|
|
164
|
+
const body = await c.req.json().catch(() => ({}));
|
|
165
|
+
const exit = await AppRuntime.runPromiseExit(Effect.gen(function* () {
|
|
166
|
+
const repo = yield* SessionRepo;
|
|
167
|
+
const acp = yield* AcpClient;
|
|
168
|
+
// If agent_type and cwd provided, update session config first
|
|
169
|
+
let session;
|
|
170
|
+
if (body.agent_type && body.cwd) {
|
|
171
|
+
session = yield* repo.updateConfig(id, body.agent_type, body.cwd);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
session = yield* repo.get(id);
|
|
175
|
+
}
|
|
176
|
+
// Ensure broadcaster exists
|
|
177
|
+
acp.ensureBroadcaster(id);
|
|
178
|
+
return yield* acp.connect(id, session.cwd, session.agent_type);
|
|
179
|
+
}));
|
|
180
|
+
return matchRouteExit(exit, c);
|
|
181
|
+
});
|
|
182
|
+
// DELETE /sessions/:id/connect — disconnect agent
|
|
183
|
+
app.delete("/:id/connect", async (c) => {
|
|
184
|
+
const id = c.req.param("id");
|
|
185
|
+
await AppRuntime.runPromise(Effect.flatMap(AcpClient, (acp) => acp.disconnect(id)));
|
|
186
|
+
return c.body(null, 204);
|
|
187
|
+
});
|
|
188
|
+
export const sessionsRoutes = app;
|
|
189
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agentpane",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Local server for AgentPane — web interface for AI coding agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"agentpane": "bin/agentpane.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin",
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"dev": "tsx watch src/index.ts",
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"typecheck": "tsc --noEmit",
|
|
17
|
+
"prepublishOnly": "tsc"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"acp",
|
|
21
|
+
"agent",
|
|
22
|
+
"claude",
|
|
23
|
+
"coding-agent",
|
|
24
|
+
"agentpane"
|
|
25
|
+
],
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "https://github.com/bgub/agentpane",
|
|
29
|
+
"directory": "apps/server"
|
|
30
|
+
},
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@agentclientprotocol/sdk": "^0.14.1",
|
|
34
|
+
"@effect/sql": "^0.49.0",
|
|
35
|
+
"@effect/sql-sqlite-node": "^0.50.0",
|
|
36
|
+
"@hono/node-server": "^1.14.1",
|
|
37
|
+
"@zed-industries/claude-code-acp": "^0.16.0",
|
|
38
|
+
"@zed-industries/codex-acp": "^0.9.2",
|
|
39
|
+
"better-sqlite3": "^12.6.2",
|
|
40
|
+
"effect": "^3.19.16",
|
|
41
|
+
"hono": "^4.7.5"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
45
|
+
"@types/node": "^20",
|
|
46
|
+
"tsx": "^4"
|
|
47
|
+
}
|
|
48
|
+
}
|