tono 0.2.1 → 0.3.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.
Files changed (60) hide show
  1. package/README.md +125 -20
  2. package/dist/cli/checks.js +504 -0
  3. package/dist/cli/checks.js.map +1 -0
  4. package/dist/cli/commands/config.js +20 -3
  5. package/dist/cli/commands/config.js.map +1 -1
  6. package/dist/cli/commands/configure.js +1 -1
  7. package/dist/cli/commands/configure.js.map +1 -1
  8. package/dist/cli/commands/doctor.js +22 -0
  9. package/dist/cli/commands/doctor.js.map +1 -0
  10. package/dist/cli/commands/gateway.js +39 -14
  11. package/dist/cli/commands/gateway.js.map +1 -1
  12. package/dist/cli/commands/init.js +22 -3
  13. package/dist/cli/commands/init.js.map +1 -1
  14. package/dist/cli/commands/start.js +69 -19
  15. package/dist/cli/commands/start.js.map +1 -1
  16. package/dist/cli/commands/worker.js +500 -0
  17. package/dist/cli/commands/worker.js.map +1 -0
  18. package/dist/cli/index.js +28 -9
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/cli/launchd.js +5 -5
  21. package/dist/cli/launchd.js.map +1 -1
  22. package/dist/server/app.js +130 -35
  23. package/dist/server/app.js.map +1 -1
  24. package/dist/server/config/load.js +19 -1
  25. package/dist/server/config/load.js.map +1 -1
  26. package/dist/server/config/schema.json +19 -0
  27. package/dist/server/db/client.js +73 -2
  28. package/dist/server/db/client.js.map +1 -1
  29. package/dist/server/db/queries.js +126 -3
  30. package/dist/server/db/queries.js.map +1 -1
  31. package/dist/server/db/schema.sql +36 -21
  32. package/dist/server/events.js.map +1 -1
  33. package/dist/server/server.js +28 -11
  34. package/dist/server/server.js.map +1 -1
  35. package/dist/server/worker/agent.js +441 -0
  36. package/dist/server/worker/agent.js.map +1 -0
  37. package/dist/server/worker/pty-bridge.js +27 -0
  38. package/dist/server/worker/pty-bridge.js.map +1 -0
  39. package/dist/server/workers/github-poller.js +26 -8
  40. package/dist/server/workers/github-poller.js.map +1 -1
  41. package/dist/server/workers/reaper.js +44 -0
  42. package/dist/server/workers/reaper.js.map +1 -0
  43. package/dist/server/workers/registry.js +174 -0
  44. package/dist/server/workers/registry.js.map +1 -0
  45. package/dist/server/workers/scheduler.js +79 -130
  46. package/dist/server/workers/scheduler.js.map +1 -1
  47. package/dist/server/ws/pty.js +71 -54
  48. package/dist/server/ws/pty.js.map +1 -1
  49. package/dist/server/ws/workers.js +241 -0
  50. package/dist/server/ws/workers.js.map +1 -0
  51. package/dist/shared/types.js +4 -1
  52. package/dist/shared/types.js.map +1 -1
  53. package/dist/shared/worker-protocol.js +28 -0
  54. package/dist/shared/worker-protocol.js.map +1 -0
  55. package/dist/web/assets/index-BsiC8WMV.js +129 -0
  56. package/dist/web/assets/index-CjzMqxyT.css +1 -0
  57. package/dist/web/index.html +2 -2
  58. package/package.json +18 -26
  59. package/dist/web/assets/index-5VFn-lxF.js +0 -129
  60. package/dist/web/assets/index-CZHd5NaX.css +0 -1
@@ -7,7 +7,6 @@ import { VERSION } from "../shared/version.js";
7
7
  import { removeReviewWorktree, removeWorktree } from "./git/worktrees.js";
8
8
  import { ConfigError, configPath } from "./config/load.js";
9
9
  import * as gh from "./github/gh.js";
10
- import { tonoHome } from "./config/load.js";
11
10
  const HERE = dirname(fileURLToPath(import.meta.url));
12
11
  // Built layout: dist/server/app.js → dist/web/index.html
13
12
  const WEB_DIST = resolve(HERE, "..", "web");
