@cluesmith/codev 3.3.1 → 3.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/dashboard-dist/assets/{index-D3XaKpZW.js → index-CUIjS_Vb.js} +41 -41
  2. package/dashboard-dist/assets/index-CUIjS_Vb.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 +52 -1
  7. package/dist/agent-farm/cli.js.map +1 -1
  8. package/dist/agent-farm/commands/inbox.d.ts.map +1 -1
  9. package/dist/agent-farm/commands/inbox.js +67 -10
  10. package/dist/agent-farm/commands/inbox.js.map +1 -1
  11. package/dist/agent-farm/commands/interrupt.d.ts +4 -1
  12. package/dist/agent-farm/commands/interrupt.d.ts.map +1 -1
  13. package/dist/agent-farm/commands/interrupt.js +6 -3
  14. package/dist/agent-farm/commands/interrupt.js.map +1 -1
  15. package/dist/agent-farm/commands/reset/constants.d.ts +118 -0
  16. package/dist/agent-farm/commands/reset/constants.d.ts.map +1 -1
  17. package/dist/agent-farm/commands/reset/constants.js +118 -0
  18. package/dist/agent-farm/commands/reset/constants.js.map +1 -1
  19. package/dist/agent-farm/commands/reset/context.d.ts +18 -0
  20. package/dist/agent-farm/commands/reset/context.d.ts.map +1 -1
  21. package/dist/agent-farm/commands/reset/context.js +41 -0
  22. package/dist/agent-farm/commands/reset/context.js.map +1 -1
  23. package/dist/agent-farm/commands/reset/receipt.d.ts.map +1 -1
  24. package/dist/agent-farm/commands/reset/receipt.js +16 -5
  25. package/dist/agent-farm/commands/reset/receipt.js.map +1 -1
  26. package/dist/agent-farm/commands/reset/reorient.d.ts +1 -1
  27. package/dist/agent-farm/commands/reset/reorient.d.ts.map +1 -1
  28. package/dist/agent-farm/commands/reset/reorient.js +8 -1
  29. package/dist/agent-farm/commands/reset/reorient.js.map +1 -1
  30. package/dist/agent-farm/commands/reset/self.d.ts +335 -0
  31. package/dist/agent-farm/commands/reset/self.d.ts.map +1 -0
  32. package/dist/agent-farm/commands/reset/self.js +636 -0
  33. package/dist/agent-farm/commands/reset/self.js.map +1 -0
  34. package/dist/agent-farm/commands/reset.d.ts +4 -1
  35. package/dist/agent-farm/commands/reset.d.ts.map +1 -1
  36. package/dist/agent-farm/commands/reset.js +29 -21
  37. package/dist/agent-farm/commands/reset.js.map +1 -1
  38. package/dist/agent-farm/commands/self-refresh.d.ts +60 -0
  39. package/dist/agent-farm/commands/self-refresh.d.ts.map +1 -0
  40. package/dist/agent-farm/commands/self-refresh.js +506 -0
  41. package/dist/agent-farm/commands/self-refresh.js.map +1 -0
  42. package/dist/agent-farm/commands/send.d.ts +28 -0
  43. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  44. package/dist/agent-farm/commands/send.js +90 -7
  45. package/dist/agent-farm/commands/send.js.map +1 -1
  46. package/dist/agent-farm/commands/spawn.d.ts +7 -0
  47. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  48. package/dist/agent-farm/commands/spawn.js +13 -1
  49. package/dist/agent-farm/commands/spawn.js.map +1 -1
  50. package/dist/agent-farm/db/index.d.ts +3 -1
  51. package/dist/agent-farm/db/index.d.ts.map +1 -1
  52. package/dist/agent-farm/db/index.js +8 -443
  53. package/dist/agent-farm/db/index.js.map +1 -1
  54. package/dist/agent-farm/db/mailbox.d.ts +47 -7
  55. package/dist/agent-farm/db/mailbox.d.ts.map +1 -1
  56. package/dist/agent-farm/db/mailbox.js +56 -12
  57. package/dist/agent-farm/db/mailbox.js.map +1 -1
  58. package/dist/agent-farm/db/migrations.d.ts +57 -0
  59. package/dist/agent-farm/db/migrations.d.ts.map +1 -0
  60. package/dist/agent-farm/db/migrations.js +530 -0
  61. package/dist/agent-farm/db/migrations.js.map +1 -0
  62. package/dist/agent-farm/db/schema.d.ts +1 -1
  63. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  64. package/dist/agent-farm/db/schema.js +1 -0
  65. package/dist/agent-farm/db/schema.js.map +1 -1
  66. package/dist/agent-farm/db/types.d.ts +22 -0
  67. package/dist/agent-farm/db/types.d.ts.map +1 -1
  68. package/dist/agent-farm/db/types.js.map +1 -1
  69. package/dist/agent-farm/lib/tower-client.d.ts +12 -0
  70. package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
  71. package/dist/agent-farm/lib/tower-client.js +12 -0
  72. package/dist/agent-farm/lib/tower-client.js.map +1 -1
  73. package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
  74. package/dist/agent-farm/lib/tunnel-client.js +43 -14
  75. package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
  76. package/dist/agent-farm/servers/cron-delivery.d.ts +7 -1
  77. package/dist/agent-farm/servers/cron-delivery.d.ts.map +1 -1
  78. package/dist/agent-farm/servers/cron-delivery.js +2 -1
  79. package/dist/agent-farm/servers/cron-delivery.js.map +1 -1
  80. package/dist/agent-farm/servers/gate-profiles.d.ts +21 -0
  81. package/dist/agent-farm/servers/gate-profiles.d.ts.map +1 -1
  82. package/dist/agent-farm/servers/gate-profiles.js +36 -4
  83. package/dist/agent-farm/servers/gate-profiles.js.map +1 -1
  84. package/dist/agent-farm/servers/mailbox-delivery.d.ts +218 -15
  85. package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -1
  86. package/dist/agent-farm/servers/mailbox-delivery.js +259 -27
  87. package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -1
  88. package/dist/agent-farm/servers/mailbox-wiring.d.ts +66 -11
  89. package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -1
  90. package/dist/agent-farm/servers/mailbox-wiring.js +202 -48
  91. package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -1
  92. package/dist/agent-farm/servers/message-write.d.ts +58 -18
  93. package/dist/agent-farm/servers/message-write.d.ts.map +1 -1
  94. package/dist/agent-farm/servers/message-write.js +73 -28
  95. package/dist/agent-farm/servers/message-write.js.map +1 -1
  96. package/dist/agent-farm/servers/render-gate.d.ts +37 -1
  97. package/dist/agent-farm/servers/render-gate.d.ts.map +1 -1
  98. package/dist/agent-farm/servers/render-gate.js +71 -12
  99. package/dist/agent-farm/servers/render-gate.js.map +1 -1
  100. package/dist/agent-farm/servers/session-submit.d.ts +220 -27
  101. package/dist/agent-farm/servers/session-submit.d.ts.map +1 -1
  102. package/dist/agent-farm/servers/session-submit.js +333 -42
  103. package/dist/agent-farm/servers/session-submit.js.map +1 -1
  104. package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
  105. package/dist/agent-farm/servers/tower-cron.js +3 -2
  106. package/dist/agent-farm/servers/tower-cron.js.map +1 -1
  107. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  108. package/dist/agent-farm/servers/tower-instances.js +11 -3
  109. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  110. package/dist/agent-farm/servers/tower-routes.d.ts +32 -0
  111. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  112. package/dist/agent-farm/servers/tower-routes.js +245 -36
  113. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  114. package/dist/agent-farm/servers/tower-server.js +15 -2
  115. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  116. package/dist/agent-farm/servers/tower-terminals.d.ts +21 -0
  117. package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
  118. package/dist/agent-farm/servers/tower-terminals.js +53 -5
  119. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  120. package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -1
  121. package/dist/agent-farm/servers/tower-tunnel.js +14 -0
  122. package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
  123. package/dist/agent-farm/servers/tower-utils.d.ts +35 -0
  124. package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
  125. package/dist/agent-farm/servers/tower-utils.js +39 -0
  126. package/dist/agent-farm/servers/tower-utils.js.map +1 -1
  127. package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
  128. package/dist/agent-farm/servers/tower-websocket.js +8 -1
  129. package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
  130. package/dist/agent-farm/types.d.ts +36 -1
  131. package/dist/agent-farm/types.d.ts.map +1 -1
  132. package/dist/agent-farm/utils/message-format.d.ts +136 -4
  133. package/dist/agent-farm/utils/message-format.d.ts.map +1 -1
  134. package/dist/agent-farm/utils/message-format.js +212 -22
  135. package/dist/agent-farm/utils/message-format.js.map +1 -1
  136. package/dist/agent-farm/utils/server-utils.d.ts +8 -2
  137. package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
  138. package/dist/agent-farm/utils/server-utils.js +19 -2
  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/doctor.js +2 -2
  144. package/dist/commands/generate-image.d.ts +20 -1
  145. package/dist/commands/generate-image.d.ts.map +1 -1
  146. package/dist/commands/generate-image.js +188 -1
  147. package/dist/commands/generate-image.js.map +1 -1
  148. package/dist/commands/porch/context-refresh.d.ts +181 -0
  149. package/dist/commands/porch/context-refresh.d.ts.map +1 -0
  150. package/dist/commands/porch/context-refresh.js +270 -0
  151. package/dist/commands/porch/context-refresh.js.map +1 -0
  152. package/dist/commands/porch/index.d.ts +6 -0
  153. package/dist/commands/porch/index.d.ts.map +1 -1
  154. package/dist/commands/porch/index.js +46 -0
  155. package/dist/commands/porch/index.js.map +1 -1
  156. package/dist/commands/porch/next.d.ts +0 -9
  157. package/dist/commands/porch/next.d.ts.map +1 -1
  158. package/dist/commands/porch/next.js +133 -4
  159. package/dist/commands/porch/next.js.map +1 -1
  160. package/dist/commands/porch/prompts.d.ts.map +1 -1
  161. package/dist/commands/porch/prompts.js +18 -2
  162. package/dist/commands/porch/prompts.js.map +1 -1
  163. package/dist/commands/porch/protocol.d.ts.map +1 -1
  164. package/dist/commands/porch/protocol.js +102 -0
  165. package/dist/commands/porch/protocol.js.map +1 -1
  166. package/dist/commands/porch/types.d.ts +61 -0
  167. package/dist/commands/porch/types.d.ts.map +1 -1
  168. package/dist/lib/forge-contracts.d.ts +66 -5
  169. package/dist/lib/forge-contracts.d.ts.map +1 -1
  170. package/dist/lib/forge-contracts.js.map +1 -1
  171. package/dist/lib/forge.d.ts +1 -1
  172. package/dist/lib/forge.d.ts.map +1 -1
  173. package/dist/lib/forge.js +33 -11
  174. package/dist/lib/forge.js.map +1 -1
  175. package/dist/lib/self-refresh-invocation.d.ts +60 -0
  176. package/dist/lib/self-refresh-invocation.d.ts.map +1 -0
  177. package/dist/lib/self-refresh-invocation.js +64 -0
  178. package/dist/lib/self-refresh-invocation.js.map +1 -0
  179. package/dist/lib/test-env.d.ts +50 -0
  180. package/dist/lib/test-env.d.ts.map +1 -1
  181. package/dist/lib/test-env.js +76 -0
  182. package/dist/lib/test-env.js.map +1 -1
  183. package/dist/terminal/pty-manager.d.ts +10 -1
  184. package/dist/terminal/pty-manager.d.ts.map +1 -1
  185. package/dist/terminal/pty-manager.js +38 -9
  186. package/dist/terminal/pty-manager.js.map +1 -1
  187. package/dist/terminal/pty-session.d.ts +52 -4
  188. package/dist/terminal/pty-session.d.ts.map +1 -1
  189. package/dist/terminal/pty-session.js +157 -18
  190. package/dist/terminal/pty-session.js.map +1 -1
  191. package/dist/terminal/shellper-client.d.ts +73 -0
  192. package/dist/terminal/shellper-client.d.ts.map +1 -1
  193. package/dist/terminal/shellper-client.js +151 -0
  194. package/dist/terminal/shellper-client.js.map +1 -1
  195. package/dist/terminal/shellper-main.js +20 -3
  196. package/dist/terminal/shellper-main.js.map +1 -1
  197. package/dist/terminal/shellper-process.d.ts +2 -0
  198. package/dist/terminal/shellper-process.d.ts.map +1 -1
  199. package/dist/terminal/shellper-process.js +17 -1
  200. package/dist/terminal/shellper-process.js.map +1 -1
  201. package/dist/terminal/shellper-protocol.d.ts +28 -0
  202. package/dist/terminal/shellper-protocol.d.ts.map +1 -1
  203. package/dist/terminal/shellper-protocol.js.map +1 -1
  204. package/package.json +4 -4
  205. package/scripts/forge/gitea/_lib.sh +214 -0
  206. package/scripts/forge/gitea/issue-comment.sh +8 -1
  207. package/scripts/forge/gitea/issue-view.sh +95 -4
  208. package/scripts/forge/gitea/pr-create.sh +155 -0
  209. package/scripts/forge/gitea/pr-exists.sh +32 -4
  210. package/scripts/forge/gitea/pr-list.sh +40 -31
  211. package/scripts/forge/gitea/pr-view.sh +65 -4
  212. package/scripts/forge/gitea/recently-merged.sh +91 -21
  213. package/scripts/forge/gitea/user-identity.sh +30 -1
  214. package/scripts/forge/github/issue-view.sh +5 -2
  215. package/scripts/forge/github/pr-create.sh +47 -0
  216. package/scripts/forge/github/pr-search.sh +3 -1
  217. package/scripts/forge/gitlab/issue-view.sh +24 -4
  218. package/scripts/forge/gitlab/pr-create.sh +53 -0
  219. package/scripts/forge/gitlab/pr-search.sh +3 -1
  220. package/scripts/forge/linear/issue-view.sh +13 -2
  221. package/skeleton/.claude/skills/arch-save/SKILL.md +8 -2
  222. package/skeleton/.claude/skills/builder-refresh/SKILL.md +138 -0
  223. package/skeleton/.claude/skills/generate-image/SKILL.md +22 -1
  224. package/skeleton/.codex/skills/arch-save/SKILL.md +8 -2
  225. package/skeleton/.codex/skills/builder-refresh/SKILL.md +138 -0
  226. package/skeleton/.codex/skills/generate-image/SKILL.md +22 -1
  227. package/skeleton/protocol-schema.json +17 -0
  228. package/skeleton/protocols/air/prompts/pr.md +6 -1
  229. package/skeleton/protocols/air/protocol.json +1 -1
  230. package/skeleton/protocols/aspir/prompts/review.md +6 -1
  231. package/skeleton/protocols/aspir/protocol.json +5 -1
  232. package/skeleton/protocols/bugfix/prompts/pr.md +6 -1
  233. package/skeleton/protocols/bugfix/protocol.json +1 -1
  234. package/skeleton/protocols/bugfix/protocol.md +2 -1
  235. package/skeleton/protocols/experiment/protocol.json +1 -1
  236. package/skeleton/protocols/maintain/prompts/review.md +6 -1
  237. package/skeleton/protocols/maintain/protocol.json +1 -1
  238. package/skeleton/protocols/pir/prompts/review.md +10 -7
  239. package/skeleton/protocols/pir/protocol.json +1 -1
  240. package/skeleton/protocols/protocol-schema.json +17 -0
  241. package/skeleton/protocols/research/protocol.json +1 -1
  242. package/skeleton/protocols/spike/protocol.json +1 -1
  243. package/skeleton/protocols/spir/prompts/review.md +6 -1
  244. package/skeleton/protocols/spir/protocol.json +5 -1
  245. package/skeleton/resources/commands/agent-farm.md +1 -1
  246. package/templates/tower.html +16 -1
  247. package/dashboard-dist/assets/index-BZRTEMtH.css +0 -32
  248. package/dashboard-dist/assets/index-D3XaKpZW.js.map +0 -1
