@cluesmith/codev 3.3.5 → 3.3.7

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 (247) hide show
  1. package/dashboard-dist/assets/{index-r3bZzLmX.css → index-BjcqV9Vv.css} +1 -1
  2. package/dashboard-dist/assets/{index-BuflRUi6.js → index-b7GnZV2i.js} +55 -55
  3. package/dashboard-dist/assets/index-b7GnZV2i.js.map +1 -0
  4. package/dashboard-dist/index.html +2 -2
  5. package/dist/agent-farm/cli.d.ts.map +1 -1
  6. package/dist/agent-farm/cli.js +50 -17
  7. package/dist/agent-farm/cli.js.map +1 -1
  8. package/dist/agent-farm/commands/architect.d.ts.map +1 -1
  9. package/dist/agent-farm/commands/architect.js +5 -1
  10. package/dist/agent-farm/commands/architect.js.map +1 -1
  11. package/dist/agent-farm/commands/attach.d.ts +1 -1
  12. package/dist/agent-farm/commands/attach.d.ts.map +1 -1
  13. package/dist/agent-farm/commands/cleanup.d.ts +1 -1
  14. package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
  15. package/dist/agent-farm/commands/cleanup.js +2 -1
  16. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  17. package/dist/agent-farm/commands/decisions.d.ts +25 -0
  18. package/dist/agent-farm/commands/decisions.d.ts.map +1 -0
  19. package/dist/agent-farm/commands/decisions.js +54 -0
  20. package/dist/agent-farm/commands/decisions.js.map +1 -0
  21. package/dist/agent-farm/commands/ide.d.ts +32 -3
  22. package/dist/agent-farm/commands/ide.d.ts.map +1 -1
  23. package/dist/agent-farm/commands/ide.js +180 -19
  24. package/dist/agent-farm/commands/ide.js.map +1 -1
  25. package/dist/agent-farm/commands/reset/context.d.ts +4 -2
  26. package/dist/agent-farm/commands/reset/context.d.ts.map +1 -1
  27. package/dist/agent-farm/commands/reset/context.js +12 -4
  28. package/dist/agent-farm/commands/reset/context.js.map +1 -1
  29. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  30. package/dist/agent-farm/commands/send.js +13 -18
  31. package/dist/agent-farm/commands/send.js.map +1 -1
  32. package/dist/agent-farm/commands/spawn-worktree.d.ts +7 -0
  33. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  34. package/dist/agent-farm/commands/spawn-worktree.js +51 -18
  35. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  36. package/dist/agent-farm/commands/spawn.d.ts +17 -0
  37. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  38. package/dist/agent-farm/commands/spawn.js +41 -19
  39. package/dist/agent-farm/commands/spawn.js.map +1 -1
  40. package/dist/agent-farm/lib/builder-lookup.d.ts +3 -2
  41. package/dist/agent-farm/lib/builder-lookup.d.ts.map +1 -1
  42. package/dist/agent-farm/lib/builder-lookup.js +24 -9
  43. package/dist/agent-farm/lib/builder-lookup.js.map +1 -1
  44. package/dist/agent-farm/lib/ide-extensions.d.ts +82 -0
  45. package/dist/agent-farm/lib/ide-extensions.d.ts.map +1 -0
  46. package/dist/agent-farm/lib/ide-extensions.js +179 -0
  47. package/dist/agent-farm/lib/ide-extensions.js.map +1 -0
  48. package/dist/agent-farm/lib/ide-prefix.d.ts +10 -0
  49. package/dist/agent-farm/lib/ide-prefix.d.ts.map +1 -0
  50. package/dist/agent-farm/lib/ide-prefix.js +13 -0
  51. package/dist/agent-farm/lib/ide-prefix.js.map +1 -0
  52. package/dist/agent-farm/lib/ide-record.d.ts +20 -3
  53. package/dist/agent-farm/lib/ide-record.d.ts.map +1 -1
  54. package/dist/agent-farm/lib/ide-record.js +34 -3
  55. package/dist/agent-farm/lib/ide-record.js.map +1 -1
  56. package/dist/agent-farm/lib/ide-version.d.ts +97 -0
  57. package/dist/agent-farm/lib/ide-version.d.ts.map +1 -0
  58. package/dist/agent-farm/lib/ide-version.js +224 -0
  59. package/dist/agent-farm/lib/ide-version.js.map +1 -0
  60. package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
  61. package/dist/agent-farm/lib/tunnel-client.js +7 -3
  62. package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
  63. package/dist/agent-farm/servers/agent-state/broadcast.d.ts +19 -0
  64. package/dist/agent-farm/servers/agent-state/broadcast.d.ts.map +1 -0
  65. package/dist/agent-farm/servers/agent-state/broadcast.js +30 -0
  66. package/dist/agent-farm/servers/agent-state/broadcast.js.map +1 -0
  67. package/dist/agent-farm/servers/agent-state/identity.d.ts +50 -0
  68. package/dist/agent-farm/servers/agent-state/identity.d.ts.map +1 -0
  69. package/dist/agent-farm/servers/agent-state/identity.js +120 -0
  70. package/dist/agent-farm/servers/agent-state/identity.js.map +1 -0
  71. package/dist/agent-farm/servers/agent-state/liveness.d.ts +107 -0
  72. package/dist/agent-farm/servers/agent-state/liveness.d.ts.map +1 -0
  73. package/dist/agent-farm/servers/agent-state/liveness.js +224 -0
  74. package/dist/agent-farm/servers/agent-state/liveness.js.map +1 -0
  75. package/dist/agent-farm/servers/agent-state/route.d.ts +38 -0
  76. package/dist/agent-farm/servers/agent-state/route.d.ts.map +1 -0
  77. package/dist/agent-farm/servers/agent-state/route.js +170 -0
  78. package/dist/agent-farm/servers/agent-state/route.js.map +1 -0
  79. package/dist/agent-farm/servers/agent-state/serve.d.ts +31 -0
  80. package/dist/agent-farm/servers/agent-state/serve.d.ts.map +1 -0
  81. package/dist/agent-farm/servers/agent-state/serve.js +49 -0
  82. package/dist/agent-farm/servers/agent-state/serve.js.map +1 -0
  83. package/dist/agent-farm/servers/agent-state/store.d.ts +76 -0
  84. package/dist/agent-farm/servers/agent-state/store.d.ts.map +1 -0
  85. package/dist/agent-farm/servers/agent-state/store.js +157 -0
  86. package/dist/agent-farm/servers/agent-state/store.js.map +1 -0
  87. package/dist/agent-farm/servers/decisions/parse.d.ts.map +1 -1
  88. package/dist/agent-farm/servers/decisions/parse.js +45 -15
  89. package/dist/agent-farm/servers/decisions/parse.js.map +1 -1
  90. package/dist/agent-farm/servers/decisions/stamp.d.ts +6 -2
  91. package/dist/agent-farm/servers/decisions/stamp.d.ts.map +1 -1
  92. package/dist/agent-farm/servers/decisions/stamp.js +53 -29
  93. package/dist/agent-farm/servers/decisions/stamp.js.map +1 -1
  94. package/dist/agent-farm/servers/decisions/template.d.ts +2 -0
  95. package/dist/agent-farm/servers/decisions/template.d.ts.map +1 -0
  96. package/dist/agent-farm/servers/decisions/template.js +15 -0
  97. package/dist/agent-farm/servers/decisions/template.js.map +1 -0
  98. package/dist/agent-farm/servers/ide-forward.d.ts +57 -5
  99. package/dist/agent-farm/servers/ide-forward.d.ts.map +1 -1
  100. package/dist/agent-farm/servers/ide-forward.js +263 -31
  101. package/dist/agent-farm/servers/ide-forward.js.map +1 -1
  102. package/dist/agent-farm/servers/ide-server.d.ts +28 -8
  103. package/dist/agent-farm/servers/ide-server.d.ts.map +1 -1
  104. package/dist/agent-farm/servers/ide-server.js +151 -52
  105. package/dist/agent-farm/servers/ide-server.js.map +1 -1
  106. package/dist/agent-farm/servers/overview.d.ts +27 -1
  107. package/dist/agent-farm/servers/overview.d.ts.map +1 -1
  108. package/dist/agent-farm/servers/overview.js +184 -31
  109. package/dist/agent-farm/servers/overview.js.map +1 -1
  110. package/dist/agent-farm/servers/tower-instances.d.ts +14 -1
  111. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  112. package/dist/agent-farm/servers/tower-instances.js +51 -9
  113. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  114. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  115. package/dist/agent-farm/servers/tower-routes.js +149 -15
  116. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  117. package/dist/agent-farm/servers/tower-server.js +35 -1
  118. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  119. package/dist/agent-farm/servers/tower-terminals.d.ts +25 -0
  120. package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
  121. package/dist/agent-farm/servers/tower-terminals.js +128 -4
  122. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  123. package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
  124. package/dist/agent-farm/servers/tower-utils.js +18 -5
  125. package/dist/agent-farm/servers/tower-utils.js.map +1 -1
  126. package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
  127. package/dist/agent-farm/servers/tower-websocket.js +11 -7
  128. package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
  129. package/dist/agent-farm/utils/builder-worktree-identity.d.ts +39 -0
  130. package/dist/agent-farm/utils/builder-worktree-identity.d.ts.map +1 -0
  131. package/dist/agent-farm/utils/builder-worktree-identity.js +42 -0
  132. package/dist/agent-farm/utils/builder-worktree-identity.js.map +1 -0
  133. package/dist/agent-farm/utils/harness.d.ts +71 -0
  134. package/dist/agent-farm/utils/harness.d.ts.map +1 -1
  135. package/dist/agent-farm/utils/harness.js +153 -0
  136. package/dist/agent-farm/utils/harness.js.map +1 -1
  137. package/dist/agent-farm/utils/lifecycle-reporter.d.ts +79 -0
  138. package/dist/agent-farm/utils/lifecycle-reporter.d.ts.map +1 -0
  139. package/dist/agent-farm/utils/lifecycle-reporter.js +347 -0
  140. package/dist/agent-farm/utils/lifecycle-reporter.js.map +1 -0
  141. package/dist/agent-farm/utils/server-utils.d.ts +54 -19
  142. package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
  143. package/dist/agent-farm/utils/server-utils.js +144 -27
  144. package/dist/agent-farm/utils/server-utils.js.map +1 -1
  145. package/dist/cli.d.ts.map +1 -1
  146. package/dist/cli.js +17 -0
  147. package/dist/cli.js.map +1 -1
  148. package/dist/commands/adopt.d.ts +16 -2
  149. package/dist/commands/adopt.d.ts.map +1 -1
  150. package/dist/commands/adopt.js +67 -23
  151. package/dist/commands/adopt.js.map +1 -1
  152. package/dist/commands/bootstrap-docs.d.ts +132 -0
  153. package/dist/commands/bootstrap-docs.d.ts.map +1 -0
  154. package/dist/commands/bootstrap-docs.js +725 -0
  155. package/dist/commands/bootstrap-docs.js.map +1 -0
  156. package/dist/commands/consult/index.d.ts.map +1 -1
  157. package/dist/commands/consult/index.js +14 -1
  158. package/dist/commands/consult/index.js.map +1 -1
  159. package/dist/commands/consult/tree-tripwire.d.ts +2 -75
  160. package/dist/commands/consult/tree-tripwire.d.ts.map +1 -1
  161. package/dist/commands/consult/tree-tripwire.js +7 -184
  162. package/dist/commands/consult/tree-tripwire.js.map +1 -1
  163. package/dist/commands/doctor.d.ts.map +1 -1
  164. package/dist/commands/doctor.js +36 -4
  165. package/dist/commands/doctor.js.map +1 -1
  166. package/dist/commands/porch/state.d.ts +0 -4
  167. package/dist/commands/porch/state.d.ts.map +1 -1
  168. package/dist/commands/porch/state.js +23 -10
  169. package/dist/commands/porch/state.js.map +1 -1
  170. package/dist/commands/update.d.ts +5 -1
  171. package/dist/commands/update.d.ts.map +1 -1
  172. package/dist/commands/update.js +73 -18
  173. package/dist/commands/update.js.map +1 -1
  174. package/dist/lib/agent-env.d.ts +22 -1
  175. package/dist/lib/agent-env.d.ts.map +1 -1
  176. package/dist/lib/agent-env.js +27 -1
  177. package/dist/lib/agent-env.js.map +1 -1
  178. package/dist/lib/agent-process.d.ts +23 -0
  179. package/dist/lib/agent-process.d.ts.map +1 -0
  180. package/dist/lib/agent-process.js +24 -0
  181. package/dist/lib/agent-process.js.map +1 -0
  182. package/dist/lib/forge-contracts.d.ts +9 -3
  183. package/dist/lib/forge-contracts.d.ts.map +1 -1
  184. package/dist/lib/forge-contracts.js.map +1 -1
  185. package/dist/lib/forge.d.ts +8 -5
  186. package/dist/lib/forge.d.ts.map +1 -1
  187. package/dist/lib/forge.js +57 -1
  188. package/dist/lib/forge.js.map +1 -1
  189. package/dist/lib/github.d.ts.map +1 -1
  190. package/dist/lib/github.js +38 -0
  191. package/dist/lib/github.js.map +1 -1
  192. package/dist/lib/governance-bootstrap.d.ts +155 -0
  193. package/dist/lib/governance-bootstrap.d.ts.map +1 -0
  194. package/dist/lib/governance-bootstrap.js +469 -0
  195. package/dist/lib/governance-bootstrap.js.map +1 -0
  196. package/dist/lib/issue-id.d.ts +34 -0
  197. package/dist/lib/issue-id.d.ts.map +1 -0
  198. package/dist/lib/issue-id.js +61 -0
  199. package/dist/lib/issue-id.js.map +1 -0
  200. package/dist/lib/scaffold.d.ts +4 -0
  201. package/dist/lib/scaffold.d.ts.map +1 -1
  202. package/dist/lib/scaffold.js +29 -5
  203. package/dist/lib/scaffold.js.map +1 -1
  204. package/dist/lib/shipped-skill-hashes.d.ts +10 -0
  205. package/dist/lib/shipped-skill-hashes.d.ts.map +1 -0
  206. package/dist/lib/shipped-skill-hashes.js +197 -0
  207. package/dist/lib/shipped-skill-hashes.js.map +1 -0
  208. package/dist/lib/skill-refresh.d.ts +90 -0
  209. package/dist/lib/skill-refresh.d.ts.map +1 -0
  210. package/dist/lib/skill-refresh.js +267 -0
  211. package/dist/lib/skill-refresh.js.map +1 -0
  212. package/dist/lib/tree-snapshot.d.ts +172 -0
  213. package/dist/lib/tree-snapshot.d.ts.map +1 -0
  214. package/dist/lib/tree-snapshot.js +393 -0
  215. package/dist/lib/tree-snapshot.js.map +1 -0
  216. package/dist/terminal/pty-session.d.ts +5 -0
  217. package/dist/terminal/pty-session.d.ts.map +1 -1
  218. package/dist/terminal/pty-session.js +7 -0
  219. package/dist/terminal/pty-session.js.map +1 -1
  220. package/ide-extension/codev-vscode.vsix +0 -0
  221. package/ide-extension/manifest.json +7 -0
  222. package/package.json +8 -6
  223. package/scripts/forge/jira/_lib.sh +113 -0
  224. package/scripts/forge/jira/auth-status.sh +29 -0
  225. package/scripts/forge/jira/issue-comment.sh +23 -0
  226. package/scripts/forge/jira/issue-list.sh +32 -0
  227. package/scripts/forge/jira/issue-search.sh +40 -0
  228. package/scripts/forge/jira/issue-view.sh +41 -0
  229. package/scripts/forge/jira/recently-closed.sh +81 -0
  230. package/scripts/forge/jira/user-identity.sh +18 -0
  231. package/skeleton/.claude/skills/afx/SKILL.md +36 -0
  232. package/skeleton/.claude/skills/codev/SKILL.md +18 -2
  233. package/skeleton/.claude/skills/update-arch-docs/SKILL.md +28 -2
  234. package/skeleton/.codex/skills/afx/SKILL.md +36 -0
  235. package/skeleton/.codex/skills/codev/SKILL.md +18 -2
  236. package/skeleton/.codex/skills/update-arch-docs/SKILL.md +28 -2
  237. package/skeleton/resources/commands/agent-farm.md +139 -0
  238. package/skeleton/resources/commands/codev.md +47 -0
  239. package/skeleton/resources/commands/overview.md +1 -0
  240. package/skeleton/resources/decision-protocol.md +215 -0
  241. package/skeleton/resources/workflow-reference.md +12 -0
  242. package/skeleton/roles/architect.md +6 -0
  243. package/skeleton/templates/bootstrap-docs-prompt.md +16 -0
  244. package/skeleton/templates/bootstrap-docs-review-prompt.md +19 -0
  245. package/skeleton/templates/cheatsheet.md +1 -0
  246. package/templates/tower.html +78 -3
  247. package/dashboard-dist/assets/index-BuflRUi6.js.map +0 -1
