@rubytech/create-maxy-code 0.1.579 → 0.1.581

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 (325) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/telegram-media/dist/index.d.ts +45 -0
  3. package/payload/platform/lib/telegram-media/dist/index.d.ts.map +1 -0
  4. package/payload/platform/lib/telegram-media/dist/index.js +89 -0
  5. package/payload/platform/lib/telegram-media/dist/index.js.map +1 -0
  6. package/payload/platform/lib/telegram-media/src/__tests__/telegram-media.test.ts +104 -0
  7. package/payload/platform/lib/telegram-media/src/index.ts +102 -0
  8. package/payload/platform/lib/telegram-media/tsconfig.json +9 -0
  9. package/payload/platform/lib/telegram-media/vitest.config.ts +9 -0
  10. package/payload/platform/package.json +2 -2
  11. package/payload/platform/plugins/admin/PLUGIN.md +2 -2
  12. package/payload/platform/plugins/admin/hooks/__tests__/archive-ingest-surface-gate.test.sh +22 -0
  13. package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh +34 -0
  14. package/payload/platform/plugins/admin/hooks/__tests__/quote-path-write-gate.test.sh +25 -0
  15. package/payload/platform/plugins/admin/hooks/archive-ingest-surface-gate.sh +11 -4
  16. package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +2 -2
  17. package/payload/platform/plugins/admin/hooks/quote-path-write-gate.sh +6 -3
  18. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +13 -1
  19. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +16 -0
  20. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-schema-shape.test.ts +23 -0
  21. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-visit-status-write.test.ts +175 -3
  22. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-visits-scope.test.ts +101 -0
  23. package/payload/platform/plugins/cloudflare/skills/data-portal/schema.sql +35 -1
  24. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visit-status.ts +73 -8
  25. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visits.ts +59 -8
  26. package/payload/platform/plugins/docs/references/telegram-guide.md +12 -0
  27. package/payload/platform/plugins/telegram/.claude-plugin/plugin.json +1 -1
  28. package/payload/platform/plugins/telegram/PLUGIN.md +27 -3
  29. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-census.test.js +99 -1
  30. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-census.test.js.map +1 -1
  31. package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.d.ts +2 -0
  32. package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.d.ts.map +1 -0
  33. package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.js +226 -0
  34. package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.js.map +1 -0
  35. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.d.ts +2 -0
  36. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.d.ts.map +1 -0
  37. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.js +75 -0
  38. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.js.map +1 -0
  39. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.d.ts +2 -0
  40. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.d.ts.map +1 -0
  41. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js +152 -0
  42. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js.map +1 -0
  43. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.d.ts +2 -0
  44. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.d.ts.map +1 -0
  45. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js +231 -0
  46. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js.map +1 -0
  47. package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.d.ts +2 -0
  48. package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.d.ts.map +1 -0
  49. package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.js +196 -0
  50. package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.js.map +1 -0
  51. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.d.ts +2 -0
  52. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.d.ts.map +1 -0
  53. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.js +93 -0
  54. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.js.map +1 -0
  55. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.d.ts +2 -0
  56. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.d.ts.map +1 -0
  57. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.js +76 -0
  58. package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.js.map +1 -0
  59. package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.d.ts +2 -0
  60. package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.d.ts.map +1 -0
  61. package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.js +95 -0
  62. package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.js.map +1 -0
  63. package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.d.ts +2 -0
  64. package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.d.ts.map +1 -0
  65. package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.js +293 -0
  66. package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.js.map +1 -0
  67. package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.d.ts +2 -0
  68. package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.d.ts.map +1 -0
  69. package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.js +130 -0
  70. package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.js.map +1 -0
  71. package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.d.ts +2 -0
  72. package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.d.ts.map +1 -0
  73. package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.js +119 -0
  74. package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.js.map +1 -0
  75. package/payload/platform/plugins/telegram/mcp/dist/index.js +89 -66
  76. package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -1
  77. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts +15 -0
  78. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts.map +1 -1
  79. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js +27 -10
  80. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js.map +1 -1
  81. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts +38 -0
  82. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts.map +1 -1
  83. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js +106 -0
  84. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js.map +1 -1
  85. package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.d.ts +15 -0
  86. package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.d.ts.map +1 -0
  87. package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.js +78 -0
  88. package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.js.map +1 -0
  89. package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts +60 -0
  90. package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts.map +1 -0
  91. package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js +141 -0
  92. package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js.map +1 -0
  93. package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.d.ts +44 -0
  94. package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.d.ts.map +1 -0
  95. package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.js +88 -0
  96. package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.js.map +1 -0
  97. package/payload/platform/plugins/telegram/mcp/dist/tools/ask.d.ts +73 -0
  98. package/payload/platform/plugins/telegram/mcp/dist/tools/ask.d.ts.map +1 -0
  99. package/payload/platform/plugins/telegram/mcp/dist/tools/ask.js +270 -0
  100. package/payload/platform/plugins/telegram/mcp/dist/tools/ask.js.map +1 -0
  101. package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts +34 -0
  102. package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts.map +1 -0
  103. package/payload/platform/plugins/telegram/mcp/dist/tools/card.js +140 -0
  104. package/payload/platform/plugins/telegram/mcp/dist/tools/card.js.map +1 -0
  105. package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.d.ts +70 -0
  106. package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.d.ts.map +1 -0
  107. package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.js +232 -0
  108. package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.js.map +1 -0
  109. package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.d.ts +23 -0
  110. package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.d.ts.map +1 -0
  111. package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.js +43 -0
  112. package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.js.map +1 -0
  113. package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.d.ts +42 -0
  114. package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.d.ts.map +1 -0
  115. package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.js +92 -0
  116. package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.js.map +1 -0
  117. package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.d.ts +76 -0
  118. package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.d.ts.map +1 -0
  119. package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.js +288 -0
  120. package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.js.map +1 -0
  121. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.d.ts +250 -0
  122. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.d.ts.map +1 -0
  123. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.js +400 -0
  124. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.js.map +1 -0
  125. package/payload/platform/plugins/telegram/mcp/dist/tools/thread.d.ts +38 -0
  126. package/payload/platform/plugins/telegram/mcp/dist/tools/thread.d.ts.map +1 -0
  127. package/payload/platform/plugins/telegram/mcp/dist/tools/thread.js +120 -0
  128. package/payload/platform/plugins/telegram/mcp/dist/tools/thread.js.map +1 -0
  129. package/payload/platform/plugins/telegram/mcp/vitest.config.ts +14 -0
  130. package/payload/platform/plugins/telegram/skills/build/SKILL.md +171 -21
  131. package/payload/platform/scripts/__tests__/hook-matcher-dispatch.test.sh +163 -0
  132. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  133. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +7 -1
  134. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  135. package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
  136. package/payload/platform/services/telegram-channel/dist/instructions.js +15 -1
  137. package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
  138. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
  139. package/payload/server/{adminuser-self-heal-Y4U3UNKF.js → adminuser-self-heal-ZHFNDKJK.js} +2 -10
  140. package/payload/server/{chunk-637C2FGE.js → chunk-BFRB2U75.js} +3278 -3381
  141. package/payload/server/{chunk-6DQCFP2E.js → chunk-BTXRBXMU.js} +3785 -4090
  142. package/payload/server/{chunk-KVR2FT6O.js → chunk-HYQNUVGO.js} +1 -12
  143. package/payload/server/{chunk-PGGGWUBM.js → chunk-SKYZG6OT.js} +224 -372
  144. package/payload/server/{manager-R3XH3BNM.js → manager-CTVTF4YB.js} +3 -3
  145. package/payload/server/maxy-edge.js +4 -27
  146. package/payload/server/public/activity.html +6 -6
  147. package/payload/server/public/agents.html +5 -5
  148. package/payload/server/public/assets/{AdminLoginScreens-Bus-Y-rG.js → AdminLoginScreens-B1lu4-_F.js} +1 -1
  149. package/payload/server/public/assets/AdminLoginScreens-B1lu4-_F.js.br +0 -0
  150. package/payload/server/public/assets/AdminLoginScreens-B1lu4-_F.js.gz +0 -0
  151. package/payload/server/public/assets/{AdminShell-Bsm7q3CW.js → AdminShell-BMslfZxN.js} +1 -1
  152. package/payload/server/public/assets/AdminShell-BMslfZxN.js.br +0 -0
  153. package/payload/server/public/assets/AdminShell-BMslfZxN.js.gz +0 -0
  154. package/payload/server/public/assets/{activity-BWqrCyYM.js → activity-kQ3w70LJ.js} +1 -1
  155. package/payload/server/public/assets/activity-kQ3w70LJ.js.br +0 -0
  156. package/payload/server/public/assets/activity-kQ3w70LJ.js.gz +0 -0
  157. package/payload/server/public/assets/{admin-zly7Y6EZ.js → admin-CkASgYA7.js} +1 -1
  158. package/payload/server/public/assets/admin-CkASgYA7.js.br +0 -0
  159. package/payload/server/public/assets/admin-CkASgYA7.js.gz +0 -0
  160. package/payload/server/public/assets/{agents-BsxGD1V1.js → agents-Cn_bZgnD.js} +1 -1
  161. package/payload/server/public/assets/agents-Cn_bZgnD.js.br +0 -0
  162. package/payload/server/public/assets/agents-Cn_bZgnD.js.gz +0 -0
  163. package/payload/server/public/assets/{browser-CRLxTaw2.js → browser-BE-GDk5-.js} +1 -1
  164. package/payload/server/public/assets/browser-BE-GDk5-.js.br +0 -0
  165. package/payload/server/public/assets/browser-BE-GDk5-.js.gz +0 -0
  166. package/payload/server/public/assets/{calendar-Bmp6qI_P.js → calendar-Di7BEHHN.js} +1 -1
  167. package/payload/server/public/assets/calendar-Di7BEHHN.js.br +0 -0
  168. package/payload/server/public/assets/calendar-Di7BEHHN.js.gz +0 -0
  169. package/payload/server/public/assets/chat-CKyMT5Ai.js +1 -0
  170. package/payload/server/public/assets/chat-CKyMT5Ai.js.br +1 -0
  171. package/payload/server/public/assets/chat-CKyMT5Ai.js.gz +0 -0
  172. package/payload/server/public/assets/chevron-left-Id9VAZAz.js +1 -0
  173. package/payload/server/public/assets/chevron-left-Id9VAZAz.js.br +0 -0
  174. package/payload/server/public/assets/clock-DKpWWJbJ.js +1 -0
  175. package/payload/server/public/assets/clock-DKpWWJbJ.js.br +0 -0
  176. package/payload/server/public/assets/{copy-Bcjpxqzn.js → copy-nkxspu2J.js} +1 -1
  177. package/payload/server/public/assets/copy-nkxspu2J.js.br +0 -0
  178. package/payload/server/public/assets/copy-nkxspu2J.js.gz +0 -0
  179. package/payload/server/public/assets/data-1c33cAHp.js +1 -0
  180. package/payload/server/public/assets/data-1c33cAHp.js.br +2 -0
  181. package/payload/server/public/assets/data-1c33cAHp.js.gz +0 -0
  182. package/payload/server/public/assets/{field-ChKB2l_d.js → field-2rIXxGMt.js} +1 -1
  183. package/payload/server/public/assets/field-2rIXxGMt.js.br +0 -0
  184. package/payload/server/public/assets/field-2rIXxGMt.js.gz +0 -0
  185. package/payload/server/public/assets/{file-text-COZcf7mU.js → file-text-CdSqrscg.js} +1 -1
  186. package/payload/server/public/assets/file-text-CdSqrscg.js.br +0 -0
  187. package/payload/server/public/assets/file-text-CdSqrscg.js.gz +0 -0
  188. package/payload/server/public/assets/{graph-nnV47iqM.js → graph-BfBHHXaC.js} +1 -1
  189. package/payload/server/public/assets/graph-BfBHHXaC.js.br +0 -0
  190. package/payload/server/public/assets/graph-BfBHHXaC.js.gz +0 -0
  191. package/payload/server/public/assets/{graph-labels-x-1MT-3c.js → graph-labels-CHW2aBke.js} +1 -1
  192. package/payload/server/public/assets/graph-labels-CHW2aBke.js.br +0 -0
  193. package/payload/server/public/assets/graph-labels-CHW2aBke.js.gz +0 -0
  194. package/payload/server/public/assets/jsx-runtime-D43jgaWP.css +1 -0
  195. package/payload/server/public/assets/jsx-runtime-D43jgaWP.css.br +0 -0
  196. package/payload/server/public/assets/jsx-runtime-D43jgaWP.css.gz +0 -0
  197. package/payload/server/public/assets/{operator-BAO0-mjU.js → operator-DRn9LITC.js} +1 -1
  198. package/payload/server/public/assets/operator-DRn9LITC.js.br +0 -0
  199. package/payload/server/public/assets/operator-DRn9LITC.js.gz +0 -0
  200. package/payload/server/public/assets/page-BwqQsoU8.js +1 -0
  201. package/payload/server/public/assets/page-BwqQsoU8.js.br +0 -0
  202. package/payload/server/public/assets/page-BwqQsoU8.js.gz +0 -0
  203. package/payload/server/public/assets/{page-B-F08pod.js → page-D_9mPS6W.js} +1 -1
  204. package/payload/server/public/assets/page-D_9mPS6W.js.br +0 -0
  205. package/payload/server/public/assets/page-D_9mPS6W.js.gz +0 -0
  206. package/payload/server/public/assets/play-7LTxCuLX.js +1 -0
  207. package/payload/server/public/assets/play-7LTxCuLX.js.br +0 -0
  208. package/payload/server/public/assets/play-7LTxCuLX.js.gz +0 -0
  209. package/payload/server/public/assets/{public-_HJsUohA.js → public-CrjZYpdW.js} +1 -1
  210. package/payload/server/public/assets/public-CrjZYpdW.js.br +0 -0
  211. package/payload/server/public/assets/public-CrjZYpdW.js.gz +0 -0
  212. package/payload/server/public/assets/{rotate-ccw-DJeAnYLQ.js → rotate-ccw-J9f-GWjm.js} +1 -1
  213. package/payload/server/public/assets/rotate-ccw-J9f-GWjm.js.br +0 -0
  214. package/payload/server/public/assets/rotate-ccw-J9f-GWjm.js.gz +0 -0
  215. package/payload/server/public/assets/{routines-CoIVXRCB.js → routines-C1AB-3FR.js} +1 -1
  216. package/payload/server/public/assets/routines-C1AB-3FR.js.br +0 -0
  217. package/payload/server/public/assets/routines-C1AB-3FR.js.gz +0 -0
  218. package/payload/server/public/assets/{skills-BjHt5lDG.js → skills-C4EfNKEx.js} +1 -1
  219. package/payload/server/public/assets/skills-C4EfNKEx.js.br +0 -0
  220. package/payload/server/public/assets/skills-C4EfNKEx.js.gz +0 -0
  221. package/payload/server/public/assets/{tasks-iUFfeA9_.js → tasks-DszD3aZl.js} +1 -1
  222. package/payload/server/public/assets/tasks-DszD3aZl.js.br +0 -0
  223. package/payload/server/public/assets/tasks-DszD3aZl.js.gz +0 -0
  224. package/payload/server/public/assets/{triangle-alert-Dwa986Gg.js → triangle-alert-B5WAyAkC.js} +1 -1
  225. package/payload/server/public/assets/triangle-alert-B5WAyAkC.js.br +4 -0
  226. package/payload/server/public/assets/triangle-alert-B5WAyAkC.js.gz +0 -0
  227. package/payload/server/public/assets/{useCopyFeedback-B1Jp6CsE.js → useCopyFeedback-B2nuNNJw.js} +1 -1
  228. package/payload/server/public/assets/useCopyFeedback-B2nuNNJw.js.br +0 -0
  229. package/payload/server/public/assets/useCopyFeedback-B2nuNNJw.js.gz +0 -0
  230. package/payload/server/public/assets/{useMediaQuery-CVZYjRf6.js → useMediaQuery-DUPJPHQt.js} +1 -1
  231. package/payload/server/public/assets/useMediaQuery-DUPJPHQt.js.br +0 -0
  232. package/payload/server/public/assets/useMediaQuery-DUPJPHQt.js.gz +0 -0
  233. package/payload/server/public/assets/useVoiceRecorder-CCK60d2i.js +2 -0
  234. package/payload/server/public/assets/useVoiceRecorder-CCK60d2i.js.br +0 -0
  235. package/payload/server/public/assets/useVoiceRecorder-CCK60d2i.js.gz +0 -0
  236. package/payload/server/public/assets/{wrench-BD7xwbV1.js → wrench-DZJZm17j.js} +1 -1
  237. package/payload/server/public/assets/wrench-DZJZm17j.js.br +0 -0
  238. package/payload/server/public/assets/wrench-DZJZm17j.js.gz +0 -0
  239. package/payload/server/public/browser.html +5 -5
  240. package/payload/server/public/calendar.html +8 -8
  241. package/payload/server/public/chat.html +14 -14
  242. package/payload/server/public/data.html +12 -12
  243. package/payload/server/public/field.html +3 -3
  244. package/payload/server/public/graph.html +10 -10
  245. package/payload/server/public/index.html +14 -14
  246. package/payload/server/public/operator.html +15 -15
  247. package/payload/server/public/public.html +14 -14
  248. package/payload/server/public/routines.html +8 -8
  249. package/payload/server/public/skills.html +6 -6
  250. package/payload/server/public/tasks.html +7 -7
  251. package/payload/server/server.js +10561 -10491
  252. package/payload/server/{src-IJCLNFYU.js → src-MM64CYYZ.js} +1 -1
  253. package/payload/server/{userprofile-reconcile-PUA657YX.js → userprofile-reconcile-TL4JKBPG.js} +1 -8
  254. package/payload/server/public/assets/AdminLoginScreens-Bus-Y-rG.js.br +0 -0
  255. package/payload/server/public/assets/AdminLoginScreens-Bus-Y-rG.js.gz +0 -0
  256. package/payload/server/public/assets/AdminShell-Bsm7q3CW.js.br +0 -0
  257. package/payload/server/public/assets/AdminShell-Bsm7q3CW.js.gz +0 -0
  258. package/payload/server/public/assets/activity-BWqrCyYM.js.br +0 -0
  259. package/payload/server/public/assets/activity-BWqrCyYM.js.gz +0 -0
  260. package/payload/server/public/assets/admin-zly7Y6EZ.js.br +0 -0
  261. package/payload/server/public/assets/admin-zly7Y6EZ.js.gz +0 -0
  262. package/payload/server/public/assets/agents-BsxGD1V1.js.br +0 -0
  263. package/payload/server/public/assets/agents-BsxGD1V1.js.gz +0 -0
  264. package/payload/server/public/assets/browser-CRLxTaw2.js.br +0 -0
  265. package/payload/server/public/assets/browser-CRLxTaw2.js.gz +0 -0
  266. package/payload/server/public/assets/calendar-Bmp6qI_P.js.br +0 -0
  267. package/payload/server/public/assets/calendar-Bmp6qI_P.js.gz +0 -0
  268. package/payload/server/public/assets/chat-ChObDKHy.js +0 -1
  269. package/payload/server/public/assets/chat-ChObDKHy.js.br +0 -0
  270. package/payload/server/public/assets/chat-ChObDKHy.js.gz +0 -0
  271. package/payload/server/public/assets/chevron-left-D2l4jMcd.js +0 -1
  272. package/payload/server/public/assets/chevron-left-D2l4jMcd.js.br +0 -0
  273. package/payload/server/public/assets/clock-CMdfsroW.js +0 -1
  274. package/payload/server/public/assets/clock-CMdfsroW.js.br +0 -0
  275. package/payload/server/public/assets/clock-CMdfsroW.js.gz +0 -0
  276. package/payload/server/public/assets/copy-Bcjpxqzn.js.br +0 -0
  277. package/payload/server/public/assets/copy-Bcjpxqzn.js.gz +0 -0
  278. package/payload/server/public/assets/data-CFB5Lgw-.js +0 -1
  279. package/payload/server/public/assets/data-CFB5Lgw-.js.br +0 -0
  280. package/payload/server/public/assets/data-CFB5Lgw-.js.gz +0 -0
  281. package/payload/server/public/assets/field-ChKB2l_d.js.br +0 -0
  282. package/payload/server/public/assets/field-ChKB2l_d.js.gz +0 -0
  283. package/payload/server/public/assets/file-text-COZcf7mU.js.br +0 -0
  284. package/payload/server/public/assets/file-text-COZcf7mU.js.gz +0 -0
  285. package/payload/server/public/assets/graph-labels-x-1MT-3c.js.br +0 -0
  286. package/payload/server/public/assets/graph-labels-x-1MT-3c.js.gz +0 -0
  287. package/payload/server/public/assets/graph-nnV47iqM.js.br +0 -0
  288. package/payload/server/public/assets/graph-nnV47iqM.js.gz +0 -0
  289. package/payload/server/public/assets/jsx-runtime-CeNZasfC.css +0 -1
  290. package/payload/server/public/assets/jsx-runtime-CeNZasfC.css.br +0 -0
  291. package/payload/server/public/assets/jsx-runtime-CeNZasfC.css.gz +0 -0
  292. package/payload/server/public/assets/operator-BAO0-mjU.js.br +0 -0
  293. package/payload/server/public/assets/operator-BAO0-mjU.js.gz +0 -0
  294. package/payload/server/public/assets/page-B-F08pod.js.br +0 -0
  295. package/payload/server/public/assets/page-B-F08pod.js.gz +0 -0
  296. package/payload/server/public/assets/page-BMOCy2aD.js +0 -1
  297. package/payload/server/public/assets/page-BMOCy2aD.js.br +0 -0
  298. package/payload/server/public/assets/page-BMOCy2aD.js.gz +0 -0
  299. package/payload/server/public/assets/play-DFtlk8Zs.js +0 -1
  300. package/payload/server/public/assets/play-DFtlk8Zs.js.br +0 -0
  301. package/payload/server/public/assets/play-DFtlk8Zs.js.gz +0 -0
  302. package/payload/server/public/assets/public-_HJsUohA.js.br +0 -0
  303. package/payload/server/public/assets/public-_HJsUohA.js.gz +0 -0
  304. package/payload/server/public/assets/rotate-ccw-DJeAnYLQ.js.br +0 -0
  305. package/payload/server/public/assets/rotate-ccw-DJeAnYLQ.js.gz +0 -0
  306. package/payload/server/public/assets/routines-CoIVXRCB.js.br +0 -0
  307. package/payload/server/public/assets/routines-CoIVXRCB.js.gz +0 -0
  308. package/payload/server/public/assets/skills-BjHt5lDG.js.br +0 -0
  309. package/payload/server/public/assets/skills-BjHt5lDG.js.gz +0 -0
  310. package/payload/server/public/assets/tasks-iUFfeA9_.js.br +0 -0
  311. package/payload/server/public/assets/tasks-iUFfeA9_.js.gz +0 -0
  312. package/payload/server/public/assets/triangle-alert-Dwa986Gg.js.br +0 -0
  313. package/payload/server/public/assets/triangle-alert-Dwa986Gg.js.gz +0 -0
  314. package/payload/server/public/assets/useCopyFeedback-B1Jp6CsE.js.br +0 -0
  315. package/payload/server/public/assets/useCopyFeedback-B1Jp6CsE.js.gz +0 -0
  316. package/payload/server/public/assets/useMediaQuery-CVZYjRf6.js.br +0 -0
  317. package/payload/server/public/assets/useMediaQuery-CVZYjRf6.js.gz +0 -0
  318. package/payload/server/public/assets/useVoiceRecorder-D5b4r4z0.js +0 -2
  319. package/payload/server/public/assets/useVoiceRecorder-D5b4r4z0.js.br +0 -0
  320. package/payload/server/public/assets/useVoiceRecorder-D5b4r4z0.js.gz +0 -0
  321. package/payload/server/public/assets/wrench-BD7xwbV1.js.br +0 -0
  322. package/payload/server/public/assets/wrench-BD7xwbV1.js.gz +0 -0
  323. /package/payload/server/public/assets/{jsx-runtime-CjJ246F7.js → jsx-runtime-Cjug_Cyb.js} +0 -0
  324. /package/payload/server/public/assets/{jsx-runtime-CjJ246F7.js.br → jsx-runtime-Cjug_Cyb.js.br} +0 -0
  325. /package/payload/server/public/assets/{jsx-runtime-CjJ246F7.js.gz → jsx-runtime-Cjug_Cyb.js.gz} +0 -0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: build
