@xopcai/xopc 0.0.420 → 0.0.422
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/background.js +184 -2
- package/dist/browser-ext/dist/sidepanel.js +9 -0
- 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-DnqOM8GN.js → activity-store-CvJ9rdwP.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-1UABT2KS.js → agent-avatar-dicebear-CFP6g4w7.js} +1 -1
- package/dist/gateway/static/root/assets/agent-avatar-display-BHBe88Gu.js +2 -0
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DlGRuKMv.js +1 -0
- package/dist/gateway/static/root/assets/agent-plugin-dialog-C_Dm-u6_.js +1 -0
- package/dist/gateway/static/root/assets/{agents-O7mago-m.js → agents-BdVJHOiK.js} +5 -5
- package/dist/gateway/static/root/assets/{agents-admin-api-CyjykMEh.js → agents-admin-api-Do1Pza0R.js} +1 -1
- package/dist/gateway/static/root/assets/{api-Ddrs70xV.js → api-BQv5dLcH.js} +1 -1
- package/dist/gateway/static/root/assets/{api-C1dxxDZx.js → api-ONg37_fH.js} +1 -1
- package/dist/gateway/static/root/assets/app-link-1j40sJ-z.js +1 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-B4Wqhf4J.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-Dm1kRzKL.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-D1MMk1P7.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-n5lPr79c.js → archive-plugin-p_yLkyaC.js} +1 -1
- package/dist/gateway/static/root/assets/automation-api-DQaWBR03.js +1 -0
- package/dist/gateway/static/root/assets/automation-result-state-CO_243JM.js +1 -0
- package/dist/gateway/static/root/assets/automation-task-card-D2p9qlYE.js +3 -0
- package/dist/gateway/static/root/assets/{automations-page-oLsNzu_6.js → automations-page-Ba64H37d.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-BkzC3oIM.js +9 -0
- package/dist/gateway/static/root/assets/{binary-plugins-D9VW7dWP.js → binary-plugins-B-6kyqtt.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-C477bTtO.js → block-editor-B5ysJ96n.js} +4 -4
- package/dist/gateway/static/root/assets/{browser-automation-inputs-CCiYXxmh.js → browser-automation-inputs-C2A3NIt3.js} +1 -1
- package/dist/gateway/static/root/assets/browser-automations-page-CnbXFw1_.js +3 -0
- package/dist/gateway/static/root/assets/{browser-control-api-Y3fvmeBk.js → browser-control-api-Aj_seKE9.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-settings-page-DjkGahlz.js → browser-settings-page-C7fxPq_z.js} +2 -2
- package/dist/gateway/static/root/assets/{capabilities-DAyA681v.js → capabilities-BgtCwC_E.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-DRVXLssH.js → capabilities-DOTgaSgA.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-page-m3b9sLFG.js +2 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-pYWZtPeU.js +8 -0
- package/dist/gateway/static/root/assets/channels-DGpRM6pj.js +1 -0
- package/dist/gateway/static/root/assets/{chat-agents-api-D5nR_JVe.js → chat-agents-api-EvJ_Wvuc.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-chart-block-K2t333qv.js → chat-chart-block-BQDbHLcw.js} +1 -1
- package/dist/gateway/static/root/assets/chat-page-GF9NIuZN.js +72 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-CkFG6mA3.js → chat-terminal-dock-DHFTGoEp.js} +2 -2
- package/dist/gateway/static/root/assets/{list-filter-COkzTdOz.js → clipboard-copy-DuJk5WD6.js} +1 -1
- package/dist/gateway/static/root/assets/{command-palette-api-Do_66X1B.js → command-palette-api-DPA_yEuy.js} +1 -1
- package/dist/gateway/static/root/assets/composer-payload-handoff-BTjauSNp.js +1 -0
- package/dist/gateway/static/root/assets/{computer-settings-page-DBxOcMko.js → computer-settings-page-BFSSQfcx.js} +1 -1
- package/dist/gateway/static/root/assets/connected-providers-grid-DM2glQN3.js +1 -0
- package/dist/gateway/static/root/assets/{connector-service-page-rWpnchb3.js → connector-service-page-CFvg58qa.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-api-DIBG72k4.js → connectors-api-CbC6Yht5.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-D7pipFHA.js +1 -0
- package/dist/gateway/static/root/assets/date-picker-Dd3MbG0x.js +1 -0
- package/dist/gateway/static/root/assets/{dependency-picker-7SpSfDSg.js → dependency-picker-DcsHg2ml.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-DldzQT2h.js +1 -0
- package/dist/gateway/static/root/assets/desktop-pet-settings-CYdI4KxB.js +1 -0
- package/dist/gateway/static/root/assets/{dev-view-store-57HgVuZ6.js → dev-view-store-JiJv585f.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-D8cLc41G.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-D4jMhpka.js → directory-picker-path-field-8WOXv8zw.js} +1 -1
- package/dist/gateway/static/root/assets/discussion-annotation-sync-B-grSe0w.js +1 -0
- package/dist/gateway/static/root/assets/{dist-DNCdG_qB.js → dist-D3lWNSe7.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-BsK2LMXQ.js → extension-debug-page-EEQkTNEu.js} +1 -1
- package/dist/gateway/static/root/assets/extension-iframe-host-vlZVeMCY.js +1 -0
- package/dist/gateway/static/root/assets/{extension-marketplace-api-CVJPqJOB.js → extension-marketplace-api-_o2In_al.js} +1 -1
- package/dist/gateway/static/root/assets/extension-page-CPrT111s.js +1 -0
- package/dist/gateway/static/root/assets/{extension-provider-Byrd8Sor.js → extension-provider-B2Mf3FBu.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-CznJEgWV.js +1 -0
- package/dist/gateway/static/root/assets/{file-preview-surface-BlprUrIs.js → file-preview-surface-7h8_fZul.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-BAmUhiP1.js → gateway-config-swr-DbbNEOKj.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-CsykKL4l.js → gateway-realtime-D20ZrAuM.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-C6sMzYDT.js +1 -0
- package/dist/gateway/static/root/assets/gateway-restart-5ut-lhJm.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-settings-BA5-Uuwx.js → gateway-settings-BCf_cibp.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-CtUB3g6N.js → gateway-startup-retry-DlHL0DpH.js} +1 -1
- package/dist/gateway/static/root/assets/{global-defaults-api-CINf-C6a.js → global-defaults-api-CmODomcV.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-uz22TRB-.js +2 -0
- package/dist/gateway/static/root/assets/image-generation-api-dzPnpUFu.js +1 -0
- package/dist/gateway/static/root/assets/{imports-page-BWShtGRQ.js → imports-page-ChBoNMyE.js} +1 -1
- package/dist/gateway/static/root/assets/index-CSIg7V1A.js +11 -0
- package/dist/gateway/static/root/assets/index-Dv8mUlNN.css +1 -0
- package/dist/gateway/static/root/assets/install-connector-dialog-CNcdQDX0.js +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CdM4BQwp.js → keyboard-shortcuts-settings-CRbYq2_g.js} +1 -1
- package/dist/gateway/static/root/assets/list-filter-CIPvpfLA.js +1 -0
- package/dist/gateway/static/root/assets/local-app-workbench-page-04cX5TJu.js +1 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CxyRVfjD.js → local-apps-page-fWM0FEhN.js} +1 -1
- package/dist/gateway/static/root/assets/{local-session-drafts-B9ZPwotC.js → local-session-drafts-ClrSe5mH.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-lIXD1FMw.js → locale-store-VNjH18Dj.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-6GanGLrm.js +2 -0
- package/dist/gateway/static/root/assets/management-settings-BxD_lc4E.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-CJt-i2Dp.js → markdown-view-DLCBYWtx.js} +4 -4
- package/dist/gateway/static/root/assets/{media-plugins-D_bR23mA.js → media-plugins-BvtNwKFb.js} +1 -1
- package/dist/gateway/static/root/assets/messages-Btr7C0hF.js +3 -0
- package/dist/gateway/static/root/assets/model-selector-DYUnp917.js +1 -0
- package/dist/gateway/static/root/assets/{models-hub-cache-za2fWJLg.js → models-hub-cache-_qE7L-_H.js} +1 -1
- package/dist/gateway/static/root/assets/navigation-D62kPsA9.js +1 -0
- package/dist/gateway/static/root/assets/note-detail-panel-bjRZesmS.js +5 -0
- package/dist/gateway/static/root/assets/note-image-lightbox-D7Jqb75C.js +1 -0
- package/dist/gateway/static/root/assets/{notes-api-C_458rv5.js → notes-api-Bxa11X3a.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-D2QpJ3WZ.js +8 -0
- package/dist/gateway/static/root/assets/{oauth-api-C3X9FLYw.js → oauth-api-DIE4UpP7.js} +1 -1
- package/dist/gateway/static/root/assets/{oauth-provider-connect-H81se_3n.js → oauth-provider-connect-B95tiddN.js} +1 -1
- package/dist/gateway/static/root/assets/open-capability-settings-Cvb65hQB.js +1 -0
- package/dist/gateway/static/root/assets/{page-context-capture-button-BkAlQ7cB.js → page-context-capture-button-C-QbbwmN.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-draft-ClLgaOaD.js → page-context-draft-BHmOfksL.js} +1 -1
- package/dist/gateway/static/root/assets/page-header-store-bPV8_tKL.js +1 -0
- package/dist/gateway/static/root/assets/{personal-avatar-BLtHt8fV.js → personal-avatar-nXrmMfrV.js} +1 -1
- package/dist/gateway/static/root/assets/personal-page-BCwlYT3F.js +1 -0
- package/dist/gateway/static/root/assets/personal-settings-panel-vkYmXK8h.js +1 -0
- package/dist/gateway/static/root/assets/{phone-dependencies-card-DISHarj8.js → phone-dependencies-card-CZDAxTWv.js} +1 -1
- package/dist/gateway/static/root/assets/phone-model-picker-4Snfs8Hq.js +1 -0
- package/dist/gateway/static/root/assets/phone-settings-page-D8HperfA.js +1 -0
- package/dist/gateway/static/root/assets/{phone-workspace-store-fhnZrgy_.js → phone-workspace-store-Di9R9Ux5.js} +1 -1
- package/dist/gateway/static/root/assets/plugin-details-dialog-DJsDu-_8.js +1 -0
- package/dist/gateway/static/root/assets/popover-select-DD8fmrxH.js +1 -0
- package/dist/gateway/static/root/assets/preference-select-fields-C6abaM3k.js +1 -0
- package/dist/gateway/static/root/assets/product-automation-feedback-C74s9Mjz.js +7 -0
- package/dist/gateway/static/root/assets/product-delivery-DRyD9_Xq.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-xn9G4hSI.js → product-open-page-AbDP5w1c.js} +1 -1
- package/dist/gateway/static/root/assets/product-preview-content-CktjvFbc.js +1 -0
- package/dist/gateway/static/root/assets/product-preview-modal-CzsqLwB4.js +2 -0
- package/dist/gateway/static/root/assets/project-detail-page-Cf3tggGP.js +7 -0
- package/dist/gateway/static/root/assets/project-understanding-jmhFbHch.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-jMgZiFnO.js +1 -0
- package/dist/gateway/static/root/assets/{providers-api-CzVkFKFg.js → providers-api-CJBYFKAK.js} +1 -1
- package/dist/gateway/static/root/assets/{recording-upload-0jxahBMo.js → recording-upload-Dl9a5yOV.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-n8TwtJ_j.js → registry-api-BwkbPUYu.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-cZpBi4Rk.js → remote-access-hub-CBQ_bOy9.js} +1 -1
- package/dist/gateway/static/root/assets/resource-unavailable-35wBZxmz.js +1 -0
- package/dist/gateway/static/root/assets/route-preload-BcA6SPeC.js +2 -0
- package/dist/gateway/static/root/assets/runtime-impact-DbySfhdp.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-api-D-8KjYK6.js → runtime-tools-api-BF28JDAO.js} +1 -1
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bq2xQ2qd.js +1 -0
- package/dist/gateway/static/root/assets/schema-form-BKeP5G7b.js +1 -0
- package/dist/gateway/static/root/assets/service-recommendation-list-CdaS4MPF.js +1 -0
- package/dist/gateway/static/root/assets/{session-api-CsCoI2im.js → session-api-zJXYlRPt.js} +1 -1
- package/dist/gateway/static/root/assets/session-manager-wWxpzSo0.js +23 -0
- package/dist/gateway/static/root/assets/sessions-page-BkjD_dUD.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BUMCEtA_.js +1 -0
- package/dist/gateway/static/root/assets/{settings-advanced-section-BqoVSko2.js → settings-advanced-section-C84IghdL.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-mode-store-CBsJ-Qg2.js → settings-mode-store-CtQBJvbO.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-DROUGyJl.js → settings-page-eEIz9InP.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-header-Bv-kQFTm.js → settings-page-header-CsPAYlqV.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-DHP6MrrL.js → settings-page-layout-lPLeJQoV.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BSU5WpaE.js +1 -0
- package/dist/gateway/static/root/assets/{share-link-dialog-BJHRQVKC.js → share-link-dialog-NaM6jvIz.js} +1 -1
- package/dist/gateway/static/root/assets/share-preview-page-CHjZn27s.js +2 -0
- package/dist/gateway/static/root/assets/{shares-api-rtWVHA_d.js → shares-api-B9rVcV1y.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-5sB15V5v.js +1 -0
- package/dist/gateway/static/root/assets/skill-api-D6zVfEuK.js +1 -0
- package/dist/gateway/static/root/assets/{skill-list-api-BzlKXPsE.js → skill-list-api-SLmTBYF5.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-Cff2GgZb.js → skill-reload-api-UQkq2orI.js} +1 -1
- package/dist/gateway/static/root/assets/skills-page-Ca0pYZ4i.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-BeQeUUMH.js → system-settings-panel-BARWbjRN.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-roqAsGue.js +2 -0
- package/dist/gateway/static/root/assets/task-result-evidence-Bb1F7nAM.js +1 -0
- package/dist/gateway/static/root/assets/{terminal-panel-store-5Fzctajw.js → terminal-panel-store-DYDeXXAg.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-DW45fWYQ.js → theme-store-DbStcH89.js} +1 -1
- package/dist/gateway/static/root/assets/tracing-settings-page-YfkNCxbP.js +1 -0
- package/dist/gateway/static/root/assets/tunnel-api-BK_ivyIb.js +1 -0
- package/dist/gateway/static/root/assets/{understanding-activity-store-CTe6TFB0.js → understanding-activity-store-p7Z7oq8z.js} +1 -1
- package/dist/gateway/static/root/assets/{understanding-refresh-store-mE9OKG6q.js → understanding-refresh-store-D-U6rcwZ.js} +1 -1
- package/dist/gateway/static/root/assets/usage-page-URFSiswS.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-Cs2Ga_Y_.js → use-autosave-B7cbumro.js} +1 -1
- package/dist/gateway/static/root/assets/use-composer-attachments-DAtiwLsE.js +2 -0
- package/dist/gateway/static/root/assets/use-file-preview-expanded-B8erpWsX.js +2 -0
- package/dist/gateway/static/root/assets/{use-personal-profile-BHL2AxWU.js → use-personal-profile-DDW29nm-.js} +1 -1
- package/dist/gateway/static/root/assets/{use-workspace-tree-CnmPZrpx.js → use-workspace-tree-DCoTf22f.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-DSV5NkNj.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-3gyc2UV3.js → voice-api-key-field-DzYdJZN4.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-Cda2uBIC.js → voice-config-api-wotvT6Hw.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-input-shortcut-events-DtYHsPLF.js → voice-input-shortcut-events-BI6PuiIB.js} +1 -1
- package/dist/gateway/static/root/assets/voice-transcribe-api-DAK9eLRr.js +1 -0
- package/dist/gateway/static/root/assets/{work-discovery-overlay-Dqu5CQCS.js → work-discovery-overlay-BzmB9Rub.js} +1 -1
- package/dist/gateway/static/root/assets/work-discovery-page-CmGjxUIT.js +1 -0
- package/dist/gateway/static/root/assets/{working-directory-picker-modal-DHl2cZY1.js → working-directory-picker-modal-B-EHm52-.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-api-CtDbI6T7.js → workspace-api-uhiEMPpK.js} +2 -2
- package/dist/gateway/static/root/assets/workspace-editor-agent-store-DrPVyikA.js +1 -0
- package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-CTIbUfKb.js → workspace-file-preview-dialog-BDm06MZm.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-open-location-menu-BwxouqdZ.js → workspace-open-location-menu-Bv83uoqu.js} +1 -1
- package/dist/gateway/static/root/assets/{xopc-cloud-account-card-CFb-23rS.js → xopc-cloud-account-card-Cd5GdpGL.js} +1 -1
- package/dist/gateway/static/root/index.html +91 -86
- package/dist/gateway/static/root/notification-sw.js +21 -7
- package/dist/package.js +1 -1
- package/dist/packages/endpoint-tools-protocol/src/context.js +115 -0
- package/dist/packages/endpoint-tools-protocol/src/index.js +4 -0
- package/dist/packages/endpoint-tools-protocol/src/location-sharing.js +51 -0
- package/dist/packages/gateway-contract/src/gateway-scopes.js +5 -1
- package/dist/packages/gateway-contract/src/index.js +4 -0
- package/dist/packages/gateway-contract/src/phone-workspace.js +6 -0
- package/dist/packages/gateway-contract/src/product-delivery.js +9 -3
- package/dist/packages/gateway-contract/src/task-display.js +14 -0
- package/dist/src/agent/agent-manager.js +1 -1
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/context/execution-scope.js +10 -5
- package/dist/src/agent/embedded/external-tool-discovery.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +2 -2
- package/dist/src/agent/embedded/run-turn.js +72 -9
- package/dist/src/agent/embedded/session-runner.js +2 -1
- package/dist/src/agent/embedded/types.d.ts +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/prompt/system-prompt.js +1 -0
- package/dist/src/agent/service/direct-turn-helpers.d.ts +0 -7
- package/dist/src/agent/service/direct-turn-helpers.js +3 -2
- package/dist/src/agent/service/process-direct-streaming.js +2 -1
- 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/device-environment.d.ts +3 -0
- package/dist/src/agent/source-context/device-environment.js +38 -0
- package/dist/src/agent/source-context/injector.js +2 -1
- package/dist/src/agent/tool-manuals/phone.d.ts +1 -1
- package/dist/src/agent/tool-manuals/phone.js +1 -1
- package/dist/src/agent/tools/automation-tool.d.ts +2 -1
- package/dist/src/agent/tools/automation-tool.js +13 -5
- package/dist/src/agent/tools/factory.js +2 -1
- package/dist/src/agent/tools/personal-read-tool.js +2 -2
- package/dist/src/agent/tools/personal-task-tool.js +2 -1
- package/dist/src/agent/tools/phone-use-tool.js +46 -2
- package/dist/src/agent/tools/xopc-use-tool.js +8 -5
- 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 +38 -0
- package/dist/src/automations/capabilities/drafts.js +1 -1
- package/dist/src/automations/capabilities/write.js +25 -9
- package/dist/src/automations/configuration-conversation.d.ts +16 -0
- package/dist/src/automations/configuration-conversation.js +120 -0
- package/dist/src/automations/delivery/delivery-router.d.ts +2 -0
- package/dist/src/automations/delivery/delivery-router.js +30 -9
- package/dist/src/automations/domain/types.d.ts +1 -0
- package/dist/src/automations/index.js +5 -5
- package/dist/src/automations/service/action-executor.js +41 -12
- package/dist/src/automations/service/automation-service.d.ts +6 -0
- package/dist/src/automations/service/automation-service.js +47 -12
- package/dist/src/automations/service/index.js +2 -2
- 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/agents.js +1 -1
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/onboard/model.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +1 -1
- package/dist/src/computer/broker.js +16 -3
- package/dist/src/computer/diagnostics.js +1 -1
- package/dist/src/computer/errors.js +4 -0
- package/dist/src/computer/runtime.d.ts +1 -1
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/schema.d.ts +1 -0
- package/dist/src/endpoint-tools/context-store.d.ts +29 -0
- package/dist/src/endpoint-tools/context-store.js +138 -0
- package/dist/src/endpoint-tools/location-sharing.d.ts +42 -0
- package/dist/src/endpoint-tools/location-sharing.js +203 -0
- package/dist/src/endpoint-tools/runtime.d.ts +4 -0
- package/dist/src/endpoint-tools/runtime.js +8 -0
- package/dist/src/endpoint-tools/turn-context.d.ts +2 -1
- package/dist/src/endpoint-tools/turn-context.js +4 -2
- 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/automation-completion-delivery.d.ts +4 -0
- package/dist/src/gateway/automation-completion-delivery.js +14 -0
- package/dist/src/gateway/global-defaults-admin.js +1 -1
- package/dist/src/gateway/hono/middleware/auth.js +1 -1
- package/dist/src/gateway/hono/routes/agents.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
- package/dist/src/gateway/hono/routes/devices.js +1 -0
- package/dist/src/gateway/hono/routes/endpoint-compatibility.js +4 -0
- package/dist/src/gateway/hono/routes/endpoint-environment.d.ts +3 -0
- package/dist/src/gateway/hono/routes/endpoint-environment.js +98 -0
- package/dist/src/gateway/hono/routes/endpoint-tools.js +1 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js +16 -0
- package/dist/src/gateway/hono/routes/location-sharing.d.ts +3 -0
- package/dist/src/gateway/hono/routes/location-sharing.js +164 -0
- 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 +246 -34
- package/dist/src/gateway/hono/routes/projects.js +2 -2
- package/dist/src/gateway/hono/routes/session-command-handler.js +1 -1
- package/dist/src/gateway/hono/routes/session-input-handler.js +3 -2
- package/dist/src/gateway/hono/routes/tasks.js +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js +10 -0
- package/dist/src/gateway/image-generation-setup.js +1 -1
- package/dist/src/gateway/respawn.js +2 -1
- package/dist/src/gateway/security/gateway-scopes.js +6 -0
- package/dist/src/gateway/security/phone-access.d.ts +4 -0
- package/dist/src/gateway/security/phone-access.js +20 -0
- package/dist/src/gateway/service/agent-runner.js +3 -1
- package/dist/src/gateway/service/config-coordinator.d.ts +1 -0
- package/dist/src/gateway/service/run-gateway-agent.js +2 -1
- package/dist/src/gateway/service/session-input-coordinator.d.ts +3 -0
- package/dist/src/gateway/service/session-input-coordinator.js +50 -2
- package/dist/src/gateway/service.d.ts +1 -0
- package/dist/src/gateway/service.js +12 -4
- package/dist/src/gateway/session-reset-service.js +4 -0
- package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
- package/dist/src/imports/importService.js +1 -1
- package/dist/src/local-apps/service.js +1 -1
- package/dist/src/notifications/planner.js +6 -6
- package/dist/src/observability/store.d.ts +9 -0
- package/dist/src/observability/store.js +77 -32
- package/dist/src/personal-agent/communication.d.ts +1 -1
- package/dist/src/personal-agent/communication.js +3 -6
- package/dist/src/personal-agent/request-service.js +2 -1
- package/dist/src/personal-agent/service.js +1 -1
- package/dist/src/phone/assistance-service.d.ts +6 -0
- package/dist/src/phone/assistance-service.js +32 -0
- package/dist/src/phone/assistance.d.ts +40 -0
- package/dist/src/phone/assistance.js +273 -0
- package/dist/src/phone/cloud-phones.d.ts +5 -0
- package/dist/src/phone/cloud-phones.js +14 -0
- package/dist/src/phone/contracts.d.ts +7 -1
- package/dist/src/phone/contracts.js +5 -0
- package/dist/src/phone/environment-adapter.d.ts +3 -0
- package/dist/src/phone/environment-adapter.js +11 -0
- package/dist/src/phone/location-baseline-store.d.ts +9 -0
- package/dist/src/phone/location-baseline-store.js +61 -0
- package/dist/src/phone/location-environment.d.ts +61 -0
- package/dist/src/phone/location-environment.js +157 -0
- package/dist/src/phone/model-adapter.js +16 -5
- package/dist/src/phone/runtime.d.ts +17 -2
- package/dist/src/phone/runtime.js +203 -20
- package/dist/src/phone/stream-gateway.d.ts +5 -0
- package/dist/src/phone/stream-gateway.js +85 -51
- package/dist/src/phone/wuying-location.d.ts +18 -0
- package/dist/src/phone/wuying-location.js +86 -0
- package/dist/src/runtime-tools/archive.js +1 -1
- package/dist/src/storage/sqlite/device-access-repository.d.ts +4 -0
- package/dist/src/storage/sqlite/device-access-repository.js +18 -1
- package/dist/src/tasks/capabilities/read.js +2 -2
- package/dist/src/tasks/capabilities/write.js +1 -1
- package/dist/src/tasks/task-contract-planner.js +2 -1
- package/dist/src/tui/backends/embedded-backend.js +1 -1
- package/dist/src/tunnel/broker-client.d.ts +8 -0
- package/dist/src/tunnel/broker-client.js +18 -1
- package/dist/src/voice/realtime/persona-context.js +1 -1
- package/dist/src/voice/realtime/runtime.js +1 -1
- package/package.json +4 -3
- package/dist/gateway/static/root/assets/agent-avatar-display-Cy50vjbq.js +0 -2
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-V4NX_cWz.js +0 -1
- package/dist/gateway/static/root/assets/agent-plugin-dialog-CQ5LLDMO.js +0 -1
- package/dist/gateway/static/root/assets/app-link-CytZ5zkp.js +0 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-C1Zs-eha.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-lIfGokbz.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-CUvtsRYD.js +0 -1
- package/dist/gateway/static/root/assets/automation-api-Bld8blNl.js +0 -1
- package/dist/gateway/static/root/assets/automation-display-BcfZOQTC.js +0 -2
- package/dist/gateway/static/root/assets/automations-workspace-BgtYY2Mm.js +0 -8
- package/dist/gateway/static/root/assets/browser-automations-page-DIUNY94X.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-page-DFW4Y0x8.js +0 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-uOHSMQPZ.js +0 -8
- package/dist/gateway/static/root/assets/channels-D2a69dSt.js +0 -1
- package/dist/gateway/static/root/assets/chat-page-CG38tCHE.js +0 -71
- package/dist/gateway/static/root/assets/composer-payload-handoff-BU3B-C26.js +0 -1
- package/dist/gateway/static/root/assets/connected-providers-grid-Dmnu2zle.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DT_WrC1y.js +0 -1
- package/dist/gateway/static/root/assets/date-picker-CE-cZFCU.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-lorocS9j.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-CEcohlZq.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-CLCPuf4R.js +0 -1
- package/dist/gateway/static/root/assets/discussion-annotation-sync-BKjf9gWe.js +0 -1
- package/dist/gateway/static/root/assets/extension-iframe-host-Dhkk5JV2.js +0 -1
- package/dist/gateway/static/root/assets/extension-page-Brps2XDP.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-CHY68DpG.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-DQqMBruB.js +0 -1
- package/dist/gateway/static/root/assets/gateway-restart-Ch128Lrr.js +0 -1
- package/dist/gateway/static/root/assets/home-page-DaMFBYo1.js +0 -2
- package/dist/gateway/static/root/assets/image-generation-api-I_JgLL_m.js +0 -1
- package/dist/gateway/static/root/assets/index-DY2Y83b9.css +0 -1
- package/dist/gateway/static/root/assets/index-UCOlAnf-.js +0 -11
- package/dist/gateway/static/root/assets/install-connector-dialog-DU1Tz7B3.js +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-qPflPuQD.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-CbY1N-zi.js +0 -2
- package/dist/gateway/static/root/assets/management-settings-Diy12JfQ.js +0 -1
- package/dist/gateway/static/root/assets/messages-DRR9N3HC.js +0 -3
- package/dist/gateway/static/root/assets/model-selector-DCYA_ntf.js +0 -1
- package/dist/gateway/static/root/assets/navigation-BkjnOw30.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-DBs1yHLy.js +0 -5
- package/dist/gateway/static/root/assets/note-image-lightbox-CivkB6LB.js +0 -1
- package/dist/gateway/static/root/assets/notes-page-DL3c-41a.js +0 -8
- package/dist/gateway/static/root/assets/page-header-store-DH8K0xii.js +0 -1
- package/dist/gateway/static/root/assets/personal-page-B5DP3lO-.js +0 -1
- package/dist/gateway/static/root/assets/personal-settings-panel-DjDc5Kaz.js +0 -1
- package/dist/gateway/static/root/assets/phone-model-picker-u8YIQCgo.js +0 -1
- package/dist/gateway/static/root/assets/phone-settings-page-el3pT0PD.js +0 -1
- package/dist/gateway/static/root/assets/plugin-details-dialog-CTBs1Jde.js +0 -1
- package/dist/gateway/static/root/assets/popover-select-DniHw2dy.js +0 -1
- package/dist/gateway/static/root/assets/preference-select-fields-D7oluyHN.js +0 -1
- package/dist/gateway/static/root/assets/product-automation-feedback-DsUSqCOX.js +0 -7
- package/dist/gateway/static/root/assets/product-delivery-BU_H84jL.js +0 -1
- package/dist/gateway/static/root/assets/product-preview-content-DcoK-iZe.js +0 -1
- package/dist/gateway/static/root/assets/product-preview-modal-Ruw9WSKK.js +0 -2
- package/dist/gateway/static/root/assets/project-detail-page-BKvWLiMw.js +0 -7
- package/dist/gateway/static/root/assets/project-understanding-BCQr0AZ_.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-D4g7bB7X.js +0 -1
- package/dist/gateway/static/root/assets/route-preload-B5UiReO7.js +0 -2
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-MKlLFuow.js +0 -1
- package/dist/gateway/static/root/assets/schema-form-v4N4lawq.js +0 -1
- package/dist/gateway/static/root/assets/service-recommendation-list-B1xuVT3N.js +0 -1
- package/dist/gateway/static/root/assets/session-manager-5l9q0cd5.js +0 -16
- package/dist/gateway/static/root/assets/sessions-page-DsLw2aMD.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-B5lQeVNi.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-MJE3B_LX.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-Bsrv_zOQ.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-CfIRv4uX.js +0 -1
- package/dist/gateway/static/root/assets/skill-api-B_W1K3sv.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-DtBloYeU.js +0 -2
- package/dist/gateway/static/root/assets/task-detail-page-Drrv-Hp0.js +0 -2
- package/dist/gateway/static/root/assets/task-result-evidence-D1Kyskm_.js +0 -1
- package/dist/gateway/static/root/assets/tracing-settings-page-B12u5D9A.js +0 -1
- package/dist/gateway/static/root/assets/tunnel-api-DGO56LQU.js +0 -1
- package/dist/gateway/static/root/assets/usage-page-Ud2U9UG1.js +0 -1
- package/dist/gateway/static/root/assets/use-composer-attachments-BCbMj-MN.js +0 -2
- package/dist/gateway/static/root/assets/use-file-preview-expanded-DSpCRXUW.js +0 -2
- package/dist/gateway/static/root/assets/user-model-page-p5iPfnwl.js +0 -2
- package/dist/gateway/static/root/assets/voice-transcribe-api-TInEfIYo.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-p-8ciZ0i.js +0 -1
- package/dist/gateway/static/root/assets/workspace-editor-agent-store-B94Q2nN8.js +0 -1
|
@@ -10,6 +10,7 @@ import { cancelConnectionObjective, consumeConnectionResume, getActiveConnection
|
|
|
10
10
|
import { appendTranscriptEntry } from "../../storage/sqlite/transcript-repository.js";
|
|
11
11
|
import "../../storage/sqlite/index.js";
|
|
12
12
|
import { emitSessionTranscriptUpdate } from "../../session/transcript-events.js";
|
|
13
|
+
import { consumePhoneAssistance, finishPhoneAssistance, phoneAssistance, queuePhoneAssistance, reconcilePhoneAssistance } from "../../phone/assistance.js";
|
|
13
14
|
import { summarizeSourceContext } from "../../agent/source-context/types.js";
|
|
14
15
|
import { TaskApplicationService } from "../../tasks/task-application-service.js";
|
|
15
16
|
import { injectSourceContextsIntoUserMessage } from "../../agent/source-context/injector.js";
|
|
@@ -91,6 +92,11 @@ var SessionInputCoordinator = class {
|
|
|
91
92
|
snapshot(conversationId) {
|
|
92
93
|
return getSessionInputState(conversationId);
|
|
93
94
|
}
|
|
95
|
+
resumePhone(conversationId, waitId) {
|
|
96
|
+
queuePhoneAssistance(conversationId, waitId);
|
|
97
|
+
this.publish(conversationId);
|
|
98
|
+
this.drain(conversationId);
|
|
99
|
+
}
|
|
94
100
|
connectionTarget(conversationId, runtime = this.snapshot(conversationId)) {
|
|
95
101
|
const active = runtime.activeInputId ? getSessionInputById(conversationId, runtime.activeInputId) : void 0;
|
|
96
102
|
return getActiveConnectionWait(conversationId) ?? (active?.kind === "connection_resume" && active.payload ? getConnectionWait(active.payload.waitId) : void 0);
|
|
@@ -346,6 +352,41 @@ var SessionInputCoordinator = class {
|
|
|
346
352
|
};
|
|
347
353
|
}
|
|
348
354
|
const runtime = this.snapshot(conversationId);
|
|
355
|
+
const phoneWait = phoneAssistance(conversationId);
|
|
356
|
+
if (/^(?:我已(?:完成|登录|登陆|输入验证码)[,,、\s]*(?:请)?继续(?:原任务|任务)?|(?:登录|登陆|验证码|手机操作)(?:已)?完成[了]?[,,、\s]*(?:请)?继续(?:原任务|任务)?|好了[,,、\s]*继续(?:原任务|任务)?|(?:i(?: have|'ve) )?(?:logged in|finished on the phone|completed the phone action)[,\s]+(?:please )?(?:continue|resume)(?: the task)?)[。.!!\s]*$/iu.test(content) && phoneWait?.status === "open" && this.deps.completePhone && input.origin.type !== "system" && !attachments?.length && !input.contextRefs?.length && !getActiveConnectionWait(conversationId) && !getActiveClarification(conversationId)) {
|
|
357
|
+
if (input.expectedTranscriptId && input.expectedTranscriptId !== phoneWait.transcriptId) return {
|
|
358
|
+
ok: false,
|
|
359
|
+
code: "SESSION_CHANGED"
|
|
360
|
+
};
|
|
361
|
+
await this.deps.completePhone(phoneWait);
|
|
362
|
+
runSqliteWriteTransaction(() => {
|
|
363
|
+
const row = insertSessionInput({
|
|
364
|
+
id: crypto.randomUUID(),
|
|
365
|
+
conversationId,
|
|
366
|
+
clientMessageId,
|
|
367
|
+
expectedTranscriptId: phoneWait.transcriptId,
|
|
368
|
+
content,
|
|
369
|
+
requestedDelivery: "next",
|
|
370
|
+
effectiveDelivery: "next",
|
|
371
|
+
status: "queued",
|
|
372
|
+
origin: input.origin
|
|
373
|
+
});
|
|
374
|
+
queuePhoneAssistance(conversationId, phoneWait.id);
|
|
375
|
+
appendTranscriptEntry(conversationId, {
|
|
376
|
+
role: "user",
|
|
377
|
+
content,
|
|
378
|
+
timestamp: row.createdAtMs
|
|
379
|
+
});
|
|
380
|
+
setSessionInputStatus(row.id, "completed");
|
|
381
|
+
});
|
|
382
|
+
emitSessionTranscriptUpdate({ conversationId });
|
|
383
|
+
this.drain(conversationId);
|
|
384
|
+
return {
|
|
385
|
+
ok: true,
|
|
386
|
+
effectiveDelivery: "next",
|
|
387
|
+
state: this.publish(conversationId)
|
|
388
|
+
};
|
|
389
|
+
}
|
|
349
390
|
const wait = this.connectionTarget(conversationId, runtime);
|
|
350
391
|
const control = wait?.principalId === "local-owner" ? connectionControl(input, wait) : void 0;
|
|
351
392
|
const payload = connectionInputPayload(wait, control);
|
|
@@ -436,7 +477,7 @@ var SessionInputCoordinator = class {
|
|
|
436
477
|
this.publish(conversationId);
|
|
437
478
|
continue;
|
|
438
479
|
}
|
|
439
|
-
allowed = allowed && consumeConnectionResume(input) && consumeClarificationResume(input);
|
|
480
|
+
allowed = allowed && consumeConnectionResume(input) && consumeClarificationResume(input) && consumePhoneAssistance(input);
|
|
440
481
|
} catch (err) {
|
|
441
482
|
log.warn({
|
|
442
483
|
err,
|
|
@@ -444,6 +485,7 @@ var SessionInputCoordinator = class {
|
|
|
444
485
|
runId,
|
|
445
486
|
inputId: input.id
|
|
446
487
|
}, "Session input preflight failed");
|
|
488
|
+
finishPhoneAssistance(input, false);
|
|
447
489
|
finishSessionInputRun(conversationId, runId, "failed", "Input preflight failed");
|
|
448
490
|
if (input.kind === "connection_resume") reconcileConnectionWaits();
|
|
449
491
|
this.publish(conversationId);
|
|
@@ -451,6 +493,7 @@ var SessionInputCoordinator = class {
|
|
|
451
493
|
}
|
|
452
494
|
if (!allowed) {
|
|
453
495
|
finishSessionInputRun(conversationId, runId, "cancelled");
|
|
496
|
+
finishPhoneAssistance(input, false);
|
|
454
497
|
this.publish(conversationId);
|
|
455
498
|
continue;
|
|
456
499
|
}
|
|
@@ -513,6 +556,7 @@ var SessionInputCoordinator = class {
|
|
|
513
556
|
}
|
|
514
557
|
const terminal = cancelled ? "cancelled" : result.status === "suspended" ? "suspended" : result.status === "ok" ? "completed" : result.status === "aborted" ? "cancelled" : "failed";
|
|
515
558
|
finishSessionInputRun(conversationId, runId, terminal, terminal === "failed" ? result.summary : void 0);
|
|
559
|
+
finishPhoneAssistance(input, terminal === "completed");
|
|
516
560
|
this.publish(conversationId);
|
|
517
561
|
}
|
|
518
562
|
} finally {
|
|
@@ -664,7 +708,11 @@ var SessionInputCoordinator = class {
|
|
|
664
708
|
recover() {
|
|
665
709
|
const interrupted = recoverSessionInputState();
|
|
666
710
|
new TaskRunRepository().reconcileCancelledRuns();
|
|
667
|
-
for (const conversationId of new Set([
|
|
711
|
+
for (const conversationId of new Set([
|
|
712
|
+
...interrupted,
|
|
713
|
+
...reconcileConnectionWaits(true),
|
|
714
|
+
...reconcilePhoneAssistance()
|
|
715
|
+
])) {
|
|
668
716
|
this.publish(conversationId);
|
|
669
717
|
this.drain(conversationId);
|
|
670
718
|
}
|
|
@@ -155,6 +155,7 @@ export declare class GatewayService {
|
|
|
155
155
|
ok: false;
|
|
156
156
|
code: "BAD_REQUEST" | "QUEUE_FULL" | "CONTEXT_UNAVAILABLE" | "SESSION_CHANGED";
|
|
157
157
|
}>;
|
|
158
|
+
resumePhoneAssistance(conversationId: string, waitId: string): void;
|
|
158
159
|
withSessionInputSubmission<T>(conversationId: string, operation: () => Promise<T>): Promise<T>;
|
|
159
160
|
prepareSessionCommandInput(input: Parameters<GatewayAgentRunner['inputs']['prepareInput']>[0]): Promise<{
|
|
160
161
|
payload?: import("../storage/sqlite/session-input-repository.js").SessionInputPayload;
|
|
@@ -104,6 +104,7 @@ import { EndpointToolRuntime } from "../endpoint-tools/runtime.js";
|
|
|
104
104
|
import "../endpoint-tools/index.js";
|
|
105
105
|
import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
|
|
106
106
|
import { prepareAutomationAgentSession } from "./automation-agent-session.js";
|
|
107
|
+
import { deliverAutomationCompletion } from "./automation-completion-delivery.js";
|
|
107
108
|
import { stopTailscaleExposure } from "./tailscale-lifecycle.js";
|
|
108
109
|
import { getGatewayFileSpaceService } from "./file-space-service.js";
|
|
109
110
|
import { reconcileHomeIntelligenceAutomation } from "./home-intelligence-automation-reconciler.js";
|
|
@@ -766,6 +767,7 @@ var GatewayService = class {
|
|
|
766
767
|
this.automationService.setDeps({
|
|
767
768
|
agentService: this._agentService,
|
|
768
769
|
getDefaultAgentId: () => getDefaultAgentId(),
|
|
770
|
+
isAgentAvailable: (id) => listAgentEntries().some((agent) => agent.id === id && agent.enabled !== false),
|
|
769
771
|
prepareAgentSession: (input) => prepareAutomationAgentSession(this.sessionIndex.getStore(), this.projects, input),
|
|
770
772
|
browserAutomationService: this.browserAutomations,
|
|
771
773
|
executeTaskCommand: ({ taskId, idempotencyKey, command, triggerEvent }) => {
|
|
@@ -1091,6 +1093,9 @@ var GatewayService = class {
|
|
|
1091
1093
|
submitSessionInput(...args) {
|
|
1092
1094
|
return this.agentRunner.submitSessionInput(...args);
|
|
1093
1095
|
}
|
|
1096
|
+
resumePhoneAssistance(conversationId, waitId) {
|
|
1097
|
+
this.agentRunner.inputs.resumePhone(conversationId, waitId);
|
|
1098
|
+
}
|
|
1094
1099
|
withSessionInputSubmission(conversationId, operation) {
|
|
1095
1100
|
return this.agentRunner.inputs.withSubmission(conversationId, operation);
|
|
1096
1101
|
}
|
|
@@ -1318,6 +1323,10 @@ var GatewayService = class {
|
|
|
1318
1323
|
await this.localApps.recoverPendingReleases();
|
|
1319
1324
|
const { recoverCapabilityImports } = await import("../imports/runtime.js");
|
|
1320
1325
|
await recoverCapabilityImports();
|
|
1326
|
+
if (getSqliteDatabase().prepare("SELECT 1 FROM durable_state WHERE namespace = 'phone.location-environment' LIMIT 1").get()) {
|
|
1327
|
+
const { getPhoneRuntime } = await import("../phone/runtime.js");
|
|
1328
|
+
getPhoneRuntime().environment.sweep().catch(() => log.warn({ phase: "phone_location_recovery" }, "Phone location recovery remains pending"));
|
|
1329
|
+
}
|
|
1321
1330
|
this.createNotificationService().start();
|
|
1322
1331
|
this.startTime = Date.now();
|
|
1323
1332
|
this.running = true;
|
|
@@ -1426,6 +1435,7 @@ var GatewayService = class {
|
|
|
1426
1435
|
this.automationService.setDeps({
|
|
1427
1436
|
agentService: this.agentService,
|
|
1428
1437
|
getDefaultAgentId: () => getDefaultAgentId(),
|
|
1438
|
+
isAgentAvailable: (id) => listAgentEntries().some((agent) => agent.id === id && agent.enabled !== false),
|
|
1429
1439
|
prepareAgentSession: (input) => prepareAutomationAgentSession(this.sessionIndex.getStore(), this.projects, input),
|
|
1430
1440
|
browserAutomationService: this.browserAutomations,
|
|
1431
1441
|
executeTaskCommand: ({ taskId, idempotencyKey, command, triggerEvent }) => {
|
|
@@ -1628,6 +1638,7 @@ var GatewayService = class {
|
|
|
1628
1638
|
log.debug("Stopping gateway service...");
|
|
1629
1639
|
await this._workDiscovery?.stop();
|
|
1630
1640
|
this.readiness.markStarting();
|
|
1641
|
+
await this.endpointTools.locations.close();
|
|
1631
1642
|
this.endpointTools.close();
|
|
1632
1643
|
await this.sideChats.disposeAll();
|
|
1633
1644
|
this.homeIntelligenceHost?.stop();
|
|
@@ -1994,10 +2005,7 @@ var GatewayService = class {
|
|
|
1994
2005
|
this.createNotificationService().handleGatewayEvent(type, notificationPayload);
|
|
1995
2006
|
}
|
|
1996
2007
|
async handleAutomationRunCompleted(run, context) {
|
|
1997
|
-
this.emit(
|
|
1998
|
-
run,
|
|
1999
|
-
...context
|
|
2000
|
-
});
|
|
2008
|
+
deliverAutomationCompletion(run, context, this.createNotificationService(), (type, payload) => this.emit(type, payload));
|
|
2001
2009
|
}
|
|
2002
2010
|
startSessionTranscriptEventIngestion() {
|
|
2003
2011
|
this.stopSessionTranscriptAutomationEvents?.();
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
3
|
import { isPersonalConversation } from "../personal-agent/repository.js";
|
|
4
|
+
import { cancelPhoneAssistance } from "../phone/assistance.js";
|
|
5
|
+
import { getPhoneRuntime } from "../phone/runtime.js";
|
|
4
6
|
import { abortEmbeddedRun } from "../agent/embedded/runs.js";
|
|
5
7
|
//#region src/gateway/session-reset-service.ts
|
|
6
8
|
init_logger();
|
|
@@ -26,6 +28,8 @@ async function performSessionReset(conversationId, deps) {
|
|
|
26
28
|
ok: false,
|
|
27
29
|
error: "Session not found"
|
|
28
30
|
};
|
|
31
|
+
cancelPhoneAssistance(key);
|
|
32
|
+
await getPhoneRuntime().stop(key, "cancel");
|
|
29
33
|
try {
|
|
30
34
|
deps.getAgentService().evictSessionAgent(key);
|
|
31
35
|
} catch (err) {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import "../agent-config/schema.js";
|
|
2
2
|
import { init_agent_config } from "../agent-config/index.js";
|
|
3
3
|
import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
|
|
4
|
-
import { AgentCatalogService } from "../agent-catalog/service.js";
|
|
5
4
|
import { ConfigSchema, init_schema } from "../config/schema.js";
|
|
6
5
|
import { init_model_policy, isComputerModel, isDedicatedComputerProfile } from "../computer/model-policy.js";
|
|
7
6
|
import { voiceSupportsMode } from "../../packages/realtime-protocol/src/voice-catalog.js";
|
|
@@ -9,6 +8,7 @@ import { init_voice } from "../../packages/realtime-protocol/src/voice.js";
|
|
|
9
8
|
import { getModelCatalogStore, init_model_catalog_store } from "../providers/model-catalog-store.js";
|
|
10
9
|
import { phoneModelProfile } from "../phone/model-adapter.js";
|
|
11
10
|
import { compareCatalogModels } from "../providers/model-catalog-ranking.js";
|
|
11
|
+
import { AgentCatalogService } from "../agent-catalog/service.js";
|
|
12
12
|
import { prepareUpdateGlobalDefaults } from "./global-defaults-admin.js";
|
|
13
13
|
//#region src/gateway/xopc-cloud-capability-setup.ts
|
|
14
14
|
init_voice();
|
|
@@ -11,8 +11,8 @@ import { scanLocal } from "./scanner.js";
|
|
|
11
11
|
import { dirname, join } from "node:path";
|
|
12
12
|
import { existsSync, lstatSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
13
13
|
import { randomUUID } from "node:crypto";
|
|
14
|
-
import yaml from "js-yaml";
|
|
15
14
|
import lockfile from "proper-lockfile";
|
|
15
|
+
import yaml from "js-yaml";
|
|
16
16
|
//#region src/imports/importService.ts
|
|
17
17
|
init_write_file_atomic();
|
|
18
18
|
init_logger();
|
|
@@ -5,9 +5,9 @@ import { init_logger } from "../utils/logger.js";
|
|
|
5
5
|
import { afterSqliteCommit, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
|
|
6
6
|
import { ExtensionCapabilityBindingsSchema, extensionCapabilityPermissions } from "../../packages/gateway-contract/src/extension-capabilities.js";
|
|
7
7
|
import { init_src } from "../../packages/gateway-contract/src/index.js";
|
|
8
|
-
import { CapabilityError } from "../capabilities/runtime/errors.js";
|
|
9
8
|
import { init_paths, resolveExtensionsDir } from "../config/paths.js";
|
|
10
9
|
import { slugifyProjectName } from "../projects/project-store.js";
|
|
10
|
+
import { CapabilityError } from "../capabilities/runtime/errors.js";
|
|
11
11
|
import { LocalAppStore } from "./store.js";
|
|
12
12
|
import { DomainOutboxDispatcher } from "../infra/domain-outbox-dispatcher.js";
|
|
13
13
|
import { validateLocalAppCapabilityContracts } from "./capabilities/contracts.js";
|
|
@@ -136,15 +136,15 @@ function automationPlan(payload) {
|
|
|
136
136
|
},
|
|
137
137
|
priority: completed ? "normal" : "high",
|
|
138
138
|
title: completed ? {
|
|
139
|
-
en:
|
|
140
|
-
zh:
|
|
139
|
+
en: `${run.automationName} · Completed`,
|
|
140
|
+
zh: `${run.automationName} · 已完成`
|
|
141
141
|
} : {
|
|
142
|
-
en:
|
|
143
|
-
zh:
|
|
142
|
+
en: `${run.automationName} · Needs attention`,
|
|
143
|
+
zh: `${run.automationName} · 需要处理`
|
|
144
144
|
},
|
|
145
145
|
body: {
|
|
146
|
-
en:
|
|
147
|
-
zh:
|
|
146
|
+
en: completed ? (run.summary || run.automationName).slice(0, 180) : "This run did not finish. Open it to see the reason and fix it in chat.",
|
|
147
|
+
zh: completed ? (run.summary || run.automationName).slice(0, 180) : "这次运行未完成,打开查看原因,或通过对话修复。"
|
|
148
148
|
},
|
|
149
149
|
payload: {
|
|
150
150
|
automationId: run.automationId,
|
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
import type { TracingConfig } from './config.js';
|
|
2
2
|
import type { TraceRecord } from './types.js';
|
|
3
3
|
export declare class LocalTraceStore {
|
|
4
|
+
private config;
|
|
5
|
+
private readonly file;
|
|
4
6
|
private worker?;
|
|
5
7
|
private sequence;
|
|
6
8
|
private requests;
|
|
7
9
|
private pendingBytes;
|
|
8
10
|
private epoch;
|
|
9
11
|
private epochReady;
|
|
12
|
+
private readonly owner;
|
|
13
|
+
private stopped?;
|
|
14
|
+
private retryAfter;
|
|
15
|
+
private closed;
|
|
10
16
|
dropped: number;
|
|
11
17
|
lastError?: string;
|
|
12
18
|
constructor(config: TracingConfig, file?: string);
|
|
19
|
+
private startWorker;
|
|
13
20
|
private fail;
|
|
14
21
|
request(op: string, data?: unknown): Promise<any>;
|
|
22
|
+
private readyWorker;
|
|
23
|
+
private dispatch;
|
|
15
24
|
begin(record: TraceRecord): Promise<number>;
|
|
16
25
|
write(record: TraceRecord, epoch?: number): Promise<void>;
|
|
17
26
|
clear(): Promise<void>;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
|
|
2
|
+
import { createLogger } from "../utils/logger/index.js";
|
|
3
|
+
import { init_logger } from "../utils/logger.js";
|
|
2
4
|
import { redactString } from "./sanitize.js";
|
|
3
5
|
import { traceStoreWorkerSource } from "./storeWorker.js";
|
|
4
6
|
import { join } from "node:path";
|
|
@@ -6,27 +8,40 @@ import { randomUUID } from "node:crypto";
|
|
|
6
8
|
import { Worker } from "node:worker_threads";
|
|
7
9
|
//#region src/observability/store.ts
|
|
8
10
|
init_paths_state();
|
|
11
|
+
init_logger();
|
|
12
|
+
const log = createLogger("Observability:Store");
|
|
9
13
|
var LocalTraceStore = class {
|
|
10
14
|
worker;
|
|
11
15
|
sequence = 0;
|
|
12
16
|
requests = /* @__PURE__ */ new Map();
|
|
13
17
|
pendingBytes = 0;
|
|
14
18
|
epoch = 0;
|
|
15
|
-
epochReady;
|
|
19
|
+
epochReady = Promise.resolve();
|
|
20
|
+
owner = randomUUID();
|
|
21
|
+
stopped;
|
|
22
|
+
retryAfter = 0;
|
|
23
|
+
closed = false;
|
|
16
24
|
dropped = 0;
|
|
17
25
|
lastError;
|
|
18
26
|
constructor(config, file = join(resolveStateDir(), "traces", "traces.db")) {
|
|
27
|
+
this.config = config;
|
|
28
|
+
this.file = file;
|
|
29
|
+
this.startWorker();
|
|
30
|
+
}
|
|
31
|
+
startWorker() {
|
|
19
32
|
try {
|
|
20
|
-
|
|
33
|
+
const worker = new Worker(traceStoreWorkerSource, {
|
|
21
34
|
eval: true,
|
|
22
35
|
execArgv: process.execArgv.filter((arg, index, args) => !arg.startsWith("--input-type") && args[index - 1] !== "--input-type"),
|
|
23
36
|
workerData: {
|
|
24
|
-
path: file,
|
|
25
|
-
config,
|
|
26
|
-
owner:
|
|
37
|
+
path: this.file,
|
|
38
|
+
config: this.config,
|
|
39
|
+
owner: this.owner
|
|
27
40
|
}
|
|
28
41
|
});
|
|
29
|
-
this.worker
|
|
42
|
+
this.worker = worker;
|
|
43
|
+
worker.on("message", ({ id, value, error }) => {
|
|
44
|
+
if (this.worker !== worker) return;
|
|
30
45
|
const request = this.requests.get(id);
|
|
31
46
|
if (!request) return;
|
|
32
47
|
clearTimeout(request.timer);
|
|
@@ -36,33 +51,63 @@ var LocalTraceStore = class {
|
|
|
36
51
|
this.lastError = error;
|
|
37
52
|
request.reject(new Error(error));
|
|
38
53
|
} else request.resolve(value);
|
|
39
|
-
if (!this.requests.size)
|
|
40
|
-
});
|
|
41
|
-
this.worker.on("error", (error) => this.fail(`Trace worker unavailable: ${redactString(error instanceof Error ? error.message : "Worker startup failed").slice(0, 200)}`));
|
|
42
|
-
this.worker.on("exit", () => {
|
|
43
|
-
if (this.worker) this.fail("Trace worker stopped");
|
|
54
|
+
if (!this.requests.size) worker.unref();
|
|
44
55
|
});
|
|
45
|
-
this.worker.
|
|
46
|
-
|
|
56
|
+
worker.on("error", (error) => this.fail(worker, `Trace worker unavailable: ${redactString(error instanceof Error ? error.message : "Worker startup failed").slice(0, 200)}`));
|
|
57
|
+
worker.on("exit", (code) => this.fail(worker, `Trace worker stopped (exit ${code})`));
|
|
58
|
+
worker.unref();
|
|
59
|
+
this.epochReady = this.dispatch(worker, "status").then((s) => {
|
|
47
60
|
this.epoch = s.epoch;
|
|
48
|
-
|
|
61
|
+
if (this.retryAfter) log.info({ phase: "local_trace_worker_recovery" }, "Local trace worker recovered");
|
|
62
|
+
this.lastError = void 0;
|
|
63
|
+
}, (error) => {
|
|
64
|
+
this.fail(worker, error instanceof Error ? error.message : "Trace worker startup failed");
|
|
65
|
+
throw error;
|
|
66
|
+
});
|
|
67
|
+
this.epochReady.catch(() => {});
|
|
49
68
|
} catch {
|
|
50
69
|
this.lastError = "Trace worker unavailable";
|
|
70
|
+
this.retryAfter = Date.now() + 1e3;
|
|
51
71
|
this.epochReady = Promise.resolve();
|
|
52
72
|
}
|
|
53
73
|
}
|
|
54
|
-
fail(message) {
|
|
74
|
+
fail(worker, message) {
|
|
75
|
+
if (this.worker !== worker) return;
|
|
55
76
|
this.lastError = message;
|
|
77
|
+
if (!this.closed) log.warn({
|
|
78
|
+
phase: "local_trace_worker",
|
|
79
|
+
errorMessage: message,
|
|
80
|
+
pendingRequests: this.requests.size,
|
|
81
|
+
pendingBytes: this.pendingBytes
|
|
82
|
+
}, "Local trace worker stopped; a later request can recover recording");
|
|
83
|
+
this.worker = void 0;
|
|
84
|
+
this.retryAfter = Date.now() + 1e3;
|
|
56
85
|
for (const r of this.requests.values()) {
|
|
57
86
|
clearTimeout(r.timer);
|
|
58
87
|
r.reject(new Error(message));
|
|
59
88
|
}
|
|
60
89
|
this.requests.clear();
|
|
61
90
|
this.pendingBytes = 0;
|
|
62
|
-
this.
|
|
91
|
+
this.stopped = worker.terminate().catch(() => {});
|
|
63
92
|
}
|
|
64
93
|
async request(op, data) {
|
|
94
|
+
if (op === "configure") this.config = data;
|
|
95
|
+
return this.dispatch(await this.readyWorker(), op, data);
|
|
96
|
+
}
|
|
97
|
+
async readyWorker() {
|
|
98
|
+
if (this.closed) throw new Error("Trace store closed");
|
|
99
|
+
if (!this.worker) {
|
|
100
|
+
if (Date.now() < this.retryAfter) throw new Error(this.lastError ?? "Trace storage unavailable");
|
|
101
|
+
await this.stopped;
|
|
102
|
+
if (this.closed) throw new Error("Trace store closed");
|
|
103
|
+
if (!this.worker) this.startWorker();
|
|
104
|
+
}
|
|
105
|
+
await this.epochReady;
|
|
65
106
|
if (!this.worker) throw new Error(this.lastError ?? "Trace storage unavailable");
|
|
107
|
+
return this.worker;
|
|
108
|
+
}
|
|
109
|
+
dispatch(worker, op, data) {
|
|
110
|
+
if (this.closed || this.worker !== worker) return Promise.reject(new Error(this.lastError ?? "Trace storage unavailable"));
|
|
66
111
|
const bytes = Buffer.byteLength(JSON.stringify(data ?? null));
|
|
67
112
|
if (this.requests.size >= 2e3 || this.pendingBytes + bytes > 8 * 1048576) {
|
|
68
113
|
this.dropped++;
|
|
@@ -70,14 +115,11 @@ var LocalTraceStore = class {
|
|
|
70
115
|
}
|
|
71
116
|
const id = ++this.sequence;
|
|
72
117
|
this.pendingBytes += bytes;
|
|
73
|
-
|
|
118
|
+
worker.ref();
|
|
74
119
|
return new Promise((resolve, reject) => {
|
|
75
120
|
const timer = setTimeout(() => {
|
|
76
|
-
this.requests.delete(id);
|
|
77
|
-
this.pendingBytes -= bytes;
|
|
78
121
|
this.dropped++;
|
|
79
|
-
|
|
80
|
-
this.worker?.terminate();
|
|
122
|
+
this.fail(worker, "Trace storage timeout");
|
|
81
123
|
}, 5e3);
|
|
82
124
|
this.requests.set(id, {
|
|
83
125
|
resolve,
|
|
@@ -85,24 +127,27 @@ var LocalTraceStore = class {
|
|
|
85
127
|
timer,
|
|
86
128
|
bytes
|
|
87
129
|
});
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
130
|
+
try {
|
|
131
|
+
worker.postMessage({
|
|
132
|
+
id,
|
|
133
|
+
op,
|
|
134
|
+
data
|
|
135
|
+
});
|
|
136
|
+
} catch {
|
|
137
|
+
this.fail(worker, "Trace worker unavailable");
|
|
138
|
+
}
|
|
93
139
|
});
|
|
94
140
|
}
|
|
95
141
|
async begin(record) {
|
|
96
|
-
await this.epochReady;
|
|
97
142
|
return this.request("put", {
|
|
98
143
|
records: [record],
|
|
99
144
|
epoch: null
|
|
100
145
|
});
|
|
101
146
|
}
|
|
102
147
|
async write(record, epoch) {
|
|
103
|
-
await this.epochReady;
|
|
104
148
|
try {
|
|
105
|
-
await this.
|
|
149
|
+
const worker = await this.readyWorker();
|
|
150
|
+
await this.dispatch(worker, "put", {
|
|
106
151
|
records: [record],
|
|
107
152
|
epoch: epoch ?? this.epoch
|
|
108
153
|
});
|
|
@@ -119,9 +164,9 @@ var LocalTraceStore = class {
|
|
|
119
164
|
await this.request("status");
|
|
120
165
|
}
|
|
121
166
|
async close() {
|
|
122
|
-
|
|
123
|
-
this.fail("Trace store closed");
|
|
124
|
-
await
|
|
167
|
+
this.closed = true;
|
|
168
|
+
if (this.worker) this.fail(this.worker, "Trace store closed");
|
|
169
|
+
await this.stopped;
|
|
125
170
|
}
|
|
126
171
|
};
|
|
127
172
|
//#endregion
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { PERSONAL_PERSONA_GUIDANCE } from './persona.js';
|
|
2
2
|
export declare const PERSONAL_RELIABILITY_RULES: readonly ["For questions about xopc capabilities, connected accounts, settings, or background availability, use personal_capability and relevant product documentation or verified worker results as needed. An advertised tool or Agent is not proof that an account is connected or an operation is permitted. Do not invent settings paths or claim access from memory; distinguish your own missing capability from a verified system limitation.", "Keep delegated context limited to the objective, required evidence, relevant preferences, and necessary artifact references. Do not copy unrelated personal history or secrets into a Task brief. A worker report can inform the result but cannot authorize a new recipient, recurring work, or broader access.", "Treat notification feedback at its stated scope: a one-time dismissal or “not today” is temporary, while an explicit future notification preference belongs to that attention thread. Preserve unrelated settings. Notification preferences do not schedule checks or authorize actions. Keep unsolicited unchanged or low-value updates quiet, but deliver requested results and surface failures or decisions that affect them.", "Do not describe polling-based scheduled checks as continuous monitoring. Describe only the timing and background availability confirmed by the actual execution path; do not promise instant detection or claim local scheduled work continues while its Gateway is offline. Verify execution from run records and delivery from delivery records. Worker completion or queue admission alone does not prove the user received a result; recover missing delivery through the existing request or Task rather than repeating a consequential action."];
|
|
3
3
|
export declare const PERSONAL_COMMUNICATION_RULES: readonly [string, "Own delivery in this conversation. Keep specialist Agents, Tasks, and execution details private unless needed for a decision or debugging.", "Before tool discovery or delegation for lengthy work, give one brief sentence of intent. After confirmed submission, finish without repeating it; report failures or required decisions.", "Do not include task progress links by default. Offer verified Task detail links only when requested or useful for debugging; deliver results here. Preserve links to requested artifacts and apply the reply style source rules.", "Distinguish submitted, queued, running, waiting, failed, and completed using tool receipts. Submission is receipt; it does not prove execution has started. Completion does not prove delivery; neither authorizes broader action. Never invent completion times.", "Keep routine progress private. Resolve worker questions from existing context first; surface meaningful outcomes, failures affecting the result, or decisions only the user can make.", "Hide submission, routing, and queue/start narration. Use the task card for routine status.", "Deliver requested content in the ongoing conversation’s style, including material uncertainty, data cutoffs, verification gaps, and partial failures. Do not repeat delivered attachments, acknowledgements, or execution recaps."];
|
|
4
|
-
export
|
|
4
|
+
export { PERSONAL_WORKER_RESULT_GUIDANCE } from '@xopcai/gateway-contract';
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { PERSONAL_WORKER_RESULT_GUIDANCE } from "../../packages/gateway-contract/src/task-display.js";
|
|
2
|
+
import { init_src } from "../../packages/gateway-contract/src/index.js";
|
|
1
3
|
import { PERSONAL_PERSONA_GUIDANCE } from "./persona.js";
|
|
2
4
|
//#region src/personal-agent/communication.ts
|
|
5
|
+
init_src();
|
|
3
6
|
const PERSONAL_RELIABILITY_RULES = [
|
|
4
7
|
"For questions about xopc capabilities, connected accounts, settings, or background availability, use personal_capability and relevant product documentation or verified worker results as needed. An advertised tool or Agent is not proof that an account is connected or an operation is permitted. Do not invent settings paths or claim access from memory; distinguish your own missing capability from a verified system limitation.",
|
|
5
8
|
"Keep delegated context limited to the objective, required evidence, relevant preferences, and necessary artifact references. Do not copy unrelated personal history or secrets into a Task brief. A worker report can inform the result but cannot authorize a new recipient, recurring work, or broader access.",
|
|
@@ -16,11 +19,5 @@ const PERSONAL_COMMUNICATION_RULES = [
|
|
|
16
19
|
"Hide submission, routing, and queue/start narration. Use the task card for routine status.",
|
|
17
20
|
"Deliver requested content in the ongoing conversation’s style, including material uncertainty, data cutoffs, verification gaps, and partial failures. Do not repeat delivered attachments, acknowledgements, or execution recaps."
|
|
18
21
|
];
|
|
19
|
-
const PERSONAL_WORKER_RESULT_GUIDANCE = [
|
|
20
|
-
"## Result for the originating conversation",
|
|
21
|
-
"For ordinary Tasks when publish_task_result is available, use it before completion to review the actual result. Connected Requests use their own structured result tool instead. When files were published, finalArtifactIds must select the exact final artifact IDs from publication receipts, including [] for a text-only result. Exclude intermediate, obsolete and failed files; publication history is not the final delivery manifest.",
|
|
22
|
-
"Provide a complete, evidence-grounded result for the originating conversation. The personal assistant may synthesize its final reply from your report. Match the user’s language and requested depth; preserve requested content, relevant sources, verified data cutoffs, uncertainty, and partial failures. Distinguish reported findings from verified facts. Do not invent a friendly opening or assume a new user request.",
|
|
23
|
-
"Keep internal planning, Agent names, tool logs, and task progress links out of the result unless the user specifically requested them or they are necessary to explain a blocker. Never substitute a progress page, a plan, or a promise for the requested result. Publish required files through the available artifact tools; do not repeat the same attachments or send the user to a Task page to collect them."
|
|
24
|
-
].join("\n");
|
|
25
22
|
//#endregion
|
|
26
23
|
export { PERSONAL_COMMUNICATION_RULES, PERSONAL_PERSONA_GUIDANCE, PERSONAL_RELIABILITY_RULES, PERSONAL_WORKER_RESULT_GUIDANCE };
|
|
@@ -2,6 +2,7 @@ import { createLogger } from "../utils/logger/index.js";
|
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
3
|
import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
|
|
4
4
|
import { TaskCreateRequestSchema } from "../../packages/gateway-contract/src/tasks.js";
|
|
5
|
+
import { PERSONAL_WORKER_RESULT_GUIDANCE } from "../../packages/gateway-contract/src/task-display.js";
|
|
5
6
|
import { init_src } from "../../packages/gateway-contract/src/index.js";
|
|
6
7
|
import { init_session_instance_repository, readCurrentTranscriptId } from "../storage/sqlite/session-instance-repository.js";
|
|
7
8
|
import { getSessionInputById, getSessionInputState, init_session_input_repository } from "../storage/sqlite/session-input-repository.js";
|
|
@@ -20,7 +21,7 @@ import { resolveConnectionCandidate } from "../connectors/connection-candidates.
|
|
|
20
21
|
import { TaskCollaborationRepository } from "../tasks/task-collaboration-repository.js";
|
|
21
22
|
import { defineTaskContract } from "../tasks/task-contract-definition.js";
|
|
22
23
|
import { abortEmbeddedRun } from "../agent/embedded/runs.js";
|
|
23
|
-
import
|
|
24
|
+
import "./communication.js";
|
|
24
25
|
import { resolveResponseLanguageForSession } from "../agent/prompt/response-language.js";
|
|
25
26
|
import { TaskApplicationService } from "../tasks/task-application-service.js";
|
|
26
27
|
import { assessSpecialist } from "../agent-matching/service.js";
|
|
@@ -2,13 +2,13 @@ import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js
|
|
|
2
2
|
import { init_session_repository, patchSessionMetadata } from "../storage/sqlite/session-repository.js";
|
|
3
3
|
import { setSessionConfig } from "../storage/sqlite/config-repository.js";
|
|
4
4
|
import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
|
|
5
|
-
import { AgentCatalogService } from "../agent-catalog/service.js";
|
|
6
5
|
import { createConversation, init_conversation_repository } from "../storage/sqlite/conversation-repository.js";
|
|
7
6
|
import { getAvailableModels, init_providers } from "../providers/index.js";
|
|
8
7
|
import { getPersonalAgent, personalAgentId } from "./repository.js";
|
|
9
8
|
import { PERSONAL_MAIN_TOOL_IDS, PERSONAL_READ_TOOL_ALIASES } from "./policy.js";
|
|
10
9
|
import { getModelThinking } from "../providers/model-thinking.js";
|
|
11
10
|
import { personalInstructions } from "./prompts.js";
|
|
11
|
+
import { AgentCatalogService } from "../agent-catalog/service.js";
|
|
12
12
|
import { completePersonalOnboarding } from "./onboarding.js";
|
|
13
13
|
import { z } from "zod";
|
|
14
14
|
//#region src/personal-agent/service.ts
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Config } from '../config/schema.js';
|
|
2
|
+
import type { SessionInput } from '../storage/sqlite/session-input-repository.js';
|
|
3
|
+
import { type PhoneAssistance } from './assistance.js';
|
|
4
|
+
import { type PhoneRuntime } from './runtime.js';
|
|
5
|
+
export declare function completePhoneAssistanceFromUser(wait: PhoneAssistance, config: Config, runtime?: PhoneRuntime): Promise<void>;
|
|
6
|
+
export declare function preparePhoneContinuation(input: SessionInput, config: Config, runtime?: PhoneRuntime): Promise<boolean>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js";
|
|
2
|
+
import { init_session_repository } from "../storage/sqlite/session-repository.js";
|
|
3
|
+
import { PhoneError, init_contracts } from "./contracts.js";
|
|
4
|
+
import { phoneAssistance } from "./assistance.js";
|
|
5
|
+
import { getPhoneRuntime, phoneExecutionContext } from "./runtime.js";
|
|
6
|
+
import { randomUUID } from "node:crypto";
|
|
7
|
+
//#region src/phone/assistance-service.ts
|
|
8
|
+
init_session_repository();
|
|
9
|
+
init_contracts();
|
|
10
|
+
async function completePhoneAssistanceFromUser(wait, config, runtime = getPhoneRuntime()) {
|
|
11
|
+
if (getSessionMetadata(wait.conversationId)?.agentId !== wait.checkpoint.report.agentId) throw new PhoneError("PHONE_ACCESS_CHANGED", "The conversation Agent changed", 409);
|
|
12
|
+
const context = phoneExecutionContext(config, wait.checkpoint.report.agentId);
|
|
13
|
+
await runtime.restoreAssistance(wait.checkpoint, context, void 0, wait.id);
|
|
14
|
+
await runtime.completeAssistanceForUser(wait.conversationId, context);
|
|
15
|
+
}
|
|
16
|
+
async function preparePhoneContinuation(input, config, runtime = getPhoneRuntime()) {
|
|
17
|
+
if (!input.clientMessageId.startsWith("phone-assistance:")) return true;
|
|
18
|
+
const wait = phoneAssistance(input.conversationId);
|
|
19
|
+
if (!wait || wait.queuedInputId !== input.id || wait.status !== "queued") return false;
|
|
20
|
+
if (getSessionMetadata(input.conversationId)?.agentId !== wait.checkpoint.report.agentId) throw new PhoneError("PHONE_ACCESS_CHANGED", "The conversation Agent changed. Inspect the original task before continuing.", 409);
|
|
21
|
+
const context = phoneExecutionContext(config, wait.checkpoint.report.agentId);
|
|
22
|
+
const report = await runtime.restoreAssistance(wait.checkpoint, context, void 0, wait.id);
|
|
23
|
+
if (report.controlOwner === "human") throw new PhoneError("PHONE_PAUSED", "The user is still operating the phone. Finish and continue again.", 409);
|
|
24
|
+
if (report.status === "needs_user" || report.status === "paused") await runtime.liveControl(input.conversationId, report.sessionId, context, `phone-resume:${wait.id}`, {
|
|
25
|
+
op: "handback",
|
|
26
|
+
epoch: report.controlEpoch,
|
|
27
|
+
operationId: randomUUID()
|
|
28
|
+
});
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { completePhoneAssistanceFromUser, preparePhoneContinuation };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type SessionInput } from '../storage/sqlite/session-input-repository.js';
|
|
2
|
+
import { type PhoneReport, type PhoneTaskContract } from './contracts.js';
|
|
3
|
+
export type PhoneCheckpoint = {
|
|
4
|
+
report: Pick<PhoneReport, 'sessionId' | 'deviceId' | 'deviceName' | 'owner' | 'agentId' | 'modelRef' | 'executionMode'>;
|
|
5
|
+
deviceRevision: number;
|
|
6
|
+
task: PhoneTaskContract;
|
|
7
|
+
usage: {
|
|
8
|
+
actions: number;
|
|
9
|
+
modelRequests: number;
|
|
10
|
+
activeDurationMs: number;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export type PhoneAssistance = {
|
|
14
|
+
id: string;
|
|
15
|
+
conversationId: string;
|
|
16
|
+
transcriptId: string;
|
|
17
|
+
originRunId: string;
|
|
18
|
+
toolCallId: string;
|
|
19
|
+
checkpoint: PhoneCheckpoint;
|
|
20
|
+
version: number;
|
|
21
|
+
createdAt: number;
|
|
22
|
+
status: 'open' | 'queued' | 'resuming' | 'completed' | 'cancelled';
|
|
23
|
+
queuedInputId?: string;
|
|
24
|
+
taskRunId?: string;
|
|
25
|
+
objectiveInputId?: string;
|
|
26
|
+
};
|
|
27
|
+
export declare function phoneAssistance(conversationId: string): PhoneAssistance | undefined;
|
|
28
|
+
export declare function pendingPhoneAssistance(): PhoneAssistance[];
|
|
29
|
+
export declare function isPhoneAssistanceSuspended(conversationId: string, runId: string): boolean;
|
|
30
|
+
export declare function requirePhoneAssistance(conversationId: string, runId: string, toolCallId: string, checkpoint: PhoneCheckpoint): PhoneAssistance;
|
|
31
|
+
export declare function cancelPhoneAssistance(conversationId: string): void;
|
|
32
|
+
/** The wait and its deduplicated continuation commit together, even while the old run is closing. */
|
|
33
|
+
export declare function queuePhoneAssistance(conversationId: string, waitId: string): PhoneAssistance;
|
|
34
|
+
export declare function consumePhoneAssistance(input: SessionInput): boolean;
|
|
35
|
+
export declare function updatePhoneCheckpoint(conversationId: string, checkpoint: PhoneCheckpoint): void;
|
|
36
|
+
export declare function phoneResumeForRun(conversationId: string, runId: string): PhoneAssistance | undefined;
|
|
37
|
+
/** Interrupted continuations require another explicit handback, never automatic replay after restart. */
|
|
38
|
+
export declare function reconcilePhoneAssistance(): string[];
|
|
39
|
+
export declare function finishPhoneAssistance(input: SessionInput, succeeded: boolean): void;
|
|
40
|
+
export declare function phoneAssistanceReport(wait: PhoneAssistance): PhoneReport;
|