@@ -7,16 +7,23 @@
7
7
  * Runtime state lives in the `~/.agent-farm/ide-server.json` record (Issue
8
8
  * #1668 §D3) — no config file, no `global.db` change. Liveness is discovered by
9
9
  * port (`getProcessesOnPort`), the same way Tower finds its own process.
10
+ *
11
+ * Every spawn runs a preflight first (Spec 1789): the server version floor and
12
+ * the embedded sidebar install into the Tower-owned extensions directory. The
13
+ * preflight throws before anything is stopped, replaced or recorded, so a
14
+ * refused start leaves a live server and its record untouched. Lifecycle
15
+ * operations are serialized by `withIdeLock`, taken only at the entry points
16
+ * (`spawnIdeServer`, `stopIdeServer`, the respawn in `ensureIdeServerLive`);
17
+ * the unlocked bodies call each other freely, so the nesting cannot deadlock.
10
18
  */
11
19
  import { spawn } from 'node:child_process';
12
20
  import { existsSync } from 'node:fs';
13
21
  import { getProcessesOnPort } from '../utils/port.js';
14
- import { sanitizeAgentEnv } from '../../lib/agent-env.js';
15
22
  import { parseJsonBody } from '../utils/server-utils.js';
16
- import { IDE_DEFAULT_PREFIX, IDE_DEFAULT_PORT, readIdeRecord, writeIdeRecord, deleteIdeRecord, ensureIdeConnectionToken, getIdeConnectionTokenPath, } from '../lib/ide-record.js';
17
- const READY_TIMEOUT_MS = 15_000;
23
+ import { IDE_DEFAULT_PREFIX, IDE_DEFAULT_PORT, readIdeRecord, writeIdeRecord, deleteIdeRecord, rotateIdeConnectionToken, getIdeConnectionTokenPath, } from '../lib/ide-record.js';
24
+ import { IDE_READY_TIMEOUT_MS, IDE_STOP_EXIT_TIMEOUT_MS, buildIdeServerEnv, checkIdeServerVersion, } from '../lib/ide-version.js';
25
+ import { ensureSidebarInstalled, getIdeExtensionsDir } from '../lib/ide-extensions.js';
18
26
  const READY_POLL_MS = 200;
19
- const STOP_EXIT_TIMEOUT_MS = 5_000;
20
27
  const STOP_POLL_MS = 200;
21
28
  /**
22
29
  * True if some process is listening on the port. Uses `lsof` (`getProcessesOnPort`),
@@ -57,12 +64,43 @@ async function waitForPort(port, timeoutMs) {
57
64
  }
58
65
  return isPortLive(port);
59
66
  }
67
+ /**
68
+ * Tail of the lifecycle lock: a non-reentrant promise chain. Taken only at the
69
+ * entry points, never inside the unlocked bodies.
70
+ */
71
+ let ideLockTail = Promise.resolve();
72
+ function withIdeLock(fn) {
73
+ const run = ideLockTail.then(fn);
74
+ ideLockTail = run.catch(() => { });
75
+ return run;
76
+ }
77
+ /**
78
+ * Version floor, then the sidebar install (which validates or creates the
79
+ * extensions directory first). Throws before any side effect on the server or
80
+ * the record. A missing embedded sidebar only warns: the server still gets
81
+ * `--extensions-dir`.
82
+ */
83
+ async function runIdePreflight(serverPath, log) {
84
+ const { version } = await checkIdeServerVersion(serverPath);
85
+ const extensionsDir = getIdeExtensionsDir();
86
+ const sidebar = await ensureSidebarInstalled(serverPath, { extensionsDir, log });
87
+ return {
88
+ serverVersion: version,
89
+ extensionsDir,
90
+ sidebarVersion: sidebar.version,
91
+ sidebarChanged: sidebar.outcome === 'installed',
92
+ };
93
+ }
60
94
  /**
61
95
  * Spawn the IDE server detached (so it survives a Tower restart, like a
62
- * shellper) and write the runtime record. Resolves to the record once the
63
- * server is listening, or throws if the binary is missing or never binds.
96
+ * shellper) and write the runtime record. Resolves once the server is
97
+ * listening, or throws if the binary is missing, fails the preflight, or never
98
+ * binds. Serialized with every other lifecycle operation.
64
99
  */
65
- export async function spawnIdeServer(opts, log) {
100
+ export function spawnIdeServer(opts, log) {
101
+ return withIdeLock(() => spawnIdeServerUnlocked(opts, log));
102
+ }
103
+ async function spawnIdeServerUnlocked(opts, log) {
66
104
  const port = opts.port ?? IDE_DEFAULT_PORT;
67
105
  if (!opts.serverPath) {
68
106
  throw new Error('IDE server path is required (no default — set --server-path)');
@@ -70,46 +108,38 @@ export async function spawnIdeServer(opts, log) {
70
108
  if (!existsSync(opts.serverPath)) {
71
109
  throw new Error(`IDE server binary not found at ${opts.serverPath}`);
72
110
  }
111
+ // Before anything is stopped or replaced: a refused server or a failed
112
+ // install must leave the current server and its record exactly as they are.
113
+ const preflight = await runIdePreflight(opts.serverPath, log);
73
114
  // Start-collision: a prior server recorded on a DIFFERENT port would be orphaned
74
115
  // (still running, no longer tracked) if we just overwrote the singleton record.
75
116
  // Stop it first so "start on a new port" never leaves a detached stray (#1668).
76
117
  const existing = readIdeRecord();
77
118
  if (existing && existing.port !== port && isPortLive(existing.port)) {
78
119
  log('WARN', `IDE server already recorded on port ${existing.port}; stopping it before starting on ${port}`);
79
- await stopIdeServer(log);
120
+ await stopIdeServerUnlocked(log);
80
121
  }
81
- // Already live on the port — idempotent: adopt and record, don't double-spawn.
122
+ // Already live on the port: idempotent, adopt and record, never kill or double-spawn.
82
123
  if (isPortLive(port)) {
83
- log('INFO', `IDE server already listening on port ${port}; adopting`);
84
- const pid = getProcessesOnPort(port)[0] ?? 0;
85
- const record = {
86
- prefix: IDE_DEFAULT_PREFIX,
87
- port,
88
- serverPath: opts.serverPath,
89
- pid,
90
- defaultFolder: opts.defaultFolder,
91
- startedAt: new Date().toISOString(),
92
- };
93
- writeIdeRecord(record);
94
- return record;
124
+ return adoptLiveIdeServer(opts, port, existing, preflight, log);
95
125
  }
96
126
  const basePath = IDE_DEFAULT_PREFIX.replace(/\/$/, ''); // "/ide"
97
127
  const tokenFile = getIdeConnectionTokenPath();
98
- ensureIdeConnectionToken();
128
+ // Fresh token per spawn (Issue #1869): bounds any leaked copy to this
129
+ // server's uptime. The adopt path above keeps the live server's token.
130
+ rotateIdeConnectionToken();
99
131
  const args = [
100
132
  '--host', '127.0.0.1',
101
133
  '--port', String(port),
102
134
  '--server-base-path', basePath,
103
135
  '--connection-token-file', tokenFile,
136
+ '--extensions-dir', preflight.extensionsDir,
104
137
  '--accept-server-license-terms',
105
138
  ];
106
- if (opts.defaultFolder) {
107
- args.push('--default-folder', opts.defaultFolder);
108
- }
109
- log('INFO', `Spawning IDE server: ${opts.serverPath} ${args.join(' ')}`);
139
+ log('INFO', `Spawning IDE server ${preflight.serverVersion}: ${opts.serverPath} ${args.join(' ')}`);
110
140
  const child = spawn(opts.serverPath, args, {
111
141
  cwd: process.cwd(),
112
- env: sanitizeAgentEnv(process.env),
142
+ env: buildIdeServerEnv(),
113
143
  detached: true,
114
144
  stdio: 'ignore',
115
145
  });
@@ -117,28 +147,88 @@ export async function spawnIdeServer(opts, log) {
117
147
  throw new Error('Failed to spawn IDE server process');
118
148
  }
119
149
  child.unref();
120
- const ready = await waitForPort(port, READY_TIMEOUT_MS);
150
+ const ready = await waitForPort(port, IDE_READY_TIMEOUT_MS);
121
151
  if (!ready) {
122
- throw new Error(`IDE server did not start listening on port ${port} within ${READY_TIMEOUT_MS / 1000}s`);
152
+ throw new Error(`IDE server did not start listening on port ${port} within ${IDE_READY_TIMEOUT_MS / 1000}s`);
123
153
  }
124
154
  const record = {
125
155
  prefix: IDE_DEFAULT_PREFIX,
126
156
  port,
127
157
  serverPath: opts.serverPath,
128
158
  pid: child.pid,
129
- defaultFolder: opts.defaultFolder,
130
159
  startedAt: new Date().toISOString(),
160
+ serverVersion: preflight.serverVersion,
161
+ extensionsDir: preflight.extensionsDir,
162
+ sidebarVersion: preflight.sidebarVersion ?? undefined,
131
163
  };
132
164
  writeIdeRecord(record);
133
165
  log('INFO', `IDE server listening on port ${port} (pid ${child.pid})`);
134
- return record;
166
+ return { record, restartRequired: false };
167
+ }
168
+ /**
169
+ * Record a server already listening on `port` without touching it. The record
170
+ * keeps what the live process was actually spawned with (the prior record's
171
+ * server path, version, extensions directory and sidebar; absent stays absent):
172
+ * the version just checked describes `opts.serverPath`, which need not be the
173
+ * binary the live process came from. With no prior record on that port the live
174
+ * binary is unknown, so the requested path is recorded and a restart is flagged.
175
+ */
176
+ function adoptLiveIdeServer(opts, port, existing, preflight, log) {
177
+ let prior = null;
178
+ if (existing && existing.port === port) {
179
+ prior = existing;
180
+ }
181
+ const restartRequired = prior === null || !liveServerIsCurrent(prior, opts.serverPath, preflight);
182
+ const record = {
183
+ prefix: IDE_DEFAULT_PREFIX,
184
+ port,
185
+ serverPath: prior?.serverPath ?? opts.serverPath,
186
+ pid: getProcessesOnPort(port)[0] ?? 0,
187
+ startedAt: prior?.startedAt ?? new Date().toISOString(),
188
+ serverVersion: prior?.serverVersion,
189
+ extensionsDir: prior?.extensionsDir,
190
+ sidebarVersion: prior?.sidebarVersion,
191
+ };
192
+ writeIdeRecord(record);
193
+ let note = '';
194
+ if (restartRequired) {
195
+ note = '; restart it to load the current Codev sidebar';
196
+ }
197
+ log('INFO', `IDE server already listening on port ${port}; adopted${note}`);
198
+ return { record, restartRequired };
199
+ }
200
+ /**
201
+ * True when the live server recorded in `prior` already runs what this start
202
+ * prepared: the same server binary at the same version, the same extensions
203
+ * directory and, when a sidebar is embedded, the same sidebar version. Compared
204
+ * against the record rather than this preflight's outcome, so a server left
205
+ * running after an earlier start upgraded the server (in place, as `npm i -g`
206
+ * does, or at a new path) or the sidebar is still reported stale on every later
207
+ * start. An unknown recorded version is not treated as stale on its own.
208
+ */
209
+ function liveServerIsCurrent(prior, serverPath, preflight) {
210
+ if (prior.serverPath !== serverPath)
211
+ return false;
212
+ if (prior.serverVersion !== undefined && prior.serverVersion !== preflight.serverVersion)
213
+ return false;
214
+ if (preflight.sidebarChanged)
215
+ return false;
216
+ if (prior.extensionsDir !== preflight.extensionsDir)
217
+ return false;
218
+ if (preflight.sidebarVersion === null)
219
+ return true;
220
+ return prior.sidebarVersion === preflight.sidebarVersion;
135
221
  }
136
222
  /**
137
223
  * Stop the IDE server on the recorded port: SIGTERM, wait for exit, escalate to
138
224
  * SIGKILL for survivors (mirrors `towerStop`, #1668 plan §4), then delete the
139
- * record. Cold path — `getProcessesOnPort` is fine here.
225
+ * record. Cold path — `getProcessesOnPort` is fine here. Serialized with every
226
+ * other lifecycle operation.
140
227
  */
141
- export async function stopIdeServer(log) {
228
+ export function stopIdeServer(log) {
229
+ return withIdeLock(() => stopIdeServerUnlocked(log));
230
+ }
231
+ async function stopIdeServerUnlocked(log) {
142
232
  const record = readIdeRecord();
143
233
  if (!record) {
144
234
  return { stopped: false, port: null };
@@ -154,7 +244,7 @@ export async function stopIdeServer(log) {
154
244
  }
155
245
  // Wait for the SIGTERMed processes to actually exit before deleting the record;
156
246
  // escalate any survivors to SIGKILL, so a lingering process can't be re-adopted.
157
- const deadline = Date.now() + STOP_EXIT_TIMEOUT_MS;
247
+ const deadline = Date.now() + IDE_STOP_EXIT_TIMEOUT_MS;
158
248
  let survivors = pids.filter(isPidAlive);
159
249
  while (survivors.length > 0 && Date.now() < deadline) {
160
250
  await new Promise((r) => setTimeout(r, STOP_POLL_MS));
@@ -197,22 +287,32 @@ export async function ensureIdeServerLive(log = () => { }) {
197
287
  return record.port;
198
288
  if (respawnInFlight)
199
289
  return respawnInFlight;
200
- respawnInFlight = (async () => {
201
- try {
202
- log('INFO', `IDE server on port ${record.port} is down; respawning from ${record.serverPath}`);
203
- const fresh = await spawnIdeServer({ serverPath: record.serverPath, port: record.port, defaultFolder: record.defaultFolder }, log);
204
- return fresh.port;
205
- }
206
- catch (err) {
207
- log('WARN', `IDE server respawn failed: ${err.message}`);
208
- return null;
209
- }
210
- finally {
211
- respawnInFlight = null;
212
- }
213
- })();
290
+ respawnInFlight = withIdeLock(() => respawnRecordedIdeServer(log)).finally(() => {
291
+ respawnInFlight = null;
292
+ });
214
293
  return respawnInFlight;
215
294
  }
295
+ /**
296
+ * The respawn body, run under the lock. It re-reads the record first: a start
297
+ * or stop queued ahead of it may have changed or removed the record, or
298
+ * already brought the server up.
299
+ */
300
+ async function respawnRecordedIdeServer(log) {
301
+ try {
302
+ const current = readIdeRecord();
303
+ if (!current)
304
+ return null;
305
+ if (isPortLive(current.port))
306
+ return current.port;
307
+ log('INFO', `IDE server on port ${current.port} is down; respawning from ${current.serverPath}`);
308
+ const fresh = await spawnIdeServerUnlocked({ serverPath: current.serverPath, port: current.port }, log);
309
+ return fresh.record.port;
310
+ }
311
+ catch (err) {
312
+ log('WARN', `IDE server respawn failed: ${err.message}`);
313
+ return null;
314
+ }
315
+ }
216
316
  /**
217
317
  * Boot-time reconcile: adopt a live server (no orphan) or respawn a recorded
218
318
  * but dead one. Best-effort — never throws into Tower boot.
@@ -229,7 +329,7 @@ export async function reconcileIdeServer(log) {
229
329
  }
230
330
  /**
231
331
  * Local-only `/api/ide` management endpoint driving the lifecycle above:
232
- * `POST` starts (body `{ serverPath, port?, defaultFolder? }`), `DELETE` stops,
332
+ * `POST` starts (body `{ serverPath, port? }`), `DELETE` stops,
233
333
  * `GET` reports status. Reached only post-`isRequestAllowed` (key required) and
234
334
  * blocked from the tunnel like `/api/tunnel/*` — it spawns/kills a process.
235
335
  */
@@ -258,16 +358,15 @@ export async function handleIdeApi(req, res, log) {
258
358
  }
259
359
  const serverPath = typeof body.serverPath === 'string' ? body.serverPath : '';
260
360
  const port = typeof body.port === 'number' ? body.port : undefined;
261
- const defaultFolder = typeof body.defaultFolder === 'string' ? body.defaultFolder : undefined;
262
361
  if (!serverPath) {
263
362
  res.writeHead(400, { 'Content-Type': 'application/json' });
264
363
  res.end(JSON.stringify({ error: 'serverPath is required' }));
265
364
  return;
266
365
  }
267
366
  try {
268
- const record = await spawnIdeServer({ serverPath, port, defaultFolder }, log);
367
+ const { record, restartRequired } = await spawnIdeServer({ serverPath, port }, log);
269
368
  res.writeHead(200, { 'Content-Type': 'application/json' });
270
- res.end(JSON.stringify({ ok: true, ...record }));
369
+ res.end(JSON.stringify({ ok: true, ...record, restartRequired }));
271
370
  }
272
371
  catch (err) {
273
372
  res.writeHead(500, { 'Content-Type': 'application/json' });
@@ -1 +1 @@
1
- {"version":3,"file":"ide-server.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/ide-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ide-server.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/ide-server.ts"],"names":[],"mappings":"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"}
@@ -112,6 +112,15 @@ export declare function derivePrReady(parsed: ParsedStatus): boolean;
112
112
  * any currently-pending gate wait (requested_at → now).
113
113
  */
114
114
  export declare function computeIdleMs(parsed: ParsedStatus): number;
115
+ /** What global.db records for a builder, by worktree path (#1740). */
116
+ export interface StoredBuilderIdentity {
117
+ /** The builder id, which is its terminal role id. */
118
+ roleId: string;
119
+ /** The issue it was spawned for, or null for task/protocol/worktree builders. */
120
+ issueNumber: string | null;
121
+ /** The architect that spawned it (Spec 823), or null. */
122
+ spawnedByArchitect: string | null;
123
+ }
115
124
  /**
116
125
  * Map a worktree directory name to its expected terminal role_id.
117
126
  * Must match what buildAgentName() produces during spawn so we can
@@ -126,7 +135,11 @@ export declare function computeIdleMs(parsed: ParsedStatus): number;
126
135
  * task-NAvW → "builder-task-navw"
127
136
  * worktree-foIg → "worktree-foig"
128
137
  * 0110-legacy → "builder-spir-110"
138
+ * pir-ENG-123-slug → "builder-pir-eng-123" (tracker key, #1740)
129
139
  * experiment-AbCd → "builder-experiment-abcd"
140
+ *
141
+ * This is the fallback: discoverBuilders prefers the builder id stored in
142
+ * global.db, which is the role id itself.
130
143
  */
131
144
  export declare function worktreeNameToRoleId(dirName: string): string | null;
132
145
  /**
@@ -136,10 +149,23 @@ export declare function worktreeNameToRoleId(dirName: string): string | null;
136
149
  * Returns the project dir prefix (to match `{ID}-*`) or null for soft-mode builders.
137
150
  */
138
151
  export declare function extractProjectIdFromWorktreeName(dirName: string): string | null;
152
+ /**
153
+ * A builder's lowercased role id: the stored builder id when it has the role-id
154
+ * shape, else the id derived from its worktree directory name; `null` when
155
+ * neither yields one. The one derivation shared by overview discovery and
156
+ * Tower's agent-state key (Spec 1595), so the two cannot diverge.
157
+ */
158
+ export declare function builderRoleId(storedId: string | undefined, worktreeDirName: string): string | null;
159
+ /**
160
+ * Read each builder's stored identity (builder id, issue) from global.db for
161
+ * this workspace, keyed by worktree path. Empty when the DB is missing or
162
+ * unreadable, so discovery falls back to parsing directory names.
163
+ */
164
+ export declare function loadStoredBuilderIdentities(workspaceRoot: string): Map<string, StoredBuilderIdentity>;
139
165
  /**
140
166
  * Discover builders by scanning .builders/ directory and reading status.yaml.
141
167
  */
142
- export declare function discoverBuilders(workspaceRoot: string): OverviewBuilder[];
168
+ export declare function discoverBuilders(workspaceRoot: string, stored?: ReadonlyMap<string, StoredBuilderIdentity>): OverviewBuilder[];
143
169
  /**
144
170
  * Count a builder's pending review-comments by reading its queue file
145
171
  * (`<worktree>/.codev/pending-comments.json`, the single source of truth the
@@ -1 +1 @@
1
- {"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/overview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/overview.ts"],"names":[],"mappings":"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"}