@rubytech/create-maxy-code 0.1.582 → 0.1.584

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 (421) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/routine-templates/dist/index.d.ts +1 -1
  3. package/payload/platform/lib/routine-templates/dist/index.d.ts.map +1 -1
  4. package/payload/platform/lib/routine-templates/dist/index.js +5 -1
  5. package/payload/platform/lib/routine-templates/dist/index.js.map +1 -1
  6. package/payload/platform/lib/routine-templates/src/index.ts +4 -0
  7. package/payload/platform/lib/telegram-managed-bot/dist/index.d.ts +269 -0
  8. package/payload/platform/lib/telegram-managed-bot/dist/index.d.ts.map +1 -0
  9. package/payload/platform/lib/telegram-managed-bot/dist/index.js +351 -0
  10. package/payload/platform/lib/telegram-managed-bot/dist/index.js.map +1 -0
  11. package/payload/platform/lib/telegram-managed-bot/src/__tests__/managed-bot.test.ts +251 -0
  12. package/payload/platform/lib/telegram-managed-bot/src/index.ts +529 -0
  13. package/payload/platform/lib/telegram-managed-bot/tsconfig.json +9 -0
  14. package/payload/platform/lib/telegram-managed-bot/vitest.config.ts +9 -0
  15. package/payload/platform/lib/telegram-reach/dist/index.d.ts +86 -0
  16. package/payload/platform/lib/telegram-reach/dist/index.d.ts.map +1 -0
  17. package/payload/platform/lib/telegram-reach/dist/index.js +246 -0
  18. package/payload/platform/lib/telegram-reach/dist/index.js.map +1 -0
  19. package/payload/platform/lib/telegram-reach/src/__tests__/telegram-reach.test.ts +268 -0
  20. package/payload/platform/lib/telegram-reach/src/index.ts +296 -0
  21. package/payload/platform/lib/telegram-reach/tsconfig.json +9 -0
  22. package/payload/platform/lib/telegram-reach/vitest.config.ts +9 -0
  23. package/payload/platform/package.json +2 -2
  24. package/payload/platform/plugins/admin/PLUGIN.md +1 -1
  25. package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh +9 -0
  26. package/payload/platform/plugins/admin/hooks/__tests__/preference-consult-directive.test.sh +26 -0
  27. package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +20 -3
  28. package/payload/platform/plugins/admin/hooks/preference-consult-directive.sh +50 -5
  29. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +146 -8
  30. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +16 -0
  31. package/payload/platform/plugins/contacts/mcp/dist/__tests__/telegram-user-id.test.d.ts +2 -0
  32. package/payload/platform/plugins/contacts/mcp/dist/__tests__/telegram-user-id.test.d.ts.map +1 -0
  33. package/payload/platform/plugins/contacts/mcp/dist/__tests__/telegram-user-id.test.js +100 -0
  34. package/payload/platform/plugins/contacts/mcp/dist/__tests__/telegram-user-id.test.js.map +1 -0
  35. package/payload/platform/plugins/contacts/mcp/dist/index.js +11 -5
  36. package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -1
  37. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts +5 -0
  38. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts.map +1 -1
  39. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +21 -4
  40. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -1
  41. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts +5 -0
  42. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts.map +1 -1
  43. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js +29 -1
  44. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js.map +1 -1
  45. package/payload/platform/plugins/contacts/mcp/vitest.config.ts +14 -0
  46. package/payload/platform/plugins/docs/references/admin-ui.md +17 -3
  47. package/payload/platform/plugins/docs/references/channel-wake-and-prompt.md +15 -0
  48. package/payload/platform/plugins/docs/references/telegram-guide.md +113 -4
  49. package/payload/platform/plugins/filesystem/PLUGIN.md +2 -2
  50. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/account-schema.test.d.ts +2 -0
  51. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/account-schema.test.d.ts.map +1 -0
  52. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/account-schema.test.js +108 -0
  53. package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/account-schema.test.js.map +1 -0
  54. package/payload/platform/plugins/filesystem/mcp/dist/lib/account-schema.d.ts +17 -0
  55. package/payload/platform/plugins/filesystem/mcp/dist/lib/account-schema.d.ts.map +1 -0
  56. package/payload/platform/plugins/filesystem/mcp/dist/lib/account-schema.js +162 -0
  57. package/payload/platform/plugins/filesystem/mcp/dist/lib/account-schema.js.map +1 -0
  58. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/schema-fence.test.d.ts +2 -0
  59. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/schema-fence.test.d.ts.map +1 -0
  60. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/schema-fence.test.js +116 -0
  61. package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/schema-fence.test.js.map +1 -0
  62. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.d.ts.map +1 -1
  63. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.js +9 -0
  64. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-edit.js.map +1 -1
  65. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.d.ts.map +1 -1
  66. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.js +10 -0
  67. package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.js.map +1 -1
  68. package/payload/platform/plugins/scheduling/PLUGIN.md +8 -2
  69. package/payload/platform/plugins/scheduling/mcp/dist/index.js +7 -2
  70. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  71. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.js +53 -6
  72. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.js.map +1 -1
  73. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.js +38 -0
  74. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.js.map +1 -1
  75. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts +5 -3
  76. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts.map +1 -1
  77. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js +18 -3
  78. package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js.map +1 -1
  79. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts +30 -0
  80. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts.map +1 -1
  81. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js +112 -39
  82. package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js.map +1 -1
  83. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +14 -1
  84. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  85. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js +258 -8
  86. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js.map +1 -1
  87. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js +206 -3
  88. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js.map +1 -1
  89. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts +29 -21
  90. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
  91. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +94 -14
  92. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  93. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -1
  94. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +29 -1
  95. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
  96. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts +30 -0
  97. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts.map +1 -1
  98. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js +69 -6
  99. package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js.map +1 -1
  100. package/payload/platform/plugins/telegram/.claude-plugin/plugin.json +1 -1
  101. package/payload/platform/plugins/telegram/PLUGIN.md +46 -9
  102. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-census.test.js +25 -11
  103. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-census.test.js.map +1 -1
  104. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-guard.test.js +67 -5
  105. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-guard.test.js.map +1 -1
  106. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-methods.test.js +9 -3
  107. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-methods.test.js.map +1 -1
  108. package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.js +87 -3
  109. package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.js.map +1 -1
  110. package/payload/platform/plugins/telegram/mcp/dist/__tests__/bot-provision-tool.test.d.ts +2 -0
  111. package/payload/platform/plugins/telegram/mcp/dist/__tests__/bot-provision-tool.test.d.ts.map +1 -0
  112. package/payload/platform/plugins/telegram/mcp/dist/__tests__/bot-provision-tool.test.js +326 -0
  113. package/payload/platform/plugins/telegram/mcp/dist/__tests__/bot-provision-tool.test.js.map +1 -0
  114. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-business.test.d.ts +2 -0
  115. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-business.test.d.ts.map +1 -0
  116. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-business.test.js +184 -0
  117. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-business.test.js.map +1 -0
  118. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js +79 -0
  119. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js.map +1 -1
  120. package/payload/platform/plugins/telegram/mcp/dist/__tests__/chat-send-policy.test.d.ts +2 -0
  121. package/payload/platform/plugins/telegram/mcp/dist/__tests__/chat-send-policy.test.d.ts.map +1 -0
  122. package/payload/platform/plugins/telegram/mcp/dist/__tests__/chat-send-policy.test.js +34 -0
  123. package/payload/platform/plugins/telegram/mcp/dist/__tests__/chat-send-policy.test.js.map +1 -0
  124. package/payload/platform/plugins/telegram/mcp/dist/__tests__/reach-tool.test.d.ts +2 -0
  125. package/payload/platform/plugins/telegram/mcp/dist/__tests__/reach-tool.test.d.ts.map +1 -0
  126. package/payload/platform/plugins/telegram/mcp/dist/__tests__/reach-tool.test.js +106 -0
  127. package/payload/platform/plugins/telegram/mcp/dist/__tests__/reach-tool.test.js.map +1 -0
  128. package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.js +2 -31
  129. package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.js.map +1 -1
  130. package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.js +15 -1
  131. package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.js.map +1 -1
  132. package/payload/platform/plugins/telegram/mcp/dist/__tests__/webhook-register.test.js +178 -2
  133. package/payload/platform/plugins/telegram/mcp/dist/__tests__/webhook-register.test.js.map +1 -1
  134. package/payload/platform/plugins/telegram/mcp/dist/index.js +22 -8
  135. package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -1
  136. package/payload/platform/plugins/telegram/mcp/dist/lib/account-token.d.ts +19 -0
  137. package/payload/platform/plugins/telegram/mcp/dist/lib/account-token.d.ts.map +1 -1
  138. package/payload/platform/plugins/telegram/mcp/dist/lib/account-token.js +41 -1
  139. package/payload/platform/plugins/telegram/mcp/dist/lib/account-token.js.map +1 -1
  140. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts +21 -19
  141. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts.map +1 -1
  142. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js +44 -36
  143. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js.map +1 -1
  144. package/payload/platform/plugins/telegram/mcp/dist/lib/agent-active.d.ts +13 -0
  145. package/payload/platform/plugins/telegram/mcp/dist/lib/agent-active.d.ts.map +1 -1
  146. package/payload/platform/plugins/telegram/mcp/dist/lib/agent-active.js +22 -1
  147. package/payload/platform/plugins/telegram/mcp/dist/lib/agent-active.js.map +1 -1
  148. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts +11 -1
  149. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts.map +1 -1
  150. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js +24 -4
  151. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js.map +1 -1
  152. package/payload/platform/plugins/telegram/mcp/dist/lib/api-guard.d.ts +11 -1
  153. package/payload/platform/plugins/telegram/mcp/dist/lib/api-guard.d.ts.map +1 -1
  154. package/payload/platform/plugins/telegram/mcp/dist/lib/api-guard.js +54 -2
  155. package/payload/platform/plugins/telegram/mcp/dist/lib/api-guard.js.map +1 -1
  156. package/payload/platform/plugins/telegram/mcp/dist/lib/api-methods.d.ts +0 -3
  157. package/payload/platform/plugins/telegram/mcp/dist/lib/api-methods.d.ts.map +1 -1
  158. package/payload/platform/plugins/telegram/mcp/dist/lib/api-methods.js +0 -1
  159. package/payload/platform/plugins/telegram/mcp/dist/lib/api-methods.js.map +1 -1
  160. package/payload/platform/plugins/telegram/mcp/dist/lib/business-window-store.d.ts +58 -0
  161. package/payload/platform/plugins/telegram/mcp/dist/lib/business-window-store.d.ts.map +1 -0
  162. package/payload/platform/plugins/telegram/mcp/dist/lib/business-window-store.js +125 -0
  163. package/payload/platform/plugins/telegram/mcp/dist/lib/business-window-store.js.map +1 -0
  164. package/payload/platform/plugins/telegram/mcp/dist/lib/chat-send-policy.d.ts +55 -0
  165. package/payload/platform/plugins/telegram/mcp/dist/lib/chat-send-policy.d.ts.map +1 -0
  166. package/payload/platform/plugins/telegram/mcp/dist/lib/chat-send-policy.js +91 -0
  167. package/payload/platform/plugins/telegram/mcp/dist/lib/chat-send-policy.js.map +1 -0
  168. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts +2 -53
  169. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts.map +1 -1
  170. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js +8 -94
  171. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js.map +1 -1
  172. package/payload/platform/plugins/telegram/mcp/dist/tools/api.d.ts.map +1 -1
  173. package/payload/platform/plugins/telegram/mcp/dist/tools/api.js +27 -0
  174. package/payload/platform/plugins/telegram/mcp/dist/tools/api.js.map +1 -1
  175. package/payload/platform/plugins/telegram/mcp/dist/tools/ask.d.ts.map +1 -1
  176. package/payload/platform/plugins/telegram/mcp/dist/tools/ask.js +31 -1
  177. package/payload/platform/plugins/telegram/mcp/dist/tools/ask.js.map +1 -1
  178. package/payload/platform/plugins/telegram/mcp/dist/tools/bot-provision.d.ts +64 -0
  179. package/payload/platform/plugins/telegram/mcp/dist/tools/bot-provision.d.ts.map +1 -0
  180. package/payload/platform/plugins/telegram/mcp/dist/tools/bot-provision.js +217 -0
  181. package/payload/platform/plugins/telegram/mcp/dist/tools/bot-provision.js.map +1 -0
  182. package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts +7 -0
  183. package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts.map +1 -1
  184. package/payload/platform/plugins/telegram/mcp/dist/tools/card.js +56 -0
  185. package/payload/platform/plugins/telegram/mcp/dist/tools/card.js.map +1 -1
  186. package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.d.ts.map +1 -1
  187. package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.js +15 -0
  188. package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.js.map +1 -1
  189. package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.d.ts.map +1 -1
  190. package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.js +12 -0
  191. package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.js.map +1 -1
  192. package/payload/platform/plugins/telegram/mcp/dist/tools/reach.d.ts +22 -0
  193. package/payload/platform/plugins/telegram/mcp/dist/tools/reach.d.ts.map +1 -0
  194. package/payload/platform/plugins/telegram/mcp/dist/tools/reach.js +72 -0
  195. package/payload/platform/plugins/telegram/mcp/dist/tools/reach.js.map +1 -0
  196. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.d.ts +17 -68
  197. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.d.ts.map +1 -1
  198. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.js +30 -90
  199. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.js.map +1 -1
  200. package/payload/platform/plugins/telegram/mcp/dist/tools/thread.d.ts.map +1 -1
  201. package/payload/platform/plugins/telegram/mcp/dist/tools/thread.js +12 -0
  202. package/payload/platform/plugins/telegram/mcp/dist/tools/thread.js.map +1 -1
  203. package/payload/platform/plugins/telegram/mcp/dist/tools/webhook-register.d.ts +4 -1
  204. package/payload/platform/plugins/telegram/mcp/dist/tools/webhook-register.d.ts.map +1 -1
  205. package/payload/platform/plugins/telegram/mcp/dist/tools/webhook-register.js +59 -4
  206. package/payload/platform/plugins/telegram/mcp/dist/tools/webhook-register.js.map +1 -1
  207. package/payload/platform/plugins/telegram/skills/build/SKILL.md +155 -40
  208. package/payload/platform/plugins/telegram/skills/build/references/methods.md +3 -13
  209. package/payload/platform/plugins/telegram/skills/configure/SKILL.md +87 -6
  210. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +12 -0
  211. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.d.ts +36 -5
  212. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.d.ts.map +1 -1
  213. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.js +103 -10
  214. package/payload/platform/services/claude-session-manager/dist/account-dir-schema-reconcile.js.map +1 -1
  215. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  216. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +2 -1
  217. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  218. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  219. package/payload/platform/services/claude-session-manager/dist/http-server.js +42 -4
  220. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  221. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  222. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +19 -5
  223. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  224. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +9 -0
  225. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
  226. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +5 -1
  227. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  228. package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
  229. package/payload/platform/services/telegram-channel/dist/instructions.js +13 -0
  230. package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
  231. package/payload/platform/services/telegram-channel/dist/notification.d.ts +13 -0
  232. package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -1
  233. package/payload/platform/services/telegram-channel/dist/notification.js +13 -2
  234. package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -1
  235. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +52 -0
  236. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  237. package/payload/platform/services/whatsapp-channel/dist/notification.js +64 -1
  238. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  239. package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
  240. package/payload/platform/services/whatsapp-channel/dist/server.js +14 -2
  241. package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
  242. package/payload/platform/templates/account-schema/SCHEMA.md +17 -10
  243. package/payload/platform/templates/agents/admin/IDENTITY.md +5 -0
  244. package/payload/platform/templates/specialists/agents/data-manager.md +2 -2
  245. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
  246. package/payload/server/{chunk-BFRB2U75.js → chunk-CV6AEMKH.js} +1 -0
  247. package/payload/server/{manager-CTVTF4YB.js → manager-FQSQSSJ3.js} +1 -1
  248. package/payload/server/public/activity.html +6 -6
  249. package/payload/server/public/agents.html +5 -5
  250. package/payload/server/public/assets/{AdminLoginScreens-AnJZfgFz.js → AdminLoginScreens-BLsDYWVi.js} +1 -1
  251. package/payload/server/public/assets/AdminLoginScreens-BLsDYWVi.js.br +0 -0
  252. package/payload/server/public/assets/AdminLoginScreens-BLsDYWVi.js.gz +0 -0
  253. package/payload/server/public/assets/{AdminShell-CEVqyQqg.js → AdminShell-BZS8jzFA.js} +1 -1
  254. package/payload/server/public/assets/AdminShell-BZS8jzFA.js.br +0 -0
  255. package/payload/server/public/assets/AdminShell-BZS8jzFA.js.gz +0 -0
  256. package/payload/server/public/assets/{activity-czUaUl8I.js → activity-DOjvoLdd.js} +1 -1
  257. package/payload/server/public/assets/activity-DOjvoLdd.js.br +0 -0
  258. package/payload/server/public/assets/activity-DOjvoLdd.js.gz +0 -0
  259. package/payload/server/public/assets/{admin-B0iRcfuk.js → admin-JrSNg29g.js} +1 -1
  260. package/payload/server/public/assets/admin-JrSNg29g.js.br +0 -0
  261. package/payload/server/public/assets/admin-JrSNg29g.js.gz +0 -0
  262. package/payload/server/public/assets/{agents-BocONCeQ.js → agents--9WMJVLC.js} +1 -1
  263. package/payload/server/public/assets/agents--9WMJVLC.js.br +0 -0
  264. package/payload/server/public/assets/agents--9WMJVLC.js.gz +0 -0
  265. package/payload/server/public/assets/{browser-Cy-rJm3t.js → browser-DiiMmTrM.js} +1 -1
  266. package/payload/server/public/assets/browser-DiiMmTrM.js.br +0 -0
  267. package/payload/server/public/assets/browser-DiiMmTrM.js.gz +0 -0
  268. package/payload/server/public/assets/{calendar-DUTKxWtd.js → calendar-CazmCzgO.js} +1 -1
  269. package/payload/server/public/assets/calendar-CazmCzgO.js.br +0 -0
  270. package/payload/server/public/assets/calendar-CazmCzgO.js.gz +0 -0
  271. package/payload/server/public/assets/chat-CB0TcyXX.js +1 -0
  272. package/payload/server/public/assets/chat-CB0TcyXX.js.br +0 -0
  273. package/payload/server/public/assets/chat-CB0TcyXX.js.gz +0 -0
  274. package/payload/server/public/assets/chevron-left-0tVo23Dh.js +1 -0
  275. package/payload/server/public/assets/chevron-left-0tVo23Dh.js.br +0 -0
  276. package/payload/server/public/assets/clock-D2cZ0sge.js +1 -0
  277. package/payload/server/public/assets/clock-D2cZ0sge.js.br +0 -0
  278. package/payload/server/public/assets/clock-D2cZ0sge.js.gz +0 -0
  279. package/payload/server/public/assets/{copy-DE9qmAs5.js → copy-C87QIN_o.js} +1 -1
  280. package/payload/server/public/assets/copy-C87QIN_o.js.br +0 -0
  281. package/payload/server/public/assets/copy-C87QIN_o.js.gz +0 -0
  282. package/payload/server/public/assets/data-CK7AMxPt.js +1 -0
  283. package/payload/server/public/assets/data-CK7AMxPt.js.br +0 -0
  284. package/payload/server/public/assets/data-CK7AMxPt.js.gz +0 -0
  285. package/payload/server/public/assets/{field-DE2tEfTo.js → field-C3kQgGWE.js} +1 -1
  286. package/payload/server/public/assets/field-C3kQgGWE.js.br +0 -0
  287. package/payload/server/public/assets/field-C3kQgGWE.js.gz +0 -0
  288. package/payload/server/public/assets/{file-text-BHfL2gqo.js → file-text-rWowl9RN.js} +1 -1
  289. package/payload/server/public/assets/file-text-rWowl9RN.js.br +0 -0
  290. package/payload/server/public/assets/file-text-rWowl9RN.js.gz +0 -0
  291. package/payload/server/public/assets/{graph-08S_BofN.js → graph-CVJKz1Uo.js} +1 -1
  292. package/payload/server/public/assets/graph-CVJKz1Uo.js.br +0 -0
  293. package/payload/server/public/assets/graph-CVJKz1Uo.js.gz +0 -0
  294. package/payload/server/public/assets/{graph-labels-C640Er5R.js → graph-labels-kneGnsHB.js} +1 -1
  295. package/payload/server/public/assets/graph-labels-kneGnsHB.js.br +0 -0
  296. package/payload/server/public/assets/graph-labels-kneGnsHB.js.gz +0 -0
  297. package/payload/server/public/assets/{jsx-runtime-FxjwOUbA.css → jsx-runtime-rMaiYjNu.css} +1 -1
  298. package/payload/server/public/assets/jsx-runtime-rMaiYjNu.css.br +0 -0
  299. package/payload/server/public/assets/{jsx-runtime-FxjwOUbA.css.gz → jsx-runtime-rMaiYjNu.css.gz} +0 -0
  300. package/payload/server/public/assets/{operator-DH5Kw3fL.js → operator-BGvB4hu4.js} +1 -1
  301. package/payload/server/public/assets/operator-BGvB4hu4.js.br +0 -0
  302. package/payload/server/public/assets/operator-BGvB4hu4.js.gz +0 -0
  303. package/payload/server/public/assets/{page-BDpa4HWT.js → page-DBQLOasI.js} +1 -1
  304. package/payload/server/public/assets/page-DBQLOasI.js.br +0 -0
  305. package/payload/server/public/assets/page-DBQLOasI.js.gz +0 -0
  306. package/payload/server/public/assets/{page-yn7ivq8O.js → page-DyVAu7tm.js} +1 -1
  307. package/payload/server/public/assets/page-DyVAu7tm.js.br +0 -0
  308. package/payload/server/public/assets/page-DyVAu7tm.js.gz +0 -0
  309. package/payload/server/public/assets/play-DgP7vl0r.js +1 -0
  310. package/payload/server/public/assets/play-DgP7vl0r.js.br +0 -0
  311. package/payload/server/public/assets/play-DgP7vl0r.js.gz +0 -0
  312. package/payload/server/public/assets/{public-D_qjqet7.js → public-BvUQR3hd.js} +1 -1
  313. package/payload/server/public/assets/public-BvUQR3hd.js.br +0 -0
  314. package/payload/server/public/assets/public-BvUQR3hd.js.gz +0 -0
  315. package/payload/server/public/assets/{rotate-ccw-Ixkq1iUA.js → rotate-ccw-Dnn7gbPh.js} +1 -1
  316. package/payload/server/public/assets/rotate-ccw-Dnn7gbPh.js.br +0 -0
  317. package/payload/server/public/assets/rotate-ccw-Dnn7gbPh.js.gz +0 -0
  318. package/payload/server/public/assets/{routines-Cxjlmcp7.js → routines-N8NmxPOZ.js} +1 -1
  319. package/payload/server/public/assets/routines-N8NmxPOZ.js.br +0 -0
  320. package/payload/server/public/assets/routines-N8NmxPOZ.js.gz +0 -0
  321. package/payload/server/public/assets/{skills-DEo9hSVX.js → skills-B2CRgO-U.js} +1 -1
  322. package/payload/server/public/assets/skills-B2CRgO-U.js.br +0 -0
  323. package/payload/server/public/assets/skills-B2CRgO-U.js.gz +0 -0
  324. package/payload/server/public/assets/{tasks-BxApOIXI.js → tasks-8QLGtlSj.js} +1 -1
  325. package/payload/server/public/assets/tasks-8QLGtlSj.js.br +0 -0
  326. package/payload/server/public/assets/tasks-8QLGtlSj.js.gz +0 -0
  327. package/payload/server/public/assets/{triangle-alert-BYzMcXv8.js → triangle-alert-el772yUQ.js} +1 -1
  328. package/payload/server/public/assets/triangle-alert-el772yUQ.js.br +0 -0
  329. package/payload/server/public/assets/triangle-alert-el772yUQ.js.gz +0 -0
  330. package/payload/server/public/assets/{useCopyFeedback-Bk2HVcjy.js → useCopyFeedback-DfNAu8hQ.js} +1 -1
  331. package/payload/server/public/assets/useCopyFeedback-DfNAu8hQ.js.br +0 -0
  332. package/payload/server/public/assets/useCopyFeedback-DfNAu8hQ.js.gz +0 -0
  333. package/payload/server/public/assets/{useMediaQuery-DEti-vAx.js → useMediaQuery-B469O83-.js} +1 -1
  334. package/payload/server/public/assets/useMediaQuery-B469O83-.js.br +0 -0
  335. package/payload/server/public/assets/{useMediaQuery-DEti-vAx.js.gz → useMediaQuery-B469O83-.js.gz} +0 -0
  336. package/payload/server/public/assets/{useVoiceRecorder-kQ92rL-f.js → useVoiceRecorder-Bb-51cJv.js} +1 -1
  337. package/payload/server/public/assets/useVoiceRecorder-Bb-51cJv.js.br +0 -0
  338. package/payload/server/public/assets/useVoiceRecorder-Bb-51cJv.js.gz +0 -0
  339. package/payload/server/public/assets/{wrench-BhLkHffv.js → wrench-Ck4phkdB.js} +1 -1
  340. package/payload/server/public/assets/wrench-Ck4phkdB.js.br +0 -0
  341. package/payload/server/public/assets/wrench-Ck4phkdB.js.gz +0 -0
  342. package/payload/server/public/browser.html +5 -5
  343. package/payload/server/public/calendar.html +8 -8
  344. package/payload/server/public/chat.html +14 -14
  345. package/payload/server/public/data.html +12 -12
  346. package/payload/server/public/field.html +3 -3
  347. package/payload/server/public/graph.html +10 -10
  348. package/payload/server/public/index.html +14 -14
  349. package/payload/server/public/operator.html +15 -15
  350. package/payload/server/public/public.html +14 -14
  351. package/payload/server/public/routines.html +8 -8
  352. package/payload/server/public/skills.html +6 -6
  353. package/payload/server/public/tasks.html +7 -7
  354. package/payload/server/server.js +3114 -1371
  355. package/payload/server/public/assets/AdminLoginScreens-AnJZfgFz.js.br +0 -0
  356. package/payload/server/public/assets/AdminLoginScreens-AnJZfgFz.js.gz +0 -0
  357. package/payload/server/public/assets/AdminShell-CEVqyQqg.js.br +0 -0
  358. package/payload/server/public/assets/AdminShell-CEVqyQqg.js.gz +0 -0
  359. package/payload/server/public/assets/activity-czUaUl8I.js.br +0 -0
  360. package/payload/server/public/assets/activity-czUaUl8I.js.gz +0 -0
  361. package/payload/server/public/assets/admin-B0iRcfuk.js.br +0 -0
  362. package/payload/server/public/assets/admin-B0iRcfuk.js.gz +0 -0
  363. package/payload/server/public/assets/agents-BocONCeQ.js.br +0 -0
  364. package/payload/server/public/assets/agents-BocONCeQ.js.gz +0 -0
  365. package/payload/server/public/assets/browser-Cy-rJm3t.js.br +0 -0
  366. package/payload/server/public/assets/browser-Cy-rJm3t.js.gz +0 -0
  367. package/payload/server/public/assets/calendar-DUTKxWtd.js.br +0 -0
  368. package/payload/server/public/assets/calendar-DUTKxWtd.js.gz +0 -0
  369. package/payload/server/public/assets/chat-Cis7sHsZ.js +0 -1
  370. package/payload/server/public/assets/chat-Cis7sHsZ.js.br +0 -0
  371. package/payload/server/public/assets/chat-Cis7sHsZ.js.gz +0 -0
  372. package/payload/server/public/assets/chevron-left-Bhhx8j2r.js +0 -1
  373. package/payload/server/public/assets/chevron-left-Bhhx8j2r.js.br +0 -0
  374. package/payload/server/public/assets/clock-Ca3nx7Cc.js +0 -1
  375. package/payload/server/public/assets/clock-Ca3nx7Cc.js.br +0 -0
  376. package/payload/server/public/assets/clock-Ca3nx7Cc.js.gz +0 -0
  377. package/payload/server/public/assets/copy-DE9qmAs5.js.br +0 -0
  378. package/payload/server/public/assets/copy-DE9qmAs5.js.gz +0 -0
  379. package/payload/server/public/assets/data-CkaAEeP1.js +0 -1
  380. package/payload/server/public/assets/data-CkaAEeP1.js.br +0 -0
  381. package/payload/server/public/assets/data-CkaAEeP1.js.gz +0 -0
  382. package/payload/server/public/assets/field-DE2tEfTo.js.br +0 -0
  383. package/payload/server/public/assets/field-DE2tEfTo.js.gz +0 -0
  384. package/payload/server/public/assets/file-text-BHfL2gqo.js.br +0 -0
  385. package/payload/server/public/assets/file-text-BHfL2gqo.js.gz +0 -0
  386. package/payload/server/public/assets/graph-08S_BofN.js.br +0 -0
  387. package/payload/server/public/assets/graph-08S_BofN.js.gz +0 -0
  388. package/payload/server/public/assets/graph-labels-C640Er5R.js.br +0 -0
  389. package/payload/server/public/assets/graph-labels-C640Er5R.js.gz +0 -0
  390. package/payload/server/public/assets/jsx-runtime-FxjwOUbA.css.br +0 -0
  391. package/payload/server/public/assets/operator-DH5Kw3fL.js.br +0 -0
  392. package/payload/server/public/assets/operator-DH5Kw3fL.js.gz +0 -0
  393. package/payload/server/public/assets/page-BDpa4HWT.js.br +0 -0
  394. package/payload/server/public/assets/page-BDpa4HWT.js.gz +0 -0
  395. package/payload/server/public/assets/page-yn7ivq8O.js.br +0 -0
  396. package/payload/server/public/assets/page-yn7ivq8O.js.gz +0 -0
  397. package/payload/server/public/assets/play-CMN7ht-S.js +0 -1
  398. package/payload/server/public/assets/play-CMN7ht-S.js.br +0 -0
  399. package/payload/server/public/assets/play-CMN7ht-S.js.gz +0 -0
  400. package/payload/server/public/assets/public-D_qjqet7.js.br +0 -0
  401. package/payload/server/public/assets/public-D_qjqet7.js.gz +0 -0
  402. package/payload/server/public/assets/rotate-ccw-Ixkq1iUA.js.br +0 -0
  403. package/payload/server/public/assets/rotate-ccw-Ixkq1iUA.js.gz +0 -0
  404. package/payload/server/public/assets/routines-Cxjlmcp7.js.br +0 -0
  405. package/payload/server/public/assets/routines-Cxjlmcp7.js.gz +0 -0
  406. package/payload/server/public/assets/skills-DEo9hSVX.js.br +0 -0
  407. package/payload/server/public/assets/skills-DEo9hSVX.js.gz +0 -0
  408. package/payload/server/public/assets/tasks-BxApOIXI.js.br +0 -0
  409. package/payload/server/public/assets/tasks-BxApOIXI.js.gz +0 -0
  410. package/payload/server/public/assets/triangle-alert-BYzMcXv8.js.br +0 -0
  411. package/payload/server/public/assets/triangle-alert-BYzMcXv8.js.gz +0 -0
  412. package/payload/server/public/assets/useCopyFeedback-Bk2HVcjy.js.br +0 -0
  413. package/payload/server/public/assets/useCopyFeedback-Bk2HVcjy.js.gz +0 -0
  414. package/payload/server/public/assets/useMediaQuery-DEti-vAx.js.br +0 -0
  415. package/payload/server/public/assets/useVoiceRecorder-kQ92rL-f.js.br +0 -0
  416. package/payload/server/public/assets/useVoiceRecorder-kQ92rL-f.js.gz +0 -0
  417. package/payload/server/public/assets/wrench-BhLkHffv.js.br +0 -0
  418. package/payload/server/public/assets/wrench-BhLkHffv.js.gz +0 -0
  419. /package/payload/server/public/assets/{jsx-runtime-BL3pljPe.js → jsx-runtime-BmNepPEn.js} +0 -0
  420. /package/payload/server/public/assets/{jsx-runtime-BL3pljPe.js.br → jsx-runtime-BmNepPEn.js.br} +0 -0
  421. /package/payload/server/public/assets/{jsx-runtime-BL3pljPe.js.gz → jsx-runtime-BmNepPEn.js.gz} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { resolve, join, relative, isAbsolute } from "node:path";
