@xopcai/xopc 0.0.423 → 0.0.425
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/dist/assets/{page-context-BKnEwsOO.js → page-context-b-rB5vJC.js} +1 -1
- package/dist/browser-ext/dist/background.js +1 -1
- package/dist/browser-ext/dist/sidepanel.html +1 -1
- package/dist/browser-ext/dist/sidepanel.js +29 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-DNkXnatd.js → activity-store-CMw8qBuC.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DOnHjAY_.js → agent-avatar-dicebear-JI0YWOIm.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-display-C9Lu9LVl.js → agent-avatar-display-YqmwzOSa.js} +2 -2
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DlvjxWg6.js +1 -0
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-sQNbqsGL.js → agent-plugin-dialog-OBueuQSc.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-DZ77luyw.js → agents-Cp6_5OOQ.js} +4 -4
- package/dist/gateway/static/root/assets/{agents-admin-api-DIm_IHQL.js → agents-admin-api-DLnmdC1h.js} +1 -1
- package/dist/gateway/static/root/assets/{api-BUJQiCoX.js → api-Boc-CVh7.js} +1 -1
- package/dist/gateway/static/root/assets/{api-By0yX3z1.js → api-bL7sxjAF.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-PPgc1xaD.js → app-management-settings-panel-jIG5i7KE.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DbI9t4GS.js → appearance-settings-BnaQW9Xd.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-DIC28vl4.js → apps-page-C2WKUwtN.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-B5ZSQVw2.js → archive-plugin-DjboG3kA.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-api-CfjICuJK.js → automation-api-CZqL9l_d.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-result-state-DpQSVGNY.js → automation-result-state-DRd-X_Ai.js} +1 -1
- package/dist/gateway/static/root/assets/automation-task-card-wbnR5i6N.js +3 -0
- package/dist/gateway/static/root/assets/{automations-page-1NCQMSK1.js → automations-page-HyBQIfmn.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-D6cTOKr7.js +9 -0
- package/dist/gateway/static/root/assets/{binary-plugins-_riZg0hb.js → binary-plugins-Bg8ARZUH.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-BpYTVDaG.js → block-editor-DKohqFAW.js} +2 -2
- package/dist/gateway/static/root/assets/{browser-automation-inputs-DLbHyWE5.js → browser-automation-inputs-YeibTzw4.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-BfOHr7er.js → browser-automations-page-BWNcbuz2.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-control-api-CqjIQdQ4.js → browser-control-api-CDeuxy2x.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-settings-page-CqjLefvt.js → browser-settings-page-L0nBjfhG.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-BQ0bsu6d.js → capabilities-BcQa8c9n.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-CTu4Y4Gc.js → capabilities-aT-QjNTl.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-page-DlpuHdHi.js +2 -0
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-Cq28kvMr.js → capabilities-settings-panel-pvqkN2-2.js} +3 -3
- package/dist/gateway/static/root/assets/{channels-BPVkbqBI.js → channels-BUPtawh6.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-agents-api-XnegLpGF.js → chat-agents-api-B8JO6Tcj.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-chart-block-BJFCFZz2.js → chat-chart-block-DRtuFfF1.js} +1 -1
- package/dist/gateway/static/root/assets/chat-page-BP0huA-W.js +72 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-B9KlHa8j.js → chat-terminal-dock-Dkqq5FSL.js} +1 -1
- package/dist/gateway/static/root/assets/{command-palette-api-DW7O6fME.js → command-palette-api-qujvNqkK.js} +1 -1
- package/dist/gateway/static/root/assets/{composer-payload-handoff-qheyxoAD.js → composer-payload-handoff-CYIhcczq.js} +1 -1
- package/dist/gateway/static/root/assets/{computer-settings-page-KmaJ2UVz.js → computer-settings-page-8q4hRmoo.js} +1 -1
- package/dist/gateway/static/root/assets/connected-providers-grid-CKZfhHSD.js +1 -0
- package/dist/gateway/static/root/assets/{connector-service-page-BgexZyHR.js → connector-service-page-DQaTI21R.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-api-DEYdFCdS.js → connectors-api-BjypBp2g.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-Lf1ZzaVn.js +1 -0
- package/dist/gateway/static/root/assets/{date-picker-CSuiNiPU.js → date-picker-D_PSHGpe.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-DHFVFI74.js → dependency-picker-UqKVJ9dv.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-DK3tV5PW.js → desktop-pet-1Et9VqkM.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-narrative-CS8qJpNO.js → desktop-pet-narrative-rADKU0FX.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-BKIcBnfQ.js → desktop-pet-settings-0fCGgaG7.js} +1 -1
- package/dist/gateway/static/root/assets/{dev-view-store-ZgXvR5Sl.js → dev-view-store-TTj_djD8.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-ByEL5lvM.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-C4N_kXUX.js → directory-picker-path-field-C07a7wYX.js} +1 -1
- package/dist/gateway/static/root/assets/{discussion-annotation-sync-CdbkKHiR.js → discussion-annotation-sync-BFqKm9ky.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-vdSyb_US.js → extension-debug-page-DFaVlqas.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-iframe-host-D4w7-mf1.js → extension-iframe-host-BfzPfXBq.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-marketplace-api-BVMU-5FO.js → extension-marketplace-api-ow0K1Y4_.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BE7FHMek.js → extension-page-CrDADV5W.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-8RM98QmD.js → extension-provider-mnRoa63o.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page--SP1Dy2l.js → extension-settings-page-BLl02GFY.js} +1 -1
- package/dist/gateway/static/root/assets/{file-preview-surface-CFFuUQVY.js → file-preview-surface-TGdKqhCf.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-i6wzzdws.js → gateway-config-swr-DfPQIHOL.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-B1CCUrsG.js → gateway-realtime-67vWg_M2.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-Bkt1z-xo.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-restart-B3Odfu1z.js → gateway-restart-CLtR2wkL.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-QIwB2Ld0.js → gateway-settings-COvC3r-l.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DBpCoigO.js → gateway-startup-retry-9YQllbw2.js} +1 -1
- package/dist/gateway/static/root/assets/{global-defaults-api-GQG-5G20.js → global-defaults-api-DYMRjGvd.js} +1 -1
- package/dist/gateway/static/root/assets/{home-page-BsfeSXsZ.js → home-page-k9LFXcVa.js} +2 -2
- package/dist/gateway/static/root/assets/{image-generation-api-CaiTrM7V.js → image-generation-api-Dzydfvy8.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-CLkhwelO.js → imports-page-Csd_YZXZ.js} +1 -1
- package/dist/gateway/static/root/assets/index-CpwPxKQ8.css +1 -0
- package/dist/gateway/static/root/assets/index-DKW7BeT_.js +11 -0
- package/dist/gateway/static/root/assets/{install-connector-dialog-B9YBBGhs.js → install-connector-dialog-CTQAKTPv.js} +1 -1
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DrZQukhN.js → keyboard-shortcuts-settings-B201bMIa.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-CecbOjks.js → local-app-workbench-page-CD_8_gd_.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-CkVtgVlJ.js → local-apps-page-BOwqNH0L.js} +1 -1
- package/dist/gateway/static/root/assets/local-session-drafts-DjmK-SM9.js +4 -0
- package/dist/gateway/static/root/assets/{locale-store-_-_QzAV0.js → locale-store-Bg_XR36n.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-Dok7TpJ0.js → logs-page-gw3E9CMQ.js} +1 -1
- package/dist/gateway/static/root/assets/{management-settings-CNbeHUKa.js → management-settings-t_Z2mCyw.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-CFWJhIqU.js → markdown-view-BUpXJUPv.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-BEcCzwnv.js → media-plugins-_shnaEMY.js} +1 -1
- package/dist/gateway/static/root/assets/messages-DG4HLOER.js +3 -0
- package/dist/gateway/static/root/assets/model-selector-a7PIT1Lk.js +1 -0
- package/dist/gateway/static/root/assets/{models-hub-cache-B1dBNhhc.js → models-hub-cache-KOJC3z6Q.js} +1 -1
- package/dist/gateway/static/root/assets/note-detail-panel-BsHYUFgk.js +5 -0
- package/dist/gateway/static/root/assets/note-image-lightbox-B-bEtjhj.js +1 -0
- package/dist/gateway/static/root/assets/{notes-api-ja_AMIh6.js → notes-api-BSmikUKI.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-_IG1mwIH.js → notes-page-CA0NRL8O.js} +1 -1
- package/dist/gateway/static/root/assets/{oauth-api-C0NG7Hgs.js → oauth-api-D2t9HXoC.js} +1 -1
- package/dist/gateway/static/root/assets/{oauth-provider-connect-DLQ6Jhjc.js → oauth-provider-connect-DGGGGtcB.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-capture-button-DBlILV5t.js → page-context-capture-button-BH54VO0V.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-draft-CcZSjlMa.js → page-context-draft-BS5y8Cx9.js} +1 -1
- package/dist/gateway/static/root/assets/page-header-store-BdZnUh-D.js +1 -0
- package/dist/gateway/static/root/assets/{personal-avatar-D3tjI4rK.js → personal-avatar-D8DtpDTa.js} +1 -1
- package/dist/gateway/static/root/assets/{personal-page-C1gIYjQo.js → personal-page-KJezmTKP.js} +1 -1
- package/dist/gateway/static/root/assets/{personal-settings-panel-Nm03jL4v.js → personal-settings-panel-9uDaNJy5.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-dependencies-card-72RGs4eb.js → phone-dependencies-card-DLYrI0C4.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-model-picker-CNxK_l_B.js → phone-model-picker-BbA2iI-3.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-settings-page-D5PodpGU.js → phone-settings-page-Cg_BPss4.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-workspace-store-Ci43KRd6.js → phone-workspace-store-CVDk80Bf.js} +1 -1
- package/dist/gateway/static/root/assets/plugin-details-dialog-DgibLkc3.js +1 -0
- package/dist/gateway/static/root/assets/{preference-select-fields-CyFvi9Es.js → preference-select-fields-BVoN-lAv.js} +1 -1
- package/dist/gateway/static/root/assets/{product-automation-feedback-BRdOheLC.js → product-automation-feedback-DCo90zGh.js} +2 -2
- package/dist/gateway/static/root/assets/{product-open-page-CIZj7rh-.js → product-open-page-OWl8IAoY.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-yK-9po5S.js → product-preview-content-Cjas7UNe.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-modal-CkdKPk-W.js → product-preview-modal-CPWRvBI9.js} +2 -2
- package/dist/gateway/static/root/assets/{project-detail-page-D_Kft8au.js → project-detail-page-B_HlZux_.js} +3 -3
- package/dist/gateway/static/root/assets/{project-understanding-6raciQr0.js → project-understanding-Ba02SFzB.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-CNCw6Q5o.js → projects-page-CdfKjp95.js} +1 -1
- package/dist/gateway/static/root/assets/{providers-api-DGeFqpPL.js → providers-api-rwQ4LWzr.js} +1 -1
- package/dist/gateway/static/root/assets/{recording-upload-rA0Z6W2g.js → recording-upload-BSmvRrZQ.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-5LqCHY-I.js → registry-api-Vy7LfH6E.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-DftT6xNt.js → remote-access-hub-UXrnpGev.js} +1 -1
- package/dist/gateway/static/root/assets/{resource-unavailable-CqP8gARc.js → resource-unavailable-f9OzSi4W.js} +1 -1
- package/dist/gateway/static/root/assets/route-preload-BtObM-co.js +2 -0
- package/dist/gateway/static/root/assets/{runtime-tools-api-CUzfEj0z.js → runtime-tools-api-Bt8t37z5.js} +1 -1
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-DU4UXnBm.js +1 -0
- package/dist/gateway/static/root/assets/{service-recommendation-list-Bo46zqXR.js → service-recommendation-list-CuYsRcBB.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-CZQ-wpwx.js → session-api-DJI9eSgw.js} +1 -1
- package/dist/gateway/static/root/assets/session-manager-CtKgACGl.js +23 -0
- package/dist/gateway/static/root/assets/sessions-page-BAsKzRHt.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CjAFqg2U.js +1 -0
- package/dist/gateway/static/root/assets/{settings-advanced-section-CrqVxpan.js → settings-advanced-section-BxUuF_yi.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-mode-store-D4AZlZDq.js → settings-mode-store-CaoRh2gt.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-header-CoPd_JDb.js → settings-page-header-CyUHrn7c.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-D39EvFvm.js → settings-page-layout-DGVqXrlp.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-D-X2rL2k.js → settings-page-qQ8-6dJ_.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BpaPb625.js +1 -0
- package/dist/gateway/static/root/assets/{share-link-dialog-D4oGzmxA.js → share-link-dialog-CQJ6Ykm2.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-CArPpOZz.js → share-preview-page-Cem96FbB.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-DbJOyf2K.js → shares-api-Dowes16l.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-DZEkZDR0.js +1 -0
- package/dist/gateway/static/root/assets/{skill-api-CQxLO0sy.js → skill-api-D8ZwFEVe.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-list-api-BkahlC5N.js → skill-list-api-B4gp00-f.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-DZQLAkSr.js → skill-reload-api-ClmaaDXo.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-BBlJMOZU.js → skills-page-CV0X9rvG.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-b2h_YWsq.js → system-settings-panel-D095uacX.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-CY2C4AM2.js +2 -0
- package/dist/gateway/static/root/assets/{task-result-evidence-DLnPVj6x.js → task-result-evidence-LUrJlUhb.js} +1 -1
- package/dist/gateway/static/root/assets/{terminal-panel-store-Xmw-UfZa.js → terminal-panel-store-BqEDB1Vl.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-DU_07f3M.js → theme-store-gAcojLgP.js} +1 -1
- package/dist/gateway/static/root/assets/tool-friendly-title-o6sxGVUu.js +1 -0
- package/dist/gateway/static/root/assets/tracing-settings-page-B1ZRh-Is.js +1 -0
- package/dist/gateway/static/root/assets/{tunnel-api-DD2HgB7G.js → tunnel-api-C9u9E3UQ.js} +1 -1
- package/dist/gateway/static/root/assets/{understanding-activity-store-CyQMYQhD.js → understanding-activity-store-BTrzsR6_.js} +1 -1
- package/dist/gateway/static/root/assets/{understanding-refresh-store-CTgQYLOe.js → understanding-refresh-store-5Qava3jh.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-BUZLOZLg.js → usage-page-DFMLYKAc.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-BqTpwsvF.js → use-autosave-3O-X7x15.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-DfP3JrD6.js → use-composer-attachments-BLc4dBfe.js} +1 -1
- package/dist/gateway/static/root/assets/{use-file-preview-expanded-D2m6BZLU.js → use-file-preview-expanded-BaOmTXsT.js} +2 -2
- package/dist/gateway/static/root/assets/{use-personal-profile-CmLuBSVu.js → use-personal-profile-MusPgljM.js} +1 -1
- package/dist/gateway/static/root/assets/{use-workspace-tree-DBvuHcas.js → use-workspace-tree-Ck_U2yTw.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-Den5Lg-k.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-DGyL8PYB.js → voice-api-key-field-C5zJApoa.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-CIRG9O8T.js → voice-config-api-DC1bYDt1.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-input-shortcut-events-DrVMpqDV.js → voice-input-shortcut-events-0SZjJdVV.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-transcribe-api-H8o-xLEf.js → voice-transcribe-api-CxVeANPX.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-CobALTh0.js → work-discovery-overlay-DAQ8McVe.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-page-Dxf_Hrwx.js → work-discovery-page-DUQysEyb.js} +1 -1
- package/dist/gateway/static/root/assets/{working-directory-picker-modal-E9f8G3se.js → working-directory-picker-modal-BO9qdJyZ.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-api-N7bfM4a1.js → workspace-api-ZrN6yUER.js} +2 -2
- package/dist/gateway/static/root/assets/workspace-editor-agent-store-Bo5dwoWP.js +1 -0
- package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-BTQfAXNK.js → workspace-file-preview-dialog-Yj_kBWSb.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-open-location-menu-BOGOi-Ck.js → workspace-open-location-menu-yxT7wajO.js} +1 -1
- package/dist/gateway/static/root/assets/{xopc-cloud-account-card-Dqfy4Lwy.js → xopc-cloud-account-card-IcH9KDzx.js} +1 -1
- package/dist/gateway/static/root/index.html +82 -82
- package/dist/package.js +1 -1
- package/dist/packages/computer-control-contract/src/index.js +33 -3
- package/dist/packages/gateway-contract/src/clarification-questions.js +86 -0
- package/dist/packages/gateway-contract/src/clarifications.js +19 -0
- package/dist/packages/gateway-contract/src/index.js +1 -0
- package/dist/packages/gateway-contract/src/session-input-command.js +3 -0
- package/dist/src/agent/agent-manager.js +2 -2
- package/dist/src/agent/background-review/run-background-review.js +2 -2
- package/dist/src/agent/coding/repository-instructions.js +1 -1
- package/dist/src/agent/embedded/index.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +1 -1
- package/dist/src/agent/embedded/run-turn.js +67 -7
- package/dist/src/agent/embedded/session-tool-result-guard.js +2 -2
- package/dist/src/agent/embedded/tool-result-truncation.js +1 -1
- package/dist/src/agent/external-tools/cliProvider.js +2 -2
- package/dist/src/agent/external-tools/composio-provider.js +2 -2
- package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
- package/dist/src/agent/inbound/attachment-pipeline.js +1 -1
- package/dist/src/agent/memory/compaction.js +1 -1
- package/dist/src/agent/memory/context-budget.js +1 -1
- package/dist/src/agent/memory/context-recovery.js +1 -1
- package/dist/src/agent/memory/user-message-text.js +1 -1
- package/dist/src/agent/service/btw-query.js +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +2 -2
- package/dist/src/agent/service.js +1 -1
- package/dist/src/agent/skills/index.js +1 -1
- package/dist/src/agent/skills/managed-store.js +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/source-context/types.d.ts +1 -0
- package/dist/src/agent/tool-manuals/computer.d.ts +1 -1
- package/dist/src/agent/tool-manuals/computer.js +6 -0
- package/dist/src/agent/tools/clarify-tool.js +43 -5
- package/dist/src/agent/tools/cli-clarify.js +1 -0
- package/dist/src/agent/tools/computer-use-tool.js +18 -5
- package/dist/src/agent/tools/dataBatch.js +1 -1
- package/dist/src/agent/tools/personal-read-tool.js +1 -1
- package/dist/src/agent/tools/personal-task-tool.d.ts +1 -1
- package/dist/src/agent/tools/phone-use-tool.js +14 -4
- package/dist/src/agent/tools/session-search-tool.js +1 -1
- package/dist/src/agent/tools/xopc-use-tool.js +2 -2
- package/dist/src/agent-catalog/capabilities.js +2 -2
- package/dist/src/agent-catalog/repository.js +1 -1
- package/dist/src/automations/api/routes.js +2 -2
- package/dist/src/automations/capabilities/drafts.js +1 -1
- package/dist/src/automations/capabilities/write.js +1 -1
- package/dist/src/automations/configuration-conversation.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +1 -1
- package/dist/src/capabilities/runtime/dispatcher.js +1 -1
- package/dist/src/capabilities/runtime/product.js +1 -1
- package/dist/src/cli/commands/agent.js +1 -1
- package/dist/src/cli/commands/agents.js +1 -1
- package/dist/src/cli/commands/backup.js +1 -1
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/models.js +2 -2
- package/dist/src/cli/commands/onboard/model.js +1 -1
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/cli/commands/platform.js +1 -1
- package/dist/src/cli/commands/profile.js +1 -1
- package/dist/src/cli/commands/tunnel.js +1 -1
- package/dist/src/cli/commands/update.js +1 -1
- package/dist/src/cli/extension-cli-register.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +1 -1
- package/dist/src/computer/agent-context.d.ts +21 -0
- package/dist/src/computer/agent-context.js +107 -0
- package/dist/src/computer/broker.d.ts +4 -2
- package/dist/src/computer/broker.js +26 -11
- package/dist/src/computer/diagnostics.d.ts +63 -9
- package/dist/src/computer/diagnostics.js +45 -4
- package/dist/src/computer/errors.d.ts +1 -1
- package/dist/src/computer/errors.js +4 -0
- package/dist/src/computer/evaluation.d.ts +4 -4
- package/dist/src/computer/native-timing.d.ts +15 -0
- package/dist/src/computer/native-timing.js +49 -0
- package/dist/src/computer/program-runtime.d.ts +22 -0
- package/dist/src/computer/program-runtime.js +105 -0
- package/dist/src/computer/runtime.d.ts +36 -2
- package/dist/src/computer/runtime.js +269 -58
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/index.js +1 -1
- package/dist/src/config/schema.d.ts +18 -0
- package/dist/src/connectors/learning-coordinator.js +1 -1
- package/dist/src/execution-environments/local-worktree-manager.js +1 -1
- package/dist/src/extensions/agent-plugins/skill-catalog.js +1 -1
- package/dist/src/extensions/agent-plugins/validation.js +1 -1
- package/dist/src/gateway/agents-admin.js +2 -2
- package/dist/src/gateway/ephemeral-clarification-waiter.js +1 -0
- package/dist/src/gateway/global-defaults-admin.js +2 -2
- package/dist/src/gateway/hono/routes/agents.js +1 -1
- package/dist/src/gateway/hono/routes/composer-history.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
- package/dist/src/gateway/hono/routes/connectors.js +1 -1
- package/dist/src/gateway/hono/routes/home.js +1 -1
- package/dist/src/gateway/hono/routes/notes.js +2 -2
- package/dist/src/gateway/hono/routes/phone-setup.js +1 -1
- package/dist/src/gateway/hono/routes/phone.js +31 -6
- package/dist/src/gateway/hono/routes/projects.js +2 -2
- package/dist/src/gateway/hono/routes/public-gateway.js +2 -1
- package/dist/src/gateway/hono/routes/session-command-handler.js +1 -0
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +6 -0
- package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
- package/dist/src/gateway/hono/routes/tasks.js +1 -1
- package/dist/src/gateway/hono/routes/user-model-refresh.js +1 -1
- package/dist/src/gateway/image-generation-setup.js +1 -1
- package/dist/src/gateway/next-turn-suggestions/snapshot.js +1 -1
- package/dist/src/gateway/service/agent-runner.js +8 -3
- package/dist/src/gateway/service/config-coordinator.d.ts +6 -0
- package/dist/src/gateway/service/run-gateway-agent.js +1 -1
- package/dist/src/gateway/service/session-input-coordinator.js +5 -4
- package/dist/src/gateway/service.js +7 -7
- package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
- package/dist/src/home-intelligence/host.js +2 -2
- package/dist/src/imports/importService.js +1 -1
- package/dist/src/local-apps/service.js +1 -1
- package/dist/src/personal-agent/service.js +1 -1
- package/dist/src/phone/adb-driver.d.ts +15 -1
- package/dist/src/phone/adb-driver.js +104 -41
- package/dist/src/phone/assistance.js +3 -0
- package/dist/src/phone/autoglm-protocol.d.ts +36 -0
- package/dist/src/phone/autoglm-protocol.js +88 -0
- package/dist/src/phone/autoglm-upstream-prompt.d.ts +2 -0
- package/dist/src/phone/autoglm-upstream-prompt.js +5 -0
- package/dist/src/phone/autoglm-upstream.LICENSE +201 -0
- package/dist/src/phone/cloud-adb-connection.d.ts +3 -0
- package/dist/src/phone/cloud-adb-connection.js +102 -31
- package/dist/src/phone/cloud-adb.js +18 -6
- package/dist/src/phone/completion-recovery.d.ts +6 -0
- package/dist/src/phone/completion-recovery.js +30 -0
- package/dist/src/phone/contracts.d.ts +24 -0
- package/dist/src/phone/contracts.js +6 -0
- package/dist/src/phone/execution-trace.d.ts +51 -0
- package/dist/src/phone/execution-trace.js +78 -0
- package/dist/src/phone/model-adapter.d.ts +9 -1
- package/dist/src/phone/model-adapter.js +132 -61
- package/dist/src/phone/model-response.d.ts +5 -0
- package/dist/src/phone/model-response.js +118 -0
- package/dist/src/phone/runtime.d.ts +11 -1
- package/dist/src/phone/runtime.js +177 -40
- package/dist/src/phone/text-session.d.ts +14 -0
- package/dist/src/phone/text-session.js +39 -0
- package/dist/src/phone/ui-dump-binary.d.ts +1 -1
- package/dist/src/phone/ui-dump-binary.js +1 -1
- package/dist/src/phone/ui-session.d.ts +22 -0
- package/dist/src/phone/ui-session.js +191 -0
- package/dist/src/process/phone-process.d.ts +1 -0
- package/dist/src/process/phone-process.js +11 -1
- package/dist/src/routing/agent-session-key.js +1 -1
- package/dist/src/runtime-tools/archive.js +1 -1
- package/dist/src/session/session-context-for-llm.js +1 -0
- package/dist/src/session/session-title.js +1 -1
- package/dist/src/storage/sqlite/clarification-wait-repository.js +45 -4
- package/dist/src/storage/sqlite/index.js +6 -6
- package/dist/src/storage/sqlite/session-creation-repository.js +1 -1
- package/dist/src/storage/sqlite/session-repository.js +1 -1
- package/dist/src/tasks/capabilities/read.js +2 -2
- package/dist/src/tasks/capabilities/write.js +1 -1
- package/dist/src/tasks/home-query-service.js +1 -1
- package/dist/src/tasks/task-allocation-repository.js +1 -1
- package/dist/src/tui/backends/embedded-backend.js +2 -2
- package/dist/src/voice/realtime/persona-context.js +1 -1
- package/package.json +3 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-L6J-FYQS.js +0 -1
- package/dist/gateway/static/root/assets/automation-task-card-BV7hPwN1.js +0 -3
- package/dist/gateway/static/root/assets/automations-workspace-CPFYdI8m.js +0 -9
- package/dist/gateway/static/root/assets/capabilities-page-ljQTg4T5.js +0 -2
- package/dist/gateway/static/root/assets/chat-page-BpvlJdEr.js +0 -72
- package/dist/gateway/static/root/assets/connected-providers-grid-BIX82L4N.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BawS0DUd.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-ZY_cdq5I.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-BFCA_TAU.js +0 -1
- package/dist/gateway/static/root/assets/index-Dv8mUlNN.css +0 -1
- package/dist/gateway/static/root/assets/index-GX_PTIj6.js +0 -11
- package/dist/gateway/static/root/assets/local-session-drafts-DVSVgTCK.js +0 -1
- package/dist/gateway/static/root/assets/messages-D1u8VsPq.js +0 -3
- package/dist/gateway/static/root/assets/model-selector-DKB20MJY.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-COp5zpe4.js +0 -5
- package/dist/gateway/static/root/assets/note-image-lightbox-DvtEn8dg.js +0 -1
- package/dist/gateway/static/root/assets/page-header-store-RgQRaRbH.js +0 -1
- package/dist/gateway/static/root/assets/plugin-details-dialog-D_Lkepqt.js +0 -1
- package/dist/gateway/static/root/assets/route-preload-Hr12PIMD.js +0 -2
- package/dist/gateway/static/root/assets/runtime-impact-DbySfhdp.js +0 -1
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-VIFAEKJi.js +0 -1
- package/dist/gateway/static/root/assets/session-manager-DhoRfUGE.js +0 -23
- package/dist/gateway/static/root/assets/sessions-page-BISYL6iE.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BLnNiubD.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DyzdCgrb.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-BFLomErf.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-BkvjB6fd.js +0 -2
- package/dist/gateway/static/root/assets/tool-friendly-title-DGmi7rCQ.js +0 -1
- package/dist/gateway/static/root/assets/tracing-settings-page-CemIMuec.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-BhX_Ahlu.js +0 -2
- package/dist/gateway/static/root/assets/workspace-editor-agent-store-Cb4TlnKX.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ComputerAction, type ComputerCommand, type ComputerModelBinding, type ComputerObservation, type ComputerReceipt, type ComputerTarget, type ComputerApp, type ComputerWindow } from '@xopcai/computer-control-contract';
|
|
1
|
+
import { type ComputerAction, type ComputerCommand, type ComputerModelBinding, type ComputerObservation, type ComputerReceipt, type ComputerTarget, type ComputerApp, type ComputerWindow, type ComputerInputTiming } from '@xopcai/computer-control-contract';
|
|
2
2
|
import { type ComputerConfig } from './config.js';
|
|
3
3
|
import type { ComputerNativeTiming } from './diagnostics.js';
|
|
4
4
|
export interface DriverObservation {
|
|
@@ -24,6 +24,7 @@ export interface ComputerDriver {
|
|
|
24
24
|
}): Promise<ComputerTarget>;
|
|
25
25
|
observe(target: ComputerTarget, signal: AbortSignal): Promise<DriverObservation>;
|
|
26
26
|
perform(target: ComputerTarget, action: ComputerAction, signal: AbortSignal): Promise<void>;
|
|
27
|
+
getLastInputTiming?(): ComputerInputTiming | undefined;
|
|
27
28
|
/** Must finish only after no further input can be dispatched. */
|
|
28
29
|
stop(): Promise<void>;
|
|
29
30
|
}
|
|
@@ -69,6 +70,7 @@ export declare class ComputerBroker {
|
|
|
69
70
|
private readonly driver;
|
|
70
71
|
private readonly host;
|
|
71
72
|
private readonly now;
|
|
73
|
+
private readonly durationNow;
|
|
72
74
|
readonly epoch: `${string}-${string}-${string}-${string}-${string}`;
|
|
73
75
|
private session?;
|
|
74
76
|
private busy;
|
|
@@ -77,7 +79,7 @@ export declare class ComputerBroker {
|
|
|
77
79
|
private readonly apps;
|
|
78
80
|
private readonly config;
|
|
79
81
|
private readonly timer;
|
|
80
|
-
constructor(driver: ComputerDriver, host: ComputerBrokerHost, config?: Partial<ComputerConfig>, now?: () => number);
|
|
82
|
+
constructor(driver: ComputerDriver, host: ComputerBrokerHost, config?: Partial<ComputerConfig>, now?: () => number, durationNow?: () => number);
|
|
81
83
|
private expired;
|
|
82
84
|
private result;
|
|
83
85
|
private active;
|
|
@@ -4,6 +4,7 @@ import { ComputerConfigSchema, init_config } from "./config.js";
|
|
|
4
4
|
import { ActionEnvelopeSchema, ComputerCommandSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
|
|
5
5
|
import { ComputerTargetError } from "./errors.js";
|
|
6
6
|
import { createHash, randomUUID } from "node:crypto";
|
|
7
|
+
import { setTimeout } from "node:timers/promises";
|
|
7
8
|
//#region src/computer/broker.ts
|
|
8
9
|
init_src();
|
|
9
10
|
init_config();
|
|
@@ -19,10 +20,11 @@ var ComputerBroker = class {
|
|
|
19
20
|
apps = /* @__PURE__ */ new Map();
|
|
20
21
|
config;
|
|
21
22
|
timer;
|
|
22
|
-
constructor(driver, host, config = {}, now = Date.now) {
|
|
23
|
+
constructor(driver, host, config = {}, now = Date.now, durationNow = now === Date.now ? () => performance.now() : now) {
|
|
23
24
|
this.driver = driver;
|
|
24
25
|
this.host = host;
|
|
25
26
|
this.now = now;
|
|
27
|
+
this.durationNow = durationNow;
|
|
26
28
|
this.config = ComputerConfigSchema.parse(config);
|
|
27
29
|
this.timer = setInterval(() => {
|
|
28
30
|
const s = this.session;
|
|
@@ -306,9 +308,12 @@ var ComputerBroker = class {
|
|
|
306
308
|
return this.result(s);
|
|
307
309
|
}
|
|
308
310
|
}
|
|
309
|
-
const precheckStarted = this.
|
|
311
|
+
const precheckStarted = this.durationNow();
|
|
310
312
|
let matched = false;
|
|
313
|
+
let precheckSamples = 0;
|
|
311
314
|
for (let sample = 0; sample < 4; sample++) {
|
|
315
|
+
precheckSamples++;
|
|
316
|
+
if (sample) await setTimeout(100, void 0, { signal: s.controller.signal });
|
|
312
317
|
let current;
|
|
313
318
|
try {
|
|
314
319
|
current = await this.driver.observe(s.target, s.controller.signal);
|
|
@@ -337,9 +342,10 @@ var ComputerBroker = class {
|
|
|
337
342
|
};
|
|
338
343
|
}
|
|
339
344
|
const nativeMs = {
|
|
340
|
-
precheckMs: Math.max(0, this.
|
|
345
|
+
precheckMs: Math.max(0, Math.round(this.durationNow() - precheckStarted)),
|
|
341
346
|
inputMs: 0,
|
|
342
|
-
postObserveMs: 0
|
|
347
|
+
postObserveMs: 0,
|
|
348
|
+
precheckSamples
|
|
343
349
|
};
|
|
344
350
|
const receipt = {
|
|
345
351
|
actionId: e.actionId,
|
|
@@ -355,15 +361,23 @@ var ComputerBroker = class {
|
|
|
355
361
|
s.pending = void 0;
|
|
356
362
|
s.status = "running";
|
|
357
363
|
try {
|
|
358
|
-
const inputStarted = this.
|
|
359
|
-
|
|
360
|
-
|
|
364
|
+
const inputStarted = this.durationNow();
|
|
365
|
+
try {
|
|
366
|
+
await this.driver.perform(s.target, e.action, s.controller.signal);
|
|
367
|
+
} finally {
|
|
368
|
+
nativeMs.inputMs = Math.max(0, Math.round(this.durationNow() - inputStarted));
|
|
369
|
+
nativeMs.inputDetail = this.driver.getLastInputTiming?.();
|
|
370
|
+
}
|
|
361
371
|
this.active(s);
|
|
362
372
|
receipt.dispatch = "completed";
|
|
363
373
|
s.status = "ready";
|
|
364
|
-
const observationStarted = this.
|
|
365
|
-
|
|
366
|
-
|
|
374
|
+
const observationStarted = this.durationNow();
|
|
375
|
+
let after;
|
|
376
|
+
try {
|
|
377
|
+
after = await this.observe(s);
|
|
378
|
+
} finally {
|
|
379
|
+
nativeMs.postObserveMs = Math.max(0, Math.round(this.durationNow() - observationStarted));
|
|
380
|
+
}
|
|
367
381
|
receipt.verification = after.observation ? "visual" : "none";
|
|
368
382
|
return {
|
|
369
383
|
...after,
|
|
@@ -383,7 +397,8 @@ var ComputerBroker = class {
|
|
|
383
397
|
});
|
|
384
398
|
return {
|
|
385
399
|
...this.result(s),
|
|
386
|
-
receipt
|
|
400
|
+
receipt,
|
|
401
|
+
nativeMs
|
|
387
402
|
};
|
|
388
403
|
}
|
|
389
404
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import type
|
|
2
|
+
import { type ComputerAction, type ComputerObservation, type ComputerReceipt } from '@xopcai/computer-control-contract';
|
|
3
3
|
import type { ComputerVerification } from './task-state.js';
|
|
4
4
|
export declare const ComputerFailurePhaseSchema: z.ZodEnum<{
|
|
5
5
|
open: "open";
|
|
6
6
|
executor: "executor";
|
|
7
7
|
model: "model";
|
|
8
|
-
observe: "observe";
|
|
9
8
|
dispatch: "dispatch";
|
|
9
|
+
observe: "observe";
|
|
10
10
|
release: "release";
|
|
11
11
|
frame_upload: "frame_upload";
|
|
12
12
|
oracle: "oracle";
|
|
@@ -15,8 +15,8 @@ export type ComputerFailurePhase = z.infer<typeof ComputerFailurePhaseSchema>;
|
|
|
15
15
|
export declare const ComputerFailureCategorySchema: z.ZodEnum<{
|
|
16
16
|
permission: "permission";
|
|
17
17
|
target: "target";
|
|
18
|
-
cancelled: "cancelled";
|
|
19
18
|
unknown: "unknown";
|
|
19
|
+
cancelled: "cancelled";
|
|
20
20
|
model: "model";
|
|
21
21
|
observation: "observation";
|
|
22
22
|
budget: "budget";
|
|
@@ -29,8 +29,8 @@ export declare const ComputerFailureSchema: z.ZodObject<{
|
|
|
29
29
|
category: z.ZodEnum<{
|
|
30
30
|
permission: "permission";
|
|
31
31
|
target: "target";
|
|
32
|
-
cancelled: "cancelled";
|
|
33
32
|
unknown: "unknown";
|
|
33
|
+
cancelled: "cancelled";
|
|
34
34
|
model: "model";
|
|
35
35
|
observation: "observation";
|
|
36
36
|
budget: "budget";
|
|
@@ -43,8 +43,8 @@ export declare const ComputerFailureSchema: z.ZodObject<{
|
|
|
43
43
|
open: "open";
|
|
44
44
|
executor: "executor";
|
|
45
45
|
model: "model";
|
|
46
|
-
observe: "observe";
|
|
47
46
|
dispatch: "dispatch";
|
|
47
|
+
observe: "observe";
|
|
48
48
|
release: "release";
|
|
49
49
|
frame_upload: "frame_upload";
|
|
50
50
|
oracle: "oracle";
|
|
@@ -86,6 +86,19 @@ export declare const ComputerNativeTimingSchema: z.ZodObject<{
|
|
|
86
86
|
precheckMs: z.ZodNumber;
|
|
87
87
|
inputMs: z.ZodNumber;
|
|
88
88
|
postObserveMs: z.ZodNumber;
|
|
89
|
+
inputDetail: z.ZodOptional<z.ZodObject<{
|
|
90
|
+
wallMs: z.ZodNumber;
|
|
91
|
+
identityCheckMs: z.ZodNumber;
|
|
92
|
+
actionValidationMs: z.ZodNumber;
|
|
93
|
+
windowsInputGuardMs: z.ZodNullable<z.ZodNumber>;
|
|
94
|
+
sdkCallMs: z.ZodNumber;
|
|
95
|
+
resultValidationMs: z.ZodNumber;
|
|
96
|
+
renderGraceMs: z.ZodNumber;
|
|
97
|
+
unattributedMs: z.ZodNumber;
|
|
98
|
+
sdkCalls: z.ZodNumber;
|
|
99
|
+
completed: z.ZodBoolean;
|
|
100
|
+
}, z.core.$strict>>;
|
|
101
|
+
precheckSamples: z.ZodOptional<z.ZodNumber>;
|
|
89
102
|
}, z.core.$strict>;
|
|
90
103
|
export type ComputerNativeTiming = z.infer<typeof ComputerNativeTimingSchema>;
|
|
91
104
|
export declare const ComputerSessionReportSchema: z.ZodObject<{
|
|
@@ -125,8 +138,8 @@ export declare const ComputerSessionReportSchema: z.ZodObject<{
|
|
|
125
138
|
category: z.ZodEnum<{
|
|
126
139
|
permission: "permission";
|
|
127
140
|
target: "target";
|
|
128
|
-
cancelled: "cancelled";
|
|
129
141
|
unknown: "unknown";
|
|
142
|
+
cancelled: "cancelled";
|
|
130
143
|
model: "model";
|
|
131
144
|
observation: "observation";
|
|
132
145
|
budget: "budget";
|
|
@@ -139,8 +152,8 @@ export declare const ComputerSessionReportSchema: z.ZodObject<{
|
|
|
139
152
|
open: "open";
|
|
140
153
|
executor: "executor";
|
|
141
154
|
model: "model";
|
|
142
|
-
observe: "observe";
|
|
143
155
|
dispatch: "dispatch";
|
|
156
|
+
observe: "observe";
|
|
144
157
|
release: "release";
|
|
145
158
|
frame_upload: "frame_upload";
|
|
146
159
|
oracle: "oracle";
|
|
@@ -175,6 +188,45 @@ export declare const ComputerSessionReportSchema: z.ZodObject<{
|
|
|
175
188
|
free_pool_unavailable: "free_pool_unavailable";
|
|
176
189
|
}>>;
|
|
177
190
|
}, z.core.$strict>>;
|
|
191
|
+
timings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
192
|
+
actionId: z.ZodString;
|
|
193
|
+
nativeMs: z.ZodOptional<z.ZodObject<{
|
|
194
|
+
precheckMs: z.ZodNumber;
|
|
195
|
+
inputMs: z.ZodNumber;
|
|
196
|
+
postObserveMs: z.ZodNumber;
|
|
197
|
+
inputDetail: z.ZodOptional<z.ZodObject<{
|
|
198
|
+
wallMs: z.ZodNumber;
|
|
199
|
+
identityCheckMs: z.ZodNumber;
|
|
200
|
+
actionValidationMs: z.ZodNumber;
|
|
201
|
+
windowsInputGuardMs: z.ZodNullable<z.ZodNumber>;
|
|
202
|
+
sdkCallMs: z.ZodNumber;
|
|
203
|
+
resultValidationMs: z.ZodNumber;
|
|
204
|
+
renderGraceMs: z.ZodNumber;
|
|
205
|
+
unattributedMs: z.ZodNumber;
|
|
206
|
+
sdkCalls: z.ZodNumber;
|
|
207
|
+
completed: z.ZodBoolean;
|
|
208
|
+
}, z.core.$strict>>;
|
|
209
|
+
precheckSamples: z.ZodOptional<z.ZodNumber>;
|
|
210
|
+
}, z.core.$strict>>;
|
|
211
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
212
|
+
wait: "wait";
|
|
213
|
+
typeText: "typeText";
|
|
214
|
+
activate: "activate";
|
|
215
|
+
showMenu: "showMenu";
|
|
216
|
+
click: "click";
|
|
217
|
+
drag: "drag";
|
|
218
|
+
setValue: "setValue";
|
|
219
|
+
pressKeys: "pressKeys";
|
|
220
|
+
scroll: "scroll";
|
|
221
|
+
}>>;
|
|
222
|
+
transport: z.ZodOptional<z.ZodObject<{
|
|
223
|
+
brokerWallMs: z.ZodNumber;
|
|
224
|
+
frameUploadMs: z.ZodNullable<z.ZodNumber>;
|
|
225
|
+
commandWallMs: z.ZodNumber;
|
|
226
|
+
}, z.core.$strict>>;
|
|
227
|
+
endpointRoundTripMs: z.ZodNumber;
|
|
228
|
+
}, z.core.$strict>>>;
|
|
229
|
+
timingsTruncated: z.ZodOptional<z.ZodBoolean>;
|
|
178
230
|
recentActions: z.ZodArray<z.ZodObject<{
|
|
179
231
|
kind: z.ZodEnum<{
|
|
180
232
|
wait: "wait";
|
|
@@ -210,20 +262,22 @@ export type ComputerSessionReport = z.infer<typeof ComputerSessionReportSchema>;
|
|
|
210
262
|
/** A bounded metadata-only companion to task history; it never retains action arguments or pixels. */
|
|
211
263
|
export declare class ComputerSessionDiagnostics {
|
|
212
264
|
private readonly now;
|
|
265
|
+
private readonly durationNow;
|
|
213
266
|
private readonly data;
|
|
214
267
|
private readonly receipts;
|
|
215
268
|
private pending?;
|
|
216
269
|
private endedAt?;
|
|
217
270
|
phase: ComputerFailurePhase;
|
|
218
|
-
constructor(now?: () => number);
|
|
271
|
+
constructor(now?: () => number, durationNow?: () => number);
|
|
219
272
|
bind(sessionId: string): void;
|
|
220
273
|
count(key: keyof ComputerSessionReport['counters']): void;
|
|
274
|
+
timing(value: NonNullable<ComputerSessionReport['timings']>[number]): void;
|
|
221
275
|
measure<T>(phase: keyof ComputerSessionReport['phaseMs'], fn: () => Promise<T>): Promise<T>;
|
|
222
276
|
propose(id: string, kind: ComputerAction['kind']): void;
|
|
223
277
|
discard(): void;
|
|
224
278
|
record(receipt: ComputerReceipt, before?: ComputerObservation, after?: ComputerObservation, verification?: ComputerVerification): void;
|
|
225
279
|
verify(verification?: ComputerVerification): void;
|
|
226
|
-
fail(error: unknown, phase?: "open" | "executor" | "model" | "
|
|
280
|
+
fail(error: unknown, phase?: "open" | "executor" | "model" | "dispatch" | "observe" | "release" | "frame_upload" | "oracle", dispatch?: ComputerFailure['dispatch'], aborted?: boolean): void;
|
|
227
281
|
finish(released: boolean): void;
|
|
228
282
|
snapshot(): ComputerSessionReport;
|
|
229
283
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { ComputerInputTimingSchema, ComputerTransportTimingSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
|
|
1
2
|
import { ComputerDiagnosticSchema, computerDiagnostic } from "./errors.js";
|
|
2
3
|
import { randomUUID } from "node:crypto";
|
|
3
4
|
import { z } from "zod";
|
|
4
5
|
//#region src/computer/diagnostics.ts
|
|
6
|
+
init_src();
|
|
5
7
|
const ComputerFailurePhaseSchema = z.enum([
|
|
6
8
|
"open",
|
|
7
9
|
"observe",
|
|
@@ -42,6 +44,15 @@ const ComputerFailureSchema = z.object({
|
|
|
42
44
|
serviceErrorCode: ComputerDiagnosticSchema.shape.serviceErrorCode
|
|
43
45
|
}).strict();
|
|
44
46
|
const categories = Object.create(null);
|
|
47
|
+
for (const code of [
|
|
48
|
+
"AGENT_MODEL_REQUIRED",
|
|
49
|
+
"AGENT_MODEL_CHANGED",
|
|
50
|
+
"PLANNER_MISMATCH"
|
|
51
|
+
]) categories[`COMPUTER_${code}`] = "model";
|
|
52
|
+
for (const code of ["PROGRAM_BUDGET", "PROGRAM_STORE_LIMIT"]) categories[`COMPUTER_${code}`] = "budget";
|
|
53
|
+
categories.COMPUTER_PROGRAM_POLICY_REFUSED = "permission";
|
|
54
|
+
categories.COMPUTER_PROGRAM_FAILED = "harness";
|
|
55
|
+
categories.COMPUTER_PROGRAM_UNAWAITED_CALL = "harness";
|
|
45
56
|
for (const [category, codes] of Object.entries({
|
|
46
57
|
permission: [
|
|
47
58
|
"DISABLED",
|
|
@@ -196,7 +207,9 @@ const Count = z.number().int().nonnegative();
|
|
|
196
207
|
const ComputerNativeTimingSchema = z.object({
|
|
197
208
|
precheckMs: Count,
|
|
198
209
|
inputMs: Count,
|
|
199
|
-
postObserveMs: Count
|
|
210
|
+
postObserveMs: Count,
|
|
211
|
+
inputDetail: ComputerInputTimingSchema.optional(),
|
|
212
|
+
precheckSamples: Count.optional()
|
|
200
213
|
}).strict();
|
|
201
214
|
const CountersSchema = z.object({
|
|
202
215
|
observations: Count,
|
|
@@ -233,6 +246,24 @@ const ComputerSessionReportSchema = z.object({
|
|
|
233
246
|
release: Count
|
|
234
247
|
}).strict(),
|
|
235
248
|
failure: ComputerFailureSchema.optional(),
|
|
249
|
+
timings: z.array(z.object({
|
|
250
|
+
actionId: z.string().max(200),
|
|
251
|
+
nativeMs: ComputerNativeTimingSchema.optional(),
|
|
252
|
+
kind: z.enum([
|
|
253
|
+
"activate",
|
|
254
|
+
"showMenu",
|
|
255
|
+
"click",
|
|
256
|
+
"drag",
|
|
257
|
+
"setValue",
|
|
258
|
+
"typeText",
|
|
259
|
+
"pressKeys",
|
|
260
|
+
"scroll",
|
|
261
|
+
"wait"
|
|
262
|
+
]).optional(),
|
|
263
|
+
transport: ComputerTransportTimingSchema.optional(),
|
|
264
|
+
endpointRoundTripMs: z.number().finite().nonnegative()
|
|
265
|
+
}).strict()).max(256).optional(),
|
|
266
|
+
timingsTruncated: z.boolean().optional(),
|
|
236
267
|
recentActions: z.array(z.object({
|
|
237
268
|
kind: z.enum([
|
|
238
269
|
"activate",
|
|
@@ -271,8 +302,9 @@ var ComputerSessionDiagnostics = class {
|
|
|
271
302
|
pending;
|
|
272
303
|
endedAt;
|
|
273
304
|
phase = "open";
|
|
274
|
-
constructor(now = Date.now) {
|
|
305
|
+
constructor(now = Date.now, durationNow = now === Date.now ? () => performance.now() : now) {
|
|
275
306
|
this.now = now;
|
|
307
|
+
this.durationNow = durationNow;
|
|
276
308
|
this.data = {
|
|
277
309
|
version: 1,
|
|
278
310
|
reportId: randomUUID(),
|
|
@@ -310,13 +342,22 @@ var ComputerSessionDiagnostics = class {
|
|
|
310
342
|
count(key) {
|
|
311
343
|
this.data.counters[key]++;
|
|
312
344
|
}
|
|
345
|
+
timing(value) {
|
|
346
|
+
const timings = this.data.timings ??= [];
|
|
347
|
+
if (timings.some((item) => item.actionId === value.actionId)) return;
|
|
348
|
+
if (timings.length === 256) {
|
|
349
|
+
this.data.timingsTruncated = true;
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
timings.push(value);
|
|
353
|
+
}
|
|
313
354
|
async measure(phase, fn) {
|
|
314
355
|
this.phase = phase;
|
|
315
|
-
const start = this.
|
|
356
|
+
const start = this.durationNow();
|
|
316
357
|
try {
|
|
317
358
|
return await fn();
|
|
318
359
|
} finally {
|
|
319
|
-
this.data.phaseMs[phase] += Math.max(0, Math.round(this.
|
|
360
|
+
this.data.phaseMs[phase] += Math.max(0, Math.round(this.durationNow() - start));
|
|
320
361
|
}
|
|
321
362
|
}
|
|
322
363
|
propose(id, kind) {
|
|
@@ -54,6 +54,10 @@ var ComputerTargetError = class extends Error {
|
|
|
54
54
|
};
|
|
55
55
|
/** Recovery instructions are deterministic; never replay an input with unknown delivery. */
|
|
56
56
|
function computerRecovery(code) {
|
|
57
|
+
if (code === "COMPUTER_AGENT_MODEL_REQUIRED") return "Direct UI programs require an active visual main-model turn. Select a visual model and open with planner:agent; do not change models inside an active desktop session.";
|
|
58
|
+
if (code === "COMPUTER_AGENT_MODEL_CHANGED" || code === "COMPUTER_PLANNER_MISMATCH") return "The requested UI planner does not match the active session. Close and confirm release before opening the requested mode with the current main model.";
|
|
59
|
+
if (code === "COMPUTER_PROGRAM_UNAWAITED_CALL") return "The program ended with an unawaited UI call. Earlier inputs may already have completed. Control was released. Reopen and observe current state before performing only the remaining authorized actions; never replay the script. Await every ui.* call, including emitScreenshot. observe({visual:true}) already attaches the screenshot.";
|
|
60
|
+
if (code.startsWith("COMPUTER_PROGRAM_")) return "The UI program stopped. Inspect completed receipts and the report before continuing with a new program for only the remaining work. Never replay the entire script or bypass a policy refusal.";
|
|
57
61
|
if (code === "COMPUTER_RECEIPT_MISMATCH") return "The receipt could not be matched to the dispatched action, so its outcome is uncertain. Inspect the application locally; never automatically retry or replay the input. Wait for confirmed release before switching tools.";
|
|
58
62
|
if (code === "COMPUTER_FLOW_NOT_FOUND" || code === "COMPUTER_FLOW_TARGET_MISMATCH") return "The saved flow is unavailable or belongs to another application/device. Do not replay it or switch targets automatically. List flows and inspect the authorized target before planning again.";
|
|
59
63
|
if (code === "COMPUTER_FLOW_NOT_VERIFIED" || code === "COMPUTER_FLOW_SAVE_FAILED") return "Control was released. No reusable flow was confirmed saved. Saving requires verified native navigation, non-sensitive labels and working local storage; never repeat desktop input merely to save a flow.";
|
|
@@ -50,8 +50,8 @@ export declare const ComputerEvaluationRunSchema: z.ZodObject<{
|
|
|
50
50
|
category: z.ZodEnum<{
|
|
51
51
|
permission: "permission";
|
|
52
52
|
target: "target";
|
|
53
|
-
cancelled: "cancelled";
|
|
54
53
|
unknown: "unknown";
|
|
54
|
+
cancelled: "cancelled";
|
|
55
55
|
model: "model";
|
|
56
56
|
observation: "observation";
|
|
57
57
|
budget: "budget";
|
|
@@ -64,8 +64,8 @@ export declare const ComputerEvaluationRunSchema: z.ZodObject<{
|
|
|
64
64
|
open: "open";
|
|
65
65
|
executor: "executor";
|
|
66
66
|
model: "model";
|
|
67
|
-
observe: "observe";
|
|
68
67
|
dispatch: "dispatch";
|
|
68
|
+
observe: "observe";
|
|
69
69
|
release: "release";
|
|
70
70
|
frame_upload: "frame_upload";
|
|
71
71
|
oracle: "oracle";
|
|
@@ -106,8 +106,8 @@ export declare function isAutonomousComputerSuccess(run: ComputerEvaluationRun):
|
|
|
106
106
|
/** Export measured runtime values only; an executor must supply independent safety and oracle evidence. */
|
|
107
107
|
export declare function computerReportMeasurements(report: ComputerSessionReport): {
|
|
108
108
|
failure?: {
|
|
109
|
-
category: "permission" | "target" | "
|
|
110
|
-
phase: "open" | "executor" | "model" | "
|
|
109
|
+
category: "permission" | "target" | "unknown" | "cancelled" | "model" | "observation" | "budget" | "transport" | "native" | "no_progress" | "harness";
|
|
110
|
+
phase: "open" | "executor" | "model" | "dispatch" | "observe" | "release" | "frame_upload" | "oracle";
|
|
111
111
|
errorCode: string;
|
|
112
112
|
dispatch: "unknown" | "completed" | "started" | "notStarted";
|
|
113
113
|
diagnosticId?: string;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ComputerInputTiming } from '@xopcai/computer-control-contract';
|
|
2
|
+
type Stage = 'identityCheckMs' | 'actionValidationMs' | 'windowsInputGuardMs' | 'sdkCallMs' | 'resultValidationMs' | 'renderGraceMs';
|
|
3
|
+
/** Monotonic, non-overlapping input stages. SDK time includes the native RPC. */
|
|
4
|
+
export declare class ComputerInputTimer {
|
|
5
|
+
private readonly windows;
|
|
6
|
+
private readonly now;
|
|
7
|
+
private readonly startedAt;
|
|
8
|
+
private readonly stages;
|
|
9
|
+
private sdkCalls;
|
|
10
|
+
constructor(windows: boolean, now?: () => number);
|
|
11
|
+
measure<T>(stage: Stage, operation: () => T | Promise<T>): Promise<T>;
|
|
12
|
+
measureSync<T>(stage: Stage, operation: () => T): T;
|
|
13
|
+
finish(completed: boolean): ComputerInputTiming;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
//#region src/computer/native-timing.ts
|
|
2
|
+
/** Monotonic, non-overlapping input stages. SDK time includes the native RPC. */
|
|
3
|
+
var ComputerInputTimer = class {
|
|
4
|
+
startedAt;
|
|
5
|
+
stages = {
|
|
6
|
+
identityCheckMs: 0,
|
|
7
|
+
actionValidationMs: 0,
|
|
8
|
+
windowsInputGuardMs: 0,
|
|
9
|
+
sdkCallMs: 0,
|
|
10
|
+
resultValidationMs: 0,
|
|
11
|
+
renderGraceMs: 0
|
|
12
|
+
};
|
|
13
|
+
sdkCalls = 0;
|
|
14
|
+
constructor(windows, now = () => performance.now()) {
|
|
15
|
+
this.windows = windows;
|
|
16
|
+
this.now = now;
|
|
17
|
+
this.startedAt = now();
|
|
18
|
+
}
|
|
19
|
+
async measure(stage, operation) {
|
|
20
|
+
const start = this.now();
|
|
21
|
+
if (stage === "sdkCallMs") this.sdkCalls++;
|
|
22
|
+
try {
|
|
23
|
+
return await operation();
|
|
24
|
+
} finally {
|
|
25
|
+
this.stages[stage] += Math.max(0, this.now() - start);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
measureSync(stage, operation) {
|
|
29
|
+
const start = this.now();
|
|
30
|
+
try {
|
|
31
|
+
return operation();
|
|
32
|
+
} finally {
|
|
33
|
+
this.stages[stage] += Math.max(0, this.now() - start);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
finish(completed) {
|
|
37
|
+
const wallMs = Math.max(0, this.now() - this.startedAt);
|
|
38
|
+
return {
|
|
39
|
+
wallMs,
|
|
40
|
+
...this.stages,
|
|
41
|
+
windowsInputGuardMs: this.windows ? this.stages.windowsInputGuardMs : null,
|
|
42
|
+
unattributedMs: Math.max(0, wallMs - Object.values(this.stages).reduce((a, b) => a + b, 0)),
|
|
43
|
+
sdkCalls: this.sdkCalls,
|
|
44
|
+
completed
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
//#endregion
|
|
49
|
+
export { ComputerInputTimer };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type ComputerProgramMethod = 'observe' | 'resolve' | 'act' | 'waitFor' | 'verify' | 'emitScreenshot';
|
|
2
|
+
export type ComputerProgramHost = (method: ComputerProgramMethod, args: unknown, signal: AbortSignal) => Promise<unknown>;
|
|
3
|
+
/** UI-only capability table; no general tool discovery, disk store, or output spill. */
|
|
4
|
+
export declare function executeComputerProgram(code: string, host: ComputerProgramHost, store: Record<string, unknown>, signal: AbortSignal, timeoutMs?: number): Promise<{
|
|
5
|
+
status: "program_error";
|
|
6
|
+
output: string;
|
|
7
|
+
errorCode: string;
|
|
8
|
+
scriptError: string;
|
|
9
|
+
scriptErrorMessage?: undefined;
|
|
10
|
+
} | {
|
|
11
|
+
status: "program_error";
|
|
12
|
+
output: string;
|
|
13
|
+
errorCode: string;
|
|
14
|
+
scriptError: import("@earendil-works/pi-codemode").CodemodeErrorKind;
|
|
15
|
+
scriptErrorMessage: string;
|
|
16
|
+
} | {
|
|
17
|
+
status: "program_completed";
|
|
18
|
+
output: string;
|
|
19
|
+
errorCode?: undefined;
|
|
20
|
+
scriptError?: undefined;
|
|
21
|
+
scriptErrorMessage?: undefined;
|
|
22
|
+
}>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { CodemodeSandbox } from "@earendil-works/pi-codemode";
|
|
4
|
+
//#region src/computer/program-runtime.ts
|
|
5
|
+
let workerUrl;
|
|
6
|
+
function computerWorkerUrl() {
|
|
7
|
+
if (workerUrl) return workerUrl;
|
|
8
|
+
const bundled = new URL("./codemode-worker.js", import.meta.url);
|
|
9
|
+
const source = existsSync(bundled) ? bundled : new URL("./bundle/chunks/codemode-worker.js", import.meta.resolve("@earendil-works/pi-coding-agent"));
|
|
10
|
+
workerUrl = new URL(`data:text/javascript;base64,${readFileSync(source).toString("base64")}`);
|
|
11
|
+
return workerUrl;
|
|
12
|
+
}
|
|
13
|
+
/** UI-only capability table; no general tool discovery, disk store, or output spill. */
|
|
14
|
+
async function executeComputerProgram(code, host, store, signal, timeoutMs = 12e4) {
|
|
15
|
+
if (Buffer.byteLength(code) > 64 * 1024) throw new Error("COMPUTER_INPUT_LIMIT");
|
|
16
|
+
let busy = false;
|
|
17
|
+
let calls = 0;
|
|
18
|
+
let ended = false;
|
|
19
|
+
let hostErrorCode;
|
|
20
|
+
let cancelledHostCall = false;
|
|
21
|
+
const lifetime = new AbortController();
|
|
22
|
+
const combined = AbortSignal.any([signal, lifetime.signal]);
|
|
23
|
+
const inFlight = /* @__PURE__ */ new Set();
|
|
24
|
+
const sandbox = new CodemodeSandbox({
|
|
25
|
+
timeoutMs,
|
|
26
|
+
memoryLimitBytes: 64 * 1024 * 1024,
|
|
27
|
+
workerUrl: computerWorkerUrl(),
|
|
28
|
+
globals: [
|
|
29
|
+
"observe",
|
|
30
|
+
"resolve",
|
|
31
|
+
"act",
|
|
32
|
+
"waitFor",
|
|
33
|
+
"verify",
|
|
34
|
+
"emitScreenshot"
|
|
35
|
+
].map((method) => ({
|
|
36
|
+
name: `ui.${method}`,
|
|
37
|
+
async execute(args, context) {
|
|
38
|
+
if (ended || ++calls > 64) {
|
|
39
|
+
lifetime.abort();
|
|
40
|
+
throw new Error("COMPUTER_PROGRAM_BUDGET");
|
|
41
|
+
}
|
|
42
|
+
if (busy) {
|
|
43
|
+
lifetime.abort();
|
|
44
|
+
throw new Error("COMPUTER_BUSY");
|
|
45
|
+
}
|
|
46
|
+
busy = true;
|
|
47
|
+
const operation = host(method, args, AbortSignal.any([combined, context.signal]));
|
|
48
|
+
inFlight.add(operation);
|
|
49
|
+
try {
|
|
50
|
+
return await operation;
|
|
51
|
+
} catch (error) {
|
|
52
|
+
if (error instanceof Error && /^COMPUTER_[A-Z_0-9]{1,80}$/.test(error.message)) hostErrorCode = error.message;
|
|
53
|
+
lifetime.abort();
|
|
54
|
+
throw error;
|
|
55
|
+
} finally {
|
|
56
|
+
cancelledHostCall ||= context.signal.aborted || combined.aborted;
|
|
57
|
+
inFlight.delete(operation);
|
|
58
|
+
busy = false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}))
|
|
62
|
+
});
|
|
63
|
+
try {
|
|
64
|
+
const result = await sandbox.execute(code, {
|
|
65
|
+
store,
|
|
66
|
+
signal: combined
|
|
67
|
+
});
|
|
68
|
+
const unawaited = inFlight.size > 0;
|
|
69
|
+
ended = true;
|
|
70
|
+
lifetime.abort();
|
|
71
|
+
await Promise.allSettled([...inFlight]);
|
|
72
|
+
const text = result.output.filter((item) => item.type === "text").map((item) => item.text).join("\n").slice(0, 16e3);
|
|
73
|
+
if (unawaited || cancelledHostCall || hostErrorCode) return {
|
|
74
|
+
status: "program_error",
|
|
75
|
+
output: text,
|
|
76
|
+
errorCode: hostErrorCode ?? "COMPUTER_PROGRAM_UNAWAITED_CALL",
|
|
77
|
+
scriptError: "aborted"
|
|
78
|
+
};
|
|
79
|
+
if (result.ok === false) return {
|
|
80
|
+
status: "program_error",
|
|
81
|
+
output: text,
|
|
82
|
+
errorCode: hostErrorCode ?? "COMPUTER_PROGRAM_FAILED",
|
|
83
|
+
scriptError: result.error.kind,
|
|
84
|
+
scriptErrorMessage: result.error.message.slice(0, 1e3)
|
|
85
|
+
};
|
|
86
|
+
const next = { ...store };
|
|
87
|
+
for (const key of result.storeWrites.delete) delete next[key];
|
|
88
|
+
Object.assign(next, result.storeWrites.set);
|
|
89
|
+
if (Object.keys(next).length > 64 || Buffer.byteLength(JSON.stringify(next)) > 64 * 1024) throw new Error("COMPUTER_PROGRAM_STORE_LIMIT");
|
|
90
|
+
z.record(z.string(), z.json()).parse(next);
|
|
91
|
+
for (const key of Object.keys(store)) delete store[key];
|
|
92
|
+
Object.assign(store, next);
|
|
93
|
+
return {
|
|
94
|
+
status: "program_completed",
|
|
95
|
+
output: text
|
|
96
|
+
};
|
|
97
|
+
} finally {
|
|
98
|
+
ended = true;
|
|
99
|
+
lifetime.abort();
|
|
100
|
+
await sandbox.close();
|
|
101
|
+
await Promise.allSettled([...inFlight]);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//#endregion
|
|
105
|
+
export { executeComputerProgram };
|