@pixelbyte-software/pixcode 1.33.11 → 1.35.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 (164) hide show
  1. package/dist/api-docs.html +162 -9
  2. package/dist/assets/index-B8w57E1r.css +32 -0
  3. package/dist/assets/index-Djuh0wHV.js +854 -0
  4. package/dist/favicon.svg +8 -8
  5. package/dist/icons/icon-128x128.svg +9 -9
  6. package/dist/icons/icon-144x144.svg +9 -9
  7. package/dist/icons/icon-152x152.svg +9 -9
  8. package/dist/icons/icon-192x192.svg +9 -9
  9. package/dist/icons/icon-384x384.svg +9 -9
  10. package/dist/icons/icon-512x512.svg +9 -9
  11. package/dist/icons/icon-72x72.svg +9 -9
  12. package/dist/icons/icon-96x96.svg +9 -9
  13. package/dist/icons/icon-template.svg +9 -9
  14. package/dist/index.html +2 -2
  15. package/dist/logo.svg +12 -12
  16. package/dist/openapi.yaml +383 -1
  17. package/dist-server/server/claude-sdk.js +38 -7
  18. package/dist-server/server/claude-sdk.js.map +1 -1
  19. package/dist-server/server/cli.js +12 -17
  20. package/dist-server/server/cli.js.map +1 -1
  21. package/dist-server/server/daemon-manager.js +98 -51
  22. package/dist-server/server/daemon-manager.js.map +1 -1
  23. package/dist-server/server/database/json-store.js +8 -5
  24. package/dist-server/server/database/json-store.js.map +1 -1
  25. package/dist-server/server/index.js +34 -9
  26. package/dist-server/server/index.js.map +1 -1
  27. package/dist-server/server/modules/orchestration/a2a/adapter-registry.js +73 -0
  28. package/dist-server/server/modules/orchestration/a2a/adapter-registry.js.map +1 -0
  29. package/dist-server/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.js +17 -0
  30. package/dist-server/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.js.map +1 -0
  31. package/dist-server/server/modules/orchestration/a2a/adapters/claude-code.adapter.js +234 -0
  32. package/dist-server/server/modules/orchestration/a2a/adapters/claude-code.adapter.js.map +1 -0
  33. package/dist-server/server/modules/orchestration/a2a/adapters/codex.adapter.js +202 -0
  34. package/dist-server/server/modules/orchestration/a2a/adapters/codex.adapter.js.map +1 -0
  35. package/dist-server/server/modules/orchestration/a2a/adapters/cursor.adapter.js +205 -0
  36. package/dist-server/server/modules/orchestration/a2a/adapters/cursor.adapter.js.map +1 -0
  37. package/dist-server/server/modules/orchestration/a2a/adapters/gemini.adapter.js +205 -0
  38. package/dist-server/server/modules/orchestration/a2a/adapters/gemini.adapter.js.map +1 -0
  39. package/dist-server/server/modules/orchestration/a2a/adapters/opencode.adapter.js +205 -0
  40. package/dist-server/server/modules/orchestration/a2a/adapters/opencode.adapter.js.map +1 -0
  41. package/dist-server/server/modules/orchestration/a2a/adapters/qwen.adapter.js +205 -0
  42. package/dist-server/server/modules/orchestration/a2a/adapters/qwen.adapter.js.map +1 -0
  43. package/dist-server/server/modules/orchestration/a2a/agent-card.js +50 -0
  44. package/dist-server/server/modules/orchestration/a2a/agent-card.js.map +1 -0
  45. package/dist-server/server/modules/orchestration/a2a/auth.middleware.js +25 -0
  46. package/dist-server/server/modules/orchestration/a2a/auth.middleware.js.map +1 -0
  47. package/dist-server/server/modules/orchestration/a2a/bus.js +34 -0
  48. package/dist-server/server/modules/orchestration/a2a/bus.js.map +1 -0
  49. package/dist-server/server/modules/orchestration/a2a/routes.js +497 -0
  50. package/dist-server/server/modules/orchestration/a2a/routes.js.map +1 -0
  51. package/dist-server/server/modules/orchestration/a2a/task-store.js +144 -0
  52. package/dist-server/server/modules/orchestration/a2a/task-store.js.map +1 -0
  53. package/dist-server/server/modules/orchestration/a2a/types.js +6 -0
  54. package/dist-server/server/modules/orchestration/a2a/types.js.map +1 -0
  55. package/dist-server/server/modules/orchestration/a2a/validator.js +101 -0
  56. package/dist-server/server/modules/orchestration/a2a/validator.js.map +1 -0
  57. package/dist-server/server/modules/orchestration/index.js +24 -0
  58. package/dist-server/server/modules/orchestration/index.js.map +1 -0
  59. package/dist-server/server/modules/orchestration/preview/port-watcher.js +90 -0
  60. package/dist-server/server/modules/orchestration/preview/port-watcher.js.map +1 -0
  61. package/dist-server/server/modules/orchestration/preview/preview-proxy.js +58 -0
  62. package/dist-server/server/modules/orchestration/preview/preview-proxy.js.map +1 -0
  63. package/dist-server/server/modules/orchestration/preview/types.js +2 -0
  64. package/dist-server/server/modules/orchestration/preview/types.js.map +1 -0
  65. package/dist-server/server/modules/orchestration/tasks/orchestration-task-store.js +37 -0
  66. package/dist-server/server/modules/orchestration/tasks/orchestration-task-store.js.map +1 -0
  67. package/dist-server/server/modules/orchestration/tasks/orchestration-task.routes.js +68 -0
  68. package/dist-server/server/modules/orchestration/tasks/orchestration-task.routes.js.map +1 -0
  69. package/dist-server/server/modules/orchestration/tasks/orchestration-task.service.js +128 -0
  70. package/dist-server/server/modules/orchestration/tasks/orchestration-task.service.js.map +1 -0
  71. package/dist-server/server/modules/orchestration/tasks/orchestration-task.types.js +2 -0
  72. package/dist-server/server/modules/orchestration/tasks/orchestration-task.types.js.map +1 -0
  73. package/dist-server/server/modules/orchestration/workflows/built-in-workflows.js +126 -0
  74. package/dist-server/server/modules/orchestration/workflows/built-in-workflows.js.map +1 -0
  75. package/dist-server/server/modules/orchestration/workflows/workflow-runner.js +1047 -0
  76. package/dist-server/server/modules/orchestration/workflows/workflow-runner.js.map +1 -0
  77. package/dist-server/server/modules/orchestration/workflows/workflow-store.js +76 -0
  78. package/dist-server/server/modules/orchestration/workflows/workflow-store.js.map +1 -0
  79. package/dist-server/server/modules/orchestration/workflows/workflow.routes.js +151 -0
  80. package/dist-server/server/modules/orchestration/workflows/workflow.routes.js.map +1 -0
  81. package/dist-server/server/modules/orchestration/workflows/workflow.types.js +2 -0
  82. package/dist-server/server/modules/orchestration/workflows/workflow.types.js.map +1 -0
  83. package/dist-server/server/modules/orchestration/workflows/workspace-target.js +98 -0
  84. package/dist-server/server/modules/orchestration/workflows/workspace-target.js.map +1 -0
  85. package/dist-server/server/modules/orchestration/workspace/docker-workspace.js +122 -0
  86. package/dist-server/server/modules/orchestration/workspace/docker-workspace.js.map +1 -0
  87. package/dist-server/server/modules/orchestration/workspace/path-safety.js +48 -0
  88. package/dist-server/server/modules/orchestration/workspace/path-safety.js.map +1 -0
  89. package/dist-server/server/modules/orchestration/workspace/types.js +11 -0
  90. package/dist-server/server/modules/orchestration/workspace/types.js.map +1 -0
  91. package/dist-server/server/modules/orchestration/workspace/workspace-manager.js +80 -0
  92. package/dist-server/server/modules/orchestration/workspace/workspace-manager.js.map +1 -0
  93. package/dist-server/server/modules/orchestration/workspace/worktree-workspace.js +96 -0
  94. package/dist-server/server/modules/orchestration/workspace/worktree-workspace.js.map +1 -0
  95. package/dist-server/server/modules/providers/index.js +3 -0
  96. package/dist-server/server/modules/providers/index.js.map +1 -0
  97. package/dist-server/server/openai-codex.js +35 -4
  98. package/dist-server/server/openai-codex.js.map +1 -1
  99. package/dist-server/server/routes/taskmaster.js +106 -89
  100. package/dist-server/server/routes/taskmaster.js.map +1 -1
  101. package/package.json +3 -1
  102. package/scripts/smoke/a2a-roundtrip.mjs +167 -0
  103. package/scripts/smoke/orchestration-api.mjs +172 -0
  104. package/scripts/smoke/orchestration-live-run.mjs +176 -0
  105. package/server/claude-sdk.js +48 -7
  106. package/server/cli.js +12 -17
  107. package/server/daemon-manager.js +90 -51
  108. package/server/database/db.js +794 -794
  109. package/server/database/json-store.js +8 -5
  110. package/server/index.js +49 -9
  111. package/server/modules/orchestration/a2a/adapter-registry.ts +108 -0
  112. package/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.ts +55 -0
  113. package/server/modules/orchestration/a2a/adapters/claude-code.adapter.ts +284 -0
  114. package/server/modules/orchestration/a2a/adapters/codex.adapter.ts +244 -0
  115. package/server/modules/orchestration/a2a/adapters/cursor.adapter.ts +249 -0
  116. package/server/modules/orchestration/a2a/adapters/gemini.adapter.ts +248 -0
  117. package/server/modules/orchestration/a2a/adapters/opencode.adapter.ts +248 -0
  118. package/server/modules/orchestration/a2a/adapters/qwen.adapter.ts +248 -0
  119. package/server/modules/orchestration/a2a/agent-card.ts +55 -0
  120. package/server/modules/orchestration/a2a/auth.middleware.ts +29 -0
  121. package/server/modules/orchestration/a2a/bus.ts +46 -0
  122. package/server/modules/orchestration/a2a/routes.ts +577 -0
  123. package/server/modules/orchestration/a2a/task-store.ts +178 -0
  124. package/server/modules/orchestration/a2a/types.ts +125 -0
  125. package/server/modules/orchestration/a2a/validator.ts +113 -0
  126. package/server/modules/orchestration/index.ts +66 -0
  127. package/server/modules/orchestration/preview/port-watcher.ts +112 -0
  128. package/server/modules/orchestration/preview/preview-proxy.ts +60 -0
  129. package/server/modules/orchestration/preview/types.ts +19 -0
  130. package/server/modules/orchestration/tasks/orchestration-task-store.ts +45 -0
  131. package/server/modules/orchestration/tasks/orchestration-task.routes.ts +73 -0
  132. package/server/modules/orchestration/tasks/orchestration-task.service.ts +145 -0
  133. package/server/modules/orchestration/tasks/orchestration-task.types.ts +29 -0
  134. package/server/modules/orchestration/workflows/built-in-workflows.ts +127 -0
  135. package/server/modules/orchestration/workflows/workflow-runner.ts +1206 -0
  136. package/server/modules/orchestration/workflows/workflow-store.ts +97 -0
  137. package/server/modules/orchestration/workflows/workflow.routes.ts +169 -0
  138. package/server/modules/orchestration/workflows/workflow.types.ts +70 -0
  139. package/server/modules/orchestration/workflows/workspace-target.ts +120 -0
  140. package/server/modules/orchestration/workspace/docker-workspace.ts +135 -0
  141. package/server/modules/orchestration/workspace/path-safety.ts +55 -0
  142. package/server/modules/orchestration/workspace/types.ts +52 -0
  143. package/server/modules/orchestration/workspace/workspace-manager.ts +97 -0
  144. package/server/modules/orchestration/workspace/worktree-workspace.ts +125 -0
  145. package/server/modules/providers/index.ts +2 -0
  146. package/server/modules/providers/list/opencode/opencode-auth.provider.ts +130 -130
  147. package/server/modules/providers/list/opencode/opencode-mcp.provider.ts +126 -126
  148. package/server/modules/providers/list/opencode/opencode.provider.ts +29 -29
  149. package/server/modules/providers/list/qwen/qwen-auth.provider.ts +145 -145
  150. package/server/modules/providers/list/qwen/qwen-mcp.provider.ts +114 -114
  151. package/server/modules/providers/list/qwen/qwen.provider.ts +21 -21
  152. package/server/modules/providers/shared/provider-configs.ts +142 -142
  153. package/server/openai-codex.js +40 -4
  154. package/server/qwen-code-cli.js +395 -395
  155. package/server/qwen-response-handler.js +73 -73
  156. package/server/routes/qwen.js +27 -27
  157. package/server/routes/taskmaster.js +116 -91
  158. package/server/services/external-access.js +171 -171
  159. package/server/services/provider-models.js +381 -381
  160. package/server/services/telegram/telegram-http-client.js +130 -130
  161. package/server/services/vapid-keys.js +36 -36
  162. package/server/utils/port-access.js +209 -209
  163. package/dist/assets/index-B1ghfb4w.css +0 -32
  164. package/dist/assets/index-oLYHJ2X5.js +0 -852
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration-task.routes.js","sourceRoot":"","sources":["../../../../../server/modules/orchestration/tasks/orchestration-task.routes.ts"],"names":[],"mappings":"AAAA,OAAO,OAAwB,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6DAA6D,CAAC;AAEvG,MAAM,UAAU,6BAA6B;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAChC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAE3C,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAChC,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACjC,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,MAAM,YAAY,GAAG,OAAO,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpG,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,wBAAwB,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;QAC9F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnD,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,OAAO;aACrB,GAAG,CAAC,CAAC,KAAc,EAAE,EAAE;YACtB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACrD,MAAM,MAAM,GAAG,KAAgC,CAAC;YAChD,MAAM,YAAY,GAAG,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3E,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1E,MAAM,WAAW,GAAG,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5F,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACzC,OAAO,wBAAwB,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;QACxG,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACpD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACpF,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;YACtC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC;gBAChG,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC9F,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,OAAO,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACxD,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,wBAAwB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,128 @@
1
+ import { OrchestrationTaskStore } from '../../../modules/orchestration/tasks/orchestration-task-store.js';
2
+ import { a2aBus } from '../../../modules/orchestration/a2a/bus.js';
3
+ function newId(prefix) {
4
+ return `${prefix}_${Math.random().toString(36).slice(2, 10)}`;
5
+ }
6
+ const TERMINAL_A2A_STATES = ['completed', 'canceled', 'failed'];
7
+ class OrchestrationTaskService {
8
+ store;
9
+ constructor(store) {
10
+ this.store = store ?? new OrchestrationTaskStore();
11
+ this.watchA2ATerminalStates();
12
+ }
13
+ list(projectId) {
14
+ return this.store.list(projectId);
15
+ }
16
+ get(id) {
17
+ return this.store.get(id);
18
+ }
19
+ create(input) {
20
+ const now = Date.now();
21
+ const task = {
22
+ id: newId('otask'),
23
+ projectId: input.projectId,
24
+ title: input.title,
25
+ description: input.description,
26
+ taskmasterId: input.taskmasterId,
27
+ state: 'todo',
28
+ createdAt: now,
29
+ updatedAt: now,
30
+ };
31
+ this.store.set(task);
32
+ return task;
33
+ }
34
+ upsertFromTaskMaster(input) {
35
+ const existing = this.store.list(input.projectId).find((task) => task.taskmasterId === input.taskmasterId);
36
+ if (existing) {
37
+ existing.title = input.title;
38
+ existing.description = input.description;
39
+ existing.updatedAt = Date.now();
40
+ this.store.set(existing);
41
+ return existing;
42
+ }
43
+ return this.create(input);
44
+ }
45
+ async dispatch(taskId, input) {
46
+ const task = this.store.get(taskId);
47
+ if (!task)
48
+ throw new Error('TASK_NOT_FOUND');
49
+ const a2aResponse = await fetch(`http://127.0.0.1:${process.env.SERVER_PORT ?? '3001'}/a2a/tasks`, {
50
+ method: 'POST',
51
+ headers: { 'Content-Type': 'application/json' },
52
+ body: JSON.stringify({
53
+ adapterId: input.adapterId,
54
+ message: {
55
+ messageId: newId('msg'),
56
+ role: 'user',
57
+ parts: [{ kind: 'text', text: `${task.title}\n\n${task.description ?? ''}` }],
58
+ },
59
+ metadata: {
60
+ isolation: input.isolation ?? 'worktree',
61
+ orchestrationTaskId: task.id,
62
+ taskmasterId: task.taskmasterId,
63
+ },
64
+ }),
65
+ });
66
+ const body = await a2aResponse.json().catch(() => null);
67
+ if (!a2aResponse.ok || typeof body?.id !== 'string') {
68
+ throw new Error(body?.error?.message ?? 'DISPATCH_FAILED');
69
+ }
70
+ task.a2aTaskId = body.id;
71
+ task.adapterId = input.adapterId;
72
+ task.adapterSelector = input.adapterId;
73
+ task.workspaceKind = input.isolation ?? 'worktree';
74
+ task.state = 'in_progress';
75
+ task.updatedAt = Date.now();
76
+ this.store.set(task);
77
+ return task;
78
+ }
79
+ updateState(taskId, state) {
80
+ const task = this.store.get(taskId);
81
+ if (!task)
82
+ return undefined;
83
+ task.state = state;
84
+ task.updatedAt = Date.now();
85
+ this.store.set(task);
86
+ return task;
87
+ }
88
+ watchA2ATerminalStates() {
89
+ a2aBus.subscribeAll((event) => {
90
+ if (event.kind !== 'task-state')
91
+ return;
92
+ if (!TERMINAL_A2A_STATES.includes(event.state))
93
+ return;
94
+ const orchTask = this.store.getByA2ATaskId(event.taskId);
95
+ if (!orchTask)
96
+ return;
97
+ if (orchTask.state === 'done' || orchTask.state === 'failed' || orchTask.state === 'canceled')
98
+ return;
99
+ const mapped = event.state === 'completed' ? 'done'
100
+ : event.state === 'failed' ? 'failed'
101
+ : 'canceled';
102
+ orchTask.state = mapped;
103
+ orchTask.updatedAt = Date.now();
104
+ this.store.set(orchTask);
105
+ if (orchTask.taskmasterId && mapped === 'done') {
106
+ this.syncTaskMasterStatus(orchTask.taskmasterId, 'done');
107
+ }
108
+ });
109
+ }
110
+ syncTaskMasterStatus(taskmasterId, status) {
111
+ const { spawn } = require('node:child_process');
112
+ spawn('task-master', ['set-status', '--id', taskmasterId, '--status', status], {
113
+ stdio: 'ignore',
114
+ detached: true,
115
+ }).unref();
116
+ }
117
+ cancel(taskId) {
118
+ const task = this.store.get(taskId);
119
+ if (!task)
120
+ throw new Error('TASK_NOT_FOUND');
121
+ task.state = 'canceled';
122
+ task.updatedAt = Date.now();
123
+ this.store.set(task);
124
+ return task;
125
+ }
126
+ }
127
+ export const orchestrationTaskService = new OrchestrationTaskService();
128
+ //# sourceMappingURL=orchestration-task.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration-task.service.js","sourceRoot":"","sources":["../../../../../server/modules/orchestration/tasks/orchestration-task.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=orchestration-task.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration-task.types.js","sourceRoot":"","sources":["../../../../../server/modules/orchestration/tasks/orchestration-task.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,126 @@
1
+ export const builtInWorkflows = [
2
+ {
3
+ id: 'agent_team',
4
+ name: 'Agent team',
5
+ description: 'A coordinator reads the goal and active CLI instances, assigns work, then collects the result.',
6
+ trigger: 'manual',
7
+ isBuiltin: true,
8
+ nodes: [],
9
+ },
10
+ {
11
+ id: 'multi_model_review',
12
+ name: 'Multi-model review',
13
+ description: 'Enabled CLI agents review the same goal separately, then one enabled agent aggregates the result.',
14
+ trigger: 'manual',
15
+ isBuiltin: true,
16
+ nodes: [
17
+ {
18
+ id: 'codex_review',
19
+ adapterId: 'codex',
20
+ prompt: 'Review the requested change for edge cases, regressions, and missing validation. Respond in the same language as the user request.',
21
+ inputs: [],
22
+ output: 'both',
23
+ onFail: 'continue',
24
+ },
25
+ {
26
+ id: 'gemini_review',
27
+ adapterId: 'gemini',
28
+ prompt: 'Review the requested change for security, scale, and user-experience risks. Respond in the same language as the user request.',
29
+ inputs: [],
30
+ output: 'both',
31
+ onFail: 'continue',
32
+ },
33
+ {
34
+ id: 'claude_review',
35
+ adapterId: 'claude-code',
36
+ prompt: 'Review the requested change for architecture and maintainability. Respond in the same language as the user request.',
37
+ inputs: [],
38
+ output: 'both',
39
+ onFail: 'continue',
40
+ },
41
+ {
42
+ id: 'aggregate',
43
+ adapterId: 'claude-code',
44
+ prompt: 'Aggregate the prior reviews into a concise prioritized report. Respond in the same language as the user request.',
45
+ inputs: ['codex_review', 'gemini_review', 'claude_review'],
46
+ output: 'message',
47
+ onFail: 'abort',
48
+ },
49
+ ],
50
+ },
51
+ {
52
+ id: 'sequential_handoff',
53
+ name: 'Sequential handoff',
54
+ description: 'Agents plan, implement, and review in order. Disabled CLI steps are skipped.',
55
+ trigger: 'manual',
56
+ isBuiltin: true,
57
+ nodes: [
58
+ {
59
+ id: 'architect',
60
+ adapterId: 'claude-code',
61
+ prompt: 'Create a concise, actionable implementation plan for the requested change. Respond in the same language as the user request.',
62
+ inputs: [],
63
+ output: 'message',
64
+ onFail: 'abort',
65
+ },
66
+ {
67
+ id: 'implement',
68
+ adapterId: 'codex',
69
+ prompt: 'Implement the requested change using the plan from the previous step. Summarize progress in the same language as the user request.',
70
+ inputs: ['architect'],
71
+ output: 'both',
72
+ onFail: 'abort',
73
+ },
74
+ {
75
+ id: 'review',
76
+ adapterId: 'gemini',
77
+ prompt: 'Review the implementation and call out any remaining issues. Respond in the same language as the user request.',
78
+ inputs: ['implement'],
79
+ output: 'message',
80
+ onFail: 'continue',
81
+ },
82
+ ],
83
+ },
84
+ {
85
+ id: 'adversarial_debate',
86
+ name: 'Decision debate',
87
+ description: 'Agents propose, critique, respond, and produce a final recommendation.',
88
+ trigger: 'manual',
89
+ isBuiltin: true,
90
+ nodes: [
91
+ {
92
+ id: 'proposal',
93
+ adapterId: 'claude-code',
94
+ prompt: 'Propose the best solution for the requested change. Respond in the same language as the user request.',
95
+ inputs: [],
96
+ output: 'message',
97
+ onFail: 'abort',
98
+ },
99
+ {
100
+ id: 'critique',
101
+ adapterId: 'codex',
102
+ prompt: 'Critique the proposal and offer a concrete alternative. Respond in the same language as the user request.',
103
+ inputs: ['proposal'],
104
+ output: 'message',
105
+ onFail: 'abort',
106
+ },
107
+ {
108
+ id: 'response',
109
+ adapterId: 'claude-code',
110
+ prompt: 'Respond to the critique and revise the approach if needed. Respond in the same language as the user request.',
111
+ inputs: ['critique'],
112
+ output: 'message',
113
+ onFail: 'abort',
114
+ },
115
+ {
116
+ id: 'judge',
117
+ adapterId: 'gemini',
118
+ prompt: 'Judge the debate and produce a final recommendation. Respond in the same language as the user request.',
119
+ inputs: ['response'],
120
+ output: 'message',
121
+ onFail: 'abort',
122
+ },
123
+ ],
124
+ },
125
+ ];
126
+ //# sourceMappingURL=built-in-workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-in-workflows.js","sourceRoot":"","sources":["../../../../../server/modules/orchestration/workflows/built-in-workflows.ts"],"names":[],"mappings":"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"}