@xopcai/xopc 0.0.367 → 0.0.369
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/dist/browser-ext/_locales/en/messages.json +30 -1
- package/dist/browser-ext/_locales/zh_CN/messages.json +30 -1
- package/dist/browser-ext/dist/assets/{auth-beGtbLPS.js → page-context-BeworyNB.js} +1331 -1355
- package/dist/browser-ext/dist/assets/{sidepanel-BT0ojEzG.css → sidepanel-Ccl0eSa1.css} +43 -0
- package/dist/browser-ext/dist/background.js +680 -182
- package/dist/browser-ext/dist/sidepanel.html +2 -2
- package/dist/browser-ext/dist/sidepanel.js +372 -193
- package/dist/browser-ext/manifest.json +2 -8
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-Cuf3JFFJ.js → activity-store-BQ3PMp2q.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DyATPNTe.js → agent-avatar-dicebear-Stj17S9u.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CCRfvuov.js +1 -0
- package/dist/gateway/static/root/assets/agent-plugin-dialog-CRlzd8El.js +1 -0
- package/dist/gateway/static/root/assets/agents-_ug2LCQb.js +66 -0
- package/dist/gateway/static/root/assets/{agents-admin-api-D842OcNo.js → agents-admin-api-HBZvVyzF.js} +1 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-pJFe6M6c.js +1 -0
- package/dist/gateway/static/root/assets/{appearance-settings-DQr0o6Lm.js → appearance-settings-BrxSpBWa.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-CltMV4Xp.js → apps-page-DegSl5Lh.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-DT8Nio-r.js → archive-plugin-BO3I9zRP.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-BIfWS_3Y.js → automations-page-BZQ_VHjp.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-BQywN6nG.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-7qs3qcW9.js → binary-plugins-gFD7vH9R.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-BFPUlxJ6.js → block-editor-3XjFv3kK.js} +28 -28
- package/dist/gateway/static/root/assets/browser-automation-inputs-DxRoKFun.js +1 -0
- package/dist/gateway/static/root/assets/browser-automations-page-yiEuG1v7.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-ch2_bQF0.js +3 -0
- package/dist/gateway/static/root/assets/{capabilities-K0Zb_lH0.js → capabilities-B48r0DDa.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-BzWFO_x_.js → capabilities-DO-vfNKI.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-page-BEnFt_dj.js +2 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-NckMsJ5N.js +8 -0
- package/dist/gateway/static/root/assets/{capability-header-actions-AMn_vTNv.js → capability-header-actions-CY8KCO9j.js} +1 -1
- package/dist/gateway/static/root/assets/channels-CHOS2CGa.js +1 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-C7nAROhF.js → chat-terminal-dock-Bwknnb4c.js} +2 -2
- package/dist/gateway/static/root/assets/computer-settings-page-B2xeFCSt.js +1 -0
- package/dist/gateway/static/root/assets/{connector-service-page-CTx1B8wx.js → connector-service-page-C83DnAqK.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-D6wTmWA6.js +2 -0
- package/dist/gateway/static/root/assets/{date-picker-Cx_xIKvN.js → date-picker-Bq9GR-DU.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-DYm96PDu.js → dependency-picker-BTERkA9X.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-D90OzgeR.js → desktop-pet-BwsbQw8V.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-CmdCecjm.js → desktop-pet-settings-sL9i44pP.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-DI2bqaKO.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-DZpaoeNa.js → directory-picker-path-field-BFlDmsS5.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-Bv6QE8kC.js → extension-debug-page-7Z1Tp7-w.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CEsq71Cm.js → extension-page-uGqvb8QX.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-CX-sK0Tw.js → extension-provider-xlSyz4Z6.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-UyOHF39P.js → extension-settings-page-CKHgrjOs.js} +1 -1
- package/dist/gateway/static/root/assets/{fallback-models-CKv_Wqg8.js → fallback-models-BwQg0G1D.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-Cjnkle5J.js → gateway-config-swr-7RKqgU_U.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-DCCLdyQD.js → gateway-realtime-DDWymi-o.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-BheKaO6d.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-BAQnSEMJ.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-CXKmdVzN.js → gateway-startup-retry-jiV5sbEX.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-BZDjvwet.js +2 -0
- package/dist/gateway/static/root/assets/{image-generation-api-NLHzm4Nc.js → image-generation-api-DO4mXb6I.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-C7qvlBTQ.js → imports-page-re1_Nh64.js} +1 -1
- package/dist/gateway/static/root/assets/index-BB1z8QxA.js +106 -0
- package/dist/gateway/static/root/assets/index-D9R6tU7r.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-pkgFWJb-.js → keyboard-shortcuts-settings-B_xja9LN.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-dMDhZXAi.js → local-app-workbench-page-CErdCrPX.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-TpUAfOn2.js → local-apps-page-BPL2RXdK.js} +1 -1
- package/dist/gateway/static/root/assets/{local-session-drafts-Cvv7I0fw.js → local-session-drafts-DRPsDCj1.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-C8TMD2gn.js → locale-store-COVscAqC.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-DL-BM0xq.js +2 -0
- package/dist/gateway/static/root/assets/management-settings-BOVRHhXk.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-Dse7rkio.js → markdown-view-B_qnAcW2.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-BZrnzaBM.js → media-plugins-C0Pc-wSY.js} +1 -1
- package/dist/gateway/static/root/assets/messages-Bb2GK-Nj.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-cache-DyPPksMP.js +1 -0
- package/dist/gateway/static/root/assets/note-detail-panel-DJJK2yL4.js +5 -0
- package/dist/gateway/static/root/assets/{notes-api-DKiVeQKG.js → notes-api-sBgBcyLW.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-oCxO7ZTv.js +8 -0
- package/dist/gateway/static/root/assets/{page-context-capture-button-Cxzd4QPB.js → page-context-capture-button-tf77xIz3.js} +1 -1
- package/dist/gateway/static/root/assets/personal-page-DOk9gUK5.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-D4hoEWiu.js → product-open-page-Dc3Y-Y7J.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-aR38El2E.js → product-preview-content-MG_hmVA3.js} +1 -1
- package/dist/gateway/static/root/assets/{project-detail-page-D20QH4YB.js → project-detail-page-3uAzbW4T.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-Bf3BIcT6.js → projects-page-MllfNLGA.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-AdnxowbH.js → registry-api-Bh9UBb-f.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-Bs-C70el.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CBN3raz1.js → runtime-tools-settings-panel-DpJ5jNzR.js} +1 -1
- package/dist/gateway/static/root/assets/scenes-page-Dpxamkw6.js +2 -0
- package/dist/gateway/static/root/assets/{schema-form-CxrMGsT9.js → schema-form-DUeyQ1zh.js} +1 -1
- package/dist/gateway/static/root/assets/{send-session-input-CgOzhDZ0.js → send-session-input-Dgn4BRk_.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-_HIN8or3.js → session-api-yjpEz4pP.js} +1 -1
- package/dist/gateway/static/root/assets/{session-manager-CzCto5zT.js → session-manager-LInoZ_Yi.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-BCVlNHtq.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-Bz-ue9fZ.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-D8Q3H3-o.js → settings-page-DouHuBXt.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-DvLMMiuS.js → setup-status-panel-B5BoZ-1y.js} +1 -1
- package/dist/gateway/static/root/assets/{share-link-dialog-Dg5os066.js → share-link-dialog-DJTabLAM.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-DMvohAyr.js → share-preview-page-jw7h4t_B.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-C96IO4qJ.js → shares-api-c0dfWz6h.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-BlnlzGjH.js +1 -0
- package/dist/gateway/static/root/assets/{skill-api-C10ML0CH.js → skill-api-CfyX_0zN.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-DNbJzSfB.js → skill-reload-api-Ge5XymHa.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-DObMKvA6.js → skills-page-DjdTeYzm.js} +1 -1
- package/dist/gateway/static/root/assets/system-settings-panel-DWf256TE.js +1 -0
- package/dist/gateway/static/root/assets/{task-detail-page-BR2L1L8l.js → task-detail-page-DE6N1ZQe.js} +2 -2
- package/dist/gateway/static/root/assets/{task-expandable-content-DL2Q2gre.js → task-expandable-content-hYcgCEE3.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-DQ6KJa4l.js → theme-store-BOfCKgl6.js} +1 -1
- package/dist/gateway/static/root/assets/{tracing-settings-page-Ed8_GYUT.js → tracing-settings-page-DDWFXcST.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-D3X8jDwo.js → tunnel-api-BBm9esrY.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-BqzRyyb9.js → usage-page-C93x89uW.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-CRFefpzO.js → use-autosave-CSckcjFx.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-OLrvSjn5.js → use-composer-attachments-C7Gaaai1.js} +1 -1
- package/dist/gateway/static/root/assets/{use-file-preview-expanded-CJvzfQvw.js → use-file-preview-expanded-Db2VYg1b.js} +2 -2
- package/dist/gateway/static/root/assets/user-model-page-B74LkVbp.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-R9zNWYR_.js → voice-api-key-field-GEw5x2fU.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-DLudE9Rc.js → voice-config-api-3yyVwXln.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-DVmQrolV.js → work-discovery-overlay-Bs2MKiTv.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DEkmuD3T.js → workflow-run-setup-panel-BR_U_snV.js} +2 -2
- package/dist/gateway/static/root/assets/{workflows-page-pqCB3sh4.js → workflows-page-Crk4SxtC.js} +3 -3
- package/dist/gateway/static/root/assets/{workspace-api-CdVUhyPo.js → workspace-api-Si2o3inw.js} +2 -2
- package/dist/gateway/static/root/index.html +27 -28
- package/dist/package.js +1 -1
- package/dist/packages/browser-control-contract/src/automation.js +213 -0
- package/dist/packages/browser-control-contract/src/index.js +43 -12
- package/dist/packages/gateway-contract/src/gateway-scopes.js +3 -1
- package/dist/packages/gateway-contract/src/notifications.js +1 -0
- package/dist/packages/realtime-protocol/src/voice-catalog.js +7 -1
- package/dist/packages/realtime-protocol/src/voice.js +9 -3
- package/dist/src/agent/coding/repository-instructions.js +8 -1
- package/dist/src/agent/tool-manuals/browser.d.ts +1 -1
- package/dist/src/agent/tool-manuals/browser.js +3 -3
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
- package/dist/src/agent/tools/browser/tool/schemas.d.ts +0 -13
- package/dist/src/agent/tools/browser/tool/schemas.js +0 -4
- package/dist/src/agent/tools/browser-automation-tool.d.ts +74 -1
- package/dist/src/agent/tools/browser-automation-tool.js +52 -6
- package/dist/src/agent-config/schema.d.ts +1 -1
- package/dist/src/agent-config/schema.js +1 -1
- package/dist/src/automations/capabilities/write.d.ts +2 -0
- package/dist/src/automations/domain/types.d.ts +11 -0
- package/dist/src/automations/domain/validation.d.ts +4 -0
- package/dist/src/automations/domain/validation.js +1 -0
- package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -0
- package/dist/src/automations/service/action-executor.js +11 -3
- package/dist/src/automations/service/automation-service.d.ts +1 -0
- package/dist/src/automations/service/automation-service.js +13 -1
- package/dist/src/bootstrap/application-state.js +3 -1
- package/dist/src/browser/automations/repository.d.ts +4 -0
- package/dist/src/browser/automations/repository.js +27 -6
- package/dist/src/browser/automations/runner.js +101 -9
- package/dist/src/browser/automations/runtime-service.js +4 -3
- package/dist/src/browser/automations/schema.d.ts +84 -1
- package/dist/src/browser/automations/schema.js +68 -2
- package/dist/src/browser/automations/service.d.ts +78 -1
- package/dist/src/browser/automations/service.js +36 -4
- package/dist/src/browser/automations/types.d.ts +19 -4
- package/dist/src/browser/drivers/extension-driver.d.ts +5 -5
- package/dist/src/browser/drivers/extension-driver.js +10 -10
- package/dist/src/browser/drivers/playwright-driver.js +46 -0
- package/dist/src/browser/index.d.ts +1 -2
- package/dist/src/browser/index.js +2 -3
- package/dist/src/browser/policy/browser-policy.d.ts +0 -1
- package/dist/src/browser/policy/browser-policy.js +1 -4
- package/dist/src/browser/providers/index.d.ts +1 -1
- package/dist/src/browser/providers/index.js +2 -2
- package/dist/src/browser/providers/realtime-extension.d.ts +1 -1
- package/dist/src/browser/providers/realtime-extension.js +5 -1
- package/dist/src/browser/recordings/service.d.ts +22 -0
- package/dist/src/browser/recordings/service.js +160 -0
- package/dist/src/browser/runtime/browser-runtime.d.ts +1 -1
- package/dist/src/browser/runtime/browser-runtime.js +19 -56
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/computer/runtime.js +2 -2
- package/dist/src/config/schema.d.ts +12 -12
- package/dist/src/config/schema.js +12 -12
- package/dist/src/endpoint-tools/policy.js +4 -3
- package/dist/src/gateway/hono/routes/browser-automations.js +23 -7
- package/dist/src/gateway/hono/routes/browser-recordings.d.ts +3 -0
- package/dist/src/gateway/hono/routes/browser-recordings.js +78 -0
- package/dist/src/gateway/hono/routes/browser.js +1 -34
- package/dist/src/gateway/hono/routes/device-push.js +1 -0
- package/dist/src/gateway/hono/routes/home.js +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/personal-agent.js +35 -0
- package/dist/src/gateway/hono/routes/voice.js +5 -2
- package/dist/src/gateway/security/gateway-scopes.js +3 -1
- package/dist/src/gateway/service/agent-runner.js +1 -0
- package/dist/src/home-intelligence/generator.d.ts +2 -0
- package/dist/src/home-intelligence/generator.js +53 -4
- package/dist/src/home-intelligence/host.d.ts +2 -1
- package/dist/src/home-intelligence/host.js +23 -3
- package/dist/src/migrations/cloud-public-models.d.ts +7 -0
- package/dist/src/migrations/cloud-public-models.js +157 -0
- package/dist/src/notifications/clarification.d.ts +5 -0
- package/dist/src/notifications/clarification.js +66 -0
- package/dist/src/notifications/device-store.js +1 -0
- package/dist/src/notifications/harmony-push.d.ts +1 -0
- package/dist/src/notifications/harmony-push.js +3 -1
- package/dist/src/notifications/planner.d.ts +1 -0
- package/dist/src/notifications/service.d.ts +2 -2
- package/dist/src/notifications/service.js +20 -4
- package/dist/src/notifications/store.d.ts +2 -0
- package/dist/src/notifications/store.js +7 -1
- package/dist/src/notifications/types.d.ts +1 -0
- package/dist/src/notifications/types.js +1 -0
- package/dist/src/providers/model-catalog-persistence.js +2 -2
- package/dist/src/providers/presentation.js +1 -0
- package/dist/src/providers/xopc-cloud-model-source.js +1 -1
- package/dist/src/storage/sqlite/clarification-wait-repository.js +1 -0
- package/dist/src/storage/sqlite/migrations/238_browser_record_replay.sql +45 -0
- package/dist/src/storage/sqlite/migrations/239_clarification_notifications.sql +26 -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/schema.js +1 -1
- package/dist/src/tasks/home-query-service.d.ts +1 -1
- package/dist/src/tasks/home-query-service.js +6 -2
- package/dist/src/voice/dashscope/streaming-tts-stream.d.ts +2 -1
- package/dist/src/voice/dashscope/streaming-tts-stream.js +135 -79
- package/dist/src/voice/metadata/types.d.ts +1 -0
- package/dist/src/voice/platform-catalog.d.ts +4 -0
- package/dist/src/voice/platform-settings.js +1 -0
- package/dist/src/voice/realtime/agentEngine.js +78 -1
- package/dist/src/voice/realtime/speakable-segmenter.d.ts +2 -0
- package/dist/src/voice/realtime/speakable-segmenter.js +30 -0
- package/dist/src/voice/tts/providers/alibaba-speech.js +17 -1
- package/dist/src/voice/tts/providers/xopc-cloud-speech.js +3 -2
- package/dist/src/voice/tts/speak-core.d.ts +3 -0
- package/dist/src/voice/tts/speak-core.js +21 -1
- package/dist/src/voice/tts/speech-provider-types.d.ts +8 -0
- package/package.json +3 -3
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-gT9_j4tr.js +0 -1
- package/dist/gateway/static/root/assets/agent-plugin-dialog-CLXCJ6JN.js +0 -1
- package/dist/gateway/static/root/assets/agents-BAUfOMsq.js +0 -66
- package/dist/gateway/static/root/assets/app-management-settings-panel-CoIFxQKH.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-BCGPjsdU.js +0 -6
- package/dist/gateway/static/root/assets/browser-automation-inputs-BUAIKIX0.js +0 -1
- package/dist/gateway/static/root/assets/browser-automations-page-CSwu1U1F.js +0 -3
- package/dist/gateway/static/root/assets/browser-settings-page-C1ReMNqX.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-page-BdTSqloI.js +0 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-BUblBMZC.js +0 -8
- package/dist/gateway/static/root/assets/channels-CXCf5qO6.js +0 -1
- package/dist/gateway/static/root/assets/computer-settings-page-B5SuSZ3G.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DfnK1crf.js +0 -2
- package/dist/gateway/static/root/assets/device-pairing-wizard-s2ogSa4l.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-C_Th8kGg.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-CZ73IpbP.js +0 -1
- package/dist/gateway/static/root/assets/home-page-BQWq4kYi.js +0 -2
- package/dist/gateway/static/root/assets/index-BQgqzhQj.js +0 -106
- package/dist/gateway/static/root/assets/index-COB4QIJp.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-B-Y9oZLh.js +0 -2
- package/dist/gateway/static/root/assets/management-settings-B2lzsw6X.js +0 -1
- package/dist/gateway/static/root/assets/messages-Dy26npMy.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-cache-B1C86nRp.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-DL__qP6U.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-DTBbg9Hs.js +0 -8
- package/dist/gateway/static/root/assets/oauth-api-BwpzpRwC.js +0 -1
- package/dist/gateway/static/root/assets/personal-page-CzaTnHeD.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CKxqncqW.js +0 -1
- package/dist/gateway/static/root/assets/scenes-page-Cv_5ozfX.js +0 -2
- package/dist/gateway/static/root/assets/sessions-page-DZcu6NLJ.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DazqeDQ7.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-CsDATuCw.js +0 -1
- package/dist/gateway/static/root/assets/system-settings-panel-Bn3khdzb.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-CG6wqIKP.js +0 -2
- package/dist/src/browser/policy/approval-store.d.ts +0 -17
- package/dist/src/browser/policy/approval-store.js +0 -62
- package/dist/src/browser/providers/extension-ws-acquire.d.ts +0 -19
- package/dist/src/browser/providers/extension-ws-acquire.js +0 -78
- package/dist/src/browser/providers/extension.d.ts +0 -61
- package/dist/src/browser/providers/extension.js +0 -378
package/dist/gateway/static/root/assets/{workspace-api-CdVUhyPo.js → workspace-api-Si2o3inw.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/session-manager-
|
|
2
|
-
import{t as e}from"./preload-helper-zJ_50EbN.js";import{i as t,r as n}from"./locale-store-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/session-manager-LInoZ_Yi.js","assets/rolldown-runtime-aKtaBQYM.js","assets/locale-store-COVscAqC.js","assets/vendor-react-BOUWij0V.js","assets/messages-Bb2GK-Nj.js","assets/schemas-CObaziC7.js","assets/gateway-realtime-DDWymi-o.js","assets/gateway-realtime-store-BheKaO6d.js","assets/local-session-drafts-DRPsDCj1.js","assets/session-api-yjpEz4pP.js","assets/gateway-startup-retry-jiV5sbEX.js","assets/tool-activity-BtJkgjFf.js","assets/constants-Dy8Gw0sF.js","assets/registry-api-Bh9UBb-f.js","assets/preload-helper-zJ_50EbN.js","assets/attachment-utils-core-BIOUBrpT.js","assets/agents-admin-api-HBZvVyzF.js","assets/gateway-config-swr-7RKqgU_U.js","assets/vendor-swr-BIWyz7Rc.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./preload-helper-zJ_50EbN.js";import{i as t,r as n}from"./locale-store-COVscAqC.js";import{i as r,n as i,r as a,t as o}from"./files-Bw4SBGdM.js";async function s(e){let t=await e.json().catch(()=>null);return Error(t?.error?.message??`HTTP ${e.status}`)}async function c(e,r){let i=await t(n(e),r);if(!i.ok)throw await s(i);return i.json()}async function l(t){if(!t?.projectId&&t?.conversationId){let{SessionManager:n}=await e(async()=>{let{SessionManager:e}=await import(`./session-manager-LInoZ_Yi.js`).then(e=>e.n);return{SessionManager:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]));await new n().materialize(t.conversationId,`session_resources`)}let n=t?.projectId?{kind:`project`,id:t.projectId}:t?.conversationId?{kind:`session`,id:t.conversationId}:t?.agentId?{kind:`agent`,id:t.agentId}:null;if(n){let e=await c(`/api/files/contexts/${n.kind}/${encodeURIComponent(n.id)}`);return r.parse(e.space)}let i=await c(`/api/files/default-space`);return r.parse(i.space)}function u(e){return{id:e.id,name:e.name,path:e.relativePath,isDirectory:e.kind===`directory`,mimeType:e.mimeType,revision:e.revision}}async function d(e,t){let n=await l(t),r=await c(`/api/files/resolve`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,taskRunId:t?.taskRunId})});return i.parse(r.resource)}async function f(e,t){return d(e,t)}async function p(e=``,t){let n=await l(t),r=new URLSearchParams;return e&&r.set(`path`,e),{entries:a.parse(await c(`/api/files/spaces/${encodeURIComponent(n.id)}/children${r.size?`?${r}`:``}`)).items.map(u)}}async function m(e=``,t){return(await p(e,t)).entries}async function h(e){let t=await l(e);return u(o.parse(await c(`/api/files/spaces/${encodeURIComponent(t.id)}/root`)).resource)}async function g(e,t,n=50){let r=await l(t),i=new URLSearchParams({q:e.trim(),limit:String(n),spaceId:r.id});return a.parse(await c(`/api/files/search?${i}`)).items.map(u)}async function _(e,r){let i=await d(e,r),a=await t(n(`/api/files/${encodeURIComponent(i.id)}/content`));if(!a.ok)throw await s(a);return{content:await a.text(),path:i.relativePath,mtimeMs:i.modifiedAt,revision:i.revision}}async function v(e,t){let n;try{n=await l(t)}catch{return null}try{let r=await c(`/api/files/resolve`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,taskRunId:t?.taskRunId})}),a=i.parse(r.resource);return{absolutePath:r.absolutePath,fileId:a.id,inputPath:e,displayName:a.name,scope:r.absolutePath?`external`:`workspace`,locationKind:r.absolutePath?`host`:`workspace`,exists:!0,isDirectory:a.kind===`directory`,workspaceRelativePath:a.relativePath,capabilities:a.capabilities.filter(e=>e===`preview`||e===`edit`),mtimeMs:a.modifiedAt}}catch{try{return(await c(`/api/files/resolve-reference`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,conversationId:t?.conversationId})})).reference}catch{return null}}}async function y(e,t,n){return await c(`/api/files/references/${encodeURIComponent(e)}/action`,{method:`POST`,body:JSON.stringify({action:t,conversationId:n?.conversationId})})}async function b(e,r){let i=await d(e,r),a=await t(n(`/api/files/${encodeURIComponent(i.id)}/content`),{headers:{Accept:`*/*`}});if(!a.ok)throw await s(a);return a.blob()}async function x(e,t,n){let r=await d(e,n),a=await c(`/api/files/${encodeURIComponent(r.id)}/content`,{method:`PUT`,body:JSON.stringify({content:t,revision:r.revision})}),o=i.parse(a.resource);return{path:o.relativePath,mtimeMs:o.modifiedAt,revision:o.revision}}async function S(e,r=``,i){let a=await l(i),c=new FormData;c.set(`directory`,r),c.set(`file`,e);let d=await t(n(`/api/files/spaces/${encodeURIComponent(a.id)}/upload`),{method:`POST`,body:c});if(!d.ok)throw await s(d);return u(o.parse(await d.json()).resource)}async function C(e){let r=await t(n(`/api/files/${encodeURIComponent(e)}`),{method:`DELETE`});if(!r.ok)throw await s(r)}function w(e,t){let n=new Blob([t],{type:`text/plain;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r)}function T(e,t,n){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}export{b as a,_ as c,f as d,g as f,p as i,y as l,x as m,T as n,h as o,S as p,w as r,m as s,C as t,v as u};
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=20260910-1" />
|
|
12
12
|
<link rel="manifest" href="/site.webmanifest?v=20260910-1" />
|
|
13
13
|
<title>XOPC — Keep what matters moving.</title>
|
|
14
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-BB1z8QxA.js"></script>
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
<link rel="modulepreload" crossorigin href="/assets/download-Dk-ZjtO6.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="/assets/plus-Q2yW6OE7.js">
|
|
27
27
|
<link rel="modulepreload" crossorigin href="/assets/x-B_N4OPjy.js">
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/messages-
|
|
29
|
-
<link rel="modulepreload" crossorigin href="/assets/locale-store-
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/messages-Bb2GK-Nj.js">
|
|
29
|
+
<link rel="modulepreload" crossorigin href="/assets/locale-store-COVscAqC.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/assets/cn-JdwAhgNB.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/schemas-CObaziC7.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/local-apps-yys1VChX.js">
|
|
33
33
|
<link rel="modulepreload" crossorigin href="/assets/product-delivery-BAks11S4.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assets/app-link-4gpFbdsr.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/copy-to-clipboard-HOJ79TWv.js">
|
|
36
|
-
<link rel="modulepreload" crossorigin href="/assets/markdown-view-
|
|
36
|
+
<link rel="modulepreload" crossorigin href="/assets/markdown-view-B_qnAcW2.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/dist-Che_jiQF.js">
|
|
38
38
|
<link rel="modulepreload" crossorigin href="/assets/vendor-swr-BIWyz7Rc.js">
|
|
39
39
|
<link rel="modulepreload" crossorigin href="/assets/activity-YogQEteU.js">
|
|
@@ -70,30 +70,30 @@
|
|
|
70
70
|
<link rel="modulepreload" crossorigin href="/assets/rotate-cw-LIg3Am9S.js">
|
|
71
71
|
<link rel="modulepreload" crossorigin href="/assets/search-DA7gz22f.js">
|
|
72
72
|
<link rel="modulepreload" crossorigin href="/assets/index.module-Cd9ENXfk.js">
|
|
73
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-
|
|
74
|
-
<link rel="modulepreload" crossorigin href="/assets/session-api-
|
|
73
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-jiV5sbEX.js">
|
|
74
|
+
<link rel="modulepreload" crossorigin href="/assets/session-api-yjpEz4pP.js">
|
|
75
75
|
<link rel="modulepreload" crossorigin href="/assets/constants-Dy8Gw0sF.js">
|
|
76
76
|
<link rel="modulepreload" crossorigin href="/assets/app-chrome-BeB4KgOf.js">
|
|
77
77
|
<link rel="modulepreload" crossorigin href="/assets/attachment-utils-core-BIOUBrpT.js">
|
|
78
78
|
<link rel="modulepreload" crossorigin href="/assets/files-Bw4SBGdM.js">
|
|
79
|
-
<link rel="modulepreload" crossorigin href="/assets/workspace-api-
|
|
79
|
+
<link rel="modulepreload" crossorigin href="/assets/workspace-api-Si2o3inw.js">
|
|
80
80
|
<link rel="modulepreload" crossorigin href="/assets/electron-env-Dit0bHgy.js">
|
|
81
81
|
<link rel="modulepreload" crossorigin href="/assets/use-async-resource-GrnWNwMZ.js">
|
|
82
|
-
<link rel="modulepreload" crossorigin href="/assets/activity-store-
|
|
83
|
-
<link rel="modulepreload" crossorigin href="/assets/use-file-preview-expanded-
|
|
82
|
+
<link rel="modulepreload" crossorigin href="/assets/activity-store-BQ3PMp2q.js">
|
|
83
|
+
<link rel="modulepreload" crossorigin href="/assets/use-file-preview-expanded-Db2VYg1b.js">
|
|
84
84
|
<link rel="modulepreload" crossorigin href="/assets/globe-DSSGFWFn.js">
|
|
85
85
|
<link rel="modulepreload" crossorigin href="/assets/button-CS04eWY9.js">
|
|
86
86
|
<link rel="modulepreload" crossorigin href="/assets/copy-text-row-BHDs3cBa.js">
|
|
87
|
-
<link rel="modulepreload" crossorigin href="/assets/share-link-dialog-
|
|
88
|
-
<link rel="modulepreload" crossorigin href="/assets/local-session-drafts-
|
|
87
|
+
<link rel="modulepreload" crossorigin href="/assets/share-link-dialog-DJTabLAM.js">
|
|
88
|
+
<link rel="modulepreload" crossorigin href="/assets/local-session-drafts-DRPsDCj1.js">
|
|
89
89
|
<link rel="modulepreload" crossorigin href="/assets/tasks-DwKXgZ-I.js">
|
|
90
|
-
<link rel="modulepreload" crossorigin href="/assets/capabilities-
|
|
90
|
+
<link rel="modulepreload" crossorigin href="/assets/capabilities-DO-vfNKI.js">
|
|
91
91
|
<link rel="modulepreload" crossorigin href="/assets/skill-wire-pattern-BPpeIcCi.js">
|
|
92
|
-
<link rel="modulepreload" crossorigin href="/assets/shares-api-
|
|
93
|
-
<link rel="modulepreload" crossorigin href="/assets/capabilities-
|
|
94
|
-
<link rel="modulepreload" crossorigin href="/assets/use-composer-attachments-
|
|
92
|
+
<link rel="modulepreload" crossorigin href="/assets/shares-api-c0dfWz6h.js">
|
|
93
|
+
<link rel="modulepreload" crossorigin href="/assets/capabilities-B48r0DDa.js">
|
|
94
|
+
<link rel="modulepreload" crossorigin href="/assets/use-composer-attachments-C7Gaaai1.js">
|
|
95
95
|
<link rel="modulepreload" crossorigin href="/assets/git-branch-Dh9uxTot.js">
|
|
96
|
-
<link rel="modulepreload" crossorigin href="/assets/notes-api-
|
|
96
|
+
<link rel="modulepreload" crossorigin href="/assets/notes-api-sBgBcyLW.js">
|
|
97
97
|
<link rel="modulepreload" crossorigin href="/assets/message-square-fVE7Ghj1.js">
|
|
98
98
|
<link rel="modulepreload" crossorigin href="/assets/pause-DuPxgSxk.js">
|
|
99
99
|
<link rel="modulepreload" crossorigin href="/assets/play-kxZvpBg8.js">
|
|
@@ -101,25 +101,24 @@
|
|
|
101
101
|
<link rel="modulepreload" crossorigin href="/assets/settings-2-D-csvaET.js">
|
|
102
102
|
<link rel="modulepreload" crossorigin href="/assets/sparkles-DHlfQFAF.js">
|
|
103
103
|
<link rel="modulepreload" crossorigin href="/assets/middleware-Pd0e8Igk.js">
|
|
104
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-realtime-store-
|
|
105
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-realtime-
|
|
104
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-realtime-store-BheKaO6d.js">
|
|
105
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-realtime-DDWymi-o.js">
|
|
106
106
|
<link rel="modulepreload" crossorigin href="/assets/tool-activity-BtJkgjFf.js">
|
|
107
|
-
<link rel="modulepreload" crossorigin href="/assets/registry-api-
|
|
108
|
-
<link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-
|
|
109
|
-
<link rel="modulepreload" crossorigin href="/assets/agents-admin-api-
|
|
110
|
-
<link rel="modulepreload" crossorigin href="/assets/session-manager-
|
|
111
|
-
<link rel="modulepreload" crossorigin href="/assets/send-session-input-
|
|
112
|
-
<link rel="modulepreload" crossorigin href="/assets/theme-store-
|
|
113
|
-
<link rel="modulepreload" crossorigin href="/assets/extension-provider-
|
|
107
|
+
<link rel="modulepreload" crossorigin href="/assets/registry-api-Bh9UBb-f.js">
|
|
108
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-7RKqgU_U.js">
|
|
109
|
+
<link rel="modulepreload" crossorigin href="/assets/agents-admin-api-HBZvVyzF.js">
|
|
110
|
+
<link rel="modulepreload" crossorigin href="/assets/session-manager-LInoZ_Yi.js">
|
|
111
|
+
<link rel="modulepreload" crossorigin href="/assets/send-session-input-Dgn4BRk_.js">
|
|
112
|
+
<link rel="modulepreload" crossorigin href="/assets/theme-store-BOfCKgl6.js">
|
|
113
|
+
<link rel="modulepreload" crossorigin href="/assets/extension-provider-xlSyz4Z6.js">
|
|
114
114
|
<link rel="modulepreload" crossorigin href="/assets/loopi-Djb8XU3l.js">
|
|
115
|
-
<link rel="modulepreload" crossorigin href="/assets/models-hub-cache-
|
|
116
|
-
<link rel="modulepreload" crossorigin href="/assets/oauth-api-BwpzpRwC.js">
|
|
115
|
+
<link rel="modulepreload" crossorigin href="/assets/models-hub-cache-DyPPksMP.js">
|
|
117
116
|
<link rel="modulepreload" crossorigin href="/assets/skill-api-utils-C7V4JVXM.js">
|
|
118
117
|
<link rel="modulepreload" crossorigin href="/assets/date-formatters-CUZAyDEg.js">
|
|
119
118
|
<link rel="modulepreload" crossorigin href="/assets/settings-form-draft-Dy10ldo8.js">
|
|
120
119
|
<link rel="stylesheet" crossorigin href="/assets/markdown-view-DSjfHfaW.css">
|
|
121
120
|
<link rel="stylesheet" crossorigin href="/assets/loopi-C09I2mNj.css">
|
|
122
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
121
|
+
<link rel="stylesheet" crossorigin href="/assets/index-D9R6tU7r.css">
|
|
123
122
|
</head>
|
|
124
123
|
<body>
|
|
125
124
|
<div id="root"></div>
|
package/dist/package.js
CHANGED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
//#region packages/browser-control-contract/src/automation.ts
|
|
2
|
+
/** Runs in the page. Keep all helpers inside this function for serialization. */
|
|
3
|
+
async function browserDom(input) {
|
|
4
|
+
const root = globalThis;
|
|
5
|
+
const doc = root.document;
|
|
6
|
+
const normalize = (value) => String(value || "").trim().replace(/\s+/g, " ").slice(0, 240);
|
|
7
|
+
const sensitive = (element) => element.type === "password" || element.type === "file" || /cc-|one-time-code|transaction-|password|token|secret|otp|cvv|cvc|card.?number|验证码|密码|银行卡|卡号/i.test([
|
|
8
|
+
element.autocomplete,
|
|
9
|
+
element.name,
|
|
10
|
+
element.id,
|
|
11
|
+
element.getAttribute("aria-label"),
|
|
12
|
+
name(element)
|
|
13
|
+
].join(" "));
|
|
14
|
+
const role = (element) => element.getAttribute("role") || {
|
|
15
|
+
A: "link",
|
|
16
|
+
BUTTON: "button",
|
|
17
|
+
SUMMARY: "button",
|
|
18
|
+
SELECT: "combobox",
|
|
19
|
+
TEXTAREA: "textbox",
|
|
20
|
+
FORM: "form",
|
|
21
|
+
FIELDSET: "group",
|
|
22
|
+
SECTION: "region"
|
|
23
|
+
}[element.tagName] || (element.tagName === "INPUT" ? element.type === "checkbox" ? "checkbox" : element.type === "radio" ? "radio" : [
|
|
24
|
+
"submit",
|
|
25
|
+
"button",
|
|
26
|
+
"reset"
|
|
27
|
+
].includes(element.type) ? "button" : "textbox" : "text");
|
|
28
|
+
const name = (element) => normalize((element.getAttribute("aria-labelledby") || "").split(/\s+/).map((id) => doc.getElementById(id)?.textContent || "").join(" ") || element.getAttribute("aria-label") || element.labels?.[0]?.textContent || (element.tagName === "FIELDSET" ? element.querySelector("legend")?.textContent : "") || element.getAttribute("alt") || element.getAttribute("placeholder") || ([
|
|
29
|
+
"submit",
|
|
30
|
+
"button",
|
|
31
|
+
"reset"
|
|
32
|
+
].includes(element.type) ? element.value : "") || element.innerText || element.getAttribute("title") || "");
|
|
33
|
+
const describe = (element) => {
|
|
34
|
+
const container = element.parentElement?.closest("form,fieldset,section,[role=\"region\"],[role=\"group\"],[role=\"dialog\"]");
|
|
35
|
+
return {
|
|
36
|
+
role: role(element),
|
|
37
|
+
name: name(element),
|
|
38
|
+
...element.getAttribute("data-testid") ? { testId: element.getAttribute("data-testid") } : {},
|
|
39
|
+
...container && name(container) ? { scope: {
|
|
40
|
+
role: role(container),
|
|
41
|
+
name: name(container)
|
|
42
|
+
} } : {}
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
const selector = "a[href],button,input:not([type=\"hidden\"]),textarea,select,summary,[role],[data-testid],label,p,span,h1,h2,h3,td,output";
|
|
46
|
+
if (input.operation === "resolve") {
|
|
47
|
+
const target = input.target;
|
|
48
|
+
const matches = Array.from(doc.querySelectorAll(selector)).filter((element) => {
|
|
49
|
+
const rect = element.getBoundingClientRect();
|
|
50
|
+
const style = root.getComputedStyle(element);
|
|
51
|
+
if (!rect.width || !rect.height || style.display === "none" || style.visibility === "hidden") return false;
|
|
52
|
+
const descriptor = describe(element);
|
|
53
|
+
return descriptor.role === target.role && (!target.name || descriptor.name === target.name) && (!target.nameIncludes || descriptor.name?.includes(target.nameIncludes)) && (!target.testId || descriptor.testId === target.testId) && (!target.scope || descriptor.scope?.role === target.scope.role && descriptor.scope?.name === target.scope.name);
|
|
54
|
+
});
|
|
55
|
+
if (matches.length !== 1) return { matches: matches.length };
|
|
56
|
+
const element = matches[0];
|
|
57
|
+
const ref = `xopc-e${++root.__xopcRefCounter || (root.__xopcRefCounter = 1)}`;
|
|
58
|
+
element.setAttribute("data-xopc-ref", ref);
|
|
59
|
+
return {
|
|
60
|
+
matches: 1,
|
|
61
|
+
node: {
|
|
62
|
+
ref,
|
|
63
|
+
role: role(element),
|
|
64
|
+
name: name(element),
|
|
65
|
+
value: !sensitive(element) && "value" in element ? String(element.value).slice(0, 4096) : void 0,
|
|
66
|
+
description: !sensitive(element) ? normalize(element.textContent) : void 0,
|
|
67
|
+
href: element.tagName === "A" ? element.href : void 0,
|
|
68
|
+
states: [
|
|
69
|
+
sensitive(element) ? "sensitive" : "",
|
|
70
|
+
element.disabled ? "disabled" : "",
|
|
71
|
+
element.checked ? "checked" : "",
|
|
72
|
+
["BUTTON", "INPUT"].includes(element.tagName) && element.type === "submit" ? "submit" : ""
|
|
73
|
+
].filter(Boolean)
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const prior = root.__xopcRecorder;
|
|
78
|
+
if (input.operation === "record" && prior?.recordingId === input.recordingId && prior?.generation === input.generation) return { recording: true };
|
|
79
|
+
if (prior) {
|
|
80
|
+
await prior.stop();
|
|
81
|
+
delete root.__xopcRecorder;
|
|
82
|
+
}
|
|
83
|
+
if (input.operation === "stop") return { stopped: true };
|
|
84
|
+
let sourceSeq = 0;
|
|
85
|
+
const pending = /* @__PURE__ */ new Set();
|
|
86
|
+
const dirty = /* @__PURE__ */ new Set();
|
|
87
|
+
const lastValues = /* @__PURE__ */ new WeakMap();
|
|
88
|
+
const listeners = [];
|
|
89
|
+
const cleanUrl = () => {
|
|
90
|
+
const url = new URL(root.location.href);
|
|
91
|
+
url.username = "";
|
|
92
|
+
url.password = "";
|
|
93
|
+
url.hash = "";
|
|
94
|
+
for (const key of [...url.searchParams.keys()]) if (/token|secret|password|key|code/i.test(key)) url.searchParams.delete(key);
|
|
95
|
+
return url.toString();
|
|
96
|
+
};
|
|
97
|
+
const documentId = `${root.performance.timeOrigin}:${input.generation}`;
|
|
98
|
+
let failed = false;
|
|
99
|
+
let ended = false;
|
|
100
|
+
let enterTarget;
|
|
101
|
+
let enterAt = 0;
|
|
102
|
+
const emit = (event) => {
|
|
103
|
+
const task = root.chrome.runtime.sendMessage({
|
|
104
|
+
type: "browser/recording-event",
|
|
105
|
+
recordingId: input.recordingId,
|
|
106
|
+
generation: input.generation,
|
|
107
|
+
event: {
|
|
108
|
+
...event,
|
|
109
|
+
id: root.crypto.randomUUID(),
|
|
110
|
+
sourceSeq: ++sourceSeq,
|
|
111
|
+
documentId,
|
|
112
|
+
url: cleanUrl()
|
|
113
|
+
}
|
|
114
|
+
}).then((ack) => {
|
|
115
|
+
if (!ack?.ok) failed = true;
|
|
116
|
+
}).catch(() => {
|
|
117
|
+
failed = true;
|
|
118
|
+
});
|
|
119
|
+
pending.add(task);
|
|
120
|
+
task.finally(() => pending.delete(task));
|
|
121
|
+
};
|
|
122
|
+
const flush = (element) => {
|
|
123
|
+
if (!dirty.delete(element) || sensitive(element)) return;
|
|
124
|
+
const value = String(element.value || "").slice(0, 4096);
|
|
125
|
+
if (lastValues.get(element) === value) return;
|
|
126
|
+
lastValues.set(element, value);
|
|
127
|
+
emit({
|
|
128
|
+
action: element.tagName === "SELECT" ? "select" : "fill",
|
|
129
|
+
target: describe(element),
|
|
130
|
+
value
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
const listen = (type, handler) => {
|
|
134
|
+
listeners.push([type, handler]);
|
|
135
|
+
(type === "pagehide" ? root : doc).addEventListener(type, handler, true);
|
|
136
|
+
};
|
|
137
|
+
listen("input", (event) => {
|
|
138
|
+
if (event.isTrusted && !sensitive(event.target) && !["checkbox", "radio"].includes(event.target.type) && "value" in event.target) dirty.add(event.target);
|
|
139
|
+
});
|
|
140
|
+
listen("dragstart", (event) => {
|
|
141
|
+
if (event.isTrusted) emit({
|
|
142
|
+
action: "unsupported",
|
|
143
|
+
value: "Drag actions are not supported by the recorder."
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
listen("change", (event) => {
|
|
147
|
+
if (!event.isTrusted || sensitive(event.target)) return;
|
|
148
|
+
if (["checkbox", "radio"].includes(event.target.type)) emit({
|
|
149
|
+
action: "check",
|
|
150
|
+
target: describe(event.target),
|
|
151
|
+
checked: !!event.target.checked
|
|
152
|
+
});
|
|
153
|
+
else {
|
|
154
|
+
dirty.add(event.target);
|
|
155
|
+
flush(event.target);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
listen("focusout", (event) => flush(event.target));
|
|
159
|
+
listen("click", (event) => {
|
|
160
|
+
if (!event.isTrusted) return;
|
|
161
|
+
for (const element of dirty) flush(element);
|
|
162
|
+
const element = event.target.closest("a[href],button,summary,[role=\"button\"],input[type=\"submit\"],input[type=\"button\"]");
|
|
163
|
+
if (element && event.detail === 0 && Date.now() - enterAt < 500 && (element === enterTarget || element.form && element.form === enterTarget?.form)) return;
|
|
164
|
+
if (element && !sensitive(element)) emit({
|
|
165
|
+
action: "click",
|
|
166
|
+
target: describe(element)
|
|
167
|
+
});
|
|
168
|
+
else if (event.target.closest("canvas,[contenteditable=\"true\"],input[type=\"file\"]")) emit({
|
|
169
|
+
action: "unsupported",
|
|
170
|
+
value: "Canvas, rich text and file actions require an assistant to complete the workflow."
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
listen("pagehide", () => {
|
|
174
|
+
for (const element of dirty) flush(element);
|
|
175
|
+
emit({ action: "checkpoint" });
|
|
176
|
+
ended = true;
|
|
177
|
+
for (const [type, handler] of listeners) (type === "pagehide" ? root : doc).removeEventListener(type, handler, true);
|
|
178
|
+
});
|
|
179
|
+
listen("keydown", (event) => {
|
|
180
|
+
if (!event.isTrusted || event.isComposing || sensitive(event.target) || !["Enter", "Escape"].includes(event.key)) return;
|
|
181
|
+
flush(event.target);
|
|
182
|
+
if (event.key === "Enter") {
|
|
183
|
+
enterTarget = event.target;
|
|
184
|
+
enterAt = Date.now();
|
|
185
|
+
}
|
|
186
|
+
emit({
|
|
187
|
+
action: "press",
|
|
188
|
+
target: describe(event.target),
|
|
189
|
+
key: event.key
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
root.__xopcRecorder = {
|
|
193
|
+
recordingId: input.recordingId,
|
|
194
|
+
generation: input.generation,
|
|
195
|
+
stop: async () => {
|
|
196
|
+
for (const [type, handler] of listeners) (type === "pagehide" ? root : doc).removeEventListener(type, handler, true);
|
|
197
|
+
for (const element of dirty) flush(element);
|
|
198
|
+
if (!ended) {
|
|
199
|
+
emit({ action: "checkpoint" });
|
|
200
|
+
ended = true;
|
|
201
|
+
}
|
|
202
|
+
await Promise.all([...pending]);
|
|
203
|
+
if (failed) throw new Error("Recording events could not be saved.");
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
emit({ action: "navigate" });
|
|
207
|
+
return {
|
|
208
|
+
recording: true,
|
|
209
|
+
documentId
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
//#endregion
|
|
213
|
+
export { browserDom };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import "./automation.js";
|
|
1
2
|
//#region packages/browser-control-contract/src/index.ts
|
|
2
3
|
const BROWSER_CONTROL_ENDPOINT_TOOL_NAME = "browser.control";
|
|
3
4
|
const BROWSER_CONTROL_ENDPOINT_INPUT_SCHEMA = {
|
|
@@ -28,16 +29,46 @@ const BROWSER_CONTROL_ENDPOINT_OUTPUT_SCHEMA = {
|
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
};
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
const BROWSER_CONTROL_ENDPOINT_DESCRIPTOR = {
|
|
33
|
+
name: BROWSER_CONTROL_ENDPOINT_TOOL_NAME,
|
|
34
|
+
title: "Browser control transport",
|
|
35
|
+
description: "Internal authenticated transport for xopc browser-control actions.",
|
|
36
|
+
inputSchema: BROWSER_CONTROL_ENDPOINT_INPUT_SCHEMA,
|
|
37
|
+
outputSchema: BROWSER_CONTROL_ENDPOINT_OUTPUT_SCHEMA,
|
|
38
|
+
policyId: "browser.control",
|
|
39
|
+
sensitivity: "personal",
|
|
40
|
+
effect: "write",
|
|
41
|
+
confirmation: "never",
|
|
42
|
+
requiresForeground: false,
|
|
43
|
+
requiredPermissions: ["browser-control"],
|
|
44
|
+
timeoutMs: 12e4,
|
|
45
|
+
maxConcurrency: 4,
|
|
46
|
+
supportsCancellation: true,
|
|
47
|
+
idempotent: false,
|
|
48
|
+
resultKinds: ["json"]
|
|
49
|
+
};
|
|
50
|
+
const BROWSER_RECORDING_ENDPOINT_INPUT_SCHEMA = {
|
|
51
|
+
type: "object",
|
|
52
|
+
additionalProperties: false,
|
|
53
|
+
required: ["operation"],
|
|
54
|
+
properties: { operation: {
|
|
55
|
+
type: "string",
|
|
56
|
+
enum: [
|
|
57
|
+
"start",
|
|
58
|
+
"pause",
|
|
59
|
+
"resume",
|
|
60
|
+
"finish",
|
|
61
|
+
"status"
|
|
62
|
+
]
|
|
63
|
+
} }
|
|
64
|
+
};
|
|
65
|
+
const BROWSER_RECORDING_ENDPOINT_DESCRIPTOR = {
|
|
66
|
+
...BROWSER_CONTROL_ENDPOINT_DESCRIPTOR,
|
|
67
|
+
name: "browser.recording",
|
|
68
|
+
title: "Browser workflow recording",
|
|
69
|
+
description: "Record a workflow in the active browser tab and save it as an automation.",
|
|
70
|
+
inputSchema: BROWSER_RECORDING_ENDPOINT_INPUT_SCHEMA,
|
|
71
|
+
maxConcurrency: 1
|
|
72
|
+
};
|
|
42
73
|
//#endregion
|
|
43
|
-
export { BROWSER_CONTROL_ENDPOINT_INPUT_SCHEMA, BROWSER_CONTROL_ENDPOINT_OUTPUT_SCHEMA, BROWSER_CONTROL_ENDPOINT_TOOL_NAME,
|
|
74
|
+
export { BROWSER_CONTROL_ENDPOINT_DESCRIPTOR, BROWSER_CONTROL_ENDPOINT_INPUT_SCHEMA, BROWSER_CONTROL_ENDPOINT_OUTPUT_SCHEMA, BROWSER_CONTROL_ENDPOINT_TOOL_NAME, BROWSER_RECORDING_ENDPOINT_DESCRIPTOR, BROWSER_RECORDING_ENDPOINT_INPUT_SCHEMA };
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
//#region packages/realtime-protocol/src/voice-catalog.ts
|
|
4
|
-
var voiceModeCapabilitySchema, voiceManifestSchema, voiceSelectionSchema;
|
|
4
|
+
var voiceDisplayNamesSchema, voiceModeCapabilitySchema, voiceManifestSchema, voiceSelectionSchema;
|
|
5
5
|
var init_voice_catalog = __esmMin((() => {
|
|
6
|
+
voiceDisplayNamesSchema = z.strictObject({
|
|
7
|
+
"zh-CN": z.string().min(1).optional(),
|
|
8
|
+
en: z.string().min(1).optional()
|
|
9
|
+
});
|
|
6
10
|
voiceModeCapabilitySchema = z.enum([
|
|
7
11
|
"transcription",
|
|
8
12
|
"transcription.stream",
|
|
@@ -32,6 +36,7 @@ var init_voice_catalog = __esmMin((() => {
|
|
|
32
36
|
voices: z.array(z.strictObject({
|
|
33
37
|
id: z.string().min(1),
|
|
34
38
|
name: z.string(),
|
|
39
|
+
displayNames: voiceDisplayNamesSchema.optional(),
|
|
35
40
|
languages: z.array(z.string()),
|
|
36
41
|
gender: z.enum(["female", "male"]).optional(),
|
|
37
42
|
style: z.string().optional(),
|
|
@@ -55,6 +60,7 @@ var init_voice_catalog = __esmMin((() => {
|
|
|
55
60
|
models: z.array(z.strictObject({
|
|
56
61
|
id: z.string(),
|
|
57
62
|
name: z.string(),
|
|
63
|
+
displayNames: voiceDisplayNamesSchema.optional(),
|
|
58
64
|
voice: voiceManifestSchema
|
|
59
65
|
}))
|
|
60
66
|
});
|
|
@@ -10,7 +10,7 @@ function parseVoiceClientJsonFrame(text) {
|
|
|
10
10
|
if (new TextEncoder().encode(text).byteLength > 16 * 1024) throw new Error("Voice control frame exceeds 16384 bytes");
|
|
11
11
|
return JSON.parse(text);
|
|
12
12
|
}
|
|
13
|
-
var VOICE_REALTIME_WS_PATH, VOICE_REALTIME_PROXY_WS_PATH, VOICE_REALTIME_MAX_BINARY_FRAME_BYTES, VOICE_REALTIME_START_TIMEOUT_MS, VOICE_REALTIME_HEARTBEAT_INTERVAL_MS, idSchema, timestampSchema, voicePurposeSchema, voiceModeSchema, voiceInputModeSchema, voiceLanguageSchema, voicePcmFormatSchema, voiceProviderRouteSchema, voiceRouteSchema, availabilitySchema, createVoiceSessionRequestSchema, clientEnvelope, voiceClientMessageSchema, transcriptPayloadSchema, serverEnvelope;
|
|
13
|
+
var VOICE_REALTIME_WS_PATH, VOICE_REALTIME_PROXY_WS_PATH, VOICE_REALTIME_MAX_BINARY_FRAME_BYTES, VOICE_REALTIME_START_TIMEOUT_MS, VOICE_REALTIME_HEARTBEAT_INTERVAL_MS, idSchema, timestampSchema, voicePurposeSchema, voiceModeSchema, voiceInputModeSchema, voiceLanguageSchema, VOICE_TIMING_METRICS, voicePcmFormatSchema, voiceProviderRouteSchema, voiceRouteSchema, availabilitySchema, createVoiceSessionRequestSchema, clientEnvelope, voiceClientMessageSchema, transcriptPayloadSchema, serverEnvelope;
|
|
14
14
|
var init_voice = __esmMin((() => {
|
|
15
15
|
init_voice_catalog();
|
|
16
16
|
init_voice_audio();
|
|
@@ -25,6 +25,12 @@ var init_voice = __esmMin((() => {
|
|
|
25
25
|
voiceModeSchema = z.enum(["natural", "assistant"]);
|
|
26
26
|
voiceInputModeSchema = z.literal("server_vad");
|
|
27
27
|
voiceLanguageSchema = z.enum(["zh", "en"]);
|
|
28
|
+
VOICE_TIMING_METRICS = [
|
|
29
|
+
"speech_end_to_audio_received",
|
|
30
|
+
"speech_end_to_audio_scheduled",
|
|
31
|
+
"speech_end_to_audio_buffered",
|
|
32
|
+
"local_stop"
|
|
33
|
+
];
|
|
28
34
|
voicePcmFormatSchema = z.strictObject({
|
|
29
35
|
encoding: z.literal("pcm_s16le"),
|
|
30
36
|
sampleRate: z.union([z.literal(16e3), z.literal(24e3)]),
|
|
@@ -126,7 +132,7 @@ var init_voice = __esmMin((() => {
|
|
|
126
132
|
})),
|
|
127
133
|
clientEnvelope("session.metric", z.strictObject({
|
|
128
134
|
responseId: z.string().min(1).max(160),
|
|
129
|
-
metric: z.enum(
|
|
135
|
+
metric: z.enum(VOICE_TIMING_METRICS),
|
|
130
136
|
durationMs: z.number().finite().min(0).max(6e5)
|
|
131
137
|
})),
|
|
132
138
|
clientEnvelope("input.mute", z.strictObject({ muted: z.boolean() })),
|
|
@@ -268,4 +274,4 @@ var init_voice = __esmMin((() => {
|
|
|
268
274
|
}));
|
|
269
275
|
//#endregion
|
|
270
276
|
init_voice();
|
|
271
|
-
export { VOICE_REALTIME_HEARTBEAT_INTERVAL_MS, VOICE_REALTIME_MAX_BINARY_FRAME_BYTES, VOICE_REALTIME_PROXY_WS_PATH, VOICE_REALTIME_START_TIMEOUT_MS, VOICE_REALTIME_WS_PATH, createVoiceSessionRequestSchema, init_voice, parseVoiceClientJsonFrame, parseVoiceClientMessage };
|
|
277
|
+
export { VOICE_REALTIME_HEARTBEAT_INTERVAL_MS, VOICE_REALTIME_MAX_BINARY_FRAME_BYTES, VOICE_REALTIME_PROXY_WS_PATH, VOICE_REALTIME_START_TIMEOUT_MS, VOICE_REALTIME_WS_PATH, VOICE_TIMING_METRICS, createVoiceSessionRequestSchema, init_voice, parseVoiceClientJsonFrame, parseVoiceClientMessage };
|
|
@@ -103,7 +103,14 @@ var RepositoryInstructions = class RepositoryInstructions {
|
|
|
103
103
|
try {
|
|
104
104
|
const canonical = await realpath(file);
|
|
105
105
|
if (!inside(this.root, canonical)) throw new Error(`Instruction file escapes repository: ${file}`);
|
|
106
|
-
|
|
106
|
+
const metadata = await stat(canonical);
|
|
107
|
+
if (metadata.size > 32768) {
|
|
108
|
+
const revision = `oversized:${canonical}:${metadata.size}:${metadata.mtimeMs}:${metadata.ctimeMs}`;
|
|
109
|
+
if (this.seen.get(file) === revision) continue;
|
|
110
|
+
this.pending.set(file, revision);
|
|
111
|
+
sections.push(`Instructions for ${dir} and its descendants (${file}):\nThis instruction file exceeds the 32 KiB automatic inclusion limit (${metadata.size} bytes). Read ${file} explicitly with read_file, in successive chunks if needed, until the entire file has been read. Apply its instructions before working in this scope.`);
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
107
114
|
const content = await readFile(canonical, "utf8");
|
|
108
115
|
if (this.seen.get(file) === content) continue;
|
|
109
116
|
this.pending.set(file, content);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const browserUseManual = "# Browser Tool Manual\n\n## browser_use\n\nUse one typed action per call. Start with `observe` or `navigate`. Every observation returns a `sessionId`, `revision`, and semantic element refs. Element actions must use refs from the newest revision; never invent refs.\n\nAvailable actions:\n\n- `observe`: return URL, title, interactive semantic nodes, and changes. Set `visual` to `always` only when visual evidence is needed.\n- `navigate`: open an HTTP(S) URL and optionally verify an expectation.\n- `click`, `fill`, `select`: act on a semantic ref with its observation revision.\n- `press`, `scroll`: act on an optional ref or the active page.\n- `wait`: wait for page idle, text, or a ref visibility state.\n- `upload`: attach workspace files to a file input
|
|
1
|
+
export declare const browserUseManual = "# Browser Tool Manual\n\n## browser_use\n\nUse one typed action per call. Start with `observe` or `navigate`. Every observation returns a `sessionId`, `revision`, and semantic element refs. Element actions must use refs from the newest revision; never invent refs.\n\nAvailable actions:\n\n- `observe`: return URL, title, interactive semantic nodes, and changes. Set `visual` to `always` only when visual evidence is needed.\n- `navigate`: open an HTTP(S) URL and optionally verify an expectation.\n- `click`, `fill`, `select`: act on a semantic ref with its observation revision.\n- `press`, `scroll`: act on an optional ref or the active page.\n- `wait`: wait for page idle, text, or a ref visibility state.\n- `upload`: attach workspace files to a file input.\n- `tabs`: list, create, activate, or close task-owned tabs.\n- `sequence`: run a short list of same-document ref actions.\n- `close`: close the task-owned browser session.\n\nThe tool does not accept CSS, XPath, JavaScript, cookie, storage, or network-inspection commands. Re-observe after navigation or a stale-observation response. Browser actions execute directly under the configured allow/deny policy. Sensitive fields expose only their semantic identity and values are redacted.\n\n## browser_automation\n\nReusable browser automations are strict JSON. They use semantic `role` plus `name` or `nameIncludes` targets and an exact `allowedDomains` list. Input templates use `${input.name}`. Save a draft, validate it, then run/test that exact saved revision when the user requests execution or testing. Never repeat a write merely to verify a recording. Only successful runs with explicit successCriteria mark a revision verified; never store passwords, one-time codes, recovery codes, or payment details.\n";
|
|
@@ -12,16 +12,16 @@ Available actions:
|
|
|
12
12
|
- \`click\`, \`fill\`, \`select\`: act on a semantic ref with its observation revision.
|
|
13
13
|
- \`press\`, \`scroll\`: act on an optional ref or the active page.
|
|
14
14
|
- \`wait\`: wait for page idle, text, or a ref visibility state.
|
|
15
|
-
- \`upload\`: attach workspace files to a file input.
|
|
15
|
+
- \`upload\`: attach workspace files to a file input.
|
|
16
16
|
- \`tabs\`: list, create, activate, or close task-owned tabs.
|
|
17
17
|
- \`sequence\`: run a short list of same-document ref actions.
|
|
18
18
|
- \`close\`: close the task-owned browser session.
|
|
19
19
|
|
|
20
|
-
The tool does not accept CSS, XPath, JavaScript, cookie, storage, or network-inspection commands. Re-observe after navigation or a stale-observation response.
|
|
20
|
+
The tool does not accept CSS, XPath, JavaScript, cookie, storage, or network-inspection commands. Re-observe after navigation or a stale-observation response. Browser actions execute directly under the configured allow/deny policy. Sensitive fields expose only their semantic identity and values are redacted.
|
|
21
21
|
|
|
22
22
|
## browser_automation
|
|
23
23
|
|
|
24
|
-
Reusable browser automations are strict JSON. They use semantic \`role\` plus \`name\` or \`nameIncludes\` targets and an exact \`allowedDomains\` list. Input templates use \`\${input.name}\`. Save
|
|
24
|
+
Reusable browser automations are strict JSON. They use semantic \`role\` plus \`name\` or \`nameIncludes\` targets and an exact \`allowedDomains\` list. Input templates use \`\${input.name}\`. Save a draft, validate it, then run/test that exact saved revision when the user requests execution or testing. Never repeat a write merely to verify a recording. Only successful runs with explicit successCriteria mark a revision verified; never store passwords, one-time codes, recovery codes, or payment details.
|
|
25
25
|
`;
|
|
26
26
|
//#endregion
|
|
27
27
|
export { browserUseManual };
|
|
@@ -56,7 +56,7 @@ function presentResult(result) {
|
|
|
56
56
|
content: contentWithVisual([`[${result.error.code}] ${result.error.message}`, observation ? formatBrowserObservation(observation) : ""].filter(Boolean).join("\n\n"), observation),
|
|
57
57
|
details: {
|
|
58
58
|
ok: false,
|
|
59
|
-
kind:
|
|
59
|
+
kind: "browser_error",
|
|
60
60
|
error: stripVisual(result.error)
|
|
61
61
|
}
|
|
62
62
|
};
|