@cluesmith/codev 3.3.2 → 3.3.4

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 (257) hide show
  1. package/dashboard-dist/assets/{index-D3XaKpZW.js → index-DZf6pNPE.js} +41 -41
  2. package/dashboard-dist/assets/index-DZf6pNPE.js.map +1 -0
  3. package/dashboard-dist/assets/index-DnYLy5C_.css +32 -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 +48 -0
  7. package/dist/agent-farm/cli.js.map +1 -1
  8. package/dist/agent-farm/commands/ide.d.ts +20 -0
  9. package/dist/agent-farm/commands/ide.d.ts.map +1 -0
  10. package/dist/agent-farm/commands/ide.js +138 -0
  11. package/dist/agent-farm/commands/ide.js.map +1 -0
  12. package/dist/agent-farm/commands/inbox.d.ts.map +1 -1
  13. package/dist/agent-farm/commands/inbox.js +79 -10
  14. package/dist/agent-farm/commands/inbox.js.map +1 -1
  15. package/dist/agent-farm/commands/interrupt.d.ts +4 -1
  16. package/dist/agent-farm/commands/interrupt.d.ts.map +1 -1
  17. package/dist/agent-farm/commands/interrupt.js +6 -3
  18. package/dist/agent-farm/commands/interrupt.js.map +1 -1
  19. package/dist/agent-farm/commands/reset.d.ts +4 -1
  20. package/dist/agent-farm/commands/reset.d.ts.map +1 -1
  21. package/dist/agent-farm/commands/reset.js +6 -3
  22. package/dist/agent-farm/commands/reset.js.map +1 -1
  23. package/dist/agent-farm/commands/send.d.ts +28 -0
  24. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  25. package/dist/agent-farm/commands/send.js +79 -6
  26. package/dist/agent-farm/commands/send.js.map +1 -1
  27. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  28. package/dist/agent-farm/commands/spawn-worktree.js +16 -7
  29. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  30. package/dist/agent-farm/commands/tower.d.ts +21 -9
  31. package/dist/agent-farm/commands/tower.d.ts.map +1 -1
  32. package/dist/agent-farm/commands/tower.js +90 -30
  33. package/dist/agent-farm/commands/tower.js.map +1 -1
  34. package/dist/agent-farm/db/index.d.ts +3 -1
  35. package/dist/agent-farm/db/index.d.ts.map +1 -1
  36. package/dist/agent-farm/db/index.js +8 -443
  37. package/dist/agent-farm/db/index.js.map +1 -1
  38. package/dist/agent-farm/db/mailbox.d.ts +47 -7
  39. package/dist/agent-farm/db/mailbox.d.ts.map +1 -1
  40. package/dist/agent-farm/db/mailbox.js +56 -12
  41. package/dist/agent-farm/db/mailbox.js.map +1 -1
  42. package/dist/agent-farm/db/migrations.d.ts +57 -0
  43. package/dist/agent-farm/db/migrations.d.ts.map +1 -0
  44. package/dist/agent-farm/db/migrations.js +530 -0
  45. package/dist/agent-farm/db/migrations.js.map +1 -0
  46. package/dist/agent-farm/db/schema.d.ts +1 -1
  47. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  48. package/dist/agent-farm/db/schema.js +1 -0
  49. package/dist/agent-farm/db/schema.js.map +1 -1
  50. package/dist/agent-farm/db/tower-owner.d.ts +168 -0
  51. package/dist/agent-farm/db/tower-owner.d.ts.map +1 -0
  52. package/dist/agent-farm/db/tower-owner.js +369 -0
  53. package/dist/agent-farm/db/tower-owner.js.map +1 -0
  54. package/dist/agent-farm/db/types.d.ts +47 -0
  55. package/dist/agent-farm/db/types.d.ts.map +1 -1
  56. package/dist/agent-farm/db/types.js.map +1 -1
  57. package/dist/agent-farm/lib/ide-record.d.ts +65 -0
  58. package/dist/agent-farm/lib/ide-record.d.ts.map +1 -0
  59. package/dist/agent-farm/lib/ide-record.js +118 -0
  60. package/dist/agent-farm/lib/ide-record.js.map +1 -0
  61. package/dist/agent-farm/lib/tunnel-client.d.ts +22 -0
  62. package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
  63. package/dist/agent-farm/lib/tunnel-client.js +96 -19
  64. package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
  65. package/dist/agent-farm/servers/cron-delivery.d.ts +7 -1
  66. package/dist/agent-farm/servers/cron-delivery.d.ts.map +1 -1
  67. package/dist/agent-farm/servers/cron-delivery.js +2 -1
  68. package/dist/agent-farm/servers/cron-delivery.js.map +1 -1
  69. package/dist/agent-farm/servers/gate-profiles.d.ts +44 -2
  70. package/dist/agent-farm/servers/gate-profiles.d.ts.map +1 -1
  71. package/dist/agent-farm/servers/gate-profiles.js +79 -6
  72. package/dist/agent-farm/servers/gate-profiles.js.map +1 -1
  73. package/dist/agent-farm/servers/ide-forward.d.ts +62 -0
  74. package/dist/agent-farm/servers/ide-forward.d.ts.map +1 -0
  75. package/dist/agent-farm/servers/ide-forward.js +274 -0
  76. package/dist/agent-farm/servers/ide-forward.js.map +1 -0
  77. package/dist/agent-farm/servers/ide-server.d.ts +68 -0
  78. package/dist/agent-farm/servers/ide-server.d.ts.map +1 -0
  79. package/dist/agent-farm/servers/ide-server.js +281 -0
  80. package/dist/agent-farm/servers/ide-server.js.map +1 -0
  81. package/dist/agent-farm/servers/mailbox-delivery.d.ts +296 -12
  82. package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -1
  83. package/dist/agent-farm/servers/mailbox-delivery.js +566 -69
  84. package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -1
  85. package/dist/agent-farm/servers/mailbox-wiring.d.ts +66 -19
  86. package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -1
  87. package/dist/agent-farm/servers/mailbox-wiring.js +204 -37
  88. package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -1
  89. package/dist/agent-farm/servers/message-write.d.ts +138 -11
  90. package/dist/agent-farm/servers/message-write.d.ts.map +1 -1
  91. package/dist/agent-farm/servers/message-write.js +144 -35
  92. package/dist/agent-farm/servers/message-write.js.map +1 -1
  93. package/dist/agent-farm/servers/overview.d.ts +28 -12
  94. package/dist/agent-farm/servers/overview.d.ts.map +1 -1
  95. package/dist/agent-farm/servers/overview.js +130 -79
  96. package/dist/agent-farm/servers/overview.js.map +1 -1
  97. package/dist/agent-farm/servers/render-gate.d.ts +77 -1
  98. package/dist/agent-farm/servers/render-gate.d.ts.map +1 -1
  99. package/dist/agent-farm/servers/render-gate.js +174 -25
  100. package/dist/agent-farm/servers/render-gate.js.map +1 -1
  101. package/dist/agent-farm/servers/session-submit.d.ts +7 -4
  102. package/dist/agent-farm/servers/session-submit.d.ts.map +1 -1
  103. package/dist/agent-farm/servers/session-submit.js +7 -4
  104. package/dist/agent-farm/servers/session-submit.js.map +1 -1
  105. package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
  106. package/dist/agent-farm/servers/tower-cron.js +7 -3
  107. package/dist/agent-farm/servers/tower-cron.js.map +1 -1
  108. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  109. package/dist/agent-farm/servers/tower-instances.js +17 -10
  110. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  111. package/dist/agent-farm/servers/tower-routes.d.ts +32 -0
  112. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  113. package/dist/agent-farm/servers/tower-routes.js +186 -26
  114. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  115. package/dist/agent-farm/servers/tower-server.js +79 -9
  116. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  117. package/dist/agent-farm/servers/tower-terminals.d.ts +21 -0
  118. package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
  119. package/dist/agent-farm/servers/tower-terminals.js +106 -13
  120. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  121. package/dist/agent-farm/servers/tower-utils.d.ts +35 -0
  122. package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
  123. package/dist/agent-farm/servers/tower-utils.js +39 -0
  124. package/dist/agent-farm/servers/tower-utils.js.map +1 -1
  125. package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
  126. package/dist/agent-farm/servers/tower-websocket.js +26 -2
  127. package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
  128. package/dist/agent-farm/utils/message-format.d.ts +78 -2
  129. package/dist/agent-farm/utils/message-format.d.ts.map +1 -1
  130. package/dist/agent-farm/utils/message-format.js +107 -11
  131. package/dist/agent-farm/utils/message-format.js.map +1 -1
  132. package/dist/agent-farm/utils/port.d.ts +22 -0
  133. package/dist/agent-farm/utils/port.d.ts.map +1 -0
  134. package/dist/agent-farm/utils/port.js +35 -0
  135. package/dist/agent-farm/utils/port.js.map +1 -0
  136. package/dist/agent-farm/utils/server-utils.d.ts +26 -0
  137. package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
  138. package/dist/agent-farm/utils/server-utils.js +36 -0
  139. package/dist/agent-farm/utils/server-utils.js.map +1 -1
  140. package/dist/cli.d.ts.map +1 -1
  141. package/dist/cli.js +3 -1
  142. package/dist/cli.js.map +1 -1
  143. package/dist/commands/consult/index.d.ts.map +1 -1
  144. package/dist/commands/consult/index.js +61 -1
  145. package/dist/commands/consult/index.js.map +1 -1
  146. package/dist/commands/consult/tree-tripwire.d.ts +177 -0
  147. package/dist/commands/consult/tree-tripwire.d.ts.map +1 -0
  148. package/dist/commands/consult/tree-tripwire.js +356 -0
  149. package/dist/commands/consult/tree-tripwire.js.map +1 -0
  150. package/dist/commands/doctor.d.ts +69 -0
  151. package/dist/commands/doctor.d.ts.map +1 -1
  152. package/dist/commands/doctor.js +165 -2
  153. package/dist/commands/doctor.js.map +1 -1
  154. package/dist/commands/generate-image.d.ts +25 -1
  155. package/dist/commands/generate-image.d.ts.map +1 -1
  156. package/dist/commands/generate-image.js +410 -2
  157. package/dist/commands/generate-image.js.map +1 -1
  158. package/dist/commands/porch/prompts.d.ts.map +1 -1
  159. package/dist/commands/porch/prompts.js +18 -2
  160. package/dist/commands/porch/prompts.js.map +1 -1
  161. package/dist/lib/agent-env.d.ts +86 -0
  162. package/dist/lib/agent-env.d.ts.map +1 -0
  163. package/dist/lib/agent-env.js +126 -0
  164. package/dist/lib/agent-env.js.map +1 -0
  165. package/dist/lib/forge-contracts.d.ts +76 -5
  166. package/dist/lib/forge-contracts.d.ts.map +1 -1
  167. package/dist/lib/forge-contracts.js.map +1 -1
  168. package/dist/lib/forge-rate-limit.d.ts +45 -0
  169. package/dist/lib/forge-rate-limit.d.ts.map +1 -0
  170. package/dist/lib/forge-rate-limit.js +89 -0
  171. package/dist/lib/forge-rate-limit.js.map +1 -0
  172. package/dist/lib/forge.d.ts +29 -1
  173. package/dist/lib/forge.d.ts.map +1 -1
  174. package/dist/lib/forge.js +96 -21
  175. package/dist/lib/forge.js.map +1 -1
  176. package/dist/lib/github.d.ts +13 -1
  177. package/dist/lib/github.d.ts.map +1 -1
  178. package/dist/lib/github.js +58 -15
  179. package/dist/lib/github.js.map +1 -1
  180. package/dist/lib/test-env.d.ts +17 -0
  181. package/dist/lib/test-env.d.ts.map +1 -1
  182. package/dist/lib/test-env.js +20 -0
  183. package/dist/lib/test-env.js.map +1 -1
  184. package/dist/terminal/pty-manager.d.ts +10 -1
  185. package/dist/terminal/pty-manager.d.ts.map +1 -1
  186. package/dist/terminal/pty-manager.js +38 -9
  187. package/dist/terminal/pty-manager.js.map +1 -1
  188. package/dist/terminal/pty-session.d.ts +174 -8
  189. package/dist/terminal/pty-session.d.ts.map +1 -1
  190. package/dist/terminal/pty-session.js +299 -25
  191. package/dist/terminal/pty-session.js.map +1 -1
  192. package/dist/terminal/session-manager.d.ts +23 -2
  193. package/dist/terminal/session-manager.d.ts.map +1 -1
  194. package/dist/terminal/session-manager.js +115 -36
  195. package/dist/terminal/session-manager.js.map +1 -1
  196. package/dist/terminal/session-screen.d.ts +34 -5
  197. package/dist/terminal/session-screen.d.ts.map +1 -1
  198. package/dist/terminal/session-screen.js +52 -6
  199. package/dist/terminal/session-screen.js.map +1 -1
  200. package/dist/terminal/shellper-client.d.ts +73 -0
  201. package/dist/terminal/shellper-client.d.ts.map +1 -1
  202. package/dist/terminal/shellper-client.js +151 -0
  203. package/dist/terminal/shellper-client.js.map +1 -1
  204. package/dist/terminal/shellper-main.js +20 -3
  205. package/dist/terminal/shellper-main.js.map +1 -1
  206. package/dist/terminal/shellper-process.d.ts +2 -0
  207. package/dist/terminal/shellper-process.d.ts.map +1 -1
  208. package/dist/terminal/shellper-process.js +17 -1
  209. package/dist/terminal/shellper-process.js.map +1 -1
  210. package/dist/terminal/shellper-protocol.d.ts +28 -0
  211. package/dist/terminal/shellper-protocol.d.ts.map +1 -1
  212. package/dist/terminal/shellper-protocol.js.map +1 -1
  213. package/dist/terminal/terminal-replies.d.ts +102 -0
  214. package/dist/terminal/terminal-replies.d.ts.map +1 -0
  215. package/dist/terminal/terminal-replies.js +181 -0
  216. package/dist/terminal/terminal-replies.js.map +1 -0
  217. package/package.json +4 -4
  218. package/scripts/forge/gitea/_lib.sh +214 -0
  219. package/scripts/forge/gitea/issue-comment.sh +8 -1
  220. package/scripts/forge/gitea/issue-view.sh +95 -4
  221. package/scripts/forge/gitea/pr-create.sh +155 -0
  222. package/scripts/forge/gitea/pr-exists.sh +32 -4
  223. package/scripts/forge/gitea/pr-list.sh +40 -31
  224. package/scripts/forge/gitea/pr-view.sh +65 -4
  225. package/scripts/forge/gitea/recently-merged.sh +91 -21
  226. package/scripts/forge/gitea/user-identity.sh +30 -1
  227. package/scripts/forge/github/issue-view.sh +5 -2
  228. package/scripts/forge/github/pr-create.sh +47 -0
  229. package/scripts/forge/github/pr-list.sh +6 -2
  230. package/scripts/forge/github/pr-search.sh +6 -2
  231. package/scripts/forge/gitlab/issue-search.sh +1 -0
  232. package/scripts/forge/gitlab/issue-view.sh +24 -4
  233. package/scripts/forge/gitlab/pr-create.sh +53 -0
  234. package/scripts/forge/gitlab/pr-search.sh +37 -2
  235. package/scripts/forge/linear/auth-status.sh +1 -0
  236. package/scripts/forge/linear/issue-comment.sh +1 -0
  237. package/scripts/forge/linear/issue-list.sh +1 -0
  238. package/scripts/forge/linear/issue-search.sh +1 -0
  239. package/scripts/forge/linear/issue-view.sh +14 -2
  240. package/scripts/forge/linear/recently-closed.sh +1 -0
  241. package/scripts/forge/linear/user-identity.sh +1 -0
  242. package/skeleton/.claude/skills/generate-image/SKILL.md +39 -1
  243. package/skeleton/.codex/skills/generate-image/SKILL.md +39 -1
  244. package/skeleton/protocols/air/prompts/pr.md +6 -1
  245. package/skeleton/protocols/aspir/prompts/review.md +6 -1
  246. package/skeleton/protocols/bugfix/prompts/pr.md +6 -1
  247. package/skeleton/protocols/bugfix/protocol.md +2 -1
  248. package/skeleton/protocols/maintain/prompts/review.md +6 -1
  249. package/skeleton/protocols/pir/prompts/review.md +10 -7
  250. package/skeleton/protocols/spir/prompts/review.md +6 -1
  251. package/skeleton/resources/commands/agent-farm.md +28 -3
  252. package/skeleton/roles/consultant.md +32 -0
  253. package/skeleton/templates/AGENTS.md +1 -1
  254. package/skeleton/templates/CLAUDE.md +1 -1
  255. package/templates/tower.html +16 -1
  256. package/dashboard-dist/assets/index-BZRTEMtH.css +0 -32
  257. package/dashboard-dist/assets/index-D3XaKpZW.js.map +0 -1
