@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":"config-schema.js","names":[],"sources":["../../../../../extensions/feishu/src/schema/config-schema.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const FeishuAccountConfigSchema = z.object({\n name: z.string().optional(),\n enabled: z.boolean().optional(),\n\n /** Feishu app credentials */\n appId: z.string().optional(),\n appSecret: z.string().optional(),\n\n /** feishu | lark | https://open.feishu.cn (custom base) */\n domain: z.union([z.enum(['feishu', 'lark']), z.string().url()]).optional(),\n\n /** Socket Mode is the default transport in xopc. */\n connectionMode: z.enum(['websocket', 'webhook']).default('websocket').optional(),\n\n /** Webhook mode transport config (openclaw parity). */\n webhookHost: z.string().optional(),\n webhookPort: z.number().int().positive().optional(),\n webhookPath: z.string().optional(),\n\n /** Webhook mode secrets (openclaw parity). */\n verificationToken: z.string().optional(),\n encryptKey: z.string().optional(),\n\n /** Access control */\n dmPolicy: z.enum(['pairing', 'allowlist', 'open', 'disabled']).default('open').optional(),\n groupPolicy: z.enum(['open', 'disabled', 'allowlist']).default('allowlist').optional(),\n allowFrom: z.array(z.union([z.string(), z.number()])).optional(),\n groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(),\n requireMention: z.boolean().optional(),\n\n /** Messaging */\n historyLimit: z.number().int().min(0).optional(),\n textChunkLimit: z.number().int().positive().optional(),\n renderMode: z.enum(['auto', 'raw', 'card']).optional(),\n replyInThread: z.enum(['disabled', 'enabled']).optional(),\n typingIndicator: z.boolean().optional(),\n reactionNotifications: z.enum(['off', 'own', 'all']).optional(),\n\n /** Coalesce rapid `im.message.receive_v1` per chat (ms). Use 0 to disable. */\n inboundDebounceMs: z.number().int().min(0).max(10_000).optional(),\n\n /** Streaming */\n streaming: z.boolean().optional(),\n blockStreamingCoalesce: z\n .object({\n enabled: z.boolean().optional(),\n minChars: z.number().int().positive().optional(),\n idleMs: z.number().int().positive().optional(),\n })\n .strict()\n .optional(),\n\n /** Tool gates (parity surface; implementations come later) */\n tools: z\n .object({\n doc: z.boolean().optional(),\n chat: z.boolean().optional(),\n wiki: z.boolean().optional(),\n drive: z.boolean().optional(),\n perm: z.boolean().optional(),\n bitable: z.boolean().optional(),\n scopes: z.boolean().optional(),\n })\n .strict()\n .optional(),\n\n actions: z\n .object({\n reactions: z.boolean().optional(),\n })\n .strict()\n .optional(),\n\n /** Dynamic agent creation for DMs (parity surface; core wiring comes later) */\n dynamicAgentCreation: z\n .object({\n enabled: z.boolean().optional(),\n workspaceTemplate: z.string().optional(),\n agentDirTemplate: z.string().optional(),\n maxAgents: z.number().int().positive().optional(),\n })\n .strict()\n .optional(),\n});\n\nexport const FeishuConfigSchema = z\n .object({\n enabled: z.boolean().default(false),\n\n defaultAccount: z.string().optional(),\n\n /** Single-account shorthand (backward compatible in our own schema) */\n appId: z.string().optional(),\n appSecret: z.string().optional(),\n domain: z.union([z.enum(['feishu', 'lark']), z.string().url()]).default('feishu').optional(),\n connectionMode: z.enum(['websocket', 'webhook']).default('websocket').optional(),\n\n webhookHost: z.string().optional(),\n webhookPort: z.number().int().positive().optional(),\n webhookPath: z.string().optional(),\n verificationToken: z.string().optional(),\n encryptKey: z.string().optional(),\n\n dmPolicy: z.enum(['pairing', 'allowlist', 'open', 'disabled']).default('open').optional(),\n groupPolicy: z.enum(['open', 'disabled', 'allowlist']).default('allowlist').optional(),\n allowFrom: z.array(z.union([z.string(), z.number()])).default([]).optional(),\n groupAllowFrom: z.array(z.union([z.string(), z.number()])).default([]).optional(),\n requireMention: z.boolean().optional(),\n\n historyLimit: z.number().int().min(0).default(50).optional(),\n textChunkLimit: z.number().int().positive().default(4000).optional(),\n reactionNotifications: z.enum(['off', 'own', 'all']).optional(),\n\n inboundDebounceMs: z.number().int().min(0).max(10_000).optional(),\n\n streaming: z.boolean().optional(),\n blockStreamingCoalesce: z\n .object({\n enabled: z.boolean().optional(),\n minChars: z.number().int().positive().optional(),\n idleMs: z.number().int().positive().optional(),\n })\n .strict()\n .optional(),\n\n tools: z\n .object({\n doc: z.boolean().optional(),\n chat: z.boolean().optional(),\n wiki: z.boolean().optional(),\n drive: z.boolean().optional(),\n perm: z.boolean().optional(),\n bitable: z.boolean().optional(),\n scopes: z.boolean().optional(),\n })\n .strict()\n .optional(),\n\n actions: z\n .object({\n reactions: z.boolean().optional(),\n })\n .strict()\n .optional(),\n\n dynamicAgentCreation: z\n .object({\n enabled: z.boolean().optional(),\n workspaceTemplate: z.string().optional(),\n agentDirTemplate: z.string().optional(),\n maxAgents: z.number().int().positive().optional(),\n })\n .strict()\n .optional(),\n\n accounts: z.record(z.string(), FeishuAccountConfigSchema).optional(),\n})\n .superRefine((value, ctx) => {\n // Single-account layout required fields when enabled.\n if (value.enabled) {\n const hasNamed = value.accounts && Object.keys(value.accounts).length > 0;\n if (!hasNamed) {\n if (!value.appId?.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['appId'],\n message: 'channels.feishu.enabled=true requires channels.feishu.appId (or configure channels.feishu.accounts)',\n });\n }\n if (!value.appSecret?.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['appSecret'],\n message:\n 'channels.feishu.enabled=true requires channels.feishu.appSecret (or configure channels.feishu.accounts)',\n });\n }\n }\n }\n\n // Multi-account required fields when account is enabled.\n for (const [id, acc] of Object.entries(value.accounts ?? {})) {\n if (!acc) continue;\n if (acc.enabled === false) continue;\n const effectiveAppId = acc.appId?.trim() || value.appId?.trim() || '';\n const effectiveAppSecret = acc.appSecret?.trim() || value.appSecret?.trim() || '';\n if (!effectiveAppId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['accounts', id, 'appId'],\n message: `channels.feishu.accounts.${id} requires appId (or top-level channels.feishu.appId)`,\n });\n }\n if (!effectiveAppSecret) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['accounts', id, 'appSecret'],\n message: `channels.feishu.accounts.${id} requires appSecret (or top-level channels.feishu.appSecret)`,\n });\n }\n\n const effectiveConnectionMode = (acc.connectionMode ?? value.connectionMode ?? 'websocket') as\n | 'websocket'\n | 'webhook';\n if (effectiveConnectionMode === 'webhook') {\n const vt = acc.verificationToken?.trim() || value.verificationToken?.trim() || '';\n const ek = acc.encryptKey?.trim() || value.encryptKey?.trim() || '';\n if (!vt) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['accounts', id, 'verificationToken'],\n message: `channels.feishu.accounts.${id} webhook mode requires verificationToken (or top-level channels.feishu.verificationToken)`,\n });\n }\n if (!ek) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['accounts', id, 'encryptKey'],\n message: `channels.feishu.accounts.${id} webhook mode requires encryptKey (or top-level channels.feishu.encryptKey)`,\n });\n }\n }\n }\n });\n\nexport type FeishuConfig = z.infer<typeof FeishuConfigSchema>;\nexport type FeishuAccountConfig = z.infer<typeof FeishuAccountConfigSchema>;\n\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","names":[],"sources":["../../../../../extensions/feishu/src/state/accounts.ts"],"sourcesContent":["import type { Config } from '@xopcai/xopc/config/schema.js';\n\nimport type { FeishuAccountConfig, FeishuConfig } from '../schema/config-schema.js';\n\nexport interface ResolvedFeishuAccount {\n accountId: string;\n name?: string;\n enabled: boolean;\n configured: boolean;\n\n appId?: string;\n appSecret?: string;\n domain: 'feishu' | 'lark' | string;\n connectionMode: 'websocket' | 'webhook';\n\n webhookHost?: string;\n webhookPort?: number;\n webhookPath?: string;\n verificationToken?: string;\n encryptKey?: string;\n\n dmPolicy: 'pairing' | 'allowlist' | 'open' | 'disabled';\n groupPolicy: 'open' | 'disabled' | 'allowlist';\n allowFrom?: Array<string | number>;\n groupAllowFrom?: Array<string | number>;\n requireMention?: boolean;\n\n historyLimit: number;\n textChunkLimit: number;\n renderMode?: 'auto' | 'raw' | 'card';\n\n reactionNotifications?: 'off' | 'own' | 'all';\n /** Per-chat inbound debounce (ms); undefined = use channel plugin default. */\n inboundDebounceMs?: number;\n\n /** Opt-in: only `true` enables Feishu streaming (Thinking… + incremental updates). */\n streaming: boolean;\n blockStreamingCoalesce?: { enabled?: boolean; minChars?: number; idleMs?: number };\n\n tools?: FeishuConfig['tools'];\n actions?: FeishuConfig['actions'];\n dynamicAgentCreation?: FeishuConfig['dynamicAgentCreation'];\n}\n\nfunction asFeishuSection(cfg: Config): FeishuConfig | undefined {\n return cfg.channels?.feishu as FeishuConfig | undefined;\n}\n\nexport function listFeishuAccountIds(cfg: Config): string[] {\n const section = asFeishuSection(cfg);\n if (!section) return [];\n const accounts = section.accounts ?? {};\n const keys = Object.keys(accounts);\n if (keys.length > 0) return keys;\n // Single-account layout\n return ['default'];\n}\n\nfunction resolveRootAccount(section: FeishuConfig): FeishuAccountConfig {\n return {\n enabled: section.enabled,\n name: 'Default Account',\n appId: section.appId,\n appSecret: section.appSecret,\n domain: section.domain,\n connectionMode: section.connectionMode,\n webhookHost: (section as any).webhookHost,\n webhookPort: (section as any).webhookPort,\n webhookPath: (section as any).webhookPath,\n verificationToken: (section as any).verificationToken,\n encryptKey: (section as any).encryptKey,\n dmPolicy: section.dmPolicy,\n groupPolicy: section.groupPolicy,\n allowFrom: section.allowFrom,\n groupAllowFrom: section.groupAllowFrom,\n requireMention: section.requireMention,\n historyLimit: section.historyLimit,\n textChunkLimit: section.textChunkLimit,\n renderMode: (section as any).renderMode,\n reactionNotifications: section.reactionNotifications,\n inboundDebounceMs: (section as any).inboundDebounceMs,\n streaming: section.streaming,\n blockStreamingCoalesce: section.blockStreamingCoalesce,\n tools: section.tools,\n actions: section.actions,\n dynamicAgentCreation: section.dynamicAgentCreation,\n };\n}\n\nfunction mergeAccount(section: FeishuConfig, account: FeishuAccountConfig | undefined): FeishuAccountConfig {\n const root = resolveRootAccount(section);\n if (!account) return root;\n return {\n ...root,\n ...account,\n // arrays should replace, not concat\n allowFrom: account.allowFrom ?? root.allowFrom,\n groupAllowFrom: account.groupAllowFrom ?? root.groupAllowFrom,\n };\n}\n\nexport function resolveFeishuAccount(cfg: Config, accountId?: string | null): ResolvedFeishuAccount {\n const section = asFeishuSection(cfg) ?? ({ enabled: false } as FeishuConfig);\n const requested = (accountId ?? '').trim();\n\n const accounts = section.accounts ?? {};\n const hasNamedAccounts = Object.keys(accounts).length > 0;\n const effectiveAccountId = requested || section.defaultAccount || (hasNamedAccounts ? Object.keys(accounts)[0] : 'default');\n\n const raw = hasNamedAccounts ? accounts[effectiveAccountId] : resolveRootAccount(section);\n const merged = mergeAccount(section, raw);\n\n const enabled = merged.enabled !== false && section.enabled !== false;\n const appId = merged.appId?.trim() || undefined;\n const appSecret = merged.appSecret?.trim() || undefined;\n const configured = Boolean(appId && appSecret);\n\n return {\n accountId: effectiveAccountId,\n name: merged.name,\n enabled,\n configured,\n appId,\n appSecret,\n domain: (merged.domain ?? 'feishu') as any,\n connectionMode: (merged.connectionMode ?? 'websocket') as any,\n webhookHost: (merged as any).webhookHost,\n webhookPort: (merged as any).webhookPort,\n webhookPath: (merged as any).webhookPath,\n verificationToken: (merged as any).verificationToken,\n encryptKey: (merged as any).encryptKey,\n dmPolicy: (merged.dmPolicy ?? 'open') as any,\n groupPolicy: (merged.groupPolicy ?? 'allowlist') as any,\n allowFrom: merged.allowFrom,\n groupAllowFrom: merged.groupAllowFrom,\n requireMention: merged.requireMention,\n historyLimit: typeof merged.historyLimit === 'number' ? merged.historyLimit : 50,\n textChunkLimit: typeof merged.textChunkLimit === 'number' ? merged.textChunkLimit : 4000,\n renderMode: (merged as any).renderMode,\n reactionNotifications: merged.reactionNotifications,\n inboundDebounceMs: (merged as any).inboundDebounceMs as number | undefined,\n streaming: merged.streaming === true,\n blockStreamingCoalesce: merged.blockStreamingCoalesce as any,\n tools: merged.tools,\n actions: merged.actions,\n dynamicAgentCreation: merged.dynamicAgentCreation,\n };\n}\n\n"],"mappings":";AA4CA,SAAS,gBAAgB,KAAuC;AAC9D,QAAO,IAAI,UAAU;;AAGvB,SAAgB,qBAAqB,KAAuB;CAC1D,MAAM,UAAU,gBAAgB,IAAI;AACpC,KAAI,CAAC,QAAS,QAAO,EAAE;CACvB,MAAM,WAAW,QAAQ,YAAY,EAAE;CACvC,MAAM,OAAO,OAAO,KAAK,SAAS;AAClC,KAAI,KAAK,SAAS,EAAG,QAAO;AAE5B,QAAO,CAAC,UAAU;;AAGpB,SAAS,mBAAmB,SAA4C;AACtE,QAAO;EACL,SAAS,QAAQ;EACjB,MAAM;EACN,OAAO,QAAQ;EACf,WAAW,QAAQ;EACnB,QAAQ,QAAQ;EAChB,gBAAgB,QAAQ;EACxB,aAAc,QAAgB;EAC9B,aAAc,QAAgB;EAC9B,aAAc,QAAgB;EAC9B,mBAAoB,QAAgB;EACpC,YAAa,QAAgB;EAC7B,UAAU,QAAQ;EAClB,aAAa,QAAQ;EACrB,WAAW,QAAQ;EACnB,gBAAgB,QAAQ;EACxB,gBAAgB,QAAQ;EACxB,cAAc,QAAQ;EACtB,gBAAgB,QAAQ;EACxB,YAAa,QAAgB;EAC7B,uBAAuB,QAAQ;EAC/B,mBAAoB,QAAgB;EACpC,WAAW,QAAQ;EACnB,wBAAwB,QAAQ;EAChC,OAAO,QAAQ;EACf,SAAS,QAAQ;EACjB,sBAAsB,QAAQ;EAC/B;;AAGH,SAAS,aAAa,SAAuB,SAA+D;CAC1G,MAAM,OAAO,mBAAmB,QAAQ;AACxC,KAAI,CAAC,QAAS,QAAO;AACrB,QAAO;EACL,GAAG;EACH,GAAG;EAEH,WAAW,QAAQ,aAAa,KAAK;EACrC,gBAAgB,QAAQ,kBAAkB,KAAK;EAChD;;AAGH,SAAgB,qBAAqB,KAAa,WAAkD;CAClG,MAAM,UAAU,gBAAgB,IAAI,IAAK,EAAE,SAAS,OAAO;CAC3D,MAAM,aAAa,aAAa,IAAI,MAAM;CAE1C,MAAM,WAAW,QAAQ,YAAY,EAAE;CACvC,MAAM,mBAAmB,OAAO,KAAK,SAAS,CAAC,SAAS;CACxD,MAAM,qBAAqB,aAAa,QAAQ,mBAAmB,mBAAmB,OAAO,KAAK,SAAS,CAAC,KAAK;CAGjH,MAAM,SAAS,aAAa,SADhB,mBAAmB,SAAS,sBAAsB,mBAAmB,QAAQ,CAChD;CAEzC,MAAM,UAAU,OAAO,YAAY,SAAS,QAAQ,YAAY;CAChE,MAAM,QAAQ,OAAO,OAAO,MAAM,IAAI,KAAA;CACtC,MAAM,YAAY,OAAO,WAAW,MAAM,IAAI,KAAA;CAC9C,MAAM,aAAa,QAAQ,SAAS,UAAU;AAE9C,QAAO;EACL,WAAW;EACX,MAAM,OAAO;EACb;EACA;EACA;EACA;EACA,QAAS,OAAO,UAAU;EAC1B,gBAAiB,OAAO,kBAAkB;EAC1C,aAAc,OAAe;EAC7B,aAAc,OAAe;EAC7B,aAAc,OAAe;EAC7B,mBAAoB,OAAe;EACnC,YAAa,OAAe;EAC5B,UAAW,OAAO,YAAY;EAC9B,aAAc,OAAO,eAAe;EACpC,WAAW,OAAO;EAClB,gBAAgB,OAAO;EACvB,gBAAgB,OAAO;EACvB,cAAc,OAAO,OAAO,iBAAiB,WAAW,OAAO,eAAe;EAC9E,gBAAgB,OAAO,OAAO,mBAAmB,WAAW,OAAO,iBAAiB;EACpF,YAAa,OAAe;EAC5B,uBAAuB,OAAO;EAC9B,mBAAoB,OAAe;EACnC,WAAW,OAAO,cAAc;EAChC,wBAAwB,OAAO;EAC/B,OAAO,OAAO;EACd,SAAS,OAAO;EAChB,sBAAsB,OAAO;EAC9B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-bindings.js","names":[],"sources":["../../../../../extensions/feishu/src/state/message-bindings.ts"],"sourcesContent":["export type FeishuMessageBinding = {\n messageId: string;\n sessionKey: string;\n accountId: string;\n chatId: string;\n senderId: string;\n isGroup: boolean;\n threadId?: string;\n};\n\nconst MAX = 50_000;\nconst TTL_MS = 24 * 60 * 60_000;\n\nconst byMessageId = new Map<string, { binding: FeishuMessageBinding; at: number }>();\n\nfunction prune(now: number) {\n for (const [k, v] of byMessageId) {\n if (now - v.at > TTL_MS) {\n byMessageId.delete(k);\n }\n }\n if (byMessageId.size <= MAX) return;\n const extra = byMessageId.size - MAX;\n let i = 0;\n for (const k of byMessageId.keys()) {\n byMessageId.delete(k);\n i++;\n if (i >= extra) break;\n }\n}\n\nexport function recordFeishuMessageBinding(binding: FeishuMessageBinding): void {\n const messageId = binding.messageId.trim();\n if (!messageId) return;\n const now = Date.now();\n prune(now);\n byMessageId.set(messageId, { binding, at: now });\n}\n\nexport function getFeishuBindingByMessageId(messageId: string): FeishuMessageBinding | null {\n const key = messageId.trim();\n if (!key) return null;\n const now = Date.now();\n const hit = byMessageId.get(key);\n if (!hit) return null;\n if (now - hit.at > TTL_MS) {\n byMessageId.delete(key);\n return null;\n }\n return hit.binding;\n}\n\n"],"mappings":";AAUA,MAAM,MAAM;AACZ,MAAM,SAAS,OAAU;AAEzB,MAAM,8BAAc,IAAI,KAA4D;AAEpF,SAAS,MAAM,KAAa;AAC1B,MAAK,MAAM,CAAC,GAAG,MAAM,YACnB,KAAI,MAAM,EAAE,KAAK,OACf,aAAY,OAAO,EAAE;AAGzB,KAAI,YAAY,QAAQ,IAAK;CAC7B,MAAM,QAAQ,YAAY,OAAO;CACjC,IAAI,IAAI;AACR,MAAK,MAAM,KAAK,YAAY,MAAM,EAAE;AAClC,cAAY,OAAO,EAAE;AACrB;AACA,MAAI,KAAK,MAAO;;;AAIpB,SAAgB,2BAA2B,SAAqC;CAC9E,MAAM,YAAY,QAAQ,UAAU,MAAM;AAC1C,KAAI,CAAC,UAAW;CAChB,MAAM,MAAM,KAAK,KAAK;AACtB,OAAM,IAAI;AACV,aAAY,IAAI,WAAW;EAAE;EAAS,IAAI;EAAK,CAAC;;AAGlD,SAAgB,4BAA4B,WAAgD;CAC1F,MAAM,MAAM,UAAU,MAAM;AAC5B,KAAI,CAAC,IAAK,QAAO;CACjB,MAAM,MAAM,KAAK,KAAK;CACtB,MAAM,MAAM,YAAY,IAAI,IAAI;AAChC,KAAI,CAAC,IAAK,QAAO;AACjB,KAAI,MAAM,IAAI,KAAK,QAAQ;AACzB,cAAY,OAAO,IAAI;AACvB,SAAO;;AAET,QAAO,IAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"thread-bindings.js","names":[],"sources":["../../../../../extensions/feishu/src/state/thread-bindings.ts"],"sourcesContent":["type BindingRecord = {\n accountId: string;\n conversationId: string;\n parentConversationId?: string;\n targetSessionKey: string;\n boundAt: number;\n lastActivityAt: number;\n metadata?: Record<string, unknown>;\n};\n\ntype State = {\n byAccountConversation: Map<string, BindingRecord>;\n};\n\nconst STATE_KEY = Symbol.for('xopc.feishuThreadBindingsState');\n\nfunction getState(): State {\n const store = globalThis as Record<PropertyKey, unknown>;\n let st = store[STATE_KEY] as State | undefined;\n if (!st) {\n st = { byAccountConversation: new Map() };\n store[STATE_KEY] = st;\n }\n return st;\n}\n\nfunction key(accountId: string, conversationId: string): string {\n return `${accountId}:${conversationId}`;\n}\n\nexport function bindFeishuConversation(params: {\n accountId: string;\n conversationId: string;\n parentConversationId?: string;\n targetSessionKey: string;\n metadata?: Record<string, unknown>;\n}): BindingRecord {\n const now = Date.now();\n const rec: BindingRecord = {\n accountId: params.accountId,\n conversationId: params.conversationId,\n parentConversationId: params.parentConversationId,\n targetSessionKey: params.targetSessionKey,\n boundAt: now,\n lastActivityAt: now,\n metadata: params.metadata,\n };\n getState().byAccountConversation.set(key(rec.accountId, rec.conversationId), rec);\n return rec;\n}\n\nexport function listBindingsBySessionKey(accountId: string, targetSessionKey: string): BindingRecord[] {\n const out: BindingRecord[] = [];\n for (const rec of getState().byAccountConversation.values()) {\n if (rec.accountId === accountId && rec.targetSessionKey === targetSessionKey) out.push(rec);\n }\n return out;\n}\n\nexport function unbindBySessionKey(accountId: string, targetSessionKey: string): BindingRecord[] {\n const removed: BindingRecord[] = [];\n for (const rec of getState().byAccountConversation.values()) {\n if (rec.accountId !== accountId || rec.targetSessionKey !== targetSessionKey) continue;\n getState().byAccountConversation.delete(key(rec.accountId, rec.conversationId));\n removed.push(rec);\n }\n return removed;\n}\n"],"mappings":";AAcA,MAAM,YAAY,OAAO,IAAI,iCAAiC;AAE9D,SAAS,WAAkB;CACzB,MAAM,QAAQ;CACd,IAAI,KAAK,MAAM;AACf,KAAI,CAAC,IAAI;AACP,OAAK,EAAE,uCAAuB,IAAI,KAAK,EAAE;AACzC,QAAM,aAAa;;AAErB,QAAO;;AAGT,SAAS,IAAI,WAAmB,gBAAgC;AAC9D,QAAO,GAAG,UAAU,GAAG;;AAGzB,SAAgB,uBAAuB,QAMrB;CAChB,MAAM,MAAM,KAAK,KAAK;CACtB,MAAM,MAAqB;EACzB,WAAW,OAAO;EAClB,gBAAgB,OAAO;EACvB,sBAAsB,OAAO;EAC7B,kBAAkB,OAAO;EACzB,SAAS;EACT,gBAAgB;EAChB,UAAU,OAAO;EAClB;AACD,WAAU,CAAC,sBAAsB,IAAI,IAAI,IAAI,WAAW,IAAI,eAAe,EAAE,IAAI;AACjF,QAAO;;AAGT,SAAgB,yBAAyB,WAAmB,kBAA2C;CACrG,MAAM,MAAuB,EAAE;AAC/B,MAAK,MAAM,OAAO,UAAU,CAAC,sBAAsB,QAAQ,CACzD,KAAI,IAAI,cAAc,aAAa,IAAI,qBAAqB,iBAAkB,KAAI,KAAK,IAAI;AAE7F,QAAO;;AAGT,SAAgB,mBAAmB,WAAmB,kBAA2C;CAC/F,MAAM,UAA2B,EAAE;AACnC,MAAK,MAAM,OAAO,UAAU,CAAC,sBAAsB,QAAQ,EAAE;AAC3D,MAAI,IAAI,cAAc,aAAa,IAAI,qBAAqB,iBAAkB;AAC9E,YAAU,CAAC,sBAAsB,OAAO,IAAI,IAAI,WAAW,IAAI,eAAe,CAAC;AAC/E,UAAQ,KAAK,IAAI;;AAEnB,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","names":[],"sources":["../../../../../extensions/feishu/src/status/doctor.ts"],"sourcesContent":["import type { ChannelDoctorAdapter, ChannelDoctorCheckResult } from '@xopcai/xopc/channels/plugin-types.js';\nimport type { Config } from '@xopcai/xopc/config/schema.js';\n\nimport { listFeishuAccountIds, resolveFeishuAccount } from '../state/accounts.js';\n\nfunction checkAccount(cfg: Config, accountId: string): ChannelDoctorCheckResult[] {\n const a = resolveFeishuAccount(cfg, accountId);\n const results: ChannelDoctorCheckResult[] = [];\n results.push({\n id: `feishu.${accountId}.configured`,\n label: `Feishu[${accountId}] credentials`,\n status: a.configured ? 'pass' : 'fail',\n message: a.configured ? 'Configured' : 'Missing appId/appSecret',\n hints: a.configured\n ? []\n : ['Set `channels.feishu.appId` and `channels.feishu.appSecret` (or per-account under `channels.feishu.accounts`).'],\n });\n results.push({\n id: `feishu.${accountId}.mode`,\n label: `Feishu[${accountId}] connection mode`,\n status: 'pass',\n message: `Mode: ${a.connectionMode}`,\n hints: [],\n });\n return results;\n}\n\nexport function createFeishuDoctorAdapter(): ChannelDoctorAdapter {\n return {\n async check(params: { cfg: Config }) {\n const ids = listFeishuAccountIds(params.cfg);\n if (ids.length === 0) {\n return [\n {\n id: 'feishu.missing',\n label: 'Feishu config',\n status: 'skip',\n message: 'No channels.feishu config present',\n hints: ['Add `channels.feishu.enabled=true` to start the channel.'],\n },\n ];\n }\n return ids.flatMap((id) => checkAccount(params.cfg, id));\n },\n };\n}\n\n"],"mappings":";;AAKA,SAAS,aAAa,KAAa,WAA+C;CAChF,MAAM,IAAI,qBAAqB,KAAK,UAAU;CAC9C,MAAM,UAAsC,EAAE;AAC9C,SAAQ,KAAK;EACX,IAAI,UAAU,UAAU;EACxB,OAAO,UAAU,UAAU;EAC3B,QAAQ,EAAE,aAAa,SAAS;EAChC,SAAS,EAAE,aAAa,eAAe;EACvC,OAAO,EAAE,aACL,EAAE,GACF,CAAC,iHAAiH;EACvH,CAAC;AACF,SAAQ,KAAK;EACX,IAAI,UAAU,UAAU;EACxB,OAAO,UAAU,UAAU;EAC3B,QAAQ;EACR,SAAS,SAAS,EAAE;EACpB,OAAO,EAAE;EACV,CAAC;AACF,QAAO;;AAGT,SAAgB,4BAAkD;AAChE,QAAO,EACL,MAAM,MAAM,QAAyB;EACnC,MAAM,MAAM,qBAAqB,OAAO,IAAI;AAC5C,MAAI,IAAI,WAAW,EACjB,QAAO,CACL;GACE,IAAI;GACJ,OAAO;GACP,QAAQ;GACR,SAAS;GACT,OAAO,CAAC,2DAA2D;GACpE,CACF;AAEH,SAAO,IAAI,SAAS,OAAO,aAAa,OAAO,KAAK,GAAG,CAAC;IAE3D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status-adapter.js","names":[],"sources":["../../../../../extensions/feishu/src/status/status-adapter.ts"],"sourcesContent":["import type { ChannelStatusAdapter } from '@xopcai/xopc/channels/plugin-types.js';\nimport type { Config } from '@xopcai/xopc/config/schema.js';\n\nimport type { ResolvedFeishuAccount } from '../state/accounts.js';\n\nexport function createFeishuStatusAdapter(): ChannelStatusAdapter<ResolvedFeishuAccount> {\n return {\n defaultRuntime: {\n accountId: 'default',\n channelId: 'feishu',\n enabled: true,\n configured: false,\n },\n buildAccountSnapshot: async ({ account }) => ({\n accountId: account.accountId,\n channelId: 'feishu',\n enabled: account.enabled,\n configured: account.configured,\n status: account.configured ? 'online' : 'unconfigured',\n }),\n resolveAccountState: ({ configured, enabled }) => {\n if (!enabled) return 'disabled';\n if (!configured) return 'error';\n return 'online';\n },\n probeAccount: async ({ account, timeoutMs, cfg }) => {\n // Best-effort: ensure credentials present. Real probe will call Feishu API later.\n return {\n ok: account.configured,\n timeoutMs,\n domain: account.domain,\n mode: account.connectionMode,\n enabled: account.enabled,\n configured: account.configured,\n hasConfig: Boolean((cfg.channels?.feishu as any)?.enabled),\n };\n },\n buildChannelSummary: async ({ snapshot }) => ({\n ok: snapshot.configured && snapshot.enabled,\n accountId: snapshot.accountId,\n enabled: snapshot.enabled,\n configured: snapshot.configured,\n status: snapshot.status,\n }),\n };\n}\n\n"],"mappings":";AAKA,SAAgB,4BAAyE;AACvF,QAAO;EACL,gBAAgB;GACd,WAAW;GACX,WAAW;GACX,SAAS;GACT,YAAY;GACb;EACD,sBAAsB,OAAO,EAAE,eAAe;GAC5C,WAAW,QAAQ;GACnB,WAAW;GACX,SAAS,QAAQ;GACjB,YAAY,QAAQ;GACpB,QAAQ,QAAQ,aAAa,WAAW;GACzC;EACD,sBAAsB,EAAE,YAAY,cAAc;AAChD,OAAI,CAAC,QAAS,QAAO;AACrB,OAAI,CAAC,WAAY,QAAO;AACxB,UAAO;;EAET,cAAc,OAAO,EAAE,SAAS,WAAW,UAAU;AAEnD,UAAO;IACL,IAAI,QAAQ;IACZ;IACA,QAAQ,QAAQ;IAChB,MAAM,QAAQ;IACd,SAAS,QAAQ;IACjB,YAAY,QAAQ;IACpB,WAAW,SAAS,IAAI,UAAU,SAAgB,QAAQ;IAC3D;;EAEH,qBAAqB,OAAO,EAAE,gBAAgB;GAC5C,IAAI,SAAS,cAAc,SAAS;GACpC,WAAW,SAAS;GACpB,SAAS,SAAS;GAClB,YAAY,SAAS;GACrB,QAAQ,SAAS;GAClB;EACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streaming-adapter.js","names":[],"sources":["../../../../../extensions/feishu/src/streaming/streaming-adapter.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type {\n ChannelStreamHandle,\n ChannelStreamingAdapter,\n} from '@xopcai/xopc/channels/plugin-types.js';\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\n\nimport { resolveFeishuAccount } from '../state/accounts.js';\nimport { getFeishuBindingByMessageId, recordFeishuMessageBinding } from '../state/message-bindings.js';\n\nconst log = createLogger('FeishuStreaming');\n\n/** Normalize CardKit `card.create` responses (SDK / OpenAPI envelope shapes differ). */\nfunction extractFeishuCardKitCreateCardId(raw: unknown): string | undefined {\n if (!raw || typeof raw !== 'object') return undefined;\n const o = raw as Record<string, unknown>;\n const tryId = (v: unknown): string | undefined => {\n if (typeof v !== 'string') return undefined;\n const t = v.trim();\n return t.length > 0 ? t : undefined;\n };\n\n const fromData = (data: unknown): string | undefined => {\n if (!data || typeof data !== 'object') return undefined;\n const d = data as Record<string, unknown>;\n return tryId(d.card_id) ?? tryId(d.cardId);\n };\n\n return (\n fromData(o.data) ??\n (o.data && typeof o.data === 'object' ? fromData((o.data as Record<string, unknown>).data) : undefined) ??\n tryId(o.card_id)\n );\n}\n\nfunction feishuOpenApiOk(res: unknown): boolean {\n if (res === null || res === undefined) return false;\n if (typeof res !== 'object') return true;\n const code = (res as Record<string, unknown>).code;\n if (code === undefined || code === null) return true;\n return Number(code) === 0;\n}\n\nexport function createFeishuStreamingAdapter(getConfig: () => Config): ChannelStreamingAdapter {\n return {\n startStream(options: {\n chatId: string;\n accountId?: string;\n threadId?: string;\n replyToMessageId?: string;\n parseMode?: 'Markdown' | 'HTML';\n }): ChannelStreamHandle | null {\n const cfg = getConfig();\n const account = resolveFeishuAccount(cfg, options.accountId ?? 'default');\n if (!account.configured) {\n return null;\n }\n // Feishu streaming is opt-in. When omitted/false, fall back to normal final outbound.\n if (account.streaming !== true) {\n return null;\n }\n let apiPromise: Promise<unknown> | null = null;\n const getApi = async () => {\n apiPromise ??= import('../transport/client/client.js').then(({ createFeishuClient }) => createFeishuClient(account).api);\n return apiPromise;\n };\n\n let messageId: string | undefined;\n let lastText = '';\n let timer: NodeJS.Timeout | null = null;\n let aborted = false;\n let editedAtLeastOnce = false;\n let ready: Promise<void> | null = null;\n let cardId: string | undefined;\n let cardSeq = 0;\n const cardElementId = `md_${randomUUID().replace(/-/g, '')}`;\n let fallbackSent = false;\n\n const renderMode = account.renderMode ?? 'auto';\n const preferCard = renderMode === 'card' || renderMode === 'auto';\n\n const formatStreamText = async (text: string) => {\n if (!text.trim()) return text;\n if (text.trim() === 'Thinking…') return text;\n const forCardMarkdown = Boolean(preferCard && cardId);\n const { formatFeishuOutboundText } = await import('../format.js');\n return formatFeishuOutboundText({\n text,\n renderMode,\n forCardMarkdown,\n });\n };\n\n const recordBindingIfReply = (childMessageId: string) => {\n if (!childMessageId) return;\n const parentId = options.replyToMessageId;\n if (!parentId) return;\n const parent = getFeishuBindingByMessageId(parentId);\n if (!parent) return;\n recordFeishuMessageBinding({ ...parent, messageId: childMessageId });\n };\n\n const edit = async (text: string) => {\n if (ready) await ready;\n if (!messageId) return;\n const outbound = await formatStreamText(text);\n if (cardId && preferCard) {\n cardSeq += 1;\n await ((await getApi()) as any).cardkit.v1.cardElement.content({\n path: { card_id: cardId, element_id: cardElementId },\n data: {\n content: outbound,\n sequence: cardSeq,\n uuid: `${cardId}:${cardSeq}`,\n },\n });\n } else {\n await ((await getApi()) as any).im.v1.message.update({\n path: { message_id: messageId },\n data: { msg_type: 'text', content: JSON.stringify({ text: outbound }) },\n });\n }\n editedAtLeastOnce = true;\n };\n\n const sendFallbackText = async (text: string) => {\n if (fallbackSent) return;\n fallbackSent = true;\n const receive_id_type =\n options.chatId.startsWith('ou_') || options.chatId.startsWith('on_') ? 'open_id' : 'chat_id';\n try {\n const outbound = await formatStreamText(text);\n const res = options.replyToMessageId\n ? await ((await getApi()) as any).im.message.reply({\n path: { message_id: options.replyToMessageId },\n data: {\n msg_type: 'text',\n content: JSON.stringify({ text: outbound }),\n ...(options.threadId ? { reply_in_thread: true } : {}),\n },\n })\n : await ((await getApi()) as any).im.message.create({\n params: { receive_id_type },\n data: {\n receive_id: options.chatId,\n msg_type: 'text',\n content: JSON.stringify({ text: outbound }),\n },\n });\n const mid = res?.data?.message_id ?? res?.message_id ?? undefined;\n if (mid) recordBindingIfReply(mid);\n // Mark as delivered through the channel so the final outbound is skipped.\n editedAtLeastOnce = true;\n messageId = mid ?? messageId;\n // If we were in card mode, stop trying to update the card.\n cardId = undefined;\n } catch (err) {\n log.warn({ err, accountId: account.accountId }, 'Feishu streaming fallback send failed');\n }\n };\n\n const flush = async () => {\n if (aborted) return;\n if (ready) await ready;\n if (!messageId) return;\n const text = lastText;\n if (!text.trim()) return;\n try {\n await edit(text);\n } catch (err) {\n // Don't crash the agent loop. CardKit updates can fail (scopes, element conflicts); plain\n // `im.message.update` can also fail for some message states — always fall back to a text\n // reply so the user is not stuck on \"Thinking…\".\n log.warn({ err, accountId: account.accountId, messageId, mode: preferCard ? 'card' : 'text' }, 'Feishu streaming edit failed');\n await sendFallbackText(text);\n }\n };\n\n const start = async () => {\n const receive_id_type =\n options.chatId.startsWith('ou_') || options.chatId.startsWith('on_') ? 'open_id' : 'chat_id';\n const thinking = 'Thinking…';\n\n if (preferCard) {\n const cardSpec = {\n schema: '2.0',\n config: { update_multi: true },\n header: {\n title: { tag: 'plain_text', content: 'xopc' },\n },\n body: {\n elements: [\n {\n tag: 'markdown',\n element_id: cardElementId,\n content: thinking,\n },\n ],\n },\n };\n\n let created: unknown;\n try {\n created = await ((await getApi()) as any).cardkit.v1.card.create({\n data: { type: 'card_json', data: JSON.stringify(cardSpec) },\n });\n } catch (err) {\n log.warn({ err, accountId: account.accountId }, 'Feishu cardkit.card.create threw; falling back to text stream');\n created = null;\n }\n\n const apiOk = feishuOpenApiOk(created);\n cardId = apiOk ? extractFeishuCardKitCreateCardId(created) : undefined;\n\n if (!apiOk) {\n log.warn(\n {\n accountId: account.accountId,\n code: (created as Record<string, unknown> | null)?.code,\n msg: (created as Record<string, unknown> | null)?.msg,\n },\n 'Feishu cardkit.card.create returned non-zero code; falling back to text stream',\n );\n } else if (!cardId) {\n log.warn(\n { accountId: account.accountId, responsePreview: JSON.stringify(created).slice(0, 400) },\n 'Feishu cardkit.card.create returned no card_id; falling back to text stream',\n );\n }\n\n if (cardId) {\n const res = options.replyToMessageId\n ? await ((await getApi()) as any).im.message.reply({\n path: { message_id: options.replyToMessageId },\n data: {\n msg_type: 'interactive',\n content: JSON.stringify({ type: 'card', data: { card_id: cardId } }),\n ...(options.threadId ? { reply_in_thread: true } : {}),\n },\n })\n : await ((await getApi()) as any).im.message.create({\n params: { receive_id_type },\n data: {\n receive_id: options.chatId,\n msg_type: 'interactive',\n content: JSON.stringify({ type: 'card', data: { card_id: cardId } }),\n },\n });\n messageId = res?.data?.message_id ?? res?.message_id ?? undefined;\n if (messageId) recordBindingIfReply(messageId);\n log.info(\n { accountId: account.accountId, chatId: options.chatId, messageId, mode: 'card' },\n 'Feishu streaming started',\n );\n return;\n }\n\n // Clear so downstream edits use im.message.update (text), not CardKit.\n cardId = undefined;\n }\n\n const res = options.replyToMessageId\n ? await ((await getApi()) as any).im.message.reply({\n path: { message_id: options.replyToMessageId },\n data: {\n msg_type: 'text',\n content: JSON.stringify({ text: thinking }),\n ...(options.threadId ? { reply_in_thread: true } : {}),\n },\n })\n : await ((await getApi()) as any).im.message.create({\n params: { receive_id_type },\n data: {\n receive_id: options.chatId,\n msg_type: 'text',\n content: JSON.stringify({ text: thinking }),\n },\n });\n messageId = res?.data?.message_id ?? res?.message_id ?? undefined;\n if (messageId) recordBindingIfReply(messageId);\n log.info(\n { accountId: account.accountId, chatId: options.chatId, messageId, mode: 'text' },\n 'Feishu streaming started',\n );\n };\n\n ready = start().catch((err) => {\n log.warn({ err, accountId: account.accountId }, 'Feishu streaming start failed');\n });\n\n return {\n update: (text: string) => {\n lastText = text;\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n void flush().catch((err) => log.warn({ err }, 'Feishu streaming flush failed'));\n }, 800);\n },\n end: async () => {\n if (timer) clearTimeout(timer);\n await flush();\n log.debug(\n {\n accountId: account.accountId,\n chatId: options.chatId,\n messageId,\n editedAtLeastOnce,\n lastTextLen: lastText.length,\n mode: preferCard ? 'card' : 'text',\n },\n 'Feishu streaming ended',\n );\n },\n abort: async () => {\n aborted = true;\n if (timer) clearTimeout(timer);\n },\n messageId: () => undefined,\n skipFinalOutbound: () => Boolean(messageId) && editedAtLeastOnce,\n updateProgress: undefined,\n setProgress: undefined,\n };\n },\n };\n}\n\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-hooks.js","names":[],"sources":["../../../../extensions/feishu/src/subagent-hooks.ts"],"sourcesContent":["import { bindFeishuConversation, unbindBySessionKey } from './state/thread-bindings.js';\n\nfunction normLower(v: unknown): string {\n return typeof v === 'string' ? v.trim().toLowerCase() : '';\n}\n\nfunction stripProviderPrefix(raw: string): string {\n return raw.replace(/^(feishu|lark):/i, '').trim();\n}\n\nexport async function handleFeishuSubagentSpawning(event: any, ctx: { requesterSessionKey?: string } = {}) {\n if (!event?.threadRequested) return undefined;\n const requesterChannel = normLower(event?.requester?.channel);\n if (requesterChannel !== 'feishu') return undefined;\n\n const accountId = String(event?.requester?.accountId ?? '').trim() || 'default';\n const to = String(event?.requester?.to ?? '').trim();\n const threadId =\n event?.requester?.threadId != null && event.requester.threadId !== ''\n ? String(event.requester.threadId).trim()\n : '';\n\n const withoutProvider = to ? stripProviderPrefix(to) : '';\n const isChatTarget = /^(chat|group|channel):/i.test(withoutProvider);\n\n // Minimal parity: only bind DM targets or topic thread targets.\n if (!to) return { status: 'error' as const, error: 'Missing requester delivery target (to)' };\n if (isChatTarget && !threadId) {\n return { status: 'error' as const, error: 'Thread binding requires a topic threadId for chat targets' };\n }\n\n const conversationId = isChatTarget ? `${withoutProvider}|topic:${threadId}` : withoutProvider;\n bindFeishuConversation({\n accountId,\n conversationId,\n parentConversationId: isChatTarget ? withoutProvider : undefined,\n targetSessionKey: String(event.childSessionKey),\n metadata: {\n requesterSessionKey: ctx.requesterSessionKey,\n deliveryTo: to,\n deliveryThreadId: threadId || undefined,\n agentId: event?.agentId,\n label: event?.label,\n },\n });\n\n return { status: 'ok' as const, threadBindingReady: true };\n}\n\nexport function handleFeishuSubagentEnded(event: any) {\n const accountId = String(event?.accountId ?? '').trim() || 'default';\n const sk = String(event?.targetSessionKey ?? '').trim();\n if (!sk) return;\n unbindBySessionKey(accountId, sk);\n}\n\n"],"mappings":";;AAEA,SAAS,UAAU,GAAoB;AACrC,QAAO,OAAO,MAAM,WAAW,EAAE,MAAM,CAAC,aAAa,GAAG;;AAG1D,SAAS,oBAAoB,KAAqB;AAChD,QAAO,IAAI,QAAQ,oBAAoB,GAAG,CAAC,MAAM;;AAGnD,eAAsB,6BAA6B,OAAY,MAAwC,EAAE,EAAE;AACzG,KAAI,CAAC,OAAO,gBAAiB,QAAO,KAAA;AAEpC,KADyB,UAAU,OAAO,WAAW,QACjC,KAAK,SAAU,QAAO,KAAA;CAE1C,MAAM,YAAY,OAAO,OAAO,WAAW,aAAa,GAAG,CAAC,MAAM,IAAI;CACtE,MAAM,KAAK,OAAO,OAAO,WAAW,MAAM,GAAG,CAAC,MAAM;CACpD,MAAM,WACJ,OAAO,WAAW,YAAY,QAAQ,MAAM,UAAU,aAAa,KAC/D,OAAO,MAAM,UAAU,SAAS,CAAC,MAAM,GACvC;CAEN,MAAM,kBAAkB,KAAK,oBAAoB,GAAG,GAAG;CACvD,MAAM,eAAe,0BAA0B,KAAK,gBAAgB;AAGpE,KAAI,CAAC,GAAI,QAAO;EAAE,QAAQ;EAAkB,OAAO;EAA0C;AAC7F,KAAI,gBAAgB,CAAC,SACnB,QAAO;EAAE,QAAQ;EAAkB,OAAO;EAA6D;AAIzG,wBAAuB;EACrB;EACA,gBAHqB,eAAe,GAAG,gBAAgB,SAAS,aAAa;EAI7E,sBAAsB,eAAe,kBAAkB,KAAA;EACvD,kBAAkB,OAAO,MAAM,gBAAgB;EAC/C,UAAU;GACR,qBAAqB,IAAI;GACzB,YAAY;GACZ,kBAAkB,YAAY,KAAA;GAC9B,SAAS,OAAO;GAChB,OAAO,OAAO;GACf;EACF,CAAC;AAEF,QAAO;EAAE,QAAQ;EAAe,oBAAoB;EAAM;;AAG5D,SAAgB,0BAA0B,OAAY;CACpD,MAAM,YAAY,OAAO,OAAO,aAAa,GAAG,CAAC,MAAM,IAAI;CAC3D,MAAM,KAAK,OAAO,OAAO,oBAAoB,GAAG,CAAC,MAAM;AACvD,KAAI,CAAC,GAAI;AACT,oBAAmB,WAAW,GAAG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"docx-batch-insert.js","names":[],"sources":["../../../../../../extensions/feishu/src/tools/docx/docx-batch-insert.ts"],"sourcesContent":["import type * as Lark from '@larksuiteoapi/node-sdk';\n\nimport { cleanBlocksForDescendant } from './docx-table-ops.js';\nimport type { FeishuDocxBlock, FeishuDocxBlockChild } from './docx-types.js';\n\nexport const BATCH_SIZE = 1000;\n\nfunction readStringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value : undefined;\n}\n\ntype DocxDescendantCreatePayload = NonNullable<\n Parameters<Lark.Client['docx']['documentBlockDescendant']['create']>[0]\n>;\ntype DocxDescendantCreateBlock = NonNullable<\n NonNullable<DocxDescendantCreatePayload['data']>['descendants']\n>[number];\n\nfunction normalizeChildIds(children: string[] | string | undefined): string[] | undefined {\n if (Array.isArray(children)) return children;\n const child = readStringValue(children);\n return child ? [child] : undefined;\n}\n\nfunction toDescendantBlock(block: FeishuDocxBlock): DocxDescendantCreateBlock {\n const children = normalizeChildIds(block.children);\n return {\n ...block,\n ...(children ? { children } : {}),\n } as DocxDescendantCreateBlock;\n}\n\nfunction collectDescendants(blockMap: Map<string, FeishuDocxBlock>, rootId: string): FeishuDocxBlock[] {\n const result: FeishuDocxBlock[] = [];\n const visited = new Set<string>();\n\n function collect(blockId: string) {\n if (visited.has(blockId)) return;\n visited.add(blockId);\n const block = blockMap.get(blockId);\n if (!block) return;\n result.push(block);\n const children = block.children;\n if (Array.isArray(children)) {\n for (const childId of children) collect(childId);\n } else if (typeof children === 'string') {\n collect(children);\n }\n }\n\n collect(rootId);\n return result;\n}\n\nasync function insertBatch(\n client: Lark.Client,\n docToken: string,\n blocks: FeishuDocxBlock[],\n firstLevelBlockIds: string[],\n parentBlockId: string = docToken,\n index: number = -1,\n): Promise<FeishuDocxBlockChild[]> {\n const descendants = cleanBlocksForDescendant(blocks);\n if (descendants.length === 0) return [];\n\n const res = await client.docx.documentBlockDescendant.create({\n path: { document_id: docToken, block_id: parentBlockId },\n data: {\n children_id: firstLevelBlockIds,\n descendants: descendants.map(toDescendantBlock),\n index,\n },\n });\n if (res.code !== 0) throw new Error(`${res.msg} (code: ${res.code})`);\n return res.data?.children ?? [];\n}\n\ntype Logger = { info?: (msg: string) => void };\n\nexport async function insertBlocksInBatches(\n client: Lark.Client,\n docToken: string,\n blocks: FeishuDocxBlock[],\n firstLevelBlockIds: string[],\n logger?: Logger,\n parentBlockId: string = docToken,\n startIndex: number = -1,\n): Promise<{ children: FeishuDocxBlockChild[]; skipped: string[] }> {\n const allChildren: FeishuDocxBlockChild[] = [];\n\n const batches: Array<{ firstLevelIds: string[]; blocks: FeishuDocxBlock[] }> = [];\n let currentBatch: { firstLevelIds: string[]; blocks: FeishuDocxBlock[] } = { firstLevelIds: [], blocks: [] };\n const usedBlockIds = new Set<string>();\n const blockMap = new Map<string, FeishuDocxBlock>();\n for (const block of blocks) {\n if (block.block_id) blockMap.set(block.block_id, block);\n }\n\n for (const firstLevelId of firstLevelBlockIds) {\n const descendants = collectDescendants(blockMap, firstLevelId);\n const newBlocks = descendants.filter((b) => b.block_id && !usedBlockIds.has(b.block_id));\n\n if (newBlocks.length > BATCH_SIZE) {\n throw new Error(\n `Block \"${firstLevelId}\" has ${newBlocks.length} descendants, exceeds Feishu API limit ${BATCH_SIZE}. Split content.`,\n );\n }\n\n if (currentBatch.blocks.length + newBlocks.length > BATCH_SIZE && currentBatch.blocks.length > 0) {\n batches.push(currentBatch);\n currentBatch = { firstLevelIds: [], blocks: [] };\n }\n\n currentBatch.firstLevelIds.push(firstLevelId);\n for (const block of newBlocks) {\n currentBatch.blocks.push(block);\n if (block.block_id) usedBlockIds.add(block.block_id);\n }\n }\n\n if (currentBatch.blocks.length > 0) batches.push(currentBatch);\n\n let currentIndex = startIndex;\n for (let i = 0; i < batches.length; i++) {\n const batch = batches[i]!;\n logger?.info?.(`feishu_doc: Inserting batch ${i + 1}/${batches.length} (${batch.blocks.length} blocks)...`);\n const children = await insertBatch(client, docToken, batch.blocks, batch.firstLevelIds, parentBlockId, currentIndex);\n allChildren.push(...children);\n if (currentIndex !== -1) currentIndex += batch.firstLevelIds.length;\n }\n\n return { children: allChildren, skipped: [] };\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"docx-color-text.js","names":[],"sources":["../../../../../../extensions/feishu/src/tools/docx/docx-color-text.ts"],"sourcesContent":["import type * as Lark from '@larksuiteoapi/node-sdk';\n\nconst TEXT_COLOR: Record<string, number> = {\n red: 1,\n orange: 2,\n yellow: 3,\n green: 4,\n blue: 5,\n purple: 6,\n grey: 7,\n gray: 7,\n};\n\nconst BACKGROUND_COLOR: Record<string, number> = {\n red: 1,\n orange: 2,\n yellow: 3,\n green: 4,\n blue: 5,\n purple: 6,\n grey: 7,\n gray: 7,\n};\n\nfunction normalizeLower(s: string): string {\n return (s ?? '').trim().toLowerCase();\n}\n\ninterface Segment {\n text: string;\n textColor?: number;\n bgColor?: number;\n bold?: boolean;\n}\n\ntype DocxPatchPayload = NonNullable<Parameters<Lark.Client['docx']['documentBlock']['patch']>[0]>;\ntype DocxTextElement = NonNullable<\n NonNullable<NonNullable<DocxPatchPayload['data']>['update_text_elements']>['elements']\n>[number];\n\nexport function parseColorMarkup(content: string): Segment[] {\n const segments: Segment[] = [];\n const KNOWN = '(?:bg:[a-z]+|bold|red|orange|yellow|green|blue|purple|gr[ae]y)';\n const tagPattern = new RegExp(\n `\\\\[(${KNOWN}(?:\\\\s+${KNOWN})*)\\\\](.*?)\\\\[\\\\/(?:[^\\\\]]+)\\\\]|([^[]+|\\\\[)`,\n 'gis',\n );\n\n let match: RegExpExecArray | null;\n while ((match = tagPattern.exec(content)) !== null) {\n if (match[3] !== undefined) {\n if (match[3]) segments.push({ text: match[3] });\n continue;\n }\n const tagStr = normalizeLower(match[1] || '');\n const text = match[2] || '';\n const tags = tagStr.split(/\\s+/).filter(Boolean);\n const segment: Segment = { text };\n for (const tag of tags) {\n if (tag.startsWith('bg:')) {\n const color = tag.slice(3);\n if (BACKGROUND_COLOR[color]) segment.bgColor = BACKGROUND_COLOR[color];\n } else if (tag === 'bold') {\n segment.bold = true;\n } else if (TEXT_COLOR[tag]) {\n segment.textColor = TEXT_COLOR[tag];\n }\n }\n if (text) segments.push(segment);\n }\n return segments;\n}\n\nexport async function updateColorText(client: Lark.Client, docToken: string, blockId: string, content: string) {\n const segments = parseColorMarkup(content);\n const elements: DocxTextElement[] = segments.map((seg) => ({\n text_run: {\n content: seg.text,\n text_element_style: {\n ...(seg.textColor ? { text_color: seg.textColor } : {}),\n ...(seg.bgColor ? { background_color: seg.bgColor } : {}),\n ...(seg.bold ? { bold: true } : {}),\n },\n },\n }));\n\n const res = await client.docx.documentBlock.patch({\n path: { document_id: docToken, block_id: blockId },\n data: { update_text_elements: { elements } },\n });\n if (res.code !== 0) throw new Error(res.msg);\n return { success: true, segments: segments.length, block: res.data?.block };\n}\n\n"],"mappings":";AAEA,MAAM,aAAqC;CACzC,KAAK;CACL,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,MAAM;CACN,QAAQ;CACR,MAAM;CACN,MAAM;CACP;AAED,MAAM,mBAA2C;CAC/C,KAAK;CACL,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,MAAM;CACN,QAAQ;CACR,MAAM;CACN,MAAM;CACP;AAED,SAAS,eAAe,GAAmB;AACzC,SAAQ,KAAK,IAAI,MAAM,CAAC,aAAa;;AAevC,SAAgB,iBAAiB,SAA4B;CAC3D,MAAM,WAAsB,EAAE;CAC9B,MAAM,QAAQ;CACd,MAAM,aAAa,IAAI,OACrB,OAAO,MAAM,SAAS,MAAM,8CAC5B,MACD;CAED,IAAI;AACJ,SAAQ,QAAQ,WAAW,KAAK,QAAQ,MAAM,MAAM;AAClD,MAAI,MAAM,OAAO,KAAA,GAAW;AAC1B,OAAI,MAAM,GAAI,UAAS,KAAK,EAAE,MAAM,MAAM,IAAI,CAAC;AAC/C;;EAEF,MAAM,SAAS,eAAe,MAAM,MAAM,GAAG;EAC7C,MAAM,OAAO,MAAM,MAAM;EACzB,MAAM,OAAO,OAAO,MAAM,MAAM,CAAC,OAAO,QAAQ;EAChD,MAAM,UAAmB,EAAE,MAAM;AACjC,OAAK,MAAM,OAAO,KAChB,KAAI,IAAI,WAAW,MAAM,EAAE;GACzB,MAAM,QAAQ,IAAI,MAAM,EAAE;AAC1B,OAAI,iBAAiB,OAAQ,SAAQ,UAAU,iBAAiB;aACvD,QAAQ,OACjB,SAAQ,OAAO;WACN,WAAW,KACpB,SAAQ,YAAY,WAAW;AAGnC,MAAI,KAAM,UAAS,KAAK,QAAQ;;AAElC,QAAO;;AAGT,eAAsB,gBAAgB,QAAqB,UAAkB,SAAiB,SAAiB;CAC7G,MAAM,WAAW,iBAAiB,QAAQ;CAC1C,MAAM,WAA8B,SAAS,KAAK,SAAS,EACzD,UAAU;EACR,SAAS,IAAI;EACb,oBAAoB;GAClB,GAAI,IAAI,YAAY,EAAE,YAAY,IAAI,WAAW,GAAG,EAAE;GACtD,GAAI,IAAI,UAAU,EAAE,kBAAkB,IAAI,SAAS,GAAG,EAAE;GACxD,GAAI,IAAI,OAAO,EAAE,MAAM,MAAM,GAAG,EAAE;GACnC;EACF,EACF,EAAE;CAEH,MAAM,MAAM,MAAM,OAAO,KAAK,cAAc,MAAM;EAChD,MAAM;GAAE,aAAa;GAAU,UAAU;GAAS;EAClD,MAAM,EAAE,sBAAsB,EAAE,UAAU,EAAE;EAC7C,CAAC;AACF,KAAI,IAAI,SAAS,EAAG,OAAM,IAAI,MAAM,IAAI,IAAI;AAC5C,QAAO;EAAE,SAAS;EAAM,UAAU,SAAS;EAAQ,OAAO,IAAI,MAAM;EAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"docx-table-ops.js","names":[],"sources":["../../../../../../extensions/feishu/src/tools/docx/docx-table-ops.ts"],"sourcesContent":["import type * as Lark from '@larksuiteoapi/node-sdk';\n\nimport type { FeishuBlockTable, FeishuDocxBlock } from './docx-types.js';\n\nconst MIN_COLUMN_WIDTH = 50;\nconst MAX_COLUMN_WIDTH = 400;\nconst DEFAULT_TABLE_WIDTH = 730;\n\nfunction normalizeChildBlockIds(children: string[] | string | undefined): string[] {\n if (Array.isArray(children)) return children;\n return typeof children === 'string' ? [children] : [];\n}\n\nfunction omitParentId(block: FeishuDocxBlock): FeishuDocxBlock {\n const cleanBlock = { ...block };\n delete cleanBlock.parent_id;\n return cleanBlock;\n}\n\nfunction createDescendantTable(table: FeishuBlockTable, adaptiveWidths: number[] | undefined): FeishuBlockTable {\n const { row_size, column_size } = table.property || {};\n return {\n property: {\n row_size,\n column_size,\n ...(adaptiveWidths?.length ? { column_width: adaptiveWidths } : {}),\n },\n };\n}\n\nexport function calculateAdaptiveColumnWidths(blocks: FeishuDocxBlock[], tableBlockId: string): number[] {\n const tableBlock = blocks.find((b) => b.block_id === tableBlockId && b.block_type === 31);\n if (!tableBlock?.table?.property) return [];\n\n const { row_size, column_size, column_width: originalWidths } = tableBlock.table.property;\n if (!row_size || !column_size) return [];\n\n const totalWidth =\n originalWidths && originalWidths.length > 0\n ? originalWidths.reduce((a: number, b: number) => a + b, 0)\n : DEFAULT_TABLE_WIDTH;\n\n const cellIds = normalizeChildBlockIds(tableBlock.children);\n const blockMap = new Map<string, FeishuDocxBlock>();\n for (const block of blocks) {\n if (block.block_id) blockMap.set(block.block_id, block);\n }\n\n function getCellText(cellId: string): string {\n const cell = blockMap.get(cellId);\n let text = '';\n const childIds = normalizeChildBlockIds(cell?.children as any);\n for (const childId of childIds) {\n const child = blockMap.get(childId);\n if (child?.text?.elements) {\n for (const elem of child.text.elements) {\n if (elem.text_run?.content) {\n text += elem.text_run.content;\n }\n }\n }\n }\n return text;\n }\n\n function getWeightedLength(text: string): number {\n return Array.from(text).reduce((sum, char) => sum + (char.charCodeAt(0) > 255 ? 2 : 1), 0);\n }\n\n const maxLengths = Array.from({ length: column_size }, () => 0);\n for (let row = 0; row < row_size; row++) {\n for (let col = 0; col < column_size; col++) {\n const cellIndex = row * column_size + col;\n const cellId = cellIds[cellIndex];\n if (!cellId) continue;\n const content = getCellText(cellId);\n const length = getWeightedLength(content);\n maxLengths[col] = Math.max(maxLengths[col], length);\n }\n }\n\n const totalLength = maxLengths.reduce((a, b) => a + b, 0);\n if (totalLength === 0) {\n const equalWidth = Math.max(\n MIN_COLUMN_WIDTH,\n Math.min(MAX_COLUMN_WIDTH, Math.floor(totalWidth / column_size)),\n );\n return Array.from({ length: column_size }, () => equalWidth);\n }\n\n let widths = maxLengths.map((len) => Math.round((len / totalLength) * totalWidth));\n widths = widths.map((w) => Math.max(MIN_COLUMN_WIDTH, Math.min(MAX_COLUMN_WIDTH, w)));\n\n let remaining = totalWidth - widths.reduce((a, b) => a + b, 0);\n while (remaining > 0) {\n const growable = widths.map((w, i) => (w < MAX_COLUMN_WIDTH ? i : -1)).filter((i) => i >= 0);\n if (growable.length === 0) break;\n const perColumn = Math.floor(remaining / growable.length);\n if (perColumn === 0) break;\n for (const i of growable) {\n const add = Math.min(perColumn, MAX_COLUMN_WIDTH - widths[i]!);\n widths[i]! += add;\n remaining -= add;\n }\n }\n\n return widths;\n}\n\nexport function cleanBlocksForDescendant(blocks: FeishuDocxBlock[]): FeishuDocxBlock[] {\n const tableWidths = new Map<string, number[]>();\n for (const block of blocks) {\n if (block.block_type === 31 && block.block_id) {\n tableWidths.set(block.block_id, calculateAdaptiveColumnWidths(blocks, block.block_id));\n }\n }\n\n return blocks.map((block) => {\n const cleanBlock = omitParentId(block);\n if (cleanBlock.block_type === 32 && typeof cleanBlock.children === 'string') {\n cleanBlock.children = [cleanBlock.children];\n }\n if (cleanBlock.block_type === 31 && cleanBlock.table) {\n const adaptive = block.block_id ? tableWidths.get(block.block_id) : undefined;\n cleanBlock.table = createDescendantTable(cleanBlock.table, adaptive);\n }\n return cleanBlock;\n });\n}\n\nexport async function insertTableRow(client: Lark.Client, docToken: string, blockId: string, rowIndex: number = -1) {\n const res = await client.docx.documentBlock.patch({\n path: { document_id: docToken, block_id: blockId },\n data: { insert_table_row: { row_index: rowIndex } },\n });\n if (res.code !== 0) throw new Error(res.msg);\n return { success: true, block: res.data?.block };\n}\n\nexport async function insertTableColumn(\n client: Lark.Client,\n docToken: string,\n blockId: string,\n columnIndex: number = -1,\n) {\n const res = await client.docx.documentBlock.patch({\n path: { document_id: docToken, block_id: blockId },\n data: { insert_table_column: { column_index: columnIndex } },\n });\n if (res.code !== 0) throw new Error(res.msg);\n return { success: true, block: res.data?.block };\n}\n\nexport async function deleteTableRows(\n client: Lark.Client,\n docToken: string,\n blockId: string,\n rowStart: number,\n rowCount: number = 1,\n) {\n const res = await client.docx.documentBlock.patch({\n path: { document_id: docToken, block_id: blockId },\n data: { delete_table_rows: { row_start_index: rowStart, row_end_index: rowStart + rowCount } },\n });\n if (res.code !== 0) throw new Error(res.msg);\n return { success: true, rows_deleted: rowCount, block: res.data?.block };\n}\n\nexport async function deleteTableColumns(\n client: Lark.Client,\n docToken: string,\n blockId: string,\n columnStart: number,\n columnCount: number = 1,\n) {\n const res = await client.docx.documentBlock.patch({\n path: { document_id: docToken, block_id: blockId },\n data: { delete_table_columns: { column_start_index: columnStart, column_end_index: columnStart + columnCount } },\n });\n if (res.code !== 0) throw new Error(res.msg);\n return { success: true, columns_deleted: columnCount, block: res.data?.block };\n}\n\nexport async function mergeTableCells(\n client: Lark.Client,\n docToken: string,\n blockId: string,\n rowStart: number,\n rowEnd: number,\n columnStart: number,\n columnEnd: number,\n) {\n const res = await client.docx.documentBlock.patch({\n path: { document_id: docToken, block_id: blockId },\n data: {\n merge_table_cells: {\n row_start_index: rowStart,\n row_end_index: rowEnd,\n column_start_index: columnStart,\n column_end_index: columnEnd,\n },\n },\n });\n if (res.code !== 0) throw new Error(res.msg);\n return { success: true, block: res.data?.block };\n}\n\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","names":[],"sources":["../../../../../extensions/feishu/src/tools/tools.ts"],"sourcesContent":["import type { Config } from '@xopcai/xopc/config/schema.js';\n\nimport { resolveFeishuAccount } from '../state/accounts.js';\nimport { createFeishuClient } from '../transport/client/client.js';\n\nexport async function feishuWhoAmI(params: { cfg: Config; accountId?: string }): Promise<any> {\n const account = resolveFeishuAccount(params.cfg, params.accountId ?? 'default');\n if (!account.configured) {\n throw new Error('Feishu account not configured');\n }\n const { api } = createFeishuClient(account);\n const res = await (api as any).auth.tenantAccessToken.internal({\n data: {\n app_id: account.appId,\n app_secret: account.appSecret,\n },\n });\n const token = res?.tenant_access_token || res?.data?.tenant_access_token || '';\n\n // Probe a few representative APIs to surface which permission buckets are working.\n // Keep it cheap: one lightweight call per area, each isolated so partial failures still return signal.\n const probes: Record<string, { ok: boolean; error?: string }> = {};\n\n const tryProbe = async (name: string, fn: () => Promise<void>) => {\n try {\n await fn();\n probes[name] = { ok: true };\n } catch (err) {\n probes[name] = { ok: false, error: err instanceof Error ? err.message : String(err) };\n }\n };\n\n await tryProbe('im.message.read', async () => {\n // A harmless endpoint that validates the token; will still fail if permissions missing.\n await (api as any).im.v1.chat.list({ params: { page_size: 1 } });\n });\n\n await tryProbe('drive.files.list', async () => {\n await (api as any).drive.v1.file.list({ params: { page_size: 1 } });\n });\n\n await tryProbe('wiki.spaces.list', async () => {\n await (api as any).wiki.v2.space.list({ params: { page_size: 1 } });\n });\n\n await tryProbe('bitable.apps.list', async () => {\n await (api as any).bitable.v1.app.list({ params: { page_size: 1 } });\n });\n\n return {\n ok: true,\n tenantAccessToken: Boolean(token),\n probes,\n };\n}\n\n"],"mappings":";;;AAKA,eAAsB,aAAa,QAA2D;CAC5F,MAAM,UAAU,qBAAqB,OAAO,KAAK,OAAO,aAAa,UAAU;AAC/E,KAAI,CAAC,QAAQ,WACX,OAAM,IAAI,MAAM,gCAAgC;CAElD,MAAM,EAAE,QAAQ,mBAAmB,QAAQ;CAC3C,MAAM,MAAM,MAAO,IAAY,KAAK,kBAAkB,SAAS,EAC7D,MAAM;EACJ,QAAQ,QAAQ;EAChB,YAAY,QAAQ;EACrB,EACF,CAAC;CACF,MAAM,QAAQ,KAAK,uBAAuB,KAAK,MAAM,uBAAuB;CAI5E,MAAM,SAA0D,EAAE;CAElE,MAAM,WAAW,OAAO,MAAc,OAA4B;AAChE,MAAI;AACF,SAAM,IAAI;AACV,UAAO,QAAQ,EAAE,IAAI,MAAM;WACpB,KAAK;AACZ,UAAO,QAAQ;IAAE,IAAI;IAAO,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;IAAE;;;AAIzF,OAAM,SAAS,mBAAmB,YAAY;AAE5C,QAAO,IAAY,GAAG,GAAG,KAAK,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,EAAE,CAAC;GAChE;AAEF,OAAM,SAAS,oBAAoB,YAAY;AAC7C,QAAO,IAAY,MAAM,GAAG,KAAK,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,EAAE,CAAC;GACnE;AAEF,OAAM,SAAS,oBAAoB,YAAY;AAC7C,QAAO,IAAY,KAAK,GAAG,MAAM,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,EAAE,CAAC;GACnE;AAEF,OAAM,SAAS,qBAAqB,YAAY;AAC9C,QAAO,IAAY,QAAQ,GAAG,IAAI,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,EAAE,CAAC;GACpE;AAEF,QAAO;EACL,IAAI;EACJ,mBAAmB,QAAQ,MAAM;EACjC;EACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":[],"sources":["../../../../../../extensions/feishu/src/transport/client/client.ts"],"sourcesContent":["import * as lark from '@larksuiteoapi/node-sdk';\n\nimport type { ResolvedFeishuAccount } from '../../state/accounts.js';\nimport { createFeishuLarkSdkPinoLogger } from './lark-sdk-logger.js';\n\nexport function createFeishuClient(account: ResolvedFeishuAccount): {\n wsClient: any;\n dispatcher: any;\n api: any;\n} {\n const l = lark as any;\n const sdkLogger = createFeishuLarkSdkPinoLogger(account.accountId);\n\n const apiBaseUrl = resolveFeishuBaseUrl(account.domain);\n\n const api = new l.Client({\n appId: account.appId,\n appSecret: account.appSecret,\n logger: sdkLogger,\n loggerLevel: l.LoggerLevel.info,\n ...(apiBaseUrl ? { baseURL: apiBaseUrl } : {}),\n });\n\n const dispatcher = new l.EventDispatcher({ verifyChallenge: false, logger: sdkLogger, loggerLevel: l.LoggerLevel.info } as any);\n const wsClient = new l.WSClient({\n appId: account.appId,\n appSecret: account.appSecret,\n eventDispatcher: dispatcher,\n logger: sdkLogger,\n loggerLevel: l.LoggerLevel.info,\n ...(apiBaseUrl ? { baseURL: apiBaseUrl } : {}),\n });\n\n return { wsClient, dispatcher, api };\n}\n\nfunction resolveFeishuBaseUrl(domain: string): string | undefined {\n if (domain === 'feishu') {\n return 'https://open.feishu.cn';\n }\n if (domain === 'lark') {\n return 'https://open.larksuite.com';\n }\n if (domain && domain.startsWith('https://')) {\n return domain;\n }\n return undefined;\n}\n\n"],"mappings":";;;AAKA,SAAgB,mBAAmB,SAIjC;CACA,MAAM,IAAI;CACV,MAAM,YAAY,8BAA8B,QAAQ,UAAU;CAElE,MAAM,aAAa,qBAAqB,QAAQ,OAAO;CAEvD,MAAM,MAAM,IAAI,EAAE,OAAO;EACvB,OAAO,QAAQ;EACf,WAAW,QAAQ;EACnB,QAAQ;EACR,aAAa,EAAE,YAAY;EAC3B,GAAI,aAAa,EAAE,SAAS,YAAY,GAAG,EAAE;EAC9C,CAAC;CAEF,MAAM,aAAa,IAAI,EAAE,gBAAgB;EAAE,iBAAiB;EAAO,QAAQ;EAAW,aAAa,EAAE,YAAY;EAAM,CAAQ;AAU/H,QAAO;EAAE,UAAA,IATY,EAAE,SAAS;GAC9B,OAAO,QAAQ;GACf,WAAW,QAAQ;GACnB,iBAAiB;GACjB,QAAQ;GACR,aAAa,EAAE,YAAY;GAC3B,GAAI,aAAa,EAAE,SAAS,YAAY,GAAG,EAAE;GAC9C,CAEgB;EAAE;EAAY;EAAK;;AAGtC,SAAS,qBAAqB,QAAoC;AAChE,KAAI,WAAW,SACb,QAAO;AAET,KAAI,WAAW,OACb,QAAO;AAET,KAAI,UAAU,OAAO,WAAW,WAAW,CACzC,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lark-sdk-logger.js","names":[],"sources":["../../../../../../extensions/feishu/src/transport/client/lark-sdk-logger.ts"],"sourcesContent":["import { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport type { Logger } from 'pino';\n\nfunction normalizeLarkLogArgs(args: any[]): { parts: any[]; err?: Error } {\n const raw: any = args.length === 1 ? args[0] : args;\n if (Array.isArray(raw)) {\n const errIdx = raw.findIndex((x) => x instanceof Error);\n if (errIdx >= 0) {\n const err = raw[errIdx] as Error;\n const parts = raw.filter((_, i) => i !== errIdx);\n return { parts, err };\n }\n return { parts: raw };\n }\n return { parts: [raw] };\n}\n\nfunction stringifyParts(parts: any[]): { text: string; hasLongLines: boolean } {\n const mapped = parts.map((p) => {\n if (typeof p === 'string') return p;\n if (p instanceof Error) return p.message;\n if (p === null || p === undefined) return '';\n try {\n return JSON.stringify(p);\n } catch {\n return String(p);\n }\n });\n const text = mapped.join(' ').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n').trim();\n const hasLongLines = text.includes('\\n') || text.length > 240;\n return { text, hasLongLines };\n}\n\nfunction linePreview(text: string, max = 240): string {\n const oneLine = text.replace(/\\s+/g, ' ').trim();\n if (oneLine.length <= max) return oneLine;\n return oneLine.slice(0, max - 1) + '…';\n}\n\n/**\n * Adapts `@larksuiteoapi/node-sdk`'s `Logger` interface to xopc's pino-based logger.\n *\n * The SDK wraps calls like `this.logger.info('a', 'b')` into `LoggerProxy.info` which forwards a *single* array\n * argument to the underlying logger — which is why the default output looks like: `[info]: [ 'a', 'b' ]`.\n */\nexport function createFeishuLarkSdkPinoLogger(accountId: string): {\n error: (...msg: any[]) => void;\n warn: (...msg: any[]) => void;\n info: (...msg: any[]) => void;\n debug: (...msg: any[]) => void;\n trace: (...msg: any[]) => void;\n} {\n const log: Logger = createLogger('FeishuLarkSDK') as unknown as Logger;\n\n const write = (level: 'error' | 'warn' | 'info' | 'debug' | 'trace', args: any[]) => {\n const { parts, err } = normalizeLarkLogArgs(args);\n const { text, hasLongLines } = stringifyParts(parts);\n if (!text && !err) return;\n\n if (err) {\n (log as any)[level](\n { err, accountId, linePreview: text ? linePreview(text) : undefined, component: 'lark-sdk' },\n text || err.message,\n );\n return;\n }\n\n if (level === 'info' && (text === 'client ready' || /^\\[ws\\]\\s*ws client ready$/.test(text))) {\n // `Client` logs \"client ready\" and WSClient logs \"[ws] ws client ready\" — both mean the client stack is up.\n log.info({ accountId, component: 'lark-sdk', lark: 'api+ws' }, 'Lark SDK is ready (HTTP client + websocket)');\n return;\n }\n if (level === 'info' && text === 'event-dispatch is ready') {\n log.info({ accountId, component: 'lark-sdk', lark: 'event-dispatch' }, 'Lark event dispatcher is ready');\n return;\n }\n if (level === 'info' && hasLongLines) {\n log.info(\n { accountId, component: 'lark-sdk', lark: 'event-subscription', linePreview: linePreview(text) },\n 'Lark subscription guidance: enable persistent connection mode in Developer Console (self-build + Feishu app)',\n );\n return;\n }\n\n (log as any)[level]({ accountId, component: 'lark-sdk', linePreview: linePreview(text) }, text);\n };\n\n return {\n error: (...args) => write('error', args),\n warn: (...args) => write('warn', args),\n info: (...args) => write('info', args),\n debug: (...args) => write('debug', args),\n trace: (...args) => write('trace', args),\n };\n}\n"],"mappings":";;;aAA4D;AAG5D,SAAS,qBAAqB,MAA4C;CACxE,MAAM,MAAW,KAAK,WAAW,IAAI,KAAK,KAAK;AAC/C,KAAI,MAAM,QAAQ,IAAI,EAAE;EACtB,MAAM,SAAS,IAAI,WAAW,MAAM,aAAa,MAAM;AACvD,MAAI,UAAU,GAAG;GACf,MAAM,MAAM,IAAI;AAEhB,UAAO;IAAE,OADK,IAAI,QAAQ,GAAG,MAAM,MAAM,OAC3B;IAAE;IAAK;;AAEvB,SAAO,EAAE,OAAO,KAAK;;AAEvB,QAAO,EAAE,OAAO,CAAC,IAAI,EAAE;;AAGzB,SAAS,eAAe,OAAuD;CAW7E,MAAM,OAVS,MAAM,KAAK,MAAM;AAC9B,MAAI,OAAO,MAAM,SAAU,QAAO;AAClC,MAAI,aAAa,MAAO,QAAO,EAAE;AACjC,MAAI,MAAM,QAAQ,MAAM,KAAA,EAAW,QAAO;AAC1C,MAAI;AACF,UAAO,KAAK,UAAU,EAAE;UAClB;AACN,UAAO,OAAO,EAAE;;GAGD,CAAC,KAAK,IAAI,CAAC,QAAQ,SAAS,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,MAAM;AAEhF,QAAO;EAAE;EAAM,cADM,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS;EAC7B;;AAG/B,SAAS,YAAY,MAAc,MAAM,KAAa;CACpD,MAAM,UAAU,KAAK,QAAQ,QAAQ,IAAI,CAAC,MAAM;AAChD,KAAI,QAAQ,UAAU,IAAK,QAAO;AAClC,QAAO,QAAQ,MAAM,GAAG,MAAM,EAAE,GAAG;;;;;;;;AASrC,SAAgB,8BAA8B,WAM5C;CACA,MAAM,MAAc,aAAa,gBAAgB;CAEjD,MAAM,SAAS,OAAsD,SAAgB;EACnF,MAAM,EAAE,OAAO,QAAQ,qBAAqB,KAAK;EACjD,MAAM,EAAE,MAAM,iBAAiB,eAAe,MAAM;AACpD,MAAI,CAAC,QAAQ,CAAC,IAAK;AAEnB,MAAI,KAAK;AACN,OAAY,OACX;IAAE;IAAK;IAAW,aAAa,OAAO,YAAY,KAAK,GAAG,KAAA;IAAW,WAAW;IAAY,EAC5F,QAAQ,IAAI,QACb;AACD;;AAGF,MAAI,UAAU,WAAW,SAAS,kBAAkB,6BAA6B,KAAK,KAAK,GAAG;AAE5F,OAAI,KAAK;IAAE;IAAW,WAAW;IAAY,MAAM;IAAU,EAAE,8CAA8C;AAC7G;;AAEF,MAAI,UAAU,UAAU,SAAS,2BAA2B;AAC1D,OAAI,KAAK;IAAE;IAAW,WAAW;IAAY,MAAM;IAAkB,EAAE,iCAAiC;AACxG;;AAEF,MAAI,UAAU,UAAU,cAAc;AACpC,OAAI,KACF;IAAE;IAAW,WAAW;IAAY,MAAM;IAAsB,aAAa,YAAY,KAAK;IAAE,EAChG,+GACD;AACD;;AAGD,MAAY,OAAO;GAAE;GAAW,WAAW;GAAY,aAAa,YAAY,KAAK;GAAE,EAAE,KAAK;;AAGjG,QAAO;EACL,QAAQ,GAAG,SAAS,MAAM,SAAS,KAAK;EACxC,OAAO,GAAG,SAAS,MAAM,QAAQ,KAAK;EACtC,OAAO,GAAG,SAAS,MAAM,QAAQ,KAAK;EACtC,QAAQ,GAAG,SAAS,MAAM,SAAS,KAAK;EACxC,QAAQ,GAAG,SAAS,MAAM,SAAS,KAAK;EACzC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dedupe.js","names":[],"sources":["../../../../../../extensions/feishu/src/transport/reliability/dedupe.ts"],"sourcesContent":["export interface FeishuDedupe {\n claim(id: string): boolean;\n}\n\nexport function createFeishuDedupe(options?: { max?: number; ttlMs?: number }): FeishuDedupe {\n const max = options?.max ?? 10_000;\n const ttlMs = options?.ttlMs ?? 10 * 60_000;\n const seen = new Map<string, number>();\n\n function prune(now: number) {\n for (const [k, t] of seen) {\n if (now - t > ttlMs) {\n seen.delete(k);\n }\n }\n if (seen.size <= max) return;\n const extra = seen.size - max;\n let i = 0;\n for (const k of seen.keys()) {\n seen.delete(k);\n i++;\n if (i >= extra) break;\n }\n }\n\n return {\n claim(id: string): boolean {\n const key = id.trim();\n if (!key) return false;\n const now = Date.now();\n prune(now);\n if (seen.has(key)) return false;\n seen.set(key, now);\n return true;\n },\n };\n}\n\n"],"mappings":";AAIA,SAAgB,mBAAmB,SAA0D;CAC3F,MAAM,MAAM,SAAS,OAAO;CAC5B,MAAM,QAAQ,SAAS,SAAS,KAAK;CACrC,MAAM,uBAAO,IAAI,KAAqB;CAEtC,SAAS,MAAM,KAAa;AAC1B,OAAK,MAAM,CAAC,GAAG,MAAM,KACnB,KAAI,MAAM,IAAI,MACZ,MAAK,OAAO,EAAE;AAGlB,MAAI,KAAK,QAAQ,IAAK;EACtB,MAAM,QAAQ,KAAK,OAAO;EAC1B,IAAI,IAAI;AACR,OAAK,MAAM,KAAK,KAAK,MAAM,EAAE;AAC3B,QAAK,OAAO,EAAE;AACd;AACA,OAAI,KAAK,MAAO;;;AAIpB,QAAO,EACL,MAAM,IAAqB;EACzB,MAAM,MAAM,GAAG,MAAM;AACrB,MAAI,CAAC,IAAK,QAAO;EACjB,MAAM,MAAM,KAAK,KAAK;AACtB,QAAM,IAAI;AACV,MAAI,KAAK,IAAI,IAAI,CAAE,QAAO;AAC1B,OAAK,IAAI,KAAK,IAAI;AAClB,SAAO;IAEV"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-pipeline.js","names":[],"sources":["../../../../../../extensions/feishu/src/transport/reliability/inbound-pipeline.ts"],"sourcesContent":["import type { MessageBus } from '@xopcai/xopc/infra/bus/index.js';\nimport type { InboundMessage } from '@xopcai/xopc/channels/transport-types.js';\nimport { createInboundDebouncer, hasControlCommand } from '@xopcai/xopc/infra/debounce.js';\n\nexport type FeishuInboundWorkKind = 'text' | 'card_action' | 'reaction' | 'recall';\n\nexport interface FeishuInboundWork {\n kind: FeishuInboundWorkKind;\n accountId: string;\n chatId: string;\n /** Effective debounce for this work item (0 = no coalescing). */\n debounceMs: number;\n inbound: InboundMessage;\n}\n\nfunction mergeTextInbound(items: FeishuInboundWork[]): InboundMessage {\n const last = items[items.length - 1]!;\n const parts = items.map((i) => (i.inbound.content ?? '').trim()).filter(Boolean);\n const mergedContent = parts.join('\\n\\n');\n const lastMeta = { ...(last.inbound.metadata ?? {}) };\n const ids = items\n .map((i) => i.inbound.metadata?.messageId)\n .filter((x): x is string => typeof x === 'string' && x.trim().length > 0);\n return {\n ...last.inbound,\n content: mergedContent,\n metadata: {\n ...lastMeta,\n messageId: lastMeta.messageId,\n feishuMergedCount: items.length,\n ...(ids.length > 0 ? { feishuMergedMessageIds: ids } : {}),\n },\n };\n}\n\nfunction worksToInboundMessages(items: FeishuInboundWork[]): InboundMessage[] {\n if (items.length === 0) return [];\n const first = items[0]!;\n if (first.kind !== 'text') {\n return items.map((i) => i.inbound);\n }\n if (items.length === 1) {\n return [first.inbound];\n }\n return [mergeTextInbound(items)];\n}\n\nexport interface FeishuInboundPipelineOptions {\n bus: MessageBus;\n /** Fallback when work.debounceMs is unset (should not happen if callers set it). */\n defaultDebounceMs: number;\n onError?: (err: unknown, items: FeishuInboundWork[]) => void;\n}\n\nexport function createFeishuInboundPipeline(options: FeishuInboundPipelineOptions) {\n const { bus, defaultDebounceMs, onError } = options;\n\n const debouncer = createInboundDebouncer<FeishuInboundWork>({\n debounceMs: defaultDebounceMs,\n buildKey: (item) => `${item.accountId}:${item.chatId}`,\n shouldDebounce: (item) =>\n item.kind === 'text' && item.debounceMs > 0 && !hasControlCommand(item.inbound.content ?? ''),\n resolveDebounceMs: (item) => (item.kind === 'text' ? item.debounceMs : 0),\n onFlush: async (items) => {\n const messages = worksToInboundMessages(items);\n for (const msg of messages) {\n await bus.publishInbound(msg);\n }\n },\n onError,\n });\n\n return {\n async enqueue(work: FeishuInboundWork): Promise<void> {\n await debouncer.enqueue(work);\n },\n flushAll: () => debouncer.flushAll(),\n flushKey: (accountId: string, chatId: string) => debouncer.flushKey(`${accountId}:${chatId}`),\n };\n}\n"],"mappings":";;AAeA,SAAS,iBAAiB,OAA4C;CACpE,MAAM,OAAO,MAAM,MAAM,SAAS;CAElC,MAAM,gBADQ,MAAM,KAAK,OAAO,EAAE,QAAQ,WAAW,IAAI,MAAM,CAAC,CAAC,OAAO,QAC7C,CAAC,KAAK,OAAO;CACxC,MAAM,WAAW,EAAE,GAAI,KAAK,QAAQ,YAAY,EAAE,EAAG;CACrD,MAAM,MAAM,MACT,KAAK,MAAM,EAAE,QAAQ,UAAU,UAAU,CACzC,QAAQ,MAAmB,OAAO,MAAM,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE;AAC3E,QAAO;EACL,GAAG,KAAK;EACR,SAAS;EACT,UAAU;GACR,GAAG;GACH,WAAW,SAAS;GACpB,mBAAmB,MAAM;GACzB,GAAI,IAAI,SAAS,IAAI,EAAE,wBAAwB,KAAK,GAAG,EAAE;GAC1D;EACF;;AAGH,SAAS,uBAAuB,OAA8C;AAC5E,KAAI,MAAM,WAAW,EAAG,QAAO,EAAE;CACjC,MAAM,QAAQ,MAAM;AACpB,KAAI,MAAM,SAAS,OACjB,QAAO,MAAM,KAAK,MAAM,EAAE,QAAQ;AAEpC,KAAI,MAAM,WAAW,EACnB,QAAO,CAAC,MAAM,QAAQ;AAExB,QAAO,CAAC,iBAAiB,MAAM,CAAC;;AAUlC,SAAgB,4BAA4B,SAAuC;CACjF,MAAM,EAAE,KAAK,mBAAmB,YAAY;CAE5C,MAAM,YAAY,uBAA0C;EAC1D,YAAY;EACZ,WAAW,SAAS,GAAG,KAAK,UAAU,GAAG,KAAK;EAC9C,iBAAiB,SACf,KAAK,SAAS,UAAU,KAAK,aAAa,KAAK,CAAC,kBAAkB,KAAK,QAAQ,WAAW,GAAG;EAC/F,oBAAoB,SAAU,KAAK,SAAS,SAAS,KAAK,aAAa;EACvE,SAAS,OAAO,UAAU;GACxB,MAAM,WAAW,uBAAuB,MAAM;AAC9C,QAAK,MAAM,OAAO,SAChB,OAAM,IAAI,eAAe,IAAI;;EAGjC;EACD,CAAC;AAEF,QAAO;EACL,MAAM,QAAQ,MAAwC;AACpD,SAAM,UAAU,QAAQ,KAAK;;EAE/B,gBAAgB,UAAU,UAAU;EACpC,WAAW,WAAmB,WAAmB,UAAU,SAAS,GAAG,UAAU,GAAG,SAAS;EAC9F"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","names":[],"sources":["../../../../../../extensions/feishu/src/transport/socket-mode/monitor.ts"],"sourcesContent":["import type { InboundMessage } from '@xopcai/xopc/channels/transport-types.js';\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { ChannelSecurityContext } from '@xopcai/xopc/channels/plugin-types.js';\nimport { generateSessionKey } from '@xopcai/xopc/chat-commands/session-key.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\n\nimport type { ResolvedFeishuAccount } from '../../state/accounts.js';\nimport { sendFeishuPairingPromptIfNeeded } from '../../pairing/feishu-pairing-prompt.js';\nimport { createFeishuClient } from '../client/client.js';\nimport { createFeishuDedupe } from '../reliability/dedupe.js';\nimport type { FeishuInboundWork } from '../reliability/inbound-pipeline.js';\nimport { stripFeishuMentions } from '../text/mentions.js';\nimport { computeBackoffMs } from './retry.js';\nimport { getFeishuBindingByMessageId, recordFeishuMessageBinding } from '../../state/message-bindings.js';\n\nconst log = createLogger('FeishuSocketMode');\n\nexport interface FeishuSocketModeMonitorDeps {\n account: ResolvedFeishuAccount;\n config: Config;\n enqueueInbound: (work: FeishuInboundWork) => Promise<void>;\n /** Used when `account.inboundDebounceMs` is unset. */\n inboundDebounceDefaultMs: number;\n abortSignal: AbortSignal;\n security: {\n checkAccess: (ctx: ChannelSecurityContext) => { allowed: boolean; reason?: string } | undefined;\n };\n}\n\nexport function createFeishuSocketModeMonitor(deps: FeishuSocketModeMonitorDeps) {\n const { account, config: _config, enqueueInbound, inboundDebounceDefaultMs, abortSignal, security } = deps;\n const dedupe = createFeishuDedupe();\n let lastEventAt = 0;\n\n function resolveTextDebounceMs(): number {\n if (typeof account.inboundDebounceMs === 'number' && Number.isFinite(account.inboundDebounceMs)) {\n return Math.max(0, Math.trunc(account.inboundDebounceMs));\n }\n return Math.max(0, Math.trunc(inboundDebounceDefaultMs));\n }\n\n async function pushInbound(kind: FeishuInboundWork['kind'], inbound: InboundMessage): Promise<void> {\n const debounceMs = kind === 'text' ? resolveTextDebounceMs() : 0;\n await enqueueInbound({\n kind,\n accountId: account.accountId,\n chatId: inbound.chat_id,\n debounceMs,\n inbound,\n });\n }\n\n async function handleReactionEvent(kind: 'created' | 'deleted', event: any, api: any): Promise<void> {\n const msgId = event?.event?.message_id ?? event?.message_id ?? '';\n const emojiType = event?.event?.reaction_type?.emoji_type ?? event?.reaction_type?.emoji_type ?? '';\n const operatorType = event?.event?.operator_type ?? event?.operator_type ?? '';\n const userOpenId =\n event?.event?.user_id?.open_id ?? event?.user_id?.open_id ?? event?.event?.open_id ?? event?.open_id ?? '';\n if (!msgId || !emojiType) return;\n if (operatorType === 'app') return;\n\n const notifMode = account.reactionNotifications ?? 'own';\n if (notifMode === 'off') {\n return;\n }\n\n const binding = getFeishuBindingByMessageId(msgId);\n if (!binding) return;\n\n const reacted = await fetchFeishuMessageForReaction(api, msgId, 1500);\n if (!reacted && notifMode === 'own') {\n // In own-mode, we must be sure this is a bot message.\n return;\n }\n\n const isBotMessage = reacted?.sender_type === 'app' || reacted?.senderType === 'app';\n if (notifMode === 'own' && !isBotMessage) {\n return;\n }\n\n const senderId = userOpenId || binding.senderId;\n const preview = reacted ? extractFeishuMessagePreview(reacted) : '';\n\n await pushInbound('reaction', {\n channel: 'feishu',\n sender_id: senderId,\n chat_id: binding.chatId,\n content:\n kind === 'deleted'\n ? `撤回了一个表情(${emojiType})${preview ? `,对应消息:「${preview}」` : ''}`\n : `对一条消息添加了表情(${emojiType})${preview ? `:「${preview}」` : ''}`,\n metadata: {\n sessionKey: binding.sessionKey,\n accountId: binding.accountId,\n isGroup: binding.isGroup,\n threadId: binding.threadId,\n feishuEventType: `im.message.reaction.${kind}_v1`,\n reactedMessageId: msgId,\n emojiType,\n raw: event,\n reactedMessage: reacted ?? null,\n },\n });\n }\n\n async function handleCardAction(event: any): Promise<void> {\n const ctx = event?.event?.context ?? event?.context ?? {};\n const operator = event?.event?.operator ?? event?.operator ?? {};\n const action = event?.event?.action ?? event?.action ?? {};\n const chatId = (ctx?.chat_id ?? '').trim();\n const senderId = (operator?.open_id ?? '').trim();\n const openMessageId = (ctx?.open_message_id ?? '').trim();\n const binding = openMessageId ? getFeishuBindingByMessageId(openMessageId) : null;\n\n const isGroup = chatId.startsWith('oc_');\n const sessionKey =\n binding?.sessionKey ??\n generateSessionKey({\n source: 'feishu',\n chatId: chatId || senderId,\n senderId: senderId || 'unknown',\n isGroup: Boolean(chatId) && isGroup,\n accountId: account.accountId,\n });\n\n const extracted = extractCardActionCommand(action);\n const content =\n extracted?.trim() ||\n `[card action: ${String(action?.tag ?? 'unknown')}]`;\n\n await pushInbound('card_action', {\n channel: 'feishu',\n sender_id: senderId || 'unknown',\n chat_id: chatId || senderId || 'unknown',\n content,\n metadata: {\n sessionKey,\n accountId: account.accountId,\n isGroup: Boolean(chatId) && isGroup,\n feishuEventType: 'card.action.trigger',\n cardActionText: extracted ?? null,\n cardAction: action,\n cardContext: ctx,\n raw: event,\n },\n });\n }\n\n async function handleMessageRecalled(event: any): Promise<void> {\n const e = event?.event ?? event ?? {};\n const recalledMessageId = (e?.message_id ?? '').trim();\n const chatId = (e?.chat_id ?? '').trim();\n if (!recalledMessageId) return;\n\n const binding = getFeishuBindingByMessageId(recalledMessageId);\n if (!binding && !chatId) return;\n\n const isGroup = (binding?.isGroup ?? chatId.startsWith('oc_')) === true;\n const sessionKey =\n binding?.sessionKey ??\n generateSessionKey({\n source: 'feishu',\n chatId: chatId || 'unknown',\n senderId: binding?.senderId ?? 'unknown',\n isGroup,\n accountId: account.accountId,\n });\n\n await pushInbound('recall', {\n channel: 'feishu',\n sender_id: binding?.senderId ?? 'system',\n chat_id: chatId || binding?.chatId || 'unknown',\n content: `撤回了一条消息(${recalledMessageId})`,\n metadata: {\n sessionKey,\n accountId: account.accountId,\n isGroup,\n threadId: binding?.threadId,\n feishuEventType: 'im.message.recalled_v1',\n recalledMessageId,\n recallTime: e?.recall_time,\n recallType: e?.recall_type,\n raw: event,\n },\n });\n }\n\n async function handleMessageReceive(event: any): Promise<void> {\n lastEventAt = Date.now();\n const msg = event?.event?.message ?? event?.message ?? event?.data?.message;\n const sender = event?.event?.sender ?? event?.sender ?? event?.data?.sender;\n const chatId = msg?.chat_id ?? msg?.chatId ?? '';\n const messageId = msg?.message_id ?? msg?.messageId ?? '';\n const chatType = msg?.chat_type ?? msg?.chatType ?? '';\n\n const senderId =\n sender?.sender_id?.open_id ??\n sender?.sender_id?.user_id ??\n sender?.open_id ??\n sender?.user_id ??\n '';\n const senderName = sender?.sender_id?.name ?? sender?.sender_name ?? undefined;\n\n if (!chatId || !messageId || !senderId) {\n log.warn({ accountId: account.accountId }, 'Feishu inbound missing ids; dropping');\n return;\n }\n\n if (!dedupe.claim(messageId)) {\n return;\n }\n\n const isGroup = chatType === 'group' || chatType === 'chat';\n const text =\n msg?.content && typeof msg.content === 'string'\n ? safeJsonText(msg.content)\n : safeJsonText(msg?.body?.content);\n\n const normalizedText = stripFeishuMentions(text ?? '').trim();\n if (!normalizedText) {\n return;\n }\n\n const threadId = msg?.thread_id ?? msg?.threadId ?? undefined;\n\n const sessionKey = generateSessionKey({\n source: 'feishu',\n chatId,\n senderId,\n isGroup,\n threadId: typeof threadId === 'string' && threadId.trim() ? threadId : undefined,\n accountId: account.accountId,\n });\n\n recordFeishuMessageBinding({\n messageId,\n sessionKey,\n accountId: account.accountId,\n chatId,\n senderId,\n isGroup,\n threadId: typeof threadId === 'string' && threadId.trim() ? threadId : undefined,\n });\n\n const securityCtx: ChannelSecurityContext = {\n accountId: account.accountId,\n chatId,\n senderId,\n senderName,\n isGroup,\n threadId,\n };\n\n const access = security.checkAccess(securityCtx);\n if (access && !access.allowed) {\n if (!isGroup && access.reason === 'pairing-required') {\n await sendFeishuPairingPromptIfNeeded({\n account,\n messageId,\n threadId: typeof threadId === 'string' && threadId.trim() ? threadId : undefined,\n senderId,\n senderName,\n isGroup,\n });\n } else {\n log.warn(\n { accountId: account.accountId, chatId, senderId, reason: access.reason },\n 'Feishu: message dropped by channel security',\n );\n }\n return;\n }\n\n if (isGroup && account.requireMention) {\n const rawText = text ?? '';\n // Minimal mention gate: require at-tag markup. Later we tighten to bot-identity mention.\n if (!rawText.includes('<at ') && !rawText.includes('@')) {\n return;\n }\n }\n\n await pushInbound('text', {\n channel: 'feishu',\n sender_id: senderId,\n chat_id: chatId,\n content: normalizedText,\n metadata: {\n sessionKey,\n accountId: account.accountId,\n messageId,\n threadId,\n isGroup,\n feishuEventType: 'im.message.receive_v1',\n raw: event,\n },\n });\n }\n\n async function run(): Promise<void> {\n let attempt = 0;\n\n const heartbeatTimer = setInterval(() => {\n if (abortSignal.aborted) return;\n if (lastEventAt === 0) return;\n const silentForMs = Date.now() - lastEventAt;\n if (silentForMs > 5 * 60_000) {\n log.warn({ accountId: account.accountId, silentForMs }, 'Feishu socket mode: no events recently');\n }\n }, 60_000);\n\n try {\n while (!abortSignal.aborted) {\n attempt++;\n const client = createFeishuClient(account);\n const { wsClient, dispatcher, api } = client;\n\n dispatcher.register({\n 'im.message.receive_v1': async (data: any) => {\n await handleMessageReceive(data);\n },\n 'im.message.reaction.created_v1': async (data: any) => {\n await handleReactionEvent('created', data, api);\n },\n 'im.message.reaction.deleted_v1': async (data: any) => {\n await handleReactionEvent('deleted', data, api);\n },\n 'im.message.recalled_v1': async (data: any) => {\n await handleMessageRecalled(data);\n },\n 'card.action.trigger': async (data: any) => {\n await handleCardAction(data);\n },\n });\n\n try {\n wsClient.start({ eventDispatcher: dispatcher });\n } catch (err) {\n const delayMs = computeBackoffMs(attempt);\n log.error({ err, accountId: account.accountId, delayMs }, 'Feishu socket mode start failed; retrying');\n await sleep(delayMs, abortSignal);\n continue;\n }\n\n // Wait until abort or wsClient errors out.\n const exited = await new Promise<{ ok: boolean; err?: unknown }>((resolve) => {\n const onAbort = () => resolve({ ok: true });\n if (abortSignal.aborted) return resolve({ ok: true });\n abortSignal.addEventListener('abort', onAbort, { once: true });\n (wsClient as any)?.on?.('error', (err: unknown) => resolve({ ok: false, err }));\n (wsClient as any)?.on?.('close', () => resolve({ ok: false, err: new Error('ws closed') }));\n });\n\n try {\n wsClient.stop();\n } catch {\n // ignore\n }\n\n if (abortSignal.aborted) {\n return;\n }\n\n const delayMs = computeBackoffMs(attempt);\n log.warn(\n { accountId: account.accountId, delayMs, err: exited.err ? String(exited.err) : undefined },\n 'Feishu socket mode disconnected; restarting',\n );\n await sleep(delayMs, abortSignal);\n }\n } finally {\n clearInterval(heartbeatTimer);\n }\n }\n\n return { run };\n}\n\nasync function fetchFeishuMessageForReaction(api: any, messageId: string, timeoutMs: number): Promise<any | null> {\n const t = messageId.trim();\n if (!t) return null;\n try {\n const result = await Promise.race([\n (api as any).im.message.get({ path: { message_id: t } }),\n new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeoutMs)),\n ]);\n return (result as any)?.data ?? result;\n } catch {\n return null;\n }\n}\n\nfunction extractFeishuMessagePreview(msg: any): string {\n const raw = msg?.body?.content ?? msg?.content ?? msg?.message?.content;\n if (typeof raw !== 'string' || !raw.trim()) return '';\n try {\n const parsed = JSON.parse(raw);\n const t =\n typeof parsed?.text === 'string'\n ? parsed.text\n : typeof parsed?.content === 'string'\n ? parsed.content\n : '';\n return summarizeText(String(t || ''), 80);\n } catch {\n return summarizeText(raw, 80);\n }\n}\n\nfunction summarizeText(text: string, max: number): string {\n const s = text.replace(/\\s+/g, ' ').trim();\n if (s.length <= max) return s;\n return s.slice(0, max - 1) + '…';\n}\n\nfunction safeJsonText(raw: unknown): string | undefined {\n if (typeof raw !== 'string' || !raw.trim()) return undefined;\n try {\n const parsed = JSON.parse(raw);\n const t =\n typeof parsed?.text === 'string'\n ? parsed.text\n : typeof parsed?.content === 'string'\n ? parsed.content\n : typeof parsed?.title === 'string'\n ? parsed.title\n : undefined;\n return typeof t === 'string' ? t : raw;\n } catch {\n return raw;\n }\n}\n\nfunction extractCardActionCommand(action: any): string | null {\n const value = action?.value;\n if (!value || typeof value !== 'object') {\n return null;\n }\n const v = value as Record<string, unknown>;\n const command = typeof v.command === 'string' ? v.command.trim() : '';\n if (command) return command;\n const text = typeof v.text === 'string' ? v.text.trim() : '';\n if (text) return text;\n return null;\n}\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n if (signal.aborted) return resolve();\n const t = setTimeout(resolve, ms);\n signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(t);\n resolve();\n },\n { once: true },\n );\n });\n}\n\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","names":[],"sources":["../../../../../../extensions/feishu/src/transport/socket-mode/retry.ts"],"sourcesContent":["export function computeBackoffMs(attempt: number): number {\n const a = Math.max(1, Math.min(attempt, 10));\n const base = 500 * 2 ** (a - 1); // 0.5s, 1s, 2s, ...\n const jitter = Math.floor(Math.random() * 250);\n return Math.min(30_000, base + jitter);\n}\n\n"],"mappings":";AAAA,SAAgB,iBAAiB,SAAyB;CAExD,MAAM,OAAO,MAAM,MADT,KAAK,IAAI,GAAG,KAAK,IAAI,SAAS,GAAG,CACjB,GAAG;CAC7B,MAAM,SAAS,KAAK,MAAM,KAAK,QAAQ,GAAG,IAAI;AAC9C,QAAO,KAAK,IAAI,KAAQ,OAAO,OAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mentions.js","names":[],"sources":["../../../../../../extensions/feishu/src/transport/text/mentions.ts"],"sourcesContent":["const FEISHU_AT_RE = /<at\\s+user_id=\"[^\"]*\">([^<]*)<\\/at>/g;\n\nexport function stripFeishuMentions(text: string): string {\n const raw = String(text ?? '');\n return raw.replaceAll(FEISHU_AT_RE, '$1');\n}\n\n"],"mappings":";AAAA,MAAM,eAAe;AAErB,SAAgB,oBAAoB,MAAsB;AAExD,QADY,OAAO,QAAQ,GACjB,CAAC,WAAW,cAAc,KAAK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","names":["http"],"sources":["../../../../../../extensions/feishu/src/transport/webhook/monitor.ts"],"sourcesContent":["import crypto from 'node:crypto';\nimport * as http from 'node:http';\n\nimport type { InboundMessage } from '@xopcai/xopc/channels/transport-types.js';\nimport * as lark from '@larksuiteoapi/node-sdk';\n\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport type { ChannelSecurityContext } from '@xopcai/xopc/channels/plugin-types.js';\nimport { generateSessionKey } from '@xopcai/xopc/chat-commands/session-key.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\n\nimport type { ResolvedFeishuAccount } from '../../state/accounts.js';\nimport { createFeishuDedupe } from '../reliability/dedupe.js';\nimport type { FeishuInboundWork } from '../reliability/inbound-pipeline.js';\nimport { stripFeishuMentions } from '../text/mentions.js';\nimport { recordFeishuMessageBinding } from '../../state/message-bindings.js';\nimport { sendFeishuPairingPromptIfNeeded } from '../../pairing/feishu-pairing-prompt.js';\nimport { createFeishuLarkSdkPinoLogger } from '../client/lark-sdk-logger.js';\n\nconst log = createLogger('FeishuWebhook');\n\nconst MAX_BODY_BYTES = 256 * 1024;\nconst BODY_TIMEOUT_MS = 2_000;\nconst RATE_LIMIT_WINDOW_MS = 60_000;\nconst RATE_LIMIT_MAX = 120;\nconst RATE_LIMIT_MAX_KEYS = 4096;\n\ntype RateKeyState = { windowStart: number; count: number };\nconst rateState = new Map<string, RateKeyState>();\n\nfunction pruneRateState(now: number) {\n for (const [k, v] of rateState.entries()) {\n if (now - v.windowStart > RATE_LIMIT_WINDOW_MS) {\n rateState.delete(k);\n }\n }\n if (rateState.size <= RATE_LIMIT_MAX_KEYS) return;\n const over = rateState.size - RATE_LIMIT_MAX_KEYS;\n let i = 0;\n for (const k of rateState.keys()) {\n rateState.delete(k);\n i++;\n if (i >= over) break;\n }\n}\n\nfunction isRateLimited(key: string, now: number): boolean {\n pruneRateState(now);\n const cur = rateState.get(key);\n if (!cur || now - cur.windowStart > RATE_LIMIT_WINDOW_MS) {\n rateState.set(key, { windowStart: now, count: 1 });\n return false;\n }\n cur.count += 1;\n return cur.count > RATE_LIMIT_MAX;\n}\n\nfunction safeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n try {\n return crypto.timingSafeEqual(Buffer.from(a), Buffer.from(b));\n } catch {\n return false;\n }\n}\n\nfunction signatureValid(headers: http.IncomingHttpHeaders, rawBody: string, encryptKey: string): boolean {\n const timestampHeader = headers['x-lark-request-timestamp'];\n const nonceHeader = headers['x-lark-request-nonce'];\n const signatureHeader = headers['x-lark-signature'];\n const timestamp = Array.isArray(timestampHeader) ? timestampHeader[0] : timestampHeader;\n const nonce = Array.isArray(nonceHeader) ? nonceHeader[0] : nonceHeader;\n const signature = Array.isArray(signatureHeader) ? signatureHeader[0] : signatureHeader;\n if (!timestamp || !nonce || !signature) return false;\n if (typeof signature !== 'string' || signature.length < 32) return false;\n const computed = crypto.createHash('sha256').update(timestamp + nonce + encryptKey + rawBody).digest('hex');\n return safeEqual(computed, signature);\n}\n\nfunction readBody(\n req: http.IncomingMessage,\n): Promise<{ ok: true; body: string } | { ok: false; status: number; msg: string }> {\n return new Promise((resolve) => {\n let done = false;\n let bytes = 0;\n const chunks: Buffer[] = [];\n const t = setTimeout(() => {\n if (done) return;\n done = true;\n resolve({ ok: false, status: 408, msg: 'Request body timeout' });\n req.destroy();\n }, BODY_TIMEOUT_MS);\n\n req.on('data', (chunk: Buffer) => {\n if (done) return;\n bytes += chunk.length;\n if (bytes > MAX_BODY_BYTES) {\n done = true;\n clearTimeout(t);\n resolve({ ok: false, status: 413, msg: 'Payload too large' });\n req.destroy();\n return;\n }\n chunks.push(chunk);\n });\n req.on('end', () => {\n if (done) return;\n done = true;\n clearTimeout(t);\n resolve({ ok: true, body: Buffer.concat(chunks).toString('utf8') });\n });\n req.on('error', () => {\n if (done) return;\n done = true;\n clearTimeout(t);\n resolve({ ok: false, status: 400, msg: 'Bad Request' });\n });\n });\n}\n\nfunction json(res: http.ServerResponse, status: number, obj: unknown) {\n res.statusCode = status;\n res.setHeader('content-type', 'application/json; charset=utf-8');\n res.end(JSON.stringify(obj));\n}\n\nfunction text(res: http.ServerResponse, status: number, body: string) {\n res.statusCode = status;\n res.setHeader('content-type', 'text/plain; charset=utf-8');\n res.end(body);\n}\n\nexport interface FeishuWebhookMonitorDeps {\n account: ResolvedFeishuAccount;\n config: Config;\n enqueueInbound: (work: FeishuInboundWork) => Promise<void>;\n inboundDebounceDefaultMs: number;\n abortSignal: AbortSignal;\n security: {\n checkAccess: (ctx: ChannelSecurityContext) => { allowed: boolean; reason?: string } | undefined;\n };\n}\n\nexport function createFeishuWebhookMonitor(deps: FeishuWebhookMonitorDeps) {\n const { account, abortSignal, security, enqueueInbound, inboundDebounceDefaultMs } = deps;\n const dedupe = createFeishuDedupe();\n\n const encryptKey = (account.encryptKey ?? '').trim();\n const verificationToken = (account.verificationToken ?? '').trim();\n if (!encryptKey) throw new Error('Feishu webhook mode requires encryptKey');\n if (!verificationToken) throw new Error('Feishu webhook mode requires verificationToken');\n\n const host = (account.webhookHost ?? '127.0.0.1').trim() || '127.0.0.1';\n const port = account.webhookPort ?? 3000;\n const path = (account.webhookPath ?? '/feishu/events').trim() || '/feishu/events';\n const l = lark as any;\n const sdkLogger = createFeishuLarkSdkPinoLogger(account.accountId);\n\n function resolveTextDebounceMs(): number {\n if (typeof account.inboundDebounceMs === 'number' && Number.isFinite(account.inboundDebounceMs)) {\n return Math.max(0, Math.trunc(account.inboundDebounceMs));\n }\n return Math.max(0, Math.trunc(inboundDebounceDefaultMs));\n }\n\n async function pushText(inbound: InboundMessage): Promise<void> {\n const debounceMs = resolveTextDebounceMs();\n await enqueueInbound({\n kind: 'text',\n accountId: account.accountId,\n chatId: inbound.chat_id,\n debounceMs,\n inbound,\n });\n }\n\n async function handleMessageReceive(event: any): Promise<void> {\n const msg = event?.event?.message ?? event?.message ?? event?.data?.message;\n const sender = event?.event?.sender ?? event?.sender ?? event?.data?.sender;\n const chatId = msg?.chat_id ?? msg?.chatId ?? '';\n const messageId = msg?.message_id ?? msg?.messageId ?? '';\n const chatType = msg?.chat_type ?? msg?.chatType ?? '';\n\n const senderId =\n sender?.sender_id?.open_id ??\n sender?.sender_id?.user_id ??\n sender?.open_id ??\n sender?.user_id ??\n '';\n const senderName = sender?.sender_id?.name ?? sender?.sender_name ?? undefined;\n\n if (!chatId || !messageId || !senderId) return;\n if (!dedupe.claim(messageId)) return;\n\n const isGroup = chatType === 'group' || chatType === 'chat';\n const textRaw =\n msg?.content && typeof msg.content === 'string'\n ? safeJsonText(msg.content)\n : safeJsonText(msg?.body?.content);\n const normalizedText = stripFeishuMentions(textRaw ?? '').trim();\n if (!normalizedText) return;\n\n const threadId = msg?.thread_id ?? msg?.threadId ?? undefined;\n const sessionKey = generateSessionKey({\n source: 'feishu',\n chatId,\n senderId,\n isGroup,\n threadId: typeof threadId === 'string' && threadId.trim() ? threadId : undefined,\n accountId: account.accountId,\n });\n\n recordFeishuMessageBinding({\n messageId,\n sessionKey,\n accountId: account.accountId,\n chatId,\n senderId,\n isGroup,\n threadId: typeof threadId === 'string' && threadId.trim() ? threadId : undefined,\n });\n\n const access = security.checkAccess({\n accountId: account.accountId,\n chatId,\n senderId,\n senderName,\n isGroup,\n threadId,\n });\n if (access && !access.allowed) {\n if (!isGroup && access.reason === 'pairing-required') {\n await sendFeishuPairingPromptIfNeeded({\n account,\n messageId,\n threadId: typeof threadId === 'string' && threadId.trim() ? threadId : undefined,\n senderId,\n senderName,\n isGroup,\n });\n }\n return;\n }\n\n await pushText({\n channel: 'feishu',\n sender_id: senderId,\n chat_id: chatId,\n content: normalizedText,\n metadata: {\n sessionKey,\n accountId: account.accountId,\n messageId,\n threadId,\n isGroup,\n feishuEventType: 'im.message.receive_v1',\n raw: event,\n },\n });\n }\n\n const dispatcher = new l.EventDispatcher({\n verifyChallenge: false,\n encryptKey,\n verificationToken,\n logger: sdkLogger,\n loggerLevel: l.LoggerLevel.info,\n } as any);\n dispatcher.register({\n 'im.message.receive_v1': async (data: any) => await handleMessageReceive(data),\n });\n\n const server = http.createServer();\n\n async function handleRequest(req: http.IncomingMessage, res: http.ServerResponse) {\n if (req.method !== 'POST') return text(res, 405, 'Method Not Allowed');\n if ((req.url ?? '').split('?')[0] !== path) return text(res, 404, 'Not Found');\n\n const now = Date.now();\n const rateKey = `${account.accountId}:${path}:${req.socket.remoteAddress ?? 'unknown'}`;\n if (isRateLimited(rateKey, now)) return text(res, 429, 'Too Many Requests');\n\n const contentType = String(req.headers['content-type'] ?? '');\n if (!contentType.toLowerCase().includes('application/json')) return text(res, 415, 'Unsupported Media Type');\n\n const body = await readBody(req);\n if (body.ok === false) return text(res, body.status, body.msg);\n\n if (!signatureValid(req.headers, body.body, encryptKey)) return text(res, 401, 'Invalid signature');\n\n let payload: any;\n try {\n payload = JSON.parse(body.body);\n } catch {\n return text(res, 400, 'Invalid JSON');\n }\n\n const token = payload?.token ?? payload?.header?.token ?? payload?.event?.token;\n if (typeof token === 'string' && token.trim() && token.trim() !== verificationToken) {\n return text(res, 401, 'Invalid verification token');\n }\n\n const { isChallenge, challenge } = lark.generateChallenge(payload, { encryptKey });\n if (isChallenge) return json(res, 200, challenge);\n\n const envelope = Object.assign(Object.create({ headers: req.headers }), payload);\n const out = await dispatcher.invoke(envelope, { needCheck: false });\n if (!res.headersSent) return json(res, 200, out);\n }\n\n async function run(): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n server.on('request', (req, res) => {\n void handleRequest(req, res).catch((err) => {\n log.error({ err, accountId: account.accountId }, 'Feishu webhook handler error');\n if (!res.headersSent) text(res, 500, 'Internal Server Error');\n });\n });\n server.on('error', (err) => reject(err));\n server.listen(port, host, () => resolve());\n });\n\n log.info({ accountId: account.accountId, host, port, path }, 'Feishu webhook server listening');\n\n await new Promise<void>((resolve) => {\n if (abortSignal.aborted) {\n server.close();\n return resolve();\n }\n abortSignal.addEventListener(\n 'abort',\n () => {\n server.close();\n resolve();\n },\n { once: true },\n );\n });\n }\n\n return { run };\n}\n\nfunction safeJsonText(raw: unknown): string | undefined {\n if (typeof raw !== 'string' || !raw.trim()) return undefined;\n try {\n const parsed = JSON.parse(raw);\n const t =\n typeof parsed?.text === 'string'\n ? parsed.text\n : typeof parsed?.content === 'string'\n ? parsed.content\n : typeof parsed?.title === 'string'\n ? parsed.title\n : undefined;\n return typeof t === 'string' ? t : raw;\n } catch {\n return raw;\n }\n}\n\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-surface.js","names":[],"sources":["../../../../../extensions/feishu/src/ui/config-surface.ts"],"sourcesContent":["import type { ChannelConfigSurfaceAdapter } from '@xopcai/xopc/channels/plugins/types.adapters.js';\nimport type { Config } from '@xopcai/xopc/config/schema.js';\n\nexport const feishuConfigSurface: ChannelConfigSurfaceAdapter = {\n // Note: unlike providers (which intentionally return masked values),\n // channel config is returned as plain text in /api/config so the Web UI can\n // render it like Telegram: hidden by default, reveal on demand.\n buildConfigSurface: (cfg: Config) => (cfg.channels?.feishu as Record<string, unknown>) ?? {},\n};\n\n"],"mappings":";AAGA,MAAa,sBAAmD,EAI9D,qBAAqB,QAAiB,IAAI,UAAU,UAAsC,EAAE,EAC7F"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-progress.js","names":[],"sources":["../../../../extensions/feishu/src/workflow-progress.ts"],"sourcesContent":["/**\n * Feishu/Lark capability for the workflow progress broker.\n *\n * Feishu exposes `im.v1.message.update`, so we get the same edit-in-place UX\n * as Telegram: send the first snapshot, then update the same message on\n * every subsequent throttled tick. Key events (phase change / new error /\n * tool_end) bypass the throttle so milestones land promptly.\n *\n * Per-bot send rate ~5 msg/sec/account (Feishu open API limit); a 5-second\n * default throttle leaves comfortable headroom even when several workflows\n * run concurrently.\n *\n * Routing: sessionKey `main:feishu:<accountId>:<dm|group|channel>:<peerId>`.\n * - DM peerId is an `open_id` (starts with `ou_`) → use `receive_id_type=open_id`.\n * - Group / channel peerId is a `chat_id` → use `receive_id_type=chat_id`.\n *\n * Failure handling:\n * - \"edit must not modify same content\" / \"message_not_modified\" → swallow, keep id.\n * - Edit target gone (deleted / 410-class errors) → fall back to a fresh send.\n * - Other errors → rethrow so the broker logs and drops the update; the next\n * key event (or the next throttle tick) retries.\n */\n\nimport type {\n ChannelProgressCapability,\n WorkflowProgressPostInput,\n} from '@xopcai/xopc/agent/workflow/channel-capability.js';\nimport type { Config } from '@xopcai/xopc/config/schema.js';\nimport { parseSessionKey } from '@xopcai/xopc/routing/session-key.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\n\nimport { resolveFeishuAccount } from './state/accounts.js';\n\nconst log = createLogger('FeishuWorkflowProgress');\n\nconst FEISHU_TEXT_MAX = 4_000;\nconst DEFAULT_THROTTLE_MS = 5_000;\n\nexport function createFeishuWorkflowProgressCapability(opts: {\n getConfig: () => Config | undefined;\n}): ChannelProgressCapability {\n return {\n channelId: 'feishu',\n supportsEdit: true,\n defaultThrottleMs: DEFAULT_THROTTLE_MS,\n defaultMode: 'edit',\n\n async postProgress(input: WorkflowProgressPostInput) {\n const cfg = opts.getConfig();\n if (!cfg) {\n throw new Error('feishu workflow progress: no config loaded');\n }\n const target = resolveTarget(input.sessionKey);\n if (!target) {\n throw new Error(`feishu workflow progress: cannot route sessionKey \"${input.sessionKey}\"`);\n }\n\n const account = resolveFeishuAccount(cfg, target.accountId);\n if (!account.configured) {\n throw new Error(\n `feishu workflow progress: account \"${target.accountId}\" not configured (sessionKey \"${input.sessionKey}\")`,\n );\n }\n\n const text = clampForFeishu(input.text);\n\n // Edit-in-place when we have a previous message id and we're not on the\n // final send. The final tick is always a fresh send so users scrolled\n // past the running bubble can still see the conclusion.\n if (input.previousMessageId && !input.isFinal) {\n try {\n const { editMessageFeishu } = await import('./outbound/actions.js');\n await editMessageFeishu({\n cfg,\n accountId: target.accountId,\n messageId: input.previousMessageId,\n text,\n });\n return { messageId: input.previousMessageId };\n } catch (err) {\n if (isMessageNotModified(err)) {\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 fresh send',\n );\n // fall through to fresh send below\n } else {\n throw err;\n }\n }\n }\n\n const { createFeishuClient } = await import('./transport/client/client.js');\n const { api } = createFeishuClient(account);\n const receiveIdType = isOpenId(target.peerId) ? 'open_id' : 'chat_id';\n const res: unknown = await (api as { im: { message: { create(arg: unknown): Promise<unknown> } } }).im.message.create({\n params: { receive_id_type: receiveIdType },\n data: {\n receive_id: target.peerId,\n msg_type: 'text',\n content: JSON.stringify({ text }),\n },\n });\n const messageId = extractMessageId(res);\n if (!messageId) {\n throw new Error('feishu workflow progress: send succeeded but no message_id returned');\n }\n return { messageId };\n },\n };\n}\n\ninterface ResolvedTarget {\n accountId: string;\n peerId: string;\n}\n\nfunction resolveTarget(sessionKey: string): ResolvedTarget | null {\n const parsed = parseSessionKey(sessionKey);\n if (!parsed) return null;\n if (parsed.source !== 'feishu') return null;\n if (!parsed.peerId) return null;\n return {\n accountId: parsed.accountId || 'default',\n peerId: parsed.peerId,\n };\n}\n\nfunction clampForFeishu(text: string): string {\n if (text.length <= FEISHU_TEXT_MAX) return text;\n return `${text.slice(0, FEISHU_TEXT_MAX - 1)}…`;\n}\n\nfunction isOpenId(peerId: string): boolean {\n // Feishu open_id is prefixed `ou_`; chat_id is prefixed `oc_`. Anything\n // else (custom test fixtures, edge cases) defaults to chat_id which is the\n // safer guess for non-DM contexts.\n return peerId.toLowerCase().startsWith('ou_');\n}\n\nfunction extractMessageId(res: unknown): string | undefined {\n if (!res || typeof res !== 'object') return undefined;\n const rec = res as Record<string, unknown>;\n const data = rec.data as Record<string, unknown> | undefined;\n const fromData = typeof data?.message_id === 'string' ? data.message_id : undefined;\n if (fromData) return fromData;\n const direct = typeof rec.message_id === 'string' ? rec.message_id : undefined;\n return direct;\n}\n\nfunction isMessageNotModified(err: unknown): boolean {\n const msg = errorMessage(err).toLowerCase();\n return msg.includes('not_modified') || msg.includes('not modified');\n}\n\nfunction isEditTargetGone(err: unknown): boolean {\n const msg = errorMessage(err).toLowerCase();\n return (\n msg.includes('message_not_found') ||\n msg.includes('message not found') ||\n msg.includes('not exist')\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":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-provider.js","names":[],"sources":["../../../../extensions/google/src/image-generation-provider.ts"],"sourcesContent":["/**\n * Bundled Google Gemini image-generation provider.\n *\n * Uses the Gemini `generateContent` REST surface\n * (`https://generativelanguage.googleapis.com/v1beta/models/<model>:generateContent`)\n * with `responseModalities: ['TEXT', 'IMAGE']`, accepting Buffer-encoded\n * `inlineData` parts back. Supports both text-to-image (no inputImages) and\n * image-editing (one or more inputImages, sent as additional inlineData parts).\n *\n * Authentication: prefers `?key=<API_KEY>` query (the canonical Gemini surface);\n * falls back to `Authorization: Bearer` when the user explicitly configures an\n * OAuth-style key. Configure via env `GOOGLE_API_KEY` /\n * `GEMINI_API_KEY` / `GENERATIVE_LANGUAGE_API_KEY`, or via\n * `cfg.providers.google.apiKey`.\n */\nimport {\n isProviderApiKeyConfigured,\n resolveApiKeyForProvider,\n} from '@xopcai/xopc/providers/auth-runtime/index.js';\nimport {\n pickTimeoutMsOrFallback,\n postJsonRequest,\n privateNetworkPolicyToSsrfGuardOptions,\n resolveProviderHttpRequestConfig,\n} from '@xopcai/xopc/media-shared/http/index.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport {\n imageFileExtensionForMimeType,\n} from '@xopcai/xopc/agent/image/generation/image-assets.js';\nimport type {\n ImageGenerationProvider,\n ImageGenerationProviderCapabilities,\n ImageGenerationRequest,\n ImageGenerationResult,\n ImageProviderUiMetadata,\n} from '@xopcai/xopc/agent/image/generation/types.js';\n\nconst log = createLogger('ImageGen:Google');\n\nconst DEFAULT_GEMINI_BASE_URL = 'https://generativelanguage.googleapis.com';\nconst GOOGLE_IMAGE_UI: ImageProviderUiMetadata = {\n baseUrlPresets: [{ value: DEFAULT_GEMINI_BASE_URL, label: 'Google AI (default)' }],\n baseUrlPresetKind: 'google',\n};\nconst DEFAULT_GEMINI_API_VERSION = 'v1beta';\nconst DEFAULT_TIMEOUT_MS = 180_000;\n\n/** Gemini image-capable model ids for this extension. */\nexport const GOOGLE_IMAGE_MODELS: readonly string[] = [\n 'gemini-2.5-flash-image-preview',\n 'gemini-3-pro-image-preview',\n 'gemini-3-flash-image-preview',\n];\nexport const GOOGLE_DEFAULT_IMAGE_MODEL = GOOGLE_IMAGE_MODELS[0]!;\n\nconst GOOGLE_CAPABILITIES: ImageGenerationProviderCapabilities = {\n generate: { maxCount: 4, supportsSize: true, supportsAspectRatio: true },\n edit: {\n enabled: true,\n maxInputImages: 5,\n supportsSize: true,\n supportsAspectRatio: true,\n },\n geometry: {\n sizes: ['1024x1024', '1024x1536', '1536x1024', '1024x1792', '1792x1024'],\n aspectRatios: ['1:1', '2:3', '3:2', '3:4', '4:3', '4:5', '5:4', '9:16', '16:9', '21:9'],\n },\n output: {\n formats: ['png', 'jpeg', 'webp'],\n },\n};\n\nfunction readGoogleCfgString(\n cfg: ImageGenerationRequest['cfg'],\n key: string,\n): string | undefined {\n const providers = (cfg as unknown as { providers?: Record<string, unknown> } | undefined)\n ?.providers;\n if (!providers || typeof providers !== 'object') return undefined;\n const entry = (providers as Record<string, unknown>)['google'];\n if (!entry || typeof entry !== 'object') return undefined;\n const v = (entry as Record<string, unknown>)[key];\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\n/**\n * Resolve Google Gemini base URL precedence:\n * 1. cfg.providers.google.baseUrl\n * 2. GEMINI_BASE_URL / GOOGLE_GENERATIVE_AI_BASE_URL env\n * 3. Default https://generativelanguage.googleapis.com\n */\nexport function resolveGoogleBaseUrl(req: ImageGenerationRequest): string {\n const fromCfg = readGoogleCfgString(req.cfg, 'baseUrl');\n if (fromCfg) return fromCfg.replace(/\\/+$/, '');\n const fromEnv = (process.env.GEMINI_BASE_URL ?? process.env.GOOGLE_GENERATIVE_AI_BASE_URL)?.trim();\n if (fromEnv) return fromEnv.replace(/\\/+$/, '');\n return DEFAULT_GEMINI_BASE_URL;\n}\n\nfunction resolveGoogleApiVersion(req: ImageGenerationRequest): string {\n const fromCfg = readGoogleCfgString(req.cfg, 'apiVersion');\n if (fromCfg) return fromCfg;\n const fromEnv = process.env.GEMINI_API_VERSION?.trim();\n if (fromEnv) return fromEnv;\n return DEFAULT_GEMINI_API_VERSION;\n}\n\nfunction resolveGoogleAuthMode(\n req: ImageGenerationRequest,\n): 'query' | 'bearer' {\n const fromCfg = readGoogleCfgString(req.cfg, 'authMode');\n const v = (fromCfg ?? process.env.GEMINI_AUTH_MODE ?? '').trim().toLowerCase();\n if (v === 'bearer' || v === 'oauth') return 'bearer';\n return 'query';\n}\n\ntype GeminiInlineData = { mimeType?: string; data?: string };\ntype GeminiPart =\n | { text?: string }\n | { inlineData?: GeminiInlineData }\n | { inline_data?: GeminiInlineData };\ntype GeminiCandidate = {\n content?: { parts?: GeminiPart[] };\n finishReason?: string;\n};\ntype GeminiResponse = {\n candidates?: GeminiCandidate[];\n promptFeedback?: { blockReason?: string };\n error?: { code?: number; message?: string; status?: string };\n};\n\nfunction extractInlineData(part: GeminiPart): GeminiInlineData | undefined {\n if (part && typeof part === 'object') {\n if ('inlineData' in part && part.inlineData) return part.inlineData;\n if ('inline_data' in part && part.inline_data) return part.inline_data;\n }\n return undefined;\n}\n\nexport async function generateGoogleImages(params: {\n req: ImageGenerationRequest;\n apiKey: string;\n}): Promise<ImageGenerationResult> {\n const { req, apiKey } = params;\n const model = req.model?.trim() || GOOGLE_DEFAULT_IMAGE_MODEL;\n const apiVersion = resolveGoogleApiVersion(req);\n const baseUrl = resolveGoogleBaseUrl(req);\n const authMode = resolveGoogleAuthMode(req);\n\n // Build prompt parts: text + (optional) input images.\n const userParts: GeminiPart[] = [{ text: req.prompt }];\n for (const image of req.inputImages ?? []) {\n const mimeType = image.mimeType?.trim() || 'image/png';\n userParts.push({\n inlineData: {\n mimeType,\n data: Buffer.from(image.buffer).toString('base64'),\n },\n });\n }\n\n // Honour both aspectRatio and size as hints. Gemini does not enforce a strict\n // schema for these values; pass them under generationConfig.imageConfig where\n // the backend understands them, plus echo them in the prompt as a safety net.\n const generationConfig: Record<string, unknown> = {\n responseModalities: ['TEXT', 'IMAGE'],\n };\n const imageConfig: Record<string, unknown> = {};\n if (req.aspectRatio?.trim()) {\n imageConfig.aspectRatio = req.aspectRatio.trim();\n }\n if (req.size?.trim()) {\n imageConfig.size = req.size.trim();\n }\n if (req.outputFormat?.trim()) {\n imageConfig.outputFormat = req.outputFormat.trim();\n }\n if (Object.keys(imageConfig).length > 0) {\n generationConfig.imageConfig = imageConfig;\n }\n\n const candidateCount = Math.max(1, Math.min(4, req.count ?? 1));\n if (candidateCount > 1) {\n generationConfig.candidateCount = candidateCount;\n }\n\n const body = {\n contents: [{ role: 'user', parts: userParts }],\n generationConfig,\n };\n\n const baseEndpoint = `${baseUrl}/${apiVersion}/models/${encodeURIComponent(model)}:generateContent`;\n const url =\n authMode === 'query'\n ? `${baseEndpoint}?key=${encodeURIComponent(apiKey)}`\n : baseEndpoint;\n\n const httpDefaults = resolveProviderHttpRequestConfig({\n providerId: 'google',\n cfg: req.cfg,\n fallbackTimeoutMs: DEFAULT_TIMEOUT_MS,\n });\n\n const headers: Record<string, string> = { ...httpDefaults.headers };\n if (authMode === 'bearer') {\n headers.authorization = `Bearer ${apiKey}`;\n }\n\n log.debug(\n {\n providerId: 'google',\n model,\n url: baseEndpoint,\n authMode,\n candidateCount,\n inputImages: (req.inputImages ?? []).length,\n phase: 'request',\n },\n 'Google Gemini image generation request',\n );\n\n const timeoutMs = pickTimeoutMsOrFallback(req.timeoutMs, httpDefaults.timeoutMs, DEFAULT_TIMEOUT_MS);\n const res = await postJsonRequest(url, {\n label: 'google',\n timeoutMs,\n signal: req.signal,\n body,\n headers,\n ...privateNetworkPolicyToSsrfGuardOptions(),\n });\n\n const rawText = await res.text();\n let data: GeminiResponse;\n try {\n data = JSON.parse(rawText) as GeminiResponse;\n } catch {\n throw new Error(`Google Gemini returned non-JSON: ${rawText.slice(0, 240)}`);\n }\n\n if (data.error) {\n const code = data.error.code ?? data.error.status ?? 'UNKNOWN';\n throw new Error(`Google Gemini: ${code}: ${data.error.message ?? 'request failed'}`);\n }\n if (data.promptFeedback?.blockReason) {\n throw new Error(`Google Gemini blocked prompt: ${data.promptFeedback.blockReason}`);\n }\n\n const collected: Array<{ buffer: Buffer; mimeType: string; fileName: string }> = [];\n let index = 0;\n for (const candidate of data.candidates ?? []) {\n for (const part of candidate.content?.parts ?? []) {\n const inline = extractInlineData(part);\n if (!inline?.data) continue;\n const mimeType = inline.mimeType?.trim() || 'image/png';\n const buffer = Buffer.from(inline.data, 'base64');\n if (buffer.length === 0) continue;\n index += 1;\n const ext = imageFileExtensionForMimeType(mimeType);\n collected.push({\n buffer,\n mimeType,\n fileName: `image-${index}.${ext}`,\n });\n }\n }\n\n if (collected.length === 0) {\n const finishReason = data.candidates?.[0]?.finishReason ?? 'unknown';\n throw new Error(\n `Google Gemini returned no image data (finishReason=${finishReason}). ` +\n 'Verify the model id supports image output.',\n );\n }\n\n return { images: collected, model };\n}\n\nexport function buildGoogleImageGenerationProvider(): ImageGenerationProvider {\n return {\n id: 'google',\n aliases: ['gemini'],\n label: 'Google Gemini',\n defaultModel: GOOGLE_DEFAULT_IMAGE_MODEL,\n models: [...GOOGLE_IMAGE_MODELS],\n capabilities: GOOGLE_CAPABILITIES,\n ui: GOOGLE_IMAGE_UI,\n isConfigured: (ctx) =>\n isProviderApiKeyConfigured({ providerId: 'google', cfg: ctx.cfg }),\n async generateImage(req) {\n const apiKey = resolveApiKeyForProvider({ providerId: 'google', cfg: req.cfg });\n if (!apiKey) {\n throw new Error(\n 'Google Gemini API key missing (set GOOGLE_API_KEY / GEMINI_API_KEY or providers.google.apiKey)',\n );\n }\n return generateGoogleImages({ req, apiKey });\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;aAyB4D;AAY5D,MAAM,MAAM,aAAa,kBAAkB;AAE3C,MAAM,0BAA0B;AAChC,MAAM,kBAA2C;CAC/C,gBAAgB,CAAC;EAAE,OAAO;EAAyB,OAAO;EAAuB,CAAC;CAClF,mBAAmB;CACpB;AACD,MAAM,6BAA6B;AACnC,MAAM,qBAAqB;;AAG3B,MAAa,sBAAyC;CACpD;CACA;CACA;CACD;AACD,MAAa,6BAA6B,oBAAoB;AAE9D,MAAM,sBAA2D;CAC/D,UAAU;EAAE,UAAU;EAAG,cAAc;EAAM,qBAAqB;EAAM;CACxE,MAAM;EACJ,SAAS;EACT,gBAAgB;EAChB,cAAc;EACd,qBAAqB;EACtB;CACD,UAAU;EACR,OAAO;GAAC;GAAa;GAAa;GAAa;GAAa;GAAY;EACxE,cAAc;GAAC;GAAO;GAAO;GAAO;GAAO;GAAO;GAAO;GAAO;GAAQ;GAAQ;GAAO;EACxF;CACD,QAAQ,EACN,SAAS;EAAC;EAAO;EAAQ;EAAO,EACjC;CACF;AAED,SAAS,oBACP,KACA,KACoB;CACpB,MAAM,YAAa,KACf;AACJ,KAAI,CAAC,aAAa,OAAO,cAAc,SAAU,QAAO,KAAA;CACxD,MAAM,QAAS,UAAsC;AACrD,KAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO,KAAA;CAChD,MAAM,IAAK,MAAkC;AAC7C,QAAO,OAAO,MAAM,YAAY,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,KAAA;;;;;;;;AASxD,SAAgB,qBAAqB,KAAqC;CACxE,MAAM,UAAU,oBAAoB,IAAI,KAAK,UAAU;AACvD,KAAI,QAAS,QAAO,QAAQ,QAAQ,QAAQ,GAAG;CAC/C,MAAM,WAAW,QAAQ,IAAI,mBAAmB,QAAQ,IAAI,gCAAgC,MAAM;AAClG,KAAI,QAAS,QAAO,QAAQ,QAAQ,QAAQ,GAAG;AAC/C,QAAO;;AAGT,SAAS,wBAAwB,KAAqC;CACpE,MAAM,UAAU,oBAAoB,IAAI,KAAK,aAAa;AAC1D,KAAI,QAAS,QAAO;CACpB,MAAM,UAAU,QAAQ,IAAI,oBAAoB,MAAM;AACtD,KAAI,QAAS,QAAO;AACpB,QAAO;;AAGT,SAAS,sBACP,KACoB;CAEpB,MAAM,KADU,oBAAoB,IAAI,KAAK,WAC3B,IAAI,QAAQ,IAAI,oBAAoB,IAAI,MAAM,CAAC,aAAa;AAC9E,KAAI,MAAM,YAAY,MAAM,QAAS,QAAO;AAC5C,QAAO;;AAkBT,SAAS,kBAAkB,MAAgD;AACzE,KAAI,QAAQ,OAAO,SAAS,UAAU;AACpC,MAAI,gBAAgB,QAAQ,KAAK,WAAY,QAAO,KAAK;AACzD,MAAI,iBAAiB,QAAQ,KAAK,YAAa,QAAO,KAAK;;;AAK/D,eAAsB,qBAAqB,QAGR;CACjC,MAAM,EAAE,KAAK,WAAW;CACxB,MAAM,QAAQ,IAAI,OAAO,MAAM,IAAI;CACnC,MAAM,aAAa,wBAAwB,IAAI;CAC/C,MAAM,UAAU,qBAAqB,IAAI;CACzC,MAAM,WAAW,sBAAsB,IAAI;CAG3C,MAAM,YAA0B,CAAC,EAAE,MAAM,IAAI,QAAQ,CAAC;AACtD,MAAK,MAAM,SAAS,IAAI,eAAe,EAAE,EAAE;EACzC,MAAM,WAAW,MAAM,UAAU,MAAM,IAAI;AAC3C,YAAU,KAAK,EACb,YAAY;GACV;GACA,MAAM,OAAO,KAAK,MAAM,OAAO,CAAC,SAAS,SAAS;GACnD,EACF,CAAC;;CAMJ,MAAM,mBAA4C,EAChD,oBAAoB,CAAC,QAAQ,QAAQ,EACtC;CACD,MAAM,cAAuC,EAAE;AAC/C,KAAI,IAAI,aAAa,MAAM,CACzB,aAAY,cAAc,IAAI,YAAY,MAAM;AAElD,KAAI,IAAI,MAAM,MAAM,CAClB,aAAY,OAAO,IAAI,KAAK,MAAM;AAEpC,KAAI,IAAI,cAAc,MAAM,CAC1B,aAAY,eAAe,IAAI,aAAa,MAAM;AAEpD,KAAI,OAAO,KAAK,YAAY,CAAC,SAAS,EACpC,kBAAiB,cAAc;CAGjC,MAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;AAC/D,KAAI,iBAAiB,EACnB,kBAAiB,iBAAiB;CAGpC,MAAM,OAAO;EACX,UAAU,CAAC;GAAE,MAAM;GAAQ,OAAO;GAAW,CAAC;EAC9C;EACD;CAED,MAAM,eAAe,GAAG,QAAQ,GAAG,WAAW,UAAU,mBAAmB,MAAM,CAAC;CAClF,MAAM,MACJ,aAAa,UACT,GAAG,aAAa,OAAO,mBAAmB,OAAO,KACjD;CAEN,MAAM,eAAe,iCAAiC;EACpD,YAAY;EACZ,KAAK,IAAI;EACT,mBAAmB;EACpB,CAAC;CAEF,MAAM,UAAkC,EAAE,GAAG,aAAa,SAAS;AACnE,KAAI,aAAa,SACf,SAAQ,gBAAgB,UAAU;AAGpC,KAAI,MACF;EACE,YAAY;EACZ;EACA,KAAK;EACL;EACA;EACA,cAAc,IAAI,eAAe,EAAE,EAAE;EACrC,OAAO;EACR,EACD,yCACD;CAYD,MAAM,UAAU,OAAM,MATJ,gBAAgB,KAAK;EACrC,OAAO;EACP,WAHgB,wBAAwB,IAAI,WAAW,aAAa,WAAW,mBAGtE;EACT,QAAQ,IAAI;EACZ;EACA;EACA,GAAG,wCAAwC;EAC5C,CAAC,EAEwB,MAAM;CAChC,IAAI;AACJ,KAAI;AACF,SAAO,KAAK,MAAM,QAAQ;SACpB;AACN,QAAM,IAAI,MAAM,oCAAoC,QAAQ,MAAM,GAAG,IAAI,GAAG;;AAG9E,KAAI,KAAK,OAAO;EACd,MAAM,OAAO,KAAK,MAAM,QAAQ,KAAK,MAAM,UAAU;AACrD,QAAM,IAAI,MAAM,kBAAkB,KAAK,IAAI,KAAK,MAAM,WAAW,mBAAmB;;AAEtF,KAAI,KAAK,gBAAgB,YACvB,OAAM,IAAI,MAAM,iCAAiC,KAAK,eAAe,cAAc;CAGrF,MAAM,YAA2E,EAAE;CACnF,IAAI,QAAQ;AACZ,MAAK,MAAM,aAAa,KAAK,cAAc,EAAE,CAC3C,MAAK,MAAM,QAAQ,UAAU,SAAS,SAAS,EAAE,EAAE;EACjD,MAAM,SAAS,kBAAkB,KAAK;AACtC,MAAI,CAAC,QAAQ,KAAM;EACnB,MAAM,WAAW,OAAO,UAAU,MAAM,IAAI;EAC5C,MAAM,SAAS,OAAO,KAAK,OAAO,MAAM,SAAS;AACjD,MAAI,OAAO,WAAW,EAAG;AACzB,WAAS;EACT,MAAM,MAAM,8BAA8B,SAAS;AACnD,YAAU,KAAK;GACb;GACA;GACA,UAAU,SAAS,MAAM,GAAG;GAC7B,CAAC;;AAIN,KAAI,UAAU,WAAW,GAAG;EAC1B,MAAM,eAAe,KAAK,aAAa,IAAI,gBAAgB;AAC3D,QAAM,IAAI,MACR,sDAAsD,aAAa,+CAEpE;;AAGH,QAAO;EAAE,QAAQ;EAAW;EAAO;;AAGrC,SAAgB,qCAA8D;AAC5E,QAAO;EACL,IAAI;EACJ,SAAS,CAAC,SAAS;EACnB,OAAO;EACP,cAAc;EACd,QAAQ,CAAC,GAAG,oBAAoB;EAChC,cAAc;EACd,IAAI;EACJ,eAAe,QACb,2BAA2B;GAAE,YAAY;GAAU,KAAK,IAAI;GAAK,CAAC;EACpE,MAAM,cAAc,KAAK;GACvB,MAAM,SAAS,yBAAyB;IAAE,YAAY;IAAU,KAAK,IAAI;IAAK,CAAC;AAC/E,OAAI,CAAC,OACH,OAAM,IAAI,MACR,iGACD;AAEH,UAAO,qBAAqB;IAAE;IAAK;IAAQ,CAAC;;EAE/C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-provider.js","names":[],"sources":["../../../../extensions/minimax/src/image-generation-provider.ts"],"sourcesContent":["/**\n * Bundled MiniMax image-generation provider.\n *\n * Migrated from src/agent/image/generation/minimax-generate.ts. Logic stays\n * identical; only the registration pathway moves to the bundled generator.\n */\nimport {\n isProviderApiKeyConfigured,\n resolveApiKeyForProvider,\n} from '@xopcai/xopc/providers/auth-runtime/index.js';\nimport {\n pickTimeoutMsOrFallback,\n postJsonRequest,\n privateNetworkPolicyToSsrfGuardOptions,\n resolveProviderHttpRequestConfig,\n} from '@xopcai/xopc/media-shared/http/index.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport type {\n ImageGenerationProvider,\n ImageGenerationProviderCapabilities,\n ImageGenerationRequest,\n ImageGenerationResult,\n} from '@xopcai/xopc/agent/image/generation/types.js';\n\nconst log = createLogger('ImageGen:MiniMax');\n\n/**\n * MiniMax `POST /v1/image_generation` model names (vendor OpenAPI enum).\n * Default: `image-01`. `image-01-live` is the alternate enum value on the same API.\n * @see https://platform.minimax.io/docs/api-reference/image-generation-i2i\n */\nexport const MINIMAX_IMAGE_MODELS: readonly string[] = ['image-01', 'image-01-live'];\nexport const MINIMAX_DEFAULT_IMAGE_MODEL = MINIMAX_IMAGE_MODELS[0]!;\n\n/** CN region. */\nconst MINIMAX_CN_BASE_URL = 'https://api.minimaxi.com';\n/** International region. */\nconst MINIMAX_INTL_BASE_URL = 'https://api.minimax.io';\n\nconst DEFAULT_TIMEOUT_MS = 120_000;\n\nconst MINIMAX_CAPABILITIES: ImageGenerationProviderCapabilities = {\n generate: { maxCount: 1, supportsAspectRatio: true, supportsSize: false },\n edit: { enabled: false },\n geometry: { aspectRatios: ['1:1', '16:9', '9:16', '4:3', '3:4'] },\n output: { formats: ['jpeg'] },\n};\n\nfunction readMinimaxCfgString(\n cfg: ImageGenerationRequest['cfg'],\n providerId: string,\n key: string,\n): string | undefined {\n const providers = (cfg as unknown as { providers?: Record<string, unknown> } | undefined)?.providers;\n if (!providers || typeof providers !== 'object') return undefined;\n const entry = (providers as Record<string, unknown>)[providerId];\n if (!entry || typeof entry !== 'object') return undefined;\n const v = (entry as Record<string, unknown>)[key];\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\n/**\n * Resolve MiniMax base URL:\n * 1. cfg.providers[providerId].baseUrl\n * 2. MINIMAX_BASE_URL env\n * 3. Provider default base URL\n */\nexport function resolveMinimaxBaseUrl(\n req: ImageGenerationRequest,\n defaultBaseUrl?: string,\n): string {\n const providerId = req.provider?.trim() || 'minimax';\n const fromCfg = readMinimaxCfgString(req.cfg, providerId, 'baseUrl');\n if (fromCfg) return fromCfg.replace(/\\/+$/, '');\n const fromEnv = process.env.MINIMAX_BASE_URL?.trim();\n if (fromEnv) return fromEnv.replace(/\\/+$/, '');\n if (defaultBaseUrl) return defaultBaseUrl;\n return providerId === 'minimax' ? MINIMAX_INTL_BASE_URL : MINIMAX_CN_BASE_URL;\n}\n\nfunction resolveMinimaxImageUrl(req: ImageGenerationRequest, defaultBaseUrl?: string): string {\n return `${resolveMinimaxBaseUrl(req, defaultBaseUrl)}/v1/image_generation`;\n}\n\nexport type MinimaxAspectRatio = '1:1' | '16:9' | '9:16' | '4:3' | '3:4';\n\n/** Map tool size (e.g. `1024x1024`) to the closest MiniMax-supported aspect ratio. */\nexport function mapSizeToMinimaxAspectRatio(size?: string): MinimaxAspectRatio {\n if (!size?.trim()) {\n return '1:1';\n }\n const m = /^(\\d+)\\s*[xX]\\s*(\\d+)$/.exec(size.trim());\n if (!m) {\n return '1:1';\n }\n const w = Number(m[1]);\n const h = Number(m[2]);\n if (!Number.isFinite(w) || !Number.isFinite(h) || h === 0) {\n return '1:1';\n }\n const ratio = w / h;\n const candidates: Array<{ ar: MinimaxAspectRatio; r: number }> = [\n { ar: '1:1', r: 1 },\n { ar: '16:9', r: 16 / 9 },\n { ar: '9:16', r: 9 / 16 },\n { ar: '4:3', r: 4 / 3 },\n { ar: '3:4', r: 3 / 4 },\n ];\n let best = candidates[0]!;\n let bestDiff = Math.abs(ratio - best.r);\n for (const c of candidates.slice(1)) {\n const d = Math.abs(ratio - c.r);\n if (d < bestDiff) {\n best = c;\n bestDiff = d;\n }\n }\n return best.ar;\n}\n\ntype MiniMaxImageResponse = {\n data?: { image_base64?: string[] };\n base_resp?: { status_code?: number; status_msg?: string };\n};\n\nexport async function generateMinimaxImages(params: {\n req: ImageGenerationRequest;\n apiKey: string;\n providerId?: string;\n defaultBaseUrl?: string;\n}): Promise<ImageGenerationResult> {\n const { req, apiKey } = params;\n const providerId = params.providerId ?? req.provider ?? 'minimax-cn';\n if (req.inputImages && req.inputImages.length > 0) {\n throw new Error('Image-to-image is not supported for MiniMax in this build');\n }\n\n const model = req.model?.trim() || MINIMAX_DEFAULT_IMAGE_MODEL;\n // Honour explicit aspectRatio first; fall back to size-derived mapping.\n const aspectRatio = req.aspectRatio?.trim() || mapSizeToMinimaxAspectRatio(req.size);\n\n const url = resolveMinimaxImageUrl(req, params.defaultBaseUrl);\n const httpDefaults = resolveProviderHttpRequestConfig({\n providerId,\n cfg: req.cfg,\n fallbackTimeoutMs: DEFAULT_TIMEOUT_MS,\n });\n\n log.debug(\n { providerId, model, url, aspectRatio, phase: 'request' },\n 'MiniMax image generation request',\n );\n\n const timeoutMs = pickTimeoutMsOrFallback(req.timeoutMs, httpDefaults.timeoutMs, DEFAULT_TIMEOUT_MS);\n const res = await postJsonRequest(url, {\n label: providerId,\n timeoutMs,\n signal: req.signal,\n body: {\n model,\n prompt: req.prompt,\n aspect_ratio: aspectRatio,\n response_format: 'base64',\n },\n headers: {\n ...httpDefaults.headers,\n authorization: `Bearer ${apiKey}`,\n },\n ...privateNetworkPolicyToSsrfGuardOptions(),\n });\n\n const rawText = await res.text();\n let data: MiniMaxImageResponse;\n try {\n data = JSON.parse(rawText) as MiniMaxImageResponse;\n } catch {\n throw new Error(`MiniMax returned non-JSON: ${rawText.slice(0, 240)}`);\n }\n\n const code = data.base_resp?.status_code;\n if (code !== undefined && code !== 0) {\n throw new Error(\n `MiniMax: ${code}: ${data.base_resp?.status_msg ?? 'request failed'}`.trim(),\n );\n }\n\n const imageBase64List = data.data?.image_base64 ?? [];\n if (imageBase64List.length === 0) {\n throw new Error('MiniMax returned no images');\n }\n\n const images = imageBase64List.map((b64, index) => ({\n buffer: Buffer.from(b64, 'base64'),\n mimeType: 'image/jpeg',\n fileName: `image-${index + 1}.jpg`,\n }));\n\n return { images, model };\n}\n\nfunction createMinimaxImageGenerationProvider(options: {\n id: string;\n label: string;\n defaultBaseUrl?: string;\n}): ImageGenerationProvider {\n return {\n id: options.id,\n label: options.label,\n defaultModel: MINIMAX_DEFAULT_IMAGE_MODEL,\n models: [...MINIMAX_IMAGE_MODELS],\n capabilities: MINIMAX_CAPABILITIES,\n isConfigured: (ctx) => isProviderApiKeyConfigured({ providerId: options.id, cfg: ctx.cfg }),\n async generateImage(req) {\n const apiKey = resolveApiKeyForProvider({ providerId: options.id, cfg: req.cfg });\n if (!apiKey) {\n throw new Error(\n `MiniMax API key missing (MINIMAX_API_KEY or providers.${options.id}.apiKey)`,\n );\n }\n return generateMinimaxImages({\n req,\n apiKey,\n providerId: options.id,\n defaultBaseUrl: options.defaultBaseUrl,\n });\n },\n };\n}\n\nexport function buildMinimaxCnImageGenerationProvider(): ImageGenerationProvider {\n return createMinimaxImageGenerationProvider({\n id: 'minimax-cn',\n label: 'MiniMax CN',\n defaultBaseUrl: MINIMAX_CN_BASE_URL,\n });\n}\n\nexport function buildMinimaxImageGenerationProvider(): ImageGenerationProvider {\n return createMinimaxImageGenerationProvider({\n id: 'minimax',\n label: 'MiniMax International',\n defaultBaseUrl: MINIMAX_INTL_BASE_URL,\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-provider.js","names":[],"sources":["../../../../extensions/openai/src/image-generation-provider.ts"],"sourcesContent":["/**\n * Bundled OpenAI image-generation provider.\n *\n * Migrated from src/agent/image/generation/openai-generate.ts as part of the\n * Step 3 plugin-isation. Step 4 adds:\n * - **Azure OpenAI** routing (when `cfg.providers.openai.azure.{resource,\n * deployment, apiVersion}` is set, or env `AZURE_OPENAI_*`): swaps base\n * URL + uses `api-key` header instead of `Authorization: Bearer`.\n * - **OAuth** support (Codex / future): when the active auth profile is\n * `mode: 'oauth'`, the OAuth access token is sent as a Bearer token.\n * Refresh is NOT performed here — vendors call\n * `refreshOAuthProfile` + `store.save` ahead of time.\n */\nimport {\n isProviderApiKeyConfigured,\n resolveAuthProfileForProvider,\n} from '@xopcai/xopc/providers/auth-runtime/index.js';\nimport { createOpenAiCompatibleImageProvider } from '@xopcai/xopc/agent/image/generation/openai-compatible-image-provider.js';\nimport type { OpenAiCompatibleEndpointResolution } from '@xopcai/xopc/agent/image/generation/openai-compatible-image-provider.js';\nimport type {\n ImageGenerationProvider,\n ImageGenerationProviderCapabilities,\n ImageGenerationRequest,\n ImageProviderUiMetadata,\n} from '@xopcai/xopc/agent/image/generation/types.js';\n\nconst OPENAI_DEFAULT_BASE_URL = 'https://api.openai.com/v1';\n\n/** Image models exposed by this extension (OpenAI Images API + compatible hosts). */\nexport const OPENAI_IMAGE_MODELS: readonly string[] = ['gpt-image-1', 'dall-e-3', 'dall-e-2'];\nexport const OPENAI_DEFAULT_IMAGE_MODEL = OPENAI_IMAGE_MODELS[0]!;\n\nconst OPENAI_IMAGE_UI: ImageProviderUiMetadata = {\n baseUrlPresets: [{ value: OPENAI_DEFAULT_BASE_URL, label: 'OpenAI API (default)' }],\n baseUrlPresetKind: 'openai',\n};\n\nconst OPENAI_CAPABILITIES: ImageGenerationProviderCapabilities = {\n generate: { maxCount: 4, supportsSize: true },\n edit: { enabled: true, maxInputImages: 1, supportsSize: true },\n geometry: { sizes: ['1024x1024', '1024x1536', '1536x1024'] },\n output: {\n qualities: ['low', 'medium', 'high', 'auto'],\n formats: ['png', 'jpeg', 'webp'],\n backgrounds: ['transparent', 'opaque', 'auto'],\n },\n};\n\ninterface AzureSettings {\n resource: string;\n deployment: string;\n apiVersion: string;\n}\n\nfunction resolveAzureSettings(req: ImageGenerationRequest): AzureSettings | undefined {\n const cfg = req.cfg as unknown as\n | { providers?: { openai?: { azure?: { resource?: unknown; deployment?: unknown; apiVersion?: unknown } } } }\n | undefined;\n const fromCfg = cfg?.providers?.openai?.azure;\n const resource = pickString(fromCfg?.resource) ?? pickEnv('AZURE_OPENAI_RESOURCE');\n const deployment =\n pickString(fromCfg?.deployment) ?? pickEnv('AZURE_OPENAI_DEPLOYMENT') ?? req.model;\n const apiVersion =\n pickString(fromCfg?.apiVersion) ?? pickEnv('AZURE_OPENAI_API_VERSION') ?? '2024-08-01-preview';\n if (!resource || !deployment) return undefined;\n return { resource, deployment, apiVersion };\n}\n\nfunction pickString(v: unknown): string | undefined {\n return typeof v === 'string' && v.trim().length > 0 ? v.trim() : undefined;\n}\n\nfunction pickEnv(name: string): string | undefined {\n return pickString(process.env[name]);\n}\n\nfunction resolveOpenAiBaseUrl(req: ImageGenerationRequest): string {\n const cfg = req.cfg as unknown as { providers?: Record<string, { baseUrl?: unknown }> } | undefined;\n const fromCfg = pickString(cfg?.providers?.openai?.baseUrl);\n if (fromCfg) return fromCfg.replace(/\\/+$/, '');\n const fromEnv = pickEnv('OPENAI_BASE_URL');\n if (fromEnv) return fromEnv.replace(/\\/+$/, '');\n return OPENAI_DEFAULT_BASE_URL;\n}\n\nfunction buildAzureEndpoint(azure: AzureSettings): OpenAiCompatibleEndpointResolution {\n const baseUrl = `https://${azure.resource}.openai.azure.com/openai`;\n const query = `?api-version=${encodeURIComponent(azure.apiVersion)}`;\n return {\n baseUrl,\n generationsPath: `/deployments/${encodeURIComponent(azure.deployment)}/images/generations${query}`,\n editsPath: `/deployments/${encodeURIComponent(azure.deployment)}/images/edits${query}`,\n authorization: { kind: 'header', headerName: 'api-key' },\n };\n}\n\nexport function buildOpenAIImageGenerationProvider(): ImageGenerationProvider {\n return createOpenAiCompatibleImageProvider({\n id: 'openai',\n label: 'OpenAI',\n defaultModel: OPENAI_DEFAULT_IMAGE_MODEL,\n models: [...OPENAI_IMAGE_MODELS],\n capabilities: OPENAI_CAPABILITIES,\n ui: OPENAI_IMAGE_UI,\n isConfigured: (ctx) =>\n isProviderApiKeyConfigured({ providerId: 'openai', cfg: ctx.cfg }),\n resolveApiKey: (req) => {\n const auth = resolveAuthProfileForProvider({\n providerId: 'openai',\n cfg: req.cfg,\n store: req.authStore,\n });\n return auth.apiKey ?? null;\n },\n resolveEndpoint: (req) => {\n // 1. Azure routing: explicit `cfg.providers.openai.azure.*` or\n // AZURE_OPENAI_* env wins over the public api.openai.com endpoint.\n const azure = resolveAzureSettings(req);\n if (azure) return buildAzureEndpoint(azure);\n // 2. OAuth (Codex / future) — same wire format as api-key, the access\n // token is used as a Bearer token. The default factory branch\n // (kind: 'bearer') already handles this.\n return { baseUrl: resolveOpenAiBaseUrl(req) };\n },\n defaultTimeoutMs: 120_000,\n buildGenerateRequestBody: (req, base) => {\n // dall-e-2 / dall-e-3 have stricter validation. Strip params they reject.\n const m = (req.model || '').toLowerCase();\n if (m === 'dall-e-2' || m === 'dall-e-3') {\n const cleaned: Record<string, unknown> = { ...base };\n delete cleaned.output_format;\n delete cleaned.background;\n delete cleaned.output_compression;\n delete cleaned.moderation;\n if (m === 'dall-e-3' && (cleaned.n === undefined || Number(cleaned.n) > 1)) {\n // dall-e-3 only accepts n=1.\n cleaned.n = 1;\n }\n if (m === 'dall-e-2' && cleaned.quality !== undefined) {\n // dall-e-2 has no quality dimension.\n delete cleaned.quality;\n }\n return cleaned;\n }\n return base;\n },\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access-control.js","names":[],"sources":["../../../../extensions/telegram/src/access-control.ts"],"sourcesContent":["/**\n * Channel Access Control Utilities\n * \n * Implements hierarchical access control for groups and topics\n *\n */\n\nimport type {\n NormalizedAllowFrom,\n AllowFromMatch,\n GroupAccessResult,\n GroupPolicy,\n} from '@xopcai/xopc/channels/channel-domain.js';\nimport type { TelegramGroupConfig, TelegramTopicConfig } from './config-types.js';\n\n// ============================================\n// AllowFrom Normalization\n// ============================================\n\n/**\n * Normalize allowFrom list to structured format\n */\nexport function normalizeAllowFrom(list?: Array<string | number>): NormalizedAllowFrom {\n const entries = (list ?? []).map((value) => String(value).trim()).filter(Boolean);\n const hasWildcard = entries.includes('*');\n const normalized = entries\n .filter((value) => value !== '*')\n .map((value) => value.replace(/^(telegram|tg):/i, ''));\n const ids = normalized.filter((value) => /^\\d+$/.test(value));\n \n return {\n entries: ids,\n hasWildcard,\n hasEntries: ids.length > 0,\n };\n}\n\n/**\n * Normalize allowFrom combining config and store\n */\nexport function normalizeAllowFromWithStore(params: {\n allowFrom?: Array<string | number>;\n storeAllowFrom?: string[];\n}): NormalizedAllowFrom {\n const combined = [\n ...(params.allowFrom ?? []),\n ...(params.storeAllowFrom ?? []),\n ]\n .map((value) => String(value).trim())\n .filter(Boolean);\n return normalizeAllowFrom(combined);\n}\n\n/**\n * Check if sender is allowed based on normalized allowFrom\n */\nexport function isSenderAllowed(params: {\n allow: NormalizedAllowFrom;\n senderId?: string;\n senderUsername?: string;\n}): boolean {\n const { allow, senderId } = params;\n \n // No entries = allow all\n if (!allow.hasEntries) {\n return true;\n }\n \n // Wildcard = allow all\n if (allow.hasWildcard) {\n return true;\n }\n \n // Check if sender ID is in allowlist\n if (senderId && allow.entries.includes(senderId)) {\n return true;\n }\n \n return false;\n}\n\n/**\n * Resolve sender allowlist match\n */\nexport function resolveSenderAllowMatch(params: {\n allow: NormalizedAllowFrom;\n senderId?: string;\n senderUsername?: string;\n}): AllowFromMatch {\n const { allow, senderId } = params;\n \n if (allow.hasWildcard) {\n return { allowed: true, matchKey: '*', matchSource: 'wildcard' };\n }\n \n if (!allow.hasEntries) {\n return { allowed: false };\n }\n \n if (senderId && allow.entries.includes(senderId)) {\n return { allowed: true, matchKey: senderId, matchSource: 'id' };\n }\n \n return { allowed: false };\n}\n\n// ============================================\n// Group Access Control\n// ============================================\n\n/**\n * Evaluate base group access (group/topic enabled, allowFrom override)\n */\nexport function evaluateGroupBaseAccess(params: {\n isGroup: boolean;\n groupConfig?: TelegramGroupConfig;\n topicConfig?: TelegramTopicConfig;\n hasGroupAllowOverride: boolean;\n effectiveGroupAllow: NormalizedAllowFrom;\n senderId?: string;\n senderUsername?: string;\n}): GroupAccessResult {\n // Not a group = always allowed\n if (!params.isGroup) {\n return { allowed: true };\n }\n \n // Check if group is disabled\n if (params.groupConfig?.enabled === false) {\n return { allowed: false, reason: 'group-disabled' };\n }\n \n // Check if topic is disabled\n if (params.topicConfig?.enabled === false) {\n return { allowed: false, reason: 'topic-disabled' };\n }\n \n // Check allowFrom override if present\n if (params.hasGroupAllowOverride) {\n const senderId = params.senderId ?? '';\n if (!senderId) {\n return { allowed: false, reason: 'unauthorized' };\n }\n \n const allowed = isSenderAllowed({\n allow: params.effectiveGroupAllow,\n senderId,\n senderUsername: params.senderUsername,\n });\n \n if (!allowed) {\n return { allowed: false, reason: 'unauthorized' };\n }\n }\n \n return { allowed: true };\n}\n\n/**\n * Evaluate group policy access (open/disabled/allowlist)\n */\nexport function evaluateGroupPolicyAccess(params: {\n isGroup: boolean;\n groupPolicy: GroupPolicy;\n effectiveGroupAllow: NormalizedAllowFrom;\n senderId?: string;\n senderUsername?: string;\n}): GroupAccessResult {\n const { isGroup, groupPolicy, effectiveGroupAllow, senderId, senderUsername } = params;\n \n // Not a group or policy not enforced = always allowed\n if (!isGroup) {\n return { allowed: true, groupPolicy };\n }\n \n // Disabled policy = block all\n if (groupPolicy === 'disabled') {\n return { allowed: false, reason: 'policy-blocked', groupPolicy };\n }\n \n // Open policy = allow all (mention gating handled separately)\n if (groupPolicy === 'open') {\n return { allowed: true, groupPolicy };\n }\n \n // Allowlist policy = check allowFrom\n if (groupPolicy === 'allowlist') {\n if (!effectiveGroupAllow.hasEntries && !effectiveGroupAllow.hasWildcard) {\n return { allowed: false, reason: 'policy-blocked', groupPolicy };\n }\n \n const allowed = isSenderAllowed({\n allow: effectiveGroupAllow,\n senderId,\n senderUsername,\n });\n \n if (!allowed) {\n return { allowed: false, reason: 'policy-blocked', groupPolicy };\n }\n }\n \n return { allowed: true, groupPolicy };\n}\n\n/**\n * Resolve group policy from config hierarchy\n */\nexport function resolveGroupPolicy(params: {\n topicConfig?: TelegramTopicConfig;\n groupConfig?: TelegramGroupConfig;\n accountGroupPolicy?: GroupPolicy;\n defaultGroupPolicy?: GroupPolicy;\n}): GroupPolicy {\n // Priority: topic > group > account > default\n return (\n params.topicConfig?.groupPolicy ??\n params.groupConfig?.groupPolicy ??\n params.accountGroupPolicy ??\n params.defaultGroupPolicy ??\n 'open'\n );\n}\n\n/**\n * Resolve requireMention from config hierarchy\n */\nexport function resolveRequireMention(params: {\n topicConfig?: TelegramTopicConfig;\n groupConfig?: TelegramGroupConfig;\n defaultRequireMention?: boolean;\n}): boolean {\n return (\n params.topicConfig?.requireMention ??\n params.groupConfig?.requireMention ??\n params.defaultRequireMention ??\n true\n );\n}\n\n// ============================================\n// Mention Detection\n// ============================================\n\n/**\n * Build mention regexes for bot username\n */\nexport function buildMentionRegex(botUsername: string): RegExp {\n const escaped = botUsername.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(`@${escaped}`, 'i');\n}\n\n/**\n * Check if message has bot mention (text or entity)\n */\nexport function hasBotMention(params: {\n botUsername: string;\n text?: string;\n entities?: Array<{ type: string; offset: number; length: number }>;\n}): boolean {\n const { botUsername, text = '', entities = [] } = params;\n const botUsernameLower = botUsername.toLowerCase();\n const textLower = text.toLowerCase();\n \n // Check text mention\n if (textLower.includes(`@${botUsernameLower}`)) {\n return true;\n }\n \n // Check entity mentions\n for (const ent of entities) {\n if (ent.type === 'mention') {\n const mentionText = text.slice(ent.offset, ent.offset + ent.length);\n if (mentionText.toLowerCase() === `@${botUsernameLower}`) {\n return true;\n }\n }\n }\n \n return false;\n}\n\n/**\n * Remove bot mention from text\n */\nexport function removeBotMention(text: string, botUsername: string): string {\n const botUsernameLower = botUsername.toLowerCase();\n return text.replace(new RegExp(`@${botUsernameLower}\\\\s*`, 'gi'), '').trim();\n}\n"],"mappings":";;;;AAsBA,SAAgB,mBAAmB,MAAoD;CACrF,MAAM,WAAW,QAAQ,EAAE,EAAE,KAAK,UAAU,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,QAAQ;CACjF,MAAM,cAAc,QAAQ,SAAS,IAAI;CAIzC,MAAM,MAHa,QAChB,QAAQ,UAAU,UAAU,IAAI,CAChC,KAAK,UAAU,MAAM,QAAQ,oBAAoB,GAAG,CACjC,CAAC,QAAQ,UAAU,QAAQ,KAAK,MAAM,CAAC;AAE7D,QAAO;EACL,SAAS;EACT;EACA,YAAY,IAAI,SAAS;EAC1B;;;;;AAMH,SAAgB,4BAA4B,QAGpB;AAOtB,QAAO,mBANU,CACf,GAAI,OAAO,aAAa,EAAE,EAC1B,GAAI,OAAO,kBAAkB,EAAE,CAChC,CACE,KAAK,UAAU,OAAO,MAAM,CAAC,MAAM,CAAC,CACpC,OAAO,QACwB,CAAC;;;;;AAMrC,SAAgB,gBAAgB,QAIpB;CACV,MAAM,EAAE,OAAO,aAAa;AAG5B,KAAI,CAAC,MAAM,WACT,QAAO;AAIT,KAAI,MAAM,YACR,QAAO;AAIT,KAAI,YAAY,MAAM,QAAQ,SAAS,SAAS,CAC9C,QAAO;AAGT,QAAO;;;;;AAMT,SAAgB,wBAAwB,QAIrB;CACjB,MAAM,EAAE,OAAO,aAAa;AAE5B,KAAI,MAAM,YACR,QAAO;EAAE,SAAS;EAAM,UAAU;EAAK,aAAa;EAAY;AAGlE,KAAI,CAAC,MAAM,WACT,QAAO,EAAE,SAAS,OAAO;AAG3B,KAAI,YAAY,MAAM,QAAQ,SAAS,SAAS,CAC9C,QAAO;EAAE,SAAS;EAAM,UAAU;EAAU,aAAa;EAAM;AAGjE,QAAO,EAAE,SAAS,OAAO;;;;;AAU3B,SAAgB,wBAAwB,QAQlB;AAEpB,KAAI,CAAC,OAAO,QACV,QAAO,EAAE,SAAS,MAAM;AAI1B,KAAI,OAAO,aAAa,YAAY,MAClC,QAAO;EAAE,SAAS;EAAO,QAAQ;EAAkB;AAIrD,KAAI,OAAO,aAAa,YAAY,MAClC,QAAO;EAAE,SAAS;EAAO,QAAQ;EAAkB;AAIrD,KAAI,OAAO,uBAAuB;EAChC,MAAM,WAAW,OAAO,YAAY;AACpC,MAAI,CAAC,SACH,QAAO;GAAE,SAAS;GAAO,QAAQ;GAAgB;AASnD,MAAI,CANY,gBAAgB;GAC9B,OAAO,OAAO;GACd;GACA,gBAAgB,OAAO;GACxB,CAEW,CACV,QAAO;GAAE,SAAS;GAAO,QAAQ;GAAgB;;AAIrD,QAAO,EAAE,SAAS,MAAM;;;;;AAM1B,SAAgB,0BAA0B,QAMpB;CACpB,MAAM,EAAE,SAAS,aAAa,qBAAqB,UAAU,mBAAmB;AAGhF,KAAI,CAAC,QACH,QAAO;EAAE,SAAS;EAAM;EAAa;AAIvC,KAAI,gBAAgB,WAClB,QAAO;EAAE,SAAS;EAAO,QAAQ;EAAkB;EAAa;AAIlE,KAAI,gBAAgB,OAClB,QAAO;EAAE,SAAS;EAAM;EAAa;AAIvC,KAAI,gBAAgB,aAAa;AAC/B,MAAI,CAAC,oBAAoB,cAAc,CAAC,oBAAoB,YAC1D,QAAO;GAAE,SAAS;GAAO,QAAQ;GAAkB;GAAa;AASlE,MAAI,CANY,gBAAgB;GAC9B,OAAO;GACP;GACA;GACD,CAEW,CACV,QAAO;GAAE,SAAS;GAAO,QAAQ;GAAkB;GAAa;;AAIpE,QAAO;EAAE,SAAS;EAAM;EAAa;;;;;AAMvC,SAAgB,mBAAmB,QAKnB;AAEd,QACE,OAAO,aAAa,eACpB,OAAO,aAAa,eACpB,OAAO,sBACP,OAAO,sBACP;;;;;AAOJ,SAAgB,sBAAsB,QAI1B;AACV,QACE,OAAO,aAAa,kBACpB,OAAO,aAAa,kBACpB,OAAO,yBACP;;;;;AAWJ,SAAgB,kBAAkB,aAA6B;CAC7D,MAAM,UAAU,YAAY,QAAQ,uBAAuB,OAAO;AAClE,QAAO,IAAI,OAAO,IAAI,WAAW,IAAI;;;;;AAMvC,SAAgB,cAAc,QAIlB;CACV,MAAM,EAAE,aAAa,OAAO,IAAI,WAAW,EAAE,KAAK;CAClD,MAAM,mBAAmB,YAAY,aAAa;AAIlD,KAHkB,KAAK,aAGV,CAAC,SAAS,IAAI,mBAAmB,CAC5C,QAAO;AAIT,MAAK,MAAM,OAAO,SAChB,KAAI,IAAI,SAAS;MACK,KAAK,MAAM,IAAI,QAAQ,IAAI,SAAS,IAAI,OAC7C,CAAC,aAAa,KAAK,IAAI,mBACpC,QAAO;;AAKb,QAAO;;;;;AAMT,SAAgB,iBAAiB,MAAc,aAA6B;CAC1E,MAAM,mBAAmB,YAAY,aAAa;AAClD,QAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,iBAAiB,OAAO,KAAK,EAAE,GAAG,CAAC,MAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"account-manager.js","names":[],"sources":["../../../../extensions/telegram/src/account-manager.ts"],"sourcesContent":["/**\n * Telegram Account Manager\n *\n * Manages multiple Telegram bot accounts, including:\n * - Account configuration storage\n * - Bot instance management\n * - Runner lifecycle\n * - Status tracking\n * - Bot username mapping\n */\n\nimport type { Bot, Context } from 'grammy';\nimport type { ChannelStatus } from '@xopcai/xopc/channels/channel-domain.js';\nimport type { TelegramPollingSession } from './polling-session.js';\nimport type { TelegramAccountConfig } from './config-types.js';\n\nexport class TelegramAccountManager {\n private accounts = new Map<string, TelegramAccountConfig>();\n private bots = new Map<string, Bot>();\n private pollingSessions = new Map<string, TelegramPollingSession>();\n private statuses = new Map<string, ChannelStatus>();\n private botUsernames = new Map<string, string>();\n private startingAccounts = new Set<string>();\n\n registerAccount(account: TelegramAccountConfig): void {\n this.accounts.set(account.accountId, account);\n this.statuses.set(account.accountId, {\n accountId: account.accountId,\n running: false,\n mode: 'stopped',\n });\n }\n\n getAccount(accountId: string): TelegramAccountConfig | undefined {\n return this.accounts.get(accountId);\n }\n\n getAllAccounts(): TelegramAccountConfig[] {\n return Array.from(this.accounts.values());\n }\n\n /** Clear all accounts and runtime state (used when reloading channel config). */\n reset(): void {\n this.accounts.clear();\n this.bots.clear();\n this.pollingSessions.clear();\n this.statuses.clear();\n this.botUsernames.clear();\n this.startingAccounts.clear();\n }\n\n registerBot(accountId: string, bot: Bot): void {\n this.bots.set(accountId, bot);\n }\n\n getBot(accountId: string): Bot | undefined {\n return this.bots.get(accountId);\n }\n\n registerPollingSession(accountId: string, session: TelegramPollingSession): void {\n this.pollingSessions.set(accountId, session);\n }\n\n async stopRunner(accountId: string): Promise<void> {\n const session = this.pollingSessions.get(accountId);\n const bot = this.bots.get(accountId);\n\n if (session) {\n await session.stop();\n this.pollingSessions.delete(accountId);\n }\n\n if (bot) {\n bot.stop();\n this.bots.delete(accountId);\n }\n \n this.startingAccounts.delete(accountId);\n \n // Update status to stopped\n this.updateStatus({\n accountId,\n running: false,\n mode: 'stopped',\n });\n }\n\n isStarting(accountId: string): boolean {\n return this.startingAccounts.has(accountId);\n }\n\n markStarting(accountId: string): void {\n this.startingAccounts.add(accountId);\n }\n\n markStartComplete(accountId: string): void {\n this.startingAccounts.delete(accountId);\n }\n\n isRunning(accountId: string): boolean {\n const status = this.statuses.get(accountId);\n return status?.running ?? false;\n }\n\n updateStatus(status: ChannelStatus): void {\n this.statuses.set(status.accountId, status);\n }\n\n getStatus(accountId: string): ChannelStatus | undefined {\n return this.statuses.get(accountId);\n }\n\n setBotUsername(accountId: string, username: string): void {\n this.botUsernames.set(accountId, username);\n }\n\n getBotUsername(accountId: string): string | undefined {\n return this.botUsernames.get(accountId);\n }\n\n /** Map the bot handling this update to a configured account id (session keys must match inbound). */\n resolveAccountIdFromContext(ctx: Context): string {\n const botId = ctx.me?.id;\n if (botId == null) {\n const accounts = this.getAllAccounts();\n return accounts[0]?.accountId ?? 'default';\n }\n for (const [accountId, bot] of this.bots) {\n if (bot.botInfo?.id === botId) return accountId;\n }\n const accounts = this.getAllAccounts();\n if (accounts.length === 1) return accounts[0]!.accountId;\n return 'default';\n }\n}\n"],"mappings":";AAgBA,IAAa,yBAAb,MAAoC;CAClC,2BAAmB,IAAI,KAAoC;CAC3D,uBAAe,IAAI,KAAkB;CACrC,kCAA0B,IAAI,KAAqC;CACnE,2BAAmB,IAAI,KAA4B;CACnD,+BAAuB,IAAI,KAAqB;CAChD,mCAA2B,IAAI,KAAa;CAE5C,gBAAgB,SAAsC;AACpD,OAAK,SAAS,IAAI,QAAQ,WAAW,QAAQ;AAC7C,OAAK,SAAS,IAAI,QAAQ,WAAW;GACnC,WAAW,QAAQ;GACnB,SAAS;GACT,MAAM;GACP,CAAC;;CAGJ,WAAW,WAAsD;AAC/D,SAAO,KAAK,SAAS,IAAI,UAAU;;CAGrC,iBAA0C;AACxC,SAAO,MAAM,KAAK,KAAK,SAAS,QAAQ,CAAC;;;CAI3C,QAAc;AACZ,OAAK,SAAS,OAAO;AACrB,OAAK,KAAK,OAAO;AACjB,OAAK,gBAAgB,OAAO;AAC5B,OAAK,SAAS,OAAO;AACrB,OAAK,aAAa,OAAO;AACzB,OAAK,iBAAiB,OAAO;;CAG/B,YAAY,WAAmB,KAAgB;AAC7C,OAAK,KAAK,IAAI,WAAW,IAAI;;CAG/B,OAAO,WAAoC;AACzC,SAAO,KAAK,KAAK,IAAI,UAAU;;CAGjC,uBAAuB,WAAmB,SAAuC;AAC/E,OAAK,gBAAgB,IAAI,WAAW,QAAQ;;CAG9C,MAAM,WAAW,WAAkC;EACjD,MAAM,UAAU,KAAK,gBAAgB,IAAI,UAAU;EACnD,MAAM,MAAM,KAAK,KAAK,IAAI,UAAU;AAEpC,MAAI,SAAS;AACX,SAAM,QAAQ,MAAM;AACpB,QAAK,gBAAgB,OAAO,UAAU;;AAGxC,MAAI,KAAK;AACP,OAAI,MAAM;AACV,QAAK,KAAK,OAAO,UAAU;;AAG7B,OAAK,iBAAiB,OAAO,UAAU;AAGvC,OAAK,aAAa;GAChB;GACA,SAAS;GACT,MAAM;GACP,CAAC;;CAGJ,WAAW,WAA4B;AACrC,SAAO,KAAK,iBAAiB,IAAI,UAAU;;CAG7C,aAAa,WAAyB;AACpC,OAAK,iBAAiB,IAAI,UAAU;;CAGtC,kBAAkB,WAAyB;AACzC,OAAK,iBAAiB,OAAO,UAAU;;CAGzC,UAAU,WAA4B;AAEpC,SADe,KAAK,SAAS,IAAI,UACpB,EAAE,WAAW;;CAG5B,aAAa,QAA6B;AACxC,OAAK,SAAS,IAAI,OAAO,WAAW,OAAO;;CAG7C,UAAU,WAA8C;AACtD,SAAO,KAAK,SAAS,IAAI,UAAU;;CAGrC,eAAe,WAAmB,UAAwB;AACxD,OAAK,aAAa,IAAI,WAAW,SAAS;;CAG5C,eAAe,WAAuC;AACpD,SAAO,KAAK,aAAa,IAAI,UAAU;;;CAIzC,4BAA4B,KAAsB;EAChD,MAAM,QAAQ,IAAI,IAAI;AACtB,MAAI,SAAS,KAEX,QADiB,KAAK,gBACP,CAAC,IAAI,aAAa;AAEnC,OAAK,MAAM,CAAC,WAAW,QAAQ,KAAK,KAClC,KAAI,IAAI,SAAS,OAAO,MAAO,QAAO;EAExC,MAAM,WAAW,KAAK,gBAAgB;AACtC,MAAI,SAAS,WAAW,EAAG,QAAO,SAAS,GAAI;AAC/C,SAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-actions.js","names":[],"sources":["../../../../../extensions/telegram/src/actions/message-actions.ts"],"sourcesContent":["import type { ChannelMessageActionContext } from '@xopcai/xopc/channels/plugin-types.js';\nimport type { TelegramAccountManager } from '../account-manager.js';\nimport {\n telegramDeleteMessage,\n telegramEditMessage,\n telegramSendPoll,\n telegramSetReaction,\n} from '../telegram-actions.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\n\nconst log = createLogger('TelegramMessageActions');\n\nlet accountManagerRef: TelegramAccountManager | null = null;\n\nexport function bindTelegramMessageActionAccountManager(manager: TelegramAccountManager): void {\n accountManagerRef = manager;\n}\n\nexport async function handleTelegramChannelAction(ctx: ChannelMessageActionContext): Promise<void> {\n const manager = accountManagerRef;\n if (!manager) {\n log.warn('Telegram message actions: account manager not bound');\n return;\n }\n\n const bot = manager.getBot(ctx.accountId);\n if (!bot) {\n log.warn({ accountId: ctx.accountId }, 'Telegram message actions: bot unavailable');\n return;\n }\n\n const messageId = Number.parseInt(ctx.messageId, 10);\n if (!Number.isFinite(messageId)) {\n return;\n }\n\n switch (ctx.action) {\n case 'react': {\n const emoji = ctx.data?.trim() || '👍';\n await telegramSetReaction({ bot, chatId: ctx.chatId, messageId, emoji });\n break;\n }\n case 'edit': {\n const text = ctx.data?.trim();\n if (text) {\n await telegramEditMessage({ bot, chatId: ctx.chatId, messageId, text });\n }\n break;\n }\n case 'delete':\n await telegramDeleteMessage({ bot, chatId: ctx.chatId, messageId });\n break;\n case 'poll': {\n try {\n const parsed = JSON.parse(ctx.data) as { question?: string; options?: string[] };\n if (parsed.question && Array.isArray(parsed.options) && parsed.options.length >= 2) {\n await telegramSendPoll({\n bot,\n chatId: ctx.chatId,\n question: parsed.question,\n options: parsed.options.slice(0, 10),\n });\n }\n } catch {\n log.warn({ dataPreview: ctx.data.slice(0, 80) }, 'Invalid poll action payload');\n }\n break;\n }\n default:\n log.debug({ action: ctx.action }, 'Unhandled Telegram message action');\n }\n}\n"],"mappings":";;;;aAQ4D;AAE5D,MAAM,MAAM,aAAa,yBAAyB;AAElD,IAAI,oBAAmD;AAEvD,SAAgB,wCAAwC,SAAuC;AAC7F,qBAAoB;;AAGtB,eAAsB,4BAA4B,KAAiD;CACjG,MAAM,UAAU;AAChB,KAAI,CAAC,SAAS;AACZ,MAAI,KAAK,sDAAsD;AAC/D;;CAGF,MAAM,MAAM,QAAQ,OAAO,IAAI,UAAU;AACzC,KAAI,CAAC,KAAK;AACR,MAAI,KAAK,EAAE,WAAW,IAAI,WAAW,EAAE,4CAA4C;AACnF;;CAGF,MAAM,YAAY,OAAO,SAAS,IAAI,WAAW,GAAG;AACpD,KAAI,CAAC,OAAO,SAAS,UAAU,CAC7B;AAGF,SAAQ,IAAI,QAAZ;EACE,KAAK,SAAS;GACZ,MAAM,QAAQ,IAAI,MAAM,MAAM,IAAI;AAClC,SAAM,oBAAoB;IAAE;IAAK,QAAQ,IAAI;IAAQ;IAAW;IAAO,CAAC;AACxE;;EAEF,KAAK,QAAQ;GACX,MAAM,OAAO,IAAI,MAAM,MAAM;AAC7B,OAAI,KACF,OAAM,oBAAoB;IAAE;IAAK,QAAQ,IAAI;IAAQ;IAAW;IAAM,CAAC;AAEzE;;EAEF,KAAK;AACH,SAAM,sBAAsB;IAAE;IAAK,QAAQ,IAAI;IAAQ;IAAW,CAAC;AACnE;EACF,KAAK;AACH,OAAI;IACF,MAAM,SAAS,KAAK,MAAM,IAAI,KAAK;AACnC,QAAI,OAAO,YAAY,MAAM,QAAQ,OAAO,QAAQ,IAAI,OAAO,QAAQ,UAAU,EAC/E,OAAM,iBAAiB;KACrB;KACA,QAAQ,IAAI;KACZ,UAAU,OAAO;KACjB,SAAS,OAAO,QAAQ,MAAM,GAAG,GAAG;KACrC,CAAC;WAEE;AACN,QAAI,KAAK,EAAE,aAAa,IAAI,KAAK,MAAM,GAAG,GAAG,EAAE,EAAE,8BAA8B;;AAEjF;EAEF,QACE,KAAI,MAAM,EAAE,QAAQ,IAAI,QAAQ,EAAE,oCAAoC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command-adapter.js","names":[],"sources":["../../../../../extensions/telegram/src/adapters/command-adapter.ts"],"sourcesContent":["import type { ChannelCommandAdapter, ChannelCommandSpec } from '@xopcai/xopc/channels/plugin-types.js';\n\n/**\n * Declarative list of BotFather-style commands handled in `command-handler.ts` / `plugin.ts` message routing.\n */\nexport function createTelegramCommandAdapter(): ChannelCommandAdapter {\n return {\n listCommands(): ChannelCommandSpec[] {\n return [\n { name: '/start', description: 'Start or show main menu', acceptsArgs: false },\n { name: '/models', description: 'Choose LLM model', acceptsArgs: false },\n { name: '/cleanup', description: 'Reset session context', acceptsArgs: false },\n ];\n },\n };\n}\n"],"mappings":";;;;AAKA,SAAgB,+BAAsD;AACpE,QAAO,EACL,eAAqC;AACnC,SAAO;GACL;IAAE,MAAM;IAAU,aAAa;IAA2B,aAAa;IAAO;GAC9E;IAAE,MAAM;IAAW,aAAa;IAAoB,aAAa;IAAO;GACxE;IAAE,MAAM;IAAY,aAAa;IAAyB,aAAa;IAAO;GAC/E;IAEJ"}
|