@rubytech/create-sitedesk-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 +16 -16
  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
@@ -2,81 +2,76 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { eagerTool } from "../../../../lib/mcp-eager/dist/index.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
4
  import { z } from "zod";
5
- import { message } from "./tools/message.js";
6
5
  import { messageHistory } from "./tools/message-history.js";
7
6
  import { webhookRegister } from "./tools/webhook-register.js";
8
7
  import { randomBytes } from "node:crypto";
9
8
  import { telegramApi } from "./tools/api.js";
10
9
  import { telegramApiCensus } from "./tools/api-census.js";
11
- import { bootCensusLine } from "./lib/api-census.js";
10
+ import { telegramLiveLocation } from "./tools/live-location.js";
11
+ import { telegramCard } from "./tools/card.js";
12
+ import { telegramMediaFetch } from "./tools/media-fetch.js";
13
+ import { telegramThread } from "./tools/thread.js";
14
+ import { telegramAsk } from "./tools/ask.js";
15
+ import { telegramMediaSend } from "./tools/media-send.js";
16
+ import { telegramInvoice } from "./tools/invoice.js";
17
+ import { ASK_SHAPE, CARD_SHAPE, INVOICE_SHAPE, MEDIA_FETCH_SHAPE, MEDIA_SEND_SHAPE, THREAD_SHAPE, } from "./tools/schemas.js";
18
+ import { bootCensusLine, passthroughCensusLine } from "./lib/api-census.js";
19
+ import { cardCensusLine } from "./lib/card-store.js";
12
20
  import { API_VERSION } from "./lib/api-methods.js";
21
+ /** Every typed tool resolves its per-account context the same way. */
22
+ function toolDeps() {
23
+ return {
24
+ platformRoot: process.env.PLATFORM_ROOT ?? "",
25
+ accountId: process.env.ACCOUNT_ID,
26
+ callId: randomBytes(4).toString("hex"),
27
+ log: (line) => process.stderr.write(line + "\n"),
28
+ };
29
+ }
13
30
  const server = new McpServer({
14
31
  name: "maxy-messaging",
15
32
  version: "0.1.0",
16
33
  });