@@ -13,20 +13,22 @@ import { homedir } from 'node:os';
13
13
  import { fileURLToPath } from 'node:url';
14
14
  import { Command } from 'commander';
15
15
  import { WebSocketServer } from 'ws';
16
- import { SessionManager } from '../../terminal/session-manager.js';
17
- import { startRateLimitCleanup } from './tower-utils.js';
16
+ import { SessionManager, ORPHAN_SWEEP_TIMEOUT_MS } from '../../terminal/session-manager.js';
17
+ import { startRateLimitCleanup, persistableCommand, logSessionIdentity } from './tower-utils.js';
18
18
  import { sweepShellperHusks, resolveHuskGraceMs } from './shellper-husk-sweep.js';
19
19
  import { sweepSessionLogs, measureSessionLogs, resolveLogRetentionDays, resolveLogSweepIntervalMs, formatBytes, MS_PER_DAY, } from './session-log-sweep.js';
20
20
  import { initTunnel, shutdownTunnel, } from './tower-tunnel.js';
21
21
  import { initCron, shutdownCron } from './tower-cron.js';
22
+ import { reconcileIdeServer } from './ide-server.js';
22
23
  import { initInstances, shutdownInstances, registerKnownWorkspace, getKnownWorkspacePaths, getInstances, } from './tower-instances.js';
