@xopcai/xopc 0.0.142 → 0.0.143

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/README.md +1 -1
  2. package/dist/browser-ext/manifest.json +1 -1
  3. package/dist/extensions/telegram/xopc.extension.json +1 -1
  4. package/dist/gateway/static/root/assets/activity-center-store-jITiX2vJ.js +1 -0
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BawPxiu5.js → agent-avatar-dicebear-DiME9u_P.js} +1 -1
  6. package/dist/gateway/static/root/assets/agents-DzBXhZXO.js +2 -0
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-81xd1p9R.js → app-management-settings-panel-Cuo7SbUP.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DYeQsYU8.js → appearance-settings-DUfdNQqk.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-CKuKK5AU.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-D_oa7oti.js → archive-plugin-B-Qk6cGr.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-Cd-bwI2N.js → attachment-load-Di6EEbQX.js} +1 -1
  12. package/dist/gateway/static/root/assets/automation-suggestion-card-DGxvRxtO.js +1 -0
  13. package/dist/gateway/static/root/assets/automations-page-D-FF_WKV.js +4 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-O8svLKWw.js → binary-plugins-ZaOZDH2I.js} +1 -1
  15. package/dist/gateway/static/root/assets/block-editor-BTFhjWfg.js +184 -0
  16. package/dist/gateway/static/root/assets/browser-settings-page-BvKLdEQt.js +8 -0
  17. package/dist/gateway/static/root/assets/{capability-presets-api-dJy1Eqgx.js → capability-presets-api-BU-pVZiZ.js} +1 -1
  18. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DgyeEwzh.js +2 -0
  19. package/dist/gateway/static/root/assets/{channel-recipient-api-Bfuhp2ty.js → channel-recipient-api-DuulnhIj.js} +1 -1
  20. package/dist/gateway/static/root/assets/channels-settings-BbVsdD_I.js +1 -0
  21. package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +1 -0
  22. package/dist/gateway/static/root/assets/check-BODqo66o.js +1 -0
  23. package/dist/gateway/static/root/assets/chunk-QUQL4437-DXsxWP7r.js +4 -0
  24. package/dist/gateway/static/root/assets/circle-alert-RzVebuX2.js +1 -0
  25. package/dist/gateway/static/root/assets/connectors-page-B8QqVy3I.js +2 -0
  26. package/dist/gateway/static/root/assets/{desktop-pet-DFMfIb5F.js → desktop-pet---yzVxVR.js} +1 -1
  27. package/dist/gateway/static/root/assets/desktop-pet-settings-Dc3gqBJE.js +1 -0
  28. package/dist/gateway/static/root/assets/{directory-picker-path-field-BrYt1gAr.js → directory-picker-path-field-DCmOGLtK.js} +1 -1
  29. package/dist/gateway/static/root/assets/dreaming-settings-BgT5KZVe.js +3 -0
  30. package/dist/gateway/static/root/assets/{extension-debug-page-Bh630pLD.js → extension-debug-page-ByaKTTq4.js} +1 -1
  31. package/dist/gateway/static/root/assets/extension-page-BmRzHAZr.js +1 -0
  32. package/dist/gateway/static/root/assets/extension-settings-page-JUtwIhbF.js +1 -0
  33. package/dist/gateway/static/root/assets/{fetch-B1WtuprY.js → fetch-8QNN25Sh.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-config-api-De2N821l.js → gateway-config-api-CxicF50_.js} +1 -1
  35. package/dist/gateway/static/root/assets/gateway-settings-Bz2I_EO5.js +1 -0
  36. package/dist/gateway/static/root/assets/{gateway-startup-retry-nEujFSDj.js → gateway-startup-retry-5YBnS9Fj.js} +1 -1
  37. package/dist/gateway/static/root/assets/goal-create-dialog-VcoyuZGN.js +1 -0
  38. package/dist/gateway/static/root/assets/goal-detail-page-Cilkap2G.js +4 -0
  39. package/dist/gateway/static/root/assets/{goals-config-api-DUy3eEse.js → goals-config-api-CwcHRdC0.js} +1 -1
  40. package/dist/gateway/static/root/assets/goals-page-C6eoni4z.js +2 -0
  41. package/dist/gateway/static/root/assets/goals-settings-o4i-qAOS.js +1 -0
  42. package/dist/gateway/static/root/assets/heartbeat-settings-DQQkETX8.js +1 -0
  43. package/dist/gateway/static/root/assets/index-BKRqeRHm.js +257 -0
  44. package/dist/gateway/static/root/assets/index-CphxClbs.css +1 -0
  45. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CVIwwM15.js → keyboard-shortcuts-settings-LT6qB-ua.js} +1 -1
  46. package/dist/gateway/static/root/assets/logs-page-Dli2e3fS.js +7 -0
  47. package/dist/gateway/static/root/assets/{markdown-split-B_6us9j7.js → markdown-split-Dw-yE2-y.js} +1 -1
  48. package/dist/gateway/static/root/assets/{media-plugins-D_fryIyj.js → media-plugins-D9NNNUgE.js} +1 -1
  49. package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +5 -0
  50. package/dist/gateway/static/root/assets/models-hub-panel-DVn2Q1Ik.js +2 -0
  51. package/dist/gateway/static/root/assets/notes-page-CRgbJGgk.js +1 -0
  52. package/dist/gateway/static/root/assets/notes-workbench-BxZRHLWx.js +2 -0
  53. package/dist/gateway/static/root/assets/{page-tabs-D_8jGlqx.js → page-tabs-D4hkWVt_.js} +1 -1
  54. package/dist/gateway/static/root/assets/{preview-open-alternatives-BBLMK8Mp.js → preview-open-alternatives-CIckv0uy.js} +1 -1
  55. package/dist/gateway/static/root/assets/project-detail-page-Doz53xLn.js +1 -0
  56. package/dist/gateway/static/root/assets/projects-page-DoMtcRLg.js +1 -0
  57. package/dist/gateway/static/root/assets/remote-access-hub-BeHVEgrm.js +1 -0
  58. package/dist/gateway/static/root/assets/{save-bar-controls-DVS3FR5r.js → save-bar-controls-B0b42kB2.js} +1 -1
  59. package/dist/gateway/static/root/assets/{schedule-field-D6vKd6-T.js → schedule-field-BtjEkczK.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schema-form-BPy4lbIh.js → schema-form-Bf0bk3i6.js} +1 -1
  61. package/dist/gateway/static/root/assets/sessions-page-Bk4bQsBe.js +1 -0
  62. package/dist/gateway/static/root/assets/settings-advanced-gate-DdFyaRMm.js +1 -0
  63. package/dist/gateway/static/root/assets/{settings-collapsible-section-WzdikxPt.js → settings-collapsible-section-BTKTdTNX.js} +1 -1
  64. package/dist/gateway/static/root/assets/{settings-form-section-CvfzhBV-.js → settings-form-section-DL4P0sAj.js} +1 -1
  65. package/dist/gateway/static/root/assets/{settings-loading-skeleton-BxR-Ulhi.js → settings-loading-skeleton-BV6KFNj4.js} +1 -1
  66. package/dist/gateway/static/root/assets/settings-page-B_4DsX5W.js +1 -0
  67. package/dist/gateway/static/root/assets/{settings-page-layout-CKefvbYi.js → settings-page-layout-CyGlrInB.js} +1 -1
  68. package/dist/gateway/static/root/assets/setup-status-panel-DJ1_MLgX.js +1 -0
  69. package/dist/gateway/static/root/assets/share-preview-page-BQBV7YrV.js +2 -0
  70. package/dist/gateway/static/root/assets/shares-settings-0VuFLBeU.js +1 -0
  71. package/dist/gateway/static/root/assets/skill-reload-api-DO87Ckeo.js +1 -0
  72. package/dist/gateway/static/root/assets/skills-page-D3VdtxAn.js +2 -0
  73. package/dist/gateway/static/root/assets/{system-settings-panel-BokgAgf7.js → system-settings-panel-D85fBBuI.js} +1 -1
  74. package/dist/gateway/static/root/assets/{typed-models-lib-BwHlNL3L.js → typed-models-lib-CwEuYrHX.js} +1 -1
  75. package/dist/gateway/static/root/assets/{use-channel-catalog-DR11ap3A.js → use-channel-catalog-COXIfXcl.js} +1 -1
  76. package/dist/gateway/static/root/assets/user-context-page-m9JVQ73F.js +1 -0
  77. package/dist/gateway/static/root/assets/user-profile-fields-editor-DtQiuY7E.js +1 -0
  78. package/dist/gateway/static/root/assets/user-profile-settings-panel-CWM0fEpb.js +1 -0
  79. package/dist/gateway/static/root/assets/{utils-BKUWB-TT.js → utils--BO6xT3u.js} +1 -1
  80. package/dist/gateway/static/root/assets/voice-api-key-field-LoT3wgZ9.js +1 -0
  81. package/dist/gateway/static/root/assets/with-selector-aYPsXwdl.js +1 -0
  82. package/dist/gateway/static/root/assets/work-item-detail-page-DSTMz_mO.js +1 -0
  83. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-CL_rnAUB.js → workflow-run-setup-panel-B35lJzvm.js} +2 -2
  84. package/dist/gateway/static/root/assets/workflows-page-BfSm9oR8.js +11 -0
  85. package/dist/gateway/static/root/assets/workflows-page-DLioOiRN.css +1 -0
  86. package/dist/gateway/static/root/connector-icons/README.md +11 -0
  87. package/dist/gateway/static/root/connector-icons/airtable.svg +13 -0
  88. package/dist/gateway/static/root/connector-icons/asana.svg +15 -0
  89. package/dist/gateway/static/root/connector-icons/brave-search.svg +1 -0
  90. package/dist/gateway/static/root/connector-icons/clickup.svg +19 -0
  91. package/dist/gateway/static/root/connector-icons/composio.svg +266 -0
  92. package/dist/gateway/static/root/connector-icons/discord.svg +15 -0
  93. package/dist/gateway/static/root/connector-icons/dropbox.svg +152 -0
  94. package/dist/gateway/static/root/connector-icons/excel.svg +56 -0
  95. package/dist/gateway/static/root/connector-icons/fetch.svg +6 -0
  96. package/dist/gateway/static/root/connector-icons/figma.svg +178 -0
  97. package/dist/gateway/static/root/connector-icons/filesystem.svg +6 -0
  98. package/dist/gateway/static/root/connector-icons/github.svg +10 -0
  99. package/dist/gateway/static/root/connector-icons/gmail.svg +3 -0
  100. package/dist/gateway/static/root/connector-icons/google-calendar.svg +3 -0
  101. package/dist/gateway/static/root/connector-icons/google-docs.svg +25 -0
  102. package/dist/gateway/static/root/connector-icons/google-drive.svg +25 -0
  103. package/dist/gateway/static/root/connector-icons/google-sheets.svg +1 -0
  104. package/dist/gateway/static/root/connector-icons/hubspot.svg +142 -0
  105. package/dist/gateway/static/root/connector-icons/jira.svg +15 -0
  106. package/dist/gateway/static/root/connector-icons/linear.svg +5 -0
  107. package/dist/gateway/static/root/connector-icons/memory.svg +5 -0
  108. package/dist/gateway/static/root/connector-icons/microsoft-teams.svg +33 -0
  109. package/dist/gateway/static/root/connector-icons/notion.svg +5 -0
  110. package/dist/gateway/static/root/connector-icons/one-drive.svg +13 -0
  111. package/dist/gateway/static/root/connector-icons/outlook.svg +76 -0
  112. package/dist/gateway/static/root/connector-icons/playwright.svg +9 -0
  113. package/dist/gateway/static/root/connector-icons/salesforce.svg +17 -0
  114. package/dist/gateway/static/root/connector-icons/sequential-thinking.svg +8 -0
  115. package/dist/gateway/static/root/connector-icons/shopify.svg +5 -0
  116. package/dist/gateway/static/root/connector-icons/slack.svg +9 -0
  117. package/dist/gateway/static/root/connector-icons/spotify.svg +43 -0
  118. package/dist/gateway/static/root/connector-icons/stripe.svg +11 -0
  119. package/dist/gateway/static/root/connector-icons/telegram.svg +130 -0
  120. package/dist/gateway/static/root/connector-icons/time.svg +6 -0
  121. package/dist/gateway/static/root/connector-icons/todoist.svg +277 -0
  122. package/dist/gateway/static/root/connector-icons/trello.svg +19 -0
  123. package/dist/gateway/static/root/connector-icons/twitter.svg +128 -0
  124. package/dist/gateway/static/root/connector-icons/whatsapp.svg +61 -0
  125. package/dist/gateway/static/root/connector-icons/youtube.svg +11 -0
  126. package/dist/gateway/static/root/index.html +9 -6
  127. package/dist/package.js +1 -1
  128. package/dist/src/agent/agent-manager.d.ts +2 -0
  129. package/dist/src/agent/agent-manager.js +8 -0
  130. package/dist/src/agent/agent-manager.js.map +1 -1
  131. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  132. package/dist/src/agent/background-review/prompts.js +3 -2
  133. package/dist/src/agent/background-review/prompts.js.map +1 -1
  134. package/dist/src/agent/embedded/session-tool-result-guard.js +1 -1
  135. package/dist/src/agent/embedded/xopc-tools-bridge.d.ts +9 -0
  136. package/dist/src/agent/embedded/xopc-tools-bridge.js +71 -3
  137. package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
  138. package/dist/src/agent/goals/post-turn.js +5 -4
  139. package/dist/src/agent/goals/post-turn.js.map +1 -1
  140. package/dist/src/agent/mcp/mcp-transport.js +4 -1
  141. package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
  142. package/dist/src/agent/memory/context/planner.d.ts +1 -0
  143. package/dist/src/agent/memory/context/planner.js +60 -14
  144. package/dist/src/agent/memory/context/planner.js.map +1 -1
  145. package/dist/src/agent/memory/context/types.d.ts +3 -1
  146. package/dist/src/agent/memory/lifecycle.d.ts +11 -0
  147. package/dist/src/agent/memory/lifecycle.js +50 -0
  148. package/dist/src/agent/memory/lifecycle.js.map +1 -0
  149. package/dist/src/agent/memory/source-origin.d.ts +3 -0
  150. package/dist/src/agent/memory/source-origin.js +19 -0
  151. package/dist/src/agent/memory/source-origin.js.map +1 -0
  152. package/dist/src/agent/memory/understanding/service.js +5 -0
  153. package/dist/src/agent/memory/understanding/service.js.map +1 -1
  154. package/dist/src/agent/memory/user-context-coordinator.js +7 -2
  155. package/dist/src/agent/memory/user-context-coordinator.js.map +1 -1
  156. package/dist/src/agent/prompt/sections/behavior.d.ts +2 -0
  157. package/dist/src/agent/prompt/sections/behavior.js +30 -1
  158. package/dist/src/agent/prompt/sections/behavior.js.map +1 -1
  159. package/dist/src/agent/prompt/sections/tooling.js +1 -1
  160. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  161. package/dist/src/agent/prompt/service-prompt-builder.js +8 -1
  162. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  163. package/dist/src/agent/prompt/system-prompt.d.ts +2 -0
  164. package/dist/src/agent/prompt/system-prompt.js +6 -3
  165. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  166. package/dist/src/agent/service/process-direct-streaming.js +22 -0
  167. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  168. package/dist/src/agent/service.d.ts +2 -0
  169. package/dist/src/agent/service.js +9 -3
  170. package/dist/src/agent/service.js.map +1 -1
  171. package/dist/src/agent/starter-agents.js +1 -1
  172. package/dist/src/agent/starter-agents.js.map +1 -1
  173. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  174. package/dist/src/agent/tool-manuals/xopc-use.js +1 -1
  175. package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -1
  176. package/dist/src/agent/tools/composio-tool.d.ts +18 -5
  177. package/dist/src/agent/tools/composio-tool.js +252 -35
  178. package/dist/src/agent/tools/composio-tool.js.map +1 -1
  179. package/dist/src/agent/tools/factory.js +7 -3
  180. package/dist/src/agent/tools/factory.js.map +1 -1
  181. package/dist/src/agent/tools/index.d.ts +1 -1
  182. package/dist/src/agent/tools/index.js +2 -2
  183. package/dist/src/agent/tools/workflow-tool.d.ts +0 -1
  184. package/dist/src/agent/tools/workflow-tool.js +3 -16
  185. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  186. package/dist/src/agent/workflow/builtins/index.d.ts +2 -28
  187. package/dist/src/agent/workflow/builtins/index.js +226 -41
  188. package/dist/src/agent/workflow/builtins/index.js.map +1 -1
  189. package/dist/src/agent/workflow/catalog.d.ts +32 -34
  190. package/dist/src/agent/workflow/catalog.js +158 -154
  191. package/dist/src/agent/workflow/catalog.js.map +1 -1
  192. package/dist/src/agent/workflow/index.d.ts +4 -6
  193. package/dist/src/agent/workflow/index.js +2 -5
  194. package/dist/src/agent/workflow/snapshot.d.ts +2 -2
  195. package/dist/src/agent/workflow/snapshot.js +2 -2
  196. package/dist/src/agent/workflow/snapshot.js.map +1 -1
  197. package/dist/src/agent/workflow/structured-output-tool.d.ts +2 -2
  198. package/dist/src/agent/workflow/structured-output-tool.js +2 -2
  199. package/dist/src/agent/workflow/structured-output-tool.js.map +1 -1
  200. package/dist/src/agent/workflow/subagent-runner.js +1 -1
  201. package/dist/src/agent/workflow/types.d.ts +31 -26
  202. package/dist/src/agent-manifest/index.d.ts +1 -0
  203. package/dist/src/agent-manifest/index.js +3 -1
  204. package/dist/src/agent-manifest/index.js.map +1 -1
  205. package/dist/src/agent-manifest/preset-chain.d.ts +10 -0
  206. package/dist/src/agent-manifest/preset-chain.js +32 -0
  207. package/dist/src/agent-manifest/preset-chain.js.map +1 -0
  208. package/dist/src/agent-manifest/resolver.js +3 -10
  209. package/dist/src/agent-manifest/resolver.js.map +1 -1
  210. package/dist/src/agent-manifest/schema.d.ts +4 -4
  211. package/dist/src/automations/api/routes.js +13 -1
  212. package/dist/src/automations/api/routes.js.map +1 -1
  213. package/dist/src/automations/domain/validation.d.ts +14 -14
  214. package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
  215. package/dist/src/browser/providers/browser-ext-install.d.ts +11 -1
  216. package/dist/src/browser/providers/browser-ext-install.js +39 -14
  217. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  218. package/dist/src/capabilities/store-connector.d.ts +0 -1
  219. package/dist/src/capabilities/store-connector.js +3 -5
  220. package/dist/src/capabilities/store-connector.js.map +1 -1
  221. package/dist/src/chat-commands/builtins/review.js +72 -73
  222. package/dist/src/chat-commands/builtins/review.js.map +1 -1
  223. package/dist/src/chat-commands/builtins/workflow.js +9 -54
  224. package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
  225. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  226. package/dist/src/cli/commands/extension-create.js +2 -2
  227. package/dist/src/cli/commands/extension-create.js.map +1 -1
  228. package/dist/src/cli/commands/extension-marketplace.js +42 -36
  229. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  230. package/dist/src/cli/commands/extension-pack.d.ts +6 -0
  231. package/dist/src/cli/commands/extension-pack.js +3 -2
  232. package/dist/src/cli/commands/extension-pack.js.map +1 -1
  233. package/dist/src/commands/agents.config.d.ts +1 -0
  234. package/dist/src/commands/agents.config.js +1 -0
  235. package/dist/src/commands/agents.config.js.map +1 -1
  236. package/dist/src/config/schema.d.ts +6 -6
  237. package/dist/src/config/schema.js +6 -22
  238. package/dist/src/config/schema.js.map +1 -1
  239. package/dist/src/config/web-patch.d.ts +1 -1
  240. package/dist/src/connectors/approval.d.ts +2 -0
  241. package/dist/src/connectors/approval.js +33 -0
  242. package/dist/src/connectors/approval.js.map +1 -0
  243. package/dist/src/connectors/auth-provider-registry.d.ts +9 -0
  244. package/dist/src/connectors/auth-provider-registry.js +17 -0
  245. package/dist/src/connectors/auth-provider-registry.js.map +1 -0
  246. package/dist/src/connectors/builtin-catalog.js +55 -116
  247. package/dist/src/connectors/builtin-catalog.js.map +1 -1
  248. package/dist/src/connectors/catalog.js +7 -2
  249. package/dist/src/connectors/catalog.js.map +1 -1
  250. package/dist/src/connectors/composio-catalog.d.ts +19 -0
  251. package/dist/src/connectors/composio-catalog.js +237 -0
  252. package/dist/src/connectors/composio-catalog.js.map +1 -0
  253. package/dist/src/connectors/composio-logo.d.ts +1 -0
  254. package/dist/src/connectors/composio-logo.js +51 -0
  255. package/dist/src/connectors/composio-logo.js.map +1 -0
  256. package/dist/src/connectors/composio-sessions.d.ts +116 -0
  257. package/dist/src/connectors/composio-sessions.js +296 -0
  258. package/dist/src/connectors/composio-sessions.js.map +1 -0
  259. package/dist/src/connectors/composio-triggers.d.ts +17 -0
  260. package/dist/src/connectors/composio-triggers.js +48 -5
  261. package/dist/src/connectors/composio-triggers.js.map +1 -1
  262. package/dist/src/connectors/composio.d.ts +31 -2
  263. package/dist/src/connectors/composio.js +374 -151
  264. package/dist/src/connectors/composio.js.map +1 -1
  265. package/dist/src/connectors/connector-memory-sync.d.ts +15 -0
  266. package/dist/src/connectors/connector-memory-sync.js +90 -0
  267. package/dist/src/connectors/connector-memory-sync.js.map +1 -0
  268. package/dist/src/connectors/install.js +35 -92
  269. package/dist/src/connectors/install.js.map +1 -1
  270. package/dist/src/connectors/instances.js +6 -2
  271. package/dist/src/connectors/instances.js.map +1 -1
  272. package/dist/src/connectors/integration-strategy.d.ts +3 -0
  273. package/dist/src/connectors/integration-strategy.js +29 -0
  274. package/dist/src/connectors/integration-strategy.js.map +1 -0
  275. package/dist/src/connectors/policy.d.ts +13 -0
  276. package/dist/src/connectors/policy.js +48 -0
  277. package/dist/src/connectors/policy.js.map +1 -0
  278. package/dist/src/connectors/providers.js +1 -1
  279. package/dist/src/connectors/runtime-adapter-registry.d.ts +25 -0
  280. package/dist/src/connectors/runtime-adapter-registry.js +154 -0
  281. package/dist/src/connectors/runtime-adapter-registry.js.map +1 -0
  282. package/dist/src/connectors/types.d.ts +113 -4
  283. package/dist/src/connectors/workflow-preflight.d.ts +20 -0
  284. package/dist/src/connectors/workflow-preflight.js +70 -0
  285. package/dist/src/connectors/workflow-preflight.js.map +1 -0
  286. package/dist/src/extensions/install-transaction.d.ts +16 -0
  287. package/dist/src/extensions/install-transaction.js +76 -0
  288. package/dist/src/extensions/install-transaction.js.map +1 -0
  289. package/dist/src/extensions/install.d.ts +2 -0
  290. package/dist/src/extensions/install.js +23 -1
  291. package/dist/src/extensions/install.js.map +1 -1
  292. package/dist/src/gateway/agents-admin.d.ts +2 -0
  293. package/dist/src/gateway/agents-admin.js +7 -0
  294. package/dist/src/gateway/agents-admin.js.map +1 -1
  295. package/dist/src/gateway/capability-presets-admin.d.ts +11 -0
  296. package/dist/src/gateway/capability-presets-admin.js +11 -4
  297. package/dist/src/gateway/capability-presets-admin.js.map +1 -1
  298. package/dist/src/gateway/chat-stream/mapper.js +17 -0
  299. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  300. package/dist/src/gateway/chat-stream/protocol.d.ts +18 -1
  301. package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -3
  302. package/dist/src/gateway/hono/routes/agents.js +3 -0
  303. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  304. package/dist/src/gateway/hono/routes/capability-presets.js +19 -1
  305. package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -1
  306. package/dist/src/gateway/hono/routes/connectors.js +188 -25
  307. package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
  308. package/dist/src/gateway/hono/routes/goals.js +22 -3
  309. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  310. package/dist/src/gateway/hono/routes/home.d.ts +60 -1
  311. package/dist/src/gateway/hono/routes/home.js +244 -18
  312. package/dist/src/gateway/hono/routes/home.js.map +1 -1
  313. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  314. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  315. package/dist/src/gateway/hono/routes/memory.js +14 -1
  316. package/dist/src/gateway/hono/routes/memory.js.map +1 -1
  317. package/dist/src/gateway/hono/routes/projects.js +103 -2
  318. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  319. package/dist/src/gateway/hono/routes/public-gateway.js +93 -0
  320. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  321. package/dist/src/gateway/hono/routes/workflows.js +137 -22
  322. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  323. package/dist/src/gateway/hono/routes/you.d.ts +23 -0
  324. package/dist/src/gateway/hono/routes/you.js +538 -0
  325. package/dist/src/gateway/hono/routes/you.js.map +1 -0
  326. package/dist/src/gateway/hono/sse.d.ts +2 -1
  327. package/dist/src/gateway/hono/sse.js +2 -1
  328. package/dist/src/gateway/hono/sse.js.map +1 -1
  329. package/dist/src/gateway/service/marketplace-service.d.ts +13 -1
  330. package/dist/src/gateway/service/marketplace-service.js +96 -40
  331. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  332. package/dist/src/gateway/service.d.ts +2 -0
  333. package/dist/src/gateway/service.js +7 -1
  334. package/dist/src/gateway/service.js.map +1 -1
  335. package/dist/src/goals/goal-service.d.ts +7 -5
  336. package/dist/src/goals/goal-service.js +25 -13
  337. package/dist/src/goals/goal-service.js.map +1 -1
  338. package/dist/src/goals/goal-store.js +46 -7
  339. package/dist/src/goals/goal-store.js.map +1 -1
  340. package/dist/src/goals/types.d.ts +24 -0
  341. package/dist/src/storage/sqlite/connector-repository.d.ts +49 -0
  342. package/dist/src/storage/sqlite/connector-repository.js +385 -0
  343. package/dist/src/storage/sqlite/connector-repository.js.map +1 -0
  344. package/dist/src/storage/sqlite/index.d.ts +3 -0
  345. package/dist/src/storage/sqlite/index.js +4 -1
  346. package/dist/src/storage/sqlite/migrations/030_connectors.sql +94 -0
  347. package/dist/src/storage/sqlite/migrations/031_connector_approvals.sql +24 -0
  348. package/dist/src/storage/sqlite/migrations/032_connector_webhook_deliveries.sql +15 -0
  349. package/dist/src/storage/sqlite/migrations/033_user_trust_policies.sql +6 -0
  350. package/dist/src/storage/sqlite/migrations/034_allow_global_auto_trust.sql +14 -0
  351. package/dist/src/storage/sqlite/migrations/035_user_profile_prompt_state.sql +7 -0
  352. package/dist/src/storage/sqlite/migrations/036_goal_outcome_metric.sql +12 -0
  353. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  354. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  355. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  356. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  357. package/dist/src/storage/sqlite/schema.js +1 -1
  358. package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +3 -0
  359. package/dist/src/storage/sqlite/user-profile-setup-repository.js +34 -0
  360. package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +1 -0
  361. package/dist/src/storage/sqlite/user-trust-repository.d.ts +3 -0
  362. package/dist/src/storage/sqlite/user-trust-repository.js +34 -0
  363. package/dist/src/storage/sqlite/user-trust-repository.js.map +1 -0
  364. package/dist/src/tui/components/assistant-message.js +15 -0
  365. package/dist/src/tui/components/assistant-message.js.map +1 -1
  366. package/dist/src/tui/tui-agent-events.js +85 -1
  367. package/dist/src/tui/tui-agent-events.js.map +1 -1
  368. package/dist/src/tui/tui-command-formatters.js +7 -7
  369. package/dist/src/tui/tui-command-formatters.js.map +1 -1
  370. package/dist/src/tui/tui-commands.js +1 -1
  371. package/dist/src/tui/tui-startup-resources.js +1 -1
  372. package/dist/src/user-context/import.d.ts +12 -0
  373. package/dist/src/user-context/import.js +48 -0
  374. package/dist/src/user-context/import.js.map +1 -0
  375. package/dist/src/user-context/profile.d.ts +37 -0
  376. package/dist/src/user-context/profile.js +165 -0
  377. package/dist/src/user-context/profile.js.map +1 -0
  378. package/dist/src/user-context/projection.d.ts +54 -0
  379. package/dist/src/user-context/projection.js +121 -0
  380. package/dist/src/user-context/projection.js.map +1 -0
  381. package/dist/src/user-context/source-recommendations.d.ts +13 -0
  382. package/dist/src/user-context/source-recommendations.js +86 -0
  383. package/dist/src/user-context/source-recommendations.js.map +1 -0
  384. package/dist/src/user-context/trust-policy.d.ts +11 -0
  385. package/dist/src/user-context/trust-policy.js +31 -0
  386. package/dist/src/user-context/trust-policy.js.map +1 -0
  387. package/dist/src/workflows/authoring/index.d.ts +1 -0
  388. package/dist/src/workflows/authoring/index.js +2 -0
  389. package/dist/src/workflows/authoring/workflow-draft-store.d.ts +33 -0
  390. package/dist/src/workflows/authoring/workflow-draft-store.js +74 -0
  391. package/dist/src/workflows/authoring/workflow-draft-store.js.map +1 -0
  392. package/dist/src/workflows/domain/definition-utils.d.ts +6 -4
  393. package/dist/src/workflows/domain/definition-utils.js +28 -26
  394. package/dist/src/workflows/domain/definition-utils.js.map +1 -1
  395. package/dist/src/workflows/domain/definition.d.ts +79 -6
  396. package/dist/src/workflows/domain/event.d.ts +18 -2
  397. package/dist/src/workflows/domain/index.js +3 -3
  398. package/dist/src/workflows/domain/run.d.ts +16 -2
  399. package/dist/src/workflows/domain/run.js.map +1 -1
  400. package/dist/src/workflows/domain/validation.d.ts +9 -5
  401. package/dist/src/workflows/domain/validation.js +183 -40
  402. package/dist/src/workflows/domain/validation.js.map +1 -1
  403. package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +2 -3
  404. package/dist/src/workflows/draft/workflow-draft-prompt.js +31 -73
  405. package/dist/src/workflows/draft/workflow-draft-prompt.js.map +1 -1
  406. package/dist/src/workflows/draft/workflow-draft-service.js +4 -8
  407. package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -1
  408. package/dist/src/workflows/draft/workflow-draft-validator.js +29 -37
  409. package/dist/src/workflows/draft/workflow-draft-validator.js.map +1 -1
  410. package/dist/src/workflows/draft/workflow-draft.types.d.ts +4 -4
  411. package/dist/src/workflows/engine/projector.js +43 -1
  412. package/dist/src/workflows/engine/projector.js.map +1 -1
  413. package/dist/src/workflows/engine/workflow-engine.d.ts +2 -3
  414. package/dist/src/workflows/engine/workflow-engine.js +24 -4
  415. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  416. package/dist/src/workflows/index.js +4 -7
  417. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +1 -9
  418. package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +1 -1
  419. package/dist/src/workflows/runtime/graph-workflow-runtime.d.ts +10 -0
  420. package/dist/src/workflows/runtime/graph-workflow-runtime.js +295 -0
  421. package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +1 -0
  422. package/dist/src/workflows/runtime/index.d.ts +1 -2
  423. package/dist/src/workflows/runtime/index.js +2 -5
  424. package/dist/src/workflows/runtime/workflow-runtime-port.d.ts +5 -8
  425. package/dist/src/workflows/service/workflow-run-service.js +15 -1
  426. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  427. package/dist/src/workflows/service/workflow-run-service.types.d.ts +2 -1
  428. package/package.json +4 -3
  429. package/dist/gateway/static/root/assets/agents-CyvCIHnB.js +0 -2
  430. package/dist/gateway/static/root/assets/apps-page-DK_Vx6nl.js +0 -1
  431. package/dist/gateway/static/root/assets/automation-suggestion-card-B1LV3YYv.js +0 -1
  432. package/dist/gateway/static/root/assets/automations-page-fzrovqhv.js +0 -4
  433. package/dist/gateway/static/root/assets/block-editor-Dhj5f4Bx.js +0 -184
  434. package/dist/gateway/static/root/assets/browser-settings-page-BDn-n-UB.js +0 -8
  435. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Co5ipo_Q.js +0 -1
  436. package/dist/gateway/static/root/assets/channels-settings-BWlpaxg9.js +0 -1
  437. package/dist/gateway/static/root/assets/channels-status-swr-D_jkIZLV.js +0 -1
  438. package/dist/gateway/static/root/assets/connectors-page-BcekbW4q.js +0 -2
  439. package/dist/gateway/static/root/assets/desktop-pet-settings-BJCUuL8Y.js +0 -1
  440. package/dist/gateway/static/root/assets/dreaming-settings-BN1Z2mIo.js +0 -3
  441. package/dist/gateway/static/root/assets/extension-page-B-1KxvVy.js +0 -1
  442. package/dist/gateway/static/root/assets/extension-settings-page-BF9NACI3.js +0 -1
  443. package/dist/gateway/static/root/assets/gateway-settings-DN9sNREz.js +0 -1
  444. package/dist/gateway/static/root/assets/goal-create-dialog-BpoQW8cD.js +0 -1
  445. package/dist/gateway/static/root/assets/goal-detail-page-CBRSPd0b.js +0 -4
  446. package/dist/gateway/static/root/assets/goals-page-BCcBi407.js +0 -2
  447. package/dist/gateway/static/root/assets/goals-settings-pkTXzXkh.js +0 -1
  448. package/dist/gateway/static/root/assets/heartbeat-settings-ezsufgLQ.js +0 -1
  449. package/dist/gateway/static/root/assets/index-B8s8Pq5U.css +0 -1
  450. package/dist/gateway/static/root/assets/index-DcUaXYeb.js +0 -262
  451. package/dist/gateway/static/root/assets/logs-page-DQtTRXtj.js +0 -7
  452. package/dist/gateway/static/root/assets/messages-BXNELNBa.js +0 -3
  453. package/dist/gateway/static/root/assets/models-hub-panel-BP2M9n6Q.js +0 -2
  454. package/dist/gateway/static/root/assets/notes-page-CspveYaO.js +0 -1
  455. package/dist/gateway/static/root/assets/notes-workbench-BHwzJ0OC.js +0 -2
  456. package/dist/gateway/static/root/assets/project-detail-page-Dy3rsobs.js +0 -1
  457. package/dist/gateway/static/root/assets/projects-page-CWKpPE0L.js +0 -1
  458. package/dist/gateway/static/root/assets/remote-access-hub-CqNRyXEo.js +0 -1
  459. package/dist/gateway/static/root/assets/sessions-page-MEME7ivF.js +0 -1
  460. package/dist/gateway/static/root/assets/settings-advanced-gate-JVd0qaSF.js +0 -1
  461. package/dist/gateway/static/root/assets/settings-page-DYEbB1EV.js +0 -1
  462. package/dist/gateway/static/root/assets/setup-status-panel-dWN8BJ3z.js +0 -1
  463. package/dist/gateway/static/root/assets/share-preview-page-D8foINzP.js +0 -2
  464. package/dist/gateway/static/root/assets/shares-settings-Tgbv1s7G.js +0 -1
  465. package/dist/gateway/static/root/assets/skill-reload-api-D_YK0b_Z.js +0 -1
  466. package/dist/gateway/static/root/assets/skills-page-DGytfoZK.js +0 -2
  467. package/dist/gateway/static/root/assets/toast-z0toXu32.js +0 -1
  468. package/dist/gateway/static/root/assets/user-profile-settings-panel-8YtygcJp.js +0 -1
  469. package/dist/gateway/static/root/assets/voice-api-key-field-BVH71EFf.js +0 -1
  470. package/dist/gateway/static/root/assets/work-item-detail-page-JeTE7XNM.js +0 -1
  471. package/dist/gateway/static/root/assets/workflow-start-dialog-_u8Uc1ze.js +0 -1
  472. package/dist/gateway/static/root/assets/workflows-page-ixgk_y1l.js +0 -18
  473. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +0 -13
  474. package/dist/src/agent/workflow/builtins/audit-repo.js +0 -183
  475. package/dist/src/agent/workflow/builtins/audit-repo.js.map +0 -1
  476. package/dist/src/agent/workflow/builtins/client-proposal.d.ts +0 -12
  477. package/dist/src/agent/workflow/builtins/client-proposal.js +0 -164
  478. package/dist/src/agent/workflow/builtins/client-proposal.js.map +0 -1
  479. package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +0 -12
  480. package/dist/src/agent/workflow/builtins/competitor-scan.js +0 -164
  481. package/dist/src/agent/workflow/builtins/competitor-scan.js.map +0 -1
  482. package/dist/src/agent/workflow/builtins/content-draft.d.ts +0 -13
  483. package/dist/src/agent/workflow/builtins/content-draft.js +0 -159
  484. package/dist/src/agent/workflow/builtins/content-draft.js.map +0 -1
  485. package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +0 -11
  486. package/dist/src/agent/workflow/builtins/content-repurpose.js +0 -146
  487. package/dist/src/agent/workflow/builtins/content-repurpose.js.map +0 -1
  488. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +0 -13
  489. package/dist/src/agent/workflow/builtins/debug-incident.js +0 -177
  490. package/dist/src/agent/workflow/builtins/debug-incident.js.map +0 -1
  491. package/dist/src/agent/workflow/builtins/decision-compare.d.ts +0 -13
  492. package/dist/src/agent/workflow/builtins/decision-compare.js +0 -187
  493. package/dist/src/agent/workflow/builtins/decision-compare.js.map +0 -1
  494. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +0 -12
  495. package/dist/src/agent/workflow/builtins/implementation-plan.js +0 -185
  496. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +0 -1
  497. package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +0 -11
  498. package/dist/src/agent/workflow/builtins/inbox-triage.js +0 -158
  499. package/dist/src/agent/workflow/builtins/inbox-triage.js.map +0 -1
  500. package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +0 -12
  501. package/dist/src/agent/workflow/builtins/meeting-prep.js +0 -152
  502. package/dist/src/agent/workflow/builtins/meeting-prep.js.map +0 -1
  503. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +0 -14
  504. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +0 -171
  505. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +0 -1
  506. package/dist/src/agent/workflow/builtins/offer-design.d.ts +0 -12
  507. package/dist/src/agent/workflow/builtins/offer-design.js +0 -170
  508. package/dist/src/agent/workflow/builtins/offer-design.js.map +0 -1
  509. package/dist/src/agent/workflow/builtins/pr-review.d.ts +0 -12
  510. package/dist/src/agent/workflow/builtins/pr-review.js +0 -178
  511. package/dist/src/agent/workflow/builtins/pr-review.js.map +0 -1
  512. package/dist/src/agent/workflow/builtins/release-check.d.ts +0 -11
  513. package/dist/src/agent/workflow/builtins/release-check.js +0 -174
  514. package/dist/src/agent/workflow/builtins/release-check.js.map +0 -1
  515. package/dist/src/agent/workflow/builtins/research.d.ts +0 -13
  516. package/dist/src/agent/workflow/builtins/research.js +0 -188
  517. package/dist/src/agent/workflow/builtins/research.js.map +0 -1
  518. package/dist/src/agent/workflow/builtins/weekly-review.d.ts +0 -12
  519. package/dist/src/agent/workflow/builtins/weekly-review.js +0 -139
  520. package/dist/src/agent/workflow/builtins/weekly-review.js.map +0 -1
  521. package/dist/src/agent/workflow/last-run-memory.d.ts +0 -42
  522. package/dist/src/agent/workflow/last-run-memory.js +0 -60
  523. package/dist/src/agent/workflow/last-run-memory.js.map +0 -1
  524. package/dist/src/agent/workflow/lint.d.ts +0 -38
  525. package/dist/src/agent/workflow/lint.js +0 -74
  526. package/dist/src/agent/workflow/lint.js.map +0 -1
  527. package/dist/src/agent/workflow/meta-locale.d.ts +0 -12
  528. package/dist/src/agent/workflow/meta-locale.js +0 -62
  529. package/dist/src/agent/workflow/meta-locale.js.map +0 -1
  530. package/dist/src/agent/workflow/parser.d.ts +0 -20
  531. package/dist/src/agent/workflow/parser.js +0 -152
  532. package/dist/src/agent/workflow/parser.js.map +0 -1
  533. package/dist/src/agent/workflow/runtime.d.ts +0 -34
  534. package/dist/src/agent/workflow/runtime.js +0 -402
  535. package/dist/src/agent/workflow/runtime.js.map +0 -1
  536. package/dist/src/connectors/oauth.d.ts +0 -22
  537. package/dist/src/connectors/oauth.js +0 -99
  538. package/dist/src/connectors/oauth.js.map +0 -1
  539. package/dist/src/workflows/runtime/script-runtime.d.ts +0 -3
  540. package/dist/src/workflows/runtime/script-runtime.js +0 -3
  541. package/dist/src/workflows/runtime/script-workflow-runtime.d.ts +0 -5
  542. package/dist/src/workflows/runtime/script-workflow-runtime.js +0 -15
  543. package/dist/src/workflows/runtime/script-workflow-runtime.js.map +0 -1
