@cluesmith/codev 3.2.1 → 3.2.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 (161) hide show
  1. package/dashboard-dist/assets/{index-DM7OU-EI.js → index-BZ1x7x1X.js} +34 -34
  2. package/dashboard-dist/assets/index-BZ1x7x1X.js.map +1 -0
  3. package/dashboard-dist/index.html +1 -1
  4. package/dist/agent-farm/cli.d.ts.map +1 -1
  5. package/dist/agent-farm/cli.js +17 -0
  6. package/dist/agent-farm/cli.js.map +1 -1
  7. package/dist/agent-farm/commands/architect.d.ts.map +1 -1
  8. package/dist/agent-farm/commands/architect.js +6 -17
  9. package/dist/agent-farm/commands/architect.js.map +1 -1
  10. package/dist/agent-farm/commands/cleanup.js +3 -2
  11. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  12. package/dist/agent-farm/commands/db.d.ts +10 -0
  13. package/dist/agent-farm/commands/db.d.ts.map +1 -1
  14. package/dist/agent-farm/commands/db.js +77 -0
  15. package/dist/agent-farm/commands/db.js.map +1 -1
  16. package/dist/agent-farm/commands/send.d.ts +40 -12
  17. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  18. package/dist/agent-farm/commands/send.js +101 -34
  19. package/dist/agent-farm/commands/send.js.map +1 -1
  20. package/dist/agent-farm/commands/spawn-worktree.d.ts +12 -7
  21. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  22. package/dist/agent-farm/commands/spawn-worktree.js +40 -19
  23. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  24. package/dist/agent-farm/commands/spawn.d.ts +15 -6
  25. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  26. package/dist/agent-farm/commands/spawn.js +24 -17
  27. package/dist/agent-farm/commands/spawn.js.map +1 -1
  28. package/dist/agent-farm/commands/stop.js +2 -2
  29. package/dist/agent-farm/commands/stop.js.map +1 -1
  30. package/dist/agent-farm/commands/tower.d.ts +1 -0
  31. package/dist/agent-farm/commands/tower.d.ts.map +1 -1
  32. package/dist/agent-farm/commands/tower.js +50 -0
  33. package/dist/agent-farm/commands/tower.js.map +1 -1
  34. package/dist/agent-farm/commands/workspace-recover.d.ts +31 -0
  35. package/dist/agent-farm/commands/workspace-recover.d.ts.map +1 -1
  36. package/dist/agent-farm/commands/workspace-recover.js +70 -30
  37. package/dist/agent-farm/commands/workspace-recover.js.map +1 -1
  38. package/dist/agent-farm/db/consolidate.d.ts +66 -0
  39. package/dist/agent-farm/db/consolidate.d.ts.map +1 -0
  40. package/dist/agent-farm/db/consolidate.js +406 -0
  41. package/dist/agent-farm/db/consolidate.js.map +1 -0
  42. package/dist/agent-farm/db/index.d.ts +13 -4
  43. package/dist/agent-farm/db/index.d.ts.map +1 -1
  44. package/dist/agent-farm/db/index.js +108 -472
  45. package/dist/agent-farm/db/index.js.map +1 -1
  46. package/dist/agent-farm/db/schema.d.ts +11 -4
  47. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  48. package/dist/agent-farm/db/schema.js +91 -2
  49. package/dist/agent-farm/db/schema.js.map +1 -1
  50. package/dist/agent-farm/db/types.d.ts +2 -0
  51. package/dist/agent-farm/db/types.d.ts.map +1 -1
  52. package/dist/agent-farm/db/types.js +1 -0
  53. package/dist/agent-farm/db/types.js.map +1 -1
  54. package/dist/agent-farm/lib/builder-lookup.d.ts.map +1 -1
  55. package/dist/agent-farm/lib/builder-lookup.js +9 -3
  56. package/dist/agent-farm/lib/builder-lookup.js.map +1 -1
  57. package/dist/agent-farm/servers/codev-config-watcher.d.ts +37 -0
  58. package/dist/agent-farm/servers/codev-config-watcher.d.ts.map +1 -0
  59. package/dist/agent-farm/servers/{worktree-config-watcher.js → codev-config-watcher.js} +15 -14
  60. package/dist/agent-farm/servers/codev-config-watcher.js.map +1 -0
  61. package/dist/agent-farm/servers/command-relay.d.ts +54 -0
  62. package/dist/agent-farm/servers/command-relay.d.ts.map +1 -0
  63. package/dist/agent-farm/servers/command-relay.js +94 -0
  64. package/dist/agent-farm/servers/command-relay.js.map +1 -0
  65. package/dist/agent-farm/servers/overview.d.ts.map +1 -1
  66. package/dist/agent-farm/servers/overview.js +12 -6
  67. package/dist/agent-farm/servers/overview.js.map +1 -1
  68. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  69. package/dist/agent-farm/servers/tower-instances.js +188 -58
  70. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  71. package/dist/agent-farm/servers/tower-messages.d.ts +9 -0
  72. package/dist/agent-farm/servers/tower-messages.d.ts.map +1 -1
  73. package/dist/agent-farm/servers/tower-messages.js +24 -0
  74. package/dist/agent-farm/servers/tower-messages.js.map +1 -1
  75. package/dist/agent-farm/servers/tower-routes.d.ts +1 -1
  76. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  77. package/dist/agent-farm/servers/tower-routes.js +111 -35
  78. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  79. package/dist/agent-farm/servers/tower-server.js +41 -27
  80. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  81. package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
  82. package/dist/agent-farm/servers/tower-terminals.js +47 -5
  83. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  84. package/dist/agent-farm/servers/tower-types.d.ts +2 -0
  85. package/dist/agent-farm/servers/tower-types.d.ts.map +1 -1
  86. package/dist/agent-farm/servers/tower-utils.d.ts +117 -5
  87. package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
  88. package/dist/agent-farm/servers/tower-utils.js +131 -14
  89. package/dist/agent-farm/servers/tower-utils.js.map +1 -1
  90. package/dist/agent-farm/state.d.ts +41 -21
  91. package/dist/agent-farm/state.d.ts.map +1 -1
  92. package/dist/agent-farm/state.js +137 -79
  93. package/dist/agent-farm/state.js.map +1 -1
  94. package/dist/agent-farm/types.d.ts +14 -0
  95. package/dist/agent-farm/types.d.ts.map +1 -1
  96. package/dist/agent-farm/utils/claude-session-discovery.d.ts +12 -0
  97. package/dist/agent-farm/utils/claude-session-discovery.d.ts.map +1 -1
  98. package/dist/agent-farm/utils/claude-session-discovery.js +42 -4
  99. package/dist/agent-farm/utils/claude-session-discovery.js.map +1 -1
  100. package/dist/agent-farm/utils/config.d.ts +24 -1
  101. package/dist/agent-farm/utils/config.d.ts.map +1 -1
  102. package/dist/agent-farm/utils/config.js +59 -3
  103. package/dist/agent-farm/utils/config.js.map +1 -1
  104. package/dist/agent-farm/utils/harness.d.ts +57 -2
  105. package/dist/agent-farm/utils/harness.d.ts.map +1 -1
  106. package/dist/agent-farm/utils/harness.js +24 -0
  107. package/dist/agent-farm/utils/harness.js.map +1 -1
  108. package/dist/agent-farm/utils/workspace-path.d.ts +16 -0
  109. package/dist/agent-farm/utils/workspace-path.d.ts.map +1 -0
  110. package/dist/agent-farm/utils/workspace-path.js +26 -0
  111. package/dist/agent-farm/utils/workspace-path.js.map +1 -0
  112. package/dist/agent-farm/utils/worktree-write-guard.d.ts +56 -0
  113. package/dist/agent-farm/utils/worktree-write-guard.d.ts.map +1 -0
  114. package/dist/agent-farm/utils/worktree-write-guard.js +222 -0
  115. package/dist/agent-farm/utils/worktree-write-guard.js.map +1 -0
  116. package/dist/cli.d.ts.map +1 -1
  117. package/dist/cli.js +2 -0
  118. package/dist/cli.js.map +1 -1
  119. package/dist/commands/consult/index.d.ts +50 -2
  120. package/dist/commands/consult/index.d.ts.map +1 -1
  121. package/dist/commands/consult/index.js +121 -5
  122. package/dist/commands/consult/index.js.map +1 -1
  123. package/dist/commands/doctor.d.ts.map +1 -1
  124. package/dist/commands/doctor.js +24 -2
  125. package/dist/commands/doctor.js.map +1 -1
  126. package/dist/commands/porch/verdict.js +2 -2
  127. package/dist/commands/porch/verdict.js.map +1 -1
  128. package/dist/lib/config.d.ts +10 -0
  129. package/dist/lib/config.d.ts.map +1 -1
  130. package/dist/lib/config.js.map +1 -1
  131. package/dist/lib/forge-contracts.d.ts +8 -0
  132. package/dist/lib/forge-contracts.d.ts.map +1 -1
  133. package/dist/lib/forge-contracts.js.map +1 -1
  134. package/dist/lib/managed-block.d.ts +8 -2
  135. package/dist/lib/managed-block.d.ts.map +1 -1
  136. package/dist/lib/managed-block.js +32 -7
  137. package/dist/lib/managed-block.js.map +1 -1
  138. package/dist/terminal/session-manager.d.ts +33 -0
  139. package/dist/terminal/session-manager.d.ts.map +1 -1
  140. package/dist/terminal/session-manager.js +62 -1
  141. package/dist/terminal/session-manager.js.map +1 -1
  142. package/package.json +4 -4
  143. package/scripts/forge/gitea/issue-view.sh +4 -1
  144. package/scripts/forge/github/issue-view.sh +2 -2
  145. package/scripts/forge/gitlab/issue-view.sh +4 -1
  146. package/scripts/forge/linear/issue-view.sh +3 -2
  147. package/skeleton/protocols/pir/prompts/implement.md +1 -1
  148. package/skeleton/protocols/pir/prompts/review.md +1 -1
  149. package/skeleton/protocols/pir/protocol.md +3 -3
  150. package/skeleton/resources/commands/consult.md +14 -0
  151. package/skeleton/roles/builder.md +21 -0
  152. package/skeleton/templates/AGENTS.md +16 -0
  153. package/skeleton/templates/CLAUDE.md +16 -0
  154. package/dashboard-dist/assets/index-DM7OU-EI.js.map +0 -1
  155. package/dist/agent-farm/db/migrate.d.ts +0 -20
  156. package/dist/agent-farm/db/migrate.d.ts.map +0 -1
  157. package/dist/agent-farm/db/migrate.js +0 -107
  158. package/dist/agent-farm/db/migrate.js.map +0 -1
  159. package/dist/agent-farm/servers/worktree-config-watcher.d.ts +0 -36
  160. package/dist/agent-farm/servers/worktree-config-watcher.d.ts.map +0 -1
  161. package/dist/agent-farm/servers/worktree-config-watcher.js.map +0 -1
