@rubytech/create-maxy-code 0.1.357 → 0.1.359

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 (260) hide show
  1. package/dist/__tests__/claude-ptys-slice.test.js +36 -1
  2. package/dist/__tests__/neo4j-pidfile-scrub.test.js +103 -0
  3. package/dist/index.js +42 -7
  4. package/dist/neo4j-pidfile-scrub.js +90 -0
  5. package/dist/port-resolution.js +18 -1
  6. package/package.json +1 -1
  7. package/payload/platform/package-lock.json +237 -0
  8. package/payload/platform/plugins/admin/mcp/dist/__tests__/capabilities-here.test.js +79 -1
  9. package/payload/platform/plugins/admin/mcp/dist/__tests__/capabilities-here.test.js.map +1 -1
  10. package/payload/platform/plugins/admin/mcp/dist/index.js +17 -3
  11. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  12. package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.d.ts +16 -0
  13. package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.d.ts.map +1 -1
  14. package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.js +52 -0
  15. package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.js.map +1 -1
  16. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +61 -1
  17. package/payload/platform/plugins/cloudflare/PLUGIN.md +7 -1
  18. package/payload/platform/plugins/cloudflare/bin/__tests__/cf-token.test.sh +195 -0
  19. package/payload/platform/plugins/cloudflare/bin/cf-token.sh +157 -0
  20. package/payload/platform/plugins/cloudflare/references/api.md +2 -0
  21. package/payload/platform/plugins/cloudflare/skills/cloudflare/SKILL.md +14 -0
  22. package/payload/platform/plugins/cloudflare/skills/site-deploy/SKILL.md +10 -1
  23. package/payload/platform/plugins/docs/PLUGIN.md +2 -0
  24. package/payload/platform/plugins/docs/references/admin-ui.md +2 -0
  25. package/payload/platform/plugins/docs/references/claudeai-connectors.md +45 -0
  26. package/payload/platform/plugins/docs/references/cloudflare.md +6 -0
  27. package/payload/platform/plugins/docs/references/troubleshooting.md +2 -0
  28. package/payload/platform/plugins/email/.claude-plugin/plugin.json +1 -1
  29. package/payload/platform/plugins/email/PLUGIN.md +7 -3
  30. package/payload/platform/plugins/email/mcp/dist/__tests__/body-extract.test.d.ts +2 -0
  31. package/payload/platform/plugins/email/mcp/dist/__tests__/body-extract.test.d.ts.map +1 -0
  32. package/payload/platform/plugins/email/mcp/dist/__tests__/body-extract.test.js +99 -0
  33. package/payload/platform/plugins/email/mcp/dist/__tests__/body-extract.test.js.map +1 -0
  34. package/payload/platform/plugins/email/mcp/dist/__tests__/compose-draft-id.test.d.ts +2 -0
  35. package/payload/platform/plugins/email/mcp/dist/__tests__/compose-draft-id.test.d.ts.map +1 -0
  36. package/payload/platform/plugins/email/mcp/dist/__tests__/compose-draft-id.test.js +32 -0
  37. package/payload/platform/plugins/email/mcp/dist/__tests__/compose-draft-id.test.js.map +1 -0
  38. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft-edit.test.js +64 -6
  39. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft-edit.test.js.map +1 -1
  40. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft.test.js +12 -0
  41. package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft.test.js.map +1 -1
  42. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.d.ts +2 -0
  43. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.d.ts.map +1 -0
  44. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js +58 -0
  45. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js.map +1 -0
  46. package/payload/platform/plugins/email/mcp/dist/__tests__/imap-drafts.test.js +94 -9
  47. package/payload/platform/plugins/email/mcp/dist/__tests__/imap-drafts.test.js.map +1 -1
  48. package/payload/platform/plugins/email/mcp/dist/__tests__/imap-probe.test.js +109 -1
  49. package/payload/platform/plugins/email/mcp/dist/__tests__/imap-probe.test.js.map +1 -1
  50. package/payload/platform/plugins/email/mcp/dist/__tests__/mail-options.test.js +4 -0
  51. package/payload/platform/plugins/email/mcp/dist/__tests__/mail-options.test.js.map +1 -1
  52. package/payload/platform/plugins/email/mcp/dist/index.js +39 -2
  53. package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
  54. package/payload/platform/plugins/email/mcp/dist/lib/compose.d.ts +5 -0
  55. package/payload/platform/plugins/email/mcp/dist/lib/compose.d.ts.map +1 -1
  56. package/payload/platform/plugins/email/mcp/dist/lib/compose.js +8 -1
  57. package/payload/platform/plugins/email/mcp/dist/lib/compose.js.map +1 -1
  58. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +13 -0
  59. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
  60. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +35 -0
  61. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
  62. package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +83 -30
  63. package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts.map +1 -1
  64. package/payload/platform/plugins/email/mcp/dist/lib/imap.js +327 -112
  65. package/payload/platform/plugins/email/mcp/dist/lib/imap.js.map +1 -1
  66. package/payload/platform/plugins/email/mcp/dist/lib/setup-probe.d.ts +19 -0
  67. package/payload/platform/plugins/email/mcp/dist/lib/setup-probe.d.ts.map +1 -1
  68. package/payload/platform/plugins/email/mcp/dist/lib/setup-probe.js +33 -0
  69. package/payload/platform/plugins/email/mcp/dist/lib/setup-probe.js.map +1 -1
  70. package/payload/platform/plugins/email/mcp/dist/lib/smtp.d.ts +6 -0
  71. package/payload/platform/plugins/email/mcp/dist/lib/smtp.d.ts.map +1 -1
  72. package/payload/platform/plugins/email/mcp/dist/lib/smtp.js +4 -0
  73. package/payload/platform/plugins/email/mcp/dist/lib/smtp.js.map +1 -1
  74. package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.d.ts +8 -1
  75. package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.d.ts.map +1 -1
  76. package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.js +10 -6
  77. package/payload/platform/plugins/email/mcp/dist/tools/email-draft-edit.js.map +1 -1
  78. package/payload/platform/plugins/email/mcp/dist/tools/email-draft.d.ts.map +1 -1
  79. package/payload/platform/plugins/email/mcp/dist/tools/email-draft.js +4 -2
  80. package/payload/platform/plugins/email/mcp/dist/tools/email-draft.js.map +1 -1
  81. package/payload/platform/plugins/email/mcp/dist/tools/email-fetch-body.d.ts +15 -0
  82. package/payload/platform/plugins/email/mcp/dist/tools/email-fetch-body.d.ts.map +1 -0
  83. package/payload/platform/plugins/email/mcp/dist/tools/email-fetch-body.js +29 -0
  84. package/payload/platform/plugins/email/mcp/dist/tools/email-fetch-body.js.map +1 -0
  85. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.d.ts.map +1 -1
  86. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js +11 -1
  87. package/payload/platform/plugins/email/mcp/dist/tools/email-setup.js.map +1 -1
  88. package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts.map +1 -1
  89. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js +24 -1
  90. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js.map +1 -1
  91. package/payload/platform/plugins/email/mcp/package.json +2 -0
  92. package/payload/platform/plugins/email/references/email-reference.md +30 -3
  93. package/payload/platform/scripts/rss-sampler.sh +21 -0
  94. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  95. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
  96. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  97. package/payload/platform/services/claude-session-manager/dist/connector-auth.d.ts +31 -0
  98. package/payload/platform/services/claude-session-manager/dist/connector-auth.d.ts.map +1 -0
  99. package/payload/platform/services/claude-session-manager/dist/connector-auth.js +49 -0
  100. package/payload/platform/services/claude-session-manager/dist/connector-auth.js.map +1 -0
  101. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +24 -0
  102. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  103. package/payload/platform/services/claude-session-manager/dist/http-server.js +214 -17
  104. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  105. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +13 -5
  106. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
  107. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +46 -11
  108. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  109. package/payload/platform/services/webchat-channel/dist/instructions.d.ts +1 -0
  110. package/payload/platform/services/webchat-channel/dist/instructions.d.ts.map +1 -1
  111. package/payload/platform/services/webchat-channel/dist/instructions.js +28 -0
  112. package/payload/platform/services/webchat-channel/dist/instructions.js.map +1 -1
  113. package/payload/platform/services/webchat-channel/dist/server.d.ts.map +1 -1
  114. package/payload/platform/services/webchat-channel/dist/server.js +75 -5
  115. package/payload/platform/services/webchat-channel/dist/server.js.map +1 -1
  116. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
  117. package/payload/server/public/assets/{AdminLoginScreens-BW1UgfoI.js → AdminLoginScreens-tHyAPNnQ.js} +1 -1
  118. package/payload/server/public/assets/AdminShell-Ce9izNVZ.js +1 -0
  119. package/payload/server/public/assets/{Checkbox-O1qvMk_u.js → Checkbox-Cq6SJJlX.js} +1 -1
  120. package/payload/server/public/assets/OperatorConversations-BERW_hUa.css +1 -0
  121. package/payload/server/public/assets/OperatorConversations-m2lz6Ss7.js +9 -0
  122. package/payload/server/public/assets/admin-D9iMgdbN.js +1 -0
  123. package/payload/server/public/assets/{arc-DpkSQNto.js → arc-Crkz45LN.js} +1 -1
  124. package/payload/server/public/assets/architecture-YZFGNWBL-Dma4Bgha.js +1 -0
  125. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-Bw7Yq8O9.js → architectureDiagram-Q4EWVU46-C9JThHgP.js} +1 -1
  126. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-BBtJQFSz.js → blockDiagram-DXYQGD6D-DpsV_HXT.js} +1 -1
  127. package/payload/server/public/assets/{browser-CySvj140.js → browser-CZWi0EAP.js} +1 -1
  128. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-JAMgxzOr.js → c4Diagram-AHTNJAMY-CTm_6aKi.js} +1 -1
  129. package/payload/server/public/assets/calendar-DUAh-_kx.js +1 -0
  130. package/payload/server/public/assets/channel-B_-5bau1.js +1 -0
  131. package/payload/server/public/assets/chat-DHuibPfc.js +1 -0
  132. package/payload/server/public/assets/{chunk-2KRD3SAO-eDugsc2L.js → chunk-2KRD3SAO-1KSJW1q6.js} +1 -1
  133. package/payload/server/public/assets/{chunk-336JU56O-BXfECwdC.js → chunk-336JU56O-C3t08Ip-.js} +2 -2
  134. package/payload/server/public/assets/chunk-426QAEUC-Dirxdwjh.js +1 -0
  135. package/payload/server/public/assets/{chunk-4BX2VUAB-CByVeKCY.js → chunk-4BX2VUAB-kl1ze33n.js} +1 -1
  136. package/payload/server/public/assets/{chunk-4TB4RGXK-CpY0DcUB.js → chunk-4TB4RGXK-DxpoDoHg.js} +1 -1
  137. package/payload/server/public/assets/{chunk-55IACEB6-C3YxgyIb.js → chunk-55IACEB6-WM9VJzha.js} +1 -1
  138. package/payload/server/public/assets/{chunk-5FUZZQ4R-Bc0d7j8A.js → chunk-5FUZZQ4R-CLH63ZH3.js} +1 -1
  139. package/payload/server/public/assets/{chunk-5PVQY5BW-CTUGMRIa.js → chunk-5PVQY5BW-DCTb8IAT.js} +1 -1
  140. package/payload/server/public/assets/{chunk-67CJDMHE-CbdPnpLd.js → chunk-67CJDMHE-BSYzyaoH.js} +1 -1
  141. package/payload/server/public/assets/{chunk-7N4EOEYR-Cjl2kevz.js → chunk-7N4EOEYR-CarJ7O2P.js} +1 -1
  142. package/payload/server/public/assets/{chunk-AA7GKIK3-BgozIh5p.js → chunk-AA7GKIK3-DTNLyBpH.js} +1 -1
  143. package/payload/server/public/assets/{chunk-BSJP7CBP-6Ufq45NW.js → chunk-BSJP7CBP-BFmHflHY.js} +1 -1
  144. package/payload/server/public/assets/{chunk-CIAEETIT-BhhYuMnA.js → chunk-CIAEETIT-BpjG0IzU.js} +1 -1
  145. package/payload/server/public/assets/{chunk-EDXVE4YY-BfaJ3yDD.js → chunk-EDXVE4YY-2fSowhlW.js} +1 -1
  146. package/payload/server/public/assets/{chunk-ENJZ2VHE-C7-hIGVC.js → chunk-ENJZ2VHE-ClcranGV.js} +1 -1
  147. package/payload/server/public/assets/{chunk-FMBD7UC4-BQvvyocF.js → chunk-FMBD7UC4-DLq4BItQ.js} +1 -1
  148. package/payload/server/public/assets/{chunk-FOC6F5B3-C6rBDOxH.js → chunk-FOC6F5B3-B9QI3Guz.js} +1 -1
  149. package/payload/server/public/assets/{chunk-ICPOFSXX-BjOJvkVa.js → chunk-ICPOFSXX-BAr-Mv1Z.js} +2 -2
  150. package/payload/server/public/assets/{chunk-K5T4RW27-kKowRHhn.js → chunk-K5T4RW27-8PvAHasY.js} +1 -1
  151. package/payload/server/public/assets/{chunk-KGLVRYIC-bAEV_5eH.js → chunk-KGLVRYIC--aGaDRH5.js} +1 -1
  152. package/payload/server/public/assets/{chunk-LIHQZDEY-BLvsQAfg.js → chunk-LIHQZDEY-BrWj7mw2.js} +1 -1
  153. package/payload/server/public/assets/{chunk-ORNJ4GCN-BzYZfPZ7.js → chunk-ORNJ4GCN-kYQmkMTi.js} +1 -1
  154. package/payload/server/public/assets/{chunk-OYMX7WX6-CL7WRw42.js → chunk-OYMX7WX6-CIsryCWH.js} +1 -1
  155. package/payload/server/public/assets/chunk-QZHKN3VN-Duipo1kI.js +1 -0
  156. package/payload/server/public/assets/{chunk-U2HBQHQK-BdcVGjau.js → chunk-U2HBQHQK-68X653e3.js} +1 -1
  157. package/payload/server/public/assets/{chunk-X2U36JSP-C0CL_Jin.js → chunk-X2U36JSP-v3v9soX3.js} +1 -1
  158. package/payload/server/public/assets/{chunk-XPW4576I-CsV7CUxH.js → chunk-XPW4576I-CW5DPpop.js} +1 -1
  159. package/payload/server/public/assets/{chunk-YZCP3GAM-Cj0_fLkR.js → chunk-YZCP3GAM-B1VP7Rl2.js} +1 -1
  160. package/payload/server/public/assets/{chunk-ZZ45TVLE-DLuquyoY.js → chunk-ZZ45TVLE-DiJrujNY.js} +1 -1
  161. package/payload/server/public/assets/classDiagram-6PBFFD2Q-B3kX5SuB.js +1 -0
  162. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-D761c7Lr.js +1 -0
  163. package/payload/server/public/assets/clone-BrhFv6Tb.js +1 -0
  164. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-BU3EOLXX.js → cose-bilkent-S5V4N54A-BscXxLMc.js} +1 -1
  165. package/payload/server/public/assets/{dagre-KV5264BT-CoCAYhFc.js → dagre-KV5264BT-DVgGlTQ1.js} +1 -1
  166. package/payload/server/public/assets/{dagre-BRq8C9NU.js → dagre-MBv6WlCS.js} +1 -1
  167. package/payload/server/public/assets/data-CoOcAR_2.js +1 -0
  168. package/payload/server/public/assets/{diagram-5BDNPKRD-DBy5GNaQ.js → diagram-5BDNPKRD-BmhCaO0a.js} +1 -1
  169. package/payload/server/public/assets/{diagram-G4DWMVQ6-l93MsBLv.js → diagram-G4DWMVQ6-ChU9L8vz.js} +1 -1
  170. package/payload/server/public/assets/{diagram-MMDJMWI5-BIfXkVlL.js → diagram-MMDJMWI5-Oy409Zc_.js} +1 -1
  171. package/payload/server/public/assets/{diagram-TYMM5635-BuTJLBny.js → diagram-TYMM5635-Cn1YByqk.js} +1 -1
  172. package/payload/server/public/assets/{erDiagram-SMLLAGMA-BwPxWDbP.js → erDiagram-SMLLAGMA-e17yfLvr.js} +1 -1
  173. package/payload/server/public/assets/{flatten-DtM0XAMt.js → flatten-Cl1Bc3dR.js} +1 -1
  174. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BhPtHXMR.js → flowDiagram-DWJPFMVM-Dqt7sCVZ.js} +1 -1
  175. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BlXjprdD.js → ganttDiagram-T4ZO3ILL-B4IhwS2r.js} +1 -1
  176. package/payload/server/public/assets/gitGraph-7Q5UKJZL-BCQAqtLy.js +1 -0
  177. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BW36BDiu.js → gitGraphDiagram-UUTBAWPF-BDw-PKcI.js} +1 -1
  178. package/payload/server/public/assets/{graph-uFhGyOZR.js → graph-Dc_votDd.js} +3 -3
  179. package/payload/server/public/assets/{graph-labels-BNnhRQqM.js → graph-labels-jqagxwhW.js} +1 -1
  180. package/payload/server/public/assets/{graphlib-Bjg3Tq-k.js → graphlib-DPIYk_sg.js} +1 -1
  181. package/payload/server/public/assets/info-OMHHGYJF-qU7hK50T.js +1 -0
  182. package/payload/server/public/assets/infoDiagram-42DDH7IO-KGdcJeTs.js +2 -0
  183. package/payload/server/public/assets/{isEmpty-D__iH1WQ.js → isEmpty-D1pGOD1J.js} +1 -1
  184. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-CmB-bA_O.js → ishikawaDiagram-UXIWVN3A-BRIHsB3G.js} +1 -1
  185. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-Bt1fJKmc.js → journeyDiagram-VCZTEJTY-aKNgmoHd.js} +1 -1
  186. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-DVbksz_J.js → kanban-definition-6JOO6SKY-cwBwT-nm.js} +1 -1
  187. package/payload/server/public/assets/{line-BX2Ugx3B.js → line-DVtVRzUA.js} +1 -1
  188. package/payload/server/public/assets/{linear-Bdc-QJWI.js → linear-DtoOFPO2.js} +1 -1
  189. package/payload/server/public/assets/{mermaid-parser.core-qv1e-J5x.js → mermaid-parser.core-G7YD_zO3.js} +2 -2
  190. package/payload/server/public/assets/{mermaid.core-C_d9YQX_.js → mermaid.core-DpFyndHm.js} +3 -3
  191. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-DwKGvF14.js → mindmap-definition-QFDTVHPH-CYXK_Pvz.js} +1 -1
  192. package/payload/server/public/assets/operator-KYXcuQ4Y.js +1 -0
  193. package/payload/server/public/assets/{ordinal-BRQ5CzZY.js → ordinal-CBZeH4Yp.js} +1 -1
  194. package/payload/server/public/assets/packet-4T2RLAQJ-DiU2yS9m.js +1 -0
  195. package/payload/server/public/assets/page-Cfsv97nq.js +32 -0
  196. package/payload/server/public/assets/pie-ZZUOXDRM-zHUKKlVv.js +1 -0
  197. package/payload/server/public/assets/{pieDiagram-DEJITSTG-dUvQC_4S.js → pieDiagram-DEJITSTG-DFo4N6WH.js} +1 -1
  198. package/payload/server/public/assets/{public-DgltXhnD.js → public-49guEjCh.js} +1 -1
  199. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CebX_oPa.js → quadrantDiagram-34T5L4WZ-BlH5iIhl.js} +1 -1
  200. package/payload/server/public/assets/radar-PYXPWWZC-BUnVoaPg.js +1 -0
  201. package/payload/server/public/assets/{reduce-CkcXOmmJ.js → reduce-PuPlFPRX.js} +1 -1
  202. package/payload/server/public/assets/{requirementDiagram-MS252O5E-h2euIqGj.js → requirementDiagram-MS252O5E-D5WLty8A.js} +1 -1
  203. package/payload/server/public/assets/rotate-ccw-CyR5o3Nq.js +1 -0
  204. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-DCii3fkF.js → sankeyDiagram-XADWPNL6-vB85IxHG.js} +1 -1
  205. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-CQSGYmlq.js → sequenceDiagram-FGHM5R23-Cxraa0Ee.js} +1 -1
  206. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-CVtU0iXH.js → stateDiagram-FHFEXIEX-BBPssYBx.js} +1 -1
  207. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BWmmUwDt.js +1 -0
  208. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-ChvsBltI.js → timeline-definition-GMOUNBTQ-Bgk6PT62.js} +1 -1
  209. package/payload/server/public/assets/treeView-SZITEDCU-C3Y-Q52h.js +1 -0
  210. package/payload/server/public/assets/treemap-W4RFUUIX-Dk0qZpAg.js +1 -0
  211. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-e-EZiiba.js → vennDiagram-DHZGUBPP-B-APTs3L.js} +1 -1
  212. package/payload/server/public/assets/wardley-RL74JXVD-BAWI02OA.js +1 -0
  213. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-4JaRn1s5.js → wardleyDiagram-NUSXRM2D-CkXJSs_i.js} +1 -1
  214. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-kxwmCNuM.js → xychartDiagram-5P7HB3ND-BkyshPMV.js} +1 -1
  215. package/payload/server/public/browser.html +4 -4
  216. package/payload/server/public/calendar.html +4 -4
  217. package/payload/server/public/chat.html +7 -6
  218. package/payload/server/public/data.html +4 -4
  219. package/payload/server/public/graph.html +7 -6
  220. package/payload/server/public/index.html +6 -6
  221. package/payload/server/public/operator.html +9 -8
  222. package/payload/server/public/public.html +7 -6
  223. package/payload/server/server.js +244 -24
  224. package/payload/server/public/assets/AdminShell-CDQDkT1R.js +0 -1
  225. package/payload/server/public/assets/OperatorConversations-CVH-FoJo.css +0 -1
  226. package/payload/server/public/assets/OperatorConversations-jqaPCHwB.js +0 -9
  227. package/payload/server/public/assets/admin-BkYc54bi.js +0 -1
  228. package/payload/server/public/assets/architecture-YZFGNWBL-Csj53u5T.js +0 -1
  229. package/payload/server/public/assets/calendar-DgP7lal2.js +0 -1
  230. package/payload/server/public/assets/channel-BUQUAUts.js +0 -1
  231. package/payload/server/public/assets/chat-gls5aV50.js +0 -1
  232. package/payload/server/public/assets/chunk-426QAEUC-CdknReB2.js +0 -1
  233. package/payload/server/public/assets/chunk-QZHKN3VN-8tHoEDE9.js +0 -1
  234. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BEGZ3DLg.js +0 -1
  235. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DsLxnm5U.js +0 -1
  236. package/payload/server/public/assets/clone-uiXbH_kh.js +0 -1
  237. package/payload/server/public/assets/data-CbI8-CX3.js +0 -1
  238. package/payload/server/public/assets/gitGraph-7Q5UKJZL-D_2KrZoP.js +0 -1
  239. package/payload/server/public/assets/info-OMHHGYJF-BP2TNwQ4.js +0 -1
  240. package/payload/server/public/assets/infoDiagram-42DDH7IO-D1kDtBOY.js +0 -2
  241. package/payload/server/public/assets/operator-DeCk_qYw.js +0 -1
  242. package/payload/server/public/assets/packet-4T2RLAQJ-BDg8fde8.js +0 -1
  243. package/payload/server/public/assets/page-jGwq-DpW.js +0 -32
  244. package/payload/server/public/assets/pie-ZZUOXDRM-CXDyYMkZ.js +0 -1
  245. package/payload/server/public/assets/radar-PYXPWWZC-xen_zv8F.js +0 -1
  246. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BywcXjtb.js +0 -1
  247. package/payload/server/public/assets/treeView-SZITEDCU-2FBf_1It.js +0 -1
  248. package/payload/server/public/assets/treemap-W4RFUUIX-BDdb30P-.js +0 -1
  249. package/payload/server/public/assets/wardley-RL74JXVD-BLq5MxjR.js +0 -1
  250. /package/payload/server/public/assets/{_baseFor-SRtUHe7G.js → _baseFor-brRjpUOX.js} +0 -0
  251. /package/payload/server/public/assets/{array-BpsnM-Py.js → array-BGFCBI0e.js} +0 -0
  252. /package/payload/server/public/assets/{cytoscape.esm-D4Rl1H5h.js → cytoscape.esm-TvRJ2tGX.js} +0 -0
  253. /package/payload/server/public/assets/{defaultLocale-C7sQPl-O.js → defaultLocale-CRZydyG6.js} +0 -0
  254. /package/payload/server/public/assets/{dist-CtUNt3w8.js → dist-B0CkUodR.js} +0 -0
  255. /package/payload/server/public/assets/{init-BydxaDEV.js → init-B8gtcn7T.js} +0 -0
  256. /package/payload/server/public/assets/{katex-B0fVeDx4.js → katex-RxgSu_dy.js} +0 -0
  257. /package/payload/server/public/assets/{path-jlWYQ2i9.js → path-DZF-JdEe.js} +0 -0
  258. /package/payload/server/public/assets/{preload-helper-uTix4PVD.js → preload-helper-CQ36nxok.js} +0 -0
  259. /package/payload/server/public/assets/{rough.esm-c4PR5shF.js → rough.esm-6CnTHTkH.js} +0 -0
  260. /package/payload/server/public/assets/{src-48kCpScq.js → src-CR_MU8uy.js} +0 -0