@@ -20,12 +19,15 @@ export function buildApp(deps) {
20
19
  name,
21
20
  a ? { implement: a.concurrency.implement, review: a.concurrency.review } : null,
22
21
  ]));
22
+ const allWorkers = deps.q.listWorkers();
23
+ const connected = deps.registry.list().length;
23
24
  return c.json({
24
25
  ok: true,
25
26
  version: VERSION,
26
27
  agents: totals,
27
28
  reposWatched: cfg.repos.length,
28
29
  poller: deps.poller.health(),
30
+ workers: { connected, total: allWorkers.length },
29
31
  });
30
32
  });
31
33
  app.get("/api/config", (c) => {
@@ -130,36 +132,121 @@ export function buildApp(deps) {
130
132
  return c.json({ task: { ...task, canResume: !!task.agentSessionId } });
131
133
  });
132
134
  app.get("/api/sessions", (c) => {
133
- return c.json({
134
- sessions: deps.pty.list().map((s) => s.meta()),
135
+ // All live sessions (shells + agent tasks) are tracked in the registry
136
+ // now. The scrollback ring + worker affinity live there.
137
+ const out = deps.registry.listSessions().map(({ sessionId, state }) => {
138
+ const conn = deps.registry.get(state.workerId);
139
+ return {
140
+ id: sessionId,
141
+ taskId: state.taskId,
142
+ kind: state.kind,
143
+ label: state.cwd ?? null,
144
+ pid: null,
145
+ startedAt: conn?.connectedAt ?? new Date().toISOString(),
146
+ endedAt: null,
147
+ exitCode: null,
148
+ status: "running",
149
+ workerId: state.workerId,
150
+ hostname: conn?.hostname ?? null,
151
+ };
135
152
  });
153
+ return c.json({ sessions: out });
136
154
  });
137
155
  app.get("/api/sessions/:id", (c) => {
138
156
  const id = c.req.param("id");
139
- const s = deps.pty.get(id);
140
- if (!s)
157
+ const state = deps.registry.getSession(id);
158
+ if (state) {
159
+ const conn = deps.registry.get(state.workerId);
160
+ return c.json({
161
+ session: {
162
+ id,
163
+ taskId: state.taskId,
164
+ kind: state.kind,
165
+ label: state.cwd ?? null,
166
+ workerId: state.workerId,
167
+ hostname: conn?.hostname ?? null,
168
+ startedAt: conn?.connectedAt ?? null,
169
+ endedAt: null,
170
+ disconnectedAt: null,
171
+ exitCode: null,
172
+ status: "running",
173
+ },
174
+ });
175
+ }
176
+ const row = deps.q.getSession(id);
177
+ if (!row)
141
178
  return c.json({ error: "not found" }, 404);
142
- return c.json({ session: s.meta() });
179
+ return c.json({
180
+ session: {
181
+ id: row.id,
182
+ taskId: row.taskId,
183
+ kind: "agent",
184
+ label: null,
185
+ pid: row.pid,
186
+ workerId: row.workerId,
187
+ startedAt: row.startedAt,
188
+ endedAt: row.endedAt,
189
+ disconnectedAt: row.disconnectedAt,
190
+ exitCode: null,
191
+ status: row.endedAt ? "exited" : "running",
192
+ },
193
+ });
143
194
  });
144
195
  app.get("/api/sessions/:id/scrollback", (c) => {
145
- const s = deps.pty.get(c.req.param("id"));
146
- if (!s)
196
+ const id = c.req.param("id");
197
+ const buf = deps.registry.scrollbackFor(id);
198
+ if (buf.length === 0 && !deps.q.getSession(id) && !deps.registry.getSession(id)) {
147
199
  return c.json({ error: "not found" }, 404);
148
- const buf = s.scrollback();
200
+ }
149
201
  return new Response(buf, {
150
202
  status: 200,
151
203
  headers: { "content-type": "application/octet-stream" },
152
204
  });
153
205
  });
154
206
  app.delete("/api/sessions/:id", (c) => {
155
- const s = deps.pty.get(c.req.param("id"));
156
- if (!s)
207
+ const id = c.req.param("id");
208
+ const state = deps.registry.getSession(id);
209
+ if (state) {
210
+ const ok = deps.registry.sendControl(state.workerId, { type: "session.kill", sessionId: id });
211
+ if (!ok)
212
+ return c.json({ error: "owning worker is offline" }, 503);
213
+ return c.json({ ok: true });
214
+ }
215
+ const row = deps.q.getSession(id);
216
+ if (!row)
157
217
  return c.json({ error: "not found" }, 404);
158
- s.kill("SIGTERM");
218
+ if (row.workerId) {
219
+ const ok = deps.registry.sendControl(row.workerId, { type: "session.kill", sessionId: id });
220
+ if (!ok)
221
+ return c.json({ error: "owning worker is offline" }, 503);
222
+ }
159
223
  return c.json({ ok: true });
160
224
  });
161
- // Free-form shell, not tied to any task. Lives only in memory; if the gateway
162
- // restarts the shell dies (acceptable it's not orchestrating an agent).
225
+ app.get("/api/workers", (c) => {
226
+ const live = new Set(deps.registry.list().map((w) => w.workerId));
227
+ const all = deps.q.listWorkers().map((w) => {
228
+ const conn = deps.registry.get(w.id);
229
+ return {
230
+ id: w.id,
231
+ hostname: w.hostname,
232
+ os: w.os,
233
+ arch: w.arch,
234
+ capabilities: w.capabilities,
235
+ firstSeenAt: w.firstSeenAt,
236
+ lastSeenAt: w.lastSeenAt,
237
+ connected: live.has(w.id),
238
+ capacity: conn?.capacity ?? null,
239
+ runningSessions: conn ? [...conn.runningSessions.values()] : [],
240
+ tonoVersion: conn?.tonoVersion ?? null,
241
+ };
242
+ });
243
+ return c.json({ workers: all });
244
+ });
245
+ // Free-form shell on a worker. Picks the worker by id (preferring the
246
+ // embedded local one when no id is given) and sends a shell.spawn over the
247
+ // worker WS. The PTY data flows back through the same registry path that
248
+ // agent task PTYs use, so the browser opens the same /api/sessions/{id}/pty
249
+ // endpoint to attach.
163
250
  app.post("/api/sessions/shell", async (c) => {
164
251
  let body = {};
165
252
  try {
@@ -168,31 +255,39 @@ export function buildApp(deps) {
168
255
  catch {
169
256
  // Empty body is fine.
170
257
  }
171
- // Default to the workspaces root so a free terminal lands next to the
172
- // worktrees you'd actually want to inspect.
173
- const defaultCwd = cfgRef().workspaces.root;
174
- const cwd = body.cwd && body.cwd.trim() ? body.cwd : defaultCwd;
175
- if (!existsSync(cwd)) {
176
- return c.json({ error: `cwd does not exist: ${cwd}` }, 400);
258
+ const workers = deps.registry.list();
259
+ if (workers.length === 0) {
260
+ return c.json({ error: "no workers connected; can't open a shell. Wait for the embedded local worker to register or start a remote one." }, 503);
177
261
  }
178
- const shell = process.env.SHELL ?? (process.platform === "darwin" ? "/bin/zsh" : "/bin/bash");
262
+ const target = body.workerId
263
+ ? workers.find((w) => w.workerId === body.workerId)
264
+ : workers.find((w) => w.hostname === "(local)") ?? workers[0];
265
+ if (!target) {
266
+ return c.json({ error: `worker ${body.workerId} is not connected` }, 404);
267
+ }
268
+ // cwd is optional and is interpreted on the WORKER's filesystem. The
269
+ // gateway can't validate it. If unset, the worker defaults to its
270
+ // workspaces root so the terminal lands next to its worktrees.
179
271
  const sessionId = randomUUID();
180
- const logFile = join(tonoHome(), "logs", `shell-${sessionId.slice(0, 8)}.log`);
181
- const session = deps.pty.spawn({
272
+ const cwd = body.cwd && body.cwd.trim() ? body.cwd : undefined;
273
+ const ok = deps.registry.sendControl(target.workerId, {
274
+ type: "shell.spawn",
182
275
  sessionId,
183
- taskId: null,
184
- kind: "shell",
185
- label: cwd,
186
- spec: {
187
- command: shell,
188
- args: ["-l"],
189
- cwd,
190
- env: process.env,
191
- resumed: false,
192
- },
193
- logFile,
276
+ cwd,
277
+ });
278
+ if (!ok) {
279
+ return c.json({ error: `worker ${target.workerId} is no longer reachable` }, 503);
280
+ }
281
+ // Pre-allocate the registry session so frames arriving before shell.started
282
+ // (or before the browser attaches) aren't dropped. shell.started will fix
283
+ // up the cwd field.
284
+ deps.registry.ensureSession(sessionId, target.workerId, null, { kind: "shell", cwd });
285
+ return c.json({
286
+ sessionId,
287
+ workerId: target.workerId,
288
+ hostname: target.hostname,
289
+ cwd: cwd ?? null,
194
290
  });
195
- return c.json({ sessionId, pid: session.pid, cwd });
196
291
  });
197
292
  app.post("/api/tasks/:id/cleanup", async (c) => {
198
293
  const id = Number(c.req.param("id"));
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
@@ -58,8 +58,26 @@ export function resolveRepoAgents(cfg, repoAgents) {
58
58
  return declared;
59
59
  return repoAgents.filter((a) => declared.includes(a));
60
60
  }
61
+ /**
62
+ * Resolve a repo's default agent (the one that handles bare `tono` labels).
63
+ * 1. If `repo.defaultAgent` is set and is enrolled on this repo → use it.
64
+ * 2. Else if exactly one agent is enrolled → use that.
65
+ * 3. Else → null (bare-label triggers are skipped on this repo).
66
+ */
67
+ export function resolveDefaultAgent(cfg, repo) {
68
+ const enrolled = resolveRepoAgents(cfg, repo.agents);
69
+ if (repo.defaultAgent && enrolled.includes(repo.defaultAgent))
70
+ return repo.defaultAgent;
71
+ if (enrolled.length === 1)
72
+ return enrolled[0];
73
+ return null;
74
+ }
61
75
  export function resolveRepo(cfg, repo) {
62
- return { ...repo, effectiveAgents: resolveRepoAgents(cfg, repo.agents) };
76
+ return {
77
+ ...repo,
78
+ effectiveAgents: resolveRepoAgents(cfg, repo.agents),
79
+ effectiveDefaultAgent: resolveDefaultAgent(cfg, repo),
80
+ };
63
81
  }
64
82
  export function resolveConfig(cfg) {
65
83
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/server/config/load.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/server/config/load.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,20 @@
7
7
  "required": ["server", "github", "workspaces", "repos", "agents"],
8
8
  "properties": {
9
9
  "$schema": { "type": "string" },
10
+ "workers": {
11
+ "type": "object",
12
+ "additionalProperties": false,
13
+ "properties": {
14
+ "graceMs": {
15
+ "type": "integer",
16
+ "minimum": 0,
17
+ "maximum": 600000,
18
+ "default": 60000,
19
+ "description": "How long (ms) a task stays in 'running' after its owning worker disconnects, before being marked failed. Set to 0 to fail immediately."
20
+ }
21
+ },
22
+ "description": "Optional. Distributed-worker tunables. Has no effect on single-machine setups."
23
+ },
10
24
  "server": {
11
25
  "type": "object",
12
26
  "additionalProperties": false,
@@ -85,6 +99,11 @@
85
99
  "items": { "type": "string", "enum": ["claude-code", "opencode", "codex"] },
86
100
  "uniqueItems": true,
87
101
  "description": "Which agents are enabled on this repo. If omitted, all agents present in the top-level `agents` map are enabled. Each enabled agent watches its convention labels: `tono-<short>` for implement, `tono-<short>-review` for review."
102
+ },
103
+ "defaultAgent": {
104
+ "type": "string",
105
+ "enum": ["claude-code", "opencode", "codex"],
106
+ "description": "The agent that handles the bare `tono` (implement) and `tono-review` labels on this repo. Defaults to the single enrolled agent if unset; ignored if not in `agents`."
88
107
  }
89
108
  }
90
109
  }
@@ -1,17 +1,39 @@
1
1
  import Database from "better-sqlite3";
2
- import { readFileSync } from "node:fs";
2
+ import { copyFileSync, existsSync, readFileSync } from "node:fs";
3
3
  import { dirname, join } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { mkdirSync } from "node:fs";
6
6
  import { tonoHome } from "../config/load.js";
7
7
  const HERE = dirname(fileURLToPath(import.meta.url));
8
8
  const SCHEMA_FILE = join(HERE, "schema.sql");
9
- const CURRENT_VERSION = 4;
9
+ const CURRENT_VERSION = 5;
10
10
  export function dbPath() {
11
11
  return join(tonoHome(), "tono.db");
12
12
  }
13
13
  export function openDb(path = dbPath()) {
14
14
  mkdirSync(dirname(path), { recursive: true });
15
+ // Pre-migration safety: if a tono.db exists from an older version, snapshot
16
+ // it before we run any version-stepped migration. The backup is named after
17
+ // the *source* version so a botched 0.4 → 0.5 migration on `tono.db` leaves
18
+ // `tono.db.bak.v4` untouched. Best-effort — failures here don't block boot.
19
+ if (existsSync(path)) {
20
+ try {
21
+ const probe = new Database(path, { readonly: true });
22
+ const row = probe.prepare("SELECT version FROM schema_version LIMIT 1").get();
23
+ probe.close();
24
+ if (row && row.version < CURRENT_VERSION) {
25
+ const backup = `${path}.bak.v${row.version}`;
26
+ if (!existsSync(backup)) {
27
+ copyFileSync(path, backup);
28
+ process.stderr.write(`tono: backed up pre-migration db to ${backup}\n`);
29
+ }
30
+ }
31
+ }
32
+ catch {
33
+ // Pre-1.0 dbs without schema_version, or any other read error — ignore.
34
+ // Migration code below tolerates both shapes.
35
+ }
36
+ }
15
37
  const db = new Database(path);
16
38
  db.pragma("journal_mode = WAL");
17
39
  db.pragma("foreign_keys = ON");
@@ -132,5 +154,54 @@ function migrate(db) {
132
154
  db.prepare("UPDATE schema_version SET version = ?").run(4);
133
155
  row = { version: 4 };
134
156
  }
157
+ if (row.version < 5) {
158
+ // v5: distributed workers. Adds the `workers` table (created idempotently
159
+ // by schema.sql above) and widens tasks/sessions with worker-affinity and
160
+ // disconnect tracking columns. Also widens the tasks.status CHECK to allow
161
+ // the new `assigning` state.
162
+ if (!columnExists(db, "tasks", "assigned_worker_id")) {
163
+ db.exec(`
164
+ PRAGMA foreign_keys=OFF;
165
+ BEGIN TRANSACTION;
166
+ CREATE TABLE tasks_v5 (
167
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
168
+ kind TEXT NOT NULL DEFAULT 'implement' CHECK (kind IN ('implement','review')),
169
+ repo_slug TEXT NOT NULL,
170
+ issue_number INTEGER NOT NULL,
171
+ issue_title TEXT NOT NULL,
172
+ issue_body TEXT NOT NULL DEFAULT '',
173
+ branch TEXT NOT NULL,
174
+ agent TEXT NOT NULL,
175
+ agent_session_id TEXT,
176
+ status TEXT NOT NULL CHECK (status IN ('queued','assigning','running','completed','pr_open','pr_closed','merged','cleaned','failed')),
177
+ pr_url TEXT,
178
+ exit_code INTEGER,
179
+ assigned_worker_id TEXT,
180
+ created_at TEXT NOT NULL,
181
+ started_at TEXT,
182
+ completed_at TEXT,
183
+ UNIQUE (repo_slug, issue_number, branch, kind)
184
+ );
185
+ INSERT INTO tasks_v5 (id, kind, repo_slug, issue_number, issue_title, issue_body, branch, agent, agent_session_id, status, pr_url, exit_code, created_at, started_at, completed_at)
186
+ SELECT id, kind, repo_slug, issue_number, issue_title, issue_body, branch, agent, agent_session_id, status, pr_url, exit_code, created_at, started_at, completed_at FROM tasks;
187
+ DROP TABLE tasks;
188
+ ALTER TABLE tasks_v5 RENAME TO tasks;
189
+ CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks (status);
190
+ CREATE INDEX IF NOT EXISTS idx_tasks_created_at ON tasks (created_at);
191
+ CREATE INDEX IF NOT EXISTS idx_tasks_agent_kind ON tasks (agent, kind, status);
192
+ COMMIT;
193
+ PRAGMA foreign_keys=ON;
194
+ `);
195
+ }
196
+ if (!columnExists(db, "sessions", "worker_id")) {
197
+ db.exec(`ALTER TABLE sessions ADD COLUMN worker_id TEXT;`);
198
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_sessions_worker_id ON sessions (worker_id);`);
199
+ }
200
+ if (!columnExists(db, "sessions", "disconnected_at")) {
201
+ db.exec(`ALTER TABLE sessions ADD COLUMN disconnected_at TEXT;`);
202
+ }
203
+ db.prepare("UPDATE schema_version SET version = ?").run(5);
204
+ row = { version: 5 };
205
+ }
135
206
  }
136
207
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/server/db/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/server/db/client.ts"],"names":[],"mappings":"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"}
@@ -13,11 +13,44 @@ function rowToTask(row) {
13
13
  status: row.status,
14
14
  prUrl: row.pr_url,
15
15
  exitCode: row.exit_code,
16
+ assignedWorkerId: row.assigned_worker_id ?? null,
16
17
  createdAt: row.created_at,
17
18
  startedAt: row.started_at,
18
19
  completedAt: row.completed_at,
19
20
  };
20
21
  }
22
+ function rowToSession(row) {
23
+ return {
24
+ id: row.id,
25
+ taskId: row.task_id,
26
+ workerId: row.worker_id ?? null,
27
+ pid: row.pid ?? null,
28
+ worktreePath: row.worktree_path,
29
+ startedAt: row.started_at,
30
+ endedAt: row.ended_at ?? null,
31
+ disconnectedAt: row.disconnected_at ?? null,
32
+ };
33
+ }
34
+ function rowToWorker(row) {
35
+ let capabilities = null;
36
+ if (row.capabilities) {
37
+ try {
38
+ capabilities = JSON.parse(row.capabilities);
39
+ }
40
+ catch {
41
+ capabilities = null;
42
+ }
43
+ }
44
+ return {
45
+ id: row.id,
46
+ hostname: row.hostname,
47
+ os: row.os ?? null,
48
+ arch: row.arch ?? null,
49
+ capabilities,
50
+ firstSeenAt: row.first_seen_at,
51
+ lastSeenAt: row.last_seen_at,
52
+ };
53
+ }
21
54
  export class Queries {
22
55
  db;
23
56
  constructor(db) {
@@ -146,13 +179,103 @@ export class Queries {
146
179
  insertSession(input) {
147
180
  const now = ISO();
148
181
  this.db
149
- .prepare(`INSERT INTO sessions (id, task_id, pid, worktree_path, started_at) VALUES (?, ?, ?, ?, ?)`)
150
- .run(input.id, input.taskId, input.pid, input.worktreePath, now);
182
+ .prepare(`INSERT INTO sessions (id, task_id, worker_id, pid, worktree_path, started_at) VALUES (?, ?, ?, ?, ?, ?)`)
183
+ .run(input.id, input.taskId, input.workerId ?? null, input.pid, input.worktreePath, now);
184
+ }
185
+ getSession(id) {
186
+ const row = this.db.prepare("SELECT * FROM sessions WHERE id = ?").get(id);
187
+ return row ? rowToSession(row) : null;
151
188
  }
152
189
  endSession(id) {
153
190
  this.db
154
- .prepare(`UPDATE sessions SET ended_at = ? WHERE id = ? AND ended_at IS NULL`)
191
+ .prepare(`UPDATE sessions SET ended_at = ?, disconnected_at = NULL WHERE id = ? AND ended_at IS NULL`)
155
192
  .run(ISO(), id);
156
193
  }
194
+ // ---- worker assignment ----
195
+ setTaskAssigned(id, workerId) {
196
+ this.db
197
+ .prepare(`UPDATE tasks SET status = 'assigning', assigned_worker_id = ? WHERE id = ?`)
198
+ .run(workerId, id);
199
+ }
200
+ clearTaskAssignment(id) {
201
+ this.db
202
+ .prepare(`UPDATE tasks SET assigned_worker_id = NULL WHERE id = ?`)
203
+ .run(id);
204
+ }
205
+ /** Number of tasks currently held by a worker for a given (agent, kind). */
206
+ countAssignedToWorker(workerId, agent, kind) {
207
+ const row = this.db
208
+ .prepare(`SELECT COUNT(*) AS n FROM tasks
209
+ WHERE assigned_worker_id = ?
210
+ AND agent = ?
211
+ AND kind = ?
212
+ AND status IN ('assigning','running')`)
213
+ .get(workerId, agent, kind);
214
+ return row.n;
215
+ }
216
+ /** Sessions whose owning worker has dropped — newest first. */
217
+ listDisconnectedSessions() {
218
+ const rows = this.db
219
+ .prepare(`SELECT * FROM sessions
220
+ WHERE disconnected_at IS NOT NULL
221
+ AND ended_at IS NULL
222
+ ORDER BY disconnected_at DESC`)
223
+ .all();
224
+ return rows.map(rowToSession);
225
+ }
226
+ /** Sessions a worker thinks it owns — used when a worker reconnects. */
227
+ listSessionsForWorker(workerId) {
228
+ const rows = this.db
229
+ .prepare(`SELECT * FROM sessions
230
+ WHERE worker_id = ?
231
+ AND ended_at IS NULL
232
+ ORDER BY started_at ASC`)
233
+ .all(workerId);
234
+ return rows.map(rowToSession);
235
+ }
236
+ markSessionDisconnected(id) {
237
+ this.db
238
+ .prepare(`UPDATE sessions SET disconnected_at = ? WHERE id = ? AND ended_at IS NULL AND disconnected_at IS NULL`)
239
+ .run(ISO(), id);
240
+ }
241
+ clearSessionDisconnected(id) {
242
+ this.db
243
+ .prepare(`UPDATE sessions SET disconnected_at = NULL WHERE id = ?`)
244
+ .run(id);
245
+ }
246
+ setSessionPid(id, pid) {
247
+ this.db.prepare(`UPDATE sessions SET pid = ? WHERE id = ?`).run(pid, id);
248
+ }
249
+ // ---- workers ----
250
+ upsertWorker(input) {
251
+ const now = ISO();
252
+ const caps = input.capabilities ? JSON.stringify(input.capabilities) : null;
253
+ this.db
254
+ .prepare(`INSERT INTO workers (id, hostname, os, arch, capabilities, first_seen_at, last_seen_at)
255
+ VALUES (?, ?, ?, ?, ?, ?, ?)
256
+ ON CONFLICT(id) DO UPDATE SET
257
+ hostname = excluded.hostname,
258
+ os = excluded.os,
259
+ arch = excluded.arch,
260
+ capabilities = excluded.capabilities,
261
+ last_seen_at = excluded.last_seen_at`)
262
+ .run(input.id, input.hostname, input.os, input.arch, caps, now, now);
263
+ return this.getWorker(input.id);
264
+ }
265
+ touchWorker(id) {
266
+ this.db
267
+ .prepare(`UPDATE workers SET last_seen_at = ? WHERE id = ?`)
268
+ .run(ISO(), id);
269
+ }
270
+ getWorker(id) {
271
+ const row = this.db.prepare(`SELECT * FROM workers WHERE id = ?`).get(id);
272
+ return row ? rowToWorker(row) : null;
273
+ }
274
+ listWorkers() {
275
+ const rows = this.db
276
+ .prepare(`SELECT * FROM workers ORDER BY last_seen_at DESC`)
277
+ .all();
278
+ return rows.map(rowToWorker);
279
+ }
157
280
  }
158
281
  //# sourceMappingURL=queries.js.map