sudocode 1.0.0 → 1.1.1

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 (447) hide show
  1. package/README.md +222 -0
  2. package/build.js +75 -0
  3. package/node_modules/@sudocode-ai/cli/README.md +330 -0
  4. package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.d.ts +53 -0
  5. package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.d.ts.map +1 -0
  6. package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.js +274 -0
  7. package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.js.map +1 -0
  8. package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.d.ts +22 -0
  9. package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.d.ts.map +1 -0
  10. package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.js +148 -0
  11. package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.js.map +1 -0
  12. package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.d.ts +45 -0
  13. package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.d.ts.map +1 -0
  14. package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.js +310 -0
  15. package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.js.map +1 -0
  16. package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.d.ts +18 -0
  17. package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.d.ts.map +1 -0
  18. package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.js +61 -0
  19. package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.js.map +1 -0
  20. package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.d.ts +22 -0
  21. package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.d.ts.map +1 -0
  22. package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.js +136 -0
  23. package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.js.map +1 -0
  24. package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.d.ts +14 -0
  25. package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.d.ts.map +1 -0
  26. package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.js +76 -0
  27. package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.js.map +1 -0
  28. package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.d.ts +17 -0
  29. package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.d.ts.map +1 -0
  30. package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.js +99 -0
  31. package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.js.map +1 -0
  32. package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.d.ts +38 -0
  33. package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.d.ts.map +1 -0
  34. package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.js +321 -0
  35. package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.js.map +1 -0
  36. package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.d.ts +17 -0
  37. package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.d.ts.map +1 -0
  38. package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.js +131 -0
  39. package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.js.map +1 -0
  40. package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.d.ts +24 -0
  41. package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.d.ts.map +1 -0
  42. package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.js +416 -0
  43. package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.js.map +1 -0
  44. package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.d.ts +12 -0
  45. package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.d.ts.map +1 -0
  46. package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.js +78 -0
  47. package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.js.map +1 -0
  48. package/node_modules/@sudocode-ai/cli/dist/cli.d.ts +6 -0
  49. package/node_modules/@sudocode-ai/cli/dist/cli.d.ts.map +1 -0
  50. package/node_modules/@sudocode-ai/cli/dist/cli.js +426 -0
  51. package/node_modules/@sudocode-ai/cli/dist/cli.js.map +1 -0
  52. package/node_modules/@sudocode-ai/cli/dist/db.d.ts +21 -0
  53. package/node_modules/@sudocode-ai/cli/dist/db.d.ts.map +1 -0
  54. package/node_modules/@sudocode-ai/cli/dist/db.js +54 -0
  55. package/node_modules/@sudocode-ai/cli/dist/db.js.map +1 -0
  56. package/node_modules/@sudocode-ai/cli/dist/export.d.ts +79 -0
  57. package/node_modules/@sudocode-ai/cli/dist/export.d.ts.map +1 -0
  58. package/node_modules/@sudocode-ai/cli/dist/export.js +195 -0
  59. package/node_modules/@sudocode-ai/cli/dist/export.js.map +1 -0
  60. package/node_modules/@sudocode-ai/cli/dist/filename-generator.d.ts +30 -0
  61. package/node_modules/@sudocode-ai/cli/dist/filename-generator.d.ts.map +1 -0
  62. package/node_modules/@sudocode-ai/cli/dist/filename-generator.js +93 -0
  63. package/node_modules/@sudocode-ai/cli/dist/filename-generator.js.map +1 -0
  64. package/node_modules/@sudocode-ai/cli/dist/id-generator.d.ts +26 -0
  65. package/node_modules/@sudocode-ai/cli/dist/id-generator.d.ts.map +1 -0
  66. package/node_modules/@sudocode-ai/cli/dist/id-generator.js +123 -0
  67. package/node_modules/@sudocode-ai/cli/dist/id-generator.js.map +1 -0
  68. package/node_modules/@sudocode-ai/cli/dist/import.d.ts +118 -0
  69. package/node_modules/@sudocode-ai/cli/dist/import.d.ts.map +1 -0
  70. package/node_modules/@sudocode-ai/cli/dist/import.js +608 -0
  71. package/node_modules/@sudocode-ai/cli/dist/import.js.map +1 -0
  72. package/node_modules/@sudocode-ai/cli/dist/index.d.ts +13 -0
  73. package/node_modules/@sudocode-ai/cli/dist/index.d.ts.map +1 -0
  74. package/node_modules/@sudocode-ai/cli/dist/index.js +13 -0
  75. package/node_modules/@sudocode-ai/cli/dist/index.js.map +1 -0
  76. package/node_modules/@sudocode-ai/cli/dist/jsonl.d.ts +69 -0
  77. package/node_modules/@sudocode-ai/cli/dist/jsonl.d.ts.map +1 -0
  78. package/node_modules/@sudocode-ai/cli/dist/jsonl.js +333 -0
  79. package/node_modules/@sudocode-ai/cli/dist/jsonl.js.map +1 -0
  80. package/node_modules/@sudocode-ai/cli/dist/markdown.d.ts +146 -0
  81. package/node_modules/@sudocode-ai/cli/dist/markdown.d.ts.map +1 -0
  82. package/node_modules/@sudocode-ai/cli/dist/markdown.js +357 -0
  83. package/node_modules/@sudocode-ai/cli/dist/markdown.js.map +1 -0
  84. package/node_modules/@sudocode-ai/cli/dist/migrations.d.ts +23 -0
  85. package/node_modules/@sudocode-ai/cli/dist/migrations.d.ts.map +1 -0
  86. package/node_modules/@sudocode-ai/cli/dist/migrations.js +57 -0
  87. package/node_modules/@sudocode-ai/cli/dist/migrations.js.map +1 -0
  88. package/node_modules/@sudocode-ai/cli/dist/operations/events.d.ts +53 -0
  89. package/node_modules/@sudocode-ai/cli/dist/operations/events.d.ts.map +1 -0
  90. package/node_modules/@sudocode-ai/cli/dist/operations/events.js +108 -0
  91. package/node_modules/@sudocode-ai/cli/dist/operations/events.js.map +1 -0
  92. package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.d.ts +92 -0
  93. package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.d.ts.map +1 -0
  94. package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.js +444 -0
  95. package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.js.map +1 -0
  96. package/node_modules/@sudocode-ai/cli/dist/operations/feedback.d.ts +76 -0
  97. package/node_modules/@sudocode-ai/cli/dist/operations/feedback.d.ts.map +1 -0
  98. package/node_modules/@sudocode-ai/cli/dist/operations/feedback.js +234 -0
  99. package/node_modules/@sudocode-ai/cli/dist/operations/feedback.js.map +1 -0
  100. package/node_modules/@sudocode-ai/cli/dist/operations/index.d.ts +10 -0
  101. package/node_modules/@sudocode-ai/cli/dist/operations/index.d.ts.map +1 -0
  102. package/node_modules/@sudocode-ai/cli/dist/operations/index.js +10 -0
  103. package/node_modules/@sudocode-ai/cli/dist/operations/index.js.map +1 -0
  104. package/node_modules/@sudocode-ai/cli/dist/operations/issues.d.ts +82 -0
  105. package/node_modules/@sudocode-ai/cli/dist/operations/issues.d.ts.map +1 -0
  106. package/node_modules/@sudocode-ai/cli/dist/operations/issues.js +411 -0
  107. package/node_modules/@sudocode-ai/cli/dist/operations/issues.js.map +1 -0
  108. package/node_modules/@sudocode-ai/cli/dist/operations/references.d.ts +34 -0
  109. package/node_modules/@sudocode-ai/cli/dist/operations/references.d.ts.map +1 -0
  110. package/node_modules/@sudocode-ai/cli/dist/operations/references.js +117 -0
  111. package/node_modules/@sudocode-ai/cli/dist/operations/references.js.map +1 -0
  112. package/node_modules/@sudocode-ai/cli/dist/operations/relationships.d.ts +57 -0
  113. package/node_modules/@sudocode-ai/cli/dist/operations/relationships.d.ts.map +1 -0
  114. package/node_modules/@sudocode-ai/cli/dist/operations/relationships.js +236 -0
  115. package/node_modules/@sudocode-ai/cli/dist/operations/relationships.js.map +1 -0
  116. package/node_modules/@sudocode-ai/cli/dist/operations/specs.d.ts +64 -0
  117. package/node_modules/@sudocode-ai/cli/dist/operations/specs.d.ts.map +1 -0
  118. package/node_modules/@sudocode-ai/cli/dist/operations/specs.js +290 -0
  119. package/node_modules/@sudocode-ai/cli/dist/operations/specs.js.map +1 -0
  120. package/node_modules/@sudocode-ai/cli/dist/operations/tags.d.ts +42 -0
  121. package/node_modules/@sudocode-ai/cli/dist/operations/tags.d.ts.map +1 -0
  122. package/node_modules/@sudocode-ai/cli/dist/operations/tags.js +127 -0
  123. package/node_modules/@sudocode-ai/cli/dist/operations/tags.js.map +1 -0
  124. package/node_modules/@sudocode-ai/cli/dist/operations/transactions.d.ts +41 -0
  125. package/node_modules/@sudocode-ai/cli/dist/operations/transactions.d.ts.map +1 -0
  126. package/node_modules/@sudocode-ai/cli/dist/operations/transactions.js +111 -0
  127. package/node_modules/@sudocode-ai/cli/dist/operations/transactions.js.map +1 -0
  128. package/node_modules/@sudocode-ai/cli/dist/sync.d.ts +47 -0
  129. package/node_modules/@sudocode-ai/cli/dist/sync.d.ts.map +1 -0
  130. package/node_modules/@sudocode-ai/cli/dist/sync.js +442 -0
  131. package/node_modules/@sudocode-ai/cli/dist/sync.js.map +1 -0
  132. package/node_modules/@sudocode-ai/cli/dist/test-schema.d.ts +5 -0
  133. package/node_modules/@sudocode-ai/cli/dist/test-schema.d.ts.map +1 -0
  134. package/node_modules/@sudocode-ai/cli/dist/test-schema.js +46 -0
  135. package/node_modules/@sudocode-ai/cli/dist/test-schema.js.map +1 -0
  136. package/node_modules/@sudocode-ai/cli/dist/types.d.ts +7 -0
  137. package/node_modules/@sudocode-ai/cli/dist/types.d.ts.map +1 -0
  138. package/node_modules/@sudocode-ai/cli/dist/types.js +7 -0
  139. package/node_modules/@sudocode-ai/cli/dist/types.js.map +1 -0
  140. package/node_modules/@sudocode-ai/cli/dist/update-checker.d.ts +24 -0
  141. package/node_modules/@sudocode-ai/cli/dist/update-checker.d.ts.map +1 -0
  142. package/node_modules/@sudocode-ai/cli/dist/update-checker.js +151 -0
  143. package/node_modules/@sudocode-ai/cli/dist/update-checker.js.map +1 -0
  144. package/node_modules/@sudocode-ai/cli/dist/version.d.ts +12 -0
  145. package/node_modules/@sudocode-ai/cli/dist/version.d.ts.map +1 -0
  146. package/node_modules/@sudocode-ai/cli/dist/version.js +23 -0
  147. package/node_modules/@sudocode-ai/cli/dist/version.js.map +1 -0
  148. package/node_modules/@sudocode-ai/cli/dist/watcher.d.ts +63 -0
  149. package/node_modules/@sudocode-ai/cli/dist/watcher.d.ts.map +1 -0
  150. package/node_modules/@sudocode-ai/cli/dist/watcher.js +438 -0
  151. package/node_modules/@sudocode-ai/cli/dist/watcher.js.map +1 -0
  152. package/node_modules/@sudocode-ai/cli/package.json +65 -0
  153. package/node_modules/@sudocode-ai/local-server/README.md +19 -0
  154. package/node_modules/@sudocode-ai/local-server/dist/cli.d.ts +7 -0
  155. package/node_modules/@sudocode-ai/local-server/dist/cli.d.ts.map +1 -0
  156. package/node_modules/@sudocode-ai/local-server/dist/cli.js +7 -0
  157. package/node_modules/@sudocode-ai/local-server/dist/cli.js.map +1 -0
  158. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.d.ts +103 -0
  159. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.d.ts.map +1 -0
  160. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.js +10 -0
  161. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.js.map +1 -0
  162. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.d.ts +190 -0
  163. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.d.ts.map +1 -0
  164. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.js +611 -0
  165. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.js.map +1 -0
  166. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.d.ts +116 -0
  167. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.d.ts.map +1 -0
  168. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.js +10 -0
  169. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.js.map +1 -0
  170. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.d.ts +176 -0
  171. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.d.ts.map +1 -0
  172. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.js +438 -0
  173. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.js.map +1 -0
  174. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.d.ts +96 -0
  175. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.d.ts.map +1 -0
  176. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.js +96 -0
  177. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.js.map +1 -0
  178. package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.d.ts +321 -0
  179. package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.d.ts.map +1 -0
  180. package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.js +769 -0
  181. package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.js.map +1 -0
  182. package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.d.ts +18 -0
  183. package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.d.ts.map +1 -0
  184. package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.js +15 -0
  185. package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.js.map +1 -0
  186. package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.d.ts +421 -0
  187. package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.d.ts.map +1 -0
  188. package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.js +22 -0
  189. package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.js.map +1 -0
  190. package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.d.ts +86 -0
  191. package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.d.ts.map +1 -0
  192. package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.js +59 -0
  193. package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.js.map +1 -0
  194. package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.d.ts +15 -0
  195. package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.d.ts.map +1 -0
  196. package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.js +15 -0
  197. package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.js.map +1 -0
  198. package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.d.ts +133 -0
  199. package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.d.ts.map +1 -0
  200. package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.js +10 -0
  201. package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.js.map +1 -0
  202. package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.d.ts +102 -0
  203. package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.d.ts.map +1 -0
  204. package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.js +336 -0
  205. package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.js.map +1 -0
  206. package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.d.ts +105 -0
  207. package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.d.ts.map +1 -0
  208. package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.js +10 -0
  209. package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.js.map +1 -0
  210. package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.d.ts +53 -0
  211. package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.d.ts.map +1 -0
  212. package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.js +97 -0
  213. package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.js.map +1 -0
  214. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.d.ts +170 -0
  215. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.d.ts.map +1 -0
  216. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.js +291 -0
  217. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.js.map +1 -0
  218. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.d.ts +109 -0
  219. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.d.ts.map +1 -0
  220. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.js +10 -0
  221. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.js.map +1 -0
  222. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.d.ts +14 -0
  223. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.d.ts.map +1 -0
  224. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.js +15 -0
  225. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.js.map +1 -0
  226. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.d.ts +86 -0
  227. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.d.ts.map +1 -0
  228. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.js +261 -0
  229. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.js.map +1 -0
  230. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.d.ts +161 -0
  231. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.d.ts.map +1 -0
  232. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.js +234 -0
  233. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.js.map +1 -0
  234. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.d.ts +226 -0
  235. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.d.ts.map +1 -0
  236. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.js +30 -0
  237. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.js.map +1 -0
  238. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.d.ts +119 -0
  239. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.d.ts.map +1 -0
  240. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.js +208 -0
  241. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.js.map +1 -0
  242. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.d.ts +10 -0
  243. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.d.ts.map +1 -0
  244. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.js +10 -0
  245. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.js.map +1 -0
  246. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.d.ts +146 -0
  247. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.d.ts.map +1 -0
  248. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.js +282 -0
  249. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.js.map +1 -0
  250. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.d.ts +176 -0
  251. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.d.ts.map +1 -0
  252. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.js +231 -0
  253. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.js.map +1 -0
  254. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.d.ts +13 -0
  255. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.d.ts.map +1 -0
  256. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.js +13 -0
  257. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.js.map +1 -0
  258. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.d.ts +216 -0
  259. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.d.ts.map +1 -0
  260. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.js +683 -0
  261. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.js.map +1 -0
  262. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.d.ts +54 -0
  263. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.d.ts.map +1 -0
  264. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.js +68 -0
  265. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.js.map +1 -0
  266. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.d.ts +158 -0
  267. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.d.ts.map +1 -0
  268. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.js +9 -0
  269. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.js.map +1 -0
  270. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.d.ts +172 -0
  271. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.d.ts.map +1 -0
  272. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.js +9 -0
  273. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.js.map +1 -0
  274. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.d.ts +89 -0
  275. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.d.ts.map +1 -0
  276. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.js +152 -0
  277. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.js.map +1 -0
  278. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.d.ts +74 -0
  279. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.d.ts.map +1 -0
  280. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.js +280 -0
  281. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.js.map +1 -0
  282. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.d.ts +151 -0
  283. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.d.ts.map +1 -0
  284. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.js +189 -0
  285. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.js.map +1 -0
  286. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.d.ts +16 -0
  287. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.d.ts.map +1 -0
  288. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.js +15 -0
  289. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.js.map +1 -0
  290. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.d.ts +184 -0
  291. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.d.ts.map +1 -0
  292. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.js +452 -0
  293. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.js.map +1 -0
  294. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.d.ts +90 -0
  295. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.d.ts.map +1 -0
  296. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.js +42 -0
  297. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.js.map +1 -0
  298. package/node_modules/@sudocode-ai/local-server/dist/index.d.ts +8 -0
  299. package/node_modules/@sudocode-ai/local-server/dist/index.d.ts.map +1 -0
  300. package/node_modules/@sudocode-ai/local-server/dist/index.js +356 -0
  301. package/node_modules/@sudocode-ai/local-server/dist/index.js.map +1 -0
  302. package/node_modules/@sudocode-ai/local-server/dist/public/assets/index-C4SmlXoo.js +568 -0
  303. package/node_modules/@sudocode-ai/local-server/dist/public/assets/index-C4SmlXoo.js.map +1 -0
  304. package/node_modules/@sudocode-ai/local-server/dist/public/assets/index-DE59j7ti.css +1 -0
  305. package/node_modules/@sudocode-ai/local-server/dist/public/assets/react-vendor-LX0UoTxg.js +60 -0
  306. package/node_modules/@sudocode-ai/local-server/dist/public/assets/react-vendor-LX0UoTxg.js.map +1 -0
  307. package/node_modules/@sudocode-ai/local-server/dist/public/assets/ui-vendor-_cxVHaqZ.js +54 -0
  308. package/node_modules/@sudocode-ai/local-server/dist/public/assets/ui-vendor-_cxVHaqZ.js.map +1 -0
  309. package/node_modules/@sudocode-ai/local-server/dist/public/favicon.ico +0 -0
  310. package/node_modules/@sudocode-ai/local-server/dist/public/index.html +16 -0
  311. package/node_modules/@sudocode-ai/local-server/dist/public/logo.png +0 -0
  312. package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.d.ts +24 -0
  313. package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.d.ts.map +1 -0
  314. package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.js +55 -0
  315. package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.js.map +1 -0
  316. package/node_modules/@sudocode-ai/local-server/dist/routes/executions.d.ts +19 -0
  317. package/node_modules/@sudocode-ai/local-server/dist/routes/executions.d.ts.map +1 -0
  318. package/node_modules/@sudocode-ai/local-server/dist/routes/executions.js +267 -0
  319. package/node_modules/@sudocode-ai/local-server/dist/routes/executions.js.map +1 -0
  320. package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.d.ts +7 -0
  321. package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.d.ts.map +1 -0
  322. package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.js +329 -0
  323. package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.js.map +1 -0
  324. package/node_modules/@sudocode-ai/local-server/dist/routes/issues.d.ts +7 -0
  325. package/node_modules/@sudocode-ai/local-server/dist/routes/issues.d.ts.map +1 -0
  326. package/node_modules/@sudocode-ai/local-server/dist/routes/issues.js +280 -0
  327. package/node_modules/@sudocode-ai/local-server/dist/routes/issues.js.map +1 -0
  328. package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.d.ts +7 -0
  329. package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.d.ts.map +1 -0
  330. package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.js +308 -0
  331. package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.js.map +1 -0
  332. package/node_modules/@sudocode-ai/local-server/dist/routes/specs.d.ts +7 -0
  333. package/node_modules/@sudocode-ai/local-server/dist/routes/specs.d.ts.map +1 -0
  334. package/node_modules/@sudocode-ai/local-server/dist/routes/specs.js +270 -0
  335. package/node_modules/@sudocode-ai/local-server/dist/routes/specs.js.map +1 -0
  336. package/node_modules/@sudocode-ai/local-server/dist/services/db.d.ts +33 -0
  337. package/node_modules/@sudocode-ai/local-server/dist/services/db.d.ts.map +1 -0
  338. package/node_modules/@sudocode-ai/local-server/dist/services/db.js +85 -0
  339. package/node_modules/@sudocode-ai/local-server/dist/services/db.js.map +1 -0
  340. package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.d.ts +108 -0
  341. package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.d.ts.map +1 -0
  342. package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.js +286 -0
  343. package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.js.map +1 -0
  344. package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.d.ts +185 -0
  345. package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.d.ts.map +1 -0
  346. package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.js +676 -0
  347. package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.js.map +1 -0
  348. package/node_modules/@sudocode-ai/local-server/dist/services/executions.d.ts +59 -0
  349. package/node_modules/@sudocode-ai/local-server/dist/services/executions.d.ts.map +1 -0
  350. package/node_modules/@sudocode-ai/local-server/dist/services/executions.js +164 -0
  351. package/node_modules/@sudocode-ai/local-server/dist/services/executions.js.map +1 -0
  352. package/node_modules/@sudocode-ai/local-server/dist/services/export.d.ts +24 -0
  353. package/node_modules/@sudocode-ai/local-server/dist/services/export.d.ts.map +1 -0
  354. package/node_modules/@sudocode-ai/local-server/dist/services/export.js +106 -0
  355. package/node_modules/@sudocode-ai/local-server/dist/services/export.js.map +1 -0
  356. package/node_modules/@sudocode-ai/local-server/dist/services/feedback.d.ts +40 -0
  357. package/node_modules/@sudocode-ai/local-server/dist/services/feedback.d.ts.map +1 -0
  358. package/node_modules/@sudocode-ai/local-server/dist/services/feedback.js +54 -0
  359. package/node_modules/@sudocode-ai/local-server/dist/services/feedback.js.map +1 -0
  360. package/node_modules/@sudocode-ai/local-server/dist/services/issues.d.ts +27 -0
  361. package/node_modules/@sudocode-ai/local-server/dist/services/issues.d.ts.map +1 -0
  362. package/node_modules/@sudocode-ai/local-server/dist/services/issues.js +35 -0
  363. package/node_modules/@sudocode-ai/local-server/dist/services/issues.js.map +1 -0
  364. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.d.ts +108 -0
  365. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.d.ts.map +1 -0
  366. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.js +212 -0
  367. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.js.map +1 -0
  368. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.d.ts +97 -0
  369. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.d.ts.map +1 -0
  370. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.js +236 -0
  371. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.js.map +1 -0
  372. package/node_modules/@sudocode-ai/local-server/dist/services/relationships.d.ts +35 -0
  373. package/node_modules/@sudocode-ai/local-server/dist/services/relationships.d.ts.map +1 -0
  374. package/node_modules/@sudocode-ai/local-server/dist/services/relationships.js +42 -0
  375. package/node_modules/@sudocode-ai/local-server/dist/services/relationships.js.map +1 -0
  376. package/node_modules/@sudocode-ai/local-server/dist/services/specs.d.ts +27 -0
  377. package/node_modules/@sudocode-ai/local-server/dist/services/specs.d.ts.map +1 -0
  378. package/node_modules/@sudocode-ai/local-server/dist/services/specs.js +35 -0
  379. package/node_modules/@sudocode-ai/local-server/dist/services/specs.js.map +1 -0
  380. package/node_modules/@sudocode-ai/local-server/dist/services/watcher.d.ts +50 -0
  381. package/node_modules/@sudocode-ai/local-server/dist/services/watcher.d.ts.map +1 -0
  382. package/node_modules/@sudocode-ai/local-server/dist/services/watcher.js +69 -0
  383. package/node_modules/@sudocode-ai/local-server/dist/services/watcher.js.map +1 -0
  384. package/node_modules/@sudocode-ai/local-server/dist/services/websocket.d.ts +127 -0
  385. package/node_modules/@sudocode-ai/local-server/dist/services/websocket.d.ts.map +1 -0
  386. package/node_modules/@sudocode-ai/local-server/dist/services/websocket.js +389 -0
  387. package/node_modules/@sudocode-ai/local-server/dist/services/websocket.js.map +1 -0
  388. package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.d.ts +6 -0
  389. package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.d.ts.map +1 -0
  390. package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.js +9 -0
  391. package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.js.map +1 -0
  392. package/node_modules/@sudocode-ai/local-server/package.json +72 -0
  393. package/node_modules/@sudocode-ai/mcp/LICENSE +21 -0
  394. package/node_modules/@sudocode-ai/mcp/README.md +226 -0
  395. package/node_modules/@sudocode-ai/mcp/dist/client.d.ts +33 -0
  396. package/node_modules/@sudocode-ai/mcp/dist/client.d.ts.map +1 -0
  397. package/node_modules/@sudocode-ai/mcp/dist/client.js +159 -0
  398. package/node_modules/@sudocode-ai/mcp/dist/client.js.map +1 -0
  399. package/node_modules/@sudocode-ai/mcp/dist/index.d.ts +6 -0
  400. package/node_modules/@sudocode-ai/mcp/dist/index.d.ts.map +1 -0
  401. package/node_modules/@sudocode-ai/mcp/dist/index.js +64 -0
  402. package/node_modules/@sudocode-ai/mcp/dist/index.js.map +1 -0
  403. package/node_modules/@sudocode-ai/mcp/dist/server.d.ts +26 -0
  404. package/node_modules/@sudocode-ai/mcp/dist/server.d.ts.map +1 -0
  405. package/node_modules/@sudocode-ai/mcp/dist/server.js +575 -0
  406. package/node_modules/@sudocode-ai/mcp/dist/server.js.map +1 -0
  407. package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.d.ts +41 -0
  408. package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.d.ts.map +1 -0
  409. package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.js +21 -0
  410. package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.js.map +1 -0
  411. package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.d.ts +19 -0
  412. package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.d.ts.map +1 -0
  413. package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.js +24 -0
  414. package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.js.map +1 -0
  415. package/node_modules/@sudocode-ai/mcp/dist/tools/init.d.ts +17 -0
  416. package/node_modules/@sudocode-ai/mcp/dist/tools/init.d.ts.map +1 -0
  417. package/node_modules/@sudocode-ai/mcp/dist/tools/init.js +15 -0
  418. package/node_modules/@sudocode-ai/mcp/dist/tools/init.js.map +1 -0
  419. package/node_modules/@sudocode-ai/mcp/dist/tools/issues.d.ts +44 -0
  420. package/node_modules/@sudocode-ai/mcp/dist/tools/issues.d.ts.map +1 -0
  421. package/node_modules/@sudocode-ai/mcp/dist/tools/issues.js +106 -0
  422. package/node_modules/@sudocode-ai/mcp/dist/tools/issues.js.map +1 -0
  423. package/node_modules/@sudocode-ai/mcp/dist/tools/references.d.ts +21 -0
  424. package/node_modules/@sudocode-ai/mcp/dist/tools/references.d.ts.map +1 -0
  425. package/node_modules/@sudocode-ai/mcp/dist/tools/references.js +49 -0
  426. package/node_modules/@sudocode-ai/mcp/dist/tools/references.js.map +1 -0
  427. package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.d.ts +15 -0
  428. package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.d.ts.map +1 -0
  429. package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.js +18 -0
  430. package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.js.map +1 -0
  431. package/node_modules/@sudocode-ai/mcp/dist/tools/specs.d.ts +35 -0
  432. package/node_modules/@sudocode-ai/mcp/dist/tools/specs.d.ts.map +1 -0
  433. package/node_modules/@sudocode-ai/mcp/dist/tools/specs.js +85 -0
  434. package/node_modules/@sudocode-ai/mcp/dist/tools/specs.js.map +1 -0
  435. package/node_modules/@sudocode-ai/mcp/dist/types.d.ts +35 -0
  436. package/node_modules/@sudocode-ai/mcp/dist/types.d.ts.map +1 -0
  437. package/node_modules/@sudocode-ai/mcp/dist/types.js +21 -0
  438. package/node_modules/@sudocode-ai/mcp/dist/types.js.map +1 -0
  439. package/node_modules/@sudocode-ai/mcp/package.json +67 -0
  440. package/node_modules/@sudocode-ai/types/README.md +7 -0
  441. package/node_modules/@sudocode-ai/types/dist/schema.d.ts +45 -0
  442. package/node_modules/@sudocode-ai/types/dist/schema.d.ts.map +1 -0
  443. package/node_modules/@sudocode-ai/types/dist/schema.js +338 -0
  444. package/node_modules/@sudocode-ai/types/dist/schema.js.map +1 -0
  445. package/node_modules/@sudocode-ai/types/package.json +46 -0
  446. package/package.json +51 -12
  447. package/index.js +0 -5
