@rubytech/create-maxy-code 0.1.539 → 0.1.540

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 (261) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/agent-slug/dist/index.d.ts +31 -0
  3. package/payload/platform/lib/agent-slug/dist/index.d.ts.map +1 -0
  4. package/payload/platform/lib/agent-slug/dist/index.js +53 -0
  5. package/payload/platform/lib/agent-slug/dist/index.js.map +1 -0
  6. package/payload/platform/lib/agent-slug/src/index.ts +53 -0
  7. package/payload/platform/lib/agent-slug/tsconfig.json +8 -0
  8. package/payload/platform/package.json +2 -2
  9. package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
  10. package/payload/platform/plugins/admin/PLUGIN.md +33 -1
  11. package/payload/platform/plugins/admin/mcp/dist/index.js +136 -0
  12. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  13. package/payload/platform/plugins/admin/mcp/dist/tools/agent-config-schema.d.ts +9 -0
  14. package/payload/platform/plugins/admin/mcp/dist/tools/agent-config-schema.d.ts.map +1 -0
  15. package/payload/platform/plugins/admin/mcp/dist/tools/agent-config-schema.js +49 -0
  16. package/payload/platform/plugins/admin/mcp/dist/tools/agent-config-schema.js.map +1 -0
  17. package/payload/platform/plugins/admin/mcp/dist/tools/agent-write.d.ts +64 -0
  18. package/payload/platform/plugins/admin/mcp/dist/tools/agent-write.d.ts.map +1 -0
  19. package/payload/platform/plugins/admin/mcp/dist/tools/agent-write.js +151 -0
  20. package/payload/platform/plugins/admin/mcp/dist/tools/agent-write.js.map +1 -0
  21. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +81 -13
  22. package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +36 -20
  23. package/payload/platform/plugins/admin/skills/update-knowledge/SKILL.md +4 -3
  24. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +7 -0
  25. package/payload/platform/plugins/docs/references/admin-ui.md +47 -0
  26. package/payload/platform/plugins/docs/references/channel-wake-and-prompt.md +31 -10
  27. package/payload/platform/plugins/docs/references/internals.md +2 -2
  28. package/payload/platform/plugins/whatsapp/PLUGIN.md +2 -2
  29. package/payload/platform/plugins/whatsapp/mcp/dist/index.js +6 -1
  30. package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
  31. package/payload/platform/plugins/whatsapp/skills/manage-whatsapp-config/SKILL.md +3 -1
  32. package/payload/platform/scripts/__tests__/check-plugin-tool-declarations.test.ts +51 -0
  33. package/payload/platform/scripts/check-plugin-tool-declarations.mjs +97 -0
  34. package/payload/platform/scripts/check-risk-class.mjs +5 -0
  35. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  36. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +8 -0
  37. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  38. package/payload/platform/services/claude-session-manager/dist/channel-targets.d.ts +3 -0
  39. package/payload/platform/services/claude-session-manager/dist/channel-targets.d.ts.map +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/channel-targets.js.map +1 -1
  41. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  42. package/payload/platform/services/claude-session-manager/dist/http-server.js +20 -1
  43. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  44. package/payload/platform/services/claude-session-manager/dist/index.js +35 -18
  45. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  46. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  47. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +57 -8
  48. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  49. package/payload/platform/services/claude-session-manager/dist/public-knowledge-audit.d.ts +58 -0
  50. package/payload/platform/services/claude-session-manager/dist/public-knowledge-audit.d.ts.map +1 -0
  51. package/payload/platform/services/claude-session-manager/dist/public-knowledge-audit.js +152 -0
  52. package/payload/platform/services/claude-session-manager/dist/public-knowledge-audit.js.map +1 -0
  53. package/payload/platform/services/claude-session-manager/dist/wa-channel-mcp.d.ts +4 -0
  54. package/payload/platform/services/claude-session-manager/dist/wa-channel-mcp.d.ts.map +1 -1
  55. package/payload/platform/services/claude-session-manager/dist/wa-channel-mcp.js +3 -0
  56. package/payload/platform/services/claude-session-manager/dist/wa-channel-mcp.js.map +1 -1
  57. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +40 -3
  58. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  59. package/payload/platform/services/whatsapp-channel/dist/notification.js +43 -4
  60. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  61. package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
  62. package/payload/platform/services/whatsapp-channel/dist/server.js +41 -25
  63. package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
  64. package/payload/platform/services/whatsapp-channel/dist/targets.d.ts +1 -0
  65. package/payload/platform/services/whatsapp-channel/dist/targets.d.ts.map +1 -1
  66. package/payload/platform/services/whatsapp-channel/dist/targets.js +9 -5
  67. package/payload/platform/services/whatsapp-channel/dist/targets.js.map +1 -1
  68. package/payload/server/{chunk-BP7LH7MC.js → chunk-CKTHAHL4.js} +26 -16
  69. package/payload/server/{chunk-IALJPXIO.js → chunk-ERIM3EFB.js} +1 -1
  70. package/payload/server/{chunk-S4FIEM3L.js → chunk-TQTZXAK3.js} +64 -7
  71. package/payload/server/{manager-5QV2EAZ2.js → manager-F6NXSOJW.js} +2 -2
  72. package/payload/server/maxy-edge.js +2 -2
  73. package/payload/server/public/activity.html +5 -5
  74. package/payload/server/public/agents.html +4 -4
  75. package/payload/server/public/assets/AdminLoginScreens-DuFCjbz2.js +1 -0
  76. package/payload/server/public/assets/AdminLoginScreens-DuFCjbz2.js.br +0 -0
  77. package/payload/server/public/assets/AdminLoginScreens-DuFCjbz2.js.gz +0 -0
  78. package/payload/server/public/assets/AdminShell-DJL5DzRX.js +2 -0
  79. package/payload/server/public/assets/AdminShell-DJL5DzRX.js.br +0 -0
  80. package/payload/server/public/assets/AdminShell-DJL5DzRX.js.gz +0 -0
  81. package/payload/server/public/assets/activity-CpMnNr5c.js +1 -0
  82. package/payload/server/public/assets/activity-CpMnNr5c.js.br +0 -0
  83. package/payload/server/public/assets/activity-CpMnNr5c.js.gz +0 -0
  84. package/payload/server/public/assets/admin-CBwKIfaI.js +1 -0
  85. package/payload/server/public/assets/admin-CBwKIfaI.js.br +0 -0
  86. package/payload/server/public/assets/admin-CBwKIfaI.js.gz +0 -0
  87. package/payload/server/public/assets/agents-C4LmSKjb.js +1 -0
  88. package/payload/server/public/assets/agents-C4LmSKjb.js.br +0 -0
  89. package/payload/server/public/assets/agents-C4LmSKjb.js.gz +0 -0
  90. package/payload/server/public/assets/browser-Bm9xm_yc.js +1 -0
  91. package/payload/server/public/assets/browser-Bm9xm_yc.js.br +0 -0
  92. package/payload/server/public/assets/browser-Bm9xm_yc.js.gz +0 -0
  93. package/payload/server/public/assets/calendar-CNY9FTWe.js +1 -0
  94. package/payload/server/public/assets/calendar-CNY9FTWe.js.br +0 -0
  95. package/payload/server/public/assets/calendar-CNY9FTWe.js.gz +0 -0
  96. package/payload/server/public/assets/chat-3WoUGCTd.js +1 -0
  97. package/payload/server/public/assets/chat-3WoUGCTd.js.br +0 -0
  98. package/payload/server/public/assets/chat-3WoUGCTd.js.gz +0 -0
  99. package/payload/server/public/assets/chevron-left-BE16BJnw.js +1 -0
  100. package/payload/server/public/assets/chevron-left-BE16BJnw.js.br +0 -0
  101. package/payload/server/public/assets/chevron-right-Bu2VKpeU.js +1 -0
  102. package/payload/server/public/assets/chevron-right-Bu2VKpeU.js.br +0 -0
  103. package/payload/server/public/assets/clock-C4Nu2aRV.js +1 -0
  104. package/payload/server/public/assets/clock-C4Nu2aRV.js.br +0 -0
  105. package/payload/server/public/assets/copy-3kj9Oaoc.js +1 -0
  106. package/payload/server/public/assets/copy-3kj9Oaoc.js.br +0 -0
  107. package/payload/server/public/assets/copy-3kj9Oaoc.js.gz +0 -0
  108. package/payload/server/public/assets/data-C-x5EHyi.js +1 -0
  109. package/payload/server/public/assets/data-C-x5EHyi.js.br +1 -0
  110. package/payload/server/public/assets/data-C-x5EHyi.js.gz +0 -0
  111. package/payload/server/public/assets/file-text-CBaewT76.js +1 -0
  112. package/payload/server/public/assets/file-text-CBaewT76.js.br +0 -0
  113. package/payload/server/public/assets/file-text-CBaewT76.js.gz +0 -0
  114. package/payload/server/public/assets/{graph-C8cQ6Nqf.js → graph-B8-e2_Z-.js} +3 -3
  115. package/payload/server/public/assets/graph-B8-e2_Z-.js.br +0 -0
  116. package/payload/server/public/assets/graph-B8-e2_Z-.js.gz +0 -0
  117. package/payload/server/public/assets/graph-labels-Bsc23eZU.js +1 -0
  118. package/payload/server/public/assets/graph-labels-Bsc23eZU.js.br +0 -0
  119. package/payload/server/public/assets/graph-labels-Bsc23eZU.js.gz +0 -0
  120. package/payload/server/public/assets/operator-Cve0-qfO.js +1 -0
  121. package/payload/server/public/assets/operator-Cve0-qfO.js.br +0 -0
  122. package/payload/server/public/assets/operator-Cve0-qfO.js.gz +0 -0
  123. package/payload/server/public/assets/page-BgVMs6Vf.js +1 -0
  124. package/payload/server/public/assets/page-BgVMs6Vf.js.br +0 -0
  125. package/payload/server/public/assets/page-BgVMs6Vf.js.gz +0 -0
  126. package/payload/server/public/assets/page-fABub-w8.js +32 -0
  127. package/payload/server/public/assets/page-fABub-w8.js.br +0 -0
  128. package/payload/server/public/assets/page-fABub-w8.js.gz +0 -0
  129. package/payload/server/public/assets/play-B6zXB9K7.js +1 -0
  130. package/payload/server/public/assets/play-B6zXB9K7.js.br +0 -0
  131. package/payload/server/public/assets/play-B6zXB9K7.js.gz +0 -0
  132. package/payload/server/public/assets/public--R2DbdWs.js +1 -0
  133. package/payload/server/public/assets/public--R2DbdWs.js.br +0 -0
  134. package/payload/server/public/assets/public--R2DbdWs.js.gz +0 -0
  135. package/payload/server/public/assets/rotate-ccw-FZW7c8p8.js +1 -0
  136. package/payload/server/public/assets/rotate-ccw-FZW7c8p8.js.br +0 -0
  137. package/payload/server/public/assets/rotate-ccw-FZW7c8p8.js.gz +0 -0
  138. package/payload/server/public/assets/routines-BpZs2SaT.js +2 -0
  139. package/payload/server/public/assets/routines-BpZs2SaT.js.br +0 -0
  140. package/payload/server/public/assets/routines-BpZs2SaT.js.gz +0 -0
  141. package/payload/server/public/assets/skills-DF7uyEEz.js +1 -0
  142. package/payload/server/public/assets/skills-DF7uyEEz.js.br +0 -0
  143. package/payload/server/public/assets/skills-DF7uyEEz.js.gz +0 -0
  144. package/payload/server/public/assets/tasks-BfJJmoWO.js +3 -0
  145. package/payload/server/public/assets/tasks-BfJJmoWO.js.br +0 -0
  146. package/payload/server/public/assets/tasks-BfJJmoWO.js.gz +0 -0
  147. package/payload/server/public/assets/triangle-alert-CR-jRJdI.js +1 -0
  148. package/payload/server/public/assets/triangle-alert-CR-jRJdI.js.br +0 -0
  149. package/payload/server/public/assets/triangle-alert-CR-jRJdI.js.gz +0 -0
  150. package/payload/server/public/assets/useCopyFeedback-IOuPUAHY.js +1 -0
  151. package/payload/server/public/assets/useCopyFeedback-IOuPUAHY.js.br +0 -0
  152. package/payload/server/public/assets/useCopyFeedback-IOuPUAHY.js.gz +0 -0
  153. package/payload/server/public/assets/{useSubAccountSwitcher-C7TtIbR3.js → useMediaQuery-CA6dR5iz.js} +1 -1
  154. package/payload/server/public/assets/useMediaQuery-CA6dR5iz.js.br +0 -0
  155. package/payload/server/public/assets/{useSubAccountSwitcher-C7TtIbR3.js.gz → useMediaQuery-CA6dR5iz.js.gz} +0 -0
  156. package/payload/server/public/assets/{useSubAccountSwitcher-DCkivCBS.css → useMediaQuery-DpwgV1Da.css} +1 -1
  157. package/payload/server/public/assets/useMediaQuery-DpwgV1Da.css.br +0 -0
  158. package/payload/server/public/assets/{useSubAccountSwitcher-DCkivCBS.css.gz → useMediaQuery-DpwgV1Da.css.gz} +0 -0
  159. package/payload/server/public/assets/useVoiceRecorder-DGhsN7nV.js +2 -0
  160. package/payload/server/public/assets/useVoiceRecorder-DGhsN7nV.js.br +0 -0
  161. package/payload/server/public/assets/useVoiceRecorder-DGhsN7nV.js.gz +0 -0
  162. package/payload/server/public/assets/wrench-CpCOYUBc.js +1 -0
  163. package/payload/server/public/assets/wrench-CpCOYUBc.js.br +0 -0
  164. package/payload/server/public/assets/wrench-CpCOYUBc.js.gz +0 -0
  165. package/payload/server/public/browser.html +4 -4
  166. package/payload/server/public/calendar.html +8 -8
  167. package/payload/server/public/chat.html +13 -13
  168. package/payload/server/public/data.html +11 -11
  169. package/payload/server/public/graph.html +9 -9
  170. package/payload/server/public/index.html +14 -14
  171. package/payload/server/public/operator.html +14 -14
  172. package/payload/server/public/public.html +13 -13
  173. package/payload/server/public/routines.html +6 -6
  174. package/payload/server/public/skills.html +5 -5
  175. package/payload/server/public/tasks.html +6 -6
  176. package/payload/server/server.js +329 -104
  177. package/payload/server/public/assets/AdminLoginScreens-BpHnjHp_.js +0 -1
  178. package/payload/server/public/assets/AdminLoginScreens-BpHnjHp_.js.br +0 -0
  179. package/payload/server/public/assets/AdminLoginScreens-BpHnjHp_.js.gz +0 -0
  180. package/payload/server/public/assets/AdminShell-D24evn4t.js +0 -2
  181. package/payload/server/public/assets/AdminShell-D24evn4t.js.br +0 -0
  182. package/payload/server/public/assets/AdminShell-D24evn4t.js.gz +0 -0
  183. package/payload/server/public/assets/activity-ZVUTB5uZ.js +0 -1
  184. package/payload/server/public/assets/activity-ZVUTB5uZ.js.br +0 -0
  185. package/payload/server/public/assets/activity-ZVUTB5uZ.js.gz +0 -0
  186. package/payload/server/public/assets/admin-XJqQz3QJ.js +0 -1
  187. package/payload/server/public/assets/admin-XJqQz3QJ.js.br +0 -0
  188. package/payload/server/public/assets/admin-XJqQz3QJ.js.gz +0 -0
  189. package/payload/server/public/assets/agents-Dc9SNC9N.js +0 -1
  190. package/payload/server/public/assets/agents-Dc9SNC9N.js.br +0 -0
  191. package/payload/server/public/assets/agents-Dc9SNC9N.js.gz +0 -0
  192. package/payload/server/public/assets/browser-CCedMIga.js +0 -1
  193. package/payload/server/public/assets/browser-CCedMIga.js.br +0 -0
  194. package/payload/server/public/assets/browser-CCedMIga.js.gz +0 -0
  195. package/payload/server/public/assets/calendar-BDoMLP2j.js +0 -1
  196. package/payload/server/public/assets/calendar-BDoMLP2j.js.br +0 -0
  197. package/payload/server/public/assets/calendar-BDoMLP2j.js.gz +0 -0
  198. package/payload/server/public/assets/chat-BAhoqTY9.js +0 -1
  199. package/payload/server/public/assets/chat-BAhoqTY9.js.br +0 -0
  200. package/payload/server/public/assets/chat-BAhoqTY9.js.gz +0 -0
  201. package/payload/server/public/assets/chevron-left-NGLHgPjF.js +0 -1
  202. package/payload/server/public/assets/chevron-right-B4B7OkG8.js +0 -1
  203. package/payload/server/public/assets/chevron-right-B4B7OkG8.js.br +0 -0
  204. package/payload/server/public/assets/clock-7IMwxJdH.js +0 -1
  205. package/payload/server/public/assets/clock-7IMwxJdH.js.br +0 -0
  206. package/payload/server/public/assets/clock-7IMwxJdH.js.gz +0 -0
  207. package/payload/server/public/assets/copy-PkR4EFD6.js +0 -1
  208. package/payload/server/public/assets/copy-PkR4EFD6.js.br +0 -0
  209. package/payload/server/public/assets/copy-PkR4EFD6.js.gz +0 -0
  210. package/payload/server/public/assets/data-yQYhw2IR.js +0 -1
  211. package/payload/server/public/assets/data-yQYhw2IR.js.br +0 -1
  212. package/payload/server/public/assets/data-yQYhw2IR.js.gz +0 -0
  213. package/payload/server/public/assets/file-text-BA9p7TLU.js +0 -1
  214. package/payload/server/public/assets/file-text-BA9p7TLU.js.br +0 -0
  215. package/payload/server/public/assets/file-text-BA9p7TLU.js.gz +0 -0
  216. package/payload/server/public/assets/graph-C8cQ6Nqf.js.br +0 -0
  217. package/payload/server/public/assets/graph-C8cQ6Nqf.js.gz +0 -0
  218. package/payload/server/public/assets/graph-labels-CiK412vE.js +0 -1
  219. package/payload/server/public/assets/graph-labels-CiK412vE.js.br +0 -0
  220. package/payload/server/public/assets/graph-labels-CiK412vE.js.gz +0 -0
  221. package/payload/server/public/assets/operator-CaQAEUBu.js +0 -1
  222. package/payload/server/public/assets/operator-CaQAEUBu.js.br +0 -0
  223. package/payload/server/public/assets/operator-CaQAEUBu.js.gz +0 -0
  224. package/payload/server/public/assets/page-CpJpyoPS.js +0 -32
  225. package/payload/server/public/assets/page-CpJpyoPS.js.br +0 -0
  226. package/payload/server/public/assets/page-CpJpyoPS.js.gz +0 -0
  227. package/payload/server/public/assets/page-D0ShNyGE.js +0 -1
  228. package/payload/server/public/assets/page-D0ShNyGE.js.br +0 -0
  229. package/payload/server/public/assets/page-D0ShNyGE.js.gz +0 -0
  230. package/payload/server/public/assets/play-huZpq9ra.js +0 -1
  231. package/payload/server/public/assets/play-huZpq9ra.js.br +0 -0
  232. package/payload/server/public/assets/play-huZpq9ra.js.gz +0 -0
  233. package/payload/server/public/assets/public--8RWWGjF.js +0 -1
  234. package/payload/server/public/assets/public--8RWWGjF.js.br +0 -0
  235. package/payload/server/public/assets/public--8RWWGjF.js.gz +0 -0
  236. package/payload/server/public/assets/rotate-ccw-g7l4ZSR3.js +0 -1
  237. package/payload/server/public/assets/rotate-ccw-g7l4ZSR3.js.br +0 -0
  238. package/payload/server/public/assets/rotate-ccw-g7l4ZSR3.js.gz +0 -0
  239. package/payload/server/public/assets/routines-DzFcPNMb.js +0 -2
  240. package/payload/server/public/assets/routines-DzFcPNMb.js.br +0 -0
  241. package/payload/server/public/assets/routines-DzFcPNMb.js.gz +0 -0
  242. package/payload/server/public/assets/skills-5vl_Bt9U.js +0 -1
  243. package/payload/server/public/assets/skills-5vl_Bt9U.js.br +0 -0
  244. package/payload/server/public/assets/skills-5vl_Bt9U.js.gz +0 -0
  245. package/payload/server/public/assets/tasks-DQHtJ8Pq.js +0 -3
  246. package/payload/server/public/assets/tasks-DQHtJ8Pq.js.br +0 -0
  247. package/payload/server/public/assets/tasks-DQHtJ8Pq.js.gz +0 -0
  248. package/payload/server/public/assets/triangle-alert-Cy4Z0uFv.js +0 -1
  249. package/payload/server/public/assets/triangle-alert-Cy4Z0uFv.js.br +0 -0
  250. package/payload/server/public/assets/triangle-alert-Cy4Z0uFv.js.gz +0 -0
  251. package/payload/server/public/assets/useCopyFeedback-BwK1RhmF.js +0 -1
  252. package/payload/server/public/assets/useCopyFeedback-BwK1RhmF.js.br +0 -0
  253. package/payload/server/public/assets/useCopyFeedback-BwK1RhmF.js.gz +0 -0
  254. package/payload/server/public/assets/useSubAccountSwitcher-C7TtIbR3.js.br +0 -0
  255. package/payload/server/public/assets/useSubAccountSwitcher-DCkivCBS.css.br +0 -0
  256. package/payload/server/public/assets/useVoiceRecorder-DgyAGgmF.js +0 -2
  257. package/payload/server/public/assets/useVoiceRecorder-DgyAGgmF.js.br +0 -0
  258. package/payload/server/public/assets/useVoiceRecorder-DgyAGgmF.js.gz +0 -0
  259. package/payload/server/public/assets/wrench-CICORrSc.js +0 -1
  260. package/payload/server/public/assets/wrench-CICORrSc.js.br +0 -0
  261. package/payload/server/public/assets/wrench-CICORrSc.js.gz +0 -0
