@xopcai/xopc 0.0.426 → 0.0.427
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/telegram/src/adapters/security-adapter.js +1 -1
- package/dist/extensions/telegram/src/pairing-config-resolver.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 +1 -1
- package/dist/extensions/weixin/src/auth/accounts.js +2 -2
- package/dist/extensions/weixin/src/auth/pairing.js +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/cli/gateway-qr-login.js +1 -1
- package/dist/extensions/weixin/src/cli/qr-login.js +1 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
- package/dist/extensions/weixin/src/messaging/inbound.js +2 -2
- package/dist/extensions/weixin/src/messaging/process-message.js +3 -3
- package/dist/extensions/weixin/src/messaging/send.js +12 -3
- package/dist/extensions/weixin/src/monitor/monitor.js +1 -1
- package/dist/extensions/weixin/src/outbound-send.js +12 -3
- package/dist/extensions/weixin/src/pairing-config-resolver.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D4ClP_DJ.js +1 -0
- package/dist/gateway/static/root/assets/agent-plugin-dialog-m1A8wF9p.js +1 -0
- package/dist/gateway/static/root/assets/agents-B9slUA_1.js +77 -0
- package/dist/gateway/static/root/assets/app-link-DRy3-k7j.js +1 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-C8yc3yHG.js → app-management-settings-panel-XqoIBF2H.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-BELgtR3O.js → appearance-settings-9ZtqCASo.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DUeu_7iC.js +1 -0
- package/dist/gateway/static/root/assets/attachment-load-DrVGNxJm.js +1 -0
- package/dist/gateway/static/root/assets/automation-task-card-Bur78p68.js +3 -0
- package/dist/gateway/static/root/assets/{automations-page-CdIPdwF0.js → automations-page-DMIyWsP0.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-DEkDjxeU.js +9 -0
- package/dist/gateway/static/root/assets/{block-editor-BQtTLe6Q.js → block-editor-CXdlNAmZ.js} +2 -2
- package/dist/gateway/static/root/assets/{browser-automation-inputs-DeraGZ1y.js → browser-automation-inputs-Fxo7HbK6.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-SpPzRNqU.js → browser-automations-page-Dn3LN5wo.js} +2 -2
- package/dist/gateway/static/root/assets/browser-settings-page-Cpm9fEPV.js +3 -0
- package/dist/gateway/static/root/assets/{button-CnRSIP6m.js → button-Cc4hUNTt.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-DLMuj21P.js → capabilities-BEvywfF9.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-Bo2qEJhH.js +1 -0
- package/dist/gateway/static/root/assets/capabilities-page-BCzsIzvC.js +2 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-Cr67ziwX.js +8 -0
- package/dist/gateway/static/root/assets/{capability-header-actions-CTUCuBlW.js → capability-header-actions-BxMYfQ8y.js} +1 -1
- package/dist/gateway/static/root/assets/channels-CA5z5dGY.js +1 -0
- package/dist/gateway/static/root/assets/{chat-chart-block-DCzUECct.js → chat-chart-block-B39npsXj.js} +1 -1
- package/dist/gateway/static/root/assets/chat-page-D92AWJbh.js +72 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-Dl-OTkJI.js → chat-terminal-dock-DjFnElAM.js} +2 -2
- package/dist/gateway/static/root/assets/composer-payload-handoff-BQXlFKf4.js +1 -0
- package/dist/gateway/static/root/assets/{computer-settings-page-B-lGMimW.js → computer-settings-page-MkqyKyf3.js} +1 -1
- package/dist/gateway/static/root/assets/confirm-dialog-D7dQJytv.js +1 -0
- package/dist/gateway/static/root/assets/connected-providers-grid-BSvKP2u-.js +1 -0
- package/dist/gateway/static/root/assets/{connector-service-page-C8InhrMt.js → connector-service-page-DlIl9bLx.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-Vx8-MY0Y.js +1 -0
- package/dist/gateway/static/root/assets/{copy-text-row-CYIv7RfP.js → copy-text-row-CpiRzq4G.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-kqic8j73.js → date-picker-BIfjfOTM.js} +1 -1
- package/dist/gateway/static/root/assets/dependency-picker-XjPB8FJS.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-settings-BDS7_tQ_.js → desktop-pet-settings-BDjsFown.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-DH_uJ698.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-Di0h3ws4.js → directory-picker-path-field-DiZXY7jF.js} +1 -1
- package/dist/gateway/static/root/assets/{discussion-annotation-sync-ClKEyXmN.js → discussion-annotation-sync-BXqNuZnx.js} +1 -1
- package/dist/gateway/static/root/assets/dist-BGTk37IG.js +1 -0
- package/dist/gateway/static/root/assets/dist-BuHnPloF.js +1 -0
- package/dist/gateway/static/root/assets/dist-GJ8-1PAx.js +1 -0
- package/dist/gateway/static/root/assets/dist-ZrL34Ps4.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-DwB5KMGk.js → extension-debug-page-myQqsol2.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-iframe-host-Cqg1K70e.js → extension-iframe-host-DaL-OcTw.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DyrQtG82.js → extension-page-DvlGhZLa.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-C_uKqJxP.js → extension-provider-fOi6V6Cr.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BAMQHzkX.js → extension-settings-page-DOGlQpkx.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-uAboiElC.js → gateway-settings-Di41peSM.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-B3sgqrl3.js +2 -0
- package/dist/gateway/static/root/assets/{image-generation-api-CQxZSTWA.js → image-generation-api-Ce-IY7Ug.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-C90644id.js → imports-page-W7_cDbxy.js} +1 -1
- package/dist/gateway/static/root/assets/index-D4B6O8B3.js +11 -0
- package/dist/gateway/static/root/assets/index-DGWBJDAM.css +1 -0
- package/dist/gateway/static/root/assets/install-connector-dialog-DWVl9ekV.js +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CbeubKe1.js → keyboard-shortcuts-settings-Doyu0Q9e.js} +1 -1
- package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +1 -0
- package/dist/gateway/static/root/assets/local-app-workbench-page-B3h3P6aI.js +1 -0
- package/dist/gateway/static/root/assets/{local-apps-page-C6zFgwkr.js → local-apps-page-D6D2bZGW.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-CpVCvAWE.js → logs-page-qiXos_12.js} +2 -2
- package/dist/gateway/static/root/assets/management-settings-C0WcSdK7.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-DrVAMlwc.js → markdown-view-Ck5s16p9.js} +2 -2
- package/dist/gateway/static/root/assets/mcp-conversation-setup-page-CENs3hGU.js +1 -0
- package/dist/gateway/static/root/assets/model-selector-DCBmsHzj.js +1 -0
- package/dist/gateway/static/root/assets/note-detail-panel-CnuxqWMd.js +5 -0
- package/dist/gateway/static/root/assets/note-image-lightbox-BFKZ7qJr.js +1 -0
- package/dist/gateway/static/root/assets/{notes-api-CUlhTRv0.js → notes-api-8kp0X1x6.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-eoKX85K5.js → notes-page-XMdy-H3H.js} +1 -1
- package/dist/gateway/static/root/assets/{oauth-provider-connect-C8BXow79.js → oauth-provider-connect-CfOK8mPM.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-capture-button-CBFK41OS.js → page-context-capture-button-CKlKWSJ7.js} +1 -1
- package/dist/gateway/static/root/assets/personal-page-CIMMSI25.js +1 -0
- package/dist/gateway/static/root/assets/{personal-settings-panel-DnYapLo7.js → personal-settings-panel-wKdlrfPq.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-dependencies-card-DBiKtzwz.js → phone-dependencies-card-CDhk5277.js} +1 -1
- package/dist/gateway/static/root/assets/phone-model-connection-DZ-ZunPz.js +1 -0
- package/dist/gateway/static/root/assets/{phone-model-picker-BmSxEr7M.js → phone-model-picker-DuZc5jYO.js} +1 -1
- package/dist/gateway/static/root/assets/phone-settings-page-0u0GQl_R.js +1 -0
- package/dist/gateway/static/root/assets/plugin-details-dialog-Bfc-Wmrd.js +1 -0
- package/dist/gateway/static/root/assets/{popover-select-DD8fmrxH.js → popover-select-CEMWIrtY.js} +1 -1
- package/dist/gateway/static/root/assets/{preference-select-fields-Cu_ZC9Up.js → preference-select-fields-BKeHZLXZ.js} +1 -1
- package/dist/gateway/static/root/assets/{product-automation-feedback-Tn2dUJWM.js → product-automation-feedback-BPur0vyo.js} +2 -2
- package/dist/gateway/static/root/assets/{product-open-page-Nf-Oqf1h.js → product-open-page-Bfd7R483.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-D6NwUm3A.js → product-preview-content-Bnq68oVw.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-modal-BfNcGgXA.js → product-preview-modal-BPmTeweh.js} +2 -2
- package/dist/gateway/static/root/assets/project-detail-page-D9nnyvrI.js +7 -0
- package/dist/gateway/static/root/assets/{project-understanding-B1BK7Ixi.js → project-understanding-DLvxAoTT.js} +1 -1
- package/dist/gateway/static/root/assets/projects-page-BGy1pw9a.js +1 -0
- package/dist/gateway/static/root/assets/{recording-upload-RAhaLUcQ.js → recording-upload-CHFJbqW1.js} +1 -1
- package/dist/gateway/static/root/assets/{refresh-button-bU_0NarN.js → refresh-button-DiWdGAaX.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-DWsOWetc.js → remote-access-hub-BVqwnOqO.js} +1 -1
- package/dist/gateway/static/root/assets/route-preload-DI43HQV_.js +2 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BGiXeHF5.js → runtime-tools-settings-panel-ccVBG-bZ.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-BKeP5G7b.js → schema-form-C-jw6Hid.js} +1 -1
- package/dist/gateway/static/root/assets/{secret-input-BQvFXqzz.js → secret-input-Dryrns2s.js} +1 -1
- package/dist/gateway/static/root/assets/{service-recommendation-list-BEnNx0u7.js → service-recommendation-list-CNghOavt.js} +1 -1
- package/dist/gateway/static/root/assets/session-manager-Bnq3qpqy.js +23 -0
- package/dist/gateway/static/root/assets/sessions-page-CyBj1Xw2.js +1 -0
- package/dist/gateway/static/root/assets/{settings-advanced-section-CURRjsLK.js → settings-advanced-section-DwpPPxT0.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-GtsbT6as.js → settings-page-Cd8Ermnn.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-header-DBL0_u0Z.js → settings-page-header-BZl4AMiN.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-IAvpbz4A.js → settings-page-layout-onhEgq-K.js} +1 -1
- package/dist/gateway/static/root/assets/setup-interaction-page-Cvvj6JyV.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-D4qgE7QM.js +1 -0
- package/dist/gateway/static/root/assets/share-link-dialog-DA0QuFOD.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-L9KYu8M7.js → share-preview-page-YDpIY4dC.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-DUvjOMmA.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-ClyNSh-7.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-CsvcFoaJ.js → system-settings-panel-BN6sUX0H.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-CS9m7Ipo.js +2 -0
- package/dist/gateway/static/root/assets/{task-result-evidence-B8xUiwW3.js → task-result-evidence-DKygspo2.js} +1 -1
- package/dist/gateway/static/root/assets/tracing-settings-page-Bs76WeoF.js +1 -0
- package/dist/gateway/static/root/assets/{tunnel-api-BB7u79ID.js → tunnel-api-B7nx0NQJ.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-Cv4Je5XJ.js → usage-page-anU5gslJ.js} +1 -1
- package/dist/gateway/static/root/assets/use-composer-attachments-DYY3Yz4a.js +2 -0
- package/dist/gateway/static/root/assets/use-file-preview-expanded-CYgWzDnv.js +2 -0
- package/dist/gateway/static/root/assets/{use-workspace-tree-BQEiJzK7.js → use-workspace-tree-Dkg9tUr4.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-DIgPL3tN.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-DCM69u8Y.js → voice-api-key-field-BUes-Jlp.js} +1 -1
- package/dist/gateway/static/root/assets/voice-transcribe-api-Dy4hfftb.js +1 -0
- package/dist/gateway/static/root/assets/{work-discovery-overlay-CVe9UmFl.js → work-discovery-overlay-CFF4cRFl.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-page-CtqkRMN5.js → work-discovery-page-BnYaVH3V.js} +1 -1
- package/dist/gateway/static/root/assets/working-directory-picker-modal-GFwVefVA.js +1 -0
- package/dist/gateway/static/root/assets/{workspace-api-tbifz2zY.js → workspace-api-BdB4NEOh.js} +2 -2
- package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-BubQwQwU.js → workspace-file-preview-dialog-NRL3YRjg.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-open-location-menu-DZk3MBSa.js → workspace-open-location-menu-Dcij7wvJ.js} +1 -1
- package/dist/gateway/static/root/assets/{xopc-cloud-account-card-CIavPUr3.js → xopc-cloud-account-card-DC9aG7Pl.js} +1 -1
- package/dist/gateway/static/root/index.html +66 -64
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/automations.js +7 -0
- package/dist/packages/gateway-contract/src/capabilities.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +1 -0
- package/dist/src/agent/agent-manager.js +1 -0
- package/dist/src/agent/child-agent-factory.js +1 -1
- package/dist/src/agent/data-acquisition/service.js +1 -1
- package/dist/src/agent/embedded/configuration-capability-correction.d.ts +3 -0
- package/dist/src/agent/embedded/configuration-capability-correction.js +14 -0
- package/dist/src/agent/embedded/run-for-session.js +20 -5
- package/dist/src/agent/embedded/run-turn.js +13 -1
- package/dist/src/agent/embedded/session-runner.js +6 -3
- package/dist/src/agent/image/generation/openai-images-provider.js +1 -1
- package/dist/src/agent/image/load-image-media.js +1 -1
- package/dist/src/agent/inbound/inbound-loop.js +4 -1
- package/dist/src/agent/independent-execution.js +1 -1
- package/dist/src/agent/mcp/config.js +1 -1
- package/dist/src/agent/mcp/connection-drafts.d.ts +3 -1
- package/dist/src/agent/mcp/connection-drafts.js +3 -2
- package/dist/src/agent/mcp/connection-setup.js +34 -2
- package/dist/src/agent/mcp/conversation-setup.d.ts +163 -0
- package/dist/src/agent/mcp/conversation-setup.js +621 -0
- package/dist/src/agent/mcp/native-mcp.d.ts +1 -0
- package/dist/src/agent/mcp/tool-catalog.d.ts +5 -0
- package/dist/src/agent/mcp/tool-catalog.js +19 -2
- package/dist/src/agent/mcp/weixin-setup-scope.d.ts +12 -0
- package/dist/src/agent/mcp/weixin-setup-scope.js +43 -0
- package/dist/src/agent/prompt/conversational-configuration-guide.js +2 -1
- package/dist/src/agent/prompt/sections/tooling.js +3 -2
- package/dist/src/agent/prompt/service-prompt-builder.js +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +2 -2
- package/dist/src/agent/service.d.ts +2 -0
- package/dist/src/agent/service.js +11 -1
- package/dist/src/agent/service.types.d.ts +1 -0
- package/dist/src/agent/tasks/task-judge-service.js +2 -2
- package/dist/src/agent/tool-manuals/xopc-configuration.d.ts +6 -4
- package/dist/src/agent/tool-manuals/xopc-configuration.js +92 -8
- package/dist/src/agent/tools/automation-tool.d.ts +9 -1
- package/dist/src/agent/tools/automation-tool.js +34 -5
- package/dist/src/agent/tools/create-share-tool.js +1 -1
- package/dist/src/agent/tools/factory.d.ts +3 -0
- package/dist/src/agent/tools/factory.js +34 -23
- 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 +5 -4
- package/dist/src/agent/tools/mcp-setup-tool.d.ts +9 -0
- package/dist/src/agent/tools/mcp-setup-tool.js +32 -0
- package/dist/src/agent/tools/personal-task-tool.js +2 -2
- package/dist/src/agent/tools/publish-artifacts.js +1 -1
- package/dist/src/agent/tools/read.js +1 -1
- package/dist/src/agent/tools/skill-install-tool.js +56 -1
- package/dist/src/agent/tools/skill-manage-tool.d.ts +4 -0
- package/dist/src/agent/tools/skill-manage-tool.js +74 -2
- package/dist/src/agent/tools/skills-tools.js +1 -1
- package/dist/src/agent/tools/task-collaboration-tool.js +1 -1
- package/dist/src/agent/tools/tool-manual-tool.d.ts +1 -1
- package/dist/src/agent/tools/tool-manual-tool.js +3 -1
- package/dist/src/agent/tools/toolExposure.js +2 -0
- package/dist/src/agent/tools/write.js +1 -1
- package/dist/src/agent/tools/xopc-use-tool.d.ts +4 -2
- package/dist/src/agent/tools/xopc-use-tool.js +60 -10
- package/dist/src/agent-catalog/service.d.ts +1 -1
- package/dist/src/agent-catalog/service.js +2 -1
- package/dist/src/automations/capabilities/drafts.js +5 -2
- package/dist/src/automations/capabilities/read.js +18 -7
- package/dist/src/automations/capabilities/write.d.ts +111 -52
- package/dist/src/automations/capabilities/write.js +44 -10
- package/dist/src/automations/delivery/delivery-router.d.ts +1 -0
- package/dist/src/automations/delivery/delivery-router.js +7 -1
- package/dist/src/automations/domain/types.d.ts +8 -0
- package/dist/src/automations/domain/validation.d.ts +24 -0
- package/dist/src/automations/domain/validation.js +7 -0
- package/dist/src/automations/draft/automation-draft-validator.d.ts +6 -0
- package/dist/src/automations/index.js +2 -2
- package/dist/src/automations/mcp-source.d.ts +60 -0
- package/dist/src/automations/mcp-source.js +173 -0
- package/dist/src/automations/service/action-executor.js +15 -1
- package/dist/src/automations/service/automation-service.d.ts +5 -0
- package/dist/src/automations/service/automation-service.js +52 -2
- package/dist/src/automations/service/index.js +2 -2
- package/dist/src/browser/setup/repository.d.ts +1 -0
- package/dist/src/browser/setup/repository.js +7 -1
- package/dist/src/browser/setup/service.d.ts +3 -0
- package/dist/src/browser/setup/service.js +41 -18
- package/dist/src/browser/setup/types.d.ts +1 -0
- package/dist/src/channels/attachments/voice-stt-webchat.js +1 -1
- package/dist/src/channels/index.js +1 -1
- package/dist/src/channels/manager.d.ts +1 -0
- package/dist/src/channels/outbound-sender.d.ts +1 -0
- package/dist/src/channels/outbound-sender.js +3 -0
- package/dist/src/channels/pairing/pairing-service.js +1 -1
- package/dist/src/channels/weixin/account-identity.d.ts +2 -0
- package/dist/src/channels/weixin/account-identity.js +15 -0
- package/dist/src/chat-commands/builtins/config.js +1 -1
- package/dist/src/cli/commands/channels.js +2 -2
- package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +1 -1
- package/dist/src/cli/commands/mcp.js +1 -1
- package/dist/src/extensions/agent-plugins/credentials.js +1 -1
- package/dist/src/extensions/agent-plugins/setup.d.ts +1 -1
- package/dist/src/extensions/agent-plugins/setup.js +3 -3
- package/dist/src/extensions/api.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 +1 -1
- package/dist/src/gateway/hono/app.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/oauth-async.js +1 -1
- package/dist/src/gateway/hono/routes/channels.js +1 -1
- package/dist/src/gateway/hono/routes/config.js +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +1 -1
- package/dist/src/gateway/hono/routes/mcp.js +39 -2
- package/dist/src/gateway/hono/routes/notes.js +2 -2
- package/dist/src/gateway/hono/routes/phone-setup.js +33 -9
- package/dist/src/gateway/hono/routes/projects.js +1 -1
- package/dist/src/gateway/hono/routes/provider-setup.js +1 -1
- package/dist/src/gateway/hono/routes/public-gateway.js +22 -0
- package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
- package/dist/src/gateway/hono/routes/shares.js +1 -1
- package/dist/src/gateway/hono/routes/site-shares.js +1 -1
- package/dist/src/gateway/hono/routes/tasks.js +1 -1
- package/dist/src/gateway/media-access.js +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +1 -0
- package/dist/src/gateway/service/agent-runner.js +3 -1
- package/dist/src/gateway/service/config-coordinator.d.ts +1 -1
- package/dist/src/gateway/service/config-coordinator.js +2 -1
- package/dist/src/gateway/service/run-gateway-agent.js +1 -1
- package/dist/src/gateway/service/sessions-api.js +2 -1
- package/dist/src/gateway/service.d.ts +5 -1
- package/dist/src/gateway/service.js +90 -16
- package/dist/src/gateway/session-context-summary.js +1 -1
- package/dist/src/gateway/session-reset-service.d.ts +1 -0
- package/dist/src/gateway/session-reset-service.js +15 -2
- package/dist/src/home-intelligence/host.js +2 -2
- package/dist/src/notes/service.js +1 -1
- package/dist/src/personal-agent/prompts.js +1 -1
- package/dist/src/personal-agent/reply-composer.js +2 -2
- package/dist/src/personal-agent/request-service.js +3 -3
- package/dist/src/personal-agent/service.js +1 -1
- package/dist/src/personal-agent/task-cancel.js +1 -1
- package/dist/src/phone/setup/service.d.ts +14 -4
- package/dist/src/phone/setup/service.js +106 -28
- package/dist/src/projects/index.js +1 -1
- package/dist/src/projects/project-service.js +1 -1
- package/dist/src/runtime-tools/phone-dependencies.d.ts +2 -0
- package/dist/src/runtime-tools/phone-dependencies.js +10 -0
- package/dist/src/share/note-share-service.js +1 -1
- package/dist/src/share/site-proxy.js +1 -1
- package/dist/src/tasks/capabilities/write.js +1 -1
- package/dist/src/tasks/index.js +1 -1
- package/dist/src/tasks/task-allocation-service.js +3 -3
- package/dist/src/tasks/task-application-service.js +2 -2
- package/dist/src/tasks/task-context-assembler.js +1 -1
- package/dist/src/tasks/task-contract-planner.js +1 -1
- package/dist/src/tasks/task-handoff.js +1 -1
- package/dist/src/tasks/task-research-result.js +1 -1
- package/dist/src/tasks/task-run-coordinator.js +2 -2
- package/dist/src/tui/backends/embedded-backend.js +1 -1
- package/package.json +3 -1
- package/skills/tools/configure-xopc/SKILL.md +10 -3
- package/skills/tools/configure-xopc/references/browser/chrome-extension.md +4 -1
- package/skills/tools/configure-xopc/references/browser/overview.md +2 -2
- package/skills/tools/configure-xopc/references/phone/aliyun.md +3 -2
- package/skills/tools/configure-xopc/references/phone/overview.md +2 -2
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Dne9A10p.js +0 -1
- package/dist/gateway/static/root/assets/agent-plugin-dialog-BoHL-b1o.js +0 -1
- package/dist/gateway/static/root/assets/agents-CIiIlVBp.js +0 -77
- package/dist/gateway/static/root/assets/app-link-1j40sJ-z.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-vgS1CHDj.js +0 -1
- package/dist/gateway/static/root/assets/attachment-load-qjPpQzYY.js +0 -1
- package/dist/gateway/static/root/assets/automation-task-card-MnzgyTVA.js +0 -3
- package/dist/gateway/static/root/assets/automations-workspace-C3xZLafX.js +0 -9
- package/dist/gateway/static/root/assets/browser-settings-page-BD1uF_Nb.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-BGE6hiUE.js +0 -1
- package/dist/gateway/static/root/assets/capabilities-page-Bda4mSdf.js +0 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-B2B7no22.js +0 -8
- package/dist/gateway/static/root/assets/channels-NtsjZThx.js +0 -1
- package/dist/gateway/static/root/assets/chat-page-BnOCCAXG.js +0 -72
- package/dist/gateway/static/root/assets/composer-payload-handoff-CQc-VTaL.js +0 -1
- package/dist/gateway/static/root/assets/confirm-dialog-XGclfBqe.js +0 -1
- package/dist/gateway/static/root/assets/connected-providers-grid-CcXe9kz5.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-Ci0L2How.js +0 -1
- package/dist/gateway/static/root/assets/dependency-picker-cbC6-2Ya.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-_3BJFWVQ.js +0 -1
- package/dist/gateway/static/root/assets/dist-CaUuvp8-.js +0 -1
- package/dist/gateway/static/root/assets/dist-D3lWNSe7.js +0 -1
- package/dist/gateway/static/root/assets/dist-DfWfZ9iu.js +0 -1
- package/dist/gateway/static/root/assets/dist-DusecO_p.js +0 -1
- package/dist/gateway/static/root/assets/home-page-D6pCBY1V.js +0 -2
- package/dist/gateway/static/root/assets/index-Cc41XQid.css +0 -1
- package/dist/gateway/static/root/assets/index-CnOYR6jq.js +0 -11
- package/dist/gateway/static/root/assets/install-connector-dialog-BuNXON0P.js +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-CP-BkbB6.js +0 -1
- package/dist/gateway/static/root/assets/management-settings-I-pXv4ML.js +0 -1
- package/dist/gateway/static/root/assets/model-selector-CXcxc30J.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-CbpLXAVh.js +0 -5
- package/dist/gateway/static/root/assets/note-image-lightbox-cLGiF8oU.js +0 -1
- package/dist/gateway/static/root/assets/personal-page-CXR1Gy0x.js +0 -1
- package/dist/gateway/static/root/assets/phone-settings-page-vg65qilc.js +0 -1
- package/dist/gateway/static/root/assets/plugin-details-dialog-B3Hn2cbx.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-Ch-ZMyTu.js +0 -7
- package/dist/gateway/static/root/assets/projects-page-B7cetxao.js +0 -1
- package/dist/gateway/static/root/assets/route-preload-Zc5Z3fNv.js +0 -2
- package/dist/gateway/static/root/assets/session-manager-ChUtTAoG.js +0 -23
- package/dist/gateway/static/root/assets/sessions-page-Bt52kBvJ.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-A6uMpGRy.js +0 -1
- package/dist/gateway/static/root/assets/share-link-dialog-D1otGSXD.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-Bmfadz8A.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BZklXTX9.js +0 -2
- package/dist/gateway/static/root/assets/task-detail-page-SjZGW1Dx.js +0 -2
- package/dist/gateway/static/root/assets/tracing-settings-page-MvG4SH64.js +0 -1
- package/dist/gateway/static/root/assets/use-composer-attachments-vDdxHtUb.js +0 -2
- package/dist/gateway/static/root/assets/use-file-preview-expanded-Ce2mgYme.js +0 -2
- package/dist/gateway/static/root/assets/user-model-page-DRSsn4EV.js +0 -2
- package/dist/gateway/static/root/assets/voice-transcribe-api-Bbyj0yGR.js +0 -1
- package/dist/gateway/static/root/assets/working-directory-picker-modal-CDZ1xh3o.js +0 -1
|
@@ -20,19 +20,20 @@ import { CapabilityError } from "../../capabilities/runtime/errors.js";
|
|
|
20
20
|
import { getAutomationSetup } from "../../automations/configuration-conversation.js";
|
|
21
21
|
import { getEmbeddedExecutionRunId } from "../embedded/execution-context.js";
|
|
22
22
|
import "../../capabilities/runtime/dispatcher.js";
|
|
23
|
+
import { AutomationMcpSourceInput, prepareAutomationMcpSource } from "../../automations/mcp-source.js";
|
|
23
24
|
import { resolveProjectAgentId } from "../../projects/project-agent.js";
|
|
24
|
-
import "../../projects/index.js";
|
|
25
|
-
import { TaskCollaborationRepository } from "../../tasks/task-collaboration-repository.js";
|
|
26
|
-
import { defineTaskContract } from "../../tasks/task-contract-definition.js";
|
|
27
|
-
import { resolveResponseLanguageForSession } from "../prompt/response-language.js";
|
|
28
25
|
import { TaskDeletionService } from "../../tasks/task-deletion-service.js";
|
|
29
26
|
import { TaskDeleteOutputSchema } from "../../tasks/capabilities/management.js";
|
|
27
|
+
import "../../projects/index.js";
|
|
30
28
|
import { parseTaskHandoffReferences } from "../../tasks/task-handoff.js";
|
|
29
|
+
import { TaskCollaborationRepository } from "../../tasks/task-collaboration-repository.js";
|
|
31
30
|
import { TaskApplicationService } from "../../tasks/task-application-service.js";
|
|
32
31
|
import { AutomationCreateCapabilityInputSchema, AutomationUpdatePatchSchema } from "../../automations/capabilities/write.js";
|
|
32
|
+
import { resolveResponseLanguageForSession } from "../prompt/response-language.js";
|
|
33
33
|
import { TaskMutationOutputSchema } from "../../tasks/capabilities/write.js";
|
|
34
34
|
import { createProductDispatcher } from "../../capabilities/runtime/product.js";
|
|
35
35
|
import { localAppCapabilities } from "../../local-apps/capabilities/runtime.js";
|
|
36
|
+
import { defineTaskContract } from "../../tasks/task-contract-definition.js";
|
|
36
37
|
import "../../tasks/index.js";
|
|
37
38
|
import { randomUUID } from "node:crypto";
|
|
38
39
|
import { Type } from "@sinclair/typebox";
|
|
@@ -53,9 +54,10 @@ const XopcUseToolSchema = Type.Object({
|
|
|
53
54
|
Type.Literal("agent"),
|
|
54
55
|
Type.Literal("settings"),
|
|
55
56
|
Type.Literal("browser_setup"),
|
|
56
|
-
Type.Literal("phone_setup")
|
|
57
|
+
Type.Literal("phone_setup"),
|
|
58
|
+
Type.Literal("mcp_setup")
|
|
57
59
|
]),
|
|
58
|
-
command: Type.String({ description: "Context resolve takes an explicit AppContextEnvelope; never guess a current page. Automation draft/repair_draft accept prompt/id, agentId?, language?, idempotencyKey?; simulate explains an automation without running it. Local_app record_acceptance records supplied checks and sourceHash, not proof that checks were executed. Agent profile-only changes: patch_profile {id, expectedRevision, patch:{name?,description?,style?,language?,...}, idempotencyKey?} preserves omitted fields. Agent commands: list, get {id}, create {id, profile, workspace?, models?, skills?, tools?, runtime?, idempotencyKey?}, update {id, expectedRevision, patch, idempotencyKey?}, set_default {id, expectedRevision, idempotencyKey?}, disable/delete/purge {id, expectedRevision, idempotencyKey?}. Purge also removes on-disk data. Project create accepts idempotencyKey; update/pin/unpin/delete accepts {projectId, expectedVersion?, idempotencyKey?}; stable retries require the original expectedVersion. Delete preserves workspace files and does not confirm external execution stopped. Project milestone writes support idempotencyKey; update_milestone/delete_milestone require original expectedRevision for stable retries, and create_update requires original expectedVersion. TaskRun cancel accepts idempotencyKey and expectedVersion, and does not confirm external execution stopped. Automation diagnostics: get_run/run_events {runId}, metrics {}, events {eventType?, source?, limit?}, deliveries {runId?, limit?}, product_events {eventType, source?, payloadKey?, payloadValue?, limit?}; payload filters require both key and value. Recovery commands: replay_event {eventId, reason, idempotencyKey}, retry_delivery {runId, destinationKey, reason, idempotencyKey}. Automation also supports cancel/read {runId, idempotencyKey?} and read_all {projectId?, idempotencyKey?}; omitted projectId means all projects. Cancel acceptance is not confirmation of stopping. Object command. Supports project list/get/create/update/resolve_workspace/list_milestones/create_milestone/update_milestone/list_updates/create_update, automation list/get/create/update/delete/run/rerun/pause/resume/history (rerun takes runId; run/rerun accept idempotencyKey), note list/get/project_summaries/history {noteId}/snapshot {noteId, timestamp}/create/append/update/preview_edit/delete, task list/get/create/update_dependencies/add_context/remove_context/command/delete, task_run list/get/cancel, chat_preview create/revise/get, local_app list/get/create/validate, and settings open." }),
|
|
60
|
+
command: Type.String({ description: "HTTP MCP configuration: mode mcp_setup inspect/start/get/advance/cancel/set_enabled/remove; load tool_manual topic mcp. Never pass credentials or OAuth callbacks as tool arguments. Context resolve takes an explicit AppContextEnvelope; never guess a current page. Automation draft/repair_draft accept prompt/id, agentId?, language?, idempotencyKey?; simulate explains an automation without running it. Local_app record_acceptance records supplied checks and sourceHash, not proof that checks were executed. Agent profile-only changes: patch_profile {id, expectedRevision, patch:{name?,description?,style?,language?,...}, idempotencyKey?} preserves omitted fields. Agent commands: list, get {id}, create {id, profile, workspace?, models?, skills?, tools?, runtime?, idempotencyKey?}, update {id, expectedRevision, patch, idempotencyKey?}, set_default {id, expectedRevision, idempotencyKey?}, disable/delete/purge {id, expectedRevision, idempotencyKey?}. Purge also removes on-disk data. Project create accepts idempotencyKey; update/pin/unpin/delete accepts {projectId, expectedVersion?, idempotencyKey?}; stable retries require the original expectedVersion. Delete preserves workspace files and does not confirm external execution stopped. Project milestone writes support idempotencyKey; update_milestone/delete_milestone require original expectedRevision for stable retries, and create_update requires original expectedVersion. TaskRun cancel accepts idempotencyKey and expectedVersion, and does not confirm external execution stopped. Automation diagnostics: get_run/run_events {runId}, metrics {}, events {eventType?, source?, limit?}, deliveries {runId?, limit?}, product_events {eventType, source?, payloadKey?, payloadValue?, limit?}; payload filters require both key and value. Recovery commands: replay_event {eventId, reason, idempotencyKey}, retry_delivery {runId, destinationKey, reason, idempotencyKey}. Automation also supports cancel/read {runId, idempotencyKey?} and read_all {projectId?, idempotencyKey?}; omitted projectId means all projects. Cancel acceptance is not confirmation of stopping. Object command. Supports project list/get/create/update/resolve_workspace/list_milestones/create_milestone/update_milestone/list_updates/create_update, automation list/get/create/update/delete/run/rerun/pause/resume/history (rerun takes runId; run/rerun accept idempotencyKey), note list/get/project_summaries/history {noteId}/snapshot {noteId, timestamp}/create/append/update/preview_edit/delete, task list/get/create/update_dependencies/add_context/remove_context/command/delete, task_run list/get/cancel, chat_preview create/revise/get, local_app list/get/create/validate, and settings open." }),
|
|
59
61
|
args: Type.Optional(Type.Record(Type.String(), Type.Any())),
|
|
60
62
|
dryRun: Type.Optional(Type.Boolean({ description: "Validate and preview the action without mutating xopc state." }))
|
|
61
63
|
});
|
|
@@ -743,7 +745,7 @@ async function handleProject(command, args, deps, dryRun, capabilities) {
|
|
|
743
745
|
error: `Unsupported project command: ${command}`
|
|
744
746
|
};
|
|
745
747
|
}
|
|
746
|
-
async function handleAutomation(command, args, deps, dryRun, capabilities) {
|
|
748
|
+
async function handleAutomation(command, args, deps, dryRun, capabilities, toolCallId) {
|
|
747
749
|
const automations = deps.getAutomationService?.();
|
|
748
750
|
if (!automations) return {
|
|
749
751
|
ok: false,
|
|
@@ -760,7 +762,7 @@ async function handleAutomation(command, args, deps, dryRun, capabilities) {
|
|
|
760
762
|
try {
|
|
761
763
|
return (operation === "xopc.automations.delete" ? AutomationDeleteOutputSchema : operation === "xopc.automations.cancel" ? AutomationCancelOutputSchema : operation === "xopc.automations.read" ? AutomationReadOutputSchema : operation === "xopc.automations.read_all" ? AutomationReadAllOutputSchema : operation === "xopc.automations.replay_event" || operation === "xopc.automations.retry_delivery" ? AutomationRecoveryOutputSchema : operation === "xopc.automations.run" || operation === "xopc.automations.rerun" ? AutomationRunMutationOutputSchema : AutomationMutationOutputSchema).parse(await capabilities.call(operation, input, caller, {
|
|
762
764
|
...capabilities.describe(operation, caller),
|
|
763
|
-
idempotencyKey: trimString(args.idempotencyKey) ??
|
|
765
|
+
idempotencyKey: trimString(args.idempotencyKey) ?? toolCallId
|
|
764
766
|
}));
|
|
765
767
|
} catch (error) {
|
|
766
768
|
if (error instanceof CapabilityError) return {
|
|
@@ -1937,6 +1939,50 @@ function createXopcUseTool(deps) {
|
|
|
1937
1939
|
dryRun
|
|
1938
1940
|
};
|
|
1939
1941
|
if (!command) return errorText("command is required", details);
|
|
1942
|
+
if (mode === "mcp_setup") {
|
|
1943
|
+
const service = deps.getMcpSetupService?.();
|
|
1944
|
+
const conversationId = deps.getCurrentConversationId?.();
|
|
1945
|
+
const agentId = deps.getCurrentAgentId?.();
|
|
1946
|
+
if (!service || !conversationId || !agentId) return errorText("MCP setup requires a Gateway conversation.", details);
|
|
1947
|
+
if (deps.authorizeCapability && !await deps.authorizeCapability(`xopc.mcp_setup.${command}`, args)) return errorText("MCP setup access denied", details);
|
|
1948
|
+
try {
|
|
1949
|
+
return okText({
|
|
1950
|
+
...details,
|
|
1951
|
+
result: await service.command(command, args, {
|
|
1952
|
+
conversationId,
|
|
1953
|
+
agentId,
|
|
1954
|
+
canConfigure: deps.canConfigureFromConversation?.() === true,
|
|
1955
|
+
canRequestWeixinSetup: deps.canRequestWeixinMcpSetup?.() === true
|
|
1956
|
+
}, dryRun)
|
|
1957
|
+
});
|
|
1958
|
+
} catch (error) {
|
|
1959
|
+
return errorText(error instanceof Error ? error.message : String(error), details);
|
|
1960
|
+
}
|
|
1961
|
+
}
|
|
1962
|
+
if (mode === "automation" && command === "prepare_source") {
|
|
1963
|
+
const config = deps.getConfig?.();
|
|
1964
|
+
if (!config || !deps.getWorkspace) return errorText("MCP source preparation is unavailable in this runtime.", details);
|
|
1965
|
+
if (deps.authorizeCapability && !await deps.authorizeCapability("xopc.automations.prepare_source", args)) return errorText("Source preparation denied", details);
|
|
1966
|
+
const input = AutomationMcpSourceInput.parse(args);
|
|
1967
|
+
if (dryRun) return okText({
|
|
1968
|
+
...details,
|
|
1969
|
+
result: {
|
|
1970
|
+
dryRun: true,
|
|
1971
|
+
...input
|
|
1972
|
+
}
|
|
1973
|
+
});
|
|
1974
|
+
return okText({
|
|
1975
|
+
...details,
|
|
1976
|
+
result: await prepareAutomationMcpSource(input, {
|
|
1977
|
+
conversationId: deps.getCurrentConversationId?.(),
|
|
1978
|
+
agentId: deps.getCurrentAgentId?.(),
|
|
1979
|
+
canConfigure: deps.canConfigureFromConversation?.() === true,
|
|
1980
|
+
workspaceDir: deps.getWorkspace(),
|
|
1981
|
+
readConfig: () => deps.getConfig?.() ?? config,
|
|
1982
|
+
signal
|
|
1983
|
+
})
|
|
1984
|
+
});
|
|
1985
|
+
}
|
|
1940
1986
|
if (mode === "phone_setup") {
|
|
1941
1987
|
const service = deps.getPhoneSetupService?.();
|
|
1942
1988
|
const conversationId = deps.getCurrentConversationId?.();
|
|
@@ -1950,6 +1996,7 @@ function createXopcUseTool(deps) {
|
|
|
1950
1996
|
conversationId,
|
|
1951
1997
|
agentId,
|
|
1952
1998
|
canConfigure: deps.canConfigureFromConversation?.() === true,
|
|
1999
|
+
isAuthorized: deps.canConfigureFromConversation,
|
|
1953
2000
|
runId: getEmbeddedExecutionRunId()
|
|
1954
2001
|
}, dryRun)
|
|
1955
2002
|
});
|
|
@@ -2155,7 +2202,10 @@ function createXopcUseTool(deps) {
|
|
|
2155
2202
|
payloadKey: args.payloadKey,
|
|
2156
2203
|
payloadValue: args.payloadValue,
|
|
2157
2204
|
limit: args.limit
|
|
2158
|
-
} : {
|
|
2205
|
+
} : {
|
|
2206
|
+
id: args.runId ?? args.id,
|
|
2207
|
+
...command === "get_run" && args.waitMs !== void 0 ? { waitMs: args.waitMs } : {}
|
|
2208
|
+
};
|
|
2159
2209
|
const caller = {
|
|
2160
2210
|
principalId: `agent:${deps.getCurrentAgentId?.() ?? "main"}`,
|
|
2161
2211
|
surface: "agent",
|
|
@@ -2315,7 +2365,7 @@ function createXopcUseTool(deps) {
|
|
|
2315
2365
|
kind: "xopc_use",
|
|
2316
2366
|
toolCallId
|
|
2317
2367
|
}
|
|
2318
|
-
}, async () => mode === "agent" ? await handleAgent(command, args, dryRun, capabilities, deps, toolCallId, signal) : mode === "project" ? await handleProject(command, args, deps, dryRun, capabilities) : mode === "automation" ? await handleAutomation(command, args, deps, dryRun, capabilities) : mode === "note" ? await handleNote(command, args, deps, dryRun, capabilities) : mode === "task" ? await handleTask(command, args, deps, dryRun, capabilities) : mode === "task_run" ? await handleTaskRun(command, args, dryRun, deps, capabilities) : mode === "local_app" ? await handleLocalApp(command, args, deps, dryRun) : mode === "chat_preview" ? await handleChatPreview(command, args, deps, dryRun) : {
|
|
2368
|
+
}, async () => mode === "agent" ? await handleAgent(command, args, dryRun, capabilities, deps, toolCallId, signal) : mode === "project" ? await handleProject(command, args, deps, dryRun, capabilities) : mode === "automation" ? await handleAutomation(command, args, deps, dryRun, capabilities, toolCallId) : mode === "note" ? await handleNote(command, args, deps, dryRun, capabilities) : mode === "task" ? await handleTask(command, args, deps, dryRun, capabilities) : mode === "task_run" ? await handleTaskRun(command, args, dryRun, deps, capabilities) : mode === "local_app" ? await handleLocalApp(command, args, deps, dryRun) : mode === "chat_preview" ? await handleChatPreview(command, args, deps, dryRun) : {
|
|
2319
2369
|
ok: false,
|
|
2320
2370
|
error: `Unsupported mode: ${String(mode)}`
|
|
2321
2371
|
});
|
|
@@ -9,7 +9,7 @@ export declare class AgentCatalogService {
|
|
|
9
9
|
resumePendingProvisioning(): Promise<void>;
|
|
10
10
|
/** Startup recovery for catalog rows committed before their directories were provisioned. */
|
|
11
11
|
resumePendingProvisioningSync(): void;
|
|
12
|
-
update(agentIdRaw: string, patch: Partial<Omit<AgentEntry, 'id'>>, expectedRevision?: number): Promise<StoredAgent>;
|
|
12
|
+
update(agentIdRaw: string, patch: Partial<Omit<AgentEntry, 'id'>>, expectedRevision?: number, beforeCommit?: () => void): Promise<StoredAgent>;
|
|
13
13
|
/** Remove data for an Agent that has already been deleted from the catalog. */
|
|
14
14
|
purgeEntryData(entry: AgentEntry, defaultAgentId: string): Promise<void>;
|
|
15
15
|
validatePurgeEntry(entry: AgentEntry, defaultAgentId: string): void;
|
|
@@ -59,7 +59,7 @@ var AgentCatalogService = class {
|
|
|
59
59
|
}
|
|
60
60
|
this.resumePendingPurgeSync();
|
|
61
61
|
}
|
|
62
|
-
async update(agentIdRaw, patch, expectedRevision) {
|
|
62
|
+
async update(agentIdRaw, patch, expectedRevision, beforeCommit) {
|
|
63
63
|
const agentId = normalizeAgentId(agentIdRaw);
|
|
64
64
|
const current = this.repository.get(agentId);
|
|
65
65
|
if (!current) throw new Error(`Agent "${agentId}" not found`);
|
|
@@ -71,6 +71,7 @@ var AgentCatalogService = class {
|
|
|
71
71
|
id: agentId
|
|
72
72
|
};
|
|
73
73
|
await this.provision(next);
|
|
74
|
+
beforeCommit?.();
|
|
74
75
|
return this.repository.update(agentId, revision, next);
|
|
75
76
|
}
|
|
76
77
|
/** Remove data for an Agent that has already been deleted from the catalog. */
|
|
@@ -7,7 +7,7 @@ import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope
|
|
|
7
7
|
import { CapabilityError } from "../../capabilities/runtime/errors.js";
|
|
8
8
|
import { ExternalEffectNotAppliedError } from "../../capabilities/runtime/external-operations.js";
|
|
9
9
|
import { defineExternalCapability, defineReadCapability } from "../../capabilities/runtime/dispatcher.js";
|
|
10
|
-
import { AutomationCreateCapabilityInputSchema } from "./write.js";
|
|
10
|
+
import { AutomationCreateCapabilityInputSchema, materializeAutomationTrigger } from "./write.js";
|
|
11
11
|
import { simulateAutomation } from "../draft/automation-draft-validator.js";
|
|
12
12
|
import { AutomationDraftService } from "../draft/automation-draft-service.js";
|
|
13
13
|
import "../draft/index.js";
|
|
@@ -39,7 +39,10 @@ function registerAutomationDraftCapabilities(dispatcher, service, getConfig) {
|
|
|
39
39
|
output: z.object({ simulation: AutomationSimulationSchema }),
|
|
40
40
|
execute(input) {
|
|
41
41
|
try {
|
|
42
|
-
return { simulation: simulateAutomation(
|
|
42
|
+
return { simulation: simulateAutomation({
|
|
43
|
+
...input,
|
|
44
|
+
trigger: materializeAutomationTrigger(input.trigger)
|
|
45
|
+
}) };
|
|
43
46
|
} catch (error) {
|
|
44
47
|
throw new CapabilityError("INVALID_INPUT", error instanceof Error ? error.message : "Invalid automation");
|
|
45
48
|
}
|
|
@@ -2,6 +2,7 @@ import { ProductReadContracts } from "../../../packages/gateway-contract/src/cap
|
|
|
2
2
|
import { init_src } from "../../../packages/gateway-contract/src/index.js";
|
|
3
3
|
import { CapabilityError } from "../../capabilities/runtime/errors.js";
|
|
4
4
|
import { defineReadCapability } from "../../capabilities/runtime/dispatcher.js";
|
|
5
|
+
import { setTimeout } from "node:timers/promises";
|
|
5
6
|
//#region src/automations/capabilities/read.ts
|
|
6
7
|
init_src();
|
|
7
8
|
function registerAutomationReadCapabilities(dispatcher, service, projects) {
|
|
@@ -23,13 +24,23 @@ function registerAutomationReadCapabilities(dispatcher, service, projects) {
|
|
|
23
24
|
id: "xopc.automations.get_run",
|
|
24
25
|
description: "Read current run state rather than the historical submission receipt.",
|
|
25
26
|
...ProductReadContracts["xopc.automations.get_run"],
|
|
26
|
-
async execute({ id }) {
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
run
|
|
32
|
-
|
|
27
|
+
async execute({ id, waitMs }, context) {
|
|
28
|
+
const deadline = Date.now() + (waitMs ?? 0);
|
|
29
|
+
for (;;) {
|
|
30
|
+
context.signal?.throwIfAborted();
|
|
31
|
+
const run = await service.getRun(id);
|
|
32
|
+
if (!run) throw new CapabilityError("NOT_FOUND", "Run not found");
|
|
33
|
+
const remaining = deadline - Date.now();
|
|
34
|
+
if (![
|
|
35
|
+
"queued",
|
|
36
|
+
"running",
|
|
37
|
+
"cancelling"
|
|
38
|
+
].includes(run.status) || remaining <= 0) return {
|
|
39
|
+
ok: true,
|
|
40
|
+
run: { ...run }
|
|
41
|
+
};
|
|
42
|
+
await setTimeout(Math.min(250, remaining), void 0, { signal: context.signal });
|
|
43
|
+
}
|
|
33
44
|
}
|
|
34
45
|
}));
|
|
35
46
|
dispatcher.register(defineReadCapability({
|
|
@@ -1,7 +1,41 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { type CapabilityDispatcher } from '../../capabilities/runtime/dispatcher.js';
|
|
3
3
|
import { type AutomationService } from '../service/automation-service.js';
|
|
4
|
+
import type { AutomationTrigger } from '../domain/types.js';
|
|
4
5
|
import type { ProjectService } from '../../projects/project-service.js';
|
|
6
|
+
declare const triggerRequest: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
7
|
+
kind: z.ZodLiteral<"manual">;
|
|
8
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
9
|
+
kind: z.ZodLiteral<"schedule">;
|
|
10
|
+
schedule: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
11
|
+
kind: z.ZodLiteral<"once">;
|
|
12
|
+
at: z.ZodString;
|
|
13
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
14
|
+
kind: z.ZodLiteral<"interval">;
|
|
15
|
+
everyMs: z.ZodNumber;
|
|
16
|
+
anchorMs: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
18
|
+
kind: z.ZodLiteral<"cron">;
|
|
19
|
+
expr: z.ZodString;
|
|
20
|
+
tz: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
21
|
+
}, z.core.$strict>], "kind">;
|
|
22
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
23
|
+
kind: z.ZodLiteral<"webhook">;
|
|
24
|
+
secretId: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
25
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
26
|
+
kind: z.ZodLiteral<"event">;
|
|
27
|
+
eventType: z.ZodString;
|
|
28
|
+
source: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
29
|
+
payloadMatch: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>>;
|
|
30
|
+
}, z.core.$strict>], "kind">, z.ZodObject<{
|
|
31
|
+
kind: z.ZodLiteral<"schedule">;
|
|
32
|
+
schedule: z.ZodObject<{
|
|
33
|
+
kind: z.ZodLiteral<"once">;
|
|
34
|
+
afterMs: z.ZodNumber;
|
|
35
|
+
}, z.core.$strict>;
|
|
36
|
+
}, z.core.$strict>]>;
|
|
37
|
+
/** Anchor a relative one-time intent inside the receipt's single atomic execution. */
|
|
38
|
+
export declare function materializeAutomationTrigger(trigger: z.infer<typeof triggerRequest>): AutomationTrigger;
|
|
5
39
|
export declare const AutomationCreateCapabilityInputSchema: z.ZodObject<{
|
|
6
40
|
projectId: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
7
41
|
name: z.ZodString;
|
|
@@ -10,6 +44,7 @@ export declare const AutomationCreateCapabilityInputSchema: z.ZodObject<{
|
|
|
10
44
|
kind: z.ZodLiteral<"agent">;
|
|
11
45
|
agentId: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
12
46
|
instruction: z.ZodString;
|
|
47
|
+
mcpSourceId: z.ZodOptional<z.ZodString>;
|
|
13
48
|
workingDirectory: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
14
49
|
model: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
15
50
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
@@ -123,31 +158,6 @@ export declare const AutomationCreateCapabilityInputSchema: z.ZodObject<{
|
|
|
123
158
|
}, z.core.$strict>], "kind">;
|
|
124
159
|
id: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
125
160
|
description: z.ZodOptional<z.ZodString>;
|
|
126
|
-
trigger: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
127
|
-
kind: z.ZodLiteral<"manual">;
|
|
128
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
129
|
-
kind: z.ZodLiteral<"schedule">;
|
|
130
|
-
schedule: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
131
|
-
kind: z.ZodLiteral<"once">;
|
|
132
|
-
at: z.ZodString;
|
|
133
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
134
|
-
kind: z.ZodLiteral<"interval">;
|
|
135
|
-
everyMs: z.ZodNumber;
|
|
136
|
-
anchorMs: z.ZodOptional<z.ZodNumber>;
|
|
137
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
138
|
-
kind: z.ZodLiteral<"cron">;
|
|
139
|
-
expr: z.ZodString;
|
|
140
|
-
tz: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
141
|
-
}, z.core.$strict>], "kind">;
|
|
142
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
143
|
-
kind: z.ZodLiteral<"webhook">;
|
|
144
|
-
secretId: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
145
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
146
|
-
kind: z.ZodLiteral<"event">;
|
|
147
|
-
eventType: z.ZodString;
|
|
148
|
-
source: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
149
|
-
payloadMatch: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>>;
|
|
150
|
-
}, z.core.$strict>], "kind">;
|
|
151
161
|
delivery: z.ZodDefault<z.ZodObject<{
|
|
152
162
|
notificationPolicy: z.ZodDefault<z.ZodEnum<{
|
|
153
163
|
attention: "attention";
|
|
@@ -157,6 +167,11 @@ export declare const AutomationCreateCapabilityInputSchema: z.ZodObject<{
|
|
|
157
167
|
destinations: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
158
168
|
key: z.ZodString;
|
|
159
169
|
kind: z.ZodLiteral<"gateway_event">;
|
|
170
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
171
|
+
key: z.ZodString;
|
|
172
|
+
kind: z.ZodLiteral<"weixin">;
|
|
173
|
+
conversationId: z.ZodString;
|
|
174
|
+
principalId: z.ZodString;
|
|
160
175
|
}, z.core.$strict>, z.ZodObject<{
|
|
161
176
|
key: z.ZodString;
|
|
162
177
|
kind: z.ZodLiteral<"webhook">;
|
|
@@ -191,8 +206,72 @@ export declare const AutomationCreateCapabilityInputSchema: z.ZodObject<{
|
|
|
191
206
|
maxConcurrentRuns: z.ZodOptional<z.ZodNumber>;
|
|
192
207
|
disableAfterConsecutiveFailures: z.ZodOptional<z.ZodNumber>;
|
|
193
208
|
}, z.core.$strict>>;
|
|
209
|
+
trigger: z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
210
|
+
kind: z.ZodLiteral<"manual">;
|
|
211
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
212
|
+
kind: z.ZodLiteral<"schedule">;
|
|
213
|
+
schedule: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
214
|
+
kind: z.ZodLiteral<"once">;
|
|
215
|
+
at: z.ZodString;
|
|
216
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
217
|
+
kind: z.ZodLiteral<"interval">;
|
|
218
|
+
everyMs: z.ZodNumber;
|
|
219
|
+
anchorMs: z.ZodOptional<z.ZodNumber>;
|
|
220
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
221
|
+
kind: z.ZodLiteral<"cron">;
|
|
222
|
+
expr: z.ZodString;
|
|
223
|
+
tz: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
224
|
+
}, z.core.$strict>], "kind">;
|
|
225
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
226
|
+
kind: z.ZodLiteral<"webhook">;
|
|
227
|
+
secretId: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
228
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
229
|
+
kind: z.ZodLiteral<"event">;
|
|
230
|
+
eventType: z.ZodString;
|
|
231
|
+
source: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
232
|
+
payloadMatch: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>>;
|
|
233
|
+
}, z.core.$strict>], "kind">, z.ZodObject<{
|
|
234
|
+
kind: z.ZodLiteral<"schedule">;
|
|
235
|
+
schedule: z.ZodObject<{
|
|
236
|
+
kind: z.ZodLiteral<"once">;
|
|
237
|
+
afterMs: z.ZodNumber;
|
|
238
|
+
}, z.core.$strict>;
|
|
239
|
+
}, z.core.$strict>]>;
|
|
194
240
|
}, z.core.$strict>;
|
|
195
241
|
export declare const AutomationUpdatePatchSchema: z.ZodObject<{
|
|
242
|
+
trigger: z.ZodOptional<z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
243
|
+
kind: z.ZodLiteral<"manual">;
|
|
244
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
245
|
+
kind: z.ZodLiteral<"schedule">;
|
|
246
|
+
schedule: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
247
|
+
kind: z.ZodLiteral<"once">;
|
|
248
|
+
at: z.ZodString;
|
|
249
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
250
|
+
kind: z.ZodLiteral<"interval">;
|
|
251
|
+
everyMs: z.ZodNumber;
|
|
252
|
+
anchorMs: z.ZodOptional<z.ZodNumber>;
|
|
253
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
254
|
+
kind: z.ZodLiteral<"cron">;
|
|
255
|
+
expr: z.ZodString;
|
|
256
|
+
tz: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
257
|
+
}, z.core.$strict>], "kind">;
|
|
258
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
259
|
+
kind: z.ZodLiteral<"webhook">;
|
|
260
|
+
secretId: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
261
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
262
|
+
kind: z.ZodLiteral<"event">;
|
|
263
|
+
eventType: z.ZodString;
|
|
264
|
+
source: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
265
|
+
payloadMatch: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>>;
|
|
266
|
+
}, z.core.$strict>], "kind">, z.ZodObject<{
|
|
267
|
+
kind: z.ZodLiteral<"schedule">;
|
|
268
|
+
schedule: z.ZodObject<{
|
|
269
|
+
kind: z.ZodLiteral<"once">;
|
|
270
|
+
afterMs: z.ZodNumber;
|
|
271
|
+
}, z.core.$strict>;
|
|
272
|
+
}, z.core.$strict>]>>;
|
|
273
|
+
state: z.ZodOptional<z.ZodNever>;
|
|
274
|
+
management: z.ZodOptional<z.ZodNever>;
|
|
196
275
|
projectId: z.ZodOptional<z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>>;
|
|
197
276
|
name: z.ZodOptional<z.ZodString>;
|
|
198
277
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -200,6 +279,7 @@ export declare const AutomationUpdatePatchSchema: z.ZodObject<{
|
|
|
200
279
|
kind: z.ZodLiteral<"agent">;
|
|
201
280
|
agentId: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
202
281
|
instruction: z.ZodString;
|
|
282
|
+
mcpSourceId: z.ZodOptional<z.ZodString>;
|
|
203
283
|
workingDirectory: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
204
284
|
model: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
205
285
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
@@ -312,31 +392,6 @@ export declare const AutomationUpdatePatchSchema: z.ZodObject<{
|
|
|
312
392
|
}>;
|
|
313
393
|
}, z.core.$strict>], "kind">>;
|
|
314
394
|
description: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
315
|
-
trigger: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
316
|
-
kind: z.ZodLiteral<"manual">;
|
|
317
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
318
|
-
kind: z.ZodLiteral<"schedule">;
|
|
319
|
-
schedule: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
320
|
-
kind: z.ZodLiteral<"once">;
|
|
321
|
-
at: z.ZodString;
|
|
322
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
323
|
-
kind: z.ZodLiteral<"interval">;
|
|
324
|
-
everyMs: z.ZodNumber;
|
|
325
|
-
anchorMs: z.ZodOptional<z.ZodNumber>;
|
|
326
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
327
|
-
kind: z.ZodLiteral<"cron">;
|
|
328
|
-
expr: z.ZodString;
|
|
329
|
-
tz: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
330
|
-
}, z.core.$strict>], "kind">;
|
|
331
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
332
|
-
kind: z.ZodLiteral<"webhook">;
|
|
333
|
-
secretId: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
334
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
335
|
-
kind: z.ZodLiteral<"event">;
|
|
336
|
-
eventType: z.ZodString;
|
|
337
|
-
source: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
338
|
-
payloadMatch: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>>>;
|
|
339
|
-
}, z.core.$strict>], "kind">>;
|
|
340
395
|
safety: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
341
396
|
mode: z.ZodEnum<{
|
|
342
397
|
suggest_only: "suggest_only";
|
|
@@ -363,6 +418,11 @@ export declare const AutomationUpdatePatchSchema: z.ZodObject<{
|
|
|
363
418
|
destinations: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
364
419
|
key: z.ZodString;
|
|
365
420
|
kind: z.ZodLiteral<"gateway_event">;
|
|
421
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
422
|
+
key: z.ZodString;
|
|
423
|
+
kind: z.ZodLiteral<"weixin">;
|
|
424
|
+
conversationId: z.ZodString;
|
|
425
|
+
principalId: z.ZodString;
|
|
366
426
|
}, z.core.$strict>, z.ZodObject<{
|
|
367
427
|
key: z.ZodString;
|
|
368
428
|
kind: z.ZodLiteral<"webhook">;
|
|
@@ -380,7 +440,6 @@ export declare const AutomationUpdatePatchSchema: z.ZodObject<{
|
|
|
380
440
|
templateId: z.ZodString;
|
|
381
441
|
}, z.core.$strict>], "kind">>>;
|
|
382
442
|
}, z.core.$strict>>>;
|
|
383
|
-
state: z.ZodOptional<z.ZodNever>;
|
|
384
|
-
management: z.ZodOptional<z.ZodNever>;
|
|
385
443
|
}, z.core.$strict>;
|
|
386
444
|
export declare function registerAutomationWriteCapabilities(dispatcher: CapabilityDispatcher, service: AutomationService, projects?: ProjectService): void;
|
|
445
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AutomationCancelOutputSchema, AutomationDeleteInputSchema, AutomationDeleteOutputSchema, AutomationMutationOutputSchema, AutomationReadAllInputSchema, AutomationReadAllOutputSchema, AutomationReadOutputSchema, AutomationRecoveryOutputSchema, AutomationReplayEventInputSchema, AutomationRetryDeliveryInputSchema, AutomationRunMutationOutputSchema, AutomationSetEnabledInputSchema, CapabilityResourceInputSchema } from "../../../packages/gateway-contract/src/capabilities.js";
|
|
2
2
|
import { init_src } from "../../../packages/gateway-contract/src/index.js";
|
|
3
3
|
import { CapabilityError } from "../../capabilities/runtime/errors.js";
|
|
4
|
-
import { CreateAutomationSchema, UpdateAutomationSchema } from "../domain/validation.js";
|
|
4
|
+
import { AutomationTriggerSchema, CreateAutomationSchema, UpdateAutomationSchema } from "../domain/validation.js";
|
|
5
5
|
import { getAutomation } from "../storage/automation-repository.js";
|
|
6
6
|
import { getAutomationRun, markAllAutomationRunsRead, markAutomationRunRead } from "../storage/automation-run-repository.js";
|
|
7
7
|
import "../storage/index.js";
|
|
@@ -9,18 +9,43 @@ import { getAutomationEventForRun } from "../events/event-repository.js";
|
|
|
9
9
|
import "../events/index.js";
|
|
10
10
|
import { assertAutomationSetupTarget, bindAutomationSetup } from "../configuration-conversation.js";
|
|
11
11
|
import { defineAtomicCapability } from "../../capabilities/runtime/dispatcher.js";
|
|
12
|
-
import { AutomationAlreadyExistsError, AutomationAlreadyRunningError, AutomationInvalidAgentError, AutomationInvalidScheduleError } from "../service/automation-service.js";
|
|
12
|
+
import { AutomationAlreadyExistsError, AutomationAlreadyRunningError, AutomationInvalidAgentError, AutomationInvalidScheduleError, AutomationInvalidSourceError } from "../service/automation-service.js";
|
|
13
13
|
import { z } from "zod";
|
|
14
14
|
//#region src/automations/capabilities/write.ts
|
|
15
15
|
init_src();
|
|
16
|
+
const triggerRequest = z.union([AutomationTriggerSchema, z.object({
|
|
17
|
+
kind: z.literal("schedule"),
|
|
18
|
+
schedule: z.object({
|
|
19
|
+
kind: z.literal("once"),
|
|
20
|
+
afterMs: z.number().int().min(1).max(366 * 864e5)
|
|
21
|
+
}).strict()
|
|
22
|
+
}).strict()]);
|
|
23
|
+
/** Anchor a relative one-time intent inside the receipt's single atomic execution. */
|
|
24
|
+
function materializeAutomationTrigger(trigger) {
|
|
25
|
+
if (trigger.kind !== "schedule") return trigger;
|
|
26
|
+
const schedule = trigger.schedule;
|
|
27
|
+
return "afterMs" in schedule ? {
|
|
28
|
+
kind: "schedule",
|
|
29
|
+
schedule: {
|
|
30
|
+
kind: "once",
|
|
31
|
+
at: new Date(Date.now() + schedule.afterMs).toISOString()
|
|
32
|
+
}
|
|
33
|
+
} : {
|
|
34
|
+
kind: "schedule",
|
|
35
|
+
schedule
|
|
36
|
+
};
|
|
37
|
+
}
|
|
16
38
|
const AutomationCreateCapabilityInputSchema = CreateAutomationSchema.omit({
|
|
17
39
|
state: true,
|
|
18
|
-
management: true
|
|
19
|
-
|
|
20
|
-
|
|
40
|
+
management: true,
|
|
41
|
+
trigger: true
|
|
42
|
+
}).extend({ trigger: triggerRequest }).refine((input) => input.action.kind !== "system", { message: "System actions can only be created by the runtime" });
|
|
43
|
+
const AutomationUpdatePatchSchema = z.object({
|
|
44
|
+
...UpdateAutomationSchema.shape,
|
|
45
|
+
trigger: triggerRequest.optional(),
|
|
21
46
|
state: z.never().optional(),
|
|
22
47
|
management: z.never().optional()
|
|
23
|
-
});
|
|
48
|
+
}).strict().refine((data) => Object.keys(data).length > 0, { message: "At least one field must be provided" });
|
|
24
49
|
function assertManagedOperation(automation, operation, patch) {
|
|
25
50
|
const management = automation.management;
|
|
26
51
|
if (!management) return;
|
|
@@ -39,7 +64,7 @@ function validateSchedule(operation) {
|
|
|
39
64
|
try {
|
|
40
65
|
return operation();
|
|
41
66
|
} catch (error) {
|
|
42
|
-
if (error instanceof AutomationInvalidScheduleError || error instanceof AutomationInvalidAgentError) throw new CapabilityError("INVALID_INPUT", error.message);
|
|
67
|
+
if (error instanceof AutomationInvalidScheduleError || error instanceof AutomationInvalidAgentError || error instanceof AutomationInvalidSourceError) throw new CapabilityError("INVALID_INPUT", error.message);
|
|
43
68
|
throw error;
|
|
44
69
|
}
|
|
45
70
|
}
|
|
@@ -198,7 +223,11 @@ function registerAutomationWriteCapabilities(dispatcher, service, projects) {
|
|
|
198
223
|
requireProject(input.projectId);
|
|
199
224
|
assertAutomationSetupTarget(context.conversationId);
|
|
200
225
|
try {
|
|
201
|
-
const automation = validateSchedule(() => service.createAtomically(
|
|
226
|
+
const automation = validateSchedule(() => service.createAtomically({
|
|
227
|
+
...input,
|
|
228
|
+
delivery: service.bindConversationDelivery(context.conversationId, input.delivery),
|
|
229
|
+
trigger: materializeAutomationTrigger(input.trigger)
|
|
230
|
+
}));
|
|
202
231
|
bindAutomationSetup(context.conversationId, automation.id);
|
|
203
232
|
return {
|
|
204
233
|
ok: true,
|
|
@@ -226,9 +255,14 @@ function registerAutomationWriteCapabilities(dispatcher, service, projects) {
|
|
|
226
255
|
if (current.updatedAtMs !== expectedRevision) throw new CapabilityError("REVISION_CONFLICT", "Automation changed");
|
|
227
256
|
assertManagedOperation(current, "update", patch);
|
|
228
257
|
requireProject(patch.projectId);
|
|
258
|
+
const { trigger, ...fields } = patch;
|
|
229
259
|
return {
|
|
230
260
|
ok: true,
|
|
231
|
-
automation: { ...validateSchedule(() => service.updateAtomically(id,
|
|
261
|
+
automation: { ...validateSchedule(() => service.updateAtomically(id, {
|
|
262
|
+
...fields,
|
|
263
|
+
...fields.delivery ? { delivery: service.bindConversationDelivery(context.conversationId, fields.delivery) } : {},
|
|
264
|
+
...trigger ? { trigger: materializeAutomationTrigger(trigger) } : {}
|
|
265
|
+
})) }
|
|
232
266
|
};
|
|
233
267
|
}
|
|
234
268
|
}));
|
|
@@ -258,4 +292,4 @@ function registerAutomationWriteCapabilities(dispatcher, service, projects) {
|
|
|
258
292
|
}));
|
|
259
293
|
}
|
|
260
294
|
//#endregion
|
|
261
|
-
export { AutomationCreateCapabilityInputSchema, AutomationUpdatePatchSchema, registerAutomationWriteCapabilities };
|
|
295
|
+
export { AutomationCreateCapabilityInputSchema, AutomationUpdatePatchSchema, materializeAutomationTrigger, registerAutomationWriteCapabilities };
|
|
@@ -27,6 +27,7 @@ export declare class AutomationDeliveryRouter {
|
|
|
27
27
|
private readonly owner;
|
|
28
28
|
private readonly abortController;
|
|
29
29
|
constructor(options?: {
|
|
30
|
+
deliverWeixin?: (conversationId: string, principalId: string, run: AutomationRun) => Promise<void>;
|
|
30
31
|
deliverGatewayEvent?: (run: AutomationRun, context: AutomationRunDeliveryContext) => void | Promise<void>;
|
|
31
32
|
onDeadLetter?: (input: {
|
|
32
33
|
phase: 'result_delivery';
|
|
@@ -123,6 +123,11 @@ var AutomationDeliveryRouter = class {
|
|
|
123
123
|
...typeof config.projectId === "string" ? { projectId: config.projectId } : {}
|
|
124
124
|
});
|
|
125
125
|
});
|
|
126
|
+
this.register("weixin", ({ run, config }) => {
|
|
127
|
+
if (config.notificationPolicy === "none" || config.notificationPolicy === "attention" && !config.requiresAttention) return;
|
|
128
|
+
if (!this.options.deliverWeixin) throw new Error("Weixin delivery is unavailable. Delivery will retry.");
|
|
129
|
+
return this.options.deliverWeixin(String(config.conversationId), String(config.principalId), run);
|
|
130
|
+
});
|
|
126
131
|
this.register("webhook", (input) => this.postWebhook(input));
|
|
127
132
|
}
|
|
128
133
|
register(kind, handler) {
|
|
@@ -157,7 +162,8 @@ var AutomationDeliveryRouter = class {
|
|
|
157
162
|
next_attempt_at_ms, created_at_ms, updated_at_ms
|
|
158
163
|
) VALUES (?, ?, ?, ?, 'pending', ?, 0, ?, ?, ?)`);
|
|
159
164
|
for (const destination of destinations) {
|
|
160
|
-
|
|
165
|
+
if (destination.kind === "weixin" && (automation.delivery.notificationPolicy === "none" || automation.delivery.notificationPolicy === "attention" && run.status === "succeeded" && (automation.safety?.mode ?? "auto_apply") === "auto_apply")) continue;
|
|
166
|
+
const config = destination.kind === "gateway_event" || destination.kind === "weixin" ? {
|
|
161
167
|
...destination,
|
|
162
168
|
notificationPolicy: automation.delivery.notificationPolicy,
|
|
163
169
|
requiresAttention: run.status !== "succeeded" || (automation.safety?.mode ?? "auto_apply") !== "auto_apply",
|
|
@@ -30,6 +30,7 @@ export type AutomationAction = {
|
|
|
30
30
|
kind: 'agent';
|
|
31
31
|
agentId?: string;
|
|
32
32
|
instruction: string;
|
|
33
|
+
mcpSourceId?: string;
|
|
33
34
|
workingDirectory?: string;
|
|
34
35
|
model?: string;
|
|
35
36
|
timeoutSeconds?: number;
|
|
@@ -59,6 +60,11 @@ export type AutomationNotificationPolicy = 'attention' | 'all' | 'none';
|
|
|
59
60
|
export type AutomationDeliveryDestination = {
|
|
60
61
|
key: string;
|
|
61
62
|
kind: 'gateway_event';
|
|
63
|
+
} | {
|
|
64
|
+
key: string;
|
|
65
|
+
kind: 'weixin';
|
|
66
|
+
conversationId: string;
|
|
67
|
+
principalId: string;
|
|
62
68
|
} | {
|
|
63
69
|
key: string;
|
|
64
70
|
kind: 'webhook';
|
|
@@ -312,6 +318,7 @@ export interface PrepareAutomationAgentSessionInput {
|
|
|
312
318
|
runId: string;
|
|
313
319
|
}
|
|
314
320
|
export interface AutomationDeps {
|
|
321
|
+
getConfig?: () => unknown;
|
|
315
322
|
agentService?: {
|
|
316
323
|
sessionConfig?: {
|
|
317
324
|
applyAutomationWorkingDirectory?: (conversationId: string, workingDirectory: string | undefined) => Promise<void>;
|
|
@@ -349,6 +356,7 @@ export interface AutomationDeps {
|
|
|
349
356
|
error?: string;
|
|
350
357
|
}>;
|
|
351
358
|
};
|
|
359
|
+
onWeixinRunCompleted?: (conversationId: string, principalId: string, run: AutomationRun) => Promise<void>;
|
|
352
360
|
onRunCompleted?: (run: AutomationRun, context: AutomationRunDeliveryContext) => void | Promise<void>;
|
|
353
361
|
onEvent?: (event: AutomationEventEnvelope, signal?: AbortSignal) => void | Promise<void>;
|
|
354
362
|
onReliabilityAttention?: (input: {
|