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.
@@ -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
+ }