@@ -0,0 +1,51 @@
1
+ // Task 2286 — the gate that keeps a registered admin tool from going
2
+ // undeclared. Five of them did, and nothing failed, because
3
+ // check-canonical-tool-names validates PLUGIN.md against the generated
4
+ // artifact: a tool absent from both is consistent.
5
+ import { describe, it, expect } from 'vitest'
6
+ // @ts-expect-error — plain .mjs module, no type declarations
7
+ import { extractRegisteredTools, diffToolSets } from '../check-plugin-tool-declarations.mjs'
8
+
9
+ const SOURCE = `
10
+ eagerTool(server,
11
+ "system-status",
12
+ "Check health.",
13
+ {},
14
+ async () => ({}),
15
+ );
16
+
17
+ lifelineTool(server,
18
+ "agent-create",
19
+ "Create an agent.",
20
+ {},
21
+ async () => ({}),
22
+ );
23
+ `
24
+
25
+ describe('extractRegisteredTools', () => {
26
+ it('finds both registration wrappers', () => {
27
+ expect(extractRegisteredTools(SOURCE).sort()).toEqual(['agent-create', 'system-status'])
28
+ })
29
+
30
+ it('returns an empty list for a source with no registrations', () => {
31
+ expect(extractRegisteredTools('const x = 1')).toEqual([])
32
+ })
33
+
34
+ it('ignores a quoted tool name that is not a registration', () => {
35
+ expect(extractRegisteredTools('const names = ["agent-list"]\n')).toEqual([])
36
+ })
37
+ })
38
+
39
+ describe('diffToolSets', () => {
40
+ it('reports a registered tool missing from the manifest', () => {
41
+ expect(diffToolSets(['a', 'b'], ['a'])).toEqual({ undeclared: ['b'], unregistered: [] })
42
+ })
43
+
44
+ it('reports a declared tool that is not registered', () => {
45
+ expect(diffToolSets(['a'], ['a', 'c'])).toEqual({ undeclared: [], unregistered: ['c'] })
46
+ })
47
+
48
+ it('reports nothing when the sets match regardless of order', () => {
49
+ expect(diffToolSets(['a', 'b'], ['b', 'a'])).toEqual({ undeclared: [], unregistered: [] })
50
+ })
51
+ })
@@ -0,0 +1,97 @@
1
+ // Build gate: every tool the admin MCP server registers must be declared in
2
+ // platform/plugins/admin/PLUGIN.md, and every declared tool must be registered.
3
+ //
4
+ // Why this gate exists: an undeclared tool works. It is served, the model can
5
+ // call it, and it is invisible to the allowlist surface that decides whether a
6
+ // public or admin session may reach it. Five admin tools were live and
7
+ // undeclared (agent-image, plugin-toggle-enabled, skill-find, premium-list,
8
+ // premium-deliver) and nothing failed. check-canonical-tool-names cannot see
9
+ // this class: it validates PLUGIN.md against the generated artifact, so a tool
10
+ // absent from both is perfectly consistent.
11
+ //
12
+ // Scope: the admin plugin only. A sweep of all 25 plugins on 2026-08-01 found
13
+ // eleven whose registrations this extractor reads as zero because they register
14
+ // through other shapes. Widening the gate needs an extractor that handles those
15
+ // shapes and is filed as Task 2298; silently skipping those plugins here would
16
+ // be the same invisible pass this gate exists to end.
17
+
18
+ import { readFileSync, existsSync } from 'node:fs'
19
+ import { dirname, join, resolve } from 'node:path'
20
+ import { fileURLToPath } from 'node:url'
21
+ import { parseToolEntries } from './lib/canonical-tool-names.mjs'
22
+
23
+ const __dirname = dirname(fileURLToPath(import.meta.url))
24
+ const MAXY_CODE_ROOT = resolve(__dirname, '..', '..')
25
+ const PLUGIN_DIR = join(MAXY_CODE_ROOT, 'platform', 'plugins', 'admin')
26
+
27
+ /** Tool names registered through the two wrappers the admin server uses. Both
28
+ * put the name on the line after `<wrapper>(server,`. */
29
+ export function extractRegisteredTools(source) {
30
+ return [...source.matchAll(/^(?:eager|lifeline)Tool\(server,\s*\n\s*"([a-zA-Z0-9_-]+)"/gm)].map((m) => m[1])
31
+ }
32
+
33
+ export function diffToolSets(registered, declared) {
34
+ const r = new Set(registered)
35
+ const d = new Set(declared)
36
+ return {
37
+ undeclared: [...r].filter((t) => !d.has(t)).sort(),
38
+ unregistered: [...d].filter((t) => !r.has(t)).sort(),
39
+ }
40
+ }
41
+
42
+ function extractFrontmatter(md) {
43
+ if (!md.startsWith('---')) return null
44
+ const end = md.indexOf('\n---', 3)
45
+ if (end < 0) return null
46
+ return md.slice(3, end)
47
+ }
48
+
49
+ function main() {
50
+ const indexPath = join(PLUGIN_DIR, 'mcp', 'src', 'index.ts')
51
+ const manifestPath = join(PLUGIN_DIR, 'PLUGIN.md')
52
+ for (const p of [indexPath, manifestPath]) {
53
+ if (!existsSync(p)) {
54
+ console.error(`[gate] check-plugin-tool-declarations: missing ${p}`)
55
+ process.exit(1)
56
+ }
57
+ }
58
+
59
+ const registered = extractRegisteredTools(readFileSync(indexPath, 'utf-8'))
60
+ // Zero means the registration shape changed and the extractor went blind.
61
+ // Passing on zero would make every future tool undeclared-and-unseen, which
62
+ // is the exact failure this gate exists to catch.
63
+ if (registered.length === 0) {
64
+ console.error(
65
+ '[gate] check-plugin-tool-declarations: extractor found ZERO registrations in ' +
66
+ 'plugins/admin/mcp/src/index.ts — the registration shape changed, update the extractor',
67
+ )
68
+ process.exit(1)
69
+ }
70
+
71
+ const fm = extractFrontmatter(readFileSync(manifestPath, 'utf-8'))
72
+ if (fm === null) {
73
+ console.error('[gate] check-plugin-tool-declarations: plugins/admin/PLUGIN.md has no frontmatter')
74
+ process.exit(1)
75
+ }
76
+ const declared = parseToolEntries(fm).map((e) => e.name).filter(Boolean)
77
+
78
+ const { undeclared, unregistered } = diffToolSets(registered, declared)
79
+ if (undeclared.length || unregistered.length) {
80
+ console.error('[gate] check-plugin-tool-declarations: admin registered set != declared set')
81
+ if (undeclared.length) {
82
+ console.error(` registered in index.ts but NOT declared in PLUGIN.md: ${undeclared.join(', ')}`)
83
+ }
84
+ if (unregistered.length) {
85
+ console.error(` declared in PLUGIN.md but NOT registered in index.ts: ${unregistered.join(', ')}`)
86
+ }
87
+ process.exit(1)
88
+ }
89
+
90
+ console.log(
91
+ `[gate] check-plugin-tool-declarations: PASS (admin: ${registered.length} registered == ${declared.length} declared)`,
92
+ )
93
+ }
94
+
95
+ if (process.argv[1] && resolve(process.argv[1]) === resolve(fileURLToPath(import.meta.url))) {
96
+ main()
97
+ }
@@ -65,6 +65,11 @@ const EXCEPTIONS = [
65
65
  riskClass: 'write_local',
66
66
  reason: 'Removes a workflow definition from the local graph. Any run history it produced is untouched.',
67
67
  },
68
+ {
69
+ tool: 'agent-delete',
70
+ riskClass: 'write_local',
71
+ reason: 'Removes a public agent\'s :Agent node, its owned knowledge projections and its on-disk directory, all via a loopback call to this device\'s own platform route. Nothing leaves the device.',
72
+ },
68
73
  ]
