@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
@@ -5,33 +5,37 @@
5
5
  * All operations are synchronous and atomic.
6
6
  */
7
7
  import path from 'node:path';
8
- import { existsSync, realpathSync } from 'node:fs';
9
- import Database from 'better-sqlite3';
10
8
  import { getDb, closeDb } from './db/index.js';
11
9
  import { dbArchitectToArchitectState, dbBuilderToBuilder, dbUtilToUtilTerminal, dbAnnotationToAnnotation, } from './db/types.js';
12
10
  import { isPortConflictError } from './db/errors.js';
11
+ // Issue #1118: shared workspace-path canonicalization (single source of truth).
12
+ // The architect/builders tables key on `workspace_path`; writers and readers
13
+ // must agree on its exact form, so both layers normalize through this one leaf
14
+ // helper (Bugfix #826 iter-6). Aliased to `canonicalize` for the local callsites.
15
+ import { normalizeWorkspacePath as canonicalize } from './utils/workspace-path.js';
13
16
  /**
14
- * Normalize a workspace path to its canonical form (Bugfix #826 iter-6).
17
+ * Derive a builder's owning workspace from its worktree path (Issue #1118).
15
18
  *
16
- * The architect table's primary key includes `workspace_path`. Tower writes
17
- * canonical realpaths (via `normalizeWorkspacePath` in tower-utils.ts); CLI
18
- * callers and legacy migration paths often pass raw paths (e.g. a symlinked
19
- * workspace root). Without normalization, accessing a workspace via two
20
- * different paths (symlink + realpath) creates two distinct rows and lookups
21
- * silently fail.
22
- *
23
- * Mirrors the contract of `servers/tower-utils.ts:normalizeWorkspacePath`.
24
- * Kept inline to avoid pulling the server-layer import chain into the data
25
- * layer. Uses `realpathSync` when the path exists; falls back to
26
- * `path.resolve` for not-yet-existing paths (e.g. fresh installs).
19
+ * Builder worktrees are always `<workspace>/.builders/<id>`, so the workspace is
20
+ * the path prefix before `/.builders/`. Falls back to two-levels-up if the
21
+ * marker is absent (defensive — e.g. an ad-hoc worktree). The result is
22
+ * canonicalized to match the workspace_path normalization used everywhere else,
23
+ * so a builder's row is keyed by the same canonical workspace its architect is.
27
24
  */