@@ -1,8 +1,6 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { extractProfileAgentId } from "../../config/agent-profile.js";
4
- import { parseWorkflowScript } from "../workflow/parser.js";
5
- import "../workflow/index.js";
6
4
  import { Type } from "@sinclair/typebox";
7
5
  //#region src/agent/tools/workflow-tool.ts
8
6
  /**
@@ -11,8 +9,7 @@ import { Type } from "@sinclair/typebox";
11
9
  init_logger();
12
10
  const log = createLogger("Agent:WorkflowTool");
13
11
  const WorkflowToolSchema = Type.Object({
14
- name: Type.Optional(Type.String({ description: "Name of a saved workflow to run. Either `name` or `script` is required. Use `name` whenever the user references a known workflow (built-in or in ~/.xopc/workflows/)." })),
15
- script: Type.Optional(Type.String({ description: ["Raw JavaScript workflow script (no Markdown fences, no TypeScript syntax). Ignored when `name` is set.", "First statement: export const meta = { name: 'snake_case', description: 'short, human-readable' }."].join(" ") })),
12
+ name: Type.Optional(Type.String({ description: "Name of a saved visual workflow to run." })),
16
13
  args: Type.Optional(Type.Any({ description: "Optional JSON value passed as workflow input payload." })),
17
14
  goal: Type.Optional(Type.String({ description: "Optional goal or task description for this workflow run (defaults to user intent in chat)." })),
18
15
  goalId: Type.Optional(Type.String({ description: "Optional durable Goal id. When set, terminal workflow output is archived to that Goal." }))
@@ -23,7 +20,7 @@ function createWorkflowTool(deps) {
23
20
  label: "◆ Workflow",
24
21
  description: [
25
22
  "Start a multi-agent workflow run in its own chat session.",
26
- "Use `name` for catalog workflows, or `script` for an inline workflow (saved under meta.name before run).",
23
+ "Use `name` for a workflow from the visual workflow catalog.",
27
24
  "Returns immediately with runId + sessionKey — track progress in the linked chat session."
28
25
  ].join(" "),
29
26
  parameters: WorkflowToolSchema,
@@ -115,17 +112,7 @@ function resolveDefinitionId(params, catalog) {
115
112
  catalog.load(name);
116
113
  return name;
117
114
  }
118
- if (!params.script?.trim()) throw new Error("either `name` or `script` is required.");
119
- const script = normalizeScript(params.script);
120
- const meta = parseWorkflowScript(script).meta;
121
- catalog.save(meta.name, script);
122
- return meta.name;
123
- }
124
- function normalizeScript(script) {
125
- let text = script.trim();
126
- const fence = text.match(/^```(?:js|javascript)?\s*\n([\s\S]*?)\n```$/i);
127
- if (fence) text = fence[1].trim();
128
- return text;
115
+ throw new Error("`name` is required. Create workflows in the visual workflow studio.");
129
116
  }
130
117
  //#endregion
131
118
  export { createWorkflowTool };
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-tool.js","names":[],"sources":["../../../../src/agent/tools/workflow-tool.ts"],"sourcesContent":["/**\n * `workflow` — starts a persisted workflow run in a dedicated chat session.\n */\n\nimport { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport { extractProfileAgentId } from '../../config/agent-profile.js';\nimport { createLogger } from '../../utils/logger.js';\nimport { parseWorkflowScript } from '../workflow/index.js';\nimport type { WorkflowCatalog } from '../workflow/catalog.js';\nimport type {\n StartWorkflowRunServiceParams,\n WorkflowRunServiceResult,\n} from '../../workflows/service/workflow-run-service.types.js';\n\nconst log = createLogger('Agent:WorkflowTool');\n\nconst WorkflowToolSchema = Type.Object({\n name: Type.Optional(\n Type.String({\n description:\n 'Name of a saved workflow to run. Either `name` or `script` is required. ' +\n 'Use `name` whenever the user references a known workflow (built-in or in ~/.xopc/workflows/).',\n }),\n ),\n script: Type.Optional(\n Type.String({\n description: [\n 'Raw JavaScript workflow script (no Markdown fences, no TypeScript syntax). Ignored when `name` is set.',\n \"First statement: export const meta = { name: 'snake_case', description: 'short, human-readable' }.\",\n ].join(' '),\n }),\n ),\n args: Type.Optional(\n Type.Any({\n description: 'Optional JSON value passed as workflow input payload.',\n }),\n ),\n goal: Type.Optional(\n Type.String({\n description: 'Optional goal or task description for this workflow run (defaults to user intent in chat).',\n }),\n ),\n goalId: Type.Optional(\n Type.String({\n description: 'Optional durable Goal id. When set, terminal workflow output is archived to that Goal.',\n }),\n ),\n});\n\nexport type WorkflowToolInput = {\n name?: string;\n script?: string;\n args?: unknown;\n goal?: string;\n goalId?: string;\n};\n\nexport interface WorkflowToolDeps {\n catalog: WorkflowCatalog;\n getCurrentSessionKey?: () => string | undefined;\n getConfig: () => import('../../config/schema.js').Config | undefined;\n startWorkflowRun?: (params: StartWorkflowRunServiceParams) => Promise<WorkflowRunServiceResult>;\n}\n\nexport function createWorkflowTool(deps: WorkflowToolDeps): AgentTool {\n return {\n name: 'workflow',\n label: '◆ Workflow',\n description: [\n 'Start a multi-agent workflow run in its own chat session.',\n 'Use `name` for catalog workflows, or `script` for an inline workflow (saved under meta.name before run).',\n 'Returns immediately with runId + sessionKey — track progress in the linked chat session.',\n ].join(' '),\n parameters: WorkflowToolSchema,\n\n async execute(\n _toolCallId: string,\n params: WorkflowToolInput,\n ): Promise<AgentToolResult<{ runId: string; sessionKey: string } | { error: string }>> {\n if (!deps.startWorkflowRun) {\n return {\n content: [{ type: 'text', text: 'workflow: gateway workflow runs are not available in this context' }],\n details: { error: 'workflow_run_unavailable' },\n };\n }\n\n let definitionId: string;\n try {\n definitionId = resolveDefinitionId(params, deps.catalog);\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `workflow: ${message}` }],\n details: { error: message },\n };\n }\n\n const config = deps.getConfig();\n const parentSessionKey = deps.getCurrentSessionKey?.()?.trim();\n const agentId = extractProfileAgentId(parentSessionKey, config);\n\n const goal = params.goal?.trim() || '';\n const goalId = params.goalId?.trim();\n const source = parentSessionKey\n ? ({ kind: 'chat' as const, sessionKey: parentSessionKey })\n : ({ kind: 'api' as const });\n const inputEnvelope = goalId\n ? {\n payload: params.args ?? {},\n ...(goal ? { goal } : {}),\n }\n : undefined;\n\n try {\n const result = await deps.startWorkflowRun({\n agentId,\n definitionId,\n goal,\n goalId,\n input: inputEnvelope ? undefined : params.args,\n inputEnvelope,\n parentSessionKey,\n source,\n });\n\n if (result.ok === false) {\n return {\n content: [{ type: 'text', text: `workflow: ${result.message}` }],\n details: { error: result.message },\n };\n }\n\n const summary = goal\n ? `Started workflow \\`${definitionId}\\` (run ${result.runId}). Open chat session to track progress and continue.`\n : `Started workflow \\`${definitionId}\\` (run ${result.runId}). Open the workflow chat session to track progress.`;\n\n return {\n content: [\n {\n type: 'text',\n text: `${summary}\\n\\nsessionKey: ${result.sessionKey}`,\n },\n ],\n details: {\n runId: result.runId,\n sessionKey: result.sessionKey,\n definitionId,\n parentSessionKey: parentSessionKey ?? null,\n } as { runId: string; sessionKey: string },\n };\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n log.warn({ err: e, errorMessage: message, workflow: definitionId }, `workflow start failed: ${message}`);\n return {\n content: [{ type: 'text', text: `workflow: ${message}` }],\n details: { error: message },\n };\n }\n },\n } as unknown as AgentTool;\n}\n\nfunction resolveDefinitionId(params: WorkflowToolInput, catalog: WorkflowCatalog): string {\n const name = params.name?.trim();\n if (name) {\n catalog.load(name);\n return name;\n }\n if (!params.script?.trim()) {\n throw new Error('either `name` or `script` is required.');\n }\n const script = normalizeScript(params.script);\n const meta = parseWorkflowScript(script).meta;\n catalog.save(meta.name, script);\n return meta.name;\n}\n\nfunction normalizeScript(script: string): string {\n let text = script.trim();\n const fence = text.match(/^```(?:js|javascript)?\\s*\\n([\\s\\S]*?)\\n```$/i);\n if (fence) text = fence[1].trim();\n return text;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"workflow-tool.js","names":[],"sources":["../../../../src/agent/tools/workflow-tool.ts"],"sourcesContent":["/**\n * `workflow` — starts a persisted workflow run in a dedicated chat session.\n */\n\nimport { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport { extractProfileAgentId } from '../../config/agent-profile.js';\nimport { createLogger } from '../../utils/logger.js';\nimport type { WorkflowCatalog } from '../workflow/catalog.js';\nimport type {\n StartWorkflowRunServiceParams,\n WorkflowRunServiceResult,\n} from '../../workflows/service/workflow-run-service.types.js';\n\nconst log = createLogger('Agent:WorkflowTool');\n\nconst WorkflowToolSchema = Type.Object({\n name: Type.Optional(\n Type.String({\n description:\n 'Name of a saved visual workflow to run.',\n }),\n ),\n args: Type.Optional(\n Type.Any({\n description: 'Optional JSON value passed as workflow input payload.',\n }),\n ),\n goal: Type.Optional(\n Type.String({\n description: 'Optional goal or task description for this workflow run (defaults to user intent in chat).',\n }),\n ),\n goalId: Type.Optional(\n Type.String({\n description: 'Optional durable Goal id. When set, terminal workflow output is archived to that Goal.',\n }),\n ),\n});\n\nexport type WorkflowToolInput = {\n name?: string;\n args?: unknown;\n goal?: string;\n goalId?: string;\n};\n\nexport interface WorkflowToolDeps {\n catalog: WorkflowCatalog;\n getCurrentSessionKey?: () => string | undefined;\n getConfig: () => import('../../config/schema.js').Config | undefined;\n startWorkflowRun?: (params: StartWorkflowRunServiceParams) => Promise<WorkflowRunServiceResult>;\n}\n\nexport function createWorkflowTool(deps: WorkflowToolDeps): AgentTool {\n return {\n name: 'workflow',\n label: '◆ Workflow',\n description: [\n 'Start a multi-agent workflow run in its own chat session.',\n 'Use `name` for a workflow from the visual workflow catalog.',\n 'Returns immediately with runId + sessionKey — track progress in the linked chat session.',\n ].join(' '),\n parameters: WorkflowToolSchema,\n\n async execute(\n _toolCallId: string,\n params: WorkflowToolInput,\n ): Promise<AgentToolResult<{ runId: string; sessionKey: string } | { error: string }>> {\n if (!deps.startWorkflowRun) {\n return {\n content: [{ type: 'text', text: 'workflow: gateway workflow runs are not available in this context' }],\n details: { error: 'workflow_run_unavailable' },\n };\n }\n\n let definitionId: string;\n try {\n definitionId = resolveDefinitionId(params, deps.catalog);\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `workflow: ${message}` }],\n details: { error: message },\n };\n }\n\n const config = deps.getConfig();\n const parentSessionKey = deps.getCurrentSessionKey?.()?.trim();\n const agentId = extractProfileAgentId(parentSessionKey, config);\n\n const goal = params.goal?.trim() || '';\n const goalId = params.goalId?.trim();\n const source = parentSessionKey\n ? ({ kind: 'chat' as const, sessionKey: parentSessionKey })\n : ({ kind: 'api' as const });\n const inputEnvelope = goalId\n ? {\n payload: params.args ?? {},\n ...(goal ? { goal } : {}),\n }\n : undefined;\n\n try {\n const result = await deps.startWorkflowRun({\n agentId,\n definitionId,\n goal,\n goalId,\n input: inputEnvelope ? undefined : params.args,\n inputEnvelope,\n parentSessionKey,\n source,\n });\n\n if (result.ok === false) {\n return {\n content: [{ type: 'text', text: `workflow: ${result.message}` }],\n details: { error: result.message },\n };\n }\n\n const summary = goal\n ? `Started workflow \\`${definitionId}\\` (run ${result.runId}). Open chat session to track progress and continue.`\n : `Started workflow \\`${definitionId}\\` (run ${result.runId}). Open the workflow chat session to track progress.`;\n\n return {\n content: [\n {\n type: 'text',\n text: `${summary}\\n\\nsessionKey: ${result.sessionKey}`,\n },\n ],\n details: {\n runId: result.runId,\n sessionKey: result.sessionKey,\n definitionId,\n parentSessionKey: parentSessionKey ?? null,\n } as { runId: string; sessionKey: string },\n };\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n log.warn({ err: e, errorMessage: message, workflow: definitionId }, `workflow start failed: ${message}`);\n return {\n content: [{ type: 'text', text: `workflow: ${message}` }],\n details: { error: message },\n };\n }\n },\n } as unknown as AgentTool;\n}\n\nfunction resolveDefinitionId(params: WorkflowToolInput, catalog: WorkflowCatalog): string {\n const name = params.name?.trim();\n if (name) {\n catalog.load(name);\n return name;\n }\n throw new Error('`name` is required. Create workflows in the visual workflow studio.');\n}\n"],"mappings":";;;;;;;;aAQqD;AAOrD,MAAM,MAAM,aAAa,qBAAqB;AAE9C,MAAM,qBAAqB,KAAK,OAAO;CACrC,MAAM,KAAK,SACT,KAAK,OAAO,EACV,aACE,2CACH,CAAC,CACH;CACD,MAAM,KAAK,SACT,KAAK,IAAI,EACP,aAAa,yDACd,CAAC,CACH;CACD,MAAM,KAAK,SACT,KAAK,OAAO,EACV,aAAa,8FACd,CAAC,CACH;CACD,QAAQ,KAAK,SACX,KAAK,OAAO,EACV,aAAa,0FACd,CAAC,CACH;CACF,CAAC;AAgBF,SAAgB,mBAAmB,MAAmC;AACpE,QAAO;EACL,MAAM;EACN,OAAO;EACP,aAAa;GACX;GACA;GACA;GACD,CAAC,KAAK,IAAI;EACX,YAAY;EAEZ,MAAM,QACJ,aACA,QACqF;AACrF,OAAI,CAAC,KAAK,iBACR,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM;KAAqE,CAAC;IACtG,SAAS,EAAE,OAAO,4BAA4B;IAC/C;GAGH,IAAI;AACJ,OAAI;AACF,mBAAe,oBAAoB,QAAQ,KAAK,QAAQ;YACjD,GAAG;IACV,MAAM,UAAU,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE;AAC1D,WAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,aAAa;MAAW,CAAC;KACzD,SAAS,EAAE,OAAO,SAAS;KAC5B;;GAGH,MAAM,SAAS,KAAK,WAAW;GAC/B,MAAM,mBAAmB,KAAK,wBAAwB,EAAE,MAAM;GAC9D,MAAM,UAAU,sBAAsB,kBAAkB,OAAO;GAE/D,MAAM,OAAO,OAAO,MAAM,MAAM,IAAI;GACpC,MAAM,SAAS,OAAO,QAAQ,MAAM;GACpC,MAAM,SAAS,mBACV;IAAE,MAAM;IAAiB,YAAY;IAAkB,GACvD,EAAE,MAAM,OAAgB;GAC7B,MAAM,gBAAgB,SAClB;IACE,SAAS,OAAO,QAAQ,EAAE;IAC1B,GAAI,OAAO,EAAE,MAAM,GAAG,EAAE;IACzB,GACD,KAAA;AAEJ,OAAI;IACF,MAAM,SAAS,MAAM,KAAK,iBAAiB;KACzC;KACA;KACA;KACA;KACA,OAAO,gBAAgB,KAAA,IAAY,OAAO;KAC1C;KACA;KACA;KACD,CAAC;AAEF,QAAI,OAAO,OAAO,MAChB,QAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,aAAa,OAAO;MAAW,CAAC;KAChE,SAAS,EAAE,OAAO,OAAO,SAAS;KACnC;AAOH,WAAO;KACL,SAAS,CACP;MACE,MAAM;MACN,MAAM,GARI,OACZ,sBAAsB,aAAa,UAAU,OAAO,MAAM,wDAC1D,sBAAsB,aAAa,UAAU,OAAO,MAAM,sDAMvC,kBAAkB,OAAO;MAC3C,CACF;KACD,SAAS;MACP,OAAO,OAAO;MACd,YAAY,OAAO;MACnB;MACA,kBAAkB,oBAAoB;MACvC;KACF;YACM,GAAG;IACV,MAAM,UAAU,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE;AAC1D,QAAI,KAAK;KAAE,KAAK;KAAG,cAAc;KAAS,UAAU;KAAc,EAAE,0BAA0B,UAAU;AACxG,WAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,aAAa;MAAW,CAAC;KACzD,SAAS,EAAE,OAAO,SAAS;KAC5B;;;EAGN;;AAGH,SAAS,oBAAoB,QAA2B,SAAkC;CACxF,MAAM,OAAO,OAAO,MAAM,MAAM;AAChC,KAAI,MAAM;AACR,UAAQ,KAAK,KAAK;AAClB,SAAO;;AAET,OAAM,IAAI,MAAM,sEAAsE"}
@@ -1,28 +1,2 @@
1
- /**
2
- * Bundled workflow templates. These are shipped with xopc and discoverable
3
- * via the catalog alongside user workflows in `~/.xopc/workflows/`. A user
4
- * workflow with the same `name` always wins — built-ins are starting points,
5
- * not authority.
6
- */
7
- import { AUDIT_REPO_SCRIPT } from './audit-repo.js';
8
- import { CLIENT_PROPOSAL_SCRIPT } from './client-proposal.js';
9
- import { COMPETITOR_SCAN_SCRIPT } from './competitor-scan.js';
10
- import { CONTENT_DRAFT_SCRIPT } from './content-draft.js';
11
- import { CONTENT_REPURPOSE_SCRIPT } from './content-repurpose.js';
12
- import { DEBUG_INCIDENT_SCRIPT } from './debug-incident.js';
13
- import { DECISION_COMPARE_SCRIPT } from './decision-compare.js';
14
- import { IMPLEMENTATION_PLAN_SCRIPT } from './implementation-plan.js';
15
- import { INBOX_TRIAGE_SCRIPT } from './inbox-triage.js';
16
- import { MEETING_PREP_SCRIPT } from './meeting-prep.js';
17
- import { MULTI_PERSPECTIVE_REVIEW_SCRIPT } from './multi-perspective-review.js';
18
- import { OFFER_DESIGN_SCRIPT } from './offer-design.js';
19
- import { PR_REVIEW_SCRIPT } from './pr-review.js';
20
- import { RELEASE_CHECK_SCRIPT } from './release-check.js';
21
- import { RESEARCH_SCRIPT } from './research.js';
22
- import { WEEKLY_REVIEW_SCRIPT } from './weekly-review.js';
23
- export interface BuiltinWorkflow {
24
- name: string;
25
- script: string;
26
- }
27
- export declare const BUILTIN_WORKFLOWS: readonly BuiltinWorkflow[];
28
- export { AUDIT_REPO_SCRIPT, CLIENT_PROPOSAL_SCRIPT, COMPETITOR_SCAN_SCRIPT, CONTENT_DRAFT_SCRIPT, CONTENT_REPURPOSE_SCRIPT, DEBUG_INCIDENT_SCRIPT, DECISION_COMPARE_SCRIPT, IMPLEMENTATION_PLAN_SCRIPT, INBOX_TRIAGE_SCRIPT, MEETING_PREP_SCRIPT, MULTI_PERSPECTIVE_REVIEW_SCRIPT, OFFER_DESIGN_SCRIPT, PR_REVIEW_SCRIPT, RELEASE_CHECK_SCRIPT, RESEARCH_SCRIPT, WEEKLY_REVIEW_SCRIPT, };
1
+ import type { WorkflowDefinition } from '../../../workflows/domain/definition.js';
2
+ export declare const BUILTIN_WORKFLOWS: readonly WorkflowDefinition[];
@@ -1,93 +1,278 @@
1
- import { AUDIT_REPO_SCRIPT } from "./audit-repo.js";
2
- import { CLIENT_PROPOSAL_SCRIPT } from "./client-proposal.js";
3
- import { COMPETITOR_SCAN_SCRIPT } from "./competitor-scan.js";
4
- import { CONTENT_DRAFT_SCRIPT } from "./content-draft.js";
5
- import { CONTENT_REPURPOSE_SCRIPT } from "./content-repurpose.js";
6
- import { DEBUG_INCIDENT_SCRIPT } from "./debug-incident.js";
7
- import { DECISION_COMPARE_SCRIPT } from "./decision-compare.js";
8
- import { IMPLEMENTATION_PLAN_SCRIPT } from "./implementation-plan.js";
9
- import { INBOX_TRIAGE_SCRIPT } from "./inbox-triage.js";
10
- import { MEETING_PREP_SCRIPT } from "./meeting-prep.js";
11
- import { MULTI_PERSPECTIVE_REVIEW_SCRIPT } from "./multi-perspective-review.js";
12
- import { OFFER_DESIGN_SCRIPT } from "./offer-design.js";
13
- import { PR_REVIEW_SCRIPT } from "./pr-review.js";
14
- import { RELEASE_CHECK_SCRIPT } from "./release-check.js";
15
- import { RESEARCH_SCRIPT } from "./research.js";
16
- import { WEEKLY_REVIEW_SCRIPT } from "./weekly-review.js";
1
+ import { buildWorkflowDefinition } from "../../../workflows/domain/definition-utils.js";
17
2
  //#region src/agent/workflow/builtins/index.ts
18
- /**
19
- * Bundled workflow templates. These are shipped with xopc and discoverable
20
- * via the catalog alongside user workflows in `~/.xopc/workflows/`. A user
21
- * workflow with the same `name` always wins — built-ins are starting points,
22
- * not authority.
23
- */
24
- const BUILTIN_WORKFLOWS = Object.freeze([
3
+ const BUILTIN_SPECS = [
25
4
  {
26
5
  name: "audit_repo",
27
- script: AUDIT_REPO_SCRIPT
6
+ description: "Audit a repository across architecture, quality, security, and operations, then produce a prioritized report.",
7
+ whenToUse: "Use for a thorough review of a repository or major subsystem.",
8
+ tags: ["code-review", "audit"],
9
+ perspectives: perspectives("Architecture and boundaries", "Correctness and maintainability", "Security and operations")
28
10
  },
29
11
  {
30
12
  name: "client_proposal",
31
- script: CLIENT_PROPOSAL_SCRIPT
13
+ description: "Turn a client brief into a clear proposal covering scope, delivery, pricing logic, and risks.",
14
+ whenToUse: "Use when preparing a client-ready proposal or statement of work.",
15
+ tags: [
16
+ "writing",
17
+ "content",
18
+ "document"
19
+ ],
20
+ perspectives: perspectives("Client goals and value", "Scope and delivery plan", "Commercial terms and risks")
32
21
  },
33
22
  {
34
23
  name: "competitor_scan",
35
- script: COMPETITOR_SCAN_SCRIPT
24
+ description: "Compare competitors and identify positioning, pricing, and differentiation opportunities.",
25
+ whenToUse: "Use before positioning, pricing, or go-to-market decisions.",
26
+ tags: ["research", "investigation"],
27
+ perspectives: perspectives("Product and audience", "Pricing and distribution", "Differentiation and gaps")
36
28
  },
37
29
  {
38
30
  name: "content_draft",
39
- script: CONTENT_DRAFT_SCRIPT
31
+ description: "Draft polished content from multiple audience and tone perspectives, then select the strongest version.",
32
+ whenToUse: "Use for emails, posts, announcements, documentation, or other non-code writing.",
33
+ tags: [
34
+ "writing",
35
+ "content",
36
+ "communication"
37
+ ],
38
+ perspectives: perspectives("Audience clarity", "Narrative and tone", "Conversion and call to action")
40
39
  },
41
40
  {
42
41
  name: "content_repurpose",
43
- script: CONTENT_REPURPOSE_SCRIPT
42
+ description: "Turn one source into channel-specific content without losing the core message.",
43
+ whenToUse: "Use when adapting existing material for multiple platforms.",
44
+ tags: ["writing", "content"],
45
+ perspectives: perspectives("Short social format", "Professional long-form format", "Video or newsletter format")
44
46
  },
45
47
  {
46
48
  name: "debug_incident",
47
- script: DEBUG_INCIDENT_SCRIPT
49
+ description: "Triage an incident using independent hypotheses and produce ranked causes and verification steps.",
50
+ whenToUse: "Use for bugs, crashes, error messages, and unexpected behavior.",
51
+ tags: [
52
+ "debug",
53
+ "incident",
54
+ "troubleshooting"
55
+ ],
56
+ perspectives: perspectives("Application behavior", "Data and dependencies", "Infrastructure and observability")
48
57
  },
49
58
  {
50
59
  name: "decision_compare",
51
- script: DECISION_COMPARE_SCRIPT
60
+ description: "Compare options through independent criteria and recommend with explicit trade-offs.",
61
+ whenToUse: "Use for decisions with multiple viable choices.",
62
+ tags: [
63
+ "decision-making",
64
+ "comparison",
65
+ "productivity"
66
+ ],
67
+ perspectives: perspectives("Benefits and upside", "Risks and hidden cost", "Fit with constraints")
52
68
  },
53
69
  {
54
70
  name: "implementation_plan",
55
- script: IMPLEMENTATION_PLAN_SCRIPT
71
+ description: "Convert a feature, refactor, or bugfix request into an actionable implementation plan.",
72
+ whenToUse: "Use before multi-file or unfamiliar code changes.",
73
+ tags: [
74
+ "planning",
75
+ "implementation",
76
+ "architecture"
77
+ ],
78
+ perspectives: perspectives("Existing architecture", "Implementation sequence", "Testing and rollout risks")
56
79
  },
57
80
  {
58
81
  name: "inbox_triage",
59
- script: INBOX_TRIAGE_SCRIPT
82
+ description: "Sort messy inbox input into do, delegate, defer, and drop with clear priorities.",
83
+ whenToUse: "Use to plan a day from mixed messages and tasks.",
84
+ tags: ["productivity", "brainstorm"],
85
+ perspectives: perspectives("Urgency and impact", "Delegation and automation", "Scheduling and elimination")
60
86
  },
61
87
  {
62
88
  name: "meeting_prep",
63
- script: MEETING_PREP_SCRIPT
89
+ description: "Build meeting context, a focused agenda, and prioritized talking points.",
90
+ whenToUse: "Use before an important meeting.",
91
+ tags: ["meeting", "productivity"],
92
+ perspectives: perspectives("Context and stakeholders", "Agenda and decisions", "Questions and key messages")
64
93
  },
65
94
  {
66
95
  name: "multi_perspective_review",
67
- script: MULTI_PERSPECTIVE_REVIEW_SCRIPT
96
+ description: "Stress-test a target from user, operator, and maintainer perspectives.",
97
+ whenToUse: "Use before committing to a design, plan, pull request, or proposal.",
98
+ tags: [
99
+ "review",
100
+ "planning",
101
+ "decision"
102
+ ],
103
+ perspectives: perspectives("User experience and accessibility", "Operational failure modes", "Maintainability and hidden assumptions")
68
104
  },
69
105
  {
70
106
  name: "offer_design",
71
- script: OFFER_DESIGN_SCRIPT
107
+ description: "Package expertise into sellable offers with tiers, pricing, boundaries, and positioning.",
108
+ whenToUse: "Use when productizing a service or subscription.",
109
+ tags: ["planning", "architecture"],
110
+ perspectives: perspectives("Customer problem and outcome", "Packaging and delivery boundaries", "Pricing and positioning")
72
111
  },
73
112
  {
74
113
  name: "pr_review",
75
- script: PR_REVIEW_SCRIPT
114
+ description: "Review a change set with focused reviewers and produce a ship or block verdict.",
115
+ whenToUse: "Use for a pull request, diff, or commit range.",
116
+ tags: ["code-review", "pr"],
117
+ perspectives: perspectives("Correctness and regressions", "Security and performance", "Tests and maintainability")
76
118
  },
77
119
  {
78
120
  name: "release_check",
79
- script: RELEASE_CHECK_SCRIPT
121
+ description: "Assess release readiness through parallel risk checks and a go or no-go verdict.",
122
+ whenToUse: "Use before shipping a completed change.",
123
+ tags: [
124
+ "release",
125
+ "quality",
126
+ "validation"
127
+ ],
128
+ perspectives: perspectives("Product behavior", "Quality and regression risk", "Operations and rollback")
80
129
  },
81
130
  {
82
131
  name: "research",
83
- script: RESEARCH_SCRIPT
132
+ description: "Research a question from multiple angles and produce a source-conscious synthesis.",
133
+ whenToUse: "Use for non-trivial questions that benefit from independent investigation.",
134
+ tags: ["research", "investigation"],
135
+ perspectives: perspectives("Primary evidence and facts", "Alternative explanations", "Practical implications")
84
136
  },
85
137
  {
86
138
  name: "weekly_review",
87
- script: WEEKLY_REVIEW_SCRIPT
139
+ description: "Review the week and produce a short, prioritized action plan for next week.",
140
+ whenToUse: "Use for a weekly retrospective and planning session.",
141
+ tags: ["productivity", "brainstorm"],
142
+ perspectives: perspectives("Outcomes and progress", "Friction and unfinished work", "Priorities and capacity")
88
143
  }
89
- ]);
144
+ ];
145
+ const BUILTIN_WORKFLOWS = Object.freeze(BUILTIN_SPECS.map((spec) => createBuiltinWorkflow(spec)));
146
+ function createBuiltinWorkflow(spec) {
147
+ const graph = createParallelGraph(spec);
148
+ const estimatedAgents = {
149
+ min: spec.perspectives.length + 1,
150
+ max: spec.perspectives.length + 1
151
+ };
152
+ return buildWorkflowDefinition({
153
+ name: spec.name,
154
+ source: "builtin",
155
+ graph,
156
+ manifest: {
157
+ description: spec.description,
158
+ whenToUse: spec.whenToUse,
159
+ tags: spec.tags,
160
+ estimatedAgents,
161
+ inputSchema: {
162
+ type: "object",
163
+ additionalProperties: true
164
+ }
165
+ },
166
+ phases: [{
167
+ id: "explore",
168
+ title: "Explore"
169
+ }, {
170
+ id: "synthesize",
171
+ title: "Synthesize"
172
+ }]
173
+ });
174
+ }
175
+ function createParallelGraph(spec) {
176
+ const analystNodes = spec.perspectives.map((perspective, index) => ({
177
+ id: `perspective-${index + 1}`,
178
+ kind: "agent",
179
+ title: perspective.title,
180
+ description: perspective.focus,
181
+ phaseId: "explore",
182
+ position: {
183
+ x: 360,
184
+ y: 80 + index * 180
185
+ },
186
+ config: {
187
+ prompt: `Goal: {{goal}}\nInput: {{input}}\n\nAnalyze this from the following perspective: ${perspective.focus}\nReturn concrete findings, evidence, risks, and recommended actions.`,
188
+ maxIterations: 12
189
+ }
190
+ }));
191
+ return {
192
+ schemaVersion: 1,
193
+ nodes: [
194
+ {
195
+ id: "input",
196
+ kind: "input",
197
+ title: "User input",
198
+ position: {
199
+ x: 40,
200
+ y: 260
201
+ },
202
+ config: {}
203
+ },
204
+ ...analystNodes,
205
+ {
206
+ id: "merge",
207
+ kind: "merge",
208
+ title: "Combine findings",
209
+ phaseId: "synthesize",
210
+ position: {
211
+ x: 700,
212
+ y: 260
213
+ },
214
+ config: { mode: "object" }
215
+ },
216
+ {
217
+ id: "synthesis",
218
+ kind: "agent",
219
+ title: "Create final answer",
220
+ phaseId: "synthesize",
221
+ position: {
222
+ x: 980,
223
+ y: 260
224
+ },
225
+ config: {
226
+ prompt: `Goal: {{goal}}\n\nIndependent findings:\n{{predecessors.merge}}\n\nSynthesize a decision-ready answer. Resolve conflicts, prioritize the most important points, and end with specific next actions.`,
227
+ maxIterations: 12
228
+ }
229
+ },
230
+ {
231
+ id: "output",
232
+ kind: "output",
233
+ title: "Result",
234
+ position: {
235
+ x: 1280,
236
+ y: 260
237
+ },
238
+ config: { title: "Final result" }
239
+ }
240
+ ],
241
+ edges: [
242
+ ...analystNodes.map((node, index) => ({
243
+ id: `input-${index + 1}`,
244
+ source: "input",
245
+ target: node.id
246
+ })),
247
+ ...analystNodes.map((node, index) => ({
248
+ id: `perspective-${index + 1}-merge`,
249
+ source: node.id,
250
+ target: "merge"
251
+ })),
252
+ {
253
+ id: "merge-synthesis",
254
+ source: "merge",
255
+ target: "synthesis"
256
+ },
257
+ {
258
+ id: "synthesis-output",
259
+ source: "synthesis",
260
+ target: "output"
261
+ }
262
+ ]
263
+ };
264
+ }
265
+ function perspectives(first, second, third) {
266
+ return [
267
+ first,
268
+ second,
269
+ third
270
+ ].map((title) => ({
271
+ title,
272
+ focus: title
273
+ }));
274
+ }
90
275
  //#endregion
91
- export { AUDIT_REPO_SCRIPT, BUILTIN_WORKFLOWS, CLIENT_PROPOSAL_SCRIPT, COMPETITOR_SCAN_SCRIPT, CONTENT_DRAFT_SCRIPT, CONTENT_REPURPOSE_SCRIPT, DEBUG_INCIDENT_SCRIPT, DECISION_COMPARE_SCRIPT, IMPLEMENTATION_PLAN_SCRIPT, INBOX_TRIAGE_SCRIPT, MEETING_PREP_SCRIPT, MULTI_PERSPECTIVE_REVIEW_SCRIPT, OFFER_DESIGN_SCRIPT, PR_REVIEW_SCRIPT, RELEASE_CHECK_SCRIPT, RESEARCH_SCRIPT, WEEKLY_REVIEW_SCRIPT };
276
+ export { BUILTIN_WORKFLOWS };
92
277
 
93
278
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/agent/workflow/builtins/index.ts"],"sourcesContent":["/**\n * Bundled workflow templates. These are shipped with xopc and discoverable\n * via the catalog alongside user workflows in `~/.xopc/workflows/`. A user\n * workflow with the same `name` always wins — built-ins are starting points,\n * not authority.\n */\n\nimport { AUDIT_REPO_SCRIPT } from './audit-repo.js';\nimport { CLIENT_PROPOSAL_SCRIPT } from './client-proposal.js';\nimport { COMPETITOR_SCAN_SCRIPT } from './competitor-scan.js';\nimport { CONTENT_DRAFT_SCRIPT } from './content-draft.js';\nimport { CONTENT_REPURPOSE_SCRIPT } from './content-repurpose.js';\nimport { DEBUG_INCIDENT_SCRIPT } from './debug-incident.js';\nimport { DECISION_COMPARE_SCRIPT } from './decision-compare.js';\nimport { IMPLEMENTATION_PLAN_SCRIPT } from './implementation-plan.js';\nimport { INBOX_TRIAGE_SCRIPT } from './inbox-triage.js';\nimport { MEETING_PREP_SCRIPT } from './meeting-prep.js';\nimport { MULTI_PERSPECTIVE_REVIEW_SCRIPT } from './multi-perspective-review.js';\nimport { OFFER_DESIGN_SCRIPT } from './offer-design.js';\nimport { PR_REVIEW_SCRIPT } from './pr-review.js';\nimport { RELEASE_CHECK_SCRIPT } from './release-check.js';\nimport { RESEARCH_SCRIPT } from './research.js';\nimport { WEEKLY_REVIEW_SCRIPT } from './weekly-review.js';\n\nexport interface BuiltinWorkflow {\n name: string;\n script: string;\n}\n\nexport const BUILTIN_WORKFLOWS: readonly BuiltinWorkflow[] = Object.freeze([\n { name: 'audit_repo', script: AUDIT_REPO_SCRIPT },\n { name: 'client_proposal', script: CLIENT_PROPOSAL_SCRIPT },\n { name: 'competitor_scan', script: COMPETITOR_SCAN_SCRIPT },\n { name: 'content_draft', script: CONTENT_DRAFT_SCRIPT },\n { name: 'content_repurpose', script: CONTENT_REPURPOSE_SCRIPT },\n { name: 'debug_incident', script: DEBUG_INCIDENT_SCRIPT },\n { name: 'decision_compare', script: DECISION_COMPARE_SCRIPT },\n { name: 'implementation_plan', script: IMPLEMENTATION_PLAN_SCRIPT },\n { name: 'inbox_triage', script: INBOX_TRIAGE_SCRIPT },\n { name: 'meeting_prep', script: MEETING_PREP_SCRIPT },\n { name: 'multi_perspective_review', script: MULTI_PERSPECTIVE_REVIEW_SCRIPT },\n { name: 'offer_design', script: OFFER_DESIGN_SCRIPT },\n { name: 'pr_review', script: PR_REVIEW_SCRIPT },\n { name: 'release_check', script: RELEASE_CHECK_SCRIPT },\n { name: 'research', script: RESEARCH_SCRIPT },\n { name: 'weekly_review', script: WEEKLY_REVIEW_SCRIPT },\n]);\n\nexport {\n AUDIT_REPO_SCRIPT,\n CLIENT_PROPOSAL_SCRIPT,\n COMPETITOR_SCAN_SCRIPT,\n CONTENT_DRAFT_SCRIPT,\n CONTENT_REPURPOSE_SCRIPT,\n DEBUG_INCIDENT_SCRIPT,\n DECISION_COMPARE_SCRIPT,\n IMPLEMENTATION_PLAN_SCRIPT,\n INBOX_TRIAGE_SCRIPT,\n MEETING_PREP_SCRIPT,\n MULTI_PERSPECTIVE_REVIEW_SCRIPT,\n OFFER_DESIGN_SCRIPT,\n PR_REVIEW_SCRIPT,\n RELEASE_CHECK_SCRIPT,\n RESEARCH_SCRIPT,\n WEEKLY_REVIEW_SCRIPT,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA6BA,MAAa,oBAAgD,OAAO,OAAO;CACzE;EAAE,MAAM;EAAc,QAAQ;EAAmB;CACjD;EAAE,MAAM;EAAmB,QAAQ;EAAwB;CAC3D;EAAE,MAAM;EAAmB,QAAQ;EAAwB;CAC3D;EAAE,MAAM;EAAiB,QAAQ;EAAsB;CACvD;EAAE,MAAM;EAAqB,QAAQ;EAA0B;CAC/D;EAAE,MAAM;EAAkB,QAAQ;EAAuB;CACzD;EAAE,MAAM;EAAoB,QAAQ;EAAyB;CAC7D;EAAE,MAAM;EAAuB,QAAQ;EAA4B;CACnE;EAAE,MAAM;EAAgB,QAAQ;EAAqB;CACrD;EAAE,MAAM;EAAgB,QAAQ;EAAqB;CACrD;EAAE,MAAM;EAA4B,QAAQ;EAAiC;CAC7E;EAAE,MAAM;EAAgB,QAAQ;EAAqB;CACrD;EAAE,MAAM;EAAa,QAAQ;EAAkB;CAC/C;EAAE,MAAM;EAAiB,QAAQ;EAAsB;CACvD;EAAE,MAAM;EAAY,QAAQ;EAAiB;CAC7C;EAAE,MAAM;EAAiB,QAAQ;EAAsB;CACxD,CAAC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/agent/workflow/builtins/index.ts"],"sourcesContent":["import type { WorkflowDefinition, WorkflowDefinitionEstimatedAgents, WorkflowGraph } from '../../../workflows/domain/definition.js';\nimport { buildWorkflowDefinition } from '../../../workflows/domain/definition-utils.js';\n\ninterface BuiltinWorkflowSpec {\n name: string;\n description: string;\n whenToUse: string;\n tags: string[];\n perspectives: Array<{ title: string; focus: string }>;\n}\n\nconst BUILTIN_SPECS: BuiltinWorkflowSpec[] = [\n { name: 'audit_repo', description: 'Audit a repository across architecture, quality, security, and operations, then produce a prioritized report.', whenToUse: 'Use for a thorough review of a repository or major subsystem.', tags: ['code-review', 'audit'], perspectives: perspectives('Architecture and boundaries', 'Correctness and maintainability', 'Security and operations') },\n { name: 'client_proposal', description: 'Turn a client brief into a clear proposal covering scope, delivery, pricing logic, and risks.', whenToUse: 'Use when preparing a client-ready proposal or statement of work.', tags: ['writing', 'content', 'document'], perspectives: perspectives('Client goals and value', 'Scope and delivery plan', 'Commercial terms and risks') },\n { name: 'competitor_scan', description: 'Compare competitors and identify positioning, pricing, and differentiation opportunities.', whenToUse: 'Use before positioning, pricing, or go-to-market decisions.', tags: ['research', 'investigation'], perspectives: perspectives('Product and audience', 'Pricing and distribution', 'Differentiation and gaps') },\n { name: 'content_draft', description: 'Draft polished content from multiple audience and tone perspectives, then select the strongest version.', whenToUse: 'Use for emails, posts, announcements, documentation, or other non-code writing.', tags: ['writing', 'content', 'communication'], perspectives: perspectives('Audience clarity', 'Narrative and tone', 'Conversion and call to action') },\n { name: 'content_repurpose', description: 'Turn one source into channel-specific content without losing the core message.', whenToUse: 'Use when adapting existing material for multiple platforms.', tags: ['writing', 'content'], perspectives: perspectives('Short social format', 'Professional long-form format', 'Video or newsletter format') },\n { name: 'debug_incident', description: 'Triage an incident using independent hypotheses and produce ranked causes and verification steps.', whenToUse: 'Use for bugs, crashes, error messages, and unexpected behavior.', tags: ['debug', 'incident', 'troubleshooting'], perspectives: perspectives('Application behavior', 'Data and dependencies', 'Infrastructure and observability') },\n { name: 'decision_compare', description: 'Compare options through independent criteria and recommend with explicit trade-offs.', whenToUse: 'Use for decisions with multiple viable choices.', tags: ['decision-making', 'comparison', 'productivity'], perspectives: perspectives('Benefits and upside', 'Risks and hidden cost', 'Fit with constraints') },\n { name: 'implementation_plan', description: 'Convert a feature, refactor, or bugfix request into an actionable implementation plan.', whenToUse: 'Use before multi-file or unfamiliar code changes.', tags: ['planning', 'implementation', 'architecture'], perspectives: perspectives('Existing architecture', 'Implementation sequence', 'Testing and rollout risks') },\n { name: 'inbox_triage', description: 'Sort messy inbox input into do, delegate, defer, and drop with clear priorities.', whenToUse: 'Use to plan a day from mixed messages and tasks.', tags: ['productivity', 'brainstorm'], perspectives: perspectives('Urgency and impact', 'Delegation and automation', 'Scheduling and elimination') },\n { name: 'meeting_prep', description: 'Build meeting context, a focused agenda, and prioritized talking points.', whenToUse: 'Use before an important meeting.', tags: ['meeting', 'productivity'], perspectives: perspectives('Context and stakeholders', 'Agenda and decisions', 'Questions and key messages') },\n { name: 'multi_perspective_review', description: 'Stress-test a target from user, operator, and maintainer perspectives.', whenToUse: 'Use before committing to a design, plan, pull request, or proposal.', tags: ['review', 'planning', 'decision'], perspectives: perspectives('User experience and accessibility', 'Operational failure modes', 'Maintainability and hidden assumptions') },\n { name: 'offer_design', description: 'Package expertise into sellable offers with tiers, pricing, boundaries, and positioning.', whenToUse: 'Use when productizing a service or subscription.', tags: ['planning', 'architecture'], perspectives: perspectives('Customer problem and outcome', 'Packaging and delivery boundaries', 'Pricing and positioning') },\n { name: 'pr_review', description: 'Review a change set with focused reviewers and produce a ship or block verdict.', whenToUse: 'Use for a pull request, diff, or commit range.', tags: ['code-review', 'pr'], perspectives: perspectives('Correctness and regressions', 'Security and performance', 'Tests and maintainability') },\n { name: 'release_check', description: 'Assess release readiness through parallel risk checks and a go or no-go verdict.', whenToUse: 'Use before shipping a completed change.', tags: ['release', 'quality', 'validation'], perspectives: perspectives('Product behavior', 'Quality and regression risk', 'Operations and rollback') },\n { name: 'research', description: 'Research a question from multiple angles and produce a source-conscious synthesis.', whenToUse: 'Use for non-trivial questions that benefit from independent investigation.', tags: ['research', 'investigation'], perspectives: perspectives('Primary evidence and facts', 'Alternative explanations', 'Practical implications') },\n { name: 'weekly_review', description: 'Review the week and produce a short, prioritized action plan for next week.', whenToUse: 'Use for a weekly retrospective and planning session.', tags: ['productivity', 'brainstorm'], perspectives: perspectives('Outcomes and progress', 'Friction and unfinished work', 'Priorities and capacity') },\n];\n\nexport const BUILTIN_WORKFLOWS: readonly WorkflowDefinition[] = Object.freeze(\n BUILTIN_SPECS.map((spec) => createBuiltinWorkflow(spec)),\n);\n\nfunction createBuiltinWorkflow(spec: BuiltinWorkflowSpec): WorkflowDefinition {\n const graph = createParallelGraph(spec);\n const estimatedAgents: WorkflowDefinitionEstimatedAgents = {\n min: spec.perspectives.length + 1,\n max: spec.perspectives.length + 1,\n };\n return buildWorkflowDefinition({\n name: spec.name,\n source: 'builtin',\n graph,\n manifest: {\n description: spec.description,\n whenToUse: spec.whenToUse,\n tags: spec.tags,\n estimatedAgents,\n inputSchema: { type: 'object', additionalProperties: true },\n },\n phases: [\n { id: 'explore', title: 'Explore' },\n { id: 'synthesize', title: 'Synthesize' },\n ],\n });\n}\n\nfunction createParallelGraph(spec: BuiltinWorkflowSpec): WorkflowGraph {\n const analystNodes = spec.perspectives.map((perspective, index) => ({\n id: `perspective-${index + 1}`,\n kind: 'agent' as const,\n title: perspective.title,\n description: perspective.focus,\n phaseId: 'explore',\n position: { x: 360, y: 80 + index * 180 },\n config: {\n prompt: `Goal: {{goal}}\\nInput: {{input}}\\n\\nAnalyze this from the following perspective: ${perspective.focus}\\nReturn concrete findings, evidence, risks, and recommended actions.`,\n maxIterations: 12,\n },\n }));\n return {\n schemaVersion: 1,\n nodes: [\n { id: 'input', kind: 'input', title: 'User input', position: { x: 40, y: 260 }, config: {} },\n ...analystNodes,\n { id: 'merge', kind: 'merge', title: 'Combine findings', phaseId: 'synthesize', position: { x: 700, y: 260 }, config: { mode: 'object' } },\n {\n id: 'synthesis',\n kind: 'agent',\n title: 'Create final answer',\n phaseId: 'synthesize',\n position: { x: 980, y: 260 },\n config: {\n prompt: `Goal: {{goal}}\\n\\nIndependent findings:\\n{{predecessors.merge}}\\n\\nSynthesize a decision-ready answer. Resolve conflicts, prioritize the most important points, and end with specific next actions.`,\n maxIterations: 12,\n },\n },\n { id: 'output', kind: 'output', title: 'Result', position: { x: 1280, y: 260 }, config: { title: 'Final result' } },\n ],\n edges: [\n ...analystNodes.map((node, index) => ({ id: `input-${index + 1}`, source: 'input', target: node.id })),\n ...analystNodes.map((node, index) => ({ id: `perspective-${index + 1}-merge`, source: node.id, target: 'merge' })),\n { id: 'merge-synthesis', source: 'merge', target: 'synthesis' },\n { id: 'synthesis-output', source: 'synthesis', target: 'output' },\n ],\n };\n}\n\nfunction perspectives(first: string, second: string, third: string): Array<{ title: string; focus: string }> {\n return [first, second, third].map((title) => ({ title, focus: title }));\n}\n"],"mappings":"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"}
@@ -1,32 +1,13 @@
1
- /**
2
- * Catalog for named workflows.
3
- *
4
- * Resolution order (built-ins are starting points, user workflows win):
5
- * 1. `~/.xopc/workflows/<name>/workflow.js` (+ optional `manifest.json`)
6
- * 2. `~/.xopc/workflows/<name>.js` (or `<name>.workflow.js`)
7
- * 3. {@link BUILTIN_WORKFLOWS}
8
- *
9
- * The user dir is discovered via {@link resolveStateDir}, so `XOPC_STATE_DIR`
10
- * overrides apply automatically (matches how skills / extensions are wired).
11
- *
12
- * Listing is filesystem-cheap (single `readdir`) and runs synchronously — the
13
- * `/workflows` slash command is interactive and should return immediately.
14
- *
15
- * Validation: on load we re-parse the script to make sure `meta.name` matches
16
- * the filename. This prevents copy-pasted scripts from being silently
17
- * mis-addressed when invoked by name.
18
- */
19
- import type { WorkflowDefinitionManifest } from '../../workflows/domain/definition.js';
20
- import type { WorkflowMeta } from './types.js';
1
+ import type { WorkflowDefinition, WorkflowDefinitionManifest, WorkflowGraph } from '../../workflows/domain/definition.js';
21
2
  export type WorkflowSource = 'user' | 'builtin';
22
3
  export interface CatalogEntry {
23
4
  name: string;
24
5
  source: WorkflowSource;
25
- /** Absolute path for user entries; null for built-ins (in-memory). */
26
6
  path: string | null;
27
7
  description: string;
28
- title?: string;
29
- version?: string;
8
+ title: string;
9
+ version: string;
10
+ revision: number;
30
11
  whenToUse?: string;
31
12
  tags?: string[];
32
13
  estimatedAgents?: {
@@ -34,28 +15,45 @@ export interface CatalogEntry {
34
15
  max: number;
35
16
  };
36
17
  }
37
- export interface LoadedWorkflow {
18
+ export interface SaveWorkflowInput {
38
19
  name: string;
39
- source: WorkflowSource;
40
- script: string;
41
- meta: WorkflowMeta;
42
- path: string | null;
20
+ graph: WorkflowGraph;
43
21
  manifest?: WorkflowDefinitionManifest;
22
+ expectedRevision?: number;
23
+ intent?: 'create' | 'update';
24
+ }
25
+ export interface WorkflowRevisionSummary {
26
+ revision: number;
27
+ title: string;
28
+ contentHash?: string;
29
+ createdAtMs: number;
44
30
  }
45
31
  export interface WorkflowCatalog {
46
32
  list(): CatalogEntry[];
47
- /** Load a named workflow. Throws if missing or meta.name disagrees with filename. */
48
- load(name: string): LoadedWorkflow;
49
- /** Save a script as a user workflow. Throws if the script fails to parse. */
50
- save(name: string, script: string): {
33
+ load(name: string): WorkflowDefinition;
34
+ save(input: SaveWorkflowInput): {
51
35
  path: string;
36
+ definition: WorkflowDefinition;
37
+ };
38
+ listRevisions(name: string): WorkflowRevisionSummary[];
39
+ loadRevision(name: string, revision: number): WorkflowDefinition;
40
+ restore(name: string, revision: number, expectedRevision: number): {
41
+ path: string;
42
+ definition: WorkflowDefinition;
52
43
  };
53
- /** Remove a user workflow. No-op if absent. Built-ins are never removed. */
54
44
  remove(name: string): boolean;
55
- /** Absolute path to the user workflows directory (created lazily on save). */
56
45
  userDir: string;
57
46
  }
58
47
  export declare function createWorkflowCatalog(opts?: {
59
48
  userDir?: string;
60
49
  }): WorkflowCatalog;
50
+ export declare class WorkflowRevisionConflictError extends Error {
51
+ readonly currentRevision: number;
52
+ constructor(currentRevision: number);
53
+ }
54
+ export declare class WorkflowNameConflictError extends Error {
55
+ readonly workflowName: string;
56
+ readonly currentRevision: number;
57
+ constructor(workflowName: string, currentRevision: number);
58
+ }
61
59
  export declare function defaultUserDir(): string;