@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.
Files changed (622) hide show
  1. package/README.md +1 -1
  2. package/dist/browser-ext/manifest.json +1 -1
  3. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  4. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
  5. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  6. package/dist/extensions/telegram/src/plugin.js +1 -1
  7. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  8. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  9. package/dist/extensions/telegram/xopc.extension.json +1 -1
  10. package/dist/extensions/weixin/src/api/api.js +1 -1
  11. package/dist/extensions/weixin/src/plugin.js +1 -1
  12. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  13. package/dist/gateway/static/root/assets/activity-center-store-jITiX2vJ.js +1 -0
  14. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BawPxiu5.js → agent-avatar-dicebear-EAVnrCAs.js} +1 -1
  15. package/dist/gateway/static/root/assets/agents-5rTuJOtT.js +2 -0
  16. package/dist/gateway/static/root/assets/{app-management-settings-panel-81xd1p9R.js → app-management-settings-panel-Bu568NpC.js} +1 -1
  17. package/dist/gateway/static/root/assets/{appearance-settings-DYeQsYU8.js → appearance-settings-DSkm9bp_.js} +1 -1
  18. package/dist/gateway/static/root/assets/apps-page-DWetalKp.js +1 -0
  19. package/dist/gateway/static/root/assets/{archive-plugin-D_oa7oti.js → archive-plugin-C99N0vV6.js} +1 -1
  20. package/dist/gateway/static/root/assets/{attachment-load-Cd-bwI2N.js → attachment-load-CHTDqME5.js} +1 -1
  21. package/dist/gateway/static/root/assets/automation-suggestion-card-CBt6U3-S.js +1 -0
  22. package/dist/gateway/static/root/assets/automations-page-ICUfxeOz.js +4 -0
  23. package/dist/gateway/static/root/assets/{binary-plugins-O8svLKWw.js → binary-plugins-BRtxOLlM.js} +1 -1
  24. package/dist/gateway/static/root/assets/block-editor-CUlXfgXd.js +184 -0
  25. package/dist/gateway/static/root/assets/browser-settings-page-D7Bj4MKi.js +8 -0
  26. package/dist/gateway/static/root/assets/{capability-presets-api-dJy1Eqgx.js → capability-presets-api-Bg1ntFSD.js} +1 -1
  27. package/dist/gateway/static/root/assets/capability-presets-settings-panel-C-8I-Ktn.js +2 -0
  28. package/dist/gateway/static/root/assets/{channel-recipient-api-Bfuhp2ty.js → channel-recipient-api-DuulnhIj.js} +1 -1
  29. package/dist/gateway/static/root/assets/channels-settings-Dm5EqQyK.js +1 -0
  30. package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +1 -0
  31. package/dist/gateway/static/root/assets/check-BODqo66o.js +1 -0
  32. package/dist/gateway/static/root/assets/chunk-QUQL4437-DXsxWP7r.js +4 -0
  33. package/dist/gateway/static/root/assets/circle-alert-RzVebuX2.js +1 -0
  34. package/dist/gateway/static/root/assets/connectors-page-BOzjh-OK.js +2 -0
  35. package/dist/gateway/static/root/assets/{desktop-pet-DFMfIb5F.js → desktop-pet-C-Drhqyk.js} +1 -1
  36. package/dist/gateway/static/root/assets/desktop-pet-settings-CRGiolqF.js +1 -0
  37. package/dist/gateway/static/root/assets/{directory-picker-path-field-BrYt1gAr.js → directory-picker-path-field-Dw1L3M84.js} +1 -1
  38. package/dist/gateway/static/root/assets/dist-SwiI0Xu3.js +1 -0
  39. package/dist/gateway/static/root/assets/dreaming-settings-CF21cbjo.js +3 -0
  40. package/dist/gateway/static/root/assets/{extension-debug-page-Bh630pLD.js → extension-debug-page-Dcl8LJG_.js} +1 -1
  41. package/dist/gateway/static/root/assets/extension-page-i_BXmO_x.js +1 -0
  42. package/dist/gateway/static/root/assets/extension-settings-page-CWIi7xsn.js +1 -0
  43. package/dist/gateway/static/root/assets/{fetch-B1WtuprY.js → fetch-8QNN25Sh.js} +1 -1
  44. package/dist/gateway/static/root/assets/{gateway-config-api-De2N821l.js → gateway-config-api-2sLP2kkA.js} +1 -1
  45. package/dist/gateway/static/root/assets/gateway-settings-DMHiZc-2.js +1 -0
  46. package/dist/gateway/static/root/assets/{gateway-startup-retry-nEujFSDj.js → gateway-startup-retry-5YBnS9Fj.js} +1 -1
  47. package/dist/gateway/static/root/assets/goal-create-dialog-CAODVDiA.js +1 -0
  48. package/dist/gateway/static/root/assets/goal-detail-page-_d4DjmeX.js +4 -0
  49. package/dist/gateway/static/root/assets/{goals-config-api-DUy3eEse.js → goals-config-api-B4qeLKQS.js} +1 -1
  50. package/dist/gateway/static/root/assets/goals-page-lgsop664.js +2 -0
  51. package/dist/gateway/static/root/assets/goals-settings-Dx_1ZNgb.js +1 -0
  52. package/dist/gateway/static/root/assets/heartbeat-settings-DeTseEk_.js +1 -0
  53. package/dist/gateway/static/root/assets/index-CphxClbs.css +1 -0
  54. package/dist/gateway/static/root/assets/index-VWvztcst.js +257 -0
  55. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CVIwwM15.js → keyboard-shortcuts-settings-BpwpMmlk.js} +1 -1
  56. package/dist/gateway/static/root/assets/logs-page-9_hbTg3j.js +7 -0
  57. package/dist/gateway/static/root/assets/{markdown-split-B_6us9j7.js → markdown-split-BTRFTK0w.js} +1 -1
  58. package/dist/gateway/static/root/assets/{media-plugins-D_fryIyj.js → media-plugins-BABfIZPU.js} +1 -1
  59. package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +5 -0
  60. package/dist/gateway/static/root/assets/models-hub-panel-B1CUvZxh.js +2 -0
  61. package/dist/gateway/static/root/assets/notes-page-88QBHW9a.js +1 -0
  62. package/dist/gateway/static/root/assets/notes-workbench-CerZOeLW.js +2 -0
  63. package/dist/gateway/static/root/assets/{page-tabs-D_8jGlqx.js → page-tabs-je95DZOf.js} +1 -1
  64. package/dist/gateway/static/root/assets/{preview-open-alternatives-BBLMK8Mp.js → preview-open-alternatives-BJbwi7Rc.js} +1 -1
  65. package/dist/gateway/static/root/assets/project-detail-page-BmrApldl.js +1 -0
  66. package/dist/gateway/static/root/assets/projects-page-tTn-k76N.js +1 -0
  67. package/dist/gateway/static/root/assets/remote-access-hub-DeA2-pOi.js +1 -0
  68. package/dist/gateway/static/root/assets/{save-bar-controls-DVS3FR5r.js → save-bar-controls-qWMQ9mod.js} +1 -1
  69. package/dist/gateway/static/root/assets/{schedule-field-D6vKd6-T.js → schedule-field-kxd270Gs.js} +1 -1
  70. package/dist/gateway/static/root/assets/{schema-form-BPy4lbIh.js → schema-form-DLnD-MuD.js} +1 -1
  71. package/dist/gateway/static/root/assets/sessions-page-D4kvvcL1.js +1 -0
  72. package/dist/gateway/static/root/assets/settings-advanced-gate-CI1OG4gq.js +1 -0
  73. package/dist/gateway/static/root/assets/{settings-collapsible-section-WzdikxPt.js → settings-collapsible-section-DQprvu5J.js} +1 -1
  74. package/dist/gateway/static/root/assets/{settings-form-section-CvfzhBV-.js → settings-form-section-Cqq7Y98y.js} +1 -1
  75. package/dist/gateway/static/root/assets/{settings-loading-skeleton-BxR-Ulhi.js → settings-loading-skeleton-b6rXULL5.js} +1 -1
  76. package/dist/gateway/static/root/assets/settings-page-BtBVz3cX.js +1 -0
  77. package/dist/gateway/static/root/assets/{settings-page-layout-CKefvbYi.js → settings-page-layout-BNJbtklV.js} +1 -1
  78. package/dist/gateway/static/root/assets/setup-status-panel-cmclUJzS.js +1 -0
  79. package/dist/gateway/static/root/assets/share-preview-page--zO-A1W1.js +2 -0
  80. package/dist/gateway/static/root/assets/shares-settings-DNJvqA67.js +1 -0
  81. package/dist/gateway/static/root/assets/skill-reload-api-DWr_0Xgn.js +1 -0
  82. package/dist/gateway/static/root/assets/skills-page-DEGsTbJx.js +2 -0
  83. package/dist/gateway/static/root/assets/{system-settings-panel-BokgAgf7.js → system-settings-panel-Cq9J7i7v.js} +1 -1
  84. package/dist/gateway/static/root/assets/{typed-models-lib-BwHlNL3L.js → typed-models-lib-CdSwi1gT.js} +1 -1
  85. package/dist/gateway/static/root/assets/{use-channel-catalog-DR11ap3A.js → use-channel-catalog-COXIfXcl.js} +1 -1
  86. package/dist/gateway/static/root/assets/user-context-page-C-V73ZaJ.js +1 -0
  87. package/dist/gateway/static/root/assets/user-profile-fields-editor-B1cxoGkh.js +1 -0
  88. package/dist/gateway/static/root/assets/user-profile-settings-panel-B8hlamVB.js +1 -0
  89. package/dist/gateway/static/root/assets/{utils-BKUWB-TT.js → utils-Dx01V8qF.js} +1 -1
  90. package/dist/gateway/static/root/assets/voice-api-key-field-DGpIUelZ.js +1 -0
  91. package/dist/gateway/static/root/assets/with-selector-aYPsXwdl.js +1 -0
  92. package/dist/gateway/static/root/assets/work-item-detail-page-fzWTxF26.js +1 -0
  93. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CL_rnAUB.js → workflow-run-setup-panel-Dt_x8LGg.js} +2 -2
  94. package/dist/gateway/static/root/assets/workflows-page-Bg02zEUh.js +11 -0
  95. package/dist/gateway/static/root/assets/workflows-page-DLioOiRN.css +1 -0
  96. package/dist/gateway/static/root/connector-icons/README.md +11 -0
  97. package/dist/gateway/static/root/connector-icons/airtable.svg +13 -0
  98. package/dist/gateway/static/root/connector-icons/asana.svg +15 -0
  99. package/dist/gateway/static/root/connector-icons/brave-search.svg +1 -0
  100. package/dist/gateway/static/root/connector-icons/clickup.svg +19 -0
  101. package/dist/gateway/static/root/connector-icons/composio.svg +266 -0
  102. package/dist/gateway/static/root/connector-icons/discord.svg +15 -0
  103. package/dist/gateway/static/root/connector-icons/dropbox.svg +152 -0
  104. package/dist/gateway/static/root/connector-icons/excel.svg +56 -0
  105. package/dist/gateway/static/root/connector-icons/fetch.svg +6 -0
  106. package/dist/gateway/static/root/connector-icons/figma.svg +178 -0
  107. package/dist/gateway/static/root/connector-icons/filesystem.svg +6 -0
  108. package/dist/gateway/static/root/connector-icons/github.svg +10 -0
  109. package/dist/gateway/static/root/connector-icons/gmail.svg +3 -0
  110. package/dist/gateway/static/root/connector-icons/google-calendar.svg +3 -0
  111. package/dist/gateway/static/root/connector-icons/google-docs.svg +25 -0
  112. package/dist/gateway/static/root/connector-icons/google-drive.svg +25 -0
  113. package/dist/gateway/static/root/connector-icons/google-sheets.svg +1 -0
  114. package/dist/gateway/static/root/connector-icons/hubspot.svg +142 -0
  115. package/dist/gateway/static/root/connector-icons/jira.svg +15 -0
  116. package/dist/gateway/static/root/connector-icons/linear.svg +5 -0
  117. package/dist/gateway/static/root/connector-icons/memory.svg +5 -0
  118. package/dist/gateway/static/root/connector-icons/microsoft-teams.svg +33 -0
  119. package/dist/gateway/static/root/connector-icons/notion.svg +5 -0
  120. package/dist/gateway/static/root/connector-icons/one-drive.svg +13 -0
  121. package/dist/gateway/static/root/connector-icons/outlook.svg +76 -0
  122. package/dist/gateway/static/root/connector-icons/playwright.svg +9 -0
  123. package/dist/gateway/static/root/connector-icons/salesforce.svg +17 -0
  124. package/dist/gateway/static/root/connector-icons/sequential-thinking.svg +8 -0
  125. package/dist/gateway/static/root/connector-icons/shopify.svg +5 -0
  126. package/dist/gateway/static/root/connector-icons/slack.svg +9 -0
  127. package/dist/gateway/static/root/connector-icons/spotify.svg +43 -0
  128. package/dist/gateway/static/root/connector-icons/stripe.svg +11 -0
  129. package/dist/gateway/static/root/connector-icons/telegram.svg +130 -0
  130. package/dist/gateway/static/root/connector-icons/time.svg +6 -0
  131. package/dist/gateway/static/root/connector-icons/todoist.svg +277 -0
  132. package/dist/gateway/static/root/connector-icons/trello.svg +19 -0
  133. package/dist/gateway/static/root/connector-icons/twitter.svg +128 -0
  134. package/dist/gateway/static/root/connector-icons/whatsapp.svg +61 -0
  135. package/dist/gateway/static/root/connector-icons/youtube.svg +11 -0
  136. package/dist/gateway/static/root/index.html +10 -7
  137. package/dist/package.js +1 -1
  138. package/dist/src/activity/emitter.js +1 -1
  139. package/dist/src/agent/agent-manager.d.ts +2 -0
  140. package/dist/src/agent/agent-manager.js +12 -4
  141. package/dist/src/agent/agent-manager.js.map +1 -1
  142. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  143. package/dist/src/agent/background-review/prompts.js +3 -2
  144. package/dist/src/agent/background-review/prompts.js.map +1 -1
  145. package/dist/src/agent/code-intelligence/binary.js +1 -1
  146. package/dist/src/agent/context/project-context.js +2 -2
  147. package/dist/src/agent/context/workspace-seed.js +2 -2
  148. package/dist/src/agent/embedded/run-for-session.js +1 -1
  149. package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
  150. package/dist/src/agent/embedded/xopc-tools-bridge.d.ts +9 -0
  151. package/dist/src/agent/embedded/xopc-tools-bridge.js +71 -3
  152. package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
  153. package/dist/src/agent/goals/post-turn.js +7 -6
  154. package/dist/src/agent/goals/post-turn.js.map +1 -1
  155. package/dist/src/agent/ipc/bus.js +1 -1
  156. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  157. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  158. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  159. package/dist/src/agent/mcp/mcp-transport.js +5 -2
  160. package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
  161. package/dist/src/agent/memory/context/planner.d.ts +1 -0
  162. package/dist/src/agent/memory/context/planner.js +60 -14
  163. package/dist/src/agent/memory/context/planner.js.map +1 -1
  164. package/dist/src/agent/memory/context/types.d.ts +3 -1
  165. package/dist/src/agent/memory/lifecycle.d.ts +11 -0
  166. package/dist/src/agent/memory/lifecycle.js +50 -0
  167. package/dist/src/agent/memory/lifecycle.js.map +1 -0
  168. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  169. package/dist/src/agent/memory/source-origin.d.ts +3 -0
  170. package/dist/src/agent/memory/source-origin.js +19 -0
  171. package/dist/src/agent/memory/source-origin.js.map +1 -0
  172. package/dist/src/agent/memory/understanding/service.js +5 -0
  173. package/dist/src/agent/memory/understanding/service.js.map +1 -1
  174. package/dist/src/agent/memory/user-context-coordinator.js +7 -2
  175. package/dist/src/agent/memory/user-context-coordinator.js.map +1 -1
  176. package/dist/src/agent/models/manager.js +1 -1
  177. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
  178. package/dist/src/agent/prompt/sections/behavior.d.ts +2 -0
  179. package/dist/src/agent/prompt/sections/behavior.js +30 -1
  180. package/dist/src/agent/prompt/sections/behavior.js.map +1 -1
  181. package/dist/src/agent/prompt/sections/tooling.js +1 -1
  182. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  183. package/dist/src/agent/prompt/service-prompt-builder.js +8 -1
  184. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  185. package/dist/src/agent/prompt/system-prompt.d.ts +2 -0
  186. package/dist/src/agent/prompt/system-prompt.js +6 -3
  187. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  188. package/dist/src/agent/service/process-direct-streaming.js +22 -0
  189. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  190. package/dist/src/agent/service.d.ts +2 -0
  191. package/dist/src/agent/service.js +12 -6
  192. package/dist/src/agent/service.js.map +1 -1
  193. package/dist/src/agent/session/session-inspector.js +2 -2
  194. package/dist/src/agent/skills/hub-pull.js +1 -1
  195. package/dist/src/agent/starter-agents.js +1 -1
  196. package/dist/src/agent/starter-agents.js.map +1 -1
  197. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  198. package/dist/src/agent/tool-manuals/xopc-use.js +1 -1
  199. package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -1
  200. package/dist/src/agent/tools/composio-tool.d.ts +18 -5
  201. package/dist/src/agent/tools/composio-tool.js +252 -35
  202. package/dist/src/agent/tools/composio-tool.js.map +1 -1
  203. package/dist/src/agent/tools/factory.js +7 -3
  204. package/dist/src/agent/tools/factory.js.map +1 -1
  205. package/dist/src/agent/tools/goal-tool.js +2 -2
  206. package/dist/src/agent/tools/index.d.ts +1 -1
  207. package/dist/src/agent/tools/index.js +2 -2
  208. package/dist/src/agent/tools/workflow-tool.d.ts +0 -1
  209. package/dist/src/agent/tools/workflow-tool.js +4 -17
  210. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  211. package/dist/src/agent/tools/xopc-use-tool.js +1 -1
  212. package/dist/src/agent/workflow/builtins/index.d.ts +2 -28
  213. package/dist/src/agent/workflow/builtins/index.js +226 -41
  214. package/dist/src/agent/workflow/builtins/index.js.map +1 -1
  215. package/dist/src/agent/workflow/catalog.d.ts +32 -34
  216. package/dist/src/agent/workflow/catalog.js +158 -154
  217. package/dist/src/agent/workflow/catalog.js.map +1 -1
  218. package/dist/src/agent/workflow/index.d.ts +4 -6
  219. package/dist/src/agent/workflow/index.js +2 -5
  220. package/dist/src/agent/workflow/snapshot.d.ts +2 -2
  221. package/dist/src/agent/workflow/snapshot.js +2 -2
  222. package/dist/src/agent/workflow/snapshot.js.map +1 -1
  223. package/dist/src/agent/workflow/structured-output-tool.d.ts +2 -2
  224. package/dist/src/agent/workflow/structured-output-tool.js +2 -2
  225. package/dist/src/agent/workflow/structured-output-tool.js.map +1 -1
  226. package/dist/src/agent/workflow/subagent-runner.js +1 -1
  227. package/dist/src/agent/workflow/types.d.ts +31 -26
  228. package/dist/src/agent/workspace-runtime/registry.js +2 -2
  229. package/dist/src/agent-manifest/index.d.ts +1 -0
  230. package/dist/src/agent-manifest/index.js +3 -1
  231. package/dist/src/agent-manifest/index.js.map +1 -1
  232. package/dist/src/agent-manifest/preset-chain.d.ts +10 -0
  233. package/dist/src/agent-manifest/preset-chain.js +32 -0
  234. package/dist/src/agent-manifest/preset-chain.js.map +1 -0
  235. package/dist/src/agent-manifest/resolver.js +3 -10
  236. package/dist/src/agent-manifest/resolver.js.map +1 -1
  237. package/dist/src/agent-manifest/schema.d.ts +4 -4
  238. package/dist/src/automations/api/routes.js +14 -2
  239. package/dist/src/automations/api/routes.js.map +1 -1
  240. package/dist/src/automations/domain/validation.d.ts +14 -14
  241. package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
  242. package/dist/src/automations/service/action-executor.js +2 -2
  243. package/dist/src/browser/cdp-local-launcher.js +1 -1
  244. package/dist/src/browser/providers/browser-ext-install.d.ts +11 -1
  245. package/dist/src/browser/providers/browser-ext-install.js +42 -17
  246. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  247. package/dist/src/browser/providers/cloakbrowser.js +2 -2
  248. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  249. package/dist/src/browser/stealth.js +1 -1
  250. package/dist/src/capabilities/store-connector.d.ts +0 -1
  251. package/dist/src/capabilities/store-connector.js +4 -6
  252. package/dist/src/capabilities/store-connector.js.map +1 -1
  253. package/dist/src/chat-commands/agent-edit.js +1 -1
  254. package/dist/src/chat-commands/builtins/config.js +1 -1
  255. package/dist/src/chat-commands/builtins/goal.js +2 -2
  256. package/dist/src/chat-commands/builtins/review.js +72 -73
  257. package/dist/src/chat-commands/builtins/review.js.map +1 -1
  258. package/dist/src/chat-commands/builtins/workflow.js +9 -54
  259. package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
  260. package/dist/src/chat-commands/context.js +1 -1
  261. package/dist/src/cli/commands/agent.js +1 -1
  262. package/dist/src/cli/commands/doctor/checks/database-schema.js +2 -2
  263. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
  264. package/dist/src/cli/commands/extension-create.js +2 -2
  265. package/dist/src/cli/commands/extension-create.js.map +1 -1
  266. package/dist/src/cli/commands/extension-marketplace.js +43 -37
  267. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  268. package/dist/src/cli/commands/extension-pack.d.ts +6 -0
  269. package/dist/src/cli/commands/extension-pack.js +4 -3
  270. package/dist/src/cli/commands/extension-pack.js.map +1 -1
  271. package/dist/src/cli/commands/goal.js +2 -2
  272. package/dist/src/cli/commands/init.js +1 -1
  273. package/dist/src/cli/commands/project.js +3 -3
  274. package/dist/src/commands/agents.config.d.ts +1 -0
  275. package/dist/src/commands/agents.config.js +1 -0
  276. package/dist/src/commands/agents.config.js.map +1 -1
  277. package/dist/src/config/gateway-bind.js +1 -1
  278. package/dist/src/config/index.js +1 -1
  279. package/dist/src/config/loader.js +1 -1
  280. package/dist/src/config/models-json.js +1 -1
  281. package/dist/src/config/schema.d.ts +6 -6
  282. package/dist/src/config/schema.js +6 -22
  283. package/dist/src/config/schema.js.map +1 -1
  284. package/dist/src/config/web-patch.d.ts +1 -1
  285. package/dist/src/connectors/approval.d.ts +2 -0
  286. package/dist/src/connectors/approval.js +33 -0
  287. package/dist/src/connectors/approval.js.map +1 -0
  288. package/dist/src/connectors/auth-provider-registry.d.ts +9 -0
  289. package/dist/src/connectors/auth-provider-registry.js +17 -0
  290. package/dist/src/connectors/auth-provider-registry.js.map +1 -0
  291. package/dist/src/connectors/builtin-catalog.js +55 -116
  292. package/dist/src/connectors/builtin-catalog.js.map +1 -1
  293. package/dist/src/connectors/catalog.js +7 -2
  294. package/dist/src/connectors/catalog.js.map +1 -1
  295. package/dist/src/connectors/composio-catalog.d.ts +19 -0
  296. package/dist/src/connectors/composio-catalog.js +237 -0
  297. package/dist/src/connectors/composio-catalog.js.map +1 -0
  298. package/dist/src/connectors/composio-logo.d.ts +1 -0
  299. package/dist/src/connectors/composio-logo.js +51 -0
  300. package/dist/src/connectors/composio-logo.js.map +1 -0
  301. package/dist/src/connectors/composio-sessions.d.ts +116 -0
  302. package/dist/src/connectors/composio-sessions.js +296 -0
  303. package/dist/src/connectors/composio-sessions.js.map +1 -0
  304. package/dist/src/connectors/composio-triggers.d.ts +17 -0
  305. package/dist/src/connectors/composio-triggers.js +48 -5
  306. package/dist/src/connectors/composio-triggers.js.map +1 -1
  307. package/dist/src/connectors/composio.d.ts +31 -2
  308. package/dist/src/connectors/composio.js +374 -151
  309. package/dist/src/connectors/composio.js.map +1 -1
  310. package/dist/src/connectors/connector-memory-sync.d.ts +15 -0
  311. package/dist/src/connectors/connector-memory-sync.js +90 -0
  312. package/dist/src/connectors/connector-memory-sync.js.map +1 -0
  313. package/dist/src/connectors/install.js +35 -92
  314. package/dist/src/connectors/install.js.map +1 -1
  315. package/dist/src/connectors/instances.js +6 -2
  316. package/dist/src/connectors/instances.js.map +1 -1
  317. package/dist/src/connectors/integration-strategy.d.ts +3 -0
  318. package/dist/src/connectors/integration-strategy.js +29 -0
  319. package/dist/src/connectors/integration-strategy.js.map +1 -0
  320. package/dist/src/connectors/policy.d.ts +13 -0
  321. package/dist/src/connectors/policy.js +48 -0
  322. package/dist/src/connectors/policy.js.map +1 -0
  323. package/dist/src/connectors/providers.js +1 -1
  324. package/dist/src/connectors/runtime-adapter-registry.d.ts +25 -0
  325. package/dist/src/connectors/runtime-adapter-registry.js +154 -0
  326. package/dist/src/connectors/runtime-adapter-registry.js.map +1 -0
  327. package/dist/src/connectors/types.d.ts +113 -4
  328. package/dist/src/connectors/workflow-preflight.d.ts +20 -0
  329. package/dist/src/connectors/workflow-preflight.js +70 -0
  330. package/dist/src/connectors/workflow-preflight.js.map +1 -0
  331. package/dist/src/daemon/launchd.js +1 -1
  332. package/dist/src/daemon/systemd.js +1 -1
  333. package/dist/src/extensions/discover-extensions.js +1 -1
  334. package/dist/src/extensions/install-transaction.d.ts +16 -0
  335. package/dist/src/extensions/install-transaction.js +76 -0
  336. package/dist/src/extensions/install-transaction.js.map +1 -0
  337. package/dist/src/extensions/install.d.ts +2 -0
  338. package/dist/src/extensions/install.js +23 -1
  339. package/dist/src/extensions/install.js.map +1 -1
  340. package/dist/src/extensions/loader.js +2 -2
  341. package/dist/src/gateway/agents-admin.d.ts +2 -0
  342. package/dist/src/gateway/agents-admin.js +7 -0
  343. package/dist/src/gateway/agents-admin.js.map +1 -1
  344. package/dist/src/gateway/capability-presets-admin.d.ts +11 -0
  345. package/dist/src/gateway/capability-presets-admin.js +11 -4
  346. package/dist/src/gateway/capability-presets-admin.js.map +1 -1
  347. package/dist/src/gateway/chat-stream/mapper.js +17 -0
  348. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  349. package/dist/src/gateway/chat-stream/protocol.d.ts +18 -1
  350. package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -3
  351. package/dist/src/gateway/hono/lib/static-ui.js +1 -1
  352. package/dist/src/gateway/hono/routes/agents.js +3 -0
  353. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  354. package/dist/src/gateway/hono/routes/capability-presets.js +19 -1
  355. package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -1
  356. package/dist/src/gateway/hono/routes/connectors.js +188 -25
  357. package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
  358. package/dist/src/gateway/hono/routes/goals.js +22 -3
  359. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  360. package/dist/src/gateway/hono/routes/home.d.ts +60 -1
  361. package/dist/src/gateway/hono/routes/home.js +244 -18
  362. package/dist/src/gateway/hono/routes/home.js.map +1 -1
  363. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  364. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  365. package/dist/src/gateway/hono/routes/memory.js +17 -4
  366. package/dist/src/gateway/hono/routes/memory.js.map +1 -1
  367. package/dist/src/gateway/hono/routes/projects.js +106 -5
  368. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  369. package/dist/src/gateway/hono/routes/public-gateway.js +93 -0
  370. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  371. package/dist/src/gateway/hono/routes/workflows.js +137 -22
  372. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  373. package/dist/src/gateway/hono/routes/you.d.ts +23 -0
  374. package/dist/src/gateway/hono/routes/you.js +538 -0
  375. package/dist/src/gateway/hono/routes/you.js.map +1 -0
  376. package/dist/src/gateway/hono/sse.d.ts +2 -1
  377. package/dist/src/gateway/hono/sse.js +2 -1
  378. package/dist/src/gateway/hono/sse.js.map +1 -1
  379. package/dist/src/gateway/lock.js +1 -1
  380. package/dist/src/gateway/ports.js +1 -1
  381. package/dist/src/gateway/service/marketplace-service.d.ts +13 -1
  382. package/dist/src/gateway/service/marketplace-service.js +96 -40
  383. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  384. package/dist/src/gateway/service.d.ts +2 -0
  385. package/dist/src/gateway/service.js +13 -7
  386. package/dist/src/gateway/service.js.map +1 -1
  387. package/dist/src/goals/goal-service.d.ts +7 -5
  388. package/dist/src/goals/goal-service.js +25 -13
  389. package/dist/src/goals/goal-service.js.map +1 -1
  390. package/dist/src/goals/goal-store.js +46 -7
  391. package/dist/src/goals/goal-store.js.map +1 -1
  392. package/dist/src/goals/goal-workflow-judge.js +1 -1
  393. package/dist/src/goals/types.d.ts +24 -0
  394. package/dist/src/infra/ports.js +1 -1
  395. package/dist/src/infra/ssh-tunnel.js +1 -1
  396. package/dist/src/infra/update-check.js +1 -1
  397. package/dist/src/migrations/runner.js +1 -1
  398. package/dist/src/notes/service.js +3 -3
  399. package/dist/src/notes/store.js +1 -1
  400. package/dist/src/projects/project-service.js +1 -1
  401. package/dist/src/projects/workspace.js +1 -1
  402. package/dist/src/routing/agent-session-key.js +1 -1
  403. package/dist/src/routing/resolve-route.js +1 -1
  404. package/dist/src/routing/resolve-tui-session-key.js +1 -1
  405. package/dist/src/session/init-session-turn.js +1 -1
  406. package/dist/src/session/resolve-session.js +1 -1
  407. package/dist/src/session/session-title.js +2 -2
  408. package/dist/src/session/store.js +1 -1
  409. package/dist/src/storage/sqlite/connection.js +1 -1
  410. package/dist/src/storage/sqlite/connector-repository.d.ts +49 -0
  411. package/dist/src/storage/sqlite/connector-repository.js +385 -0
  412. package/dist/src/storage/sqlite/connector-repository.js.map +1 -0
  413. package/dist/src/storage/sqlite/index.d.ts +3 -0
  414. package/dist/src/storage/sqlite/index.js +4 -1
  415. package/dist/src/storage/sqlite/migrations/030_connectors.sql +94 -0
  416. package/dist/src/storage/sqlite/migrations/031_connector_approvals.sql +24 -0
  417. package/dist/src/storage/sqlite/migrations/032_connector_webhook_deliveries.sql +15 -0
  418. package/dist/src/storage/sqlite/migrations/033_user_trust_policies.sql +6 -0
  419. package/dist/src/storage/sqlite/migrations/034_allow_global_auto_trust.sql +14 -0
  420. package/dist/src/storage/sqlite/migrations/035_user_profile_prompt_state.sql +7 -0
  421. package/dist/src/storage/sqlite/migrations/036_goal_outcome_metric.sql +12 -0
  422. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  423. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  424. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  425. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  426. package/dist/src/storage/sqlite/row-mappers.js +1 -1
  427. package/dist/src/storage/sqlite/schema.js +1 -1
  428. package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +3 -0
  429. package/dist/src/storage/sqlite/user-profile-setup-repository.js +34 -0
  430. package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +1 -0
  431. package/dist/src/storage/sqlite/user-trust-repository.d.ts +3 -0
  432. package/dist/src/storage/sqlite/user-trust-repository.js +34 -0
  433. package/dist/src/storage/sqlite/user-trust-repository.js.map +1 -0
  434. package/dist/src/tui/backends/embedded-backend.js +4 -4
  435. package/dist/src/tui/clipboard-image.js +1 -1
  436. package/dist/src/tui/components/assistant-message.js +15 -0
  437. package/dist/src/tui/components/assistant-message.js.map +1 -1
  438. package/dist/src/tui/tui-agent-events.js +85 -1
  439. package/dist/src/tui/tui-agent-events.js.map +1 -1
  440. package/dist/src/tui/tui-command-formatters.js +9 -9
  441. package/dist/src/tui/tui-command-formatters.js.map +1 -1
  442. package/dist/src/tui/tui-commands.js +4 -4
  443. package/dist/src/tui/tui-startup-resources.js +1 -1
  444. package/dist/src/tui/tui.js +1 -1
  445. package/dist/src/user-context/import.d.ts +12 -0
  446. package/dist/src/user-context/import.js +48 -0
  447. package/dist/src/user-context/import.js.map +1 -0
  448. package/dist/src/user-context/profile.d.ts +37 -0
  449. package/dist/src/user-context/profile.js +165 -0
  450. package/dist/src/user-context/profile.js.map +1 -0
  451. package/dist/src/user-context/projection.d.ts +54 -0
  452. package/dist/src/user-context/projection.js +121 -0
  453. package/dist/src/user-context/projection.js.map +1 -0
  454. package/dist/src/user-context/source-recommendations.d.ts +13 -0
  455. package/dist/src/user-context/source-recommendations.js +86 -0
  456. package/dist/src/user-context/source-recommendations.js.map +1 -0
  457. package/dist/src/user-context/trust-policy.d.ts +11 -0
  458. package/dist/src/user-context/trust-policy.js +31 -0
  459. package/dist/src/user-context/trust-policy.js.map +1 -0
  460. package/dist/src/utils/index.js +1 -1
  461. package/dist/src/utils/logger/index.js +1 -1
  462. package/dist/src/utils/logger.js +1 -1
  463. package/dist/src/work-items/work-item-service.js +1 -1
  464. package/dist/src/workflows/authoring/index.d.ts +1 -0
  465. package/dist/src/workflows/authoring/index.js +2 -0
  466. package/dist/src/workflows/authoring/workflow-draft-store.d.ts +33 -0
  467. package/dist/src/workflows/authoring/workflow-draft-store.js +74 -0
  468. package/dist/src/workflows/authoring/workflow-draft-store.js.map +1 -0
  469. package/dist/src/workflows/domain/definition-utils.d.ts +6 -4
  470. package/dist/src/workflows/domain/definition-utils.js +28 -26
  471. package/dist/src/workflows/domain/definition-utils.js.map +1 -1
  472. package/dist/src/workflows/domain/definition.d.ts +79 -6
  473. package/dist/src/workflows/domain/event.d.ts +18 -2
  474. package/dist/src/workflows/domain/index.js +3 -3
  475. package/dist/src/workflows/domain/run.d.ts +16 -2
  476. package/dist/src/workflows/domain/run.js.map +1 -1
  477. package/dist/src/workflows/domain/validation.d.ts +9 -5
  478. package/dist/src/workflows/domain/validation.js +183 -40
  479. package/dist/src/workflows/domain/validation.js.map +1 -1
  480. package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +2 -3
  481. package/dist/src/workflows/draft/workflow-draft-prompt.js +31 -73
  482. package/dist/src/workflows/draft/workflow-draft-prompt.js.map +1 -1
  483. package/dist/src/workflows/draft/workflow-draft-service.js +5 -9
  484. package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -1
  485. package/dist/src/workflows/draft/workflow-draft-validator.js +29 -37
  486. package/dist/src/workflows/draft/workflow-draft-validator.js.map +1 -1
  487. package/dist/src/workflows/draft/workflow-draft.types.d.ts +4 -4
  488. package/dist/src/workflows/engine/projector.js +43 -1
  489. package/dist/src/workflows/engine/projector.js.map +1 -1
  490. package/dist/src/workflows/engine/workflow-engine.d.ts +2 -3
  491. package/dist/src/workflows/engine/workflow-engine.js +24 -4
  492. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  493. package/dist/src/workflows/index.js +4 -7
  494. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +1 -9
  495. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -1
  496. package/dist/src/workflows/runtime/graph-workflow-runtime.d.ts +10 -0
  497. package/dist/src/workflows/runtime/graph-workflow-runtime.js +295 -0
  498. package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +1 -0
  499. package/dist/src/workflows/runtime/index.d.ts +1 -2
  500. package/dist/src/workflows/runtime/index.js +2 -5
  501. package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +5 -8
  502. package/dist/src/workflows/service/workflow-run-service.js +15 -1
  503. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  504. package/dist/src/workflows/service/workflow-run-service.types.d.ts +2 -1
  505. package/dist/src/workflows/service/workflow-session-bridge.js +3 -3
  506. package/package.json +5 -4
  507. package/dist/gateway/static/root/assets/agents-CyvCIHnB.js +0 -2
  508. package/dist/gateway/static/root/assets/apps-page-DK_Vx6nl.js +0 -1
  509. package/dist/gateway/static/root/assets/automation-suggestion-card-B1LV3YYv.js +0 -1
  510. package/dist/gateway/static/root/assets/automations-page-fzrovqhv.js +0 -4
  511. package/dist/gateway/static/root/assets/block-editor-Dhj5f4Bx.js +0 -184
  512. package/dist/gateway/static/root/assets/browser-settings-page-BDn-n-UB.js +0 -8
  513. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Co5ipo_Q.js +0 -1
  514. package/dist/gateway/static/root/assets/channels-settings-BWlpaxg9.js +0 -1
  515. package/dist/gateway/static/root/assets/channels-status-swr-D_jkIZLV.js +0 -1
  516. package/dist/gateway/static/root/assets/connectors-page-BcekbW4q.js +0 -2
  517. package/dist/gateway/static/root/assets/desktop-pet-settings-BJCUuL8Y.js +0 -1
  518. package/dist/gateway/static/root/assets/dist-Mys7eFJ5.js +0 -1
  519. package/dist/gateway/static/root/assets/dreaming-settings-BN1Z2mIo.js +0 -3
  520. package/dist/gateway/static/root/assets/extension-page-B-1KxvVy.js +0 -1
  521. package/dist/gateway/static/root/assets/extension-settings-page-BF9NACI3.js +0 -1
  522. package/dist/gateway/static/root/assets/gateway-settings-DN9sNREz.js +0 -1
  523. package/dist/gateway/static/root/assets/goal-create-dialog-BpoQW8cD.js +0 -1
  524. package/dist/gateway/static/root/assets/goal-detail-page-CBRSPd0b.js +0 -4
  525. package/dist/gateway/static/root/assets/goals-page-BCcBi407.js +0 -2
  526. package/dist/gateway/static/root/assets/goals-settings-pkTXzXkh.js +0 -1
  527. package/dist/gateway/static/root/assets/heartbeat-settings-ezsufgLQ.js +0 -1
  528. package/dist/gateway/static/root/assets/index-B8s8Pq5U.css +0 -1
  529. package/dist/gateway/static/root/assets/index-DcUaXYeb.js +0 -262
  530. package/dist/gateway/static/root/assets/logs-page-DQtTRXtj.js +0 -7
  531. package/dist/gateway/static/root/assets/messages-BXNELNBa.js +0 -3
  532. package/dist/gateway/static/root/assets/models-hub-panel-BP2M9n6Q.js +0 -2
  533. package/dist/gateway/static/root/assets/notes-page-CspveYaO.js +0 -1
  534. package/dist/gateway/static/root/assets/notes-workbench-BHwzJ0OC.js +0 -2
  535. package/dist/gateway/static/root/assets/project-detail-page-Dy3rsobs.js +0 -1
  536. package/dist/gateway/static/root/assets/projects-page-CWKpPE0L.js +0 -1
  537. package/dist/gateway/static/root/assets/remote-access-hub-CqNRyXEo.js +0 -1
  538. package/dist/gateway/static/root/assets/sessions-page-MEME7ivF.js +0 -1
  539. package/dist/gateway/static/root/assets/settings-advanced-gate-JVd0qaSF.js +0 -1
  540. package/dist/gateway/static/root/assets/settings-page-DYEbB1EV.js +0 -1
  541. package/dist/gateway/static/root/assets/setup-status-panel-dWN8BJ3z.js +0 -1
  542. package/dist/gateway/static/root/assets/share-preview-page-D8foINzP.js +0 -2
  543. package/dist/gateway/static/root/assets/shares-settings-Tgbv1s7G.js +0 -1
  544. package/dist/gateway/static/root/assets/skill-reload-api-D_YK0b_Z.js +0 -1
  545. package/dist/gateway/static/root/assets/skills-page-DGytfoZK.js +0 -2
  546. package/dist/gateway/static/root/assets/toast-z0toXu32.js +0 -1
  547. package/dist/gateway/static/root/assets/user-profile-settings-panel-8YtygcJp.js +0 -1
  548. package/dist/gateway/static/root/assets/voice-api-key-field-BVH71EFf.js +0 -1
  549. package/dist/gateway/static/root/assets/work-item-detail-page-JeTE7XNM.js +0 -1
  550. package/dist/gateway/static/root/assets/workflow-start-dialog-_u8Uc1ze.js +0 -1
  551. package/dist/gateway/static/root/assets/workflows-page-ixgk_y1l.js +0 -18
  552. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +0 -13
  553. package/dist/src/agent/workflow/builtins/audit-repo.js +0 -183
  554. package/dist/src/agent/workflow/builtins/audit-repo.js.map +0 -1
  555. package/dist/src/agent/workflow/builtins/client-proposal.d.ts +0 -12
  556. package/dist/src/agent/workflow/builtins/client-proposal.js +0 -164
  557. package/dist/src/agent/workflow/builtins/client-proposal.js.map +0 -1
  558. package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +0 -12
  559. package/dist/src/agent/workflow/builtins/competitor-scan.js +0 -164
  560. package/dist/src/agent/workflow/builtins/competitor-scan.js.map +0 -1
  561. package/dist/src/agent/workflow/builtins/content-draft.d.ts +0 -13
  562. package/dist/src/agent/workflow/builtins/content-draft.js +0 -159
  563. package/dist/src/agent/workflow/builtins/content-draft.js.map +0 -1
  564. package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +0 -11
  565. package/dist/src/agent/workflow/builtins/content-repurpose.js +0 -146
  566. package/dist/src/agent/workflow/builtins/content-repurpose.js.map +0 -1
  567. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +0 -13
  568. package/dist/src/agent/workflow/builtins/debug-incident.js +0 -177
  569. package/dist/src/agent/workflow/builtins/debug-incident.js.map +0 -1
  570. package/dist/src/agent/workflow/builtins/decision-compare.d.ts +0 -13
  571. package/dist/src/agent/workflow/builtins/decision-compare.js +0 -187
  572. package/dist/src/agent/workflow/builtins/decision-compare.js.map +0 -1
  573. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +0 -12
  574. package/dist/src/agent/workflow/builtins/implementation-plan.js +0 -185
  575. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +0 -1
  576. package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +0 -11
  577. package/dist/src/agent/workflow/builtins/inbox-triage.js +0 -158
  578. package/dist/src/agent/workflow/builtins/inbox-triage.js.map +0 -1
  579. package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +0 -12
  580. package/dist/src/agent/workflow/builtins/meeting-prep.js +0 -152
  581. package/dist/src/agent/workflow/builtins/meeting-prep.js.map +0 -1
  582. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +0 -14
  583. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +0 -171
  584. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +0 -1
  585. package/dist/src/agent/workflow/builtins/offer-design.d.ts +0 -12
  586. package/dist/src/agent/workflow/builtins/offer-design.js +0 -170
  587. package/dist/src/agent/workflow/builtins/offer-design.js.map +0 -1
  588. package/dist/src/agent/workflow/builtins/pr-review.d.ts +0 -12
  589. package/dist/src/agent/workflow/builtins/pr-review.js +0 -178
  590. package/dist/src/agent/workflow/builtins/pr-review.js.map +0 -1
  591. package/dist/src/agent/workflow/builtins/release-check.d.ts +0 -11
  592. package/dist/src/agent/workflow/builtins/release-check.js +0 -174
  593. package/dist/src/agent/workflow/builtins/release-check.js.map +0 -1
  594. package/dist/src/agent/workflow/builtins/research.d.ts +0 -13
  595. package/dist/src/agent/workflow/builtins/research.js +0 -188
  596. package/dist/src/agent/workflow/builtins/research.js.map +0 -1
  597. package/dist/src/agent/workflow/builtins/weekly-review.d.ts +0 -12
  598. package/dist/src/agent/workflow/builtins/weekly-review.js +0 -139
  599. package/dist/src/agent/workflow/builtins/weekly-review.js.map +0 -1
  600. package/dist/src/agent/workflow/last-run-memory.d.ts +0 -42
  601. package/dist/src/agent/workflow/last-run-memory.js +0 -60
  602. package/dist/src/agent/workflow/last-run-memory.js.map +0 -1
  603. package/dist/src/agent/workflow/lint.d.ts +0 -38
  604. package/dist/src/agent/workflow/lint.js +0 -74
  605. package/dist/src/agent/workflow/lint.js.map +0 -1
  606. package/dist/src/agent/workflow/meta-locale.d.ts +0 -12
  607. package/dist/src/agent/workflow/meta-locale.js +0 -62
  608. package/dist/src/agent/workflow/meta-locale.js.map +0 -1
  609. package/dist/src/agent/workflow/parser.d.ts +0 -20
  610. package/dist/src/agent/workflow/parser.js +0 -152
  611. package/dist/src/agent/workflow/parser.js.map +0 -1
  612. package/dist/src/agent/workflow/runtime.d.ts +0 -34
  613. package/dist/src/agent/workflow/runtime.js +0 -402
  614. package/dist/src/agent/workflow/runtime.js.map +0 -1
  615. package/dist/src/connectors/oauth.d.ts +0 -22
  616. package/dist/src/connectors/oauth.js +0 -99
  617. package/dist/src/connectors/oauth.js.map +0 -1
  618. package/dist/src/workflows/runtime/script-runtime.d.ts +0 -3
  619. package/dist/src/workflows/runtime/script-runtime.js +0 -3
  620. package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +0 -5
  621. package/dist/src/workflows/runtime/script-workflow-runtime.js +0 -15
  622. 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: "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: {
