@rubytech/create-maxy-code 0.1.542 → 0.1.544

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 (371) hide show
  1. package/dist/__tests__/public-instruction-seed.test.js +102 -0
  2. package/dist/index.js +47 -0
  3. package/dist/public-instruction-seed.js +70 -0
  4. package/package.json +1 -1
  5. package/payload/platform/lib/shared-folder/dist/index.d.ts +47 -0
  6. package/payload/platform/lib/shared-folder/dist/index.d.ts.map +1 -0
  7. package/payload/platform/lib/shared-folder/dist/index.js +93 -0
  8. package/payload/platform/lib/shared-folder/dist/index.js.map +1 -0
  9. package/payload/platform/lib/shared-folder/src/index.ts +92 -0
  10. package/payload/platform/lib/shared-folder/tsconfig.json +5 -0
  11. package/payload/platform/package.json +2 -2
  12. package/payload/platform/plugins/admin/PLUGIN.md +2 -0
  13. package/payload/platform/plugins/admin/hooks/__tests__/public-tool-surface.test.sh +173 -0
  14. package/payload/platform/plugins/admin/hooks/public-tool-surface.sh +123 -0
  15. package/payload/platform/plugins/admin/mcp/dist/tools/agent-write.d.ts.map +1 -1
  16. package/payload/platform/plugins/admin/mcp/dist/tools/agent-write.js +13 -1
  17. package/payload/platform/plugins/admin/mcp/dist/tools/agent-write.js.map +1 -1
  18. package/payload/platform/plugins/admin/skills/channel-instruction/SKILL.md +46 -0
  19. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +18 -1
  20. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +15 -0
  21. package/payload/platform/plugins/docs/references/access-control.md +14 -0
  22. package/payload/platform/plugins/docs/references/internals.md +2 -0
  23. package/payload/platform/plugins/docs/references/platform.md +1 -0
  24. package/payload/platform/plugins/filesystem/.claude-plugin/plugin.json +1 -1
  25. package/payload/platform/plugins/filesystem/PLUGIN.md +11 -1
  26. package/payload/platform/plugins/filesystem/mcp/dist/index.js +23 -7
  27. package/payload/platform/plugins/filesystem/mcp/dist/index.js.map +1 -1
  28. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/scope.test.js +104 -4
  29. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/scope.test.js.map +1 -1
  30. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/shared-folder.test.d.ts +2 -0
  31. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/shared-folder.test.d.ts.map +1 -0
  32. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/shared-folder.test.js +67 -0
  33. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/shared-folder.test.js.map +1 -0
  34. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts +16 -2
  35. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts.map +1 -1
  36. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js +54 -1
  37. package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js.map +1 -1
  38. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/handlers.test.js +76 -2
  39. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/handlers.test.js.map +1 -1
  40. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.d.ts +1 -0
  41. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.d.ts.map +1 -1
  42. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.js +3 -3
  43. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.js.map +1 -1
  44. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-glob.d.ts +1 -0
  45. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-glob.d.ts.map +1 -1
  46. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-glob.js +1 -1
  47. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-glob.js.map +1 -1
  48. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-grep.d.ts +1 -0
  49. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-grep.d.ts.map +1 -1
  50. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-grep.js +3 -3
  51. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-grep.js.map +1 -1
  52. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-list.d.ts +1 -0
  53. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-list.d.ts.map +1 -1
  54. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-list.js +3 -3
  55. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-list.js.map +1 -1
  56. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-read.d.ts +1 -0
  57. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-read.d.ts.map +1 -1
  58. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-read.js +3 -3
  59. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-read.js.map +1 -1
  60. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.d.ts +1 -0
  61. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.d.ts.map +1 -1
  62. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.js +3 -3
  63. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.js.map +1 -1
  64. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js +81 -1
  65. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js.map +1 -1
  66. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +22 -0
  67. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
  68. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +80 -0
  69. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
  70. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +13 -1
  71. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  72. package/payload/platform/plugins/whatsapp/PLUGIN.md +2 -2
  73. package/payload/platform/plugins/whatsapp/mcp/dist/index.js +1 -1
  74. package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
  75. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +1 -1
  76. package/payload/platform/scripts/__tests__/public-surface-registered.test.sh +102 -0
  77. package/payload/platform/scripts/check-no-esm-require.mjs +5 -0
  78. package/payload/platform/scripts/lib/__tests__/account-settings-public-surface.test.sh +109 -0
  79. package/payload/platform/scripts/lib/account-settings-public-surface.sh +109 -0
  80. package/payload/platform/scripts/lib/provision-account-dir.sh +6 -3
  81. package/payload/platform/scripts/setup-account.sh +14 -0
  82. package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.d.ts +8 -4
  83. package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.d.ts.map +1 -1
  84. package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.js +27 -7
  85. package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.js.map +1 -1
  86. package/payload/platform/services/claude-session-manager/dist/config.d.ts +11 -6
  87. package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
  88. package/payload/platform/services/claude-session-manager/dist/config.js +8 -4
  89. package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
  90. package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts +24 -2
  91. package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts.map +1 -1
  92. package/payload/platform/services/claude-session-manager/dist/fs-watcher.js +23 -1
  93. package/payload/platform/services/claude-session-manager/dist/fs-watcher.js.map +1 -1
  94. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +35 -0
  95. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  96. package/payload/platform/services/claude-session-manager/dist/http-server.js +286 -25
  97. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  98. package/payload/platform/services/claude-session-manager/dist/index.js +169 -51
  99. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  100. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +24 -12
  101. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  102. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +194 -28
  103. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  104. package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.d.ts.map +1 -1
  105. package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.js +4 -0
  106. package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.js.map +1 -1
  107. package/payload/platform/services/claude-session-manager/dist/public-surface-audit.d.ts +24 -3
  108. package/payload/platform/services/claude-session-manager/dist/public-surface-audit.d.ts.map +1 -1
  109. package/payload/platform/services/claude-session-manager/dist/public-surface-audit.js +29 -3
  110. package/payload/platform/services/claude-session-manager/dist/public-surface-audit.js.map +1 -1
  111. package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.d.ts +27 -0
  112. package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.d.ts.map +1 -1
  113. package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.js +32 -0
  114. package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.js.map +1 -1
  115. package/payload/platform/services/claude-session-manager/dist/role-census.d.ts +24 -0
  116. package/payload/platform/services/claude-session-manager/dist/role-census.d.ts.map +1 -0
  117. package/payload/platform/services/claude-session-manager/dist/role-census.js +50 -0
  118. package/payload/platform/services/claude-session-manager/dist/role-census.js.map +1 -0
  119. package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts +24 -2
  120. package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts.map +1 -1
  121. package/payload/platform/services/claude-session-manager/dist/session-sidecar.js +21 -0
  122. package/payload/platform/services/claude-session-manager/dist/session-sidecar.js.map +1 -1
  123. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.d.ts +76 -0
  124. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.d.ts.map +1 -1
  125. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.js +110 -19
  126. package/payload/platform/services/claude-session-manager/dist/stuck-turn-recover.js.map +1 -1
  127. package/payload/platform/services/claude-session-manager/dist/stuck-turn-respawn.d.ts +60 -0
  128. package/payload/platform/services/claude-session-manager/dist/stuck-turn-respawn.d.ts.map +1 -0
  129. package/payload/platform/services/claude-session-manager/dist/stuck-turn-respawn.js +93 -0
  130. package/payload/platform/services/claude-session-manager/dist/stuck-turn-respawn.js.map +1 -0
  131. package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts +31 -1
  132. package/payload/platform/services/claude-session-manager/dist/stuck-turn.d.ts.map +1 -1
  133. package/payload/platform/services/claude-session-manager/dist/stuck-turn.js +72 -9
  134. package/payload/platform/services/claude-session-manager/dist/stuck-turn.js.map +1 -1
  135. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +1 -1
  136. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  137. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +9 -1
  138. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  139. package/payload/platform/services/claude-session-manager/dist/types.d.ts +9 -3
  140. package/payload/platform/services/claude-session-manager/dist/types.d.ts.map +1 -1
  141. package/payload/platform/services/telegram-channel/dist/instructions.d.ts +0 -1
  142. package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
  143. package/payload/platform/services/telegram-channel/dist/instructions.js +0 -46
  144. package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
  145. package/payload/platform/services/telegram-channel/dist/notification.d.ts +16 -4
  146. package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -1
  147. package/payload/platform/services/telegram-channel/dist/notification.js +27 -14
  148. package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -1
  149. package/payload/platform/services/telegram-channel/dist/server.d.ts.map +1 -1
  150. package/payload/platform/services/telegram-channel/dist/server.js +10 -0
  151. package/payload/platform/services/telegram-channel/dist/server.js.map +1 -1
  152. package/payload/platform/services/webchat-channel/dist/instructions.d.ts +0 -1
  153. package/payload/platform/services/webchat-channel/dist/instructions.d.ts.map +1 -1
  154. package/payload/platform/services/webchat-channel/dist/instructions.js +0 -60
  155. package/payload/platform/services/webchat-channel/dist/instructions.js.map +1 -1
  156. package/payload/platform/services/webchat-channel/dist/notification.d.ts +14 -2
  157. package/payload/platform/services/webchat-channel/dist/notification.d.ts.map +1 -1
  158. package/payload/platform/services/webchat-channel/dist/notification.js +28 -12
  159. package/payload/platform/services/webchat-channel/dist/notification.js.map +1 -1
  160. package/payload/platform/services/webchat-channel/dist/server.d.ts.map +1 -1
  161. package/payload/platform/services/webchat-channel/dist/server.js +10 -0
  162. package/payload/platform/services/webchat-channel/dist/server.js.map +1 -1
  163. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +97 -33
  164. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  165. package/payload/platform/services/whatsapp-channel/dist/notification.js +98 -76
  166. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  167. package/payload/platform/services/whatsapp-channel/dist/server.d.ts +18 -0
  168. package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
  169. package/payload/platform/services/whatsapp-channel/dist/server.js +87 -5
  170. package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
  171. package/payload/platform/services/whatsapp-channel/dist/targets.d.ts +41 -9
  172. package/payload/platform/services/whatsapp-channel/dist/targets.d.ts.map +1 -1
  173. package/payload/platform/services/whatsapp-channel/dist/targets.js +42 -7
  174. package/payload/platform/services/whatsapp-channel/dist/targets.js.map +1 -1
  175. package/payload/platform/templates/agents/admin/INSTRUCTION.md +0 -0
  176. package/payload/server/{adminuser-self-heal-LC7HZAC6.js → adminuser-self-heal-ZHFNDKJK.js} +1 -1
  177. package/payload/server/{chunk-HZP7BKBF.js → chunk-CVUSUNXM.js} +128 -4
  178. package/payload/server/{chunk-CKTHAHL4.js → chunk-DU7GPDJJ.js} +4 -2
  179. package/payload/server/{chunk-PFF6I7KP.js → chunk-HYQNUVGO.js} +8 -1
  180. package/payload/server/{chunk-ERIM3EFB.js → chunk-X2RRMHVV.js} +1 -1
  181. package/payload/server/{manager-CM55K4J2.js → manager-TI2YJQVZ.js} +3 -3
  182. package/payload/server/maxy-edge.js +3 -3
  183. package/payload/server/public/activity.html +5 -5
  184. package/payload/server/public/agents.html +4 -4
  185. package/payload/server/public/assets/AdminLoginScreens-BGKtDqAk.js +1 -0
  186. package/payload/server/public/assets/AdminLoginScreens-BGKtDqAk.js.br +0 -0
  187. package/payload/server/public/assets/AdminLoginScreens-BGKtDqAk.js.gz +0 -0
  188. package/payload/server/public/assets/AdminShell-DnfgsAQl.js +2 -0
  189. package/payload/server/public/assets/AdminShell-DnfgsAQl.js.br +0 -0
  190. package/payload/server/public/assets/AdminShell-DnfgsAQl.js.gz +0 -0
  191. package/payload/server/public/assets/activity-ByJSut0Q.js +1 -0
  192. package/payload/server/public/assets/activity-ByJSut0Q.js.br +0 -0
  193. package/payload/server/public/assets/activity-ByJSut0Q.js.gz +0 -0
  194. package/payload/server/public/assets/admin-CkeJO6kA.js +1 -0
  195. package/payload/server/public/assets/admin-CkeJO6kA.js.br +0 -0
  196. package/payload/server/public/assets/admin-CkeJO6kA.js.gz +0 -0
  197. package/payload/server/public/assets/agents-D8phtRX5.js +1 -0
  198. package/payload/server/public/assets/agents-D8phtRX5.js.br +0 -0
  199. package/payload/server/public/assets/agents-D8phtRX5.js.gz +0 -0
  200. package/payload/server/public/assets/browser-DQSTjdom.js +1 -0
  201. package/payload/server/public/assets/browser-DQSTjdom.js.br +0 -0
  202. package/payload/server/public/assets/browser-DQSTjdom.js.gz +0 -0
  203. package/payload/server/public/assets/calendar-DFJu1XjP.js +1 -0
  204. package/payload/server/public/assets/calendar-DFJu1XjP.js.br +0 -0
  205. package/payload/server/public/assets/calendar-DFJu1XjP.js.gz +0 -0
  206. package/payload/server/public/assets/chat-DUqtIsOt.js +1 -0
  207. package/payload/server/public/assets/chat-DUqtIsOt.js.br +0 -0
  208. package/payload/server/public/assets/chat-DUqtIsOt.js.gz +0 -0
  209. package/payload/server/public/assets/chevron-left-DFK18xVX.js +1 -0
  210. package/payload/server/public/assets/chevron-left-DFK18xVX.js.br +0 -0
  211. package/payload/server/public/assets/chevron-right-DJ4oaHoN.js +1 -0
  212. package/payload/server/public/assets/chevron-right-DJ4oaHoN.js.br +0 -0
  213. package/payload/server/public/assets/clock-wHIan2DW.js +1 -0
  214. package/payload/server/public/assets/clock-wHIan2DW.js.br +0 -0
  215. package/payload/server/public/assets/{copy-3kj9Oaoc.js → copy-lFFhXRGk.js} +1 -1
  216. package/payload/server/public/assets/copy-lFFhXRGk.js.br +0 -0
  217. package/payload/server/public/assets/copy-lFFhXRGk.js.gz +0 -0
  218. package/payload/server/public/assets/data-Cxv97ARy.js +1 -0
  219. package/payload/server/public/assets/data-Cxv97ARy.js.br +0 -0
  220. package/payload/server/public/assets/data-Cxv97ARy.js.gz +0 -0
  221. package/payload/server/public/assets/{file-text-CBaewT76.js → file-text-D2Y-bkNy.js} +1 -1
  222. package/payload/server/public/assets/file-text-D2Y-bkNy.js.br +0 -0
  223. package/payload/server/public/assets/file-text-D2Y-bkNy.js.gz +0 -0
  224. package/payload/server/public/assets/{graph-B8-e2_Z-.js → graph-C-3yN6JD.js} +3 -3
  225. package/payload/server/public/assets/graph-C-3yN6JD.js.br +0 -0
  226. package/payload/server/public/assets/graph-C-3yN6JD.js.gz +0 -0
  227. package/payload/server/public/assets/{graph-labels-Bsc23eZU.js → graph-labels-DiaPLP27.js} +1 -1
  228. package/payload/server/public/assets/graph-labels-DiaPLP27.js.br +0 -0
  229. package/payload/server/public/assets/graph-labels-DiaPLP27.js.gz +0 -0
  230. package/payload/server/public/assets/operator-KuGPvSa9.js +1 -0
  231. package/payload/server/public/assets/operator-KuGPvSa9.js.br +0 -0
  232. package/payload/server/public/assets/operator-KuGPvSa9.js.gz +0 -0
  233. package/payload/server/public/assets/page-BhGeFXWA.js +1 -0
  234. package/payload/server/public/assets/page-BhGeFXWA.js.br +0 -0
  235. package/payload/server/public/assets/page-BhGeFXWA.js.gz +0 -0
  236. package/payload/server/public/assets/page-EnbVC-yM.js +32 -0
  237. package/payload/server/public/assets/page-EnbVC-yM.js.br +0 -0
  238. package/payload/server/public/assets/page-EnbVC-yM.js.gz +0 -0
  239. package/payload/server/public/assets/play-jZFZAG-t.js +1 -0
  240. package/payload/server/public/assets/play-jZFZAG-t.js.br +0 -0
  241. package/payload/server/public/assets/play-jZFZAG-t.js.gz +0 -0
  242. package/payload/server/public/assets/public-CdSgMNC7.js +1 -0
  243. package/payload/server/public/assets/public-CdSgMNC7.js.br +0 -0
  244. package/payload/server/public/assets/public-CdSgMNC7.js.gz +0 -0
  245. package/payload/server/public/assets/{rotate-ccw-FZW7c8p8.js → rotate-ccw-rTRuTqei.js} +1 -1
  246. package/payload/server/public/assets/rotate-ccw-rTRuTqei.js.br +0 -0
  247. package/payload/server/public/assets/rotate-ccw-rTRuTqei.js.gz +0 -0
  248. package/payload/server/public/assets/routines-DNRxNRSQ.js +2 -0
  249. package/payload/server/public/assets/routines-DNRxNRSQ.js.br +0 -0
  250. package/payload/server/public/assets/routines-DNRxNRSQ.js.gz +0 -0
  251. package/payload/server/public/assets/skills-DFWtZNkW.js +1 -0
  252. package/payload/server/public/assets/skills-DFWtZNkW.js.br +0 -0
  253. package/payload/server/public/assets/skills-DFWtZNkW.js.gz +0 -0
  254. package/payload/server/public/assets/tasks-B94AuKSy.js +3 -0
  255. package/payload/server/public/assets/tasks-B94AuKSy.js.br +0 -0
  256. package/payload/server/public/assets/tasks-B94AuKSy.js.gz +0 -0
  257. package/payload/server/public/assets/{triangle-alert-CR-jRJdI.js → triangle-alert-DtWUg6jR.js} +1 -1
  258. package/payload/server/public/assets/triangle-alert-DtWUg6jR.js.br +0 -0
  259. package/payload/server/public/assets/triangle-alert-DtWUg6jR.js.gz +0 -0
  260. package/payload/server/public/assets/useCopyFeedback-CjKYO-Qf.js +1 -0
  261. package/payload/server/public/assets/useCopyFeedback-CjKYO-Qf.js.br +0 -0
  262. package/payload/server/public/assets/useCopyFeedback-CjKYO-Qf.js.gz +0 -0
  263. package/payload/server/public/assets/useMediaQuery-BYIHo-xL.js +14 -0
  264. package/payload/server/public/assets/useMediaQuery-BYIHo-xL.js.br +0 -0
  265. package/payload/server/public/assets/useMediaQuery-BYIHo-xL.js.gz +0 -0
  266. package/payload/server/public/assets/useMediaQuery-DlOWP56H.css +1 -0
  267. package/payload/server/public/assets/useMediaQuery-DlOWP56H.css.br +0 -0
  268. package/payload/server/public/assets/useMediaQuery-DlOWP56H.css.gz +0 -0
  269. package/payload/server/public/assets/useVoiceRecorder-BKFAYuzz.js +2 -0
  270. package/payload/server/public/assets/useVoiceRecorder-BKFAYuzz.js.br +0 -0
  271. package/payload/server/public/assets/useVoiceRecorder-BKFAYuzz.js.gz +0 -0
  272. package/payload/server/public/assets/{wrench-CpCOYUBc.js → wrench-Ct4kf-uv.js} +1 -1
  273. package/payload/server/public/assets/wrench-Ct4kf-uv.js.br +0 -0
  274. package/payload/server/public/assets/wrench-Ct4kf-uv.js.gz +0 -0
  275. package/payload/server/public/browser.html +4 -4
  276. package/payload/server/public/calendar.html +8 -8
  277. package/payload/server/public/chat.html +13 -13
  278. package/payload/server/public/data.html +11 -11
  279. package/payload/server/public/graph.html +9 -9
  280. package/payload/server/public/index.html +14 -14
  281. package/payload/server/public/operator.html +14 -14
  282. package/payload/server/public/public.html +13 -13
  283. package/payload/server/public/routines.html +6 -6
  284. package/payload/server/public/skills.html +5 -5
  285. package/payload/server/public/tasks.html +6 -6
  286. package/payload/server/server.js +537 -263
  287. package/payload/server/{src-JN6PIAJN.js → src-MM64CYYZ.js} +1 -1
  288. package/payload/server/{userprofile-reconcile-QHVLY2AH.js → userprofile-reconcile-TL4JKBPG.js} +1 -1
  289. package/payload/server/public/assets/AdminLoginScreens-DuFCjbz2.js +0 -1
  290. package/payload/server/public/assets/AdminLoginScreens-DuFCjbz2.js.br +0 -0
  291. package/payload/server/public/assets/AdminLoginScreens-DuFCjbz2.js.gz +0 -0
  292. package/payload/server/public/assets/AdminShell-DJL5DzRX.js +0 -2
  293. package/payload/server/public/assets/AdminShell-DJL5DzRX.js.br +0 -0
  294. package/payload/server/public/assets/AdminShell-DJL5DzRX.js.gz +0 -0
  295. package/payload/server/public/assets/activity-CpMnNr5c.js +0 -1
  296. package/payload/server/public/assets/activity-CpMnNr5c.js.br +0 -0
  297. package/payload/server/public/assets/activity-CpMnNr5c.js.gz +0 -0
  298. package/payload/server/public/assets/admin-CBwKIfaI.js +0 -1
  299. package/payload/server/public/assets/admin-CBwKIfaI.js.br +0 -0
  300. package/payload/server/public/assets/admin-CBwKIfaI.js.gz +0 -0
  301. package/payload/server/public/assets/agents-C4LmSKjb.js +0 -1
  302. package/payload/server/public/assets/agents-C4LmSKjb.js.br +0 -0
  303. package/payload/server/public/assets/agents-C4LmSKjb.js.gz +0 -0
  304. package/payload/server/public/assets/browser-Bm9xm_yc.js +0 -1
  305. package/payload/server/public/assets/browser-Bm9xm_yc.js.br +0 -0
  306. package/payload/server/public/assets/browser-Bm9xm_yc.js.gz +0 -0
  307. package/payload/server/public/assets/calendar-CNY9FTWe.js +0 -1
  308. package/payload/server/public/assets/calendar-CNY9FTWe.js.br +0 -0
  309. package/payload/server/public/assets/calendar-CNY9FTWe.js.gz +0 -0
  310. package/payload/server/public/assets/chat-3WoUGCTd.js +0 -1
  311. package/payload/server/public/assets/chat-3WoUGCTd.js.br +0 -0
  312. package/payload/server/public/assets/chat-3WoUGCTd.js.gz +0 -0
  313. package/payload/server/public/assets/chevron-left-BE16BJnw.js +0 -1
  314. package/payload/server/public/assets/chevron-left-BE16BJnw.js.br +0 -0
  315. package/payload/server/public/assets/chevron-right-Bu2VKpeU.js +0 -1
  316. package/payload/server/public/assets/chevron-right-Bu2VKpeU.js.br +0 -0
  317. package/payload/server/public/assets/clock-C4Nu2aRV.js +0 -1
  318. package/payload/server/public/assets/clock-C4Nu2aRV.js.br +0 -0
  319. package/payload/server/public/assets/copy-3kj9Oaoc.js.br +0 -0
  320. package/payload/server/public/assets/copy-3kj9Oaoc.js.gz +0 -0
  321. package/payload/server/public/assets/data-C-x5EHyi.js +0 -1
  322. package/payload/server/public/assets/data-C-x5EHyi.js.br +0 -1
  323. package/payload/server/public/assets/data-C-x5EHyi.js.gz +0 -0
  324. package/payload/server/public/assets/file-text-CBaewT76.js.br +0 -0
  325. package/payload/server/public/assets/file-text-CBaewT76.js.gz +0 -0
  326. package/payload/server/public/assets/graph-B8-e2_Z-.js.br +0 -0
  327. package/payload/server/public/assets/graph-B8-e2_Z-.js.gz +0 -0
  328. package/payload/server/public/assets/graph-labels-Bsc23eZU.js.br +0 -0
  329. package/payload/server/public/assets/graph-labels-Bsc23eZU.js.gz +0 -0
  330. package/payload/server/public/assets/operator-Cve0-qfO.js +0 -1
  331. package/payload/server/public/assets/operator-Cve0-qfO.js.br +0 -0
  332. package/payload/server/public/assets/operator-Cve0-qfO.js.gz +0 -0
  333. package/payload/server/public/assets/page-BgVMs6Vf.js +0 -1
  334. package/payload/server/public/assets/page-BgVMs6Vf.js.br +0 -0
  335. package/payload/server/public/assets/page-BgVMs6Vf.js.gz +0 -0
  336. package/payload/server/public/assets/page-fABub-w8.js +0 -32
  337. package/payload/server/public/assets/page-fABub-w8.js.br +0 -0
  338. package/payload/server/public/assets/page-fABub-w8.js.gz +0 -0
  339. package/payload/server/public/assets/play-B6zXB9K7.js +0 -1
  340. package/payload/server/public/assets/play-B6zXB9K7.js.br +0 -0
  341. package/payload/server/public/assets/play-B6zXB9K7.js.gz +0 -0
  342. package/payload/server/public/assets/public--R2DbdWs.js +0 -1
  343. package/payload/server/public/assets/public--R2DbdWs.js.br +0 -0
  344. package/payload/server/public/assets/public--R2DbdWs.js.gz +0 -0
  345. package/payload/server/public/assets/rotate-ccw-FZW7c8p8.js.br +0 -0
  346. package/payload/server/public/assets/rotate-ccw-FZW7c8p8.js.gz +0 -0
  347. package/payload/server/public/assets/routines-BpZs2SaT.js +0 -2
  348. package/payload/server/public/assets/routines-BpZs2SaT.js.br +0 -0
  349. package/payload/server/public/assets/routines-BpZs2SaT.js.gz +0 -0
  350. package/payload/server/public/assets/skills-DF7uyEEz.js +0 -1
  351. package/payload/server/public/assets/skills-DF7uyEEz.js.br +0 -0
  352. package/payload/server/public/assets/skills-DF7uyEEz.js.gz +0 -0
  353. package/payload/server/public/assets/tasks-BfJJmoWO.js +0 -3
  354. package/payload/server/public/assets/tasks-BfJJmoWO.js.br +0 -0
  355. package/payload/server/public/assets/tasks-BfJJmoWO.js.gz +0 -0
  356. package/payload/server/public/assets/triangle-alert-CR-jRJdI.js.br +0 -0
  357. package/payload/server/public/assets/triangle-alert-CR-jRJdI.js.gz +0 -0
  358. package/payload/server/public/assets/useCopyFeedback-IOuPUAHY.js +0 -1
  359. package/payload/server/public/assets/useCopyFeedback-IOuPUAHY.js.br +0 -0
  360. package/payload/server/public/assets/useCopyFeedback-IOuPUAHY.js.gz +0 -0
  361. package/payload/server/public/assets/useMediaQuery-CA6dR5iz.js +0 -14
  362. package/payload/server/public/assets/useMediaQuery-CA6dR5iz.js.br +0 -0
  363. package/payload/server/public/assets/useMediaQuery-CA6dR5iz.js.gz +0 -0
  364. package/payload/server/public/assets/useMediaQuery-DpwgV1Da.css +0 -1
  365. package/payload/server/public/assets/useMediaQuery-DpwgV1Da.css.br +0 -0
  366. package/payload/server/public/assets/useMediaQuery-DpwgV1Da.css.gz +0 -0
  367. package/payload/server/public/assets/useVoiceRecorder-DGhsN7nV.js +0 -2
  368. package/payload/server/public/assets/useVoiceRecorder-DGhsN7nV.js.br +0 -0
  369. package/payload/server/public/assets/useVoiceRecorder-DGhsN7nV.js.gz +0 -0
  370. package/payload/server/public/assets/wrench-CpCOYUBc.js.br +0 -0
  371. package/payload/server/public/assets/wrench-CpCOYUBc.js.gz +0 -0
