@rubytech/create-maxy-code 0.1.542 → 0.1.543

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 (320) hide show
  1. package/dist/index.js +37 -0
  2. package/package.json +1 -1
  3. package/payload/platform/lib/shared-folder/dist/index.d.ts +47 -0
  4. package/payload/platform/lib/shared-folder/dist/index.d.ts.map +1 -0
  5. package/payload/platform/lib/shared-folder/dist/index.js +93 -0
  6. package/payload/platform/lib/shared-folder/dist/index.js.map +1 -0
  7. package/payload/platform/lib/shared-folder/src/index.ts +92 -0
  8. package/payload/platform/lib/shared-folder/tsconfig.json +5 -0
  9. package/payload/platform/package.json +2 -2
  10. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +15 -1
  11. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +8 -0
  12. package/payload/platform/plugins/docs/references/access-control.md +14 -0
  13. package/payload/platform/plugins/filesystem/.claude-plugin/plugin.json +1 -1
  14. package/payload/platform/plugins/filesystem/PLUGIN.md +11 -1
  15. package/payload/platform/plugins/filesystem/mcp/dist/index.js +23 -7
  16. package/payload/platform/plugins/filesystem/mcp/dist/index.js.map +1 -1
  17. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/scope.test.js +104 -4
  18. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/scope.test.js.map +1 -1
  19. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/shared-folder.test.d.ts +2 -0
  20. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/shared-folder.test.d.ts.map +1 -0
  21. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/shared-folder.test.js +67 -0
  22. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/shared-folder.test.js.map +1 -0
  23. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts +16 -2
  24. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts.map +1 -1
  25. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js +54 -1
  26. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js.map +1 -1
  27. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/handlers.test.js +76 -2
  28. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/handlers.test.js.map +1 -1
  29. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.d.ts +1 -0
  30. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.d.ts.map +1 -1
  31. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.js +3 -3
  32. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.js.map +1 -1
  33. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-glob.d.ts +1 -0
  34. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-glob.d.ts.map +1 -1
  35. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-glob.js +1 -1
  36. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-glob.js.map +1 -1
  37. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-grep.d.ts +1 -0
  38. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-grep.d.ts.map +1 -1
  39. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-grep.js +3 -3
  40. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-grep.js.map +1 -1
  41. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-list.d.ts +1 -0
  42. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-list.d.ts.map +1 -1
  43. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-list.js +3 -3
  44. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-list.js.map +1 -1
  45. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-read.d.ts +1 -0
  46. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-read.d.ts.map +1 -1
  47. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-read.js +3 -3
  48. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-read.js.map +1 -1
  49. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.d.ts +1 -0
  50. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.d.ts.map +1 -1
  51. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.js +3 -3
  52. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.js.map +1 -1
  53. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js +81 -1
  54. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js.map +1 -1
  55. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +22 -0
  56. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
  57. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +80 -0
  58. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
  59. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +13 -1
  60. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  61. package/payload/platform/plugins/whatsapp/PLUGIN.md +2 -2
  62. package/payload/platform/plugins/whatsapp/mcp/dist/index.js +1 -1
  63. package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
  64. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +1 -1
  65. package/payload/platform/scripts/check-no-esm-require.mjs +5 -0
  66. package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.d.ts +8 -4
  67. package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.d.ts.map +1 -1
  68. package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.js +27 -7
  69. package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.js.map +1 -1
  70. package/payload/platform/services/claude-session-manager/dist/config.d.ts +11 -6
  71. package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
  72. package/payload/platform/services/claude-session-manager/dist/config.js +8 -4
  73. package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
  74. package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts +2 -2
  75. package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts.map +1 -1
  76. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +35 -0
  77. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  78. package/payload/platform/services/claude-session-manager/dist/http-server.js +136 -19
  79. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  80. package/payload/platform/services/claude-session-manager/dist/index.js +98 -26
  81. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  82. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +24 -12
  83. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  84. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +130 -27
  85. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  86. package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.d.ts.map +1 -1
  87. package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.js +4 -0
  88. package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.js.map +1 -1
  89. package/payload/platform/services/claude-session-manager/dist/role-census.d.ts +24 -0
  90. package/payload/platform/services/claude-session-manager/dist/role-census.d.ts.map +1 -0
  91. package/payload/platform/services/claude-session-manager/dist/role-census.js +50 -0
  92. package/payload/platform/services/claude-session-manager/dist/role-census.js.map +1 -0
  93. package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts +9 -2
  94. package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts.map +1 -1
  95. package/payload/platform/services/claude-session-manager/dist/session-sidecar.js +13 -0
  96. package/payload/platform/services/claude-session-manager/dist/session-sidecar.js.map +1 -1
  97. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.d.ts +67 -0
  98. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.d.ts.map +1 -1
  99. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.js +101 -19
  100. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.js.map +1 -1
  101. package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts +19 -0
  102. package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts.map +1 -1
  103. package/payload/platform/services/claude-session-manager/dist/stuck-turn.js +37 -2
  104. package/payload/platform/services/claude-session-manager/dist/stuck-turn.js.map +1 -1
  105. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +1 -1
  106. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  107. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +9 -1
  108. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  109. package/payload/platform/services/claude-session-manager/dist/types.d.ts +9 -3
  110. package/payload/platform/services/claude-session-manager/dist/types.d.ts.map +1 -1
  111. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +105 -8
  112. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  113. package/payload/platform/services/whatsapp-channel/dist/notification.js +108 -10
  114. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  115. package/payload/platform/services/whatsapp-channel/dist/server.d.ts +18 -0
  116. package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
  117. package/payload/platform/services/whatsapp-channel/dist/server.js +86 -5
  118. package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
  119. package/payload/platform/services/whatsapp-channel/dist/targets.d.ts +38 -7
  120. package/payload/platform/services/whatsapp-channel/dist/targets.d.ts.map +1 -1
  121. package/payload/platform/services/whatsapp-channel/dist/targets.js +42 -7
  122. package/payload/platform/services/whatsapp-channel/dist/targets.js.map +1 -1
  123. package/payload/platform/templates/agents/admin/INSTRUCTION.md +15 -0
  124. package/payload/server/{adminuser-self-heal-LC7HZAC6.js → adminuser-self-heal-ZHFNDKJK.js} +1 -1
  125. package/payload/server/{chunk-CKTHAHL4.js → chunk-BIHII3CT.js} +3 -2
  126. package/payload/server/{chunk-PFF6I7KP.js → chunk-HYQNUVGO.js} +8 -1
  127. package/payload/server/{chunk-HZP7BKBF.js → chunk-MGW536C5.js} +128 -4
  128. package/payload/server/{chunk-ERIM3EFB.js → chunk-RSNVIN4G.js} +1 -1
  129. package/payload/server/{manager-CM55K4J2.js → manager-GJHKO7WW.js} +3 -3
  130. package/payload/server/maxy-edge.js +3 -3
  131. package/payload/server/public/activity.html +5 -5
  132. package/payload/server/public/agents.html +4 -4
  133. package/payload/server/public/assets/AdminLoginScreens-C1iXeR-9.js +1 -0
  134. package/payload/server/public/assets/AdminLoginScreens-C1iXeR-9.js.br +0 -0
  135. package/payload/server/public/assets/AdminLoginScreens-C1iXeR-9.js.gz +0 -0
  136. package/payload/server/public/assets/AdminShell-BeIGNC1Q.js +2 -0
  137. package/payload/server/public/assets/AdminShell-BeIGNC1Q.js.br +0 -0
  138. package/payload/server/public/assets/AdminShell-BeIGNC1Q.js.gz +0 -0
  139. package/payload/server/public/assets/activity-AaFvfwrZ.js +1 -0
  140. package/payload/server/public/assets/activity-AaFvfwrZ.js.br +0 -0
  141. package/payload/server/public/assets/activity-AaFvfwrZ.js.gz +0 -0
  142. package/payload/server/public/assets/admin-Bz34CZqL.js +1 -0
  143. package/payload/server/public/assets/admin-Bz34CZqL.js.br +0 -0
  144. package/payload/server/public/assets/admin-Bz34CZqL.js.gz +0 -0
  145. package/payload/server/public/assets/agents-N0z7qg8a.js +1 -0
  146. package/payload/server/public/assets/agents-N0z7qg8a.js.br +0 -0
  147. package/payload/server/public/assets/agents-N0z7qg8a.js.gz +0 -0
  148. package/payload/server/public/assets/browser-_k-v0iky.js +1 -0
  149. package/payload/server/public/assets/browser-_k-v0iky.js.br +0 -0
  150. package/payload/server/public/assets/browser-_k-v0iky.js.gz +0 -0
  151. package/payload/server/public/assets/calendar-D_DvVRJS.js +1 -0
  152. package/payload/server/public/assets/calendar-D_DvVRJS.js.br +0 -0
  153. package/payload/server/public/assets/calendar-D_DvVRJS.js.gz +0 -0
  154. package/payload/server/public/assets/chat-BbAsvXL_.js +1 -0
  155. package/payload/server/public/assets/chat-BbAsvXL_.js.br +1 -0
  156. package/payload/server/public/assets/chat-BbAsvXL_.js.gz +0 -0
  157. package/payload/server/public/assets/chevron-left-trZmu0ZU.js +1 -0
  158. package/payload/server/public/assets/chevron-left-trZmu0ZU.js.br +0 -0
  159. package/payload/server/public/assets/chevron-right-BiGJuNSX.js +1 -0
  160. package/payload/server/public/assets/chevron-right-BiGJuNSX.js.br +0 -0
  161. package/payload/server/public/assets/clock-DAeRdj4p.js +1 -0
  162. package/payload/server/public/assets/clock-DAeRdj4p.js.br +0 -0
  163. package/payload/server/public/assets/clock-DAeRdj4p.js.gz +0 -0
  164. package/payload/server/public/assets/{copy-3kj9Oaoc.js → copy-BDoxl3Oi.js} +1 -1
  165. package/payload/server/public/assets/copy-BDoxl3Oi.js.br +0 -0
  166. package/payload/server/public/assets/copy-BDoxl3Oi.js.gz +0 -0
  167. package/payload/server/public/assets/data-DB6T1I-w.js +1 -0
  168. package/payload/server/public/assets/data-DB6T1I-w.js.br +1 -0
  169. package/payload/server/public/assets/data-DB6T1I-w.js.gz +0 -0
  170. package/payload/server/public/assets/{file-text-CBaewT76.js → file-text-DRGn4gjH.js} +1 -1
  171. package/payload/server/public/assets/file-text-DRGn4gjH.js.br +0 -0
  172. package/payload/server/public/assets/file-text-DRGn4gjH.js.gz +0 -0
  173. package/payload/server/public/assets/{graph-B8-e2_Z-.js → graph-D7ECsLPs.js} +3 -3
  174. package/payload/server/public/assets/graph-D7ECsLPs.js.br +0 -0
  175. package/payload/server/public/assets/graph-D7ECsLPs.js.gz +0 -0
  176. package/payload/server/public/assets/{graph-labels-Bsc23eZU.js → graph-labels-ClzmLEoK.js} +1 -1
  177. package/payload/server/public/assets/graph-labels-ClzmLEoK.js.br +0 -0
  178. package/payload/server/public/assets/graph-labels-ClzmLEoK.js.gz +0 -0
  179. package/payload/server/public/assets/operator-jSdha7TP.js +1 -0
  180. package/payload/server/public/assets/operator-jSdha7TP.js.br +0 -0
  181. package/payload/server/public/assets/operator-jSdha7TP.js.gz +0 -0
  182. package/payload/server/public/assets/page-Cq4SkWbr.js +1 -0
  183. package/payload/server/public/assets/page-Cq4SkWbr.js.br +0 -0
  184. package/payload/server/public/assets/page-Cq4SkWbr.js.gz +0 -0
  185. package/payload/server/public/assets/page-DrwRXi3K.js +32 -0
  186. package/payload/server/public/assets/page-DrwRXi3K.js.br +0 -0
  187. package/payload/server/public/assets/page-DrwRXi3K.js.gz +0 -0
  188. package/payload/server/public/assets/play-CWyPEXiB.js +1 -0
  189. package/payload/server/public/assets/play-CWyPEXiB.js.br +0 -0
  190. package/payload/server/public/assets/play-CWyPEXiB.js.gz +0 -0
  191. package/payload/server/public/assets/public-D7MfkWvM.js +1 -0
  192. package/payload/server/public/assets/public-D7MfkWvM.js.br +0 -0
  193. package/payload/server/public/assets/public-D7MfkWvM.js.gz +0 -0
  194. package/payload/server/public/assets/{rotate-ccw-FZW7c8p8.js → rotate-ccw-CaWP-njL.js} +1 -1
  195. package/payload/server/public/assets/rotate-ccw-CaWP-njL.js.br +0 -0
  196. package/payload/server/public/assets/rotate-ccw-CaWP-njL.js.gz +0 -0
  197. package/payload/server/public/assets/routines-XTk0vJUD.js +2 -0
  198. package/payload/server/public/assets/routines-XTk0vJUD.js.br +0 -0
  199. package/payload/server/public/assets/routines-XTk0vJUD.js.gz +0 -0
  200. package/payload/server/public/assets/skills-sjTaAr0v.js +1 -0
  201. package/payload/server/public/assets/skills-sjTaAr0v.js.br +0 -0
  202. package/payload/server/public/assets/skills-sjTaAr0v.js.gz +0 -0
  203. package/payload/server/public/assets/tasks-D0-qwWZR.js +3 -0
  204. package/payload/server/public/assets/tasks-D0-qwWZR.js.br +0 -0
  205. package/payload/server/public/assets/tasks-D0-qwWZR.js.gz +0 -0
  206. package/payload/server/public/assets/{triangle-alert-CR-jRJdI.js → triangle-alert-BCndBPvE.js} +1 -1
  207. package/payload/server/public/assets/triangle-alert-BCndBPvE.js.br +0 -0
  208. package/payload/server/public/assets/triangle-alert-BCndBPvE.js.gz +0 -0
  209. package/payload/server/public/assets/useCopyFeedback-BFMmBvVw.js +1 -0
  210. package/payload/server/public/assets/useCopyFeedback-BFMmBvVw.js.br +0 -0
  211. package/payload/server/public/assets/useCopyFeedback-BFMmBvVw.js.gz +0 -0
  212. package/payload/server/public/assets/useMediaQuery-CXdUnGSe.css +1 -0
  213. package/payload/server/public/assets/useMediaQuery-CXdUnGSe.css.br +0 -0
  214. package/payload/server/public/assets/useMediaQuery-CXdUnGSe.css.gz +0 -0
  215. package/payload/server/public/assets/useMediaQuery-q9BSy1Ld.js +14 -0
  216. package/payload/server/public/assets/useMediaQuery-q9BSy1Ld.js.br +0 -0
  217. package/payload/server/public/assets/useMediaQuery-q9BSy1Ld.js.gz +0 -0
  218. package/payload/server/public/assets/useVoiceRecorder-DmW6CW7B.js +2 -0
  219. package/payload/server/public/assets/useVoiceRecorder-DmW6CW7B.js.br +0 -0
  220. package/payload/server/public/assets/useVoiceRecorder-DmW6CW7B.js.gz +0 -0
  221. package/payload/server/public/assets/{wrench-CpCOYUBc.js → wrench-BBl51xDU.js} +1 -1
  222. package/payload/server/public/assets/wrench-BBl51xDU.js.br +0 -0
  223. package/payload/server/public/assets/wrench-BBl51xDU.js.gz +0 -0
  224. package/payload/server/public/browser.html +4 -4
  225. package/payload/server/public/calendar.html +8 -8
  226. package/payload/server/public/chat.html +13 -13
  227. package/payload/server/public/data.html +11 -11
  228. package/payload/server/public/graph.html +9 -9
  229. package/payload/server/public/index.html +14 -14
  230. package/payload/server/public/operator.html +14 -14
  231. package/payload/server/public/public.html +13 -13
  232. package/payload/server/public/routines.html +6 -6
  233. package/payload/server/public/skills.html +5 -5
  234. package/payload/server/public/tasks.html +6 -6
  235. package/payload/server/server.js +474 -254
  236. package/payload/server/{src-JN6PIAJN.js → src-MM64CYYZ.js} +1 -1
  237. package/payload/server/{userprofile-reconcile-QHVLY2AH.js → userprofile-reconcile-TL4JKBPG.js} +1 -1
  238. package/payload/server/public/assets/AdminLoginScreens-DuFCjbz2.js +0 -1
  239. package/payload/server/public/assets/AdminLoginScreens-DuFCjbz2.js.br +0 -0
  240. package/payload/server/public/assets/AdminLoginScreens-DuFCjbz2.js.gz +0 -0
  241. package/payload/server/public/assets/AdminShell-DJL5DzRX.js +0 -2
  242. package/payload/server/public/assets/AdminShell-DJL5DzRX.js.br +0 -0
  243. package/payload/server/public/assets/AdminShell-DJL5DzRX.js.gz +0 -0
  244. package/payload/server/public/assets/activity-CpMnNr5c.js +0 -1
  245. package/payload/server/public/assets/activity-CpMnNr5c.js.br +0 -0
  246. package/payload/server/public/assets/activity-CpMnNr5c.js.gz +0 -0
  247. package/payload/server/public/assets/admin-CBwKIfaI.js +0 -1
  248. package/payload/server/public/assets/admin-CBwKIfaI.js.br +0 -0
  249. package/payload/server/public/assets/admin-CBwKIfaI.js.gz +0 -0
  250. package/payload/server/public/assets/agents-C4LmSKjb.js +0 -1
  251. package/payload/server/public/assets/agents-C4LmSKjb.js.br +0 -0
  252. package/payload/server/public/assets/agents-C4LmSKjb.js.gz +0 -0
  253. package/payload/server/public/assets/browser-Bm9xm_yc.js +0 -1
  254. package/payload/server/public/assets/browser-Bm9xm_yc.js.br +0 -0
  255. package/payload/server/public/assets/browser-Bm9xm_yc.js.gz +0 -0
  256. package/payload/server/public/assets/calendar-CNY9FTWe.js +0 -1
  257. package/payload/server/public/assets/calendar-CNY9FTWe.js.br +0 -0
  258. package/payload/server/public/assets/calendar-CNY9FTWe.js.gz +0 -0
  259. package/payload/server/public/assets/chat-3WoUGCTd.js +0 -1
  260. package/payload/server/public/assets/chat-3WoUGCTd.js.br +0 -0
  261. package/payload/server/public/assets/chat-3WoUGCTd.js.gz +0 -0
  262. package/payload/server/public/assets/chevron-left-BE16BJnw.js +0 -1
  263. package/payload/server/public/assets/chevron-left-BE16BJnw.js.br +0 -0
  264. package/payload/server/public/assets/chevron-right-Bu2VKpeU.js +0 -1
  265. package/payload/server/public/assets/chevron-right-Bu2VKpeU.js.br +0 -0
  266. package/payload/server/public/assets/clock-C4Nu2aRV.js +0 -1
  267. package/payload/server/public/assets/clock-C4Nu2aRV.js.br +0 -0
  268. package/payload/server/public/assets/copy-3kj9Oaoc.js.br +0 -0
  269. package/payload/server/public/assets/copy-3kj9Oaoc.js.gz +0 -0
  270. package/payload/server/public/assets/data-C-x5EHyi.js +0 -1
  271. package/payload/server/public/assets/data-C-x5EHyi.js.br +0 -1
  272. package/payload/server/public/assets/data-C-x5EHyi.js.gz +0 -0
  273. package/payload/server/public/assets/file-text-CBaewT76.js.br +0 -0
  274. package/payload/server/public/assets/file-text-CBaewT76.js.gz +0 -0
  275. package/payload/server/public/assets/graph-B8-e2_Z-.js.br +0 -0
  276. package/payload/server/public/assets/graph-B8-e2_Z-.js.gz +0 -0
  277. package/payload/server/public/assets/graph-labels-Bsc23eZU.js.br +0 -0
  278. package/payload/server/public/assets/graph-labels-Bsc23eZU.js.gz +0 -0
  279. package/payload/server/public/assets/operator-Cve0-qfO.js +0 -1
  280. package/payload/server/public/assets/operator-Cve0-qfO.js.br +0 -0
  281. package/payload/server/public/assets/operator-Cve0-qfO.js.gz +0 -0
  282. package/payload/server/public/assets/page-BgVMs6Vf.js +0 -1
  283. package/payload/server/public/assets/page-BgVMs6Vf.js.br +0 -0
  284. package/payload/server/public/assets/page-BgVMs6Vf.js.gz +0 -0
  285. package/payload/server/public/assets/page-fABub-w8.js +0 -32
  286. package/payload/server/public/assets/page-fABub-w8.js.br +0 -0
  287. package/payload/server/public/assets/page-fABub-w8.js.gz +0 -0
  288. package/payload/server/public/assets/play-B6zXB9K7.js +0 -1
  289. package/payload/server/public/assets/play-B6zXB9K7.js.br +0 -0
  290. package/payload/server/public/assets/play-B6zXB9K7.js.gz +0 -0
  291. package/payload/server/public/assets/public--R2DbdWs.js +0 -1
  292. package/payload/server/public/assets/public--R2DbdWs.js.br +0 -0
  293. package/payload/server/public/assets/public--R2DbdWs.js.gz +0 -0
  294. package/payload/server/public/assets/rotate-ccw-FZW7c8p8.js.br +0 -0
  295. package/payload/server/public/assets/rotate-ccw-FZW7c8p8.js.gz +0 -0
  296. package/payload/server/public/assets/routines-BpZs2SaT.js +0 -2
  297. package/payload/server/public/assets/routines-BpZs2SaT.js.br +0 -0
  298. package/payload/server/public/assets/routines-BpZs2SaT.js.gz +0 -0
  299. package/payload/server/public/assets/skills-DF7uyEEz.js +0 -1
  300. package/payload/server/public/assets/skills-DF7uyEEz.js.br +0 -0
  301. package/payload/server/public/assets/skills-DF7uyEEz.js.gz +0 -0
  302. package/payload/server/public/assets/tasks-BfJJmoWO.js +0 -3
  303. package/payload/server/public/assets/tasks-BfJJmoWO.js.br +0 -0
  304. package/payload/server/public/assets/tasks-BfJJmoWO.js.gz +0 -0
  305. package/payload/server/public/assets/triangle-alert-CR-jRJdI.js.br +0 -0
  306. package/payload/server/public/assets/triangle-alert-CR-jRJdI.js.gz +0 -0
  307. package/payload/server/public/assets/useCopyFeedback-IOuPUAHY.js +0 -1
  308. package/payload/server/public/assets/useCopyFeedback-IOuPUAHY.js.br +0 -0
  309. package/payload/server/public/assets/useCopyFeedback-IOuPUAHY.js.gz +0 -0
  310. package/payload/server/public/assets/useMediaQuery-CA6dR5iz.js +0 -14
  311. package/payload/server/public/assets/useMediaQuery-CA6dR5iz.js.br +0 -0
  312. package/payload/server/public/assets/useMediaQuery-CA6dR5iz.js.gz +0 -0
  313. package/payload/server/public/assets/useMediaQuery-DpwgV1Da.css +0 -1
  314. package/payload/server/public/assets/useMediaQuery-DpwgV1Da.css.br +0 -0
  315. package/payload/server/public/assets/useMediaQuery-DpwgV1Da.css.gz +0 -0
  316. package/payload/server/public/assets/useVoiceRecorder-DGhsN7nV.js +0 -2
  317. package/payload/server/public/assets/useVoiceRecorder-DGhsN7nV.js.br +0 -0
  318. package/payload/server/public/assets/useVoiceRecorder-DGhsN7nV.js.gz +0 -0
  319. package/payload/server/public/assets/wrench-CpCOYUBc.js.br +0 -0
  320. package/payload/server/public/assets/wrench-CpCOYUBc.js.gz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"public-agent-reachability.d.ts","sourceRoot":"","sources":["../src/public-agent-reachability.ts"],"names":[],"mappings":"AAcA,OAAO,EAAuD,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAE5H,eAAO,MAAM,sBAAsB,wEAAyE,CAAA;AAI5G,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,UAAU,GAAG,yBAAyB,GAAG,eAAe,CAAA;AACzF,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,WAAW,CAAA;IACnB;iEAC6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAID,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAE3C;;;qCAGqC;AACrC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,YAAY,CAKd;AAED;;;;;;yDAMyD;AACzD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,KAAK,EAAE,oBAAoB,GAC1B,YAAY,CAKd;AAsBD,MAAM,WAAW,qBAAqB;IACpC;;;2DAGuD;IACvD,WAAW,EAAE,MAAM;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC9D,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;CACrD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,iBAAiB,CAkEtF"}