23
- import { initTerminals, shutdownTerminals, getWorkspaceTerminals, getTerminalManager, getWorkspaceTerminalsEntry, saveTerminalSession, deleteTerminalSession, deleteWorkspaceTerminalSessions, deleteFileTabsForWorkspace, getTerminalsForWorkspace, reconcileTerminalSessions, } from './tower-terminals.js';
24
+ import { initTerminals, shutdownTerminals, getWorkspaceTerminals, getTerminalManager, getWorkspaceTerminalsEntry, saveTerminalSession, updateTerminalCommand, getTerminalSessionById, deleteTerminalSession, deleteWorkspaceTerminalSessions, deleteFileTabsForWorkspace, getTerminalsForWorkspace, reconcileTerminalSessions, } from './tower-terminals.js';
24
25
  import { setupUpgradeHandler, } from './tower-websocket.js';
25
26
  import { handleRequest, deliverCronMessage } from './tower-routes.js';
26
27
  import { startMailboxDrainer, stopMailboxDrainer, setMailboxBroadcaster } from './mailbox-wiring.js';
27
28
  import { shutdownDelayedSends } from './delayed-send.js';
28
29
  import { setCodevConfigNotifier, stopAllCodevConfigWatchers } from './codev-config-watcher.js';
29
30
  import { getGlobalDb } from '../db/index.js';