3
- description: Build your own Telegram functionality on this install — cards with buttons, editing a card in place, answering a button press, opening a Mini App inside the chat, uploading files, and reaching any of the 185 Bot API methods through telegram-api. Use when the operator wants Telegram to do something the four named tools do not already do.
3
+ description: Build your own Telegram functionality on this install — cards with buttons, editing a card in place, answering a button press, opening a Mini App inside the chat, sending and fetching files, polls and locations, invoices and Telegram Stars, threading a chat per job, and reaching any of the 185 Bot API methods through telegram-api. Use when the operator wants Telegram to do something the named tools do not already do.
4
4
  ---
5
5
 
6
6
  # Build a Telegram surface
@@ -17,11 +17,16 @@ and this skill says how to call it.
17
17
 
18
18
  ## What you have
19
19
 
20
- Four named tools for the common paths, and one passthrough for everything else.
20
+ Ten named tools for the common paths, and one passthrough for everything else.
21
21
 
22
22
  | Tool | Use it for |
23
23
  |---|---|
24
- | `mcp__telegram__message` | Sending text, with an optional inline keyboard |
24
+ | `mcp__telegram__telegram-card` | Posting a card, or editing the one your key already names |
25
+ | `mcp__telegram__telegram-ask` | Polls, checklists, locations, venues, contacts, dice |
26
+ | `mcp__telegram__telegram-media-send` | Sending a photo, file, video, audio or album, and editing media or captions |
27
+ | `mcp__telegram__telegram-media-fetch` | Fetching a file by `file_id` |
28
+ | `mcp__telegram__telegram-invoice` | Invoices, invoice links, checkout answers, Telegram Stars |
29
+ | `mcp__telegram__telegram-thread` | Forum topics, one thread per job |
25
30
  | `mcp__telegram__message-history` | Reading what arrived |
