@cluesmith/codev 3.1.1 → 3.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.
Files changed (73) hide show
  1. package/bin/afx.js +8 -4
  2. package/dashboard-dist/assets/{index-CM6A5r59.js → index-BVEyQfhg.js} +2 -2
  3. package/dashboard-dist/assets/{index-CM6A5r59.js.map → index-BVEyQfhg.js.map} +1 -1
  4. package/dashboard-dist/index.html +1 -1
  5. package/dist/agent-farm/cli.d.ts.map +1 -1
  6. package/dist/agent-farm/cli.js +28 -0
  7. package/dist/agent-farm/cli.js.map +1 -1
  8. package/dist/agent-farm/commands/attach.d.ts.map +1 -1
  9. package/dist/agent-farm/commands/attach.js +4 -1
  10. package/dist/agent-farm/commands/attach.js.map +1 -1
  11. package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
  12. package/dist/agent-farm/commands/cleanup.js +4 -2
  13. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  14. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  15. package/dist/agent-farm/commands/send.js +5 -1
  16. package/dist/agent-farm/commands/send.js.map +1 -1
  17. package/dist/agent-farm/commands/spawn-worktree.d.ts +8 -2
  18. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  19. package/dist/agent-farm/commands/spawn-worktree.js +30 -7
  20. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  21. package/dist/agent-farm/commands/spawn.d.ts +8 -0
  22. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  23. package/dist/agent-farm/commands/spawn.js +21 -3
  24. package/dist/agent-farm/commands/spawn.js.map +1 -1
  25. package/dist/agent-farm/commands/status.d.ts.map +1 -1
  26. package/dist/agent-farm/commands/status.js +2 -1
  27. package/dist/agent-farm/commands/status.js.map +1 -1
  28. package/dist/agent-farm/commands/stop.d.ts.map +1 -1
  29. package/dist/agent-farm/commands/stop.js +5 -3
  30. package/dist/agent-farm/commands/stop.js.map +1 -1
  31. package/dist/agent-farm/commands/workspace-recover.d.ts +74 -0
  32. package/dist/agent-farm/commands/workspace-recover.d.ts.map +1 -0
  33. package/dist/agent-farm/commands/workspace-recover.js +307 -0
  34. package/dist/agent-farm/commands/workspace-recover.js.map +1 -0
  35. package/dist/agent-farm/db/index.d.ts.map +1 -1
  36. package/dist/agent-farm/db/index.js +125 -2
  37. package/dist/agent-farm/db/index.js.map +1 -1
  38. package/dist/agent-farm/db/migrate.d.ts +11 -2
  39. package/dist/agent-farm/db/migrate.d.ts.map +1 -1
  40. package/dist/agent-farm/db/migrate.js +24 -5
  41. package/dist/agent-farm/db/migrate.js.map +1 -1
  42. package/dist/agent-farm/db/schema.d.ts +1 -1
  43. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  44. package/dist/agent-farm/db/schema.js +15 -2
  45. package/dist/agent-farm/db/schema.js.map +1 -1
  46. package/dist/agent-farm/db/types.d.ts +1 -0
  47. package/dist/agent-farm/db/types.d.ts.map +1 -1
  48. package/dist/agent-farm/db/types.js.map +1 -1
  49. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  50. package/dist/agent-farm/servers/tower-instances.js +83 -15
  51. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  52. package/dist/agent-farm/servers/tower-routes.js +2 -1
  53. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  54. package/dist/agent-farm/servers/tower-terminals.js +2 -2
  55. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  56. package/dist/agent-farm/state.d.ts +34 -15
  57. package/dist/agent-farm/state.d.ts.map +1 -1
  58. package/dist/agent-farm/state.js +92 -31
  59. package/dist/agent-farm/state.js.map +1 -1
  60. package/dist/agent-farm/utils/claude-session-discovery.d.ts +19 -0
  61. package/dist/agent-farm/utils/claude-session-discovery.d.ts.map +1 -0
  62. package/dist/agent-farm/utils/claude-session-discovery.js +64 -0
  63. package/dist/agent-farm/utils/claude-session-discovery.js.map +1 -0
  64. package/dist/cli.d.ts +2 -1
  65. package/dist/cli.d.ts.map +1 -1
  66. package/dist/cli.js +22 -32
  67. package/dist/cli.js.map +1 -1
  68. package/dist/commands/porch/state.d.ts +17 -0
  69. package/dist/commands/porch/state.d.ts.map +1 -1
  70. package/dist/commands/porch/state.js +47 -0
  71. package/dist/commands/porch/state.js.map +1 -1
  72. package/package.json +3 -4
  73. package/bin/af.js +0 -8