@@ -8,8 +8,10 @@
8
8
  import fs from 'node:fs';
9
9
  import path from 'node:path';
10
10
  import { tmpdir } from 'node:os';
11
+ import crypto from 'node:crypto';
11
12
  import { loadRolePrompt } from '../utils/roles.js';
12
13
  import { getArchitectHarness } from '../utils/config.js';
14
+ import { getArchitectByName, setArchitectSessionId } from '../state.js';
13
15
  // ============================================================================
14
16
  // Rate Limiting
15
17
  // ============================================================================
@@ -55,19 +57,10 @@ export function startRateLimitCleanup() {
55
57
  // ============================================================================
56
58
  // Path Utilities
57
59
  // ============================================================================
58
- /**
59
- * Normalize a workspace path to its canonical form for consistent SQLite storage.
60
- * Uses realpath to resolve symlinks and relative paths.
61
- */
62
- export function normalizeWorkspacePath(workspacePath) {
63
- try {
64
- return fs.realpathSync(workspacePath);
65
- }
66
- catch {
67
- // Path doesn't exist yet, normalize without realpath
68
- return path.resolve(workspacePath);
69
- }
70
- }
60
+ // Issue #1118: normalizeWorkspacePath moved to the leaf module utils/workspace-path.ts
61
+ // so the data layer (state.ts, db/consolidate.ts) can share it without importing
62
+ // the server layer. Re-exported here so existing server-side importers are unchanged.
63
+ export { normalizeWorkspacePath } from '../utils/workspace-path.js';
71
64
  /**
72
65
  * Get workspace name from path.
73
66
  */
@@ -153,18 +146,142 @@ export function buildArchitectArgs(baseArgs, workspacePath) {
153
146
  const codevDir = path.join(workspacePath, 'codev');
154
147
  const bundledRolesDir = path.resolve(import.meta.dirname, '../../../skeleton/roles');
155
148
  const config = { codevDir, bundledRolesDir, workspaceRoot: workspacePath };
149
+ const harness = getArchitectHarness(workspacePath);
156
150
  const role = loadRolePrompt(config, 'architect');
157
151
  if (!role)
158
152
  return { args: baseArgs, env: {} };
159
153
  const roleFile = path.join(workspacePath, '.architect-role.md');
160
154
  fs.writeFileSync(roleFile, role.content);
161
- const harness = getArchitectHarness(workspacePath);
162
155
  const injection = harness.buildRoleInjection(role.content, roleFile);
163
156
  return {
164
157
  args: [...baseArgs, ...injection.args],
165
158
  env: injection.env,
166
159
  };
167
160
  }
161
+ /**
162
+ * Issue #1145: true when the stored session may be resumed. Harnesses that
163
+ * expose `session.verifyOwnership` get the final say; ones that don't are
164
+ * trusted (their stored ids are minted by us and have no on-disk store to
165
+ * cross-check). A throwing check counts as "not ours".
166
+ */
167
+ function sessionIsOwned(harness, sessionId, workspacePath, homeDir) {
168
+ const verify = harness.session?.verifyOwnership;
169
+ if (!verify)
170
+ return true;
171
+ try {
172
+ return verify(sessionId, workspacePath, { homeDir });
173
+ }
174
+ catch {
175
+ return false;
176
+ }
177
+ }
178
+ /**
179
+ * Issue #1150: decide whether a persisted sibling architect row still deserves
180
+ * a respawn, absent any live-terminal evidence (the caller checks
181
+ * `terminal_sessions` first; this covers the session-artifact half).
182
+ *
183
+ * A row is live when:
184
+ * 1. The harness has no `session` capability (Codex/Gemini): such rows can
185
+ * never carry resumable-session evidence, and their respawn is always a
186
+ * fresh spawn, so pruning them would break Spec 786 stop/start
187
+ * persistence while preventing nothing (no conversation can resurrect).
188
+ * 2. The row's stored session id passes the harness ownership check
189
+ * (`sessionIsOwned`, which also trusts harnesses lacking
190
+ * `verifyOwnership`: never prune without positive evidence of staleness).
191
+ *
192
+ * A session-capable harness row with no stored id, or an id whose session
193
+ * artifact is gone, is a dead registration: the reconcile loop prunes it
194
+ * instead of resurrecting a removed architect (the #1150 bug class).
195
+ */
196
+ export function siblingRegistrationIsLive(workspacePath, sessionId, opts) {
197
+ const harness = getArchitectHarness(workspacePath);
198
+ if (!harness.session)
199
+ return true;
200
+ if (!sessionId)
201
+ return false;
202
+ return sessionIsOwned(harness, sessionId, workspacePath, opts?.homeDir);
203
+ }
204
+ export function resolveArchitectLaunch(opts) {
205
+ const { workspacePath, baseArgs, storedSessionId, homeDir } = opts;
206
+ const harness = getArchitectHarness(workspacePath);
207
+ // 1. No resumable-session support → plain fresh, nothing to persist.
208
+ if (!harness.session) {
209
+ return { ...buildArchitectArgs(baseArgs, workspacePath), sessionId: null, resumed: false };
210
+ }
211
+ // Issue #1149: emergency escape hatch. When the stored id passes the
212
+ // existence check but is unresumable in practice (corrupted transcript),
213
+ // restarting Tower with CODEV_SKIP_RESUME=1 forces every architect to a
214
+ // fresh launch without waiting for the automatic crash-loop fallback.
215
+ const skipResume = process.env['CODEV_SKIP_RESUME'] === '1';
216
+ // 2. Resume the persisted conversation (role injection skipped) — but only
217
+ // when the session still exists on disk for this workspace. A failed or
218
+ // throwing check falls through to a fresh spawn (Issue #1145: a stored id
219
+ // can outlive its jsonl, and resuming it would crash-loop the restart).
220
+ if (!skipResume && storedSessionId && sessionIsOwned(harness, storedSessionId, workspacePath, homeDir)) {
221
+ const fallbackSessionId = crypto.randomUUID();
222
+ const fresh = buildArchitectArgs([...baseArgs, ...harness.session.newSessionArgs(fallbackSessionId)], workspacePath);
223
+ return {
224
+ args: [...baseArgs, ...harness.session.resumeArgs(storedSessionId)],
225
+ env: {},
226
+ sessionId: storedSessionId,
227
+ resumed: true,
228
+ fallback: { args: fresh.args, env: fresh.env, sessionId: fallbackSessionId },
229
+ };
230
+ }
231
+ // 3. Fresh: mint an id, pin the session to it, persist it via the returned id.
232
+ const sessionId = crypto.randomUUID();
233
+ const built = buildArchitectArgs([...baseArgs, ...harness.session.newSessionArgs(sessionId)], workspacePath);
234
+ return { ...built, sessionId, resumed: false };
235
+ }
236
+ /**
237
+ * Issue #832: resolve launch args for an architect being auto-restarted by its
238
+ * shellper (claude crash / reconnect). Reads the architect's stored conversation
239
+ * `session_id` from its state.db row and hands it to `resolveArchitectLaunch`, so an
240
+ * in-process crash revives the SAME conversation (the silent-context-loss path)
241
+ * instead of spawning fresh. A legacy row with no stored id resolves to a fresh
242
+ * session (then self-heals on its next cold revival via the spawn-path persist).
243
+ *
244
+ * Unlike the cold-spawn `main` path, there is **no** jsonl-discovery fallback here —
245
+ * the restart sites rely solely on the stored id (matching #830, which never resumed
246
+ * at restart). Both shellper restart-bake sites in `tower-terminals.ts` call this so
247
+ * the read→resolve wiring lives in one tested place. Returns `resolveArchitectLaunch`'s
248
+ * result plus the `storedSessionId` the caller uses for the "Resuming…" log line.
249
+ */
250
+ export function resolveArchitectRestart(workspacePath, architectName, baseArgs, opts) {
251
+ const storedSessionId = getArchitectByName(workspacePath, architectName)?.sessionId ?? null;
252
+ const resolved = resolveArchitectLaunch({
253
+ workspacePath, name: architectName, baseArgs, storedSessionId, homeDir: opts?.homeDir,
254
+ });
255
+ return { ...resolved, storedSessionId };
256
+ }
257
+ /**
258
+ * Issue #1149: build the crash-loop fallback handed to the shellper layer when
259
+ * an architect launch resumes a stored conversation. If the resumed session
260
+ * fast-fails (the SessionManager detector), the restart loop swaps to this
261
+ * fresh launch and `onApply` repairs the architect row so future bakes resume
262
+ * the replacement conversation instead of relearning the unresumable id.
263
+ *
264
+ * The minted id is persisted rather than NULL: a NULL id would trip #1150's
265
+ * dead-registration pruning for siblings, and #1145's ownership check already
266
+ * defuses a minted id whose jsonl never materializes (next bake degrades to a
267
+ * fresh spawn with zero crash cycles).
268
+ */
269
+ export function buildArchitectCrashLoopFallback(opts) {
270
+ const { workspacePath, architectName, storedSessionId, fallback, baseEnv, log } = opts;
271
+ return {
272
+ args: fallback.args,
273
+ env: { ...baseEnv, ...fallback.env },
274
+ onApply: () => {
275
+ log('WARN', `Architect '${architectName}' resume session ${storedSessionId.slice(0, 8)}… unrecoverable; falling back to a fresh session in ${workspacePath}`);
276
+ try {
277
+ setArchitectSessionId(workspacePath, architectName, fallback.sessionId);
278
+ }
279
+ catch (err) {
280
+ log('WARN', `Failed to persist replacement session id for architect '${architectName}': ${err instanceof Error ? err.message : err}`);
281
+ }
282
+ },
283
+ };
284
+ }
168
285
  /**
169
286
  * Serve a static file from the React dashboard dist.
170
287
  * Returns true if the file was served, false otherwise.
@@ -1 +1 @@
1
- {"version":3,"file":"tower-utils.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tower-utils.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-utils.ts"],"names":[],"mappings":"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"}
@@ -16,9 +16,10 @@ import { closeDb } from './db/index.js';
16
16
  * can enumerate ALL architects without re-querying. Main is always
17
17
  * `architects[0]` when present.
18
18
  *
19
- * Bugfix #826: now takes a `workspacePath` argument and scopes the architect
20
- * read by `workspace_path`. Other tables (builders, utils, annotations) are
21
- * not workspace-scoped in this schema — they remain global per state.db file.
19
+ * Bugfix #826: takes a `workspacePath` and scopes the architect read by
20
+ * `workspace_path`. Issue #1118: `builders` is now workspace-scoped too (composite
21
+ * PK), so its read is scoped by the same `workspace_path`. `utils` and
22
+ * `annotations` remain global (UUID-keyed, runtime-ephemeral).
22
23
  */
23
24
  export declare function loadState(workspacePath: string): DashboardState;
24
25
  /**
@@ -42,6 +43,13 @@ export declare function setArchitect(workspacePath: string, architect: Architect
42
43
  * isolated from workspace B.
43
44
  */
44
45
  export declare function setArchitectByName(workspacePath: string, name: string, architect: ArchitectState | null): void;
46
+ /**
47
+ * Issue #1149: repair the stored conversation id on an architect row after a
48
+ * crash-loop fallback replaced an unresumable session. Targeted UPDATE so the
49
+ * rest of the row (cmd, terminal id, timestamps) is untouched; a no-op when
50
+ * the row does not exist.
51
+ */
52
+ export declare function setArchitectSessionId(workspacePath: string, name: string, sessionId: string | null): void;
45
53
  /**
46
54
  * Add or update a builder
47
55
  * Note: This is now synchronous
@@ -51,19 +59,22 @@ export declare function upsertBuilder(builder: Builder): void;
51
59
  * Remove a builder
52
60
  * Note: This is now synchronous
53
61
  */
54
- export declare function removeBuilder(id: string): void;
62
+ export declare function removeBuilder(id: string, workspacePath?: string): void;
55
63
  /**
56
- * Get a single builder by ID
64
+ * Get a single builder by ID.
65
+ * Issue #1118: pass `workspacePath` to disambiguate when the same id may exist
66
+ * in multiple workspaces; without it, returns the first matching row.
57
67
  */
58
- export declare function getBuilder(id: string): Builder | null;
68
+ export declare function getBuilder(id: string, workspacePath?: string): Builder | null;
59
69
  /**
60
- * Get all builders
70
+ * Get all builders. Issue #1118: pass `workspacePath` to scope to one workspace;
71
+ * omit it for a deliberate cross-workspace read (e.g. Tower global views).
61
72
  */
62
- export declare function getBuilders(): Builder[];
73
+ export declare function getBuilders(workspacePath?: string): Builder[];
63
74
  /**
64
- * Get builders by status
75
+ * Get builders by status. Issue #1118: optional `workspacePath` scopes the read.
65
76
  */
66
- export declare function getBuildersByStatus(status: Builder['status']): Builder[];
77
+ export declare function getBuildersByStatus(status: Builder['status'], workspacePath?: string): Builder[];
67
78
  /**
68
79
  * Add a utility terminal
69
80
  * Note: This is now synchronous
@@ -114,15 +125,23 @@ export declare function clearState(): void;
114
125
  * Spec 786: clear runtime state but preserve the architect registry.
115
126
  *
116
127
  * Used by `afx workspace stop` so sibling architects survive a graceful stop/
117
- * start cycle. The `architect` table is the durable registration; `builders`,
118
- * `utils`, and `annotations` are runtime concerns and get wiped as before.
128
+ * start cycle. The `architect` table is the durable registration; `builders`
129
+ * are the runtime concern and get wiped.
130
+ *
131
+ * Issue #1118: now that all workspaces share one `global.db`, this MUST be
132
+ * scoped by `workspace_path` — an unscoped `DELETE FROM builders` would wipe
133
+ * every other workspace's builders when one workspace stops. `builders` is
134
+ * workspace-scoped (composite PK), so the delete filters by `workspace_path`.
135
+ * `utils`/`annotations` are global (UUID-keyed, no workspace column) and
136
+ * vestigial (no producers), so they are intentionally left untouched here to
137
+ * avoid a cross-workspace wipe; the full-wipe `clearState()` still clears them.
119
138
  *
120
139
  * `clearState()` (the full-wipe variant) is preserved for callers that genuinely
121
- * want everything gone (uninstall / nuke flows / `handleWorkspaceStopAll`).
140
+ * want everything gone (uninstall / nuke flows).
122
141
  */
123
- export declare function clearRuntime(): void;
142
+ export declare function clearRuntime(workspacePath: string): void;
124
143
  /**
125
- * Spec 786: remove a single architect by name from `state.db.architect`.
144
+ * Spec 786: remove a single architect by name from the `architect` table.
126
145
  *
127
146
  * Idempotent — no-op if the named row is absent. Used by `remove-architect`
128
147
  * (Phase 4) and the permanent-exit handler (Phase 3 / OQ-B).
@@ -169,12 +188,13 @@ export declare function getArchitectByName(workspacePath: string, name: string):
169
188
  * This three-valued return cleanly distinguishes "legacy builder" from
170
189
  * "non-builder sender." Used by the Phase 3 affinity-aware resolver.
171
190
  *
172
- * When `workspacePath` is supplied, opens a per-workspace readonly handle
173
- * directly — the right thing for Tower, which serves multiple workspaces
174
- * and cannot rely on the singleton `getDb()` (which is tied to the process's
175
- * startup CWD). When omitted, falls back to the singleton — convenient for
176
- * CLI callers that already ran inside one workspace. Mirrors the pattern in
177
- * `servers/overview.ts`.
191
+ * Issue #1118: builders now live in the single shared global.db, scoped by
192
+ * `workspace_path`. When `workspacePath` is supplied (Tower, serving multiple
193
+ * workspaces), the lookup is scoped `WHERE workspace_path = ? AND id = ?` — this
194
+ * is load-bearing, since the same builder id can exist in two workspaces and the
195
+ * spoofing check must resolve to the *correct* workspace's spawning architect.
196
+ * When omitted (a CLI caller already inside one workspace), it falls back to
197
+ * match by id alone.
178
198
  */
179
199
  export declare function lookupBuilderSpawningArchitect(builderId: string, workspacePath?: string): string | null | undefined;
180
200
  export { closeDb };
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/agent-farm/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpG,OAAO,EAAS,OAAO,EAAE,MAAM,eAAe,CAAC;AAiC/C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,CAyC/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAiB1F;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAmB9G;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsCpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAIrD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,EAAE,CAIvC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE,CAIxE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAWhD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAUtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAiB3E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG3C;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,YAAY,EAAE,CAIzC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAIvD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAY1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAGjD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,UAAU,EAAE,CAI7C;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAWjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAczE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,EAAE,CAOrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAO7F;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,GAAG,IAAI,GAAG,SAAS,CAsB3B;AAGD,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/agent-farm/state.ts"],"names":[],"mappings":"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"}