17
- eagerTool(server, "message", "Send a message via Telegram. Supports text with HTML formatting and inline keyboards for interactive choices.", {
18
- channel: z.literal("telegram").describe("Delivery channel"),
19
- botId: z.string().describe("Which registered bot to send as (its numeric Telegram id, the token's colon-prefix). This account may hold several; if you do not know the id, call with your best guess and the error lists every bot registered here."),
20
- chatId: z
21
- .union([z.string(), z.number()])
22
- .describe("Telegram chat ID to send to"),
23
- text: z.string().describe("Message text (HTML formatting supported)"),
24
- parseMode: z
25
- .enum(["HTML", "Markdown", "MarkdownV2"])
26
- .optional()
27
- .describe("Parse mode (default: HTML)"),
28
- inlineKeyboard: z
29
- .array(z.array(z.object({
30
- text: z.string().describe("Button label"),
31
- callbackData: z
32
- .string()
33
- .optional()
34
- .describe("Callback data for button press"),
35
- url: z
36
- .string()
37
- .optional()
38
- .describe("URL to open on button press, in the device browser, leaving Telegram"),
39
- webAppUrl: z
40
- .string()
41
- .optional()
42
- .describe("HTTPS URL opened as a Telegram Mini App INSIDE the chat, rather than in the device browser as `url` does. Available only in private chats between a user and the bot."),
43
- })))
44
- .optional()
45
- .describe("Inline keyboard rows for interactive buttons"),
46
- }, async (params) => {
47
- try {
48
- const result = await message(params);
49
- if (!result.sent) {
50
- return {
51
- content: [
52
- {
53
- type: "text",
54
- text: `Message failed: ${result.error}`,
55
- },
56
- ],
57
- isError: true,
58
- };
59
- }
60
- return {
61
- content: [
62
- {
63
- type: "text",
64
- text: `Message sent via ${result.channel} (ID: ${result.messageId})`,
65
- },
66
- ],
67
- };
68
- }
69
- catch (err) {
70
- return {
71
- content: [
72
- {
73
- type: "text",
74
- text: `Send failed: ${err instanceof Error ? err.message : String(err)}`,
75
- },
76
- ],
77
- isError: true,
78
- };
79
- }
34
+ eagerTool(server, "telegram-card", "Post a Telegram card, or edit the one a key already names. Give `key` and the same key later edits that card in place instead of stacking a new one below it; omit `key` for a one-off message. Buttons are typed rows. Absorbs sendMessage, editMessageText, editMessageReplyMarkup and answerCallbackQuery: prefer this over telegram-api for all four.", CARD_SHAPE, async (params) => {
35
+ const result = await telegramCard(params, toolDeps());
36
+ return {
37
+ content: [{ type: "text", text: result.text }],
38
+ ...(result.isError ? { isError: true } : {}),
39
+ };
40
+ });
41
+ eagerTool(server, "telegram-media-fetch", "Fetch a Telegram file by its file_id and save it locally, then Read the returned path. Use it for a file_id you learned about after the fact; files attached to an inbound message are already downloaded and their paths are on the turn. Owns getFile.", MEDIA_FETCH_SHAPE, async (params) => {
42
+ const result = await telegramMediaFetch(params, toolDeps());
43
+ return {
44
+ content: [{ type: "text", text: result.text }],
45
+ ...(result.isError ? { isError: true } : {}),
46
+ };
47
+ });
48
+ eagerTool(server, "telegram-thread", "Create and manage forum topics, so one chat can carry a separate thread per job. Telegram allows a topic in a forum supergroup OR in a private chat with a user; the private-chat form needs forum topic mode enabled on the bot, without which the topic exists but nothing can be sent into it. Owns the six forum-topic methods.", THREAD_SHAPE, async (params) => {
49
+ const result = await telegramThread(params, toolDeps());
50
+ return {
51
+ content: [{ type: "text", text: result.text }],
52
+ ...(result.isError ? { isError: true } : {}),
53
+ };
54
+ });
55
+ eagerTool(server, "telegram-ask", "Ask for something structured, or send a place or a person: polls and quizzes, business checklists, a map pin, a live location, a venue, a contact card, a rolled die. Also stops a poll, and edits or stops a live location it sent earlier. Pick `kind` and the tool refuses a missing required field before it reaches Telegram. Owns sendPoll, sendChecklist, sendLocation, sendVenue, sendContact, sendDice, stopPoll, editMessageChecklist, editMessageLiveLocation and stopMessageLiveLocation: prefer this over telegram-api for all ten.", ASK_SHAPE, async (params) => {
56
+ const result = await telegramAsk(params, toolDeps());
57
+ return {
58
+ content: [{ type: "text", text: result.text }],
59
+ ...(result.isError ? { isError: true } : {}),
60
+ };
61
+ });
62
+ eagerTool(server, "telegram-media-send", "Send a photo, document, video, audio, voice note, animation, round video note or a 2-10 item album, and edit a sent message's media or caption. Name the file exactly one way: `fileId` for something Telegram already holds (always cheapest), `url` for an https address Telegram fetches itself, or `filePath` for an absolute local path uploaded as multipart. An album takes the same three per item and mixes them freely. Owns sendPhoto, sendDocument, sendVideo, sendAudio, sendVoice, sendAnimation, sendVideoNote, sendMediaGroup, editMessageMedia and editMessageCaption: prefer this over telegram-api for all ten.", MEDIA_SEND_SHAPE, async (params) => {
63
+ const result = await telegramMediaSend(params, toolDeps());
64
+ return {
65
+ content: [{ type: "text", text: result.text }],
66
+ ...(result.isError ? { isError: true } : {}),
67
+ };
68
+ });
69
+ eagerTool(server, "telegram-invoice", "Charge for something inside Telegram. `send` posts an invoice into a chat, `link` returns a payable URL instead, and both take Telegram Stars (currency XTR, no provider token) or a real currency through a BotFather provider. Also answers the shipping and pre-checkout queries Telegram sends mid-checkout, and carries the Stars balance, transaction list, refund and subscription controls. Owns sendInvoice, createInvoiceLink, answerShippingQuery, answerPreCheckoutQuery, getMyStarBalance, getStarTransactions, refundStarPayment and editUserStarSubscription: prefer this over telegram-api for all eight.", INVOICE_SHAPE, async (params) => {
70
+ const result = await telegramInvoice(params, toolDeps());
71
+ return {
72
+ content: [{ type: "text", text: result.text }],
73
+ ...(result.isError ? { isError: true } : {}),
74
+ };
80
75
  });
81
76
  eagerTool(server, "message-history", "Query conversation history from the message log.", {
82
77
  channel: z.string().optional().describe("Filter by channel (telegram)"),
@@ -181,7 +176,7 @@ eagerTool(server, "telegram-webhook-register", "Register or re-register a Telegr
181
176
  ...(result.isError ? { isError: true } : {}),
182
177
  };
183
178
  });
184
- eagerTool(server, "telegram-api", `Call any Telegram Bot API method by name. Bot API ${API_VERSION} documents 185 of them and this reaches every one, plus any Telegram adds later. Use it for everything the four named tools do not cover: editMessageText to change a card in place, answerCallbackQuery to clear a button's spinner, sendPhoto and sendDocument, pinning, chat administration, answerWebAppQuery. Five methods are refused because they would break this install's own inbound routing; the refusal names the tool that owns each. The build skill (telegram:build) carries the full method list and worked examples.`, {
179
+ eagerTool(server, "telegram-api", `Escape hatch for the long tail of the Telegram Bot API. Bot API ${API_VERSION} documents 185 methods and this reaches every one, plus any Telegram adds later. Params are untyped, so prefer a named tool where one exists: telegram-card owns sendMessage, editMessageText, editMessageReplyMarkup and answerCallbackQuery; telegram-media-fetch owns getFile; telegram-thread owns the six forum-topic methods; telegram-ask owns polls, checklists, locations, venues, contacts and dice; telegram-media-send owns every send of a photo, document, video, audio, voice, animation, video note or album, plus editing media and captions; telegram-invoice owns invoices, invoice links, the two checkout answers and the Telegram Stars controls; telegram-webhook-register owns webhook state; telegram-menu-button owns the Mini App button. What is left here is genuinely long tail: chat membership and administration, business-account management, the bot's own commands and profile, org verification, chat cosmetics, stickers, gifts, transport, games, passport, ephemeral sends, and answerWebAppQuery. Five methods are refused because they would break this install's own inbound routing; the refusal names the tool that owns each. The build skill (telegram:build) carries the full method list and worked examples.`, {
185
180
  botId: z.string().describe("Which registered bot to call as (its numeric Telegram id, the token's colon-prefix). Never a raw token: the token is resolved from the account, so it never crosses this boundary. On a miss the error lists every bot registered here."),
186
181
  method: z.string().describe("Bot API method name, exactly as documented, for example editMessageText. See the telegram:build skill's references/methods.md for all 185."),
187
182
  params: z.record(z.unknown()).optional().describe("The method's own parameters, passed to Telegram verbatim. Use Telegram's snake_case field names, for example { chat_id, message_id, text }."),
@@ -214,10 +209,38 @@ eagerTool(server, "telegram-api-census", "Reconcile the Bot API method list this
214
209
  ...(result.isError ? { isError: true } : {}),
215
210
  };
216
211
  });
212
+ eagerTool(server, "telegram-live-location", "Where a Telegram live-location share currently is. When somebody shares their live location, the first share raises one turn and every movement after it updates a record silently — this reads that record. Returns the coordinates and the time Telegram measured them, so an answer always says how old it is. Refuses by name when the share has ended (past its own live_period) or when that sender is not sharing, rather than handing back a stale position; the refusal lists the shares that ARE active, so a wrong id is recoverable.", {
213
+ botId: z.string().describe("The bot that received the share (its numeric Telegram id, the token's colon-prefix). A person sharing to two bots is two separate shares."),
214
+ senderId: z.string().describe("The sharer's numeric Telegram user id."),
215
+ }, async ({ botId, senderId }) => {
216
+ const result = telegramLiveLocation({ botId, senderId }, {
217
+ platformRoot: process.env.PLATFORM_ROOT ?? "",
218
+ accountId: process.env.ACCOUNT_ID,
219
+ log: (line) => process.stderr.write(line + "\n"),
220
+ });
221
+ return {
222
+ content: [{ type: "text", text: result.text }],
223
+ ...(result.isError ? { isError: true } : {}),
224
+ };
225
+ });
217
226
  // Boot census, no network. Emitted before the transport connects, matching
218
227
  // [roster-census] in the admin plugin. The plugin is core, so it boots on
219
228
  // installs with no bot at all; bots=0 is what makes that visible.
220
229
  process.stderr.write(bootCensusLine(process.env.PLATFORM_ROOT ?? "", process.env.ACCOUNT_ID) + "\n");
230
+ // Task 2588 standing check. Every spawn is a tick, and it reads the PREVIOUS
231
+ // sessions' logs, which is the history the question is about: did the model
232
+ // keep reaching for telegram-api after a typed tool took the method over? That
233
+ // failure emits nothing of its own — the call succeeds and the task looks
234
+ // delivered — so no error log can catch it and only reconciliation can.
235
+ process.stderr.write(passthroughCensusLine(process.env.LOG_DIR) + "\n");
236
+ // Task 2595 standing check. telegram-cards.json holds one entry per keyed card
237
+ // and is compacted only when something writes to it, so `keys` rising across
238
+ // boots while jobs close is the leak. Reports the count read back from disk,
239
+ // never that a prune ran.
240
+ // Task 2604 also puts cardsWithButtons/turns on this line, read from LOG_DIR:
241
+ // the affordances clause in the Telegram turn instruction has no other signal,
242
+ // because not offering a button logs nothing.
243
+ process.stderr.write(cardCensusLine(process.env.PLATFORM_ROOT ?? "", process.env.ACCOUNT_ID, process.env.LOG_DIR) + "\n");
221
244
  const transport = new StdioServerTransport();
222
245
  await server.connect(transport);
223
246
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,21 @@ export type TelegramBotEntryInput = {
29
29
  dmPolicy?: "open" | "allowlist" | "disabled";
30
30
  allowFrom?: number[];
31
31
  };
32
+ /** The account's own directory inside this brand install, or a refusal.
33
+ *
34
+ * The containment assertion is the point and is why this is exported rather
35
+ * than inlined twice: a traversal in `accountId` (e.g. "../../.claude") must
36
+ * never let account state land outside ~/.<brand>/. `relative` is
37
+ * separator-aware; a non-brand path yields a result that escapes ("..") or is
38
+ * absolute. Task 2588 gave this a second caller (the card store), and
39
+ * duplicating a security check is how the two drift. */
40
+ export declare function resolveAccountDir(platformRoot: string, accountId: string): {
41
+ ok: true;
42
+ dir: string;
43
+ } | {
44
+ ok: false;
45
+ error: string;
46
+ };
32
47
  /** Persist one bot entry into account.json's `telegram.bots` array, replacing
33
48
  * any entry with the same id and leaving every other entry byte-identical.
34
49
  *
@@ -1 +1 @@
1
- {"version":3,"file":"account-write.d.ts","sourceRoot":"","sources":["../../src/lib/account-write.ts"],"names":[],"mappings":"AAGA;;qFAEqF;AACrF,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAE1D;;;;;;;qEAOqE;AACrE,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;yCAGyC;AACzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK3D;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACnE;IACE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEN;;;;;;;;;iDASiD;AACjD,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,qBAAqB,GAC3B;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgC/C"}
1
+ {"version":3,"file":"account-write.d.ts","sourceRoot":"","sources":["../../src/lib/account-write.ts"],"names":[],"mappings":"AAGA;;qFAEqF;AACrF,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAE1D;;;;;;;qEAOqE;AACrE,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;yCAGyC;AACzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK3D;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACnE;IACE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEN;;;;;;;yDAOyD;AACzD,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAO1D;AAED;;;;;;;;;iDASiD;AACjD,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,qBAAqB,GAC3B;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgC/C"}
@@ -26,6 +26,23 @@ export function botIdFromToken(token) {
26
26
  const id = token.slice(0, i);
27
27
  return /^\d+$/.test(id) ? id : null;
28
28
  }
29
+ /** The account's own directory inside this brand install, or a refusal.
30
+ *
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)
43
+ return { ok: false, error: "non-brand-path" };
44
+ return { ok: true, dir };
45
+ }
29
46
  /** Persist one bot entry into account.json's `telegram.bots` array, replacing
30
47
  * any entry with the same id and leaving every other entry byte-identical.
31
48
  *
@@ -37,19 +54,19 @@ export function botIdFromToken(token) {
37
54
  * the resolved account.json directory so the caller can log + assert it is
38
55
  * under the brand install (never ~/.claude). */
39
56
  export function persistTelegramBot(platformRoot, accountId, entry) {
40
- const accountsDir = resolve(platformRoot, "..", "data", "accounts");
41
- const dir = join(accountsDir, accountId);
42
- const configPath = join(dir, "account.json");
43
57
  // Assert the resolved dir is under the brand install BEFORE any write — a
44
58
  // traversal in accountId (e.g. "../../.claude") must never let a token land
45
- // outside ~/.<brand>/. `relative` is separator-aware; a non-brand path yields
46
- // a result that escapes ("..") or is absolute.
47
- const brandRoot = resolve(platformRoot, "..");
48
- const rel = relative(brandRoot, resolve(dir));
49
- const underBrand = rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
50
- if (!underBrand) {
51
- return { ok: false, error: "non-brand-path", dir };
59
+ // outside ~/.<brand>/. Shared with the card store since Task 2588.
60
+ const resolved = resolveAccountDir(platformRoot, accountId);
61
+ if (!resolved.ok) {
62
+ return {
63
+ ok: false,
64
+ error: resolved.error,
65
+ dir: join(resolve(platformRoot, "..", "data", "accounts"), accountId),
66
+ };
52
67
  }
68
+ const dir = resolved.dir;
69
+ const configPath = join(dir, "account.json");
53
70
  if (!existsSync(configPath)) {
54
71
  return { ok: false, error: `account.json not found at ${configPath}` };
55
72
  }
@@ -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":"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"}
@@ -1,4 +1,5 @@
1
1
  export declare const CENSUS_TAG = "[telegram-api-census]";
2
+ export declare const TOOLS_TAG = "[telegram-tools]";
2
3
  /** The local half, emitted once at MCP boot. No network, so every session pays
3
4
  * nothing for it.
4
5
  *
@@ -29,4 +30,41 @@ export declare function diffMethods(live: readonly string[]): {
29
30
  missing: string[];
30
31
  added: string[];
31
32
  };
33
+ /** Bot API method to the typed tool that owns it: the three tools Task 2588
34
+ * shipped and the three Task 2594 added. Built from each tool's own exported
35
+ * method map rather than a second hand-written list, so a tool and the census
36
+ * cannot disagree about what the tool covers.
37
+ *
38
+ * A method absent here is long tail: `telegram-api` is the right surface for
39
+ * it and a call to it is healthy.
40
+ *
41
+ * Keeping a tool's methods OUT of this map is the quiet failure. The census
42
+ * reconciles passthrough calls against it, so a tool whose methods are missing
43
+ * reports its own bucket as healthy passthrough for ever, and the standing
44
+ * check goes silent about exactly the drift it exists to catch. */
45
+ export declare const OWNED_METHODS: Readonly<Record<string, string>>;
46
+ export declare function tallyPassthrough(lines: Iterable<string>): {
47
+ owned: Record<string, number>;
48
+ passthrough: Record<string, number>;
49
+ };
50
+ /** Bytes read per log file. The line this census wants is short and the files
51
+ * rotate at ~67MB, so an unbounded read would make MCP boot pay for a log
52
+ * nobody is reading. */
53
+ export declare const MAX_BYTES_PER_FILE = 4000000;
54
+ /** The standing check, emitted at MCP boot.
55
+ *
56
+ * It answers the question nothing else can: did the model keep calling
57
+ * `telegram-api` for a method a typed tool now owns? That failure emits
58
+ * nothing of its own — the call succeeds and the task looks delivered while
59
+ * none of the tool's value lands — so no error log can catch it and only
60
+ * reconciliation can.
61
+ *
62
+ * Healthy is `owned=0` WITH `passthrough>0`. The pair is required: `owned=0
63
+ * passthrough=0` is what a dead counter prints and is indistinguishable from
64
+ * nothing running.
65
+ *
66
+ * Never throws, for the same reason bootCensusLine never throws: a boot throw
67
+ * empties the plugin registry (CLAUDE.md). Rotated `.gz` files are skipped —
68
+ * reading them as text would yield binary noise, not lines. */
69
+ export declare function passthroughCensusLine(logDir: string | undefined): string;
32
70
  //# sourceMappingURL=api-census.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-census.d.ts","sourceRoot":"","sources":["../../src/lib/api-census.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,0BAA0B,CAAC;AAElD;;;;;;;;;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"}
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,7 +1,14 @@
1
+ import { readdirSync, readFileSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
1
3
  import { REFUSED_COUNT } from "./api-guard.js";
2
4
  import { BOT_API_METHODS } from "./api-methods.js";
3
5
  import { listRegisteredBots, resolveBotToken } from "./account-token.js";
6
+ import { THREAD_METHOD } from "../tools/thread.js";
7
+ import { ASK_METHOD } from "../tools/ask.js";
8
+ import { MEDIA_SEND_METHOD } from "../tools/media-send.js";
9
+ import { INVOICE_METHOD } from "../tools/invoice.js";
4
10
  export const CENSUS_TAG = "[telegram-api-census]";
11
+ export const TOOLS_TAG = "[telegram-tools]";
5
12
  /** The local half, emitted once at MCP boot. No network, so every session pays
6
13
  * nothing for it.
7
14
  *
@@ -56,4 +63,103 @@ export function diffMethods(live) {
56
63
  added: live.filter((m) => !shippedSet.has(m)).sort(),
57
64
  };
58
65
  }
66
+ /** Bot API method to the typed tool that owns it: the three tools Task 2588
67
+ * shipped and the three Task 2594 added. Built from each tool's own exported
68
+ * method map rather than a second hand-written list, so a tool and the census
69
+ * cannot disagree about what the tool covers.
70
+ *
71
+ * A method absent here is long tail: `telegram-api` is the right surface for
72
+ * it and a call to it is healthy.
73
+ *
74
+ * Keeping a tool's methods OUT of this map is the quiet failure. The census
75
+ * reconciles passthrough calls against it, so a tool whose methods are missing
76
+ * reports its own bucket as healthy passthrough for ever, and the standing
77
+ * check goes silent about exactly the drift it exists to catch. */
78
+ export const OWNED_METHODS = Object.freeze({
79
+ sendMessage: "telegram-card",
80
+ editMessageText: "telegram-card",
81
+ editMessageReplyMarkup: "telegram-card",
82
+ answerCallbackQuery: "telegram-card",
83
+ getFile: "telegram-media-fetch",
84
+ ...Object.fromEntries(Object.values(THREAD_METHOD).map((m) => [m, "telegram-thread"])),
85
+ ...Object.fromEntries(Object.values(ASK_METHOD).map((m) => [m, "telegram-ask"])),
86
+ ...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"])),
88
+ });
89
+ /** Only `telegram-api`'s own op=call line. The typed tools emit
90
+ * `[telegram-tools] op=call`, which must NOT be counted: this census answers
91
+ * "what still went through the passthrough", and counting the tools' own calls
92
+ * would make owned>0 permanent. */
93
+ const CALL_LINE = /^\[telegram-api\] op=call .*\bmethod=(\w+)/;
94
+ export function tallyPassthrough(lines) {
95
+ const owned = {};
96
+ const passthrough = {};
97
+ for (const line of lines) {
98
+ const m = CALL_LINE.exec(line);
99
+ if (!m)
100
+ continue;
101
+ const method = m[1];
102
+ const bucket = OWNED_METHODS[method] ? owned : passthrough;
103
+ bucket[method] = (bucket[method] ?? 0) + 1;
104
+ }
105
+ return { owned, passthrough };
106
+ }
107
+ /** Bytes read per log file. The line this census wants is short and the files
108
+ * rotate at ~67MB, so an unbounded read would make MCP boot pay for a log
109
+ * nobody is reading. */
110
+ export const MAX_BYTES_PER_FILE = 4_000_000;
111
+ /** The standing check, emitted at MCP boot.
112
+ *
113
+ * It answers the question nothing else can: did the model keep calling
114
+ * `telegram-api` for a method a typed tool now owns? That failure emits
115
+ * nothing of its own — the call succeeds and the task looks delivered while
116
+ * none of the tool's value lands — so no error log can catch it and only
117
+ * reconciliation can.
118
+ *
119
+ * Healthy is `owned=0` WITH `passthrough>0`. The pair is required: `owned=0
120
+ * passthrough=0` is what a dead counter prints and is indistinguishable from
121
+ * nothing running.
122
+ *
123
+ * Never throws, for the same reason bootCensusLine never throws: a boot throw
124
+ * empties the plugin registry (CLAUDE.md). Rotated `.gz` files are skipped —
125
+ * reading them as text would yield binary noise, not lines. */
126
+ export function passthroughCensusLine(logDir) {
127
+ const owned = {};
128
+ const passthrough = {};
129
+ try {
130
+ if (logDir) {
131
+ for (const name of readdirSync(logDir)) {
132
+ if (!name.startsWith("mcp-") || !name.endsWith(".log"))
133
+ continue;
134
+ const path = join(logDir, name);
135
+ let text;
136
+ try {
137
+ if (statSync(path).size > MAX_BYTES_PER_FILE)
138
+ continue;
139
+ text = readFileSync(path, "utf-8");
140
+ }
141
+ catch {
142
+ continue;
143
+ }
144
+ const t = tallyPassthrough(text.split("\n"));
145
+ for (const [k, v] of Object.entries(t.owned))
146
+ owned[k] = (owned[k] ?? 0) + v;
147
+ for (const [k, v] of Object.entries(t.passthrough))
148
+ passthrough[k] = (passthrough[k] ?? 0) + v;
149
+ }
150
+ }
151
+ }
152
+ catch {
153
+ // Zeros, deliberately. See the doc comment.
154
+ }
155
+ const ownedTotal = Object.values(owned).reduce((a, b) => a + b, 0);
156
+ const passTotal = Object.values(passthrough).reduce((a, b) => a + b, 0);
157
+ // Owned methods are named individually: owned>0 must say WHICH call should
158
+ // have gone through a tool, or the operator has a number and no next step.
159
+ const named = Object.entries(owned)
160
+ .sort()
161
+ .map(([m, n]) => `${m}:${n}`)
162
+ .join(",");
163
+ return `${TOOLS_TAG} op=census owned=${ownedTotal} passthrough=${passTotal} methods=${named || "-"}`;
164
+ }
59
165
  //# sourceMappingURL=api-census.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-census.js","sourceRoot":"","sources":["../../src/lib/api-census.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,CAAC,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAElD;;;;;;;;;2EAS2E;AAC3E,MAAM,UAAU,cAAc,CAAC,YAAoB,EAAE,SAA6B;IAChF,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,UAAU,GAAG,kBAAkB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAC/D,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;YACzB,SAAS,GAAG,UAAU,CAAC,MAAM,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAC/D,CAAC,MAAM,CAAC;QACX,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;IACD,OAAO,GAAG,UAAU,YAAY,eAAe,CAAC,MAAM,YAAY,aAAa,SAAS,IAAI,cAAc,SAAS,EAAE,CAAC;AACxH,CAAC;AAED;;;;;;;;;;8BAU8B;AAC9B,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,oDAAoD,CAAC,EAAE,CAAC;QACpF,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED;;0EAE0E;AAC1E,MAAM,UAAU,WAAW,CAAC,IAAuB;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IAC5C,OAAO;QACL,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAC9D,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KACrD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"api-census.js","sourceRoot":"","sources":["../../src/lib/api-census.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAClD,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAC;AAE5C;;;;;;;;;2EAS2E;AAC3E,MAAM,UAAU,cAAc,CAAC,YAAoB,EAAE,SAA6B;IAChF,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,UAAU,GAAG,kBAAkB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAC/D,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;YACzB,SAAS,GAAG,UAAU,CAAC,MAAM,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAC/D,CAAC,MAAM,CAAC;QACX,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;IACD,OAAO,GAAG,UAAU,YAAY,eAAe,CAAC,MAAM,YAAY,aAAa,SAAS,IAAI,cAAc,SAAS,EAAE,CAAC;AACxH,CAAC;AAED;;;;;;;;;;8BAU8B;AAC9B,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,oDAAoD,CAAC,EAAE,CAAC;QACpF,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED;;0EAE0E;AAC1E,MAAM,UAAU,WAAW,CAAC,IAAuB;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IAC5C,OAAO;QACL,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAC9D,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;KACrD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;oEAWoE;AACpE,MAAM,CAAC,MAAM,aAAa,GAAqC,MAAM,CAAC,MAAM,CAAC;IAC3E,WAAW,EAAE,eAAe;IAC5B,eAAe,EAAE,eAAe;IAChC,sBAAsB,EAAE,eAAe;IACvC,mBAAmB,EAAE,eAAe;IACpC,OAAO,EAAE,sBAAsB;IAC/B,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACtF,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAChF,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CACxE;IACD,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC;CACzF,CAAC,CAAC;AAEH;;;oCAGoC;AACpC,MAAM,SAAS,GAAG,4CAA4C,CAAC;AAE/D,MAAM,UAAU,gBAAgB,CAAC,KAAuB;IAItD,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAW,CAAC;QAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC;AAED;;yBAEyB;AACzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE5C;;;;;;;;;;;;;;gEAcgE;AAChE,MAAM,UAAU,qBAAqB,CAAC,MAA0B;IAC9D,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,SAAS;gBACjE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAChC,IAAI,IAAY,CAAC;gBACjB,IAAI,CAAC;oBACH,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,kBAAkB;wBAAE,SAAS;oBACvD,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACrC,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;gBACD,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7E,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;oBAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjG,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAChC,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,GAAG,SAAS,oBAAoB,UAAU,gBAAgB,SAAS,YAAY,KAAK,IAAI,GAAG,EAAE,CAAC;AACvG,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface CardRatio {
2
+ cardsWithButtons: number;
3
+ turns: number;
4
+ }
5
+ /** Pure, so the arithmetic is testable without a log directory. */
6
+ export declare function tallyCardRatio(lines: Iterable<string>): CardRatio;
7
+ /** Both counts from one walk of LOG_DIR over mcp-*.log — the filter and size
8
+ * guard passthroughCensusLine already uses. Rotated `.gz` files are skipped:
9
+ * read as text they yield binary noise, not lines.
10
+ *
11
+ * Never throws. A boot throw empties the plugin registry (CLAUDE.md), so any
12
+ * failure reports zeros, and `turns` on the census line is what lets the
13
+ * operator tell those zeros from a healthy quiet window. */
14
+ export declare function cardRatioFromLogs(logDir: string | undefined): CardRatio;
15
+ //# sourceMappingURL=card-ratio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-ratio.d.ts","sourceRoot":"","sources":["../../src/lib/card-ratio.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS,CAYjE;AAED;;;;;;6DAM6D;AAC7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAwBvE"}