@pixelbyte-software/pixcode 1.54.11 → 1.55.0

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 (331) hide show
  1. package/dist-server/server/claude-sdk.js +1 -1
  2. package/dist-server/server/claude-sdk.js.map +1 -1
  3. package/dist-server/server/index.js +6 -11
  4. package/dist-server/server/index.js.map +1 -1
  5. package/dist-server/server/modules/security/permission-policy.js.map +1 -0
  6. package/dist-server/server/modules/tasks/git-worktree.js +98 -0
  7. package/dist-server/server/modules/tasks/git-worktree.js.map +1 -0
  8. package/dist-server/server/modules/tasks/index.js +8 -0
  9. package/dist-server/server/modules/tasks/index.js.map +1 -0
  10. package/dist-server/server/modules/tasks/prompt-builder.js +85 -0
  11. package/dist-server/server/modules/tasks/prompt-builder.js.map +1 -0
  12. package/dist-server/server/modules/tasks/role-presets.js +94 -0
  13. package/dist-server/server/modules/tasks/role-presets.js.map +1 -0
  14. package/dist-server/server/modules/tasks/runners/claude-runner.js +109 -0
  15. package/dist-server/server/modules/tasks/runners/claude-runner.js.map +1 -0
  16. package/dist-server/server/modules/tasks/runners/codex-runner.js +67 -0
  17. package/dist-server/server/modules/tasks/runners/codex-runner.js.map +1 -0
  18. package/dist-server/server/modules/tasks/runners/spawn-runner.js +111 -0
  19. package/dist-server/server/modules/tasks/runners/spawn-runner.js.map +1 -0
  20. package/dist-server/server/modules/tasks/runners/types.js +5 -0
  21. package/dist-server/server/modules/tasks/runners/types.js.map +1 -0
  22. package/dist-server/server/modules/tasks/scheduler.js +69 -0
  23. package/dist-server/server/modules/tasks/scheduler.js.map +1 -0
  24. package/dist-server/server/modules/tasks/task-queue.js +81 -0
  25. package/dist-server/server/modules/tasks/task-queue.js.map +1 -0
  26. package/dist-server/server/modules/tasks/task-routes.js +195 -0
  27. package/dist-server/server/modules/tasks/task-routes.js.map +1 -0
  28. package/dist-server/server/modules/tasks/task-runner.js +187 -0
  29. package/dist-server/server/modules/tasks/task-runner.js.map +1 -0
  30. package/dist-server/server/modules/tasks/task-store.js +196 -0
  31. package/dist-server/server/modules/tasks/task-store.js.map +1 -0
  32. package/dist-server/server/modules/tasks/task-types.js +5 -0
  33. package/dist-server/server/modules/tasks/task-types.js.map +1 -0
  34. package/dist-server/server/modules/tasks/user-interaction.js +73 -0
  35. package/dist-server/server/modules/tasks/user-interaction.js.map +1 -0
  36. package/dist-server/server/services/control-room.js +9 -1
  37. package/dist-server/server/services/control-room.js.map +1 -1
  38. package/dist-server/server/services/public-api-manifest.js +5 -5
  39. package/dist-server/server/services/public-api-manifest.js.map +1 -1
  40. package/dist-server/server/services/telegram/control-center.js +10 -10
  41. package/dist-server/server/services/telegram/control-center.js.map +1 -1
  42. package/dist-server/server/services/telegram/telegram-gateway.js +2 -2
  43. package/dist-server/server/services/telegram/telegram-gateway.js.map +1 -1
  44. package/dist-server/server/services/telegram/translations.js +5 -5
  45. package/dist-server/server/services/telegram/translations.js.map +1 -1
  46. package/package.json +1 -1
  47. package/server/claude-sdk.js +1 -1
  48. package/server/index.js +6 -23
  49. package/server/modules/tasks/git-worktree.ts +102 -0
  50. package/server/modules/tasks/index.ts +9 -0
  51. package/server/modules/tasks/prompt-builder.ts +98 -0
  52. package/server/modules/tasks/role-presets.ts +113 -0
  53. package/server/modules/tasks/runners/claude-runner.ts +120 -0
  54. package/server/modules/tasks/runners/codex-runner.ts +80 -0
  55. package/server/modules/tasks/runners/spawn-runner.ts +122 -0
  56. package/server/modules/tasks/runners/types.ts +25 -0
  57. package/server/modules/tasks/scheduler.ts +75 -0
  58. package/server/modules/tasks/task-queue.ts +91 -0
  59. package/server/modules/tasks/task-routes.ts +245 -0
  60. package/server/modules/tasks/task-runner.ts +219 -0
  61. package/server/modules/tasks/task-store.ts +223 -0
  62. package/server/modules/tasks/task-types.ts +100 -0
  63. package/server/modules/tasks/user-interaction.ts +93 -0
  64. package/server/services/control-room.js +10 -1
  65. package/server/services/public-api-manifest.js +5 -5
  66. package/server/services/telegram/control-center.js +10 -10
  67. package/server/services/telegram/telegram-gateway.js +2 -2
  68. package/server/services/telegram/translations.js +5 -5
  69. package/dist/api-automation.html +0 -110
  70. package/dist/api-docs.html +0 -548
  71. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  72. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  73. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  74. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  75. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  76. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  77. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  78. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  79. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  80. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  81. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  82. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  83. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  84. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  85. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  86. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  87. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  88. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  89. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  90. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  91. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  92. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  93. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  94. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  95. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  96. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  97. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  98. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  99. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  100. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  101. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  102. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  103. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  104. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  105. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  106. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  107. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  108. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  109. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  110. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  111. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  112. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  113. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  114. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  115. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  116. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  117. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  118. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  119. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  120. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  121. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  122. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  123. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  124. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  125. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  126. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  127. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  128. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  129. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  130. package/dist/assets/index-Bcqs_1vc.js +0 -877
  131. package/dist/assets/index-Dz1luE0u.css +0 -32
  132. package/dist/assets/index-ak1p_4ew.js +0 -11
  133. package/dist/assets/localMonaco-DFIbtDNp.js +0 -1
  134. package/dist/assets/vendor-codemirror-CIYNS698.js +0 -41
  135. package/dist/assets/vendor-react-DB6V5Fl1.js +0 -59
  136. package/dist/assets/vendor-xterm-C7tpxJl7.js +0 -9
  137. package/dist/clear-cache.html +0 -85
  138. package/dist/convert-icons.md +0 -53
  139. package/dist/docs.html +0 -308
  140. package/dist/favicon.png +0 -0
  141. package/dist/favicon.svg +0 -8
  142. package/dist/features.html +0 -133
  143. package/dist/generate-icons.js +0 -49
  144. package/dist/humans.txt +0 -15
  145. package/dist/icons/claude-ai-icon.svg +0 -1
  146. package/dist/icons/codex-white.svg +0 -3
  147. package/dist/icons/codex.svg +0 -3
  148. package/dist/icons/cursor-white.svg +0 -12
  149. package/dist/icons/cursor.svg +0 -1
  150. package/dist/icons/gemini-ai-icon.svg +0 -1
  151. package/dist/icons/icon-128x128.png +0 -0
  152. package/dist/icons/icon-128x128.svg +0 -9
  153. package/dist/icons/icon-144x144.png +0 -0
  154. package/dist/icons/icon-144x144.svg +0 -9
  155. package/dist/icons/icon-152x152.png +0 -0
  156. package/dist/icons/icon-152x152.svg +0 -9
  157. package/dist/icons/icon-192x192.png +0 -0
  158. package/dist/icons/icon-192x192.svg +0 -9
  159. package/dist/icons/icon-384x384.png +0 -0
  160. package/dist/icons/icon-384x384.svg +0 -9
  161. package/dist/icons/icon-512x512.png +0 -0
  162. package/dist/icons/icon-512x512.svg +0 -9
  163. package/dist/icons/icon-72x72.png +0 -0
  164. package/dist/icons/icon-72x72.svg +0 -9
  165. package/dist/icons/icon-96x96.png +0 -0
  166. package/dist/icons/icon-96x96.svg +0 -9
  167. package/dist/icons/icon-template.svg +0 -9
  168. package/dist/icons/opencode-logo-dark.svg +0 -1
  169. package/dist/icons/opencode-logo-light.svg +0 -1
  170. package/dist/icons/qwen-ai-icon.png +0 -0
  171. package/dist/icons/qwen-logo.svg +0 -15
  172. package/dist/index.html +0 -62
  173. package/dist/landing.html +0 -268
  174. package/dist/llms-full.txt +0 -119
  175. package/dist/llms.txt +0 -53
  176. package/dist/logo-128.png +0 -0
  177. package/dist/logo-256.png +0 -0
  178. package/dist/logo-32.png +0 -0
  179. package/dist/logo-512.png +0 -0
  180. package/dist/logo-64.png +0 -0
  181. package/dist/logo.png +0 -0
  182. package/dist/logo.svg +0 -12
  183. package/dist/manifest.json +0 -61
  184. package/dist/openapi.yaml +0 -1696
  185. package/dist/orchestration.html +0 -125
  186. package/dist/robots.txt +0 -4
  187. package/dist/screenshots/cli-selection.png +0 -0
  188. package/dist/screenshots/desktop-main.png +0 -0
  189. package/dist/screenshots/mobile-chat.png +0 -0
  190. package/dist/screenshots/tools-modal.png +0 -0
  191. package/dist/site.css +0 -692
  192. package/dist/sitemap.xml +0 -51
  193. package/dist/sw.js +0 -132
  194. package/dist-server/server/modules/orchestration/a2a/adapter-registry.js +0 -73
  195. package/dist-server/server/modules/orchestration/a2a/adapter-registry.js.map +0 -1
  196. package/dist-server/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.js +0 -17
  197. package/dist-server/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.js.map +0 -1
  198. package/dist-server/server/modules/orchestration/a2a/adapters/claude-code.adapter.js +0 -236
  199. package/dist-server/server/modules/orchestration/a2a/adapters/claude-code.adapter.js.map +0 -1
  200. package/dist-server/server/modules/orchestration/a2a/adapters/codex.adapter.js +0 -202
  201. package/dist-server/server/modules/orchestration/a2a/adapters/codex.adapter.js.map +0 -1
  202. package/dist-server/server/modules/orchestration/a2a/adapters/cursor.adapter.js +0 -205
  203. package/dist-server/server/modules/orchestration/a2a/adapters/cursor.adapter.js.map +0 -1
  204. package/dist-server/server/modules/orchestration/a2a/adapters/gemini.adapter.js +0 -205
  205. package/dist-server/server/modules/orchestration/a2a/adapters/gemini.adapter.js.map +0 -1
  206. package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.js +0 -84
  207. package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.js.map +0 -1
  208. package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.test.js +0 -43
  209. package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.test.js.map +0 -1
  210. package/dist-server/server/modules/orchestration/a2a/adapters/opencode.adapter.js +0 -205
  211. package/dist-server/server/modules/orchestration/a2a/adapters/opencode.adapter.js.map +0 -1
  212. package/dist-server/server/modules/orchestration/a2a/adapters/qwen.adapter.js +0 -205
  213. package/dist-server/server/modules/orchestration/a2a/adapters/qwen.adapter.js.map +0 -1
  214. package/dist-server/server/modules/orchestration/a2a/agent-card.js +0 -50
  215. package/dist-server/server/modules/orchestration/a2a/agent-card.js.map +0 -1
  216. package/dist-server/server/modules/orchestration/a2a/auth.middleware.js +0 -25
  217. package/dist-server/server/modules/orchestration/a2a/auth.middleware.js.map +0 -1
  218. package/dist-server/server/modules/orchestration/a2a/bus.js +0 -34
  219. package/dist-server/server/modules/orchestration/a2a/bus.js.map +0 -1
  220. package/dist-server/server/modules/orchestration/a2a/routes.js +0 -502
  221. package/dist-server/server/modules/orchestration/a2a/routes.js.map +0 -1
  222. package/dist-server/server/modules/orchestration/a2a/task-dispatcher.js +0 -295
  223. package/dist-server/server/modules/orchestration/a2a/task-dispatcher.js.map +0 -1
  224. package/dist-server/server/modules/orchestration/a2a/task-store.js +0 -144
  225. package/dist-server/server/modules/orchestration/a2a/task-store.js.map +0 -1
  226. package/dist-server/server/modules/orchestration/a2a/types.js +0 -6
  227. package/dist-server/server/modules/orchestration/a2a/types.js.map +0 -1
  228. package/dist-server/server/modules/orchestration/a2a/validator.js +0 -101
  229. package/dist-server/server/modules/orchestration/a2a/validator.js.map +0 -1
  230. package/dist-server/server/modules/orchestration/index.js +0 -27
  231. package/dist-server/server/modules/orchestration/index.js.map +0 -1
  232. package/dist-server/server/modules/orchestration/preview/port-watcher.js +0 -90
  233. package/dist-server/server/modules/orchestration/preview/port-watcher.js.map +0 -1
  234. package/dist-server/server/modules/orchestration/preview/preview-proxy.js +0 -58
  235. package/dist-server/server/modules/orchestration/preview/preview-proxy.js.map +0 -1
  236. package/dist-server/server/modules/orchestration/preview/types.js +0 -2
  237. package/dist-server/server/modules/orchestration/preview/types.js.map +0 -1
  238. package/dist-server/server/modules/orchestration/security/permission-policy.js.map +0 -1
  239. package/dist-server/server/modules/orchestration/tasks/orchestration-task-store.js +0 -34
  240. package/dist-server/server/modules/orchestration/tasks/orchestration-task-store.js.map +0 -1
  241. package/dist-server/server/modules/orchestration/tasks/orchestration-task.routes.js +0 -70
  242. package/dist-server/server/modules/orchestration/tasks/orchestration-task.routes.js.map +0 -1
  243. package/dist-server/server/modules/orchestration/tasks/orchestration-task.service.js +0 -181
  244. package/dist-server/server/modules/orchestration/tasks/orchestration-task.service.js.map +0 -1
  245. package/dist-server/server/modules/orchestration/tasks/orchestration-task.types.js +0 -2
  246. package/dist-server/server/modules/orchestration/tasks/orchestration-task.types.js.map +0 -1
  247. package/dist-server/server/modules/orchestration/tasks/task-run-graph.js +0 -100
  248. package/dist-server/server/modules/orchestration/tasks/task-run-graph.js.map +0 -1
  249. package/dist-server/server/modules/orchestration/workflows/approval-queue.js +0 -72
  250. package/dist-server/server/modules/orchestration/workflows/approval-queue.js.map +0 -1
  251. package/dist-server/server/modules/orchestration/workflows/built-in-workflows.js +0 -126
  252. package/dist-server/server/modules/orchestration/workflows/built-in-workflows.js.map +0 -1
  253. package/dist-server/server/modules/orchestration/workflows/context-packet.js +0 -89
  254. package/dist-server/server/modules/orchestration/workflows/context-packet.js.map +0 -1
  255. package/dist-server/server/modules/orchestration/workflows/handoff-artifact.js +0 -123
  256. package/dist-server/server/modules/orchestration/workflows/handoff-artifact.js.map +0 -1
  257. package/dist-server/server/modules/orchestration/workflows/workflow-fallback-policy.js +0 -114
  258. package/dist-server/server/modules/orchestration/workflows/workflow-fallback-policy.js.map +0 -1
  259. package/dist-server/server/modules/orchestration/workflows/workflow-replay.js +0 -177
  260. package/dist-server/server/modules/orchestration/workflows/workflow-replay.js.map +0 -1
  261. package/dist-server/server/modules/orchestration/workflows/workflow-runner.js +0 -1718
  262. package/dist-server/server/modules/orchestration/workflows/workflow-runner.js.map +0 -1
  263. package/dist-server/server/modules/orchestration/workflows/workflow-store.js +0 -76
  264. package/dist-server/server/modules/orchestration/workflows/workflow-store.js.map +0 -1
  265. package/dist-server/server/modules/orchestration/workflows/workflow-templates.js +0 -242
  266. package/dist-server/server/modules/orchestration/workflows/workflow-templates.js.map +0 -1
  267. package/dist-server/server/modules/orchestration/workflows/workflow-trace.js +0 -388
  268. package/dist-server/server/modules/orchestration/workflows/workflow-trace.js.map +0 -1
  269. package/dist-server/server/modules/orchestration/workflows/workflow.routes.js +0 -508
  270. package/dist-server/server/modules/orchestration/workflows/workflow.routes.js.map +0 -1
  271. package/dist-server/server/modules/orchestration/workflows/workflow.types.js +0 -2
  272. package/dist-server/server/modules/orchestration/workflows/workflow.types.js.map +0 -1
  273. package/dist-server/server/modules/orchestration/workflows/workspace-target.js +0 -100
  274. package/dist-server/server/modules/orchestration/workflows/workspace-target.js.map +0 -1
  275. package/dist-server/server/modules/orchestration/workspace/docker-workspace.js +0 -123
  276. package/dist-server/server/modules/orchestration/workspace/docker-workspace.js.map +0 -1
  277. package/dist-server/server/modules/orchestration/workspace/path-safety.js +0 -48
  278. package/dist-server/server/modules/orchestration/workspace/path-safety.js.map +0 -1
  279. package/dist-server/server/modules/orchestration/workspace/types.js +0 -11
  280. package/dist-server/server/modules/orchestration/workspace/types.js.map +0 -1
  281. package/dist-server/server/modules/orchestration/workspace/workspace-manager.js +0 -84
  282. package/dist-server/server/modules/orchestration/workspace/workspace-manager.js.map +0 -1
  283. package/dist-server/server/modules/orchestration/workspace/worktree-workspace.js +0 -97
  284. package/dist-server/server/modules/orchestration/workspace/worktree-workspace.js.map +0 -1
  285. package/server/modules/orchestration/a2a/adapter-registry.ts +0 -108
  286. package/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.ts +0 -63
  287. package/server/modules/orchestration/a2a/adapters/claude-code.adapter.ts +0 -286
  288. package/server/modules/orchestration/a2a/adapters/codex.adapter.ts +0 -244
  289. package/server/modules/orchestration/a2a/adapters/cursor.adapter.ts +0 -249
  290. package/server/modules/orchestration/a2a/adapters/gemini.adapter.ts +0 -248
  291. package/server/modules/orchestration/a2a/adapters/json-event.adapter.test.ts +0 -60
  292. package/server/modules/orchestration/a2a/adapters/json-event.adapter.ts +0 -101
  293. package/server/modules/orchestration/a2a/adapters/opencode.adapter.ts +0 -248
  294. package/server/modules/orchestration/a2a/adapters/qwen.adapter.ts +0 -248
  295. package/server/modules/orchestration/a2a/agent-card.ts +0 -55
  296. package/server/modules/orchestration/a2a/auth.middleware.ts +0 -29
  297. package/server/modules/orchestration/a2a/bus.ts +0 -46
  298. package/server/modules/orchestration/a2a/routes.ts +0 -586
  299. package/server/modules/orchestration/a2a/task-dispatcher.ts +0 -345
  300. package/server/modules/orchestration/a2a/task-store.ts +0 -178
  301. package/server/modules/orchestration/a2a/types.ts +0 -126
  302. package/server/modules/orchestration/a2a/validator.ts +0 -113
  303. package/server/modules/orchestration/index.ts +0 -99
  304. package/server/modules/orchestration/preview/port-watcher.ts +0 -112
  305. package/server/modules/orchestration/preview/preview-proxy.ts +0 -60
  306. package/server/modules/orchestration/preview/types.ts +0 -19
  307. package/server/modules/orchestration/tasks/orchestration-task-store.ts +0 -41
  308. package/server/modules/orchestration/tasks/orchestration-task.routes.ts +0 -81
  309. package/server/modules/orchestration/tasks/orchestration-task.service.ts +0 -201
  310. package/server/modules/orchestration/tasks/orchestration-task.types.ts +0 -40
  311. package/server/modules/orchestration/tasks/task-run-graph.ts +0 -155
  312. package/server/modules/orchestration/workflows/approval-queue.ts +0 -106
  313. package/server/modules/orchestration/workflows/built-in-workflows.ts +0 -127
  314. package/server/modules/orchestration/workflows/context-packet.ts +0 -186
  315. package/server/modules/orchestration/workflows/handoff-artifact.ts +0 -175
  316. package/server/modules/orchestration/workflows/workflow-fallback-policy.ts +0 -161
  317. package/server/modules/orchestration/workflows/workflow-replay.ts +0 -254
  318. package/server/modules/orchestration/workflows/workflow-runner.ts +0 -2062
  319. package/server/modules/orchestration/workflows/workflow-store.ts +0 -97
  320. package/server/modules/orchestration/workflows/workflow-templates.ts +0 -272
  321. package/server/modules/orchestration/workflows/workflow-trace.ts +0 -424
  322. package/server/modules/orchestration/workflows/workflow.routes.ts +0 -586
  323. package/server/modules/orchestration/workflows/workflow.types.ts +0 -111
  324. package/server/modules/orchestration/workflows/workspace-target.ts +0 -122
  325. package/server/modules/orchestration/workspace/docker-workspace.ts +0 -136
  326. package/server/modules/orchestration/workspace/path-safety.ts +0 -55
  327. package/server/modules/orchestration/workspace/types.ts +0 -52
  328. package/server/modules/orchestration/workspace/workspace-manager.ts +0 -102
  329. package/server/modules/orchestration/workspace/worktree-workspace.ts +0 -126
  330. /package/dist-server/server/modules/{orchestration/security → security}/permission-policy.js +0 -0
  331. /package/server/modules/{orchestration/security → security}/permission-policy.ts +0 -0
