@rubytech/create-maxy-code 0.1.579 → 0.1.580
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.
- package/package.json +1 -1
- package/payload/platform/lib/telegram-media/dist/index.d.ts +45 -0
- package/payload/platform/lib/telegram-media/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/telegram-media/dist/index.js +89 -0
- package/payload/platform/lib/telegram-media/dist/index.js.map +1 -0
- package/payload/platform/lib/telegram-media/src/__tests__/telegram-media.test.ts +104 -0
- package/payload/platform/lib/telegram-media/src/index.ts +102 -0
- package/payload/platform/lib/telegram-media/tsconfig.json +9 -0
- package/payload/platform/lib/telegram-media/vitest.config.ts +9 -0
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/admin/PLUGIN.md +2 -2
- package/payload/platform/plugins/admin/hooks/__tests__/archive-ingest-surface-gate.test.sh +22 -0
- package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh +34 -0
- package/payload/platform/plugins/admin/hooks/__tests__/quote-path-write-gate.test.sh +25 -0
- package/payload/platform/plugins/admin/hooks/archive-ingest-surface-gate.sh +11 -4
- package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +2 -2
- package/payload/platform/plugins/admin/hooks/quote-path-write-gate.sh +6 -3
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +7 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-schema-shape.test.ts +23 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-visit-status-write.test.ts +175 -3
- package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-visits-scope.test.ts +101 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/schema.sql +35 -1
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visit-status.ts +73 -8
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visits.ts +59 -8
- package/payload/platform/plugins/telegram/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/telegram/PLUGIN.md +23 -3
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-census.test.js +99 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-census.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.js +226 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js +143 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js +197 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.js +196 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.js +95 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.js +293 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.js +130 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.js +119 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.js +71 -66
- package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts +15 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js +27 -10
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts +34 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js +106 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts +41 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js +120 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/ask.d.ts +73 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/ask.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/ask.js +270 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/ask.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts +34 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.js +134 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.d.ts +70 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.js +232 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.d.ts +42 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.js +92 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.d.ts +76 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.js +288 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.d.ts +250 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.js +400 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/thread.d.ts +38 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/thread.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/thread.js +120 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/thread.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/vitest.config.ts +14 -0
- package/payload/platform/plugins/telegram/skills/build/SKILL.md +161 -21
- package/payload/platform/scripts/__tests__/hook-matcher-dispatch.test.sh +163 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +6 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
- package/payload/server/public/activity.html +6 -6
- package/payload/server/public/agents.html +5 -5
- package/payload/server/public/assets/{AdminLoginScreens-Bus-Y-rG.js → AdminLoginScreens-Dxv5t1YY.js} +1 -1
- package/payload/server/public/assets/AdminLoginScreens-Dxv5t1YY.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-Dxv5t1YY.js.gz +0 -0
- package/payload/server/public/assets/{AdminShell-Bsm7q3CW.js → AdminShell-BMslfZxN.js} +1 -1
- package/payload/server/public/assets/AdminShell-BMslfZxN.js.br +0 -0
- package/payload/server/public/assets/AdminShell-BMslfZxN.js.gz +0 -0
- package/payload/server/public/assets/{activity-BWqrCyYM.js → activity-kQ3w70LJ.js} +1 -1
- package/payload/server/public/assets/activity-kQ3w70LJ.js.br +0 -0
- package/payload/server/public/assets/activity-kQ3w70LJ.js.gz +0 -0
- package/payload/server/public/assets/{admin-zly7Y6EZ.js → admin-DapcMKCG.js} +1 -1
- package/payload/server/public/assets/admin-DapcMKCG.js.br +0 -0
- package/payload/server/public/assets/admin-DapcMKCG.js.gz +0 -0
- package/payload/server/public/assets/{agents-BsxGD1V1.js → agents-Cn_bZgnD.js} +1 -1
- package/payload/server/public/assets/agents-Cn_bZgnD.js.br +0 -0
- package/payload/server/public/assets/agents-Cn_bZgnD.js.gz +0 -0
- package/payload/server/public/assets/{browser-CRLxTaw2.js → browser-BE-GDk5-.js} +1 -1
- package/payload/server/public/assets/browser-BE-GDk5-.js.br +0 -0
- package/payload/server/public/assets/browser-BE-GDk5-.js.gz +0 -0
- package/payload/server/public/assets/{calendar-Bmp6qI_P.js → calendar-Di7BEHHN.js} +1 -1
- package/payload/server/public/assets/calendar-Di7BEHHN.js.br +0 -0
- package/payload/server/public/assets/calendar-Di7BEHHN.js.gz +0 -0
- package/payload/server/public/assets/chat-DLmikhie.js +1 -0
- package/payload/server/public/assets/chat-DLmikhie.js.br +1 -0
- package/payload/server/public/assets/chat-DLmikhie.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-Id9VAZAz.js +1 -0
- package/payload/server/public/assets/chevron-left-Id9VAZAz.js.br +0 -0
- package/payload/server/public/assets/clock-DKpWWJbJ.js +1 -0
- package/payload/server/public/assets/clock-DKpWWJbJ.js.br +0 -0
- package/payload/server/public/assets/{copy-Bcjpxqzn.js → copy-nkxspu2J.js} +1 -1
- package/payload/server/public/assets/copy-nkxspu2J.js.br +0 -0
- package/payload/server/public/assets/copy-nkxspu2J.js.gz +0 -0
- package/payload/server/public/assets/data-C1_m9Xyf.js +1 -0
- package/payload/server/public/assets/data-C1_m9Xyf.js.br +0 -0
- package/payload/server/public/assets/data-C1_m9Xyf.js.gz +0 -0
- package/payload/server/public/assets/{field-ChKB2l_d.js → field-2rIXxGMt.js} +1 -1
- package/payload/server/public/assets/field-2rIXxGMt.js.br +0 -0
- package/payload/server/public/assets/field-2rIXxGMt.js.gz +0 -0
- package/payload/server/public/assets/{file-text-COZcf7mU.js → file-text-CdSqrscg.js} +1 -1
- package/payload/server/public/assets/file-text-CdSqrscg.js.br +0 -0
- package/payload/server/public/assets/file-text-CdSqrscg.js.gz +0 -0
- package/payload/server/public/assets/{graph-nnV47iqM.js → graph-BfBHHXaC.js} +1 -1
- package/payload/server/public/assets/graph-BfBHHXaC.js.br +0 -0
- package/payload/server/public/assets/graph-BfBHHXaC.js.gz +0 -0
- package/payload/server/public/assets/{graph-labels-x-1MT-3c.js → graph-labels-CHW2aBke.js} +1 -1
- package/payload/server/public/assets/graph-labels-CHW2aBke.js.br +0 -0
- package/payload/server/public/assets/graph-labels-CHW2aBke.js.gz +0 -0
- package/payload/server/public/assets/jsx-runtime-D43jgaWP.css +1 -0
- package/payload/server/public/assets/jsx-runtime-D43jgaWP.css.br +0 -0
- package/payload/server/public/assets/jsx-runtime-D43jgaWP.css.gz +0 -0
- package/payload/server/public/assets/{operator-BAO0-mjU.js → operator-BOiL8sxx.js} +1 -1
- package/payload/server/public/assets/operator-BOiL8sxx.js.br +0 -0
- package/payload/server/public/assets/operator-BOiL8sxx.js.gz +0 -0
- package/payload/server/public/assets/page-CZ6tyH8t.js +1 -0
- package/payload/server/public/assets/page-CZ6tyH8t.js.br +0 -0
- package/payload/server/public/assets/page-CZ6tyH8t.js.gz +0 -0
- package/payload/server/public/assets/{page-B-F08pod.js → page-Cd36Y0h6.js} +1 -1
- package/payload/server/public/assets/page-Cd36Y0h6.js.br +0 -0
- package/payload/server/public/assets/page-Cd36Y0h6.js.gz +0 -0
- package/payload/server/public/assets/play-7LTxCuLX.js +1 -0
- package/payload/server/public/assets/play-7LTxCuLX.js.br +0 -0
- package/payload/server/public/assets/play-7LTxCuLX.js.gz +0 -0
- package/payload/server/public/assets/{public-_HJsUohA.js → public-CVBav4FQ.js} +1 -1
- package/payload/server/public/assets/public-CVBav4FQ.js.br +0 -0
- package/payload/server/public/assets/public-CVBav4FQ.js.gz +0 -0
- package/payload/server/public/assets/{rotate-ccw-DJeAnYLQ.js → rotate-ccw-J9f-GWjm.js} +1 -1
- package/payload/server/public/assets/rotate-ccw-J9f-GWjm.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-J9f-GWjm.js.gz +0 -0
- package/payload/server/public/assets/{routines-CoIVXRCB.js → routines-C1AB-3FR.js} +1 -1
- package/payload/server/public/assets/routines-C1AB-3FR.js.br +0 -0
- package/payload/server/public/assets/routines-C1AB-3FR.js.gz +0 -0
- package/payload/server/public/assets/{skills-BjHt5lDG.js → skills-C4EfNKEx.js} +1 -1
- package/payload/server/public/assets/skills-C4EfNKEx.js.br +0 -0
- package/payload/server/public/assets/skills-C4EfNKEx.js.gz +0 -0
- package/payload/server/public/assets/{tasks-iUFfeA9_.js → tasks-DszD3aZl.js} +1 -1
- package/payload/server/public/assets/tasks-DszD3aZl.js.br +0 -0
- package/payload/server/public/assets/tasks-DszD3aZl.js.gz +0 -0
- package/payload/server/public/assets/{triangle-alert-Dwa986Gg.js → triangle-alert-B5WAyAkC.js} +1 -1
- package/payload/server/public/assets/triangle-alert-B5WAyAkC.js.br +4 -0
- package/payload/server/public/assets/triangle-alert-B5WAyAkC.js.gz +0 -0
- package/payload/server/public/assets/{useCopyFeedback-B1Jp6CsE.js → useCopyFeedback-B2nuNNJw.js} +1 -1
- package/payload/server/public/assets/useCopyFeedback-B2nuNNJw.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-B2nuNNJw.js.gz +0 -0
- package/payload/server/public/assets/{useMediaQuery-CVZYjRf6.js → useMediaQuery-DUPJPHQt.js} +1 -1
- package/payload/server/public/assets/useMediaQuery-DUPJPHQt.js.br +0 -0
- package/payload/server/public/assets/useMediaQuery-DUPJPHQt.js.gz +0 -0
- package/payload/server/public/assets/{useVoiceRecorder-D5b4r4z0.js → useVoiceRecorder-BEgr0nHN.js} +1 -1
- package/payload/server/public/assets/useVoiceRecorder-BEgr0nHN.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BEgr0nHN.js.gz +0 -0
- package/payload/server/public/assets/{wrench-BD7xwbV1.js → wrench-DZJZm17j.js} +1 -1
- package/payload/server/public/assets/wrench-DZJZm17j.js.br +0 -0
- package/payload/server/public/assets/wrench-DZJZm17j.js.gz +0 -0
- package/payload/server/public/browser.html +5 -5
- package/payload/server/public/calendar.html +8 -8
- package/payload/server/public/chat.html +14 -14
- package/payload/server/public/data.html +12 -12
- package/payload/server/public/field.html +3 -3
- package/payload/server/public/graph.html +10 -10
- package/payload/server/public/index.html +14 -14
- package/payload/server/public/operator.html +15 -15
- package/payload/server/public/public.html +14 -14
- package/payload/server/public/routines.html +8 -8
- package/payload/server/public/skills.html +6 -6
- package/payload/server/public/tasks.html +7 -7
- package/payload/server/server.js +965 -687
- package/payload/server/public/assets/AdminLoginScreens-Bus-Y-rG.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-Bus-Y-rG.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-Bsm7q3CW.js.br +0 -0
- package/payload/server/public/assets/AdminShell-Bsm7q3CW.js.gz +0 -0
- package/payload/server/public/assets/activity-BWqrCyYM.js.br +0 -0
- package/payload/server/public/assets/activity-BWqrCyYM.js.gz +0 -0
- package/payload/server/public/assets/admin-zly7Y6EZ.js.br +0 -0
- package/payload/server/public/assets/admin-zly7Y6EZ.js.gz +0 -0
- package/payload/server/public/assets/agents-BsxGD1V1.js.br +0 -0
- package/payload/server/public/assets/agents-BsxGD1V1.js.gz +0 -0
- package/payload/server/public/assets/browser-CRLxTaw2.js.br +0 -0
- package/payload/server/public/assets/browser-CRLxTaw2.js.gz +0 -0
- package/payload/server/public/assets/calendar-Bmp6qI_P.js.br +0 -0
- package/payload/server/public/assets/calendar-Bmp6qI_P.js.gz +0 -0
- package/payload/server/public/assets/chat-ChObDKHy.js +0 -1
- package/payload/server/public/assets/chat-ChObDKHy.js.br +0 -0
- package/payload/server/public/assets/chat-ChObDKHy.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-D2l4jMcd.js +0 -1
- package/payload/server/public/assets/chevron-left-D2l4jMcd.js.br +0 -0
- package/payload/server/public/assets/clock-CMdfsroW.js +0 -1
- package/payload/server/public/assets/clock-CMdfsroW.js.br +0 -0
- package/payload/server/public/assets/clock-CMdfsroW.js.gz +0 -0
- package/payload/server/public/assets/copy-Bcjpxqzn.js.br +0 -0
- package/payload/server/public/assets/copy-Bcjpxqzn.js.gz +0 -0
- package/payload/server/public/assets/data-CFB5Lgw-.js +0 -1
- package/payload/server/public/assets/data-CFB5Lgw-.js.br +0 -0
- package/payload/server/public/assets/data-CFB5Lgw-.js.gz +0 -0
- package/payload/server/public/assets/field-ChKB2l_d.js.br +0 -0
- package/payload/server/public/assets/field-ChKB2l_d.js.gz +0 -0
- package/payload/server/public/assets/file-text-COZcf7mU.js.br +0 -0
- package/payload/server/public/assets/file-text-COZcf7mU.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-x-1MT-3c.js.br +0 -0
- package/payload/server/public/assets/graph-labels-x-1MT-3c.js.gz +0 -0
- package/payload/server/public/assets/graph-nnV47iqM.js.br +0 -0
- package/payload/server/public/assets/graph-nnV47iqM.js.gz +0 -0
- package/payload/server/public/assets/jsx-runtime-CeNZasfC.css +0 -1
- package/payload/server/public/assets/jsx-runtime-CeNZasfC.css.br +0 -0
- package/payload/server/public/assets/jsx-runtime-CeNZasfC.css.gz +0 -0
- package/payload/server/public/assets/operator-BAO0-mjU.js.br +0 -0
- package/payload/server/public/assets/operator-BAO0-mjU.js.gz +0 -0
- package/payload/server/public/assets/page-B-F08pod.js.br +0 -0
- package/payload/server/public/assets/page-B-F08pod.js.gz +0 -0
- package/payload/server/public/assets/page-BMOCy2aD.js +0 -1
- package/payload/server/public/assets/page-BMOCy2aD.js.br +0 -0
- package/payload/server/public/assets/page-BMOCy2aD.js.gz +0 -0
- package/payload/server/public/assets/play-DFtlk8Zs.js +0 -1
- package/payload/server/public/assets/play-DFtlk8Zs.js.br +0 -0
- package/payload/server/public/assets/play-DFtlk8Zs.js.gz +0 -0
- package/payload/server/public/assets/public-_HJsUohA.js.br +0 -0
- package/payload/server/public/assets/public-_HJsUohA.js.gz +0 -0
- package/payload/server/public/assets/rotate-ccw-DJeAnYLQ.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-DJeAnYLQ.js.gz +0 -0
- package/payload/server/public/assets/routines-CoIVXRCB.js.br +0 -0
- package/payload/server/public/assets/routines-CoIVXRCB.js.gz +0 -0
- package/payload/server/public/assets/skills-BjHt5lDG.js.br +0 -0
- package/payload/server/public/assets/skills-BjHt5lDG.js.gz +0 -0
- package/payload/server/public/assets/tasks-iUFfeA9_.js.br +0 -0
- package/payload/server/public/assets/tasks-iUFfeA9_.js.gz +0 -0
- package/payload/server/public/assets/triangle-alert-Dwa986Gg.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-Dwa986Gg.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-B1Jp6CsE.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-B1Jp6CsE.js.gz +0 -0
- package/payload/server/public/assets/useMediaQuery-CVZYjRf6.js.br +0 -0
- package/payload/server/public/assets/useMediaQuery-CVZYjRf6.js.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-D5b4r4z0.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-D5b4r4z0.js.gz +0 -0
- package/payload/server/public/assets/wrench-BD7xwbV1.js.br +0 -0
- package/payload/server/public/assets/wrench-BD7xwbV1.js.gz +0 -0
- /package/payload/server/public/assets/{jsx-runtime-CjJ246F7.js → jsx-runtime-Cjug_Cyb.js} +0 -0
- /package/payload/server/public/assets/{jsx-runtime-CjJ246F7.js.br → jsx-runtime-Cjug_Cyb.js.br} +0 -0
- /package/payload/server/public/assets/{jsx-runtime-CjJ246F7.js.gz → jsx-runtime-Cjug_Cyb.js.gz} +0 -0
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** The typed tool schemas, in their own module so they can be tested.
|
|
3
|
+
*
|
|
4
|
+
* They cannot be tested through index.ts: that file runs
|
|
5
|
+
* `await server.connect(transport)` at module top level, so importing it in a
|
|
6
|
+
* test hangs (the hazard lib/secret-path.ts:9-12 already records). Task 2588's
|
|
7
|
+
* central claim is that a malformed call is rejected HERE rather than by
|
|
8
|
+
* Telegram's 400, and a claim with no test is not a claim.
|
|
9
|
+
*
|
|
10
|
+
* Each `.describe()` is the model's only documentation for that field, so it
|
|
11
|
+
* says what the field is FOR, not merely what type it is. */
|
|
12
|
+
const BOT_ID = z
|
|
13
|
+
.string()
|
|
14
|
+
.describe("Which registered bot to act 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.");
|
|
15
|
+
const CHAT_ID = z
|
|
16
|
+
.union([z.string(), z.number()])
|
|
17
|
+
.describe("Telegram chat ID, or an @username. Telegram documents both.");
|
|
18
|
+
/** Inline keyboard rows, shared by every tool that can attach buttons. One
|
|
19
|
+
* definition rather than one per shape: a button that behaved differently on
|
|
20
|
+
* a poll than on a card would be a difference nobody intended. */
|
|
21
|
+
const BUTTON_ROWS = z
|
|
22
|
+
.array(z.array(z.object({
|
|
23
|
+
text: z.string().describe("Button label"),
|
|
24
|
+
callbackData: z
|
|
25
|
+
.string()
|
|
26
|
+
.optional()
|
|
27
|
+
.describe("Data returned on press. Telegram caps this at 1-64 bytes and refuses longer with nothing in our logs to explain it, so put an id in it, not a sentence."),
|
|
28
|
+
url: z.string().optional().describe("URL opened in the device browser, leaving Telegram"),
|
|
29
|
+
webAppUrl: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("HTTPS URL opened as a Telegram Mini App INSIDE the chat, rather than in the device browser as `url` does. Private chats between a user and the bot only."),
|
|
33
|
+
})))
|
|
34
|
+
.describe("Inline keyboard rows");
|
|
35
|
+
export const CARD_SHAPE = {
|
|
36
|
+
botId: BOT_ID,
|
|
37
|
+
chatId: CHAT_ID,
|
|
38
|
+
text: z.string().describe("Card text. HTML by default; see parseMode."),
|
|
39
|
+
key: z
|
|
40
|
+
.string()
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('Your own idempotency key for this card, for example "job-4102". Scoped to this bot and chat. First call posts and remembers the message; later calls with the same key edit it in place instead of stacking a new card below it. Omit for a one-off message that never updates.'),
|
|
43
|
+
parseMode: z
|
|
44
|
+
.enum(["HTML", "Markdown", "MarkdownV2"])
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Parse mode (default: HTML)"),
|
|
47
|
+
buttons: BUTTON_ROWS.optional(),
|
|
48
|
+
disablePreview: z
|
|
49
|
+
.boolean()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Suppress the link preview Telegram generates from a URL in the text"),
|
|
52
|
+
callbackQueryId: z
|
|
53
|
+
.string()
|
|
54
|
+
.optional()
|
|
55
|
+
.describe("Answer this button press, clearing Telegram's 15-second spinner. Answered AFTER the card is posted or edited, so an expired id cannot block the update."),
|
|
56
|
+
alert: z.boolean().optional().describe("With callbackQueryId: show a dialog instead of a toast"),
|
|
57
|
+
};
|
|
58
|
+
export const MEDIA_FETCH_SHAPE = {
|
|
59
|
+
botId: BOT_ID,
|
|
60
|
+
fileId: z.string().describe("Telegram file_id, as it appeared on the message"),
|
|
61
|
+
destDir: z
|
|
62
|
+
.string()
|
|
63
|
+
.optional()
|
|
64
|
+
.describe("Directory to save into. Defaults to /tmp/maxy-media, the same directory inbound attachments land in."),
|
|
65
|
+
};
|
|
66
|
+
export const THREAD_SHAPE = {
|
|
67
|
+
botId: BOT_ID,
|
|
68
|
+
chatId: CHAT_ID,
|
|
69
|
+
action: z
|
|
70
|
+
.enum(["create", "edit", "close", "reopen", "delete", "unpinAll"])
|
|
71
|
+
.describe("What to do. `create` needs `name`; every other action needs `messageThreadId`."),
|
|
72
|
+
name: z
|
|
73
|
+
.string()
|
|
74
|
+
.optional()
|
|
75
|
+
.describe("Topic title, 1-128 characters. Required for `create`; optional for `edit`, where omitting it keeps the current one."),
|
|
76
|
+
messageThreadId: z
|
|
77
|
+
.number()
|
|
78
|
+
.optional()
|
|
79
|
+
.describe("The topic's id, as `create` returned it. Required for every action except `create`."),
|
|
80
|
+
iconColor: z
|
|
81
|
+
.number()
|
|
82
|
+
.optional()
|
|
83
|
+
.describe("Topic icon colour, RGB. Telegram accepts only 7322096, 16766590, 13338331, 9367192, 16749490 or 16478047. `create` only."),
|
|
84
|
+
iconCustomEmojiId: z
|
|
85
|
+
.string()
|
|
86
|
+
.optional()
|
|
87
|
+
.describe("Custom emoji shown as the topic icon. getForumTopicIconStickers lists the allowed ones."),
|
|
88
|
+
};
|
|
89
|
+
/** Shared by ASK_SHAPE, MEDIA_SEND_SHAPE and CARD_SHAPE's siblings: the four
|
|
90
|
+
* send-envelope options every Bot API send method takes. */
|
|
91
|
+
const REPLY_TO = z
|
|
92
|
+
.number()
|
|
93
|
+
.optional()
|
|
94
|
+
.describe("Quote-reply to this message id. Omit for a normal message.");
|
|
95
|
+
const MESSAGE_THREAD_ID = z
|
|
96
|
+
.number()
|
|
97
|
+
.optional()
|
|
98
|
+
.describe("Send into this forum topic. Forum supergroups, and private chats of bots with forum topic mode enabled, only.");
|
|
99
|
+
const DISABLE_NOTIFICATION = z
|
|
100
|
+
.boolean()
|
|
101
|
+
.optional()
|
|
102
|
+
.describe("Deliver silently: the message arrives with no sound.");
|
|
103
|
+
const PROTECT_CONTENT = z
|
|
104
|
+
.boolean()
|
|
105
|
+
.optional()
|
|
106
|
+
.describe("Stop the recipient forwarding or saving the message.");
|
|
107
|
+
export const ASK_SHAPE = {
|
|
108
|
+
botId: BOT_ID,
|
|
109
|
+
chatId: CHAT_ID,
|
|
110
|
+
kind: z
|
|
111
|
+
.enum([
|
|
112
|
+
"poll",
|
|
113
|
+
"checklist",
|
|
114
|
+
"location",
|
|
115
|
+
"venue",
|
|
116
|
+
"contact",
|
|
117
|
+
"dice",
|
|
118
|
+
"stopPoll",
|
|
119
|
+
"editChecklist",
|
|
120
|
+
"editLiveLocation",
|
|
121
|
+
"stopLiveLocation",
|
|
122
|
+
])
|
|
123
|
+
.describe("What to send or change. `poll` needs question+options; `checklist` and `editChecklist` need businessConnectionId+checklist; `location` and `editLiveLocation` need latitude+longitude; `venue` needs those plus title+address; `contact` needs phoneNumber+firstName; `dice` needs nothing; `stopPoll`, `editChecklist`, `editLiveLocation` and `stopLiveLocation` need messageId."),
|
|
124
|
+
question: z.string().describe("Poll question, 1-300 characters. `poll` only.").optional(),
|
|
125
|
+
options: z
|
|
126
|
+
.array(z.string())
|
|
127
|
+
.optional()
|
|
128
|
+
.describe("Poll answers, 1-12 of them, as plain strings. Telegram's InputPollOption objects are built from these for you. `poll` only."),
|
|
129
|
+
pollType: z
|
|
130
|
+
.enum(["regular", "quiz"])
|
|
131
|
+
.optional()
|
|
132
|
+
.describe("Poll type, default regular. A quiz needs correctOptionIds and can carry an explanation."),
|
|
133
|
+
isAnonymous: z
|
|
134
|
+
.boolean()
|
|
135
|
+
.optional()
|
|
136
|
+
.describe("Whether votes are anonymous. Telegram defaults this to true."),
|
|
137
|
+
allowsMultipleAnswers: z
|
|
138
|
+
.boolean()
|
|
139
|
+
.optional()
|
|
140
|
+
.describe("Let one voter pick several options. Not available on a quiz."),
|
|
141
|
+
correctOptionIds: z
|
|
142
|
+
.array(z.number())
|
|
143
|
+
.optional()
|
|
144
|
+
.describe("0-based indexes of the correct answers. Required when pollType is quiz."),
|
|
145
|
+
explanation: z
|
|
146
|
+
.string()
|
|
147
|
+
.optional()
|
|
148
|
+
.describe("Shown when a voter picks a wrong answer in a quiz, 0-200 characters. `poll` with pollType quiz only."),
|
|
149
|
+
openPeriod: z
|
|
150
|
+
.number()
|
|
151
|
+
.optional()
|
|
152
|
+
.describe("Seconds the poll stays open, 5-2628000. Telegram closes it automatically after."),
|
|
153
|
+
businessConnectionId: z
|
|
154
|
+
.string()
|
|
155
|
+
.optional()
|
|
156
|
+
.describe("The business connection the checklist is sent on behalf of. Telegram requires it for `checklist` and `editChecklist` and accepts it for nothing else here."),
|
|
157
|
+
checklist: z
|
|
158
|
+
.object({
|
|
159
|
+
title: z.string().describe("Checklist title, 1-255 characters"),
|
|
160
|
+
tasks: z
|
|
161
|
+
.array(z.object({
|
|
162
|
+
id: z
|
|
163
|
+
.number()
|
|
164
|
+
.describe("Your own id for this task, positive and unique within the checklist"),
|
|
165
|
+
text: z.string().describe("Task text, 1-100 characters"),
|
|
166
|
+
}))
|
|
167
|
+
.describe("1-30 tasks"),
|
|
168
|
+
othersCanAddTasks: z.boolean().optional().describe("Let other people add tasks"),
|
|
169
|
+
othersCanMarkTasksAsDone: z
|
|
170
|
+
.boolean()
|
|
171
|
+
.optional()
|
|
172
|
+
.describe("Let other people tick tasks off"),
|
|
173
|
+
})
|
|
174
|
+
.optional()
|
|
175
|
+
.describe("The checklist itself. Required for `checklist` and `editChecklist`."),
|
|
176
|
+
latitude: z
|
|
177
|
+
.number()
|
|
178
|
+
.optional()
|
|
179
|
+
.describe("Latitude. Required for `location`, `venue` and `editLiveLocation`."),
|
|
180
|
+
longitude: z
|
|
181
|
+
.number()
|
|
182
|
+
.optional()
|
|
183
|
+
.describe("Longitude. Required for `location`, `venue` and `editLiveLocation`."),
|
|
184
|
+
horizontalAccuracy: z
|
|
185
|
+
.number()
|
|
186
|
+
.optional()
|
|
187
|
+
.describe("Radius of uncertainty in metres, 0-1500."),
|
|
188
|
+
livePeriod: z
|
|
189
|
+
.number()
|
|
190
|
+
.optional()
|
|
191
|
+
.describe("Seconds the location keeps updating, 60-86400, or 2147483647 to keep it live indefinitely. Omit for a one-off pin. A live location is what editLiveLocation and stopLiveLocation act on later."),
|
|
192
|
+
heading: z.number().optional().describe("Direction of travel in degrees, 1-360. Live only."),
|
|
193
|
+
proximityAlertRadius: z
|
|
194
|
+
.number()
|
|
195
|
+
.optional()
|
|
196
|
+
.describe("Alert when another chat member comes within this many metres, 1-100000. Live only."),
|
|
197
|
+
title: z.string().optional().describe("Venue name. `venue` only."),
|
|
198
|
+
address: z.string().optional().describe("Venue street address. `venue` only."),
|
|
199
|
+
phoneNumber: z.string().optional().describe("Contact's phone number. `contact` only."),
|
|
200
|
+
firstName: z.string().optional().describe("Contact's first name. `contact` only."),
|
|
201
|
+
lastName: z.string().optional().describe("Contact's last name. `contact` only."),
|
|
202
|
+
emoji: z
|
|
203
|
+
.string()
|
|
204
|
+
.optional()
|
|
205
|
+
.describe("Which animated die to roll. Telegram accepts only its six dice emoji and defaults to the die. `dice` only."),
|
|
206
|
+
messageId: z
|
|
207
|
+
.number()
|
|
208
|
+
.optional()
|
|
209
|
+
.describe("The message to act on. Required for stopPoll, editChecklist, editLiveLocation and stopLiveLocation."),
|
|
210
|
+
buttons: BUTTON_ROWS.optional(),
|
|
211
|
+
replyToMessageId: REPLY_TO,
|
|
212
|
+
messageThreadId: MESSAGE_THREAD_ID,
|
|
213
|
+
disableNotification: DISABLE_NOTIFICATION,
|
|
214
|
+
protectContent: PROTECT_CONTENT,
|
|
215
|
+
};
|
|
216
|
+
const PARSE_MODE = z
|
|
217
|
+
.enum(["HTML", "Markdown", "MarkdownV2"])
|
|
218
|
+
.optional()
|
|
219
|
+
.describe("How to parse the caption. Telegram documents these three and no others.");
|
|
220
|
+
export const MEDIA_SEND_SHAPE = {
|
|
221
|
+
botId: BOT_ID,
|
|
222
|
+
chatId: CHAT_ID,
|
|
223
|
+
kind: z
|
|
224
|
+
.enum([
|
|
225
|
+
"photo",
|
|
226
|
+
"document",
|
|
227
|
+
"video",
|
|
228
|
+
"audio",
|
|
229
|
+
"voice",
|
|
230
|
+
"animation",
|
|
231
|
+
"videoNote",
|
|
232
|
+
"group",
|
|
233
|
+
"editMedia",
|
|
234
|
+
"editCaption",
|
|
235
|
+
])
|
|
236
|
+
.describe("What to send or change. The seven single-file kinds and `editMedia` need exactly one of fileId, url or filePath; `group` needs 2-10 items; `editCaption` needs no file at all. `editMedia` and `editCaption` need messageId."),
|
|
237
|
+
fileId: z
|
|
238
|
+
.string()
|
|
239
|
+
.optional()
|
|
240
|
+
.describe("A file Telegram already holds, as it appeared on an earlier message. Always cheaper than re-uploading the same bytes. Exactly one of fileId, url or filePath."),
|
|
241
|
+
url: z
|
|
242
|
+
.string()
|
|
243
|
+
.optional()
|
|
244
|
+
.describe("An https URL Telegram fetches the file from itself. Not supported for videoNote, which Telegram documents as file_id or upload only. Exactly one of fileId, url or filePath."),
|
|
245
|
+
filePath: z
|
|
246
|
+
.string()
|
|
247
|
+
.optional()
|
|
248
|
+
.describe("Absolute path to a local file, uploaded as multipart. Exactly one of fileId, url or filePath. Named explicitly rather than sniffed out of a string, because a caption can legitimately begin with a slash."),
|
|
249
|
+
items: z
|
|
250
|
+
.array(z.object({
|
|
251
|
+
type: z
|
|
252
|
+
.enum(["photo", "video", "document", "audio"])
|
|
253
|
+
.describe("What this item is. Telegram groups documents only with documents and audio only with audio; everything else can mix photos and videos."),
|
|
254
|
+
fileId: z.string().optional().describe("A file Telegram already holds"),
|
|
255
|
+
url: z.string().optional().describe("An https URL Telegram fetches itself"),
|
|
256
|
+
filePath: z
|
|
257
|
+
.string()
|
|
258
|
+
.optional()
|
|
259
|
+
.describe("Absolute local path; uploaded as its own part of the one multipart request"),
|
|
260
|
+
caption: z.string().optional().describe("This item's own caption"),
|
|
261
|
+
}))
|
|
262
|
+
.optional()
|
|
263
|
+
.describe("The album's 2-10 items. `group` only."),
|
|
264
|
+
mediaType: z
|
|
265
|
+
.enum(["photo", "video", "document", "audio", "animation"])
|
|
266
|
+
.optional()
|
|
267
|
+
.describe("What the replacement media is. Required for `editMedia`: Telegram's InputMedia object carries its own type, and unlike the single-file kinds the method name does not supply one."),
|
|
268
|
+
caption: z.string().optional().describe("Caption, 0-1024 characters."),
|
|
269
|
+
parseMode: PARSE_MODE,
|
|
270
|
+
showCaptionAboveMedia: z
|
|
271
|
+
.boolean()
|
|
272
|
+
.optional()
|
|
273
|
+
.describe("Put the caption above the media instead of below it."),
|
|
274
|
+
hasSpoiler: z.boolean().optional().describe("Cover the media with a spoiler animation."),
|
|
275
|
+
duration: z.number().optional().describe("Duration in seconds. Video, audio, voice, animation."),
|
|
276
|
+
width: z.number().optional().describe("Width in pixels. Video and animation."),
|
|
277
|
+
height: z.number().optional().describe("Height in pixels. Video and animation."),
|
|
278
|
+
length: z.number().optional().describe("Diameter of the round video. `videoNote` only."),
|
|
279
|
+
performer: z.string().optional().describe("Performer shown in the music player. `audio` only."),
|
|
280
|
+
title: z.string().optional().describe("Track name shown in the music player. `audio` only."),
|
|
281
|
+
supportsStreaming: z
|
|
282
|
+
.boolean()
|
|
283
|
+
.optional()
|
|
284
|
+
.describe("Mark an uploaded video as suitable for streaming. `video` only."),
|
|
285
|
+
messageId: z
|
|
286
|
+
.number()
|
|
287
|
+
.optional()
|
|
288
|
+
.describe("The message to edit. Required for `editMedia` and `editCaption`."),
|
|
289
|
+
buttons: BUTTON_ROWS.optional(),
|
|
290
|
+
replyToMessageId: REPLY_TO,
|
|
291
|
+
messageThreadId: MESSAGE_THREAD_ID,
|
|
292
|
+
disableNotification: DISABLE_NOTIFICATION,
|
|
293
|
+
protectContent: PROTECT_CONTENT,
|
|
294
|
+
};
|
|
295
|
+
const PRICES = z
|
|
296
|
+
.array(z.object({
|
|
297
|
+
label: z.string().describe("What this line of the price breakdown is called"),
|
|
298
|
+
amount: z
|
|
299
|
+
.number()
|
|
300
|
+
.describe("Price in the currency's smallest unit, as a whole number. US$1.45 is 145. A Telegram Stars price is the number of stars."),
|
|
301
|
+
}))
|
|
302
|
+
.describe("The price breakdown: product price, tax, delivery and so on. A Telegram Stars invoice must carry exactly one item.");
|
|
303
|
+
/** There is deliberately no `buttons` field here. Telegram requires the first
|
|
304
|
+
* button of an invoice keyboard to be a Pay button, so a caller passing its own
|
|
305
|
+
* rows gets a refusal or an invoice nobody can pay; omitting reply_markup
|
|
306
|
+
* entirely gets the Pay button for free. */
|
|
307
|
+
export const INVOICE_SHAPE = {
|
|
308
|
+
botId: BOT_ID,
|
|
309
|
+
action: z
|
|
310
|
+
.enum([
|
|
311
|
+
"send",
|
|
312
|
+
"link",
|
|
313
|
+
"answerShipping",
|
|
314
|
+
"answerPreCheckout",
|
|
315
|
+
"balance",
|
|
316
|
+
"transactions",
|
|
317
|
+
"refund",
|
|
318
|
+
"editSubscription",
|
|
319
|
+
])
|
|
320
|
+
.describe("What to do. `send` posts an invoice into a chat and `link` returns a payable URL instead; both need title, description, payload, currency and prices, and `send` also needs chatId. `answerShipping` and `answerPreCheckout` reply to Telegram's checkout queries. `balance`, `transactions`, `refund` and `editSubscription` are the Telegram Stars controls."),
|
|
321
|
+
chatId: CHAT_ID.optional().describe("Where the invoice goes. Required for `send`; `link` has no chat, it returns a URL."),
|
|
322
|
+
title: z.string().optional().describe("Product name, 1-32 characters."),
|
|
323
|
+
description: z.string().optional().describe("Product description, 1-255 characters."),
|
|
324
|
+
payload: z
|
|
325
|
+
.string()
|
|
326
|
+
.optional()
|
|
327
|
+
.describe("Your own reference for this invoice, 1-128 bytes. Never shown to the payer; it comes back on the successful-payment update, which is how you match a payment to a job."),
|
|
328
|
+
providerToken: z
|
|
329
|
+
.string()
|
|
330
|
+
.optional()
|
|
331
|
+
.describe("Payment provider token from BotFather. Omit it, or pass an empty string, for payments in Telegram Stars."),
|
|
332
|
+
currency: z
|
|
333
|
+
.string()
|
|
334
|
+
.optional()
|
|
335
|
+
.describe("Three-letter ISO 4217 code, or XTR for Telegram Stars."),
|
|
336
|
+
prices: PRICES.optional(),
|
|
337
|
+
subscriptionPeriod: z
|
|
338
|
+
.number()
|
|
339
|
+
.optional()
|
|
340
|
+
.describe("Seconds between recurring charges. Telegram currently accepts only 2592000 (30 days), Stars only, and `link` only."),
|
|
341
|
+
maxTipAmount: z
|
|
342
|
+
.number()
|
|
343
|
+
.optional()
|
|
344
|
+
.describe("Largest tip accepted, in the currency's smallest unit."),
|
|
345
|
+
suggestedTipAmounts: z
|
|
346
|
+
.array(z.number())
|
|
347
|
+
.optional()
|
|
348
|
+
.describe("Up to four tip amounts, ascending, each below maxTipAmount."),
|
|
349
|
+
photoUrl: z.string().optional().describe("URL of a product photo shown on the invoice."),
|
|
350
|
+
needName: z.boolean().optional().describe("Ask the payer for their full name."),
|
|
351
|
+
needPhoneNumber: z.boolean().optional().describe("Ask the payer for their phone number."),
|
|
352
|
+
needEmail: z.boolean().optional().describe("Ask the payer for their email address."),
|
|
353
|
+
needShippingAddress: z
|
|
354
|
+
.boolean()
|
|
355
|
+
.optional()
|
|
356
|
+
.describe("Ask the payer for a shipping address. Ignored for Stars payments."),
|
|
357
|
+
isFlexible: z
|
|
358
|
+
.boolean()
|
|
359
|
+
.optional()
|
|
360
|
+
.describe("The final price depends on the shipping method chosen. Setting this is what makes Telegram send you a shipping query to answer."),
|
|
361
|
+
shippingQueryId: z
|
|
362
|
+
.string()
|
|
363
|
+
.optional()
|
|
364
|
+
.describe("The shipping query being answered. `answerShipping` only."),
|
|
365
|
+
preCheckoutQueryId: z
|
|
366
|
+
.string()
|
|
367
|
+
.optional()
|
|
368
|
+
.describe("The pre-checkout query being answered. `answerPreCheckout` only."),
|
|
369
|
+
ok: z
|
|
370
|
+
.boolean()
|
|
371
|
+
.optional()
|
|
372
|
+
.describe("Whether the order can proceed. Required for `answerShipping` and `answerPreCheckout`. False needs errorMessage, which Telegram shows the payer verbatim."),
|
|
373
|
+
shippingOptions: z
|
|
374
|
+
.array(z.object({
|
|
375
|
+
id: z.string().describe("Your own id for this shipping option"),
|
|
376
|
+
title: z.string().describe("What the payer sees, for example Next day"),
|
|
377
|
+
prices: PRICES,
|
|
378
|
+
}))
|
|
379
|
+
.optional()
|
|
380
|
+
.describe("The shipping options offered. Required when answering a shipping query with ok."),
|
|
381
|
+
errorMessage: z
|
|
382
|
+
.string()
|
|
383
|
+
.optional()
|
|
384
|
+
.describe("Why the order cannot proceed, in plain words. Telegram shows this to the payer, so write it for them."),
|
|
385
|
+
offset: z.number().optional().describe("Transactions to skip. `transactions` only."),
|
|
386
|
+
limit: z.number().optional().describe("Transactions to return, 1-100. `transactions` only."),
|
|
387
|
+
userId: z
|
|
388
|
+
.number()
|
|
389
|
+
.optional()
|
|
390
|
+
.describe("The payer's numeric Telegram id. `refund` and `editSubscription`."),
|
|
391
|
+
telegramPaymentChargeId: z
|
|
392
|
+
.string()
|
|
393
|
+
.optional()
|
|
394
|
+
.describe("Telegram's own id for the payment, as it arrived on the successful-payment update. `refund` and `editSubscription`."),
|
|
395
|
+
isCanceled: z
|
|
396
|
+
.boolean()
|
|
397
|
+
.optional()
|
|
398
|
+
.describe("True stops a Stars subscription renewing at the end of the current period; false re-enables one the bot cancelled earlier. Required for `editSubscription`."),
|
|
399
|
+
};
|
|
400
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type ThreadAction = "create" | "edit" | "close" | "reopen" | "delete" | "unpinAll";
|
|
2
|
+
/** Action to Bot API method. Verified against the live parameter tables on
|
|
3
|
+
* 2026-08-08. Exported so the census's owned-method map and this tool cannot
|
|
4
|
+
* disagree about which methods the tool owns. */
|
|
5
|
+
export declare const THREAD_METHOD: Readonly<Record<ThreadAction, string>>;
|
|
6
|
+
export interface ThreadParams {
|
|
7
|
+
botId: string;
|
|
8
|
+
chatId: string | number;
|
|
9
|
+
action: ThreadAction;
|
|
10
|
+
name?: string;
|
|
11
|
+
messageThreadId?: number;
|
|
12
|
+
iconColor?: number;
|
|
13
|
+
iconCustomEmojiId?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ThreadDeps {
|
|
16
|
+
platformRoot: string;
|
|
17
|
+
accountId: string | undefined;
|
|
18
|
+
/** Per-invocation id threading one call's lines together. */
|
|
19
|
+
callId: string;
|
|
20
|
+
log: (line: string) => void;
|
|
21
|
+
fetchImpl?: typeof fetch;
|
|
22
|
+
}
|
|
23
|
+
export interface ThreadResult {
|
|
24
|
+
ok: boolean;
|
|
25
|
+
text: string;
|
|
26
|
+
isError: boolean;
|
|
27
|
+
messageThreadId?: number;
|
|
28
|
+
}
|
|
29
|
+
/** Forum topics, including the private-chat form.
|
|
30
|
+
*
|
|
31
|
+
* Telegram documents createForumTopic as working "in a forum supergroup chat
|
|
32
|
+
* or a private chat with a user", so one client chat can carry a thread per
|
|
33
|
+
* job. The private-chat form needs forum topic mode enabled on the bot:
|
|
34
|
+
* sendMessage's own `message_thread_id` is documented as "for forum
|
|
35
|
+
* supergroups and private chats of bots with forum topic mode enabled only",
|
|
36
|
+
* so a topic created without it is unaddressable. */
|
|
37
|
+
export declare function telegramThread(p: ThreadParams, deps: ThreadDeps): Promise<ThreadResult>;
|
|
38
|
+
//# sourceMappingURL=thread.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../../src/tools/thread.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE1F;;kDAEkD;AAClD,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAO/D,CAAC;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAuCD;;;;;;;sDAOsD;AACtD,wBAAsB,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAuE7F"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { callBotApi } from "../lib/bot-api.js";
|
|
2
|
+
import { listRegisteredBots, resolveBotToken } from "../lib/account-token.js";
|
|
3
|
+
const TAG = "[telegram-tools]";
|
|
4
|
+
const TOOL = "telegram-thread";
|
|
5
|
+
/** Action to Bot API method. Verified against the live parameter tables on
|
|
6
|
+
* 2026-08-08. Exported so the census's owned-method map and this tool cannot
|
|
7
|
+
* disagree about which methods the tool owns. */
|
|
8
|
+
export const THREAD_METHOD = Object.freeze({
|
|
9
|
+
create: "createForumTopic",
|
|
10
|
+
edit: "editForumTopic",
|
|
11
|
+
close: "closeForumTopic",
|
|
12
|
+
reopen: "reopenForumTopic",
|
|
13
|
+
delete: "deleteForumTopic",
|
|
14
|
+
unpinAll: "unpinAllForumTopicMessages",
|
|
15
|
+
});
|
|
16
|
+
/** The per-action required fields Zod cannot express in one flat shape: a
|
|
17
|
+
* discriminated union across six actions would make every optional field
|
|
18
|
+
* conditional in the tool schema, which is harder for the model to read than
|
|
19
|
+
* one flat shape plus this check. Refused BEFORE any network call, which is
|
|
20
|
+
* the whole point of Task 2588. */
|
|
21
|
+
function missingField(p) {
|
|
22
|
+
if (p.action === "create") {
|
|
23
|
+
if (!p.name)
|
|
24
|
+
return "create needs `name` (the topic title, 1-128 characters).";
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
if (p.messageThreadId === undefined) {
|
|
28
|
+
return `${p.action} needs \`messageThreadId\` (the id createForumTopic returned).`;
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
function bodyFor(p) {
|
|
33
|
+
if (p.action === "create") {
|
|
34
|
+
return {
|
|
35
|
+
chat_id: p.chatId,
|
|
36
|
+
name: p.name,
|
|
37
|
+
...(p.iconColor !== undefined ? { icon_color: p.iconColor } : {}),
|
|
38
|
+
...(p.iconCustomEmojiId !== undefined ? { icon_custom_emoji_id: p.iconCustomEmojiId } : {}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if (p.action === "edit") {
|
|
42
|
+
return {
|
|
43
|
+
chat_id: p.chatId,
|
|
44
|
+
message_thread_id: p.messageThreadId,
|
|
45
|
+
...(p.name !== undefined ? { name: p.name } : {}),
|
|
46
|
+
...(p.iconCustomEmojiId !== undefined ? { icon_custom_emoji_id: p.iconCustomEmojiId } : {}),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// close, reopen, delete, unpinAll take these two and nothing else.
|
|
50
|
+
return { chat_id: p.chatId, message_thread_id: p.messageThreadId };
|
|
51
|
+
}
|
|
52
|
+
/** Forum topics, including the private-chat form.
|
|
53
|
+
*
|
|
54
|
+
* Telegram documents createForumTopic as working "in a forum supergroup chat
|
|
55
|
+
* or a private chat with a user", so one client chat can carry a thread per
|
|
56
|
+
* job. The private-chat form needs forum topic mode enabled on the bot:
|
|
57
|
+
* sendMessage's own `message_thread_id` is documented as "for forum
|
|
58
|
+
* supergroups and private chats of bots with forum topic mode enabled only",
|
|
59
|
+
* so a topic created without it is unaddressable. */
|
|
60
|
+
export async function telegramThread(p, deps) {
|
|
61
|
+
const { callId, log } = deps;
|
|
62
|
+
if (!deps.accountId) {
|
|
63
|
+
log(`${TAG} op=no-account callId=${callId} tool=${TOOL}`);
|
|
64
|
+
return {
|
|
65
|
+
ok: false,
|
|
66
|
+
isError: true,
|
|
67
|
+
text: "telegram-thread cannot execute: this MCP instance was launched without ACCOUNT_ID " +
|
|
68
|
+
"(plugin-system metadata-only mode).",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const missing = missingField(p);
|
|
72
|
+
if (missing) {
|
|
73
|
+
log(`${TAG} op=refused callId=${callId} tool=${TOOL} action=${p.action} reason=missing-field`);
|
|
74
|
+
return { ok: false, isError: true, text: missing };
|
|
75
|
+
}
|
|
76
|
+
const token = resolveBotToken(deps.platformRoot, deps.accountId, p.botId);
|
|
77
|
+
if (!token) {
|
|
78
|
+
const known = listRegisteredBots(deps.platformRoot, deps.accountId);
|
|
79
|
+
log(`${TAG} op=no-bot callId=${callId} tool=${TOOL} account=${deps.accountId} botId=${p.botId} registered=${known.length}`);
|
|
80
|
+
return {
|
|
81
|
+
ok: false,
|
|
82
|
+
isError: true,
|
|
83
|
+
text: known.length
|
|
84
|
+
? `No bot "${p.botId}" is registered on this account. Registered: ${known
|
|
85
|
+
.map((b) => `${b.id} (${b.role})`)
|
|
86
|
+
.join(", ")}.`
|
|
87
|
+
: "No Telegram bot is registered on this account. Run the telegram:configure skill first.",
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const method = THREAD_METHOD[p.action];
|
|
91
|
+
log(`${TAG} op=call tool=${TOOL} method=${method} callId=${callId} botId=${p.botId}`);
|
|
92
|
+
let envelope;
|
|
93
|
+
try {
|
|
94
|
+
envelope = await callBotApi(token, method, bodyFor(p), {
|
|
95
|
+
...(deps.fetchImpl ? { fetchImpl: deps.fetchImpl } : {}),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
100
|
+
log(`${TAG} op=error callId=${callId} tool=${TOOL} method=${method} reason="${reason}"`);
|
|
101
|
+
return { ok: false, isError: true, text: `telegram-thread could not reach Telegram: ${reason}` };
|
|
102
|
+
}
|
|
103
|
+
log(`${TAG} op=result callId=${callId} tool=${TOOL} method=${method} ok=${envelope.ok} ` +
|
|
104
|
+
`errorCode=${envelope.error_code ?? "-"} description="${envelope.description ?? ""}"`);
|
|
105
|
+
if (!envelope.ok) {
|
|
106
|
+
return {
|
|
107
|
+
ok: false,
|
|
108
|
+
isError: true,
|
|
109
|
+
text: `Telegram refused ${method} (${envelope.error_code ?? "no code"}): ${envelope.description ?? "no description"}`,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const id = envelope.result?.message_thread_id;
|
|
113
|
+
return {
|
|
114
|
+
ok: true,
|
|
115
|
+
isError: false,
|
|
116
|
+
text: JSON.stringify(envelope.result ?? true, null, 2),
|
|
117
|
+
...(typeof id === "number" ? { messageThreadId: id } : {}),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=thread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread.js","sourceRoot":"","sources":["../../src/tools/thread.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
test: {
|
|
5
|
+
environment: "node",
|
|
6
|
+
// Scoped to src, matching whatsapp/mcp and nine other plugin MCPs. Without
|
|
7
|
+
// it vitest also collects dist/__tests__/*.test.js, which `tsc -p` emits
|
|
8
|
+
// because this plugin's tsconfig includes src/__tests__: every test then
|
|
9
|
+
// runs twice, and a stale compiled copy can pass while the source it was
|
|
10
|
+
// built from fails.
|
|
11
|
+
include: ["src/**/__tests__/**/*.test.ts"],
|
|
12
|
+
testTimeout: 10_000,
|
|
13
|
+
},
|
|
14
|
+
});
|