@@ -0,0 +1,611 @@
1
+ /**
2
+ * Simple Execution Engine
3
+ *
4
+ * Queue-based execution engine that spawns a process per task
5
+ * with concurrency limits. Implements the "simple first" approach.
6
+ *
7
+ * @module execution/engine/simple-engine
8
+ */
9
+ import { buildClaudeConfig } from "../process/builders/claude.js";
10
+ /**
11
+ * SimpleExecutionEngine - Queue-based task execution with concurrency control
12
+ *
13
+ * Key features:
14
+ * - FIFO queue for task ordering
15
+ * - Configurable concurrency limit (default: 3)
16
+ * - Automatic retry on failure
17
+ * - Event emission for task lifecycle
18
+ * - Promise-based waiting
19
+ * - Graceful shutdown
20
+ */
21
+ export class SimpleExecutionEngine {
22
+ _processManager;
23
+ _config;
24
+ // Task queue (FIFO)
25
+ taskQueue = [];
26
+ // Running tasks tracking
27
+ runningTasks = new Map();
28
+ // Completed task results
29
+ completedResults = new Map();
30
+ // Promise resolvers for waiting (supports multiple waiters per task)
31
+ taskResolvers = new Map();
32
+ // Engine metrics
33
+ metrics;
34
+ // Event handlers
35
+ completeHandlers = [];
36
+ failedHandlers = [];
37
+ // Track active polling intervals for cleanup
38
+ pollingIntervals = new Map();
39
+ /**
40
+ * Create a new SimpleExecutionEngine
41
+ *
42
+ * @param processManager - Process manager for spawning Claude processes
43
+ * @param config - Engine configuration options
44
+ */
45
+ constructor(_processManager, _config = {}) {
46
+ this._processManager = _processManager;
47
+ this._config = _config;
48
+ // Initialize metrics
49
+ this.metrics = {
50
+ maxConcurrent: _config.maxConcurrent ?? 3,
51
+ currentlyRunning: 0,
52
+ availableSlots: _config.maxConcurrent ?? 3,
53
+ queuedTasks: 0,
54
+ completedTasks: 0,
55
+ failedTasks: 0,
56
+ averageDuration: 0,
57
+ successRate: 1.0,
58
+ throughput: 0,
59
+ totalProcessesSpawned: 0,
60
+ activeProcesses: 0,
61
+ };
62
+ }
63
+ /**
64
+ * Submit a single task for execution
65
+ *
66
+ * Adds task to queue and attempts to start execution if capacity available.
67
+ *
68
+ * @param task - The task to execute
69
+ * @returns Promise resolving to the task ID
70
+ */
71
+ async submitTask(task) {
72
+ // Add to queue
73
+ this.taskQueue.push(task);
74
+ this.metrics.queuedTasks++;
75
+ // Try to start immediately if capacity available
76
+ this.processQueue();
77
+ return task.id;
78
+ }
79
+ /**
80
+ * Submit multiple tasks for execution
81
+ *
82
+ * @param tasks - Array of tasks to execute
83
+ * @returns Promise resolving to array of task IDs
84
+ */
85
+ async submitTasks(tasks) {
86
+ const ids = [];
87
+ for (const task of tasks) {
88
+ const id = await this.submitTask(task);
89
+ ids.push(id);
90
+ }
91
+ return ids;
92
+ }
93
+ /**
94
+ * Process the task queue
95
+ *
96
+ * Dequeues tasks and starts execution while capacity is available.
97
+ * Checks dependencies before execution and re-queues if not met.
98
+ *
99
+ * @private
100
+ */
101
+ processQueue() {
102
+ // Track if we've made any progress in this pass
103
+ let tasksProcessed = 0;
104
+ const initialQueueSize = this.taskQueue.length;
105
+ // Check if we have capacity and tasks to process
106
+ while (this.taskQueue.length > 0 &&
107
+ this.runningTasks.size < this.metrics.maxConcurrent &&
108
+ tasksProcessed < initialQueueSize // Prevent infinite loop
109
+ ) {
110
+ const task = this.taskQueue.shift();
111
+ this.metrics.queuedTasks--;
112
+ tasksProcessed++;
113
+ // Check if any dependency has failed
114
+ if (this.hasFailedDependency(task)) {
115
+ // Fail this task immediately - don't wait for failed dependencies
116
+ this.handleTaskFailure(task.id, new Error(`Task ${task.id} failed: one or more dependencies failed`));
117
+ continue; // Process next task
118
+ }
119
+ // Check if all dependencies are met
120
+ if (!this.areDependenciesMet(task)) {
121
+ // Re-queue at end - dependencies not yet completed
122
+ this.taskQueue.push(task);
123
+ this.metrics.queuedTasks++;
124
+ continue; // Try next task in queue
125
+ }
126
+ // Track task as running and update capacity
127
+ this.trackTaskStart(task);
128
+ // Start execution
129
+ this.executeTask(task).catch((error) => {
130
+ this.handleTaskFailure(task.id, error);
131
+ });
132
+ }
133
+ }
134
+ /**
135
+ * Check if all task dependencies are met
136
+ *
137
+ * @param task - Task to check
138
+ * @returns True if all dependencies completed successfully
139
+ * @private
140
+ */
141
+ areDependenciesMet(task) {
142
+ // No dependencies means dependencies are met
143
+ if (task.dependencies.length === 0) {
144
+ return true;
145
+ }
146
+ // Check each dependency
147
+ for (const depId of task.dependencies) {
148
+ const result = this.completedResults.get(depId);
149
+ // Dependency not completed yet
150
+ if (!result) {
151
+ return false;
152
+ }
153
+ // Dependency completed but failed
154
+ if (!result.success) {
155
+ return false;
156
+ }
157
+ }
158
+ // All dependencies completed successfully
159
+ return true;
160
+ }
161
+ /**
162
+ * Check if any task dependency has failed
163
+ *
164
+ * @param task - Task to check
165
+ * @returns True if any dependency failed
166
+ * @private
167
+ */
168
+ hasFailedDependency(task) {
169
+ for (const depId of task.dependencies) {
170
+ const result = this.completedResults.get(depId);
171
+ // If dependency completed but failed, return true
172
+ if (result && !result.success) {
173
+ return true;
174
+ }
175
+ }
176
+ return false;
177
+ }
178
+ /**
179
+ * Track task as running and update capacity metrics
180
+ *
181
+ * @param task - Task to start tracking
182
+ * @private
183
+ */
184
+ trackTaskStart(task) {
185
+ // Get attempt from metadata if this is a retry
186
+ const attempt = task.metadata?._retryAttempt || 1;
187
+ // Add to running tasks
188
+ const runningTask = {
189
+ task,
190
+ process: null,
191
+ startedAt: new Date(),
192
+ attempt,
193
+ };
194
+ this.runningTasks.set(task.id, runningTask);
195
+ // Update metrics
196
+ this.metrics.currentlyRunning = this.runningTasks.size;
197
+ this.metrics.availableSlots =
198
+ this.metrics.maxConcurrent - this.runningTasks.size;
199
+ }
200
+ /**
201
+ * Track task completion and release capacity
202
+ *
203
+ * @param taskId - ID of completed task
204
+ * @private
205
+ */
206
+ trackTaskComplete(taskId) {
207
+ // Remove from running tasks
208
+ this.runningTasks.delete(taskId);
209
+ // Update metrics
210
+ this.metrics.currentlyRunning = this.runningTasks.size;
211
+ this.metrics.availableSlots =
212
+ this.metrics.maxConcurrent - this.runningTasks.size;
213
+ // Try to process more tasks now that capacity is available
214
+ this.processQueue();
215
+ }
216
+ /**
217
+ * Execute a task
218
+ *
219
+ * Acquires a process, sends the prompt, collects output, and builds the result.
220
+ *
221
+ * @param task - Task to execute
222
+ * @private
223
+ */
224
+ async executeTask(task) {
225
+ const startTime = new Date();
226
+ let managedProcess = null;
227
+ let output = "";
228
+ let errorOutput = "";
229
+ try {
230
+ // Build process configuration
231
+ const processConfig = buildClaudeConfig({
232
+ claudePath: this._config.claudePath,
233
+ workDir: task.workDir,
234
+ print: true,
235
+ outputFormat: "stream-json",
236
+ dangerouslySkipPermissions: true,
237
+ env: task.config.env,
238
+ timeout: task.config.timeout,
239
+ });
240
+ // Acquire process from manager
241
+ managedProcess = await this._processManager.acquireProcess(processConfig);
242
+ // Update running task with process reference
243
+ const runningTask = this.runningTasks.get(task.id);
244
+ if (runningTask) {
245
+ runningTask.process = managedProcess;
246
+ }
247
+ // Set up output collection
248
+ this._processManager.onOutput(managedProcess.id, (data, type) => {
249
+ if (type === "stdout") {
250
+ output += data.toString();
251
+ }
252
+ else {
253
+ errorOutput += data.toString();
254
+ }
255
+ // Call optional output handler for real-time processing
256
+ if (this._config.onOutput) {
257
+ this._config.onOutput(data, type);
258
+ }
259
+ });
260
+ // Set up error handler
261
+ this._processManager.onError(managedProcess.id, (error) => {
262
+ errorOutput += `Process error: ${error.message}\n`;
263
+ });
264
+ // Send the prompt to the process
265
+ await this._processManager.sendInput(managedProcess.id, task.prompt);
266
+ // Close stdin to signal EOF (Claude Code waits for stdin to close in --print mode)
267
+ this._processManager.closeInput(managedProcess.id);
268
+ // Wait for process to complete
269
+ await this.waitForProcessExit(managedProcess, task.config.timeout);
270
+ // Build execution result
271
+ const endTime = new Date();
272
+ const result = {
273
+ taskId: task.id,
274
+ executionId: managedProcess.id,
275
+ success: managedProcess.exitCode === 0,
276
+ exitCode: managedProcess.exitCode ?? -1,
277
+ output,
278
+ error: errorOutput || undefined,
279
+ startedAt: startTime,
280
+ completedAt: endTime,
281
+ duration: endTime.getTime() - startTime.getTime(),
282
+ metadata: this.parseMetadata(output),
283
+ };
284
+ // Store result
285
+ this.completedResults.set(task.id, result);
286
+ // Update metrics
287
+ this.metrics.completedTasks++;
288
+ // Resolve promises for all waiters
289
+ const resolvers = this.taskResolvers.get(task.id);
290
+ if (resolvers) {
291
+ resolvers.forEach((resolver) => resolver.resolve(result));
292
+ this.taskResolvers.delete(task.id);
293
+ }
294
+ // Emit completion event
295
+ for (const handler of this.completeHandlers) {
296
+ handler(result);
297
+ }
298
+ // Release capacity
299
+ this.trackTaskComplete(task.id);
300
+ }
301
+ catch (error) {
302
+ // Handle execution failure
303
+ this.handleTaskFailure(task.id, error);
304
+ }
305
+ finally {
306
+ // Clean up process
307
+ if (managedProcess) {
308
+ try {
309
+ await this._processManager.releaseProcess(managedProcess.id);
310
+ }
311
+ catch {
312
+ // Ignore cleanup errors
313
+ }
314
+ }
315
+ }
316
+ }
317
+ /**
318
+ * Wait for a process to exit
319
+ *
320
+ * @param process - The managed process to wait for
321
+ * @param timeoutMs - Optional timeout in milliseconds
322
+ * @private
323
+ */
324
+ async waitForProcessExit(process, timeoutMs) {
325
+ return new Promise((resolve, reject) => {
326
+ // Check if already exited
327
+ if (process.exitCode !== null) {
328
+ resolve();
329
+ return;
330
+ }
331
+ // Set up exit listener
332
+ const checkInterval = setInterval(() => {
333
+ // Fetch fresh process state from manager to avoid stale references
334
+ const currentProcess = this._processManager.getProcess(process.id);
335
+ if (!currentProcess || currentProcess.exitCode !== null) {
336
+ clearInterval(checkInterval);
337
+ this.pollingIntervals.delete(process.id);
338
+ if (!currentProcess) {
339
+ reject(new Error("Process not found"));
340
+ }
341
+ else if (currentProcess.status === "crashed") {
342
+ reject(new Error(`Process crashed with exit code ${currentProcess.exitCode}`));
343
+ }
344
+ else {
345
+ resolve();
346
+ }
347
+ }
348
+ }, 10); // Poll every 10ms for responsive detection
349
+ // Track this interval for cleanup
350
+ this.pollingIntervals.set(process.id, checkInterval);
351
+ // Set timeout if configured
352
+ if (timeoutMs) {
353
+ setTimeout(() => {
354
+ clearInterval(checkInterval);
355
+ this.pollingIntervals.delete(process.id);
356
+ reject(new Error("Process execution timeout"));
357
+ }, timeoutMs);
358
+ }
359
+ });
360
+ }
361
+ /**
362
+ * Parse metadata from stream-json output
363
+ *
364
+ * Extracts tools used, files changed, tokens, etc. from the output.
365
+ *
366
+ * @param output - Raw output from Claude Code
367
+ * @returns Parsed metadata
368
+ * @private
369
+ */
370
+ parseMetadata(_output) {
371
+ // Stub for now - will enhance in future issues
372
+ // TODO: Parse stream-json output for metadata
373
+ return {
374
+ toolsUsed: [],
375
+ filesChanged: [],
376
+ tokensUsed: 0,
377
+ cost: 0,
378
+ };
379
+ }
380
+ /**
381
+ * Handle task failure
382
+ *
383
+ * Implements automatic retry logic if maxRetries is configured.
384
+ * Re-queues failed tasks at front of queue for priority retry.
385
+ *
386
+ * @param taskId - ID of failed task
387
+ * @param error - Error that occurred
388
+ * @private
389
+ */
390
+ handleTaskFailure(_taskId, _error) {
391
+ // Get running task to check retry eligibility
392
+ const runningTask = this.runningTasks.get(_taskId);
393
+ if (runningTask) {
394
+ const task = runningTask.task;
395
+ const maxRetries = task.config.maxRetries;
396
+ const currentAttempt = runningTask.attempt;
397
+ // Check if we should retry
398
+ if (maxRetries !== undefined && currentAttempt <= maxRetries) {
399
+ // Create retry task with incremented attempt
400
+ const retryTask = {
401
+ ...task,
402
+ metadata: {
403
+ ...task.metadata,
404
+ _retryAttempt: currentAttempt + 1,
405
+ },
406
+ };
407
+ // Re-queue at front for priority retry
408
+ this.taskQueue.unshift(retryTask);
409
+ this.metrics.queuedTasks++;
410
+ // Release capacity so retry can start
411
+ this.trackTaskComplete(_taskId);
412
+ // Don't emit failure or store result yet - will retry
413
+ // Note: Don't call processQueue() here, it will be called by trackTaskComplete
414
+ return;
415
+ }
416
+ }
417
+ // No retries left or maxRetries not configured - proceed with final failure
418
+ // Create a failed execution result
419
+ const now = new Date();
420
+ const failedResult = {
421
+ taskId: _taskId,
422
+ executionId: `failed-${_taskId}`,
423
+ success: false,
424
+ exitCode: -1,
425
+ output: "",
426
+ error: _error.message,
427
+ startedAt: now,
428
+ completedAt: now,
429
+ duration: 0,
430
+ metadata: {
431
+ toolsUsed: [],
432
+ filesChanged: [],
433
+ tokensUsed: 0,
434
+ cost: 0,
435
+ },
436
+ };
437
+ // Store the failed result so dependent tasks can check it
438
+ this.completedResults.set(_taskId, failedResult);
439
+ // Update metrics
440
+ this.metrics.failedTasks++;
441
+ // Release capacity
442
+ this.trackTaskComplete(_taskId);
443
+ // Reject promises for all waiters
444
+ const resolvers = this.taskResolvers.get(_taskId);
445
+ if (resolvers) {
446
+ resolvers.forEach((resolver) => resolver.reject(_error));
447
+ this.taskResolvers.delete(_taskId);
448
+ }
449
+ // Emit event
450
+ for (const handler of this.failedHandlers) {
451
+ handler(_taskId, _error);
452
+ }
453
+ }
454
+ /**
455
+ * Cancel a queued or running task
456
+ *
457
+ * Removes task from queue if still queued, or terminates process if running.
458
+ * Idempotent - safe to call multiple times or for non-existent tasks.
459
+ *
460
+ * @param taskId - ID of task to cancel
461
+ */
462
+ async cancelTask(taskId) {
463
+ // Check if task is in queue
464
+ const queueIndex = this.taskQueue.findIndex((t) => t.id === taskId);
465
+ if (queueIndex >= 0) {
466
+ // Remove from queue
467
+ this.taskQueue.splice(queueIndex, 1);
468
+ this.metrics.queuedTasks--;
469
+ return; // Task cancelled before execution
470
+ }
471
+ // Check if task is currently running
472
+ const runningTask = this.runningTasks.get(taskId);
473
+ if (runningTask) {
474
+ // Clear polling interval if exists
475
+ const interval = this.pollingIntervals.get(runningTask.process.id);
476
+ if (interval) {
477
+ clearInterval(interval);
478
+ this.pollingIntervals.delete(runningTask.process.id);
479
+ }
480
+ // Terminate the running process
481
+ try {
482
+ await this._processManager.terminateProcess(runningTask.process.id);
483
+ }
484
+ catch (error) {
485
+ // Ignore termination errors - process may already be dead
486
+ }
487
+ // Clean up running task tracking
488
+ this.runningTasks.delete(taskId);
489
+ // Update metrics
490
+ this.metrics.currentlyRunning = this.runningTasks.size;
491
+ this.metrics.availableSlots =
492
+ this.metrics.maxConcurrent - this.runningTasks.size;
493
+ // Process queue to start next task
494
+ this.processQueue();
495
+ return; // Task cancelled during execution
496
+ }
497
+ // Task not found in queue or running - either completed or never existed
498
+ // This is idempotent, so we just return without error
499
+ }
500
+ /**
501
+ * Get current status of a task
502
+ */
503
+ getTaskStatus(taskId) {
504
+ // Check completed
505
+ const result = this.completedResults.get(taskId);
506
+ if (result) {
507
+ return { state: "completed", result };
508
+ }
509
+ // Check running
510
+ const running = this.runningTasks.get(taskId);
511
+ if (running) {
512
+ return {
513
+ state: "running",
514
+ processId: running.process.id,
515
+ startedAt: running.startedAt,
516
+ };
517
+ }
518
+ // Check queued
519
+ const queuePos = this.taskQueue.findIndex((t) => t.id === taskId);
520
+ if (queuePos >= 0) {
521
+ return { state: "queued", position: queuePos };
522
+ }
523
+ return null;
524
+ }
525
+ /**
526
+ * Wait for a task to complete
527
+ *
528
+ * Returns a promise that resolves with the task result when complete.
529
+ * Supports multiple concurrent waiters for the same task.
530
+ *
531
+ * @param taskId - ID of the task to wait for
532
+ * @returns Promise resolving to the execution result
533
+ */
534
+ async waitForTask(taskId) {
535
+ // Check if already completed
536
+ const existing = this.completedResults.get(taskId);
537
+ if (existing)
538
+ return existing;
539
+ // Wait for completion - support multiple concurrent waiters
540
+ return new Promise((resolve, reject) => {
541
+ const resolvers = this.taskResolvers.get(taskId) || [];
542
+ resolvers.push({ resolve, reject });
543
+ this.taskResolvers.set(taskId, resolvers);
544
+ });
545
+ }
546
+ /**
547
+ * Wait for multiple tasks to complete
548
+ *
549
+ * Returns a promise that resolves when all tasks complete.
550
+ *
551
+ * @param taskIds - Array of task IDs to wait for
552
+ * @returns Promise resolving to array of execution results
553
+ */
554
+ async waitForTasks(taskIds) {
555
+ return Promise.all(taskIds.map((id) => this.waitForTask(id)));
556
+ }
557
+ /**
558
+ * Get current engine metrics
559
+ *
560
+ * Returns defensive copy of current metrics.
561
+ *
562
+ * @returns Current engine metrics
563
+ */
564
+ getMetrics() {
565
+ // Return defensive copy
566
+ return { ...this.metrics };
567
+ }
568
+ /**
569
+ * Register handler for task completion events
570
+ */
571
+ onTaskComplete(handler) {
572
+ this.completeHandlers.push(handler);
573
+ }
574
+ /**
575
+ * Register handler for task failure events
576
+ */
577
+ onTaskFailed(handler) {
578
+ this.failedHandlers.push(handler);
579
+ }
580
+ /**
581
+ * Gracefully shutdown the engine
582
+ *
583
+ * Cancels all running tasks, clears the queue, and shuts down the process manager.
584
+ * Idempotent - safe to call multiple times.
585
+ */
586
+ async shutdown() {
587
+ // Clear the task queue (prevent new tasks from starting)
588
+ this.taskQueue = [];
589
+ this.metrics.queuedTasks = 0;
590
+ // Cancel all running tasks
591
+ const runningTaskIds = Array.from(this.runningTasks.keys());
592
+ await Promise.all(runningTaskIds.map((id) => this.cancelTask(id)));
593
+ // Clear all polling intervals
594
+ for (const [processId, interval] of this.pollingIntervals.entries()) {
595
+ clearInterval(interval);
596
+ this.pollingIntervals.delete(processId);
597
+ }
598
+ // Shutdown the process manager
599
+ await this._processManager.shutdown();
600
+ // Clear all internal state
601
+ this.runningTasks.clear();
602
+ this.completedResults.clear();
603
+ this.taskResolvers.clear();
604
+ this.completeHandlers = [];
605
+ this.failedHandlers = [];
606
+ // Reset metrics
607
+ this.metrics.currentlyRunning = 0;
608
+ this.metrics.availableSlots = this.metrics.maxConcurrent;
609
+ }
610
+ }
611
+ //# sourceMappingURL=simple-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-engine.js","sourceRoot":"","sources":["../../../src/execution/engine/simple-engine.ts"],"names":[],"mappings":"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"}