@xopcai/xopc 0.0.142 → 0.0.144
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/feishu/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
- package/dist/extensions/telegram/src/inbound-processor.js +1 -1
- package/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +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-EAVnrCAs.js} +1 -1
- package/dist/gateway/static/root/assets/agents-5rTuJOtT.js +2 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-81xd1p9R.js → app-management-settings-panel-Bu568NpC.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DYeQsYU8.js → appearance-settings-DSkm9bp_.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DWetalKp.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-D_oa7oti.js → archive-plugin-C99N0vV6.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-Cd-bwI2N.js → attachment-load-CHTDqME5.js} +1 -1
- package/dist/gateway/static/root/assets/automation-suggestion-card-CBt6U3-S.js +1 -0
- package/dist/gateway/static/root/assets/automations-page-ICUfxeOz.js +4 -0
- package/dist/gateway/static/root/assets/{binary-plugins-O8svLKWw.js → binary-plugins-BRtxOLlM.js} +1 -1
- package/dist/gateway/static/root/assets/block-editor-CUlXfgXd.js +184 -0
- package/dist/gateway/static/root/assets/browser-settings-page-D7Bj4MKi.js +8 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-dJy1Eqgx.js → capability-presets-api-Bg1ntFSD.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-C-8I-Ktn.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-Dm5EqQyK.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-BOzjh-OK.js +2 -0
- package/dist/gateway/static/root/assets/{desktop-pet-DFMfIb5F.js → desktop-pet-C-Drhqyk.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-CRGiolqF.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-BrYt1gAr.js → directory-picker-path-field-Dw1L3M84.js} +1 -1
- package/dist/gateway/static/root/assets/dist-SwiI0Xu3.js +1 -0
- package/dist/gateway/static/root/assets/dreaming-settings-CF21cbjo.js +3 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-Bh630pLD.js → extension-debug-page-Dcl8LJG_.js} +1 -1
- package/dist/gateway/static/root/assets/extension-page-i_BXmO_x.js +1 -0
- package/dist/gateway/static/root/assets/extension-settings-page-CWIi7xsn.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-2sLP2kkA.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-DMHiZc-2.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-CAODVDiA.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-_d4DjmeX.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-DUy3eEse.js → goals-config-api-B4qeLKQS.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-lgsop664.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-Dx_1ZNgb.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-DeTseEk_.js +1 -0
- package/dist/gateway/static/root/assets/index-CphxClbs.css +1 -0
- package/dist/gateway/static/root/assets/index-VWvztcst.js +257 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CVIwwM15.js → keyboard-shortcuts-settings-BpwpMmlk.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-9_hbTg3j.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-B_6us9j7.js → markdown-split-BTRFTK0w.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-D_fryIyj.js → media-plugins-BABfIZPU.js} +1 -1
- package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +5 -0
- package/dist/gateway/static/root/assets/models-hub-panel-B1CUvZxh.js +2 -0
- package/dist/gateway/static/root/assets/notes-page-88QBHW9a.js +1 -0
- package/dist/gateway/static/root/assets/notes-workbench-CerZOeLW.js +2 -0
- package/dist/gateway/static/root/assets/{page-tabs-D_8jGlqx.js → page-tabs-je95DZOf.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-BBLMK8Mp.js → preview-open-alternatives-BJbwi7Rc.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-BmrApldl.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-tTn-k76N.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-DeA2-pOi.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-DVS3FR5r.js → save-bar-controls-qWMQ9mod.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-D6vKd6-T.js → schedule-field-kxd270Gs.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-BPy4lbIh.js → schema-form-DLnD-MuD.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-D4kvvcL1.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CI1OG4gq.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-WzdikxPt.js → settings-collapsible-section-DQprvu5J.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-CvfzhBV-.js → settings-form-section-Cqq7Y98y.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-BxR-Ulhi.js → settings-loading-skeleton-b6rXULL5.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-BtBVz3cX.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-layout-CKefvbYi.js → settings-page-layout-BNJbtklV.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-cmclUJzS.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page--zO-A1W1.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-DNJvqA67.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-DWr_0Xgn.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-DEGsTbJx.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-BokgAgf7.js → system-settings-panel-Cq9J7i7v.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-BwHlNL3L.js → typed-models-lib-CdSwi1gT.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-C-V73ZaJ.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-fields-editor-B1cxoGkh.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-settings-panel-B8hlamVB.js +1 -0
- package/dist/gateway/static/root/assets/{utils-BKUWB-TT.js → utils-Dx01V8qF.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DGpIUelZ.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-fzWTxF26.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CL_rnAUB.js → workflow-run-setup-panel-Dt_x8LGg.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-Bg02zEUh.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 +10 -7
- package/dist/package.js +1 -1
- package/dist/src/activity/emitter.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +2 -0
- package/dist/src/agent/agent-manager.js +12 -4
- 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/code-intelligence/binary.js +1 -1
- package/dist/src/agent/context/project-context.js +2 -2
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/embedded/run-for-session.js +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 +7 -6
- package/dist/src/agent/goals/post-turn.js.map +1 -1
- package/dist/src/agent/ipc/bus.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +5 -2
- 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/plugin-discovery.js +1 -1
- 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/models/manager.js +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +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 +12 -6
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/session/session-inspector.js +2 -2
- package/dist/src/agent/skills/hub-pull.js +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/goal-tool.js +2 -2
- 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 +4 -17
- package/dist/src/agent/tools/workflow-tool.js.map +1 -1
- package/dist/src/agent/tools/xopc-use-tool.js +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/workspace-runtime/registry.js +2 -2
- 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 +14 -2
- 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/automations/service/action-executor.js +2 -2
- package/dist/src/browser/cdp-local-launcher.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.d.ts +11 -1
- package/dist/src/browser/providers/browser-ext-install.js +42 -17
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/browser/providers/cloakbrowser.js +2 -2
- package/dist/src/browser/providers/playwright-doctor.js +1 -1
- package/dist/src/browser/stealth.js +1 -1
- package/dist/src/capabilities/store-connector.d.ts +0 -1
- package/dist/src/capabilities/store-connector.js +4 -6
- package/dist/src/capabilities/store-connector.js.map +1 -1
- package/dist/src/chat-commands/agent-edit.js +1 -1
- package/dist/src/chat-commands/builtins/config.js +1 -1
- package/dist/src/chat-commands/builtins/goal.js +2 -2
- 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/chat-commands/context.js +1 -1
- package/dist/src/cli/commands/agent.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +2 -2
- package/dist/src/cli/commands/doctor/checks/session-integrity.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 +43 -37
- 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 +4 -3
- package/dist/src/cli/commands/extension-pack.js.map +1 -1
- package/dist/src/cli/commands/goal.js +2 -2
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/commands/project.js +3 -3
- 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/gateway-bind.js +1 -1
- package/dist/src/config/index.js +1 -1
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.js +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/daemon/launchd.js +1 -1
- package/dist/src/daemon/systemd.js +1 -1
- package/dist/src/extensions/discover-extensions.js +1 -1
- 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/extensions/loader.js +2 -2
- 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/lib/static-ui.js +1 -1
- 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 +17 -4
- package/dist/src/gateway/hono/routes/memory.js.map +1 -1
- package/dist/src/gateway/hono/routes/projects.js +106 -5
- 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/lock.js +1 -1
- package/dist/src/gateway/ports.js +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 +13 -7
- 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/goal-workflow-judge.js +1 -1
- package/dist/src/goals/types.d.ts +24 -0
- package/dist/src/infra/ports.js +1 -1
- package/dist/src/infra/ssh-tunnel.js +1 -1
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/migrations/runner.js +1 -1
- package/dist/src/notes/service.js +3 -3
- package/dist/src/notes/store.js +1 -1
- package/dist/src/projects/project-service.js +1 -1
- package/dist/src/projects/workspace.js +1 -1
- package/dist/src/routing/agent-session-key.js +1 -1
- package/dist/src/routing/resolve-route.js +1 -1
- package/dist/src/routing/resolve-tui-session-key.js +1 -1
- package/dist/src/session/init-session-turn.js +1 -1
- package/dist/src/session/resolve-session.js +1 -1
- package/dist/src/session/session-title.js +2 -2
- package/dist/src/session/store.js +1 -1
- package/dist/src/storage/sqlite/connection.js +1 -1
- 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/row-mappers.js +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/backends/embedded-backend.js +4 -4
- package/dist/src/tui/clipboard-image.js +1 -1
- 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 +9 -9
- package/dist/src/tui/tui-command-formatters.js.map +1 -1
- package/dist/src/tui/tui-commands.js +4 -4
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.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/utils/index.js +1 -1
- package/dist/src/utils/logger/index.js +1 -1
- package/dist/src/utils/logger.js +1 -1
- package/dist/src/work-items/work-item-service.js +1 -1
- 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 +5 -9
- 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/dist/src/workflows/service/workflow-session-bridge.js +3 -3
- package/package.json +5 -4
- 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/dist-Mys7eFJ5.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,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: {
|
|
@@ -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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
1
2
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
3
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
4
4
|
import { getDefaultModelSync, init_providers, resolveModel } from "../../providers/index.js";
|
|
5
5
|
import { completeWithResolvedCredentials } from "../../providers/model-call.js";
|
|
6
6
|
import { resolveModelRef } from "../../config/agent-typed-models.js";
|
|
@@ -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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"}
|