@xopcai/xopc 0.0.142 → 0.0.143
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/README.md +1 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/activity-center-store-jITiX2vJ.js +1 -0
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BawPxiu5.js → agent-avatar-dicebear-DiME9u_P.js} +1 -1
- package/dist/gateway/static/root/assets/agents-DzBXhZXO.js +2 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-81xd1p9R.js → app-management-settings-panel-Cuo7SbUP.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DYeQsYU8.js → appearance-settings-DUfdNQqk.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-CKuKK5AU.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-D_oa7oti.js → archive-plugin-B-Qk6cGr.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-Cd-bwI2N.js → attachment-load-Di6EEbQX.js} +1 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-DGxvRxtO.js +1 -0
- package/dist/gateway/static/root/assets/automations-page-D-FF_WKV.js +4 -0
- package/dist/gateway/static/root/assets/{binary-plugins-O8svLKWw.js → binary-plugins-ZaOZDH2I.js} +1 -1
- package/dist/gateway/static/root/assets/block-editor-BTFhjWfg.js +184 -0
- package/dist/gateway/static/root/assets/browser-settings-page-BvKLdEQt.js +8 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-dJy1Eqgx.js → capability-presets-api-BU-pVZiZ.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-DgyeEwzh.js +2 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-Bfuhp2ty.js → channel-recipient-api-DuulnhIj.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-BbVsdD_I.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +1 -0
- package/dist/gateway/static/root/assets/check-BODqo66o.js +1 -0
- package/dist/gateway/static/root/assets/chunk-QUQL4437-DXsxWP7r.js +4 -0
- package/dist/gateway/static/root/assets/circle-alert-RzVebuX2.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-B8QqVy3I.js +2 -0
- package/dist/gateway/static/root/assets/{desktop-pet-DFMfIb5F.js → desktop-pet---yzVxVR.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-Dc3gqBJE.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-BrYt1gAr.js → directory-picker-path-field-DCmOGLtK.js} +1 -1
- package/dist/gateway/static/root/assets/dreaming-settings-BgT5KZVe.js +3 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-Bh630pLD.js → extension-debug-page-ByaKTTq4.js} +1 -1
- package/dist/gateway/static/root/assets/extension-page-BmRzHAZr.js +1 -0
- package/dist/gateway/static/root/assets/extension-settings-page-JUtwIhbF.js +1 -0
- package/dist/gateway/static/root/assets/{fetch-B1WtuprY.js → fetch-8QNN25Sh.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-De2N821l.js → gateway-config-api-CxicF50_.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-Bz2I_EO5.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-nEujFSDj.js → gateway-startup-retry-5YBnS9Fj.js} +1 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-VcoyuZGN.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-Cilkap2G.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-DUy3eEse.js → goals-config-api-CwcHRdC0.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-C6eoni4z.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-o4i-qAOS.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-DQQkETX8.js +1 -0
- package/dist/gateway/static/root/assets/index-BKRqeRHm.js +257 -0
- package/dist/gateway/static/root/assets/index-CphxClbs.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CVIwwM15.js → keyboard-shortcuts-settings-LT6qB-ua.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-Dli2e3fS.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-B_6us9j7.js → markdown-split-Dw-yE2-y.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-D_fryIyj.js → media-plugins-D9NNNUgE.js} +1 -1
- package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +5 -0
- package/dist/gateway/static/root/assets/models-hub-panel-DVn2Q1Ik.js +2 -0
- package/dist/gateway/static/root/assets/notes-page-CRgbJGgk.js +1 -0
- package/dist/gateway/static/root/assets/notes-workbench-BxZRHLWx.js +2 -0
- package/dist/gateway/static/root/assets/{page-tabs-D_8jGlqx.js → page-tabs-D4hkWVt_.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-BBLMK8Mp.js → preview-open-alternatives-CIckv0uy.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-Doz53xLn.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DoMtcRLg.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-BeHVEgrm.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-DVS3FR5r.js → save-bar-controls-B0b42kB2.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-D6vKd6-T.js → schedule-field-BtjEkczK.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-BPy4lbIh.js → schema-form-Bf0bk3i6.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-Bk4bQsBe.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-DdFyaRMm.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-WzdikxPt.js → settings-collapsible-section-BTKTdTNX.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-CvfzhBV-.js → settings-form-section-DL4P0sAj.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-BxR-Ulhi.js → settings-loading-skeleton-BV6KFNj4.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-B_4DsX5W.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-layout-CKefvbYi.js → settings-page-layout-CyGlrInB.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DJ1_MLgX.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-BQBV7YrV.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-0VuFLBeU.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DO87Ckeo.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-D3VdtxAn.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-BokgAgf7.js → system-settings-panel-D85fBBuI.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-BwHlNL3L.js → typed-models-lib-CwEuYrHX.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-DR11ap3A.js → use-channel-catalog-COXIfXcl.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-m9JVQ73F.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-fields-editor-DtQiuY7E.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-settings-panel-CWM0fEpb.js +1 -0
- package/dist/gateway/static/root/assets/{utils-BKUWB-TT.js → utils--BO6xT3u.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-LoT3wgZ9.js +1 -0
- package/dist/gateway/static/root/assets/with-selector-aYPsXwdl.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-DSTMz_mO.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CL_rnAUB.js → workflow-run-setup-panel-B35lJzvm.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-BfSm9oR8.js +11 -0
- package/dist/gateway/static/root/assets/workflows-page-DLioOiRN.css +1 -0
- package/dist/gateway/static/root/connector-icons/README.md +11 -0
- package/dist/gateway/static/root/connector-icons/airtable.svg +13 -0
- package/dist/gateway/static/root/connector-icons/asana.svg +15 -0
- package/dist/gateway/static/root/connector-icons/brave-search.svg +1 -0
- package/dist/gateway/static/root/connector-icons/clickup.svg +19 -0
- package/dist/gateway/static/root/connector-icons/composio.svg +266 -0
- package/dist/gateway/static/root/connector-icons/discord.svg +15 -0
- package/dist/gateway/static/root/connector-icons/dropbox.svg +152 -0
- package/dist/gateway/static/root/connector-icons/excel.svg +56 -0
- package/dist/gateway/static/root/connector-icons/fetch.svg +6 -0
- package/dist/gateway/static/root/connector-icons/figma.svg +178 -0
- package/dist/gateway/static/root/connector-icons/filesystem.svg +6 -0
- package/dist/gateway/static/root/connector-icons/github.svg +10 -0
- package/dist/gateway/static/root/connector-icons/gmail.svg +3 -0
- package/dist/gateway/static/root/connector-icons/google-calendar.svg +3 -0
- package/dist/gateway/static/root/connector-icons/google-docs.svg +25 -0
- package/dist/gateway/static/root/connector-icons/google-drive.svg +25 -0
- package/dist/gateway/static/root/connector-icons/google-sheets.svg +1 -0
- package/dist/gateway/static/root/connector-icons/hubspot.svg +142 -0
- package/dist/gateway/static/root/connector-icons/jira.svg +15 -0
- package/dist/gateway/static/root/connector-icons/linear.svg +5 -0
- package/dist/gateway/static/root/connector-icons/memory.svg +5 -0
- package/dist/gateway/static/root/connector-icons/microsoft-teams.svg +33 -0
- package/dist/gateway/static/root/connector-icons/notion.svg +5 -0
- package/dist/gateway/static/root/connector-icons/one-drive.svg +13 -0
- package/dist/gateway/static/root/connector-icons/outlook.svg +76 -0
- package/dist/gateway/static/root/connector-icons/playwright.svg +9 -0
- package/dist/gateway/static/root/connector-icons/salesforce.svg +17 -0
- package/dist/gateway/static/root/connector-icons/sequential-thinking.svg +8 -0
- package/dist/gateway/static/root/connector-icons/shopify.svg +5 -0
- package/dist/gateway/static/root/connector-icons/slack.svg +9 -0
- package/dist/gateway/static/root/connector-icons/spotify.svg +43 -0
- package/dist/gateway/static/root/connector-icons/stripe.svg +11 -0
- package/dist/gateway/static/root/connector-icons/telegram.svg +130 -0
- package/dist/gateway/static/root/connector-icons/time.svg +6 -0
- package/dist/gateway/static/root/connector-icons/todoist.svg +277 -0
- package/dist/gateway/static/root/connector-icons/trello.svg +19 -0
- package/dist/gateway/static/root/connector-icons/twitter.svg +128 -0
- package/dist/gateway/static/root/connector-icons/whatsapp.svg +61 -0
- package/dist/gateway/static/root/connector-icons/youtube.svg +11 -0
- package/dist/gateway/static/root/index.html +9 -6
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +2 -0
- package/dist/src/agent/agent-manager.js +8 -0
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/background-review/prompts.d.ts +1 -1
- package/dist/src/agent/background-review/prompts.js +3 -2
- package/dist/src/agent/background-review/prompts.js.map +1 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
- package/dist/src/agent/embedded/xopc-tools-bridge.d.ts +9 -0
- package/dist/src/agent/embedded/xopc-tools-bridge.js +71 -3
- package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
- package/dist/src/agent/goals/post-turn.js +5 -4
- package/dist/src/agent/goals/post-turn.js.map +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +4 -1
- package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
- package/dist/src/agent/memory/context/planner.d.ts +1 -0
- package/dist/src/agent/memory/context/planner.js +60 -14
- package/dist/src/agent/memory/context/planner.js.map +1 -1
- package/dist/src/agent/memory/context/types.d.ts +3 -1
- package/dist/src/agent/memory/lifecycle.d.ts +11 -0
- package/dist/src/agent/memory/lifecycle.js +50 -0
- package/dist/src/agent/memory/lifecycle.js.map +1 -0
- package/dist/src/agent/memory/source-origin.d.ts +3 -0
- package/dist/src/agent/memory/source-origin.js +19 -0
- package/dist/src/agent/memory/source-origin.js.map +1 -0
- package/dist/src/agent/memory/understanding/service.js +5 -0
- package/dist/src/agent/memory/understanding/service.js.map +1 -1
- package/dist/src/agent/memory/user-context-coordinator.js +7 -2
- package/dist/src/agent/memory/user-context-coordinator.js.map +1 -1
- package/dist/src/agent/prompt/sections/behavior.d.ts +2 -0
- package/dist/src/agent/prompt/sections/behavior.js +30 -1
- package/dist/src/agent/prompt/sections/behavior.js.map +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +1 -1
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +8 -1
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/prompt/system-prompt.d.ts +2 -0
- package/dist/src/agent/prompt/system-prompt.js +6 -3
- package/dist/src/agent/prompt/system-prompt.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +22 -0
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service.d.ts +2 -0
- package/dist/src/agent/service.js +9 -3
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/starter-agents.js +1 -1
- package/dist/src/agent/starter-agents.js.map +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -1
- package/dist/src/agent/tools/composio-tool.d.ts +18 -5
- package/dist/src/agent/tools/composio-tool.js +252 -35
- package/dist/src/agent/tools/composio-tool.js.map +1 -1
- package/dist/src/agent/tools/factory.js +7 -3
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/index.d.ts +1 -1
- package/dist/src/agent/tools/index.js +2 -2
- package/dist/src/agent/tools/workflow-tool.d.ts +0 -1
- package/dist/src/agent/tools/workflow-tool.js +3 -16
- package/dist/src/agent/tools/workflow-tool.js.map +1 -1
- package/dist/src/agent/workflow/builtins/index.d.ts +2 -28
- package/dist/src/agent/workflow/builtins/index.js +226 -41
- package/dist/src/agent/workflow/builtins/index.js.map +1 -1
- package/dist/src/agent/workflow/catalog.d.ts +32 -34
- package/dist/src/agent/workflow/catalog.js +158 -154
- package/dist/src/agent/workflow/catalog.js.map +1 -1
- package/dist/src/agent/workflow/index.d.ts +4 -6
- package/dist/src/agent/workflow/index.js +2 -5
- package/dist/src/agent/workflow/snapshot.d.ts +2 -2
- package/dist/src/agent/workflow/snapshot.js +2 -2
- package/dist/src/agent/workflow/snapshot.js.map +1 -1
- package/dist/src/agent/workflow/structured-output-tool.d.ts +2 -2
- package/dist/src/agent/workflow/structured-output-tool.js +2 -2
- package/dist/src/agent/workflow/structured-output-tool.js.map +1 -1
- package/dist/src/agent/workflow/subagent-runner.js +1 -1
- package/dist/src/agent/workflow/types.d.ts +31 -26
- package/dist/src/agent-manifest/index.d.ts +1 -0
- package/dist/src/agent-manifest/index.js +3 -1
- package/dist/src/agent-manifest/index.js.map +1 -1
- package/dist/src/agent-manifest/preset-chain.d.ts +10 -0
- package/dist/src/agent-manifest/preset-chain.js +32 -0
- package/dist/src/agent-manifest/preset-chain.js.map +1 -0
- package/dist/src/agent-manifest/resolver.js +3 -10
- package/dist/src/agent-manifest/resolver.js.map +1 -1
- package/dist/src/agent-manifest/schema.d.ts +4 -4
- package/dist/src/automations/api/routes.js +13 -1
- package/dist/src/automations/api/routes.js.map +1 -1
- package/dist/src/automations/domain/validation.d.ts +14 -14
- package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
- package/dist/src/browser/providers/browser-ext-install.d.ts +11 -1
- package/dist/src/browser/providers/browser-ext-install.js +39 -14
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/capabilities/store-connector.d.ts +0 -1
- package/dist/src/capabilities/store-connector.js +3 -5
- package/dist/src/capabilities/store-connector.js.map +1 -1
- package/dist/src/chat-commands/builtins/review.js +72 -73
- package/dist/src/chat-commands/builtins/review.js.map +1 -1
- package/dist/src/chat-commands/builtins/workflow.js +9 -54
- package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/extension-create.js +2 -2
- package/dist/src/cli/commands/extension-create.js.map +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +42 -36
- package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
- package/dist/src/cli/commands/extension-pack.d.ts +6 -0
- package/dist/src/cli/commands/extension-pack.js +3 -2
- package/dist/src/cli/commands/extension-pack.js.map +1 -1
- package/dist/src/commands/agents.config.d.ts +1 -0
- package/dist/src/commands/agents.config.js +1 -0
- package/dist/src/commands/agents.config.js.map +1 -1
- package/dist/src/config/schema.d.ts +6 -6
- package/dist/src/config/schema.js +6 -22
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +1 -1
- package/dist/src/connectors/approval.d.ts +2 -0
- package/dist/src/connectors/approval.js +33 -0
- package/dist/src/connectors/approval.js.map +1 -0
- package/dist/src/connectors/auth-provider-registry.d.ts +9 -0
- package/dist/src/connectors/auth-provider-registry.js +17 -0
- package/dist/src/connectors/auth-provider-registry.js.map +1 -0
- package/dist/src/connectors/builtin-catalog.js +55 -116
- package/dist/src/connectors/builtin-catalog.js.map +1 -1
- package/dist/src/connectors/catalog.js +7 -2
- package/dist/src/connectors/catalog.js.map +1 -1
- package/dist/src/connectors/composio-catalog.d.ts +19 -0
- package/dist/src/connectors/composio-catalog.js +237 -0
- package/dist/src/connectors/composio-catalog.js.map +1 -0
- package/dist/src/connectors/composio-logo.d.ts +1 -0
- package/dist/src/connectors/composio-logo.js +51 -0
- package/dist/src/connectors/composio-logo.js.map +1 -0
- package/dist/src/connectors/composio-sessions.d.ts +116 -0
- package/dist/src/connectors/composio-sessions.js +296 -0
- package/dist/src/connectors/composio-sessions.js.map +1 -0
- package/dist/src/connectors/composio-triggers.d.ts +17 -0
- package/dist/src/connectors/composio-triggers.js +48 -5
- package/dist/src/connectors/composio-triggers.js.map +1 -1
- package/dist/src/connectors/composio.d.ts +31 -2
- package/dist/src/connectors/composio.js +374 -151
- package/dist/src/connectors/composio.js.map +1 -1
- package/dist/src/connectors/connector-memory-sync.d.ts +15 -0
- package/dist/src/connectors/connector-memory-sync.js +90 -0
- package/dist/src/connectors/connector-memory-sync.js.map +1 -0
- package/dist/src/connectors/install.js +35 -92
- package/dist/src/connectors/install.js.map +1 -1
- package/dist/src/connectors/instances.js +6 -2
- package/dist/src/connectors/instances.js.map +1 -1
- package/dist/src/connectors/integration-strategy.d.ts +3 -0
- package/dist/src/connectors/integration-strategy.js +29 -0
- package/dist/src/connectors/integration-strategy.js.map +1 -0
- package/dist/src/connectors/policy.d.ts +13 -0
- package/dist/src/connectors/policy.js +48 -0
- package/dist/src/connectors/policy.js.map +1 -0
- package/dist/src/connectors/providers.js +1 -1
- package/dist/src/connectors/runtime-adapter-registry.d.ts +25 -0
- package/dist/src/connectors/runtime-adapter-registry.js +154 -0
- package/dist/src/connectors/runtime-adapter-registry.js.map +1 -0
- package/dist/src/connectors/types.d.ts +113 -4
- package/dist/src/connectors/workflow-preflight.d.ts +20 -0
- package/dist/src/connectors/workflow-preflight.js +70 -0
- package/dist/src/connectors/workflow-preflight.js.map +1 -0
- package/dist/src/extensions/install-transaction.d.ts +16 -0
- package/dist/src/extensions/install-transaction.js +76 -0
- package/dist/src/extensions/install-transaction.js.map +1 -0
- package/dist/src/extensions/install.d.ts +2 -0
- package/dist/src/extensions/install.js +23 -1
- package/dist/src/extensions/install.js.map +1 -1
- package/dist/src/gateway/agents-admin.d.ts +2 -0
- package/dist/src/gateway/agents-admin.js +7 -0
- package/dist/src/gateway/agents-admin.js.map +1 -1
- package/dist/src/gateway/capability-presets-admin.d.ts +11 -0
- package/dist/src/gateway/capability-presets-admin.js +11 -4
- package/dist/src/gateway/capability-presets-admin.js.map +1 -1
- package/dist/src/gateway/chat-stream/mapper.js +17 -0
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
- package/dist/src/gateway/chat-stream/protocol.d.ts +18 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -3
- package/dist/src/gateway/hono/routes/agents.js +3 -0
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/capability-presets.js +19 -1
- package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -1
- package/dist/src/gateway/hono/routes/connectors.js +188 -25
- package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
- package/dist/src/gateway/hono/routes/goals.js +22 -3
- package/dist/src/gateway/hono/routes/goals.js.map +1 -1
- package/dist/src/gateway/hono/routes/home.d.ts +60 -1
- package/dist/src/gateway/hono/routes/home.js +244 -18
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/memory.js +14 -1
- package/dist/src/gateway/hono/routes/memory.js.map +1 -1
- package/dist/src/gateway/hono/routes/projects.js +103 -2
- package/dist/src/gateway/hono/routes/projects.js.map +1 -1
- package/dist/src/gateway/hono/routes/public-gateway.js +93 -0
- package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +137 -22
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
- package/dist/src/gateway/hono/routes/you.d.ts +23 -0
- package/dist/src/gateway/hono/routes/you.js +538 -0
- package/dist/src/gateway/hono/routes/you.js.map +1 -0
- package/dist/src/gateway/hono/sse.d.ts +2 -1
- package/dist/src/gateway/hono/sse.js +2 -1
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +13 -1
- package/dist/src/gateway/service/marketplace-service.js +96 -40
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service.d.ts +2 -0
- package/dist/src/gateway/service.js +7 -1
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-service.d.ts +7 -5
- package/dist/src/goals/goal-service.js +25 -13
- package/dist/src/goals/goal-service.js.map +1 -1
- package/dist/src/goals/goal-store.js +46 -7
- package/dist/src/goals/goal-store.js.map +1 -1
- package/dist/src/goals/types.d.ts +24 -0
- package/dist/src/storage/sqlite/connector-repository.d.ts +49 -0
- package/dist/src/storage/sqlite/connector-repository.js +385 -0
- package/dist/src/storage/sqlite/connector-repository.js.map +1 -0
- package/dist/src/storage/sqlite/index.d.ts +3 -0
- package/dist/src/storage/sqlite/index.js +4 -1
- package/dist/src/storage/sqlite/migrations/030_connectors.sql +94 -0
- package/dist/src/storage/sqlite/migrations/031_connector_approvals.sql +24 -0
- package/dist/src/storage/sqlite/migrations/032_connector_webhook_deliveries.sql +15 -0
- package/dist/src/storage/sqlite/migrations/033_user_trust_policies.sql +6 -0
- package/dist/src/storage/sqlite/migrations/034_allow_global_auto_trust.sql +14 -0
- package/dist/src/storage/sqlite/migrations/035_user_profile_prompt_state.sql +7 -0
- package/dist/src/storage/sqlite/migrations/036_goal_outcome_metric.sql +12 -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/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/user-profile-setup-repository.js +34 -0
- package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +1 -0
- package/dist/src/storage/sqlite/user-trust-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/user-trust-repository.js +34 -0
- package/dist/src/storage/sqlite/user-trust-repository.js.map +1 -0
- package/dist/src/tui/components/assistant-message.js +15 -0
- package/dist/src/tui/components/assistant-message.js.map +1 -1
- package/dist/src/tui/tui-agent-events.js +85 -1
- package/dist/src/tui/tui-agent-events.js.map +1 -1
- package/dist/src/tui/tui-command-formatters.js +7 -7
- package/dist/src/tui/tui-command-formatters.js.map +1 -1
- package/dist/src/tui/tui-commands.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/user-context/import.d.ts +12 -0
- package/dist/src/user-context/import.js +48 -0
- package/dist/src/user-context/import.js.map +1 -0
- package/dist/src/user-context/profile.d.ts +37 -0
- package/dist/src/user-context/profile.js +165 -0
- package/dist/src/user-context/profile.js.map +1 -0
- package/dist/src/user-context/projection.d.ts +54 -0
- package/dist/src/user-context/projection.js +121 -0
- package/dist/src/user-context/projection.js.map +1 -0
- package/dist/src/user-context/source-recommendations.d.ts +13 -0
- package/dist/src/user-context/source-recommendations.js +86 -0
- package/dist/src/user-context/source-recommendations.js.map +1 -0
- package/dist/src/user-context/trust-policy.d.ts +11 -0
- package/dist/src/user-context/trust-policy.js +31 -0
- package/dist/src/user-context/trust-policy.js.map +1 -0
- package/dist/src/workflows/authoring/index.d.ts +1 -0
- package/dist/src/workflows/authoring/index.js +2 -0
- package/dist/src/workflows/authoring/workflow-draft-store.d.ts +33 -0
- package/dist/src/workflows/authoring/workflow-draft-store.js +74 -0
- package/dist/src/workflows/authoring/workflow-draft-store.js.map +1 -0
- package/dist/src/workflows/domain/definition-utils.d.ts +6 -4
- package/dist/src/workflows/domain/definition-utils.js +28 -26
- package/dist/src/workflows/domain/definition-utils.js.map +1 -1
- package/dist/src/workflows/domain/definition.d.ts +79 -6
- package/dist/src/workflows/domain/event.d.ts +18 -2
- package/dist/src/workflows/domain/index.js +3 -3
- package/dist/src/workflows/domain/run.d.ts +16 -2
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/domain/validation.d.ts +9 -5
- package/dist/src/workflows/domain/validation.js +183 -40
- package/dist/src/workflows/domain/validation.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +2 -3
- package/dist/src/workflows/draft/workflow-draft-prompt.js +31 -73
- package/dist/src/workflows/draft/workflow-draft-prompt.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-service.js +4 -8
- package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-validator.js +29 -37
- package/dist/src/workflows/draft/workflow-draft-validator.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft.types.d.ts +4 -4
- package/dist/src/workflows/engine/projector.js +43 -1
- package/dist/src/workflows/engine/projector.js.map +1 -1
- package/dist/src/workflows/engine/workflow-engine.d.ts +2 -3
- package/dist/src/workflows/engine/workflow-engine.js +24 -4
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/index.js +4 -7
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +1 -9
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -1
- package/dist/src/workflows/runtime/graph-workflow-runtime.d.ts +10 -0
- package/dist/src/workflows/runtime/graph-workflow-runtime.js +295 -0
- package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +1 -0
- package/dist/src/workflows/runtime/index.d.ts +1 -2
- package/dist/src/workflows/runtime/index.js +2 -5
- package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +5 -8
- package/dist/src/workflows/service/workflow-run-service.js +15 -1
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +2 -1
- package/package.json +4 -3
- package/dist/gateway/static/root/assets/agents-CyvCIHnB.js +0 -2
- package/dist/gateway/static/root/assets/apps-page-DK_Vx6nl.js +0 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-B1LV3YYv.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-fzrovqhv.js +0 -4
- package/dist/gateway/static/root/assets/block-editor-Dhj5f4Bx.js +0 -184
- package/dist/gateway/static/root/assets/browser-settings-page-BDn-n-UB.js +0 -8
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-Co5ipo_Q.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-BWlpaxg9.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-D_jkIZLV.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BcekbW4q.js +0 -2
- package/dist/gateway/static/root/assets/desktop-pet-settings-BJCUuL8Y.js +0 -1
- package/dist/gateway/static/root/assets/dreaming-settings-BN1Z2mIo.js +0 -3
- package/dist/gateway/static/root/assets/extension-page-B-1KxvVy.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-BF9NACI3.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-DN9sNREz.js +0 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-BpoQW8cD.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-CBRSPd0b.js +0 -4
- package/dist/gateway/static/root/assets/goals-page-BCcBi407.js +0 -2
- package/dist/gateway/static/root/assets/goals-settings-pkTXzXkh.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-ezsufgLQ.js +0 -1
- package/dist/gateway/static/root/assets/index-B8s8Pq5U.css +0 -1
- package/dist/gateway/static/root/assets/index-DcUaXYeb.js +0 -262
- package/dist/gateway/static/root/assets/logs-page-DQtTRXtj.js +0 -7
- package/dist/gateway/static/root/assets/messages-BXNELNBa.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-BP2M9n6Q.js +0 -2
- package/dist/gateway/static/root/assets/notes-page-CspveYaO.js +0 -1
- package/dist/gateway/static/root/assets/notes-workbench-BHwzJ0OC.js +0 -2
- package/dist/gateway/static/root/assets/project-detail-page-Dy3rsobs.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-CWKpPE0L.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CqNRyXEo.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-MEME7ivF.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-JVd0qaSF.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-DYEbB1EV.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-dWN8BJ3z.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page-D8foINzP.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-Tgbv1s7G.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-D_YK0b_Z.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-DGytfoZK.js +0 -2
- package/dist/gateway/static/root/assets/toast-z0toXu32.js +0 -1
- package/dist/gateway/static/root/assets/user-profile-settings-panel-8YtygcJp.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-BVH71EFf.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-JeTE7XNM.js +0 -1
- package/dist/gateway/static/root/assets/workflow-start-dialog-_u8Uc1ze.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-ixgk_y1l.js +0 -18
- package/dist/src/agent/workflow/builtins/audit-repo.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/audit-repo.js +0 -183
- package/dist/src/agent/workflow/builtins/audit-repo.js.map +0 -1
- package/dist/src/agent/workflow/builtins/client-proposal.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/client-proposal.js +0 -164
- package/dist/src/agent/workflow/builtins/client-proposal.js.map +0 -1
- package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/competitor-scan.js +0 -164
- package/dist/src/agent/workflow/builtins/competitor-scan.js.map +0 -1
- package/dist/src/agent/workflow/builtins/content-draft.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/content-draft.js +0 -159
- package/dist/src/agent/workflow/builtins/content-draft.js.map +0 -1
- package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/content-repurpose.js +0 -146
- package/dist/src/agent/workflow/builtins/content-repurpose.js.map +0 -1
- package/dist/src/agent/workflow/builtins/debug-incident.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/debug-incident.js +0 -177
- package/dist/src/agent/workflow/builtins/debug-incident.js.map +0 -1
- package/dist/src/agent/workflow/builtins/decision-compare.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/decision-compare.js +0 -187
- package/dist/src/agent/workflow/builtins/decision-compare.js.map +0 -1
- package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/implementation-plan.js +0 -185
- package/dist/src/agent/workflow/builtins/implementation-plan.js.map +0 -1
- package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/inbox-triage.js +0 -158
- package/dist/src/agent/workflow/builtins/inbox-triage.js.map +0 -1
- package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/meeting-prep.js +0 -152
- package/dist/src/agent/workflow/builtins/meeting-prep.js.map +0 -1
- package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +0 -14
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js +0 -171
- package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +0 -1
- package/dist/src/agent/workflow/builtins/offer-design.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/offer-design.js +0 -170
- package/dist/src/agent/workflow/builtins/offer-design.js.map +0 -1
- package/dist/src/agent/workflow/builtins/pr-review.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/pr-review.js +0 -178
- package/dist/src/agent/workflow/builtins/pr-review.js.map +0 -1
- package/dist/src/agent/workflow/builtins/release-check.d.ts +0 -11
- package/dist/src/agent/workflow/builtins/release-check.js +0 -174
- package/dist/src/agent/workflow/builtins/release-check.js.map +0 -1
- package/dist/src/agent/workflow/builtins/research.d.ts +0 -13
- package/dist/src/agent/workflow/builtins/research.js +0 -188
- package/dist/src/agent/workflow/builtins/research.js.map +0 -1
- package/dist/src/agent/workflow/builtins/weekly-review.d.ts +0 -12
- package/dist/src/agent/workflow/builtins/weekly-review.js +0 -139
- package/dist/src/agent/workflow/builtins/weekly-review.js.map +0 -1
- package/dist/src/agent/workflow/last-run-memory.d.ts +0 -42
- package/dist/src/agent/workflow/last-run-memory.js +0 -60
- package/dist/src/agent/workflow/last-run-memory.js.map +0 -1
- package/dist/src/agent/workflow/lint.d.ts +0 -38
- package/dist/src/agent/workflow/lint.js +0 -74
- package/dist/src/agent/workflow/lint.js.map +0 -1
- package/dist/src/agent/workflow/meta-locale.d.ts +0 -12
- package/dist/src/agent/workflow/meta-locale.js +0 -62
- package/dist/src/agent/workflow/meta-locale.js.map +0 -1
- package/dist/src/agent/workflow/parser.d.ts +0 -20
- package/dist/src/agent/workflow/parser.js +0 -152
- package/dist/src/agent/workflow/parser.js.map +0 -1
- package/dist/src/agent/workflow/runtime.d.ts +0 -34
- package/dist/src/agent/workflow/runtime.js +0 -402
- package/dist/src/agent/workflow/runtime.js.map +0 -1
- package/dist/src/connectors/oauth.d.ts +0 -22
- package/dist/src/connectors/oauth.js +0 -99
- package/dist/src/connectors/oauth.js.map +0 -1
- package/dist/src/workflows/runtime/script-runtime.d.ts +0 -3
- package/dist/src/workflows/runtime/script-runtime.js +0 -3
- package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +0 -5
- package/dist/src/workflows/runtime/script-workflow-runtime.js +0 -15
- package/dist/src/workflows/runtime/script-workflow-runtime.js.map +0 -1
|
@@ -1,97 +1,55 @@
|
|
|
1
1
|
//#region src/workflows/draft/workflow-draft-prompt.ts
|
|
2
2
|
function buildWorkflowDraftPrompt(params) {
|
|
3
|
-
return
|
|
4
|
-
|
|
5
|
-
JSON shape:
|
|
6
|
-
{
|
|
7
|
-
"name": "lowercase_snake_case",
|
|
8
|
-
"script": "workflow JavaScript DSL",
|
|
9
|
-
"manifest": {
|
|
10
|
-
"title": "Human title",
|
|
11
|
-
"description": "What it does",
|
|
12
|
-
"version": "1.0.0",
|
|
13
|
-
"inputSchema": { "type": "object", "properties": {}, "required": [] },
|
|
14
|
-
"outputSchema": { "type": "object", "properties": { "summary": { "type": "string" } }, "required": ["summary"] },
|
|
15
|
-
"defaults": { "concurrency": 2, "timeoutSec": 1800, "maxSubagents": 8 },
|
|
16
|
-
"permissions": { "network": false, "fileSystem": "read", "approvalRequired": false },
|
|
17
|
-
"tags": ["custom"],
|
|
18
|
-
"whenToUse": "When to use this workflow"
|
|
19
|
-
},
|
|
20
|
-
"explanation": "Short explanation",
|
|
21
|
-
"assumptions": ["..."],
|
|
22
|
-
"risks": ["..."]
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
DSL rules:
|
|
26
|
-
- script MUST start with: export const meta = { name, description, phases, tags, estimatedAgents }
|
|
27
|
-
- The top-level JSON "name" MUST exactly equal script meta.name.
|
|
28
|
-
- Use only these globals: phase(title), agent(prompt, opts), parallel([() => agent(...)]), pipeline(items, ...stages), log(message), budget, args.
|
|
29
|
-
- Read user inputs from args, e.g. args.goal, args.branch, args.audience.
|
|
30
|
-
- Each agent needs a clear label.
|
|
31
|
-
- Keep concurrency conservative; prefer 2-4.
|
|
32
|
-
- Return a WorkflowResultEnvelope-like object: { summary, sections, followUps?, structuredOutput? }.
|
|
33
|
-
- Do not use import, require, eval, Function, process.env, fs, http, fetch.
|
|
34
|
-
- If network/write/destructive behavior is requested, mark manifest.permissions.approvalRequired = true.
|
|
35
|
-
- Keep script self-contained and valid JavaScript.
|
|
3
|
+
return `${GRAPH_DESIGN_PROMPT}
|
|
36
4
|
|
|
37
5
|
Mode: ${params.mode}
|
|
38
6
|
Language for user-facing copy: ${params.language ?? "en"}
|
|
39
7
|
Constraints:
|
|
40
8
|
${JSON.stringify(params.constraints ?? {}, null, 2)}
|
|
41
9
|
|
|
42
|
-
${params.
|
|
10
|
+
${params.existingGraph ? `Existing graph to improve:\n${JSON.stringify(params.existingGraph, null, 2).slice(0, 16e3)}\n` : ""}
|
|
11
|
+
User request:
|
|
12
|
+
${params.prompt.slice(0, 8e3)}`;
|
|
13
|
+
}
|
|
14
|
+
function buildWorkflowDraftRepairPrompt(params) {
|
|
15
|
+
return `${GRAPH_DESIGN_PROMPT}
|
|
43
16
|
|
|
17
|
+
Repair the previous graph while preserving the user's intent. Fix every listed issue.
|
|
18
|
+
Language for user-facing copy: ${params.language ?? "en"}
|
|
19
|
+
Constraints:
|
|
20
|
+
${JSON.stringify(params.constraints ?? {}, null, 2)}
|
|
21
|
+
Issues:
|
|
22
|
+
${JSON.stringify(params.issues, null, 2)}
|
|
44
23
|
User request:
|
|
45
24
|
${params.prompt.slice(0, 8e3)}
|
|
46
|
-
|
|
25
|
+
Previous output:
|
|
26
|
+
${params.previousOutput.slice(0, 16e3)}`;
|
|
47
27
|
}
|
|
48
|
-
|
|
49
|
-
return `You must repair an xopc workflow draft so it passes validation. Return ONLY a corrected JSON object, no markdown.
|
|
28
|
+
const GRAPH_DESIGN_PROMPT = `You design xopc visual workflows for non-technical users. Return ONLY one JSON object, no markdown.
|
|
50
29
|
|
|
51
|
-
|
|
30
|
+
Shape:
|
|
52
31
|
{
|
|
53
32
|
"name": "lowercase_snake_case",
|
|
54
|
-
"
|
|
33
|
+
"graph": { "schemaVersion": 1, "nodes": [], "edges": [] },
|
|
55
34
|
"manifest": {
|
|
56
|
-
"title": "Human title",
|
|
57
|
-
"description": "What it does",
|
|
58
|
-
"version": "1.0.0",
|
|
35
|
+
"title": "Human title", "description": "Outcome in plain language", "version": "1.0.0",
|
|
59
36
|
"inputSchema": { "type": "object", "properties": {}, "required": [] },
|
|
60
|
-
"
|
|
61
|
-
"defaults": { "concurrency": 2, "timeoutSec": 1800, "maxSubagents": 8 },
|
|
37
|
+
"defaults": { "concurrency": 3, "timeoutSec": 1800, "maxSubagents": 8 },
|
|
62
38
|
"permissions": { "network": false, "fileSystem": "read", "approvalRequired": false },
|
|
63
|
-
"tags": ["custom"],
|
|
64
|
-
"whenToUse": "When to use this workflow"
|
|
39
|
+
"tags": ["custom"], "whenToUse": "A concrete user situation"
|
|
65
40
|
},
|
|
66
|
-
"explanation": "Short explanation",
|
|
67
|
-
"assumptions": ["..."],
|
|
68
|
-
"risks": ["..."]
|
|
41
|
+
"explanation": "Short explanation", "assumptions": [], "risks": []
|
|
69
42
|
}
|
|
70
43
|
|
|
71
|
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
|
|
81
|
-
Language for user-facing copy: ${params.language ?? "en"}
|
|
82
|
-
Constraints:
|
|
83
|
-
${JSON.stringify(params.constraints ?? {}, null, 2)}
|
|
84
|
-
|
|
85
|
-
Validation and lint issues to fix:
|
|
86
|
-
${JSON.stringify(params.issues, null, 2)}
|
|
87
|
-
|
|
88
|
-
Original user request:
|
|
89
|
-
${params.prompt.slice(0, 8e3)}
|
|
90
|
-
|
|
91
|
-
Previous model output:
|
|
92
|
-
${params.previousOutput.slice(0, 12e3)}
|
|
93
|
-
`;
|
|
94
|
-
}
|
|
44
|
+
Graph rules:
|
|
45
|
+
- Exactly one input node and one output node. Every node must be reachable from input and lead toward output.
|
|
46
|
+
- Node kinds are input, agent, decision, merge, output.
|
|
47
|
+
- Every node has id, kind, title, position {x,y}, config, and optional phaseId/description.
|
|
48
|
+
- input config: {schema?}; agent config: {prompt, model?, toolset?, maxIterations?, outputSchema?}; decision config: {rule:{path,operator,value?}}; merge config: {mode:"array"|"object"}; output config: {summary?,title?}.
|
|
49
|
+
- Edge shape: {id,source,target,sourcePort?}. Decision branch ports are true and false.
|
|
50
|
+
- Agent prompts may reference {{goal}}, {{input}}, {{input.field}}, {{nodes.nodeId}}, and {{predecessors.nodeId}}.
|
|
51
|
+
- Prefer a small, understandable graph: 3-8 nodes, short titles, clear descriptions. Parallel independent work should fan out and then merge.
|
|
52
|
+
- Do not create code or script fields. Do not request permissions the user did not need.`;
|
|
95
53
|
//#endregion
|
|
96
54
|
export { buildWorkflowDraftPrompt, buildWorkflowDraftRepairPrompt };
|
|
97
55
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-draft-prompt.js","names":[],"sources":["../../../../src/workflows/draft/workflow-draft-prompt.ts"],"sourcesContent":["import type { WorkflowDraftConstraints, WorkflowDraftMode } from './workflow-draft.types.js';\n\nexport interface WorkflowDraftRepairIssue {\n source: 'parse' | 'validation' | 'lint';\n severity: 'error' | 'warning';\n code: string;\n message: string;\n
|
|
1
|
+
{"version":3,"file":"workflow-draft-prompt.js","names":[],"sources":["../../../../src/workflows/draft/workflow-draft-prompt.ts"],"sourcesContent":["import type { WorkflowGraph } from '../domain/definition.js';\nimport type { WorkflowDraftConstraints, WorkflowDraftMode } from './workflow-draft.types.js';\n\nexport interface WorkflowDraftRepairIssue {\n source: 'parse' | 'validation' | 'lint';\n severity: 'error' | 'warning';\n code: string;\n message: string;\n}\n\nexport function buildWorkflowDraftPrompt(params: {\n prompt: string;\n language?: 'en' | 'zh';\n mode: WorkflowDraftMode;\n existingGraph?: WorkflowGraph;\n constraints?: WorkflowDraftConstraints;\n}): string {\n return `${GRAPH_DESIGN_PROMPT}\n\nMode: ${params.mode}\nLanguage for user-facing copy: ${params.language ?? 'en'}\nConstraints:\n${JSON.stringify(params.constraints ?? {}, null, 2)}\n\n${params.existingGraph ? `Existing graph to improve:\\n${JSON.stringify(params.existingGraph, null, 2).slice(0, 16000)}\\n` : ''}\nUser request:\n${params.prompt.slice(0, 8000)}`;\n}\n\nexport function buildWorkflowDraftRepairPrompt(params: {\n prompt: string;\n language?: 'en' | 'zh';\n constraints?: WorkflowDraftConstraints;\n previousOutput: string;\n issues: WorkflowDraftRepairIssue[];\n}): string {\n return `${GRAPH_DESIGN_PROMPT}\n\nRepair the previous graph while preserving the user's intent. Fix every listed issue.\nLanguage for user-facing copy: ${params.language ?? 'en'}\nConstraints:\n${JSON.stringify(params.constraints ?? {}, null, 2)}\nIssues:\n${JSON.stringify(params.issues, null, 2)}\nUser request:\n${params.prompt.slice(0, 8000)}\nPrevious output:\n${params.previousOutput.slice(0, 16000)}`;\n}\n\nconst GRAPH_DESIGN_PROMPT = `You design xopc visual workflows for non-technical users. Return ONLY one JSON object, no markdown.\n\nShape:\n{\n \"name\": \"lowercase_snake_case\",\n \"graph\": { \"schemaVersion\": 1, \"nodes\": [], \"edges\": [] },\n \"manifest\": {\n \"title\": \"Human title\", \"description\": \"Outcome in plain language\", \"version\": \"1.0.0\",\n \"inputSchema\": { \"type\": \"object\", \"properties\": {}, \"required\": [] },\n \"defaults\": { \"concurrency\": 3, \"timeoutSec\": 1800, \"maxSubagents\": 8 },\n \"permissions\": { \"network\": false, \"fileSystem\": \"read\", \"approvalRequired\": false },\n \"tags\": [\"custom\"], \"whenToUse\": \"A concrete user situation\"\n },\n \"explanation\": \"Short explanation\", \"assumptions\": [], \"risks\": []\n}\n\nGraph rules:\n- Exactly one input node and one output node. Every node must be reachable from input and lead toward output.\n- Node kinds are input, agent, decision, merge, output.\n- Every node has id, kind, title, position {x,y}, config, and optional phaseId/description.\n- input config: {schema?}; agent config: {prompt, model?, toolset?, maxIterations?, outputSchema?}; decision config: {rule:{path,operator,value?}}; merge config: {mode:\"array\"|\"object\"}; output config: {summary?,title?}.\n- Edge shape: {id,source,target,sourcePort?}. Decision branch ports are true and false.\n- Agent prompts may reference {{goal}}, {{input}}, {{input.field}}, {{nodes.nodeId}}, and {{predecessors.nodeId}}.\n- Prefer a small, understandable graph: 3-8 nodes, short titles, clear descriptions. Parallel independent work should fan out and then merge.\n- Do not create code or script fields. Do not request permissions the user did not need.`;\n"],"mappings":";AAUA,SAAgB,yBAAyB,QAM9B;AACT,QAAO,GAAG,oBAAoB;;QAExB,OAAO,KAAK;iCACa,OAAO,YAAY,KAAK;;EAEvD,KAAK,UAAU,OAAO,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC;;EAElD,OAAO,gBAAgB,+BAA+B,KAAK,UAAU,OAAO,eAAe,MAAM,EAAE,CAAC,MAAM,GAAG,KAAM,CAAC,MAAM,GAAG;;EAE7H,OAAO,OAAO,MAAM,GAAG,IAAK;;AAG9B,SAAgB,+BAA+B,QAMpC;AACT,QAAO,GAAG,oBAAoB;;;iCAGC,OAAO,YAAY,KAAK;;EAEvD,KAAK,UAAU,OAAO,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC;;EAElD,KAAK,UAAU,OAAO,QAAQ,MAAM,EAAE,CAAC;;EAEvC,OAAO,OAAO,MAAM,GAAG,IAAK,CAAC;;EAE7B,OAAO,eAAe,MAAM,GAAG,KAAM;;AAGvC,MAAM,sBAAsB"}
|
|
@@ -25,8 +25,8 @@ var WorkflowDraftService = class {
|
|
|
25
25
|
let messageContent = buildWorkflowDraftPrompt({
|
|
26
26
|
prompt,
|
|
27
27
|
language: request.language,
|
|
28
|
-
mode: request.mode ?? (request.
|
|
29
|
-
|
|
28
|
+
mode: request.mode ?? (request.existingGraph ? "improve" : "create"),
|
|
29
|
+
existingGraph: request.existingGraph,
|
|
30
30
|
constraints: request.constraints
|
|
31
31
|
});
|
|
32
32
|
let lastIssues = [];
|
|
@@ -102,16 +102,12 @@ function getBlockingDraftIssues(response) {
|
|
|
102
102
|
source: "validation",
|
|
103
103
|
severity: "error",
|
|
104
104
|
code: issue.code,
|
|
105
|
-
message: issue.message
|
|
106
|
-
line: issue.line,
|
|
107
|
-
column: issue.column
|
|
105
|
+
message: issue.message
|
|
108
106
|
})), ...response.validation.warnings.map((issue) => ({
|
|
109
107
|
source: "validation",
|
|
110
108
|
severity: "warning",
|
|
111
109
|
code: issue.code,
|
|
112
|
-
message: issue.message
|
|
113
|
-
line: issue.line,
|
|
114
|
-
column: issue.column
|
|
110
|
+
message: issue.message
|
|
115
111
|
}))];
|
|
116
112
|
const lintIssues = response.lint.filter((issue) => issue.severity === "error").map((issue) => ({
|
|
117
113
|
source: "lint",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-draft-service.js","names":[],"sources":["../../../../src/workflows/draft/workflow-draft-service.ts"],"sourcesContent":["import { type UserMessage } from '@earendil-works/pi-ai/compat';\n\nimport { resolveModelRef } from '../../config/agent-typed-models.js';\nimport { getAgentDefaultModelRef } from '../../config/schema.js';\nimport type { Config } from '../../config/schema.js';\nimport { getDefaultModelSync, resolveModel } from '../../providers/index.js';\nimport { completeWithResolvedCredentials } from '../../providers/model-call.js';\nimport { createLogger } from '../../utils/logger.js';\n\nimport {\n buildWorkflowDraftPrompt,\n buildWorkflowDraftRepairPrompt,\n type WorkflowDraftRepairIssue,\n} from './workflow-draft-prompt.js';\nimport type { CreateWorkflowDraftRequest, WorkflowDraftResponse } from './workflow-draft.types.js';\nimport { buildWorkflowDraftResponse, parseGeneratedWorkflowDraft } from './workflow-draft-validator.js';\n\nconst log = createLogger('WorkflowDraft');\nconst DEFAULT_MAX_REPAIR_ATTEMPTS = 2;\n\nexport interface WorkflowDraftServiceOptions {\n config: Config;\n maxRepairAttempts?: number;\n}\n\nexport class WorkflowDraftService {\n constructor(private readonly options: WorkflowDraftServiceOptions) {}\n\n async createDraft(request: CreateWorkflowDraftRequest, signal?: AbortSignal): Promise<WorkflowDraftResponse> {\n const prompt = request.prompt.trim();\n if (!prompt) throw new Error('prompt is required');\n const modelRef = resolveDraftModelRef(this.options.config, request.agentId);\n const model = resolveModel(modelRef);\n const maxRepairAttempts = this.options.maxRepairAttempts ?? DEFAULT_MAX_REPAIR_ATTEMPTS;\n let messageContent = buildWorkflowDraftPrompt({\n prompt,\n language: request.language,\n mode: request.mode ?? (request.
|
|
1
|
+
{"version":3,"file":"workflow-draft-service.js","names":[],"sources":["../../../../src/workflows/draft/workflow-draft-service.ts"],"sourcesContent":["import { type UserMessage } from '@earendil-works/pi-ai/compat';\n\nimport { resolveModelRef } from '../../config/agent-typed-models.js';\nimport { getAgentDefaultModelRef } from '../../config/schema.js';\nimport type { Config } from '../../config/schema.js';\nimport { getDefaultModelSync, resolveModel } from '../../providers/index.js';\nimport { completeWithResolvedCredentials } from '../../providers/model-call.js';\nimport { createLogger } from '../../utils/logger.js';\n\nimport {\n buildWorkflowDraftPrompt,\n buildWorkflowDraftRepairPrompt,\n type WorkflowDraftRepairIssue,\n} from './workflow-draft-prompt.js';\nimport type { CreateWorkflowDraftRequest, WorkflowDraftResponse } from './workflow-draft.types.js';\nimport { buildWorkflowDraftResponse, parseGeneratedWorkflowDraft } from './workflow-draft-validator.js';\n\nconst log = createLogger('WorkflowDraft');\nconst DEFAULT_MAX_REPAIR_ATTEMPTS = 2;\n\nexport interface WorkflowDraftServiceOptions {\n config: Config;\n maxRepairAttempts?: number;\n}\n\nexport class WorkflowDraftService {\n constructor(private readonly options: WorkflowDraftServiceOptions) {}\n\n async createDraft(request: CreateWorkflowDraftRequest, signal?: AbortSignal): Promise<WorkflowDraftResponse> {\n const prompt = request.prompt.trim();\n if (!prompt) throw new Error('prompt is required');\n const modelRef = resolveDraftModelRef(this.options.config, request.agentId);\n const model = resolveModel(modelRef);\n const maxRepairAttempts = this.options.maxRepairAttempts ?? DEFAULT_MAX_REPAIR_ATTEMPTS;\n let messageContent = buildWorkflowDraftPrompt({\n prompt,\n language: request.language,\n mode: request.mode ?? (request.existingGraph ? 'improve' : 'create'),\n existingGraph: request.existingGraph,\n constraints: request.constraints,\n });\n let lastIssues: WorkflowDraftRepairIssue[] = [];\n let lastText = '';\n\n for (let attempt = 0; attempt <= maxRepairAttempts; attempt += 1) {\n const userMsg: UserMessage = {\n role: 'user',\n content: messageContent,\n timestamp: Date.now(),\n };\n const result = await completeWithResolvedCredentials(\n model,\n { messages: [userMsg] },\n { maxTokens: 4096, temperature: attempt === 0 ? 0.25 : 0.1, signal: signal as AbortSignal },\n );\n lastText = extractText(result);\n try {\n const draft = parseGeneratedWorkflowDraft(lastText);\n const response = buildWorkflowDraftResponse(draft, request.constraints);\n const blockingIssues = getBlockingDraftIssues(response);\n if (blockingIssues.length === 0) {\n return { ...response, repairAttempts: attempt };\n }\n lastIssues = blockingIssues;\n } catch (err) {\n lastIssues = [{\n source: 'parse',\n severity: 'error',\n code: 'invalid_model_output',\n message: err instanceof Error ? err.message : String(err),\n }];\n }\n\n if (attempt >= maxRepairAttempts) break;\n log.warn(\n { modelRef, attempt: attempt + 1, issueCount: lastIssues.length, preview: lastText.slice(0, 500) },\n 'Workflow draft validation failed; asking model to repair',\n );\n messageContent = buildWorkflowDraftRepairPrompt({\n prompt,\n language: request.language,\n constraints: request.constraints,\n previousOutput: lastText,\n issues: lastIssues,\n });\n }\n\n const message = `Unable to generate a valid workflow draft after ${maxRepairAttempts + 1} attempts: ${formatRepairIssues(lastIssues)}`;\n log.warn({ modelRef, issues: lastIssues, preview: lastText.slice(0, 500) }, message);\n throw new Error(message);\n }\n}\n\nexport function resolveDraftModelRef(config: Config, agentId: string): string {\n try {\n return resolveModelRef(config, agentId, 'large');\n } catch {\n return getAgentDefaultModelRef(config) ?? getDefaultModelSync(config);\n }\n}\n\nfunction extractText(result: unknown): string {\n const content = (result as { content?: unknown }).content;\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n return content.map((item) => {\n if (item && typeof item === 'object' && (item as { type?: string }).type === 'text') {\n return String((item as { text?: string }).text ?? '');\n }\n return '';\n }).join('');\n }\n return '';\n}\n\nfunction getBlockingDraftIssues(response: WorkflowDraftResponse): WorkflowDraftRepairIssue[] {\n const validationIssues: WorkflowDraftRepairIssue[] = [\n ...response.validation.errors.map((issue) => ({\n source: 'validation' as const,\n severity: 'error' as const,\n code: issue.code,\n message: issue.message,\n })),\n ...response.validation.warnings.map((issue) => ({\n source: 'validation' as const,\n severity: 'warning' as const,\n code: issue.code,\n message: issue.message,\n })),\n ];\n const lintIssues = response.lint\n .filter((issue) => issue.severity === 'error')\n .map((issue) => ({\n source: 'lint' as const,\n severity: issue.severity,\n code: issue.code,\n message: issue.message,\n }));\n return [...validationIssues, ...lintIssues];\n}\n\nfunction formatRepairIssues(issues: WorkflowDraftRepairIssue[]): string {\n if (issues.length === 0) return 'unknown validation failure';\n return issues.slice(0, 5).map((issue) => `${issue.source}:${issue.code}: ${issue.message}`).join('; ');\n}\n"],"mappings":"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"}
|
|
@@ -2,11 +2,10 @@ import { validateWorkflowDefinitionInput } from "../domain/validation.js";
|
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
//#region src/workflows/draft/workflow-draft-validator.ts
|
|
4
4
|
function parseGeneratedWorkflowDraft(raw) {
|
|
5
|
-
const
|
|
6
|
-
const parsed = JSON.parse(json);
|
|
5
|
+
const parsed = JSON.parse(extractJsonObject(raw));
|
|
7
6
|
return {
|
|
8
7
|
name: normalizeWorkflowName(String(parsed.name ?? "custom_workflow")),
|
|
9
|
-
|
|
8
|
+
graph: normalizeGraph(parsed.graph),
|
|
10
9
|
manifest: normalizeManifest(parsed.manifest),
|
|
11
10
|
explanation: String(parsed.explanation ?? ""),
|
|
12
11
|
assumptions: stringArray(parsed.assumptions),
|
|
@@ -16,22 +15,21 @@ function parseGeneratedWorkflowDraft(raw) {
|
|
|
16
15
|
function buildWorkflowDraftResponse(draft, constraints) {
|
|
17
16
|
const validation = validateWorkflowDefinitionInput({
|
|
18
17
|
name: draft.name,
|
|
19
|
-
|
|
18
|
+
graph: draft.graph
|
|
20
19
|
});
|
|
21
|
-
const lint = lintWorkflowDraft(draft, constraints);
|
|
22
20
|
return {
|
|
23
21
|
draftId: randomUUID(),
|
|
24
22
|
repairAttempts: 0,
|
|
25
23
|
...draft,
|
|
26
24
|
permissionsSummary: summarizePermissions(draft.manifest),
|
|
27
25
|
validation,
|
|
28
|
-
lint,
|
|
26
|
+
lint: lintWorkflowDraft(draft, constraints),
|
|
29
27
|
suggestedInputs: suggestedInputsFromManifest(draft.manifest)
|
|
30
28
|
};
|
|
31
29
|
}
|
|
32
30
|
function lintWorkflowDraft(draft, constraints) {
|
|
33
31
|
const issues = [];
|
|
34
|
-
const { manifest,
|
|
32
|
+
const { manifest, graph } = draft;
|
|
35
33
|
if (!manifest.inputSchema) issues.push({
|
|
36
34
|
severity: "warning",
|
|
37
35
|
code: "missing_input_schema",
|
|
@@ -45,32 +43,27 @@ function lintWorkflowDraft(draft, constraints) {
|
|
|
45
43
|
if (manifest.permissions?.network && constraints?.allowNetwork === false) issues.push({
|
|
46
44
|
severity: "error",
|
|
47
45
|
code: "unsafe_permission",
|
|
48
|
-
message: "Draft requests network access, but network is disabled
|
|
46
|
+
message: "Draft requests network access, but network is disabled."
|
|
49
47
|
});
|
|
50
48
|
if (manifest.permissions?.fileSystem === "write" && constraints?.fileSystem !== "write") issues.push({
|
|
51
49
|
severity: "warning",
|
|
52
50
|
code: "unsafe_permission",
|
|
53
51
|
message: "Draft requests filesystem write access."
|
|
54
52
|
});
|
|
55
|
-
const
|
|
56
|
-
if (constraints?.maxPhases &&
|
|
53
|
+
const phases = new Set(graph.nodes.map((node) => node.phaseId).filter(Boolean));
|
|
54
|
+
if (constraints?.maxPhases && phases.size > constraints.maxPhases) issues.push({
|
|
57
55
|
severity: "warning",
|
|
58
56
|
code: "too_many_agents",
|
|
59
|
-
message: `Draft has ${
|
|
57
|
+
message: `Draft has ${phases.size} phases, above the requested maximum.`
|
|
60
58
|
});
|
|
61
|
-
const
|
|
62
|
-
if (constraints?.maxSubagents &&
|
|
59
|
+
const agents = graph.nodes.filter((node) => node.kind === "agent");
|
|
60
|
+
if (constraints?.maxSubagents && agents.length > constraints.maxSubagents) issues.push({
|
|
63
61
|
severity: "warning",
|
|
64
62
|
code: "too_many_agents",
|
|
65
|
-
message: `Draft
|
|
66
|
-
});
|
|
67
|
-
if (/parallel\s*\([^[]/.test(script)) issues.push({
|
|
68
|
-
severity: "warning",
|
|
69
|
-
code: "unbounded_parallelism",
|
|
70
|
-
message: "parallel() should receive a bounded array of thunks."
|
|
63
|
+
message: `Draft has ${agents.length} agents, above the requested maximum.`
|
|
71
64
|
});
|
|
72
65
|
if (constraints?.allowedTools?.length) {
|
|
73
|
-
const unknown =
|
|
66
|
+
const unknown = agents.flatMap((node) => node.config.toolset ?? []).filter((tool) => !constraints.allowedTools.includes(tool));
|
|
74
67
|
for (const tool of [...new Set(unknown)]) issues.push({
|
|
75
68
|
severity: "warning",
|
|
76
69
|
code: "unknown_tool",
|
|
@@ -89,12 +82,19 @@ function extractJsonObject(raw) {
|
|
|
89
82
|
if (start >= 0 && end > start) return trimmed.slice(start, end + 1);
|
|
90
83
|
throw new Error("Model did not return a JSON object.");
|
|
91
84
|
}
|
|
92
|
-
function
|
|
93
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) return {
|
|
85
|
+
function normalizeGraph(value) {
|
|
86
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return {
|
|
87
|
+
schemaVersion: 1,
|
|
88
|
+
nodes: [],
|
|
89
|
+
edges: []
|
|
90
|
+
};
|
|
94
91
|
return value;
|
|
95
92
|
}
|
|
93
|
+
function normalizeManifest(value) {
|
|
94
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
95
|
+
}
|
|
96
96
|
function stringArray(value) {
|
|
97
|
-
return Array.isArray(value) ? value.map(
|
|
97
|
+
return Array.isArray(value) ? value.map(String).filter(Boolean) : [];
|
|
98
98
|
}
|
|
99
99
|
function normalizeWorkflowName(value) {
|
|
100
100
|
const normalized = value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
|
|
@@ -103,12 +103,12 @@ function normalizeWorkflowName(value) {
|
|
|
103
103
|
function summarizePermissions(manifest) {
|
|
104
104
|
const permissions = manifest.permissions;
|
|
105
105
|
if (!permissions) return ["No explicit permissions requested."];
|
|
106
|
-
const
|
|
107
|
-
if (permissions.tools?.length)
|
|
108
|
-
if (permissions.network != null)
|
|
109
|
-
if (permissions.fileSystem)
|
|
110
|
-
if (permissions.approvalRequired)
|
|
111
|
-
return
|
|
106
|
+
const values = [];
|
|
107
|
+
if (permissions.tools?.length) values.push(`Tools: ${permissions.tools.join(", ")}`);
|
|
108
|
+
if (permissions.network != null) values.push(`Network: ${permissions.network ? "enabled" : "disabled"}`);
|
|
109
|
+
if (permissions.fileSystem) values.push(`Filesystem: ${permissions.fileSystem}`);
|
|
110
|
+
if (permissions.approvalRequired) values.push("Approval required");
|
|
111
|
+
return values.length ? values : ["No explicit permissions requested."];
|
|
112
112
|
}
|
|
113
113
|
function suggestedInputsFromManifest(manifest) {
|
|
114
114
|
const properties = manifest.inputSchema?.properties;
|
|
@@ -119,14 +119,6 @@ function suggestedInputsFromManifest(manifest) {
|
|
|
119
119
|
example: typeof schema.default === "string" ? schema.default : schema.description ?? ""
|
|
120
120
|
}));
|
|
121
121
|
}
|
|
122
|
-
function collectToolsetNames(script) {
|
|
123
|
-
const out = [];
|
|
124
|
-
for (const match of script.matchAll(/toolset\s*:\s*\[([^\]]*)\]/g)) {
|
|
125
|
-
const body = match[1] ?? "";
|
|
126
|
-
for (const item of body.matchAll(/['"]([^'"]+)['"]/g)) out.push(item[1] ?? "");
|
|
127
|
-
}
|
|
128
|
-
return out.filter(Boolean);
|
|
129
|
-
}
|
|
130
122
|
//#endregion
|
|
131
123
|
export { buildWorkflowDraftResponse, lintWorkflowDraft, parseGeneratedWorkflowDraft };
|
|
132
124
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-draft-validator.js","names":[],"sources":["../../../../src/workflows/draft/workflow-draft-validator.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport {
|
|
1
|
+
{"version":3,"file":"workflow-draft-validator.js","names":[],"sources":["../../../../src/workflows/draft/workflow-draft-validator.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type { WorkflowDefinitionManifest, WorkflowGraph } from '../domain/definition.js';\nimport { validateWorkflowDefinitionInput } from '../domain/validation.js';\n\nimport type { GeneratedWorkflowDraft, WorkflowDraftConstraints, WorkflowDraftLintIssue, WorkflowDraftResponse } from './workflow-draft.types.js';\n\nexport function parseGeneratedWorkflowDraft(raw: string): GeneratedWorkflowDraft {\n const parsed = JSON.parse(extractJsonObject(raw)) as Partial<GeneratedWorkflowDraft>;\n return {\n name: normalizeWorkflowName(String(parsed.name ?? 'custom_workflow')),\n graph: normalizeGraph(parsed.graph),\n manifest: normalizeManifest(parsed.manifest),\n explanation: String(parsed.explanation ?? ''),\n assumptions: stringArray(parsed.assumptions),\n risks: stringArray(parsed.risks),\n };\n}\n\nexport function buildWorkflowDraftResponse(draft: GeneratedWorkflowDraft, constraints?: WorkflowDraftConstraints): WorkflowDraftResponse {\n const validation = validateWorkflowDefinitionInput({ name: draft.name, graph: draft.graph });\n return {\n draftId: randomUUID(),\n repairAttempts: 0,\n ...draft,\n permissionsSummary: summarizePermissions(draft.manifest),\n validation,\n lint: lintWorkflowDraft(draft, constraints),\n suggestedInputs: suggestedInputsFromManifest(draft.manifest),\n };\n}\n\nexport function lintWorkflowDraft(draft: GeneratedWorkflowDraft, constraints?: WorkflowDraftConstraints): WorkflowDraftLintIssue[] {\n const issues: WorkflowDraftLintIssue[] = [];\n const { manifest, graph } = draft;\n if (!manifest.inputSchema) issues.push({ severity: 'warning', code: 'missing_input_schema', message: 'Draft does not define an input schema.' });\n if (!manifest.outputSchema) issues.push({ severity: 'warning', code: 'missing_output_schema', message: 'Draft does not define an output schema.' });\n if (manifest.permissions?.network && constraints?.allowNetwork === false) issues.push({ severity: 'error', code: 'unsafe_permission', message: 'Draft requests network access, but network is disabled.' });\n if (manifest.permissions?.fileSystem === 'write' && constraints?.fileSystem !== 'write') issues.push({ severity: 'warning', code: 'unsafe_permission', message: 'Draft requests filesystem write access.' });\n const phases = new Set(graph.nodes.map((node) => node.phaseId).filter(Boolean));\n if (constraints?.maxPhases && phases.size > constraints.maxPhases) issues.push({ severity: 'warning', code: 'too_many_agents', message: `Draft has ${phases.size} phases, above the requested maximum.` });\n const agents = graph.nodes.filter((node) => node.kind === 'agent');\n if (constraints?.maxSubagents && agents.length > constraints.maxSubagents) issues.push({ severity: 'warning', code: 'too_many_agents', message: `Draft has ${agents.length} agents, above the requested maximum.` });\n if (constraints?.allowedTools?.length) {\n const unknown = agents.flatMap((node) => node.config.toolset ?? []).filter((tool) => !constraints.allowedTools!.includes(tool));\n for (const tool of [...new Set(unknown)]) issues.push({ severity: 'warning', code: 'unknown_tool', message: `Tool '${tool}' is outside the requested allowlist.` });\n }\n return issues;\n}\n\nfunction extractJsonObject(raw: string): string {\n const trimmed = raw.trim();\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) return trimmed;\n const fenced = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)```/i)?.[1]?.trim();\n if (fenced?.startsWith('{')) return fenced;\n const start = trimmed.indexOf('{');\n const end = trimmed.lastIndexOf('}');\n if (start >= 0 && end > start) return trimmed.slice(start, end + 1);\n throw new Error('Model did not return a JSON object.');\n}\n\nfunction normalizeGraph(value: unknown): WorkflowGraph {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return { schemaVersion: 1, nodes: [], edges: [] };\n return value as WorkflowGraph;\n}\n\nfunction normalizeManifest(value: unknown): WorkflowDefinitionManifest {\n return value && typeof value === 'object' && !Array.isArray(value) ? value as WorkflowDefinitionManifest : {};\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value) ? value.map(String).filter(Boolean) : [];\n}\n\nfunction normalizeWorkflowName(value: string): string {\n const normalized = value.trim().toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '');\n return /^[a-z]/.test(normalized) ? normalized : `workflow_${normalized || 'draft'}`;\n}\n\nfunction summarizePermissions(manifest: WorkflowDefinitionManifest): string[] {\n const permissions = manifest.permissions;\n if (!permissions) return ['No explicit permissions requested.'];\n const values: string[] = [];\n if (permissions.tools?.length) values.push(`Tools: ${permissions.tools.join(', ')}`);\n if (permissions.network != null) values.push(`Network: ${permissions.network ? 'enabled' : 'disabled'}`);\n if (permissions.fileSystem) values.push(`Filesystem: ${permissions.fileSystem}`);\n if (permissions.approvalRequired) values.push('Approval required');\n return values.length ? values : ['No explicit permissions requested.'];\n}\n\nfunction suggestedInputsFromManifest(manifest: WorkflowDefinitionManifest): WorkflowDraftResponse['suggestedInputs'] {\n const properties = manifest.inputSchema?.properties;\n if (!properties) return undefined;\n return Object.entries(properties).slice(0, 8).map(([key, schema]) => ({ key, label: typeof schema.title === 'string' ? schema.title : key, example: typeof schema.default === 'string' ? schema.default : schema.description ?? '' }));\n}\n"],"mappings":";;;AAOA,SAAgB,4BAA4B,KAAqC;CAC/E,MAAM,SAAS,KAAK,MAAM,kBAAkB,IAAI,CAAC;AACjD,QAAO;EACL,MAAM,sBAAsB,OAAO,OAAO,QAAQ,kBAAkB,CAAC;EACrE,OAAO,eAAe,OAAO,MAAM;EACnC,UAAU,kBAAkB,OAAO,SAAS;EAC5C,aAAa,OAAO,OAAO,eAAe,GAAG;EAC7C,aAAa,YAAY,OAAO,YAAY;EAC5C,OAAO,YAAY,OAAO,MAAM;EACjC;;AAGH,SAAgB,2BAA2B,OAA+B,aAA+D;CACvI,MAAM,aAAa,gCAAgC;EAAE,MAAM,MAAM;EAAM,OAAO,MAAM;EAAO,CAAC;AAC5F,QAAO;EACL,SAAS,YAAY;EACrB,gBAAgB;EAChB,GAAG;EACH,oBAAoB,qBAAqB,MAAM,SAAS;EACxD;EACA,MAAM,kBAAkB,OAAO,YAAY;EAC3C,iBAAiB,4BAA4B,MAAM,SAAS;EAC7D;;AAGH,SAAgB,kBAAkB,OAA+B,aAAkE;CACjI,MAAM,SAAmC,EAAE;CAC3C,MAAM,EAAE,UAAU,UAAU;AAC5B,KAAI,CAAC,SAAS,YAAa,QAAO,KAAK;EAAE,UAAU;EAAW,MAAM;EAAwB,SAAS;EAA0C,CAAC;AAChJ,KAAI,CAAC,SAAS,aAAc,QAAO,KAAK;EAAE,UAAU;EAAW,MAAM;EAAyB,SAAS;EAA2C,CAAC;AACnJ,KAAI,SAAS,aAAa,WAAW,aAAa,iBAAiB,MAAO,QAAO,KAAK;EAAE,UAAU;EAAS,MAAM;EAAqB,SAAS;EAA2D,CAAC;AAC3M,KAAI,SAAS,aAAa,eAAe,WAAW,aAAa,eAAe,QAAS,QAAO,KAAK;EAAE,UAAU;EAAW,MAAM;EAAqB,SAAS;EAA2C,CAAC;CAC5M,MAAM,SAAS,IAAI,IAAI,MAAM,MAAM,KAAK,SAAS,KAAK,QAAQ,CAAC,OAAO,QAAQ,CAAC;AAC/E,KAAI,aAAa,aAAa,OAAO,OAAO,YAAY,UAAW,QAAO,KAAK;EAAE,UAAU;EAAW,MAAM;EAAmB,SAAS,aAAa,OAAO,KAAK;EAAwC,CAAC;CAC1M,MAAM,SAAS,MAAM,MAAM,QAAQ,SAAS,KAAK,SAAS,QAAQ;AAClE,KAAI,aAAa,gBAAgB,OAAO,SAAS,YAAY,aAAc,QAAO,KAAK;EAAE,UAAU;EAAW,MAAM;EAAmB,SAAS,aAAa,OAAO,OAAO;EAAwC,CAAC;AACpN,KAAI,aAAa,cAAc,QAAQ;EACrC,MAAM,UAAU,OAAO,SAAS,SAAS,KAAK,OAAO,WAAW,EAAE,CAAC,CAAC,QAAQ,SAAS,CAAC,YAAY,aAAc,SAAS,KAAK,CAAC;AAC/H,OAAK,MAAM,QAAQ,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAE,QAAO,KAAK;GAAE,UAAU;GAAW,MAAM;GAAgB,SAAS,SAAS,KAAK;GAAwC,CAAC;;AAErK,QAAO;;AAGT,SAAS,kBAAkB,KAAqB;CAC9C,MAAM,UAAU,IAAI,MAAM;AAC1B,KAAI,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,IAAI,CAAE,QAAO;CAC7D,MAAM,SAAS,QAAQ,MAAM,gCAAgC,GAAG,IAAI,MAAM;AAC1E,KAAI,QAAQ,WAAW,IAAI,CAAE,QAAO;CACpC,MAAM,QAAQ,QAAQ,QAAQ,IAAI;CAClC,MAAM,MAAM,QAAQ,YAAY,IAAI;AACpC,KAAI,SAAS,KAAK,MAAM,MAAO,QAAO,QAAQ,MAAM,OAAO,MAAM,EAAE;AACnE,OAAM,IAAI,MAAM,sCAAsC;;AAGxD,SAAS,eAAe,OAA+B;AACrD,KAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,MAAM,CAAE,QAAO;EAAE,eAAe;EAAG,OAAO,EAAE;EAAE,OAAO,EAAE;EAAE;AAClH,QAAO;;AAGT,SAAS,kBAAkB,OAA4C;AACrE,QAAO,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,GAAG,QAAsC,EAAE;;AAG/G,SAAS,YAAY,OAA0B;AAC7C,QAAO,MAAM,QAAQ,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,OAAO,QAAQ,GAAG,EAAE;;AAGtE,SAAS,sBAAsB,OAAuB;CACpD,MAAM,aAAa,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,eAAe,IAAI,CAAC,QAAQ,YAAY,GAAG;AACjG,QAAO,SAAS,KAAK,WAAW,GAAG,aAAa,YAAY,cAAc;;AAG5E,SAAS,qBAAqB,UAAgD;CAC5E,MAAM,cAAc,SAAS;AAC7B,KAAI,CAAC,YAAa,QAAO,CAAC,qCAAqC;CAC/D,MAAM,SAAmB,EAAE;AAC3B,KAAI,YAAY,OAAO,OAAQ,QAAO,KAAK,UAAU,YAAY,MAAM,KAAK,KAAK,GAAG;AACpF,KAAI,YAAY,WAAW,KAAM,QAAO,KAAK,YAAY,YAAY,UAAU,YAAY,aAAa;AACxG,KAAI,YAAY,WAAY,QAAO,KAAK,eAAe,YAAY,aAAa;AAChF,KAAI,YAAY,iBAAkB,QAAO,KAAK,oBAAoB;AAClE,QAAO,OAAO,SAAS,SAAS,CAAC,qCAAqC;;AAGxE,SAAS,4BAA4B,UAAgF;CACnH,MAAM,aAAa,SAAS,aAAa;AACzC,KAAI,CAAC,WAAY,QAAO,KAAA;AACxB,QAAO,OAAO,QAAQ,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,aAAa;EAAE;EAAK,OAAO,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;EAAK,SAAS,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU,OAAO,eAAe;EAAI,EAAE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { WorkflowDefinitionManifest } from '../domain/definition.js';
|
|
1
|
+
import type { WorkflowDefinitionManifest, WorkflowGraph } from '../domain/definition.js';
|
|
2
2
|
import type { WorkflowDefinitionValidationResult } from '../domain/validation.js';
|
|
3
3
|
export type WorkflowDraftMode = 'create' | 'improve';
|
|
4
4
|
export interface WorkflowDraftConstraints {
|
|
@@ -14,17 +14,17 @@ export interface CreateWorkflowDraftRequest {
|
|
|
14
14
|
agentId: string;
|
|
15
15
|
language?: 'en' | 'zh';
|
|
16
16
|
mode?: WorkflowDraftMode;
|
|
17
|
-
|
|
17
|
+
existingGraph?: WorkflowGraph;
|
|
18
18
|
constraints?: WorkflowDraftConstraints;
|
|
19
19
|
}
|
|
20
20
|
export interface WorkflowDraftLintIssue {
|
|
21
21
|
severity: 'error' | 'warning';
|
|
22
|
-
code: 'missing_input_schema' | 'missing_output_schema' | 'unsafe_permission' | 'too_many_agents' | 'unknown_tool' | 'weak_phase_names'
|
|
22
|
+
code: 'missing_input_schema' | 'missing_output_schema' | 'unsafe_permission' | 'too_many_agents' | 'unknown_tool' | 'weak_phase_names';
|
|
23
23
|
message: string;
|
|
24
24
|
}
|
|
25
25
|
export interface GeneratedWorkflowDraft {
|
|
26
26
|
name: string;
|
|
27
|
-
|
|
27
|
+
graph: WorkflowGraph;
|
|
28
28
|
manifest: WorkflowDefinitionManifest;
|
|
29
29
|
explanation: string;
|
|
30
30
|
assumptions: string[];
|
|
@@ -18,7 +18,18 @@ function buildTimelineItem(event) {
|
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
20
|
function isAgentMutationEvent(type) {
|
|
21
|
-
return type === "agent_queued" || type === "agent_started" || type === "agent_step_started" || type === "agent_step_completed" || type === "agent_completed";
|
|
21
|
+
return type === "node_started" || type === "node_completed" || type === "agent_queued" || type === "agent_started" || type === "agent_step_started" || type === "agent_step_completed" || type === "agent_completed";
|
|
22
|
+
}
|
|
23
|
+
function markOpenNodesTerminal(nodes, status, completedAtMs, error) {
|
|
24
|
+
for (const [nodeId, node] of nodes) {
|
|
25
|
+
if (node.status !== "running") continue;
|
|
26
|
+
nodes.set(nodeId, {
|
|
27
|
+
...node,
|
|
28
|
+
status,
|
|
29
|
+
completedAtMs,
|
|
30
|
+
error: status === "error" ? error : node.error
|
|
31
|
+
});
|
|
32
|
+
}
|
|
22
33
|
}
|
|
23
34
|
function markOpenAgentsTerminal(agentIdToAgent, status, completedAtMs, error) {
|
|
24
35
|
for (const [agentId, agent] of agentIdToAgent) {
|
|
@@ -50,6 +61,7 @@ function projectWorkflowRunView(events) {
|
|
|
50
61
|
};
|
|
51
62
|
const phaseIdToPhase = /* @__PURE__ */ new Map();
|
|
52
63
|
const agentIdToAgent = /* @__PURE__ */ new Map();
|
|
64
|
+
const nodeIdToNode = /* @__PURE__ */ new Map();
|
|
53
65
|
const logs = [];
|
|
54
66
|
const artifacts = [];
|
|
55
67
|
const timeline = [];
|
|
@@ -84,10 +96,37 @@ function projectWorkflowRunView(events) {
|
|
|
84
96
|
});
|
|
85
97
|
break;
|
|
86
98
|
}
|
|
99
|
+
case "node_started": {
|
|
100
|
+
const payload = event.payload;
|
|
101
|
+
nodeIdToNode.set(payload.nodeId, {
|
|
102
|
+
id: payload.nodeId,
|
|
103
|
+
kind: payload.kind,
|
|
104
|
+
title: payload.title,
|
|
105
|
+
status: "running",
|
|
106
|
+
startedAtMs: event.createdAtMs
|
|
107
|
+
});
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
case "node_completed": {
|
|
111
|
+
const payload = event.payload;
|
|
112
|
+
const existing = nodeIdToNode.get(payload.nodeId);
|
|
113
|
+
nodeIdToNode.set(payload.nodeId, {
|
|
114
|
+
id: payload.nodeId,
|
|
115
|
+
kind: payload.kind,
|
|
116
|
+
title: payload.title,
|
|
117
|
+
status: payload.status,
|
|
118
|
+
startedAtMs: existing?.startedAtMs,
|
|
119
|
+
completedAtMs: event.createdAtMs,
|
|
120
|
+
resultPreview: payload.resultPreview,
|
|
121
|
+
error: payload.error
|
|
122
|
+
});
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
87
125
|
case "agent_queued": {
|
|
88
126
|
const payload = event.payload;
|
|
89
127
|
agentIdToAgent.set(payload.agentId, {
|
|
90
128
|
id: payload.agentId,
|
|
129
|
+
nodeId: payload.nodeId,
|
|
91
130
|
label: payload.label,
|
|
92
131
|
phaseId: payload.phaseId,
|
|
93
132
|
status: "queued",
|
|
@@ -192,12 +231,14 @@ function projectWorkflowRunView(events) {
|
|
|
192
231
|
run.error = payload.error;
|
|
193
232
|
run.completedAtMs = event.createdAtMs;
|
|
194
233
|
markOpenAgentsTerminal(agentIdToAgent, payload.error?.code === "timeout" ? "skipped" : "error", event.createdAtMs, payload.error?.message);
|
|
234
|
+
markOpenNodesTerminal(nodeIdToNode, payload.error?.code === "timeout" ? "skipped" : "error", event.createdAtMs, payload.error?.message);
|
|
195
235
|
break;
|
|
196
236
|
}
|
|
197
237
|
case "run_cancelled":
|
|
198
238
|
run.status = "cancelled";
|
|
199
239
|
run.completedAtMs = event.createdAtMs;
|
|
200
240
|
markOpenAgentsTerminal(agentIdToAgent, "skipped", event.createdAtMs);
|
|
241
|
+
markOpenNodesTerminal(nodeIdToNode, "skipped", event.createdAtMs);
|
|
201
242
|
break;
|
|
202
243
|
default: break;
|
|
203
244
|
}
|
|
@@ -220,6 +261,7 @@ function projectWorkflowRunView(events) {
|
|
|
220
261
|
};
|
|
221
262
|
}),
|
|
222
263
|
agents,
|
|
264
|
+
nodes: [...nodeIdToNode.values()],
|
|
223
265
|
logs,
|
|
224
266
|
artifacts,
|
|
225
267
|
timeline,
|