26
31
  | `mcp__telegram__telegram-webhook-register` | Registering a bot's webhook. The only sanctioned path |
27
32
  | `mcp__telegram__telegram-menu-button` | The permanent Mini App button in a bot's chats |
@@ -45,42 +50,60 @@ Each refusal names the tool that owns the capability instead.
45
50
 
46
51
  ### 1. A card with buttons
47
52
 
48
- Use `message` with `inlineKeyboard`. `callbackData` is what comes back on a press, capped by
53
+ Use `telegram-card` with `buttons`. `callbackData` is what comes back on a press, capped by
49
54
  Telegram at 1 to 64 bytes; longer data is refused with nothing in our logs to explain it. Put an id
50
55
  in it, not a sentence.
51
56
 
52
57
  ```
53
- message channel=telegram botId=<id> chatId=<chat> text="Job 4102, Ladywell Prospect"
54
- inlineKeyboard=[[{text:"Accept", callbackData:"j4102:accept"},
55
- {text:"On site", callbackData:"j4102:onsite"}]]
58
+ telegram-card botId=<id> chatId=<chat> text="Job 4102, Ladywell Prospect"
59
+ buttons=[[{text:"Accept", callbackData:"j4102:accept"},
60
+ {text:"On site", callbackData:"j4102:onsite"}]]
56
61
  ```
57
62
 
58
63
  ### 2. Changing that card in place
59
64
 
60
- A second `message` posts a new card and leaves the stale one above it. Editing keeps one card:
65
+ Give the same card a `key` and every later call edits it instead of stacking a new one below:
61
66
 
62
67
  ```
63
- telegram-api botId=<id> method=editMessageText
64
- params={chat_id:<chat>, message_id:<id of the card>, text:"Job 4102 — on site",
65
- reply_markup:{inline_keyboard:[[{text:"Complete", callback_data:"j4102:done"}]]}}
68
+ telegram-card botId=<id> chatId=<chat> key="j4102" text="Job 4102, Ladywell Prospect"
69
+ telegram-card botId=<id> chatId=<chat> key="j4102" text="Job 4102 — on site"
70
+ buttons=[[{text:"Complete", callbackData:"j4102:done"}]]
66
71
  ```
67
72
 
73
+ The first call posts and remembers the message id; the second edits it. The key is scoped to that
74
+ bot and chat, so the same key in another chat is another card.
75
+
68
76
  Telegram answers `ok:false` with `Bad Request: message is not modified` when the new text and markup
69
- are identical to the old. That is not an error to retry; it means the edit was a no-op.
77
+ are identical to the old. `telegram-card` reports that as `outcome=unchanged` and returns success,
78
+ not an error: re-posting an idempotent card is the normal case, not a failure to retry.
79
+
80
+ A card Telegram will no longer edit answers `ok:false` with `Bad Request: message to edit not found`.
81
+ `telegram-card` relays that as an error rather than silently posting a new card: the same string
82
+ comes back for messages Telegram simply refuses to edit, not only for deleted ones, so a
83
+ clear-and-repost would post a duplicate on every call instead of surfacing one failure. Recover by
84
+ calling again with no `key` for a one-off, or with a new `key` for a card you will keep editing.
85
+
86
+ A key untouched for 7 days stops being edited in place: the next call with it posts fresh and starts
87
+ a new card. Every post or successful edit resets that clock, so a card you touch daily never expires
88
+ underneath you. The ceiling is what keeps `telegram-cards.json` bounded, and it is why a card whose
89
+ message was deleted heals on its own inside a week with nobody clearing anything.
70
90
 
71
91
  ### 3. Answering the press
72
92
 
73
93
  A press spins Telegram's own progress indicator for 15 seconds unless the bot answers. On this
74
94
  install the inbound route already answers every press, including refusals, so you do not normally
75
- call this yourself. When you build a surface that answers out of band, the method is
76
- `answerCallbackQuery` with the `callback_query_id`, and `show_alert:true` turns the toast into a
77
- dialog.
95
+ call this yourself. When you build a surface that answers out of band, pass `callbackQueryId` to
96
+ `telegram-card` and set `alert` to turn the toast into a dialog.
97
+
98
+ `telegram-card` answers the press **after** it posts or edits the card. Telegram refuses a callback
99
+ id older than its window, and answering first would let a stale id block the card update, which is
100
+ the work that matters. A failed answer is still reported, alongside what the send achieved.
78
101
 