31
+ import { claimGlobalDbOwnership, defaultLockFile, ownershipConflictMessage, releaseTowerOwnerIfMine, } from '../db/tower-owner.js';
30
32
  import { runBootConsolidation } from '../db/consolidate.js';
31
33
  import { DEFAULT_TOWER_PORT, AGENT_FARM_DIR } from '../lib/tower-client.js';
32
34
  import { validateHost, getExpectedKey, selectWsSubprotocol } from '../utils/server-utils.js';
@@ -72,6 +74,10 @@ const bridgeMode = process.env.BRIDGE_MODE === '1';
72
74
  const bindHost = bridgeMode
73
75
  ? validateHost(process.env.BRIDGE_TOWER_HOST || '127.0.0.1')
74
76
  : '127.0.0.1';
77
+ // Issue #1629: the owner lock file for this global.db (its `.tower-owner` sibling;
78
+ // the suffix avoids SQLite's own auxiliary/dotfile-VFS names). Resolved once so the
79
+ // boot guard and the graceful-shutdown release use the same path.
80
+ const towerLockFile = defaultLockFile();
75
81
  // Request authentication (advisory GHSA-xvjp-7748-v88v): ensure the shared local
76
82
  // key exists at boot so HTTP/WS enforcement has an expected value to compare
77
83
  // against. getExpectedKey() issues the key if missing (Tower owns generation)
@@ -167,6 +173,16 @@ async function gracefulShutdown(signal) {
167
173
  shutdownInstances();
168
174
  // 8. Tear down terminal module (Spec 0105 Phase 4) — shuts down terminal manager
169
175
  shutdownTerminals();
176
+ // 9. Issue #1629: release our global.db owner lock so the next start sees an
177
+ // unowned DB. Best-effort and pid-scoped (never removes a lock we don't own);
178
+ // a hard kill skips this, but the boot liveness check self-clears a dead
179
+ // owner's lock anyway.
180
+ try {
181
+ releaseTowerOwnerIfMine(towerLockFile, process.pid);
182
+ }
183
+ catch (err) {
184
+ log('WARN', `Failed to release global.db owner lock: ${err.message}`);
185
+ }
170
186
  log('INFO', 'Graceful shutdown complete');
171
187
  process.exit(0);
172
188
  }
