@xopcai/xopc 0.0.149 → 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-B4s0ipx2.js → activity-store-B3YP7y9d.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BSccACje.js → agent-avatar-dicebear-BaP05tRU.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-DZDOcgz5.js → agents-QArUBYV7.js} +1 -1
- package/dist/gateway/static/root/assets/{api-BMdUsNCV.js → api-BirUfJgj.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-DrLGhYkI.js → app-management-settings-panel-D5Cg_a6I.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-BNasnY9D.js → appearance-settings-BBsAkJ56.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-Cmr-Hvm9.js → apps-page-D1uAUndU.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-BQ17IK9x.js → archive-plugin-D3OmrvFx.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-HXvgWHXu.js → attachment-load-Cgkm_5mb.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-CjIWpsch.js → automation-suggestion-card-CHvxSz-t.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-TWgUAI8t.js → automations-page-BWQk03Vu.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-DifWJzNZ.js → binary-plugins-dJR5UuzL.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DtRzIkPU.js → block-editor-v4_7o92L.js} +2 -2
- package/dist/gateway/static/root/assets/{browser-settings-page-DBsFItW_.js → browser-settings-page-SruFGuBP.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-api-DazKjWW1.js → capability-presets-api-BcTjPLiD.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-settings-panel-Cvrw4fD1.js → capability-presets-settings-panel-CddBf58y.js} +1 -1
- package/dist/gateway/static/root/assets/{channel-recipient-api-Bea6if_6.js → channel-recipient-api-BbDlMRm5.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-BBkzrBYy.js → channels-settings-WI5tQ5tn.js} +1 -1
- package/dist/gateway/static/root/assets/channels-status-swr-Dt2EROlf.js +1 -0
- package/dist/gateway/static/root/assets/{connector-logo-BjbYbJjQ.js → connector-logo-BNthqff-.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-page-DLsZCAw7.js → connectors-page-DavHJ6rR.js} +1 -1
- 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-C8zZNUzC.js → directory-picker-path-field-BdWd7m-p.js} +1 -1
- package/dist/gateway/static/root/assets/{dreaming-settings-gJSw7Adk.js → dreaming-settings-CXDhu3Me.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DFE5ADJ0.js → extension-debug-page-CLJTGozU.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CfR-aW8G.js → extension-page-ClxpGfzA.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CFIEbs2L.js → extension-settings-page-CDA3ZJ8k.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-B6M_ra8U.js → gateway-config-api-DpXL78pS.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-BrxzyVW2.js → gateway-settings-Co-mXFP_.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DNA3OOzV.js → gateway-startup-retry-D0SU7dte.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-create-dialog-DRVRLc5Z.js → goal-create-dialog-BO6G--Ec.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-detail-page-8F7NElzP.js → goal-detail-page-DK8eog4h.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-config-api-D88opgcs.js → goals-config-api-r71aDqix.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-page-BaoLiV8G.js → goals-page-AcROW97U.js} +2 -2
- package/dist/gateway/static/root/assets/{goals-settings-D07UL8Jo.js → goals-settings-CZOLhkTH.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-YCSNOcXC.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-CH7XN6KY.js → index-IPmCli0N.js} +41 -41
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BHnh5OoY.js → keyboard-shortcuts-settings-B3CUVfZ8.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-Boe8n4zH.js → local-app-workbench-page-HVq6NUvQ.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-CKvtLzsF.js → local-apps-page-n7YJfRkU.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-BneNAR8R.js → locale-store-BvcHGPHU.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-Cb4Uptct.js → logs-page-Dgko6r04.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-split-BVSFG99p.js → markdown-split-1mnXr-JA.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DdOjIVk3.js → media-plugins-D2bcxXrT.js} +1 -1
- package/dist/gateway/static/root/assets/{messages-t1yPaVCt.js → messages-BH7paqYt.js} +2 -2
- package/dist/gateway/static/root/assets/{models-hub-panel-CNiUKZUV.js → models-hub-panel-DD0cEfmR.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-ZbLR3awn.js → notes-page-Wjc2utlj.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-workbench-C9__VkD6.js → notes-workbench-BkA2yg9K.js} +2 -2
- package/dist/gateway/static/root/assets/{page-tabs-DMlQERNg.js → page-tabs-vdljrKuG.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-CbiJRPxK.js → preview-open-alternatives-BHki0l-E.js} +1 -1
- package/dist/gateway/static/root/assets/{project-detail-page-CZhuB5kO.js → project-detail-page-CXwVNLgg.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-BOq4WVdR.js → projects-page-DlfvNcLh.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-BxGq0ebQ.js → remote-access-hub-BQyEX2Ui.js} +1 -1
- package/dist/gateway/static/root/assets/{save-bar-controls-BZTj3hxl.js → save-bar-controls-Vy4EmvEh.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-CxYDObjT.js → schedule-field-CVcwC7k_.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-CBbXgpKQ.js → schema-form-DhMA1vkR.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-B6gSU_Au.js → sessions-page-CqQEW8oT.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-M8fleFSc.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-BySKZ8rp.js → settings-collapsible-section-C0xcL0vB.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-CjINay6t.js → settings-form-section-Cgj4iVpx.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-vitElc-n.js → settings-loading-skeleton-CC_NmD69.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-BNrVwuL7.js → settings-page-B7_JZ2rM.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-HdlQOOqp.js → settings-page-layout-CKuQT4SG.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-BJeA4mmk.js → setup-status-panel-DvR8Y5YN.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-DC-eQONB.js → share-preview-page-BmVw-6SJ.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-DB2KYA2_.js → shares-settings-C0JYYhGx.js} +1 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DBFBczqN.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-Pm0fNe_p.js → skills-page-KAI9qBDD.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-CVa90q2f.js → system-settings-panel-D6d8VAk8.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-D1cOpgsy.js → theme-store-EbMQ3TYi.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-DIKF9vpz.js → typed-models-lib-D63hJX-S.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-DnvpI0Ys.js → use-channel-catalog-D-I-qki9.js} +1 -1
- package/dist/gateway/static/root/assets/{user-context-page-DnLqQyRG.js → user-context-page-Cuft-EbR.js} +1 -1
- package/dist/gateway/static/root/assets/{user-profile-fields-editor-y8gTmkPX.js → user-profile-fields-editor-CPaoS8Zl.js} +1 -1
- package/dist/gateway/static/root/assets/{user-profile-settings-panel-C3pvqe28.js → user-profile-settings-panel-Bs13qcx1.js} +1 -1
- package/dist/gateway/static/root/assets/{utils-BK2vwu_3.js → utils-3mnkFvPw.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-BiFIIWC4.js → voice-api-key-field-C716UEi9.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-page-D2-_bC0J.js → work-discovery-page-CFSkHa0v.js} +1 -1
- package/dist/gateway/static/root/assets/{work-item-detail-page-B0FPG4eJ.js → work-item-detail-page-DaapBdoZ.js} +1 -1
- package/dist/gateway/static/root/assets/{work-page-BDeVxts_.js → work-page-DMtX92vs.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BPzS67fU.js → workflow-run-setup-panel-B9FnZNWZ.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-xPhmrRLs.js → workflows-page-BgvE0_Iv.js} +1 -1
- 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 +0 -2
- package/dist/src/cli/commands/doctor/checks/gateway-health.js +0 -2
- package/dist/src/cli/commands/doctor/checks/gateway-service.js +0 -2
- package/dist/src/cli/commands/doctor/checks/migrations.js +0 -2
- package/dist/src/cli/commands/doctor/checks/node-version.js +0 -2
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +0 -2
- package/dist/src/cli/commands/doctor/checks/security-audit.js +0 -2
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +0 -2
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +0 -2
- package/dist/src/cli/commands/doctor/checks/version-check.js +0 -2
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +0 -2
- package/dist/src/cli/commands/doctor/flow.js +0 -2
- package/dist/src/cli/commands/doctor/format.js +0 -2
- package/dist/src/cli/commands/doctor/index.js +0 -2
- package/dist/src/cli/commands/extension-create.js +0 -2
- package/dist/src/cli/commands/extension-dev.js +0 -2
- package/dist/src/cli/commands/extension-marketplace.js +0 -2
- package/dist/src/cli/commands/extension-pack.js +0 -2
- package/dist/src/cli/commands/extension.js +0 -2
- package/dist/src/cli/commands/gateway/call.js +0 -2
- package/dist/src/cli/commands/gateway/health.js +0 -2
- package/dist/src/cli/commands/gateway/lifecycle-core.js +0 -2
- package/dist/src/cli/commands/gateway/lifecycle.js +0 -2
- package/dist/src/cli/commands/gateway/logs.js +0 -2
- package/dist/src/cli/commands/gateway/probe.js +0 -2
- package/dist/src/cli/commands/gateway/restart-health.js +0 -2
- package/dist/src/cli/commands/gateway/restart.js +0 -2
- package/dist/src/cli/commands/gateway/run-foreground.js +0 -2
- package/dist/src/cli/commands/gateway/service.js +0 -2
- package/dist/src/cli/commands/gateway/shared.js +0 -2
- package/dist/src/cli/commands/gateway/status.js +0 -2
- package/dist/src/cli/commands/gateway/stop.js +0 -2
- package/dist/src/cli/commands/gateway/subcommands.js +0 -2
- package/dist/src/cli/commands/gateway/token.js +0 -2
- package/dist/src/cli/commands/gateway-ssh-tunnel.js +0 -2
- package/dist/src/cli/commands/gateway.js +0 -2
- package/dist/src/cli/commands/goal.js +0 -2
- package/dist/src/cli/commands/image.js +0 -2
- package/dist/src/cli/commands/init.js +0 -2
- package/dist/src/cli/commands/logs.js +0 -2
- package/dist/src/cli/commands/models.js +0 -2
- package/dist/src/cli/commands/onboard/channels/index.js +0 -2
- package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js +0 -2
- package/dist/src/cli/commands/onboard/channels/registry.js +0 -2
- package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js +0 -2
- package/dist/src/cli/commands/onboard/gateway.js +0 -2
- package/dist/src/cli/commands/onboard/model.js +0 -2
- package/dist/src/cli/commands/onboard.js +0 -2
- package/dist/src/cli/commands/profile.js +0 -2
- package/dist/src/cli/commands/project.js +0 -2
- package/dist/src/cli/commands/providers.js +0 -2
- package/dist/src/cli/commands/resume.js +0 -2
- package/dist/src/cli/commands/search.js +0 -2
- package/dist/src/cli/commands/session/actions.js +0 -2
- package/dist/src/cli/commands/session/utils.js +0 -2
- package/dist/src/cli/commands/session.js +0 -2
- package/dist/src/cli/commands/setup-shared/output.js +0 -2
- package/dist/src/cli/commands/setup-shared/prompts.js +0 -2
- package/dist/src/cli/commands/setup-shared/runner.js +0 -2
- package/dist/src/cli/commands/setup-shared/types.js +0 -2
- package/dist/src/cli/commands/setup.js +0 -2
- package/dist/src/cli/commands/skills-test.js +0 -2
- package/dist/src/cli/commands/skills.js +0 -2
- package/dist/src/cli/commands/tailscale.js +0 -2
- package/dist/src/cli/commands/tui-runner.js +0 -2
- package/dist/src/cli/commands/tui.js +0 -2
- package/dist/src/cli/commands/tunnel.js +0 -2
- package/dist/src/cli/commands/update.js +0 -2
- package/dist/src/cli/commands/voice.js +0 -2
- package/dist/src/cli/context.js +0 -2
- package/dist/src/cli/extension-cli-register.js +0 -2
- package/dist/src/cli/gateway-run-argv.js +0 -2
- package/dist/src/cli/gateway-run-fast-path.js +0 -2
- package/dist/src/cli/index.js +0 -2
- package/dist/src/cli/registry.js +0 -2
- package/dist/src/cli/templates.js +0 -2
- package/dist/src/cli/utils/colors.js +0 -2
- package/dist/src/cli/utils/gateway-client-options.js +0 -2
- package/dist/src/cli/utils/gateway-client.js +0 -2
- package/dist/src/cli/utils/init-workspace-core.js +0 -2
- package/dist/src/cli/utils/init-workspace.js +0 -2
- package/dist/src/cli/utils/oauth-login.js +0 -2
- package/dist/src/cli/utils/oauth-providers.js +0 -2
- package/dist/src/cli/utils/session.js +0 -2
- package/dist/src/commands/agents.config.js +0 -2
- package/dist/src/config/agent-profile.js +0 -2
- package/dist/src/config/agent-typed-models.js +0 -2
- package/dist/src/config/commands.flags.js +0 -2
- package/dist/src/config/default-model.js +0 -2
- package/dist/src/config/diff.js +0 -2
- package/dist/src/config/gateway-bind.js +0 -2
- package/dist/src/config/index.js +0 -2
- package/dist/src/config/loader.js +0 -2
- package/dist/src/config/mcp-config-normalize.js +0 -2
- package/dist/src/config/model-input.js +0 -2
- package/dist/src/config/models-json.js +0 -2
- package/dist/src/config/paths-state.js +0 -2
- package/dist/src/config/paths.js +0 -2
- package/dist/src/config/profile.js +0 -2
- package/dist/src/config/public-url.js +0 -2
- package/dist/src/config/reload.js +0 -2
- package/dist/src/config/resolve-config-value.js +0 -2
- package/dist/src/config/rules.js +0 -2
- package/dist/src/config/runtime-overrides.js +0 -2
- package/dist/src/config/schema.js +0 -2
- package/dist/src/config/validate-channel-configs.js +0 -2
- package/dist/src/config/voice.js +0 -2
- package/dist/src/config/web-patch.js +0 -2
- package/dist/src/config/workspace-defaults.js +0 -2
- package/dist/src/config/workspace-dirs.js +0 -2
- package/dist/src/config/workspace-path-helpers.js +0 -2
- package/dist/src/config/workspace-path.js +0 -2
- package/dist/src/connectors/approval.js +0 -2
- package/dist/src/connectors/auth-provider-registry.js +0 -2
- package/dist/src/connectors/builtin-catalog.js +0 -2
- package/dist/src/connectors/catalog.js +0 -2
- package/dist/src/connectors/composio-catalog.js +0 -2
- package/dist/src/connectors/composio-logo.js +0 -2
- package/dist/src/connectors/composio-sessions.js +9 -5
- package/dist/src/connectors/composio-triggers.js +0 -2
- package/dist/src/connectors/composio.js +0 -2
- package/dist/src/connectors/connector-memory-sync.js +0 -2
- package/dist/src/connectors/health.js +0 -2
- package/dist/src/connectors/install.js +0 -2
- package/dist/src/connectors/instances.js +0 -2
- package/dist/src/connectors/integration-strategy.js +0 -2
- package/dist/src/connectors/lifecycle.js +0 -2
- package/dist/src/connectors/materialize.js +0 -2
- package/dist/src/connectors/policy.js +0 -2
- package/dist/src/connectors/providers.js +0 -2
- package/dist/src/connectors/registries/modelscope.js +0 -2
- package/dist/src/connectors/registries/official-mcp.js +0 -2
- package/dist/src/connectors/registries/search.js +0 -2
- package/dist/src/connectors/registries/smithery.js +0 -2
- package/dist/src/connectors/runtime-adapter-registry.js +0 -2
- package/dist/src/connectors/secret-store.js +0 -2
- package/dist/src/connectors/setup-secrets.js +0 -2
- package/dist/src/connectors/supervisor.js +0 -2
- package/dist/src/connectors/usage.js +0 -2
- package/dist/src/connectors/workflow-preflight.js +0 -2
- package/dist/src/daemon/constants.js +0 -2
- package/dist/src/daemon/install-plan.js +0 -2
- package/dist/src/daemon/launchd.js +0 -2
- package/dist/src/daemon/schtasks.js +0 -2
- package/dist/src/daemon/service-audit.js +0 -2
- package/dist/src/daemon/service.js +0 -2
- package/dist/src/daemon/systemd.js +0 -2
- package/dist/src/document-understanding/extract.js +0 -2
- package/dist/src/errors/index.js +0 -2
- package/dist/src/extensions/activation-context.js +0 -2
- package/dist/src/extensions/activation-planner.js +0 -2
- package/dist/src/extensions/api.js +0 -2
- package/dist/src/extensions/bundle-mcp.js +0 -2
- package/dist/src/extensions/bundled-extension-activation.js +0 -2
- package/dist/src/extensions/diagnostics.js +0 -2
- package/dist/src/extensions/discover-extensions.js +0 -2
- package/dist/src/extensions/engine-check.js +0 -2
- package/dist/src/extensions/extension-metadata-snapshot.js +0 -2
- package/dist/src/extensions/extension-registry-impl.js +0 -2
- package/dist/src/extensions/health.js +0 -2
- package/dist/src/extensions/hooks.js +0 -2
- package/dist/src/extensions/index.js +0 -2
- package/dist/src/extensions/install-transaction.js +0 -2
- package/dist/src/extensions/install.js +0 -2
- package/dist/src/extensions/loader.js +0 -2
- package/dist/src/extensions/lockfile.js +0 -2
- package/dist/src/extensions/manifest-registry.js +0 -2
- package/dist/src/extensions/marketplace.js +0 -2
- package/dist/src/extensions/media-provider-contracts.js +0 -2
- package/dist/src/extensions/normalize-manifest.js +0 -2
- package/dist/src/extensions/onboard-helpers.js +0 -2
- package/dist/src/extensions/package-contract.js +0 -2
- package/dist/src/extensions/sdk/channel-entry.js +0 -2
- package/dist/src/extensions/sdk/channel-helpers.js +0 -2
- package/dist/src/extensions/sdk/index.js +0 -2
- package/dist/src/extensions/sdk/lazy.js +0 -2
- package/dist/src/extensions/sdk/testing.js +0 -2
- package/dist/src/extensions/security.js +0 -2
- package/dist/src/extensions/slots.js +0 -2
- package/dist/src/extensions/speech-provider-contracts.js +0 -2
- package/dist/src/extensions/store-zip-limits.js +0 -2
- package/dist/src/extensions/typed-event-bus.js +0 -2
- package/dist/src/extensions/types/hooks.js +0 -2
- package/dist/src/extensions/types/providers.js +0 -2
- package/dist/src/extensions/update.js +0 -2
- package/dist/src/extensions/when-context.js +0 -2
- package/dist/src/extensions/when-expression.js +0 -2
- package/dist/src/gateway/agent-builtin-tools.js +0 -2
- package/dist/src/gateway/agent-run-relay.js +0 -2
- package/dist/src/gateway/agents-admin.js +0 -2
- package/dist/src/gateway/auth.js +0 -2
- package/dist/src/gateway/capability-presets-admin.js +0 -2
- package/dist/src/gateway/chat-limits.js +0 -2
- package/dist/src/gateway/chat-stream/mapper.js +28 -14
- package/dist/src/gateway/chat-stream/pet-feedback.d.ts +13 -0
- package/dist/src/gateway/chat-stream/pet-feedback.js +45 -0
- package/dist/src/gateway/chat-stream/protocol.d.ts +26 -0
- package/dist/src/gateway/clarify-bridge.js +3 -3
- package/dist/src/gateway/clarify-runtime.js +0 -2
- package/dist/src/gateway/client-ip.js +0 -2
- package/dist/src/gateway/config-tools-web.js +0 -2
- package/dist/src/gateway/credential.js +0 -2
- package/dist/src/gateway/discovery/mdns.js +0 -2
- package/dist/src/gateway/dreaming-automation-reconciler.js +0 -2
- package/dist/src/gateway/ensure-network-cors.js +0 -2
- package/dist/src/gateway/file-path-classifier.js +0 -2
- package/dist/src/gateway/file-reference-registry.js +0 -2
- package/dist/src/gateway/global-defaults-admin.js +0 -2
- package/dist/src/gateway/heartbeat/service.js +0 -2
- package/dist/src/gateway/hono/app.js +0 -2
- package/dist/src/gateway/hono/lib/agent-model.js +0 -2
- package/dist/src/gateway/hono/lib/config-payload.js +0 -2
- package/dist/src/gateway/hono/lib/extension-assets.js +0 -2
- package/dist/src/gateway/hono/lib/extension-store.js +0 -2
- package/dist/src/gateway/hono/lib/mask-secret-length.js +0 -2
- package/dist/src/gateway/hono/lib/route-logger.js +0 -2
- package/dist/src/gateway/hono/lib/safe-providers-config.js +0 -2
- package/dist/src/gateway/hono/lib/safe-voice-config.js +0 -2
- package/dist/src/gateway/hono/lib/startup-unavailable.js +0 -2
- package/dist/src/gateway/hono/lib/static-ui.js +0 -2
- package/dist/src/gateway/hono/middleware/auth.js +0 -2
- package/dist/src/gateway/hono/middleware/log-context.js +0 -2
- package/dist/src/gateway/hono/middleware/logger.js +0 -2
- package/dist/src/gateway/hono/middleware/route-errors.js +0 -2
- package/dist/src/gateway/hono/middleware/scopes.js +0 -2
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js +0 -2
- package/dist/src/gateway/hono/oauth-async.js +0 -2
- package/dist/src/gateway/hono/oauth.js +0 -2
- package/dist/src/gateway/hono/routes/activity.js +0 -2
- package/dist/src/gateway/hono/routes/agent-stream.js +0 -2
- package/dist/src/gateway/hono/routes/agents.js +0 -2
- package/dist/src/gateway/hono/routes/ai-assist.js +0 -2
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +0 -2
- package/dist/src/gateway/hono/routes/browser-install.js +0 -2
- package/dist/src/gateway/hono/routes/browser.js +0 -2
- package/dist/src/gateway/hono/routes/capabilities.js +0 -2
- package/dist/src/gateway/hono/routes/capability-presets.js +0 -2
- package/dist/src/gateway/hono/routes/channels.js +0 -2
- package/dist/src/gateway/hono/routes/commands-skills.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/agents.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/misc.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/result.js +0 -2
- package/dist/src/gateway/hono/routes/config.js +0 -2
- package/dist/src/gateway/hono/routes/connectors.js +0 -2
- package/dist/src/gateway/hono/routes/doctor.js +0 -2
- package/dist/src/gateway/hono/routes/dreaming.js +0 -2
- package/dist/src/gateway/hono/routes/exposure.js +0 -2
- package/dist/src/gateway/hono/routes/extension-gateway.js +0 -2
- package/dist/src/gateway/hono/routes/global-defaults.js +0 -2
- package/dist/src/gateway/hono/routes/goals.js +0 -2
- package/dist/src/gateway/hono/routes/home.js +0 -2
- package/dist/src/gateway/hono/routes/host-fs.js +0 -2
- package/dist/src/gateway/hono/routes/index.js +0 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -2
- package/dist/src/gateway/hono/routes/lazy-fallback.js +0 -2
- package/dist/src/gateway/hono/routes/local-apps.js +0 -2
- package/dist/src/gateway/hono/routes/logs.js +0 -2
- package/dist/src/gateway/hono/routes/mcp.js +0 -2
- package/dist/src/gateway/hono/routes/media.js +0 -2
- package/dist/src/gateway/hono/routes/memory.js +0 -2
- package/dist/src/gateway/hono/routes/migrations.js +0 -2
- package/dist/src/gateway/hono/routes/mobile.js +0 -2
- package/dist/src/gateway/hono/routes/models.js +0 -2
- package/dist/src/gateway/hono/routes/notes.js +3 -3
- package/dist/src/gateway/hono/routes/projects.js +0 -2
- package/dist/src/gateway/hono/routes/public-gateway.js +0 -2
- package/dist/src/gateway/hono/routes/search.js +0 -2
- package/dist/src/gateway/hono/routes/sessions.js +0 -2
- package/dist/src/gateway/hono/routes/shares.js +0 -2
- package/dist/src/gateway/hono/routes/site-shares.js +0 -2
- package/dist/src/gateway/hono/routes/status.js +0 -2
- package/dist/src/gateway/hono/routes/tui.js +0 -2
- package/dist/src/gateway/hono/routes/tunnel.js +0 -2
- package/dist/src/gateway/hono/routes/update.js +0 -2
- package/dist/src/gateway/hono/routes/voice.js +0 -2
- package/dist/src/gateway/hono/routes/work-discovery.js +0 -2
- package/dist/src/gateway/hono/routes/workflows.js +0 -2
- package/dist/src/gateway/hono/routes/workspace.js +0 -2
- package/dist/src/gateway/hono/routes/you.js +0 -2
- package/dist/src/gateway/hono/sse-json.js +0 -2
- package/dist/src/gateway/hono/sse.js +0 -2
- package/dist/src/gateway/host.js +0 -2
- package/dist/src/gateway/image-capabilities.js +0 -2
- package/dist/src/gateway/listen.js +0 -2
- package/dist/src/gateway/lock.js +0 -2
- package/dist/src/gateway/ports.js +0 -2
- package/dist/src/gateway/protocol.js +0 -2
- package/dist/src/gateway/public-url.js +0 -2
- package/dist/src/gateway/rate-limit/auth-policy.js +0 -2
- package/dist/src/gateway/rate-limit/buckets.js +0 -2
- package/dist/src/gateway/rate-limit/env-flags.js +0 -2
- package/dist/src/gateway/resolve-channel-connect-defer.js +0 -2
- package/dist/src/gateway/resolve-webchat-session-key.js +0 -2
- package/dist/src/gateway/respawn.js +0 -2
- package/dist/src/gateway/run-loop.js +0 -2
- package/dist/src/gateway/runtime-config.js +0 -2
- package/dist/src/gateway/security/audit.js +0 -2
- package/dist/src/gateway/security/csp.js +0 -2
- package/dist/src/gateway/security/dangerous-tools.js +0 -2
- package/dist/src/gateway/security/external-content.js +0 -2
- package/dist/src/gateway/security/known-weak-secrets.js +0 -2
- package/dist/src/gateway/security/loopback.js +0 -2
- package/dist/src/gateway/security/operator-scopes.js +0 -2
- package/dist/src/gateway/security/origin-check.js +0 -2
- package/dist/src/gateway/security/preauth-connection-budget.js +0 -2
- package/dist/src/gateway/security/secret-equal.js +0 -2
- package/dist/src/gateway/server-tailscale.js +0 -2
- package/dist/src/gateway/server.js +0 -2
- package/dist/src/gateway/service/agent-runner.js +0 -2
- package/dist/src/gateway/service/config-coordinator.js +0 -2
- package/dist/src/gateway/service/marketplace-service.js +0 -2
- package/dist/src/gateway/service/run-gateway-agent.js +0 -2
- package/dist/src/gateway/service/session-chat-ids.js +0 -2
- package/dist/src/gateway/service/sessions-api.js +0 -2
- package/dist/src/gateway/service/sse-hub.js +0 -2
- package/dist/src/gateway/service.js +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/discover.js +0 -2
- package/dist/src/storage/sqlite/migrations/errors.js +0 -2
- package/dist/src/storage/sqlite/migrations/runner.js +0 -2
- package/dist/src/storage/sqlite/note-agent-context-repository.js +0 -2
- package/dist/src/storage/sqlite/notes-repository.js +0 -2
- package/dist/src/storage/sqlite/paths.js +0 -2
- package/dist/src/storage/sqlite/row-mappers.js +0 -2
- package/dist/src/storage/sqlite/schema-version.js +0 -2
- package/dist/src/storage/sqlite/schema.js +0 -2
- package/dist/src/storage/sqlite/session-metadata.js +0 -2
- package/dist/src/storage/sqlite/session-repository.js +0 -2
- package/dist/src/storage/sqlite/transaction.js +0 -2
- package/dist/src/storage/sqlite/transcript-repository.js +0 -2
- package/dist/src/storage/sqlite/user-profile-setup-repository.js +0 -2
- package/dist/src/storage/sqlite/user-trust-repository.js +0 -2
- package/dist/src/tui/backends/embedded-backend.js +0 -2
- package/dist/src/tui/backends/gateway-sse-backend.js +0 -2
- package/dist/src/tui/chat-history.js +0 -2
- package/dist/src/tui/clipboard-image.js +0 -2
- package/dist/src/tui/clipboard-text.js +0 -2
- package/dist/src/tui/components/assistant-message.js +0 -2
- package/dist/src/tui/components/bash-execution.js +0 -2
- package/dist/src/tui/components/bash-summary.js +0 -2
- package/dist/src/tui/components/branch-message-summary.js +0 -2
- package/dist/src/tui/components/branch-summary.js +0 -2
- package/dist/src/tui/components/chat-log.js +0 -2
- package/dist/src/tui/components/compaction-summary.js +0 -2
- package/dist/src/tui/components/custom-editor.js +0 -2
- package/dist/src/tui/components/custom-message.js +0 -2
- package/dist/src/tui/components/dynamic-border.js +0 -2
- package/dist/src/tui/components/extension-dialog.js +0 -2
- package/dist/src/tui/components/fuzzy-filter.js +0 -2
- package/dist/src/tui/components/scoped-models-selector.js +0 -2
- package/dist/src/tui/components/searchable-select-list.js +0 -2
- package/dist/src/tui/components/session-selector.js +0 -2
- package/dist/src/tui/components/settings-selector.js +0 -2
- package/dist/src/tui/components/thinking-selector.js +0 -2
- package/dist/src/tui/components/tool-execution.js +0 -2
- package/dist/src/tui/components/tui-bottom-bar.js +0 -2
- package/dist/src/tui/components/tui-header.js +0 -2
- package/dist/src/tui/components/user-message.js +0 -2
- package/dist/src/tui/components/visual-truncate.js +0 -2
- package/dist/src/tui/extension-host/autocomplete.js +0 -2
- package/dist/src/tui/extension-host/host.js +0 -2
- package/dist/src/tui/extension-host/load-extensions.js +0 -2
- package/dist/src/tui/extension-host/runtime-context.js +0 -2
- package/dist/src/tui/extension-host/runtime.js +0 -2
- package/dist/src/tui/extension-host/surface.js +0 -2
- package/dist/src/tui/extension-host/tool-renderers.js +0 -2
- package/dist/src/tui/format-tui-hotkeys.js +0 -2
- package/dist/src/tui/sse-consumer.js +0 -2
- package/dist/src/tui/theme/dark.js +0 -2
- package/dist/src/tui/theme/light.js +0 -2
- package/dist/src/tui/theme-manager.js +0 -2
- package/dist/src/tui/theme.js +0 -2
- package/dist/src/tui/tool-summary.js +0 -2
- package/dist/src/tui/tui-agent-events.js +0 -2
- package/dist/src/tui/tui-command-formatters.js +0 -2
- package/dist/src/tui/tui-commands.js +0 -2
- package/dist/src/tui/tui-context-usage.js +0 -2
- package/dist/src/tui/tui-extension-user-message.js +0 -2
- package/dist/src/tui/tui-fd-path.js +0 -2
- package/dist/src/tui/tui-file-autocomplete.js +0 -2
- package/dist/src/tui/tui-follow-up-queue.js +0 -2
- package/dist/src/tui/tui-git-branch.js +0 -2
- package/dist/src/tui/tui-keybindings-file.js +0 -2
- package/dist/src/tui/tui-lifecycle.js +0 -2
- package/dist/src/tui/tui-local-shell.js +0 -2
- package/dist/src/tui/tui-model-picker.js +0 -2
- package/dist/src/tui/tui-oauth-login.js +0 -2
- package/dist/src/tui/tui-overlays.js +0 -2
- package/dist/src/tui/tui-picker-overlay.js +0 -2
- package/dist/src/tui/tui-run-state.js +0 -2
- package/dist/src/tui/tui-run-status-format.js +0 -2
- package/dist/src/tui/tui-runtime-hints.js +0 -2
- package/dist/src/tui/tui-scoped-models.js +0 -2
- package/dist/src/tui/tui-session-actions.js +0 -2
- package/dist/src/tui/tui-session-format.js +0 -2
- package/dist/src/tui/tui-session-snapshot.js +0 -2
- package/dist/src/tui/tui-session-stats.js +0 -2
- package/dist/src/tui/tui-settings.js +0 -2
- package/dist/src/tui/tui-skills-autocomplete.js +0 -2
- package/dist/src/tui/tui-startup-resources.js +0 -2
- package/dist/src/tui/tui-startup-text.js +0 -2
- package/dist/src/tui/tui-stdio-filter.js +0 -2
- package/dist/src/tui/tui-submit.js +0 -2
- package/dist/src/tui/tui-suspend.js +0 -2
- package/dist/src/tui/tui-timeline-picker.js +0 -2
- package/dist/src/tui/tui-timeline.js +0 -2
- package/dist/src/tui/tui-tool-diff.js +0 -2
- package/dist/src/tui/tui-tool-result.js +0 -2
- package/dist/src/tui/tui-transcript-tree-picker.js +0 -2
- package/dist/src/tui/tui-transcript-tree.js +0 -2
- package/dist/src/tui/tui-types.js +0 -2
- package/dist/src/tui/tui-workflow-slash.js +0 -2
- package/dist/src/tui/tui.js +0 -2
- package/dist/src/tui/xopc-tui-keybindings.js +0 -2
- package/dist/src/tunnel/broker-client.js +0 -2
- package/dist/src/tunnel/consent.js +0 -2
- package/dist/src/tunnel/enable-lan-pairing.js +0 -2
- package/dist/src/tunnel/env.js +0 -2
- package/dist/src/tunnel/frp-subdomain-host.js +0 -2
- package/dist/src/tunnel/frpc-binary.js +0 -2
- package/dist/src/tunnel/frpc-config.js +0 -2
- package/dist/src/tunnel/frpc-extract.js +0 -2
- package/dist/src/tunnel/frpc-process.js +0 -2
- package/dist/src/tunnel/gateway-lifecycle.js +0 -2
- package/dist/src/tunnel/pair-context.js +0 -2
- package/dist/src/tunnel/pair-url.js +0 -2
- package/dist/src/tunnel/pairing-rate-limit.js +0 -2
- package/dist/src/tunnel/pairing.js +0 -2
- package/dist/src/tunnel/tunnel-audit.js +0 -2
- package/dist/src/tunnel/tunnel-config.js +0 -2
- package/dist/src/tunnel/tunnel-persist.js +0 -2
- package/dist/src/tunnel/tunnel-qr.js +0 -2
- package/dist/src/tunnel/tunnel-rate-limit.js +0 -2
- package/dist/src/tunnel/tunnel-service.js +0 -2
- package/dist/src/tunnel/tunnel-state.js +0 -2
- package/dist/src/tunnel/well-known.js +0 -2
- package/dist/src/user-context/config.js +0 -2
- package/dist/src/user-context/import.js +0 -2
- package/dist/src/user-context/owner.js +0 -2
- package/dist/src/user-context/profile.js +0 -2
- package/dist/src/user-context/projection.js +0 -2
- package/dist/src/user-context/runtime.js +0 -2
- package/dist/src/user-context/source-recommendations.js +0 -2
- package/dist/src/user-context/trust-policy.js +0 -2
- package/dist/src/utils/global-singleton.js +0 -2
- package/dist/src/utils/helpers.js +0 -2
- package/dist/src/utils/index.js +0 -2
- package/dist/src/utils/is-record.js +0 -2
- package/dist/src/utils/logger/audit.js +0 -2
- package/dist/src/utils/logger/config.js +0 -2
- package/dist/src/utils/logger/context.js +0 -2
- package/dist/src/utils/logger/exporters.js +0 -2
- package/dist/src/utils/logger/index.js +0 -2
- package/dist/src/utils/logger/log-store.js +0 -2
- package/dist/src/utils/logger/log-stream.js +0 -2
- package/dist/src/utils/logger/pino-record.js +0 -2
- package/dist/src/utils/logger/redact.js +0 -2
- package/dist/src/utils/logger/rotation.js +0 -2
- package/dist/src/utils/logger/shutdown.js +0 -2
- package/dist/src/utils/logger/stats.js +0 -2
- package/dist/src/utils/logger/streams.js +0 -2
- package/dist/src/utils/logger/types.js +0 -2
- package/dist/src/utils/logger.js +0 -2
- package/dist/src/utils/redact-sensitive-url.js +0 -2
- package/dist/src/utils/sanitize-log.js +0 -2
- package/dist/src/utils/string-coerce.js +0 -2
- package/dist/src/voice/language-profile.js +0 -2
- package/dist/src/voice/local/model-files.js +0 -2
- package/dist/src/voice/local/model-manager.js +0 -2
- package/dist/src/voice/local/models.js +0 -2
- package/dist/src/voice/local/runtime-client.js +0 -2
- package/dist/src/voice/local/runtime-dispatcher.js +0 -2
- package/dist/src/voice/local/runtime-worker.js +12 -4
- package/dist/src/voice/local/wav.js +0 -2
- package/dist/src/voice/metadata/builtin.js +0 -2
- package/dist/src/voice/metadata/registry.js +0 -2
- package/dist/src/voice/stt/availability.js +0 -2
- package/dist/src/voice/stt/config-slice.js +0 -2
- package/dist/src/voice/stt/factory.js +0 -2
- package/dist/src/voice/stt/index.js +0 -2
- package/dist/src/voice/stt/list-providers.js +0 -2
- package/dist/src/voice/stt/mention.js +0 -2
- package/dist/src/voice/stt/preflight.js +0 -2
- package/dist/src/voice/stt/providers/alibaba-transcription.js +0 -2
- package/dist/src/voice/stt/providers/local-transcription.js +0 -2
- package/dist/src/voice/stt/providers/openai-transcription.js +0 -2
- package/dist/src/voice/stt/transcribe-core.js +0 -2
- package/dist/src/voice/stt/types.js +0 -2
- package/dist/src/voice/tts/audio.js +0 -2
- package/dist/src/voice/tts/config-slice.js +0 -2
- package/dist/src/voice/tts/directives.js +0 -2
- package/dist/src/voice/tts/factory.js +0 -2
- package/dist/src/voice/tts/list-providers.js +0 -2
- package/dist/src/voice/tts/merge-config.js +0 -2
- package/dist/src/voice/tts/openai-compatible-speech.js +0 -2
- package/dist/src/voice/tts/payload.js +0 -2
- package/dist/src/voice/tts/preprocess.js +0 -2
- package/dist/src/voice/tts/providers/alibaba-speech.js +0 -2
- package/dist/src/voice/tts/providers/edge-speech.js +0 -2
- package/dist/src/voice/tts/providers/minimax-speech.js +0 -2
- package/dist/src/voice/tts/providers/openai-speech.js +0 -2
- package/dist/src/voice/tts/sentence-boundary.js +0 -2
- package/dist/src/voice/tts/service.js +0 -2
- package/dist/src/voice/tts/speak-core.js +0 -2
- package/dist/src/voice/tts/speech-registry.js +0 -2
- package/dist/src/voice/tts/status-tracker.js +0 -2
- package/dist/src/voice/tts/summarize.js +0 -2
- package/dist/src/voice/tts/types.js +0 -2
- package/dist/src/work-discovery/analyzer.js +0 -2
- package/dist/src/work-discovery/probe.js +0 -2
- package/dist/src/work-discovery/repository.js +0 -2
- package/dist/src/work-discovery/service.js +0 -2
- package/dist/src/work-items/agent-context.js +0 -2
- package/dist/src/work-items/work-item-service.js +0 -2
- package/dist/src/work-items/work-item-store.js +0 -2
- package/dist/src/work-items/work-item-workflow-judge.js +0 -2
- package/dist/src/workflows/authoring/workflow-draft-store.js +0 -2
- package/dist/src/workflows/domain/definition-utils.js +0 -2
- package/dist/src/workflows/domain/run.js +0 -2
- package/dist/src/workflows/domain/schema-validation.js +0 -2
- package/dist/src/workflows/domain/validation.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-prompt.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-service.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-validator.js +0 -2
- package/dist/src/workflows/engine/projector.js +0 -2
- package/dist/src/workflows/engine/workflow-engine.js +0 -2
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +0 -2
- package/dist/src/workflows/runtime/graph-workflow-runtime.js +0 -2
- package/dist/src/workflows/service/run-view-to-snapshot.js +0 -2
- package/dist/src/workflows/service/workflow-run-service.js +1 -3
- package/dist/src/workflows/service/workflow-session-bridge.js +0 -2
- package/dist/src/workflows/service/workflow-session-key.js +0 -2
- package/dist/src/workflows/store/event-store.js +0 -2
- package/dist/src/workflows/store/paths.js +0 -2
- package/dist/src/workflows/store/run-index-store.js +0 -2
- package/dist/src/workflows/store/run-store.js +0 -2
- package/package.json +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/channels-status-swr-CuU6ez3y.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-C6V-PHwi.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-5Fcz47XQ.js +0 -1
- package/dist/gateway/static/root/assets/index-Dfnl9tp_.css +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DwuBL834.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DQtZiejw.js +0 -1
- 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":"deadline.js","names":[],"sources":["../../../../src/media-shared/http/deadline.ts"],"sourcesContent":["/**\n * Deadline / timeout aggregation for provider HTTP calls.\n *\n * A \"deadline\" combines:\n * - per-call timeout (caller-supplied, ms)\n * - provider-default timeout (cfg.providers.<id>.request.timeoutMs, ms)\n * - upstream AbortSignal (e.g. agent cancellation)\n *\n * The effective timeout is the **smaller** of the per-call value and the\n * provider default; abort is propagated from upstream.\n */\n\nexport interface DeadlineInput {\n /** Per-call timeout (ms). Wins when smaller than {@link providerDefaultMs}. */\n timeoutMs?: number;\n /** Provider-default timeout (ms), e.g. from config. */\n providerDefaultMs?: number;\n /** Upstream cancellation. */\n signal?: AbortSignal;\n}\n\nexport interface ResolvedDeadline {\n /** Final timeout in ms, or undefined when neither side specified one. */\n timeoutMs: number | undefined;\n /** Combined AbortSignal that fires on timeout OR upstream abort. */\n signal: AbortSignal;\n /** Manual cleanup (clear timer, detach listener). Always safe to call. */\n cleanup: () => void;\n}\n\n/**\n * Pick the smallest *positive* timeout among the inputs.\n *\n * - Negative / zero / non-finite values are ignored.\n * - Returns undefined when no valid timeout is supplied.\n */\n/**\n * Effective positive timeout for outbound provider calls, or `fallbackMs` when\n * neither per-call nor provider-default timeouts are set.\n */\nexport function pickTimeoutMsOrFallback(\n timeoutMs: number | undefined,\n providerDefaultMs: number | undefined,\n fallbackMs: number,\n): number {\n return pickEffectiveTimeoutMs({ timeoutMs, providerDefaultMs }) ?? fallbackMs;\n}\n\nexport function pickEffectiveTimeoutMs(input: DeadlineInput): number | undefined {\n const candidates: number[] = [];\n if (typeof input.timeoutMs === 'number' && Number.isFinite(input.timeoutMs) && input.timeoutMs > 0) {\n candidates.push(input.timeoutMs);\n }\n if (\n typeof input.providerDefaultMs === 'number' &&\n Number.isFinite(input.providerDefaultMs) &&\n input.providerDefaultMs > 0\n ) {\n candidates.push(input.providerDefaultMs);\n }\n if (candidates.length === 0) return undefined;\n return Math.min(...candidates);\n}\n\n/**\n * Build a combined deadline.\n *\n * Always returns a fresh {@link AbortController} so that callers can pass\n * `signal` directly to `fetch()` without leaking listeners on long-lived\n * upstream signals.\n */\nexport function resolveDeadline(input: DeadlineInput): ResolvedDeadline {\n const controller = new AbortController();\n const timeoutMs = pickEffectiveTimeoutMs(input);\n const cleanups: Array<() => void> = [];\n\n if (timeoutMs !== undefined) {\n const timer = setTimeout(() => {\n controller.abort(new TimeoutAbortError(timeoutMs));\n }, timeoutMs);\n // Allow the Node process to exit even if a deadline is pending.\n if (typeof (timer as unknown as { unref?: () => void }).unref === 'function') {\n (timer as unknown as { unref: () => void }).unref();\n }\n cleanups.push(() => clearTimeout(timer));\n }\n\n const upstream = input.signal;\n if (upstream) {\n if (upstream.aborted) {\n controller.abort(upstream.reason);\n } else {\n const onAbort = () => controller.abort(upstream.reason);\n upstream.addEventListener('abort', onAbort, { once: true });\n cleanups.push(() => upstream.removeEventListener('abort', onAbort));\n }\n }\n\n return {\n timeoutMs,\n signal: controller.signal,\n cleanup: () => {\n for (const fn of cleanups) {\n try {\n fn();\n } catch {\n /* ignore */\n }\n }\n },\n };\n}\n\n/** Concrete error class so callers can distinguish deadline-aborts from upstream-aborts. */\nexport class TimeoutAbortError extends Error {\n readonly timeoutMs: number;\n constructor(timeoutMs: number) {\n super(`Provider HTTP call timed out after ${timeoutMs}ms`);\n this.name = 'TimeoutAbortError';\n this.timeoutMs = timeoutMs;\n }\n}\n\nexport function isTimeoutAbortError(e: unknown): e is TimeoutAbortError {\n return e instanceof TimeoutAbortError;\n}\n"],"mappings":";;;;;;;;;;;AAwCA,SAAgB,wBACd,WACA,mBACA,YACQ;AACR,QAAO,uBAAuB;EAAE;EAAW;EAAmB,CAAC,IAAI;;AAGrE,SAAgB,uBAAuB,OAA0C;CAC/E,MAAM,aAAuB,EAAE;AAC/B,KAAI,OAAO,MAAM,cAAc,YAAY,OAAO,SAAS,MAAM,UAAU,IAAI,MAAM,YAAY,EAC/F,YAAW,KAAK,MAAM,UAAU;AAElC,KACE,OAAO,MAAM,sBAAsB,YACnC,OAAO,SAAS,MAAM,kBAAkB,IACxC,MAAM,oBAAoB,EAE1B,YAAW,KAAK,MAAM,kBAAkB;AAE1C,KAAI,WAAW,WAAW,EAAG,QAAO,KAAA;AACpC,QAAO,KAAK,IAAI,GAAG,WAAW;;;;;;;;;AAUhC,SAAgB,gBAAgB,OAAwC;CACtE,MAAM,aAAa,IAAI,iBAAiB;CACxC,MAAM,YAAY,uBAAuB,MAAM;CAC/C,MAAM,WAA8B,EAAE;AAEtC,KAAI,cAAc,KAAA,GAAW;EAC3B,MAAM,QAAQ,iBAAiB;AAC7B,cAAW,MAAM,IAAI,kBAAkB,UAAU,CAAC;KACjD,UAAU;AAEb,MAAI,OAAQ,MAA4C,UAAU,WAC/D,OAA2C,OAAO;AAErD,WAAS,WAAW,aAAa,MAAM,CAAC;;CAG1C,MAAM,WAAW,MAAM;AACvB,KAAI,SACF,KAAI,SAAS,QACX,YAAW,MAAM,SAAS,OAAO;MAC5B;EACL,MAAM,gBAAgB,WAAW,MAAM,SAAS,OAAO;AACvD,WAAS,iBAAiB,SAAS,SAAS,EAAE,MAAM,MAAM,CAAC;AAC3D,WAAS,WAAW,SAAS,oBAAoB,SAAS,QAAQ,CAAC;;AAIvE,QAAO;EACL;EACA,QAAQ,WAAW;EACnB,eAAe;AACb,QAAK,MAAM,MAAM,SACf,KAAI;AACF,QAAI;WACE;;EAKb;;;AAIH,IAAa,oBAAb,cAAuC,MAAM;CAC3C;CACA,YAAY,WAAmB;AAC7B,QAAM,sCAAsC,UAAU,IAAI;AAC1D,OAAK,OAAO;AACZ,OAAK,YAAY;;;AAIrB,SAAgB,oBAAoB,GAAoC;AACtE,QAAO,aAAa"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"private-network.js","names":[],"sources":["../../../../src/media-shared/http/private-network.ts"],"sourcesContent":["/**\n * SSRF / private-network protection for provider HTTP calls.\n *\n * Provider URLs are mostly user-controllable (cfg.providers.<id>.baseUrl,\n * imageBaseUrl, etc.). Without a guard a malicious config could make xopc\n * fetch internal services (169.254.x.x metadata, 127.0.0.1, RFC1918, …).\n *\n * Policy:\n * - default: allow only http(s) + non-private hosts\n * - dev: allow loopback when XOPC_PROVIDER_HTTP_ALLOW_LOOPBACK=1\n * - test: same as dev; vitest sets NODE_ENV=test\n */\n\nimport { isIP } from 'node:net';\n\nimport type { SsrfGuardOptions } from './ssrf-guard.js';\n\nexport interface PrivateNetworkPolicy {\n /** Permit 127.0.0.0/8, ::1, localhost. Default false. */\n allowLoopback?: boolean;\n /** Permit RFC1918 / link-local / unique-local. Default false. */\n allowPrivate?: boolean;\n /** Extra explicit hostname allowlist (exact match). */\n allowHosts?: ReadonlyArray<string>;\n}\n\nexport class BlockedPrivateNetworkError extends Error {\n readonly url: string;\n readonly host: string;\n constructor(url: string, host: string, reason: string) {\n super(`Provider HTTP call blocked: ${reason} (host=${host}, url=${url})`);\n this.name = 'BlockedPrivateNetworkError';\n this.url = url;\n this.host = host;\n }\n}\n\n/** Map URL-layer private-network policy into SSRF guard options for `fetchWithTimeoutGuarded`. */\nexport function privateNetworkPolicyToSsrfGuardOptions(policy?: PrivateNetworkPolicy): SsrfGuardOptions {\n const p = policy === undefined ? defaultPolicy() : policy;\n return {\n allowPrivateNetwork: Boolean(p.allowPrivate || p.allowLoopback),\n hostnameAllowlist: p.allowHosts,\n };\n}\n\nexport function defaultPolicy(): PrivateNetworkPolicy {\n const env = process.env;\n const allowLoopback =\n env.XOPC_PROVIDER_HTTP_ALLOW_LOOPBACK === '1' ||\n env.XOPC_PROVIDER_HTTP_ALLOW_LOOPBACK === 'true' ||\n env.NODE_ENV === 'test';\n const allowPrivate =\n env.XOPC_PROVIDER_HTTP_ALLOW_PRIVATE === '1' || env.XOPC_PROVIDER_HTTP_ALLOW_PRIVATE === 'true';\n return { allowLoopback, allowPrivate };\n}\n\n/**\n * Throws {@link BlockedPrivateNetworkError} when the URL targets a private host\n * not permitted by the policy. Returns silently otherwise.\n *\n * Note: This is a best-effort guard at the URL layer. A truly hostile host\n * could still resolve a public name to a private IP via DNS rebinding; for\n * production deployments behind untrusted user input, also enforce egress\n * firewall rules.\n */\nexport function assertNotPrivateNetwork(rawUrl: string, policy: PrivateNetworkPolicy = defaultPolicy()): void {\n let url: URL;\n try {\n url = new URL(rawUrl);\n } catch {\n throw new BlockedPrivateNetworkError(rawUrl, '', 'invalid URL');\n }\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new BlockedPrivateNetworkError(rawUrl, url.hostname, `unsupported protocol \"${url.protocol}\"`);\n }\n\n const host = url.hostname.toLowerCase();\n if (policy.allowHosts?.includes(host)) return;\n\n const cls = classifyHost(host);\n switch (cls) {\n case 'public':\n return;\n case 'loopback':\n if (policy.allowLoopback) return;\n throw new BlockedPrivateNetworkError(rawUrl, host, 'loopback address');\n case 'private':\n if (policy.allowPrivate) return;\n throw new BlockedPrivateNetworkError(rawUrl, host, 'private address');\n case 'link-local':\n if (policy.allowPrivate) return;\n throw new BlockedPrivateNetworkError(rawUrl, host, 'link-local address');\n case 'invalid':\n throw new BlockedPrivateNetworkError(rawUrl, host, 'invalid host');\n }\n}\n\nexport type HostClass = 'public' | 'loopback' | 'private' | 'link-local' | 'invalid';\n\n/** Classify a hostname/IP literal. Hostnames are conservatively treated as `public`. */\nexport function classifyHost(host: string): HostClass {\n if (!host) return 'invalid';\n const lower = host.toLowerCase();\n if (lower === 'localhost' || lower.endsWith('.localhost')) return 'loopback';\n\n const ipKind = isIP(lower);\n if (ipKind === 0) {\n // Hostname; cannot cheaply resolve here, treat as public.\n return 'public';\n }\n if (ipKind === 4) return classifyIPv4(lower);\n return classifyIPv6(lower);\n}\n\nfunction classifyIPv4(ip: string): HostClass {\n const parts = ip.split('.').map((s) => Number.parseInt(s, 10));\n if (parts.length !== 4 || parts.some((n) => !Number.isInteger(n) || n < 0 || n > 255)) {\n return 'invalid';\n }\n const [a, b] = parts;\n if (a === 127) return 'loopback';\n if (a === 10) return 'private';\n if (a === 172 && b >= 16 && b <= 31) return 'private';\n if (a === 192 && b === 168) return 'private';\n if (a === 169 && b === 254) return 'link-local';\n if (a === 0) return 'invalid';\n if (a === 100 && b >= 64 && b <= 127) return 'private'; // CGNAT 100.64.0.0/10\n return 'public';\n}\n\nfunction classifyIPv6(ip: string): HostClass {\n const lower = ip.toLowerCase();\n if (lower === '::1') return 'loopback';\n if (lower === '::') return 'invalid';\n if (lower.startsWith('fe80:')) return 'link-local';\n if (lower.startsWith('fc') || lower.startsWith('fd')) return 'private'; // unique-local fc00::/7\n if (lower.startsWith('::ffff:')) {\n // IPv4-mapped\n const v4 = lower.slice('::ffff:'.length);\n if (isIP(v4) === 4) return classifyIPv4(v4);\n }\n return 'public';\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider-http-errors.js","names":[],"sources":["../../../../src/media-shared/http/provider-http-errors.ts"],"sourcesContent":["/**\n * Provider HTTP error formatting helpers.\n *\n * Ported from openclaw/src/agents/provider-http-errors.ts (commit baseline 2026-05-08).\n *\n * DECISION (per docs/voice-rearchitecture.md §6):\n * - Body read is hard-capped at 16 KiB to avoid memory blowups on misbehaving\n * providers that return huge HTML 5xx pages.\n * - Both `error.message` (OpenAI shape) and `error.detail` (DashScope shape) are\n * normalized into a single human-readable string for logs.\n * - Request id is taken from `x-request-id` first, then `request-id` (Alibaba uses\n * the latter on some endpoints).\n */\n\nconst DEFAULT_BODY_READ_LIMIT_BYTES = 16 * 1024;\nconst DEFAULT_DETAIL_TRUNCATION_LIMIT = 220;\n\nfunction asObject(value: unknown): Record<string, unknown> | undefined {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction trimToUndefined(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function truncateErrorDetail(detail: string, limit = DEFAULT_DETAIL_TRUNCATION_LIMIT): string {\n return detail.length <= limit ? detail : `${detail.slice(0, limit - 1)}…`;\n}\n\nexport async function readResponseTextLimited(\n response: Response,\n limitBytes: number = DEFAULT_BODY_READ_LIMIT_BYTES,\n): Promise<string> {\n if (limitBytes <= 0) {\n return '';\n }\n const reader = response.body?.getReader();\n if (!reader) {\n return '';\n }\n\n const decoder = new TextDecoder();\n let total = 0;\n let text = '';\n let reachedLimit = false;\n\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n break;\n }\n if (!value || value.byteLength === 0) {\n continue;\n }\n const remaining = limitBytes - total;\n if (remaining <= 0) {\n reachedLimit = true;\n break;\n }\n const chunk = value.byteLength > remaining ? value.subarray(0, remaining) : value;\n total += chunk.byteLength;\n text += decoder.decode(chunk, { stream: true });\n if (total >= limitBytes) {\n reachedLimit = true;\n break;\n }\n }\n text += decoder.decode();\n } finally {\n if (reachedLimit) {\n await reader.cancel().catch(() => {});\n }\n }\n\n return text;\n}\n\n/** Best-effort vendor `code` + human message from a JSON error body (image providers, failover). */\nexport function extractVendorErrorFields(body: string): { code?: string; message?: string } {\n if (!body) return {};\n let parsed: unknown;\n try {\n parsed = JSON.parse(body);\n } catch {\n return {};\n }\n if (!parsed || typeof parsed !== 'object') return {};\n const o = parsed as Record<string, unknown>;\n\n if (o.error && typeof o.error === 'object') {\n const e = o.error as Record<string, unknown>;\n const message = typeof e.message === 'string' ? e.message : undefined;\n const code = typeof e.code === 'string' ? e.code : typeof e.type === 'string' ? e.type : undefined;\n if (message || code) return { message, code };\n }\n\n if (typeof o.code === 'string' && typeof o.message === 'string') {\n return { code: o.code, message: o.message };\n }\n\n if (o.base_resp && typeof o.base_resp === 'object') {\n const br = o.base_resp as Record<string, unknown>;\n const sc = br.status_code;\n const sm = br.status_msg;\n if (typeof sm === 'string') {\n return {\n code: typeof sc === 'number' || typeof sc === 'string' ? String(sc) : undefined,\n message: sm,\n };\n }\n }\n\n if (typeof o.message === 'string') return { message: o.message };\n\n return {};\n}\n\nexport function formatProviderErrorPayload(payload: unknown): string | undefined {\n const root = asObject(payload);\n const detailObject = asObject(root?.detail);\n const subject = asObject(root?.error) ?? detailObject ?? root;\n if (!subject) {\n return undefined;\n }\n const message =\n trimToUndefined(subject.message) ??\n trimToUndefined(subject.detail) ??\n trimToUndefined(root?.message) ??\n trimToUndefined(root?.error) ??\n trimToUndefined(root?.detail);\n const type = trimToUndefined(subject.type);\n const code = trimToUndefined(subject.code) ?? trimToUndefined(subject.status);\n const metadata = [type ? `type=${type}` : undefined, code ? `code=${code}` : undefined]\n .filter((value): value is string => Boolean(value))\n .join(', ');\n if (message && metadata) {\n return `${truncateErrorDetail(message)} [${metadata}]`;\n }\n if (message) {\n return truncateErrorDetail(message);\n }\n if (metadata) {\n return `[${metadata}]`;\n }\n return undefined;\n}\n\nexport async function extractProviderErrorDetail(response: Response): Promise<string | undefined> {\n const rawBody = trimToUndefined(await readResponseTextLimited(response));\n if (!rawBody) {\n return undefined;\n }\n try {\n return formatProviderErrorPayload(JSON.parse(rawBody)) ?? truncateErrorDetail(rawBody);\n } catch {\n return truncateErrorDetail(rawBody);\n }\n}\n\nexport function extractProviderRequestId(response: Response): string | undefined {\n return (\n trimToUndefined(response.headers.get('x-request-id')) ??\n trimToUndefined(response.headers.get('request-id'))\n );\n}\n\nexport interface ProviderHttpErrorParts {\n label: string;\n status: number;\n detail?: string;\n requestId?: string;\n /** Prefix in front of the status code, e.g. \"HTTP \" for non-provider transports. */\n statusPrefix?: string;\n /** Vendor error code when JSON body could be parsed (OpenAI, DashScope, MiniMax, …). */\n code?: string;\n /** Request URL for diagnostics (image-generation assertOk path). */\n url?: string;\n /** Raw body preview for non-JSON failures (image-generation assertOk path). */\n bodyPreview?: string;\n /**\n * When set, used as {@link Error.message} verbatim instead of\n * {@link formatProviderHttpErrorMessage}.\n */\n messageOverride?: string;\n}\n\nexport function formatProviderHttpErrorMessage(parts: ProviderHttpErrorParts): string {\n if (parts.messageOverride) {\n return parts.messageOverride;\n }\n const { label, status, detail, requestId, statusPrefix = '', code } = parts;\n const codeSuffix = code ? ` [code=${code}]` : '';\n return (\n `${label} (${statusPrefix}${status})` +\n (detail ? `: ${detail}` : '') +\n codeSuffix +\n (requestId ? ` [request_id=${requestId}]` : '')\n );\n}\n\n/**\n * ProviderHttpError carries the parsed status / detail / requestId so callers\n * (e.g. STT runner, TTS fallback chain) can classify failures without re-parsing.\n */\nexport class ProviderHttpError extends Error {\n readonly status: number;\n readonly detail?: string;\n readonly requestId?: string;\n readonly label: string;\n readonly code?: string;\n readonly url?: string;\n readonly bodyPreview?: string;\n\n constructor(parts: ProviderHttpErrorParts) {\n super(formatProviderHttpErrorMessage(parts));\n this.name = 'ProviderHttpError';\n this.status = parts.status;\n this.detail = parts.detail;\n this.requestId = parts.requestId;\n this.label = parts.label;\n this.code = parts.code;\n this.url = parts.url;\n this.bodyPreview = parts.bodyPreview;\n }\n}\n\nexport async function createProviderHttpError(\n response: Response,\n label: string,\n options?: { statusPrefix?: string },\n): Promise<ProviderHttpError> {\n const rawBody = trimToUndefined(await readResponseTextLimited(response));\n const vendor = rawBody ? extractVendorErrorFields(rawBody) : {};\n let detail: string | undefined;\n if (rawBody) {\n try {\n detail = formatProviderErrorPayload(JSON.parse(rawBody)) ?? truncateErrorDetail(rawBody);\n } catch {\n detail = truncateErrorDetail(rawBody);\n }\n }\n const requestId = extractProviderRequestId(response);\n return new ProviderHttpError({\n label,\n status: response.status,\n detail,\n requestId,\n statusPrefix: options?.statusPrefix,\n code: vendor.code,\n });\n}\n\nexport async function assertOkOrThrowProviderError(response: Response, label: string): Promise<void> {\n if (response.ok) {\n return;\n }\n throw await createProviderHttpError(response, label);\n}\n\nexport async function assertOkOrThrowHttpError(response: Response, label: string): Promise<void> {\n if (response.ok) {\n return;\n }\n throw await createProviderHttpError(response, label, { statusPrefix: 'HTTP ' });\n}\n\n/**\n * Throws {@link ProviderHttpError} when the response is not OK; otherwise returns\n * the response. Body is consumed on failure (do not re-read).\n *\n * Used by bundled image-generation HTTP helpers (vendor code extraction + body preview).\n */\nexport async function assertOk(res: Response, contextUrl?: string): Promise<Response> {\n if (res.ok) return res;\n const url = contextUrl ?? res.url;\n const bodyPreview = trimToUndefined(await readResponseTextLimited(res));\n const { code, message } = extractVendorErrorFields(bodyPreview ?? '');\n const finalMessage = `Provider HTTP ${res.status} ${res.statusText}: ${\n message || bodyPreview || '(empty body)'\n }`;\n throw new ProviderHttpError({\n label: url,\n status: res.status,\n code,\n url,\n bodyPreview,\n detail: message,\n requestId: extractProviderRequestId(res),\n messageOverride: finalMessage,\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider-http.js","names":["setTimeoutPromise"],"sources":["../../../../src/media-shared/http/provider-http.ts"],"sourcesContent":["/**\n * Shared provider HTTP client (voice, STT/TTS, image-generation extensions).\n *\n * Wraps `globalThis.fetch` with SSRF guard (`assertSafeUrl`), timeout + signal\n * merge, and standardized errors via `assertOkOrThrowProviderError`.\n */\n\nimport { setTimeout as setTimeoutPromise } from 'node:timers/promises';\n\nimport { assertOkOrThrowProviderError } from './provider-http-errors.js';\nimport { assertSafeUrl, type SsrfGuardOptions } from './ssrf-guard.js';\n\nfunction mergeHeadersRecord(\n input?: Record<string, string> | Headers,\n): Record<string, string> {\n const out: Record<string, string> = {};\n if (!input) {\n return out;\n }\n if (input instanceof Headers) {\n input.forEach((value, key) => {\n out[key.toLowerCase()] = value;\n });\n return out;\n }\n for (const [k, v] of Object.entries(input)) {\n if (typeof v === 'string') {\n out[k.toLowerCase()] = v;\n }\n }\n return out;\n}\n\nexport interface ProviderHttpRequestConfig extends SsrfGuardOptions {\n /** Hard timeout in milliseconds. Required: callers must always specify. */\n timeoutMs: number;\n /** Extra abort signal (e.g. from caller cancellation). Merged with timeout signal. */\n signal?: AbortSignal;\n /**\n * Label used in thrown ProviderHttpError messages. Should look like\n * \"OpenAI TTS\", \"dashscope\", or \"Alibaba paraformer-v2 transcription\".\n */\n label: string;\n}\n\nexport interface FetchWithGuardOptions extends ProviderHttpRequestConfig {\n /** Pre-built RequestInit; URL is the first positional argument. */\n init?: RequestInit;\n}\n\n/**\n * fetch + SSRF guard + timeout. Returns the raw Response (caller decides whether\n * to assertOk / parse / stream). Throws SsrfBlockedError on guard failure.\n */\nexport async function fetchWithTimeoutGuarded(\n url: string | URL,\n options: FetchWithGuardOptions,\n): Promise<Response> {\n await assertSafeUrl(url, options);\n\n const controller = new AbortController();\n const timeoutHandle = setTimeout(() => controller.abort(), options.timeoutMs);\n\n const callerSignal = options.signal;\n if (callerSignal) {\n if (callerSignal.aborted) {\n controller.abort(callerSignal.reason);\n } else {\n callerSignal.addEventListener('abort', () => controller.abort(callerSignal.reason), {\n once: true,\n });\n }\n }\n\n try {\n return await fetch(url, { ...options.init, signal: controller.signal });\n } finally {\n clearTimeout(timeoutHandle);\n }\n}\n\nexport interface PostJsonRequestOptions extends ProviderHttpRequestConfig {\n body: unknown;\n headers?: Record<string, string> | Headers;\n}\n\nexport async function postJsonRequest(\n url: string | URL,\n options: PostJsonRequestOptions,\n): Promise<Response> {\n const headers = mergeHeadersRecord(options.headers);\n if (!headers['content-type']) {\n headers['content-type'] = 'application/json';\n }\n if (!headers.accept) {\n headers.accept = 'application/json';\n }\n const response = await fetchWithTimeoutGuarded(url, {\n ...options,\n init: {\n method: 'POST',\n headers,\n body: JSON.stringify(options.body),\n },\n });\n await assertOkOrThrowProviderError(response, options.label);\n return response;\n}\n\nexport interface PostMultipartRequestOptions extends ProviderHttpRequestConfig {\n body: FormData;\n headers?: Record<string, string> | Headers;\n}\n\nexport async function postMultipartRequest(\n url: string | URL,\n options: PostMultipartRequestOptions,\n): Promise<Response> {\n const headers = mergeHeadersRecord(options.headers);\n const response = await fetchWithTimeoutGuarded(url, {\n ...options,\n init: {\n method: 'POST',\n headers,\n body: options.body,\n },\n });\n await assertOkOrThrowProviderError(response, options.label);\n return response;\n}\n\nexport interface GetJsonRequestOptions extends ProviderHttpRequestConfig {\n headers?: Record<string, string> | Headers;\n}\n\nexport async function getJsonRequest(\n url: string | URL,\n options: GetJsonRequestOptions,\n): Promise<Response> {\n const headers = mergeHeadersRecord(options.headers);\n if (!headers.accept) {\n headers.accept = 'application/json';\n }\n const response = await fetchWithTimeoutGuarded(url, {\n ...options,\n init: { method: 'GET', headers },\n });\n await assertOkOrThrowProviderError(response, options.label);\n return response;\n}\n\n/**\n * Normalize a base URL: trim trailing slash, force http(s) scheme.\n */\nexport function normalizeBaseUrl(baseUrl: string): string {\n const trimmed = baseUrl.trim().replace(/\\/+$/, '');\n const parsed = new URL(trimmed);\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error(`Provider base URL must be http(s): \"${baseUrl}\"`);\n }\n return trimmed;\n}\n\nexport interface ProviderOperationDeadline {\n deadlineMs: number;\n assertNotExpired(): void;\n remainingMs(): number;\n}\n\nexport function createProviderOperationDeadline(timeoutMs: number): ProviderOperationDeadline {\n const deadlineMs = Date.now() + timeoutMs;\n return {\n deadlineMs,\n assertNotExpired() {\n if (Date.now() > deadlineMs) {\n throw new Error(`Provider operation exceeded ${timeoutMs}ms timeout`);\n }\n },\n remainingMs() {\n return Math.max(0, deadlineMs - Date.now());\n },\n };\n}\n\nexport async function waitProviderOperationPollInterval(\n intervalMs: number,\n signal?: AbortSignal,\n): Promise<void> {\n if (intervalMs <= 0) {\n return;\n }\n await setTimeoutPromise(intervalMs, undefined, { signal });\n}\n"],"mappings":";;;;;;;;;;AAYA,SAAS,mBACP,OACwB;CACxB,MAAM,MAA8B,EAAE;AACtC,KAAI,CAAC,MACH,QAAO;AAET,KAAI,iBAAiB,SAAS;AAC5B,QAAM,SAAS,OAAO,QAAQ;AAC5B,OAAI,IAAI,aAAa,IAAI;IACzB;AACF,SAAO;;AAET,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,MAAM,CACxC,KAAI,OAAO,MAAM,SACf,KAAI,EAAE,aAAa,IAAI;AAG3B,QAAO;;;;;;AAwBT,eAAsB,wBACpB,KACA,SACmB;AACnB,OAAM,cAAc,KAAK,QAAQ;CAEjC,MAAM,aAAa,IAAI,iBAAiB;CACxC,MAAM,gBAAgB,iBAAiB,WAAW,OAAO,EAAE,QAAQ,UAAU;CAE7E,MAAM,eAAe,QAAQ;AAC7B,KAAI,aACF,KAAI,aAAa,QACf,YAAW,MAAM,aAAa,OAAO;KAErC,cAAa,iBAAiB,eAAe,WAAW,MAAM,aAAa,OAAO,EAAE,EAClF,MAAM,MACP,CAAC;AAIN,KAAI;AACF,SAAO,MAAM,MAAM,KAAK;GAAE,GAAG,QAAQ;GAAM,QAAQ,WAAW;GAAQ,CAAC;WAC/D;AACR,eAAa,cAAc;;;AAS/B,eAAsB,gBACpB,KACA,SACmB;CACnB,MAAM,UAAU,mBAAmB,QAAQ,QAAQ;AACnD,KAAI,CAAC,QAAQ,gBACX,SAAQ,kBAAkB;AAE5B,KAAI,CAAC,QAAQ,OACX,SAAQ,SAAS;CAEnB,MAAM,WAAW,MAAM,wBAAwB,KAAK;EAClD,GAAG;EACH,MAAM;GACJ,QAAQ;GACR;GACA,MAAM,KAAK,UAAU,QAAQ,KAAK;GACnC;EACF,CAAC;AACF,OAAM,6BAA6B,UAAU,QAAQ,MAAM;AAC3D,QAAO;;AAQT,eAAsB,qBACpB,KACA,SACmB;CACnB,MAAM,UAAU,mBAAmB,QAAQ,QAAQ;CACnD,MAAM,WAAW,MAAM,wBAAwB,KAAK;EAClD,GAAG;EACH,MAAM;GACJ,QAAQ;GACR;GACA,MAAM,QAAQ;GACf;EACF,CAAC;AACF,OAAM,6BAA6B,UAAU,QAAQ,MAAM;AAC3D,QAAO;;AAOT,eAAsB,eACpB,KACA,SACmB;CACnB,MAAM,UAAU,mBAAmB,QAAQ,QAAQ;AACnD,KAAI,CAAC,QAAQ,OACX,SAAQ,SAAS;CAEnB,MAAM,WAAW,MAAM,wBAAwB,KAAK;EAClD,GAAG;EACH,MAAM;GAAE,QAAQ;GAAO;GAAS;EACjC,CAAC;AACF,OAAM,6BAA6B,UAAU,QAAQ,MAAM;AAC3D,QAAO;;;;;AAMT,SAAgB,iBAAiB,SAAyB;CACxD,MAAM,UAAU,QAAQ,MAAM,CAAC,QAAQ,QAAQ,GAAG;CAClD,MAAM,SAAS,IAAI,IAAI,QAAQ;AAC/B,KAAI,OAAO,aAAa,WAAW,OAAO,aAAa,SACrD,OAAM,IAAI,MAAM,uCAAuC,QAAQ,GAAG;AAEpE,QAAO;;AAST,SAAgB,gCAAgC,WAA8C;CAC5F,MAAM,aAAa,KAAK,KAAK,GAAG;AAChC,QAAO;EACL;EACA,mBAAmB;AACjB,OAAI,KAAK,KAAK,GAAG,WACf,OAAM,IAAI,MAAM,+BAA+B,UAAU,YAAY;;EAGzE,cAAc;AACZ,UAAO,KAAK,IAAI,GAAG,aAAa,KAAK,KAAK,CAAC;;EAE9C;;AAGH,eAAsB,kCACpB,YACA,QACe;AACf,KAAI,cAAc,EAChB;AAEF,OAAMA,aAAkB,YAAY,KAAA,GAAW,EAAE,QAAQ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-provider-http-request-config.js","names":[],"sources":["../../../../src/media-shared/http/resolve-provider-http-request-config.ts"],"sourcesContent":["/**\n * Resolve per-provider HTTP defaults from {@link Config}.\n *\n * Lookup order for `request.timeoutMs` and `request.headers`:\n * 1. cfg.providers.<id>.request.{timeoutMs|headers} (typed schema field — not yet present in Step 1)\n * 2. cfg.providers.<id>.{timeoutMs|headers} (loose / future)\n * 3. fallbacks supplied by caller\n *\n * In Step 1 the Zod schema does not yet declare these fields. We still parse\n * defensively from `unknown` so this module is forward-compatible: when Step 4\n * adds the schema fields, no consumer changes are needed.\n */\n\nimport type { Config } from '../../config/schema.js';\n\nexport interface ResolvedProviderHttpDefaults {\n /** Default per-call timeout in ms (provider-level), or undefined. */\n timeoutMs?: number;\n /** Default headers merged into every request. Lower-case keys recommended. */\n headers: Record<string, string>;\n}\n\nexport interface ResolveProviderHttpRequestConfigOptions {\n /** Provider id, e.g. \"openai\", \"dashscope\", \"minimax\". */\n providerId: string;\n /** Active xopc config (optional). */\n cfg?: Config;\n /** Built-in defaults (e.g. 60_000ms). Used only if config provides nothing. */\n fallbackTimeoutMs?: number;\n /** Built-in headers (e.g. User-Agent). Caller request headers still win. */\n fallbackHeaders?: Record<string, string>;\n}\n\nexport function resolveProviderHttpRequestConfig(\n options: ResolveProviderHttpRequestConfigOptions,\n): ResolvedProviderHttpDefaults {\n const provider = readProviderEntry(options.cfg, options.providerId);\n const request = readRequestEntry(provider);\n\n const timeoutMs =\n pickPositiveInt(request?.timeoutMs) ??\n pickPositiveInt(provider?.timeoutMs) ??\n pickPositiveInt(options.fallbackTimeoutMs);\n\n const headers: Record<string, string> = {};\n for (const src of [options.fallbackHeaders, provider?.headers, request?.headers]) {\n if (!src) continue;\n for (const [k, v] of Object.entries(src)) {\n if (typeof v === 'string' && v.length > 0) {\n headers[k] = v;\n }\n }\n }\n\n return { timeoutMs, headers };\n}\n\nfunction readProviderEntry(cfg: Config | undefined, id: string): LooseProviderEntry | undefined {\n // `cfg.providers` is not declared on the Zod schema yet; read defensively.\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>)[id];\n if (!entry || typeof entry !== 'object') return undefined;\n return entry as LooseProviderEntry;\n}\n\nfunction readRequestEntry(provider: LooseProviderEntry | undefined): LooseRequestEntry | undefined {\n if (!provider) return undefined;\n const request = provider.request;\n if (!request || typeof request !== 'object') return undefined;\n return request as LooseRequestEntry;\n}\n\nfunction pickPositiveInt(v: unknown): number | undefined {\n if (typeof v !== 'number' || !Number.isFinite(v) || v <= 0) return undefined;\n return Math.floor(v);\n}\n\ninterface LooseProviderEntry {\n apiKey?: unknown;\n baseUrl?: unknown;\n region?: unknown;\n headers?: Record<string, unknown>;\n timeoutMs?: unknown;\n request?: unknown;\n [k: string]: unknown;\n}\n\ninterface LooseRequestEntry {\n timeoutMs?: unknown;\n headers?: Record<string, unknown>;\n}\n"],"mappings":";AAiCA,SAAgB,iCACd,SAC8B;CAC9B,MAAM,WAAW,kBAAkB,QAAQ,KAAK,QAAQ,WAAW;CACnE,MAAM,UAAU,iBAAiB,SAAS;CAE1C,MAAM,YACJ,gBAAgB,SAAS,UAAU,IACnC,gBAAgB,UAAU,UAAU,IACpC,gBAAgB,QAAQ,kBAAkB;CAE5C,MAAM,UAAkC,EAAE;AAC1C,MAAK,MAAM,OAAO;EAAC,QAAQ;EAAiB,UAAU;EAAS,SAAS;EAAQ,EAAE;AAChF,MAAI,CAAC,IAAK;AACV,OAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,IAAI,CACtC,KAAI,OAAO,MAAM,YAAY,EAAE,SAAS,EACtC,SAAQ,KAAK;;AAKnB,QAAO;EAAE;EAAW;EAAS;;AAG/B,SAAS,kBAAkB,KAAyB,IAA4C;CAE9F,MAAM,YAAa,KAAwE;AAC3F,KAAI,CAAC,aAAa,OAAO,cAAc,SAAU,QAAO,KAAA;CACxD,MAAM,QAAS,UAAsC;AACrD,KAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO,KAAA;AAChD,QAAO;;AAGT,SAAS,iBAAiB,UAAyE;AACjG,KAAI,CAAC,SAAU,QAAO,KAAA;CACtB,MAAM,UAAU,SAAS;AACzB,KAAI,CAAC,WAAW,OAAO,YAAY,SAAU,QAAO,KAAA;AACpD,QAAO;;AAGT,SAAS,gBAAgB,GAAgC;AACvD,KAAI,OAAO,MAAM,YAAY,CAAC,OAAO,SAAS,EAAE,IAAI,KAAK,EAAG,QAAO,KAAA;AACnE,QAAO,KAAK,MAAM,EAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ssrf-guard.js","names":["dnsLookup"],"sources":["../../../../src/media-shared/http/ssrf-guard.ts"],"sourcesContent":["/**\n * SSRF guard for voice / media-understanding HTTP calls.\n *\n * DECISION (per docs/voice-rearchitecture.md §6):\n * - xopc does not currently ship the full openclaw SSRF infra (pinned dispatcher,\n * legacy private-network opt-in, etc.). For v2.0 we adopt a deliberately lean\n * guard that is sufficient for \"developer-controlled provider base URLs\":\n * 1. Reject non-http(s) schemes.\n * 2. Reject IP literals or hostnames that resolve to private / loopback /\n * link-local / metadata addresses unless `allowPrivateNetwork` is true.\n * 3. Resolve the hostname BEFORE handing the request to fetch (DNS pinning)\n * and reuse the resolved IP for the actual connection — closes the\n * classic DNS-rebinding window without requiring a custom dispatcher.\n * - Why not port openclaw's pinned dispatcher (undici): xopc is committed to\n * plain `globalThis.fetch` (Node 22 native) per AGENTS.md \"Node >= 22\"; we\n * accept the slightly weaker guarantee in exchange for zero new dependencies.\n * - Tests under src/media-shared/http/__tests__/ssrf-guard.test.ts cover all\n * private CIDR ranges + IPv6 link-local + metadata IPs (169.254.169.254).\n */\n\nimport { lookup as dnsLookup } from 'node:dns';\nimport { isIP } from 'node:net';\nimport { promisify } from 'node:util';\n\nconst dnsLookupAsync = promisify(dnsLookup);\n\nexport class SsrfBlockedError extends Error {\n readonly url: string;\n readonly reason: string;\n\n constructor(url: string, reason: string) {\n super(`SSRF guard blocked URL \"${url}\": ${reason}`);\n this.name = 'SsrfBlockedError';\n this.url = url;\n this.reason = reason;\n }\n}\n\nexport interface SsrfGuardOptions {\n /** Opt-in: allow private/loopback/link-local hosts. Default false. */\n allowPrivateNetwork?: boolean;\n /**\n * Optional explicit hostname allowlist. If set, ONLY these hostnames are\n * permitted regardless of `allowPrivateNetwork`. Useful for production\n * deployments that pin to one or two known provider domains.\n */\n hostnameAllowlist?: readonly string[];\n}\n\nconst PRIVATE_IPV4_CIDR_PATTERNS: ReadonlyArray<(parts: number[]) => boolean> = [\n // 10.0.0.0/8\n (parts) => parts[0] === 10,\n // 172.16.0.0/12\n (parts) => parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31,\n // 192.168.0.0/16\n (parts) => parts[0] === 192 && parts[1] === 168,\n // 127.0.0.0/8 (loopback)\n (parts) => parts[0] === 127,\n // 169.254.0.0/16 (link-local + AWS / GCP metadata 169.254.169.254)\n (parts) => parts[0] === 169 && parts[1] === 254,\n // 100.64.0.0/10 (CGNAT)\n (parts) => parts[0] === 100 && parts[1] >= 64 && parts[1] <= 127,\n // 0.0.0.0/8\n (parts) => parts[0] === 0,\n];\n\nexport function isPrivateIpv4(ip: string): boolean {\n if (isIP(ip) !== 4) {\n return false;\n }\n const parts = ip.split('.').map((octet) => Number.parseInt(octet, 10));\n if (parts.length !== 4 || parts.some((octet) => Number.isNaN(octet))) {\n return false;\n }\n for (const matcher of PRIVATE_IPV4_CIDR_PATTERNS) {\n if (matcher(parts)) {\n return true;\n }\n }\n return false;\n}\n\nexport function isPrivateIpv6(ip: string): boolean {\n if (isIP(ip) !== 6) {\n return false;\n }\n const lower = ip.toLowerCase();\n // ::1 loopback\n if (lower === '::1' || lower === '0:0:0:0:0:0:0:1') {\n return true;\n }\n // fc00::/7 unique local\n if (/^f[cd][0-9a-f]{2}:/.test(lower)) {\n return true;\n }\n // fe80::/10 link-local\n if (/^fe[89ab][0-9a-f]:/.test(lower)) {\n return true;\n }\n // ::ffff:<ipv4-mapped> — defer to the IPv4 check\n const v4Mapped = lower.match(/^::ffff:([0-9.]+)$/);\n if (v4Mapped && isIP(v4Mapped[1]) === 4) {\n return isPrivateIpv4(v4Mapped[1]);\n }\n return false;\n}\n\nexport function isPrivateIpAddress(ip: string): boolean {\n return isPrivateIpv4(ip) || isPrivateIpv6(ip);\n}\n\nexport interface ResolvedSsrfTarget {\n /** The original URL string. */\n url: string;\n /** The resolved IP that should actually be connected to. */\n resolvedIp: string;\n /** The address family (4 or 6). */\n family: 4 | 6;\n}\n\n/**\n * Validate `url`, resolve its hostname via DNS, and return the resolved IP so\n * the caller can pin the request to that exact IP (closes DNS-rebinding window).\n *\n * Throws SsrfBlockedError when:\n * - scheme is not http(s)\n * - hostname is an explicit IP literal that targets a private range (and the\n * caller did not opt in)\n * - hostname resolves to a private IP (and the caller did not opt in)\n * - hostnameAllowlist is set and the hostname is not on it\n */\nexport async function assertSafeUrl(\n url: string | URL,\n options: SsrfGuardOptions = {},\n): Promise<ResolvedSsrfTarget> {\n const parsed = url instanceof URL ? url : new URL(url);\n const urlString = parsed.toString();\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new SsrfBlockedError(urlString, `unsupported scheme \"${parsed.protocol}\"`);\n }\n\n const hostname = parsed.hostname;\n if (!hostname) {\n throw new SsrfBlockedError(urlString, 'missing hostname');\n }\n\n if (options.hostnameAllowlist && options.hostnameAllowlist.length > 0) {\n const lower = hostname.toLowerCase();\n const allowed = options.hostnameAllowlist.some((entry) => lower === entry.toLowerCase());\n if (!allowed) {\n throw new SsrfBlockedError(urlString, `hostname \"${hostname}\" not in allowlist`);\n }\n }\n\n const literalFamily = isIP(hostname);\n if (literalFamily !== 0) {\n if (!options.allowPrivateNetwork && isPrivateIpAddress(hostname)) {\n throw new SsrfBlockedError(urlString, `IP literal \"${hostname}\" targets a private network`);\n }\n return { url: urlString, resolvedIp: hostname, family: literalFamily as 4 | 6 };\n }\n\n let address: string;\n let family: number;\n try {\n const resolved = await dnsLookupAsync(hostname);\n address = resolved.address;\n family = resolved.family;\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new SsrfBlockedError(urlString, `DNS lookup failed: ${reason}`);\n }\n\n if (!options.allowPrivateNetwork && isPrivateIpAddress(address)) {\n throw new SsrfBlockedError(\n urlString,\n `hostname \"${hostname}\" resolved to private IP \"${address}\"`,\n );\n }\n\n return { url: urlString, resolvedIp: address, family: family as 4 | 6 };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,iBAAiB,UAAUA,OAAU;AAE3C,IAAa,mBAAb,cAAsC,MAAM;CAC1C;CACA;CAEA,YAAY,KAAa,QAAgB;AACvC,QAAM,2BAA2B,IAAI,KAAK,SAAS;AACnD,OAAK,OAAO;AACZ,OAAK,MAAM;AACX,OAAK,SAAS;;;AAelB,MAAM,6BAA0E;EAE7E,UAAU,MAAM,OAAO;EAEvB,UAAU,MAAM,OAAO,OAAO,MAAM,MAAM,MAAM,MAAM,MAAM;EAE5D,UAAU,MAAM,OAAO,OAAO,MAAM,OAAO;EAE3C,UAAU,MAAM,OAAO;EAEvB,UAAU,MAAM,OAAO,OAAO,MAAM,OAAO;EAE3C,UAAU,MAAM,OAAO,OAAO,MAAM,MAAM,MAAM,MAAM,MAAM;EAE5D,UAAU,MAAM,OAAO;CACzB;AAED,SAAgB,cAAc,IAAqB;AACjD,KAAI,KAAK,GAAG,KAAK,EACf,QAAO;CAET,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,UAAU,OAAO,SAAS,OAAO,GAAG,CAAC;AACtE,KAAI,MAAM,WAAW,KAAK,MAAM,MAAM,UAAU,OAAO,MAAM,MAAM,CAAC,CAClE,QAAO;AAET,MAAK,MAAM,WAAW,2BACpB,KAAI,QAAQ,MAAM,CAChB,QAAO;AAGX,QAAO;;AAGT,SAAgB,cAAc,IAAqB;AACjD,KAAI,KAAK,GAAG,KAAK,EACf,QAAO;CAET,MAAM,QAAQ,GAAG,aAAa;AAE9B,KAAI,UAAU,SAAS,UAAU,kBAC/B,QAAO;AAGT,KAAI,qBAAqB,KAAK,MAAM,CAClC,QAAO;AAGT,KAAI,qBAAqB,KAAK,MAAM,CAClC,QAAO;CAGT,MAAM,WAAW,MAAM,MAAM,qBAAqB;AAClD,KAAI,YAAY,KAAK,SAAS,GAAG,KAAK,EACpC,QAAO,cAAc,SAAS,GAAG;AAEnC,QAAO;;AAGT,SAAgB,mBAAmB,IAAqB;AACtD,QAAO,cAAc,GAAG,IAAI,cAAc,GAAG;;;;;;;;;;;;;AAuB/C,eAAsB,cACpB,KACA,UAA4B,EAAE,EACD;CAC7B,MAAM,SAAS,eAAe,MAAM,MAAM,IAAI,IAAI,IAAI;CACtD,MAAM,YAAY,OAAO,UAAU;AAEnC,KAAI,OAAO,aAAa,WAAW,OAAO,aAAa,SACrD,OAAM,IAAI,iBAAiB,WAAW,uBAAuB,OAAO,SAAS,GAAG;CAGlF,MAAM,WAAW,OAAO;AACxB,KAAI,CAAC,SACH,OAAM,IAAI,iBAAiB,WAAW,mBAAmB;AAG3D,KAAI,QAAQ,qBAAqB,QAAQ,kBAAkB,SAAS,GAAG;EACrE,MAAM,QAAQ,SAAS,aAAa;AAEpC,MAAI,CADY,QAAQ,kBAAkB,MAAM,UAAU,UAAU,MAAM,aAAa,CAC3E,CACV,OAAM,IAAI,iBAAiB,WAAW,aAAa,SAAS,oBAAoB;;CAIpF,MAAM,gBAAgB,KAAK,SAAS;AACpC,KAAI,kBAAkB,GAAG;AACvB,MAAI,CAAC,QAAQ,uBAAuB,mBAAmB,SAAS,CAC9D,OAAM,IAAI,iBAAiB,WAAW,eAAe,SAAS,6BAA6B;AAE7F,SAAO;GAAE,KAAK;GAAW,YAAY;GAAU,QAAQ;GAAwB;;CAGjF,IAAI;CACJ,IAAI;AACJ,KAAI;EACF,MAAM,WAAW,MAAM,eAAe,SAAS;AAC/C,YAAU,SAAS;AACnB,WAAS,SAAS;UACX,OAAO;AAEd,QAAM,IAAI,iBAAiB,WAAW,sBADvB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GACA;;AAGvE,KAAI,CAAC,QAAQ,uBAAuB,mBAAmB,QAAQ,CAC7D,OAAM,IAAI,iBACR,WACA,aAAa,SAAS,4BAA4B,QAAQ,GAC3D;AAGH,QAAO;EAAE,KAAK;EAAW,YAAY;EAAiB;EAAiB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mock-server.js","names":[],"sources":["../../../../../src/media-shared/http/test-helpers/mock-server.ts"],"sourcesContent":["/**\n * In-process HTTP mock server for voice / media-understanding tests.\n *\n * DECISION (per docs/voice-rearchitecture.md §14):\n * - Tests must NOT hit real provider endpoints. We spin up an ephemeral HTTP\n * server (random port on 127.0.0.1) and assert request/response shapes.\n * - SSRF tests intentionally bind to 127.0.0.1 (private). Tests that exercise\n * the SSRF guard pass `allowPrivateNetwork: true` to the production code.\n * - This helper is import-only from `__tests__/` files — never from runtime\n * code. Kept under the runtime tree (not test/) so vitest picks it up via\n * the existing co-located test discovery.\n */\n\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http';\nimport { AddressInfo } from 'node:net';\n\nexport interface MockResponseSpec {\n status?: number;\n headers?: Record<string, string>;\n /** Response body as string, Buffer, or async iterable for streaming. */\n body?: string | Buffer | AsyncIterable<Uint8Array>;\n /** Artificial delay before sending headers (ms). Useful for timeout tests. */\n delayMs?: number;\n}\n\nexport interface MockRequestRecord {\n method: string;\n path: string;\n headers: Record<string, string | string[] | undefined>;\n body: Buffer;\n receivedAt: number;\n}\n\nexport type MockHandler = (\n req: IncomingMessage,\n bodyBuffer: Buffer,\n) => Promise<MockResponseSpec> | MockResponseSpec;\n\nexport interface MockServerHandle {\n /** Base URL like http://127.0.0.1:51234 (no trailing slash). */\n baseUrl: string;\n /** Recorded requests in receive order. */\n requests: MockRequestRecord[];\n /** Stop the server. Idempotent. */\n close(): Promise<void>;\n /** Replace the handler at runtime (e.g. flip from 401 → 200 in rotation tests). */\n setHandler(handler: MockHandler): void;\n}\n\nasync function readRequestBody(req: IncomingMessage): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(chunk as Buffer);\n }\n return Buffer.concat(chunks);\n}\n\nasync function writeResponse(res: ServerResponse, spec: MockResponseSpec): Promise<void> {\n if (spec.delayMs && spec.delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, spec.delayMs));\n }\n const status = spec.status ?? 200;\n const headers = spec.headers ?? {};\n res.writeHead(status, headers);\n\n const body = spec.body;\n if (body === undefined) {\n res.end();\n return;\n }\n if (typeof body === 'string' || Buffer.isBuffer(body)) {\n res.end(body);\n return;\n }\n // AsyncIterable<Uint8Array> — stream chunks.\n for await (const chunk of body) {\n if (!res.write(chunk)) {\n await new Promise<void>((resolve) => res.once('drain', resolve));\n }\n }\n res.end();\n}\n\n/**\n * Start an HTTP mock server bound to 127.0.0.1 on an ephemeral port. The\n * returned handle exposes the base URL, recorded requests, and a `close()`\n * method tests should call in `afterEach` / `afterAll`.\n */\nexport async function startMockServer(initialHandler: MockHandler): Promise<MockServerHandle> {\n const requests: MockRequestRecord[] = [];\n let activeHandler: MockHandler = initialHandler;\n\n const server: Server = createServer((req, res) => {\n void (async () => {\n const body = await readRequestBody(req);\n requests.push({\n method: req.method ?? 'GET',\n path: req.url ?? '/',\n headers: req.headers as Record<string, string | string[] | undefined>,\n body,\n receivedAt: Date.now(),\n });\n try {\n const spec = await activeHandler(req, body);\n await writeResponse(res, spec);\n } catch (error) {\n if (!res.headersSent) {\n res.writeHead(500, { 'content-type': 'application/json' });\n }\n res.end(JSON.stringify({ error: { message: String(error) } }));\n }\n })();\n });\n\n await new Promise<void>((resolve) => server.listen(0, '127.0.0.1', resolve));\n const addr = server.address() as AddressInfo;\n const baseUrl = `http://127.0.0.1:${addr.port}`;\n\n return {\n baseUrl,\n requests,\n setHandler(next) {\n activeHandler = next;\n },\n async close() {\n await new Promise<void>((resolve, reject) =>\n server.close((err) => (err ? reject(err) : resolve())),\n );\n },\n };\n}\n\n/**\n * Convenience builder: cycle through a fixed sequence of responses (used by\n * key-rotation tests where call N gets 401 and call N+1 gets 200).\n */\nexport function cycleHandlers(specs: readonly MockResponseSpec[]): MockHandler {\n let index = 0;\n return () => {\n const spec = specs[Math.min(index, specs.length - 1)];\n index += 1;\n return spec;\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAiDA,eAAe,gBAAgB,KAAuC;CACpE,MAAM,SAAmB,EAAE;AAC3B,YAAW,MAAM,SAAS,IACxB,QAAO,KAAK,MAAgB;AAE9B,QAAO,OAAO,OAAO,OAAO;;AAG9B,eAAe,cAAc,KAAqB,MAAuC;AACvF,KAAI,KAAK,WAAW,KAAK,UAAU,EACjC,OAAM,IAAI,SAAS,YAAY,WAAW,SAAS,KAAK,QAAQ,CAAC;CAEnE,MAAM,SAAS,KAAK,UAAU;CAC9B,MAAM,UAAU,KAAK,WAAW,EAAE;AAClC,KAAI,UAAU,QAAQ,QAAQ;CAE9B,MAAM,OAAO,KAAK;AAClB,KAAI,SAAS,KAAA,GAAW;AACtB,MAAI,KAAK;AACT;;AAEF,KAAI,OAAO,SAAS,YAAY,OAAO,SAAS,KAAK,EAAE;AACrD,MAAI,IAAI,KAAK;AACb;;AAGF,YAAW,MAAM,SAAS,KACxB,KAAI,CAAC,IAAI,MAAM,MAAM,CACnB,OAAM,IAAI,SAAe,YAAY,IAAI,KAAK,SAAS,QAAQ,CAAC;AAGpE,KAAI,KAAK;;;;;;;AAQX,eAAsB,gBAAgB,gBAAwD;CAC5F,MAAM,WAAgC,EAAE;CACxC,IAAI,gBAA6B;CAEjC,MAAM,SAAiB,cAAc,KAAK,QAAQ;AAChD,GAAM,YAAY;GAChB,MAAM,OAAO,MAAM,gBAAgB,IAAI;AACvC,YAAS,KAAK;IACZ,QAAQ,IAAI,UAAU;IACtB,MAAM,IAAI,OAAO;IACjB,SAAS,IAAI;IACb;IACA,YAAY,KAAK,KAAK;IACvB,CAAC;AACF,OAAI;AAEF,UAAM,cAAc,KAAK,MADN,cAAc,KAAK,KAAK,CACb;YACvB,OAAO;AACd,QAAI,CAAC,IAAI,YACP,KAAI,UAAU,KAAK,EAAE,gBAAgB,oBAAoB,CAAC;AAE5D,QAAI,IAAI,KAAK,UAAU,EAAE,OAAO,EAAE,SAAS,OAAO,MAAM,EAAE,EAAE,CAAC,CAAC;;MAE9D;GACJ;AAEF,OAAM,IAAI,SAAe,YAAY,OAAO,OAAO,GAAG,aAAa,QAAQ,CAAC;AAI5E,QAAO;EACL,SAAA,oBAJW,OAAO,SACoB,CAAC;EAIvC;EACA,WAAW,MAAM;AACf,mBAAgB;;EAElB,MAAM,QAAQ;AACZ,SAAM,IAAI,SAAe,SAAS,WAChC,OAAO,OAAO,QAAS,MAAM,OAAO,IAAI,GAAG,SAAS,CAAE,CACvD;;EAEJ;;;;;;AAOH,SAAgB,cAAc,OAAiD;CAC7E,IAAI,QAAQ;AACZ,cAAa;EACX,MAAM,OAAO,MAAM,KAAK,IAAI,OAAO,MAAM,SAAS,EAAE;AACpD,WAAS;AACT,SAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audio-transcription-runner.js","names":[],"sources":["../../../src/media-understanding/audio-transcription-runner.ts"],"sourcesContent":["/**\n * Audio transcription entry point.\n *\n * Thin facade over `runCapability({ capability: 'audio' })` that:\n * 1. Builds the per-provider AudioTranscriptionRequest from\n * `cfg.tools.media.audio`.\n * 2. Resolves the api key / base URL / per-provider model from config + env.\n * 3. Returns a normalized `{ transcript, attempts }` shape so the agent /\n * channel layer doesn't see the registry plumbing.\n */\n\nimport { createLogger } from '../utils/logger.js';\n\nimport { runCapability } from './runner.js';\nimport type {\n AudioTranscriptionRequest,\n CapabilityAttachmentInput,\n MediaUnderstandingDecision,\n MediaUnderstandingProvider,\n} from './types.js';\n// Re-export to keep callers' import paths short.\nexport type { AudioTranscriptionRequest, AudioTranscriptionResult } from './types.js';\n\nconst log = createLogger('AudioTranscriptionRunner');\n\nexport interface AudioProviderResolvedConfig {\n /** Provider id (must match a registered MediaUnderstandingProvider id). */\n id: string;\n apiKey?: string;\n baseUrl?: string;\n model?: string;\n language?: string;\n prompt?: string;\n query?: Record<string, string | number | boolean>;\n headers?: Record<string, string>;\n /** Provider-specific extra fields preserved as-is. */\n extra?: Record<string, unknown>;\n}\n\nexport interface RunAudioTranscriptionOptions {\n /** Pre-resolved provider configs in the order to try them. */\n providers: readonly AudioProviderResolvedConfig[];\n /** Audio buffers to transcribe. */\n attachments: readonly CapabilityAttachmentInput[];\n /** Hard timeout per provider call (ms). */\n timeoutMs: number;\n signal?: AbortSignal;\n}\n\nexport interface RunAudioTranscriptionResult {\n /** First successful transcript across attachments (joined when multiple). */\n transcript?: string;\n /** Per-attachment outputs (preserves order). */\n outputs: Array<{ attachmentIndex: number; text: string; provider: string; model?: string }>;\n decision: MediaUnderstandingDecision;\n}\n\nexport async function runAudioTranscription(\n options: RunAudioTranscriptionOptions,\n): Promise<RunAudioTranscriptionResult> {\n if (options.providers.length === 0) {\n log.warn(\n { attachmentCount: options.attachments.length },\n 'No audio providers configured; transcription disabled',\n );\n }\n\n // Index resolved configs by provider id for quick lookup inside buildRequest.\n const configById = new Map<string, AudioProviderResolvedConfig>();\n for (const cfg of options.providers) {\n configById.set(cfg.id.toLowerCase(), cfg);\n }\n\n const result = await runCapability({\n capability: 'audio',\n attachments: options.attachments,\n providerOrder: options.providers.map((cfg) => cfg.id),\n signal: options.signal,\n buildRequest: ({ provider, attachment }) =>\n buildAudioRequest({\n provider,\n attachment,\n config: configById.get(provider.id.toLowerCase()),\n timeoutMs: options.timeoutMs,\n signal: options.signal,\n }),\n });\n\n // Aggregate transcripts by attachment order.\n const outputs = result.outputs.map((entry) => ({\n attachmentIndex: entry.attachmentIndex,\n text: entry.text,\n provider: entry.provider,\n ...(entry.model ? { model: entry.model } : {}),\n }));\n\n const transcript =\n outputs.length === 0\n ? undefined\n : outputs\n .slice()\n .sort((a, b) => a.attachmentIndex - b.attachmentIndex)\n .map((o) => o.text)\n .join('\\n')\n .trim() || undefined;\n\n return { transcript, outputs, decision: result.decision };\n}\n\nfunction buildAudioRequest(params: {\n provider: MediaUnderstandingProvider;\n attachment: CapabilityAttachmentInput;\n config?: AudioProviderResolvedConfig;\n timeoutMs: number;\n signal?: AbortSignal;\n}): AudioTranscriptionRequest | undefined {\n const { provider, attachment, config, timeoutMs, signal } = params;\n if (!config) {\n log.debug(\n { providerId: provider.id, attachmentIndex: attachment.attachmentIndex },\n `No resolved config for provider \"${provider.id}\"; skipping`,\n );\n return undefined;\n }\n const requiresApiKey = provider.requiresApiKey !== false;\n if (requiresApiKey && !config.apiKey) {\n log.debug(\n { providerId: provider.id, attachmentIndex: attachment.attachmentIndex },\n `Provider \"${provider.id}\" has no apiKey; skipping`,\n );\n return undefined;\n }\n return {\n buffer: attachment.buffer,\n fileName: attachment.fileName,\n ...(attachment.mime ? { mime: attachment.mime } : {}),\n ...(config.apiKey ? { apiKey: config.apiKey } : {}),\n ...(config.baseUrl ? { baseUrl: config.baseUrl } : {}),\n ...(config.headers ? { headers: config.headers } : {}),\n ...(config.model ?? provider.defaultModels?.audio\n ? { model: config.model ?? provider.defaultModels?.audio }\n : {}),\n ...(config.language ? { language: config.language } : {}),\n ...(config.prompt ? { prompt: config.prompt } : {}),\n ...(config.query ? { query: config.query } : {}),\n timeoutMs,\n ...(signal ? { signal } : {}),\n };\n}\n"],"mappings":";;;;aAWkD;AAYlD,MAAM,MAAM,aAAa,2BAA2B;AAkCpD,eAAsB,sBACpB,SACsC;AACtC,KAAI,QAAQ,UAAU,WAAW,EAC/B,KAAI,KACF,EAAE,iBAAiB,QAAQ,YAAY,QAAQ,EAC/C,wDACD;CAIH,MAAM,6BAAa,IAAI,KAA0C;AACjE,MAAK,MAAM,OAAO,QAAQ,UACxB,YAAW,IAAI,IAAI,GAAG,aAAa,EAAE,IAAI;CAG3C,MAAM,SAAS,MAAM,cAAc;EACjC,YAAY;EACZ,aAAa,QAAQ;EACrB,eAAe,QAAQ,UAAU,KAAK,QAAQ,IAAI,GAAG;EACrD,QAAQ,QAAQ;EAChB,eAAe,EAAE,UAAU,iBACzB,kBAAkB;GAChB;GACA;GACA,QAAQ,WAAW,IAAI,SAAS,GAAG,aAAa,CAAC;GACjD,WAAW,QAAQ;GACnB,QAAQ,QAAQ;GACjB,CAAC;EACL,CAAC;CAGF,MAAM,UAAU,OAAO,QAAQ,KAAK,WAAW;EAC7C,iBAAiB,MAAM;EACvB,MAAM,MAAM;EACZ,UAAU,MAAM;EAChB,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,OAAO,GAAG,EAAE;EAC9C,EAAE;AAYH,QAAO;EAAE,YATP,QAAQ,WAAW,IACf,KAAA,IACA,QACG,OAAO,CACP,MAAM,GAAG,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,CACrD,KAAK,MAAM,EAAE,KAAK,CAClB,KAAK,KAAK,CACV,MAAM,IAAI,KAAA;EAEE;EAAS,UAAU,OAAO;EAAU;;AAG3D,SAAS,kBAAkB,QAMe;CACxC,MAAM,EAAE,UAAU,YAAY,QAAQ,WAAW,WAAW;AAC5D,KAAI,CAAC,QAAQ;AACX,MAAI,MACF;GAAE,YAAY,SAAS;GAAI,iBAAiB,WAAW;GAAiB,EACxE,oCAAoC,SAAS,GAAG,aACjD;AACD;;AAGF,KADuB,SAAS,mBAAmB,SAC7B,CAAC,OAAO,QAAQ;AACpC,MAAI,MACF;GAAE,YAAY,SAAS;GAAI,iBAAiB,WAAW;GAAiB,EACxE,aAAa,SAAS,GAAG,2BAC1B;AACD;;AAEF,QAAO;EACL,QAAQ,WAAW;EACnB,UAAU,WAAW;EACrB,GAAI,WAAW,OAAO,EAAE,MAAM,WAAW,MAAM,GAAG,EAAE;EACpD,GAAI,OAAO,SAAS,EAAE,QAAQ,OAAO,QAAQ,GAAG,EAAE;EAClD,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;EACrD,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;EACrD,GAAI,OAAO,SAAS,SAAS,eAAe,QACxC,EAAE,OAAO,OAAO,SAAS,SAAS,eAAe,OAAO,GACxD,EAAE;EACN,GAAI,OAAO,WAAW,EAAE,UAAU,OAAO,UAAU,GAAG,EAAE;EACxD,GAAI,OAAO,SAAS,EAAE,QAAQ,OAAO,QAAQ,GAAG,EAAE;EAClD,GAAI,OAAO,QAAQ,EAAE,OAAO,OAAO,OAAO,GAAG,EAAE;EAC/C;EACA,GAAI,SAAS,EAAE,QAAQ,GAAG,EAAE;EAC7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compatible-audio.js","names":[],"sources":["../../../src/media-understanding/openai-compatible-audio.ts"],"sourcesContent":["/**\n * OpenAI-compatible `/audio/transcriptions` helper for STT providers and extensions.\n */\n\nimport path from 'node:path';\n\nimport { normalizeBaseUrl, postMultipartRequest } from '../media-shared/http/index.js';\n\nimport type {\n AudioTranscriptionRequest,\n AudioTranscriptionResult,\n MediaUnderstandingProvider,\n} from './types.js';\nimport { registerMediaUnderstandingProvider } from './registry.js';\n\ntype OpenAiCompatibleAudioParams = AudioTranscriptionRequest & {\n defaultBaseUrl: string;\n defaultModel: string;\n provider?: string;\n label?: string;\n};\n\nexport function resolveAudioTranscriptionUploadFileName(fileName?: string, mime?: string): string {\n const trimmed = fileName?.trim();\n const baseName = trimmed ? path.basename(trimmed) : 'audio';\n const lowerMime = mime?.trim().toLowerCase();\n\n if (/\\.aac$/i.test(baseName)) {\n return `${baseName.slice(0, -4) || 'audio'}.m4a`;\n }\n if (!path.extname(baseName) && lowerMime === 'audio/aac') {\n return `${baseName || 'audio'}.m4a`;\n }\n return baseName;\n}\n\nexport function buildAudioTranscriptionFormData(params: {\n buffer: Buffer;\n fileName?: string;\n mime?: string;\n fields?: Record<string, string | number | boolean | undefined>;\n}): FormData {\n const form = new FormData();\n const bytes = new Uint8Array(params.buffer);\n const blob = new Blob([bytes], {\n type: params.mime ?? 'application/octet-stream',\n });\n form.append('file', blob, resolveAudioTranscriptionUploadFileName(params.fileName, params.mime));\n for (const [name, value] of Object.entries(params.fields ?? {})) {\n const text = typeof value === 'string' ? value.trim() : value == null ? '' : String(value);\n if (text) {\n form.append(name, text);\n }\n }\n return form;\n}\n\nfunction resolveModel(model: string | undefined, fallback: string): string {\n const trimmed = model?.trim();\n return trimmed || fallback;\n}\n\nfunction requireTranscriptionText(text: string | undefined, message: string): string {\n const trimmed = text?.trim();\n if (!trimmed) {\n throw new Error(message);\n }\n return trimmed;\n}\n\nexport async function transcribeOpenAiCompatibleAudio(\n params: OpenAiCompatibleAudioParams,\n): Promise<AudioTranscriptionResult> {\n const baseUrl = normalizeBaseUrl(params.baseUrl ?? params.defaultBaseUrl);\n const url = `${baseUrl}/audio/transcriptions`;\n const model = resolveModel(params.model, params.defaultModel);\n const headers: Record<string, string> = {\n authorization: `Bearer ${params.apiKey}`,\n ...(params.headers ?? {}),\n };\n const form = buildAudioTranscriptionFormData({\n buffer: params.buffer,\n fileName: params.fileName,\n mime: params.mime,\n fields: {\n model,\n language: params.language,\n prompt: params.prompt,\n },\n });\n\n const response = await postMultipartRequest(url, {\n timeoutMs: params.timeoutMs,\n label: params.label ?? `${params.provider ?? 'openai'} STT`,\n headers,\n body: form,\n });\n\n const payload = (await response.json()) as { text?: string };\n const text = requireTranscriptionText(\n payload.text,\n 'Audio transcription response missing text',\n );\n return { text, model };\n}\n\nexport interface OpenAiCompatibleAudioProviderOptions {\n id: string;\n aliases?: readonly string[];\n envKey?: string;\n defaultBaseUrl: string;\n defaultModel: string;\n autoPriority?: number;\n label?: string;\n}\n\n/** Factory for OpenAI `/audio/transcriptions`-compatible STT extension providers. */\nexport function createOpenAiCompatibleAudioProvider(\n options: OpenAiCompatibleAudioProviderOptions,\n): MediaUnderstandingProvider {\n return {\n id: options.id,\n aliases: options.aliases,\n capabilities: ['audio'],\n envKey: options.envKey,\n defaultModels: { audio: options.defaultModel },\n autoPriority: { audio: options.autoPriority ?? 50 },\n transcribeAudio: (req: AudioTranscriptionRequest) => {\n if (!req.apiKey) {\n throw new Error(`${options.label ?? options.id} STT API key missing`);\n }\n return transcribeOpenAiCompatibleAudio({\n ...req,\n defaultBaseUrl: options.defaultBaseUrl,\n defaultModel: options.defaultModel,\n provider: options.id,\n label: options.label,\n });\n },\n };\n}\n\nexport function registerOpenAiCompatibleAudioProvider(\n options: OpenAiCompatibleAudioProviderOptions,\n): () => void {\n return registerMediaUnderstandingProvider(createOpenAiCompatibleAudioProvider(options));\n}\n"],"mappings":";;;;;;;;AAsBA,SAAgB,wCAAwC,UAAmB,MAAuB;CAChG,MAAM,UAAU,UAAU,MAAM;CAChC,MAAM,WAAW,UAAU,KAAK,SAAS,QAAQ,GAAG;CACpD,MAAM,YAAY,MAAM,MAAM,CAAC,aAAa;AAE5C,KAAI,UAAU,KAAK,SAAS,CAC1B,QAAO,GAAG,SAAS,MAAM,GAAG,GAAG,IAAI,QAAQ;AAE7C,KAAI,CAAC,KAAK,QAAQ,SAAS,IAAI,cAAc,YAC3C,QAAO,GAAG,YAAY,QAAQ;AAEhC,QAAO;;AAGT,SAAgB,gCAAgC,QAKnC;CACX,MAAM,OAAO,IAAI,UAAU;CAC3B,MAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;CAC3C,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,EAC7B,MAAM,OAAO,QAAQ,4BACtB,CAAC;AACF,MAAK,OAAO,QAAQ,MAAM,wCAAwC,OAAO,UAAU,OAAO,KAAK,CAAC;AAChG,MAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,OAAO,UAAU,EAAE,CAAC,EAAE;EAC/D,MAAM,OAAO,OAAO,UAAU,WAAW,MAAM,MAAM,GAAG,SAAS,OAAO,KAAK,OAAO,MAAM;AAC1F,MAAI,KACF,MAAK,OAAO,MAAM,KAAK;;AAG3B,QAAO;;AAGT,SAAS,aAAa,OAA2B,UAA0B;AAEzE,QADgB,OAAO,MAAM,IACX;;AAGpB,SAAS,yBAAyB,MAA0B,SAAyB;CACnF,MAAM,UAAU,MAAM,MAAM;AAC5B,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,QAAQ;AAE1B,QAAO;;AAGT,eAAsB,gCACpB,QACmC;CAEnC,MAAM,MAAM,GADI,iBAAiB,OAAO,WAAW,OAAO,eACpC,CAAC;CACvB,MAAM,QAAQ,aAAa,OAAO,OAAO,OAAO,aAAa;CAC7D,MAAM,UAAkC;EACtC,eAAe,UAAU,OAAO;EAChC,GAAI,OAAO,WAAW,EAAE;EACzB;CACD,MAAM,OAAO,gCAAgC;EAC3C,QAAQ,OAAO;EACf,UAAU,OAAO;EACjB,MAAM,OAAO;EACb,QAAQ;GACN;GACA,UAAU,OAAO;GACjB,QAAQ,OAAO;GAChB;EACF,CAAC;AAcF,QAAO;EAAE,MAJI,0BACX,OAFqB,MAPA,qBAAqB,KAAK;GAC/C,WAAW,OAAO;GAClB,OAAO,OAAO,SAAS,GAAG,OAAO,YAAY,SAAS;GACtD;GACA,MAAM;GACP,CAAC,EAE8B,MAAM,EAE5B,MACR,4CAEW;EAAE;EAAO;;;AAcxB,SAAgB,oCACd,SAC4B;AAC5B,QAAO;EACL,IAAI,QAAQ;EACZ,SAAS,QAAQ;EACjB,cAAc,CAAC,QAAQ;EACvB,QAAQ,QAAQ;EAChB,eAAe,EAAE,OAAO,QAAQ,cAAc;EAC9C,cAAc,EAAE,OAAO,QAAQ,gBAAgB,IAAI;EACnD,kBAAkB,QAAmC;AACnD,OAAI,CAAC,IAAI,OACP,OAAM,IAAI,MAAM,GAAG,QAAQ,SAAS,QAAQ,GAAG,sBAAsB;AAEvE,UAAO,gCAAgC;IACrC,GAAG;IACH,gBAAgB,QAAQ;IACxB,cAAc,QAAQ;IACtB,UAAU,QAAQ;IAClB,OAAO,QAAQ;IAChB,CAAC;;EAEL;;AAGH,SAAgB,sCACd,SACY;AACZ,QAAO,mCAAmC,oCAAoC,QAAQ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","names":[],"sources":["../../../src/media-understanding/registry.ts"],"sourcesContent":["/**\n * MediaUnderstandingProviderRegistry — central lookup for STT/image/video\n * provider plugins.\n *\n * Mirrors the SpeechProviderRegistry pattern at src/voice/tts/speech-registry.ts\n * intentionally — same registration semantics, same alias handling, same\n * conflict-warn-and-overwrite policy.\n *\n * DECISION: The two registries are kept separate (rather than a single\n * \"media provider\" registry) because:\n * 1. SpeechProviderPlugin and MediaUnderstandingProvider have different\n * method shapes (synthesize vs transcribeAudio + describeImage).\n * 2. Many vendors implement only one side (Edge TTS has no STT; Whisper has\n * no TTS), so a unified registry would require a sparse capability matrix\n * anyway.\n * 3. Discovery UIs naturally split by direction (TTS list vs STT list).\n *\n * When a vendor implements BOTH (e.g. OpenAI), the registration code creates\n * two separate plugin objects sharing config — this stays explicit and avoids\n * \"is this method on this object?\" guessing in callers.\n */\n\nimport { createLogger } from '../utils/logger.js';\n\nimport type { MediaCapability, MediaUnderstandingProvider } from './types.js';\n\nconst log = createLogger('MediaUnderstandingRegistry');\n\nconst registry = new Map<string, MediaUnderstandingProvider>();\n\nfunction normalizeId(id: string): string {\n return id.trim().toLowerCase();\n}\n\nfunction indexProvider(provider: MediaUnderstandingProvider): string[] {\n const keys = [normalizeId(provider.id)];\n for (const alias of provider.aliases ?? []) {\n keys.push(normalizeId(alias));\n }\n return keys;\n}\n\nexport function registerMediaUnderstandingProvider(\n provider: MediaUnderstandingProvider,\n): () => void {\n const keys = indexProvider(provider);\n const conflicts = keys.filter((key) => registry.has(key));\n if (conflicts.length > 0) {\n log.warn(\n { providerId: provider.id, conflicts },\n `Media-understanding provider \"${provider.id}\" overrides existing registration(s): ${conflicts.join(', ')}`,\n );\n }\n for (const key of keys) {\n registry.set(key, provider);\n }\n return () => {\n for (const key of keys) {\n const current = registry.get(key);\n if (current === provider) {\n registry.delete(key);\n }\n }\n };\n}\n\nexport function getMediaUnderstandingProvider(id: string): MediaUnderstandingProvider | undefined {\n return registry.get(normalizeId(id));\n}\n\nexport function listMediaUnderstandingProviders(): MediaUnderstandingProvider[] {\n const seen = new Set<MediaUnderstandingProvider>();\n const result: MediaUnderstandingProvider[] = [];\n for (const provider of registry.values()) {\n if (!seen.has(provider)) {\n seen.add(provider);\n result.push(provider);\n }\n }\n return result;\n}\n\n/**\n * List providers that DECLARE the requested capability via `capabilities[]`\n * AND have an actual method implementation. The runner uses this to build\n * the per-capability fallback chain.\n */\nexport function listProvidersForCapability(\n capability: MediaCapability,\n): MediaUnderstandingProvider[] {\n const methodKey =\n capability === 'audio'\n ? 'transcribeAudio'\n : capability === 'image'\n ? 'describeImage'\n : 'describeVideo';\n return listMediaUnderstandingProviders().filter((provider) => {\n const declared = provider.capabilities?.includes(capability) ?? false;\n const implemented =\n typeof (provider as unknown as Record<string, unknown>)[methodKey] === 'function';\n return declared && implemented;\n });\n}\n\n/** Test-only: clear the registry. Not exported from the package barrel. */\nexport function _clearMediaUnderstandingRegistryForTests(): void {\n registry.clear();\n}\n"],"mappings":";;;aAsBkD;AAIlD,MAAM,MAAM,aAAa,6BAA6B;AAEtD,MAAM,2BAAW,IAAI,KAAyC;AAE9D,SAAS,YAAY,IAAoB;AACvC,QAAO,GAAG,MAAM,CAAC,aAAa;;AAGhC,SAAS,cAAc,UAAgD;CACrE,MAAM,OAAO,CAAC,YAAY,SAAS,GAAG,CAAC;AACvC,MAAK,MAAM,SAAS,SAAS,WAAW,EAAE,CACxC,MAAK,KAAK,YAAY,MAAM,CAAC;AAE/B,QAAO;;AAGT,SAAgB,mCACd,UACY;CACZ,MAAM,OAAO,cAAc,SAAS;CACpC,MAAM,YAAY,KAAK,QAAQ,QAAQ,SAAS,IAAI,IAAI,CAAC;AACzD,KAAI,UAAU,SAAS,EACrB,KAAI,KACF;EAAE,YAAY,SAAS;EAAI;EAAW,EACtC,iCAAiC,SAAS,GAAG,wCAAwC,UAAU,KAAK,KAAK,GAC1G;AAEH,MAAK,MAAM,OAAO,KAChB,UAAS,IAAI,KAAK,SAAS;AAE7B,cAAa;AACX,OAAK,MAAM,OAAO,KAEhB,KADgB,SAAS,IAAI,IAClB,KAAK,SACd,UAAS,OAAO,IAAI;;;AAM5B,SAAgB,8BAA8B,IAAoD;AAChG,QAAO,SAAS,IAAI,YAAY,GAAG,CAAC;;AAGtC,SAAgB,kCAAgE;CAC9E,MAAM,uBAAO,IAAI,KAAiC;CAClD,MAAM,SAAuC,EAAE;AAC/C,MAAK,MAAM,YAAY,SAAS,QAAQ,CACtC,KAAI,CAAC,KAAK,IAAI,SAAS,EAAE;AACvB,OAAK,IAAI,SAAS;AAClB,SAAO,KAAK,SAAS;;AAGzB,QAAO;;;;;;;AAQT,SAAgB,2BACd,YAC8B;CAC9B,MAAM,YACJ,eAAe,UACX,oBACA,eAAe,UACb,kBACA;AACR,QAAO,iCAAiC,CAAC,QAAQ,aAAa;EAC5D,MAAM,WAAW,SAAS,cAAc,SAAS,WAAW,IAAI;EAChE,MAAM,cACJ,OAAQ,SAAgD,eAAe;AACzE,SAAO,YAAY;GACnB;;;AAIJ,SAAgB,2CAAiD;AAC/D,UAAS,OAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-entries.js","names":[],"sources":["../../../src/media-understanding/resolve-entries.ts"],"sourcesContent":["/**\n * Resolve configured media model entries for a capability.\n *\n * Ported subset of openclaw/src/media-understanding/resolve.ts (`resolveModelEntries`).\n */\n\nimport { listMediaUnderstandingProviders } from './registry.js';\nimport type { MediaCapability, MediaUnderstandingModelEntry } from './types.js';\n\nexport function resolveModelEntries(params: {\n capability: MediaCapability;\n capabilityModels?: readonly MediaUnderstandingModelEntry[];\n sharedModels?: readonly MediaUnderstandingModelEntry[];\n}): MediaUnderstandingModelEntry[] {\n const registry = new Map(\n listMediaUnderstandingProviders().map((provider) => [provider.id.toLowerCase(), provider]),\n );\n\n const entries = [\n ...(params.capabilityModels ?? []).map((entry) => ({ entry, source: 'capability' as const })),\n ...(params.sharedModels ?? []).map((entry) => ({ entry, source: 'shared' as const })),\n ];\n if (entries.length === 0) {\n return [];\n }\n\n return entries\n .filter(({ entry, source }) => {\n if (entry.type === 'cli') {\n return false;\n }\n const providerId = entry.provider?.trim().toLowerCase();\n if (!providerId && !entry.command) {\n return source === 'capability';\n }\n const caps = entry.capabilities;\n if (!caps || caps.length === 0) {\n if (source === 'shared') {\n return false;\n }\n return true;\n }\n if (!caps.includes(params.capability)) {\n return false;\n }\n if (providerId && !registry.has(providerId)) {\n return source === 'capability';\n }\n return true;\n })\n .map(({ entry }) => entry);\n}\n"],"mappings":";;;;;;;AASA,SAAgB,oBAAoB,QAID;CACjC,MAAM,WAAW,IAAI,IACnB,iCAAiC,CAAC,KAAK,aAAa,CAAC,SAAS,GAAG,aAAa,EAAE,SAAS,CAAC,CAC3F;CAED,MAAM,UAAU,CACd,IAAI,OAAO,oBAAoB,EAAE,EAAE,KAAK,WAAW;EAAE;EAAO,QAAQ;EAAuB,EAAE,EAC7F,IAAI,OAAO,gBAAgB,EAAE,EAAE,KAAK,WAAW;EAAE;EAAO,QAAQ;EAAmB,EAAE,CACtF;AACD,KAAI,QAAQ,WAAW,EACrB,QAAO,EAAE;AAGX,QAAO,QACJ,QAAQ,EAAE,OAAO,aAAa;AAC7B,MAAI,MAAM,SAAS,MACjB,QAAO;EAET,MAAM,aAAa,MAAM,UAAU,MAAM,CAAC,aAAa;AACvD,MAAI,CAAC,cAAc,CAAC,MAAM,QACxB,QAAO,WAAW;EAEpB,MAAM,OAAO,MAAM;AACnB,MAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAC9B,OAAI,WAAW,SACb,QAAO;AAET,UAAO;;AAET,MAAI,CAAC,KAAK,SAAS,OAAO,WAAW,CACnC,QAAO;AAET,MAAI,cAAc,CAAC,SAAS,IAAI,WAAW,CACzC,QAAO,WAAW;AAEpB,SAAO;GACP,CACD,KAAK,EAAE,YAAY,MAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","names":[],"sources":["../../../src/media-understanding/runner.ts"],"sourcesContent":["/**\n * MediaUnderstanding capability runner.\n *\n * Orchestrates per-attachment fallback across providers for one capability\n * (audio / image / video). For each attachment:\n * 1. Build the candidate provider list from the registry, ordered by\n * autoPriority (lower = first), with caller-supplied `providerOrder`\n * overriding when set.\n * 2. Try providers in order. A provider is SKIPPED when it does not declare\n * the requested capability OR does not implement the corresponding method.\n * 3. The first provider whose capability call resolves successfully wins;\n * its output is recorded as `chosen`. Failures are recorded as attempts\n * and the next provider is tried.\n * 4. When ALL providers for an attachment fail, the attachment outcome is\n * `failed`; when no provider was even eligible (capability not registered),\n * it's `disabled`.\n *\n * DECISION (per docs/voice-rearchitecture.md §5):\n * - This is a thin runner only. xopc v2.0 ships ONLY audio; image/video\n * branches exist as type-level fall-throughs (the runner happily handles\n * them once a provider registers describeImage / describeVideo, but no\n * image-specific helpers — like multi-image batching — live here yet).\n * - We deliberately do NOT port openclaw's `MediaAttachmentCache` (which\n * handles temp-file extraction, SSRF re-validation on remote URLs, etc.).\n * For xopc v2.0 the caller is expected to pre-load the buffer; remote URL\n * fetching is the caller's responsibility (typically the channel adapter\n * does this before invoking the runner).\n */\n\nimport { createLogger } from '../utils/logger.js';\n\nimport { listProvidersForCapability } from './registry.js';\nimport type {\n AudioTranscriptionRequest,\n AudioTranscriptionResult,\n CapabilityAttachmentInput,\n ImageDescriptionRequest,\n ImageDescriptionResult,\n MediaCapability,\n MediaUnderstandingAttachmentDecision,\n MediaUnderstandingKind,\n MediaUnderstandingModelDecision,\n MediaUnderstandingOutput,\n MediaUnderstandingProvider,\n MediaUnderstandingResult,\n VideoDescriptionRequest,\n VideoDescriptionResult,\n} from './types.js';\n\nconst log = createLogger('MediaUnderstandingRunner');\n\nexport type { CapabilityAttachmentInput } from './types.js';\n\nexport interface RunCapabilityOptions {\n capability: MediaCapability;\n attachments: readonly CapabilityAttachmentInput[];\n /** Caller-supplied ordering. When set, overrides registry autoPriority. */\n providerOrder?: readonly string[];\n /**\n * Per-provider request builder. Returned shape MUST match the capability:\n * audio → AudioTranscriptionRequest\n * image → ImageDescriptionRequest\n * video → VideoDescriptionRequest\n * The runner does not synthesize api keys / urls — that's the caller's job\n * (typically reads from cfg.tools.media.audio.providers[providerId]).\n */\n buildRequest: (params: {\n provider: MediaUnderstandingProvider;\n attachment: CapabilityAttachmentInput;\n }) =>\n | AudioTranscriptionRequest\n | ImageDescriptionRequest\n | VideoDescriptionRequest\n | undefined;\n /** Optional global timeout signal (e.g. from agent-level cancellation). */\n signal?: AbortSignal;\n}\n\nconst KIND_BY_CAPABILITY: Record<MediaCapability, MediaUnderstandingKind> = {\n audio: 'audio.transcription',\n image: 'image.description',\n video: 'video.description',\n};\n\nfunction orderProviders(\n providers: MediaUnderstandingProvider[],\n capability: MediaCapability,\n override?: readonly string[],\n): MediaUnderstandingProvider[] {\n if (override && override.length > 0) {\n const lookup = new Map(providers.map((p) => [p.id.toLowerCase(), p]));\n const ordered: MediaUnderstandingProvider[] = [];\n const used = new Set<string>();\n for (const id of override) {\n const provider = lookup.get(id.toLowerCase());\n if (provider && !used.has(provider.id)) {\n ordered.push(provider);\n used.add(provider.id);\n }\n }\n // Append any registered providers not in the override (preserves capability\n // availability when the override list is incomplete).\n for (const provider of providers) {\n if (!used.has(provider.id)) {\n ordered.push(provider);\n }\n }\n return ordered;\n }\n return [...providers].sort((a, b) => {\n const aPriority = a.autoPriority?.[capability] ?? Number.MAX_SAFE_INTEGER;\n const bPriority = b.autoPriority?.[capability] ?? Number.MAX_SAFE_INTEGER;\n return aPriority - bPriority;\n });\n}\n\nfunction pickMethod(\n provider: MediaUnderstandingProvider,\n capability: MediaCapability,\n): ((req: never) => Promise<{ text: string; model?: string }>) | undefined {\n if (capability === 'audio') {\n return provider.transcribeAudio as (\n req: AudioTranscriptionRequest,\n ) => Promise<AudioTranscriptionResult>;\n }\n if (capability === 'image') {\n return provider.describeImage as (\n req: ImageDescriptionRequest,\n ) => Promise<ImageDescriptionResult>;\n }\n return provider.describeVideo as (\n req: VideoDescriptionRequest,\n ) => Promise<VideoDescriptionResult>;\n}\n\nexport async function runCapability(\n options: RunCapabilityOptions,\n): Promise<MediaUnderstandingResult> {\n const eligibleProviders = listProvidersForCapability(options.capability);\n\n // Capability outcome is 'disabled' when no registered provider implements it.\n if (eligibleProviders.length === 0) {\n log.debug(\n { capability: options.capability },\n `No providers registered for capability \"${options.capability}\"`,\n );\n return {\n decision: {\n capability: options.capability,\n outcome: 'disabled',\n attachments: options.attachments.map((a) => ({\n attachmentIndex: a.attachmentIndex,\n attempts: [],\n })),\n },\n outputs: [],\n };\n }\n\n if (options.attachments.length === 0) {\n return {\n decision: { capability: options.capability, outcome: 'no-attachment', attachments: [] },\n outputs: [],\n };\n }\n\n const providers = orderProviders(eligibleProviders, options.capability, options.providerOrder);\n const attachmentDecisions: MediaUnderstandingAttachmentDecision[] = [];\n const outputs: MediaUnderstandingOutput[] = [];\n\n for (const attachment of options.attachments) {\n options.signal?.throwIfAborted();\n\n const attempts: MediaUnderstandingModelDecision[] = [];\n let chosen: MediaUnderstandingModelDecision | undefined;\n\n for (const provider of providers) {\n const method = pickMethod(provider, options.capability);\n if (!method) {\n // Defensive: registry filter should already exclude these. Recorded as\n // skipped so callers can diagnose registry/method mismatches.\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'skipped',\n reason: `provider \"${provider.id}\" missing method for capability \"${options.capability}\"`,\n });\n continue;\n }\n const request = options.buildRequest({ provider, attachment });\n if (!request) {\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'skipped',\n reason: 'caller buildRequest returned undefined (likely missing config)',\n });\n continue;\n }\n const startedAt = Date.now();\n try {\n // We narrow `method` by capability above; cast through `unknown` to keep\n // a single call site without per-capability ceremony.\n const callResult = await (method as (req: unknown) => Promise<{ text: string; model?: string }>)(\n request,\n );\n const text = callResult.text?.trim() ?? '';\n if (!text) {\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'failed',\n reason: 'empty transcription/description text',\n model: callResult.model,\n latencyMs: Date.now() - startedAt,\n });\n continue;\n }\n chosen = {\n provider: provider.id,\n type: 'provider',\n outcome: 'success',\n model: callResult.model,\n latencyMs: Date.now() - startedAt,\n };\n attempts.push(chosen);\n outputs.push({\n kind: KIND_BY_CAPABILITY[options.capability],\n attachmentIndex: attachment.attachmentIndex,\n text,\n provider: provider.id,\n model: callResult.model,\n });\n break;\n } catch (error) {\n if (options.signal?.aborted) {\n throw error;\n }\n const reason = error instanceof Error ? error.message : String(error);\n log.warn(\n {\n err: error,\n providerId: provider.id,\n capability: options.capability,\n attachmentIndex: attachment.attachmentIndex,\n },\n `Provider \"${provider.id}\" failed for ${options.capability}: ${reason}`,\n );\n attempts.push({\n provider: provider.id,\n type: 'provider',\n outcome: 'failed',\n reason,\n latencyMs: Date.now() - startedAt,\n });\n }\n }\n\n attachmentDecisions.push({\n attachmentIndex: attachment.attachmentIndex,\n attempts,\n ...(chosen ? { chosen } : {}),\n });\n }\n\n const overallOutcome = attachmentDecisions.every((d) => d.chosen)\n ? 'success'\n : attachmentDecisions.some((d) => d.chosen)\n ? 'success' // partial success — at least one attachment succeeded\n : 'failed';\n\n return {\n decision: {\n capability: options.capability,\n outcome: overallOutcome,\n attachments: attachmentDecisions,\n },\n outputs,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"default-capability-preset.js","names":[],"sources":["../../../../src/migrations/config/default-capability-preset.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\n\nimport {\n CapabilityPresetSchema,\n DEFAULT_CAPABILITY_PRESET_ID,\n type CapabilityPreset,\n} from '../../agent-manifest/schema.js';\nimport { ConfigSchema, type Config } from '../../config/schema.js';\nimport type { Migration, MigrationContext, MigrationPlanItem } from '../types.js';\n\nexport const DEFAULT_CAPABILITY_PRESET_MIGRATION_ID = '2026-07-ensure-default-capability-preset';\n\nexport function createDefaultCapabilityPreset(): CapabilityPreset {\n return {\n id: DEFAULT_CAPABILITY_PRESET_ID,\n name: 'Global defaults',\n description: 'Default capabilities inherited by every agent.',\n version: 1,\n models: {\n defaultRole: 'deep',\n roles: {},\n },\n };\n}\n\nexport function ensureDefaultCapabilityPresetInitialized(config: Config): { config: Config; changed: boolean } {\n const agents = config.agents;\n const capabilityPresets = { ...(agents.capabilityPresets ?? {}) };\n let changed = false;\n\n if (!capabilityPresets[DEFAULT_CAPABILITY_PRESET_ID]) {\n capabilityPresets[DEFAULT_CAPABILITY_PRESET_ID] = createDefaultCapabilityPreset();\n changed = true;\n }\n\n const defaultPreset = agents.defaultPreset?.trim() || DEFAULT_CAPABILITY_PRESET_ID;\n if (defaultPreset !== agents.defaultPreset) {\n changed = true;\n }\n\n if (!changed) return { config, changed: false };\n\n return {\n config: ConfigSchema.parse({\n ...config,\n agents: {\n ...agents,\n defaultPreset,\n capabilityPresets,\n },\n }),\n changed: true,\n };\n}\n\nfunction planned(message: string, details?: Record<string, unknown>): MigrationPlanItem {\n return {\n id: DEFAULT_CAPABILITY_PRESET_MIGRATION_ID,\n title: 'Initialize global default capability preset',\n kind: 'config',\n safety: 'auto',\n status: 'planned',\n message,\n details,\n };\n}\n\nfunction conflict(message: string, details?: Record<string, unknown>): MigrationPlanItem {\n return {\n id: DEFAULT_CAPABILITY_PRESET_MIGRATION_ID,\n title: 'Initialize global default capability preset',\n kind: 'config',\n safety: 'manual',\n status: 'conflict',\n message,\n details,\n };\n}\n\nfunction readRawConfigObject(configPath: string): Record<string, unknown> | null {\n if (!existsSync(configPath)) return null;\n const raw = readFileSync(configPath, 'utf8');\n const parsed = JSON.parse(raw) as unknown;\n if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('Config root must be an object');\n }\n return parsed as Record<string, unknown>;\n}\n\nexport const defaultCapabilityPresetMigration: Migration = {\n id: DEFAULT_CAPABILITY_PRESET_MIGRATION_ID,\n kind: 'config',\n safety: 'auto',\n\n detect(ctx: MigrationContext): MigrationPlanItem | null {\n const raw = readRawConfigObject(ctx.configPath);\n if (!raw) return null;\n\n const rawAgents = raw.agents;\n if (rawAgents !== undefined && (rawAgents === null || typeof rawAgents !== 'object' || Array.isArray(rawAgents))) {\n return conflict('agents config is not an object; cannot initialize global defaults automatically.');\n }\n\n const agents = (rawAgents ?? {}) as Record<string, unknown>;\n const rawPresets = agents.capabilityPresets;\n if (rawPresets !== undefined && (rawPresets === null || typeof rawPresets !== 'object' || Array.isArray(rawPresets))) {\n return conflict('agents.capabilityPresets is not an object; cannot initialize global defaults automatically.');\n }\n\n const presets = (rawPresets ?? {}) as Record<string, unknown>;\n const existingDefault = presets[DEFAULT_CAPABILITY_PRESET_ID];\n if (existingDefault !== undefined) {\n const parsedPreset = CapabilityPresetSchema.safeParse(existingDefault);\n if (!parsedPreset.success) {\n return conflict('Existing default capability preset is invalid; please repair it manually.', {\n issues: parsedPreset.error.issues.slice(0, 5).map((issue) => ({\n path: issue.path.join('.'),\n message: issue.message,\n })),\n });\n }\n }\n\n const needsDefaultPresetPointer = typeof agents.defaultPreset !== 'string' || agents.defaultPreset.trim().length === 0;\n const needsDefaultPresetObject = existingDefault === undefined;\n if (!needsDefaultPresetPointer && !needsDefaultPresetObject) return null;\n\n return planned('Global default capability preset is missing and will be initialized.', {\n addDefaultPresetPointer: needsDefaultPresetPointer,\n addDefaultPresetObject: needsDefaultPresetObject,\n });\n },\n\n apply(ctx: MigrationContext): MigrationPlanItem {\n const detected = this.detect(ctx);\n if (!detected) {\n return {\n id: this.id,\n title: 'Initialize global default capability preset',\n kind: 'config',\n safety: 'auto',\n status: 'not_needed',\n message: 'Global default capability preset is already initialized.',\n };\n }\n if (detected.status === 'conflict') return detected;\n\n const raw = readRawConfigObject(ctx.configPath);\n const parsed = ConfigSchema.parse(raw ?? undefined);\n const ensured = ensureDefaultCapabilityPresetInitialized(parsed);\n if (!ensured.changed) {\n return { ...detected, status: 'not_needed', message: 'Global default capability preset is already initialized.' };\n }\n\n return {\n ...detected,\n status: 'applied',\n message: 'Initialized global default capability preset.',\n details: { ...detected.details, config: ensured.config },\n };\n },\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","names":[],"sources":["../../../src/migrations/registry.ts"],"sourcesContent":["import type { Migration } from './types.js';\n\nexport type RegisteredMigration = {\n source: string;\n migration: Migration;\n};\n\nconst registeredMigrations = new Map<string, RegisteredMigration>();\n\nexport function registerMigration(source: string, migration: Migration): void {\n registeredMigrations.set(`${source}:${migration.id}`, { source, migration });\n}\n\nexport function unregisterMigrationsForSource(source: string): void {\n for (const [key, value] of registeredMigrations.entries()) {\n if (value.source === source) registeredMigrations.delete(key);\n }\n}\n\nexport function listRegisteredMigrations(): RegisteredMigration[] {\n return [...registeredMigrations.values()];\n}\n"],"mappings":";AAOA,MAAM,uCAAuB,IAAI,KAAkC;AAEnE,SAAgB,kBAAkB,QAAgB,WAA4B;AAC5E,sBAAqB,IAAI,GAAG,OAAO,GAAG,UAAU,MAAM;EAAE;EAAQ;EAAW,CAAC;;AAG9E,SAAgB,8BAA8B,QAAsB;AAClE,MAAK,MAAM,CAAC,KAAK,UAAU,qBAAqB,SAAS,CACvD,KAAI,MAAM,WAAW,OAAQ,sBAAqB,OAAO,IAAI;;AAIjE,SAAgB,2BAAkD;AAChE,QAAO,CAAC,GAAG,qBAAqB,QAAQ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","names":[],"sources":["../../../src/migrations/runner.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\n\nimport { ConfigSchema, type Config } from '../config/schema.js';\nimport { createLogger } from '../utils/logger.js';\nimport { defaultCapabilityPresetMigration } from './config/default-capability-preset.js';\nimport { listRegisteredMigrations } from './registry.js';\nimport type { Migration, MigrationContext, MigrationLedger, MigrationPlanItem } from './types.js';\n\nconst log = createLogger('Migrations');\nconst MIGRATION_LEDGER_FILENAME = 'migrations.json';\nconst CONFIG_BACKUP_COUNT = 10;\n\nconst CONFIG_MIGRATIONS: readonly Migration[] = [defaultCapabilityPresetMigration];\nexport const CORE_MIGRATIONS: readonly Migration[] = [...CONFIG_MIGRATIONS];\n\nfunction listAllMigrations(): Migration[] {\n return [...CORE_MIGRATIONS, ...listRegisteredMigrations().map((entry) => entry.migration)];\n}\n\nexport type MigrationApplyMode = 'auto-safe' | 'doctor-fix' | 'manual';\n\nexport interface MigrationApplyResult {\n items: MigrationPlanItem[];\n changed: boolean;\n}\n\nfunction publicItem(item: MigrationPlanItem): MigrationPlanItem {\n if (!item.details || !Object.hasOwn(item.details, 'config')) return item;\n const { config: _config, ...details } = item.details;\n return { ...item, details };\n}\n\nfunction makeContext(configPath: string, stateDir?: string): MigrationContext {\n return { configPath, stateDir: stateDir ?? dirname(configPath), now: new Date() };\n}\n\nfunction rotateConfigBackupsSync(configPath: string): void {\n const backupBase = `${configPath}.bak`;\n for (let index = CONFIG_BACKUP_COUNT - 1; index >= 1; index--) {\n const source = index === 1 ? backupBase : `${backupBase}.${index - 1}`;\n const target = `${backupBase}.${index}`;\n if (existsSync(source)) {\n try { renameSync(source, target); } catch { /* best effort */ }\n }\n }\n}\n\nfunction writeConfigWithBackupSync(configPath: string, config: Config): void {\n const validated = ConfigSchema.parse(config);\n mkdirSync(dirname(configPath), { recursive: true });\n if (existsSync(configPath)) {\n rotateConfigBackupsSync(configPath);\n try {\n writeFileSync(`${configPath}.bak`, readFileSync(configPath, 'utf8'), 'utf8');\n } catch {\n // best-effort backup; atomic write below still proceeds\n }\n }\n const tmp = `${configPath}.tmp-${process.pid}-${Date.now()}`;\n writeFileSync(tmp, `${JSON.stringify(validated, null, 2)}\\n`, 'utf8');\n renameSync(tmp, configPath);\n}\n\nfunction resolveLedgerPath(ctx: MigrationContext): string | null {\n if (!ctx.stateDir) return null;\n return join(ctx.stateDir, MIGRATION_LEDGER_FILENAME);\n}\n\nfunction readLedger(ctx: MigrationContext): MigrationLedger {\n const ledgerPath = resolveLedgerPath(ctx);\n if (!ledgerPath || !existsSync(ledgerPath)) return { version: 1, runs: [] };\n try {\n const parsed = JSON.parse(readFileSync(ledgerPath, 'utf8')) as Partial<MigrationLedger>;\n if (parsed.version === 1 && Array.isArray(parsed.runs)) {\n return { version: 1, runs: parsed.runs as MigrationLedger['runs'] };\n }\n } catch {\n // Corrupt migration ledgers should never block runtime startup.\n }\n return { version: 1, runs: [] };\n}\n\nfunction appendLedgerRun(ctx: MigrationContext, item: MigrationPlanItem): void {\n const ledgerPath = resolveLedgerPath(ctx);\n if (!ledgerPath) return;\n try {\n const ledger = readLedger(ctx);\n ledger.runs.push({\n id: item.id,\n status: item.status,\n appliedAt: (ctx.now ?? new Date()).toISOString(),\n message: item.message,\n });\n mkdirSync(dirname(ledgerPath), { recursive: true });\n writeFileSync(ledgerPath, `${JSON.stringify(ledger, null, 2)}\\n`, 'utf8');\n } catch (err) {\n const em = err instanceof Error ? err.message : String(err);\n log.warn({ err, errorMessage: em, path: ledgerPath }, `Failed to write migration ledger: ${em}`);\n }\n}\n\nfunction shouldApply(item: MigrationPlanItem, mode: MigrationApplyMode): boolean {\n if (item.status !== 'planned') return false;\n if (mode === 'manual') return true;\n return item.safety === 'auto';\n}\n\nexport function detectMigrations(configPath: string, options: { stateDir?: string } = {}): MigrationPlanItem[] {\n const ctx = makeContext(configPath, options.stateDir);\n const items: MigrationPlanItem[] = [];\n for (const migration of listAllMigrations()) {\n try {\n const item = migration.detect(ctx);\n if (item) items.push(publicItem(item));\n } catch (err) {\n const em = err instanceof Error ? err.message : String(err);\n items.push({\n id: migration.id,\n title: migration.id,\n kind: migration.kind,\n safety: migration.safety,\n status: 'error',\n message: `Migration detection failed: ${em}`,\n });\n }\n }\n return items;\n}\n\nexport function applyMigrations(\n configPath: string,\n options: { stateDir?: string; mode?: MigrationApplyMode } = {},\n): MigrationApplyResult {\n const ctx = makeContext(configPath, options.stateDir);\n const mode = options.mode ?? 'auto-safe';\n const results: MigrationPlanItem[] = [];\n let changed = false;\n\n for (const migration of listAllMigrations()) {\n let detected: MigrationPlanItem | null;\n try {\n detected = migration.detect(ctx);\n } catch (err) {\n const em = err instanceof Error ? err.message : String(err);\n results.push({\n id: migration.id,\n title: migration.id,\n kind: migration.kind,\n safety: migration.safety,\n status: 'error',\n message: `Migration detection failed: ${em}`,\n });\n continue;\n }\n\n if (!detected) continue;\n if (!shouldApply(detected, mode)) {\n results.push(publicItem(detected));\n continue;\n }\n\n try {\n const applied = migration.apply(ctx);\n const nextConfig = applied.details?.config;\n if (applied.status === 'applied' && nextConfig) {\n writeConfigWithBackupSync(configPath, ConfigSchema.parse(nextConfig));\n changed = true;\n appendLedgerRun(ctx, applied);\n }\n results.push(publicItem(applied));\n } catch (err) {\n const em = err instanceof Error ? err.message : String(err);\n results.push({\n ...detected,\n status: 'error',\n message: `Migration apply failed: ${em}`,\n });\n }\n }\n\n return { items: results, changed };\n}\n\nexport function runBootstrapMigrationsSync(configPath: string, options: { stateDir?: string } = {}): MigrationApplyResult {\n if (!existsSync(configPath)) return { items: [], changed: false };\n const result = applyMigrations(configPath, { ...options, mode: 'auto-safe' });\n if (result.changed) {\n log.info({ configPath, count: result.items.filter((item) => item.status === 'applied').length }, 'Applied bootstrap migrations');\n }\n return result;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notification-service.js","names":[],"sources":["../../../src/mobile/notification-service.ts"],"sourcesContent":["import { createLogger } from '../utils/logger.js';\nimport type { AutomationRun } from '../automations/domain/types.js';\n\nimport {\n createMobileActivityEvent,\n disableMobileDeviceForPushToken,\n listEnabledMobileDevices,\n} from './notification-store.js';\nimport type {\n MobileActivityEvent,\n MobileNotificationEventType,\n} from './notification-types.js';\n\nconst log = createLogger('MobileNotifications');\nconst EXPO_PUSH_URL = 'https://exp.host/--/api/v2/push/send';\n\ntype GoalPayload = {\n goal?: { id?: unknown; title?: unknown; activeSessionKey?: unknown };\n goalId?: unknown;\n status?: unknown;\n};\n\ntype ExpoPushResult = { status?: string; details?: { error?: string } };\n\nfunction shouldDeliver(type: MobileNotificationEventType, preferences: {\n needsInput: boolean;\n failed: boolean;\n completed: boolean;\n automationFailed: boolean;\n}): boolean {\n if (type === 'goal.needs_input') return preferences.needsInput;\n if (type === 'goal.blocked') return preferences.failed;\n if (type === 'automation.failed') return preferences.automationFailed;\n return preferences.completed;\n}\n\nfunction goalEvent(payload: unknown): Omit<MobileActivityEvent, 'id' | 'createdAt'> | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as GoalPayload;\n const goal = data.goal;\n const goalId = typeof goal?.id === 'string' ? goal.id : typeof data.goalId === 'string' ? data.goalId : '';\n const status = typeof data.status === 'string' ? data.status : '';\n if (!goalId || !['needs_input', 'blocked', 'done'].includes(status)) return null;\n const type: MobileNotificationEventType = status === 'needs_input'\n ? 'goal.needs_input'\n : status === 'blocked'\n ? 'goal.blocked'\n : 'goal.completed';\n const sessionKey = typeof goal?.activeSessionKey === 'string' ? goal.activeSessionKey : '';\n const route = sessionKey ? `/chat/${encodeURIComponent(sessionKey)}` : '/';\n return {\n type,\n entity: { kind: 'goal', id: goalId },\n priority: type === 'goal.needs_input' || type === 'goal.blocked' ? 'high' : 'normal',\n title: type === 'goal.needs_input' ? 'Action needed' : type === 'goal.blocked' ? 'Goal blocked' : 'Goal completed',\n body: typeof goal?.title === 'string' ? goal.title.slice(0, 120) : undefined,\n deepLink: route,\n payload: { route, goalId, eventType: type },\n };\n}\n\nfunction automationEvent(payload: unknown): Omit<MobileActivityEvent, 'id' | 'createdAt'> | null {\n if (!payload || typeof payload !== 'object') return null;\n const run = (payload as { run?: AutomationRun }).run;\n if (!run || (run.status !== 'failed' && run.status !== 'timeout' && run.status !== 'succeeded')) return null;\n const type: MobileNotificationEventType = run.status === 'succeeded'\n ? 'automation.completed'\n : 'automation.failed';\n return {\n type,\n entity: { kind: 'automation', id: run.automationId },\n priority: type === 'automation.failed' ? 'high' : 'normal',\n title: type === 'automation.failed' ? 'Automation failed' : 'Automation completed',\n body: run.automationName.slice(0, 120),\n deepLink: '/automation',\n payload: { route: '/automation', automationId: run.automationId, runId: run.id, eventType: type },\n };\n}\n\n/** Converts gateway domain events into a portable mobile activity and push payload. */\nexport function mobileNotificationEventFromGatewayEvent(\n type: string,\n payload: unknown,\n): Omit<MobileActivityEvent, 'id' | 'createdAt'> | null {\n if (type === 'goal.status.updated') return goalEvent(payload);\n if (type === 'automation.run.completed') return automationEvent(payload);\n return null;\n}\n\nasync function sendExpoPush(token: string, event: MobileActivityEvent): Promise<void> {\n const response = await fetch(EXPO_PUSH_URL, {\n method: 'POST',\n headers: { 'content-type': 'application/json', accept: 'application/json' },\n body: JSON.stringify({\n to: token,\n title: event.title,\n body: event.body,\n sound: event.priority === 'high' ? 'default' : undefined,\n priority: event.priority,\n data: { eventId: event.id, ...event.payload },\n }),\n });\n if (!response.ok) throw new Error(`Expo push request failed (${response.status})`);\n const result = await response.json().catch(() => null) as { data?: ExpoPushResult | ExpoPushResult[] } | null;\n const item = Array.isArray(result?.data) ? result?.data[0] : result?.data;\n if (item?.status === 'error') {\n if (item.details?.error === 'DeviceNotRegistered') {\n disableMobileDeviceForPushToken(token);\n return;\n }\n throw new Error(`Expo push rejected: ${item.details?.error ?? 'unknown error'}`);\n }\n}\n\nexport class MobileNotificationService {\n private readonly sent = new Set<string>();\n\n handleGatewayEvent(type: string, payload: unknown): void {\n const event = mobileNotificationEventFromGatewayEvent(type, payload);\n if (!event) return;\n const dedupeKey = `${event.type}:${event.entity.kind}:${event.entity.id}:${JSON.stringify(event.payload)}`;\n if (this.sent.has(dedupeKey)) return;\n this.sent.add(dedupeKey);\n void this.deliver(event)\n .catch((err) => {\n log.warn({ err, eventType: event.type, entityId: event.entity.id }, 'Mobile notification delivery failed');\n })\n .finally(() => this.sent.delete(dedupeKey));\n }\n\n private async deliver(input: Omit<MobileActivityEvent, 'id' | 'createdAt'>): Promise<void> {\n const event = createMobileActivityEvent(input);\n const devices = listEnabledMobileDevices().filter((device) => shouldDeliver(event.type, device.preferences));\n await Promise.all(devices.map(async (device) => {\n try {\n await sendExpoPush(device.pushToken, event);\n } catch (err) {\n log.warn({ err, eventId: event.id, deviceId: device.id }, 'Mobile push request failed');\n }\n }));\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notification-store.js","names":[],"sources":["../../../src/mobile/notification-store.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport { getSqliteDatabase, runSqliteWriteTransaction } from '../storage/sqlite/transaction.js';\n\nimport {\n DEFAULT_MOBILE_NOTIFICATION_PREFERENCES,\n type MobileActivityEvent,\n type MobileDevice,\n type MobileNotificationPermission,\n type MobileNotificationPreferences,\n type MobilePlatform,\n} from './notification-types.js';\n\ntype MobileDeviceRow = {\n device_id: string;\n platform: string;\n push_token: string;\n enabled: number;\n permissions: string;\n preferences_json: string;\n app_version: string | null;\n last_seen_at: number;\n created_at: number;\n updated_at: number;\n};\n\ntype MobileActivityEventRow = {\n event_id: string;\n event_type: MobileActivityEvent['type'];\n entity_kind: MobileActivityEvent['entity']['kind'];\n entity_id: string;\n priority: MobileActivityEvent['priority'];\n title: string;\n body: string | null;\n deep_link: string;\n payload_json: string;\n created_at: number;\n};\n\nfunction parseJson<T>(raw: string, fallback: T): T {\n try {\n return JSON.parse(raw) as T;\n } catch {\n return fallback;\n }\n}\n\nfunction normalizePreferences(input?: Partial<MobileNotificationPreferences>): MobileNotificationPreferences {\n return {\n needsInput: input?.needsInput ?? DEFAULT_MOBILE_NOTIFICATION_PREFERENCES.needsInput,\n failed: input?.failed ?? DEFAULT_MOBILE_NOTIFICATION_PREFERENCES.failed,\n completed: input?.completed ?? DEFAULT_MOBILE_NOTIFICATION_PREFERENCES.completed,\n automationFailed: input?.automationFailed ?? DEFAULT_MOBILE_NOTIFICATION_PREFERENCES.automationFailed,\n };\n}\n\nfunction deviceFromRow(row: MobileDeviceRow): MobileDevice {\n return {\n id: row.device_id,\n platform: row.platform === 'android' ? 'android' : 'ios',\n pushToken: row.push_token,\n enabled: row.enabled !== 0,\n permissions: row.permissions === 'granted' || row.permissions === 'denied' ? row.permissions : 'unknown',\n preferences: normalizePreferences(parseJson<Partial<MobileNotificationPreferences>>(row.preferences_json, {})),\n appVersion: row.app_version ?? undefined,\n lastSeenAt: row.last_seen_at,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n}\n\nfunction activityFromRow(row: MobileActivityEventRow): MobileActivityEvent {\n return {\n id: row.event_id,\n type: row.event_type,\n entity: { kind: row.entity_kind, id: row.entity_id },\n priority: row.priority,\n title: row.title,\n body: row.body ?? undefined,\n deepLink: row.deep_link,\n payload: parseJson<Record<string, unknown>>(row.payload_json, {}),\n createdAt: row.created_at,\n };\n}\n\nexport type RegisterMobileDeviceInput = {\n id: string;\n platform: MobilePlatform;\n pushToken: string;\n permissions: MobileNotificationPermission;\n preferences?: Partial<MobileNotificationPreferences>;\n appVersion?: string;\n};\n\nexport function registerMobileDevice(input: RegisterMobileDeviceInput): MobileDevice {\n const now = Date.now();\n const preferences = input.preferences\n ? normalizePreferences(input.preferences)\n : getMobileDevice(input.id)?.preferences ?? normalizePreferences();\n runSqliteWriteTransaction((db) => {\n // An Expo token can rotate or be restored onto a new installation id. Keep one\n // active device record per token so the unique index cannot reject a re-register.\n db.prepare(\n `DELETE FROM mobile_devices\n WHERE push_provider = 'expo' AND push_token = ? AND device_id <> ?`,\n ).run(input.pushToken, input.id);\n db.prepare(\n `INSERT INTO mobile_devices (\n device_id, platform, push_token, permissions, preferences_json,\n app_version, last_seen_at, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(device_id) DO UPDATE SET\n platform = excluded.platform,\n push_token = excluded.push_token,\n enabled = 1,\n permissions = excluded.permissions,\n preferences_json = excluded.preferences_json,\n app_version = excluded.app_version,\n last_seen_at = excluded.last_seen_at,\n updated_at = excluded.updated_at`,\n ).run(\n input.id,\n input.platform,\n input.pushToken,\n input.permissions,\n JSON.stringify(preferences),\n input.appVersion?.trim() || null,\n now,\n now,\n now,\n );\n });\n return getMobileDevice(input.id)!;\n}\n\nexport function getMobileDevice(deviceId: string): MobileDevice | null {\n const row = getSqliteDatabase()\n .prepare(`SELECT * FROM mobile_devices WHERE device_id = ?`)\n .get(deviceId) as MobileDeviceRow | undefined;\n return row ? deviceFromRow(row) : null;\n}\n\nexport function listEnabledMobileDevices(): MobileDevice[] {\n return (getSqliteDatabase()\n .prepare(`SELECT * FROM mobile_devices WHERE enabled = 1 AND permissions = 'granted' ORDER BY updated_at DESC`)\n .all() as MobileDeviceRow[]).map(deviceFromRow);\n}\n\nexport function updateMobileDevicePreferences(\n deviceId: string,\n patch: Partial<MobileNotificationPreferences>,\n): MobileDevice | null {\n const current = getMobileDevice(deviceId);\n if (!current) return null;\n const preferences = normalizePreferences({ ...current.preferences, ...patch });\n runSqliteWriteTransaction((db) => {\n db.prepare(`UPDATE mobile_devices SET preferences_json = ?, updated_at = ? WHERE device_id = ?`)\n .run(JSON.stringify(preferences), Date.now(), deviceId);\n });\n return getMobileDevice(deviceId);\n}\n\nexport function removeMobileDevice(deviceId: string): boolean {\n return runSqliteWriteTransaction((db) =>\n db.prepare(`DELETE FROM mobile_devices WHERE device_id = ?`).run(deviceId).changes > 0,\n );\n}\n\nexport function disableMobileDeviceForPushToken(pushToken: string): void {\n runSqliteWriteTransaction((db) => {\n db.prepare(`UPDATE mobile_devices SET enabled = 0, updated_at = ? WHERE push_token = ?`)\n .run(Date.now(), pushToken);\n });\n}\n\nexport type CreateMobileActivityEventInput = Omit<MobileActivityEvent, 'id' | 'createdAt'> & {\n id?: string;\n createdAt?: number;\n};\n\nexport function createMobileActivityEvent(input: CreateMobileActivityEventInput): MobileActivityEvent {\n const event: MobileActivityEvent = {\n ...input,\n id: input.id ?? randomUUID(),\n createdAt: input.createdAt ?? Date.now(),\n };\n runSqliteWriteTransaction((db) => {\n db.prepare(\n `INSERT INTO mobile_activity_events (\n event_id, event_type, entity_kind, entity_id, priority, title, body,\n deep_link, payload_json, created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n event.id,\n event.type,\n event.entity.kind,\n event.entity.id,\n event.priority,\n event.title,\n event.body ?? null,\n event.deepLink,\n JSON.stringify(event.payload),\n event.createdAt,\n );\n });\n return event;\n}\n\nexport function listMobileActivityEvents(options?: { cursor?: number; limit?: number }): {\n items: MobileActivityEvent[];\n nextCursor: number | null;\n} {\n const limit = Math.max(1, Math.min(100, options?.limit ?? 50));\n const cursor = options?.cursor;\n const rows = (cursor == null\n ? getSqliteDatabase().prepare(`SELECT * FROM mobile_activity_events ORDER BY created_at DESC LIMIT ?`).all(limit)\n : getSqliteDatabase().prepare(`SELECT * FROM mobile_activity_events WHERE created_at < ? ORDER BY created_at DESC LIMIT ?`).all(cursor, limit)\n ) as MobileActivityEventRow[];\n const items = rows.map(activityFromRow);\n return { items, nextCursor: items.length === limit ? items[items.length - 1]!.createdAt : null };\n}\n\nexport function acknowledgeMobileActivityEvent(eventId: string, deviceId: string): boolean {\n if (!getMobileDevice(deviceId)) return false;\n const exists = getSqliteDatabase()\n .prepare(`SELECT 1 FROM mobile_activity_events WHERE event_id = ?`)\n .get(eventId);\n if (!exists) return false;\n runSqliteWriteTransaction((db) => {\n db.prepare(\n `INSERT OR REPLACE INTO mobile_activity_acknowledgements (event_id, device_id, acknowledged_at)\n VALUES (?, ?, ?)`,\n ).run(eventId, deviceId, Date.now());\n });\n return true;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notification-types.js","names":[],"sources":["../../../src/mobile/notification-types.ts"],"sourcesContent":["export type MobilePlatform = 'ios' | 'android';\nexport type MobileNotificationPermission = 'granted' | 'denied' | 'unknown';\nexport type MobileNotificationPriority = 'normal' | 'high';\nexport type MobileNotificationEventType =\n | 'goal.needs_input'\n | 'goal.blocked'\n | 'goal.completed'\n | 'automation.failed'\n | 'automation.completed';\n\nexport type MobileNotificationPreferences = {\n needsInput: boolean;\n failed: boolean;\n completed: boolean;\n automationFailed: boolean;\n};\n\nexport type MobileDevice = {\n id: string;\n platform: MobilePlatform;\n pushToken: string;\n enabled: boolean;\n permissions: MobileNotificationPermission;\n preferences: MobileNotificationPreferences;\n appVersion?: string;\n lastSeenAt: number;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type MobileActivityEvent = {\n id: string;\n type: MobileNotificationEventType;\n entity: { kind: 'goal' | 'automation'; id: string };\n priority: MobileNotificationPriority;\n title: string;\n body?: string;\n deepLink: string;\n payload: Record<string, unknown>;\n createdAt: number;\n};\n\nexport const DEFAULT_MOBILE_NOTIFICATION_PREFERENCES: MobileNotificationPreferences = {\n needsInput: true,\n failed: true,\n completed: false,\n automationFailed: true,\n};\n"],"mappings":";AA0CA,MAAa,0CAAyE;CACpF,YAAY;CACZ,QAAQ;CACR,WAAW;CACX,kBAAkB;CACnB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-context.js","names":[],"sources":["../../../src/notes/agent-context.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { extname } from 'node:path';\n\nimport type { ImageContent } from '@earendil-works/pi-ai';\n\nimport type { Config } from '../config/schema.js';\nimport type { AgentSourceContext } from '../agent/source-context/types.js';\nimport { getNoteAgentContextRecord, upsertNoteAgentContextRecord } from '../storage/sqlite/index.js';\nimport { mergeSttConfigFromAppConfig } from '../channels/attachments/voice-stt-webchat.js';\nimport { extractDocumentText } from '../document-understanding/extract.js';\nimport { describeImagesWithFallback } from '../agent/image/understanding/runtime.js';\nimport { resolveImageModelConfigForTool } from '../agent/image/tool-model-config.js';\nimport { isSTTAvailable, transcribe } from '../voice/stt/index.js';\nimport type { Note, NoteAttachment, SnapshotTrigger } from './types.js';\n\nconst MAX_NOTE_MARKDOWN_CHARS = 40_000;\nconst MAX_TEXT_ATTACHMENT_CHARS = 20_000;\nconst MAX_TOTAL_CONTEXT_CHARS = 80_000;\nconst MAX_NATIVE_VISION_IMAGES = 4;\nconst MAX_NATIVE_VISION_IMAGE_BYTES = 8 * 1024 * 1024;\n\nexport interface NoteAgentAttachmentContext {\n attachmentId: string;\n type: NoteAttachment['type'];\n fileName: string;\n mimeType: string;\n size: number;\n status: 'ready' | 'unsupported' | 'failed';\n summary?: string;\n transcript?: string;\n extractedText?: string;\n error?: string;\n}\n\nexport interface NoteAgentContextArtifact {\n noteId: string;\n noteUpdatedAt: number;\n contextVersion: string;\n generatedAt: number;\n text: string;\n attachments: NoteAgentAttachmentContext[];\n tokenEstimate: number;\n truncated: boolean;\n status: 'ready' | 'partial' | 'failed';\n}\n\ninterface NoteAgentContextNotesService {\n getAttachmentPath(noteId: string, attachmentId: string): Promise<{ filePath: string; mimeType: string; fileName: string } | null>;\n updateNote(id: string, patch: Partial<Note>, trigger?: SnapshotTrigger): Promise<Note | null>;\n}\n\nconst TEXT_MIME_PREFIXES = ['text/'];\nconst TEXT_MIME_TYPES = new Set([\n 'application/json', 'application/ld+json', 'application/xml', 'application/yaml', 'application/x-yaml',\n 'application/javascript', 'application/typescript',\n]);\nconst TEXT_EXTENSIONS = new Set([\n '.txt', '.md', '.markdown', '.json', '.jsonl', '.csv', '.tsv', '.xml', '.yaml', '.yml', '.log', '.js', '.ts', '.tsx', '.jsx', '.css', '.html', '.sql',\n]);\nconst DOCUMENT_EXTENSIONS = new Set(['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx']);\n\nfunction truncateText(text: string, maxChars: number): { text: string; truncated: boolean } {\n if (text.length <= maxChars) return { text, truncated: false };\n return { text: `${text.slice(0, maxChars)}\\n\\n[truncated ${text.length - maxChars} chars]`, truncated: true };\n}\n\nfunction isTextLikeAttachment(att: NoteAttachment): boolean {\n const mime = att.mimeType.toLowerCase();\n if (TEXT_MIME_PREFIXES.some((prefix) => mime.startsWith(prefix))) return true;\n if (TEXT_MIME_TYPES.has(mime)) return true;\n return TEXT_EXTENSIONS.has(extname(att.fileName).toLowerCase());\n}\n\nfunction isDocumentAttachment(att: NoteAttachment): boolean {\n const mime = att.mimeType.toLowerCase();\n return mime === 'application/pdf'\n || mime.includes('officedocument')\n || DOCUMENT_EXTENSIONS.has(extname(att.fileName).toLowerCase());\n}\n\nfunction formatTime(ms: number | undefined): string {\n return typeof ms === 'number' && Number.isFinite(ms) ? new Date(ms).toISOString() : 'unknown';\n}\n\nasync function readAttachmentBuffer(notesService: NoteAgentContextNotesService, noteId: string, att: NoteAttachment): Promise<Buffer | null> {\n const located = await notesService.getAttachmentPath(noteId, att.id);\n if (!located) return null;\n return readFile(located.filePath).catch(() => null);\n}\n\nasync function attachmentTextExcerpt(notesService: NoteAgentContextNotesService, noteId: string, att: NoteAttachment): Promise<string | null> {\n if (!isTextLikeAttachment(att)) return null;\n const located = await notesService.getAttachmentPath(noteId, att.id);\n if (!located) return null;\n const raw = await readFile(located.filePath, 'utf8').catch(() => null);\n if (raw === null) return null;\n return truncateText(raw, MAX_TEXT_ATTACHMENT_CHARS).text;\n}\n\nasync function ensureMediaTranscript(params: {\n note: Note;\n att: NoteAttachment;\n notesService: NoteAgentContextNotesService;\n config?: Config;\n}): Promise<string | undefined> {\n const existing = params.att.transcript?.trim();\n if (existing) return existing;\n if (params.att.type !== 'audio' && params.att.type !== 'video') return undefined;\n\n const sttConfig = mergeSttConfigFromAppConfig(params.config?.tools?.media?.audio, params.config?.tools?.media);\n if (!isSTTAvailable(sttConfig)) return undefined;\n const buffer = await readAttachmentBuffer(params.notesService, params.note.id, params.att);\n if (!buffer) return undefined;\n const result = await transcribe(buffer, sttConfig);\n const transcript = result.text?.trim();\n if (!transcript) return undefined;\n const attachments = (params.note.attachments ?? []).map((item) =>\n item.id === params.att.id ? { ...item, transcript } : item,\n );\n await params.notesService.updateNote(params.note.id, { attachments }, 'ai_edit').catch(() => null);\n params.att.transcript = transcript;\n return transcript;\n}\n\nasync function describeImageAttachment(params: {\n note: Note;\n att: NoteAttachment;\n notesService: NoteAgentContextNotesService;\n config?: Config;\n}): Promise<string | undefined> {\n const toolCfg = resolveImageModelConfigForTool({ cfg: params.config });\n const primary = toolCfg?.primary;\n if (!primary) return undefined;\n const buffer = await readAttachmentBuffer(params.notesService, params.note.id, params.att);\n if (!buffer) return undefined;\n const result = await describeImagesWithFallback({\n modelRef: primary,\n fallbacks: toolCfg.fallbacks ?? [],\n images: [{ buffer, mimeType: params.att.mimeType }],\n prompt: `Describe this note attachment for later AI discussion. File name: ${params.att.fileName}. Focus on visible text, diagrams, UI, objects, and any product-relevant details.`,\n maxTokens: 1024,\n timeoutMs: 30_000,\n });\n return result.text.trim() || undefined;\n}\n\nasync function extractDocumentAttachment(params: {\n note: Note;\n att: NoteAttachment;\n notesService: NoteAgentContextNotesService;\n}): Promise<string | undefined> {\n const buffer = await readAttachmentBuffer(params.notesService, params.note.id, params.att);\n if (!buffer) return undefined;\n const result = extractDocumentText({ buffer, fileName: params.att.fileName, mimeType: params.att.mimeType });\n if (!result.ok) return undefined;\n return truncateText(result.text, MAX_TEXT_ATTACHMENT_CHARS).text;\n}\n\nfunction fallbackImageSummary(att: NoteAttachment): string {\n return `Image attachment available for native vision models: ${att.fileName} (${att.mimeType}, ${att.size} bytes). Configure an image understanding model to persist a text summary for non-vision models.`;\n}\n\nfunction fallbackVideoSummary(att: NoteAttachment): string {\n return `Video attachment available: ${att.fileName} (${att.mimeType}, ${att.size} bytes). Audio transcription will be included when STT accepts this media.`;\n}\n\nfunction unsupportedDocumentSummary(att: NoteAttachment): string {\n return `Document extraction is not available for ${att.fileName} (${att.mimeType}).`;\n}\n\nasync function buildAttachmentContext(params: {\n note: Note;\n att: NoteAttachment;\n notesService: NoteAgentContextNotesService;\n config?: Config;\n}): Promise<NoteAgentAttachmentContext> {\n const { note, att, notesService, config } = params;\n try {\n if (att.type === 'audio') {\n const transcript = await ensureMediaTranscript({ note, att, notesService, config });\n return transcript\n ? { attachmentId: att.id, type: att.type, fileName: att.fileName, mimeType: att.mimeType, size: att.size, status: 'ready', transcript }\n : { attachmentId: att.id, type: att.type, fileName: att.fileName, mimeType: att.mimeType, size: att.size, status: 'unsupported', summary: 'Audio transcription is not configured or produced no transcript.' };\n }\n const extractedText = await attachmentTextExcerpt(notesService, note.id, att);\n if (extractedText) {\n return { attachmentId: att.id, type: att.type, fileName: att.fileName, mimeType: att.mimeType, size: att.size, status: 'ready', extractedText };\n }\n if (att.type === 'image') {\n const summary = await describeImageAttachment({ note, att, notesService, config }).catch(() => undefined);\n return { attachmentId: att.id, type: att.type, fileName: att.fileName, mimeType: att.mimeType, size: att.size, status: summary ? 'ready' : 'unsupported', summary: summary ?? fallbackImageSummary(att) };\n }\n if (att.type === 'video') {\n const transcript = await ensureMediaTranscript({ note, att, notesService, config }).catch(() => undefined);\n return transcript\n ? { attachmentId: att.id, type: att.type, fileName: att.fileName, mimeType: att.mimeType, size: att.size, status: 'ready', transcript, summary: fallbackVideoSummary(att) }\n : { attachmentId: att.id, type: att.type, fileName: att.fileName, mimeType: att.mimeType, size: att.size, status: 'unsupported', summary: fallbackVideoSummary(att) };\n }\n if (isDocumentAttachment(att)) {\n const extractedDocumentText = await extractDocumentAttachment({ note, att, notesService }).catch(() => undefined);\n return extractedDocumentText\n ? { attachmentId: att.id, type: att.type, fileName: att.fileName, mimeType: att.mimeType, size: att.size, status: 'ready', extractedText: extractedDocumentText }\n : { attachmentId: att.id, type: att.type, fileName: att.fileName, mimeType: att.mimeType, size: att.size, status: 'unsupported', summary: unsupportedDocumentSummary(att) };\n }\n return { attachmentId: att.id, type: att.type, fileName: att.fileName, mimeType: att.mimeType, size: att.size, status: 'unsupported', summary: 'No extractor is configured for this attachment type.' };\n } catch (err) {\n return { attachmentId: att.id, type: att.type, fileName: att.fileName, mimeType: att.mimeType, size: att.size, status: 'failed', error: err instanceof Error ? err.message : String(err) };\n }\n}\n\nfunction renderAttachmentContext(att: NoteAgentAttachmentContext): string {\n const lines = [\n `### Attachment: ${att.fileName}`,\n `- id: ${att.attachmentId}`,\n `- type: ${att.type}`,\n `- mimeType: ${att.mimeType}`,\n `- size: ${att.size}`,\n `- status: ${att.status}`,\n ];\n if (att.transcript) lines.push('', 'Transcript:', truncateText(att.transcript, MAX_TEXT_ATTACHMENT_CHARS).text);\n if (att.extractedText) lines.push('', 'Extracted text:', truncateText(att.extractedText, MAX_TEXT_ATTACHMENT_CHARS).text);\n if (att.summary) lines.push('', 'Summary:', att.summary);\n if (att.error) lines.push('', 'Error:', att.error);\n return lines.join('\\n');\n}\n\nasync function loadNativeVisionImages(notesService: NoteAgentContextNotesService, note: Note): Promise<ImageContent[]> {\n const images: ImageContent[] = [];\n for (const att of note.attachments ?? []) {\n if (att.type !== 'image') continue;\n if (!att.mimeType.toLowerCase().startsWith('image/')) continue;\n if (att.size > MAX_NATIVE_VISION_IMAGE_BYTES) continue;\n const buffer = await readAttachmentBuffer(notesService, note.id, att);\n if (!buffer || buffer.length > MAX_NATIVE_VISION_IMAGE_BYTES) continue;\n images.push({ type: 'image', data: buffer.toString('base64'), mimeType: att.mimeType });\n if (images.length >= MAX_NATIVE_VISION_IMAGES) break;\n }\n return images;\n}\n\nexport async function buildNoteAgentContextArtifact(params: {\n note: Note;\n notesService: NoteAgentContextNotesService;\n config?: Config;\n force?: boolean;\n}): Promise<NoteAgentContextArtifact> {\n const { note, notesService, config, force } = params;\n if (!force) {\n const cached = getNoteAgentContextRecord<NoteAgentContextArtifact>(note.id);\n if (cached && cached.noteUpdatedAt === note.updatedAt && cached.contextVersion === String(note.updatedAt)) {\n return cached.payload;\n }\n }\n\n const markdown = truncateText(note.markdown.trim() || '(empty)', MAX_NOTE_MARKDOWN_CHARS);\n let truncated = markdown.truncated;\n const attachmentContexts: NoteAgentAttachmentContext[] = [];\n for (const att of note.attachments ?? []) {\n attachmentContexts.push(await buildAttachmentContext({ note, att, notesService, config }));\n }\n\n const blocks = [\n `# Source Note: ${note.title?.trim() || 'Untitled'}`,\n '',\n `- noteId: ${note.id}`,\n `- kind: ${note.kind}`,\n `- status: ${note.status}`,\n `- createdAt: ${formatTime(note.createdAt)}`,\n `- updatedAt: ${formatTime(note.updatedAt)}`,\n note.tags?.length ? `- tags: ${note.tags.join(', ')}` : '- tags: []',\n '',\n '## Markdown',\n markdown.text,\n ];\n if (attachmentContexts.length > 0) {\n blocks.push('', '## Attachments');\n for (const att of attachmentContexts) blocks.push('', renderAttachmentContext(att));\n }\n\n const finalText = truncateText(blocks.join('\\n'), MAX_TOTAL_CONTEXT_CHARS);\n truncated = truncated || finalText.truncated;\n const failed = attachmentContexts.filter((att) => att.status === 'failed').length;\n const unsupported = attachmentContexts.filter((att) => att.status === 'unsupported').length;\n const artifact: NoteAgentContextArtifact = {\n noteId: note.id,\n noteUpdatedAt: note.updatedAt,\n contextVersion: String(note.updatedAt),\n generatedAt: Date.now(),\n text: finalText.text,\n attachments: attachmentContexts,\n tokenEstimate: Math.ceil(finalText.text.length / 4),\n truncated,\n status: failed > 0 ? 'failed' : unsupported > 0 ? 'partial' : 'ready',\n };\n upsertNoteAgentContextRecord({\n noteId: note.id,\n noteUpdatedAt: note.updatedAt,\n contextVersion: artifact.contextVersion,\n generatedAt: artifact.generatedAt,\n payload: artifact,\n });\n return artifact;\n}\n\nexport async function buildNoteAgentContext(params: {\n note: Note;\n notesService: NoteAgentContextNotesService;\n config?: Config;\n force?: boolean;\n}): Promise<AgentSourceContext> {\n const artifact = await buildNoteAgentContextArtifact(params);\n const images = await loadNativeVisionImages(params.notesService, params.note);\n return {\n kind: 'note',\n sourceId: params.note.id,\n version: artifact.contextVersion,\n title: params.note.title?.trim() || 'Untitled',\n text: artifact.text,\n ...(images.length ? { images } : {}),\n tokenEstimate: artifact.tokenEstimate,\n truncated: artifact.truncated,\n };\n}\n\nexport function getCachedNoteAgentContextArtifact(noteId: string): NoteAgentContextArtifact | null {\n return getNoteAgentContextRecord<NoteAgentContextArtifact>(noteId)?.payload ?? null;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-ref.js","names":[],"sources":["../../../src/notes/attachment-ref.ts"],"sourcesContent":["/** Canonical persisted reference: xopc-attachment://notes/{noteId}/{attachmentId} */\nexport const NOTE_ATTACHMENT_SCHEME = 'xopc-attachment';\n\nconst CANONICAL_REF =\n /^xopc-attachment:\\/\\/notes\\/([^/]+)\\/([^/?#]+)$/i;\n\nexport type ParsedNoteAttachmentRef = {\n noteId: string;\n attachmentId: string;\n};\n\nexport function buildNoteAttachmentRef(noteId: string, attachmentId: string): string {\n return `${NOTE_ATTACHMENT_SCHEME}://notes/${encodeURIComponent(noteId)}/${encodeURIComponent(attachmentId)}`;\n}\n\nexport function parseNoteAttachmentTarget(\n target: string,\n expectedNoteId?: string,\n): ParsedNoteAttachmentRef | null {\n const trimmed = target.trim();\n if (!trimmed) return null;\n\n const canonical = trimmed.split('?')[0].match(CANONICAL_REF);\n if (!canonical) return null;\n\n const noteId = decodeURIComponent(canonical[1]);\n const attachmentId = decodeURIComponent(canonical[2]);\n if (expectedNoteId && noteId !== expectedNoteId) return null;\n return { noteId, attachmentId };\n}\n\nexport function attachmentIdFromTarget(target: string, noteId: string): string | undefined {\n return parseNoteAttachmentTarget(target, noteId)?.attachmentId;\n}\n"],"mappings":";;AACA,MAAa,yBAAyB;AAEtC,MAAM,gBACJ;AAOF,SAAgB,uBAAuB,QAAgB,cAA8B;AACnF,QAAO,GAAG,uBAAuB,WAAW,mBAAmB,OAAO,CAAC,GAAG,mBAAmB,aAAa;;AAG5G,SAAgB,0BACd,QACA,gBACgC;CAChC,MAAM,UAAU,OAAO,MAAM;AAC7B,KAAI,CAAC,QAAS,QAAO;CAErB,MAAM,YAAY,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAM,cAAc;AAC5D,KAAI,CAAC,UAAW,QAAO;CAEvB,MAAM,SAAS,mBAAmB,UAAU,GAAG;CAC/C,MAAM,eAAe,mBAAmB,UAAU,GAAG;AACrD,KAAI,kBAAkB,WAAW,eAAgB,QAAO;AACxD,QAAO;EAAE;EAAQ;EAAc;;AAGjC,SAAgB,uBAAuB,QAAgB,QAAoC;AACzF,QAAO,0BAA0B,QAAQ,OAAO,EAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"note-attachment-sync.js","names":[],"sources":["../../../src/notes/note-attachment-sync.ts"],"sourcesContent":["import type { Note, NoteAttachment } from './types.js';\nimport { parseNoteMarkdown } from './note-markdown.js';\n\nexport function collectReferencedAttachmentIds(note: Pick<Note, 'id' | 'markdown'>): Set<string> {\n return new Set(parseNoteMarkdown(note.markdown, note.id).attachments.map((item) => item.attachmentId));\n}\n\nexport function partitionAttachmentsByReference(\n note: Pick<Note, 'id' | 'markdown' | 'attachments'>,\n): { kept: NoteAttachment[]; removed: NoteAttachment[] } {\n const referenced = collectReferencedAttachmentIds(note);\n const attachments = note.attachments ?? [];\n const kept: NoteAttachment[] = [];\n const removed: NoteAttachment[] = [];\n\n for (const attachment of attachments) {\n if (referenced.has(attachment.id)) kept.push(attachment);\n else removed.push(attachment);\n }\n\n return { kept, removed };\n}\n"],"mappings":";;AAGA,SAAgB,+BAA+B,MAAkD;AAC/F,QAAO,IAAI,IAAI,kBAAkB,KAAK,UAAU,KAAK,GAAG,CAAC,YAAY,KAAK,SAAS,KAAK,aAAa,CAAC;;AAGxG,SAAgB,gCACd,MACuD;CACvD,MAAM,aAAa,+BAA+B,KAAK;CACvD,MAAM,cAAc,KAAK,eAAe,EAAE;CAC1C,MAAM,OAAyB,EAAE;CACjC,MAAM,UAA4B,EAAE;AAEpC,MAAK,MAAM,cAAc,YACvB,KAAI,WAAW,IAAI,WAAW,GAAG,CAAE,MAAK,KAAK,WAAW;KACnD,SAAQ,KAAK,WAAW;AAG/B,QAAO;EAAE;EAAM;EAAS"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"note-index-meta.js","names":[],"sources":["../../../src/notes/note-index-meta.ts"],"sourcesContent":["import type { Note } from './types.js';\nimport { attachmentIdFromTarget, parseNoteAttachmentTarget } from './attachment-ref.js';\nimport { parseNoteMarkdown } from './note-markdown.js';\n\nconst SNIPPET_LENGTH = 100;\nconst MARKDOWN_IMAGE = /!\\[([^\\]]*)\\]\\(([^)]+)\\)/g;\nconst MARKDOWN_LINK = /(?<!!)\\[([^\\]]*)\\]\\(([^)]+)\\)/g;\nconst BARE_ATTACHMENT_REF = /xopc-attachment:\\/\\/notes\\/[^/]+\\/[^/?#\"'\\s)]+/gi;\n\nexport { parseNoteAttachmentTarget, buildNoteAttachmentRef } from './attachment-ref.js';\n\nexport function notePlainText(note: Pick<Note, 'id' | 'markdown'>): string {\n return note.markdown ?? '';\n}\n\nfunction isNoteMediaTarget(target: string): boolean {\n return parseNoteAttachmentTarget(target) !== null;\n}\n\nexport function stripMediaFromPlainText(text: string): string {\n let result = text.replace(MARKDOWN_IMAGE, ' ');\n result = result.replace(MARKDOWN_LINK, (full, _alt, target) => {\n if (typeof target !== 'string') return full;\n return isNoteMediaTarget(target) ? ' ' : full;\n });\n result = result.replace(BARE_ATTACHMENT_REF, ' ');\n return result.replace(/\\s+/g, ' ').trim();\n}\n\nexport function extractAttachmentFileNames(note: Pick<Note, 'attachments'>): string[] | undefined {\n const names = note.attachments?.map((item) => item.fileName.trim().toLowerCase()).filter(Boolean);\n if (!names?.length) return undefined;\n return [...new Set(names)];\n}\n\nexport function extractCoverAttachmentId(note: Note): string | undefined {\n const text = notePlainText(note);\n if (!text.trim()) return undefined;\n\n for (const match of text.matchAll(MARKDOWN_IMAGE)) {\n const target = match[2];\n if (typeof target !== 'string') continue;\n const attachmentId = attachmentIdFromTarget(target, note.id);\n if (!attachmentId) continue;\n const attachment = note.attachments?.find((item) => item.id === attachmentId);\n if (!attachment || attachment.type === 'image') return attachmentId;\n }\n\n for (const match of text.matchAll(BARE_ATTACHMENT_REF)) {\n const parsed = parseNoteAttachmentTarget(match[0], note.id);\n if (!parsed) continue;\n const attachment = note.attachments?.find((item) => item.id === parsed.attachmentId);\n if (!attachment || attachment.type === 'image') return parsed.attachmentId;\n }\n\n return undefined;\n}\n\nexport function buildNoteSnippet(note: Pick<Note, 'id' | 'markdown'>): string | undefined {\n const parsed = parseNoteMarkdown(note.markdown, note.id);\n if (!parsed.plainText.trim()) return undefined;\n const clean = stripMediaFromPlainText(parsed.plainText);\n if (!clean) return undefined;\n return clean.length > SNIPPET_LENGTH ? `${clean.slice(0, SNIPPET_LENGTH)}…` : clean;\n}\n\nfunction extractVoiceAttachment(note: Note): { voiceAttachmentId?: string; voiceDurationSec?: number } {\n const audio = note.attachments?.find((a) => a.type === 'audio');\n if (!audio) return {};\n return { voiceAttachmentId: audio.id, voiceDurationSec: audio.duration };\n}\n\nexport function buildNoteIndexMeta(note: Note): {\n snippet?: string;\n coverAttachmentId?: string;\n voiceAttachmentId?: string;\n voiceDurationSec?: number;\n attachmentNames?: string[];\n headingCount?: number;\n taskCount?: number;\n uncheckedTaskCount?: number;\n linkCount?: number;\n} {\n const parsed = parseNoteMarkdown(note.markdown, note.id);\n const coverAttachmentId = extractCoverAttachmentId(note);\n const snippet = buildNoteSnippet(note);\n const attachmentNames = extractAttachmentFileNames(note);\n const { voiceAttachmentId, voiceDurationSec } = extractVoiceAttachment(note);\n return {\n snippet,\n coverAttachmentId,\n voiceAttachmentId,\n voiceDurationSec,\n attachmentNames,\n headingCount: parsed.headings.length,\n taskCount: parsed.tasks.length,\n uncheckedTaskCount: parsed.tasks.filter((task) => !task.checked).length,\n linkCount: parsed.wikilinks.length,\n };\n}\n"],"mappings":";;;AAIA,MAAM,iBAAiB;AACvB,MAAM,iBAAiB;AACvB,MAAM,gBAAgB;AACtB,MAAM,sBAAsB;AAI5B,SAAgB,cAAc,MAA6C;AACzE,QAAO,KAAK,YAAY;;AAG1B,SAAS,kBAAkB,QAAyB;AAClD,QAAO,0BAA0B,OAAO,KAAK;;AAG/C,SAAgB,wBAAwB,MAAsB;CAC5D,IAAI,SAAS,KAAK,QAAQ,gBAAgB,IAAI;AAC9C,UAAS,OAAO,QAAQ,gBAAgB,MAAM,MAAM,WAAW;AAC7D,MAAI,OAAO,WAAW,SAAU,QAAO;AACvC,SAAO,kBAAkB,OAAO,GAAG,MAAM;GACzC;AACF,UAAS,OAAO,QAAQ,qBAAqB,IAAI;AACjD,QAAO,OAAO,QAAQ,QAAQ,IAAI,CAAC,MAAM;;AAG3C,SAAgB,2BAA2B,MAAuD;CAChG,MAAM,QAAQ,KAAK,aAAa,KAAK,SAAS,KAAK,SAAS,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,QAAQ;AACjG,KAAI,CAAC,OAAO,OAAQ,QAAO,KAAA;AAC3B,QAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC;;AAG5B,SAAgB,yBAAyB,MAAgC;CACvE,MAAM,OAAO,cAAc,KAAK;AAChC,KAAI,CAAC,KAAK,MAAM,CAAE,QAAO,KAAA;AAEzB,MAAK,MAAM,SAAS,KAAK,SAAS,eAAe,EAAE;EACjD,MAAM,SAAS,MAAM;AACrB,MAAI,OAAO,WAAW,SAAU;EAChC,MAAM,eAAe,uBAAuB,QAAQ,KAAK,GAAG;AAC5D,MAAI,CAAC,aAAc;EACnB,MAAM,aAAa,KAAK,aAAa,MAAM,SAAS,KAAK,OAAO,aAAa;AAC7E,MAAI,CAAC,cAAc,WAAW,SAAS,QAAS,QAAO;;AAGzD,MAAK,MAAM,SAAS,KAAK,SAAS,oBAAoB,EAAE;EACtD,MAAM,SAAS,0BAA0B,MAAM,IAAI,KAAK,GAAG;AAC3D,MAAI,CAAC,OAAQ;EACb,MAAM,aAAa,KAAK,aAAa,MAAM,SAAS,KAAK,OAAO,OAAO,aAAa;AACpF,MAAI,CAAC,cAAc,WAAW,SAAS,QAAS,QAAO,OAAO;;;AAMlE,SAAgB,iBAAiB,MAAyD;CACxF,MAAM,SAAS,kBAAkB,KAAK,UAAU,KAAK,GAAG;AACxD,KAAI,CAAC,OAAO,UAAU,MAAM,CAAE,QAAO,KAAA;CACrC,MAAM,QAAQ,wBAAwB,OAAO,UAAU;AACvD,KAAI,CAAC,MAAO,QAAO,KAAA;AACnB,QAAO,MAAM,SAAS,iBAAiB,GAAG,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK;;AAGhF,SAAS,uBAAuB,MAAuE;CACrG,MAAM,QAAQ,KAAK,aAAa,MAAM,MAAM,EAAE,SAAS,QAAQ;AAC/D,KAAI,CAAC,MAAO,QAAO,EAAE;AACrB,QAAO;EAAE,mBAAmB,MAAM;EAAI,kBAAkB,MAAM;EAAU;;AAG1E,SAAgB,mBAAmB,MAUjC;CACA,MAAM,SAAS,kBAAkB,KAAK,UAAU,KAAK,GAAG;CACxD,MAAM,oBAAoB,yBAAyB,KAAK;CACxD,MAAM,UAAU,iBAAiB,KAAK;CACtC,MAAM,kBAAkB,2BAA2B,KAAK;CACxD,MAAM,EAAE,mBAAmB,qBAAqB,uBAAuB,KAAK;AAC5E,QAAO;EACL;EACA;EACA;EACA;EACA;EACA,cAAc,OAAO,SAAS;EAC9B,WAAW,OAAO,MAAM;EACxB,oBAAoB,OAAO,MAAM,QAAQ,SAAS,CAAC,KAAK,QAAQ,CAAC;EACjE,WAAW,OAAO,UAAU;EAC7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"note-markdown.js","names":[],"sources":["../../../src/notes/note-markdown.ts"],"sourcesContent":["import { attachmentIdFromTarget } from './attachment-ref.js';\n\nexport interface NoteHeading {\n id: string;\n depth: 1 | 2 | 3 | 4 | 5 | 6;\n title: string;\n start: number;\n end: number;\n path: string[];\n}\n\nexport interface NoteSection {\n id: string;\n heading?: NoteHeading;\n start: number;\n end: number;\n markdown: string;\n plainText: string;\n}\n\nexport interface NoteTaskItem {\n id: string;\n text: string;\n checked: boolean;\n start: number;\n end: number;\n line: number;\n}\n\nexport interface NoteWikiLink {\n raw: string;\n target: string;\n alias?: string;\n heading?: string;\n start: number;\n end: number;\n}\n\nexport interface NoteAttachmentRef {\n attachmentId: string;\n start: number;\n end: number;\n}\n\nexport interface NoteCallout {\n type: string;\n title?: string;\n start: number;\n end: number;\n}\n\nexport interface ParsedNoteMarkdown {\n plainText: string;\n headings: NoteHeading[];\n sections: NoteSection[];\n tasks: NoteTaskItem[];\n tags: string[];\n wikilinks: NoteWikiLink[];\n attachments: NoteAttachmentRef[];\n callouts: NoteCallout[];\n codeBlocks: Array<{ lang?: string; start: number; end: number; code: string }>;\n}\n\nconst WIKILINK = /!??\\[\\[([^\\]]+)\\]\\]/g;\nconst TAG = /(^|\\s)#([\\p{L}\\p{N}_/-]+)/gu;\nconst MARKDOWN_IMAGE = /!\\[([^\\]]*)\\]\\(([^)]+)\\)/g;\nconst MARKDOWN_LINK = /(?<!!)\\[([^\\]]*)\\]\\(([^)]+)\\)/g;\nconst BARE_ATTACHMENT_REF = /xopc-attachment:\\/\\/notes\\/([^/]+)\\/([^/?#\"'\\s)]+)/gi;\n\nfunction stripMarkdown(markdown: string): string {\n return markdown\n .replace(/^---[\\s\\S]*?\\n---\\s*/m, '')\n .replace(/```[\\s\\S]*?```/g, ' ')\n .replace(MARKDOWN_IMAGE, ' ')\n .replace(MARKDOWN_LINK, '$1')\n .replace(WIKILINK, '$1')\n .replace(/^\\s{0,3}>\\s?/gm, '')\n .replace(/^\\s{0,3}#{1,6}\\s+/gm, '')\n .replace(/^\\s*[-*+]\\s+\\[[ xX]\\]\\s+/gm, '')\n .replace(/^\\s*[-*+]\\s+/gm, '')\n .replace(/^\\s*\\d+\\.\\s+/gm, '')\n .replace(/[*_`~]/g, '')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nfunction lineOffsets(markdown: string): Array<{ line: string; start: number; end: number }> {\n const lines: Array<{ line: string; start: number; end: number }> = [];\n let start = 0;\n for (const part of markdown.split(/\\n/)) {\n const end = start + part.length;\n lines.push({ line: part, start, end });\n start = end + 1;\n }\n return lines;\n}\n\nexport function parseNoteMarkdown(markdown = '', noteId?: string): ParsedNoteMarkdown {\n const headings: NoteHeading[] = [];\n const tasks: NoteTaskItem[] = [];\n const callouts: NoteCallout[] = [];\n const codeBlocks: ParsedNoteMarkdown['codeBlocks'] = [];\n const stack: string[] = [];\n let inCode: { start: number; lang?: string; lines: string[] } | null = null;\n\n lineOffsets(markdown).forEach(({ line, start, end }, index) => {\n const fence = /^```\\s*([^`]*)$/.exec(line.trim());\n if (fence) {\n if (inCode) {\n codeBlocks.push({ start: inCode.start, end, lang: inCode.lang, code: inCode.lines.join('\\n') });\n inCode = null;\n } else {\n inCode = { start, lang: fence[1]?.trim() || undefined, lines: [] };\n }\n return;\n }\n if (inCode) {\n inCode.lines.push(line);\n return;\n }\n\n const heading = /^(#{1,6})\\s+(.+?)\\s*$/.exec(line);\n if (heading) {\n const depth = heading[1].length as 1 | 2 | 3 | 4 | 5 | 6;\n stack.length = depth - 1;\n stack[depth - 1] = heading[2].trim();\n headings.push({\n id: `heading-${headings.length + 1}`,\n depth,\n title: heading[2].trim(),\n start,\n end,\n path: stack.slice(0, depth),\n });\n }\n\n const task = /^\\s*[-*+]\\s+\\[([ xX])\\]\\s+(.+)$/.exec(line);\n if (task) {\n tasks.push({\n id: `task-${tasks.length + 1}`,\n text: task[2].trim(),\n checked: task[1].toLowerCase() === 'x',\n start,\n end,\n line: index + 1,\n });\n }\n\n const callout = /^\\s*>\\s*\\[!([A-Za-z0-9_-]+)\\]\\s*(.*)$/.exec(line);\n if (callout) {\n callouts.push({ type: callout[1].toLowerCase(), title: callout[2]?.trim() || undefined, start, end });\n }\n });\n\n if (inCode) {\n codeBlocks.push({ start: inCode.start, end: markdown.length, lang: inCode.lang, code: inCode.lines.join('\\n') });\n }\n\n const sections: NoteSection[] = [];\n if (headings.length === 0) {\n sections.push({ id: 'section-1', start: 0, end: markdown.length, markdown, plainText: stripMarkdown(markdown) });\n } else {\n for (let i = 0; i < headings.length; i += 1) {\n const heading = headings[i];\n const next = headings.slice(i + 1).find((item) => item.depth <= heading.depth);\n const end = next?.start ?? markdown.length;\n const slice = markdown.slice(heading.start, end).trimEnd();\n sections.push({ id: `section-${i + 1}`, heading, start: heading.start, end, markdown: slice, plainText: stripMarkdown(slice) });\n }\n }\n\n const wikilinks: NoteWikiLink[] = [];\n for (const match of markdown.matchAll(WIKILINK)) {\n const rawInner = match[1];\n const [targetPart, alias] = rawInner.split('|');\n const [target, heading] = targetPart.split('#');\n wikilinks.push({ raw: match[0], target: target.trim(), heading: heading?.trim() || undefined, alias: alias?.trim() || undefined, start: match.index ?? 0, end: (match.index ?? 0) + match[0].length });\n }\n\n const tags = new Set<string>();\n for (const match of markdown.matchAll(TAG)) tags.add(match[2]);\n\n const attachments = new Map<string, NoteAttachmentRef>();\n const addAttachment = (target: string, start: number, end: number) => {\n const attachmentId = attachmentIdFromTarget(target, noteId ?? '');\n if (attachmentId) attachments.set(`${attachmentId}:${start}`, { attachmentId, start, end });\n };\n for (const match of markdown.matchAll(MARKDOWN_IMAGE)) addAttachment(match[2], match.index ?? 0, (match.index ?? 0) + match[0].length);\n for (const match of markdown.matchAll(MARKDOWN_LINK)) addAttachment(match[2], match.index ?? 0, (match.index ?? 0) + match[0].length);\n for (const match of markdown.matchAll(BARE_ATTACHMENT_REF)) {\n const start = match.index ?? 0;\n const matchedNoteId = decodeURIComponent(match[1]);\n if (!noteId || matchedNoteId === noteId) attachments.set(`${decodeURIComponent(match[2])}:${start}`, { attachmentId: decodeURIComponent(match[2]), start, end: start + match[0].length });\n }\n\n return {\n plainText: stripMarkdown(markdown),\n headings,\n sections,\n tasks,\n tags: [...tags],\n wikilinks,\n attachments: [...attachments.values()],\n callouts,\n codeBlocks,\n };\n}\n\nexport function applyNotePatch(markdown: string, operations: import('./types.js').NotePatchOperation[], parsed = parseNoteMarkdown(markdown)): string {\n let next = markdown;\n const rangeOps = operations.filter((op) => op.type === 'replaceRange' || op.type === 'insertAt') as Array<Extract<import('./types.js').NotePatchOperation, { type: 'replaceRange' | 'insertAt' }>>;\n for (const op of [...rangeOps].sort((a, b) => (b.type === 'insertAt' ? b.offset : b.from) - (a.type === 'insertAt' ? a.offset : a.from))) {\n if (op.type === 'insertAt') next = `${next.slice(0, op.offset)}${op.markdown}${next.slice(op.offset)}`;\n else next = `${next.slice(0, op.from)}${op.markdown}${next.slice(op.to)}`;\n }\n for (const op of operations) {\n if (op.type === 'appendSection') next = `${next.trimEnd()}\\n\\n## ${op.heading}\\n\\n${op.markdown.trim()}\\n`;\n if (op.type === 'prependSection') next = `## ${op.heading}\\n\\n${op.markdown.trim()}\\n\\n${next.trimStart()}`;\n if (op.type === 'replaceSection') {\n const section = parsed.sections.find((item) => item.id === op.sectionId);\n if (section) next = `${next.slice(0, section.start)}${op.markdown}${next.slice(section.end)}`;\n }\n }\n return next;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","names":[],"sources":["../../../src/notes/paths.ts"],"sourcesContent":["import { join } from 'node:path';\n\nimport { resolveStateDir } from '../config/paths-state.js';\n\nexport function resolveNotesDir(): string {\n return join(resolveStateDir(), 'notes');\n}\n\nexport function resolveNotesIndexPath(): string {\n return join(resolveNotesDir(), 'index.json');\n}\n\nexport function resolveNoteItemPath(noteId: string): string {\n return join(resolveNotesDir(), 'items', `${noteId}.json`);\n}\n\nexport function resolveNoteMediaDir(noteId: string): string {\n return join(resolveNotesDir(), 'media', noteId);\n}\n\nexport function resolveNoteHistoryDir(noteId: string): string {\n return join(resolveNotesDir(), 'history', noteId);\n}\n"],"mappings":";;;kBAE2D;AAE3D,SAAgB,kBAA0B;AACxC,QAAO,KAAK,iBAAiB,EAAE,QAAQ;;AAGzC,SAAgB,wBAAgC;AAC9C,QAAO,KAAK,iBAAiB,EAAE,aAAa;;AAG9C,SAAgB,oBAAoB,QAAwB;AAC1D,QAAO,KAAK,iBAAiB,EAAE,SAAS,GAAG,OAAO,OAAO;;AAG3D,SAAgB,oBAAoB,QAAwB;AAC1D,QAAO,KAAK,iBAAiB,EAAE,SAAS,OAAO;;AAGjD,SAAgB,sBAAsB,QAAwB;AAC5D,QAAO,KAAK,iBAAiB,EAAE,WAAW,OAAO"}
|