@@ -41,42 +41,235 @@
41
41
  *
42
42
  * ## Exactly what it covers — this is NOT blanket per-session atomicity
43
43
  *
44
- * A lock only serialises writers that take it. Currently that is the `escape`
45
- * and `interrupt` paths of `/api/send`. Every other PTY writer still writes
46
- * directly, and it is worth being precise about why:
47
- *
48
- * - The mailbox delivery path (`deliverAgentMailSerialized`, Spec 1313) — every
49
- * normal `/api/send` AND every cron notification (Phase 6 rerouted cron here; the
50
- * old blind `writeMessageToSession` is gone). NOT covered by this lock, and does not
51
- * need it: it runs its OWN per-agent write serializer that completion-chains each
52
- * delivery on the prior one's paced write (text + Enter), so two mailbox deliveries
53
- * to one agent cannot interleave. That is a disjoint lock from this per-session one,
54
- * so a mailbox delivery is not serialised against a concurrent `escape`/`interrupt`
55
- * here — but a normal mailbox delivery only ever writes onto a render-gate-verified
56
- * empty prompt, and `interrupt` is the explicit gate-bypassing human action (see
57
- * tower-routes.ts), so that residual cross-path race is an accepted, documented
58
- * boundary, not a regression this lock must close.
59
- * - `POST /api/terminals/:id/write` — NOT covered. It is a raw passthrough
60
- * with no Enter semantics of its own.
61
- * - `tower-websocket.ts` keystrokes and the shellper frame relay — DELIBERATELY
62
- * not covered. That is a human typing into their own terminal; serialising
63
- * it behind an agent's message would make the UI feel stuck, and the human
64
- * is the composer's owner.
65
- *
66
- * So the guarantee is: **two lock-taking `/api/send` submissions (escape/interrupt)
67
- * to one session cannot interleave**, which is the failure that reached production.
68
- * Anything stronger requires the remaining writers to take the lock too.
44
+ * A lock only serialises writers that take it. As of Issue #1365 that is every writer
45
+ * that puts a *message* on a terminal:
46
+ *
47
+ * - `escape` and `interrupt` on `/api/send`, and the delayed `--interrupt` `^C`
48
+ * (`tower-routes.ts`) — the explicit human gate-bypasses.
49
+ * - The mailbox delivery path (`deliverAgentMailSerialized`, Spec 1313) — every normal
50
+ * `/api/send`, every cron notification, every backstop drain. It takes this lock as a
51
+ * LEAF inside its own per-agent serializer, via `submitMessagePaced`.
52
+ *
53
+ * These stay deliberately uncovered:
54
+ *
55
+ * - `POST /api/terminals/:id/write` — a raw passthrough with no Enter semantics of its own.
56
+ * - `tower-websocket.ts` keystrokes and the shellper frame relay — a human typing into
57
+ * their own terminal. Serialising that behind an agent's message would make the UI feel
58
+ * stuck, and the human is the composer's owner.
59
+ *
60
+ * ### Why the mailbox path was converged (Issue #1365)
61
+ *
62
+ * Until #1365 the delivery path held only its per-AGENT serializer — a disjoint lock — and
63
+ * the resulting cross-path race was accepted on the grounds that a gated delivery only ever
64
+ * writes onto a render-verified empty prompt and `interrupt` is an explicit human action.
65
+ * That reasoning covered one ordering (a delivery landing inside the interrupt's `^C`→settle
66
+ * →text window) and missed two:
67
+ *
68
+ * - a `^C` landing inside the DELIVERY's own text→Enter window (50–130 ms+) cleared the
69
+ * composer, so the delivery's Enter submitted nothing — yet every byte had reached the
70
+ * PTY, so the write reported success and the row was marked `delivered`. Silent loss with
71
+ * a false audit record, which is the one outcome Spec 1313 exists to exclude;
72
+ * - `--escape` (ESC, then Enter 50 ms later) produced the truncated variant, and is the
73
+ * MORE likely trigger for a multi-line body, because the delivery's exposed window is
74
+ * longest exactly when the body is long.
75
+ *
76
+ * The "a human is standing at this terminal" premise also does not hold for the DELAYED
77
+ * `^C`, which fires unattended on a timer.
78
+ *
79
+ * ### Lock order, and why there is no cycle
80
+ *
81
+ * Always per-agent → per-terminal. The delivery path takes this lock as a leaf inside
82
+ * `KeyedSerializer`; the operator paths take only this one and never enter the per-agent
83
+ * serializer. Re-entrancy is impossible in the other direction too: `PtySession.write()`
84
+ * emits no `'submit'` signal (only `handleUserInput` does, for human keystrokes), so no
85
+ * write from inside a lock can schedule a delivery synchronously.
86
+ *
87
+ * The lock is a leaf around the WRITE only, never the gate classify. `--interrupt` is the
88
+ * human's escape hatch for a wedged agent; making it queue behind a screen classification
89
+ * would be a real regression for the one action that must always get through.
90
+ *
91
+ * ### Asymmetric acquisition: deliveries decline, operators wait
92
+ *
93
+ * A delivery uses {@link trySubmitToSession} and abandons its turn on contention, because
94
+ * `MailboxDrainer.tick` walks agents SEQUENTIALLY — one delivery parked on a terminal lock
95
+ * would stall every other agent's mail, plus that tick's escalation and prune passes. It
96
+ * costs nothing: a contended terminal means the delivery's in-lock precheck would have
97
+ * aborted it anyway, and the row simply re-delivers on the next clean pass.
98
+ *
99
+ * Operators block — bounded by {@link OPERATOR_SUBMIT_WAIT_CEILING_MS}, because a paced
100
+ * write runs `(lines−1)×10+80` ms and a body is capped only by `parseJsonBody`'s 1 MiB.
101
+ *
102
+ * The ceiling may only ever bypass a DELIVERY write, never another operator (codex review of
103
+ * PR #1492). Operator-vs-operator was ALWAYS fully serialized before #1365 — `submitToSession`
104
+ * had no ceiling — so a ceiling that could skip a queued or in-flight operator would make that
105
+ * one pair strictly WORSE than the old behaviour, which is the opposite of the point. The
106
+ * {@link SubmissionKind} tag plus the pending-operator count is what keeps the guarantee true
107
+ * per pair:
108
+ *
109
+ * - operator vs operator — fully serialized, unbounded wait, exactly as before #1365;
110
+ * - operator vs delivery — serialized under the ceiling, and above it degraded to the
111
+ * pre-#1365 behaviour (two disjoint locks, i.e. no serialization at all), so never worse;
112
+ * - delivery vs delivery — the per-agent serializer, unchanged, plus a declined contention.
113
+ *
114
+ * ### What is guaranteed, and what is not
115
+ *
116
+ * **Serialization is the structural guarantee**: no lock-taking writer can put bytes on a
117
+ * terminal while another lock-taking writer's submission is in flight. That is a property of
118
+ * the lock, not of any check.
119
+ *
120
+ * The delivery path ALSO re-validates its preconditions inside the lock (`writable`, the
121
+ * gate's `ringToken`, and the row's own status). That re-check narrows a window; it does not
122
+ * close one, and it should not be described as if it did:
123
+ *
124
+ * - `ringToken` counts OUTPUT bytes, so input written by an uncovered path (the raw
125
+ * passthrough, or a human's keystrokes) can sit un-echoed on the line and read as
126
+ * unchanged. That echo-lag residual survives this change by design — it is #1473's
127
+ * territory.
128
+ * - Its real structural value is that it makes the ACQUISITION POLICY a free choice: were
129
+ * the delivery ever switched from declining to waiting (e.g. to order an interrupt ahead
130
+ * of its own body, per #1481), the precheck is what would keep that safe.
131
+ *
132
+ * The one hole this lock opens is its own degraded path: an operator whose ceiling expires
133
+ * writes unserialized. Rather than leave that as a second silent-loss route, degraded writes
134
+ * are COUNTED per session ({@link unserializedWriteCount}); `submitMessagePaced` holds a
135
+ * {@link watchBypasses} watch across its write and reports `preempted`, so the delivery holds
136
+ * its row for redelivery instead of reporting a delivery that may have been clobbered.
137
+ * Deliberately no screen re-classification — the question is only "did anyone bypass the lock
138
+ * while I held it?", and a counter answers exactly that. The count is BYTES, not intent: a
139
+ * degraded write whose callback declines to write anything (the delayed `^C` re-checks
140
+ * liveness inside the lock) bumps nothing, because there is nothing for a delivery to have
141
+ * been raced by.
69
142
  */
70
143
  /**
71
144
  * Tail of the in-flight submission chain per session.
72
145
  *
73
146
  * A session's entry is deleted once its chain drains, so this cannot grow
74
- * without bound across a long-lived Tower.
147
+ * without bound across a long-lived Tower. Its presence is also the contention
148
+ * signal both {@link isSubmissionInFlight} and {@link trySubmitToSession} read.
75
149
  */
76
150
  const chains = new Map();
77
151
  const realClock = {
78
152
  sleep: (ms) => new Promise(resolve => setTimeout(resolve, ms)),
79
153
  };
154
+ /** Marker resolved by the ceiling timer so the race can tell who won. */
155
+ const CEILING_EXPIRED = Symbol('ceiling-expired');
156
+ /**
157
+ * How long an OPERATOR submission (`--interrupt`, `--escape`, the delayed `^C`) waits for an
158
+ * in-flight submission before proceeding unserialized (Issue #1365).
159
+ *
160
+ * Needed because a paced write's duration is `(lines−1)×10+80` ms and a request body is capped
161
+ * only by `parseJsonBody`'s 1 MiB, so a 48 KB `--file` of short lines is ~8 minutes on the wire.
162
+ * Blocking `--interrupt` — the human's escape hatch for a wedged agent — behind that would be a
163
+ * worse regression than the interleaving this lock closes. Two seconds comfortably covers every
164
+ * realistic message while keeping the escape hatch responsive.
165
+ *
166
+ * It applies ONLY against a delivery write; behind another operator the wait stays unbounded
167
+ * (see {@link SubmitOptions.waitCeilingMs}). And when it does expire, the caller must SAY so —
168
+ * `/api/send` reports `degraded: true` — because a degraded operator write may interleave with
169
+ * the write it skipped, and the interrupt path has already claimed its row `delivered`.
170
+ */
171
+ export const OPERATOR_SUBMIT_WAIT_CEILING_MS = 2000;
172
+ /**
173
+ * Per-session count of submissions that gave up waiting and wrote UNSERIALIZED
174
+ * (Issue #1365 — the {@link OPERATOR_SUBMIT_WAIT_CEILING_MS} degraded path).
175
+ *
176
+ * A monotone counter, not a flag, so a concurrent writer can sample it before and after
177
+ * its own write and detect a race that started *and* finished in between. Entries are
178
+ * per session id and only ever created on the degraded path, which is rare by
179
+ * construction — it needs a write long enough to hold the line past the ceiling AND a
180
+ * concurrent operator action.
181
+ *
182
+ * Evicted by {@link evictBypassCountIfIdle} once the session has no submission in flight and
183
+ * no {@link watchBypasses} watch outstanding, so a long-lived Tower does not retain one entry
184
+ * per session that ever degraded (claude review of PR #1492 — the leak class #1472 fixed).
185
+ * Unlike {@link chains} it cannot simply self-delete on drain: it must outlive the submission
186
+ * whose watcher is about to compare against it.
187
+ */
188
+ const unserializedWrites = new Map();
189
+ /**
190
+ * Open {@link watchBypasses} watches per session — the interlock that makes eviction safe.
191
+ *
192
+ * A watcher compares the counter before and after its own write. Resetting the counter to 0
193
+ * between those two reads would read as "nobody raced me", which is exactly the false
194
+ * `delivered` this whole issue exists to eliminate. So eviction is refused while a watch is
195
+ * open, and re-attempted when the last one closes.
196
+ */
197
+ const bypassWatchers = new Map();
198
+ /**
199
+ * Watch a session for degraded (ceiling-bypassing) writes across your own write.
200
+ *
201
+ * Open before the first byte, {@link BypassWatch.raced} after the last, and
202
+ * {@link BypassWatch.release} in a `finally`. Holding the watch is what pins the underlying
203
+ * count in place: without it the entry may be evicted the moment the session goes idle, and
204
+ * a reset between the two reads would look like "no race".
205
+ */
206
+ export function watchBypasses(sessionId) {
207
+ const before = unserializedWrites.get(sessionId) ?? 0;
208
+ bypassWatchers.set(sessionId, (bypassWatchers.get(sessionId) ?? 0) + 1);
209
+ let released = false;
210
+ return {
211
+ raced: () => (unserializedWrites.get(sessionId) ?? 0) !== before,
212
+ release: () => {
213
+ if (released)
214
+ return; // idempotent: a `finally` may run after an explicit release
215
+ released = true;
216
+ const remaining = (bypassWatchers.get(sessionId) ?? 1) - 1;
217
+ if (remaining > 0) {
218
+ bypassWatchers.set(sessionId, remaining);
219
+ }
220
+ else {
221
+ bypassWatchers.delete(sessionId);
222
+ evictBypassCountIfIdle(sessionId);
223
+ }
224
+ },
225
+ };
226
+ }
227
+ /**
228
+ * Drop a session's degraded-write count once nothing can still be comparing against it.
229
+ *
230
+ * Called from BOTH ends of the interlock — the chain's drain cleanup and the last watch's
231
+ * release — so whichever happens second is the one that evicts, and neither ordering leaks.
232
+ * Requires no session-teardown hook: a session with no chain and no watcher is quiescent by
233
+ * definition, and the next degraded write simply re-creates the entry at 0.
234
+ */
235
+ function evictBypassCountIfIdle(sessionId) {
236
+ if (bypassWatchers.has(sessionId))
237
+ return; // a comparison window is open — resetting would lie
238
+ if (chains.has(sessionId))
239
+ return; // a submission is live and could still degrade
240
+ unserializedWrites.delete(sessionId);
241
+ }
242
+ /**
243
+ * Per-session count of OPERATOR submissions queued or in flight (Issue #1365, codex review).
244
+ *
245
+ * The ceiling consults this before arming: while any operator is ahead of us — running OR
246
+ * merely queued — we wait as long as it takes, exactly as every submission did before the
247
+ * ceiling existed. A queued operator counts because bypassing one that has not started yet
248
+ * is the same violation as bypassing one mid-write.
249
+ */
250
+ const pendingOperators = new Map();
251
+ /**
252
+ * How many unserialized (ceiling-expired) writes this session has seen.
253
+ *
254
+ * The point of comparison for a writer that wants to know whether its own submission was
255
+ * raced: sample before the first byte, compare after the last. Cheaper and far more
256
+ * direct than re-classifying the screen — it asks "did anyone bypass the lock while I
257
+ * held it?", which is exactly the question, and needs no terminal rendering at all.
258
+ */
259
+ export function unserializedWriteCount(sessionId) {
260
+ return unserializedWrites.get(sessionId) ?? 0;
261
+ }
262
+ /**
263
+ * Whether a submission is queued or in flight for this session RIGHT NOW.
264
+ *
265
+ * Read by {@link trySubmitToSession} and exposed for telemetry. Safe to act on
266
+ * without a lock of its own: the runtime is single-threaded and every mutation of
267
+ * `chains` happens with no await in between, so a caller that observes `false`
268
+ * cannot be beaten to the install by another caller in the same tick.
269
+ */
270
+ export function isSubmissionInFlight(sessionId) {
271
+ return chains.has(sessionId);
272
+ }
80
273
  /**
81
274
  * Run a write against a session so that it completes before any other
82
275
  * submission to the same session begins.
@@ -86,42 +279,140 @@ const realClock = {
86
279
  * keystroke (the Enter) has been written. This is exactly what
87
280
  * `writeMessageToSession` / `writeEscapeToSession` already
88
281
  * return, so callers pass them through unchanged.
282
+ * @param clock injectable sleeper; real timers by default
283
+ * @param options {@link SubmitOptions} — the operator paths pass a wait ceiling
89
284
  * @returns resolves once the submission is complete
90
285
  */
91
- export function submitToSession(sessionId, write, clock = realClock) {
286
+ export function submitToSession(sessionId, write, clock = realClock, options = {}) {
92
287
  const previous = chains.get(sessionId) ?? Promise.resolve();
93
- const current = previous
94
- // A failed predecessor must not poison the chain — the next submission is a
95
- // separate message and is still entitled to run.
96
- .catch(() => undefined)
97
- .then(async () => {
288
+ // A failed predecessor must not poison the chain — the next submission is a
289
+ // separate message and is still entitled to run.
290
+ const previousSettled = previous.then(() => undefined, () => undefined);
291
+ // Only a CONTENDED submission can wait, so an uncontended one must not arm a
292
+ // ceiling timer it would then leave dangling for its whole duration.
293
+ const contended = chains.has(sessionId);
294
+ const ceilingMs = options.waitCeilingMs;
295
+ // An operator ahead of us — in flight or merely queued — makes this an operator-vs-operator
296
+ // wait, which was UNBOUNDED before #1365 and must stay unbounded (see waitCeilingMs).
297
+ const behindOperator = (pendingOperators.get(sessionId) ?? 0) > 0;
298
+ const bounded = contended && ceilingMs !== undefined && ceilingMs >= 0 && !behindOperator;
299
+ // Count ourselves only AFTER the check above, so we do not read our own presence as a
300
+ // reason to block, and BEFORE any await, so a later operator sees us while we are queued.
301
+ const kind = options.kind ?? 'operator';
302
+ if (kind === 'operator')
303
+ pendingOperators.set(sessionId, (pendingOperators.get(sessionId) ?? 0) + 1);
304
+ const current = (async () => {
305
+ let bypassed = false;
306
+ if (bounded) {
307
+ const winner = await Promise.race([
308
+ previousSettled,
309
+ clock.sleep(ceilingMs).then(() => CEILING_EXPIRED),
310
+ ]);
311
+ // Ceiling expired → proceed WITHOUT serialization. This is a deliberate,
312
+ // announced degradation to exactly the pre-Issue-#1365 behaviour for the ONE pair it
313
+ // can affect: an operator write against a delivery, which held a disjoint lock and so
314
+ // was never serialized against an operator at all. (Operator-vs-operator never arms
315
+ // the ceiling — see `bounded` above — so that pair keeps its unbounded wait.) Taken
316
+ // only when the alternative is stalling `--interrupt`, the human's escape hatch,
317
+ // behind a write that may run for minutes. See the boundary comment above.
318
+ if (winner === CEILING_EXPIRED) {
319
+ bypassed = true;
320
+ options.onCeilingExpired?.(ceilingMs);
321
+ }
322
+ }
323
+ else {
324
+ await previousSettled;
325
+ }
98
326
  const completesInMs = write();
327
+ // Count the bypass only once bytes actually went out: a degraded write that declined to
328
+ // write anything raced nobody. Placed straight after `write()` with NO await in between,
329
+ // so a delivery holding the line still cannot observe our bytes without also observing
330
+ // the bump when it re-samples after its own write.
331
+ if (bypassed && (options.wroteBytes?.() ?? true)) {
332
+ unserializedWrites.set(sessionId, unserializedWriteCount(sessionId) + 1);
333
+ }
99
334
  // Wait out the scheduled Enter. Zero means the write was fully synchronous
100
335
  // (`noEnter`), so there is nothing pending to wait for.
101
336
  if (completesInMs > 0)
102
337
  await clock.sleep(completesInMs);
103
- });
104
- chains.set(sessionId, current);
338
+ })();
339
+ // The stored tail settles only once BOTH this submission and its predecessor are
340
+ // done. Identical to `current` on the normal path (current already awaited the
341
+ // predecessor); it matters on the degraded path, where the predecessor is still
342
+ // running — a third submission must not be released by our early finish.
343
+ const tail = bounded
344
+ ? Promise.all([previousSettled, current.then(() => undefined, () => undefined)]).then(() => undefined)
345
+ : current.then(() => undefined, () => undefined);
346
+ chains.set(sessionId, tail);
347
+ // Release our operator claim as soon as OUR write is done — a later operator may then be
348
+ // bypass-eligible again if only deliveries remain ahead of it.
349
+ if (kind === 'operator') {
350
+ void current.then(() => undefined, () => undefined).then(() => {
351
+ const remaining = (pendingOperators.get(sessionId) ?? 1) - 1;
352
+ if (remaining > 0)
353
+ pendingOperators.set(sessionId, remaining);
354
+ else
355
+ pendingOperators.delete(sessionId);
356
+ });
357
+ }
105
358
  // Drop the entry once this is the last submission in flight, so the map does
106
359
  // not accumulate one promise per session for the life of the process.
107
360
  //
108
- // The rejection is swallowed HERE and re-surfaced only through the returned
109
- // promise: without the catch, this bookkeeping branch would raise an
110
- // unhandled rejection for any failed write, even when the caller handled it.
111
- void current
112
- .then(() => undefined, () => undefined)
113
- .then(() => {
114
- if (chains.get(sessionId) === current)
361
+ // The tail already swallows both outcomes, so this bookkeeping branch can never
362
+ // raise an unhandled rejection for a failed write — the rejection surfaces only
363
+ // through the returned `current`.
364
+ void tail.then(() => {
365
+ if (chains.get(sessionId) === tail)
115
366
  chains.delete(sessionId);
367
+ // The session may now be quiescent — try to drop its degraded-write count too. Refused
368
+ // while a watch is open; that watch's release re-tries, so the second one wins.
369
+ evictBypassCountIfIdle(sessionId);
116
370
  });
117
371
  return current;
118
372
  }
373
+ /**
374
+ * {@link submitToSession} for a writer that would rather skip its turn than wait
375
+ * for one — the gated mailbox delivery path (Issue #1365).
376
+ *
377
+ * Resolves `false` **without writing anything** when another submission already
378
+ * holds the session. That is the right trade for a gated delivery and the wrong one
379
+ * for an operator action, which is why the two differ:
380
+ *
381
+ * - A contended terminal means some other writer is mid-submission, so the
382
+ * delivery's in-lock precheck would have aborted it anyway (the screen has
383
+ * moved, or is about to). Nothing is lost by declining now: the row stays held
384
+ * and the backstop re-delivers within one tick.
385
+ * - Blocking instead would be a genuine liveness regression, because
386
+ * `MailboxDrainer.tick` walks agents SEQUENTIALLY — one agent parked on a
387
+ * terminal lock would stall every other agent's delivery, plus that tick's
388
+ * escalation, owner-notice and prune passes.
389
+ *
390
+ * @returns `true` when the write ran (and completed), `false` when the session was
391
+ * contended and nothing was written.
392
+ */
393
+ export async function trySubmitToSession(sessionId, write, clock = realClock) {
394
+ if (isSubmissionInFlight(sessionId))
395
+ return false;
396
+ await submitToSession(sessionId, write, clock, { kind: 'delivery-write' });
397
+ return true;
398
+ }
119
399
  /** Number of sessions with a submission in flight. Test/observability only. */
120
400
  export function pendingSubmissionSessions() {
121
401
  return chains.size;
122
402
  }
123
- /** Drop all chains. Test-only; a live Tower should let them drain. */
403
+ /** Drop all chains and degraded-write counters. Test-only; a live Tower should let them drain. */
124
404
  export function resetSubmissionChains() {
125
405
  chains.clear();
406
+ unserializedWrites.clear();
407
+ pendingOperators.clear();
408
+ bypassWatchers.clear();
409
+ }
410
+ /**
411
+ * How many sessions still carry a degraded-write count. Test/observability only — the
412
+ * assertion that {@link unserializedWrites} self-evicts rather than growing for the life of
413
+ * a Tower.
414
+ */
415
+ export function bypassCountedSessions() {
416
+ return unserializedWrites.size;
126
417
  }
127
418
  //# sourceMappingURL=session-submit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-submit.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/session-submit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;AAOhD,MAAM,SAAS,GAAgB;IAC7B,KAAK,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;CACvE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,SAAiB,EACjB,KAAmB,EACnB,QAAqB,SAAS;IAE9B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAE5D,MAAM,OAAO,GAAG,QAAQ;QACtB,4EAA4E;QAC5E,iDAAiD;SAChD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;SACtB,IAAI,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,aAAa,GAAG,KAAK,EAAE,CAAC;QAC9B,2EAA2E;QAC3E,wDAAwD;QACxD,IAAI,aAAa,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEL,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE/B,6EAA6E;IAC7E,sEAAsE;IACtE,EAAE;IACF,4EAA4E;IAC5E,qEAAqE;IACrE,6EAA6E;IAC7E,KAAK,OAAO;SACT,IAAI,CACH,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB;SACA,IAAI,CAAC,GAAG,EAAE;QACT,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,OAAO;YAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,yBAAyB;IACvC,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,qBAAqB;IACnC,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"session-submit.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/session-submit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tower-cron.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-cron.ts"],"names":[],"mappings":"AAaA,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAO1E,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,sBAAsB,EAAE,MAAM,MAAM,EAAE,CAAC;IACvC;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC3E;AAeD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAejD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAOnC;AAED,wBAAgB,WAAW,IAAI,QAAQ,EAAE,CAOxC;AAMD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,EAAE,CAwDpE;AAMD,wBAAgB,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzE;AAMD,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B1C;AA0BD,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAwD7F;AAmCD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,OAAO,CAI1F"}
1
+ {"version":3,"file":"tower-cron.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-cron.ts"],"names":[],"mappings":"AAaA,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAQ1E,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,sBAAsB,EAAE,MAAM,MAAM,EAAE,CAAC;IACvC;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC3E;AAeD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAejD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAOnC;AAED,wBAAgB,WAAW,IAAI,QAAQ,EAAE,CAOxC;AAMD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,EAAE,CAwDpE;AAMD,wBAAgB,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzE;AAMD,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B1C;AA0BD,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAwD7F;AAmCD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,OAAO,CAI1F"}
@@ -10,6 +10,7 @@ import { createHash } from 'node:crypto';
10
10
  import * as yaml from 'js-yaml';
11
11
  import { parseCronExpression, isDue } from './tower-cron-parser.js';
12
12
  import { CRON_SENDER } from './cron-delivery.js';
13
+ import { formatVerdict } from '@cluesmith/codev-sdk/hold-verdict';
13
14
  import { getGlobalDb } from '../db/index.js';
14
15
  // ============================================================================
15
16
  // Module state
@@ -271,10 +272,10 @@ async function deliverMessage(task, message) {
271
272
  deps.log('INFO', `Cron message delivered: ${CRON_SENDER} → ${task.target} (task '${task.name}')`);
272
273
  break;
273
274
  case 'superseded':
274
- deps.log('INFO', `Cron message held (${result.reason ?? 'busy'}), superseding the prior held run: ${CRON_SENDER} → ${task.target} (task '${task.name}')`);
275
+ deps.log('INFO', `Cron message held (${formatVerdict(result.reason, result.detail, 'busy')}), superseding the prior held run: ${CRON_SENDER} → ${task.target} (task '${task.name}')`);
275
276
  break;
276
277
  case 'held':
277
- deps.log('INFO', `Cron message held (${result.reason ?? 'busy'}): ${CRON_SENDER} → ${task.target} (task '${task.name}')`);
278
+ deps.log('INFO', `Cron message held (${formatVerdict(result.reason, result.detail, 'busy')}): ${CRON_SENDER} → ${task.target} (task '${task.name}')`);
278
279
  break;
279
280
  case 'unresolved':
280
281
  // deliverCronMessage already logged a WARN naming the unresolved target.
@@ -1 +1 @@
1
- {"version":3,"file":"tower-cron.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-cron.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tower-cron.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-cron.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tower-instances.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-instances.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tower-instances.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-instances.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ import { loadConfig } from '../../lib/config.js';
16
16
  const execAsync = promisify(exec);
17
17
  import { getGlobalDb } from '../db/index.js';
18
18
  import { defaultSessionOptions } from '../../terminal/index.js';
19
- import { getWorkspaceName, isTempDirectory, resolveArchitectLaunch, siblingRegistrationIsLive, buildArchitectCrashLoopFallback, buildArchitectFreshLaunch, } from './tower-utils.js';
19
+ import { getWorkspaceName, isTempDirectory, resolveArchitectLaunch, siblingRegistrationIsLive, buildArchitectCrashLoopFallback, buildArchitectFreshLaunch, persistableCommand, logSessionIdentity, } from './tower-utils.js';
20
20
  import { reconcileArchitectSessionHolder, findOwnArchitectShellpers, reapShellpers, } from './architect-session-holder.js';
21
21
  import { autoNumberArchitectName, validateArchitectName, DEFAULT_ARCHITECT_NAME, } from '../utils/architect-name.js';
22
22
  import { RetiredHarnessError } from '../utils/harness.js';
@@ -546,7 +546,12 @@ export async function launchInstance(workspacePath) {
546
546
  }
547
547
  // Spec 755: default architect is named 'main'; role_id stores the name.
548
548
  entry.architects.set('main', session.id);
549
- _deps.saveTerminalSession(session.id, resolvedPath, 'architect', 'main', shellperInfo.pid, shellperInfo.socketPath, shellperInfo.pid, shellperInfo.startTime, null, workspacePath, cmd);
549
+ // PIR #1475: persist what the session reports. A fresh spawn is the
550
+ // no-op case — the shellper's WELCOME echoes the `cmd` we just gave
551
+ // it — but the accessor keeps one rule at every persist site: the row
552
+ // records what is RUNNING, not what was requested.
553
+ logSessionIdentity(_deps.log, 'architect-launch', session.id, ptySession, cmd);
554
+ _deps.saveTerminalSession(session.id, resolvedPath, 'architect', 'main', shellperInfo.pid, shellperInfo.socketPath, shellperInfo.pid, shellperInfo.startTime, null, workspacePath, persistableCommand(ptySession) ?? cmd);
550
555
  // Spec 755: persist to local state.db (architect table) so afx
551
556
  // status / stop see the architect via loadState's scalar shim.
552
557
  // Bugfix #826: scoped by workspace_path.
@@ -1032,7 +1037,10 @@ export async function addArchitect(workspacePath, requestedName) {
1032
1037
  ptySession.restartOnExit = true;
1033
1038
  }
1034
1039
  entry.architects.set(name, session.id);
1035
- _deps.saveTerminalSession(session.id, resolvedPath, 'architect', name, shellperInfo.pid, shellperInfo.socketPath, shellperInfo.pid, shellperInfo.startTime, null, workspacePath, cmd);
1040
+ // PIR #1475: hydrated identity wins; a fresh spawn echoes `cmd` (see the
1041
+ // main-architect launch above).
1042
+ logSessionIdentity(_deps.log, 'architect-launch-sibling', session.id, ptySession, cmd);
1043
+ _deps.saveTerminalSession(session.id, resolvedPath, 'architect', name, shellperInfo.pid, shellperInfo.socketPath, shellperInfo.pid, shellperInfo.startTime, null, workspacePath, persistableCommand(ptySession) ?? cmd);
1036
1044
  // Spec 755: persist to local state.db so the architect appears in
1037
1045
  // getArchitects() and is included in legacy stop.ts cleanup.
1038
1046
  // Bugfix #826: scoped by workspace_path.