@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
|
@@ -7,7 +7,7 @@ import { getSessionTaskPlan, setSessionTaskPlan } from "../../storage/sqlite/ses
|
|
|
7
7
|
import "../../storage/sqlite/index.js";
|
|
8
8
|
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
9
9
|
import { resolveEffectiveAgentConfigForSession } from "../../config/agent-profile.js";
|
|
10
|
-
import { getEmbeddedExecutionSession } from "../embedded/execution-context.js";
|
|
10
|
+
import { getEmbeddedExecutionRunId, getEmbeddedExecutionSession } from "../embedded/execution-context.js";
|
|
11
11
|
import { wrapToolsWithProtection } from "./executor.js";
|
|
12
12
|
import { EXTERNAL_TOOL_NAMES } from "../external-tools/gateway-tools.js";
|
|
13
13
|
import { buildRuntimeEnvironment } from "../../runtime-tools/environment.js";
|
|
@@ -36,15 +36,14 @@ import { createUpdatePlanTool } from "./update-plan-tool.js";
|
|
|
36
36
|
import { createSessionStatusTool } from "./session-status-tool.js";
|
|
37
37
|
import { createMemoryMaintenanceTool } from "./memory-maintenance-tool.js";
|
|
38
38
|
import { createClarifyTool } from "./clarify-tool.js";
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
39
|
+
import { BrowserRuntime } from "../../browser/runtime/browser-runtime.js";
|
|
40
|
+
import { createBrowserDriver } from "../../browser/drivers/create-driver.js";
|
|
41
41
|
import { checkBrowserReadiness } from "../../browser/readiness.js";
|
|
42
|
-
import { CdpSupervisor } from "../../browser/cdp-supervisor.js";
|
|
43
42
|
import "../../browser/index.js";
|
|
44
43
|
import { createDelegateTool } from "./delegate-tool.js";
|
|
45
44
|
import { createWorkflowTool } from "./workflow-tool.js";
|
|
46
45
|
import { createAutomationTool } from "./automation-tool.js";
|
|
47
|
-
import {
|
|
46
|
+
import { createBrowserAutomationTool } from "./browser-automation-tool.js";
|
|
48
47
|
import { createXopcUseTool } from "./xopc-use-tool.js";
|
|
49
48
|
import { createSkillViewTool, createSkillsListTool } from "./skills-tools.js";
|
|
50
49
|
import { createSkillManageTool } from "./skill-manage-tool.js";
|
|
@@ -78,10 +77,8 @@ const CLARIFY_SUPPORTED_CHANNELS = new Set([
|
|
|
78
77
|
"cli"
|
|
79
78
|
]);
|
|
80
79
|
var AgentToolsFactory = class AgentToolsFactory {
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
browserTaskSupervisors = /* @__PURE__ */ new Map();
|
|
84
|
-
/** Cached readiness probe — keyed by backend mode + extension host:port. */
|
|
80
|
+
browserRuntime = null;
|
|
81
|
+
/** Cached readiness probe keyed by the active driver configuration. */
|
|
85
82
|
browserReadinessCache = null;
|
|
86
83
|
constructor(deps) {
|
|
87
84
|
this.deps = deps;
|
|
@@ -99,13 +96,7 @@ var AgentToolsFactory = class AgentToolsFactory {
|
|
|
99
96
|
})).env;
|
|
100
97
|
};
|
|
101
98
|
browserReadinessKey() {
|
|
102
|
-
|
|
103
|
-
const backend = resolveBrowserBackendFromConfig(cfg);
|
|
104
|
-
const host = "127.0.0.1";
|
|
105
|
-
const port = 19820;
|
|
106
|
-
const cdpUrl = backend.mode === "cdp" ? backend.config.wsEndpoint : "";
|
|
107
|
-
const cloudKind = backend.mode === "cloud" ? backend.config.type : "";
|
|
108
|
-
return `${backend.mode}@${host}:${port}|${cdpUrl}|${cloudKind}`;
|
|
99
|
+
return JSON.stringify(this.deps.getConfig?.()?.browser.driver ?? null);
|
|
109
100
|
}
|
|
110
101
|
async checkBrowserReadinessCached() {
|
|
111
102
|
const key = this.browserReadinessKey();
|
|
@@ -137,45 +128,33 @@ var AgentToolsFactory = class AgentToolsFactory {
|
|
|
137
128
|
invalidateBrowserReadinessCache() {
|
|
138
129
|
this.browserReadinessCache = null;
|
|
139
130
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
await mgr.ensureConnected();
|
|
155
|
-
if (mgr.getExtensionProvider()) return null;
|
|
156
|
-
const page = await mgr.getPage(taskId);
|
|
157
|
-
this.browserSupervisorForTask(taskId).attach(page);
|
|
158
|
-
return page;
|
|
159
|
-
}
|
|
160
|
-
ensureBrowserManager() {
|
|
161
|
-
if (!this.browserManager) this.browserManager = new BrowserManager({
|
|
162
|
-
getHeadless: () => false,
|
|
163
|
-
getBackend: () => resolveBrowserBackendFromConfig(this.deps.getConfig?.())
|
|
131
|
+
ensureBrowserRuntime() {
|
|
132
|
+
if (!this.browserRuntime) this.browserRuntime = new BrowserRuntime({
|
|
133
|
+
getConfig: () => {
|
|
134
|
+
const config = this.deps.getConfig?.();
|
|
135
|
+
if (!config) throw new Error("Browser configuration is unavailable");
|
|
136
|
+
return config.browser;
|
|
137
|
+
},
|
|
138
|
+
createDriver: async () => {
|
|
139
|
+
const config = this.deps.getConfig?.();
|
|
140
|
+
if (!config) throw new Error("Browser configuration is unavailable");
|
|
141
|
+
return createBrowserDriver(config.browser);
|
|
142
|
+
},
|
|
143
|
+
allowedUploadRoots: [this.deps.workspace],
|
|
144
|
+
emit: this.deps.emitBrowserEvent
|
|
164
145
|
});
|
|
165
|
-
return this.
|
|
146
|
+
return this.browserRuntime;
|
|
166
147
|
}
|
|
167
148
|
/** Close Playwright and all pages (gateway stop, agent manager dispose, or config hot-reload). */
|
|
168
149
|
async shutdownBrowser() {
|
|
169
150
|
this.browserReadinessCache = null;
|
|
170
|
-
if (!this.
|
|
171
|
-
await this.
|
|
172
|
-
this.
|
|
173
|
-
this.browserTaskSupervisors.clear();
|
|
151
|
+
if (!this.browserRuntime) return;
|
|
152
|
+
await this.browserRuntime.shutdown();
|
|
153
|
+
this.browserRuntime = null;
|
|
174
154
|
}
|
|
175
155
|
/** Drop the tab for a session when its agent instance is removed. */
|
|
176
156
|
async closeBrowserPageForSession(sessionKey) {
|
|
177
|
-
this.
|
|
178
|
-
await this.browserManager?.closePage(sessionKey);
|
|
157
|
+
await this.browserRuntime?.closeTaskSession(sessionKey);
|
|
179
158
|
}
|
|
180
159
|
createCoreTools(options) {
|
|
181
160
|
const workspace = options?.workspace ?? this.deps.workspace;
|
|
@@ -236,15 +215,25 @@ var AgentToolsFactory = class AgentToolsFactory {
|
|
|
236
215
|
createSessionStatusTool(),
|
|
237
216
|
createMemoryMaintenanceTool({ getConfig: () => this.deps.getConfig?.() }),
|
|
238
217
|
createToolManualTool(),
|
|
239
|
-
createClarifyTool({ resolveAskUser: () => {
|
|
218
|
+
createClarifyTool({ resolveAskUser: (toolCallId) => {
|
|
240
219
|
const req = this.deps.gatewayClarify?.requestClarification;
|
|
241
220
|
if (!req) return null;
|
|
242
221
|
const executionSession = getEmbeddedExecutionSession();
|
|
243
|
-
|
|
222
|
+
const runId = getEmbeddedExecutionRunId();
|
|
223
|
+
if (executionSession && runId) return (request) => req({
|
|
224
|
+
sessionKey: executionSession,
|
|
225
|
+
runId,
|
|
226
|
+
toolCallId
|
|
227
|
+
}, request);
|
|
244
228
|
const ctx = this.deps.getCurrentContext();
|
|
245
229
|
if (!ctx?.sessionKey) return null;
|
|
246
230
|
if (!CLARIFY_SUPPORTED_CHANNELS.has(ctx.channel)) return null;
|
|
247
|
-
|
|
231
|
+
if (!runId) return null;
|
|
232
|
+
return (request) => req({
|
|
233
|
+
sessionKey: ctx.sessionKey,
|
|
234
|
+
runId,
|
|
235
|
+
toolCallId
|
|
236
|
+
}, request);
|
|
248
237
|
} }),
|
|
249
238
|
createTodoTool({
|
|
250
239
|
getSessionKey: () => this.deps.getCurrentContext()?.sessionKey,
|
|
@@ -376,7 +365,7 @@ var AgentToolsFactory = class AgentToolsFactory {
|
|
|
376
365
|
canAccess: () => currentAccess().crossSessionHistory
|
|
377
366
|
})] : [],
|
|
378
367
|
...this.deps.getAutomationService ? [createAutomationTool({ getAutomationService: this.deps.getAutomationService })] : [],
|
|
379
|
-
...browserEnabled && this.deps.
|
|
368
|
+
...browserEnabled && this.deps.getBrowserAutomationService ? [createBrowserAutomationTool({ getBrowserAutomationService: this.deps.getBrowserAutomationService })] : [],
|
|
380
369
|
...this.deps.getAutomationService || this.deps.getProjectService || this.deps.getNotesService || this.deps.getLocalAppService || this.deps.dispatchTaskEvents || this.deps.dispatchTaskRuns ? [createXopcUseTool({
|
|
381
370
|
getConfig: () => this.deps.getConfig?.(),
|
|
382
371
|
getCurrentAgentId: () => options.agentId,
|
|
@@ -389,15 +378,9 @@ var AgentToolsFactory = class AgentToolsFactory {
|
|
|
389
378
|
dispatchTaskRuns: this.deps.dispatchTaskRuns
|
|
390
379
|
})] : [],
|
|
391
380
|
...browserEnabled ? [createBrowserUseTool({
|
|
392
|
-
|
|
393
|
-
getPageForTask: () => this.acquireBrowserPage(),
|
|
381
|
+
getRuntime: () => this.ensureBrowserRuntime(),
|
|
394
382
|
getTaskId: () => this.deps.getCurrentContext()?.sessionKey ?? "default",
|
|
395
|
-
|
|
396
|
-
getReadiness: () => this.checkBrowserReadinessCached(),
|
|
397
|
-
getSupervisor: () => this.browserSupervisorForTask(this.deps.getCurrentContext()?.sessionKey ?? "default"),
|
|
398
|
-
notifyBrowserPageClosed: (taskId) => {
|
|
399
|
-
this.browserTaskSupervisors.delete(taskId);
|
|
400
|
-
}
|
|
383
|
+
getReadiness: () => this.checkBrowserReadinessCached()
|
|
401
384
|
})] : [],
|
|
402
385
|
...primary ? [createWorkflowTool({
|
|
403
386
|
catalog: createWorkflowCatalog(),
|
|
@@ -23,11 +23,11 @@ export { createUpdatePlanTool, type TurnPlanDetails, type TurnPlanStatus, type T
|
|
|
23
23
|
export { createSessionStatusTool } from './session-status-tool.js';
|
|
24
24
|
export { createMemoryMaintenanceTool, type MemoryMaintenanceToolDeps } from './memory-maintenance-tool.js';
|
|
25
25
|
export { createClarifyTool, type ClarifyRequestPayload, type GatewayClarifyRequestFn, } from './clarify-tool.js';
|
|
26
|
-
export {
|
|
26
|
+
export { BrowserRuntime, assertBrowserUrlAllowed } from '../../browser/index.js';
|
|
27
27
|
export { createDelegateTool, DEFAULT_DELEGATE_TOOLS, DELEGATE_BLOCKED_TOOLS, } from './delegate-tool.js';
|
|
28
28
|
export { createWorkflowTool, type WorkflowToolDeps, type WorkflowToolInput } from './workflow-tool.js';
|
|
29
29
|
export { createAutomationTool, type AutomationToolDeps } from './automation-tool.js';
|
|
30
|
-
export {
|
|
30
|
+
export { createBrowserAutomationTool } from './browser-automation-tool.js';
|
|
31
31
|
export { createXopcUseTool, type XopcUseToolDeps, type XopcUseToolInput } from './xopc-use-tool.js';
|
|
32
32
|
export { createSkillsListTool, createSkillViewTool, type SkillsToolsDeps } from './skills-tools.js';
|
|
33
33
|
export { createSkillManageTool, type SkillManageToolDeps } from './skill-manage-tool.js';
|
|
@@ -25,14 +25,14 @@ import { createUpdatePlanTool } from "./update-plan-tool.js";
|
|
|
25
25
|
import { createSessionStatusTool } from "./session-status-tool.js";
|
|
26
26
|
import { createMemoryMaintenanceTool } from "./memory-maintenance-tool.js";
|
|
27
27
|
import { createClarifyTool } from "./clarify-tool.js";
|
|
28
|
-
import { BrowserManager } from "../../browser/manager.js";
|
|
29
28
|
import { assertBrowserUrlAllowed } from "../../browser/url-policy.js";
|
|
29
|
+
import { BrowserRuntime } from "../../browser/runtime/browser-runtime.js";
|
|
30
30
|
import "../../browser/index.js";
|
|
31
31
|
import { resolveImageModelConfigForTool } from "../image/tool-model-config.js";
|
|
32
32
|
import { DEFAULT_DELEGATE_TOOLS, DELEGATE_BLOCKED_TOOLS, createDelegateTool } from "./delegate-tool.js";
|
|
33
33
|
import { createWorkflowTool } from "./workflow-tool.js";
|
|
34
34
|
import { createAutomationTool } from "./automation-tool.js";
|
|
35
|
-
import {
|
|
35
|
+
import { createBrowserAutomationTool } from "./browser-automation-tool.js";
|
|
36
36
|
import { createXopcUseTool } from "./xopc-use-tool.js";
|
|
37
37
|
import { createSkillViewTool, createSkillsListTool } from "./skills-tools.js";
|
|
38
38
|
import { createSkillManageTool } from "./skill-manage-tool.js";
|
|
@@ -43,4 +43,4 @@ import { createDesktopPetTool } from "./desktop-pet-tool.js";
|
|
|
43
43
|
import { createManagedJobTool } from "./managed-job-tool.js";
|
|
44
44
|
import { createImageTool } from "./image-tool.js";
|
|
45
45
|
import { createImageGenerateTool, resolveImageGenerationModelConfigForTool } from "./image-generate-tool.js";
|
|
46
|
-
export {
|
|
46
|
+
export { BrowserRuntime, DEFAULT_DELEGATE_TOOLS, DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, DEFAULT_TOOL_METADATA, DEFAULT_WEB_EXTRACT_MAX_LENGTH, DELEGATE_BLOCKED_TOOLS, GREP_MAX_LINE_LENGTH, MAX_RAW_HTML_CHARS_FOR_WEB_EXTRACT, TodoStore, ToolConcurrencyController, assertBrowserUrlAllowed, createApplyPatchTool, createAutomationTool, createBrowserAutomationTool, createClarifyTool, createCreateShareTool, createDelegateTool, createDesktopPetTool, createExecCommandTool, createFindTool, createGrepTool, createImageGenerateTool, createImageTool, createKnowledgeGetTool, createKnowledgeSearchTool, createKnowledgeWriteTool, createListDirTool, createManagedJobTool, createMemoryMaintenanceTool, createMessageTool, createPublishArtifactsTool, createReadFileTool, createReadMediaTool, createSendMediaTool, createSessionRecallTool, createSessionSearchTool, createSessionStatusTool, createSkillInstallTool, createSkillManageTool, createSkillViewTool, createSkillsListTool, createSkillsMarketplaceSearchTool, createTodoTool, createToolManualTool, createUpdatePlanTool, createUserContextGetTool, createUserContextSearchTool, createWebExtractTool, createWebFetchTool, createWebSearchTool, createWorkflowTool, createWriteFileTool, createXopcUseTool, findTool, formatSize, fuzzyFindText, generateDiffString, getToolMetadata, grepTool, isShareToolAvailable, listDirTool, normalizeForFuzzyMatch, normalizeToLF, resolveImageGenerationModelConfigForTool, resolveImageModelConfigForTool, resolveToolLockMode, restoreLineEndings, stripBom, stripHtmlBoilerplate, truncateHead, truncateLine, truncateTail, writeFileTool };
|
|
@@ -5,7 +5,7 @@ import { lstat, readFile, readlink, realpath } from "node:fs/promises";
|
|
|
5
5
|
import { promisify } from "node:util";
|
|
6
6
|
import { Type } from "@sinclair/typebox";
|
|
7
7
|
//#region src/agent/tools/review-workspace.ts
|
|
8
|
-
const exec
|
|
8
|
+
const exec = promisify(execFile);
|
|
9
9
|
function createReviewWorkspaceTool(workspace) {
|
|
10
10
|
return {
|
|
11
11
|
name: "review_workspace",
|
|
@@ -16,7 +16,7 @@ function createReviewWorkspaceTool(workspace) {
|
|
|
16
16
|
idempotent: true,
|
|
17
17
|
async execute(_id, _args, signal) {
|
|
18
18
|
let cwd = workspace;
|
|
19
|
-
const git = async (args) => (await exec
|
|
19
|
+
const git = async (args) => (await exec("git", [
|
|
20
20
|
"-c",
|
|
21
21
|
"core.fsmonitor=false",
|
|
22
22
|
...args
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { getAssistantMessageErrorReason, stripCodeFences } from "../providers/model-response.js";
|
|
4
3
|
import { getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
|
|
5
4
|
import { createExtensionAwareStreamFn } from "../providers/extension-stream-bridge.js";
|
|
6
5
|
import { isLocalModelBaseUrl, resolveModelCallApiKey, resolveModelCallOptions } from "../providers/model-call.js";
|
|
6
|
+
import { getAssistantMessageErrorReason, stripCodeFences } from "../providers/model-response.js";
|
|
7
7
|
//#region src/ai-assist/text-assist.ts
|
|
8
8
|
init_providers();
|
|
9
9
|
init_logger();
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { createLogger } from "../utils/logger/index.js";
|
|
3
3
|
import { init_logger } from "../utils/logger.js";
|
|
4
|
-
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
5
4
|
import { init_paths, resolveAgentAuthProfilesPath, resolveAuthProfilesPath, resolveCredentialsDir, resolveOAuthPath } from "../config/paths.js";
|
|
6
|
-
import {
|
|
5
|
+
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
7
6
|
import { getOAuthProviderDefinition, init_registry } from "./oauth/registry.js";
|
|
7
|
+
import { getApiKeyFromEnv, init_env_keys } from "../providers/env-keys.js";
|
|
8
8
|
import { init_oauth_provider_lock, withOAuthProviderLock } from "./oauth-provider-lock.js";
|
|
9
9
|
import { dirname, join } from "path";
|
|
10
10
|
import { mkdir, readFile, readdir, rm } from "fs/promises";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { init_resolution, resolveConnectedPlatformEndpoint } from "../../platform/resolution.js";
|
|
2
3
|
import { generatePKCE, init_pkce } from "./pkce.js";
|
|
3
4
|
import { hostname } from "node:os";
|
|
4
5
|
import { randomBytes } from "node:crypto";
|
|
@@ -6,7 +7,7 @@ import http from "node:http";
|
|
|
6
7
|
import { setTimeout as setTimeout$1 } from "node:timers/promises";
|
|
7
8
|
//#region src/auth/oauth/xopc-cloud.ts
|
|
8
9
|
function consoleUrl() {
|
|
9
|
-
return (process.env.XOPC_CONSOLE_URL ?? DEFAULT_CONSOLE_URL).replace(/\/+$/, "");
|
|
10
|
+
return (process.env.XOPC_CONSOLE_URL ?? resolveConnectedPlatformEndpoint("authorizationServer") ?? DEFAULT_CONSOLE_URL).replace(/\/+$/, "");
|
|
10
11
|
}
|
|
11
12
|
async function readJson(response) {
|
|
12
13
|
const body = await response.json().catch(() => null);
|
|
@@ -391,6 +392,7 @@ function createXopcOAuthProvider(options) {
|
|
|
391
392
|
var CLIENT_ID, DEFAULT_CONSOLE_URL, MODEL_SERVICE_SCOPE, TUNNEL_REGISTRATION_SCOPE, HOSTED_SHARE_SCOPE, CALLBACK_PATH, AUTHORIZATION_TIMEOUT_MS, xopcCloudOAuthProvider, xopcTunnelOAuthProvider, xopcShareOAuthProvider;
|
|
392
393
|
var init_xopc_cloud = __esmMin((() => {
|
|
393
394
|
init_pkce();
|
|
395
|
+
init_resolution();
|
|
394
396
|
CLIENT_ID = "xopc-native";
|
|
395
397
|
DEFAULT_CONSOLE_URL = "https://console.xopc.ai";
|
|
396
398
|
MODEL_SERVICE_SCOPE = "models:read models:invoke account:usage connectors:read connectors:manage connectors:execute offline_access";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { init_write_file_atomic, writeTextAtomicSync } from "../../infra/write-file-atomic.js";
|
|
2
1
|
import { init_paths, resolveCredentialsDir } from "../../config/paths.js";
|
|
2
|
+
import { init_write_file_atomic, writeTextAtomicSync } from "../../infra/write-file-atomic.js";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { chmodSync, existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
5
5
|
//#region src/auth/profiles/store.ts
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
|
|
2
3
|
import { init_paths, resolveAgentAuthProfilesPath, resolveAuthProfilesPath, resolveOAuthPath } from "../config/paths.js";
|
|
3
|
-
import { init_registry, isOAuthOnlyProvider } from "./oauth/registry.js";
|
|
4
4
|
import { init_loader, loadConfig } from "../config/loader.js";
|
|
5
|
-
import {
|
|
5
|
+
import { init_registry, isOAuthOnlyProvider } from "./oauth/registry.js";
|
|
6
6
|
import { existsSync, readFileSync } from "node:fs";
|
|
7
7
|
//#region src/auth/sync-provider-auth.ts
|
|
8
8
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const DEFAULT_AUTOMATION_TIMEOUT_SECONDS = 1800;
|
|
3
3
|
const DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS = 600;
|
|
4
4
|
function defaultAutomationTimeoutSeconds(action) {
|
|
5
|
-
return action.kind === "
|
|
5
|
+
return action.kind === "browser_automation" ? 600 : DEFAULT_AUTOMATION_TIMEOUT_SECONDS;
|
|
6
6
|
}
|
|
7
7
|
function resolveAutomationTimeoutSeconds(action, reliability) {
|
|
8
8
|
return reliability?.executionTimeoutSeconds ?? ("timeoutSeconds" in action ? action.timeoutSeconds : void 0) ?? reliability?.timeoutSeconds ?? defaultAutomationTimeoutSeconds(action);
|
|
@@ -46,9 +46,9 @@ export type AutomationAction = {
|
|
|
46
46
|
maxSubagents?: number;
|
|
47
47
|
timeoutSeconds?: number;
|
|
48
48
|
} | {
|
|
49
|
-
kind: '
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
kind: 'browser_automation';
|
|
50
|
+
automationId: string;
|
|
51
|
+
inputs?: Record<string, unknown>;
|
|
52
52
|
timeoutSeconds?: number;
|
|
53
53
|
} | {
|
|
54
54
|
kind: 'task_command';
|
|
@@ -189,8 +189,8 @@ export interface AutomationDeps {
|
|
|
189
189
|
getDefaultAgentId?: () => string;
|
|
190
190
|
prepareAgentSession?: (input: PrepareAutomationAgentSessionInput) => Promise<void>;
|
|
191
191
|
workflowRunService?: WorkflowRunServiceLike;
|
|
192
|
-
|
|
193
|
-
runAndWait(
|
|
192
|
+
browserAutomationService?: {
|
|
193
|
+
runAndWait(automationId: string, inputs: Record<string, unknown>, signal?: AbortSignal): Promise<{
|
|
194
194
|
id: string;
|
|
195
195
|
status: 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled';
|
|
196
196
|
result?: unknown;
|
|
@@ -59,9 +59,9 @@ export declare const AutomationActionSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
|
|
|
59
59
|
maxSubagents: z.ZodOptional<z.ZodNumber>;
|
|
60
60
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
61
61
|
}, z.core.$strict>, z.ZodObject<{
|
|
62
|
-
kind: z.ZodLiteral<"
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
kind: z.ZodLiteral<"browser_automation">;
|
|
63
|
+
automationId: z.ZodString;
|
|
64
|
+
inputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
65
65
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
66
66
|
}, z.core.$strict>, z.ZodObject<{
|
|
67
67
|
kind: z.ZodLiteral<"task_command">;
|
|
@@ -117,9 +117,9 @@ export declare const AutomationActionSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
|
|
|
117
117
|
type: z.ZodLiteral<"add_wait">;
|
|
118
118
|
wait: z.ZodObject<{
|
|
119
119
|
kind: z.ZodEnum<{
|
|
120
|
+
approval: "approval";
|
|
120
121
|
dependency: "dependency";
|
|
121
122
|
user_input: "user_input";
|
|
122
|
-
approval: "approval";
|
|
123
123
|
external_event: "external_event";
|
|
124
124
|
scheduled_time: "scheduled_time";
|
|
125
125
|
retry_backoff: "retry_backoff";
|
|
@@ -236,9 +236,9 @@ export declare const AutomationSchema: z.ZodObject<{
|
|
|
236
236
|
maxSubagents: z.ZodOptional<z.ZodNumber>;
|
|
237
237
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
238
238
|
}, z.core.$strict>, z.ZodObject<{
|
|
239
|
-
kind: z.ZodLiteral<"
|
|
240
|
-
|
|
241
|
-
|
|
239
|
+
kind: z.ZodLiteral<"browser_automation">;
|
|
240
|
+
automationId: z.ZodString;
|
|
241
|
+
inputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
242
242
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
243
243
|
}, z.core.$strict>, z.ZodObject<{
|
|
244
244
|
kind: z.ZodLiteral<"task_command">;
|
|
@@ -294,9 +294,9 @@ export declare const AutomationSchema: z.ZodObject<{
|
|
|
294
294
|
type: z.ZodLiteral<"add_wait">;
|
|
295
295
|
wait: z.ZodObject<{
|
|
296
296
|
kind: z.ZodEnum<{
|
|
297
|
+
approval: "approval";
|
|
297
298
|
dependency: "dependency";
|
|
298
299
|
user_input: "user_input";
|
|
299
|
-
approval: "approval";
|
|
300
300
|
external_event: "external_event";
|
|
301
301
|
scheduled_time: "scheduled_time";
|
|
302
302
|
retry_backoff: "retry_backoff";
|
|
@@ -398,9 +398,9 @@ export declare const CreateAutomationSchema: z.ZodObject<{
|
|
|
398
398
|
maxSubagents: z.ZodOptional<z.ZodNumber>;
|
|
399
399
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
400
400
|
}, z.core.$strict>, z.ZodObject<{
|
|
401
|
-
kind: z.ZodLiteral<"
|
|
402
|
-
|
|
403
|
-
|
|
401
|
+
kind: z.ZodLiteral<"browser_automation">;
|
|
402
|
+
automationId: z.ZodString;
|
|
403
|
+
inputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
404
404
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
405
405
|
}, z.core.$strict>, z.ZodObject<{
|
|
406
406
|
kind: z.ZodLiteral<"task_command">;
|
|
@@ -456,9 +456,9 @@ export declare const CreateAutomationSchema: z.ZodObject<{
|
|
|
456
456
|
type: z.ZodLiteral<"add_wait">;
|
|
457
457
|
wait: z.ZodObject<{
|
|
458
458
|
kind: z.ZodEnum<{
|
|
459
|
+
approval: "approval";
|
|
459
460
|
dependency: "dependency";
|
|
460
461
|
user_input: "user_input";
|
|
461
|
-
approval: "approval";
|
|
462
462
|
external_event: "external_event";
|
|
463
463
|
scheduled_time: "scheduled_time";
|
|
464
464
|
retry_backoff: "retry_backoff";
|
|
@@ -587,9 +587,9 @@ export declare const UpdateAutomationSchema: z.ZodObject<{
|
|
|
587
587
|
maxSubagents: z.ZodOptional<z.ZodNumber>;
|
|
588
588
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
589
589
|
}, z.core.$strict>, z.ZodObject<{
|
|
590
|
-
kind: z.ZodLiteral<"
|
|
591
|
-
|
|
592
|
-
|
|
590
|
+
kind: z.ZodLiteral<"browser_automation">;
|
|
591
|
+
automationId: z.ZodString;
|
|
592
|
+
inputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
593
593
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
594
594
|
}, z.core.$strict>, z.ZodObject<{
|
|
595
595
|
kind: z.ZodLiteral<"task_command">;
|
|
@@ -645,9 +645,9 @@ export declare const UpdateAutomationSchema: z.ZodObject<{
|
|
|
645
645
|
type: z.ZodLiteral<"add_wait">;
|
|
646
646
|
wait: z.ZodObject<{
|
|
647
647
|
kind: z.ZodEnum<{
|
|
648
|
+
approval: "approval";
|
|
648
649
|
dependency: "dependency";
|
|
649
650
|
user_input: "user_input";
|
|
650
|
-
approval: "approval";
|
|
651
651
|
external_event: "external_event";
|
|
652
652
|
scheduled_time: "scheduled_time";
|
|
653
653
|
retry_backoff: "retry_backoff";
|
|
@@ -83,9 +83,9 @@ const AutomationActionSchema = z.discriminatedUnion("kind", [
|
|
|
83
83
|
timeoutSeconds: z.number().int().min(1).max(86400).optional()
|
|
84
84
|
}).strict(),
|
|
85
85
|
z.object({
|
|
86
|
-
kind: z.literal("
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
kind: z.literal("browser_automation"),
|
|
87
|
+
automationId: nonEmptyString.max(100),
|
|
88
|
+
inputs: z.record(z.string(), z.unknown()).optional(),
|
|
89
89
|
timeoutSeconds: z.number().int().min(1).max(86400).optional()
|
|
90
90
|
}).strict(),
|
|
91
91
|
z.object({
|
|
@@ -37,9 +37,9 @@ export declare function buildAutomationDraftResponse(draft: GeneratedAutomationD
|
|
|
37
37
|
maxSubagents?: number;
|
|
38
38
|
timeoutSeconds?: number;
|
|
39
39
|
} | {
|
|
40
|
-
kind: "
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
kind: "browser_automation";
|
|
41
|
+
automationId: string;
|
|
42
|
+
inputs?: Record<string, unknown>;
|
|
43
43
|
timeoutSeconds?: number;
|
|
44
44
|
} | {
|
|
45
45
|
kind: "task_command";
|
|
@@ -79,7 +79,7 @@ export declare function buildAutomationDraftResponse(draft: GeneratedAutomationD
|
|
|
79
79
|
} | {
|
|
80
80
|
type: "add_wait";
|
|
81
81
|
wait: {
|
|
82
|
-
kind: "
|
|
82
|
+
kind: "approval" | "dependency" | "user_input" | "external_event" | "scheduled_time" | "retry_backoff" | "paused";
|
|
83
83
|
reason: string;
|
|
84
84
|
condition: Record<string, unknown>;
|
|
85
85
|
resumeAt?: number;
|
|
@@ -90,7 +90,7 @@ function summarizeTrigger(trigger) {
|
|
|
90
90
|
}
|
|
91
91
|
function summarizeAction(action) {
|
|
92
92
|
if (action.kind === "workflow") return `Starts workflow ${action.workflowId}.`;
|
|
93
|
-
if (action.kind === "
|
|
93
|
+
if (action.kind === "browser_automation") return `Runs browser automation ${action.automationId}.`;
|
|
94
94
|
if (action.kind === "task_command") return `Applies ${action.command?.type ?? "a command"} to task ${action.taskId}.`;
|
|
95
95
|
return action.agentId ? `Runs agent ${action.agentId}.` : "Runs the default agent.";
|
|
96
96
|
}
|
|
@@ -4,7 +4,7 @@ export declare class AutomationActionExecutor {
|
|
|
4
4
|
setDeps(deps: AutomationDeps): void;
|
|
5
5
|
execute(automation: Automation, run: AutomationRun, signal: AbortSignal, hooks?: AutomationActionExecutionHooks): Promise<AutomationActionTask>;
|
|
6
6
|
private executeWithoutTimeout;
|
|
7
|
-
private
|
|
7
|
+
private executeBrowserAutomation;
|
|
8
8
|
private executeAgent;
|
|
9
9
|
private executeWorkflow;
|
|
10
10
|
}
|
|
@@ -105,7 +105,7 @@ var AutomationActionExecutor = class {
|
|
|
105
105
|
error: "Automation run was cancelled"
|
|
106
106
|
};
|
|
107
107
|
if (automation.action.kind === "workflow") return this.executeWorkflow(automation, automation.action, run, signal, hooks);
|
|
108
|
-
if (automation.action.kind === "
|
|
108
|
+
if (automation.action.kind === "browser_automation") return this.executeBrowserAutomation(automation, automation.action, signal, hooks);
|
|
109
109
|
if (automation.action.kind === "task_command") {
|
|
110
110
|
await hooks.onRunPatch?.({ currentPhase: "action" });
|
|
111
111
|
const execute = this.deps.executeTaskCommand;
|
|
@@ -128,26 +128,26 @@ var AutomationActionExecutor = class {
|
|
|
128
128
|
}
|
|
129
129
|
return this.executeAgent(automation, automation.action, run, signal, hooks, deadlineAtMs);
|
|
130
130
|
}
|
|
131
|
-
async
|
|
131
|
+
async executeBrowserAutomation(automation, action, signal, hooks) {
|
|
132
132
|
await hooks.onRunPatch?.({ currentPhase: "action" });
|
|
133
133
|
const safetyMode = automation.safety?.mode ?? "auto_apply";
|
|
134
134
|
if (safetyMode !== "auto_apply") return {
|
|
135
135
|
status: "succeeded",
|
|
136
|
-
summary: `${safetyMode === "suggest_only" ? "Suggest only" : "Ask before applying"}: Browser automation ${action.
|
|
136
|
+
summary: `${safetyMode === "suggest_only" ? "Suggest only" : "Ask before applying"}: Browser automation ${action.automationId} was not run.`
|
|
137
137
|
};
|
|
138
|
-
const service = this.deps.
|
|
138
|
+
const service = this.deps.browserAutomationService;
|
|
139
139
|
if (!service) return {
|
|
140
140
|
status: "failed",
|
|
141
141
|
error: "Browser automation is not available"
|
|
142
142
|
};
|
|
143
|
-
const run = await service.runAndWait(action.
|
|
143
|
+
const run = await service.runAndWait(action.automationId, action.inputs ?? {}, signal);
|
|
144
144
|
if (run.status === "succeeded") return {
|
|
145
145
|
status: "succeeded",
|
|
146
|
-
summary: `Browser automation ${action.
|
|
146
|
+
summary: `Browser automation ${action.automationId} completed: ${JSON.stringify(run.result ?? null).slice(0, 3500)}`
|
|
147
147
|
};
|
|
148
148
|
return {
|
|
149
149
|
status: run.status === "cancelled" ? "cancelled" : "failed",
|
|
150
|
-
error: run.error ?? `Browser automation ${action.
|
|
150
|
+
error: run.error ?? `Browser automation ${action.automationId} ${run.status}`
|
|
151
151
|
};
|
|
152
152
|
}
|
|
153
153
|
async executeAgent(automation, action, run, signal, hooks, deadlineAtMs) {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { BrowserAutomationDefinitionSchema } from "./schema.js";
|
|
2
|
+
import { BrowserAutomationService } from "./service.js";
|
|
3
|
+
import { createRuntimeBrowserAutomationService } from "./runtime-service.js";
|
|
4
|
+
export { BrowserAutomationDefinitionSchema, BrowserAutomationService, createRuntimeBrowserAutomationService };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BrowserAutomation, BrowserAutomationRun, BrowserAutomationRunEvent } from './types.js';
|
|
2
|
+
export declare const listBrowserAutomations: () => BrowserAutomation[];
|
|
3
|
+
export declare const getBrowserAutomation: (id: string) => BrowserAutomation | null;
|
|
4
|
+
export declare function saveBrowserAutomation(value: BrowserAutomation): void;
|
|
5
|
+
export declare const deleteBrowserAutomation: (id: string) => boolean;
|
|
6
|
+
export declare function saveBrowserAutomationRun(value: BrowserAutomationRun): void;
|
|
7
|
+
export declare const getBrowserAutomationRun: (id: string) => BrowserAutomationRun | null;
|
|
8
|
+
export declare const listBrowserAutomationRuns: (automationId?: string) => BrowserAutomationRun[];
|
|
9
|
+
export declare const listActiveBrowserAutomationRuns: () => BrowserAutomationRun[];
|
|
10
|
+
export declare const hasActiveBrowserAutomationRuns: (automationId: string) => boolean;
|
|
11
|
+
export declare const nextBrowserAutomationRunEventSeq: (runId: string) => number;
|
|
12
|
+
export declare function appendBrowserAutomationRunEvent(value: BrowserAutomationRunEvent): void;
|
|
13
|
+
export declare const listBrowserAutomationRunEvents: (runId: string) => BrowserAutomationRunEvent[];
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { getSqliteDatabase, runSqliteWriteTransaction } from "../../storage/sqlite/transaction.js";
|
|
2
|
+
import "../../storage/sqlite/index.js";
|
|
3
|
+
//#region src/browser/automations/repository.ts
|
|
4
|
+
const AUTOMATION_SELECT = "SELECT automation_id, revision, status, definition_json, created_at_ms, updated_at_ms FROM browser_automations";
|
|
5
|
+
const RUN_SELECT = "SELECT run_id, automation_id, automation_revision, definition_json, status, inputs_json, result_json, error, created_at_ms, started_at_ms, ended_at_ms, duration_ms FROM browser_automation_runs";
|
|
6
|
+
const parseAutomation = (row) => ({
|
|
7
|
+
id: row.automation_id,
|
|
8
|
+
revision: row.revision,
|
|
9
|
+
status: row.status,
|
|
10
|
+
definition: JSON.parse(row.definition_json),
|
|
11
|
+
createdAtMs: row.created_at_ms,
|
|
12
|
+
updatedAtMs: row.updated_at_ms
|
|
13
|
+
});
|
|
14
|
+
const parseRun = (row) => ({
|
|
15
|
+
id: row.run_id,
|
|
16
|
+
automationId: row.automation_id,
|
|
17
|
+
automationRevision: row.automation_revision,
|
|
18
|
+
definition: JSON.parse(row.definition_json),
|
|
19
|
+
status: row.status,
|
|
20
|
+
inputs: JSON.parse(row.inputs_json),
|
|
21
|
+
result: row.result_json ? JSON.parse(row.result_json) : void 0,
|
|
22
|
+
error: row.error ?? void 0,
|
|
23
|
+
createdAtMs: row.created_at_ms,
|
|
24
|
+
startedAtMs: row.started_at_ms ?? void 0,
|
|
25
|
+
endedAtMs: row.ended_at_ms ?? void 0,
|
|
26
|
+
durationMs: row.duration_ms ?? void 0
|
|
27
|
+
});
|
|
28
|
+
const listBrowserAutomations = () => getSqliteDatabase().prepare(`${AUTOMATION_SELECT} ORDER BY updated_at_ms DESC`).all().map(parseAutomation);
|
|
29
|
+
const getBrowserAutomation = (id) => {
|
|
30
|
+
const row = getSqliteDatabase().prepare(`${AUTOMATION_SELECT} WHERE automation_id = ?`).get(id);
|
|
31
|
+
return row ? parseAutomation(row) : null;
|
|
32
|
+
};
|
|
33
|
+
function saveBrowserAutomation(value) {
|
|
34
|
+
runSqliteWriteTransaction((db) => db.prepare("INSERT INTO browser_automations (automation_id, revision, status, definition_json, created_at_ms, updated_at_ms) VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT(automation_id) DO UPDATE SET revision=excluded.revision, status=excluded.status, definition_json=excluded.definition_json, updated_at_ms=excluded.updated_at_ms").run(value.id, value.revision, value.status, JSON.stringify(value.definition), value.createdAtMs, value.updatedAtMs));
|
|
35
|
+
}
|
|
36
|
+
const deleteBrowserAutomation = (id) => runSqliteWriteTransaction((db) => db.prepare("DELETE FROM browser_automations WHERE automation_id = ?").run(id).changes > 0);
|
|
37
|
+
function saveBrowserAutomationRun(value) {
|
|
38
|
+
runSqliteWriteTransaction((db) => db.prepare("INSERT INTO browser_automation_runs (run_id, automation_id, automation_revision, definition_json, status, inputs_json, result_json, error, created_at_ms, started_at_ms, ended_at_ms, duration_ms) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(run_id) DO UPDATE SET status=excluded.status, result_json=excluded.result_json, error=excluded.error, started_at_ms=excluded.started_at_ms, ended_at_ms=excluded.ended_at_ms, duration_ms=excluded.duration_ms").run(value.id, value.automationId, value.automationRevision, JSON.stringify(value.definition), value.status, JSON.stringify(value.inputs), value.result === void 0 ? null : JSON.stringify(value.result), value.error ?? null, value.createdAtMs, value.startedAtMs ?? null, value.endedAtMs ?? null, value.durationMs ?? null));
|
|
39
|
+
}
|
|
40
|
+
const getBrowserAutomationRun = (id) => {
|
|
41
|
+
const row = getSqliteDatabase().prepare(`${RUN_SELECT} WHERE run_id = ?`).get(id);
|
|
42
|
+
return row ? parseRun(row) : null;
|
|
43
|
+
};
|
|
44
|
+
const listBrowserAutomationRuns = (automationId) => (automationId ? getSqliteDatabase().prepare(`${RUN_SELECT} WHERE automation_id = ? ORDER BY created_at_ms DESC`).all(automationId) : getSqliteDatabase().prepare(`${RUN_SELECT} ORDER BY created_at_ms DESC`).all()).map(parseRun);
|
|
45
|
+
const listActiveBrowserAutomationRuns = () => getSqliteDatabase().prepare(`${RUN_SELECT} WHERE status IN ('queued', 'running')`).all().map(parseRun);
|
|
46
|
+
const hasActiveBrowserAutomationRuns = (automationId) => Boolean(getSqliteDatabase().prepare("SELECT 1 FROM browser_automation_runs WHERE automation_id = ? AND status IN ('queued', 'running') LIMIT 1").get(automationId));
|
|
47
|
+
const nextBrowserAutomationRunEventSeq = (runId) => getSqliteDatabase().prepare("SELECT COALESCE(MAX(seq), 0) + 1 AS seq FROM browser_action_audit WHERE run_id = ?").get(runId).seq;
|
|
48
|
+
function appendBrowserAutomationRunEvent(value) {
|
|
49
|
+
runSqliteWriteTransaction((db) => db.prepare("INSERT INTO browser_action_audit (event_id, run_id, seq, type, data_json, created_at_ms) VALUES (?, ?, ?, ?, ?, ?)").run(value.id, value.runId, value.seq, value.type, value.data === void 0 ? null : JSON.stringify(value.data), value.createdAtMs));
|
|
50
|
+
}
|
|
51
|
+
const listBrowserAutomationRunEvents = (runId) => getSqliteDatabase().prepare("SELECT event_id, run_id, seq, type, data_json, created_at_ms FROM browser_action_audit WHERE run_id = ? ORDER BY seq").all(runId).map((row) => ({
|
|
52
|
+
id: row.event_id,
|
|
53
|
+
runId: row.run_id,
|
|
54
|
+
seq: row.seq,
|
|
55
|
+
type: row.type,
|
|
56
|
+
data: row.data_json ? JSON.parse(row.data_json) : void 0,
|
|
57
|
+
createdAtMs: row.created_at_ms
|
|
58
|
+
}));
|
|
59
|
+
//#endregion
|
|
60
|
+
export { appendBrowserAutomationRunEvent, deleteBrowserAutomation, getBrowserAutomation, getBrowserAutomationRun, hasActiveBrowserAutomationRuns, listActiveBrowserAutomationRuns, listBrowserAutomationRunEvents, listBrowserAutomationRuns, listBrowserAutomations, nextBrowserAutomationRunEventSeq, saveBrowserAutomation, saveBrowserAutomationRun };
|