@xopcai/xopc 0.0.383 → 0.0.385
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/manifest.json +1 -1
- package/dist/extensions/feishu/src/adapters/cli-login.js +3 -3
- package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
- package/dist/extensions/telegram/src/inbound-processor.js +2 -2
- package/dist/extensions/telegram/src/outbound-sender.js +1 -1
- package/dist/extensions/telegram/src/plugin.js +2 -2
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +2 -2
- package/dist/extensions/weixin/src/auth/accounts.js +12 -12
- package/dist/extensions/weixin/src/messaging/debug-mode.js +5 -5
- package/dist/extensions/weixin/src/messaging/inbound.js +11 -11
- package/dist/gateway/static/root/assets/{activity-store-qv0XyrXk.js → activity-store-CB2X4Gmu.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-66HwhyEK.js → agent-avatar-dicebear-Cb9eaXxR.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DEV-xtgm.js +1 -0
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-CebTVaRM.js → agent-plugin-dialog-DXKc3Luj.js} +1 -1
- package/dist/gateway/static/root/assets/agents-DcNxwpJQ.js +77 -0
- package/dist/gateway/static/root/assets/{agents-admin-api-BGy9IvSr.js → agents-admin-api-BkULgC6Q.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-BKaU6sGT.js → app-management-settings-panel-X5i0Tz7_.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-E5WFcCdZ.js → appearance-settings-CmHHzquT.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-CExfOhRj.js → apps-page-ChFA4Zp0.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-BvhxzyLJ.js → archive-plugin-De0ND0oA.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-CWcNFzvK.js → automations-page-BFqsIqOI.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-Blfak-fT.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-CD0gYKR2.js → binary-plugins-Do535ZGW.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CBVXeGAt.js → block-editor-CpOLG3Co.js} +2 -2
- package/dist/gateway/static/root/assets/{browser-automation-inputs-B-Qz_411.js → browser-automation-inputs-B9M1RYTm.js} +1 -1
- package/dist/gateway/static/root/assets/browser-automations-page-BSbTJ9j2.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-BUlILJrB.js +3 -0
- package/dist/gateway/static/root/assets/{capabilities-w2GUuF7V.js → capabilities-2Do3eKMM.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-CaL5RDm3.js → capabilities-XFwwUNU3.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-page-CeRdkwRf.js +2 -0
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-CIvwbZps.js → capabilities-settings-panel-S-cKsGja.js} +6 -6
- package/dist/gateway/static/root/assets/{capability-header-actions-DKaZAOWW.js → capability-header-actions-6w8pQhnn.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-D82wgP8A.js → channels-DfNTGBmp.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-DuqWzcEq.js → chat-terminal-dock-DnoQHpDc.js} +2 -2
- package/dist/gateway/static/root/assets/{computer-settings-page-BiM0fCvO.js → computer-settings-page-7yliE7sG.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-o8kuXjVt.js → connector-service-page-DOLAUFSW.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-DAsn97XG.js +1 -0
- package/dist/gateway/static/root/assets/{date-picker-5tzjG3n1.js → date-picker-DNDqr4Fk.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-DLcDUyep.js → dependency-picker-B5oG7RgE.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-D-w8487x.js → desktop-pet-K7kUCX1O.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-D-w7uF8Q.js → desktop-pet-settings-KgOAuqSh.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-DvqniZDm.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-B7d2s14w.js → directory-picker-path-field-BmOguLDl.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-sntm2YRN.js → extension-debug-page-DtHNy4TE.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CPbWA4Oy.js → extension-page-DSSuMQxp.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-CnDGKMN6.js → extension-provider-nbgU7xBS.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-PAHKn-Az.js → extension-settings-page-DSd__mNd.js} +1 -1
- package/dist/gateway/static/root/assets/{fallback-models-BJaSQNiV.js → fallback-models-D7bjbiwZ.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-DIhXgHH-.js → gateway-config-swr-D0tBjSgj.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-BkgWeVUQ.js → gateway-realtime-BnHraJ3O.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-BVriF6Zj.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-hSXGWumL.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DnXc9GNb.js → gateway-startup-retry-C1DQsIH3.js} +1 -1
- package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-Cw_HUlEk.js → highlighted-body-KQOG7T2V-C7xJwE61.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-DJNmlMfH.js +2 -0
- package/dist/gateway/static/root/assets/{image-generation-api-4dtNAW64.js → image-generation-api-DodU6GNC.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-DVvyrYUy.js → imports-page-BufZPzGE.js} +1 -1
- package/dist/gateway/static/root/assets/index-DBRwvWzm.css +1 -0
- package/dist/gateway/static/root/assets/{index-B-wZyMBY.js → index-K8SXDtxr.js} +110 -110
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DywXmCvO.js → keyboard-shortcuts-settings-B8pPP5RF.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-dBlBepLG.js → local-app-workbench-page-zEtvE7pJ.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-DdEXqsZw.js → local-apps-page-Bli7e_eg.js} +1 -1
- package/dist/gateway/static/root/assets/{local-session-drafts-D-_OuGWH.js → local-session-drafts-D_tYFy7d.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-BNDrBt2C.js → locale-store-uRu_DsWm.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-DpSob5Id.js → logs-page-BimZk3R4.js} +2 -2
- package/dist/gateway/static/root/assets/{management-settings-10Vl7gLU.js → management-settings-5Y4COyU9.js} +1 -1
- package/dist/gateway/static/root/assets/markdown-view-Ct4sKkUf.css +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-pEV4TIPK.js → markdown-view-DHfQAvZQ.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DU1Ike3m.js → media-plugins-BombFqsX.js} +1 -1
- package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-DBRj4-1-.js +1 -0
- package/dist/gateway/static/root/assets/messages-DTqbfje6.js +3 -0
- package/dist/gateway/static/root/assets/{models-hub-cache-Lp4PAH-A.js → models-hub-cache-Ct6X5zmB.js} +1 -1
- package/dist/gateway/static/root/assets/note-detail-panel-KLDPLVg7.js +5 -0
- package/dist/gateway/static/root/assets/{notes-api-B_LGV8Lh.js → notes-api-nqN2wKYc.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-DST0oPXD.js +8 -0
- package/dist/gateway/static/root/assets/{page-context-capture-button-DzkU3HrQ.js → page-context-capture-button-Bmed83-6.js} +1 -1
- package/dist/gateway/static/root/assets/page-tabs-HLrKIjXH.js +1 -0
- package/dist/gateway/static/root/assets/personal-page-BG4Ystrm.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-Dbs3Xtis.js → product-open-page-CXkYP9xE.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-x-EvUxt7.js → product-preview-content-DjmupQSq.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-CzBmV0P6.js +1 -0
- package/dist/gateway/static/root/assets/{projects-page-CSahay3I.js → projects-page-DByqe5Em.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-DX5EhiBp.js → registry-api-CYqA7bfl.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-DTjj-odF.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-api-DYeTxrEb.js → runtime-tools-api-zzoxjSuR.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DbuAW7ky.js → runtime-tools-settings-panel-B_ptn3T8.js} +1 -1
- package/dist/gateway/static/root/assets/{scenes-page-DVzrw6Q9.js → scenes-page-wkua4l5y.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-Ch-wK0Os.js → schema-form-VvOSM84Y.js} +1 -1
- package/dist/gateway/static/root/assets/{send-session-input-BKIg9cjN.js → send-session-input-BCAF-Ikt.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-Cf3ACMv7.js → session-api-CzVTrG8n.js} +1 -1
- package/dist/gateway/static/root/assets/{session-manager-Djtcwo3n.js → session-manager-_yy4bxhT.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-D06XwYAT.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-DoAHy1wj.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-D-Uz-C5u.js → settings-page-C-6BJdb1.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-L0JSG0K-.js +1 -0
- package/dist/gateway/static/root/assets/{share-link-dialog-Cke8qSIS.js → share-link-dialog-C47Xgzta.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-CQjfWJVh.js → share-preview-page-nJ2FWAEP.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-CQapohsa.js → shares-api-B0HlMAzi.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-BbgAUM3v.js +1 -0
- package/dist/gateway/static/root/assets/{skill-api-v1XR_zqL.js → skill-api-BFU1tPyw.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-CPW9mIZH.js → skill-reload-api-CEJx5rPd.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-Cu80KslP.js → skills-page-DZw6el4o.js} +1 -1
- package/dist/gateway/static/root/assets/specialists-4bkS5rZ4.js +1 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-CbIHO53w.js → system-settings-panel-DshSGWNg.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-DvRLEt8e.js → task-detail-page-CfZhq4XZ.js} +2 -2
- package/dist/gateway/static/root/assets/{task-expandable-content-CQ9Y17UE.js → task-expandable-content-CF6Bj-Qa.js} +1 -1
- package/dist/gateway/static/root/assets/tasks-DJIeIk9C.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-BNDzgUPq.js → theme-store-BUfzeDvL.js} +1 -1
- package/dist/gateway/static/root/assets/{tracing-settings-page-DbbQg2I5.js → tracing-settings-page-C2q5B3Kp.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-CQXrU_XI.js → tunnel-api-DFDXwWnU.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-BdLt6u0c.js → usage-page-2RJLg54s.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-CFn9aZYy.js → use-autosave-DgbCgsao.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-DXCEME1D.js → use-composer-attachments-BFP3k6oC.js} +1 -1
- package/dist/gateway/static/root/assets/{use-file-preview-expanded-CEB7pfWq.js → use-file-preview-expanded-B1BiTQNS.js} +2 -2
- package/dist/gateway/static/root/assets/user-model-page-y1gjGYPI.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-C9s0iBGA.js → voice-api-key-field-4AIkbm9R.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-BIm_aTqX.js → voice-config-api-Kw1pYlLN.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-C3KsL1Ap.js → work-discovery-overlay-Ch-KfpCF.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CEx_jYPu.js → workflow-run-setup-panel-CTu297Hc.js} +2 -2
- package/dist/gateway/static/root/assets/{workflows-page-BYGPnFEF.js → workflows-page-CRZXG_rm.js} +3 -3
- package/dist/gateway/static/root/assets/{workspace-api-uZFF1SlQ.js → workspace-api-Xr3wz8T3.js} +2 -2
- package/dist/gateway/static/root/assets/{xopc-cloud-account-card-DcPFuTIk.js → xopc-cloud-account-card-hEfjVjnc.js} +1 -1
- package/dist/gateway/static/root/index.html +30 -29
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/index.js +1 -1
- package/dist/packages/gateway-contract/src/task-lifecycle.js +3 -0
- package/dist/packages/gateway-contract/src/tasks.js +41 -10
- package/dist/src/agent/agent-manager.d.ts +6 -0
- package/dist/src/agent/agent-manager.js +18 -15
- package/dist/src/agent/agent-scope.js +2 -2
- package/dist/src/agent/background-review/prompts.js +1 -1
- package/dist/src/agent/background-review/run-background-review.js +10 -10
- package/dist/src/agent/child-agent-factory.js +7 -1
- package/dist/src/agent/coding/repository-instructions.js +1 -1
- package/dist/src/agent/context/coordinator.js +2 -2
- package/dist/src/agent/context/execution-context.js +4 -4
- package/dist/src/agent/context/execution-scope.js +1 -1
- package/dist/src/agent/context/project-context.js +3 -3
- package/dist/src/agent/data-acquisition/service.js +1 -1
- package/dist/src/agent/embedded/codemode-extension.js +1 -1
- package/dist/src/agent/embedded/execution-tool-policy.d.ts +1 -1
- package/dist/src/agent/embedded/execution-tool-policy.js +3 -2
- package/dist/src/agent/embedded/index.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +38 -18
- package/dist/src/agent/embedded/run-turn.js +119 -35
- package/dist/src/agent/embedded/session-runner.js +12 -4
- 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/embedded/types.d.ts +2 -1
- package/dist/src/agent/external-tools/cliProvider.d.ts +1 -0
- package/dist/src/agent/external-tools/cliProvider.js +4 -3
- package/dist/src/agent/external-tools/composio-provider.js +5 -3
- package/dist/src/agent/external-tools/endpoint-provider.js +4 -4
- package/dist/src/agent/external-tools/gateway-tools.js +10 -4
- package/dist/src/agent/external-tools/index.js +1 -1
- package/dist/src/agent/external-tools/service.d.ts +1 -0
- package/dist/src/agent/external-tools/service.js +3 -1
- package/dist/src/agent/external-tools/types.d.ts +4 -0
- package/dist/src/agent/image/generation/openai-images-provider.js +1 -1
- package/dist/src/agent/image/generation/runtime.js +1 -1
- package/dist/src/agent/image/index.js +1 -1
- package/dist/src/agent/image/load-image-media.js +1 -1
- package/dist/src/agent/image/tool-model-config.js +1 -1
- package/dist/src/agent/inbound/attachment-pipeline.js +2 -2
- package/dist/src/agent/inbound/inbound-loop.js +2 -2
- package/dist/src/agent/index.js +3 -3
- package/dist/src/agent/mcp/config.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/index.js +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
- package/dist/src/agent/orchestration/agent-turn-policy.d.ts +1 -0
- package/dist/src/agent/orchestration/delegation-budget.js +2 -1
- package/dist/src/agent/orchestration/llm-turn-retry.d.ts +5 -0
- package/dist/src/agent/orchestration/llm-turn-retry.js +15 -5
- package/dist/src/agent/orchestration/turn-recovery.d.ts +6 -0
- package/dist/src/agent/orchestration/turn-recovery.js +29 -0
- package/dist/src/agent/prompt/response-language.js +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +3 -3
- package/dist/src/agent/sandbox/exec-policy.js +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js +11 -10
- package/dist/src/agent/service/process-direct-streaming.js +12 -6
- package/dist/src/agent/service/webchat-tts.js +2 -2
- package/dist/src/agent/service.d.ts +6 -0
- package/dist/src/agent/service.js +21 -18
- package/dist/src/agent/session/session-config-service.js +2 -2
- package/dist/src/agent/session/session-hydrator.js +1 -1
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/source-context/index.js +2 -2
- package/dist/src/agent/starter-agents.d.ts +1 -0
- package/dist/src/agent/starter-agents.js +12 -0
- package/dist/src/agent/tasks/task-judge-service.js +32 -14
- package/dist/src/agent/tools/create-share-tool.js +3 -3
- package/dist/src/agent/tools/dataBatch.js +1 -1
- package/dist/src/agent/tools/delegate-tool.js +3 -3
- package/dist/src/agent/tools/error-pattern-matcher.js +1 -1
- package/dist/src/agent/tools/exec-command.js +3 -1
- package/dist/src/agent/tools/executor.js +1 -1
- package/dist/src/agent/tools/factory.d.ts +6 -0
- package/dist/src/agent/tools/factory.js +50 -40
- package/dist/src/agent/tools/fetch-text.js +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +3 -3
- package/dist/src/agent/tools/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +8 -7
- package/dist/src/agent/tools/list-dir.js +1 -1
- package/dist/src/agent/tools/personal-attention-tool.d.ts +2 -0
- package/dist/src/agent/tools/personal-attention-tool.js +52 -18
- package/dist/src/agent/tools/personal-read-tool.js +16 -6
- package/dist/src/agent/tools/personal-request-result-tool.js +20 -3
- package/dist/src/agent/tools/personal-request-tool.js +216 -17
- package/dist/src/agent/tools/personal-result-budget.d.ts +2 -0
- package/dist/src/agent/tools/personal-result-budget.js +57 -0
- package/dist/src/agent/tools/personal-task-tool.d.ts +17 -21
- package/dist/src/agent/tools/personal-task-tool.js +356 -24
- package/dist/src/agent/tools/publish-artifacts.js +2 -2
- package/dist/src/agent/tools/read.js +2 -2
- package/dist/src/agent/tools/review-workspace.js +1 -1
- package/dist/src/agent/tools/send-media.js +2 -2
- package/dist/src/agent/tools/skills-tools.js +1 -1
- package/dist/src/agent/tools/task-collaboration-tool.d.ts +16 -0
- package/dist/src/agent/tools/task-collaboration-tool.js +153 -0
- package/dist/src/agent/tools/tts-tool.js +1 -1
- package/dist/src/agent/tools/user-context-tool.js +1 -1
- package/dist/src/agent/tools/write.js +2 -2
- package/dist/src/agent/tools/xopc-use-tool.js +25 -13
- package/dist/src/agent/transcript/index.js +2 -2
- package/dist/src/agent/transcript/transcript-hygiene.js +2 -2
- package/dist/src/agent/workflow/subagent-runner.js +1 -1
- package/dist/src/agent-config/resolver.js +2 -0
- package/dist/src/agent-config/schema.d.ts +8 -0
- package/dist/src/agent-config/schema.js +2 -0
- package/dist/src/agent-matching/delegation-service.js +1 -1
- package/dist/src/agent-matching/selection-repository.d.ts +1 -0
- package/dist/src/agent-matching/selection-repository.js +1 -1
- package/dist/src/agent-matching/service.js +2 -2
- package/dist/src/ai-assist/text-assist.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/automations/capabilities/write.d.ts +4 -0
- package/dist/src/automations/domain/index.js +2 -2
- package/dist/src/automations/domain/validation.d.ts +8 -0
- package/dist/src/automations/draft/automation-draft-service.js +1 -1
- package/dist/src/automations/draft/automation-draft-validator.d.ts +2 -0
- package/dist/src/automations/index.js +4 -4
- package/dist/src/automations/service/automation-service.js +2 -2
- package/dist/src/backup/archive.js +1 -1
- package/dist/src/browser/native-messaging-host.js +1 -1
- package/dist/src/channels/attachments/voice-stt-webchat.js +2 -2
- package/dist/src/channels/index.js +2 -2
- package/dist/src/channels/outbound-sender.js +1 -1
- package/dist/src/channels/pairing/allow-from-file.js +9 -9
- package/dist/src/channels/pairing/pairing-store.js +6 -6
- package/dist/src/chat-commands/agent-edit.js +1 -1
- package/dist/src/chat-commands/builtins/config.js +3 -3
- package/dist/src/chat-commands/builtins/review.js +1 -1
- package/dist/src/chat-commands/builtins/session.js +1 -1
- package/dist/src/chat-commands/builtins/thinking.js +1 -1
- package/dist/src/chat-commands/builtins/tts.js +1 -1
- package/dist/src/chat-commands/builtins/understanding.js +1 -1
- package/dist/src/chat-commands/builtins/workflow.js +1 -1
- package/dist/src/chat-commands/context.js +4 -4
- package/dist/src/chat-commands/index.js +3 -3
- package/dist/src/cli/commands/agent.js +8 -8
- package/dist/src/cli/commands/config.js +1 -1
- package/dist/src/cli/commands/connectors.js +1 -1
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/gateway-health.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/doctor/checks/tool-runtimes.js +1 -1
- package/dist/src/cli/commands/extension-agent-plugin.js +1 -1
- package/dist/src/cli/commands/extension-dev.js +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +3 -3
- package/dist/src/cli/commands/extension.js +4 -4
- package/dist/src/cli/commands/gateway/token.js +1 -1
- package/dist/src/cli/commands/image.js +1 -1
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/commands/mcp.js +1 -1
- package/dist/src/cli/commands/models.js +2 -2
- package/dist/src/cli/commands/onboard/channels/registry.js +1 -1
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/cli/commands/project.js +2 -2
- package/dist/src/cli/commands/runtime.js +1 -1
- package/dist/src/cli/commands/skills.js +2 -2
- package/dist/src/cli/commands/tunnel.js +4 -4
- package/dist/src/cli/extension-cli-register.js +6 -6
- package/dist/src/cli/utils/gateway-client.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +1 -1
- package/dist/src/cli/utils/session.js +1 -1
- package/dist/src/computer/runtime.js +2 -2
- package/dist/src/config/agent-model-intents.js +1 -1
- package/dist/src/config/index.js +5 -5
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/schema.js +5 -5
- package/dist/src/connectors/cli/authorization.js +1 -1
- package/dist/src/connectors/cli/runtime.js +1 -1
- package/dist/src/connectors/composio-sessions.js +1 -1
- package/dist/src/connectors/composio.js +1 -1
- package/dist/src/connectors/connected-source-ingestion.js +4 -4
- package/dist/src/connectors/connected-source-understanding.js +4 -4
- package/dist/src/connectors/connection-recovery-service.d.ts +6 -0
- package/dist/src/connectors/connection-recovery-service.js +157 -38
- package/dist/src/connectors/content-enrichment.js +1 -1
- package/dist/src/connectors/health.js +1 -1
- package/dist/src/connectors/learning-coordinator.js +2 -2
- package/dist/src/discussions/live-worker.js +1 -1
- package/dist/src/discussions/recording.js +1 -1
- package/dist/src/discussions/sealer.js +1 -1
- package/dist/src/endpoint-tools/index.js +1 -1
- package/dist/src/endpoint-tools/runtime.js +2 -2
- package/dist/src/extensions/activation-context.js +3 -3
- package/dist/src/extensions/agent-plugins/source-http-fetch.js +1 -1
- package/dist/src/extensions/api.js +4 -4
- package/dist/src/extensions/bundled-extension-activation.js +1 -1
- package/dist/src/extensions/index.js +3 -3
- package/dist/src/extensions/install.js +1 -1
- package/dist/src/extensions/loader.js +2 -2
- package/dist/src/extensions/sdk/index.js +1 -1
- package/dist/src/extensions/sdk/media.js +1 -1
- package/dist/src/extensions/update.js +1 -1
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/device-routes.js +2 -2
- package/dist/src/gateway/file-path-classifier.js +2 -2
- package/dist/src/gateway/global-defaults-admin.js +1 -1
- package/dist/src/gateway/hono/app.js +3 -3
- package/dist/src/gateway/hono/lib/config-payload.js +3 -3
- package/dist/src/gateway/hono/routes/agents.js +1 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/commands-skills.js +4 -4
- package/dist/src/gateway/hono/routes/config-patch/gateway.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +4 -4
- package/dist/src/gateway/hono/routes/connection-waits.js +3 -1
- package/dist/src/gateway/hono/routes/connectors.js +1 -1
- package/dist/src/gateway/hono/routes/context-sources.js +2 -2
- package/dist/src/gateway/hono/routes/endpoint-tools.js +1 -1
- package/dist/src/gateway/hono/routes/home.js +1 -1
- package/dist/src/gateway/hono/routes/mcp.js +1 -1
- package/dist/src/gateway/hono/routes/media.js +1 -1
- package/dist/src/gateway/hono/routes/memory-learning.js +3 -3
- package/dist/src/gateway/hono/routes/models.js +5 -5
- package/dist/src/gateway/hono/routes/notes.js +1 -1
- package/dist/src/gateway/hono/routes/personal-agent.js +2 -2
- package/dist/src/gateway/hono/routes/projects.js +4 -4
- package/dist/src/gateway/hono/routes/session-command-handler.js +2 -2
- package/dist/src/gateway/hono/routes/session-input-handler.js +4 -4
- package/dist/src/gateway/hono/routes/sessions.js +2 -2
- package/dist/src/gateway/hono/routes/shares.js +3 -3
- package/dist/src/gateway/hono/routes/side-chats.js +1 -1
- package/dist/src/gateway/hono/routes/site-shares.js +1 -1
- package/dist/src/gateway/hono/routes/tasks.js +3 -2
- package/dist/src/gateway/hono/routes/user-model.js +7 -7
- package/dist/src/gateway/hono/routes/voice.js +7 -7
- package/dist/src/gateway/hono/routes/workflows.js +2 -2
- package/dist/src/gateway/image-generation-setup.js +1 -1
- package/dist/src/gateway/index.js +1 -1
- package/dist/src/gateway/lock.js +11 -11
- package/dist/src/gateway/media-access.js +1 -1
- package/dist/src/gateway/mobile-privacy.js +2 -2
- package/dist/src/gateway/ports.js +6 -6
- package/dist/src/gateway/run-loop.js +1 -1
- package/dist/src/gateway/scenes/mailContext.js +1 -1
- package/dist/src/gateway/scenes/slackThreadSource.js +1 -1
- package/dist/src/gateway/server.js +1 -1
- package/dist/src/gateway/service/agent-runner.js +2 -2
- package/dist/src/gateway/service/config-coordinator.js +2 -2
- package/dist/src/gateway/service/marketplace-service.js +1 -1
- package/dist/src/gateway/service/run-gateway-agent.js +12 -8
- package/dist/src/gateway/service/session-command-service.js +1 -1
- package/dist/src/gateway/service/session-input-coordinator.js +4 -2
- package/dist/src/gateway/service.d.ts +1 -0
- package/dist/src/gateway/service.js +62 -48
- package/dist/src/gateway/session-context-summary.js +3 -3
- package/dist/src/gateway/workspace-editor-path.js +2 -2
- package/dist/src/home-intelligence/generator.js +2 -2
- package/dist/src/home-intelligence/host.js +2 -2
- package/dist/src/imports/inventory.js +1 -1
- package/dist/src/infra/gateway-processes.js +2 -2
- package/dist/src/infra/path-env.js +3 -3
- package/dist/src/infra/update-global.js +10 -10
- package/dist/src/knowledge/connected-knowledge-pipeline.js +2 -2
- package/dist/src/knowledge/index.js +1 -1
- package/dist/src/knowledge-memory/repository.js +1 -1
- package/dist/src/local-apps/service.js +1 -1
- package/dist/src/mcp/gateway-http-client.js +1 -1
- package/dist/src/media-understanding/openai-compatible-audio.js +1 -1
- package/dist/src/memory-learning/source-learning.js +5 -5
- package/dist/src/memory-learning/task-receipts.js +1 -1
- package/dist/src/notes/agent-context.js +4 -4
- package/dist/src/notes/index.js +1 -1
- package/dist/src/notes/store.js +1 -1
- package/dist/src/personal-agent/capability-service.js +4 -4
- package/dist/src/personal-agent/policy.js +2 -7
- package/dist/src/personal-agent/proactivity/repository.js +1 -1
- package/dist/src/personal-agent/proactivity/routes.js +1 -1
- package/dist/src/personal-agent/proactivity/service.js +5 -5
- package/dist/src/personal-agent/prompt-context.d.ts +1 -4
- package/dist/src/personal-agent/prompt-context.js +9 -34
- package/dist/src/personal-agent/prompts.js +35 -10
- package/dist/src/personal-agent/reply-composer.js +27 -13
- package/dist/src/personal-agent/request-access.d.ts +3 -0
- package/dist/src/personal-agent/request-access.js +31 -0
- package/dist/src/personal-agent/request-delivery.js +10 -5
- package/dist/src/personal-agent/request-repository.d.ts +4 -2
- package/dist/src/personal-agent/request-repository.js +4 -4
- package/dist/src/personal-agent/request-service.d.ts +3 -1
- package/dist/src/personal-agent/request-service.js +131 -38
- package/dist/src/personal-agent/task-cancel.d.ts +7 -0
- package/dist/src/personal-agent/task-cancel.js +76 -0
- package/dist/src/providers/model-reference-auditor.js +1 -1
- package/dist/src/providers/model-response.js +13 -2
- package/dist/src/realtime/runtime.js +1 -1
- package/dist/src/remote-access/exposure-manager.js +1 -1
- package/dist/src/scenes/taskFollowUp/agentExecutor.js +4 -4
- package/dist/src/scenes/taskFollowUp/resources.js +1 -1
- package/dist/src/scenes/taskFollowUp/service.js +5 -5
- package/dist/src/session/client-history.js +1 -1
- package/dist/src/session/index.js +1 -1
- package/dist/src/session/store.js +24 -11
- package/dist/src/session/thinking-resolve.js +1 -1
- package/dist/src/share/share-store.js +1 -1
- package/dist/src/share/share-thumbnail.js +1 -1
- package/dist/src/share/share-zip.js +1 -1
- package/dist/src/share/site-proxy.js +1 -1
- package/dist/src/share/site-share-store.js +1 -1
- package/dist/src/storage/sqlite/connection-wait-repository.d.ts +2 -0
- package/dist/src/storage/sqlite/connection-wait-repository.js +83 -4
- package/dist/src/storage/sqlite/connection.js +9 -9
- package/dist/src/storage/sqlite/migrations/249_task_allocations.sql +17 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/transcript-repository.d.ts +2 -0
- package/dist/src/storage/sqlite/transcript-repository.js +25 -1
- package/dist/src/tasks/capabilities/read.js +2 -2
- package/dist/src/tasks/capabilities/relations.d.ts +38 -2
- package/dist/src/tasks/capabilities/write.d.ts +40 -0
- package/dist/src/tasks/capabilities/write.js +7 -6
- package/dist/src/tasks/execution-context.js +1 -1
- package/dist/src/tasks/home-query-service.js +2 -2
- package/dist/src/tasks/index.js +5 -5
- package/dist/src/tasks/task-allocation-repository.d.ts +25 -0
- package/dist/src/tasks/task-allocation-repository.js +82 -0
- package/dist/src/tasks/task-allocation-service.d.ts +39 -0
- package/dist/src/tasks/task-allocation-service.js +310 -0
- package/dist/src/tasks/task-application-service.js +47 -4
- package/dist/src/tasks/task-collaboration-delivery.js +5 -2
- package/dist/src/tasks/task-collaboration-repository.d.ts +3 -0
- package/dist/src/tasks/task-collaboration-repository.js +11 -1
- package/dist/src/tasks/task-context-assembler.js +15 -7
- package/dist/src/tasks/task-continuation.d.ts +5 -0
- package/dist/src/tasks/task-continuation.js +32 -0
- package/dist/src/tasks/task-handoff-service.js +2 -2
- package/dist/src/tasks/task-main-update-decision-service.js +2 -2
- package/dist/src/tasks/task-main-update-delivery.js +15 -8
- package/dist/src/tasks/task-origin-repository.d.ts +2 -1
- package/dist/src/tasks/task-origin-repository.js +9 -5
- package/dist/src/tasks/task-read-model-projector.d.ts +2 -1
- package/dist/src/tasks/task-read-model-projector.js +22 -9
- package/dist/src/tasks/task-result-delivery-repository.js +1 -1
- package/dist/src/tasks/task-result-delivery-service.js +4 -4
- package/dist/src/tasks/task-run-coordinator.d.ts +1 -0
- package/dist/src/tasks/task-run-coordinator.js +31 -8
- package/dist/src/tasks/task-run-dispatcher.d.ts +1 -1
- package/dist/src/tasks/task-run-dispatcher.js +16 -4
- package/dist/src/tasks/task-run-repository.d.ts +8 -0
- package/dist/src/tasks/task-run-repository.js +32 -1
- package/dist/src/tui/backends/embedded-backend.js +11 -11
- package/dist/src/tui/backends/gateway-realtime-backend.js +2 -2
- package/dist/src/tui/extension-host/load-extensions.js +2 -2
- package/dist/src/tui/tui-commands.js +6 -6
- package/dist/src/tui/tui-picker-overlay.js +1 -1
- package/dist/src/tui/tui-skills-autocomplete.js +2 -2
- package/dist/src/tui/tui-startup-resources.js +5 -5
- package/dist/src/tui/tui.js +7 -7
- package/dist/src/tunnel/frpc-binary.js +1 -1
- package/dist/src/tunnel/gateway-lifecycle.js +1 -1
- package/dist/src/user-context/access-policy.js +1 -1
- package/dist/src/user-model/bootstrap.js +1 -1
- package/dist/src/user-model/capture/executor.js +1 -1
- package/dist/src/user-model/index.js +2 -2
- package/dist/src/voice/realtime/memory-context.js +6 -6
- package/dist/src/voice/realtime/runtime.js +4 -4
- package/dist/src/voice/stt/index.js +2 -2
- package/dist/src/voice/stt/preflight.js +1 -1
- package/dist/src/voice/stt/providers/alibaba-transcription.js +1 -1
- package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +1 -1
- package/dist/src/voice/stt/transcribe-core.js +1 -1
- package/dist/src/voice/tts/index.js +3 -3
- package/dist/src/voice/tts/merge-config.js +1 -1
- package/dist/src/voice/tts/payload.js +1 -1
- package/dist/src/voice/tts/providers/xopc-cloud-speech.js +1 -1
- package/dist/src/voice/tts/speak-core.js +1 -1
- package/dist/src/work-discovery/index.js +1 -1
- package/dist/src/work-discovery/service.js +7 -7
- package/dist/src/workflows/engine/workflow-engine.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +8 -8
- package/dist/src/workflows/service/workflow-session-bridge.js +2 -2
- package/package.json +3 -3
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Bewx00VC.js +0 -1
- package/dist/gateway/static/root/assets/agents-ByJbzt3F.js +0 -77
- package/dist/gateway/static/root/assets/automations-workspace-DOJnSOJ7.js +0 -6
- package/dist/gateway/static/root/assets/browser-automations-page-DGcGOkIq.js +0 -3
- package/dist/gateway/static/root/assets/browser-settings-page-CHCWHtkG.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-page-CVaH729t.js +0 -2
- package/dist/gateway/static/root/assets/connectors-page-BpCGV1Gg.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-CEfqb0dk.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-IK77lcix.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-CnqeYLJI.js +0 -1
- package/dist/gateway/static/root/assets/home-page-CKUJdUkK.js +0 -2
- package/dist/gateway/static/root/assets/index-BvOYtdnP.css +0 -1
- package/dist/gateway/static/root/assets/markdown-view-CZWff4bI.css +0 -1
- package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-Bd0DNN_v.js +0 -1
- package/dist/gateway/static/root/assets/messages-CRy8QVkB.js +0 -3
- package/dist/gateway/static/root/assets/note-detail-panel-DiJ5O3Ga.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-BEhxVwpX.js +0 -8
- package/dist/gateway/static/root/assets/page-tabs-BLGO2VIm.js +0 -1
- package/dist/gateway/static/root/assets/personal-page-Dpgj9Y5a.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-CAM4Q3Kh.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-B6y0lXZc.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DY0UP_lC.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BLTR6Opb.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DWAAlzV5.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-DPrpUIj7.js +0 -1
- package/dist/gateway/static/root/assets/tasks-DwKXgZ-I.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-BgIW4ITJ.js +0 -2
|
@@ -6,11 +6,12 @@ import { connectionBindings, getActiveConnectionWait, init_connection_wait_repos
|
|
|
6
6
|
import { getSessionMetadata } from "../../storage/sqlite/session-read-repository.js";
|
|
7
7
|
import { init_session_repository } from "../../storage/sqlite/session-repository.js";
|
|
8
8
|
import { listConnectorInstances } from "../../connectors/instances.js";
|
|
9
|
-
import { getStoreConnectorInstallPlan, parseStoreConnectorCandidateRef, searchStoreConnectorInstallCandidates } from "../../capabilities/store-connector.js";
|
|
10
|
-
import { connectionCandidates, resolveConnectionCandidate } from "../../connectors/connection-candidates.js";
|
|
11
9
|
import { connectorPrincipalForSession } from "../../connectors/principal.js";
|
|
12
10
|
import { parseExternalToolRef } from "./refs.js";
|
|
13
11
|
import { setXopcToolMetadata } from "../embedded/tool-metadata.js";
|
|
12
|
+
import { getStoreConnectorInstallPlan, parseStoreConnectorCandidateRef, searchStoreConnectorInstallCandidates } from "../../capabilities/store-connector.js";
|
|
13
|
+
import { assertPersonalRequestAccountAccess } from "../../personal-agent/request-access.js";
|
|
14
|
+
import { connectionCandidates, resolveConnectionCandidate } from "../../connectors/connection-candidates.js";
|
|
14
15
|
import { ExternalToolService } from "./service.js";
|
|
15
16
|
import { EXTERNAL_TOOL_SOURCES } from "./types.js";
|
|
16
17
|
import { bindExternalToolRegistry } from "./tool-registry.js";
|
|
@@ -143,6 +144,7 @@ function createExternalToolGatewayTools(providers, getContext, getConfig, getExe
|
|
|
143
144
|
const connectorId = composio ? getConnectorInstallation(composio.namespace)?.connectorId : cli && config ? listConnectorInstances(config).find((instance) => instance.instanceId === cli.namespace)?.connectorId : void 0;
|
|
144
145
|
if (connectorId !== request.connectorId) throw new Error("Use only the selected Personal request connector");
|
|
145
146
|
if (composio && !listConnectorActionMetadata(connectorId).some((action) => action.actionId === composio.toolName && action.scope === "read" && action.curated)) throw new Error("Personal requests permit only curated read operations");
|
|
147
|
+
assertPersonalRequestAccountAccess(request);
|
|
146
148
|
const account = getConnectorAccount(request.accountId);
|
|
147
149
|
const connection = account?.currentConnectionId ? getConnectorConnection(account.currentConnectionId) : void 0;
|
|
148
150
|
if (!connection || connection.status !== "active" || connection.expiresAt && Date.parse(connection.expiresAt) <= Date.now()) {
|
|
@@ -157,11 +159,15 @@ function createExternalToolGatewayTools(providers, getContext, getConfig, getExe
|
|
|
157
159
|
}
|
|
158
160
|
const result = await service.execute({
|
|
159
161
|
...params,
|
|
160
|
-
...request ? {
|
|
162
|
+
...request ? {
|
|
163
|
+
readOnly: void 0,
|
|
164
|
+
personalReadOnly: true
|
|
165
|
+
} : {},
|
|
161
166
|
context: {
|
|
162
167
|
toolCallId,
|
|
163
168
|
signal,
|
|
164
|
-
onUpdate
|
|
169
|
+
onUpdate,
|
|
170
|
+
...request ? { authorize: () => assertPersonalRequestAccountAccess(request) } : {}
|
|
165
171
|
}
|
|
166
172
|
});
|
|
167
173
|
return {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getEmbeddedExecutionSession } from "../embedded/execution-context.js";
|
|
2
1
|
import { resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession } from "../../config/agent-profile.js";
|
|
2
|
+
import { getEmbeddedExecutionSession } from "../embedded/execution-context.js";
|
|
3
3
|
import { parseExternalToolRef } from "./refs.js";
|
|
4
4
|
import { CliToolProvider } from "./cliProvider.js";
|
|
5
5
|
import { ComposioToolProvider } from "./composio-provider.js";
|
|
@@ -28,6 +28,7 @@ export declare class ExternalToolService {
|
|
|
28
28
|
arguments?: Record<string, unknown>;
|
|
29
29
|
approvalId?: string;
|
|
30
30
|
readOnly?: boolean;
|
|
31
|
+
personalReadOnly?: boolean;
|
|
31
32
|
context: ExternalToolExecutionContext;
|
|
32
33
|
}): Promise<import("@earendil-works/pi-agent-core").AgentToolResult<Record<string, unknown>>>;
|
|
33
34
|
private providerForRef;
|
|
@@ -137,10 +137,11 @@ var ExternalToolService = class {
|
|
|
137
137
|
const descriptor = await provider.describe(params.toolRef);
|
|
138
138
|
if (!descriptor) throw new Error(`External tool is unavailable: ${params.toolRef}`);
|
|
139
139
|
const current = versionDescriptor(descriptor);
|
|
140
|
+
if (params.personalReadOnly && current.readOnly !== true && current.batchRead !== true) throw new Error("This external operation has no host-curated read-only contract");
|
|
140
141
|
if (params.readOnly && current.batchRead !== true) throw new Error("This external operation is not approved for batch reads");
|
|
141
142
|
if (current.revision !== params.revision) throw new Error(`Tool contract changed. Describe ${params.toolRef} again before executing it.`);
|
|
142
143
|
const args = params.arguments ?? {};
|
|
143
|
-
if (params.readOnly && (provider.source === "composio" || provider.source === "cli") && (typeof args.xopcAccountId !== "string" || !args.xopcAccountId)) throw new Error("Batch connector reads require an explicit xopcAccountId");
|
|
144
|
+
if ((params.readOnly || params.personalReadOnly) && (provider.source === "composio" || provider.source === "cli") && (typeof args.xopcAccountId !== "string" || !args.xopcAccountId)) throw new Error("Batch connector reads require an explicit xopcAccountId");
|
|
144
145
|
let validate;
|
|
145
146
|
try {
|
|
146
147
|
validate = this.ajv.compile(current.inputSchema);
|
|
@@ -151,6 +152,7 @@ var ExternalToolService = class {
|
|
|
151
152
|
if (!validate(input)) throw new Error(`Arguments do not match ${params.toolRef}: ${this.ajv.errorsText(validate.errors)}`);
|
|
152
153
|
};
|
|
153
154
|
validateArguments(args);
|
|
155
|
+
params.context.authorize?.();
|
|
154
156
|
return provider.execute(params.toolRef, args, params.approvalId, {
|
|
155
157
|
...params.context,
|
|
156
158
|
contractRevision: current.contractRevision,
|
|
@@ -27,6 +27,8 @@ export interface ExternalToolDescriptor extends ExternalToolSearchHit {
|
|
|
27
27
|
exposure?: import('@earendil-works/pi-coding-agent').ToolExposure;
|
|
28
28
|
/** Host-curated contract; never copied from remote readOnlyHint annotations. */
|
|
29
29
|
batchRead?: boolean;
|
|
30
|
+
/** Host-curated read scope; separate from eligibility for batch execution. */
|
|
31
|
+
readOnly?: boolean;
|
|
30
32
|
}
|
|
31
33
|
export interface VersionedExternalToolDescriptor extends ExternalToolDescriptor {
|
|
32
34
|
revision: string;
|
|
@@ -36,6 +38,8 @@ export interface ExternalToolExecutionContext {
|
|
|
36
38
|
signal?: AbortSignal;
|
|
37
39
|
onUpdate?: AgentToolUpdateCallback<Record<string, unknown>>;
|
|
38
40
|
contractRevision?: string;
|
|
41
|
+
/** Host authorization recheck immediately before remote dispatch. */
|
|
42
|
+
authorize?: () => void;
|
|
39
43
|
validateArguments?: (args: Record<string, unknown>) => void;
|
|
40
44
|
}
|
|
41
45
|
export interface ExternalToolTurnContext {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createLogger } from "../../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../../utils/logger.js";
|
|
3
|
+
import { imageFileExtensionForMimeType } from "./image-assets.js";
|
|
3
4
|
import { pickTimeoutMsOrFallback } from "../../../media-shared/http/deadline.js";
|
|
4
5
|
import { privateNetworkPolicyToSsrfGuardOptions } from "../../../media-shared/http/private-network.js";
|
|
5
6
|
import { resolveProviderHttpRequestConfig } from "../../../media-shared/http/resolve-provider-http-request-config.js";
|
|
@@ -8,7 +9,6 @@ import "../../../media-shared/http/index.js";
|
|
|
8
9
|
import { ImageProviderError, validateImageRequest } from "../../../../packages/image-providers/src/validation.js";
|
|
9
10
|
import { decodeBase64, imageFromBytes } from "../../../../packages/image-providers/src/http.js";
|
|
10
11
|
import "../../../../packages/image-providers/src/index.js";
|
|
11
|
-
import { imageFileExtensionForMimeType } from "./image-assets.js";
|
|
12
12
|
//#region src/agent/image/generation/openai-images-provider.ts
|
|
13
13
|
/** Strict implementation of the OpenAI Images REST protocol. */
|
|
14
14
|
init_logger();
|
|
@@ -3,12 +3,12 @@ import { init_logger } from "../../../utils/logger.js";
|
|
|
3
3
|
import { PROVIDER_ENV_MAP, init_env_keys } from "../../../providers/env-keys.js";
|
|
4
4
|
import { ImageProviderError } from "../../../../packages/image-providers/src/validation.js";
|
|
5
5
|
import "../../../../packages/image-providers/src/index.js";
|
|
6
|
-
import { getImageGenerationProvider, listImageGenerationProviders, listImageGenerationProvidersSummary as listImageGenerationProvidersSummary$1 } from "./provider-registry.js";
|
|
7
6
|
import { describeFailoverError, isFailoverError } from "../../failover-error.js";
|
|
8
7
|
import { buildNoCapabilityModelConfiguredMessage, recordCapabilityCandidateFailure, resolveCapabilityModelCandidates, throwCapabilityGenerationFailure } from "../../media-generation/runtime-shared.js";
|
|
9
8
|
import "../../media-generation/index.js";
|
|
10
9
|
import { parseImageGenerationModelRef } from "./model-ref.js";
|
|
11
10
|
import { validateImageGenerationRequest } from "./validation.js";
|
|
11
|
+
import { getImageGenerationProvider, listImageGenerationProviders, listImageGenerationProvidersSummary as listImageGenerationProvidersSummary$1 } from "./provider-registry.js";
|
|
12
12
|
//#region src/agent/image/generation/runtime.ts
|
|
13
13
|
init_env_keys();
|
|
14
14
|
init_logger();
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { getImageGenerationProvider, listImageGenerationProviders } from "./generation/provider-registry.js";
|
|
2
1
|
import { getImageUnderstandingProvider, listImageUnderstandingProviders, registerImageUnderstandingProvider } from "./understanding/provider-registry.js";
|
|
3
2
|
import { resolveImageModelConfigForTool } from "./tool-model-config.js";
|
|
4
3
|
import { describeImages, describeImagesWithFallback } from "./understanding/runtime.js";
|
|
5
4
|
import { modelSupportsVision, resolveImageHandlingStrategy } from "./vision-detection.js";
|
|
6
5
|
import { runWithImageModelFallback } from "./image-model-fallback.js";
|
|
7
6
|
import { loadImageForToolInput } from "./load-image-media.js";
|
|
7
|
+
import { getImageGenerationProvider, listImageGenerationProviders } from "./generation/provider-registry.js";
|
|
8
8
|
import { generateImage, listImageGenerationProvidersSummary } from "./generation/runtime.js";
|
|
9
9
|
export { describeImages, describeImagesWithFallback, generateImage, getImageGenerationProvider, getImageUnderstandingProvider, listImageGenerationProviders, listImageGenerationProvidersSummary, listImageUnderstandingProviders, loadImageForToolInput, modelSupportsVision, registerImageUnderstandingProvider, resolveImageHandlingStrategy, resolveImageModelConfigForTool, runWithImageModelFallback };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
2
|
+
import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
|
|
2
3
|
import { getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "../../config/schema.js";
|
|
3
4
|
import { getDefaultModelSync, getModelsByProvider, init_providers, isProviderConfiguredSync, resolveModel } from "../../providers/index.js";
|
|
4
|
-
import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
|
|
5
5
|
import { resolveAgentModelFallbackValues, resolveAgentModelPrimaryValue } from "../../config/model-input.js";
|
|
6
6
|
import { buildCapabilityPlansForConfig } from "../../capabilities/readiness/from-config.js";
|
|
7
7
|
import "../../capabilities/readiness/index.js";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { stripRuntimeUserMessageEnvelope } from "../../../packages/gateway-contract/src/user-message-display.js";
|
|
2
2
|
import { init_src } from "../../../packages/gateway-contract/src/index.js";
|
|
3
|
-
import { isPersonalConversation } from "../../personal-agent/repository.js";
|
|
4
3
|
import { extractProfileAgentId } from "../../config/agent-profile.js";
|
|
4
|
+
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
5
|
+
import { isPersonalConversation } from "../../personal-agent/repository.js";
|
|
5
6
|
import { MODEL_IMAGE_MAX_BYTES, MODEL_IMAGE_SOURCE_MAX_BYTES, prepareImageForModel } from "../image/prepare-image-for-model.js";
|
|
6
7
|
import { mimeTypeFromMediaPath } from "../../media/store.js";
|
|
7
8
|
import { readMediaReference } from "../../media/media-reference.js";
|
|
8
9
|
import { isImageInboundAttachment } from "../../channels/attachments/attachment-classifiers.js";
|
|
9
10
|
import "../../channels/attachments/inbound-persist.js";
|
|
10
11
|
import { expandAtFileMentionsInPlainText } from "../context/expand-at-file-mentions.js";
|
|
11
|
-
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
12
12
|
import { resolveImageHandlingStrategy } from "../image/vision-detection.js";
|
|
13
13
|
import { resolveInboundImageContentParts } from "../image/inbound-image-handling.js";
|
|
14
14
|
//#region src/agent/inbound/attachment-pipeline.ts
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { runWithLogContext, updateAsyncLogContext } from "../../utils/logger/context.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { MessageBusShutdownError } from "../../infra/bus/queue.js";
|
|
4
|
-
import "../../infra/bus/index.js";
|
|
5
3
|
import { shouldSkipResetOverlapCommand } from "../../session/reset-triggers.js";
|
|
6
4
|
import { initSessionTurn } from "../../session/init-session-turn.js";
|
|
5
|
+
import { MessageBusShutdownError } from "../../infra/bus/queue.js";
|
|
6
|
+
import "../../infra/bus/index.js";
|
|
7
7
|
import { runEmbeddedTurnForSession } from "../embedded/run-for-session.js";
|
|
8
8
|
import { inboundMessageLogRequestId } from "../service-inbound-utils.js";
|
|
9
9
|
//#region src/agent/inbound/inbound-loop.ts
|
package/dist/src/agent/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { extractToolCallsFromAssistant, extractToolResultId, sanitizeToolCallId, sanitizeToolCallIdsForCloudCodeAssist } from "./transcript/tool-call-id.js";
|
|
2
|
-
import { makeMissingToolResult, repairToolUseResultPairing, sanitizeToolCallInputs, sanitizeToolUseResultPairing, stripToolResultDetails } from "./transcript/session-transcript-repair.js";
|
|
3
1
|
import { resolveTranscriptPolicy } from "./transcript/transcript-policy.js";
|
|
4
2
|
import { dropThinkingBlocks } from "./transcript/thinking.js";
|
|
3
|
+
import { extractToolCallsFromAssistant, extractToolResultId, sanitizeToolCallId, sanitizeToolCallIdsForCloudCodeAssist } from "./transcript/tool-call-id.js";
|
|
4
|
+
import { makeMissingToolResult, repairToolUseResultPairing, sanitizeToolCallInputs, sanitizeToolUseResultPairing, stripToolResultDetails } from "./transcript/session-transcript-repair.js";
|
|
5
5
|
import { applySessionTranscriptHygiene, applySessionTranscriptHygieneForPersistence, applySessionTranscriptHygieneWithPolicy, resolvePolicyForModel, tryApplySessionTranscriptHygiene, tryApplySessionTranscriptHygieneForPersistence } from "./transcript/transcript-hygiene.js";
|
|
6
|
-
import { AgentService } from "./service.js";
|
|
7
6
|
import { createResponseMessage, createSignalMessage, createTaskMessage, isValidIPCMessage } from "./ipc/types.js";
|
|
8
7
|
import { AgentInbox } from "./ipc/inbox.js";
|
|
9
8
|
import { AgentBus } from "./ipc/bus.js";
|
|
10
9
|
import { AgentSocketClient, AgentSocketServer, isSocketAvailable } from "./ipc/socket.js";
|
|
11
10
|
import "./ipc/index.js";
|
|
11
|
+
import { AgentService } from "./service.js";
|
|
12
12
|
import { stripToolMessages } from "./transcript/strip-tool-messages.js";
|
|
13
13
|
import "./transcript/index.js";
|
|
14
14
|
export { AgentBus, AgentInbox, AgentService, AgentSocketClient, AgentSocketServer, applySessionTranscriptHygiene, applySessionTranscriptHygieneForPersistence, applySessionTranscriptHygieneWithPolicy, createResponseMessage, createSignalMessage, createTaskMessage, dropThinkingBlocks, extractToolCallsFromAssistant, extractToolResultId, isSocketAvailable, isValidIPCMessage, makeMissingToolResult, repairToolUseResultPairing, resolvePolicyForModel, resolveTranscriptPolicy, sanitizeToolCallId, sanitizeToolCallIdsForCloudCodeAssist, sanitizeToolCallInputs, sanitizeToolUseResultPairing, stripToolMessages, stripToolResultDetails, tryApplySessionTranscriptHygiene, tryApplySessionTranscriptHygieneForPersistence };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { AgentPluginStore } from "../../extensions/agent-plugins/store.js";
|
|
1
2
|
import { normalizeConfiguredMcpServers } from "../../config/mcp-config-normalize.js";
|
|
2
3
|
import { inspectExtensionConnectorDependencies } from "../../extensions/connector-dependencies.js";
|
|
3
|
-
import { AgentPluginStore } from "../../extensions/agent-plugins/store.js";
|
|
4
4
|
import { materializePluginServers } from "../../extensions/agent-plugins/mcp-adapter.js";
|
|
5
5
|
//#region src/agent/mcp/config.ts
|
|
6
6
|
function loadMergedMcpConfig(params) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getToolResultTextLength, truncateToolResultMessage } from "../embedded/tool-result-truncation.js";
|
|
2
1
|
import { readAgentMessageContent } from "./agent-message-access.js";
|
|
2
|
+
import { getToolResultTextLength, truncateToolResultMessage } from "../embedded/tool-result-truncation.js";
|
|
3
3
|
//#region src/agent/memory/context-budget.ts
|
|
4
4
|
const MESSAGE_OVERHEAD_TOKENS = 12;
|
|
5
5
|
const REQUEST_OVERHEAD_TOKENS = 256;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { evaluateContextBudget, projectContextForModel, stringifyMessagesForBudget } from "./context-budget.js";
|
|
4
3
|
import { stripTrailingErrorAssistantMessages } from "../orchestration/llm-turn-retry.js";
|
|
4
|
+
import { evaluateContextBudget, projectContextForModel, stringifyMessagesForBudget } from "./context-budget.js";
|
|
5
5
|
//#region src/agent/memory/context-recovery.ts
|
|
6
6
|
init_logger();
|
|
7
7
|
const log = createLogger("ContextRecovery");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { buildUserContextBlock, sanitizeUserContextFenceEscapes } from "./context-fence.js";
|
|
2
1
|
import { isMemorySubsystemEnabled } from "./memory-config.js";
|
|
3
2
|
import { extractAgentUserPlainText } from "./user-message-text.js";
|
|
3
|
+
import { buildUserContextBlock, sanitizeUserContextFenceEscapes } from "./context-fence.js";
|
|
4
4
|
import { MemoryManager } from "./manager.js";
|
|
5
5
|
import { discoverMemoryPlugins } from "./plugin-discovery.js";
|
|
6
6
|
import { createMemoryManagerFromConfig } from "./create-memory-manager.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { abortEmbeddedRun } from "../embedded/runs.js";
|
|
3
4
|
import { persistInboundAttachments } from "../../channels/attachments/inbound-persist.js";
|
|
4
5
|
import { buildTranscriptUserMessage, clearPendingTranscriptUserMessage, hydrateUserTurnForLlm, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
|
|
5
|
-
import { abortEmbeddedRun } from "../embedded/runs.js";
|
|
6
6
|
import { resolveEffectiveThinkingLevel } from "../../session/thinking-resolve.js";
|
|
7
7
|
import { runEmbeddedTurnForSession } from "../embedded/run-for-session.js";
|
|
8
8
|
import { randomUUID } from "node:crypto";
|
|
@@ -8,6 +8,7 @@ export interface AgentTurnPolicy {
|
|
|
8
8
|
takeContinuationMessage?(): string | undefined;
|
|
9
9
|
/** Recheck limits at dispatch, including requests made by recovery paths. */
|
|
10
10
|
beforeModelRequest?(signal?: AbortSignal): string | undefined;
|
|
11
|
+
stopReason?(): 'completed' | 'limit';
|
|
11
12
|
}
|
|
12
13
|
export interface AgentTurnPolicyOptions {
|
|
13
14
|
maxTurns?: number;
|
|
@@ -126,7 +126,8 @@ function createDelegationBudgetPolicy(budget, options, now = Date.now) {
|
|
|
126
126
|
const message = continuation;
|
|
127
127
|
continuation = void 0;
|
|
128
128
|
return message;
|
|
129
|
-
}
|
|
129
|
+
},
|
|
130
|
+
stopReason: () => !stopReason && options.isComplete?.() ? "completed" : "limit"
|
|
130
131
|
},
|
|
131
132
|
addTokens(tokens) {
|
|
132
133
|
usage.totalTokens += Math.max(0, tokens);
|
|
@@ -26,6 +26,11 @@ export interface RetryTransientTurnOptions {
|
|
|
26
26
|
baseDelayMs?: number;
|
|
27
27
|
signal?: AbortSignal;
|
|
28
28
|
conversationId: string;
|
|
29
|
+
onRetry?: () => void;
|
|
30
|
+
shouldRetry?: () => boolean;
|
|
31
|
+
budget?: {
|
|
32
|
+
continues: number;
|
|
33
|
+
};
|
|
29
34
|
log: {
|
|
30
35
|
warn: (obj: Record<string, unknown>, msg: string) => void;
|
|
31
36
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { isTransientProviderErrorMessage } from "../../providers/model-response.js";
|
|
2
2
|
import { isContextOverflowError } from "./context-overflow.js";
|
|
3
|
+
import { canResumeAfterModelFailure } from "./turn-recovery.js";
|
|
3
4
|
//#region src/agent/orchestration/llm-turn-retry.ts
|
|
4
5
|
function isTransientLlmErrorMessage(message) {
|
|
5
6
|
return isTransientProviderErrorMessage(message);
|
|
@@ -72,9 +73,9 @@ async function waitForRetryDelay(delayMs, signal) {
|
|
|
72
73
|
*/
|
|
73
74
|
async function maybeRetryTurnAfterTransientLlmFailure(agent, options) {
|
|
74
75
|
const maxContinues = options.maxContinues ?? 2;
|
|
75
|
-
const baseDelayMs = Math.max(0, options.baseDelayMs ??
|
|
76
|
-
|
|
77
|
-
while (continues < maxContinues) {
|
|
76
|
+
const baseDelayMs = Math.max(0, options.baseDelayMs ?? 1e3);
|
|
77
|
+
const budget = options.budget ?? { continues: 0 };
|
|
78
|
+
while (budget.continues < maxContinues && options.shouldRetry?.() !== false) {
|
|
78
79
|
const last = getLastAssistantMessage(agent.state.messages);
|
|
79
80
|
if (!last) return;
|
|
80
81
|
if (last.stopReason !== "error") return;
|
|
@@ -88,8 +89,15 @@ async function maybeRetryTurnAfterTransientLlmFailure(agent, options) {
|
|
|
88
89
|
}, "Assistant turn ended with error (not retrying as transient)");
|
|
89
90
|
return;
|
|
90
91
|
}
|
|
91
|
-
|
|
92
|
-
|
|
92
|
+
if (!canResumeAfterModelFailure(agent.state.messages)) {
|
|
93
|
+
options.log.warn({ conversationId: options.conversationId }, "Model recovery stopped because a tool outcome is unconfirmed");
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const continues = ++budget.continues;
|
|
97
|
+
const rateLimited = /429|rate.limit|too many requests/i.test(errMsg);
|
|
98
|
+
const serverDelay = /retry[- ]after\s*[:=]?\s*(\d+(?:\.\d+)?)\s*(ms|s|seconds)?/i.exec(errMsg);
|
|
99
|
+
const requestedDelay = serverDelay ? Number(serverDelay[1]) * (serverDelay[2] === "ms" ? 1 : 1e3) : 0;
|
|
100
|
+
const retryDelayMs = Math.min(6e4, Math.max(requestedDelay, (rateLimited && options.baseDelayMs === void 0 ? 5e3 : baseDelayMs) * 2 ** (continues - 1)));
|
|
93
101
|
options.log.warn({
|
|
94
102
|
conversationId: options.conversationId,
|
|
95
103
|
errorMessage: errMsg,
|
|
@@ -99,6 +107,8 @@ async function maybeRetryTurnAfterTransientLlmFailure(agent, options) {
|
|
|
99
107
|
retryDelayMs
|
|
100
108
|
}, "LLM request failed with a transient network error; retrying the same turn. If this persists, check outbound HTTPS to the provider API and HTTP(S)_PROXY.");
|
|
101
109
|
await waitForRetryDelay(retryDelayMs, options.signal);
|
|
110
|
+
options.signal?.throwIfAborted();
|
|
111
|
+
options.onRetry?.();
|
|
102
112
|
const trimmed = stripTrailingErrorAssistantMessages(agent.state.messages);
|
|
103
113
|
agent.state.messages = trimmed;
|
|
104
114
|
await agent.continue();
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentMessage } from '@earendil-works/pi-agent-core';
|
|
2
|
+
/** A model request can be resumed only after every issued tool has a confirmed result. */
|
|
3
|
+
export declare function canResumeAfterModelFailure(rows: readonly unknown[]): boolean;
|
|
4
|
+
export declare function recoveryToolKey(name: string, args: unknown): string;
|
|
5
|
+
/** Prevent a recovering model from replaying an already confirmed operation with a new call ID. */
|
|
6
|
+
export declare function completedRecoveryToolResult(messages: readonly AgentMessage[], name: string, args: unknown): string | undefined;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/agent/orchestration/turn-recovery.ts
|
|
2
|
+
/** A model request can be resumed only after every issued tool has a confirmed result. */
|
|
3
|
+
function canResumeAfterModelFailure(rows) {
|
|
4
|
+
const messages = rows.filter((row) => !!row && typeof row === "object");
|
|
5
|
+
const pending = /* @__PURE__ */ new Set();
|
|
6
|
+
for (const message of messages.slice(Math.max(0, messages.findLastIndex((item) => item.role === "user")))) if (message.role === "assistant") {
|
|
7
|
+
if (message.stopReason === "aborted") return false;
|
|
8
|
+
if (message.stopReason === "error") continue;
|
|
9
|
+
for (const block of Array.isArray(message.content) ? message.content : []) if (block?.type === "toolCall" && typeof block.id === "string") pending.add(block.id);
|
|
10
|
+
} else if (message.role === "toolResult") {
|
|
11
|
+
const recordedReplay = Array.isArray(message.content) && message.content.some((block) => block?.type === "text" && typeof block.text === "string" && block.text.startsWith("This operation already completed before recovery."));
|
|
12
|
+
if (message.isError && !recordedReplay) return false;
|
|
13
|
+
if (typeof message.toolCallId === "string") pending.delete(message.toolCallId);
|
|
14
|
+
}
|
|
15
|
+
return pending.size === 0;
|
|
16
|
+
}
|
|
17
|
+
function recoveryToolKey(name, args) {
|
|
18
|
+
return JSON.stringify([name, args], (_key, value) => value && typeof value === "object" && !Array.isArray(value) ? Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b))) : value);
|
|
19
|
+
}
|
|
20
|
+
/** Prevent a recovering model from replaying an already confirmed operation with a new call ID. */
|
|
21
|
+
function completedRecoveryToolResult(messages, name, args) {
|
|
22
|
+
const calls = /* @__PURE__ */ new Map();
|
|
23
|
+
const key = recoveryToolKey(name, args);
|
|
24
|
+
for (const message of messages.slice(Math.max(0, messages.findLastIndex((item) => item.role === "user")))) if (message.role === "assistant" && message.stopReason !== "error" && message.stopReason !== "aborted") {
|
|
25
|
+
for (const block of message.content) if (block.type === "toolCall") calls.set(block.id, recoveryToolKey(block.name, block.arguments));
|
|
26
|
+
} else if (message.role === "toolResult" && !message.isError && calls.get(message.toolCallId) === key) return `This operation already completed before recovery. Do not execute it again. Use its recorded result and continue the remaining work:\n${JSON.stringify(message.content).slice(0, 8e3)}`;
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { canResumeAfterModelFailure, completedRecoveryToolResult, recoveryToolKey };
|
|
@@ -2,9 +2,9 @@ import { isXopcDatabaseOpen } from "../../storage/sqlite/connection.js";
|
|
|
2
2
|
import { TaskRepository, init_task_repository } from "../../tasks/task-repository.js";
|
|
3
3
|
import { getSessionConfig } from "../../storage/sqlite/config-repository.js";
|
|
4
4
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
5
|
+
import { init_response_language, resolveResponseLanguage } from "../../i18n/response-language.js";
|
|
5
6
|
import { resolveTaskLocale } from "../../tasks/task-language.js";
|
|
6
7
|
import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
|
|
7
|
-
import { init_response_language, resolveResponseLanguage } from "../../i18n/response-language.js";
|
|
8
8
|
//#region src/agent/prompt/response-language.ts
|
|
9
9
|
init_response_language();
|
|
10
10
|
init_sqlite();
|
|
@@ -152,7 +152,7 @@ function buildToolingSection(params) {
|
|
|
152
152
|
hasToolManual ? "Some complex tools have built-in manuals. Use `tool_manual(tool)` before non-trivial use." : "",
|
|
153
153
|
hasDelegate ? "If a task is complex or long-running, delegate it. Completion is push-based: the sub-agent result returns when done." : "",
|
|
154
154
|
...orchestrationLines,
|
|
155
|
-
"Do not poll delegate/workflow status in a tight loop; check on-demand or wait for completion."
|
|
155
|
+
hasDelegate || hasWorkflow ? "Do not poll delegate/workflow status in a tight loop; check on-demand or wait for completion." : ""
|
|
156
156
|
].filter(Boolean).join("\n");
|
|
157
157
|
}
|
|
158
158
|
function hasSkillsTools(toolNames) {
|
|
@@ -6,14 +6,14 @@ import { getInteractionState } from "../../storage/sqlite/interaction-state-repo
|
|
|
6
6
|
import { DEFAULT_USER_TRUST_LEVEL, init_trust_policy } from "../../user-context/trust-policy.js";
|
|
7
7
|
import { getUserTrustPolicy } from "../../storage/sqlite/user-trust-repository.js";
|
|
8
8
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
9
|
-
import { getUserTimezone } from "../../user-model/repository.js";
|
|
10
9
|
import { appendStablePromptSection } from "./cache-boundary.js";
|
|
11
|
-
import {
|
|
12
|
-
import { buildTtsSystemPromptHint } from "../../voice/tts/directives.js";
|
|
10
|
+
import { getUserTimezone } from "../../user-model/repository.js";
|
|
13
11
|
import "../../user-model/index.js";
|
|
14
12
|
import { resolveSystemPromptBuildParams } from "./system-prompt-params.js";
|
|
15
13
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
16
14
|
import { resolveResponseLanguageForSession } from "./response-language.js";
|
|
15
|
+
import { buildTtsSystemPromptHint } from "../../voice/tts/directives.js";
|
|
16
|
+
import { mergeTtsConfigFromAppConfig } from "../../voice/tts/merge-config.js";
|
|
17
17
|
//#region src/agent/prompt/service-prompt-builder.ts
|
|
18
18
|
init_sqlite();
|
|
19
19
|
init_interaction_state();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { prepareSafeToolEnv } from "./sanitize-env-vars.js";
|
|
4
3
|
import { validatePath, validateWritePath } from "./path-policy.js";
|
|
4
|
+
import { prepareSafeToolEnv } from "./sanitize-env-vars.js";
|
|
5
5
|
import { auditCommand, validateCommand } from "./command-validator.js";
|
|
6
6
|
import { DEFAULT_SANDBOX_CONFIG } from "./types.js";
|
|
7
7
|
import { resolve } from "node:path";
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { getClarificationResumeInput, init_clarification_wait_repository } from "../../storage/sqlite/clarification-wait-repository.js";
|
|
2
2
|
import { getConnectionResumeInput, init_connection_wait_repository } from "../../storage/sqlite/connection-wait-repository.js";
|
|
3
|
-
import { parseSlashCommand } from "../../chat-commands/command-parse.js";
|
|
4
3
|
import { isPersonalConversation } from "../../personal-agent/repository.js";
|
|
5
|
-
import { personalCommandRejection } from "../../chat-commands/personal-command-policy.js";
|
|
6
|
-
import { commandRegistry } from "../../chat-commands/registry.js";
|
|
7
|
-
import "../../chat-commands/index.js";
|
|
8
4
|
import { resolveImageHandlingStrategy } from "../image/vision-detection.js";
|
|
9
5
|
import { hydrateUserTurnForLlm } from "../inbound/attachment-pipeline.js";
|
|
6
|
+
import { buildDelegatedTaskDirective, buildTaskExecutionDirective } from "../../tasks/task-context-assembler.js";
|
|
10
7
|
import { shouldSkipResetOverlapCommand } from "../../session/reset-triggers.js";
|
|
8
|
+
import { parseSlashCommand } from "../../chat-commands/command-parse.js";
|
|
9
|
+
import { personalCommandRejection } from "../../chat-commands/personal-command-policy.js";
|
|
10
|
+
import { commandRegistry } from "../../chat-commands/registry.js";
|
|
11
|
+
import "../../chat-commands/index.js";
|
|
12
|
+
import { getTaskContinuation } from "../../tasks/task-continuation.js";
|
|
11
13
|
import { runEmbeddedTurnForSession } from "../embedded/run-for-session.js";
|
|
12
14
|
import { injectSourceContextsIntoUserMessage } from "../source-context/injector.js";
|
|
13
|
-
import { buildDelegatedTaskDirective, buildTaskExecutionDirective } from "../../tasks/task-context-assembler.js";
|
|
14
|
-
import { prependAgentContext } from "../context/prepend.js";
|
|
15
15
|
import crypto from "node:crypto";
|
|
16
16
|
//#region src/agent/service/direct-turn-helpers.ts
|
|
17
17
|
/**
|
|
@@ -113,10 +113,11 @@ async function runDirectAgentTurn(deps, input) {
|
|
|
113
113
|
const turnId = input.runId ?? crypto.randomUUID();
|
|
114
114
|
const isConnectionResume = Boolean(getConnectionResumeInput(input.conversationId, turnId));
|
|
115
115
|
const isClarificationResume = Boolean(getClarificationResumeInput(input.conversationId, turnId));
|
|
116
|
-
const isResume = isConnectionResume || isClarificationResume;
|
|
116
|
+
const isResume = isConnectionResume || isClarificationResume || Boolean(getTaskContinuation(input.conversationId, turnId));
|
|
117
117
|
const userContext = await deps.agentManager.prepareUserTurnContext(input.userMessage, input.conversationId, turnId);
|
|
118
118
|
const sourceContexts = input.sourceContexts ?? [];
|
|
119
|
-
const
|
|
119
|
+
const sourceEnrichedMessage = injectSourceContextsIntoUserMessage(input.userMessage, sourceContexts);
|
|
120
|
+
const taskContext = [buildTaskExecutionDirective(input.conversationId), buildDelegatedTaskDirective(input.conversationId)].filter(Boolean).join("\n");
|
|
120
121
|
const modelRef = deps.modelManager.getModelForSession(input.conversationId);
|
|
121
122
|
const llmTurn = await hydrateUserTurnForLlm({
|
|
122
123
|
message: input.userMessage,
|
|
@@ -128,8 +129,8 @@ async function runDirectAgentTurn(deps, input) {
|
|
|
128
129
|
const result = await runEmbeddedTurnForSession({
|
|
129
130
|
conversationId: input.conversationId,
|
|
130
131
|
runId: turnId,
|
|
131
|
-
userMessage:
|
|
132
|
-
dynamicSystemContext: userContext.dynamicSystemContext,
|
|
132
|
+
userMessage: sourceEnrichedMessage,
|
|
133
|
+
dynamicSystemContext: [userContext.dynamicSystemContext, taskContext].filter(Boolean).join("\n\n"),
|
|
133
134
|
llmImages,
|
|
134
135
|
presentation: input.presentation,
|
|
135
136
|
requireVisibleReply: input.requireVisibleReply,
|
|
@@ -5,18 +5,19 @@ import { getClarificationResumeInput, init_clarification_wait_repository } from
|
|
|
5
5
|
import { getConnectionResumeInput, init_connection_wait_repository } from "../../storage/sqlite/connection-wait-repository.js";
|
|
6
6
|
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
7
7
|
import { init_agent_session_key, resolveAgentMainConversationId } from "../../routing/agent-session-key.js";
|
|
8
|
-
import { stripEnvelopeTimestampPrefix } from "../../channels/envelope-timestamp.js";
|
|
9
|
-
import { mergeSttConfigFromAppConfig } from "../../voice/stt/config.js";
|
|
10
|
-
import "../../voice/stt/index.js";
|
|
11
8
|
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
12
|
-
import { clearPendingTranscriptUserMessage, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
|
|
13
9
|
import { abortEmbeddedRun } from "../embedded/runs.js";
|
|
10
|
+
import { clearPendingTranscriptUserMessage, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
|
|
11
|
+
import { mergeSttConfigFromAppConfig } from "../../voice/stt/config.js";
|
|
12
|
+
import "../../voice/stt/index.js";
|
|
13
|
+
import { formatAgentRunErrorForClient } from "../client-error-format.js";
|
|
14
14
|
import { resolveConfiguredActivityDetailDefault, resolveEffectiveReasoningLevel } from "../../session/thinking-resolve.js";
|
|
15
15
|
import { initSessionTurn } from "../../session/init-session-turn.js";
|
|
16
16
|
import "../../session/index.js";
|
|
17
|
+
import { getTaskContinuation } from "../../tasks/task-continuation.js";
|
|
18
|
+
import { stripEnvelopeTimestampPrefix } from "../../channels/envelope-timestamp.js";
|
|
17
19
|
import { isVoiceLikeAttachment, mergeVoiceTranscriptsIntoUserText, requestsOriginalVoiceInspection } from "../../channels/attachments/voice-stt-webchat.js";
|
|
18
20
|
import { applyReasoningVisibility } from "../streaming/reasoning-visibility.js";
|
|
19
|
-
import { formatAgentRunErrorForClient } from "../client-error-format.js";
|
|
20
21
|
import { isSessionSourceBinding, summarizeSourceContext } from "../source-context/types.js";
|
|
21
22
|
import { injectSourceContextsIntoUserMessage } from "../source-context/injector.js";
|
|
22
23
|
import { AsyncQueue, AsyncQueueOverflowError } from "./async-queue.js";
|
|
@@ -141,7 +142,7 @@ async function* runProcessDirectStreaming(deps, input) {
|
|
|
141
142
|
deps.sessionStore?.idleCompaction?.interrupt(conversationId);
|
|
142
143
|
const isConnectionResume = Boolean(input.runId && getConnectionResumeInput(conversationId, input.runId));
|
|
143
144
|
const isClarificationResume = Boolean(input.runId && getClarificationResumeInput(conversationId, input.runId));
|
|
144
|
-
const isInternalResume = isConnectionResume || isClarificationResume;
|
|
145
|
+
const isInternalResume = isConnectionResume || isClarificationResume || Boolean(input.runId && getTaskContinuation(conversationId, input.runId));
|
|
145
146
|
const isTaskUpdate = input.origin.type === "system" && input.origin.source === "task_update";
|
|
146
147
|
const { channel, chatId } = await deps.resolveSessionEndpoint(conversationId);
|
|
147
148
|
const context = deps.initDirectStreamingSession(conversationId, channel, chatId, input.origin);
|
|
@@ -402,6 +403,11 @@ async function* runProcessDirectStreaming(deps, input) {
|
|
|
402
403
|
try {
|
|
403
404
|
for await (const event of queue) yield event;
|
|
404
405
|
await taskPromise;
|
|
406
|
+
if (streamOverflowed) yield {
|
|
407
|
+
type: "error",
|
|
408
|
+
runId: input.runId,
|
|
409
|
+
content: formatStreamError("Agent stream stopped because its critical event buffer overflowed")
|
|
410
|
+
};
|
|
405
411
|
if (channel === "webchat" && ranSlashCommand) try {
|
|
406
412
|
const userMsg = {
|
|
407
413
|
role: "user",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { appendMediaToAssistantTranscriptEntry, findLatestAssistantTranscriptEntryId } from "../../storage/sqlite/transcript-repository.js";
|
|
2
2
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
3
3
|
import { isTTSAvailable } from "../../voice/tts/factory.js";
|
|
4
|
+
import { speak } from "../../voice/tts/speak-core.js";
|
|
4
5
|
import { mergeTtsConfigFromAppConfig } from "../../voice/tts/merge-config.js";
|
|
5
6
|
import { getChannelOutputFormat, shouldUseTTS } from "../../voice/tts/service.js";
|
|
6
|
-
import { speak } from "../../voice/tts/speak-core.js";
|
|
7
7
|
import { compressAudio } from "../../voice/tts/audio.js";
|
|
8
|
-
import "../../voice/tts/index.js";
|
|
9
8
|
import { persistOutboundTtsAudio } from "../../channels/attachments/outbound-tts-persist.js";
|
|
9
|
+
import "../../voice/tts/index.js";
|
|
10
10
|
import { deleteMediaUris } from "../../media/session-references.js";
|
|
11
11
|
//#region src/agent/service/webchat-tts.ts
|
|
12
12
|
init_sqlite();
|
|
@@ -103,6 +103,12 @@ export declare class AgentService {
|
|
|
103
103
|
applyRuntimeConfiguration(config: Config): void;
|
|
104
104
|
getSkillCatalog(): SkillCatalogEntry[];
|
|
105
105
|
getSkillCatalogSnapshot(): SkillCatalogSnapshot;
|
|
106
|
+
getAgentToolAvailability(agentId: string, name: string): {
|
|
107
|
+
condition: string;
|
|
108
|
+
state: "blocked" | "verified";
|
|
109
|
+
reasonCode: string;
|
|
110
|
+
detail: string;
|
|
111
|
+
};
|
|
106
112
|
getAgentSkillAvailability(agentId: string): AgentSkillAvailabilityPayload;
|
|
107
113
|
getSessionSkillAvailability(conversationId: string): Promise<AgentSkillAvailabilityPayload>;
|
|
108
114
|
getSessionWorkspaceTrust(conversationId: string): Promise<WorkspaceTrustState>;
|