@xopcai/xopc 0.0.149 → 0.0.151
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/README.zh-CN.md +10 -0
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/dashscope/src/image-generation-provider.js +0 -2
- package/dist/extensions/demo-memory/src/index.js +0 -2
- package/dist/extensions/fal/src/image-generation-provider.js +0 -2
- package/dist/extensions/feishu/src/actions/message-action-handler.js +0 -2
- package/dist/extensions/feishu/src/adapters/cli-login.js +0 -2
- package/dist/extensions/feishu/src/adapters/gateway-setup.js +0 -2
- package/dist/extensions/feishu/src/adapters/onboard-cli.js +0 -2
- package/dist/extensions/feishu/src/auth/app-registration.js +0 -2
- package/dist/extensions/feishu/src/auth/pairing.js +0 -2
- package/dist/extensions/feishu/src/auth/paths.js +0 -2
- package/dist/extensions/feishu/src/directory/directory-adapter.js +0 -2
- package/dist/extensions/feishu/src/format.js +0 -2
- package/dist/extensions/feishu/src/index.js +0 -2
- package/dist/extensions/feishu/src/outbound/actions.js +0 -2
- package/dist/extensions/feishu/src/outbound/media-load.js +0 -2
- package/dist/extensions/feishu/src/outbound/outbound-adapter.js +0 -2
- package/dist/extensions/feishu/src/pairing/feishu-pairing-prompt.js +0 -2
- package/dist/extensions/feishu/src/pairing-config-resolver.js +0 -2
- package/dist/extensions/feishu/src/plugin.js +0 -2
- package/dist/extensions/feishu/src/schema/config-schema.js +0 -2
- package/dist/extensions/feishu/src/state/accounts.js +0 -2
- package/dist/extensions/feishu/src/state/message-bindings.js +0 -2
- package/dist/extensions/feishu/src/state/thread-bindings.js +0 -2
- package/dist/extensions/feishu/src/status/doctor.js +0 -2
- package/dist/extensions/feishu/src/status/status-adapter.js +0 -2
- package/dist/extensions/feishu/src/streaming/streaming-adapter.js +0 -2
- package/dist/extensions/feishu/src/subagent-hooks.js +0 -2
- package/dist/extensions/feishu/src/tools/docx/docx-batch-insert.js +0 -2
- package/dist/extensions/feishu/src/tools/docx/docx-color-text.d.ts +6 -3386
- package/dist/extensions/feishu/src/tools/docx/docx-color-text.js +0 -2
- package/dist/extensions/feishu/src/tools/docx/docx-table-ops.d.ts +16 -16927
- package/dist/extensions/feishu/src/tools/docx/docx-table-ops.js +0 -2
- package/dist/extensions/feishu/src/tools/tools.js +0 -2
- package/dist/extensions/feishu/src/transport/client/client.js +2 -4
- package/dist/extensions/feishu/src/transport/client/lark-sdk-logger.js +0 -2
- package/dist/extensions/feishu/src/transport/client/lark-sdk.d.ts +3 -0
- package/dist/extensions/feishu/src/transport/client/lark-sdk.js +14 -0
- package/dist/extensions/feishu/src/transport/reliability/dedupe.js +0 -2
- package/dist/extensions/feishu/src/transport/reliability/inbound-pipeline.js +0 -2
- package/dist/extensions/feishu/src/transport/socket-mode/monitor.js +0 -2
- package/dist/extensions/feishu/src/transport/socket-mode/retry.js +0 -2
- package/dist/extensions/feishu/src/transport/text/mentions.js +0 -2
- package/dist/extensions/feishu/src/transport/webhook/monitor.js +3 -5
- package/dist/extensions/feishu/src/ui/config-surface.js +0 -2
- package/dist/extensions/feishu/src/workflow-progress.js +0 -2
- package/dist/extensions/google/src/image-generation-provider.js +0 -2
- package/dist/extensions/minimax/src/image-generation-provider.js +0 -2
- package/dist/extensions/openai/src/image-generation-provider.js +0 -2
- package/dist/extensions/telegram/src/access-control.js +0 -2
- package/dist/extensions/telegram/src/account-manager.js +0 -2
- package/dist/extensions/telegram/src/actions/message-actions.js +0 -2
- package/dist/extensions/telegram/src/adapters/command-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/config-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/debounce-keys.js +0 -2
- package/dist/extensions/telegram/src/adapters/gateway-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/gateway-setup.js +0 -2
- package/dist/extensions/telegram/src/adapters/inbound-access.js +0 -2
- package/dist/extensions/telegram/src/adapters/index.js +0 -2
- package/dist/extensions/telegram/src/adapters/onboard-cli.js +0 -2
- package/dist/extensions/telegram/src/adapters/outbound-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/security-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/setup-wizard.js +0 -2
- package/dist/extensions/telegram/src/adapters/status-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +0 -2
- package/dist/extensions/telegram/src/api-root.js +0 -2
- package/dist/extensions/telegram/src/approval-delivery.js +0 -2
- package/dist/extensions/telegram/src/approval-store.js +0 -2
- package/dist/extensions/telegram/src/caption.js +0 -2
- package/dist/extensions/telegram/src/command-handler.js +0 -2
- package/dist/extensions/telegram/src/config-schema.js +0 -2
- package/dist/extensions/telegram/src/conversation-id.js +0 -2
- package/dist/extensions/telegram/src/dedupe.js +0 -2
- package/dist/extensions/telegram/src/delivery-chat-id.js +0 -2
- package/dist/extensions/telegram/src/doctor.js +0 -2
- package/dist/extensions/telegram/src/draft-stream-lifecycle.js +0 -2
- package/dist/extensions/telegram/src/draft-stream-loop.js +0 -2
- package/dist/extensions/telegram/src/draft-stream.js +0 -2
- package/dist/extensions/telegram/src/errors.js +0 -2
- package/dist/extensions/telegram/src/exec-approval-handler.js +0 -2
- package/dist/extensions/telegram/src/exec-approvals.js +0 -2
- package/dist/extensions/telegram/src/focus-handler.js +0 -2
- package/dist/extensions/telegram/src/format.js +0 -2
- package/dist/extensions/telegram/src/group-config-resolver.js +0 -2
- package/dist/extensions/telegram/src/inbound-coalescer.js +0 -2
- package/dist/extensions/telegram/src/inbound-processor.js +0 -2
- package/dist/extensions/telegram/src/index.js +0 -2
- package/dist/extensions/telegram/src/inline-keyboards.js +0 -2
- package/dist/extensions/telegram/src/network-errors.js +0 -2
- package/dist/extensions/telegram/src/outbound-sender.js +0 -2
- package/dist/extensions/telegram/src/pairing-config-resolver.js +0 -2
- package/dist/extensions/telegram/src/plugin-defaults.js +0 -2
- package/dist/extensions/telegram/src/plugin.js +0 -2
- package/dist/extensions/telegram/src/polling-session.js +0 -2
- package/dist/extensions/telegram/src/proxy-fetch.js +0 -2
- package/dist/extensions/telegram/src/reactions.js +0 -2
- package/dist/extensions/telegram/src/reply-params.js +0 -2
- package/dist/extensions/telegram/src/routing-integration.js +0 -2
- package/dist/extensions/telegram/src/send-options.js +0 -2
- package/dist/extensions/telegram/src/sent-cache.js +0 -2
- package/dist/extensions/telegram/src/startup-errors.js +0 -2
- package/dist/extensions/telegram/src/telegram-actions.js +0 -2
- package/dist/extensions/telegram/src/telegram-draft-errors.js +0 -2
- package/dist/extensions/telegram/src/thread-bindings.js +0 -2
- package/dist/extensions/telegram/src/timeout-abort.js +0 -2
- package/dist/extensions/telegram/src/token-resolver.js +0 -2
- package/dist/extensions/telegram/src/update-offset-store.js +0 -2
- package/dist/extensions/telegram/src/workflow-progress.js +0 -2
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/adapters/onboard-cli.js +0 -2
- package/dist/extensions/weixin/src/api/api.js +0 -2
- package/dist/extensions/weixin/src/api/config-cache.js +0 -2
- package/dist/extensions/weixin/src/api/session-guard.js +0 -2
- package/dist/extensions/weixin/src/api/types.js +0 -2
- package/dist/extensions/weixin/src/auth/accounts.js +0 -2
- package/dist/extensions/weixin/src/auth/login-qr.js +0 -2
- package/dist/extensions/weixin/src/auth/pairing.js +0 -2
- package/dist/extensions/weixin/src/auth/weixin-account-id.js +0 -2
- package/dist/extensions/weixin/src/cdn/aes-ecb.js +0 -2
- package/dist/extensions/weixin/src/cdn/cdn-upload.js +0 -2
- package/dist/extensions/weixin/src/cdn/cdn-url.js +0 -2
- package/dist/extensions/weixin/src/cdn/pic-decrypt.js +0 -2
- package/dist/extensions/weixin/src/cdn/upload.js +0 -2
- package/dist/extensions/weixin/src/cli/gateway-qr-login.js +0 -2
- package/dist/extensions/weixin/src/cli/qr-login.js +0 -2
- package/dist/extensions/weixin/src/config-schema.js +0 -2
- package/dist/extensions/weixin/src/config-surface.js +0 -2
- package/dist/extensions/weixin/src/delivery-to.js +0 -2
- package/dist/extensions/weixin/src/index.js +0 -2
- package/dist/extensions/weixin/src/media/data-url.js +0 -2
- package/dist/extensions/weixin/src/media/media-download.js +0 -2
- package/dist/extensions/weixin/src/media/mime.js +0 -2
- package/dist/extensions/weixin/src/media/silk-transcode.js +0 -2
- package/dist/extensions/weixin/src/messaging/context-token-init.js +0 -2
- package/dist/extensions/weixin/src/messaging/debug-mode.js +0 -2
- package/dist/extensions/weixin/src/messaging/error-notice.js +0 -2
- package/dist/extensions/weixin/src/messaging/inbound.js +0 -2
- package/dist/extensions/weixin/src/messaging/markdown-filter.js +0 -2
- package/dist/extensions/weixin/src/messaging/process-message.js +0 -2
- package/dist/extensions/weixin/src/messaging/send-media.js +0 -2
- package/dist/extensions/weixin/src/messaging/send.js +0 -2
- package/dist/extensions/weixin/src/messaging/slash-commands.js +0 -2
- package/dist/extensions/weixin/src/messaging/typing-ticket-store.js +0 -2
- package/dist/extensions/weixin/src/monitor/monitor.js +0 -2
- package/dist/extensions/weixin/src/outbound-send.js +0 -2
- package/dist/extensions/weixin/src/pairing-config-resolver.js +0 -2
- package/dist/extensions/weixin/src/plugin.js +0 -2
- package/dist/extensions/weixin/src/routing-integration.js +0 -2
- package/dist/extensions/weixin/src/storage/state-dir.js +0 -2
- package/dist/extensions/weixin/src/storage/sync-buf.js +0 -2
- package/dist/extensions/weixin/src/util/logger.js +0 -2
- package/dist/extensions/weixin/src/util/random.js +0 -2
- package/dist/extensions/weixin/src/util/redact.js +0 -2
- package/dist/extensions/weixin/src/workflow-progress.js +0 -2
- package/dist/gateway/static/root/assets/{activity-store-B4s0ipx2.js → activity-store-uu1xu9Pl.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BSccACje.js → agent-avatar-dicebear-BuO-OVfD.js} +1 -1
- package/dist/gateway/static/root/assets/agents-Bpv3h31T.js +2 -0
- package/dist/gateway/static/root/assets/{api-BMdUsNCV.js → api-CwL38LEV.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-DrLGhYkI.js → app-management-settings-panel-B6OU3Eol.js} +1 -1
- package/dist/gateway/static/root/assets/appearance-settings-BaP4GFvN.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-DZKNIMRg.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-BQ17IK9x.js → archive-plugin-CJX3zIh_.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-HXvgWHXu.js → attachment-load-CI1ejk_l.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-CjIWpsch.js → automation-suggestion-card-CjmhICbv.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-BtZl3B8m.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-DifWJzNZ.js → binary-plugins-CZ8nOXqK.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DtRzIkPU.js → block-editor-BoSfyS_j.js} +46 -46
- package/dist/gateway/static/root/assets/browser-settings-page-CL1UiPcb.js +8 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-DazKjWW1.js → capability-presets-api-XzDKxPZ8.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-settings-panel-Cvrw4fD1.js → capability-presets-settings-panel-Dc_uHYgl.js} +2 -2
- package/dist/gateway/static/root/assets/{channel-recipient-api-Bea6if_6.js → channel-recipient-api-DYLBAhFF.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-mALvXpJj.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-CZuEsO5b.js +1 -0
- package/dist/gateway/static/root/assets/{connector-logo-BjbYbJjQ.js → connector-logo-BSjlInHT.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-Cm_E3mmI.js +2 -0
- package/dist/gateway/static/root/assets/desktop-pet-DcJc91-C.js +1 -0
- package/dist/gateway/static/root/assets/desktop-pet-settings-CdeqTa3Q.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-C8zZNUzC.js → directory-picker-path-field-Cp3fpm0k.js} +1 -1
- package/dist/gateway/static/root/assets/{dreaming-settings-gJSw7Adk.js → dreaming-settings-Bwj1O3zr.js} +3 -3
- package/dist/gateway/static/root/assets/{extension-debug-page-DFE5ADJ0.js → extension-debug-page-D_1xpKbZ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CfR-aW8G.js → extension-page-CqZNCj96.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CFIEbs2L.js → extension-settings-page-5MWbtQaQ.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-B6M_ra8U.js → gateway-config-api-Co_IaS34.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-kmeWm2Pt.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DNA3OOzV.js → gateway-startup-retry-BM_xvzl0.js} +1 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-FoO-R4_U.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-CkJq7N5g.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-D88opgcs.js → goals-config-api-DrtsYjXz.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-DRAN-R64.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-D07UL8Jo.js → goals-settings-wq9TKhIZ.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-YCSNOcXC.js → heartbeat-settings-B5zDoHbo.js} +1 -1
- package/dist/gateway/static/root/assets/index-DIlxvrlG.css +1 -0
- package/dist/gateway/static/root/assets/index-apLU0Hun.js +196 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-3tC9iD21.js +1 -0
- package/dist/gateway/static/root/assets/local-app-workbench-page-CT-vDTLK.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CKvtLzsF.js → local-apps-page-B9ruF9GV.js} +1 -1
- package/dist/gateway/static/root/assets/locale-store-GfSwnwIZ.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-Ca1X8X2P.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-BVSFG99p.js → markdown-split-CzuhSQAB.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DdOjIVk3.js → media-plugins-a3R4y-EL.js} +1 -1
- package/dist/gateway/static/root/assets/messages-B0B40tpO.js +5 -0
- package/dist/gateway/static/root/assets/models-hub-panel-CbTlz9Of.js +2 -0
- package/dist/gateway/static/root/assets/{notes-page-ZbLR3awn.js → notes-page-BCxDy2dV.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-z6sBX9B2.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-DMlQERNg.js → page-tabs-CJfk6M78.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-CbiJRPxK.js → preview-open-alternatives-MFopTSgF.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-DU29deIr.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-Ck3DLTlZ.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-gLsLyAyi.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-BZTj3hxl.js → save-bar-controls-D0uhU3Z8.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-CxYDObjT.js → schedule-field-NGOH-7wV.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-CBbXgpKQ.js → schema-form-BJz5LoqG.js} +1 -1
- package/dist/gateway/static/root/assets/schemas-DgQq6Z5S.js +64 -0
- package/dist/gateway/static/root/assets/sessions-page-TmNoWpa_.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CtPhh2m9.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-BySKZ8rp.js → settings-collapsible-section-oDnUHnX_.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-CjINay6t.js → settings-form-section-DND90dDt.js} +1 -1
- package/dist/gateway/static/root/assets/settings-loading-skeleton-CEJtaoQp.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-BNrVwuL7.js → settings-page-B1LJlRi9.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-HdlQOOqp.js → settings-page-layout-CsrLuDsW.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BPCJPHHY.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-DC-eQONB.js → share-preview-page-C1PwLh-p.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-DCuqr7js.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-kn1Vypcy.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-k6VIqTkK.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-CVa90q2f.js → system-settings-panel-BEsrEkSx.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-D1cOpgsy.js → theme-store-Bi6hMBDb.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-DIKF9vpz.js → typed-models-lib-dOypdlMf.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-DnvpI0Ys.js → use-channel-catalog-f8A-PVuq.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-B9Y_Ciav.js +1 -0
- package/dist/gateway/static/root/assets/{user-profile-fields-editor-y8gTmkPX.js → user-profile-fields-editor-DGC38Lx7.js} +1 -1
- package/dist/gateway/static/root/assets/{user-profile-settings-panel-C3pvqe28.js → user-profile-settings-panel-DFkZ-tan.js} +1 -1
- package/dist/gateway/static/root/assets/{utils-BK2vwu_3.js → utils-CEIYZihF.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DK6gaQsA.js +1 -0
- package/dist/gateway/static/root/assets/work-discovery-page-DSJb9Kq7.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-DVavwV3D.js +1 -0
- package/dist/gateway/static/root/assets/work-page-foJDp0nz.js +1 -0
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BYqZpFCC.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-DgO0WAzs.js +11 -0
- package/dist/gateway/static/root/favicon.svg +1 -187
- package/dist/gateway/static/root/index.html +8 -7
- package/dist/gateway/static/root/logo-dark.svg +1 -185
- package/dist/gateway/static/root/logo.svg +1 -185
- package/dist/package.js +1 -3
- package/dist/src/activity/context.js +0 -2
- package/dist/src/activity/emitter.js +0 -2
- package/dist/src/activity/service.js +0 -2
- package/dist/src/agent/agent-manager.d.ts +1 -0
- package/dist/src/agent/agent-manager.js +1 -2
- package/dist/src/agent/agent-scope.js +0 -2
- package/dist/src/agent/background-review/coordinator.js +0 -2
- package/dist/src/agent/background-review/prompts.js +0 -2
- package/dist/src/agent/background-review/run-background-review.js +0 -2
- package/dist/src/agent/background-review/settings.js +0 -2
- package/dist/src/agent/bootstrap/bootstrap-cache.js +0 -2
- package/dist/src/agent/bootstrap/bootstrap-context.js +0 -2
- package/dist/src/agent/bootstrap/bootstrap-files.js +0 -2
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +0 -2
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +0 -2
- package/dist/src/agent/bootstrap/project-agents-context.js +0 -2
- package/dist/src/agent/capabilities/definitions.js +0 -2
- package/dist/src/agent/capabilities/registry.js +0 -2
- package/dist/src/agent/child-agent-factory.js +0 -2
- package/dist/src/agent/client-error-format.js +0 -2
- package/dist/src/agent/code-intelligence/binary.js +0 -2
- package/dist/src/agent/code-intelligence/runtime.js +0 -2
- package/dist/src/agent/code-intelligence/tools.js +0 -2
- package/dist/src/agent/coding/turn-diff-tracker.js +0 -2
- package/dist/src/agent/context/expand-at-file-mentions.js +0 -2
- package/dist/src/agent/context/project-context.js +0 -2
- package/dist/src/agent/context/workspace-seed.js +0 -2
- package/dist/src/agent/context/workspace-state.js +0 -2
- package/dist/src/agent/context/workspace.js +0 -2
- package/dist/src/agent/embedded/run-for-session.js +0 -2
- package/dist/src/agent/embedded/run-turn.js +0 -2
- package/dist/src/agent/embedded/runs.js +0 -2
- package/dist/src/agent/embedded/session-manager-init.js +0 -2
- package/dist/src/agent/embedded/session-runner.js +0 -2
- package/dist/src/agent/embedded/session-tool-result-guard.js +0 -2
- package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js +0 -2
- package/dist/src/agent/embedded/subscribe-session.js +0 -2
- package/dist/src/agent/embedded/system-prompt-override.js +0 -2
- package/dist/src/agent/embedded/tool-result-context-guard.js +0 -2
- package/dist/src/agent/embedded/tool-result-truncation.js +0 -2
- package/dist/src/agent/embedded/xopc-auth-storage.js +0 -2
- package/dist/src/agent/embedded/xopc-stream-bridge.js +0 -2
- package/dist/src/agent/embedded/xopc-tools-bridge.js +0 -2
- package/dist/src/agent/failover-error.js +0 -2
- package/dist/src/agent/fallback/candidates.js +0 -2
- package/dist/src/agent/fallback/reason.js +0 -2
- package/dist/src/agent/feedback/feedback-coordinator.js +0 -2
- package/dist/src/agent/goals/checklist-judge.js +0 -2
- package/dist/src/agent/goals/checklist-types.js +0 -2
- package/dist/src/agent/goals/evaluate-turn.js +0 -2
- package/dist/src/agent/goals/goal-locale.js +0 -2
- package/dist/src/agent/goals/judge.js +0 -2
- package/dist/src/agent/goals/persistent-goal-service.js +0 -2
- package/dist/src/agent/goals/post-turn.js +0 -2
- package/dist/src/agent/goals/state.js +0 -2
- package/dist/src/agent/image/generation/bundled-registry.js +0 -2
- package/dist/src/agent/image/generation/bundled.js +0 -2
- package/dist/src/agent/image/generation/image-assets.js +0 -2
- package/dist/src/agent/image/generation/model-ref.js +0 -2
- package/dist/src/agent/image/generation/normalization.js +0 -2
- package/dist/src/agent/image/generation/openai-compatible-image-provider.js +0 -2
- package/dist/src/agent/image/generation/provider-registry.js +0 -2
- package/dist/src/agent/image/generation/runtime.js +0 -2
- package/dist/src/agent/image/image-helpers.js +0 -2
- package/dist/src/agent/image/image-model-fallback.js +0 -2
- package/dist/src/agent/image/inbound-image-handling.js +0 -2
- package/dist/src/agent/image/load-image-media.js +0 -2
- package/dist/src/agent/image/tool-model-config.js +0 -2
- package/dist/src/agent/image/understanding/pi-ai-provider.js +0 -2
- package/dist/src/agent/image/understanding/provider-registry.js +0 -2
- package/dist/src/agent/image/understanding/runtime.js +0 -2
- package/dist/src/agent/image/vision-detection.js +0 -2
- package/dist/src/agent/inbound/attachment-pipeline.js +0 -2
- package/dist/src/agent/inbound/inbound-loop.js +0 -2
- package/dist/src/agent/inbound/turn-dispatcher.js +0 -2
- package/dist/src/agent/ipc/bus.js +0 -2
- package/dist/src/agent/ipc/inbox.js +0 -2
- package/dist/src/agent/ipc/socket.js +0 -2
- package/dist/src/agent/ipc/types.js +0 -2
- package/dist/src/agent/lifecycle/handlers/compaction.js +0 -2
- package/dist/src/agent/lifecycle/hook-handler.js +0 -2
- package/dist/src/agent/lifecycle/manager.js +0 -2
- package/dist/src/agent/lifecycle/progress.js +0 -2
- package/dist/src/agent/lifecycle/timeout-wrapper.js +0 -2
- package/dist/src/agent/lifecycle/typing.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-config.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-names.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -2
- package/dist/src/agent/mcp/embedded-mcp.js +0 -2
- package/dist/src/agent/mcp/mcp-config-shared.js +0 -2
- package/dist/src/agent/mcp/mcp-http.js +0 -2
- package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -2
- package/dist/src/agent/mcp/mcp-stdio.js +0 -2
- package/dist/src/agent/mcp/mcp-tool-meta.js +0 -2
- package/dist/src/agent/mcp/mcp-transport-config.js +0 -2
- package/dist/src/agent/mcp/mcp-transport.js +0 -2
- package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +0 -2
- package/dist/src/agent/media-generation/model-ref.js +0 -2
- package/dist/src/agent/media-generation/normalization.types.js +0 -2
- package/dist/src/agent/media-generation/runtime-shared.js +0 -2
- package/dist/src/agent/memory/agent-message-access.js +0 -2
- package/dist/src/agent/memory/builtin-memory-store.js +0 -2
- package/dist/src/agent/memory/builtin-provider.js +0 -2
- package/dist/src/agent/memory/compaction.js +0 -2
- package/dist/src/agent/memory/context/planner.js +0 -2
- package/dist/src/agent/memory/context-fence.js +0 -2
- package/dist/src/agent/memory/create-memory-manager.js +0 -2
- package/dist/src/agent/memory/dreaming/config.js +0 -2
- package/dist/src/agent/memory/dreaming/constants.js +0 -2
- package/dist/src/agent/memory/dreaming/deep-promotion.js +0 -2
- package/dist/src/agent/memory/dreaming/events.js +0 -2
- package/dist/src/agent/memory/dreaming/last-run.js +0 -2
- package/dist/src/agent/memory/dreaming/light-sweep.js +0 -2
- package/dist/src/agent/memory/dreaming/preview.js +0 -2
- package/dist/src/agent/memory/dreaming/promotion-lifecycle.js +0 -2
- package/dist/src/agent/memory/dreaming/rem-patterns.js +0 -2
- package/dist/src/agent/memory/dreaming/scope.js +0 -2
- package/dist/src/agent/memory/dreaming/short-term-store.js +0 -2
- package/dist/src/agent/memory/dreaming/utils.js +0 -2
- package/dist/src/agent/memory/lifecycle.js +0 -2
- package/dist/src/agent/memory/manager.js +0 -2
- package/dist/src/agent/memory/memory-config.js +0 -2
- package/dist/src/agent/memory/message-sanitizer.js +0 -2
- package/dist/src/agent/memory/plugin-discovery.js +0 -2
- package/dist/src/agent/memory/sensitivity.js +0 -2
- package/dist/src/agent/memory/source-origin.js +0 -2
- package/dist/src/agent/memory/stub-memory-provider.js +0 -2
- package/dist/src/agent/memory/summary-generator.js +0 -2
- package/dist/src/agent/memory/understanding/correction.js +0 -2
- package/dist/src/agent/memory/understanding/quality.js +0 -2
- package/dist/src/agent/memory/understanding/service.js +0 -2
- package/dist/src/agent/memory/user-context-coordinator.js +0 -2
- package/dist/src/agent/memory/user-message-text.js +0 -2
- package/dist/src/agent/memory/window.js +0 -2
- package/dist/src/agent/messaging/command-handler.js +0 -2
- package/dist/src/agent/messaging/message-router.js +0 -2
- package/dist/src/agent/messaging/outbound-coordinator.js +0 -2
- package/dist/src/agent/messaging/stream-manager.js +0 -2
- package/dist/src/agent/middleware/context.js +0 -2
- package/dist/src/agent/middleware/self-verify.js +0 -2
- package/dist/src/agent/models/manager.js +0 -2
- package/dist/src/agent/models/request-limiter.js +0 -2
- package/dist/src/agent/models/selection.js +0 -2
- package/dist/src/agent/orchestration/agent-event-handler.js +0 -2
- package/dist/src/agent/orchestration/agent-orchestrator.js +0 -2
- package/dist/src/agent/orchestration/llm-turn-retry.js +0 -2
- package/dist/src/agent/orchestration/loop-guard.js +0 -2
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +0 -2
- package/dist/src/agent/prompt/cache-boundary.js +0 -2
- package/dist/src/agent/prompt/memory/index.js +0 -2
- package/dist/src/agent/prompt/safety.js +0 -2
- package/dist/src/agent/prompt/sanitize-for-prompt.js +0 -2
- package/dist/src/agent/prompt/sections/behavior.js +0 -2
- package/dist/src/agent/prompt/sections/memory-skills.js +0 -2
- package/dist/src/agent/prompt/sections/messaging-runtime.js +0 -2
- package/dist/src/agent/prompt/sections/project-context.js +0 -2
- package/dist/src/agent/prompt/sections/tooling.js +0 -2
- package/dist/src/agent/prompt/sections/workspace-runtime.js +0 -2
- package/dist/src/agent/prompt/service-prompt-builder.js +0 -2
- package/dist/src/agent/prompt/subagent-context.js +0 -2
- package/dist/src/agent/prompt/system-prompt-params.js +0 -2
- package/dist/src/agent/prompt/system-prompt.js +0 -2
- package/dist/src/agent/prompt/system-reminder.js +0 -2
- package/dist/src/agent/reply/apply-turn-user-enrichment.js +0 -2
- package/dist/src/agent/reply/post-compaction-context.js +0 -2
- package/dist/src/agent/reply/startup-context.js +0 -2
- package/dist/src/agent/reply/workspace-boundary-read.js +0 -2
- package/dist/src/agent/sandbox/command-validator.js +0 -2
- package/dist/src/agent/sandbox/exec-policy.js +0 -2
- package/dist/src/agent/sandbox/path-policy.js +0 -2
- package/dist/src/agent/sandbox/sanitize-env-vars.js +0 -2
- package/dist/src/agent/sandbox/types.js +0 -2
- package/dist/src/agent/service/async-queue.js +0 -2
- package/dist/src/agent/service/btw-query.js +0 -2
- package/dist/src/agent/service/build-direct-message-content.js +0 -2
- package/dist/src/agent/service/direct-turn-helpers.js +0 -2
- package/dist/src/agent/service/parse-outbound-session-key.js +0 -2
- package/dist/src/agent/service/process-direct-one-shot.js +0 -2
- package/dist/src/agent/service/process-direct-streaming.js +0 -2
- package/dist/src/agent/service/session-context-report.js +0 -2
- package/dist/src/agent/service/webchat-tts.js +0 -2
- package/dist/src/agent/service-inbound-utils.js +0 -2
- package/dist/src/agent/service.js +1 -2
- package/dist/src/agent/service.types.d.ts +2 -0
- package/dist/src/agent/session/session-config-service.js +0 -2
- package/dist/src/agent/session/session-context.js +0 -2
- package/dist/src/agent/session/session-hydrator.js +0 -2
- package/dist/src/agent/session/session-inspector.js +0 -2
- package/dist/src/agent/session/session-lifecycle.js +0 -2
- package/dist/src/agent/session/session-state-bag.js +0 -2
- package/dist/src/agent/session/tracker.js +0 -2
- package/dist/src/agent/skills/config.js +0 -2
- package/dist/src/agent/skills/filesystem-watcher.js +0 -2
- package/dist/src/agent/skills/format-skills-prompt.js +0 -2
- package/dist/src/agent/skills/hub-hash.js +0 -2
- package/dist/src/agent/skills/hub-lock.js +0 -2
- package/dist/src/agent/skills/hub-pull.js +0 -2
- package/dist/src/agent/skills/index.js +0 -2
- package/dist/src/agent/skills/install-target.js +0 -2
- package/dist/src/agent/skills/installer.js +0 -2
- package/dist/src/agent/skills/managed-store.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +0 -2
- package/dist/src/agent/skills/marketplace/marketplace-category-order.js +0 -2
- package/dist/src/agent/skills/marketplace/registry.js +0 -2
- package/dist/src/agent/skills/marketplace/resolve-adapter.js +0 -2
- package/dist/src/agent/skills/parse-skill-metadata.js +0 -2
- package/dist/src/agent/skills/required-env-vars.js +0 -2
- package/dist/src/agent/skills/scanner.js +0 -2
- package/dist/src/agent/skills/skill-manage-ops.js +0 -2
- package/dist/src/agent/skills/skill-manager.js +0 -2
- package/dist/src/agent/skills/skill-markdown-preview-from-raw.js +0 -2
- package/dist/src/agent/skills/skill-tool-gating.js +0 -2
- package/dist/src/agent/skills/skill-view-path.js +0 -2
- package/dist/src/agent/skills/skills-marketplace.js +0 -2
- package/dist/src/agent/skills/test-framework.js +0 -2
- package/dist/src/agent/skills/watcher.js +0 -2
- package/dist/src/agent/skills/workspace-skills-dir.js +0 -2
- package/dist/src/agent/source-context/injector.js +0 -2
- package/dist/src/agent/source-context/types.js +0 -2
- package/dist/src/agent/starter-agents.js +0 -2
- package/dist/src/agent/streaming/reasoning-visibility-sse.js +0 -2
- package/dist/src/agent/tool-manuals/browser.js +0 -2
- package/dist/src/agent/tool-manuals/index.js +0 -2
- package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js +41 -4
- package/dist/src/agent/tools/apply-patch.js +0 -2
- package/dist/src/agent/tools/automation-tool.js +45 -8
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +0 -2
- package/dist/src/agent/tools/browser/tool/schemas.js +0 -2
- package/dist/src/agent/tools/chain-tracker.js +0 -2
- package/dist/src/agent/tools/clarify-tool.js +0 -2
- package/dist/src/agent/tools/cli-clarify.js +0 -2
- package/dist/src/agent/tools/communication.js +0 -2
- package/dist/src/agent/tools/composio-tool.js +0 -2
- package/dist/src/agent/tools/concurrency.js +0 -2
- package/dist/src/agent/tools/create-share-tool.js +0 -2
- package/dist/src/agent/tools/curated-memory-tool.js +0 -2
- package/dist/src/agent/tools/delegate-tool.js +0 -2
- package/dist/src/agent/tools/desktop-pet-tool.d.ts +12 -0
- package/dist/src/agent/tools/desktop-pet-tool.js +28 -2
- package/dist/src/agent/tools/dreaming-tool.js +0 -2
- package/dist/src/agent/tools/edit-diff.js +0 -2
- package/dist/src/agent/tools/error-pattern-matcher.js +0 -2
- package/dist/src/agent/tools/error-tracker.js +0 -2
- package/dist/src/agent/tools/exec-command.js +0 -2
- package/dist/src/agent/tools/execute-code-tool.js +0 -2
- package/dist/src/agent/tools/executor.js +0 -2
- package/dist/src/agent/tools/factory.d.ts +2 -0
- package/dist/src/agent/tools/factory.js +3 -4
- package/dist/src/agent/tools/find.js +0 -2
- package/dist/src/agent/tools/goal-evidence-recorder.js +0 -2
- package/dist/src/agent/tools/goal-tool.d.ts +7 -1
- package/dist/src/agent/tools/goal-tool.js +34 -7
- package/dist/src/agent/tools/grep.js +0 -2
- package/dist/src/agent/tools/image-generate-tool.js +0 -2
- package/dist/src/agent/tools/image-tool.js +0 -2
- package/dist/src/agent/tools/list-dir.js +0 -2
- package/dist/src/agent/tools/media-read-tool.js +0 -2
- package/dist/src/agent/tools/memory-tool.js +0 -2
- package/dist/src/agent/tools/metadata.js +0 -2
- package/dist/src/agent/tools/read.js +0 -2
- package/dist/src/agent/tools/search/http.js +0 -2
- package/dist/src/agent/tools/search/providers/bing-api.js +0 -2
- package/dist/src/agent/tools/search/providers/bing-html.js +0 -2
- package/dist/src/agent/tools/search/providers/brave.js +0 -2
- package/dist/src/agent/tools/search/providers/duckduckgo-html.js +0 -2
- package/dist/src/agent/tools/search/providers/searxng.js +0 -2
- package/dist/src/agent/tools/search/providers/tavily.js +0 -2
- package/dist/src/agent/tools/search/region.js +0 -2
- package/dist/src/agent/tools/search/registry.js +0 -2
- package/dist/src/agent/tools/search/resolve-config.js +0 -2
- package/dist/src/agent/tools/send-media.js +0 -2
- package/dist/src/agent/tools/session-search-tool.js +0 -2
- package/dist/src/agent/tools/session-status-tool.js +0 -2
- package/dist/src/agent/tools/skill-install-tool.js +0 -2
- package/dist/src/agent/tools/skill-manage-tool.js +0 -2
- package/dist/src/agent/tools/skills-tools.js +0 -2
- package/dist/src/agent/tools/structured-output.js +0 -2
- package/dist/src/agent/tools/todo-tool.js +0 -2
- package/dist/src/agent/tools/tool-manual-tool.js +0 -2
- package/dist/src/agent/tools/tool-paths.js +0 -2
- package/dist/src/agent/tools/truncate.js +0 -2
- package/dist/src/agent/tools/tts-tool.js +0 -2
- package/dist/src/agent/tools/update-plan-tool.js +0 -2
- package/dist/src/agent/tools/url-safety.js +0 -2
- package/dist/src/agent/tools/usage-analyzer.js +0 -2
- package/dist/src/agent/tools/web-extract.js +0 -2
- package/dist/src/agent/tools/web.js +4 -4
- package/dist/src/agent/tools/workflow-tool.js +32 -4
- package/dist/src/agent/tools/write.js +23 -5
- package/dist/src/agent/tools/xopc-use-tool.d.ts +6 -2
- package/dist/src/agent/tools/xopc-use-tool.js +216 -8
- package/dist/src/agent/transcript/google-api.js +0 -2
- package/dist/src/agent/transcript/model-selection.js +0 -2
- package/dist/src/agent/transcript/provider-capabilities.js +0 -2
- package/dist/src/agent/transcript/session-transcript-repair.js +0 -2
- package/dist/src/agent/transcript/strip-tool-messages.js +0 -2
- package/dist/src/agent/transcript/thinking-types.js +0 -2
- package/dist/src/agent/transcript/thinking.js +0 -2
- package/dist/src/agent/transcript/tool-call-id.js +0 -2
- package/dist/src/agent/transcript/transcript-hygiene.js +0 -2
- package/dist/src/agent/transcript/transcript-policy.js +0 -2
- package/dist/src/agent/workflow/agent-progress.js +0 -2
- package/dist/src/agent/workflow/builtins/index.js +0 -2
- package/dist/src/agent/workflow/catalog.js +0 -2
- package/dist/src/agent/workflow/progress-broker.js +0 -2
- package/dist/src/agent/workflow/snapshot-empty.js +0 -2
- package/dist/src/agent/workflow/snapshot.js +0 -2
- package/dist/src/agent/workflow/step-labels.js +0 -2
- package/dist/src/agent/workflow/structured-output-tool.js +0 -2
- package/dist/src/agent/workflow/subagent-runner.js +0 -2
- package/dist/src/agent/workflow/workflow-child-tools.js +0 -2
- package/dist/src/agent/workspace-runtime/registry.js +0 -2
- package/dist/src/agent-manifest/index.js +0 -2
- package/dist/src/agent-manifest/preset-chain.js +0 -2
- package/dist/src/agent-manifest/prompt.js +0 -2
- package/dist/src/agent-manifest/resolver.js +0 -2
- package/dist/src/agent-manifest/schema.js +0 -2
- package/dist/src/agent-manifest/validator.js +0 -2
- package/dist/src/agent-runtime/boundary-guard.js +0 -2
- package/dist/src/agent-runtime/memory-runtime.js +0 -2
- package/dist/src/agent-runtime/model-router.js +0 -2
- package/dist/src/agent-runtime/run-trace.js +0 -2
- package/dist/src/agent-runtime/runtime-profile.js +0 -2
- package/dist/src/agent-runtime/tool-registry.js +0 -2
- package/dist/src/agent-runtime/workflow-runtime.js +0 -2
- package/dist/src/ai-assist/text-assist.js +0 -2
- package/dist/src/auth/credentials.js +0 -2
- package/dist/src/auth/index.js +0 -2
- package/dist/src/auth/oauth/anthropic.js +0 -2
- package/dist/src/auth/oauth/github-copilot.js +0 -2
- package/dist/src/auth/oauth/google-oauth/google-antigravity.js +0 -2
- package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js +0 -2
- package/dist/src/auth/oauth/google-oauth/oauth-page.js +0 -2
- package/dist/src/auth/oauth/google-oauth/pkce.js +0 -2
- package/dist/src/auth/oauth/kimi-coding.js +0 -2
- package/dist/src/auth/oauth/minimax-cn.js +0 -2
- package/dist/src/auth/oauth/minimax.js +0 -2
- package/dist/src/auth/oauth/openai-codex.js +0 -2
- package/dist/src/auth/oauth/pkce.js +0 -2
- package/dist/src/auth/profiles/oauth.js +0 -2
- package/dist/src/auth/profiles/order.js +0 -2
- package/dist/src/auth/profiles/profiles.js +0 -2
- package/dist/src/auth/profiles/store.js +0 -2
- package/dist/src/auth/sync-provider-auth.js +0 -2
- package/dist/src/automations/api/routes.js +0 -2
- package/dist/src/automations/domain/schedule.js +0 -2
- package/dist/src/automations/domain/validation.js +0 -2
- package/dist/src/automations/draft/automation-draft-prompt.js +0 -2
- package/dist/src/automations/draft/automation-draft-service.js +0 -2
- package/dist/src/automations/draft/automation-draft-validator.js +0 -2
- package/dist/src/automations/product-events.js +0 -2
- package/dist/src/automations/service/action-executor.js +0 -2
- package/dist/src/automations/service/automation-service.js +0 -2
- package/dist/src/automations/storage/automation-repository.js +0 -2
- package/dist/src/automations/storage/automation-run-repository.js +0 -2
- package/dist/src/browser/actions/extension-registry-bridge.js +0 -2
- package/dist/src/browser/actions/registry.js +0 -2
- package/dist/src/browser/backend-from-config.js +0 -2
- package/dist/src/browser/browser-command-timeout.js +0 -2
- package/dist/src/browser/cache-dir-policy.js +0 -2
- package/dist/src/browser/cdp-local-launcher.js +0 -2
- package/dist/src/browser/cdp-supervisor.js +0 -2
- package/dist/src/browser/free-port.js +0 -2
- package/dist/src/browser/humanize.js +0 -2
- package/dist/src/browser/install-lock.js +0 -2
- package/dist/src/browser/manager.js +0 -2
- package/dist/src/browser/pipeline/output.js +0 -2
- package/dist/src/browser/pipeline/runner.js +0 -2
- package/dist/src/browser/pipeline/schema.js +0 -2
- package/dist/src/browser/pipeline/source.js +0 -2
- package/dist/src/browser/pipeline/template.js +0 -2
- package/dist/src/browser/providers/browser-ext-install.js +0 -2
- package/dist/src/browser/providers/browser-use.js +0 -2
- package/dist/src/browser/providers/browserbase.js +0 -2
- package/dist/src/browser/providers/cloakbrowser.js +0 -2
- package/dist/src/browser/providers/extension-ws-acquire.js +0 -2
- package/dist/src/browser/providers/extension.js +0 -2
- package/dist/src/browser/providers/playwright-doctor.js +13 -4
- package/dist/src/browser/providers/playwright-install.js +0 -2
- package/dist/src/browser/readiness.js +0 -2
- package/dist/src/browser/schemas.js +0 -2
- package/dist/src/browser/session-lifecycle.js +0 -2
- package/dist/src/browser/snapshot-helpers.js +0 -2
- package/dist/src/browser/stealth.js +0 -2
- package/dist/src/browser/url-policy.js +0 -2
- package/dist/src/capabilities/store-connector.js +0 -2
- package/dist/src/channels/attachments/attachment-classifiers.js +0 -2
- package/dist/src/channels/attachments/inbound-persist.js +0 -2
- package/dist/src/channels/attachments/inbound-types.js +0 -2
- package/dist/src/channels/attachments/outbound-tts-persist.js +0 -2
- package/dist/src/channels/attachments/voice-stt-webchat.js +0 -2
- package/dist/src/channels/catalog/channel-catalog-service.js +0 -2
- package/dist/src/channels/config-helpers.js +0 -2
- package/dist/src/channels/envelope-timestamp.js +0 -2
- package/dist/src/channels/exec-approval-runtime.js +0 -2
- package/dist/src/channels/health-monitor.js +0 -2
- package/dist/src/channels/heartbeat-scheduler.js +0 -2
- package/dist/src/channels/internal-outbound.js +0 -2
- package/dist/src/channels/lifecycle-supervisor.js +0 -2
- package/dist/src/channels/manager.js +0 -2
- package/dist/src/channels/media.js +0 -2
- package/dist/src/channels/outbound/deliver.js +0 -2
- package/dist/src/channels/outbound/normalize.js +0 -2
- package/dist/src/channels/outbound/persist-store.js +0 -2
- package/dist/src/channels/outbound/queue.js +0 -2
- package/dist/src/channels/outbound-sender.js +0 -2
- package/dist/src/channels/pairing/allow-from-file.js +0 -2
- package/dist/src/channels/pairing/approve-cli.js +0 -2
- package/dist/src/channels/pairing/pairing-challenge.js +0 -2
- package/dist/src/channels/pairing/pairing-constants.js +0 -2
- package/dist/src/channels/pairing/pairing-events.js +0 -2
- package/dist/src/channels/pairing/pairing-messages.js +0 -2
- package/dist/src/channels/pairing/pairing-service.js +0 -2
- package/dist/src/channels/pairing/pairing-store-adapter.js +0 -2
- package/dist/src/channels/pairing/pairing-store.js +0 -2
- package/dist/src/channels/pairing/paths.js +0 -2
- package/dist/src/channels/pairing/preseed-allow-from.js +0 -2
- package/dist/src/channels/pipeline.js +0 -2
- package/dist/src/channels/plugin-registry.js +0 -2
- package/dist/src/channels/plugins/registry.js +0 -2
- package/dist/src/channels/restart-policy.js +0 -2
- package/dist/src/channels/security-helpers.js +0 -2
- package/dist/src/channels/security.js +0 -2
- package/dist/src/channels/setup-wizard-discovery.js +0 -2
- package/dist/src/chat-commands/agent-edit.js +0 -2
- package/dist/src/chat-commands/builtins/config.js +0 -2
- package/dist/src/chat-commands/builtins/context.js +0 -2
- package/dist/src/chat-commands/builtins/goal.js +0 -2
- package/dist/src/chat-commands/builtins/model.js +0 -2
- package/dist/src/chat-commands/builtins/review.js +0 -2
- package/dist/src/chat-commands/builtins/session.js +0 -2
- package/dist/src/chat-commands/builtins/skill.js +0 -2
- package/dist/src/chat-commands/builtins/subgoal.js +0 -2
- package/dist/src/chat-commands/builtins/system.js +0 -2
- package/dist/src/chat-commands/builtins/thinking.js +0 -2
- package/dist/src/chat-commands/builtins/tts.js +0 -2
- package/dist/src/chat-commands/builtins/workflow.js +0 -2
- package/dist/src/chat-commands/command-parse.js +0 -2
- package/dist/src/chat-commands/config-paths.js +0 -2
- package/dist/src/chat-commands/config-value.js +0 -2
- package/dist/src/chat-commands/context.js +0 -2
- package/dist/src/chat-commands/format-output.js +0 -2
- package/dist/src/chat-commands/index.js +0 -2
- package/dist/src/chat-commands/processor.js +0 -2
- package/dist/src/chat-commands/registry.js +0 -2
- package/dist/src/chat-commands/session-key.js +0 -2
- package/dist/src/cli/argv-invocation.js +0 -2
- package/dist/src/cli/argv.js +0 -2
- package/dist/src/cli/bin.js +0 -2
- package/dist/src/cli/cli-log-level-preset.js +0 -2
- package/dist/src/cli/command-catalog.js +0 -2
- package/dist/src/cli/command-loaders.js +0 -2
- package/dist/src/cli/command-manifest.js +0 -2
- package/dist/src/cli/command-path-matches.js +0 -2
- package/dist/src/cli/command-path-policy.js +0 -2
- package/dist/src/cli/command-startup-policy.js +0 -2
- package/dist/src/cli/commands/agent/interactive.js +0 -2
- package/dist/src/cli/commands/agent/sessions.js +0 -2
- package/dist/src/cli/commands/agent/stream-renderer.js +0 -2
- package/dist/src/cli/commands/agent.js +0 -2
- package/dist/src/cli/commands/agents.js +0 -2
- package/dist/src/cli/commands/auth.js +0 -2
- package/dist/src/cli/commands/browser-cli-helpers.js +0 -2
- package/dist/src/cli/commands/browser.js +0 -2
- package/dist/src/cli/commands/channels.js +0 -2
- package/dist/src/cli/commands/config.js +0 -2
- package/dist/src/cli/commands/connectors.js +0 -2
- package/dist/src/cli/commands/doctor/checks/channel-config.js +0 -2
- package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +0 -2
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js +0 -2
- package/dist/src/cli/commands/doctor/checks/config-health.js +0 -2
- package/dist/src/cli/commands/doctor/checks/database-schema.js +0 -2
- package/dist/src/cli/commands/doctor/checks/gateway-health.js +0 -2
- package/dist/src/cli/commands/doctor/checks/gateway-service.js +0 -2
- package/dist/src/cli/commands/doctor/checks/migrations.js +0 -2
- package/dist/src/cli/commands/doctor/checks/node-version.js +0 -2
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +0 -2
- package/dist/src/cli/commands/doctor/checks/security-audit.js +0 -2
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +0 -2
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +0 -2
- package/dist/src/cli/commands/doctor/checks/version-check.js +0 -2
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +0 -2
- package/dist/src/cli/commands/doctor/flow.js +0 -2
- package/dist/src/cli/commands/doctor/format.js +0 -2
- package/dist/src/cli/commands/doctor/index.js +0 -2
- package/dist/src/cli/commands/extension-create.js +0 -2
- package/dist/src/cli/commands/extension-dev.js +0 -2
- package/dist/src/cli/commands/extension-marketplace.js +0 -2
- package/dist/src/cli/commands/extension-pack.js +0 -2
- package/dist/src/cli/commands/extension.js +0 -2
- package/dist/src/cli/commands/gateway/call.js +0 -2
- package/dist/src/cli/commands/gateway/health.js +0 -2
- package/dist/src/cli/commands/gateway/lifecycle-core.js +0 -2
- package/dist/src/cli/commands/gateway/lifecycle.js +0 -2
- package/dist/src/cli/commands/gateway/logs.js +0 -2
- package/dist/src/cli/commands/gateway/probe.js +0 -2
- package/dist/src/cli/commands/gateway/restart-health.js +0 -2
- package/dist/src/cli/commands/gateway/restart.js +0 -2
- package/dist/src/cli/commands/gateway/run-foreground.js +0 -2
- package/dist/src/cli/commands/gateway/service.js +0 -2
- package/dist/src/cli/commands/gateway/shared.js +0 -2
- package/dist/src/cli/commands/gateway/status.js +0 -2
- package/dist/src/cli/commands/gateway/stop.js +0 -2
- package/dist/src/cli/commands/gateway/subcommands.js +0 -2
- package/dist/src/cli/commands/gateway/token.js +0 -2
- package/dist/src/cli/commands/gateway-ssh-tunnel.js +0 -2
- package/dist/src/cli/commands/gateway.js +0 -2
- package/dist/src/cli/commands/goal.js +0 -2
- package/dist/src/cli/commands/image.js +0 -2
- package/dist/src/cli/commands/init.js +0 -2
- package/dist/src/cli/commands/logs.js +0 -2
- package/dist/src/cli/commands/models.js +0 -2
- package/dist/src/cli/commands/onboard/channels/index.js +0 -2
- package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js +0 -2
- package/dist/src/cli/commands/onboard/channels/registry.js +0 -2
- package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js +0 -2
- package/dist/src/cli/commands/onboard/gateway.js +0 -2
- package/dist/src/cli/commands/onboard/model.js +0 -2
- package/dist/src/cli/commands/onboard.js +0 -2
- package/dist/src/cli/commands/profile.js +0 -2
- package/dist/src/cli/commands/project.js +0 -2
- package/dist/src/cli/commands/providers.js +0 -2
- package/dist/src/cli/commands/resume.js +0 -2
- package/dist/src/cli/commands/search.js +0 -2
- package/dist/src/cli/commands/session/actions.js +0 -2
- package/dist/src/cli/commands/session/utils.js +0 -2
- package/dist/src/cli/commands/session.js +0 -2
- package/dist/src/cli/commands/setup-shared/output.js +0 -2
- package/dist/src/cli/commands/setup-shared/prompts.js +0 -2
- package/dist/src/cli/commands/setup-shared/runner.js +0 -2
- package/dist/src/cli/commands/setup-shared/types.js +0 -2
- package/dist/src/cli/commands/setup.js +0 -2
- package/dist/src/cli/commands/skills-test.js +0 -2
- package/dist/src/cli/commands/skills.js +0 -2
- package/dist/src/cli/commands/tailscale.js +0 -2
- package/dist/src/cli/commands/tui-runner.js +0 -2
- package/dist/src/cli/commands/tui.js +0 -2
- package/dist/src/cli/commands/tunnel.js +0 -2
- package/dist/src/cli/commands/update.js +0 -2
- package/dist/src/cli/commands/voice.js +0 -2
- package/dist/src/cli/context.js +0 -2
- package/dist/src/cli/extension-cli-register.js +0 -2
- package/dist/src/cli/gateway-run-argv.js +0 -2
- package/dist/src/cli/gateway-run-fast-path.js +0 -2
- package/dist/src/cli/index.js +0 -2
- package/dist/src/cli/registry.js +0 -2
- package/dist/src/cli/templates.js +0 -2
- package/dist/src/cli/utils/colors.js +0 -2
- package/dist/src/cli/utils/gateway-client-options.js +0 -2
- package/dist/src/cli/utils/gateway-client.js +0 -2
- package/dist/src/cli/utils/init-workspace-core.js +0 -2
- package/dist/src/cli/utils/init-workspace.js +0 -2
- package/dist/src/cli/utils/oauth-login.js +0 -2
- package/dist/src/cli/utils/oauth-providers.js +0 -2
- package/dist/src/cli/utils/session.js +0 -2
- package/dist/src/commands/agents.config.js +0 -2
- package/dist/src/config/agent-profile.js +0 -2
- package/dist/src/config/agent-typed-models.js +0 -2
- package/dist/src/config/commands.flags.js +0 -2
- package/dist/src/config/default-model.js +0 -2
- package/dist/src/config/diff.js +0 -2
- package/dist/src/config/gateway-bind.js +0 -2
- package/dist/src/config/index.js +0 -2
- package/dist/src/config/loader.js +0 -2
- package/dist/src/config/mcp-config-normalize.js +0 -2
- package/dist/src/config/model-input.js +0 -2
- package/dist/src/config/models-json.js +0 -2
- package/dist/src/config/paths-state.js +0 -2
- package/dist/src/config/paths.js +0 -2
- package/dist/src/config/profile.js +0 -2
- package/dist/src/config/public-url.js +0 -2
- package/dist/src/config/reload.js +0 -2
- package/dist/src/config/resolve-config-value.js +0 -2
- package/dist/src/config/rules.js +0 -2
- package/dist/src/config/runtime-overrides.js +0 -2
- package/dist/src/config/schema.js +0 -2
- package/dist/src/config/validate-channel-configs.js +0 -2
- package/dist/src/config/voice.js +0 -2
- package/dist/src/config/web-patch.js +0 -2
- package/dist/src/config/workspace-defaults.js +0 -2
- package/dist/src/config/workspace-dirs.js +0 -2
- package/dist/src/config/workspace-path-helpers.js +0 -2
- package/dist/src/config/workspace-path.js +0 -2
- package/dist/src/connectors/approval.js +0 -2
- package/dist/src/connectors/auth-provider-registry.js +0 -2
- package/dist/src/connectors/builtin-catalog.js +0 -2
- package/dist/src/connectors/catalog.js +0 -2
- package/dist/src/connectors/composio-catalog.js +0 -2
- package/dist/src/connectors/composio-logo.js +0 -2
- package/dist/src/connectors/composio-sessions.js +9 -5
- package/dist/src/connectors/composio-triggers.js +0 -2
- package/dist/src/connectors/composio.js +0 -2
- package/dist/src/connectors/connector-memory-sync.js +0 -2
- package/dist/src/connectors/health.js +0 -2
- package/dist/src/connectors/install.js +0 -2
- package/dist/src/connectors/instances.js +0 -2
- package/dist/src/connectors/integration-strategy.js +0 -2
- package/dist/src/connectors/lifecycle.js +0 -2
- package/dist/src/connectors/materialize.js +0 -2
- package/dist/src/connectors/policy.js +0 -2
- package/dist/src/connectors/providers.js +0 -2
- package/dist/src/connectors/registries/modelscope.js +0 -2
- package/dist/src/connectors/registries/official-mcp.js +0 -2
- package/dist/src/connectors/registries/search.js +0 -2
- package/dist/src/connectors/registries/smithery.js +0 -2
- package/dist/src/connectors/runtime-adapter-registry.js +0 -2
- package/dist/src/connectors/secret-store.js +0 -2
- package/dist/src/connectors/setup-secrets.js +0 -2
- package/dist/src/connectors/supervisor.js +0 -2
- package/dist/src/connectors/usage.js +0 -2
- package/dist/src/connectors/workflow-preflight.js +0 -2
- package/dist/src/daemon/constants.js +0 -2
- package/dist/src/daemon/install-plan.js +0 -2
- package/dist/src/daemon/launchd.js +0 -2
- package/dist/src/daemon/schtasks.js +0 -2
- package/dist/src/daemon/service-audit.js +0 -2
- package/dist/src/daemon/service.js +0 -2
- package/dist/src/daemon/systemd.js +0 -2
- package/dist/src/document-understanding/extract.js +0 -2
- package/dist/src/errors/index.js +0 -2
- package/dist/src/extensions/activation-context.js +0 -2
- package/dist/src/extensions/activation-planner.js +0 -2
- package/dist/src/extensions/api.js +0 -2
- package/dist/src/extensions/bundle-mcp.js +0 -2
- package/dist/src/extensions/bundled-extension-activation.js +0 -2
- package/dist/src/extensions/diagnostics.js +0 -2
- package/dist/src/extensions/discover-extensions.js +0 -2
- package/dist/src/extensions/engine-check.js +0 -2
- package/dist/src/extensions/extension-metadata-snapshot.js +0 -2
- package/dist/src/extensions/extension-registry-impl.js +0 -2
- package/dist/src/extensions/health.js +0 -2
- package/dist/src/extensions/hooks.js +0 -2
- package/dist/src/extensions/index.js +0 -2
- package/dist/src/extensions/install-transaction.js +0 -2
- package/dist/src/extensions/install.js +0 -2
- package/dist/src/extensions/loader.js +0 -2
- package/dist/src/extensions/lockfile.js +0 -2
- package/dist/src/extensions/manifest-registry.js +0 -2
- package/dist/src/extensions/marketplace.js +0 -2
- package/dist/src/extensions/media-provider-contracts.js +0 -2
- package/dist/src/extensions/normalize-manifest.js +0 -2
- package/dist/src/extensions/onboard-helpers.js +0 -2
- package/dist/src/extensions/package-contract.js +0 -2
- package/dist/src/extensions/sdk/channel-entry.js +0 -2
- package/dist/src/extensions/sdk/channel-helpers.js +0 -2
- package/dist/src/extensions/sdk/index.js +0 -2
- package/dist/src/extensions/sdk/lazy.js +0 -2
- package/dist/src/extensions/sdk/testing.js +0 -2
- package/dist/src/extensions/security.js +0 -2
- package/dist/src/extensions/slots.js +0 -2
- package/dist/src/extensions/speech-provider-contracts.js +0 -2
- package/dist/src/extensions/store-zip-limits.js +0 -2
- package/dist/src/extensions/typed-event-bus.js +0 -2
- package/dist/src/extensions/types/hooks.js +0 -2
- package/dist/src/extensions/types/providers.js +0 -2
- package/dist/src/extensions/update.js +0 -2
- package/dist/src/extensions/when-context.js +0 -2
- package/dist/src/extensions/when-expression.js +0 -2
- package/dist/src/gateway/agent-builtin-tools.js +0 -2
- package/dist/src/gateway/agent-run-relay.js +0 -2
- package/dist/src/gateway/agents-admin.js +0 -2
- package/dist/src/gateway/auth.js +0 -2
- package/dist/src/gateway/capability-presets-admin.js +0 -2
- package/dist/src/gateway/chat-limits.js +0 -2
- package/dist/src/gateway/chat-stream/mapper.js +28 -14
- package/dist/src/gateway/chat-stream/pet-feedback.d.ts +13 -0
- package/dist/src/gateway/chat-stream/pet-feedback.js +45 -0
- package/dist/src/gateway/chat-stream/protocol.d.ts +26 -0
- package/dist/src/gateway/clarify-bridge.js +3 -3
- package/dist/src/gateway/clarify-runtime.js +0 -2
- package/dist/src/gateway/client-ip.js +0 -2
- package/dist/src/gateway/config-tools-web.js +0 -2
- package/dist/src/gateway/credential.js +0 -2
- package/dist/src/gateway/discovery/mdns.js +0 -2
- package/dist/src/gateway/dreaming-automation-reconciler.js +0 -2
- package/dist/src/gateway/ensure-network-cors.js +0 -2
- package/dist/src/gateway/file-path-classifier.js +0 -2
- package/dist/src/gateway/file-reference-registry.js +0 -2
- package/dist/src/gateway/global-defaults-admin.js +0 -2
- package/dist/src/gateway/heartbeat/service.js +0 -2
- package/dist/src/gateway/hono/app.js +0 -2
- package/dist/src/gateway/hono/lib/agent-model.js +0 -2
- package/dist/src/gateway/hono/lib/config-payload.js +0 -2
- package/dist/src/gateway/hono/lib/extension-assets.js +0 -2
- package/dist/src/gateway/hono/lib/extension-store.js +0 -2
- package/dist/src/gateway/hono/lib/mask-secret-length.js +0 -2
- package/dist/src/gateway/hono/lib/route-logger.js +0 -2
- package/dist/src/gateway/hono/lib/safe-providers-config.js +0 -2
- package/dist/src/gateway/hono/lib/safe-voice-config.js +0 -2
- package/dist/src/gateway/hono/lib/startup-unavailable.js +0 -2
- package/dist/src/gateway/hono/lib/static-ui.js +0 -2
- package/dist/src/gateway/hono/middleware/auth.js +0 -2
- package/dist/src/gateway/hono/middleware/log-context.js +0 -2
- package/dist/src/gateway/hono/middleware/logger.js +0 -2
- package/dist/src/gateway/hono/middleware/route-errors.js +0 -2
- package/dist/src/gateway/hono/middleware/scopes.js +0 -2
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js +0 -2
- package/dist/src/gateway/hono/oauth-async.js +0 -2
- package/dist/src/gateway/hono/oauth.js +0 -2
- package/dist/src/gateway/hono/routes/activity.js +0 -2
- package/dist/src/gateway/hono/routes/agent-stream.js +0 -2
- package/dist/src/gateway/hono/routes/agents.js +0 -2
- package/dist/src/gateway/hono/routes/ai-assist.js +0 -2
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +0 -2
- package/dist/src/gateway/hono/routes/browser-install.js +0 -2
- package/dist/src/gateway/hono/routes/browser.js +0 -2
- package/dist/src/gateway/hono/routes/capabilities.js +0 -2
- package/dist/src/gateway/hono/routes/capability-presets.js +0 -2
- package/dist/src/gateway/hono/routes/channels.js +0 -2
- package/dist/src/gateway/hono/routes/commands-skills.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/agents.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/misc.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/result.js +0 -2
- package/dist/src/gateway/hono/routes/config.js +0 -2
- package/dist/src/gateway/hono/routes/connectors.js +0 -2
- package/dist/src/gateway/hono/routes/doctor.js +0 -2
- package/dist/src/gateway/hono/routes/dreaming.js +0 -2
- package/dist/src/gateway/hono/routes/exposure.js +0 -2
- package/dist/src/gateway/hono/routes/extension-gateway.js +0 -2
- package/dist/src/gateway/hono/routes/global-defaults.js +0 -2
- package/dist/src/gateway/hono/routes/goals.js +0 -2
- package/dist/src/gateway/hono/routes/home.js +0 -2
- package/dist/src/gateway/hono/routes/host-fs.js +0 -2
- package/dist/src/gateway/hono/routes/index.js +0 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -2
- package/dist/src/gateway/hono/routes/lazy-fallback.js +0 -2
- package/dist/src/gateway/hono/routes/local-apps.js +0 -2
- package/dist/src/gateway/hono/routes/logs.js +0 -2
- package/dist/src/gateway/hono/routes/mcp.js +0 -2
- package/dist/src/gateway/hono/routes/media.js +0 -2
- package/dist/src/gateway/hono/routes/memory.js +0 -2
- package/dist/src/gateway/hono/routes/migrations.js +0 -2
- package/dist/src/gateway/hono/routes/mobile.js +0 -2
- package/dist/src/gateway/hono/routes/models.js +0 -2
- package/dist/src/gateway/hono/routes/notes.js +3 -3
- package/dist/src/gateway/hono/routes/projects.js +0 -2
- package/dist/src/gateway/hono/routes/public-gateway.js +0 -2
- package/dist/src/gateway/hono/routes/search.js +0 -2
- package/dist/src/gateway/hono/routes/sessions.js +0 -2
- package/dist/src/gateway/hono/routes/shares.js +0 -2
- package/dist/src/gateway/hono/routes/site-shares.js +0 -2
- package/dist/src/gateway/hono/routes/status.js +0 -2
- package/dist/src/gateway/hono/routes/tui.js +0 -2
- package/dist/src/gateway/hono/routes/tunnel.js +0 -2
- package/dist/src/gateway/hono/routes/update.js +0 -2
- package/dist/src/gateway/hono/routes/voice.js +0 -2
- package/dist/src/gateway/hono/routes/work-discovery.js +0 -2
- package/dist/src/gateway/hono/routes/workflows.js +0 -2
- package/dist/src/gateway/hono/routes/workspace.js +0 -2
- package/dist/src/gateway/hono/routes/you.js +0 -2
- package/dist/src/gateway/hono/sse-json.js +0 -2
- package/dist/src/gateway/hono/sse.js +0 -2
- package/dist/src/gateway/host.js +0 -2
- package/dist/src/gateway/image-capabilities.js +0 -2
- package/dist/src/gateway/listen.js +0 -2
- package/dist/src/gateway/lock.js +0 -2
- package/dist/src/gateway/ports.js +0 -2
- package/dist/src/gateway/protocol.js +0 -2
- package/dist/src/gateway/public-url.js +0 -2
- package/dist/src/gateway/rate-limit/auth-policy.js +0 -2
- package/dist/src/gateway/rate-limit/buckets.js +0 -2
- package/dist/src/gateway/rate-limit/env-flags.js +0 -2
- package/dist/src/gateway/resolve-channel-connect-defer.js +0 -2
- package/dist/src/gateway/resolve-webchat-session-key.js +0 -2
- package/dist/src/gateway/respawn.js +0 -2
- package/dist/src/gateway/run-loop.js +0 -2
- package/dist/src/gateway/runtime-config.js +0 -2
- package/dist/src/gateway/security/audit.js +0 -2
- package/dist/src/gateway/security/csp.js +0 -2
- package/dist/src/gateway/security/dangerous-tools.js +0 -2
- package/dist/src/gateway/security/external-content.js +0 -2
- package/dist/src/gateway/security/known-weak-secrets.js +0 -2
- package/dist/src/gateway/security/loopback.js +0 -2
- package/dist/src/gateway/security/operator-scopes.js +0 -2
- package/dist/src/gateway/security/origin-check.js +0 -2
- package/dist/src/gateway/security/preauth-connection-budget.js +0 -2
- package/dist/src/gateway/security/secret-equal.js +0 -2
- package/dist/src/gateway/server-tailscale.js +0 -2
- package/dist/src/gateway/server.js +0 -2
- package/dist/src/gateway/service/agent-runner.js +0 -2
- package/dist/src/gateway/service/config-coordinator.js +0 -2
- package/dist/src/gateway/service/marketplace-service.js +0 -2
- package/dist/src/gateway/service/run-gateway-agent.js +0 -2
- package/dist/src/gateway/service/session-chat-ids.js +0 -2
- package/dist/src/gateway/service/sessions-api.js +0 -2
- package/dist/src/gateway/service/sse-hub.js +0 -2
- package/dist/src/gateway/service.js +1 -2
- package/dist/src/gateway/session-reset-service.js +0 -2
- package/dist/src/gateway/startup-readiness.js +0 -2
- package/dist/src/gateway/startup-trace.js +0 -2
- package/dist/src/gateway/tailscale-auth.js +0 -2
- package/dist/src/gateway/tailscale-lifecycle.js +0 -2
- package/dist/src/gateway/tls-server.js +0 -2
- package/dist/src/gateway/trusted-proxy.js +0 -2
- package/dist/src/gateway/user-turn-input.js +0 -2
- package/dist/src/gateway/workspace-editor-path.js +0 -2
- package/dist/src/gateway/workspace-file-search.js +0 -2
- package/dist/src/gateway/workspace-fs-file-list.js +0 -2
- package/dist/src/gateway/workspace-heartbeat-path.js +0 -2
- package/dist/src/gateway/workspace-ripgrep.js +0 -2
- package/dist/src/gateway/ws-security.js +0 -2
- package/dist/src/generated/bundled-image-generation-providers.js +0 -2
- package/dist/src/goals/goal-contract-draft.js +0 -2
- package/dist/src/goals/goal-evidence-review.js +0 -2
- package/dist/src/goals/goal-notifications.js +0 -2
- package/dist/src/goals/goal-queue-store.js +0 -2
- package/dist/src/goals/goal-runner.js +0 -2
- package/dist/src/goals/goal-service.js +0 -2
- package/dist/src/goals/goal-store.js +0 -2
- package/dist/src/goals/goal-workflow-judge.js +0 -2
- package/dist/src/heartbeat/active-hours.js +0 -2
- package/dist/src/heartbeat/content-check.js +0 -2
- package/dist/src/heartbeat/event-prompt.js +0 -2
- package/dist/src/heartbeat/tokens.js +0 -2
- package/dist/src/heartbeat/wake.js +0 -2
- package/dist/src/i18n/format.js +0 -2
- package/dist/src/i18n/goals-bundle.js +0 -2
- package/dist/src/i18n/locale.js +0 -2
- package/dist/src/i18n/locales/goals.en.js +0 -2
- package/dist/src/i18n/locales/goals.zh.js +0 -2
- package/dist/src/i18n/locales/share-tool.en.js +0 -2
- package/dist/src/i18n/locales/share-tool.zh.js +0 -2
- package/dist/src/i18n/share-tool-bundle.js +0 -2
- package/dist/src/index.js +0 -2
- package/dist/src/infra/brew.js +0 -2
- package/dist/src/infra/bus/queue.js +0 -2
- package/dist/src/infra/debounce.js +0 -2
- package/dist/src/infra/exec.js +0 -2
- package/dist/src/infra/gateway-process-argv.js +0 -2
- package/dist/src/infra/gateway-processes.js +0 -2
- package/dist/src/infra/host-env-security-policy.js +0 -2
- package/dist/src/infra/host-env-security.js +0 -2
- package/dist/src/infra/http-proxy-env.js +0 -2
- package/dist/src/infra/is-main.js +0 -2
- package/dist/src/infra/json-utf8-bytes.js +0 -2
- package/dist/src/infra/node-sqlite.js +0 -2
- package/dist/src/infra/package-json.js +0 -2
- package/dist/src/infra/package-update-steps.js +0 -2
- package/dist/src/infra/path-env.js +0 -2
- package/dist/src/infra/path-prepend.js +0 -2
- package/dist/src/infra/ports.js +0 -2
- package/dist/src/infra/rate-limit/failure-limiter.js +0 -2
- package/dist/src/infra/rate-limit/keyed-store.js +0 -2
- package/dist/src/infra/rate-limit/rate-limiter.js +0 -2
- package/dist/src/infra/restart.js +0 -2
- package/dist/src/infra/retry.js +0 -2
- package/dist/src/infra/run-command.js +0 -2
- package/dist/src/infra/sqlite-errors.js +0 -2
- package/dist/src/infra/ssh-tunnel.js +0 -2
- package/dist/src/infra/stable-node-path.js +0 -2
- package/dist/src/infra/tailscale.js +0 -2
- package/dist/src/infra/undici-fetch.js +0 -2
- package/dist/src/infra/unhandled-rejections.js +0 -2
- package/dist/src/infra/update-channels.js +0 -2
- package/dist/src/infra/update-check.js +0 -2
- package/dist/src/infra/update-global.js +0 -2
- package/dist/src/infra/update-lock.js +0 -2
- package/dist/src/infra/update-log.js +0 -2
- package/dist/src/infra/update-restart.js +0 -2
- package/dist/src/infra/update-runner.js +0 -2
- package/dist/src/infra/update-startup.js +0 -2
- package/dist/src/infra/warning-filter.js +0 -2
- package/dist/src/infra/write-file-atomic.js +0 -2
- package/dist/src/knowledge/connected-knowledge-pipeline.js +0 -2
- package/dist/src/knowledge/coordinator.js +0 -2
- package/dist/src/knowledge/ingestion-service.js +0 -2
- package/dist/src/local-apps/acceptance.js +0 -2
- package/dist/src/local-apps/preview-runtime-bridge.js +0 -2
- package/dist/src/local-apps/runtime-entry.js +0 -2
- package/dist/src/local-apps/scaffold.js +0 -2
- package/dist/src/local-apps/service.js +0 -2
- package/dist/src/local-apps/store.js +0 -2
- package/dist/src/markdown/chunk.js +0 -2
- package/dist/src/markdown/code-spans.js +0 -2
- package/dist/src/markdown/fences.js +0 -2
- package/dist/src/markdown/frontmatter.js +0 -2
- package/dist/src/markdown/ir.js +0 -2
- package/dist/src/markdown/render.js +0 -2
- package/dist/src/markdown/tables.js +0 -2
- package/dist/src/mcp/channel-bridge.js +0 -2
- package/dist/src/mcp/channel-server.js +0 -2
- package/dist/src/mcp/channel-shared.js +0 -2
- package/dist/src/mcp/channel-tools.js +0 -2
- package/dist/src/mcp/gateway-http-client.js +0 -2
- package/dist/src/media/media-reference.js +0 -2
- package/dist/src/media/paths.js +0 -2
- package/dist/src/media/session-references.js +0 -2
- package/dist/src/media/store.js +0 -2
- package/dist/src/media/uri.js +0 -2
- package/dist/src/media-shared/http/api-key-rotation.js +0 -2
- package/dist/src/media-shared/http/deadline.js +0 -2
- package/dist/src/media-shared/http/private-network.js +0 -2
- package/dist/src/media-shared/http/provider-http-errors.js +0 -2
- package/dist/src/media-shared/http/provider-http.js +0 -2
- package/dist/src/media-shared/http/resolve-provider-http-request-config.js +0 -2
- package/dist/src/media-shared/http/ssrf-guard.js +0 -2
- package/dist/src/media-shared/http/test-helpers/mock-server.js +0 -2
- package/dist/src/media-understanding/audio-transcription-runner.js +0 -2
- package/dist/src/media-understanding/openai-compatible-audio.js +0 -2
- package/dist/src/media-understanding/registry.js +0 -2
- package/dist/src/media-understanding/resolve-entries.js +0 -2
- package/dist/src/media-understanding/runner.js +0 -2
- package/dist/src/migrations/config/default-capability-preset.js +0 -2
- package/dist/src/migrations/registry.js +0 -2
- package/dist/src/migrations/runner.js +0 -2
- package/dist/src/mobile/notification-service.js +0 -2
- package/dist/src/mobile/notification-store.js +0 -2
- package/dist/src/mobile/notification-types.js +0 -2
- package/dist/src/notes/agent-context.js +0 -2
- package/dist/src/notes/attachment-ref.js +0 -2
- package/dist/src/notes/note-attachment-sync.js +0 -2
- package/dist/src/notes/note-index-meta.js +0 -2
- package/dist/src/notes/note-markdown.js +0 -2
- package/dist/src/notes/paths.js +0 -2
- package/dist/src/notes/service.d.ts +3 -1
- package/dist/src/notes/service.js +19 -5
- package/dist/src/notes/store.js +0 -2
- package/dist/src/package-version.js +0 -2
- package/dist/src/pets/factory.d.ts +13 -0
- package/dist/src/pets/factory.js +23 -2
- package/dist/src/pets/manifest.js +0 -2
- package/dist/src/pets/validator.js +0 -2
- package/dist/src/process/kill-tree.js +0 -2
- package/dist/src/project-trust/trust-store.js +0 -2
- package/dist/src/projects/automation-bind.js +0 -2
- package/dist/src/projects/goal-bind.js +0 -2
- package/dist/src/projects/memory-bind.js +0 -2
- package/dist/src/projects/project-agent-suggestion.js +0 -2
- package/dist/src/projects/project-agent.js +0 -2
- package/dist/src/projects/project-kind.js +0 -2
- package/dist/src/projects/project-loop.js +0 -2
- package/dist/src/projects/project-service.js +0 -2
- package/dist/src/projects/project-store.js +0 -2
- package/dist/src/projects/session-bind.js +0 -2
- package/dist/src/projects/workflow-bind.js +0 -2
- package/dist/src/projects/workspace-project.js +0 -2
- package/dist/src/projects/workspace.js +0 -2
- package/dist/src/providers/auth-runtime/auth-profile-store.js +0 -2
- package/dist/src/providers/auth-runtime/is-configured.js +0 -2
- package/dist/src/providers/auth-runtime/oauth.js +0 -2
- package/dist/src/providers/auth-runtime/resolve-api-key.js +0 -2
- package/dist/src/providers/auth-runtime/resolve-auth.js +0 -2
- package/dist/src/providers/constants.js +0 -2
- package/dist/src/providers/domestic-presets.js +0 -2
- package/dist/src/providers/env-keys.js +0 -2
- package/dist/src/providers/extension-stream-bridge.js +0 -2
- package/dist/src/providers/index.js +0 -2
- package/dist/src/providers/model-call.js +0 -2
- package/dist/src/providers/model-discovery.js +0 -2
- package/dist/src/providers/model-registry.js +0 -2
- package/dist/src/providers/model-supplements.js +0 -2
- package/dist/src/providers/plugin-registry.js +0 -2
- package/dist/src/providers/presentation.js +0 -2
- package/dist/src/remote-access/exposure-guards.js +0 -2
- package/dist/src/remote-access/exposure-manager.js +0 -2
- package/dist/src/review/review-git.js +0 -2
- package/dist/src/review/review-types.js +0 -2
- package/dist/src/routing/account-id.js +0 -2
- package/dist/src/routing/agent-session-key.js +0 -2
- package/dist/src/routing/bindings.js +0 -2
- package/dist/src/routing/index.js +0 -2
- package/dist/src/routing/resolve-route.js +0 -2
- package/dist/src/routing/resolve-tui-session-key.js +0 -2
- package/dist/src/routing/session-key-utils.js +0 -2
- package/dist/src/routing/session-key.js +0 -2
- package/dist/src/session/abort-cutoff.js +0 -2
- package/dist/src/session/chat-export.js +0 -2
- package/dist/src/session/client-history.js +0 -2
- package/dist/src/session/compaction-checkpoints.js +0 -2
- package/dist/src/session/config-store.js +0 -2
- package/dist/src/session/init-session-turn.js +0 -2
- package/dist/src/session/lifecycle-timestamps.js +0 -2
- package/dist/src/session/load-jsonl-entries.js +0 -2
- package/dist/src/session/manager.js +0 -2
- package/dist/src/session/patch-metadata.js +0 -2
- package/dist/src/session/reset-policy.js +0 -2
- package/dist/src/session/reset-triggers.js +0 -2
- package/dist/src/session/reset-type.js +0 -2
- package/dist/src/session/resolve-session.js +0 -2
- package/dist/src/session/session-context-for-llm.js +0 -2
- package/dist/src/session/session-id.js +0 -2
- package/dist/src/session/session-title.js +0 -2
- package/dist/src/session/session-workspace.js +0 -2
- package/dist/src/session/store.js +0 -2
- package/dist/src/session/stored-rows-to-file-entries.js +0 -2
- package/dist/src/session/thinking-resolve.js +0 -2
- package/dist/src/session/transcript-events.js +0 -2
- package/dist/src/session/transcript-format.js +0 -2
- package/dist/src/session/transcript-outline.js +0 -2
- package/dist/src/session/transcript-stats.js +0 -2
- package/dist/src/session/types.js +0 -2
- package/dist/src/session/user-round-delete.js +0 -2
- package/dist/src/share/share-audit.js +0 -2
- package/dist/src/share/share-auto.js +0 -2
- package/dist/src/share/share-config.js +0 -2
- package/dist/src/share/share-landing.js +0 -2
- package/dist/src/share/share-rate-limit.js +0 -2
- package/dist/src/share/share-store.js +0 -2
- package/dist/src/share/share-thumbnail.js +0 -2
- package/dist/src/share/share-types.js +0 -2
- package/dist/src/share/share-url.js +0 -2
- package/dist/src/share/share-zip.js +0 -2
- package/dist/src/share/site-proxy.js +0 -2
- package/dist/src/share/site-share-config.js +0 -2
- package/dist/src/share/site-share-router.js +0 -2
- package/dist/src/share/site-share-store.js +0 -2
- package/dist/src/share/site-share-types.js +0 -2
- package/dist/src/share/site-static-serve.js +0 -2
- package/dist/src/storage/sqlite/activity-repository.js +0 -2
- package/dist/src/storage/sqlite/config-repository.js +0 -2
- package/dist/src/storage/sqlite/connection.js +0 -2
- package/dist/src/storage/sqlite/connector-repository.js +0 -2
- package/dist/src/storage/sqlite/fts.js +0 -2
- package/dist/src/storage/sqlite/knowledge-repository.js +0 -2
- package/dist/src/storage/sqlite/memory-index-repository.js +0 -2
- package/dist/src/storage/sqlite/memory-records-repository.js +0 -2
- package/dist/src/storage/sqlite/memory-reference-consent-repository.js +0 -2
- package/dist/src/storage/sqlite/migrations/discover.js +0 -2
- package/dist/src/storage/sqlite/migrations/errors.js +0 -2
- package/dist/src/storage/sqlite/migrations/runner.js +0 -2
- package/dist/src/storage/sqlite/note-agent-context-repository.js +0 -2
- package/dist/src/storage/sqlite/notes-repository.js +0 -2
- package/dist/src/storage/sqlite/paths.js +0 -2
- package/dist/src/storage/sqlite/row-mappers.js +0 -2
- package/dist/src/storage/sqlite/schema-version.js +0 -2
- package/dist/src/storage/sqlite/schema.js +0 -2
- package/dist/src/storage/sqlite/session-metadata.js +0 -2
- package/dist/src/storage/sqlite/session-repository.js +0 -2
- package/dist/src/storage/sqlite/transaction.js +0 -2
- package/dist/src/storage/sqlite/transcript-repository.js +0 -2
- package/dist/src/storage/sqlite/user-profile-setup-repository.js +0 -2
- package/dist/src/storage/sqlite/user-trust-repository.js +0 -2
- package/dist/src/tui/backends/embedded-backend.js +0 -2
- package/dist/src/tui/backends/gateway-sse-backend.js +0 -2
- package/dist/src/tui/chat-history.js +0 -2
- package/dist/src/tui/clipboard-image.js +0 -2
- package/dist/src/tui/clipboard-text.js +0 -2
- package/dist/src/tui/components/assistant-message.js +0 -2
- package/dist/src/tui/components/bash-execution.js +0 -2
- package/dist/src/tui/components/bash-summary.js +0 -2
- package/dist/src/tui/components/branch-message-summary.js +0 -2
- package/dist/src/tui/components/branch-summary.js +0 -2
- package/dist/src/tui/components/chat-log.js +0 -2
- package/dist/src/tui/components/compaction-summary.js +0 -2
- package/dist/src/tui/components/custom-editor.js +0 -2
- package/dist/src/tui/components/custom-message.js +0 -2
- package/dist/src/tui/components/dynamic-border.js +0 -2
- package/dist/src/tui/components/extension-dialog.js +0 -2
- package/dist/src/tui/components/fuzzy-filter.js +0 -2
- package/dist/src/tui/components/scoped-models-selector.js +0 -2
- package/dist/src/tui/components/searchable-select-list.js +0 -2
- package/dist/src/tui/components/session-selector.js +0 -2
- package/dist/src/tui/components/settings-selector.js +0 -2
- package/dist/src/tui/components/thinking-selector.js +0 -2
- package/dist/src/tui/components/tool-execution.js +0 -2
- package/dist/src/tui/components/tui-bottom-bar.js +0 -2
- package/dist/src/tui/components/tui-header.js +0 -2
- package/dist/src/tui/components/user-message.js +0 -2
- package/dist/src/tui/components/visual-truncate.js +0 -2
- package/dist/src/tui/extension-host/autocomplete.js +0 -2
- package/dist/src/tui/extension-host/host.js +0 -2
- package/dist/src/tui/extension-host/load-extensions.js +0 -2
- package/dist/src/tui/extension-host/runtime-context.js +0 -2
- package/dist/src/tui/extension-host/runtime.js +0 -2
- package/dist/src/tui/extension-host/surface.js +0 -2
- package/dist/src/tui/extension-host/tool-renderers.js +0 -2
- package/dist/src/tui/format-tui-hotkeys.js +0 -2
- package/dist/src/tui/sse-consumer.js +0 -2
- package/dist/src/tui/theme/dark.js +0 -2
- package/dist/src/tui/theme/light.js +0 -2
- package/dist/src/tui/theme-manager.js +0 -2
- package/dist/src/tui/theme.js +0 -2
- package/dist/src/tui/tool-summary.js +0 -2
- package/dist/src/tui/tui-agent-events.js +0 -2
- package/dist/src/tui/tui-command-formatters.js +0 -2
- package/dist/src/tui/tui-commands.js +0 -2
- package/dist/src/tui/tui-context-usage.js +0 -2
- package/dist/src/tui/tui-extension-user-message.js +0 -2
- package/dist/src/tui/tui-fd-path.js +0 -2
- package/dist/src/tui/tui-file-autocomplete.js +0 -2
- package/dist/src/tui/tui-follow-up-queue.js +0 -2
- package/dist/src/tui/tui-git-branch.js +0 -2
- package/dist/src/tui/tui-keybindings-file.js +0 -2
- package/dist/src/tui/tui-lifecycle.js +0 -2
- package/dist/src/tui/tui-local-shell.js +0 -2
- package/dist/src/tui/tui-model-picker.js +0 -2
- package/dist/src/tui/tui-oauth-login.js +0 -2
- package/dist/src/tui/tui-overlays.js +0 -2
- package/dist/src/tui/tui-picker-overlay.js +0 -2
- package/dist/src/tui/tui-run-state.js +0 -2
- package/dist/src/tui/tui-run-status-format.js +0 -2
- package/dist/src/tui/tui-runtime-hints.js +0 -2
- package/dist/src/tui/tui-scoped-models.js +0 -2
- package/dist/src/tui/tui-session-actions.js +0 -2
- package/dist/src/tui/tui-session-format.js +0 -2
- package/dist/src/tui/tui-session-snapshot.js +0 -2
- package/dist/src/tui/tui-session-stats.js +0 -2
- package/dist/src/tui/tui-settings.js +0 -2
- package/dist/src/tui/tui-skills-autocomplete.js +0 -2
- package/dist/src/tui/tui-startup-resources.js +0 -2
- package/dist/src/tui/tui-startup-text.js +0 -2
- package/dist/src/tui/tui-stdio-filter.js +0 -2
- package/dist/src/tui/tui-submit.js +0 -2
- package/dist/src/tui/tui-suspend.js +0 -2
- package/dist/src/tui/tui-timeline-picker.js +0 -2
- package/dist/src/tui/tui-timeline.js +0 -2
- package/dist/src/tui/tui-tool-diff.js +0 -2
- package/dist/src/tui/tui-tool-result.js +0 -2
- package/dist/src/tui/tui-transcript-tree-picker.js +0 -2
- package/dist/src/tui/tui-transcript-tree.js +0 -2
- package/dist/src/tui/tui-types.js +0 -2
- package/dist/src/tui/tui-workflow-slash.js +0 -2
- package/dist/src/tui/tui.js +0 -2
- package/dist/src/tui/xopc-tui-keybindings.js +0 -2
- package/dist/src/tunnel/broker-client.js +0 -2
- package/dist/src/tunnel/consent.js +0 -2
- package/dist/src/tunnel/enable-lan-pairing.js +0 -2
- package/dist/src/tunnel/env.js +0 -2
- package/dist/src/tunnel/frp-subdomain-host.js +0 -2
- package/dist/src/tunnel/frpc-binary.js +0 -2
- package/dist/src/tunnel/frpc-config.js +0 -2
- package/dist/src/tunnel/frpc-extract.js +0 -2
- package/dist/src/tunnel/frpc-process.js +0 -2
- package/dist/src/tunnel/gateway-lifecycle.js +0 -2
- package/dist/src/tunnel/pair-context.js +0 -2
- package/dist/src/tunnel/pair-url.js +0 -2
- package/dist/src/tunnel/pairing-rate-limit.js +0 -2
- package/dist/src/tunnel/pairing.js +0 -2
- package/dist/src/tunnel/tunnel-audit.js +0 -2
- package/dist/src/tunnel/tunnel-config.js +0 -2
- package/dist/src/tunnel/tunnel-persist.js +0 -2
- package/dist/src/tunnel/tunnel-qr.js +0 -2
- package/dist/src/tunnel/tunnel-rate-limit.js +0 -2
- package/dist/src/tunnel/tunnel-service.js +0 -2
- package/dist/src/tunnel/tunnel-state.js +0 -2
- package/dist/src/tunnel/well-known.js +0 -2
- package/dist/src/user-context/config.js +0 -2
- package/dist/src/user-context/import.js +0 -2
- package/dist/src/user-context/owner.js +0 -2
- package/dist/src/user-context/profile.js +0 -2
- package/dist/src/user-context/projection.js +0 -2
- package/dist/src/user-context/runtime.js +0 -2
- package/dist/src/user-context/source-recommendations.js +0 -2
- package/dist/src/user-context/trust-policy.js +0 -2
- package/dist/src/utils/global-singleton.js +0 -2
- package/dist/src/utils/helpers.js +0 -2
- package/dist/src/utils/index.js +0 -2
- package/dist/src/utils/is-record.js +0 -2
- package/dist/src/utils/logger/audit.js +0 -2
- package/dist/src/utils/logger/config.js +0 -2
- package/dist/src/utils/logger/context.js +0 -2
- package/dist/src/utils/logger/exporters.js +0 -2
- package/dist/src/utils/logger/index.js +0 -2
- package/dist/src/utils/logger/log-store.js +0 -2
- package/dist/src/utils/logger/log-stream.js +0 -2
- package/dist/src/utils/logger/pino-record.js +0 -2
- package/dist/src/utils/logger/redact.js +0 -2
- package/dist/src/utils/logger/rotation.js +0 -2
- package/dist/src/utils/logger/shutdown.js +0 -2
- package/dist/src/utils/logger/stats.js +0 -2
- package/dist/src/utils/logger/streams.js +0 -2
- package/dist/src/utils/logger/types.js +0 -2
- package/dist/src/utils/logger.js +0 -2
- package/dist/src/utils/redact-sensitive-url.js +0 -2
- package/dist/src/utils/sanitize-log.js +0 -2
- package/dist/src/utils/string-coerce.js +0 -2
- package/dist/src/voice/language-profile.js +0 -2
- package/dist/src/voice/local/model-files.js +0 -2
- package/dist/src/voice/local/model-manager.js +0 -2
- package/dist/src/voice/local/models.js +0 -2
- package/dist/src/voice/local/runtime-client.js +0 -2
- package/dist/src/voice/local/runtime-dispatcher.js +0 -2
- package/dist/src/voice/local/runtime-worker.js +12 -4
- package/dist/src/voice/local/wav.js +0 -2
- package/dist/src/voice/metadata/builtin.js +0 -2
- package/dist/src/voice/metadata/registry.js +0 -2
- package/dist/src/voice/stt/availability.js +0 -2
- package/dist/src/voice/stt/config-slice.js +0 -2
- package/dist/src/voice/stt/factory.js +0 -2
- package/dist/src/voice/stt/index.js +0 -2
- package/dist/src/voice/stt/list-providers.js +0 -2
- package/dist/src/voice/stt/mention.js +0 -2
- package/dist/src/voice/stt/preflight.js +0 -2
- package/dist/src/voice/stt/providers/alibaba-transcription.js +0 -2
- package/dist/src/voice/stt/providers/local-transcription.js +0 -2
- package/dist/src/voice/stt/providers/openai-transcription.js +0 -2
- package/dist/src/voice/stt/transcribe-core.js +0 -2
- package/dist/src/voice/stt/types.js +0 -2
- package/dist/src/voice/tts/audio.js +0 -2
- package/dist/src/voice/tts/config-slice.js +0 -2
- package/dist/src/voice/tts/directives.js +0 -2
- package/dist/src/voice/tts/factory.js +0 -2
- package/dist/src/voice/tts/list-providers.js +0 -2
- package/dist/src/voice/tts/merge-config.js +0 -2
- package/dist/src/voice/tts/openai-compatible-speech.js +0 -2
- package/dist/src/voice/tts/payload.js +0 -2
- package/dist/src/voice/tts/preprocess.js +0 -2
- package/dist/src/voice/tts/providers/alibaba-speech.js +0 -2
- package/dist/src/voice/tts/providers/edge-speech.js +0 -2
- package/dist/src/voice/tts/providers/minimax-speech.js +0 -2
- package/dist/src/voice/tts/providers/openai-speech.js +0 -2
- package/dist/src/voice/tts/sentence-boundary.js +0 -2
- package/dist/src/voice/tts/service.js +0 -2
- package/dist/src/voice/tts/speak-core.js +0 -2
- package/dist/src/voice/tts/speech-registry.js +0 -2
- package/dist/src/voice/tts/status-tracker.js +0 -2
- package/dist/src/voice/tts/summarize.js +0 -2
- package/dist/src/voice/tts/types.js +0 -2
- package/dist/src/work-discovery/analyzer.js +0 -2
- package/dist/src/work-discovery/probe.js +0 -2
- package/dist/src/work-discovery/repository.js +0 -2
- package/dist/src/work-discovery/service.js +0 -2
- package/dist/src/work-items/agent-context.js +0 -2
- package/dist/src/work-items/work-item-service.js +0 -2
- package/dist/src/work-items/work-item-store.js +0 -2
- package/dist/src/work-items/work-item-workflow-judge.js +0 -2
- package/dist/src/workflows/authoring/workflow-draft-store.js +0 -2
- package/dist/src/workflows/domain/definition-utils.js +0 -2
- package/dist/src/workflows/domain/run.js +0 -2
- package/dist/src/workflows/domain/schema-validation.js +0 -2
- package/dist/src/workflows/domain/validation.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-prompt.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-service.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-validator.js +0 -2
- package/dist/src/workflows/engine/projector.js +0 -2
- package/dist/src/workflows/engine/workflow-engine.js +0 -2
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +0 -2
- package/dist/src/workflows/runtime/graph-workflow-runtime.js +0 -2
- package/dist/src/workflows/service/run-view-to-snapshot.js +0 -2
- package/dist/src/workflows/service/workflow-run-service.js +1 -3
- package/dist/src/workflows/service/workflow-session-bridge.js +0 -2
- package/dist/src/workflows/service/workflow-session-key.js +0 -2
- package/dist/src/workflows/store/event-store.js +0 -2
- package/dist/src/workflows/store/paths.js +0 -2
- package/dist/src/workflows/store/run-index-store.js +0 -2
- package/dist/src/workflows/store/run-store.js +0 -2
- package/package.json +43 -12
- package/skills/creative/hatch-pet/SKILL.md +1 -0
- package/dist/extensions/dashscope/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/demo-memory/src/index.js.map +0 -1
- package/dist/extensions/fal/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/feishu/src/actions/message-action-handler.js.map +0 -1
- package/dist/extensions/feishu/src/adapters/cli-login.js.map +0 -1
- package/dist/extensions/feishu/src/adapters/gateway-setup.js.map +0 -1
- package/dist/extensions/feishu/src/adapters/onboard-cli.js.map +0 -1
- package/dist/extensions/feishu/src/auth/app-registration.js.map +0 -1
- package/dist/extensions/feishu/src/auth/pairing.js.map +0 -1
- package/dist/extensions/feishu/src/auth/paths.js.map +0 -1
- package/dist/extensions/feishu/src/directory/directory-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/format.js.map +0 -1
- package/dist/extensions/feishu/src/index.js.map +0 -1
- package/dist/extensions/feishu/src/outbound/actions.js.map +0 -1
- package/dist/extensions/feishu/src/outbound/media-load.js.map +0 -1
- package/dist/extensions/feishu/src/outbound/outbound-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/pairing/feishu-pairing-prompt.js.map +0 -1
- package/dist/extensions/feishu/src/pairing-config-resolver.js.map +0 -1
- package/dist/extensions/feishu/src/plugin.js.map +0 -1
- package/dist/extensions/feishu/src/schema/config-schema.js.map +0 -1
- package/dist/extensions/feishu/src/state/accounts.js.map +0 -1
- package/dist/extensions/feishu/src/state/message-bindings.js.map +0 -1
- package/dist/extensions/feishu/src/state/thread-bindings.js.map +0 -1
- package/dist/extensions/feishu/src/status/doctor.js.map +0 -1
- package/dist/extensions/feishu/src/status/status-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/streaming/streaming-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/subagent-hooks.js.map +0 -1
- package/dist/extensions/feishu/src/tools/docx/docx-batch-insert.js.map +0 -1
- package/dist/extensions/feishu/src/tools/docx/docx-color-text.js.map +0 -1
- package/dist/extensions/feishu/src/tools/docx/docx-table-ops.js.map +0 -1
- package/dist/extensions/feishu/src/tools/tools.js.map +0 -1
- package/dist/extensions/feishu/src/transport/client/client.js.map +0 -1
- package/dist/extensions/feishu/src/transport/client/lark-sdk-logger.js.map +0 -1
- package/dist/extensions/feishu/src/transport/reliability/dedupe.js.map +0 -1
- package/dist/extensions/feishu/src/transport/reliability/inbound-pipeline.js.map +0 -1
- package/dist/extensions/feishu/src/transport/socket-mode/monitor.js.map +0 -1
- package/dist/extensions/feishu/src/transport/socket-mode/retry.js.map +0 -1
- package/dist/extensions/feishu/src/transport/text/mentions.js.map +0 -1
- package/dist/extensions/feishu/src/transport/webhook/monitor.js.map +0 -1
- package/dist/extensions/feishu/src/ui/config-surface.js.map +0 -1
- package/dist/extensions/feishu/src/workflow-progress.js.map +0 -1
- package/dist/extensions/google/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/minimax/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/openai/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/telegram/src/access-control.js.map +0 -1
- package/dist/extensions/telegram/src/account-manager.js.map +0 -1
- package/dist/extensions/telegram/src/actions/message-actions.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/command-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/config-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/debounce-keys.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/gateway-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/gateway-setup.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/inbound-access.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/index.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/onboard-cli.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/outbound-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/security-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/setup-wizard.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/status-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/api-root.js.map +0 -1
- package/dist/extensions/telegram/src/approval-delivery.js.map +0 -1
- package/dist/extensions/telegram/src/approval-store.js.map +0 -1
- package/dist/extensions/telegram/src/caption.js.map +0 -1
- package/dist/extensions/telegram/src/command-handler.js.map +0 -1
- package/dist/extensions/telegram/src/config-schema.js.map +0 -1
- package/dist/extensions/telegram/src/conversation-id.js.map +0 -1
- package/dist/extensions/telegram/src/dedupe.js.map +0 -1
- package/dist/extensions/telegram/src/delivery-chat-id.js.map +0 -1
- package/dist/extensions/telegram/src/doctor.js.map +0 -1
- package/dist/extensions/telegram/src/draft-stream-lifecycle.js.map +0 -1
- package/dist/extensions/telegram/src/draft-stream-loop.js.map +0 -1
- package/dist/extensions/telegram/src/draft-stream.js.map +0 -1
- package/dist/extensions/telegram/src/errors.js.map +0 -1
- package/dist/extensions/telegram/src/exec-approval-handler.js.map +0 -1
- package/dist/extensions/telegram/src/exec-approvals.js.map +0 -1
- package/dist/extensions/telegram/src/focus-handler.js.map +0 -1
- package/dist/extensions/telegram/src/format.js.map +0 -1
- package/dist/extensions/telegram/src/group-config-resolver.js.map +0 -1
- package/dist/extensions/telegram/src/inbound-coalescer.js.map +0 -1
- package/dist/extensions/telegram/src/inbound-processor.js.map +0 -1
- package/dist/extensions/telegram/src/index.js.map +0 -1
- package/dist/extensions/telegram/src/inline-keyboards.js.map +0 -1
- package/dist/extensions/telegram/src/network-errors.js.map +0 -1
- package/dist/extensions/telegram/src/outbound-sender.js.map +0 -1
- package/dist/extensions/telegram/src/pairing-config-resolver.js.map +0 -1
- package/dist/extensions/telegram/src/plugin-defaults.js.map +0 -1
- package/dist/extensions/telegram/src/plugin.js.map +0 -1
- package/dist/extensions/telegram/src/polling-session.js.map +0 -1
- package/dist/extensions/telegram/src/proxy-fetch.js.map +0 -1
- package/dist/extensions/telegram/src/reactions.js.map +0 -1
- package/dist/extensions/telegram/src/reply-params.js.map +0 -1
- package/dist/extensions/telegram/src/routing-integration.js.map +0 -1
- package/dist/extensions/telegram/src/send-options.js.map +0 -1
- package/dist/extensions/telegram/src/sent-cache.js.map +0 -1
- package/dist/extensions/telegram/src/startup-errors.js.map +0 -1
- package/dist/extensions/telegram/src/telegram-actions.js.map +0 -1
- package/dist/extensions/telegram/src/telegram-draft-errors.js.map +0 -1
- package/dist/extensions/telegram/src/thread-bindings.js.map +0 -1
- package/dist/extensions/telegram/src/timeout-abort.js.map +0 -1
- package/dist/extensions/telegram/src/token-resolver.js.map +0 -1
- package/dist/extensions/telegram/src/update-offset-store.js.map +0 -1
- package/dist/extensions/telegram/src/workflow-progress.js.map +0 -1
- package/dist/extensions/weixin/src/adapters/onboard-cli.js.map +0 -1
- package/dist/extensions/weixin/src/api/api.js.map +0 -1
- package/dist/extensions/weixin/src/api/config-cache.js.map +0 -1
- package/dist/extensions/weixin/src/api/session-guard.js.map +0 -1
- package/dist/extensions/weixin/src/api/types.js.map +0 -1
- package/dist/extensions/weixin/src/auth/accounts.js.map +0 -1
- package/dist/extensions/weixin/src/auth/login-qr.js.map +0 -1
- package/dist/extensions/weixin/src/auth/pairing.js.map +0 -1
- package/dist/extensions/weixin/src/auth/weixin-account-id.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/aes-ecb.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/cdn-upload.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/cdn-url.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/pic-decrypt.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/upload.js.map +0 -1
- package/dist/extensions/weixin/src/cli/gateway-qr-login.js.map +0 -1
- package/dist/extensions/weixin/src/cli/qr-login.js.map +0 -1
- package/dist/extensions/weixin/src/config-schema.js.map +0 -1
- package/dist/extensions/weixin/src/config-surface.js.map +0 -1
- package/dist/extensions/weixin/src/delivery-to.js.map +0 -1
- package/dist/extensions/weixin/src/index.js.map +0 -1
- package/dist/extensions/weixin/src/media/data-url.js.map +0 -1
- package/dist/extensions/weixin/src/media/media-download.js.map +0 -1
- package/dist/extensions/weixin/src/media/mime.js.map +0 -1
- package/dist/extensions/weixin/src/media/silk-transcode.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/context-token-init.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/error-notice.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/inbound.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/markdown-filter.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/process-message.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/send-media.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/send.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/slash-commands.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/typing-ticket-store.js.map +0 -1
- package/dist/extensions/weixin/src/monitor/monitor.js.map +0 -1
- package/dist/extensions/weixin/src/outbound-send.js.map +0 -1
- package/dist/extensions/weixin/src/pairing-config-resolver.js.map +0 -1
- package/dist/extensions/weixin/src/plugin.js.map +0 -1
- package/dist/extensions/weixin/src/routing-integration.js.map +0 -1
- package/dist/extensions/weixin/src/storage/state-dir.js.map +0 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js.map +0 -1
- package/dist/extensions/weixin/src/util/logger.js.map +0 -1
- package/dist/extensions/weixin/src/util/random.js.map +0 -1
- package/dist/extensions/weixin/src/util/redact.js.map +0 -1
- package/dist/extensions/weixin/src/workflow-progress.js.map +0 -1
- package/dist/gateway/static/root/assets/agents-DZDOcgz5.js +0 -2
- package/dist/gateway/static/root/assets/appearance-settings-BNasnY9D.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-Cmr-Hvm9.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-TWgUAI8t.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-DBsFItW_.js +0 -8
- package/dist/gateway/static/root/assets/channels-settings-BBkzrBYy.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-CuU6ez3y.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DLsZCAw7.js +0 -2
- package/dist/gateway/static/root/assets/desktop-pet-C6V-PHwi.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-5Fcz47XQ.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-BrxzyVW2.js +0 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-DRVRLc5Z.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-8F7NElzP.js +0 -4
- package/dist/gateway/static/root/assets/goals-page-BaoLiV8G.js +0 -2
- package/dist/gateway/static/root/assets/index-CH7XN6KY.js +0 -259
- package/dist/gateway/static/root/assets/index-Dfnl9tp_.css +0 -1
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BHnh5OoY.js +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-Boe8n4zH.js +0 -2
- package/dist/gateway/static/root/assets/locale-store-BneNAR8R.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-Cb4Uptct.js +0 -7
- package/dist/gateway/static/root/assets/messages-t1yPaVCt.js +0 -5
- package/dist/gateway/static/root/assets/models-hub-panel-CNiUKZUV.js +0 -2
- package/dist/gateway/static/root/assets/notes-workbench-C9__VkD6.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-CZhuB5kO.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-BOq4WVdR.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BxGq0ebQ.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-B6gSU_Au.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DwuBL834.js +0 -1
- package/dist/gateway/static/root/assets/settings-loading-skeleton-vitElc-n.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BJeA4mmk.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-DB2KYA2_.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DQtZiejw.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-Pm0fNe_p.js +0 -2
- package/dist/gateway/static/root/assets/user-context-page-DnLqQyRG.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-BiFIIWC4.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-D2-_bC0J.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-B0FPG4eJ.js +0 -1
- package/dist/gateway/static/root/assets/work-page-BDeVxts_.js +0 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BPzS67fU.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-xPhmrRLs.js +0 -11
- package/dist/gateway/static/root/favicon-icon.svg +0 -187
- package/dist/package.js.map +0 -1
- package/dist/src/activity/context.js.map +0 -1
- package/dist/src/activity/emitter.js.map +0 -1
- package/dist/src/activity/service.js.map +0 -1
- package/dist/src/agent/agent-manager.js.map +0 -1
- package/dist/src/agent/agent-scope.js.map +0 -1
- package/dist/src/agent/background-review/coordinator.js.map +0 -1
- package/dist/src/agent/background-review/prompts.js.map +0 -1
- package/dist/src/agent/background-review/run-background-review.js.map +0 -1
- package/dist/src/agent/background-review/settings.js.map +0 -1
- package/dist/src/agent/bootstrap/bootstrap-cache.js.map +0 -1
- package/dist/src/agent/bootstrap/bootstrap-context.js.map +0 -1
- package/dist/src/agent/bootstrap/bootstrap-files.js.map +0 -1
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +0 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +0 -1
- package/dist/src/agent/bootstrap/project-agents-context.js.map +0 -1
- package/dist/src/agent/capabilities/definitions.js.map +0 -1
- package/dist/src/agent/capabilities/registry.js.map +0 -1
- package/dist/src/agent/child-agent-factory.js.map +0 -1
- package/dist/src/agent/client-error-format.js.map +0 -1
- package/dist/src/agent/code-intelligence/binary.js.map +0 -1
- package/dist/src/agent/code-intelligence/runtime.js.map +0 -1
- package/dist/src/agent/code-intelligence/tools.js.map +0 -1
- package/dist/src/agent/coding/turn-diff-tracker.js.map +0 -1
- package/dist/src/agent/context/expand-at-file-mentions.js.map +0 -1
- package/dist/src/agent/context/project-context.js.map +0 -1
- package/dist/src/agent/context/workspace-seed.js.map +0 -1
- package/dist/src/agent/context/workspace-state.js.map +0 -1
- package/dist/src/agent/context/workspace.js.map +0 -1
- package/dist/src/agent/embedded/run-for-session.js.map +0 -1
- package/dist/src/agent/embedded/run-turn.js.map +0 -1
- package/dist/src/agent/embedded/runs.js.map +0 -1
- package/dist/src/agent/embedded/session-manager-init.js.map +0 -1
- package/dist/src/agent/embedded/session-runner.js.map +0 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js.map +0 -1
- package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js.map +0 -1
- package/dist/src/agent/embedded/subscribe-session.js.map +0 -1
- package/dist/src/agent/embedded/system-prompt-override.js.map +0 -1
- package/dist/src/agent/embedded/tool-result-context-guard.js.map +0 -1
- package/dist/src/agent/embedded/tool-result-truncation.js.map +0 -1
- package/dist/src/agent/embedded/xopc-auth-storage.js.map +0 -1
- package/dist/src/agent/embedded/xopc-stream-bridge.js.map +0 -1
- package/dist/src/agent/embedded/xopc-tools-bridge.js.map +0 -1
- package/dist/src/agent/failover-error.js.map +0 -1
- package/dist/src/agent/fallback/candidates.js.map +0 -1
- package/dist/src/agent/fallback/reason.js.map +0 -1
- package/dist/src/agent/feedback/feedback-coordinator.js.map +0 -1
- package/dist/src/agent/goals/checklist-judge.js.map +0 -1
- package/dist/src/agent/goals/checklist-types.js.map +0 -1
- package/dist/src/agent/goals/evaluate-turn.js.map +0 -1
- package/dist/src/agent/goals/goal-locale.js.map +0 -1
- package/dist/src/agent/goals/judge.js.map +0 -1
- package/dist/src/agent/goals/persistent-goal-service.js.map +0 -1
- package/dist/src/agent/goals/post-turn.js.map +0 -1
- package/dist/src/agent/goals/state.js.map +0 -1
- package/dist/src/agent/image/generation/bundled-registry.js.map +0 -1
- package/dist/src/agent/image/generation/bundled.js.map +0 -1
- package/dist/src/agent/image/generation/image-assets.js.map +0 -1
- package/dist/src/agent/image/generation/model-ref.js.map +0 -1
- package/dist/src/agent/image/generation/normalization.js.map +0 -1
- package/dist/src/agent/image/generation/openai-compatible-image-provider.js.map +0 -1
- package/dist/src/agent/image/generation/provider-registry.js.map +0 -1
- package/dist/src/agent/image/generation/runtime.js.map +0 -1
- package/dist/src/agent/image/image-helpers.js.map +0 -1
- package/dist/src/agent/image/image-model-fallback.js.map +0 -1
- package/dist/src/agent/image/inbound-image-handling.js.map +0 -1
- package/dist/src/agent/image/load-image-media.js.map +0 -1
- package/dist/src/agent/image/tool-model-config.js.map +0 -1
- package/dist/src/agent/image/understanding/pi-ai-provider.js.map +0 -1
- package/dist/src/agent/image/understanding/provider-registry.js.map +0 -1
- package/dist/src/agent/image/understanding/runtime.js.map +0 -1
- package/dist/src/agent/image/vision-detection.js.map +0 -1
- package/dist/src/agent/inbound/attachment-pipeline.js.map +0 -1
- package/dist/src/agent/inbound/inbound-loop.js.map +0 -1
- package/dist/src/agent/inbound/turn-dispatcher.js.map +0 -1
- package/dist/src/agent/ipc/bus.js.map +0 -1
- package/dist/src/agent/ipc/inbox.js.map +0 -1
- package/dist/src/agent/ipc/socket.js.map +0 -1
- package/dist/src/agent/ipc/types.js.map +0 -1
- package/dist/src/agent/lifecycle/handlers/compaction.js.map +0 -1
- package/dist/src/agent/lifecycle/hook-handler.js.map +0 -1
- package/dist/src/agent/lifecycle/manager.js.map +0 -1
- package/dist/src/agent/lifecycle/progress.js.map +0 -1
- package/dist/src/agent/lifecycle/timeout-wrapper.js.map +0 -1
- package/dist/src/agent/lifecycle/typing.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-config.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-names.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-policy.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +0 -1
- package/dist/src/agent/mcp/embedded-mcp.js.map +0 -1
- package/dist/src/agent/mcp/mcp-config-shared.js.map +0 -1
- package/dist/src/agent/mcp/mcp-http.js.map +0 -1
- package/dist/src/agent/mcp/mcp-stdio-transport.js.map +0 -1
- package/dist/src/agent/mcp/mcp-stdio.js.map +0 -1
- package/dist/src/agent/mcp/mcp-tool-meta.js.map +0 -1
- package/dist/src/agent/mcp/mcp-transport-config.js.map +0 -1
- package/dist/src/agent/mcp/mcp-transport.js.map +0 -1
- package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +0 -1
- package/dist/src/agent/media-generation/model-ref.js.map +0 -1
- package/dist/src/agent/media-generation/normalization.types.js.map +0 -1
- package/dist/src/agent/media-generation/runtime-shared.js.map +0 -1
- package/dist/src/agent/memory/agent-message-access.js.map +0 -1
- package/dist/src/agent/memory/builtin-memory-store.js.map +0 -1
- package/dist/src/agent/memory/builtin-provider.js.map +0 -1
- package/dist/src/agent/memory/compaction.js.map +0 -1
- package/dist/src/agent/memory/context/planner.js.map +0 -1
- package/dist/src/agent/memory/context-fence.js.map +0 -1
- package/dist/src/agent/memory/create-memory-manager.js.map +0 -1
- package/dist/src/agent/memory/dreaming/config.js.map +0 -1
- package/dist/src/agent/memory/dreaming/constants.js.map +0 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.js.map +0 -1
- package/dist/src/agent/memory/dreaming/events.js.map +0 -1
- package/dist/src/agent/memory/dreaming/last-run.js.map +0 -1
- package/dist/src/agent/memory/dreaming/light-sweep.js.map +0 -1
- package/dist/src/agent/memory/dreaming/preview.js.map +0 -1
- package/dist/src/agent/memory/dreaming/promotion-lifecycle.js.map +0 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js.map +0 -1
- package/dist/src/agent/memory/dreaming/scope.js.map +0 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js.map +0 -1
- package/dist/src/agent/memory/dreaming/utils.js.map +0 -1
- package/dist/src/agent/memory/lifecycle.js.map +0 -1
- package/dist/src/agent/memory/manager.js.map +0 -1
- package/dist/src/agent/memory/memory-config.js.map +0 -1
- package/dist/src/agent/memory/message-sanitizer.js.map +0 -1
- package/dist/src/agent/memory/plugin-discovery.js.map +0 -1
- package/dist/src/agent/memory/sensitivity.js.map +0 -1
- package/dist/src/agent/memory/source-origin.js.map +0 -1
- package/dist/src/agent/memory/stub-memory-provider.js.map +0 -1
- package/dist/src/agent/memory/summary-generator.js.map +0 -1
- package/dist/src/agent/memory/understanding/correction.js.map +0 -1
- package/dist/src/agent/memory/understanding/quality.js.map +0 -1
- package/dist/src/agent/memory/understanding/service.js.map +0 -1
- package/dist/src/agent/memory/user-context-coordinator.js.map +0 -1
- package/dist/src/agent/memory/user-message-text.js.map +0 -1
- package/dist/src/agent/memory/window.js.map +0 -1
- package/dist/src/agent/messaging/command-handler.js.map +0 -1
- package/dist/src/agent/messaging/message-router.js.map +0 -1
- package/dist/src/agent/messaging/outbound-coordinator.js.map +0 -1
- package/dist/src/agent/messaging/stream-manager.js.map +0 -1
- package/dist/src/agent/middleware/context.js.map +0 -1
- package/dist/src/agent/middleware/self-verify.js.map +0 -1
- package/dist/src/agent/models/manager.js.map +0 -1
- package/dist/src/agent/models/request-limiter.js.map +0 -1
- package/dist/src/agent/models/selection.js.map +0 -1
- package/dist/src/agent/orchestration/agent-event-handler.js.map +0 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +0 -1
- package/dist/src/agent/orchestration/llm-turn-retry.js.map +0 -1
- package/dist/src/agent/orchestration/loop-guard.js.map +0 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +0 -1
- package/dist/src/agent/prompt/cache-boundary.js.map +0 -1
- package/dist/src/agent/prompt/memory/index.js.map +0 -1
- package/dist/src/agent/prompt/safety.js.map +0 -1
- package/dist/src/agent/prompt/sanitize-for-prompt.js.map +0 -1
- package/dist/src/agent/prompt/sections/behavior.js.map +0 -1
- package/dist/src/agent/prompt/sections/memory-skills.js.map +0 -1
- package/dist/src/agent/prompt/sections/messaging-runtime.js.map +0 -1
- package/dist/src/agent/prompt/sections/project-context.js.map +0 -1
- package/dist/src/agent/prompt/sections/tooling.js.map +0 -1
- package/dist/src/agent/prompt/sections/workspace-runtime.js.map +0 -1
- package/dist/src/agent/prompt/service-prompt-builder.js.map +0 -1
- package/dist/src/agent/prompt/subagent-context.js.map +0 -1
- package/dist/src/agent/prompt/system-prompt-params.js.map +0 -1
- package/dist/src/agent/prompt/system-prompt.js.map +0 -1
- package/dist/src/agent/prompt/system-reminder.js.map +0 -1
- package/dist/src/agent/reply/apply-turn-user-enrichment.js.map +0 -1
- package/dist/src/agent/reply/post-compaction-context.js.map +0 -1
- package/dist/src/agent/reply/startup-context.js.map +0 -1
- package/dist/src/agent/reply/workspace-boundary-read.js.map +0 -1
- package/dist/src/agent/sandbox/command-validator.js.map +0 -1
- package/dist/src/agent/sandbox/exec-policy.js.map +0 -1
- package/dist/src/agent/sandbox/path-policy.js.map +0 -1
- package/dist/src/agent/sandbox/sanitize-env-vars.js.map +0 -1
- package/dist/src/agent/sandbox/types.js.map +0 -1
- package/dist/src/agent/service/async-queue.js.map +0 -1
- package/dist/src/agent/service/btw-query.js.map +0 -1
- package/dist/src/agent/service/build-direct-message-content.js.map +0 -1
- package/dist/src/agent/service/direct-turn-helpers.js.map +0 -1
- package/dist/src/agent/service/parse-outbound-session-key.js.map +0 -1
- package/dist/src/agent/service/process-direct-one-shot.js.map +0 -1
- package/dist/src/agent/service/process-direct-streaming.js.map +0 -1
- package/dist/src/agent/service/session-context-report.js.map +0 -1
- package/dist/src/agent/service/webchat-tts.js.map +0 -1
- package/dist/src/agent/service-inbound-utils.js.map +0 -1
- package/dist/src/agent/service.js.map +0 -1
- package/dist/src/agent/session/session-config-service.js.map +0 -1
- package/dist/src/agent/session/session-context.js.map +0 -1
- package/dist/src/agent/session/session-hydrator.js.map +0 -1
- package/dist/src/agent/session/session-inspector.js.map +0 -1
- package/dist/src/agent/session/session-lifecycle.js.map +0 -1
- package/dist/src/agent/session/session-state-bag.js.map +0 -1
- package/dist/src/agent/session/tracker.js.map +0 -1
- package/dist/src/agent/skills/config.js.map +0 -1
- package/dist/src/agent/skills/filesystem-watcher.js.map +0 -1
- package/dist/src/agent/skills/format-skills-prompt.js.map +0 -1
- package/dist/src/agent/skills/hub-hash.js.map +0 -1
- package/dist/src/agent/skills/hub-lock.js.map +0 -1
- package/dist/src/agent/skills/hub-pull.js.map +0 -1
- package/dist/src/agent/skills/index.js.map +0 -1
- package/dist/src/agent/skills/install-target.js.map +0 -1
- package/dist/src/agent/skills/installer.js.map +0 -1
- package/dist/src/agent/skills/managed-store.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +0 -1
- package/dist/src/agent/skills/marketplace/marketplace-category-order.js.map +0 -1
- package/dist/src/agent/skills/marketplace/registry.js.map +0 -1
- package/dist/src/agent/skills/marketplace/resolve-adapter.js.map +0 -1
- package/dist/src/agent/skills/parse-skill-metadata.js.map +0 -1
- package/dist/src/agent/skills/required-env-vars.js.map +0 -1
- package/dist/src/agent/skills/scanner.js.map +0 -1
- package/dist/src/agent/skills/skill-manage-ops.js.map +0 -1
- package/dist/src/agent/skills/skill-manager.js.map +0 -1
- package/dist/src/agent/skills/skill-markdown-preview-from-raw.js.map +0 -1
- package/dist/src/agent/skills/skill-tool-gating.js.map +0 -1
- package/dist/src/agent/skills/skill-view-path.js.map +0 -1
- package/dist/src/agent/skills/skills-marketplace.js.map +0 -1
- package/dist/src/agent/skills/test-framework.js.map +0 -1
- package/dist/src/agent/skills/watcher.js.map +0 -1
- package/dist/src/agent/skills/workspace-skills-dir.js.map +0 -1
- package/dist/src/agent/source-context/injector.js.map +0 -1
- package/dist/src/agent/source-context/types.js.map +0 -1
- package/dist/src/agent/starter-agents.js.map +0 -1
- package/dist/src/agent/streaming/reasoning-visibility-sse.js.map +0 -1
- package/dist/src/agent/tool-manuals/browser.js.map +0 -1
- package/dist/src/agent/tool-manuals/index.js.map +0 -1
- package/dist/src/agent/tool-manuals/xopc-use.js.map +0 -1
- package/dist/src/agent/tools/apply-patch.js.map +0 -1
- package/dist/src/agent/tools/automation-tool.js.map +0 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +0 -1
- package/dist/src/agent/tools/browser/tool/schemas.js.map +0 -1
- package/dist/src/agent/tools/chain-tracker.js.map +0 -1
- package/dist/src/agent/tools/clarify-tool.js.map +0 -1
- package/dist/src/agent/tools/cli-clarify.js.map +0 -1
- package/dist/src/agent/tools/communication.js.map +0 -1
- package/dist/src/agent/tools/composio-tool.js.map +0 -1
- package/dist/src/agent/tools/concurrency.js.map +0 -1
- package/dist/src/agent/tools/create-share-tool.js.map +0 -1
- package/dist/src/agent/tools/curated-memory-tool.js.map +0 -1
- package/dist/src/agent/tools/delegate-tool.js.map +0 -1
- package/dist/src/agent/tools/desktop-pet-tool.js.map +0 -1
- package/dist/src/agent/tools/dreaming-tool.js.map +0 -1
- package/dist/src/agent/tools/edit-diff.js.map +0 -1
- package/dist/src/agent/tools/error-pattern-matcher.js.map +0 -1
- package/dist/src/agent/tools/error-tracker.js.map +0 -1
- package/dist/src/agent/tools/exec-command.js.map +0 -1
- package/dist/src/agent/tools/execute-code-tool.js.map +0 -1
- package/dist/src/agent/tools/executor.js.map +0 -1
- package/dist/src/agent/tools/factory.js.map +0 -1
- package/dist/src/agent/tools/find.js.map +0 -1
- package/dist/src/agent/tools/goal-evidence-recorder.js.map +0 -1
- package/dist/src/agent/tools/goal-tool.js.map +0 -1
- package/dist/src/agent/tools/grep.js.map +0 -1
- package/dist/src/agent/tools/image-generate-tool.js.map +0 -1
- package/dist/src/agent/tools/image-tool.js.map +0 -1
- package/dist/src/agent/tools/list-dir.js.map +0 -1
- package/dist/src/agent/tools/media-read-tool.js.map +0 -1
- package/dist/src/agent/tools/memory-tool.js.map +0 -1
- package/dist/src/agent/tools/metadata.js.map +0 -1
- package/dist/src/agent/tools/read.js.map +0 -1
- package/dist/src/agent/tools/search/http.js.map +0 -1
- package/dist/src/agent/tools/search/providers/bing-api.js.map +0 -1
- package/dist/src/agent/tools/search/providers/bing-html.js.map +0 -1
- package/dist/src/agent/tools/search/providers/brave.js.map +0 -1
- package/dist/src/agent/tools/search/providers/duckduckgo-html.js.map +0 -1
- package/dist/src/agent/tools/search/providers/searxng.js.map +0 -1
- package/dist/src/agent/tools/search/providers/tavily.js.map +0 -1
- package/dist/src/agent/tools/search/region.js.map +0 -1
- package/dist/src/agent/tools/search/registry.js.map +0 -1
- package/dist/src/agent/tools/search/resolve-config.js.map +0 -1
- package/dist/src/agent/tools/send-media.js.map +0 -1
- package/dist/src/agent/tools/session-search-tool.js.map +0 -1
- package/dist/src/agent/tools/session-status-tool.js.map +0 -1
- package/dist/src/agent/tools/skill-install-tool.js.map +0 -1
- package/dist/src/agent/tools/skill-manage-tool.js.map +0 -1
- package/dist/src/agent/tools/skills-tools.js.map +0 -1
- package/dist/src/agent/tools/structured-output.js.map +0 -1
- package/dist/src/agent/tools/todo-tool.js.map +0 -1
- package/dist/src/agent/tools/tool-manual-tool.js.map +0 -1
- package/dist/src/agent/tools/tool-paths.js.map +0 -1
- package/dist/src/agent/tools/truncate.js.map +0 -1
- package/dist/src/agent/tools/tts-tool.js.map +0 -1
- package/dist/src/agent/tools/update-plan-tool.js.map +0 -1
- package/dist/src/agent/tools/url-safety.js.map +0 -1
- package/dist/src/agent/tools/usage-analyzer.js.map +0 -1
- package/dist/src/agent/tools/web-extract.js.map +0 -1
- package/dist/src/agent/tools/web.js.map +0 -1
- package/dist/src/agent/tools/workflow-tool.js.map +0 -1
- package/dist/src/agent/tools/write.js.map +0 -1
- package/dist/src/agent/tools/xopc-use-tool.js.map +0 -1
- package/dist/src/agent/transcript/google-api.js.map +0 -1
- package/dist/src/agent/transcript/model-selection.js.map +0 -1
- package/dist/src/agent/transcript/provider-capabilities.js.map +0 -1
- package/dist/src/agent/transcript/session-transcript-repair.js.map +0 -1
- package/dist/src/agent/transcript/strip-tool-messages.js.map +0 -1
- package/dist/src/agent/transcript/thinking-types.js.map +0 -1
- package/dist/src/agent/transcript/thinking.js.map +0 -1
- package/dist/src/agent/transcript/tool-call-id.js.map +0 -1
- package/dist/src/agent/transcript/transcript-hygiene.js.map +0 -1
- package/dist/src/agent/transcript/transcript-policy.js.map +0 -1
- package/dist/src/agent/workflow/agent-progress.js.map +0 -1
- package/dist/src/agent/workflow/builtins/index.js.map +0 -1
- package/dist/src/agent/workflow/catalog.js.map +0 -1
- package/dist/src/agent/workflow/progress-broker.js.map +0 -1
- package/dist/src/agent/workflow/snapshot-empty.js.map +0 -1
- package/dist/src/agent/workflow/snapshot.js.map +0 -1
- package/dist/src/agent/workflow/step-labels.js.map +0 -1
- package/dist/src/agent/workflow/structured-output-tool.js.map +0 -1
- package/dist/src/agent/workflow/subagent-runner.js.map +0 -1
- package/dist/src/agent/workflow/workflow-child-tools.js.map +0 -1
- package/dist/src/agent/workspace-runtime/registry.js.map +0 -1
- package/dist/src/agent-manifest/index.js.map +0 -1
- package/dist/src/agent-manifest/preset-chain.js.map +0 -1
- package/dist/src/agent-manifest/prompt.js.map +0 -1
- package/dist/src/agent-manifest/resolver.js.map +0 -1
- package/dist/src/agent-manifest/schema.js.map +0 -1
- package/dist/src/agent-manifest/validator.js.map +0 -1
- package/dist/src/agent-runtime/boundary-guard.js.map +0 -1
- package/dist/src/agent-runtime/memory-runtime.js.map +0 -1
- package/dist/src/agent-runtime/model-router.js.map +0 -1
- package/dist/src/agent-runtime/run-trace.js.map +0 -1
- package/dist/src/agent-runtime/runtime-profile.js.map +0 -1
- package/dist/src/agent-runtime/tool-registry.js.map +0 -1
- package/dist/src/agent-runtime/workflow-runtime.js.map +0 -1
- package/dist/src/ai-assist/text-assist.js.map +0 -1
- package/dist/src/auth/credentials.js.map +0 -1
- package/dist/src/auth/index.js.map +0 -1
- package/dist/src/auth/oauth/anthropic.js.map +0 -1
- package/dist/src/auth/oauth/github-copilot.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/google-antigravity.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/oauth-page.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/pkce.js.map +0 -1
- package/dist/src/auth/oauth/kimi-coding.js.map +0 -1
- package/dist/src/auth/oauth/minimax-cn.js.map +0 -1
- package/dist/src/auth/oauth/minimax.js.map +0 -1
- package/dist/src/auth/oauth/openai-codex.js.map +0 -1
- package/dist/src/auth/oauth/pkce.js.map +0 -1
- package/dist/src/auth/profiles/oauth.js.map +0 -1
- package/dist/src/auth/profiles/order.js.map +0 -1
- package/dist/src/auth/profiles/profiles.js.map +0 -1
- package/dist/src/auth/profiles/store.js.map +0 -1
- package/dist/src/auth/sync-provider-auth.js.map +0 -1
- package/dist/src/automations/api/routes.js.map +0 -1
- package/dist/src/automations/domain/schedule.js.map +0 -1
- package/dist/src/automations/domain/validation.js.map +0 -1
- package/dist/src/automations/draft/automation-draft-prompt.js.map +0 -1
- package/dist/src/automations/draft/automation-draft-service.js.map +0 -1
- package/dist/src/automations/draft/automation-draft-validator.js.map +0 -1
- package/dist/src/automations/product-events.js.map +0 -1
- package/dist/src/automations/service/action-executor.js.map +0 -1
- package/dist/src/automations/service/automation-service.js.map +0 -1
- package/dist/src/automations/storage/automation-repository.js.map +0 -1
- package/dist/src/automations/storage/automation-run-repository.js.map +0 -1
- package/dist/src/browser/actions/extension-registry-bridge.js.map +0 -1
- package/dist/src/browser/actions/registry.js.map +0 -1
- package/dist/src/browser/backend-from-config.js.map +0 -1
- package/dist/src/browser/browser-command-timeout.js.map +0 -1
- package/dist/src/browser/cache-dir-policy.js.map +0 -1
- package/dist/src/browser/cdp-local-launcher.js.map +0 -1
- package/dist/src/browser/cdp-supervisor.js.map +0 -1
- package/dist/src/browser/free-port.js.map +0 -1
- package/dist/src/browser/humanize.js.map +0 -1
- package/dist/src/browser/install-lock.js.map +0 -1
- package/dist/src/browser/manager.js.map +0 -1
- package/dist/src/browser/pipeline/output.js.map +0 -1
- package/dist/src/browser/pipeline/runner.js.map +0 -1
- package/dist/src/browser/pipeline/schema.js.map +0 -1
- package/dist/src/browser/pipeline/source.js.map +0 -1
- package/dist/src/browser/pipeline/template.js.map +0 -1
- package/dist/src/browser/providers/browser-ext-install.js.map +0 -1
- package/dist/src/browser/providers/browser-use.js.map +0 -1
- package/dist/src/browser/providers/browserbase.js.map +0 -1
- package/dist/src/browser/providers/cloakbrowser.js.map +0 -1
- package/dist/src/browser/providers/extension-ws-acquire.js.map +0 -1
- package/dist/src/browser/providers/extension.js.map +0 -1
- package/dist/src/browser/providers/playwright-doctor.js.map +0 -1
- package/dist/src/browser/providers/playwright-install.js.map +0 -1
- package/dist/src/browser/readiness.js.map +0 -1
- package/dist/src/browser/schemas.js.map +0 -1
- package/dist/src/browser/session-lifecycle.js.map +0 -1
- package/dist/src/browser/snapshot-helpers.js.map +0 -1
- package/dist/src/browser/stealth.js.map +0 -1
- package/dist/src/browser/url-policy.js.map +0 -1
- package/dist/src/capabilities/store-connector.js.map +0 -1
- package/dist/src/channels/attachments/attachment-classifiers.js.map +0 -1
- package/dist/src/channels/attachments/inbound-persist.js.map +0 -1
- package/dist/src/channels/attachments/inbound-types.js.map +0 -1
- package/dist/src/channels/attachments/outbound-tts-persist.js.map +0 -1
- package/dist/src/channels/attachments/voice-stt-webchat.js.map +0 -1
- package/dist/src/channels/catalog/channel-catalog-service.js.map +0 -1
- package/dist/src/channels/config-helpers.js.map +0 -1
- package/dist/src/channels/envelope-timestamp.js.map +0 -1
- package/dist/src/channels/exec-approval-runtime.js.map +0 -1
- package/dist/src/channels/health-monitor.js.map +0 -1
- package/dist/src/channels/heartbeat-scheduler.js.map +0 -1
- package/dist/src/channels/internal-outbound.js.map +0 -1
- package/dist/src/channels/lifecycle-supervisor.js.map +0 -1
- package/dist/src/channels/manager.js.map +0 -1
- package/dist/src/channels/media.js.map +0 -1
- package/dist/src/channels/outbound/deliver.js.map +0 -1
- package/dist/src/channels/outbound/normalize.js.map +0 -1
- package/dist/src/channels/outbound/persist-store.js.map +0 -1
- package/dist/src/channels/outbound/queue.js.map +0 -1
- package/dist/src/channels/outbound-sender.js.map +0 -1
- package/dist/src/channels/pairing/allow-from-file.js.map +0 -1
- package/dist/src/channels/pairing/approve-cli.js.map +0 -1
- package/dist/src/channels/pairing/pairing-challenge.js.map +0 -1
- package/dist/src/channels/pairing/pairing-constants.js.map +0 -1
- package/dist/src/channels/pairing/pairing-events.js.map +0 -1
- package/dist/src/channels/pairing/pairing-messages.js.map +0 -1
- package/dist/src/channels/pairing/pairing-service.js.map +0 -1
- package/dist/src/channels/pairing/pairing-store-adapter.js.map +0 -1
- package/dist/src/channels/pairing/pairing-store.js.map +0 -1
- package/dist/src/channels/pairing/paths.js.map +0 -1
- package/dist/src/channels/pairing/preseed-allow-from.js.map +0 -1
- package/dist/src/channels/pipeline.js.map +0 -1
- package/dist/src/channels/plugin-registry.js.map +0 -1
- package/dist/src/channels/plugins/registry.js.map +0 -1
- package/dist/src/channels/restart-policy.js.map +0 -1
- package/dist/src/channels/security-helpers.js.map +0 -1
- package/dist/src/channels/security.js.map +0 -1
- package/dist/src/channels/setup-wizard-discovery.js.map +0 -1
- package/dist/src/chat-commands/agent-edit.js.map +0 -1
- package/dist/src/chat-commands/builtins/config.js.map +0 -1
- package/dist/src/chat-commands/builtins/context.js.map +0 -1
- package/dist/src/chat-commands/builtins/goal.js.map +0 -1
- package/dist/src/chat-commands/builtins/model.js.map +0 -1
- package/dist/src/chat-commands/builtins/review.js.map +0 -1
- package/dist/src/chat-commands/builtins/session.js.map +0 -1
- package/dist/src/chat-commands/builtins/skill.js.map +0 -1
- package/dist/src/chat-commands/builtins/subgoal.js.map +0 -1
- package/dist/src/chat-commands/builtins/system.js.map +0 -1
- package/dist/src/chat-commands/builtins/thinking.js.map +0 -1
- package/dist/src/chat-commands/builtins/tts.js.map +0 -1
- package/dist/src/chat-commands/builtins/workflow.js.map +0 -1
- package/dist/src/chat-commands/command-parse.js.map +0 -1
- package/dist/src/chat-commands/config-paths.js.map +0 -1
- package/dist/src/chat-commands/config-value.js.map +0 -1
- package/dist/src/chat-commands/context.js.map +0 -1
- package/dist/src/chat-commands/format-output.js.map +0 -1
- package/dist/src/chat-commands/index.js.map +0 -1
- package/dist/src/chat-commands/processor.js.map +0 -1
- package/dist/src/chat-commands/registry.js.map +0 -1
- package/dist/src/chat-commands/session-key.js.map +0 -1
- package/dist/src/cli/argv-invocation.js.map +0 -1
- package/dist/src/cli/argv.js.map +0 -1
- package/dist/src/cli/bin.js.map +0 -1
- package/dist/src/cli/cli-log-level-preset.js.map +0 -1
- package/dist/src/cli/command-catalog.js.map +0 -1
- package/dist/src/cli/command-loaders.js.map +0 -1
- package/dist/src/cli/command-manifest.js.map +0 -1
- package/dist/src/cli/command-path-matches.js.map +0 -1
- package/dist/src/cli/command-path-policy.js.map +0 -1
- package/dist/src/cli/command-startup-policy.js.map +0 -1
- package/dist/src/cli/commands/agent/interactive.js.map +0 -1
- package/dist/src/cli/commands/agent/sessions.js.map +0 -1
- package/dist/src/cli/commands/agent/stream-renderer.js.map +0 -1
- package/dist/src/cli/commands/agent.js.map +0 -1
- package/dist/src/cli/commands/agents.js.map +0 -1
- package/dist/src/cli/commands/auth.js.map +0 -1
- package/dist/src/cli/commands/browser-cli-helpers.js.map +0 -1
- package/dist/src/cli/commands/browser.js.map +0 -1
- package/dist/src/cli/commands/channels.js.map +0 -1
- package/dist/src/cli/commands/config.js.map +0 -1
- package/dist/src/cli/commands/connectors.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/channel-config.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/config-health.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/gateway-health.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/gateway-service.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/migrations.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/node-version.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/security-audit.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/state-integrity.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/version-check.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +0 -1
- package/dist/src/cli/commands/doctor/flow.js.map +0 -1
- package/dist/src/cli/commands/doctor/format.js.map +0 -1
- package/dist/src/cli/commands/doctor/index.js.map +0 -1
- package/dist/src/cli/commands/extension-create.js.map +0 -1
- package/dist/src/cli/commands/extension-dev.js.map +0 -1
- package/dist/src/cli/commands/extension-marketplace.js.map +0 -1
- package/dist/src/cli/commands/extension-pack.js.map +0 -1
- package/dist/src/cli/commands/extension.js.map +0 -1
- package/dist/src/cli/commands/gateway/call.js.map +0 -1
- package/dist/src/cli/commands/gateway/health.js.map +0 -1
- package/dist/src/cli/commands/gateway/lifecycle-core.js.map +0 -1
- package/dist/src/cli/commands/gateway/lifecycle.js.map +0 -1
- package/dist/src/cli/commands/gateway/logs.js.map +0 -1
- package/dist/src/cli/commands/gateway/probe.js.map +0 -1
- package/dist/src/cli/commands/gateway/restart-health.js.map +0 -1
- package/dist/src/cli/commands/gateway/restart.js.map +0 -1
- package/dist/src/cli/commands/gateway/run-foreground.js.map +0 -1
- package/dist/src/cli/commands/gateway/service.js.map +0 -1
- package/dist/src/cli/commands/gateway/shared.js.map +0 -1
- package/dist/src/cli/commands/gateway/status.js.map +0 -1
- package/dist/src/cli/commands/gateway/stop.js.map +0 -1
- package/dist/src/cli/commands/gateway/subcommands.js.map +0 -1
- package/dist/src/cli/commands/gateway/token.js.map +0 -1
- package/dist/src/cli/commands/gateway-ssh-tunnel.js.map +0 -1
- package/dist/src/cli/commands/gateway.js.map +0 -1
- package/dist/src/cli/commands/goal.js.map +0 -1
- package/dist/src/cli/commands/image.js.map +0 -1
- package/dist/src/cli/commands/init.js.map +0 -1
- package/dist/src/cli/commands/logs.js.map +0 -1
- package/dist/src/cli/commands/models.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/index.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/registry.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js.map +0 -1
- package/dist/src/cli/commands/onboard/gateway.js.map +0 -1
- package/dist/src/cli/commands/onboard/model.js.map +0 -1
- package/dist/src/cli/commands/onboard.js.map +0 -1
- package/dist/src/cli/commands/profile.js.map +0 -1
- package/dist/src/cli/commands/project.js.map +0 -1
- package/dist/src/cli/commands/providers.js.map +0 -1
- package/dist/src/cli/commands/resume.js.map +0 -1
- package/dist/src/cli/commands/search.js.map +0 -1
- package/dist/src/cli/commands/session/actions.js.map +0 -1
- package/dist/src/cli/commands/session/utils.js.map +0 -1
- package/dist/src/cli/commands/session.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/output.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/prompts.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/runner.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/types.js.map +0 -1
- package/dist/src/cli/commands/setup.js.map +0 -1
- package/dist/src/cli/commands/skills-test.js.map +0 -1
- package/dist/src/cli/commands/skills.js.map +0 -1
- package/dist/src/cli/commands/tailscale.js.map +0 -1
- package/dist/src/cli/commands/tui-runner.js.map +0 -1
- package/dist/src/cli/commands/tui.js.map +0 -1
- package/dist/src/cli/commands/tunnel.js.map +0 -1
- package/dist/src/cli/commands/update.js.map +0 -1
- package/dist/src/cli/commands/voice.js.map +0 -1
- package/dist/src/cli/context.js.map +0 -1
- package/dist/src/cli/extension-cli-register.js.map +0 -1
- package/dist/src/cli/gateway-run-argv.js.map +0 -1
- package/dist/src/cli/gateway-run-fast-path.js.map +0 -1
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cli/registry.js.map +0 -1
- package/dist/src/cli/templates.js.map +0 -1
- package/dist/src/cli/utils/colors.js.map +0 -1
- package/dist/src/cli/utils/gateway-client-options.js.map +0 -1
- package/dist/src/cli/utils/gateway-client.js.map +0 -1
- package/dist/src/cli/utils/init-workspace-core.js.map +0 -1
- package/dist/src/cli/utils/init-workspace.js.map +0 -1
- package/dist/src/cli/utils/oauth-login.js.map +0 -1
- package/dist/src/cli/utils/oauth-providers.js.map +0 -1
- package/dist/src/cli/utils/session.js.map +0 -1
- package/dist/src/commands/agents.config.js.map +0 -1
- package/dist/src/config/agent-profile.js.map +0 -1
- package/dist/src/config/agent-typed-models.js.map +0 -1
- package/dist/src/config/commands.flags.js.map +0 -1
- package/dist/src/config/default-model.js.map +0 -1
- package/dist/src/config/diff.js.map +0 -1
- package/dist/src/config/gateway-bind.js.map +0 -1
- package/dist/src/config/index.js.map +0 -1
- package/dist/src/config/loader.js.map +0 -1
- package/dist/src/config/mcp-config-normalize.js.map +0 -1
- package/dist/src/config/model-input.js.map +0 -1
- package/dist/src/config/models-json.js.map +0 -1
- package/dist/src/config/paths-state.js.map +0 -1
- package/dist/src/config/paths.js.map +0 -1
- package/dist/src/config/profile.js.map +0 -1
- package/dist/src/config/public-url.js.map +0 -1
- package/dist/src/config/reload.js.map +0 -1
- package/dist/src/config/resolve-config-value.js.map +0 -1
- package/dist/src/config/rules.js.map +0 -1
- package/dist/src/config/runtime-overrides.js.map +0 -1
- package/dist/src/config/schema.js.map +0 -1
- package/dist/src/config/validate-channel-configs.js.map +0 -1
- package/dist/src/config/voice.js.map +0 -1
- package/dist/src/config/web-patch.js.map +0 -1
- package/dist/src/config/workspace-defaults.js.map +0 -1
- package/dist/src/config/workspace-dirs.js.map +0 -1
- package/dist/src/config/workspace-path-helpers.js.map +0 -1
- package/dist/src/config/workspace-path.js.map +0 -1
- package/dist/src/connectors/approval.js.map +0 -1
- package/dist/src/connectors/auth-provider-registry.js.map +0 -1
- package/dist/src/connectors/builtin-catalog.js.map +0 -1
- package/dist/src/connectors/catalog.js.map +0 -1
- package/dist/src/connectors/composio-catalog.js.map +0 -1
- package/dist/src/connectors/composio-logo.js.map +0 -1
- package/dist/src/connectors/composio-sessions.js.map +0 -1
- package/dist/src/connectors/composio-triggers.js.map +0 -1
- package/dist/src/connectors/composio.js.map +0 -1
- package/dist/src/connectors/connector-memory-sync.js.map +0 -1
- package/dist/src/connectors/health.js.map +0 -1
- package/dist/src/connectors/install.js.map +0 -1
- package/dist/src/connectors/instances.js.map +0 -1
- package/dist/src/connectors/integration-strategy.js.map +0 -1
- package/dist/src/connectors/lifecycle.js.map +0 -1
- package/dist/src/connectors/materialize.js.map +0 -1
- package/dist/src/connectors/policy.js.map +0 -1
- package/dist/src/connectors/providers.js.map +0 -1
- package/dist/src/connectors/registries/modelscope.js.map +0 -1
- package/dist/src/connectors/registries/official-mcp.js.map +0 -1
- package/dist/src/connectors/registries/search.js.map +0 -1
- package/dist/src/connectors/registries/smithery.js.map +0 -1
- package/dist/src/connectors/runtime-adapter-registry.js.map +0 -1
- package/dist/src/connectors/secret-store.js.map +0 -1
- package/dist/src/connectors/setup-secrets.js.map +0 -1
- package/dist/src/connectors/supervisor.js.map +0 -1
- package/dist/src/connectors/usage.js.map +0 -1
- package/dist/src/connectors/workflow-preflight.js.map +0 -1
- package/dist/src/daemon/constants.js.map +0 -1
- package/dist/src/daemon/install-plan.js.map +0 -1
- package/dist/src/daemon/launchd.js.map +0 -1
- package/dist/src/daemon/schtasks.js.map +0 -1
- package/dist/src/daemon/service-audit.js.map +0 -1
- package/dist/src/daemon/service.js.map +0 -1
- package/dist/src/daemon/systemd.js.map +0 -1
- package/dist/src/document-understanding/extract.js.map +0 -1
- package/dist/src/errors/index.js.map +0 -1
- package/dist/src/extensions/activation-context.js.map +0 -1
- package/dist/src/extensions/activation-planner.js.map +0 -1
- package/dist/src/extensions/api.js.map +0 -1
- package/dist/src/extensions/bundle-mcp.js.map +0 -1
- package/dist/src/extensions/bundled-extension-activation.js.map +0 -1
- package/dist/src/extensions/diagnostics.js.map +0 -1
- package/dist/src/extensions/discover-extensions.js.map +0 -1
- package/dist/src/extensions/engine-check.js.map +0 -1
- package/dist/src/extensions/extension-metadata-snapshot.js.map +0 -1
- package/dist/src/extensions/extension-registry-impl.js.map +0 -1
- package/dist/src/extensions/health.js.map +0 -1
- package/dist/src/extensions/hooks.js.map +0 -1
- package/dist/src/extensions/index.js.map +0 -1
- package/dist/src/extensions/install-transaction.js.map +0 -1
- package/dist/src/extensions/install.js.map +0 -1
- package/dist/src/extensions/loader.js.map +0 -1
- package/dist/src/extensions/lockfile.js.map +0 -1
- package/dist/src/extensions/manifest-registry.js.map +0 -1
- package/dist/src/extensions/marketplace.js.map +0 -1
- package/dist/src/extensions/media-provider-contracts.js.map +0 -1
- package/dist/src/extensions/normalize-manifest.js.map +0 -1
- package/dist/src/extensions/onboard-helpers.js.map +0 -1
- package/dist/src/extensions/package-contract.js.map +0 -1
- package/dist/src/extensions/sdk/channel-entry.js.map +0 -1
- package/dist/src/extensions/sdk/channel-helpers.js.map +0 -1
- package/dist/src/extensions/sdk/index.js.map +0 -1
- package/dist/src/extensions/sdk/lazy.js.map +0 -1
- package/dist/src/extensions/sdk/testing.js.map +0 -1
- package/dist/src/extensions/security.js.map +0 -1
- package/dist/src/extensions/slots.js.map +0 -1
- package/dist/src/extensions/speech-provider-contracts.js.map +0 -1
- package/dist/src/extensions/store-zip-limits.js.map +0 -1
- package/dist/src/extensions/typed-event-bus.js.map +0 -1
- package/dist/src/extensions/types/hooks.js.map +0 -1
- package/dist/src/extensions/types/providers.js.map +0 -1
- package/dist/src/extensions/update.js.map +0 -1
- package/dist/src/extensions/when-context.js.map +0 -1
- package/dist/src/extensions/when-expression.js.map +0 -1
- package/dist/src/gateway/agent-builtin-tools.js.map +0 -1
- package/dist/src/gateway/agent-run-relay.js.map +0 -1
- package/dist/src/gateway/agents-admin.js.map +0 -1
- package/dist/src/gateway/auth.js.map +0 -1
- package/dist/src/gateway/capability-presets-admin.js.map +0 -1
- package/dist/src/gateway/chat-limits.js.map +0 -1
- package/dist/src/gateway/chat-stream/mapper.js.map +0 -1
- package/dist/src/gateway/clarify-bridge.js.map +0 -1
- package/dist/src/gateway/clarify-runtime.js.map +0 -1
- package/dist/src/gateway/client-ip.js.map +0 -1
- package/dist/src/gateway/config-tools-web.js.map +0 -1
- package/dist/src/gateway/credential.js.map +0 -1
- package/dist/src/gateway/discovery/mdns.js.map +0 -1
- package/dist/src/gateway/dreaming-automation-reconciler.js.map +0 -1
- package/dist/src/gateway/ensure-network-cors.js.map +0 -1
- package/dist/src/gateway/file-path-classifier.js.map +0 -1
- package/dist/src/gateway/file-reference-registry.js.map +0 -1
- package/dist/src/gateway/global-defaults-admin.js.map +0 -1
- package/dist/src/gateway/heartbeat/service.js.map +0 -1
- package/dist/src/gateway/hono/app.js.map +0 -1
- package/dist/src/gateway/hono/lib/agent-model.js.map +0 -1
- package/dist/src/gateway/hono/lib/config-payload.js.map +0 -1
- package/dist/src/gateway/hono/lib/extension-assets.js.map +0 -1
- package/dist/src/gateway/hono/lib/extension-store.js.map +0 -1
- package/dist/src/gateway/hono/lib/mask-secret-length.js.map +0 -1
- package/dist/src/gateway/hono/lib/route-logger.js.map +0 -1
- package/dist/src/gateway/hono/lib/safe-providers-config.js.map +0 -1
- package/dist/src/gateway/hono/lib/safe-voice-config.js.map +0 -1
- package/dist/src/gateway/hono/lib/startup-unavailable.js.map +0 -1
- package/dist/src/gateway/hono/lib/static-ui.js.map +0 -1
- package/dist/src/gateway/hono/middleware/auth.js.map +0 -1
- package/dist/src/gateway/hono/middleware/log-context.js.map +0 -1
- package/dist/src/gateway/hono/middleware/logger.js.map +0 -1
- package/dist/src/gateway/hono/middleware/route-errors.js.map +0 -1
- package/dist/src/gateway/hono/middleware/scopes.js.map +0 -1
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js.map +0 -1
- package/dist/src/gateway/hono/oauth-async.js.map +0 -1
- package/dist/src/gateway/hono/oauth.js.map +0 -1
- package/dist/src/gateway/hono/routes/activity.js.map +0 -1
- package/dist/src/gateway/hono/routes/agent-stream.js.map +0 -1
- package/dist/src/gateway/hono/routes/agents.js.map +0 -1
- package/dist/src/gateway/hono/routes/ai-assist.js.map +0 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js.map +0 -1
- package/dist/src/gateway/hono/routes/browser-install.js.map +0 -1
- package/dist/src/gateway/hono/routes/browser.js.map +0 -1
- package/dist/src/gateway/hono/routes/capabilities.js.map +0 -1
- package/dist/src/gateway/hono/routes/capability-presets.js.map +0 -1
- package/dist/src/gateway/hono/routes/channels.js.map +0 -1
- package/dist/src/gateway/hono/routes/commands-skills.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/agents.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/channels.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/result.js.map +0 -1
- package/dist/src/gateway/hono/routes/config.js.map +0 -1
- package/dist/src/gateway/hono/routes/connectors.js.map +0 -1
- package/dist/src/gateway/hono/routes/doctor.js.map +0 -1
- package/dist/src/gateway/hono/routes/dreaming.js.map +0 -1
- package/dist/src/gateway/hono/routes/exposure.js.map +0 -1
- package/dist/src/gateway/hono/routes/extension-gateway.js.map +0 -1
- package/dist/src/gateway/hono/routes/global-defaults.js.map +0 -1
- package/dist/src/gateway/hono/routes/goals.js.map +0 -1
- package/dist/src/gateway/hono/routes/home.js.map +0 -1
- package/dist/src/gateway/hono/routes/host-fs.js.map +0 -1
- package/dist/src/gateway/hono/routes/index.js.map +0 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +0 -1
- package/dist/src/gateway/hono/routes/lazy-fallback.js.map +0 -1
- package/dist/src/gateway/hono/routes/local-apps.js.map +0 -1
- package/dist/src/gateway/hono/routes/logs.js.map +0 -1
- package/dist/src/gateway/hono/routes/mcp.js.map +0 -1
- package/dist/src/gateway/hono/routes/media.js.map +0 -1
- package/dist/src/gateway/hono/routes/memory.js.map +0 -1
- package/dist/src/gateway/hono/routes/migrations.js.map +0 -1
- package/dist/src/gateway/hono/routes/mobile.js.map +0 -1
- package/dist/src/gateway/hono/routes/models.js.map +0 -1
- package/dist/src/gateway/hono/routes/notes.js.map +0 -1
- package/dist/src/gateway/hono/routes/projects.js.map +0 -1
- package/dist/src/gateway/hono/routes/public-gateway.js.map +0 -1
- package/dist/src/gateway/hono/routes/search.js.map +0 -1
- package/dist/src/gateway/hono/routes/sessions.js.map +0 -1
- package/dist/src/gateway/hono/routes/shares.js.map +0 -1
- package/dist/src/gateway/hono/routes/site-shares.js.map +0 -1
- package/dist/src/gateway/hono/routes/status.js.map +0 -1
- package/dist/src/gateway/hono/routes/tui.js.map +0 -1
- package/dist/src/gateway/hono/routes/tunnel.js.map +0 -1
- package/dist/src/gateway/hono/routes/update.js.map +0 -1
- package/dist/src/gateway/hono/routes/voice.js.map +0 -1
- package/dist/src/gateway/hono/routes/work-discovery.js.map +0 -1
- package/dist/src/gateway/hono/routes/workflows.js.map +0 -1
- package/dist/src/gateway/hono/routes/workspace.js.map +0 -1
- package/dist/src/gateway/hono/routes/you.js.map +0 -1
- package/dist/src/gateway/hono/sse-json.js.map +0 -1
- package/dist/src/gateway/hono/sse.js.map +0 -1
- package/dist/src/gateway/host.js.map +0 -1
- package/dist/src/gateway/image-capabilities.js.map +0 -1
- package/dist/src/gateway/listen.js.map +0 -1
- package/dist/src/gateway/lock.js.map +0 -1
- package/dist/src/gateway/ports.js.map +0 -1
- package/dist/src/gateway/protocol.js.map +0 -1
- package/dist/src/gateway/public-url.js.map +0 -1
- package/dist/src/gateway/rate-limit/auth-policy.js.map +0 -1
- package/dist/src/gateway/rate-limit/buckets.js.map +0 -1
- package/dist/src/gateway/rate-limit/env-flags.js.map +0 -1
- package/dist/src/gateway/resolve-channel-connect-defer.js.map +0 -1
- package/dist/src/gateway/resolve-webchat-session-key.js.map +0 -1
- package/dist/src/gateway/respawn.js.map +0 -1
- package/dist/src/gateway/run-loop.js.map +0 -1
- package/dist/src/gateway/runtime-config.js.map +0 -1
- package/dist/src/gateway/security/audit.js.map +0 -1
- package/dist/src/gateway/security/csp.js.map +0 -1
- package/dist/src/gateway/security/dangerous-tools.js.map +0 -1
- package/dist/src/gateway/security/external-content.js.map +0 -1
- package/dist/src/gateway/security/known-weak-secrets.js.map +0 -1
- package/dist/src/gateway/security/loopback.js.map +0 -1
- package/dist/src/gateway/security/operator-scopes.js.map +0 -1
- package/dist/src/gateway/security/origin-check.js.map +0 -1
- package/dist/src/gateway/security/preauth-connection-budget.js.map +0 -1
- package/dist/src/gateway/security/secret-equal.js.map +0 -1
- package/dist/src/gateway/server-tailscale.js.map +0 -1
- package/dist/src/gateway/server.js.map +0 -1
- package/dist/src/gateway/service/agent-runner.js.map +0 -1
- package/dist/src/gateway/service/config-coordinator.js.map +0 -1
- package/dist/src/gateway/service/marketplace-service.js.map +0 -1
- package/dist/src/gateway/service/run-gateway-agent.js.map +0 -1
- package/dist/src/gateway/service/session-chat-ids.js.map +0 -1
- package/dist/src/gateway/service/sessions-api.js.map +0 -1
- package/dist/src/gateway/service/sse-hub.js.map +0 -1
- package/dist/src/gateway/service.js.map +0 -1
- package/dist/src/gateway/session-reset-service.js.map +0 -1
- package/dist/src/gateway/startup-readiness.js.map +0 -1
- package/dist/src/gateway/startup-trace.js.map +0 -1
- package/dist/src/gateway/tailscale-auth.js.map +0 -1
- package/dist/src/gateway/tailscale-lifecycle.js.map +0 -1
- package/dist/src/gateway/tls-server.js.map +0 -1
- package/dist/src/gateway/trusted-proxy.js.map +0 -1
- package/dist/src/gateway/user-turn-input.js.map +0 -1
- package/dist/src/gateway/workspace-editor-path.js.map +0 -1
- package/dist/src/gateway/workspace-file-search.js.map +0 -1
- package/dist/src/gateway/workspace-fs-file-list.js.map +0 -1
- package/dist/src/gateway/workspace-heartbeat-path.js.map +0 -1
- package/dist/src/gateway/workspace-ripgrep.js.map +0 -1
- package/dist/src/gateway/ws-security.js.map +0 -1
- package/dist/src/generated/bundled-image-generation-providers.js.map +0 -1
- package/dist/src/goals/goal-contract-draft.js.map +0 -1
- package/dist/src/goals/goal-evidence-review.js.map +0 -1
- package/dist/src/goals/goal-notifications.js.map +0 -1
- package/dist/src/goals/goal-queue-store.js.map +0 -1
- package/dist/src/goals/goal-runner.js.map +0 -1
- package/dist/src/goals/goal-service.js.map +0 -1
- package/dist/src/goals/goal-store.js.map +0 -1
- package/dist/src/goals/goal-workflow-judge.js.map +0 -1
- package/dist/src/heartbeat/active-hours.js.map +0 -1
- package/dist/src/heartbeat/content-check.js.map +0 -1
- package/dist/src/heartbeat/event-prompt.js.map +0 -1
- package/dist/src/heartbeat/tokens.js.map +0 -1
- package/dist/src/heartbeat/wake.js.map +0 -1
- package/dist/src/i18n/format.js.map +0 -1
- package/dist/src/i18n/goals-bundle.js.map +0 -1
- package/dist/src/i18n/locale.js.map +0 -1
- package/dist/src/i18n/locales/goals.en.js.map +0 -1
- package/dist/src/i18n/locales/goals.zh.js.map +0 -1
- package/dist/src/i18n/locales/share-tool.en.js.map +0 -1
- package/dist/src/i18n/locales/share-tool.zh.js.map +0 -1
- package/dist/src/i18n/share-tool-bundle.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/infra/brew.js.map +0 -1
- package/dist/src/infra/bus/queue.js.map +0 -1
- package/dist/src/infra/debounce.js.map +0 -1
- package/dist/src/infra/exec.js.map +0 -1
- package/dist/src/infra/gateway-process-argv.js.map +0 -1
- package/dist/src/infra/gateway-processes.js.map +0 -1
- package/dist/src/infra/host-env-security-policy.js.map +0 -1
- package/dist/src/infra/host-env-security.js.map +0 -1
- package/dist/src/infra/http-proxy-env.js.map +0 -1
- package/dist/src/infra/is-main.js.map +0 -1
- package/dist/src/infra/json-utf8-bytes.js.map +0 -1
- package/dist/src/infra/node-sqlite.js.map +0 -1
- package/dist/src/infra/package-json.js.map +0 -1
- package/dist/src/infra/package-update-steps.js.map +0 -1
- package/dist/src/infra/path-env.js.map +0 -1
- package/dist/src/infra/path-prepend.js.map +0 -1
- package/dist/src/infra/ports.js.map +0 -1
- package/dist/src/infra/rate-limit/failure-limiter.js.map +0 -1
- package/dist/src/infra/rate-limit/keyed-store.js.map +0 -1
- package/dist/src/infra/rate-limit/rate-limiter.js.map +0 -1
- package/dist/src/infra/restart.js.map +0 -1
- package/dist/src/infra/retry.js.map +0 -1
- package/dist/src/infra/run-command.js.map +0 -1
- package/dist/src/infra/sqlite-errors.js.map +0 -1
- package/dist/src/infra/ssh-tunnel.js.map +0 -1
- package/dist/src/infra/stable-node-path.js.map +0 -1
- package/dist/src/infra/tailscale.js.map +0 -1
- package/dist/src/infra/undici-fetch.js.map +0 -1
- package/dist/src/infra/unhandled-rejections.js.map +0 -1
- package/dist/src/infra/update-channels.js.map +0 -1
- package/dist/src/infra/update-check.js.map +0 -1
- package/dist/src/infra/update-global.js.map +0 -1
- package/dist/src/infra/update-lock.js.map +0 -1
- package/dist/src/infra/update-log.js.map +0 -1
- package/dist/src/infra/update-restart.js.map +0 -1
- package/dist/src/infra/update-runner.js.map +0 -1
- package/dist/src/infra/update-startup.js.map +0 -1
- package/dist/src/infra/warning-filter.js.map +0 -1
- package/dist/src/infra/write-file-atomic.js.map +0 -1
- package/dist/src/knowledge/connected-knowledge-pipeline.js.map +0 -1
- package/dist/src/knowledge/coordinator.js.map +0 -1
- package/dist/src/knowledge/ingestion-service.js.map +0 -1
- package/dist/src/local-apps/acceptance.js.map +0 -1
- package/dist/src/local-apps/preview-runtime-bridge.js.map +0 -1
- package/dist/src/local-apps/runtime-entry.js.map +0 -1
- package/dist/src/local-apps/scaffold.js.map +0 -1
- package/dist/src/local-apps/service.js.map +0 -1
- package/dist/src/local-apps/store.js.map +0 -1
- package/dist/src/markdown/chunk.js.map +0 -1
- package/dist/src/markdown/code-spans.js.map +0 -1
- package/dist/src/markdown/fences.js.map +0 -1
- package/dist/src/markdown/frontmatter.js.map +0 -1
- package/dist/src/markdown/ir.js.map +0 -1
- package/dist/src/markdown/render.js.map +0 -1
- package/dist/src/markdown/tables.js.map +0 -1
- package/dist/src/mcp/channel-bridge.js.map +0 -1
- package/dist/src/mcp/channel-server.js.map +0 -1
- package/dist/src/mcp/channel-shared.js.map +0 -1
- package/dist/src/mcp/channel-tools.js.map +0 -1
- package/dist/src/mcp/gateway-http-client.js.map +0 -1
- package/dist/src/media/media-reference.js.map +0 -1
- package/dist/src/media/paths.js.map +0 -1
- package/dist/src/media/session-references.js.map +0 -1
- package/dist/src/media/store.js.map +0 -1
- package/dist/src/media/uri.js.map +0 -1
- package/dist/src/media-shared/http/api-key-rotation.js.map +0 -1
- package/dist/src/media-shared/http/deadline.js.map +0 -1
- package/dist/src/media-shared/http/private-network.js.map +0 -1
- package/dist/src/media-shared/http/provider-http-errors.js.map +0 -1
- package/dist/src/media-shared/http/provider-http.js.map +0 -1
- package/dist/src/media-shared/http/resolve-provider-http-request-config.js.map +0 -1
- package/dist/src/media-shared/http/ssrf-guard.js.map +0 -1
- package/dist/src/media-shared/http/test-helpers/mock-server.js.map +0 -1
- package/dist/src/media-understanding/audio-transcription-runner.js.map +0 -1
- package/dist/src/media-understanding/openai-compatible-audio.js.map +0 -1
- package/dist/src/media-understanding/registry.js.map +0 -1
- package/dist/src/media-understanding/resolve-entries.js.map +0 -1
- package/dist/src/media-understanding/runner.js.map +0 -1
- package/dist/src/migrations/config/default-capability-preset.js.map +0 -1
- package/dist/src/migrations/registry.js.map +0 -1
- package/dist/src/migrations/runner.js.map +0 -1
- package/dist/src/mobile/notification-service.js.map +0 -1
- package/dist/src/mobile/notification-store.js.map +0 -1
- package/dist/src/mobile/notification-types.js.map +0 -1
- package/dist/src/notes/agent-context.js.map +0 -1
- package/dist/src/notes/attachment-ref.js.map +0 -1
- package/dist/src/notes/note-attachment-sync.js.map +0 -1
- package/dist/src/notes/note-index-meta.js.map +0 -1
- package/dist/src/notes/note-markdown.js.map +0 -1
- package/dist/src/notes/paths.js.map +0 -1
- package/dist/src/notes/service.js.map +0 -1
- package/dist/src/notes/store.js.map +0 -1
- package/dist/src/package-version.js.map +0 -1
- package/dist/src/pets/factory.js.map +0 -1
- package/dist/src/pets/manifest.js.map +0 -1
- package/dist/src/pets/validator.js.map +0 -1
- package/dist/src/process/kill-tree.js.map +0 -1
- package/dist/src/project-trust/trust-store.js.map +0 -1
- package/dist/src/projects/automation-bind.js.map +0 -1
- package/dist/src/projects/goal-bind.js.map +0 -1
- package/dist/src/projects/memory-bind.js.map +0 -1
- package/dist/src/projects/project-agent-suggestion.js.map +0 -1
- package/dist/src/projects/project-agent.js.map +0 -1
- package/dist/src/projects/project-kind.js.map +0 -1
- package/dist/src/projects/project-loop.js.map +0 -1
- package/dist/src/projects/project-service.js.map +0 -1
- package/dist/src/projects/project-store.js.map +0 -1
- package/dist/src/projects/session-bind.js.map +0 -1
- package/dist/src/projects/workflow-bind.js.map +0 -1
- package/dist/src/projects/workspace-project.js.map +0 -1
- package/dist/src/projects/workspace.js.map +0 -1
- package/dist/src/providers/auth-runtime/auth-profile-store.js.map +0 -1
- package/dist/src/providers/auth-runtime/is-configured.js.map +0 -1
- package/dist/src/providers/auth-runtime/oauth.js.map +0 -1
- package/dist/src/providers/auth-runtime/resolve-api-key.js.map +0 -1
- package/dist/src/providers/auth-runtime/resolve-auth.js.map +0 -1
- package/dist/src/providers/constants.js.map +0 -1
- package/dist/src/providers/domestic-presets.js.map +0 -1
- package/dist/src/providers/env-keys.js.map +0 -1
- package/dist/src/providers/extension-stream-bridge.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/providers/model-call.js.map +0 -1
- package/dist/src/providers/model-discovery.js.map +0 -1
- package/dist/src/providers/model-registry.js.map +0 -1
- package/dist/src/providers/model-supplements.js.map +0 -1
- package/dist/src/providers/plugin-registry.js.map +0 -1
- package/dist/src/providers/presentation.js.map +0 -1
- package/dist/src/remote-access/exposure-guards.js.map +0 -1
- package/dist/src/remote-access/exposure-manager.js.map +0 -1
- package/dist/src/review/review-git.js.map +0 -1
- package/dist/src/review/review-types.js.map +0 -1
- package/dist/src/routing/account-id.js.map +0 -1
- package/dist/src/routing/agent-session-key.js.map +0 -1
- package/dist/src/routing/bindings.js.map +0 -1
- package/dist/src/routing/index.js.map +0 -1
- package/dist/src/routing/resolve-route.js.map +0 -1
- package/dist/src/routing/resolve-tui-session-key.js.map +0 -1
- package/dist/src/routing/session-key-utils.js.map +0 -1
- package/dist/src/routing/session-key.js.map +0 -1
- package/dist/src/session/abort-cutoff.js.map +0 -1
- package/dist/src/session/chat-export.js.map +0 -1
- package/dist/src/session/client-history.js.map +0 -1
- package/dist/src/session/compaction-checkpoints.js.map +0 -1
- package/dist/src/session/config-store.js.map +0 -1
- package/dist/src/session/init-session-turn.js.map +0 -1
- package/dist/src/session/lifecycle-timestamps.js.map +0 -1
- package/dist/src/session/load-jsonl-entries.js.map +0 -1
- package/dist/src/session/manager.js.map +0 -1
- package/dist/src/session/patch-metadata.js.map +0 -1
- package/dist/src/session/reset-policy.js.map +0 -1
- package/dist/src/session/reset-triggers.js.map +0 -1
- package/dist/src/session/reset-type.js.map +0 -1
- package/dist/src/session/resolve-session.js.map +0 -1
- package/dist/src/session/session-context-for-llm.js.map +0 -1
- package/dist/src/session/session-id.js.map +0 -1
- package/dist/src/session/session-title.js.map +0 -1
- package/dist/src/session/session-workspace.js.map +0 -1
- package/dist/src/session/store.js.map +0 -1
- package/dist/src/session/stored-rows-to-file-entries.js.map +0 -1
- package/dist/src/session/thinking-resolve.js.map +0 -1
- package/dist/src/session/transcript-events.js.map +0 -1
- package/dist/src/session/transcript-format.js.map +0 -1
- package/dist/src/session/transcript-outline.js.map +0 -1
- package/dist/src/session/transcript-stats.js.map +0 -1
- package/dist/src/session/types.js.map +0 -1
- package/dist/src/session/user-round-delete.js.map +0 -1
- package/dist/src/share/share-audit.js.map +0 -1
- package/dist/src/share/share-auto.js.map +0 -1
- package/dist/src/share/share-config.js.map +0 -1
- package/dist/src/share/share-landing.js.map +0 -1
- package/dist/src/share/share-rate-limit.js.map +0 -1
- package/dist/src/share/share-store.js.map +0 -1
- package/dist/src/share/share-thumbnail.js.map +0 -1
- package/dist/src/share/share-types.js.map +0 -1
- package/dist/src/share/share-url.js.map +0 -1
- package/dist/src/share/share-zip.js.map +0 -1
- package/dist/src/share/site-proxy.js.map +0 -1
- package/dist/src/share/site-share-config.js.map +0 -1
- package/dist/src/share/site-share-router.js.map +0 -1
- package/dist/src/share/site-share-store.js.map +0 -1
- package/dist/src/share/site-share-types.js.map +0 -1
- package/dist/src/share/site-static-serve.js.map +0 -1
- package/dist/src/storage/sqlite/activity-repository.js.map +0 -1
- package/dist/src/storage/sqlite/config-repository.js.map +0 -1
- package/dist/src/storage/sqlite/connection.js.map +0 -1
- package/dist/src/storage/sqlite/connector-repository.js.map +0 -1
- package/dist/src/storage/sqlite/fts.js.map +0 -1
- package/dist/src/storage/sqlite/knowledge-repository.js.map +0 -1
- package/dist/src/storage/sqlite/memory-index-repository.js.map +0 -1
- package/dist/src/storage/sqlite/memory-records-repository.js.map +0 -1
- package/dist/src/storage/sqlite/memory-reference-consent-repository.js.map +0 -1
- package/dist/src/storage/sqlite/migrations/discover.js.map +0 -1
- package/dist/src/storage/sqlite/migrations/errors.js.map +0 -1
- package/dist/src/storage/sqlite/migrations/runner.js.map +0 -1
- package/dist/src/storage/sqlite/note-agent-context-repository.js.map +0 -1
- package/dist/src/storage/sqlite/notes-repository.js.map +0 -1
- package/dist/src/storage/sqlite/paths.js.map +0 -1
- package/dist/src/storage/sqlite/row-mappers.js.map +0 -1
- package/dist/src/storage/sqlite/schema-version.js.map +0 -1
- package/dist/src/storage/sqlite/schema.js.map +0 -1
- package/dist/src/storage/sqlite/session-metadata.js.map +0 -1
- package/dist/src/storage/sqlite/session-repository.js.map +0 -1
- package/dist/src/storage/sqlite/transaction.js.map +0 -1
- package/dist/src/storage/sqlite/transcript-repository.js.map +0 -1
- package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +0 -1
- package/dist/src/storage/sqlite/user-trust-repository.js.map +0 -1
- package/dist/src/tui/backends/embedded-backend.js.map +0 -1
- package/dist/src/tui/backends/gateway-sse-backend.js.map +0 -1
- package/dist/src/tui/chat-history.js.map +0 -1
- package/dist/src/tui/clipboard-image.js.map +0 -1
- package/dist/src/tui/clipboard-text.js.map +0 -1
- package/dist/src/tui/components/assistant-message.js.map +0 -1
- package/dist/src/tui/components/bash-execution.js.map +0 -1
- package/dist/src/tui/components/bash-summary.js.map +0 -1
- package/dist/src/tui/components/branch-message-summary.js.map +0 -1
- package/dist/src/tui/components/branch-summary.js.map +0 -1
- package/dist/src/tui/components/chat-log.js.map +0 -1
- package/dist/src/tui/components/compaction-summary.js.map +0 -1
- package/dist/src/tui/components/custom-editor.js.map +0 -1
- package/dist/src/tui/components/custom-message.js.map +0 -1
- package/dist/src/tui/components/dynamic-border.js.map +0 -1
- package/dist/src/tui/components/extension-dialog.js.map +0 -1
- package/dist/src/tui/components/fuzzy-filter.js.map +0 -1
- package/dist/src/tui/components/scoped-models-selector.js.map +0 -1
- package/dist/src/tui/components/searchable-select-list.js.map +0 -1
- package/dist/src/tui/components/session-selector.js.map +0 -1
- package/dist/src/tui/components/settings-selector.js.map +0 -1
- package/dist/src/tui/components/thinking-selector.js.map +0 -1
- package/dist/src/tui/components/tool-execution.js.map +0 -1
- package/dist/src/tui/components/tui-bottom-bar.js.map +0 -1
- package/dist/src/tui/components/tui-header.js.map +0 -1
- package/dist/src/tui/components/user-message.js.map +0 -1
- package/dist/src/tui/components/visual-truncate.js.map +0 -1
- package/dist/src/tui/extension-host/autocomplete.js.map +0 -1
- package/dist/src/tui/extension-host/host.js.map +0 -1
- package/dist/src/tui/extension-host/load-extensions.js.map +0 -1
- package/dist/src/tui/extension-host/runtime-context.js.map +0 -1
- package/dist/src/tui/extension-host/runtime.js.map +0 -1
- package/dist/src/tui/extension-host/surface.js.map +0 -1
- package/dist/src/tui/extension-host/tool-renderers.js.map +0 -1
- package/dist/src/tui/format-tui-hotkeys.js.map +0 -1
- package/dist/src/tui/sse-consumer.js.map +0 -1
- package/dist/src/tui/theme/dark.js.map +0 -1
- package/dist/src/tui/theme/light.js.map +0 -1
- package/dist/src/tui/theme-manager.js.map +0 -1
- package/dist/src/tui/theme.js.map +0 -1
- package/dist/src/tui/tool-summary.js.map +0 -1
- package/dist/src/tui/tui-agent-events.js.map +0 -1
- package/dist/src/tui/tui-command-formatters.js.map +0 -1
- package/dist/src/tui/tui-commands.js.map +0 -1
- package/dist/src/tui/tui-context-usage.js.map +0 -1
- package/dist/src/tui/tui-extension-user-message.js.map +0 -1
- package/dist/src/tui/tui-fd-path.js.map +0 -1
- package/dist/src/tui/tui-file-autocomplete.js.map +0 -1
- package/dist/src/tui/tui-follow-up-queue.js.map +0 -1
- package/dist/src/tui/tui-git-branch.js.map +0 -1
- package/dist/src/tui/tui-keybindings-file.js.map +0 -1
- package/dist/src/tui/tui-lifecycle.js.map +0 -1
- package/dist/src/tui/tui-local-shell.js.map +0 -1
- package/dist/src/tui/tui-model-picker.js.map +0 -1
- package/dist/src/tui/tui-oauth-login.js.map +0 -1
- package/dist/src/tui/tui-overlays.js.map +0 -1
- package/dist/src/tui/tui-picker-overlay.js.map +0 -1
- package/dist/src/tui/tui-run-state.js.map +0 -1
- package/dist/src/tui/tui-run-status-format.js.map +0 -1
- package/dist/src/tui/tui-runtime-hints.js.map +0 -1
- package/dist/src/tui/tui-scoped-models.js.map +0 -1
- package/dist/src/tui/tui-session-actions.js.map +0 -1
- package/dist/src/tui/tui-session-format.js.map +0 -1
- package/dist/src/tui/tui-session-snapshot.js.map +0 -1
- package/dist/src/tui/tui-session-stats.js.map +0 -1
- package/dist/src/tui/tui-settings.js.map +0 -1
- package/dist/src/tui/tui-skills-autocomplete.js.map +0 -1
- package/dist/src/tui/tui-startup-resources.js.map +0 -1
- package/dist/src/tui/tui-startup-text.js.map +0 -1
- package/dist/src/tui/tui-stdio-filter.js.map +0 -1
- package/dist/src/tui/tui-submit.js.map +0 -1
- package/dist/src/tui/tui-suspend.js.map +0 -1
- package/dist/src/tui/tui-timeline-picker.js.map +0 -1
- package/dist/src/tui/tui-timeline.js.map +0 -1
- package/dist/src/tui/tui-tool-diff.js.map +0 -1
- package/dist/src/tui/tui-tool-result.js.map +0 -1
- package/dist/src/tui/tui-transcript-tree-picker.js.map +0 -1
- package/dist/src/tui/tui-transcript-tree.js.map +0 -1
- package/dist/src/tui/tui-types.js.map +0 -1
- package/dist/src/tui/tui-workflow-slash.js.map +0 -1
- package/dist/src/tui/tui.js.map +0 -1
- package/dist/src/tui/xopc-tui-keybindings.js.map +0 -1
- package/dist/src/tunnel/broker-client.js.map +0 -1
- package/dist/src/tunnel/consent.js.map +0 -1
- package/dist/src/tunnel/enable-lan-pairing.js.map +0 -1
- package/dist/src/tunnel/env.js.map +0 -1
- package/dist/src/tunnel/frp-subdomain-host.js.map +0 -1
- package/dist/src/tunnel/frpc-binary.js.map +0 -1
- package/dist/src/tunnel/frpc-config.js.map +0 -1
- package/dist/src/tunnel/frpc-extract.js.map +0 -1
- package/dist/src/tunnel/frpc-process.js.map +0 -1
- package/dist/src/tunnel/gateway-lifecycle.js.map +0 -1
- package/dist/src/tunnel/pair-context.js.map +0 -1
- package/dist/src/tunnel/pair-url.js.map +0 -1
- package/dist/src/tunnel/pairing-rate-limit.js.map +0 -1
- package/dist/src/tunnel/pairing.js.map +0 -1
- package/dist/src/tunnel/tunnel-audit.js.map +0 -1
- package/dist/src/tunnel/tunnel-config.js.map +0 -1
- package/dist/src/tunnel/tunnel-persist.js.map +0 -1
- package/dist/src/tunnel/tunnel-qr.js.map +0 -1
- package/dist/src/tunnel/tunnel-rate-limit.js.map +0 -1
- package/dist/src/tunnel/tunnel-service.js.map +0 -1
- package/dist/src/tunnel/tunnel-state.js.map +0 -1
- package/dist/src/tunnel/well-known.js.map +0 -1
- package/dist/src/user-context/config.js.map +0 -1
- package/dist/src/user-context/import.js.map +0 -1
- package/dist/src/user-context/owner.js.map +0 -1
- package/dist/src/user-context/profile.js.map +0 -1
- package/dist/src/user-context/projection.js.map +0 -1
- package/dist/src/user-context/runtime.js.map +0 -1
- package/dist/src/user-context/source-recommendations.js.map +0 -1
- package/dist/src/user-context/trust-policy.js.map +0 -1
- package/dist/src/utils/global-singleton.js.map +0 -1
- package/dist/src/utils/helpers.js.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/is-record.js.map +0 -1
- package/dist/src/utils/logger/audit.js.map +0 -1
- package/dist/src/utils/logger/config.js.map +0 -1
- package/dist/src/utils/logger/context.js.map +0 -1
- package/dist/src/utils/logger/exporters.js.map +0 -1
- package/dist/src/utils/logger/index.js.map +0 -1
- package/dist/src/utils/logger/log-store.js.map +0 -1
- package/dist/src/utils/logger/log-stream.js.map +0 -1
- package/dist/src/utils/logger/pino-record.js.map +0 -1
- package/dist/src/utils/logger/redact.js.map +0 -1
- package/dist/src/utils/logger/rotation.js.map +0 -1
- package/dist/src/utils/logger/shutdown.js.map +0 -1
- package/dist/src/utils/logger/stats.js.map +0 -1
- package/dist/src/utils/logger/streams.js.map +0 -1
- package/dist/src/utils/logger/types.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/redact-sensitive-url.js.map +0 -1
- package/dist/src/utils/sanitize-log.js.map +0 -1
- package/dist/src/utils/string-coerce.js.map +0 -1
- package/dist/src/voice/language-profile.js.map +0 -1
- package/dist/src/voice/local/model-files.js.map +0 -1
- package/dist/src/voice/local/model-manager.js.map +0 -1
- package/dist/src/voice/local/models.js.map +0 -1
- package/dist/src/voice/local/runtime-client.js.map +0 -1
- package/dist/src/voice/local/runtime-dispatcher.js.map +0 -1
- package/dist/src/voice/local/runtime-worker.js.map +0 -1
- package/dist/src/voice/local/wav.js.map +0 -1
- package/dist/src/voice/metadata/builtin.js.map +0 -1
- package/dist/src/voice/metadata/registry.js.map +0 -1
- package/dist/src/voice/stt/availability.js.map +0 -1
- package/dist/src/voice/stt/config-slice.js.map +0 -1
- package/dist/src/voice/stt/factory.js.map +0 -1
- package/dist/src/voice/stt/index.js.map +0 -1
- package/dist/src/voice/stt/list-providers.js.map +0 -1
- package/dist/src/voice/stt/mention.js.map +0 -1
- package/dist/src/voice/stt/preflight.js.map +0 -1
- package/dist/src/voice/stt/providers/alibaba-transcription.js.map +0 -1
- package/dist/src/voice/stt/providers/local-transcription.js.map +0 -1
- package/dist/src/voice/stt/providers/openai-transcription.js.map +0 -1
- package/dist/src/voice/stt/transcribe-core.js.map +0 -1
- package/dist/src/voice/stt/types.js.map +0 -1
- package/dist/src/voice/tts/audio.js.map +0 -1
- package/dist/src/voice/tts/config-slice.js.map +0 -1
- package/dist/src/voice/tts/directives.js.map +0 -1
- package/dist/src/voice/tts/factory.js.map +0 -1
- package/dist/src/voice/tts/list-providers.js.map +0 -1
- package/dist/src/voice/tts/merge-config.js.map +0 -1
- package/dist/src/voice/tts/openai-compatible-speech.js.map +0 -1
- package/dist/src/voice/tts/payload.js.map +0 -1
- package/dist/src/voice/tts/preprocess.js.map +0 -1
- package/dist/src/voice/tts/providers/alibaba-speech.js.map +0 -1
- package/dist/src/voice/tts/providers/edge-speech.js.map +0 -1
- package/dist/src/voice/tts/providers/minimax-speech.js.map +0 -1
- package/dist/src/voice/tts/providers/openai-speech.js.map +0 -1
- package/dist/src/voice/tts/sentence-boundary.js.map +0 -1
- package/dist/src/voice/tts/service.js.map +0 -1
- package/dist/src/voice/tts/speak-core.js.map +0 -1
- package/dist/src/voice/tts/speech-registry.js.map +0 -1
- package/dist/src/voice/tts/status-tracker.js.map +0 -1
- package/dist/src/voice/tts/summarize.js.map +0 -1
- package/dist/src/voice/tts/types.js.map +0 -1
- package/dist/src/work-discovery/analyzer.js.map +0 -1
- package/dist/src/work-discovery/probe.js.map +0 -1
- package/dist/src/work-discovery/repository.js.map +0 -1
- package/dist/src/work-discovery/service.js.map +0 -1
- package/dist/src/work-items/agent-context.js.map +0 -1
- package/dist/src/work-items/work-item-service.js.map +0 -1
- package/dist/src/work-items/work-item-store.js.map +0 -1
- package/dist/src/work-items/work-item-workflow-judge.js.map +0 -1
- package/dist/src/workflows/authoring/workflow-draft-store.js.map +0 -1
- package/dist/src/workflows/domain/definition-utils.js.map +0 -1
- package/dist/src/workflows/domain/run.js.map +0 -1
- package/dist/src/workflows/domain/schema-validation.js.map +0 -1
- package/dist/src/workflows/domain/validation.js.map +0 -1
- package/dist/src/workflows/draft/workflow-draft-prompt.js.map +0 -1
- package/dist/src/workflows/draft/workflow-draft-service.js.map +0 -1
- package/dist/src/workflows/draft/workflow-draft-validator.js.map +0 -1
- package/dist/src/workflows/engine/projector.js.map +0 -1
- package/dist/src/workflows/engine/workflow-engine.js.map +0 -1
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +0 -1
- package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +0 -1
- package/dist/src/workflows/service/run-view-to-snapshot.js.map +0 -1
- package/dist/src/workflows/service/workflow-run-service.js.map +0 -1
- package/dist/src/workflows/service/workflow-session-bridge.js.map +0 -1
- package/dist/src/workflows/service/workflow-session-key.js.map +0 -1
- package/dist/src/workflows/store/event-store.js.map +0 -1
- package/dist/src/workflows/store/paths.js.map +0 -1
- package/dist/src/workflows/store/run-index-store.js.map +0 -1
- package/dist/src/workflows/store/run-store.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.js","names":[],"sources":["../../../../src/infra/rate-limit/rate-limiter.ts"],"sourcesContent":["/**\n * Per-key fixed-window request-rate limiter. Every `consume()` counts toward\n * the limit; once the window's count hits `maxRequests`, subsequent consumes\n * return `allowed: false` until the window rolls over.\n *\n * Use this for *throughput* limiting (e.g. \"15 req/min on /admin\"). For\n * *failure-rate* limiting with lockout (e.g. brute-force protection), use\n * {@link FailureLimiter} instead.\n */\n\nimport { KeyedStore, type Clock } from './keyed-store.js';\n\nexport type RateLimiterConfig = {\n maxRequests: number;\n windowMs: number;\n /** How long to retain idle keys before sweep. Defaults to 4× windowMs. */\n staleAfterMs?: number;\n clock?: Clock;\n};\n\n/**\n * Flat rather than tagged-union: project's tsconfig has `strict: false`, which\n * disables boolean discriminator narrowing through `if (!x.allowed)`. Both\n * fields are always populated — `retryAfterMs` is 0 on success, `remaining`\n * is 0 on block.\n */\nexport type RateLimitDecision = {\n allowed: boolean;\n remaining: number;\n retryAfterMs: number;\n};\n\ntype State = {\n windowStart: number;\n count: number;\n lastTouchedMs: number;\n};\n\nexport class RateLimiter {\n private readonly store: KeyedStore<State>;\n private readonly clock: Clock;\n private readonly maxRequests: number;\n private readonly windowMs: number;\n\n constructor(cfg: RateLimiterConfig) {\n this.maxRequests = Math.max(1, Math.floor(cfg.maxRequests));\n this.windowMs = Math.max(1, Math.floor(cfg.windowMs));\n this.clock = cfg.clock ?? Date.now;\n this.store = new KeyedStore<State>({\n staleAfterMs: cfg.staleAfterMs ?? this.windowMs * 4,\n clock: this.clock,\n });\n }\n\n consume(key: string): RateLimitDecision {\n const now = this.clock();\n let state = this.store.get(key);\n if (!state) {\n state = { windowStart: now, count: 0, lastTouchedMs: now };\n this.store.set(key, state);\n }\n\n if (now - state.windowStart >= this.windowMs) {\n state.windowStart = now;\n state.count = 0;\n }\n\n state.lastTouchedMs = now;\n\n if (state.count >= this.maxRequests) {\n return {\n allowed: false,\n remaining: 0,\n retryAfterMs: Math.max(0, state.windowStart + this.windowMs - now),\n };\n }\n\n state.count += 1;\n return { allowed: true, remaining: this.maxRequests - state.count, retryAfterMs: 0 };\n }\n\n /** @internal Test hook. */\n resetForTests(): void {\n this.store.clear();\n }\n\n destroy(): void {\n this.store.destroy();\n }\n}\n"],"mappings":";;;;;;;;;;;AAsCA,IAAa,cAAb,MAAyB;CACvB;CACA;CACA;CACA;CAEA,YAAY,KAAwB;AAClC,OAAK,cAAc,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,YAAY,CAAC;AAC3D,OAAK,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,SAAS,CAAC;AACrD,OAAK,QAAQ,IAAI,SAAS,KAAK;AAC/B,OAAK,QAAQ,IAAI,WAAkB;GACjC,cAAc,IAAI,gBAAgB,KAAK,WAAW;GAClD,OAAO,KAAK;GACb,CAAC;;CAGJ,QAAQ,KAAgC;EACtC,MAAM,MAAM,KAAK,OAAO;EACxB,IAAI,QAAQ,KAAK,MAAM,IAAI,IAAI;AAC/B,MAAI,CAAC,OAAO;AACV,WAAQ;IAAE,aAAa;IAAK,OAAO;IAAG,eAAe;IAAK;AAC1D,QAAK,MAAM,IAAI,KAAK,MAAM;;AAG5B,MAAI,MAAM,MAAM,eAAe,KAAK,UAAU;AAC5C,SAAM,cAAc;AACpB,SAAM,QAAQ;;AAGhB,QAAM,gBAAgB;AAEtB,MAAI,MAAM,SAAS,KAAK,YACtB,QAAO;GACL,SAAS;GACT,WAAW;GACX,cAAc,KAAK,IAAI,GAAG,MAAM,cAAc,KAAK,WAAW,IAAI;GACnE;AAGH,QAAM,SAAS;AACf,SAAO;GAAE,SAAS;GAAM,WAAW,KAAK,cAAc,MAAM;GAAO,cAAc;GAAG;;;CAItF,gBAAsB;AACpB,OAAK,MAAM,OAAO;;CAGpB,UAAgB;AACd,OAAK,MAAM,SAAS"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"restart.js","names":[],"sources":["../../../src/infra/restart.ts"],"sourcesContent":["/**\n * Gateway restart coordination — OpenClaw-aligned SIGUSR1 authorization and restart intent.\n */\n\nimport { mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { resolveStateDir } from '../config/paths-state.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('Restart');\n\nconst SIGUSR1_AUTH_GRACE_MS = 5000;\nconst GATEWAY_RESTART_INTENT_FILENAME = 'gateway-restart-intent.json';\nconst GATEWAY_RESTART_INTENT_TTL_MS = 60_000;\n\ntype GatewayRestartIntentPayload = {\n kind: 'gateway-restart';\n pid: number;\n createdAt: number;\n};\n\nlet sigusr1AuthorizedCount = 0;\nlet sigusr1AuthorizedUntil = 0;\nlet sigusr1ExternalAllowed = false;\nlet pendingRestartTimer: ReturnType<typeof setTimeout> | null = null;\nlet pendingRestartCallback: (() => void) | null = null;\n\nfunction resolveGatewayRestartIntentPath(env: NodeJS.ProcessEnv = process.env): string {\n const stateDir = env.XOPC_STATE_DIR?.trim() || resolveStateDir();\n return path.join(stateDir, GATEWAY_RESTART_INTENT_FILENAME);\n}\n\nfunction normalizeRestartIntentPid(pid: number | undefined): number | null {\n return typeof pid === 'number' && Number.isSafeInteger(pid) && pid > 0 ? pid : null;\n}\n\nexport function writeGatewayRestartIntentSync(opts: {\n env?: NodeJS.ProcessEnv;\n targetPid?: number;\n} = {}): boolean {\n const targetPid = normalizeRestartIntentPid(opts.targetPid);\n if (targetPid === null) {\n return false;\n }\n const env = opts.env ?? process.env;\n const intentPath = resolveGatewayRestartIntentPath(env);\n const payload: GatewayRestartIntentPayload = {\n kind: 'gateway-restart',\n pid: targetPid,\n createdAt: Date.now(),\n };\n try {\n mkdirSync(path.dirname(intentPath), { recursive: true });\n writeFileSync(intentPath, `${JSON.stringify(payload)}\\n`, 'utf8');\n return true;\n } catch (err) {\n log.warn({ err }, 'Failed to write gateway restart intent');\n return false;\n }\n}\n\nexport function clearGatewayRestartIntentSync(env: NodeJS.ProcessEnv = process.env): void {\n try {\n rmSync(resolveGatewayRestartIntentPath(env));\n } catch {\n // File may not exist\n }\n}\n\nfunction parseGatewayRestartIntent(raw: string): GatewayRestartIntentPayload | null {\n try {\n const parsed = JSON.parse(raw) as Partial<GatewayRestartIntentPayload>;\n if (\n parsed.kind === 'gateway-restart' &&\n typeof parsed.pid === 'number' &&\n Number.isFinite(parsed.pid) &&\n typeof parsed.createdAt === 'number' &&\n Number.isFinite(parsed.createdAt)\n ) {\n return parsed as GatewayRestartIntentPayload;\n }\n } catch {\n return null;\n }\n return null;\n}\n\nexport function consumeGatewayRestartIntentSync(\n env: NodeJS.ProcessEnv = process.env,\n now = Date.now(),\n): boolean {\n const intentPath = resolveGatewayRestartIntentPath(env);\n let raw: string;\n try {\n raw = readFileSync(intentPath, 'utf8');\n } catch {\n return false;\n } finally {\n clearGatewayRestartIntentSync(env);\n }\n const payload = parseGatewayRestartIntent(raw);\n if (!payload) {\n return false;\n }\n if (payload.pid !== process.pid) {\n return false;\n }\n const ageMs = now - payload.createdAt;\n return ageMs >= 0 && ageMs <= GATEWAY_RESTART_INTENT_TTL_MS;\n}\n\nexport function setGatewaySigusr1RestartPolicy(opts?: { allowExternal?: boolean }): void {\n sigusr1ExternalAllowed = opts?.allowExternal === true;\n}\n\nexport function isGatewaySigusr1RestartExternallyAllowed(): boolean {\n return sigusr1ExternalAllowed;\n}\n\nfunction resetSigusr1AuthorizationIfExpired(now = Date.now()): void {\n if (sigusr1AuthorizedCount <= 0) {\n return;\n }\n if (now <= sigusr1AuthorizedUntil) {\n return;\n }\n sigusr1AuthorizedCount = 0;\n sigusr1AuthorizedUntil = 0;\n}\n\nexport function authorizeGatewaySigusr1Restart(delayMs = 0): void {\n const delay = Math.max(0, Math.floor(delayMs));\n const expiresAt = Date.now() + delay + SIGUSR1_AUTH_GRACE_MS;\n sigusr1AuthorizedCount += 1;\n if (expiresAt > sigusr1AuthorizedUntil) {\n sigusr1AuthorizedUntil = expiresAt;\n }\n}\n\nexport function consumeGatewaySigusr1RestartAuthorization(): boolean {\n resetSigusr1AuthorizationIfExpired();\n if (sigusr1AuthorizedCount <= 0) {\n return false;\n }\n sigusr1AuthorizedCount -= 1;\n if (sigusr1AuthorizedCount <= 0) {\n sigusr1AuthorizedUntil = 0;\n }\n return true;\n}\n\nexport function resetGatewayRestartStateForInProcessRestart(): void {\n if (pendingRestartTimer) {\n clearTimeout(pendingRestartTimer);\n pendingRestartTimer = null;\n }\n pendingRestartCallback = null;\n}\n\nexport function scheduleGatewaySigusr1Restart(params: {\n delayMs?: number;\n reason?: string;\n onRestart: () => void;\n}): void {\n if (pendingRestartTimer) {\n clearTimeout(pendingRestartTimer);\n }\n pendingRestartCallback = params.onRestart;\n const delayMs = Math.max(0, params.delayMs ?? 0);\n pendingRestartTimer = setTimeout(() => {\n pendingRestartTimer = null;\n const callback = pendingRestartCallback;\n pendingRestartCallback = null;\n callback?.();\n }, delayMs);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","names":[],"sources":["../../../src/infra/retry.ts"],"sourcesContent":["/**\n * Retry Infrastructure\n * \n * Provides configurable retry mechanisms with exponential backoff,\n * jitter, and custom retry conditions.\n */\n\nexport interface RetryConfig {\n /** Maximum number of retry attempts */\n attempts?: number;\n /** Minimum delay between retries in milliseconds */\n minDelayMs?: number;\n /** Maximum delay between retries in milliseconds */\n maxDelayMs?: number;\n /** Jitter factor (0-1) to randomize delays */\n jitter?: number;\n}\n\nexport interface RetryInfo {\n attempt: number;\n maxAttempts: number;\n delayMs: number;\n error: unknown;\n label?: string;\n}\n\nexport interface RetryOptions extends RetryConfig {\n /** Label for logging */\n label?: string;\n /** Custom function to determine if error is retryable */\n shouldRetry?: (error: unknown, attempt: number) => boolean;\n /** Extract retry-after delay from error (e.g., rate limit) */\n retryAfterMs?: (error: unknown) => number | undefined;\n /** Callback on each retry attempt */\n onRetry?: (info: RetryInfo) => void;\n}\n\nconst DEFAULT_RETRY_CONFIG: Required<RetryConfig> = {\n attempts: 3,\n minDelayMs: 300,\n maxDelayMs: 30_000,\n jitter: 0.1,\n};\n\n/**\n * Sleep utility\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Apply jitter to delay\n */\nfunction applyJitter(delayMs: number, jitter: number): number {\n if (jitter <= 0) return delayMs;\n const offset = (Math.random() * 2 - 1) * jitter;\n return Math.max(0, Math.round(delayMs * (1 + offset)));\n}\n\n/**\n * Resolve retry configuration with defaults\n */\nexport function resolveRetryConfig(\n defaults: Required<RetryConfig> = DEFAULT_RETRY_CONFIG,\n overrides?: RetryConfig\n): Required<RetryConfig> {\n return {\n attempts: Math.max(1, overrides?.attempts ?? defaults.attempts),\n minDelayMs: Math.max(0, overrides?.minDelayMs ?? defaults.minDelayMs),\n maxDelayMs: Math.max(\n overrides?.minDelayMs ?? defaults.minDelayMs,\n overrides?.maxDelayMs ?? defaults.maxDelayMs\n ),\n jitter: Math.max(0, Math.min(1, overrides?.jitter ?? defaults.jitter)),\n };\n}\n\n/**\n * Execute a function with retry logic\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n options: RetryOptions = {}\n): Promise<T> {\n const config = resolveRetryConfig(DEFAULT_RETRY_CONFIG, options);\n const shouldRetry = options.shouldRetry ?? (() => true);\n \n let lastError: unknown;\n\n for (let attempt = 1; attempt <= config.attempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n\n // Don't retry on last attempt\n if (attempt >= config.attempts) {\n break;\n }\n\n // Check if we should retry this error\n if (!shouldRetry(error, attempt)) {\n throw error;\n }\n\n // Calculate delay\n let delayMs: number;\n const retryAfter = options.retryAfterMs?.(error);\n \n if (typeof retryAfter === 'number' && Number.isFinite(retryAfter)) {\n // Use server-provided retry-after\n delayMs = Math.max(retryAfter, config.minDelayMs);\n } else {\n // Exponential backoff: 300ms, 600ms, 1200ms, ...\n delayMs = config.minDelayMs * Math.pow(2, attempt - 1);\n }\n\n // Cap at max delay\n delayMs = Math.min(delayMs, config.maxDelayMs);\n \n // Apply jitter\n delayMs = applyJitter(delayMs, config.jitter);\n\n // Notify callback\n options.onRetry?.({\n attempt,\n maxAttempts: config.attempts,\n delayMs,\n error,\n label: options.label,\n });\n\n await sleep(delayMs);\n }\n }\n\n throw lastError ?? new Error('Retry failed');\n}\n\n/**\n * Telegram-specific recoverable error codes\n */\nexport const RECOVERABLE_ERROR_CODES = new Set([\n 'ECONNRESET',\n 'ECONNREFUSED',\n 'EPIPE',\n 'ETIMEDOUT',\n 'ESOCKETTIMEDOUT',\n 'ENETUNREACH',\n 'EHOSTUNREACH',\n 'ENOTFOUND',\n 'EAI_AGAIN',\n 'UND_ERR_CONNECT_TIMEOUT',\n 'UND_ERR_HEADERS_TIMEOUT',\n 'UND_ERR_BODY_TIMEOUT',\n 'UND_ERR_SOCKET',\n 'UND_ERR_ABORTED',\n 'ECONNABORTED',\n 'ERR_NETWORK',\n]);\n\n/**\n * Telegram-specific recoverable error names\n */\nexport const RECOVERABLE_ERROR_NAMES = new Set([\n 'AbortError',\n 'TimeoutError',\n 'ConnectTimeoutError',\n 'HeadersTimeoutError',\n 'BodyTimeoutError',\n]);\n\n/**\n * Check if an error is a recoverable network error\n */\nexport function isRecoverableNetworkError(\n error: unknown,\n context: 'polling' | 'send' | 'webhook' | 'unknown' = 'unknown'\n): boolean {\n if (!error) return false;\n\n // Helper to extract error code\n const getErrorCode = (err: unknown): string | undefined => {\n if (!err || typeof err !== 'object') return undefined;\n \n // Check error.code\n const code = (err as { code?: unknown }).code;\n if (typeof code === 'string') return code;\n if (typeof code === 'number') return String(code);\n \n // Check error.errno\n const errno = (err as { errno?: unknown }).errno;\n if (typeof errno === 'string') return errno;\n if (typeof errno === 'number') return String(errno);\n \n return undefined;\n };\n\n // Helper to extract error name\n const getErrorName = (err: unknown): string => {\n if (!err || typeof err !== 'object') return '';\n return String((err as { name?: unknown }).name ?? '');\n };\n\n // Collect error and its causes\n const errors: unknown[] = [];\n let current: unknown = error;\n const seen = new WeakSet();\n \n while (current && typeof current === 'object' && !seen.has(current)) {\n seen.add(current);\n errors.push(current);\n \n // Follow cause chain\n const cause = (current as { cause?: unknown }).cause;\n if (cause) {\n current = cause;\n continue;\n }\n \n // For HttpError, follow .error (grammy specific)\n const name = getErrorName(current);\n if (name === 'HttpError') {\n const wrapped = (current as { error?: unknown }).error;\n if (wrapped) {\n current = wrapped;\n continue;\n }\n }\n \n break;\n }\n\n // Check each error in the chain\n for (const err of errors) {\n const code = getErrorCode(err);\n if (code && RECOVERABLE_ERROR_CODES.has(code.toUpperCase())) {\n return true;\n }\n\n const name = getErrorName(err);\n if (RECOVERABLE_ERROR_NAMES.has(name)) {\n return true;\n }\n\n // Check message patterns (only for polling context to avoid retrying bad requests)\n if (context !== 'send') {\n const message = String((err as { message?: unknown }).message ?? '').toLowerCase();\n const patterns = [\n 'fetch failed',\n 'network error',\n 'socket hang up',\n 'getaddrinfo',\n 'timeout',\n 'timed out',\n ];\n if (patterns.some(p => message.includes(p))) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n/**\n * Create a retry runner with Telegram-specific defaults\n */\nexport function createRetryRunner(options: RetryOptions = {}) {\n const _config = resolveRetryConfig(DEFAULT_RETRY_CONFIG, options);\n void _config; // Config available for future use in retry runner\n\n return async <T>(fn: () => Promise<T>, label?: string): Promise<T> => {\n return withRetry(fn, {\n ...options,\n label: label ?? options.label,\n shouldRetry: (err, attempt) => {\n // Use custom shouldRetry if provided\n if (options.shouldRetry) {\n return options.shouldRetry(err, attempt);\n }\n // Default to retrying recoverable network errors\n return isRecoverableNetworkError(err, 'send');\n },\n });\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-command.js","names":[],"sources":["../../../src/infra/run-command.ts"],"sourcesContent":["// src/infra/run-command.ts\n\nimport { spawn } from 'node:child_process';\n\nexport type CommandRunResult = {\n code: number | null;\n stdout: string;\n stderr: string;\n};\n\nexport type CommandRunner = (\n argv: string[],\n options: { timeoutMs: number; cwd?: string; env?: NodeJS.ProcessEnv },\n) => Promise<CommandRunResult>;\n\nconst MAX_CAPTURE_BYTES = 512 * 1024;\n\nfunction appendCaptured(current: string, chunk: Buffer): string {\n const next = current + chunk.toString();\n if (next.length <= MAX_CAPTURE_BYTES) {\n return next;\n }\n return next.slice(-MAX_CAPTURE_BYTES);\n}\n\nexport function createDefaultCommandRunner(): CommandRunner {\n return (argv, options) => runCommandWithTimeout(argv, options);\n}\n\nexport function runCommandWithTimeout(\n argv: string[],\n options: { timeoutMs: number; cwd?: string; env?: NodeJS.ProcessEnv },\n): Promise<CommandRunResult> {\n const [command, ...args] = argv;\n if (!command) {\n return Promise.resolve({ code: 1, stdout: '', stderr: 'empty argv' });\n }\n\n return new Promise((resolve) => {\n const child = spawn(command, args, {\n cwd: options.cwd,\n env: options.env ?? process.env,\n stdio: ['ignore', 'pipe', 'pipe'],\n ...(process.platform === 'win32'\n ? { shell: (process.env.ComSpec && process.env.ComSpec.trim()) || 'cmd.exe' }\n : {}),\n });\n\n let stdout = '';\n let stderr = '';\n let settled = false;\n\n const finish = (result: CommandRunResult) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutId);\n resolve(result);\n };\n\n const timeoutId = setTimeout(() => {\n child.kill('SIGTERM');\n }, options.timeoutMs);\n\n child.stdout?.on('data', (chunk: Buffer) => {\n stdout = appendCaptured(stdout, chunk);\n });\n child.stderr?.on('data', (chunk: Buffer) => {\n stderr = appendCaptured(stderr, chunk);\n });\n\n child.on('error', (err) => {\n finish({ code: null, stdout, stderr: stderr || err.message });\n });\n\n child.on('close', (code) => {\n finish({ code, stdout, stderr });\n });\n });\n}\n"],"mappings":";;AAeA,MAAM,oBAAoB,MAAM;AAEhC,SAAS,eAAe,SAAiB,OAAuB;CAC9D,MAAM,OAAO,UAAU,MAAM,UAAU;AACvC,KAAI,KAAK,UAAU,kBACjB,QAAO;AAET,QAAO,KAAK,MAAM,CAAC,kBAAkB;;AAGvC,SAAgB,6BAA4C;AAC1D,SAAQ,MAAM,YAAY,sBAAsB,MAAM,QAAQ;;AAGhE,SAAgB,sBACd,MACA,SAC2B;CAC3B,MAAM,CAAC,SAAS,GAAG,QAAQ;AAC3B,KAAI,CAAC,QACH,QAAO,QAAQ,QAAQ;EAAE,MAAM;EAAG,QAAQ;EAAI,QAAQ;EAAc,CAAC;AAGvE,QAAO,IAAI,SAAS,YAAY;EAC9B,MAAM,QAAQ,MAAM,SAAS,MAAM;GACjC,KAAK,QAAQ;GACb,KAAK,QAAQ,OAAO,QAAQ;GAC5B,OAAO;IAAC;IAAU;IAAQ;IAAO;GACjC,GAAI,QAAQ,aAAa,UACrB,EAAE,OAAQ,QAAQ,IAAI,WAAW,QAAQ,IAAI,QAAQ,MAAM,IAAK,WAAW,GAC3E,EAAE;GACP,CAAC;EAEF,IAAI,SAAS;EACb,IAAI,SAAS;EACb,IAAI,UAAU;EAEd,MAAM,UAAU,WAA6B;AAC3C,OAAI,QAAS;AACb,aAAU;AACV,gBAAa,UAAU;AACvB,WAAQ,OAAO;;EAGjB,MAAM,YAAY,iBAAiB;AACjC,SAAM,KAAK,UAAU;KACpB,QAAQ,UAAU;AAErB,QAAM,QAAQ,GAAG,SAAS,UAAkB;AAC1C,YAAS,eAAe,QAAQ,MAAM;IACtC;AACF,QAAM,QAAQ,GAAG,SAAS,UAAkB;AAC1C,YAAS,eAAe,QAAQ,MAAM;IACtC;AAEF,QAAM,GAAG,UAAU,QAAQ;AACzB,UAAO;IAAE,MAAM;IAAM;IAAQ,QAAQ,UAAU,IAAI;IAAS,CAAC;IAC7D;AAEF,QAAM,GAAG,UAAU,SAAS;AAC1B,UAAO;IAAE;IAAM;IAAQ;IAAQ,CAAC;IAChC;GACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-errors.js","names":[],"sources":["../../../src/infra/sqlite-errors.ts"],"sourcesContent":["const TRANSIENT_SQLITE_CODES = new Set([\n 'SQLITE_BUSY',\n 'SQLITE_CANTOPEN',\n 'SQLITE_IOERR',\n 'SQLITE_LOCKED',\n]);\n\nconst TRANSIENT_SQLITE_ERRCODES = new Set([5, 6, 10, 14]);\n\nconst TRANSIENT_SQLITE_MESSAGE_CODE_RE =\n /\\b(SQLITE_BUSY|SQLITE_CANTOPEN|SQLITE_IOERR|SQLITE_LOCKED)\\b/i;\n\nconst TRANSIENT_SQLITE_MESSAGE_SNIPPETS = [\n 'unable to open database file',\n 'database is locked',\n 'database table is locked',\n 'disk i/o error',\n];\n\nfunction normalizeLowercase(value: unknown): string {\n return typeof value === 'string' ? value.trim().toLowerCase() : '';\n}\n\nfunction extractErrorCode(err: unknown): string | undefined {\n if (!err || typeof err !== 'object') {\n return undefined;\n }\n const code = (err as { code?: unknown }).code;\n if (typeof code === 'string' && code.length > 0) {\n return code.toUpperCase();\n }\n return undefined;\n}\n\nfunction extractNumericErrcode(err: unknown): number | undefined {\n if (!err || typeof err !== 'object') {\n return undefined;\n }\n const raw = (err as { errcode?: unknown }).errcode;\n if (typeof raw === 'number' && Number.isInteger(raw)) {\n return raw;\n }\n return undefined;\n}\n\nfunction hasSqliteSignal(err: unknown): boolean {\n const code = extractErrorCode(err);\n if (code === 'ERR_SQLITE_ERROR' || code?.startsWith('SQLITE_')) {\n return true;\n }\n const errcode = extractNumericErrcode(err);\n return errcode !== undefined && TRANSIENT_SQLITE_ERRCODES.has(errcode);\n}\n\nfunction collectErrorCandidates(err: unknown): unknown[] {\n const out: unknown[] = [];\n const seen = new Set<unknown>();\n const queue: unknown[] = [err];\n while (queue.length > 0) {\n const current = queue.shift();\n if (current === undefined || seen.has(current)) {\n continue;\n }\n seen.add(current);\n out.push(current);\n if (!current || typeof current !== 'object') {\n continue;\n }\n const cause = (current as { cause?: unknown }).cause;\n if (cause !== undefined) {\n queue.push(cause);\n }\n }\n return out;\n}\n\nexport function isTransientSqliteError(err: unknown): boolean {\n if (!err) {\n return false;\n }\n\n for (const candidate of collectErrorCandidates(err)) {\n const code = extractErrorCode(candidate);\n if (code && TRANSIENT_SQLITE_CODES.has(code)) {\n return true;\n }\n\n if (!hasSqliteSignal(candidate)) {\n continue;\n }\n\n const sqliteErrcode = extractNumericErrcode(candidate);\n if (sqliteErrcode !== undefined && TRANSIENT_SQLITE_ERRCODES.has(sqliteErrcode)) {\n return true;\n }\n\n if (!candidate || typeof candidate !== 'object') {\n continue;\n }\n\n const messageParts = [\n (candidate as { message?: unknown }).message,\n (candidate as { errstr?: unknown }).errstr,\n ];\n for (const rawMessage of messageParts) {\n const message = normalizeLowercase(rawMessage);\n if (!message) {\n continue;\n }\n if (TRANSIENT_SQLITE_MESSAGE_CODE_RE.test(message)) {\n return true;\n }\n if (TRANSIENT_SQLITE_MESSAGE_SNIPPETS.some((snippet) => message.includes(snippet))) {\n return true;\n }\n }\n }\n\n return false;\n}\n"],"mappings":";AAAA,MAAM,yBAAyB,IAAI,IAAI;CACrC;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,4BAA4B,IAAI,IAAI;CAAC;CAAG;CAAG;CAAI;CAAG,CAAC;AAEzD,MAAM,mCACJ;AAEF,MAAM,oCAAoC;CACxC;CACA;CACA;CACA;CACD;AAED,SAAS,mBAAmB,OAAwB;AAClD,QAAO,OAAO,UAAU,WAAW,MAAM,MAAM,CAAC,aAAa,GAAG;;AAGlE,SAAS,iBAAiB,KAAkC;AAC1D,KAAI,CAAC,OAAO,OAAO,QAAQ,SACzB;CAEF,MAAM,OAAQ,IAA2B;AACzC,KAAI,OAAO,SAAS,YAAY,KAAK,SAAS,EAC5C,QAAO,KAAK,aAAa;;AAK7B,SAAS,sBAAsB,KAAkC;AAC/D,KAAI,CAAC,OAAO,OAAO,QAAQ,SACzB;CAEF,MAAM,MAAO,IAA8B;AAC3C,KAAI,OAAO,QAAQ,YAAY,OAAO,UAAU,IAAI,CAClD,QAAO;;AAKX,SAAS,gBAAgB,KAAuB;CAC9C,MAAM,OAAO,iBAAiB,IAAI;AAClC,KAAI,SAAS,sBAAsB,MAAM,WAAW,UAAU,CAC5D,QAAO;CAET,MAAM,UAAU,sBAAsB,IAAI;AAC1C,QAAO,YAAY,KAAA,KAAa,0BAA0B,IAAI,QAAQ;;AAGxE,SAAS,uBAAuB,KAAyB;CACvD,MAAM,MAAiB,EAAE;CACzB,MAAM,uBAAO,IAAI,KAAc;CAC/B,MAAM,QAAmB,CAAC,IAAI;AAC9B,QAAO,MAAM,SAAS,GAAG;EACvB,MAAM,UAAU,MAAM,OAAO;AAC7B,MAAI,YAAY,KAAA,KAAa,KAAK,IAAI,QAAQ,CAC5C;AAEF,OAAK,IAAI,QAAQ;AACjB,MAAI,KAAK,QAAQ;AACjB,MAAI,CAAC,WAAW,OAAO,YAAY,SACjC;EAEF,MAAM,QAAS,QAAgC;AAC/C,MAAI,UAAU,KAAA,EACZ,OAAM,KAAK,MAAM;;AAGrB,QAAO;;AAGT,SAAgB,uBAAuB,KAAuB;AAC5D,KAAI,CAAC,IACH,QAAO;AAGT,MAAK,MAAM,aAAa,uBAAuB,IAAI,EAAE;EACnD,MAAM,OAAO,iBAAiB,UAAU;AACxC,MAAI,QAAQ,uBAAuB,IAAI,KAAK,CAC1C,QAAO;AAGT,MAAI,CAAC,gBAAgB,UAAU,CAC7B;EAGF,MAAM,gBAAgB,sBAAsB,UAAU;AACtD,MAAI,kBAAkB,KAAA,KAAa,0BAA0B,IAAI,cAAc,CAC7E,QAAO;AAGT,MAAI,CAAC,aAAa,OAAO,cAAc,SACrC;EAGF,MAAM,eAAe,CAClB,UAAoC,SACpC,UAAmC,OACrC;AACD,OAAK,MAAM,cAAc,cAAc;GACrC,MAAM,UAAU,mBAAmB,WAAW;AAC9C,OAAI,CAAC,QACH;AAEF,OAAI,iCAAiC,KAAK,QAAQ,CAChD,QAAO;AAET,OAAI,kCAAkC,MAAM,YAAY,QAAQ,SAAS,QAAQ,CAAC,CAChF,QAAO;;;AAKb,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ssh-tunnel.js","names":[],"sources":["../../../src/infra/ssh-tunnel.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport net from 'node:net';\n\nexport type SshParsedTarget = {\n user?: string;\n host: string;\n port: number;\n};\n\nexport type SshTunnel = {\n parsedTarget: SshParsedTarget;\n localPort: number;\n remotePort: number;\n pid: number | null;\n stderr: string[];\n stop: () => Promise<void>;\n};\n\nexport function parseSshTarget(raw: string): SshParsedTarget | null {\n const trimmed = raw.trim().replace(/^ssh\\s+/, '');\n if (!trimmed) {\n return null;\n }\n\n const [userPart, hostPart] = trimmed.includes('@')\n ? ((): [string | undefined, string] => {\n const idx = trimmed.indexOf('@');\n const user = trimmed.slice(0, idx).trim();\n const host = trimmed.slice(idx + 1).trim();\n return [user || undefined, host];\n })()\n : [undefined, trimmed];\n\n const colonIdx = hostPart.lastIndexOf(':');\n if (colonIdx > 0 && colonIdx < hostPart.length - 1) {\n const host = hostPart.slice(0, colonIdx).trim();\n const portRaw = hostPart.slice(colonIdx + 1).trim();\n const port = Number.parseInt(portRaw, 10);\n if (!host || !Number.isFinite(port) || port <= 0) {\n return null;\n }\n if (host.startsWith('-')) {\n return null;\n }\n return { user: userPart, host, port };\n }\n\n if (!hostPart || hostPart.startsWith('-')) {\n return null;\n }\n return { user: userPart, host: hostPart, port: 22 };\n}\n\nasync function pickEphemeralPort(): Promise<number> {\n return new Promise<number>((resolve, reject) => {\n const server = net.createServer();\n server.once('error', reject);\n server.listen(0, '127.0.0.1', () => {\n const addr = server.address();\n server.close(() => {\n if (!addr || typeof addr === 'string') {\n reject(new Error('failed to allocate a local port'));\n return;\n }\n resolve(addr.port);\n });\n });\n });\n}\n\nasync function canBindLocalPort(port: number): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n const server = net.createServer();\n server.once('error', () => resolve(false));\n server.once('listening', () => {\n server.close(() => resolve(true));\n });\n server.listen(port, '127.0.0.1');\n });\n}\n\nasync function canConnectLocal(port: number): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n const socket = net.connect({ host: '127.0.0.1', port });\n const done = (ok: boolean) => {\n socket.removeAllListeners();\n socket.destroy();\n resolve(ok);\n };\n socket.once('connect', () => done(true));\n socket.once('error', () => done(false));\n socket.setTimeout(250, () => done(false));\n });\n}\n\nasync function waitForLocalListener(port: number, timeoutMs: number): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n if (await canConnectLocal(port)) {\n return;\n }\n await new Promise((r) => setTimeout(r, 50));\n }\n throw new Error(`ssh tunnel did not start listening on localhost:${port}`);\n}\n\nexport async function startSshPortForward(opts: {\n target: string;\n identity?: string;\n localPortPreferred: number;\n remotePort: number;\n timeoutMs?: number;\n}): Promise<SshTunnel> {\n const parsed = parseSshTarget(opts.target);\n if (!parsed) {\n throw new Error(`invalid SSH target: ${opts.target}`);\n }\n\n let localPort = opts.localPortPreferred;\n if (!(await canBindLocalPort(localPort))) {\n localPort = await pickEphemeralPort();\n }\n\n const userHost = parsed.user ? `${parsed.user}@${parsed.host}` : parsed.host;\n const args = [\n '-N',\n '-L',\n `${localPort}:127.0.0.1:${opts.remotePort}`,\n '-p',\n String(parsed.port),\n '-o',\n 'ExitOnForwardFailure=yes',\n '-o',\n 'BatchMode=yes',\n '-o',\n 'StrictHostKeyChecking=accept-new',\n '-o',\n 'ConnectTimeout=5',\n '-o',\n 'ServerAliveInterval=15',\n '-o',\n 'ServerAliveCountMax=3',\n ];\n if (opts.identity?.trim()) {\n args.push('-i', opts.identity.trim());\n }\n args.push('--', userHost);\n\n const stderr: string[] = [];\n const sshBin = process.platform === 'win32' ? 'ssh' : '/usr/bin/ssh';\n const child = spawn(sshBin, args, {\n stdio: ['ignore', 'ignore', 'pipe'],\n });\n child.stderr?.setEncoding('utf8');\n child.stderr?.on('data', (chunk) => {\n const lines = String(chunk)\n .split('\\n')\n .map((l) => l.trim())\n .filter(Boolean);\n stderr.push(...lines);\n });\n\n const stop = async () => {\n if (child.killed) {\n return;\n }\n child.kill('SIGTERM');\n await new Promise<void>((resolve) => {\n const t = setTimeout(() => {\n try {\n child.kill('SIGKILL');\n } finally {\n resolve();\n }\n }, 1500);\n child.once('exit', () => {\n clearTimeout(t);\n resolve();\n });\n });\n };\n\n const timeoutMs = opts.timeoutMs ?? 10_000;\n try {\n await Promise.race([\n waitForLocalListener(localPort, Math.max(250, timeoutMs)),\n new Promise<void>((_, reject) => {\n child.once('exit', (code, signal) => {\n reject(new Error(`ssh exited (${code ?? 'null'}${signal ? `/${signal}` : ''})`));\n });\n }),\n ]);\n } catch (err) {\n await stop();\n const suffix = stderr.length > 0 ? `\\n${stderr.join('\\n')}` : '';\n const em = err instanceof Error ? err.message : String(err);\n throw new Error(`${em}${suffix}`, { cause: err });\n }\n\n return {\n parsedTarget: parsed,\n localPort,\n remotePort: opts.remotePort,\n pid: typeof child.pid === 'number' ? child.pid : null,\n stderr,\n stop,\n };\n}\n"],"mappings":";;;AAkBA,SAAgB,eAAe,KAAqC;CAClE,MAAM,UAAU,IAAI,MAAM,CAAC,QAAQ,WAAW,GAAG;AACjD,KAAI,CAAC,QACH,QAAO;CAGT,MAAM,CAAC,UAAU,YAAY,QAAQ,SAAS,IAAI,UACT;EACnC,MAAM,MAAM,QAAQ,QAAQ,IAAI;EAChC,MAAM,OAAO,QAAQ,MAAM,GAAG,IAAI,CAAC,MAAM;EACzC,MAAM,OAAO,QAAQ,MAAM,MAAM,EAAE,CAAC,MAAM;AAC1C,SAAO,CAAC,QAAQ,KAAA,GAAW,KAAK;KAC9B,GACJ,CAAC,KAAA,GAAW,QAAQ;CAExB,MAAM,WAAW,SAAS,YAAY,IAAI;AAC1C,KAAI,WAAW,KAAK,WAAW,SAAS,SAAS,GAAG;EAClD,MAAM,OAAO,SAAS,MAAM,GAAG,SAAS,CAAC,MAAM;EAC/C,MAAM,UAAU,SAAS,MAAM,WAAW,EAAE,CAAC,MAAM;EACnD,MAAM,OAAO,OAAO,SAAS,SAAS,GAAG;AACzC,MAAI,CAAC,QAAQ,CAAC,OAAO,SAAS,KAAK,IAAI,QAAQ,EAC7C,QAAO;AAET,MAAI,KAAK,WAAW,IAAI,CACtB,QAAO;AAET,SAAO;GAAE,MAAM;GAAU;GAAM;GAAM;;AAGvC,KAAI,CAAC,YAAY,SAAS,WAAW,IAAI,CACvC,QAAO;AAET,QAAO;EAAE,MAAM;EAAU,MAAM;EAAU,MAAM;EAAI;;AAGrD,eAAe,oBAAqC;AAClD,QAAO,IAAI,SAAiB,SAAS,WAAW;EAC9C,MAAM,SAAS,IAAI,cAAc;AACjC,SAAO,KAAK,SAAS,OAAO;AAC5B,SAAO,OAAO,GAAG,mBAAmB;GAClC,MAAM,OAAO,OAAO,SAAS;AAC7B,UAAO,YAAY;AACjB,QAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,4BAAO,IAAI,MAAM,kCAAkC,CAAC;AACpD;;AAEF,YAAQ,KAAK,KAAK;KAClB;IACF;GACF;;AAGJ,eAAe,iBAAiB,MAAgC;AAC9D,QAAO,IAAI,SAAkB,YAAY;EACvC,MAAM,SAAS,IAAI,cAAc;AACjC,SAAO,KAAK,eAAe,QAAQ,MAAM,CAAC;AAC1C,SAAO,KAAK,mBAAmB;AAC7B,UAAO,YAAY,QAAQ,KAAK,CAAC;IACjC;AACF,SAAO,OAAO,MAAM,YAAY;GAChC;;AAGJ,eAAe,gBAAgB,MAAgC;AAC7D,QAAO,IAAI,SAAkB,YAAY;EACvC,MAAM,SAAS,IAAI,QAAQ;GAAE,MAAM;GAAa;GAAM,CAAC;EACvD,MAAM,QAAQ,OAAgB;AAC5B,UAAO,oBAAoB;AAC3B,UAAO,SAAS;AAChB,WAAQ,GAAG;;AAEb,SAAO,KAAK,iBAAiB,KAAK,KAAK,CAAC;AACxC,SAAO,KAAK,eAAe,KAAK,MAAM,CAAC;AACvC,SAAO,WAAW,WAAW,KAAK,MAAM,CAAC;GACzC;;AAGJ,eAAe,qBAAqB,MAAc,WAAkC;CAClF,MAAM,YAAY,KAAK,KAAK;AAC5B,QAAO,KAAK,KAAK,GAAG,YAAY,WAAW;AACzC,MAAI,MAAM,gBAAgB,KAAK,CAC7B;AAEF,QAAM,IAAI,SAAS,MAAM,WAAW,GAAG,GAAG,CAAC;;AAE7C,OAAM,IAAI,MAAM,mDAAmD,OAAO;;AAG5E,eAAsB,oBAAoB,MAMnB;CACrB,MAAM,SAAS,eAAe,KAAK,OAAO;AAC1C,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,uBAAuB,KAAK,SAAS;CAGvD,IAAI,YAAY,KAAK;AACrB,KAAI,CAAE,MAAM,iBAAiB,UAAU,CACrC,aAAY,MAAM,mBAAmB;CAGvC,MAAM,WAAW,OAAO,OAAO,GAAG,OAAO,KAAK,GAAG,OAAO,SAAS,OAAO;CACxE,MAAM,OAAO;EACX;EACA;EACA,GAAG,UAAU,aAAa,KAAK;EAC/B;EACA,OAAO,OAAO,KAAK;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;AACD,KAAI,KAAK,UAAU,MAAM,CACvB,MAAK,KAAK,MAAM,KAAK,SAAS,MAAM,CAAC;AAEvC,MAAK,KAAK,MAAM,SAAS;CAEzB,MAAM,SAAmB,EAAE;CAE3B,MAAM,QAAQ,MADC,QAAQ,aAAa,UAAU,QAAQ,gBAC1B,MAAM,EAChC,OAAO;EAAC;EAAU;EAAU;EAAO,EACpC,CAAC;AACF,OAAM,QAAQ,YAAY,OAAO;AACjC,OAAM,QAAQ,GAAG,SAAS,UAAU;EAClC,MAAM,QAAQ,OAAO,MAAM,CACxB,MAAM,KAAK,CACX,KAAK,MAAM,EAAE,MAAM,CAAC,CACpB,OAAO,QAAQ;AAClB,SAAO,KAAK,GAAG,MAAM;GACrB;CAEF,MAAM,OAAO,YAAY;AACvB,MAAI,MAAM,OACR;AAEF,QAAM,KAAK,UAAU;AACrB,QAAM,IAAI,SAAe,YAAY;GACnC,MAAM,IAAI,iBAAiB;AACzB,QAAI;AACF,WAAM,KAAK,UAAU;cACb;AACR,cAAS;;MAEV,KAAK;AACR,SAAM,KAAK,cAAc;AACvB,iBAAa,EAAE;AACf,aAAS;KACT;IACF;;CAGJ,MAAM,YAAY,KAAK,aAAa;AACpC,KAAI;AACF,QAAM,QAAQ,KAAK,CACjB,qBAAqB,WAAW,KAAK,IAAI,KAAK,UAAU,CAAC,EACzD,IAAI,SAAe,GAAG,WAAW;AAC/B,SAAM,KAAK,SAAS,MAAM,WAAW;AACnC,2BAAO,IAAI,MAAM,eAAe,QAAQ,SAAS,SAAS,IAAI,WAAW,GAAG,GAAG,CAAC;KAChF;IACF,CACH,CAAC;UACK,KAAK;AACZ,QAAM,MAAM;EACZ,MAAM,SAAS,OAAO,SAAS,IAAI,KAAK,OAAO,KAAK,KAAK,KAAK;EAC9D,MAAM,KAAK,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC3D,QAAM,IAAI,MAAM,GAAG,KAAK,UAAU,EAAE,OAAO,KAAK,CAAC;;AAGnD,QAAO;EACL,cAAc;EACd;EACA,YAAY,KAAK;EACjB,KAAK,OAAO,MAAM,QAAQ,WAAW,MAAM,MAAM;EACjD;EACA;EACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stable-node-path.js","names":[],"sources":["../../../src/infra/stable-node-path.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\n\n/** Resolve Homebrew Cellar node paths to stable opt/bin symlinks. */\nexport async function resolveStableNodePath(nodePath: string): Promise<string> {\n const cellarMatch = nodePath.match(\n /^(.+?)[\\\\/]Cellar[\\\\/]([^\\\\/]+)[\\\\/][^\\\\/]+[\\\\/]bin[\\\\/]node$/,\n );\n if (!cellarMatch) return nodePath;\n\n const prefix = cellarMatch[1];\n const formula = cellarMatch[2];\n const pathModule = nodePath.includes('\\\\') ? path.win32 : path.posix;\n const optPath = pathModule.join(prefix, 'opt', formula, 'bin', 'node');\n try {\n await fs.access(optPath);\n return optPath;\n } catch {\n // fall through\n }\n\n if (formula === 'node') {\n const binPath = pathModule.join(prefix, 'bin', 'node');\n try {\n await fs.access(binPath);\n return binPath;\n } catch {\n // fall through\n }\n }\n\n return nodePath;\n}\n"],"mappings":";;;;AAIA,eAAsB,sBAAsB,UAAmC;CAC7E,MAAM,cAAc,SAAS,MAC3B,gEACD;AACD,KAAI,CAAC,YAAa,QAAO;CAEzB,MAAM,SAAS,YAAY;CAC3B,MAAM,UAAU,YAAY;CAC5B,MAAM,aAAa,SAAS,SAAS,KAAK,GAAG,KAAK,QAAQ,KAAK;CAC/D,MAAM,UAAU,WAAW,KAAK,QAAQ,OAAO,SAAS,OAAO,OAAO;AACtE,KAAI;AACF,QAAM,GAAG,OAAO,QAAQ;AACxB,SAAO;SACD;AAIR,KAAI,YAAY,QAAQ;EACtB,MAAM,UAAU,WAAW,KAAK,QAAQ,OAAO,OAAO;AACtD,MAAI;AACF,SAAM,GAAG,OAAO,QAAQ;AACxB,UAAO;UACD;;AAKV,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tailscale.js","names":[],"sources":["../../../src/infra/tailscale.ts"],"sourcesContent":["import { execFileSync } from 'node:child_process';\nimport { existsSync } from 'node:fs';\n\nimport { runExec, type ExecResult } from './exec.js';\n\nfunction parsePossiblyNoisyJsonObject(stdout: string): Record<string, unknown> {\n const trimmed = stdout.trim();\n const start = trimmed.indexOf('{');\n const end = trimmed.lastIndexOf('}');\n if (start >= 0 && end > start) {\n return JSON.parse(trimmed.slice(start, end + 1)) as Record<string, unknown>;\n }\n return JSON.parse(trimmed) as Record<string, unknown>;\n}\n\nfunction normalizeOptionalString(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\nfunction isTailnetIPv4(ip: string): boolean {\n const trimmed = ip.trim();\n if (!/^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(trimmed)) {\n return false;\n }\n return trimmed.startsWith('100.');\n}\n\nfunction parseTailnetIpv4Lines(stdout: string): string | undefined {\n for (const line of stdout.split(/\\r?\\n/)) {\n const ip = line.trim();\n if (isTailnetIPv4(ip)) {\n return ip;\n }\n }\n return undefined;\n}\n\nconst WELL_KNOWN_TAILSCALE_PATHS = [\n '/opt/homebrew/bin/tailscale',\n '/usr/local/bin/tailscale',\n '/Applications/Tailscale.app/Contents/MacOS/Tailscale',\n] as const;\n\nexport class TailscaleCliNotFoundError extends Error {\n constructor() {\n super(\n 'Tailscale CLI not found. Install Tailscale (https://tailscale.com/download) and sign in, ' +\n 'or ensure the tailscale command is on PATH (macOS app: /Applications/Tailscale.app).',\n );\n this.name = 'TailscaleCliNotFoundError';\n }\n}\n\nasync function checkBinary(path: string): Promise<boolean> {\n if (!path || !existsSync(path)) {\n return false;\n }\n try {\n await Promise.race([\n runExec(path, ['--version'], { timeoutMs: 3000 }),\n new Promise<never>((_, reject) => setTimeout(() => reject(new Error('timeout')), 3000)),\n ]);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function findTailscaleBinary(): Promise<string | null> {\n for (const path of WELL_KNOWN_TAILSCALE_PATHS) {\n if (await checkBinary(path)) {\n return path;\n }\n }\n\n try {\n const { stdout } = await runExec('which', ['tailscale'], { timeoutMs: 3000 });\n const fromPath = stdout.trim();\n if (fromPath && (await checkBinary(fromPath))) {\n return fromPath;\n }\n } catch {\n // continue\n }\n\n try {\n const { stdout } = await runExec(\n 'find',\n [\n '/Applications',\n '-maxdepth',\n '3',\n '-name',\n 'Tailscale',\n '-path',\n '*/Tailscale.app/Contents/MacOS/Tailscale',\n ],\n { timeoutMs: 5000 },\n );\n const found = stdout.trim().split('\\n')[0];\n if (found && (await checkBinary(found))) {\n return found;\n }\n } catch {\n // continue\n }\n\n return null;\n}\n\nlet cachedTailscaleBinary: string | null = null;\n\nexport function getTestTailscaleBinaryOverride(env: NodeJS.ProcessEnv = process.env): string | null {\n const forcedBinary = env.XOPC_TEST_TAILSCALE_BINARY?.trim();\n if (!forcedBinary) {\n return null;\n }\n if (env.VITEST || env.NODE_ENV === 'test') {\n return forcedBinary;\n }\n return null;\n}\n\nexport async function requireTailscaleBinary(): Promise<string> {\n const forcedBinary = getTestTailscaleBinaryOverride();\n if (forcedBinary) {\n cachedTailscaleBinary = forcedBinary;\n return forcedBinary;\n }\n if (cachedTailscaleBinary) {\n return cachedTailscaleBinary;\n }\n const resolved = await findTailscaleBinary();\n if (!resolved) {\n throw new TailscaleCliNotFoundError();\n }\n cachedTailscaleBinary = resolved;\n return resolved;\n}\n\nexport async function getTailscaleBinary(): Promise<string> {\n try {\n return await requireTailscaleBinary();\n } catch (err) {\n if (err instanceof TailscaleCliNotFoundError) {\n return 'tailscale';\n }\n throw err;\n }\n}\n\nexport function resetTailscaleBinaryCacheForTest(): void {\n cachedTailscaleBinary = null;\n}\n\nfunction findTailscaleBinarySync(): string | null {\n const forced = getTestTailscaleBinaryOverride();\n if (forced) {\n return forced;\n }\n if (cachedTailscaleBinary) {\n return cachedTailscaleBinary;\n }\n for (const path of WELL_KNOWN_TAILSCALE_PATHS) {\n if (existsSync(path)) {\n return path;\n }\n }\n return null;\n}\n\nexport function getTailnetIPv4Sync(): string | undefined {\n try {\n const bin = findTailscaleBinarySync();\n if (!bin) {\n return undefined;\n }\n const stdout = execFileSync(bin, ['ip', '-4'], {\n encoding: 'utf8',\n timeout: 3000,\n });\n return parseTailnetIpv4Lines(stdout);\n } catch {\n return undefined;\n }\n}\n\nexport async function getTailnetIPv4(): Promise<string | undefined> {\n try {\n const bin = await getTailscaleBinary();\n const { stdout } = await runExec(bin, ['ip', '-4'], { timeoutMs: 5000 });\n return parseTailnetIpv4Lines(stdout);\n } catch {\n return undefined;\n }\n}\n\nexport async function getTailnetHostname(exec: typeof runExec = runExec): Promise<string> {\n const tailscaleBin = await getTailscaleBinary();\n const { stdout } = await exec(tailscaleBin, ['status', '--json'], {\n timeoutMs: 5000,\n maxBuffer: 400_000,\n });\n const parsed = stdout ? parsePossiblyNoisyJsonObject(stdout) : {};\n const self =\n typeof parsed.Self === 'object' && parsed.Self !== null\n ? (parsed.Self as Record<string, unknown>)\n : undefined;\n const dns = typeof self?.DNSName === 'string' ? self.DNSName : undefined;\n const ips = Array.isArray(self?.TailscaleIPs)\n ? ((parsed.Self as { TailscaleIPs?: string[] }).TailscaleIPs ?? [])\n : [];\n if (dns && dns.length > 0) {\n return dns.replace(/\\.$/, '');\n }\n if (ips.length > 0) {\n return ips[0]!;\n }\n throw new Error('Could not determine Tailscale DNS or IP');\n}\n\ntype ExecErrorDetails = {\n stdout?: unknown;\n stderr?: unknown;\n message?: unknown;\n code?: unknown;\n};\n\nfunction extractExecErrorText(err: unknown) {\n const errOutput = err as ExecErrorDetails;\n const stdout = typeof errOutput.stdout === 'string' ? errOutput.stdout : '';\n const stderr = typeof errOutput.stderr === 'string' ? errOutput.stderr : '';\n const message = typeof errOutput.message === 'string' ? errOutput.message : '';\n const code = typeof errOutput.code === 'string' ? errOutput.code : '';\n return { stdout, stderr, message, code };\n}\n\nfunction isPermissionDeniedError(err: unknown): boolean {\n const { stdout, stderr, message, code } = extractExecErrorText(err);\n if (code.toUpperCase() === 'EACCES') {\n return true;\n }\n const combined = `${stdout}\\n${stderr}\\n${message}`.toLowerCase();\n return (\n combined.includes('permission denied') ||\n combined.includes('access denied') ||\n combined.includes('operation not permitted') ||\n combined.includes('requires root') ||\n combined.includes('must be run as root') ||\n combined.includes('requires sudo')\n );\n}\n\nasync function execWithSudoFallback(\n exec: typeof runExec,\n bin: string,\n args: string[],\n opts: { maxBuffer?: number; timeoutMs?: number },\n): Promise<ExecResult> {\n try {\n return await exec(bin, args, opts);\n } catch (err) {\n if (!isPermissionDeniedError(err)) {\n throw err;\n }\n try {\n return await exec('sudo', ['-n', bin, ...args], opts);\n } catch {\n throw err;\n }\n }\n}\n\nfunction wrapTailscaleExecError(err: unknown): Error {\n const { code, message } = extractExecErrorText(err);\n if (code === 'ENOENT' || message.includes('ENOENT')) {\n return new TailscaleCliNotFoundError();\n }\n return err instanceof Error ? err : new Error(String(err));\n}\n\nexport async function enableTailscaleServe(port: number, exec: typeof runExec = runExec): Promise<void> {\n const tailscaleBin = await requireTailscaleBinary();\n try {\n await execWithSudoFallback(exec, tailscaleBin, ['serve', '--bg', '--yes', `${port}`], {\n maxBuffer: 200_000,\n timeoutMs: 15_000,\n });\n } catch (err) {\n throw wrapTailscaleExecError(err);\n }\n}\n\nexport async function disableTailscaleServe(exec: typeof runExec = runExec): Promise<void> {\n const tailscaleBin = await requireTailscaleBinary();\n try {\n await execWithSudoFallback(exec, tailscaleBin, ['serve', 'reset'], {\n maxBuffer: 200_000,\n timeoutMs: 15_000,\n });\n } catch (err) {\n throw wrapTailscaleExecError(err);\n }\n}\n\nexport async function enableTailscaleFunnel(port: number, exec: typeof runExec = runExec): Promise<void> {\n const tailscaleBin = await requireTailscaleBinary();\n try {\n await execWithSudoFallback(exec, tailscaleBin, ['funnel', '--bg', '--yes', `${port}`], {\n maxBuffer: 200_000,\n timeoutMs: 15_000,\n });\n } catch (err) {\n throw wrapTailscaleExecError(err);\n }\n}\n\nexport async function disableTailscaleFunnel(exec: typeof runExec = runExec): Promise<void> {\n const tailscaleBin = await requireTailscaleBinary();\n try {\n await execWithSudoFallback(exec, tailscaleBin, ['funnel', 'reset'], {\n maxBuffer: 200_000,\n timeoutMs: 15_000,\n });\n } catch (err) {\n throw wrapTailscaleExecError(err);\n }\n}\n\nexport type TailscaleWhoisIdentity = {\n login: string;\n name?: string;\n};\n\nconst whoisCache = new Map<string, { value: TailscaleWhoisIdentity | null; expiresAt: number }>();\n\nfunction readRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' ? (value as Record<string, unknown>) : null;\n}\n\nfunction parseWhoisIdentity(payload: Record<string, unknown>): TailscaleWhoisIdentity | null {\n const userProfile =\n readRecord(payload.UserProfile) ?? readRecord(payload.userProfile) ?? readRecord(payload.User);\n const login =\n normalizeOptionalString(userProfile?.LoginName) ??\n normalizeOptionalString(userProfile?.Login) ??\n normalizeOptionalString(userProfile?.login) ??\n normalizeOptionalString(payload.LoginName) ??\n normalizeOptionalString(payload.login);\n if (!login) {\n return null;\n }\n const name =\n normalizeOptionalString(userProfile?.DisplayName) ??\n normalizeOptionalString(userProfile?.Name) ??\n normalizeOptionalString(userProfile?.displayName) ??\n normalizeOptionalString(payload.DisplayName) ??\n normalizeOptionalString(payload.name);\n return { login, name };\n}\n\nexport async function readTailscaleWhoisIdentity(\n ip: string,\n exec: typeof runExec = runExec,\n opts?: { timeoutMs?: number; cacheTtlMs?: number; errorTtlMs?: number },\n): Promise<TailscaleWhoisIdentity | null> {\n const normalized = ip.trim();\n if (!normalized) {\n return null;\n }\n const now = Date.now();\n const cached = whoisCache.get(normalized);\n if (cached && cached.expiresAt > now) {\n return cached.value;\n }\n\n const cacheTtlMs = opts?.cacheTtlMs ?? 60_000;\n const errorTtlMs = opts?.errorTtlMs ?? 5_000;\n try {\n const tailscaleBin = await getTailscaleBinary();\n const { stdout } = await exec(tailscaleBin, ['whois', '--json', normalized], {\n timeoutMs: opts?.timeoutMs ?? 5_000,\n maxBuffer: 200_000,\n });\n const parsed = stdout ? parsePossiblyNoisyJsonObject(stdout) : {};\n const identity = parseWhoisIdentity(parsed);\n whoisCache.set(normalized, { value: identity, expiresAt: Date.now() + cacheTtlMs });\n return identity;\n } catch {\n whoisCache.set(normalized, { value: null, expiresAt: Date.now() + errorTtlMs });\n return null;\n }\n}\n\nexport async function isTailscaleInstalled(): Promise<boolean> {\n const bin = await findTailscaleBinary();\n return bin !== null;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"undici-fetch.js","names":["undiciFetch"],"sources":["../../../src/infra/undici-fetch.ts"],"sourcesContent":["import { fetch as undiciFetch } from 'undici';\n\nexport function loadUndiciRuntimeDeps(): { fetch: typeof undiciFetch } {\n return { fetch: undiciFetch };\n}\n"],"mappings":";;AAEA,SAAgB,wBAAuD;AACrE,QAAO,EAASA,OAAa"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unhandled-rejections.js","names":[],"sources":["../../../src/infra/unhandled-rejections.ts"],"sourcesContent":["import { createLogger } from '../utils/logger.js';\nimport { isTransientSqliteError } from './sqlite-errors.js';\nimport { resolveGlobalSingleton } from '../utils/global-singleton.js';\n\nconst log = createLogger('UnhandledRejection');\n\nconst installStateKey = Symbol.for('xopc.unhandledRejection.installed');\n\ntype InstallState = {\n installed: boolean;\n};\n\nexport function installSqliteTransientRejectionHandler(): void {\n const state = resolveGlobalSingleton<InstallState>(installStateKey, () => ({\n installed: false,\n }));\n if (state.installed) {\n return;\n }\n\n process.on('unhandledRejection', (reason) => {\n if (!isTransientSqliteError(reason)) {\n return;\n }\n const em = reason instanceof Error ? reason.message : String(reason);\n log.warn({ err: reason instanceof Error ? reason : undefined, errorMessage: em }, `Transient SQLite rejection: ${em}`);\n });\n\n state.installed = true;\n}\n"],"mappings":";;;;;aAAkD;AAIlD,MAAM,MAAM,aAAa,qBAAqB;AAE9C,MAAM,kBAAkB,OAAO,IAAI,oCAAoC;AAMvE,SAAgB,yCAA+C;CAC7D,MAAM,QAAQ,uBAAqC,wBAAwB,EACzE,WAAW,OACZ,EAAE;AACH,KAAI,MAAM,UACR;AAGF,SAAQ,GAAG,uBAAuB,WAAW;AAC3C,MAAI,CAAC,uBAAuB,OAAO,CACjC;EAEF,MAAM,KAAK,kBAAkB,QAAQ,OAAO,UAAU,OAAO,OAAO;AACpE,MAAI,KAAK;GAAE,KAAK,kBAAkB,QAAQ,SAAS,KAAA;GAAW,cAAc;GAAI,EAAE,+BAA+B,KAAK;GACtH;AAEF,OAAM,YAAY"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-channels.js","names":[],"sources":["../../../src/infra/update-channels.ts"],"sourcesContent":["// src/infra/update-channels.ts\n\nexport type UpdateChannel = 'stable' | 'beta' | 'dev';\n\nexport const DEFAULT_PACKAGE_CHANNEL: UpdateChannel = 'stable';\nexport const DEFAULT_GIT_CHANNEL: UpdateChannel = 'dev';\n\n/**\n * Map update channel to the npm dist-tag used for querying registry.\n * stable → latest, beta → beta, dev → dev\n */\nexport function channelToNpmTag(channel: UpdateChannel): string {\n if (channel === 'beta') return 'beta';\n if (channel === 'dev') return 'dev';\n return 'latest';\n}\n\n/** Normalize a user-provided string to a valid UpdateChannel, or null. */\nexport function normalizeUpdateChannel(value?: string | null): UpdateChannel | null {\n const normalized = value?.trim().toLowerCase();\n if (normalized === 'stable' || normalized === 'beta' || normalized === 'dev') {\n return normalized;\n }\n return null;\n}\n\n/** Return true if a version/tag string contains a beta prerelease identifier. */\nexport function isBetaVersion(version: string): boolean {\n return /(?:^|[.-])beta(?:[.-]|$)/i.test(version);\n}\n\n/** Return true if a version string is a stable release (no beta marker in this heuristic). */\nexport function isStableVersion(version: string): boolean {\n return !isBetaVersion(version);\n}\n"],"mappings":";AAIA,MAAa,0BAAyC;AACtD,MAAa,sBAAqC;;;;;AAMlD,SAAgB,gBAAgB,SAAgC;AAC9D,KAAI,YAAY,OAAQ,QAAO;AAC/B,KAAI,YAAY,MAAO,QAAO;AAC9B,QAAO;;;AAIT,SAAgB,uBAAuB,OAA6C;CAClF,MAAM,aAAa,OAAO,MAAM,CAAC,aAAa;AAC9C,KAAI,eAAe,YAAY,eAAe,UAAU,eAAe,MACrE,QAAO;AAET,QAAO;;;AAIT,SAAgB,cAAc,SAA0B;AACtD,QAAO,4BAA4B,KAAK,QAAQ;;;AAIlD,SAAgB,gBAAgB,SAA0B;AACxD,QAAO,CAAC,cAAc,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-check.js","names":[],"sources":["../../../src/infra/update-check.ts"],"sourcesContent":["// src/infra/update-check.ts\n\nimport { access, readFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { PACKAGE_VERSION } from '../package-version.js';\n\nimport { channelToNpmTag, type UpdateChannel } from './update-channels.js';\n\n// --- Types ---\n\nexport type InstallKind = 'git' | 'package' | 'unknown';\n\nexport type NpmTagResult = {\n tag: string;\n version: string | null;\n error?: string;\n};\n\nexport type UpdateCheckResult = {\n installKind: InstallKind;\n root: string | null;\n};\n\nexport type UpdateAvailable = {\n currentVersion: string;\n latestVersion: string;\n channel: string;\n};\n\n// --- npm Registry ---\n\nconst REGISTRY_BASE = 'https://registry.npmjs.org';\nconst PACKAGE_NAME = '@xopcai/xopc';\nconst REGISTRY_TIMEOUT_MS = 3500;\nconst MAX_REGISTRY_RETRIES = 2;\nconst INITIAL_REGISTRY_RETRY_DELAY_MS = 500;\n\n/**\n * Fetch the version published under a specific npm dist-tag.\n * Uses the abbreviated packument endpoint: `GET /<pkg>/<tag>`.\n */\nexport async function fetchNpmTagVersion(params: {\n tag: string;\n timeoutMs?: number;\n}): Promise<NpmTagResult> {\n const timeoutMs = params.timeoutMs ?? REGISTRY_TIMEOUT_MS;\n const encodedName = encodeURIComponent(PACKAGE_NAME).replace('%40', '@');\n const url = `${REGISTRY_BASE}/${encodedName}/${encodeURIComponent(params.tag)}`;\n\n let lastError: string | undefined;\n\n for (let attempt = 0; attempt <= MAX_REGISTRY_RETRIES; attempt++) {\n if (attempt > 0) {\n const delayMs = INITIAL_REGISTRY_RETRY_DELAY_MS * Math.pow(2, attempt - 1);\n await new Promise((r) => setTimeout(r, delayMs));\n }\n\n try {\n const response = await fetch(url, {\n signal: AbortSignal.timeout(timeoutMs),\n });\n if (!response.ok) {\n lastError = `HTTP ${response.status}`;\n if (response.status >= 400 && response.status < 500) {\n return { tag: params.tag, version: null, error: lastError };\n }\n continue;\n }\n const json = (await response.json()) as { version?: unknown };\n const version = typeof json?.version === 'string' ? json.version : null;\n return { tag: params.tag, version };\n } catch (err) {\n lastError = String(err);\n }\n }\n\n return { tag: params.tag, version: null, error: lastError };\n}\n\n/**\n * Resolve the best version for the given update channel.\n * For beta channel: if the beta tag version is older than latest, return latest instead.\n */\nexport async function resolveNpmChannelTag(params: {\n channel: UpdateChannel;\n timeoutMs?: number;\n}): Promise<{ tag: string; version: string | null }> {\n const channelTag = channelToNpmTag(params.channel);\n const channelResult = await fetchNpmTagVersion({ tag: channelTag, timeoutMs: params.timeoutMs });\n\n if (params.channel !== 'beta') {\n return { tag: channelTag, version: channelResult.version };\n }\n\n // For beta: also check latest, return whichever is newer\n const latestResult = await fetchNpmTagVersion({ tag: 'latest', timeoutMs: params.timeoutMs });\n if (!latestResult.version) {\n return { tag: channelTag, version: channelResult.version };\n }\n if (!channelResult.version) {\n return { tag: 'latest', version: latestResult.version };\n }\n const comparison = compareSemver(channelResult.version, latestResult.version);\n if (comparison !== null && comparison < 0) {\n return { tag: 'latest', version: latestResult.version };\n }\n return { tag: channelTag, version: channelResult.version };\n}\n\n// --- Semver comparison ---\n\n/**\n * Parse a version string into comparable numeric parts.\n * Handles formats like \"1.2.3\", \"1.2.3-beta.1\".\n * Returns null for unparseable strings.\n */\nfunction parseSemverParts(\n version: string,\n): { major: number; minor: number; patch: number; prerelease: string | null } | null {\n const match = /^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-(.+))?$/.exec(version.trim());\n if (!match) return null;\n return {\n major: parseInt(match[1], 10),\n minor: parseInt(match[2], 10),\n patch: parseInt(match[3], 10),\n prerelease: match[4] ?? null,\n };\n}\n\n/**\n * Compare two semver strings. Returns:\n * -1 if a < b, 0 if equal, 1 if a > b, null if either is unparseable.\n * Prerelease versions are considered older than the same version without prerelease.\n */\nexport function compareSemver(a: string | null, b: string | null): number | null {\n if (!a || !b) return null;\n const parsedA = parseSemverParts(a);\n const parsedB = parseSemverParts(b);\n if (!parsedA || !parsedB) return null;\n\n for (const field of ['major', 'minor', 'patch'] as const) {\n if (parsedA[field] !== parsedB[field]) {\n return parsedA[field] < parsedB[field] ? -1 : 1;\n }\n }\n\n // Both have same major.minor.patch — compare prerelease\n if (parsedA.prerelease === null && parsedB.prerelease === null) return 0;\n if (parsedA.prerelease !== null && parsedB.prerelease === null) return -1; // pre < release\n if (parsedA.prerelease === null && parsedB.prerelease !== null) return 1;\n\n return comparePrereleaseIdentifiers(parsedA.prerelease!, parsedB.prerelease!);\n}\n\n/**\n * Compare prerelease strings per semver 2.0 §11.\n */\nfunction comparePrereleaseIdentifiers(a: string, b: string): number {\n const partsA = a.split('.');\n const partsB = b.split('.');\n const length = Math.min(partsA.length, partsB.length);\n\n for (let i = 0; i < length; i++) {\n const segA = partsA[i]!;\n const segB = partsB[i]!;\n if (segA === segB) continue;\n\n const numA = /^\\d+$/.test(segA) ? parseInt(segA, 10) : null;\n const numB = /^\\d+$/.test(segB) ? parseInt(segB, 10) : null;\n\n if (numA !== null && numB !== null) {\n return numA < numB ? -1 : 1;\n }\n if (numA !== null && numB === null) return -1;\n if (numA === null && numB !== null) return 1;\n return segA < segB ? -1 : 1;\n }\n\n if (partsA.length !== partsB.length) {\n return partsA.length < partsB.length ? -1 : 1;\n }\n return 0;\n}\n\n// --- Install kind detection ---\n\n/**\n * Detect whether the current process is running from a git checkout or npm-installed package.\n * Checks for `.git` directory in the package root.\n */\nexport async function detectInstallKind(packageRoot: string): Promise<InstallKind> {\n try {\n await access(join(packageRoot, '.git'));\n return 'git';\n } catch {\n // No .git directory — likely installed via npm\n try {\n await access(join(packageRoot, 'package.json'));\n return 'package';\n } catch {\n return 'unknown';\n }\n }\n}\n\n/**\n * Resolve the xopc package root directory.\n * Walks up from this file to find package.json with name @xopcai/xopc.\n */\nexport async function resolvePackageRoot(): Promise<string | null> {\n let current = dirname(fileURLToPath(import.meta.url));\n for (let depth = 0; depth < 20; depth++) {\n const pkgPath = join(current, 'package.json');\n try {\n const raw = await readFile(pkgPath, 'utf-8');\n const parsed = JSON.parse(raw) as { name?: unknown };\n if (typeof parsed.name === 'string' && parsed.name === PACKAGE_NAME) {\n return current;\n }\n } catch {\n // continue\n }\n const parent = dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n return null;\n}\n\n/** Get the current running version from package.json. */\nexport function getCurrentVersion(): string {\n return PACKAGE_VERSION;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-global.js","names":["fs","fsSync"],"sources":["../../../src/infra/update-global.ts"],"sourcesContent":["// src/infra/update-global.ts — global npm/pnpm install detection and commands (OpenClaw-aligned)\n\nimport fsSync from 'node:fs';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nimport { applyPathPrepend } from './path-prepend.js';\nimport { resolveExecPathBinPrepend } from './path-env.js';\nimport { readPackageVersion } from './package-json.js';\nimport { createDefaultCommandRunner, type CommandRunner } from './run-command.js';\n\nexport const XOPC_PACKAGE_NAME = '@xopcai/xopc';\n\nexport type GlobalInstallManager = 'npm' | 'pnpm';\n\nexport type ResolvedGlobalInstallCommand = {\n manager: GlobalInstallManager;\n command: string;\n};\n\nexport type ResolvedGlobalInstallTarget = ResolvedGlobalInstallCommand & {\n globalRoot: string | null;\n packageRoot: string | null;\n};\n\nexport type NpmGlobalPrefixLayout = {\n prefix: string;\n globalRoot: string;\n binDir: string;\n};\n\nconst GLOBAL_RENAME_PREFIX = '.';\nconst COREPACK_ENABLE_DOWNLOAD_PROMPT_DEFAULT = '0';\nconst NPM_GLOBAL_INSTALL_QUIET_FLAGS = ['--no-fund', '--no-audit', '--loglevel=error'] as const;\nconst NPM_GLOBAL_INSTALL_OMIT_OPTIONAL_FLAGS = [\n '--omit=optional',\n ...NPM_GLOBAL_INSTALL_QUIET_FLAGS,\n] as const;\n\nconst GLOBAL_DETECT_TIMEOUT_MS = 15_000;\n\nasync function pathExists(targetPath: string): Promise<boolean> {\n try {\n await fs.access(targetPath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function tryRealpath(targetPath: string): Promise<string> {\n try {\n return await fs.realpath(targetPath);\n } catch {\n return path.resolve(targetPath);\n }\n}\n\nexport function joinGlobalPackagePath(globalRoot: string): string {\n return path.join(globalRoot, XOPC_PACKAGE_NAME);\n}\n\nfunction inferNpmPrefixFromPackageRoot(pkgRoot?: string | null): string | null {\n const trimmed = pkgRoot?.trim();\n if (!trimmed) return null;\n const normalized = path.resolve(trimmed);\n const nodeModulesDir = path.dirname(normalized);\n if (path.basename(nodeModulesDir) !== 'node_modules') return null;\n const parentDir = path.dirname(nodeModulesDir);\n if (path.basename(parentDir) === 'lib') {\n return path.dirname(parentDir);\n }\n if (process.platform === 'win32' && path.basename(parentDir).toLowerCase() === 'npm') {\n return parentDir;\n }\n return null;\n}\n\nfunction resolvePreferredNpmCommand(pkgRoot?: string | null): string | null {\n const prefix = inferNpmPrefixFromPackageRoot(pkgRoot);\n if (!prefix) return null;\n const candidate =\n process.platform === 'win32' ? path.join(prefix, 'npm.cmd') : path.join(prefix, 'bin', 'npm');\n return fsSync.existsSync(candidate) ? candidate : null;\n}\n\nfunction resolveNpmFromExecPath(): string | null {\n const execPath = process.execPath?.trim();\n if (!execPath) return null;\n const binDir = path.dirname(execPath);\n const candidate =\n process.platform === 'win32' ? path.join(binDir, 'npm.cmd') : path.join(binDir, 'npm');\n return fsSync.existsSync(candidate) ? candidate : null;\n}\n\nfunction resolvePreferredGlobalManagerCommand(\n manager: GlobalInstallManager,\n pkgRoot?: string | null,\n): string {\n if (manager !== 'npm') return manager;\n return resolvePreferredNpmCommand(pkgRoot) ?? resolveNpmFromExecPath() ?? manager;\n}\n\nexport function resolveGlobalInstallCommand(\n manager: GlobalInstallManager,\n pkgRoot?: string | null,\n): ResolvedGlobalInstallCommand {\n return {\n manager,\n command: resolvePreferredGlobalManagerCommand(manager, pkgRoot),\n };\n}\n\nfunction normalizeGlobalInstallCommand(\n managerOrCommand: GlobalInstallManager | ResolvedGlobalInstallCommand,\n pkgRoot?: string | null,\n): ResolvedGlobalInstallCommand {\n return typeof managerOrCommand === 'string'\n ? resolveGlobalInstallCommand(managerOrCommand, pkgRoot)\n : managerOrCommand;\n}\n\nexport function resolveNpmGlobalPrefixLayoutFromGlobalRoot(\n globalRoot?: string | null,\n): NpmGlobalPrefixLayout | null {\n const trimmed = globalRoot?.trim();\n if (!trimmed) return null;\n const normalized = path.resolve(trimmed);\n if (path.basename(normalized) !== 'node_modules') return null;\n const parentDir = path.dirname(normalized);\n if (path.basename(parentDir) === 'lib') {\n const prefix = path.dirname(parentDir);\n return {\n prefix,\n globalRoot: normalized,\n binDir: path.join(prefix, 'bin'),\n };\n }\n if (process.platform === 'win32') {\n return {\n prefix: parentDir,\n globalRoot: normalized,\n binDir: parentDir,\n };\n }\n return null;\n}\n\nexport function resolveNpmGlobalPrefixLayoutFromPrefix(prefix: string): NpmGlobalPrefixLayout {\n const resolvedPrefix = path.resolve(prefix);\n if (process.platform === 'win32') {\n return {\n prefix: resolvedPrefix,\n globalRoot: path.join(resolvedPrefix, 'node_modules'),\n binDir: resolvedPrefix,\n };\n }\n return {\n prefix: resolvedPrefix,\n globalRoot: path.join(resolvedPrefix, 'lib', 'node_modules'),\n binDir: path.join(resolvedPrefix, 'bin'),\n };\n}\n\nfunction applyWindowsPackageInstallEnv(env: Record<string, string>): void {\n if (process.platform !== 'win32') return;\n env.NPM_CONFIG_UPDATE_NOTIFIER = 'false';\n env.NPM_CONFIG_FUND = 'false';\n env.NPM_CONFIG_AUDIT = 'false';\n}\n\nfunction applyCorepackDownloadPromptEnv(env: Record<string, string>): void {\n if (!env.COREPACK_ENABLE_DOWNLOAD_PROMPT?.trim()) {\n env.COREPACK_ENABLE_DOWNLOAD_PROMPT = COREPACK_ENABLE_DOWNLOAD_PROMPT_DEFAULT;\n }\n}\n\nexport async function createGlobalInstallEnv(\n env?: NodeJS.ProcessEnv,\n): Promise<NodeJS.ProcessEnv | undefined> {\n const pathPrepend = resolveExecPathBinPrepend();\n const sourceEnv = env ?? process.env;\n const hasCorepack = Boolean(sourceEnv.COREPACK_ENABLE_DOWNLOAD_PROMPT?.trim());\n if (process.platform !== 'win32' && hasCorepack && pathPrepend.length === 0) {\n return env;\n }\n const merged = Object.fromEntries(\n Object.entries(sourceEnv)\n .filter(([, value]) => value != null)\n .map(([key, value]) => [key, String(value)]),\n ) as Record<string, string>;\n applyPathPrepend(merged, pathPrepend);\n applyWindowsPackageInstallEnv(merged);\n applyCorepackDownloadPromptEnv(merged);\n return merged;\n}\n\nexport function resolveGlobalInstallSpec(params: {\n version: string;\n env?: NodeJS.ProcessEnv;\n}): string {\n const override =\n params.env?.XOPC_UPDATE_PACKAGE_SPEC?.trim() || process.env.XOPC_UPDATE_PACKAGE_SPEC?.trim();\n if (override) return override;\n return `${XOPC_PACKAGE_NAME}@${params.version}`;\n}\n\nexport function resolveExpectedInstalledVersionFromSpec(spec: string): string | null {\n const normalized = spec.trim();\n if (!normalized.startsWith(`${XOPC_PACKAGE_NAME}@`)) return null;\n const rawVersion = normalized.slice(XOPC_PACKAGE_NAME.length + 1).trim();\n if (\n !rawVersion ||\n rawVersion.includes('/') ||\n rawVersion.includes(':') ||\n rawVersion.includes('#') ||\n /^(latest|beta|next|dev)$/i.test(rawVersion)\n ) {\n return null;\n }\n return rawVersion;\n}\n\nexport async function collectInstalledGlobalPackageErrors(params: {\n packageRoot: string;\n expectedVersion?: string | null;\n}): Promise<string[]> {\n const errors: string[] = [];\n const installedVersion = await readPackageVersion(params.packageRoot);\n if (params.expectedVersion && installedVersion !== params.expectedVersion) {\n errors.push(\n `expected installed version ${params.expectedVersion}, found ${installedVersion ?? '<missing>'}`,\n );\n }\n if (!installedVersion) {\n errors.push('missing package.json version');\n }\n return errors;\n}\n\nexport async function resolveGlobalRoot(\n managerOrCommand: GlobalInstallManager | ResolvedGlobalInstallCommand,\n runCommand: CommandRunner,\n timeoutMs: number,\n pkgRoot?: string | null,\n): Promise<string | null> {\n const resolved = normalizeGlobalInstallCommand(managerOrCommand, pkgRoot);\n const argv = [resolved.command, 'root', '-g'];\n const res = await runCommand(argv, { timeoutMs }).catch(() => null);\n if (!res || res.code !== 0) return null;\n const root = res.stdout.trim();\n return root || null;\n}\n\nexport async function resolveGlobalPackageRoot(\n managerOrCommand: GlobalInstallManager | ResolvedGlobalInstallCommand,\n runCommand: CommandRunner,\n timeoutMs: number,\n pkgRoot?: string | null,\n): Promise<string | null> {\n const root = await resolveGlobalRoot(managerOrCommand, runCommand, timeoutMs, pkgRoot);\n if (!root) return null;\n return joinGlobalPackagePath(root);\n}\n\nexport async function resolveGlobalInstallTarget(params: {\n manager: GlobalInstallManager | ResolvedGlobalInstallCommand;\n runCommand: CommandRunner;\n timeoutMs: number;\n pkgRoot?: string | null;\n}): Promise<ResolvedGlobalInstallTarget> {\n const command = normalizeGlobalInstallCommand(params.manager, params.pkgRoot);\n const globalRoot = await resolveGlobalRoot(\n command,\n params.runCommand,\n params.timeoutMs,\n params.pkgRoot,\n );\n return {\n ...command,\n globalRoot,\n packageRoot: globalRoot ? joinGlobalPackagePath(globalRoot) : null,\n };\n}\n\nexport function globalInstallArgs(\n managerOrCommand: GlobalInstallManager | ResolvedGlobalInstallCommand,\n spec: string,\n pkgRoot?: string | null,\n installPrefix?: string | null,\n): string[] {\n const resolved = normalizeGlobalInstallCommand(managerOrCommand, pkgRoot);\n if (resolved.manager === 'pnpm') {\n return [resolved.command, 'add', '-g', spec];\n }\n return [\n resolved.command,\n 'install',\n '-g',\n ...(installPrefix ? ['--prefix', installPrefix] : []),\n spec,\n ...NPM_GLOBAL_INSTALL_QUIET_FLAGS,\n ];\n}\n\nexport function globalInstallFallbackArgs(\n managerOrCommand: GlobalInstallManager | ResolvedGlobalInstallCommand,\n spec: string,\n pkgRoot?: string | null,\n installPrefix?: string | null,\n): string[] | null {\n const resolved = normalizeGlobalInstallCommand(managerOrCommand, pkgRoot);\n if (resolved.manager !== 'npm') return null;\n return [\n resolved.command,\n 'install',\n '-g',\n ...(installPrefix ? ['--prefix', installPrefix] : []),\n spec,\n ...NPM_GLOBAL_INSTALL_OMIT_OPTIONAL_FLAGS,\n ];\n}\n\nexport async function cleanupGlobalRenameDirs(params: {\n globalRoot: string;\n packageName: string;\n}): Promise<{ removed: string[] }> {\n const removed: string[] = [];\n const root = params.globalRoot.trim();\n const name = params.packageName.trim();\n if (!root || !name) return { removed };\n const prefix = `${GLOBAL_RENAME_PREFIX}${name}-`;\n let entries: string[] = [];\n try {\n entries = await fs.readdir(root);\n } catch {\n return { removed };\n }\n for (const entry of entries) {\n if (!entry.startsWith(prefix)) continue;\n const target = path.join(root, entry);\n try {\n const stat = await fs.lstat(target);\n if (!stat.isDirectory()) continue;\n await fs.rm(target, { recursive: true, force: true });\n removed.push(entry);\n } catch {\n // ignore\n }\n }\n return { removed };\n}\n\nexport async function detectGlobalInstallManagerForRoot(\n runCommand: CommandRunner,\n pkgRoot: string,\n timeoutMs: number,\n): Promise<GlobalInstallManager | null> {\n const pkgReal = await tryRealpath(pkgRoot);\n const npmCommand = resolvePreferredGlobalManagerCommand('npm', pkgRoot);\n const candidates: Array<{ manager: GlobalInstallManager; argv: string[] }> = [\n { manager: 'npm', argv: [npmCommand, 'root', '-g'] },\n { manager: 'pnpm', argv: ['pnpm', 'root', '-g'] },\n ];\n\n for (const { manager, argv } of candidates) {\n const res = await runCommand(argv, { timeoutMs }).catch(() => null);\n if (!res || res.code !== 0) continue;\n const globalRoot = res.stdout.trim();\n if (!globalRoot) continue;\n const globalReal = await tryRealpath(globalRoot);\n const expected = joinGlobalPackagePath(globalReal);\n const expectedReal = await tryRealpath(expected);\n if (path.resolve(expectedReal) === path.resolve(pkgReal)) {\n return manager;\n }\n }\n\n if (resolvePreferredNpmCommand(pkgRoot) || resolveNpmFromExecPath()) {\n return 'npm';\n }\n\n return null;\n}\n\nexport async function detectGlobalInstallManagerByPresence(\n runCommand: CommandRunner,\n timeoutMs: number,\n): Promise<GlobalInstallManager | null> {\n for (const manager of ['npm', 'pnpm'] as const) {\n const root = await resolveGlobalRoot(manager, runCommand, timeoutMs);\n if (!root) continue;\n if (await pathExists(joinGlobalPackagePath(root))) {\n return manager;\n }\n }\n return null;\n}\n\nexport async function resolveGlobalManager(params: {\n root: string | null;\n timeoutMs?: number;\n}): Promise<GlobalInstallManager> {\n const runCommand = createDefaultCommandRunner();\n const timeoutMs = params.timeoutMs ?? GLOBAL_DETECT_TIMEOUT_MS;\n\n if (params.root) {\n const detected = await detectGlobalInstallManagerForRoot(runCommand, params.root, timeoutMs);\n if (detected) return detected;\n }\n\n const byPresence = await detectGlobalInstallManagerByPresence(runCommand, timeoutMs);\n return byPresence ?? 'npm';\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-lock.js","names":[],"sources":["../../../src/infra/update-lock.ts"],"sourcesContent":["// src/infra/update-lock.ts\n\nimport { mkdir, readFile, unlink } from 'node:fs/promises';\nimport { writeTextAtomic } from './write-file-atomic.js';\nimport { dirname } from 'node:path';\n\nimport { resolveUpdateLockPath } from '../config/paths-state.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('UpdateLock');\n\nconst STALE_THRESHOLD_MS = 60 * 60 * 1000; // 1 hour\n\ntype LockInfo = {\n pid: number;\n startedAt: string;\n source: 'gateway' | 'cli' | 'auto';\n};\n\nfunction resolveLockPath(): string {\n return resolveUpdateLockPath();\n}\n\nfunction isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Attempt to acquire the update lock. Returns a release function on success, or null if\n * another live process holds the lock.\n */\nexport async function acquireUpdateLock(\n source: LockInfo['source'],\n): Promise<{ release: () => Promise<void> } | null> {\n const lockPath = resolveLockPath();\n\n try {\n const raw = await readFile(lockPath, 'utf-8');\n const existing = JSON.parse(raw) as LockInfo;\n const startedAt = Date.parse(existing.startedAt);\n const age = Date.now() - startedAt;\n\n if (isProcessAlive(existing.pid) && age < STALE_THRESHOLD_MS) {\n log.info(\n { existingPid: existing.pid, source: existing.source, ageMs: age },\n 'Update lock held by another live process',\n );\n return null;\n }\n\n log.warn(\n { existingPid: existing.pid, source: existing.source, ageMs: age },\n 'Reclaiming stale update lock',\n );\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\n log.warn({ err }, 'Failed to read update lock; proceeding');\n }\n }\n\n const info: LockInfo = {\n pid: process.pid,\n startedAt: new Date().toISOString(),\n source,\n };\n\n await mkdir(dirname(lockPath), { recursive: true });\n await writeTextAtomic(lockPath, JSON.stringify(info, null, 2));\n\n const release = async () => {\n try {\n const raw = await readFile(lockPath, 'utf-8');\n const current = JSON.parse(raw) as LockInfo;\n if (current.pid === process.pid) {\n await unlink(lockPath);\n }\n } catch {\n // Lock already released or stolen — fine\n }\n };\n\n return { release };\n}\n"],"mappings":";;;;;;;wBAGyD;kBAGQ;aACf;AAElD,MAAM,MAAM,aAAa,aAAa;AAEtC,MAAM,qBAAqB,OAAU;AAQrC,SAAS,kBAA0B;AACjC,QAAO,uBAAuB;;AAGhC,SAAS,eAAe,KAAsB;AAC5C,KAAI;AACF,UAAQ,KAAK,KAAK,EAAE;AACpB,SAAO;SACD;AACN,SAAO;;;;;;;AAQX,eAAsB,kBACpB,QACkD;CAClD,MAAM,WAAW,iBAAiB;AAElC,KAAI;EACF,MAAM,MAAM,MAAM,SAAS,UAAU,QAAQ;EAC7C,MAAM,WAAW,KAAK,MAAM,IAAI;EAChC,MAAM,YAAY,KAAK,MAAM,SAAS,UAAU;EAChD,MAAM,MAAM,KAAK,KAAK,GAAG;AAEzB,MAAI,eAAe,SAAS,IAAI,IAAI,MAAM,oBAAoB;AAC5D,OAAI,KACF;IAAE,aAAa,SAAS;IAAK,QAAQ,SAAS;IAAQ,OAAO;IAAK,EAClE,2CACD;AACD,UAAO;;AAGT,MAAI,KACF;GAAE,aAAa,SAAS;GAAK,QAAQ,SAAS;GAAQ,OAAO;GAAK,EAClE,+BACD;UACM,KAAK;AACZ,MAAK,IAA8B,SAAS,SAC1C,KAAI,KAAK,EAAE,KAAK,EAAE,yCAAyC;;CAI/D,MAAM,OAAiB;EACrB,KAAK,QAAQ;EACb,4BAAW,IAAI,MAAM,EAAC,aAAa;EACnC;EACD;AAED,OAAM,MAAM,QAAQ,SAAS,EAAE,EAAE,WAAW,MAAM,CAAC;AACnD,OAAM,gBAAgB,UAAU,KAAK,UAAU,MAAM,MAAM,EAAE,CAAC;CAE9D,MAAM,UAAU,YAAY;AAC1B,MAAI;GACF,MAAM,MAAM,MAAM,SAAS,UAAU,QAAQ;AAE7C,OADgB,KAAK,MAAM,IAChB,CAAC,QAAQ,QAAQ,IAC1B,OAAM,OAAO,SAAS;UAElB;;AAKV,QAAO,EAAE,SAAS"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-log.js","names":[],"sources":["../../../src/infra/update-log.ts"],"sourcesContent":["export function trimLogTail(text: string | null | undefined, maxChars: number): string | null {\n if (!text) return null;\n const trimmed = text.trim();\n if (!trimmed) return null;\n if (trimmed.length <= maxChars) return trimmed;\n return trimmed.slice(-maxChars);\n}\n"],"mappings":";AAAA,SAAgB,YAAY,MAAiC,UAAiC;AAC5F,KAAI,CAAC,KAAM,QAAO;CAClB,MAAM,UAAU,KAAK,MAAM;AAC3B,KAAI,CAAC,QAAS,QAAO;AACrB,KAAI,QAAQ,UAAU,SAAU,QAAO;AACvC,QAAO,QAAQ,MAAM,CAAC,SAAS"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-restart.js","names":[],"sources":["../../../src/infra/update-restart.ts"],"sourcesContent":["/**\n * Gateway restart after xopc update — daemon, unmanaged, or in-process respawn.\n */\n\nimport { loadConfig } from '../config/loader.js';\nimport { resolveConfigPath } from '../config/paths.js';\nimport { isRestartEnabled } from '../config/commands.flags.js';\nimport { resolveGatewayService } from '../daemon/service.js';\nimport type { GatewayService } from '../daemon/types.js';\nimport {\n findVerifiedGatewayListenerPidsOnPortSync,\n signalVerifiedGatewayPidSync,\n} from './gateway-processes.js';\nimport { authorizeGatewaySigusr1Restart, writeGatewayRestartIntentSync } from './restart.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('UpdateRestart');\n\nconst DEFAULT_HEALTH_ATTEMPTS = 120;\nconst DEFAULT_HEALTH_DELAY_MS = 500;\n\nexport type UpdateRestartResult = {\n ok: boolean;\n mode: 'in-process' | 'daemon' | 'unmanaged' | 'skipped' | 'disabled' | 'failed';\n message?: string;\n};\n\nexport type InProcessRestartTrigger = () => { ok: boolean; mode?: string; message?: string };\n\nexport function isRunningInsideGatewayService(\n env: Record<string, string | undefined> = process.env,\n): boolean {\n return env.XOPC_SERVICE_MARKER?.trim() === '1';\n}\n\nfunction resolveGatewayPort(configPath?: string): number {\n const config = loadConfig(configPath ?? resolveConfigPath());\n return typeof config.gateway?.port === 'number' ? config.gateway.port : 18790;\n}\n\nfunction parsePortFromArgs(programArguments: string[] | undefined): number | null {\n if (!programArguments?.length) {\n return null;\n }\n for (let i = 0; i < programArguments.length; i += 1) {\n const arg = programArguments[i];\n if (arg === '--port') {\n const parsed = parseInt(String(programArguments[i + 1]), 10);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n if (arg?.startsWith('--port=')) {\n const parsed = parseInt(arg.split('=', 2)[1] ?? '', 10);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n }\n return null;\n}\n\nasync function resolveRestartPort(service: GatewayService): Promise<number> {\n const command = await service.readCommand(process.env).catch(() => null);\n return parsePortFromArgs(command?.programArguments) ?? resolveGatewayPort();\n}\n\nasync function waitForGatewayHealth(port: number, expectedVersion?: string): Promise<boolean> {\n for (let attempt = 0; attempt < DEFAULT_HEALTH_ATTEMPTS; attempt += 1) {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 1500);\n const response = await fetch(`http://127.0.0.1:${port}/api/health`, {\n method: 'GET',\n signal: controller.signal,\n });\n clearTimeout(timeout);\n if (!response.ok) {\n await new Promise((r) => setTimeout(r, DEFAULT_HEALTH_DELAY_MS));\n continue;\n }\n if (expectedVersion) {\n const body = (await response.json()) as { version?: string };\n if (body.version && body.version !== expectedVersion) {\n await new Promise((r) => setTimeout(r, DEFAULT_HEALTH_DELAY_MS));\n continue;\n }\n }\n return true;\n } catch {\n await new Promise((r) => setTimeout(r, DEFAULT_HEALTH_DELAY_MS));\n }\n }\n return false;\n}\n\nasync function restartUnmanagedGateway(port: number, configPath?: string): Promise<UpdateRestartResult> {\n const config = loadConfig(configPath ?? resolveConfigPath());\n if (!isRestartEnabled(config)) {\n return {\n ok: false,\n mode: 'disabled',\n message:\n 'Gateway restart is disabled in config (commands.restart=false). Restart manually: xopc gateway restart',\n };\n }\n\n const pids = findVerifiedGatewayListenerPidsOnPortSync(port).filter(\n (pid): pid is number => Number.isFinite(pid) && pid > 0,\n );\n if (pids.length === 0) {\n return {\n ok: false,\n mode: 'failed',\n message: `No gateway listener found on port ${port}.`,\n };\n }\n if (pids.length > 1) {\n return {\n ok: false,\n mode: 'failed',\n message: `Multiple gateway processes on port ${port}; use \"xopc gateway status\" before retrying.`,\n };\n }\n\n const targetPid = pids[0];\n if (process.platform === 'win32') {\n writeGatewayRestartIntentSync({ targetPid });\n signalVerifiedGatewayPidSync(targetPid, 'SIGTERM');\n } else {\n authorizeGatewaySigusr1Restart();\n signalVerifiedGatewayPidSync(targetPid, 'SIGUSR1');\n }\n\n return {\n ok: true,\n mode: 'unmanaged',\n message: `Gateway restart signal sent to process ${targetPid} on port ${port}.`,\n };\n}\n\nasync function restartDaemonGateway(\n service: GatewayService,\n port: number,\n expectedVersion?: string,\n): Promise<UpdateRestartResult> {\n try {\n const loaded = await service.isLoaded({ env: process.env });\n if (!loaded) {\n return restartUnmanagedGateway(port);\n }\n await service.restart({ env: process.env, stdout: process.stdout });\n const healthy = await waitForGatewayHealth(port, expectedVersion);\n if (!healthy) {\n log.warn({ port, expectedVersion }, 'Gateway restart completed but health check timed out');\n return {\n ok: true,\n mode: 'daemon',\n message: 'Gateway service restarted; health check timed out (gateway may still be starting).',\n };\n }\n return {\n ok: true,\n mode: 'daemon',\n message: 'Gateway service restarted successfully.',\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n log.warn({ err, port }, `Daemon restart failed: ${message}`);\n return { ok: false, mode: 'failed', message };\n }\n}\n\nexport async function maybeRestartGatewayAfterUpdate(params: {\n shouldRestart?: boolean;\n expectedVersion?: string;\n configPath?: string;\n triggerInProcessRestart?: InProcessRestartTrigger;\n}): Promise<UpdateRestartResult> {\n if (params.shouldRestart === false) {\n return { ok: true, mode: 'skipped', message: 'Restart skipped (--no-restart).' };\n }\n\n const config = loadConfig(params.configPath ?? resolveConfigPath());\n if (!isRestartEnabled(config)) {\n return {\n ok: false,\n mode: 'disabled',\n message:\n 'Gateway restart is disabled (commands.restart=false). Restart manually: xopc gateway restart',\n };\n }\n\n if (isRunningInsideGatewayService() && params.triggerInProcessRestart) {\n const result = params.triggerInProcessRestart();\n if (!result.ok) {\n return {\n ok: false,\n mode: 'failed',\n message: result.message ?? 'In-process gateway restart failed.',\n };\n }\n log.info({ mode: result.mode }, 'Scheduled in-process gateway restart after update');\n return {\n ok: true,\n mode: 'in-process',\n message: result.message ?? 'Gateway restart scheduled.',\n };\n }\n\n const service = await resolveGatewayService();\n const port = await resolveRestartPort(service);\n return restartDaemonGateway(service, port, params.expectedVersion);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-runner.js","names":[],"sources":["../../../src/infra/update-runner.ts"],"sourcesContent":["// src/infra/update-runner.ts — unified gateway/CLI update runner (OpenClaw-aligned)\n\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nimport { readPackageName, readPackageVersion } from './package-json.js';\nimport { runGlobalPackageUpdateSteps, type PackageUpdateStepResult } from './package-update-steps.js';\nimport { createDefaultCommandRunner, runCommandWithTimeout } from './run-command.js';\nimport { resolveStableNodePath } from './stable-node-path.js';\nimport { trimLogTail } from './update-log.js';\nimport { DEFAULT_PACKAGE_CHANNEL, type UpdateChannel } from './update-channels.js';\nimport { compareSemver, resolveNpmChannelTag } from './update-check.js';\nimport { runPostUpdateExtensionSync, type ExtensionPostUpdateResult } from '../extensions/update.js';\nimport {\n cleanupGlobalRenameDirs,\n createGlobalInstallEnv,\n detectGlobalInstallManagerForRoot,\n resolveGlobalInstallSpec,\n resolveGlobalInstallTarget,\n XOPC_PACKAGE_NAME,\n type GlobalInstallManager,\n} from './update-global.js';\nimport {\n maybeRestartGatewayAfterUpdate,\n type InProcessRestartTrigger,\n type UpdateRestartResult,\n} from './update-restart.js';\n\nconst DEFAULT_TIMEOUT_MS = 45 * 60 * 1000;\nconst MAX_LOG_CHARS = 8000;\nconst CORE_PACKAGE_NAMES = new Set([XOPC_PACKAGE_NAME]);\n\nexport type UpdateStepResult = {\n name: string;\n command: string;\n cwd: string;\n durationMs: number;\n exitCode: number | null;\n stdoutTail?: string | null;\n stderrTail?: string | null;\n};\n\nexport type UpdatePostUpdateResult = {\n extensions?: ExtensionPostUpdateResult;\n restart?: UpdateRestartResult;\n};\n\nexport type UpdateRunResult = {\n status: 'ok' | 'error' | 'skipped';\n mode: 'git' | 'pnpm' | 'npm' | 'unknown';\n root?: string;\n reason?: string;\n before?: { sha?: string | null; version?: string | null };\n after?: { sha?: string | null; version?: string | null };\n steps: UpdateStepResult[];\n durationMs: number;\n postUpdate?: UpdatePostUpdateResult;\n};\n\nexport type UpdateStepInfo = {\n name: string;\n command: string;\n index: number;\n total: number;\n};\n\nexport type UpdateStepCompletion = UpdateStepInfo & {\n durationMs: number;\n exitCode: number | null;\n stderrTail?: string | null;\n};\n\nexport type UpdateStepProgress = {\n onStepStart?: (step: UpdateStepInfo) => void;\n onStepComplete?: (step: UpdateStepCompletion) => void;\n};\n\nexport type UpdateInstallSurface =\n | { kind: 'git'; mode: 'git'; root: string; packageRoot: string }\n | { kind: 'global'; mode: GlobalInstallManager; root: string; packageRoot: string }\n | { kind: 'package-root'; mode: 'unknown'; root: string; packageRoot: string }\n | { kind: 'missing'; mode: 'unknown'; root?: string; packageRoot?: undefined };\n\ntype UpdateRunnerOptions = {\n cwd?: string;\n argv1?: string;\n channel?: UpdateChannel;\n timeoutMs?: number;\n progress?: UpdateStepProgress;\n skipExtensionSync?: boolean;\n shouldRestart?: boolean;\n triggerInProcessRestart?: InProcessRestartTrigger;\n};\n\ntype CommandRunner = (\n argv: string[],\n options: { timeoutMs: number; cwd?: string; env?: NodeJS.ProcessEnv },\n) => Promise<{ stdout: string; stderr: string; code: number | null }>;\n\nfunction normalizeDir(value?: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim();\n return trimmed ? path.resolve(trimmed) : null;\n}\n\nfunction resolveNodeModulesBinPackageRoot(argv1: string): string | null {\n const normalized = path.resolve(argv1);\n const parts = normalized.split(path.sep);\n const binIndex = parts.lastIndexOf('.bin');\n if (binIndex <= 0 || parts[binIndex - 1] !== 'node_modules') return null;\n return path.join(parts.slice(0, binIndex).join(path.sep), path.basename(normalized));\n}\n\nfunction buildStartDirs(opts: UpdateRunnerOptions): string[] {\n const dirs: string[] = [];\n const cwd = normalizeDir(opts.cwd);\n if (cwd) dirs.push(cwd);\n const argv1 = normalizeDir(opts.argv1);\n if (argv1) {\n dirs.push(path.dirname(argv1));\n const packageRoot = resolveNodeModulesBinPackageRoot(argv1);\n if (packageRoot) dirs.push(packageRoot);\n }\n const proc = normalizeDir(process.cwd());\n if (proc) dirs.push(proc);\n return Array.from(new Set(dirs));\n}\n\nasync function resolveComparablePath(target: string): Promise<string> {\n return fs.realpath(target).catch(() => path.resolve(target));\n}\n\nasync function pathsReferToSameLocation(left: string, right: string): Promise<boolean> {\n return (await resolveComparablePath(left)) === (await resolveComparablePath(right));\n}\n\nasync function looksLikeGitCheckout(root: string): Promise<boolean> {\n try {\n await fs.access(path.join(root, '.git'));\n return true;\n } catch {\n return false;\n }\n}\n\nasync function resolveGitRoot(\n runCommand: CommandRunner,\n candidates: string[],\n timeoutMs: number,\n): Promise<string | null> {\n for (const dir of candidates) {\n const res = await runCommand(['git', '-C', dir, 'rev-parse', '--show-toplevel'], {\n timeoutMs,\n }).catch(() => null);\n if (!res || res.code !== 0) continue;\n const root = res.stdout.trim();\n if (root) return root;\n }\n return null;\n}\n\nasync function findPackageRoot(candidates: string[]): Promise<string | null> {\n for (const dir of candidates) {\n let current = dir;\n for (let i = 0; i < 12; i += 1) {\n const pkgPath = path.join(current, 'package.json');\n try {\n const raw = await fs.readFile(pkgPath, 'utf-8');\n const parsed = JSON.parse(raw) as { name?: string };\n const name = parsed?.name?.trim();\n if (name && CORE_PACKAGE_NAMES.has(name)) return current;\n } catch {\n // ignore\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n }\n return null;\n}\n\nfunction mergeCommandEnvironments(\n baseEnv: NodeJS.ProcessEnv | undefined,\n overrideEnv: NodeJS.ProcessEnv | undefined,\n): NodeJS.ProcessEnv | undefined {\n if (!baseEnv) return overrideEnv;\n if (!overrideEnv) return baseEnv;\n return { ...baseEnv, ...overrideEnv };\n}\n\nasync function buildUpdateCommandRunner(): Promise<{\n defaultCommandEnv: NodeJS.ProcessEnv | undefined;\n runCommand: CommandRunner;\n}> {\n const defaultCommandEnv = await createGlobalInstallEnv();\n return {\n defaultCommandEnv,\n runCommand: async (argv, options) => {\n const res = await runCommandWithTimeout(argv, {\n ...options,\n env: mergeCommandEnvironments(defaultCommandEnv, options.env),\n });\n return { stdout: res.stdout, stderr: res.stderr, code: res.code };\n },\n };\n}\n\ntype RunStepOptions = {\n runCommand: CommandRunner;\n name: string;\n argv: string[];\n cwd: string;\n timeoutMs: number;\n env?: NodeJS.ProcessEnv;\n progress?: UpdateStepProgress;\n stepIndex: number;\n totalSteps: number;\n};\n\nasync function runStep(opts: RunStepOptions): Promise<UpdateStepResult> {\n const { runCommand, name, argv, cwd, timeoutMs, env, progress, stepIndex, totalSteps } = opts;\n const command = argv.join(' ');\n const stepInfo: UpdateStepInfo = { name, command, index: stepIndex, total: totalSteps };\n progress?.onStepStart?.(stepInfo);\n const started = Date.now();\n const result = await runCommand(argv, { cwd, timeoutMs, env });\n const durationMs = Date.now() - started;\n const stderrTail = trimLogTail(result.stderr, MAX_LOG_CHARS);\n progress?.onStepComplete?.({ ...stepInfo, durationMs, exitCode: result.code, stderrTail });\n return {\n name,\n command,\n cwd,\n durationMs,\n exitCode: result.code,\n stdoutTail: trimLogTail(result.stdout, MAX_LOG_CHARS),\n stderrTail,\n };\n}\n\nfunction toUpdateStepResult(step: PackageUpdateStepResult): UpdateStepResult {\n return {\n name: step.name,\n command: step.command,\n cwd: step.cwd,\n durationMs: step.durationMs,\n exitCode: step.exitCode,\n stdoutTail: step.stdoutTail,\n stderrTail: step.stderrTail,\n };\n}\n\nexport async function resolveUpdateInstallSurface(\n opts: Pick<UpdateRunnerOptions, 'cwd' | 'argv1' | 'timeoutMs'> = {},\n): Promise<UpdateInstallSurface> {\n const { runCommand } = await buildUpdateCommandRunner();\n const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const candidates = buildStartDirs(opts);\n const pkgRoot = await findPackageRoot(candidates);\n\n let gitRoot = await resolveGitRoot(runCommand, candidates, timeoutMs);\n if (gitRoot && pkgRoot && !(await pathsReferToSameLocation(gitRoot, pkgRoot))) {\n gitRoot = null;\n }\n if (gitRoot && !pkgRoot) {\n return { kind: 'missing', mode: 'unknown', root: gitRoot };\n }\n if (gitRoot && pkgRoot && (await pathsReferToSameLocation(gitRoot, pkgRoot))) {\n return { kind: 'git', mode: 'git', root: gitRoot, packageRoot: pkgRoot };\n }\n if (!pkgRoot) {\n return { kind: 'missing', mode: 'unknown' };\n }\n\n const globalManager = await detectGlobalInstallManagerForRoot(runCommand, pkgRoot, timeoutMs);\n if (globalManager) {\n return { kind: 'global', mode: globalManager, root: pkgRoot, packageRoot: pkgRoot };\n }\n\n return { kind: 'package-root', mode: 'unknown', root: pkgRoot, packageRoot: pkgRoot };\n}\n\nasync function runGitUpdate(params: {\n gitRoot: string;\n runCommand: CommandRunner;\n timeoutMs: number;\n progress?: UpdateStepProgress;\n defaultCommandEnv?: NodeJS.ProcessEnv;\n}): Promise<UpdateRunResult> {\n const startedAt = Date.now();\n const steps: UpdateStepResult[] = [];\n const { gitRoot, runCommand, timeoutMs, progress, defaultCommandEnv } = params;\n const totalSteps = 7;\n let stepIndex = 0;\n const step = (name: string, argv: string[], cwd: string, env?: NodeJS.ProcessEnv) =>\n runStep({\n runCommand,\n name,\n argv,\n cwd,\n timeoutMs,\n env,\n progress,\n stepIndex: stepIndex++,\n totalSteps,\n });\n\n const beforeShaResult = await runCommand(['git', '-C', gitRoot, 'rev-parse', 'HEAD'], {\n cwd: gitRoot,\n timeoutMs,\n });\n const beforeSha = beforeShaResult.stdout.trim() || null;\n const beforeVersion = await readPackageVersion(gitRoot);\n\n const statusCheck = await step(\n 'clean check',\n ['git', '-C', gitRoot, 'status', '--porcelain'],\n gitRoot,\n );\n steps.push(statusCheck);\n if (statusCheck.stdoutTail?.trim()) {\n return {\n status: 'skipped',\n mode: 'git',\n root: gitRoot,\n reason: 'dirty',\n before: { sha: beforeSha, version: beforeVersion },\n steps,\n durationMs: Date.now() - startedAt,\n };\n }\n\n const fetchStep = await step(\n 'git fetch',\n ['git', '-C', gitRoot, 'fetch', '--all', '--prune', '--tags'],\n gitRoot,\n );\n steps.push(fetchStep);\n if (fetchStep.exitCode !== 0) {\n return {\n status: 'error',\n mode: 'git',\n root: gitRoot,\n reason: 'fetch-failed',\n before: { sha: beforeSha, version: beforeVersion },\n steps,\n durationMs: Date.now() - startedAt,\n };\n }\n\n const upstreamStep = await step(\n 'upstream check',\n ['git', '-C', gitRoot, 'rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{upstream}'],\n gitRoot,\n );\n steps.push(upstreamStep);\n if (upstreamStep.exitCode !== 0) {\n return {\n status: 'skipped',\n mode: 'git',\n root: gitRoot,\n reason: 'no-upstream',\n before: { sha: beforeSha, version: beforeVersion },\n steps,\n durationMs: Date.now() - startedAt,\n };\n }\n\n const rebaseStep = await step(\n 'git rebase',\n ['git', '-C', gitRoot, 'rebase', '@{upstream}'],\n gitRoot,\n );\n steps.push(rebaseStep);\n if (rebaseStep.exitCode !== 0) {\n return {\n status: 'error',\n mode: 'git',\n root: gitRoot,\n reason: 'rebase-failed',\n before: { sha: beforeSha, version: beforeVersion },\n steps,\n durationMs: Date.now() - startedAt,\n };\n }\n\n const depsStep = await step('deps install', ['pnpm', 'install'], gitRoot, defaultCommandEnv);\n steps.push(depsStep);\n if (depsStep.exitCode !== 0) {\n return {\n status: 'error',\n mode: 'git',\n root: gitRoot,\n reason: 'deps-install-failed',\n before: { sha: beforeSha, version: beforeVersion },\n steps,\n durationMs: Date.now() - startedAt,\n };\n }\n\n const buildStep = await step('build', ['pnpm', 'run', 'build'], gitRoot, defaultCommandEnv);\n steps.push(buildStep);\n if (buildStep.exitCode !== 0) {\n return {\n status: 'error',\n mode: 'git',\n root: gitRoot,\n reason: 'build-failed',\n before: { sha: beforeSha, version: beforeVersion },\n steps,\n durationMs: Date.now() - startedAt,\n };\n }\n\n const doctorEntry = path.join(gitRoot, 'dist/src/cli/bin.js');\n const doctorEntryExists = await fs.stat(doctorEntry).then(() => true).catch(() => false);\n if (doctorEntryExists) {\n const doctorNodePath = await resolveStableNodePath(process.execPath);\n const doctorStep = await step(\n 'xopc doctor',\n [doctorNodePath, doctorEntry, 'doctor', '--fix'],\n gitRoot,\n { ...defaultCommandEnv, XOPC_UPDATE_IN_PROGRESS: '1' },\n );\n steps.push(doctorStep);\n if (doctorStep.exitCode !== 0) {\n return {\n status: 'error',\n mode: 'git',\n root: gitRoot,\n reason: 'doctor-failed',\n before: { sha: beforeSha, version: beforeVersion },\n steps,\n durationMs: Date.now() - startedAt,\n };\n }\n }\n\n const afterShaStep = await step(\n 'git rev-parse HEAD (after)',\n ['git', '-C', gitRoot, 'rev-parse', 'HEAD'],\n gitRoot,\n );\n steps.push(afterShaStep);\n const afterVersion = await readPackageVersion(gitRoot);\n\n return {\n status: 'ok',\n mode: 'git',\n root: gitRoot,\n before: { sha: beforeSha, version: beforeVersion },\n after: { sha: afterShaStep.stdoutTail?.trim() ?? null, version: afterVersion },\n steps,\n durationMs: Date.now() - startedAt,\n };\n}\n\nasync function runGlobalUpdate(params: {\n pkgRoot: string;\n globalManager: GlobalInstallManager;\n channel: UpdateChannel;\n runCommand: CommandRunner;\n timeoutMs: number;\n defaultCommandEnv?: NodeJS.ProcessEnv;\n progress?: UpdateStepProgress;\n}): Promise<UpdateRunResult> {\n const startedAt = Date.now();\n const beforeVersion = await readPackageVersion(params.pkgRoot);\n const resolved = await resolveNpmChannelTag({ channel: params.channel, timeoutMs: 10_000 });\n if (!resolved.version) {\n return {\n status: 'error',\n mode: params.globalManager,\n root: params.pkgRoot,\n reason: 'registry-unreachable',\n before: { version: beforeVersion },\n steps: [],\n durationMs: Date.now() - startedAt,\n };\n }\n\n const comparison = compareSemver(beforeVersion ?? '0.0.0', resolved.version);\n if (comparison !== null && comparison >= 0) {\n return {\n status: 'skipped',\n mode: params.globalManager,\n root: params.pkgRoot,\n reason: 'up-to-date',\n before: { version: beforeVersion },\n after: { version: beforeVersion },\n steps: [],\n durationMs: Date.now() - startedAt,\n };\n }\n\n const installTarget = await resolveGlobalInstallTarget({\n manager: params.globalManager,\n runCommand: params.runCommand,\n timeoutMs: params.timeoutMs,\n pkgRoot: params.pkgRoot,\n });\n const packageName = (await readPackageName(params.pkgRoot)) ?? XOPC_PACKAGE_NAME;\n if (installTarget.globalRoot) {\n await cleanupGlobalRenameDirs({ globalRoot: installTarget.globalRoot, packageName });\n }\n\n const spec = resolveGlobalInstallSpec({\n version: resolved.version,\n env: params.defaultCommandEnv,\n });\n\n let stepIndex = 0;\n const packageUpdate = await runGlobalPackageUpdateSteps({\n installTarget,\n installSpec: spec,\n packageName,\n packageRoot: params.pkgRoot,\n runCommand: params.runCommand,\n timeoutMs: params.timeoutMs,\n ...(params.defaultCommandEnv === undefined ? {} : { env: params.defaultCommandEnv }),\n installCwd: params.pkgRoot,\n runStep: async (stepParams) => {\n const result = await runStep({\n runCommand: params.runCommand,\n name: stepParams.name,\n argv: stepParams.argv,\n cwd: stepParams.cwd ?? params.pkgRoot,\n timeoutMs: stepParams.timeoutMs,\n env: stepParams.env,\n progress: params.progress,\n stepIndex: stepIndex++,\n totalSteps: 3,\n });\n return {\n name: result.name,\n command: result.command,\n cwd: result.cwd,\n durationMs: result.durationMs,\n exitCode: result.exitCode,\n stdoutTail: result.stdoutTail,\n stderrTail: result.stderrTail,\n };\n },\n });\n\n const steps = packageUpdate.steps.map(toUpdateStepResult);\n return {\n status: packageUpdate.failedStep ? 'error' : 'ok',\n mode: params.globalManager,\n root: packageUpdate.verifiedPackageRoot ?? params.pkgRoot,\n reason: packageUpdate.failedStep ? 'global-install-failed' : undefined,\n before: { version: beforeVersion },\n after: { version: packageUpdate.afterVersion },\n steps,\n durationMs: Date.now() - startedAt,\n };\n}\n\nexport async function runGatewayUpdate(opts: UpdateRunnerOptions = {}): Promise<UpdateRunResult> {\n const startedAt = Date.now();\n const { defaultCommandEnv, runCommand } = await buildUpdateCommandRunner();\n const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const channel = opts.channel ?? DEFAULT_PACKAGE_CHANNEL;\n const candidates = buildStartDirs(opts);\n const pkgRoot = await findPackageRoot(candidates);\n\n let gitRoot = await resolveGitRoot(runCommand, candidates, timeoutMs);\n if (!gitRoot && pkgRoot) {\n const cwdRoot = normalizeDir(opts.cwd);\n if (\n cwdRoot &&\n (await pathsReferToSameLocation(cwdRoot, pkgRoot)) &&\n (await looksLikeGitCheckout(cwdRoot))\n ) {\n gitRoot = await resolveComparablePath(cwdRoot);\n }\n }\n if (gitRoot && pkgRoot && !(await pathsReferToSameLocation(gitRoot, pkgRoot))) {\n gitRoot = null;\n }\n\n if (gitRoot && pkgRoot && (await pathsReferToSameLocation(gitRoot, pkgRoot))) {\n return runGitUpdate({\n gitRoot,\n runCommand,\n timeoutMs,\n progress: opts.progress,\n defaultCommandEnv,\n });\n }\n\n if (!pkgRoot) {\n return {\n status: 'error',\n mode: 'unknown',\n reason: 'not-xopc-root',\n steps: [],\n durationMs: Date.now() - startedAt,\n };\n }\n\n const globalManager = await detectGlobalInstallManagerForRoot(runCommand, pkgRoot, timeoutMs);\n if (globalManager) {\n return runGlobalUpdate({\n pkgRoot,\n globalManager,\n channel,\n runCommand,\n timeoutMs,\n defaultCommandEnv,\n progress: opts.progress,\n });\n }\n\n return {\n status: 'skipped',\n mode: 'unknown',\n root: pkgRoot,\n reason: 'not-global-install',\n before: { version: await readPackageVersion(pkgRoot) },\n steps: [],\n durationMs: Date.now() - startedAt,\n };\n}\n\nexport async function runGatewayUpdateWithPostSteps(\n opts: UpdateRunnerOptions = {},\n): Promise<UpdateRunResult> {\n const channel = opts.channel ?? DEFAULT_PACKAGE_CHANNEL;\n const result = await runGatewayUpdate(opts);\n\n if (result.status !== 'ok') {\n return result;\n }\n\n const postUpdate: UpdatePostUpdateResult = {};\n\n if (!opts.skipExtensionSync) {\n const extensions = await runPostUpdateExtensionSync({\n channel,\n timeoutMs: opts.timeoutMs,\n });\n postUpdate.extensions = extensions;\n if (extensions.status === 'error') {\n return {\n ...result,\n status: 'error',\n reason: 'post-update-extensions',\n postUpdate,\n };\n }\n }\n\n const restart = await maybeRestartGatewayAfterUpdate({\n shouldRestart: opts.shouldRestart,\n expectedVersion: result.after?.version ?? undefined,\n triggerInProcessRestart: opts.triggerInProcessRestart,\n });\n postUpdate.restart = restart;\n\n return { ...result, postUpdate };\n}\n\nexport function formatUpdateApiResult(result: UpdateRunResult, channel: UpdateChannel): Record<string, unknown> {\n if (result.status === 'skipped' && result.reason === 'up-to-date') {\n return {\n status: 'up-to-date',\n currentVersion: result.before?.version ?? null,\n latestVersion: result.before?.version ?? null,\n channel,\n mode: result.mode,\n };\n }\n if (result.status === 'ok') {\n return {\n status: 'ok',\n previousVersion: result.before?.version ?? null,\n installedVersion: result.after?.version ?? null,\n channel,\n mode: result.mode,\n steps: result.steps.length,\n postUpdate: result.postUpdate ?? undefined,\n };\n }\n const failed = result.steps.find((step) => step.exitCode !== 0);\n return {\n status: 'error',\n reason: result.reason ?? 'update-failed',\n mode: result.mode,\n message: failed?.stderrTail ?? failed?.stdoutTail ?? result.reason,\n stderrTail: failed?.stderrTail ?? undefined,\n };\n}\n\nexport type AutoUpdateResult = {\n ok: boolean;\n exitCode: number | null;\n reason?: string;\n stdout?: string;\n stderr?: string;\n result?: UpdateRunResult;\n};\n\nexport async function runAutoUpdateCommand(params: {\n channel: UpdateChannel;\n root?: string | null;\n timeoutMs?: number;\n triggerInProcessRestart?: InProcessRestartTrigger;\n}): Promise<AutoUpdateResult> {\n const result = await runGatewayUpdateWithPostSteps({\n channel: params.channel,\n cwd: params.root ?? undefined,\n argv1: process.argv[1],\n timeoutMs: params.timeoutMs,\n triggerInProcessRestart: params.triggerInProcessRestart,\n });\n const payload = formatUpdateApiResult(result, params.channel);\n const stdout = JSON.stringify(payload);\n return {\n ok: result.status === 'ok' || (result.status === 'skipped' && result.reason === 'up-to-date'),\n exitCode: result.status === 'error' ? 1 : 0,\n reason: result.reason,\n stdout,\n stderr: result.steps.find((s) => s.exitCode !== 0)?.stderrTail ?? undefined,\n result,\n };\n}\n\nexport async function runAutoUpdateCommandWithProgress(params: {\n channel: UpdateChannel;\n root?: string | null;\n timeoutMs?: number;\n triggerInProcessRestart?: InProcessRestartTrigger;\n onProgress?: (line: string, source: 'stdout' | 'stderr') => void | Promise<void>;\n}): Promise<AutoUpdateResult> {\n const result = await runGatewayUpdateWithPostSteps({\n channel: params.channel,\n cwd: params.root ?? undefined,\n argv1: process.argv[1],\n timeoutMs: params.timeoutMs,\n triggerInProcessRestart: params.triggerInProcessRestart,\n progress: {\n onStepStart: (step) => void params.onProgress?.(`[${step.index + 1}/${step.total}] ${step.name}`, 'stdout'),\n onStepComplete: (step) => {\n if (step.exitCode !== 0 && step.stderrTail) {\n void params.onProgress?.(step.stderrTail, 'stderr');\n }\n },\n },\n });\n const payload = formatUpdateApiResult(result, params.channel);\n return {\n ok: result.status === 'ok' || (result.status === 'skipped' && result.reason === 'up-to-date'),\n exitCode: result.status === 'error' ? 1 : 0,\n reason: result.reason,\n stdout: JSON.stringify(payload),\n stderr: result.steps.find((s) => s.exitCode !== 0)?.stderrTail ?? undefined,\n result,\n };\n}\n\n// Legacy export for tests that import createDefaultCommandRunner path\nexport { createDefaultCommandRunner };\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-startup.js","names":[],"sources":["../../../src/infra/update-startup.ts"],"sourcesContent":["// src/infra/update-startup.ts\n\nimport { createHash, randomUUID } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { writeTextAtomic } from './write-file-atomic.js';\nimport type { Config } from '../config/schema.js';\nimport { resolveUpdateCheckStatePath } from '../config/paths-state.js';\nimport { acquireUpdateLock } from './update-lock.js';\nimport { PACKAGE_VERSION } from '../package-version.js';\nimport { createLogger } from '../utils/logger.js';\n\nimport { normalizeUpdateChannel, DEFAULT_PACKAGE_CHANNEL } from './update-channels.js';\nimport {\n compareSemver,\n resolveNpmChannelTag,\n detectInstallKind,\n resolvePackageRoot,\n type InstallKind,\n type UpdateAvailable,\n} from './update-check.js';\nimport type { InProcessRestartTrigger } from './update-restart.js';\n\nconst log = createLogger('UpdateCheck');\n\n// --- State persistence ---\n\nconst CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours\nconst ONE_HOUR_MS = 60 * 60 * 1000;\n\ntype UpdateCheckState = {\n /** `package.json` version at the last successful registry check (used to bypass 24h throttle when you bump the local version). */\n lastCheckPackageVersion?: string;\n lastCheckedAt?: string;\n lastAvailableVersion?: string;\n lastAvailableTag?: string;\n lastNotifiedVersion?: string;\n lastNotifiedTag?: string;\n autoInstallId?: string;\n autoFirstSeenVersion?: string;\n autoFirstSeenTag?: string;\n autoFirstSeenAt?: string;\n autoLastAttemptVersion?: string;\n autoLastAttemptAt?: string;\n autoLastSuccessVersion?: string;\n autoLastSuccessAt?: string;\n};\n\n// --- In-memory cache ---\n\nlet updateAvailableCache: UpdateAvailable | null = null;\n\n/** Get the cached update-available state (populated after startup check). */\nexport function getUpdateAvailable(): UpdateAvailable | null {\n return updateAvailableCache;\n}\n\n// --- Core logic ---\n\nasync function readState(statePath: string): Promise<UpdateCheckState> {\n try {\n const raw = await readFile(statePath, 'utf-8');\n const parsed = JSON.parse(raw) as UpdateCheckState;\n if (!parsed || typeof parsed !== 'object') {\n log.warn({ statePath }, 'Update check state file contains non-object; resetting');\n return {};\n }\n return parsed;\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\n log.warn({ err, statePath }, 'Failed to read update check state; resetting');\n }\n return {};\n }\n}\n\nasync function writeState(statePath: string, state: UpdateCheckState): Promise<void> {\n await writeTextAtomic(statePath, JSON.stringify(state, null, 2));\n}\n\nfunction resolveCheckIntervalMs(config: Config): number {\n const auto = config.update?.auto;\n if (!auto?.enabled) return CHECK_INTERVAL_MS;\n\n const channel = normalizeUpdateChannel(config.update?.channel) ?? DEFAULT_PACKAGE_CHANNEL;\n if (channel === 'beta') {\n const hours = auto.betaCheckIntervalHours ?? 1;\n return Math.max(ONE_HOUR_MS / 4, Math.floor(hours * ONE_HOUR_MS));\n }\n return ONE_HOUR_MS;\n}\n\n/**\n * Compute a deterministic delay for stable auto-update rollout,\n * based on a per-installation hash to spread updates over time.\n */\nfunction resolveStableJitterMs(\n installId: string,\n version: string,\n tag: string,\n jitterWindowMs: number,\n): number {\n if (jitterWindowMs <= 0) return 0;\n const hash = createHash('sha256').update(`${installId}:${version}:${tag}`).digest();\n const bucket = hash.readUInt32BE(0);\n return bucket % (Math.floor(jitterWindowMs) + 1);\n}\n\n/**\n * Main startup update check. Called once when the gateway starts (or on demand).\n */\nexport async function runGatewayUpdateCheck(params: {\n config: Config;\n onUpdateAvailableChange?: (update: UpdateAvailable | null) => void;\n triggerInProcessRestart?: InProcessRestartTrigger;\n /** When true, bypass checkOnStart/auto-disabled early exit and throttle (for POST /api/update/check). */\n force?: boolean;\n}): Promise<void> {\n const { config, force } = params;\n\n const autoEnabled = config.update?.auto?.enabled ?? false;\n const shouldCheckHints = config.update?.checkOnStart !== false;\n if (!force && !shouldCheckHints && !autoEnabled) return;\n\n const statePath = resolveUpdateCheckStatePath();\n const state = await readState(statePath);\n const now = Date.now();\n\n // Hydrate from persisted state if within throttle window\n const lastCheckedAt = state.lastCheckedAt ? Date.parse(state.lastCheckedAt) : null;\n if (state.lastAvailableVersion && (shouldCheckHints || force)) {\n const comparison = compareSemver(PACKAGE_VERSION, state.lastAvailableVersion);\n if (comparison !== null && comparison < 0) {\n const cached: UpdateAvailable = {\n currentVersion: PACKAGE_VERSION,\n latestVersion: state.lastAvailableVersion,\n channel: state.lastAvailableTag ?? 'latest',\n };\n updateAvailableCache = cached;\n params.onUpdateAvailableChange?.(cached);\n }\n }\n\n const checkIntervalMs = resolveCheckIntervalMs(config);\n // Re-check npm when the local package version changed (e.g. after editing package.json) even within 24h.\n const shouldBypassThrottleForVersion =\n state.lastCheckPackageVersion === undefined || state.lastCheckPackageVersion !== PACKAGE_VERSION;\n if (\n !force &&\n !shouldBypassThrottleForVersion &&\n lastCheckedAt &&\n Number.isFinite(lastCheckedAt) &&\n now - lastCheckedAt < checkIntervalMs\n ) {\n return; // Within throttle window\n }\n\n // Install kind: auto-install only for npm global installs, but we still query npm in git\n // so the Web UI / CLI can show \"newer on registry\" and the top reminder bar.\n const root = await resolvePackageRoot();\n let installKind: InstallKind = 'unknown';\n if (root) {\n installKind = await detectInstallKind(root);\n if (installKind === 'git') {\n log.info('Update check: git checkout (hint-only; use git pull to update, no auto npm install)');\n }\n }\n\n // Query npm registry\n const channel = normalizeUpdateChannel(config.update?.channel) ?? DEFAULT_PACKAGE_CHANNEL;\n const resolved = await resolveNpmChannelTag({ channel, timeoutMs: 2500 });\n\n const nextState: UpdateCheckState = {\n ...state,\n lastCheckedAt: new Date(now).toISOString(),\n };\n\n if (!resolved.version) {\n nextState.lastCheckPackageVersion = PACKAGE_VERSION;\n await writeState(statePath, nextState);\n return;\n }\n\n const comparison = compareSemver(PACKAGE_VERSION, resolved.version);\n if (comparison !== null && comparison < 0) {\n // Update available\n const updateInfo: UpdateAvailable = {\n currentVersion: PACKAGE_VERSION,\n latestVersion: resolved.version,\n channel: resolved.tag,\n };\n\n if (shouldCheckHints || force) {\n updateAvailableCache = updateInfo;\n params.onUpdateAvailableChange?.(updateInfo);\n }\n\n nextState.lastAvailableVersion = resolved.version;\n nextState.lastAvailableTag = resolved.tag;\n\n // Log notification (once per version)\n const shouldNotify =\n state.lastNotifiedVersion !== resolved.version || state.lastNotifiedTag !== resolved.tag;\n if ((shouldCheckHints || force) && shouldNotify) {\n log.info(\n { currentVersion: PACKAGE_VERSION, latestVersion: resolved.version, tag: resolved.tag },\n `Update available (${resolved.tag}): v${resolved.version} (current v${PACKAGE_VERSION}). Run: xopc update`,\n );\n nextState.lastNotifiedVersion = resolved.version;\n nextState.lastNotifiedTag = resolved.tag;\n }\n\n // Auto-update logic (never from a git worktree)\n if (\n autoEnabled &&\n (channel === 'stable' || channel === 'beta') &&\n installKind !== 'git'\n ) {\n await handleAutoUpdate({\n channel,\n version: resolved.version,\n tag: resolved.tag,\n state,\n nextState,\n now,\n root,\n config,\n triggerInProcessRestart: params.triggerInProcessRestart,\n });\n }\n } else {\n // Current version is up to date or newer\n delete nextState.lastAvailableVersion;\n delete nextState.lastAvailableTag;\n updateAvailableCache = null;\n params.onUpdateAvailableChange?.(null);\n }\n\n nextState.lastCheckPackageVersion = PACKAGE_VERSION;\n await writeState(statePath, nextState);\n}\n\nasync function handleAutoUpdate(params: {\n channel: 'stable' | 'beta';\n version: string;\n tag: string;\n state: UpdateCheckState;\n nextState: UpdateCheckState;\n now: number;\n root: string | null;\n config: Config;\n triggerInProcessRestart?: InProcessRestartTrigger;\n}): Promise<void> {\n const { channel, version, tag, state, nextState, now, root, config } = params;\n const auto = config.update?.auto;\n if (!auto) return;\n\n const stableDelayHours = auto.stableDelayHours ?? 6;\n const stableJitterHours = auto.stableJitterHours ?? 12;\n const betaCheckIntervalHours = auto.betaCheckIntervalHours ?? 1;\n\n // Rate limit: don't re-attempt same version within interval\n const attemptIntervalMs =\n channel === 'beta'\n ? Math.max(ONE_HOUR_MS / 4, Math.floor(betaCheckIntervalHours * ONE_HOUR_MS))\n : ONE_HOUR_MS;\n const lastAttemptAt = state.autoLastAttemptAt ? Date.parse(state.autoLastAttemptAt) : null;\n const recentAttempt =\n state.autoLastAttemptVersion === version &&\n lastAttemptAt !== null &&\n Number.isFinite(lastAttemptAt) &&\n now - lastAttemptAt < attemptIntervalMs;\n\n if (recentAttempt) {\n log.info({ version, tag }, 'Auto-update deferred: recent attempt exists');\n return;\n }\n\n // Stable rollout delay + jitter\n if (channel === 'stable') {\n if (!nextState.autoInstallId) {\n nextState.autoInstallId = state.autoInstallId?.trim() || randomUUID();\n }\n // Track first-seen time for this version\n if (state.autoFirstSeenVersion !== version || state.autoFirstSeenTag !== tag) {\n nextState.autoFirstSeenVersion = version;\n nextState.autoFirstSeenTag = tag;\n nextState.autoFirstSeenAt = new Date(now).toISOString();\n } else {\n nextState.autoFirstSeenAt = state.autoFirstSeenAt;\n }\n\n const firstSeenMs = nextState.autoFirstSeenAt ? Date.parse(nextState.autoFirstSeenAt) : now;\n const baseDelayMs = Math.max(0, stableDelayHours) * ONE_HOUR_MS;\n const jitterWindowMs = Math.max(0, stableJitterHours) * ONE_HOUR_MS;\n const jitterMs = resolveStableJitterMs(nextState.autoInstallId, version, tag, jitterWindowMs);\n const applyAfterMs = firstSeenMs + baseDelayMs + jitterMs;\n\n if (now < applyAfterMs) {\n log.info(\n { version, tag, applyAfter: new Date(applyAfterMs).toISOString() },\n 'Auto-update deferred: stable rollout window not yet due',\n );\n return;\n }\n }\n\n // Execute auto-update\n nextState.autoLastAttemptVersion = version;\n nextState.autoLastAttemptAt = new Date(now).toISOString();\n\n log.info({ channel, version, tag }, 'Starting auto-update');\n\n const lock = await acquireUpdateLock('auto');\n if (!lock) {\n log.info({ version, tag }, 'Auto-update skipped: another update is in progress');\n return;\n }\n try {\n const { runAutoUpdateCommand } = await import('./update-runner.js');\n const result = await runAutoUpdateCommand({\n channel,\n root,\n triggerInProcessRestart: params.triggerInProcessRestart,\n });\n if (result.ok) {\n nextState.autoLastSuccessVersion = version;\n nextState.autoLastSuccessAt = new Date(now).toISOString();\n const restartMode = result.result?.postUpdate?.restart?.mode;\n log.info(\n { channel, version, tag, restartMode },\n restartMode === 'in-process'\n ? 'Auto-update applied; gateway restart scheduled'\n : 'Auto-update applied successfully',\n );\n } else {\n log.warn(\n { channel, version, tag, exitCode: result.exitCode, reason: result.reason },\n `Auto-update attempt failed: ${result.reason ?? `exit ${result.exitCode}`}`,\n );\n }\n } catch (err) {\n log.error({ err, channel, version }, 'Auto-update command threw');\n } finally {\n await lock.release();\n }\n}\n\n/**\n * Schedule periodic update checks. Returns a cleanup function to stop the timer.\n */\nexport function scheduleGatewayUpdateCheck(params: {\n config: Config;\n onUpdateAvailableChange?: (update: UpdateAvailable | null) => void;\n triggerInProcessRestart?: InProcessRestartTrigger;\n}): () => void {\n let stopped = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const tick = async () => {\n if (stopped) return;\n try {\n await runGatewayUpdateCheck(params);\n } catch (err) {\n log.warn({ err }, 'Periodic update check failed');\n }\n if (!stopped) {\n const intervalMs = resolveCheckIntervalMs(params.config);\n timer = setTimeout(() => void tick(), intervalMs);\n }\n };\n\n // Initial check after a short delay (don't block startup)\n timer = setTimeout(() => void tick(), 5000);\n\n return () => {\n stopped = true;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"warning-filter.js","names":[],"sources":["../../../src/infra/warning-filter.ts"],"sourcesContent":["import { resolveGlobalSingleton } from '../utils/global-singleton.js';\n\nconst warningFilterKey = Symbol.for('xopc.warning-filter');\n\nexport type ProcessWarning = {\n code?: string;\n name?: string;\n message?: string;\n};\n\ntype ProcessWarningInstallState = {\n installed: boolean;\n};\n\nexport function shouldIgnoreWarning(warning: ProcessWarning): boolean {\n if (warning.code === 'DEP0040' && warning.message?.includes('punycode')) {\n return true;\n }\n if (warning.code === 'DEP0060' && warning.message?.includes('util._extend')) {\n return true;\n }\n if (\n warning.name === 'ExperimentalWarning' &&\n warning.message?.includes('SQLite is an experimental feature')\n ) {\n return true;\n }\n return false;\n}\n\nfunction normalizeWarningArgs(args: unknown[]): ProcessWarning {\n const warningArg = args[0];\n const secondArg = args[1];\n const thirdArg = args[2];\n let name: string | undefined;\n let code: string | undefined;\n let message: string | undefined;\n\n if (warningArg instanceof Error) {\n name = warningArg.name;\n message = warningArg.message;\n code = (warningArg as Error & { code?: string }).code;\n } else if (typeof warningArg === 'string') {\n message = warningArg;\n }\n\n if (secondArg && typeof secondArg === 'object' && !Array.isArray(secondArg)) {\n const options = secondArg as { type?: unknown; code?: unknown };\n if (typeof options.type === 'string') {\n name = options.type;\n }\n if (typeof options.code === 'string') {\n code = options.code;\n }\n } else {\n if (typeof secondArg === 'string') {\n name = secondArg;\n }\n if (typeof thirdArg === 'string') {\n code = thirdArg;\n }\n }\n\n return { name, code, message };\n}\n\nexport function installProcessWarningFilter(): void {\n const state = resolveGlobalSingleton<ProcessWarningInstallState>(warningFilterKey, () => ({\n installed: false,\n }));\n if (state.installed) {\n return;\n }\n\n const originalEmitWarning = process.emitWarning.bind(process);\n const wrappedEmitWarning: typeof process.emitWarning = ((...args: unknown[]) => {\n if (shouldIgnoreWarning(normalizeWarningArgs(args))) {\n return;\n }\n if (\n args[0] instanceof Error &&\n args[1] &&\n typeof args[1] === 'object' &&\n !Array.isArray(args[1])\n ) {\n const warning = args[0];\n const emitted = Object.assign(new Error(warning.message), {\n name: warning.name,\n code: (warning as Error & { code?: string }).code,\n });\n process.emit('warning', emitted);\n return;\n }\n Reflect.apply(originalEmitWarning, process, args);\n return;\n }) as typeof process.emitWarning;\n\n process.emitWarning = wrappedEmitWarning;\n state.installed = true;\n}\n"],"mappings":";;AAEA,MAAM,mBAAmB,OAAO,IAAI,sBAAsB;AAY1D,SAAgB,oBAAoB,SAAkC;AACpE,KAAI,QAAQ,SAAS,aAAa,QAAQ,SAAS,SAAS,WAAW,CACrE,QAAO;AAET,KAAI,QAAQ,SAAS,aAAa,QAAQ,SAAS,SAAS,eAAe,CACzE,QAAO;AAET,KACE,QAAQ,SAAS,yBACjB,QAAQ,SAAS,SAAS,oCAAoC,CAE9D,QAAO;AAET,QAAO;;AAGT,SAAS,qBAAqB,MAAiC;CAC7D,MAAM,aAAa,KAAK;CACxB,MAAM,YAAY,KAAK;CACvB,MAAM,WAAW,KAAK;CACtB,IAAI;CACJ,IAAI;CACJ,IAAI;AAEJ,KAAI,sBAAsB,OAAO;AAC/B,SAAO,WAAW;AAClB,YAAU,WAAW;AACrB,SAAQ,WAAyC;YACxC,OAAO,eAAe,SAC/B,WAAU;AAGZ,KAAI,aAAa,OAAO,cAAc,YAAY,CAAC,MAAM,QAAQ,UAAU,EAAE;EAC3E,MAAM,UAAU;AAChB,MAAI,OAAO,QAAQ,SAAS,SAC1B,QAAO,QAAQ;AAEjB,MAAI,OAAO,QAAQ,SAAS,SAC1B,QAAO,QAAQ;QAEZ;AACL,MAAI,OAAO,cAAc,SACvB,QAAO;AAET,MAAI,OAAO,aAAa,SACtB,QAAO;;AAIX,QAAO;EAAE;EAAM;EAAM;EAAS;;AAGhC,SAAgB,8BAAoC;CAClD,MAAM,QAAQ,uBAAmD,yBAAyB,EACxF,WAAW,OACZ,EAAE;AACH,KAAI,MAAM,UACR;CAGF,MAAM,sBAAsB,QAAQ,YAAY,KAAK,QAAQ;CAC7D,MAAM,uBAAmD,GAAG,SAAoB;AAC9E,MAAI,oBAAoB,qBAAqB,KAAK,CAAC,CACjD;AAEF,MACE,KAAK,cAAc,SACnB,KAAK,MACL,OAAO,KAAK,OAAO,YACnB,CAAC,MAAM,QAAQ,KAAK,GAAG,EACvB;GACA,MAAM,UAAU,KAAK;GACrB,MAAM,UAAU,OAAO,OAAO,IAAI,MAAM,QAAQ,QAAQ,EAAE;IACxD,MAAM,QAAQ;IACd,MAAO,QAAsC;IAC9C,CAAC;AACF,WAAQ,KAAK,WAAW,QAAQ;AAChC;;AAEF,UAAQ,MAAM,qBAAqB,SAAS,KAAK;;AAInD,SAAQ,cAAc;AACtB,OAAM,YAAY"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"write-file-atomic.js","names":[],"sources":["../../../src/infra/write-file-atomic.ts"],"sourcesContent":["/**\n * Durable single-file writes: temp file → fsync → rename to target.\n * Avoids torn JSON when the process dies mid-write.\n */\n\nimport { randomUUID } from 'node:crypto';\nimport {\n chmodSync,\n closeSync,\n copyFileSync,\n fsyncSync,\n mkdirSync,\n openSync,\n renameSync,\n rmSync,\n writeFileSync,\n} from 'node:fs';\nimport { mkdir, open, rename, rm, copyFile, chmod } from 'node:fs/promises';\nimport path from 'node:path';\n\nfunction errno(err: unknown): string | undefined {\n return err instanceof Error ? (err as NodeJS.ErrnoException).code : undefined;\n}\n\nfunction replaceTempWithTargetSync(tempPath: string, filePath: string, mode: number): void {\n try {\n renameSync(tempPath, filePath);\n return;\n } catch (err) {\n const code = errno(err);\n if (process.platform !== 'win32' || (code !== 'EPERM' && code !== 'EEXIST')) {\n throw err;\n }\n }\n\n copyFileSync(tempPath, filePath);\n try {\n chmodSync(filePath, mode);\n } catch {\n /* best-effort */\n }\n rmSync(tempPath, { force: true });\n}\n\nasync function replaceTempWithTarget(tempPath: string, filePath: string, mode: number): Promise<void> {\n try {\n await rename(tempPath, filePath);\n return;\n } catch (err) {\n const code = errno(err);\n if (process.platform !== 'win32' || (code !== 'EPERM' && code !== 'EEXIST')) {\n throw err;\n }\n }\n\n await copyFile(tempPath, filePath);\n try {\n await chmod(filePath, mode);\n } catch {\n /* best-effort */\n }\n await rm(tempPath, { force: true }).catch(() => undefined);\n}\n\n/**\n * Write UTF-8 text atomically. Creates parent directories when missing.\n */\nexport async function writeTextAtomic(\n filePath: string,\n content: string,\n options?: { mode?: number; ensureDirMode?: number },\n): Promise<void> {\n const mode = options?.mode ?? 0o600;\n const dir = path.dirname(filePath);\n const mkdirOpts: { recursive: true; mode?: number } = { recursive: true };\n if (typeof options?.ensureDirMode === 'number') {\n mkdirOpts.mode = options.ensureDirMode;\n }\n await mkdir(dir, mkdirOpts);\n\n const tmp = `${filePath}.${randomUUID()}.tmp`;\n try {\n const handle = await open(tmp, 'w', mode);\n try {\n await handle.writeFile(content, { encoding: 'utf8' });\n await handle.sync();\n } finally {\n await handle.close().catch(() => undefined);\n }\n try {\n await chmod(tmp, mode);\n } catch {\n /* best-effort */\n }\n await replaceTempWithTarget(tmp, filePath, mode);\n try {\n await chmod(filePath, mode);\n } catch {\n /* best-effort */\n }\n } finally {\n await rm(tmp, { force: true }).catch(() => undefined);\n }\n\n try {\n const dirHandle = await open(dir, 'r');\n try {\n await dirHandle.sync();\n } finally {\n await dirHandle.close().catch(() => undefined);\n }\n } catch {\n /* best-effort directory sync */\n }\n}\n\n/**\n * Synchronous atomic UTF-8 write (temp → fsync → rename). For CLI / sync stores.\n */\nexport function writeTextAtomicSync(\n filePath: string,\n content: string,\n options?: { mode?: number; ensureDirMode?: number },\n): void {\n const mode = options?.mode ?? 0o600;\n const dir = path.dirname(filePath);\n const mkdirOpts: { recursive: true; mode?: number } = { recursive: true };\n if (typeof options?.ensureDirMode === 'number') {\n mkdirOpts.mode = options.ensureDirMode;\n }\n mkdirSync(dir, mkdirOpts);\n\n const tmp = `${filePath}.${randomUUID()}.tmp`;\n try {\n writeFileSync(tmp, content, { encoding: 'utf8' });\n const fd = openSync(tmp, 'r+');\n try {\n fsyncSync(fd);\n } finally {\n closeSync(fd);\n }\n try {\n chmodSync(tmp, mode);\n } catch {\n /* best-effort */\n }\n replaceTempWithTargetSync(tmp, filePath, mode);\n try {\n chmodSync(filePath, mode);\n } catch {\n /* best-effort */\n }\n } finally {\n try {\n rmSync(tmp, { force: true });\n } catch {\n /* ignore */\n }\n }\n}\n"],"mappings":";;;;;;;;;;AAoBA,SAAS,MAAM,KAAkC;AAC/C,QAAO,eAAe,QAAS,IAA8B,OAAO,KAAA;;AAGtE,SAAS,0BAA0B,UAAkB,UAAkB,MAAoB;AACzF,KAAI;AACF,aAAW,UAAU,SAAS;AAC9B;UACO,KAAK;EACZ,MAAM,OAAO,MAAM,IAAI;AACvB,MAAI,QAAQ,aAAa,WAAY,SAAS,WAAW,SAAS,SAChE,OAAM;;AAIV,cAAa,UAAU,SAAS;AAChC,KAAI;AACF,YAAU,UAAU,KAAK;SACnB;AAGR,QAAO,UAAU,EAAE,OAAO,MAAM,CAAC;;AAGnC,eAAe,sBAAsB,UAAkB,UAAkB,MAA6B;AACpG,KAAI;AACF,QAAM,OAAO,UAAU,SAAS;AAChC;UACO,KAAK;EACZ,MAAM,OAAO,MAAM,IAAI;AACvB,MAAI,QAAQ,aAAa,WAAY,SAAS,WAAW,SAAS,SAChE,OAAM;;AAIV,OAAM,SAAS,UAAU,SAAS;AAClC,KAAI;AACF,QAAM,MAAM,UAAU,KAAK;SACrB;AAGR,OAAM,GAAG,UAAU,EAAE,OAAO,MAAM,CAAC,CAAC,YAAY,KAAA,EAAU;;;;;AAM5D,eAAsB,gBACpB,UACA,SACA,SACe;CACf,MAAM,OAAO,SAAS,QAAQ;CAC9B,MAAM,MAAM,KAAK,QAAQ,SAAS;CAClC,MAAM,YAAgD,EAAE,WAAW,MAAM;AACzE,KAAI,OAAO,SAAS,kBAAkB,SACpC,WAAU,OAAO,QAAQ;AAE3B,OAAM,MAAM,KAAK,UAAU;CAE3B,MAAM,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;AACxC,KAAI;EACF,MAAM,SAAS,MAAM,KAAK,KAAK,KAAK,KAAK;AACzC,MAAI;AACF,SAAM,OAAO,UAAU,SAAS,EAAE,UAAU,QAAQ,CAAC;AACrD,SAAM,OAAO,MAAM;YACX;AACR,SAAM,OAAO,OAAO,CAAC,YAAY,KAAA,EAAU;;AAE7C,MAAI;AACF,SAAM,MAAM,KAAK,KAAK;UAChB;AAGR,QAAM,sBAAsB,KAAK,UAAU,KAAK;AAChD,MAAI;AACF,SAAM,MAAM,UAAU,KAAK;UACrB;WAGA;AACR,QAAM,GAAG,KAAK,EAAE,OAAO,MAAM,CAAC,CAAC,YAAY,KAAA,EAAU;;AAGvD,KAAI;EACF,MAAM,YAAY,MAAM,KAAK,KAAK,IAAI;AACtC,MAAI;AACF,SAAM,UAAU,MAAM;YACd;AACR,SAAM,UAAU,OAAO,CAAC,YAAY,KAAA,EAAU;;SAE1C;;;;;AAQV,SAAgB,oBACd,UACA,SACA,SACM;CACN,MAAM,OAAO,SAAS,QAAQ;CAC9B,MAAM,MAAM,KAAK,QAAQ,SAAS;CAClC,MAAM,YAAgD,EAAE,WAAW,MAAM;AACzE,KAAI,OAAO,SAAS,kBAAkB,SACpC,WAAU,OAAO,QAAQ;AAE3B,WAAU,KAAK,UAAU;CAEzB,MAAM,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;AACxC,KAAI;AACF,gBAAc,KAAK,SAAS,EAAE,UAAU,QAAQ,CAAC;EACjD,MAAM,KAAK,SAAS,KAAK,KAAK;AAC9B,MAAI;AACF,aAAU,GAAG;YACL;AACR,aAAU,GAAG;;AAEf,MAAI;AACF,aAAU,KAAK,KAAK;UACd;AAGR,4BAA0B,KAAK,UAAU,KAAK;AAC9C,MAAI;AACF,aAAU,UAAU,KAAK;UACnB;WAGA;AACR,MAAI;AACF,UAAO,KAAK,EAAE,OAAO,MAAM,CAAC;UACtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connected-knowledge-pipeline.js","names":[],"sources":["../../../src/knowledge/connected-knowledge-pipeline.ts"],"sourcesContent":["import { createHash, randomUUID } from 'node:crypto';\n\nimport {\n attachMemoryEvidence,\n claimKnowledgeSourceItems,\n completeKnowledgeSourceItemSynthesis,\n deleteMemoryEvidenceForRecord,\n getMemoryRecord,\n listKnowledgeSourceItems,\n upsertMemoryRecord,\n} from '../storage/sqlite/index.js';\nimport { createLogger } from '../utils/logger.js';\nimport type { KnowledgeSourceItem } from './types.js';\n\nconst log = createLogger('ConnectedKnowledge');\nconst MAX_ITEM_CHARS = 8_000;\nconst MAX_SUMMARY_CHARS = 6_000;\nconst MAX_SUMMARY_ITEMS = 24;\n\nexport type ConnectedKnowledgePipelineOptions = {\n agentId: string;\n workspaceId: string;\n workerId?: string;\n batchSize?: number;\n};\n\nexport type KnowledgeSynthesisBatchResult = {\n claimed: number;\n completed: number;\n ignored: number;\n failed: number;\n recordIds: string[];\n};\n\nfunction providerId(item: KnowledgeSourceItem): string {\n const connectorId = item.metadata.connectorId;\n if (typeof connectorId === 'string' && connectorId.trim()) return connectorId.trim();\n return item.sourceInstanceId.split(':')[0] || 'connected-source';\n}\n\nfunction ownerAgentId(item: KnowledgeSourceItem, fallback: string): string {\n const agentId = item.metadata.agentId;\n return typeof agentId === 'string' && agentId.trim() ? agentId.trim() : fallback;\n}\n\nfunction ownerWorkspaceId(item: KnowledgeSourceItem, fallback: string): string {\n const workspaceId = item.metadata.workspaceId;\n return typeof workspaceId === 'string' && workspaceId.trim() ? workspaceId.trim() : fallback;\n}\n\nfunction knowledgeRecordId(itemId: string): string {\n return `knowledge:${itemId}`;\n}\n\nfunction boundedText(item: KnowledgeSourceItem): string {\n const text = item.normalizedText?.trim() ?? '';\n return text.length > MAX_ITEM_CHARS ? `${text.slice(0, MAX_ITEM_CHARS)}\\n…` : text;\n}\n\nfunction dayFor(item: KnowledgeSourceItem): string {\n const timestamp = item.occurredAt ?? item.sourceUpdatedAt ?? item.updatedAt;\n return timestamp.slice(0, 10);\n}\n\nfunction summaryRecordId(sourceInstanceId: string, day: string): string {\n const key = createHash('sha256').update(`${sourceInstanceId}:${day}`).digest('hex').slice(0, 24);\n return `knowledge-summary:${key}`;\n}\n\nexport class ConnectedKnowledgePipeline {\n private readonly workerId: string;\n private readonly batchSize: number;\n\n constructor(private readonly options: ConnectedKnowledgePipelineOptions) {\n this.workerId = options.workerId ?? `connected-knowledge:${process.pid}:${randomUUID()}`;\n this.batchSize = Math.max(1, Math.min(100, options.batchSize ?? 20));\n }\n\n async processPending(sourceInstanceId?: string): Promise<KnowledgeSynthesisBatchResult> {\n const claimed = claimKnowledgeSourceItems({\n workerId: this.workerId,\n sourceInstanceId,\n synthesisPipeline: 'connected_knowledge',\n limit: this.batchSize,\n });\n const result: KnowledgeSynthesisBatchResult = {\n claimed: claimed.length,\n completed: 0,\n ignored: 0,\n failed: 0,\n recordIds: [],\n };\n const summaryKeys = new Set<string>();\n\n for (const item of claimed) {\n try {\n const recordId = knowledgeRecordId(item.id);\n const content = boundedText(item);\n if (item.deletedAt) {\n const existing = getMemoryRecord(recordId);\n if (existing) {\n upsertMemoryRecord({\n id: existing.id,\n providerId: 'connected-knowledge',\n kind: existing.kind,\n sourceAgentId: existing.provenance.sourceAgentId,\n workspaceId: existing.scope.workspaceId,\n content: existing.content,\n source: existing.source,\n confidence: existing.confidence,\n tags: existing.tags,\n status: 'archived',\n sensitivity: existing.sensitivity,\n explicitness: existing.explicitness,\n durability: existing.durability,\n importance: existing.importance,\n disclosurePolicy: existing.disclosurePolicy,\n evidence: existing.evidence,\n validFrom: existing.validFrom,\n validTo: item.deletedAt,\n reviewAfter: existing.reviewAfter,\n expiresAt: existing.expiresAt,\n canonicalKey: existing.canonicalKey,\n supersedesRecordId: existing.supersedesRecordId,\n conflictGroupId: existing.conflictGroupId,\n });\n }\n completeKnowledgeSourceItemSynthesis({\n itemId: item.id,\n workerId: this.workerId,\n status: 'ignored',\n });\n result.ignored += 1;\n summaryKeys.add(`${item.sourceInstanceId}\\u0000${dayFor(item)}`);\n continue;\n }\n if (!content || item.sensitivity === 'secret' || item.sensitivity === 'regulated') {\n completeKnowledgeSourceItemSynthesis({\n itemId: item.id,\n workerId: this.workerId,\n status: 'ignored',\n });\n result.ignored += 1;\n continue;\n }\n\n const sourceProvider = providerId(item);\n const record = upsertMemoryRecord({\n id: recordId,\n providerId: 'connected-knowledge',\n kind: 'workspace_fact',\n sourceAgentId: ownerAgentId(item, this.options.agentId),\n workspaceId: ownerWorkspaceId(item, this.options.workspaceId),\n content,\n canonicalKey: `source-item:${item.sourceInstanceId}:${item.externalId}`,\n source: { provider: sourceProvider, sourceInstanceId: item.sourceInstanceId, path: item.payloadRef },\n confidence: 0.78,\n tags: ['connected-source', 'external', sourceProvider, item.itemType],\n status: 'active',\n sensitivity: item.sensitivity,\n explicitness: 'observed',\n durability: item.retentionClass === 'durable' ? 'durable' : 'recurring',\n importance: 0.5,\n disclosurePolicy: 'referenceable',\n evidence: [{\n sourceItemId: item.id,\n relation: 'derived_from',\n sourceText: content.slice(0, 1_000),\n confidence: 0.78,\n observedAt: item.occurredAt ?? item.sourceUpdatedAt,\n }],\n validFrom: item.occurredAt ?? item.sourceUpdatedAt,\n });\n attachMemoryEvidence({\n recordId: record.id,\n sourceItemId: item.id,\n relation: 'derived_from',\n excerpt: content.slice(0, 1_000),\n confidence: 0.78,\n observedAt: item.occurredAt ?? item.sourceUpdatedAt,\n });\n completeKnowledgeSourceItemSynthesis({\n itemId: item.id,\n workerId: this.workerId,\n status: 'completed',\n });\n result.completed += 1;\n result.recordIds.push(record.id);\n summaryKeys.add(`${item.sourceInstanceId}\\u0000${dayFor(item)}`);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n completeKnowledgeSourceItemSynthesis({\n itemId: item.id,\n workerId: this.workerId,\n status: 'failed',\n error: errorMessage.slice(0, 1_000),\n });\n result.failed += 1;\n log.warn(\n { err, itemId: item.id, sourceInstanceId: item.sourceInstanceId },\n `Connected knowledge synthesis failed: ${errorMessage}`,\n );\n }\n }\n\n for (const key of summaryKeys) {\n const [sourceInstanceId, day] = key.split('\\u0000');\n if (sourceInstanceId && day) this.rebuildDailySummary(sourceInstanceId, day);\n }\n return result;\n }\n\n private rebuildDailySummary(sourceInstanceId: string, day: string): void {\n const items = listKnowledgeSourceItems({ sourceInstanceId, limit: 500 })\n .filter((item) => dayFor(item) === day && item.synthesisStatus === 'completed')\n .slice(0, MAX_SUMMARY_ITEMS);\n if (items.length === 0) {\n const existing = getMemoryRecord(summaryRecordId(sourceInstanceId, day));\n if (existing) {\n upsertMemoryRecord({\n id: existing.id,\n providerId: 'connected-knowledge',\n kind: existing.kind,\n sourceAgentId: existing.provenance.sourceAgentId,\n workspaceId: existing.scope.workspaceId,\n content: existing.content,\n source: existing.source,\n confidence: existing.confidence,\n tags: existing.tags,\n status: 'archived',\n sensitivity: existing.sensitivity,\n explicitness: existing.explicitness,\n durability: existing.durability,\n importance: existing.importance,\n disclosurePolicy: existing.disclosurePolicy,\n evidence: existing.evidence,\n validFrom: existing.validFrom,\n validTo: new Date().toISOString(),\n reviewAfter: existing.reviewAfter,\n expiresAt: existing.expiresAt,\n canonicalKey: existing.canonicalKey,\n });\n }\n return;\n }\n const sourceProvider = providerId(items[0]!);\n const lines = [`# ${sourceProvider} updates for ${day}`, ''];\n for (const item of items) {\n const text = boundedText(item).replace(/\\s+/g, ' ').trim();\n if (!text) continue;\n lines.push(`- ${text.slice(0, 360)}`);\n if (lines.join('\\n').length >= MAX_SUMMARY_CHARS) break;\n }\n const content = lines.join('\\n').slice(0, MAX_SUMMARY_CHARS);\n const summary = upsertMemoryRecord({\n id: summaryRecordId(sourceInstanceId, day),\n providerId: 'connected-knowledge',\n kind: 'daily_note',\n sourceAgentId: ownerAgentId(items[0]!, this.options.agentId),\n workspaceId: ownerWorkspaceId(items[0]!, this.options.workspaceId),\n content,\n canonicalKey: `source-day:${sourceInstanceId}:${day}`,\n source: { provider: sourceProvider, sourceInstanceId },\n confidence: 0.72,\n tags: ['connected-source', 'source-day-summary', sourceProvider],\n status: 'active',\n sensitivity: items.some((item) => item.sensitivity === 'personal') ? 'personal' : 'normal',\n explicitness: 'observed',\n durability: 'recurring',\n importance: 0.55,\n disclosurePolicy: 'referenceable',\n evidence: items.map((item) => ({\n sourceItemId: item.id,\n relation: 'derived_from' as const,\n sourceText: boundedText(item).slice(0, 500),\n confidence: 0.72,\n observedAt: item.occurredAt ?? item.sourceUpdatedAt,\n })),\n validFrom: `${day}T00:00:00.000Z`,\n });\n deleteMemoryEvidenceForRecord(summary.id, 'derived_from');\n for (const item of items) {\n attachMemoryEvidence({\n recordId: summary.id,\n sourceItemId: item.id,\n relation: 'derived_from',\n excerpt: boundedText(item).slice(0, 500),\n confidence: 0.72,\n observedAt: item.occurredAt ?? item.sourceUpdatedAt,\n });\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator.js","names":[],"sources":["../../../src/knowledge/coordinator.ts"],"sourcesContent":["import { createLogger } from '../utils/logger.js';\nimport { ConnectedKnowledgePipeline, type ConnectedKnowledgePipelineOptions } from './connected-knowledge-pipeline.js';\n\nconst log = createLogger('ConnectedKnowledge:Coordinator');\n\nexport type ConnectedKnowledgeCoordinator = {\n runNow(): Promise<void>;\n stop(): void;\n};\n\nexport function startConnectedKnowledgeCoordinator(options: {\n resolvePipelineOptions: () => ConnectedKnowledgePipelineOptions;\n intervalMs?: number;\n initialDelayMs?: number;\n}): ConnectedKnowledgeCoordinator {\n const intervalMs = Math.max(10_000, Math.min(options.intervalMs ?? 60_000, 30 * 60_000));\n let timer: NodeJS.Timeout | null = null;\n let running = false;\n let stopped = false;\n\n async function runNow(): Promise<void> {\n if (running || stopped) return;\n running = true;\n try {\n const pipeline = new ConnectedKnowledgePipeline(options.resolvePipelineOptions());\n let processed = 0;\n for (let batch = 0; batch < 5; batch += 1) {\n const result = await pipeline.processPending();\n processed += result.claimed;\n if (result.claimed === 0) break;\n }\n if (processed > 0) {\n log.info({ processed }, 'Connected knowledge synthesis queue drained');\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n log.warn({ err }, `Connected knowledge coordinator failed: ${errorMessage}`);\n } finally {\n running = false;\n }\n }\n\n timer = setTimeout(() => {\n void runNow();\n timer = setInterval(() => void runNow(), intervalMs);\n timer.unref?.();\n }, Math.max(0, options.initialDelayMs ?? 2_000));\n timer.unref?.();\n\n return {\n runNow,\n stop() {\n stopped = true;\n if (timer) {\n clearTimeout(timer);\n clearInterval(timer);\n timer = null;\n }\n },\n };\n}\n"],"mappings":";;;;aAAkD;AAGlD,MAAM,MAAM,aAAa,iCAAiC;AAO1D,SAAgB,mCAAmC,SAIjB;CAChC,MAAM,aAAa,KAAK,IAAI,KAAQ,KAAK,IAAI,QAAQ,cAAc,KAAQ,KAAK,IAAO,CAAC;CACxF,IAAI,QAA+B;CACnC,IAAI,UAAU;CACd,IAAI,UAAU;CAEd,eAAe,SAAwB;AACrC,MAAI,WAAW,QAAS;AACxB,YAAU;AACV,MAAI;GACF,MAAM,WAAW,IAAI,2BAA2B,QAAQ,wBAAwB,CAAC;GACjF,IAAI,YAAY;AAChB,QAAK,IAAI,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG;IACzC,MAAM,SAAS,MAAM,SAAS,gBAAgB;AAC9C,iBAAa,OAAO;AACpB,QAAI,OAAO,YAAY,EAAG;;AAE5B,OAAI,YAAY,EACd,KAAI,KAAK,EAAE,WAAW,EAAE,8CAA8C;WAEjE,KAAK;GACZ,MAAM,eAAe,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AACrE,OAAI,KAAK,EAAE,KAAK,EAAE,2CAA2C,eAAe;YACpE;AACR,aAAU;;;AAId,SAAQ,iBAAiB;AAClB,UAAQ;AACb,UAAQ,kBAAkB,KAAK,QAAQ,EAAE,WAAW;AACpD,QAAM,SAAS;IACd,KAAK,IAAI,GAAG,QAAQ,kBAAkB,IAAM,CAAC;AAChD,OAAM,SAAS;AAEf,QAAO;EACL;EACA,OAAO;AACL,aAAU;AACV,OAAI,OAAO;AACT,iBAAa,MAAM;AACnB,kBAAc,MAAM;AACpB,YAAQ;;;EAGb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ingestion-service.js","names":[],"sources":["../../../src/knowledge/ingestion-service.ts"],"sourcesContent":["import { createLogger } from '../utils/logger.js';\nimport {\n finishKnowledgeSyncRun,\n getKnowledgeSourceCursor,\n setKnowledgeSourceCursor,\n startKnowledgeSyncRun,\n upsertKnowledgeSourceItems,\n} from '../storage/sqlite/knowledge-repository.js';\nimport type { KnowledgeSourceAdapter, KnowledgeSourceItemInput, KnowledgeSyncRun } from './types.js';\n\nconst log = createLogger('KnowledgeIngestion');\n\nexport interface KnowledgeSourceStateStore {\n getCursor(instanceId: string): string | undefined;\n setCursor(instanceId: string, cursor: string | undefined): void;\n}\n\nexport class SqliteKnowledgeSourceStateStore implements KnowledgeSourceStateStore {\n getCursor(instanceId: string): string | undefined {\n return getKnowledgeSourceCursor(instanceId);\n }\n\n setCursor(instanceId: string, cursor: string | undefined): void {\n setKnowledgeSourceCursor(instanceId, cursor);\n }\n}\n\nexport class KnowledgeIngestionService {\n constructor(\n private readonly adapters: ReadonlyMap<string, KnowledgeSourceAdapter>,\n private readonly state: KnowledgeSourceStateStore = new SqliteKnowledgeSourceStateStore(),\n ) {}\n\n ingest(params: {\n instanceId: string;\n items: KnowledgeSourceItemInput[];\n cursorAfter?: string;\n warnings?: string[];\n }): KnowledgeSyncRun {\n const cursorBefore = this.state.getCursor(params.instanceId);\n const run = startKnowledgeSyncRun({ sourceInstanceId: params.instanceId, cursorBefore });\n try {\n const stored = upsertKnowledgeSourceItems(params.items);\n this.state.setCursor(params.instanceId, params.cursorAfter);\n return finishKnowledgeSyncRun({\n runId: run.id,\n status: params.warnings?.length ? 'partial' : 'succeeded',\n cursorAfter: params.cursorAfter,\n itemsSeen: params.items.length,\n itemsCreated: stored.created,\n itemsUpdated: stored.updated,\n warnings: params.warnings,\n });\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n finishKnowledgeSyncRun({ runId: run.id, status: 'failed', error: errorMessage });\n throw err;\n }\n }\n\n async sync(params: {\n adapterKind: string;\n instanceId: string;\n windowStart?: string;\n signal?: AbortSignal;\n }): Promise<KnowledgeSyncRun> {\n const adapter = this.adapters.get(params.adapterKind);\n if (!adapter) {\n throw new Error(`Knowledge source adapter not found: ${params.adapterKind}`);\n }\n const cursorBefore = this.state.getCursor(params.instanceId);\n const run = startKnowledgeSyncRun({\n sourceInstanceId: params.instanceId,\n cursorBefore,\n });\n const controller = params.signal ? null : new AbortController();\n const signal = params.signal ?? controller!.signal;\n\n try {\n const pulled = await adapter.pull({\n instanceId: params.instanceId,\n cursor: cursorBefore,\n windowStart: params.windowStart,\n signal,\n });\n const stored = upsertKnowledgeSourceItems(pulled.items);\n this.state.setCursor(params.instanceId, pulled.nextCursor);\n const completed = finishKnowledgeSyncRun({\n runId: run.id,\n status: pulled.warnings.length > 0 ? 'partial' : 'succeeded',\n cursorAfter: pulled.nextCursor,\n itemsSeen: pulled.items.length,\n itemsCreated: stored.created,\n itemsUpdated: stored.updated,\n warnings: pulled.warnings,\n });\n log.info(\n {\n runId: run.id,\n sourceInstanceId: params.instanceId,\n itemsSeen: pulled.items.length,\n itemsCreated: stored.created,\n itemsUpdated: stored.updated,\n },\n 'Knowledge source sync completed',\n );\n return completed;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n const status = signal.aborted ? 'cancelled' : 'failed';\n log.warn(\n { err, runId: run.id, sourceInstanceId: params.instanceId },\n `Knowledge source sync ${status}: ${errorMessage}`,\n );\n return finishKnowledgeSyncRun({\n runId: run.id,\n status,\n error: errorMessage,\n });\n }\n }\n}\n"],"mappings":";;;;aAAkD;AAUlD,MAAM,MAAM,aAAa,qBAAqB;AAO9C,IAAa,kCAAb,MAAkF;CAChF,UAAU,YAAwC;AAChD,SAAO,yBAAyB,WAAW;;CAG7C,UAAU,YAAoB,QAAkC;AAC9D,2BAAyB,YAAY,OAAO;;;AAIhD,IAAa,4BAAb,MAAuC;CACrC,YACE,UACA,QAAoD,IAAI,iCAAiC,EACzF;AAFiB,OAAA,WAAA;AACA,OAAA,QAAA;;CAGnB,OAAO,QAKc;EACnB,MAAM,eAAe,KAAK,MAAM,UAAU,OAAO,WAAW;EAC5D,MAAM,MAAM,sBAAsB;GAAE,kBAAkB,OAAO;GAAY;GAAc,CAAC;AACxF,MAAI;GACF,MAAM,SAAS,2BAA2B,OAAO,MAAM;AACvD,QAAK,MAAM,UAAU,OAAO,YAAY,OAAO,YAAY;AAC3D,UAAO,uBAAuB;IAC5B,OAAO,IAAI;IACX,QAAQ,OAAO,UAAU,SAAS,YAAY;IAC9C,aAAa,OAAO;IACpB,WAAW,OAAO,MAAM;IACxB,cAAc,OAAO;IACrB,cAAc,OAAO;IACrB,UAAU,OAAO;IAClB,CAAC;WACK,KAAK;GACZ,MAAM,eAAe,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AACrE,0BAAuB;IAAE,OAAO,IAAI;IAAI,QAAQ;IAAU,OAAO;IAAc,CAAC;AAChF,SAAM;;;CAIV,MAAM,KAAK,QAKmB;EAC5B,MAAM,UAAU,KAAK,SAAS,IAAI,OAAO,YAAY;AACrD,MAAI,CAAC,QACH,OAAM,IAAI,MAAM,uCAAuC,OAAO,cAAc;EAE9E,MAAM,eAAe,KAAK,MAAM,UAAU,OAAO,WAAW;EAC5D,MAAM,MAAM,sBAAsB;GAChC,kBAAkB,OAAO;GACzB;GACD,CAAC;EACF,MAAM,aAAa,OAAO,SAAS,OAAO,IAAI,iBAAiB;EAC/D,MAAM,SAAS,OAAO,UAAU,WAAY;AAE5C,MAAI;GACF,MAAM,SAAS,MAAM,QAAQ,KAAK;IAChC,YAAY,OAAO;IACnB,QAAQ;IACR,aAAa,OAAO;IACpB;IACD,CAAC;GACF,MAAM,SAAS,2BAA2B,OAAO,MAAM;AACvD,QAAK,MAAM,UAAU,OAAO,YAAY,OAAO,WAAW;GAC1D,MAAM,YAAY,uBAAuB;IACvC,OAAO,IAAI;IACX,QAAQ,OAAO,SAAS,SAAS,IAAI,YAAY;IACjD,aAAa,OAAO;IACpB,WAAW,OAAO,MAAM;IACxB,cAAc,OAAO;IACrB,cAAc,OAAO;IACrB,UAAU,OAAO;IAClB,CAAC;AACF,OAAI,KACF;IACE,OAAO,IAAI;IACX,kBAAkB,OAAO;IACzB,WAAW,OAAO,MAAM;IACxB,cAAc,OAAO;IACrB,cAAc,OAAO;IACtB,EACD,kCACD;AACD,UAAO;WACA,KAAK;GACZ,MAAM,eAAe,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;GACrE,MAAM,SAAS,OAAO,UAAU,cAAc;AAC9C,OAAI,KACF;IAAE;IAAK,OAAO,IAAI;IAAI,kBAAkB,OAAO;IAAY,EAC3D,yBAAyB,OAAO,IAAI,eACrC;AACD,UAAO,uBAAuB;IAC5B,OAAO,IAAI;IACX;IACA,OAAO;IACR,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acceptance.js","names":[],"sources":["../../../src/local-apps/acceptance.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nconst MAX_SCENARIOS = 10;\nconst MAX_STEPS = 20;\nconst MAX_TEXT_LENGTH = 500;\nconst TEST_ID_PATTERN = /^[A-Za-z0-9_-]{1,80}$/;\n\nexport type LocalAppAcceptanceStep =\n | { action: 'click'; target: string }\n | { action: 'fill'; target: string; value: string }\n | { assert: 'text_visible'; text: string }\n | { assert: 'element_exists'; target: string }\n | { assert: 'value_equals'; target: string; value: string };\n\nexport interface LocalAppAcceptanceScenario {\n id: string;\n name: string;\n steps: LocalAppAcceptanceStep[];\n}\n\nexport interface LocalAppAcceptanceConfig {\n schemaVersion: 1;\n scenarios: LocalAppAcceptanceScenario[];\n}\n\nfunction requiredText(value: unknown, label: string, maxLength = MAX_TEXT_LENGTH): string {\n if (typeof value !== 'string' || !value.trim() || value.length > maxLength) {\n throw new Error(`${label} must be a non-empty string up to ${maxLength} characters`);\n }\n return value;\n}\n\nfunction boundedText(value: unknown, label: string): string {\n if (typeof value !== 'string' || value.length > MAX_TEXT_LENGTH) {\n throw new Error(`${label} must be a string up to ${MAX_TEXT_LENGTH} characters`);\n }\n return value;\n}\n\nfunction testId(value: unknown, label: string): string {\n const id = requiredText(value, label, 80);\n if (!TEST_ID_PATTERN.test(id)) {\n throw new Error(`${label} must use only letters, numbers, dashes, and underscores`);\n }\n return id;\n}\n\nfunction parseStep(value: unknown, label: string): LocalAppAcceptanceStep {\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error(`${label} must be an object`);\n const step = value as Record<string, unknown>;\n const hasOnly = (...keys: string[]) => Object.keys(step).every((key) => keys.includes(key));\n if (step.action === 'click' && hasOnly('action', 'target')) {\n return { action: 'click', target: testId(step.target, `${label}.target`) };\n }\n if (step.action === 'fill' && hasOnly('action', 'target', 'value')) {\n return { action: 'fill', target: testId(step.target, `${label}.target`), value: boundedText(step.value, `${label}.value`) };\n }\n if (step.assert === 'text_visible' && hasOnly('assert', 'text')) {\n return { assert: 'text_visible', text: requiredText(step.text, `${label}.text`) };\n }\n if (step.assert === 'element_exists' && hasOnly('assert', 'target')) {\n return { assert: 'element_exists', target: testId(step.target, `${label}.target`) };\n }\n if (step.assert === 'value_equals' && hasOnly('assert', 'target', 'value')) {\n return { assert: 'value_equals', target: testId(step.target, `${label}.target`), value: boundedText(step.value, `${label}.value`) };\n }\n throw new Error(`${label} uses an unsupported action or assertion`);\n}\n\nexport function parseLocalAppAcceptanceConfig(value: unknown): LocalAppAcceptanceConfig {\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('Acceptance config must be an object');\n const config = value as Record<string, unknown>;\n if (config.schemaVersion !== 1) throw new Error('Acceptance config schemaVersion must be 1');\n if (!Array.isArray(config.scenarios) || config.scenarios.length > MAX_SCENARIOS) {\n throw new Error(`Acceptance config must contain at most ${MAX_SCENARIOS} scenarios`);\n }\n const ids = new Set<string>();\n const scenarios = config.scenarios.map((value, scenarioIndex) => {\n const label = `Acceptance scenario ${scenarioIndex + 1}`;\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error(`${label} must be an object`);\n const scenario = value as Record<string, unknown>;\n const id = testId(scenario.id, `${label}.id`);\n if (ids.has(id)) throw new Error(`Acceptance scenario id is duplicated: ${id}`);\n ids.add(id);\n if (!Array.isArray(scenario.steps) || !scenario.steps.length || scenario.steps.length > MAX_STEPS) {\n throw new Error(`${label} must contain 1 to ${MAX_STEPS} steps`);\n }\n return {\n id,\n name: requiredText(scenario.name, `${label}.name`, 120),\n steps: scenario.steps.map((step, stepIndex) => parseStep(step, `${label} step ${stepIndex + 1}`)),\n };\n });\n return { schemaVersion: 1, scenarios };\n}\n\nexport function readLocalAppAcceptanceConfig(root: string): LocalAppAcceptanceConfig {\n const path = join(root, '.xopc', 'acceptance.json');\n if (!existsSync(path)) return { schemaVersion: 1, scenarios: [] };\n let value: unknown;\n try {\n value = JSON.parse(readFileSync(path, 'utf8'));\n } catch (error) {\n throw new Error(`Acceptance config is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n return parseLocalAppAcceptanceConfig(value);\n}\n\nexport function encodeLocalAppAcceptanceConfig(config: LocalAppAcceptanceConfig): string {\n return Buffer.from(JSON.stringify(config), 'utf8').toString('base64url');\n}\n"],"mappings":"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"}
|