79
102
  ### 4. A Mini App inside the chat
80
103
 
81
104
  A `url` button sends the person out to the device browser, where Telegram passes no identity at all.
82
105
  A `web_app` button opens the page inside Telegram and hands it `initData`. Use `webAppUrl` on a
83
- `message` button, or `telegram-menu-button` for a permanent one.
106
+ `telegram-card` button, or `telegram-menu-button` for a permanent one.
84
107
 
85
108
  Verify `initData` server-side before trusting a single field of it: the `hash` parameter is an
86
109
  HMAC-SHA-256 of the data-check-string, keyed by the HMAC-SHA-256 of the bot token with the constant
@@ -89,15 +112,128 @@ implementation on this install is the field sheet's route; read it rather than w
89
112
 
90
113
  ### 5. Sending a file
91
114
 
92
- `params` carries a `file_id` or an https URL as a plain string. A local file goes in `files`, which
93
- switches the request to multipart:
115
+ `telegram-media-send` reaches Telegram all three documented ways, and you say which by which field
116
+ you fill. Exactly one of the three, never two:
117
+
118
+ ```
119
+ telegram-media-send botId=<id> chatId=<chat> kind=photo filePath="/abs/path/before.jpg"
120
+ caption="Before"
121
+ telegram-media-send botId=<id> chatId=<chat> kind=photo fileId=<file_id from an earlier message>
122
+ telegram-media-send botId=<id> chatId=<chat> kind=document url="https://example.com/spec.pdf"
123
+ ```
124
+
125
+ A `file_id` Telegram gave you earlier is always cheaper than re-uploading the same bytes. A URL has
126
+ Telegram fetch the file itself, so the bytes never leave the origin through us.
127
+
128
+ An album is 2 to 10 items and mixes the three freely; any local path in it sends the whole album as
129
+ one multipart request:
130
+
131
+ ```
132
+ telegram-media-send botId=<id> chatId=<chat> kind=group
133
+ items=[{type:"photo", filePath:"/abs/1.jpg", caption:"Before"},
134
+ {type:"photo", filePath:"/abs/2.jpg"},
135
+ {type:"photo", fileId:<file_id>}]
136
+ ```
137
+
138
+ `editCaption` changes a caption in place and `editMedia` swaps the file itself, which needs
139
+ `mediaType` because Telegram's media object carries its own type where a send method's name supplies
140
+ it. One exception worth knowing: Telegram does not accept a video note by URL, so `kind=videoNote`
141
+ with `url` is refused here rather than 400ing on the wire.
142
+
143
+ ### 6. Reading a file someone sent you
144
+
145
+ Files attached to an inbound message are already downloaded and their paths are on the turn; just
146
+ `Read` them. `telegram-media-fetch` is for a `file_id` you learned about later:
147
+
148
+ ```
149
+ telegram-media-fetch botId=<id> fileId=<file_id from the message>
150
+ ```
151
+
152
+ It saves to `/tmp/maxy-media` and returns the absolute path. Telegram's `getFile` refuses above
153
+ 20 MB and says so; that refusal is relayed to you verbatim.
154
+
155
+ ### 7. A thread per job
156
+
157
+ `telegram-thread` creates a forum topic, so one chat carries a separate thread per job:
94
158
 
95
159
  ```
96
- telegram-api botId=<id> method=sendPhoto
97
- params={chat_id:<chat>, caption:"Before"} files={photo:"/abs/path/before.jpg"}
160
+ telegram-thread botId=<id> chatId=<chat> action=create name="Job 4102"
161
+ telegram-thread botId=<id> chatId=<chat> action=close messageThreadId=<id create returned>
98
162
  ```
99
163
 
100
- A `file_id` Telegram gave you earlier is always cheaper than re-uploading the same bytes.
164
+ Telegram allows a topic in a forum supergroup **or in a private chat with a user**. The private-chat
165
+ form needs forum topic mode enabled on the bot: `sendMessage`'s `message_thread_id` is documented as
166
+ working "for forum supergroups and private chats of bots with forum topic mode enabled only", so
167
+ without it the topic exists and nothing can be sent into it.
168
+
169
+ ### 8. Asking a question, or sending a place
170
+
171
+ `telegram-ask` covers the structured sends. A poll takes its answers as plain strings:
172
+
173
+ ```
174
+ telegram-ask botId=<id> chatId=<chat> kind=poll question="Which slot suits?"
175
+ options=["9am","2pm","Either"]
176
+ ```
177
+
178
+ A quiz is the same call with `pollType=quiz` and `correctOptionIds`. `stopPoll` closes one you sent,
179
+ by `messageId`.
180
+
181
+ A live location is a pin that keeps moving. Send it with `livePeriod` in seconds, then move it with
182
+ `editLiveLocation` and end it with `stopLiveLocation`, both addressing the same `messageId`:
183
+
184
+ ```
185
+ telegram-ask botId=<id> chatId=<chat> kind=location latitude=51.5074 longitude=-0.1278
186
+ livePeriod=3600
187
+ telegram-ask botId=<id> chatId=<chat> kind=editLiveLocation messageId=<id> latitude=51.51
188
+ longitude=-0.13
189
+ ```
190
+
191
+ `venue`, `contact` and `dice` are one call each. The two checklist kinds need
192
+ `businessConnectionId`: Telegram sends a checklist only on behalf of a connected business account,
193
+ and refuses without it.
194
+
195
+ **A business connection and Telegram Premium are two separate gates, and they govern different
196
+ things.** Telegram states them apart, so do not treat one as the other. Bot API 9.1 (3 July 2025)
197
+ added `sendChecklist` and `editMessageChecklist` "allowing bots to send a checklist on behalf of a
198
+ business account" — that gate is the business connection, and it is the one `businessConnectionId`
199
+ carries. Bot API 9.4 (9 February 2026) allowed "custom emoji in messages directly sent by the bot to
200
+ private, group and supergroup chats if the owner of the bot has a Telegram Premium subscription" —
201
+ that gate is Premium, it is on the bot's OWNER rather than on a connection, and it governs custom
202
+ emoji, not checklists. Whether Telegram Business itself requires Premium is not stated in Telegram's
203
+ documentation, so do not tell an operator that it does or that it does not.
204
+
205
+ ### 9. Charging for something
206
+
207
+ `telegram-invoice` takes Telegram Stars with `currency=XTR` and no provider token, or a real
208
+ currency through a token from BotFather. Amounts are whole numbers in the currency's smallest unit,
209
+ so £4.50 is 450 and a 500-star price is 500.
210
+
211
+ ```
212
+ telegram-invoice botId=<id> action=send chatId=<chat> title="Emergency callout"
213
+ description="Same-day attendance, first hour" payload="job-4102" currency="XTR"
214
+ prices=[{label:"Callout", amount:500}]
215
+ ```
216
+
217
+ `action=link` returns a payable URL instead of posting into a chat, which is what you want for a
218
+ link you paste somewhere else. Don't pass buttons: Telegram requires the first button of an invoice
219
+ keyboard to be a Pay button, and leaving the keyboard off gets that button for free.
220
+
221
+ `payload` is your own reference. It is never shown to the payer and it comes back on the
222
+ successful-payment update, which is how a payment is matched to a job.
223
+
224
+ Set `isFlexible` and Telegram sends a shipping query mid-checkout; answer it with
225
+ `action=answerShipping`, and answer the pre-checkout query that follows within ten seconds with
226
+ `action=answerPreCheckout`. `ok=false` on either needs `errorMessage`, which Telegram shows the
227
+ payer verbatim. `balance`, `transactions`, `refund` and `editSubscription` are the Stars controls.
228
+
229
+ ### Ephemeral messages
230
+
231
+ There is no `sendEphemeralMessage`. Ephemerality is a parameter, not a method: Bot API 10.2 added
232
+ `receiver_user_id` and `callback_query_id` to `sendMessage`, `sendPhoto`, `sendDocument` and ten
233
+ other send methods. The resulting message has `message_id: 0` and carries its identity in
234
+ `ephemeral_message_id`, which is what `editEphemeralMessageText` and `deleteEphemeralMessage`
235
+ address. Send one through `telegram-api`; no named tool covers it, because nothing on this install
236
+ sends group messages visible to a single user.
101
237
 
102
238
  ## Reading the method list
103
239
 
@@ -108,3 +244,17 @@ is what exists, not what each one takes.
108
244
 
109
245
  A method absent from that list is still relayed, so a method Telegram adds after this list was taken
110
246
  works without waiting for a release here. `telegram-api-census` is what reports the gap.
