@cluesmith/codev 3.0.2 → 3.0.5

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 (121) hide show
  1. package/dist/agent-farm/cli.d.ts.map +1 -1
  2. package/dist/agent-farm/cli.js +44 -0
  3. package/dist/agent-farm/cli.js.map +1 -1
  4. package/dist/agent-farm/commands/attach.d.ts.map +1 -1
  5. package/dist/agent-farm/commands/attach.js +2 -117
  6. package/dist/agent-farm/commands/attach.js.map +1 -1
  7. package/dist/agent-farm/commands/dev.d.ts +20 -0
  8. package/dist/agent-farm/commands/dev.d.ts.map +1 -0
  9. package/dist/agent-farm/commands/dev.js +124 -0
  10. package/dist/agent-farm/commands/dev.js.map +1 -0
  11. package/dist/agent-farm/commands/setup.d.ts +27 -0
  12. package/dist/agent-farm/commands/setup.d.ts.map +1 -0
  13. package/dist/agent-farm/commands/setup.js +55 -0
  14. package/dist/agent-farm/commands/setup.js.map +1 -0
  15. package/dist/agent-farm/commands/spawn-worktree.d.ts +21 -2
  16. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  17. package/dist/agent-farm/commands/spawn-worktree.js +42 -4
  18. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  19. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  20. package/dist/agent-farm/commands/spawn.js +30 -15
  21. package/dist/agent-farm/commands/spawn.js.map +1 -1
  22. package/dist/agent-farm/commands/status.d.ts.map +1 -1
  23. package/dist/agent-farm/commands/status.js +4 -1
  24. package/dist/agent-farm/commands/status.js.map +1 -1
  25. package/dist/agent-farm/commands/stop.d.ts.map +1 -1
  26. package/dist/agent-farm/commands/stop.js +15 -8
  27. package/dist/agent-farm/commands/stop.js.map +1 -1
  28. package/dist/agent-farm/commands/workspace-add-architect.d.ts +18 -0
  29. package/dist/agent-farm/commands/workspace-add-architect.d.ts.map +1 -0
  30. package/dist/agent-farm/commands/workspace-add-architect.js +54 -0
  31. package/dist/agent-farm/commands/workspace-add-architect.js.map +1 -0
  32. package/dist/agent-farm/db/index.d.ts.map +1 -1
  33. package/dist/agent-farm/db/index.js +54 -1
  34. package/dist/agent-farm/db/index.js.map +1 -1
  35. package/dist/agent-farm/db/migrate.js +2 -2
  36. package/dist/agent-farm/db/migrate.js.map +1 -1
  37. package/dist/agent-farm/db/schema.d.ts +1 -1
  38. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  39. package/dist/agent-farm/db/schema.js +3 -2
  40. package/dist/agent-farm/db/schema.js.map +1 -1
  41. package/dist/agent-farm/db/types.d.ts +7 -2
  42. package/dist/agent-farm/db/types.d.ts.map +1 -1
  43. package/dist/agent-farm/db/types.js +2 -0
  44. package/dist/agent-farm/db/types.js.map +1 -1
  45. package/dist/agent-farm/lib/builder-lookup.d.ts +26 -0
  46. package/dist/agent-farm/lib/builder-lookup.d.ts.map +1 -0
  47. package/dist/agent-farm/lib/builder-lookup.js +103 -0
  48. package/dist/agent-farm/lib/builder-lookup.js.map +1 -0
  49. package/dist/agent-farm/servers/tower-instances.d.ts +20 -1
  50. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  51. package/dist/agent-farm/servers/tower-instances.js +260 -16
  52. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  53. package/dist/agent-farm/servers/tower-messages.d.ts +10 -1
  54. package/dist/agent-farm/servers/tower-messages.d.ts.map +1 -1
  55. package/dist/agent-farm/servers/tower-messages.js +137 -7
  56. package/dist/agent-farm/servers/tower-messages.js.map +1 -1
  57. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  58. package/dist/agent-farm/servers/tower-routes.js +97 -31
  59. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  60. package/dist/agent-farm/servers/tower-terminals.d.ts +17 -1
  61. package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
  62. package/dist/agent-farm/servers/tower-terminals.js +78 -29
  63. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  64. package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -1
  65. package/dist/agent-farm/servers/tower-tunnel.js +3 -2
  66. package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
  67. package/dist/agent-farm/servers/tower-types.d.ts +18 -6
  68. package/dist/agent-farm/servers/tower-types.d.ts.map +1 -1
  69. package/dist/agent-farm/state.d.ts +50 -4
  70. package/dist/agent-farm/state.d.ts.map +1 -1
  71. package/dist/agent-farm/state.js +118 -12
  72. package/dist/agent-farm/state.js.map +1 -1
  73. package/dist/agent-farm/types.d.ts +28 -0
  74. package/dist/agent-farm/types.d.ts.map +1 -1
  75. package/dist/agent-farm/utils/agent-names.d.ts +5 -30
  76. package/dist/agent-farm/utils/agent-names.d.ts.map +1 -1
  77. package/dist/agent-farm/utils/agent-names.js +5 -54
  78. package/dist/agent-farm/utils/agent-names.js.map +1 -1
  79. package/dist/agent-farm/utils/architect-name.d.ts +37 -0
  80. package/dist/agent-farm/utils/architect-name.d.ts.map +1 -0
  81. package/dist/agent-farm/utils/architect-name.js +63 -0
  82. package/dist/agent-farm/utils/architect-name.js.map +1 -0
  83. package/dist/agent-farm/utils/config.d.ts +19 -0
  84. package/dist/agent-farm/utils/config.d.ts.map +1 -1
  85. package/dist/agent-farm/utils/config.js +16 -0
  86. package/dist/agent-farm/utils/config.js.map +1 -1
  87. package/dist/agent-farm/utils/git.d.ts +29 -0
  88. package/dist/agent-farm/utils/git.d.ts.map +1 -0
  89. package/dist/agent-farm/utils/git.js +38 -0
  90. package/dist/agent-farm/utils/git.js.map +1 -0
  91. package/dist/agent-farm/utils/shell.d.ts +13 -0
  92. package/dist/agent-farm/utils/shell.d.ts.map +1 -1
  93. package/dist/agent-farm/utils/shell.js +28 -0
  94. package/dist/agent-farm/utils/shell.js.map +1 -1
  95. package/dist/commands/adopt.d.ts.map +1 -1
  96. package/dist/commands/adopt.js +5 -0
  97. package/dist/commands/adopt.js.map +1 -1
  98. package/dist/commands/consult/index.d.ts.map +1 -1
  99. package/dist/commands/consult/index.js +2 -0
  100. package/dist/commands/consult/index.js.map +1 -1
  101. package/dist/commands/init.d.ts.map +1 -1
  102. package/dist/commands/init.js +5 -0
  103. package/dist/commands/init.js.map +1 -1
  104. package/package.json +5 -5
  105. package/skeleton/protocols/air/builder-prompt.md +6 -0
  106. package/skeleton/protocols/air/consult-types/impl-review.md +6 -0
  107. package/skeleton/protocols/air/consult-types/pr-review.md +6 -0
  108. package/skeleton/protocols/air/prompts/implement.md +6 -0
  109. package/skeleton/protocols/air/protocol.md +4 -0
  110. package/skeleton/protocols/aspir/builder-prompt.md +19 -3
  111. package/skeleton/protocols/aspir/consult-types/plan-review.md +6 -0
  112. package/skeleton/protocols/aspir/consult-types/spec-review.md +6 -0
  113. package/skeleton/protocols/aspir/prompts/specify.md +6 -0
  114. package/skeleton/protocols/aspir/protocol.md +4 -0
  115. package/skeleton/protocols/bugfix/consult-types/impl-review.md +44 -37
  116. package/skeleton/protocols/bugfix/consult-types/pr-review.md +65 -40
  117. package/skeleton/protocols/spir/builder-prompt.md +19 -3
  118. package/skeleton/protocols/spir/consult-types/plan-review.md +6 -0
  119. package/skeleton/protocols/spir/consult-types/spec-review.md +6 -0
  120. package/skeleton/protocols/spir/prompts/specify.md +6 -0
  121. package/skeleton/protocols/spir/protocol.md +4 -0