@@ -0,0 +1,307 @@
1
+ // workspace recover — revive builders whose shellper died (e.g. machine reboot).
2
+ // Issue #829. Dry-run by default; --apply actually respawns.
3
+ import { spawn } from 'node:child_process';
4
+ import { existsSync, readdirSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import chalk from 'chalk';
7
+ import { getConfig } from '../utils/index.js';
8
+ import { logger } from '../utils/logger.js';
9
+ import { buildAgentName, stripLeadingZeros } from '../utils/agent-names.js';
10
+ import { processExists, getTerminalSessionsForWorkspace } from '../servers/tower-terminals.js';
11
+ import { closeGlobalDb } from '../db/index.js';
12
+ import { listAllProjects } from '../../commands/porch/state.js';
13
+ import { confirm } from '../../lib/cli-prompts.js';
14
+ const TERMINAL_PHASES = new Set(['verified', 'complete']);
15
+ const DEFAULT_MAX_AGE_DAYS = 7;
16
+ // Protocols that `afx spawn <id> --resume --protocol <name>` can revive cleanly:
17
+ // issue-driven families with a positional issue arg and a stable worktree layout.
18
+ // `experiment` / `maintain` / `task` / bare protocol-mode builders can't be
19
+ // resumed by ID through spawn.ts and are skipped with `unsupported_protocol`.
20
+ // (Legacy `spider` is also excluded — it was retired long ago, and any stray
21
+ // project still carrying that protocol value should be treated as unsupported.)
22
+ const REVIVABLE_PROTOCOLS = new Set(['spir', 'aspir', 'air', 'pir', 'bugfix']);
23
+ /**
24
+ * Liveness rule per row (Gemini cmap finding):
25
+ * - shellper_pid known + alive → ALIVE
26
+ * - shellper_pid known + dead → DEAD (socket is ignored; the OS doesn't clean
27
+ * ~/.codev/run/ on reboot, so a stale socket
28
+ * would otherwise falsely mark the row alive
29
+ * and defeat the primary recovery use case)
30
+ * - shellper_pid null + socket file exists → ALIVE (legacy / pre-PID rows)
31
+ * - shellper_pid null + no socket → DEAD
32
+ */
33
+ function isSessionAlive(session, isProcessAlive, socketExists) {
34
+ if (session.shellper_pid !== null) {
35
+ return isProcessAlive(session.shellper_pid);
36
+ }
37
+ return session.shellper_socket !== null && socketExists(session.shellper_socket);
38
+ }
39
+ /**
40
+ * Pure predicate — no I/O. All filesystem and process probes happen in the
41
+ * caller and are passed in via `isProcessAlive` and `socketExists`. This keeps
42
+ * the predicate trivially unit-testable.
43
+ *
44
+ * On terminal_sessions and the "no row" case:
45
+ * Tower's reconciliation deletes terminal_sessions rows whose shellper can't
46
+ * be reconnected (tower-terminals.ts:485-711). That runs on Tower startup,
47
+ * which is exactly what happens between a machine reboot and the user
48
+ * invoking `workspace recover`. By the time recovery runs, the rows for
49
+ * dead builders have already been pruned. So "no matching session row"
50
+ * is the COMMON case for any builder that needs revival — not a reason to
51
+ * skip. The row is only useful here as a positive "still alive" signal.
52
+ *
53
+ * Predicate order (cheap structural checks first):
54
+ * 1. terminal phase
55
+ * 2. unsupported protocol family
56
+ * 3. worktree missing on disk
57
+ * 4. any matching session row is alive → known still running, leave alone
58
+ * 5. stale (older than maxAge, unless includeStale)
59
+ * 6. otherwise → revive
60
+ */
61
+ export function evaluateEligibility(inputs) {
62
+ const { state, builderInfo, sessions, worktreeExists, ageDays, maxAgeDays, includeStale, isProcessAlive, socketExists, } = inputs;
63
+ if (TERMINAL_PHASES.has(state.phase)) {
64
+ return { eligible: false, reason: 'terminal' };
65
+ }
66
+ if (builderInfo === null) {
67
+ return { eligible: false, reason: 'unsupported_protocol' };
68
+ }
69
+ if (!worktreeExists) {
70
+ return { eligible: false, reason: 'worktree_missing' };
71
+ }
72
+ // If ANY matching session looks alive, treat the builder as alive. Duplicates
73
+ // can occur when a prior recovery left a dead row behind (terminal_sessions
74
+ // has no UNIQUE constraint on role_id) — the cautious read is "alive."
75
+ if (sessions.some(s => isSessionAlive(s, isProcessAlive, socketExists))) {
76
+ return { eligible: false, reason: 'shellper_alive' };
77
+ }
78
+ if (!includeStale && ageDays > maxAgeDays) {
79
+ return { eligible: false, reason: 'stale' };
80
+ }
81
+ return { eligible: true };
82
+ }
83
+ /**
84
+ * Derive the inputs needed to invoke `afx spawn <issueArg> --resume --protocol <cliProtocol>`
85
+ * and the SQLite `role_id` to look up the builder's terminal session.
86
+ *
87
+ * Returns null for protocols that cannot be cleanly resumed via the spawn CLI
88
+ * (experiment/maintain/task/legacy spider/etc) — callers should skip those
89
+ * projects with an `unsupported_protocol` reason.
90
+ */
91
+ export function deriveBuilderInfo(state) {
92
+ if (!REVIVABLE_PROTOCOLS.has(state.protocol)) {
93
+ return null;
94
+ }
95
+ if (state.protocol === 'bugfix') {
96
+ const numericId = state.id.replace(/^bugfix-/, '');
97
+ return {
98
+ builderId: buildAgentName('bugfix', numericId),
99
+ issueArg: numericId,
100
+ cliProtocol: 'bugfix',
101
+ };
102
+ }
103
+ return {
104
+ builderId: buildAgentName('spec', state.id, state.protocol),
105
+ issueArg: stripLeadingZeros(state.id),
106
+ cliProtocol: state.protocol,
107
+ };
108
+ }
109
+ /**
110
+ * Resolve the builder's worktree path on disk, handling both the Spec-653
111
+ * ID-only layout and the legacy title-suffixed form.
112
+ *
113
+ * Returns null when the project's protocol isn't revivable (no defined worktree
114
+ * naming) or when no matching directory exists.
115
+ */
116
+ export function resolveWorktreePath(buildersDir, state) {
117
+ const info = deriveBuilderInfo(state);
118
+ if (info === null)
119
+ return null;
120
+ const idOnlyName = `${info.cliProtocol}-${info.issueArg}`;
121
+ const idOnlyPath = join(buildersDir, idOnlyName);
122
+ if (existsSync(idOnlyPath) && existsSync(join(idOnlyPath, '.git'))) {
123
+ return idOnlyPath;
124
+ }
125
+ if (!existsSync(buildersDir))
126
+ return null;
127
+ const prefix = `${info.cliProtocol}-${info.issueArg}-`;
128
+ for (const entry of readdirSync(buildersDir, { withFileTypes: true })) {
129
+ if (!entry.isDirectory() || !entry.name.startsWith(prefix))
130
+ continue;
131
+ const candidate = join(buildersDir, entry.name);
132
+ if (existsSync(join(candidate, '.git')))
133
+ return candidate;
134
+ }
135
+ return null;
136
+ }
137
+ export function formatRelativeAge(iso) {
138
+ const ms = Date.now() - Date.parse(iso);
139
+ if (Number.isNaN(ms) || ms < 0)
140
+ return '—';
141
+ const minutes = Math.floor(ms / 60_000);
142
+ if (minutes < 60)
143
+ return `${minutes}m ago`;
144
+ const hours = Math.floor(minutes / 60);
145
+ if (hours < 24)
146
+ return `${hours}h ago`;
147
+ // Round UP rather than down so the label aligns with --max-age semantics:
148
+ // anything strictly older than 24h prints as "2d ago" (not "1d ago"), so
149
+ // a row labelled "1d ago" is actually within --max-age 1 (≤ 24h exact).
150
+ // Use ms rather than the floored `hours` to preserve sub-hour precision —
151
+ // 24h + 1s must ceil to 2 days, not 1.
152
+ const days = Math.ceil(ms / 86_400_000);
153
+ return `${days}d ago`;
154
+ }
155
+ function reasonLabel(reason) {
156
+ switch (reason) {
157
+ case 'terminal': return 'terminal';
158
+ case 'unsupported_protocol': return 'unsupported protocol';
159
+ case 'worktree_missing': return 'worktree missing';
160
+ case 'shellper_alive': return 'shellper alive';
161
+ case 'stale': return 'stale';
162
+ }
163
+ }
164
+ function printPreview(rows) {
165
+ const widths = [6, 9, 12, 14, 10, 20];
166
+ logger.row(['ID', 'PROTOCOL', 'PHASE', 'UPDATED', 'STATUS', 'REASON'], widths);
167
+ logger.row(['─'.repeat(6), '─'.repeat(9), '─'.repeat(12), '─'.repeat(14), '─'.repeat(10), '─'.repeat(20)], widths);
168
+ for (const row of rows) {
169
+ const status = row.eligibility.eligible
170
+ ? chalk.green('revive')
171
+ : chalk.gray('skip');
172
+ const reason = row.eligibility.eligible ? '—' : reasonLabel(row.eligibility.reason);
173
+ logger.row([
174
+ row.state.id,
175
+ row.state.protocol,
176
+ row.state.phase,
177
+ formatRelativeAge(row.state.updated_at),
178
+ status,
179
+ reason,
180
+ ], widths);
181
+ }
182
+ }
183
+ async function respawnBuilder(info) {
184
+ // Use the current node binary and CLI entry point so the respawn invocation
185
+ // matches the install method this command was started under (npm global,
186
+ // npx, dev script, etc.) instead of relying on PATH lookup of 'afx'.
187
+ await new Promise((resolvePromise, rejectPromise) => {
188
+ const child = spawn(process.execPath, [process.argv[1], 'spawn', info.issueArg, '--resume', '--protocol', info.cliProtocol], { stdio: 'inherit' });
189
+ child.on('error', rejectPromise);
190
+ child.on('exit', (code) => {
191
+ if (code === 0)
192
+ resolvePromise();
193
+ else
194
+ rejectPromise(new Error(`afx spawn exited with code ${code}`));
195
+ });
196
+ });
197
+ }
198
+ export async function workspaceRecover(options = {}) {
199
+ const config = getConfig();
200
+ const maxAgeDays = options.maxAge ?? DEFAULT_MAX_AGE_DAYS;
201
+ const includeStale = options.includeStale ?? false;
202
+ const apply = options.apply ?? false;
203
+ logger.header(`Workspace Recover${apply ? '' : ' (dry-run)'}`);
204
+ logger.kv('Workspace', config.workspaceRoot);
205
+ if (!includeStale)
206
+ logger.kv('Max age', `${maxAgeDays} day(s)`);
207
+ logger.blank();
208
+ const projects = listAllProjects(config.workspaceRoot, {
209
+ onParseError: (statusPath, err) => {
210
+ logger.debug(`Skipped unparseable ${statusPath}: ${err instanceof Error ? err.message : String(err)}`);
211
+ },
212
+ });
213
+ if (projects.length === 0) {
214
+ logger.info('No porch projects found.');
215
+ return;
216
+ }
217
+ let sessions;
218
+ try {
219
+ sessions = getTerminalSessionsForWorkspace(config.workspaceRoot);
220
+ }
221
+ finally {
222
+ closeGlobalDb();
223
+ }
224
+ // role_id has no UNIQUE constraint in the schema, so collect every matching
225
+ // row per builder id rather than collapsing to last-write-wins.
226
+ const sessionsByRoleId = new Map();
227
+ for (const s of sessions) {
228
+ if (s.type !== 'builder' || !s.role_id)
229
+ continue;
230
+ const bucket = sessionsByRoleId.get(s.role_id);
231
+ if (bucket)
232
+ bucket.push(s);
233
+ else
234
+ sessionsByRoleId.set(s.role_id, [s]);
235
+ }
236
+ const allRows = projects.map(({ state }) => {
237
+ const builderInfo = deriveBuilderInfo(state);
238
+ const matchingSessions = builderInfo ? sessionsByRoleId.get(builderInfo.builderId) ?? [] : [];
239
+ const worktreePath = resolveWorktreePath(config.buildersDir, state);
240
+ const ageDays = (Date.now() - Date.parse(state.updated_at)) / 86_400_000;
241
+ const eligibility = evaluateEligibility({
242
+ state, builderInfo,
243
+ sessions: matchingSessions,
244
+ worktreeExists: worktreePath !== null,
245
+ ageDays, maxAgeDays, includeStale,
246
+ isProcessAlive: processExists,
247
+ socketExists: existsSync,
248
+ });
249
+ return { state, builderInfo, worktreePath, eligibility, ageDays };
250
+ });
251
+ // By default the preview hides projects beyond the recency window — for a
252
+ // large workspace the stale tail dominates the table and obscures the few
253
+ // rows the operator actually cares about. --include-stale shows everything.
254
+ const visibleRows = includeStale
255
+ ? allRows
256
+ : allRows.filter(r => r.ageDays <= maxAgeDays);
257
+ const hiddenStaleCount = allRows.length - visibleRows.length;
258
+ printPreview(visibleRows);
259
+ if (hiddenStaleCount > 0) {
260
+ logger.blank();
261
+ logger.info(`${hiddenStaleCount} project(s) older than ${maxAgeDays} day(s) hidden. Pass --include-stale to show them.`);
262
+ }
263
+ const eligible = allRows.filter((r) => r.eligibility.eligible && r.builderInfo !== null);
264
+ logger.blank();
265
+ if (hiddenStaleCount > 0) {
266
+ logger.kv('Eligible', `${eligible.length} / ${visibleRows.length} visible (${allRows.length} scanned)`);
267
+ }
268
+ else {
269
+ logger.kv('Eligible', `${eligible.length} / ${allRows.length}`);
270
+ }
271
+ if (eligible.length === 0) {
272
+ logger.info(apply ? 'Nothing to revive.' : 'Nothing would be revived.');
273
+ return;
274
+ }
275
+ if (!apply) {
276
+ logger.info(`Run with --apply to respawn ${eligible.length} builder(s).`);
277
+ return;
278
+ }
279
+ if (!options.yes) {
280
+ const proceed = await confirm(`Proceed to respawn ${eligible.length} builder(s)?`, false);
281
+ if (!proceed) {
282
+ logger.info('Aborted.');
283
+ return;
284
+ }
285
+ }
286
+ let succeeded = 0;
287
+ let failed = 0;
288
+ for (const row of eligible) {
289
+ logger.blank();
290
+ logger.info(`Respawning ${row.builderInfo.builderId} (issue ${row.builderInfo.issueArg}, ${row.builderInfo.cliProtocol})...`);
291
+ try {
292
+ await respawnBuilder(row.builderInfo);
293
+ succeeded++;
294
+ }
295
+ catch (err) {
296
+ failed++;
297
+ logger.error(`Failed to respawn ${row.builderInfo.builderId}: ${err instanceof Error ? err.message : String(err)}`);
298
+ }
299
+ }
300
+ logger.blank();
301
+ logger.kv('Respawned', String(succeeded));
302
+ if (failed > 0) {
303
+ logger.kv('Failed', String(failed));
304
+ process.exit(1);
305
+ }
306
+ }
307
+ //# sourceMappingURL=workspace-recover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-recover.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/workspace-recover.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA0CtC;;;GAGG;AACH,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAKzC;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAK/C;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAK9B;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AA6qBD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,WAAW,EACX,SAAS,EACT,MAAM,EACN,YAAY,GACb,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA0CtC;;;GAGG;AACH,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAKzC;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAK/C;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAK9B;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AA8yBD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,WAAW,EACX,SAAS,EACT,MAAM,EACN,YAAY,GACb,MAAM,YAAY,CAAC"}
@@ -122,8 +122,10 @@ function ensureLocalDatabase() {
122
122
  // Check if migration is needed
123
123
  const migrated = db.prepare('SELECT version FROM _migrations WHERE version = 1').get();
124
124
  if (!migrated && existsSync(jsonPath)) {
125
- // Migrate from JSON
126
- migrateLocalFromJson(db, jsonPath);
125
+ // Migrate from JSON.
126
+ // Bugfix #826: pass workspaceRoot so the architect row gets tagged
127
+ // with workspace_path (the new composite-PK column).
128
+ migrateLocalFromJson(db, jsonPath, config.workspaceRoot);
127
129
  // Record migration
128
130
  db.prepare('INSERT INTO _migrations (version) VALUES (1)').run();
129
131
  // Backup original JSON and remove it
@@ -429,6 +431,127 @@ function ensureLocalDatabase() {
429
431
  }
430
432
  db.prepare('INSERT INTO _migrations (version) VALUES (10)').run();
431
433
  }
434
+ // Migration v11: Workspace-scoped architect rows (Bugfix #826).
435
+ //
436
+ // The architect table was global per Tower process, anchored to Tower's
437
+ // startup CWD. With multi-architect (Spec 755 / 786), this meant siblings
438
+ // registered in workspace A were re-spawned into workspace B at the next
439
+ // launchInstance(B) — a real PTY leak. Fix by construction: add
440
+ // `workspace_path` as part of the primary key so rows are explicitly scoped.
441
+ //
442
+ // Backfill source: global.db.terminal_sessions has per-architect rows with
443
+ // workspace_path (its `role_id` column holds the architect name). We ATTACH
444
+ // global.db and copy that mapping into the new architect rows. Architects
445
+ // with no current terminal_session row are orphans (their PTY died and was
446
+ // cleaned up before this migration ran) — they are dropped.
447
+ //
448
+ // Idempotent: skips when workspace_path column already exists (handles fresh
449
+ // installs that ran the updated schema, and re-runs after partial failure).
450
+ const v11 = db.prepare('SELECT version FROM _migrations WHERE version = 11').get();
451
+ if (!v11) {
452
+ // Check if workspace_path column already exists (fresh install via LOCAL_SCHEMA).
453
+ const cols = db.prepare('PRAGMA table_info(architect)').all();
454
+ const alreadyMigrated = cols.some(c => c.name === 'workspace_path');
455
+ if (!alreadyMigrated) {
456
+ const globalDbPath = getGlobalDbPath();
457
+ // Step 1: rebuild table with composite PK (workspace_path, id).
458
+ // - Create _v11 table with the new shape.
459
+ // - Backfill workspace_path from global.db.terminal_sessions via ATTACH.
460
+ // Use LIMIT 1 to handle the (rare) case where multiple rows match.
461
+ // - Drop orphans (workspace_path IS NULL).
462
+ // - DETACH global.db before swapping table names.
463
+ // - Atomic swap: DROP architect, RENAME _v11 → architect.
464
+ db.exec(`
465
+ CREATE TABLE architect_v11 (
466
+ workspace_path TEXT NOT NULL,
467
+ id TEXT NOT NULL,
468
+ pid INTEGER NOT NULL,
469
+ port INTEGER NOT NULL,
470
+ cmd TEXT NOT NULL,
471
+ started_at TEXT NOT NULL DEFAULT (datetime('now')),
472
+ terminal_id TEXT,
473
+ PRIMARY KEY (workspace_path, id)
474
+ );
475
+ `);
476
+ try {
477
+ // ATTACH global.db so we can read terminal_sessions for the backfill.
478
+ db.prepare("ATTACH DATABASE ? AS globaldb").run(globalDbPath);
479
+ try {
480
+ // Backfill: for each architect row, look up its workspace_path in
481
+ // global.db.terminal_sessions.
482
+ //
483
+ // Disambiguation (Bugfix #826 iter-5): for users already hit by the
484
+ // leak, the same architect NAME can appear in MULTIPLE workspaces'
485
+ // terminal_sessions rows. Matching by `role_id` alone with `LIMIT 1`
486
+ // would pick non-deterministically and could migrate ob-refine to
487
+ // the wrong workspace. Use `terminal_id` as the primary disambiguator
488
+ // — it's the stable session UUID and uniquely identifies one
489
+ // terminal_session row. Fall back to `role_id` only when
490
+ // `terminal_id` doesn't match (legacy rows where terminal_id is NULL
491
+ // or its target row has been cleaned up).
492
+ db.exec(`
493
+ INSERT INTO architect_v11 (workspace_path, id, pid, port, cmd, started_at, terminal_id)
494
+ SELECT
495
+ COALESCE(
496
+ (SELECT ts.workspace_path
497
+ FROM globaldb.terminal_sessions ts
498
+ WHERE ts.id = a.terminal_id
499
+ AND ts.type = 'architect'),
500
+ (SELECT ts.workspace_path
501
+ FROM globaldb.terminal_sessions ts
502
+ WHERE ts.role_id = a.id
503
+ AND ts.type = 'architect'
504
+ LIMIT 1)
505
+ ) AS workspace_path,
506
+ a.id,
507
+ a.pid,
508
+ a.port,
509
+ a.cmd,
510
+ a.started_at,
511
+ a.terminal_id
512
+ FROM architect a
513
+ WHERE EXISTS (
514
+ SELECT 1 FROM globaldb.terminal_sessions ts
515
+ WHERE (ts.id = a.terminal_id OR ts.role_id = a.id)
516
+ AND ts.type = 'architect'
517
+ );
518
+ `);
519
+ }
520
+ finally {
521
+ db.prepare('DETACH DATABASE globaldb').run();
522
+ }
523
+ }
524
+ catch (err) {
525
+ // If global.db can't be opened (e.g. doesn't exist yet in a fresh
526
+ // install where Tower hasn't started), the architect table must be
527
+ // empty for the migration to succeed. Verify and proceed; if there
528
+ // are pre-existing architect rows we genuinely can't backfill, drop
529
+ // them — they correspond to a never-started workspace.
530
+ const remaining = db.prepare('SELECT COUNT(*) AS n FROM architect').get();
531
+ if (remaining.n > 0) {
532
+ console.log(`[warn] Migration v11: dropping ${remaining.n} architect row(s) — global.db unavailable for backfill: ${err.message}`);
533
+ }
534
+ // architect_v11 is empty in this path; carry on.
535
+ }
536
+ // Step 2: atomic swap.
537
+ db.exec(`
538
+ DROP TABLE architect;
539
+ ALTER TABLE architect_v11 RENAME TO architect;
540
+ `);
541
+ console.log('[info] Migrated architect table: workspace-scoped rows (Bugfix #826)');
542
+ }
543
+ // Bugfix #826 iter-7: create the workspace_path index here, OUTSIDE the
544
+ // alreadyMigrated guard. The index is NOT in LOCAL_SCHEMA because
545
+ // db.exec(LOCAL_SCHEMA) runs before migrations on every open — and on a
546
+ // pre-v11 install the architect table lacks workspace_path, so CREATE
547
+ // INDEX would throw 'no such column' and abort ensureLocalDatabase before
548
+ // v11 can run. Placing it here ensures the index is created on both
549
+ // upgrade installs (after the migration body) and fresh installs (where
550
+ // LOCAL_SCHEMA already created the v11 table shape and the inner block
551
+ // was skipped). `IF NOT EXISTS` makes the second-open case a no-op.
552
+ db.exec('CREATE INDEX IF NOT EXISTS idx_architect_workspace ON architect(workspace_path);');
553
+ db.prepare('INSERT INTO _migrations (version) VALUES (11)').run();
554
+ }
432
555
  return db;
433
556
  }
434
557
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent-farm/db/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent-farm/db/index.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,16 @@
5
5
  */
6
6
  import type Database from 'better-sqlite3';
7
7
  /**
8
- * Migrate local state from JSON to SQLite
8
+ * Migrate local state from JSON to SQLite.
9
+ *
10
+ * Bugfix #826: the architect row needs a workspace_path. The legacy JSON
11
+ * state has no such field — the architect was implicitly scoped to whatever
12
+ * workspace this state.db belongs to. Callers pass `workspacePath` (the
13
+ * workspace this state.db lives under) to fill that gap.
14
+ *
15
+ * Bugfix #826 iter-6: canonicalize (realpath) before write so a symlinked
16
+ * workspaceRoot can't seed a row that Tower's canonical-path lookups won't
17
+ * find. Mirrors the normalization in state.ts accessors.
9
18
  */
10
- export declare function migrateLocalFromJson(db: Database.Database, jsonPath: string): void;
19
+ export declare function migrateLocalFromJson(db: Database.Database, jsonPath: string, workspacePath: string): void;
11
20
  //# sourceMappingURL=migrate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAqB3C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAiFlF"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAsB3C;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,IAAI,CA0FN"}
@@ -3,21 +3,40 @@
3
3
  *
4
4
  * Handles migration from JSON files to SQLite databases
5
5
  */
6
- import { readFileSync } from 'node:fs';
6
+ import { readFileSync, realpathSync } from 'node:fs';
7
+ import { resolve } from 'node:path';
7
8
  /**
8
- * Migrate local state from JSON to SQLite
9
+ * Migrate local state from JSON to SQLite.
10
+ *
11
+ * Bugfix #826: the architect row needs a workspace_path. The legacy JSON
12
+ * state has no such field — the architect was implicitly scoped to whatever
13
+ * workspace this state.db belongs to. Callers pass `workspacePath` (the
14
+ * workspace this state.db lives under) to fill that gap.
15
+ *
16
+ * Bugfix #826 iter-6: canonicalize (realpath) before write so a symlinked
17
+ * workspaceRoot can't seed a row that Tower's canonical-path lookups won't
18
+ * find. Mirrors the normalization in state.ts accessors.
9
19
  */
10
- export function migrateLocalFromJson(db, jsonPath) {
20
+ export function migrateLocalFromJson(db, jsonPath, workspacePath) {
11
21
  const jsonContent = readFileSync(jsonPath, 'utf-8');
12
22
  const state = JSON.parse(jsonContent);
23
+ let canonicalWorkspacePath;
24
+ try {
25
+ canonicalWorkspacePath = realpathSync(workspacePath);
26
+ }
27
+ catch {
28
+ canonicalWorkspacePath = resolve(workspacePath);
29
+ }
13
30
  // Wrap in transaction for atomicity
14
31
  const migrate = db.transaction(() => {
15
32
  // Migrate architect (Spec 755: legacy singleton becomes architect named 'main')
33
+ // Bugfix #826: tag with canonical workspace_path so the row is scoped.
16
34
  if (state.architect) {
17
35
  db.prepare(`
18
- INSERT INTO architect (id, pid, port, cmd, started_at)
19
- VALUES ('main', @pid, @port, @cmd, @startedAt)
36
+ INSERT INTO architect (workspace_path, id, pid, port, cmd, started_at)
37
+ VALUES (@workspacePath, 'main', @pid, @port, @cmd, @startedAt)
20
38
  `).run({
39
+ workspacePath: canonicalWorkspacePath,
21
40
  pid: state.architect.pid,
22
41
  port: state.architect.port,
23
42
  cmd: state.architect.cmd,
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/agent-farm/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAoBvC;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAqB,EAAE,QAAgB;IAC1E,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,KAAK,GAAoB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEvD,oCAAoC;IACpC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAClC,gFAAgF;QAChF,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,EAAE,CAAC,OAAO,CAAC;;;OAGV,CAAC,CAAC,GAAG,CAAC;gBACL,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG;gBACxB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;gBAC1B,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS;aACrC,CAAC,CAAC;QACL,CAAC;QAED,mBAAmB;QACnB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC3C,EAAE,CAAC,OAAO,CAAC;;;;;;;;;OASV,CAAC,CAAC,GAAG,CAAC;gBACL,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;gBAClC,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;aAC3C,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACrC,EAAE,CAAC,OAAO,CAAC;;;OAGV,CAAC,CAAC,GAAG,CAAC;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,EAAE,IAAI,CAAC,GAAG;aACd,CAAC,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YACjD,EAAE,CAAC,OAAO,CAAC;;;OAGV,CAAC,CAAC,GAAG,CAAC;gBACL,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,GAAG,EAAE,UAAU,CAAC,GAAG;gBACnB,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;gBAClC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/agent-farm/db/migrate.ts"],"names":[],"mappings":"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"}