69
74
 
70
75
  function collectPluginDirs() {
@@ -1 +1 @@
1
- {"version":3,"file":"canonical-tool-names.generated.d.ts","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAyB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EA0UtD,CAAA"}
1
+ {"version":3,"file":"canonical-tool-names.generated.d.ts","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAyB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAkVtD,CAAA"}
@@ -55,7 +55,11 @@ export const CANONICAL_MAXY_TOOL_NAMES = [
55
55
  "mcp__plugin_admin_admin__admin-remove",
56
56
  "mcp__plugin_admin_admin__admin-update-pin",
57
57
  "mcp__plugin_admin_admin__agent-config-read",
58
+ "mcp__plugin_admin_admin__agent-create",
59
+ "mcp__plugin_admin_admin__agent-delete",
60
+ "mcp__plugin_admin_admin__agent-image",
58
61
  "mcp__plugin_admin_admin__agent-list",
62
+ "mcp__plugin_admin_admin__agent-update",
59
63
  "mcp__plugin_admin_admin__brand-settings",
60
64
  "mcp__plugin_admin_admin__capabilities-here",
61
65
  "mcp__plugin_admin_admin__cpu-triage-read",
@@ -63,6 +67,9 @@ export const CANONICAL_MAXY_TOOL_NAMES = [
63
67
  "mcp__plugin_admin_admin__linkedin-ingest-token",
64
68
  "mcp__plugin_admin_admin__logs-read",
65
69
  "mcp__plugin_admin_admin__plugin-read",
70
+ "mcp__plugin_admin_admin__plugin-toggle-enabled",
71
+ "mcp__plugin_admin_admin__premium-deliver",
72
+ "mcp__plugin_admin_admin__premium-list",
66
73
  "mcp__plugin_admin_admin__public-hostname",
67
74
  "mcp__plugin_admin_admin__publish-site",
68
75
  "mcp__plugin_admin_admin__qr-generate",
@@ -71,6 +78,7 @@ export const CANONICAL_MAXY_TOOL_NAMES = [
71
78
  "mcp__plugin_admin_admin__remote-auth-status",
72
79
  "mcp__plugin_admin_admin__session-reset",
73
80
  "mcp__plugin_admin_admin__session-resume",
81
+ "mcp__plugin_admin_admin__skill-find",
74
82
  "mcp__plugin_admin_admin__skill-load",
75
83
  "mcp__plugin_admin_admin__skill-search",
76
84
  "mcp__plugin_admin_admin__store-skill",
@@ -1 +1 @@
1
- {"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,9 @@ export interface WhatsAppTarget {
3
3
  senderId: string;
4
4
  gatewayUrl: string;
5
5
  serverPath: string;
6
+ /** Task 2290 — the effective session account. The gateway keys its inbound hub
7
+ * on (account, sender), so the channel server must carry it to the attach. */
8
+ accountId: string;
6
9
  }
7
10
  export interface WebchatTarget {
8
11
  kind: 'webchat';
@@ -1 +1 @@
1
- {"version":3,"file":"channel-targets.d.ts","sourceRoot":"","sources":["../src/channel-targets.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AACD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AACD,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,aAAa,CAAA;AAE1D,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAED,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAErF;AAED,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAE/E;AAED;uDACuD;AACvD,wBAAgB,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAE5D"}
1
+ {"version":3,"file":"channel-targets.d.ts","sourceRoot":"","sources":["../src/channel-targets.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB;mFAC+E;IAC/E,SAAS,EAAE,MAAM,CAAA;CAClB;AACD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AACD,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,aAAa,CAAA;AAE1D,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAED,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAErF;AAED,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAE/E;AAED;uDACuD;AACvD,wBAAgB,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAE5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"channel-targets.js","sourceRoot":"","sources":["../src/channel-targets.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,mBAAmB;AAsBnB,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,GAAqB,EAAE,CAAgB;IACjE,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;AAChC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,WAAW,CAAC,GAAqB;IAC/C,OAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAkC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AACjF,CAAC;AAED;uDACuD;AACvD,MAAM,UAAU,aAAa,CAAC,GAAqB;IACjD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAA;AACrC,CAAC"}
1
+ {"version":3,"file":"channel-targets.js","sourceRoot":"","sources":["../src/channel-targets.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,mBAAmB;AAyBnB,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,GAAqB,EAAE,CAAgB;IACjE,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;AAChC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,WAAW,CAAC,GAAqB;IAC/C,OAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAkC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AACjF,CAAC;AAED;uDACuD;AACvD,MAAM,UAAU,aAAa,CAAC,GAAqB;IACjD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAA;AACrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
@@ -1355,6 +1355,21 @@ export function buildHttpApp(deps) {
1355
1355
  if (reason === 'auth-refresh-failed') {
1356
1356
  deps.logger(`[spawn-failed] reason=auth-refresh-failed authStatus=${authSnap} originalReason=${result.reason}`);
1357
1357
  }
1358
+ // Task 2289 — the reason was always logged, by pty-spawner.ts:2562, but
1359
+ // that line carries only `pid=`, and /rc-spawn, admin, webchat and public
1360
+ // spawns all reach the same twelve emitters. Attributing a reason to this
1361
+ // route therefore relied on line adjacency, which holds on a quiet log and
1362
+ // not on a busy one. This line is the grep handle: one `route=public-spawn`
1363
+ // reaches the cause with the correlation fields beside it.
1364
+ // `reason` IS the stage (the SpawnFailureReason union); there is no
1365
+ // separate stage to name, and no throw on this path to take a message from.
1366
+ // The tail's byte count, not the tail: the spawner already logs the tail
1367
+ // and it runs to several kilobytes. The count says whether one exists.
1368
+ const orNone = (v) => v ?? 'none';
1369
+ deps.logger(`[spawn-failed] route=public-spawn reason=${reason} role=${role} channel=${channel}` +
1370
+ ` slug=${orNone(agentSlug)} senderId=${senderId} account=${orNone(agentAccountId)}` +
1371
+ ` sessionId=${orNone(callerSessionId?.slice(0, 8))}` +
1372
+ ` stderrTailBytes=${result.stderrTail ? Buffer.byteLength(result.stderrTail, 'utf8') : 0}`);
1358
1373
  return c.json({ error: 'spawn-failed', reason, stderrTail: result.stderrTail, authStatus: authSnap }, 500);
1359
1374
  }
1360
1375
  timed(deps.logger, 'POST', '/public-spawn', 200, Date.now() - start);
@@ -3034,8 +3049,10 @@ export function buildHttpApp(deps) {
3034
3049
  // standing binding-lost invariant below reads; the unified server carries
3035
3050
  // both, so both paths are set to the unified config path.
3036
3051
  let targetSet = {};
3052
+ // Task 2290 — the effective account rides the target so the unified channel
3053
+ // server can name it on every hub-touching call to the gateway.
3037
3054
  if (effectiveWaChannel)
3038
- targetSet = mergeTarget(targetSet, { kind: 'whatsapp', ...effectiveWaChannel });
3055
+ targetSet = mergeTarget(targetSet, { kind: 'whatsapp', ...effectiveWaChannel, accountId: effectiveAccountId });
3039
3056
  if (effectiveWebchatChannel)
3040
3057
  targetSet = mergeTarget(targetSet, { kind: 'webchat', ...effectiveWebchatChannel });
3041
3058
  let waPath = null;
@@ -3071,6 +3088,8 @@ export function buildHttpApp(deps) {
3071
3088
  gatewayUrl: effectiveWaChannel.gatewayUrl,
3072
3089
  serverPath: effectiveWaChannel.serverPath,
3073
3090
  nodeBin: deps.nodeBin,
3091
+ // Task 2290 — the account the gateway keys this session's hub entry on.
3092
+ accountId: effectiveAccountId,
3074
3093
  });
3075
3094
  waPath = waChannelMcpConfigPath(sessionId, tmpdir());
3076
3095
  try {