@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
|
@@ -9,21 +9,87 @@ export interface JsonSchema {
|
|
|
9
9
|
description?: string;
|
|
10
10
|
[key: string]: unknown;
|
|
11
11
|
}
|
|
12
|
+
export type WorkflowNodeKind = 'input' | 'agent' | 'decision' | 'merge' | 'output';
|
|
13
|
+
export interface WorkflowCanvasPosition {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
}
|
|
17
|
+
export interface WorkflowGraphNodeBase {
|
|
18
|
+
id: string;
|
|
19
|
+
kind: WorkflowNodeKind;
|
|
20
|
+
title: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
phaseId?: string;
|
|
23
|
+
position: WorkflowCanvasPosition;
|
|
24
|
+
}
|
|
25
|
+
export interface WorkflowInputNode extends WorkflowGraphNodeBase {
|
|
26
|
+
kind: 'input';
|
|
27
|
+
config: {
|
|
28
|
+
schema?: JsonSchema;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface WorkflowAgentNode extends WorkflowGraphNodeBase {
|
|
32
|
+
kind: 'agent';
|
|
33
|
+
config: {
|
|
34
|
+
prompt: string;
|
|
35
|
+
model?: string;
|
|
36
|
+
toolset?: string[];
|
|
37
|
+
maxIterations?: number;
|
|
38
|
+
outputSchema?: JsonSchema;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface WorkflowDecisionRule {
|
|
42
|
+
path: string;
|
|
43
|
+
operator: 'exists' | 'equals' | 'not_equals' | 'contains';
|
|
44
|
+
value?: unknown;
|
|
45
|
+
}
|
|
46
|
+
export interface WorkflowDecisionNode extends WorkflowGraphNodeBase {
|
|
47
|
+
kind: 'decision';
|
|
48
|
+
config: {
|
|
49
|
+
rule: WorkflowDecisionRule;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export interface WorkflowMergeNode extends WorkflowGraphNodeBase {
|
|
53
|
+
kind: 'merge';
|
|
54
|
+
config: {
|
|
55
|
+
mode: 'array' | 'object';
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export interface WorkflowOutputNode extends WorkflowGraphNodeBase {
|
|
59
|
+
kind: 'output';
|
|
60
|
+
config: {
|
|
61
|
+
summary?: string;
|
|
62
|
+
title?: string;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export type WorkflowGraphNode = WorkflowInputNode | WorkflowAgentNode | WorkflowDecisionNode | WorkflowMergeNode | WorkflowOutputNode;
|
|
66
|
+
export interface WorkflowGraphEdge {
|
|
67
|
+
id: string;
|
|
68
|
+
source: string;
|
|
69
|
+
target: string;
|
|
70
|
+
sourcePort?: 'true' | 'false' | 'default';
|
|
71
|
+
}
|
|
72
|
+
export interface WorkflowGraph {
|
|
73
|
+
schemaVersion: 1;
|
|
74
|
+
nodes: WorkflowGraphNode[];
|
|
75
|
+
edges: WorkflowGraphEdge[];
|
|
76
|
+
}
|
|
12
77
|
export interface WorkflowDefinition {
|
|
13
78
|
id: string;
|
|
14
79
|
name: string;
|
|
15
80
|
title: string;
|
|
16
81
|
description: string;
|
|
17
82
|
version: string;
|
|
83
|
+
revision: number;
|
|
18
84
|
contentHash?: string;
|
|
19
|
-
runtimeHash?: string;
|
|
20
85
|
inputSchema?: JsonSchema;
|
|
21
86
|
outputSchema?: JsonSchema;
|
|
22
87
|
phases: WorkflowPhaseDefinition[];
|
|
23
|
-
|
|
88
|
+
graph: WorkflowGraph;
|
|
24
89
|
defaults: WorkflowDefinitionDefaults;
|
|
25
90
|
permissions?: WorkflowPermissionPolicy;
|
|
26
91
|
resources?: WorkflowResourceRefs;
|
|
92
|
+
connectors?: WorkflowConnectorRequirement[];
|
|
27
93
|
metadata: WorkflowDefinitionMetadata;
|
|
28
94
|
}
|
|
29
95
|
export interface WorkflowDefinitionManifest {
|
|
@@ -35,8 +101,19 @@ export interface WorkflowDefinitionManifest {
|
|
|
35
101
|
defaults?: Partial<WorkflowDefinitionDefaults>;
|
|
36
102
|
tags?: string[];
|
|
37
103
|
whenToUse?: string;
|
|
104
|
+
estimatedAgents?: WorkflowDefinitionEstimatedAgents;
|
|
105
|
+
examplePrompts?: WorkflowDefinitionExamplePrompt[];
|
|
106
|
+
i18n?: Record<string, WorkflowDefinitionLocale>;
|
|
38
107
|
permissions?: WorkflowPermissionPolicy;
|
|
39
108
|
resources?: WorkflowResourceRefs;
|
|
109
|
+
connectors?: WorkflowConnectorRequirement[];
|
|
110
|
+
}
|
|
111
|
+
export interface WorkflowConnectorRequirement {
|
|
112
|
+
connectorId: string;
|
|
113
|
+
scope?: 'read' | 'write' | 'admin';
|
|
114
|
+
connectionRequired?: boolean;
|
|
115
|
+
optional?: boolean;
|
|
116
|
+
reason?: string;
|
|
40
117
|
}
|
|
41
118
|
export interface WorkflowPermissionPolicy {
|
|
42
119
|
tools?: string[];
|
|
@@ -54,10 +131,6 @@ export interface WorkflowPhaseDefinition {
|
|
|
54
131
|
title: string;
|
|
55
132
|
description?: string;
|
|
56
133
|
}
|
|
57
|
-
export interface WorkflowRuntimeDefinition {
|
|
58
|
-
kind: 'script';
|
|
59
|
-
source: string;
|
|
60
|
-
}
|
|
61
134
|
export interface WorkflowDefinitionDefaults {
|
|
62
135
|
concurrency: number;
|
|
63
136
|
timeoutSec: number;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { WorkflowArtifactRef, WorkflowResultEnvelope } from './result.js';
|
|
2
2
|
import type { WorkflowAgentInvocationSnapshot, WorkflowRun, WorkflowRunError } from './run.js';
|
|
3
|
-
export type WorkflowEventType = 'run_queued' | 'run_started' | 'phase_started' | 'phase_completed' | 'agent_queued' | 'agent_started' | 'agent_step_started' | 'agent_step_completed' | 'agent_completed' | 'log_appended' | 'artifact_created' | 'run_completed' | 'run_failed' | 'run_cancelled';
|
|
3
|
+
export type WorkflowEventType = 'run_queued' | 'run_started' | 'phase_started' | 'phase_completed' | 'node_started' | 'node_completed' | 'agent_queued' | 'agent_started' | 'agent_step_started' | 'agent_step_completed' | 'agent_completed' | 'log_appended' | 'artifact_created' | 'run_completed' | 'run_failed' | 'run_cancelled';
|
|
4
4
|
export interface WorkflowEventEnvelope<T = WorkflowEventPayload> {
|
|
5
5
|
id: string;
|
|
6
6
|
runId: string;
|
|
@@ -9,7 +9,7 @@ export interface WorkflowEventEnvelope<T = WorkflowEventPayload> {
|
|
|
9
9
|
payload: T;
|
|
10
10
|
createdAtMs: number;
|
|
11
11
|
}
|
|
12
|
-
export type WorkflowEventPayload = RunQueuedPayload | RunStartedPayload | PhaseStartedPayload | PhaseCompletedPayload | AgentQueuedPayload | AgentStartedPayload | AgentStepStartedPayload | AgentStepCompletedPayload | AgentCompletedPayload | LogAppendedPayload | ArtifactCreatedPayload | RunCompletedPayload | RunFailedPayload | RunCancelledPayload;
|
|
12
|
+
export type WorkflowEventPayload = RunQueuedPayload | RunStartedPayload | PhaseStartedPayload | PhaseCompletedPayload | NodeStartedPayload | NodeCompletedPayload | AgentQueuedPayload | AgentStartedPayload | AgentStepStartedPayload | AgentStepCompletedPayload | AgentCompletedPayload | LogAppendedPayload | ArtifactCreatedPayload | RunCompletedPayload | RunFailedPayload | RunCancelledPayload;
|
|
13
13
|
export interface RunQueuedPayload {
|
|
14
14
|
run: WorkflowRun;
|
|
15
15
|
}
|
|
@@ -23,8 +23,22 @@ export interface PhaseStartedPayload {
|
|
|
23
23
|
export interface PhaseCompletedPayload {
|
|
24
24
|
phaseId: string;
|
|
25
25
|
}
|
|
26
|
+
export interface NodeStartedPayload {
|
|
27
|
+
nodeId: string;
|
|
28
|
+
kind: string;
|
|
29
|
+
title: string;
|
|
30
|
+
}
|
|
31
|
+
export interface NodeCompletedPayload {
|
|
32
|
+
nodeId: string;
|
|
33
|
+
kind: string;
|
|
34
|
+
title: string;
|
|
35
|
+
status: 'done' | 'error' | 'skipped';
|
|
36
|
+
resultPreview?: string;
|
|
37
|
+
error?: string;
|
|
38
|
+
}
|
|
26
39
|
export interface AgentQueuedPayload {
|
|
27
40
|
agentId: string;
|
|
41
|
+
nodeId: string;
|
|
28
42
|
label: string;
|
|
29
43
|
phaseId?: string;
|
|
30
44
|
prompt?: string;
|
|
@@ -33,6 +47,7 @@ export interface AgentQueuedPayload {
|
|
|
33
47
|
}
|
|
34
48
|
export interface AgentStartedPayload {
|
|
35
49
|
agentId: string;
|
|
50
|
+
nodeId?: string;
|
|
36
51
|
}
|
|
37
52
|
export interface AgentStepStartedPayload {
|
|
38
53
|
agentId: string;
|
|
@@ -51,6 +66,7 @@ export interface AgentStepCompletedPayload {
|
|
|
51
66
|
}
|
|
52
67
|
export interface AgentCompletedPayload {
|
|
53
68
|
agentId: string;
|
|
69
|
+
nodeId?: string;
|
|
54
70
|
status: 'done' | 'error' | 'skipped';
|
|
55
71
|
resultPreview?: string;
|
|
56
72
|
error?: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DEFAULT_WORKFLOW_CONCURRENCY, DEFAULT_WORKFLOW_MAX_SUBAGENTS, DEFAULT_WORKFLOW_TIMEOUT_SEC, buildWorkflowDefinition, hashWorkflowStableValue, normalizeWorkflowDefinitionId, toWorkflowDefinitionTitle } from "./definition-utils.js";
|
|
1
|
+
import { DEFAULT_WORKFLOW_CONCURRENCY, DEFAULT_WORKFLOW_MAX_SUBAGENTS, DEFAULT_WORKFLOW_TIMEOUT_SEC, buildWorkflowDefinition, deriveWorkflowPhases, hashWorkflowStableValue, normalizeWorkflowDefinitionId, toWorkflowDefinitionTitle } from "./definition-utils.js";
|
|
2
|
+
import { validateWorkflowDefinitionInput, validateWorkflowGraph } from "./validation.js";
|
|
2
3
|
import { validateWorkflowJsonSchema } from "./schema-validation.js";
|
|
3
4
|
import { isTerminalWorkflowRunStatus } from "./run.js";
|
|
4
|
-
|
|
5
|
-
export { DEFAULT_WORKFLOW_CONCURRENCY, DEFAULT_WORKFLOW_MAX_SUBAGENTS, DEFAULT_WORKFLOW_TIMEOUT_SEC, buildWorkflowDefinition, hashWorkflowStableValue, isTerminalWorkflowRunStatus, normalizeWorkflowDefinitionId, toWorkflowDefinitionTitle, validateWorkflowDefinitionInput, validateWorkflowJsonSchema };
|
|
5
|
+
export { DEFAULT_WORKFLOW_CONCURRENCY, DEFAULT_WORKFLOW_MAX_SUBAGENTS, DEFAULT_WORKFLOW_TIMEOUT_SEC, buildWorkflowDefinition, deriveWorkflowPhases, hashWorkflowStableValue, isTerminalWorkflowRunStatus, normalizeWorkflowDefinitionId, toWorkflowDefinitionTitle, validateWorkflowDefinitionInput, validateWorkflowGraph, validateWorkflowJsonSchema };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { WorkflowDefinitionDefaults, WorkflowDefinitionEstimatedAgents, WorkflowPermissionPolicy, WorkflowResourceRefs } from './definition.js';
|
|
1
|
+
import type { WorkflowDefinitionDefaults, WorkflowDefinitionEstimatedAgents, WorkflowGraph, WorkflowPermissionPolicy, WorkflowResourceRefs } from './definition.js';
|
|
2
2
|
import type { WorkflowArtifactRef, WorkflowResultEnvelope } from './result.js';
|
|
3
3
|
export type WorkflowRunStatus = 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled' | 'timeout';
|
|
4
4
|
export declare function isTerminalWorkflowRunStatus(status: WorkflowRunStatus): boolean;
|
|
@@ -91,7 +91,8 @@ export interface WorkflowRunDefinitionSnapshot {
|
|
|
91
91
|
title: string;
|
|
92
92
|
version: string;
|
|
93
93
|
contentHash?: string;
|
|
94
|
-
|
|
94
|
+
revision: number;
|
|
95
|
+
graph: WorkflowGraph;
|
|
95
96
|
source: 'builtin' | 'user';
|
|
96
97
|
tags: string[];
|
|
97
98
|
phaseCount: number;
|
|
@@ -160,11 +161,22 @@ export interface WorkflowRunView {
|
|
|
160
161
|
run: WorkflowRun;
|
|
161
162
|
phases: WorkflowPhaseView[];
|
|
162
163
|
agents: WorkflowAgentView[];
|
|
164
|
+
nodes: WorkflowNodeView[];
|
|
163
165
|
logs: WorkflowLogEntry[];
|
|
164
166
|
artifacts: WorkflowArtifactRef[];
|
|
165
167
|
timeline: WorkflowTimelineItem[];
|
|
166
168
|
controls: WorkflowRunControls;
|
|
167
169
|
}
|
|
170
|
+
export interface WorkflowNodeView {
|
|
171
|
+
id: string;
|
|
172
|
+
kind: string;
|
|
173
|
+
title: string;
|
|
174
|
+
status: 'pending' | 'running' | 'done' | 'error' | 'skipped';
|
|
175
|
+
resultPreview?: string;
|
|
176
|
+
error?: string;
|
|
177
|
+
startedAtMs?: number;
|
|
178
|
+
completedAtMs?: number;
|
|
179
|
+
}
|
|
168
180
|
export type WorkflowPhaseStatus = 'pending' | 'running' | 'completed' | 'failed';
|
|
169
181
|
export interface WorkflowPhaseView {
|
|
170
182
|
id: string;
|
|
@@ -177,6 +189,7 @@ export interface WorkflowPhaseView {
|
|
|
177
189
|
export type WorkflowAgentStatus = 'queued' | 'running' | 'done' | 'error' | 'skipped';
|
|
178
190
|
export interface WorkflowAgentView {
|
|
179
191
|
id: string;
|
|
192
|
+
nodeId?: string;
|
|
180
193
|
label: string;
|
|
181
194
|
phaseId?: string;
|
|
182
195
|
status: WorkflowAgentStatus;
|
|
@@ -192,6 +205,7 @@ export interface WorkflowAgentView {
|
|
|
192
205
|
steps: WorkflowAgentStepView[];
|
|
193
206
|
}
|
|
194
207
|
export interface WorkflowAgentInvocationSnapshot {
|
|
208
|
+
nodeId?: string;
|
|
195
209
|
prompt: string;
|
|
196
210
|
label: string;
|
|
197
211
|
phase?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","names":[],"sources":["../../../../src/workflows/domain/run.ts"],"sourcesContent":["import type { WorkflowDefinitionDefaults, WorkflowDefinitionEstimatedAgents, WorkflowPermissionPolicy, WorkflowResourceRefs } from './definition.js';\nimport type { WorkflowArtifactRef, WorkflowResultEnvelope } from './result.js';\n\nexport type WorkflowRunStatus =\n | 'queued'\n | 'running'\n | 'succeeded'\n | 'failed'\n | 'cancelled'\n | 'timeout';\n\nconst TERMINAL_WORKFLOW_RUN_STATUSES = new Set<WorkflowRunStatus>([\n 'succeeded',\n 'failed',\n 'cancelled',\n 'timeout',\n]);\n\nexport function isTerminalWorkflowRunStatus(status: WorkflowRunStatus): boolean {\n return TERMINAL_WORKFLOW_RUN_STATUSES.has(status);\n}\n\nexport interface WorkflowRun {\n id: string;\n definitionId: string;\n definitionVersion: string;\n title: string;\n goal: string;\n input: unknown;\n status: WorkflowRunStatus;\n source: WorkflowRunSource;\n metadata?: WorkflowRunMetadata;\n result?: WorkflowResultEnvelope;\n error?: WorkflowRunError;\n metrics: WorkflowRunMetrics;\n createdAtMs: number;\n startedAtMs?: number;\n completedAtMs?: number;\n}\n\nexport interface WorkflowRunMetadata {\n sessionKey: string;\n triggerSource: WorkflowRunSource['kind'];\n agentId?: string;\n projectId?: string;\n workItemId?: string;\n contextRefs?: WorkflowRunContextRef[];\n writebackPolicy?: WorkflowRunWritebackPolicy;\n retryOfRunId?: string;\n replay?: WorkflowRunReplayMetadata;\n definition: WorkflowRunDefinitionSnapshot;\n input?: WorkflowRunInputEnvelope;\n correlation?: WorkflowRunCorrelation;\n origin?: WorkflowRunOrigin;\n schedule?: WorkflowRunScheduleMetadata;\n goalId?: string;\n}\n\nexport type WorkflowRunReplayScope = 'failed_agents' | 'failed_phases';\n\nexport interface WorkflowRunContextRef {\n kind: 'project' | 'goal' | 'work_item' | 'session' | 'attachment' | 'memory';\n id: string;\n role?: string;\n title?: string;\n}\n\nexport interface WorkflowRunWritebackPolicy {\n targets: WorkflowRunWritebackTarget[];\n}\n\nexport interface WorkflowRunWritebackTarget {\n kind: 'project' | 'goal' | 'work_item';\n id: string;\n mode: 'record' | 'suggest' | 'evaluate';\n}\n\nexport interface WorkflowRunReplayMetadata {\n sourceRunId: string;\n scope: WorkflowRunReplayScope;\n phaseIds?: string[];\n agentIds: string[];\n targetCount: number;\n createdAtMs: number;\n}\n\nexport interface WorkflowRunInputEnvelope {\n payload: unknown;\n goal?: string;\n variables?: Record<string, unknown>;\n context?: Record<string, unknown>;\n}\n\nexport interface WorkflowRunCorrelation {\n idempotencyKey?: string;\n requestId?: string;\n traceId?: string;\n parentRunId?: string;\n}\n\nexport interface WorkflowRunOrigin {\n channel: string;\n sessionKey?: string;\n chatId?: string;\n messageId?: string;\n automationId?: string;\n runId?: string;\n requestId?: string;\n}\n\nexport interface WorkflowRunScheduleMetadata {\n automationId: string;\n runId?: string;\n scheduledAtMs?: number;\n}\n\nexport interface WorkflowRunDefinitionSnapshot {\n id: string;\n name: string;\n title: string;\n version: string;\n contentHash?: string;\n
|
|
1
|
+
{"version":3,"file":"run.js","names":[],"sources":["../../../../src/workflows/domain/run.ts"],"sourcesContent":["import type { WorkflowDefinitionDefaults, WorkflowDefinitionEstimatedAgents, WorkflowGraph, WorkflowPermissionPolicy, WorkflowResourceRefs } from './definition.js';\nimport type { WorkflowArtifactRef, WorkflowResultEnvelope } from './result.js';\n\nexport type WorkflowRunStatus =\n | 'queued'\n | 'running'\n | 'succeeded'\n | 'failed'\n | 'cancelled'\n | 'timeout';\n\nconst TERMINAL_WORKFLOW_RUN_STATUSES = new Set<WorkflowRunStatus>([\n 'succeeded',\n 'failed',\n 'cancelled',\n 'timeout',\n]);\n\nexport function isTerminalWorkflowRunStatus(status: WorkflowRunStatus): boolean {\n return TERMINAL_WORKFLOW_RUN_STATUSES.has(status);\n}\n\nexport interface WorkflowRun {\n id: string;\n definitionId: string;\n definitionVersion: string;\n title: string;\n goal: string;\n input: unknown;\n status: WorkflowRunStatus;\n source: WorkflowRunSource;\n metadata?: WorkflowRunMetadata;\n result?: WorkflowResultEnvelope;\n error?: WorkflowRunError;\n metrics: WorkflowRunMetrics;\n createdAtMs: number;\n startedAtMs?: number;\n completedAtMs?: number;\n}\n\nexport interface WorkflowRunMetadata {\n sessionKey: string;\n triggerSource: WorkflowRunSource['kind'];\n agentId?: string;\n projectId?: string;\n workItemId?: string;\n contextRefs?: WorkflowRunContextRef[];\n writebackPolicy?: WorkflowRunWritebackPolicy;\n retryOfRunId?: string;\n replay?: WorkflowRunReplayMetadata;\n definition: WorkflowRunDefinitionSnapshot;\n input?: WorkflowRunInputEnvelope;\n correlation?: WorkflowRunCorrelation;\n origin?: WorkflowRunOrigin;\n schedule?: WorkflowRunScheduleMetadata;\n goalId?: string;\n}\n\nexport type WorkflowRunReplayScope = 'failed_agents' | 'failed_phases';\n\nexport interface WorkflowRunContextRef {\n kind: 'project' | 'goal' | 'work_item' | 'session' | 'attachment' | 'memory';\n id: string;\n role?: string;\n title?: string;\n}\n\nexport interface WorkflowRunWritebackPolicy {\n targets: WorkflowRunWritebackTarget[];\n}\n\nexport interface WorkflowRunWritebackTarget {\n kind: 'project' | 'goal' | 'work_item';\n id: string;\n mode: 'record' | 'suggest' | 'evaluate';\n}\n\nexport interface WorkflowRunReplayMetadata {\n sourceRunId: string;\n scope: WorkflowRunReplayScope;\n phaseIds?: string[];\n agentIds: string[];\n targetCount: number;\n createdAtMs: number;\n}\n\nexport interface WorkflowRunInputEnvelope {\n payload: unknown;\n goal?: string;\n variables?: Record<string, unknown>;\n context?: Record<string, unknown>;\n}\n\nexport interface WorkflowRunCorrelation {\n idempotencyKey?: string;\n requestId?: string;\n traceId?: string;\n parentRunId?: string;\n}\n\nexport interface WorkflowRunOrigin {\n channel: string;\n sessionKey?: string;\n chatId?: string;\n messageId?: string;\n automationId?: string;\n runId?: string;\n requestId?: string;\n}\n\nexport interface WorkflowRunScheduleMetadata {\n automationId: string;\n runId?: string;\n scheduledAtMs?: number;\n}\n\nexport interface WorkflowRunDefinitionSnapshot {\n id: string;\n name: string;\n title: string;\n version: string;\n contentHash?: string;\n revision: number;\n graph: WorkflowGraph;\n source: 'builtin' | 'user';\n tags: string[];\n phaseCount: number;\n defaults?: WorkflowDefinitionDefaults;\n permissions?: WorkflowPermissionPolicy;\n resources?: WorkflowResourceRefs;\n estimatedAgents?: WorkflowDefinitionEstimatedAgents;\n}\n\nexport type WorkflowRunSource =\n | { kind: 'chat'; sessionKey: string; messageId?: string }\n | { kind: 'webui'; sessionKey?: string; requestId?: string }\n | { kind: 'automation'; automationId: string; runId?: string; scheduledAtMs?: number }\n | { kind: 'api'; requestId?: string; idempotencyKey?: string }\n | { kind: 'im'; channel: string; chatId: string; messageId?: string; userId?: string };\n\nexport interface WorkflowRunMetrics {\n agentCount: number;\n doneAgentCount: number;\n errorAgentCount: number;\n skippedAgentCount: number;\n artifactCount: number;\n durationMs?: number;\n}\n\nexport interface WorkflowRunError {\n code: WorkflowRunErrorCode;\n message: string;\n detail?: string;\n recoverable: boolean;\n}\n\nexport type WorkflowRunErrorCode =\n | 'definition_not_found'\n | 'invalid_input'\n | 'runtime_error'\n | 'timeout'\n | 'cancelled'\n | 'result_validation_failed'\n | 'agent_quota_exceeded';\n\nexport interface WorkflowRunControls {\n canCancel: boolean;\n canRetry: boolean;\n canArchive: boolean;\n}\n\nexport interface WorkflowRunSummary {\n id: string;\n definitionId: string;\n title: string;\n status: WorkflowRunStatus;\n source: WorkflowRunSource;\n metadata?: WorkflowRunMetadata;\n createdAtMs: number;\n startedAtMs?: number;\n completedAtMs?: number;\n metrics: WorkflowRunMetrics;\n}\n\nexport interface WorkflowRunView {\n run: WorkflowRun;\n phases: WorkflowPhaseView[];\n agents: WorkflowAgentView[];\n nodes: WorkflowNodeView[];\n logs: WorkflowLogEntry[];\n artifacts: WorkflowArtifactRef[];\n timeline: WorkflowTimelineItem[];\n controls: WorkflowRunControls;\n}\n\nexport interface WorkflowNodeView {\n id: string;\n kind: string;\n title: string;\n status: 'pending' | 'running' | 'done' | 'error' | 'skipped';\n resultPreview?: string;\n error?: string;\n startedAtMs?: number;\n completedAtMs?: number;\n}\n\nexport type WorkflowPhaseStatus = 'pending' | 'running' | 'completed' | 'failed';\n\nexport interface WorkflowPhaseView {\n id: string;\n title: string;\n status: WorkflowPhaseStatus;\n startedAtMs?: number;\n completedAtMs?: number;\n agentIds: string[];\n}\n\nexport type WorkflowAgentStatus = 'queued' | 'running' | 'done' | 'error' | 'skipped';\n\nexport interface WorkflowAgentView {\n id: string;\n nodeId?: string;\n label: string;\n phaseId?: string;\n status: WorkflowAgentStatus;\n prompt?: string;\n invocation?: WorkflowAgentInvocationSnapshot;\n sessionKey: string;\n transcriptMessageCount: number;\n currentStep?: string;\n resultPreview?: string;\n error?: string;\n startedAtMs?: number;\n completedAtMs?: number;\n steps: WorkflowAgentStepView[];\n}\n\nexport interface WorkflowAgentInvocationSnapshot {\n nodeId?: string;\n prompt: string;\n label: string;\n phase?: string;\n modelRef?: string;\n resolvedModelRef?: string;\n schema?: unknown;\n toolset?: string[];\n maxIterations?: number;\n}\n\nexport type WorkflowAgentStepStatus = 'running' | 'done' | 'error';\n\nexport interface WorkflowAgentStepView {\n id: string;\n label: string;\n kind: 'tool' | 'llm' | 'thinking';\n toolName?: string;\n detail?: string;\n status: WorkflowAgentStepStatus;\n resultPreview?: string;\n error?: string;\n startedAtMs?: number;\n completedAtMs?: number;\n}\n\nexport interface WorkflowLogEntry {\n sequence: number;\n message: string;\n createdAtMs: number;\n}\n\nexport interface WorkflowTimelineItem {\n sequence: number;\n type: string;\n title: string;\n createdAtMs: number;\n}\n"],"mappings":";AAWA,MAAM,iCAAiC,IAAI,IAAuB;CAChE;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,4BAA4B,QAAoC;AAC9E,QAAO,+BAA+B,IAAI,OAAO"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { WorkflowDefinition } from './definition.js';
|
|
2
|
-
export type WorkflowDefinitionValidationIssueCode = 'name_required' | '
|
|
1
|
+
import type { WorkflowDefinition, WorkflowGraph } from './definition.js';
|
|
2
|
+
export type WorkflowDefinitionValidationIssueCode = 'name_required' | 'invalid_name' | 'graph_required' | 'invalid_schema_version' | 'duplicate_node' | 'missing_input' | 'multiple_inputs' | 'missing_output' | 'multiple_outputs' | 'unknown_edge_node' | 'duplicate_edge' | 'self_edge' | 'cycle_detected' | 'unreachable_node' | 'dead_end_node' | 'missing_prompt' | 'invalid_node_config';
|
|
3
3
|
export interface WorkflowDefinitionValidationIssue {
|
|
4
4
|
code: WorkflowDefinitionValidationIssueCode;
|
|
5
5
|
message: string;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
nodeId?: string;
|
|
7
|
+
edgeId?: string;
|
|
8
|
+
field?: string;
|
|
8
9
|
}
|
|
9
10
|
export interface WorkflowDefinitionValidationResult {
|
|
10
11
|
valid: boolean;
|
|
@@ -14,6 +15,9 @@ export interface WorkflowDefinitionValidationResult {
|
|
|
14
15
|
}
|
|
15
16
|
export interface ValidateWorkflowDefinitionInput {
|
|
16
17
|
name?: string;
|
|
17
|
-
|
|
18
|
+
graph?: WorkflowGraph;
|
|
19
|
+
title?: string;
|
|
20
|
+
description?: string;
|
|
18
21
|
}
|
|
19
22
|
export declare function validateWorkflowDefinitionInput(input: ValidateWorkflowDefinitionInput): WorkflowDefinitionValidationResult;
|
|
23
|
+
export declare function validateWorkflowGraph(graph: WorkflowGraph, errors?: WorkflowDefinitionValidationIssue[], warnings?: WorkflowDefinitionValidationIssue[]): WorkflowDefinitionValidationResult;
|
|
@@ -1,66 +1,209 @@
|
|
|
1
|
-
import { parseWorkflowScript } from "../../agent/workflow/parser.js";
|
|
2
1
|
import { buildWorkflowDefinition } from "./definition-utils.js";
|
|
3
2
|
//#region src/workflows/domain/validation.ts
|
|
4
3
|
const NAME_RE = /^[a-z][a-z0-9_-]*$/;
|
|
5
4
|
function validateWorkflowDefinitionInput(input) {
|
|
6
5
|
const name = input.name?.trim() ?? "";
|
|
7
|
-
const script = input.script ?? "";
|
|
8
6
|
const errors = [];
|
|
9
7
|
const warnings = [];
|
|
10
8
|
if (!name) errors.push({
|
|
11
9
|
code: "name_required",
|
|
12
|
-
message: "Workflow name is required."
|
|
10
|
+
message: "Workflow name is required.",
|
|
11
|
+
field: "name"
|
|
13
12
|
});
|
|
14
13
|
else if (!NAME_RE.test(name)) errors.push({
|
|
15
|
-
code: "
|
|
16
|
-
message: `Invalid workflow name "${name}". Use lowercase snake_case
|
|
14
|
+
code: "invalid_name",
|
|
15
|
+
message: `Invalid workflow name "${name}". Use lowercase snake_case.`,
|
|
16
|
+
field: "name"
|
|
17
17
|
});
|
|
18
|
-
if (!
|
|
19
|
-
code: "
|
|
20
|
-
message: "Workflow
|
|
18
|
+
if (!input.graph) errors.push({
|
|
19
|
+
code: "graph_required",
|
|
20
|
+
message: "Workflow graph is required.",
|
|
21
|
+
field: "graph"
|
|
21
22
|
});
|
|
22
|
-
|
|
23
|
+
else validateWorkflowGraph(input.graph, errors, warnings);
|
|
24
|
+
if (errors.length > 0 || !input.graph) return {
|
|
23
25
|
valid: false,
|
|
24
26
|
errors,
|
|
25
27
|
warnings
|
|
26
28
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
return {
|
|
30
|
+
valid: true,
|
|
31
|
+
errors,
|
|
32
|
+
warnings,
|
|
33
|
+
definition: buildWorkflowDefinition({
|
|
34
|
+
name,
|
|
35
|
+
source: "user",
|
|
36
|
+
graph: input.graph,
|
|
37
|
+
manifest: {
|
|
38
|
+
title: input.title,
|
|
39
|
+
description: input.description
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function validateWorkflowGraph(graph, errors = [], warnings = []) {
|
|
45
|
+
if (graph.schemaVersion !== 1) errors.push({
|
|
46
|
+
code: "invalid_schema_version",
|
|
47
|
+
message: "Workflow graph schemaVersion must be 1.",
|
|
48
|
+
field: "schemaVersion"
|
|
49
|
+
});
|
|
50
|
+
const nodes = /* @__PURE__ */ new Map();
|
|
51
|
+
for (const node of graph.nodes) {
|
|
52
|
+
if (nodes.has(node.id)) {
|
|
30
53
|
errors.push({
|
|
31
|
-
code: "
|
|
32
|
-
message: `
|
|
54
|
+
code: "duplicate_node",
|
|
55
|
+
message: `Duplicate node id "${node.id}".`,
|
|
56
|
+
nodeId: node.id
|
|
33
57
|
});
|
|
34
|
-
|
|
35
|
-
valid: false,
|
|
36
|
-
errors,
|
|
37
|
-
warnings
|
|
38
|
-
};
|
|
58
|
+
continue;
|
|
39
59
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
60
|
+
nodes.set(node.id, node);
|
|
61
|
+
validateNode(node, errors);
|
|
62
|
+
}
|
|
63
|
+
const inputs = graph.nodes.filter((node) => node.kind === "input");
|
|
64
|
+
const outputs = graph.nodes.filter((node) => node.kind === "output");
|
|
65
|
+
if (inputs.length === 0) errors.push({
|
|
66
|
+
code: "missing_input",
|
|
67
|
+
message: "Workflow needs one input node."
|
|
68
|
+
});
|
|
69
|
+
if (inputs.length > 1) errors.push({
|
|
70
|
+
code: "multiple_inputs",
|
|
71
|
+
message: "Workflow can only have one input node."
|
|
72
|
+
});
|
|
73
|
+
if (outputs.length === 0) errors.push({
|
|
74
|
+
code: "missing_output",
|
|
75
|
+
message: "Workflow needs one output node."
|
|
76
|
+
});
|
|
77
|
+
if (outputs.length > 1) errors.push({
|
|
78
|
+
code: "multiple_outputs",
|
|
79
|
+
message: "Workflow can only have one output node."
|
|
80
|
+
});
|
|
81
|
+
const edgeKeys = /* @__PURE__ */ new Set();
|
|
82
|
+
const outgoing = /* @__PURE__ */ new Map();
|
|
83
|
+
const incoming = /* @__PURE__ */ new Map();
|
|
84
|
+
const indegree = new Map(graph.nodes.map((node) => [node.id, 0]));
|
|
85
|
+
for (const edge of graph.edges) {
|
|
86
|
+
const key = `${edge.source}:${edge.target}:${edge.sourcePort ?? "default"}`;
|
|
87
|
+
if (edgeKeys.has(key)) errors.push({
|
|
88
|
+
code: "duplicate_edge",
|
|
89
|
+
message: `Duplicate edge ${edge.source} → ${edge.target}.`,
|
|
90
|
+
edgeId: edge.id
|
|
55
91
|
});
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
errors
|
|
59
|
-
|
|
60
|
-
|
|
92
|
+
edgeKeys.add(key);
|
|
93
|
+
if (!nodes.has(edge.source) || !nodes.has(edge.target)) {
|
|
94
|
+
errors.push({
|
|
95
|
+
code: "unknown_edge_node",
|
|
96
|
+
message: `Edge "${edge.id}" references a missing node.`,
|
|
97
|
+
edgeId: edge.id
|
|
98
|
+
});
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (edge.source === edge.target) {
|
|
102
|
+
errors.push({
|
|
103
|
+
code: "self_edge",
|
|
104
|
+
message: `Node "${edge.source}" cannot connect to itself.`,
|
|
105
|
+
edgeId: edge.id
|
|
106
|
+
});
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
outgoing.set(edge.source, [...outgoing.get(edge.source) ?? [], edge.target]);
|
|
110
|
+
incoming.set(edge.target, [...incoming.get(edge.target) ?? [], edge.source]);
|
|
111
|
+
indegree.set(edge.target, (indegree.get(edge.target) ?? 0) + 1);
|
|
112
|
+
const sourceNode = nodes.get(edge.source);
|
|
113
|
+
if (sourceNode.kind === "decision" && edge.sourcePort !== "true" && edge.sourcePort !== "false") errors.push({
|
|
114
|
+
code: "invalid_node_config",
|
|
115
|
+
message: `Decision edge "${edge.id}" must use a true or false branch.`,
|
|
116
|
+
edgeId: edge.id
|
|
117
|
+
});
|
|
118
|
+
if (sourceNode.kind !== "decision" && edge.sourcePort && edge.sourcePort !== "default") errors.push({
|
|
119
|
+
code: "invalid_node_config",
|
|
120
|
+
message: `Only decision nodes can use branch edges.`,
|
|
121
|
+
edgeId: edge.id
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
if (nodes.size > 0 && !isAcyclic(indegree, outgoing)) errors.push({
|
|
125
|
+
code: "cycle_detected",
|
|
126
|
+
message: "Workflow graph must not contain a cycle."
|
|
127
|
+
});
|
|
128
|
+
if (inputs.length === 1) {
|
|
129
|
+
const reachable = collectReachable(inputs[0].id, outgoing);
|
|
130
|
+
for (const node of graph.nodes) if (!reachable.has(node.id)) errors.push({
|
|
131
|
+
code: "unreachable_node",
|
|
132
|
+
message: `Node "${node.title}" is not connected to the workflow input.`,
|
|
133
|
+
nodeId: node.id
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
if (outputs.length === 1) {
|
|
137
|
+
const reachesOutput = collectReachable(outputs[0].id, incoming);
|
|
138
|
+
for (const node of graph.nodes) if (!reachesOutput.has(node.id)) errors.push({
|
|
139
|
+
code: "dead_end_node",
|
|
140
|
+
message: `Node "${node.title}" does not lead to the workflow output.`,
|
|
141
|
+
nodeId: node.id
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
for (const node of graph.nodes) {
|
|
145
|
+
if (node.kind !== "decision") continue;
|
|
146
|
+
const ports = graph.edges.filter((edge) => edge.source === node.id).map((edge) => edge.sourcePort);
|
|
147
|
+
if (!ports.includes("true") || !ports.includes("false")) errors.push({
|
|
148
|
+
code: "invalid_node_config",
|
|
149
|
+
message: `Decision node "${node.title}" needs both true and false branches.`,
|
|
150
|
+
nodeId: node.id
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
valid: errors.length === 0,
|
|
155
|
+
errors,
|
|
156
|
+
warnings
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function validateNode(node, errors) {
|
|
160
|
+
if (!node.id.trim() || !node.title.trim()) errors.push({
|
|
161
|
+
code: "invalid_node_config",
|
|
162
|
+
message: "Every node needs a stable id and title.",
|
|
163
|
+
nodeId: node.id
|
|
164
|
+
});
|
|
165
|
+
if (node.kind === "agent" && !node.config.prompt.trim()) errors.push({
|
|
166
|
+
code: "missing_prompt",
|
|
167
|
+
message: `Agent node "${node.title}" needs an instruction.`,
|
|
168
|
+
nodeId: node.id,
|
|
169
|
+
field: "config.prompt"
|
|
170
|
+
});
|
|
171
|
+
if (node.kind === "agent" && node.config.maxIterations !== void 0) {
|
|
172
|
+
if (!Number.isFinite(node.config.maxIterations) || node.config.maxIterations < 1) errors.push({
|
|
173
|
+
code: "invalid_node_config",
|
|
174
|
+
message: `Agent node "${node.title}" has an invalid iteration limit.`,
|
|
175
|
+
nodeId: node.id,
|
|
176
|
+
field: "config.maxIterations"
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function isAcyclic(indegreeInput, outgoing) {
|
|
181
|
+
const indegree = new Map(indegreeInput);
|
|
182
|
+
const queue = [...indegree.entries()].filter(([, count]) => count === 0).map(([id]) => id);
|
|
183
|
+
let visited = 0;
|
|
184
|
+
while (queue.length > 0) {
|
|
185
|
+
const id = queue.shift();
|
|
186
|
+
visited += 1;
|
|
187
|
+
for (const target of outgoing.get(id) ?? []) {
|
|
188
|
+
const next = (indegree.get(target) ?? 0) - 1;
|
|
189
|
+
indegree.set(target, next);
|
|
190
|
+
if (next === 0) queue.push(target);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return visited === indegree.size;
|
|
194
|
+
}
|
|
195
|
+
function collectReachable(start, outgoing) {
|
|
196
|
+
const seen = /* @__PURE__ */ new Set();
|
|
197
|
+
const queue = [start];
|
|
198
|
+
while (queue.length > 0) {
|
|
199
|
+
const id = queue.shift();
|
|
200
|
+
if (seen.has(id)) continue;
|
|
201
|
+
seen.add(id);
|
|
202
|
+
queue.push(...outgoing.get(id) ?? []);
|
|
61
203
|
}
|
|
204
|
+
return seen;
|
|
62
205
|
}
|
|
63
206
|
//#endregion
|
|
64
|
-
export { validateWorkflowDefinitionInput };
|
|
207
|
+
export { validateWorkflowDefinitionInput, validateWorkflowGraph };
|
|
65
208
|
|
|
66
209
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","names":[],"sources":["../../../../src/workflows/domain/validation.ts"],"sourcesContent":["import { parseWorkflowScript } from '../../agent/workflow/parser.js';\n\nimport type { WorkflowDefinition } from './definition.js';\nimport { buildWorkflowDefinition } from './definition-utils.js';\n\nexport type WorkflowDefinitionValidationIssueCode =\n | 'name_required'\n | 'script_required'\n | 'parse_failed'\n | 'meta_name_mismatch'\n | 'unknown_error';\n\nexport interface WorkflowDefinitionValidationIssue {\n code: WorkflowDefinitionValidationIssueCode;\n message: string;\n line?: number;\n column?: number;\n}\n\nexport interface WorkflowDefinitionValidationResult {\n valid: boolean;\n errors: WorkflowDefinitionValidationIssue[];\n warnings: WorkflowDefinitionValidationIssue[];\n definition?: WorkflowDefinition;\n}\n\nexport interface ValidateWorkflowDefinitionInput {\n name?: string;\n script?: string;\n}\n\nconst NAME_RE = /^[a-z][a-z0-9_-]*$/;\n\nexport function validateWorkflowDefinitionInput(\n input: ValidateWorkflowDefinitionInput,\n): WorkflowDefinitionValidationResult {\n const name = input.name?.trim() ?? '';\n const script = input.script ?? '';\n const errors: WorkflowDefinitionValidationIssue[] = [];\n const warnings: WorkflowDefinitionValidationIssue[] = [];\n\n if (!name) {\n errors.push({ code: 'name_required', message: 'Workflow name is required.' });\n } else if (!NAME_RE.test(name)) {\n errors.push({\n code: 'parse_failed',\n message: `Invalid workflow name \"${name}\". Use lowercase snake_case, e.g. \"audit_repo\".`,\n });\n }\n\n if (!script.trim()) {\n errors.push({ code: 'script_required', message: 'Workflow script is required.' });\n }\n\n if (errors.length > 0) {\n return { valid: false, errors, warnings };\n }\n\n try {\n const { meta } = parseWorkflowScript(script);\n if (meta.name !== name) {\n errors.push({\n code: 'meta_name_mismatch',\n message: `meta.name \"${meta.name}\" does not match workflow name \"${name}\".`,\n });\n return { valid: false, errors, warnings };\n }\n\n return {\n valid: true,\n errors,\n warnings,\n definition: buildWorkflowDefinition({\n name,\n source: 'user',\n script,\n meta,\n }),\n };\n } catch (err) {\n errors.push({\n code: 'parse_failed',\n message: err instanceof Error ? err.message : String(err),\n });\n return { valid: false, errors, warnings };\n }\n}\n"],"mappings":";;;AA+BA,MAAM,UAAU;AAEhB,SAAgB,gCACd,OACoC;CACpC,MAAM,OAAO,MAAM,MAAM,MAAM,IAAI;CACnC,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,SAA8C,EAAE;CACtD,MAAM,WAAgD,EAAE;AAExD,KAAI,CAAC,KACH,QAAO,KAAK;EAAE,MAAM;EAAiB,SAAS;EAA8B,CAAC;UACpE,CAAC,QAAQ,KAAK,KAAK,CAC5B,QAAO,KAAK;EACV,MAAM;EACN,SAAS,0BAA0B,KAAK;EACzC,CAAC;AAGJ,KAAI,CAAC,OAAO,MAAM,CAChB,QAAO,KAAK;EAAE,MAAM;EAAmB,SAAS;EAAgC,CAAC;AAGnF,KAAI,OAAO,SAAS,EAClB,QAAO;EAAE,OAAO;EAAO;EAAQ;EAAU;AAG3C,KAAI;EACF,MAAM,EAAE,SAAS,oBAAoB,OAAO;AAC5C,MAAI,KAAK,SAAS,MAAM;AACtB,UAAO,KAAK;IACV,MAAM;IACN,SAAS,cAAc,KAAK,KAAK,kCAAkC,KAAK;IACzE,CAAC;AACF,UAAO;IAAE,OAAO;IAAO;IAAQ;IAAU;;AAG3C,SAAO;GACL,OAAO;GACP;GACA;GACA,YAAY,wBAAwB;IAClC;IACA,QAAQ;IACR;IACA;IACD,CAAC;GACH;UACM,KAAK;AACZ,SAAO,KAAK;GACV,MAAM;GACN,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;GAC1D,CAAC;AACF,SAAO;GAAE,OAAO;GAAO;GAAQ;GAAU"}
|
|
1
|
+
{"version":3,"file":"validation.js","names":[],"sources":["../../../../src/workflows/domain/validation.ts"],"sourcesContent":["import type { WorkflowDefinition, WorkflowGraph, WorkflowGraphNode } from './definition.js';\nimport { buildWorkflowDefinition } from './definition-utils.js';\n\nexport type WorkflowDefinitionValidationIssueCode =\n | 'name_required'\n | 'invalid_name'\n | 'graph_required'\n | 'invalid_schema_version'\n | 'duplicate_node'\n | 'missing_input'\n | 'multiple_inputs'\n | 'missing_output'\n | 'multiple_outputs'\n | 'unknown_edge_node'\n | 'duplicate_edge'\n | 'self_edge'\n | 'cycle_detected'\n | 'unreachable_node'\n | 'dead_end_node'\n | 'missing_prompt'\n | 'invalid_node_config';\n\nexport interface WorkflowDefinitionValidationIssue {\n code: WorkflowDefinitionValidationIssueCode;\n message: string;\n nodeId?: string;\n edgeId?: string;\n field?: string;\n}\n\nexport interface WorkflowDefinitionValidationResult {\n valid: boolean;\n errors: WorkflowDefinitionValidationIssue[];\n warnings: WorkflowDefinitionValidationIssue[];\n definition?: WorkflowDefinition;\n}\n\nexport interface ValidateWorkflowDefinitionInput {\n name?: string;\n graph?: WorkflowGraph;\n title?: string;\n description?: string;\n}\n\nconst NAME_RE = /^[a-z][a-z0-9_-]*$/;\n\nexport function validateWorkflowDefinitionInput(\n input: ValidateWorkflowDefinitionInput,\n): WorkflowDefinitionValidationResult {\n const name = input.name?.trim() ?? '';\n const errors: WorkflowDefinitionValidationIssue[] = [];\n const warnings: WorkflowDefinitionValidationIssue[] = [];\n\n if (!name) {\n errors.push({ code: 'name_required', message: 'Workflow name is required.', field: 'name' });\n } else if (!NAME_RE.test(name)) {\n errors.push({\n code: 'invalid_name',\n message: `Invalid workflow name \"${name}\". Use lowercase snake_case.`,\n field: 'name',\n });\n }\n\n if (!input.graph) {\n errors.push({ code: 'graph_required', message: 'Workflow graph is required.', field: 'graph' });\n } else {\n validateWorkflowGraph(input.graph, errors, warnings);\n }\n\n if (errors.length > 0 || !input.graph) return { valid: false, errors, warnings };\n\n return {\n valid: true,\n errors,\n warnings,\n definition: buildWorkflowDefinition({\n name,\n source: 'user',\n graph: input.graph,\n manifest: {\n title: input.title,\n description: input.description,\n },\n }),\n };\n}\n\nexport function validateWorkflowGraph(\n graph: WorkflowGraph,\n errors: WorkflowDefinitionValidationIssue[] = [],\n warnings: WorkflowDefinitionValidationIssue[] = [],\n): WorkflowDefinitionValidationResult {\n if (graph.schemaVersion !== 1) {\n errors.push({\n code: 'invalid_schema_version',\n message: 'Workflow graph schemaVersion must be 1.',\n field: 'schemaVersion',\n });\n }\n\n const nodes = new Map<string, WorkflowGraphNode>();\n for (const node of graph.nodes) {\n if (nodes.has(node.id)) {\n errors.push({ code: 'duplicate_node', message: `Duplicate node id \"${node.id}\".`, nodeId: node.id });\n continue;\n }\n nodes.set(node.id, node);\n validateNode(node, errors);\n }\n\n const inputs = graph.nodes.filter((node) => node.kind === 'input');\n const outputs = graph.nodes.filter((node) => node.kind === 'output');\n if (inputs.length === 0) errors.push({ code: 'missing_input', message: 'Workflow needs one input node.' });\n if (inputs.length > 1) errors.push({ code: 'multiple_inputs', message: 'Workflow can only have one input node.' });\n if (outputs.length === 0) errors.push({ code: 'missing_output', message: 'Workflow needs one output node.' });\n if (outputs.length > 1) errors.push({ code: 'multiple_outputs', message: 'Workflow can only have one output node.' });\n\n const edgeKeys = new Set<string>();\n const outgoing = new Map<string, string[]>();\n const incoming = new Map<string, string[]>();\n const indegree = new Map<string, number>(graph.nodes.map((node) => [node.id, 0]));\n for (const edge of graph.edges) {\n const key = `${edge.source}:${edge.target}:${edge.sourcePort ?? 'default'}`;\n if (edgeKeys.has(key)) {\n errors.push({ code: 'duplicate_edge', message: `Duplicate edge ${edge.source} → ${edge.target}.`, edgeId: edge.id });\n }\n edgeKeys.add(key);\n if (!nodes.has(edge.source) || !nodes.has(edge.target)) {\n errors.push({\n code: 'unknown_edge_node',\n message: `Edge \"${edge.id}\" references a missing node.`,\n edgeId: edge.id,\n });\n continue;\n }\n if (edge.source === edge.target) {\n errors.push({ code: 'self_edge', message: `Node \"${edge.source}\" cannot connect to itself.`, edgeId: edge.id });\n continue;\n }\n outgoing.set(edge.source, [...(outgoing.get(edge.source) ?? []), edge.target]);\n incoming.set(edge.target, [...(incoming.get(edge.target) ?? []), edge.source]);\n indegree.set(edge.target, (indegree.get(edge.target) ?? 0) + 1);\n\n const sourceNode = nodes.get(edge.source)!;\n if (sourceNode.kind === 'decision' && edge.sourcePort !== 'true' && edge.sourcePort !== 'false') {\n errors.push({ code: 'invalid_node_config', message: `Decision edge \"${edge.id}\" must use a true or false branch.`, edgeId: edge.id });\n }\n if (sourceNode.kind !== 'decision' && edge.sourcePort && edge.sourcePort !== 'default') {\n errors.push({ code: 'invalid_node_config', message: `Only decision nodes can use branch edges.`, edgeId: edge.id });\n }\n }\n\n if (nodes.size > 0 && !isAcyclic(indegree, outgoing)) {\n errors.push({ code: 'cycle_detected', message: 'Workflow graph must not contain a cycle.' });\n }\n\n if (inputs.length === 1) {\n const reachable = collectReachable(inputs[0].id, outgoing);\n for (const node of graph.nodes) {\n if (!reachable.has(node.id)) {\n errors.push({\n code: 'unreachable_node',\n message: `Node \"${node.title}\" is not connected to the workflow input.`,\n nodeId: node.id,\n });\n }\n }\n }\n\n if (outputs.length === 1) {\n const reachesOutput = collectReachable(outputs[0].id, incoming);\n for (const node of graph.nodes) {\n if (!reachesOutput.has(node.id)) {\n errors.push({ code: 'dead_end_node', message: `Node \"${node.title}\" does not lead to the workflow output.`, nodeId: node.id });\n }\n }\n }\n\n for (const node of graph.nodes) {\n if (node.kind !== 'decision') continue;\n const ports = graph.edges.filter((edge) => edge.source === node.id).map((edge) => edge.sourcePort);\n if (!ports.includes('true') || !ports.includes('false')) {\n errors.push({ code: 'invalid_node_config', message: `Decision node \"${node.title}\" needs both true and false branches.`, nodeId: node.id });\n }\n }\n\n return { valid: errors.length === 0, errors, warnings };\n}\n\nfunction validateNode(node: WorkflowGraphNode, errors: WorkflowDefinitionValidationIssue[]): void {\n if (!node.id.trim() || !node.title.trim()) {\n errors.push({\n code: 'invalid_node_config',\n message: 'Every node needs a stable id and title.',\n nodeId: node.id,\n });\n }\n if (node.kind === 'agent' && !node.config.prompt.trim()) {\n errors.push({\n code: 'missing_prompt',\n message: `Agent node \"${node.title}\" needs an instruction.`,\n nodeId: node.id,\n field: 'config.prompt',\n });\n }\n if (node.kind === 'agent' && node.config.maxIterations !== undefined) {\n if (!Number.isFinite(node.config.maxIterations) || node.config.maxIterations < 1) {\n errors.push({\n code: 'invalid_node_config',\n message: `Agent node \"${node.title}\" has an invalid iteration limit.`,\n nodeId: node.id,\n field: 'config.maxIterations',\n });\n }\n }\n}\n\nfunction isAcyclic(indegreeInput: Map<string, number>, outgoing: Map<string, string[]>): boolean {\n const indegree = new Map(indegreeInput);\n const queue = [...indegree.entries()].filter(([, count]) => count === 0).map(([id]) => id);\n let visited = 0;\n while (queue.length > 0) {\n const id = queue.shift()!;\n visited += 1;\n for (const target of outgoing.get(id) ?? []) {\n const next = (indegree.get(target) ?? 0) - 1;\n indegree.set(target, next);\n if (next === 0) queue.push(target);\n }\n }\n return visited === indegree.size;\n}\n\nfunction collectReachable(start: string, outgoing: Map<string, string[]>): Set<string> {\n const seen = new Set<string>();\n const queue = [start];\n while (queue.length > 0) {\n const id = queue.shift()!;\n if (seen.has(id)) continue;\n seen.add(id);\n queue.push(...(outgoing.get(id) ?? []));\n }\n return seen;\n}\n"],"mappings":"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"}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
+
import type { WorkflowGraph } from '../domain/definition.js';
|
|
1
2
|
import type { WorkflowDraftConstraints, WorkflowDraftMode } from './workflow-draft.types.js';
|
|
2
3
|
export interface WorkflowDraftRepairIssue {
|
|
3
4
|
source: 'parse' | 'validation' | 'lint';
|
|
4
5
|
severity: 'error' | 'warning';
|
|
5
6
|
code: string;
|
|
6
7
|
message: string;
|
|
7
|
-
line?: number;
|
|
8
|
-
column?: number;
|
|
9
8
|
}
|
|
10
9
|
export declare function buildWorkflowDraftPrompt(params: {
|
|
11
10
|
prompt: string;
|
|
12
11
|
language?: 'en' | 'zh';
|
|
13
12
|
mode: WorkflowDraftMode;
|
|
14
|
-
|
|
13
|
+
existingGraph?: WorkflowGraph;
|
|
15
14
|
constraints?: WorkflowDraftConstraints;
|
|
16
15
|
}): string;
|
|
17
16
|
export declare function buildWorkflowDraftRepairPrompt(params: {
|