@xopcai/xopc 0.0.149 → 0.0.151
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 +10 -0
- package/README.zh-CN.md +10 -0
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/dashscope/src/image-generation-provider.js +0 -2
- package/dist/extensions/demo-memory/src/index.js +0 -2
- package/dist/extensions/fal/src/image-generation-provider.js +0 -2
- package/dist/extensions/feishu/src/actions/message-action-handler.js +0 -2
- package/dist/extensions/feishu/src/adapters/cli-login.js +0 -2
- package/dist/extensions/feishu/src/adapters/gateway-setup.js +0 -2
- package/dist/extensions/feishu/src/adapters/onboard-cli.js +0 -2
- package/dist/extensions/feishu/src/auth/app-registration.js +0 -2
- package/dist/extensions/feishu/src/auth/pairing.js +0 -2
- package/dist/extensions/feishu/src/auth/paths.js +0 -2
- package/dist/extensions/feishu/src/directory/directory-adapter.js +0 -2
- package/dist/extensions/feishu/src/format.js +0 -2
- package/dist/extensions/feishu/src/index.js +0 -2
- package/dist/extensions/feishu/src/outbound/actions.js +0 -2
- package/dist/extensions/feishu/src/outbound/media-load.js +0 -2
- package/dist/extensions/feishu/src/outbound/outbound-adapter.js +0 -2
- package/dist/extensions/feishu/src/pairing/feishu-pairing-prompt.js +0 -2
- package/dist/extensions/feishu/src/pairing-config-resolver.js +0 -2
- package/dist/extensions/feishu/src/plugin.js +0 -2
- package/dist/extensions/feishu/src/schema/config-schema.js +0 -2
- package/dist/extensions/feishu/src/state/accounts.js +0 -2
- package/dist/extensions/feishu/src/state/message-bindings.js +0 -2
- package/dist/extensions/feishu/src/state/thread-bindings.js +0 -2
- package/dist/extensions/feishu/src/status/doctor.js +0 -2
- package/dist/extensions/feishu/src/status/status-adapter.js +0 -2
- package/dist/extensions/feishu/src/streaming/streaming-adapter.js +0 -2
- package/dist/extensions/feishu/src/subagent-hooks.js +0 -2
- package/dist/extensions/feishu/src/tools/docx/docx-batch-insert.js +0 -2
- package/dist/extensions/feishu/src/tools/docx/docx-color-text.d.ts +6 -3386
- package/dist/extensions/feishu/src/tools/docx/docx-color-text.js +0 -2
- package/dist/extensions/feishu/src/tools/docx/docx-table-ops.d.ts +16 -16927
- package/dist/extensions/feishu/src/tools/docx/docx-table-ops.js +0 -2
- package/dist/extensions/feishu/src/tools/tools.js +0 -2
- package/dist/extensions/feishu/src/transport/client/client.js +2 -4
- package/dist/extensions/feishu/src/transport/client/lark-sdk-logger.js +0 -2
- package/dist/extensions/feishu/src/transport/client/lark-sdk.d.ts +3 -0
- package/dist/extensions/feishu/src/transport/client/lark-sdk.js +14 -0
- package/dist/extensions/feishu/src/transport/reliability/dedupe.js +0 -2
- package/dist/extensions/feishu/src/transport/reliability/inbound-pipeline.js +0 -2
- package/dist/extensions/feishu/src/transport/socket-mode/monitor.js +0 -2
- package/dist/extensions/feishu/src/transport/socket-mode/retry.js +0 -2
- package/dist/extensions/feishu/src/transport/text/mentions.js +0 -2
- package/dist/extensions/feishu/src/transport/webhook/monitor.js +3 -5
- package/dist/extensions/feishu/src/ui/config-surface.js +0 -2
- package/dist/extensions/feishu/src/workflow-progress.js +0 -2
- package/dist/extensions/google/src/image-generation-provider.js +0 -2
- package/dist/extensions/minimax/src/image-generation-provider.js +0 -2
- package/dist/extensions/openai/src/image-generation-provider.js +0 -2
- package/dist/extensions/telegram/src/access-control.js +0 -2
- package/dist/extensions/telegram/src/account-manager.js +0 -2
- package/dist/extensions/telegram/src/actions/message-actions.js +0 -2
- package/dist/extensions/telegram/src/adapters/command-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/config-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/debounce-keys.js +0 -2
- package/dist/extensions/telegram/src/adapters/gateway-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/gateway-setup.js +0 -2
- package/dist/extensions/telegram/src/adapters/inbound-access.js +0 -2
- package/dist/extensions/telegram/src/adapters/index.js +0 -2
- package/dist/extensions/telegram/src/adapters/onboard-cli.js +0 -2
- package/dist/extensions/telegram/src/adapters/outbound-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/security-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/setup-wizard.js +0 -2
- package/dist/extensions/telegram/src/adapters/status-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +0 -2
- package/dist/extensions/telegram/src/api-root.js +0 -2
- package/dist/extensions/telegram/src/approval-delivery.js +0 -2
- package/dist/extensions/telegram/src/approval-store.js +0 -2
- package/dist/extensions/telegram/src/caption.js +0 -2
- package/dist/extensions/telegram/src/command-handler.js +0 -2
- package/dist/extensions/telegram/src/config-schema.js +0 -2
- package/dist/extensions/telegram/src/conversation-id.js +0 -2
- package/dist/extensions/telegram/src/dedupe.js +0 -2
- package/dist/extensions/telegram/src/delivery-chat-id.js +0 -2
- package/dist/extensions/telegram/src/doctor.js +0 -2
- package/dist/extensions/telegram/src/draft-stream-lifecycle.js +0 -2
- package/dist/extensions/telegram/src/draft-stream-loop.js +0 -2
- package/dist/extensions/telegram/src/draft-stream.js +0 -2
- package/dist/extensions/telegram/src/errors.js +0 -2
- package/dist/extensions/telegram/src/exec-approval-handler.js +0 -2
- package/dist/extensions/telegram/src/exec-approvals.js +0 -2
- package/dist/extensions/telegram/src/focus-handler.js +0 -2
- package/dist/extensions/telegram/src/format.js +0 -2
- package/dist/extensions/telegram/src/group-config-resolver.js +0 -2
- package/dist/extensions/telegram/src/inbound-coalescer.js +0 -2
- package/dist/extensions/telegram/src/inbound-processor.js +0 -2
- package/dist/extensions/telegram/src/index.js +0 -2
- package/dist/extensions/telegram/src/inline-keyboards.js +0 -2
- package/dist/extensions/telegram/src/network-errors.js +0 -2
- package/dist/extensions/telegram/src/outbound-sender.js +0 -2
- package/dist/extensions/telegram/src/pairing-config-resolver.js +0 -2
- package/dist/extensions/telegram/src/plugin-defaults.js +0 -2
- package/dist/extensions/telegram/src/plugin.js +0 -2
- package/dist/extensions/telegram/src/polling-session.js +0 -2
- package/dist/extensions/telegram/src/proxy-fetch.js +0 -2
- package/dist/extensions/telegram/src/reactions.js +0 -2
- package/dist/extensions/telegram/src/reply-params.js +0 -2
- package/dist/extensions/telegram/src/routing-integration.js +0 -2
- package/dist/extensions/telegram/src/send-options.js +0 -2
- package/dist/extensions/telegram/src/sent-cache.js +0 -2
- package/dist/extensions/telegram/src/startup-errors.js +0 -2
- package/dist/extensions/telegram/src/telegram-actions.js +0 -2
- package/dist/extensions/telegram/src/telegram-draft-errors.js +0 -2
- package/dist/extensions/telegram/src/thread-bindings.js +0 -2
- package/dist/extensions/telegram/src/timeout-abort.js +0 -2
- package/dist/extensions/telegram/src/token-resolver.js +0 -2
- package/dist/extensions/telegram/src/update-offset-store.js +0 -2
- package/dist/extensions/telegram/src/workflow-progress.js +0 -2
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/adapters/onboard-cli.js +0 -2
- package/dist/extensions/weixin/src/api/api.js +0 -2
- package/dist/extensions/weixin/src/api/config-cache.js +0 -2
- package/dist/extensions/weixin/src/api/session-guard.js +0 -2
- package/dist/extensions/weixin/src/api/types.js +0 -2
- package/dist/extensions/weixin/src/auth/accounts.js +0 -2
- package/dist/extensions/weixin/src/auth/login-qr.js +0 -2
- package/dist/extensions/weixin/src/auth/pairing.js +0 -2
- package/dist/extensions/weixin/src/auth/weixin-account-id.js +0 -2
- package/dist/extensions/weixin/src/cdn/aes-ecb.js +0 -2
- package/dist/extensions/weixin/src/cdn/cdn-upload.js +0 -2
- package/dist/extensions/weixin/src/cdn/cdn-url.js +0 -2
- package/dist/extensions/weixin/src/cdn/pic-decrypt.js +0 -2
- package/dist/extensions/weixin/src/cdn/upload.js +0 -2
- package/dist/extensions/weixin/src/cli/gateway-qr-login.js +0 -2
- package/dist/extensions/weixin/src/cli/qr-login.js +0 -2
- package/dist/extensions/weixin/src/config-schema.js +0 -2
- package/dist/extensions/weixin/src/config-surface.js +0 -2
- package/dist/extensions/weixin/src/delivery-to.js +0 -2
- package/dist/extensions/weixin/src/index.js +0 -2
- package/dist/extensions/weixin/src/media/data-url.js +0 -2
- package/dist/extensions/weixin/src/media/media-download.js +0 -2
- package/dist/extensions/weixin/src/media/mime.js +0 -2
- package/dist/extensions/weixin/src/media/silk-transcode.js +0 -2
- package/dist/extensions/weixin/src/messaging/context-token-init.js +0 -2
- package/dist/extensions/weixin/src/messaging/debug-mode.js +0 -2
- package/dist/extensions/weixin/src/messaging/error-notice.js +0 -2
- package/dist/extensions/weixin/src/messaging/inbound.js +0 -2
- package/dist/extensions/weixin/src/messaging/markdown-filter.js +0 -2
- package/dist/extensions/weixin/src/messaging/process-message.js +0 -2
- package/dist/extensions/weixin/src/messaging/send-media.js +0 -2
- package/dist/extensions/weixin/src/messaging/send.js +0 -2
- package/dist/extensions/weixin/src/messaging/slash-commands.js +0 -2
- package/dist/extensions/weixin/src/messaging/typing-ticket-store.js +0 -2
- package/dist/extensions/weixin/src/monitor/monitor.js +0 -2
- package/dist/extensions/weixin/src/outbound-send.js +0 -2
- package/dist/extensions/weixin/src/pairing-config-resolver.js +0 -2
- package/dist/extensions/weixin/src/plugin.js +0 -2
- package/dist/extensions/weixin/src/routing-integration.js +0 -2
- package/dist/extensions/weixin/src/storage/state-dir.js +0 -2
- package/dist/extensions/weixin/src/storage/sync-buf.js +0 -2
- package/dist/extensions/weixin/src/util/logger.js +0 -2
- package/dist/extensions/weixin/src/util/random.js +0 -2
- package/dist/extensions/weixin/src/util/redact.js +0 -2
- package/dist/extensions/weixin/src/workflow-progress.js +0 -2
- package/dist/gateway/static/root/assets/{activity-store-B4s0ipx2.js → activity-store-uu1xu9Pl.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BSccACje.js → agent-avatar-dicebear-BuO-OVfD.js} +1 -1
- package/dist/gateway/static/root/assets/agents-Bpv3h31T.js +2 -0
- package/dist/gateway/static/root/assets/{api-BMdUsNCV.js → api-CwL38LEV.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-DrLGhYkI.js → app-management-settings-panel-B6OU3Eol.js} +1 -1
- package/dist/gateway/static/root/assets/appearance-settings-BaP4GFvN.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-DZKNIMRg.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-BQ17IK9x.js → archive-plugin-CJX3zIh_.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-HXvgWHXu.js → attachment-load-CI1ejk_l.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-CjIWpsch.js → automation-suggestion-card-CjmhICbv.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-BtZl3B8m.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-DifWJzNZ.js → binary-plugins-CZ8nOXqK.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DtRzIkPU.js → block-editor-BoSfyS_j.js} +46 -46
- package/dist/gateway/static/root/assets/browser-settings-page-CL1UiPcb.js +8 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-DazKjWW1.js → capability-presets-api-XzDKxPZ8.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-settings-panel-Cvrw4fD1.js → capability-presets-settings-panel-Dc_uHYgl.js} +2 -2
- package/dist/gateway/static/root/assets/{channel-recipient-api-Bea6if_6.js → channel-recipient-api-DYLBAhFF.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-mALvXpJj.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-CZuEsO5b.js +1 -0
- package/dist/gateway/static/root/assets/{connector-logo-BjbYbJjQ.js → connector-logo-BSjlInHT.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-Cm_E3mmI.js +2 -0
- package/dist/gateway/static/root/assets/desktop-pet-DcJc91-C.js +1 -0
- package/dist/gateway/static/root/assets/desktop-pet-settings-CdeqTa3Q.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-C8zZNUzC.js → directory-picker-path-field-Cp3fpm0k.js} +1 -1
- package/dist/gateway/static/root/assets/{dreaming-settings-gJSw7Adk.js → dreaming-settings-Bwj1O3zr.js} +3 -3
- package/dist/gateway/static/root/assets/{extension-debug-page-DFE5ADJ0.js → extension-debug-page-D_1xpKbZ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CfR-aW8G.js → extension-page-CqZNCj96.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CFIEbs2L.js → extension-settings-page-5MWbtQaQ.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-B6M_ra8U.js → gateway-config-api-Co_IaS34.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-kmeWm2Pt.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DNA3OOzV.js → gateway-startup-retry-BM_xvzl0.js} +1 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-FoO-R4_U.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-CkJq7N5g.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-D88opgcs.js → goals-config-api-DrtsYjXz.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-DRAN-R64.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-D07UL8Jo.js → goals-settings-wq9TKhIZ.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-YCSNOcXC.js → heartbeat-settings-B5zDoHbo.js} +1 -1
- package/dist/gateway/static/root/assets/index-DIlxvrlG.css +1 -0
- package/dist/gateway/static/root/assets/index-apLU0Hun.js +196 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-3tC9iD21.js +1 -0
- package/dist/gateway/static/root/assets/local-app-workbench-page-CT-vDTLK.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CKvtLzsF.js → local-apps-page-B9ruF9GV.js} +1 -1
- package/dist/gateway/static/root/assets/locale-store-GfSwnwIZ.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-Ca1X8X2P.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-BVSFG99p.js → markdown-split-CzuhSQAB.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DdOjIVk3.js → media-plugins-a3R4y-EL.js} +1 -1
- package/dist/gateway/static/root/assets/messages-B0B40tpO.js +5 -0
- package/dist/gateway/static/root/assets/models-hub-panel-CbTlz9Of.js +2 -0
- package/dist/gateway/static/root/assets/{notes-page-ZbLR3awn.js → notes-page-BCxDy2dV.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-z6sBX9B2.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-DMlQERNg.js → page-tabs-CJfk6M78.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-CbiJRPxK.js → preview-open-alternatives-MFopTSgF.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-DU29deIr.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-Ck3DLTlZ.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-gLsLyAyi.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-BZTj3hxl.js → save-bar-controls-D0uhU3Z8.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-CxYDObjT.js → schedule-field-NGOH-7wV.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-CBbXgpKQ.js → schema-form-BJz5LoqG.js} +1 -1
- package/dist/gateway/static/root/assets/schemas-DgQq6Z5S.js +64 -0
- package/dist/gateway/static/root/assets/sessions-page-TmNoWpa_.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CtPhh2m9.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-BySKZ8rp.js → settings-collapsible-section-oDnUHnX_.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-CjINay6t.js → settings-form-section-DND90dDt.js} +1 -1
- package/dist/gateway/static/root/assets/settings-loading-skeleton-CEJtaoQp.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-BNrVwuL7.js → settings-page-B1LJlRi9.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-HdlQOOqp.js → settings-page-layout-CsrLuDsW.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BPCJPHHY.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-DC-eQONB.js → share-preview-page-C1PwLh-p.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-DCuqr7js.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-kn1Vypcy.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-k6VIqTkK.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-CVa90q2f.js → system-settings-panel-BEsrEkSx.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-D1cOpgsy.js → theme-store-Bi6hMBDb.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-DIKF9vpz.js → typed-models-lib-dOypdlMf.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-DnvpI0Ys.js → use-channel-catalog-f8A-PVuq.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-B9Y_Ciav.js +1 -0
- package/dist/gateway/static/root/assets/{user-profile-fields-editor-y8gTmkPX.js → user-profile-fields-editor-DGC38Lx7.js} +1 -1
- package/dist/gateway/static/root/assets/{user-profile-settings-panel-C3pvqe28.js → user-profile-settings-panel-DFkZ-tan.js} +1 -1
- package/dist/gateway/static/root/assets/{utils-BK2vwu_3.js → utils-CEIYZihF.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DK6gaQsA.js +1 -0
- package/dist/gateway/static/root/assets/work-discovery-page-DSJb9Kq7.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-DVavwV3D.js +1 -0
- package/dist/gateway/static/root/assets/work-page-foJDp0nz.js +1 -0
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BYqZpFCC.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-DgO0WAzs.js +11 -0
- package/dist/gateway/static/root/favicon.svg +1 -187
- package/dist/gateway/static/root/index.html +8 -7
- package/dist/gateway/static/root/logo-dark.svg +1 -185
- package/dist/gateway/static/root/logo.svg +1 -185
- package/dist/package.js +1 -3
- package/dist/src/activity/context.js +0 -2
- package/dist/src/activity/emitter.js +0 -2
- package/dist/src/activity/service.js +0 -2
- package/dist/src/agent/agent-manager.d.ts +1 -0
- package/dist/src/agent/agent-manager.js +1 -2
- package/dist/src/agent/agent-scope.js +0 -2
- package/dist/src/agent/background-review/coordinator.js +0 -2
- package/dist/src/agent/background-review/prompts.js +0 -2
- package/dist/src/agent/background-review/run-background-review.js +0 -2
- package/dist/src/agent/background-review/settings.js +0 -2
- package/dist/src/agent/bootstrap/bootstrap-cache.js +0 -2
- package/dist/src/agent/bootstrap/bootstrap-context.js +0 -2
- package/dist/src/agent/bootstrap/bootstrap-files.js +0 -2
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +0 -2
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +0 -2
- package/dist/src/agent/bootstrap/project-agents-context.js +0 -2
- package/dist/src/agent/capabilities/definitions.js +0 -2
- package/dist/src/agent/capabilities/registry.js +0 -2
- package/dist/src/agent/child-agent-factory.js +0 -2
- package/dist/src/agent/client-error-format.js +0 -2
- package/dist/src/agent/code-intelligence/binary.js +0 -2
- package/dist/src/agent/code-intelligence/runtime.js +0 -2
- package/dist/src/agent/code-intelligence/tools.js +0 -2
- package/dist/src/agent/coding/turn-diff-tracker.js +0 -2
- package/dist/src/agent/context/expand-at-file-mentions.js +0 -2
- package/dist/src/agent/context/project-context.js +0 -2
- package/dist/src/agent/context/workspace-seed.js +0 -2
- package/dist/src/agent/context/workspace-state.js +0 -2
- package/dist/src/agent/context/workspace.js +0 -2
- package/dist/src/agent/embedded/run-for-session.js +0 -2
- package/dist/src/agent/embedded/run-turn.js +0 -2
- package/dist/src/agent/embedded/runs.js +0 -2
- package/dist/src/agent/embedded/session-manager-init.js +0 -2
- package/dist/src/agent/embedded/session-runner.js +0 -2
- package/dist/src/agent/embedded/session-tool-result-guard.js +0 -2
- package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js +0 -2
- package/dist/src/agent/embedded/subscribe-session.js +0 -2
- package/dist/src/agent/embedded/system-prompt-override.js +0 -2
- package/dist/src/agent/embedded/tool-result-context-guard.js +0 -2
- package/dist/src/agent/embedded/tool-result-truncation.js +0 -2
- package/dist/src/agent/embedded/xopc-auth-storage.js +0 -2
- package/dist/src/agent/embedded/xopc-stream-bridge.js +0 -2
- package/dist/src/agent/embedded/xopc-tools-bridge.js +0 -2
- package/dist/src/agent/failover-error.js +0 -2
- package/dist/src/agent/fallback/candidates.js +0 -2
- package/dist/src/agent/fallback/reason.js +0 -2
- package/dist/src/agent/feedback/feedback-coordinator.js +0 -2
- package/dist/src/agent/goals/checklist-judge.js +0 -2
- package/dist/src/agent/goals/checklist-types.js +0 -2
- package/dist/src/agent/goals/evaluate-turn.js +0 -2
- package/dist/src/agent/goals/goal-locale.js +0 -2
- package/dist/src/agent/goals/judge.js +0 -2
- package/dist/src/agent/goals/persistent-goal-service.js +0 -2
- package/dist/src/agent/goals/post-turn.js +0 -2
- package/dist/src/agent/goals/state.js +0 -2
- package/dist/src/agent/image/generation/bundled-registry.js +0 -2
- package/dist/src/agent/image/generation/bundled.js +0 -2
- package/dist/src/agent/image/generation/image-assets.js +0 -2
- package/dist/src/agent/image/generation/model-ref.js +0 -2
- package/dist/src/agent/image/generation/normalization.js +0 -2
- package/dist/src/agent/image/generation/openai-compatible-image-provider.js +0 -2
- package/dist/src/agent/image/generation/provider-registry.js +0 -2
- package/dist/src/agent/image/generation/runtime.js +0 -2
- package/dist/src/agent/image/image-helpers.js +0 -2
- package/dist/src/agent/image/image-model-fallback.js +0 -2
- package/dist/src/agent/image/inbound-image-handling.js +0 -2
- package/dist/src/agent/image/load-image-media.js +0 -2
- package/dist/src/agent/image/tool-model-config.js +0 -2
- package/dist/src/agent/image/understanding/pi-ai-provider.js +0 -2
- package/dist/src/agent/image/understanding/provider-registry.js +0 -2
- package/dist/src/agent/image/understanding/runtime.js +0 -2
- package/dist/src/agent/image/vision-detection.js +0 -2
- package/dist/src/agent/inbound/attachment-pipeline.js +0 -2
- package/dist/src/agent/inbound/inbound-loop.js +0 -2
- package/dist/src/agent/inbound/turn-dispatcher.js +0 -2
- package/dist/src/agent/ipc/bus.js +0 -2
- package/dist/src/agent/ipc/inbox.js +0 -2
- package/dist/src/agent/ipc/socket.js +0 -2
- package/dist/src/agent/ipc/types.js +0 -2
- package/dist/src/agent/lifecycle/handlers/compaction.js +0 -2
- package/dist/src/agent/lifecycle/hook-handler.js +0 -2
- package/dist/src/agent/lifecycle/manager.js +0 -2
- package/dist/src/agent/lifecycle/progress.js +0 -2
- package/dist/src/agent/lifecycle/timeout-wrapper.js +0 -2
- package/dist/src/agent/lifecycle/typing.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-config.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-names.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -2
- package/dist/src/agent/mcp/embedded-mcp.js +0 -2
- package/dist/src/agent/mcp/mcp-config-shared.js +0 -2
- package/dist/src/agent/mcp/mcp-http.js +0 -2
- package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -2
- package/dist/src/agent/mcp/mcp-stdio.js +0 -2
- package/dist/src/agent/mcp/mcp-tool-meta.js +0 -2
- package/dist/src/agent/mcp/mcp-transport-config.js +0 -2
- package/dist/src/agent/mcp/mcp-transport.js +0 -2
- package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +0 -2
- package/dist/src/agent/media-generation/model-ref.js +0 -2
- package/dist/src/agent/media-generation/normalization.types.js +0 -2
- package/dist/src/agent/media-generation/runtime-shared.js +0 -2
- package/dist/src/agent/memory/agent-message-access.js +0 -2
- package/dist/src/agent/memory/builtin-memory-store.js +0 -2
- package/dist/src/agent/memory/builtin-provider.js +0 -2
- package/dist/src/agent/memory/compaction.js +0 -2
- package/dist/src/agent/memory/context/planner.js +0 -2
- package/dist/src/agent/memory/context-fence.js +0 -2
- package/dist/src/agent/memory/create-memory-manager.js +0 -2
- package/dist/src/agent/memory/dreaming/config.js +0 -2
- package/dist/src/agent/memory/dreaming/constants.js +0 -2
- package/dist/src/agent/memory/dreaming/deep-promotion.js +0 -2
- package/dist/src/agent/memory/dreaming/events.js +0 -2
- package/dist/src/agent/memory/dreaming/last-run.js +0 -2
- package/dist/src/agent/memory/dreaming/light-sweep.js +0 -2
- package/dist/src/agent/memory/dreaming/preview.js +0 -2
- package/dist/src/agent/memory/dreaming/promotion-lifecycle.js +0 -2
- package/dist/src/agent/memory/dreaming/rem-patterns.js +0 -2
- package/dist/src/agent/memory/dreaming/scope.js +0 -2
- package/dist/src/agent/memory/dreaming/short-term-store.js +0 -2
- package/dist/src/agent/memory/dreaming/utils.js +0 -2
- package/dist/src/agent/memory/lifecycle.js +0 -2
- package/dist/src/agent/memory/manager.js +0 -2
- package/dist/src/agent/memory/memory-config.js +0 -2
- package/dist/src/agent/memory/message-sanitizer.js +0 -2
- package/dist/src/agent/memory/plugin-discovery.js +0 -2
- package/dist/src/agent/memory/sensitivity.js +0 -2
- package/dist/src/agent/memory/source-origin.js +0 -2
- package/dist/src/agent/memory/stub-memory-provider.js +0 -2
- package/dist/src/agent/memory/summary-generator.js +0 -2
- package/dist/src/agent/memory/understanding/correction.js +0 -2
- package/dist/src/agent/memory/understanding/quality.js +0 -2
- package/dist/src/agent/memory/understanding/service.js +0 -2
- package/dist/src/agent/memory/user-context-coordinator.js +0 -2
- package/dist/src/agent/memory/user-message-text.js +0 -2
- package/dist/src/agent/memory/window.js +0 -2
- package/dist/src/agent/messaging/command-handler.js +0 -2
- package/dist/src/agent/messaging/message-router.js +0 -2
- package/dist/src/agent/messaging/outbound-coordinator.js +0 -2
- package/dist/src/agent/messaging/stream-manager.js +0 -2
- package/dist/src/agent/middleware/context.js +0 -2
- package/dist/src/agent/middleware/self-verify.js +0 -2
- package/dist/src/agent/models/manager.js +0 -2
- package/dist/src/agent/models/request-limiter.js +0 -2
- package/dist/src/agent/models/selection.js +0 -2
- package/dist/src/agent/orchestration/agent-event-handler.js +0 -2
- package/dist/src/agent/orchestration/agent-orchestrator.js +0 -2
- package/dist/src/agent/orchestration/llm-turn-retry.js +0 -2
- package/dist/src/agent/orchestration/loop-guard.js +0 -2
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +0 -2
- package/dist/src/agent/prompt/cache-boundary.js +0 -2
- package/dist/src/agent/prompt/memory/index.js +0 -2
- package/dist/src/agent/prompt/safety.js +0 -2
- package/dist/src/agent/prompt/sanitize-for-prompt.js +0 -2
- package/dist/src/agent/prompt/sections/behavior.js +0 -2
- package/dist/src/agent/prompt/sections/memory-skills.js +0 -2
- package/dist/src/agent/prompt/sections/messaging-runtime.js +0 -2
- package/dist/src/agent/prompt/sections/project-context.js +0 -2
- package/dist/src/agent/prompt/sections/tooling.js +0 -2
- package/dist/src/agent/prompt/sections/workspace-runtime.js +0 -2
- package/dist/src/agent/prompt/service-prompt-builder.js +0 -2
- package/dist/src/agent/prompt/subagent-context.js +0 -2
- package/dist/src/agent/prompt/system-prompt-params.js +0 -2
- package/dist/src/agent/prompt/system-prompt.js +0 -2
- package/dist/src/agent/prompt/system-reminder.js +0 -2
- package/dist/src/agent/reply/apply-turn-user-enrichment.js +0 -2
- package/dist/src/agent/reply/post-compaction-context.js +0 -2
- package/dist/src/agent/reply/startup-context.js +0 -2
- package/dist/src/agent/reply/workspace-boundary-read.js +0 -2
- package/dist/src/agent/sandbox/command-validator.js +0 -2
- package/dist/src/agent/sandbox/exec-policy.js +0 -2
- package/dist/src/agent/sandbox/path-policy.js +0 -2
- package/dist/src/agent/sandbox/sanitize-env-vars.js +0 -2
- package/dist/src/agent/sandbox/types.js +0 -2
- package/dist/src/agent/service/async-queue.js +0 -2
- package/dist/src/agent/service/btw-query.js +0 -2
- package/dist/src/agent/service/build-direct-message-content.js +0 -2
- package/dist/src/agent/service/direct-turn-helpers.js +0 -2
- package/dist/src/agent/service/parse-outbound-session-key.js +0 -2
- package/dist/src/agent/service/process-direct-one-shot.js +0 -2
- package/dist/src/agent/service/process-direct-streaming.js +0 -2
- package/dist/src/agent/service/session-context-report.js +0 -2
- package/dist/src/agent/service/webchat-tts.js +0 -2
- package/dist/src/agent/service-inbound-utils.js +0 -2
- package/dist/src/agent/service.js +1 -2
- package/dist/src/agent/service.types.d.ts +2 -0
- package/dist/src/agent/session/session-config-service.js +0 -2
- package/dist/src/agent/session/session-context.js +0 -2
- package/dist/src/agent/session/session-hydrator.js +0 -2
- package/dist/src/agent/session/session-inspector.js +0 -2
- package/dist/src/agent/session/session-lifecycle.js +0 -2
- package/dist/src/agent/session/session-state-bag.js +0 -2
- package/dist/src/agent/session/tracker.js +0 -2
- package/dist/src/agent/skills/config.js +0 -2
- package/dist/src/agent/skills/filesystem-watcher.js +0 -2
- package/dist/src/agent/skills/format-skills-prompt.js +0 -2
- package/dist/src/agent/skills/hub-hash.js +0 -2
- package/dist/src/agent/skills/hub-lock.js +0 -2
- package/dist/src/agent/skills/hub-pull.js +0 -2
- package/dist/src/agent/skills/index.js +0 -2
- package/dist/src/agent/skills/install-target.js +0 -2
- package/dist/src/agent/skills/installer.js +0 -2
- package/dist/src/agent/skills/managed-store.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +0 -2
- package/dist/src/agent/skills/marketplace/marketplace-category-order.js +0 -2
- package/dist/src/agent/skills/marketplace/registry.js +0 -2
- package/dist/src/agent/skills/marketplace/resolve-adapter.js +0 -2
- package/dist/src/agent/skills/parse-skill-metadata.js +0 -2
- package/dist/src/agent/skills/required-env-vars.js +0 -2
- package/dist/src/agent/skills/scanner.js +0 -2
- package/dist/src/agent/skills/skill-manage-ops.js +0 -2
- package/dist/src/agent/skills/skill-manager.js +0 -2
- package/dist/src/agent/skills/skill-markdown-preview-from-raw.js +0 -2
- package/dist/src/agent/skills/skill-tool-gating.js +0 -2
- package/dist/src/agent/skills/skill-view-path.js +0 -2
- package/dist/src/agent/skills/skills-marketplace.js +0 -2
- package/dist/src/agent/skills/test-framework.js +0 -2
- package/dist/src/agent/skills/watcher.js +0 -2
- package/dist/src/agent/skills/workspace-skills-dir.js +0 -2
- package/dist/src/agent/source-context/injector.js +0 -2
- package/dist/src/agent/source-context/types.js +0 -2
- package/dist/src/agent/starter-agents.js +0 -2
- package/dist/src/agent/streaming/reasoning-visibility-sse.js +0 -2
- package/dist/src/agent/tool-manuals/browser.js +0 -2
- package/dist/src/agent/tool-manuals/index.js +0 -2
- package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js +41 -4
- package/dist/src/agent/tools/apply-patch.js +0 -2
- package/dist/src/agent/tools/automation-tool.js +45 -8
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +0 -2
- package/dist/src/agent/tools/browser/tool/schemas.js +0 -2
- package/dist/src/agent/tools/chain-tracker.js +0 -2
- package/dist/src/agent/tools/clarify-tool.js +0 -2
- package/dist/src/agent/tools/cli-clarify.js +0 -2
- package/dist/src/agent/tools/communication.js +0 -2
- package/dist/src/agent/tools/composio-tool.js +0 -2
- package/dist/src/agent/tools/concurrency.js +0 -2
- package/dist/src/agent/tools/create-share-tool.js +0 -2
- package/dist/src/agent/tools/curated-memory-tool.js +0 -2
- package/dist/src/agent/tools/delegate-tool.js +0 -2
- package/dist/src/agent/tools/desktop-pet-tool.d.ts +12 -0
- package/dist/src/agent/tools/desktop-pet-tool.js +28 -2
- package/dist/src/agent/tools/dreaming-tool.js +0 -2
- package/dist/src/agent/tools/edit-diff.js +0 -2
- package/dist/src/agent/tools/error-pattern-matcher.js +0 -2
- package/dist/src/agent/tools/error-tracker.js +0 -2
- package/dist/src/agent/tools/exec-command.js +0 -2
- package/dist/src/agent/tools/execute-code-tool.js +0 -2
- package/dist/src/agent/tools/executor.js +0 -2
- package/dist/src/agent/tools/factory.d.ts +2 -0
- package/dist/src/agent/tools/factory.js +3 -4
- package/dist/src/agent/tools/find.js +0 -2
- package/dist/src/agent/tools/goal-evidence-recorder.js +0 -2
- package/dist/src/agent/tools/goal-tool.d.ts +7 -1
- package/dist/src/agent/tools/goal-tool.js +34 -7
- package/dist/src/agent/tools/grep.js +0 -2
- package/dist/src/agent/tools/image-generate-tool.js +0 -2
- package/dist/src/agent/tools/image-tool.js +0 -2
- package/dist/src/agent/tools/list-dir.js +0 -2
- package/dist/src/agent/tools/media-read-tool.js +0 -2
- package/dist/src/agent/tools/memory-tool.js +0 -2
- package/dist/src/agent/tools/metadata.js +0 -2
- package/dist/src/agent/tools/read.js +0 -2
- package/dist/src/agent/tools/search/http.js +0 -2
- package/dist/src/agent/tools/search/providers/bing-api.js +0 -2
- package/dist/src/agent/tools/search/providers/bing-html.js +0 -2
- package/dist/src/agent/tools/search/providers/brave.js +0 -2
- package/dist/src/agent/tools/search/providers/duckduckgo-html.js +0 -2
- package/dist/src/agent/tools/search/providers/searxng.js +0 -2
- package/dist/src/agent/tools/search/providers/tavily.js +0 -2
- package/dist/src/agent/tools/search/region.js +0 -2
- package/dist/src/agent/tools/search/registry.js +0 -2
- package/dist/src/agent/tools/search/resolve-config.js +0 -2
- package/dist/src/agent/tools/send-media.js +0 -2
- package/dist/src/agent/tools/session-search-tool.js +0 -2
- package/dist/src/agent/tools/session-status-tool.js +0 -2
- package/dist/src/agent/tools/skill-install-tool.js +0 -2
- package/dist/src/agent/tools/skill-manage-tool.js +0 -2
- package/dist/src/agent/tools/skills-tools.js +0 -2
- package/dist/src/agent/tools/structured-output.js +0 -2
- package/dist/src/agent/tools/todo-tool.js +0 -2
- package/dist/src/agent/tools/tool-manual-tool.js +0 -2
- package/dist/src/agent/tools/tool-paths.js +0 -2
- package/dist/src/agent/tools/truncate.js +0 -2
- package/dist/src/agent/tools/tts-tool.js +0 -2
- package/dist/src/agent/tools/update-plan-tool.js +0 -2
- package/dist/src/agent/tools/url-safety.js +0 -2
- package/dist/src/agent/tools/usage-analyzer.js +0 -2
- package/dist/src/agent/tools/web-extract.js +0 -2
- package/dist/src/agent/tools/web.js +4 -4
- package/dist/src/agent/tools/workflow-tool.js +32 -4
- package/dist/src/agent/tools/write.js +23 -5
- package/dist/src/agent/tools/xopc-use-tool.d.ts +6 -2
- package/dist/src/agent/tools/xopc-use-tool.js +216 -8
- package/dist/src/agent/transcript/google-api.js +0 -2
- package/dist/src/agent/transcript/model-selection.js +0 -2
- package/dist/src/agent/transcript/provider-capabilities.js +0 -2
- package/dist/src/agent/transcript/session-transcript-repair.js +0 -2
- package/dist/src/agent/transcript/strip-tool-messages.js +0 -2
- package/dist/src/agent/transcript/thinking-types.js +0 -2
- package/dist/src/agent/transcript/thinking.js +0 -2
- package/dist/src/agent/transcript/tool-call-id.js +0 -2
- package/dist/src/agent/transcript/transcript-hygiene.js +0 -2
- package/dist/src/agent/transcript/transcript-policy.js +0 -2
- package/dist/src/agent/workflow/agent-progress.js +0 -2
- package/dist/src/agent/workflow/builtins/index.js +0 -2
- package/dist/src/agent/workflow/catalog.js +0 -2
- package/dist/src/agent/workflow/progress-broker.js +0 -2
- package/dist/src/agent/workflow/snapshot-empty.js +0 -2
- package/dist/src/agent/workflow/snapshot.js +0 -2
- package/dist/src/agent/workflow/step-labels.js +0 -2
- package/dist/src/agent/workflow/structured-output-tool.js +0 -2
- package/dist/src/agent/workflow/subagent-runner.js +0 -2
- package/dist/src/agent/workflow/workflow-child-tools.js +0 -2
- package/dist/src/agent/workspace-runtime/registry.js +0 -2
- package/dist/src/agent-manifest/index.js +0 -2
- package/dist/src/agent-manifest/preset-chain.js +0 -2
- package/dist/src/agent-manifest/prompt.js +0 -2
- package/dist/src/agent-manifest/resolver.js +0 -2
- package/dist/src/agent-manifest/schema.js +0 -2
- package/dist/src/agent-manifest/validator.js +0 -2
- package/dist/src/agent-runtime/boundary-guard.js +0 -2
- package/dist/src/agent-runtime/memory-runtime.js +0 -2
- package/dist/src/agent-runtime/model-router.js +0 -2
- package/dist/src/agent-runtime/run-trace.js +0 -2
- package/dist/src/agent-runtime/runtime-profile.js +0 -2
- package/dist/src/agent-runtime/tool-registry.js +0 -2
- package/dist/src/agent-runtime/workflow-runtime.js +0 -2
- package/dist/src/ai-assist/text-assist.js +0 -2
- package/dist/src/auth/credentials.js +0 -2
- package/dist/src/auth/index.js +0 -2
- package/dist/src/auth/oauth/anthropic.js +0 -2
- package/dist/src/auth/oauth/github-copilot.js +0 -2
- package/dist/src/auth/oauth/google-oauth/google-antigravity.js +0 -2
- package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js +0 -2
- package/dist/src/auth/oauth/google-oauth/oauth-page.js +0 -2
- package/dist/src/auth/oauth/google-oauth/pkce.js +0 -2
- package/dist/src/auth/oauth/kimi-coding.js +0 -2
- package/dist/src/auth/oauth/minimax-cn.js +0 -2
- package/dist/src/auth/oauth/minimax.js +0 -2
- package/dist/src/auth/oauth/openai-codex.js +0 -2
- package/dist/src/auth/oauth/pkce.js +0 -2
- package/dist/src/auth/profiles/oauth.js +0 -2
- package/dist/src/auth/profiles/order.js +0 -2
- package/dist/src/auth/profiles/profiles.js +0 -2
- package/dist/src/auth/profiles/store.js +0 -2
- package/dist/src/auth/sync-provider-auth.js +0 -2
- package/dist/src/automations/api/routes.js +0 -2
- package/dist/src/automations/domain/schedule.js +0 -2
- package/dist/src/automations/domain/validation.js +0 -2
- package/dist/src/automations/draft/automation-draft-prompt.js +0 -2
- package/dist/src/automations/draft/automation-draft-service.js +0 -2
- package/dist/src/automations/draft/automation-draft-validator.js +0 -2
- package/dist/src/automations/product-events.js +0 -2
- package/dist/src/automations/service/action-executor.js +0 -2
- package/dist/src/automations/service/automation-service.js +0 -2
- package/dist/src/automations/storage/automation-repository.js +0 -2
- package/dist/src/automations/storage/automation-run-repository.js +0 -2
- package/dist/src/browser/actions/extension-registry-bridge.js +0 -2
- package/dist/src/browser/actions/registry.js +0 -2
- package/dist/src/browser/backend-from-config.js +0 -2
- package/dist/src/browser/browser-command-timeout.js +0 -2
- package/dist/src/browser/cache-dir-policy.js +0 -2
- package/dist/src/browser/cdp-local-launcher.js +0 -2
- package/dist/src/browser/cdp-supervisor.js +0 -2
- package/dist/src/browser/free-port.js +0 -2
- package/dist/src/browser/humanize.js +0 -2
- package/dist/src/browser/install-lock.js +0 -2
- package/dist/src/browser/manager.js +0 -2
- package/dist/src/browser/pipeline/output.js +0 -2
- package/dist/src/browser/pipeline/runner.js +0 -2
- package/dist/src/browser/pipeline/schema.js +0 -2
- package/dist/src/browser/pipeline/source.js +0 -2
- package/dist/src/browser/pipeline/template.js +0 -2
- package/dist/src/browser/providers/browser-ext-install.js +0 -2
- package/dist/src/browser/providers/browser-use.js +0 -2
- package/dist/src/browser/providers/browserbase.js +0 -2
- package/dist/src/browser/providers/cloakbrowser.js +0 -2
- package/dist/src/browser/providers/extension-ws-acquire.js +0 -2
- package/dist/src/browser/providers/extension.js +0 -2
- package/dist/src/browser/providers/playwright-doctor.js +13 -4
- package/dist/src/browser/providers/playwright-install.js +0 -2
- package/dist/src/browser/readiness.js +0 -2
- package/dist/src/browser/schemas.js +0 -2
- package/dist/src/browser/session-lifecycle.js +0 -2
- package/dist/src/browser/snapshot-helpers.js +0 -2
- package/dist/src/browser/stealth.js +0 -2
- package/dist/src/browser/url-policy.js +0 -2
- package/dist/src/capabilities/store-connector.js +0 -2
- package/dist/src/channels/attachments/attachment-classifiers.js +0 -2
- package/dist/src/channels/attachments/inbound-persist.js +0 -2
- package/dist/src/channels/attachments/inbound-types.js +0 -2
- package/dist/src/channels/attachments/outbound-tts-persist.js +0 -2
- package/dist/src/channels/attachments/voice-stt-webchat.js +0 -2
- package/dist/src/channels/catalog/channel-catalog-service.js +0 -2
- package/dist/src/channels/config-helpers.js +0 -2
- package/dist/src/channels/envelope-timestamp.js +0 -2
- package/dist/src/channels/exec-approval-runtime.js +0 -2
- package/dist/src/channels/health-monitor.js +0 -2
- package/dist/src/channels/heartbeat-scheduler.js +0 -2
- package/dist/src/channels/internal-outbound.js +0 -2
- package/dist/src/channels/lifecycle-supervisor.js +0 -2
- package/dist/src/channels/manager.js +0 -2
- package/dist/src/channels/media.js +0 -2
- package/dist/src/channels/outbound/deliver.js +0 -2
- package/dist/src/channels/outbound/normalize.js +0 -2
- package/dist/src/channels/outbound/persist-store.js +0 -2
- package/dist/src/channels/outbound/queue.js +0 -2
- package/dist/src/channels/outbound-sender.js +0 -2
- package/dist/src/channels/pairing/allow-from-file.js +0 -2
- package/dist/src/channels/pairing/approve-cli.js +0 -2
- package/dist/src/channels/pairing/pairing-challenge.js +0 -2
- package/dist/src/channels/pairing/pairing-constants.js +0 -2
- package/dist/src/channels/pairing/pairing-events.js +0 -2
- package/dist/src/channels/pairing/pairing-messages.js +0 -2
- package/dist/src/channels/pairing/pairing-service.js +0 -2
- package/dist/src/channels/pairing/pairing-store-adapter.js +0 -2
- package/dist/src/channels/pairing/pairing-store.js +0 -2
- package/dist/src/channels/pairing/paths.js +0 -2
- package/dist/src/channels/pairing/preseed-allow-from.js +0 -2
- package/dist/src/channels/pipeline.js +0 -2
- package/dist/src/channels/plugin-registry.js +0 -2
- package/dist/src/channels/plugins/registry.js +0 -2
- package/dist/src/channels/restart-policy.js +0 -2
- package/dist/src/channels/security-helpers.js +0 -2
- package/dist/src/channels/security.js +0 -2
- package/dist/src/channels/setup-wizard-discovery.js +0 -2
- package/dist/src/chat-commands/agent-edit.js +0 -2
- package/dist/src/chat-commands/builtins/config.js +0 -2
- package/dist/src/chat-commands/builtins/context.js +0 -2
- package/dist/src/chat-commands/builtins/goal.js +0 -2
- package/dist/src/chat-commands/builtins/model.js +0 -2
- package/dist/src/chat-commands/builtins/review.js +0 -2
- package/dist/src/chat-commands/builtins/session.js +0 -2
- package/dist/src/chat-commands/builtins/skill.js +0 -2
- package/dist/src/chat-commands/builtins/subgoal.js +0 -2
- package/dist/src/chat-commands/builtins/system.js +0 -2
- package/dist/src/chat-commands/builtins/thinking.js +0 -2
- package/dist/src/chat-commands/builtins/tts.js +0 -2
- package/dist/src/chat-commands/builtins/workflow.js +0 -2
- package/dist/src/chat-commands/command-parse.js +0 -2
- package/dist/src/chat-commands/config-paths.js +0 -2
- package/dist/src/chat-commands/config-value.js +0 -2
- package/dist/src/chat-commands/context.js +0 -2
- package/dist/src/chat-commands/format-output.js +0 -2
- package/dist/src/chat-commands/index.js +0 -2
- package/dist/src/chat-commands/processor.js +0 -2
- package/dist/src/chat-commands/registry.js +0 -2
- package/dist/src/chat-commands/session-key.js +0 -2
- package/dist/src/cli/argv-invocation.js +0 -2
- package/dist/src/cli/argv.js +0 -2
- package/dist/src/cli/bin.js +0 -2
- package/dist/src/cli/cli-log-level-preset.js +0 -2
- package/dist/src/cli/command-catalog.js +0 -2
- package/dist/src/cli/command-loaders.js +0 -2
- package/dist/src/cli/command-manifest.js +0 -2
- package/dist/src/cli/command-path-matches.js +0 -2
- package/dist/src/cli/command-path-policy.js +0 -2
- package/dist/src/cli/command-startup-policy.js +0 -2
- package/dist/src/cli/commands/agent/interactive.js +0 -2
- package/dist/src/cli/commands/agent/sessions.js +0 -2
- package/dist/src/cli/commands/agent/stream-renderer.js +0 -2
- package/dist/src/cli/commands/agent.js +0 -2
- package/dist/src/cli/commands/agents.js +0 -2
- package/dist/src/cli/commands/auth.js +0 -2
- package/dist/src/cli/commands/browser-cli-helpers.js +0 -2
- package/dist/src/cli/commands/browser.js +0 -2
- package/dist/src/cli/commands/channels.js +0 -2
- package/dist/src/cli/commands/config.js +0 -2
- package/dist/src/cli/commands/connectors.js +0 -2
- package/dist/src/cli/commands/doctor/checks/channel-config.js +0 -2
- package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +0 -2
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js +0 -2
- package/dist/src/cli/commands/doctor/checks/config-health.js +0 -2
- package/dist/src/cli/commands/doctor/checks/database-schema.js +0 -2
- package/dist/src/cli/commands/doctor/checks/gateway-health.js +0 -2
- package/dist/src/cli/commands/doctor/checks/gateway-service.js +0 -2
- package/dist/src/cli/commands/doctor/checks/migrations.js +0 -2
- package/dist/src/cli/commands/doctor/checks/node-version.js +0 -2
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +0 -2
- package/dist/src/cli/commands/doctor/checks/security-audit.js +0 -2
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +0 -2
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +0 -2
- package/dist/src/cli/commands/doctor/checks/version-check.js +0 -2
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +0 -2
- package/dist/src/cli/commands/doctor/flow.js +0 -2
- package/dist/src/cli/commands/doctor/format.js +0 -2
- package/dist/src/cli/commands/doctor/index.js +0 -2
- package/dist/src/cli/commands/extension-create.js +0 -2
- package/dist/src/cli/commands/extension-dev.js +0 -2
- package/dist/src/cli/commands/extension-marketplace.js +0 -2
- package/dist/src/cli/commands/extension-pack.js +0 -2
- package/dist/src/cli/commands/extension.js +0 -2
- package/dist/src/cli/commands/gateway/call.js +0 -2
- package/dist/src/cli/commands/gateway/health.js +0 -2
- package/dist/src/cli/commands/gateway/lifecycle-core.js +0 -2
- package/dist/src/cli/commands/gateway/lifecycle.js +0 -2
- package/dist/src/cli/commands/gateway/logs.js +0 -2
- package/dist/src/cli/commands/gateway/probe.js +0 -2
- package/dist/src/cli/commands/gateway/restart-health.js +0 -2
- package/dist/src/cli/commands/gateway/restart.js +0 -2
- package/dist/src/cli/commands/gateway/run-foreground.js +0 -2
- package/dist/src/cli/commands/gateway/service.js +0 -2
- package/dist/src/cli/commands/gateway/shared.js +0 -2
- package/dist/src/cli/commands/gateway/status.js +0 -2
- package/dist/src/cli/commands/gateway/stop.js +0 -2
- package/dist/src/cli/commands/gateway/subcommands.js +0 -2
- package/dist/src/cli/commands/gateway/token.js +0 -2
- package/dist/src/cli/commands/gateway-ssh-tunnel.js +0 -2
- package/dist/src/cli/commands/gateway.js +0 -2
- package/dist/src/cli/commands/goal.js +0 -2
- package/dist/src/cli/commands/image.js +0 -2
- package/dist/src/cli/commands/init.js +0 -2
- package/dist/src/cli/commands/logs.js +0 -2
- package/dist/src/cli/commands/models.js +0 -2
- package/dist/src/cli/commands/onboard/channels/index.js +0 -2
- package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js +0 -2
- package/dist/src/cli/commands/onboard/channels/registry.js +0 -2
- package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js +0 -2
- package/dist/src/cli/commands/onboard/gateway.js +0 -2
- package/dist/src/cli/commands/onboard/model.js +0 -2
- package/dist/src/cli/commands/onboard.js +0 -2
- package/dist/src/cli/commands/profile.js +0 -2
- package/dist/src/cli/commands/project.js +0 -2
- package/dist/src/cli/commands/providers.js +0 -2
- package/dist/src/cli/commands/resume.js +0 -2
- package/dist/src/cli/commands/search.js +0 -2
- package/dist/src/cli/commands/session/actions.js +0 -2
- package/dist/src/cli/commands/session/utils.js +0 -2
- package/dist/src/cli/commands/session.js +0 -2
- package/dist/src/cli/commands/setup-shared/output.js +0 -2
- package/dist/src/cli/commands/setup-shared/prompts.js +0 -2
- package/dist/src/cli/commands/setup-shared/runner.js +0 -2
- package/dist/src/cli/commands/setup-shared/types.js +0 -2
- package/dist/src/cli/commands/setup.js +0 -2
- package/dist/src/cli/commands/skills-test.js +0 -2
- package/dist/src/cli/commands/skills.js +0 -2
- package/dist/src/cli/commands/tailscale.js +0 -2
- package/dist/src/cli/commands/tui-runner.js +0 -2
- package/dist/src/cli/commands/tui.js +0 -2
- package/dist/src/cli/commands/tunnel.js +0 -2
- package/dist/src/cli/commands/update.js +0 -2
- package/dist/src/cli/commands/voice.js +0 -2
- package/dist/src/cli/context.js +0 -2
- package/dist/src/cli/extension-cli-register.js +0 -2
- package/dist/src/cli/gateway-run-argv.js +0 -2
- package/dist/src/cli/gateway-run-fast-path.js +0 -2
- package/dist/src/cli/index.js +0 -2
- package/dist/src/cli/registry.js +0 -2
- package/dist/src/cli/templates.js +0 -2
- package/dist/src/cli/utils/colors.js +0 -2
- package/dist/src/cli/utils/gateway-client-options.js +0 -2
- package/dist/src/cli/utils/gateway-client.js +0 -2
- package/dist/src/cli/utils/init-workspace-core.js +0 -2
- package/dist/src/cli/utils/init-workspace.js +0 -2
- package/dist/src/cli/utils/oauth-login.js +0 -2
- package/dist/src/cli/utils/oauth-providers.js +0 -2
- package/dist/src/cli/utils/session.js +0 -2
- package/dist/src/commands/agents.config.js +0 -2
- package/dist/src/config/agent-profile.js +0 -2
- package/dist/src/config/agent-typed-models.js +0 -2
- package/dist/src/config/commands.flags.js +0 -2
- package/dist/src/config/default-model.js +0 -2
- package/dist/src/config/diff.js +0 -2
- package/dist/src/config/gateway-bind.js +0 -2
- package/dist/src/config/index.js +0 -2
- package/dist/src/config/loader.js +0 -2
- package/dist/src/config/mcp-config-normalize.js +0 -2
- package/dist/src/config/model-input.js +0 -2
- package/dist/src/config/models-json.js +0 -2
- package/dist/src/config/paths-state.js +0 -2
- package/dist/src/config/paths.js +0 -2
- package/dist/src/config/profile.js +0 -2
- package/dist/src/config/public-url.js +0 -2
- package/dist/src/config/reload.js +0 -2
- package/dist/src/config/resolve-config-value.js +0 -2
- package/dist/src/config/rules.js +0 -2
- package/dist/src/config/runtime-overrides.js +0 -2
- package/dist/src/config/schema.js +0 -2
- package/dist/src/config/validate-channel-configs.js +0 -2
- package/dist/src/config/voice.js +0 -2
- package/dist/src/config/web-patch.js +0 -2
- package/dist/src/config/workspace-defaults.js +0 -2
- package/dist/src/config/workspace-dirs.js +0 -2
- package/dist/src/config/workspace-path-helpers.js +0 -2
- package/dist/src/config/workspace-path.js +0 -2
- package/dist/src/connectors/approval.js +0 -2
- package/dist/src/connectors/auth-provider-registry.js +0 -2
- package/dist/src/connectors/builtin-catalog.js +0 -2
- package/dist/src/connectors/catalog.js +0 -2
- package/dist/src/connectors/composio-catalog.js +0 -2
- package/dist/src/connectors/composio-logo.js +0 -2
- package/dist/src/connectors/composio-sessions.js +9 -5
- package/dist/src/connectors/composio-triggers.js +0 -2
- package/dist/src/connectors/composio.js +0 -2
- package/dist/src/connectors/connector-memory-sync.js +0 -2
- package/dist/src/connectors/health.js +0 -2
- package/dist/src/connectors/install.js +0 -2
- package/dist/src/connectors/instances.js +0 -2
- package/dist/src/connectors/integration-strategy.js +0 -2
- package/dist/src/connectors/lifecycle.js +0 -2
- package/dist/src/connectors/materialize.js +0 -2
- package/dist/src/connectors/policy.js +0 -2
- package/dist/src/connectors/providers.js +0 -2
- package/dist/src/connectors/registries/modelscope.js +0 -2
- package/dist/src/connectors/registries/official-mcp.js +0 -2
- package/dist/src/connectors/registries/search.js +0 -2
- package/dist/src/connectors/registries/smithery.js +0 -2
- package/dist/src/connectors/runtime-adapter-registry.js +0 -2
- package/dist/src/connectors/secret-store.js +0 -2
- package/dist/src/connectors/setup-secrets.js +0 -2
- package/dist/src/connectors/supervisor.js +0 -2
- package/dist/src/connectors/usage.js +0 -2
- package/dist/src/connectors/workflow-preflight.js +0 -2
- package/dist/src/daemon/constants.js +0 -2
- package/dist/src/daemon/install-plan.js +0 -2
- package/dist/src/daemon/launchd.js +0 -2
- package/dist/src/daemon/schtasks.js +0 -2
- package/dist/src/daemon/service-audit.js +0 -2
- package/dist/src/daemon/service.js +0 -2
- package/dist/src/daemon/systemd.js +0 -2
- package/dist/src/document-understanding/extract.js +0 -2
- package/dist/src/errors/index.js +0 -2
- package/dist/src/extensions/activation-context.js +0 -2
- package/dist/src/extensions/activation-planner.js +0 -2
- package/dist/src/extensions/api.js +0 -2
- package/dist/src/extensions/bundle-mcp.js +0 -2
- package/dist/src/extensions/bundled-extension-activation.js +0 -2
- package/dist/src/extensions/diagnostics.js +0 -2
- package/dist/src/extensions/discover-extensions.js +0 -2
- package/dist/src/extensions/engine-check.js +0 -2
- package/dist/src/extensions/extension-metadata-snapshot.js +0 -2
- package/dist/src/extensions/extension-registry-impl.js +0 -2
- package/dist/src/extensions/health.js +0 -2
- package/dist/src/extensions/hooks.js +0 -2
- package/dist/src/extensions/index.js +0 -2
- package/dist/src/extensions/install-transaction.js +0 -2
- package/dist/src/extensions/install.js +0 -2
- package/dist/src/extensions/loader.js +0 -2
- package/dist/src/extensions/lockfile.js +0 -2
- package/dist/src/extensions/manifest-registry.js +0 -2
- package/dist/src/extensions/marketplace.js +0 -2
- package/dist/src/extensions/media-provider-contracts.js +0 -2
- package/dist/src/extensions/normalize-manifest.js +0 -2
- package/dist/src/extensions/onboard-helpers.js +0 -2
- package/dist/src/extensions/package-contract.js +0 -2
- package/dist/src/extensions/sdk/channel-entry.js +0 -2
- package/dist/src/extensions/sdk/channel-helpers.js +0 -2
- package/dist/src/extensions/sdk/index.js +0 -2
- package/dist/src/extensions/sdk/lazy.js +0 -2
- package/dist/src/extensions/sdk/testing.js +0 -2
- package/dist/src/extensions/security.js +0 -2
- package/dist/src/extensions/slots.js +0 -2
- package/dist/src/extensions/speech-provider-contracts.js +0 -2
- package/dist/src/extensions/store-zip-limits.js +0 -2
- package/dist/src/extensions/typed-event-bus.js +0 -2
- package/dist/src/extensions/types/hooks.js +0 -2
- package/dist/src/extensions/types/providers.js +0 -2
- package/dist/src/extensions/update.js +0 -2
- package/dist/src/extensions/when-context.js +0 -2
- package/dist/src/extensions/when-expression.js +0 -2
- package/dist/src/gateway/agent-builtin-tools.js +0 -2
- package/dist/src/gateway/agent-run-relay.js +0 -2
- package/dist/src/gateway/agents-admin.js +0 -2
- package/dist/src/gateway/auth.js +0 -2
- package/dist/src/gateway/capability-presets-admin.js +0 -2
- package/dist/src/gateway/chat-limits.js +0 -2
- package/dist/src/gateway/chat-stream/mapper.js +28 -14
- package/dist/src/gateway/chat-stream/pet-feedback.d.ts +13 -0
- package/dist/src/gateway/chat-stream/pet-feedback.js +45 -0
- package/dist/src/gateway/chat-stream/protocol.d.ts +26 -0
- package/dist/src/gateway/clarify-bridge.js +3 -3
- package/dist/src/gateway/clarify-runtime.js +0 -2
- package/dist/src/gateway/client-ip.js +0 -2
- package/dist/src/gateway/config-tools-web.js +0 -2
- package/dist/src/gateway/credential.js +0 -2
- package/dist/src/gateway/discovery/mdns.js +0 -2
- package/dist/src/gateway/dreaming-automation-reconciler.js +0 -2
- package/dist/src/gateway/ensure-network-cors.js +0 -2
- package/dist/src/gateway/file-path-classifier.js +0 -2
- package/dist/src/gateway/file-reference-registry.js +0 -2
- package/dist/src/gateway/global-defaults-admin.js +0 -2
- package/dist/src/gateway/heartbeat/service.js +0 -2
- package/dist/src/gateway/hono/app.js +0 -2
- package/dist/src/gateway/hono/lib/agent-model.js +0 -2
- package/dist/src/gateway/hono/lib/config-payload.js +0 -2
- package/dist/src/gateway/hono/lib/extension-assets.js +0 -2
- package/dist/src/gateway/hono/lib/extension-store.js +0 -2
- package/dist/src/gateway/hono/lib/mask-secret-length.js +0 -2
- package/dist/src/gateway/hono/lib/route-logger.js +0 -2
- package/dist/src/gateway/hono/lib/safe-providers-config.js +0 -2
- package/dist/src/gateway/hono/lib/safe-voice-config.js +0 -2
- package/dist/src/gateway/hono/lib/startup-unavailable.js +0 -2
- package/dist/src/gateway/hono/lib/static-ui.js +0 -2
- package/dist/src/gateway/hono/middleware/auth.js +0 -2
- package/dist/src/gateway/hono/middleware/log-context.js +0 -2
- package/dist/src/gateway/hono/middleware/logger.js +0 -2
- package/dist/src/gateway/hono/middleware/route-errors.js +0 -2
- package/dist/src/gateway/hono/middleware/scopes.js +0 -2
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js +0 -2
- package/dist/src/gateway/hono/oauth-async.js +0 -2
- package/dist/src/gateway/hono/oauth.js +0 -2
- package/dist/src/gateway/hono/routes/activity.js +0 -2
- package/dist/src/gateway/hono/routes/agent-stream.js +0 -2
- package/dist/src/gateway/hono/routes/agents.js +0 -2
- package/dist/src/gateway/hono/routes/ai-assist.js +0 -2
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +0 -2
- package/dist/src/gateway/hono/routes/browser-install.js +0 -2
- package/dist/src/gateway/hono/routes/browser.js +0 -2
- package/dist/src/gateway/hono/routes/capabilities.js +0 -2
- package/dist/src/gateway/hono/routes/capability-presets.js +0 -2
- package/dist/src/gateway/hono/routes/channels.js +0 -2
- package/dist/src/gateway/hono/routes/commands-skills.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/agents.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/misc.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/result.js +0 -2
- package/dist/src/gateway/hono/routes/config.js +0 -2
- package/dist/src/gateway/hono/routes/connectors.js +0 -2
- package/dist/src/gateway/hono/routes/doctor.js +0 -2
- package/dist/src/gateway/hono/routes/dreaming.js +0 -2
- package/dist/src/gateway/hono/routes/exposure.js +0 -2
- package/dist/src/gateway/hono/routes/extension-gateway.js +0 -2
- package/dist/src/gateway/hono/routes/global-defaults.js +0 -2
- package/dist/src/gateway/hono/routes/goals.js +0 -2
- package/dist/src/gateway/hono/routes/home.js +0 -2
- package/dist/src/gateway/hono/routes/host-fs.js +0 -2
- package/dist/src/gateway/hono/routes/index.js +0 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -2
- package/dist/src/gateway/hono/routes/lazy-fallback.js +0 -2
- package/dist/src/gateway/hono/routes/local-apps.js +0 -2
- package/dist/src/gateway/hono/routes/logs.js +0 -2
- package/dist/src/gateway/hono/routes/mcp.js +0 -2
- package/dist/src/gateway/hono/routes/media.js +0 -2
- package/dist/src/gateway/hono/routes/memory.js +0 -2
- package/dist/src/gateway/hono/routes/migrations.js +0 -2
- package/dist/src/gateway/hono/routes/mobile.js +0 -2
- package/dist/src/gateway/hono/routes/models.js +0 -2
- package/dist/src/gateway/hono/routes/notes.js +3 -3
- package/dist/src/gateway/hono/routes/projects.js +0 -2
- package/dist/src/gateway/hono/routes/public-gateway.js +0 -2
- package/dist/src/gateway/hono/routes/search.js +0 -2
- package/dist/src/gateway/hono/routes/sessions.js +0 -2
- package/dist/src/gateway/hono/routes/shares.js +0 -2
- package/dist/src/gateway/hono/routes/site-shares.js +0 -2
- package/dist/src/gateway/hono/routes/status.js +0 -2
- package/dist/src/gateway/hono/routes/tui.js +0 -2
- package/dist/src/gateway/hono/routes/tunnel.js +0 -2
- package/dist/src/gateway/hono/routes/update.js +0 -2
- package/dist/src/gateway/hono/routes/voice.js +0 -2
- package/dist/src/gateway/hono/routes/work-discovery.js +0 -2
- package/dist/src/gateway/hono/routes/workflows.js +0 -2
- package/dist/src/gateway/hono/routes/workspace.js +0 -2
- package/dist/src/gateway/hono/routes/you.js +0 -2
- package/dist/src/gateway/hono/sse-json.js +0 -2
- package/dist/src/gateway/hono/sse.js +0 -2
- package/dist/src/gateway/host.js +0 -2
- package/dist/src/gateway/image-capabilities.js +0 -2
- package/dist/src/gateway/listen.js +0 -2
- package/dist/src/gateway/lock.js +0 -2
- package/dist/src/gateway/ports.js +0 -2
- package/dist/src/gateway/protocol.js +0 -2
- package/dist/src/gateway/public-url.js +0 -2
- package/dist/src/gateway/rate-limit/auth-policy.js +0 -2
- package/dist/src/gateway/rate-limit/buckets.js +0 -2
- package/dist/src/gateway/rate-limit/env-flags.js +0 -2
- package/dist/src/gateway/resolve-channel-connect-defer.js +0 -2
- package/dist/src/gateway/resolve-webchat-session-key.js +0 -2
- package/dist/src/gateway/respawn.js +0 -2
- package/dist/src/gateway/run-loop.js +0 -2
- package/dist/src/gateway/runtime-config.js +0 -2
- package/dist/src/gateway/security/audit.js +0 -2
- package/dist/src/gateway/security/csp.js +0 -2
- package/dist/src/gateway/security/dangerous-tools.js +0 -2
- package/dist/src/gateway/security/external-content.js +0 -2
- package/dist/src/gateway/security/known-weak-secrets.js +0 -2
- package/dist/src/gateway/security/loopback.js +0 -2
- package/dist/src/gateway/security/operator-scopes.js +0 -2
- package/dist/src/gateway/security/origin-check.js +0 -2
- package/dist/src/gateway/security/preauth-connection-budget.js +0 -2
- package/dist/src/gateway/security/secret-equal.js +0 -2
- package/dist/src/gateway/server-tailscale.js +0 -2
- package/dist/src/gateway/server.js +0 -2
- package/dist/src/gateway/service/agent-runner.js +0 -2
- package/dist/src/gateway/service/config-coordinator.js +0 -2
- package/dist/src/gateway/service/marketplace-service.js +0 -2
- package/dist/src/gateway/service/run-gateway-agent.js +0 -2
- package/dist/src/gateway/service/session-chat-ids.js +0 -2
- package/dist/src/gateway/service/sessions-api.js +0 -2
- package/dist/src/gateway/service/sse-hub.js +0 -2
- package/dist/src/gateway/service.js +1 -2
- package/dist/src/gateway/session-reset-service.js +0 -2
- package/dist/src/gateway/startup-readiness.js +0 -2
- package/dist/src/gateway/startup-trace.js +0 -2
- package/dist/src/gateway/tailscale-auth.js +0 -2
- package/dist/src/gateway/tailscale-lifecycle.js +0 -2
- package/dist/src/gateway/tls-server.js +0 -2
- package/dist/src/gateway/trusted-proxy.js +0 -2
- package/dist/src/gateway/user-turn-input.js +0 -2
- package/dist/src/gateway/workspace-editor-path.js +0 -2
- package/dist/src/gateway/workspace-file-search.js +0 -2
- package/dist/src/gateway/workspace-fs-file-list.js +0 -2
- package/dist/src/gateway/workspace-heartbeat-path.js +0 -2
- package/dist/src/gateway/workspace-ripgrep.js +0 -2
- package/dist/src/gateway/ws-security.js +0 -2
- package/dist/src/generated/bundled-image-generation-providers.js +0 -2
- package/dist/src/goals/goal-contract-draft.js +0 -2
- package/dist/src/goals/goal-evidence-review.js +0 -2
- package/dist/src/goals/goal-notifications.js +0 -2
- package/dist/src/goals/goal-queue-store.js +0 -2
- package/dist/src/goals/goal-runner.js +0 -2
- package/dist/src/goals/goal-service.js +0 -2
- package/dist/src/goals/goal-store.js +0 -2
- package/dist/src/goals/goal-workflow-judge.js +0 -2
- package/dist/src/heartbeat/active-hours.js +0 -2
- package/dist/src/heartbeat/content-check.js +0 -2
- package/dist/src/heartbeat/event-prompt.js +0 -2
- package/dist/src/heartbeat/tokens.js +0 -2
- package/dist/src/heartbeat/wake.js +0 -2
- package/dist/src/i18n/format.js +0 -2
- package/dist/src/i18n/goals-bundle.js +0 -2
- package/dist/src/i18n/locale.js +0 -2
- package/dist/src/i18n/locales/goals.en.js +0 -2
- package/dist/src/i18n/locales/goals.zh.js +0 -2
- package/dist/src/i18n/locales/share-tool.en.js +0 -2
- package/dist/src/i18n/locales/share-tool.zh.js +0 -2
- package/dist/src/i18n/share-tool-bundle.js +0 -2
- package/dist/src/index.js +0 -2
- package/dist/src/infra/brew.js +0 -2
- package/dist/src/infra/bus/queue.js +0 -2
- package/dist/src/infra/debounce.js +0 -2
- package/dist/src/infra/exec.js +0 -2
- package/dist/src/infra/gateway-process-argv.js +0 -2
- package/dist/src/infra/gateway-processes.js +0 -2
- package/dist/src/infra/host-env-security-policy.js +0 -2
- package/dist/src/infra/host-env-security.js +0 -2
- package/dist/src/infra/http-proxy-env.js +0 -2
- package/dist/src/infra/is-main.js +0 -2
- package/dist/src/infra/json-utf8-bytes.js +0 -2
- package/dist/src/infra/node-sqlite.js +0 -2
- package/dist/src/infra/package-json.js +0 -2
- package/dist/src/infra/package-update-steps.js +0 -2
- package/dist/src/infra/path-env.js +0 -2
- package/dist/src/infra/path-prepend.js +0 -2
- package/dist/src/infra/ports.js +0 -2
- package/dist/src/infra/rate-limit/failure-limiter.js +0 -2
- package/dist/src/infra/rate-limit/keyed-store.js +0 -2
- package/dist/src/infra/rate-limit/rate-limiter.js +0 -2
- package/dist/src/infra/restart.js +0 -2
- package/dist/src/infra/retry.js +0 -2
- package/dist/src/infra/run-command.js +0 -2
- package/dist/src/infra/sqlite-errors.js +0 -2
- package/dist/src/infra/ssh-tunnel.js +0 -2
- package/dist/src/infra/stable-node-path.js +0 -2
- package/dist/src/infra/tailscale.js +0 -2
- package/dist/src/infra/undici-fetch.js +0 -2
- package/dist/src/infra/unhandled-rejections.js +0 -2
- package/dist/src/infra/update-channels.js +0 -2
- package/dist/src/infra/update-check.js +0 -2
- package/dist/src/infra/update-global.js +0 -2
- package/dist/src/infra/update-lock.js +0 -2
- package/dist/src/infra/update-log.js +0 -2
- package/dist/src/infra/update-restart.js +0 -2
- package/dist/src/infra/update-runner.js +0 -2
- package/dist/src/infra/update-startup.js +0 -2
- package/dist/src/infra/warning-filter.js +0 -2
- package/dist/src/infra/write-file-atomic.js +0 -2
- package/dist/src/knowledge/connected-knowledge-pipeline.js +0 -2
- package/dist/src/knowledge/coordinator.js +0 -2
- package/dist/src/knowledge/ingestion-service.js +0 -2
- package/dist/src/local-apps/acceptance.js +0 -2
- package/dist/src/local-apps/preview-runtime-bridge.js +0 -2
- package/dist/src/local-apps/runtime-entry.js +0 -2
- package/dist/src/local-apps/scaffold.js +0 -2
- package/dist/src/local-apps/service.js +0 -2
- package/dist/src/local-apps/store.js +0 -2
- package/dist/src/markdown/chunk.js +0 -2
- package/dist/src/markdown/code-spans.js +0 -2
- package/dist/src/markdown/fences.js +0 -2
- package/dist/src/markdown/frontmatter.js +0 -2
- package/dist/src/markdown/ir.js +0 -2
- package/dist/src/markdown/render.js +0 -2
- package/dist/src/markdown/tables.js +0 -2
- package/dist/src/mcp/channel-bridge.js +0 -2
- package/dist/src/mcp/channel-server.js +0 -2
- package/dist/src/mcp/channel-shared.js +0 -2
- package/dist/src/mcp/channel-tools.js +0 -2
- package/dist/src/mcp/gateway-http-client.js +0 -2
- package/dist/src/media/media-reference.js +0 -2
- package/dist/src/media/paths.js +0 -2
- package/dist/src/media/session-references.js +0 -2
- package/dist/src/media/store.js +0 -2
- package/dist/src/media/uri.js +0 -2
- package/dist/src/media-shared/http/api-key-rotation.js +0 -2
- package/dist/src/media-shared/http/deadline.js +0 -2
- package/dist/src/media-shared/http/private-network.js +0 -2
- package/dist/src/media-shared/http/provider-http-errors.js +0 -2
- package/dist/src/media-shared/http/provider-http.js +0 -2
- package/dist/src/media-shared/http/resolve-provider-http-request-config.js +0 -2
- package/dist/src/media-shared/http/ssrf-guard.js +0 -2
- package/dist/src/media-shared/http/test-helpers/mock-server.js +0 -2
- package/dist/src/media-understanding/audio-transcription-runner.js +0 -2
- package/dist/src/media-understanding/openai-compatible-audio.js +0 -2
- package/dist/src/media-understanding/registry.js +0 -2
- package/dist/src/media-understanding/resolve-entries.js +0 -2
- package/dist/src/media-understanding/runner.js +0 -2
- package/dist/src/migrations/config/default-capability-preset.js +0 -2
- package/dist/src/migrations/registry.js +0 -2
- package/dist/src/migrations/runner.js +0 -2
- package/dist/src/mobile/notification-service.js +0 -2
- package/dist/src/mobile/notification-store.js +0 -2
- package/dist/src/mobile/notification-types.js +0 -2
- package/dist/src/notes/agent-context.js +0 -2
- package/dist/src/notes/attachment-ref.js +0 -2
- package/dist/src/notes/note-attachment-sync.js +0 -2
- package/dist/src/notes/note-index-meta.js +0 -2
- package/dist/src/notes/note-markdown.js +0 -2
- package/dist/src/notes/paths.js +0 -2
- package/dist/src/notes/service.d.ts +3 -1
- package/dist/src/notes/service.js +19 -5
- package/dist/src/notes/store.js +0 -2
- package/dist/src/package-version.js +0 -2
- package/dist/src/pets/factory.d.ts +13 -0
- package/dist/src/pets/factory.js +23 -2
- package/dist/src/pets/manifest.js +0 -2
- package/dist/src/pets/validator.js +0 -2
- package/dist/src/process/kill-tree.js +0 -2
- package/dist/src/project-trust/trust-store.js +0 -2
- package/dist/src/projects/automation-bind.js +0 -2
- package/dist/src/projects/goal-bind.js +0 -2
- package/dist/src/projects/memory-bind.js +0 -2
- package/dist/src/projects/project-agent-suggestion.js +0 -2
- package/dist/src/projects/project-agent.js +0 -2
- package/dist/src/projects/project-kind.js +0 -2
- package/dist/src/projects/project-loop.js +0 -2
- package/dist/src/projects/project-service.js +0 -2
- package/dist/src/projects/project-store.js +0 -2
- package/dist/src/projects/session-bind.js +0 -2
- package/dist/src/projects/workflow-bind.js +0 -2
- package/dist/src/projects/workspace-project.js +0 -2
- package/dist/src/projects/workspace.js +0 -2
- package/dist/src/providers/auth-runtime/auth-profile-store.js +0 -2
- package/dist/src/providers/auth-runtime/is-configured.js +0 -2
- package/dist/src/providers/auth-runtime/oauth.js +0 -2
- package/dist/src/providers/auth-runtime/resolve-api-key.js +0 -2
- package/dist/src/providers/auth-runtime/resolve-auth.js +0 -2
- package/dist/src/providers/constants.js +0 -2
- package/dist/src/providers/domestic-presets.js +0 -2
- package/dist/src/providers/env-keys.js +0 -2
- package/dist/src/providers/extension-stream-bridge.js +0 -2
- package/dist/src/providers/index.js +0 -2
- package/dist/src/providers/model-call.js +0 -2
- package/dist/src/providers/model-discovery.js +0 -2
- package/dist/src/providers/model-registry.js +0 -2
- package/dist/src/providers/model-supplements.js +0 -2
- package/dist/src/providers/plugin-registry.js +0 -2
- package/dist/src/providers/presentation.js +0 -2
- package/dist/src/remote-access/exposure-guards.js +0 -2
- package/dist/src/remote-access/exposure-manager.js +0 -2
- package/dist/src/review/review-git.js +0 -2
- package/dist/src/review/review-types.js +0 -2
- package/dist/src/routing/account-id.js +0 -2
- package/dist/src/routing/agent-session-key.js +0 -2
- package/dist/src/routing/bindings.js +0 -2
- package/dist/src/routing/index.js +0 -2
- package/dist/src/routing/resolve-route.js +0 -2
- package/dist/src/routing/resolve-tui-session-key.js +0 -2
- package/dist/src/routing/session-key-utils.js +0 -2
- package/dist/src/routing/session-key.js +0 -2
- package/dist/src/session/abort-cutoff.js +0 -2
- package/dist/src/session/chat-export.js +0 -2
- package/dist/src/session/client-history.js +0 -2
- package/dist/src/session/compaction-checkpoints.js +0 -2
- package/dist/src/session/config-store.js +0 -2
- package/dist/src/session/init-session-turn.js +0 -2
- package/dist/src/session/lifecycle-timestamps.js +0 -2
- package/dist/src/session/load-jsonl-entries.js +0 -2
- package/dist/src/session/manager.js +0 -2
- package/dist/src/session/patch-metadata.js +0 -2
- package/dist/src/session/reset-policy.js +0 -2
- package/dist/src/session/reset-triggers.js +0 -2
- package/dist/src/session/reset-type.js +0 -2
- package/dist/src/session/resolve-session.js +0 -2
- package/dist/src/session/session-context-for-llm.js +0 -2
- package/dist/src/session/session-id.js +0 -2
- package/dist/src/session/session-title.js +0 -2
- package/dist/src/session/session-workspace.js +0 -2
- package/dist/src/session/store.js +0 -2
- package/dist/src/session/stored-rows-to-file-entries.js +0 -2
- package/dist/src/session/thinking-resolve.js +0 -2
- package/dist/src/session/transcript-events.js +0 -2
- package/dist/src/session/transcript-format.js +0 -2
- package/dist/src/session/transcript-outline.js +0 -2
- package/dist/src/session/transcript-stats.js +0 -2
- package/dist/src/session/types.js +0 -2
- package/dist/src/session/user-round-delete.js +0 -2
- package/dist/src/share/share-audit.js +0 -2
- package/dist/src/share/share-auto.js +0 -2
- package/dist/src/share/share-config.js +0 -2
- package/dist/src/share/share-landing.js +0 -2
- package/dist/src/share/share-rate-limit.js +0 -2
- package/dist/src/share/share-store.js +0 -2
- package/dist/src/share/share-thumbnail.js +0 -2
- package/dist/src/share/share-types.js +0 -2
- package/dist/src/share/share-url.js +0 -2
- package/dist/src/share/share-zip.js +0 -2
- package/dist/src/share/site-proxy.js +0 -2
- package/dist/src/share/site-share-config.js +0 -2
- package/dist/src/share/site-share-router.js +0 -2
- package/dist/src/share/site-share-store.js +0 -2
- package/dist/src/share/site-share-types.js +0 -2
- package/dist/src/share/site-static-serve.js +0 -2
- package/dist/src/storage/sqlite/activity-repository.js +0 -2
- package/dist/src/storage/sqlite/config-repository.js +0 -2
- package/dist/src/storage/sqlite/connection.js +0 -2
- package/dist/src/storage/sqlite/connector-repository.js +0 -2
- package/dist/src/storage/sqlite/fts.js +0 -2
- package/dist/src/storage/sqlite/knowledge-repository.js +0 -2
- package/dist/src/storage/sqlite/memory-index-repository.js +0 -2
- package/dist/src/storage/sqlite/memory-records-repository.js +0 -2
- package/dist/src/storage/sqlite/memory-reference-consent-repository.js +0 -2
- package/dist/src/storage/sqlite/migrations/discover.js +0 -2
- package/dist/src/storage/sqlite/migrations/errors.js +0 -2
- package/dist/src/storage/sqlite/migrations/runner.js +0 -2
- package/dist/src/storage/sqlite/note-agent-context-repository.js +0 -2
- package/dist/src/storage/sqlite/notes-repository.js +0 -2
- package/dist/src/storage/sqlite/paths.js +0 -2
- package/dist/src/storage/sqlite/row-mappers.js +0 -2
- package/dist/src/storage/sqlite/schema-version.js +0 -2
- package/dist/src/storage/sqlite/schema.js +0 -2
- package/dist/src/storage/sqlite/session-metadata.js +0 -2
- package/dist/src/storage/sqlite/session-repository.js +0 -2
- package/dist/src/storage/sqlite/transaction.js +0 -2
- package/dist/src/storage/sqlite/transcript-repository.js +0 -2
- package/dist/src/storage/sqlite/user-profile-setup-repository.js +0 -2
- package/dist/src/storage/sqlite/user-trust-repository.js +0 -2
- package/dist/src/tui/backends/embedded-backend.js +0 -2
- package/dist/src/tui/backends/gateway-sse-backend.js +0 -2
- package/dist/src/tui/chat-history.js +0 -2
- package/dist/src/tui/clipboard-image.js +0 -2
- package/dist/src/tui/clipboard-text.js +0 -2
- package/dist/src/tui/components/assistant-message.js +0 -2
- package/dist/src/tui/components/bash-execution.js +0 -2
- package/dist/src/tui/components/bash-summary.js +0 -2
- package/dist/src/tui/components/branch-message-summary.js +0 -2
- package/dist/src/tui/components/branch-summary.js +0 -2
- package/dist/src/tui/components/chat-log.js +0 -2
- package/dist/src/tui/components/compaction-summary.js +0 -2
- package/dist/src/tui/components/custom-editor.js +0 -2
- package/dist/src/tui/components/custom-message.js +0 -2
- package/dist/src/tui/components/dynamic-border.js +0 -2
- package/dist/src/tui/components/extension-dialog.js +0 -2
- package/dist/src/tui/components/fuzzy-filter.js +0 -2
- package/dist/src/tui/components/scoped-models-selector.js +0 -2
- package/dist/src/tui/components/searchable-select-list.js +0 -2
- package/dist/src/tui/components/session-selector.js +0 -2
- package/dist/src/tui/components/settings-selector.js +0 -2
- package/dist/src/tui/components/thinking-selector.js +0 -2
- package/dist/src/tui/components/tool-execution.js +0 -2
- package/dist/src/tui/components/tui-bottom-bar.js +0 -2
- package/dist/src/tui/components/tui-header.js +0 -2
- package/dist/src/tui/components/user-message.js +0 -2
- package/dist/src/tui/components/visual-truncate.js +0 -2
- package/dist/src/tui/extension-host/autocomplete.js +0 -2
- package/dist/src/tui/extension-host/host.js +0 -2
- package/dist/src/tui/extension-host/load-extensions.js +0 -2
- package/dist/src/tui/extension-host/runtime-context.js +0 -2
- package/dist/src/tui/extension-host/runtime.js +0 -2
- package/dist/src/tui/extension-host/surface.js +0 -2
- package/dist/src/tui/extension-host/tool-renderers.js +0 -2
- package/dist/src/tui/format-tui-hotkeys.js +0 -2
- package/dist/src/tui/sse-consumer.js +0 -2
- package/dist/src/tui/theme/dark.js +0 -2
- package/dist/src/tui/theme/light.js +0 -2
- package/dist/src/tui/theme-manager.js +0 -2
- package/dist/src/tui/theme.js +0 -2
- package/dist/src/tui/tool-summary.js +0 -2
- package/dist/src/tui/tui-agent-events.js +0 -2
- package/dist/src/tui/tui-command-formatters.js +0 -2
- package/dist/src/tui/tui-commands.js +0 -2
- package/dist/src/tui/tui-context-usage.js +0 -2
- package/dist/src/tui/tui-extension-user-message.js +0 -2
- package/dist/src/tui/tui-fd-path.js +0 -2
- package/dist/src/tui/tui-file-autocomplete.js +0 -2
- package/dist/src/tui/tui-follow-up-queue.js +0 -2
- package/dist/src/tui/tui-git-branch.js +0 -2
- package/dist/src/tui/tui-keybindings-file.js +0 -2
- package/dist/src/tui/tui-lifecycle.js +0 -2
- package/dist/src/tui/tui-local-shell.js +0 -2
- package/dist/src/tui/tui-model-picker.js +0 -2
- package/dist/src/tui/tui-oauth-login.js +0 -2
- package/dist/src/tui/tui-overlays.js +0 -2
- package/dist/src/tui/tui-picker-overlay.js +0 -2
- package/dist/src/tui/tui-run-state.js +0 -2
- package/dist/src/tui/tui-run-status-format.js +0 -2
- package/dist/src/tui/tui-runtime-hints.js +0 -2
- package/dist/src/tui/tui-scoped-models.js +0 -2
- package/dist/src/tui/tui-session-actions.js +0 -2
- package/dist/src/tui/tui-session-format.js +0 -2
- package/dist/src/tui/tui-session-snapshot.js +0 -2
- package/dist/src/tui/tui-session-stats.js +0 -2
- package/dist/src/tui/tui-settings.js +0 -2
- package/dist/src/tui/tui-skills-autocomplete.js +0 -2
- package/dist/src/tui/tui-startup-resources.js +0 -2
- package/dist/src/tui/tui-startup-text.js +0 -2
- package/dist/src/tui/tui-stdio-filter.js +0 -2
- package/dist/src/tui/tui-submit.js +0 -2
- package/dist/src/tui/tui-suspend.js +0 -2
- package/dist/src/tui/tui-timeline-picker.js +0 -2
- package/dist/src/tui/tui-timeline.js +0 -2
- package/dist/src/tui/tui-tool-diff.js +0 -2
- package/dist/src/tui/tui-tool-result.js +0 -2
- package/dist/src/tui/tui-transcript-tree-picker.js +0 -2
- package/dist/src/tui/tui-transcript-tree.js +0 -2
- package/dist/src/tui/tui-types.js +0 -2
- package/dist/src/tui/tui-workflow-slash.js +0 -2
- package/dist/src/tui/tui.js +0 -2
- package/dist/src/tui/xopc-tui-keybindings.js +0 -2
- package/dist/src/tunnel/broker-client.js +0 -2
- package/dist/src/tunnel/consent.js +0 -2
- package/dist/src/tunnel/enable-lan-pairing.js +0 -2
- package/dist/src/tunnel/env.js +0 -2
- package/dist/src/tunnel/frp-subdomain-host.js +0 -2
- package/dist/src/tunnel/frpc-binary.js +0 -2
- package/dist/src/tunnel/frpc-config.js +0 -2
- package/dist/src/tunnel/frpc-extract.js +0 -2
- package/dist/src/tunnel/frpc-process.js +0 -2
- package/dist/src/tunnel/gateway-lifecycle.js +0 -2
- package/dist/src/tunnel/pair-context.js +0 -2
- package/dist/src/tunnel/pair-url.js +0 -2
- package/dist/src/tunnel/pairing-rate-limit.js +0 -2
- package/dist/src/tunnel/pairing.js +0 -2
- package/dist/src/tunnel/tunnel-audit.js +0 -2
- package/dist/src/tunnel/tunnel-config.js +0 -2
- package/dist/src/tunnel/tunnel-persist.js +0 -2
- package/dist/src/tunnel/tunnel-qr.js +0 -2
- package/dist/src/tunnel/tunnel-rate-limit.js +0 -2
- package/dist/src/tunnel/tunnel-service.js +0 -2
- package/dist/src/tunnel/tunnel-state.js +0 -2
- package/dist/src/tunnel/well-known.js +0 -2
- package/dist/src/user-context/config.js +0 -2
- package/dist/src/user-context/import.js +0 -2
- package/dist/src/user-context/owner.js +0 -2
- package/dist/src/user-context/profile.js +0 -2
- package/dist/src/user-context/projection.js +0 -2
- package/dist/src/user-context/runtime.js +0 -2
- package/dist/src/user-context/source-recommendations.js +0 -2
- package/dist/src/user-context/trust-policy.js +0 -2
- package/dist/src/utils/global-singleton.js +0 -2
- package/dist/src/utils/helpers.js +0 -2
- package/dist/src/utils/index.js +0 -2
- package/dist/src/utils/is-record.js +0 -2
- package/dist/src/utils/logger/audit.js +0 -2
- package/dist/src/utils/logger/config.js +0 -2
- package/dist/src/utils/logger/context.js +0 -2
- package/dist/src/utils/logger/exporters.js +0 -2
- package/dist/src/utils/logger/index.js +0 -2
- package/dist/src/utils/logger/log-store.js +0 -2
- package/dist/src/utils/logger/log-stream.js +0 -2
- package/dist/src/utils/logger/pino-record.js +0 -2
- package/dist/src/utils/logger/redact.js +0 -2
- package/dist/src/utils/logger/rotation.js +0 -2
- package/dist/src/utils/logger/shutdown.js +0 -2
- package/dist/src/utils/logger/stats.js +0 -2
- package/dist/src/utils/logger/streams.js +0 -2
- package/dist/src/utils/logger/types.js +0 -2
- package/dist/src/utils/logger.js +0 -2
- package/dist/src/utils/redact-sensitive-url.js +0 -2
- package/dist/src/utils/sanitize-log.js +0 -2
- package/dist/src/utils/string-coerce.js +0 -2
- package/dist/src/voice/language-profile.js +0 -2
- package/dist/src/voice/local/model-files.js +0 -2
- package/dist/src/voice/local/model-manager.js +0 -2
- package/dist/src/voice/local/models.js +0 -2
- package/dist/src/voice/local/runtime-client.js +0 -2
- package/dist/src/voice/local/runtime-dispatcher.js +0 -2
- package/dist/src/voice/local/runtime-worker.js +12 -4
- package/dist/src/voice/local/wav.js +0 -2
- package/dist/src/voice/metadata/builtin.js +0 -2
- package/dist/src/voice/metadata/registry.js +0 -2
- package/dist/src/voice/stt/availability.js +0 -2
- package/dist/src/voice/stt/config-slice.js +0 -2
- package/dist/src/voice/stt/factory.js +0 -2
- package/dist/src/voice/stt/index.js +0 -2
- package/dist/src/voice/stt/list-providers.js +0 -2
- package/dist/src/voice/stt/mention.js +0 -2
- package/dist/src/voice/stt/preflight.js +0 -2
- package/dist/src/voice/stt/providers/alibaba-transcription.js +0 -2
- package/dist/src/voice/stt/providers/local-transcription.js +0 -2
- package/dist/src/voice/stt/providers/openai-transcription.js +0 -2
- package/dist/src/voice/stt/transcribe-core.js +0 -2
- package/dist/src/voice/stt/types.js +0 -2
- package/dist/src/voice/tts/audio.js +0 -2
- package/dist/src/voice/tts/config-slice.js +0 -2
- package/dist/src/voice/tts/directives.js +0 -2
- package/dist/src/voice/tts/factory.js +0 -2
- package/dist/src/voice/tts/list-providers.js +0 -2
- package/dist/src/voice/tts/merge-config.js +0 -2
- package/dist/src/voice/tts/openai-compatible-speech.js +0 -2
- package/dist/src/voice/tts/payload.js +0 -2
- package/dist/src/voice/tts/preprocess.js +0 -2
- package/dist/src/voice/tts/providers/alibaba-speech.js +0 -2
- package/dist/src/voice/tts/providers/edge-speech.js +0 -2
- package/dist/src/voice/tts/providers/minimax-speech.js +0 -2
- package/dist/src/voice/tts/providers/openai-speech.js +0 -2
- package/dist/src/voice/tts/sentence-boundary.js +0 -2
- package/dist/src/voice/tts/service.js +0 -2
- package/dist/src/voice/tts/speak-core.js +0 -2
- package/dist/src/voice/tts/speech-registry.js +0 -2
- package/dist/src/voice/tts/status-tracker.js +0 -2
- package/dist/src/voice/tts/summarize.js +0 -2
- package/dist/src/voice/tts/types.js +0 -2
- package/dist/src/work-discovery/analyzer.js +0 -2
- package/dist/src/work-discovery/probe.js +0 -2
- package/dist/src/work-discovery/repository.js +0 -2
- package/dist/src/work-discovery/service.js +0 -2
- package/dist/src/work-items/agent-context.js +0 -2
- package/dist/src/work-items/work-item-service.js +0 -2
- package/dist/src/work-items/work-item-store.js +0 -2
- package/dist/src/work-items/work-item-workflow-judge.js +0 -2
- package/dist/src/workflows/authoring/workflow-draft-store.js +0 -2
- package/dist/src/workflows/domain/definition-utils.js +0 -2
- package/dist/src/workflows/domain/run.js +0 -2
- package/dist/src/workflows/domain/schema-validation.js +0 -2
- package/dist/src/workflows/domain/validation.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-prompt.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-service.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-validator.js +0 -2
- package/dist/src/workflows/engine/projector.js +0 -2
- package/dist/src/workflows/engine/workflow-engine.js +0 -2
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +0 -2
- package/dist/src/workflows/runtime/graph-workflow-runtime.js +0 -2
- package/dist/src/workflows/service/run-view-to-snapshot.js +0 -2
- package/dist/src/workflows/service/workflow-run-service.js +1 -3
- package/dist/src/workflows/service/workflow-session-bridge.js +0 -2
- package/dist/src/workflows/service/workflow-session-key.js +0 -2
- package/dist/src/workflows/store/event-store.js +0 -2
- package/dist/src/workflows/store/paths.js +0 -2
- package/dist/src/workflows/store/run-index-store.js +0 -2
- package/dist/src/workflows/store/run-store.js +0 -2
- package/package.json +43 -12
- package/skills/creative/hatch-pet/SKILL.md +1 -0
- package/dist/extensions/dashscope/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/demo-memory/src/index.js.map +0 -1
- package/dist/extensions/fal/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/feishu/src/actions/message-action-handler.js.map +0 -1
- package/dist/extensions/feishu/src/adapters/cli-login.js.map +0 -1
- package/dist/extensions/feishu/src/adapters/gateway-setup.js.map +0 -1
- package/dist/extensions/feishu/src/adapters/onboard-cli.js.map +0 -1
- package/dist/extensions/feishu/src/auth/app-registration.js.map +0 -1
- package/dist/extensions/feishu/src/auth/pairing.js.map +0 -1
- package/dist/extensions/feishu/src/auth/paths.js.map +0 -1
- package/dist/extensions/feishu/src/directory/directory-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/format.js.map +0 -1
- package/dist/extensions/feishu/src/index.js.map +0 -1
- package/dist/extensions/feishu/src/outbound/actions.js.map +0 -1
- package/dist/extensions/feishu/src/outbound/media-load.js.map +0 -1
- package/dist/extensions/feishu/src/outbound/outbound-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/pairing/feishu-pairing-prompt.js.map +0 -1
- package/dist/extensions/feishu/src/pairing-config-resolver.js.map +0 -1
- package/dist/extensions/feishu/src/plugin.js.map +0 -1
- package/dist/extensions/feishu/src/schema/config-schema.js.map +0 -1
- package/dist/extensions/feishu/src/state/accounts.js.map +0 -1
- package/dist/extensions/feishu/src/state/message-bindings.js.map +0 -1
- package/dist/extensions/feishu/src/state/thread-bindings.js.map +0 -1
- package/dist/extensions/feishu/src/status/doctor.js.map +0 -1
- package/dist/extensions/feishu/src/status/status-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/streaming/streaming-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/subagent-hooks.js.map +0 -1
- package/dist/extensions/feishu/src/tools/docx/docx-batch-insert.js.map +0 -1
- package/dist/extensions/feishu/src/tools/docx/docx-color-text.js.map +0 -1
- package/dist/extensions/feishu/src/tools/docx/docx-table-ops.js.map +0 -1
- package/dist/extensions/feishu/src/tools/tools.js.map +0 -1
- package/dist/extensions/feishu/src/transport/client/client.js.map +0 -1
- package/dist/extensions/feishu/src/transport/client/lark-sdk-logger.js.map +0 -1
- package/dist/extensions/feishu/src/transport/reliability/dedupe.js.map +0 -1
- package/dist/extensions/feishu/src/transport/reliability/inbound-pipeline.js.map +0 -1
- package/dist/extensions/feishu/src/transport/socket-mode/monitor.js.map +0 -1
- package/dist/extensions/feishu/src/transport/socket-mode/retry.js.map +0 -1
- package/dist/extensions/feishu/src/transport/text/mentions.js.map +0 -1
- package/dist/extensions/feishu/src/transport/webhook/monitor.js.map +0 -1
- package/dist/extensions/feishu/src/ui/config-surface.js.map +0 -1
- package/dist/extensions/feishu/src/workflow-progress.js.map +0 -1
- package/dist/extensions/google/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/minimax/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/openai/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/telegram/src/access-control.js.map +0 -1
- package/dist/extensions/telegram/src/account-manager.js.map +0 -1
- package/dist/extensions/telegram/src/actions/message-actions.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/command-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/config-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/debounce-keys.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/gateway-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/gateway-setup.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/inbound-access.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/index.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/onboard-cli.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/outbound-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/security-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/setup-wizard.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/status-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/api-root.js.map +0 -1
- package/dist/extensions/telegram/src/approval-delivery.js.map +0 -1
- package/dist/extensions/telegram/src/approval-store.js.map +0 -1
- package/dist/extensions/telegram/src/caption.js.map +0 -1
- package/dist/extensions/telegram/src/command-handler.js.map +0 -1
- package/dist/extensions/telegram/src/config-schema.js.map +0 -1
- package/dist/extensions/telegram/src/conversation-id.js.map +0 -1
- package/dist/extensions/telegram/src/dedupe.js.map +0 -1
- package/dist/extensions/telegram/src/delivery-chat-id.js.map +0 -1
- package/dist/extensions/telegram/src/doctor.js.map +0 -1
- package/dist/extensions/telegram/src/draft-stream-lifecycle.js.map +0 -1
- package/dist/extensions/telegram/src/draft-stream-loop.js.map +0 -1
- package/dist/extensions/telegram/src/draft-stream.js.map +0 -1
- package/dist/extensions/telegram/src/errors.js.map +0 -1
- package/dist/extensions/telegram/src/exec-approval-handler.js.map +0 -1
- package/dist/extensions/telegram/src/exec-approvals.js.map +0 -1
- package/dist/extensions/telegram/src/focus-handler.js.map +0 -1
- package/dist/extensions/telegram/src/format.js.map +0 -1
- package/dist/extensions/telegram/src/group-config-resolver.js.map +0 -1
- package/dist/extensions/telegram/src/inbound-coalescer.js.map +0 -1
- package/dist/extensions/telegram/src/inbound-processor.js.map +0 -1
- package/dist/extensions/telegram/src/index.js.map +0 -1
- package/dist/extensions/telegram/src/inline-keyboards.js.map +0 -1
- package/dist/extensions/telegram/src/network-errors.js.map +0 -1
- package/dist/extensions/telegram/src/outbound-sender.js.map +0 -1
- package/dist/extensions/telegram/src/pairing-config-resolver.js.map +0 -1
- package/dist/extensions/telegram/src/plugin-defaults.js.map +0 -1
- package/dist/extensions/telegram/src/plugin.js.map +0 -1
- package/dist/extensions/telegram/src/polling-session.js.map +0 -1
- package/dist/extensions/telegram/src/proxy-fetch.js.map +0 -1
- package/dist/extensions/telegram/src/reactions.js.map +0 -1
- package/dist/extensions/telegram/src/reply-params.js.map +0 -1
- package/dist/extensions/telegram/src/routing-integration.js.map +0 -1
- package/dist/extensions/telegram/src/send-options.js.map +0 -1
- package/dist/extensions/telegram/src/sent-cache.js.map +0 -1
- package/dist/extensions/telegram/src/startup-errors.js.map +0 -1
- package/dist/extensions/telegram/src/telegram-actions.js.map +0 -1
- package/dist/extensions/telegram/src/telegram-draft-errors.js.map +0 -1
- package/dist/extensions/telegram/src/thread-bindings.js.map +0 -1
- package/dist/extensions/telegram/src/timeout-abort.js.map +0 -1
- package/dist/extensions/telegram/src/token-resolver.js.map +0 -1
- package/dist/extensions/telegram/src/update-offset-store.js.map +0 -1
- package/dist/extensions/telegram/src/workflow-progress.js.map +0 -1
- package/dist/extensions/weixin/src/adapters/onboard-cli.js.map +0 -1
- package/dist/extensions/weixin/src/api/api.js.map +0 -1
- package/dist/extensions/weixin/src/api/config-cache.js.map +0 -1
- package/dist/extensions/weixin/src/api/session-guard.js.map +0 -1
- package/dist/extensions/weixin/src/api/types.js.map +0 -1
- package/dist/extensions/weixin/src/auth/accounts.js.map +0 -1
- package/dist/extensions/weixin/src/auth/login-qr.js.map +0 -1
- package/dist/extensions/weixin/src/auth/pairing.js.map +0 -1
- package/dist/extensions/weixin/src/auth/weixin-account-id.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/aes-ecb.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/cdn-upload.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/cdn-url.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/pic-decrypt.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/upload.js.map +0 -1
- package/dist/extensions/weixin/src/cli/gateway-qr-login.js.map +0 -1
- package/dist/extensions/weixin/src/cli/qr-login.js.map +0 -1
- package/dist/extensions/weixin/src/config-schema.js.map +0 -1
- package/dist/extensions/weixin/src/config-surface.js.map +0 -1
- package/dist/extensions/weixin/src/delivery-to.js.map +0 -1
- package/dist/extensions/weixin/src/index.js.map +0 -1
- package/dist/extensions/weixin/src/media/data-url.js.map +0 -1
- package/dist/extensions/weixin/src/media/media-download.js.map +0 -1
- package/dist/extensions/weixin/src/media/mime.js.map +0 -1
- package/dist/extensions/weixin/src/media/silk-transcode.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/context-token-init.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/error-notice.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/inbound.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/markdown-filter.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/process-message.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/send-media.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/send.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/slash-commands.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/typing-ticket-store.js.map +0 -1
- package/dist/extensions/weixin/src/monitor/monitor.js.map +0 -1
- package/dist/extensions/weixin/src/outbound-send.js.map +0 -1
- package/dist/extensions/weixin/src/pairing-config-resolver.js.map +0 -1
- package/dist/extensions/weixin/src/plugin.js.map +0 -1
- package/dist/extensions/weixin/src/routing-integration.js.map +0 -1
- package/dist/extensions/weixin/src/storage/state-dir.js.map +0 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js.map +0 -1
- package/dist/extensions/weixin/src/util/logger.js.map +0 -1
- package/dist/extensions/weixin/src/util/random.js.map +0 -1
- package/dist/extensions/weixin/src/util/redact.js.map +0 -1
- package/dist/extensions/weixin/src/workflow-progress.js.map +0 -1
- package/dist/gateway/static/root/assets/agents-DZDOcgz5.js +0 -2
- package/dist/gateway/static/root/assets/appearance-settings-BNasnY9D.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-Cmr-Hvm9.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-TWgUAI8t.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-DBsFItW_.js +0 -8
- package/dist/gateway/static/root/assets/channels-settings-BBkzrBYy.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-CuU6ez3y.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DLsZCAw7.js +0 -2
- package/dist/gateway/static/root/assets/desktop-pet-C6V-PHwi.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-5Fcz47XQ.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-BrxzyVW2.js +0 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-DRVRLc5Z.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-8F7NElzP.js +0 -4
- package/dist/gateway/static/root/assets/goals-page-BaoLiV8G.js +0 -2
- package/dist/gateway/static/root/assets/index-CH7XN6KY.js +0 -259
- package/dist/gateway/static/root/assets/index-Dfnl9tp_.css +0 -1
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BHnh5OoY.js +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-Boe8n4zH.js +0 -2
- package/dist/gateway/static/root/assets/locale-store-BneNAR8R.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-Cb4Uptct.js +0 -7
- package/dist/gateway/static/root/assets/messages-t1yPaVCt.js +0 -5
- package/dist/gateway/static/root/assets/models-hub-panel-CNiUKZUV.js +0 -2
- package/dist/gateway/static/root/assets/notes-workbench-C9__VkD6.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-CZhuB5kO.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-BOq4WVdR.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BxGq0ebQ.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-B6gSU_Au.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DwuBL834.js +0 -1
- package/dist/gateway/static/root/assets/settings-loading-skeleton-vitElc-n.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BJeA4mmk.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-DB2KYA2_.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DQtZiejw.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-Pm0fNe_p.js +0 -2
- package/dist/gateway/static/root/assets/user-context-page-DnLqQyRG.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-BiFIIWC4.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-D2-_bC0J.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-B0FPG4eJ.js +0 -1
- package/dist/gateway/static/root/assets/work-page-BDeVxts_.js +0 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BPzS67fU.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-xPhmrRLs.js +0 -11
- package/dist/gateway/static/root/favicon-icon.svg +0 -187
- package/dist/package.js.map +0 -1
- package/dist/src/activity/context.js.map +0 -1
- package/dist/src/activity/emitter.js.map +0 -1
- package/dist/src/activity/service.js.map +0 -1
- package/dist/src/agent/agent-manager.js.map +0 -1
- package/dist/src/agent/agent-scope.js.map +0 -1
- package/dist/src/agent/background-review/coordinator.js.map +0 -1
- package/dist/src/agent/background-review/prompts.js.map +0 -1
- package/dist/src/agent/background-review/run-background-review.js.map +0 -1
- package/dist/src/agent/background-review/settings.js.map +0 -1
- package/dist/src/agent/bootstrap/bootstrap-cache.js.map +0 -1
- package/dist/src/agent/bootstrap/bootstrap-context.js.map +0 -1
- package/dist/src/agent/bootstrap/bootstrap-files.js.map +0 -1
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +0 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +0 -1
- package/dist/src/agent/bootstrap/project-agents-context.js.map +0 -1
- package/dist/src/agent/capabilities/definitions.js.map +0 -1
- package/dist/src/agent/capabilities/registry.js.map +0 -1
- package/dist/src/agent/child-agent-factory.js.map +0 -1
- package/dist/src/agent/client-error-format.js.map +0 -1
- package/dist/src/agent/code-intelligence/binary.js.map +0 -1
- package/dist/src/agent/code-intelligence/runtime.js.map +0 -1
- package/dist/src/agent/code-intelligence/tools.js.map +0 -1
- package/dist/src/agent/coding/turn-diff-tracker.js.map +0 -1
- package/dist/src/agent/context/expand-at-file-mentions.js.map +0 -1
- package/dist/src/agent/context/project-context.js.map +0 -1
- package/dist/src/agent/context/workspace-seed.js.map +0 -1
- package/dist/src/agent/context/workspace-state.js.map +0 -1
- package/dist/src/agent/context/workspace.js.map +0 -1
- package/dist/src/agent/embedded/run-for-session.js.map +0 -1
- package/dist/src/agent/embedded/run-turn.js.map +0 -1
- package/dist/src/agent/embedded/runs.js.map +0 -1
- package/dist/src/agent/embedded/session-manager-init.js.map +0 -1
- package/dist/src/agent/embedded/session-runner.js.map +0 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js.map +0 -1
- package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js.map +0 -1
- package/dist/src/agent/embedded/subscribe-session.js.map +0 -1
- package/dist/src/agent/embedded/system-prompt-override.js.map +0 -1
- package/dist/src/agent/embedded/tool-result-context-guard.js.map +0 -1
- package/dist/src/agent/embedded/tool-result-truncation.js.map +0 -1
- package/dist/src/agent/embedded/xopc-auth-storage.js.map +0 -1
- package/dist/src/agent/embedded/xopc-stream-bridge.js.map +0 -1
- package/dist/src/agent/embedded/xopc-tools-bridge.js.map +0 -1
- package/dist/src/agent/failover-error.js.map +0 -1
- package/dist/src/agent/fallback/candidates.js.map +0 -1
- package/dist/src/agent/fallback/reason.js.map +0 -1
- package/dist/src/agent/feedback/feedback-coordinator.js.map +0 -1
- package/dist/src/agent/goals/checklist-judge.js.map +0 -1
- package/dist/src/agent/goals/checklist-types.js.map +0 -1
- package/dist/src/agent/goals/evaluate-turn.js.map +0 -1
- package/dist/src/agent/goals/goal-locale.js.map +0 -1
- package/dist/src/agent/goals/judge.js.map +0 -1
- package/dist/src/agent/goals/persistent-goal-service.js.map +0 -1
- package/dist/src/agent/goals/post-turn.js.map +0 -1
- package/dist/src/agent/goals/state.js.map +0 -1
- package/dist/src/agent/image/generation/bundled-registry.js.map +0 -1
- package/dist/src/agent/image/generation/bundled.js.map +0 -1
- package/dist/src/agent/image/generation/image-assets.js.map +0 -1
- package/dist/src/agent/image/generation/model-ref.js.map +0 -1
- package/dist/src/agent/image/generation/normalization.js.map +0 -1
- package/dist/src/agent/image/generation/openai-compatible-image-provider.js.map +0 -1
- package/dist/src/agent/image/generation/provider-registry.js.map +0 -1
- package/dist/src/agent/image/generation/runtime.js.map +0 -1
- package/dist/src/agent/image/image-helpers.js.map +0 -1
- package/dist/src/agent/image/image-model-fallback.js.map +0 -1
- package/dist/src/agent/image/inbound-image-handling.js.map +0 -1
- package/dist/src/agent/image/load-image-media.js.map +0 -1
- package/dist/src/agent/image/tool-model-config.js.map +0 -1
- package/dist/src/agent/image/understanding/pi-ai-provider.js.map +0 -1
- package/dist/src/agent/image/understanding/provider-registry.js.map +0 -1
- package/dist/src/agent/image/understanding/runtime.js.map +0 -1
- package/dist/src/agent/image/vision-detection.js.map +0 -1
- package/dist/src/agent/inbound/attachment-pipeline.js.map +0 -1
- package/dist/src/agent/inbound/inbound-loop.js.map +0 -1
- package/dist/src/agent/inbound/turn-dispatcher.js.map +0 -1
- package/dist/src/agent/ipc/bus.js.map +0 -1
- package/dist/src/agent/ipc/inbox.js.map +0 -1
- package/dist/src/agent/ipc/socket.js.map +0 -1
- package/dist/src/agent/ipc/types.js.map +0 -1
- package/dist/src/agent/lifecycle/handlers/compaction.js.map +0 -1
- package/dist/src/agent/lifecycle/hook-handler.js.map +0 -1
- package/dist/src/agent/lifecycle/manager.js.map +0 -1
- package/dist/src/agent/lifecycle/progress.js.map +0 -1
- package/dist/src/agent/lifecycle/timeout-wrapper.js.map +0 -1
- package/dist/src/agent/lifecycle/typing.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-config.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-names.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-policy.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +0 -1
- package/dist/src/agent/mcp/embedded-mcp.js.map +0 -1
- package/dist/src/agent/mcp/mcp-config-shared.js.map +0 -1
- package/dist/src/agent/mcp/mcp-http.js.map +0 -1
- package/dist/src/agent/mcp/mcp-stdio-transport.js.map +0 -1
- package/dist/src/agent/mcp/mcp-stdio.js.map +0 -1
- package/dist/src/agent/mcp/mcp-tool-meta.js.map +0 -1
- package/dist/src/agent/mcp/mcp-transport-config.js.map +0 -1
- package/dist/src/agent/mcp/mcp-transport.js.map +0 -1
- package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +0 -1
- package/dist/src/agent/media-generation/model-ref.js.map +0 -1
- package/dist/src/agent/media-generation/normalization.types.js.map +0 -1
- package/dist/src/agent/media-generation/runtime-shared.js.map +0 -1
- package/dist/src/agent/memory/agent-message-access.js.map +0 -1
- package/dist/src/agent/memory/builtin-memory-store.js.map +0 -1
- package/dist/src/agent/memory/builtin-provider.js.map +0 -1
- package/dist/src/agent/memory/compaction.js.map +0 -1
- package/dist/src/agent/memory/context/planner.js.map +0 -1
- package/dist/src/agent/memory/context-fence.js.map +0 -1
- package/dist/src/agent/memory/create-memory-manager.js.map +0 -1
- package/dist/src/agent/memory/dreaming/config.js.map +0 -1
- package/dist/src/agent/memory/dreaming/constants.js.map +0 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.js.map +0 -1
- package/dist/src/agent/memory/dreaming/events.js.map +0 -1
- package/dist/src/agent/memory/dreaming/last-run.js.map +0 -1
- package/dist/src/agent/memory/dreaming/light-sweep.js.map +0 -1
- package/dist/src/agent/memory/dreaming/preview.js.map +0 -1
- package/dist/src/agent/memory/dreaming/promotion-lifecycle.js.map +0 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js.map +0 -1
- package/dist/src/agent/memory/dreaming/scope.js.map +0 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js.map +0 -1
- package/dist/src/agent/memory/dreaming/utils.js.map +0 -1
- package/dist/src/agent/memory/lifecycle.js.map +0 -1
- package/dist/src/agent/memory/manager.js.map +0 -1
- package/dist/src/agent/memory/memory-config.js.map +0 -1
- package/dist/src/agent/memory/message-sanitizer.js.map +0 -1
- package/dist/src/agent/memory/plugin-discovery.js.map +0 -1
- package/dist/src/agent/memory/sensitivity.js.map +0 -1
- package/dist/src/agent/memory/source-origin.js.map +0 -1
- package/dist/src/agent/memory/stub-memory-provider.js.map +0 -1
- package/dist/src/agent/memory/summary-generator.js.map +0 -1
- package/dist/src/agent/memory/understanding/correction.js.map +0 -1
- package/dist/src/agent/memory/understanding/quality.js.map +0 -1
- package/dist/src/agent/memory/understanding/service.js.map +0 -1
- package/dist/src/agent/memory/user-context-coordinator.js.map +0 -1
- package/dist/src/agent/memory/user-message-text.js.map +0 -1
- package/dist/src/agent/memory/window.js.map +0 -1
- package/dist/src/agent/messaging/command-handler.js.map +0 -1
- package/dist/src/agent/messaging/message-router.js.map +0 -1
- package/dist/src/agent/messaging/outbound-coordinator.js.map +0 -1
- package/dist/src/agent/messaging/stream-manager.js.map +0 -1
- package/dist/src/agent/middleware/context.js.map +0 -1
- package/dist/src/agent/middleware/self-verify.js.map +0 -1
- package/dist/src/agent/models/manager.js.map +0 -1
- package/dist/src/agent/models/request-limiter.js.map +0 -1
- package/dist/src/agent/models/selection.js.map +0 -1
- package/dist/src/agent/orchestration/agent-event-handler.js.map +0 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +0 -1
- package/dist/src/agent/orchestration/llm-turn-retry.js.map +0 -1
- package/dist/src/agent/orchestration/loop-guard.js.map +0 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +0 -1
- package/dist/src/agent/prompt/cache-boundary.js.map +0 -1
- package/dist/src/agent/prompt/memory/index.js.map +0 -1
- package/dist/src/agent/prompt/safety.js.map +0 -1
- package/dist/src/agent/prompt/sanitize-for-prompt.js.map +0 -1
- package/dist/src/agent/prompt/sections/behavior.js.map +0 -1
- package/dist/src/agent/prompt/sections/memory-skills.js.map +0 -1
- package/dist/src/agent/prompt/sections/messaging-runtime.js.map +0 -1
- package/dist/src/agent/prompt/sections/project-context.js.map +0 -1
- package/dist/src/agent/prompt/sections/tooling.js.map +0 -1
- package/dist/src/agent/prompt/sections/workspace-runtime.js.map +0 -1
- package/dist/src/agent/prompt/service-prompt-builder.js.map +0 -1
- package/dist/src/agent/prompt/subagent-context.js.map +0 -1
- package/dist/src/agent/prompt/system-prompt-params.js.map +0 -1
- package/dist/src/agent/prompt/system-prompt.js.map +0 -1
- package/dist/src/agent/prompt/system-reminder.js.map +0 -1
- package/dist/src/agent/reply/apply-turn-user-enrichment.js.map +0 -1
- package/dist/src/agent/reply/post-compaction-context.js.map +0 -1
- package/dist/src/agent/reply/startup-context.js.map +0 -1
- package/dist/src/agent/reply/workspace-boundary-read.js.map +0 -1
- package/dist/src/agent/sandbox/command-validator.js.map +0 -1
- package/dist/src/agent/sandbox/exec-policy.js.map +0 -1
- package/dist/src/agent/sandbox/path-policy.js.map +0 -1
- package/dist/src/agent/sandbox/sanitize-env-vars.js.map +0 -1
- package/dist/src/agent/sandbox/types.js.map +0 -1
- package/dist/src/agent/service/async-queue.js.map +0 -1
- package/dist/src/agent/service/btw-query.js.map +0 -1
- package/dist/src/agent/service/build-direct-message-content.js.map +0 -1
- package/dist/src/agent/service/direct-turn-helpers.js.map +0 -1
- package/dist/src/agent/service/parse-outbound-session-key.js.map +0 -1
- package/dist/src/agent/service/process-direct-one-shot.js.map +0 -1
- package/dist/src/agent/service/process-direct-streaming.js.map +0 -1
- package/dist/src/agent/service/session-context-report.js.map +0 -1
- package/dist/src/agent/service/webchat-tts.js.map +0 -1
- package/dist/src/agent/service-inbound-utils.js.map +0 -1
- package/dist/src/agent/service.js.map +0 -1
- package/dist/src/agent/session/session-config-service.js.map +0 -1
- package/dist/src/agent/session/session-context.js.map +0 -1
- package/dist/src/agent/session/session-hydrator.js.map +0 -1
- package/dist/src/agent/session/session-inspector.js.map +0 -1
- package/dist/src/agent/session/session-lifecycle.js.map +0 -1
- package/dist/src/agent/session/session-state-bag.js.map +0 -1
- package/dist/src/agent/session/tracker.js.map +0 -1
- package/dist/src/agent/skills/config.js.map +0 -1
- package/dist/src/agent/skills/filesystem-watcher.js.map +0 -1
- package/dist/src/agent/skills/format-skills-prompt.js.map +0 -1
- package/dist/src/agent/skills/hub-hash.js.map +0 -1
- package/dist/src/agent/skills/hub-lock.js.map +0 -1
- package/dist/src/agent/skills/hub-pull.js.map +0 -1
- package/dist/src/agent/skills/index.js.map +0 -1
- package/dist/src/agent/skills/install-target.js.map +0 -1
- package/dist/src/agent/skills/installer.js.map +0 -1
- package/dist/src/agent/skills/managed-store.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +0 -1
- package/dist/src/agent/skills/marketplace/marketplace-category-order.js.map +0 -1
- package/dist/src/agent/skills/marketplace/registry.js.map +0 -1
- package/dist/src/agent/skills/marketplace/resolve-adapter.js.map +0 -1
- package/dist/src/agent/skills/parse-skill-metadata.js.map +0 -1
- package/dist/src/agent/skills/required-env-vars.js.map +0 -1
- package/dist/src/agent/skills/scanner.js.map +0 -1
- package/dist/src/agent/skills/skill-manage-ops.js.map +0 -1
- package/dist/src/agent/skills/skill-manager.js.map +0 -1
- package/dist/src/agent/skills/skill-markdown-preview-from-raw.js.map +0 -1
- package/dist/src/agent/skills/skill-tool-gating.js.map +0 -1
- package/dist/src/agent/skills/skill-view-path.js.map +0 -1
- package/dist/src/agent/skills/skills-marketplace.js.map +0 -1
- package/dist/src/agent/skills/test-framework.js.map +0 -1
- package/dist/src/agent/skills/watcher.js.map +0 -1
- package/dist/src/agent/skills/workspace-skills-dir.js.map +0 -1
- package/dist/src/agent/source-context/injector.js.map +0 -1
- package/dist/src/agent/source-context/types.js.map +0 -1
- package/dist/src/agent/starter-agents.js.map +0 -1
- package/dist/src/agent/streaming/reasoning-visibility-sse.js.map +0 -1
- package/dist/src/agent/tool-manuals/browser.js.map +0 -1
- package/dist/src/agent/tool-manuals/index.js.map +0 -1
- package/dist/src/agent/tool-manuals/xopc-use.js.map +0 -1
- package/dist/src/agent/tools/apply-patch.js.map +0 -1
- package/dist/src/agent/tools/automation-tool.js.map +0 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +0 -1
- package/dist/src/agent/tools/browser/tool/schemas.js.map +0 -1
- package/dist/src/agent/tools/chain-tracker.js.map +0 -1
- package/dist/src/agent/tools/clarify-tool.js.map +0 -1
- package/dist/src/agent/tools/cli-clarify.js.map +0 -1
- package/dist/src/agent/tools/communication.js.map +0 -1
- package/dist/src/agent/tools/composio-tool.js.map +0 -1
- package/dist/src/agent/tools/concurrency.js.map +0 -1
- package/dist/src/agent/tools/create-share-tool.js.map +0 -1
- package/dist/src/agent/tools/curated-memory-tool.js.map +0 -1
- package/dist/src/agent/tools/delegate-tool.js.map +0 -1
- package/dist/src/agent/tools/desktop-pet-tool.js.map +0 -1
- package/dist/src/agent/tools/dreaming-tool.js.map +0 -1
- package/dist/src/agent/tools/edit-diff.js.map +0 -1
- package/dist/src/agent/tools/error-pattern-matcher.js.map +0 -1
- package/dist/src/agent/tools/error-tracker.js.map +0 -1
- package/dist/src/agent/tools/exec-command.js.map +0 -1
- package/dist/src/agent/tools/execute-code-tool.js.map +0 -1
- package/dist/src/agent/tools/executor.js.map +0 -1
- package/dist/src/agent/tools/factory.js.map +0 -1
- package/dist/src/agent/tools/find.js.map +0 -1
- package/dist/src/agent/tools/goal-evidence-recorder.js.map +0 -1
- package/dist/src/agent/tools/goal-tool.js.map +0 -1
- package/dist/src/agent/tools/grep.js.map +0 -1
- package/dist/src/agent/tools/image-generate-tool.js.map +0 -1
- package/dist/src/agent/tools/image-tool.js.map +0 -1
- package/dist/src/agent/tools/list-dir.js.map +0 -1
- package/dist/src/agent/tools/media-read-tool.js.map +0 -1
- package/dist/src/agent/tools/memory-tool.js.map +0 -1
- package/dist/src/agent/tools/metadata.js.map +0 -1
- package/dist/src/agent/tools/read.js.map +0 -1
- package/dist/src/agent/tools/search/http.js.map +0 -1
- package/dist/src/agent/tools/search/providers/bing-api.js.map +0 -1
- package/dist/src/agent/tools/search/providers/bing-html.js.map +0 -1
- package/dist/src/agent/tools/search/providers/brave.js.map +0 -1
- package/dist/src/agent/tools/search/providers/duckduckgo-html.js.map +0 -1
- package/dist/src/agent/tools/search/providers/searxng.js.map +0 -1
- package/dist/src/agent/tools/search/providers/tavily.js.map +0 -1
- package/dist/src/agent/tools/search/region.js.map +0 -1
- package/dist/src/agent/tools/search/registry.js.map +0 -1
- package/dist/src/agent/tools/search/resolve-config.js.map +0 -1
- package/dist/src/agent/tools/send-media.js.map +0 -1
- package/dist/src/agent/tools/session-search-tool.js.map +0 -1
- package/dist/src/agent/tools/session-status-tool.js.map +0 -1
- package/dist/src/agent/tools/skill-install-tool.js.map +0 -1
- package/dist/src/agent/tools/skill-manage-tool.js.map +0 -1
- package/dist/src/agent/tools/skills-tools.js.map +0 -1
- package/dist/src/agent/tools/structured-output.js.map +0 -1
- package/dist/src/agent/tools/todo-tool.js.map +0 -1
- package/dist/src/agent/tools/tool-manual-tool.js.map +0 -1
- package/dist/src/agent/tools/tool-paths.js.map +0 -1
- package/dist/src/agent/tools/truncate.js.map +0 -1
- package/dist/src/agent/tools/tts-tool.js.map +0 -1
- package/dist/src/agent/tools/update-plan-tool.js.map +0 -1
- package/dist/src/agent/tools/url-safety.js.map +0 -1
- package/dist/src/agent/tools/usage-analyzer.js.map +0 -1
- package/dist/src/agent/tools/web-extract.js.map +0 -1
- package/dist/src/agent/tools/web.js.map +0 -1
- package/dist/src/agent/tools/workflow-tool.js.map +0 -1
- package/dist/src/agent/tools/write.js.map +0 -1
- package/dist/src/agent/tools/xopc-use-tool.js.map +0 -1
- package/dist/src/agent/transcript/google-api.js.map +0 -1
- package/dist/src/agent/transcript/model-selection.js.map +0 -1
- package/dist/src/agent/transcript/provider-capabilities.js.map +0 -1
- package/dist/src/agent/transcript/session-transcript-repair.js.map +0 -1
- package/dist/src/agent/transcript/strip-tool-messages.js.map +0 -1
- package/dist/src/agent/transcript/thinking-types.js.map +0 -1
- package/dist/src/agent/transcript/thinking.js.map +0 -1
- package/dist/src/agent/transcript/tool-call-id.js.map +0 -1
- package/dist/src/agent/transcript/transcript-hygiene.js.map +0 -1
- package/dist/src/agent/transcript/transcript-policy.js.map +0 -1
- package/dist/src/agent/workflow/agent-progress.js.map +0 -1
- package/dist/src/agent/workflow/builtins/index.js.map +0 -1
- package/dist/src/agent/workflow/catalog.js.map +0 -1
- package/dist/src/agent/workflow/progress-broker.js.map +0 -1
- package/dist/src/agent/workflow/snapshot-empty.js.map +0 -1
- package/dist/src/agent/workflow/snapshot.js.map +0 -1
- package/dist/src/agent/workflow/step-labels.js.map +0 -1
- package/dist/src/agent/workflow/structured-output-tool.js.map +0 -1
- package/dist/src/agent/workflow/subagent-runner.js.map +0 -1
- package/dist/src/agent/workflow/workflow-child-tools.js.map +0 -1
- package/dist/src/agent/workspace-runtime/registry.js.map +0 -1
- package/dist/src/agent-manifest/index.js.map +0 -1
- package/dist/src/agent-manifest/preset-chain.js.map +0 -1
- package/dist/src/agent-manifest/prompt.js.map +0 -1
- package/dist/src/agent-manifest/resolver.js.map +0 -1
- package/dist/src/agent-manifest/schema.js.map +0 -1
- package/dist/src/agent-manifest/validator.js.map +0 -1
- package/dist/src/agent-runtime/boundary-guard.js.map +0 -1
- package/dist/src/agent-runtime/memory-runtime.js.map +0 -1
- package/dist/src/agent-runtime/model-router.js.map +0 -1
- package/dist/src/agent-runtime/run-trace.js.map +0 -1
- package/dist/src/agent-runtime/runtime-profile.js.map +0 -1
- package/dist/src/agent-runtime/tool-registry.js.map +0 -1
- package/dist/src/agent-runtime/workflow-runtime.js.map +0 -1
- package/dist/src/ai-assist/text-assist.js.map +0 -1
- package/dist/src/auth/credentials.js.map +0 -1
- package/dist/src/auth/index.js.map +0 -1
- package/dist/src/auth/oauth/anthropic.js.map +0 -1
- package/dist/src/auth/oauth/github-copilot.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/google-antigravity.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/oauth-page.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/pkce.js.map +0 -1
- package/dist/src/auth/oauth/kimi-coding.js.map +0 -1
- package/dist/src/auth/oauth/minimax-cn.js.map +0 -1
- package/dist/src/auth/oauth/minimax.js.map +0 -1
- package/dist/src/auth/oauth/openai-codex.js.map +0 -1
- package/dist/src/auth/oauth/pkce.js.map +0 -1
- package/dist/src/auth/profiles/oauth.js.map +0 -1
- package/dist/src/auth/profiles/order.js.map +0 -1
- package/dist/src/auth/profiles/profiles.js.map +0 -1
- package/dist/src/auth/profiles/store.js.map +0 -1
- package/dist/src/auth/sync-provider-auth.js.map +0 -1
- package/dist/src/automations/api/routes.js.map +0 -1
- package/dist/src/automations/domain/schedule.js.map +0 -1
- package/dist/src/automations/domain/validation.js.map +0 -1
- package/dist/src/automations/draft/automation-draft-prompt.js.map +0 -1
- package/dist/src/automations/draft/automation-draft-service.js.map +0 -1
- package/dist/src/automations/draft/automation-draft-validator.js.map +0 -1
- package/dist/src/automations/product-events.js.map +0 -1
- package/dist/src/automations/service/action-executor.js.map +0 -1
- package/dist/src/automations/service/automation-service.js.map +0 -1
- package/dist/src/automations/storage/automation-repository.js.map +0 -1
- package/dist/src/automations/storage/automation-run-repository.js.map +0 -1
- package/dist/src/browser/actions/extension-registry-bridge.js.map +0 -1
- package/dist/src/browser/actions/registry.js.map +0 -1
- package/dist/src/browser/backend-from-config.js.map +0 -1
- package/dist/src/browser/browser-command-timeout.js.map +0 -1
- package/dist/src/browser/cache-dir-policy.js.map +0 -1
- package/dist/src/browser/cdp-local-launcher.js.map +0 -1
- package/dist/src/browser/cdp-supervisor.js.map +0 -1
- package/dist/src/browser/free-port.js.map +0 -1
- package/dist/src/browser/humanize.js.map +0 -1
- package/dist/src/browser/install-lock.js.map +0 -1
- package/dist/src/browser/manager.js.map +0 -1
- package/dist/src/browser/pipeline/output.js.map +0 -1
- package/dist/src/browser/pipeline/runner.js.map +0 -1
- package/dist/src/browser/pipeline/schema.js.map +0 -1
- package/dist/src/browser/pipeline/source.js.map +0 -1
- package/dist/src/browser/pipeline/template.js.map +0 -1
- package/dist/src/browser/providers/browser-ext-install.js.map +0 -1
- package/dist/src/browser/providers/browser-use.js.map +0 -1
- package/dist/src/browser/providers/browserbase.js.map +0 -1
- package/dist/src/browser/providers/cloakbrowser.js.map +0 -1
- package/dist/src/browser/providers/extension-ws-acquire.js.map +0 -1
- package/dist/src/browser/providers/extension.js.map +0 -1
- package/dist/src/browser/providers/playwright-doctor.js.map +0 -1
- package/dist/src/browser/providers/playwright-install.js.map +0 -1
- package/dist/src/browser/readiness.js.map +0 -1
- package/dist/src/browser/schemas.js.map +0 -1
- package/dist/src/browser/session-lifecycle.js.map +0 -1
- package/dist/src/browser/snapshot-helpers.js.map +0 -1
- package/dist/src/browser/stealth.js.map +0 -1
- package/dist/src/browser/url-policy.js.map +0 -1
- package/dist/src/capabilities/store-connector.js.map +0 -1
- package/dist/src/channels/attachments/attachment-classifiers.js.map +0 -1
- package/dist/src/channels/attachments/inbound-persist.js.map +0 -1
- package/dist/src/channels/attachments/inbound-types.js.map +0 -1
- package/dist/src/channels/attachments/outbound-tts-persist.js.map +0 -1
- package/dist/src/channels/attachments/voice-stt-webchat.js.map +0 -1
- package/dist/src/channels/catalog/channel-catalog-service.js.map +0 -1
- package/dist/src/channels/config-helpers.js.map +0 -1
- package/dist/src/channels/envelope-timestamp.js.map +0 -1
- package/dist/src/channels/exec-approval-runtime.js.map +0 -1
- package/dist/src/channels/health-monitor.js.map +0 -1
- package/dist/src/channels/heartbeat-scheduler.js.map +0 -1
- package/dist/src/channels/internal-outbound.js.map +0 -1
- package/dist/src/channels/lifecycle-supervisor.js.map +0 -1
- package/dist/src/channels/manager.js.map +0 -1
- package/dist/src/channels/media.js.map +0 -1
- package/dist/src/channels/outbound/deliver.js.map +0 -1
- package/dist/src/channels/outbound/normalize.js.map +0 -1
- package/dist/src/channels/outbound/persist-store.js.map +0 -1
- package/dist/src/channels/outbound/queue.js.map +0 -1
- package/dist/src/channels/outbound-sender.js.map +0 -1
- package/dist/src/channels/pairing/allow-from-file.js.map +0 -1
- package/dist/src/channels/pairing/approve-cli.js.map +0 -1
- package/dist/src/channels/pairing/pairing-challenge.js.map +0 -1
- package/dist/src/channels/pairing/pairing-constants.js.map +0 -1
- package/dist/src/channels/pairing/pairing-events.js.map +0 -1
- package/dist/src/channels/pairing/pairing-messages.js.map +0 -1
- package/dist/src/channels/pairing/pairing-service.js.map +0 -1
- package/dist/src/channels/pairing/pairing-store-adapter.js.map +0 -1
- package/dist/src/channels/pairing/pairing-store.js.map +0 -1
- package/dist/src/channels/pairing/paths.js.map +0 -1
- package/dist/src/channels/pairing/preseed-allow-from.js.map +0 -1
- package/dist/src/channels/pipeline.js.map +0 -1
- package/dist/src/channels/plugin-registry.js.map +0 -1
- package/dist/src/channels/plugins/registry.js.map +0 -1
- package/dist/src/channels/restart-policy.js.map +0 -1
- package/dist/src/channels/security-helpers.js.map +0 -1
- package/dist/src/channels/security.js.map +0 -1
- package/dist/src/channels/setup-wizard-discovery.js.map +0 -1
- package/dist/src/chat-commands/agent-edit.js.map +0 -1
- package/dist/src/chat-commands/builtins/config.js.map +0 -1
- package/dist/src/chat-commands/builtins/context.js.map +0 -1
- package/dist/src/chat-commands/builtins/goal.js.map +0 -1
- package/dist/src/chat-commands/builtins/model.js.map +0 -1
- package/dist/src/chat-commands/builtins/review.js.map +0 -1
- package/dist/src/chat-commands/builtins/session.js.map +0 -1
- package/dist/src/chat-commands/builtins/skill.js.map +0 -1
- package/dist/src/chat-commands/builtins/subgoal.js.map +0 -1
- package/dist/src/chat-commands/builtins/system.js.map +0 -1
- package/dist/src/chat-commands/builtins/thinking.js.map +0 -1
- package/dist/src/chat-commands/builtins/tts.js.map +0 -1
- package/dist/src/chat-commands/builtins/workflow.js.map +0 -1
- package/dist/src/chat-commands/command-parse.js.map +0 -1
- package/dist/src/chat-commands/config-paths.js.map +0 -1
- package/dist/src/chat-commands/config-value.js.map +0 -1
- package/dist/src/chat-commands/context.js.map +0 -1
- package/dist/src/chat-commands/format-output.js.map +0 -1
- package/dist/src/chat-commands/index.js.map +0 -1
- package/dist/src/chat-commands/processor.js.map +0 -1
- package/dist/src/chat-commands/registry.js.map +0 -1
- package/dist/src/chat-commands/session-key.js.map +0 -1
- package/dist/src/cli/argv-invocation.js.map +0 -1
- package/dist/src/cli/argv.js.map +0 -1
- package/dist/src/cli/bin.js.map +0 -1
- package/dist/src/cli/cli-log-level-preset.js.map +0 -1
- package/dist/src/cli/command-catalog.js.map +0 -1
- package/dist/src/cli/command-loaders.js.map +0 -1
- package/dist/src/cli/command-manifest.js.map +0 -1
- package/dist/src/cli/command-path-matches.js.map +0 -1
- package/dist/src/cli/command-path-policy.js.map +0 -1
- package/dist/src/cli/command-startup-policy.js.map +0 -1
- package/dist/src/cli/commands/agent/interactive.js.map +0 -1
- package/dist/src/cli/commands/agent/sessions.js.map +0 -1
- package/dist/src/cli/commands/agent/stream-renderer.js.map +0 -1
- package/dist/src/cli/commands/agent.js.map +0 -1
- package/dist/src/cli/commands/agents.js.map +0 -1
- package/dist/src/cli/commands/auth.js.map +0 -1
- package/dist/src/cli/commands/browser-cli-helpers.js.map +0 -1
- package/dist/src/cli/commands/browser.js.map +0 -1
- package/dist/src/cli/commands/channels.js.map +0 -1
- package/dist/src/cli/commands/config.js.map +0 -1
- package/dist/src/cli/commands/connectors.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/channel-config.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/config-health.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/gateway-health.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/gateway-service.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/migrations.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/node-version.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/security-audit.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/state-integrity.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/version-check.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +0 -1
- package/dist/src/cli/commands/doctor/flow.js.map +0 -1
- package/dist/src/cli/commands/doctor/format.js.map +0 -1
- package/dist/src/cli/commands/doctor/index.js.map +0 -1
- package/dist/src/cli/commands/extension-create.js.map +0 -1
- package/dist/src/cli/commands/extension-dev.js.map +0 -1
- package/dist/src/cli/commands/extension-marketplace.js.map +0 -1
- package/dist/src/cli/commands/extension-pack.js.map +0 -1
- package/dist/src/cli/commands/extension.js.map +0 -1
- package/dist/src/cli/commands/gateway/call.js.map +0 -1
- package/dist/src/cli/commands/gateway/health.js.map +0 -1
- package/dist/src/cli/commands/gateway/lifecycle-core.js.map +0 -1
- package/dist/src/cli/commands/gateway/lifecycle.js.map +0 -1
- package/dist/src/cli/commands/gateway/logs.js.map +0 -1
- package/dist/src/cli/commands/gateway/probe.js.map +0 -1
- package/dist/src/cli/commands/gateway/restart-health.js.map +0 -1
- package/dist/src/cli/commands/gateway/restart.js.map +0 -1
- package/dist/src/cli/commands/gateway/run-foreground.js.map +0 -1
- package/dist/src/cli/commands/gateway/service.js.map +0 -1
- package/dist/src/cli/commands/gateway/shared.js.map +0 -1
- package/dist/src/cli/commands/gateway/status.js.map +0 -1
- package/dist/src/cli/commands/gateway/stop.js.map +0 -1
- package/dist/src/cli/commands/gateway/subcommands.js.map +0 -1
- package/dist/src/cli/commands/gateway/token.js.map +0 -1
- package/dist/src/cli/commands/gateway-ssh-tunnel.js.map +0 -1
- package/dist/src/cli/commands/gateway.js.map +0 -1
- package/dist/src/cli/commands/goal.js.map +0 -1
- package/dist/src/cli/commands/image.js.map +0 -1
- package/dist/src/cli/commands/init.js.map +0 -1
- package/dist/src/cli/commands/logs.js.map +0 -1
- package/dist/src/cli/commands/models.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/index.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/registry.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js.map +0 -1
- package/dist/src/cli/commands/onboard/gateway.js.map +0 -1
- package/dist/src/cli/commands/onboard/model.js.map +0 -1
- package/dist/src/cli/commands/onboard.js.map +0 -1
- package/dist/src/cli/commands/profile.js.map +0 -1
- package/dist/src/cli/commands/project.js.map +0 -1
- package/dist/src/cli/commands/providers.js.map +0 -1
- package/dist/src/cli/commands/resume.js.map +0 -1
- package/dist/src/cli/commands/search.js.map +0 -1
- package/dist/src/cli/commands/session/actions.js.map +0 -1
- package/dist/src/cli/commands/session/utils.js.map +0 -1
- package/dist/src/cli/commands/session.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/output.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/prompts.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/runner.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/types.js.map +0 -1
- package/dist/src/cli/commands/setup.js.map +0 -1
- package/dist/src/cli/commands/skills-test.js.map +0 -1
- package/dist/src/cli/commands/skills.js.map +0 -1
- package/dist/src/cli/commands/tailscale.js.map +0 -1
- package/dist/src/cli/commands/tui-runner.js.map +0 -1
- package/dist/src/cli/commands/tui.js.map +0 -1
- package/dist/src/cli/commands/tunnel.js.map +0 -1
- package/dist/src/cli/commands/update.js.map +0 -1
- package/dist/src/cli/commands/voice.js.map +0 -1
- package/dist/src/cli/context.js.map +0 -1
- package/dist/src/cli/extension-cli-register.js.map +0 -1
- package/dist/src/cli/gateway-run-argv.js.map +0 -1
- package/dist/src/cli/gateway-run-fast-path.js.map +0 -1
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cli/registry.js.map +0 -1
- package/dist/src/cli/templates.js.map +0 -1
- package/dist/src/cli/utils/colors.js.map +0 -1
- package/dist/src/cli/utils/gateway-client-options.js.map +0 -1
- package/dist/src/cli/utils/gateway-client.js.map +0 -1
- package/dist/src/cli/utils/init-workspace-core.js.map +0 -1
- package/dist/src/cli/utils/init-workspace.js.map +0 -1
- package/dist/src/cli/utils/oauth-login.js.map +0 -1
- package/dist/src/cli/utils/oauth-providers.js.map +0 -1
- package/dist/src/cli/utils/session.js.map +0 -1
- package/dist/src/commands/agents.config.js.map +0 -1
- package/dist/src/config/agent-profile.js.map +0 -1
- package/dist/src/config/agent-typed-models.js.map +0 -1
- package/dist/src/config/commands.flags.js.map +0 -1
- package/dist/src/config/default-model.js.map +0 -1
- package/dist/src/config/diff.js.map +0 -1
- package/dist/src/config/gateway-bind.js.map +0 -1
- package/dist/src/config/index.js.map +0 -1
- package/dist/src/config/loader.js.map +0 -1
- package/dist/src/config/mcp-config-normalize.js.map +0 -1
- package/dist/src/config/model-input.js.map +0 -1
- package/dist/src/config/models-json.js.map +0 -1
- package/dist/src/config/paths-state.js.map +0 -1
- package/dist/src/config/paths.js.map +0 -1
- package/dist/src/config/profile.js.map +0 -1
- package/dist/src/config/public-url.js.map +0 -1
- package/dist/src/config/reload.js.map +0 -1
- package/dist/src/config/resolve-config-value.js.map +0 -1
- package/dist/src/config/rules.js.map +0 -1
- package/dist/src/config/runtime-overrides.js.map +0 -1
- package/dist/src/config/schema.js.map +0 -1
- package/dist/src/config/validate-channel-configs.js.map +0 -1
- package/dist/src/config/voice.js.map +0 -1
- package/dist/src/config/web-patch.js.map +0 -1
- package/dist/src/config/workspace-defaults.js.map +0 -1
- package/dist/src/config/workspace-dirs.js.map +0 -1
- package/dist/src/config/workspace-path-helpers.js.map +0 -1
- package/dist/src/config/workspace-path.js.map +0 -1
- package/dist/src/connectors/approval.js.map +0 -1
- package/dist/src/connectors/auth-provider-registry.js.map +0 -1
- package/dist/src/connectors/builtin-catalog.js.map +0 -1
- package/dist/src/connectors/catalog.js.map +0 -1
- package/dist/src/connectors/composio-catalog.js.map +0 -1
- package/dist/src/connectors/composio-logo.js.map +0 -1
- package/dist/src/connectors/composio-sessions.js.map +0 -1
- package/dist/src/connectors/composio-triggers.js.map +0 -1
- package/dist/src/connectors/composio.js.map +0 -1
- package/dist/src/connectors/connector-memory-sync.js.map +0 -1
- package/dist/src/connectors/health.js.map +0 -1
- package/dist/src/connectors/install.js.map +0 -1
- package/dist/src/connectors/instances.js.map +0 -1
- package/dist/src/connectors/integration-strategy.js.map +0 -1
- package/dist/src/connectors/lifecycle.js.map +0 -1
- package/dist/src/connectors/materialize.js.map +0 -1
- package/dist/src/connectors/policy.js.map +0 -1
- package/dist/src/connectors/providers.js.map +0 -1
- package/dist/src/connectors/registries/modelscope.js.map +0 -1
- package/dist/src/connectors/registries/official-mcp.js.map +0 -1
- package/dist/src/connectors/registries/search.js.map +0 -1
- package/dist/src/connectors/registries/smithery.js.map +0 -1
- package/dist/src/connectors/runtime-adapter-registry.js.map +0 -1
- package/dist/src/connectors/secret-store.js.map +0 -1
- package/dist/src/connectors/setup-secrets.js.map +0 -1
- package/dist/src/connectors/supervisor.js.map +0 -1
- package/dist/src/connectors/usage.js.map +0 -1
- package/dist/src/connectors/workflow-preflight.js.map +0 -1
- package/dist/src/daemon/constants.js.map +0 -1
- package/dist/src/daemon/install-plan.js.map +0 -1
- package/dist/src/daemon/launchd.js.map +0 -1
- package/dist/src/daemon/schtasks.js.map +0 -1
- package/dist/src/daemon/service-audit.js.map +0 -1
- package/dist/src/daemon/service.js.map +0 -1
- package/dist/src/daemon/systemd.js.map +0 -1
- package/dist/src/document-understanding/extract.js.map +0 -1
- package/dist/src/errors/index.js.map +0 -1
- package/dist/src/extensions/activation-context.js.map +0 -1
- package/dist/src/extensions/activation-planner.js.map +0 -1
- package/dist/src/extensions/api.js.map +0 -1
- package/dist/src/extensions/bundle-mcp.js.map +0 -1
- package/dist/src/extensions/bundled-extension-activation.js.map +0 -1
- package/dist/src/extensions/diagnostics.js.map +0 -1
- package/dist/src/extensions/discover-extensions.js.map +0 -1
- package/dist/src/extensions/engine-check.js.map +0 -1
- package/dist/src/extensions/extension-metadata-snapshot.js.map +0 -1
- package/dist/src/extensions/extension-registry-impl.js.map +0 -1
- package/dist/src/extensions/health.js.map +0 -1
- package/dist/src/extensions/hooks.js.map +0 -1
- package/dist/src/extensions/index.js.map +0 -1
- package/dist/src/extensions/install-transaction.js.map +0 -1
- package/dist/src/extensions/install.js.map +0 -1
- package/dist/src/extensions/loader.js.map +0 -1
- package/dist/src/extensions/lockfile.js.map +0 -1
- package/dist/src/extensions/manifest-registry.js.map +0 -1
- package/dist/src/extensions/marketplace.js.map +0 -1
- package/dist/src/extensions/media-provider-contracts.js.map +0 -1
- package/dist/src/extensions/normalize-manifest.js.map +0 -1
- package/dist/src/extensions/onboard-helpers.js.map +0 -1
- package/dist/src/extensions/package-contract.js.map +0 -1
- package/dist/src/extensions/sdk/channel-entry.js.map +0 -1
- package/dist/src/extensions/sdk/channel-helpers.js.map +0 -1
- package/dist/src/extensions/sdk/index.js.map +0 -1
- package/dist/src/extensions/sdk/lazy.js.map +0 -1
- package/dist/src/extensions/sdk/testing.js.map +0 -1
- package/dist/src/extensions/security.js.map +0 -1
- package/dist/src/extensions/slots.js.map +0 -1
- package/dist/src/extensions/speech-provider-contracts.js.map +0 -1
- package/dist/src/extensions/store-zip-limits.js.map +0 -1
- package/dist/src/extensions/typed-event-bus.js.map +0 -1
- package/dist/src/extensions/types/hooks.js.map +0 -1
- package/dist/src/extensions/types/providers.js.map +0 -1
- package/dist/src/extensions/update.js.map +0 -1
- package/dist/src/extensions/when-context.js.map +0 -1
- package/dist/src/extensions/when-expression.js.map +0 -1
- package/dist/src/gateway/agent-builtin-tools.js.map +0 -1
- package/dist/src/gateway/agent-run-relay.js.map +0 -1
- package/dist/src/gateway/agents-admin.js.map +0 -1
- package/dist/src/gateway/auth.js.map +0 -1
- package/dist/src/gateway/capability-presets-admin.js.map +0 -1
- package/dist/src/gateway/chat-limits.js.map +0 -1
- package/dist/src/gateway/chat-stream/mapper.js.map +0 -1
- package/dist/src/gateway/clarify-bridge.js.map +0 -1
- package/dist/src/gateway/clarify-runtime.js.map +0 -1
- package/dist/src/gateway/client-ip.js.map +0 -1
- package/dist/src/gateway/config-tools-web.js.map +0 -1
- package/dist/src/gateway/credential.js.map +0 -1
- package/dist/src/gateway/discovery/mdns.js.map +0 -1
- package/dist/src/gateway/dreaming-automation-reconciler.js.map +0 -1
- package/dist/src/gateway/ensure-network-cors.js.map +0 -1
- package/dist/src/gateway/file-path-classifier.js.map +0 -1
- package/dist/src/gateway/file-reference-registry.js.map +0 -1
- package/dist/src/gateway/global-defaults-admin.js.map +0 -1
- package/dist/src/gateway/heartbeat/service.js.map +0 -1
- package/dist/src/gateway/hono/app.js.map +0 -1
- package/dist/src/gateway/hono/lib/agent-model.js.map +0 -1
- package/dist/src/gateway/hono/lib/config-payload.js.map +0 -1
- package/dist/src/gateway/hono/lib/extension-assets.js.map +0 -1
- package/dist/src/gateway/hono/lib/extension-store.js.map +0 -1
- package/dist/src/gateway/hono/lib/mask-secret-length.js.map +0 -1
- package/dist/src/gateway/hono/lib/route-logger.js.map +0 -1
- package/dist/src/gateway/hono/lib/safe-providers-config.js.map +0 -1
- package/dist/src/gateway/hono/lib/safe-voice-config.js.map +0 -1
- package/dist/src/gateway/hono/lib/startup-unavailable.js.map +0 -1
- package/dist/src/gateway/hono/lib/static-ui.js.map +0 -1
- package/dist/src/gateway/hono/middleware/auth.js.map +0 -1
- package/dist/src/gateway/hono/middleware/log-context.js.map +0 -1
- package/dist/src/gateway/hono/middleware/logger.js.map +0 -1
- package/dist/src/gateway/hono/middleware/route-errors.js.map +0 -1
- package/dist/src/gateway/hono/middleware/scopes.js.map +0 -1
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js.map +0 -1
- package/dist/src/gateway/hono/oauth-async.js.map +0 -1
- package/dist/src/gateway/hono/oauth.js.map +0 -1
- package/dist/src/gateway/hono/routes/activity.js.map +0 -1
- package/dist/src/gateway/hono/routes/agent-stream.js.map +0 -1
- package/dist/src/gateway/hono/routes/agents.js.map +0 -1
- package/dist/src/gateway/hono/routes/ai-assist.js.map +0 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js.map +0 -1
- package/dist/src/gateway/hono/routes/browser-install.js.map +0 -1
- package/dist/src/gateway/hono/routes/browser.js.map +0 -1
- package/dist/src/gateway/hono/routes/capabilities.js.map +0 -1
- package/dist/src/gateway/hono/routes/capability-presets.js.map +0 -1
- package/dist/src/gateway/hono/routes/channels.js.map +0 -1
- package/dist/src/gateway/hono/routes/commands-skills.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/agents.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/channels.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/result.js.map +0 -1
- package/dist/src/gateway/hono/routes/config.js.map +0 -1
- package/dist/src/gateway/hono/routes/connectors.js.map +0 -1
- package/dist/src/gateway/hono/routes/doctor.js.map +0 -1
- package/dist/src/gateway/hono/routes/dreaming.js.map +0 -1
- package/dist/src/gateway/hono/routes/exposure.js.map +0 -1
- package/dist/src/gateway/hono/routes/extension-gateway.js.map +0 -1
- package/dist/src/gateway/hono/routes/global-defaults.js.map +0 -1
- package/dist/src/gateway/hono/routes/goals.js.map +0 -1
- package/dist/src/gateway/hono/routes/home.js.map +0 -1
- package/dist/src/gateway/hono/routes/host-fs.js.map +0 -1
- package/dist/src/gateway/hono/routes/index.js.map +0 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +0 -1
- package/dist/src/gateway/hono/routes/lazy-fallback.js.map +0 -1
- package/dist/src/gateway/hono/routes/local-apps.js.map +0 -1
- package/dist/src/gateway/hono/routes/logs.js.map +0 -1
- package/dist/src/gateway/hono/routes/mcp.js.map +0 -1
- package/dist/src/gateway/hono/routes/media.js.map +0 -1
- package/dist/src/gateway/hono/routes/memory.js.map +0 -1
- package/dist/src/gateway/hono/routes/migrations.js.map +0 -1
- package/dist/src/gateway/hono/routes/mobile.js.map +0 -1
- package/dist/src/gateway/hono/routes/models.js.map +0 -1
- package/dist/src/gateway/hono/routes/notes.js.map +0 -1
- package/dist/src/gateway/hono/routes/projects.js.map +0 -1
- package/dist/src/gateway/hono/routes/public-gateway.js.map +0 -1
- package/dist/src/gateway/hono/routes/search.js.map +0 -1
- package/dist/src/gateway/hono/routes/sessions.js.map +0 -1
- package/dist/src/gateway/hono/routes/shares.js.map +0 -1
- package/dist/src/gateway/hono/routes/site-shares.js.map +0 -1
- package/dist/src/gateway/hono/routes/status.js.map +0 -1
- package/dist/src/gateway/hono/routes/tui.js.map +0 -1
- package/dist/src/gateway/hono/routes/tunnel.js.map +0 -1
- package/dist/src/gateway/hono/routes/update.js.map +0 -1
- package/dist/src/gateway/hono/routes/voice.js.map +0 -1
- package/dist/src/gateway/hono/routes/work-discovery.js.map +0 -1
- package/dist/src/gateway/hono/routes/workflows.js.map +0 -1
- package/dist/src/gateway/hono/routes/workspace.js.map +0 -1
- package/dist/src/gateway/hono/routes/you.js.map +0 -1
- package/dist/src/gateway/hono/sse-json.js.map +0 -1
- package/dist/src/gateway/hono/sse.js.map +0 -1
- package/dist/src/gateway/host.js.map +0 -1
- package/dist/src/gateway/image-capabilities.js.map +0 -1
- package/dist/src/gateway/listen.js.map +0 -1
- package/dist/src/gateway/lock.js.map +0 -1
- package/dist/src/gateway/ports.js.map +0 -1
- package/dist/src/gateway/protocol.js.map +0 -1
- package/dist/src/gateway/public-url.js.map +0 -1
- package/dist/src/gateway/rate-limit/auth-policy.js.map +0 -1
- package/dist/src/gateway/rate-limit/buckets.js.map +0 -1
- package/dist/src/gateway/rate-limit/env-flags.js.map +0 -1
- package/dist/src/gateway/resolve-channel-connect-defer.js.map +0 -1
- package/dist/src/gateway/resolve-webchat-session-key.js.map +0 -1
- package/dist/src/gateway/respawn.js.map +0 -1
- package/dist/src/gateway/run-loop.js.map +0 -1
- package/dist/src/gateway/runtime-config.js.map +0 -1
- package/dist/src/gateway/security/audit.js.map +0 -1
- package/dist/src/gateway/security/csp.js.map +0 -1
- package/dist/src/gateway/security/dangerous-tools.js.map +0 -1
- package/dist/src/gateway/security/external-content.js.map +0 -1
- package/dist/src/gateway/security/known-weak-secrets.js.map +0 -1
- package/dist/src/gateway/security/loopback.js.map +0 -1
- package/dist/src/gateway/security/operator-scopes.js.map +0 -1
- package/dist/src/gateway/security/origin-check.js.map +0 -1
- package/dist/src/gateway/security/preauth-connection-budget.js.map +0 -1
- package/dist/src/gateway/security/secret-equal.js.map +0 -1
- package/dist/src/gateway/server-tailscale.js.map +0 -1
- package/dist/src/gateway/server.js.map +0 -1
- package/dist/src/gateway/service/agent-runner.js.map +0 -1
- package/dist/src/gateway/service/config-coordinator.js.map +0 -1
- package/dist/src/gateway/service/marketplace-service.js.map +0 -1
- package/dist/src/gateway/service/run-gateway-agent.js.map +0 -1
- package/dist/src/gateway/service/session-chat-ids.js.map +0 -1
- package/dist/src/gateway/service/sessions-api.js.map +0 -1
- package/dist/src/gateway/service/sse-hub.js.map +0 -1
- package/dist/src/gateway/service.js.map +0 -1
- package/dist/src/gateway/session-reset-service.js.map +0 -1
- package/dist/src/gateway/startup-readiness.js.map +0 -1
- package/dist/src/gateway/startup-trace.js.map +0 -1
- package/dist/src/gateway/tailscale-auth.js.map +0 -1
- package/dist/src/gateway/tailscale-lifecycle.js.map +0 -1
- package/dist/src/gateway/tls-server.js.map +0 -1
- package/dist/src/gateway/trusted-proxy.js.map +0 -1
- package/dist/src/gateway/user-turn-input.js.map +0 -1
- package/dist/src/gateway/workspace-editor-path.js.map +0 -1
- package/dist/src/gateway/workspace-file-search.js.map +0 -1
- package/dist/src/gateway/workspace-fs-file-list.js.map +0 -1
- package/dist/src/gateway/workspace-heartbeat-path.js.map +0 -1
- package/dist/src/gateway/workspace-ripgrep.js.map +0 -1
- package/dist/src/gateway/ws-security.js.map +0 -1
- package/dist/src/generated/bundled-image-generation-providers.js.map +0 -1
- package/dist/src/goals/goal-contract-draft.js.map +0 -1
- package/dist/src/goals/goal-evidence-review.js.map +0 -1
- package/dist/src/goals/goal-notifications.js.map +0 -1
- package/dist/src/goals/goal-queue-store.js.map +0 -1
- package/dist/src/goals/goal-runner.js.map +0 -1
- package/dist/src/goals/goal-service.js.map +0 -1
- package/dist/src/goals/goal-store.js.map +0 -1
- package/dist/src/goals/goal-workflow-judge.js.map +0 -1
- package/dist/src/heartbeat/active-hours.js.map +0 -1
- package/dist/src/heartbeat/content-check.js.map +0 -1
- package/dist/src/heartbeat/event-prompt.js.map +0 -1
- package/dist/src/heartbeat/tokens.js.map +0 -1
- package/dist/src/heartbeat/wake.js.map +0 -1
- package/dist/src/i18n/format.js.map +0 -1
- package/dist/src/i18n/goals-bundle.js.map +0 -1
- package/dist/src/i18n/locale.js.map +0 -1
- package/dist/src/i18n/locales/goals.en.js.map +0 -1
- package/dist/src/i18n/locales/goals.zh.js.map +0 -1
- package/dist/src/i18n/locales/share-tool.en.js.map +0 -1
- package/dist/src/i18n/locales/share-tool.zh.js.map +0 -1
- package/dist/src/i18n/share-tool-bundle.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/infra/brew.js.map +0 -1
- package/dist/src/infra/bus/queue.js.map +0 -1
- package/dist/src/infra/debounce.js.map +0 -1
- package/dist/src/infra/exec.js.map +0 -1
- package/dist/src/infra/gateway-process-argv.js.map +0 -1
- package/dist/src/infra/gateway-processes.js.map +0 -1
- package/dist/src/infra/host-env-security-policy.js.map +0 -1
- package/dist/src/infra/host-env-security.js.map +0 -1
- package/dist/src/infra/http-proxy-env.js.map +0 -1
- package/dist/src/infra/is-main.js.map +0 -1
- package/dist/src/infra/json-utf8-bytes.js.map +0 -1
- package/dist/src/infra/node-sqlite.js.map +0 -1
- package/dist/src/infra/package-json.js.map +0 -1
- package/dist/src/infra/package-update-steps.js.map +0 -1
- package/dist/src/infra/path-env.js.map +0 -1
- package/dist/src/infra/path-prepend.js.map +0 -1
- package/dist/src/infra/ports.js.map +0 -1
- package/dist/src/infra/rate-limit/failure-limiter.js.map +0 -1
- package/dist/src/infra/rate-limit/keyed-store.js.map +0 -1
- package/dist/src/infra/rate-limit/rate-limiter.js.map +0 -1
- package/dist/src/infra/restart.js.map +0 -1
- package/dist/src/infra/retry.js.map +0 -1
- package/dist/src/infra/run-command.js.map +0 -1
- package/dist/src/infra/sqlite-errors.js.map +0 -1
- package/dist/src/infra/ssh-tunnel.js.map +0 -1
- package/dist/src/infra/stable-node-path.js.map +0 -1
- package/dist/src/infra/tailscale.js.map +0 -1
- package/dist/src/infra/undici-fetch.js.map +0 -1
- package/dist/src/infra/unhandled-rejections.js.map +0 -1
- package/dist/src/infra/update-channels.js.map +0 -1
- package/dist/src/infra/update-check.js.map +0 -1
- package/dist/src/infra/update-global.js.map +0 -1
- package/dist/src/infra/update-lock.js.map +0 -1
- package/dist/src/infra/update-log.js.map +0 -1
- package/dist/src/infra/update-restart.js.map +0 -1
- package/dist/src/infra/update-runner.js.map +0 -1
- package/dist/src/infra/update-startup.js.map +0 -1
- package/dist/src/infra/warning-filter.js.map +0 -1
- package/dist/src/infra/write-file-atomic.js.map +0 -1
- package/dist/src/knowledge/connected-knowledge-pipeline.js.map +0 -1
- package/dist/src/knowledge/coordinator.js.map +0 -1
- package/dist/src/knowledge/ingestion-service.js.map +0 -1
- package/dist/src/local-apps/acceptance.js.map +0 -1
- package/dist/src/local-apps/preview-runtime-bridge.js.map +0 -1
- package/dist/src/local-apps/runtime-entry.js.map +0 -1
- package/dist/src/local-apps/scaffold.js.map +0 -1
- package/dist/src/local-apps/service.js.map +0 -1
- package/dist/src/local-apps/store.js.map +0 -1
- package/dist/src/markdown/chunk.js.map +0 -1
- package/dist/src/markdown/code-spans.js.map +0 -1
- package/dist/src/markdown/fences.js.map +0 -1
- package/dist/src/markdown/frontmatter.js.map +0 -1
- package/dist/src/markdown/ir.js.map +0 -1
- package/dist/src/markdown/render.js.map +0 -1
- package/dist/src/markdown/tables.js.map +0 -1
- package/dist/src/mcp/channel-bridge.js.map +0 -1
- package/dist/src/mcp/channel-server.js.map +0 -1
- package/dist/src/mcp/channel-shared.js.map +0 -1
- package/dist/src/mcp/channel-tools.js.map +0 -1
- package/dist/src/mcp/gateway-http-client.js.map +0 -1
- package/dist/src/media/media-reference.js.map +0 -1
- package/dist/src/media/paths.js.map +0 -1
- package/dist/src/media/session-references.js.map +0 -1
- package/dist/src/media/store.js.map +0 -1
- package/dist/src/media/uri.js.map +0 -1
- package/dist/src/media-shared/http/api-key-rotation.js.map +0 -1
- package/dist/src/media-shared/http/deadline.js.map +0 -1
- package/dist/src/media-shared/http/private-network.js.map +0 -1
- package/dist/src/media-shared/http/provider-http-errors.js.map +0 -1
- package/dist/src/media-shared/http/provider-http.js.map +0 -1
- package/dist/src/media-shared/http/resolve-provider-http-request-config.js.map +0 -1
- package/dist/src/media-shared/http/ssrf-guard.js.map +0 -1
- package/dist/src/media-shared/http/test-helpers/mock-server.js.map +0 -1
- package/dist/src/media-understanding/audio-transcription-runner.js.map +0 -1
- package/dist/src/media-understanding/openai-compatible-audio.js.map +0 -1
- package/dist/src/media-understanding/registry.js.map +0 -1
- package/dist/src/media-understanding/resolve-entries.js.map +0 -1
- package/dist/src/media-understanding/runner.js.map +0 -1
- package/dist/src/migrations/config/default-capability-preset.js.map +0 -1
- package/dist/src/migrations/registry.js.map +0 -1
- package/dist/src/migrations/runner.js.map +0 -1
- package/dist/src/mobile/notification-service.js.map +0 -1
- package/dist/src/mobile/notification-store.js.map +0 -1
- package/dist/src/mobile/notification-types.js.map +0 -1
- package/dist/src/notes/agent-context.js.map +0 -1
- package/dist/src/notes/attachment-ref.js.map +0 -1
- package/dist/src/notes/note-attachment-sync.js.map +0 -1
- package/dist/src/notes/note-index-meta.js.map +0 -1
- package/dist/src/notes/note-markdown.js.map +0 -1
- package/dist/src/notes/paths.js.map +0 -1
- package/dist/src/notes/service.js.map +0 -1
- package/dist/src/notes/store.js.map +0 -1
- package/dist/src/package-version.js.map +0 -1
- package/dist/src/pets/factory.js.map +0 -1
- package/dist/src/pets/manifest.js.map +0 -1
- package/dist/src/pets/validator.js.map +0 -1
- package/dist/src/process/kill-tree.js.map +0 -1
- package/dist/src/project-trust/trust-store.js.map +0 -1
- package/dist/src/projects/automation-bind.js.map +0 -1
- package/dist/src/projects/goal-bind.js.map +0 -1
- package/dist/src/projects/memory-bind.js.map +0 -1
- package/dist/src/projects/project-agent-suggestion.js.map +0 -1
- package/dist/src/projects/project-agent.js.map +0 -1
- package/dist/src/projects/project-kind.js.map +0 -1
- package/dist/src/projects/project-loop.js.map +0 -1
- package/dist/src/projects/project-service.js.map +0 -1
- package/dist/src/projects/project-store.js.map +0 -1
- package/dist/src/projects/session-bind.js.map +0 -1
- package/dist/src/projects/workflow-bind.js.map +0 -1
- package/dist/src/projects/workspace-project.js.map +0 -1
- package/dist/src/projects/workspace.js.map +0 -1
- package/dist/src/providers/auth-runtime/auth-profile-store.js.map +0 -1
- package/dist/src/providers/auth-runtime/is-configured.js.map +0 -1
- package/dist/src/providers/auth-runtime/oauth.js.map +0 -1
- package/dist/src/providers/auth-runtime/resolve-api-key.js.map +0 -1
- package/dist/src/providers/auth-runtime/resolve-auth.js.map +0 -1
- package/dist/src/providers/constants.js.map +0 -1
- package/dist/src/providers/domestic-presets.js.map +0 -1
- package/dist/src/providers/env-keys.js.map +0 -1
- package/dist/src/providers/extension-stream-bridge.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/providers/model-call.js.map +0 -1
- package/dist/src/providers/model-discovery.js.map +0 -1
- package/dist/src/providers/model-registry.js.map +0 -1
- package/dist/src/providers/model-supplements.js.map +0 -1
- package/dist/src/providers/plugin-registry.js.map +0 -1
- package/dist/src/providers/presentation.js.map +0 -1
- package/dist/src/remote-access/exposure-guards.js.map +0 -1
- package/dist/src/remote-access/exposure-manager.js.map +0 -1
- package/dist/src/review/review-git.js.map +0 -1
- package/dist/src/review/review-types.js.map +0 -1
- package/dist/src/routing/account-id.js.map +0 -1
- package/dist/src/routing/agent-session-key.js.map +0 -1
- package/dist/src/routing/bindings.js.map +0 -1
- package/dist/src/routing/index.js.map +0 -1
- package/dist/src/routing/resolve-route.js.map +0 -1
- package/dist/src/routing/resolve-tui-session-key.js.map +0 -1
- package/dist/src/routing/session-key-utils.js.map +0 -1
- package/dist/src/routing/session-key.js.map +0 -1
- package/dist/src/session/abort-cutoff.js.map +0 -1
- package/dist/src/session/chat-export.js.map +0 -1
- package/dist/src/session/client-history.js.map +0 -1
- package/dist/src/session/compaction-checkpoints.js.map +0 -1
- package/dist/src/session/config-store.js.map +0 -1
- package/dist/src/session/init-session-turn.js.map +0 -1
- package/dist/src/session/lifecycle-timestamps.js.map +0 -1
- package/dist/src/session/load-jsonl-entries.js.map +0 -1
- package/dist/src/session/manager.js.map +0 -1
- package/dist/src/session/patch-metadata.js.map +0 -1
- package/dist/src/session/reset-policy.js.map +0 -1
- package/dist/src/session/reset-triggers.js.map +0 -1
- package/dist/src/session/reset-type.js.map +0 -1
- package/dist/src/session/resolve-session.js.map +0 -1
- package/dist/src/session/session-context-for-llm.js.map +0 -1
- package/dist/src/session/session-id.js.map +0 -1
- package/dist/src/session/session-title.js.map +0 -1
- package/dist/src/session/session-workspace.js.map +0 -1
- package/dist/src/session/store.js.map +0 -1
- package/dist/src/session/stored-rows-to-file-entries.js.map +0 -1
- package/dist/src/session/thinking-resolve.js.map +0 -1
- package/dist/src/session/transcript-events.js.map +0 -1
- package/dist/src/session/transcript-format.js.map +0 -1
- package/dist/src/session/transcript-outline.js.map +0 -1
- package/dist/src/session/transcript-stats.js.map +0 -1
- package/dist/src/session/types.js.map +0 -1
- package/dist/src/session/user-round-delete.js.map +0 -1
- package/dist/src/share/share-audit.js.map +0 -1
- package/dist/src/share/share-auto.js.map +0 -1
- package/dist/src/share/share-config.js.map +0 -1
- package/dist/src/share/share-landing.js.map +0 -1
- package/dist/src/share/share-rate-limit.js.map +0 -1
- package/dist/src/share/share-store.js.map +0 -1
- package/dist/src/share/share-thumbnail.js.map +0 -1
- package/dist/src/share/share-types.js.map +0 -1
- package/dist/src/share/share-url.js.map +0 -1
- package/dist/src/share/share-zip.js.map +0 -1
- package/dist/src/share/site-proxy.js.map +0 -1
- package/dist/src/share/site-share-config.js.map +0 -1
- package/dist/src/share/site-share-router.js.map +0 -1
- package/dist/src/share/site-share-store.js.map +0 -1
- package/dist/src/share/site-share-types.js.map +0 -1
- package/dist/src/share/site-static-serve.js.map +0 -1
- package/dist/src/storage/sqlite/activity-repository.js.map +0 -1
- package/dist/src/storage/sqlite/config-repository.js.map +0 -1
- package/dist/src/storage/sqlite/connection.js.map +0 -1
- package/dist/src/storage/sqlite/connector-repository.js.map +0 -1
- package/dist/src/storage/sqlite/fts.js.map +0 -1
- package/dist/src/storage/sqlite/knowledge-repository.js.map +0 -1
- package/dist/src/storage/sqlite/memory-index-repository.js.map +0 -1
- package/dist/src/storage/sqlite/memory-records-repository.js.map +0 -1
- package/dist/src/storage/sqlite/memory-reference-consent-repository.js.map +0 -1
- package/dist/src/storage/sqlite/migrations/discover.js.map +0 -1
- package/dist/src/storage/sqlite/migrations/errors.js.map +0 -1
- package/dist/src/storage/sqlite/migrations/runner.js.map +0 -1
- package/dist/src/storage/sqlite/note-agent-context-repository.js.map +0 -1
- package/dist/src/storage/sqlite/notes-repository.js.map +0 -1
- package/dist/src/storage/sqlite/paths.js.map +0 -1
- package/dist/src/storage/sqlite/row-mappers.js.map +0 -1
- package/dist/src/storage/sqlite/schema-version.js.map +0 -1
- package/dist/src/storage/sqlite/schema.js.map +0 -1
- package/dist/src/storage/sqlite/session-metadata.js.map +0 -1
- package/dist/src/storage/sqlite/session-repository.js.map +0 -1
- package/dist/src/storage/sqlite/transaction.js.map +0 -1
- package/dist/src/storage/sqlite/transcript-repository.js.map +0 -1
- package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +0 -1
- package/dist/src/storage/sqlite/user-trust-repository.js.map +0 -1
- package/dist/src/tui/backends/embedded-backend.js.map +0 -1
- package/dist/src/tui/backends/gateway-sse-backend.js.map +0 -1
- package/dist/src/tui/chat-history.js.map +0 -1
- package/dist/src/tui/clipboard-image.js.map +0 -1
- package/dist/src/tui/clipboard-text.js.map +0 -1
- package/dist/src/tui/components/assistant-message.js.map +0 -1
- package/dist/src/tui/components/bash-execution.js.map +0 -1
- package/dist/src/tui/components/bash-summary.js.map +0 -1
- package/dist/src/tui/components/branch-message-summary.js.map +0 -1
- package/dist/src/tui/components/branch-summary.js.map +0 -1
- package/dist/src/tui/components/chat-log.js.map +0 -1
- package/dist/src/tui/components/compaction-summary.js.map +0 -1
- package/dist/src/tui/components/custom-editor.js.map +0 -1
- package/dist/src/tui/components/custom-message.js.map +0 -1
- package/dist/src/tui/components/dynamic-border.js.map +0 -1
- package/dist/src/tui/components/extension-dialog.js.map +0 -1
- package/dist/src/tui/components/fuzzy-filter.js.map +0 -1
- package/dist/src/tui/components/scoped-models-selector.js.map +0 -1
- package/dist/src/tui/components/searchable-select-list.js.map +0 -1
- package/dist/src/tui/components/session-selector.js.map +0 -1
- package/dist/src/tui/components/settings-selector.js.map +0 -1
- package/dist/src/tui/components/thinking-selector.js.map +0 -1
- package/dist/src/tui/components/tool-execution.js.map +0 -1
- package/dist/src/tui/components/tui-bottom-bar.js.map +0 -1
- package/dist/src/tui/components/tui-header.js.map +0 -1
- package/dist/src/tui/components/user-message.js.map +0 -1
- package/dist/src/tui/components/visual-truncate.js.map +0 -1
- package/dist/src/tui/extension-host/autocomplete.js.map +0 -1
- package/dist/src/tui/extension-host/host.js.map +0 -1
- package/dist/src/tui/extension-host/load-extensions.js.map +0 -1
- package/dist/src/tui/extension-host/runtime-context.js.map +0 -1
- package/dist/src/tui/extension-host/runtime.js.map +0 -1
- package/dist/src/tui/extension-host/surface.js.map +0 -1
- package/dist/src/tui/extension-host/tool-renderers.js.map +0 -1
- package/dist/src/tui/format-tui-hotkeys.js.map +0 -1
- package/dist/src/tui/sse-consumer.js.map +0 -1
- package/dist/src/tui/theme/dark.js.map +0 -1
- package/dist/src/tui/theme/light.js.map +0 -1
- package/dist/src/tui/theme-manager.js.map +0 -1
- package/dist/src/tui/theme.js.map +0 -1
- package/dist/src/tui/tool-summary.js.map +0 -1
- package/dist/src/tui/tui-agent-events.js.map +0 -1
- package/dist/src/tui/tui-command-formatters.js.map +0 -1
- package/dist/src/tui/tui-commands.js.map +0 -1
- package/dist/src/tui/tui-context-usage.js.map +0 -1
- package/dist/src/tui/tui-extension-user-message.js.map +0 -1
- package/dist/src/tui/tui-fd-path.js.map +0 -1
- package/dist/src/tui/tui-file-autocomplete.js.map +0 -1
- package/dist/src/tui/tui-follow-up-queue.js.map +0 -1
- package/dist/src/tui/tui-git-branch.js.map +0 -1
- package/dist/src/tui/tui-keybindings-file.js.map +0 -1
- package/dist/src/tui/tui-lifecycle.js.map +0 -1
- package/dist/src/tui/tui-local-shell.js.map +0 -1
- package/dist/src/tui/tui-model-picker.js.map +0 -1
- package/dist/src/tui/tui-oauth-login.js.map +0 -1
- package/dist/src/tui/tui-overlays.js.map +0 -1
- package/dist/src/tui/tui-picker-overlay.js.map +0 -1
- package/dist/src/tui/tui-run-state.js.map +0 -1
- package/dist/src/tui/tui-run-status-format.js.map +0 -1
- package/dist/src/tui/tui-runtime-hints.js.map +0 -1
- package/dist/src/tui/tui-scoped-models.js.map +0 -1
- package/dist/src/tui/tui-session-actions.js.map +0 -1
- package/dist/src/tui/tui-session-format.js.map +0 -1
- package/dist/src/tui/tui-session-snapshot.js.map +0 -1
- package/dist/src/tui/tui-session-stats.js.map +0 -1
- package/dist/src/tui/tui-settings.js.map +0 -1
- package/dist/src/tui/tui-skills-autocomplete.js.map +0 -1
- package/dist/src/tui/tui-startup-resources.js.map +0 -1
- package/dist/src/tui/tui-startup-text.js.map +0 -1
- package/dist/src/tui/tui-stdio-filter.js.map +0 -1
- package/dist/src/tui/tui-submit.js.map +0 -1
- package/dist/src/tui/tui-suspend.js.map +0 -1
- package/dist/src/tui/tui-timeline-picker.js.map +0 -1
- package/dist/src/tui/tui-timeline.js.map +0 -1
- package/dist/src/tui/tui-tool-diff.js.map +0 -1
- package/dist/src/tui/tui-tool-result.js.map +0 -1
- package/dist/src/tui/tui-transcript-tree-picker.js.map +0 -1
- package/dist/src/tui/tui-transcript-tree.js.map +0 -1
- package/dist/src/tui/tui-types.js.map +0 -1
- package/dist/src/tui/tui-workflow-slash.js.map +0 -1
- package/dist/src/tui/tui.js.map +0 -1
- package/dist/src/tui/xopc-tui-keybindings.js.map +0 -1
- package/dist/src/tunnel/broker-client.js.map +0 -1
- package/dist/src/tunnel/consent.js.map +0 -1
- package/dist/src/tunnel/enable-lan-pairing.js.map +0 -1
- package/dist/src/tunnel/env.js.map +0 -1
- package/dist/src/tunnel/frp-subdomain-host.js.map +0 -1
- package/dist/src/tunnel/frpc-binary.js.map +0 -1
- package/dist/src/tunnel/frpc-config.js.map +0 -1
- package/dist/src/tunnel/frpc-extract.js.map +0 -1
- package/dist/src/tunnel/frpc-process.js.map +0 -1
- package/dist/src/tunnel/gateway-lifecycle.js.map +0 -1
- package/dist/src/tunnel/pair-context.js.map +0 -1
- package/dist/src/tunnel/pair-url.js.map +0 -1
- package/dist/src/tunnel/pairing-rate-limit.js.map +0 -1
- package/dist/src/tunnel/pairing.js.map +0 -1
- package/dist/src/tunnel/tunnel-audit.js.map +0 -1
- package/dist/src/tunnel/tunnel-config.js.map +0 -1
- package/dist/src/tunnel/tunnel-persist.js.map +0 -1
- package/dist/src/tunnel/tunnel-qr.js.map +0 -1
- package/dist/src/tunnel/tunnel-rate-limit.js.map +0 -1
- package/dist/src/tunnel/tunnel-service.js.map +0 -1
- package/dist/src/tunnel/tunnel-state.js.map +0 -1
- package/dist/src/tunnel/well-known.js.map +0 -1
- package/dist/src/user-context/config.js.map +0 -1
- package/dist/src/user-context/import.js.map +0 -1
- package/dist/src/user-context/owner.js.map +0 -1
- package/dist/src/user-context/profile.js.map +0 -1
- package/dist/src/user-context/projection.js.map +0 -1
- package/dist/src/user-context/runtime.js.map +0 -1
- package/dist/src/user-context/source-recommendations.js.map +0 -1
- package/dist/src/user-context/trust-policy.js.map +0 -1
- package/dist/src/utils/global-singleton.js.map +0 -1
- package/dist/src/utils/helpers.js.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/is-record.js.map +0 -1
- package/dist/src/utils/logger/audit.js.map +0 -1
- package/dist/src/utils/logger/config.js.map +0 -1
- package/dist/src/utils/logger/context.js.map +0 -1
- package/dist/src/utils/logger/exporters.js.map +0 -1
- package/dist/src/utils/logger/index.js.map +0 -1
- package/dist/src/utils/logger/log-store.js.map +0 -1
- package/dist/src/utils/logger/log-stream.js.map +0 -1
- package/dist/src/utils/logger/pino-record.js.map +0 -1
- package/dist/src/utils/logger/redact.js.map +0 -1
- package/dist/src/utils/logger/rotation.js.map +0 -1
- package/dist/src/utils/logger/shutdown.js.map +0 -1
- package/dist/src/utils/logger/stats.js.map +0 -1
- package/dist/src/utils/logger/streams.js.map +0 -1
- package/dist/src/utils/logger/types.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/redact-sensitive-url.js.map +0 -1
- package/dist/src/utils/sanitize-log.js.map +0 -1
- package/dist/src/utils/string-coerce.js.map +0 -1
- package/dist/src/voice/language-profile.js.map +0 -1
- package/dist/src/voice/local/model-files.js.map +0 -1
- package/dist/src/voice/local/model-manager.js.map +0 -1
- package/dist/src/voice/local/models.js.map +0 -1
- package/dist/src/voice/local/runtime-client.js.map +0 -1
- package/dist/src/voice/local/runtime-dispatcher.js.map +0 -1
- package/dist/src/voice/local/runtime-worker.js.map +0 -1
- package/dist/src/voice/local/wav.js.map +0 -1
- package/dist/src/voice/metadata/builtin.js.map +0 -1
- package/dist/src/voice/metadata/registry.js.map +0 -1
- package/dist/src/voice/stt/availability.js.map +0 -1
- package/dist/src/voice/stt/config-slice.js.map +0 -1
- package/dist/src/voice/stt/factory.js.map +0 -1
- package/dist/src/voice/stt/index.js.map +0 -1
- package/dist/src/voice/stt/list-providers.js.map +0 -1
- package/dist/src/voice/stt/mention.js.map +0 -1
- package/dist/src/voice/stt/preflight.js.map +0 -1
- package/dist/src/voice/stt/providers/alibaba-transcription.js.map +0 -1
- package/dist/src/voice/stt/providers/local-transcription.js.map +0 -1
- package/dist/src/voice/stt/providers/openai-transcription.js.map +0 -1
- package/dist/src/voice/stt/transcribe-core.js.map +0 -1
- package/dist/src/voice/stt/types.js.map +0 -1
- package/dist/src/voice/tts/audio.js.map +0 -1
- package/dist/src/voice/tts/config-slice.js.map +0 -1
- package/dist/src/voice/tts/directives.js.map +0 -1
- package/dist/src/voice/tts/factory.js.map +0 -1
- package/dist/src/voice/tts/list-providers.js.map +0 -1
- package/dist/src/voice/tts/merge-config.js.map +0 -1
- package/dist/src/voice/tts/openai-compatible-speech.js.map +0 -1
- package/dist/src/voice/tts/payload.js.map +0 -1
- package/dist/src/voice/tts/preprocess.js.map +0 -1
- package/dist/src/voice/tts/providers/alibaba-speech.js.map +0 -1
- package/dist/src/voice/tts/providers/edge-speech.js.map +0 -1
- package/dist/src/voice/tts/providers/minimax-speech.js.map +0 -1
- package/dist/src/voice/tts/providers/openai-speech.js.map +0 -1
- package/dist/src/voice/tts/sentence-boundary.js.map +0 -1
- package/dist/src/voice/tts/service.js.map +0 -1
- package/dist/src/voice/tts/speak-core.js.map +0 -1
- package/dist/src/voice/tts/speech-registry.js.map +0 -1
- package/dist/src/voice/tts/status-tracker.js.map +0 -1
- package/dist/src/voice/tts/summarize.js.map +0 -1
- package/dist/src/voice/tts/types.js.map +0 -1
- package/dist/src/work-discovery/analyzer.js.map +0 -1
- package/dist/src/work-discovery/probe.js.map +0 -1
- package/dist/src/work-discovery/repository.js.map +0 -1
- package/dist/src/work-discovery/service.js.map +0 -1
- package/dist/src/work-items/agent-context.js.map +0 -1
- package/dist/src/work-items/work-item-service.js.map +0 -1
- package/dist/src/work-items/work-item-store.js.map +0 -1
- package/dist/src/work-items/work-item-workflow-judge.js.map +0 -1
- package/dist/src/workflows/authoring/workflow-draft-store.js.map +0 -1
- package/dist/src/workflows/domain/definition-utils.js.map +0 -1
- package/dist/src/workflows/domain/run.js.map +0 -1
- package/dist/src/workflows/domain/schema-validation.js.map +0 -1
- package/dist/src/workflows/domain/validation.js.map +0 -1
- package/dist/src/workflows/draft/workflow-draft-prompt.js.map +0 -1
- package/dist/src/workflows/draft/workflow-draft-service.js.map +0 -1
- package/dist/src/workflows/draft/workflow-draft-validator.js.map +0 -1
- package/dist/src/workflows/engine/projector.js.map +0 -1
- package/dist/src/workflows/engine/workflow-engine.js.map +0 -1
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +0 -1
- package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +0 -1
- package/dist/src/workflows/service/run-view-to-snapshot.js.map +0 -1
- package/dist/src/workflows/service/workflow-run-service.js.map +0 -1
- package/dist/src/workflows/service/workflow-session-bridge.js.map +0 -1
- package/dist/src/workflows/service/workflow-session-key.js.map +0 -1
- package/dist/src/workflows/store/event-store.js.map +0 -1
- package/dist/src/workflows/store/paths.js.map +0 -1
- package/dist/src/workflows/store/run-index-store.js.map +0 -1
- package/dist/src/workflows/store/run-store.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-id.js","names":[],"sources":["../../../../extensions/telegram/src/conversation-id.ts"],"sourcesContent":["/** Canonical Telegram conversation id for forum/DM topics. */\nexport function buildTelegramConversationId(chatId: string, threadId?: string | number): string {\n if (threadId == null || threadId === '') return chatId;\n return `${chatId}:topic:${threadId}`;\n}\n\nexport function parseTelegramConversationId(conversationId: string): {\n chatId: string;\n threadId?: string;\n} {\n const marker = ':topic:';\n const idx = conversationId.indexOf(marker);\n if (idx === -1) {\n return { chatId: conversationId };\n }\n return {\n chatId: conversationId.slice(0, idx),\n threadId: conversationId.slice(idx + marker.length),\n };\n}\n"],"mappings":";;AACA,SAAgB,4BAA4B,QAAgB,UAAoC;AAC9F,KAAI,YAAY,QAAQ,aAAa,GAAI,QAAO;AAChD,QAAO,GAAG,OAAO,SAAS;;AAG5B,SAAgB,4BAA4B,gBAG1C;CAEA,MAAM,MAAM,eAAe,QAAQ,UAAO;AAC1C,KAAI,QAAQ,GACV,QAAO,EAAE,QAAQ,gBAAgB;AAEnC,QAAO;EACL,QAAQ,eAAe,MAAM,GAAG,IAAI;EACpC,UAAU,eAAe,MAAM,MAAM,EAAc;EACpD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dedupe.js","names":[],"sources":["../../../../extensions/telegram/src/dedupe.ts"],"sourcesContent":["/**\n * Update Deduplication\n * \n * Prevents processing duplicate Telegram updates.\n * Telegram may occasionally send the same update multiple times.\n */\n\nconst DEFAULT_TTL_MS = 5 * 60 * 1000; // 5 minutes\nconst DEFAULT_MAX_SIZE = 2000;\n\ninterface CacheEntry {\n timestamp: number;\n}\n\nexport interface DedupeCacheOptions {\n /** Time-to-live in milliseconds */\n ttlMs?: number;\n /** Maximum cache size */\n maxSize?: number;\n}\n\nexport class DedupeCache {\n private cache = new Map<string, CacheEntry>();\n private ttlMs: number;\n private maxSize: number;\n\n constructor(options: DedupeCacheOptions = {}) {\n this.ttlMs = options.ttlMs ?? DEFAULT_TTL_MS;\n this.maxSize = options.maxSize ?? DEFAULT_MAX_SIZE;\n }\n\n /**\n * Check if key exists and is not expired\n */\n has(key: string): boolean {\n this.cleanup();\n const entry = this.cache.get(key);\n if (!entry) return false;\n \n if (Date.now() - entry.timestamp > this.ttlMs) {\n this.cache.delete(key);\n return false;\n }\n return true;\n }\n\n /**\n * Add key to cache\n */\n add(key: string): void {\n this.cleanup();\n \n // Evict oldest if at capacity\n if (this.cache.size >= this.maxSize) {\n const oldestKey = this.cache.keys().next().value;\n if (oldestKey !== undefined) {\n this.cache.delete(oldestKey);\n }\n }\n \n this.cache.set(key, { timestamp: Date.now() });\n }\n\n /**\n * Check and add atomically - returns true if was already seen\n */\n checkAndAdd(key: string): boolean {\n if (this.has(key)) {\n return true;\n }\n this.add(key);\n return false;\n }\n\n /**\n * Clean up expired entries\n */\n private cleanup(): void {\n const now = Date.now();\n for (const [key, entry] of this.cache) {\n if (now - entry.timestamp > this.ttlMs) {\n this.cache.delete(key);\n }\n }\n }\n\n /**\n * Clear all entries\n */\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * Get cache stats\n */\n getStats(): { size: number; maxSize: number; ttlMs: number } {\n this.cleanup();\n return {\n size: this.cache.size,\n maxSize: this.maxSize,\n ttlMs: this.ttlMs,\n };\n }\n}\n\n/**\n * Build a unique key for a Telegram update\n */\nexport function buildTelegramUpdateKey(ctx: {\n update?: {\n update_id?: number;\n message?: { message_id?: number; chat?: { id?: number } };\n };\n callbackQuery?: { id?: string };\n}): string | undefined {\n // Use update_id if available (most reliable)\n const updateId = ctx.update?.update_id;\n if (typeof updateId === 'number') {\n return `update:${updateId}`;\n }\n\n // Use callback query ID\n const callbackId = ctx.callbackQuery?.id;\n if (callbackId) {\n return `callback:${callbackId}`;\n }\n\n // Fall back to message identifier\n const msg = ctx.update?.message;\n const chatId = msg?.chat?.id;\n const messageId = msg?.message_id;\n if (typeof chatId === 'number' && typeof messageId === 'number') {\n return `message:${chatId}:${messageId}`;\n }\n\n return undefined;\n}\n\n// Singleton instance for the application\nexport const telegramUpdateDedupe = new DedupeCache({\n ttlMs: DEFAULT_TTL_MS,\n maxSize: DEFAULT_MAX_SIZE,\n});\n"],"mappings":";;;;;;;AAOA,MAAM,iBAAiB,MAAS;AAChC,MAAM,mBAAmB;AAazB,IAAa,cAAb,MAAyB;CACvB,wBAAgB,IAAI,KAAyB;CAC7C;CACA;CAEA,YAAY,UAA8B,EAAE,EAAE;AAC5C,OAAK,QAAQ,QAAQ,SAAS;AAC9B,OAAK,UAAU,QAAQ,WAAW;;;;;CAMpC,IAAI,KAAsB;AACxB,OAAK,SAAS;EACd,MAAM,QAAQ,KAAK,MAAM,IAAI,IAAI;AACjC,MAAI,CAAC,MAAO,QAAO;AAEnB,MAAI,KAAK,KAAK,GAAG,MAAM,YAAY,KAAK,OAAO;AAC7C,QAAK,MAAM,OAAO,IAAI;AACtB,UAAO;;AAET,SAAO;;;;;CAMT,IAAI,KAAmB;AACrB,OAAK,SAAS;AAGd,MAAI,KAAK,MAAM,QAAQ,KAAK,SAAS;GACnC,MAAM,YAAY,KAAK,MAAM,MAAM,CAAC,MAAM,CAAC;AAC3C,OAAI,cAAc,KAAA,EAChB,MAAK,MAAM,OAAO,UAAU;;AAIhC,OAAK,MAAM,IAAI,KAAK,EAAE,WAAW,KAAK,KAAK,EAAE,CAAC;;;;;CAMhD,YAAY,KAAsB;AAChC,MAAI,KAAK,IAAI,IAAI,CACf,QAAO;AAET,OAAK,IAAI,IAAI;AACb,SAAO;;;;;CAMT,UAAwB;EACtB,MAAM,MAAM,KAAK,KAAK;AACtB,OAAK,MAAM,CAAC,KAAK,UAAU,KAAK,MAC9B,KAAI,MAAM,MAAM,YAAY,KAAK,MAC/B,MAAK,MAAM,OAAO,IAAI;;;;;CAQ5B,QAAc;AACZ,OAAK,MAAM,OAAO;;;;;CAMpB,WAA6D;AAC3D,OAAK,SAAS;AACd,SAAO;GACL,MAAM,KAAK,MAAM;GACjB,SAAS,KAAK;GACd,OAAO,KAAK;GACb;;;;;;AAOL,SAAgB,uBAAuB,KAMhB;CAErB,MAAM,WAAW,IAAI,QAAQ;AAC7B,KAAI,OAAO,aAAa,SACtB,QAAO,UAAU;CAInB,MAAM,aAAa,IAAI,eAAe;AACtC,KAAI,WACF,QAAO,YAAY;CAIrB,MAAM,MAAM,IAAI,QAAQ;CACxB,MAAM,SAAS,KAAK,MAAM;CAC1B,MAAM,YAAY,KAAK;AACvB,KAAI,OAAO,WAAW,YAAY,OAAO,cAAc,SACrD,QAAO,WAAW,OAAO,GAAG;;AAOhC,MAAa,uBAAuB,IAAI,YAAY;CAClD,OAAO;CACP,SAAS;CACV,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-chat-id.js","names":[],"sources":["../../../../extensions/telegram/src/delivery-chat-id.ts"],"sourcesContent":["import { parseSessionKey } from '@xopcai/xopc/routing/session-key.js';\n\n/**\n * Resolves Telegram Bot API `chat_id` from config/UI `to` / `targetChatId`.\n * Accepts numeric ids, full session keys (`agent:main:telegram:...`), or\n * routing suffixes (`account:dm:peerId` / `account:group:peerId`).\n */\nexport function normalizeTelegramDeliveryChatId(to: string): string {\n const trimmed = to.trim();\n if (!trimmed) {\n return trimmed;\n }\n\n const parsed = parseSessionKey(trimmed);\n if (parsed?.source === 'telegram') {\n return parsed.peerId;\n }\n\n const parts = trimmed.split(':');\n if (parts.length === 3 && (parts[1] === 'dm' || parts[1] === 'group') && parts[2] !== '') {\n return parts[2];\n }\n\n return trimmed;\n}\n"],"mappings":";;kBAAsE;;;;;;AAOtE,SAAgB,gCAAgC,IAAoB;CAClE,MAAM,UAAU,GAAG,MAAM;AACzB,KAAI,CAAC,QACH,QAAO;CAGT,MAAM,SAAS,gBAAgB,QAAQ;AACvC,KAAI,QAAQ,WAAW,WACrB,QAAO,OAAO;CAGhB,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,KAAI,MAAM,WAAW,MAAM,MAAM,OAAO,QAAQ,MAAM,OAAO,YAAY,MAAM,OAAO,GACpF,QAAO,MAAM;AAGf,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","names":[],"sources":["../../../../extensions/telegram/src/doctor.ts"],"sourcesContent":["import type { Config } from '@xopcai/xopc/config/index.js';\nimport type { ChannelDoctorCheckResult } from '@xopcai/xopc/channels/plugin-types.js';\nimport { hasTelegramBotEndpointApiRoot, normalizeTelegramApiRoot } from './api-root.js';\nimport { createProxyFetch } from './proxy-fetch.js';\nimport { isTelegramUnauthorizedTokenError } from './startup-errors.js';\nimport { resolveTelegramBotToken } from './token-resolver.js';\n\nconst TELEGRAM_DOCTOR_GETME_TIMEOUT_MS = 10_000;\n\ntype TelegramCfg = {\n enabled?: boolean;\n defaults?: {\n dmPolicy?: string;\n apiRoot?: string;\n proxy?: string;\n };\n accounts?: Record<\n string,\n {\n enabled?: boolean;\n botToken?: string;\n tokenFile?: string;\n apiRoot?: string;\n proxy?: string;\n dmPolicy?: string;\n allowFrom?: Array<string | number>;\n }\n >;\n};\n\nfunction collectTokens(cfg: TelegramCfg): Map<string, string[]> {\n const map = new Map<string, string[]>();\n const accounts = cfg.accounts ?? {};\n for (const [id, acc] of Object.entries(accounts)) {\n const { token } = resolveTelegramBotToken({\n botToken: acc.botToken,\n tokenFile: acc.tokenFile,\n });\n if (!token) continue;\n const list = map.get(token) ?? [];\n list.push(id);\n map.set(token, list);\n }\n return map;\n}\n\nfunction formatGetMeError(err: unknown): string {\n if (err instanceof Error) return err.message;\n return String(err);\n}\n\nfunction createTimeoutSignal(timeoutMs: number): { signal: AbortSignal; dispose: () => void } {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(new Error(`Timed out after ${timeoutMs}ms`)), timeoutMs);\n timer.unref?.();\n return {\n signal: controller.signal,\n dispose: () => clearTimeout(timer),\n };\n}\n\nasync function checkGetMe(params: {\n accountId: string;\n token: string;\n apiRoot?: string;\n proxy?: string;\n fetchImpl?: typeof fetch;\n}): Promise<ChannelDoctorCheckResult> {\n const apiRoot = normalizeTelegramApiRoot(params.apiRoot);\n const url = `${apiRoot}/bot${params.token}/getMe`;\n const timeout = createTimeoutSignal(TELEGRAM_DOCTOR_GETME_TIMEOUT_MS);\n const fetchImpl = params.proxy ? createProxyFetch(params.proxy) : (params.fetchImpl ?? fetch);\n\n try {\n const startedAt = Date.now();\n const response = await fetchImpl(url, { signal: timeout.signal });\n const elapsedMs = Date.now() - startedAt;\n const body = (await response.json().catch(() => undefined)) as\n | { ok?: boolean; result?: { username?: string }; description?: string }\n | undefined;\n\n if (response.ok && body?.ok === true) {\n const username = body.result?.username ? ` @${body.result.username}` : '';\n return {\n id: `telegram-account-getme-${params.accountId}`,\n label: `Telegram getMe (${params.accountId})`,\n status: 'pass',\n message: `getMe succeeded${username} in ${elapsedMs}ms.`,\n hints: params.proxy ? [`Using proxy: ${params.proxy}`] : [],\n };\n }\n\n const description = body?.description || `HTTP ${response.status}`;\n return {\n id: `telegram-account-getme-${params.accountId}`,\n label: `Telegram getMe (${params.accountId})`,\n status: isTelegramUnauthorizedTokenError(description) ? 'fail' : 'warn',\n message: `getMe failed: ${description}`,\n hints: isTelegramUnauthorizedTokenError(description)\n ? ['Verify the bot token from @BotFather.']\n : ['Check channels.telegram.defaults.apiRoot / account apiRoot and network access.'],\n };\n } catch (err) {\n const message = formatGetMeError(err);\n return {\n id: `telegram-account-getme-${params.accountId}`,\n label: `Telegram getMe (${params.accountId})`,\n status: 'fail',\n message: `getMe network check failed: ${message}`,\n hints: [\n 'Verify this host can reach the Telegram Bot API.',\n 'If your shell uses HTTP(S)_PROXY, also set channels.telegram.defaults.proxy because Node fetch does not use env proxy automatically.',\n `Effective apiRoot: ${apiRoot}`,\n ],\n };\n } finally {\n timeout.dispose();\n }\n}\n\nexport async function runTelegramDoctorChecks(params: {\n cfg: Config;\n fetchImpl?: typeof fetch;\n}): Promise<ChannelDoctorCheckResult[]> {\n const results: ChannelDoctorCheckResult[] = [];\n const tg = params.cfg.channels?.telegram as TelegramCfg | undefined;\n if (!tg) {\n return results;\n }\n\n if (hasTelegramBotEndpointApiRoot(tg.defaults?.apiRoot)) {\n results.push({\n id: 'telegram-api-root-bot-endpoint',\n label: 'Telegram apiRoot',\n status: 'warn',\n message: 'apiRoot includes a bot token path segment; it will be normalized to the API root.',\n hints: [`Use \"${normalizeTelegramApiRoot(tg.defaults?.apiRoot)}\" instead.`],\n });\n }\n\n const tokenMap = collectTokens(tg);\n for (const [token, accountIds] of tokenMap) {\n if (accountIds.length > 1) {\n results.push({\n id: `telegram-duplicate-token-${accountIds.join('-')}`,\n label: 'Telegram duplicate bot token',\n status: 'fail',\n message: `Bot token is shared by accounts: ${accountIds.join(', ')}.`,\n hints: ['Use one token per account or disable duplicate accounts.'],\n });\n }\n void token;\n }\n\n for (const [id, acc] of Object.entries(tg.accounts ?? {})) {\n const effectiveDmPolicy = acc.dmPolicy ?? tg.defaults?.dmPolicy ?? 'pairing';\n if (tg.enabled && effectiveDmPolicy === 'open') {\n const allow = acc.allowFrom ?? [];\n const hasWildcard = allow.some((e) => String(e).trim() === '*');\n results.push({\n id: `telegram-dm-open-wildcard-${id}`,\n label: `Telegram DM open policy (${id})`,\n status: hasWildcard ? 'pass' : 'warn',\n message: hasWildcard\n ? `Account \"${id}\" DM policy is open with allowFrom wildcard.`\n : `Account \"${id}\" dmPolicy \"open\" should include allowFrom: [\"*\"] for explicit opt-in.`,\n hints: hasWildcard ? [] : [`Add \"allowFrom\": [\"*\"] to channels.telegram.accounts.${id} or switch to pairing/allowlist.`],\n });\n }\n if (hasTelegramBotEndpointApiRoot(acc.apiRoot)) {\n results.push({\n id: `telegram-account-api-root-${id}`,\n label: `Telegram apiRoot (${id})`,\n status: 'warn',\n message: `Account \"${id}\" apiRoot includes bot endpoint; will be normalized.`,\n hints: [`Use \"${normalizeTelegramApiRoot(acc.apiRoot)}\"`],\n });\n }\n const { token, source } = resolveTelegramBotToken({\n botToken: acc.botToken,\n tokenFile: acc.tokenFile,\n });\n if (tg.enabled && acc && source === 'none' && (acc as { enabled?: boolean }).enabled !== false) {\n results.push({\n id: `telegram-account-token-${id}`,\n label: `Telegram token (${id})`,\n status: 'fail',\n message: `Account \"${id}\" has no bot token or readable tokenFile.`,\n hints: ['Set botToken or tokenFile in channels.telegram.accounts.' + id],\n });\n }\n if (token && token.length < 20) {\n results.push({\n id: `telegram-account-token-short-${id}`,\n label: `Telegram token (${id})`,\n status: 'warn',\n message: `Account \"${id}\" bot token looks too short.`,\n hints: ['Verify the token from @BotFather.'],\n });\n }\n\n if (tg.enabled && token && acc.enabled !== false) {\n results.push(\n await checkGetMe({\n accountId: id,\n token,\n apiRoot: acc.apiRoot || tg.defaults?.apiRoot,\n proxy: acc.proxy || tg.defaults?.proxy,\n fetchImpl: params.fetchImpl,\n }),\n );\n }\n }\n\n return results;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"draft-stream-lifecycle.js","names":[],"sources":["../../../../extensions/telegram/src/draft-stream-lifecycle.ts"],"sourcesContent":["/**\n * Finalizable draft lifecycle helpers for draft streaming.\n */\n\nimport { createDraftStreamLoop, type DraftStreamLoop } from './draft-stream-loop.js';\n\nexport type FinalizableDraftStreamState = {\n stopped: boolean;\n final: boolean;\n};\n\ntype StopAndClearMessageIdParams<T> = {\n stopForClear: () => Promise<void>;\n readMessageId: () => T | undefined;\n clearMessageId: () => void;\n};\n\ntype ClearFinalizableDraftMessageParams<T> = StopAndClearMessageIdParams<T> & {\n isValidMessageId: (value: unknown) => value is T;\n deleteMessage: (messageId: T) => Promise<void>;\n onDeleteSuccess?: (messageId: T) => void;\n warn?: (message: string) => void;\n warnPrefix: string;\n};\n\ntype FinalizableDraftLifecycleParams<T> = Omit<\n ClearFinalizableDraftMessageParams<T>,\n 'stopForClear'\n> & {\n throttleMs: number;\n state: FinalizableDraftStreamState;\n sendOrEditStreamMessage: (text: string) => Promise<boolean>;\n};\n\nexport function createFinalizableDraftStreamControlsForState(params: {\n throttleMs: number;\n state: FinalizableDraftStreamState;\n sendOrEditStreamMessage: (text: string) => Promise<boolean>;\n}) {\n const loop = createDraftStreamLoop({\n throttleMs: params.throttleMs,\n isStopped: () => params.state.stopped,\n sendOrEditStreamMessage: params.sendOrEditStreamMessage,\n });\n\n const update = (text: string) => {\n if (params.state.stopped || params.state.final) {\n return;\n }\n loop.update(text);\n };\n\n const stop = async (): Promise<void> => {\n params.state.final = true;\n await loop.flush();\n };\n\n const stopForClear = async (): Promise<void> => {\n params.state.stopped = true;\n loop.stop();\n await loop.waitForInFlight();\n };\n\n return {\n loop,\n update,\n stop,\n stopForClear,\n };\n}\n\nexport async function clearFinalizableDraftMessage<T>(\n params: ClearFinalizableDraftMessageParams<T>,\n): Promise<void> {\n await params.stopForClear();\n const messageId = params.readMessageId();\n params.clearMessageId();\n if (!params.isValidMessageId(messageId)) {\n return;\n }\n try {\n await params.deleteMessage(messageId);\n params.onDeleteSuccess?.(messageId);\n } catch (err) {\n params.warn?.(`${params.warnPrefix}: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nexport function createFinalizableDraftLifecycle<T>(params: FinalizableDraftLifecycleParams<T>) {\n const controls = createFinalizableDraftStreamControlsForState({\n throttleMs: params.throttleMs,\n state: params.state,\n sendOrEditStreamMessage: params.sendOrEditStreamMessage,\n });\n\n const clear = async () => {\n await clearFinalizableDraftMessage({\n stopForClear: controls.stopForClear,\n readMessageId: params.readMessageId,\n clearMessageId: params.clearMessageId,\n isValidMessageId: params.isValidMessageId,\n deleteMessage: params.deleteMessage,\n onDeleteSuccess: params.onDeleteSuccess,\n warn: params.warn,\n warnPrefix: params.warnPrefix,\n });\n };\n\n return {\n ...controls,\n clear,\n };\n}\n"],"mappings":";;;;;AAkCA,SAAgB,6CAA6C,QAI1D;CACD,MAAM,OAAO,sBAAsB;EACjC,YAAY,OAAO;EACnB,iBAAiB,OAAO,MAAM;EAC9B,yBAAyB,OAAO;EACjC,CAAC;CAEF,MAAM,UAAU,SAAiB;AAC/B,MAAI,OAAO,MAAM,WAAW,OAAO,MAAM,MACvC;AAEF,OAAK,OAAO,KAAK;;CAGnB,MAAM,OAAO,YAA2B;AACtC,SAAO,MAAM,QAAQ;AACrB,QAAM,KAAK,OAAO;;CAGpB,MAAM,eAAe,YAA2B;AAC9C,SAAO,MAAM,UAAU;AACvB,OAAK,MAAM;AACX,QAAM,KAAK,iBAAiB;;AAG9B,QAAO;EACL;EACA;EACA;EACA;EACD;;AAGH,eAAsB,6BACpB,QACe;AACf,OAAM,OAAO,cAAc;CAC3B,MAAM,YAAY,OAAO,eAAe;AACxC,QAAO,gBAAgB;AACvB,KAAI,CAAC,OAAO,iBAAiB,UAAU,CACrC;AAEF,KAAI;AACF,QAAM,OAAO,cAAc,UAAU;AACrC,SAAO,kBAAkB,UAAU;UAC5B,KAAK;AACZ,SAAO,OAAO,GAAG,OAAO,WAAW,IAAI,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI,GAAG;;;AAI9F,SAAgB,gCAAmC,QAA4C;CAC7F,MAAM,WAAW,6CAA6C;EAC5D,YAAY,OAAO;EACnB,OAAO,OAAO;EACd,yBAAyB,OAAO;EACjC,CAAC;CAEF,MAAM,QAAQ,YAAY;AACxB,QAAM,6BAA6B;GACjC,cAAc,SAAS;GACvB,eAAe,OAAO;GACtB,gBAAgB,OAAO;GACvB,kBAAkB,OAAO;GACzB,eAAe,OAAO;GACtB,iBAAiB,OAAO;GACxB,MAAM,OAAO;GACb,YAAY,OAAO;GACpB,CAAC;;AAGJ,QAAO;EACL,GAAG;EACH;EACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"draft-stream-loop.js","names":[],"sources":["../../../../extensions/telegram/src/draft-stream-loop.ts"],"sourcesContent":["/**\n * Throttled draft stream loop.\n */\n\nexport type DraftStreamLoop = {\n update: (text: string) => void;\n flush: () => Promise<void>;\n stop: () => void;\n resetPending: () => void;\n resetThrottleWindow: () => void;\n waitForInFlight: () => Promise<void>;\n};\n\nexport function createDraftStreamLoop(params: {\n throttleMs: number;\n isStopped: () => boolean;\n sendOrEditStreamMessage: (text: string) => Promise<void | boolean>;\n}): DraftStreamLoop {\n let lastSentAt = 0;\n let pendingText = '';\n let inFlightPromise: Promise<void | boolean> | undefined;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const flush = async () => {\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n while (!params.isStopped()) {\n if (inFlightPromise) {\n await inFlightPromise;\n continue;\n }\n const text = pendingText;\n if (!text.trim()) {\n pendingText = '';\n return;\n }\n pendingText = '';\n const current = params.sendOrEditStreamMessage(text).finally(() => {\n if (inFlightPromise === current) {\n inFlightPromise = undefined;\n }\n });\n inFlightPromise = current;\n const sent = await current;\n if (sent === false) {\n pendingText = text;\n return;\n }\n lastSentAt = Date.now();\n if (!pendingText) {\n return;\n }\n }\n };\n\n const schedule = () => {\n if (timer) {\n return;\n }\n const delay = Math.max(0, params.throttleMs - (Date.now() - lastSentAt));\n timer = setTimeout(() => {\n void flush();\n }, delay);\n };\n\n return {\n update: (text: string) => {\n if (params.isStopped()) {\n return;\n }\n pendingText = text;\n if (inFlightPromise) {\n schedule();\n return;\n }\n if (!timer && Date.now() - lastSentAt >= params.throttleMs) {\n void flush();\n return;\n }\n schedule();\n },\n flush,\n stop: () => {\n pendingText = '';\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n },\n resetPending: () => {\n pendingText = '';\n },\n resetThrottleWindow: () => {\n lastSentAt = 0;\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n },\n waitForInFlight: async () => {\n if (inFlightPromise) {\n await inFlightPromise;\n }\n },\n };\n}\n"],"mappings":";AAaA,SAAgB,sBAAsB,QAIlB;CAClB,IAAI,aAAa;CACjB,IAAI,cAAc;CAClB,IAAI;CACJ,IAAI;CAEJ,MAAM,QAAQ,YAAY;AACxB,MAAI,OAAO;AACT,gBAAa,MAAM;AACnB,WAAQ,KAAA;;AAEV,SAAO,CAAC,OAAO,WAAW,EAAE;AAC1B,OAAI,iBAAiB;AACnB,UAAM;AACN;;GAEF,MAAM,OAAO;AACb,OAAI,CAAC,KAAK,MAAM,EAAE;AAChB,kBAAc;AACd;;AAEF,iBAAc;GACd,MAAM,UAAU,OAAO,wBAAwB,KAAK,CAAC,cAAc;AACjE,QAAI,oBAAoB,QACtB,mBAAkB,KAAA;KAEpB;AACF,qBAAkB;AAElB,OAAI,MADe,YACN,OAAO;AAClB,kBAAc;AACd;;AAEF,gBAAa,KAAK,KAAK;AACvB,OAAI,CAAC,YACH;;;CAKN,MAAM,iBAAiB;AACrB,MAAI,MACF;EAEF,MAAM,QAAQ,KAAK,IAAI,GAAG,OAAO,cAAc,KAAK,KAAK,GAAG,YAAY;AACxE,UAAQ,iBAAiB;AAClB,UAAO;KACX,MAAM;;AAGX,QAAO;EACL,SAAS,SAAiB;AACxB,OAAI,OAAO,WAAW,CACpB;AAEF,iBAAc;AACd,OAAI,iBAAiB;AACnB,cAAU;AACV;;AAEF,OAAI,CAAC,SAAS,KAAK,KAAK,GAAG,cAAc,OAAO,YAAY;AACrD,WAAO;AACZ;;AAEF,aAAU;;EAEZ;EACA,YAAY;AACV,iBAAc;AACd,OAAI,OAAO;AACT,iBAAa,MAAM;AACnB,YAAQ,KAAA;;;EAGZ,oBAAoB;AAClB,iBAAc;;EAEhB,2BAA2B;AACzB,gBAAa;AACb,OAAI,OAAO;AACT,iBAAa,MAAM;AACnB,YAAQ,KAAA;;;EAGZ,iBAAiB,YAAY;AAC3B,OAAI,gBACF,OAAM;;EAGX"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"draft-stream.js","names":[],"sources":["../../../../extensions/telegram/src/draft-stream.ts"],"sourcesContent":["/**\n * Telegram draft stream for streaming message previews.\n *\n * Uses sendMessage + editMessageText, or sendMessageDraft when available (DM / supported clients),\n * with automatic fallback and optional materialize for draft transport.\n */\n\nimport type { Bot } from 'grammy';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport type { ProgressStage } from '@xopcai/xopc/agent/lifecycle/progress.js';\nimport { createFinalizableDraftLifecycle } from './draft-stream-lifecycle.js';\nimport {\n isSafeToRetrySendError,\n isTelegramClientRejection,\n isTelegramThreadNotFoundError,\n shouldFallbackFromDraftTransport,\n} from './telegram-draft-errors.js';\nimport { renderTelegramHtmlText, stripUnknownHtmlTags } from './format.js';\n\nconst log = createLogger('DraftStream');\n\nconst TELEGRAM_STREAM_MAX_CHARS = 4096;\nconst DEFAULT_THROTTLE_MS = 1000;\nconst TELEGRAM_DRAFT_ID_MAX = 2_147_483_647;\n\nconst TELEGRAM_DRAFT_STREAM_STATE_KEY = Symbol.for('xopc.telegramDraftStreamState');\n\nlet draftStreamState: { nextDraftId: number } | undefined;\n\nfunction getDraftStreamState(): { nextDraftId: number } {\n draftStreamState ??= { nextDraftId: 0 };\n return draftStreamState;\n}\n\nfunction allocateTelegramDraftId(): number {\n const state = getDraftStreamState();\n state.nextDraftId = state.nextDraftId >= TELEGRAM_DRAFT_ID_MAX ? 1 : state.nextDraftId + 1;\n return state.nextDraftId;\n}\n\ntype TelegramSendMessageDraft = (\n chatId: number | string,\n draftId: number,\n text: string,\n params?: {\n message_thread_id?: number;\n parse_mode?: 'HTML';\n },\n) => Promise<unknown>;\n\nfunction resolveSendMessageDraftApi(api: Bot['api']): TelegramSendMessageDraft | undefined {\n const sendMessageDraft = (api as Bot['api'] & { sendMessageDraft?: TelegramSendMessageDraft })\n .sendMessageDraft;\n if (typeof sendMessageDraft !== 'function') {\n return undefined;\n }\n return sendMessageDraft.bind(api as object);\n}\n\nconst STAGE_CONFIG: Record<ProgressStage, { emoji: string; label: string }> = {\n thinking: { emoji: '🤔', label: 'Thinking' },\n searching: { emoji: '🔍', label: 'Searching' },\n reading: { emoji: '📖', label: 'Reading' },\n writing: { emoji: '✍️', label: 'Writing' },\n executing: { emoji: '⚙️', label: 'Executing' },\n analyzing: { emoji: '📊', label: 'Analyzing' },\n idle: { emoji: '💬', label: 'Ready' },\n};\n\nexport type TelegramDraftPreview = {\n text: string;\n parseMode?: 'HTML';\n};\n\nexport interface TelegramDraftStreamOptions {\n api: Bot['api'];\n chatId: number | string;\n maxChars?: number;\n threadId?: number;\n replyToMessageId?: number;\n throttleMs?: number;\n /** Prefer draft API, real message edits, or auto (DM → draft when API exists). */\n previewTransport?: 'auto' | 'message' | 'draft';\n /** Minimum chars before first outbound preview (push notification quality). */\n minInitialChars?: number;\n /** Optional preview renderer (e.g. markdown → HTML). */\n renderText?: (text: string) => TelegramDraftPreview;\n /** Called when a late send resolves after forceNewMessage() rotated generations. */\n onSupersededPreview?: (preview: {\n messageId: number;\n textSnapshot: string;\n parseMode?: 'HTML';\n }) => void;\n warn?: (message: string) => void;\n /** When `renderText` is omitted, controls default text conversion (`HTML` = sanitize only). */\n parseMode?: 'Markdown' | 'HTML' | undefined;\n enableProgress?: boolean;\n}\n\nexport interface TelegramDraftStream {\n update: (text: string) => void;\n updateWithProgress: (text: string, stage?: ProgressStage, detail?: string) => void;\n flush: () => Promise<void>;\n messageId: () => number | undefined;\n previewMode?: () => 'message' | 'draft';\n previewRevision?: () => number;\n lastDeliveredText?: () => string;\n clear: () => Promise<void>;\n stop: () => Promise<void>;\n materialize?: () => Promise<number | undefined>;\n forceNewMessage: () => void;\n sendMayHaveLanded?: () => boolean;\n setProgress: (stage: ProgressStage, detail?: string) => void;\n}\n\nfunction isProbablyPrivateChat(chatId: number | string): boolean {\n const n = typeof chatId === 'string' ? Number(chatId) : chatId;\n if (Number.isFinite(n) && n < 0) {\n return false;\n }\n return true;\n}\n\nfunction defaultRenderText(\n trimmed: string,\n parseMode: TelegramDraftStreamOptions['parseMode'],\n): TelegramDraftPreview {\n if (parseMode === 'HTML') {\n return { text: stripUnknownHtmlTags(trimmed), parseMode: 'HTML' };\n }\n return {\n text: renderTelegramHtmlText(trimmed),\n parseMode: 'HTML',\n };\n}\n\n/**\n * Create a draft stream for streaming message previews.\n */\nexport function createTelegramDraftStream(options: TelegramDraftStreamOptions): TelegramDraftStream {\n const maxChars = Math.min(\n options.maxChars ?? TELEGRAM_STREAM_MAX_CHARS,\n TELEGRAM_STREAM_MAX_CHARS,\n );\n const throttleMs = Math.max(250, options.throttleMs ?? DEFAULT_THROTTLE_MS);\n const chatId = options.chatId;\n const requestedPreviewTransport = options.previewTransport ?? 'auto';\n const prefersDraftTransport =\n requestedPreviewTransport === 'draft'\n ? true\n : requestedPreviewTransport === 'message'\n ? false\n : isProbablyPrivateChat(chatId);\n const resolvedDraftApi = prefersDraftTransport ? resolveSendMessageDraftApi(options.api) : undefined;\n const usesDraftTransport = Boolean(prefersDraftTransport && resolvedDraftApi);\n if (prefersDraftTransport && !usesDraftTransport) {\n options.warn?.(\n 'telegram stream preview: sendMessageDraft unavailable; falling back to sendMessage/editMessageText',\n );\n }\n\n const threadParams: Record<string, number> = {};\n if (options.threadId != null) {\n threadParams.message_thread_id = options.threadId;\n }\n if (options.replyToMessageId != null) {\n threadParams.reply_to_message_id = options.replyToMessageId;\n }\n\n const replyParams = { ...threadParams };\n\n const streamState = { stopped: false, final: false };\n let messageSendAttempted = false;\n let streamMessageId: number | undefined;\n let streamDraftId = usesDraftTransport ? allocateTelegramDraftId() : undefined;\n let previewTransport: 'message' | 'draft' = usesDraftTransport ? 'draft' : 'message';\n let lastSentText = '';\n let lastDeliveredText = '';\n let lastSentParseMode: 'HTML' | undefined;\n let previewRevision = 0;\n let generation = 0;\n\n const minInitialChars = options.minInitialChars;\n\n const renderPreview = (trimmed: string): TelegramDraftPreview => {\n if (options.renderText) {\n return options.renderText(trimmed);\n }\n return defaultRenderText(trimmed, options.parseMode);\n };\n\n const sendRenderedMessageWithThreadFallback = async (sendArgs: {\n renderedText: string;\n renderedParseMode: 'HTML' | undefined;\n fallbackWarnMessage: string;\n }) => {\n const sendParams = sendArgs.renderedParseMode\n ? { ...replyParams, parse_mode: sendArgs.renderedParseMode }\n : replyParams;\n const usedThreadParams =\n 'message_thread_id' in (sendParams ?? {}) &&\n typeof (sendParams as { message_thread_id?: unknown }).message_thread_id === 'number';\n try {\n return {\n sent: await options.api.sendMessage(chatId, sendArgs.renderedText, sendParams),\n usedThreadParams,\n };\n } catch (err) {\n if (!usedThreadParams || !isTelegramThreadNotFoundError(err)) {\n throw err;\n }\n const threadlessParams = { ...(sendParams as Record<string, unknown>) };\n delete threadlessParams.message_thread_id;\n options.warn?.(sendArgs.fallbackWarnMessage);\n return {\n sent: await options.api.sendMessage(\n chatId,\n sendArgs.renderedText,\n Object.keys(threadlessParams).length > 0 ? threadlessParams : undefined,\n ),\n usedThreadParams: false,\n };\n }\n };\n\n type PreviewSendParams = {\n renderedText: string;\n renderedParseMode: 'HTML' | undefined;\n sendGeneration: number;\n };\n\n const sendMessageTransportPreview = async ({\n renderedText,\n renderedParseMode,\n sendGeneration,\n }: PreviewSendParams): Promise<boolean> => {\n if (typeof streamMessageId === 'number') {\n if (renderedParseMode) {\n await options.api.editMessageText(chatId, streamMessageId, renderedText, {\n parse_mode: renderedParseMode,\n });\n } else {\n await options.api.editMessageText(chatId, streamMessageId, renderedText);\n }\n return true;\n }\n messageSendAttempted = true;\n let sent: Awaited<ReturnType<typeof sendRenderedMessageWithThreadFallback>>['sent'];\n try {\n ({ sent } = await sendRenderedMessageWithThreadFallback({\n renderedText,\n renderedParseMode,\n fallbackWarnMessage:\n 'telegram stream preview send failed with message_thread_id, retrying without thread',\n }));\n } catch (err) {\n if (isSafeToRetrySendError(err) || isTelegramClientRejection(err)) {\n messageSendAttempted = false;\n }\n throw err;\n }\n const sentMessageId = sent?.message_id;\n if (typeof sentMessageId !== 'number' || !Number.isFinite(sentMessageId)) {\n streamState.stopped = true;\n options.warn?.('telegram stream preview stopped (missing message id from sendMessage)');\n return false;\n }\n const normalizedMessageId = Math.trunc(sentMessageId);\n if (sendGeneration !== generation) {\n options.onSupersededPreview?.({\n messageId: normalizedMessageId,\n textSnapshot: renderedText,\n parseMode: renderedParseMode,\n });\n return true;\n }\n streamMessageId = normalizedMessageId;\n return true;\n };\n\n const sendDraftTransportPreview = async ({\n renderedText,\n renderedParseMode,\n }: PreviewSendParams): Promise<boolean> => {\n const draftId = streamDraftId ?? allocateTelegramDraftId();\n streamDraftId = draftId;\n const draftParams = {\n ...(threadParams.message_thread_id != null\n ? { message_thread_id: threadParams.message_thread_id }\n : {}),\n ...(renderedParseMode ? { parse_mode: renderedParseMode } : {}),\n };\n await resolvedDraftApi!(\n chatId,\n draftId,\n renderedText,\n Object.keys(draftParams).length > 0 ? draftParams : undefined,\n );\n return true;\n };\n\n const sendOrEditStreamMessage = async (text: string): Promise<boolean> => {\n if (streamState.stopped && !streamState.final) {\n return false;\n }\n const trimmed = text.trimEnd();\n if (!trimmed) {\n return false;\n }\n const rendered = renderPreview(trimmed);\n const renderedText = rendered.text.trimEnd();\n const renderedParseMode = rendered.parseMode;\n if (!renderedText) {\n return false;\n }\n if (renderedText.length > maxChars) {\n streamState.stopped = true;\n options.warn?.(\n `telegram stream preview stopped (text length ${renderedText.length} > ${maxChars})`,\n );\n return false;\n }\n if (renderedText === lastSentText && renderedParseMode === lastSentParseMode) {\n return true;\n }\n const sendGeneration = generation;\n\n if (typeof streamMessageId !== 'number' && minInitialChars != null && !streamState.final) {\n if (renderedText.length < minInitialChars) {\n return false;\n }\n }\n\n lastSentText = renderedText;\n lastSentParseMode = renderedParseMode;\n try {\n let sent = false;\n if (previewTransport === 'draft') {\n try {\n sent = await sendDraftTransportPreview({\n renderedText,\n renderedParseMode,\n sendGeneration,\n });\n } catch (err) {\n if (!shouldFallbackFromDraftTransport(err)) {\n throw err;\n }\n previewTransport = 'message';\n streamDraftId = undefined;\n options.warn?.(\n 'telegram stream preview: sendMessageDraft rejected by API; falling back to sendMessage/editMessageText',\n );\n sent = await sendMessageTransportPreview({\n renderedText,\n renderedParseMode,\n sendGeneration,\n });\n }\n } else {\n sent = await sendMessageTransportPreview({\n renderedText,\n renderedParseMode,\n sendGeneration,\n });\n }\n if (sent) {\n previewRevision += 1;\n lastDeliveredText = trimmed;\n }\n return sent;\n } catch (err) {\n streamState.stopped = true;\n options.warn?.(\n `telegram stream preview failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n return false;\n }\n };\n\n const { loop, update, stop, clear } = createFinalizableDraftLifecycle({\n throttleMs,\n state: streamState,\n sendOrEditStreamMessage,\n readMessageId: () => streamMessageId,\n clearMessageId: () => {\n streamMessageId = undefined;\n },\n isValidMessageId: (value): value is number =>\n typeof value === 'number' && Number.isFinite(value),\n deleteMessage: async (messageId) => {\n await options.api.deleteMessage(chatId, messageId);\n },\n onDeleteSuccess: (messageId) => {\n log.debug({ chatId, messageId }, 'telegram stream preview deleted');\n },\n warn: (m) => options.warn?.(m),\n warnPrefix: 'telegram stream preview cleanup failed',\n });\n\n const forceNewMessage = () => {\n streamState.final = false;\n streamState.stopped = false;\n generation += 1;\n messageSendAttempted = false;\n streamMessageId = undefined;\n if (previewTransport === 'draft') {\n streamDraftId = allocateTelegramDraftId();\n }\n lastSentText = '';\n lastSentParseMode = undefined;\n loop.resetPending();\n loop.resetThrottleWindow();\n };\n\n const materialize = async (): Promise<number | undefined> => {\n await stop();\n if (previewTransport === 'message' && typeof streamMessageId === 'number') {\n return streamMessageId;\n }\n const renderedText = lastSentText || lastDeliveredText;\n if (!renderedText) {\n return undefined;\n }\n const renderedParseMode = lastSentText ? lastSentParseMode : undefined;\n try {\n const { sent, usedThreadParams } = await sendRenderedMessageWithThreadFallback({\n renderedText,\n renderedParseMode,\n fallbackWarnMessage:\n 'telegram stream preview materialize send failed with message_thread_id, retrying without thread',\n });\n const sentId = sent?.message_id;\n if (typeof sentId === 'number' && Number.isFinite(sentId)) {\n streamMessageId = Math.trunc(sentId);\n if (resolvedDraftApi != null && streamDraftId != null) {\n const clearDraftId = streamDraftId;\n const clearThreadParams =\n usedThreadParams && threadParams.message_thread_id != null\n ? { message_thread_id: threadParams.message_thread_id }\n : undefined;\n try {\n await resolvedDraftApi(chatId, clearDraftId, '', clearThreadParams);\n } catch {\n // Best-effort cleanup\n }\n }\n return streamMessageId;\n }\n } catch (err) {\n options.warn?.(\n `telegram stream preview materialize failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n return undefined;\n };\n\n let currentProgressStage: ProgressStage | null = null;\n let currentProgressDetail = '';\n\n const setProgress = (stage: ProgressStage, detail?: string) => {\n if (!options.enableProgress) return;\n currentProgressStage = stage;\n currentProgressDetail = detail || '';\n };\n\n const formatProgressIndicator = (stage: ProgressStage, detail?: string): string => {\n const config = STAGE_CONFIG[stage] || STAGE_CONFIG.idle;\n let indicator = `${config.emoji} ${config.label}`;\n if (detail) {\n indicator += `\\n${detail}`;\n }\n return indicator;\n };\n\n const updateWithProgress = (text: string, stage?: ProgressStage, detail?: string) => {\n if (streamState.stopped || streamState.final) {\n return;\n }\n if (stage) {\n setProgress(stage, detail);\n }\n let combinedText = text;\n if (options.enableProgress && currentProgressStage && currentProgressStage !== 'idle') {\n const indicator = formatProgressIndicator(currentProgressStage, currentProgressDetail);\n combinedText = `${indicator}\\n\\n${text}`;\n }\n update(combinedText);\n };\n\n log.debug({ chatId, maxChars, throttleMs, previewTransport }, 'Draft stream ready');\n\n return {\n update,\n updateWithProgress,\n flush: loop.flush,\n messageId: () => streamMessageId,\n previewMode: () => previewTransport,\n previewRevision: () => previewRevision,\n lastDeliveredText: () => lastDeliveredText,\n clear,\n stop,\n materialize,\n forceNewMessage,\n sendMayHaveLanded: () => messageSendAttempted && typeof streamMessageId !== 'number',\n setProgress,\n };\n}\n\nexport class DraftStreamManager {\n private streams = new Map<string, TelegramDraftStream>();\n\n getOrCreate(key: string, options: TelegramDraftStreamOptions): TelegramDraftStream {\n const existing = this.streams.get(key);\n if (existing) {\n return existing;\n }\n\n const stream = createTelegramDraftStream(options);\n this.streams.set(key, stream);\n\n const originalStop = stream.stop;\n stream.stop = async () => {\n await originalStop.call(stream);\n this.streams.delete(key);\n };\n\n return stream;\n }\n\n get(key: string): TelegramDraftStream | undefined {\n return this.streams.get(key);\n }\n\n async stop(key: string): Promise<void> {\n const stream = this.streams.get(key);\n if (stream) {\n await stream.flush();\n await stream.stop();\n this.streams.delete(key);\n }\n }\n\n async stopAll(): Promise<void> {\n const promises: Promise<void>[] = [];\n for (const [key, stream] of this.streams.entries()) {\n promises.push(\n (async () => {\n await stream.flush();\n await stream.stop();\n this.streams.delete(key);\n })(),\n );\n }\n await Promise.all(promises);\n }\n\n async clear(key: string): Promise<void> {\n const stream = this.streams.get(key);\n if (stream) {\n await stream.clear();\n }\n }\n}\n\nexport const draftStreamManager = new DraftStreamManager();\n\nexport const __testing = {\n resetTelegramDraftStreamForTests() {\n getDraftStreamState().nextDraftId = 0;\n },\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","names":[],"sources":["../../../../extensions/telegram/src/errors.ts"],"sourcesContent":["/**\n * Telegram Error Utilities\n */\n\n// Regex to detect Telegram HTML parse errors\nconst TELEGRAM_PARSE_ERR_RE = /can't parse entities|parse entities|find end of the entity|Unmatched end tag/i;\n\n/**\n * Check if error is a Telegram HTML parse error\n */\nexport function isTelegramHtmlParseError(err: unknown): boolean {\n if (!(err instanceof Error)) {\n return false;\n }\n return TELEGRAM_PARSE_ERR_RE.test(err.message);\n}\n"],"mappings":";;;;AAKA,MAAM,wBAAwB;;;;AAK9B,SAAgB,yBAAyB,KAAuB;AAC9D,KAAI,EAAE,eAAe,OACnB,QAAO;AAET,QAAO,sBAAsB,KAAK,IAAI,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exec-approval-handler.js","names":[],"sources":["../../../../extensions/telegram/src/exec-approval-handler.ts"],"sourcesContent":["import type { Config } from '@xopcai/xopc/config/index.js';\nimport type { ExecApprovalHandler, ExecApprovalRequestPayload } from '@xopcai/xopc/channels/exec-approval-runtime.js';\nimport type { TelegramAccountManager } from './account-manager.js';\nimport {\n createTelegramPendingApproval,\n waitForTelegramApproval,\n} from './approval-store.js';\nimport { deliverTelegramExecApprovalPrompt } from './approval-delivery.js';\nimport { isTelegramExecApprovalEnabled, resolveTelegramExecApprovers } from './exec-approvals.js';\n\nexport function createTelegramExecApprovalHandler(deps: {\n accountManager: TelegramAccountManager;\n getConfig: () => Config;\n}): ExecApprovalHandler {\n return {\n isEnabled(cfg, params) {\n if (params.channel !== 'telegram') return false;\n return isTelegramExecApprovalEnabled(cfg, params.accountId ?? 'default');\n },\n\n async requestApproval(cfg, payload: ExecApprovalRequestPayload): Promise<boolean> {\n const accountId = payload.accountId ?? 'default';\n const approvers = resolveTelegramExecApprovers(cfg, accountId);\n if (approvers.length === 0) {\n return false;\n }\n\n const bot = deps.accountManager.getBot(accountId);\n if (!bot) {\n return false;\n }\n\n const approval = createTelegramPendingApproval({\n accountId,\n sessionKey: payload.sessionKey,\n chatId: payload.chatId,\n toolName: payload.toolName,\n summary: payload.summary,\n });\n\n await deliverTelegramExecApprovalPrompt({ bot, cfg: deps.getConfig(), accountId, approval });\n return waitForTelegramApproval(approval.id);\n },\n };\n}\n"],"mappings":";;;;AAUA,SAAgB,kCAAkC,MAG1B;AACtB,QAAO;EACL,UAAU,KAAK,QAAQ;AACrB,OAAI,OAAO,YAAY,WAAY,QAAO;AAC1C,UAAO,8BAA8B,KAAK,OAAO,aAAa,UAAU;;EAG1E,MAAM,gBAAgB,KAAK,SAAuD;GAChF,MAAM,YAAY,QAAQ,aAAa;AAEvC,OADkB,6BAA6B,KAAK,UACvC,CAAC,WAAW,EACvB,QAAO;GAGT,MAAM,MAAM,KAAK,eAAe,OAAO,UAAU;AACjD,OAAI,CAAC,IACH,QAAO;GAGT,MAAM,WAAW,8BAA8B;IAC7C;IACA,YAAY,QAAQ;IACpB,QAAQ,QAAQ;IAChB,UAAU,QAAQ;IAClB,SAAS,QAAQ;IAClB,CAAC;AAEF,SAAM,kCAAkC;IAAE;IAAK,KAAK,KAAK,WAAW;IAAE;IAAW;IAAU,CAAC;AAC5F,UAAO,wBAAwB,SAAS,GAAG;;EAE9C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exec-approvals.js","names":[],"sources":["../../../../extensions/telegram/src/exec-approvals.ts"],"sourcesContent":["import type { Config } from '@xopcai/xopc/config/index.js';\n\nexport function isTelegramExecApprovalEnabled(cfg: Config, accountId = 'default'): boolean {\n const tg = cfg.channels?.telegram as\n | { accounts?: Record<string, { execApprovals?: { enabled?: boolean } }> }\n | undefined;\n const acc = tg?.accounts?.[accountId];\n return acc?.execApprovals?.enabled === true;\n}\n\nexport function resolveTelegramExecApprovers(\n cfg: Config,\n accountId = 'default',\n): string[] {\n const tg = cfg.channels?.telegram as\n | {\n accounts?: Record<\n string,\n {\n execApprovals?: { approvers?: Array<string | number> };\n allowFrom?: Array<string | number>;\n }\n >;\n }\n | undefined;\n const acc = tg?.accounts?.[accountId];\n const explicit = acc?.execApprovals?.approvers ?? [];\n const fallback = acc?.allowFrom ?? [];\n const merged = explicit.length > 0 ? explicit : fallback;\n return merged\n .map((v) => String(v).trim())\n .filter((v) => v && v !== '*' && /^\\d+$/.test(v.replace(/^(telegram|tg):/i, '')))\n .map((v) => v.replace(/^(telegram|tg):/i, ''));\n}\n\nexport function isTelegramExecApprovalApprover(params: {\n cfg: Config;\n accountId: string;\n senderId: string;\n}): boolean {\n const approvers = resolveTelegramExecApprovers(params.cfg, params.accountId);\n const sid = params.senderId.replace(/^(telegram|tg):/i, '');\n return approvers.includes(sid);\n}\n"],"mappings":";AAEA,SAAgB,8BAA8B,KAAa,YAAY,WAAoB;AAKzF,UAJW,IAAI,UAAU,WAGT,WAAW,aACf,eAAe,YAAY;;AAGzC,SAAgB,6BACd,KACA,YAAY,WACF;CAYV,MAAM,OAXK,IAAI,UAAU,WAWT,WAAW;CAC3B,MAAM,WAAW,KAAK,eAAe,aAAa,EAAE;CACpD,MAAM,WAAW,KAAK,aAAa,EAAE;AAErC,SADe,SAAS,SAAS,IAAI,WAAW,UAE7C,KAAK,MAAM,OAAO,EAAE,CAAC,MAAM,CAAC,CAC5B,QAAQ,MAAM,KAAK,MAAM,OAAO,QAAQ,KAAK,EAAE,QAAQ,oBAAoB,GAAG,CAAC,CAAC,CAChF,KAAK,MAAM,EAAE,QAAQ,oBAAoB,GAAG,CAAC;;AAGlD,SAAgB,+BAA+B,QAInC;CACV,MAAM,YAAY,6BAA6B,OAAO,KAAK,OAAO,UAAU;CAC5E,MAAM,MAAM,OAAO,SAAS,QAAQ,oBAAoB,GAAG;AAC3D,QAAO,UAAU,SAAS,IAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"focus-handler.js","names":[],"sources":["../../../../extensions/telegram/src/focus-handler.ts"],"sourcesContent":["import type { Context } from 'grammy';\nimport type { Config } from '@xopcai/xopc/config/index.js';\nimport { generateSessionKey } from '@xopcai/xopc/chat-commands/session-key.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport {\n clearTelegramThreadBinding,\n getTelegramThreadBinding,\n setTelegramThreadBinding,\n} from './thread-bindings.js';\nimport { buildTelegramConversationId } from './conversation-id.js';\n\nconst log = createLogger('TelegramFocus');\n\nexport async function handleTelegramFocusCommand(params: {\n ctx: Context;\n accountId: string;\n config: Config;\n}): Promise<void> {\n const { ctx, accountId } = params;\n const chatId = String(ctx.chat?.id ?? '');\n const senderId = String(ctx.from?.id ?? '');\n const isGroup = ctx.chat?.type === 'group' || ctx.chat?.type === 'supergroup';\n const threadId = (ctx.message as { message_thread_id?: number } | undefined)?.message_thread_id;\n const text = ctx.message?.text?.trim() ?? '';\n const parts = text.split(/\\s+/);\n const sub = parts[1]?.toLowerCase();\n\n if (sub === 'off' || sub === 'clear') {\n clearTelegramThreadBinding(chatId, threadId != null ? String(threadId) : undefined);\n await ctx.reply('Thread focus cleared.');\n return;\n }\n\n const sessionKey =\n parts.length > 1 && parts[1] && !parts[1].startsWith('/')\n ? parts.slice(1).join(' ').trim()\n : generateSessionKey({\n source: 'telegram',\n chatId,\n senderId,\n isGroup,\n threadId: threadId != null ? String(threadId) : undefined,\n accountId,\n });\n\n setTelegramThreadBinding({\n sessionKey,\n chatId,\n threadId: threadId != null ? String(threadId) : undefined,\n createdAtMs: Date.now(),\n lastActivityMs: Date.now(),\n });\n\n log.info(\n { accountId, chatId, threadId, sessionKey, conversationId: buildTelegramConversationId(chatId, threadId) },\n 'Telegram thread focus set',\n );\n\n await ctx.reply(`Focused on session:\\n${sessionKey}`);\n}\n\nexport function resolveTelegramFocusedSessionKey(params: {\n chatId: string;\n threadId?: string;\n defaultSessionKey: string;\n}): string {\n const binding = getTelegramThreadBinding(params.chatId, params.threadId);\n if (!binding) {\n return params.defaultSessionKey;\n }\n binding.lastActivityMs = Date.now();\n return binding.sessionKey;\n}\n"],"mappings":";;;;;;aAG4D;AAQ5D,MAAM,MAAM,aAAa,gBAAgB;AAEzC,eAAsB,2BAA2B,QAI/B;CAChB,MAAM,EAAE,KAAK,cAAc;CAC3B,MAAM,SAAS,OAAO,IAAI,MAAM,MAAM,GAAG;CACzC,MAAM,WAAW,OAAO,IAAI,MAAM,MAAM,GAAG;CAC3C,MAAM,UAAU,IAAI,MAAM,SAAS,WAAW,IAAI,MAAM,SAAS;CACjE,MAAM,WAAY,IAAI,SAAwD;CAE9E,MAAM,SADO,IAAI,SAAS,MAAM,MAAM,IAAI,IACvB,MAAM,MAAM;CAC/B,MAAM,MAAM,MAAM,IAAI,aAAa;AAEnC,KAAI,QAAQ,SAAS,QAAQ,SAAS;AACpC,6BAA2B,QAAQ,YAAY,OAAO,OAAO,SAAS,GAAG,KAAA,EAAU;AACnF,QAAM,IAAI,MAAM,wBAAwB;AACxC;;CAGF,MAAM,aACJ,MAAM,SAAS,KAAK,MAAM,MAAM,CAAC,MAAM,GAAG,WAAW,IAAI,GACrD,MAAM,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,GAC/B,mBAAmB;EACjB,QAAQ;EACR;EACA;EACA;EACA,UAAU,YAAY,OAAO,OAAO,SAAS,GAAG,KAAA;EAChD;EACD,CAAC;AAER,0BAAyB;EACvB;EACA;EACA,UAAU,YAAY,OAAO,OAAO,SAAS,GAAG,KAAA;EAChD,aAAa,KAAK,KAAK;EACvB,gBAAgB,KAAK,KAAK;EAC3B,CAAC;AAEF,KAAI,KACF;EAAE;EAAW;EAAQ;EAAU;EAAY,gBAAgB,4BAA4B,QAAQ,SAAS;EAAE,EAC1G,4BACD;AAED,OAAM,IAAI,MAAM,wBAAwB,aAAa;;AAGvD,SAAgB,iCAAiC,QAItC;CACT,MAAM,UAAU,yBAAyB,OAAO,QAAQ,OAAO,SAAS;AACxE,KAAI,CAAC,QACH,QAAO,OAAO;AAEhB,SAAQ,iBAAiB,KAAK,KAAK;AACnC,QAAO,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","names":[],"sources":["../../../../extensions/telegram/src/format.ts"],"sourcesContent":["/**\n * Telegram Message Formatting Utilities\n *\n * Converts Markdown to Telegram HTML format using the robust @src/markdown/ package.\n * Markdown → Telegram HTML via the shared markdown IR pipeline.\n */\n\nimport {\n markdownToIR,\n chunkMarkdownIR,\n renderMarkdownWithMarkers,\n type MarkdownIR,\n type MarkdownLinkSpan,\n type RenderStyleMap,\n} from \"@xopcai/xopc/markdown/index.js\";\nimport type { MarkdownTableMode } from \"@xopcai/xopc/config/types.base.js\";\n\n// Telegram HTML style markers\nconst TELEGRAM_STYLE_MARKERS: RenderStyleMap = {\n bold: { open: \"<b>\", close: \"</b>\" },\n italic: { open: \"<i>\", close: \"</i>\" },\n strikethrough: { open: \"<s>\", close: \"</s>\" },\n code: { open: \"<code>\", close: \"</code>\" },\n code_block: { open: \"<pre><code>\", close: \"</code></pre>\" },\n spoiler: { open: \"<tg-spoiler>\", close: \"</tg-spoiler>\" },\n blockquote: { open: \"<blockquote>\", close: \"</blockquote>\" },\n};\n\n/**\n * Escape HTML special characters\n */\nexport function escapeHtml(text: string): string {\n return text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\n/**\n * Escape HTML attribute values\n */\nexport function escapeHtmlAttr(text: string): string {\n return escapeHtml(text).replace(/\"/g, \""\");\n}\n\n/**\n * Build a link renderer for Telegram HTML\n */\nfunction buildTelegramLinkRenderer(\n _irText: string\n): (link: MarkdownLinkSpan, text: string) => { start: number; end: number; open: string; close: string } | null {\n return (link, _text) => {\n const href = link.href.trim();\n if (!href) return null;\n\n // Validate URL scheme for Telegram\n const allowedSchemes = /^(https?|tg|mailto):/i;\n if (!allowedSchemes.test(href) && !href.startsWith(\"#\")) {\n return null;\n }\n\n return {\n start: link.start,\n end: link.end,\n open: `<a href=\"${escapeHtmlAttr(href)}\">`,\n close: \"</a>\",\n };\n };\n}\n\n/**\n * Strip or escape unknown HTML tags that Telegram doesn't support\n * Telegram only supports: b, strong, i, em, u, ins, s, strike, del, tg-spoiler,\n * a, pre, code, blockquote, br\n */\nconst TELEGRAM_ALLOWED_TAGS = new Set([\n 'b', 'strong', 'i', 'em', 'u', 'ins', 's', 'strike', 'del',\n 'tg-spoiler', 'a', 'pre', 'code', 'blockquote', 'br'\n]);\n\nexport function stripUnknownHtmlTags(html: string): string {\n // First pass: normalize escaped HTML entities to actual tags for processing\n let processed = html.replace(/<(\\/?)([a-zA-Z][a-zA-Z0-9-]*)([^&]*?)>/gi, (match, slash, tagName, attrs) => {\n const normalizedTag = tagName.toLowerCase();\n \n // Keep allowed tags (normalize them, preserve attributes)\n if (TELEGRAM_ALLOWED_TAGS.has(normalizedTag)) {\n // Decode attributes\n const decodedAttrs = attrs\n .replace(/"/g, '\"')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .trim();\n \n if (decodedAttrs) {\n return `<${slash}${normalizedTag} ${decodedAttrs}>`;\n }\n return `<${slash}${normalizedTag}>`;\n }\n \n // Strip unknown tags\n return '';\n });\n \n // Second pass: handle any remaining unescaped tags (shouldn't happen, but just in case)\n processed = processed.replace(/<(\\/?)([a-zA-Z][a-zA-Z0-9-]*)([^>]*?)>/gi, (match, slash, tagName, attrs) => {\n const normalizedTag = tagName.toLowerCase();\n \n if (TELEGRAM_ALLOWED_TAGS.has(normalizedTag)) {\n if (attrs.trim()) {\n return `<${slash}${normalizedTag} ${attrs.trim()}>`;\n }\n return `<${slash}${normalizedTag}>`;\n }\n \n return '';\n });\n \n return processed;\n}\n\n/**\n * Render Markdown IR to Telegram HTML\n */\nexport function renderIRToTelegramHtml(ir: MarkdownIR): string {\n let html = renderMarkdownWithMarkers(ir, {\n styleMarkers: TELEGRAM_STYLE_MARKERS,\n escapeText: escapeHtml,\n buildLink: buildTelegramLinkRenderer(ir.text),\n });\n \n // Strip any unknown HTML tags that might have slipped through\n html = stripUnknownHtmlTags(html);\n \n return html;\n}\n\n/**\n * Convert markdown to Telegram HTML\n */\nexport function markdownToTelegramHtml(\n markdown: string,\n options: { enableSpoilers?: boolean; tableMode?: MarkdownTableMode } = {}\n): string {\n const ir = markdownToIR(markdown, {\n linkify: true,\n enableSpoilers: options.enableSpoilers ?? true,\n tableMode: options.tableMode ?? \"off\",\n });\n return renderIRToTelegramHtml(ir);\n}\n\n/**\n * Convert markdown to plain text (strip formatting)\n */\nexport function markdownToPlainText(markdown: string): string {\n const ir = markdownToIR(markdown, {\n linkify: true,\n enableSpoilers: true,\n });\n\n // Build plain text by taking the IR text and adding link URLs\n let result = ir.text;\n\n // Process links in reverse order to preserve indices\n const sortedLinks = [...ir.links].sort((a, b) => b.start - a.start);\n for (const link of sortedLinks) {\n const linkText = ir.text.slice(link.start, link.end);\n const replacement = `${linkText} (${link.href})`;\n result = result.slice(0, link.start) + replacement + result.slice(link.end);\n }\n\n return result;\n}\n\n/**\n * Formatted chunk with both HTML and plain text representations\n */\nexport interface FormattedChunk {\n html: string;\n text: string;\n}\n\n/**\n * Convert markdown to Telegram HTML chunks\n * Splits long messages while preserving structure\n */\nexport function markdownToTelegramChunks(\n markdown: string,\n limit: number = 4000\n): FormattedChunk[] {\n const ir = markdownToIR(markdown, {\n linkify: true,\n enableSpoilers: true,\n });\n\n const chunks = chunkMarkdownIR(ir, limit);\n\n return chunks.map((chunk) => ({\n html: renderIRToTelegramHtml(chunk),\n text: chunk.text,\n }));\n}\n\n/**\n * Render markdown to Telegram HTML (single message)\n * Supports both markdown and HTML input modes\n */\nexport function renderTelegramHtmlText(\n text: string,\n options: { textMode?: \"markdown\" | \"html\"; enableSpoilers?: boolean } = {}\n): string {\n const textMode = options.textMode ?? \"markdown\";\n if (textMode === \"html\") {\n return text;\n }\n\n const ir = markdownToIR(text, {\n linkify: true,\n enableSpoilers: options.enableSpoilers ?? true,\n });\n return renderIRToTelegramHtml(ir);\n}\n\n// File extensions that share TLDs and commonly appear in code/documentation\nconst FILE_EXTENSIONS_WITH_TLD = new Set([\n \"md\", // Markdown (Moldova)\n \"go\", // Go language\n \"py\", // Python (Paraguay)\n \"pl\", // Perl (Poland)\n \"sh\", // Shell (Saint Helena)\n \"am\", // Automake files (Armenia)\n \"at\", // Assembly (Austria)\n \"be\", // Backend files (Belgium)\n \"cc\", // C++ source (Cocos Islands)\n]);\n\n/**\n * Wrap standalone file references in <code> tags\n * Prevents Telegram from generating domain registrar previews\n */\nexport function wrapFileReferencesInHtml(html: string): string {\n // Track nesting depth for tags that should not be modified\n let codeDepth = 0;\n let preDepth = 0;\n let anchorDepth = 0;\n let result = \"\";\n let lastIndex = 0;\n\n const HTML_TAG_PATTERN = /(<\\/?)([a-zA-Z][a-zA-Z0-9-]*)\\b[^>]*?>/gi;\n let match: RegExpExecArray | null;\n\n while ((match = HTML_TAG_PATTERN.exec(html)) !== null) {\n const tagStart = match.index;\n const tagEnd = tagStart + match[0].length;\n const tagName = match[2].toLowerCase();\n const isClosing = match[1] === \"</\";\n\n // Process text before this tag\n if (tagStart > lastIndex) {\n const textSegment = html.slice(lastIndex, tagStart);\n result += wrapSegmentFileRefs(textSegment, codeDepth, preDepth, anchorDepth);\n }\n\n // Update nesting depth\n if (tagName === \"code\") {\n codeDepth += isClosing ? -1 : 1;\n } else if (tagName === \"pre\") {\n preDepth += isClosing ? -1 : 1;\n } else if (tagName === \"a\") {\n anchorDepth += isClosing ? -1 : 1;\n }\n\n // Add the tag itself\n result += match[0];\n lastIndex = tagEnd;\n }\n\n // Process remaining text after last tag\n if (lastIndex < html.length) {\n const textSegment = html.slice(lastIndex);\n result += wrapSegmentFileRefs(textSegment, codeDepth, preDepth, anchorDepth);\n }\n\n return result;\n}\n\n/**\n * Wrap file references in a text segment (respecting nesting depth)\n */\nfunction wrapSegmentFileRefs(\n text: string,\n codeDepth: number,\n preDepth: number,\n anchorDepth: number\n): string {\n if (!text || codeDepth > 0 || preDepth > 0 || anchorDepth > 0) {\n return text;\n }\n\n const FILE_EXTENSIONS_PATTERN = Array.from(FILE_EXTENSIONS_WITH_TLD).join(\"|\");\n const FILE_REFERENCE_PATTERN = new RegExp(\n `(^|[^a-zA-Z0-9_\\\\-/])([a-zA-Z0-9_.\\\\-./]+\\\\.(?:${FILE_EXTENSIONS_PATTERN}))(?=$|[^a-zA-Z0-9_\\\\-/])`,\n \"gi\"\n );\n\n return text.replace(FILE_REFERENCE_PATTERN, (match, prefix, filename) => {\n if (filename.startsWith(\"//\")) {\n return match;\n }\n if (/https?:\\/\\/$/i.test(prefix)) {\n return match;\n }\n return `${prefix}<code>${escapeHtml(filename)}</code>`;\n });\n}\n\n/**\n * Format message for Telegram with proper HTML and file reference protection\n */\nexport function formatTelegramMessage(\n markdown: string,\n options: { wrapFileRefs?: boolean; textMode?: \"markdown\" | \"html\" } = {}\n): { html: string; text: string } {\n const html = renderTelegramHtmlText(markdown, { textMode: options.textMode });\n\n // Wrap file references if enabled\n const finalHtml = options.wrapFileRefs !== false ? wrapFileReferencesInHtml(html) : html;\n\n return {\n html: finalHtml,\n text: markdown,\n };\n}\n\n/**\n * Smart split message into chunks with both HTML and plain text\n * Uses Markdown IR for robust chunking that preserves structure\n */\nexport function splitTelegramMessageSmart(\n markdown: string,\n maxChars: number = 4000\n): FormattedChunk[] {\n return markdownToTelegramChunks(markdown, maxChars);\n}\n\n/**\n * Validate HTML string for Telegram parse_mode\n * Returns true if the HTML appears to be valid\n */\nexport function isValidTelegramHtml(html: string): boolean {\n const voidElements = new Set([\n \"br\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"area\",\n \"base\",\n \"col\",\n \"embed\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n ]);\n\n const openTags: string[] = [];\n let i = 0;\n\n while (i < html.length) {\n if (html[i] === \"<\" && i + 1 < html.length && html[i + 1] !== \"!\") {\n let tagEnd = html.indexOf(\">\", i);\n if (tagEnd === -1) return false;\n\n const fullTag = html.slice(i, tagEnd + 1);\n\n // Skip comments\n if (fullTag.startsWith(\"<!\") || fullTag.startsWith(\"<!--\")) {\n const commentEnd = html.indexOf(\"-->\", i);\n if (commentEnd !== -1) {\n i = commentEnd + 3;\n } else {\n return false;\n }\n continue;\n }\n\n const isClosing = fullTag.startsWith(\"</\");\n const tagName = fullTag\n .slice(isClosing ? 2 : 1, -1)\n .trim()\n .toLowerCase()\n .split(/\\s/)[0];\n\n if (!tagName) {\n i = tagEnd + 1;\n continue;\n }\n\n if (voidElements.has(tagName)) {\n // Void elements are self-closing, no need to track\n } else if (isClosing) {\n const lastIndex = openTags.lastIndexOf(tagName);\n if (lastIndex === -1) {\n // Closing tag without matching opening\n return false;\n }\n // Close all tags between lastIndex and end\n openTags.splice(lastIndex + 1);\n openTags.pop();\n } else {\n openTags.push(tagName);\n }\n\n i = tagEnd + 1;\n } else {\n i++;\n }\n }\n\n return openTags.length === 0;\n}\n\n/**\n * Fix malformed HTML tags by ensuring proper nesting\n * This handles cases where LLM generates invalid HTML\n */\nexport function fixMalformedHtml(html: string): string {\n const result: string[] = [];\n const openTags: string[] = [];\n let i = 0;\n\n // Tags that are self-closing or should not be tracked\n const voidElements = new Set([\n \"br\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"area\",\n \"base\",\n \"col\",\n \"embed\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n ]);\n\n // Tags that can be nested (inline elements)\n const inlineTags = new Set([\n \"a\",\n \"b\",\n \"i\",\n \"code\",\n \"s\",\n \"strike\",\n \"del\",\n \"u\",\n \"em\",\n \"strong\",\n \"span\",\n \"tg-spoiler\",\n ]);\n\n while (i < html.length) {\n // Check if we're at a tag\n if (html[i] === \"<\" && i + 1 < html.length && html[i + 1] !== \"!\") {\n // Find the end of the tag\n let tagEnd = html.indexOf(\">\", i);\n if (tagEnd === -1) {\n // No closing > found, treat as literal text\n result.push(html.slice(i));\n break;\n }\n\n const fullTag = html.slice(i, tagEnd + 1);\n\n // Skip HTML comments and DOCTYPE\n if (fullTag.startsWith(\"<!\") || fullTag.startsWith(\"<!--\")) {\n // Skip until end of comment\n const commentEnd = html.indexOf(\"-->\", i);\n if (commentEnd !== -1) {\n i = commentEnd + 3;\n } else {\n result.push(html.slice(i));\n break;\n }\n continue;\n }\n\n // Check if it's a closing tag\n if (fullTag.startsWith(\"</\")) {\n const tagName = fullTag\n .slice(2, -1)\n .trim()\n .toLowerCase()\n .split(/\\s/)[0];\n\n if (voidElements.has(tagName)) {\n // Invalid closing tag for void element, escape it\n result.push(escapeHtml(fullTag));\n } else {\n // Find and close the matching tag\n const lastIndex = openTags.lastIndexOf(tagName);\n if (lastIndex !== -1) {\n // Found matching tag, close all tags opened after it\n while (openTags.length > lastIndex + 1) {\n const tagToClose = openTags.pop()!;\n result.push(`</${tagToClose}>`);\n }\n // Close the matching tag\n openTags.pop();\n result.push(fullTag);\n } else {\n // No matching open tag, escape the closing tag\n result.push(escapeHtml(fullTag));\n }\n }\n } else if (\n fullTag.endsWith(\"/>\") ||\n voidElements.has(fullTag.slice(1, -1).trim().toLowerCase().split(/\\s/)[0])\n ) {\n // Self-closing tag or void element\n result.push(fullTag);\n } else {\n // Opening tag\n const tagName = fullTag.slice(1, -1).trim().toLowerCase().split(/\\s/)[0];\n\n if (tagName && (inlineTags.has(tagName) || tagName === \"pre\" || tagName === \"blockquote\")) {\n // Track inline/nestable tags\n openTags.push(tagName);\n }\n result.push(fullTag);\n }\n\n i = tagEnd + 1;\n } else {\n // Regular text\n result.push(html[i]);\n i++;\n }\n }\n\n // Close any remaining open tags\n while (openTags.length > 0) {\n result.push(`</${openTags.pop()}>`);\n }\n\n return result.join(\"\");\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"group-config-resolver.js","names":[],"sources":["../../../../extensions/telegram/src/group-config-resolver.ts"],"sourcesContent":["import type { TelegramAccountConfig, TelegramGroupConfig, TelegramTopicConfig } from './config-types.js';\n\nexport interface ResolvedTelegramGroupContext {\n groupConfig?: TelegramGroupConfig;\n topicConfig?: TelegramTopicConfig;\n systemPrompt?: string;\n agentId?: string;\n}\n\nexport function resolveTelegramGroupContext(params: {\n account: TelegramAccountConfig;\n chatId: string;\n threadId?: string | number;\n}): ResolvedTelegramGroupContext {\n const chatKey = params.chatId;\n const threadKey = params.threadId != null ? String(params.threadId) : undefined;\n const groupConfig = params.account.groups?.[chatKey];\n const topicConfig = threadKey ? groupConfig?.topics?.[threadKey] : undefined;\n\n const systemPrompt = topicConfig?.systemPrompt?.trim() || groupConfig?.systemPrompt?.trim() || undefined;\n const agentId = topicConfig?.agentId?.trim() || groupConfig?.agentId?.trim() || undefined;\n\n return { groupConfig, topicConfig, systemPrompt, agentId };\n}\n"],"mappings":";AASA,SAAgB,4BAA4B,QAIX;CAC/B,MAAM,UAAU,OAAO;CACvB,MAAM,YAAY,OAAO,YAAY,OAAO,OAAO,OAAO,SAAS,GAAG,KAAA;CACtE,MAAM,cAAc,OAAO,QAAQ,SAAS;CAC5C,MAAM,cAAc,YAAY,aAAa,SAAS,aAAa,KAAA;AAKnE,QAAO;EAAE;EAAa;EAAa,cAHd,aAAa,cAAc,MAAM,IAAI,aAAa,cAAc,MAAM,IAAI,KAAA;EAG9C,SAFjC,aAAa,SAAS,MAAM,IAAI,aAAa,SAAS,MAAM,IAAI,KAAA;EAEtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-coalescer.js","names":[],"sources":["../../../../extensions/telegram/src/inbound-coalescer.ts"],"sourcesContent":["import type { Context } from 'grammy';\nimport type { Message } from '@grammyjs/types';\n\nconst TEXT_FRAGMENT_GAP_MS = 500;\nconst MEDIA_GROUP_GAP_MS = 800;\nconst MAX_TEXT_FRAGMENTS = 12;\nconst MAX_TEXT_FRAGMENT_CHARS = 50_000;\n\ntype PendingTextFragment = {\n key: string;\n messages: Message[];\n timer?: ReturnType<typeof setTimeout>;\n};\n\ntype PendingMediaGroup = {\n key: string;\n messages: Message[];\n timer?: ReturnType<typeof setTimeout>;\n};\n\nexport type TelegramCoalescedInbound = {\n ctx: Context;\n accountId: string;\n messages: Message[];\n};\n\nexport function createTelegramInboundCoalescer() {\n const textFragments = new Map<string, PendingTextFragment>();\n const mediaGroups = new Map<string, PendingMediaGroup>();\n\n return {\n async enqueue(params: {\n ctx: Context;\n accountId: string;\n message: Message;\n onReady: (batch: TelegramCoalescedInbound) => Promise<void>;\n }): Promise<void> {\n const { ctx, accountId, message, onReady } = params;\n const mediaGroupId = message.media_group_id;\n if (mediaGroupId) {\n await enqueueMediaGroup({\n key: `${accountId}:${ctx.chat?.id}:${mediaGroupId}`,\n ctx,\n accountId,\n message,\n onReady,\n mediaGroups,\n });\n return;\n }\n\n if (message.text && message.message_id) {\n await enqueueTextFragment({\n key: `${accountId}:${ctx.chat?.id}:${ctx.from?.id}:${message.message_id}`,\n ctx,\n accountId,\n message,\n onReady,\n textFragments,\n });\n return;\n }\n\n await onReady({ ctx, accountId, messages: [message] });\n },\n };\n}\n\nasync function enqueueMediaGroup(params: {\n key: string;\n ctx: Context;\n accountId: string;\n message: Message;\n onReady: (batch: TelegramCoalescedInbound) => Promise<void>;\n mediaGroups: Map<string, PendingMediaGroup>;\n}): Promise<void> {\n const existing = params.mediaGroups.get(params.key);\n const entry = existing ?? { key: params.key, messages: [] };\n entry.messages.push(params.message);\n if (entry.timer) clearTimeout(entry.timer);\n entry.timer = setTimeout(async () => {\n params.mediaGroups.delete(params.key);\n await params.onReady({\n ctx: params.ctx,\n accountId: params.accountId,\n messages: entry.messages,\n });\n }, MEDIA_GROUP_GAP_MS);\n entry.timer.unref?.();\n params.mediaGroups.set(params.key, entry);\n}\n\nasync function enqueueTextFragment(params: {\n key: string;\n ctx: Context;\n accountId: string;\n message: Message;\n onReady: (batch: TelegramCoalescedInbound) => Promise<void>;\n textFragments: Map<string, PendingTextFragment>;\n}): Promise<void> {\n const text = params.message.text ?? '';\n const isFragmentCandidate = text.length >= 3500;\n if (!isFragmentCandidate) {\n await params.onReady({ ctx: params.ctx, accountId: params.accountId, messages: [params.message] });\n return;\n }\n\n const baseKey = `${params.accountId}:${params.ctx.chat?.id}:${params.ctx.from?.id}`;\n const existing = [...params.textFragments.values()].find((e) => e.key.startsWith(baseKey));\n const entry = existing ?? { key: `${baseKey}:${params.message.message_id}`, messages: [] };\n\n if (entry.messages.length >= MAX_TEXT_FRAGMENTS) {\n await flushTextFragment(entry, params);\n return;\n }\n\n entry.messages.push(params.message);\n const combinedLen = entry.messages.reduce((n, m) => n + (m.text?.length ?? 0), 0);\n if (combinedLen > MAX_TEXT_FRAGMENT_CHARS) {\n await flushTextFragment(entry, params);\n return;\n }\n\n if (entry.timer) clearTimeout(entry.timer);\n entry.timer = setTimeout(async () => {\n await flushTextFragment(entry, params);\n }, TEXT_FRAGMENT_GAP_MS);\n entry.timer.unref?.();\n params.textFragments.set(entry.key, entry);\n}\n\nasync function flushTextFragment(\n entry: PendingTextFragment,\n params: {\n ctx: Context;\n accountId: string;\n onReady: (batch: TelegramCoalescedInbound) => Promise<void>;\n textFragments: Map<string, PendingTextFragment>;\n },\n): Promise<void> {\n params.textFragments.delete(entry.key);\n if (entry.timer) clearTimeout(entry.timer);\n if (entry.messages.length === 0) return;\n const mergedText = entry.messages.map((m) => m.text ?? '').join('');\n const base = entry.messages[entry.messages.length - 1]!;\n const merged: Message = { ...base, text: mergedText };\n await params.onReady({ ctx: params.ctx, accountId: params.accountId, messages: [merged] });\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-processor.js","names":[],"sources":["../../../../extensions/telegram/src/inbound-processor.ts"],"sourcesContent":["/**\n * Telegram Inbound Processor\n *\n * Handles inbound message processing from Telegram:\n * - Message queuing (per chat)\n * - Deduplication\n * - Access control\n * - Media download\n * - STT transcription\n * - Event publishing to bus\n */\n\nimport type { Bot, Context } from 'grammy';\nimport type { Message } from '@grammyjs/types';\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { MessageBus } from '@xopcai/xopc/infra/bus/index.js';\nimport type { TelegramAccountManager } from './account-manager.js';\nimport { telegramUpdateDedupe, buildTelegramUpdateKey } from './dedupe.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport { normalizeTelegramCommandName, parseSlashCommand } from '@xopcai/xopc/chat-commands/command-parse.js';\nimport { tryConsumeTelegramClarifyFreeText } from '@xopcai/xopc/gateway/clarify-runtime.js';\nimport { resolveRoute } from '@xopcai/xopc/routing/index.js';\nimport { resolveTelegramGroupContext } from './group-config-resolver.js';\nimport { resolveTelegramFocusedSessionKey } from './focus-handler.js';\nimport { buildTelegramConversationId } from './conversation-id.js';\nimport { checkMentionInTranscription } from '@xopcai/xopc/voice/stt/mention.js';\n\nconst log = createLogger('TelegramInboundProcessor');\n\n/** Must bypass the per-chat queue so /abort can cancel an in-flight turn. */\nfunction isAbortSlashCommand(text: string): boolean {\n const parsed = parseSlashCommand(text);\n if (!parsed) return false;\n const cmd = normalizeTelegramCommandName(parsed.command);\n return cmd === 'abort' || cmd === 'stop' || cmd === 'cancel';\n}\n\n/** Maximum voice message duration for STT in seconds */\nconst STT_MAX_VOICE_DURATION_SECONDS = 60;\n\n// =============================================================================\n// External Service Interfaces (for dependency injection)\n// =============================================================================\n\nexport interface AccessControlService {\n normalizeAllowFromWithStore(options: { allowFrom?: Array<string | number> }): unknown;\n evaluateGroupBaseAccess(options: {\n isGroup: boolean;\n groupConfig?: unknown;\n topicConfig?: unknown;\n hasGroupAllowOverride: boolean;\n effectiveGroupAllow: unknown;\n senderId?: string;\n senderUsername?: string;\n }): { allowed: boolean; reason?: string };\n resolveRequireMention(options: {\n topicConfig?: unknown;\n groupConfig?: unknown;\n defaultRequireMention?: boolean;\n }): boolean;\n hasBotMention(options: { botUsername: string; text?: string; entities?: unknown }): boolean;\n removeBotMention(text: string, botUsername: string): string;\n}\n\nexport interface SessionKeyService {\n generateSessionKey(options: {\n source: string;\n chatId: string;\n senderId: string;\n isGroup: boolean;\n threadId?: string;\n accountId?: string;\n agentId?: string;\n }): string;\n}\n\nexport interface STTService {\n transcribe(buffer: Buffer, config: unknown, options?: { language?: string }): Promise<{ text: string }>;\n isSTTAvailable(config: unknown): boolean;\n}\n\nexport interface MediaUtils {\n getMimeType(type: string, filePath?: string): string;\n}\n\n// =============================================================================\n// Dependencies Interface\n// =============================================================================\n\nexport interface InboundProcessorDeps {\n bus: MessageBus;\n config: Config;\n accountManager: TelegramAccountManager;\n // External services (injected for testability)\n accessControl: AccessControlService;\n sessionKeyService: SessionKeyService;\n sttService: STTService;\n mediaUtils: MediaUtils;\n}\n\ninterface QueuedMessage {\n ctx: Context;\n accountId: string;\n resolve: () => void;\n reject: (err: Error) => void;\n}\n\n// =============================================================================\n// Media Processing Types\n// =============================================================================\n\ninterface MediaItem {\n type: string;\n fileId: string;\n emoji?: string;\n}\n\ninterface ProcessedAttachment {\n type: string;\n mimeType: string;\n data: string;\n name?: string;\n size?: number;\n}\n\n// =============================================================================\n// Helper Functions (reduce nesting in main processor)\n// =============================================================================\n\n/**\n * Extract media items from message\n */\nfunction extractMediaItems(message: Message): MediaItem[] {\n const media: MediaItem[] = [];\n \n if (message.photo?.length) {\n media.push({ type: 'photo', fileId: message.photo[message.photo.length - 1].file_id });\n }\n if (message.document) {\n media.push({ type: 'document', fileId: message.document.file_id });\n }\n if (message.video) {\n media.push({ type: 'video', fileId: message.video.file_id });\n }\n if (message.audio) {\n media.push({ type: 'audio', fileId: message.audio.file_id });\n }\n if (message.voice) {\n media.push({ type: 'voice', fileId: message.voice.file_id });\n }\n if (message.sticker) {\n media.push({ type: 'sticker', fileId: message.sticker.file_id, emoji: message.sticker.emoji });\n }\n\n return media;\n}\n\n/**\n * Download + STT a Telegram voice message (for mention probe or media pipeline).\n */\nasync function downloadAndTranscribeTelegramVoice(params: {\n voice: NonNullable<Message['voice']>;\n bot: Bot;\n botToken: string;\n accountApiRoot: string;\n sttService: STTService;\n sttConfig: unknown;\n}): Promise<string> {\n const { voice, bot, botToken, accountApiRoot, sttService, sttConfig } = params;\n const voiceDuration = voice.duration || 0;\n if (voiceDuration > STT_MAX_VOICE_DURATION_SECONDS) {\n return '';\n }\n if (!sttService.isSTTAvailable(sttConfig)) {\n return '';\n }\n try {\n const file = await bot.api.getFile(voice.file_id);\n const downloadUrl = `${accountApiRoot}/file/bot${botToken}/${file.file_path}`;\n const response = await fetch(downloadUrl);\n if (!response.ok) {\n return '';\n }\n const buffer = Buffer.from(await response.arrayBuffer());\n if (buffer.length === 0) {\n return '';\n }\n const sttResult = await sttService.transcribe(buffer, sttConfig, {\n language: (sttConfig as { provider?: string })?.provider === 'alibaba' ? 'zh' : undefined,\n });\n return sttResult.text?.trim() ?? '';\n } catch {\n return '';\n }\n}\n\n/**\n * Process a single media item (download + optional STT)\n */\nasync function processMediaItem(\n item: MediaItem,\n bot: Bot,\n botToken: string,\n accountApiRoot: string,\n message: Message,\n sttService: STTService,\n mediaUtils: MediaUtils,\n sttConfig: unknown,\n reuseVoiceTranscript?: string,\n): Promise<{ attachment: ProcessedAttachment | null; transcribedText: string }> {\n try {\n const file = await bot.api.getFile(item.fileId);\n const downloadUrl = `${accountApiRoot}/file/bot${botToken}/${file.file_path}`;\n const response = await fetch(downloadUrl);\n\n // Debug log for media download\n log.info({\n type: item.type,\n fileId: item.fileId,\n downloadUrl,\n responseStatus: response.status,\n }, 'Media download response');\n\n if (!response.ok) {\n throw new Error(`Failed to download: ${response.status}`);\n }\n\n const buffer = await response.arrayBuffer();\n\n // Debug log for buffer size\n log.info({\n type: item.type,\n fileId: item.fileId,\n bufferSize: buffer.byteLength,\n filePath: file.file_path,\n }, 'Media buffer downloaded');\n\n if (buffer.byteLength === 0) {\n log.warn({\n type: item.type,\n fileId: item.fileId,\n filePath: file.file_path,\n }, 'Media buffer is empty, may cause issues');\n }\n let transcribedText = '';\n\n // Handle voice messages with STT\n if (item.type === 'voice' && sttService.isSTTAvailable(sttConfig)) {\n if (reuseVoiceTranscript !== undefined && reuseVoiceTranscript !== '') {\n transcribedText = reuseVoiceTranscript;\n } else {\n const voiceDuration = message.voice?.duration || 0;\n if (voiceDuration <= STT_MAX_VOICE_DURATION_SECONDS) {\n try {\n const sttResult = await sttService.transcribe(Buffer.from(buffer), sttConfig, {\n language: (sttConfig as { provider?: string })?.provider === 'alibaba' ? 'zh' : undefined,\n });\n transcribedText = sttResult.text;\n } catch (sttError) {\n log.error({ sttError }, 'STT transcription failed');\n transcribedText = '[STT failed]';\n }\n } else {\n transcribedText = `[Voice message too long (>${STT_MAX_VOICE_DURATION_SECONDS}s)]`;\n }\n }\n }\n\n const base64 = Buffer.from(buffer).toString('base64');\n const mimeType = mediaUtils.getMimeType(item.type, file.file_path);\n\n // Debug log for attachment creation\n log.info({\n type: item.type,\n mimeType,\n base64Length: base64.length,\n size: buffer.byteLength,\n name: file.file_path?.split('/').pop(),\n }, 'Attachment created');\n\n return {\n attachment: {\n type: item.type,\n mimeType,\n data: base64,\n name: file.file_path?.split('/').pop(),\n size: buffer.byteLength,\n },\n transcribedText,\n };\n } catch (err) {\n log.error({ type: item.type, fileId: item.fileId, err }, 'Failed to download media');\n return { attachment: null, transcribedText: '' };\n }\n}\n\n/**\n * Process all media items\n */\nasync function processAllMedia(\n media: MediaItem[],\n bot: Bot,\n botToken: string,\n accountApiRoot: string,\n message: Message,\n sttService: STTService,\n mediaUtils: MediaUtils,\n sttConfig: unknown,\n reuseVoiceTranscript?: string,\n): Promise<{ attachments: ProcessedAttachment[]; transcribedText: string }> {\n const attachments: ProcessedAttachment[] = [];\n let transcribedText = '';\n let voiceReuseConsumed = false;\n\n for (const item of media) {\n const reuse =\n item.type === 'voice' && reuseVoiceTranscript && !voiceReuseConsumed\n ? reuseVoiceTranscript\n : undefined;\n if (reuse) {\n voiceReuseConsumed = true;\n }\n const result = await processMediaItem(\n item,\n bot,\n botToken,\n accountApiRoot,\n message,\n sttService,\n mediaUtils,\n sttConfig,\n reuse,\n );\n \n if (result.attachment) {\n attachments.push(result.attachment);\n }\n if (result.transcribedText) {\n transcribedText = result.transcribedText;\n }\n }\n\n return { attachments, transcribedText };\n}\n\n// =============================================================================\n// Main Processor Factory\n// =============================================================================\n\n/**\n * Create inbound message processor\n */\nexport function createInboundProcessor(deps: InboundProcessorDeps) {\n const {\n bus,\n config,\n accountManager,\n accessControl,\n sessionKeyService,\n sttService,\n mediaUtils,\n } = deps;\n\n const messageQueues = new Map<string, QueuedMessage[]>();\n const processingLocks = new Map<string, Promise<void>>();\n\n const getChatKey = (accountId: string, chatId: string): string => `${accountId}:${chatId}`;\n\n const processNextMessage = async (chatKey: string): Promise<void> => {\n if (processingLocks.has(chatKey)) return;\n\n const queue = messageQueues.get(chatKey);\n if (!queue || queue.length === 0) return;\n\n let lockResolve: () => void;\n const lockPromise = new Promise<void>((resolve) => {\n lockResolve = resolve;\n });\n processingLocks.set(chatKey, lockPromise);\n\n const { ctx, accountId, resolve, reject } = queue.shift()!;\n\n try {\n await processMessageInternal(ctx, accountId);\n resolve();\n } catch (err) {\n reject(err instanceof Error ? err : new Error(String(err)));\n } finally {\n lockResolve?.();\n processingLocks.delete(chatKey);\n if (queue.length > 0) {\n processNextMessage(chatKey);\n } else {\n messageQueues.delete(chatKey);\n }\n }\n };\n\n const processMessageInternal = async (ctx: Context, accountId: string) => {\n // Deduplication check\n const updateKey = buildTelegramUpdateKey(ctx);\n if (updateKey && telegramUpdateDedupe.checkAndAdd(updateKey)) {\n log.debug({ updateKey, accountId }, 'Duplicate update detected, skipping');\n return;\n }\n\n const account = accountManager.getAccount(accountId);\n if (!account) {\n log.warn({ accountId }, 'Account not found for message processing');\n return;\n }\n\n const botUsername = accountManager.getBotUsername(accountId);\n if (!botUsername) {\n log.warn({ accountId }, 'Bot username not available');\n return;\n }\n\n const message = ctx.message ?? ctx.channelPost;\n if (!message) return;\n\n const chatId = String(ctx.chat?.id);\n const senderId = String(ctx.from?.id);\n const senderUsername = ctx.from?.username;\n const content = message.text ?? message.caption ?? '';\n const isGroup = ctx.chat?.type === 'group' || ctx.chat?.type === 'supergroup';\n const threadId = (message as { message_thread_id?: number }).message_thread_id;\n\n // Access control (group/topic allowlists, mention gating)\n const effectiveAllowFrom = accessControl.normalizeAllowFromWithStore({\n allowFrom: isGroup ? account.groupAllowFrom : account.allowFrom,\n });\n\n const baseAccess = accessControl.evaluateGroupBaseAccess({\n isGroup,\n groupConfig: account.groups?.[chatId],\n topicConfig: threadId ? account.groups?.[chatId]?.topics?.[String(threadId)] : undefined,\n hasGroupAllowOverride: !!(account.groups?.[chatId]?.allowFrom ||\n (threadId && account.groups?.[chatId]?.topics?.[String(threadId)]?.allowFrom)),\n effectiveGroupAllow: effectiveAllowFrom,\n senderId,\n senderUsername,\n });\n\n if (!baseAccess.allowed) {\n log.debug({ accountId, chatId, reason: baseAccess.reason }, 'Message blocked by base access');\n return;\n }\n\n const botEarly = accountManager.getBot(accountId);\n const botTokenEarly = account.botToken;\n const accountApiRootEarly = account.apiRoot?.replace(/\\/$/, '') || 'https://api.telegram.org';\n\n let voiceProbeText = '';\n if (\n isGroup &&\n message.voice &&\n botEarly &&\n botTokenEarly &&\n sttService.isSTTAvailable(config?.tools?.media?.audio)\n ) {\n voiceProbeText = await downloadAndTranscribeTelegramVoice({\n voice: message.voice,\n bot: botEarly,\n botToken: botTokenEarly,\n accountApiRoot: accountApiRootEarly,\n sttService,\n sttConfig: config?.tools?.media?.audio,\n });\n }\n\n if (isGroup) {\n const requireMention = accessControl.resolveRequireMention({\n topicConfig: threadId ? account.groups?.[chatId]?.topics?.[String(threadId)] : undefined,\n groupConfig: account.groups?.[chatId],\n defaultRequireMention: true,\n });\n\n const hasMedia = !!(message.photo || message.document || message.video || message.audio || message.voice);\n const captionEntities = (message as any).caption_entities;\n const voiceMention = voiceProbeText.trim();\n const hasMention =\n accessControl.hasBotMention({ botUsername, text: content, entities: message.entities }) ||\n (hasMedia &&\n accessControl.hasBotMention({\n botUsername,\n text: message.caption ?? '',\n entities: captionEntities,\n })) ||\n (voiceMention.length > 0 &&\n (accessControl.hasBotMention({ botUsername, text: voiceMention }) ||\n checkMentionInTranscription(voiceMention, [botUsername])));\n\n if (requireMention && !hasMention) {\n const isVoiceOnly =\n !!message.voice &&\n !message.photo &&\n !message.document &&\n !message.video &&\n !message.audio &&\n !(message.caption ?? '').trim() &&\n !content.trim();\n\n if (isVoiceOnly) {\n log.debug({ accountId, chatId }, 'Group voice without mention after STT probe, ignored');\n return;\n }\n\n if (!hasMedia || content.trim().length > 0) {\n log.debug({ accountId, chatId }, 'Group message without mention ignored');\n return;\n }\n log.debug({ accountId, chatId }, 'Group media message without mention - processing anyway');\n }\n }\n\n const cleanContent = isGroup ? accessControl.removeBotMention(content, botUsername) : content;\n\n const groupCtx = resolveTelegramGroupContext({ account, chatId, threadId });\n const route = resolveRoute({\n config,\n channel: 'telegram',\n accountId,\n peerKind: isGroup ? 'group' : 'dm',\n peerId: isGroup ? chatId : senderId,\n threadId: threadId ? String(threadId) : null,\n });\n const routedAgentId = groupCtx.agentId ?? route.agentId;\n\n const defaultSessionKey = sessionKeyService.generateSessionKey({\n source: 'telegram',\n chatId,\n senderId,\n isGroup,\n threadId: threadId ? String(threadId) : undefined,\n accountId,\n agentId: routedAgentId,\n });\n\n const sessionKey = resolveTelegramFocusedSessionKey({\n chatId,\n threadId: threadId ? String(threadId) : undefined,\n defaultSessionKey,\n });\n\n const conversationId = buildTelegramConversationId(chatId, threadId);\n\n // Collect and process media\n const media = extractMediaItems(message);\n const bot = accountManager.getBot(accountId);\n const botToken = account.botToken;\n\n let attachments: ProcessedAttachment[] = [];\n let transcribedText = '';\n\n if (bot && botToken && media.length > 0) {\n const accountApiRoot = account.apiRoot?.replace(/\\/$/, '') || 'https://api.telegram.org';\n const mediaResult = await processAllMedia(\n media,\n bot,\n botToken,\n accountApiRoot,\n message,\n sttService,\n mediaUtils,\n config?.tools?.media?.audio,\n voiceProbeText || undefined,\n );\n attachments = mediaResult.attachments;\n transcribedText = mediaResult.transcribedText;\n }\n\n // Combine transcribed text with content. If the user caption is a slash command, put it first\n // so routing and logs match a normal `/cmd` message (STT prefix no longer hides the command).\n const captionIsCommand = cleanContent.trim().startsWith('/');\n let finalContent = transcribedText\n ? captionIsCommand && cleanContent\n ? cleanContent.trim() + (transcribedText ? `\\n\\n${transcribedText}` : '')\n : transcribedText + (cleanContent ? '\\n\\n' + cleanContent : '')\n : cleanContent;\n\n const stickerItem = media.find((m) => m.type === 'sticker');\n if (stickerItem && !finalContent.trim()) {\n finalContent = stickerItem.emoji?.trim()\n ? `[Sticker ${stickerItem.emoji}]`\n : '[Sticker]';\n }\n\n const isCommand = cleanContent.trim().startsWith('/');\n\n log.info({\n accountId,\n chatId,\n senderId,\n isGroup,\n sessionKey,\n contentLength: finalContent.length,\n attachmentCount: attachments.length,\n isCommand,\n }, 'Processing Telegram message');\n\n if (\n finalContent.trim().length > 0 &&\n !isCommand &&\n tryConsumeTelegramClarifyFreeText(sessionKey, finalContent.trim())\n ) {\n log.debug({ sessionKey }, 'Telegram: consumed message as clarify reply');\n return;\n }\n\n await bus.publishInbound({\n channel: 'telegram',\n sender_id: senderId,\n chat_id: chatId,\n content: finalContent,\n metadata: {\n accountId,\n sessionKey,\n senderUsername,\n messageId: String(message.message_id),\n isGroup,\n isCommand,\n threadId: threadId ? String(threadId) : undefined,\n conversationId,\n channelSystemPrompt: groupCtx.systemPrompt,\n channelAgentId: routedAgentId,\n media: media.length > 0 ? media : undefined,\n transcribedVoice: !!transcribedText || undefined,\n },\n attachments: attachments.length > 0 ? attachments : undefined,\n });\n };\n\n // Main enqueue function\n return (ctx: Context, accountId: string): Promise<void> => {\n const message = ctx.message;\n if (message) {\n const raw = message.text ?? message.caption ?? '';\n if (raw.trim() && isAbortSlashCommand(raw.trim())) {\n return processMessageInternal(ctx, accountId);\n }\n }\n\n const chatId = String(ctx.chat?.id);\n const chatKey = getChatKey(accountId, chatId);\n\n return new Promise((resolve, reject) => {\n const queue = messageQueues.get(chatKey) || [];\n queue.push({ ctx, accountId, resolve, reject });\n messageQueues.set(chatKey, queue);\n processNextMessage(chatKey);\n });\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../extensions/telegram/src/index.ts"],"sourcesContent":["/**\n * Bundled Telegram channel extension entry.\n */\n\nimport { defineChannelPluginEntry } from '@xopcai/xopc/extensions/sdk/channel-entry.js';\n\nimport { telegramPlugin } from './plugin.js';\n\nexport { telegramPlugin } from './plugin.js';\nexport type { TelegramAccount } from './plugin.js';\nexport { defineChannelPluginEntry } from '@xopcai/xopc/extensions/sdk/channel-entry.js';\n\nexport default defineChannelPluginEntry({\n id: 'telegram',\n name: 'Telegram',\n description: 'Telegram Bot API channel',\n plugin: telegramPlugin,\n});\n"],"mappings":";;;;;;AAYA,IAAA,cAAe,yBAAyB;CACtC,IAAI;CACJ,MAAM;CACN,aAAa;CACb,QAAQ;CACT,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inline-keyboards.js","names":[],"sources":["../../../../extensions/telegram/src/inline-keyboards.ts"],"sourcesContent":["/**\n * Telegram Inline Keyboards\n */\n\nimport { InlineKeyboard } from 'grammy';\n\nexport interface ModelInfo {\n id: string;\n name: string;\n provider: string;\n}\n\nexport interface ProviderInfo {\n id: string;\n name: string;\n}\n\nexport class TelegramInlineKeyboards {\n static modelSelector(models: ModelInfo[], currentModel?: string): InlineKeyboard {\n const keyboard = new InlineKeyboard();\n \n for (const model of models) {\n const isCurrent = model.id === currentModel;\n const label = isCurrent ? `✅ ${model.name}` : model.name;\n keyboard.text(label, `model:${model.id}`).row();\n }\n\n keyboard.text('❌ Cancel', 'cancel');\n return keyboard;\n }\n\n static providerSelector(providers: ProviderInfo[]): InlineKeyboard {\n const keyboard = new InlineKeyboard();\n \n for (const provider of providers) {\n keyboard.text(provider.name, `provider:${provider.id}`).row();\n }\n\n keyboard.text('❌ Cancel', 'cancel');\n return keyboard;\n }\n\n static cleanupConfirm(): InlineKeyboard {\n return new InlineKeyboard()\n .text('🗑️ Archive sessions older than 30 days', 'cleanup:confirm').row()\n .text('❌ Cancel', 'cancel');\n }\n\n static back(): InlineKeyboard {\n return new InlineKeyboard().text('⬅️ Back', 'providers').row().text('❌ Cancel', 'cancel');\n }\n\n static confirm(confirmLabel: string = '✅ Confirm', confirmData: string = 'confirm'): InlineKeyboard {\n return new InlineKeyboard()\n .text(confirmLabel, confirmData).row()\n .text('❌ Cancel', 'cancel');\n }\n}\n"],"mappings":";;;;;AAiBA,IAAa,0BAAb,MAAqC;CACnC,OAAO,cAAc,QAAqB,cAAuC;EAC/E,MAAM,WAAW,IAAI,gBAAgB;AAErC,OAAK,MAAM,SAAS,QAAQ;GAE1B,MAAM,QADY,MAAM,OAAO,eACL,KAAK,MAAM,SAAS,MAAM;AACpD,YAAS,KAAK,OAAO,SAAS,MAAM,KAAK,CAAC,KAAK;;AAGjD,WAAS,KAAK,YAAY,SAAS;AACnC,SAAO;;CAGT,OAAO,iBAAiB,WAA2C;EACjE,MAAM,WAAW,IAAI,gBAAgB;AAErC,OAAK,MAAM,YAAY,UACrB,UAAS,KAAK,SAAS,MAAM,YAAY,SAAS,KAAK,CAAC,KAAK;AAG/D,WAAS,KAAK,YAAY,SAAS;AACnC,SAAO;;CAGT,OAAO,iBAAiC;AACtC,SAAO,IAAI,gBAAgB,CACxB,KAAK,2CAA2C,kBAAkB,CAAC,KAAK,CACxE,KAAK,YAAY,SAAS;;CAG/B,OAAO,OAAuB;AAC5B,SAAO,IAAI,gBAAgB,CAAC,KAAK,WAAW,YAAY,CAAC,KAAK,CAAC,KAAK,YAAY,SAAS;;CAG3F,OAAO,QAAQ,eAAuB,aAAa,cAAsB,WAA2B;AAClG,SAAO,IAAI,gBAAgB,CACxB,KAAK,cAAc,YAAY,CAAC,KAAK,CACrC,KAAK,YAAY,SAAS"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"network-errors.js","names":[],"sources":["../../../../extensions/telegram/src/network-errors.ts"],"sourcesContent":["const RECOVERABLE_NETWORK_RE =\n /ETIMEDOUT|ENETUNREACH|EHOSTUNREACH|ECONNRESET|ECONNREFUSED|ENOTFOUND|EAI_AGAIN|socket hang up|fetch failed|network/i;\n\nexport function isRecoverableTelegramNetworkError(err: unknown): boolean {\n const text = extractErrorText(err);\n return RECOVERABLE_NETWORK_RE.test(text);\n}\n\nexport function isTelegramClientRejection(err: unknown): boolean {\n const text = extractErrorText(err);\n return /400:|403:|429:|Bad Request|Forbidden|Too Many Requests/i.test(text);\n}\n\nfunction extractErrorText(err: unknown): string {\n if (typeof err === 'string') return err;\n if (err instanceof Error) return err.message;\n if (err && typeof err === 'object' && 'description' in err) {\n const d = (err as { description?: unknown }).description;\n return typeof d === 'string' ? d : '';\n }\n return String(err);\n}\n"],"mappings":";AAAA,MAAM,yBACJ;AAEF,SAAgB,kCAAkC,KAAuB;CACvE,MAAM,OAAO,iBAAiB,IAAI;AAClC,QAAO,uBAAuB,KAAK,KAAK;;AAG1C,SAAgB,0BAA0B,KAAuB;CAC/D,MAAM,OAAO,iBAAiB,IAAI;AAClC,QAAO,0DAA0D,KAAK,KAAK;;AAG7E,SAAS,iBAAiB,KAAsB;AAC9C,KAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,KAAI,eAAe,MAAO,QAAO,IAAI;AACrC,KAAI,OAAO,OAAO,QAAQ,YAAY,iBAAiB,KAAK;EAC1D,MAAM,IAAK,IAAkC;AAC7C,SAAO,OAAO,MAAM,WAAW,IAAI;;AAErC,QAAO,OAAO,IAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"outbound-sender.js","names":[],"sources":["../../../../extensions/telegram/src/outbound-sender.ts"],"sourcesContent":["/**\n * Telegram Outbound Sender\n *\n * Handles all outbound message sending to Telegram:\n * - Text messages (with chunking)\n * - Data URL media (base64 encoded)\n * - Remote URL media\n * - Voice messages (TTS audio)\n * - Typing indicators\n *\n * TTS audio is passed as mediaUrl with audioAsVoice flag.\n * No TTS generation happens here - it's done at the dispatch layer.\n */\n\nimport type { Bot } from 'grammy';\nimport { InputFile } from 'grammy';\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { ChannelSendOptions, ChannelSendResult } from '@xopcai/xopc/channels/channel-domain.js';\nimport type { TelegramAccountManager } from './account-manager.js';\nimport { buildSendOptions, parseDataUrl, resolveMediaMethod } from './send-options.js';\nimport { splitTelegramCaption } from './caption.js';\nimport { renderTelegramHtmlText, markdownToTelegramChunks } from './format.js';\nimport { sentMessageCache } from './sent-cache.js';\nimport { createRetryRunner, isRecoverableNetworkError } from '@xopcai/xopc/infra/retry.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport { isTelegramHtmlParseError } from './errors.js';\n\nconst log = createLogger('TelegramOutboundSender');\n\n/** Maximum message chunk size */\nconst MESSAGE_CHUNK_SIZE = 3800;\n\nexport interface OutboundSenderDeps {\n accountManager: TelegramAccountManager;\n config: Config;\n}\n\n/**\n * Create outbound message sender\n *\n * Note: TTS is handled at the dispatch layer (ChannelManager),\n * not here. If a message has TTS audio, it will be passed as\n * mediaUrl with audioAsVoice=true.\n */\nexport function createOutboundSender(deps: OutboundSenderDeps) {\n const { accountManager } = deps;\n\n async function send(options: ChannelSendOptions): Promise<ChannelSendResult> {\n const {\n chatId,\n content,\n type = 'message',\n accountId = 'default',\n threadId,\n replyToMessageId,\n mediaUrl,\n mediaType,\n silent,\n audioAsVoice,\n } = options;\n\n log.debug({\n chatId,\n accountId,\n hasContent: !!content,\n hasMediaUrl: !!mediaUrl,\n audioAsVoice,\n mediaType,\n }, 'Sending outbound message');\n\n const bot = accountManager.getBot(accountId);\n if (!bot) {\n log.error({ accountId }, 'Bot not found');\n return { messageId: '', chatId, success: false, error: 'Bot not initialized' };\n }\n\n // Handle typing indicators\n if (type === 'typing_on') {\n try {\n await bot.api.sendChatAction(chatId, 'typing');\n } catch (err) {\n log.warn({ err }, 'Failed to send typing action');\n }\n return { messageId: '', chatId, success: true };\n }\n\n if (type === 'typing_off') {\n return { messageId: '', chatId, success: true };\n }\n\n // Skip empty messages without media\n if ((!content || content.trim() === '') && !mediaUrl) {\n log.debug({ chatId }, 'Skipping empty message');\n return { messageId: '', chatId, success: true };\n }\n\n try {\n let sentMessageId: number;\n\n // Handle voice messages (TTS audio with audioAsVoice flag)\n if (mediaUrl && audioAsVoice) {\n sentMessageId = await sendVoiceMessage(bot, chatId, mediaUrl, content, {\n threadId,\n replyToMessageId,\n silent,\n });\n }\n // Handle data URL media\n else if (mediaUrl && mediaUrl.startsWith('data:')) {\n sentMessageId = await sendDataUrlMedia(bot, chatId, mediaUrl, content, {\n threadId,\n replyToMessageId,\n silent,\n });\n }\n // Handle remote URL media\n else if (mediaUrl) {\n sentMessageId = await sendRemoteUrlMedia(bot, chatId, mediaUrl, mediaType, content, {\n threadId,\n replyToMessageId,\n silent,\n });\n }\n // Handle text only\n else {\n sentMessageId = await sendTextMessage(bot, chatId, content!, {\n threadId,\n replyToMessageId,\n silent,\n });\n }\n\n // Record sent message\n if (sentMessageId) {\n sentMessageCache.record(chatId, sentMessageId);\n }\n\n return { messageId: String(sentMessageId), chatId, success: true };\n } catch (err) {\n log.error({ chatId, err }, 'Failed to send message');\n return { messageId: '', chatId, success: false, error: err instanceof Error ? err.message : String(err) };\n }\n }\n\n async function sendVoiceMessage(\n bot: Bot,\n chatId: string,\n mediaUrl: string,\n content?: string,\n options?: { threadId?: string; replyToMessageId?: string; silent?: boolean }\n ): Promise<number> {\n const parsed = parseDataUrl(mediaUrl);\n if (!parsed) {\n throw new Error('Invalid voice message data URL format');\n }\n\n const { buffer } = parsed;\n const file = new InputFile(buffer, 'voice.ogg');\n\n // Use caption for the text content (if any)\n const caption = content?.trim();\n const htmlCaption = caption ? renderTelegramHtmlText(caption) : undefined;\n\n const sendOptions = buildSendOptions({\n threadId: options?.threadId,\n replyToMessageId: options?.replyToMessageId,\n silent: options?.silent,\n caption: htmlCaption,\n });\n\n const result = await bot.api.sendVoice(chatId, file, sendOptions);\n\n log.info({ chatId, messageId: result.message_id }, 'Voice message sent');\n\n return result.message_id;\n }\n\n async function sendDataUrlMedia(\n bot: Bot,\n chatId: string,\n dataUrl: string,\n content?: string,\n options?: { threadId?: string; replyToMessageId?: string; silent?: boolean }\n ): Promise<number> {\n const parsed = parseDataUrl(dataUrl);\n if (!parsed) {\n throw new Error('Invalid data URL format');\n }\n\n const { mimeType, buffer } = parsed;\n const file = new InputFile(buffer);\n\n const { caption, followUpText } = content ? splitTelegramCaption(content) : { caption: '', followUpText: undefined };\n const htmlCaption = caption ? renderTelegramHtmlText(caption) : undefined;\n\n const sendOptions = buildSendOptions({\n threadId: options?.threadId,\n replyToMessageId: options?.replyToMessageId,\n silent: options?.silent,\n caption: htmlCaption,\n });\n\n const method = resolveMediaMethod(mimeType);\n let result: { message_id: number };\n\n switch (method) {\n case 'sendPhoto':\n result = await bot.api.sendPhoto(chatId, file, sendOptions);\n break;\n case 'sendVideo':\n result = await bot.api.sendVideo(chatId, file, sendOptions);\n break;\n case 'sendAudio':\n result = await bot.api.sendAudio(chatId, file, sendOptions);\n break;\n default:\n result = await bot.api.sendDocument(chatId, file, sendOptions);\n }\n\n // Send follow-up text if needed\n if (followUpText) {\n const followHtml = renderTelegramHtmlText(followUpText);\n const followResult = await bot.api.sendMessage(chatId, followHtml, {\n parse_mode: 'HTML',\n reply_to_message_id: result.message_id,\n });\n sentMessageCache.record(chatId, followResult.message_id);\n }\n\n return result.message_id;\n }\n\n async function sendRemoteUrlMedia(\n bot: Bot,\n chatId: string,\n mediaUrl: string,\n mediaType?: string,\n content?: string,\n options?: { threadId?: string; replyToMessageId?: string; silent?: boolean }\n ): Promise<number> {\n const response = await fetch(mediaUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch media: ${response.status}`);\n }\n\n const buffer = await response.arrayBuffer();\n const file = new InputFile(Buffer.from(buffer));\n\n const { caption, followUpText } = content ? splitTelegramCaption(content) : { caption: '', followUpText: undefined };\n const htmlCaption = caption ? renderTelegramHtmlText(caption) : undefined;\n\n const sendOptions = buildSendOptions({\n threadId: options?.threadId,\n replyToMessageId: options?.replyToMessageId,\n silent: options?.silent,\n caption: htmlCaption,\n });\n\n let result: { message_id: number };\n\n switch (mediaType) {\n case 'photo':\n result = await bot.api.sendPhoto(chatId, file, sendOptions);\n break;\n case 'video':\n result = await bot.api.sendVideo(chatId, file, sendOptions);\n break;\n case 'audio':\n result = await bot.api.sendAudio(chatId, file, sendOptions);\n break;\n default:\n result = await bot.api.sendDocument(chatId, file, sendOptions);\n }\n\n if (followUpText) {\n const followHtml = renderTelegramHtmlText(followUpText);\n await bot.api.sendMessage(chatId, followHtml, {\n parse_mode: 'HTML',\n reply_to_message_id: result.message_id,\n });\n }\n\n return result.message_id;\n }\n\n async function sendTextMessage(\n bot: Bot,\n chatId: string,\n content: string,\n options?: { threadId?: string; replyToMessageId?: string; silent?: boolean }\n ): Promise<number> {\n const chunks = markdownToTelegramChunks(content, MESSAGE_CHUNK_SIZE);\n\n const retryRunner = createRetryRunner({\n attempts: 3,\n minDelayMs: 300,\n maxDelayMs: 5000,\n shouldRetry: (err) => isRecoverableNetworkError(err, 'send'),\n });\n\n // Send first chunk\n const sendFirstChunk = async (): Promise<number> => {\n const sendOptions = buildSendOptions({\n threadId: options?.threadId,\n replyToMessageId: options?.replyToMessageId,\n silent: options?.silent,\n });\n\n try {\n const result = await bot.api.sendMessage(chatId, chunks[0].html, {\n ...sendOptions,\n parse_mode: 'HTML',\n });\n return result.message_id;\n } catch (err) {\n // Fallback to plain text on HTML parse error\n if (isTelegramHtmlParseError(err)) {\n log.warn({ chatId, err }, 'HTML parse error, retrying with plain text');\n const plainResult = await bot.api.sendMessage(chatId, chunks[0].text, {\n reply_to_message_id: options?.replyToMessageId ? parseInt(options.replyToMessageId, 10) : undefined,\n });\n return plainResult.message_id;\n }\n throw err;\n }\n };\n\n const firstMessageId = await retryRunner(sendFirstChunk, 'sendMessage');\n\n // Send remaining chunks as replies\n for (let i = 1; i < chunks.length; i++) {\n await retryRunner(async () => {\n await bot.api.sendMessage(chatId, chunks[i].html, {\n parse_mode: 'HTML',\n reply_to_message_id: firstMessageId,\n });\n }, `sendMessage-reply-${i}`);\n }\n\n return firstMessageId;\n }\n\n return { send };\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pairing-config-resolver.js","names":[],"sources":["../../../../extensions/telegram/src/pairing-config-resolver.ts"],"sourcesContent":["import type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { DmPolicy } from '@xopcai/xopc/channels/channel-domain.js';\nimport {\n registerPairingChannelResolver,\n resolveStandardAllowFromPath,\n resolveStandardPairingPath,\n} from '@xopcai/xopc/channels/pairing/index.js';\nimport { resolveDmPolicy } from '@xopcai/xopc/channels/security.js';\n\nfunction telegramBlock(config: Config | undefined): Record<string, unknown> | null {\n const ch = config?.channels?.telegram;\n return ch && typeof ch === 'object' && !Array.isArray(ch) ? (ch as Record<string, unknown>) : null;\n}\n\nfunction account(block: Record<string, unknown> | null, accountId: string): Record<string, unknown> | null {\n const accounts = block?.accounts;\n if (!accounts || typeof accounts !== 'object' || Array.isArray(accounts)) return null;\n const acc = (accounts as Record<string, unknown>)[accountId];\n return acc && typeof acc === 'object' && !Array.isArray(acc) ? (acc as Record<string, unknown>) : null;\n}\n\nexport function registerTelegramPairingResolver(): void {\n registerPairingChannelResolver('telegram', {\n resolvePaths(accountId) {\n return {\n pairingPath: resolveStandardPairingPath('telegram', accountId),\n allowPath: resolveStandardAllowFromPath('telegram', accountId),\n };\n },\n resolveAllowFromConfig(config, _channel, accountId) {\n const allow = account(telegramBlock(config), accountId)?.allowFrom;\n return Array.isArray(allow) ? [...new Set(allow.map(String).filter(Boolean))] : [];\n },\n resolveChannelEnabled(config) {\n return telegramBlock(config)?.enabled === true;\n },\n resolveAccountEnabled(config, _channel, accountId) {\n const block = telegramBlock(config);\n if (block?.enabled !== true) return false;\n return account(block, accountId)?.enabled !== false;\n },\n resolveDmPolicy(config, _channel, accountId) {\n const block = telegramBlock(config);\n const accPolicy = account(block, accountId)?.dmPolicy as DmPolicy | undefined;\n if (accPolicy) return resolveDmPolicy(accPolicy, 'pairing');\n const defaults = block?.defaults;\n const defaultPolicy =\n defaults && typeof defaults === 'object' && !Array.isArray(defaults)\n ? (defaults as { dmPolicy?: DmPolicy }).dmPolicy\n : undefined;\n return resolveDmPolicy(defaultPolicy, 'pairing');\n },\n resolveAccountIds(config) {\n const accounts = telegramBlock(config)?.accounts;\n if (accounts && typeof accounts === 'object' && !Array.isArray(accounts)) {\n const keys = Object.keys(accounts as Record<string, unknown>).sort();\n if (keys.length > 0) return keys;\n }\n return ['default'];\n },\n });\n}\n\nregisterTelegramPairingResolver();\n"],"mappings":";;;;AASA,SAAS,cAAc,QAA4D;CACjF,MAAM,KAAK,QAAQ,UAAU;AAC7B,QAAO,MAAM,OAAO,OAAO,YAAY,CAAC,MAAM,QAAQ,GAAG,GAAI,KAAiC;;AAGhG,SAAS,QAAQ,OAAuC,WAAmD;CACzG,MAAM,WAAW,OAAO;AACxB,KAAI,CAAC,YAAY,OAAO,aAAa,YAAY,MAAM,QAAQ,SAAS,CAAE,QAAO;CACjF,MAAM,MAAO,SAAqC;AAClD,QAAO,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAI,MAAkC;;AAGpG,SAAgB,kCAAwC;AACtD,gCAA+B,YAAY;EACzC,aAAa,WAAW;AACtB,UAAO;IACL,aAAa,2BAA2B,YAAY,UAAU;IAC9D,WAAW,6BAA6B,YAAY,UAAU;IAC/D;;EAEH,uBAAuB,QAAQ,UAAU,WAAW;GAClD,MAAM,QAAQ,QAAQ,cAAc,OAAO,EAAE,UAAU,EAAE;AACzD,UAAO,MAAM,QAAQ,MAAM,GAAG,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,OAAO,CAAC,OAAO,QAAQ,CAAC,CAAC,GAAG,EAAE;;EAEpF,sBAAsB,QAAQ;AAC5B,UAAO,cAAc,OAAO,EAAE,YAAY;;EAE5C,sBAAsB,QAAQ,UAAU,WAAW;GACjD,MAAM,QAAQ,cAAc,OAAO;AACnC,OAAI,OAAO,YAAY,KAAM,QAAO;AACpC,UAAO,QAAQ,OAAO,UAAU,EAAE,YAAY;;EAEhD,gBAAgB,QAAQ,UAAU,WAAW;GAC3C,MAAM,QAAQ,cAAc,OAAO;GACnC,MAAM,YAAY,QAAQ,OAAO,UAAU,EAAE;AAC7C,OAAI,UAAW,QAAO,gBAAgB,WAAW,UAAU;GAC3D,MAAM,WAAW,OAAO;AAKxB,UAAO,gBAHL,YAAY,OAAO,aAAa,YAAY,CAAC,MAAM,QAAQ,SAAS,GAC/D,SAAqC,WACtC,KAAA,GACgC,UAAU;;EAElD,kBAAkB,QAAQ;GACxB,MAAM,WAAW,cAAc,OAAO,EAAE;AACxC,OAAI,YAAY,OAAO,aAAa,YAAY,CAAC,MAAM,QAAQ,SAAS,EAAE;IACxE,MAAM,OAAO,OAAO,KAAK,SAAoC,CAAC,MAAM;AACpE,QAAI,KAAK,SAAS,EAAG,QAAO;;AAE9B,UAAO,CAAC,UAAU;;EAErB,CAAC;;AAGJ,iCAAiC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-defaults.js","names":[],"sources":["../../../../extensions/telegram/src/plugin-defaults.ts"],"sourcesContent":["/**\n * Default queue and outbound limits for the Telegram channel plugin.\n * Keep in sync with ChannelPlugin.defaults on TelegramChannelPlugin.\n */\n\nexport const TELEGRAM_CHANNEL_DEFAULTS = {\n queue: {\n /** Inbound message debounce window (ms) */\n debounceMs: 300,\n },\n outbound: {\n /** Telegram message text chunk size (Bot API limit is 4096; we use 4000 for safety) */\n textChunkLimit: 4000,\n },\n} as const;\n"],"mappings":";;;;;AAKA,MAAa,4BAA4B;CACvC,OAAO;;AAEL,YAAY,KACb;CACD,UAAU;;AAER,gBAAgB,KACjB;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","names":[],"sources":["../../../../extensions/telegram/src/plugin.ts"],"sourcesContent":["/**\n * Telegram Channel Plugin - Implementation based on ChannelPlugin interface\n *\n * This plugin integrates Telegram with the ChannelPlugin architecture.\n * It reuses components from this package's src tree where possible.\n */\n\nimport { isDeepStrictEqual } from 'node:util';\n\nimport { Bot, type Context } from 'grammy';\n\nimport './pairing-config-resolver.js';\n\nimport type { Config } from '@xopcai/xopc/config/index.js';\nimport type {\n ChannelPlugin,\n ChannelPluginDefaults,\n ChannelPluginInitOptions,\n ChannelPluginReloadMeta,\n ChannelPluginSessionModelHooks,\n ChannelPluginStartOptions,\n ChannelOutboundAdapter,\n ChannelSecurityContext,\n ChannelGatewayAdapter,\n ChannelStreamingAdapter,\n ChannelCommandAdapter,\n} from '@xopcai/xopc/channels/plugin-types.js';\nimport { generateSessionKey } from '@xopcai/xopc/chat-commands/session-key.js';\nimport { submitClarifyChoiceFromChannel } from '@xopcai/xopc/gateway/clarify-runtime.js';\n\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport { issuePairingChallenge, resolveStandardPairingPath } from '@xopcai/xopc/channels/pairing/index.js';\nimport { createStandardPairingAdapter } from '@xopcai/xopc/channels/pairing/pairing-store-adapter.js';\nimport { createTimeoutAbortSignal } from './timeout-abort.js';\nimport { createInboundDebouncer } from '@xopcai/xopc/infra/debounce.js';\nimport { getMimeType } from '@xopcai/xopc/channels/media.js';\nimport { isSTTAvailable } from '@xopcai/xopc/voice/stt/availability.js';\nimport type { STTConfig } from '@xopcai/xopc/voice/stt/types.js';\n\nimport { TelegramAccountManager } from './account-manager.js';\nimport { createOutboundSender } from './outbound-sender.js';\n\nimport { createTelegramCommandHandler } from './command-handler.js';\nimport { createInboundProcessor } from './inbound-processor.js';\nimport { TELEGRAM_CHANNEL_DEFAULTS } from './plugin-defaults.js';\nimport {\n createTelegramPluginAdapters,\n createTelegramSetupWizard,\n createTelegramOutboundSendMethods,\n telegramTextChunker,\n TELEGRAM_OUTBOUND_DEFAULTS,\n createTelegramInboundAccessControl,\n telegramDebouncerKeyPolicy,\n type TelegramMessageEvent,\n} from './adapters/index.js';\nimport {\n createTelegramGatewayAdapter,\n createTelegramStreamingAdapter,\n createTelegramCommandAdapter,\n} from './channel.js';\nimport type { TelegramResolvedAccount } from './adapters/index.js';\nimport type { ChannelCronDeliveryAdapter } from '@xopcai/xopc/channels/plugins/types.adapters.js';\nimport { normalizeTelegramDeliveryChatId } from './delivery-chat-id.js';\nimport { telegramOnboardAdapter } from './adapters/onboard-cli.js';\nimport { telegramGatewaySetupActions } from './adapters/gateway-setup.js';\nimport { TelegramConfigSchema } from './config-schema.js';\nimport { normalizeTelegramApiRoot } from './api-root.js';\nimport { resolveTelegramBotToken } from './token-resolver.js';\nimport { formatTelegramStartupError, isTelegramUnauthorizedTokenError } from './startup-errors.js';\nimport { startTelegramPollingSession } from './polling-session.js';\nimport { createProxyFetch } from './proxy-fetch.js';\nimport { runTelegramDoctorChecks } from './doctor.js';\nimport { telegramReplyTracker } from './reply-params.js';\nimport { createTelegramInboundCoalescer } from './inbound-coalescer.js';\nimport { sendTelegramAckReaction, handleTelegramMessageReaction } from './reactions.js';\nimport { handleTelegramChannelAction, bindTelegramMessageActionAccountManager } from './actions/message-actions.js';\nimport { registerChannelExecApprovalHandler } from '@xopcai/xopc/channels/exec-approval-runtime.js';\nimport { createTelegramExecApprovalHandler } from './exec-approval-handler.js';\nimport { handleTelegramFocusCommand } from './focus-handler.js';\nimport { resolveTelegramApproval } from './approval-store.js';\nimport { isTelegramExecApprovalApprover } from './exec-approvals.js';\n\n/** Bound initial `getMe` so a bad `apiRoot` or unreachable API cannot block gateway startup for minutes. */\nconst TELEGRAM_GETME_TIMEOUT_MS = 20_000;\n/** grammY per-request ceiling; must exceed long-poll `getUpdates` (~30s) but avoid multi-minute hangs on bad hosts. */\nconst TELEGRAM_CLIENT_TIMEOUT_SECONDS = 75;\n\nconst log = createLogger('TelegramPlugin');\n\nfunction contextWithMessage(ctx: Context, message: import('@grammyjs/types').Message): Context {\n if (ctx.message === message) return ctx;\n\n const clone = Object.create(Object.getPrototypeOf(ctx)) as Context;\n Object.defineProperties(clone, Object.getOwnPropertyDescriptors(ctx));\n Object.defineProperty(clone, 'message', {\n configurable: true,\n enumerable: true,\n value: message,\n writable: true,\n });\n return clone;\n}\n\nexport type { TelegramResolvedAccount as TelegramAccount } from './channel.js';\n\nexport class TelegramChannelPlugin implements ChannelPlugin<TelegramResolvedAccount> {\n readonly id = 'telegram' as const;\n\n readonly reload: ChannelPluginReloadMeta = {\n configPrefixes: ['channels.telegram'],\n };\n\n readonly meta = {\n id: 'telegram',\n label: 'Telegram',\n selectionLabel: 'Telegram Bot',\n docsPath: '/channels/telegram',\n blurb: 'Telegram Bot API channel',\n order: 0,\n deferConnectUntilAfterListen: true,\n } as const;\n\n readonly capabilities = {\n chatTypes: ['direct', 'group', 'channel', 'thread'] as Array<'direct' | 'group' | 'channel' | 'thread'>,\n reactions: true,\n threads: true,\n media: true,\n polls: false,\n nativeCommands: true,\n blockStreaming: true,\n } as const;\n\n readonly defaults: ChannelPluginDefaults = {\n queue: { debounceMs: TELEGRAM_CHANNEL_DEFAULTS.queue.debounceMs },\n outbound: { textChunkLimit: TELEGRAM_CHANNEL_DEFAULTS.outbound.textChunkLimit },\n };\n\n readonly setupWizard = createTelegramSetupWizard();\n\n readonly configSchema = {\n schema: {},\n validate: (raw: unknown) => {\n const r = TelegramConfigSchema.safeParse(raw);\n return r.success ? { ok: true as const } : { ok: false as const, errors: [r.error.message] };\n },\n };\n\n readonly cronDelivery: ChannelCronDeliveryAdapter = {\n async normalizeDeliveryTarget(to) {\n return { chatId: normalizeTelegramDeliveryChatId(to) };\n },\n };\n\n readonly onboard = telegramOnboardAdapter;\n\n readonly runtimeActions = telegramGatewaySetupActions;\n\n readonly doctor = {\n check: (params: { cfg: Config }) => runTelegramDoctorChecks(params),\n };\n\n readonly pairing = createStandardPairingAdapter('telegram');\n\n private bus!: NonNullable<ChannelPluginInitOptions['bus']>;\n private cfg!: NonNullable<ChannelPluginInitOptions['config']>;\n private debouncer!: ReturnType<typeof createInboundDebouncer<TelegramMessageEvent>>;\n\n private accountManager!: TelegramAccountManager;\n private outboundSender!: ReturnType<typeof createOutboundSender>;\n private commandHandler!: ReturnType<typeof createTelegramCommandHandler>;\n private inboundProcessor!: ReturnType<typeof createInboundProcessor>;\n private sessionModelHooks?: ChannelPluginSessionModelHooks;\n /** Unregister fn for the workflow-progress capability registered against the global broker. */\n private workflowProgressUnregister: (() => void) | null = null;\n private inboundCoalescer = createTelegramInboundCoalescer();\n private execApprovalUnregister: (() => void) | null = null;\n\n readonly actions = {\n handleAction: handleTelegramChannelAction,\n };\n\n config!: import('@xopcai/xopc/channels/plugin-types.js').ChannelConfigAdapter<TelegramResolvedAccount>;\n security!: import('@xopcai/xopc/channels/plugin-types.js').ChannelSecurityAdapter<TelegramResolvedAccount>;\n status!: import('@xopcai/xopc/channels/plugin-types.js').ChannelStatusAdapter<TelegramResolvedAccount>;\n\n outbound!: ChannelOutboundAdapter;\n\n gateway!: ChannelGatewayAdapter<TelegramResolvedAccount>;\n\n streaming!: ChannelStreamingAdapter;\n\n commands!: ChannelCommandAdapter;\n\n async init(options: ChannelPluginInitOptions): Promise<void> {\n this.bus = options.bus;\n this.cfg = options.config;\n this.sessionModelHooks = options.sessionModel;\n\n this.accountManager = new TelegramAccountManager();\n this.loadAccounts();\n this.bindOutboundComponents();\n bindTelegramMessageActionAccountManager(this.accountManager);\n this.execApprovalUnregister?.();\n this.execApprovalUnregister = registerChannelExecApprovalHandler(\n 'telegram',\n createTelegramExecApprovalHandler({\n accountManager: this.accountManager,\n getConfig: () => this.cfg,\n }),\n );\n\n await this.registerWorkflowProgressCapability();\n\n const debounceMs =\n this.defaults.queue?.debounceMs ?? TELEGRAM_CHANNEL_DEFAULTS.queue.debounceMs;\n const keyPolicy = telegramDebouncerKeyPolicy();\n this.debouncer = createInboundDebouncer<TelegramMessageEvent>({\n debounceMs,\n ...keyPolicy,\n onFlush: async (items) => {\n await this.processMessages(items);\n },\n onError: (err, items) => {\n log.error({ err, count: items.length }, 'Debounced message processing failed');\n },\n });\n\n log.debug('Telegram plugin initialized');\n }\n\n private async registerWorkflowProgressCapability(): Promise<void> {\n // Lazy-load workflow progress so channel runtime startup does not pull the\n // whole workflow/agent/provider graph into Electron's dynamic extension path.\n const [{ getWorkflowProgressBroker }, { createTelegramWorkflowProgressCapability }] = await Promise.all([\n import('@xopcai/xopc/agent/workflow/progress-broker.js'),\n import('./workflow-progress.js'),\n ]);\n this.workflowProgressUnregister = getWorkflowProgressBroker().registerChannel(\n createTelegramWorkflowProgressCapability(this.accountManager),\n );\n }\n\n private bindOutboundComponents(): void {\n this.outboundSender = createOutboundSender({\n accountManager: this.accountManager,\n config: this.cfg,\n });\n const sm = this.sessionModelHooks;\n this.commandHandler = createTelegramCommandHandler({\n bus: this.bus,\n config: this.cfg,\n accountManager: this.accountManager,\n getSessionModel: (sessionKey) => sm?.getModelForSession(sessionKey),\n setSessionModel: (sessionKey, modelId) => {\n if (!sm) return;\n void sm.switchModelForSession(sessionKey, modelId);\n },\n });\n const adapters = createTelegramPluginAdapters({\n accountManager: this.accountManager,\n });\n this.config = adapters.config;\n this.security = adapters.security;\n this.status = adapters.status;\n\n const accessControl = createTelegramInboundAccessControl();\n\n this.inboundProcessor = createInboundProcessor({\n bus: this.bus,\n config: this.cfg,\n accountManager: this.accountManager,\n accessControl,\n sessionKeyService: {\n generateSessionKey: (opts) =>\n generateSessionKey({\n source: 'telegram',\n chatId: opts.chatId,\n senderId: opts.senderId,\n isGroup: opts.isGroup,\n threadId: opts.threadId,\n accountId: opts.accountId,\n }),\n },\n sttService: {\n transcribe: async (buffer, config, options) => {\n // Lazy-load STT providers only when voice transcription is actually used.\n const { transcribe } = await import('@xopcai/xopc/voice/stt/transcribe-core.js');\n const result = await transcribe(buffer, config as STTConfig, options);\n return { text: result.text };\n },\n isSTTAvailable: (config) => isSTTAvailable(config as STTConfig | undefined),\n },\n mediaUtils: { getMimeType },\n });\n\n const sends = createTelegramOutboundSendMethods(\n (opts) => this.outboundSender.send(opts),\n this.accountManager,\n );\n this.outbound = {\n deliveryMode: 'direct',\n chunker: telegramTextChunker,\n chunkerMode: 'text',\n textChunkLimit: TELEGRAM_OUTBOUND_DEFAULTS.textChunkLimit,\n ...sends,\n };\n\n this.gateway = createTelegramGatewayAdapter({\n startAccount: (account) => this.startAccount(account),\n stopAccount: (accountId) => this.accountManager.stopRunner(accountId),\n });\n this.streaming = createTelegramStreamingAdapter({ accountManager: this.accountManager });\n this.commands = createTelegramCommandAdapter();\n }\n\n async onConfigUpdated(cfg: Config): Promise<void> {\n const prevTg = this.cfg.channels?.telegram as unknown;\n const nextTg = cfg.channels?.telegram as { enabled?: boolean } | undefined;\n // Match Weixin: only `enabled === true` keeps inbound (polling). Stops immediately on disable / missing section.\n const channelOff = !nextTg || nextTg.enabled !== true;\n if (channelOff) {\n this.cfg = cfg;\n await this.stop();\n this.accountManager.reset();\n this.bindOutboundComponents();\n return;\n }\n\n if (isDeepStrictEqual(prevTg, nextTg)) {\n this.cfg = cfg;\n this.bindOutboundComponents();\n // Config unchanged but runners may be stopped (e.g. disable → enable with identical JSON shape after normalize).\n if (!this.channelIsRunning(cfg)) {\n await this.reapplyFromConfig(cfg);\n }\n return;\n }\n await this.reapplyFromConfig(cfg);\n }\n\n private async reapplyFromConfig(cfg: Config): Promise<void> {\n this.cfg = cfg;\n await this.stop();\n this.accountManager.reset();\n const telegramCfg = cfg.channels?.telegram as Record<string, unknown> | undefined;\n const channelOn = telegramCfg != null && telegramCfg.enabled === true;\n if (!channelOn) {\n this.bindOutboundComponents();\n return;\n }\n this.loadAccounts();\n this.bindOutboundComponents();\n await this.start();\n }\n\n private loadAccounts(): void {\n const telegramCfg = this.cfg.channels?.telegram as Record<string, unknown> | undefined;\n if (!telegramCfg) return;\n if (telegramCfg.enabled !== true) {\n return;\n }\n\n const accounts = telegramCfg.accounts as Record<string, Record<string, unknown>> | undefined;\n if (!accounts || Object.keys(accounts).length === 0) return;\n\n const defaults =\n telegramCfg.defaults && typeof telegramCfg.defaults === 'object' && !Array.isArray(telegramCfg.defaults)\n ? telegramCfg.defaults as Record<string, unknown>\n : {};\n const defaultApiRoot =\n typeof defaults.apiRoot === 'string'\n ? normalizeTelegramApiRoot(defaults.apiRoot)\n : undefined;\n const defaultProxy =\n typeof defaults.proxy === 'string' && defaults.proxy.trim()\n ? defaults.proxy.trim()\n : undefined;\n\n const tokenOwners = new Map<string, string[]>();\n\n for (const [id, account] of Object.entries(accounts)) {\n const { token, source } = resolveTelegramBotToken({\n botToken: typeof account.botToken === 'string' ? account.botToken : undefined,\n tokenFile: typeof account.tokenFile === 'string' ? account.tokenFile : undefined,\n });\n if (token) {\n const owners = tokenOwners.get(token) ?? [];\n owners.push(id);\n tokenOwners.set(token, owners);\n }\n\n const accApiRoot =\n typeof account.apiRoot === 'string'\n ? normalizeTelegramApiRoot(account.apiRoot)\n : undefined;\n const accProxy =\n typeof account.proxy === 'string' && account.proxy.trim() ? account.proxy.trim() : undefined;\n\n this.accountManager.registerAccount({\n ...defaults,\n ...account,\n accountId: id,\n botToken: token,\n tokenFile: typeof account.tokenFile === 'string' ? account.tokenFile : undefined,\n tokenSource: source,\n ...(accApiRoot || defaultApiRoot ? { apiRoot: accApiRoot || defaultApiRoot } : {}),\n ...(accProxy || defaultProxy ? { proxy: accProxy || defaultProxy } : {}),\n } as import('./config-types.js').TelegramAccountConfig);\n }\n\n for (const [token, owners] of tokenOwners) {\n if (owners.length > 1) {\n log.error(\n { accountIds: owners, tokenPreview: `${token.slice(0, 8)}…` },\n `Duplicate Telegram bot token across accounts: ${owners.join(', ')}`,\n );\n }\n }\n }\n\n channelIsRunning(cfg: Config): boolean {\n return this.accountManager.getAllAccounts().some(\n (a) => a.enabled !== false && !!a.botToken && this.accountManager.isRunning(a.accountId),\n );\n }\n\n async start(options?: ChannelPluginStartOptions): Promise<void> {\n const section = this.cfg.channels?.telegram as { enabled?: boolean } | undefined;\n if (!section || section.enabled !== true) {\n return;\n }\n\n const accountIds = options?.accountId\n ? [options.accountId]\n : this.config.listAccountIds(this.cfg);\n\n for (const accountId of accountIds) {\n const account = this.config.resolveAccount(this.cfg, accountId);\n if (!account.enabled || !account.botToken) continue;\n await this.startAccount(account);\n }\n }\n\n async stop(accountId?: string): Promise<void> {\n if (!this.config) return;\n const ids = accountId ? [accountId] : this.config.listAccountIds(this.cfg);\n for (const id of ids) {\n await this.accountManager.stopRunner(id);\n log.info({ accountId: id }, 'Telegram account stopped');\n }\n // Only unregister the broker capability on a full stop (no specific\n // account). A per-account stop still leaves other accounts capable of\n // sending progress through the same registered cap.\n if (!accountId) {\n this.workflowProgressUnregister?.();\n this.workflowProgressUnregister = null;\n this.execApprovalUnregister?.();\n this.execApprovalUnregister = null;\n }\n }\n\n private async startAccount(account: TelegramResolvedAccount): Promise<void> {\n if (this.accountManager.isRunning(account.accountId)) return;\n\n const resolved = resolveTelegramBotToken({\n botToken: account.botToken,\n tokenFile: account.tokenFile,\n });\n if (!resolved.token) return;\n\n const duplicateAccounts = this.accountManager\n .getAllAccounts()\n .filter((a) => {\n const t = resolveTelegramBotToken({\n botToken: a.botToken,\n tokenFile: a.tokenFile,\n }).token;\n return t === resolved.token && a.accountId !== account.accountId;\n })\n .map((a) => a.accountId);\n if (duplicateAccounts.length > 0) {\n const em = `Duplicate bot token shared with account(s): ${duplicateAccounts.join(', ')}`;\n log.error({ accountId: account.accountId, duplicateAccounts }, em);\n this.accountManager.updateStatus({\n accountId: account.accountId,\n running: false,\n mode: 'stopped',\n lastError: em,\n });\n return;\n }\n\n this.accountManager.markStarting(account.accountId);\n\n try {\n const client: {\n timeoutSeconds: number;\n apiRoot?: string;\n fetch?: typeof fetch;\n } = {\n timeoutSeconds: TELEGRAM_CLIENT_TIMEOUT_SECONDS,\n ...(account.apiRoot ? { apiRoot: account.apiRoot } : {}),\n ...(account.proxy ? { fetch: createProxyFetch(account.proxy) } : {}),\n };\n const bot = new Bot(resolved.token, { client });\n const getMeSignal = createTimeoutAbortSignal(TELEGRAM_GETME_TIMEOUT_MS);\n let me;\n try {\n me = await bot.api.getMe(getMeSignal.signal);\n } finally {\n getMeSignal.dispose();\n }\n\n this.accountManager.registerBot(account.accountId, bot);\n this.accountManager.setBotUsername(account.accountId, me.username);\n this.setupMessageHandler(account.accountId, bot);\n\n const session = startTelegramPollingSession({\n accountId: account.accountId,\n botToken: resolved.token,\n bot,\n stallThresholdMs: account.pollingStallThresholdMs,\n onExit: () => {\n void this.accountManager.stopRunner(account.accountId);\n },\n });\n this.accountManager.registerPollingSession(account.accountId, session);\n this.accountManager.updateStatus({\n accountId: account.accountId,\n running: true,\n mode: 'polling',\n });\n\n log.info({ accountId: account.accountId, username: me.username }, 'Telegram account started');\n } catch (err) {\n const em = formatTelegramStartupError(err);\n const level = isTelegramUnauthorizedTokenError(err) ? 'error' : 'warn';\n log[level](\n {\n accountId: account.accountId,\n apiRootConfigured: !!account.apiRoot,\n unauthorized: isTelegramUnauthorizedTokenError(err),\n errorMessage: em,\n },\n `Telegram account not started: ${em}`,\n );\n this.accountManager.updateStatus({\n accountId: account.accountId,\n running: false,\n mode: 'stopped',\n lastError: em.slice(0, 400),\n });\n } finally {\n this.accountManager.markStartComplete(account.accountId);\n }\n }\n\n private attachRunnerExitHandler(_accountId: string, _runner: unknown): void {\n // Polling exit is handled by startTelegramPollingSession.onExit.\n }\n\n private setupMessageHandler(accountId: string, bot: Bot): void {\n const account = this.config.resolveAccount(this.cfg, accountId);\n\n const handleInboundMessage = async (ctx: Context) => {\n const text = ctx.message?.text ?? ctx.message?.caption ?? ctx.channelPost?.text ?? ctx.channelPost?.caption ?? '';\n const command = text.trim().split(' ')[0].split('@')[0].toLowerCase();\n\n if (command === '/models') {\n await this.commandHandler.handleModels(ctx);\n return;\n }\n if (command === '/start') {\n await this.commandHandler.handleStart(ctx);\n return;\n }\n if (command === '/cleanup') {\n await this.commandHandler.handleCleanup(ctx);\n return;\n }\n if (command === '/focus') {\n await handleTelegramFocusCommand({ ctx, accountId, config: this.cfg });\n return;\n }\n\n const message = ctx.message ?? ctx.channelPost;\n if (!message) return;\n\n await this.inboundCoalescer.enqueue({\n ctx,\n accountId,\n message,\n onReady: async (batch) => {\n for (const msg of batch.messages) {\n const batchCtx = batch.ctx;\n await this.debouncer.enqueue({\n ctx: contextWithMessage(batchCtx, msg),\n accountId: batch.accountId,\n message: msg,\n });\n }\n },\n });\n };\n\n bot.on('message', async (ctx) => {\n try {\n await handleInboundMessage(ctx);\n } catch (err) {\n log.error({ accountId, err }, 'Message handler error');\n }\n });\n\n bot.on('channel_post', async (ctx) => {\n try {\n await handleInboundMessage(ctx);\n } catch (err) {\n log.error({ accountId, err }, 'Channel post handler error');\n }\n });\n\n bot.on('message_reaction', async (ctx) => {\n try {\n await handleTelegramMessageReaction({\n ctx,\n accountId,\n bus: this.bus,\n mode: account.reactionNotifications as 'off' | 'own' | 'all' | undefined,\n });\n } catch (err) {\n log.error({ accountId, err }, 'Message reaction handler error');\n }\n });\n\n bot.on('callback_query:data', async (ctx) => {\n try {\n await this.handleCallbackQuery(ctx, accountId);\n } catch (err) {\n log.error({ accountId, err }, 'Callback query handler error');\n await ctx.answerCallbackQuery('An error occurred').catch(() => {});\n }\n });\n }\n\n private async handleCallbackQuery(ctx: Context, _accountId: string): Promise<void> {\n const data = ctx.callbackQuery?.data;\n if (!data) return;\n\n if (data.startsWith('provider:')) {\n const providerId = data.substring('provider:'.length);\n await this.commandHandler.handleProviderSelect(ctx, providerId);\n return;\n }\n\n if (data.startsWith('model:')) {\n const modelId = data.substring('model:'.length);\n await this.commandHandler.handleModelSelect(ctx, modelId);\n return;\n }\n\n if (data === 'cancel') {\n await this.commandHandler.handleCancel(ctx);\n return;\n }\n\n if (data === 'providers') {\n await this.commandHandler.handleShowProviders(ctx);\n return;\n }\n\n if (data === 'cleanup:confirm') {\n await this.commandHandler.handleCleanupConfirm(ctx);\n return;\n }\n\n if (data.startsWith('clarify:')) {\n const rest = data.slice('clarify:'.length);\n const lastColon = rest.lastIndexOf(':');\n if (lastColon > 0) {\n const requestId = rest.slice(0, lastColon);\n const idx = Number.parseInt(rest.slice(lastColon + 1), 10);\n if (requestId && Number.isFinite(idx) && submitClarifyChoiceFromChannel(requestId, idx)) {\n await ctx.answerCallbackQuery();\n return;\n }\n }\n await ctx.answerCallbackQuery('No pending question');\n return;\n }\n\n if (data.startsWith('approval:approve:') || data.startsWith('approval:deny:')) {\n const approved = data.startsWith('approval:approve:');\n const approvalId = data.slice(approved ? 'approval:approve:'.length : 'approval:deny:'.length);\n const senderId = String(ctx.from?.id ?? '');\n if (\n !isTelegramExecApprovalApprover({\n cfg: this.cfg,\n accountId: _accountId,\n senderId,\n })\n ) {\n await ctx.answerCallbackQuery('Not authorized');\n return;\n }\n if (resolveTelegramApproval(approvalId, approved)) {\n await ctx.answerCallbackQuery(approved ? 'Approved' : 'Denied');\n } else {\n await ctx.answerCallbackQuery('Approval expired or already resolved');\n }\n return;\n }\n\n await ctx.answerCallbackQuery('Unknown action');\n }\n\n private async processMessages(items: TelegramMessageEvent[]): Promise<void> {\n if (items.length === 0) return;\n\n const tgSection = this.cfg.channels?.telegram as { enabled?: boolean } | undefined;\n if (!tgSection || tgSection.enabled !== true) {\n return;\n }\n\n const last = items[items.length - 1];\n const ctx = last.ctx;\n const accountId = last.accountId;\n if (!this.accountManager.getAccount(accountId)) {\n log.warn({ accountId }, 'Unknown account');\n return;\n }\n\n const account = this.config.resolveAccount(this.cfg, accountId);\n\n const isGroup = ctx.chat?.type === 'group' || ctx.chat?.type === 'supergroup';\n const senderId = ctx.from?.id?.toString() ?? '';\n const senderUsername = ctx.from?.username;\n const chatId = ctx.chat?.id?.toString() ?? '';\n telegramReplyTracker.reset(accountId, chatId);\n\n const securityCtx: ChannelSecurityContext = {\n accountId,\n chatId,\n senderId,\n senderName: senderUsername,\n isGroup,\n };\n\n const accessResult = this.security.checkAccess?.(securityCtx, account, this.cfg);\n\n if (!accessResult?.allowed) {\n if (!isGroup && accessResult?.reason === 'pairing-required') {\n const cid = ctx.chat?.id;\n const bot = cid != null ? this.accountManager.getBot(accountId) : undefined;\n if (bot && cid != null && senderId) {\n void issuePairingChallenge({\n channel: 'telegram',\n pairingFilePath: resolveStandardPairingPath('telegram', accountId),\n accountId,\n senderId,\n senderIdLine: `Your Telegram user id: ${senderId}`,\n sendPairingReply: async (text) => {\n await bot.api.sendMessage(cid, text);\n },\n onCreated: ({ code }) => {\n log.info({ accountId, senderId, code }, 'Telegram DM pairing code issued');\n },\n onReplyError: (err) => {\n log.warn({ err, accountId, chatId: String(cid) }, 'Telegram pairing reply failed');\n },\n });\n }\n return;\n }\n log.warn(\n {\n accountId,\n chatId,\n senderId,\n isGroup,\n reason: accessResult?.reason,\n dmPolicy: account.dmPolicy,\n groupPolicy: account.groupPolicy,\n },\n 'Telegram: message dropped by channel security (check dmPolicy/groupPolicy and allowFrom)',\n );\n return;\n }\n\n const bot = this.accountManager.getBot(accountId);\n const messageId = ctx.message?.message_id;\n const reactionLevel = (account as { reactionLevel?: string }).reactionLevel ?? 'ack';\n const ackEmoji = (account as { ackReaction?: string }).ackReaction ?? '👀';\n if (\n bot &&\n messageId &&\n reactionLevel !== 'off' &&\n ctx.chat?.id != null &&\n !ctx.channelPost\n ) {\n void sendTelegramAckReaction({\n bot,\n chatId: ctx.chat.id,\n messageId,\n emoji: ackEmoji,\n });\n }\n\n await this.inboundProcessor(ctx, accountId);\n }\n}\n\nexport const telegramPlugin = new TelegramChannelPlugin();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA8B4D;oBAmCF;;AAkB1D,MAAM,4BAA4B;;AAElC,MAAM,kCAAkC;AAExC,MAAM,MAAM,aAAa,iBAAiB;AAE1C,SAAS,mBAAmB,KAAc,SAAqD;AAC7F,KAAI,IAAI,YAAY,QAAS,QAAO;CAEpC,MAAM,QAAQ,OAAO,OAAO,OAAO,eAAe,IAAI,CAAC;AACvD,QAAO,iBAAiB,OAAO,OAAO,0BAA0B,IAAI,CAAC;AACrE,QAAO,eAAe,OAAO,WAAW;EACtC,cAAc;EACd,YAAY;EACZ,OAAO;EACP,UAAU;EACX,CAAC;AACF,QAAO;;AAKT,IAAa,wBAAb,MAAqF;CACnF,KAAc;CAEd,SAA2C,EACzC,gBAAgB,CAAC,oBAAoB,EACtC;CAED,OAAgB;EACd,IAAI;EACJ,OAAO;EACP,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EACP,8BAA8B;EAC/B;CAED,eAAwB;EACtB,WAAW;GAAC;GAAU;GAAS;GAAW;GAAS;EACnD,WAAW;EACX,SAAS;EACT,OAAO;EACP,OAAO;EACP,gBAAgB;EAChB,gBAAgB;EACjB;CAED,WAA2C;EACzC,OAAO,EAAE,YAAY,0BAA0B,MAAM,YAAY;EACjE,UAAU,EAAE,gBAAgB,0BAA0B,SAAS,gBAAgB;EAChF;CAED,cAAuB,2BAA2B;CAElD,eAAwB;EACtB,QAAQ,EAAE;EACV,WAAW,QAAiB;GAC1B,MAAM,IAAI,qBAAqB,UAAU,IAAI;AAC7C,UAAO,EAAE,UAAU,EAAE,IAAI,MAAe,GAAG;IAAE,IAAI;IAAgB,QAAQ,CAAC,EAAE,MAAM,QAAQ;IAAE;;EAE/F;CAED,eAAoD,EAClD,MAAM,wBAAwB,IAAI;AAChC,SAAO,EAAE,QAAQ,gCAAgC,GAAG,EAAE;IAEzD;CAED,UAAmB;CAEnB,iBAA0B;CAE1B,SAAkB,EAChB,QAAQ,WAA4B,wBAAwB,OAAO,EACpE;CAED,UAAmB,6BAA6B,WAAW;CAE3D;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;;CAEA,6BAA0D;CAC1D,mBAA2B,gCAAgC;CAC3D,yBAAsD;CAEtD,UAAmB,EACjB,cAAc,6BACf;CAED;CACA;CACA;CAEA;CAEA;CAEA;CAEA;CAEA,MAAM,KAAK,SAAkD;AAC3D,OAAK,MAAM,QAAQ;AACnB,OAAK,MAAM,QAAQ;AACnB,OAAK,oBAAoB,QAAQ;AAEjC,OAAK,iBAAiB,IAAI,wBAAwB;AAClD,OAAK,cAAc;AACnB,OAAK,wBAAwB;AAC7B,0CAAwC,KAAK,eAAe;AAC5D,OAAK,0BAA0B;AAC/B,OAAK,yBAAyB,mCAC5B,YACA,kCAAkC;GAChC,gBAAgB,KAAK;GACrB,iBAAiB,KAAK;GACvB,CAAC,CACH;AAED,QAAM,KAAK,oCAAoC;EAE/C,MAAM,aACJ,KAAK,SAAS,OAAO,cAAc,0BAA0B,MAAM;EACrE,MAAM,YAAY,4BAA4B;AAC9C,OAAK,YAAY,uBAA6C;GAC5D;GACA,GAAG;GACH,SAAS,OAAO,UAAU;AACxB,UAAM,KAAK,gBAAgB,MAAM;;GAEnC,UAAU,KAAK,UAAU;AACvB,QAAI,MAAM;KAAE;KAAK,OAAO,MAAM;KAAQ,EAAE,sCAAsC;;GAEjF,CAAC;AAEF,MAAI,MAAM,8BAA8B;;CAG1C,MAAc,qCAAoD;EAGhE,MAAM,CAAC,EAAE,6BAA6B,EAAE,8CAA8C,MAAM,QAAQ,IAAI,CACtG,OAAO,mDACP,OAAO,0BACR,CAAC;AACF,OAAK,6BAA6B,2BAA2B,CAAC,gBAC5D,yCAAyC,KAAK,eAAe,CAC9D;;CAGH,yBAAuC;AACrC,OAAK,iBAAiB,qBAAqB;GACzC,gBAAgB,KAAK;GACrB,QAAQ,KAAK;GACd,CAAC;EACF,MAAM,KAAK,KAAK;AAChB,OAAK,iBAAiB,6BAA6B;GACjD,KAAK,KAAK;GACV,QAAQ,KAAK;GACb,gBAAgB,KAAK;GACrB,kBAAkB,eAAe,IAAI,mBAAmB,WAAW;GACnE,kBAAkB,YAAY,YAAY;AACxC,QAAI,CAAC,GAAI;AACJ,OAAG,sBAAsB,YAAY,QAAQ;;GAErD,CAAC;EACF,MAAM,WAAW,6BAA6B,EAC5C,gBAAgB,KAAK,gBACtB,CAAC;AACF,OAAK,SAAS,SAAS;AACvB,OAAK,WAAW,SAAS;AACzB,OAAK,SAAS,SAAS;EAEvB,MAAM,gBAAgB,oCAAoC;AAE1D,OAAK,mBAAmB,uBAAuB;GAC7C,KAAK,KAAK;GACV,QAAQ,KAAK;GACb,gBAAgB,KAAK;GACrB;GACA,mBAAmB,EACjB,qBAAqB,SACnB,mBAAmB;IACjB,QAAQ;IACR,QAAQ,KAAK;IACb,UAAU,KAAK;IACf,SAAS,KAAK;IACd,UAAU,KAAK;IACf,WAAW,KAAK;IACjB,CAAC,EACL;GACD,YAAY;IACV,YAAY,OAAO,QAAQ,QAAQ,YAAY;KAE7C,MAAM,EAAE,eAAe,MAAM,OAAO;AAEpC,YAAO,EAAE,OAAM,MADM,WAAW,QAAQ,QAAqB,QAAQ,EAC/C,MAAM;;IAE9B,iBAAiB,WAAW,eAAe,OAAgC;IAC5E;GACD,YAAY,EAAE,aAAa;GAC5B,CAAC;EAEF,MAAM,QAAQ,mCACX,SAAS,KAAK,eAAe,KAAK,KAAK,EACxC,KAAK,eACN;AACD,OAAK,WAAW;GACd,cAAc;GACd,SAAS;GACT,aAAa;GACb,gBAAgB,2BAA2B;GAC3C,GAAG;GACJ;AAED,OAAK,UAAU,6BAA6B;GAC1C,eAAe,YAAY,KAAK,aAAa,QAAQ;GACrD,cAAc,cAAc,KAAK,eAAe,WAAW,UAAU;GACtE,CAAC;AACF,OAAK,YAAY,+BAA+B,EAAE,gBAAgB,KAAK,gBAAgB,CAAC;AACxF,OAAK,WAAW,8BAA8B;;CAGhD,MAAM,gBAAgB,KAA4B;EAChD,MAAM,SAAS,KAAK,IAAI,UAAU;EAClC,MAAM,SAAS,IAAI,UAAU;AAG7B,MADmB,CAAC,UAAU,OAAO,YAAY,MACjC;AACd,QAAK,MAAM;AACX,SAAM,KAAK,MAAM;AACjB,QAAK,eAAe,OAAO;AAC3B,QAAK,wBAAwB;AAC7B;;AAGF,MAAI,kBAAkB,QAAQ,OAAO,EAAE;AACrC,QAAK,MAAM;AACX,QAAK,wBAAwB;AAE7B,OAAI,CAAC,KAAK,iBAAiB,IAAI,CAC7B,OAAM,KAAK,kBAAkB,IAAI;AAEnC;;AAEF,QAAM,KAAK,kBAAkB,IAAI;;CAGnC,MAAc,kBAAkB,KAA4B;AAC1D,OAAK,MAAM;AACX,QAAM,KAAK,MAAM;AACjB,OAAK,eAAe,OAAO;EAC3B,MAAM,cAAc,IAAI,UAAU;AAElC,MAAI,EADc,eAAe,QAAQ,YAAY,YAAY,OACjD;AACd,QAAK,wBAAwB;AAC7B;;AAEF,OAAK,cAAc;AACnB,OAAK,wBAAwB;AAC7B,QAAM,KAAK,OAAO;;CAGpB,eAA6B;EAC3B,MAAM,cAAc,KAAK,IAAI,UAAU;AACvC,MAAI,CAAC,YAAa;AAClB,MAAI,YAAY,YAAY,KAC1B;EAGF,MAAM,WAAW,YAAY;AAC7B,MAAI,CAAC,YAAY,OAAO,KAAK,SAAS,CAAC,WAAW,EAAG;EAErD,MAAM,WACJ,YAAY,YAAY,OAAO,YAAY,aAAa,YAAY,CAAC,MAAM,QAAQ,YAAY,SAAS,GACpG,YAAY,WACZ,EAAE;EACR,MAAM,iBACJ,OAAO,SAAS,YAAY,WACxB,yBAAyB,SAAS,QAAQ,GAC1C,KAAA;EACN,MAAM,eACJ,OAAO,SAAS,UAAU,YAAY,SAAS,MAAM,MAAM,GACvD,SAAS,MAAM,MAAM,GACrB,KAAA;EAEN,MAAM,8BAAc,IAAI,KAAuB;AAE/C,OAAK,MAAM,CAAC,IAAI,YAAY,OAAO,QAAQ,SAAS,EAAE;GACpD,MAAM,EAAE,OAAO,WAAW,wBAAwB;IAChD,UAAU,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAW,KAAA;IACpE,WAAW,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY,KAAA;IACxE,CAAC;AACF,OAAI,OAAO;IACT,MAAM,SAAS,YAAY,IAAI,MAAM,IAAI,EAAE;AAC3C,WAAO,KAAK,GAAG;AACf,gBAAY,IAAI,OAAO,OAAO;;GAGhC,MAAM,aACJ,OAAO,QAAQ,YAAY,WACvB,yBAAyB,QAAQ,QAAQ,GACzC,KAAA;GACN,MAAM,WACJ,OAAO,QAAQ,UAAU,YAAY,QAAQ,MAAM,MAAM,GAAG,QAAQ,MAAM,MAAM,GAAG,KAAA;AAErF,QAAK,eAAe,gBAAgB;IAClC,GAAG;IACH,GAAG;IACH,WAAW;IACX,UAAU;IACV,WAAW,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY,KAAA;IACvE,aAAa;IACb,GAAI,cAAc,iBAAiB,EAAE,SAAS,cAAc,gBAAgB,GAAG,EAAE;IACjF,GAAI,YAAY,eAAe,EAAE,OAAO,YAAY,cAAc,GAAG,EAAE;IACxE,CAAsD;;AAGzD,OAAK,MAAM,CAAC,OAAO,WAAW,YAC5B,KAAI,OAAO,SAAS,EAClB,KAAI,MACF;GAAE,YAAY;GAAQ,cAAc,GAAG,MAAM,MAAM,GAAG,EAAE,CAAC;GAAI,EAC7D,iDAAiD,OAAO,KAAK,KAAK,GACnE;;CAKP,iBAAiB,KAAsB;AACrC,SAAO,KAAK,eAAe,gBAAgB,CAAC,MACzC,MAAM,EAAE,YAAY,SAAS,CAAC,CAAC,EAAE,YAAY,KAAK,eAAe,UAAU,EAAE,UAAU,CACzF;;CAGH,MAAM,MAAM,SAAoD;EAC9D,MAAM,UAAU,KAAK,IAAI,UAAU;AACnC,MAAI,CAAC,WAAW,QAAQ,YAAY,KAClC;EAGF,MAAM,aAAa,SAAS,YACxB,CAAC,QAAQ,UAAU,GACnB,KAAK,OAAO,eAAe,KAAK,IAAI;AAExC,OAAK,MAAM,aAAa,YAAY;GAClC,MAAM,UAAU,KAAK,OAAO,eAAe,KAAK,KAAK,UAAU;AAC/D,OAAI,CAAC,QAAQ,WAAW,CAAC,QAAQ,SAAU;AAC3C,SAAM,KAAK,aAAa,QAAQ;;;CAIpC,MAAM,KAAK,WAAmC;AAC5C,MAAI,CAAC,KAAK,OAAQ;EAClB,MAAM,MAAM,YAAY,CAAC,UAAU,GAAG,KAAK,OAAO,eAAe,KAAK,IAAI;AAC1E,OAAK,MAAM,MAAM,KAAK;AACpB,SAAM,KAAK,eAAe,WAAW,GAAG;AACxC,OAAI,KAAK,EAAE,WAAW,IAAI,EAAE,2BAA2B;;AAKzD,MAAI,CAAC,WAAW;AACd,QAAK,8BAA8B;AACnC,QAAK,6BAA6B;AAClC,QAAK,0BAA0B;AAC/B,QAAK,yBAAyB;;;CAIlC,MAAc,aAAa,SAAiD;AAC1E,MAAI,KAAK,eAAe,UAAU,QAAQ,UAAU,CAAE;EAEtD,MAAM,WAAW,wBAAwB;GACvC,UAAU,QAAQ;GAClB,WAAW,QAAQ;GACpB,CAAC;AACF,MAAI,CAAC,SAAS,MAAO;EAErB,MAAM,oBAAoB,KAAK,eAC5B,gBAAgB,CAChB,QAAQ,MAAM;AAKb,UAJU,wBAAwB;IAChC,UAAU,EAAE;IACZ,WAAW,EAAE;IACd,CAAC,CAAC,UACU,SAAS,SAAS,EAAE,cAAc,QAAQ;IACvD,CACD,KAAK,MAAM,EAAE,UAAU;AAC1B,MAAI,kBAAkB,SAAS,GAAG;GAChC,MAAM,KAAK,+CAA+C,kBAAkB,KAAK,KAAK;AACtF,OAAI,MAAM;IAAE,WAAW,QAAQ;IAAW;IAAmB,EAAE,GAAG;AAClE,QAAK,eAAe,aAAa;IAC/B,WAAW,QAAQ;IACnB,SAAS;IACT,MAAM;IACN,WAAW;IACZ,CAAC;AACF;;AAGF,OAAK,eAAe,aAAa,QAAQ,UAAU;AAEnD,MAAI;GACF,MAAM,SAIF;IACF,gBAAgB;IAChB,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,SAAS,GAAG,EAAE;IACvD,GAAI,QAAQ,QAAQ,EAAE,OAAO,iBAAiB,QAAQ,MAAM,EAAE,GAAG,EAAE;IACpE;GACD,MAAM,MAAM,IAAI,IAAI,SAAS,OAAO,EAAE,QAAQ,CAAC;GAC/C,MAAM,cAAc,yBAAyB,0BAA0B;GACvE,IAAI;AACJ,OAAI;AACF,SAAK,MAAM,IAAI,IAAI,MAAM,YAAY,OAAO;aACpC;AACR,gBAAY,SAAS;;AAGvB,QAAK,eAAe,YAAY,QAAQ,WAAW,IAAI;AACvD,QAAK,eAAe,eAAe,QAAQ,WAAW,GAAG,SAAS;AAClE,QAAK,oBAAoB,QAAQ,WAAW,IAAI;GAEhD,MAAM,UAAU,4BAA4B;IAC1C,WAAW,QAAQ;IACnB,UAAU,SAAS;IACnB;IACA,kBAAkB,QAAQ;IAC1B,cAAc;AACP,UAAK,eAAe,WAAW,QAAQ,UAAU;;IAEzD,CAAC;AACF,QAAK,eAAe,uBAAuB,QAAQ,WAAW,QAAQ;AACtE,QAAK,eAAe,aAAa;IAC/B,WAAW,QAAQ;IACnB,SAAS;IACT,MAAM;IACP,CAAC;AAEF,OAAI,KAAK;IAAE,WAAW,QAAQ;IAAW,UAAU,GAAG;IAAU,EAAE,2BAA2B;WACtF,KAAK;GACZ,MAAM,KAAK,2BAA2B,IAAI;AAE1C,OADc,iCAAiC,IAAI,GAAG,UAAU,QAE9D;IACE,WAAW,QAAQ;IACnB,mBAAmB,CAAC,CAAC,QAAQ;IAC7B,cAAc,iCAAiC,IAAI;IACnD,cAAc;IACf,EACD,iCAAiC,KAClC;AACD,QAAK,eAAe,aAAa;IAC/B,WAAW,QAAQ;IACnB,SAAS;IACT,MAAM;IACN,WAAW,GAAG,MAAM,GAAG,IAAI;IAC5B,CAAC;YACM;AACR,QAAK,eAAe,kBAAkB,QAAQ,UAAU;;;CAI5D,wBAAgC,YAAoB,SAAwB;CAI5E,oBAA4B,WAAmB,KAAgB;EAC7D,MAAM,UAAU,KAAK,OAAO,eAAe,KAAK,KAAK,UAAU;EAE/D,MAAM,uBAAuB,OAAO,QAAiB;GAEnD,MAAM,WADO,IAAI,SAAS,QAAQ,IAAI,SAAS,WAAW,IAAI,aAAa,QAAQ,IAAI,aAAa,WAAW,IAC1F,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,aAAa;AAErE,OAAI,YAAY,WAAW;AACzB,UAAM,KAAK,eAAe,aAAa,IAAI;AAC3C;;AAEF,OAAI,YAAY,UAAU;AACxB,UAAM,KAAK,eAAe,YAAY,IAAI;AAC1C;;AAEF,OAAI,YAAY,YAAY;AAC1B,UAAM,KAAK,eAAe,cAAc,IAAI;AAC5C;;AAEF,OAAI,YAAY,UAAU;AACxB,UAAM,2BAA2B;KAAE;KAAK;KAAW,QAAQ,KAAK;KAAK,CAAC;AACtE;;GAGF,MAAM,UAAU,IAAI,WAAW,IAAI;AACnC,OAAI,CAAC,QAAS;AAEd,SAAM,KAAK,iBAAiB,QAAQ;IAClC;IACA;IACA;IACA,SAAS,OAAO,UAAU;AACxB,UAAK,MAAM,OAAO,MAAM,UAAU;MAChC,MAAM,WAAW,MAAM;AACvB,YAAM,KAAK,UAAU,QAAQ;OAC3B,KAAK,mBAAmB,UAAU,IAAI;OACtC,WAAW,MAAM;OACjB,SAAS;OACV,CAAC;;;IAGP,CAAC;;AAGJ,MAAI,GAAG,WAAW,OAAO,QAAQ;AAC/B,OAAI;AACF,UAAM,qBAAqB,IAAI;YACxB,KAAK;AACZ,QAAI,MAAM;KAAE;KAAW;KAAK,EAAE,wBAAwB;;IAExD;AAEF,MAAI,GAAG,gBAAgB,OAAO,QAAQ;AACpC,OAAI;AACF,UAAM,qBAAqB,IAAI;YACxB,KAAK;AACZ,QAAI,MAAM;KAAE;KAAW;KAAK,EAAE,6BAA6B;;IAE7D;AAEF,MAAI,GAAG,oBAAoB,OAAO,QAAQ;AACxC,OAAI;AACF,UAAM,8BAA8B;KAClC;KACA;KACA,KAAK,KAAK;KACV,MAAM,QAAQ;KACf,CAAC;YACK,KAAK;AACZ,QAAI,MAAM;KAAE;KAAW;KAAK,EAAE,iCAAiC;;IAEjE;AAEF,MAAI,GAAG,uBAAuB,OAAO,QAAQ;AAC3C,OAAI;AACF,UAAM,KAAK,oBAAoB,KAAK,UAAU;YACvC,KAAK;AACZ,QAAI,MAAM;KAAE;KAAW;KAAK,EAAE,+BAA+B;AAC7D,UAAM,IAAI,oBAAoB,oBAAoB,CAAC,YAAY,GAAG;;IAEpE;;CAGJ,MAAc,oBAAoB,KAAc,YAAmC;EACjF,MAAM,OAAO,IAAI,eAAe;AAChC,MAAI,CAAC,KAAM;AAEX,MAAI,KAAK,WAAW,YAAY,EAAE;GAChC,MAAM,aAAa,KAAK,UAAU,EAAmB;AACrD,SAAM,KAAK,eAAe,qBAAqB,KAAK,WAAW;AAC/D;;AAGF,MAAI,KAAK,WAAW,SAAS,EAAE;GAC7B,MAAM,UAAU,KAAK,UAAU,EAAgB;AAC/C,SAAM,KAAK,eAAe,kBAAkB,KAAK,QAAQ;AACzD;;AAGF,MAAI,SAAS,UAAU;AACrB,SAAM,KAAK,eAAe,aAAa,IAAI;AAC3C;;AAGF,MAAI,SAAS,aAAa;AACxB,SAAM,KAAK,eAAe,oBAAoB,IAAI;AAClD;;AAGF,MAAI,SAAS,mBAAmB;AAC9B,SAAM,KAAK,eAAe,qBAAqB,IAAI;AACnD;;AAGF,MAAI,KAAK,WAAW,WAAW,EAAE;GAC/B,MAAM,OAAO,KAAK,MAAM,EAAkB;GAC1C,MAAM,YAAY,KAAK,YAAY,IAAI;AACvC,OAAI,YAAY,GAAG;IACjB,MAAM,YAAY,KAAK,MAAM,GAAG,UAAU;IAC1C,MAAM,MAAM,OAAO,SAAS,KAAK,MAAM,YAAY,EAAE,EAAE,GAAG;AAC1D,QAAI,aAAa,OAAO,SAAS,IAAI,IAAI,+BAA+B,WAAW,IAAI,EAAE;AACvF,WAAM,IAAI,qBAAqB;AAC/B;;;AAGJ,SAAM,IAAI,oBAAoB,sBAAsB;AACpD;;AAGF,MAAI,KAAK,WAAW,oBAAoB,IAAI,KAAK,WAAW,iBAAiB,EAAE;GAC7E,MAAM,WAAW,KAAK,WAAW,oBAAoB;GACrD,MAAM,aAAa,KAAK,MAAM,WAAW,KAA6B,GAAwB;GAC9F,MAAM,WAAW,OAAO,IAAI,MAAM,MAAM,GAAG;AAC3C,OACE,CAAC,+BAA+B;IAC9B,KAAK,KAAK;IACV,WAAW;IACX;IACD,CAAC,EACF;AACA,UAAM,IAAI,oBAAoB,iBAAiB;AAC/C;;AAEF,OAAI,wBAAwB,YAAY,SAAS,CAC/C,OAAM,IAAI,oBAAoB,WAAW,aAAa,SAAS;OAE/D,OAAM,IAAI,oBAAoB,uCAAuC;AAEvE;;AAGF,QAAM,IAAI,oBAAoB,iBAAiB;;CAGjD,MAAc,gBAAgB,OAA8C;AAC1E,MAAI,MAAM,WAAW,EAAG;EAExB,MAAM,YAAY,KAAK,IAAI,UAAU;AACrC,MAAI,CAAC,aAAa,UAAU,YAAY,KACtC;EAGF,MAAM,OAAO,MAAM,MAAM,SAAS;EAClC,MAAM,MAAM,KAAK;EACjB,MAAM,YAAY,KAAK;AACvB,MAAI,CAAC,KAAK,eAAe,WAAW,UAAU,EAAE;AAC9C,OAAI,KAAK,EAAE,WAAW,EAAE,kBAAkB;AAC1C;;EAGF,MAAM,UAAU,KAAK,OAAO,eAAe,KAAK,KAAK,UAAU;EAE/D,MAAM,UAAU,IAAI,MAAM,SAAS,WAAW,IAAI,MAAM,SAAS;EACjE,MAAM,WAAW,IAAI,MAAM,IAAI,UAAU,IAAI;EAC7C,MAAM,iBAAiB,IAAI,MAAM;EACjC,MAAM,SAAS,IAAI,MAAM,IAAI,UAAU,IAAI;AAC3C,uBAAqB,MAAM,WAAW,OAAO;EAE7C,MAAM,cAAsC;GAC1C;GACA;GACA;GACA,YAAY;GACZ;GACD;EAED,MAAM,eAAe,KAAK,SAAS,cAAc,aAAa,SAAS,KAAK,IAAI;AAEhF,MAAI,CAAC,cAAc,SAAS;AAC1B,OAAI,CAAC,WAAW,cAAc,WAAW,oBAAoB;IAC3D,MAAM,MAAM,IAAI,MAAM;IACtB,MAAM,MAAM,OAAO,OAAO,KAAK,eAAe,OAAO,UAAU,GAAG,KAAA;AAClE,QAAI,OAAO,OAAO,QAAQ,SACnB,uBAAsB;KACzB,SAAS;KACT,iBAAiB,2BAA2B,YAAY,UAAU;KAClE;KACA;KACA,cAAc,0BAA0B;KACxC,kBAAkB,OAAO,SAAS;AAChC,YAAM,IAAI,IAAI,YAAY,KAAK,KAAK;;KAEtC,YAAY,EAAE,WAAW;AACvB,UAAI,KAAK;OAAE;OAAW;OAAU;OAAM,EAAE,kCAAkC;;KAE5E,eAAe,QAAQ;AACrB,UAAI,KAAK;OAAE;OAAK;OAAW,QAAQ,OAAO,IAAI;OAAE,EAAE,gCAAgC;;KAErF,CAAC;AAEJ;;AAEF,OAAI,KACF;IACE;IACA;IACA;IACA;IACA,QAAQ,cAAc;IACtB,UAAU,QAAQ;IAClB,aAAa,QAAQ;IACtB,EACD,2FACD;AACD;;EAGF,MAAM,MAAM,KAAK,eAAe,OAAO,UAAU;EACjD,MAAM,YAAY,IAAI,SAAS;EAC/B,MAAM,gBAAiB,QAAuC,iBAAiB;EAC/E,MAAM,WAAY,QAAqC,eAAe;AACtE,MACE,OACA,aACA,kBAAkB,SAClB,IAAI,MAAM,MAAM,QAChB,CAAC,IAAI,YAEA,yBAAwB;GAC3B;GACA,QAAQ,IAAI,KAAK;GACjB;GACA,OAAO;GACR,CAAC;AAGJ,QAAM,KAAK,iBAAiB,KAAK,UAAU;;;AAI/C,MAAa,iBAAiB,IAAI,uBAAuB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"polling-session.js","names":[],"sources":["../../../../extensions/telegram/src/polling-session.ts"],"sourcesContent":["import type { Bot } from 'grammy';\nimport { run, type RunnerHandle } from '@grammyjs/runner';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport { isRecoverableTelegramNetworkError } from './network-errors.js';\nimport { readTelegramUpdateOffset, writeTelegramUpdateOffset } from './update-offset-store.js';\n\nconst log = createLogger('TelegramPolling');\n\nconst DEFAULT_STALL_THRESHOLD_MS = 120_000;\nconst MIN_STALL_THRESHOLD_MS = 30_000;\nconst MAX_STALL_THRESHOLD_MS = 600_000;\nconst WATCHDOG_INTERVAL_MS = 30_000;\n\nexport function resolvePollingStallThresholdMs(value?: number): number {\n if (value == null || !Number.isFinite(value)) return DEFAULT_STALL_THRESHOLD_MS;\n return Math.min(MAX_STALL_THRESHOLD_MS, Math.max(MIN_STALL_THRESHOLD_MS, Math.floor(value)));\n}\n\nexport interface TelegramPollingSessionOptions {\n accountId: string;\n botToken: string;\n bot: Bot;\n stallThresholdMs?: number;\n onExit?: (err?: unknown) => void;\n}\n\nexport interface TelegramPollingSession {\n stop: () => Promise<void>;\n}\n\nexport function wireTelegramUpdateOffsetPersistence(\n bot: Bot,\n params: { accountId: string; botToken: string },\n): void {\n const savedOffset = readTelegramUpdateOffset(params);\n if (savedOffset != null) {\n let restored = false;\n bot.api.config.use(async (prev, method, payload, signal) => {\n if (method === 'getUpdates' && !restored) {\n restored = true;\n const nextPayload = { ...(payload as object), offset: savedOffset + 1 } as typeof payload;\n return prev(method, nextPayload, signal);\n }\n return prev(method, payload, signal);\n });\n }\n\n bot.use(async (ctx, next) => {\n const updateId = ctx.update.update_id;\n if (Number.isSafeInteger(updateId)) {\n writeTelegramUpdateOffset({ ...params, lastUpdateId: updateId });\n }\n await next();\n });\n}\n\nexport function startTelegramPollingSession(\n options: TelegramPollingSessionOptions,\n): TelegramPollingSession {\n const { accountId, botToken, bot } = options;\n const stallThresholdMs = resolvePollingStallThresholdMs(options.stallThresholdMs);\n\n wireTelegramUpdateOffsetPersistence(bot, { accountId, botToken });\n\n let lastUpdateAt = Date.now();\n bot.use(async (_ctx, next) => {\n lastUpdateAt = Date.now();\n await next();\n });\n\n const runner = run(bot, {\n runner: {\n fetch: { timeout: 30 },\n silent: true,\n maxRetryTime: Number.POSITIVE_INFINITY,\n retryInterval: 'exponential',\n },\n });\n\n const watchdog = setInterval(() => {\n const idleMs = Date.now() - lastUpdateAt;\n if (idleMs < stallThresholdMs) return;\n log.warn({ accountId, idleMs, stallThresholdMs }, 'Telegram polling stall detected; restarting runner');\n lastUpdateAt = Date.now();\n void restartRunner(runner, accountId).catch((err) => {\n log.error({ err, accountId }, 'Telegram polling restart failed');\n });\n }, WATCHDOG_INTERVAL_MS);\n watchdog.unref?.();\n\n void attachRunnerExit(runner, accountId, options.onExit);\n\n return {\n stop: async () => {\n clearInterval(watchdog);\n await runner.stop();\n },\n };\n}\n\nasync function restartRunner(runner: RunnerHandle, accountId: string): Promise<void> {\n try {\n await runner.stop();\n runner.start();\n log.info({ accountId }, 'Telegram polling runner restarted');\n } catch (err) {\n if (isRecoverableTelegramNetworkError(err)) {\n log.warn({ err, accountId }, 'Telegram polling restart hit network error');\n return;\n }\n throw err;\n }\n}\n\nasync function attachRunnerExit(\n runner: RunnerHandle,\n accountId: string,\n onExit?: (err?: unknown) => void,\n): Promise<void> {\n const task = runner.task();\n if (!task) return;\n void task.catch((err) => {\n log.error({ err, accountId }, 'Telegram polling runner exited');\n onExit?.(err);\n });\n}\n"],"mappings":";;;;;;aAE4D;AAI5D,MAAM,MAAM,aAAa,kBAAkB;AAE3C,MAAM,6BAA6B;AACnC,MAAM,yBAAyB;AAC/B,MAAM,yBAAyB;AAC/B,MAAM,uBAAuB;AAE7B,SAAgB,+BAA+B,OAAwB;AACrE,KAAI,SAAS,QAAQ,CAAC,OAAO,SAAS,MAAM,CAAE,QAAO;AACrD,QAAO,KAAK,IAAI,wBAAwB,KAAK,IAAI,wBAAwB,KAAK,MAAM,MAAM,CAAC,CAAC;;AAe9F,SAAgB,oCACd,KACA,QACM;CACN,MAAM,cAAc,yBAAyB,OAAO;AACpD,KAAI,eAAe,MAAM;EACvB,IAAI,WAAW;AACf,MAAI,IAAI,OAAO,IAAI,OAAO,MAAM,QAAQ,SAAS,WAAW;AAC1D,OAAI,WAAW,gBAAgB,CAAC,UAAU;AACxC,eAAW;AAEX,WAAO,KAAK,QAAQ;KADE,GAAI;KAAoB,QAAQ,cAAc;KACrC,EAAE,OAAO;;AAE1C,UAAO,KAAK,QAAQ,SAAS,OAAO;IACpC;;AAGJ,KAAI,IAAI,OAAO,KAAK,SAAS;EAC3B,MAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,OAAO,cAAc,SAAS,CAChC,2BAA0B;GAAE,GAAG;GAAQ,cAAc;GAAU,CAAC;AAElE,QAAM,MAAM;GACZ;;AAGJ,SAAgB,4BACd,SACwB;CACxB,MAAM,EAAE,WAAW,UAAU,QAAQ;CACrC,MAAM,mBAAmB,+BAA+B,QAAQ,iBAAiB;AAEjF,qCAAoC,KAAK;EAAE;EAAW;EAAU,CAAC;CAEjE,IAAI,eAAe,KAAK,KAAK;AAC7B,KAAI,IAAI,OAAO,MAAM,SAAS;AAC5B,iBAAe,KAAK,KAAK;AACzB,QAAM,MAAM;GACZ;CAEF,MAAM,SAAS,IAAI,KAAK,EACtB,QAAQ;EACN,OAAO,EAAE,SAAS,IAAI;EACtB,QAAQ;EACR,cAAc,OAAO;EACrB,eAAe;EAChB,EACF,CAAC;CAEF,MAAM,WAAW,kBAAkB;EACjC,MAAM,SAAS,KAAK,KAAK,GAAG;AAC5B,MAAI,SAAS,iBAAkB;AAC/B,MAAI,KAAK;GAAE;GAAW;GAAQ;GAAkB,EAAE,qDAAqD;AACvG,iBAAe,KAAK,KAAK;AACpB,gBAAc,QAAQ,UAAU,CAAC,OAAO,QAAQ;AACnD,OAAI,MAAM;IAAE;IAAK;IAAW,EAAE,kCAAkC;IAChE;IACD,qBAAqB;AACxB,UAAS,SAAS;AAEb,kBAAiB,QAAQ,WAAW,QAAQ,OAAO;AAExD,QAAO,EACL,MAAM,YAAY;AAChB,gBAAc,SAAS;AACvB,QAAM,OAAO,MAAM;IAEtB;;AAGH,eAAe,cAAc,QAAsB,WAAkC;AACnF,KAAI;AACF,QAAM,OAAO,MAAM;AACnB,SAAO,OAAO;AACd,MAAI,KAAK,EAAE,WAAW,EAAE,oCAAoC;UACrD,KAAK;AACZ,MAAI,kCAAkC,IAAI,EAAE;AAC1C,OAAI,KAAK;IAAE;IAAK;IAAW,EAAE,6CAA6C;AAC1E;;AAEF,QAAM;;;AAIV,eAAe,iBACb,QACA,WACA,QACe;CACf,MAAM,OAAO,OAAO,MAAM;AAC1B,KAAI,CAAC,KAAM;AACN,MAAK,OAAO,QAAQ;AACvB,MAAI,MAAM;GAAE;GAAK;GAAW,EAAE,iCAAiC;AAC/D,WAAS,IAAI;GACb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-fetch.js","names":["undiciFetch"],"sources":["../../../../extensions/telegram/src/proxy-fetch.ts"],"sourcesContent":["import { ProxyAgent, fetch as undiciFetch } from 'undici';\n\nfunction toNativeAbortSignal(signal: unknown): AbortSignal | undefined {\n if (!signal) return undefined;\n if (signal instanceof AbortSignal) return signal;\n\n const maybeSignal = signal as {\n aborted?: boolean;\n reason?: unknown;\n addEventListener?: (type: 'abort', listener: () => void, opts?: { once?: boolean }) => void;\n };\n if (typeof maybeSignal.addEventListener !== 'function') return undefined;\n\n const controller = new AbortController();\n if (maybeSignal.aborted) {\n controller.abort(maybeSignal.reason);\n return controller.signal;\n }\n maybeSignal.addEventListener('abort', () => controller.abort(maybeSignal.reason), { once: true });\n return controller.signal;\n}\n\n/** Build a fetch compatible with grammY client when an HTTP proxy is configured. */\nexport function createProxyFetch(proxyUrl: string): typeof fetch {\n const dispatcher = new ProxyAgent(proxyUrl);\n return ((input: Parameters<typeof fetch>[0], init?: Parameters<typeof fetch>[1]) => {\n const { agent: _agent, compress: _compress, signal, ...rest } = (init ?? {}) as Record<string, unknown>;\n return undiciFetch(input as string, {\n ...rest,\n signal: toNativeAbortSignal(signal),\n dispatcher,\n }) as unknown as Promise<Response>;\n }) as typeof fetch;\n}\n"],"mappings":";;AAEA,SAAS,oBAAoB,QAA0C;AACrE,KAAI,CAAC,OAAQ,QAAO,KAAA;AACpB,KAAI,kBAAkB,YAAa,QAAO;CAE1C,MAAM,cAAc;AAKpB,KAAI,OAAO,YAAY,qBAAqB,WAAY,QAAO,KAAA;CAE/D,MAAM,aAAa,IAAI,iBAAiB;AACxC,KAAI,YAAY,SAAS;AACvB,aAAW,MAAM,YAAY,OAAO;AACpC,SAAO,WAAW;;AAEpB,aAAY,iBAAiB,eAAe,WAAW,MAAM,YAAY,OAAO,EAAE,EAAE,MAAM,MAAM,CAAC;AACjG,QAAO,WAAW;;;AAIpB,SAAgB,iBAAiB,UAAgC;CAC/D,MAAM,aAAa,IAAI,WAAW,SAAS;AAC3C,UAAS,OAAoC,SAAuC;EAClF,MAAM,EAAE,OAAO,QAAQ,UAAU,WAAW,QAAQ,GAAG,SAAU,QAAQ,EAAE;AAC3E,SAAOA,MAAY,OAAiB;GAClC,GAAG;GACH,QAAQ,oBAAoB,OAAO;GACnC;GACD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reactions.js","names":[],"sources":["../../../../extensions/telegram/src/reactions.ts"],"sourcesContent":["import type { Bot, Context } from 'grammy';\nimport type { MessageBus } from '@xopcai/xopc/infra/bus/index.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport { sentMessageCache } from './sent-cache.js';\n\nconst log = createLogger('TelegramReactions');\n\nexport async function sendTelegramAckReaction(params: {\n bot: Bot;\n chatId: number | string;\n messageId: number;\n emoji: string;\n}): Promise<void> {\n try {\n await params.bot.api.setMessageReaction(params.chatId, params.messageId, [\n { type: 'emoji', emoji: params.emoji as '👀' },\n ]);\n } catch (err) {\n log.debug({ err, chatId: params.chatId, messageId: params.messageId }, 'Ack reaction failed');\n }\n}\n\nexport async function handleTelegramMessageReaction(params: {\n ctx: Context;\n accountId: string;\n bus: MessageBus;\n mode?: 'off' | 'own' | 'all';\n}): Promise<void> {\n const { ctx, accountId, bus } = params;\n const mode = params.mode ?? 'own';\n if (mode === 'off') return;\n\n const update = ctx.messageReaction ?? (ctx.update as { message_reaction?: typeof ctx.messageReaction }).message_reaction;\n if (!update) return;\n\n const chatId = update.chat.id;\n const messageId = update.message_id;\n if (mode === 'own' && !sentMessageCache.wasSentByBot(String(chatId), messageId)) {\n return;\n }\n\n const added = update.new_reaction?.map((r) => ('emoji' in r ? r.emoji : r.type)).join(', ');\n if (!added) return;\n\n await bus.publishInbound({\n channel: 'telegram',\n chat_id: String(chatId),\n sender_id: String(update.user?.id ?? update.actor_chat?.id ?? ''),\n content: `[Reaction] ${added} on message ${messageId}`,\n metadata: {\n accountId,\n messageId: String(messageId),\n isReaction: true,\n reaction: added,\n },\n });\n}\n"],"mappings":";;;;aAE4D;AAG5D,MAAM,MAAM,aAAa,oBAAoB;AAE7C,eAAsB,wBAAwB,QAK5B;AAChB,KAAI;AACF,QAAM,OAAO,IAAI,IAAI,mBAAmB,OAAO,QAAQ,OAAO,WAAW,CACvE;GAAE,MAAM;GAAS,OAAO,OAAO;GAAe,CAC/C,CAAC;UACK,KAAK;AACZ,MAAI,MAAM;GAAE;GAAK,QAAQ,OAAO;GAAQ,WAAW,OAAO;GAAW,EAAE,sBAAsB;;;AAIjG,eAAsB,8BAA8B,QAKlC;CAChB,MAAM,EAAE,KAAK,WAAW,QAAQ;CAChC,MAAM,OAAO,OAAO,QAAQ;AAC5B,KAAI,SAAS,MAAO;CAEpB,MAAM,SAAS,IAAI,mBAAoB,IAAI,OAA6D;AACxG,KAAI,CAAC,OAAQ;CAEb,MAAM,SAAS,OAAO,KAAK;CAC3B,MAAM,YAAY,OAAO;AACzB,KAAI,SAAS,SAAS,CAAC,iBAAiB,aAAa,OAAO,OAAO,EAAE,UAAU,CAC7E;CAGF,MAAM,QAAQ,OAAO,cAAc,KAAK,MAAO,WAAW,IAAI,EAAE,QAAQ,EAAE,KAAM,CAAC,KAAK,KAAK;AAC3F,KAAI,CAAC,MAAO;AAEZ,OAAM,IAAI,eAAe;EACvB,SAAS;EACT,SAAS,OAAO,OAAO;EACvB,WAAW,OAAO,OAAO,MAAM,MAAM,OAAO,YAAY,MAAM,GAAG;EACjE,SAAS,cAAc,MAAM,cAAc;EAC3C,UAAU;GACR;GACA,WAAW,OAAO,UAAU;GAC5B,YAAY;GACZ,UAAU;GACX;EACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reply-params.js","names":[],"sources":["../../../../extensions/telegram/src/reply-params.ts"],"sourcesContent":["import type { ReplyToMode } from '@xopcai/xopc/channels/channel-domain.js';\n\n/** Per-chat tracker so `replyToMode: first` only applies reply once per inbound turn. */\nexport class TelegramReplyTracker {\n private firstUsed = new Set<string>();\n\n private key(accountId: string, chatId: string): string {\n return `${accountId}:${chatId}`;\n }\n\n reset(accountId: string, chatId: string): void {\n this.firstUsed.delete(this.key(accountId, chatId));\n }\n\n resolveReplyToMessageId(params: {\n mode?: ReplyToMode;\n explicitReplyTo?: string;\n inboundMessageId?: string;\n accountId: string;\n chatId: string;\n }): string | undefined {\n const mode = params.mode ?? 'off';\n if (params.explicitReplyTo?.trim()) {\n return params.explicitReplyTo.trim();\n }\n const inbound = params.inboundMessageId?.trim();\n if (!inbound) return undefined;\n\n if (mode === 'off') return undefined;\n if (mode === 'all') return inbound;\n\n const k = this.key(params.accountId, params.chatId);\n if (this.firstUsed.has(k)) return undefined;\n this.firstUsed.add(k);\n return inbound;\n }\n}\n\nexport const telegramReplyTracker = new TelegramReplyTracker();\n"],"mappings":";;AAGA,IAAa,uBAAb,MAAkC;CAChC,4BAAoB,IAAI,KAAa;CAErC,IAAY,WAAmB,QAAwB;AACrD,SAAO,GAAG,UAAU,GAAG;;CAGzB,MAAM,WAAmB,QAAsB;AAC7C,OAAK,UAAU,OAAO,KAAK,IAAI,WAAW,OAAO,CAAC;;CAGpD,wBAAwB,QAMD;EACrB,MAAM,OAAO,OAAO,QAAQ;AAC5B,MAAI,OAAO,iBAAiB,MAAM,CAChC,QAAO,OAAO,gBAAgB,MAAM;EAEtC,MAAM,UAAU,OAAO,kBAAkB,MAAM;AAC/C,MAAI,CAAC,QAAS,QAAO,KAAA;AAErB,MAAI,SAAS,MAAO,QAAO,KAAA;AAC3B,MAAI,SAAS,MAAO,QAAO;EAE3B,MAAM,IAAI,KAAK,IAAI,OAAO,WAAW,OAAO,OAAO;AACnD,MAAI,KAAK,UAAU,IAAI,EAAE,CAAE,QAAO,KAAA;AAClC,OAAK,UAAU,IAAI,EAAE;AACrB,SAAO;;;AAIX,MAAa,uBAAuB,IAAI,sBAAsB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routing-integration.js","names":[],"sources":["../../../../extensions/telegram/src/routing-integration.ts"],"sourcesContent":["/**\n * Telegram Routing Integration\n * \n * Integrates Telegram channel with the new session routing system.\n * Provides session key generation with routing context.\n */\n\nimport type { Context } from 'grammy';\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport {\n buildSessionKey,\n resolveRoute,\n applyIdentityLinks,\n type RouteContext,\n} from '@xopcai/xopc/routing/index.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\n\nconst log = createLogger('TelegramRouting');\n\nexport interface TelegramRoutingContext {\n accountId: string;\n chatId: string;\n senderId: string;\n senderUsername?: string;\n isGroup: boolean;\n threadId?: string;\n guildId?: string;\n memberRoleIds?: string[];\n /**\n * Channel type for identity links.\n * @default 'telegram'\n */\n channel?: string;\n}\n\n/**\n * Generate session key with routing integration\n */\nexport function generateSessionKeyWithRouting(\n ctx: TelegramRoutingContext,\n config: Config\n): string {\n const channel = ctx.channel ?? 'telegram';\n \n // Build route context for resolveRoute\n const routeInput: RouteContext = {\n channel,\n accountId: ctx.accountId,\n peerKind: ctx.isGroup ? 'group' : 'dm',\n peerId: ctx.isGroup ? ctx.chatId : ctx.senderId,\n guildId: ctx.guildId ?? null,\n teamId: null,\n memberRoleIds: ctx.memberRoleIds ?? [],\n };\n\n // Resolve route using bindings\n const route = resolveRoute({\n config,\n ...routeInput,\n threadId: ctx.threadId,\n });\n\n // Apply identity links for cross-platform user merging\n const identityLinks = config.session?.identityLinks ?? {};\n const originalPeerId = ctx.isGroup ? ctx.chatId : ctx.senderId;\n const finalPeerId = applyIdentityLinks(\n originalPeerId,\n channel,\n identityLinks\n );\n \n // Rebuild session key with final peerId\n const finalSessionKey = buildSessionKey({\n agentId: route.agentId,\n source: channel,\n accountId: route.accountId,\n peerKind: ctx.isGroup ? 'group' : 'dm',\n peerId: finalPeerId,\n threadId: ctx.threadId,\n });\n\n log.debug({\n accountId: ctx.accountId,\n chatId: ctx.chatId,\n senderId: ctx.senderId,\n sessionKey: finalSessionKey,\n agentId: route.agentId,\n }, 'Generated session key with routing');\n\n return finalSessionKey;\n}\n\n/**\n * Extract member role IDs from Telegram chat member\n * (Currently returns empty array as Telegram doesn't have direct role mapping)\n */\nexport function extractMemberRoleIds(ctx: Context): string[] {\n // Telegram doesn't expose a first-class role id list like some other chat APIs\n // Could implement custom role mapping based on admin status\n const chatMember = ctx.chatMember;\n if (!chatMember?.new_chat_member) {\n return [];\n }\n\n const roles: string[] = [];\n const memberStatus = chatMember.new_chat_member.status;\n \n if (memberStatus === 'creator') {\n roles.push('telegram:creator');\n } else if (memberStatus === 'administrator') {\n roles.push('telegram:admin');\n }\n \n return roles;\n}\n"],"mappings":";;;;;;aAe4D;AAE5D,MAAM,MAAM,aAAa,kBAAkB;;;;AAqB3C,SAAgB,8BACd,KACA,QACQ;CACR,MAAM,UAAU,IAAI,WAAW;CAc/B,MAAM,QAAQ,aAAa;EACzB;EAXA;EACA,WAAW,IAAI;EACf,UAAU,IAAI,UAAU,UAAU;EAClC,QAAQ,IAAI,UAAU,IAAI,SAAS,IAAI;EACvC,SAAS,IAAI,WAAW;EACxB,QAAQ;EACR,eAAe,IAAI,iBAAiB,EAAE;EAOtC,UAAU,IAAI;EACf,CAAC;CAGF,MAAM,gBAAgB,OAAO,SAAS,iBAAiB,EAAE;CAEzD,MAAM,cAAc,mBADG,IAAI,UAAU,IAAI,SAAS,IAAI,UAGpD,SACA,cACD;CAGD,MAAM,kBAAkB,gBAAgB;EACtC,SAAS,MAAM;EACf,QAAQ;EACR,WAAW,MAAM;EACjB,UAAU,IAAI,UAAU,UAAU;EAClC,QAAQ;EACR,UAAU,IAAI;EACf,CAAC;AAEF,KAAI,MAAM;EACR,WAAW,IAAI;EACf,QAAQ,IAAI;EACZ,UAAU,IAAI;EACd,YAAY;EACZ,SAAS,MAAM;EAChB,EAAE,qCAAqC;AAExC,QAAO;;;;;;AAOT,SAAgB,qBAAqB,KAAwB;CAG3D,MAAM,aAAa,IAAI;AACvB,KAAI,CAAC,YAAY,gBACf,QAAO,EAAE;CAGX,MAAM,QAAkB,EAAE;CAC1B,MAAM,eAAe,WAAW,gBAAgB;AAEhD,KAAI,iBAAiB,UACnB,OAAM,KAAK,mBAAmB;UACrB,iBAAiB,gBAC1B,OAAM,KAAK,iBAAiB;AAG9B,QAAO"}
|