@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.
Files changed (543) hide show
  1. package/README.md +1 -1
  2. package/dist/browser-ext/manifest.json +1 -1
  3. package/dist/extensions/telegram/xopc.extension.json +1 -1
  4. package/dist/gateway/static/root/assets/activity-center-store-jITiX2vJ.js +1 -0
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BawPxiu5.js → agent-avatar-dicebear-DiME9u_P.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-DzBXhZXO.js +2 -0
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-81xd1p9R.js → app-management-settings-panel-Cuo7SbUP.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DYeQsYU8.js → appearance-settings-DUfdNQqk.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-CKuKK5AU.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-D_oa7oti.js → archive-plugin-B-Qk6cGr.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-Cd-bwI2N.js → attachment-load-Di6EEbQX.js} +1 -1
  12. package/dist/gateway/static/root/assets/automation-suggestion-card-DGxvRxtO.js +1 -0
  13. package/dist/gateway/static/root/assets/automations-page-D-FF_WKV.js +4 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-O8svLKWw.js → binary-plugins-ZaOZDH2I.js} +1 -1
  15. package/dist/gateway/static/root/assets/block-editor-BTFhjWfg.js +184 -0
  16. package/dist/gateway/static/root/assets/browser-settings-page-BvKLdEQt.js +8 -0
  17. package/dist/gateway/static/root/assets/{capability-presets-api-dJy1Eqgx.js → capability-presets-api-BU-pVZiZ.js} +1 -1
  18. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DgyeEwzh.js +2 -0
  19. package/dist/gateway/static/root/assets/{channel-recipient-api-Bfuhp2ty.js → channel-recipient-api-DuulnhIj.js} +1 -1
  20. package/dist/gateway/static/root/assets/channels-settings-BbVsdD_I.js +1 -0
  21. package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +1 -0
  22. package/dist/gateway/static/root/assets/check-BODqo66o.js +1 -0
  23. package/dist/gateway/static/root/assets/chunk-QUQL4437-DXsxWP7r.js +4 -0
  24. package/dist/gateway/static/root/assets/circle-alert-RzVebuX2.js +1 -0
  25. package/dist/gateway/static/root/assets/connectors-page-B8QqVy3I.js +2 -0
  26. package/dist/gateway/static/root/assets/{desktop-pet-DFMfIb5F.js → desktop-pet---yzVxVR.js} +1 -1
  27. package/dist/gateway/static/root/assets/desktop-pet-settings-Dc3gqBJE.js +1 -0
  28. package/dist/gateway/static/root/assets/{directory-picker-path-field-BrYt1gAr.js → directory-picker-path-field-DCmOGLtK.js} +1 -1
  29. package/dist/gateway/static/root/assets/dreaming-settings-BgT5KZVe.js +3 -0
  30. package/dist/gateway/static/root/assets/{extension-debug-page-Bh630pLD.js → extension-debug-page-ByaKTTq4.js} +1 -1
  31. package/dist/gateway/static/root/assets/extension-page-BmRzHAZr.js +1 -0
  32. package/dist/gateway/static/root/assets/extension-settings-page-JUtwIhbF.js +1 -0
  33. package/dist/gateway/static/root/assets/{fetch-B1WtuprY.js → fetch-8QNN25Sh.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-config-api-De2N821l.js → gateway-config-api-CxicF50_.js} +1 -1
  35. package/dist/gateway/static/root/assets/gateway-settings-Bz2I_EO5.js +1 -0
  36. package/dist/gateway/static/root/assets/{gateway-startup-retry-nEujFSDj.js → gateway-startup-retry-5YBnS9Fj.js} +1 -1
  37. package/dist/gateway/static/root/assets/goal-create-dialog-VcoyuZGN.js +1 -0
  38. package/dist/gateway/static/root/assets/goal-detail-page-Cilkap2G.js +4 -0
  39. package/dist/gateway/static/root/assets/{goals-config-api-DUy3eEse.js → goals-config-api-CwcHRdC0.js} +1 -1
  40. package/dist/gateway/static/root/assets/goals-page-C6eoni4z.js +2 -0
  41. package/dist/gateway/static/root/assets/goals-settings-o4i-qAOS.js +1 -0
  42. package/dist/gateway/static/root/assets/heartbeat-settings-DQQkETX8.js +1 -0
  43. package/dist/gateway/static/root/assets/index-BKRqeRHm.js +257 -0
  44. package/dist/gateway/static/root/assets/index-CphxClbs.css +1 -0
  45. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CVIwwM15.js → keyboard-shortcuts-settings-LT6qB-ua.js} +1 -1
  46. package/dist/gateway/static/root/assets/logs-page-Dli2e3fS.js +7 -0
  47. package/dist/gateway/static/root/assets/{markdown-split-B_6us9j7.js → markdown-split-Dw-yE2-y.js} +1 -1
  48. package/dist/gateway/static/root/assets/{media-plugins-D_fryIyj.js → media-plugins-D9NNNUgE.js} +1 -1
  49. package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +5 -0
  50. package/dist/gateway/static/root/assets/models-hub-panel-DVn2Q1Ik.js +2 -0
  51. package/dist/gateway/static/root/assets/notes-page-CRgbJGgk.js +1 -0
  52. package/dist/gateway/static/root/assets/notes-workbench-BxZRHLWx.js +2 -0
  53. package/dist/gateway/static/root/assets/{page-tabs-D_8jGlqx.js → page-tabs-D4hkWVt_.js} +1 -1
  54. package/dist/gateway/static/root/assets/{preview-open-alternatives-BBLMK8Mp.js → preview-open-alternatives-CIckv0uy.js} +1 -1
  55. package/dist/gateway/static/root/assets/project-detail-page-Doz53xLn.js +1 -0
  56. package/dist/gateway/static/root/assets/projects-page-DoMtcRLg.js +1 -0
  57. package/dist/gateway/static/root/assets/remote-access-hub-BeHVEgrm.js +1 -0
  58. package/dist/gateway/static/root/assets/{save-bar-controls-DVS3FR5r.js → save-bar-controls-B0b42kB2.js} +1 -1
  59. package/dist/gateway/static/root/assets/{schedule-field-D6vKd6-T.js → schedule-field-BtjEkczK.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schema-form-BPy4lbIh.js → schema-form-Bf0bk3i6.js} +1 -1
  61. package/dist/gateway/static/root/assets/sessions-page-Bk4bQsBe.js +1 -0
  62. package/dist/gateway/static/root/assets/settings-advanced-gate-DdFyaRMm.js +1 -0
  63. package/dist/gateway/static/root/assets/{settings-collapsible-section-WzdikxPt.js → settings-collapsible-section-BTKTdTNX.js} +1 -1
  64. package/dist/gateway/static/root/assets/{settings-form-section-CvfzhBV-.js → settings-form-section-DL4P0sAj.js} +1 -1
  65. package/dist/gateway/static/root/assets/{settings-loading-skeleton-BxR-Ulhi.js → settings-loading-skeleton-BV6KFNj4.js} +1 -1
  66. package/dist/gateway/static/root/assets/settings-page-B_4DsX5W.js +1 -0
  67. package/dist/gateway/static/root/assets/{settings-page-layout-CKefvbYi.js → settings-page-layout-CyGlrInB.js} +1 -1
  68. package/dist/gateway/static/root/assets/setup-status-panel-DJ1_MLgX.js +1 -0
  69. package/dist/gateway/static/root/assets/share-preview-page-BQBV7YrV.js +2 -0
  70. package/dist/gateway/static/root/assets/shares-settings-0VuFLBeU.js +1 -0
  71. package/dist/gateway/static/root/assets/skill-reload-api-DO87Ckeo.js +1 -0
  72. package/dist/gateway/static/root/assets/skills-page-D3VdtxAn.js +2 -0
  73. package/dist/gateway/static/root/assets/{system-settings-panel-BokgAgf7.js → system-settings-panel-D85fBBuI.js} +1 -1
  74. package/dist/gateway/static/root/assets/{typed-models-lib-BwHlNL3L.js → typed-models-lib-CwEuYrHX.js} +1 -1
  75. package/dist/gateway/static/root/assets/{use-channel-catalog-DR11ap3A.js → use-channel-catalog-COXIfXcl.js} +1 -1
  76. package/dist/gateway/static/root/assets/user-context-page-m9JVQ73F.js +1 -0
  77. package/dist/gateway/static/root/assets/user-profile-fields-editor-DtQiuY7E.js +1 -0
  78. package/dist/gateway/static/root/assets/user-profile-settings-panel-CWM0fEpb.js +1 -0
  79. package/dist/gateway/static/root/assets/{utils-BKUWB-TT.js → utils--BO6xT3u.js} +1 -1
  80. package/dist/gateway/static/root/assets/voice-api-key-field-LoT3wgZ9.js +1 -0
  81. package/dist/gateway/static/root/assets/with-selector-aYPsXwdl.js +1 -0
  82. package/dist/gateway/static/root/assets/work-item-detail-page-DSTMz_mO.js +1 -0
  83. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CL_rnAUB.js → workflow-run-setup-panel-B35lJzvm.js} +2 -2
  84. package/dist/gateway/static/root/assets/workflows-page-BfSm9oR8.js +11 -0
  85. package/dist/gateway/static/root/assets/workflows-page-DLioOiRN.css +1 -0
  86. package/dist/gateway/static/root/connector-icons/README.md +11 -0
  87. package/dist/gateway/static/root/connector-icons/airtable.svg +13 -0
  88. package/dist/gateway/static/root/connector-icons/asana.svg +15 -0
  89. package/dist/gateway/static/root/connector-icons/brave-search.svg +1 -0
  90. package/dist/gateway/static/root/connector-icons/clickup.svg +19 -0
  91. package/dist/gateway/static/root/connector-icons/composio.svg +266 -0
  92. package/dist/gateway/static/root/connector-icons/discord.svg +15 -0
  93. package/dist/gateway/static/root/connector-icons/dropbox.svg +152 -0
  94. package/dist/gateway/static/root/connector-icons/excel.svg +56 -0
  95. package/dist/gateway/static/root/connector-icons/fetch.svg +6 -0
  96. package/dist/gateway/static/root/connector-icons/figma.svg +178 -0
  97. package/dist/gateway/static/root/connector-icons/filesystem.svg +6 -0
  98. package/dist/gateway/static/root/connector-icons/github.svg +10 -0
  99. package/dist/gateway/static/root/connector-icons/gmail.svg +3 -0
  100. package/dist/gateway/static/root/connector-icons/google-calendar.svg +3 -0
  101. package/dist/gateway/static/root/connector-icons/google-docs.svg +25 -0
  102. package/dist/gateway/static/root/connector-icons/google-drive.svg +25 -0
  103. package/dist/gateway/static/root/connector-icons/google-sheets.svg +1 -0
  104. package/dist/gateway/static/root/connector-icons/hubspot.svg +142 -0
  105. package/dist/gateway/static/root/connector-icons/jira.svg +15 -0
  106. package/dist/gateway/static/root/connector-icons/linear.svg +5 -0
  107. package/dist/gateway/static/root/connector-icons/memory.svg +5 -0
  108. package/dist/gateway/static/root/connector-icons/microsoft-teams.svg +33 -0
  109. package/dist/gateway/static/root/connector-icons/notion.svg +5 -0
  110. package/dist/gateway/static/root/connector-icons/one-drive.svg +13 -0
  111. package/dist/gateway/static/root/connector-icons/outlook.svg +76 -0
  112. package/dist/gateway/static/root/connector-icons/playwright.svg +9 -0
  113. package/dist/gateway/static/root/connector-icons/salesforce.svg +17 -0
  114. package/dist/gateway/static/root/connector-icons/sequential-thinking.svg +8 -0
  115. package/dist/gateway/static/root/connector-icons/shopify.svg +5 -0
  116. package/dist/gateway/static/root/connector-icons/slack.svg +9 -0
  117. package/dist/gateway/static/root/connector-icons/spotify.svg +43 -0
  118. package/dist/gateway/static/root/connector-icons/stripe.svg +11 -0
  119. package/dist/gateway/static/root/connector-icons/telegram.svg +130 -0
  120. package/dist/gateway/static/root/connector-icons/time.svg +6 -0
  121. package/dist/gateway/static/root/connector-icons/todoist.svg +277 -0
  122. package/dist/gateway/static/root/connector-icons/trello.svg +19 -0
  123. package/dist/gateway/static/root/connector-icons/twitter.svg +128 -0
  124. package/dist/gateway/static/root/connector-icons/whatsapp.svg +61 -0
  125. package/dist/gateway/static/root/connector-icons/youtube.svg +11 -0
  126. package/dist/gateway/static/root/index.html +9 -6
  127. package/dist/package.js +1 -1
  128. package/dist/src/agent/agent-manager.d.ts +2 -0
  129. package/dist/src/agent/agent-manager.js +8 -0
  130. package/dist/src/agent/agent-manager.js.map +1 -1
  131. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  132. package/dist/src/agent/background-review/prompts.js +3 -2
  133. package/dist/src/agent/background-review/prompts.js.map +1 -1
  134. package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
  135. package/dist/src/agent/embedded/xopc-tools-bridge.d.ts +9 -0
  136. package/dist/src/agent/embedded/xopc-tools-bridge.js +71 -3
  137. package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
  138. package/dist/src/agent/goals/post-turn.js +5 -4
  139. package/dist/src/agent/goals/post-turn.js.map +1 -1
  140. package/dist/src/agent/mcp/mcp-transport.js +4 -1
  141. package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
  142. package/dist/src/agent/memory/context/planner.d.ts +1 -0
  143. package/dist/src/agent/memory/context/planner.js +60 -14
  144. package/dist/src/agent/memory/context/planner.js.map +1 -1
  145. package/dist/src/agent/memory/context/types.d.ts +3 -1
  146. package/dist/src/agent/memory/lifecycle.d.ts +11 -0
  147. package/dist/src/agent/memory/lifecycle.js +50 -0
  148. package/dist/src/agent/memory/lifecycle.js.map +1 -0
  149. package/dist/src/agent/memory/source-origin.d.ts +3 -0
  150. package/dist/src/agent/memory/source-origin.js +19 -0
  151. package/dist/src/agent/memory/source-origin.js.map +1 -0
  152. package/dist/src/agent/memory/understanding/service.js +5 -0
  153. package/dist/src/agent/memory/understanding/service.js.map +1 -1
  154. package/dist/src/agent/memory/user-context-coordinator.js +7 -2
  155. package/dist/src/agent/memory/user-context-coordinator.js.map +1 -1
  156. package/dist/src/agent/prompt/sections/behavior.d.ts +2 -0
  157. package/dist/src/agent/prompt/sections/behavior.js +30 -1
  158. package/dist/src/agent/prompt/sections/behavior.js.map +1 -1
  159. package/dist/src/agent/prompt/sections/tooling.js +1 -1
  160. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  161. package/dist/src/agent/prompt/service-prompt-builder.js +8 -1
  162. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  163. package/dist/src/agent/prompt/system-prompt.d.ts +2 -0
  164. package/dist/src/agent/prompt/system-prompt.js +6 -3
  165. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  166. package/dist/src/agent/service/process-direct-streaming.js +22 -0
  167. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  168. package/dist/src/agent/service.d.ts +2 -0
  169. package/dist/src/agent/service.js +9 -3
  170. package/dist/src/agent/service.js.map +1 -1
  171. package/dist/src/agent/starter-agents.js +1 -1
  172. package/dist/src/agent/starter-agents.js.map +1 -1
  173. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  174. package/dist/src/agent/tool-manuals/xopc-use.js +1 -1
  175. package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -1
  176. package/dist/src/agent/tools/composio-tool.d.ts +18 -5
  177. package/dist/src/agent/tools/composio-tool.js +252 -35
  178. package/dist/src/agent/tools/composio-tool.js.map +1 -1
  179. package/dist/src/agent/tools/factory.js +7 -3
  180. package/dist/src/agent/tools/factory.js.map +1 -1
  181. package/dist/src/agent/tools/index.d.ts +1 -1
  182. package/dist/src/agent/tools/index.js +2 -2
  183. package/dist/src/agent/tools/workflow-tool.d.ts +0 -1
  184. package/dist/src/agent/tools/workflow-tool.js +3 -16
  185. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  186. package/dist/src/agent/workflow/builtins/index.d.ts +2 -28
  187. package/dist/src/agent/workflow/builtins/index.js +226 -41
  188. package/dist/src/agent/workflow/builtins/index.js.map +1 -1
  189. package/dist/src/agent/workflow/catalog.d.ts +32 -34
  190. package/dist/src/agent/workflow/catalog.js +158 -154
  191. package/dist/src/agent/workflow/catalog.js.map +1 -1
  192. package/dist/src/agent/workflow/index.d.ts +4 -6
  193. package/dist/src/agent/workflow/index.js +2 -5
  194. package/dist/src/agent/workflow/snapshot.d.ts +2 -2
  195. package/dist/src/agent/workflow/snapshot.js +2 -2
  196. package/dist/src/agent/workflow/snapshot.js.map +1 -1
  197. package/dist/src/agent/workflow/structured-output-tool.d.ts +2 -2
  198. package/dist/src/agent/workflow/structured-output-tool.js +2 -2
  199. package/dist/src/agent/workflow/structured-output-tool.js.map +1 -1
  200. package/dist/src/agent/workflow/subagent-runner.js +1 -1
  201. package/dist/src/agent/workflow/types.d.ts +31 -26
  202. package/dist/src/agent-manifest/index.d.ts +1 -0
  203. package/dist/src/agent-manifest/index.js +3 -1
  204. package/dist/src/agent-manifest/index.js.map +1 -1
  205. package/dist/src/agent-manifest/preset-chain.d.ts +10 -0
  206. package/dist/src/agent-manifest/preset-chain.js +32 -0
  207. package/dist/src/agent-manifest/preset-chain.js.map +1 -0
  208. package/dist/src/agent-manifest/resolver.js +3 -10
  209. package/dist/src/agent-manifest/resolver.js.map +1 -1
  210. package/dist/src/agent-manifest/schema.d.ts +4 -4
  211. package/dist/src/automations/api/routes.js +13 -1
  212. package/dist/src/automations/api/routes.js.map +1 -1
  213. package/dist/src/automations/domain/validation.d.ts +14 -14
  214. package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
  215. package/dist/src/browser/providers/browser-ext-install.d.ts +11 -1
  216. package/dist/src/browser/providers/browser-ext-install.js +39 -14
  217. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  218. package/dist/src/capabilities/store-connector.d.ts +0 -1
  219. package/dist/src/capabilities/store-connector.js +3 -5
  220. package/dist/src/capabilities/store-connector.js.map +1 -1
  221. package/dist/src/chat-commands/builtins/review.js +72 -73
  222. package/dist/src/chat-commands/builtins/review.js.map +1 -1
  223. package/dist/src/chat-commands/builtins/workflow.js +9 -54
  224. package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
  225. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  226. package/dist/src/cli/commands/extension-create.js +2 -2
  227. package/dist/src/cli/commands/extension-create.js.map +1 -1
  228. package/dist/src/cli/commands/extension-marketplace.js +42 -36
  229. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  230. package/dist/src/cli/commands/extension-pack.d.ts +6 -0
  231. package/dist/src/cli/commands/extension-pack.js +3 -2
  232. package/dist/src/cli/commands/extension-pack.js.map +1 -1
  233. package/dist/src/commands/agents.config.d.ts +1 -0
  234. package/dist/src/commands/agents.config.js +1 -0
  235. package/dist/src/commands/agents.config.js.map +1 -1
  236. package/dist/src/config/schema.d.ts +6 -6
  237. package/dist/src/config/schema.js +6 -22
  238. package/dist/src/config/schema.js.map +1 -1
  239. package/dist/src/config/web-patch.d.ts +1 -1
  240. package/dist/src/connectors/approval.d.ts +2 -0
  241. package/dist/src/connectors/approval.js +33 -0
  242. package/dist/src/connectors/approval.js.map +1 -0
  243. package/dist/src/connectors/auth-provider-registry.d.ts +9 -0
  244. package/dist/src/connectors/auth-provider-registry.js +17 -0
  245. package/dist/src/connectors/auth-provider-registry.js.map +1 -0
  246. package/dist/src/connectors/builtin-catalog.js +55 -116
  247. package/dist/src/connectors/builtin-catalog.js.map +1 -1
  248. package/dist/src/connectors/catalog.js +7 -2
  249. package/dist/src/connectors/catalog.js.map +1 -1
  250. package/dist/src/connectors/composio-catalog.d.ts +19 -0
  251. package/dist/src/connectors/composio-catalog.js +237 -0
  252. package/dist/src/connectors/composio-catalog.js.map +1 -0
  253. package/dist/src/connectors/composio-logo.d.ts +1 -0
  254. package/dist/src/connectors/composio-logo.js +51 -0
  255. package/dist/src/connectors/composio-logo.js.map +1 -0
  256. package/dist/src/connectors/composio-sessions.d.ts +116 -0
  257. package/dist/src/connectors/composio-sessions.js +296 -0
  258. package/dist/src/connectors/composio-sessions.js.map +1 -0
  259. package/dist/src/connectors/composio-triggers.d.ts +17 -0
  260. package/dist/src/connectors/composio-triggers.js +48 -5
  261. package/dist/src/connectors/composio-triggers.js.map +1 -1
  262. package/dist/src/connectors/composio.d.ts +31 -2
  263. package/dist/src/connectors/composio.js +374 -151
  264. package/dist/src/connectors/composio.js.map +1 -1
  265. package/dist/src/connectors/connector-memory-sync.d.ts +15 -0
  266. package/dist/src/connectors/connector-memory-sync.js +90 -0
  267. package/dist/src/connectors/connector-memory-sync.js.map +1 -0
  268. package/dist/src/connectors/install.js +35 -92
  269. package/dist/src/connectors/install.js.map +1 -1
  270. package/dist/src/connectors/instances.js +6 -2
  271. package/dist/src/connectors/instances.js.map +1 -1
  272. package/dist/src/connectors/integration-strategy.d.ts +3 -0
  273. package/dist/src/connectors/integration-strategy.js +29 -0
  274. package/dist/src/connectors/integration-strategy.js.map +1 -0
  275. package/dist/src/connectors/policy.d.ts +13 -0
  276. package/dist/src/connectors/policy.js +48 -0
  277. package/dist/src/connectors/policy.js.map +1 -0
  278. package/dist/src/connectors/providers.js +1 -1
  279. package/dist/src/connectors/runtime-adapter-registry.d.ts +25 -0
  280. package/dist/src/connectors/runtime-adapter-registry.js +154 -0
  281. package/dist/src/connectors/runtime-adapter-registry.js.map +1 -0
  282. package/dist/src/connectors/types.d.ts +113 -4
  283. package/dist/src/connectors/workflow-preflight.d.ts +20 -0
  284. package/dist/src/connectors/workflow-preflight.js +70 -0
  285. package/dist/src/connectors/workflow-preflight.js.map +1 -0
  286. package/dist/src/extensions/install-transaction.d.ts +16 -0
  287. package/dist/src/extensions/install-transaction.js +76 -0
  288. package/dist/src/extensions/install-transaction.js.map +1 -0
  289. package/dist/src/extensions/install.d.ts +2 -0
  290. package/dist/src/extensions/install.js +23 -1
  291. package/dist/src/extensions/install.js.map +1 -1
  292. package/dist/src/gateway/agents-admin.d.ts +2 -0
  293. package/dist/src/gateway/agents-admin.js +7 -0
  294. package/dist/src/gateway/agents-admin.js.map +1 -1
  295. package/dist/src/gateway/capability-presets-admin.d.ts +11 -0
  296. package/dist/src/gateway/capability-presets-admin.js +11 -4
  297. package/dist/src/gateway/capability-presets-admin.js.map +1 -1
  298. package/dist/src/gateway/chat-stream/mapper.js +17 -0
  299. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  300. package/dist/src/gateway/chat-stream/protocol.d.ts +18 -1
  301. package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -3
  302. package/dist/src/gateway/hono/routes/agents.js +3 -0
  303. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  304. package/dist/src/gateway/hono/routes/capability-presets.js +19 -1
  305. package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -1
  306. package/dist/src/gateway/hono/routes/connectors.js +188 -25
  307. package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
  308. package/dist/src/gateway/hono/routes/goals.js +22 -3
  309. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  310. package/dist/src/gateway/hono/routes/home.d.ts +60 -1
  311. package/dist/src/gateway/hono/routes/home.js +244 -18
  312. package/dist/src/gateway/hono/routes/home.js.map +1 -1
  313. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  314. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  315. package/dist/src/gateway/hono/routes/memory.js +14 -1
  316. package/dist/src/gateway/hono/routes/memory.js.map +1 -1
  317. package/dist/src/gateway/hono/routes/projects.js +103 -2
  318. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  319. package/dist/src/gateway/hono/routes/public-gateway.js +93 -0
  320. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  321. package/dist/src/gateway/hono/routes/workflows.js +137 -22
  322. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  323. package/dist/src/gateway/hono/routes/you.d.ts +23 -0
  324. package/dist/src/gateway/hono/routes/you.js +538 -0
  325. package/dist/src/gateway/hono/routes/you.js.map +1 -0
  326. package/dist/src/gateway/hono/sse.d.ts +2 -1
  327. package/dist/src/gateway/hono/sse.js +2 -1
  328. package/dist/src/gateway/hono/sse.js.map +1 -1
  329. package/dist/src/gateway/service/marketplace-service.d.ts +13 -1
  330. package/dist/src/gateway/service/marketplace-service.js +96 -40
  331. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  332. package/dist/src/gateway/service.d.ts +2 -0
  333. package/dist/src/gateway/service.js +7 -1
  334. package/dist/src/gateway/service.js.map +1 -1
  335. package/dist/src/goals/goal-service.d.ts +7 -5
  336. package/dist/src/goals/goal-service.js +25 -13
  337. package/dist/src/goals/goal-service.js.map +1 -1
  338. package/dist/src/goals/goal-store.js +46 -7
  339. package/dist/src/goals/goal-store.js.map +1 -1
  340. package/dist/src/goals/types.d.ts +24 -0
  341. package/dist/src/storage/sqlite/connector-repository.d.ts +49 -0
  342. package/dist/src/storage/sqlite/connector-repository.js +385 -0
  343. package/dist/src/storage/sqlite/connector-repository.js.map +1 -0
  344. package/dist/src/storage/sqlite/index.d.ts +3 -0
  345. package/dist/src/storage/sqlite/index.js +4 -1
  346. package/dist/src/storage/sqlite/migrations/030_connectors.sql +94 -0
  347. package/dist/src/storage/sqlite/migrations/031_connector_approvals.sql +24 -0
  348. package/dist/src/storage/sqlite/migrations/032_connector_webhook_deliveries.sql +15 -0
  349. package/dist/src/storage/sqlite/migrations/033_user_trust_policies.sql +6 -0
  350. package/dist/src/storage/sqlite/migrations/034_allow_global_auto_trust.sql +14 -0
  351. package/dist/src/storage/sqlite/migrations/035_user_profile_prompt_state.sql +7 -0
  352. package/dist/src/storage/sqlite/migrations/036_goal_outcome_metric.sql +12 -0
  353. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  354. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  355. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  356. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  357. package/dist/src/storage/sqlite/schema.js +1 -1
  358. package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +3 -0
  359. package/dist/src/storage/sqlite/user-profile-setup-repository.js +34 -0
  360. package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +1 -0
  361. package/dist/src/storage/sqlite/user-trust-repository.d.ts +3 -0
  362. package/dist/src/storage/sqlite/user-trust-repository.js +34 -0
  363. package/dist/src/storage/sqlite/user-trust-repository.js.map +1 -0
  364. package/dist/src/tui/components/assistant-message.js +15 -0
  365. package/dist/src/tui/components/assistant-message.js.map +1 -1
  366. package/dist/src/tui/tui-agent-events.js +85 -1
  367. package/dist/src/tui/tui-agent-events.js.map +1 -1
  368. package/dist/src/tui/tui-command-formatters.js +7 -7
  369. package/dist/src/tui/tui-command-formatters.js.map +1 -1
  370. package/dist/src/tui/tui-commands.js +1 -1
  371. package/dist/src/tui/tui-startup-resources.js +1 -1
  372. package/dist/src/user-context/import.d.ts +12 -0
  373. package/dist/src/user-context/import.js +48 -0
  374. package/dist/src/user-context/import.js.map +1 -0
  375. package/dist/src/user-context/profile.d.ts +37 -0
  376. package/dist/src/user-context/profile.js +165 -0
  377. package/dist/src/user-context/profile.js.map +1 -0
  378. package/dist/src/user-context/projection.d.ts +54 -0
  379. package/dist/src/user-context/projection.js +121 -0
  380. package/dist/src/user-context/projection.js.map +1 -0
  381. package/dist/src/user-context/source-recommendations.d.ts +13 -0
  382. package/dist/src/user-context/source-recommendations.js +86 -0
  383. package/dist/src/user-context/source-recommendations.js.map +1 -0
  384. package/dist/src/user-context/trust-policy.d.ts +11 -0
  385. package/dist/src/user-context/trust-policy.js +31 -0
  386. package/dist/src/user-context/trust-policy.js.map +1 -0
  387. package/dist/src/workflows/authoring/index.d.ts +1 -0
  388. package/dist/src/workflows/authoring/index.js +2 -0
  389. package/dist/src/workflows/authoring/workflow-draft-store.d.ts +33 -0
  390. package/dist/src/workflows/authoring/workflow-draft-store.js +74 -0
  391. package/dist/src/workflows/authoring/workflow-draft-store.js.map +1 -0
  392. package/dist/src/workflows/domain/definition-utils.d.ts +6 -4
  393. package/dist/src/workflows/domain/definition-utils.js +28 -26
  394. package/dist/src/workflows/domain/definition-utils.js.map +1 -1
  395. package/dist/src/workflows/domain/definition.d.ts +79 -6
  396. package/dist/src/workflows/domain/event.d.ts +18 -2
  397. package/dist/src/workflows/domain/index.js +3 -3
  398. package/dist/src/workflows/domain/run.d.ts +16 -2
  399. package/dist/src/workflows/domain/run.js.map +1 -1
  400. package/dist/src/workflows/domain/validation.d.ts +9 -5
  401. package/dist/src/workflows/domain/validation.js +183 -40
  402. package/dist/src/workflows/domain/validation.js.map +1 -1
  403. package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +2 -3
  404. package/dist/src/workflows/draft/workflow-draft-prompt.js +31 -73
  405. package/dist/src/workflows/draft/workflow-draft-prompt.js.map +1 -1
  406. package/dist/src/workflows/draft/workflow-draft-service.js +4 -8
  407. package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -1
  408. package/dist/src/workflows/draft/workflow-draft-validator.js +29 -37
  409. package/dist/src/workflows/draft/workflow-draft-validator.js.map +1 -1
  410. package/dist/src/workflows/draft/workflow-draft.types.d.ts +4 -4
  411. package/dist/src/workflows/engine/projector.js +43 -1
  412. package/dist/src/workflows/engine/projector.js.map +1 -1
  413. package/dist/src/workflows/engine/workflow-engine.d.ts +2 -3
  414. package/dist/src/workflows/engine/workflow-engine.js +24 -4
  415. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  416. package/dist/src/workflows/index.js +4 -7
  417. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +1 -9
  418. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -1
  419. package/dist/src/workflows/runtime/graph-workflow-runtime.d.ts +10 -0
  420. package/dist/src/workflows/runtime/graph-workflow-runtime.js +295 -0
  421. package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +1 -0
  422. package/dist/src/workflows/runtime/index.d.ts +1 -2
  423. package/dist/src/workflows/runtime/index.js +2 -5
  424. package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +5 -8
  425. package/dist/src/workflows/service/workflow-run-service.js +15 -1
  426. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  427. package/dist/src/workflows/service/workflow-run-service.types.d.ts +2 -1
  428. package/package.json +4 -3
  429. package/dist/gateway/static/root/assets/agents-CyvCIHnB.js +0 -2
  430. package/dist/gateway/static/root/assets/apps-page-DK_Vx6nl.js +0 -1
  431. package/dist/gateway/static/root/assets/automation-suggestion-card-B1LV3YYv.js +0 -1
  432. package/dist/gateway/static/root/assets/automations-page-fzrovqhv.js +0 -4
  433. package/dist/gateway/static/root/assets/block-editor-Dhj5f4Bx.js +0 -184
  434. package/dist/gateway/static/root/assets/browser-settings-page-BDn-n-UB.js +0 -8
  435. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Co5ipo_Q.js +0 -1
  436. package/dist/gateway/static/root/assets/channels-settings-BWlpaxg9.js +0 -1
  437. package/dist/gateway/static/root/assets/channels-status-swr-D_jkIZLV.js +0 -1
  438. package/dist/gateway/static/root/assets/connectors-page-BcekbW4q.js +0 -2
  439. package/dist/gateway/static/root/assets/desktop-pet-settings-BJCUuL8Y.js +0 -1
  440. package/dist/gateway/static/root/assets/dreaming-settings-BN1Z2mIo.js +0 -3
  441. package/dist/gateway/static/root/assets/extension-page-B-1KxvVy.js +0 -1
  442. package/dist/gateway/static/root/assets/extension-settings-page-BF9NACI3.js +0 -1
  443. package/dist/gateway/static/root/assets/gateway-settings-DN9sNREz.js +0 -1
  444. package/dist/gateway/static/root/assets/goal-create-dialog-BpoQW8cD.js +0 -1
  445. package/dist/gateway/static/root/assets/goal-detail-page-CBRSPd0b.js +0 -4
  446. package/dist/gateway/static/root/assets/goals-page-BCcBi407.js +0 -2
  447. package/dist/gateway/static/root/assets/goals-settings-pkTXzXkh.js +0 -1
  448. package/dist/gateway/static/root/assets/heartbeat-settings-ezsufgLQ.js +0 -1
  449. package/dist/gateway/static/root/assets/index-B8s8Pq5U.css +0 -1
  450. package/dist/gateway/static/root/assets/index-DcUaXYeb.js +0 -262
  451. package/dist/gateway/static/root/assets/logs-page-DQtTRXtj.js +0 -7
  452. package/dist/gateway/static/root/assets/messages-BXNELNBa.js +0 -3
  453. package/dist/gateway/static/root/assets/models-hub-panel-BP2M9n6Q.js +0 -2
  454. package/dist/gateway/static/root/assets/notes-page-CspveYaO.js +0 -1
  455. package/dist/gateway/static/root/assets/notes-workbench-BHwzJ0OC.js +0 -2
  456. package/dist/gateway/static/root/assets/project-detail-page-Dy3rsobs.js +0 -1
  457. package/dist/gateway/static/root/assets/projects-page-CWKpPE0L.js +0 -1
  458. package/dist/gateway/static/root/assets/remote-access-hub-CqNRyXEo.js +0 -1
  459. package/dist/gateway/static/root/assets/sessions-page-MEME7ivF.js +0 -1
  460. package/dist/gateway/static/root/assets/settings-advanced-gate-JVd0qaSF.js +0 -1
  461. package/dist/gateway/static/root/assets/settings-page-DYEbB1EV.js +0 -1
  462. package/dist/gateway/static/root/assets/setup-status-panel-dWN8BJ3z.js +0 -1
  463. package/dist/gateway/static/root/assets/share-preview-page-D8foINzP.js +0 -2
  464. package/dist/gateway/static/root/assets/shares-settings-Tgbv1s7G.js +0 -1
  465. package/dist/gateway/static/root/assets/skill-reload-api-D_YK0b_Z.js +0 -1
  466. package/dist/gateway/static/root/assets/skills-page-DGytfoZK.js +0 -2
  467. package/dist/gateway/static/root/assets/toast-z0toXu32.js +0 -1
  468. package/dist/gateway/static/root/assets/user-profile-settings-panel-8YtygcJp.js +0 -1
  469. package/dist/gateway/static/root/assets/voice-api-key-field-BVH71EFf.js +0 -1
  470. package/dist/gateway/static/root/assets/work-item-detail-page-JeTE7XNM.js +0 -1
  471. package/dist/gateway/static/root/assets/workflow-start-dialog-_u8Uc1ze.js +0 -1
  472. package/dist/gateway/static/root/assets/workflows-page-ixgk_y1l.js +0 -18
  473. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +0 -13
  474. package/dist/src/agent/workflow/builtins/audit-repo.js +0 -183
  475. package/dist/src/agent/workflow/builtins/audit-repo.js.map +0 -1
  476. package/dist/src/agent/workflow/builtins/client-proposal.d.ts +0 -12
  477. package/dist/src/agent/workflow/builtins/client-proposal.js +0 -164
  478. package/dist/src/agent/workflow/builtins/client-proposal.js.map +0 -1
  479. package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +0 -12
  480. package/dist/src/agent/workflow/builtins/competitor-scan.js +0 -164
  481. package/dist/src/agent/workflow/builtins/competitor-scan.js.map +0 -1
  482. package/dist/src/agent/workflow/builtins/content-draft.d.ts +0 -13
  483. package/dist/src/agent/workflow/builtins/content-draft.js +0 -159
  484. package/dist/src/agent/workflow/builtins/content-draft.js.map +0 -1
  485. package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +0 -11
  486. package/dist/src/agent/workflow/builtins/content-repurpose.js +0 -146
  487. package/dist/src/agent/workflow/builtins/content-repurpose.js.map +0 -1
  488. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +0 -13
  489. package/dist/src/agent/workflow/builtins/debug-incident.js +0 -177
  490. package/dist/src/agent/workflow/builtins/debug-incident.js.map +0 -1
  491. package/dist/src/agent/workflow/builtins/decision-compare.d.ts +0 -13
  492. package/dist/src/agent/workflow/builtins/decision-compare.js +0 -187
  493. package/dist/src/agent/workflow/builtins/decision-compare.js.map +0 -1
  494. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +0 -12
  495. package/dist/src/agent/workflow/builtins/implementation-plan.js +0 -185
  496. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +0 -1
  497. package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +0 -11
  498. package/dist/src/agent/workflow/builtins/inbox-triage.js +0 -158
  499. package/dist/src/agent/workflow/builtins/inbox-triage.js.map +0 -1
  500. package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +0 -12
  501. package/dist/src/agent/workflow/builtins/meeting-prep.js +0 -152
  502. package/dist/src/agent/workflow/builtins/meeting-prep.js.map +0 -1
  503. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +0 -14
  504. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +0 -171
  505. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +0 -1
  506. package/dist/src/agent/workflow/builtins/offer-design.d.ts +0 -12
  507. package/dist/src/agent/workflow/builtins/offer-design.js +0 -170
  508. package/dist/src/agent/workflow/builtins/offer-design.js.map +0 -1
  509. package/dist/src/agent/workflow/builtins/pr-review.d.ts +0 -12
  510. package/dist/src/agent/workflow/builtins/pr-review.js +0 -178
  511. package/dist/src/agent/workflow/builtins/pr-review.js.map +0 -1
  512. package/dist/src/agent/workflow/builtins/release-check.d.ts +0 -11
  513. package/dist/src/agent/workflow/builtins/release-check.js +0 -174
  514. package/dist/src/agent/workflow/builtins/release-check.js.map +0 -1
  515. package/dist/src/agent/workflow/builtins/research.d.ts +0 -13
  516. package/dist/src/agent/workflow/builtins/research.js +0 -188
  517. package/dist/src/agent/workflow/builtins/research.js.map +0 -1
  518. package/dist/src/agent/workflow/builtins/weekly-review.d.ts +0 -12
  519. package/dist/src/agent/workflow/builtins/weekly-review.js +0 -139
  520. package/dist/src/agent/workflow/builtins/weekly-review.js.map +0 -1
  521. package/dist/src/agent/workflow/last-run-memory.d.ts +0 -42
  522. package/dist/src/agent/workflow/last-run-memory.js +0 -60
  523. package/dist/src/agent/workflow/last-run-memory.js.map +0 -1
  524. package/dist/src/agent/workflow/lint.d.ts +0 -38
  525. package/dist/src/agent/workflow/lint.js +0 -74
  526. package/dist/src/agent/workflow/lint.js.map +0 -1
  527. package/dist/src/agent/workflow/meta-locale.d.ts +0 -12
  528. package/dist/src/agent/workflow/meta-locale.js +0 -62
  529. package/dist/src/agent/workflow/meta-locale.js.map +0 -1
  530. package/dist/src/agent/workflow/parser.d.ts +0 -20
  531. package/dist/src/agent/workflow/parser.js +0 -152
  532. package/dist/src/agent/workflow/parser.js.map +0 -1
  533. package/dist/src/agent/workflow/runtime.d.ts +0 -34
  534. package/dist/src/agent/workflow/runtime.js +0 -402
  535. package/dist/src/agent/workflow/runtime.js.map +0 -1
  536. package/dist/src/connectors/oauth.d.ts +0 -22
  537. package/dist/src/connectors/oauth.js +0 -99
  538. package/dist/src/connectors/oauth.js.map +0 -1
  539. package/dist/src/workflows/runtime/script-runtime.d.ts +0 -3
  540. package/dist/src/workflows/runtime/script-runtime.js +0 -3
  541. package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +0 -5
  542. package/dist/src/workflows/runtime/script-workflow-runtime.js +0 -15
  543. 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