@@ -4,17 +4,29 @@
4
4
  * Uses SQLite for ACID-compliant state persistence with proper concurrency handling.
5
5
  * All operations are synchronous and atomic.
6
6
  */
7
+ import path from 'node:path';
8
+ import { existsSync } from 'node:fs';
9
+ import Database from 'better-sqlite3';
7
10
  import { getDb, closeDb } from './db/index.js';
8
11
  import { dbArchitectToArchitectState, dbBuilderToBuilder, dbUtilToUtilTerminal, dbAnnotationToAnnotation, } from './db/types.js';
9
12
  import { isPortConflictError } from './db/errors.js';
10
13
  /**
11
14
  * Load complete state from database
12
- * Note: This is now synchronous
15
+ *
16
+ * Spec 755: `DashboardState.architect` remains a scalar shape in v1. We load
17
+ * the architect named 'main' if present, otherwise the first registered
18
+ * architect (alphabetical by name). The /api/state contract is preserved so
19
+ * the dashboard and VSCode extension see no shape change. Multi-architect UI
20
+ * is deferred to issue #2 — see plan codev/plans/755-*.md.
13
21
  */
14
22
  export function loadState() {
15
23
  const db = getDb();
16
- // Load architect (singleton)
17
- const architectRow = db.prepare('SELECT * FROM architect WHERE id = 1').get();
24
+ // Load architect (Spec 755: scalar shim — prefer 'main', else the
25
+ // first-registered architect, ordered by started_at, not lexicographic name).
26
+ let architectRow = db.prepare("SELECT * FROM architect WHERE id = 'main'").get();
27
+ if (!architectRow) {
28
+ architectRow = db.prepare('SELECT * FROM architect ORDER BY started_at LIMIT 1').get();
29
+ }
18
30
  const architect = architectRow ? dbArchitectToArchitectState(architectRow) : null;
19
31
  // Load builders
20
32
  const builderRows = db.prepare('SELECT * FROM builders ORDER BY started_at').all();
@@ -33,18 +45,23 @@ export function loadState() {
33
45
  };
34
46
  }
