@xopcai/xopc 0.0.109 → 0.0.111
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/README.md +46 -4
- package/README.zh-CN.md +46 -4
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/pairing-config-resolver.d.ts +1 -0
- package/dist/extensions/feishu/src/pairing-config-resolver.js +30 -0
- package/dist/extensions/feishu/src/pairing-config-resolver.js.map +1 -0
- package/dist/extensions/feishu/src/plugin.d.ts +1 -0
- package/dist/extensions/feishu/src/plugin.js +1 -0
- package/dist/extensions/feishu/src/plugin.js.map +1 -1
- package/dist/extensions/telegram/src/access-control.d.ts +2 -1
- package/dist/extensions/telegram/src/access-control.js.map +1 -1
- package/dist/extensions/telegram/src/account-manager.d.ts +2 -1
- package/dist/extensions/telegram/src/account-manager.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/gateway-setup.js +26 -26
- package/dist/extensions/telegram/src/adapters/gateway-setup.js.map +1 -1
- package/dist/extensions/telegram/src/adapters/onboard-cli.js +8 -4
- package/dist/extensions/telegram/src/adapters/onboard-cli.js.map +1 -1
- package/dist/extensions/telegram/src/config-schema.d.ts +88 -50
- package/dist/extensions/telegram/src/config-schema.js +40 -32
- package/dist/extensions/telegram/src/config-schema.js.map +1 -1
- package/dist/extensions/telegram/src/config-types.d.ts +54 -0
- package/dist/extensions/telegram/src/config-types.js +1 -0
- package/dist/extensions/telegram/src/doctor.js +17 -16
- package/dist/extensions/telegram/src/doctor.js.map +1 -1
- package/dist/extensions/telegram/src/exec-approvals.js +2 -3
- package/dist/extensions/telegram/src/exec-approvals.js.map +1 -1
- package/dist/extensions/telegram/src/group-config-resolver.d.ts +1 -1
- package/dist/extensions/telegram/src/group-config-resolver.js.map +1 -1
- package/dist/extensions/telegram/src/pairing-config-resolver.d.ts +1 -0
- package/dist/extensions/telegram/src/pairing-config-resolver.js +56 -0
- package/dist/extensions/telegram/src/pairing-config-resolver.js.map +1 -0
- package/dist/extensions/telegram/src/plugin.d.ts +1 -0
- package/dist/extensions/telegram/src/plugin.js +8 -9
- package/dist/extensions/telegram/src/plugin.js.map +1 -1
- package/dist/extensions/telegram/xopc.extension.json +156 -122
- package/dist/extensions/weixin/src/pairing-config-resolver.d.ts +1 -0
- package/dist/extensions/weixin/src/pairing-config-resolver.js +54 -0
- package/dist/extensions/weixin/src/pairing-config-resolver.js.map +1 -0
- package/dist/extensions/weixin/src/plugin.d.ts +1 -0
- package/dist/extensions/weixin/src/plugin.js +1 -0
- package/dist/extensions/weixin/src/plugin.js.map +1 -1
- package/dist/gateway/static/root/assets/Combination-BzaXOLd9.js +41 -0
- package/dist/gateway/static/root/assets/agent-avatar-dicebear-zlx9l5Yp.js +1 -0
- package/dist/gateway/static/root/assets/agent-browser-settings-page-B-0zGjt8.js +6 -0
- package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-Bz7JWjRM.js +1 -0
- package/dist/gateway/static/root/assets/agents-DwDnJlXT.js +71 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-DaQwdeCq.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-D2zv6r3P.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-BIppe_jj.js +1 -0
- package/dist/gateway/static/root/assets/archive-plugin-DEmu8eH7.js +1 -0
- package/dist/gateway/static/root/assets/attachment-load-B98lJoN5.js +2 -0
- package/dist/gateway/static/root/assets/{attachment-preview-renderer-CybMSIoS.js → attachment-preview-renderer-DonnL2dL.js} +1 -1
- package/dist/gateway/static/root/assets/binary-plugins-CL9QKmyo.js +2 -0
- package/dist/gateway/static/root/assets/block-editor-BOAhMAhT.js +180 -0
- package/dist/gateway/static/root/assets/channels-settings-Br8iRnXp.js +1 -0
- package/dist/gateway/static/root/assets/cn-JdwAhgNB.js +1 -0
- package/dist/gateway/static/root/assets/code-editor-dZTY2dRW.js +1 -0
- package/dist/gateway/static/root/assets/config-api-0o1WYdz2.js +3 -0
- package/dist/gateway/static/root/assets/connectors-settings-DDvHo9in.js +2 -0
- package/dist/gateway/static/root/assets/cron-api-Dj_UZKST.js +1 -0
- package/dist/gateway/static/root/assets/cron-dreaming-jobs-nCMWCf0p.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-Dv7GII9G.js +1 -0
- package/dist/gateway/static/root/assets/cron-schedule-picker-DH10KgD6.js +1 -0
- package/dist/gateway/static/root/assets/dist-By6Rh2ee.js +1 -0
- package/dist/gateway/static/root/assets/dist-CkobR7mk.js +1 -0
- package/dist/gateway/static/root/assets/dist-DokQNVMQ.js +1 -0
- package/dist/gateway/static/root/assets/dreaming-scene-BHMRVEUS.js +4585 -0
- package/dist/gateway/static/root/assets/dreaming-settings-L2rgZDQl.js +1 -0
- package/dist/gateway/static/root/assets/extension-debug-page-Cjx6pZVz.js +1 -0
- package/dist/gateway/static/root/assets/{extension-page-DNcTendk.js → extension-page-BSPNL90V.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-m_UQYkVc.js +1 -0
- package/dist/gateway/static/root/assets/fetch-Bs7in_4F.js +1 -0
- package/dist/gateway/static/root/assets/format-interval-label-CftJ5uXu.js +1 -0
- package/dist/gateway/static/root/assets/gateway-config-api-Clfck-hW.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-CS177xni.js +1 -0
- package/dist/gateway/static/root/assets/gateway-startup-retry-BkjVJc38.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-kqJue0sE.js +1 -0
- package/dist/gateway/static/root/assets/goals-page-C0FujUB5.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-CJnzNSDo.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-config-api-Cp7CPuIn.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-ifSI1Wbh.js +1 -0
- package/dist/gateway/static/root/assets/html-workspace-editor-CQLWDiwE.js +1 -0
- package/dist/gateway/static/root/assets/index-COkF54xv.js +121 -0
- package/dist/gateway/static/root/assets/index-DIaSNGEO.css +1 -0
- package/dist/gateway/static/root/assets/interval-presets-B29Ss_2y.js +2 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings--MI1rYl7.js +1 -0
- package/dist/gateway/static/root/assets/locale-store-DjbfSsfA.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-BwrVNlyW.js +2 -0
- package/dist/gateway/static/root/assets/markdown-editor-AssmZFx4.js +2 -0
- package/dist/gateway/static/root/assets/markdown-split-B_oc9lJe.js +1 -0
- package/dist/gateway/static/root/assets/media-plugins-DLPvB5H3.js +1 -0
- package/dist/gateway/static/root/assets/mermaid-render-BbqDc_LQ.js +134 -0
- package/dist/gateway/static/root/assets/messages-Csef1aW7.js +3 -0
- package/dist/gateway/static/root/assets/middleware-Pd0e8Igk.js +1 -0
- package/dist/gateway/static/root/assets/models-hub-panel-DHGiTIvf.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-BM7zlDiT.js +2 -0
- package/dist/gateway/static/root/assets/note-image-lightbox-rSqAgOi9.js +1 -0
- package/dist/gateway/static/root/assets/note-time-hm6JO_Wi.js +1 -0
- package/dist/gateway/static/root/assets/notes-page-C9ACGEty.js +1 -0
- package/dist/gateway/static/root/assets/preview-open-alternatives-Bw_N2oZi.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-BhcWIKuM.js +1 -0
- package/dist/gateway/static/root/assets/save-bar-controls-CNP2jmw0.js +1 -0
- package/dist/gateway/static/root/assets/schedule-field-BPAWui3P.js +1 -0
- package/dist/gateway/static/root/assets/schedule-summary-B-hdSRdR.js +1 -0
- package/dist/gateway/static/root/assets/schema-form-CDPzua9q.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-DzkpSDZr.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BYS-rpzn.js +1 -0
- package/dist/gateway/static/root/assets/settings-collapsible-section-C9bff85B.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-section-BsrK7TBF.js +1 -0
- package/dist/gateway/static/root/assets/settings-page-DWK4Zo7s.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-DJiksNu4.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-DnutoY_S.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-6oRgJMpn.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-CU9i0nJV.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-ERbdWENm.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-qP1JDtDd.js +1 -0
- package/dist/gateway/static/root/assets/theme-store-CD2wtgZV.js +1 -0
- package/dist/gateway/static/root/assets/use-agent-defaults-form-D3FGVLZb.js +1 -0
- package/dist/gateway/static/root/assets/use-blob-object-url-D4BFuzZB.js +1 -0
- package/dist/gateway/static/root/assets/use-channel-catalog-C4mg1hjD.js +1 -0
- package/dist/gateway/static/root/assets/use-settings-tab-guard-F6C0mpJt.js +1 -0
- package/dist/gateway/static/root/assets/vendor-codemirror-CNP1wPe7.js +45 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-BnDDb6qO.js +1 -0
- package/dist/gateway/static/root/assets/voice-player-store-B2EwIhtY.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-page.utils-BcZQmKBX.js → workflow-page.utils-CRB7WX9l.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-2Fptr0je.js +18 -0
- package/dist/gateway/static/root/index.html +12 -10
- package/dist/package.js +1 -1
- package/dist/src/agent/goals/checklist-judge.d.ts +5 -0
- package/dist/src/agent/goals/checklist-judge.js +26 -2
- package/dist/src/agent/goals/checklist-judge.js.map +1 -1
- package/dist/src/agent/goals/evaluate-turn.d.ts +5 -1
- package/dist/src/agent/goals/evaluate-turn.js +29 -3
- package/dist/src/agent/goals/evaluate-turn.js.map +1 -1
- package/dist/src/agent/goals/goal-locale.d.ts +0 -2
- package/dist/src/agent/goals/goal-locale.js +2 -15
- package/dist/src/agent/goals/goal-locale.js.map +1 -1
- package/dist/src/agent/goals/persistent-goal-service.d.ts +9 -0
- package/dist/src/agent/goals/persistent-goal-service.js +2 -1
- package/dist/src/agent/goals/persistent-goal-service.js.map +1 -1
- package/dist/src/agent/goals/post-turn.d.ts +7 -0
- package/dist/src/agent/goals/post-turn.js +68 -23
- package/dist/src/agent/goals/post-turn.js.map +1 -1
- package/dist/src/agent/goals/state.d.ts +0 -5
- package/dist/src/agent/goals/state.js +1 -96
- package/dist/src/agent/goals/state.js.map +1 -1
- package/dist/src/agent/messaging/command-handler.d.ts +4 -0
- package/dist/src/agent/messaging/command-handler.js +6 -2
- package/dist/src/agent/messaging/command-handler.js.map +1 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +2 -0
- package/dist/src/agent/service/direct-turn-helpers.js +3 -2
- package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +10 -1
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service.js +20 -1
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +8 -0
- package/dist/src/agent/tools/cronjob-tool.d.ts +2 -0
- package/dist/src/agent/tools/cronjob-tool.js +27 -4
- package/dist/src/agent/tools/cronjob-tool.js.map +1 -1
- package/dist/src/agent/tools/edit.d.ts +2 -0
- package/dist/src/agent/tools/edit.js +10 -0
- package/dist/src/agent/tools/edit.js.map +1 -1
- package/dist/src/agent/tools/factory.js +16 -3
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/goal-evidence-recorder.d.ts +6 -0
- package/dist/src/agent/tools/goal-evidence-recorder.js +34 -0
- package/dist/src/agent/tools/goal-evidence-recorder.js.map +1 -0
- package/dist/src/agent/tools/goal-tool.d.ts +19 -0
- package/dist/src/agent/tools/goal-tool.js +101 -0
- package/dist/src/agent/tools/goal-tool.js.map +1 -0
- package/dist/src/agent/tools/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +2 -1
- package/dist/src/agent/tools/shell.d.ts +2 -0
- package/dist/src/agent/tools/shell.js +17 -2
- package/dist/src/agent/tools/shell.js.map +1 -1
- package/dist/src/agent/tools/workflow-tool.d.ts +1 -0
- package/dist/src/agent/tools/workflow-tool.js +10 -2
- package/dist/src/agent/tools/workflow-tool.js.map +1 -1
- package/dist/src/agent/tools/write.d.ts +2 -0
- package/dist/src/agent/tools/write.js +11 -0
- package/dist/src/agent/tools/write.js.map +1 -1
- package/dist/src/channels/attachments/inbound-persist.d.ts +7 -0
- package/dist/src/channels/attachments/inbound-persist.js +20 -2
- package/dist/src/channels/attachments/inbound-persist.js.map +1 -1
- package/dist/src/channels/channel-domain.d.ts +1 -81
- package/dist/src/channels/pairing/index.d.ts +2 -2
- package/dist/src/channels/pairing/index.js +2 -2
- package/dist/src/channels/pairing/pairing-service.d.ts +13 -0
- package/dist/src/channels/pairing/pairing-service.js +78 -63
- package/dist/src/channels/pairing/pairing-service.js.map +1 -1
- package/dist/src/chat-commands/builtins/config.js +4 -11
- package/dist/src/chat-commands/builtins/config.js.map +1 -1
- package/dist/src/chat-commands/builtins/goal.d.ts +1 -1
- package/dist/src/chat-commands/builtins/goal.js +55 -97
- package/dist/src/chat-commands/builtins/goal.js.map +1 -1
- package/dist/src/chat-commands/builtins/subgoal.d.ts +1 -1
- package/dist/src/chat-commands/builtins/subgoal.js +49 -108
- package/dist/src/chat-commands/builtins/subgoal.js.map +1 -1
- package/dist/src/chat-commands/builtins/workflow.js +132 -8
- package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
- package/dist/src/chat-commands/context.d.ts +3 -0
- package/dist/src/chat-commands/context.js +5 -0
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/chat-commands/types.d.ts +5 -0
- package/dist/src/cli/command-catalog.js +43 -0
- package/dist/src/cli/command-catalog.js.map +1 -1
- package/dist/src/cli/command-loaders.js +1 -0
- package/dist/src/cli/command-loaders.js.map +1 -1
- package/dist/src/cli/command-manifest.js +4 -0
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/goal.d.ts +4 -0
- package/dist/src/cli/commands/goal.js +213 -0
- package/dist/src/cli/commands/goal.js.map +1 -0
- package/dist/src/cli/commands/onboard.js +11 -5
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/schema.d.ts +115 -0
- package/dist/src/config/schema.js +72 -18
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +14 -0
- package/dist/src/config/web-patch.js +45 -6
- package/dist/src/config/web-patch.js.map +1 -1
- package/dist/src/cron/executor.d.ts +2 -0
- package/dist/src/cron/executor.js +25 -0
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/cron/job-content.js +1 -0
- package/dist/src/cron/job-content.js.map +1 -1
- package/dist/src/cron/types.d.ts +19 -1
- package/dist/src/cron/validation.d.ts +20 -0
- package/dist/src/cron/validation.js +7 -0
- package/dist/src/cron/validation.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +14 -0
- package/dist/src/gateway/hono/routes/goals.d.ts +1 -1
- package/dist/src/gateway/hono/routes/goals.js +670 -173
- package/dist/src/gateway/hono/routes/goals.js.map +1 -1
- package/dist/src/gateway/hono/routes/home.d.ts +5 -0
- package/dist/src/gateway/hono/routes/home.js +88 -3
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/notes.js +20 -14
- package/dist/src/gateway/hono/routes/notes.js.map +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +6 -2
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +2 -0
- package/dist/src/gateway/service/agent-runner.js +6 -2
- package/dist/src/gateway/service/agent-runner.js.map +1 -1
- package/dist/src/gateway/service/run-gateway-agent.d.ts +3 -0
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service.d.ts +8 -0
- package/dist/src/gateway/service.js +70 -3
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-notifications.d.ts +29 -0
- package/dist/src/goals/goal-notifications.js +154 -0
- package/dist/src/goals/goal-notifications.js.map +1 -0
- package/dist/src/goals/goal-queue-store.d.ts +16 -0
- package/dist/src/goals/goal-queue-store.js +131 -0
- package/dist/src/goals/goal-queue-store.js.map +1 -0
- package/dist/src/goals/goal-queue-types.d.ts +31 -0
- package/dist/src/goals/goal-queue-types.js +1 -0
- package/dist/src/goals/goal-runner.d.ts +17 -0
- package/dist/src/goals/goal-runner.js +127 -0
- package/dist/src/goals/goal-runner.js.map +1 -0
- package/dist/src/goals/goal-service.d.ts +77 -0
- package/dist/src/goals/goal-service.js +261 -0
- package/dist/src/goals/goal-service.js.map +1 -0
- package/dist/src/goals/goal-store.d.ts +38 -0
- package/dist/src/goals/goal-store.js +404 -0
- package/dist/src/goals/goal-store.js.map +1 -0
- package/dist/src/goals/goal-workflow-judge.d.ts +13 -0
- package/dist/src/goals/goal-workflow-judge.js +147 -0
- package/dist/src/goals/goal-workflow-judge.js.map +1 -0
- package/dist/src/goals/index.d.ts +10 -0
- package/dist/src/goals/index.js +7 -0
- package/dist/src/goals/types.d.ts +119 -0
- package/dist/src/goals/types.js +1 -0
- package/dist/src/storage/sqlite/migrations/006_add_goals.sql +108 -0
- package/dist/src/storage/sqlite/migrations/007_goal_run_judge_schema.sql +4 -0
- package/dist/src/storage/sqlite/migrations/008_goal_queue_workflow_runs.sql +53 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +163 -0
- package/dist/src/utils/logger/stats.d.ts +1 -1
- package/dist/src/workflows/domain/run.d.ts +1 -0
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
- package/dist/src/workflows/service/workflow-run-service.js +5 -1
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -0
- package/dist/src/workflows/service/workflow-session-bridge.js +7 -0
- package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
- package/dist/src/workflows/store/run-index-store.d.ts +8 -0
- package/dist/src/workflows/store/run-index-store.js +58 -0
- package/dist/src/workflows/store/run-index-store.js.map +1 -0
- package/dist/src/workflows/store/run-store.d.ts +2 -0
- package/dist/src/workflows/store/run-store.js +14 -21
- package/dist/src/workflows/store/run-store.js.map +1 -1
- package/package.json +9 -3
- package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +0 -41
- package/dist/gateway/static/root/assets/agents-D2VtykeA.js +0 -78
- package/dist/gateway/static/root/assets/apps-page-BPQ6ueG-.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-DgZc25cS.js +0 -1
- package/dist/gateway/static/root/assets/circle-check-C23XjkUj.js +0 -1
- package/dist/gateway/static/root/assets/copy-Dv6d4Dvw.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-BQFw5O-8.js +0 -1
- package/dist/gateway/static/root/assets/dist-BLMShn4_.js +0 -1
- package/dist/gateway/static/root/assets/extension-debug-page-BbQ8uZY_.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-ClWJvwHK.js +0 -1
- package/dist/gateway/static/root/assets/fetch-CFdKBnE6.js +0 -1
- package/dist/gateway/static/root/assets/gateway-startup-retry-DdngdObI.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-4O1U_Oki.js +0 -1
- package/dist/gateway/static/root/assets/index-DI5_GsZt.css +0 -1
- package/dist/gateway/static/root/assets/index-S23p3aa0.js +0 -4845
- package/dist/gateway/static/root/assets/logs-page-BAIdbvSC.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-BVDoLwec.js +0 -180
- package/dist/gateway/static/root/assets/note-time-COWUfBZO.js +0 -1
- package/dist/gateway/static/root/assets/notes-page-CI3aD7Tm.js +0 -1
- package/dist/gateway/static/root/assets/schema-form-CDpBshDP.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DM1S4eso.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-Bz_nYzvB.js +0 -2
- package/dist/gateway/static/root/assets/settings-form-section-BxhPoWWH.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-Ch_Sd28M.js +0 -3
- package/dist/gateway/static/root/assets/share-preview-page-D6u4llqD.js +0 -2
- package/dist/gateway/static/root/assets/skills-page-XMi76Nps.js +0 -2
- package/dist/gateway/static/root/assets/theme-store-BZozwAeK.js +0 -1
- package/dist/gateway/static/root/assets/url-DQRqHuL-.js +0 -3
- package/dist/gateway/static/root/assets/vendor-codemirror-DYoKfS8f.js +0 -45
- package/dist/gateway/static/root/assets/voice-api-key-field-CMt5Xc7_.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-CxFbPBed.js +0 -18
- package/dist/src/agent/goals/checklist-user.d.ts +0 -24
- package/dist/src/agent/goals/checklist-user.js +0 -92
- package/dist/src/agent/goals/checklist-user.js.map +0 -1
- package/dist/src/agent/goals/goal-run-store.d.ts +0 -19
- package/dist/src/agent/goals/goal-run-store.js +0 -138
- package/dist/src/agent/goals/goal-run-store.js.map +0 -1
- package/dist/src/agent/goals/goal-run-types.d.ts +0 -28
- package/dist/src/agent/goals/goal-run-types.js +0 -6
- package/dist/src/agent/goals/goal-run-types.js.map +0 -1
- package/dist/src/agent/goals/patch-from-user-action.d.ts +0 -20
- package/dist/src/agent/goals/patch-from-user-action.js +0 -103
- package/dist/src/agent/goals/patch-from-user-action.js.map +0 -1
- /package/dist/gateway/static/root/assets/{note-detail-page-D4ZIVQbk.css → block-editor-D4ZIVQbk.css} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-setup.js","names":[],"sources":["../../../../../extensions/telegram/src/adapters/gateway-setup.ts"],"sourcesContent":["import type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { ChannelRuntimeActionAdapter } from '@xopcai/xopc/channels/plugins/types.adapters.js';\n\nfunction isZh(locale: string | undefined): boolean {\n return locale?.toLowerCase().startsWith('zh') === true;\n}\n\nfunction readInput(input: unknown): Record<string, unknown> {\n return input && typeof input === 'object' && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n}\n\nfunction pickString(input: unknown): string {\n return typeof input === 'string' ? input.trim() : '';\n}\n\nfunction pickDmPolicy(input: unknown): 'open' | 'pairing' | 'allowlist' | 'disabled' {\n return input === 'pairing' || input === 'allowlist' || input === 'disabled'
|
|
1
|
+
{"version":3,"file":"gateway-setup.js","names":[],"sources":["../../../../../extensions/telegram/src/adapters/gateway-setup.ts"],"sourcesContent":["import type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { ChannelRuntimeActionAdapter } from '@xopcai/xopc/channels/plugins/types.adapters.js';\n\nfunction isZh(locale: string | undefined): boolean {\n return locale?.toLowerCase().startsWith('zh') === true;\n}\n\nfunction readInput(input: unknown): Record<string, unknown> {\n return input && typeof input === 'object' && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n}\n\nfunction pickString(input: unknown): string {\n return typeof input === 'string' ? input.trim() : '';\n}\n\nfunction pickDmPolicy(input: unknown): 'open' | 'pairing' | 'allowlist' | 'disabled' {\n return input === 'open' || input === 'pairing' || input === 'allowlist' || input === 'disabled'\n ? input\n : 'pairing';\n}\n\nfunction existingDefaultAccount(config: Config): Record<string, unknown> {\n const telegram = config.channels?.telegram as Record<string, unknown> | undefined;\n const accounts = telegram?.accounts as Record<string, unknown> | undefined;\n const account = accounts?.default;\n return account && typeof account === 'object' && !Array.isArray(account)\n ? (account as Record<string, unknown>)\n : {};\n}\n\nfunction existingDefaults(config: Config): Record<string, unknown> {\n const telegram = config.channels?.telegram as Record<string, unknown> | undefined;\n const defaults = telegram?.defaults;\n return defaults && typeof defaults === 'object' && !Array.isArray(defaults)\n ? (defaults as Record<string, unknown>)\n : {};\n}\n\nfunction buildTelegramConfig(config: Config, input: Record<string, unknown>): Config {\n const existing = (config.channels?.telegram as Record<string, unknown> | undefined) ?? {};\n const existingAccounts = (existing.accounts as Record<string, unknown> | undefined) ?? {};\n const previousDefault = existingDefaultAccount(config);\n const previousDefaults = existingDefaults(config);\n\n const botToken = pickString(input.botToken) || pickString(previousDefault.botToken);\n const apiRoot = pickString(input.apiRoot);\n const proxy = pickString(input.proxy);\n const dmPolicy = pickDmPolicy(input.dmPolicy ?? previousDefault.dmPolicy ?? previousDefaults.dmPolicy);\n\n const defaults: Record<string, unknown> = {\n ...previousDefaults,\n dmPolicy: previousDefaults.dmPolicy ?? 'pairing',\n groupPolicy: previousDefaults.groupPolicy ?? 'open',\n replyToMode: previousDefaults.replyToMode ?? 'off',\n historyLimit: previousDefaults.historyLimit ?? 50,\n textChunkLimit: previousDefaults.textChunkLimit ?? 4000,\n streaming: previousDefaults.streaming ?? { mode: 'partial' },\n };\n if (apiRoot) defaults.apiRoot = apiRoot;\n if (proxy) defaults.proxy = proxy;\n\n const defaultAccount: Record<string, unknown> = {\n ...previousDefault,\n accountId: 'default',\n enabled: true,\n botToken,\n dmPolicy,\n allowFrom: dmPolicy === 'open' ? ['*'] : (previousDefault.allowFrom ?? []),\n };\n\n return {\n ...config,\n channels: {\n ...config.channels,\n telegram: {\n ...existing,\n enabled: true,\n defaults,\n accounts: {\n ...existingAccounts,\n default: defaultAccount,\n },\n },\n },\n };\n}\n\nfunction formPayload(config: Config, locale?: string) {\n const zh = isZh(locale);\n const account = existingDefaultAccount(config);\n const defaults = existingDefaults(config);\n return {\n type: 'form' as const,\n submitAction: 'setup.save',\n message: zh\n ? '填写 Bot Token 后保存即可启用 Telegram。默认私聊策略为 pairing;允许列表在账号配置里维护。'\n : 'Enter a Bot Token and save. The default DM policy is pairing; manage allow lists on the account configuration.',\n schema: {\n type: 'object',\n properties: {\n botToken: { type: 'string', title: zh ? 'Bot Token' : 'Bot Token', format: 'password' },\n dmPolicy: {\n type: 'string',\n title: zh ? '私聊访问' : 'Private chat access',\n enum: ['open', 'pairing', 'allowlist', 'disabled'],\n default: 'open',\n },\n apiRoot: {\n type: 'string',\n title: zh ? 'API Root(可选)' : 'API root (optional)',\n placeholder: 'https://api.telegram.org',\n },\n proxy: {\n type: 'string',\n title: zh ? '代理(可选)' : 'Proxy (optional)',\n placeholder: 'http://127.0.0.1:7897',\n },\n },\n required: ['botToken'],\n },\n values: {\n botToken: pickString(account.botToken),\n dmPolicy: pickDmPolicy(account.dmPolicy ?? defaults.dmPolicy ?? 'pairing'),\n apiRoot: pickString(account.apiRoot ?? defaults.apiRoot),\n proxy: pickString(account.proxy ?? defaults.proxy),\n },\n };\n}\n\nexport const telegramGatewaySetupActions: ChannelRuntimeActionAdapter = {\n async runAction({ actionId, input, locale }) {\n const zh = isZh(locale);\n if (actionId === 'setup.start') {\n const { loadConfig } = await import('@xopcai/xopc/config/loader.js');\n return { ok: true, payload: formPayload(loadConfig(), locale) };\n }\n\n if (actionId === 'setup.save') {\n const raw = readInput(input);\n const botToken = pickString(raw.botToken);\n if (!botToken) {\n return { ok: false, message: zh ? 'Bot Token 为必填项。' : 'Bot Token is required.' };\n }\n const { loadConfig, saveConfig } = await import('@xopcai/xopc/config/loader.js');\n await saveConfig(buildTelegramConfig(loadConfig(), raw));\n return {\n ok: true,\n payload: {\n type: 'ok',\n message: zh ? 'Telegram 配置已保存。私聊将按 pairing/允许列表策略放行。' : 'Telegram configuration saved. Private chat now follows the pairing/allow-list policy.',\n configChanged: true,\n },\n };\n }\n\n return { ok: false, message: `${zh ? '不支持的 Telegram 操作' : 'Unsupported Telegram action'}: ${actionId}` };\n },\n};\n"],"mappings":"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"}
|
|
@@ -123,10 +123,14 @@ async function configureTelegram(config) {
|
|
|
123
123
|
const telegramConfig = {
|
|
124
124
|
...prev ?? {},
|
|
125
125
|
enabled: true,
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
126
|
+
defaults: prev?.defaults && typeof prev.defaults === "object" && !Array.isArray(prev.defaults) ? prev.defaults : {
|
|
127
|
+
dmPolicy: "pairing",
|
|
128
|
+
groupPolicy: "open",
|
|
129
|
+
replyToMode: "off",
|
|
130
|
+
historyLimit: 50,
|
|
131
|
+
textChunkLimit: 4e3,
|
|
132
|
+
streaming: { mode: "partial" }
|
|
133
|
+
},
|
|
130
134
|
accounts: {
|
|
131
135
|
...prevAccounts,
|
|
132
136
|
default: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboard-cli.js","names":[],"sources":["../../../../../extensions/telegram/src/adapters/onboard-cli.ts"],"sourcesContent":["/**\n * Telegram interactive onboarding (CLI onboard) — {@link ChannelOnboardAdapter}.\n */\n\nimport { input, confirm, select } from '@inquirer/prompts';\n\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { ChannelOnboardAdapter } from '@xopcai/xopc/channels/plugins/types.adapters.js';\n\ntype DmPolicy = 'pairing' | 'allowlist' | 'open' | 'disabled';\ntype GroupPolicy = 'open' | 'disabled' | 'allowlist';\n\nfunction isTelegramConfigured(config: Config): boolean {\n const telegram = config.channels?.telegram as Record<string, unknown> | undefined;\n if (!telegram) return false;\n\n const accounts = telegram.accounts as Record<string, Record<string, unknown>> | undefined;\n if (accounts) {\n for (const account of Object.values(accounts)) {\n if (account?.enabled === false) continue;\n if (typeof account.botToken === 'string' && account.botToken.trim()) return true;\n }\n }\n\n return false;\n}\n\nfunction detectEnvToken(): string | null {\n return process.env.TELEGRAM_BOT_TOKEN?.trim() || null;\n}\n\nasync function promptBotToken(config: Config): Promise<string | null> {\n const envToken = detectEnvToken();\n const tg = config.channels?.telegram as Record<string, unknown> | undefined;\n const accounts = tg?.accounts as Record<string, { botToken?: string }> | undefined;\n const existing = accounts?.default?.botToken?.trim();\n\n if (envToken && !existing) {\n const useEnv = await confirm({\n message: 'TELEGRAM_BOT_TOKEN is set in the environment. Use it?',\n default: true,\n });\n if (useEnv) return envToken;\n }\n\n if (typeof existing === 'string' && existing) {\n const keep = await confirm({\n message: 'A Telegram bot token is already configured. Keep it?',\n default: true,\n });\n if (keep) return existing;\n }\n\n console.log('\\n📝 Telegram Bot Token:');\n console.log(' 1. Open Telegram and chat with @BotFather');\n console.log(' 2. Send /newbot and follow the prompts');\n console.log(' 3. Copy the token BotFather gives you\\n');\n\n const token = await input({\n message: 'Enter bot token:',\n validate: (v) => v.trim().length > 0 || 'Token cannot be empty',\n });\n\n return token.trim();\n}\n\nasync function promptDmPolicy(): Promise<DmPolicy> {\n return select<DmPolicy>({\n message: 'DM (private chat) policy:',\n choices: [\n {\n value: 'pairing',\n name: 'pairing [recommended] verify new users with /pair',\n description: 'New users must send /pair before chatting',\n },\n {\n value: 'allowlist',\n name: 'allowlist allowlisted users only',\n description: 'Only listed users can message the bot',\n },\n {\n value: 'open',\n name: 'open anyone can DM (not recommended)',\n description: 'Any user can start a conversation',\n },\n {\n value: 'disabled',\n name: 'disabled DMs disabled',\n description: 'The bot does not respond to private messages',\n },\n ],\n default: 'pairing',\n });\n}\n\nasync function promptAllowlist(message: string): Promise<Array<string | number>> {\n const value = await input({\n message,\n default: '',\n });\n\n if (!value.trim()) return [];\n\n const entries = value\n .split(/[,\\s\\n]+/)\n .map((s) => s.trim())\n .filter(Boolean);\n\n return entries.map((e) => {\n const num = parseInt(e, 10);\n return !isNaN(num) && String(num) === e ? num : e;\n });\n}\n\nasync function promptGroupPolicy(): Promise<GroupPolicy> {\n return select<GroupPolicy>({\n message: 'Group chat policy:',\n choices: [\n {\n value: 'open',\n name: 'open all groups allowed',\n description: 'The bot can be used in any group',\n },\n {\n value: 'disabled',\n name: 'disabled groups disabled',\n description: 'The bot does not respond in groups',\n },\n {\n value: 'allowlist',\n name: 'allowlist allowlisted groups only',\n description: 'Only listed group chats can use the bot',\n },\n ],\n default: 'open',\n });\n}\n\nasync function configureTelegram(config: Config): Promise<Config> {\n console.log(`\\n${'='.repeat(50)}`);\n console.log('📱 Telegram setup');\n console.log(`${'='.repeat(50)}\\n`);\n\n const botToken = await promptBotToken(config);\n if (!botToken) {\n console.log('⚠️ No bot token; skipping Telegram setup.');\n return config;\n }\n\n const dmPolicy = await promptDmPolicy();\n\n let allowFrom: Array<string | number> | undefined;\n if (dmPolicy === 'allowlist') {\n allowFrom = await promptAllowlist('User IDs or usernames allowed for DMs (comma-separated):');\n }\n\n const groupPolicy = await promptGroupPolicy();\n\n let groupAllowFrom: Array<string | number> | undefined;\n if (groupPolicy === 'allowlist') {\n groupAllowFrom = await promptAllowlist('Allowed group chat IDs (comma-separated):');\n }\n\n const prev = config.channels?.telegram as Record<string, unknown> | undefined;\n const prevAccounts =\n prev?.accounts && typeof prev.accounts === 'object' && !Array.isArray(prev.accounts)\n ? { ...(prev.accounts as Record<string, unknown>) }\n : {};\n const prevDefault =\n prevAccounts.default && typeof prevAccounts.default === 'object' && !Array.isArray(prevAccounts.default)\n ? { ...(prevAccounts.default as Record<string, unknown>) }\n : {};\n\n const telegramConfig: Record<string, unknown> = {\n ...(prev ?? {}),\n enabled: true,\n dmPolicy,\n groupPolicy,\n allowFrom: allowFrom ?? (prev?.allowFrom as Array<string | number> | undefined) ?? [],\n groupAllowFrom: groupAllowFrom ?? (prev?.groupAllowFrom as Array<string | number> | undefined) ?? [],\n accounts: {\n ...prevAccounts,\n default: {\n ...prevDefault,\n accountId: 'default',\n enabled: true,\n botToken,\n dmPolicy,\n groupPolicy,\n allowFrom: allowFrom ?? (prevDefault.allowFrom as Array<string | number> | undefined) ?? [],\n groupAllowFrom:\n groupAllowFrom ?? (prevDefault.groupAllowFrom as Array<string | number> | undefined) ?? [],\n },\n },\n };\n\n const newConfig: Config = {\n ...config,\n channels: {\n ...config.channels,\n telegram: telegramConfig,\n },\n };\n\n console.log('\\n✅ Telegram configuration complete\\n');\n return newConfig;\n}\n\nexport const telegramOnboardAdapter: ChannelOnboardAdapter = {\n isConfigured: isTelegramConfigured,\n configure: configureTelegram,\n};\n\n/** Optional entry: confirm before running the full Telegram configure flow. */\nexport async function setupTelegramOnboard(\n config: Config,\n options: { confirmMessage?: string; confirmDefault?: boolean } = {},\n): Promise<Config> {\n const shouldEnable = await confirm({\n message: options.confirmMessage || 'Enable Telegram channel?',\n default: options.confirmDefault ?? true,\n });\n if (!shouldEnable) {\n console.log('ℹ️ Telegram skipped.');\n return config;\n }\n return configureTelegram(config);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"onboard-cli.js","names":[],"sources":["../../../../../extensions/telegram/src/adapters/onboard-cli.ts"],"sourcesContent":["/**\n * Telegram interactive onboarding (CLI onboard) — {@link ChannelOnboardAdapter}.\n */\n\nimport { input, confirm, select } from '@inquirer/prompts';\n\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { ChannelOnboardAdapter } from '@xopcai/xopc/channels/plugins/types.adapters.js';\n\ntype DmPolicy = 'pairing' | 'allowlist' | 'open' | 'disabled';\ntype GroupPolicy = 'open' | 'disabled' | 'allowlist';\n\nfunction isTelegramConfigured(config: Config): boolean {\n const telegram = config.channels?.telegram as Record<string, unknown> | undefined;\n if (!telegram) return false;\n\n const accounts = telegram.accounts as Record<string, Record<string, unknown>> | undefined;\n if (accounts) {\n for (const account of Object.values(accounts)) {\n if (account?.enabled === false) continue;\n if (typeof account.botToken === 'string' && account.botToken.trim()) return true;\n }\n }\n\n return false;\n}\n\nfunction detectEnvToken(): string | null {\n return process.env.TELEGRAM_BOT_TOKEN?.trim() || null;\n}\n\nasync function promptBotToken(config: Config): Promise<string | null> {\n const envToken = detectEnvToken();\n const tg = config.channels?.telegram as Record<string, unknown> | undefined;\n const accounts = tg?.accounts as Record<string, { botToken?: string }> | undefined;\n const existing = accounts?.default?.botToken?.trim();\n\n if (envToken && !existing) {\n const useEnv = await confirm({\n message: 'TELEGRAM_BOT_TOKEN is set in the environment. Use it?',\n default: true,\n });\n if (useEnv) return envToken;\n }\n\n if (typeof existing === 'string' && existing) {\n const keep = await confirm({\n message: 'A Telegram bot token is already configured. Keep it?',\n default: true,\n });\n if (keep) return existing;\n }\n\n console.log('\\n📝 Telegram Bot Token:');\n console.log(' 1. Open Telegram and chat with @BotFather');\n console.log(' 2. Send /newbot and follow the prompts');\n console.log(' 3. Copy the token BotFather gives you\\n');\n\n const token = await input({\n message: 'Enter bot token:',\n validate: (v) => v.trim().length > 0 || 'Token cannot be empty',\n });\n\n return token.trim();\n}\n\nasync function promptDmPolicy(): Promise<DmPolicy> {\n return select<DmPolicy>({\n message: 'DM (private chat) policy:',\n choices: [\n {\n value: 'pairing',\n name: 'pairing [recommended] verify new users with /pair',\n description: 'New users must send /pair before chatting',\n },\n {\n value: 'allowlist',\n name: 'allowlist allowlisted users only',\n description: 'Only listed users can message the bot',\n },\n {\n value: 'open',\n name: 'open anyone can DM (not recommended)',\n description: 'Any user can start a conversation',\n },\n {\n value: 'disabled',\n name: 'disabled DMs disabled',\n description: 'The bot does not respond to private messages',\n },\n ],\n default: 'pairing',\n });\n}\n\nasync function promptAllowlist(message: string): Promise<Array<string | number>> {\n const value = await input({\n message,\n default: '',\n });\n\n if (!value.trim()) return [];\n\n const entries = value\n .split(/[,\\s\\n]+/)\n .map((s) => s.trim())\n .filter(Boolean);\n\n return entries.map((e) => {\n const num = parseInt(e, 10);\n return !isNaN(num) && String(num) === e ? num : e;\n });\n}\n\nasync function promptGroupPolicy(): Promise<GroupPolicy> {\n return select<GroupPolicy>({\n message: 'Group chat policy:',\n choices: [\n {\n value: 'open',\n name: 'open all groups allowed',\n description: 'The bot can be used in any group',\n },\n {\n value: 'disabled',\n name: 'disabled groups disabled',\n description: 'The bot does not respond in groups',\n },\n {\n value: 'allowlist',\n name: 'allowlist allowlisted groups only',\n description: 'Only listed group chats can use the bot',\n },\n ],\n default: 'open',\n });\n}\n\nasync function configureTelegram(config: Config): Promise<Config> {\n console.log(`\\n${'='.repeat(50)}`);\n console.log('📱 Telegram setup');\n console.log(`${'='.repeat(50)}\\n`);\n\n const botToken = await promptBotToken(config);\n if (!botToken) {\n console.log('⚠️ No bot token; skipping Telegram setup.');\n return config;\n }\n\n const dmPolicy = await promptDmPolicy();\n\n let allowFrom: Array<string | number> | undefined;\n if (dmPolicy === 'allowlist') {\n allowFrom = await promptAllowlist('User IDs or usernames allowed for DMs (comma-separated):');\n }\n\n const groupPolicy = await promptGroupPolicy();\n\n let groupAllowFrom: Array<string | number> | undefined;\n if (groupPolicy === 'allowlist') {\n groupAllowFrom = await promptAllowlist('Allowed group chat IDs (comma-separated):');\n }\n\n const prev = config.channels?.telegram as Record<string, unknown> | undefined;\n const prevAccounts =\n prev?.accounts && typeof prev.accounts === 'object' && !Array.isArray(prev.accounts)\n ? { ...(prev.accounts as Record<string, unknown>) }\n : {};\n const prevDefault =\n prevAccounts.default && typeof prevAccounts.default === 'object' && !Array.isArray(prevAccounts.default)\n ? { ...(prevAccounts.default as Record<string, unknown>) }\n : {};\n\n const telegramConfig: Record<string, unknown> = {\n ...(prev ?? {}),\n enabled: true,\n defaults:\n prev?.defaults && typeof prev.defaults === 'object' && !Array.isArray(prev.defaults)\n ? prev.defaults\n : {\n dmPolicy: 'pairing',\n groupPolicy: 'open',\n replyToMode: 'off',\n historyLimit: 50,\n textChunkLimit: 4000,\n streaming: { mode: 'partial' },\n },\n accounts: {\n ...prevAccounts,\n default: {\n ...prevDefault,\n accountId: 'default',\n enabled: true,\n botToken,\n dmPolicy,\n groupPolicy,\n allowFrom: allowFrom ?? (prevDefault.allowFrom as Array<string | number> | undefined) ?? [],\n groupAllowFrom:\n groupAllowFrom ?? (prevDefault.groupAllowFrom as Array<string | number> | undefined) ?? [],\n },\n },\n };\n\n const newConfig: Config = {\n ...config,\n channels: {\n ...config.channels,\n telegram: telegramConfig,\n },\n };\n\n console.log('\\n✅ Telegram configuration complete\\n');\n return newConfig;\n}\n\nexport const telegramOnboardAdapter: ChannelOnboardAdapter = {\n isConfigured: isTelegramConfigured,\n configure: configureTelegram,\n};\n\n/** Optional entry: confirm before running the full Telegram configure flow. */\nexport async function setupTelegramOnboard(\n config: Config,\n options: { confirmMessage?: string; confirmDefault?: boolean } = {},\n): Promise<Config> {\n const shouldEnable = await confirm({\n message: options.confirmMessage || 'Enable Telegram channel?',\n default: options.confirmDefault ?? true,\n });\n if (!shouldEnable) {\n console.log('ℹ️ Telegram skipped.');\n return config;\n }\n return configureTelegram(config);\n}\n"],"mappings":"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"}
|
|
@@ -64,6 +64,44 @@ export declare const TelegramThreadBindingsConfigSchema: z.ZodObject<{
|
|
|
64
64
|
idleTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
65
65
|
maxAgeMs: z.ZodOptional<z.ZodNumber>;
|
|
66
66
|
}, z.core.$strict>;
|
|
67
|
+
export declare const TelegramAccountDefaultsConfigSchema: z.ZodObject<{
|
|
68
|
+
dmPolicy: z.ZodDefault<z.ZodEnum<{
|
|
69
|
+
pairing: "pairing";
|
|
70
|
+
allowlist: "allowlist";
|
|
71
|
+
open: "open";
|
|
72
|
+
disabled: "disabled";
|
|
73
|
+
}>>;
|
|
74
|
+
groupPolicy: z.ZodDefault<z.ZodEnum<{
|
|
75
|
+
allowlist: "allowlist";
|
|
76
|
+
open: "open";
|
|
77
|
+
disabled: "disabled";
|
|
78
|
+
}>>;
|
|
79
|
+
replyToMode: z.ZodDefault<z.ZodEnum<{
|
|
80
|
+
off: "off";
|
|
81
|
+
first: "first";
|
|
82
|
+
all: "all";
|
|
83
|
+
}>>;
|
|
84
|
+
historyLimit: z.ZodDefault<z.ZodNumber>;
|
|
85
|
+
textChunkLimit: z.ZodDefault<z.ZodNumber>;
|
|
86
|
+
streaming: z.ZodDefault<z.ZodObject<{
|
|
87
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
88
|
+
off: "off";
|
|
89
|
+
partial: "partial";
|
|
90
|
+
block: "block";
|
|
91
|
+
}>>;
|
|
92
|
+
preview: z.ZodOptional<z.ZodObject<{
|
|
93
|
+
toolProgress: z.ZodDefault<z.ZodBoolean>;
|
|
94
|
+
}, z.core.$strict>>;
|
|
95
|
+
block: z.ZodOptional<z.ZodObject<{
|
|
96
|
+
coalesce: z.ZodOptional<z.ZodObject<{
|
|
97
|
+
minChars: z.ZodDefault<z.ZodNumber>;
|
|
98
|
+
idleMs: z.ZodDefault<z.ZodNumber>;
|
|
99
|
+
}, z.core.$strict>>;
|
|
100
|
+
}, z.core.$strict>>;
|
|
101
|
+
}, z.core.$strict>>;
|
|
102
|
+
proxy: z.ZodOptional<z.ZodString>;
|
|
103
|
+
apiRoot: z.ZodOptional<z.ZodString>;
|
|
104
|
+
}, z.core.$strict>;
|
|
67
105
|
export declare const TelegramAccountConfigSchema: z.ZodObject<{
|
|
68
106
|
accountId: z.ZodOptional<z.ZodString>;
|
|
69
107
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -71,19 +109,19 @@ export declare const TelegramAccountConfigSchema: z.ZodObject<{
|
|
|
71
109
|
botToken: z.ZodDefault<z.ZodString>;
|
|
72
110
|
tokenFile: z.ZodOptional<z.ZodString>;
|
|
73
111
|
allowFrom: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
74
|
-
groupAllowFrom: z.
|
|
75
|
-
dmPolicy: z.
|
|
112
|
+
groupAllowFrom: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
113
|
+
dmPolicy: z.ZodOptional<z.ZodEnum<{
|
|
76
114
|
pairing: "pairing";
|
|
77
115
|
allowlist: "allowlist";
|
|
78
116
|
open: "open";
|
|
79
117
|
disabled: "disabled";
|
|
80
118
|
}>>;
|
|
81
|
-
groupPolicy: z.
|
|
119
|
+
groupPolicy: z.ZodOptional<z.ZodEnum<{
|
|
82
120
|
allowlist: "allowlist";
|
|
83
121
|
open: "open";
|
|
84
122
|
disabled: "disabled";
|
|
85
123
|
}>>;
|
|
86
|
-
replyToMode: z.
|
|
124
|
+
replyToMode: z.ZodOptional<z.ZodEnum<{
|
|
87
125
|
off: "off";
|
|
88
126
|
first: "first";
|
|
89
127
|
all: "all";
|
|
@@ -104,8 +142,8 @@ export declare const TelegramAccountConfigSchema: z.ZodObject<{
|
|
|
104
142
|
agentId: z.ZodOptional<z.ZodString>;
|
|
105
143
|
}, z.core.$strict>>>;
|
|
106
144
|
}, z.core.$strict>>>;
|
|
107
|
-
historyLimit: z.
|
|
108
|
-
textChunkLimit: z.
|
|
145
|
+
historyLimit: z.ZodOptional<z.ZodNumber>;
|
|
146
|
+
textChunkLimit: z.ZodOptional<z.ZodNumber>;
|
|
109
147
|
streaming: z.ZodOptional<z.ZodObject<{
|
|
110
148
|
mode: z.ZodDefault<z.ZodEnum<{
|
|
111
149
|
off: "off";
|
|
@@ -158,10 +196,45 @@ export declare const TelegramAccountConfigSchema: z.ZodObject<{
|
|
|
158
196
|
}, z.core.$strict>;
|
|
159
197
|
export declare const TelegramConfigSchema: z.ZodObject<{
|
|
160
198
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
161
|
-
allowFrom: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
162
|
-
groupAllowFrom: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
163
|
-
apiRoot: z.ZodOptional<z.ZodString>;
|
|
164
199
|
debug: z.ZodDefault<z.ZodBoolean>;
|
|
200
|
+
defaults: z.ZodDefault<z.ZodObject<{
|
|
201
|
+
dmPolicy: z.ZodDefault<z.ZodEnum<{
|
|
202
|
+
pairing: "pairing";
|
|
203
|
+
allowlist: "allowlist";
|
|
204
|
+
open: "open";
|
|
205
|
+
disabled: "disabled";
|
|
206
|
+
}>>;
|
|
207
|
+
groupPolicy: z.ZodDefault<z.ZodEnum<{
|
|
208
|
+
allowlist: "allowlist";
|
|
209
|
+
open: "open";
|
|
210
|
+
disabled: "disabled";
|
|
211
|
+
}>>;
|
|
212
|
+
replyToMode: z.ZodDefault<z.ZodEnum<{
|
|
213
|
+
off: "off";
|
|
214
|
+
first: "first";
|
|
215
|
+
all: "all";
|
|
216
|
+
}>>;
|
|
217
|
+
historyLimit: z.ZodDefault<z.ZodNumber>;
|
|
218
|
+
textChunkLimit: z.ZodDefault<z.ZodNumber>;
|
|
219
|
+
streaming: z.ZodDefault<z.ZodObject<{
|
|
220
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
221
|
+
off: "off";
|
|
222
|
+
partial: "partial";
|
|
223
|
+
block: "block";
|
|
224
|
+
}>>;
|
|
225
|
+
preview: z.ZodOptional<z.ZodObject<{
|
|
226
|
+
toolProgress: z.ZodDefault<z.ZodBoolean>;
|
|
227
|
+
}, z.core.$strict>>;
|
|
228
|
+
block: z.ZodOptional<z.ZodObject<{
|
|
229
|
+
coalesce: z.ZodOptional<z.ZodObject<{
|
|
230
|
+
minChars: z.ZodDefault<z.ZodNumber>;
|
|
231
|
+
idleMs: z.ZodDefault<z.ZodNumber>;
|
|
232
|
+
}, z.core.$strict>>;
|
|
233
|
+
}, z.core.$strict>>;
|
|
234
|
+
}, z.core.$strict>>;
|
|
235
|
+
proxy: z.ZodOptional<z.ZodString>;
|
|
236
|
+
apiRoot: z.ZodOptional<z.ZodString>;
|
|
237
|
+
}, z.core.$strict>>;
|
|
165
238
|
accounts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
166
239
|
accountId: z.ZodOptional<z.ZodString>;
|
|
167
240
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -169,19 +242,19 @@ export declare const TelegramConfigSchema: z.ZodObject<{
|
|
|
169
242
|
botToken: z.ZodDefault<z.ZodString>;
|
|
170
243
|
tokenFile: z.ZodOptional<z.ZodString>;
|
|
171
244
|
allowFrom: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
172
|
-
groupAllowFrom: z.
|
|
173
|
-
dmPolicy: z.
|
|
245
|
+
groupAllowFrom: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
246
|
+
dmPolicy: z.ZodOptional<z.ZodEnum<{
|
|
174
247
|
pairing: "pairing";
|
|
175
248
|
allowlist: "allowlist";
|
|
176
249
|
open: "open";
|
|
177
250
|
disabled: "disabled";
|
|
178
251
|
}>>;
|
|
179
|
-
groupPolicy: z.
|
|
252
|
+
groupPolicy: z.ZodOptional<z.ZodEnum<{
|
|
180
253
|
allowlist: "allowlist";
|
|
181
254
|
open: "open";
|
|
182
255
|
disabled: "disabled";
|
|
183
256
|
}>>;
|
|
184
|
-
replyToMode: z.
|
|
257
|
+
replyToMode: z.ZodOptional<z.ZodEnum<{
|
|
185
258
|
off: "off";
|
|
186
259
|
first: "first";
|
|
187
260
|
all: "all";
|
|
@@ -202,8 +275,8 @@ export declare const TelegramConfigSchema: z.ZodObject<{
|
|
|
202
275
|
agentId: z.ZodOptional<z.ZodString>;
|
|
203
276
|
}, z.core.$strict>>>;
|
|
204
277
|
}, z.core.$strict>>>;
|
|
205
|
-
historyLimit: z.
|
|
206
|
-
textChunkLimit: z.
|
|
278
|
+
historyLimit: z.ZodOptional<z.ZodNumber>;
|
|
279
|
+
textChunkLimit: z.ZodOptional<z.ZodNumber>;
|
|
207
280
|
streaming: z.ZodOptional<z.ZodObject<{
|
|
208
281
|
mode: z.ZodDefault<z.ZodEnum<{
|
|
209
282
|
off: "off";
|
|
@@ -254,41 +327,6 @@ export declare const TelegramConfigSchema: z.ZodObject<{
|
|
|
254
327
|
maxAgeMs: z.ZodOptional<z.ZodNumber>;
|
|
255
328
|
}, z.core.$strict>>;
|
|
256
329
|
}, z.core.$strict>>>;
|
|
257
|
-
dmPolicy: z.ZodDefault<z.ZodEnum<{
|
|
258
|
-
pairing: "pairing";
|
|
259
|
-
allowlist: "allowlist";
|
|
260
|
-
open: "open";
|
|
261
|
-
disabled: "disabled";
|
|
262
|
-
}>>;
|
|
263
|
-
groupPolicy: z.ZodDefault<z.ZodEnum<{
|
|
264
|
-
allowlist: "allowlist";
|
|
265
|
-
open: "open";
|
|
266
|
-
disabled: "disabled";
|
|
267
|
-
}>>;
|
|
268
|
-
replyToMode: z.ZodDefault<z.ZodEnum<{
|
|
269
|
-
off: "off";
|
|
270
|
-
first: "first";
|
|
271
|
-
all: "all";
|
|
272
|
-
}>>;
|
|
273
|
-
streaming: z.ZodOptional<z.ZodObject<{
|
|
274
|
-
mode: z.ZodDefault<z.ZodEnum<{
|
|
275
|
-
off: "off";
|
|
276
|
-
partial: "partial";
|
|
277
|
-
block: "block";
|
|
278
|
-
}>>;
|
|
279
|
-
preview: z.ZodOptional<z.ZodObject<{
|
|
280
|
-
toolProgress: z.ZodDefault<z.ZodBoolean>;
|
|
281
|
-
}, z.core.$strict>>;
|
|
282
|
-
block: z.ZodOptional<z.ZodObject<{
|
|
283
|
-
coalesce: z.ZodOptional<z.ZodObject<{
|
|
284
|
-
minChars: z.ZodDefault<z.ZodNumber>;
|
|
285
|
-
idleMs: z.ZodDefault<z.ZodNumber>;
|
|
286
|
-
}, z.core.$strict>>;
|
|
287
|
-
}, z.core.$strict>>;
|
|
288
|
-
}, z.core.$strict>>;
|
|
289
|
-
historyLimit: z.ZodDefault<z.ZodNumber>;
|
|
290
|
-
textChunkLimit: z.ZodDefault<z.ZodNumber>;
|
|
291
|
-
proxy: z.ZodOptional<z.ZodString>;
|
|
292
330
|
}, z.core.$strict>;
|
|
293
331
|
export type TelegramConfig = z.infer<typeof TelegramConfigSchema>;
|
|
294
332
|
export type TelegramStreamingConfig = z.infer<typeof TelegramStreamingConfigSchema>;
|
|
@@ -5,7 +5,7 @@ import { z } from "zod";
|
|
|
5
5
|
function resolveTelegramStreamingMode(account) {
|
|
6
6
|
return account.streaming?.mode ?? "partial";
|
|
7
7
|
}
|
|
8
|
-
var TelegramStreamingBlockCoalesceSchema, TelegramStreamingPreviewSchema, TelegramStreamingConfigSchema, TelegramTopicConfigSchema, TelegramGroupConfigSchema, TelegramActionsConfigSchema, TelegramExecApprovalsConfigSchema, TelegramThreadBindingsConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema;
|
|
8
|
+
var TelegramStreamingBlockCoalesceSchema, TelegramStreamingPreviewSchema, TelegramStreamingConfigSchema, TelegramTopicConfigSchema, TelegramGroupConfigSchema, TelegramActionsConfigSchema, TelegramExecApprovalsConfigSchema, TelegramThreadBindingsConfigSchema, TelegramAccountDefaultsConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema;
|
|
9
9
|
var init_config_schema = __esmMin((() => {
|
|
10
10
|
TelegramStreamingBlockCoalesceSchema = z.object({
|
|
11
11
|
minChars: z.number().default(800),
|
|
@@ -56,6 +56,29 @@ var init_config_schema = __esmMin((() => {
|
|
|
56
56
|
idleTimeoutMs: z.number().optional(),
|
|
57
57
|
maxAgeMs: z.number().optional()
|
|
58
58
|
}).strict();
|
|
59
|
+
TelegramAccountDefaultsConfigSchema = z.object({
|
|
60
|
+
dmPolicy: z.enum([
|
|
61
|
+
"pairing",
|
|
62
|
+
"allowlist",
|
|
63
|
+
"open",
|
|
64
|
+
"disabled"
|
|
65
|
+
]).default("pairing"),
|
|
66
|
+
groupPolicy: z.enum([
|
|
67
|
+
"open",
|
|
68
|
+
"disabled",
|
|
69
|
+
"allowlist"
|
|
70
|
+
]).default("open"),
|
|
71
|
+
replyToMode: z.enum([
|
|
72
|
+
"off",
|
|
73
|
+
"first",
|
|
74
|
+
"all"
|
|
75
|
+
]).default("off"),
|
|
76
|
+
historyLimit: z.number().default(50),
|
|
77
|
+
textChunkLimit: z.number().default(4e3),
|
|
78
|
+
streaming: TelegramStreamingConfigSchema.default({ mode: "partial" }),
|
|
79
|
+
proxy: z.string().optional(),
|
|
80
|
+
apiRoot: z.string().optional()
|
|
81
|
+
}).strict();
|
|
59
82
|
TelegramAccountConfigSchema = z.object({
|
|
60
83
|
accountId: z.string().optional(),
|
|
61
84
|
name: z.string().optional(),
|
|
@@ -63,26 +86,26 @@ var init_config_schema = __esmMin((() => {
|
|
|
63
86
|
botToken: z.string().default(""),
|
|
64
87
|
tokenFile: z.string().optional(),
|
|
65
88
|
allowFrom: z.array(z.union([z.string(), z.number()])).default([]),
|
|
66
|
-
groupAllowFrom: z.array(z.union([z.string(), z.number()])).
|
|
89
|
+
groupAllowFrom: z.array(z.union([z.string(), z.number()])).default([]),
|
|
67
90
|
dmPolicy: z.enum([
|
|
68
91
|
"pairing",
|
|
69
92
|
"allowlist",
|
|
70
93
|
"open",
|
|
71
94
|
"disabled"
|
|
72
|
-
]).
|
|
95
|
+
]).optional(),
|
|
73
96
|
groupPolicy: z.enum([
|
|
74
97
|
"open",
|
|
75
98
|
"disabled",
|
|
76
99
|
"allowlist"
|
|
77
|
-
]).
|
|
100
|
+
]).optional(),
|
|
78
101
|
replyToMode: z.enum([
|
|
79
102
|
"off",
|
|
80
103
|
"first",
|
|
81
104
|
"all"
|
|
82
|
-
]).
|
|
105
|
+
]).optional(),
|
|
83
106
|
groups: z.record(z.string(), TelegramGroupConfigSchema).optional(),
|
|
84
|
-
historyLimit: z.number().
|
|
85
|
-
textChunkLimit: z.number().
|
|
107
|
+
historyLimit: z.number().optional(),
|
|
108
|
+
textChunkLimit: z.number().optional(),
|
|
86
109
|
streaming: TelegramStreamingConfigSchema.optional(),
|
|
87
110
|
proxy: z.string().optional(),
|
|
88
111
|
apiRoot: z.string().optional(),
|
|
@@ -105,35 +128,20 @@ var init_config_schema = __esmMin((() => {
|
|
|
105
128
|
}).strict();
|
|
106
129
|
TelegramConfigSchema = z.object({
|
|
107
130
|
enabled: z.boolean().default(false),
|
|
108
|
-
allowFrom: z.array(z.union([z.string(), z.number()])).default([]),
|
|
109
|
-
groupAllowFrom: z.array(z.union([z.string(), z.number()])).default([]),
|
|
110
|
-
apiRoot: z.string().optional(),
|
|
111
131
|
debug: z.boolean().default(false),
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
"disabled",
|
|
122
|
-
"allowlist"
|
|
123
|
-
]).default("open"),
|
|
124
|
-
replyToMode: z.enum([
|
|
125
|
-
"off",
|
|
126
|
-
"first",
|
|
127
|
-
"all"
|
|
128
|
-
]).default("off"),
|
|
129
|
-
streaming: TelegramStreamingConfigSchema.optional(),
|
|
130
|
-
historyLimit: z.number().default(50),
|
|
131
|
-
textChunkLimit: z.number().default(4e3),
|
|
132
|
-
proxy: z.string().optional()
|
|
132
|
+
defaults: TelegramAccountDefaultsConfigSchema.default({
|
|
133
|
+
dmPolicy: "pairing",
|
|
134
|
+
groupPolicy: "open",
|
|
135
|
+
replyToMode: "off",
|
|
136
|
+
historyLimit: 50,
|
|
137
|
+
textChunkLimit: 4e3,
|
|
138
|
+
streaming: { mode: "partial" }
|
|
139
|
+
}),
|
|
140
|
+
accounts: z.record(z.string(), TelegramAccountConfigSchema).optional()
|
|
133
141
|
}).strict();
|
|
134
142
|
}));
|
|
135
143
|
//#endregion
|
|
136
144
|
init_config_schema();
|
|
137
|
-
export { TelegramAccountConfigSchema, TelegramActionsConfigSchema, TelegramConfigSchema, TelegramExecApprovalsConfigSchema, TelegramGroupConfigSchema, TelegramStreamingBlockCoalesceSchema, TelegramStreamingConfigSchema, TelegramStreamingPreviewSchema, TelegramThreadBindingsConfigSchema, TelegramTopicConfigSchema, init_config_schema, resolveTelegramStreamingMode };
|
|
145
|
+
export { TelegramAccountConfigSchema, TelegramAccountDefaultsConfigSchema, TelegramActionsConfigSchema, TelegramConfigSchema, TelegramExecApprovalsConfigSchema, TelegramGroupConfigSchema, TelegramStreamingBlockCoalesceSchema, TelegramStreamingConfigSchema, TelegramStreamingPreviewSchema, TelegramThreadBindingsConfigSchema, TelegramTopicConfigSchema, init_config_schema, resolveTelegramStreamingMode };
|
|
138
146
|
|
|
139
147
|
//# sourceMappingURL=config-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-schema.js","names":[],"sources":["../../../../extensions/telegram/src/config-schema.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const TelegramStreamingBlockCoalesceSchema = z.object({\n minChars: z.number().default(800),\n idleMs: z.number().default(1000),\n}).strict();\n\nexport const TelegramStreamingPreviewSchema = z.object({\n toolProgress: z.boolean().default(true),\n}).strict();\n\nexport const TelegramStreamingConfigSchema = z.object({\n mode: z.enum(['off', 'partial', 'block']).default('partial'),\n preview: TelegramStreamingPreviewSchema.optional(),\n block: z\n .object({\n coalesce: TelegramStreamingBlockCoalesceSchema.optional(),\n })\n .strict()\n .optional(),\n}).strict();\n\nexport const TelegramTopicConfigSchema = z.object({\n topicId: z.string().optional(),\n requireMention: z.boolean().optional(),\n enabled: z.boolean().optional(),\n allowFrom: z.array(z.union([z.string(), z.number()])).optional(),\n systemPrompt: z.string().optional(),\n agentId: z.string().optional(),\n}).strict();\n\nexport const TelegramGroupConfigSchema = z.object({\n groupId: z.string().optional(),\n requireMention: z.boolean().optional(),\n enabled: z.boolean().optional(),\n allowFrom: z.array(z.union([z.string(), z.number()])).optional(),\n systemPrompt: z.string().optional(),\n agentId: z.string().optional(),\n topics: z.record(z.string(), TelegramTopicConfigSchema).optional(),\n}).strict();\n\nexport const TelegramActionsConfigSchema = z.object({\n reactions: z.boolean().default(true),\n sendMessage: z.boolean().default(true),\n editMessage: z.boolean().default(true),\n deleteMessage: z.boolean().default(false),\n poll: z.boolean().default(false),\n sticker: z.boolean().default(false),\n createForumTopic: z.boolean().default(false),\n}).strict();\n\nexport const TelegramExecApprovalsConfigSchema = z.object({\n enabled: z.boolean().default(false),\n approvers: z.array(z.union([z.string(), z.number()])).optional(),\n}).strict();\n\nexport const TelegramThreadBindingsConfigSchema = z.object({\n enabled: z.boolean().default(false),\n idleTimeoutMs: z.number().optional(),\n maxAgeMs: z.number().optional(),\n}).strict();\n\nexport const TelegramAccountConfigSchema = z.object({\n accountId: z.string().optional(),\n name: z.string().optional(),\n enabled: z.boolean().default(true),\n botToken: z.string().default(''),\n tokenFile: z.string().optional(),\n allowFrom: z.array(z.union([z.string(), z.number()])).default([]),\n groupAllowFrom: z.array(z.union([z.string(), z.number()])).
|
|
1
|
+
{"version":3,"file":"config-schema.js","names":[],"sources":["../../../../extensions/telegram/src/config-schema.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const TelegramStreamingBlockCoalesceSchema = z.object({\n minChars: z.number().default(800),\n idleMs: z.number().default(1000),\n}).strict();\n\nexport const TelegramStreamingPreviewSchema = z.object({\n toolProgress: z.boolean().default(true),\n}).strict();\n\nexport const TelegramStreamingConfigSchema = z.object({\n mode: z.enum(['off', 'partial', 'block']).default('partial'),\n preview: TelegramStreamingPreviewSchema.optional(),\n block: z\n .object({\n coalesce: TelegramStreamingBlockCoalesceSchema.optional(),\n })\n .strict()\n .optional(),\n}).strict();\n\nexport const TelegramTopicConfigSchema = z.object({\n topicId: z.string().optional(),\n requireMention: z.boolean().optional(),\n enabled: z.boolean().optional(),\n allowFrom: z.array(z.union([z.string(), z.number()])).optional(),\n systemPrompt: z.string().optional(),\n agentId: z.string().optional(),\n}).strict();\n\nexport const TelegramGroupConfigSchema = z.object({\n groupId: z.string().optional(),\n requireMention: z.boolean().optional(),\n enabled: z.boolean().optional(),\n allowFrom: z.array(z.union([z.string(), z.number()])).optional(),\n systemPrompt: z.string().optional(),\n agentId: z.string().optional(),\n topics: z.record(z.string(), TelegramTopicConfigSchema).optional(),\n}).strict();\n\nexport const TelegramActionsConfigSchema = z.object({\n reactions: z.boolean().default(true),\n sendMessage: z.boolean().default(true),\n editMessage: z.boolean().default(true),\n deleteMessage: z.boolean().default(false),\n poll: z.boolean().default(false),\n sticker: z.boolean().default(false),\n createForumTopic: z.boolean().default(false),\n}).strict();\n\nexport const TelegramExecApprovalsConfigSchema = z.object({\n enabled: z.boolean().default(false),\n approvers: z.array(z.union([z.string(), z.number()])).optional(),\n}).strict();\n\nexport const TelegramThreadBindingsConfigSchema = z.object({\n enabled: z.boolean().default(false),\n idleTimeoutMs: z.number().optional(),\n maxAgeMs: z.number().optional(),\n}).strict();\n\nexport const TelegramAccountDefaultsConfigSchema = z.object({\n dmPolicy: z.enum(['pairing', 'allowlist', 'open', 'disabled']).default('pairing'),\n groupPolicy: z.enum(['open', 'disabled', 'allowlist']).default('open'),\n replyToMode: z.enum(['off', 'first', 'all']).default('off'),\n historyLimit: z.number().default(50),\n textChunkLimit: z.number().default(4000),\n streaming: TelegramStreamingConfigSchema.default({ mode: 'partial' }),\n proxy: z.string().optional(),\n apiRoot: z.string().optional(),\n}).strict();\n\nexport const TelegramAccountConfigSchema = z.object({\n accountId: z.string().optional(),\n name: z.string().optional(),\n enabled: z.boolean().default(true),\n botToken: z.string().default(''),\n tokenFile: z.string().optional(),\n allowFrom: z.array(z.union([z.string(), z.number()])).default([]),\n groupAllowFrom: z.array(z.union([z.string(), z.number()])).default([]),\n dmPolicy: z.enum(['pairing', 'allowlist', 'open', 'disabled']).optional(),\n groupPolicy: z.enum(['open', 'disabled', 'allowlist']).optional(),\n replyToMode: z.enum(['off', 'first', 'all']).optional(),\n groups: z.record(z.string(), TelegramGroupConfigSchema).optional(),\n historyLimit: z.number().optional(),\n textChunkLimit: z.number().optional(),\n streaming: TelegramStreamingConfigSchema.optional(),\n proxy: z.string().optional(),\n apiRoot: z.string().optional(),\n pollingStallThresholdMs: z.number().min(30_000).max(600_000).optional(),\n reactionLevel: z.enum(['off', 'ack', 'minimal', 'extensive']).default('ack'),\n reactionNotifications: z.enum(['off', 'own', 'all']).default('own'),\n ackReaction: z.string().optional(),\n actions: TelegramActionsConfigSchema.optional(),\n execApprovals: TelegramExecApprovalsConfigSchema.optional(),\n threadBindings: TelegramThreadBindingsConfigSchema.optional(),\n}).strict();\n\nexport const TelegramConfigSchema = z.object({\n enabled: z.boolean().default(false),\n debug: z.boolean().default(false),\n defaults: TelegramAccountDefaultsConfigSchema.default({\n dmPolicy: 'pairing',\n groupPolicy: 'open',\n replyToMode: 'off',\n historyLimit: 50,\n textChunkLimit: 4000,\n streaming: { mode: 'partial' },\n }),\n accounts: z.record(z.string(), TelegramAccountConfigSchema).optional(),\n}).strict();\n\nexport type TelegramConfig = z.infer<typeof TelegramConfigSchema>;\nexport type TelegramStreamingConfig = z.infer<typeof TelegramStreamingConfigSchema>;\n\n/** Resolve effective streaming mode for an account. */\nexport function resolveTelegramStreamingMode(account: {\n streaming?: { mode?: 'off' | 'partial' | 'block' };\n}): 'off' | 'partial' | 'block' {\n return account.streaming?.mode ?? 'partial';\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { DmPolicy, GroupPolicy, ReplyToMode } from '@xopcai/xopc/channels/channel-domain.js';
|
|
2
|
+
export interface TelegramTopicConfig {
|
|
3
|
+
topicId?: string;
|
|
4
|
+
requireMention?: boolean;
|
|
5
|
+
enabled?: boolean;
|
|
6
|
+
allowFrom?: Array<string | number>;
|
|
7
|
+
systemPrompt?: string;
|
|
8
|
+
agentId?: string;
|
|
9
|
+
groupPolicy?: GroupPolicy;
|
|
10
|
+
}
|
|
11
|
+
export interface TelegramGroupConfig {
|
|
12
|
+
groupId?: string;
|
|
13
|
+
requireMention?: boolean;
|
|
14
|
+
groupPolicy?: GroupPolicy;
|
|
15
|
+
enabled?: boolean;
|
|
16
|
+
allowFrom?: Array<string | number>;
|
|
17
|
+
systemPrompt?: string;
|
|
18
|
+
agentId?: string;
|
|
19
|
+
topics?: Record<string, TelegramTopicConfig>;
|
|
20
|
+
}
|
|
21
|
+
export interface TelegramAccountConfig {
|
|
22
|
+
accountId: string;
|
|
23
|
+
name?: string;
|
|
24
|
+
enabled?: boolean;
|
|
25
|
+
botToken?: string;
|
|
26
|
+
tokenFile?: string;
|
|
27
|
+
dmPolicy?: DmPolicy;
|
|
28
|
+
groupPolicy?: GroupPolicy;
|
|
29
|
+
replyToMode?: ReplyToMode;
|
|
30
|
+
allowFrom?: Array<string | number>;
|
|
31
|
+
groupAllowFrom?: Array<string | number>;
|
|
32
|
+
groups?: Record<string, TelegramGroupConfig>;
|
|
33
|
+
historyLimit?: number;
|
|
34
|
+
textChunkLimit?: number;
|
|
35
|
+
streaming?: {
|
|
36
|
+
mode?: 'off' | 'partial' | 'block';
|
|
37
|
+
preview?: {
|
|
38
|
+
toolProgress?: boolean;
|
|
39
|
+
};
|
|
40
|
+
block?: {
|
|
41
|
+
coalesce?: {
|
|
42
|
+
minChars?: number;
|
|
43
|
+
idleMs?: number;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
proxy?: string;
|
|
48
|
+
apiRoot?: string;
|
|
49
|
+
pollingStallThresholdMs?: number;
|
|
50
|
+
reactionLevel?: 'off' | 'ack' | 'minimal' | 'extensive';
|
|
51
|
+
reactionNotifications?: 'off' | 'own' | 'all';
|
|
52
|
+
ackReaction?: string;
|
|
53
|
+
tokenSource?: string;
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -58,7 +58,7 @@ async function checkGetMe(params) {
|
|
|
58
58
|
label: `Telegram getMe (${params.accountId})`,
|
|
59
59
|
status: isTelegramUnauthorizedTokenError(description) ? "fail" : "warn",
|
|
60
60
|
message: `getMe failed: ${description}`,
|
|
61
|
-
hints: isTelegramUnauthorizedTokenError(description) ? ["Verify the bot token from @BotFather."] : ["Check channels.telegram.apiRoot / account apiRoot and network access."]
|
|
61
|
+
hints: isTelegramUnauthorizedTokenError(description) ? ["Verify the bot token from @BotFather."] : ["Check channels.telegram.defaults.apiRoot / account apiRoot and network access."]
|
|
62
62
|
};
|
|
63
63
|
} catch (err) {
|
|
64
64
|
const message = formatGetMeError(err);
|
|
@@ -69,7 +69,7 @@ async function checkGetMe(params) {
|
|
|
69
69
|
message: `getMe network check failed: ${message}`,
|
|
70
70
|
hints: [
|
|
71
71
|
"Verify this host can reach the Telegram Bot API.",
|
|
72
|
-
"If your shell uses HTTP(S)_PROXY, also set channels.telegram.proxy because Node fetch does not use env proxy automatically.",
|
|
72
|
+
"If your shell uses HTTP(S)_PROXY, also set channels.telegram.defaults.proxy because Node fetch does not use env proxy automatically.",
|
|
73
73
|
`Effective apiRoot: ${apiRoot}`
|
|
74
74
|
]
|
|
75
75
|
};
|
|
@@ -81,22 +81,12 @@ async function runTelegramDoctorChecks(params) {
|
|
|
81
81
|
const results = [];
|
|
82
82
|
const tg = params.cfg.channels?.telegram;
|
|
83
83
|
if (!tg) return results;
|
|
84
|
-
if (tg.
|
|
85
|
-
const hasWildcard = (tg.allowFrom ?? []).some((e) => String(e).trim() === "*");
|
|
86
|
-
results.push({
|
|
87
|
-
id: "telegram-dm-open-wildcard",
|
|
88
|
-
label: "Telegram DM open policy",
|
|
89
|
-
status: hasWildcard ? "pass" : "warn",
|
|
90
|
-
message: hasWildcard ? "DM policy is open with allowFrom wildcard." : "dmPolicy \"open\" should include allowFrom: [\"*\"] for explicit opt-in.",
|
|
91
|
-
hints: hasWildcard ? [] : ["Add `\"allowFrom\": [\"*\"]` or switch to pairing/allowlist."]
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
if (hasTelegramBotEndpointApiRoot(tg.apiRoot)) results.push({
|
|
84
|
+
if (hasTelegramBotEndpointApiRoot(tg.defaults?.apiRoot)) results.push({
|
|
95
85
|
id: "telegram-api-root-bot-endpoint",
|
|
96
86
|
label: "Telegram apiRoot",
|
|
97
87
|
status: "warn",
|
|
98
88
|
message: "apiRoot includes a bot token path segment; it will be normalized to the API root.",
|
|
99
|
-
hints: [`Use "${normalizeTelegramApiRoot(tg.apiRoot)}" instead.`]
|
|
89
|
+
hints: [`Use "${normalizeTelegramApiRoot(tg.defaults?.apiRoot)}" instead.`]
|
|
100
90
|
});
|
|
101
91
|
const tokenMap = collectTokens(tg);
|
|
102
92
|
for (const [token, accountIds] of tokenMap) if (accountIds.length > 1) results.push({
|
|
@@ -107,6 +97,17 @@ async function runTelegramDoctorChecks(params) {
|
|
|
107
97
|
hints: ["Use one token per account or disable duplicate accounts."]
|
|
108
98
|
});
|
|
109
99
|
for (const [id, acc] of Object.entries(tg.accounts ?? {})) {
|
|
100
|
+
const effectiveDmPolicy = acc.dmPolicy ?? tg.defaults?.dmPolicy ?? "pairing";
|
|
101
|
+
if (tg.enabled && effectiveDmPolicy === "open") {
|
|
102
|
+
const hasWildcard = (acc.allowFrom ?? []).some((e) => String(e).trim() === "*");
|
|
103
|
+
results.push({
|
|
104
|
+
id: `telegram-dm-open-wildcard-${id}`,
|
|
105
|
+
label: `Telegram DM open policy (${id})`,
|
|
106
|
+
status: hasWildcard ? "pass" : "warn",
|
|
107
|
+
message: hasWildcard ? `Account "${id}" DM policy is open with allowFrom wildcard.` : `Account "${id}" dmPolicy "open" should include allowFrom: ["*"] for explicit opt-in.`,
|
|
108
|
+
hints: hasWildcard ? [] : [`Add "allowFrom": ["*"] to channels.telegram.accounts.${id} or switch to pairing/allowlist.`]
|
|
109
|
+
});
|
|
110
|
+
}
|
|
110
111
|
if (hasTelegramBotEndpointApiRoot(acc.apiRoot)) results.push({
|
|
111
112
|
id: `telegram-account-api-root-${id}`,
|
|
112
113
|
label: `Telegram apiRoot (${id})`,
|
|
@@ -135,8 +136,8 @@ async function runTelegramDoctorChecks(params) {
|
|
|
135
136
|
if (tg.enabled && token && acc.enabled !== false) results.push(await checkGetMe({
|
|
136
137
|
accountId: id,
|
|
137
138
|
token,
|
|
138
|
-
apiRoot: acc.apiRoot || tg.apiRoot,
|
|
139
|
-
proxy: acc.proxy || tg.proxy,
|
|
139
|
+
apiRoot: acc.apiRoot || tg.defaults?.apiRoot,
|
|
140
|
+
proxy: acc.proxy || tg.defaults?.proxy,
|
|
140
141
|
fetchImpl: params.fetchImpl
|
|
141
142
|
}));
|
|
142
143
|
}
|