crewly 1.0.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 (1208) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +96 -0
  3. package/config/auto-assign/default-config.yaml +74 -0
  4. package/config/constants.d.ts.map +1 -0
  5. package/config/constants.test.ts +469 -0
  6. package/config/constants.ts +827 -0
  7. package/config/continuation/prompts/continue-work.md +60 -0
  8. package/config/continuation/prompts/max-iterations.md +41 -0
  9. package/config/continuation/prompts/quality-gates-failed.md +37 -0
  10. package/config/continuation/prompts/retry-error.md +59 -0
  11. package/config/continuation/prompts/task-assignment.md +60 -0
  12. package/config/index.d.ts.map +1 -0
  13. package/config/index.ts +87 -0
  14. package/config/orchestrator_tasks/prompts/assign-task-orchestrator-prompt-template.md +70 -0
  15. package/config/orchestrator_tasks/prompts/checkin-orchestrator-prompt-template.md +138 -0
  16. package/config/orchestrator_tasks/prompts/orchestrator-prompt.md +68 -0
  17. package/config/orchestrator_tasks/prompts/project-start-orchestrator-prompt-template.md +104 -0
  18. package/config/quality-gates/default-gates.test.ts +246 -0
  19. package/config/quality-gates/default-gates.ts +191 -0
  20. package/config/quality-gates/index.ts +21 -0
  21. package/config/roles/_common/memory-instructions.md +56 -0
  22. package/config/roles/architect/prompt.md +87 -0
  23. package/config/roles/architect/role.json +13 -0
  24. package/config/roles/backend-developer/prompt.md +86 -0
  25. package/config/roles/backend-developer/role.json +13 -0
  26. package/config/roles/designer/prompt.md +86 -0
  27. package/config/roles/designer/role.json +13 -0
  28. package/config/roles/developer/prompt.md +94 -0
  29. package/config/roles/developer/role.json +13 -0
  30. package/config/roles/frontend-developer/prompt.md +86 -0
  31. package/config/roles/frontend-developer/role.json +13 -0
  32. package/config/roles/fullstack-dev/prompt.md +86 -0
  33. package/config/roles/fullstack-dev/role.json +13 -0
  34. package/config/roles/generalist/prompt.md +87 -0
  35. package/config/roles/generalist/role.json +13 -0
  36. package/config/roles/orchestrator/prompt.md +865 -0
  37. package/config/roles/orchestrator/role.json +13 -0
  38. package/config/roles/product-manager/prompt.md +86 -0
  39. package/config/roles/product-manager/role.json +13 -0
  40. package/config/roles/qa/prompt.md +86 -0
  41. package/config/roles/qa/role.json +13 -0
  42. package/config/roles/qa-engineer/prompt.md +86 -0
  43. package/config/roles/qa-engineer/role.json +13 -0
  44. package/config/roles/sales/prompt.md +86 -0
  45. package/config/roles/sales/role.json +13 -0
  46. package/config/roles/support/prompt.md +86 -0
  47. package/config/roles/support/role.json +13 -0
  48. package/config/roles/tpm/prompt.md +87 -0
  49. package/config/roles/tpm/role.json +13 -0
  50. package/config/runtime_scripts/initialize_claude.sh +14 -0
  51. package/config/runtime_scripts/initialize_codex.sh +14 -0
  52. package/config/runtime_scripts/runtime-config.json +26 -0
  53. package/config/skills/_common/lib.sh +64 -0
  54. package/config/skills/agent/_common/lib.sh +4 -0
  55. package/config/skills/agent/accept-task/execute.sh +21 -0
  56. package/config/skills/agent/accept-task/instructions.md +20 -0
  57. package/config/skills/agent/accept-task/skill.json +20 -0
  58. package/config/skills/agent/block-task/execute.sh +26 -0
  59. package/config/skills/agent/block-task/instructions.md +22 -0
  60. package/config/skills/agent/block-task/skill.json +20 -0
  61. package/config/skills/agent/check-quality-gates/execute.sh +20 -0
  62. package/config/skills/agent/check-quality-gates/instructions.md +23 -0
  63. package/config/skills/agent/check-quality-gates/skill.json +20 -0
  64. package/config/skills/agent/complete-task/execute.sh +26 -0
  65. package/config/skills/agent/complete-task/instructions.md +22 -0
  66. package/config/skills/agent/complete-task/skill.json +20 -0
  67. package/config/skills/agent/get-my-context/execute.sh +23 -0
  68. package/config/skills/agent/get-my-context/instructions.md +21 -0
  69. package/config/skills/agent/get-my-context/skill.json +20 -0
  70. package/config/skills/agent/get-sops/execute.sh +24 -0
  71. package/config/skills/agent/get-sops/instructions.md +21 -0
  72. package/config/skills/agent/get-sops/skill.json +20 -0
  73. package/config/skills/agent/get-team-status/execute.sh +8 -0
  74. package/config/skills/agent/get-team-status/instructions.md +17 -0
  75. package/config/skills/agent/get-team-status/skill.json +20 -0
  76. package/config/skills/agent/manage-knowledge/execute.sh +60 -0
  77. package/config/skills/agent/manage-knowledge/instructions.md +46 -0
  78. package/config/skills/agent/nano-banana-image/.env +2 -0
  79. package/config/skills/agent/nano-banana-image/.env.example +6 -0
  80. package/config/skills/agent/nano-banana-image/generate.sh +73 -0
  81. package/config/skills/agent/nano-banana-image/instructions.md +50 -0
  82. package/config/skills/agent/nano-banana-image/skill.json +39 -0
  83. package/config/skills/agent/query-knowledge/execute.sh +30 -0
  84. package/config/skills/agent/query-knowledge/instructions.md +47 -0
  85. package/config/skills/agent/query-knowledge/skill.json +20 -0
  86. package/config/skills/agent/read-task/execute.sh +15 -0
  87. package/config/skills/agent/read-task/instructions.md +19 -0
  88. package/config/skills/agent/read-task/skill.json +20 -0
  89. package/config/skills/agent/recall/execute.sh +24 -0
  90. package/config/skills/agent/recall/instructions.md +23 -0
  91. package/config/skills/agent/recall/skill.json +20 -0
  92. package/config/skills/agent/record-learning/execute.sh +29 -0
  93. package/config/skills/agent/record-learning/instructions.md +24 -0
  94. package/config/skills/agent/record-learning/skill.json +20 -0
  95. package/config/skills/agent/register-self/execute.sh +28 -0
  96. package/config/skills/agent/register-self/instructions.md +18 -0
  97. package/config/skills/agent/register-self/skill.json +20 -0
  98. package/config/skills/agent/remember/execute.sh +29 -0
  99. package/config/skills/agent/remember/instructions.md +24 -0
  100. package/config/skills/agent/remember/skill.json +20 -0
  101. package/config/skills/agent/report-progress/execute.sh +28 -0
  102. package/config/skills/agent/report-progress/instructions.md +25 -0
  103. package/config/skills/agent/report-progress/skill.json +20 -0
  104. package/config/skills/agent/report-status/execute.sh +35 -0
  105. package/config/skills/agent/report-status/instructions.md +36 -0
  106. package/config/skills/agent/report-status/skill.json +20 -0
  107. package/config/skills/agent/send-chat-response/execute.sh +26 -0
  108. package/config/skills/agent/send-chat-response/instructions.md +22 -0
  109. package/config/skills/agent/send-chat-response/skill.json +20 -0
  110. package/config/skills/agent/send-message/execute.sh +17 -0
  111. package/config/skills/agent/send-message/instructions.md +20 -0
  112. package/config/skills/agent/send-message/skill.json +20 -0
  113. package/config/skills/agent/send-pdf-to-slack/execute.sh +182 -0
  114. package/config/skills/agent/send-pdf-to-slack/instructions.md +49 -0
  115. package/config/skills/agent/send-pdf-to-slack/skill.json +20 -0
  116. package/config/skills/chrome-browser/instructions.md +42 -0
  117. package/config/skills/chrome-browser/skill.json +39 -0
  118. package/config/skills/nano-banana-image/.env +2 -0
  119. package/config/skills/nano-banana-image/.env.example +6 -0
  120. package/config/skills/nano-banana-image/generate.sh +73 -0
  121. package/config/skills/nano-banana-image/instructions.md +50 -0
  122. package/config/skills/nano-banana-image/skill.json +39 -0
  123. package/config/skills/orchestrator/_common/lib.sh +4 -0
  124. package/config/skills/orchestrator/assign-task/execute.sh +11 -0
  125. package/config/skills/orchestrator/assign-task/instructions.md +17 -0
  126. package/config/skills/orchestrator/assign-task/skill.json +20 -0
  127. package/config/skills/orchestrator/assign-team-to-project/execute.sh +14 -0
  128. package/config/skills/orchestrator/assign-team-to-project/instructions.md +20 -0
  129. package/config/skills/orchestrator/assign-team-to-project/skill.json +20 -0
  130. package/config/skills/orchestrator/broadcast/execute.sh +35 -0
  131. package/config/skills/orchestrator/broadcast/instructions.md +19 -0
  132. package/config/skills/orchestrator/broadcast/skill.json +20 -0
  133. package/config/skills/orchestrator/cancel-schedule/execute.sh +13 -0
  134. package/config/skills/orchestrator/cancel-schedule/instructions.md +19 -0
  135. package/config/skills/orchestrator/cancel-schedule/skill.json +20 -0
  136. package/config/skills/orchestrator/complete-task/execute.sh +10 -0
  137. package/config/skills/orchestrator/complete-task/instructions.md +17 -0
  138. package/config/skills/orchestrator/complete-task/skill.json +20 -0
  139. package/config/skills/orchestrator/create-project/execute.sh +14 -0
  140. package/config/skills/orchestrator/create-project/instructions.md +21 -0
  141. package/config/skills/orchestrator/create-project/skill.json +20 -0
  142. package/config/skills/orchestrator/create-team/execute.sh +14 -0
  143. package/config/skills/orchestrator/create-team/instructions.md +21 -0
  144. package/config/skills/orchestrator/create-team/skill.json +20 -0
  145. package/config/skills/orchestrator/delegate-task/execute.sh +37 -0
  146. package/config/skills/orchestrator/delegate-task/instructions.md +23 -0
  147. package/config/skills/orchestrator/delegate-task/skill.json +20 -0
  148. package/config/skills/orchestrator/get-agent-logs/execute.sh +14 -0
  149. package/config/skills/orchestrator/get-agent-logs/instructions.md +20 -0
  150. package/config/skills/orchestrator/get-agent-logs/skill.json +20 -0
  151. package/config/skills/orchestrator/get-agent-status/execute.sh +22 -0
  152. package/config/skills/orchestrator/get-agent-status/instructions.md +19 -0
  153. package/config/skills/orchestrator/get-agent-status/skill.json +20 -0
  154. package/config/skills/orchestrator/get-project-overview/execute.sh +7 -0
  155. package/config/skills/orchestrator/get-project-overview/instructions.md +17 -0
  156. package/config/skills/orchestrator/get-project-overview/skill.json +20 -0
  157. package/config/skills/orchestrator/get-tasks/execute.sh +27 -0
  158. package/config/skills/orchestrator/get-tasks/instructions.md +17 -0
  159. package/config/skills/orchestrator/get-tasks/skill.json +20 -0
  160. package/config/skills/orchestrator/get-team-status/execute.sh +7 -0
  161. package/config/skills/orchestrator/get-team-status/instructions.md +17 -0
  162. package/config/skills/orchestrator/get-team-status/skill.json +20 -0
  163. package/config/skills/orchestrator/heartbeat/execute.sh +37 -0
  164. package/config/skills/orchestrator/heartbeat/instructions.md +24 -0
  165. package/config/skills/orchestrator/heartbeat/skill.json +20 -0
  166. package/config/skills/orchestrator/list-subscriptions/execute.sh +7 -0
  167. package/config/skills/orchestrator/list-subscriptions/instructions.md +17 -0
  168. package/config/skills/orchestrator/list-subscriptions/skill.json +20 -0
  169. package/config/skills/orchestrator/query-knowledge/execute.sh +30 -0
  170. package/config/skills/orchestrator/query-knowledge/instructions.md +47 -0
  171. package/config/skills/orchestrator/query-knowledge/skill.json +20 -0
  172. package/config/skills/orchestrator/recall/execute.sh +13 -0
  173. package/config/skills/orchestrator/recall/instructions.md +23 -0
  174. package/config/skills/orchestrator/recall/skill.json +20 -0
  175. package/config/skills/orchestrator/record-failure/execute.sh +13 -0
  176. package/config/skills/orchestrator/record-failure/instructions.md +22 -0
  177. package/config/skills/orchestrator/record-failure/skill.json +20 -0
  178. package/config/skills/orchestrator/record-learning/execute.sh +13 -0
  179. package/config/skills/orchestrator/record-learning/instructions.md +23 -0
  180. package/config/skills/orchestrator/record-learning/skill.json +20 -0
  181. package/config/skills/orchestrator/record-success/execute.sh +13 -0
  182. package/config/skills/orchestrator/record-success/instructions.md +22 -0
  183. package/config/skills/orchestrator/record-success/skill.json +20 -0
  184. package/config/skills/orchestrator/register-self/execute.sh +24 -0
  185. package/config/skills/orchestrator/register-self/instructions.md +21 -0
  186. package/config/skills/orchestrator/register-self/skill.json +20 -0
  187. package/config/skills/orchestrator/remember/execute.sh +15 -0
  188. package/config/skills/orchestrator/remember/instructions.md +24 -0
  189. package/config/skills/orchestrator/remember/skill.json +20 -0
  190. package/config/skills/orchestrator/reply-slack/execute.sh +174 -0
  191. package/config/skills/orchestrator/reply-slack/instructions.md +52 -0
  192. package/config/skills/orchestrator/reply-slack/skill.json +20 -0
  193. package/config/skills/orchestrator/restart-crewly/execute.sh +7 -0
  194. package/config/skills/orchestrator/restart-crewly/instructions.md +23 -0
  195. package/config/skills/orchestrator/restart-crewly/skill.json +20 -0
  196. package/config/skills/orchestrator/resume-session/execute.sh +22 -0
  197. package/config/skills/orchestrator/resume-session/instructions.md +31 -0
  198. package/config/skills/orchestrator/resume-session/skill.json +20 -0
  199. package/config/skills/orchestrator/schedule-check/execute.sh +35 -0
  200. package/config/skills/orchestrator/schedule-check/instructions.md +35 -0
  201. package/config/skills/orchestrator/schedule-check/skill.json +20 -0
  202. package/config/skills/orchestrator/send-key/execute.sh +17 -0
  203. package/config/skills/orchestrator/send-message/execute.sh +17 -0
  204. package/config/skills/orchestrator/send-message/instructions.md +20 -0
  205. package/config/skills/orchestrator/send-message/skill.json +20 -0
  206. package/config/skills/orchestrator/send-pdf-to-slack/execute.sh +182 -0
  207. package/config/skills/orchestrator/send-pdf-to-slack/instructions.md +49 -0
  208. package/config/skills/orchestrator/send-pdf-to-slack/skill.json +20 -0
  209. package/config/skills/orchestrator/set-goal/execute.sh +13 -0
  210. package/config/skills/orchestrator/set-goal/instructions.md +21 -0
  211. package/config/skills/orchestrator/set-goal/skill.json +20 -0
  212. package/config/skills/orchestrator/start-agent/execute.sh +15 -0
  213. package/config/skills/orchestrator/start-agent/instructions.md +20 -0
  214. package/config/skills/orchestrator/start-agent/skill.json +20 -0
  215. package/config/skills/orchestrator/start-team/execute.sh +14 -0
  216. package/config/skills/orchestrator/start-team/instructions.md +20 -0
  217. package/config/skills/orchestrator/start-team/skill.json +20 -0
  218. package/config/skills/orchestrator/stop-agent/execute.sh +15 -0
  219. package/config/skills/orchestrator/stop-agent/instructions.md +20 -0
  220. package/config/skills/orchestrator/stop-agent/skill.json +20 -0
  221. package/config/skills/orchestrator/stop-team/execute.sh +13 -0
  222. package/config/skills/orchestrator/stop-team/instructions.md +19 -0
  223. package/config/skills/orchestrator/stop-team/skill.json +20 -0
  224. package/config/skills/orchestrator/subscribe-event/execute.sh +19 -0
  225. package/config/skills/orchestrator/subscribe-event/instructions.md +21 -0
  226. package/config/skills/orchestrator/subscribe-event/skill.json +20 -0
  227. package/config/skills/orchestrator/terminate-agent/execute.sh +13 -0
  228. package/config/skills/orchestrator/terminate-agent/instructions.md +19 -0
  229. package/config/skills/orchestrator/terminate-agent/skill.json +20 -0
  230. package/config/skills/orchestrator/unsubscribe-event/execute.sh +13 -0
  231. package/config/skills/orchestrator/unsubscribe-event/instructions.md +19 -0
  232. package/config/skills/orchestrator/unsubscribe-event/skill.json +20 -0
  233. package/config/skills/orchestrator/update-focus/execute.sh +13 -0
  234. package/config/skills/orchestrator/update-focus/instructions.md +21 -0
  235. package/config/skills/orchestrator/update-focus/skill.json +20 -0
  236. package/config/skills/playwright-chrome-browser/instructions.md +95 -0
  237. package/config/skills/playwright-chrome-browser/skill.json +44 -0
  238. package/config/sops/common/blocker-handling.md +55 -0
  239. package/config/sops/common/communication-protocol.md +52 -0
  240. package/config/sops/developer/coding-standards.md +54 -0
  241. package/config/sops/developer/git-workflow.md +58 -0
  242. package/config/sops/developer/testing-requirements.md +62 -0
  243. package/config/sops/pm/progress-tracking.md +57 -0
  244. package/config/sops/pm/task-decomposition.md +59 -0
  245. package/config/sops/qa/testing-procedures.md +60 -0
  246. package/config/task_assignment/prompts/target-agent-assignment-prompt.md +119 -0
  247. package/config/task_starters/build_e2e_test_plan_prompt.json +51 -0
  248. package/config/task_starters/build_spec_prompt.json +79 -0
  249. package/config/task_starters/build_tasks_prompt.json +55 -0
  250. package/config/task_starters/prompts/build_spec_step1_project_requirements.md +120 -0
  251. package/config/task_starters/prompts/build_spec_step2_technical_design.md +147 -0
  252. package/config/task_starters/prompts/build_spec_step3_integration_testing.md +196 -0
  253. package/config/task_starters/prompts/build_tasks_step1_milestone_structure.md +274 -0
  254. package/config/task_starters/prompts/e2e_test_plan_step1_build_tests.md +391 -0
  255. package/config/task_starters/prompts/e2e_test_plan_step2_run_tests.md +240 -0
  256. package/dist/backend/backend/src/constants.d.ts +669 -0
  257. package/dist/backend/backend/src/constants.d.ts.map +1 -0
  258. package/dist/backend/backend/src/constants.js +482 -0
  259. package/dist/backend/backend/src/constants.js.map +1 -0
  260. package/dist/backend/backend/src/controllers/api.controller.d.ts +115 -0
  261. package/dist/backend/backend/src/controllers/api.controller.d.ts.map +1 -0
  262. package/dist/backend/backend/src/controllers/api.controller.js +427 -0
  263. package/dist/backend/backend/src/controllers/api.controller.js.map +1 -0
  264. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +160 -0
  265. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -0
  266. package/dist/backend/backend/src/controllers/chat/chat.controller.js +555 -0
  267. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -0
  268. package/dist/backend/backend/src/controllers/chat/chat.routes.d.ts +18 -0
  269. package/dist/backend/backend/src/controllers/chat/chat.routes.d.ts.map +1 -0
  270. package/dist/backend/backend/src/controllers/chat/chat.routes.js +39 -0
  271. package/dist/backend/backend/src/controllers/chat/chat.routes.js.map +1 -0
  272. package/dist/backend/backend/src/controllers/chat/index.d.ts +10 -0
  273. package/dist/backend/backend/src/controllers/chat/index.d.ts.map +1 -0
  274. package/dist/backend/backend/src/controllers/chat/index.js +10 -0
  275. package/dist/backend/backend/src/controllers/chat/index.js.map +1 -0
  276. package/dist/backend/backend/src/controllers/event-bus/event-bus.controller.d.ts +54 -0
  277. package/dist/backend/backend/src/controllers/event-bus/event-bus.controller.d.ts.map +1 -0
  278. package/dist/backend/backend/src/controllers/event-bus/event-bus.controller.js +123 -0
  279. package/dist/backend/backend/src/controllers/event-bus/event-bus.controller.js.map +1 -0
  280. package/dist/backend/backend/src/controllers/event-bus/event-bus.routes.d.ts +15 -0
  281. package/dist/backend/backend/src/controllers/event-bus/event-bus.routes.d.ts.map +1 -0
  282. package/dist/backend/backend/src/controllers/event-bus/event-bus.routes.js +27 -0
  283. package/dist/backend/backend/src/controllers/event-bus/event-bus.routes.js.map +1 -0
  284. package/dist/backend/backend/src/controllers/index.d.ts +10 -0
  285. package/dist/backend/backend/src/controllers/index.d.ts.map +1 -0
  286. package/dist/backend/backend/src/controllers/index.js +37 -0
  287. package/dist/backend/backend/src/controllers/index.js.map +1 -0
  288. package/dist/backend/backend/src/controllers/knowledge/index.d.ts +7 -0
  289. package/dist/backend/backend/src/controllers/knowledge/index.d.ts.map +1 -0
  290. package/dist/backend/backend/src/controllers/knowledge/index.js +7 -0
  291. package/dist/backend/backend/src/controllers/knowledge/index.js.map +1 -0
  292. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts +71 -0
  293. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts.map +1 -0
  294. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js +237 -0
  295. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js.map +1 -0
  296. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts +24 -0
  297. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts.map +1 -0
  298. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js +34 -0
  299. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js.map +1 -0
  300. package/dist/backend/backend/src/controllers/marketplace/index.d.ts +11 -0
  301. package/dist/backend/backend/src/controllers/marketplace/index.d.ts.map +1 -0
  302. package/dist/backend/backend/src/controllers/marketplace/index.js +11 -0
  303. package/dist/backend/backend/src/controllers/marketplace/index.js.map +1 -0
  304. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts +135 -0
  305. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts.map +1 -0
  306. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js +228 -0
  307. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js.map +1 -0
  308. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts +30 -0
  309. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -0
  310. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +44 -0
  311. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -0
  312. package/dist/backend/backend/src/controllers/memory/index.d.ts +11 -0
  313. package/dist/backend/backend/src/controllers/memory/index.d.ts.map +1 -0
  314. package/dist/backend/backend/src/controllers/memory/index.js +11 -0
  315. package/dist/backend/backend/src/controllers/memory/index.js.map +1 -0
  316. package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts +183 -0
  317. package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts.map +1 -0
  318. package/dist/backend/backend/src/controllers/memory/memory.controller.js +505 -0
  319. package/dist/backend/backend/src/controllers/memory/memory.controller.js.map +1 -0
  320. package/dist/backend/backend/src/controllers/memory/memory.routes.d.ts +30 -0
  321. package/dist/backend/backend/src/controllers/memory/memory.routes.d.ts.map +1 -0
  322. package/dist/backend/backend/src/controllers/memory/memory.routes.js +46 -0
  323. package/dist/backend/backend/src/controllers/memory/memory.routes.js.map +1 -0
  324. package/dist/backend/backend/src/controllers/messaging/delivery-logs.controller.d.ts +5 -0
  325. package/dist/backend/backend/src/controllers/messaging/delivery-logs.controller.d.ts.map +1 -0
  326. package/dist/backend/backend/src/controllers/messaging/delivery-logs.controller.js +21 -0
  327. package/dist/backend/backend/src/controllers/messaging/delivery-logs.controller.js.map +1 -0
  328. package/dist/backend/backend/src/controllers/messaging/messaging.controller.d.ts +72 -0
  329. package/dist/backend/backend/src/controllers/messaging/messaging.controller.d.ts.map +1 -0
  330. package/dist/backend/backend/src/controllers/messaging/messaging.controller.js +164 -0
  331. package/dist/backend/backend/src/controllers/messaging/messaging.controller.js.map +1 -0
  332. package/dist/backend/backend/src/controllers/messaging/messaging.routes.d.ts +15 -0
  333. package/dist/backend/backend/src/controllers/messaging/messaging.routes.d.ts.map +1 -0
  334. package/dist/backend/backend/src/controllers/messaging/messaging.routes.js +31 -0
  335. package/dist/backend/backend/src/controllers/messaging/messaging.routes.js.map +1 -0
  336. package/dist/backend/backend/src/controllers/messaging/scheduled-messages.controller.d.ts +10 -0
  337. package/dist/backend/backend/src/controllers/messaging/scheduled-messages.controller.d.ts.map +1 -0
  338. package/dist/backend/backend/src/controllers/messaging/scheduled-messages.controller.js +223 -0
  339. package/dist/backend/backend/src/controllers/messaging/scheduled-messages.controller.js.map +1 -0
  340. package/dist/backend/backend/src/controllers/monitoring/file-watcher.controller.d.ts +121 -0
  341. package/dist/backend/backend/src/controllers/monitoring/file-watcher.controller.d.ts.map +1 -0
  342. package/dist/backend/backend/src/controllers/monitoring/file-watcher.controller.js +392 -0
  343. package/dist/backend/backend/src/controllers/monitoring/file-watcher.controller.js.map +1 -0
  344. package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.d.ts +9 -0
  345. package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.d.ts.map +1 -0
  346. package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.js +15 -0
  347. package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.js.map +1 -0
  348. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +117 -0
  349. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -0
  350. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +705 -0
  351. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -0
  352. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts +22 -0
  353. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts.map +1 -0
  354. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js +465 -0
  355. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js.map +1 -0
  356. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.routes.d.ts +9 -0
  357. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.routes.d.ts.map +1 -0
  358. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.routes.js +26 -0
  359. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.routes.js.map +1 -0
  360. package/dist/backend/backend/src/controllers/project/git.controller.d.ts +10 -0
  361. package/dist/backend/backend/src/controllers/project/git.controller.d.ts.map +1 -0
  362. package/dist/backend/backend/src/controllers/project/git.controller.js +160 -0
  363. package/dist/backend/backend/src/controllers/project/git.controller.js.map +1 -0
  364. package/dist/backend/backend/src/controllers/project/project.controller.d.ts +41 -0
  365. package/dist/backend/backend/src/controllers/project/project.controller.d.ts.map +1 -0
  366. package/dist/backend/backend/src/controllers/project/project.controller.js +1126 -0
  367. package/dist/backend/backend/src/controllers/project/project.controller.js.map +1 -0
  368. package/dist/backend/backend/src/controllers/project/project.routes.d.ts +19 -0
  369. package/dist/backend/backend/src/controllers/project/project.routes.d.ts.map +1 -0
  370. package/dist/backend/backend/src/controllers/project/project.routes.js +141 -0
  371. package/dist/backend/backend/src/controllers/project/project.routes.js.map +1 -0
  372. package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.d.ts +32 -0
  373. package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.d.ts.map +1 -0
  374. package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.js +57 -0
  375. package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.js.map +1 -0
  376. package/dist/backend/backend/src/controllers/request-types.d.ts +225 -0
  377. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -0
  378. package/dist/backend/backend/src/controllers/request-types.js +8 -0
  379. package/dist/backend/backend/src/controllers/request-types.js.map +1 -0
  380. package/dist/backend/backend/src/controllers/self-improvement/index.d.ts +9 -0
  381. package/dist/backend/backend/src/controllers/self-improvement/index.d.ts.map +1 -0
  382. package/dist/backend/backend/src/controllers/self-improvement/index.js +9 -0
  383. package/dist/backend/backend/src/controllers/self-improvement/index.js.map +1 -0
  384. package/dist/backend/backend/src/controllers/self-improvement/self-improvement.controller.d.ts +11 -0
  385. package/dist/backend/backend/src/controllers/self-improvement/self-improvement.controller.d.ts.map +1 -0
  386. package/dist/backend/backend/src/controllers/self-improvement/self-improvement.controller.js +166 -0
  387. package/dist/backend/backend/src/controllers/self-improvement/self-improvement.controller.js.map +1 -0
  388. package/dist/backend/backend/src/controllers/session/session.controller.d.ts +80 -0
  389. package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -0
  390. package/dist/backend/backend/src/controllers/session/session.controller.js +275 -0
  391. package/dist/backend/backend/src/controllers/session/session.controller.js.map +1 -0
  392. package/dist/backend/backend/src/controllers/session/session.routes.d.ts +19 -0
  393. package/dist/backend/backend/src/controllers/session/session.routes.d.ts.map +1 -0
  394. package/dist/backend/backend/src/controllers/session/session.routes.js +33 -0
  395. package/dist/backend/backend/src/controllers/session/session.routes.js.map +1 -0
  396. package/dist/backend/backend/src/controllers/settings/index.d.ts +18 -0
  397. package/dist/backend/backend/src/controllers/settings/index.d.ts.map +1 -0
  398. package/dist/backend/backend/src/controllers/settings/index.js +27 -0
  399. package/dist/backend/backend/src/controllers/settings/index.js.map +1 -0
  400. package/dist/backend/backend/src/controllers/settings/role.controller.d.ts +10 -0
  401. package/dist/backend/backend/src/controllers/settings/role.controller.d.ts.map +1 -0
  402. package/dist/backend/backend/src/controllers/settings/role.controller.js +365 -0
  403. package/dist/backend/backend/src/controllers/settings/role.controller.js.map +1 -0
  404. package/dist/backend/backend/src/controllers/settings/settings.controller.d.ts +10 -0
  405. package/dist/backend/backend/src/controllers/settings/settings.controller.d.ts.map +1 -0
  406. package/dist/backend/backend/src/controllers/settings/settings.controller.js +176 -0
  407. package/dist/backend/backend/src/controllers/settings/settings.controller.js.map +1 -0
  408. package/dist/backend/backend/src/controllers/skill/index.d.ts +17 -0
  409. package/dist/backend/backend/src/controllers/skill/index.d.ts.map +1 -0
  410. package/dist/backend/backend/src/controllers/skill/index.js +18 -0
  411. package/dist/backend/backend/src/controllers/skill/index.js.map +1 -0
  412. package/dist/backend/backend/src/controllers/skill/skill.controller.d.ts +10 -0
  413. package/dist/backend/backend/src/controllers/skill/skill.controller.d.ts.map +1 -0
  414. package/dist/backend/backend/src/controllers/skill/skill.controller.js +423 -0
  415. package/dist/backend/backend/src/controllers/skill/skill.controller.js.map +1 -0
  416. package/dist/backend/backend/src/controllers/slack/index.d.ts +17 -0
  417. package/dist/backend/backend/src/controllers/slack/index.d.ts.map +1 -0
  418. package/dist/backend/backend/src/controllers/slack/index.js +18 -0
  419. package/dist/backend/backend/src/controllers/slack/index.js.map +1 -0
  420. package/dist/backend/backend/src/controllers/slack/slack-thread.controller.d.ts +22 -0
  421. package/dist/backend/backend/src/controllers/slack/slack-thread.controller.d.ts.map +1 -0
  422. package/dist/backend/backend/src/controllers/slack/slack-thread.controller.js +59 -0
  423. package/dist/backend/backend/src/controllers/slack/slack-thread.controller.js.map +1 -0
  424. package/dist/backend/backend/src/controllers/slack/slack-thread.routes.d.ts +15 -0
  425. package/dist/backend/backend/src/controllers/slack/slack-thread.routes.d.ts.map +1 -0
  426. package/dist/backend/backend/src/controllers/slack/slack-thread.routes.js +21 -0
  427. package/dist/backend/backend/src/controllers/slack/slack-thread.routes.js.map +1 -0
  428. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts +11 -0
  429. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -0
  430. package/dist/backend/backend/src/controllers/slack/slack.controller.js +416 -0
  431. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -0
  432. package/dist/backend/backend/src/controllers/system/config.controller.d.ts +4 -0
  433. package/dist/backend/backend/src/controllers/system/config.controller.d.ts.map +1 -0
  434. package/dist/backend/backend/src/controllers/system/config.controller.js +48 -0
  435. package/dist/backend/backend/src/controllers/system/config.controller.js.map +1 -0
  436. package/dist/backend/backend/src/controllers/system/errors.controller.d.ts +8 -0
  437. package/dist/backend/backend/src/controllers/system/errors.controller.d.ts.map +1 -0
  438. package/dist/backend/backend/src/controllers/system/errors.controller.js +99 -0
  439. package/dist/backend/backend/src/controllers/system/errors.controller.js.map +1 -0
  440. package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts +13 -0
  441. package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts.map +1 -0
  442. package/dist/backend/backend/src/controllers/system/scheduler.controller.js +63 -0
  443. package/dist/backend/backend/src/controllers/system/scheduler.controller.js.map +1 -0
  444. package/dist/backend/backend/src/controllers/system/system.controller.d.ts +67 -0
  445. package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -0
  446. package/dist/backend/backend/src/controllers/system/system.controller.js +390 -0
  447. package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -0
  448. package/dist/backend/backend/src/controllers/system/system.routes.d.ts +9 -0
  449. package/dist/backend/backend/src/controllers/system/system.routes.d.ts.map +1 -0
  450. package/dist/backend/backend/src/controllers/system/system.routes.js +16 -0
  451. package/dist/backend/backend/src/controllers/system/system.routes.js.map +1 -0
  452. package/dist/backend/backend/src/controllers/task-management/assignments.controller.d.ts +5 -0
  453. package/dist/backend/backend/src/controllers/task-management/assignments.controller.d.ts.map +1 -0
  454. package/dist/backend/backend/src/controllers/task-management/assignments.controller.js +56 -0
  455. package/dist/backend/backend/src/controllers/task-management/assignments.controller.js.map +1 -0
  456. package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.d.ts +10 -0
  457. package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.d.ts.map +1 -0
  458. package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.js +43 -0
  459. package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.js.map +1 -0
  460. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +95 -0
  461. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -0
  462. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +1034 -0
  463. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -0
  464. package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts +8 -0
  465. package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts.map +1 -0
  466. package/dist/backend/backend/src/controllers/task-management/tasks.controller.js +117 -0
  467. package/dist/backend/backend/src/controllers/task-management/tasks.controller.js.map +1 -0
  468. package/dist/backend/backend/src/controllers/task-management/tickets.controller.d.ts +13 -0
  469. package/dist/backend/backend/src/controllers/task-management/tickets.controller.d.ts.map +1 -0
  470. package/dist/backend/backend/src/controllers/task-management/tickets.controller.js +212 -0
  471. package/dist/backend/backend/src/controllers/task-management/tickets.controller.js.map +1 -0
  472. package/dist/backend/backend/src/controllers/team/team.controller.d.ts +35 -0
  473. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -0
  474. package/dist/backend/backend/src/controllers/team/team.controller.js +1629 -0
  475. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -0
  476. package/dist/backend/backend/src/controllers/team/team.routes.d.ts +9 -0
  477. package/dist/backend/backend/src/controllers/team/team.routes.d.ts.map +1 -0
  478. package/dist/backend/backend/src/controllers/team/team.routes.js +41 -0
  479. package/dist/backend/backend/src/controllers/team/team.routes.js.map +1 -0
  480. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.d.ts +32 -0
  481. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.d.ts.map +1 -0
  482. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.js +99 -0
  483. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.js.map +1 -0
  484. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.d.ts +15 -0
  485. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.d.ts.map +1 -0
  486. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.js +23 -0
  487. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.js.map +1 -0
  488. package/dist/backend/backend/src/controllers/types.d.ts +18 -0
  489. package/dist/backend/backend/src/controllers/types.d.ts.map +1 -0
  490. package/dist/backend/backend/src/controllers/types.js +2 -0
  491. package/dist/backend/backend/src/controllers/types.js.map +1 -0
  492. package/dist/backend/backend/src/controllers/utils/file-utils.d.ts +3 -0
  493. package/dist/backend/backend/src/controllers/utils/file-utils.d.ts.map +1 -0
  494. package/dist/backend/backend/src/controllers/utils/file-utils.js +98 -0
  495. package/dist/backend/backend/src/controllers/utils/file-utils.js.map +1 -0
  496. package/dist/backend/backend/src/index.d.ts +60 -0
  497. package/dist/backend/backend/src/index.d.ts.map +1 -0
  498. package/dist/backend/backend/src/index.js +872 -0
  499. package/dist/backend/backend/src/index.js.map +1 -0
  500. package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.d.ts +22 -0
  501. package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.d.ts.map +1 -0
  502. package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.js +36 -0
  503. package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.js.map +1 -0
  504. package/dist/backend/backend/src/models/Project.d.ts +18 -0
  505. package/dist/backend/backend/src/models/Project.d.ts.map +1 -0
  506. package/dist/backend/backend/src/models/Project.js +70 -0
  507. package/dist/backend/backend/src/models/Project.js.map +1 -0
  508. package/dist/backend/backend/src/models/ScheduledMessage.d.ts +27 -0
  509. package/dist/backend/backend/src/models/ScheduledMessage.d.ts.map +1 -0
  510. package/dist/backend/backend/src/models/ScheduledMessage.js +50 -0
  511. package/dist/backend/backend/src/models/ScheduledMessage.js.map +1 -0
  512. package/dist/backend/backend/src/models/Team.d.ts +20 -0
  513. package/dist/backend/backend/src/models/Team.d.ts.map +1 -0
  514. package/dist/backend/backend/src/models/Team.js +120 -0
  515. package/dist/backend/backend/src/models/Team.js.map +1 -0
  516. package/dist/backend/backend/src/models/Ticket.d.ts +24 -0
  517. package/dist/backend/backend/src/models/Ticket.d.ts.map +1 -0
  518. package/dist/backend/backend/src/models/Ticket.js +102 -0
  519. package/dist/backend/backend/src/models/Ticket.js.map +1 -0
  520. package/dist/backend/backend/src/models/index.d.ts +5 -0
  521. package/dist/backend/backend/src/models/index.d.ts.map +1 -0
  522. package/dist/backend/backend/src/models/index.js +5 -0
  523. package/dist/backend/backend/src/models/index.js.map +1 -0
  524. package/dist/backend/backend/src/routes/api.routes.d.ts +9 -0
  525. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -0
  526. package/dist/backend/backend/src/routes/api.routes.js +81 -0
  527. package/dist/backend/backend/src/routes/api.routes.js.map +1 -0
  528. package/dist/backend/backend/src/routes/factory.routes.d.ts +19 -0
  529. package/dist/backend/backend/src/routes/factory.routes.d.ts.map +1 -0
  530. package/dist/backend/backend/src/routes/factory.routes.js +103 -0
  531. package/dist/backend/backend/src/routes/factory.routes.js.map +1 -0
  532. package/dist/backend/backend/src/routes/modules/assignments.routes.d.ts +4 -0
  533. package/dist/backend/backend/src/routes/modules/assignments.routes.d.ts.map +1 -0
  534. package/dist/backend/backend/src/routes/modules/assignments.routes.js +7 -0
  535. package/dist/backend/backend/src/routes/modules/assignments.routes.js.map +1 -0
  536. package/dist/backend/backend/src/routes/modules/config.routes.d.ts +4 -0
  537. package/dist/backend/backend/src/routes/modules/config.routes.d.ts.map +1 -0
  538. package/dist/backend/backend/src/routes/modules/config.routes.js +6 -0
  539. package/dist/backend/backend/src/routes/modules/config.routes.js.map +1 -0
  540. package/dist/backend/backend/src/routes/modules/delivery-logs.routes.d.ts +4 -0
  541. package/dist/backend/backend/src/routes/modules/delivery-logs.routes.d.ts.map +1 -0
  542. package/dist/backend/backend/src/routes/modules/delivery-logs.routes.js +7 -0
  543. package/dist/backend/backend/src/routes/modules/delivery-logs.routes.js.map +1 -0
  544. package/dist/backend/backend/src/routes/modules/errors.routes.d.ts +4 -0
  545. package/dist/backend/backend/src/routes/modules/errors.routes.d.ts.map +1 -0
  546. package/dist/backend/backend/src/routes/modules/errors.routes.js +10 -0
  547. package/dist/backend/backend/src/routes/modules/errors.routes.js.map +1 -0
  548. package/dist/backend/backend/src/routes/modules/quality-gate.routes.d.ts +20 -0
  549. package/dist/backend/backend/src/routes/modules/quality-gate.routes.d.ts.map +1 -0
  550. package/dist/backend/backend/src/routes/modules/quality-gate.routes.js +25 -0
  551. package/dist/backend/backend/src/routes/modules/quality-gate.routes.js.map +1 -0
  552. package/dist/backend/backend/src/routes/modules/scheduled-messages.routes.d.ts +4 -0
  553. package/dist/backend/backend/src/routes/modules/scheduled-messages.routes.d.ts.map +1 -0
  554. package/dist/backend/backend/src/routes/modules/scheduled-messages.routes.js +12 -0
  555. package/dist/backend/backend/src/routes/modules/scheduled-messages.routes.js.map +1 -0
  556. package/dist/backend/backend/src/routes/modules/scheduler.routes.d.ts +4 -0
  557. package/dist/backend/backend/src/routes/modules/scheduler.routes.d.ts.map +1 -0
  558. package/dist/backend/backend/src/routes/modules/scheduler.routes.js +9 -0
  559. package/dist/backend/backend/src/routes/modules/scheduler.routes.js.map +1 -0
  560. package/dist/backend/backend/src/routes/modules/system.routes.d.ts +4 -0
  561. package/dist/backend/backend/src/routes/modules/system.routes.d.ts.map +1 -0
  562. package/dist/backend/backend/src/routes/modules/system.routes.js +24 -0
  563. package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -0
  564. package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts +4 -0
  565. package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts.map +1 -0
  566. package/dist/backend/backend/src/routes/modules/task-management.routes.js +25 -0
  567. package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -0
  568. package/dist/backend/backend/src/routes/modules/terminal.routes.d.ts +29 -0
  569. package/dist/backend/backend/src/routes/modules/terminal.routes.d.ts.map +1 -0
  570. package/dist/backend/backend/src/routes/modules/terminal.routes.js +49 -0
  571. package/dist/backend/backend/src/routes/modules/terminal.routes.js.map +1 -0
  572. package/dist/backend/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
  573. package/dist/backend/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
  574. package/dist/backend/backend/src/services/agent/agent-heartbeat.service.js +524 -0
  575. package/dist/backend/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
  576. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +398 -0
  577. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
  578. package/dist/backend/backend/src/services/agent/agent-registration.service.js +2863 -0
  579. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -0
  580. package/dist/backend/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
  581. package/dist/backend/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
  582. package/dist/backend/backend/src/services/agent/agent-suspend.service.js +304 -0
  583. package/dist/backend/backend/src/services/agent/agent-suspend.service.js.map +1 -0
  584. package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts +71 -0
  585. package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
  586. package/dist/backend/backend/src/services/agent/claude-runtime.service.js +220 -0
  587. package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -0
  588. package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts +43 -0
  589. package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
  590. package/dist/backend/backend/src/services/agent/codex-runtime.service.js +118 -0
  591. package/dist/backend/backend/src/services/agent/codex-runtime.service.js.map +1 -0
  592. package/dist/backend/backend/src/services/agent/disk-cleanup.service.d.ts +79 -0
  593. package/dist/backend/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
  594. package/dist/backend/backend/src/services/agent/disk-cleanup.service.js +137 -0
  595. package/dist/backend/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
  596. package/dist/backend/backend/src/services/agent/file-watcher.service.d.ts +87 -0
  597. package/dist/backend/backend/src/services/agent/file-watcher.service.d.ts.map +1 -0
  598. package/dist/backend/backend/src/services/agent/file-watcher.service.js +312 -0
  599. package/dist/backend/backend/src/services/agent/file-watcher.service.js.map +1 -0
  600. package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts +83 -0
  601. package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
  602. package/dist/backend/backend/src/services/agent/gemini-runtime.service.js +300 -0
  603. package/dist/backend/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
  604. package/dist/backend/backend/src/services/agent/git-integration.service.d.ts +131 -0
  605. package/dist/backend/backend/src/services/agent/git-integration.service.d.ts.map +1 -0
  606. package/dist/backend/backend/src/services/agent/git-integration.service.js +368 -0
  607. package/dist/backend/backend/src/services/agent/git-integration.service.js.map +1 -0
  608. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +54 -0
  609. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -0
  610. package/dist/backend/backend/src/services/agent/idle-detection.service.js +156 -0
  611. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -0
  612. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts +77 -0
  613. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
  614. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js +104 -0
  615. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
  616. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +114 -0
  617. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
  618. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +437 -0
  619. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
  620. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +81 -0
  621. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
  622. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +284 -0
  623. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
  624. package/dist/backend/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
  625. package/dist/backend/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
  626. package/dist/backend/backend/src/services/agent/runtime-service.factory.js +165 -0
  627. package/dist/backend/backend/src/services/agent/runtime-service.factory.js.map +1 -0
  628. package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts +163 -0
  629. package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts.map +1 -0
  630. package/dist/backend/backend/src/services/agent/tmux-command.service.js +962 -0
  631. package/dist/backend/backend/src/services/agent/tmux-command.service.js.map +1 -0
  632. package/dist/backend/backend/src/services/agent/tmux.service.d.ts +189 -0
  633. package/dist/backend/backend/src/services/agent/tmux.service.d.ts.map +1 -0
  634. package/dist/backend/backend/src/services/agent/tmux.service.js +673 -0
  635. package/dist/backend/backend/src/services/agent/tmux.service.js.map +1 -0
  636. package/dist/backend/backend/src/services/ai/context-loader.service.d.ts +40 -0
  637. package/dist/backend/backend/src/services/ai/context-loader.service.d.ts.map +1 -0
  638. package/dist/backend/backend/src/services/ai/context-loader.service.js +311 -0
  639. package/dist/backend/backend/src/services/ai/context-loader.service.js.map +1 -0
  640. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +183 -0
  641. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
  642. package/dist/backend/backend/src/services/ai/prompt-builder.service.js +591 -0
  643. package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -0
  644. package/dist/backend/backend/src/services/ai/prompt-template.service.d.ts +51 -0
  645. package/dist/backend/backend/src/services/ai/prompt-template.service.d.ts.map +1 -0
  646. package/dist/backend/backend/src/services/ai/prompt-template.service.js +99 -0
  647. package/dist/backend/backend/src/services/ai/prompt-template.service.js.map +1 -0
  648. package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +429 -0
  649. package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +1 -0
  650. package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +852 -0
  651. package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +1 -0
  652. package/dist/backend/backend/src/services/autonomous/budget.service.d.ts +319 -0
  653. package/dist/backend/backend/src/services/autonomous/budget.service.d.ts.map +1 -0
  654. package/dist/backend/backend/src/services/autonomous/budget.service.js +594 -0
  655. package/dist/backend/backend/src/services/autonomous/budget.service.js.map +1 -0
  656. package/dist/backend/backend/src/services/autonomous/index.d.ts +11 -0
  657. package/dist/backend/backend/src/services/autonomous/index.d.ts.map +1 -0
  658. package/dist/backend/backend/src/services/autonomous/index.js +11 -0
  659. package/dist/backend/backend/src/services/autonomous/index.js.map +1 -0
  660. package/dist/backend/backend/src/services/chat/chat.service.d.ts +358 -0
  661. package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -0
  662. package/dist/backend/backend/src/services/chat/chat.service.js +727 -0
  663. package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -0
  664. package/dist/backend/backend/src/services/chat/index.d.ts +10 -0
  665. package/dist/backend/backend/src/services/chat/index.d.ts.map +1 -0
  666. package/dist/backend/backend/src/services/chat/index.js +10 -0
  667. package/dist/backend/backend/src/services/chat/index.js.map +1 -0
  668. package/dist/backend/backend/src/services/continuation/continuation-events.service.d.ts +152 -0
  669. package/dist/backend/backend/src/services/continuation/continuation-events.service.d.ts.map +1 -0
  670. package/dist/backend/backend/src/services/continuation/continuation-events.service.js +293 -0
  671. package/dist/backend/backend/src/services/continuation/continuation-events.service.js.map +1 -0
  672. package/dist/backend/backend/src/services/continuation/continuation.service.d.ts +278 -0
  673. package/dist/backend/backend/src/services/continuation/continuation.service.d.ts.map +1 -0
  674. package/dist/backend/backend/src/services/continuation/continuation.service.js +616 -0
  675. package/dist/backend/backend/src/services/continuation/continuation.service.js.map +1 -0
  676. package/dist/backend/backend/src/services/continuation/index.d.ts +14 -0
  677. package/dist/backend/backend/src/services/continuation/index.d.ts.map +1 -0
  678. package/dist/backend/backend/src/services/continuation/index.js +15 -0
  679. package/dist/backend/backend/src/services/continuation/index.js.map +1 -0
  680. package/dist/backend/backend/src/services/continuation/output-analyzer.service.d.ts +199 -0
  681. package/dist/backend/backend/src/services/continuation/output-analyzer.service.d.ts.map +1 -0
  682. package/dist/backend/backend/src/services/continuation/output-analyzer.service.js +390 -0
  683. package/dist/backend/backend/src/services/continuation/output-analyzer.service.js.map +1 -0
  684. package/dist/backend/backend/src/services/continuation/patterns/completion-patterns.d.ts +44 -0
  685. package/dist/backend/backend/src/services/continuation/patterns/completion-patterns.d.ts.map +1 -0
  686. package/dist/backend/backend/src/services/continuation/patterns/completion-patterns.js +82 -0
  687. package/dist/backend/backend/src/services/continuation/patterns/completion-patterns.js.map +1 -0
  688. package/dist/backend/backend/src/services/continuation/patterns/error-patterns.d.ts +37 -0
  689. package/dist/backend/backend/src/services/continuation/patterns/error-patterns.d.ts.map +1 -0
  690. package/dist/backend/backend/src/services/continuation/patterns/error-patterns.js +105 -0
  691. package/dist/backend/backend/src/services/continuation/patterns/error-patterns.js.map +1 -0
  692. package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.d.ts +29 -0
  693. package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
  694. package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.js +49 -0
  695. package/dist/backend/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
  696. package/dist/backend/backend/src/services/continuation/patterns/index.d.ts +12 -0
  697. package/dist/backend/backend/src/services/continuation/patterns/index.d.ts.map +1 -0
  698. package/dist/backend/backend/src/services/continuation/patterns/index.js +12 -0
  699. package/dist/backend/backend/src/services/continuation/patterns/index.js.map +1 -0
  700. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts +34 -0
  701. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -0
  702. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js +64 -0
  703. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -0
  704. package/dist/backend/backend/src/services/continuation/template-loader.service.d.ts +196 -0
  705. package/dist/backend/backend/src/services/continuation/template-loader.service.d.ts.map +1 -0
  706. package/dist/backend/backend/src/services/continuation/template-loader.service.js +323 -0
  707. package/dist/backend/backend/src/services/continuation/template-loader.service.js.map +1 -0
  708. package/dist/backend/backend/src/services/core/config.service.d.ts +85 -0
  709. package/dist/backend/backend/src/services/core/config.service.d.ts.map +1 -0
  710. package/dist/backend/backend/src/services/core/config.service.js +226 -0
  711. package/dist/backend/backend/src/services/core/config.service.js.map +1 -0
  712. package/dist/backend/backend/src/services/core/error-tracking.service.d.ts +98 -0
  713. package/dist/backend/backend/src/services/core/error-tracking.service.d.ts.map +1 -0
  714. package/dist/backend/backend/src/services/core/error-tracking.service.js +291 -0
  715. package/dist/backend/backend/src/services/core/error-tracking.service.js.map +1 -0
  716. package/dist/backend/backend/src/services/core/logger.service.d.ts +70 -0
  717. package/dist/backend/backend/src/services/core/logger.service.d.ts.map +1 -0
  718. package/dist/backend/backend/src/services/core/logger.service.js +350 -0
  719. package/dist/backend/backend/src/services/core/logger.service.js.map +1 -0
  720. package/dist/backend/backend/src/services/core/storage.service.d.ts +261 -0
  721. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -0
  722. package/dist/backend/backend/src/services/core/storage.service.js +1390 -0
  723. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -0
  724. package/dist/backend/backend/src/services/core/teams-backup.service.d.ts +92 -0
  725. package/dist/backend/backend/src/services/core/teams-backup.service.d.ts.map +1 -0
  726. package/dist/backend/backend/src/services/core/teams-backup.service.js +120 -0
  727. package/dist/backend/backend/src/services/core/teams-backup.service.js.map +1 -0
  728. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts +144 -0
  729. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -0
  730. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +337 -0
  731. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -0
  732. package/dist/backend/backend/src/services/event-bus/index.d.ts +7 -0
  733. package/dist/backend/backend/src/services/event-bus/index.d.ts.map +1 -0
  734. package/dist/backend/backend/src/services/event-bus/index.js +7 -0
  735. package/dist/backend/backend/src/services/event-bus/index.js.map +1 -0
  736. package/dist/backend/backend/src/services/factory/factory-sse.service.d.ts +163 -0
  737. package/dist/backend/backend/src/services/factory/factory-sse.service.d.ts.map +1 -0
  738. package/dist/backend/backend/src/services/factory/factory-sse.service.js +274 -0
  739. package/dist/backend/backend/src/services/factory/factory-sse.service.js.map +1 -0
  740. package/dist/backend/backend/src/services/factory.service.d.ts +157 -0
  741. package/dist/backend/backend/src/services/factory.service.d.ts.map +1 -0
  742. package/dist/backend/backend/src/services/factory.service.js +545 -0
  743. package/dist/backend/backend/src/services/factory.service.js.map +1 -0
  744. package/dist/backend/backend/src/services/index.d.ts +37 -0
  745. package/dist/backend/backend/src/services/index.d.ts.map +1 -0
  746. package/dist/backend/backend/src/services/index.js +50 -0
  747. package/dist/backend/backend/src/services/index.js.map +1 -0
  748. package/dist/backend/backend/src/services/knowledge/index.d.ts +7 -0
  749. package/dist/backend/backend/src/services/knowledge/index.d.ts.map +1 -0
  750. package/dist/backend/backend/src/services/knowledge/index.js +7 -0
  751. package/dist/backend/backend/src/services/knowledge/index.js.map +1 -0
  752. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +125 -0
  753. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -0
  754. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +247 -0
  755. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +1 -0
  756. package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts +153 -0
  757. package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts.map +1 -0
  758. package/dist/backend/backend/src/services/knowledge/knowledge.service.js +409 -0
  759. package/dist/backend/backend/src/services/knowledge/knowledge.service.js.map +1 -0
  760. package/dist/backend/backend/src/services/marketplace/index.d.ts +11 -0
  761. package/dist/backend/backend/src/services/marketplace/index.d.ts.map +1 -0
  762. package/dist/backend/backend/src/services/marketplace/index.js +13 -0
  763. package/dist/backend/backend/src/services/marketplace/index.js.map +1 -0
  764. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts +47 -0
  765. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -0
  766. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +127 -0
  767. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -0
  768. package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts +101 -0
  769. package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -0
  770. package/dist/backend/backend/src/services/marketplace/marketplace.service.js +207 -0
  771. package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -0
  772. package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts +259 -0
  773. package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts.map +1 -0
  774. package/dist/backend/backend/src/services/memory/agent-memory.service.js +539 -0
  775. package/dist/backend/backend/src/services/memory/agent-memory.service.js.map +1 -0
  776. package/dist/backend/backend/src/services/memory/daily-log.service.d.ts +159 -0
  777. package/dist/backend/backend/src/services/memory/daily-log.service.d.ts.map +1 -0
  778. package/dist/backend/backend/src/services/memory/daily-log.service.js +272 -0
  779. package/dist/backend/backend/src/services/memory/daily-log.service.js.map +1 -0
  780. package/dist/backend/backend/src/services/memory/goal-tracking.service.d.ts +239 -0
  781. package/dist/backend/backend/src/services/memory/goal-tracking.service.d.ts.map +1 -0
  782. package/dist/backend/backend/src/services/memory/goal-tracking.service.js +353 -0
  783. package/dist/backend/backend/src/services/memory/goal-tracking.service.js.map +1 -0
  784. package/dist/backend/backend/src/services/memory/index.d.ts +16 -0
  785. package/dist/backend/backend/src/services/memory/index.d.ts.map +1 -0
  786. package/dist/backend/backend/src/services/memory/index.js +15 -0
  787. package/dist/backend/backend/src/services/memory/index.js.map +1 -0
  788. package/dist/backend/backend/src/services/memory/learning-accumulation.service.d.ts +228 -0
  789. package/dist/backend/backend/src/services/memory/learning-accumulation.service.d.ts.map +1 -0
  790. package/dist/backend/backend/src/services/memory/learning-accumulation.service.js +336 -0
  791. package/dist/backend/backend/src/services/memory/learning-accumulation.service.js.map +1 -0
  792. package/dist/backend/backend/src/services/memory/memory.service.d.ts +306 -0
  793. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -0
  794. package/dist/backend/backend/src/services/memory/memory.service.js +517 -0
  795. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -0
  796. package/dist/backend/backend/src/services/memory/project-memory.service.d.ts +252 -0
  797. package/dist/backend/backend/src/services/memory/project-memory.service.d.ts.map +1 -0
  798. package/dist/backend/backend/src/services/memory/project-memory.service.js +600 -0
  799. package/dist/backend/backend/src/services/memory/project-memory.service.js.map +1 -0
  800. package/dist/backend/backend/src/services/memory/session-memory.service.d.ts +197 -0
  801. package/dist/backend/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
  802. package/dist/backend/backend/src/services/memory/session-memory.service.js +369 -0
  803. package/dist/backend/backend/src/services/memory/session-memory.service.js.map +1 -0
  804. package/dist/backend/backend/src/services/messaging/index.d.ts +9 -0
  805. package/dist/backend/backend/src/services/messaging/index.d.ts.map +1 -0
  806. package/dist/backend/backend/src/services/messaging/index.js +9 -0
  807. package/dist/backend/backend/src/services/messaging/index.js.map +1 -0
  808. package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts +198 -0
  809. package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -0
  810. package/dist/backend/backend/src/services/messaging/message-queue.service.js +445 -0
  811. package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -0
  812. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +90 -0
  813. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -0
  814. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +324 -0
  815. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -0
  816. package/dist/backend/backend/src/services/messaging/response-router.service.d.ts +56 -0
  817. package/dist/backend/backend/src/services/messaging/response-router.service.d.ts.map +1 -0
  818. package/dist/backend/backend/src/services/messaging/response-router.service.js +134 -0
  819. package/dist/backend/backend/src/services/messaging/response-router.service.js.map +1 -0
  820. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
  821. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
  822. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
  823. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
  824. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts +113 -0
  825. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -0
  826. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +473 -0
  827. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -0
  828. package/dist/backend/backend/src/services/monitoring/monitoring.service.d.ts +129 -0
  829. package/dist/backend/backend/src/services/monitoring/monitoring.service.d.ts.map +1 -0
  830. package/dist/backend/backend/src/services/monitoring/monitoring.service.js +469 -0
  831. package/dist/backend/backend/src/services/monitoring/monitoring.service.js.map +1 -0
  832. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts +48 -0
  833. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts.map +1 -0
  834. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js +151 -0
  835. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js.map +1 -0
  836. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.d.ts +71 -0
  837. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.d.ts.map +1 -0
  838. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.js +304 -0
  839. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.js.map +1 -0
  840. package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.d.ts +100 -0
  841. package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.d.ts.map +1 -0
  842. package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.js +285 -0
  843. package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.js.map +1 -0
  844. package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.d.ts +107 -0
  845. package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.d.ts.map +1 -0
  846. package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.js +568 -0
  847. package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.js.map +1 -0
  848. package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
  849. package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
  850. package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.js +344 -0
  851. package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
  852. package/dist/backend/backend/src/services/orchestrator/improvement-startup.service.d.ts +156 -0
  853. package/dist/backend/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
  854. package/dist/backend/backend/src/services/orchestrator/improvement-startup.service.js +481 -0
  855. package/dist/backend/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
  856. package/dist/backend/backend/src/services/orchestrator/index.d.ts +15 -0
  857. package/dist/backend/backend/src/services/orchestrator/index.d.ts.map +1 -0
  858. package/dist/backend/backend/src/services/orchestrator/index.js +15 -0
  859. package/dist/backend/backend/src/services/orchestrator/index.js.map +1 -0
  860. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +112 -0
  861. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
  862. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js +244 -0
  863. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
  864. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +61 -0
  865. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
  866. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +156 -0
  867. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
  868. package/dist/backend/backend/src/services/orchestrator/safe-restart.service.d.ts +191 -0
  869. package/dist/backend/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
  870. package/dist/backend/backend/src/services/orchestrator/safe-restart.service.js +393 -0
  871. package/dist/backend/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
  872. package/dist/backend/backend/src/services/orchestrator/self-improvement.service.d.ts +200 -0
  873. package/dist/backend/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
  874. package/dist/backend/backend/src/services/orchestrator/self-improvement.service.js +394 -0
  875. package/dist/backend/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
  876. package/dist/backend/backend/src/services/orchestrator/state-persistence.service.d.ts +226 -0
  877. package/dist/backend/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
  878. package/dist/backend/backend/src/services/orchestrator/state-persistence.service.js +504 -0
  879. package/dist/backend/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
  880. package/dist/backend/backend/src/services/project/active-projects.service.d.ts +39 -0
  881. package/dist/backend/backend/src/services/project/active-projects.service.d.ts.map +1 -0
  882. package/dist/backend/backend/src/services/project/active-projects.service.js +295 -0
  883. package/dist/backend/backend/src/services/project/active-projects.service.js.map +1 -0
  884. package/dist/backend/backend/src/services/project/task-folder.service.d.ts +48 -0
  885. package/dist/backend/backend/src/services/project/task-folder.service.d.ts.map +1 -0
  886. package/dist/backend/backend/src/services/project/task-folder.service.js +193 -0
  887. package/dist/backend/backend/src/services/project/task-folder.service.js.map +1 -0
  888. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +47 -0
  889. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +1 -0
  890. package/dist/backend/backend/src/services/project/task-tracking.service.js +330 -0
  891. package/dist/backend/backend/src/services/project/task-tracking.service.js.map +1 -0
  892. package/dist/backend/backend/src/services/project/task.service.d.ts +31 -0
  893. package/dist/backend/backend/src/services/project/task.service.d.ts.map +1 -0
  894. package/dist/backend/backend/src/services/project/task.service.js +193 -0
  895. package/dist/backend/backend/src/services/project/task.service.js.map +1 -0
  896. package/dist/backend/backend/src/services/project/ticket-editor.service.d.ts +129 -0
  897. package/dist/backend/backend/src/services/project/ticket-editor.service.d.ts.map +1 -0
  898. package/dist/backend/backend/src/services/project/ticket-editor.service.js +405 -0
  899. package/dist/backend/backend/src/services/project/ticket-editor.service.js.map +1 -0
  900. package/dist/backend/backend/src/services/prompt/index.d.ts +7 -0
  901. package/dist/backend/backend/src/services/prompt/index.d.ts.map +1 -0
  902. package/dist/backend/backend/src/services/prompt/index.js +7 -0
  903. package/dist/backend/backend/src/services/prompt/index.js.map +1 -0
  904. package/dist/backend/backend/src/services/prompt/prompt-generator.service.d.ts +106 -0
  905. package/dist/backend/backend/src/services/prompt/prompt-generator.service.d.ts.map +1 -0
  906. package/dist/backend/backend/src/services/prompt/prompt-generator.service.js +287 -0
  907. package/dist/backend/backend/src/services/prompt/prompt-generator.service.js.map +1 -0
  908. package/dist/backend/backend/src/services/quality/index.d.ts +10 -0
  909. package/dist/backend/backend/src/services/quality/index.d.ts.map +1 -0
  910. package/dist/backend/backend/src/services/quality/index.js +10 -0
  911. package/dist/backend/backend/src/services/quality/index.js.map +1 -0
  912. package/dist/backend/backend/src/services/quality/quality-gate.service.d.ts +223 -0
  913. package/dist/backend/backend/src/services/quality/quality-gate.service.d.ts.map +1 -0
  914. package/dist/backend/backend/src/services/quality/quality-gate.service.js +388 -0
  915. package/dist/backend/backend/src/services/quality/quality-gate.service.js.map +1 -0
  916. package/dist/backend/backend/src/services/session/index.d.ts +43 -0
  917. package/dist/backend/backend/src/services/session/index.d.ts.map +1 -0
  918. package/dist/backend/backend/src/services/session/index.js +46 -0
  919. package/dist/backend/backend/src/services/session/index.js.map +1 -0
  920. package/dist/backend/backend/src/services/session/pty/index.d.ts +11 -0
  921. package/dist/backend/backend/src/services/session/pty/index.d.ts.map +1 -0
  922. package/dist/backend/backend/src/services/session/pty/index.js +11 -0
  923. package/dist/backend/backend/src/services/session/pty/index.js.map +1 -0
  924. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +258 -0
  925. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
  926. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +435 -0
  927. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
  928. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +196 -0
  929. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
  930. package/dist/backend/backend/src/services/session/pty/pty-session.js +393 -0
  931. package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -0
  932. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts +241 -0
  933. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
  934. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js +351 -0
  935. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
  936. package/dist/backend/backend/src/services/session/session-backend.factory.d.ts +127 -0
  937. package/dist/backend/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
  938. package/dist/backend/backend/src/services/session/session-backend.factory.js +226 -0
  939. package/dist/backend/backend/src/services/session/session-backend.factory.js.map +1 -0
  940. package/dist/backend/backend/src/services/session/session-backend.interface.d.ts +358 -0
  941. package/dist/backend/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
  942. package/dist/backend/backend/src/services/session/session-backend.interface.js +19 -0
  943. package/dist/backend/backend/src/services/session/session-backend.interface.js.map +1 -0
  944. package/dist/backend/backend/src/services/session/session-command-helper.d.ts +327 -0
  945. package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -0
  946. package/dist/backend/backend/src/services/session/session-command-helper.js +687 -0
  947. package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -0
  948. package/dist/backend/backend/src/services/session/session-state-persistence.d.ts +228 -0
  949. package/dist/backend/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
  950. package/dist/backend/backend/src/services/session/session-state-persistence.js +394 -0
  951. package/dist/backend/backend/src/services/session/session-state-persistence.js.map +1 -0
  952. package/dist/backend/backend/src/services/settings/index.d.ts +10 -0
  953. package/dist/backend/backend/src/services/settings/index.d.ts.map +1 -0
  954. package/dist/backend/backend/src/services/settings/index.js +12 -0
  955. package/dist/backend/backend/src/services/settings/index.js.map +1 -0
  956. package/dist/backend/backend/src/services/settings/role.service.d.ts +276 -0
  957. package/dist/backend/backend/src/services/settings/role.service.d.ts.map +1 -0
  958. package/dist/backend/backend/src/services/settings/role.service.js +726 -0
  959. package/dist/backend/backend/src/services/settings/role.service.js.map +1 -0
  960. package/dist/backend/backend/src/services/settings/settings.service.d.ts +160 -0
  961. package/dist/backend/backend/src/services/settings/settings.service.d.ts.map +1 -0
  962. package/dist/backend/backend/src/services/settings/settings.service.js +294 -0
  963. package/dist/backend/backend/src/services/settings/settings.service.js.map +1 -0
  964. package/dist/backend/backend/src/services/skill/index.d.ts +10 -0
  965. package/dist/backend/backend/src/services/skill/index.d.ts.map +1 -0
  966. package/dist/backend/backend/src/services/skill/index.js +10 -0
  967. package/dist/backend/backend/src/services/skill/index.js.map +1 -0
  968. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +236 -0
  969. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -0
  970. package/dist/backend/backend/src/services/skill/skill-catalog.service.js +550 -0
  971. package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -0
  972. package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts +135 -0
  973. package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts.map +1 -0
  974. package/dist/backend/backend/src/services/skill/skill-executor.service.js +493 -0
  975. package/dist/backend/backend/src/services/skill/skill-executor.service.js.map +1 -0
  976. package/dist/backend/backend/src/services/skill/skill.service.d.ts +241 -0
  977. package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -0
  978. package/dist/backend/backend/src/services/skill/skill.service.js +542 -0
  979. package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -0
  980. package/dist/backend/backend/src/services/slack/index.d.ts +13 -0
  981. package/dist/backend/backend/src/services/slack/index.d.ts.map +1 -0
  982. package/dist/backend/backend/src/services/slack/index.js +13 -0
  983. package/dist/backend/backend/src/services/slack/index.js.map +1 -0
  984. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts +63 -0
  985. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -0
  986. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +182 -0
  987. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -0
  988. package/dist/backend/backend/src/services/slack/slack-image.service.d.ts +113 -0
  989. package/dist/backend/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
  990. package/dist/backend/backend/src/services/slack/slack-image.service.js +329 -0
  991. package/dist/backend/backend/src/services/slack/slack-image.service.js.map +1 -0
  992. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +71 -0
  993. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -0
  994. package/dist/backend/backend/src/services/slack/slack-initializer.js +106 -0
  995. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -0
  996. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +302 -0
  997. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
  998. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +806 -0
  999. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
  1000. package/dist/backend/backend/src/services/slack/slack-thread-store.service.d.ts +147 -0
  1001. package/dist/backend/backend/src/services/slack/slack-thread-store.service.d.ts.map +1 -0
  1002. package/dist/backend/backend/src/services/slack/slack-thread-store.service.js +258 -0
  1003. package/dist/backend/backend/src/services/slack/slack-thread-store.service.js.map +1 -0
  1004. package/dist/backend/backend/src/services/slack/slack.service.d.ts +219 -0
  1005. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -0
  1006. package/dist/backend/backend/src/services/slack/slack.service.js +551 -0
  1007. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -0
  1008. package/dist/backend/backend/src/services/sop/index.d.ts +9 -0
  1009. package/dist/backend/backend/src/services/sop/index.d.ts.map +1 -0
  1010. package/dist/backend/backend/src/services/sop/index.js +9 -0
  1011. package/dist/backend/backend/src/services/sop/index.js.map +1 -0
  1012. package/dist/backend/backend/src/services/sop/sop.service.d.ts +286 -0
  1013. package/dist/backend/backend/src/services/sop/sop.service.d.ts.map +1 -0
  1014. package/dist/backend/backend/src/services/sop/sop.service.js +583 -0
  1015. package/dist/backend/backend/src/services/sop/sop.service.js.map +1 -0
  1016. package/dist/backend/backend/src/services/system/version-check.service.d.ts +112 -0
  1017. package/dist/backend/backend/src/services/system/version-check.service.d.ts.map +1 -0
  1018. package/dist/backend/backend/src/services/system/version-check.service.js +195 -0
  1019. package/dist/backend/backend/src/services/system/version-check.service.js.map +1 -0
  1020. package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts +99 -0
  1021. package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -0
  1022. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +408 -0
  1023. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -0
  1024. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +300 -0
  1025. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -0
  1026. package/dist/backend/backend/src/services/workflow/scheduler.service.js +924 -0
  1027. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -0
  1028. package/dist/backend/backend/src/types/auto-assign.types.d.ts +271 -0
  1029. package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +1 -0
  1030. package/dist/backend/backend/src/types/auto-assign.types.js +136 -0
  1031. package/dist/backend/backend/src/types/auto-assign.types.js.map +1 -0
  1032. package/dist/backend/backend/src/types/budget.types.d.ts +217 -0
  1033. package/dist/backend/backend/src/types/budget.types.d.ts.map +1 -0
  1034. package/dist/backend/backend/src/types/budget.types.js +82 -0
  1035. package/dist/backend/backend/src/types/budget.types.js.map +1 -0
  1036. package/dist/backend/backend/src/types/chat.types.d.ts +550 -0
  1037. package/dist/backend/backend/src/types/chat.types.d.ts.map +1 -0
  1038. package/dist/backend/backend/src/types/chat.types.js +743 -0
  1039. package/dist/backend/backend/src/types/chat.types.js.map +1 -0
  1040. package/dist/backend/backend/src/types/continuation.types.d.ts +237 -0
  1041. package/dist/backend/backend/src/types/continuation.types.d.ts.map +1 -0
  1042. package/dist/backend/backend/src/types/continuation.types.js +10 -0
  1043. package/dist/backend/backend/src/types/continuation.types.js.map +1 -0
  1044. package/dist/backend/backend/src/types/event-bus.types.d.ts +112 -0
  1045. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -0
  1046. package/dist/backend/backend/src/types/event-bus.types.js +82 -0
  1047. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -0
  1048. package/dist/backend/backend/src/types/index.d.ts +161 -0
  1049. package/dist/backend/backend/src/types/index.d.ts.map +1 -0
  1050. package/dist/backend/backend/src/types/index.js +23 -0
  1051. package/dist/backend/backend/src/types/index.js.map +1 -0
  1052. package/dist/backend/backend/src/types/knowledge.types.d.ts +195 -0
  1053. package/dist/backend/backend/src/types/knowledge.types.d.ts.map +1 -0
  1054. package/dist/backend/backend/src/types/knowledge.types.js +38 -0
  1055. package/dist/backend/backend/src/types/knowledge.types.js.map +1 -0
  1056. package/dist/backend/backend/src/types/marketplace.types.d.ts +68 -0
  1057. package/dist/backend/backend/src/types/marketplace.types.d.ts.map +1 -0
  1058. package/dist/backend/backend/src/types/marketplace.types.js +6 -0
  1059. package/dist/backend/backend/src/types/marketplace.types.js.map +1 -0
  1060. package/dist/backend/backend/src/types/memory.types.d.ts +587 -0
  1061. package/dist/backend/backend/src/types/memory.types.d.ts.map +1 -0
  1062. package/dist/backend/backend/src/types/memory.types.js +47 -0
  1063. package/dist/backend/backend/src/types/memory.types.js.map +1 -0
  1064. package/dist/backend/backend/src/types/messaging.types.d.ts +216 -0
  1065. package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -0
  1066. package/dist/backend/backend/src/types/messaging.types.js +224 -0
  1067. package/dist/backend/backend/src/types/messaging.types.js.map +1 -0
  1068. package/dist/backend/backend/src/types/orchestrator-state.types.d.ts +482 -0
  1069. package/dist/backend/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
  1070. package/dist/backend/backend/src/types/orchestrator-state.types.js +83 -0
  1071. package/dist/backend/backend/src/types/orchestrator-state.types.js.map +1 -0
  1072. package/dist/backend/backend/src/types/quality-gate.types.d.ts +171 -0
  1073. package/dist/backend/backend/src/types/quality-gate.types.d.ts.map +1 -0
  1074. package/dist/backend/backend/src/types/quality-gate.types.js +42 -0
  1075. package/dist/backend/backend/src/types/quality-gate.types.js.map +1 -0
  1076. package/dist/backend/backend/src/types/role.types.d.ts +260 -0
  1077. package/dist/backend/backend/src/types/role.types.d.ts.map +1 -0
  1078. package/dist/backend/backend/src/types/role.types.js +238 -0
  1079. package/dist/backend/backend/src/types/role.types.js.map +1 -0
  1080. package/dist/backend/backend/src/types/scheduler.types.d.ts +237 -0
  1081. package/dist/backend/backend/src/types/scheduler.types.d.ts.map +1 -0
  1082. package/dist/backend/backend/src/types/scheduler.types.js +32 -0
  1083. package/dist/backend/backend/src/types/scheduler.types.js.map +1 -0
  1084. package/dist/backend/backend/src/types/settings.types.d.ts +178 -0
  1085. package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -0
  1086. package/dist/backend/backend/src/types/settings.types.js +206 -0
  1087. package/dist/backend/backend/src/types/settings.types.js.map +1 -0
  1088. package/dist/backend/backend/src/types/skill.types.d.ts +515 -0
  1089. package/dist/backend/backend/src/types/skill.types.d.ts.map +1 -0
  1090. package/dist/backend/backend/src/types/skill.types.js +481 -0
  1091. package/dist/backend/backend/src/types/skill.types.js.map +1 -0
  1092. package/dist/backend/backend/src/types/slack.types.d.ts +329 -0
  1093. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -0
  1094. package/dist/backend/backend/src/types/slack.types.js +66 -0
  1095. package/dist/backend/backend/src/types/slack.types.js.map +1 -0
  1096. package/dist/backend/backend/src/types/sop.types.d.ts +224 -0
  1097. package/dist/backend/backend/src/types/sop.types.d.ts.map +1 -0
  1098. package/dist/backend/backend/src/types/sop.types.js +85 -0
  1099. package/dist/backend/backend/src/types/sop.types.js.map +1 -0
  1100. package/dist/backend/backend/src/types/task-tracking.types.d.ts +91 -0
  1101. package/dist/backend/backend/src/types/task-tracking.types.d.ts.map +1 -0
  1102. package/dist/backend/backend/src/types/task-tracking.types.js +5 -0
  1103. package/dist/backend/backend/src/types/task-tracking.types.js.map +1 -0
  1104. package/dist/backend/backend/src/utils/async.utils.d.ts +68 -0
  1105. package/dist/backend/backend/src/utils/async.utils.d.ts.map +1 -0
  1106. package/dist/backend/backend/src/utils/async.utils.js +80 -0
  1107. package/dist/backend/backend/src/utils/async.utils.js.map +1 -0
  1108. package/dist/backend/backend/src/utils/defaultPrompts.d.ts +5 -0
  1109. package/dist/backend/backend/src/utils/defaultPrompts.d.ts.map +1 -0
  1110. package/dist/backend/backend/src/utils/defaultPrompts.js +285 -0
  1111. package/dist/backend/backend/src/utils/defaultPrompts.js.map +1 -0
  1112. package/dist/backend/backend/src/utils/file-io.utils.d.ts +102 -0
  1113. package/dist/backend/backend/src/utils/file-io.utils.d.ts.map +1 -0
  1114. package/dist/backend/backend/src/utils/file-io.utils.js +214 -0
  1115. package/dist/backend/backend/src/utils/file-io.utils.js.map +1 -0
  1116. package/dist/backend/backend/src/utils/package-root.d.ts +15 -0
  1117. package/dist/backend/backend/src/utils/package-root.d.ts.map +1 -0
  1118. package/dist/backend/backend/src/utils/package-root.js +38 -0
  1119. package/dist/backend/backend/src/utils/package-root.js.map +1 -0
  1120. package/dist/backend/backend/src/utils/process-recovery.d.ts +81 -0
  1121. package/dist/backend/backend/src/utils/process-recovery.d.ts.map +1 -0
  1122. package/dist/backend/backend/src/utils/process-recovery.js +283 -0
  1123. package/dist/backend/backend/src/utils/process-recovery.js.map +1 -0
  1124. package/dist/backend/backend/src/utils/prompt-resolver.d.ts +79 -0
  1125. package/dist/backend/backend/src/utils/prompt-resolver.d.ts.map +1 -0
  1126. package/dist/backend/backend/src/utils/prompt-resolver.js +132 -0
  1127. package/dist/backend/backend/src/utils/prompt-resolver.js.map +1 -0
  1128. package/dist/backend/backend/src/utils/resource-monitor.d.ts +177 -0
  1129. package/dist/backend/backend/src/utils/resource-monitor.d.ts.map +1 -0
  1130. package/dist/backend/backend/src/utils/resource-monitor.js +404 -0
  1131. package/dist/backend/backend/src/utils/resource-monitor.js.map +1 -0
  1132. package/dist/backend/backend/src/utils/security.d.ts +194 -0
  1133. package/dist/backend/backend/src/utils/security.d.ts.map +1 -0
  1134. package/dist/backend/backend/src/utils/security.js +533 -0
  1135. package/dist/backend/backend/src/utils/security.js.map +1 -0
  1136. package/dist/backend/backend/src/utils/terminal-output.utils.d.ts +54 -0
  1137. package/dist/backend/backend/src/utils/terminal-output.utils.d.ts.map +1 -0
  1138. package/dist/backend/backend/src/utils/terminal-output.utils.js +97 -0
  1139. package/dist/backend/backend/src/utils/terminal-output.utils.js.map +1 -0
  1140. package/dist/backend/backend/src/websocket/chat.gateway.d.ts +127 -0
  1141. package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -0
  1142. package/dist/backend/backend/src/websocket/chat.gateway.js +306 -0
  1143. package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -0
  1144. package/dist/backend/backend/src/websocket/file-watcher.gateway.d.ts +54 -0
  1145. package/dist/backend/backend/src/websocket/file-watcher.gateway.d.ts.map +1 -0
  1146. package/dist/backend/backend/src/websocket/file-watcher.gateway.js +202 -0
  1147. package/dist/backend/backend/src/websocket/file-watcher.gateway.js.map +1 -0
  1148. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +310 -0
  1149. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
  1150. package/dist/backend/backend/src/websocket/terminal.gateway.js +980 -0
  1151. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -0
  1152. package/dist/backend/config/constants.d.ts +722 -0
  1153. package/dist/backend/config/constants.d.ts.map +1 -0
  1154. package/dist/backend/config/constants.js +752 -0
  1155. package/dist/backend/config/constants.js.map +1 -0
  1156. package/dist/backend/config/index.d.ts +344 -0
  1157. package/dist/backend/config/index.d.ts.map +1 -0
  1158. package/dist/backend/config/index.js +42 -0
  1159. package/dist/backend/config/index.js.map +1 -0
  1160. package/dist/backend/config/quality-gates/default-gates.d.ts +71 -0
  1161. package/dist/backend/config/quality-gates/default-gates.d.ts.map +1 -0
  1162. package/dist/backend/config/quality-gates/default-gates.js +168 -0
  1163. package/dist/backend/config/quality-gates/default-gates.js.map +1 -0
  1164. package/dist/cli/cli/src/commands/logs.d.ts +7 -0
  1165. package/dist/cli/cli/src/commands/logs.d.ts.map +1 -0
  1166. package/dist/cli/cli/src/commands/logs.js +198 -0
  1167. package/dist/cli/cli/src/commands/logs.js.map +1 -0
  1168. package/dist/cli/cli/src/commands/start.d.ts +8 -0
  1169. package/dist/cli/cli/src/commands/start.d.ts.map +1 -0
  1170. package/dist/cli/cli/src/commands/start.js +254 -0
  1171. package/dist/cli/cli/src/commands/start.js.map +1 -0
  1172. package/dist/cli/cli/src/commands/status.d.ts +6 -0
  1173. package/dist/cli/cli/src/commands/status.d.ts.map +1 -0
  1174. package/dist/cli/cli/src/commands/status.js +130 -0
  1175. package/dist/cli/cli/src/commands/status.js.map +1 -0
  1176. package/dist/cli/cli/src/commands/stop.d.ts +6 -0
  1177. package/dist/cli/cli/src/commands/stop.d.ts.map +1 -0
  1178. package/dist/cli/cli/src/commands/stop.js +140 -0
  1179. package/dist/cli/cli/src/commands/stop.js.map +1 -0
  1180. package/dist/cli/cli/src/commands/upgrade.d.ts +26 -0
  1181. package/dist/cli/cli/src/commands/upgrade.d.ts.map +1 -0
  1182. package/dist/cli/cli/src/commands/upgrade.js +54 -0
  1183. package/dist/cli/cli/src/commands/upgrade.js.map +1 -0
  1184. package/dist/cli/cli/src/constants.d.ts +106 -0
  1185. package/dist/cli/cli/src/constants.d.ts.map +1 -0
  1186. package/dist/cli/cli/src/constants.js +88 -0
  1187. package/dist/cli/cli/src/constants.js.map +1 -0
  1188. package/dist/cli/cli/src/index.d.ts +3 -0
  1189. package/dist/cli/cli/src/index.d.ts.map +1 -0
  1190. package/dist/cli/cli/src/index.js +60 -0
  1191. package/dist/cli/cli/src/index.js.map +1 -0
  1192. package/dist/cli/cli/src/utils/version-check.d.ts +66 -0
  1193. package/dist/cli/cli/src/utils/version-check.d.ts.map +1 -0
  1194. package/dist/cli/cli/src/utils/version-check.js +192 -0
  1195. package/dist/cli/cli/src/utils/version-check.js.map +1 -0
  1196. package/dist/cli/config/constants.d.ts +722 -0
  1197. package/dist/cli/config/constants.d.ts.map +1 -0
  1198. package/dist/cli/config/constants.js +752 -0
  1199. package/dist/cli/config/constants.js.map +1 -0
  1200. package/dist/cli/config/index.d.ts +344 -0
  1201. package/dist/cli/config/index.d.ts.map +1 -0
  1202. package/dist/cli/config/index.js +42 -0
  1203. package/dist/cli/config/index.js.map +1 -0
  1204. package/frontend/dist/assets/index-5ddf71c8.css +33 -0
  1205. package/frontend/dist/assets/index-77b6a2a0.js +4919 -0
  1206. package/frontend/dist/index.html +19 -0
  1207. package/frontend/dist/logo/crewly-icon.svg +118 -0
  1208. package/package.json +121 -0