28
- function canonicalize(workspacePath) {
29
- try {
30
- return realpathSync(workspacePath);
25
+ function deriveWorkspaceFromWorktree(worktree) {
26
+ // lastIndexOf, not indexOf: the workspace is the prefix before the FINAL
27
+ // `/.builders/` — robust when the path itself contains an earlier `.builders`
28
+ // segment (e.g. a builder worktree nested under another).
29
+ const marker = '/.builders/';
30
+ const idx = worktree.lastIndexOf(marker);
31
+ let root;
32
+ if (idx >= 0) {
33
+ root = worktree.slice(0, idx);
31
34
  }
32
- catch {
33
- return path.resolve(workspacePath);
35
+ else {
36
+ root = path.dirname(path.dirname(worktree));
34
37
  }
38
+ return canonicalize(root);
35
39
  }
36
40
  /**
37
41
  * Load complete state from database
@@ -43,9 +47,10 @@ function canonicalize(workspacePath) {
43
47
  * can enumerate ALL architects without re-querying. Main is always
44
48
  * `architects[0]` when present.
45
49
  *
46
- * Bugfix #826: now takes a `workspacePath` argument and scopes the architect
47
- * read by `workspace_path`. Other tables (builders, utils, annotations) are
48
- * not workspace-scoped in this schema — they remain global per state.db file.
50
+ * Bugfix #826: takes a `workspacePath` and scopes the architect read by
51
+ * `workspace_path`. Issue #1118: `builders` is now workspace-scoped too (composite
52
+ * PK), so its read is scoped by the same `workspace_path`. `utils` and
53
+ * `annotations` remain global (UUID-keyed, runtime-ephemeral).
49
54
  */
50
55
  export function loadState(workspacePath) {
51
56
  const db = getDb();
@@ -56,8 +61,8 @@ export function loadState(workspacePath) {
56
61
  // The ORDER BY uses `id != 'main'` so that 'main' sorts first
57
62
  // (0 < 1 with this expression), then started_at ASC for siblings.
58
63
  //
59
- // Bugfix #826: scoped by workspace_path so a state.db that contains rows
60
- // for multiple workspaces (Tower's CWD shared by many) returns only the
64
+ // Bugfix #826 / Issue #1118: scoped by workspace_path so the single shared
65
+ // global.db (which holds every workspace's architect rows) returns only the
61
66
  // architects belonging to the requested workspace.
62
67
  const architectRows = db.prepare("SELECT * FROM architect WHERE workspace_path = ? ORDER BY (id != 'main'), started_at").all(ws);
63
68
  const architects = architectRows.map(dbArchitectToArchitectState);
@@ -65,8 +70,11 @@ export function loadState(workspacePath) {
65
70
  // else the first-registered architect by started_at). Preserves the legacy
66
71
  // /api/state contract.
67
72
  const architect = architects[0] ?? null;
68
- // Load builders
69
- const builderRows = db.prepare('SELECT * FROM builders ORDER BY started_at').all();
73
+ // Load builders. Issue #1118: builders are now workspace-scoped (composite PK
74
+ // with workspace_path), so scope the read to this workspace — consistent with
75
+ // the architect read above, and correct now that one shared DB holds every
76
+ // workspace's builders.
77
+ const builderRows = db.prepare('SELECT * FROM builders WHERE workspace_path = ? ORDER BY started_at').all(ws);
70
78
  const builders = builderRows.map(dbBuilderToBuilder);
71
79
  // Load utils
72
80
  const utilRows = db.prepare('SELECT * FROM utils ORDER BY started_at').all();
@@ -101,13 +109,14 @@ export function setArchitect(workspacePath, architect) {
101
109
  }
102
110
  else {
103
111
  db.prepare(`
104
- INSERT OR REPLACE INTO architect (workspace_path, id, pid, port, cmd, started_at, terminal_id)
105
- VALUES (@workspacePath, 'main', 0, 0, @cmd, @startedAt, @terminalId)
112
+ INSERT OR REPLACE INTO architect (workspace_path, id, pid, port, cmd, started_at, terminal_id, session_id)
113
+ VALUES (@workspacePath, 'main', 0, 0, @cmd, @startedAt, @terminalId, @sessionId)
106
114
  `).run({
107
115
  workspacePath: ws,
108
116
  cmd: architect.cmd,
109
117
  startedAt: architect.startedAt,
110
118
  terminalId: architect.terminalId ?? null,
119
+ sessionId: architect.sessionId ?? null,
111
120
  });
112
121
  }
113
122
  }
@@ -127,32 +136,48 @@ export function setArchitectByName(workspacePath, name, architect) {
127
136
  return;
128
137
  }
129
138
  db.prepare(`
130
- INSERT OR REPLACE INTO architect (workspace_path, id, pid, port, cmd, started_at, terminal_id)
131
- VALUES (@workspacePath, @name, 0, 0, @cmd, @startedAt, @terminalId)
139
+ INSERT OR REPLACE INTO architect (workspace_path, id, pid, port, cmd, started_at, terminal_id, session_id)
140
+ VALUES (@workspacePath, @name, 0, 0, @cmd, @startedAt, @terminalId, @sessionId)
132
141
  `).run({
133
142
  workspacePath: ws,
134
143
  name,
135
144
  cmd: architect.cmd,
136
145
  startedAt: architect.startedAt,
137
146
  terminalId: architect.terminalId ?? null,
147
+ sessionId: architect.sessionId ?? null,
138
148
  });
139
149
  }
150
+ /**
151
+ * Issue #1149: repair the stored conversation id on an architect row after a
152
+ * crash-loop fallback replaced an unresumable session. Targeted UPDATE so the
153
+ * rest of the row (cmd, terminal id, timestamps) is untouched; a no-op when
154
+ * the row does not exist.
155
+ */
156
+ export function setArchitectSessionId(workspacePath, name, sessionId) {
157
+ const db = getDb();
158
+ const ws = canonicalize(workspacePath);
159
+ db.prepare('UPDATE architect SET session_id = ? WHERE workspace_path = ? AND id = ?')
160
+ .run(sessionId, ws, name);
161
+ }
140
162
  /**
141
163
  * Add or update a builder
142
164
  * Note: This is now synchronous
143
165
  */
144
166
  export function upsertBuilder(builder) {
145
167
  const db = getDb();
168
+ // Issue #1118: derive the owning workspace from the worktree so the row is
169
+ // keyed by (workspace_path, id) — letting the same id exist in two workspaces.
170
+ const ws = deriveWorkspaceFromWorktree(builder.worktree);
146
171
  db.prepare(`
147
172
  INSERT INTO builders (
148
- id, name, port, pid, status, phase, worktree, branch,
173
+ workspace_path, id, name, port, pid, status, phase, worktree, branch,
149
174
  type, task_text, protocol_name, issue_number, terminal_id, spawned_by_architect
150
175
  )
151
176
  VALUES (
152
- @id, @name, 0, 0, @status, @phase, @worktree, @branch,
177
+ @workspacePath, @id, @name, 0, 0, @status, @phase, @worktree, @branch,
153
178
  @type, @taskText, @protocolName, @issueNumber, @terminalId, @spawnedByArchitect
154
179
  )
155
- ON CONFLICT(id) DO UPDATE SET
180
+ ON CONFLICT(workspace_path, id) DO UPDATE SET
156
181
  name = excluded.name,
157
182
  status = excluded.status,
158
183
  phase = excluded.phase,
@@ -165,6 +190,7 @@ export function upsertBuilder(builder) {
165
190
  terminal_id = excluded.terminal_id,
166
191
  spawned_by_architect = COALESCE(excluded.spawned_by_architect, builders.spawned_by_architect)
167
192
  `).run({
193
+ workspacePath: ws,
168
194
  id: builder.id,
169
195
  name: builder.name,
170
196
  status: builder.status,
@@ -183,32 +209,66 @@ export function upsertBuilder(builder) {
183
209
  * Remove a builder
184
210
  * Note: This is now synchronous
185
211
  */
186
- export function removeBuilder(id) {
212
+ export function removeBuilder(id, workspacePath) {
187
213
  const db = getDb();
188
- db.prepare('DELETE FROM builders WHERE id = ?').run(id);
214
+ // Issue #1118: when a workspace is in scope, delete the workspace-scoped row
215
+ // (the same id can exist in another workspace). Without one, fall back to
216
+ // delete-by-id (legacy callers; ids were unique within the old per-file DB).
217
+ if (workspacePath) {
218
+ db.prepare('DELETE FROM builders WHERE workspace_path = ? AND id = ?').run(canonicalize(workspacePath), id);
219
+ }
220
+ else {
221
+ db.prepare('DELETE FROM builders WHERE id = ?').run(id);
222
+ }
189
223
  }
190
224
  /**
191
- * Get a single builder by ID
225
+ * Get a single builder by ID.
226
+ * Issue #1118: pass `workspacePath` to disambiguate when the same id may exist
227
+ * in multiple workspaces; without it, returns the first matching row.
192
228
  */
193
- export function getBuilder(id) {
229
+ export function getBuilder(id, workspacePath) {
194
230
  const db = getDb();
195
- const row = db.prepare('SELECT * FROM builders WHERE id = ?').get(id);
196
- return row ? dbBuilderToBuilder(row) : null;
231
+ let row;
232
+ if (workspacePath) {
233
+ row = db.prepare('SELECT * FROM builders WHERE workspace_path = ? AND id = ?')
234
+ .get(canonicalize(workspacePath), id);
235
+ }
236
+ else {
237
+ row = db.prepare('SELECT * FROM builders WHERE id = ?').get(id);
238
+ }
239
+ if (!row)
240
+ return null;
241
+ return dbBuilderToBuilder(row);
197
242
  }
198
243
  /**
199
- * Get all builders
244
+ * Get all builders. Issue #1118: pass `workspacePath` to scope to one workspace;
245
+ * omit it for a deliberate cross-workspace read (e.g. Tower global views).
200
246
  */
201
- export function getBuilders() {
247
+ export function getBuilders(workspacePath) {
202
248
  const db = getDb();
203
- const rows = db.prepare('SELECT * FROM builders ORDER BY started_at').all();
249
+ let rows;
250
+ if (workspacePath) {
251
+ rows = db.prepare('SELECT * FROM builders WHERE workspace_path = ? ORDER BY started_at')
252
+ .all(canonicalize(workspacePath));
253
+ }
254
+ else {
255
+ rows = db.prepare('SELECT * FROM builders ORDER BY started_at').all();
256
+ }
204
257
  return rows.map(dbBuilderToBuilder);
205
258
  }
206
259
  /**
207
- * Get builders by status
260
+ * Get builders by status. Issue #1118: optional `workspacePath` scopes the read.
208
261
  */
209
- export function getBuildersByStatus(status) {
262
+ export function getBuildersByStatus(status, workspacePath) {
210
263
  const db = getDb();
211
- const rows = db.prepare('SELECT * FROM builders WHERE status = ? ORDER BY started_at').all(status);
264
+ let rows;
265
+ if (workspacePath) {
266
+ rows = db.prepare('SELECT * FROM builders WHERE workspace_path = ? AND status = ? ORDER BY started_at')
267
+ .all(canonicalize(workspacePath), status);
268
+ }
269
+ else {
270
+ rows = db.prepare('SELECT * FROM builders WHERE status = ? ORDER BY started_at').all(status);
271
+ }
212
272
  return rows.map(dbBuilderToBuilder);
213
273
  }
214
274
  /**
@@ -335,23 +395,27 @@ export function clearState() {
335
395
  * Spec 786: clear runtime state but preserve the architect registry.
336
396
  *
337
397
  * Used by `afx workspace stop` so sibling architects survive a graceful stop/
338
- * start cycle. The `architect` table is the durable registration; `builders`,
339
- * `utils`, and `annotations` are runtime concerns and get wiped as before.
398
+ * start cycle. The `architect` table is the durable registration; `builders`
399
+ * are the runtime concern and get wiped.
400
+ *
401
+ * Issue #1118: now that all workspaces share one `global.db`, this MUST be
402
+ * scoped by `workspace_path` — an unscoped `DELETE FROM builders` would wipe
403
+ * every other workspace's builders when one workspace stops. `builders` is
404
+ * workspace-scoped (composite PK), so the delete filters by `workspace_path`.
405
+ * `utils`/`annotations` are global (UUID-keyed, no workspace column) and
406
+ * vestigial (no producers), so they are intentionally left untouched here to
407
+ * avoid a cross-workspace wipe; the full-wipe `clearState()` still clears them.
340
408
  *
341
409
  * `clearState()` (the full-wipe variant) is preserved for callers that genuinely
342
- * want everything gone (uninstall / nuke flows / `handleWorkspaceStopAll`).
410
+ * want everything gone (uninstall / nuke flows).
343
411
  */
344
- export function clearRuntime() {
412
+ export function clearRuntime(workspacePath) {
345
413
  const db = getDb();
346
- const clear = db.transaction(() => {
347
- db.prepare('DELETE FROM builders').run();
348
- db.prepare('DELETE FROM utils').run();
349
- db.prepare('DELETE FROM annotations').run();
350
- });
351
- clear();
414
+ const ws = canonicalize(workspacePath);
415
+ db.prepare('DELETE FROM builders WHERE workspace_path = ?').run(ws);
352
416
  }
353
417
  /**
354
- * Spec 786: remove a single architect by name from `state.db.architect`.
418
+ * Spec 786: remove a single architect by name from the `architect` table.
355
419
  *
356
420
  * Idempotent — no-op if the named row is absent. Used by `remove-architect`
357
421
  * (Phase 4) and the permanent-exit handler (Phase 3 / OQ-B).
@@ -430,33 +494,27 @@ export function getArchitectByName(workspacePath, name) {
430
494
  * This three-valued return cleanly distinguishes "legacy builder" from
431
495
  * "non-builder sender." Used by the Phase 3 affinity-aware resolver.
432
496
  *
433
- * When `workspacePath` is supplied, opens a per-workspace readonly handle
434
- * directly — the right thing for Tower, which serves multiple workspaces
435
- * and cannot rely on the singleton `getDb()` (which is tied to the process's
436
- * startup CWD). When omitted, falls back to the singleton — convenient for
437
- * CLI callers that already ran inside one workspace. Mirrors the pattern in
438
- * `servers/overview.ts`.
497
+ * Issue #1118: builders now live in the single shared global.db, scoped by
498
+ * `workspace_path`. When `workspacePath` is supplied (Tower, serving multiple
499
+ * workspaces), the lookup is scoped `WHERE workspace_path = ? AND id = ?` — this
500
+ * is load-bearing, since the same builder id can exist in two workspaces and the
501
+ * spoofing check must resolve to the *correct* workspace's spawning architect.
502
+ * When omitted (a CLI caller already inside one workspace), it falls back to
503
+ * match by id alone.
439
504
  */
440
505
  export function lookupBuilderSpawningArchitect(builderId, workspacePath) {
506
+ const db = getDb();
507
+ let row;
441
508
  if (workspacePath) {
442
- const dbPath = path.join(workspacePath, '.agent-farm', 'state.db');
443
- if (!existsSync(dbPath))
444
- return undefined;
445
- const wsDb = new Database(dbPath, { readonly: true });
446
- try {
447
- const row = wsDb
448
- .prepare('SELECT spawned_by_architect FROM builders WHERE id = ?')
449
- .get(builderId);
450
- if (!row)
451
- return undefined;
452
- return row.spawned_by_architect;
453
- }
454
- finally {
455
- wsDb.close();
456
- }
509
+ row = db
510
+ .prepare('SELECT spawned_by_architect FROM builders WHERE workspace_path = ? AND id = ?')
511
+ .get(canonicalize(workspacePath), builderId);
512
+ }
513
+ else {
514
+ row = db
515
+ .prepare('SELECT spawned_by_architect FROM builders WHERE id = ?')
516
+ .get(builderId);
457
517
  }
458
- const db = getDb();
459
- const row = db.prepare('SELECT spawned_by_architect FROM builders WHERE id = ?').get(builderId);
460
518
  if (!row)
461
519
  return undefined;
462
520
  return row.spawned_by_architect;
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/agent-farm/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/agent-farm/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,gFAAgF;AAChF,6EAA6E;AAC7E,+EAA+E;AAC/E,kFAAkF;AAClF,OAAO,EAAE,sBAAsB,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEnF;;;;;;;;GAQG;AACH,SAAS,2BAA2B,CAAC,QAAgB;IACnD,yEAAyE;IACzE,8EAA8E;IAC9E,0DAA0D;IAC1D,MAAM,MAAM,GAAG,aAAa,CAAC;IAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,IAAY,CAAC;IACjB,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,SAAS,CAAC,aAAqB;IAC7C,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAEvC,sEAAsE;IACtE,kDAAkD;IAClD,EAAE;IACF,8DAA8D;IAC9D,kEAAkE;IAClE,EAAE;IACF,2EAA2E;IAC3E,4EAA4E;IAC5E,mDAAmD;IACnD,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAC9B,sFAAsF,CACvF,CAAC,GAAG,CAAC,EAAE,CAAkB,CAAC;IAC3B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAClE,yEAAyE;IACzE,2EAA2E;IAC3E,uBAAuB;IACvB,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAExC,8EAA8E;IAC9E,8EAA8E;IAC9E,2EAA2E;IAC3E,wBAAwB;IACxB,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAC5B,qEAAqE,CACtE,CAAC,GAAG,CAAC,EAAE,CAAgB,CAAC;IACzB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAErD,aAAa;IACb,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,EAAc,CAAC;IACzF,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAEjD,mBAAmB;IACnB,MAAM,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,EAAoB,CAAC;IAC3G,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEjE,OAAO;QACL,SAAS;QACT,UAAU;QACV,QAAQ;QACR,KAAK;QACL,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB,EAAE,SAAgC;IAClF,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAEvC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,OAAO,CAAC;;;KAGV,CAAC,CAAC,GAAG,CAAC;YACL,aAAa,EAAE,EAAE;YACjB,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,IAAI;YACxC,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI;SACvC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAqB,EAAE,IAAY,EAAE,SAAgC;IACtG,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAEvC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,EAAE,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACtF,OAAO;IACT,CAAC;IAED,EAAE,CAAC,OAAO,CAAC;;;GAGV,CAAC,CAAC,GAAG,CAAC;QACL,aAAa,EAAE,EAAE;QACjB,IAAI;QACJ,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,IAAI;QACxC,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI;KACvC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,aAAqB,EAAE,IAAY,EAAE,SAAwB;IACjG,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACvC,EAAE,CAAC,OAAO,CAAC,yEAAyE,CAAC;SAClF,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,2EAA2E;IAC3E,+EAA+E;IAC/E,MAAM,EAAE,GAAG,2BAA2B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEzD,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;GAqBV,CAAC,CAAC,GAAG,CAAC;QACL,aAAa,EAAE,EAAE;QACjB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;QAC1C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;QAC7E,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;QACtC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI;KACvD,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAU,EAAE,aAAsB;IAC9D,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,6EAA6E;IAC7E,0EAA0E;IAC1E,6EAA6E;IAC7E,IAAI,aAAa,EAAE,CAAC;QAClB,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9G,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EAAU,EAAE,aAAsB;IAC3D,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,IAAI,GAA0B,CAAC;IAC/B,IAAI,aAAa,EAAE,CAAC;QAClB,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC;aAC3E,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,EAAE,CAA0B,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,EAAE,CAA0B,CAAC;IAC3F,CAAC;IACD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,aAAsB;IAChD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,IAAI,IAAiB,CAAC;IACtB,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,qEAAqE,CAAC;aACrF,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,CAAgB,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAAiB,CAAC;IACvF,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAyB,EAAE,aAAsB;IACnF,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,IAAI,IAAiB,CAAC;IACtB,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,oFAAoF,CAAC;aACpG,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,MAAM,CAAgB,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,6DAA6D,CAAC,CAAC,GAAG,CAAC,MAAM,CAAgB,CAAC;IAC9G,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,IAAkB;IACxC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IAEnB,EAAE,CAAC,OAAO,CAAC;;;GAGV,CAAC,CAAC,GAAG,CAAC;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAkB;IAC3C,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,EAAU,EAAE,OAA8B;IACnE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAA4B,EAAE,EAAE,EAAE,CAAC;IAE/C,IAAI,YAAY,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IACjD,CAAC;IACD,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,EAAE,CAAC,OAAO,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,EAAc,CAAC;IACrF,OAAO,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,EAAU;IAChC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAuB,CAAC;IACzF,OAAO,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,UAAsB;IAClD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IAEnB,EAAE,CAAC,OAAO,CAAC;;;GAGV,CAAC,CAAC,GAAG,CAAC;QACL,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;QAClC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI;KACvC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,EAAoB,CAAC;IACjG,OAAO,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IAEnB,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAChC,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1C,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAAE,CAAC;QACzC,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC;QACtC,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,GAAG,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,KAAK,EAAE,CAAC;AACV,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAChD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACvC,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,aAAqB,EAAE,IAAY;IACjE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACvC,EAAE,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAChD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,GAAG,GAAG,EAAE;SACT,OAAO,CAAC,kEAAkE,CAAC;SAC3E,GAAG,CAAC,EAAE,CAA4B,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,qEAAqE;QACrE,yEAAyE;QACzE,GAAG,GAAG,EAAE;aACL,OAAO,CAAC,8EAA8E,CAAC;aACvF,GAAG,CAAC,EAAE,CAA4B,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC,CAAC,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,aAAqB;IACjD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,8DAA8D,CAAC;SACvE,GAAG,CAAC,EAAE,CAAkB,CAAC;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAqB,EAAE,IAAY;IACpE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CAAC,6DAA6D,CAAC;SACtE,GAAG,CAAC,EAAE,EAAE,IAAI,CAA4B,CAAC;IAC5C,OAAO,GAAG,CAAC,CAAC,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,8BAA8B,CAC5C,SAAiB,EACjB,aAAsB;IAEtB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,IAAI,GAAwD,CAAC;IAC7D,IAAI,aAAa,EAAE,CAAC;QAClB,GAAG,GAAG,EAAE;aACL,OAAO,CAAC,+EAA+E,CAAC;aACxF,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,SAAS,CAAwD,CAAC;IACxG,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,EAAE;aACL,OAAO,CAAC,wDAAwD,CAAC;aACjE,GAAG,CAAC,SAAS,CAAwD,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,OAAO,GAAG,CAAC,oBAAoB,CAAC;AAClC,CAAC;AAED,gCAAgC;AAChC,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -35,6 +35,7 @@ export interface ArchitectState {
35
35
  cmd: string;
36
36
  startedAt: string;
37
37
  terminalId?: string;
38
+ sessionId?: string;
38
39
  }
39
40
  export interface DashboardState {
40
41
  architect: ArchitectState | null;
@@ -208,6 +209,19 @@ export interface UserConfig {
208
209
  url: string;
209
210
  }>;
210
211
  };
212
+ /**
213
+ * Activity hooks: URL sinks the VSCode extension fires when an abstract event
214
+ * occurs (`window-focus`, `builder-active`). Integration-agnostic — the
215
+ * destination url (a deep link, a companion app, a webhook launcher) is yours.
216
+ * Like other array settings, a higher config layer REPLACES a lower one's list,
217
+ * so define them in a single layer: `~/.codev/config.json` for a personal hook
218
+ * across all repos, or `.codev/config.local.json` for a per-repo personal one.
219
+ */
220
+ activityHooks?: Array<{
221
+ on?: Array<'window-focus' | 'builder-active'>;
222
+ url?: string;
223
+ background?: boolean;
224
+ }>;
211
225
  }
212
226
  /**
213
227
  * Resolved shell commands (after processing config hierarchy)
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent-farm/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent-farm/types.ts"],"names":[],"mappings":"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"}
@@ -16,4 +16,16 @@ export declare function getClaudeProjectDir(absolutePath: string): string;
16
16
  export declare function findLatestSessionId(absolutePath: string, opts?: {
17
17
  homeDir?: string;
18
18
  }): string | null;
19
+ /**
20
+ * Verify that a stored session id still has a session file on disk for
21
+ * `absolutePath` (Issue #1145). Stored ids are minted by us and persisted
22
+ * keyed by workspace path, so existence is the meaningful check: a row can
23
+ * outlive its jsonl (`workspace stop` preserves rows; ~/.claude gets pruned
24
+ * independently), and resuming a deleted session bakes a broken `--resume`
25
+ * into a shellper restart loop (the #929 crash-loop class). A failed check
26
+ * degrades to a fresh spawn.
27
+ */
28
+ export declare function verifySessionOwnership(absolutePath: string, sessionId: string, opts?: {
29
+ homeDir?: string;
30
+ }): boolean;
19
31
  //# sourceMappingURL=claude-session-discovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-session-discovery.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/claude-session-discovery.ts"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1B,MAAM,GAAG,IAAI,CAwBf"}
1
+ {"version":3,"file":"claude-session-discovery.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/claude-session-discovery.ts"],"names":[],"mappings":"AAyBA;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEhE;AAWD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1B,MAAM,GAAG,IAAI,CAwBf;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1B,OAAO,CAeT"}
@@ -5,14 +5,18 @@
5
5
  // ~/.claude/projects/<encoded-cwd>/<session-uuid>.jsonl
6
6
  // where the encoding replaces both '/' and '.' in the absolute path with '-'.
7
7
  // We use the newest jsonl by mtime as a stand-in for "the last conversation
8
- // that ran in this directory" so reviving a dead builder (or architect) can
9
- // resume via `claude --resume <uuid>` without any spawn-time bookkeeping.
8
+ // that ran in this directory" so reviving a dead builder can resume via
9
+ // `claude --resume <uuid>` without any spawn-time bookkeeping.
10
10
  //
11
11
  // This is intentionally a heuristic — multiple jsonl files in the same
12
12
  // directory mean multiple past sessions, and we pick the most recent. For
13
- // builder worktrees that almost always means the right one; for shared cwds
14
- // the caller should be aware of the ambiguity.
13
+ // builder worktrees (Agent-Farm-managed paths, effectively private cwds) that
14
+ // almost always means the right one. Architect launch no longer uses discovery
15
+ // at all (Issue #1145): it resumes solely from the session id stored on the
16
+ // workspace-scoped architect row, after verifySessionOwnership (below)
17
+ // confirms the session still exists on disk.
15
18
  import { existsSync, readdirSync, statSync } from 'node:fs';
19
+ import { realpathSync } from 'node:fs';
16
20
  import { homedir } from 'node:os';
17
21
  import { join } from 'node:path';
18
22
  const JSONL_EXT = '.jsonl';
@@ -28,6 +32,15 @@ export function encodeClaudeProjectDir(absolutePath) {
28
32
  export function getClaudeProjectDir(absolutePath) {
29
33
  return join(homedir(), '.claude', 'projects', encodeClaudeProjectDir(absolutePath));
30
34
  }
35
+ /** Canonicalize a path for comparison; fall back to the input when realpath fails. */
36
+ function realpathOrSelf(p) {
37
+ try {
38
+ return realpathSync(p);
39
+ }
40
+ catch {
41
+ return p;
42
+ }
43
+ }
31
44
  /**
32
45
  * Return the session UUID of the most-recently-modified jsonl in the Claude
33
46
  * project dir for the given cwd, or null if none exists.
@@ -61,4 +74,29 @@ export function findLatestSessionId(absolutePath, opts) {
61
74
  return null;
62
75
  return bestName.slice(0, -JSONL_EXT.length);
63
76
  }
77
+ /**
78
+ * Verify that a stored session id still has a session file on disk for
79
+ * `absolutePath` (Issue #1145). Stored ids are minted by us and persisted
80
+ * keyed by workspace path, so existence is the meaningful check: a row can
81
+ * outlive its jsonl (`workspace stop` preserves rows; ~/.claude gets pruned
82
+ * independently), and resuming a deleted session bakes a broken `--resume`
83
+ * into a shellper restart loop (the #929 crash-loop class). A failed check
84
+ * degrades to a fresh spawn.
85
+ */
86
+ export function verifySessionOwnership(absolutePath, sessionId, opts) {
87
+ const home = opts?.homeDir ?? homedir();
88
+ // Claude keys the store dir by its process cwd, which the OS may report in
89
+ // physical (symlink-resolved) form — e.g. /tmp/ws vs /private/tmp/ws on
90
+ // macOS. Accept the session under either encoding of the same directory.
91
+ const candidateDirs = new Set([
92
+ encodeClaudeProjectDir(absolutePath),
93
+ encodeClaudeProjectDir(realpathOrSelf(absolutePath)),
94
+ ]);
95
+ for (const dir of candidateDirs) {
96
+ if (existsSync(join(home, '.claude', 'projects', dir, `${sessionId}${JSONL_EXT}`))) {
97
+ return true;
98
+ }
99
+ }
100
+ return false;
101
+ }
64
102
  //# sourceMappingURL=claude-session-discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-session-discovery.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/claude-session-discovery.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,+DAA+D;AAC/D,EAAE;AACF,kEAAkE;AAClE,0DAA0D;AAC1D,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAC1E,4EAA4E;AAC5E,+CAA+C;AAE/C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,SAAS,GAAG,QAAQ,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,YAAoB;IACzD,OAAO,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAAoB,EACpB,IAA2B;IAE3B,MAAM,IAAI,GAAG,IAAI,EAAE,OAAO,IAAI,OAAO,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAC;IACpF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,QAAQ,CAAC;IAE1B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,SAAS;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YACzC,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"claude-session-discovery.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/claude-session-discovery.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import type { Config, ResolvedCommands } from '../types.js';
5
5
  import { type HarnessProvider } from './harness.js';
6
- import type { ResolvedWorktreeConfig, WorktreeDevUrl } from '@cluesmith/codev-types';
6
+ import type { ResolvedWorktreeConfig, WorktreeDevUrl, ResolvedActivityHooks } from '@cluesmith/codev-types';
7
7
  export type { ResolvedWorktreeConfig, WorktreeDevUrl };
8
8
  /**
9
9
  * Check if we're in a git worktree and return the main repo root if so
@@ -33,11 +33,22 @@ export declare function getResolvedCommands(workspaceRoot?: string): ResolvedCom
33
33
  /**
34
34
  * Get the resolved harness provider for the architect shell.
35
35
  * Resolution: explicit architectHarness → auto-detect from architect command → default claude.
36
+ *
37
+ * The command auto-detect source is the *override-aware* resolved command
38
+ * (getResolvedCommands → cliOverrides / TOWER_ARCHITECT_CMD / config), not the
39
+ * raw config value. Without this, `--architect-cmd gemini` / `TOWER_ARCHITECT_CMD=gemini`
40
+ * with no matching harness config would launch gemini but resolve the claude
41
+ * harness, re-arming the #929 resume crash-loop (claude buildResume injecting
42
+ * `--resume <stale-claude-uuid>` into a non-claude command).
36
43
  */
37
44
  export declare function getArchitectHarness(workspaceRoot?: string): HarnessProvider;
38
45
  /**
39
46
  * Get the resolved harness provider for the builder shell.
40
47
  * Resolution: explicit builderHarness → auto-detect from builder command → default claude.
48
+ *
49
+ * Like getArchitectHarness, the command auto-detect source is the override-aware
50
+ * resolved command (so `--builder-cmd gemini` with no matching harness config
51
+ * resolves the gemini harness, not claude — see #929).
41
52
  */
42
53
  export declare function getBuilderHarness(workspaceRoot?: string): HarnessProvider;
43
54
  /**
@@ -47,6 +58,18 @@ export declare function getBuilderHarness(workspaceRoot?: string): HarnessProvid
47
58
  * commands, `afx dev` errors with a clear message pointing at the config).
48
59
  */
49
60
  export declare function getWorktreeConfig(workspaceRoot?: string): ResolvedWorktreeConfig;
61
+ /**
62
+ * Resolved `activityHooks` for a workspace.
63
+ *
64
+ * SECURITY: hooks EXECUTE (the VSCode extension opens their url), so they are
65
+ * resolved ONLY from the user's trusted personal config layers — `~/.codev/config.json`
66
+ * (global, across all repos) and `<root>/.codev/config.local.json` (per-engineer,
67
+ * gitignored) — and NEVER from the committed `.codev/config.json`, which a cloned repo
68
+ * controls (a committed hook would be a zero-click RCE). The project-local layer
69
+ * replaces the global one when present. Malformed entries (no url, or no valid `on`
70
+ * event) are dropped.
71
+ */
72
+ export declare function getActivityHooks(workspaceRoot?: string): ResolvedActivityHooks;
50
73
  /**
51
74
  * Build configuration for the current project
52
75
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAc,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIxE,OAAO,EAAkB,KAAK,eAAe,EAA4B,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAKrF,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,CAAC;AAevD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBlE;AAED;;;;;;;;;;GAUG;AACH,iBAAS,iBAAiB,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAuCnE;AA8GD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAE1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAY5E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,eAAe,CAS3E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,eAAe,CASzE;AAOD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAUhF;AAgBD;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAelC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrE;AAGD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,MAAM,EAAc,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIxE,OAAO,EAAkB,KAAK,eAAe,EAA4B,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,qBAAqB,EAA+B,MAAM,wBAAwB,CAAC;AAKzI,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,CAAC;AAevD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBlE;AAED;;;;;;;;;;GAUG;AACH,iBAAS,iBAAiB,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAuCnE;AA8GD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAE1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAa5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,eAAe,CAS3E;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,eAAe,CASzE;AAOD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAUhF;AAqBD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAW9E;AAgBD;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAelC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrE;AAGD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,CAAC"}