2
- import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { writeTelegramBotEntry, } from "../../../../../lib/telegram-managed-bot/dist/index.js";
3
+ import { telegramStoreRoot } from "../../../../../lib/telegram-reach/dist/index.js";
3
4
  /** The single canonical maxy Telegram webhook path. Duplicated (intentionally)
4
5
  * with platform/ui/server/public-host-gate.ts PUBLIC_ALLOWED_PREFIXES — a unit
5
6
  * test asserts they agree. The official plugin's /channels/telegram is NOT this. */
@@ -26,23 +27,46 @@ export function botIdFromToken(token) {
26
27
  const id = token.slice(0, i);
27
28
  return /^\d+$/.test(id) ? id : null;
28
29
  }
29
- /** The account's own directory inside this brand install, or a refusal.
30
+ /** A directory under `root`, or a refusal.
30
31
  *
31
- * The containment assertion is the point and is why this is exported rather
32
- * than inlined twice: a traversal in `accountId` (e.g. "../../.claude") must
33
- * never let account state land outside ~/.<brand>/. `relative` is
34
- * separator-aware; a non-brand path yields a result that escapes ("..") or is
35
- * absolute. Task 2588 gave this a second caller (the card store), and
36
- * duplicating a security check is how the two drift. */
37
- export function resolveAccountDir(platformRoot, accountId) {
38
- const dir = join(resolve(platformRoot, "..", "data", "accounts"), accountId);
39
- const brandRoot = resolve(platformRoot, "..");
40
- const rel = relative(brandRoot, resolve(dir));
41
- const underBrand = rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
42
- if (!underBrand)
32
+ * The containment assertion is the point and is why it lives in ONE function: a
33
+ * traversal in `accountId` (e.g. "../../.claude") must never let account state
34
+ * land outside the directory it names. `relative` is separator-aware; a path
35
+ * outside `root` yields a result that escapes ("..") or is absolute.
36
+ *
37
+ * Task 2644 the root is a parameter because the two exported resolvers below
38
+ * no longer share one. Accounts live under the brand INSTALL dir; the Telegram
39
+ * message store lives under the brand CONFIG dir. */
40
+ function containedUnder(root, ...segments) {
41
+ const dir = join(root, ...segments);
42
+ const rel = relative(root, resolve(dir));
43
+ const under = rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
44
+ if (!under)
43
45
  return { ok: false, error: "non-brand-path" };
44
46
  return { ok: true, dir };
45
47
  }
48
+ /** A directory under this brand install, or a refusal. Task 2588 gave this a
49
+ * second caller (the card store). */
50
+ function containedDir(platformRoot, ...segments) {
51
+ return containedUnder(resolve(platformRoot, ".."), ...segments);
52
+ }
53
+ /** The account's own configuration directory inside this brand install. */
54
+ export function resolveAccountDir(platformRoot, accountId) {
55
+ return containedDir(platformRoot, "data", "accounts", accountId);
56
+ }
57
+ /** Task 2625 — the account's Telegram message store.
58
+ *
59
+ * NOT a sibling of the accounts directory. Accounts live under the brand
60
+ * INSTALL dir; this store lives under the brand CONFIG dir,
61
+ * `~/.<brand>/data/telegram-messages/<accountId>/`. Task 2644 — reading it as a
62
+ * sibling resolved a directory nothing writes, so the walk found no rows and
63
+ * `telegram-reach` reported every chat unreachable, including the sender of the
64
+ * message it was answering. The derivation is `telegramStoreRoot`, shared with
65
+ * `ui/app/lib/telegram/message-store.ts`, so the writer and this reader cannot
66
+ * name different directories again. */
67
+ export function resolveTelegramStoreDir(platformRoot, accountId) {
68
+ return containedUnder(telegramStoreRoot(platformRoot), accountId);
69
+ }
46
70
  /** Persist one bot entry into account.json's `telegram.bots` array, replacing
47
71
  * any entry with the same id and leaving every other entry byte-identical.
48
72
  *
@@ -66,27 +90,11 @@ export function persistTelegramBot(platformRoot, accountId, entry) {
66
90
  };
67
91
  }
68
92
  const dir = resolved.dir;
69
- const configPath = join(dir, "account.json");
70
- if (!existsSync(configPath)) {
71
- return { ok: false, error: `account.json not found at ${configPath}` };
72
- }
73
- let config;
74
- try {
75
- config = JSON.parse(readFileSync(configPath, "utf-8"));
76
- }
77
- catch (e) {
78
- return { ok: false, error: `account.json parse failed: ${e.message}` };
79
- }
80
- const telegram = config.telegram ?? {};
81
- const bots = Array.isArray(telegram.bots) ? telegram.bots : [];
82
- const at = bots.findIndex((b) => b && typeof b === "object" && b.id === entry.id);
83
- if (at >= 0)
84
- bots[at] = entry;
85
- else
86
- bots.push(entry);
87
- telegram.bots = bots;
88
- config.telegram = telegram;
89
- writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
90
- return { ok: true, dir };
93
+ // Task 2618 — the array merge itself moved to the shared lib, which the UI
94
+ // webhook route also calls when it persists a newly provisioned bot. This
95
+ // function keeps the part that is genuinely its own: the containment assertion
96
+ // above, which exists because `accountId` reaches it from a tool parameter.
97
+ const written = writeTelegramBotEntry(dir, entry);
98
+ return written.ok ? { ok: true, dir } : { ok: false, error: written.error, dir };
91
99
  }
92
100
  //# sourceMappingURL=account-write.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"account-write.js","sourceRoot":"","sources":["../../src/lib/account-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account-write.js","sourceRoot":"","sources":["../../src/lib/account-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EACL,qBAAqB,GAEtB,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAEpF;;qFAEqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAE1D;;;;;;;qEAOqE;AACrE,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,OAAO,WAAW,KAAK,yBAAyB,CAAC;AACnD,CAAC;AAED;;;yCAGyC;AACzC,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAOD;;;;;;;;;sDASsD;AACtD,SAAS,cAAc,CACrB,IAAY,EACZ,GAAG,QAAkB;IAErB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC3B,CAAC;AAED;sCACsC;AACtC,SAAS,YAAY,CACnB,YAAoB,EACpB,GAAG,QAAkB;IAErB,OAAO,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;AAClE,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAC/B,YAAoB,EACpB,SAAiB;IAEjB,OAAO,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;;;wCASwC;AACxC,MAAM,UAAU,uBAAuB,CACrC,YAAoB,EACpB,SAAiB;IAEjB,OAAO,cAAc,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;;;;iDASiD;AACjD,MAAM,UAAU,kBAAkB,CAChC,YAAoB,EACpB,SAAiB,EACjB,KAA4B;IAE5B,0EAA0E;IAC1E,4EAA4E;IAC5E,mEAAmE;IACnE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC5D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC;SACtE,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;IACzB,2EAA2E;IAC3E,0EAA0E;IAC1E,+EAA+E;IAC/E,4EAA4E;IAC5E,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AACnF,CAAC"}
@@ -9,4 +9,17 @@ export declare function accountDirFor(platformRoot: string, accountId: string):
9
9
  * rejects a nonexistent slug. telegram-agent-active.test.ts asserts the two
10
10
  * agree. A bot may only be paired to an agent that can actually answer. */
11
11
  export declare function isActiveAgentSlug(accountDir: string, slug: string): boolean;
12
+ /** Task 2619 — every specialist card's FILE BASENAME on this account, without
13
+ * `.md`, sorted.
14
+ *
15
+ * Duplicated from platform/ui/app/lib/claude-agent/specialist-roster.ts
16
+ * `listSpecialistCardNames`, the same plugin/platform boundary `isActiveAgentSlug`
17
+ * and `botIdFromToken` are duplicated across; telegram-account-write.test.ts
18
+ * asserts the two agree.
19
+ *
20
+ * The basename, not the frontmatter `name`: `--agent <value>` resolves
21
+ * `<accountDir>/.claude/agents/<value>.md`, a mirror the session manager builds
22
+ * by basename, so a bot may only be bound to a name that can actually be
23
+ * spawned. */
24
+ export declare function listSpecialistCardNames(accountDir: string): string[];
12
25
  //# sourceMappingURL=agent-active.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-active.d.ts","sourceRoot":"","sources":["../../src/lib/agent-active.ts"],"names":[],"mappings":"AAGA,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED;;;;;;;4EAO4E;AAC5E,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ3E"}
1
+ {"version":3,"file":"agent-active.d.ts","sourceRoot":"","sources":["../../src/lib/agent-active.ts"],"names":[],"mappings":"AAGA,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED;;;;;;;4EAO4E;AAC5E,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ3E;AAED;;;;;;;;;;;eAWe;AACf,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAOpE"}
@@ -1,5 +1,5 @@
1
1
  import { resolve, join } from "node:path";
2
- import { existsSync, readFileSync } from "node:fs";
2
+ import { existsSync, readFileSync, readdirSync } from "node:fs";
3
3
  /** The account's own directory under the brand install. */
4
4
  export function accountDirFor(platformRoot, accountId) {
5
5
  return join(resolve(platformRoot, "..", "data", "accounts"), accountId);
@@ -23,4 +23,25 @@ export function isActiveAgentSlug(accountDir, slug) {
23
23
  return false;
24
24
  }
25
25
  }
26
+ /** Task 2619 — every specialist card's FILE BASENAME on this account, without
27
+ * `.md`, sorted.
28
+ *
29
+ * Duplicated from platform/ui/app/lib/claude-agent/specialist-roster.ts
30
+ * `listSpecialistCardNames`, the same plugin/platform boundary `isActiveAgentSlug`
31
+ * and `botIdFromToken` are duplicated across; telegram-account-write.test.ts
32
+ * asserts the two agree.
33
+ *
34
+ * The basename, not the frontmatter `name`: `--agent <value>` resolves
35
+ * `<accountDir>/.claude/agents/<value>.md`, a mirror the session manager builds
36
+ * by basename, so a bot may only be bound to a name that can actually be
37
+ * spawned. */
38
+ export function listSpecialistCardNames(accountDir) {
39
+ const dir = join(accountDir, "specialists", "agents");
40
+ if (!existsSync(dir))
41
+ return [];
42
+ return readdirSync(dir)
43
+ .filter((f) => f.endsWith(".md"))
44
+ .map((f) => f.slice(0, -3))
45
+ .sort();
46
+ }
26
47
  //# sourceMappingURL=agent-active.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-active.js","sourceRoot":"","sources":["../../src/lib/agent-active.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,YAAoB,EAAE,SAAiB;IACnE,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;;4EAO4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,IAAY;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,CAAC;QACH,OAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAA0B,CAAC,MAAM,KAAK,QAAQ,CAAC;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"agent-active.js","sourceRoot":"","sources":["../../src/lib/agent-active.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEhE,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,YAAoB,EAAE,SAAiB;IACnE,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;;4EAO4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,IAAY;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,CAAC;QACH,OAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAA0B,CAAC,MAAM,KAAK,QAAQ,CAAC;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;eAWe;AACf,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,WAAW,CAAC,GAAG,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC"}
@@ -25,7 +25,17 @@ export declare function bootCensusLine(platformRoot: string, accountId: string |
25
25
  export declare function extractMethodNames(html: string): string[];
26
26
  /** `missing` are methods this plugin ships that the live page no longer
27
27
  * documents; `added` are methods the page documents that this plugin has never
28
- * heard of. Both are sorted, so a diff of two census lines is stable. */
28
+ * heard of. Both are sorted, so a diff of two census lines is stable.
29
+ *
30
+ * Task 2636 — the eight payment methods are excluded from `added`. The live
31
+ * page still documents all eight and always will; without this they would be
32
+ * reported as new Telegram additions on every run, for ever.
33
+ *
34
+ * This is an exclusion of eight NAMES, not of Telegram's Payments section: the
35
+ * scraper reads a flat list of `<h4>` headings and never parses sections. So if
36
+ * Telegram documents a NINTH payments method it will still surface in `added`.
37
+ * That is intended — a method we have never seen is a new decision, not drift
38
+ * about our own removal. */
29
39
  export declare function diffMethods(live: readonly string[]): {
30
40
  missing: string[];
31
41
  added: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"api-census.d.ts","sourceRoot":"","sources":["../../src/lib/api-census.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,UAAU,0BAA0B,CAAC;AAClD,eAAO,MAAM,SAAS,qBAAqB,CAAC;AAE5C;;;;;;;;;2EAS2E;AAC3E,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAe1F;AAED;;;;;;;;;;8BAU8B;AAC9B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMzD;AAED;;0EAE0E;AAC1E,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAO3F;AAED;;;;;;;;;;;oEAWoE;AACpE,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYzD,CAAC;AAQH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG;IACzD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CAWA;AAED;;yBAEyB;AACzB,eAAO,MAAM,kBAAkB,UAAY,CAAC;AAE5C;;;;;;;;;;;;;;gEAcgE;AAChE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAgCxE"}
1
+ {"version":3,"file":"api-census.d.ts","sourceRoot":"","sources":["../../src/lib/api-census.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,UAAU,0BAA0B,CAAC;AAClD,eAAO,MAAM,SAAS,qBAAqB,CAAC;AAE5C;;;;;;;;;2EAS2E;AAC3E,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAe1F;AAED;;;;;;;;;;8BAU8B;AAC9B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMzD;AAED;;;;;;;;;;;;6BAY6B;AAC7B,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAQ3F;AAED;;;;;;;;;;;oEAWoE;AACpE,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBzD,CAAC;AAQH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG;IACzD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CAWA;AAED;;yBAEyB;AACzB,eAAO,MAAM,kBAAkB,UAAY,CAAC;AAE5C;;;;;;;;;;;;;;gEAcgE;AAChE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAgCxE"}
@@ -1,12 +1,13 @@
1
1
  import { readdirSync, readFileSync, statSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { REFUSED_COUNT } from "./api-guard.js";
4
+ import { PAYMENT_METHODS } from "./api-guard.js";
4
5
  import { BOT_API_METHODS } from "./api-methods.js";
5
6
  import { listRegisteredBots, resolveBotToken } from "./account-token.js";
6
7
  import { THREAD_METHOD } from "../tools/thread.js";
7
8
  import { ASK_METHOD } from "../tools/ask.js";
8
9
  import { MEDIA_SEND_METHOD } from "../tools/media-send.js";
9
- import { INVOICE_METHOD } from "../tools/invoice.js";
10
+ import { MANAGED_BOT_METHODS } from "../../../../../lib/telegram-managed-bot/dist/index.js";
10
11
  export const CENSUS_TAG = "[telegram-api-census]";
11
12
  export const TOOLS_TAG = "[telegram-tools]";
12
13
  /** The local half, emitted once at MCP boot. No network, so every session pays
@@ -54,13 +55,24 @@ export function extractMethodNames(html) {
54
55
  }
55
56
  /** `missing` are methods this plugin ships that the live page no longer
56
57
  * documents; `added` are methods the page documents that this plugin has never
57
- * heard of. Both are sorted, so a diff of two census lines is stable. */
58
+ * heard of. Both are sorted, so a diff of two census lines is stable.
59
+ *
60
+ * Task 2636 — the eight payment methods are excluded from `added`. The live
61
+ * page still documents all eight and always will; without this they would be
62
+ * reported as new Telegram additions on every run, for ever.
63
+ *
64
+ * This is an exclusion of eight NAMES, not of Telegram's Payments section: the
65
+ * scraper reads a flat list of `<h4>` headings and never parses sections. So if
66
+ * Telegram documents a NINTH payments method it will still surface in `added`.
67
+ * That is intended — a method we have never seen is a new decision, not drift
68
+ * about our own removal. */
58
69
  export function diffMethods(live) {
59
70
  const liveSet = new Set(live);
60
71
  const shippedSet = new Set(BOT_API_METHODS);
72
+ const removed = new Set(PAYMENT_METHODS);
61
73
  return {
62
74
  missing: BOT_API_METHODS.filter((m) => !liveSet.has(m)).sort(),
63
- added: live.filter((m) => !shippedSet.has(m)).sort(),
75
+ added: live.filter((m) => !shippedSet.has(m) && !removed.has(m)).sort(),
64
76
  };
65
77
  }
66
78
  /** Bot API method to the typed tool that owns it: the three tools Task 2588
@@ -84,7 +96,15 @@ export const OWNED_METHODS = Object.freeze({
84
96
  ...Object.fromEntries(Object.values(THREAD_METHOD).map((m) => [m, "telegram-thread"])),
85
97
  ...Object.fromEntries(Object.values(ASK_METHOD).map((m) => [m, "telegram-ask"])),
86
98
  ...Object.fromEntries(Object.values(MEDIA_SEND_METHOD).map((m) => [m, "telegram-media-send"])),
87
- ...Object.fromEntries(Object.values(INVOICE_METHOD).map((m) => [m, "telegram-invoice"])),
99
+ // Task 2636 — the eight payment methods are deliberately absent. The 2618 rule
100
+ // below keeps a refused method listed while a TOOL still covers it, so the map
101
+ // and the tool cannot disagree; no tool covers these now, so listing them would
102
+ // assert an owner that does not exist.
103
+ // Task 2618 — all four, including the two `api-guard` also refuses. A refused
104
+ // method emits no `op=call` line so it can never be tallied, but leaving it out
105
+ // here would make the map disagree with the tool about what the tool covers,
106
+ // which is the drift this map exists to prevent.
107
+ ...Object.fromEntries(Object.values(MANAGED_BOT_METHODS).map((m) => [m, "telegram-bot-provision"])),
88
108
  });
89
109
  /** Only `telegram-api`'s own op=call line. The typed tools emit
90
110
  * `[telegram-tools] op=call`, which must NOT be counted: this census answers
@@ -1 +1 @@
1
- {"version":3,"file":"api-census.js","sourceRoot":"","sources":["../../src/lib/api-census.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-census.js","sourceRoot":"","sources":["../../src/lib/api-census.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,14 @@
1
- export type RefusalReason = "owned-by-webhook-register" | "mutually-exclusive-with-webhook" | "moves-bot-off-cloud";
1
+ export type RefusalReason = "owned-by-webhook-register" | "mutually-exclusive-with-webhook" | "moves-bot-off-cloud" | "returns-a-credential" | "payments-surface-removed";
2
+ /** Task 2636 — the eight Bot API Payments methods. Hand-written rather than
3
+ * derived, because the census section they could have been read from is being
4
+ * deleted by this same task.
5
+ *
6
+ * Refusing them is not defence in depth, it is the load-bearing half of the
7
+ * removal. `checkMethod` ALLOWS any name absent from `BOT_API_METHODS` so that
8
+ * a method Telegram adds after the 10.2 snapshot still works, which means
9
+ * deleting these names would otherwise make `telegram-api method=sendInvoice`
10
+ * start working. */
11
+ export declare const PAYMENT_METHODS: readonly string[];
2
12
  export type MethodVerdict = {
3
13
  allowed: true;
4
14
  listed: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"api-guard.d.ts","sourceRoot":"","sources":["../../src/lib/api-guard.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GACrB,2BAA2B,GAC3B,iCAAiC,GACjC,qBAAqB,CAAC;AAyB1B,MAAM,MAAM,aAAa,GACrB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAClC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D;;;;4BAI4B;AAC5B,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAIvD;AAED,qDAAqD;AACrD,eAAO,MAAM,aAAa,QAA+B,CAAC"}
1
+ {"version":3,"file":"api-guard.d.ts","sourceRoot":"","sources":["../../src/lib/api-guard.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GACrB,2BAA2B,GAC3B,iCAAiC,GACjC,qBAAqB,GACrB,sBAAsB,GACtB,0BAA0B,CAAC;AAE/B;;;;;;;;qBAQqB;AACrB,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAS3C,CAAC;AA2DH,MAAM,MAAM,aAAa,GACrB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAClC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D;;;;4BAI4B;AAC5B,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAIvD;AAED,qDAAqD;AACrD,eAAO,MAAM,aAAa,QAA+B,CAAC"}
@@ -1,5 +1,25 @@
1
1
  import { BOT_API_METHODS } from "./api-methods.js";
2
- /** The five methods `telegram-api` will not relay, each with the reason and the
2
+ import { MANAGED_BOT_METHODS } from "../../../../../lib/telegram-managed-bot/dist/index.js";
3
+ /** Task 2636 — the eight Bot API Payments methods. Hand-written rather than
4
+ * derived, because the census section they could have been read from is being
5
+ * deleted by this same task.
6
+ *
7
+ * Refusing them is not defence in depth, it is the load-bearing half of the
8
+ * removal. `checkMethod` ALLOWS any name absent from `BOT_API_METHODS` so that
9
+ * a method Telegram adds after the 10.2 snapshot still works, which means
10
+ * deleting these names would otherwise make `telegram-api method=sendInvoice`
11
+ * start working. */
12
+ export const PAYMENT_METHODS = Object.freeze([
13
+ "sendInvoice",
14
+ "createInvoiceLink",
15
+ "answerShippingQuery",
16
+ "answerPreCheckoutQuery",
17
+ "getMyStarBalance",
18
+ "getStarTransactions",
19
+ "refundStarPayment",
20
+ "editUserStarSubscription",
21
+ ]);
22
+ /** The fifteen methods `telegram-api` will not relay, each with the reason and the
3
23
  * surface that owns the capability instead.
4
24
  *
5
25
  * Webhook state belongs to `telegram-webhook-register`, which enforces the
@@ -10,13 +30,45 @@ import { BOT_API_METHODS } from "./api-methods.js";
10
30
  * getUpdates is, in Telegram's words, one of "two mutually exclusive ways of
11
31
  * receiving updates", and it "will not work if an outgoing webhook is set up".
12
32
  *
13
- * logOut and close both move the bot off the cloud Bot API server. */
33
+ * logOut and close both move the bot off the cloud Bot API server.
34
+ *
35
+ * Task 2618 — getManagedBotToken and replaceManagedBotToken both RETURN A LIVE
36
+ * BOT TOKEN as their result. A passthrough relay hands that straight back as a
37
+ * tool result, which puts it in the transcript, and nothing downstream would
38
+ * notice. `telegram-bot-provision` fetches the same tokens, persists them to
39
+ * account.json and returns only the bot id. Listing them in OWNED_METHODS is
40
+ * not a substitute: that governs the census bucket, not whether the call runs.
41
+ *
42
+ * The two access-settings methods are deliberately NOT here. They return no
43
+ * credential, so refusing them would remove a capability while protecting
44
+ * nothing.
45
+ *
46
+ * Task 2636 — the eight Payments methods are refused because the surface they
47
+ * belonged to was removed, not because relaying one would break routing. Stars
48
+ * cannot be redeemed by a bot at all, and no fiat provider here settles the
49
+ * currencies this install needs. No surface owns the capability now, so `owner`
50
+ * says so in words rather than naming a tool. */
14
51
  const REFUSALS = Object.freeze({
15
52
  setWebhook: { reason: "owned-by-webhook-register", owner: "telegram-webhook-register" },
16
53
  deleteWebhook: { reason: "owned-by-webhook-register", owner: "telegram-webhook-register" },
17
54
  getUpdates: { reason: "mutually-exclusive-with-webhook", owner: "telegram-webhook-register" },
18
55
  logOut: { reason: "moves-bot-off-cloud", owner: "the cloud Bot API server" },
19
56
  close: { reason: "moves-bot-off-cloud", owner: "the cloud Bot API server" },
57
+ [MANAGED_BOT_METHODS.token]: {
58
+ reason: "returns-a-credential",
59
+ owner: "telegram-bot-provision",
60
+ },
61
+ [MANAGED_BOT_METHODS.rotate]: {
62
+ reason: "returns-a-credential",
63
+ owner: "telegram-bot-provision",
64
+ },
65
+ ...Object.fromEntries(PAYMENT_METHODS.map((name) => [
66
+ name,
67
+ {
68
+ reason: "payments-surface-removed",
69
+ owner: "nothing: this install takes no payment inside Telegram",
70
+ },
71
+ ])),
20
72
  });
21
73
  const LISTED = new Set(BOT_API_METHODS);
22
74
  /** An unlisted method is ALLOWED, not refused. `BOT_API_METHODS` is a snapshot
@@ -1 +1 @@
1
- {"version":3,"file":"api-guard.js","sourceRoot":"","sources":["../../src/lib/api-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOnD;;;;;;;;;;;uEAWuE;AACvE,MAAM,QAAQ,GACZ,MAAM,CAAC,MAAM,CAAC;IACZ,UAAU,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE,KAAK,EAAE,2BAA2B,EAAE;IACvF,aAAa,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAC1F,UAAU,EAAE,EAAE,MAAM,EAAE,iCAAiC,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAC7F,MAAM,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC5E,KAAK,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,0BAA0B,EAAE;CAC5E,CAAC,CAAC;AAEL,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AAMxC;;;;4BAI4B;AAC5B,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;IACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC"}
1
+ {"version":3,"file":"api-guard.js","sourceRoot":"","sources":["../../src/lib/api-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAC;AAS5F;;;;;;;;qBAQqB;AACrB,MAAM,CAAC,MAAM,eAAe,GAAsB,MAAM,CAAC,MAAM,CAAC;IAC9D,aAAa;IACb,mBAAmB;IACnB,qBAAqB;IACrB,wBAAwB;IACxB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;IACnB,0BAA0B;CAC3B,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDA4BkD;AAClD,MAAM,QAAQ,GACZ,MAAM,CAAC,MAAM,CAAC;IACZ,UAAU,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE,KAAK,EAAE,2BAA2B,EAAE;IACvF,aAAa,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAC1F,UAAU,EAAE,EAAE,MAAM,EAAE,iCAAiC,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAC7F,MAAM,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC5E,KAAK,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,0BAA0B,EAAE;IAC3E,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;QAC3B,MAAM,EAAE,sBAAsB;QAC9B,KAAK,EAAE,wBAAwB;KAChC;IACD,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;QAC5B,MAAM,EAAE,sBAAsB;QAC9B,KAAK,EAAE,wBAAwB;KAChC;IACD,GAAG,MAAM,CAAC,WAAW,CACnB,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,IAAI;QACJ;YACE,MAAM,EAAE,0BAAmC;YAC3C,KAAK,EAAE,wDAAwD;SAChE;KACF,CAAC,CACH;CACF,CAAC,CAAC;AAEL,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AAMxC;;;;4BAI4B;AAC5B,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;IACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC"}
@@ -22,9 +22,6 @@ export declare const METHOD_SECTIONS: readonly [{
22
22
  }, {
23
23
  readonly section: "Inline mode";
24
24
  readonly methods: readonly ["answerInlineQuery"];
25
- }, {
26
- readonly section: "Payments";
27
- readonly methods: readonly ["sendInvoice", "createInvoiceLink", "answerShippingQuery", "answerPreCheckoutQuery", "getMyStarBalance", "getStarTransactions", "refundStarPayment", "editUserStarSubscription"];
28
25
  }, {
29
26
  readonly section: "Telegram Passport";
30
27
  readonly methods: readonly ["setPassportDataErrors"];
@@ -1 +1 @@
1
- {"version":3,"file":"api-methods.d.ts","sourceRoot":"","sources":["../../src/lib/api-methods.ts"],"names":[],"mappings":"AAAA;;gCAEgC;AAChC,eAAO,MAAM,WAAW,SAAS,CAAC;AAElC;6EAC6E;AAC7E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUlB,CAAC;AAEX;kEACkE;AAClE,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAE5C,CAAC"}
1
+ {"version":3,"file":"api-methods.d.ts","sourceRoot":"","sources":["../../src/lib/api-methods.ts"],"names":[],"mappings":"AAAA;;gCAEgC;AAChC,eAAO,MAAM,WAAW,SAAS,CAAC;AAElC;6EAC6E;AAC7E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;EASlB,CAAC;AAEX;kEACkE;AAClE,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAE5C,CAAC"}
@@ -11,7 +11,6 @@ export const METHOD_SECTIONS = [
11
11
  { section: "Stickers", methods: ["sendSticker", "getStickerSet", "getCustomEmojiStickers", "uploadStickerFile", "createNewStickerSet", "addStickerToSet", "setStickerPositionInSet", "deleteStickerFromSet", "replaceStickerInSet", "setStickerEmojiList", "setStickerKeywords", "setStickerMaskPosition", "setStickerSetTitle", "setStickerSetThumbnail", "setCustomEmojiStickerSetThumbnail", "deleteStickerSet"] },
12
12
  { section: "Rich messages", methods: ["sendRichMessage", "sendRichMessageDraft"] },
13
13
  { section: "Inline mode", methods: ["answerInlineQuery"] },
14
- { section: "Payments", methods: ["sendInvoice", "createInvoiceLink", "answerShippingQuery", "answerPreCheckoutQuery", "getMyStarBalance", "getStarTransactions", "refundStarPayment", "editUserStarSubscription"] },
15
14
  { section: "Telegram Passport", methods: ["setPassportDataErrors"] },
16
15
  { section: "Games", methods: ["sendGame", "setGameScore", "getGameHighScores"] },
17
16
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"api-methods.js","sourceRoot":"","sources":["../../src/lib/api-methods.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-methods.js","sourceRoot":"","sources":["../../src/lib/api-methods.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /** Task 2615 — the read side of Telegram's 24-hour business reply window.
2
+ *
3
+ * `BusinessBotRights.can_reply` grants the right to "send and edit messages in
4
+ * the private chats that had incoming messages in the last 24 hours". Outside
5
+ * that window Telegram refuses the send, and nothing is emitted when the window
6
+ * closes, so a customer simply becomes unanswerable with no event anywhere.
7
+ * Deciding before the call is what turns that silence into a refusal the agent
8
+ * can act on.
9
+ *
10
+ * The platform writes the conversation (`platform/ui/app/lib/telegram/
11
+ * message-store.ts`); this reads it back. The window constant, the row shape and
12
+ * the path derivation are duplicated across the boundary on purpose — the plugin
13
+ * cannot import from `platform/ui/app`, the same boundary that already
14
+ * duplicates the webhook secret path, the card store, the live-location store
15
+ * and the business connection — and
16
+ * `ui/app/lib/telegram/__tests__/business-window-boundary.test.ts` asserts the
17
+ * two derivations agree.
18
+ *
19
+ * TWO ROOTS, and they are not the same one. The connection record sits in the
20
+ * ACCOUNT dir, `<installDir>/data/accounts/<accountId>`; the conversation store
21
+ * is under the brand CONFIG dir, `~/.<brand>/data/telegram-messages/<accountId>`.
22
+ * Task 2644 — they are NOT siblings, which is what this file assumed, and the
23
+ * path derivation is no longer duplicated: `telegramStoreRoot` is shared with
24
+ * the platform writer. `resolveAccountDir` is still the containment authority:
25
+ * its refusal is what stops a traversal in the account id from reaching outside
26
+ * the install.
27
+ */
28
+ /** Telegram's window, in seconds. Restated rather than imported, for the reason
29
+ * the header gives; the boundary test is what keeps it equal to the platform's
30
+ * `BUSINESS_REPLY_WINDOW_S`. */
31
+ export declare const BUSINESS_REPLY_WINDOW_S = 86400;
32
+ /** The business conversation's key. Mirrors `telegramBusinessChannelKey`. */
33
+ export declare function businessChannelKey(botId: string, chatId: string | number): string;
34
+ /** The newest Telegram-clock second among INBOUND rows in one business chat, or
35
+ * null when the chat holds none carrying that field.
36
+ *
37
+ * Inbound only: the window runs from what the CUSTOMER last sent, and counting
38
+ * an agent reply would extend it on every send so the refusal could never fire.
39
+ *
40
+ * Null rather than 0 for "nothing to measure from". Zero is a real Unix second
41
+ * and would read as 1970, refusing every reply in a conversation whose rows
42
+ * predate the field. */
43
+ export declare function newestInboundTelegramDate(platformRoot: string, accountId: string, channelKey: string): number | null;
44
+ export interface BusinessWindowVerdict {
45
+ allowed: boolean;
46
+ ageS: number | null;
47
+ reason: "ok" | "no-inbound" | "lapsed";
48
+ }
49
+ export declare function businessWindowVerdict(input: {
50
+ newestInboundDate: number | null;
51
+ nowMs: number;
52
+ }): BusinessWindowVerdict;
53
+ /** The refusal the agent reads. It names the WINDOW and the chat, never a
54
+ * parameter: there is no argument the caller could add to make this send work,
55
+ * which is the shape Task 2611 gave `ask.ts` for a checklist with no
56
+ * connection. */
57
+ export declare function businessWindowRefusal(chatId: number | string, ageS: number | null): string;
58
+ //# sourceMappingURL=business-window-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-window-store.d.ts","sourceRoot":"","sources":["../../src/lib/business-window-store.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;iCAEiC;AACjC,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEjF;AAyBD;;;;;;;;yBAQyB;AACzB,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CA0Bf;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,IAAI,GAAG,YAAY,GAAG,QAAQ,CAAC;CACxC;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,qBAAqB,CAQxB;AAED;;;kBAGkB;AAClB,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAc1F"}