@@ -1,586 +0,0 @@
1
- import type { Router } from 'express';
2
- import express from 'express';
3
-
4
- import { workflowRunner } from '@/modules/orchestration/workflows/workflow-runner.js';
5
- import {
6
- type WorkflowReplayScope,
7
- buildWorkflowReplayPlan,
8
- } from '@/modules/orchestration/workflows/workflow-replay.js';
9
- import {
10
- applyWorkflowTemplateToMetadata,
11
- builtInWorkflowTemplates,
12
- getWorkflowTemplate,
13
- } from '@/modules/orchestration/workflows/workflow-templates.js';
14
- import { workflowStore } from '@/modules/orchestration/workflows/workflow-store.js';
15
- import { buildWorkflowTrace } from '@/modules/orchestration/workflows/workflow-trace.js';
16
- import { findPixcodeAppRoot } from '@/modules/orchestration/workflows/workspace-target.js';
17
- import {
18
- listPendingApprovals,
19
- resolvePermissionApproval,
20
- type ApprovalDecisionSource,
21
- } from '@/modules/orchestration/workflows/approval-queue.js';
22
- import {
23
- DEFAULT_PERMISSION_POLICY,
24
- PERMISSION_CAPABILITIES,
25
- PERMISSION_POLICY_MODES,
26
- PIXCODE_PERMISSION_POLICY_PROTOCOL,
27
- evaluatePermissionRequest,
28
- normalizePermissionPolicy,
29
- } from '@/modules/orchestration/security/permission-policy.js';
30
- import { dispatchWebhookEvent } from '@/services/webhooks.js';
31
-
32
- const TERMINAL_RUN_STATES = new Set(['completed', 'failed', 'canceled']);
33
-
34
- function isWindowsLikeProjectId(projectId: string): boolean {
35
- return /^[A-Za-z]--/.test(projectId) || /^[A-Za-z]:[\\/]/.test(projectId);
36
- }
37
-
38
- function normalizeProjectId(projectId: string): string {
39
- return projectId.trim().replace(/\\/g, '/').toLowerCase();
40
- }
41
-
42
- function projectIdsMatch(storedProjectId: unknown, requestedProjectId: string): boolean {
43
- if (typeof storedProjectId !== 'string') return false;
44
- if (storedProjectId === requestedProjectId) return true;
45
-
46
- if (!isWindowsLikeProjectId(storedProjectId) && !isWindowsLikeProjectId(requestedProjectId)) {
47
- return false;
48
- }
49
-
50
- return normalizeProjectId(storedProjectId) === normalizeProjectId(requestedProjectId);
51
- }
52
-
53
- function readLimit(value: unknown): number | undefined {
54
- if (typeof value !== 'string') return undefined;
55
- const parsed = Number.parseInt(value, 10);
56
- if (!Number.isFinite(parsed) || parsed <= 0) return undefined;
57
- return Math.min(parsed, 100);
58
- }
59
-
60
- function readMetadata(body: unknown): Record<string, unknown> | undefined {
61
- if (!body || typeof body !== 'object') return undefined;
62
- const metadata = (body as Record<string, unknown>).metadata;
63
- return metadata && typeof metadata === 'object' ? metadata as Record<string, unknown> : undefined;
64
- }
65
-
66
- function readRequestUserId(req: express.Request): string | number | null {
67
- const user = (req as express.Request & { user?: { id?: string | number; userId?: string | number } }).user;
68
- return user?.id ?? user?.userId ?? null;
69
- }
70
-
71
- function readReplayScope(value: unknown): WorkflowReplayScope {
72
- return value === 'run' ? 'run' : 'node';
73
- }
74
-
75
- function readOptionalString(value: unknown): string | undefined {
76
- return typeof value === 'string' && value.trim() ? value.trim() : undefined;
77
- }
78
-
79
- function readBooleanFlag(value: unknown): boolean {
80
- return value === true || value === 'true' || value === '1';
81
- }
82
-
83
- function replayOptions(req: express.Request): {
84
- scope: WorkflowReplayScope;
85
- fromNodeId?: string;
86
- approveReplay: boolean;
87
- } {
88
- return {
89
- scope: readReplayScope(req.body?.scope ?? req.query.scope),
90
- fromNodeId: readOptionalString(req.body?.fromNodeId ?? req.query.fromNodeId),
91
- approveReplay: readBooleanFlag(req.body?.approveReplay ?? req.query.approveReplay),
92
- };
93
- }
94
-
95
- function readRunArray(run: { metadata?: Record<string, unknown> }, key: string): Array<Record<string, unknown>> {
96
- const value = run.metadata?.[key];
97
- return Array.isArray(value)
98
- ? value.filter((item): item is Record<string, unknown> => Boolean(item && typeof item === 'object'))
99
- : [];
100
- }
101
-
102
- function updateApproval(
103
- run: { metadata?: Record<string, unknown> },
104
- requestId: string,
105
- patch: Record<string, unknown>,
106
- ): boolean {
107
- const approvals = readRunArray(run, 'pendingPermissionApprovals');
108
- let changed = false;
109
- const nextApprovals = approvals.map((approval) => {
110
- if (approval.id !== requestId) return approval;
111
- changed = true;
112
- return {
113
- ...approval,
114
- ...patch,
115
- };
116
- });
117
- if (!changed) return false;
118
- run.metadata = {
119
- ...run.metadata,
120
- pendingPermissionApprovals: nextApprovals,
121
- };
122
- return true;
123
- }
124
-
125
- function sendRunSnapshot(res: express.Response, runId: string): boolean {
126
- const run = workflowStore.getRun(runId);
127
- if (!run) {
128
- res.write(`event: error\ndata: ${JSON.stringify({ error: { code: 'RUN_NOT_FOUND', message: runId } })}\n\n`);
129
- return true;
130
- }
131
-
132
- res.write(`event: snapshot\ndata: ${JSON.stringify({ run })}\n\n`);
133
- return TERMINAL_RUN_STATES.has(run.status);
134
- }
135
-
136
- export function createWorkflowRouter(): Router {
137
- const router = express.Router();
138
- router.use(express.json({ limit: '2mb' }));
139
-
140
- router.get('/workflows', (_req, res) => {
141
- res.json({ workflows: workflowStore.listWorkflows() });
142
- });
143
-
144
- router.get('/workflows/templates', (_req, res) => {
145
- res.json({
146
- templates: builtInWorkflowTemplates,
147
- });
148
- });
149
-
150
- router.get('/workflows/context', (_req, res) => {
151
- res.json({
152
- appRoot: findPixcodeAppRoot(),
153
- defaultWorkspaceTarget: 'selected_project',
154
- supportedWorkspaceTargets: ['selected_project', 'pixcode_app', 'custom'],
155
- });
156
- });
157
-
158
- router.get('/workflows/runs', (req, res) => {
159
- const projectId = typeof req.query.projectId === 'string' ? req.query.projectId : undefined;
160
- const limit = readLimit(req.query.limit);
161
- const runs = projectId
162
- ? workflowStore.listRuns().filter((run) => projectIdsMatch(run.metadata?.projectId, projectId))
163
- : workflowStore.listRuns();
164
- res.json({ runs: limit ? runs.slice(0, limit) : runs });
165
- });
166
-
167
- router.get('/workflows/runs/:runId/events', (req, res) => {
168
- res.setHeader('Content-Type', 'text/event-stream');
169
- res.setHeader('Cache-Control', 'no-cache, no-transform');
170
- res.setHeader('Connection', 'keep-alive');
171
- res.setHeader('X-Accel-Buffering', 'no');
172
- if (typeof res.flushHeaders === 'function') {
173
- res.flushHeaders();
174
- }
175
- if (res.socket && typeof res.socket.setNoDelay === 'function') {
176
- try {
177
- res.socket.setNoDelay(true);
178
- } catch {
179
- // Non-fatal; SSE still works without disabling Nagle.
180
- }
181
- }
182
-
183
- const terminal = sendRunSnapshot(res, req.params.runId);
184
- if (terminal) {
185
- res.end();
186
- return;
187
- }
188
-
189
- const heartbeat = setInterval(() => {
190
- res.write(': ping\n\n');
191
- }, 15_000);
192
- const timer = setInterval(() => {
193
- const done = sendRunSnapshot(res, req.params.runId);
194
- if (done) {
195
- clearInterval(timer);
196
- clearInterval(heartbeat);
197
- res.end();
198
- }
199
- }, 1_000);
200
-
201
- req.on('close', () => {
202
- clearInterval(timer);
203
- clearInterval(heartbeat);
204
- });
205
- });
206
-
207
- router.get('/workflows/runs/:runId/trace', (req, res) => {
208
- const run = workflowStore.getRun(req.params.runId);
209
- if (!run) {
210
- res.status(404).json({ error: { code: 'RUN_NOT_FOUND', message: req.params.runId } });
211
- return;
212
- }
213
-
214
- res.json({
215
- runId: run.id,
216
- trace: buildWorkflowTrace(run),
217
- });
218
- });
219
-
220
- router.get('/workflows/permission-policy', (_req, res) => {
221
- res.json({
222
- protocol: PIXCODE_PERMISSION_POLICY_PROTOCOL,
223
- capabilities: PERMISSION_CAPABILITIES,
224
- modes: PERMISSION_POLICY_MODES,
225
- defaultPolicy: DEFAULT_PERMISSION_POLICY,
226
- });
227
- });
228
-
229
- router.post('/workflows/permission-policy/evaluate', (req, res) => {
230
- try {
231
- res.json({
232
- decision: evaluatePermissionRequest({
233
- policy: normalizePermissionPolicy(req.body?.policy),
234
- request: req.body?.request ?? { source: 'api' },
235
- }),
236
- });
237
- } catch (error) {
238
- res.status(400).json({
239
- error: {
240
- code: 'PERMISSION_POLICY_INVALID',
241
- message: error instanceof Error ? error.message : String(error),
242
- },
243
- });
244
- }
245
- });
246
-
247
- router.get('/workflows/runs/:runId/permission-approvals', (req, res) => {
248
- const run = workflowStore.getRun(req.params.runId);
249
- if (!run) {
250
- res.status(404).json({ error: { code: 'RUN_NOT_FOUND', message: req.params.runId } });
251
- return;
252
- }
253
-
254
- res.json({
255
- runId: run.id,
256
- pendingApprovals: readRunArray(run, 'pendingPermissionApprovals')
257
- .filter((approval) => approval.status === 'pending'),
258
- approvalHistory: readRunArray(run, 'pendingPermissionApprovals')
259
- .filter((approval) => approval.status !== 'pending'),
260
- });
261
- });
262
-
263
- router.get('/workflows/approvals', (req, res) => {
264
- res.json({
265
- pendingApprovals: listPendingApprovals({
266
- projectId: readOptionalString(req.query.projectId),
267
- includeResolved: readBooleanFlag(req.query.includeResolved),
268
- }),
269
- });
270
- });
271
-
272
- router.post('/workflows/approvals/:approvalId', (req, res) => {
273
- const allow = req.body?.allow === true;
274
- const deny = req.body?.allow === false;
275
- if (!allow && !deny) {
276
- res.status(400).json({
277
- error: {
278
- code: 'PERMISSION_DECISION_REQUIRED',
279
- message: 'Approval queue decisions require allow=true or allow=false.',
280
- },
281
- });
282
- return;
283
- }
284
-
285
- const source = ['ui', 'telegram', 'api'].includes(req.body?.source)
286
- ? req.body.source as ApprovalDecisionSource
287
- : 'api';
288
- const result = resolvePermissionApproval({
289
- approvalId: req.params.approvalId,
290
- allow,
291
- source,
292
- resolvedBy: readRequestUserId(req),
293
- message: readOptionalString(req.body?.message),
294
- });
295
- if (!result) {
296
- res.status(404).json({ error: { code: 'APPROVAL_NOT_FOUND', message: req.params.approvalId } });
297
- return;
298
- }
299
-
300
- dispatchWebhookEvent({
301
- type: 'approval.resolved',
302
- payload: {
303
- approvalId: req.params.approvalId,
304
- allow,
305
- source,
306
- runId: result.runId,
307
- },
308
- });
309
- res.json(result);
310
- });
311
-
312
- router.post('/workflows/runs/:runId/permission-approvals/:requestId', (req, res) => {
313
- const run = workflowStore.getRun(req.params.runId);
314
- if (!run) {
315
- res.status(404).json({ error: { code: 'RUN_NOT_FOUND', message: req.params.runId } });
316
- return;
317
- }
318
-
319
- const allow = req.body?.allow === true;
320
- const deny = req.body?.allow === false;
321
- if (!allow && !deny) {
322
- res.status(400).json({
323
- error: {
324
- code: 'PERMISSION_DECISION_REQUIRED',
325
- message: 'Permission approval requires allow=true or allow=false.',
326
- },
327
- });
328
- return;
329
- }
330
-
331
- const updated = updateApproval(run, req.params.requestId, {
332
- status: allow ? 'allowed' : 'denied',
333
- resolvedAt: Date.now(),
334
- resolvedBy: readRequestUserId(req),
335
- resolutionMessage: readOptionalString(req.body?.message),
336
- });
337
- if (!updated) {
338
- res.status(404).json({ error: { code: 'APPROVAL_NOT_FOUND', message: req.params.requestId } });
339
- return;
340
- }
341
-
342
- workflowStore.setRun(run);
343
- dispatchWebhookEvent({
344
- type: 'approval.resolved',
345
- payload: {
346
- approvalId: req.params.requestId,
347
- allow,
348
- source: 'ui',
349
- runId: run.id,
350
- },
351
- });
352
- res.json({
353
- runId: run.id,
354
- pendingApprovals: readRunArray(run, 'pendingPermissionApprovals')
355
- .filter((approval) => approval.status === 'pending'),
356
- approvalHistory: readRunArray(run, 'pendingPermissionApprovals')
357
- .filter((approval) => approval.status !== 'pending'),
358
- });
359
- });
360
-
361
- router.get('/workflows/runs/:runId/replay-plan', (req, res) => {
362
- const run = workflowStore.getRun(req.params.runId);
363
- if (!run) {
364
- res.status(404).json({ error: { code: 'RUN_NOT_FOUND', message: req.params.runId } });
365
- return;
366
- }
367
-
368
- try {
369
- const options = replayOptions(req);
370
- res.json({
371
- replayPlan: buildWorkflowReplayPlan(run, {
372
- scope: options.scope,
373
- fromNodeId: options.fromNodeId,
374
- }),
375
- });
376
- } catch (error) {
377
- res.status(400).json({
378
- error: {
379
- code: 'REPLAY_PLAN_INVALID',
380
- message: error instanceof Error ? error.message : String(error),
381
- },
382
- });
383
- }
384
- });
385
-
386
- router.post('/workflows/runs/:runId/replay', (req, res) => {
387
- const run = workflowStore.getRun(req.params.runId);
388
- if (!run) {
389
- res.status(404).json({ error: { code: 'RUN_NOT_FOUND', message: req.params.runId } });
390
- return;
391
- }
392
-
393
- try {
394
- const options = replayOptions(req);
395
- const replayPlan = buildWorkflowReplayPlan(run, {
396
- scope: options.scope,
397
- fromNodeId: options.fromNodeId,
398
- });
399
-
400
- if (replayPlan.requiresApproval && !options.approveReplay) {
401
- res.status(409).json({
402
- error: {
403
- code: 'REPLAY_APPROVAL_REQUIRED',
404
- message: 'Replay requires explicit approval because prior shell, network, or file-write activity was detected.',
405
- },
406
- replayPlan,
407
- });
408
- return;
409
- }
410
-
411
- const replayRun = workflowRunner.start(
412
- replayPlan.workflow,
413
- replayPlan.input,
414
- {
415
- ...replayPlan.metadata,
416
- userId: readRequestUserId(req) ?? run.metadata?.userId,
417
- replay: {
418
- ...(replayPlan.metadata.replay && typeof replayPlan.metadata.replay === 'object'
419
- ? replayPlan.metadata.replay as Record<string, unknown>
420
- : {}),
421
- approved: options.approveReplay,
422
- approvedAt: options.approveReplay ? Date.now() : undefined,
423
- },
424
- },
425
- );
426
- dispatchWebhookEvent({
427
- type: 'run.started',
428
- payload: {
429
- runId: replayRun.id,
430
- workflowId: replayRun.workflowId,
431
- replayOf: run.id,
432
- },
433
- });
434
- res.status(202).json({
435
- run: replayRun,
436
- replayPlan,
437
- });
438
- } catch (error) {
439
- res.status(400).json({
440
- error: {
441
- code: 'REPLAY_START_FAILED',
442
- message: error instanceof Error ? error.message : String(error),
443
- },
444
- });
445
- }
446
- });
447
-
448
- router.get('/workflows/runs/:runId', (req, res) => {
449
- const run = workflowStore.getRun(req.params.runId);
450
- if (!run) {
451
- res.status(404).json({ error: { code: 'RUN_NOT_FOUND', message: req.params.runId } });
452
- return;
453
- }
454
- res.json(run);
455
- });
456
-
457
- router.post('/workflows/:id/preview', (req, res) => {
458
- const workflow = workflowStore.getWorkflow(req.params.id);
459
- if (!workflow) {
460
- res.status(404).json({ error: { code: 'WORKFLOW_NOT_FOUND', message: req.params.id } });
461
- return;
462
- }
463
- try {
464
- const runtimeWorkflow = workflowRunner.preview(workflow, readMetadata(req.body));
465
- res.json({
466
- workflow: runtimeWorkflow,
467
- nodeCount: runtimeWorkflow.nodes.length,
468
- nodes: runtimeWorkflow.nodes.map((node) => ({
469
- id: node.id,
470
- adapterId: node.adapterId,
471
- agentInstanceId: node.agentInstanceId,
472
- agentLabel: node.agentLabel,
473
- assignment: node.assignment,
474
- stage: node.stage,
475
- inputs: node.inputs,
476
- onFail: node.onFail,
477
- output: node.output,
478
- model: node.model,
479
- permissionMode: node.permissionMode,
480
- timeoutMs: node.timeoutMs,
481
- })),
482
- });
483
- } catch (error) {
484
- res.status(400).json({
485
- error: {
486
- code: 'WORKFLOW_INVALID',
487
- message: error instanceof Error ? error.message : String(error),
488
- },
489
- });
490
- }
491
- });
492
-
493
- router.post('/workflows/runs/:runId/cancel', async (req, res) => {
494
- const run = await workflowRunner.cancel(req.params.runId);
495
- if (!run) {
496
- res.status(404).json({ error: { code: 'RUN_NOT_FOUND', message: req.params.runId } });
497
- return;
498
- }
499
- dispatchWebhookEvent({
500
- type: 'run.canceled',
501
- payload: {
502
- runId: run.id,
503
- workflowId: run.workflowId,
504
- },
505
- });
506
- res.json(run);
507
- });
508
-
509
- router.post('/workflows/:id/runs', (req, res) => {
510
- const workflow = workflowStore.getWorkflow(req.params.id);
511
- if (!workflow) {
512
- res.status(404).json({ error: { code: 'WORKFLOW_NOT_FOUND', message: req.params.id } });
513
- return;
514
- }
515
- try {
516
- const run = workflowRunner.start(
517
- workflow,
518
- typeof req.body?.input === 'string' ? req.body.input : '',
519
- {
520
- ...readMetadata(req.body),
521
- userId: readRequestUserId(req),
522
- workflowName: workflow.name,
523
- },
524
- );
525
- dispatchWebhookEvent({
526
- type: 'run.started',
527
- payload: {
528
- runId: run.id,
529
- workflowId: run.workflowId,
530
- workflowName: workflow.name,
531
- },
532
- });
533
- res.status(202).json(run);
534
- } catch (error) {
535
- res.status(400).json({
536
- error: {
537
- code: 'WORKFLOW_INVALID',
538
- message: error instanceof Error ? error.message : String(error),
539
- },
540
- });
541
- }
542
- });
543
-
544
- router.post('/workflows/templates/:templateId/runs', (req, res) => {
545
- const template = getWorkflowTemplate(req.params.templateId);
546
- if (!template) {
547
- res.status(404).json({ error: { code: 'WORKFLOW_TEMPLATE_NOT_FOUND', message: req.params.templateId } });
548
- return;
549
- }
550
- const workflow = workflowStore.getWorkflow(template.workflowId);
551
- if (!workflow) {
552
- res.status(404).json({ error: { code: 'WORKFLOW_NOT_FOUND', message: template.workflowId } });
553
- return;
554
- }
555
-
556
- try {
557
- const run = workflowRunner.start(
558
- workflow,
559
- typeof req.body?.input === 'string' ? req.body.input : '',
560
- {
561
- ...applyWorkflowTemplateToMetadata(template, readMetadata(req.body)),
562
- userId: readRequestUserId(req),
563
- workflowName: workflow.name,
564
- },
565
- );
566
- dispatchWebhookEvent({
567
- type: 'run.started',
568
- payload: {
569
- runId: run.id,
570
- workflowId: run.workflowId,
571
- templateId: template.id,
572
- },
573
- });
574
- res.status(202).json(run);
575
- } catch (error) {
576
- res.status(400).json({
577
- error: {
578
- code: 'WORKFLOW_TEMPLATE_START_FAILED',
579
- message: error instanceof Error ? error.message : String(error),
580
- },
581
- });
582
- }
583
- });
584
-
585
- return router;
586
- }
@@ -1,111 +0,0 @@
1
- import type { WorkflowContextPacket } from '@/modules/orchestration/workflows/context-packet.js';
2
- import type { WorkflowFallbackTrigger } from '@/modules/orchestration/workflows/workflow-fallback-policy.js';
3
- import type { WorkflowHandoffArtifact } from '@/modules/orchestration/workflows/handoff-artifact.js';
4
- import type {
5
- PermissionDecision,
6
- PermissionPolicy,
7
- } from '@/modules/orchestration/security/permission-policy.js';
8
-
9
- export type WorkflowRunStatus = 'queued' | 'running' | 'completed' | 'failed' | 'canceled';
10
- export type WorkflowNodeStatus = WorkflowRunStatus | 'skipped';
11
-
12
- export interface WorkflowNode {
13
- id: string;
14
- adapterId: string;
15
- prompt: string;
16
- inputs: string[];
17
- output: 'message' | 'artifact' | 'both';
18
- onFail: 'abort' | 'continue' | 'retry';
19
- stage?: string;
20
- agentInstanceId?: string;
21
- agentLabel?: string;
22
- assignment?: string;
23
- model?: string;
24
- permissionMode?: string;
25
- permissionPolicy?: PermissionPolicy;
26
- permissionDecisions?: PermissionDecision[];
27
- toolsSettings?: Record<string, unknown>;
28
- isolation?: 'host' | 'worktree' | 'docker';
29
- timeoutMs?: number;
30
- internal?: boolean;
31
- fallbackTrigger?: WorkflowFallbackTrigger;
32
- fallbackSourceNodeId?: string;
33
- }
34
-
35
- export interface Workflow {
36
- id: string;
37
- name: string;
38
- description?: string;
39
- trigger: 'manual' | 'on-task-create' | 'on-pr-open';
40
- nodes: WorkflowNode[];
41
- isBuiltin?: boolean;
42
- }
43
-
44
- export interface WorkflowNodeRun {
45
- nodeId: string;
46
- adapterId?: string;
47
- agentInstanceId?: string;
48
- agentLabel?: string;
49
- assignment?: string;
50
- promptPreview?: string;
51
- model?: string;
52
- permissionMode?: string;
53
- permissionPolicy?: PermissionPolicy;
54
- permissionDecisions?: PermissionDecision[];
55
- timeoutMs?: number;
56
- stage?: string;
57
- internal?: boolean;
58
- fallbackTrigger?: WorkflowFallbackTrigger;
59
- fallbackSourceNodeId?: string;
60
- status: WorkflowNodeStatus;
61
- a2aTaskId?: string;
62
- startedAt?: number;
63
- finishedAt?: number;
64
- error?: string;
65
- outputText?: string;
66
- contextPacket?: WorkflowContextPacket;
67
- handoffArtifact?: WorkflowHandoffArtifact;
68
- messages?: Array<{
69
- role: string;
70
- text: string;
71
- createdAt?: number;
72
- }>;
73
- artifacts?: Array<{
74
- type: string;
75
- text?: string;
76
- data?: Record<string, unknown>;
77
- metadata?: Record<string, unknown>;
78
- }>;
79
- }
80
-
81
- export interface WorkflowRun {
82
- id: string;
83
- workflowId: string;
84
- contextId: string;
85
- status: WorkflowRunStatus;
86
- nodeRuns: WorkflowNodeRun[];
87
- input?: string;
88
- startedAt: number;
89
- finishedAt?: number;
90
- metadata?: Record<string, unknown>;
91
- }
92
-
93
- export interface WorkflowTraceEvent {
94
- id: string;
95
- type: 'run' | 'node' | 'provider' | 'message' | 'artifact' | 'file' | 'error' | 'permission_policy';
96
- severity: 'info' | 'warning' | 'error';
97
- status: WorkflowRunStatus | WorkflowNodeStatus | 'submitted';
98
- timestamp: number;
99
- durationMs?: number;
100
- actor: string;
101
- title: string;
102
- titleKey?: string;
103
- summary?: string;
104
- detail?: string;
105
- nodeId?: string;
106
- adapterId?: string;
107
- agentInstanceId?: string;
108
- agentLabel?: string;
109
- model?: string;
110
- metadata?: Record<string, unknown>;
111
- }