@@ -424,6 +440,26 @@ server.listen(port, bindHost, () => {
424
440
  * the readiness gate above until it calls markBootComplete().
425
441
  */
426
442
  async function bootSequence() {
443
+ // Issue #1629: global.db owner lock. The port bind above is a SAME-PORT mutex
444
+ // only — a second Tower on a DIFFERENT port can still open this global.db (the
445
+ // #1515 incident: an AGENT_FARM_DIR typo pointed a test Tower at production).
446
+ // Its reconcile would then hijack every live shellper and delete the rows. So
447
+ // BEFORE anything touches the shared DB rows, sockets, or shellper processes
448
+ // (consolidation, reconcile, killOrphanedShellpers), claim ownership via an
449
+ // exclusive lock file next to global.db — and refuse loudly if a live Tower
450
+ // already owns this DB.
451
+ const ownership = await claimGlobalDbOwnership({
452
+ lockFile: towerLockFile,
453
+ pid: process.pid,
454
+ port,
455
+ dbDir: AGENT_FARM_DIR,
456
+ bindHost,
457
+ });
458
+ if (!ownership.ok) {
459
+ log('ERROR', ownershipConflictMessage(ownership.conflict, AGENT_FARM_DIR));
460
+ process.exit(1);
461
+ }
462
+ log('INFO', `Claimed global.db ownership (pid ${process.pid}, port ${port}) at ${AGENT_FARM_DIR}`);
427
463
  // Initialize shellper session manager for persistent terminals
428
464
  const socketDir = process.env.SHELLPER_SOCKET_DIR || path.join(homedir(), '.codev', 'run');
429
465
  const shellperScript = path.join(__dirname, '..', '..', 'terminal', 'shellper-main.js');
@@ -469,6 +505,19 @@ async function bootSequence() {
469
505
  pid = info.pid;
470
506
  }
471
507
  ptySession.attachShellper(client, Buffer.alloc(0), pid, ptySession.shellperSessionId ?? sessionId);
508
+ // PIR #1475: this is the one attach site with no row rewrite behind it, and
509
+ // the client is a FRESH connection — its WELCOME carries the shellper's
510
+ // current argv, which may differ from what the row holds (a relaunch swapped
511
+ // it, or the row was healed from config). Write it back so the fallback SSOT
512
+ // converges instead of drifting. No-ops when unchanged.
513
+ // Read the row BEFORE the write below, so `row=` reports what the reconnect
514
+ // actually found rather than what it left behind. This is the site the log
515
+ // was built for — the one place a fresh WELCOME can disagree with the row —
516
+ // so a hardcoded `row=null` here would misreport exactly the case worth
517
+ // seeing.
518
+ const rowBefore = getTerminalSessionById(ptySession.id)?.command ?? null;
519
+ logSessionIdentity(log, 'session-reconnected', ptySession.id, ptySession, rowBefore);
520
+ updateTerminalCommand(ptySession.id, persistableCommand(ptySession));
472
521
  log('INFO', `Shellper session ${sessionId} re-attached to terminal ${ptySession.id}`);
473
522
  });
474
523
  const staleCleaned = await shellperManager.cleanupStaleSockets();
@@ -572,13 +621,29 @@ async function bootSequence() {
572
621
  // model causes the first client to be replaced, corrupting the session
573
622
  // and deleting the architect terminal's socket file (Bugfix #274).
574
623
  await reconcileTerminalSessions();
575
- // Bugfix #341: Kill orphaned shellper processes not in active sessions.
576
- // Must run AFTER reconciliation so that reconnected sessions are in the
577
- // active map and won't be killed. Catches shellpers from crashed tests
578
- // or previous Tower instances that lost their socket files.
624
+ // Bugfix #341: Kill orphaned shellper processes not in active sessions. Must
625
+ // run AFTER reconciliation so reconnected sessions are in the active map and
626
+ // won't be killed. Catches shellpers from crashed tests or previous Tower
627
+ // instances that lost their socket files.
628
+ //
629
+ // Issue #1685: this sweep used to be unbounded and silent on the zero-orphan
630
+ // path, so on a flooded/wedged process table its `ps` scan + per-orphan socket
631
+ // probes stalled here for minutes, tripping the launcher's 30s startup timeout
632
+ // with no trace in the log. It is now time-bounded (killOrphanedShellpers
633
+ // abandons past ORPHAN_SWEEP_TIMEOUT_MS, well under the 30s launcher timeout
634
+ // and the 20s BOOT_READY_TIMEOUT_MS) and logs its entry + duration. It is kept
635
+ // BEFORE markBootComplete() deliberately: an un-aged sweep must not run once
636
+ // requests are served, or it could reap a just-spawned session whose shellper
637
+ // is already in `ps` but not yet registered/socket-listening.
638
+ const orphanSweepStartMs = Date.now();
639
+ log('INFO', 'Sweeping for orphaned shellpers…');
579
640
  const orphansKilled = await shellperManager.killOrphanedShellpers();
580
- if (orphansKilled > 0) {
581
- log('INFO', `Killed ${orphansKilled} orphaned shellper process(es)`);
641
+ const orphanSweepMs = Date.now() - orphanSweepStartMs;
642
+ if (orphansKilled < 0) {
643
+ log('WARN', `Orphan sweep abandoned after ${orphanSweepMs}ms (exceeded ${ORPHAN_SWEEP_TIMEOUT_MS}ms budget); remaining orphans left for the next startup`);
644
+ }
645
+ else {
646
+ log('INFO', `Orphan sweep done in ${orphanSweepMs}ms (${orphansKilled} killed)`);
582
647
  }
583
648
  // Issue #1261 test hook: widen the pre-wiring window to a known duration so
584
649
  // the startup race is deterministic instead of a function of this machine's
@@ -627,6 +692,11 @@ async function bootSequence() {
627
692
  // shellper (1h grace by default), so a session created by an incoming
628
693
  // request while the sweep runs can never match it.
629
694
  await runHuskSweep();
695
+ // Issue #1668: reconcile the IDE server across a Tower restart — adopt a live
696
+ // one (no orphan) or respawn a recorded-but-dead one. Post-readiness and
697
+ // NOT awaited: a respawn's readiness wait must never delay the rest of boot,
698
+ // and a failure here never affects Tower itself.
699
+ reconcileIdeServer(log).catch((err) => log('ERROR', `IDE server reconcile failed: ${err.message}`));
630
700
  // Issue #1238: PTY session log retention. Session logs are per-session files
631
701
  // in ~/.agent-farm/logs that nothing ever deleted, so they accreted forever
632
702
  // (19 GB / 29,728 files on an audited machine). Sweep aged-out logs at
@@ -1 +1 @@
1
- {"version":3,"file":"tower-server.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tower-server.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-server.ts"],"names":[],"mappings":"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"}
@@ -104,6 +104,27 @@ export declare function saveTerminalSession(terminalId: string, workspacePath: s
104
104
  * Update the label of a terminal session in SQLite (Spec 468).
105
105
  */
106
106
  export declare function updateTerminalLabel(terminalId: string, label: string): void;
107
+ /**
108
+ * Update the launch command of a terminal session in SQLite (PIR #1475).
109
+ *
110
+ * For attach sites that are NOT followed by a row rewrite — currently just the
111
+ * in-place `session-reconnected` re-attach in `tower-server.ts`, where a freshly
112
+ * connected client can bring a changed identity to an existing `PtySession` with
113
+ * no save behind it. Sites that already re-save the row (the two reconcile paths)
114
+ * must pass the hydrated value into `saveTerminalSession` instead: they DELETE and
115
+ * re-INSERT the row, which would silently wipe an UPDATE written at attach time.
116
+ *
117
+ * No-ops when the value is unchanged, so a steady-state Tower writes at most once
118
+ * per session.
119
+ *
120
+ * Never DOWNGRADES a known row to NULL. `null` here means "this attach produced no
121
+ * identity" — a legacy shellper, or a WELCOME whose payload failed validation — and
122
+ * that is an absence of news, not news that the recorded command is wrong. Writing
123
+ * it through would erase a good row and, worse, hand the Spec 1313 self-heal a
124
+ * NULL it would then re-heal from config, converting a rejected frame into a
125
+ * silent identity change. Only a stated identity may rewrite the row.
126
+ */
127
+ export declare function updateTerminalCommand(terminalId: string, command: string | null): void;
107
128
  /**
108
129
  * Get a terminal session row by its primary key (Spec 468).
109
130
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tower-terminals.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-terminals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tower-terminals.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-terminals.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAWtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAA8B,MAAM,yBAAyB,CAAC;AAEtF;;;GAGG;AACH;;;;;;;;GAQG;AAGH,eAAO,MAAM,mBAAmB,QAAc,CAAC;AAE/C,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAIzE;AAOD,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,mCAAmC,CAAC;AACjG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AA6B7F,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,wDAAwD;IACxD,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,6DAA6D;IAC7D,sBAAsB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,2DAA2D;IAC3D,sBAAsB,EAAE,MAAM,MAAM,EAAE,CAAC;CACxC;AAMD,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAEtD;AAED,qEAAqE;AACrE,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAE/E;AA+BD,gFAAgF;AAChF,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD;AAED,6GAA6G;AAC7G,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,GAAE,MAAiC,GAAG,OAAO,CAAC,IAAI,CAAC,CAevG;AAED,uEAAuE;AACvE,wBAAgB,qCAAqC,IAAI,IAAI,CAG5D;AAED,oCAAoC;AACpC,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC;AAMD,uEAAuE;AACvE,wBAAgB,qBAAqB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAEvE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAcpD;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,MAAM,GAAG,kBAAkB,CAepF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAQpG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,cAAc,GAAE,MAAM,GAAG,IAAW,EACpC,WAAW,GAAE,MAAM,GAAG,IAAW,EACjC,iBAAiB,GAAE,MAAM,GAAG,IAAW,EACvC,KAAK,GAAE,MAAM,GAAG,IAAW,EAC3B,GAAG,GAAE,MAAM,GAAG,IAAW,EACzB,OAAO,GAAE,MAAM,GAAG,IAAW,GAC5B,IAAI,CAoBN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAO3E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAatF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAOnF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBxF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAErF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAO9D;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAqBnE;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAa3E;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAQ1F;AAMD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOxG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAM9C;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAetE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAoBrE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAQpF;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOlD;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB/D;AAsVD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,SAAS,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAuSzC"}
@@ -9,6 +9,7 @@ import fs from 'node:fs';
9
9
  import path from 'node:path';
10
10
  import { AGENT_FARM_DIR, encodeWorkspacePath } from '../lib/tower-client.js';
11
11
  import { loadConfig } from '../../lib/config.js';
12
+ import { sanitizeAgentEnv } from '../../lib/agent-env.js';
12
13
  import { getGlobalDb } from '../db/index.js';
13
14
  import { saveFileTab as saveFileTabToDb, deleteFileTab as deleteFileTabFromDb, deleteFileTabsForWorkspace as deleteFileTabsForWorkspaceFromDb, deleteFileTabsByPathPrefix as deleteFileTabsByPathPrefixFromDb, loadFileTabsForWorkspace as loadFileTabsFromDb, } from '../utils/file-tabs.js';
14
15
  import { TerminalManager, DEFAULT_DISK_LOG_MAX_BYTES } from '../../terminal/index.js';
@@ -40,7 +41,7 @@ function extractShellperSessionId(socketPath) {
40
41
  const match = path.basename(socketPath).match(/^shellper-(.+)\.sock$/);
41
42
  return match ? match[1] : null;
42
43
  }
43
- import { normalizeWorkspacePath, buildArchitectReconnectRestartOptions } from './tower-utils.js';
44
+ import { normalizeWorkspacePath, buildArchitectReconnectRestartOptions, persistableCommand, logSessionIdentity, } from './tower-utils.js';
44
45
  import { setArchitectByName } from '../state.js';
45
46
  import { isIntentionallyStopping } from './tower-instances.js';
46
47
  // ============================================================================
@@ -269,6 +270,41 @@ export function updateTerminalLabel(terminalId, label) {
269
270
  _deps?.log('WARN', `Failed to update terminal label: ${err.message}`);
270
271
  }
271
272
  }
273
+ /**
274
+ * Update the launch command of a terminal session in SQLite (PIR #1475).
275
+ *
276
+ * For attach sites that are NOT followed by a row rewrite — currently just the
277
+ * in-place `session-reconnected` re-attach in `tower-server.ts`, where a freshly
278
+ * connected client can bring a changed identity to an existing `PtySession` with
279
+ * no save behind it. Sites that already re-save the row (the two reconcile paths)
280
+ * must pass the hydrated value into `saveTerminalSession` instead: they DELETE and
281
+ * re-INSERT the row, which would silently wipe an UPDATE written at attach time.
282
+ *
283
+ * No-ops when the value is unchanged, so a steady-state Tower writes at most once
284
+ * per session.
285
+ *
286
+ * Never DOWNGRADES a known row to NULL. `null` here means "this attach produced no
287
+ * identity" — a legacy shellper, or a WELCOME whose payload failed validation — and
288
+ * that is an absence of news, not news that the recorded command is wrong. Writing
289
+ * it through would erase a good row and, worse, hand the Spec 1313 self-heal a
290
+ * NULL it would then re-heal from config, converting a rejected frame into a
291
+ * silent identity change. Only a stated identity may rewrite the row.
292
+ */
293
+ export function updateTerminalCommand(terminalId, command) {
294
+ if (command === null)
295
+ return;
296
+ try {
297
+ const db = getGlobalDb();
298
+ const row = db.prepare('SELECT command FROM terminal_sessions WHERE id = ?').get(terminalId);
299
+ if (!row || row.command === command)
300
+ return;
301
+ db.prepare('UPDATE terminal_sessions SET command = ? WHERE id = ?').run(command, terminalId);
302
+ _deps?.log('INFO', `Terminal ${terminalId} identity updated: ${row.command ?? 'null'} -> ${command ?? 'null'}`);
303
+ }
304
+ catch (err) {
305
+ _deps?.log('WARN', `Failed to update terminal command: ${err.message}`);
306
+ }
307
+ }
272
308
  /**
273
309
  * Get a terminal session row by its primary key (Spec 468).
274
310
  */
@@ -531,6 +567,10 @@ async function _reconcileTerminalSessionsInner() {
531
567
  let orphanReconnected = 0;
532
568
  let killed = 0;
533
569
  let cleaned = 0;
570
+ // Bugfix #1686: rows kept because reconnect failed but death was not proven
571
+ // (the shellper pid is still alive). Counted so a reconcile that only
572
+ // preserved rows does not misreport "No terminal sessions to reconcile".
573
+ let unconfirmed = 0;
534
574
  // Track matched session IDs across all phases
535
575
  const matchedSessionIds = new Set();
536
576
  // ---- Phase 1: Shellper reconnection ----
@@ -604,8 +644,7 @@ async function _reconcileTerminalSessionsInner() {
604
644
  catch { /* use default */ }
605
645
  }
606
646
  const cmdParts = architectCmd.split(/\s+/);
607
- const cleanEnv = { ...process.env };
608
- delete cleanEnv['CLAUDECODE'];
647
+ const cleanEnv = sanitizeAgentEnv(process.env);
609
648
  // Spec 786 Phase 2: preserve architect identity across shellper auto-
610
649
  // restart. Without this, the new claude process would inherit Tower's
611
650
  // CODEV_ARCHITECT_NAME (or none), and builders spawned by a restarted
@@ -671,8 +710,13 @@ async function _reconcileTerminalSessionsInner() {
671
710
  // Process probe results sequentially (shared state mutations)
672
711
  for (const { dbSession, client, replayData, restartOptions } of probeResults) {
673
712
  if (!client) {
674
- _deps.log('INFO', `Shellper session ${dbSession.id} is stale (PID/socket dead) — will clean up`);
675
- continue; // Will be cleaned up in Phase 2
713
+ // Bugfix #1686: reconnect returning null does NOT prove death (it also
714
+ // covers a connect refused by another Tower client, or a transient
715
+ // socket/fd hiccup). Death is confirmed in the Phase 2 sweep, which keeps
716
+ // a row whose pid is still alive — so this log defers the verdict rather
717
+ // than asserting "dead" up front.
718
+ _deps.log('INFO', `Shellper session ${dbSession.id} reconnect failed — deferring to Phase 2 sweep for death confirmation`);
719
+ continue; // Phase 2 confirms death before any cleanup
676
720
  }
677
721
  const workspacePath = dbSession.workspace_path;
678
722
  const sessionCwd = dbSession.cwd ?? workspacePath;
@@ -690,9 +734,12 @@ async function _reconcileTerminalSessionsInner() {
690
734
  // column existed → `command` NULL): restartOptions.command is cmdParts[0] from
691
735
  // the CURRENT config, so an upgraded architect resolves on the first restart
692
736
  // rather than staying broken until it is manually relaunched.
737
+ // PIR #1475: this remains the SEED — the fallback the session reports until
738
+ // (and unless) the attached shellper states its own identity via WELCOME.
739
+ const identitySeed = dbSession.command ?? restartOptions?.command ?? null;
693
740
  const session = manager.createSessionRaw({
694
741
  label, cwd: sessionCwd, id: dbSession.id,
695
- command: dbSession.command ?? restartOptions?.command ?? undefined,
742
+ command: identitySeed ?? undefined,
696
743
  });
697
744
  const ptySession = manager.getSession(session.id);
698
745
  if (ptySession) {
@@ -738,8 +785,14 @@ async function _reconcileTerminalSessionsInner() {
738
785
  }
739
786
  // Refresh the SQLite row. The id is preserved (#991), so this re-saves the
740
787
  // session under the same terminal id with its refreshed shellper info.
788
+ // PIR #1475: persist the identity the session now reports — the shellper's
789
+ // own WELCOME statement when it made one, else the seed above (persisted
790
+ // command, then the legacy heal). This is the site's ONE persist mechanism:
791
+ // the row is deleted and re-inserted here, so an update written back at
792
+ // attach time would be wiped.
793
+ logSessionIdentity(_deps.log, 'reconcile-adopt', session.id, ptySession, dbSession.command);
741
794
  db.prepare('DELETE FROM terminal_sessions WHERE id = ?').run(dbSession.id);
742
- saveTerminalSession(session.id, workspacePath, dbSession.type, dbSession.role_id, dbSession.shellper_pid, dbSession.shellper_socket, dbSession.shellper_pid, dbSession.shellper_start_time, dbSession.label, sessionCwd, dbSession.command ?? restartOptions?.command ?? null);
795
+ saveTerminalSession(session.id, workspacePath, dbSession.type, dbSession.role_id, dbSession.shellper_pid, dbSession.shellper_socket, dbSession.shellper_pid, dbSession.shellper_start_time, dbSession.label, sessionCwd, ptySession ? persistableCommand(ptySession) : identitySeed);
743
796
  _deps.registerKnownWorkspace(workspacePath);
744
797
  // Clean up on exit (only fires for permanent death when restartOnExit is set)
745
798
  if (ptySession) {
@@ -779,6 +832,26 @@ async function _reconcileTerminalSessionsInner() {
779
832
  const existing = manager.getSession(session.id);
780
833
  if (existing && existing.status !== 'exited')
781
834
  continue;
835
+ // Bugfix #1686: a shellper-backed row reaches here when Phase 1 failed to
836
+ // reconnect to it. But reconnectSession() returns null for transient reasons
837
+ // too — a socket connect refused because another Tower client already owns
838
+ // the shellper (one-client-per-shellper), or a boot-time socket/fd hiccup —
839
+ // not just for a genuinely dead process. Treating that failure as death and
840
+ // SIGTERMing the still-live pid is what destroyed 53 live sessions in the
841
+ // #1629 incident. Destroy only what is proven dead, and the sole proof of
842
+ // death is the pid being down: a live shellper pid is never signaled and its
843
+ // row is never deleted here, regardless of socket-file state (a transiently
844
+ // absent socket is the same transient-failure class and must not kill a live
845
+ // agent). The row is left in place (WARN) and retried on a later
846
+ // reconcile/adoption pass; a pid-dead row still deletes below as before.
847
+ if (session.shellper_socket) {
848
+ const shellperAlive = session.shellper_pid != null && processExists(session.shellper_pid);
849
+ if (shellperAlive) {
850
+ _deps.log('WARN', `Shellper session ${session.id} failed to reconnect but pid ${session.shellper_pid} is alive — leaving row untouched (a live pid is never signaled), retried next reconcile/adoption pass (${session.type} for ${path.basename(session.workspace_path)})`);
851
+ unconfirmed++;
852
+ continue;
853
+ }
854
+ }
782
855
  // Stale row — kill orphaned process if any, then delete
783
856
  if (session.pid && processExists(session.pid)) {
784
857
  _deps.log('INFO', `Killing orphaned process: PID ${session.pid} (${session.type} for ${path.basename(session.workspace_path)})`);
@@ -792,8 +865,8 @@ async function _reconcileTerminalSessionsInner() {
792
865
  cleaned++;
793
866
  }
794
867
  const total = shellperReconnected + orphanReconnected;
795
- if (total > 0 || killed > 0 || cleaned > 0) {
796
- _deps.log('INFO', `Reconciliation complete: ${shellperReconnected} shellper, ${orphanReconnected} orphan, ${killed} killed, ${cleaned} stale rows cleaned`);
868
+ if (total > 0 || killed > 0 || cleaned > 0 || unconfirmed > 0) {
869
+ _deps.log('INFO', `Reconciliation complete: ${shellperReconnected} shellper, ${orphanReconnected} orphan, ${killed} killed, ${cleaned} stale rows cleaned, ${unconfirmed} unconfirmed (kept)`);
797
870
  }
798
871
  else {
799
872
  _deps.log('INFO', 'No terminal sessions to reconcile');
@@ -856,8 +929,7 @@ export async function getTerminalsForWorkspace(workspacePath, proxyUrl) {
856
929
  catch { /* use default */ }
857
930
  }
858
931
  const cmdParts = architectCmd.split(/\s+/);
859
- const cleanEnv = { ...process.env };
860
- delete cleanEnv['CLAUDECODE'];
932
+ const cleanEnv = sanitizeAgentEnv(process.env);
861
933
  // Spec 786 Phase 2: preserve architect identity across shellper auto-
862
934
  // restart (see matching block in reconcileTerminalSessionsInner above).
863
935
  const architectName = dbSession.role_id || 'main';
@@ -890,9 +962,12 @@ export async function getTerminalsForWorkspace(workspacePath, proxyUrl) {
890
962
  // identity across the reconnect — clients holding `/ws/terminal/<id>`
891
963
  // stay valid. Use stored cwd (worktree path for builders) instead of
892
964
  // workspace_path (Bugfix #506).
965
+ // PIR #1475: the seed, superseded by the shellper's WELCOME identity
966
+ // once attached (see the startup reconcile path above).
967
+ const identitySeed = dbSession.command ?? restartOptions?.command ?? null;
893
968
  const newSession = manager.createSessionRaw({
894
969
  label, cwd: dbSession.cwd ?? dbSession.workspace_path, id: dbSession.id,
895
- command: dbSession.command ?? restartOptions?.command ?? undefined, // Spec 1313: restore/heal identity (see reconcile path)
970
+ command: identitySeed ?? undefined, // Spec 1313: restore/heal identity (see reconcile path)
896
971
  });
897
972
  const ptySession = manager.getSession(newSession.id);
898
973
  if (ptySession) {
@@ -936,8 +1011,9 @@ export async function getTerminalsForWorkspace(workspacePath, proxyUrl) {
936
1011
  });
937
1012
  }
938
1013
  // Refresh the SQLite row under the same (preserved) id.
1014
+ logSessionIdentity(_deps.log, 'reconnect-onthefly', newSession.id, ptySession, dbSession.command);
939
1015
  deleteTerminalSession(dbSession.id);
940
- saveTerminalSession(newSession.id, dbSession.workspace_path, dbSession.type, dbSession.role_id, dbSession.shellper_pid, dbSession.shellper_socket, dbSession.shellper_pid, dbSession.shellper_start_time, dbSession.label, dbSession.cwd, dbSession.command ?? restartOptions?.command ?? null);
1016
+ saveTerminalSession(newSession.id, dbSession.workspace_path, dbSession.type, dbSession.role_id, dbSession.shellper_pid, dbSession.shellper_socket, dbSession.shellper_pid, dbSession.shellper_start_time, dbSession.label, dbSession.cwd, ptySession ? persistableCommand(ptySession) : identitySeed);
941
1017
  dbSession.id = newSession.id;
942
1018
  session = manager.getSession(newSession.id);
943
1019
  _deps.log('INFO', `On-the-fly reconnect succeeded for ${newSession.id} (id preserved)`);
@@ -948,6 +1024,23 @@ export async function getTerminalsForWorkspace(workspacePath, proxyUrl) {
948
1024
  }
949
1025
  }
950
1026
  if (!session) {
1027
+ // Bugfix #1686: the same guard as reconcile Phase 2, applied to this
1028
+ // sibling delete site. The on-the-fly reconnect above returns null for
1029
+ // transient reasons too (socket connect refused because another Tower
1030
+ // client owns the shellper, or a boot-time socket/fd hiccup), not just
1031
+ // for a dead process. Dropping the row on that failure alone is how a row
1032
+ // the Phase 2 guard just preserved would be deleted by the first
1033
+ // /api/state or /api/overview read whose reconnect fails again — making
1034
+ // Phase 2's "retried next reconcile/adoption pass" promise false. Destroy
1035
+ // only what is proven dead: a live shellper pid is never deleted here,
1036
+ // regardless of socket-file state; the row is kept for a later pass.
1037
+ if (dbSession.shellper_socket) {
1038
+ const shellperAlive = dbSession.shellper_pid != null && processExists(dbSession.shellper_pid);
1039
+ if (shellperAlive) {
1040
+ _deps?.log('WARN', `On-the-fly reconnect for ${dbSession.id} failed but pid ${dbSession.shellper_pid} is alive — leaving row untouched (a live pid is never signaled), retried next reconcile/adoption pass (${dbSession.type})`);
1041
+ continue;
1042
+ }
1043
+ }
951
1044
  // Stale row, nothing to reconnect — clean up
952
1045
  deleteTerminalSession(dbSession.id);
953
1046
  continue;