@@ -1,97 +1,55 @@
1
1
  //#region src/workflows/draft/workflow-draft-prompt.ts
2
2
  function buildWorkflowDraftPrompt(params) {
3
- return `You generate xopc workflow drafts. Return ONLY a JSON object, no markdown.
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.existingScript ? `Existing script to improve:\n${params.existingScript.slice(0, 12e3)}\n` : ""}
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
- function buildWorkflowDraftRepairPrompt(params) {
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
- Required JSON shape is unchanged:
30
+ Shape:
52
31
  {
53
32
  "name": "lowercase_snake_case",
54
- "script": "workflow JavaScript DSL",
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
- "outputSchema": { "type": "object", "properties": { "summary": { "type": "string" } }, "required": ["summary"] },
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
- Hard requirements:
72
- - The output MUST be valid JSON.
73
- - JSON name MUST be lowercase snake_case and MUST exactly equal script meta.name.
74
- - script MUST be valid JavaScript for the xopc workflow DSL.
75
- - script MUST start with export const meta = { ... } and include phases, tags, estimatedAgents.
76
- - Use only these globals: phase(title), agent(prompt, opts), parallel([() => agent(...)]), pipeline(items, ...stages), log(message), budget, args.
77
- - Do not use import, require, eval, Function, process.env, fs, http, fetch.
78
- - Respect the constraints exactly. If network is disabled, manifest.permissions.network must be false.
79
- - Preserve the user's intent while making the smallest change needed to pass validation.
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 line?: number;\n column?: number;\n}\n\nexport function buildWorkflowDraftPrompt(params: {\n prompt: string;\n language?: 'en' | 'zh';\n mode: WorkflowDraftMode;\n existingScript?: string;\n constraints?: WorkflowDraftConstraints;\n}): string {\n return `You generate xopc workflow drafts. Return ONLY a JSON object, no markdown.\n\nJSON shape:\n{\n \"name\": \"lowercase_snake_case\",\n \"script\": \"workflow JavaScript DSL\",\n \"manifest\": {\n \"title\": \"Human title\",\n \"description\": \"What it does\",\n \"version\": \"1.0.0\",\n \"inputSchema\": { \"type\": \"object\", \"properties\": {}, \"required\": [] },\n \"outputSchema\": { \"type\": \"object\", \"properties\": { \"summary\": { \"type\": \"string\" } }, \"required\": [\"summary\"] },\n \"defaults\": { \"concurrency\": 2, \"timeoutSec\": 1800, \"maxSubagents\": 8 },\n \"permissions\": { \"network\": false, \"fileSystem\": \"read\", \"approvalRequired\": false },\n \"tags\": [\"custom\"],\n \"whenToUse\": \"When to use this workflow\"\n },\n \"explanation\": \"Short explanation\",\n \"assumptions\": [\"...\"],\n \"risks\": [\"...\"]\n}\n\nDSL rules:\n- script MUST start with: export const meta = { name, description, phases, tags, estimatedAgents }\n- The top-level JSON \"name\" MUST exactly equal script meta.name.\n- Use only these globals: phase(title), agent(prompt, opts), parallel([() => agent(...)]), pipeline(items, ...stages), log(message), budget, args.\n- Read user inputs from args, e.g. args.goal, args.branch, args.audience.\n- Each agent needs a clear label.\n- Keep concurrency conservative; prefer 2-4.\n- Return a WorkflowResultEnvelope-like object: { summary, sections, followUps?, structuredOutput? }.\n- Do not use import, require, eval, Function, process.env, fs, http, fetch.\n- If network/write/destructive behavior is requested, mark manifest.permissions.approvalRequired = true.\n- Keep script self-contained and valid JavaScript.\n\nMode: ${params.mode}\nLanguage for user-facing copy: ${params.language ?? 'en'}\nConstraints:\n${JSON.stringify(params.constraints ?? {}, null, 2)}\n\n${params.existingScript ? `Existing script to improve:\\n${params.existingScript.slice(0, 12000)}\\n` : ''}\n\nUser request:\n${params.prompt.slice(0, 8000)}\n`;\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 `You must repair an xopc workflow draft so it passes validation. Return ONLY a corrected JSON object, no markdown.\n\nRequired JSON shape is unchanged:\n{\n \"name\": \"lowercase_snake_case\",\n \"script\": \"workflow JavaScript DSL\",\n \"manifest\": {\n \"title\": \"Human title\",\n \"description\": \"What it does\",\n \"version\": \"1.0.0\",\n \"inputSchema\": { \"type\": \"object\", \"properties\": {}, \"required\": [] },\n \"outputSchema\": { \"type\": \"object\", \"properties\": { \"summary\": { \"type\": \"string\" } }, \"required\": [\"summary\"] },\n \"defaults\": { \"concurrency\": 2, \"timeoutSec\": 1800, \"maxSubagents\": 8 },\n \"permissions\": { \"network\": false, \"fileSystem\": \"read\", \"approvalRequired\": false },\n \"tags\": [\"custom\"],\n \"whenToUse\": \"When to use this workflow\"\n },\n \"explanation\": \"Short explanation\",\n \"assumptions\": [\"...\"],\n \"risks\": [\"...\"]\n}\n\nHard requirements:\n- The output MUST be valid JSON.\n- JSON name MUST be lowercase snake_case and MUST exactly equal script meta.name.\n- script MUST be valid JavaScript for the xopc workflow DSL.\n- script MUST start with export const meta = { ... } and include phases, tags, estimatedAgents.\n- Use only these globals: phase(title), agent(prompt, opts), parallel([() => agent(...)]), pipeline(items, ...stages), log(message), budget, args.\n- Do not use import, require, eval, Function, process.env, fs, http, fetch.\n- Respect the constraints exactly. If network is disabled, manifest.permissions.network must be false.\n- Preserve the user's intent while making the smallest change needed to pass validation.\n\nLanguage for user-facing copy: ${params.language ?? 'en'}\nConstraints:\n${JSON.stringify(params.constraints ?? {}, null, 2)}\n\nValidation and lint issues to fix:\n${JSON.stringify(params.issues, null, 2)}\n\nOriginal user request:\n${params.prompt.slice(0, 8000)}\n\nPrevious model output:\n${params.previousOutput.slice(0, 12000)}\n`;\n}\n"],"mappings":";AAWA,SAAgB,yBAAyB,QAM9B;AACT,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkCD,OAAO,KAAK;iCACa,OAAO,YAAY,KAAK;;EAEvD,KAAK,UAAU,OAAO,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC;;EAElD,OAAO,iBAAiB,gCAAgC,OAAO,eAAe,MAAM,GAAG,KAAM,CAAC,MAAM,GAAG;;;EAGvG,OAAO,OAAO,MAAM,GAAG,IAAK,CAAC;;;AAI/B,SAAgB,+BAA+B,QAMpC;AACT,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAgCwB,OAAO,YAAY,KAAK;;EAEvD,KAAK,UAAU,OAAO,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC;;;EAGlD,KAAK,UAAU,OAAO,QAAQ,MAAM,EAAE,CAAC;;;EAGvC,OAAO,OAAO,MAAM,GAAG,IAAK,CAAC;;;EAG7B,OAAO,eAAe,MAAM,GAAG,KAAM,CAAC"}
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.existingScript ? "improve" : "create"),
29
- existingScript: request.existingScript,
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.existingScript ? 'improve' : 'create'),\n existingScript: request.existingScript,\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 line: issue.line,\n column: issue.column,\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 line: issue.line,\n column: issue.column,\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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"}
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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"}