1
+ {"version":3,"file":"public-agent-reachability.d.ts","sourceRoot":"","sources":["../src/public-agent-reachability.ts"],"names":[],"mappings":"AAcA,OAAO,EAAuD,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAE5H,eAAO,MAAM,sBAAsB,wEAAyE,CAAA;AAI5G,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,UAAU,GAAG,yBAAyB,GAAG,eAAe,CAAA;AACzF,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,WAAW,CAAA;IACnB;iEAC6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAID,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAE3C;;;qCAGqC;AACrC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,YAAY,CAKd;AAED;;;;;;yDAMyD;AACzD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,KAAK,EAAE,oBAAoB,GAC1B,YAAY,CAKd;AAsBD,MAAM,WAAW,qBAAqB;IACpC;;;2DAGuD;IACvD,WAAW,EAAE,MAAM;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC9D,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;CACrD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,iBAAiB,CAsEtF"}
@@ -91,6 +91,10 @@ export function createReachabilityAudit(deps) {
91
91
  // IDENTITY is missing is reachable=false, so `reachable=true` implies the
92
92
  // spawn will not refuse on a missing file — the audit can no longer
93
93
  // certify an agent it has never proven can spawn.
94
+ // Task 2325 — the resolver now returns null for an unnamed role. The
95
+ // literal 'public' here is a named arm, so it never can; the non-null
96
+ // assertion keeps the audit's shape unchanged rather than threading an
97
+ // impossible branch through it.
94
98
  const identityDir = resolveAgentIdentityDir(account.accountDir, 'public', entry.name);
95
99
  const v = reachabilityWithFiles(entry.name, defaultAgent, MANAGER_SHADOWED_SLUGS, publicIdentityFilesPresent(identityDir));
96
100
  if (!v.reachable)
@@ -1 +1 @@
1
- {"version":3,"file":"public-agent-reachability.js","sourceRoot":"","sources":["../src/public-agent-reachability.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,8EAA8E;AAC9E,iFAAiF;AACjF,8EAA8E;AAC9E,8EAA8E;AAC9E,mEAAmE;AACnE,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AACtE,oEAAoE;AACpE,6DAA6D;AAE7D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAA6B,MAAM,6BAA6B,CAAA;AAE5H,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAU,CAAA;AAE5G,MAAM,YAAY,GAAG,wBAAwB,CAAA;AAW7C,MAAM,GAAG,GAAG,6BAA6B,CAAA;AAIzC;;;qCAGqC;AACrC,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,YAA2B,EAC3B,aAAgC;IAEhC,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IACnE,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;IACjF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAA;IAC5F,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AAC1C,CAAC;AAED;;;;;;yDAMyD;AACzD,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,YAA2B,EAC3B,aAAgC,EAChC,KAA2B;IAE3B,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC,CAAA;IACtE,IAAI,CAAC,OAAO,CAAC,SAAS;QAAE,OAAO,OAAO,CAAA;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAA;IAC9F,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAA8B,CAAA;QAC3G,OAAO,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAA;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;IAC7C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAwB,CAAA;QAC5E,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAkBD,MAAM,UAAU,uBAAuB,CAAC,IAA2B;IACjE,IAAI,KAAK,GAA0B,IAAI,CAAA;IAEvC,SAAS,QAAQ;QACf,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,IAAI,WAAW,GAAG,CAAC,CAAA;QACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;YACrD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,SAAQ;YACrC,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YACzD,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBACrE,sEAAsE;gBACtE,wEAAwE;gBACxE,sEAAsE;gBACtE,iEAAiE;gBACjE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;oBAAE,SAAQ;gBACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC7C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;oBAAE,SAAQ;gBACtC,OAAO,EAAE,CAAA;gBACT,yEAAyE;gBACzE,mEAAmE;gBACnE,uEAAuE;gBACvE,0EAA0E;gBAC1E,oEAAoE;gBACpE,kDAAkD;gBAClD,MAAM,WAAW,GAAG,uBAAuB,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;gBACrF,MAAM,CAAC,GAAG,qBAAqB,CAC7B,KAAK,CAAC,IAAI,EACV,YAAY,EACZ,sBAAsB,EACtB,0BAA0B,CAAC,WAAW,CAAC,CACxC,CAAA;gBACD,IAAI,CAAC,CAAC,CAAC,SAAS;oBAAE,WAAW,EAAE,CAAA;gBAC/B,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;gBACxE,yEAAyE;gBACzE,sEAAsE;gBACtE,gCAAgC;gBAChC,IAAI,CAAC,MAAM,CACT,GAAG,GAAG,qBAAqB,OAAO,CAAC,SAAS,SAAS,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE,CAC1H,CAAA;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;IACjC,CAAC;IAED,OAAO;QACL,QAAQ;QACR,KAAK;YACH,IAAI,KAAK;gBAAE,OAAM;YACjB,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;gBACvB,IAAI,CAAC;oBACH,QAAQ,EAAE,CAAA;gBACZ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACxG,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;YACnB,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;gBAAE,KAAK,CAAC,KAAK,EAAE,CAAA;YACpD,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,gCAAgC,IAAI,CAAC,UAAU,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5G,CAAC;QACD,IAAI;YACF,IAAI,KAAK,EAAE,CAAC;gBACV,aAAa,CAAC,KAAK,CAAC,CAAA;gBACpB,KAAK,GAAG,IAAI,CAAA;YACd,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"public-agent-reachability.js","sourceRoot":"","sources":["../src/public-agent-reachability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AgentRole } from './types.js';
2
+ export type Logger = (line: string) => void;
3
+ export interface RoleCensusCounts {
4
+ admin: number;
5
+ public: number;
6
+ passive: number;
7
+ /** Spawns refused because no role could be resolved. Structurally zero. */
8
+ unresolved: number;
9
+ }
10
+ /** Pure. The census line for one interval's counts. */
11
+ export declare function formatRoleCensus(c: RoleCensusCounts): string;
12
+ export interface RoleCensusDeps {
13
+ logger: Logger;
14
+ intervalMs: number;
15
+ }
16
+ export interface RoleCensus {
17
+ /** Record one spawn attempt. `null` is a spawn whose role did not resolve. */
18
+ record(role: AgentRole | null): void;
19
+ tickOnce(): void;
20
+ start(): void;
21
+ stop(): void;
22
+ }
23
+ export declare function createRoleCensus(deps: RoleCensusDeps): RoleCensus;
24
+ //# sourceMappingURL=role-census.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-census.d.ts","sourceRoot":"","sources":["../src/role-census.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAI3C,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,uDAAuD;AACvD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAE5D;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,8EAA8E;IAC9E,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;IACpC,QAAQ,IAAI,IAAI,CAAA;IAChB,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;CACb;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAqCjE"}
@@ -0,0 +1,50 @@
1
+ const TAG = '[role-census]';
2
+ /** Pure. The census line for one interval's counts. */
3
+ export function formatRoleCensus(c) {
4
+ return `${TAG} op=spawn-role-census admin=${c.admin} public=${c.public} passive=${c.passive} unresolved=${c.unresolved}`;
5
+ }
6
+ function zeroed() {
7
+ return { admin: 0, public: 0, passive: 0, unresolved: 0 };
8
+ }
9
+ export function createRoleCensus(deps) {
10
+ let counts = zeroed();
11
+ let timer = null;
12
+ function tickOnce() {
13
+ // Emitted on zero. A quiet interval is itself the signal that the census is
14
+ // alive, so a missing line means the audit stopped rather than that nothing
15
+ // spawned.
16
+ deps.logger(formatRoleCensus(counts));
17
+ counts = zeroed();
18
+ }
19
+ return {
20
+ record(role) {
21
+ if (role === null)
22
+ counts.unresolved += 1;
23
+ else
24
+ counts[role] += 1;
25
+ },
26
+ tickOnce,
27
+ start() {
28
+ if (timer)
29
+ return;
30
+ timer = setInterval(() => {
31
+ try {
32
+ tickOnce();
33
+ }
34
+ catch (err) {
35
+ deps.logger(`${TAG} op=census-tick-failed message=${err instanceof Error ? err.message : String(err)}`);
36
+ }
37
+ }, deps.intervalMs);
38
+ if (typeof timer.unref === 'function')
39
+ timer.unref();
40
+ deps.logger(`${TAG} op=census-started intervalMs=${deps.intervalMs}`);
41
+ },
42
+ stop() {
43
+ if (timer) {
44
+ clearInterval(timer);
45
+ timer = null;
46
+ }
47
+ },
48
+ };
49
+ }
50
+ //# sourceMappingURL=role-census.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-census.js","sourceRoot":"","sources":["../src/role-census.ts"],"names":[],"mappings":"AAqBA,MAAM,GAAG,GAAG,eAAe,CAAA;AAY3B,uDAAuD;AACvD,MAAM,UAAU,gBAAgB,CAAC,CAAmB;IAClD,OAAO,GAAG,GAAG,+BAA+B,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,UAAU,EAAE,CAAA;AAC1H,CAAC;AAeD,SAAS,MAAM;IACb,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAA;AAC3D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACnD,IAAI,MAAM,GAAqB,MAAM,EAAE,CAAA;IACvC,IAAI,KAAK,GAA0C,IAAI,CAAA;IAEvD,SAAS,QAAQ;QACf,4EAA4E;QAC5E,4EAA4E;QAC5E,WAAW;QACX,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAA;QACrC,MAAM,GAAG,MAAM,EAAE,CAAA;IACnB,CAAC;IAED,OAAO;QACL,MAAM,CAAC,IAAI;YACT,IAAI,IAAI,KAAK,IAAI;gBAAE,MAAM,CAAC,UAAU,IAAI,CAAC,CAAA;;gBACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;QACD,QAAQ;QACR,KAAK;YACH,IAAI,KAAK;gBAAE,OAAM;YACjB,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;gBACvB,IAAI,CAAC;oBACH,QAAQ,EAAE,CAAA;gBACZ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACzG,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;YACnB,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;gBAAE,KAAK,CAAC,KAAK,EAAE,CAAA;YACpD,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,iCAAiC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;QACvE,CAAC;QACD,IAAI;YACF,IAAI,KAAK,EAAE,CAAC;gBACV,aAAa,CAAC,KAAK,CAAC,CAAA;gBACpB,KAAK,GAAG,IAAI,CAAA;YACd,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1,7 +1,7 @@
1
- import type { Logger, Role, Channel } from './types.js';
1
+ import type { Logger, AgentRole, Channel } from './types.js';
2
2
  export interface SessionSidecar {
3
3
  senderId: string;
4
- role: Role;
4
+ role: AgentRole;
5
5
  channel: Channel;
6
6
  /** Operator-facing iframe URL from the `/remote-control is active` banner.
7
7
  * Null until url-capture matches; may stay null forever on headless
@@ -138,4 +138,11 @@ export declare function updateSidecar(path: string, patch: Partial<SessionSideca
138
138
  * fields, so the rename-loses-write window is the existing limitation
139
139
  * rather than a new one. */
140
140
  export declare function appendBridgeId(path: string, bridgeSuffix: string, logger: Logger): 'ok' | 'duplicate' | 'no-sidecar';
141
+ /** Task 2325 — the role a sidecar records. `passive` is a persona role
142
+ * resolved at the spawn boundary; writing it here would fail the ROLES
143
+ * allowlist in `parseSidecar` and make every passive session's sidecar load
144
+ * back as null, so it maps to the wire role it rode in on before the role
145
+ * became first-class. Exported so the derivation is testable and so
146
+ * pty-spawner calls one function rather than repeating a literal. */
147
+ export declare function sidecarWireRole(role: AgentRole): AgentRole;
141
148
  //# sourceMappingURL=session-sidecar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-sidecar.d.ts","sourceRoot":"","sources":["../src/session-sidecar.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEvD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB;;;0BAGsB;IACtB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB;;;;;;oDAMgD;IAChD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;;;;uCAMmC;IACnC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC;;;yEAGqE;IACrE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB;0DACsD;IACtD,MAAM,EAAE,OAAO,CAAA;IACf;4DACwD;IACxD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;;;;oEAKgE;IAChE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;;;;oDAMgD;IAChD,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB;;;6EAGyE;IACzE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB;;;;;;wBAMoB;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B;;;;;;wCAMoC;IACpC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC;;;0BAGsB;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;;qFAGiF;IACjF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;;;;;;qCAOiC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;;;;sDAKkD;IAClD,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;IAC9B;;;sDAGkD;IAClD,OAAO,EAAE,IAAI,GAAG,SAAS,GAAG,cAAc,CAAA;IAC1C,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAA;CACd;AAMD;;;;6BAI6B;AAC7B,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,kBAAkB,CA+B5E;AAED;;;qCAGqC;AACrC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiBxF;AAED;;;;+DAI+D;AAC/D,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAmBT;AAED;;;;;;;;;6BAS6B;AAC7B,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,IAAI,GAAG,WAAW,GAAG,YAAY,CAmBnC"}
1
+ {"version":3,"file":"session-sidecar.d.ts","sourceRoot":"","sources":["../src/session-sidecar.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE5D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB;;;0BAGsB;IACtB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB;;;;;;oDAMgD;IAChD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;;;;uCAMmC;IACnC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC;;;yEAGqE;IACrE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB;0DACsD;IACtD,MAAM,EAAE,OAAO,CAAA;IACf;4DACwD;IACxD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;;;;oEAKgE;IAChE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;;;;oDAMgD;IAChD,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB;;;6EAGyE;IACzE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB;;;;;;wBAMoB;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B;;;;;;wCAMoC;IACpC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC;;;0BAGsB;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;;qFAGiF;IACjF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;;;;;;qCAOiC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;;;;sDAKkD;IAClD,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;IAC9B;;;sDAGkD;IAClD,OAAO,EAAE,IAAI,GAAG,SAAS,GAAG,cAAc,CAAA;IAC1C,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAA;CACd;AAMD;;;;6BAI6B;AAC7B,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,kBAAkB,CA+B5E;AAED;;;qCAGqC;AACrC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiBxF;AAED;;;;+DAI+D;AAC/D,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAmBT;AAED;;;;;;;;;6BAS6B;AAC7B,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,IAAI,GAAG,WAAW,GAAG,YAAY,CAmBnC;AAQD;;;;;sEAKsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAE1D"}
@@ -171,7 +171,20 @@ export function appendBridgeId(path, bridgeSuffix, logger) {
171
171
  logger(`[session-sidecar] append-bridge sessionId=${basenameShort(path)} bridgeId=${bridgeSuffix} count=${next.bridgeIds.length} bytes=${bytes}`);
172
172
  return 'ok';
173
173
  }
174
+ // Task 2325 — the disk subset of AgentRole. `passive` is a persona role
175
+ // resolved at the spawn boundary and is deliberately absent here: no sidecar
176
+ // may record it, and pty-spawner maps a passive spawn back to its wire role
177
+ // before writing. Widening this makes every pre-2325 reader reject the row.
174
178
  const ROLES = ['admin', 'public'];
179
+ /** Task 2325 — the role a sidecar records. `passive` is a persona role
180
+ * resolved at the spawn boundary; writing it here would fail the ROLES
181
+ * allowlist in `parseSidecar` and make every passive session's sidecar load
182
+ * back as null, so it maps to the wire role it rode in on before the role
183
+ * became first-class. Exported so the derivation is testable and so
184
+ * pty-spawner calls one function rather than repeating a literal. */
185
+ export function sidecarWireRole(role) {
186
+ return role === 'passive' ? 'public' : role;
187
+ }
175
188
  const CHANNELS = ['browser', 'whatsapp', 'telegram', 'webchat', 'email'];
176
189
  function parseSidecar(raw) {
177
190
  if (!raw || typeof raw !== 'object')
@@ -1 +1 @@
1
- {"version":3,"file":"session-sidecar.js","sourceRoot":"","sources":["../src/session-sidecar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-sidecar.js","sourceRoot":"","sources":["../src/session-sidecar.ts"],"names":[],"mappings":"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"}
@@ -39,4 +39,71 @@ export interface RecoverWedgedDeps {
39
39
  * detached-survivor class the manager never owned as a tracker). */
40
40
  export declare function stopConfirmsExit(scopeOutcome: string): boolean;
41
41
  export declare function recoverWedgedSession(deps: RecoverWedgedDeps, sessionId: string, accountId: string | null): Promise<void>;
42
+ /** Task 2320 — where a retired transcript goes. The suffix is appended AFTER
43
+ * `.jsonl` rather than replacing it, because three readers key on this path and
44
+ * they disagree about what matches:
45
+ * - fs-watcher.ts:718/:831/:846 tests `endsWith('.jsonl')` and takes the id
46
+ * as the basename minus that suffix, so a `*.jsonl` name would register a
47
+ * phantom session row;
48
+ * - sidebar-sessions.ts:173 tests an anchored `^<uuid>\.jsonl$`;
49
+ * - jsonl-path.ts:133 tests the exact basename `<sid>.jsonl`, top level and
50
+ * archive/, and is what makes the next spawn `mode=fresh`.
51
+ * This name is rejected by all three. It stays in the same directory, so the
52
+ * retired transcript survives for logs-read.sh. */
53
+ export declare function wedgedRotationPath(jsonlPath: string, nowMs: number): string;
54
+ export interface RotateWedgedDeps {
55
+ /** SIGTERM the rc scope. Same contract as RecoverWedgedDeps.stop. */
56
+ stop(sessionId: string): Promise<{
57
+ scopeOutcome: string;
58
+ }>;
59
+ /** True once the wedged process has exited (its pid is no longer alive). */
60
+ processGone(sessionId: string): boolean;
61
+ /** Rename the transcript to `wedgedRotationPath`. Returns the new path.
62
+ * Throws on any fs failure; the caller logs and does NOT spawn. */
63
+ rotateJsonl(jsonlPath: string): string;
64
+ /** Drive a FRESH rc-spawn at the same id. With the transcript gone from the
65
+ * path the resume check reads, /rc-spawn resolves `mode=fresh` on its own
66
+ * (Task 547); `initialMessage` rides as the CLI's sole positional. */
67
+ freshSpawn(sessionId: string, accountId: string | null, initialMessage: string): Promise<{
68
+ spawned: boolean;
69
+ }>;
70
+ logger: (l: string) => void;
71
+ sleep(ms: number): Promise<void>;
72
+ /** Max wait for the SIGTERM'd process to exit before abandoning the rotation. */
73
+ exitTimeoutMs: number;
74
+ /** Poll interval while waiting for the process exit. */
75
+ pollMs: number;
76
+ }
77
+ /** Task 2320 — retire a transcript the resume path cannot clear.
78
+ *
79
+ * A public session past the CLI's resume threshold renders an interactive TUI
80
+ * gate on every `--resume`. Nothing answers it, so the watchdog's own remedy
81
+ * re-creates the wedge and `ageMs` climbs forever. Retiring the transcript is
82
+ * the only exit: the session id is derived rather than allocated
83
+ * (`adminSessionIdFor`), so the fresh spawn must land at the SAME id or the
84
+ * hub, the channel binding and the rebind store are all orphaned.
85
+ *
86
+ * The stop is not optional. /rc-spawn short-circuits an already-live session
87
+ * (http-server.ts:3112) with `outcome:'bound', reused:true` and no spawn, so a
88
+ * rename-then-request would report a bind that did not happen and leave the
89
+ * gate-parked process running against a path that no longer holds its file.
90
+ *
91
+ * SECURITY INVARIANT — this rotates the JSONL and NOTHING ELSE. In particular
92
+ * the session's `<sid>.meta.json` sidecar MUST stay where it is. The fresh
93
+ * spawn posts no `role`, so `rcRole` is undefined and
94
+ * `effectiveRcRole = rcRole ?? priorSidecar?.role` (http-server.ts:3440) is the
95
+ * only thing that re-derives `public` for it. That sidecar read is what keeps
96
+ * `buildRcPublicLockdownArgv` applied. Rotate the sidecar too and a visitor's
97
+ * session respawns with no lockdown and the full admin tool surface — the exact
98
+ * defect Task 2260 closed. The sidecar survives the fresh spawn on its own
99
+ * (the classification write is gated `rcRole !== undefined` at :3824 AND
100
+ * write-once on `!existsSync`), and no `updateSidecar` caller patches `role`. */
101
+ export declare function rotateWedgedSession(deps: RotateWedgedDeps, input: {
102
+ sessionId: string;
103
+ jsonlPath: string;
104
+ initialMessage: string;
105
+ pendingQueued: number;
106
+ carried: number;
107
+ accountId: string | null;
108
+ }): Promise<void>;
42
109
  //# sourceMappingURL=stuck-turn-recover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stuck-turn-recover.d.ts","sourceRoot":"","sources":["../src/stuck-turn-recover.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,iBAAiB;IAChC;;;8EAG0E;IAC1E,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1D,4EAA4E;IAC5E,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IACvC;;;;+EAI2E;IAC3E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IACvF,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,+EAA+E;IAC/E,aAAa,EAAE,MAAM,CAAA;IACrB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;;;qEAaqE;AACrE,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAI9D;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
1
+ {"version":3,"file":"stuck-turn-recover.d.ts","sourceRoot":"","sources":["../src/stuck-turn-recover.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,iBAAiB;IAChC;;;8EAG0E;IAC1E,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1D,4EAA4E;IAC5E,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IACvC;;;;+EAI2E;IAC3E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IACvF,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,+EAA+E;IAC/E,aAAa,EAAE,MAAM,CAAA;IACrB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;;;qEAaqE;AACrE,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAI9D;AAoCD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;;;;;;oDAUoD;AACpD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1D,4EAA4E;IAC5E,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IACvC;wEACoE;IACpE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAA;IACtC;;2EAEuE;IACvE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAC9G,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,iFAAiF;IACjF,aAAa,EAAE,MAAM,CAAA;IACrB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;kFAuBkF;AAClF,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE;IACL,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,GACA,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
@@ -24,32 +24,114 @@ export function stopConfirmsExit(scopeOutcome) {
24
24
  || scopeOutcome === 'escalated-term'
25
25
  || scopeOutcome === 'escalated-kill';
26
26
  }
27
+ /** Task 2320 — the stop-and-confirm preamble both recovery composites open
28
+ * with, extracted so the resume path and the rotate path cannot drift on the
29
+ * pid-reuse hardening.
30
+ *
31
+ * Task 1276 — when stopSession verified the exit at kill time, return
32
+ * immediately: the pid-liveness poll could otherwise be defeated by a kernel
33
+ * pid-reuse inside the post-SIGTERM / pre-fs-watcher window and strand the turn
34
+ * on a false still-alive. Only ambiguous / possibly-alive outcomes fall through
35
+ * to the poll (which handles slow exiters and the detached survivors the
36
+ * manager does not own as a tracker).
37
+ *
38
+ * `exited` false means the process outlived `exitTimeoutMs`. Neither caller may
39
+ * proceed on that. */
40
+ async function stopAndConfirmExit(deps, sessionId) {
41
+ const stopResult = await deps.stop(sessionId);
42
+ if (stopConfirmsExit(stopResult.scopeOutcome))
43
+ return { scopeOutcome: stopResult.scopeOutcome, exited: true };
44
+ let waited = 0;
45
+ while (!deps.processGone(sessionId)) {
46
+ if (waited >= deps.exitTimeoutMs)
47
+ return { scopeOutcome: stopResult.scopeOutcome, exited: false };
48
+ await deps.sleep(deps.pollMs);
49
+ waited += deps.pollMs;
50
+ }
51
+ return { scopeOutcome: stopResult.scopeOutcome, exited: true };
52
+ }
27
53
  export async function recoverWedgedSession(deps, sessionId, accountId) {
28
54
  const id8 = sessionId.slice(0, 8);
29
- const stopResult = await deps.stop(sessionId);
30
- // Task 1276 — when stopSession verified the exit at kill time, resume
31
- // immediately: the pid-liveness poll below could otherwise be defeated by a
32
- // kernel pid-reuse inside the post-SIGTERM / pre-fs-watcher window and strand
33
- // the turn on a false still-alive. Only ambiguous / possibly-alive outcomes
34
- // fall through to the poll (which handles slow exiters and the detached
35
- // survivors the manager does not own as a tracker).
36
- if (!stopConfirmsExit(stopResult.scopeOutcome)) {
37
- let waited = 0;
38
- while (!deps.processGone(sessionId)) {
39
- if (waited >= deps.exitTimeoutMs) {
40
- deps.logger(`[stuck-turn] op=recycle-resume sessionId=${id8} spawn=skipped reason=still-alive stop-outcome=${stopResult.scopeOutcome}`);
41
- return;
42
- }
43
- await deps.sleep(deps.pollMs);
44
- waited += deps.pollMs;
45
- }
55
+ const { scopeOutcome, exited } = await stopAndConfirmExit(deps, sessionId);
56
+ if (!exited) {
57
+ deps.logger(`[stuck-turn] op=recycle-resume sessionId=${id8} spawn=skipped reason=still-alive stop-outcome=${scopeOutcome}`);
58
+ return;
46
59
  }
47
60
  try {
48
61
  const r = await deps.resumeSpawn(sessionId, accountId);
49
- deps.logger(`[stuck-turn] op=recycle-resume sessionId=${id8} spawn=${r.spawned ? 'bound' : 'failed'} stop-outcome=${stopResult.scopeOutcome}`);
62
+ deps.logger(`[stuck-turn] op=recycle-resume sessionId=${id8} spawn=${r.spawned ? 'bound' : 'failed'} stop-outcome=${scopeOutcome}`);
63
+ }
64
+ catch (err) {
65
+ deps.logger(`[stuck-turn] op=recycle-resume sessionId=${id8} spawn=error stop-outcome=${scopeOutcome} message=${JSON.stringify(err instanceof Error ? err.message : String(err))}`);
66
+ }
67
+ }
68
+ /** Task 2320 — where a retired transcript goes. The suffix is appended AFTER
69
+ * `.jsonl` rather than replacing it, because three readers key on this path and
70
+ * they disagree about what matches:
71
+ * - fs-watcher.ts:718/:831/:846 tests `endsWith('.jsonl')` and takes the id
72
+ * as the basename minus that suffix, so a `*.jsonl` name would register a
73
+ * phantom session row;
74
+ * - sidebar-sessions.ts:173 tests an anchored `^<uuid>\.jsonl$`;
75
+ * - jsonl-path.ts:133 tests the exact basename `<sid>.jsonl`, top level and
76
+ * archive/, and is what makes the next spawn `mode=fresh`.
77
+ * This name is rejected by all three. It stays in the same directory, so the
78
+ * retired transcript survives for logs-read.sh. */
79
+ export function wedgedRotationPath(jsonlPath, nowMs) {
80
+ return `${jsonlPath}.wedged-${nowMs}`;
81
+ }
82
+ /** Task 2320 — retire a transcript the resume path cannot clear.
83
+ *
84
+ * A public session past the CLI's resume threshold renders an interactive TUI
85
+ * gate on every `--resume`. Nothing answers it, so the watchdog's own remedy
86
+ * re-creates the wedge and `ageMs` climbs forever. Retiring the transcript is
87
+ * the only exit: the session id is derived rather than allocated
88
+ * (`adminSessionIdFor`), so the fresh spawn must land at the SAME id or the
89
+ * hub, the channel binding and the rebind store are all orphaned.
90
+ *
91
+ * The stop is not optional. /rc-spawn short-circuits an already-live session
92
+ * (http-server.ts:3112) with `outcome:'bound', reused:true` and no spawn, so a
93
+ * rename-then-request would report a bind that did not happen and leave the
94
+ * gate-parked process running against a path that no longer holds its file.
95
+ *
96
+ * SECURITY INVARIANT — this rotates the JSONL and NOTHING ELSE. In particular
97
+ * the session's `<sid>.meta.json` sidecar MUST stay where it is. The fresh
98
+ * spawn posts no `role`, so `rcRole` is undefined and
99
+ * `effectiveRcRole = rcRole ?? priorSidecar?.role` (http-server.ts:3440) is the
100
+ * only thing that re-derives `public` for it. That sidecar read is what keeps
101
+ * `buildRcPublicLockdownArgv` applied. Rotate the sidecar too and a visitor's
102
+ * session respawns with no lockdown and the full admin tool surface — the exact
103
+ * defect Task 2260 closed. The sidecar survives the fresh spawn on its own
104
+ * (the classification write is gated `rcRole !== undefined` at :3824 AND
105
+ * write-once on `!existsSync`), and no `updateSidecar` caller patches `role`. */
106
+ export async function rotateWedgedSession(deps, input) {
107
+ const id8 = input.sessionId.slice(0, 8);
108
+ const { scopeOutcome, exited } = await stopAndConfirmExit(deps, input.sessionId);
109
+ if (!exited) {
110
+ deps.logger(`[stuck-turn] op=recycle-rotate sessionId=${id8} outcome=failed reason=still-alive stop-outcome=${scopeOutcome}`);
111
+ return;
112
+ }
113
+ let rotatedPath;
114
+ try {
115
+ rotatedPath = deps.rotateJsonl(input.jsonlPath);
116
+ }
117
+ catch (err) {
118
+ // Do NOT spawn: the transcript is still at the live path, so /rc-spawn
119
+ // would resolve mode=resume and re-render the very gate this exists to clear.
120
+ const code = err?.code ?? 'unknown';
121
+ deps.logger(`[stuck-turn] op=recycle-rotate sessionId=${id8} outcome=failed reason=rename-${code}`);
122
+ return;
123
+ }
124
+ // The rotation is its own event, emitted before the spawn: a spawn that hangs
125
+ // must not make the rotation itself unobservable. `carried` is the count of
126
+ // pending inbounds whose text made it into initialMessage; it is below
127
+ // pendingQueued only when an enqueue row carried no string content.
128
+ deps.logger(`[stuck-turn] op=recycle-rotate sessionId=${id8} jsonl=${rotatedPath} pendingQueued=${input.pendingQueued} carried=${input.carried}`);
129
+ try {
130
+ const r = await deps.freshSpawn(input.sessionId, input.accountId, input.initialMessage);
131
+ deps.logger(`[stuck-turn] op=recycle-rotate-spawn sessionId=${id8} spawn=${r.spawned ? 'bound' : 'failed'}`);
50
132
  }
51
133
  catch (err) {
52
- deps.logger(`[stuck-turn] op=recycle-resume sessionId=${id8} spawn=error stop-outcome=${stopResult.scopeOutcome} message=${JSON.stringify(err instanceof Error ? err.message : String(err))}`);
134
+ deps.logger(`[stuck-turn] op=recycle-rotate-spawn sessionId=${id8} spawn=error message=${JSON.stringify(err instanceof Error ? err.message : String(err))}`);
53
135
  }
54
136
  }
55
137
  //# sourceMappingURL=stuck-turn-recover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stuck-turn-recover.js","sourceRoot":"","sources":["../src/stuck-turn-recover.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,gFAAgF;AAChF,iFAAiF;AACjF,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,wDAAwD;AAwBxD;;;;;;;;;;;;;qEAaqE;AACrE,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,OAAO,YAAY,KAAK,IAAI;WACvB,YAAY,KAAK,gBAAgB;WACjC,YAAY,KAAK,gBAAgB,CAAA;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAuB,EACvB,SAAiB,EACjB,SAAwB;IAExB,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC7C,sEAAsE;IACtE,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,wEAAwE;IACxE,oDAAoD;IACpD,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,IAAI,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,4CAA4C,GAAG,kDAAkD,UAAU,CAAC,YAAY,EAAE,CAAC,CAAA;gBACvI,OAAM;YACR,CAAC;YACD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC7B,MAAM,IAAI,IAAI,CAAC,MAAM,CAAA;QACvB,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACtD,IAAI,CAAC,MAAM,CAAC,4CAA4C,GAAG,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,iBAAiB,UAAU,CAAC,YAAY,EAAE,CAAC,CAAA;IAChJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,4CAA4C,GAAG,6BAA6B,UAAU,CAAC,YAAY,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;IAChM,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"stuck-turn-recover.js","sourceRoot":"","sources":["../src/stuck-turn-recover.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,15 @@ export interface StuckTurnVerdict {
19
19
  /** The last assistant record emitted tool_use block(s) with no later
20
20
  * progress record — a tool is legitimately running, so this is NOT a wedge. */
21
21
  toolInFlight: boolean;
22
+ /** Task 2320 — the `content` of each pending enqueue, in file order. The
23
+ * rotation renames the transcript out from under the harness, which destroys
24
+ * the queued rows, so the visitor's own text must be read out of the verdict
25
+ * BEFORE the file moves and handed to the fresh spawn as its initial message.
26
+ * String-valued records only: an enqueue carrying no string `content` is
27
+ * counted by `pendingQueued` but cannot be carried, because there is nothing
28
+ * to carry. The two therefore diverge legitimately, and the rotation logs
29
+ * both so the divergence is visible rather than silent. */
30
+ pendingEnqueueContents: string[];
22
31
  }
23
32
  /** Pure wedge classifier. Walks records in file order; see `StuckTurnVerdict`. */
24
33
  export declare function classifyStuckTurn(records: ReadonlyArray<Record<string, unknown>>, opts: {
@@ -44,6 +53,16 @@ export interface StuckTurnWatchDeps {
44
53
  * rc-spawns --resume and drains). Fire-and-forget; failures logged by the
45
54
  * callee. */
46
55
  recycle: (sessionId: string) => void;
56
+ /** Task 2320 — retire a transcript the resume path has been PROVEN unable to
57
+ * clear, and respawn fresh at the same derived id carrying `initialMessage`.
58
+ * Fire-and-forget; every outcome is logged by the callee. */
59
+ rotate: (input: {
60
+ sessionId: string;
61
+ jsonlPath: string;
62
+ initialMessage: string;
63
+ pendingQueued: number;
64
+ carried: number;
65
+ }) => void;
47
66
  thresholdMs: number;
48
67
  intervalMs: number;
49
68
  /** A session recycled within this window is not re-flagged or re-recycled.
@@ -1 +1 @@
1
- {"version":3,"file":"stuck-turn.d.ts","sourceRoot":"","sources":["../src/stuck-turn.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,WAAW,gBAAgB;IAC/B;8CAC0C;IAC1C,MAAM,EAAE,OAAO,CAAA;IACf;;+EAE2E;IAC3E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;;qFAIiF;IACjF,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC;yEACqE;IACrE,aAAa,EAAE,MAAM,CAAA;IACrB;oFACgF;IAChF,YAAY,EAAE,OAAO,CAAA;CACtB;AAiCD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC/C,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzC,gBAAgB,CAuClB;AAyCD;;;;iCAIiC;AACjC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAqBzG;AAED;6EAC6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,UAAU,EAAE,MAAM,kBAAkB,EAAE,CAAA;IACtC;;kBAEc;IACd,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB;;;0DAGsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;8BAG0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CACvD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAChD;AAID,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAwF7E"}
1
+ {"version":3,"file":"stuck-turn.d.ts","sourceRoot":"","sources":["../src/stuck-turn.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,WAAW,gBAAgB;IAC/B;8CAC0C;IAC1C,MAAM,EAAE,OAAO,CAAA;IACf;;+EAE2E;IAC3E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;;qFAIiF;IACjF,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC;yEACqE;IACrE,aAAa,EAAE,MAAM,CAAA;IACrB;oFACgF;IAChF,YAAY,EAAE,OAAO,CAAA;IACrB;;;;;;;gEAO4D;IAC5D,sBAAsB,EAAE,MAAM,EAAE,CAAA;CACjC;AAiCD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC/C,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzC,gBAAgB,CA0ClB;AAyCD;;;;iCAIiC;AACjC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAqBzG;AAED;6EAC6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,UAAU,EAAE,MAAM,kBAAkB,EAAE,CAAA;IACtC;;kBAEc;IACd,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC;;kEAE8D;IAC9D,MAAM,EAAE,CAAC,KAAK,EAAE;QACd,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;QACjB,cAAc,EAAE,MAAM,CAAA;QACtB,aAAa,EAAE,MAAM,CAAA;QACrB,OAAO,EAAE,MAAM,CAAA;KAChB,KAAK,IAAI,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB;;;0DAGsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;8BAG0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CACvD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAChD;AAID,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAuH7E"}
@@ -61,7 +61,7 @@ export function classifyStuckTurn(records, opts) {
61
61
  }
62
62
  }
63
63
  if (lastProgressIdx === -1) {
64
- return { wedged: false, lastProgressTs: null, oldestPendingEnqueueTs: null, pendingQueued: 0, toolInFlight: false };
64
+ return { wedged: false, lastProgressTs: null, oldestPendingEnqueueTs: null, pendingQueued: 0, toolInFlight: false, pendingEnqueueContents: [] };
65
65
  }
66
66
  // A tool is in flight when the last assistant emitted tool_use AND nothing
67
67
  // progressed past it (no tool_result returned). The loop is waiting on the
@@ -69,11 +69,15 @@ export function classifyStuckTurn(records, opts) {
69
69
  const toolInFlight = lastAssistantHadToolUse && lastAssistantIdx === lastProgressIdx;
70
70
  let pendingQueued = 0;
71
71
  let oldestPendingEnqueueIdx = -1;
72
+ const pendingEnqueueContents = [];
72
73
  for (let i = lastProgressIdx + 1; i < records.length; i++) {
73
74
  if (isEnqueue(records[i])) {
74
75
  pendingQueued += 1;
75
76
  if (oldestPendingEnqueueIdx === -1)
76
77
  oldestPendingEnqueueIdx = i;
78
+ const content = records[i].content;
79
+ if (typeof content === 'string' && content.length > 0)
80
+ pendingEnqueueContents.push(content);
77
81
  }
78
82
  }
79
83
  const lastProgressTs = parseTs(records[lastProgressIdx]);
@@ -85,7 +89,7 @@ export function classifyStuckTurn(records, opts) {
85
89
  const oldestPendingEnqueueTs = oldestPendingEnqueueIdx === -1 ? null : parseTs(records[oldestPendingEnqueueIdx]);
86
90
  const aged = oldestPendingEnqueueTs !== null && opts.now - oldestPendingEnqueueTs > opts.thresholdMs;
87
91
  const wedged = !toolInFlight && pendingQueued > 0 && aged;
88
- return { wedged, lastProgressTs, oldestPendingEnqueueTs, pendingQueued, toolInFlight };
92
+ return { wedged, lastProgressTs, oldestPendingEnqueueTs, pendingQueued, toolInFlight, pendingEnqueueContents };
89
93
  }
90
94
  const TAIL_READ_BYTES = 256 * 1024;
91
95
  function parseLines(text) {
@@ -173,6 +177,9 @@ export function createStuckTurnWatch(deps) {
173
177
  function tickOnce() {
174
178
  let scanned = 0;
175
179
  let wedged = 0;
180
+ let rotated = 0;
181
+ let stillFrozen = 0;
182
+ let drained = 0;
176
183
  try {
177
184
  const candidates = deps.candidates();
178
185
  scanned = candidates.length;
@@ -199,9 +206,24 @@ export function createStuckTurnWatch(deps) {
199
206
  if (verdict.wedged) {
200
207
  const ageMs = verdict.oldestPendingEnqueueTs !== null ? t - verdict.oldestPendingEnqueueTs : -1;
201
208
  deps.logger(`[stuck-turn] op=recycle-drain sessionId=${sid.slice(0, 8)} outcome=still-frozen ageMs=${ageMs}`);
209
+ stillFrozen += 1;
210
+ // Task 2320 — ONE still-frozen drain is the trigger, not two. The
211
+ // recycle already ran a stop and a bound resume; a session still
212
+ // frozen after that has proven the resume path cannot clear it, and a
213
+ // second cycle buys no evidence while the visitor waits another
214
+ // interval. Retire the transcript instead.
215
+ deps.rotate({
216
+ sessionId: sid,
217
+ jsonlPath: p.jsonlPath,
218
+ initialMessage: verdict.pendingEnqueueContents.join('\n'),
219
+ pendingQueued: verdict.pendingQueued,
220
+ carried: verdict.pendingEnqueueContents.length,
221
+ });
222
+ rotated += 1;
202
223
  }
203
224
  else {
204
225
  deps.logger(`[stuck-turn] op=recycle-drain sessionId=${sid.slice(0, 8)} outcome=drained`);
226
+ drained += 1;
205
227
  }
206
228
  pendingVerify.delete(sid);
207
229
  }
@@ -225,6 +247,19 @@ export function createStuckTurnWatch(deps) {
225
247
  pendingVerify.set(cand.sessionId, { jsonlPath: cand.jsonlPath, recycledAt: t });
226
248
  deps.recycle(cand.sessionId);
227
249
  }
250
+ // Task 2320 — standing census, emitted on zero. The wedge is a no-event
251
+ // failure: the CLI writes its resume gate to the PTY, not the JSONL, so
252
+ // interactive-wedge.ts (Task 1552) is structurally blind to it and the
253
+ // only trace of the four-hour outage was a climbing ageMs nothing counted.
254
+ // stillFrozen must fall to zero within one tick of a rotation; a value
255
+ // surviving two consecutive ticks is a live wedge with no remedy. This
256
+ // sits inside the try, so a tick that threw logs tick-failed rather than a
257
+ // falsely-healthy row of zeros.
258
+ // `rotated` counts rotations REQUESTED: the composite is async and
259
+ // fire-and-forget, so one whose stop times out increments this while
260
+ // nothing moved. Its own `op=recycle-rotate outcome=failed` line is what
261
+ // distinguishes a requested rotation from a performed one.
262
+ deps.logger(`[stuck-turn] op=recycle-census rotated=${rotated} stillFrozen=${stillFrozen} drained=${drained}`);
228
263
  deps.logger(`[stuck-turn] tick scanned=${scanned} wedged=${wedged}`);
229
264
  }
230
265
  catch (err) {