@xopcai/xopc 0.0.251 → 0.0.253
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 +8 -5
- package/README.zh-CN.md +8 -5
- package/dist/browser-ext/dist/background.js +358 -768
- package/dist/browser-ext/manifest.json +1 -2
- package/dist/extensions/telegram/src/inbound-processor.js +2 -2
- package/dist/extensions/telegram/src/plugin.js +3 -2
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-DfBjTSo9.js → activity-store-CeS1bgXP.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Bo_dmLv8.js → agent-avatar-dicebear-BdF3HhCW.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Bs34Kp0K.js +1 -0
- package/dist/gateway/static/root/assets/{agents-yuUn8n-f.js → agents-DARlgjTm.js} +1 -1
- package/dist/gateway/static/root/assets/{api-zxpcJfgj.js → api-zMPeC0yU.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-Cz56nrVF.js → app-management-settings-panel-BaAFln8W.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DxSws5U4.js → appearance-settings-CXvsoBlw.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-BhgvfBJT.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-7k15-hqo.js → archive-plugin-C0o_mVQI.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-B-SFpjd9.js → attachment-load-B5Ry3tGL.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-Qy36j19q.js → automations-page-DY5QAEQd.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-BzX4lILP.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-CPOZQt8F.js → binary-plugins-BydpEgBA.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DhvVlIp9.js → block-editor-D0CpUOMo.js} +3 -3
- package/dist/gateway/static/root/assets/browser-automation-inputs-DzbTsGI6.js +1 -0
- package/dist/gateway/static/root/assets/browser-automations-page-D7fZYjni.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-BBdMqxl0.js +3 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-D_WfftDW.js +7 -0
- package/dist/gateway/static/root/assets/channels-settings-bdRLT9KA.js +1 -0
- package/dist/gateway/static/root/assets/{channels-status-swr-CX-yWwLD.js → channels-status-swr-BGGRTkn6.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-1PJoxRuV.js → chat-terminal-dock-_CP4nvlg.js} +2 -2
- package/dist/gateway/static/root/assets/connectors-page-CPDjU5wU.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-CBCc6zFA.js → cron-expression-g2U8Rllf.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-u8K5Kt_N.js → date-picker-SmVlhtj_.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-y_i_cnpz.js → dependency-picker-D-0gcbbM.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-DyL0JxLm.js → desktop-pet-Cl3JRIu6.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-d2d_IsyP.js → desktop-pet-settings-D7kvWQ9H.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DqIBKJwl.js → extension-debug-page-DtP2tJHY.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DUW1xxj2.js → extension-page-CphZDdoT.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BHY9qaNw.js → extension-settings-page-CsxVLV4-.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-CMNbl0FZ.js → gateway-config-swr-BW3Bx-aV.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-DxBZ05dX.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-CR7Xg8As.js → gateway-startup-retry-DAq74TZe.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-7CD9iPR7.js → heartbeat-settings-DWcKsIoZ.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-BdvLZKQZ.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-C5mn73ca.js → image-generation-api-MPuaXDRs.js} +1 -1
- package/dist/gateway/static/root/assets/index-C7RDs6S-.js +74 -0
- package/dist/gateway/static/root/assets/index-Cu8xqZQ9.css +2 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BtlqMleF.js → keyboard-shortcuts-settings-CfhaTqgE.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-BjxfkjxE.js → local-app-workbench-page-CR6asX7L.js} +2 -2
- package/dist/gateway/static/root/assets/{local-apps-page-B7xqQe2s.js → local-apps-page-g01W3kEK.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-CF4erhjB.js → locale-store-BkeaPZpn.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-kACaPZKL.js → logs-page-ZP4QTWoC.js} +2 -2
- package/dist/gateway/static/root/assets/{management-settings-A432siER.js → management-settings-DeGxJF_Z.js} +1 -1
- package/dist/gateway/static/root/assets/markdown-view-Ca7BRBLL.js +201 -0
- package/dist/gateway/static/root/assets/{media-plugins-CpvYiauZ.js → media-plugins-FmOhmzlD.js} +1 -1
- package/dist/gateway/static/root/assets/messages-C72stReU.js +3 -0
- package/dist/gateway/static/root/assets/{mobile-pairing-wizard-DyjVGngO.js → mobile-pairing-wizard-BXNbn05L.js} +1 -1
- package/dist/gateway/static/root/assets/note-detail-panel-EeVeF4II.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-D7bMff96.js +8 -0
- package/dist/gateway/static/root/assets/{page-tabs-B3FKzjR6.js → page-tabs-pyukZ1PJ.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-DnjrwAHD.js → preview-open-alternatives-slFHoMUe.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-COcr_NUJ.js → product-open-page-CXa3FNNk.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-BDF88VdN.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DeTD6pu1.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-BsRBlji7.js → registry-api-CviQoUBf.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CxKrdQ6a.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-LO4wZ_dO.js → runtime-tools-settings-panel-O9D9o7-O.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-crcj4-Pm.js → schema-form-8FesicnL.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-DUFJN-2t.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CcSYDjaH.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-Bl4MvTmq.js → settings-form-section-CBic9TFH.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-DplrjZ6x.js → settings-page-Xz66_Mjg.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-C6DuwrP5.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-CJP1kURj.js → share-preview-page--JpjwB58.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-CemgzEi4.js → shares-settings-CovcdHSC.js} +1 -1
- package/dist/gateway/static/root/assets/skill-reload-api-CrHagTsE.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-DsjcKg9Q.js → skills-page-fVKExKv5.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-D6gWBbvy.js → skills-page.utils-Yv9u3uJp.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-_eCXfqCo.js → system-settings-panel-CCWjVdc2.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-D0Z_K5JT.js → task-detail-page-I8hueJnG.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-BOgkc_9D.js → theme-store-BtkaVpMm.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-W5mktxl1.js → tunnel-api-C__W9BaN.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-Na2DYzT3.js → use-autosave-Dow9RRcq.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-CU6nxmoM.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-OXweUxS_.js → voice-api-key-field-CvF3lEyx.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-C-ryeIxj.js → voice-config-api-BEUVAyM6.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-BqOsO47I.js → work-discovery-overlay-B9PDfReq.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-B9S_lfT1.js → workflow-run-setup-panel-kWGFkhjz.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-B4Is5E42.js +5 -0
- package/dist/gateway/static/root/index.html +10 -10
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/new-session.js +9 -0
- package/dist/packages/realtime-protocol/src/voice.js +6 -1
- package/dist/src/agent/agent-manager.d.ts +2 -1
- package/dist/src/agent/agent-manager.js +26 -8
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/coding/repository-instructions.js +2 -2
- package/dist/src/agent/coding/workspace-revision.js +2 -2
- package/dist/src/agent/commands/command-isolation.js +2 -2
- package/dist/src/agent/embedded/execution-context.d.ts +2 -1
- package/dist/src/agent/embedded/execution-context.js +10 -4
- package/dist/src/agent/embedded/index.d.ts +1 -1
- package/dist/src/agent/embedded/index.js +2 -2
- package/dist/src/agent/embedded/model-runtime.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +5 -4
- package/dist/src/agent/embedded/run-turn.js +22 -3
- package/dist/src/agent/embedded/types.d.ts +1 -1
- package/dist/src/agent/external-tools/composio-provider.d.ts +1 -0
- package/dist/src/agent/external-tools/composio-provider.js +64 -34
- package/dist/src/agent/external-tools/search-error.js +5 -3
- package/dist/src/agent/image/tool-model-config.js +1 -1
- package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js +6 -3
- package/dist/src/agent/service/process-direct-streaming.js +6 -3
- package/dist/src/agent/service.d.ts +2 -0
- package/dist/src/agent/service.js +25 -10
- package/dist/src/agent/service.types.d.ts +2 -1
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +4 -0
- package/dist/src/agent/tasks/task-judge-service.js +3 -3
- package/dist/src/agent/tool-manuals/browser.d.ts +1 -1
- package/dist/src/agent/tool-manuals/browser.js +15 -226
- package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +4 -21
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +48 -165
- package/dist/src/agent/tools/browser/tool/schemas.d.ts +203 -16
- package/dist/src/agent/tools/browser/tool/schemas.js +146 -16
- package/dist/src/agent/tools/browser-automation-tool.d.ts +121 -0
- package/dist/src/agent/tools/browser-automation-tool.js +197 -0
- package/dist/src/agent/tools/clarify-tool.d.ts +17 -3
- package/dist/src/agent/tools/clarify-tool.js +27 -32
- package/dist/src/agent/tools/cli-clarify.js +23 -8
- package/dist/src/agent/tools/factory.d.ts +6 -9
- package/dist/src/agent/tools/factory.js +42 -59
- package/dist/src/agent/tools/index.d.ts +2 -2
- package/dist/src/agent/tools/index.js +3 -3
- package/dist/src/agent/tools/review-workspace.js +2 -2
- package/dist/src/ai-assist/text-assist.js +1 -1
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/oauth/xopc-cloud.js +3 -1
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +2 -2
- package/dist/src/automations/domain/defaults.js +1 -1
- package/dist/src/automations/domain/types.d.ts +5 -5
- package/dist/src/automations/domain/validation.d.ts +16 -16
- package/dist/src/automations/domain/validation.js +3 -3
- package/dist/src/automations/draft/automation-draft-validator.d.ts +4 -4
- package/dist/src/automations/draft/automation-draft-validator.js +1 -1
- package/dist/src/automations/service/action-executor.d.ts +1 -1
- package/dist/src/automations/service/action-executor.js +7 -7
- package/dist/src/browser/{recipes → automations}/index.d.ts +1 -0
- package/dist/src/browser/automations/index.js +4 -0
- package/dist/src/browser/automations/repository.d.ts +13 -0
- package/dist/src/browser/automations/repository.js +60 -0
- package/dist/src/browser/automations/runner.d.ts +17 -0
- package/dist/src/browser/automations/runner.js +173 -0
- package/dist/src/browser/automations/runtime-service.d.ts +6 -0
- package/dist/src/browser/automations/runtime-service.js +37 -0
- package/dist/src/browser/automations/schema.d.ts +144 -0
- package/dist/src/browser/automations/schema.js +135 -0
- package/dist/src/browser/automations/service.d.ts +146 -0
- package/dist/src/browser/automations/service.js +168 -0
- package/dist/src/browser/automations/types.d.ts +90 -0
- package/dist/src/browser/cache-dir-policy.d.ts +1 -1
- package/dist/src/browser/cache-dir-policy.js +1 -4
- package/dist/src/browser/drivers/browser-driver.d.ts +17 -0
- package/dist/src/browser/drivers/create-driver.d.ts +3 -0
- package/dist/src/browser/drivers/create-driver.js +84 -0
- package/dist/src/browser/drivers/extension-driver.d.ts +20 -0
- package/dist/src/browser/drivers/extension-driver.js +47 -0
- package/dist/src/browser/drivers/playwright-driver.d.ts +38 -0
- package/dist/src/browser/drivers/playwright-driver.js +406 -0
- package/dist/src/browser/index.d.ts +10 -15
- package/dist/src/browser/index.js +10 -15
- package/dist/src/browser/install-lock.d.ts +1 -2
- package/dist/src/browser/install-lock.js +3 -9
- package/dist/src/browser/install-progress.d.ts +1 -1
- package/dist/src/browser/observation/format.d.ts +2 -0
- package/dist/src/browser/observation/format.js +26 -0
- package/dist/src/browser/policy/approval-store.d.ts +17 -0
- package/dist/src/browser/policy/approval-store.js +62 -0
- package/dist/src/browser/policy/browser-policy.d.ts +3 -0
- package/dist/src/browser/policy/browser-policy.js +27 -0
- package/dist/src/browser/providers/browser-ext-install.d.ts +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +4 -6
- package/dist/src/browser/providers/browser-use.js +1 -1
- package/dist/src/browser/providers/browserbase.js +1 -1
- package/dist/src/browser/providers/extension-ws-acquire.d.ts +1 -4
- package/dist/src/browser/providers/extension-ws-acquire.js +1 -13
- package/dist/src/browser/providers/extension.d.ts +3 -22
- package/dist/src/browser/providers/extension.js +7 -15
- package/dist/src/browser/providers/index.d.ts +2 -2
- package/dist/src/browser/providers/index.js +3 -3
- package/dist/src/browser/providers/types.d.ts +0 -94
- package/dist/src/browser/readiness.d.ts +4 -22
- package/dist/src/browser/readiness.js +55 -118
- package/dist/src/browser/runtime/browser-runtime.d.ts +30 -0
- package/dist/src/browser/runtime/browser-runtime.js +362 -0
- package/dist/src/browser/url-policy.d.ts +3 -3
- package/dist/src/browser/url-policy.js +7 -6
- package/dist/src/browser/verification/expectation.d.ts +2 -0
- package/dist/src/browser/verification/expectation.js +17 -0
- package/dist/src/cli/command-loaders.js +1 -0
- package/dist/src/cli/command-manifest.js +5 -1
- package/dist/src/cli/commands/browser-cli-helpers.d.ts +0 -6
- package/dist/src/cli/commands/browser-cli-helpers.js +11 -144
- package/dist/src/cli/commands/browser.d.ts +0 -5
- package/dist/src/cli/commands/browser.js +11 -152
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/node-version.js +25 -9
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/platform.d.ts +1 -0
- package/dist/src/cli/commands/platform.js +111 -0
- package/dist/src/config/index.js +4 -4
- package/dist/src/config/loader.js +10 -4
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/schema.d.ts +131 -84
- package/dist/src/config/schema.js +112 -59
- package/dist/src/connectors/composio-sessions.js +1 -3
- package/dist/src/extensions/lockfile.js +1 -1
- package/dist/src/extensions/marketplace.js +4 -0
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/chat-stream/mapper.js +5 -1
- package/dist/src/gateway/chat-stream/protocol.d.ts +5 -1
- package/dist/src/gateway/clarify-runtime.d.ts +7 -5
- package/dist/src/gateway/clarify-runtime.js +8 -11
- package/dist/src/gateway/ephemeral-clarification-waiter.d.ts +17 -0
- package/dist/src/gateway/ephemeral-clarification-waiter.js +46 -0
- package/dist/src/gateway/file-path-classifier.js +1 -1
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +12 -26
- package/dist/src/gateway/hono/lib/config-payload.js +11 -40
- package/dist/src/gateway/hono/routes/agent-stream.js +44 -18
- package/dist/src/gateway/hono/routes/browser-automations.d.ts +3 -0
- package/dist/src/gateway/hono/routes/browser-automations.js +77 -0
- package/dist/src/gateway/hono/routes/browser-install.js +0 -32
- package/dist/src/gateway/hono/routes/browser.d.ts +0 -17
- package/dist/src/gateway/hono/routes/browser.js +46 -568
- package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -1
- package/dist/src/gateway/hono/routes/config.js +0 -11
- package/dist/src/gateway/hono/routes/lazy-bundles.js +5 -5
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +10 -2
- package/dist/src/gateway/hono/routes/side-chats.js +24 -4
- package/dist/src/gateway/security/gateway-scopes.js +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +25 -36
- package/dist/src/gateway/service/agent-runner.js +103 -32
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service/run-gateway-agent.js +5 -2
- package/dist/src/gateway/service/session-input-coordinator.js +4 -1
- package/dist/src/gateway/service/sessions-api.js +1 -1
- package/dist/src/gateway/service.d.ts +8 -8
- package/dist/src/gateway/service.js +50 -37
- package/dist/src/gateway/side-chat/manager.d.ts +2 -1
- package/dist/src/gateway/side-chat/manager.js +5 -4
- package/dist/src/gateway/side-chat/run-service.d.ts +5 -1
- package/dist/src/gateway/side-chat/run-service.js +24 -23
- package/dist/src/gateway/side-chat/types.d.ts +3 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/platform/client.d.ts +121 -0
- package/dist/src/platform/client.js +108 -0
- package/dist/src/platform/contracts.d.ts +194 -0
- package/dist/src/platform/contracts.js +150 -0
- package/dist/src/platform/index.d.ts +4 -0
- package/dist/src/platform/index.js +9 -0
- package/dist/src/platform/resolution.d.ts +4 -0
- package/dist/src/platform/resolution.js +16 -0
- package/dist/src/platform/worker.d.ts +6 -0
- package/dist/src/platform/worker.js +75 -0
- package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
- package/dist/src/providers/index.js +2 -2
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/providers/register-runtime-providers.js +1 -1
- package/dist/src/providers/xopc-cloud-config.js +3 -1
- package/dist/src/session/session-context-for-llm.js +41 -1
- package/dist/src/share/hosted-session-share.js +3 -1
- package/dist/src/share/share-thumbnail.js +1 -1
- package/dist/src/storage/sqlite/clarification-wait-repository.d.ts +41 -0
- package/dist/src/storage/sqlite/clarification-wait-repository.js +418 -0
- package/dist/src/storage/sqlite/index.d.ts +2 -1
- package/dist/src/storage/sqlite/index.js +2 -1
- package/dist/src/storage/sqlite/migrations/153_browser_control_v2.sql +45 -0
- package/dist/src/storage/sqlite/migrations/154_session_clarification_waits.sql +60 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +16 -20
- package/dist/src/storage/sqlite/session-input-repository.d.ts +11 -6
- package/dist/src/tasks/home-query-service.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/tunnel/env.js +3 -1
- package/dist/src/voice/realtime/agentEngine.js +7 -2
- package/dist/src/voice/realtime/runtime.types.d.ts +5 -0
- package/dist/src/work-discovery/service.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +1 -1
- package/package.json +7 -7
- package/skills/creative/hatch-pet/SKILL.md +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-kILWelNb.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-BnizTdgs.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-CZRKqSqY.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-pN5LbChY.js +0 -8
- package/dist/gateway/static/root/assets/browser-workflow-inputs-BX1-uM9L.js +0 -1
- package/dist/gateway/static/root/assets/browser-workflows-page-C65MI57t.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-settings-panel-CJw2e16J.js +0 -7
- package/dist/gateway/static/root/assets/channels-settings-CRgjb4Ck.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-Dcpdy06y.js +0 -2
- package/dist/gateway/static/root/assets/gateway-config-api-e3BRcgDx.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-Cheo0Rkc.js +0 -1
- package/dist/gateway/static/root/assets/home-page-DVrTRqNc.js +0 -1
- package/dist/gateway/static/root/assets/index-B7CX4Qob.css +0 -2
- package/dist/gateway/static/root/assets/index-BHrpyJ4t.js +0 -72
- package/dist/gateway/static/root/assets/markdown-view-CQvzsE24.js +0 -201
- package/dist/gateway/static/root/assets/messages-Cf5hpZE6.js +0 -3
- package/dist/gateway/static/root/assets/note-detail-panel-CUd8O4K7.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-BLQwd39W.js +0 -8
- package/dist/gateway/static/root/assets/project-detail-page-NttW338u.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-BzH8pjEz.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BxpjSDnL.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BLMaibOb.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BRvvKhoH.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DTOsxQC1.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-BWYanBlQ.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-B_-SNat-.js +0 -2
- package/dist/gateway/static/root/assets/workflows-page-CNOT2Coo.js +0 -5
- package/dist/src/agent/tools/browser-recipe-tool.d.ts +0 -12
- package/dist/src/agent/tools/browser-recipe-tool.js +0 -113
- package/dist/src/browser/actions/extension-registry-bridge.d.ts +0 -5
- package/dist/src/browser/actions/extension-registry-bridge.js +0 -312
- package/dist/src/browser/actions/registry.d.ts +0 -5
- package/dist/src/browser/actions/registry.js +0 -741
- package/dist/src/browser/actions/types.d.ts +0 -65
- package/dist/src/browser/backend-from-config.d.ts +0 -22
- package/dist/src/browser/backend-from-config.js +0 -99
- package/dist/src/browser/browser-command-timeout.d.ts +0 -2
- package/dist/src/browser/browser-command-timeout.js +0 -11
- package/dist/src/browser/cdp-local-launcher.d.ts +0 -35
- package/dist/src/browser/cdp-local-launcher.js +0 -154
- package/dist/src/browser/cdp-supervisor.d.ts +0 -58
- package/dist/src/browser/cdp-supervisor.js +0 -133
- package/dist/src/browser/humanize.d.ts +0 -80
- package/dist/src/browser/humanize.js +0 -363
- package/dist/src/browser/manager.d.ts +0 -50
- package/dist/src/browser/manager.js +0 -251
- package/dist/src/browser/pipeline/output.d.ts +0 -35
- package/dist/src/browser/pipeline/output.js +0 -74
- package/dist/src/browser/pipeline/runner.d.ts +0 -27
- package/dist/src/browser/pipeline/runner.js +0 -453
- package/dist/src/browser/pipeline/schema.d.ts +0 -42
- package/dist/src/browser/pipeline/schema.js +0 -116
- package/dist/src/browser/pipeline/template.d.ts +0 -30
- package/dist/src/browser/pipeline/template.js +0 -112
- package/dist/src/browser/providers/cloakbrowser.d.ts +0 -83
- package/dist/src/browser/providers/cloakbrowser.js +0 -612
- package/dist/src/browser/recipes/index.js +0 -3
- package/dist/src/browser/recipes/repository.d.ts +0 -13
- package/dist/src/browser/recipes/repository.js +0 -81
- package/dist/src/browser/recipes/runtime-service.d.ts +0 -6
- package/dist/src/browser/recipes/runtime-service.js +0 -30
- package/dist/src/browser/recipes/service.d.ts +0 -36
- package/dist/src/browser/recipes/service.js +0 -186
- package/dist/src/browser/recipes/types.d.ts +0 -36
- package/dist/src/browser/schemas.d.ts +0 -53
- package/dist/src/browser/schemas.js +0 -68
- package/dist/src/browser/session-lifecycle.d.ts +0 -40
- package/dist/src/browser/session-lifecycle.js +0 -136
- package/dist/src/browser/snapshot-helpers.d.ts +0 -24
- package/dist/src/browser/snapshot-helpers.js +0 -70
- package/dist/src/browser/stealth.d.ts +0 -46
- package/dist/src/browser/stealth.js +0 -163
- package/dist/src/gateway/clarify-bridge.d.ts +0 -46
- package/dist/src/gateway/clarify-bridge.js +0 -111
- package/dist/src/gateway/hono/routes/browser-workflows.d.ts +0 -3
- package/dist/src/gateway/hono/routes/browser-workflows.js +0 -78
- /package/dist/src/browser/{actions → automations}/types.js +0 -0
- /package/dist/src/browser/{recipes/types.js → drivers/browser-driver.js} +0 -0
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser Action types — shared by browser_use tool, CLI, and pipeline runner.
|
|
3
|
-
*/
|
|
4
|
-
import type { Page } from 'playwright-core';
|
|
5
|
-
import type { Config } from '../../config/schema.js';
|
|
6
|
-
import type { BrowserManager } from '../manager.js';
|
|
7
|
-
import type { CdpSupervisor } from '../cdp-supervisor.js';
|
|
8
|
-
export type BrowserActionName = 'open' | 'navigate' | 'state' | 'snapshot' | 'click' | 'type' | 'input' | 'scroll' | 'screenshot' | 'back' | 'keys' | 'press' | 'console' | 'eval' | 'evaluate' | 'images' | 'dialog' | 'cdp' | 'close' | 'wait' | 'assert' | 'output' | 'network_start' | 'network_events' | 'network_stop' | 'wait_for_navigation' | 'wait_for_timeout' | 'wait_for_function' | 'wait_for_network_idle' | 'element_text' | 'element_attribute' | 'bounding_box' | 'set_input_files' | 'cookies' | 'get_cookies' | 'add_cookies' | 'clear_cookies' | 'tabs' | 'list_tabs' | 'new_tab' | 'switch_tab' | 'select' | 'map' | 'filter' | 'sort' | 'limit' | 'fetch' | 'collect' | 'tap';
|
|
9
|
-
export interface BrowserArtifact {
|
|
10
|
-
type: 'screenshot' | 'file' | 'network_har';
|
|
11
|
-
path?: string;
|
|
12
|
-
/** Base64 data (screenshots returned inline when no path). */
|
|
13
|
-
data?: string;
|
|
14
|
-
mimeType?: string;
|
|
15
|
-
}
|
|
16
|
-
export interface BrowserDiagnostics {
|
|
17
|
-
url?: string;
|
|
18
|
-
title?: string;
|
|
19
|
-
snapshot?: string;
|
|
20
|
-
screenshot?: string;
|
|
21
|
-
console?: string[];
|
|
22
|
-
network?: string[];
|
|
23
|
-
warnings?: string[];
|
|
24
|
-
}
|
|
25
|
-
export interface BrowserActionResult {
|
|
26
|
-
ok: boolean;
|
|
27
|
-
/** The action that was executed. */
|
|
28
|
-
action: string;
|
|
29
|
-
/** Structured output data (e.g. extracted content, page state). */
|
|
30
|
-
data?: unknown;
|
|
31
|
-
/** Text summary for display / LLM consumption. */
|
|
32
|
-
text?: string;
|
|
33
|
-
/** Error details on failure. */
|
|
34
|
-
error?: {
|
|
35
|
-
code: string;
|
|
36
|
-
message: string;
|
|
37
|
-
};
|
|
38
|
-
artifacts?: BrowserArtifact[];
|
|
39
|
-
diagnostics?: BrowserDiagnostics;
|
|
40
|
-
}
|
|
41
|
-
export interface BrowserActionContext {
|
|
42
|
-
page: Page;
|
|
43
|
-
manager: BrowserManager;
|
|
44
|
-
config: Config | undefined;
|
|
45
|
-
taskId: string;
|
|
46
|
-
supervisor?: CdpSupervisor;
|
|
47
|
-
signal?: AbortSignal;
|
|
48
|
-
pipeline?: {
|
|
49
|
-
args: Record<string, unknown>;
|
|
50
|
-
last: unknown;
|
|
51
|
-
outputs: unknown[];
|
|
52
|
-
vars: Record<string, unknown>;
|
|
53
|
-
error?: {
|
|
54
|
-
code?: string;
|
|
55
|
-
message?: string;
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
export type BrowserActionHandler = (ctx: BrowserActionContext, args: Record<string, unknown>) => Promise<BrowserActionResult>;
|
|
60
|
-
export interface BrowserActionRegistry {
|
|
61
|
-
get(name: string): BrowserActionHandler | undefined;
|
|
62
|
-
has(name: string): boolean;
|
|
63
|
-
names(): string[];
|
|
64
|
-
execute(name: string, ctx: BrowserActionContext, args: Record<string, unknown>): Promise<BrowserActionResult>;
|
|
65
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { Config } from '../config/schema.js';
|
|
2
|
-
import type { BrowserBackend, CloakBrowserConfig } from './providers/types.js';
|
|
3
|
-
export interface ExtensionBridgeServerConfig {
|
|
4
|
-
host: string;
|
|
5
|
-
port: number;
|
|
6
|
-
connectionTimeout?: number;
|
|
7
|
-
commandTimeout?: number;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Whether the gateway should keep the Chrome extension WebSocket bridge listening.
|
|
11
|
-
* True when browser tools are enabled and the resolved backend is extension (including default).
|
|
12
|
-
*/
|
|
13
|
-
export declare function shouldRunExtensionBridgeServer(cfg: Config | undefined): boolean;
|
|
14
|
-
/** Resolve the extension bridge listener config, or null when that backend is inactive. */
|
|
15
|
-
export declare function resolveExtensionBridgeServerConfig(cfg: Config | undefined): ExtensionBridgeServerConfig | null;
|
|
16
|
-
/**
|
|
17
|
-
* Resolve browser backend from root browser runtime config.
|
|
18
|
-
* Precedence: `backend: 'extension'` → `cloakbrowser` → `cdpUrl` (CDP) → `cloudProvider` (remote) → `local` (explicit) → extension (default).
|
|
19
|
-
*/
|
|
20
|
-
export declare function resolveBrowserBackendFromConfig(cfg: Config | undefined): BrowserBackend;
|
|
21
|
-
/** CloakBrowser launch options aligned with saved agent defaults (headed for manual use). */
|
|
22
|
-
export declare function cloakBrowserConfigFromAgentDefaults(cfg: Config | undefined): CloakBrowserConfig;
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
//#region src/browser/backend-from-config.ts
|
|
2
|
-
const DEFAULT_EXTENSION_HOST = "127.0.0.1";
|
|
3
|
-
const DEFAULT_EXTENSION_PORT = 19820;
|
|
4
|
-
/**
|
|
5
|
-
* Whether the gateway should keep the Chrome extension WebSocket bridge listening.
|
|
6
|
-
* True when browser tools are enabled and the resolved backend is extension (including default).
|
|
7
|
-
*/
|
|
8
|
-
function shouldRunExtensionBridgeServer(cfg) {
|
|
9
|
-
return cfg?.browser?.enabled !== false && resolveBrowserBackendFromConfig(cfg).mode === "extension";
|
|
10
|
-
}
|
|
11
|
-
/** Resolve the extension bridge listener config, or null when that backend is inactive. */
|
|
12
|
-
function resolveExtensionBridgeServerConfig(cfg) {
|
|
13
|
-
if (!shouldRunExtensionBridgeServer(cfg)) return null;
|
|
14
|
-
const backend = resolveBrowserBackendFromConfig(cfg);
|
|
15
|
-
if (backend.mode !== "extension") return null;
|
|
16
|
-
const config = backend.config;
|
|
17
|
-
return {
|
|
18
|
-
host: config?.host ?? DEFAULT_EXTENSION_HOST,
|
|
19
|
-
port: config?.port ?? DEFAULT_EXTENSION_PORT,
|
|
20
|
-
...config?.connectionTimeout !== void 0 ? { connectionTimeout: config.connectionTimeout } : {},
|
|
21
|
-
...config?.commandTimeout !== void 0 ? { commandTimeout: config.commandTimeout } : {}
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Resolve browser backend from root browser runtime config.
|
|
26
|
-
* Precedence: `backend: 'extension'` → `cloakbrowser` → `cdpUrl` (CDP) → `cloudProvider` (remote) → `local` (explicit) → extension (default).
|
|
27
|
-
*/
|
|
28
|
-
function resolveBrowserBackendFromConfig(cfg) {
|
|
29
|
-
const browser = cfg?.browser;
|
|
30
|
-
if (browser?.enabled === false) return {
|
|
31
|
-
mode: "extension",
|
|
32
|
-
config: {}
|
|
33
|
-
};
|
|
34
|
-
const commandTimeout = resolveCommandTimeoutMs(browser?.commandTimeout);
|
|
35
|
-
const backend = browser?.backend ?? "extension";
|
|
36
|
-
if (backend === "extension") {
|
|
37
|
-
const ext = browser?.extension;
|
|
38
|
-
return {
|
|
39
|
-
mode: "extension",
|
|
40
|
-
config: {
|
|
41
|
-
...ext?.port !== void 0 ? { port: ext.port } : {},
|
|
42
|
-
...ext?.host ? { host: ext.host } : {},
|
|
43
|
-
...ext?.connectionTimeout !== void 0 ? { connectionTimeout: ext.connectionTimeout } : {},
|
|
44
|
-
commandTimeout
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
if (backend === "cloakbrowser") return {
|
|
49
|
-
mode: "cloakbrowser",
|
|
50
|
-
config: cloakBrowserConfigFromAgentDefaults(cfg)
|
|
51
|
-
};
|
|
52
|
-
if (backend === "cdp" && browser?.cdpUrl?.trim()) return {
|
|
53
|
-
mode: "cdp",
|
|
54
|
-
config: { wsEndpoint: browser.cdpUrl.trim() }
|
|
55
|
-
};
|
|
56
|
-
if (backend === "cloud") return {
|
|
57
|
-
mode: "cloud",
|
|
58
|
-
config: {
|
|
59
|
-
type: browser?.cloudProvider === "browserbase" || browser?.cloudProvider === "browser-use" ? browser.cloudProvider : "browserbase",
|
|
60
|
-
...browser?.cloud?.apiKey ? { apiKey: browser.cloud.apiKey } : {},
|
|
61
|
-
...browser?.cloud?.projectId ? { projectId: browser.cloud.projectId } : {},
|
|
62
|
-
...browser?.cloud?.region ? { region: browser.cloud.region } : {}
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
if (backend === "local") return {
|
|
66
|
-
mode: "local",
|
|
67
|
-
headless: browser?.headless === true
|
|
68
|
-
};
|
|
69
|
-
return {
|
|
70
|
-
mode: "extension",
|
|
71
|
-
config: { commandTimeout }
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
/** CloakBrowser launch options aligned with saved agent defaults (headed for manual use). */
|
|
75
|
-
function cloakBrowserConfigFromAgentDefaults(cfg) {
|
|
76
|
-
const browser = cfg?.browser;
|
|
77
|
-
const cloak = browser?.cloakbrowser;
|
|
78
|
-
return {
|
|
79
|
-
headless: false,
|
|
80
|
-
...cloak?.keepOpen !== void 0 ? { keepOpen: cloak.keepOpen } : {},
|
|
81
|
-
...cloak?.temporaryProfile !== void 0 ? { temporaryProfile: cloak.temporaryProfile } : {},
|
|
82
|
-
...cloak?.cacheDir ? { cacheDir: cloak.cacheDir } : {},
|
|
83
|
-
...cloak?.binaryPath ? { binaryPath: cloak.binaryPath } : {},
|
|
84
|
-
...cloak?.timezone ? { timezone: cloak.timezone } : {},
|
|
85
|
-
...cloak?.locale ? { locale: cloak.locale } : {},
|
|
86
|
-
...cloak?.webrtcIp ? { webrtcIp: cloak.webrtcIp } : {},
|
|
87
|
-
...cloak?.fingerprintPlatform ? { fingerprintPlatform: cloak.fingerprintPlatform } : {},
|
|
88
|
-
...cloak?.extraArgs ? { extraArgs: cloak.extraArgs } : {},
|
|
89
|
-
humanize: browser?.humanize ?? true,
|
|
90
|
-
humanPreset: browser?.humanPreset ?? "careful",
|
|
91
|
-
reuseExisting: true
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
function resolveCommandTimeoutMs(value) {
|
|
95
|
-
if (typeof value !== "number" || !Number.isFinite(value)) return 3e4;
|
|
96
|
-
return Math.min(900, Math.max(5, Math.floor(value))) * 1e3;
|
|
97
|
-
}
|
|
98
|
-
//#endregion
|
|
99
|
-
export { cloakBrowserConfigFromAgentDefaults, resolveBrowserBackendFromConfig, resolveExtensionBridgeServerConfig, shouldRunExtensionBridgeServer };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
//#region src/browser/browser-command-timeout.ts
|
|
2
|
-
const DEFAULT_MS = 3e4;
|
|
3
|
-
const MIN_SEC = 5;
|
|
4
|
-
const MAX_SEC = 900;
|
|
5
|
-
function resolveBrowserCommandTimeoutMs(cfg) {
|
|
6
|
-
const raw = cfg?.browser?.commandTimeout;
|
|
7
|
-
if (typeof raw !== "number" || !Number.isFinite(raw)) return DEFAULT_MS;
|
|
8
|
-
return Math.min(MAX_SEC, Math.max(MIN_SEC, Math.floor(raw))) * 1e3;
|
|
9
|
-
}
|
|
10
|
-
//#endregion
|
|
11
|
-
export { resolveBrowserCommandTimeoutMs };
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Launches a Chromium / Chrome instance locally with `--remote-debugging-port`
|
|
3
|
-
* so the user can wire CDP backend without typing the command themselves.
|
|
4
|
-
*
|
|
5
|
-
* Instances live for the lifetime of the gateway process (no on-disk state).
|
|
6
|
-
* Launching binds the debug port to 127.0.0.1; the user-data-dir is rooted
|
|
7
|
-
* under `~/.xopc/cdp-launch/` and removed on stop.
|
|
8
|
-
*/
|
|
9
|
-
export interface LaunchedCdpInstance {
|
|
10
|
-
/** Debug port the instance listens on (loopback). */
|
|
11
|
-
port: number;
|
|
12
|
-
/** Browser-level WS endpoint, ready for Playwright `connectOverCDP`. */
|
|
13
|
-
wsEndpoint: string;
|
|
14
|
-
/** Browser process pid. */
|
|
15
|
-
pid: number;
|
|
16
|
-
/** Resolved Chrome / Chromium binary path used to spawn. */
|
|
17
|
-
executablePath: string;
|
|
18
|
-
/** Temporary `--user-data-dir`. Deleted on stop. */
|
|
19
|
-
userDataDir: string;
|
|
20
|
-
/** Wall-clock spawn time (ms epoch). */
|
|
21
|
-
startedAt: number;
|
|
22
|
-
}
|
|
23
|
-
/** Resolve a Chrome / Chromium executable for the current platform. */
|
|
24
|
-
export declare function resolveChromeBinary(override?: string): Promise<string>;
|
|
25
|
-
export interface LaunchOptions {
|
|
26
|
-
/** Optional override for the Chrome / Chromium binary. */
|
|
27
|
-
executablePath?: string;
|
|
28
|
-
/** Run headless. Default false (visible window so user can interact). */
|
|
29
|
-
headless?: boolean;
|
|
30
|
-
}
|
|
31
|
-
export declare function launchLocalCdpChrome(opts?: LaunchOptions): Promise<LaunchedCdpInstance>;
|
|
32
|
-
export declare function stopLocalCdpChrome(port: number): Promise<boolean>;
|
|
33
|
-
export declare function listLocalCdpInstances(): LaunchedCdpInstance[];
|
|
34
|
-
/** Graceful shutdown — call from gateway exit hooks. */
|
|
35
|
-
export declare function stopAllLocalCdpChromes(): Promise<void>;
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { createLogger } from "../utils/logger/index.js";
|
|
2
|
-
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { loadPlaywrightCoreModule } from "./providers/playwright-doctor.js";
|
|
4
|
-
import { pickFreePort } from "./free-port.js";
|
|
5
|
-
import { homedir, platform } from "node:os";
|
|
6
|
-
import { join } from "node:path";
|
|
7
|
-
import { existsSync } from "node:fs";
|
|
8
|
-
import { spawn } from "node:child_process";
|
|
9
|
-
import { mkdir, rm } from "node:fs/promises";
|
|
10
|
-
//#region src/browser/cdp-local-launcher.ts
|
|
11
|
-
/**
|
|
12
|
-
* Launches a Chromium / Chrome instance locally with `--remote-debugging-port`
|
|
13
|
-
* so the user can wire CDP backend without typing the command themselves.
|
|
14
|
-
*
|
|
15
|
-
* Instances live for the lifetime of the gateway process (no on-disk state).
|
|
16
|
-
* Launching binds the debug port to 127.0.0.1; the user-data-dir is rooted
|
|
17
|
-
* under `~/.xopc/cdp-launch/` and removed on stop.
|
|
18
|
-
*/
|
|
19
|
-
init_logger();
|
|
20
|
-
const log = createLogger("CdpLocalLauncher");
|
|
21
|
-
const READY_TIMEOUT_MS = 2e4;
|
|
22
|
-
const READY_POLL_INTERVAL_MS = 250;
|
|
23
|
-
const instances = /* @__PURE__ */ new Map();
|
|
24
|
-
function defaultUserDataRoot() {
|
|
25
|
-
return join(homedir(), ".xopc", "cdp-launch");
|
|
26
|
-
}
|
|
27
|
-
/** Resolve a Chrome / Chromium executable for the current platform. */
|
|
28
|
-
async function resolveChromeBinary(override) {
|
|
29
|
-
if (override && override.trim()) {
|
|
30
|
-
const candidate = override.trim();
|
|
31
|
-
if (!existsSync(candidate)) throw new Error(`Chrome executable not found at ${candidate}`);
|
|
32
|
-
return candidate;
|
|
33
|
-
}
|
|
34
|
-
try {
|
|
35
|
-
const pw = await loadPlaywrightCoreModule();
|
|
36
|
-
const exec = (pw.chromium ?? pw.default?.chromium)?.executablePath?.();
|
|
37
|
-
if (exec && existsSync(exec)) return exec;
|
|
38
|
-
} catch {}
|
|
39
|
-
const os = platform();
|
|
40
|
-
const probes = os === "darwin" ? [
|
|
41
|
-
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
|
|
42
|
-
"/Applications/Chromium.app/Contents/MacOS/Chromium",
|
|
43
|
-
"/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"
|
|
44
|
-
] : os === "win32" ? ["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"] : [
|
|
45
|
-
"/usr/bin/google-chrome",
|
|
46
|
-
"/usr/bin/chromium",
|
|
47
|
-
"/usr/bin/chromium-browser",
|
|
48
|
-
"/snap/bin/chromium"
|
|
49
|
-
];
|
|
50
|
-
for (const path of probes) if (existsSync(path)) return path;
|
|
51
|
-
throw new Error("No Chrome / Chromium binary found. Install Chrome or run `npx playwright install chromium` first.");
|
|
52
|
-
}
|
|
53
|
-
async function waitForCdpEndpoint(port) {
|
|
54
|
-
const deadline = Date.now() + READY_TIMEOUT_MS;
|
|
55
|
-
while (Date.now() < deadline) {
|
|
56
|
-
try {
|
|
57
|
-
const res = await fetch(`http://127.0.0.1:${port}/json/version`, { signal: AbortSignal.timeout(1500) });
|
|
58
|
-
if (res.ok) {
|
|
59
|
-
const data = await res.json();
|
|
60
|
-
if (data.webSocketDebuggerUrl) return data.webSocketDebuggerUrl;
|
|
61
|
-
}
|
|
62
|
-
} catch {}
|
|
63
|
-
await new Promise((r) => setTimeout(r, READY_POLL_INTERVAL_MS));
|
|
64
|
-
}
|
|
65
|
-
throw new Error(`Chrome did not expose CDP within ${READY_TIMEOUT_MS / 1e3}s on port ${port}`);
|
|
66
|
-
}
|
|
67
|
-
async function launchLocalCdpChrome(opts = {}) {
|
|
68
|
-
const executablePath = await resolveChromeBinary(opts.executablePath);
|
|
69
|
-
const port = await pickFreePort();
|
|
70
|
-
const root = defaultUserDataRoot();
|
|
71
|
-
await mkdir(root, { recursive: true });
|
|
72
|
-
const userDataDir = join(root, `${process.pid}-${port}`);
|
|
73
|
-
await mkdir(userDataDir, { recursive: true });
|
|
74
|
-
const args = [
|
|
75
|
-
`--remote-debugging-address=127.0.0.1`,
|
|
76
|
-
`--remote-debugging-port=${port}`,
|
|
77
|
-
`--user-data-dir=${userDataDir}`,
|
|
78
|
-
"--no-first-run",
|
|
79
|
-
"--no-default-browser-check"
|
|
80
|
-
];
|
|
81
|
-
if (opts.headless) args.push("--headless=new");
|
|
82
|
-
if (platform() === "darwin") args.push("--use-mock-keychain");
|
|
83
|
-
log.info({
|
|
84
|
-
executablePath,
|
|
85
|
-
port,
|
|
86
|
-
userDataDir
|
|
87
|
-
}, "Spawning local debuggable Chrome");
|
|
88
|
-
const child = spawn(executablePath, args, {
|
|
89
|
-
stdio: [
|
|
90
|
-
"ignore",
|
|
91
|
-
"ignore",
|
|
92
|
-
"ignore"
|
|
93
|
-
],
|
|
94
|
-
detached: false
|
|
95
|
-
});
|
|
96
|
-
const launchFailure = new Promise((_resolve, reject) => {
|
|
97
|
-
const onErr = (err) => reject(/* @__PURE__ */ new Error(`spawn failed: ${err.message}`));
|
|
98
|
-
const onExit = (code, signal) => {
|
|
99
|
-
const reason = signal ? `signal ${signal}` : `exit ${code ?? "unknown"}`;
|
|
100
|
-
reject(/* @__PURE__ */ new Error(`Chrome exited before CDP came up (${reason})`));
|
|
101
|
-
};
|
|
102
|
-
child.once("error", onErr);
|
|
103
|
-
child.once("exit", onExit);
|
|
104
|
-
});
|
|
105
|
-
let wsEndpoint;
|
|
106
|
-
try {
|
|
107
|
-
wsEndpoint = await Promise.race([waitForCdpEndpoint(port), launchFailure]);
|
|
108
|
-
} catch (e) {
|
|
109
|
-
child.kill();
|
|
110
|
-
await rm(userDataDir, {
|
|
111
|
-
recursive: true,
|
|
112
|
-
force: true
|
|
113
|
-
}).catch(() => {});
|
|
114
|
-
throw e;
|
|
115
|
-
}
|
|
116
|
-
const entry = {
|
|
117
|
-
port,
|
|
118
|
-
wsEndpoint,
|
|
119
|
-
pid: child.pid ?? -1,
|
|
120
|
-
executablePath,
|
|
121
|
-
userDataDir,
|
|
122
|
-
startedAt: Date.now(),
|
|
123
|
-
child
|
|
124
|
-
};
|
|
125
|
-
instances.set(port, entry);
|
|
126
|
-
child.once("exit", () => {
|
|
127
|
-
instances.delete(port);
|
|
128
|
-
rm(userDataDir, {
|
|
129
|
-
recursive: true,
|
|
130
|
-
force: true
|
|
131
|
-
}).catch(() => {});
|
|
132
|
-
log.info({ port }, "Local CDP Chrome exited");
|
|
133
|
-
});
|
|
134
|
-
return toPublic(entry);
|
|
135
|
-
}
|
|
136
|
-
async function stopLocalCdpChrome(port) {
|
|
137
|
-
const entry = instances.get(port);
|
|
138
|
-
if (!entry) return false;
|
|
139
|
-
entry.child.kill();
|
|
140
|
-
return true;
|
|
141
|
-
}
|
|
142
|
-
function listLocalCdpInstances() {
|
|
143
|
-
return [...instances.values()].map(toPublic);
|
|
144
|
-
}
|
|
145
|
-
function toPublic(entry) {
|
|
146
|
-
const { child: _child, ...pub } = entry;
|
|
147
|
-
return pub;
|
|
148
|
-
}
|
|
149
|
-
/** Graceful shutdown — call from gateway exit hooks. */
|
|
150
|
-
async function stopAllLocalCdpChromes() {
|
|
151
|
-
for (const [port] of instances) await stopLocalCdpChrome(port);
|
|
152
|
-
}
|
|
153
|
-
//#endregion
|
|
154
|
-
export { launchLocalCdpChrome, listLocalCdpInstances, resolveChromeBinary, stopAllLocalCdpChromes, stopLocalCdpChrome };
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type { Page } from 'playwright-core';
|
|
2
|
-
/** Represents a captured JS dialog event. */
|
|
3
|
-
export interface DialogEvent {
|
|
4
|
-
id: string;
|
|
5
|
-
type: 'alert' | 'confirm' | 'prompt' | 'beforeunload';
|
|
6
|
-
message: string;
|
|
7
|
-
defaultValue: string;
|
|
8
|
-
timestamp: number;
|
|
9
|
-
handled: boolean;
|
|
10
|
-
response?: 'accepted' | 'dismissed';
|
|
11
|
-
}
|
|
12
|
-
/** Console message captured by the supervisor. */
|
|
13
|
-
export interface ConsoleEntry {
|
|
14
|
-
type: string;
|
|
15
|
-
text: string;
|
|
16
|
-
timestamp: number;
|
|
17
|
-
}
|
|
18
|
-
export type DialogPolicy = 'must_respond' | 'auto_dismiss' | 'auto_accept';
|
|
19
|
-
export interface CdpSupervisorOptions {
|
|
20
|
-
dialogPolicy: DialogPolicy;
|
|
21
|
-
dialogTimeoutSeconds: number;
|
|
22
|
-
maxConsoleEntries: number;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* CDP Supervisor — persistent event listener for browser pages.
|
|
26
|
-
*
|
|
27
|
-
* Monitors Dialog events, console output, and frame navigation.
|
|
28
|
-
* Aligned with hermes-agent's `CDPSupervisor` pattern but using
|
|
29
|
-
* Playwright's high-level event API instead of raw CDP WebSocket.
|
|
30
|
-
*/
|
|
31
|
-
export declare class CdpSupervisor {
|
|
32
|
-
private readonly options;
|
|
33
|
-
private dialogQueue;
|
|
34
|
-
private consoleBuffer;
|
|
35
|
-
private attachedPages;
|
|
36
|
-
private dialogCounter;
|
|
37
|
-
private pendingDialog;
|
|
38
|
-
constructor(options?: Partial<CdpSupervisorOptions>);
|
|
39
|
-
/** Attach the supervisor to a page to begin monitoring. */
|
|
40
|
-
attach(page: Page): void;
|
|
41
|
-
/** Get all pending (unhandled) dialogs. */
|
|
42
|
-
getPendingDialogs(): DialogEvent[];
|
|
43
|
-
/** Get all captured dialog events (including handled). */
|
|
44
|
-
getAllDialogs(): DialogEvent[];
|
|
45
|
-
/** Get recent console entries. */
|
|
46
|
-
getConsoleEntries(limit?: number): ConsoleEntry[];
|
|
47
|
-
/** Handle a pending dialog by id or the most recent one. */
|
|
48
|
-
handleDialog(action: 'accept' | 'dismiss', options?: {
|
|
49
|
-
dialogId?: string;
|
|
50
|
-
promptText?: string;
|
|
51
|
-
}): Promise<DialogEvent | undefined>;
|
|
52
|
-
/** Clear all dialog history. */
|
|
53
|
-
clearDialogs(): void;
|
|
54
|
-
/** Clear console buffer. */
|
|
55
|
-
clearConsole(): void;
|
|
56
|
-
private _onDialog;
|
|
57
|
-
private _onConsole;
|
|
58
|
-
}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { createLogger } from "../utils/logger/index.js";
|
|
2
|
-
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
//#region src/browser/cdp-supervisor.ts
|
|
4
|
-
init_logger();
|
|
5
|
-
const log = createLogger("CDPSupervisor");
|
|
6
|
-
const DEFAULT_OPTIONS = {
|
|
7
|
-
dialogPolicy: "auto_dismiss",
|
|
8
|
-
dialogTimeoutSeconds: 300,
|
|
9
|
-
maxConsoleEntries: 200
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* CDP Supervisor — persistent event listener for browser pages.
|
|
13
|
-
*
|
|
14
|
-
* Monitors Dialog events, console output, and frame navigation.
|
|
15
|
-
* Aligned with hermes-agent's `CDPSupervisor` pattern but using
|
|
16
|
-
* Playwright's high-level event API instead of raw CDP WebSocket.
|
|
17
|
-
*/
|
|
18
|
-
var CdpSupervisor = class {
|
|
19
|
-
options;
|
|
20
|
-
dialogQueue = [];
|
|
21
|
-
consoleBuffer = [];
|
|
22
|
-
attachedPages = /* @__PURE__ */ new WeakSet();
|
|
23
|
-
dialogCounter = 0;
|
|
24
|
-
pendingDialog = null;
|
|
25
|
-
constructor(options) {
|
|
26
|
-
this.options = {
|
|
27
|
-
...DEFAULT_OPTIONS,
|
|
28
|
-
...options
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/** Attach the supervisor to a page to begin monitoring. */
|
|
32
|
-
attach(page) {
|
|
33
|
-
if (this.attachedPages.has(page)) return;
|
|
34
|
-
this.attachedPages.add(page);
|
|
35
|
-
page.on("dialog", (dialog) => this._onDialog(dialog));
|
|
36
|
-
page.on("console", (msg) => this._onConsole(msg));
|
|
37
|
-
page.on("close", () => this.attachedPages.delete(page));
|
|
38
|
-
log.debug("Supervisor attached to page");
|
|
39
|
-
}
|
|
40
|
-
/** Get all pending (unhandled) dialogs. */
|
|
41
|
-
getPendingDialogs() {
|
|
42
|
-
return this.dialogQueue.filter((d) => !d.handled);
|
|
43
|
-
}
|
|
44
|
-
/** Get all captured dialog events (including handled). */
|
|
45
|
-
getAllDialogs() {
|
|
46
|
-
return [...this.dialogQueue];
|
|
47
|
-
}
|
|
48
|
-
/** Get recent console entries. */
|
|
49
|
-
getConsoleEntries(limit) {
|
|
50
|
-
const max = limit ?? this.options.maxConsoleEntries;
|
|
51
|
-
return this.consoleBuffer.slice(-max);
|
|
52
|
-
}
|
|
53
|
-
/** Handle a pending dialog by id or the most recent one. */
|
|
54
|
-
async handleDialog(action, options) {
|
|
55
|
-
let targetEvent;
|
|
56
|
-
if (options?.dialogId) targetEvent = this.dialogQueue.find((d) => d.id === options.dialogId && !d.handled);
|
|
57
|
-
else targetEvent = this.dialogQueue.findLast((d) => !d.handled);
|
|
58
|
-
if (!targetEvent) return void 0;
|
|
59
|
-
if (this.pendingDialog) {
|
|
60
|
-
try {
|
|
61
|
-
if (action === "accept") await this.pendingDialog.accept(options?.promptText ?? "");
|
|
62
|
-
else await this.pendingDialog.dismiss();
|
|
63
|
-
} catch {}
|
|
64
|
-
this.pendingDialog = null;
|
|
65
|
-
}
|
|
66
|
-
targetEvent.handled = true;
|
|
67
|
-
targetEvent.response = action === "accept" ? "accepted" : "dismissed";
|
|
68
|
-
return targetEvent;
|
|
69
|
-
}
|
|
70
|
-
/** Clear all dialog history. */
|
|
71
|
-
clearDialogs() {
|
|
72
|
-
this.dialogQueue = [];
|
|
73
|
-
}
|
|
74
|
-
/** Clear console buffer. */
|
|
75
|
-
clearConsole() {
|
|
76
|
-
this.consoleBuffer = [];
|
|
77
|
-
}
|
|
78
|
-
_onDialog(dialog) {
|
|
79
|
-
this.dialogCounter += 1;
|
|
80
|
-
const event = {
|
|
81
|
-
id: `dialog-${this.dialogCounter}`,
|
|
82
|
-
type: dialog.type(),
|
|
83
|
-
message: dialog.message(),
|
|
84
|
-
defaultValue: dialog.defaultValue(),
|
|
85
|
-
timestamp: Date.now(),
|
|
86
|
-
handled: false
|
|
87
|
-
};
|
|
88
|
-
this.dialogQueue.push(event);
|
|
89
|
-
this.pendingDialog = dialog;
|
|
90
|
-
log.info({
|
|
91
|
-
dialogId: event.id,
|
|
92
|
-
type: event.type,
|
|
93
|
-
message: event.message
|
|
94
|
-
}, "Dialog detected");
|
|
95
|
-
switch (this.options.dialogPolicy) {
|
|
96
|
-
case "auto_accept":
|
|
97
|
-
dialog.accept().then(() => {
|
|
98
|
-
event.handled = true;
|
|
99
|
-
event.response = "accepted";
|
|
100
|
-
this.pendingDialog = null;
|
|
101
|
-
}).catch(() => {});
|
|
102
|
-
break;
|
|
103
|
-
case "auto_dismiss":
|
|
104
|
-
dialog.dismiss().then(() => {
|
|
105
|
-
event.handled = true;
|
|
106
|
-
event.response = "dismissed";
|
|
107
|
-
this.pendingDialog = null;
|
|
108
|
-
}).catch(() => {});
|
|
109
|
-
break;
|
|
110
|
-
case "must_respond":
|
|
111
|
-
setTimeout(() => {
|
|
112
|
-
if (!event.handled) dialog.dismiss().then(() => {
|
|
113
|
-
event.handled = true;
|
|
114
|
-
event.response = "dismissed";
|
|
115
|
-
this.pendingDialog = null;
|
|
116
|
-
log.warn({ dialogId: event.id }, "Dialog auto-dismissed after timeout");
|
|
117
|
-
}).catch(() => {});
|
|
118
|
-
}, this.options.dialogTimeoutSeconds * 1e3);
|
|
119
|
-
break;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
_onConsole(msg) {
|
|
123
|
-
const entry = {
|
|
124
|
-
type: msg.type(),
|
|
125
|
-
text: msg.text(),
|
|
126
|
-
timestamp: Date.now()
|
|
127
|
-
};
|
|
128
|
-
this.consoleBuffer.push(entry);
|
|
129
|
-
if (this.consoleBuffer.length > this.options.maxConsoleEntries * 1.5) this.consoleBuffer = this.consoleBuffer.slice(-this.options.maxConsoleEntries);
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
//#endregion
|
|
133
|
-
export { CdpSupervisor };
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Human-like interaction primitives for browser automation.
|
|
3
|
-
*
|
|
4
|
-
* Implements Bezier mouse movement, humanized clicking, per-character typing
|
|
5
|
-
* with random delays, and wheel-based scrolling with acceleration/deceleration.
|
|
6
|
-
*
|
|
7
|
-
* Ported from brocli's human.rs — all input is dispatched via CDP Input domain
|
|
8
|
-
* through Playwright's CDPSession, bypassing Playwright's high-level API to
|
|
9
|
-
* produce more realistic event patterns.
|
|
10
|
-
*/
|
|
11
|
-
import type { Page } from 'playwright-core';
|
|
12
|
-
/** All tunable parameters for human-like behavior. */
|
|
13
|
-
export interface HumanConfig {
|
|
14
|
-
typingDelayMs: number;
|
|
15
|
-
typingDelaySpreadMs: number;
|
|
16
|
-
typingPauseChance: number;
|
|
17
|
-
typingPauseRangeMs: [number, number];
|
|
18
|
-
keyHoldMs: [number, number];
|
|
19
|
-
mouseStepsDivisor: number;
|
|
20
|
-
mouseMinSteps: number;
|
|
21
|
-
mouseMaxSteps: number;
|
|
22
|
-
mouseWobbleMax: number;
|
|
23
|
-
mouseOvershootChance: number;
|
|
24
|
-
mouseOvershootPx: [number, number];
|
|
25
|
-
mouseBurstSize: [number, number];
|
|
26
|
-
mouseBurstPauseMs: [number, number];
|
|
27
|
-
clickAimDelayMs: [number, number];
|
|
28
|
-
clickHoldMs: [number, number];
|
|
29
|
-
clickInputXRange: [number, number];
|
|
30
|
-
scrollDeltaBase: [number, number];
|
|
31
|
-
scrollDeltaVariance: number;
|
|
32
|
-
scrollPauseFastMs: [number, number];
|
|
33
|
-
scrollPauseSlowMs: [number, number];
|
|
34
|
-
scrollAccelSteps: [number, number];
|
|
35
|
-
scrollDecelSteps: [number, number];
|
|
36
|
-
scrollOvershootChance: number;
|
|
37
|
-
scrollOvershootPx: [number, number];
|
|
38
|
-
scrollSettleDelayMs: [number, number];
|
|
39
|
-
initialCursorX: [number, number];
|
|
40
|
-
initialCursorY: [number, number];
|
|
41
|
-
}
|
|
42
|
-
export type HumanPreset = 'default' | 'careful';
|
|
43
|
-
export declare function resolveHumanConfig(preset?: HumanPreset): HumanConfig;
|
|
44
|
-
interface Point {
|
|
45
|
-
x: number;
|
|
46
|
-
y: number;
|
|
47
|
-
}
|
|
48
|
-
/** Generate a human-like mouse path from start to end using cubic Bezier with wobble. */
|
|
49
|
-
export declare function generateMousePath(start: Point, end: Point, cfg: HumanConfig): Point[];
|
|
50
|
-
export type TypeAction = {
|
|
51
|
-
kind: 'char';
|
|
52
|
-
ch: string;
|
|
53
|
-
holdMs: number;
|
|
54
|
-
} | {
|
|
55
|
-
kind: 'delay';
|
|
56
|
-
ms: number;
|
|
57
|
-
} | {
|
|
58
|
-
kind: 'pause';
|
|
59
|
-
ms: number;
|
|
60
|
-
};
|
|
61
|
-
/** Generate a plan of typing actions for a given text. */
|
|
62
|
-
export declare function generateTypingPlan(text: string, cfg: HumanConfig): TypeAction[];
|
|
63
|
-
export type ScrollAction = {
|
|
64
|
-
kind: 'wheel';
|
|
65
|
-
deltaY: number;
|
|
66
|
-
} | {
|
|
67
|
-
kind: 'pause';
|
|
68
|
-
ms: number;
|
|
69
|
-
};
|
|
70
|
-
/** Generate a scroll plan to move totalDelta pixels vertically. */
|
|
71
|
-
export declare function generateScrollPlan(totalDelta: number, cfg: HumanConfig): ScrollAction[];
|
|
72
|
-
/** Humanized click on a CSS selector. */
|
|
73
|
-
export declare function humanizedClick(page: Page, selector: string, preset?: HumanPreset): Promise<void>;
|
|
74
|
-
/** Humanized fill: click the field, clear, type character by character. */
|
|
75
|
-
export declare function humanizedFill(page: Page, selector: string, value: string, preset?: HumanPreset): Promise<void>;
|
|
76
|
-
/** Humanized key press with hold delay. */
|
|
77
|
-
export declare function humanizedPress(page: Page, key: string, preset?: HumanPreset): Promise<void>;
|
|
78
|
-
/** Humanized scroll by deltaY pixels using wheel events. */
|
|
79
|
-
export declare function humanizedScroll(page: Page, deltaY: number, preset?: HumanPreset): Promise<void>;
|
|
80
|
-
export {};
|