@rubytech/create-maxy-code 0.1.579 → 0.1.581
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/platform-architecture/SKILL.md +13 -1
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +16 -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/docs/references/telegram-guide.md +12 -0
- package/payload/platform/plugins/telegram/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/telegram/PLUGIN.md +27 -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-ratio.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.test.js +75 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-ratio.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 +152 -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 +231 -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__/live-location-store.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.js +93 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-store.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-tool.test.js +76 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/live-location-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 +89 -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 +38 -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-ratio.d.ts +15 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.js +78 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-ratio.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts +60 -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 +141 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.d.ts +44 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-store.js +88 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/live-location-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 +140 -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/live-location.d.ts +23 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.js +43 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/live-location.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 +171 -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 +7 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
- package/payload/platform/services/telegram-channel/dist/instructions.js +15 -1
- package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
- package/payload/server/{adminuser-self-heal-Y4U3UNKF.js → adminuser-self-heal-ZHFNDKJK.js} +2 -10
- package/payload/server/{chunk-637C2FGE.js → chunk-BFRB2U75.js} +3278 -3381
- package/payload/server/{chunk-6DQCFP2E.js → chunk-BTXRBXMU.js} +3785 -4090
- package/payload/server/{chunk-KVR2FT6O.js → chunk-HYQNUVGO.js} +1 -12
- package/payload/server/{chunk-PGGGWUBM.js → chunk-SKYZG6OT.js} +224 -372
- package/payload/server/{manager-R3XH3BNM.js → manager-CTVTF4YB.js} +3 -3
- package/payload/server/maxy-edge.js +4 -27
- 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-B1lu4-_F.js} +1 -1
- package/payload/server/public/assets/AdminLoginScreens-B1lu4-_F.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-B1lu4-_F.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-CkASgYA7.js} +1 -1
- package/payload/server/public/assets/admin-CkASgYA7.js.br +0 -0
- package/payload/server/public/assets/admin-CkASgYA7.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-CKyMT5Ai.js +1 -0
- package/payload/server/public/assets/chat-CKyMT5Ai.js.br +1 -0
- package/payload/server/public/assets/chat-CKyMT5Ai.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-1c33cAHp.js +1 -0
- package/payload/server/public/assets/data-1c33cAHp.js.br +2 -0
- package/payload/server/public/assets/data-1c33cAHp.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-DRn9LITC.js} +1 -1
- package/payload/server/public/assets/operator-DRn9LITC.js.br +0 -0
- package/payload/server/public/assets/operator-DRn9LITC.js.gz +0 -0
- package/payload/server/public/assets/page-BwqQsoU8.js +1 -0
- package/payload/server/public/assets/page-BwqQsoU8.js.br +0 -0
- package/payload/server/public/assets/page-BwqQsoU8.js.gz +0 -0
- package/payload/server/public/assets/{page-B-F08pod.js → page-D_9mPS6W.js} +1 -1
- package/payload/server/public/assets/page-D_9mPS6W.js.br +0 -0
- package/payload/server/public/assets/page-D_9mPS6W.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-CrjZYpdW.js} +1 -1
- package/payload/server/public/assets/public-CrjZYpdW.js.br +0 -0
- package/payload/server/public/assets/public-CrjZYpdW.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-CCK60d2i.js +2 -0
- package/payload/server/public/assets/useVoiceRecorder-CCK60d2i.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-CCK60d2i.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 +10561 -10491
- package/payload/server/{src-IJCLNFYU.js → src-MM64CYYZ.js} +1 -1
- package/payload/server/{userprofile-reconcile-PUA657YX.js → userprofile-reconcile-TL4JKBPG.js} +1 -8
- 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 +0 -2
- 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
package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visits.ts
CHANGED
|
@@ -3,14 +3,18 @@ import { readSessionCookie, resolveSession } from './_lib/session'
|
|
|
3
3
|
import { q } from './_lib/log'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* One published
|
|
6
|
+
* One published row: ONE VISIT, ONE ATTENDING WORKER (Task 2551).
|
|
7
|
+
*
|
|
8
|
+
* The `visits` table is keyed on the attendance, so a visit two workers share is
|
|
9
|
+
* two rows here. `processVisits` folds them into the `VisitRow` below; nothing
|
|
10
|
+
* outside this file sees this shape.
|
|
7
11
|
*
|
|
8
12
|
* The ontology's own fields (`schema-construction.md`) and the portal person the
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
13
|
+
* row is assigned to, and nothing else. A job sheet's contents are the account's
|
|
14
|
+
* to design, and they are files, which the Task 1910 exchange already carries —
|
|
15
|
+
* so nothing of theirs belongs in this shape.
|
|
12
16
|
*/
|
|
13
|
-
export interface
|
|
17
|
+
export interface VisitReadRow {
|
|
14
18
|
visitId: string
|
|
15
19
|
ownerId: string
|
|
16
20
|
jobId: string
|
|
@@ -38,6 +42,23 @@ export interface VisitRow {
|
|
|
38
42
|
signatures: number
|
|
39
43
|
}
|
|
40
44
|
|
|
45
|
+
/**
|
|
46
|
+
* One visit, as an account's own page renders it: one card naming every worker
|
|
47
|
+
* on it (Task 2551).
|
|
48
|
+
*
|
|
49
|
+
* `owners` is who is attending. It holds one id for an ordinary visit, two for a
|
|
50
|
+
* visit two workers share, and one empty string for a visit whose engineer
|
|
51
|
+
* carries no `portalOwnerId` — the unbound sentinel `visits.ownerId` has always
|
|
52
|
+
* used.
|
|
53
|
+
*
|
|
54
|
+
* `ownerId` is `owners[0]` and is DERIVED, not authoritative. It stays because
|
|
55
|
+
* the planner groups cards onto worker rows by it and that page is not this
|
|
56
|
+
* task's to change; `owners` is what says who is actually on the job.
|
|
57
|
+
*/
|
|
58
|
+
export interface VisitRow extends VisitReadRow {
|
|
59
|
+
owners: string[]
|
|
60
|
+
}
|
|
61
|
+
|
|
41
62
|
/**
|
|
42
63
|
* One candidate for one unallocated visit (Task 2511).
|
|
43
64
|
*
|
|
@@ -117,6 +138,33 @@ function parseJson<T>(raw: string, fallback: T): T {
|
|
|
117
138
|
}
|
|
118
139
|
}
|
|
119
140
|
|
|
141
|
+
/**
|
|
142
|
+
* The attendance rows for one visit, as one card (Task 2551).
|
|
143
|
+
*
|
|
144
|
+
* CALLED AFTER THE SQL FILTER, NEVER BEFORE. An own-scoped person's read already
|
|
145
|
+
* returned only their own attendance, so their card names them and nobody else.
|
|
146
|
+
* Folding first would hand them the colleague names the file drop deliberately
|
|
147
|
+
* withholds, which is the rule `processVisits` states below.
|
|
148
|
+
*
|
|
149
|
+
* The order of `owners` is the read's `ORDER BY`, so the same set always renders
|
|
150
|
+
* the same way rather than in whatever order D1 happened to answer in.
|
|
151
|
+
*/
|
|
152
|
+
export function foldOwners(rows: readonly VisitReadRow[]): VisitRow[] {
|
|
153
|
+
const out: VisitRow[] = []
|
|
154
|
+
const at = new Map<string, VisitRow>()
|
|
155
|
+
for (const r of rows) {
|
|
156
|
+
const held = at.get(r.visitId)
|
|
157
|
+
if (held) {
|
|
158
|
+
if (!held.owners.includes(r.ownerId)) held.owners.push(r.ownerId)
|
|
159
|
+
continue
|
|
160
|
+
}
|
|
161
|
+
const card: VisitRow = { ...r, owners: [r.ownerId] }
|
|
162
|
+
at.set(r.visitId, card)
|
|
163
|
+
out.push(card)
|
|
164
|
+
}
|
|
165
|
+
return out
|
|
166
|
+
}
|
|
167
|
+
|
|
120
168
|
/**
|
|
121
169
|
* The visits a signed-in person may read.
|
|
122
170
|
*
|
|
@@ -160,13 +208,16 @@ export async function processVisits(
|
|
|
160
208
|
ON s.accountId = v.accountId AND s.currentGeneration = v.generation
|
|
161
209
|
WHERE v.accountId = ?` +
|
|
162
210
|
(scoped ? ' AND v.ownerId = ?' : '') +
|
|
163
|
-
|
|
211
|
+
// ownerId joins the ORDER BY because the table is keyed on the attendance
|
|
212
|
+
// (Task 2551): the rows for one visit arrive together and in a fixed order,
|
|
213
|
+
// so the worker list on a shared card does not vary between reads.
|
|
214
|
+
' ORDER BY v.startDate ASC, v.visitId ASC, v.ownerId ASC'
|
|
164
215
|
const stmt = env.DB.prepare(sql)
|
|
165
216
|
const bound = scoped
|
|
166
217
|
? stmt.bind(env.PORTAL_ACCOUNT_ID, session.ownerId)
|
|
167
218
|
: stmt.bind(env.PORTAL_ACCOUNT_ID)
|
|
168
|
-
const rows = await bound.all<
|
|
169
|
-
const visits = rows.results ?? []
|
|
219
|
+
const rows = await bound.all<VisitReadRow>()
|
|
220
|
+
const visits = foldOwners(rows.results ?? [])
|
|
170
221
|
|
|
171
222
|
// THE SAME TWO FILTERS, and the owner one for the same reason: an own-scoped
|
|
172
223
|
// person may see their own row and no other, or this page becomes a way to
|
|
@@ -90,6 +90,18 @@ Just ask for what you want. "Send the team a message with Yes and No buttons",
|
|
|
90
90
|
{{productName}} loads its Telegram build skill, which lists every available
|
|
91
91
|
method and how to call it.
|
|
92
92
|
|
|
93
|
+
When somebody presses one of those buttons or votes in one of those polls,
|
|
94
|
+
{{productName}} hears it and can answer. Before, a press was recorded but reached
|
|
95
|
+
nobody, and a vote was dropped without a trace. A press on a job-sheet card is the
|
|
96
|
+
one exception: the dispatch plugin applies the change and tells the presser
|
|
97
|
+
itself, so {{productName}} does not answer a second time.
|
|
98
|
+
|
|
99
|
+
One limit worth knowing, and it is Telegram's rather than ours. Telegram only
|
|
100
|
+
reports who voted in a poll that is **not** anonymous, and polls are anonymous
|
|
101
|
+
unless you say otherwise. Ask for a poll where you can see who chose what, and
|
|
102
|
+
{{productName}} will send it that way; ask for a plain poll and Telegram will tell
|
|
103
|
+
nobody how anyone voted, so no reply is possible.
|
|
104
|
+
|
|
93
105
|
Five of the 185 are deliberately refused, because they would break your own
|
|
94
106
|
inbound messages: setting or deleting the webhook by hand, polling Telegram for
|
|
95
107
|
updates instead, and the two that move the bot off Telegram's cloud servers.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "telegram",
|
|
3
|
-
"description": "Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent.
|
|
3
|
+
"description": "Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent. Ships typed tools for cards, inbound files, forum threads, structured asks, outbound media and payments, reaches every remaining Bot API method through telegram-api, and carries a build skill for authoring cards, in-place edits and Mini App surfaces.",
|
|
4
4
|
"version": "0.1.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Rubytech LLC"
|
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telegram
|
|
3
3
|
surface: platform
|
|
4
|
-
description: Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent.
|
|
4
|
+
description: Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent. Ships typed tools for cards, inbound files, forum threads, structured asks, outbound media and payments, reaches every remaining Bot API method through telegram-api, and carries a build skill for authoring cards, in-place edits and Mini App surfaces.
|
|
5
5
|
metadata: {"platform":{"optional":false}}
|
|
6
6
|
tools:
|
|
7
|
-
- name:
|
|
7
|
+
- name: telegram-card
|
|
8
8
|
publicAllowlist: false
|
|
9
|
-
adminAllowlist:
|
|
9
|
+
adminAllowlist: true
|
|
10
|
+
riskClass: external
|
|
11
|
+
- name: telegram-media-fetch
|
|
12
|
+
publicAllowlist: false
|
|
13
|
+
adminAllowlist: true
|
|
14
|
+
riskClass: external
|
|
15
|
+
- name: telegram-thread
|
|
16
|
+
publicAllowlist: false
|
|
17
|
+
adminAllowlist: true
|
|
18
|
+
riskClass: external
|
|
19
|
+
- name: telegram-ask
|
|
20
|
+
publicAllowlist: false
|
|
21
|
+
adminAllowlist: true
|
|
22
|
+
riskClass: external
|
|
23
|
+
- name: telegram-media-send
|
|
24
|
+
publicAllowlist: false
|
|
25
|
+
adminAllowlist: true
|
|
26
|
+
riskClass: external
|
|
27
|
+
- name: telegram-invoice
|
|
28
|
+
publicAllowlist: false
|
|
29
|
+
adminAllowlist: true
|
|
10
30
|
riskClass: external
|
|
11
31
|
- name: message-history
|
|
12
32
|
publicAllowlist: false
|
|
@@ -28,6 +48,10 @@ tools:
|
|
|
28
48
|
publicAllowlist: false
|
|
29
49
|
adminAllowlist: true
|
|
30
50
|
riskClass: read
|
|
51
|
+
- name: telegram-live-location
|
|
52
|
+
publicAllowlist: false
|
|
53
|
+
adminAllowlist: true
|
|
54
|
+
riskClass: read
|
|
31
55
|
mcp:
|
|
32
56
|
command: node
|
|
33
57
|
args:
|
|
@@ -2,8 +2,11 @@ import { describe, expect, it } from "vitest";
|
|
|
2
2
|
import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join, resolve } from "node:path";
|
|
5
|
-
import { bootCensusLine, diffMethods, extractMethodNames } from "../lib/api-census.js";
|
|
5
|
+
import { bootCensusLine, diffMethods, extractMethodNames, OWNED_METHODS, tallyPassthrough, passthroughCensusLine, } from "../lib/api-census.js";
|
|
6
6
|
import { BOT_API_METHODS } from "../lib/api-methods.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";
|
|
7
10
|
function stubAccount(bots) {
|
|
8
11
|
const root = mkdtempSync(join(tmpdir(), "tg-census-"));
|
|
9
12
|
const platformRoot = join(root, "platform");
|
|
@@ -74,4 +77,99 @@ describe("extractMethodNames", () => {
|
|
|
74
77
|
expect(diffMethods(extractMethodNames(page))).toEqual({ missing: [], added: [] });
|
|
75
78
|
});
|
|
76
79
|
});
|
|
80
|
+
describe("OWNED_METHODS", () => {
|
|
81
|
+
it("names the tool that owns each method the three shipped tools absorbed", () => {
|
|
82
|
+
expect(OWNED_METHODS.sendMessage).toBe("telegram-card");
|
|
83
|
+
expect(OWNED_METHODS.editMessageText).toBe("telegram-card");
|
|
84
|
+
expect(OWNED_METHODS.editMessageReplyMarkup).toBe("telegram-card");
|
|
85
|
+
expect(OWNED_METHODS.answerCallbackQuery).toBe("telegram-card");
|
|
86
|
+
expect(OWNED_METHODS.getFile).toBe("telegram-media-fetch");
|
|
87
|
+
expect(OWNED_METHODS.createForumTopic).toBe("telegram-thread");
|
|
88
|
+
expect(OWNED_METHODS.unpinAllForumTopicMessages).toBe("telegram-thread");
|
|
89
|
+
});
|
|
90
|
+
it("names every method the Task 2594 tools absorb", () => {
|
|
91
|
+
for (const m of Object.values(ASK_METHOD))
|
|
92
|
+
expect(OWNED_METHODS[m]).toBe("telegram-ask");
|
|
93
|
+
for (const m of Object.values(MEDIA_SEND_METHOD)) {
|
|
94
|
+
expect(OWNED_METHODS[m]).toBe("telegram-media-send");
|
|
95
|
+
}
|
|
96
|
+
for (const m of Object.values(INVOICE_METHOD)) {
|
|
97
|
+
expect(OWNED_METHODS[m]).toBe("telegram-invoice");
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
it("claims nothing no tool implements", () => {
|
|
101
|
+
// The buckets that stay on telegram-api by design: membership,
|
|
102
|
+
// business-account, bot-self-config, org-verification, chat-cosmetic.
|
|
103
|
+
expect(OWNED_METHODS.pinChatMessage).toBeUndefined();
|
|
104
|
+
expect(OWNED_METHODS.setMyCommands).toBeUndefined();
|
|
105
|
+
expect(OWNED_METHODS.sendSticker).toBeUndefined();
|
|
106
|
+
});
|
|
107
|
+
it("counts a passthrough call to a newly owned method as owned, not as healthy passthrough", () => {
|
|
108
|
+
const t = tallyPassthrough([
|
|
109
|
+
"[telegram-api] op=call callId=aa method=sendPhoto listed=true files=1",
|
|
110
|
+
"[telegram-api] op=call callId=bb method=sendInvoice listed=true files=0",
|
|
111
|
+
"[telegram-api] op=call callId=cc method=pinChatMessage listed=true files=0",
|
|
112
|
+
]);
|
|
113
|
+
expect(t.owned).toEqual({ sendPhoto: 1, sendInvoice: 1 });
|
|
114
|
+
expect(t.passthrough).toEqual({ pinChatMessage: 1 });
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe("tallyPassthrough", () => {
|
|
118
|
+
const call = (m) => `[telegram-api] op=call callId=aa method=${m} listed=true files=0`;
|
|
119
|
+
it("splits owned from passthrough by method name", () => {
|
|
120
|
+
const out = tallyPassthrough([
|
|
121
|
+
call("sendMessage"),
|
|
122
|
+
call("pinChatMessage"),
|
|
123
|
+
call("pinChatMessage"),
|
|
124
|
+
]);
|
|
125
|
+
expect(out.owned).toEqual({ sendMessage: 1 });
|
|
126
|
+
expect(out.passthrough).toEqual({ pinChatMessage: 2 });
|
|
127
|
+
});
|
|
128
|
+
it("ignores lines that are not a telegram-api op=call", () => {
|
|
129
|
+
const out = tallyPassthrough([
|
|
130
|
+
"[telegram-api] op=result callId=aa method=sendMessage ok=true",
|
|
131
|
+
"[telegram-tools] op=call tool=telegram-card method=sendMessage callId=bb botId=1",
|
|
132
|
+
"unrelated log line",
|
|
133
|
+
]);
|
|
134
|
+
expect(out.owned).toEqual({});
|
|
135
|
+
expect(out.passthrough).toEqual({});
|
|
136
|
+
});
|
|
137
|
+
it("counts nothing from an empty input, which is the not-measuring state", () => {
|
|
138
|
+
expect(tallyPassthrough([])).toEqual({ owned: {}, passthrough: {} });
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe("passthroughCensusLine", () => {
|
|
142
|
+
it("reports owned rising when an owned method goes through the passthrough", () => {
|
|
143
|
+
const dir = mkdtempSync(join(tmpdir(), "logs-"));
|
|
144
|
+
writeFileSync(join(dir, "mcp-admin-s1.log"), "[telegram-api] op=call callId=aa method=pinChatMessage listed=true files=0\n", "utf-8");
|
|
145
|
+
expect(passthroughCensusLine(dir)).toContain("owned=0 passthrough=1");
|
|
146
|
+
writeFileSync(join(dir, "mcp-admin-s2.log"), "[telegram-api] op=call callId=bb method=sendMessage listed=true files=0\n", "utf-8");
|
|
147
|
+
const risen = passthroughCensusLine(dir);
|
|
148
|
+
expect(risen).toContain("owned=1 passthrough=1");
|
|
149
|
+
expect(risen).toContain("sendMessage:1");
|
|
150
|
+
});
|
|
151
|
+
it("reports owned rising on a newly owned method, then falling to zero", () => {
|
|
152
|
+
// owned=0 is also what a dead counter prints, so a zero on its own proves
|
|
153
|
+
// nothing. The pair is the assertion: the same function must report 1 for a
|
|
154
|
+
// log that holds a sendPoll call and 0 for one that does not.
|
|
155
|
+
const risen = mkdtempSync(join(tmpdir(), "logs-"));
|
|
156
|
+
writeFileSync(join(risen, "mcp-admin-s1.log"), "[telegram-api] op=call callId=aa method=sendPoll listed=true files=0\n" +
|
|
157
|
+
"[telegram-api] op=call callId=bb method=pinChatMessage listed=true files=0\n", "utf-8");
|
|
158
|
+
const line = passthroughCensusLine(risen);
|
|
159
|
+
expect(line).toContain("owned=1 passthrough=1");
|
|
160
|
+
expect(line).toContain("sendPoll:1");
|
|
161
|
+
const quiet = mkdtempSync(join(tmpdir(), "logs-"));
|
|
162
|
+
writeFileSync(join(quiet, "mcp-admin-s1.log"), "[telegram-api] op=call callId=aa method=pinChatMessage listed=true files=0\n", "utf-8");
|
|
163
|
+
expect(passthroughCensusLine(quiet)).toContain("owned=0 passthrough=1");
|
|
164
|
+
});
|
|
165
|
+
it("reports zeros rather than throwing when LOG_DIR is absent", () => {
|
|
166
|
+
expect(passthroughCensusLine(undefined)).toContain("owned=0 passthrough=0");
|
|
167
|
+
expect(passthroughCensusLine("/no/such/dir")).toContain("owned=0 passthrough=0");
|
|
168
|
+
});
|
|
169
|
+
it("skips rotated .gz files, which it cannot read as text", () => {
|
|
170
|
+
const dir = mkdtempSync(join(tmpdir(), "logs-"));
|
|
171
|
+
writeFileSync(join(dir, "mcp-admin-s1.log.gz"), Buffer.from([0x1f, 0x8b, 0x08]));
|
|
172
|
+
expect(passthroughCensusLine(dir)).toContain("owned=0 passthrough=0");
|
|
173
|
+
});
|
|
174
|
+
});
|
|
77
175
|
//# sourceMappingURL=api-census.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-census.test.js","sourceRoot":"","sources":["../../src/__tests__/api-census.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"api-census.test.js","sourceRoot":"","sources":["../../src/__tests__/api-census.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-tool.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ask-tool.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { describe, expect, it, beforeEach } from "vitest";
|
|
2
|
+
import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { telegramAsk, ASK_METHOD } from "../tools/ask.js";
|
|
6
|
+
const ACC = "acc-1";
|
|
7
|
+
const BOT = "111";
|
|
8
|
+
let platformRoot;
|
|
9
|
+
let lines;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
const root = mkdtempSync(join(tmpdir(), "brand-"));
|
|
12
|
+
mkdirSync(join(root, "platform"), { recursive: true });
|
|
13
|
+
const dir = join(root, "data", "accounts", ACC);
|
|
14
|
+
mkdirSync(dir, { recursive: true });
|
|
15
|
+
writeFileSync(join(dir, "account.json"), JSON.stringify({ telegram: { bots: [{ id: BOT, role: "admin", token: `${BOT}:SECRET` }] } }), "utf-8");
|
|
16
|
+
platformRoot = join(root, "platform");
|
|
17
|
+
lines = [];
|
|
18
|
+
});
|
|
19
|
+
function recorder(reply) {
|
|
20
|
+
const calls = [];
|
|
21
|
+
const fetchImpl = (async (url, init) => {
|
|
22
|
+
calls.push({
|
|
23
|
+
method: String(url).split("/").pop() ?? "",
|
|
24
|
+
body: JSON.parse(String(init.body)),
|
|
25
|
+
});
|
|
26
|
+
return new Response(JSON.stringify(reply));
|
|
27
|
+
});
|
|
28
|
+
return { calls, fetchImpl };
|
|
29
|
+
}
|
|
30
|
+
function deps(fetchImpl) {
|
|
31
|
+
return {
|
|
32
|
+
platformRoot,
|
|
33
|
+
accountId: ACC,
|
|
34
|
+
callId: "cafe",
|
|
35
|
+
log: (l) => lines.push(l),
|
|
36
|
+
fetchImpl,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
describe("ASK_METHOD", () => {
|
|
40
|
+
it("maps every kind to its Bot API method name", () => {
|
|
41
|
+
expect(ASK_METHOD).toEqual({
|
|
42
|
+
poll: "sendPoll",
|
|
43
|
+
checklist: "sendChecklist",
|
|
44
|
+
location: "sendLocation",
|
|
45
|
+
venue: "sendVenue",
|
|
46
|
+
contact: "sendContact",
|
|
47
|
+
dice: "sendDice",
|
|
48
|
+
stopPoll: "stopPoll",
|
|
49
|
+
editChecklist: "editMessageChecklist",
|
|
50
|
+
editLiveLocation: "editMessageLiveLocation",
|
|
51
|
+
stopLiveLocation: "stopMessageLiveLocation",
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe("telegramAsk", () => {
|
|
56
|
+
it("sends a poll with options as InputPollOption objects", async () => {
|
|
57
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: { message_id: 5 } });
|
|
58
|
+
const out = await telegramAsk({ botId: BOT, chatId: -100123, kind: "poll", question: "Which slot?", options: ["9am", "2pm"] }, deps(fetchImpl));
|
|
59
|
+
expect(out.isError).toBe(false);
|
|
60
|
+
expect(calls[0]?.method).toBe("sendPoll");
|
|
61
|
+
expect(calls[0]?.body).toEqual({
|
|
62
|
+
chat_id: -100123,
|
|
63
|
+
question: "Which slot?",
|
|
64
|
+
options: [{ text: "9am" }, { text: "2pm" }],
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
it("passes the quiz optionals with the Bot API's own names", async () => {
|
|
68
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: { message_id: 1 } });
|
|
69
|
+
await telegramAsk({
|
|
70
|
+
botId: BOT,
|
|
71
|
+
chatId: 1,
|
|
72
|
+
kind: "poll",
|
|
73
|
+
question: "q",
|
|
74
|
+
options: ["a", "b"],
|
|
75
|
+
pollType: "quiz",
|
|
76
|
+
correctOptionIds: [1],
|
|
77
|
+
isAnonymous: false,
|
|
78
|
+
openPeriod: 300,
|
|
79
|
+
}, deps(fetchImpl));
|
|
80
|
+
expect(calls[0]?.body).toMatchObject({
|
|
81
|
+
type: "quiz",
|
|
82
|
+
correct_option_ids: [1],
|
|
83
|
+
is_anonymous: false,
|
|
84
|
+
open_period: 300,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
it("refuses a poll with no question, before any network call", async () => {
|
|
88
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: {} });
|
|
89
|
+
const out = await telegramAsk({ botId: BOT, chatId: 1, kind: "poll", options: ["a"] }, deps(fetchImpl));
|
|
90
|
+
expect(out.isError).toBe(true);
|
|
91
|
+
expect(out.text).toContain("question");
|
|
92
|
+
expect(calls.length).toBe(0);
|
|
93
|
+
});
|
|
94
|
+
it("refuses a checklist with no businessConnectionId, before any network call", async () => {
|
|
95
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: {} });
|
|
96
|
+
const out = await telegramAsk({
|
|
97
|
+
botId: BOT,
|
|
98
|
+
chatId: 1,
|
|
99
|
+
kind: "checklist",
|
|
100
|
+
checklist: { title: "Snags", tasks: [{ id: 1, text: "Seal the flashing" }] },
|
|
101
|
+
}, deps(fetchImpl));
|
|
102
|
+
expect(out.isError).toBe(true);
|
|
103
|
+
expect(out.text).toContain("businessConnectionId");
|
|
104
|
+
expect(calls.length).toBe(0);
|
|
105
|
+
});
|
|
106
|
+
it("refuses a venue missing its address, before any network call", async () => {
|
|
107
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: {} });
|
|
108
|
+
const out = await telegramAsk({ botId: BOT, chatId: 1, kind: "venue", latitude: 51.5, longitude: -0.1, title: "Site" }, deps(fetchImpl));
|
|
109
|
+
expect(out.isError).toBe(true);
|
|
110
|
+
expect(out.text).toContain("address");
|
|
111
|
+
expect(calls.length).toBe(0);
|
|
112
|
+
});
|
|
113
|
+
it("nests the checklist as Telegram's InputChecklist", async () => {
|
|
114
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: { message_id: 3 } });
|
|
115
|
+
await telegramAsk({
|
|
116
|
+
botId: BOT,
|
|
117
|
+
chatId: 1,
|
|
118
|
+
kind: "checklist",
|
|
119
|
+
businessConnectionId: "bc1",
|
|
120
|
+
checklist: {
|
|
121
|
+
title: "Snags",
|
|
122
|
+
tasks: [{ id: 1, text: "Seal" }],
|
|
123
|
+
othersCanMarkTasksAsDone: true,
|
|
124
|
+
},
|
|
125
|
+
}, deps(fetchImpl));
|
|
126
|
+
expect(calls[0]?.body).toEqual({
|
|
127
|
+
chat_id: 1,
|
|
128
|
+
business_connection_id: "bc1",
|
|
129
|
+
checklist: {
|
|
130
|
+
title: "Snags",
|
|
131
|
+
tasks: [{ id: 1, text: "Seal" }],
|
|
132
|
+
others_can_mark_tasks_as_done: true,
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
it("sends only chat_id and message_id for stopPoll and stopLiveLocation", async () => {
|
|
137
|
+
for (const kind of ["stopPoll", "stopLiveLocation"]) {
|
|
138
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: true });
|
|
139
|
+
await telegramAsk({ botId: BOT, chatId: 5, kind, messageId: 9 }, deps(fetchImpl));
|
|
140
|
+
expect(calls[0]?.body).toEqual({ chat_id: 5, message_id: 9 });
|
|
141
|
+
expect(calls[0]?.method).toBe(ASK_METHOD[kind]);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
it("adds the shared optionals to any kind", async () => {
|
|
145
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: { message_id: 1 } });
|
|
146
|
+
await telegramAsk({
|
|
147
|
+
botId: BOT,
|
|
148
|
+
chatId: 1,
|
|
149
|
+
kind: "dice",
|
|
150
|
+
messageThreadId: 7,
|
|
151
|
+
disableNotification: true,
|
|
152
|
+
replyToMessageId: 42,
|
|
153
|
+
buttons: [[{ text: "Again", callbackData: "roll" }]],
|
|
154
|
+
}, deps(fetchImpl));
|
|
155
|
+
expect(calls[0]?.body).toMatchObject({
|
|
156
|
+
message_thread_id: 7,
|
|
157
|
+
disable_notification: true,
|
|
158
|
+
reply_parameters: { message_id: 42 },
|
|
159
|
+
reply_markup: { inline_keyboard: [[{ text: "Again", callback_data: "roll" }]] },
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
it("withholds the send-envelope options from the edit and stop kinds", async () => {
|
|
163
|
+
// Telegram's tables carry reply_markup on stopPoll, editMessageChecklist,
|
|
164
|
+
// editMessageLiveLocation and stopMessageLiveLocation, and none of the
|
|
165
|
+
// send-envelope options, so a caller setting them must not reach the wire.
|
|
166
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: true });
|
|
167
|
+
await telegramAsk({
|
|
168
|
+
botId: BOT,
|
|
169
|
+
chatId: 5,
|
|
170
|
+
kind: "stopPoll",
|
|
171
|
+
messageId: 9,
|
|
172
|
+
disableNotification: true,
|
|
173
|
+
protectContent: true,
|
|
174
|
+
replyToMessageId: 3,
|
|
175
|
+
messageThreadId: 8,
|
|
176
|
+
buttons: [[{ text: "Results", callbackData: "r" }]],
|
|
177
|
+
}, deps(fetchImpl));
|
|
178
|
+
expect(calls[0]?.body).toEqual({
|
|
179
|
+
chat_id: 5,
|
|
180
|
+
message_id: 9,
|
|
181
|
+
reply_markup: { inline_keyboard: [[{ text: "Results", callback_data: "r" }]] },
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
it("omits message_thread_id on a checklist, the one send method with no such field", async () => {
|
|
185
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: { message_id: 3 } });
|
|
186
|
+
await telegramAsk({
|
|
187
|
+
botId: BOT,
|
|
188
|
+
chatId: 1,
|
|
189
|
+
kind: "checklist",
|
|
190
|
+
businessConnectionId: "bc1",
|
|
191
|
+
checklist: { title: "Snags", tasks: [{ id: 1, text: "Seal" }] },
|
|
192
|
+
messageThreadId: 8,
|
|
193
|
+
disableNotification: true,
|
|
194
|
+
}, deps(fetchImpl));
|
|
195
|
+
expect(calls[0]?.body).toEqual({
|
|
196
|
+
chat_id: 1,
|
|
197
|
+
business_connection_id: "bc1",
|
|
198
|
+
checklist: { title: "Snags", tasks: [{ id: 1, text: "Seal" }] },
|
|
199
|
+
disable_notification: true,
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
it("relays Telegram's refusal unaltered", async () => {
|
|
203
|
+
const { fetchImpl } = recorder({
|
|
204
|
+
ok: false,
|
|
205
|
+
error_code: 400,
|
|
206
|
+
description: "Bad Request: poll can't be sent to channel direct messages chats",
|
|
207
|
+
});
|
|
208
|
+
const out = await telegramAsk({ botId: BOT, chatId: 1, kind: "poll", question: "q", options: ["a"] }, deps(fetchImpl));
|
|
209
|
+
expect(out.isError).toBe(true);
|
|
210
|
+
expect(out.text).toContain("channel direct messages chats");
|
|
211
|
+
});
|
|
212
|
+
it("emits a call/result pair sharing one callId", async () => {
|
|
213
|
+
const { fetchImpl } = recorder({ ok: true, result: { message_id: 1 } });
|
|
214
|
+
await telegramAsk({ botId: BOT, chatId: 1, kind: "dice" }, deps(fetchImpl));
|
|
215
|
+
expect(lines.join("\n")).toContain("op=call tool=telegram-ask method=sendDice callId=cafe");
|
|
216
|
+
expect(lines.join("\n")).toContain("op=result callId=cafe");
|
|
217
|
+
});
|
|
218
|
+
it("refuses when the account has no such bot, naming the registered ones", async () => {
|
|
219
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: {} });
|
|
220
|
+
const out = await telegramAsk({ botId: "999", chatId: 1, kind: "dice" }, deps(fetchImpl));
|
|
221
|
+
expect(out.isError).toBe(true);
|
|
222
|
+
expect(out.text).toContain(BOT);
|
|
223
|
+
expect(calls.length).toBe(0);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
//# sourceMappingURL=ask-tool.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-tool.test.js","sourceRoot":"","sources":["../../src/__tests__/ask-tool.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card-ratio.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/card-ratio.test.ts"],"names":[],"mappings":""}
|