35
47
  /**
36
- * Update architect state
37
- * Note: This is now synchronous
48
+ * Update architect state (main-only setter — preserved for backward-compat with
49
+ * existing callers like `workspace start` / `stop`). Spec 755 added per-name
50
+ * setters/getters below.
51
+ *
52
+ * If `architect` is provided with a non-default `name`, callers should use
53
+ * `setArchitectByName(name, architect)` instead — this function always
54
+ * writes the row with id = 'main'.
38
55
  */
39
56
  export function setArchitect(architect) {
40
57
  const db = getDb();
41
58
  if (architect === null) {
42
- db.prepare('DELETE FROM architect WHERE id = 1').run();
59
+ db.prepare("DELETE FROM architect WHERE id = 'main'").run();
43
60
  }
44
61
  else {
45
62
  db.prepare(`
46
63
  INSERT OR REPLACE INTO architect (id, pid, port, cmd, started_at, terminal_id)
47
- VALUES (1, 0, 0, @cmd, @startedAt, @terminalId)
64
+ VALUES ('main', 0, 0, @cmd, @startedAt, @terminalId)
48
65
  `).run({
49
66
  cmd: architect.cmd,
50
67
  startedAt: architect.startedAt,
@@ -52,6 +69,27 @@ export function setArchitect(architect) {
52
69
  });
53
70
  }
54
71
  }
72
+ /**
73
+ * Update architect state by name (Spec 755). Used by the Phase 2 CLI for
74
+ * registering additional named architects. When `architect` is null, removes
75
+ * just that named architect; non-null upserts it.
76
+ */
77
+ export function setArchitectByName(name, architect) {
78
+ const db = getDb();
79
+ if (architect === null) {
80
+ db.prepare('DELETE FROM architect WHERE id = ?').run(name);
81
+ return;
82
+ }
83
+ db.prepare(`
84
+ INSERT OR REPLACE INTO architect (id, pid, port, cmd, started_at, terminal_id)
85
+ VALUES (@name, 0, 0, @cmd, @startedAt, @terminalId)
86
+ `).run({
87
+ name,
88
+ cmd: architect.cmd,
89
+ startedAt: architect.startedAt,
90
+ terminalId: architect.terminalId ?? null,
91
+ });
92
+ }
55
93
  /**
56
94
  * Add or update a builder
57
95
  * Note: This is now synchronous
@@ -61,11 +99,11 @@ export function upsertBuilder(builder) {
61
99
  db.prepare(`
62
100
  INSERT INTO builders (
63
101
  id, name, port, pid, status, phase, worktree, branch,
64
- type, task_text, protocol_name, issue_number, terminal_id
102
+ type, task_text, protocol_name, issue_number, terminal_id, spawned_by_architect
65
103
  )
66
104
  VALUES (
67
105
  @id, @name, 0, 0, @status, @phase, @worktree, @branch,
68
- @type, @taskText, @protocolName, @issueNumber, @terminalId
106
+ @type, @taskText, @protocolName, @issueNumber, @terminalId, @spawnedByArchitect
69
107
  )
70
108
  ON CONFLICT(id) DO UPDATE SET
71
109
  name = excluded.name,
@@ -77,7 +115,8 @@ export function upsertBuilder(builder) {
77
115
  task_text = excluded.task_text,
78
116
  protocol_name = excluded.protocol_name,
79
117
  issue_number = excluded.issue_number,
80
- terminal_id = excluded.terminal_id
118
+ terminal_id = excluded.terminal_id,
119
+ spawned_by_architect = COALESCE(excluded.spawned_by_architect, builders.spawned_by_architect)
81
120
  `).run({
82
121
  id: builder.id,
83
122
  name: builder.name,
@@ -90,6 +129,7 @@ export function upsertBuilder(builder) {
90
129
  protocolName: builder.protocolName ?? null,
91
130
  issueNumber: builder.issueNumber != null ? String(builder.issueNumber) : null,
92
131
  terminalId: builder.terminalId ?? null,
132
+ spawnedByArchitect: builder.spawnedByArchitect ?? null,
93
133
  });
94
134
  }
95
135
  /**
@@ -245,13 +285,79 @@ export function clearState() {
245
285
  clear();
246
286
  }
247
287
  /**
248
- * Get architect state
288
+ * Get architect state (main-only — Spec 755 scalar shim).
289
+ * Returns the architect named 'main' if present, otherwise the first
290
+ * registered architect by name. For multi-architect access, use
291
+ * `getArchitects()` or `getArchitectByName(name)` below.
249
292
  */
250
293
  export function getArchitect() {
251
294
  const db = getDb();
252
- const row = db.prepare('SELECT * FROM architect WHERE id = 1').get();
295
+ let row = db.prepare("SELECT * FROM architect WHERE id = 'main'").get();
296
+ if (!row) {
297
+ // Spec 755: when 'main' is absent, fall back to the first-registered
298
+ // architect (started_at ordering), not the lexicographically-first name.
299
+ row = db.prepare('SELECT * FROM architect ORDER BY started_at LIMIT 1').get();
300
+ }
301
+ return row ? dbArchitectToArchitectState(row) : null;
302
+ }
303
+ /**
304
+ * Get all architects (Spec 755).
305
+ */
306
+ export function getArchitects() {
307
+ const db = getDb();
308
+ const rows = db.prepare('SELECT * FROM architect ORDER BY id').all();
309
+ return rows.map(dbArchitectToArchitectState);
310
+ }
311
+ /**
312
+ * Get a single architect by name (Spec 755).
313
+ */
314
+ export function getArchitectByName(name) {
315
+ const db = getDb();
316
+ const row = db.prepare('SELECT * FROM architect WHERE id = ?').get(name);
253
317
  return row ? dbArchitectToArchitectState(row) : null;
254
318
  }
319
+ /**
320
+ * Look up a builder's spawning-architect name (Spec 755).
321
+ *
322
+ * Returns:
323
+ * - `string` — the recorded `spawned_by_architect` (builder context with explicit name)
324
+ * - `null` — a row exists for that builder ID but `spawned_by_architect` is NULL (legacy row)
325
+ * - `undefined` — no row exists for that ID (not a builder)
326
+ *
327
+ * This three-valued return cleanly distinguishes "legacy builder" from
328
+ * "non-builder sender." Used by the Phase 3 affinity-aware resolver.
329
+ *
330
+ * When `workspacePath` is supplied, opens a per-workspace readonly handle
331
+ * directly — the right thing for Tower, which serves multiple workspaces
332
+ * and cannot rely on the singleton `getDb()` (which is tied to the process's
333
+ * startup CWD). When omitted, falls back to the singleton — convenient for
334
+ * CLI callers that already ran inside one workspace. Mirrors the pattern in
335
+ * `servers/overview.ts`.
336
+ */
337
+ export function lookupBuilderSpawningArchitect(builderId, workspacePath) {
338
+ if (workspacePath) {
339
+ const dbPath = path.join(workspacePath, '.agent-farm', 'state.db');
340
+ if (!existsSync(dbPath))
341
+ return undefined;
342
+ const wsDb = new Database(dbPath, { readonly: true });
343
+ try {
344
+ const row = wsDb
345
+ .prepare('SELECT spawned_by_architect FROM builders WHERE id = ?')
346
+ .get(builderId);
347
+ if (!row)
348
+ return undefined;
349
+ return row.spawned_by_architect;
350
+ }
351
+ finally {
352
+ wsDb.close();
353
+ }
354
+ }
355
+ const db = getDb();
356
+ const row = db.prepare('SELECT spawned_by_architect FROM builders WHERE id = ?').get(builderId);
357
+ if (!row)
358
+ return undefined;
359
+ return row.spawned_by_architect;
360
+ }
255
361
  // Re-export closeDb for cleanup
256
362
  export { closeDb };
257
363
  //# sourceMappingURL=state.js.map
@@ -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":"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"}
@@ -14,6 +14,7 @@ export interface Builder {
14
14
  protocolName?: string;
15
15
  issueNumber?: number | string;
16
16
  terminalId?: string;
17
+ spawnedByArchitect?: string;
17
18
  }
18
19
  export interface UtilTerminal {
19
20
  id: string;
@@ -30,6 +31,7 @@ export interface Annotation {
30
31
  };
31
32
  }
32
33
  export interface ArchitectState {
34
+ name: string;
33
35
  cmd: string;
34
36
  startedAt: string;
35
37
  terminalId?: string;
@@ -147,6 +149,32 @@ export interface UserConfig {
147
149
  };
148
150
  /** Forge concept command overrides. Keys are concept names, values are command strings or null (disabled). */
149
151
  forge?: Record<string, string | null>;
152
+ /**
153
+ * Runnable worktree setup. Opt-in — when omitted, builders spawn with only
154
+ * the existing root `.env` + `.codev/config.json` symlinks (zero behavior change).
155
+ */
156
+ worktree?: {
157
+ /**
158
+ * Glob patterns of files to symlink from the workspace root into each new
159
+ * worktree. Resolved at spawn time relative to the workspace root.
160
+ * Example values: '.env.local', 'packages/<any>/.env', 'turbo.json'.
161
+ * Note: root `.env` and `.codev/config.json` are always symlinked regardless.
162
+ */
163
+ symlinks?: string[];
164
+ /**
165
+ * Shell commands to run inside each new worktree after `createWorktree`
166
+ * completes. Executed sequentially with cwd = worktree path. A non-zero
167
+ * exit aborts the spawn.
168
+ * Example: ['pnpm install --frozen-lockfile'].
169
+ */
170
+ postSpawn?: string[];
171
+ /**
172
+ * Command consumed by `afx dev <builder-id>` to start the worktree's dev
173
+ * server. Required for `afx dev` to work.
174
+ * Example: 'pnpm dev'.
175
+ */
176
+ devCommand?: string;
177
+ };
150
178
  }
151
179
  /**
152
180
  * 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":"AAAA;;GAEG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEzF,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,IAAI,GAAG,UAAU,CAAC;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;QACvC,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,MAAM;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAE3B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAG9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAGjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAGhB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IAGjB,MAAM,CAAC,EAAE,OAAO,CAAC;IAGjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;IAC3E,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE;QACZ,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE;QACN,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC3B,CAAC;IACF,iGAAiG;IACjG,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,kBAAkB,EAAE,MAAM,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACxC,CAAC,CAAC;IACH,SAAS,CAAC,EAAE;QACV,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,UAAU,CAAC;KACtB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;KAC/B,CAAC;IACF,8GAA8G;IAC9G,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,EAAE;QACT;;;;;WAKG;QACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB;;;;;WAKG;QACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB;;;;WAIG;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
@@ -8,19 +8,13 @@
8
8
  * Branch name: builder/{protocol}-{id}[-{slug}]
9
9
  *
10
10
  * All names are stored and compared in lowercase per spec.
11
- */
12
- import type { Builder, BuilderType } from '../types.js';
13
- /**
14
- * Strip leading zeros from a numeric ID string.
15
- * Non-numeric IDs are returned unchanged.
16
11
  *
17
- * Examples:
18
- * '0109' → '109'
19
- * '0001' → '1'
20
- * '0' → '0'
21
- * 'AbCd' → 'AbCd'
12
+ * `stripLeadingZeros` and `resolveAgentName` live in codev-core so the
13
+ * VS Code extension can use the same matching semantics; we re-export
14
+ * them here so existing agent-farm callsites are unaffected.
22
15
  */
23
- export declare function stripLeadingZeros(id: string): string;
16
+ import type { BuilderType } from '../types.js';
17
+ export { stripLeadingZeros, resolveAgentName } from '@cluesmith/codev-core/agent-names';
24
18
  /**
25
19
  * Build a canonical agent name from builder type and ID.
26
20
  * Returns lowercase with leading zeros stripped from numeric IDs.
@@ -63,23 +57,4 @@ export declare function parseAddress(target: string): {
63
57
  project?: string;
64
58
  agent: string;
65
59
  };
66
- /**
67
- * Resolve an agent name against a list of builders using case-insensitive
68
- * matching with tail-match fallback.
69
- *
70
- * Resolution order:
71
- * 1. Exact match (case-insensitive): 'builder-spir-109' matches 'builder-spir-109'
72
- * 2. Tail match: bare ID matches the trailing segment of builder-{protocol}-{id}.
73
- * E.g., '109' matches 'builder-spir-109' because the name ends with '-109'.
74
- * Leading zeros are stripped before comparison: '0109' → '109'.
75
- * Also handles partial names: 'bugfix-42' matches 'builder-bugfix-42'.
76
- * 3. Returns null if no match found or multiple ambiguous tail matches.
77
- *
78
- * @returns { builder, ambiguous? } — builder is the matched Builder or null.
79
- * If ambiguous, candidates are provided for error messaging.
80
- */
81
- export declare function resolveAgentName(target: string, builders: Builder[]): {
82
- builder: Builder | null;
83
- ambiguous?: Builder[];
84
- };
85
60
  //# sourceMappingURL=agent-names.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-names.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/agent-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBvF;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAShF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EAAE,GAClB;IAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,CAwBpD"}
1
+ {"version":3,"file":"agent-names.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/agent-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAGxF;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBvF;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAShF"}
@@ -8,23 +8,13 @@
8
8
  * Branch name: builder/{protocol}-{id}[-{slug}]
9
9
  *
10
10
  * All names are stored and compared in lowercase per spec.
11
- */
12
- /**
13
- * Strip leading zeros from a numeric ID string.
14
- * Non-numeric IDs are returned unchanged.
15
11
  *
16
- * Examples:
17
- * '0109' → '109'
18
- * '0001' → '1'
19
- * '0' → '0'
20
- * 'AbCd' → 'AbCd'
12
+ * `stripLeadingZeros` and `resolveAgentName` live in codev-core so the
13
+ * VS Code extension can use the same matching semantics; we re-export
14
+ * them here so existing agent-farm callsites are unaffected.
21
15
  */
22
- export function stripLeadingZeros(id) {
23
- if (/^\d+$/.test(id)) {
24
- return String(Number(id));
25
- }
26
- return id;
27
- }
16
+ export { stripLeadingZeros, resolveAgentName } from '@cluesmith/codev-core/agent-names';
17
+ import { stripLeadingZeros } from '@cluesmith/codev-core/agent-names';
28
18
  /**
29
19
  * Build a canonical agent name from builder type and ID.
30
20
  * Returns lowercase with leading zeros stripped from numeric IDs.
@@ -98,43 +88,4 @@ export function parseAddress(target) {
98
88
  }
99
89
  return { agent: target.toLowerCase() };
100
90
  }
101
- /**
102
- * Resolve an agent name against a list of builders using case-insensitive
103
- * matching with tail-match fallback.
104
- *
105
- * Resolution order:
106
- * 1. Exact match (case-insensitive): 'builder-spir-109' matches 'builder-spir-109'
107
- * 2. Tail match: bare ID matches the trailing segment of builder-{protocol}-{id}.
108
- * E.g., '109' matches 'builder-spir-109' because the name ends with '-109'.
109
- * Leading zeros are stripped before comparison: '0109' → '109'.
110
- * Also handles partial names: 'bugfix-42' matches 'builder-bugfix-42'.
111
- * 3. Returns null if no match found or multiple ambiguous tail matches.
112
- *
113
- * @returns { builder, ambiguous? } — builder is the matched Builder or null.
114
- * If ambiguous, candidates are provided for error messaging.
115
- */
116
- export function resolveAgentName(target, builders) {
117
- const originalTarget = target.toLowerCase();
118
- const strippedTarget = stripLeadingZeros(target).toLowerCase();
119
- // 1. Exact match (case-insensitive) — try original first, then stripped
120
- const exact = builders.find(b => {
121
- const id = b.id.toLowerCase();
122
- return id === originalTarget || id === strippedTarget;
123
- });
124
- if (exact)
125
- return { builder: exact };
126
- // 2. Tail match: check if any builder ID ends with -{strippedTarget}
127
- const tailMatches = builders.filter(b => {
128
- const builderId = b.id.toLowerCase();
129
- // Check if the builder ID ends with the target as a tail segment
130
- // e.g., builder-spir-109 ends with -109, -spir-109
131
- return builderId.endsWith(`-${strippedTarget}`);
132
- });
133
- if (tailMatches.length === 1)
134
- return { builder: tailMatches[0] };
135
- if (tailMatches.length > 1)
136
- return { builder: null, ambiguous: tailMatches };
137
- // 3. No match
138
- return { builder: null };
139
- }
140
91
  //# sourceMappingURL=agent-names.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-names.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/agent-names.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-names.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/agent-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,IAAiB,EAAE,EAAU,EAAE,QAAiB;IAC7E,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAEzC,iCAAiC;IACjC,IAAI,eAAuB,CAAC;IAC5B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,eAAe,GAAG,QAAQ,IAAI,MAAM,CAAC;YACrC,MAAM;QACR,KAAK,QAAQ;YACX,eAAe,GAAG,QAAQ,CAAC;YAC3B,MAAM;QACR,KAAK,MAAM;YACT,eAAe,GAAG,MAAM,CAAC;YACzB,MAAM;QACR,KAAK,UAAU;YACb,eAAe,GAAG,QAAQ,IAAI,UAAU,CAAC;YACzC,MAAM;QACR;YACE,qDAAqD;YACrD,OAAO,GAAG,IAAI,IAAI,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,CAAC;IAED,OAAO,WAAW,eAAe,IAAI,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC;AAClE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,WAAW,EAAE;YACtD,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;SACtD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Architect-name utilities (Spec 755).
3
+ *
4
+ * - validateArchitectName: enforces the [a-z][a-z0-9-]* rule with a 64-char cap.
5
+ * - autoNumberArchitectName: returns the next available `architect-<N>` name
6
+ * (smallest unused integer ≥ 2) given the set of already-registered names.
7
+ *
8
+ * Both functions are pure — they don't read process state or Tower; the caller
9
+ * is responsible for sourcing the existing-names set. Keeping them pure makes
10
+ * them trivially unit-testable.
11
+ */
12
+ export declare const ARCHITECT_NAME_PATTERN: RegExp;
13
+ export declare const MAX_ARCHITECT_NAME_LENGTH = 64;
14
+ /** Reserved default for the singleton case. */
15
+ export declare const DEFAULT_ARCHITECT_NAME = "main";
16
+ /**
17
+ * Validate an architect name. Returns `null` if valid, or a human-readable
18
+ * error message otherwise. Callers should treat a non-null return as "reject
19
+ * with this message" — the text is intentionally operator-facing.
20
+ */
21
+ export declare function validateArchitectName(name: string): string | null;
22
+ /**
23
+ * Compute the next auto-numbered architect name, given the set of names
24
+ * already in use. Uses "smallest unused integer ≥ 2" semantics:
25
+ *
26
+ * - {} → 'architect-2'
27
+ * - {'main'} → 'architect-2'
28
+ * - {'main', 'architect-2'} → 'architect-3'
29
+ * - {'main', 'architect-3'} → 'architect-2' (fills the gap)
30
+ * - {'main', 'architect-2', 'architect-3'} → 'architect-4'
31
+ * - {'main', 'sibling'} → 'architect-2' (custom names don't shift numbering)
32
+ *
33
+ * Custom names (anything not matching `architect-<N>` exactly) are ignored
34
+ * by the numbering loop — they're not part of the auto-numbered sequence.
35
+ */
36
+ export declare function autoNumberArchitectName(existingNames: Iterable<string>): string;
37
+ //# sourceMappingURL=architect-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architect-name.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/architect-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAC1D,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,+CAA+C;AAC/C,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAE7C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAc/E"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Architect-name utilities (Spec 755).
3
+ *
4
+ * - validateArchitectName: enforces the [a-z][a-z0-9-]* rule with a 64-char cap.
5
+ * - autoNumberArchitectName: returns the next available `architect-<N>` name
6
+ * (smallest unused integer ≥ 2) given the set of already-registered names.
7
+ *
8
+ * Both functions are pure — they don't read process state or Tower; the caller
9
+ * is responsible for sourcing the existing-names set. Keeping them pure makes
10
+ * them trivially unit-testable.
11
+ */
12
+ export const ARCHITECT_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
13
+ export const MAX_ARCHITECT_NAME_LENGTH = 64;
14
+ /** Reserved default for the singleton case. */
15
+ export const DEFAULT_ARCHITECT_NAME = 'main';
16
+ /**
17
+ * Validate an architect name. Returns `null` if valid, or a human-readable
18
+ * error message otherwise. Callers should treat a non-null return as "reject
19
+ * with this message" — the text is intentionally operator-facing.
20
+ */
21
+ export function validateArchitectName(name) {
22
+ if (!name) {
23
+ return 'Architect name cannot be empty.';
24
+ }
25
+ if (name.length > MAX_ARCHITECT_NAME_LENGTH) {
26
+ return `Architect name must be at most ${MAX_ARCHITECT_NAME_LENGTH} characters (got ${name.length}).`;
27
+ }
28
+ if (!ARCHITECT_NAME_PATTERN.test(name)) {
29
+ return `Architect name '${name}' is invalid. Names must match [a-z][a-z0-9-]* (lowercase letter, then lowercase letters / digits / dashes).`;
30
+ }
31
+ return null;
32
+ }
33
+ /**
34
+ * Compute the next auto-numbered architect name, given the set of names
35
+ * already in use. Uses "smallest unused integer ≥ 2" semantics:
36
+ *
37
+ * - {} → 'architect-2'
38
+ * - {'main'} → 'architect-2'
39
+ * - {'main', 'architect-2'} → 'architect-3'
40
+ * - {'main', 'architect-3'} → 'architect-2' (fills the gap)
41
+ * - {'main', 'architect-2', 'architect-3'} → 'architect-4'
42
+ * - {'main', 'sibling'} → 'architect-2' (custom names don't shift numbering)
43
+ *
44
+ * Custom names (anything not matching `architect-<N>` exactly) are ignored
45
+ * by the numbering loop — they're not part of the auto-numbered sequence.
46
+ */
47
+ export function autoNumberArchitectName(existingNames) {
48
+ const usedNumbers = new Set();
49
+ for (const name of existingNames) {
50
+ const match = /^architect-(\d+)$/.exec(name);
51
+ if (match) {
52
+ const n = Number.parseInt(match[1], 10);
53
+ if (Number.isFinite(n) && n >= 2) {
54
+ usedNumbers.add(n);
55
+ }
56
+ }
57
+ }
58
+ let n = 2;
59
+ while (usedNumbers.has(n))
60
+ n++;
61
+ return `architect-${n}`;
62
+ }
63
+ //# sourceMappingURL=architect-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architect-name.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/architect-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAC1D,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C,+CAA+C;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAE7C;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;QAC5C,OAAO,kCAAkC,yBAAyB,oBAAoB,IAAI,CAAC,MAAM,IAAI,CAAC;IACxG,CAAC;IACD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,mBAAmB,IAAI,8GAA8G,CAAC;IAC/I,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CAAC,aAA+B;IACrE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,CAAC,EAAE,CAAC;IAC/B,OAAO,aAAa,CAAC,EAAE,CAAC;AAC1B,CAAC"}
@@ -38,6 +38,25 @@ export declare function getArchitectHarness(workspaceRoot?: string): HarnessProv
38
38
  * Resolution: explicit builderHarness → auto-detect from builder command → default claude.
39
39
  */
40
40
  export declare function getBuilderHarness(workspaceRoot?: string): HarnessProvider;
41
+ /**
42
+ * Resolved view of the `worktree` config block with defaults applied.
43
+ * Unset fields collapse to empty / null so callers don't have to branch.
44
+ */
45
+ export interface ResolvedWorktreeConfig {
46
+ /** Glob patterns to symlink from workspace root into each worktree. `[]` when unset. */
47
+ symlinks: string[];
48
+ /** Shell commands to run in each worktree after creation. `[]` when unset. */
49
+ postSpawn: string[];
50
+ /** Command for `afx dev <builder-id>`. `null` when unset. */
51
+ devCommand: string | null;
52
+ }
53
+ /**
54
+ * Load the `worktree` block from .codev/config.json, applying defaults.
55
+ * Unconfigured repos get `{ symlinks: [], postSpawn: [], devCommand: null }`
56
+ * — equivalent to the pre-#689 behavior (no glob symlinks, no post-spawn
57
+ * commands, `afx dev` errors with a clear message pointing at the config).
58
+ */
59
+ export declare function getWorktreeConfig(workspaceRoot?: string): ResolvedWorktreeConfig;
41
60
  /**
42
61
  * Build configuration for the current project
43
62
  */
@@ -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;AAe9F;;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;AAED;;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;AAMH,OAAO,KAAK,EAAE,MAAM,EAAc,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIxE,OAAO,EAAkB,KAAK,eAAe,EAA4B,MAAM,cAAc,CAAC;AAe9F;;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;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,wFAAwF;IACxF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAShF;AAED;;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"}
@@ -227,6 +227,22 @@ export function getBuilderHarness(workspaceRoot) {
227
227
  const builderCmd = resolveCommand(userConfig?.shell?.builder, DEFAULT_COMMANDS.builder);
228
228
  return resolveHarness(userConfig?.shell?.builderHarness, userConfig?.harness, builderCmd);
229
229
  }
230
+ /**
231
+ * Load the `worktree` block from .codev/config.json, applying defaults.
232
+ * Unconfigured repos get `{ symlinks: [], postSpawn: [], devCommand: null }`
233
+ * — equivalent to the pre-#689 behavior (no glob symlinks, no post-spawn
234
+ * commands, `afx dev` errors with a clear message pointing at the config).
235
+ */
236
+ export function getWorktreeConfig(workspaceRoot) {
237
+ const root = workspaceRoot || findWorkspaceRoot();
238
+ const userConfig = loadUserConfig(root);
239
+ const w = userConfig?.worktree;
240
+ return {
241
+ symlinks: w?.symlinks ?? [],
242
+ postSpawn: w?.postSpawn ?? [],
243
+ devCommand: w?.devCommand ?? null,
244
+ };
245
+ }
230
246
  /**
231
247
  * Build configuration for the current project
232
248
  */