@xopcai/xopc 0.0.148 → 0.0.150
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-B5h0UGWn.js → activity-store-B3YP7y9d.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Dy5VvLUq.js → agent-avatar-dicebear-BaP05tRU.js} +1 -1
- package/dist/gateway/static/root/assets/agents-QArUBYV7.js +2 -0
- package/dist/gateway/static/root/assets/{api-B3J2AmQW.js → api-BirUfJgj.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-BbSLDubO.js → app-management-settings-panel-D5Cg_a6I.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-D9wK0UKA.js → appearance-settings-BBsAkJ56.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-D1uAUndU.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-DaDK-FYa.js → archive-plugin-D3OmrvFx.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CKiBdU_s.js → attachment-load-Cgkm_5mb.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-8Qbnxq-p.js → automation-suggestion-card-CHvxSz-t.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-BWQk03Vu.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-ByZbwN2A.js → binary-plugins-dJR5UuzL.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DGaI2ucU.js → block-editor-v4_7o92L.js} +5 -5
- package/dist/gateway/static/root/assets/browser-settings-page-SruFGuBP.js +8 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-DaPf3b5d.js → capability-presets-api-BcTjPLiD.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-settings-panel-C0iHFbY9.js → capability-presets-settings-panel-CddBf58y.js} +2 -2
- package/dist/gateway/static/root/assets/{channel-recipient-api-DrbkoYyF.js → channel-recipient-api-BbDlMRm5.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-WI5tQ5tn.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-Dt2EROlf.js +1 -0
- package/dist/gateway/static/root/assets/{connector-logo-CiHea96v.js → connector-logo-BNthqff-.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-DavHJ6rR.js +2 -0
- package/dist/gateway/static/root/assets/desktop-pet-CVajXkdj.js +1 -0
- package/dist/gateway/static/root/assets/desktop-pet-settings-SHI66eIi.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-g_N_ROC-.js → directory-picker-path-field-BdWd7m-p.js} +1 -1
- package/dist/gateway/static/root/assets/{dreaming-settings-DnEe0Mxg.js → dreaming-settings-CXDhu3Me.js} +3 -3
- package/dist/gateway/static/root/assets/{extension-debug-page-DPkoOQED.js → extension-debug-page-CLJTGozU.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-Cf_gDelx.js → extension-page-ClxpGfzA.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-YlXpJV9k.js → extension-settings-page-CDA3ZJ8k.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-BxHgXB-I.js → gateway-config-api-DpXL78pS.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-Co-mXFP_.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-ChI88pp7.js → gateway-startup-retry-D0SU7dte.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-create-dialog-ClzciTH5.js → goal-create-dialog-BO6G--Ec.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-DK8eog4h.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-NoJKU8UZ.js → goals-config-api-r71aDqix.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-AcROW97U.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-kQ1pBOM9.js → goals-settings-CZOLhkTH.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-C6jSQCXQ.js → heartbeat-settings-F9S1gIFo.js} +1 -1
- package/dist/gateway/static/root/assets/index-C46C7Xee.css +1 -0
- package/dist/gateway/static/root/assets/{index-twNrYC3D.js → index-IPmCli0N.js} +70 -70
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CIQ6wLqH.js → keyboard-shortcuts-settings-B3CUVfZ8.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-HVq6NUvQ.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-BO6odwNn.js → local-apps-page-n7YJfRkU.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-BP67jtYG.js → locale-store-BvcHGPHU.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-Dgko6r04.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-DbJZwtmM.js → markdown-split-1mnXr-JA.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-B0WH561o.js → media-plugins-D2bcxXrT.js} +1 -1
- package/dist/gateway/static/root/assets/messages-BH7paqYt.js +5 -0
- package/dist/gateway/static/root/assets/models-hub-panel-DD0cEfmR.js +2 -0
- package/dist/gateway/static/root/assets/{notes-page-B72S7M1Z.js → notes-page-Wjc2utlj.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-BkA2yg9K.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-LjSEtOvG.js → page-tabs-vdljrKuG.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-Cn8Jp9jw.js → preview-open-alternatives-BHki0l-E.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-CXwVNLgg.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DlfvNcLh.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-BQyEX2Ui.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-BDUPII5R.js → save-bar-controls-Vy4EmvEh.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-B1NY9MNs.js → schedule-field-CVcwC7k_.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-CnsFMun1.js → schema-form-DhMA1vkR.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-CqQEW8oT.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-M8fleFSc.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-D9jJ6KlR.js → settings-collapsible-section-C0xcL0vB.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-36IjMuUY.js → settings-form-section-Cgj4iVpx.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-DyYMmawg.js → settings-loading-skeleton-CC_NmD69.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-yv4TeHfF.js → settings-page-B7_JZ2rM.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-BAP5LguT.js → settings-page-layout-CKuQT4SG.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DvR8Y5YN.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-BBxZ9lX5.js → share-preview-page-BmVw-6SJ.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-C0JYYhGx.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DBFBczqN.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-KAI9qBDD.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-B3ceUo4i.js → system-settings-panel-D6d8VAk8.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-_efiWyB8.js → theme-store-EbMQ3TYi.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-Dp1PvxGZ.js → typed-models-lib-D63hJX-S.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-XHelnCa_.js → use-channel-catalog-D-I-qki9.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-Cuft-EbR.js +1 -0
- package/dist/gateway/static/root/assets/{user-profile-fields-editor-nOOg0uBi.js → user-profile-fields-editor-CPaoS8Zl.js} +1 -1
- package/dist/gateway/static/root/assets/{user-profile-settings-panel-9fBPCoA9.js → user-profile-settings-panel-Bs13qcx1.js} +1 -1
- package/dist/gateway/static/root/assets/{utils-3AORlPIm.js → utils-3mnkFvPw.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-C716UEi9.js +1 -0
- package/dist/gateway/static/root/assets/work-discovery-page-CFSkHa0v.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-DaapBdoZ.js +1 -0
- package/dist/gateway/static/root/assets/work-page-DMtX92vs.js +1 -0
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-B9FnZNWZ.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-BgvE0_Iv.js +11 -0
- package/dist/gateway/static/root/favicon.svg +1 -187
- package/dist/gateway/static/root/index.html +7 -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.js +0 -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 +0 -2
- 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.js +0 -2
- package/dist/src/agent/tools/apply-patch.js +0 -2
- package/dist/src/agent/tools/automation-tool.js +0 -2
- 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.js +0 -2
- 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.js +0 -2
- 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 +0 -2
- package/dist/src/agent/tools/write.js +0 -2
- package/dist/src/agent/tools/xopc-use-tool.js +0 -2
- 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 +1 -3
- 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 +1 -3
- 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 +1 -3
- 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 +32 -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 +0 -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/046_work_discovery_feedback.sql +13 -0
- 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.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -5
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- 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 +1 -3
- 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 +23 -6
- package/dist/src/work-discovery/index.js +2 -2
- package/dist/src/work-discovery/probe.d.ts +6 -0
- package/dist/src/work-discovery/probe.js +12 -3
- package/dist/src/work-discovery/repository.d.ts +7 -1
- package/dist/src/work-discovery/repository.js +35 -4
- package/dist/src/work-discovery/service.d.ts +6 -1
- package/dist/src/work-discovery/service.js +64 -7
- package/dist/src/work-discovery/types.d.ts +21 -0
- 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 +0 -2
- 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 +41 -11
- 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-Ci1U96gj.js +0 -2
- package/dist/gateway/static/root/assets/apps-page-Z6cQTPS6.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-D7HmeFdr.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-BZ25v96s.js +0 -8
- package/dist/gateway/static/root/assets/channels-settings-Bc7FVeqs.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-P3J5voxb.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-oi41mE3U.js +0 -2
- package/dist/gateway/static/root/assets/desktop-pet-DzdsBRdD.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-B-URlTdB.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-CGphLe9T.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-CyaLkWhd.js +0 -4
- package/dist/gateway/static/root/assets/goals-page-C-srWhsP.js +0 -2
- package/dist/gateway/static/root/assets/index-DktduA8Z.css +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-DcaqgchY.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-B_13EkK7.js +0 -7
- package/dist/gateway/static/root/assets/messages-BIsSVgW7.js +0 -5
- package/dist/gateway/static/root/assets/models-hub-panel-DkCTjUj_.js +0 -2
- package/dist/gateway/static/root/assets/notes-workbench-CfWQczho.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-BWOTQX4M.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-C81dHQ5i.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-U1FQUBtJ.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-t6DzYLpM.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DggKrWED.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DncjFopP.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-Brx1LsY9.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-C_sLcSxh.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BPzqM78D.js +0 -2
- package/dist/gateway/static/root/assets/user-context-page-Dg_4sJJz.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-Bc-xxEHw.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-CCMe2E98.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-CnVze8sW.js +0 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-DUKlCVcY.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-1Hh-__Ur.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":"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":"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"}
|
|
@@ -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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"send-options.js","names":[],"sources":["../../../../extensions/telegram/src/send-options.ts"],"sourcesContent":["/**\n * Telegram Send Options Utilities\n *\n * Build send options for Telegram API, parse data URLs, and resolve media methods.\n * Extracted to eliminate code duplication in outbound-sender.ts\n */\n\nexport interface TelegramSendParams {\n threadId?: string;\n replyToMessageId?: string;\n silent?: boolean;\n parseMode?: 'HTML' | 'Markdown';\n caption?: string;\n}\n\nexport type TelegramMediaMethod = 'sendPhoto' | 'sendVideo' | 'sendAudio' | 'sendDocument' | 'sendVoice';\n\n/**\n * Build Telegram API send options\n * Eliminates duplicate code across multiple send paths\n */\nexport function buildSendOptions(params: TelegramSendParams): Record<string, unknown> {\n const options: Record<string, unknown> = {\n parse_mode: params.parseMode ?? 'HTML',\n };\n\n if (params.threadId) {\n options.message_thread_id = parseInt(params.threadId, 10);\n }\n\n if (params.replyToMessageId) {\n options.reply_to_message_id = parseInt(params.replyToMessageId, 10);\n }\n\n if (params.silent) {\n options.disable_notification = true;\n }\n\n if (params.caption) {\n options.caption = params.caption;\n }\n\n return options;\n}\n\n/**\n * Parse data URL into mimeType and buffer\n * Supports: data:mime/type;base64,DATA\n */\nexport function parseDataUrl(dataUrl: string): { mimeType: string; buffer: Buffer } | null {\n const match = dataUrl.match(/^data:([^;]+);base64,(.+)$/);\n if (!match) {\n return null;\n }\n\n const mimeType = match[1];\n const base64Data = match[2];\n\n // Buffer.from doesn't throw for invalid base64, it silently handles it\n const buffer = Buffer.from(base64Data, 'base64');\n return { mimeType, buffer };\n}\n\n/**\n * Resolve media method based on mime type or category\n */\nexport function resolveMediaMethod(mimeTypeOrCategory: string): TelegramMediaMethod {\n const fullNormalized = mimeTypeOrCategory.trim().toLowerCase();\n const normalized = fullNormalized.split(';')[0]?.trim() || fullNormalized;\n\n // Handle category-based resolution\n if (normalized === 'image/svg+xml') {\n return 'sendDocument';\n }\n\n if (normalized === 'image' || normalized.startsWith('image/')) {\n return 'sendPhoto';\n }\n\n if (normalized === 'video' || normalized.startsWith('video/')) {\n return 'sendVideo';\n }\n\n if (normalized === 'voice') {\n return 'sendVoice';\n }\n\n // Opus codec in OGG is typically voice\n if (fullNormalized.includes('opus')) {\n return 'sendVoice';\n }\n\n if (normalized === 'audio' || normalized.startsWith('audio/')) {\n return 'sendAudio';\n }\n\n // Default to document for unknown types\n return 'sendDocument';\n}\n"],"mappings":";;;;;AAqBA,SAAgB,iBAAiB,QAAqD;CACpF,MAAM,UAAmC,EACvC,YAAY,OAAO,aAAa,QACjC;AAED,KAAI,OAAO,SACT,SAAQ,oBAAoB,SAAS,OAAO,UAAU,GAAG;AAG3D,KAAI,OAAO,iBACT,SAAQ,sBAAsB,SAAS,OAAO,kBAAkB,GAAG;AAGrE,KAAI,OAAO,OACT,SAAQ,uBAAuB;AAGjC,KAAI,OAAO,QACT,SAAQ,UAAU,OAAO;AAG3B,QAAO;;;;;;AAOT,SAAgB,aAAa,SAA8D;CACzF,MAAM,QAAQ,QAAQ,MAAM,6BAA6B;AACzD,KAAI,CAAC,MACH,QAAO;CAGT,MAAM,WAAW,MAAM;CACvB,MAAM,aAAa,MAAM;AAIzB,QAAO;EAAE;EAAU,QADJ,OAAO,KAAK,YAAY,SACd;EAAE;;;;;AAM7B,SAAgB,mBAAmB,oBAAiD;CAClF,MAAM,iBAAiB,mBAAmB,MAAM,CAAC,aAAa;CAC9D,MAAM,aAAa,eAAe,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI;AAG3D,KAAI,eAAe,gBACjB,QAAO;AAGT,KAAI,eAAe,WAAW,WAAW,WAAW,SAAS,CAC3D,QAAO;AAGT,KAAI,eAAe,WAAW,WAAW,WAAW,SAAS,CAC3D,QAAO;AAGT,KAAI,eAAe,QACjB,QAAO;AAIT,KAAI,eAAe,SAAS,OAAO,CACjC,QAAO;AAGT,KAAI,eAAe,WAAW,WAAW,WAAW,SAAS,CAC3D,QAAO;AAIT,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sent-cache.js","names":[],"sources":["../../../../extensions/telegram/src/sent-cache.ts"],"sourcesContent":["/**\n * Sent Message Cache\n * \n * Tracks message IDs sent by the bot for:\n * - Reaction filtering (don't react to own messages)\n * - Message editing/deletion\n * - Session context tracking\n */\n\nconst DEFAULT_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours\n\ninterface CacheEntry {\n messageIds: Set<number>;\n timestamps: Map<number, number>; // messageId -> timestamp\n}\n\nexport interface SentMessageCacheOptions {\n /** Time-to-live in milliseconds */\n ttlMs?: number;\n /** Cleanup threshold - cleanup when size exceeds this */\n cleanupThreshold?: number;\n}\n\nexport class SentMessageCache {\n private cache = new Map<string, CacheEntry>();\n private ttlMs: number;\n private cleanupThreshold: number;\n\n constructor(options: SentMessageCacheOptions = {}) {\n this.ttlMs = options.ttlMs ?? DEFAULT_TTL_MS;\n this.cleanupThreshold = options.cleanupThreshold ?? 100;\n }\n\n private getChatKey(chatId: number | string): string {\n return String(chatId);\n }\n\n /**\n * Record a message ID as sent by the bot\n */\n record(chatId: number | string, messageId: number): void {\n const key = this.getChatKey(chatId);\n let entry = this.cache.get(key);\n \n if (!entry) {\n entry = { messageIds: new Set(), timestamps: new Map() };\n this.cache.set(key, entry);\n }\n\n entry.messageIds.add(messageId);\n entry.timestamps.set(messageId, Date.now());\n\n // Periodic cleanup\n if (entry.messageIds.size > this.cleanupThreshold) {\n this.cleanupEntry(entry);\n }\n }\n\n /**\n * Check if a message was sent by the bot\n */\n wasSentByBot(chatId: number | string, messageId: number): boolean {\n const key = this.getChatKey(chatId);\n const entry = this.cache.get(key);\n \n if (!entry) {\n return false;\n }\n\n // Clean up expired entries on read\n this.cleanupEntry(entry);\n \n return entry.messageIds.has(messageId);\n }\n\n /**\n * Clean up expired entries in a chat entry\n */\n private cleanupEntry(entry: CacheEntry): void {\n const now = Date.now();\n for (const [msgId, timestamp] of entry.timestamps) {\n if (now - timestamp > this.ttlMs) {\n entry.messageIds.delete(msgId);\n entry.timestamps.delete(msgId);\n }\n }\n }\n\n /**\n * Clear all entries for a chat\n */\n clearChat(chatId: number | string): void {\n this.cache.delete(this.getChatKey(chatId));\n }\n\n /**\n * Clear all entries (for testing)\n */\n clearAll(): void {\n this.cache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getStats(): { \n totalChats: number; \n totalMessages: number;\n oldestMessageAt?: Date;\n newestMessageAt?: Date;\n } {\n let totalMessages = 0;\n let oldestTimestamp = Infinity;\n let newestTimestamp = 0;\n\n for (const entry of this.cache.values()) {\n totalMessages += entry.messageIds.size;\n \n for (const timestamp of entry.timestamps.values()) {\n if (timestamp < oldestTimestamp) oldestTimestamp = timestamp;\n if (timestamp > newestTimestamp) newestTimestamp = timestamp;\n }\n }\n\n return {\n totalChats: this.cache.size,\n totalMessages,\n oldestMessageAt: oldestTimestamp !== Infinity ? new Date(oldestTimestamp) : undefined,\n newestMessageAt: newestTimestamp > 0 ? new Date(newestTimestamp) : undefined,\n };\n }\n}\n\n// Singleton instance for the application\nexport const sentMessageCache = new SentMessageCache({\n ttlMs: DEFAULT_TTL_MS,\n cleanupThreshold: 100,\n});\n"],"mappings":";;;;;;;;;AASA,MAAM,iBAAiB,OAAU,KAAK;AActC,IAAa,mBAAb,MAA8B;CAC5B,wBAAgB,IAAI,KAAyB;CAC7C;CACA;CAEA,YAAY,UAAmC,EAAE,EAAE;AACjD,OAAK,QAAQ,QAAQ,SAAS;AAC9B,OAAK,mBAAmB,QAAQ,oBAAoB;;CAGtD,WAAmB,QAAiC;AAClD,SAAO,OAAO,OAAO;;;;;CAMvB,OAAO,QAAyB,WAAyB;EACvD,MAAM,MAAM,KAAK,WAAW,OAAO;EACnC,IAAI,QAAQ,KAAK,MAAM,IAAI,IAAI;AAE/B,MAAI,CAAC,OAAO;AACV,WAAQ;IAAE,4BAAY,IAAI,KAAK;IAAE,4BAAY,IAAI,KAAK;IAAE;AACxD,QAAK,MAAM,IAAI,KAAK,MAAM;;AAG5B,QAAM,WAAW,IAAI,UAAU;AAC/B,QAAM,WAAW,IAAI,WAAW,KAAK,KAAK,CAAC;AAG3C,MAAI,MAAM,WAAW,OAAO,KAAK,iBAC/B,MAAK,aAAa,MAAM;;;;;CAO5B,aAAa,QAAyB,WAA4B;EAChE,MAAM,MAAM,KAAK,WAAW,OAAO;EACnC,MAAM,QAAQ,KAAK,MAAM,IAAI,IAAI;AAEjC,MAAI,CAAC,MACH,QAAO;AAIT,OAAK,aAAa,MAAM;AAExB,SAAO,MAAM,WAAW,IAAI,UAAU;;;;;CAMxC,aAAqB,OAAyB;EAC5C,MAAM,MAAM,KAAK,KAAK;AACtB,OAAK,MAAM,CAAC,OAAO,cAAc,MAAM,WACrC,KAAI,MAAM,YAAY,KAAK,OAAO;AAChC,SAAM,WAAW,OAAO,MAAM;AAC9B,SAAM,WAAW,OAAO,MAAM;;;;;;CAQpC,UAAU,QAA+B;AACvC,OAAK,MAAM,OAAO,KAAK,WAAW,OAAO,CAAC;;;;;CAM5C,WAAiB;AACf,OAAK,MAAM,OAAO;;;;;CAMpB,WAKE;EACA,IAAI,gBAAgB;EACpB,IAAI,kBAAkB;EACtB,IAAI,kBAAkB;AAEtB,OAAK,MAAM,SAAS,KAAK,MAAM,QAAQ,EAAE;AACvC,oBAAiB,MAAM,WAAW;AAElC,QAAK,MAAM,aAAa,MAAM,WAAW,QAAQ,EAAE;AACjD,QAAI,YAAY,gBAAiB,mBAAkB;AACnD,QAAI,YAAY,gBAAiB,mBAAkB;;;AAIvD,SAAO;GACL,YAAY,KAAK,MAAM;GACvB;GACA,iBAAiB,oBAAoB,WAAW,IAAI,KAAK,gBAAgB,GAAG,KAAA;GAC5E,iBAAiB,kBAAkB,IAAI,IAAI,KAAK,gBAAgB,GAAG,KAAA;GACpE;;;AAKL,MAAa,mBAAmB,IAAI,iBAAiB;CACnD,OAAO;CACP,kBAAkB;CACnB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"startup-errors.js","names":[],"sources":["../../../../extensions/telegram/src/startup-errors.ts"],"sourcesContent":["/** Detect Telegram Bot API 401 Unauthorized (invalid/revoked token). */\nexport function isTelegramUnauthorizedTokenError(err: unknown): boolean {\n const text = extractErrorText(err);\n if (!text) return false;\n if (/401/.test(text) && /unauthorized/i.test(text)) return true;\n if (/401:\\s*Unauthorized/i.test(text)) return true;\n return false;\n}\n\nexport function formatTelegramStartupError(err: unknown): string {\n const text = extractErrorText(err);\n if (isTelegramUnauthorizedTokenError(err)) {\n return 'Telegram bot token rejected (401 Unauthorized). Check the token with BotFather or update tokenFile.';\n }\n return text || 'Unknown startup error';\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":";;AACA,SAAgB,iCAAiC,KAAuB;CACtE,MAAM,OAAO,iBAAiB,IAAI;AAClC,KAAI,CAAC,KAAM,QAAO;AAClB,KAAI,MAAM,KAAK,KAAK,IAAI,gBAAgB,KAAK,KAAK,CAAE,QAAO;AAC3D,KAAI,uBAAuB,KAAK,KAAK,CAAE,QAAO;AAC9C,QAAO;;AAGT,SAAgB,2BAA2B,KAAsB;CAC/D,MAAM,OAAO,iBAAiB,IAAI;AAClC,KAAI,iCAAiC,IAAI,CACvC,QAAO;AAET,QAAO,QAAQ;;AAGjB,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":"telegram-actions.js","names":[],"sources":["../../../../extensions/telegram/src/telegram-actions.ts"],"sourcesContent":["import type { Bot } from 'grammy';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\n\nconst log = createLogger('TelegramActions');\n\nexport async function telegramSetReaction(params: {\n bot: Bot;\n chatId: string;\n messageId: number;\n emoji: string;\n}): Promise<boolean> {\n try {\n await params.bot.api.setMessageReaction(params.chatId, params.messageId, [\n { type: 'emoji', emoji: params.emoji as '👍' },\n ]);\n return true;\n } catch (err) {\n log.warn({ err, chatId: params.chatId, messageId: params.messageId }, 'setMessageReaction failed');\n return false;\n }\n}\n\nexport async function telegramEditMessage(params: {\n bot: Bot;\n chatId: string;\n messageId: number;\n text: string;\n}): Promise<boolean> {\n try {\n await params.bot.api.editMessageText(params.chatId, params.messageId, params.text);\n return true;\n } catch (err) {\n log.warn({ err, chatId: params.chatId, messageId: params.messageId }, 'editMessageText failed');\n return false;\n }\n}\n\nexport async function telegramDeleteMessage(params: {\n bot: Bot;\n chatId: string;\n messageId: number;\n}): Promise<boolean> {\n try {\n await params.bot.api.deleteMessage(params.chatId, params.messageId);\n return true;\n } catch (err) {\n log.warn({ err, chatId: params.chatId, messageId: params.messageId }, 'deleteMessage failed');\n return false;\n }\n}\n\nexport async function telegramSendPoll(params: {\n bot: Bot;\n chatId: string;\n question: string;\n options: string[];\n threadId?: number;\n}): Promise<number | undefined> {\n try {\n const result = await params.bot.api.sendPoll(params.chatId, params.question, params.options, {\n ...(params.threadId ? { message_thread_id: params.threadId } : {}),\n is_anonymous: true,\n });\n return result.message_id;\n } catch (err) {\n log.warn({ err, chatId: params.chatId }, 'sendPoll failed');\n return undefined;\n }\n}\n"],"mappings":";;;aAC4D;AAE5D,MAAM,MAAM,aAAa,kBAAkB;AAE3C,eAAsB,oBAAoB,QAKrB;AACnB,KAAI;AACF,QAAM,OAAO,IAAI,IAAI,mBAAmB,OAAO,QAAQ,OAAO,WAAW,CACvE;GAAE,MAAM;GAAS,OAAO,OAAO;GAAe,CAC/C,CAAC;AACF,SAAO;UACA,KAAK;AACZ,MAAI,KAAK;GAAE;GAAK,QAAQ,OAAO;GAAQ,WAAW,OAAO;GAAW,EAAE,4BAA4B;AAClG,SAAO;;;AAIX,eAAsB,oBAAoB,QAKrB;AACnB,KAAI;AACF,QAAM,OAAO,IAAI,IAAI,gBAAgB,OAAO,QAAQ,OAAO,WAAW,OAAO,KAAK;AAClF,SAAO;UACA,KAAK;AACZ,MAAI,KAAK;GAAE;GAAK,QAAQ,OAAO;GAAQ,WAAW,OAAO;GAAW,EAAE,yBAAyB;AAC/F,SAAO;;;AAIX,eAAsB,sBAAsB,QAIvB;AACnB,KAAI;AACF,QAAM,OAAO,IAAI,IAAI,cAAc,OAAO,QAAQ,OAAO,UAAU;AACnE,SAAO;UACA,KAAK;AACZ,MAAI,KAAK;GAAE;GAAK,QAAQ,OAAO;GAAQ,WAAW,OAAO;GAAW,EAAE,uBAAuB;AAC7F,SAAO;;;AAIX,eAAsB,iBAAiB,QAMP;AAC9B,KAAI;AAKF,UAAO,MAJc,OAAO,IAAI,IAAI,SAAS,OAAO,QAAQ,OAAO,UAAU,OAAO,SAAS;GAC3F,GAAI,OAAO,WAAW,EAAE,mBAAmB,OAAO,UAAU,GAAG,EAAE;GACjE,cAAc;GACf,CAAC,EACY;UACP,KAAK;AACZ,MAAI,KAAK;GAAE;GAAK,QAAQ,OAAO;GAAQ,EAAE,kBAAkB;AAC3D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"telegram-draft-errors.js","names":[],"sources":["../../../../extensions/telegram/src/telegram-draft-errors.ts"],"sourcesContent":["/**\n * Error classification for Telegram draft streaming.\n */\n\nexport function extractTelegramErrorText(err: unknown): string {\n return typeof err === 'string'\n ? err\n : err instanceof Error\n ? err.message\n : typeof err === 'object' && err && 'description' in err\n ? typeof (err as { description?: unknown }).description === 'string'\n ? (err as { description: string }).description\n : ''\n : '';\n}\n\nexport function shouldFallbackFromDraftTransport(err: unknown): boolean {\n const text = extractTelegramErrorText(err);\n if (!/sendMessageDraft/i.test(text)) {\n return false;\n }\n return (\n /(unknown method|method .*not (found|available|supported)|unsupported)/i.test(text) ||\n /(can't be used|can be used only)/i.test(text)\n );\n}\n\nconst THREAD_NOT_FOUND_RE =\n /400:\\s*Bad Request:\\s*message thread not found/i;\n\nexport function isTelegramThreadNotFoundError(err: unknown): boolean {\n return THREAD_NOT_FOUND_RE.test(extractTelegramErrorText(err));\n}\n\nexport function isSafeToRetrySendError(err: unknown): boolean {\n const text = extractTelegramErrorText(err);\n return /ECONNRESET|ETIMEDOUT|ENOTFOUND|ENETUNREACH|EAI_AGAIN|socket hang up/i.test(text);\n}\n\nexport function isTelegramClientRejection(err: unknown): boolean {\n const text = extractTelegramErrorText(err);\n return /400:\\s*Bad Request|403:|404:/i.test(text);\n}\n"],"mappings":";;;;AAIA,SAAgB,yBAAyB,KAAsB;AAC7D,QAAO,OAAO,QAAQ,WAClB,MACA,eAAe,QACb,IAAI,UACJ,OAAO,QAAQ,YAAY,OAAO,iBAAiB,MACjD,OAAQ,IAAkC,gBAAgB,WACvD,IAAgC,cACjC,KACF;;AAGV,SAAgB,iCAAiC,KAAuB;CACtE,MAAM,OAAO,yBAAyB,IAAI;AAC1C,KAAI,CAAC,oBAAoB,KAAK,KAAK,CACjC,QAAO;AAET,QACE,yEAAyE,KAAK,KAAK,IACnF,oCAAoC,KAAK,KAAK;;AAIlD,MAAM,sBACJ;AAEF,SAAgB,8BAA8B,KAAuB;AACnE,QAAO,oBAAoB,KAAK,yBAAyB,IAAI,CAAC;;AAGhE,SAAgB,uBAAuB,KAAuB;CAC5D,MAAM,OAAO,yBAAyB,IAAI;AAC1C,QAAO,uEAAuE,KAAK,KAAK;;AAG1F,SAAgB,0BAA0B,KAAuB;CAC/D,MAAM,OAAO,yBAAyB,IAAI;AAC1C,QAAO,gCAAgC,KAAK,KAAK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"thread-bindings.js","names":[],"sources":["../../../../extensions/telegram/src/thread-bindings.ts"],"sourcesContent":["/**\n * Thread bindings (/focus) — scaffold for OpenClaw parity (Phase 4).\n * Full implementation requires subagent spawn + session focus routing.\n */\n\nexport interface TelegramThreadBinding {\n sessionKey: string;\n chatId: string;\n threadId?: string;\n createdAtMs: number;\n lastActivityMs: number;\n}\n\nconst bindings = new Map<string, TelegramThreadBinding>();\n\nfunction bindingKey(chatId: string, threadId?: string): string {\n return threadId ? `${chatId}:topic:${threadId}` : chatId;\n}\n\nexport function setTelegramThreadBinding(binding: TelegramThreadBinding): void {\n bindings.set(bindingKey(binding.chatId, binding.threadId), binding);\n}\n\nexport function getTelegramThreadBinding(chatId: string, threadId?: string): TelegramThreadBinding | undefined {\n return bindings.get(bindingKey(chatId, threadId));\n}\n\nexport function clearTelegramThreadBinding(chatId: string, threadId?: string): void {\n bindings.delete(bindingKey(chatId, threadId));\n}\n\nexport function sweepIdleTelegramThreadBindings(idleTimeoutMs: number): void {\n const now = Date.now();\n for (const [key, binding] of bindings) {\n if (now - binding.lastActivityMs > idleTimeoutMs) {\n bindings.delete(key);\n }\n }\n}\n"],"mappings":";AAaA,MAAM,2BAAW,IAAI,KAAoC;AAEzD,SAAS,WAAW,QAAgB,UAA2B;AAC7D,QAAO,WAAW,GAAG,OAAO,SAAS,aAAa;;AAGpD,SAAgB,yBAAyB,SAAsC;AAC7E,UAAS,IAAI,WAAW,QAAQ,QAAQ,QAAQ,SAAS,EAAE,QAAQ;;AAGrE,SAAgB,yBAAyB,QAAgB,UAAsD;AAC7G,QAAO,SAAS,IAAI,WAAW,QAAQ,SAAS,CAAC;;AAGnD,SAAgB,2BAA2B,QAAgB,UAAyB;AAClF,UAAS,OAAO,WAAW,QAAQ,SAAS,CAAC;;AAG/C,SAAgB,gCAAgC,eAA6B;CAC3E,MAAM,MAAM,KAAK,KAAK;AACtB,MAAK,MAAM,CAAC,KAAK,YAAY,SAC3B,KAAI,MAAM,QAAQ,iBAAiB,cACjC,UAAS,OAAO,IAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"timeout-abort.js","names":[],"sources":["../../../../extensions/telegram/src/timeout-abort.ts"],"sourcesContent":["import { AbortController } from 'abort-controller';\n\n/** grammY `Api` expects `abort-controller` signals, not Node/DOM `AbortSignal.timeout()`. */\nexport function createTimeoutAbortSignal(ms: number): {\n signal: InstanceType<typeof AbortController>['signal'];\n dispose: () => void;\n} {\n const ac = new AbortController();\n const t = setTimeout(() => ac.abort(), ms);\n return {\n signal: ac.signal,\n dispose: () => clearTimeout(t),\n };\n}\n"],"mappings":";;;AAGA,SAAgB,yBAAyB,IAGvC;CACA,MAAM,KAAK,IAAI,iBAAiB;CAChC,MAAM,IAAI,iBAAiB,GAAG,OAAO,EAAE,GAAG;AAC1C,QAAO;EACL,QAAQ,GAAG;EACX,eAAe,aAAa,EAAE;EAC/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"token-resolver.js","names":[],"sources":["../../../../extensions/telegram/src/token-resolver.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\n\n/** Resolve bot token from inline value or tokenFile path. */\nexport function resolveTelegramBotToken(params: {\n botToken?: string;\n tokenFile?: string;\n}): { token: string; source: 'inline' | 'file' | 'none' } {\n const inline = params.botToken?.trim() ?? '';\n if (inline) {\n return { token: inline, source: 'inline' };\n }\n const filePath = params.tokenFile?.trim();\n if (!filePath) {\n return { token: '', source: 'none' };\n }\n try {\n const raw = readFileSync(filePath, 'utf8').trim();\n return raw ? { token: raw, source: 'file' } : { token: '', source: 'none' };\n } catch {\n return { token: '', source: 'none' };\n }\n}\n"],"mappings":";;;AAGA,SAAgB,wBAAwB,QAGkB;CACxD,MAAM,SAAS,OAAO,UAAU,MAAM,IAAI;AAC1C,KAAI,OACF,QAAO;EAAE,OAAO;EAAQ,QAAQ;EAAU;CAE5C,MAAM,WAAW,OAAO,WAAW,MAAM;AACzC,KAAI,CAAC,SACH,QAAO;EAAE,OAAO;EAAI,QAAQ;EAAQ;AAEtC,KAAI;EACF,MAAM,MAAM,aAAa,UAAU,OAAO,CAAC,MAAM;AACjD,SAAO,MAAM;GAAE,OAAO;GAAK,QAAQ;GAAQ,GAAG;GAAE,OAAO;GAAI,QAAQ;GAAQ;SACrE;AACN,SAAO;GAAE,OAAO;GAAI,QAAQ;GAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-offset-store.js","names":[],"sources":["../../../../extensions/telegram/src/update-offset-store.ts"],"sourcesContent":["import { mkdirSync, readFileSync, writeFileSync, renameSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { resolveStateDir } from '@xopcai/xopc/config/paths.js';\n\nconst STORE_VERSION = 2;\n\ntype TelegramUpdateOffsetState = {\n version: number;\n lastUpdateId: number | null;\n botId: string | null;\n};\n\nfunction normalizeAccountId(accountId?: string): string {\n const trimmed = accountId?.trim();\n if (!trimmed) return 'default';\n return trimmed.replace(/[^a-z0-9._-]+/gi, '_');\n}\n\nfunction resolveOffsetPath(accountId?: string): string {\n const stateDir = resolveStateDir();\n const dir = join(stateDir, 'telegram');\n mkdirSync(dir, { recursive: true });\n return join(dir, `update-offset-${normalizeAccountId(accountId)}.json`);\n}\n\nfunction extractBotIdFromToken(token?: string): string | null {\n const trimmed = token?.trim();\n if (!trimmed) return null;\n const [rawBotId] = trimmed.split(':', 1);\n if (!rawBotId || !/^\\d+$/.test(rawBotId)) return null;\n return rawBotId;\n}\n\nfunction safeParseState(raw: string): TelegramUpdateOffsetState | null {\n try {\n const parsed = JSON.parse(raw) as {\n version?: number;\n lastUpdateId?: number | null;\n botId?: string | null;\n };\n if (parsed?.version !== STORE_VERSION && parsed?.version !== 1) return null;\n if (parsed.lastUpdateId != null && (!Number.isSafeInteger(parsed.lastUpdateId) || parsed.lastUpdateId < 0)) {\n return null;\n }\n return {\n version: STORE_VERSION,\n lastUpdateId: parsed.lastUpdateId ?? null,\n botId: parsed.version === STORE_VERSION ? (parsed.botId ?? null) : null,\n };\n } catch {\n return null;\n }\n}\n\nexport function readTelegramUpdateOffset(params: {\n accountId?: string;\n botToken?: string;\n}): number | undefined {\n const path = resolveOffsetPath(params.accountId);\n try {\n const raw = readFileSync(path, 'utf8');\n const state = safeParseState(raw);\n if (!state || state.lastUpdateId == null) return undefined;\n const botId = extractBotIdFromToken(params.botToken);\n if (state.botId && botId && state.botId !== botId) return undefined;\n return state.lastUpdateId;\n } catch {\n return undefined;\n }\n}\n\nexport function writeTelegramUpdateOffset(params: {\n accountId?: string;\n botToken?: string;\n lastUpdateId: number;\n}): void {\n if (!Number.isSafeInteger(params.lastUpdateId) || params.lastUpdateId < 0) return;\n const path = resolveOffsetPath(params.accountId);\n const tmp = `${path}.tmp`;\n const state: TelegramUpdateOffsetState = {\n version: STORE_VERSION,\n lastUpdateId: params.lastUpdateId,\n botId: extractBotIdFromToken(params.botToken),\n };\n writeFileSync(tmp, JSON.stringify(state, null, 2), 'utf8');\n renameSync(tmp, path);\n}\n"],"mappings":";;;;;YAE+D;AAE/D,MAAM,gBAAgB;AAQtB,SAAS,mBAAmB,WAA4B;CACtD,MAAM,UAAU,WAAW,MAAM;AACjC,KAAI,CAAC,QAAS,QAAO;AACrB,QAAO,QAAQ,QAAQ,mBAAmB,IAAI;;AAGhD,SAAS,kBAAkB,WAA4B;CAErD,MAAM,MAAM,KADK,iBACQ,EAAE,WAAW;AACtC,WAAU,KAAK,EAAE,WAAW,MAAM,CAAC;AACnC,QAAO,KAAK,KAAK,iBAAiB,mBAAmB,UAAU,CAAC,OAAO;;AAGzE,SAAS,sBAAsB,OAA+B;CAC5D,MAAM,UAAU,OAAO,MAAM;AAC7B,KAAI,CAAC,QAAS,QAAO;CACrB,MAAM,CAAC,YAAY,QAAQ,MAAM,KAAK,EAAE;AACxC,KAAI,CAAC,YAAY,CAAC,QAAQ,KAAK,SAAS,CAAE,QAAO;AACjD,QAAO;;AAGT,SAAS,eAAe,KAA+C;AACrE,KAAI;EACF,MAAM,SAAS,KAAK,MAAM,IAAI;AAK9B,MAAI,QAAQ,YAAY,iBAAiB,QAAQ,YAAY,EAAG,QAAO;AACvE,MAAI,OAAO,gBAAgB,SAAS,CAAC,OAAO,cAAc,OAAO,aAAa,IAAI,OAAO,eAAe,GACtG,QAAO;AAET,SAAO;GACL,SAAS;GACT,cAAc,OAAO,gBAAgB;GACrC,OAAO,OAAO,YAAY,gBAAiB,OAAO,SAAS,OAAQ;GACpE;SACK;AACN,SAAO;;;AAIX,SAAgB,yBAAyB,QAGlB;CACrB,MAAM,OAAO,kBAAkB,OAAO,UAAU;AAChD,KAAI;EAEF,MAAM,QAAQ,eADF,aAAa,MAAM,OACC,CAAC;AACjC,MAAI,CAAC,SAAS,MAAM,gBAAgB,KAAM,QAAO,KAAA;EACjD,MAAM,QAAQ,sBAAsB,OAAO,SAAS;AACpD,MAAI,MAAM,SAAS,SAAS,MAAM,UAAU,MAAO,QAAO,KAAA;AAC1D,SAAO,MAAM;SACP;AACN;;;AAIJ,SAAgB,0BAA0B,QAIjC;AACP,KAAI,CAAC,OAAO,cAAc,OAAO,aAAa,IAAI,OAAO,eAAe,EAAG;CAC3E,MAAM,OAAO,kBAAkB,OAAO,UAAU;CAChD,MAAM,MAAM,GAAG,KAAK;CACpB,MAAM,QAAmC;EACvC,SAAS;EACT,cAAc,OAAO;EACrB,OAAO,sBAAsB,OAAO,SAAS;EAC9C;AACD,eAAc,KAAK,KAAK,UAAU,OAAO,MAAM,EAAE,EAAE,OAAO;AAC1D,YAAW,KAAK,KAAK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-progress.js","names":[],"sources":["../../../../extensions/telegram/src/workflow-progress.ts"],"sourcesContent":["/**\n * Telegram capability for the {@link WorkflowProgressBroker}.\n *\n * Strategy: send the first progress update as a fresh message, then edit it in\n * place on every subsequent update. The broker enforces per-channel throttle\n * (default 5 s) and bypasses it for key events (phase change / new error /\n * tool_end), so users always see milestones promptly without us hammering\n * Telegram's edit rate limit.\n *\n * Failure handling is intentionally narrow:\n * - `message is not modified` from `editMessageText` → swallow (it's a\n * no-op the broker shouldn't retry).\n * - Lost / inaccessible message during edit → fall back to a new send so\n * the user always sees the latest snapshot.\n * - 429 / network → bubble up, broker logs and drops the update; the next\n * scheduled (or key) tick will retry.\n *\n * We deliberately use plain text (no parse_mode) — the snapshot renderer\n * emits ASCII-friendly output and we don't want HTML/markdown surprises with\n * `<` in agent labels or shell-style payloads.\n */\n\nimport type { ChannelProgressCapability, WorkflowProgressPostInput } from '@xopcai/xopc/agent/workflow/channel-capability.js';\nimport { parseSessionKey } from '@xopcai/xopc/routing/session-key.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\n\nimport type { TelegramAccountManager } from './account-manager.js';\n\nconst log = createLogger('TelegramWorkflowProgress');\n\n/** Telegram bot API: 4096 char hard cap; leave 96 chars of headroom for re-renders. */\nconst TELEGRAM_TEXT_MAX = 4000;\n\n/** Telegram bot edit rate ≈ 1/s per chat; broker default 5 s leaves ample headroom. */\nconst DEFAULT_THROTTLE_MS = 5_000;\n\nexport function createTelegramWorkflowProgressCapability(\n accountManager: TelegramAccountManager,\n): ChannelProgressCapability {\n return {\n channelId: 'telegram',\n supportsEdit: true,\n defaultThrottleMs: DEFAULT_THROTTLE_MS,\n defaultMode: 'edit',\n\n async postProgress(input: WorkflowProgressPostInput) {\n const target = resolveTarget(input.sessionKey);\n if (!target) {\n throw new Error(`telegram workflow progress: cannot route sessionKey \"${input.sessionKey}\"`);\n }\n const bot = accountManager.getBot(target.accountId);\n if (!bot) {\n throw new Error(\n `telegram workflow progress: no bot for accountId \"${target.accountId}\" (sessionKey \"${input.sessionKey}\")`,\n );\n }\n\n const text = clampForTelegram(input.text);\n\n // Edit-in-place when we have a previous message id and we're not on the\n // final send (final could be substantially longer; sending fresh keeps\n // the conclusion visible even when scrolled past the streaming bubble).\n if (input.previousMessageId && !input.isFinal) {\n try {\n await bot.api.editMessageText(\n target.chatId,\n Number(input.previousMessageId),\n text,\n );\n return { messageId: input.previousMessageId };\n } catch (err) {\n if (isMessageNotModified(err)) {\n // Snapshot rendered identically to the last edit (e.g. only\n // running spinner ticked) — silently keep the same message id.\n return { messageId: input.previousMessageId };\n }\n if (isEditTargetGone(err)) {\n log.debug(\n { sessionKey: input.sessionKey, previousMessageId: input.previousMessageId },\n 'edit target gone; falling back to sendMessage',\n );\n // fall through to the send path below\n } else {\n throw err;\n }\n }\n }\n\n const sent = await bot.api.sendMessage(target.chatId, text, {\n message_thread_id: target.threadId ? Number(target.threadId) : undefined,\n disable_notification: !input.isFinal,\n });\n return { messageId: String(sent.message_id) };\n },\n };\n}\n\ninterface ResolvedTarget {\n accountId: string;\n chatId: string;\n threadId?: string;\n}\n\nfunction resolveTarget(sessionKey: string): ResolvedTarget | null {\n const parsed = parseSessionKey(sessionKey);\n if (!parsed) return null;\n if (parsed.source !== 'telegram') return null;\n if (!parsed.peerId) return null;\n return {\n accountId: parsed.accountId,\n chatId: parsed.peerId,\n threadId: parsed.threadId,\n };\n}\n\nfunction clampForTelegram(text: string): string {\n if (text.length <= TELEGRAM_TEXT_MAX) return text;\n return `${text.slice(0, TELEGRAM_TEXT_MAX - 1)}…`;\n}\n\nfunction isMessageNotModified(err: unknown): boolean {\n const msg = errorMessage(err).toLowerCase();\n return msg.includes('message is not modified');\n}\n\nfunction isEditTargetGone(err: unknown): boolean {\n const msg = errorMessage(err).toLowerCase();\n return (\n msg.includes('message to edit not found') ||\n msg.includes(\"message can't be edited\") ||\n msg.includes('chat not found')\n );\n}\n\nfunction errorMessage(err: unknown): string {\n if (!err) return '';\n if (err instanceof Error) return err.message;\n return String(err);\n}\n"],"mappings":";;;;kBAuBsE;aACV;AAI5D,MAAM,MAAM,aAAa,2BAA2B;;AAGpD,MAAM,oBAAoB;;AAG1B,MAAM,sBAAsB;AAE5B,SAAgB,yCACd,gBAC2B;AAC3B,QAAO;EACL,WAAW;EACX,cAAc;EACd,mBAAmB;EACnB,aAAa;EAEb,MAAM,aAAa,OAAkC;GACnD,MAAM,SAAS,cAAc,MAAM,WAAW;AAC9C,OAAI,CAAC,OACH,OAAM,IAAI,MAAM,wDAAwD,MAAM,WAAW,GAAG;GAE9F,MAAM,MAAM,eAAe,OAAO,OAAO,UAAU;AACnD,OAAI,CAAC,IACH,OAAM,IAAI,MACR,qDAAqD,OAAO,UAAU,iBAAiB,MAAM,WAAW,IACzG;GAGH,MAAM,OAAO,iBAAiB,MAAM,KAAK;AAKzC,OAAI,MAAM,qBAAqB,CAAC,MAAM,QACpC,KAAI;AACF,UAAM,IAAI,IAAI,gBACZ,OAAO,QACP,OAAO,MAAM,kBAAkB,EAC/B,KACD;AACD,WAAO,EAAE,WAAW,MAAM,mBAAmB;YACtC,KAAK;AACZ,QAAI,qBAAqB,IAAI,CAG3B,QAAO,EAAE,WAAW,MAAM,mBAAmB;AAE/C,QAAI,iBAAiB,IAAI,CACvB,KAAI,MACF;KAAE,YAAY,MAAM;KAAY,mBAAmB,MAAM;KAAmB,EAC5E,gDACD;QAGD,OAAM;;GAKZ,MAAM,OAAO,MAAM,IAAI,IAAI,YAAY,OAAO,QAAQ,MAAM;IAC1D,mBAAmB,OAAO,WAAW,OAAO,OAAO,SAAS,GAAG,KAAA;IAC/D,sBAAsB,CAAC,MAAM;IAC9B,CAAC;AACF,UAAO,EAAE,WAAW,OAAO,KAAK,WAAW,EAAE;;EAEhD;;AASH,SAAS,cAAc,YAA2C;CAChE,MAAM,SAAS,gBAAgB,WAAW;AAC1C,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,OAAO,WAAW,WAAY,QAAO;AACzC,KAAI,CAAC,OAAO,OAAQ,QAAO;AAC3B,QAAO;EACL,WAAW,OAAO;EAClB,QAAQ,OAAO;EACf,UAAU,OAAO;EAClB;;AAGH,SAAS,iBAAiB,MAAsB;AAC9C,KAAI,KAAK,UAAU,kBAAmB,QAAO;AAC7C,QAAO,GAAG,KAAK,MAAM,GAAG,oBAAoB,EAAE,CAAC;;AAGjD,SAAS,qBAAqB,KAAuB;AAEnD,QADY,aAAa,IAAI,CAAC,aACpB,CAAC,SAAS,0BAA0B;;AAGhD,SAAS,iBAAiB,KAAuB;CAC/C,MAAM,MAAM,aAAa,IAAI,CAAC,aAAa;AAC3C,QACE,IAAI,SAAS,4BAA4B,IACzC,IAAI,SAAS,0BAA0B,IACvC,IAAI,SAAS,iBAAiB;;AAIlC,SAAS,aAAa,KAAsB;AAC1C,KAAI,CAAC,IAAK,QAAO;AACjB,KAAI,eAAe,MAAO,QAAO,IAAI;AACrC,QAAO,OAAO,IAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboard-cli.js","names":[],"sources":["../../../../../extensions/weixin/src/adapters/onboard-cli.ts"],"sourcesContent":["/**\n * Weixin interactive onboarding — {@link ChannelOnboardAdapter} (QR scan).\n */\n\nimport { confirm } from '@inquirer/prompts';\n\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { ChannelOnboardAdapter } from '@xopcai/xopc/channels/plugins/types.adapters.js';\nimport { resolveConfigPath } from '@xopcai/xopc/config/paths.js';\n\nimport { resolveWeixinAccount, listWeixinAccountIds } from '../auth/accounts.js';\nimport { mergeWeixinConfigAfterLogin, runWeixinQrLoginCli } from '../cli/qr-login.js';\n\nexport function isWeixinOnboardConfigured(config: Config): boolean {\n const ids = listWeixinAccountIds(config);\n for (const id of ids) {\n try {\n if (resolveWeixinAccount(config, id).configured) return true;\n } catch {\n // Skip invalid ids\n }\n }\n return false;\n}\n\nfunction resolveCliConfigPath(): string {\n return (\n process.env.XOPC_CONFIG_PATH?.trim() ||\n process.env.XOPC_CONFIG?.trim() ||\n resolveConfigPath()\n );\n}\n\nasync function configureWeixin(config: Config): Promise<Config> {\n console.log(`\\n${'='.repeat(50)}`);\n console.log('💬 Weixin (WeChat ilink)');\n console.log(`${'='.repeat(50)}\\n`);\n\n if (isWeixinOnboardConfigured(config)) {\n const rescan = await confirm({\n message: 'Weixin appears configured. Scan QR again to replace login?',\n default: false,\n });\n if (!rescan) {\n console.log('ℹ️ Weixin onboarding skipped.');\n return config;\n }\n } else {\n const proceed = await confirm({\n message: 'Log in with WeChat using a QR scan?',\n default: true,\n });\n if (!proceed) {\n console.log('ℹ️ Weixin onboarding skipped.');\n console.log(' Configure later with: xopc onboard --channels\\n');\n return config;\n }\n }\n\n const configPath = resolveCliConfigPath();\n const result = await runWeixinQrLoginCli({\n configPath,\n writeConfig: true,\n existingConfig: config,\n });\n\n if (!result.ok || !result.accountId) {\n console.log(`\\n⚠️ ${result.message || 'Weixin login did not complete.'}`);\n console.log(' You can retry from channel setup with: xopc onboard --channels\\n');\n return config;\n }\n\n const merged = mergeWeixinConfigAfterLogin(config, result.accountId);\n console.log('\\n✅ Weixin onboarding complete\\n');\n return merged;\n}\n\nexport const weixinOnboardAdapter: ChannelOnboardAdapter = {\n isConfigured: isWeixinOnboardConfigured,\n configure: configureWeixin,\n};\n"],"mappings":";;;;;;;;YAQiE;AAKjE,SAAgB,0BAA0B,QAAyB;CACjE,MAAM,MAAM,qBAAqB,OAAO;AACxC,MAAK,MAAM,MAAM,IACf,KAAI;AACF,MAAI,qBAAqB,QAAQ,GAAG,CAAC,WAAY,QAAO;SAClD;AAIV,QAAO;;AAGT,SAAS,uBAA+B;AACtC,QACE,QAAQ,IAAI,kBAAkB,MAAM,IACpC,QAAQ,IAAI,aAAa,MAAM,IAC/B,mBAAmB;;AAIvB,eAAe,gBAAgB,QAAiC;AAC9D,SAAQ,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG;AAClC,SAAQ,IAAI,2BAA2B;AACvC,SAAQ,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI;AAElC,KAAI,0BAA0B,OAAO;MAK/B,CAAC,MAJgB,QAAQ;GAC3B,SAAS;GACT,SAAS;GACV,CAAC,EACW;AACX,WAAQ,IAAI,iCAAiC;AAC7C,UAAO;;YAOL,CAAC,MAJiB,QAAQ;EAC5B,SAAS;EACT,SAAS;EACV,CAAC,EACY;AACZ,UAAQ,IAAI,iCAAiC;AAC7C,UAAQ,IAAI,qDAAqD;AACjE,SAAO;;CAKX,MAAM,SAAS,MAAM,oBAAoB;EACvC,YAFiB,sBAEP;EACV,aAAa;EACb,gBAAgB;EACjB,CAAC;AAEF,KAAI,CAAC,OAAO,MAAM,CAAC,OAAO,WAAW;AACnC,UAAQ,IAAI,SAAS,OAAO,WAAW,mCAAmC;AAC1E,UAAQ,IAAI,sEAAsE;AAClF,SAAO;;CAGT,MAAM,SAAS,4BAA4B,QAAQ,OAAO,UAAU;AACpE,SAAQ,IAAI,mCAAmC;AAC/C,QAAO;;AAGT,MAAa,uBAA8C;CACzD,cAAc;CACd,WAAW;CACZ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","names":["undiciFetch"],"sources":["../../../../../extensions/weixin/src/api/api.ts"],"sourcesContent":["import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { Agent, EnvHttpProxyAgent, type Dispatcher, fetch as undiciFetch } from \"undici\";\n\nimport { hasProxyEnv } from \"../../../../src/infra/http-proxy-env.js\";\n\nimport { logger } from \"../util/logger.js\";\nimport { redactBody, redactUrl } from \"../util/redact.js\";\n\nimport type {\n BaseInfo,\n GetUploadUrlReq,\n GetUploadUrlResp,\n GetUpdatesReq,\n GetUpdatesResp,\n SendMessageReq,\n SendMessageResp,\n SendTypingReq,\n GetConfigResp,\n} from \"./types.js\";\n\nexport type WeixinApiOptions = {\n baseUrl: string;\n token?: string;\n timeoutMs?: number;\n /** Long-poll timeout for getUpdates (server may hold the request up to this). */\n longPollTimeoutMs?: number;\n /** Optional ilink SKRouteTag (from config / account). */\n routeTag?: string;\n};\n\n// ---------------------------------------------------------------------------\n// BaseInfo — attached to every outgoing CGI request\n// ---------------------------------------------------------------------------\n\ninterface PackageJson {\n name?: string;\n version?: string;\n ilink_appid?: string;\n}\n\nfunction readPackageJson(): PackageJson {\n try {\n const dir = path.dirname(fileURLToPath(import.meta.url));\n const pkgPath = path.resolve(dir, \"..\", \"..\", \"package.json\");\n return JSON.parse(fs.readFileSync(pkgPath, \"utf-8\")) as PackageJson;\n } catch {\n return {};\n }\n}\n\nconst pkg = readPackageJson();\n\nconst CHANNEL_VERSION = pkg.version ?? \"unknown\";\n\n/** iLink-App-Id: from package.json `ilink_appid`. */\nconst ILINK_APP_ID: string = pkg.ilink_appid ?? \"\";\n\n/**\n * iLink-App-ClientVersion: uint32 encoded as 0x00MMNNPP\n * High 8 bits fixed to 0; remaining bits: major<<16 | minor<<8 | patch.\n */\nfunction buildClientVersion(version: string): number {\n const parts = version.split(\".\").map((p) => parseInt(p, 10));\n const major = parts[0] ?? 0;\n const minor = parts[1] ?? 0;\n const patch = parts[2] ?? 0;\n return ((major & 0xff) << 16) | ((minor & 0xff) << 8) | (patch & 0xff);\n}\n\nconst ILINK_APP_CLIENT_VERSION: number = buildClientVersion(pkg.version ?? \"0.0.0\");\n\n/** Build the `base_info` payload included in every API request. */\nexport function buildBaseInfo(): BaseInfo {\n return { channel_version: CHANNEL_VERSION };\n}\n\n/** Default timeout for long-poll getUpdates requests. */\nconst DEFAULT_LONG_POLL_TIMEOUT_MS = 35_000;\n/** Extra time beyond client long-poll timeout for undici `headersTimeout` (server may idle before first byte). */\nconst LONG_POLL_HEADERS_SLACK_MS = 15_000;\n/** Default timeout for regular API requests (sendMessage, getUploadUrl). */\nconst DEFAULT_API_TIMEOUT_MS = 15_000;\n/** Default timeout for lightweight API requests (getConfig, sendTyping). */\nconst DEFAULT_CONFIG_TIMEOUT_MS = 10_000;\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith(\"/\") ? url : `${url}/`;\n}\n\nfunction isUndiciHeadersTimeout(err: unknown): boolean {\n return (\n typeof err === \"object\" &&\n err !== null &&\n \"code\" in err &&\n (err as { code?: string }).code === \"UND_ERR_HEADERS_TIMEOUT\"\n );\n}\n\n/** X-WECHAT-UIN header: random uint32 -> decimal string -> base64. */\nfunction randomWechatUin(): string {\n const uint32 = crypto.randomBytes(4).readUInt32BE(0);\n return Buffer.from(String(uint32), \"utf-8\").toString(\"base64\");\n}\n\n/** Build headers shared by GET and POST requests. */\nfunction buildCommonHeaders(routeTag?: string): Record<string, string> {\n const headers: Record<string, string> = {\n \"iLink-App-Id\": ILINK_APP_ID,\n \"iLink-App-ClientVersion\": String(ILINK_APP_CLIENT_VERSION),\n };\n const tag = routeTag?.trim();\n if (tag) {\n headers.SKRouteTag = tag;\n }\n return headers;\n}\n\nfunction buildHeaders(opts: { token?: string; body: string; routeTag?: string }): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n AuthorizationType: \"ilink_bot_token\",\n \"Content-Length\": String(Buffer.byteLength(opts.body, \"utf-8\")),\n \"X-WECHAT-UIN\": randomWechatUin(),\n ...buildCommonHeaders(opts.routeTag),\n };\n if (opts.token?.trim()) {\n headers.Authorization = `Bearer ${opts.token.trim()}`;\n }\n logger.debug(\n `requestHeaders: ${JSON.stringify({ ...headers, Authorization: headers.Authorization ? \"Bearer ***\" : undefined })}`,\n );\n return headers;\n}\n\n/**\n * GET fetch wrapper (QR login and other GET endpoints).\n */\nexport async function apiGetFetch(params: {\n baseUrl: string;\n endpoint: string;\n timeoutMs?: number;\n label: string;\n routeTag?: string;\n}): Promise<string> {\n const base = ensureTrailingSlash(params.baseUrl);\n const url = new URL(params.endpoint, base);\n const hdrs = buildCommonHeaders(params.routeTag);\n logger.debug(`GET ${redactUrl(url.toString())}`);\n\n const timeoutMs = params.timeoutMs;\n const controller =\n timeoutMs != null && timeoutMs > 0 ? new AbortController() : undefined;\n const t =\n controller != null && timeoutMs != null\n ? setTimeout(() => controller.abort(), timeoutMs)\n : undefined;\n try {\n const res = await fetch(url.toString(), {\n method: \"GET\",\n headers: hdrs,\n ...(controller ? { signal: controller.signal } : {}),\n // 复用连接,避免 VPN/网络不稳定时卡住\n keepalive: true,\n });\n if (t !== undefined) clearTimeout(t);\n const rawText = await res.text();\n logger.debug(`${params.label} status=${res.status} raw=${redactBody(rawText)}`);\n if (!res.ok) {\n throw new Error(`${params.label} ${res.status}: ${rawText}`);\n }\n return rawText;\n } catch (err) {\n if (t !== undefined) clearTimeout(t);\n throw err;\n }\n}\n\n/**\n * Common POST fetch wrapper: POST JSON to a Weixin API endpoint with timeout + abort.\n */\nasync function apiPostFetch(params: {\n baseUrl: string;\n endpoint: string;\n body: string;\n token?: string;\n timeoutMs: number;\n label: string;\n routeTag?: string;\n dispatcher?: Dispatcher;\n keepalive?: boolean;\n abortSignal?: AbortSignal;\n}): Promise<string> {\n const base = ensureTrailingSlash(params.baseUrl);\n const url = new URL(params.endpoint, base);\n const hdrs = buildHeaders({ token: params.token, body: params.body, routeTag: params.routeTag });\n logger.debug(`POST ${redactUrl(url.toString())} body=${redactBody(params.body)}`);\n\n const controller = new AbortController();\n const t = setTimeout(() => controller.abort(), params.timeoutMs);\n const signal =\n params.abortSignal != null\n ? AbortSignal.any([controller.signal, params.abortSignal])\n : controller.signal;\n const keepalive = params.keepalive ?? true;\n try {\n const init: RequestInit = {\n method: \"POST\",\n headers: hdrs,\n body: params.body,\n signal,\n keepalive,\n };\n // `dispatcher` is an undici extension. Node's `fetch` types come from `undici-types`,\n // which may not match the installed undici version's `Dispatcher` type.\n if (params.dispatcher) (init as any).dispatcher = params.dispatcher;\n\n // Use undici's fetch implementation so `dispatcher` is interpreted consistently.\n const res = await undiciFetch(url.toString(), init as any);\n clearTimeout(t);\n const rawText = await res.text();\n logger.debug(`${params.label} status=${res.status} raw=${redactBody(rawText)}`);\n if (!res.ok) {\n throw new Error(`${params.label} ${res.status}: ${rawText}`);\n }\n return rawText;\n } catch (err) {\n clearTimeout(t);\n throw err;\n }\n}\n\n/**\n * Long-poll getUpdates. Server should hold the request until new messages or timeout.\n *\n * On client-side timeout (no server response within timeoutMs), returns an empty response\n * with ret=0 so the caller can simply retry. This is normal for long-poll.\n */\nexport async function getUpdates(\n params: GetUpdatesReq & {\n baseUrl: string;\n token?: string;\n timeoutMs?: number;\n routeTag?: string;\n abortSignal?: AbortSignal;\n },\n): Promise<GetUpdatesResp> {\n const timeout = params.timeoutMs ?? DEFAULT_LONG_POLL_TIMEOUT_MS;\n const headersTimeout = timeout + LONG_POLL_HEADERS_SLACK_MS;\n const agentOpts = {\n connectTimeout: 60_000,\n headersTimeout,\n bodyTimeout: headersTimeout,\n };\n const agent = hasProxyEnv() ? new EnvHttpProxyAgent(agentOpts) : new Agent(agentOpts);\n try {\n const rawText = await apiPostFetch({\n baseUrl: params.baseUrl,\n endpoint: \"ilink/bot/getupdates\",\n body: JSON.stringify({\n get_updates_buf: params.get_updates_buf ?? \"\",\n base_info: buildBaseInfo(),\n }),\n token: params.token,\n timeoutMs: timeout,\n label: \"getUpdates\",\n routeTag: params.routeTag,\n dispatcher: agent,\n keepalive: true,\n abortSignal: params.abortSignal,\n });\n const resp: GetUpdatesResp = JSON.parse(rawText);\n return resp;\n } catch (err) {\n if (params.abortSignal?.aborted && err instanceof Error && err.name === \"AbortError\") {\n throw err;\n }\n if (err instanceof Error && err.name === \"AbortError\") {\n logger.debug(`getUpdates: client-side timeout after ${timeout}ms, returning empty response`);\n return { ret: 0, msgs: [], get_updates_buf: params.get_updates_buf };\n }\n if (isUndiciHeadersTimeout(err)) {\n logger.debug(\n `getUpdates: undici headers timeout (UND_ERR_HEADERS_TIMEOUT), returning empty response`,\n );\n return { ret: 0, msgs: [], get_updates_buf: params.get_updates_buf ?? \"\" };\n }\n throw err;\n } finally {\n try {\n await agent.close();\n } catch {\n // ignore\n }\n }\n}\n\n/** Get a pre-signed CDN upload URL for a file. */\nexport async function getUploadUrl(\n params: GetUploadUrlReq & WeixinApiOptions,\n): Promise<GetUploadUrlResp> {\n const rawText = await apiPostFetch({\n baseUrl: params.baseUrl,\n endpoint: \"ilink/bot/getuploadurl\",\n body: JSON.stringify({\n filekey: params.filekey,\n media_type: params.media_type,\n to_user_id: params.to_user_id,\n rawsize: params.rawsize,\n rawfilemd5: params.rawfilemd5,\n filesize: params.filesize,\n thumb_rawsize: params.thumb_rawsize,\n thumb_rawfilemd5: params.thumb_rawfilemd5,\n thumb_filesize: params.thumb_filesize,\n no_need_thumb: params.no_need_thumb,\n aeskey: params.aeskey,\n base_info: buildBaseInfo(),\n }),\n token: params.token,\n timeoutMs: params.timeoutMs ?? DEFAULT_API_TIMEOUT_MS,\n label: \"getUploadUrl\",\n routeTag: params.routeTag,\n });\n const resp: GetUploadUrlResp = JSON.parse(rawText);\n return resp;\n}\n\nfunction assertSendMessageOk(resp: SendMessageResp): void {\n if (typeof resp.ret === \"number\" && resp.ret !== 0) {\n throw new Error(`sendMessage ret=${resp.ret} errmsg=${resp.errmsg ?? \"\"}`);\n }\n if (typeof resp.errcode === \"number\" && resp.errcode !== 0) {\n throw new Error(`sendMessage errcode=${resp.errcode} errmsg=${resp.errmsg ?? \"\"}`);\n }\n}\n\n/** Send a single message downstream. Returns parsed body (incl. refreshed `context_token` when present). */\nexport async function sendMessage(\n params: WeixinApiOptions & { body: SendMessageReq },\n): Promise<SendMessageResp> {\n const rawText = await apiPostFetch({\n baseUrl: params.baseUrl,\n endpoint: \"ilink/bot/sendmessage\",\n body: JSON.stringify({ ...params.body, base_info: buildBaseInfo() }),\n token: params.token,\n timeoutMs: params.timeoutMs ?? DEFAULT_API_TIMEOUT_MS,\n label: \"sendMessage\",\n routeTag: params.routeTag,\n });\n const t = rawText.trim();\n if (!t.startsWith(\"{\")) {\n return {};\n }\n let resp: SendMessageResp;\n try {\n resp = JSON.parse(t) as SendMessageResp;\n } catch (e) {\n throw new Error(`sendMessage invalid JSON: ${String(e)}`);\n }\n assertSendMessageOk(resp);\n return resp;\n}\n\n/** Fetch bot config (includes typing_ticket) for a given user. */\nexport async function getConfig(\n params: WeixinApiOptions & { ilinkUserId: string; contextToken?: string },\n): Promise<GetConfigResp> {\n const rawText = await apiPostFetch({\n baseUrl: params.baseUrl,\n endpoint: \"ilink/bot/getconfig\",\n body: JSON.stringify({\n ilink_user_id: params.ilinkUserId,\n context_token: params.contextToken,\n base_info: buildBaseInfo(),\n }),\n token: params.token,\n timeoutMs: params.timeoutMs ?? DEFAULT_CONFIG_TIMEOUT_MS,\n label: \"getConfig\",\n routeTag: params.routeTag,\n });\n const resp: GetConfigResp = JSON.parse(rawText);\n return resp;\n}\n\n/** Send a typing indicator to a user. */\nexport async function sendTyping(\n params: WeixinApiOptions & { body: SendTypingReq },\n): Promise<void> {\n await apiPostFetch({\n baseUrl: params.baseUrl,\n endpoint: \"ilink/bot/sendtyping\",\n body: JSON.stringify({ ...params.body, base_info: buildBaseInfo() }),\n token: params.token,\n timeoutMs: params.timeoutMs ?? DEFAULT_CONFIG_TIMEOUT_MS,\n label: \"sendTyping\",\n routeTag: params.routeTag,\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-cache.js","names":[],"sources":["../../../../../extensions/weixin/src/api/config-cache.ts"],"sourcesContent":["import { getConfig } from \"./api.js\";\n\n/** Subset of getConfig fields that we actually need; add new fields here as needed. */\nexport interface CachedConfig {\n typingTicket: string;\n}\n\nconst CONFIG_CACHE_TTL_MS = 24 * 60 * 60 * 1000;\nconst CONFIG_CACHE_INITIAL_RETRY_MS = 2_000;\nconst CONFIG_CACHE_MAX_RETRY_MS = 60 * 60 * 1000;\n\ninterface ConfigCacheEntry {\n config: CachedConfig;\n everSucceeded: boolean;\n nextFetchAt: number;\n retryDelayMs: number;\n}\n\n/**\n * Per-user getConfig cache with periodic random refresh (within 24h) and\n * exponential-backoff retry (up to 1h) on failure.\n */\nexport class WeixinConfigManager {\n private cache = new Map<string, ConfigCacheEntry>();\n\n constructor(\n private apiOpts: { baseUrl: string; token?: string; routeTag?: string },\n private log: (msg: string) => void,\n ) {}\n\n async getForUser(userId: string, contextToken?: string): Promise<CachedConfig> {\n const now = Date.now();\n const entry = this.cache.get(userId);\n const shouldFetch = !entry || now >= entry.nextFetchAt;\n\n if (shouldFetch) {\n let fetchOk = false;\n try {\n const resp = await getConfig({\n baseUrl: this.apiOpts.baseUrl,\n token: this.apiOpts.token,\n routeTag: this.apiOpts.routeTag,\n ilinkUserId: userId,\n contextToken,\n });\n if (resp.ret === 0) {\n this.cache.set(userId, {\n config: { typingTicket: resp.typing_ticket ?? \"\" },\n everSucceeded: true,\n nextFetchAt: now + Math.random() * CONFIG_CACHE_TTL_MS,\n retryDelayMs: CONFIG_CACHE_INITIAL_RETRY_MS,\n });\n this.log(\n `[weixin] config ${entry?.everSucceeded ? \"refreshed\" : \"cached\"} for ${userId}`,\n );\n fetchOk = true;\n }\n } catch (err) {\n this.log(`[weixin] getConfig failed for ${userId} (ignored): ${String(err)}`);\n }\n if (!fetchOk) {\n const prevDelay = entry?.retryDelayMs ?? CONFIG_CACHE_INITIAL_RETRY_MS;\n const nextDelay = Math.min(prevDelay * 2, CONFIG_CACHE_MAX_RETRY_MS);\n if (entry) {\n entry.nextFetchAt = now + nextDelay;\n entry.retryDelayMs = nextDelay;\n } else {\n this.cache.set(userId, {\n config: { typingTicket: \"\" },\n everSucceeded: false,\n nextFetchAt: now + CONFIG_CACHE_INITIAL_RETRY_MS,\n retryDelayMs: CONFIG_CACHE_INITIAL_RETRY_MS,\n });\n }\n }\n }\n\n return this.cache.get(userId)?.config ?? { typingTicket: \"\" };\n }\n}\n"],"mappings":";;AAOA,MAAM,sBAAsB,OAAU,KAAK;AAC3C,MAAM,gCAAgC;AACtC,MAAM,4BAA4B,OAAU;;;;;AAa5C,IAAa,sBAAb,MAAiC;CAC/B,wBAAgB,IAAI,KAA+B;CAEnD,YACE,SACA,KACA;AAFQ,OAAA,UAAA;AACA,OAAA,MAAA;;CAGV,MAAM,WAAW,QAAgB,cAA8C;EAC7E,MAAM,MAAM,KAAK,KAAK;EACtB,MAAM,QAAQ,KAAK,MAAM,IAAI,OAAO;AAGpC,MAFoB,CAAC,SAAS,OAAO,MAAM,aAE1B;GACf,IAAI,UAAU;AACd,OAAI;IACF,MAAM,OAAO,MAAM,UAAU;KAC3B,SAAS,KAAK,QAAQ;KACtB,OAAO,KAAK,QAAQ;KACpB,UAAU,KAAK,QAAQ;KACvB,aAAa;KACb;KACD,CAAC;AACF,QAAI,KAAK,QAAQ,GAAG;AAClB,UAAK,MAAM,IAAI,QAAQ;MACrB,QAAQ,EAAE,cAAc,KAAK,iBAAiB,IAAI;MAClD,eAAe;MACf,aAAa,MAAM,KAAK,QAAQ,GAAG;MACnC,cAAc;MACf,CAAC;AACF,UAAK,IACH,mBAAmB,OAAO,gBAAgB,cAAc,SAAS,OAAO,SACzE;AACD,eAAU;;YAEL,KAAK;AACZ,SAAK,IAAI,iCAAiC,OAAO,cAAc,OAAO,IAAI,GAAG;;AAE/E,OAAI,CAAC,SAAS;IACZ,MAAM,YAAY,OAAO,gBAAgB;IACzC,MAAM,YAAY,KAAK,IAAI,YAAY,GAAG,0BAA0B;AACpE,QAAI,OAAO;AACT,WAAM,cAAc,MAAM;AAC1B,WAAM,eAAe;UAErB,MAAK,MAAM,IAAI,QAAQ;KACrB,QAAQ,EAAE,cAAc,IAAI;KAC5B,eAAe;KACf,aAAa,MAAM;KACnB,cAAc;KACf,CAAC;;;AAKR,SAAO,KAAK,MAAM,IAAI,OAAO,EAAE,UAAU,EAAE,cAAc,IAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-guard.js","names":[],"sources":["../../../../../extensions/weixin/src/api/session-guard.ts"],"sourcesContent":["import { logger } from \"../util/logger.js\";\n\nconst SESSION_PAUSE_DURATION_MS = 60 * 60 * 1000;\n\n/** Error code returned by the server when the bot session has expired. */\nexport const SESSION_EXPIRED_ERRCODE = -14;\n\nconst pauseUntilMap = new Map<string, number>();\n\n/** Pause all inbound/outbound API calls for `accountId` for one hour. */\nexport function pauseSession(accountId: string): void {\n const until = Date.now() + SESSION_PAUSE_DURATION_MS;\n pauseUntilMap.set(accountId, until);\n logger.info(\n `session-guard: paused accountId=${accountId} until=${new Date(until).toISOString()} (${SESSION_PAUSE_DURATION_MS / 1000}s)`,\n );\n}\n\n/** Returns `true` when the bot is still within its one-hour cooldown window. */\nexport function isSessionPaused(accountId: string): boolean {\n const until = pauseUntilMap.get(accountId);\n if (until === undefined) return false;\n if (Date.now() >= until) {\n pauseUntilMap.delete(accountId);\n return false;\n }\n return true;\n}\n\n/** Milliseconds remaining until the pause expires (0 when not paused). */\nexport function getRemainingPauseMs(accountId: string): number {\n const until = pauseUntilMap.get(accountId);\n if (until === undefined) return 0;\n const remaining = until - Date.now();\n if (remaining <= 0) {\n pauseUntilMap.delete(accountId);\n return 0;\n }\n return remaining;\n}\n\n/** Throw if the session is currently paused. Call before any API request. */\nexport function assertSessionActive(accountId: string): void {\n if (isSessionPaused(accountId)) {\n const remainingMin = Math.ceil(getRemainingPauseMs(accountId) / 60_000);\n throw new Error(\n `session paused for accountId=${accountId}, ${remainingMin} min remaining (errcode ${SESSION_EXPIRED_ERRCODE})`,\n );\n }\n}\n\n/**\n * Reset internal state — only for tests.\n * @internal\n */\nexport function _resetForTest(): void {\n pauseUntilMap.clear();\n}\n"],"mappings":";;AAEA,MAAM,4BAA4B,OAAU;;AAG5C,MAAa,0BAA0B;AAEvC,MAAM,gCAAgB,IAAI,KAAqB;;AAG/C,SAAgB,aAAa,WAAyB;CACpD,MAAM,QAAQ,KAAK,KAAK,GAAG;AAC3B,eAAc,IAAI,WAAW,MAAM;AACnC,QAAO,KACL,mCAAmC,UAAU,SAAS,IAAI,KAAK,MAAM,CAAC,aAAa,CAAC,IAAI,4BAA4B,IAAK,IAC1H;;;AAIH,SAAgB,gBAAgB,WAA4B;CAC1D,MAAM,QAAQ,cAAc,IAAI,UAAU;AAC1C,KAAI,UAAU,KAAA,EAAW,QAAO;AAChC,KAAI,KAAK,KAAK,IAAI,OAAO;AACvB,gBAAc,OAAO,UAAU;AAC/B,SAAO;;AAET,QAAO;;;AAIT,SAAgB,oBAAoB,WAA2B;CAC7D,MAAM,QAAQ,cAAc,IAAI,UAAU;AAC1C,KAAI,UAAU,KAAA,EAAW,QAAO;CAChC,MAAM,YAAY,QAAQ,KAAK,KAAK;AACpC,KAAI,aAAa,GAAG;AAClB,gBAAc,OAAO,UAAU;AAC/B,SAAO;;AAET,QAAO;;;AAIT,SAAgB,oBAAoB,WAAyB;AAC3D,KAAI,gBAAgB,UAAU,EAAE;EAC9B,MAAM,eAAe,KAAK,KAAK,oBAAoB,UAAU,GAAG,IAAO;AACvE,QAAM,IAAI,MACR,gCAAgC,UAAU,IAAI,aAAa,8BAC5D;;;;;;;AAQL,SAAgB,gBAAsB;AACpC,eAAc,OAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../../extensions/weixin/src/api/types.ts"],"sourcesContent":["/**\n * Weixin protocol types (mirrors proto: GetUpdatesReq/Resp, WeixinMessage, SendMessageReq).\n * API uses JSON over HTTP; bytes fields are base64 strings in JSON.\n */\n\n/** Common request metadata attached to every CGI request. */\nexport interface BaseInfo {\n channel_version?: string;\n}\n\n/** proto: UploadMediaType */\nexport const UploadMediaType = {\n IMAGE: 1,\n VIDEO: 2,\n FILE: 3,\n VOICE: 4,\n} as const;\n\nexport interface GetUploadUrlReq {\n filekey?: string;\n /** proto field 2: media_type, see UploadMediaType */\n media_type?: number;\n to_user_id?: string;\n /** 原文件明文大小 */\n rawsize?: number;\n /** 原文件明文 MD5 */\n rawfilemd5?: string;\n /** 原文件密文大小(AES-128-ECB 加密后) */\n filesize?: number;\n /** 缩略图明文大小(IMAGE/VIDEO 时必填) */\n thumb_rawsize?: number;\n /** 缩略图明文 MD5(IMAGE/VIDEO 时必填) */\n thumb_rawfilemd5?: string;\n /** 缩略图密文大小(IMAGE/VIDEO 时必填) */\n thumb_filesize?: number;\n /** 不需要缩略图上传 URL,默认 false */\n no_need_thumb?: boolean;\n /** 加密 key */\n aeskey?: string;\n}\n\nexport interface GetUploadUrlResp {\n /** 原图上传加密参数 */\n upload_param?: string;\n /** 缩略图上传加密参数,无缩略图时为空 */\n thumb_upload_param?: string;\n /** 完整上传 URL(服务端直接返回,无需客户端拼接) */\n upload_full_url?: string;\n}\n\nexport const MessageType = {\n NONE: 0,\n USER: 1,\n BOT: 2,\n} as const;\n\nexport const MessageItemType = {\n NONE: 0,\n TEXT: 1,\n IMAGE: 2,\n VOICE: 3,\n FILE: 4,\n VIDEO: 5,\n} as const;\n\nexport const MessageState = {\n NEW: 0,\n GENERATING: 1,\n FINISH: 2,\n} as const;\n\nexport interface TextItem {\n text?: string;\n}\n\n/** CDN media reference; aes_key is base64-encoded bytes in JSON. */\nexport interface CDNMedia {\n encrypt_query_param?: string;\n aes_key?: string;\n /** 加密类型: 0=只加密fileid, 1=打包缩略图/中图等信息 */\n encrypt_type?: number;\n /** 服务端返回的完整 CDN URL(优先于客户端拼接) */\n full_url?: string;\n}\n\nexport interface ImageItem {\n /** 原图 CDN 引用 */\n media?: CDNMedia;\n /** 缩略图 CDN 引用 */\n thumb_media?: CDNMedia;\n /** Raw AES-128 key as hex string (16 bytes); preferred over media.aes_key for inbound decryption. */\n aeskey?: string;\n url?: string;\n mid_size?: number;\n thumb_size?: number;\n thumb_height?: number;\n thumb_width?: number;\n hd_size?: number;\n}\n\nexport interface VoiceItem {\n media?: CDNMedia;\n /** 语音编码类型:1=pcm 2=adpcm 3=feature 4=speex 5=amr 6=silk 7=mp3 8=ogg-speex */\n encode_type?: number;\n /** Ciphertext size after AES-128-ECB (same role as ImageItem.mid_size). */\n voice_size?: number;\n bits_per_sample?: number;\n /** 采样率 (Hz) */\n sample_rate?: number;\n /** 语音长度 (毫秒) */\n playtime?: number;\n /** 语音转文字内容 */\n text?: string;\n}\n\nexport interface FileItem {\n media?: CDNMedia;\n file_name?: string;\n md5?: string;\n len?: string;\n}\n\nexport interface VideoItem {\n media?: CDNMedia;\n video_size?: number;\n play_length?: number;\n video_md5?: string;\n thumb_media?: CDNMedia;\n thumb_size?: number;\n thumb_height?: number;\n thumb_width?: number;\n}\n\nexport interface RefMessage {\n message_item?: MessageItem;\n title?: string; // 摘要\n}\n\nexport interface MessageItem {\n type?: number;\n create_time_ms?: number;\n update_time_ms?: number;\n is_completed?: boolean;\n msg_id?: string;\n ref_msg?: RefMessage;\n text_item?: TextItem;\n image_item?: ImageItem;\n voice_item?: VoiceItem;\n file_item?: FileItem;\n video_item?: VideoItem;\n}\n\n/** Unified message (proto: WeixinMessage). Replaces the old split Message + MessageContent + FullMessage. */\nexport interface WeixinMessage {\n seq?: number;\n message_id?: number;\n from_user_id?: string;\n to_user_id?: string;\n client_id?: string;\n create_time_ms?: number;\n update_time_ms?: number;\n delete_time_ms?: number;\n session_id?: string;\n group_id?: string;\n message_type?: number;\n message_state?: number;\n item_list?: MessageItem[];\n context_token?: string;\n}\n\n/** GetUpdates request: bytes fields are base64 strings in JSON. */\nexport interface GetUpdatesReq {\n /** Full context buf cached locally; send \"\" when none (first request or after reset). */\n get_updates_buf?: string;\n}\n\n/** GetUpdates response: bytes fields are base64 strings in JSON. */\nexport interface GetUpdatesResp {\n ret?: number;\n /** Error code returned by the server (e.g. -14 = session timeout). Present when request fails. */\n errcode?: number;\n errmsg?: string;\n msgs?: WeixinMessage[];\n /** Full context buf to cache locally and send on next request. */\n get_updates_buf?: string;\n /** Server-suggested timeout (ms) for the next getUpdates long-poll. */\n longpolling_timeout_ms?: number;\n}\n\n/** SendMessage request: wraps a single WeixinMessage. */\nexport interface SendMessageReq {\n msg?: WeixinMessage;\n}\n\n/** Parsed `ilink/bot/sendmessage` JSON (proto may omit fields on success). */\nexport interface SendMessageResp {\n ret?: number;\n errcode?: number;\n errmsg?: string;\n /** Updated session context for the next outbound bubble (multi-part sends). */\n msg?: WeixinMessage;\n /** Some responses carry `context_token` at top level instead of under `msg`. */\n context_token?: string;\n}\n\n/** Typing status: 1 = typing (default), 2 = cancel typing. */\nexport const TypingStatus = {\n TYPING: 1,\n CANCEL: 2,\n} as const;\n\n/** SendTyping request: send a typing indicator to a user. */\nexport interface SendTypingReq {\n ilink_user_id?: string;\n typing_ticket?: string;\n /** 1=typing (default), 2=cancel typing */\n status?: number;\n}\n\nexport interface SendTypingResp {\n ret?: number;\n errmsg?: string;\n}\n\n/** GetConfig response: bot config including typing_ticket. */\nexport interface GetConfigResp {\n ret?: number;\n errmsg?: string;\n /** Base64-encoded typing ticket for sendTyping. */\n typing_ticket?: string;\n /** Present when the server can establish DM context without a prior inbound bubble (e.g. proactive send). */\n context_token?: string;\n}\n"],"mappings":";;AAWA,MAAa,kBAAkB;CAC7B,OAAO;CACP,OAAO;CACP,MAAM;CACN,OAAO;CACR;AAkCD,MAAa,cAAc;CACzB,MAAM;CACN,MAAM;CACN,KAAK;CACN;AAED,MAAa,kBAAkB;CAC7B,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CACP,MAAM;CACN,OAAO;CACR;AAED,MAAa,eAAe;CAC1B,KAAK;CACL,YAAY;CACZ,QAAQ;CACT;;AAyID,MAAa,eAAe;CAC1B,QAAQ;CACR,QAAQ;CACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","names":[],"sources":["../../../../../extensions/weixin/src/auth/accounts.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { Config } from '@xopcai/xopc/config/schema.js';\n\nimport { clearContextTokensForAccount } from '../messaging/inbound.js';\nimport { resolveWeixinRootDir } from '../storage/state-dir.js';\nimport { logger } from '../util/logger.js';\n\nimport { normalizeWeixinAccountId } from './weixin-account-id.js';\n\nexport { normalizeWeixinAccountId };\n\nexport const DEFAULT_BASE_URL = 'https://ilinkai.weixin.qq.com';\nexport const CDN_BASE_URL = 'https://novac2c.cdn.weixin.qq.com/c2c';\n\nfunction resolveWeixinStateDir(): string {\n return resolveWeixinRootDir();\n}\n\nfunction resolveAccountIndexPath(): string {\n return path.join(resolveWeixinStateDir(), 'accounts.json');\n}\n\nexport function listIndexedWeixinAccountIds(): string[] {\n const filePath = resolveAccountIndexPath();\n try {\n if (!fs.existsSync(filePath)) return [];\n const raw = fs.readFileSync(filePath, 'utf-8');\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((id): id is string => typeof id === 'string' && id.trim() !== '');\n } catch {\n return [];\n }\n}\n\nexport function registerWeixinAccountId(accountId: string): void {\n const dir = resolveWeixinStateDir();\n fs.mkdirSync(dir, { recursive: true });\n\n const existing = listIndexedWeixinAccountIds();\n if (existing.includes(accountId)) return;\n\n const updated = [...existing, accountId];\n fs.writeFileSync(resolveAccountIndexPath(), JSON.stringify(updated, null, 2), 'utf-8');\n}\n\nexport function unregisterWeixinAccountId(accountId: string): void {\n const existing = listIndexedWeixinAccountIds();\n const updated = existing.filter((id) => id !== accountId);\n if (updated.length !== existing.length) {\n fs.writeFileSync(resolveAccountIndexPath(), JSON.stringify(updated, null, 2), 'utf-8');\n }\n}\n\nexport function clearStaleAccountsForUserId(\n currentAccountId: string,\n userId: string,\n onClearContextTokens?: (accountId: string) => void,\n): void {\n if (!userId) return;\n const allIds = listIndexedWeixinAccountIds();\n for (const id of allIds) {\n if (id === currentAccountId) continue;\n const data = loadWeixinAccount(id);\n if (data?.userId?.trim() === userId) {\n logger.info(`clearStaleAccountsForUserId: removing stale account=${id} (same userId=${userId})`);\n onClearContextTokens?.(id);\n clearWeixinAccount(id);\n unregisterWeixinAccountId(id);\n }\n }\n}\n\nexport type WeixinAccountData = {\n token?: string;\n savedAt?: string;\n baseUrl?: string;\n userId?: string;\n};\n\nfunction resolveAccountsDir(): string {\n return path.join(resolveWeixinStateDir(), 'accounts');\n}\n\nfunction resolveAccountPath(accountId: string): string {\n return path.join(resolveAccountsDir(), `${accountId}.json`);\n}\n\nfunction readAccountFile(filePath: string): WeixinAccountData | null {\n try {\n if (fs.existsSync(filePath)) {\n return JSON.parse(fs.readFileSync(filePath, 'utf-8')) as WeixinAccountData;\n }\n } catch {\n // ignore\n }\n return null;\n}\n\nexport function loadWeixinAccount(accountId: string): WeixinAccountData | null {\n return readAccountFile(resolveAccountPath(accountId));\n}\n\nexport function saveWeixinAccount(\n accountId: string,\n update: { token?: string; baseUrl?: string; userId?: string },\n): void {\n const dir = resolveAccountsDir();\n fs.mkdirSync(dir, { recursive: true });\n\n const existing = loadWeixinAccount(accountId) ?? {};\n\n const token = update.token?.trim() || existing.token;\n const baseUrl = update.baseUrl?.trim() || existing.baseUrl;\n const userId =\n update.userId !== undefined ? update.userId.trim() || undefined : existing.userId?.trim() || undefined;\n\n const data: WeixinAccountData = {\n ...(token ? { token, savedAt: new Date().toISOString() } : {}),\n ...(baseUrl ? { baseUrl } : {}),\n ...(userId ? { userId } : {}),\n };\n\n const filePath = resolveAccountPath(accountId);\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');\n try {\n fs.chmodSync(filePath, 0o600);\n } catch {\n // best-effort\n }\n}\n\nexport function clearWeixinAccount(accountId: string): void {\n const dir = resolveAccountsDir();\n const accountFiles = [\n `${accountId}.json`,\n `${accountId}.sync.json`,\n `${accountId}.context-tokens.json`,\n ];\n for (const file of accountFiles) {\n try {\n fs.unlinkSync(path.join(dir, file));\n } catch {\n // ignore\n }\n }\n try {\n fs.unlinkSync(resolveFrameworkAllowFromPath(accountId));\n } catch {\n // ignore\n }\n}\n\nexport type ResolvedWeixinAccount = {\n accountId: string;\n baseUrl: string;\n cdnBaseUrl: string;\n token?: string;\n enabled: boolean;\n configured: boolean;\n name?: string;\n dmPolicy: 'pairing' | 'allowlist' | 'open' | 'disabled';\n allowFrom: string[];\n streamMode?: 'off' | 'partial' | 'block';\n routeTag?: string;\n debug?: boolean;\n};\n\ntype WeixinAccountCfg = {\n name?: string;\n enabled?: boolean;\n cdnBaseUrl?: string;\n routeTag?: number | string;\n dmPolicy?: ResolvedWeixinAccount['dmPolicy'];\n allowFrom?: string[];\n streamMode?: ResolvedWeixinAccount['streamMode'];\n debug?: boolean;\n accounts?: Record<string, WeixinAccountCfg>;\n};\n\nfunction weixinSection(cfg: Config): (WeixinAccountCfg & { accounts?: Record<string, WeixinAccountCfg> }) | undefined {\n return cfg.channels?.weixin as\n | (WeixinAccountCfg & { accounts?: Record<string, WeixinAccountCfg> })\n | undefined;\n}\n\nexport function listWeixinAccountIds(cfg: Config): string[] {\n const section = weixinSection(cfg);\n const fromConfig = section?.accounts ? Object.keys(section.accounts) : [];\n // Only merge disk index when the channel is explicitly enabled. Otherwise removed / disabled\n // config still leaves token files + accounts.json on disk and monitors would keep running.\n if (!section || section.enabled !== true) {\n return fromConfig;\n }\n const indexed = listIndexedWeixinAccountIds();\n return [...new Set([...indexed, ...fromConfig])];\n}\n\nexport function resolveWeixinAccount(cfg: Config, accountId?: string | null): ResolvedWeixinAccount {\n const raw = accountId?.trim();\n if (!raw) {\n throw new Error('weixin: accountId is required');\n }\n const id = normalizeWeixinAccountId(raw);\n const section = weixinSection(cfg);\n const fromAccount = section?.accounts?.[id];\n const { accounts: _omit, ...sectionRest } = section ?? {};\n void _omit;\n const accountCfg: WeixinAccountCfg = {\n ...sectionRest,\n ...(fromAccount ?? {}),\n };\n\n const accountData = loadWeixinAccount(id);\n const token = accountData?.token?.trim() || undefined;\n const stateBaseUrl = accountData?.baseUrl?.trim() || '';\n\n const routeTagRaw = accountCfg.routeTag;\n const routeTag =\n typeof routeTagRaw === 'number'\n ? String(routeTagRaw)\n : typeof routeTagRaw === 'string' && routeTagRaw.trim()\n ? routeTagRaw.trim()\n : undefined;\n\n const channelEnabled = section?.enabled === true;\n\n return {\n accountId: id,\n baseUrl: stateBaseUrl || DEFAULT_BASE_URL,\n cdnBaseUrl: accountCfg.cdnBaseUrl?.trim() || CDN_BASE_URL,\n token,\n enabled: channelEnabled && accountCfg.enabled !== false,\n configured: Boolean(token),\n name: accountCfg.name?.trim() || undefined,\n dmPolicy: accountCfg.dmPolicy ?? 'open',\n allowFrom: accountCfg.allowFrom ?? [],\n streamMode: accountCfg.streamMode,\n routeTag,\n debug: accountCfg.debug ?? false,\n };\n}\n\nexport function resolveFrameworkAllowFromPath(accountId: string): string {\n const base = 'xopc-weixin'.replace(/[\\\\/:*?\"<>|]/g, '_');\n const safeAccount = accountId.trim().toLowerCase().replace(/[\\\\/:*?\"<>|]/g, '_').replace(/\\.\\./g, '_');\n const { join } = path;\n const credRoot = process.env.XOPC_CREDENTIALS_DIR?.trim()\n ? process.env.XOPC_CREDENTIALS_DIR!\n : join(resolveWeixinRootDir(), 'credentials');\n return join(credRoot, `${base}-${safeAccount}-allowFrom.json`);\n}\n"],"mappings":"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"}
|