@@ -0,0 +1,1629 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import { ORCHESTRATOR_SESSION_NAME, ORCHESTRATOR_ROLE, RUNTIME_TYPES } from '../../constants.js';
3
+ import { CREWLY_CONSTANTS } from '../../constants.js';
4
+ import { updateAgentHeartbeat } from '../../services/agent/agent-heartbeat.service.js';
5
+ import { getSessionBackendSync, getSessionStatePersistence } from '../../services/session/index.js';
6
+ import { getTerminalGateway } from '../../websocket/terminal.gateway.js';
7
+ import { MemoryService } from '../../services/memory/memory.service.js';
8
+ import { SubAgentMessageQueue } from '../../services/messaging/sub-agent-message-queue.service.js';
9
+ import { SUB_AGENT_QUEUE_CONSTANTS } from '../../constants.js';
10
+ /**
11
+ * Module-level EventBusService instance, injected at startup.
12
+ * Used to auto-subscribe the orchestrator to agent lifecycle events.
13
+ */
14
+ let eventBusService = null;
15
+ /**
16
+ * Set the EventBusService instance for auto-subscribing the orchestrator.
17
+ * Called during server initialization in index.ts.
18
+ *
19
+ * @param service - The EventBusService instance
20
+ */
21
+ export function setTeamControllerEventBusService(service) {
22
+ eventBusService = service;
23
+ }
24
+ /**
25
+ * Build the virtual orchestrator Team object.
26
+ *
27
+ * The orchestrator is not stored in teams.json but surfaced as a virtual team
28
+ * in the API. This helper eliminates the 3x duplication of the construction.
29
+ *
30
+ * @param actualAgentStatus - Resolved agent status (from session existence check)
31
+ * @param orchestratorStatus - Persisted orchestrator status from storage
32
+ * @param overrides - Optional field overrides (e.g. projectIds for updates)
33
+ * @returns A Team object representing the orchestrator
34
+ */
35
+ function buildOrchestratorTeam(actualAgentStatus, orchestratorStatus, overrides) {
36
+ const now = new Date().toISOString();
37
+ return {
38
+ id: 'orchestrator',
39
+ name: 'Orchestrator Team',
40
+ description: 'System orchestrator for project management',
41
+ members: [
42
+ {
43
+ id: 'orchestrator-member',
44
+ name: 'Agentmux Orchestrator',
45
+ sessionName: CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME,
46
+ role: 'orchestrator',
47
+ systemPrompt: 'You are the Crewly Orchestrator responsible for coordinating teams and managing project workflows.',
48
+ agentStatus: actualAgentStatus,
49
+ workingStatus: (orchestratorStatus?.workingStatus || CREWLY_CONSTANTS.WORKING_STATUSES.IDLE),
50
+ runtimeType: (orchestratorStatus?.runtimeType || 'claude-code'),
51
+ createdAt: orchestratorStatus?.createdAt || now,
52
+ updatedAt: orchestratorStatus?.updatedAt || now
53
+ }
54
+ ],
55
+ projectIds: [],
56
+ createdAt: orchestratorStatus?.createdAt || now,
57
+ updatedAt: orchestratorStatus?.updatedAt || now,
58
+ ...overrides,
59
+ };
60
+ }
61
+ /**
62
+ * Resolve the display agent status based on stored state and live session presence.
63
+ *
64
+ * When a PTY session is alive but the agent hasn't registered yet, we keep
65
+ * the "started"/"starting" states instead of incorrectly elevating to "active".
66
+ * Conversely, if the session has disappeared we immediately report "inactive"
67
+ * regardless of the stored status to avoid stale UI.
68
+ */
69
+ function resolveAgentStatus(storedStatus, sessionExists) {
70
+ if (!sessionExists) {
71
+ return CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE;
72
+ }
73
+ if (!storedStatus || storedStatus === CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE) {
74
+ return CREWLY_CONSTANTS.AGENT_STATUSES.STARTED;
75
+ }
76
+ return storedStatus;
77
+ }
78
+ /**
79
+ * Core logic for starting a single team member
80
+ * @param context - API context with services
81
+ * @param team - The team containing the member
82
+ * @param member - The team member to start
83
+ * @param projectPath - Optional project path for the session
84
+ * @returns Result of the start operation
85
+ */
86
+ async function _startTeamMemberCore(context, team, member, projectPath) {
87
+ try {
88
+ // Check if member already has an active session
89
+ if (member.sessionName) {
90
+ const sessions = await context.tmuxService.listSessions();
91
+ const hasActiveSession = sessions.some(s => s.sessionName === member.sessionName);
92
+ if (hasActiveSession) {
93
+ // Handle synchronization issue: session exists but status might be inactive
94
+ if (member.agentStatus === CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE) {
95
+ try {
96
+ // Try to check if the agent in the session is responsive
97
+ const captureResult = await Promise.race([
98
+ context.tmuxService.capturePane(member.sessionName, 5),
99
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Agent check timeout')), 1000))
100
+ ]);
101
+ // If we can capture output, the session is likely active
102
+ if (captureResult && captureResult.length > 0) {
103
+ // Load fresh team data to avoid race conditions
104
+ const currentTeams = await context.storageService.getTeams();
105
+ const currentTeam = currentTeams.find(t => t.id === team.id);
106
+ const currentMember = currentTeam?.members.find(m => m.id === member.id);
107
+ if (currentTeam && currentMember) {
108
+ // Update status to active to sync with session state
109
+ currentMember.agentStatus = CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE;
110
+ currentMember.workingStatus = currentMember.workingStatus || 'working';
111
+ currentMember.updatedAt = new Date().toISOString();
112
+ await context.storageService.saveTeam(currentTeam);
113
+ }
114
+ return {
115
+ success: true,
116
+ memberName: member.name,
117
+ memberId: member.id,
118
+ sessionName: member.sessionName,
119
+ status: 'synchronized'
120
+ };
121
+ }
122
+ else {
123
+ // Session exists but appears zombie - kill it and proceed with new creation
124
+ console.warn(`Cleaning up zombie session: ${member.sessionName}`);
125
+ await context.tmuxService.killSession(member.sessionName).catch(() => {
126
+ // Ignore errors if session doesn't exist
127
+ });
128
+ // Clear the session name and allow new session creation (but don't save yet)
129
+ member.sessionName = '';
130
+ member.updatedAt = new Date().toISOString();
131
+ }
132
+ }
133
+ catch (error) {
134
+ // If we can't check the session, assume it's zombie and clean it up
135
+ console.warn(`Error checking session ${member.sessionName}, treating as zombie:`, error);
136
+ await context.tmuxService.killSession(member.sessionName).catch(() => {
137
+ // Ignore errors if session doesn't exist
138
+ });
139
+ // Clear the session name and allow new session creation (but don't save yet)
140
+ member.sessionName = '';
141
+ member.updatedAt = new Date().toISOString();
142
+ }
143
+ }
144
+ else {
145
+ // Session exists and agent status is active/activating - this is normal conflict
146
+ return {
147
+ success: false,
148
+ memberName: member.name,
149
+ memberId: member.id,
150
+ sessionName: member.sessionName,
151
+ status: 'already_active',
152
+ error: 'Team member already has an active session'
153
+ };
154
+ }
155
+ }
156
+ }
157
+ // Only prevent processing if member has BOTH active status AND an existing session
158
+ // This allows newly 'activating' members (set by API endpoints) to proceed with session creation
159
+ if (member.agentStatus === CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE && member.sessionName) {
160
+ // Double-check that the session actually exists
161
+ const sessions = await context.tmuxService.listSessions();
162
+ const hasActiveSession = sessions.some(s => s.sessionName === member.sessionName);
163
+ if (hasActiveSession) {
164
+ return {
165
+ success: false,
166
+ memberName: member.name,
167
+ memberId: member.id,
168
+ sessionName: member.sessionName,
169
+ status: member.agentStatus,
170
+ error: `Team member is already active with session ${member.sessionName}`
171
+ };
172
+ }
173
+ else {
174
+ // Session doesn't exist, clear sessionName and allow new creation (but don't save yet)
175
+ member.sessionName = '';
176
+ member.updatedAt = new Date().toISOString();
177
+ }
178
+ }
179
+ // Generate session name
180
+ const teamSlug = team.name.toLowerCase().replace(/\s+/g, '-');
181
+ const memberSlug = member.name.toLowerCase().replace(/\s+/g, '-');
182
+ const memberIdSlug = member.id.substring(0, 8);
183
+ const sessionName = `${teamSlug}-${memberSlug}-${memberIdSlug}`;
184
+ // Load fresh team data before making any changes to avoid race conditions with MCP registration
185
+ const currentTeams = await context.storageService.getTeams();
186
+ const currentTeam = currentTeams.find(t => t.id === team.id);
187
+ const currentMember = currentTeam?.members.find(m => m.id === member.id);
188
+ if (!currentTeam || !currentMember) {
189
+ return {
190
+ success: false,
191
+ memberName: member.name,
192
+ memberId: member.id,
193
+ sessionName: null,
194
+ status: 'failed',
195
+ error: 'Team or member not found during session creation'
196
+ };
197
+ }
198
+ // Set sessionName in team member BEFORE creating session to avoid race condition
199
+ // Use fresh team data to preserve any concurrent agentStatus updates
200
+ currentMember.sessionName = sessionName;
201
+ currentMember.workingStatus = currentMember.workingStatus || CREWLY_CONSTANTS.WORKING_STATUSES.IDLE;
202
+ currentMember.updatedAt = new Date().toISOString();
203
+ await context.storageService.saveTeam(currentTeam);
204
+ // Use the unified agent registration service for team member creation with retry logic
205
+ // This helps handle race conditions in tmux session creation
206
+ const MAX_CREATION_RETRIES = 3;
207
+ let createResult = { success: false };
208
+ let lastError;
209
+ for (let attempt = 1; attempt <= MAX_CREATION_RETRIES; attempt++) {
210
+ createResult = await context.agentRegistrationService.createAgentSession({
211
+ sessionName,
212
+ role: currentMember.role,
213
+ projectPath: projectPath,
214
+ memberId: currentMember.id,
215
+ teamId: team.id,
216
+ });
217
+ if (createResult.success) {
218
+ break;
219
+ }
220
+ lastError = createResult.error;
221
+ // If this isn't the last attempt, wait before retrying with exponential backoff
222
+ if (attempt < MAX_CREATION_RETRIES) {
223
+ const retryDelay = 1000 * attempt; // 1s, 2s exponential backoff
224
+ await new Promise(resolve => setTimeout(resolve, retryDelay));
225
+ }
226
+ }
227
+ if (createResult.success) {
228
+ // Initialize memory for this team member so remember/recall MCP tools work
229
+ try {
230
+ const memoryService = MemoryService.getInstance();
231
+ await memoryService.initializeForSession(sessionName, currentMember.role, projectPath || process.cwd());
232
+ }
233
+ catch (memError) {
234
+ console.warn(`[TeamController] Failed to initialize memory for ${sessionName}:`, memError);
235
+ }
236
+ // CRITICAL: Load fresh data again after session creation to preserve MCP registration updates
237
+ const finalTeams = await context.storageService.getTeams();
238
+ const finalTeam = finalTeams.find(t => t.id === team.id);
239
+ const finalMember = finalTeam?.members.find(m => m.id === member.id);
240
+ if (finalTeam && finalMember) {
241
+ // Only update sessionName if needed, preserve all other fields including agentStatus
242
+ const needsSessionUpdate = finalMember.sessionName !== (createResult.sessionName || sessionName);
243
+ if (needsSessionUpdate) {
244
+ finalMember.sessionName = createResult.sessionName || sessionName;
245
+ finalMember.updatedAt = new Date().toISOString();
246
+ await context.storageService.saveTeam(finalTeam);
247
+ }
248
+ return {
249
+ success: true,
250
+ memberName: finalMember.name,
251
+ memberId: finalMember.id,
252
+ sessionName: createResult.sessionName || sessionName,
253
+ status: finalMember.agentStatus
254
+ };
255
+ }
256
+ else {
257
+ console.error(`Team or member not found after session creation: teamId=${team.id}, memberId=${member.id}`);
258
+ return {
259
+ success: false,
260
+ memberName: member.name,
261
+ memberId: member.id,
262
+ sessionName: null,
263
+ status: 'failed',
264
+ error: 'Team or member not found after session creation'
265
+ };
266
+ }
267
+ }
268
+ else {
269
+ // Load fresh data before updating failure status
270
+ const failureTeams = await context.storageService.getTeams();
271
+ const failureTeam = failureTeams.find(t => t.id === team.id);
272
+ const failureMember = failureTeam?.members.find(m => m.id === member.id);
273
+ if (failureTeam && failureMember) {
274
+ // Reset to inactive if session creation failed
275
+ failureMember.agentStatus = CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE;
276
+ failureMember.sessionName = '';
277
+ failureMember.updatedAt = new Date().toISOString();
278
+ await context.storageService.saveTeam(failureTeam);
279
+ }
280
+ console.error(`All ${MAX_CREATION_RETRIES} session creation attempts failed for ${member.name}: ${lastError}`);
281
+ return {
282
+ success: false,
283
+ memberName: member.name,
284
+ memberId: member.id,
285
+ sessionName: null,
286
+ status: 'failed',
287
+ error: lastError || createResult?.error || `Failed to create team member session after ${MAX_CREATION_RETRIES} attempts`
288
+ };
289
+ }
290
+ }
291
+ catch (error) {
292
+ // Load fresh data before updating error status
293
+ const errorTeams = await context.storageService.getTeams();
294
+ const errorTeam = errorTeams.find(t => t.id === team.id);
295
+ const errorMember = errorTeam?.members.find(m => m.id === member.id);
296
+ if (errorTeam && errorMember) {
297
+ // Reset to inactive if session creation failed
298
+ errorMember.agentStatus = CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE;
299
+ errorMember.sessionName = '';
300
+ errorMember.updatedAt = new Date().toISOString();
301
+ await context.storageService.saveTeam(errorTeam);
302
+ }
303
+ console.error('Error starting team member:', error);
304
+ return {
305
+ success: false,
306
+ memberName: member.name,
307
+ memberId: member.id,
308
+ sessionName: null,
309
+ status: 'failed',
310
+ error: error instanceof Error ? error.message : 'Unknown error'
311
+ };
312
+ }
313
+ }
314
+ /**
315
+ * Core logic for stopping a single team member
316
+ * @param context - API context with services
317
+ * @param team - The team containing the member
318
+ * @param member - The team member to stop
319
+ * @returns Result of the stop operation
320
+ */
321
+ async function _stopTeamMemberCore(context, team, member) {
322
+ try {
323
+ // Use the unified agent registration service for team member termination
324
+ if (member.sessionName) {
325
+ const stopResult = await context.agentRegistrationService.terminateAgentSession(member.sessionName, member.role);
326
+ if (!stopResult.success) {
327
+ console.error('Failed to terminate team member session:', stopResult.error);
328
+ return {
329
+ success: false,
330
+ memberName: member.name,
331
+ memberId: member.id,
332
+ sessionName: member.sessionName,
333
+ status: 'failed',
334
+ error: stopResult.error || 'Failed to stop team member session'
335
+ };
336
+ }
337
+ }
338
+ // Update team member status
339
+ const oldSessionName = member.sessionName;
340
+ const mutableMember = member;
341
+ mutableMember.sessionName = '';
342
+ mutableMember.agentStatus = CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE;
343
+ mutableMember.workingStatus = CREWLY_CONSTANTS.WORKING_STATUSES.IDLE;
344
+ mutableMember.updatedAt = new Date().toISOString();
345
+ await context.storageService.saveTeam(team);
346
+ return {
347
+ success: true,
348
+ memberName: member.name,
349
+ memberId: member.id,
350
+ sessionName: oldSessionName,
351
+ status: CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE
352
+ };
353
+ }
354
+ catch (error) {
355
+ console.error('Error stopping team member:', error);
356
+ return {
357
+ success: false,
358
+ memberName: member.name,
359
+ memberId: member.id,
360
+ sessionName: member.sessionName || null,
361
+ status: 'failed',
362
+ error: error instanceof Error ? error.message : 'Unknown error'
363
+ };
364
+ }
365
+ }
366
+ /**
367
+ * Creates (or refreshes) orchestrator subscriptions to agent lifecycle events.
368
+ *
369
+ * Clears any existing subscriptions for the orchestrator session first to avoid
370
+ * duplicates on re-registration, then subscribes to all agent status change events
371
+ * with the maximum TTL (24 hours). Re-created each time the orchestrator registers.
372
+ */
373
+ function ensureOrchestratorSubscriptions() {
374
+ if (!eventBusService)
375
+ return;
376
+ // Clear any existing orchestrator subscriptions to avoid duplicates on re-registration
377
+ const existing = eventBusService.listSubscriptions(ORCHESTRATOR_SESSION_NAME);
378
+ for (const sub of existing) {
379
+ eventBusService.unsubscribe(sub.id);
380
+ }
381
+ // Subscribe to all agent lifecycle events with max TTL
382
+ eventBusService.subscribe({
383
+ eventType: ['agent:status_changed', 'agent:idle', 'agent:busy', 'agent:active', 'agent:inactive'],
384
+ filter: {},
385
+ subscriberSession: ORCHESTRATOR_SESSION_NAME,
386
+ oneShot: false,
387
+ ttlMinutes: 1440,
388
+ });
389
+ }
390
+ export async function createTeam(req, res) {
391
+ try {
392
+ const { name, description, members, projectPath, currentProject, projectIds } = req.body;
393
+ if (!name || !members || !Array.isArray(members) || members.length === 0) {
394
+ res.status(400).json({
395
+ success: false,
396
+ error: 'Missing required fields: name and members array'
397
+ });
398
+ return;
399
+ }
400
+ for (const member of members) {
401
+ if (!member.name || !member.role || !member.systemPrompt) {
402
+ res.status(400).json({
403
+ success: false,
404
+ error: 'All team members must have name, role, and systemPrompt'
405
+ });
406
+ return;
407
+ }
408
+ }
409
+ const existingTeams = await this.storageService.getTeams();
410
+ if (existingTeams.find(t => t.name === name)) {
411
+ res.status(409).json({
412
+ success: false,
413
+ error: `Team with name "${name}" already exists`
414
+ });
415
+ return;
416
+ }
417
+ const teamId = uuidv4();
418
+ const teamMembers = [];
419
+ for (let i = 0; i < members.length; i++) {
420
+ const member = members[i];
421
+ const memberId = uuidv4();
422
+ const teamMember = {
423
+ id: memberId,
424
+ name: member.name,
425
+ sessionName: '',
426
+ role: member.role,
427
+ avatar: member.avatar,
428
+ systemPrompt: member.systemPrompt,
429
+ agentStatus: CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE,
430
+ workingStatus: CREWLY_CONSTANTS.WORKING_STATUSES.IDLE,
431
+ runtimeType: member.runtimeType || RUNTIME_TYPES.CLAUDE_CODE,
432
+ skillOverrides: member.skillOverrides || [],
433
+ excludedRoleSkills: member.excludedRoleSkills || [],
434
+ createdAt: new Date().toISOString(),
435
+ updatedAt: new Date().toISOString()
436
+ };
437
+ teamMembers.push(teamMember);
438
+ }
439
+ const team = {
440
+ id: teamId,
441
+ name,
442
+ description: description || '',
443
+ members: teamMembers,
444
+ projectIds: projectIds || (currentProject ? [currentProject] : []),
445
+ createdAt: new Date().toISOString(),
446
+ updatedAt: new Date().toISOString()
447
+ };
448
+ await this.storageService.saveTeam(team);
449
+ for (const member of teamMembers) {
450
+ if (member.role === 'tpm') {
451
+ // TPM uses file-based workflow (no duplicate messages)
452
+ }
453
+ else {
454
+ this.schedulerService.scheduleDefaultCheckins(member.sessionName);
455
+ }
456
+ }
457
+ res.status(201).json({
458
+ success: true,
459
+ data: team,
460
+ message: 'Team created and sessions started successfully'
461
+ });
462
+ }
463
+ catch (error) {
464
+ console.error('Error creating team:', error);
465
+ res.status(500).json({
466
+ success: false,
467
+ error: error instanceof Error ? error.message : 'Failed to create team'
468
+ });
469
+ }
470
+ }
471
+ export async function getTeams(req, res) {
472
+ try {
473
+ const teams = await this.storageService.getTeams();
474
+ const orchestratorStatus = await this.storageService.getOrchestratorStatus();
475
+ // Check actual PTY session existence for accurate status
476
+ const backend = getSessionBackendSync();
477
+ const orchestratorSessionExists = backend?.sessionExists(CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME) || false;
478
+ const actualOrchestratorStatus = resolveAgentStatus(orchestratorStatus?.agentStatus, orchestratorSessionExists);
479
+ const orchestratorTeam = buildOrchestratorTeam(actualOrchestratorStatus, orchestratorStatus);
480
+ // Also update status for team members based on actual session existence
481
+ const teamsWithActualStatus = teams.map(team => ({
482
+ ...team,
483
+ members: team.members.map(member => {
484
+ const memberSessionExists = backend?.sessionExists(member.sessionName) || false;
485
+ const resolvedStatus = resolveAgentStatus(member.agentStatus, memberSessionExists);
486
+ return {
487
+ ...member,
488
+ agentStatus: resolvedStatus,
489
+ };
490
+ })
491
+ }));
492
+ const allTeams = [orchestratorTeam, ...teamsWithActualStatus];
493
+ res.json({
494
+ success: true,
495
+ data: allTeams,
496
+ orchestrator: {
497
+ ...orchestratorStatus,
498
+ agentStatus: actualOrchestratorStatus
499
+ }
500
+ });
501
+ }
502
+ catch (error) {
503
+ console.error('Error getting teams:', error);
504
+ res.status(500).json({
505
+ success: false,
506
+ error: 'Failed to retrieve teams'
507
+ });
508
+ }
509
+ }
510
+ export async function getTeam(req, res) {
511
+ try {
512
+ const { id } = req.params;
513
+ if (id === 'orchestrator') {
514
+ const orchestratorStatus = await this.storageService.getOrchestratorStatus();
515
+ // Check actual PTY session existence for accurate status
516
+ const backend = getSessionBackendSync();
517
+ const orchestratorSessionExists = backend?.sessionExists(CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME) || false;
518
+ const actualOrchestratorStatus = resolveAgentStatus(orchestratorStatus?.agentStatus, orchestratorSessionExists);
519
+ const orchestratorTeam = buildOrchestratorTeam(actualOrchestratorStatus, orchestratorStatus);
520
+ res.json({ success: true, data: orchestratorTeam });
521
+ return;
522
+ }
523
+ const teams = await this.storageService.getTeams();
524
+ const team = teams.find(t => t.id === id);
525
+ if (!team) {
526
+ res.status(404).json({ success: false, error: 'Team not found' });
527
+ return;
528
+ }
529
+ // Verify actual session existence for each member to avoid stale status
530
+ const backend = getSessionBackendSync();
531
+ if (backend) {
532
+ for (const member of team.members) {
533
+ if (member.sessionName) {
534
+ const sessionExists = backend.sessionExists(member.sessionName);
535
+ const resolvedStatus = resolveAgentStatus(member.agentStatus, sessionExists);
536
+ member.agentStatus = resolvedStatus;
537
+ if (!sessionExists) {
538
+ member.sessionName = '';
539
+ }
540
+ }
541
+ }
542
+ }
543
+ res.json({ success: true, data: team });
544
+ }
545
+ catch (error) {
546
+ console.error('Error getting team:', error);
547
+ res.status(500).json({ success: false, error: 'Failed to retrieve team' });
548
+ }
549
+ }
550
+ export async function startTeam(req, res) {
551
+ try {
552
+ const { id } = req.params;
553
+ const { projectId } = req.body;
554
+ if (id === ORCHESTRATOR_ROLE) {
555
+ res.status(400).json({
556
+ success: false,
557
+ error: 'Orchestrator is managed at system level. Use /orchestrator/setup endpoint instead.'
558
+ });
559
+ return;
560
+ }
561
+ const teams = await this.storageService.getTeams();
562
+ const team = teams.find(t => t.id === id);
563
+ if (!team) {
564
+ res.status(404).json({ success: false, error: 'Team not found' });
565
+ return;
566
+ }
567
+ const projects = await this.storageService.getProjects();
568
+ let targetProjectId = projectId || team.projectIds[0];
569
+ if (!targetProjectId) {
570
+ res.status(400).json({ success: false, error: 'No project specified. Please select a project to assign this team to.' });
571
+ return;
572
+ }
573
+ const assignedProject = projects.find(p => p.id === targetProjectId);
574
+ if (!assignedProject) {
575
+ res.status(400).json({ success: false, error: 'Selected project not found. Please check project selection.' });
576
+ return;
577
+ }
578
+ // Update team's projectIds to persist the project assignment
579
+ if (!team.projectIds.includes(targetProjectId)) {
580
+ team.projectIds.push(targetProjectId);
581
+ }
582
+ team.updatedAt = new Date().toISOString();
583
+ await this.storageService.saveTeam(team);
584
+ let sessionsCreated = 0;
585
+ let sessionsAlreadyRunning = 0;
586
+ const results = [];
587
+ // PHASE 2: Immediately set ALL members to 'starting' for instant UI feedback
588
+ for (const member of team.members) {
589
+ const mutableMember = member;
590
+ mutableMember.agentStatus = CREWLY_CONSTANTS.AGENT_STATUSES.STARTING;
591
+ mutableMember.updatedAt = new Date().toISOString();
592
+ }
593
+ await this.storageService.saveTeam(team);
594
+ // Start each team member using the internal helper function
595
+ for (const member of team.members) {
596
+ const result = await _startTeamMemberCore(this, team, member, assignedProject.path);
597
+ // Convert internal result to the expected format for the response
598
+ const resultForResponse = {
599
+ memberName: result.memberName,
600
+ sessionName: result.sessionName,
601
+ status: result.status === 'synchronized' ? 'already_running' : result.status,
602
+ success: result.success,
603
+ memberId: result.memberId
604
+ };
605
+ if (result.error) {
606
+ resultForResponse.error = result.error;
607
+ }
608
+ // Count sessions for response
609
+ if (result.success) {
610
+ if (result.status === 'synchronized' || result.status === 'already_active') {
611
+ sessionsAlreadyRunning++;
612
+ }
613
+ else if (result.status !== 'failed') {
614
+ sessionsCreated++;
615
+ }
616
+ }
617
+ results.push(resultForResponse);
618
+ }
619
+ // Note: Individual member sessions save their own status updates during registration
620
+ // No need to save the team object here as it would overwrite the updated agentStatus
621
+ // from MCP registration with stale data
622
+ const responseMessage = `Team started. Created ${sessionsCreated} new sessions, ${sessionsAlreadyRunning} already running. Sessions are working in project: ${assignedProject.name}`;
623
+ res.json({
624
+ success: true,
625
+ message: responseMessage,
626
+ data: { sessionsCreated, sessionsAlreadyRunning, projectName: assignedProject.name, projectPath: assignedProject.path, results }
627
+ });
628
+ }
629
+ catch (error) {
630
+ console.error('Error starting team:', error);
631
+ res.status(500).json({ success: false, error: 'Failed to start team' });
632
+ }
633
+ }
634
+ export async function stopTeam(req, res) {
635
+ try {
636
+ const { id } = req.params;
637
+ if (id === 'orchestrator') {
638
+ res.json({ success: true, message: 'Orchestrator session cannot be stopped as it manages the system', data: { sessionsStopped: 0, sessionsNotFound: 0, results: [] } });
639
+ return;
640
+ }
641
+ const teams = await this.storageService.getTeams();
642
+ const team = teams.find(t => t.id === id);
643
+ if (!team) {
644
+ res.status(404).json({ success: false, error: 'Team not found' });
645
+ return;
646
+ }
647
+ let sessionsStopped = 0;
648
+ let sessionsNotFound = 0;
649
+ const results = [];
650
+ // Stop each team member using the internal helper function
651
+ for (const member of team.members) {
652
+ if (!member.sessionName) {
653
+ // Handle members with no active session
654
+ results.push({ memberName: member.name, memberId: member.id, sessionName: null, status: 'no_session', success: true });
655
+ continue;
656
+ }
657
+ const result = await _stopTeamMemberCore(this, team, member);
658
+ // Convert internal result to the expected format for the response
659
+ const resultForResponse = {
660
+ memberName: result.memberName,
661
+ memberId: result.memberId,
662
+ sessionName: result.sessionName,
663
+ status: result.success ? 'stopped' : (result.status === 'failed' ? 'failed' : 'not_found'),
664
+ success: result.success,
665
+ };
666
+ if (result.error) {
667
+ resultForResponse.error = result.error;
668
+ }
669
+ // Count sessions for response
670
+ if (result.success) {
671
+ sessionsStopped++;
672
+ }
673
+ else if (result.status === 'not_found' || (result.error && result.error.includes('not found'))) {
674
+ sessionsNotFound++;
675
+ resultForResponse.status = 'not_found';
676
+ }
677
+ results.push(resultForResponse);
678
+ }
679
+ // Update team timestamp after all members have been processed
680
+ team.updatedAt = new Date().toISOString();
681
+ await this.storageService.saveTeam(team);
682
+ if (this.messageSchedulerService) {
683
+ try {
684
+ const scheduledMessages = await this.storageService.getScheduledMessages();
685
+ const teamMessages = scheduledMessages.filter(msg => msg.targetTeam === team.id);
686
+ for (const message of teamMessages) {
687
+ const mutableMessage = { ...message, isActive: false };
688
+ await this.storageService.saveScheduledMessage(mutableMessage);
689
+ this.messageSchedulerService.cancelMessage(message.id);
690
+ }
691
+ }
692
+ catch (error) {
693
+ console.error('Error cancelling team scheduled messages:', error);
694
+ }
695
+ }
696
+ res.json({ success: true, message: `Team stopped. Stopped ${sessionsStopped} sessions, ${sessionsNotFound} were already stopped.`, data: { sessionsStopped, sessionsNotFound, results } });
697
+ }
698
+ catch (error) {
699
+ console.error('Error stopping team:', error);
700
+ res.status(500).json({ success: false, error: 'Failed to stop team' });
701
+ }
702
+ }
703
+ export async function getTeamWorkload(req, res) {
704
+ try {
705
+ const { id } = req.params;
706
+ const teams = await this.storageService.getTeams();
707
+ const team = teams.find(t => t.id === id);
708
+ if (!team) {
709
+ res.status(404).json({ success: false, error: 'Team not found' });
710
+ return;
711
+ }
712
+ const projects = await this.storageService.getProjects();
713
+ let assignedTickets = 0;
714
+ let completedTickets = 0;
715
+ for (const project of projects) {
716
+ const tickets = await this.storageService.getTickets(project.path, { assignedTo: id });
717
+ assignedTickets += tickets.length;
718
+ completedTickets += tickets.filter((t) => t.status === 'done').length;
719
+ }
720
+ res.json({ success: true, data: { teamId: id, teamName: team.name, assignedTickets, completedTickets, workloadPercentage: assignedTickets > 0 ? Math.round((completedTickets / assignedTickets) * 100) : 0 } });
721
+ }
722
+ catch (error) {
723
+ console.error('Error getting team workload:', error);
724
+ res.status(500).json({ success: false, error: 'Failed to retrieve team workload' });
725
+ }
726
+ }
727
+ export async function deleteTeam(req, res) {
728
+ try {
729
+ const { id } = req.params;
730
+ if (id === 'orchestrator') {
731
+ res.status(400).json({ success: false, error: 'Cannot delete the Orchestrator Team' });
732
+ return;
733
+ }
734
+ const teams = await this.storageService.getTeams();
735
+ const team = teams.find(t => t.id === id);
736
+ if (!team) {
737
+ res.status(404).json({ success: false, error: 'Team not found' });
738
+ return;
739
+ }
740
+ try {
741
+ const orchestratorSession = CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME;
742
+ const sessionExists = await this.tmuxService.sessionExists(orchestratorSession);
743
+ if (sessionExists) {
744
+ const sessionNames = team.members?.map(m => m.sessionName).filter(Boolean) || [];
745
+ const orchestratorPrompt = `## Team Deletion Notification\n\nTeam **"${team.name}"** (ID: ${id}) is being deleted.\n\n### Sessions to be terminated:\n${sessionNames.length > 0 ? sessionNames.map(name => `- ${name}`).join('\n') : '- No active sessions'}\n\n### Team Details:\n- **Team Name**: ${team.name}\n- **Members**: ${team.members?.length || 0}\n- **Current Projects**: ${team.projectIds?.length ? team.projectIds.join(', ') : 'None'}\n\nThe orchestrator should be aware that these team members are no longer available for task delegation.\n\n---\n*Team deletion initiated by user request.*`;
746
+ await this.tmuxService.sendMessage(orchestratorSession, orchestratorPrompt);
747
+ }
748
+ }
749
+ catch (notificationError) {
750
+ console.warn('Failed to notify orchestrator about team deletion:', notificationError);
751
+ }
752
+ if (team.members && team.members.length > 0) {
753
+ for (const member of team.members) {
754
+ if (member.sessionName) {
755
+ try {
756
+ await this.tmuxService.killSession(member.sessionName);
757
+ this.schedulerService.cancelAllChecksForSession(member.sessionName);
758
+ }
759
+ catch (error) {
760
+ console.warn(`Failed to kill session for member ${member.name}:`, error);
761
+ }
762
+ }
763
+ }
764
+ }
765
+ await this.storageService.deleteTeam(id);
766
+ res.json({ success: true, message: 'Team terminated successfully' });
767
+ }
768
+ catch (error) {
769
+ console.error('Error deleting team:', error);
770
+ res.status(500).json({ success: false, error: 'Failed to terminate team' });
771
+ }
772
+ }
773
+ export async function getTeamMemberSession(req, res) {
774
+ try {
775
+ const { teamId, memberId } = req.params;
776
+ const { lines = 50 } = req.query;
777
+ const teams = await this.storageService.getTeams();
778
+ const team = teams.find(t => t.id === teamId);
779
+ if (!team) {
780
+ res.status(404).json({ success: false, error: 'Team not found' });
781
+ return;
782
+ }
783
+ const member = team.members?.find(m => m.id === memberId);
784
+ if (!member) {
785
+ res.status(404).json({ success: false, error: 'Team member not found' });
786
+ return;
787
+ }
788
+ if (!member.sessionName) {
789
+ res.status(400).json({ success: false, error: 'No active session for this team member' });
790
+ return;
791
+ }
792
+ const output = await this.tmuxService.capturePane(member.sessionName, Number(lines));
793
+ res.json({ success: true, data: { memberId: member.id, memberName: member.name, sessionName: member.sessionName, output, timestamp: new Date().toISOString() } });
794
+ }
795
+ catch (error) {
796
+ console.error('Error getting team member session:', error);
797
+ res.status(500).json({ success: false, error: 'Failed to get team member session' });
798
+ }
799
+ }
800
+ export async function addTeamMember(req, res) {
801
+ try {
802
+ const { id } = req.params;
803
+ const { name, role, avatar } = req.body;
804
+ if (!name || !role) {
805
+ res.status(400).json({ success: false, error: 'Name and role are required' });
806
+ return;
807
+ }
808
+ const teams = await this.storageService.getTeams();
809
+ const team = teams.find(t => t.id === id);
810
+ if (!team) {
811
+ res.status(404).json({ success: false, error: 'Team not found' });
812
+ return;
813
+ }
814
+ const newMember = {
815
+ id: `member-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
816
+ name: String(name).trim(),
817
+ sessionName: '',
818
+ role: role,
819
+ avatar: avatar,
820
+ systemPrompt: `You are ${name}, a ${role} on the ${team.name} team.`,
821
+ agentStatus: CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE,
822
+ workingStatus: CREWLY_CONSTANTS.WORKING_STATUSES.IDLE,
823
+ runtimeType: RUNTIME_TYPES.CLAUDE_CODE,
824
+ createdAt: new Date().toISOString(),
825
+ updatedAt: new Date().toISOString()
826
+ };
827
+ team.members.push(newMember);
828
+ team.updatedAt = new Date().toISOString();
829
+ await this.storageService.saveTeam(team);
830
+ res.json({ success: true, data: newMember, message: 'Team member added successfully' });
831
+ }
832
+ catch (error) {
833
+ console.error('Error adding team member:', error);
834
+ res.status(500).json({ success: false, error: 'Failed to add team member' });
835
+ }
836
+ }
837
+ export async function updateTeamMember(req, res) {
838
+ try {
839
+ const { teamId, memberId } = req.params;
840
+ const updates = req.body;
841
+ const teams = await this.storageService.getTeams();
842
+ const team = teams.find(t => t.id === teamId);
843
+ if (!team) {
844
+ res.status(404).json({ success: false, error: 'Team not found' });
845
+ return;
846
+ }
847
+ const memberIndex = team.members.findIndex(m => m.id === memberId);
848
+ if (memberIndex === -1) {
849
+ res.status(404).json({ success: false, error: 'Team member not found' });
850
+ return;
851
+ }
852
+ const updatedMember = { ...team.members[memberIndex], ...updates, updatedAt: new Date().toISOString() };
853
+ team.members[memberIndex] = updatedMember;
854
+ team.updatedAt = new Date().toISOString();
855
+ await this.storageService.saveTeam(team);
856
+ res.json({ success: true, data: updatedMember, message: 'Team member updated successfully' });
857
+ }
858
+ catch (error) {
859
+ console.error('Error updating team member:', error);
860
+ res.status(500).json({ success: false, error: 'Failed to update team member' });
861
+ }
862
+ }
863
+ export async function deleteTeamMember(req, res) {
864
+ try {
865
+ const { teamId, memberId } = req.params;
866
+ const teams = await this.storageService.getTeams();
867
+ const team = teams.find(t => t.id === teamId);
868
+ if (!team) {
869
+ res.status(404).json({ success: false, error: 'Team not found' });
870
+ return;
871
+ }
872
+ const memberIndex = team.members.findIndex(m => m.id === memberId);
873
+ if (memberIndex === -1) {
874
+ res.status(404).json({ success: false, error: 'Team member not found' });
875
+ return;
876
+ }
877
+ const member = team.members[memberIndex];
878
+ if (member.sessionName) {
879
+ try {
880
+ await this.tmuxService.killSession(member.sessionName);
881
+ }
882
+ catch (error) {
883
+ console.warn(`Failed to kill tmux session ${member.sessionName}:`, error);
884
+ }
885
+ }
886
+ team.members.splice(memberIndex, 1);
887
+ team.updatedAt = new Date().toISOString();
888
+ await this.storageService.saveTeam(team);
889
+ res.json({ success: true, message: 'Team member removed successfully' });
890
+ }
891
+ catch (error) {
892
+ console.error('Error deleting team member:', error);
893
+ res.status(500).json({ success: false, error: 'Failed to delete team member' });
894
+ }
895
+ }
896
+ export async function startTeamMember(req, res) {
897
+ try {
898
+ const { teamId, memberId } = req.params;
899
+ const teams = await this.storageService.getTeams();
900
+ const team = teams.find(t => t.id === teamId);
901
+ if (!team) {
902
+ res.status(404).json({ success: false, error: 'Team not found' });
903
+ return;
904
+ }
905
+ const member = team.members.find(m => m.id === memberId);
906
+ if (!member) {
907
+ res.status(404).json({ success: false, error: 'Team member not found' });
908
+ return;
909
+ }
910
+ // PHASE 3: Immediately set target member to 'starting' for instant UI feedback
911
+ const mutableMember = member;
912
+ mutableMember.agentStatus = CREWLY_CONSTANTS.AGENT_STATUSES.STARTING;
913
+ mutableMember.updatedAt = new Date().toISOString();
914
+ await this.storageService.saveTeam(team);
915
+ // Get project path if team has a current project
916
+ let projectPath;
917
+ if (team.projectIds[0]) {
918
+ const projects = await this.storageService.getProjects();
919
+ const project = projects.find(p => p.id === team.projectIds[0]);
920
+ projectPath = project?.path;
921
+ }
922
+ // Use the internal helper function to start the team member
923
+ const result = await _startTeamMemberCore(this, team, member, projectPath);
924
+ // Handle the result and respond appropriately
925
+ if (result.success) {
926
+ if (result.status === 'synchronized') {
927
+ res.json({
928
+ success: true,
929
+ message: 'Agent status synchronized with active session',
930
+ data: {
931
+ memberId: result.memberId,
932
+ sessionName: result.sessionName,
933
+ status: CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE
934
+ }
935
+ });
936
+ }
937
+ else {
938
+ res.json({
939
+ success: true,
940
+ data: {
941
+ memberId: result.memberId,
942
+ sessionName: result.sessionName,
943
+ status: result.status
944
+ },
945
+ message: `Team member ${result.memberName} started successfully`
946
+ });
947
+ }
948
+ }
949
+ else {
950
+ if (result.status === 'already_active') {
951
+ res.status(400).json({
952
+ success: false,
953
+ error: result.error || 'Team member already has an active session'
954
+ });
955
+ }
956
+ else if (result.error?.includes('already')) {
957
+ res.status(400).json({
958
+ success: false,
959
+ error: result.error
960
+ });
961
+ }
962
+ else {
963
+ res.status(500).json({
964
+ success: false,
965
+ error: result.error || 'Failed to start team member'
966
+ });
967
+ }
968
+ }
969
+ }
970
+ catch (error) {
971
+ console.error('Error starting team member:', error);
972
+ res.status(500).json({ success: false, error: 'Failed to start team member' });
973
+ }
974
+ }
975
+ export async function stopTeamMember(req, res) {
976
+ try {
977
+ const { teamId, memberId } = req.params;
978
+ const teams = await this.storageService.getTeams();
979
+ const team = teams.find(t => t.id === teamId);
980
+ if (!team) {
981
+ res.status(404).json({ success: false, error: 'Team not found' });
982
+ return;
983
+ }
984
+ const member = team.members.find(m => m.id === memberId);
985
+ if (!member) {
986
+ res.status(404).json({ success: false, error: 'Team member not found' });
987
+ return;
988
+ }
989
+ // Use the internal helper function to stop the team member
990
+ const result = await _stopTeamMemberCore(this, team, member);
991
+ // Handle the result and respond appropriately
992
+ if (result.success) {
993
+ res.json({
994
+ success: true,
995
+ data: {
996
+ memberId: result.memberId,
997
+ status: CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE
998
+ },
999
+ message: `Team member ${result.memberName} stopped successfully`
1000
+ });
1001
+ }
1002
+ else {
1003
+ res.status(500).json({
1004
+ success: false,
1005
+ error: result.error || 'Failed to stop team member'
1006
+ });
1007
+ }
1008
+ }
1009
+ catch (error) {
1010
+ console.error('Error stopping team member:', error);
1011
+ res.status(500).json({ success: false, error: 'Failed to stop team member' });
1012
+ }
1013
+ }
1014
+ export async function reportMemberReady(req, res) {
1015
+ try {
1016
+ const { sessionName, role, capabilities, readyAt } = req.body;
1017
+ if (!sessionName || !role) {
1018
+ res.status(400).json({ success: false, error: 'sessionName and role are required' });
1019
+ return;
1020
+ }
1021
+ const teams = await this.storageService.getTeams();
1022
+ let memberFound = false;
1023
+ for (const team of teams) {
1024
+ for (const member of team.members) {
1025
+ if (member.sessionName === sessionName) {
1026
+ const mutableMember = member;
1027
+ mutableMember.readyAt = readyAt || new Date().toISOString();
1028
+ mutableMember.capabilities = capabilities || [];
1029
+ memberFound = true;
1030
+ break;
1031
+ }
1032
+ }
1033
+ if (memberFound) {
1034
+ team.updatedAt = new Date().toISOString();
1035
+ await this.storageService.saveTeam(team);
1036
+ break;
1037
+ }
1038
+ }
1039
+ if (!memberFound) {
1040
+ console.warn(`Session ${sessionName} not found in any team, but reporting ready anyway`);
1041
+ }
1042
+ res.json({ success: true, message: `Agent ${sessionName} reported ready with role ${role}`, data: { sessionName, role, capabilities, readyAt } });
1043
+ }
1044
+ catch (error) {
1045
+ console.error('Error reporting member ready:', error);
1046
+ res.status(500).json({ success: false, error: 'Failed to report member ready' });
1047
+ }
1048
+ }
1049
+ export async function registerMemberStatus(req, res) {
1050
+ try {
1051
+ const { sessionName, role, status, registeredAt, memberId, claudeSessionId } = req.body;
1052
+ // Update agent heartbeat (proof of life)
1053
+ try {
1054
+ await updateAgentHeartbeat(sessionName, memberId, CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE);
1055
+ }
1056
+ catch {
1057
+ // Continue execution - heartbeat failures shouldn't break registration
1058
+ }
1059
+ if (!sessionName || !role) {
1060
+ res.status(400).json({ success: false, error: 'sessionName and role are required' });
1061
+ return;
1062
+ }
1063
+ // Handle orchestrator registration separately
1064
+ if (role === 'orchestrator' && sessionName === CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME) {
1065
+ try {
1066
+ await this.storageService.updateOrchestratorStatus(CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE);
1067
+ // Broadcast orchestrator status change via WebSocket for real-time UI updates
1068
+ const terminalGateway = getTerminalGateway();
1069
+ if (terminalGateway) {
1070
+ terminalGateway.broadcastOrchestratorStatus({
1071
+ sessionName,
1072
+ agentStatus: CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE,
1073
+ workingStatus: CREWLY_CONSTANTS.WORKING_STATUSES.IDLE,
1074
+ });
1075
+ }
1076
+ // Auto-subscribe orchestrator to agent lifecycle events for real-time notifications
1077
+ ensureOrchestratorSubscriptions();
1078
+ res.json({ success: true, message: `Orchestrator ${sessionName} registered as active`, sessionName });
1079
+ return;
1080
+ }
1081
+ catch (error) {
1082
+ console.error('Error updating orchestrator status:', error);
1083
+ res.status(500).json({ success: false, error: 'Failed to update orchestrator status' });
1084
+ return;
1085
+ }
1086
+ }
1087
+ // Find the team member to update
1088
+ const teams = await this.storageService.getTeams();
1089
+ let targetTeamId = null;
1090
+ let targetMemberId = null;
1091
+ for (const team of teams) {
1092
+ for (const member of team.members) {
1093
+ const matchesId = memberId && member.id === memberId;
1094
+ const matchesSession = member.sessionName === sessionName;
1095
+ if (matchesId || matchesSession) {
1096
+ targetTeamId = team.id;
1097
+ targetMemberId = member.id;
1098
+ break;
1099
+ }
1100
+ }
1101
+ if (targetTeamId)
1102
+ break;
1103
+ }
1104
+ // Load fresh team data and apply registration changes to avoid race conditions
1105
+ if (!targetTeamId || !targetMemberId) {
1106
+ console.warn(`registerMemberStatus: agent not found in any team`, { sessionName, role, memberId });
1107
+ res.status(404).json({ success: false, error: `Agent with sessionName '${sessionName}' not found in any team` });
1108
+ return;
1109
+ }
1110
+ const freshTeams = await this.storageService.getTeams();
1111
+ const freshTeam = freshTeams.find(t => t.id === targetTeamId);
1112
+ if (freshTeam) {
1113
+ const freshMember = freshTeam.members.find(m => m.id === targetMemberId);
1114
+ if (freshMember) {
1115
+ freshMember.agentStatus = CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE;
1116
+ freshMember.workingStatus = freshMember.workingStatus || CREWLY_CONSTANTS.WORKING_STATUSES.IDLE;
1117
+ freshMember.readyAt = registeredAt || new Date().toISOString();
1118
+ if (memberId && freshMember.id === memberId && !freshMember.sessionName) {
1119
+ freshMember.sessionName = sessionName;
1120
+ }
1121
+ freshTeam.updatedAt = new Date().toISOString();
1122
+ await this.storageService.saveTeam(freshTeam);
1123
+ }
1124
+ }
1125
+ // Store claudeSessionId for resume-on-restart support
1126
+ if (claudeSessionId) {
1127
+ try {
1128
+ const persistence = getSessionStatePersistence();
1129
+ persistence.updateSessionId(sessionName, claudeSessionId);
1130
+ }
1131
+ catch (persistError) {
1132
+ // Non-fatal: resume just won't work on next restart
1133
+ console.warn('Failed to persist claudeSessionId:', persistError);
1134
+ }
1135
+ }
1136
+ res.json({ success: true, message: `Agent ${sessionName} registered as active with role ${role}`, data: { sessionName, role, status: CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE, registeredAt: registeredAt || new Date().toISOString() } });
1137
+ // Flush any queued messages for this sub-agent (fire-and-forget after response)
1138
+ const subAgentQueue = SubAgentMessageQueue.getInstance();
1139
+ if (subAgentQueue.hasPending(sessionName)) {
1140
+ const runtimeType = (freshTeam?.members.find(m => m.id === targetMemberId)?.runtimeType || RUNTIME_TYPES.CLAUDE_CODE);
1141
+ const queuedMessages = subAgentQueue.dequeueAll(sessionName);
1142
+ console.log(`[registerMemberStatus] Flushing ${queuedMessages.length} queued message(s) to ${sessionName}`);
1143
+ // Deliver sequentially in the background
1144
+ (async () => {
1145
+ for (const queuedMsg of queuedMessages) {
1146
+ try {
1147
+ await this.agentRegistrationService.sendMessageToAgent(sessionName, queuedMsg.data, runtimeType);
1148
+ console.log(`[registerMemberStatus] Delivered queued message to ${sessionName} (queued at ${new Date(queuedMsg.queuedAt).toISOString()})`);
1149
+ }
1150
+ catch (flushError) {
1151
+ console.error(`[registerMemberStatus] Failed to deliver queued message to ${sessionName}:`, flushError);
1152
+ }
1153
+ // Delay between messages to let the agent process each one
1154
+ if (queuedMessages.indexOf(queuedMsg) < queuedMessages.length - 1) {
1155
+ await new Promise(resolve => setTimeout(resolve, SUB_AGENT_QUEUE_CONSTANTS.FLUSH_INTER_MESSAGE_DELAY));
1156
+ }
1157
+ }
1158
+ })().catch(err => {
1159
+ console.error(`[registerMemberStatus] Queue flush failed for ${sessionName}:`, err);
1160
+ });
1161
+ }
1162
+ }
1163
+ catch (error) {
1164
+ console.error('Error in registerMemberStatus:', error);
1165
+ res.status(500).json({ success: false, error: 'Failed to register member status' });
1166
+ }
1167
+ }
1168
+ export async function generateMemberContext(req, res) {
1169
+ try {
1170
+ const { teamId, memberId } = req.params;
1171
+ const options = req.query;
1172
+ const teams = await this.storageService.getTeams();
1173
+ const team = teams.find(t => t.id === teamId);
1174
+ if (!team) {
1175
+ res.status(404).json({ success: false, error: 'Team not found' });
1176
+ return;
1177
+ }
1178
+ const member = team.members.find(m => m.id === memberId);
1179
+ if (!member) {
1180
+ res.status(404).json({ success: false, error: 'Team member not found' });
1181
+ return;
1182
+ }
1183
+ const projects = await this.storageService.getProjects();
1184
+ const project = projects.find(p => Object.values(p.teams || {}).flat().includes(teamId));
1185
+ if (!project) {
1186
+ res.status(404).json({ success: false, error: 'No project found for this team' });
1187
+ return;
1188
+ }
1189
+ const contextLoader = new (await import('../../services/index.js')).ContextLoaderService(project.path);
1190
+ const contextPrompt = await contextLoader.generateContextPrompt(member, {
1191
+ includeFiles: options.includeFiles !== 'false',
1192
+ includeGitHistory: options.includeGitHistory !== 'false',
1193
+ includeTickets: options.includeTickets !== 'false'
1194
+ });
1195
+ res.json({ success: true, data: { teamId, memberId, memberName: member.name, contextPrompt, generatedAt: new Date().toISOString() } });
1196
+ }
1197
+ catch (error) {
1198
+ console.error('Error generating member context:', error);
1199
+ res.status(500).json({ success: false, error: 'Failed to generate member context' });
1200
+ }
1201
+ }
1202
+ export async function injectContextIntoSession(req, res) {
1203
+ try {
1204
+ const { teamId, memberId } = req.params;
1205
+ const teams = await this.storageService.getTeams();
1206
+ const team = teams.find(t => t.id === teamId);
1207
+ if (!team) {
1208
+ res.status(404).json({ success: false, error: 'Team not found' });
1209
+ return;
1210
+ }
1211
+ const member = team.members.find(m => m.id === memberId);
1212
+ if (!member) {
1213
+ res.status(404).json({ success: false, error: 'Team member not found' });
1214
+ return;
1215
+ }
1216
+ const projects = await this.storageService.getProjects();
1217
+ const project = projects.find(p => Object.values(p.teams || {}).flat().includes(teamId));
1218
+ if (!project) {
1219
+ res.status(404).json({ success: false, error: 'No project found for this team' });
1220
+ return;
1221
+ }
1222
+ const { ContextLoaderService } = await import('../../services/index.js');
1223
+ const contextLoader = new ContextLoaderService(project.path);
1224
+ const success = await contextLoader.injectContextIntoSession(member.sessionName, member, this.tmuxService);
1225
+ if (!success) {
1226
+ res.status(500).json({ success: false, error: 'Failed to inject context into session' });
1227
+ return;
1228
+ }
1229
+ res.json({ success: true, data: { teamId, memberId, memberName: member.name, sessionName: member.sessionName, contextInjected: true, injectedAt: new Date().toISOString() } });
1230
+ }
1231
+ catch (error) {
1232
+ console.error('Error injecting context into session:', error);
1233
+ res.status(500).json({ success: false, error: 'Failed to inject context into session' });
1234
+ }
1235
+ }
1236
+ export async function refreshMemberContext(req, res) {
1237
+ try {
1238
+ const { teamId, memberId } = req.params;
1239
+ const teams = await this.storageService.getTeams();
1240
+ const team = teams.find(t => t.id === teamId);
1241
+ if (!team) {
1242
+ res.status(404).json({ success: false, error: 'Team not found' });
1243
+ return;
1244
+ }
1245
+ const member = team.members.find(m => m.id === memberId);
1246
+ if (!member) {
1247
+ res.status(404).json({ success: false, error: 'Team member not found' });
1248
+ return;
1249
+ }
1250
+ const projects = await this.storageService.getProjects();
1251
+ const project = projects.find(p => Object.values(p.teams || {}).flat().includes(teamId));
1252
+ if (!project) {
1253
+ res.status(404).json({ success: false, error: 'No project found for this team' });
1254
+ return;
1255
+ }
1256
+ const { ContextLoaderService } = await import('../../services/index.js');
1257
+ const contextLoader = new ContextLoaderService(project.path);
1258
+ const contextPath = await contextLoader.refreshContext(member);
1259
+ res.json({ success: true, data: { teamId, memberId, memberName: member.name, contextPath, refreshedAt: new Date().toISOString() } });
1260
+ }
1261
+ catch (error) {
1262
+ console.error('Error refreshing member context:', error);
1263
+ res.status(500).json({ success: false, error: 'Failed to refresh member context' });
1264
+ }
1265
+ }
1266
+ export async function getTeamActivityStatus(req, res) {
1267
+ try {
1268
+ const now = new Date().toISOString();
1269
+ const orchestratorRunning = await this.tmuxService.sessionExists(CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME);
1270
+ const teams = await this.storageService.getTeams();
1271
+ const memberStatuses = [];
1272
+ const teamsToUpdate = [];
1273
+ // Get current task assignments
1274
+ const inProgressTasks = await this.taskTrackingService.getAllInProgressTasks();
1275
+ const tasksByMember = new Map();
1276
+ inProgressTasks.forEach((task) => {
1277
+ tasksByMember.set(task.assignedTeamMemberId, {
1278
+ id: task.id,
1279
+ taskName: task.taskName,
1280
+ taskFilePath: task.taskFilePath,
1281
+ assignedAt: task.assignedAt,
1282
+ status: task.status
1283
+ });
1284
+ });
1285
+ // Process all teams with concurrency limit to prevent overwhelming the system
1286
+ const CONCURRENCY_LIMIT = 2; // Reduced to be more conservative
1287
+ const MAX_OUTPUT_SIZE = 1024; // Max 1KB per member terminal output
1288
+ for (let teamIndex = 0; teamIndex < teams.length; teamIndex += CONCURRENCY_LIMIT) {
1289
+ const teamBatch = teams.slice(teamIndex, teamIndex + CONCURRENCY_LIMIT);
1290
+ const teamPromises = teamBatch.map(async (team) => {
1291
+ let teamUpdated = false;
1292
+ for (const member of team.members) {
1293
+ const mutableMember = member;
1294
+ if (member.agentStatus === CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE && member.sessionName) {
1295
+ try {
1296
+ // Add timeout to prevent hanging
1297
+ const sessionExists = await Promise.race([
1298
+ this.tmuxService.sessionExists(member.sessionName),
1299
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Session check timeout')), 3000))
1300
+ ]);
1301
+ if (!sessionExists) {
1302
+ mutableMember.agentStatus = CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE;
1303
+ mutableMember.workingStatus = CREWLY_CONSTANTS.WORKING_STATUSES.IDLE;
1304
+ mutableMember.lastActivityCheck = now;
1305
+ // Clear terminal output to prevent memory leak
1306
+ delete mutableMember.lastTerminalOutput;
1307
+ teamUpdated = true;
1308
+ const currentTask = tasksByMember.get(member.id) || null;
1309
+ memberStatuses.push({
1310
+ teamId: team.id,
1311
+ teamName: team.name,
1312
+ memberId: member.id,
1313
+ memberName: member.name,
1314
+ role: member.role,
1315
+ sessionName: member.sessionName,
1316
+ agentStatus: CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE,
1317
+ workingStatus: CREWLY_CONSTANTS.WORKING_STATUSES.IDLE,
1318
+ lastActivityCheck: now,
1319
+ activityDetected: false,
1320
+ currentTask
1321
+ });
1322
+ continue;
1323
+ }
1324
+ // Capture terminal output with strict timeout and size limit
1325
+ const currentOutput = await Promise.race([
1326
+ this.tmuxService.capturePane(member.sessionName, 15), // Reduced from 50 to 15 lines
1327
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Capture timeout')), 2000) // Shorter timeout
1328
+ )
1329
+ ]).catch(() => ''); // Return empty string on error/timeout
1330
+ // Strict size limiting to prevent memory issues
1331
+ const trimmedOutput = currentOutput.length > MAX_OUTPUT_SIZE
1332
+ ? '...' + currentOutput.substring(currentOutput.length - MAX_OUTPUT_SIZE + 3)
1333
+ : currentOutput;
1334
+ const previousOutput = mutableMember.lastTerminalOutput || '';
1335
+ const activityDetected = trimmedOutput !== previousOutput && trimmedOutput.trim() !== '';
1336
+ const newWorkingStatus = activityDetected ? 'in_progress' : CREWLY_CONSTANTS.WORKING_STATUSES.IDLE;
1337
+ if (member.workingStatus !== newWorkingStatus) {
1338
+ mutableMember.workingStatus = newWorkingStatus;
1339
+ teamUpdated = true;
1340
+ }
1341
+ mutableMember.lastActivityCheck = now;
1342
+ // Store only limited output to prevent memory leak
1343
+ mutableMember.lastTerminalOutput = trimmedOutput;
1344
+ const currentTask = tasksByMember.get(member.id) || null;
1345
+ memberStatuses.push({
1346
+ teamId: team.id,
1347
+ teamName: team.name,
1348
+ memberId: member.id,
1349
+ memberName: member.name,
1350
+ role: member.role,
1351
+ sessionName: member.sessionName,
1352
+ agentStatus: member.agentStatus,
1353
+ workingStatus: newWorkingStatus,
1354
+ lastActivityCheck: now,
1355
+ activityDetected,
1356
+ currentTask
1357
+ });
1358
+ }
1359
+ catch (error) {
1360
+ console.error(`Error checking activity for member ${member.id}:`, error);
1361
+ // Clear terminal output on error to prevent memory leak
1362
+ delete mutableMember.lastTerminalOutput;
1363
+ const currentTask = tasksByMember.get(member.id) || null;
1364
+ memberStatuses.push({
1365
+ teamId: team.id,
1366
+ teamName: team.name,
1367
+ memberId: member.id,
1368
+ memberName: member.name,
1369
+ role: member.role,
1370
+ sessionName: member.sessionName,
1371
+ agentStatus: member.agentStatus,
1372
+ workingStatus: CREWLY_CONSTANTS.WORKING_STATUSES.IDLE,
1373
+ lastActivityCheck: now,
1374
+ activityDetected: false,
1375
+ error: error instanceof Error ? error.message : String(error),
1376
+ currentTask
1377
+ });
1378
+ }
1379
+ }
1380
+ else {
1381
+ const currentTask = tasksByMember.get(member.id) || null;
1382
+ memberStatuses.push({
1383
+ teamId: team.id,
1384
+ teamName: team.name,
1385
+ memberId: member.id,
1386
+ memberName: member.name,
1387
+ role: member.role,
1388
+ sessionName: member.sessionName || '',
1389
+ agentStatus: member.agentStatus || CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE,
1390
+ workingStatus: member.workingStatus || CREWLY_CONSTANTS.WORKING_STATUSES.IDLE,
1391
+ lastActivityCheck: mutableMember.lastActivityCheck || now,
1392
+ activityDetected: false,
1393
+ currentTask
1394
+ });
1395
+ }
1396
+ }
1397
+ if (teamUpdated) {
1398
+ teamsToUpdate.push(team);
1399
+ }
1400
+ });
1401
+ await Promise.all(teamPromises);
1402
+ }
1403
+ // Save only teams that were actually updated (more efficient than saving all teams)
1404
+ if (teamsToUpdate.length > 0) {
1405
+ const savePromises = teamsToUpdate.map(team => this.storageService.saveTeam(team));
1406
+ await Promise.all(savePromises);
1407
+ }
1408
+ // Clean up memory before sending response
1409
+ if (global.gc) {
1410
+ global.gc();
1411
+ }
1412
+ res.json({
1413
+ success: true,
1414
+ data: {
1415
+ orchestrator: { running: orchestratorRunning, sessionName: orchestratorRunning ? CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME : null },
1416
+ teams,
1417
+ members: memberStatuses,
1418
+ checkedAt: now,
1419
+ totalMembers: memberStatuses.length,
1420
+ totalActiveMembers: memberStatuses.filter(m => m.agentStatus === CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE).length
1421
+ }
1422
+ });
1423
+ }
1424
+ catch (error) {
1425
+ console.error('Error checking team activity status:', error);
1426
+ res.status(500).json({ success: false, error: 'Failed to check team activity status' });
1427
+ }
1428
+ }
1429
+ export async function updateTeamMemberRuntime(req, res) {
1430
+ try {
1431
+ const { teamId, memberId } = req.params;
1432
+ const { runtimeType } = req.body;
1433
+ if (!runtimeType || typeof runtimeType !== 'string') {
1434
+ res.status(400).json({
1435
+ success: false,
1436
+ error: 'runtimeType is required and must be a string'
1437
+ });
1438
+ return;
1439
+ }
1440
+ // Validate runtime type
1441
+ const validRuntimeTypes = ['claude-code', 'gemini-cli', 'codex-cli'];
1442
+ if (!validRuntimeTypes.includes(runtimeType)) {
1443
+ res.status(400).json({
1444
+ success: false,
1445
+ error: `Invalid runtime type. Must be one of: ${validRuntimeTypes.join(', ')}`
1446
+ });
1447
+ return;
1448
+ }
1449
+ // Special handling for orchestrator team
1450
+ if (teamId === 'orchestrator') {
1451
+ // Use the orchestrator-specific runtime update function
1452
+ await this.storageService.updateOrchestratorRuntimeType(runtimeType);
1453
+ // Get the updated orchestrator status to return
1454
+ const orchestratorStatus = await this.storageService.getOrchestratorStatus();
1455
+ const updatedMember = {
1456
+ id: 'orchestrator-member',
1457
+ name: 'Agentmux Orchestrator',
1458
+ sessionName: CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME,
1459
+ role: 'orchestrator',
1460
+ systemPrompt: 'You are the Crewly Orchestrator responsible for coordinating teams and managing project workflows.',
1461
+ agentStatus: orchestratorStatus?.agentStatus || CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE,
1462
+ workingStatus: orchestratorStatus?.workingStatus || CREWLY_CONSTANTS.WORKING_STATUSES.IDLE,
1463
+ runtimeType: runtimeType,
1464
+ createdAt: orchestratorStatus?.createdAt || new Date().toISOString(),
1465
+ updatedAt: new Date().toISOString()
1466
+ };
1467
+ res.json({
1468
+ success: true,
1469
+ data: updatedMember,
1470
+ message: `Orchestrator runtime updated to ${runtimeType}`
1471
+ });
1472
+ return;
1473
+ }
1474
+ const teams = await this.storageService.getTeams();
1475
+ const team = teams.find(t => t.id === teamId);
1476
+ if (!team) {
1477
+ res.status(404).json({
1478
+ success: false,
1479
+ error: 'Team not found'
1480
+ });
1481
+ return;
1482
+ }
1483
+ const memberIndex = team.members.findIndex(m => m.id === memberId);
1484
+ if (memberIndex === -1) {
1485
+ res.status(404).json({
1486
+ success: false,
1487
+ error: 'Team member not found'
1488
+ });
1489
+ return;
1490
+ }
1491
+ // Update the member's runtime type
1492
+ const updatedMember = {
1493
+ ...team.members[memberIndex],
1494
+ runtimeType: runtimeType,
1495
+ updatedAt: new Date().toISOString()
1496
+ };
1497
+ team.members[memberIndex] = updatedMember;
1498
+ team.updatedAt = new Date().toISOString();
1499
+ await this.storageService.saveTeam(team);
1500
+ res.json({
1501
+ success: true,
1502
+ data: updatedMember,
1503
+ message: `Team member runtime updated to ${runtimeType}`
1504
+ });
1505
+ }
1506
+ catch (error) {
1507
+ console.error('Error updating team member runtime:', error);
1508
+ res.status(500).json({
1509
+ success: false,
1510
+ error: 'Failed to update team member runtime'
1511
+ });
1512
+ }
1513
+ }
1514
+ /**
1515
+ * Updates team properties like assigned project
1516
+ */
1517
+ export async function updateTeam(req, res) {
1518
+ try {
1519
+ const { id } = req.params;
1520
+ const updates = req.body;
1521
+ if (!id) {
1522
+ res.status(400).json({
1523
+ success: false,
1524
+ error: 'Team ID is required'
1525
+ });
1526
+ return;
1527
+ }
1528
+ // Handle orchestrator team specially
1529
+ if (id === 'orchestrator') {
1530
+ // Orchestrator team is virtual and stored separately
1531
+ const orchestratorStatus = await this.storageService.getOrchestratorStatus();
1532
+ if (!orchestratorStatus) {
1533
+ res.status(404).json({
1534
+ success: false,
1535
+ error: 'Team not found'
1536
+ });
1537
+ return;
1538
+ }
1539
+ // For orchestrator, we currently cannot update the projectIds
1540
+ // because there's no method to save the full orchestrator status
1541
+ // Only status updates are supported through updateOrchestratorStatus
1542
+ // We'll simulate the update for the response but not persist it
1543
+ // The orchestrator team virtual response will include the projects
1544
+ // but it won't be persisted until we add the proper storage method
1545
+ // Return the virtual orchestrator team structure
1546
+ const orchestratorTeam = buildOrchestratorTeam(orchestratorStatus?.agentStatus || CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE, orchestratorStatus, { projectIds: updates.projectIds });
1547
+ res.json({
1548
+ success: true,
1549
+ data: orchestratorTeam,
1550
+ message: 'Team updated successfully'
1551
+ });
1552
+ return;
1553
+ }
1554
+ // Handle regular teams
1555
+ const teams = await this.storageService.getTeams();
1556
+ const teamIndex = teams.findIndex(t => t.id === id);
1557
+ if (teamIndex === -1) {
1558
+ res.status(404).json({
1559
+ success: false,
1560
+ error: 'Team not found'
1561
+ });
1562
+ return;
1563
+ }
1564
+ const team = teams[teamIndex];
1565
+ // Update allowed fields
1566
+ if (updates.projectIds !== undefined) {
1567
+ team.projectIds = updates.projectIds;
1568
+ }
1569
+ if (updates.name !== undefined) {
1570
+ team.name = updates.name;
1571
+ }
1572
+ if (updates.description !== undefined) {
1573
+ team.description = updates.description;
1574
+ }
1575
+ // Update members if provided (from TeamModal edit)
1576
+ if (updates.members !== undefined && Array.isArray(updates.members)) {
1577
+ team.members = updates.members.map((memberUpdate) => {
1578
+ // Find existing member by name (since the modal doesn't send IDs)
1579
+ const existingMember = team.members.find(m => m.name === memberUpdate.name);
1580
+ if (existingMember) {
1581
+ return {
1582
+ ...existingMember,
1583
+ name: memberUpdate.name,
1584
+ role: memberUpdate.role,
1585
+ systemPrompt: memberUpdate.systemPrompt,
1586
+ runtimeType: memberUpdate.runtimeType || existingMember.runtimeType,
1587
+ avatar: memberUpdate.avatar || existingMember.avatar,
1588
+ skillOverrides: memberUpdate.skillOverrides || [],
1589
+ excludedRoleSkills: memberUpdate.excludedRoleSkills || [],
1590
+ updatedAt: new Date().toISOString()
1591
+ };
1592
+ }
1593
+ else {
1594
+ // New member
1595
+ return {
1596
+ id: uuidv4(),
1597
+ name: memberUpdate.name,
1598
+ role: memberUpdate.role,
1599
+ systemPrompt: memberUpdate.systemPrompt,
1600
+ agentStatus: CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE,
1601
+ workingStatus: CREWLY_CONSTANTS.WORKING_STATUSES.IDLE,
1602
+ runtimeType: memberUpdate.runtimeType || RUNTIME_TYPES.CLAUDE_CODE,
1603
+ avatar: memberUpdate.avatar,
1604
+ skillOverrides: memberUpdate.skillOverrides || [],
1605
+ excludedRoleSkills: memberUpdate.excludedRoleSkills || [],
1606
+ createdAt: new Date().toISOString(),
1607
+ updatedAt: new Date().toISOString()
1608
+ };
1609
+ }
1610
+ });
1611
+ }
1612
+ // Update timestamp
1613
+ team.updatedAt = new Date().toISOString();
1614
+ await this.storageService.saveTeam(team);
1615
+ res.json({
1616
+ success: true,
1617
+ data: team,
1618
+ message: 'Team updated successfully'
1619
+ });
1620
+ }
1621
+ catch (error) {
1622
+ console.error('Error updating team:', error);
1623
+ res.status(500).json({
1624
+ success: false,
1625
+ error: 'Failed to update team'
1626
+ });
1627
+ }
1628
+ }
1629
+ //# sourceMappingURL=team.controller.js.map