@@ -46,4 +46,36 @@ export function buildRcPublicLockdownArgv(channelServerName) {
46
46
  export function formatToolAllowlistLine(p) {
47
47
  return `tool-allowlist role=${p.role} count=${p.count} strictMcp=${p.strictMcp ? 'y' : 'n'} mode=${p.mode}`;
48
48
  }
49
+ /** Task 2339 — the env var carrying this spawn's final `--allowed-tools` set,
50
+ * comma-joined. Stamped by both spawn paths and ONLY for role='public', so its
51
+ * presence is the public-spawn signal the realised-surface PreToolUse hook
52
+ * keys on. Deliberately not `MAXY_SESSION_ROLE`: buildRcChildEnv hardcodes
53
+ * that to 'admin' for every rc-spawn (rc-daemon.ts), and skill-resolution.ts
54
+ * reads it as the admin-seat test, so correcting it is a behaviour change
55
+ * beyond this task's observability scope. */
56
+ export const PUBLIC_ALLOWED_TOOLS_ENV = 'MAXY_PUBLIC_ALLOWED_TOOLS';
57
+ /** The `--allowed-tools` values actually present in a built argv, in order.
58
+ * Read from argv rather than from a resolved allowlist array because
59
+ * pty-spawner's Task 609 dontAsk anchor appends DONTASK_DENY_BASIS after that
60
+ * array is resolved; the hook must classify against what was passed, not
61
+ * against what was computed before the anchor. A trailing flag with no value
62
+ * is skipped — the loop stops at `length - 1`. */
63
+ export function allowedToolsFromArgv(argv) {
64
+ const out = [];
65
+ for (let i = 0; i < argv.length - 1; i++) {
66
+ if (argv[i] === '--allowed-tools')
67
+ out.push(argv[i + 1]);
68
+ }
69
+ return out;
70
+ }
71
+ /** Task 2267 — where this spawn's role came from, emitted once per
72
+ * channel-bound rc-spawn. `source=unresolved` is the fail-closed case: neither
73
+ * the body nor the sidecar produced a role, so the spawn takes the public
74
+ * lockdown. `outcome` is the `readSidecar` verdict behind that resolution, so
75
+ * a deleted sidecar and a corrupted one separate without a second grep. Task
76
+ * 2260's `tool-allowlist role=none` cannot make that distinction: it renders
77
+ * the same token for an unresolved role and a legitimately roleless spawn. */
78
+ export function formatRoleResolutionLine(p) {
79
+ return `[rc-spawn] op=role-resolution sessionId=${p.sessionId.slice(0, 8)} source=${p.source} outcome=${p.outcome}`;
80
+ }
49
81
  //# sourceMappingURL=rc-public-lockdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rc-public-lockdown.js","sourceRoot":"","sources":["../src/rc-public-lockdown.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gFAAgF;AAChF,uEAAuE;AACvE,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,4EAA4E;AAC5E,wEAAwE;AACxE,EAAE;AACF,gFAAgF;AAChF,0DAA0D;AAE1D;;;;;;;4BAO4B;AAC5B,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAA;AAEzD;;;;;+DAK+D;AAC/D,MAAM,UAAU,kBAAkB,CAAC,iBAAgC;IACjE,OAAO,iBAAiB,CAAC,CAAC,CAAC,QAAQ,iBAAiB,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAA;AACpF,CAAC;AAED;;;;4EAI4E;AAC5E,MAAM,UAAU,yBAAyB,CACvC,iBAAgC;IAEhC,MAAM,IAAI,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAA;IAClD,OAAO;QACL,IAAI,EAAE,CAAC,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,SAAS,CAAC;QACtF,YAAY,EAAE,CAAC,IAAI,CAAC;KACrB,CAAA;AACH,CAAC;AAED;;;gCAGgC;AAChC,MAAM,UAAU,uBAAuB,CAAC,CAKvC;IACC,OAAO,uBAAuB,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,CAAA;AAC7G,CAAC"}
1
+ {"version":3,"file":"rc-public-lockdown.js","sourceRoot":"","sources":["../src/rc-public-lockdown.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gFAAgF;AAChF,uEAAuE;AACvE,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,4EAA4E;AAC5E,wEAAwE;AACxE,EAAE;AACF,gFAAgF;AAChF,0DAA0D;AAE1D;;;;;;;4BAO4B;AAC5B,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAA;AAEzD;;;;;+DAK+D;AAC/D,MAAM,UAAU,kBAAkB,CAAC,iBAAgC;IACjE,OAAO,iBAAiB,CAAC,CAAC,CAAC,QAAQ,iBAAiB,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAA;AACpF,CAAC;AAED;;;;4EAI4E;AAC5E,MAAM,UAAU,yBAAyB,CACvC,iBAAgC;IAEhC,MAAM,IAAI,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAA;IAClD,OAAO;QACL,IAAI,EAAE,CAAC,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,SAAS,CAAC;QACtF,YAAY,EAAE,CAAC,IAAI,CAAC;KACrB,CAAA;AACH,CAAC;AAED;;;gCAGgC;AAChC,MAAM,UAAU,uBAAuB,CAAC,CAKvC;IACC,OAAO,uBAAuB,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,CAAA;AAC7G,CAAC;AAED;;;;;;8CAM8C;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,2BAA2B,CAAA;AAEnE;;;;;mDAKmD;AACnD,MAAM,UAAU,oBAAoB,CAAC,IAAuB;IAC1D,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;+EAM+E;AAC/E,MAAM,UAAU,wBAAwB,CAAC,CAIxC;IACC,OAAO,2CAA2C,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,OAAO,EAAE,CAAA;AACrH,CAAC"}
@@ -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
@@ -99,6 +99,21 @@ export interface SessionSidecar {
99
99
  * longer role:"house" is the escalation-precursor violation. Optional on
100
100
  * disk; pre-1440 sidecars (no key) load null. */
101
101
  houseAdminScope?: string | null;
102
+ /** Task 2338 — true when this spawn's persona role was `passive`. The `role`
103
+ * field above records the WIRE role, and `sidecarWireRole` maps `passive` to
104
+ * `public` (:299), so `role` alone cannot tell a one-shot account-manager
105
+ * intake apart from an anonymous visitor. The stuck-turn recycler needs that
106
+ * distinction: a passive session has no channel server and no binding in any
107
+ * store, so routing it to /public-spawn would refuse it where /rc-spawn
108
+ * respawns it today. Optional on disk; pre-2338 sidecars (no key) load false. */
109
+ passive?: boolean;
110
+ /** Task 2338 — which endpoint produced the live process for this session.
111
+ * Only /public-spawn composes the agent persona, so a session whose role is
112
+ * `public` and whose last route was `rc-spawn` is running without its soul
113
+ * file. That is a no-event failure — it emits nothing at the time and does
114
+ * not reproduce on demand — so a periodic reconciliation is the only reader
115
+ * that can see it. Optional on disk; pre-2338 sidecars (no key) load null. */
116
+ spawnRoute?: 'public-spawn' | 'rc-spawn' | null;
102
117
  }
103
118
  export interface SidecarReadOutcome {
104
119
  sidecar: SessionSidecar | null;
@@ -138,4 +153,11 @@ export declare function updateSidecar(path: string, patch: Partial<SessionSideca
138
153
  * fields, so the rename-loses-write window is the existing limitation
139
154
  * rather than a new one. */
140
155
  export declare function appendBridgeId(path: string, bridgeSuffix: string, logger: Logger): 'ok' | 'duplicate' | 'no-sidecar';
156
+ /** Task 2325 — the role a sidecar records. `passive` is a persona role
157
+ * resolved at the spawn boundary; writing it here would fail the ROLES
158
+ * allowlist in `parseSidecar` and make every passive session's sidecar load
159
+ * back as null, so it maps to the wire role it rode in on before the role
160
+ * became first-class. Exported so the derivation is testable and so
161
+ * pty-spawner calls one function rather than repeating a literal. */
162
+ export declare function sidecarWireRole(role: AgentRole): AgentRole;
141
163
  //# 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;IAC/B;;;;;;sFAMkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;;;mFAK+E;IAC/E,UAAU,CAAC,EAAE,cAAc,GAAG,UAAU,GAAG,IAAI,CAAA;CAChD;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')
@@ -274,6 +287,12 @@ function parseSidecar(raw) {
274
287
  : typeof r.houseAdminScope === 'string'
275
288
  ? r.houseAdminScope
276
289
  : null;
290
+ // Task 2338 — optional on disk. A bad value loads as the default rather than
291
+ // rejecting the row: these two fields are diagnostic, and a sidecar dropped
292
+ // over a malformed diagnostic would take the session's role and channel with
293
+ // it, which is what keeps the public tool lockdown applied on a resume.
294
+ const passive = r.passive === true;
295
+ const spawnRoute = r.spawnRoute === 'public-spawn' || r.spawnRoute === 'rc-spawn' ? r.spawnRoute : null;
277
296
  return {
278
297
  senderId: r.senderId,
279
298
  role: r.role,
@@ -294,6 +313,8 @@ function parseSidecar(raw) {
294
313
  agentSlug,
295
314
  accountId,
296
315
  houseAdminScope,
316
+ passive,
317
+ spawnRoute,
297
318
  };
298
319
  }
299
320
  function basenameShort(path) {
@@ -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,80 @@ 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. Rotate it too
93
+ * and a visitor's session respawns with no lockdown and the full admin tool
94
+ * surface — the exact defect Task 2260 closed. The invariant holds on both
95
+ * routes `freshSpawn` can now reach, for two different reasons:
96
+ *
97
+ * - /public-spawn (Task 2338, a public row): the caller builds the body from
98
+ * the watcher row, which IS the sidecar. Without it the row surfaces a null
99
+ * role and a null agentSlug, so the respawn either refuses or falls to the
100
+ * other route with no persona.
101
+ * - /rc-spawn (every other row): the fresh spawn posts no `role`, so `rcRole`
102
+ * is undefined and `effectiveRcRole = rcRole ?? priorSidecar?.role` is the
103
+ * only thing that re-derives the role for it, which is what keeps
104
+ * `buildRcPublicLockdownArgv` applied.
105
+ *
106
+ * The sidecar survives the fresh spawn on its own: the classification write is
107
+ * gated on a channel in the request body AND write-once on `!existsSync`, and
108
+ * no `updateSidecar` caller patches `role` (Task 2338 patches `spawnRoute`
109
+ * only, a diagnostic field no lockdown reads). */
110
+ export declare function rotateWedgedSession(deps: RotateWedgedDeps, input: {
111
+ sessionId: string;
112
+ jsonlPath: string;
113
+ initialMessage: string;
114
+ pendingQueued: number;
115
+ carried: number;
116
+ accountId: string | null;
117
+ }): Promise<void>;
42
118
  //# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mDAgCmD;AACnD,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,123 @@ 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. Rotate it too
98
+ * and a visitor's session respawns with no lockdown and the full admin tool
99
+ * surface — the exact defect Task 2260 closed. The invariant holds on both
100
+ * routes `freshSpawn` can now reach, for two different reasons:
101
+ *
102
+ * - /public-spawn (Task 2338, a public row): the caller builds the body from
103
+ * the watcher row, which IS the sidecar. Without it the row surfaces a null
104
+ * role and a null agentSlug, so the respawn either refuses or falls to the
105
+ * other route with no persona.
106
+ * - /rc-spawn (every other row): the fresh spawn posts no `role`, so `rcRole`
107
+ * is undefined and `effectiveRcRole = rcRole ?? priorSidecar?.role` is the
108
+ * only thing that re-derives the role for it, which is what keeps
109
+ * `buildRcPublicLockdownArgv` applied.
110
+ *
111
+ * The sidecar survives the fresh spawn on its own: the classification write is
112
+ * gated on a channel in the request body AND write-once on `!existsSync`, and
113
+ * no `updateSidecar` caller patches `role` (Task 2338 patches `spawnRoute`
114
+ * only, a diagnostic field no lockdown reads). */
115
+ export async function rotateWedgedSession(deps, input) {
116
+ const id8 = input.sessionId.slice(0, 8);
117
+ const { scopeOutcome, exited } = await stopAndConfirmExit(deps, input.sessionId);
118
+ if (!exited) {
119
+ deps.logger(`[stuck-turn] op=recycle-rotate sessionId=${id8} outcome=failed reason=still-alive stop-outcome=${scopeOutcome}`);
120
+ return;
121
+ }
122
+ let rotatedPath;
123
+ try {
124
+ rotatedPath = deps.rotateJsonl(input.jsonlPath);
125
+ }
126
+ catch (err) {
127
+ // Do NOT spawn: the transcript is still at the live path, so /rc-spawn
128
+ // would resolve mode=resume and re-render the very gate this exists to clear.
129
+ const code = err?.code ?? 'unknown';
130
+ deps.logger(`[stuck-turn] op=recycle-rotate sessionId=${id8} outcome=failed reason=rename-${code}`);
131
+ return;
132
+ }
133
+ // The rotation is its own event, emitted before the spawn: a spawn that hangs
134
+ // must not make the rotation itself unobservable. `carried` is the count of
135
+ // pending inbounds whose text made it into initialMessage; it is below
136
+ // pendingQueued only when an enqueue row carried no string content.
137
+ deps.logger(`[stuck-turn] op=recycle-rotate sessionId=${id8} jsonl=${rotatedPath} pendingQueued=${input.pendingQueued} carried=${input.carried}`);
138
+ try {
139
+ const r = await deps.freshSpawn(input.sessionId, input.accountId, input.initialMessage);
140
+ deps.logger(`[stuck-turn] op=recycle-rotate-spawn sessionId=${id8} spawn=${r.spawned ? 'bound' : 'failed'}`);
50
141
  }
51
142
  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))}`);
143
+ deps.logger(`[stuck-turn] op=recycle-rotate-spawn sessionId=${id8} spawn=error message=${JSON.stringify(err instanceof Error ? err.message : String(err))}`);
53
144
  }
54
145
  }
55
146
  //# 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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"}
@@ -0,0 +1,60 @@
1
+ export interface RespawnRow {
2
+ /** The sidecar's WIRE role. A passive session records `public` here
3
+ * (session-sidecar.ts:299), which is why `passive` below exists. */
4
+ role: string | null;
5
+ channel: string | null;
6
+ /** Non-nullable by construction: `parseSidecar` rejects a row with an empty
7
+ * senderId (session-sidecar.ts:307), so a watcher row that has one has a
8
+ * role and a channel too. The caller passes `null` for the whole row rather
9
+ * than a row with a null senderId, and that takes the rc-spawn branch —
10
+ * which is exactly today's behaviour for a session with no sidecar. */
11
+ senderId: string;
12
+ agentSlug: string | null;
13
+ personId: string | null;
14
+ passive: boolean;
15
+ }
16
+ /** The three per-session channel binding stores, as read-only lookups. */
17
+ export interface ChannelBindings {
18
+ wa(sessionId: string): {
19
+ senderId: string;
20
+ gatewayUrl: string;
21
+ serverPath: string;
22
+ } | undefined;
23
+ webchat(sessionId: string): {
24
+ key: string;
25
+ gatewayUrl: string;
26
+ serverPath: string;
27
+ } | undefined;
28
+ telegram(sessionId: string): {
29
+ senderId: string;
30
+ gatewayUrl: string;
31
+ serverPath: string;
32
+ } | undefined;
33
+ }
34
+ export type RefusalReason = 'no-agent-slug' | 'no-channel-binding';
35
+ export type RespawnPlan = {
36
+ route: 'public-spawn';
37
+ body: Record<string, unknown>;
38
+ } | {
39
+ route: 'rc-spawn';
40
+ body: Record<string, unknown>;
41
+ } | {
42
+ route: null;
43
+ reason: RefusalReason;
44
+ };
45
+ export declare function planRespawn(input: {
46
+ sessionId: string;
47
+ row: RespawnRow | null;
48
+ accountId: string | null;
49
+ initialMessage?: string;
50
+ bindings: ChannelBindings;
51
+ }): RespawnPlan;
52
+ /** Emitted immediately before each POST. Today the respawn is unattributable:
53
+ * `[rc-spawn] op=request` carries no caller and no role, and the only trace of
54
+ * who asked is a `[stuck-turn]` line seconds earlier in the same file. */
55
+ export declare function formatRespawnLine(sessionId: string, plan: RespawnPlan, row: {
56
+ role: string | null;
57
+ agentSlug: string | null;
58
+ } | null): string;
59
+ export declare function formatRespawnRefusedLine(sessionId: string, reason: RefusalReason): string;
60
+ //# sourceMappingURL=stuck-turn-respawn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stuck-turn-respawn.d.ts","sourceRoot":"","sources":["../src/stuck-turn-respawn.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,UAAU;IACzB;yEACqE;IACrE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB;;;;4EAIwE;IACxE,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;IAC/F,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;IAC/F,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CACtG;AAED,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,oBAAoB,CAAA;AAElE,MAAM,MAAM,WAAW,GACnB;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACxD;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACpD;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAA;AA4C1C,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,UAAU,GAAG,IAAI,CAAA;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,eAAe,CAAA;CAC1B,GAAG,WAAW,CAkCd;AAED;;2EAE2E;AAC3E,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,WAAW,EAGjB,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAC5D,MAAM,CAGR;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAEzF"}