@@ -20,7 +20,7 @@
20
20
  // manager does not know.
21
21
  import { Hono } from 'hono';
22
22
  import { stream } from 'hono/streaming';
23
- import { existsSync, statSync, createReadStream, watchFile, unwatchFile, rmSync, mkdirSync, renameSync, readFileSync, writeFileSync, openSync, readSync, closeSync } from 'node:fs';
23
+ import { existsSync, statSync, createReadStream, watchFile, unwatchFile, rmSync, mkdirSync, renameSync, readFileSync, writeFileSync, appendFileSync, openSync, readSync, closeSync } from 'node:fs';
24
24
  import { tmpdir } from 'node:os';
25
25
  import { buildWaChannelMcpServers, buildWaChannelArgv, waChannelMcpConfigPath, isDevChannelPrompt } from './wa-channel-mcp.js';
26
26
  import { buildWebchatChannelMcpServers, buildWebchatChannelArgv, webchatChannelMcpConfigPath } from './webchat-channel-mcp.js';
@@ -28,8 +28,9 @@ import { buildTelegramChannelMcpServers, buildTelegramChannelArgv, telegramChann
28
28
  import { buildChannelMcpServers, buildChannelArgv, channelMcpConfigPath } from './channel-mcp.js';
29
29
  import { mergeTarget, isMultiTarget, targetKinds } from './channel-targets.js';
30
30
  import { randomUUID } from 'node:crypto';
31
- import { execFileSync } from 'node:child_process';
31
+ import { execFile, execFileSync } from 'node:child_process';
32
32
  import { buildRcChildEnv, reapplyAdminLevers } from './rc-daemon.js';
33
+ import { runConnectorAuthLogin } from './connector-auth.js';
33
34
  import { isEffortLevel, isNewSessionEffortLevel, isPermissionMode, SONNET_MODEL } from '../../../lib/models/dist/index.js';
34
35
  import { spawnClaudeSession, stopSession, writeInterruptToPty, isLive, onPtyExit, livePtyCount, liveSessionIds, getPtyTrackerForTests, livePidForSession, classifyLiveness, priorExitedCountForSession, PERMISSION_MODES, openFdCount, registerRcSpawnPty, } from './pty-spawner.js';
35
36
  import { writeScopeRecord, removeScopeRecord } from './scope-record.js';
@@ -155,17 +156,17 @@ function finitePositive(raw, fallback) {
155
156
  const n = Number(raw);
156
157
  return Number.isFinite(n) && n > 0 ? n : fallback;
157
158
  }
158
- /** Task 1090 Phase 2 — the post-interrupt transcript-integrity check. Reads a
159
- * bounded tail of the session JSONL and reports whether a `tool_use` block in
160
- * that window has no matching `tool_result` after it the signature of an
161
- * interrupt that landed mid-tool-call, which would corrupt a later `--resume`.
162
- * Bounded (last 64KB) so a large transcript never blocks the post-check; the
163
- * window only needs the last turn's tool pairing. Returns false on any read
164
- * error (no file yet, gone) — absence of evidence is not a dangling use. */
165
- function tailHasDanglingToolUse(jsonlPath) {
159
+ /** Task 1090 Phase 2 + Task 1184 — the `tool_use` ids in the bounded tail with
160
+ * no matching `tool_result` after them: the signature of an interrupt or death
161
+ * that landed mid-tool-call, which would corrupt a later `--resume` (the API
162
+ * rejects a tool_use with no following tool_result). Bounded (last 64KB) so a
163
+ * large transcript never blocks the check; the window only needs the last
164
+ * turn's tool pairing. Returns [] on any read error (no file yet, gone) —
165
+ * absence of evidence is not a dangling use. Order-preserving. */
166
+ export function danglingToolUseIds(jsonlPath) {
166
167
  try {
167
168
  if (!existsSync(jsonlPath))
168
- return false;
169
+ return [];
169
170
  const size = statSync(jsonlPath).size;
170
171
  const window = 64 * 1024;
171
172
  const fd = openSync(jsonlPath, 'r');
@@ -175,7 +176,7 @@ function tailHasDanglingToolUse(jsonlPath) {
175
176
  const buf = Buffer.alloc(len);
176
177
  readSync(fd, buf, 0, len, start);
177
178
  const lines = buf.toString('utf8').split('\n');
178
- const used = new Set();
179
+ const used = [];
179
180
  const resulted = new Set();
180
181
  for (const line of lines) {
181
182
  if (!line)
@@ -193,15 +194,116 @@ function tailHasDanglingToolUse(jsonlPath) {
193
194
  continue;
194
195
  for (const c of content) {
195
196
  if (c.type === 'tool_use' && typeof c.id === 'string')
196
- used.add(c.id);
197
+ used.push(c.id);
197
198
  if (c.type === 'tool_result' && typeof c.tool_use_id === 'string')
198
199
  resulted.add(c.tool_use_id);
199
200
  }
200
201
  }
201
- for (const id of used)
202
- if (!resulted.has(id))
203
- return true;
202
+ return used.filter((id) => !resulted.has(id));
203
+ }
204
+ finally {
205
+ closeSync(fd);
206
+ }
207
+ }
208
+ catch {
209
+ return [];
210
+ }
211
+ }
212
+ function tailHasDanglingToolUse(jsonlPath) {
213
+ return danglingToolUseIds(jsonlPath).length > 0;
214
+ }
215
+ /** Task 1184 — append one synthetic user record supplying an is_error
216
+ * tool_result for each dangling tool_use, so a `--resume` of a session whose
217
+ * child died mid-tool-call has no unmatched tool_use. Envelope fields
218
+ * (cwd/version/gitBranch/parentUuid) are copied forward from the last on-disk
219
+ * record so the synthetic record matches claude's own shape; uuid and
220
+ * timestamp are minted. Idempotent: returns false when nothing dangles or on
221
+ * any error. */
222
+ export function appendTurnAbortTerminator(jsonlPath, sessionId) {
223
+ try {
224
+ const ids = danglingToolUseIds(jsonlPath);
225
+ if (ids.length === 0)
204
226
  return false;
227
+ const raw = readFileSync(jsonlPath, 'utf8').trimEnd().split('\n');
228
+ let envelope = {};
229
+ for (let i = raw.length - 1; i >= 0; i--) {
230
+ try {
231
+ envelope = JSON.parse(raw[i]);
232
+ break;
233
+ }
234
+ catch { /* skip non-JSON */ }
235
+ }
236
+ const record = {
237
+ parentUuid: typeof envelope.uuid === 'string' ? envelope.uuid : null,
238
+ isSidechain: false,
239
+ userType: 'external',
240
+ cwd: typeof envelope.cwd === 'string' ? envelope.cwd : undefined,
241
+ sessionId,
242
+ version: typeof envelope.version === 'string' ? envelope.version : undefined,
243
+ gitBranch: typeof envelope.gitBranch === 'string' ? envelope.gitBranch : undefined,
244
+ type: 'user',
245
+ uuid: randomUUID(),
246
+ timestamp: new Date().toISOString(),
247
+ message: {
248
+ role: 'user',
249
+ content: ids.map((id) => ({
250
+ tool_use_id: id,
251
+ type: 'tool_result',
252
+ content: 'Turn aborted: the agent process exited before this tool finished.',
253
+ is_error: true,
254
+ })),
255
+ },
256
+ };
257
+ appendFileSync(jsonlPath, JSON.stringify(record) + '\n');
258
+ return true;
259
+ }
260
+ catch {
261
+ return false;
262
+ }
263
+ }
264
+ const TERMINAL_STOP_REASONS = new Set(['end_turn', 'stop_sequence', 'max_tokens']);
265
+ /** Task 1184 — the open-turn signature of a dead-child phantom. Reads the
266
+ * bounded tail (last 64KB) and reports whether the last assistant record
267
+ * carries no terminal `stop_reason` — the turn was streaming when the child
268
+ * died (no end_turn was ever written). A terminal stop (end_turn /
269
+ * stop_sequence / max_tokens) is a completed turn → false. No assistant
270
+ * record in the window, or any read error → false (absence of evidence is
271
+ * not an open turn). */
272
+ export function tailIsOpenTurn(jsonlPath) {
273
+ try {
274
+ if (!existsSync(jsonlPath))
275
+ return false;
276
+ const size = statSync(jsonlPath).size;
277
+ const window = 64 * 1024;
278
+ const fd = openSync(jsonlPath, 'r');
279
+ try {
280
+ const start = size > window ? size - window : 0;
281
+ const len = size - start;
282
+ const buf = Buffer.alloc(len);
283
+ readSync(fd, buf, 0, len, start);
284
+ const lines = buf.toString('utf8').split('\n');
285
+ let lastAssistantStop = null;
286
+ let sawAssistant = false;
287
+ for (const line of lines) {
288
+ if (!line)
289
+ continue;
290
+ let o;
291
+ try {
292
+ o = JSON.parse(line);
293
+ }
294
+ catch {
295
+ continue;
296
+ }
297
+ const rec = o;
298
+ if (rec.type === 'assistant' || rec.message?.role === 'assistant') {
299
+ sawAssistant = true;
300
+ const sr = rec.message?.stop_reason;
301
+ lastAssistantStop = typeof sr === 'string' ? sr : null;
302
+ }
303
+ }
304
+ if (!sawAssistant)
305
+ return false;
306
+ return !(lastAssistantStop !== null && TERMINAL_STOP_REASONS.has(lastAssistantStop));
205
307
  }
206
308
  finally {
207
309
  closeSync(fd);
@@ -502,6 +604,22 @@ function detectCliVersion(claudeBin) {
502
604
  }
503
605
  return cachedCliVersion;
504
606
  }
607
+ // Task 1153 — connectors resumed once this manager lifetime, keyed
608
+ // `${sessionId}::${name}`. A second authenticate-needed for the same pair after a
609
+ // resume is the unexpected case, surfaced via `outcome=still-needs-auth-after-resume`.
610
+ const connectorResumedOnce = new Set();
611
+ // Task 1153 — run `claude mcp login "<name>"` headless under the brand config dir.
612
+ // A claude.ai connector login prints the sdk-cli consent URL and exits 0 with no
613
+ // TTY. Never throws; returns combined stdout+stderr and the exit code.
614
+ function execMcpLogin(claudeBin, claudeConfigDir, name) {
615
+ return new Promise((resolve) => {
616
+ execFile(claudeBin, ['mcp', 'login', name], { env: { ...process.env, CLAUDE_CONFIG_DIR: claudeConfigDir }, timeout: 20_000, encoding: 'utf8' }, (err, stdout, stderr) => {
617
+ const output = `${stdout ?? ''}\n${stderr ?? ''}`;
618
+ const code = err ? (typeof err.code === 'number' ? err.code : 1) : 0;
619
+ resolve({ output, code });
620
+ });
621
+ });
622
+ }
505
623
  export function buildHttpApp(deps) {
506
624
  const app = new Hono();
507
625
  // Task 702 — the dir holding pid files and rc-spawn scope records.
@@ -745,6 +863,22 @@ export function buildHttpApp(deps) {
745
863
  // post-Task-260 rows surface their specialist even if the JSONL
746
864
  // doesn't include an agent-setting record.
747
865
  const specialist = row.agent ?? row.cachedAgentSetting ?? row.sidecarSpecialist;
866
+ // Task 1184 — read-time activity reconcile. A busy stamp can outlive its
867
+ // child: an OOM SIGKILL leaves the PID file on disk, so the watcher row
868
+ // stays `busy` with no live PTY to ever flip it. Reconcile here so the
869
+ // pointer poll stops reporting an in-flight turn for a dead child — and,
870
+ // when the transcript tail is an open turn, mark it `aborted` so the UI
871
+ // shows the resume notice. This cannot persist past one read.
872
+ let activity = row.status;
873
+ let turnAborted;
874
+ if (row.status === 'busy' && !isLive(row.sessionId)) {
875
+ if (hasJsonl && tailIsOpenTurn(jsonlPath)) {
876
+ activity = 'aborted';
877
+ turnAborted = true;
878
+ }
879
+ else
880
+ activity = 'idle';
881
+ }
748
882
  return {
749
883
  sessionId: row.sessionId,
750
884
  pid: row.pid,
@@ -767,7 +901,8 @@ export function buildHttpApp(deps) {
767
901
  model,
768
902
  permissionMode: row.permissionMode,
769
903
  effectivePermissionMode: row.effectivePermissionMode,
770
- activity: row.status,
904
+ activity,
905
+ turnAborted,
771
906
  };
772
907
  }
773
908
  app.post('/public-spawn', async (c) => {
@@ -1395,6 +1530,39 @@ export function buildHttpApp(deps) {
1395
1530
  return c.json({ ok: true, sessionId, titleSource: 'user', renamedAt: entry.renamedAt }, 200);
1396
1531
  });
1397
1532
  // SIGTERM-only stop. Idempotent on already-dead PTYs. JSONL untouched.
1533
+ // Task 1153 — TUI-free claude.ai connector authentication for the admin webchat.
1534
+ // The webchat-channel `connector_authenticate` tool reaches here via the UI
1535
+ // gateway. `completed:false` runs `claude mcp login` and returns the consent URL;
1536
+ // `completed:true` recycles the session so the operator's next inbound re-spawns
1537
+ // with --resume and reads the new grant. Decision logic lives in connector-auth.ts.
1538
+ app.post('/connector-auth-login', async (c) => {
1539
+ const start = Date.now();
1540
+ const body = await c.req.json().catch(() => null);
1541
+ const sessionId = body?.sessionId;
1542
+ const name = body?.name;
1543
+ const completed = body?.completed === true;
1544
+ if (typeof sessionId !== 'string' || !SESSION_ID_PATTERN.test(sessionId) || typeof name !== 'string' || !name.trim()) {
1545
+ timed(deps.logger, 'POST', '/connector-auth-login', 400, Date.now() - start);
1546
+ return c.json({ error: 'sessionId and name required' }, 400);
1547
+ }
1548
+ const result = await runConnectorAuthLogin({
1549
+ logger: deps.logger,
1550
+ runMcpLogin: (n) => execMcpLogin(deps.claudeBin, deps.claudeConfigDir, n),
1551
+ recycleSession: async (sid) => {
1552
+ const row = resolveRow(deps.watcher, sid);
1553
+ await stopSession({
1554
+ killGraceMs: deps.killGraceMs,
1555
+ logger: deps.logger,
1556
+ runSystemctl: deps.runSystemctl,
1557
+ rowScopeUnitToken: row?.scopeUnitToken ?? null,
1558
+ rowPid: row?.pid ?? null,
1559
+ }, sid);
1560
+ },
1561
+ resumedOnce: connectorResumedOnce,
1562
+ }, { sessionId, name, completed });
1563
+ timed(deps.logger, 'POST', '/connector-auth-login', 200, Date.now() - start);
1564
+ return c.json(result, 200);
1565
+ });
1398
1566
  app.post('/:sessionId/stop', async (c) => {
1399
1567
  const start = Date.now();
1400
1568
  const id = c.req.param('sessionId');
@@ -1581,6 +1749,19 @@ export function buildHttpApp(deps) {
1581
1749
  deps.logger(`[webchat-interrupt] op=interrupt-requested intId=${intId} sessionId=${sessionId.slice(0, 8)} trigger=${trigger}`);
1582
1750
  const result = writeInterruptToPty(sessionId, byte, deps.logger);
1583
1751
  if (!result.ok) {
1752
+ if (result.error === 'not-found' || result.error === 'exited') {
1753
+ const jsonlPath = jsonlPathForSessionId(deps.spawnCwd, sessionId);
1754
+ // Task 1184 — a dead-child phantom: no live PTY and the transcript tail
1755
+ // is an open turn. Recover instead of bare-404 so the operator's stop
1756
+ // press clears the phantom and a later --resume is clean.
1757
+ if (!isLive(sessionId) && tailIsOpenTurn(jsonlPath)) {
1758
+ appendTurnAbortTerminator(jsonlPath, sessionId);
1759
+ const tailTurnClosed = !tailIsOpenTurn(jsonlPath);
1760
+ deps.logger(`[webchat-interrupt] op=dead-child-recovered intId=${intId} sessionId=${sessionId.slice(0, 8)} tailTurnClosed=${tailTurnClosed}`);
1761
+ timed(deps.logger, 'POST', `/${id}/interrupt`, 200, Date.now() - start);
1762
+ return c.json({ ok: true, deadChild: true, resumable: true }, 200);
1763
+ }
1764
+ }
1584
1765
  if (result.error === 'not-found') {
1585
1766
  timed(deps.logger, 'POST', `/${id}/interrupt`, 404, Date.now() - start);
1586
1767
  return c.json({ error: 'session-not-found' }, 404);
@@ -2741,6 +2922,22 @@ export function buildHttpApp(deps) {
2741
2922
  // 500 ms idle deadline before the child exited.
2742
2923
  if (!outputEmitted)
2743
2924
  emitChildOutput();
2925
+ // Task 1184 — self-heal a dead-child phantom. If the child exits while
2926
+ // its transcript tail is an open turn, emit the abort event and write
2927
+ // the terminator so a later --resume is clean. Only a known (resumed)
2928
+ // session has a JSONL to reconcile; a fresh spawn that dies before
2929
+ // binding has no id and no transcript. The visible turnActive flip
2930
+ // happens via the read-time activity reconcile on the next poll.
2931
+ if (sessionId) {
2932
+ try {
2933
+ const jsonlPath = jsonlPathForSessionId(deps.spawnCwd, sessionId);
2934
+ if (tailIsOpenTurn(jsonlPath)) {
2935
+ deps.logger(`[rc-life] op=turn-aborted sessionId=${sessionId.slice(0, 8)} reason=child-exit-mid-turn`);
2936
+ appendTurnAbortTerminator(jsonlPath, sessionId);
2937
+ }
2938
+ }
2939
+ catch { /* exit path must never throw */ }
2940
+ }
2744
2941
  // Task 977 — close the per-session child log on exit.
2745
2942
  childLog.close();
2746
2943
  });