- runtime: WorkflowRuntimeDefinition;
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
- import { validateWorkflowDefinitionInput } from "./validation.js";
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
- runtimeHash?: string;
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 runtimeHash?: string;\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 logs: WorkflowLogEntry[];\n artifacts: WorkflowArtifactRef[];\n timeline: WorkflowTimelineItem[];\n controls: WorkflowRunControls;\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 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 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
+ {"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' | 'script_required' | 'parse_failed' | 'meta_name_mismatch' | 'unknown_error';
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
- line?: number;
7
- column?: number;
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
- script?: string;
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: "parse_failed",
16
- message: `Invalid workflow name "${name}". Use lowercase snake_case, e.g. "audit_repo".`
14
+ code: "invalid_name",
15
+ message: `Invalid workflow name "${name}". Use lowercase snake_case.`,
16
+ field: "name"
17
17
  });
18
- if (!script.trim()) errors.push({
19
- code: "script_required",
20
- message: "Workflow script is required."
18
+ if (!input.graph) errors.push({
19
+ code: "graph_required",
20
+ message: "Workflow graph is required.",
21
+ field: "graph"
21
22
  });
22
- if (errors.length > 0) return {
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
- try {
28
- const { meta } = parseWorkflowScript(script);
29
- if (meta.name !== name) {
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: "meta_name_mismatch",
32
- message: `meta.name "${meta.name}" does not match workflow name "${name}".`
54
+ code: "duplicate_node",
55
+ message: `Duplicate node id "${node.id}".`,
56
+ nodeId: node.id
33
57
  });
34
- return {
35
- valid: false,
36
- errors,
37
- warnings
38
- };
58
+ continue;
39
59
  }
40
- return {
41
- valid: true,
42
- errors,
43
- warnings,
44
- definition: buildWorkflowDefinition({
45
- name,
46
- source: "user",
47
- script,
48
- meta
49
- })
50
- };
51
- } catch (err) {
52
- errors.push({
53
- code: "parse_failed",
54
- message: err instanceof Error ? err.message : String(err)
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
- return {
57
- valid: false,
58
- errors,
59
- warnings
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
- existingScript?: string;
13
+ existingGraph?: WorkflowGraph;
15
14
  constraints?: WorkflowDraftConstraints;
16
15
  }): string;
17
16
  export declare function buildWorkflowDraftRepairPrompt(params: {