247
+
248
+ ### What stays in the passthrough, and why
249
+
250
+ Named tools own the conversation, structured-input, media-in, media-out, payments and threading
251
+ buckets: 39 methods in all. These stay on `telegram-api` deliberately, because they are config-time
252
+ rather than per-turn: membership (23 methods), business-account (12), bot-self-config (19, including
253
+ the four managed-bot token methods), org-verification (4) and chat-cosmetic (6).
254
+
255
+ These are out of scope for this install altogether and will not get a tool: stickers (16),
256
+ gifts and stars (12), transport (6), games (3), passport (1).
257
+
258
+ A handful of fields on owned methods are not exposed by their tool, because nothing here sets them:
259
+ message entities, thumbnails, suggested-post parameters, message effects, provider data, and the
260
+ per-message ephemeral parameters. Reach those through `telegram-api`, naming the method directly.
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env bash
2
+ # Task 2545 — a hook registered on a literal tool-name matcher in
3
+ # account-settings.json must name that tool in its own dispatch.
4
+ #
5
+ # Three hooks were registered on a matcher they sent straight to a catch-all
6
+ # unread, so the fences they enforce were reachable by choosing the other write
7
+ # tool. The registration side cannot see it: the reconcile's hookRegistration
8
+ # audit checks that a hook IS registered for a matcher, never that it reads it.
9
+ #
10
+ # The rule: a hook that gates on an explicit set of LITERAL tool names must
11
+ # carry, in that set, every literal matcher it is registered on.
12
+ #
13
+ # - A matcher is literal when it is one tool name with no regex metacharacter.
14
+ # An alternation matcher is split on `|` and each literal part checked.
15
+ # Regex matchers and matcher-less entries name no tool, so they are skipped.
16
+ # - A hook's literal set is read from four constructs: bash
17
+ # `case "$TOOL_NAME" in <arms>`, bash `[ "$TOOL_NAME" = "X" ]` and `!=`,
18
+ # embedded-python `== "X"` / `!= "X"` against tool_name, and embedded-python
19
+ # `in` / `not in ("A", "B")`. A case arm carrying a glob is not a literal.
20
+ # - A hook whose set comes out empty gates on no literal set at all: it either
21
+ # matches by suffix or reads the name only to log it, so it acts on whatever
22
+ # it is registered for and there is nothing here to compare. Skipped.
23
+ #
24
+ # Comments are stripped before the scan. A tool name in a header paragraph is
25
+ # prose, not dispatch, and counting it would report green on a hook that still
26
+ # exits 0 unread.
27
+ #
28
+ # The pair count and the pin below exist because a check that passes on a zero
29
+ # count cannot tell healthy from not-measuring: a refactor that made every hook
30
+ # unparseable would otherwise report success having compared nothing.
31
+ set -uo pipefail
32
+ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
33
+ PLATFORM="$DIR/../.."
34
+ SETTINGS="$PLATFORM/templates/account-settings.json"
35
+ [ -f "$SETTINGS" ] || { echo "FAIL: $SETTINGS is missing" >&2; exit 1; }
36
+
37
+ python3 - "$SETTINGS" "$PLATFORM" <<'PY'
38
+ import json, os, re, sys
39
+
40
+ settings_path, platform_root = sys.argv[1], sys.argv[2]
41
+ settings = json.load(open(settings_path, encoding="utf-8"))
42
+
43
+ LITERAL = re.compile(r"\A[A-Za-z0-9_-]+\Z")
44
+ # The one hook this check was written for. If a refactor makes its dispatch
45
+ # unreadable to the parser below, coverage is lost silently; this pin says so.
46
+ PINNED = "fs-schema-guard.sh"
47
+
48
+
49
+ def strip_comments(src):
50
+ keep = []
51
+ for line in src.splitlines():
52
+ s = line.lstrip()
53
+ keep.append("" if s.startswith("#") or s.startswith("//") else line)
54
+ return "\n".join(keep)
55
+
56
+
57
+ def tool_case_blocks(src):
58
+ """Body text of every `case "$TOOL_NAME" in` block, depth-counted so a nested
59
+ case on a different variable cannot end the scan at the wrong esac."""
60
+ blocks = []
61
+ for m in re.finditer(r'case\s+"\$TOOL_NAME"\s+in', src):
62
+ start, depth, end = m.end(), 1, len(src)
63
+ for t in re.finditer(r"\bcase\b|\besac\b", src[start:]):
64
+ depth += 1 if t.group() == "case" else -1
65
+ if depth == 0:
66
+ end = start + t.start()
67
+ break
68
+ blocks.append(src[start:end])
69
+ return blocks
70
+
71
+
72
+ def literal_tool_names(src):
73
+ """Every literal tool name the source gates on. Empty means it gates on no
74
+ literal set."""
75
+ names = set()
76
+
77
+ def add(word):
78
+ w = word.strip().strip('"').strip("'")
79
+ if LITERAL.match(w):
80
+ names.add(w)
81
+
82
+ for block in tool_case_blocks(src):
83
+ for arm in re.finditer(r"(?:\A|;;)\s*\(?\s*([^()\n;]+?)\)", block):
84
+ for part in arm.group(1).split("|"):
85
+ add(part)
86
+
87
+ for m in re.finditer(r'"\$TOOL_NAME"\s*(?:!=|==|=)\s*"?([A-Za-z0-9_-]+)"?', src):
88
+ add(m.group(1))
89
+
90
+ for line in src.splitlines():
91
+ if "tool_name" not in line:
92
+ continue
93
+ for m in re.finditer(r'tool_name.*?(?:==|!=)\s*"([^"]+)"', line):
94
+ add(m.group(1))
95
+ for m in re.finditer(r"tool_name.*?\b(?:not\s+in|in)\s*\(([^)]*)\)", line):
96
+ for q in re.findall(r'"([^"]*)"', m.group(1)):
97
+ add(q)
98
+ return names
99
+
100
+
101
+ def literal_matchers(matcher):
102
+ """Literal tool names a matcher string names. A regex part names none."""
103
+ if not matcher:
104
+ return []
105
+ return [p for p in matcher.split("|") if LITERAL.match(p)]
106
+
107
+
108
+ sources = {}
109
+ pairs = 0
110
+ skipped_hooks = set()
111
+ failures = []
112
+
113
+ for event, entries in settings.get("hooks", {}).items():
114
+ for entry in entries:
115
+ tools = literal_matchers(entry.get("matcher", ""))
116
+ if not tools:
117
+ continue
118
+ for hook in entry.get("hooks", []):
119
+ cmd = hook.get("command", "")
120
+ m = re.search(r"\$PLATFORM_ROOT/(\S+)", cmd)
121
+ if not m:
122
+ continue
123
+ rel = m.group(1)
124
+ path = os.path.join(platform_root, rel)
125
+ name = os.path.basename(rel)
126
+ # Keyed on the path, not the basename: two plugins may each ship a
127
+ # hook of the same name, and reusing one's parsed set for the other
128
+ # would report on a file that was never read.
129
+ if rel not in sources:
130
+ try:
131
+ sources[rel] = literal_tool_names(
132
+ strip_comments(open(path, encoding="utf-8").read())
133
+ )
134
+ except OSError:
135
+ failures.append(f"{name}: registered in {event} but not readable at {path}")
136
+ sources[rel] = set()
137
+ gated = sources[rel]
138
+ if not gated:
139
+ skipped_hooks.add(rel)
140
+ continue
141
+ for tool in tools:
142
+ pairs += 1
143
+ if tool not in gated:
144
+ failures.append(
145
+ f"{name}: registered on {event} matcher '{tool}' but its dispatch "
146
+ f"names only {sorted(gated)} — every '{tool}' reaches the catch-all unread"
147
+ )
148
+
149
+ for f in failures:
150
+ print(f"FAIL: {f}", file=sys.stderr)
151
+
152
+ print(f"[hook-matcher-dispatch] pairs={pairs} literal-set-hooks={len(sources) - len(skipped_hooks)} "
153
+ f"skipped={len(skipped_hooks)} failures={len(failures)}")
154
+
155
+ if pairs == 0:
156
+ print("FAIL: no (hook, matcher) pair was compared — the parser reads nothing", file=sys.stderr)
157
+ sys.exit(1)
158
+ compared = {os.path.basename(r) for r in sources if r not in skipped_hooks}
159
+ if PINNED not in compared:
160
+ print(f"FAIL: {PINNED} was not compared against any matcher — coverage lost", file=sys.stderr)
161
+ sys.exit(1)
162
+ sys.exit(1 if failures else 0)
163
+ PY
@@ -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,EA2B7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EA6WtD,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,EA2B7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAmXtD,CAAA"}
@@ -353,11 +353,17 @@ export const CANONICAL_MAXY_TOOL_NAMES = [
353
353
  "mcp__plugin_storage-broker_storage-broker__storage-r2-object-get",
354
354
  "mcp__plugin_storage-broker_storage-broker__storage-r2-object-list",
355
355
  "mcp__plugin_storage-broker_storage-broker__storage-r2-object-put",
356
- "mcp__plugin_telegram_telegram__message",
357
356
  "mcp__plugin_telegram_telegram__message-history",
358
357
  "mcp__plugin_telegram_telegram__telegram-api",
359
358
  "mcp__plugin_telegram_telegram__telegram-api-census",
359
+ "mcp__plugin_telegram_telegram__telegram-ask",
360
+ "mcp__plugin_telegram_telegram__telegram-card",
361
+ "mcp__plugin_telegram_telegram__telegram-invoice",
362
+ "mcp__plugin_telegram_telegram__telegram-live-location",
363
+ "mcp__plugin_telegram_telegram__telegram-media-fetch",
364
+ "mcp__plugin_telegram_telegram__telegram-media-send",
360
365
  "mcp__plugin_telegram_telegram__telegram-menu-button",
366
+ "mcp__plugin_telegram_telegram__telegram-thread",
361
367
  "mcp__plugin_telegram_telegram__telegram-webhook-register",
362
368
  "mcp__plugin_url-get_url-get__url-get",
363
369
  "mcp__plugin_voice-mirror_voice-mirror__voice-distil-profile",
@@ -1 +1 @@
1
- {"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,kEAAkE;AAClE,yDAAyD;AACzD,kFAAkF;AAClF,EAAE;AACF,yEAAyE;AACzE,6DAA6D;AAE7D,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,OAAO;IACP,KAAK;IACL,SAAS;IACT,WAAW;IACX,UAAU;IACV,UAAU;IACV,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,OAAO;IACP,cAAc;IACd,WAAW;IACX,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,gBAAgB;IAChB,UAAU;IACV,SAAS;IACT,cAAc;IACd,UAAU;IACV,MAAM;IACN,WAAW;CACZ,CAAA;AAED,gEAAgE;AAChE,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,yCAAyC;IACzC,yCAAyC;IACzC,kDAAkD;IAClD,sDAAsD;IACtD,yCAAyC;IACzC,yCAAyC;IACzC,uCAAuC;IACvC,wCAAwC;IACxC,iDAAiD;IACjD,yCAAyC;IACzC,iDAAiD;IACjD,yCAAyC;IACzC,sCAAsC;IACtC,yCAAyC;IACzC,wCAAwC;IACxC,oCAAoC;IACpC,qCAAqC;IACrC,yCAAyC;IACzC,qCAAqC;IACrC,uCAAuC;IACvC,2CAA2C;IAC3C,4CAA4C;IAC5C,uCAAuC;IACvC,uCAAuC;IACvC,sCAAsC;IACtC,qCAAqC;IACrC,uCAAuC;IACvC,yCAAyC;IACzC,4CAA4C;IAC5C,0CAA0C;IAC1C,2CAA2C;IAC3C,gDAAgD;IAChD,oCAAoC;IACpC,sCAAsC;IACtC,gDAAgD;IAChD,0CAA0C;IAC1C,uCAAuC;IACvC,0CAA0C;IAC1C,uCAAuC;IACvC,sCAAsC;IACtC,sDAAsD;IACtD,mDAAmD;IACnD,6CAA6C;IAC7C,wCAAwC;IACxC,yCAAyC;IACzC,qCAAqC;IACrC,qCAAqC;IACrC,uCAAuC;IACvC,sCAAsC;IACtC,wCAAwC;IACxC,+BAA+B;IAC/B,qCAAqC;IACrC,sCAAsC;IACtC,yCAAyC;IACzC,4CAA4C;IAC5C,uDAAuD;IACvD,+CAA+C;IAC/C,2CAA2C;IAC3C,gDAAgD;IAChD,oDAAoD;IACpD,4CAA4C;IAC5C,+CAA+C;IAC/C,+CAA+C;IAC/C,gDAAgD;IAChD,6CAA6C;IAC7C,6CAA6C;IAC7C,iDAAiD;IACjD,oDAAoD;IACpD,+CAA+C;IAC/C,2CAA2C;IAC3C,2CAA2C;IAC3C,+CAA+C;IAC/C,iDAAiD;IACjD,uDAAuD;IACvD,iDAAiD;IACjD,qDAAqD;IACrD,+CAA+C;IAC/C,+CAA+C;IAC/C,8CAA8C;IAC9C,+CAA+C;IAC/C,6CAA6C;IAC7C,+CAA+C;IAC/C,+CAA+C;IAC/C,6CAA6C;IAC7C,6CAA6C;IAC7C,kDAAkD;IAClD,6DAA6D;IAC7D,oDAAoD;IACpD,6CAA6C;IAC7C,uDAAuD;IACvD,sDAAsD;IACtD,qDAAqD;IACrD,oDAAoD;IACpD,iDAAiD;IACjD,kDAAkD;IAClD,uDAAuD;IACvD,sDAAsD;IACtD,2DAA2D;IAC3D,qDAAqD;IACrD,sDAAsD;IACtD,0DAA0D;IAC1D,uCAAuC;IACvC,sCAAsC;IACtC,2CAA2C;IAC3C,2CAA2C;IAC3C,2CAA2C;IAC3C,sCAAsC;IACtC,iDAAiD;IACjD,2CAA2C;IAC3C,4CAA4C;IAC5C,uCAAuC;IACvC,4CAA4C;IAC5C,8CAA8C;IAC9C,qCAAqC;IACrC,sCAAsC;IACtC,uCAAuC;IACvC,qCAAqC;IACrC,qDAAqD;IACrD,sCAAsC;IACtC,8CAA8C;IAC9C,uCAAuC;IACvC,8CAA8C;IAC9C,8CAA8C;IAC9C,8CAA8C;IAC9C,8CAA8C;IAC9C,8CAA8C;IAC9C,+CAA+C;IAC/C,gDAAgD;IAChD,gDAAgD;IAChD,oDAAoD;IACpD,yDAAyD;IACzD,2DAA2D;IAC3D,mDAAmD;IACnD,mDAAmD;IACnD,kDAAkD;IAClD,qDAAqD;IACrD,iDAAiD;IACjD,oDAAoD;IACpD,mDAAmD;IACnD,qDAAqD;IACrD,sDAAsD;IACtD,uDAAuD;IACvD,wDAAwD;IACxD,0DAA0D;IAC1D,qDAAqD;IACrD,uDAAuD;IACvD,kEAAkE;IAClE,2DAA2D;IAC3D,yDAAyD;IACzD,+DAA+D;IAC/D,sDAAsD;IACtD,mDAAmD;IACnD,oDAAoD;IACpD,sDAAsD;IACtD,iEAAiE;IACjE,2DAA2D;IAC3D,yDAAyD;IACzD,yDAAyD;IACzD,sDAAsD;IACtD,uDAAuD;IACvD,yDAAyD;IACzD,sDAAsD;IACtD,uDAAuD;IACvD,2DAA2D;IAC3D,0DAA0D;IAC1D,wDAAwD;IACxD,qDAAqD;IACrD,sDAAsD;IACtD,gEAAgE;IAChE,qDAAqD;IACrD,oDAAoD;IACpD,iDAAiD;IACjD,kDAAkD;IAClD,wDAAwD;IACxD,oDAAoD;IACpD,wDAAwD;IACxD,wDAAwD;IACxD,qDAAqD;IACrD,uDAAuD;IACvD,sDAAsD;IACtD,mDAAmD;IACnD,oDAAoD;IACpD,qDAAqD;IACrD,kDAAkD;IAClD,mDAAmD;IACnD,qDAAqD;IACrD,0DAA0D;IAC1D,wDAAwD;IACxD,0DAA0D;IAC1D,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,mDAAmD;IACnD,8DAA8D;IAC9D,sDAAsD;IACtD,2CAA2C;IAC3C,+CAA+C;IAC/C,iDAAiD;IACjD,kDAAkD;IAClD,kDAAkD;IAClD,6CAA6C;IAC7C,6CAA6C;IAC7C,iEAAiE;IACjE,kEAAkE;IAClE,6DAA6D;IAC7D,8CAA8C;IAC9C,wDAAwD;IACxD,gDAAgD;IAChD,qDAAqD;IACrD,sDAAsD;IACtD,wDAAwD;IACxD,wCAAwC;IACxC,wCAAwC;IACxC,6CAA6C;IAC7C,6CAA6C;IAC7C,2CAA2C;IAC3C,iDAAiD;IACjD,wDAAwD;IACxD,0DAA0D;IAC1D,0CAA0C;IAC1C,6CAA6C;IAC7C,wCAAwC;IACxC,mDAAmD;IACnD,+CAA+C;IAC/C,mDAAmD;IACnD,0CAA0C;IAC1C,kDAAkD;IAClD,8CAA8C;IAC9C,oDAAoD;IACpD,kDAAkD;IAClD,+CAA+C;IAC/C,mDAAmD;IACnD,2CAA2C;IAC3C,qDAAqD;IACrD,+CAA+C;IAC/C,sDAAsD;IACtD,gDAAgD;IAChD,2CAA2C;IAC3C,gDAAgD;IAChD,0CAA0C;IAC1C,0CAA0C;IAC1C,kDAAkD;IAClD,yCAAyC;IACzC,kDAAkD;IAClD,2CAA2C;IAC3C,yCAAyC;IACzC,2CAA2C;IAC3C,4CAA4C;IAC5C,mDAAmD;IACnD,uDAAuD;IACvD,4DAA4D;IAC5D,sDAAsD;IACtD,sDAAsD;IACtD,qDAAqD;IACrD,wDAAwD;IACxD,oDAAoD;IACpD,uDAAuD;IACvD,sDAAsD;IACtD,oDAAoD;IACpD,4CAA4C;IAC5C,iDAAiD;IACjD,iDAAiD;IACjD,sDAAsD;IACtD,kDAAkD;IAClD,sDAAsD;IACtD,kDAAkD;IAClD,gDAAgD;IAChD,uDAAuD;IACvD,iDAAiD;IACjD,kDAAkD;IAClD,gDAAgD;IAChD,mDAAmD;IACnD,mDAAmD;IACnD,yDAAyD;IACzD,4DAA4D;IAC5D,6DAA6D;IAC7D,2DAA2D;IAC3D,2DAA2D;IAC3D,+DAA+D;IAC/D,+DAA+D;IAC/D,+DAA+D;IAC/D,0DAA0D;IAC1D,6DAA6D;IAC7D,6DAA6D;IAC7D,8DAA8D;IAC9D,8DAA8D;IAC9D,8DAA8D;IAC9D,qDAAqD;IACrD,sDAAsD;IACtD,2DAA2D;IAC3D,iDAAiD;IACjD,sDAAsD;IACtD,uDAAuD;IACvD,yDAAyD;IACzD,oDAAoD;IACpD,iEAAiE;IACjE,mDAAmD;IACnD,wDAAwD;IACxD,iDAAiD;IACjD,wDAAwD;IACxD,kDAAkD;IAClD,kDAAkD;IAClD,oDAAoD;IACpD,oDAAoD;IACpD,iDAAiD;IACjD,8DAA8D;IAC9D,4DAA4D;IAC5D,6DAA6D;IAC7D,gEAAgE;IAChE,iEAAiE;IACjE,iEAAiE;IACjE,qEAAqE;IACrE,mEAAmE;IACnE,qEAAqE;IACrE,kEAAkE;IAClE,mEAAmE;IACnE,kEAAkE;IAClE,wCAAwC;IACxC,gDAAgD;IAChD,6CAA6C;IAC7C,oDAAoD;IACpD,qDAAqD;IACrD,0DAA0D;IAC1D,sCAAsC;IACtC,6DAA6D;IAC7D,kEAAkE;IAClE,8DAA8D;IAC9D,oEAAoE;IACpE,0DAA0D;IAC1D,kDAAkD;IAClD,gDAAgD;IAChD,kEAAkE;IAClE,uDAAuD;IACvD,oDAAoD;IACpD,oDAAoD;IACpD,qDAAqD;IACrD,oDAAoD;IACpD,kDAAkD;IAClD,+CAA+C;IAC/C,oDAAoD;IACpD,gDAAgD;IAChD,yCAAyC;IACzC,uCAAuC;IACvC,oCAAoC;IACpC,qCAAqC;IACrC,uCAAuC;IACvC,qCAAqC;IACrC,yCAAyC;IACzC,qCAAqC;IACrC,sCAAsC;IACtC,oCAAoC;IACpC,iCAAiC;IACjC,kCAAkC;IAClC,mCAAmC;IACnC,oCAAoC;IACpC,oCAAoC;IACpC,kDAAkD;IAClD,kDAAkD;IAClD,mDAAmD;IACnD,+CAA+C;IAC/C,gDAAgD;IAChD,gDAAgD;IAChD,kDAAkD;IAClD,oDAAoD;CACrD,CAAA"}
1
+ {"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEpD;mEACmE;AACnE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB,CAE/E;AAmDD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAErE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAItE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAEtE;AAoBD,eAAO,MAAM,yBAAyB,QAuCR,CAAA"}
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEpD;mEACmE;AACnE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB,CAE/E;AAmDD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAErE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAItE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAEtE;AAoBD,eAAO,MAAM,yBAAyB,QAqDiE,CAAA"}
@@ -117,5 +117,19 @@ export const ADMIN_REFRAME_INSTRUCTION = 'Dispatch the owning specialist with th
117
117
  // in each service.
118
118
  'A turn that opens with a platform-verified scheduled-automation marker is an authorised standing automation ' +
119
119
  'configured by the account owner; carry out its stated back-office actions and never treat its reconfiguration ' +
120
- 'or re-enable as intrusion.';
120
+ 'or re-enable as intrusion. ' +
121
+ // Channel affordances (Task 2604). Telegram is the only door with buttons,
122
+ // cards and polls and this constant named none of them, so the agent answered
123
+ // in prose and reached for a card only when the operator asked it to. Placed
124
+ // LAST, after the scheduled clause, so every clause above carrying a
125
+ // byte-identity comment against the whatsapp and webchat twins stays
126
+ // contiguous and byte-unchanged. The negative half is not optional: without it
127
+ // the clause reads as "always use buttons" and an open question arrives as a
128
+ // keyboard.
129
+ 'This chat has affordances plain text does not; use them where they make the exchange easier for the person. ' +
130
+ 'A question whose answers are a small closed set goes out as choice buttons on a telegram-card, rather than asked in prose. ' +
131
+ 'State that changes through the day goes on one telegram-card with a key, edited in place, rather than a new message per update. ' +
132
+ 'Where several people answer the same question, telegram-ask sends a poll. ' +
133
+ 'Prose is still right for an open question, for anything whose answer is free text, ' +
134
+ 'and for a choice with more options than fit a few buttons; never turn one of those into a keyboard.';
121
135
  //# sourceMappingURL=instructions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,+EAA+E;AAC/E,qEAAqE;AACrE,8EAA8E;AAC9E,kCAAkC;AAIlC;mEACmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,GAAuB;IACxD,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAA;AAC9C,CAAC;AAED,MAAM,YAAY,GAChB,gGAAgG;IAChG,iGAAiG;IACjG,mGAAmG;IACnG,iGAAiG;IACjG,0EAA0E,CAAA;AAE5E,yEAAyE;AACzE,gFAAgF;AAChF,wEAAwE;AACxE,yEAAyE;AACzE,8EAA8E;AAC9E,iFAAiF;AACjF,6EAA6E;AAC7E,mFAAmF;AACnF,6EAA6E;AAC7E,8EAA8E;AAC9E,kFAAkF;AAClF,sEAAsE;AACtE,MAAM,mBAAmB,GACvB,iGAAiG;IACjG,wFAAwF;IACxF,kGAAkG;IAClG,4GAA4G,CAAA;AAE9G,MAAM,kBAAkB,GACtB,mBAAmB;IACnB,iEAAiE;IACjE,mGAAmG;IACnG,+FAA+F;IAC/F,8FAA8F;IAC9F,kGAAkG;IAClG,2FAA2F;IAC3F,yFAAyF;IACzF,0FAA0F;IAC1F,yFAAyF;IACzF,YAAY,CAAA;AAEd,MAAM,mBAAmB,GACvB,mBAAmB;IACnB,uEAAuE;IACvE,oGAAoG;IACpG,iGAAiG;IACjG,4FAA4F;IAC5F,6FAA6F;IAC7F,6FAA6F;IAC7F,+DAA+D;IAC/D,YAAY,CAAA;AAEd,MAAM,UAAU,mBAAmB,CAAC,IAAyB;IAC3D,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAyB;IAC5D,OAAO,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC,2EAA2E;QAC7E,CAAC,CAAC,2EAA2E,CAAA;AACjF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAyB;IAC5D,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,qCAAqC,CAAA;AACzG,CAAC;AAED,gFAAgF;AAChF,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,EAAE;AACF,2EAA2E;AAC3E,iFAAiF;AACjF,kFAAkF;AAClF,wDAAwD;AACxD,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,+EAA+E;AAC/E,sEAAsE;AACtE,4EAA4E;AAC5E,kDAAkD;AAClD,EAAE;AACF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,yBAAyB,GACpC,sDAAsD;IACtD,8NAA8N;IAC9N,8EAA8E;IAC9E,2FAA2F;IAC3F,mEAAmE;IACnE,sGAAsG;IACtG,oHAAoH;IACpH,yEAAyE;IACzE,yEAAyE;IACzE,uEAAuE;IACvE,6EAA6E;IAC7E,wBAAwB;IACxB,uFAAuF;IACvF,0EAA0E;IAC1E,8EAA8E;IAC9E,4EAA4E;IAC5E,4EAA4E;IAC5E,gBAAgB;IAChB,sFAAsF;IACtF,6FAA6F;IAC7F,+EAA+E;IAC/E,wEAAwE;IACxE,sBAAsB;IACtB,uGAAuG;IACvG,8EAA8E;IAC9E,0EAA0E;IAC1E,uGAAuG;IACvG,iDAAiD;IACjD,gFAAgF;IAChF,mFAAmF;IACnF,oHAAoH;IACpH,yBAAyB;IACzB,+EAA+E;IAC/E,iFAAiF;IACjF,iFAAiF;IACjF,mBAAmB;IACnB,8GAA8G;IAC9G,gHAAgH;IAChH,4BAA4B,CAAA"}
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ name: personal-assistant
3
3
  description: "Platform settings, messaging channels (Telegram, WhatsApp, email, Outlook), and browser automation, plus mechanical calendar subtasks you hand it with the facts already resolved (export these event IDs to .ics, parse this inbound .ics). Delegate when the work is configuring the platform, sending or reading messages, or driving a browser. Do not delegate calendar reasoning or an availability-affecting booking: only your admin session sees the connector-backed real calendar, so the specialist would answer from the internal scheduling store alone and miss it. You own what is on the calendar and what booking against it does."
4
4
  summary: "Handles the operational tasks you'd give a personal assistant: scheduling meetings, managing your platform settings, connecting messaging channels, and completing browser-based tasks on your behalf."
5
5
  model: claude-sonnet-5
6
- tools: Skill, mcp__plugin_admin_admin__system-status, mcp__plugin_admin_admin__brand-settings, mcp__plugin_admin_admin__account-manage, mcp__plugin_admin_admin__account-update, mcp__plugin_admin_admin__logs-read, mcp__plugin_admin_admin__plugin-read, mcp__plugin_admin_admin__wifi, mcp__plugin_contacts_contacts__contact-create, mcp__plugin_contacts_contacts__contact-lookup, mcp__plugin_contacts_contacts__contact-update, mcp__plugin_contacts_contacts__contact-delete, mcp__plugin_contacts_contacts__contact-list, mcp__plugin_contacts_contacts__contact-export, mcp__plugin_contacts_contacts__contact-erase, mcp__plugin_contacts_contacts__group-create, mcp__plugin_contacts_contacts__group-manage, mcp__plugin_telegram_telegram__message, mcp__plugin_telegram_telegram__message-history, mcp__plugin_telegram_telegram__telegram-webhook-register, mcp__plugin_whatsapp_whatsapp__whatsapp-login-start, mcp__plugin_whatsapp_whatsapp__whatsapp-login-wait, mcp__plugin_whatsapp_whatsapp__whatsapp-status, mcp__plugin_whatsapp_whatsapp__whatsapp-disconnect, mcp__plugin_whatsapp_whatsapp__whatsapp-config, mcp__plugin_whatsapp_whatsapp__whatsapp-activity, mcp__plugin_whatsapp_whatsapp__whatsapp-conversations, mcp__plugin_whatsapp_whatsapp__whatsapp-messages, mcp__plugin_whatsapp_whatsapp__whatsapp-conversation-graph-state, mcp__plugin_whatsapp_whatsapp__whatsapp-group-info, mcp__plugin_whatsapp_whatsapp__whatsapp-send-admin, mcp__plugin_whatsapp_whatsapp__whatsapp-reply, mcp__plugin_email_email__email-provider-info, mcp__plugin_email_email__email-setup, mcp__plugin_email_email__email-signature-set, mcp__plugin_email_email__email-sending-identity-set, mcp__plugin_email_email__email-read, mcp__plugin_email_email__email-fetch-body, mcp__plugin_email_email__email-fetch-attachment, mcp__plugin_email_email__email-send, mcp__plugin_email_email__email-draft, mcp__plugin_email_email__email-draft-edit, mcp__plugin_email_email__email-draft-send, mcp__plugin_email_email__email-draft-list, mcp__plugin_email_email__email-reply, mcp__plugin_email_email__email-search, mcp__plugin_email_email__email-delete, mcp__plugin_email_email__email-graph-query, mcp__plugin_email_email__email-otp-extract, mcp__plugin_email_email__email-status, mcp__plugin_email_email__email-fetch, mcp__plugin_email_email__email-ingest, mcp__plugin_outlook_outlook__outlook-account-register, mcp__plugin_outlook_outlook__outlook-account-register-poll, mcp__plugin_outlook_outlook__outlook-mail-list, mcp__plugin_outlook_outlook__outlook-mail-search, mcp__plugin_outlook_outlook__outlook-mail-fetch-body, mcp__plugin_outlook_outlook__outlook-mail-attachment, mcp__plugin_outlook_outlook__outlook-mail-reply, mcp__plugin_outlook_outlook__outlook-mail-delete, mcp__plugin_outlook_outlook__outlook-mail-ingest, mcp__plugin_outlook_outlook__outlook-mail-otp-extract, mcp__plugin_outlook_outlook__outlook-mail-send, mcp__plugin_outlook_outlook__outlook-draft, mcp__plugin_outlook_outlook__outlook-draft-edit, mcp__plugin_outlook_outlook__outlook-draft-send, mcp__plugin_outlook_outlook__outlook-calendar-list, mcp__plugin_outlook_outlook__outlook-calendar-event, mcp__plugin_outlook_outlook__outlook-calendar-create, mcp__plugin_outlook_outlook__outlook-calendar-update, mcp__plugin_outlook_outlook__outlook-calendar-cancel, mcp__plugin_outlook_outlook__outlook-calendar-respond, mcp__plugin_outlook_outlook__outlook-calendar-freebusy, mcp__plugin_outlook_outlook__outlook-contacts-list, mcp__plugin_outlook_outlook__outlook-mailbox-info, mcp__plugin_outlook_outlook__outlook-mailbox-list, mcp__plugin_outlook_outlook__outlook-shared-mailbox-add, mcp__plugin_outlook_outlook__outlook-shared-mailbox-remove, mcp__plugin_google_google__google-account-register, mcp__plugin_google_google__google-account-register-poll, mcp__plugin_google_google__google-account-register-submit, mcp__plugin_google_google__google-calendar-list, mcp__plugin_google_google__google-calendar-event, mcp__plugin_google_google__google-calendar-create, mcp__plugin_google_google__google-calendar-update, mcp__plugin_google_google__google-calendar-cancel, mcp__plugin_google_google__google-calendar-respond, mcp__plugin_google_google__google-calendar-freebusy, mcp__plugin_google_google__google-account-info, mcp__plugin_google_google__google-account-list, mcp__plugin_scheduling_scheduling__schedule-event, mcp__plugin_scheduling_scheduling__schedule-list, mcp__plugin_scheduling_scheduling__schedule-get, mcp__plugin_scheduling_scheduling__schedule-runs, mcp__plugin_scheduling_scheduling__schedule-update, mcp__plugin_scheduling_scheduling__schedule-cancel, mcp__plugin_scheduling_scheduling__schedule-export-ics, mcp__plugin_scheduling_scheduling__schedule-import-ics, mcp__plugin_scheduling_scheduling__time-resolve, mcp__plugin_memory_memory__memory-search, mcp__plugin_memory_memory__profile-update, mcp__plugin_url-get_url-get__url-get, mcp__plugin_browser_browser__browser-render, mcp__plugin_browser_browser__browser-navigate, mcp__plugin_browser_browser__browser-snapshot, mcp__plugin_browser_browser__browser-click, mcp__plugin_browser_browser__browser-fill, mcp__plugin_browser_browser__browser-fill-form, mcp__plugin_browser_browser__browser-type, mcp__plugin_browser_browser__browser-press-key, mcp__plugin_browser_browser__browser-hover, mcp__plugin_browser_browser__browser-select-option, mcp__plugin_browser_browser__browser-wait-for, mcp__plugin_browser_browser__browser-handle-dialog, mcp__plugin_browser_browser__browser-evaluate, mcp__plugin_browser_browser__browser-console-messages, mcp__plugin_browser_browser__browser-tabs, mcp__plugin_browser_browser__browser-pdf-save, mcp__plugin_browser_browser__browser-screenshot, mcp__plugin_browser_browser__browser-resize
6
+ tools: Skill, mcp__plugin_admin_admin__system-status, mcp__plugin_admin_admin__brand-settings, mcp__plugin_admin_admin__account-manage, mcp__plugin_admin_admin__account-update, mcp__plugin_admin_admin__logs-read, mcp__plugin_admin_admin__plugin-read, mcp__plugin_admin_admin__wifi, mcp__plugin_contacts_contacts__contact-create, mcp__plugin_contacts_contacts__contact-lookup, mcp__plugin_contacts_contacts__contact-update, mcp__plugin_contacts_contacts__contact-delete, mcp__plugin_contacts_contacts__contact-list, mcp__plugin_contacts_contacts__contact-export, mcp__plugin_contacts_contacts__contact-erase, mcp__plugin_contacts_contacts__group-create, mcp__plugin_contacts_contacts__group-manage, mcp__plugin_telegram_telegram__telegram-card, mcp__plugin_telegram_telegram__message-history, mcp__plugin_telegram_telegram__telegram-live-location, mcp__plugin_telegram_telegram__telegram-webhook-register, mcp__plugin_whatsapp_whatsapp__whatsapp-login-start, mcp__plugin_whatsapp_whatsapp__whatsapp-login-wait, mcp__plugin_whatsapp_whatsapp__whatsapp-status, mcp__plugin_whatsapp_whatsapp__whatsapp-disconnect, mcp__plugin_whatsapp_whatsapp__whatsapp-config, mcp__plugin_whatsapp_whatsapp__whatsapp-activity, mcp__plugin_whatsapp_whatsapp__whatsapp-conversations, mcp__plugin_whatsapp_whatsapp__whatsapp-messages, mcp__plugin_whatsapp_whatsapp__whatsapp-conversation-graph-state, mcp__plugin_whatsapp_whatsapp__whatsapp-group-info, mcp__plugin_whatsapp_whatsapp__whatsapp-send-admin, mcp__plugin_whatsapp_whatsapp__whatsapp-reply, mcp__plugin_email_email__email-provider-info, mcp__plugin_email_email__email-setup, mcp__plugin_email_email__email-signature-set, mcp__plugin_email_email__email-sending-identity-set, mcp__plugin_email_email__email-read, mcp__plugin_email_email__email-fetch-body, mcp__plugin_email_email__email-fetch-attachment, mcp__plugin_email_email__email-send, mcp__plugin_email_email__email-draft, mcp__plugin_email_email__email-draft-edit, mcp__plugin_email_email__email-draft-send, mcp__plugin_email_email__email-draft-list, mcp__plugin_email_email__email-reply, mcp__plugin_email_email__email-search, mcp__plugin_email_email__email-delete, mcp__plugin_email_email__email-graph-query, mcp__plugin_email_email__email-otp-extract, mcp__plugin_email_email__email-status, mcp__plugin_email_email__email-fetch, mcp__plugin_email_email__email-ingest, mcp__plugin_outlook_outlook__outlook-account-register, mcp__plugin_outlook_outlook__outlook-account-register-poll, mcp__plugin_outlook_outlook__outlook-mail-list, mcp__plugin_outlook_outlook__outlook-mail-search, mcp__plugin_outlook_outlook__outlook-mail-fetch-body, mcp__plugin_outlook_outlook__outlook-mail-attachment, mcp__plugin_outlook_outlook__outlook-mail-reply, mcp__plugin_outlook_outlook__outlook-mail-delete, mcp__plugin_outlook_outlook__outlook-mail-ingest, mcp__plugin_outlook_outlook__outlook-mail-otp-extract, mcp__plugin_outlook_outlook__outlook-mail-send, mcp__plugin_outlook_outlook__outlook-draft, mcp__plugin_outlook_outlook__outlook-draft-edit, mcp__plugin_outlook_outlook__outlook-draft-send, mcp__plugin_outlook_outlook__outlook-calendar-list, mcp__plugin_outlook_outlook__outlook-calendar-event, mcp__plugin_outlook_outlook__outlook-calendar-create, mcp__plugin_outlook_outlook__outlook-calendar-update, mcp__plugin_outlook_outlook__outlook-calendar-cancel, mcp__plugin_outlook_outlook__outlook-calendar-respond, mcp__plugin_outlook_outlook__outlook-calendar-freebusy, mcp__plugin_outlook_outlook__outlook-contacts-list, mcp__plugin_outlook_outlook__outlook-mailbox-info, mcp__plugin_outlook_outlook__outlook-mailbox-list, mcp__plugin_outlook_outlook__outlook-shared-mailbox-add, mcp__plugin_outlook_outlook__outlook-shared-mailbox-remove, mcp__plugin_google_google__google-account-register, mcp__plugin_google_google__google-account-register-poll, mcp__plugin_google_google__google-account-register-submit, mcp__plugin_google_google__google-calendar-list, mcp__plugin_google_google__google-calendar-event, mcp__plugin_google_google__google-calendar-create, mcp__plugin_google_google__google-calendar-update, mcp__plugin_google_google__google-calendar-cancel, mcp__plugin_google_google__google-calendar-respond, mcp__plugin_google_google__google-calendar-freebusy, mcp__plugin_google_google__google-account-info, mcp__plugin_google_google__google-account-list, mcp__plugin_scheduling_scheduling__schedule-event, mcp__plugin_scheduling_scheduling__schedule-list, mcp__plugin_scheduling_scheduling__schedule-get, mcp__plugin_scheduling_scheduling__schedule-runs, mcp__plugin_scheduling_scheduling__schedule-update, mcp__plugin_scheduling_scheduling__schedule-cancel, mcp__plugin_scheduling_scheduling__schedule-export-ics, mcp__plugin_scheduling_scheduling__schedule-import-ics, mcp__plugin_scheduling_scheduling__time-resolve, mcp__plugin_memory_memory__memory-search, mcp__plugin_memory_memory__profile-update, mcp__plugin_url-get_url-get__url-get, mcp__plugin_browser_browser__browser-render, mcp__plugin_browser_browser__browser-navigate, mcp__plugin_browser_browser__browser-snapshot, mcp__plugin_browser_browser__browser-click, mcp__plugin_browser_browser__browser-fill, mcp__plugin_browser_browser__browser-fill-form, mcp__plugin_browser_browser__browser-type, mcp__plugin_browser_browser__browser-press-key, mcp__plugin_browser_browser__browser-hover, mcp__plugin_browser_browser__browser-select-option, mcp__plugin_browser_browser__browser-wait-for, mcp__plugin_browser_browser__browser-handle-dialog, mcp__plugin_browser_browser__browser-evaluate, mcp__plugin_browser_browser__browser-console-messages, mcp__plugin_browser_browser__browser-tabs, mcp__plugin_browser_browser__browser-pdf-save, mcp__plugin_browser_browser__browser-screenshot, mcp__plugin_browser_browser__browser-resize
7
7
  pattern_deliverable: false
8
8
  ---
9
9
 
@@ -1,9 +1,8 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import {
3
- __esm
4
- } from "./chunk-KVR2FT6O.js";
2
+ import "./chunk-HYQNUVGO.js";
5
3
 
6
4
  // app/lib/adminuser-self-heal.ts
5
+ var UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
7
6
  function toNum(raw) {
8
7
  if (typeof raw === "number") return raw;
9
8
  if (raw && typeof raw.toNumber === "function") {
@@ -50,13 +49,6 @@ async function selfHealAdminUser(args) {
50
49
  await session.close();
51
50
  }
52
51
  }
53
- var UUID_REGEX;
54
- var init_adminuser_self_heal = __esm({
55
- "app/lib/adminuser-self-heal.ts"() {
56
- UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
57
- }
58
- });
59
- init_adminuser_self_heal();
60
52
  export {
61
53
  selfHealAdminUser
62
54
  };