crewly 1.3.30 → 1.4.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 (673) hide show
  1. package/config/constants.ts +18 -3
  2. package/config/hooks/install-hooks.sh +88 -0
  3. package/config/hooks/pre-commit +104 -0
  4. package/config/orchestrator_tasks/prompts/orchestrator-prompt.md +17 -24
  5. package/config/roles/auditor/role.json +13 -0
  6. package/config/roles/orchestrator/prompt.md +25 -0
  7. package/config/roles/product-manager/prompt.md +18 -1
  8. package/config/roles/researcher/prompt.md +110 -0
  9. package/config/roles/team-leader/prompt.md +31 -8
  10. package/config/roles/team-leader/tl-addon.md +40 -9
  11. package/config/roles/ux-designer/prompt.md +111 -0
  12. package/config/skills/_common/lib.sh +33 -0
  13. package/config/skills/agent/browse-stealth/{instructions.md → SKILL.md} +40 -0
  14. package/config/skills/agent/chrome-attach/SKILL.md +84 -0
  15. package/config/skills/agent/chrome-attach/execute.sh +279 -0
  16. package/config/skills/agent/competitor-content-tracker/{instructions.md → SKILL.md} +34 -0
  17. package/config/skills/agent/computer-use/{instructions.md → SKILL.md} +43 -0
  18. package/config/skills/agent/content-calendar/{instructions.md → SKILL.md} +32 -0
  19. package/config/skills/agent/content-repurposer/{instructions.md → SKILL.md} +38 -0
  20. package/config/skills/agent/content-writer/{instructions.md → SKILL.md} +38 -0
  21. package/config/skills/agent/core/accept-task/{instructions.md → SKILL.md} +37 -0
  22. package/config/skills/agent/core/block-task/{instructions.md → SKILL.md} +37 -0
  23. package/config/skills/agent/core/check-quality-gates/{instructions.md → SKILL.md} +40 -0
  24. package/config/skills/agent/core/complete-task/{instructions.md → SKILL.md} +37 -0
  25. package/config/skills/agent/core/complete-task/execute.sh +15 -0
  26. package/config/skills/agent/core/generate-pdf/{instructions.md → SKILL.md} +42 -0
  27. package/config/skills/agent/core/get-my-context/{instructions.md → SKILL.md} +38 -0
  28. package/config/skills/agent/core/get-sops/{instructions.md → SKILL.md} +38 -0
  29. package/config/skills/agent/core/get-team-norms/execute.sh +106 -0
  30. package/config/skills/agent/core/get-team-status/SKILL.md +55 -0
  31. package/config/skills/agent/core/handoff-task/execute.sh +150 -0
  32. package/config/skills/agent/core/heartbeat/{instructions.md → SKILL.md} +27 -0
  33. package/config/skills/agent/core/marketplace-search/{instructions.md → SKILL.md} +41 -0
  34. package/config/skills/agent/core/query-knowledge/{instructions.md → SKILL.md} +40 -0
  35. package/config/skills/agent/core/read-task/SKILL.md +56 -0
  36. package/config/skills/agent/core/recall/{instructions.md → SKILL.md} +38 -0
  37. package/config/skills/agent/core/record-learning/{instructions.md → SKILL.md} +38 -0
  38. package/config/skills/agent/core/register-self/SKILL.md +54 -0
  39. package/config/skills/agent/core/remember/{instructions.md → SKILL.md} +37 -0
  40. package/config/skills/agent/core/remember/execute.sh +6 -0
  41. package/config/skills/agent/core/reply-chat/{instructions.md → SKILL.md} +37 -0
  42. package/config/skills/agent/core/report-progress/{instructions.md → SKILL.md} +38 -0
  43. package/config/skills/agent/core/report-status/{instructions.md → SKILL.md} +39 -0
  44. package/config/skills/agent/core/send-chat-response/{instructions.md → SKILL.md} +37 -0
  45. package/config/skills/agent/core/send-message/SKILL.md +58 -0
  46. package/config/skills/agent/core/update-team-norm/execute.sh +115 -0
  47. package/config/skills/agent/desktop-app-control/{instructions.md → SKILL.md} +42 -0
  48. package/config/skills/agent/trend-monitor/{instructions.md → SKILL.md} +34 -0
  49. package/config/skills/agent/vnc-browser/{instructions.md → SKILL.md} +38 -0
  50. package/config/skills/auditor/score-task/SKILL.md +28 -0
  51. package/config/skills/auditor/score-task/execute.sh +21 -0
  52. package/config/skills/examples/enterprise-skill-example.json +22 -0
  53. package/config/skills/examples/premium-skill-example.json +22 -0
  54. package/config/skills/orchestrator/assign-task/SKILL.md +41 -0
  55. package/config/skills/orchestrator/assign-team-to-project/{instructions.md → SKILL.md} +25 -0
  56. package/config/skills/orchestrator/broadcast/{instructions.md → SKILL.md} +24 -0
  57. package/config/skills/orchestrator/broadcast-to-org/{instructions.md → SKILL.md} +25 -0
  58. package/config/skills/orchestrator/cancel-all-schedules/{instructions.md → SKILL.md} +5 -0
  59. package/config/skills/orchestrator/cancel-schedule/SKILL.md +43 -0
  60. package/config/skills/orchestrator/complete-task/SKILL.md +41 -0
  61. package/config/skills/orchestrator/create-project/{instructions.md → SKILL.md} +24 -0
  62. package/config/skills/orchestrator/create-team/{instructions.md → SKILL.md} +24 -0
  63. package/config/skills/orchestrator/delegate-task/{instructions.md → SKILL.md} +27 -0
  64. package/config/skills/orchestrator/delegate-task/execute.sh +31 -2
  65. package/config/skills/orchestrator/get-agent-logs/{instructions.md → SKILL.md} +25 -0
  66. package/config/skills/orchestrator/get-agent-status/{instructions.md → SKILL.md} +24 -0
  67. package/config/skills/orchestrator/get-project-overview/SKILL.md +41 -0
  68. package/config/skills/orchestrator/get-tasks/SKILL.md +41 -0
  69. package/config/skills/orchestrator/get-team-status/SKILL.md +43 -0
  70. package/config/skills/orchestrator/handle-agent-failure/{instructions.md → SKILL.md} +27 -0
  71. package/config/skills/orchestrator/heartbeat/{instructions.md → SKILL.md} +24 -0
  72. package/config/skills/orchestrator/list-schedules/{instructions.md → SKILL.md} +5 -0
  73. package/config/skills/orchestrator/list-subscriptions/SKILL.md +41 -0
  74. package/config/skills/orchestrator/query-knowledge/{instructions.md → SKILL.md} +28 -0
  75. package/config/skills/orchestrator/read-session-logs/{instructions.md → SKILL.md} +26 -0
  76. package/config/skills/orchestrator/read-system-logs/{instructions.md → SKILL.md} +25 -0
  77. package/config/skills/orchestrator/recall/{instructions.md → SKILL.md} +24 -0
  78. package/config/skills/orchestrator/record-failure/{instructions.md → SKILL.md} +27 -0
  79. package/config/skills/orchestrator/record-learning/{instructions.md → SKILL.md} +24 -0
  80. package/config/skills/orchestrator/record-success/{instructions.md → SKILL.md} +26 -0
  81. package/config/skills/orchestrator/register-self/{instructions.md → SKILL.md} +24 -0
  82. package/config/skills/orchestrator/remember/{instructions.md → SKILL.md} +24 -0
  83. package/config/skills/orchestrator/reply-chat/{instructions.md → SKILL.md} +25 -0
  84. package/config/skills/orchestrator/reply-chat/execute.sh +0 -13
  85. package/config/skills/orchestrator/reply-gchat/{instructions.md → SKILL.md} +25 -0
  86. package/config/skills/orchestrator/reply-gchat/execute.sh +0 -18
  87. package/config/skills/orchestrator/reply-slack/{instructions.md → SKILL.md} +24 -0
  88. package/config/skills/orchestrator/reply-slack/execute.sh +18 -31
  89. package/config/skills/orchestrator/report-bug/{instructions.md → SKILL.md} +26 -0
  90. package/config/skills/orchestrator/restart-crewly/{instructions.md → SKILL.md} +26 -0
  91. package/config/skills/orchestrator/resume-session/{instructions.md → SKILL.md} +24 -0
  92. package/config/skills/orchestrator/schedule-check/{instructions.md → SKILL.md} +24 -0
  93. package/config/skills/orchestrator/send-key/{instructions.md → SKILL.md} +26 -0
  94. package/config/skills/orchestrator/send-message/{instructions.md → SKILL.md} +24 -0
  95. package/config/skills/orchestrator/send-pdf-to-slack/{instructions.md → SKILL.md} +27 -0
  96. package/config/skills/orchestrator/set-goal/{instructions.md → SKILL.md} +26 -0
  97. package/config/skills/orchestrator/start-agent/{instructions.md → SKILL.md} +24 -0
  98. package/config/skills/orchestrator/start-team/{instructions.md → SKILL.md} +24 -0
  99. package/config/skills/orchestrator/stop-agent/{instructions.md → SKILL.md} +24 -0
  100. package/config/skills/orchestrator/stop-team/SKILL.md +43 -0
  101. package/config/skills/orchestrator/subscribe-event/{instructions.md → SKILL.md} +24 -0
  102. package/config/skills/orchestrator/terminate-agent/{instructions.md → SKILL.md} +24 -0
  103. package/config/skills/orchestrator/unsubscribe-event/SKILL.md +42 -0
  104. package/config/skills/orchestrator/update-focus/{instructions.md → SKILL.md} +26 -0
  105. package/config/skills/orchestrator/update-team/{instructions.md → SKILL.md} +24 -0
  106. package/config/skills/team-leader/aggregate-results/{instructions.md → SKILL.md} +26 -0
  107. package/config/skills/team-leader/decompose-goal/{instructions.md → SKILL.md} +26 -0
  108. package/config/skills/team-leader/delegate-task/{instructions.md → SKILL.md} +26 -0
  109. package/config/skills/team-leader/delegate-task/execute.sh +14 -6
  110. package/config/skills/team-leader/delegate-task/execute.test.sh +401 -0
  111. package/config/skills/team-leader/handle-failure/{instructions.md → SKILL.md} +27 -0
  112. package/config/skills/team-leader/schedule-check/{instructions.md → SKILL.md} +26 -0
  113. package/config/skills/team-leader/start-agent/{instructions.md → SKILL.md} +26 -0
  114. package/config/skills/team-leader/stop-agent/{instructions.md → SKILL.md} +26 -0
  115. package/config/skills/team-leader/verify-output/{instructions.md → SKILL.md} +27 -0
  116. package/config/templates/agent-agents-md.md +35 -0
  117. package/config/templates/agent-gemini-md.md +35 -0
  118. package/config/templates/code-review-team/team-config.json +7 -0
  119. package/config/templates/content-generation-team/norms/brand-guidelines.md +64 -0
  120. package/config/templates/content-generation-team/norms/content-review.md +66 -0
  121. package/config/templates/content-generation-team/norms/publish-checklist.md +58 -0
  122. package/config/templates/content-generation-team/team-config.json +8 -0
  123. package/config/templates/dev-fullstack/norms/code-commit-sop.md +40 -0
  124. package/config/templates/dev-fullstack/norms/quality-gates.md +35 -0
  125. package/config/templates/dev-fullstack/template.json +17 -1
  126. package/config/templates/education-smb/template.json +10 -1
  127. package/config/templates/insurance-smb/template.json +10 -1
  128. package/config/templates/research-analysis/norms/research-methodology.md +36 -0
  129. package/config/templates/research-analysis/norms/source-citation.md +33 -0
  130. package/config/templates/research-analysis/template.json +17 -1
  131. package/config/templates/security-audit-team.json +67 -0
  132. package/config/templates/social-media-ops/norms/engagement-rules.md +35 -0
  133. package/config/templates/social-media-ops/norms/posting-schedule.md +43 -0
  134. package/config/templates/social-media-ops/template.json +17 -1
  135. package/config/templates/video-production/template.json +10 -1
  136. package/dist/backend/backend/src/constants.d.ts +80 -11
  137. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  138. package/dist/backend/backend/src/constants.js +85 -11
  139. package/dist/backend/backend/src/constants.js.map +1 -1
  140. package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts +99 -0
  141. package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts.map +1 -0
  142. package/dist/backend/backend/src/controllers/approvals/approvals.controller.js +183 -0
  143. package/dist/backend/backend/src/controllers/approvals/approvals.controller.js.map +1 -0
  144. package/dist/backend/backend/src/controllers/approvals/approvals.routes.d.ts +15 -0
  145. package/dist/backend/backend/src/controllers/approvals/approvals.routes.d.ts.map +1 -0
  146. package/dist/backend/backend/src/controllers/approvals/approvals.routes.js +27 -0
  147. package/dist/backend/backend/src/controllers/approvals/approvals.routes.js.map +1 -0
  148. package/dist/backend/backend/src/controllers/cloud/cloud-google-auth.controller.d.ts +70 -0
  149. package/dist/backend/backend/src/controllers/cloud/cloud-google-auth.controller.d.ts.map +1 -0
  150. package/dist/backend/backend/src/controllers/cloud/cloud-google-auth.controller.js +368 -0
  151. package/dist/backend/backend/src/controllers/cloud/cloud-google-auth.controller.js.map +1 -0
  152. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts +24 -0
  153. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  154. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +195 -3
  155. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  156. package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts +9 -4
  157. package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -1
  158. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +19 -5
  159. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -1
  160. package/dist/backend/backend/src/controllers/cloud/index.d.ts +1 -0
  161. package/dist/backend/backend/src/controllers/cloud/index.d.ts.map +1 -1
  162. package/dist/backend/backend/src/controllers/cloud/index.js +1 -0
  163. package/dist/backend/backend/src/controllers/cloud/index.js.map +1 -1
  164. package/dist/backend/backend/src/controllers/index.d.ts.map +1 -1
  165. package/dist/backend/backend/src/controllers/index.js +2 -0
  166. package/dist/backend/backend/src/controllers/index.js.map +1 -1
  167. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js +1 -1
  168. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js.map +1 -1
  169. package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.d.ts +3 -3
  170. package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js +9 -9
  171. package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js.map +1 -1
  172. package/dist/backend/backend/src/controllers/memory/memory.controller.js +6 -6
  173. package/dist/backend/backend/src/controllers/memory/memory.controller.js.map +1 -1
  174. package/dist/backend/backend/src/controllers/messaging/messenger.routes.d.ts +0 -7
  175. package/dist/backend/backend/src/controllers/messaging/messenger.routes.d.ts.map +1 -1
  176. package/dist/backend/backend/src/controllers/messaging/messenger.routes.js +2 -135
  177. package/dist/backend/backend/src/controllers/messaging/messenger.routes.js.map +1 -1
  178. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +14 -0
  179. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  180. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +106 -3
  181. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  182. package/dist/backend/backend/src/controllers/oauth/oauth.routes.d.ts.map +1 -1
  183. package/dist/backend/backend/src/controllers/oauth/oauth.routes.js +8 -1
  184. package/dist/backend/backend/src/controllers/oauth/oauth.routes.js.map +1 -1
  185. package/dist/backend/backend/src/controllers/payment/payment.controller.js +2 -2
  186. package/dist/backend/backend/src/controllers/payment/payment.controller.js.map +1 -1
  187. package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts +3 -3
  188. package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts.map +1 -1
  189. package/dist/backend/backend/src/controllers/payment/payment.routes.js +4 -14
  190. package/dist/backend/backend/src/controllers/payment/payment.routes.js.map +1 -1
  191. package/dist/backend/backend/src/controllers/payment/payment.types.d.ts +15 -94
  192. package/dist/backend/backend/src/controllers/payment/payment.types.d.ts.map +1 -1
  193. package/dist/backend/backend/src/controllers/payment/payment.types.js +11 -35
  194. package/dist/backend/backend/src/controllers/payment/payment.types.js.map +1 -1
  195. package/dist/backend/backend/src/controllers/pr-review/pr-review.controller.d.ts +49 -0
  196. package/dist/backend/backend/src/controllers/pr-review/pr-review.controller.d.ts.map +1 -0
  197. package/dist/backend/backend/src/controllers/pr-review/pr-review.controller.js +138 -0
  198. package/dist/backend/backend/src/controllers/pr-review/pr-review.controller.js.map +1 -0
  199. package/dist/backend/backend/src/controllers/pr-review/pr-review.routes.d.ts +20 -0
  200. package/dist/backend/backend/src/controllers/pr-review/pr-review.routes.d.ts.map +1 -0
  201. package/dist/backend/backend/src/controllers/pr-review/pr-review.routes.js +30 -0
  202. package/dist/backend/backend/src/controllers/pr-review/pr-review.routes.js.map +1 -0
  203. package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.d.ts +12 -0
  204. package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.d.ts.map +1 -1
  205. package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.js +107 -0
  206. package/dist/backend/backend/src/controllers/quality-gate/quality-gate.controller.js.map +1 -1
  207. package/dist/backend/backend/src/controllers/request-types.d.ts +20 -1
  208. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
  209. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  210. package/dist/backend/backend/src/controllers/slack/slack.controller.js +11 -5
  211. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  212. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +46 -0
  213. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -1
  214. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +598 -326
  215. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -1
  216. package/dist/backend/backend/src/controllers/team/team.controller.d.ts +12 -0
  217. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  218. package/dist/backend/backend/src/controllers/team/team.controller.js +178 -49
  219. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  220. package/dist/backend/backend/src/controllers/team/team.routes.d.ts.map +1 -1
  221. package/dist/backend/backend/src/controllers/team/team.routes.js +2 -1
  222. package/dist/backend/backend/src/controllers/team/team.routes.js.map +1 -1
  223. package/dist/backend/backend/src/controllers/template/template.controller.d.ts +11 -0
  224. package/dist/backend/backend/src/controllers/template/template.controller.d.ts.map +1 -1
  225. package/dist/backend/backend/src/controllers/template/template.controller.js +59 -0
  226. package/dist/backend/backend/src/controllers/template/template.controller.js.map +1 -1
  227. package/dist/backend/backend/src/controllers/template/template.routes.d.ts.map +1 -1
  228. package/dist/backend/backend/src/controllers/template/template.routes.js +2 -1
  229. package/dist/backend/backend/src/controllers/template/template.routes.js.map +1 -1
  230. package/dist/backend/backend/src/controllers/workspace/workspace.controller.d.ts +39 -0
  231. package/dist/backend/backend/src/controllers/workspace/workspace.controller.d.ts.map +1 -0
  232. package/dist/backend/backend/src/controllers/workspace/workspace.controller.js +120 -0
  233. package/dist/backend/backend/src/controllers/workspace/workspace.controller.js.map +1 -0
  234. package/dist/backend/backend/src/controllers/workspace/workspace.routes.d.ts +18 -0
  235. package/dist/backend/backend/src/controllers/workspace/workspace.routes.d.ts.map +1 -0
  236. package/dist/backend/backend/src/controllers/workspace/workspace.routes.js +27 -0
  237. package/dist/backend/backend/src/controllers/workspace/workspace.routes.js.map +1 -0
  238. package/dist/backend/backend/src/index.d.ts.map +1 -1
  239. package/dist/backend/backend/src/index.js +108 -15
  240. package/dist/backend/backend/src/index.js.map +1 -1
  241. package/dist/backend/backend/src/middleware/require-auth.middleware.d.ts +20 -0
  242. package/dist/backend/backend/src/middleware/require-auth.middleware.d.ts.map +1 -0
  243. package/dist/backend/backend/src/middleware/require-auth.middleware.js +21 -0
  244. package/dist/backend/backend/src/middleware/require-auth.middleware.js.map +1 -0
  245. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  246. package/dist/backend/backend/src/routes/api.routes.js +18 -5
  247. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  248. package/dist/backend/backend/src/routes/modules/quality-gate.routes.d.ts +2 -1
  249. package/dist/backend/backend/src/routes/modules/quality-gate.routes.d.ts.map +1 -1
  250. package/dist/backend/backend/src/routes/modules/quality-gate.routes.js +4 -2
  251. package/dist/backend/backend/src/routes/modules/quality-gate.routes.js.map +1 -1
  252. package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts.map +1 -1
  253. package/dist/backend/backend/src/routes/modules/task-management.routes.js +8 -0
  254. package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -1
  255. package/dist/backend/backend/src/routes/modules/terminal.routes.d.ts.map +1 -1
  256. package/dist/backend/backend/src/routes/modules/terminal.routes.js +4 -0
  257. package/dist/backend/backend/src/routes/modules/terminal.routes.js.map +1 -1
  258. package/dist/backend/backend/src/services/agent/adaptive-heartbeat.service.d.ts +149 -0
  259. package/dist/backend/backend/src/services/agent/adaptive-heartbeat.service.d.ts.map +1 -0
  260. package/dist/backend/backend/src/services/agent/adaptive-heartbeat.service.js +200 -0
  261. package/dist/backend/backend/src/services/agent/adaptive-heartbeat.service.js.map +1 -0
  262. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts +13 -0
  263. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts.map +1 -1
  264. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js +65 -6
  265. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js.map +1 -1
  266. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +57 -0
  267. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  268. package/dist/backend/backend/src/services/agent/agent-registration.service.js +259 -67
  269. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  270. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts +66 -20
  271. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
  272. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +261 -60
  273. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
  274. package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts +19 -0
  275. package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
  276. package/dist/backend/backend/src/services/agent/claude-runtime.service.js +80 -0
  277. package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -1
  278. package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts +11 -0
  279. package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -1
  280. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js +49 -1
  281. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js.map +1 -1
  282. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +150 -5
  283. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -1
  284. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +426 -18
  285. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -1
  286. package/dist/backend/backend/src/services/agent/crewly-agent/approval-queue.service.d.ts +161 -0
  287. package/dist/backend/backend/src/services/agent/crewly-agent/approval-queue.service.d.ts.map +1 -0
  288. package/dist/backend/backend/src/services/agent/crewly-agent/approval-queue.service.js +237 -0
  289. package/dist/backend/backend/src/services/agent/crewly-agent/approval-queue.service.js.map +1 -0
  290. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +74 -0
  291. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +1 -0
  292. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +140 -0
  293. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +1 -0
  294. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +1 -1
  295. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +50 -2
  296. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +1 -1
  297. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +16 -1
  298. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -1
  299. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +46 -5
  300. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -1
  301. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +23 -1
  302. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -1
  303. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +37 -8
  304. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -1
  305. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +3 -1
  306. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +1 -1
  307. package/dist/backend/backend/src/services/agent/crewly-agent/index.js +3 -1
  308. package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +1 -1
  309. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +135 -0
  310. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +1 -0
  311. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +185 -0
  312. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +1 -0
  313. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +10 -2
  314. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -1
  315. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +27 -9
  316. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -1
  317. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +143 -0
  318. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +1 -0
  319. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +264 -0
  320. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +1 -0
  321. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +2 -2
  322. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +64 -2
  323. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -1
  324. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +927 -39
  325. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -1
  326. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +166 -3
  327. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  328. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +55 -1
  329. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  330. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  331. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +17 -2
  332. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  333. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +37 -0
  334. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  335. package/dist/backend/backend/src/services/ai/prompt-builder.service.js +170 -3
  336. package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  337. package/dist/backend/backend/src/services/browser/chrome-discovery.service.d.ts +108 -0
  338. package/dist/backend/backend/src/services/browser/chrome-discovery.service.d.ts.map +1 -0
  339. package/dist/backend/backend/src/services/browser/chrome-discovery.service.js +251 -0
  340. package/dist/backend/backend/src/services/browser/chrome-discovery.service.js.map +1 -0
  341. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +12 -0
  342. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
  343. package/dist/backend/backend/src/services/cloud/cloud-client.service.js +19 -0
  344. package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -1
  345. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts +191 -0
  346. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts.map +1 -0
  347. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js +415 -0
  348. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js.map +1 -0
  349. package/dist/backend/backend/src/services/cloud/device-identity.service.d.ts +89 -0
  350. package/dist/backend/backend/src/services/cloud/device-identity.service.d.ts.map +1 -0
  351. package/dist/backend/backend/src/services/cloud/device-identity.service.js +148 -0
  352. package/dist/backend/backend/src/services/cloud/device-identity.service.js.map +1 -0
  353. package/dist/backend/backend/src/services/core/tracing.service.d.ts +127 -0
  354. package/dist/backend/backend/src/services/core/tracing.service.d.ts.map +1 -0
  355. package/dist/backend/backend/src/services/core/tracing.service.js +238 -0
  356. package/dist/backend/backend/src/services/core/tracing.service.js.map +1 -0
  357. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  358. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +11 -3
  359. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  360. package/dist/backend/backend/src/services/index.d.ts +1 -0
  361. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  362. package/dist/backend/backend/src/services/index.js +1 -0
  363. package/dist/backend/backend/src/services/index.js.map +1 -1
  364. package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts +78 -0
  365. package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts.map +1 -0
  366. package/dist/backend/backend/src/services/knowledge/embedding-provider.js +164 -0
  367. package/dist/backend/backend/src/services/knowledge/embedding-provider.js.map +1 -0
  368. package/dist/backend/backend/src/services/knowledge/index.d.ts +1 -0
  369. package/dist/backend/backend/src/services/knowledge/index.d.ts.map +1 -1
  370. package/dist/backend/backend/src/services/knowledge/index.js +1 -0
  371. package/dist/backend/backend/src/services/knowledge/index.js.map +1 -1
  372. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +91 -11
  373. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
  374. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +244 -15
  375. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
  376. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts +331 -0
  377. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -0
  378. package/dist/backend/backend/src/services/knowledge/vector-store.service.js +814 -0
  379. package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +1 -0
  380. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
  381. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +8 -11
  382. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
  383. package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -1
  384. package/dist/backend/backend/src/services/marketplace/marketplace.service.js +1 -0
  385. package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -1
  386. package/dist/backend/backend/src/services/memory/context-flush.service.d.ts +73 -0
  387. package/dist/backend/backend/src/services/memory/context-flush.service.d.ts.map +1 -0
  388. package/dist/backend/backend/src/services/memory/context-flush.service.js +131 -0
  389. package/dist/backend/backend/src/services/memory/context-flush.service.js.map +1 -0
  390. package/dist/backend/backend/src/services/memory/learning-accumulation.service.d.ts +23 -2
  391. package/dist/backend/backend/src/services/memory/learning-accumulation.service.d.ts.map +1 -1
  392. package/dist/backend/backend/src/services/memory/learning-accumulation.service.js +78 -16
  393. package/dist/backend/backend/src/services/memory/learning-accumulation.service.js.map +1 -1
  394. package/dist/backend/backend/src/services/memory/memory.service.d.ts +38 -0
  395. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
  396. package/dist/backend/backend/src/services/memory/memory.service.js +121 -2
  397. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
  398. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts +29 -207
  399. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts.map +1 -1
  400. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js +97 -683
  401. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js.map +1 -1
  402. package/dist/backend/backend/src/services/messaging/google-chat-initializer.d.ts.map +1 -1
  403. package/dist/backend/backend/src/services/messaging/google-chat-initializer.js +13 -12
  404. package/dist/backend/backend/src/services/messaging/google-chat-initializer.js.map +1 -1
  405. package/dist/backend/backend/src/services/messaging/messenger-adapter.interface.d.ts +2 -0
  406. package/dist/backend/backend/src/services/messaging/messenger-adapter.interface.d.ts.map +1 -1
  407. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +6 -23
  408. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  409. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +48 -184
  410. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  411. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  412. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +51 -5
  413. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  414. package/dist/backend/backend/src/services/orchestrator/index.d.ts +1 -1
  415. package/dist/backend/backend/src/services/orchestrator/index.d.ts.map +1 -1
  416. package/dist/backend/backend/src/services/orchestrator/index.js +1 -1
  417. package/dist/backend/backend/src/services/orchestrator/index.js.map +1 -1
  418. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts +65 -0
  419. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts.map +1 -1
  420. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js +165 -2
  421. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -1
  422. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +8 -0
  423. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
  424. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +23 -0
  425. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
  426. package/dist/backend/backend/src/services/payment/stripe.service.d.ts +95 -43
  427. package/dist/backend/backend/src/services/payment/stripe.service.d.ts.map +1 -1
  428. package/dist/backend/backend/src/services/payment/stripe.service.js +229 -190
  429. package/dist/backend/backend/src/services/payment/stripe.service.js.map +1 -1
  430. package/dist/backend/backend/src/services/pr-review/pr-review.service.d.ts +181 -0
  431. package/dist/backend/backend/src/services/pr-review/pr-review.service.d.ts.map +1 -0
  432. package/dist/backend/backend/src/services/pr-review/pr-review.service.js +336 -0
  433. package/dist/backend/backend/src/services/pr-review/pr-review.service.js.map +1 -0
  434. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +23 -0
  435. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +1 -1
  436. package/dist/backend/backend/src/services/project/task-tracking.service.js +88 -0
  437. package/dist/backend/backend/src/services/project/task-tracking.service.js.map +1 -1
  438. package/dist/backend/backend/src/services/session/index.d.ts +2 -0
  439. package/dist/backend/backend/src/services/session/index.d.ts.map +1 -1
  440. package/dist/backend/backend/src/services/session/index.js +2 -0
  441. package/dist/backend/backend/src/services/session/index.js.map +1 -1
  442. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts +260 -0
  443. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
  444. package/dist/backend/backend/src/services/session/session-handoff.service.js +565 -0
  445. package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -0
  446. package/dist/backend/backend/src/services/skill/index.d.ts +1 -0
  447. package/dist/backend/backend/src/services/skill/index.d.ts.map +1 -1
  448. package/dist/backend/backend/src/services/skill/index.js +1 -0
  449. package/dist/backend/backend/src/services/skill/index.js.map +1 -1
  450. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +25 -6
  451. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -1
  452. package/dist/backend/backend/src/services/skill/skill-catalog.service.js +78 -20
  453. package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
  454. package/dist/backend/backend/src/services/skill/skill-tier.service.d.ts +116 -0
  455. package/dist/backend/backend/src/services/skill/skill-tier.service.d.ts.map +1 -0
  456. package/dist/backend/backend/src/services/skill/skill-tier.service.js +155 -0
  457. package/dist/backend/backend/src/services/skill/skill-tier.service.js.map +1 -0
  458. package/dist/backend/backend/src/services/skill/skill.service.d.ts +35 -7
  459. package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -1
  460. package/dist/backend/backend/src/services/skill/skill.service.js +128 -35
  461. package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -1
  462. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +50 -47
  463. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  464. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +267 -202
  465. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  466. package/dist/backend/backend/src/services/slack/slack.service.d.ts +28 -2
  467. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  468. package/dist/backend/backend/src/services/slack/slack.service.js +69 -3
  469. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  470. package/dist/backend/backend/src/services/template/template.service.d.ts +19 -1
  471. package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
  472. package/dist/backend/backend/src/services/template/template.service.js +110 -3
  473. package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
  474. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts +11 -0
  475. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts.map +1 -1
  476. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js +57 -3
  477. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js.map +1 -1
  478. package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
  479. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +6 -0
  480. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
  481. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +52 -0
  482. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  483. package/dist/backend/backend/src/services/workflow/scheduler.service.js +319 -6
  484. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  485. package/dist/backend/backend/src/types/chat.types.d.ts +2 -2
  486. package/dist/backend/backend/src/types/chat.types.d.ts.map +1 -1
  487. package/dist/backend/backend/src/types/chat.types.js +18 -22
  488. package/dist/backend/backend/src/types/chat.types.js.map +1 -1
  489. package/dist/backend/backend/src/types/index.d.ts +38 -1
  490. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  491. package/dist/backend/backend/src/types/index.js.map +1 -1
  492. package/dist/backend/backend/src/types/marketplace.types.d.ts +1 -1
  493. package/dist/backend/backend/src/types/marketplace.types.d.ts.map +1 -1
  494. package/dist/backend/backend/src/types/scheduler.types.d.ts +4 -0
  495. package/dist/backend/backend/src/types/scheduler.types.d.ts.map +1 -1
  496. package/dist/backend/backend/src/types/scheduler.types.js.map +1 -1
  497. package/dist/backend/backend/src/types/skill.types.d.ts +4 -0
  498. package/dist/backend/backend/src/types/skill.types.d.ts.map +1 -1
  499. package/dist/backend/backend/src/types/skill.types.js.map +1 -1
  500. package/dist/backend/backend/src/types/task-tracking.types.d.ts +6 -0
  501. package/dist/backend/backend/src/types/task-tracking.types.d.ts.map +1 -1
  502. package/dist/backend/backend/src/types/task-tracking.types.js.map +1 -1
  503. package/dist/backend/backend/src/types/team-template.types.d.ts +2 -0
  504. package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
  505. package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
  506. package/dist/backend/backend/src/utils/skill-md-parser.d.ts +38 -0
  507. package/dist/backend/backend/src/utils/skill-md-parser.d.ts.map +1 -0
  508. package/dist/backend/backend/src/utils/skill-md-parser.js +47 -0
  509. package/dist/backend/backend/src/utils/skill-md-parser.js.map +1 -0
  510. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +49 -139
  511. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
  512. package/dist/backend/backend/src/websocket/terminal.gateway.js +143 -502
  513. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
  514. package/dist/backend/config/constants.d.ts +18 -3
  515. package/dist/backend/config/constants.d.ts.map +1 -1
  516. package/dist/backend/config/constants.js +18 -3
  517. package/dist/backend/config/constants.js.map +1 -1
  518. package/dist/cli/backend/src/constants.d.ts +80 -11
  519. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  520. package/dist/cli/backend/src/constants.js +85 -11
  521. package/dist/cli/backend/src/constants.js.map +1 -1
  522. package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts +78 -0
  523. package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts.map +1 -0
  524. package/dist/cli/backend/src/services/knowledge/embedding-provider.js +164 -0
  525. package/dist/cli/backend/src/services/knowledge/embedding-provider.js.map +1 -0
  526. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +91 -11
  527. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
  528. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +244 -15
  529. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
  530. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts +331 -0
  531. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -0
  532. package/dist/cli/backend/src/services/knowledge/vector-store.service.js +814 -0
  533. package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +1 -0
  534. package/dist/cli/backend/src/services/memory/memory.service.d.ts +38 -0
  535. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
  536. package/dist/cli/backend/src/services/memory/memory.service.js +121 -2
  537. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
  538. package/dist/cli/backend/src/types/chat.types.d.ts +2 -2
  539. package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -1
  540. package/dist/cli/backend/src/types/chat.types.js +18 -22
  541. package/dist/cli/backend/src/types/chat.types.js.map +1 -1
  542. package/dist/cli/backend/src/types/index.d.ts +38 -1
  543. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  544. package/dist/cli/backend/src/types/index.js.map +1 -1
  545. package/dist/cli/backend/src/types/scheduler.types.d.ts +4 -0
  546. package/dist/cli/backend/src/types/scheduler.types.d.ts.map +1 -1
  547. package/dist/cli/backend/src/types/scheduler.types.js.map +1 -1
  548. package/dist/cli/backend/src/types/skill.types.d.ts +4 -0
  549. package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -1
  550. package/dist/cli/backend/src/types/skill.types.js.map +1 -1
  551. package/dist/cli/cli/src/commands/onboard.d.ts +19 -2
  552. package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
  553. package/dist/cli/cli/src/commands/onboard.js +58 -15
  554. package/dist/cli/cli/src/commands/onboard.js.map +1 -1
  555. package/dist/cli/cli/src/commands/pair.d.ts +46 -0
  556. package/dist/cli/cli/src/commands/pair.d.ts.map +1 -0
  557. package/dist/cli/cli/src/commands/pair.js +258 -0
  558. package/dist/cli/cli/src/commands/pair.js.map +1 -0
  559. package/dist/cli/cli/src/commands/service.d.ts +86 -0
  560. package/dist/cli/cli/src/commands/service.d.ts.map +1 -0
  561. package/dist/cli/cli/src/commands/service.js +687 -0
  562. package/dist/cli/cli/src/commands/service.js.map +1 -0
  563. package/dist/cli/cli/src/index.js +17 -0
  564. package/dist/cli/cli/src/index.js.map +1 -1
  565. package/dist/cli/config/constants.d.ts +18 -3
  566. package/dist/cli/config/constants.d.ts.map +1 -1
  567. package/dist/cli/config/constants.js +18 -3
  568. package/dist/cli/config/constants.js.map +1 -1
  569. package/frontend/dist/assets/index-1d23cce8.js +4919 -0
  570. package/frontend/dist/assets/index-60a9e4ea.css +33 -0
  571. package/frontend/dist/index.html +2 -2
  572. package/package.json +22 -9
  573. package/config/skills/agent/browse-stealth/skill.json +0 -20
  574. package/config/skills/agent/competitor-content-tracker/skill.json +0 -22
  575. package/config/skills/agent/computer-use/skill.json +0 -29
  576. package/config/skills/agent/content-calendar/skill.json +0 -22
  577. package/config/skills/agent/content-repurposer/skill.json +0 -22
  578. package/config/skills/agent/content-writer/skill.json +0 -22
  579. package/config/skills/agent/core/accept-task/skill.json +0 -20
  580. package/config/skills/agent/core/block-task/skill.json +0 -20
  581. package/config/skills/agent/core/check-quality-gates/skill.json +0 -20
  582. package/config/skills/agent/core/complete-task/skill.json +0 -20
  583. package/config/skills/agent/core/generate-pdf/skill.json +0 -20
  584. package/config/skills/agent/core/get-my-context/skill.json +0 -20
  585. package/config/skills/agent/core/get-sops/skill.json +0 -20
  586. package/config/skills/agent/core/get-team-status/instructions.md +0 -17
  587. package/config/skills/agent/core/get-team-status/skill.json +0 -20
  588. package/config/skills/agent/core/heartbeat/skill.json +0 -20
  589. package/config/skills/agent/core/marketplace-search/skill.json +0 -20
  590. package/config/skills/agent/core/query-knowledge/skill.json +0 -20
  591. package/config/skills/agent/core/read-task/instructions.md +0 -19
  592. package/config/skills/agent/core/read-task/skill.json +0 -20
  593. package/config/skills/agent/core/recall/skill.json +0 -20
  594. package/config/skills/agent/core/record-learning/skill.json +0 -20
  595. package/config/skills/agent/core/register-self/instructions.md +0 -18
  596. package/config/skills/agent/core/register-self/skill.json +0 -20
  597. package/config/skills/agent/core/remember/skill.json +0 -20
  598. package/config/skills/agent/core/reply-chat/skill.json +0 -20
  599. package/config/skills/agent/core/report-progress/skill.json +0 -20
  600. package/config/skills/agent/core/report-status/skill.json +0 -20
  601. package/config/skills/agent/core/send-chat-response/skill.json +0 -20
  602. package/config/skills/agent/core/send-message/instructions.md +0 -20
  603. package/config/skills/agent/core/send-message/skill.json +0 -20
  604. package/config/skills/agent/desktop-app-control/skill.json +0 -33
  605. package/config/skills/agent/trend-monitor/skill.json +0 -22
  606. package/config/skills/agent/vnc-browser/skill.json +0 -20
  607. package/config/skills/orchestrator/assign-task/instructions.md +0 -17
  608. package/config/skills/orchestrator/assign-task/skill.json +0 -20
  609. package/config/skills/orchestrator/assign-team-to-project/skill.json +0 -20
  610. package/config/skills/orchestrator/broadcast/skill.json +0 -20
  611. package/config/skills/orchestrator/broadcast-to-org/skill.json +0 -20
  612. package/config/skills/orchestrator/cancel-all-schedules/skill.json +0 -17
  613. package/config/skills/orchestrator/cancel-schedule/instructions.md +0 -19
  614. package/config/skills/orchestrator/cancel-schedule/skill.json +0 -20
  615. package/config/skills/orchestrator/complete-task/instructions.md +0 -17
  616. package/config/skills/orchestrator/complete-task/skill.json +0 -20
  617. package/config/skills/orchestrator/create-project/skill.json +0 -20
  618. package/config/skills/orchestrator/create-team/skill.json +0 -20
  619. package/config/skills/orchestrator/delegate-task/skill.json +0 -20
  620. package/config/skills/orchestrator/get-agent-logs/skill.json +0 -20
  621. package/config/skills/orchestrator/get-agent-status/skill.json +0 -20
  622. package/config/skills/orchestrator/get-project-overview/instructions.md +0 -17
  623. package/config/skills/orchestrator/get-project-overview/skill.json +0 -20
  624. package/config/skills/orchestrator/get-tasks/instructions.md +0 -17
  625. package/config/skills/orchestrator/get-tasks/skill.json +0 -20
  626. package/config/skills/orchestrator/get-team-status/instructions.md +0 -17
  627. package/config/skills/orchestrator/get-team-status/skill.json +0 -20
  628. package/config/skills/orchestrator/handle-agent-failure/skill.json +0 -20
  629. package/config/skills/orchestrator/heartbeat/skill.json +0 -20
  630. package/config/skills/orchestrator/list-schedules/skill.json +0 -12
  631. package/config/skills/orchestrator/list-subscriptions/instructions.md +0 -17
  632. package/config/skills/orchestrator/list-subscriptions/skill.json +0 -20
  633. package/config/skills/orchestrator/query-knowledge/skill.json +0 -20
  634. package/config/skills/orchestrator/read-session-logs/skill.json +0 -20
  635. package/config/skills/orchestrator/read-system-logs/skill.json +0 -20
  636. package/config/skills/orchestrator/recall/skill.json +0 -20
  637. package/config/skills/orchestrator/record-failure/skill.json +0 -20
  638. package/config/skills/orchestrator/record-learning/skill.json +0 -20
  639. package/config/skills/orchestrator/record-success/skill.json +0 -20
  640. package/config/skills/orchestrator/register-self/skill.json +0 -20
  641. package/config/skills/orchestrator/remember/skill.json +0 -20
  642. package/config/skills/orchestrator/reply-chat/skill.json +0 -20
  643. package/config/skills/orchestrator/reply-gchat/skill.json +0 -20
  644. package/config/skills/orchestrator/reply-slack/skill.json +0 -20
  645. package/config/skills/orchestrator/report-bug/skill.json +0 -20
  646. package/config/skills/orchestrator/restart-crewly/skill.json +0 -20
  647. package/config/skills/orchestrator/resume-session/skill.json +0 -20
  648. package/config/skills/orchestrator/schedule-check/skill.json +0 -20
  649. package/config/skills/orchestrator/send-key/skill.json +0 -20
  650. package/config/skills/orchestrator/send-message/skill.json +0 -20
  651. package/config/skills/orchestrator/send-pdf-to-slack/skill.json +0 -20
  652. package/config/skills/orchestrator/set-goal/skill.json +0 -20
  653. package/config/skills/orchestrator/start-agent/skill.json +0 -20
  654. package/config/skills/orchestrator/start-team/skill.json +0 -20
  655. package/config/skills/orchestrator/stop-agent/skill.json +0 -20
  656. package/config/skills/orchestrator/stop-team/instructions.md +0 -19
  657. package/config/skills/orchestrator/stop-team/skill.json +0 -20
  658. package/config/skills/orchestrator/subscribe-event/skill.json +0 -20
  659. package/config/skills/orchestrator/terminate-agent/skill.json +0 -20
  660. package/config/skills/orchestrator/unsubscribe-event/instructions.md +0 -19
  661. package/config/skills/orchestrator/unsubscribe-event/skill.json +0 -20
  662. package/config/skills/orchestrator/update-focus/skill.json +0 -20
  663. package/config/skills/orchestrator/update-team/skill.json +0 -20
  664. package/config/skills/team-leader/aggregate-results/skill.json +0 -20
  665. package/config/skills/team-leader/decompose-goal/skill.json +0 -20
  666. package/config/skills/team-leader/delegate-task/skill.json +0 -20
  667. package/config/skills/team-leader/handle-failure/skill.json +0 -20
  668. package/config/skills/team-leader/schedule-check/skill.json +0 -20
  669. package/config/skills/team-leader/start-agent/skill.json +0 -20
  670. package/config/skills/team-leader/stop-agent/skill.json +0 -20
  671. package/config/skills/team-leader/verify-output/skill.json +0 -20
  672. package/frontend/dist/assets/index-0e5673b0.css +0 -33
  673. package/frontend/dist/assets/index-adae9eb6.js +0 -5213
@@ -0,0 +1,181 @@
1
+ /**
2
+ * PR Review Service
3
+ *
4
+ * Core service for automated pull request code review. Analyzes PR diffs
5
+ * for code quality, security issues, and test coverage gaps, then posts
6
+ * review comments back to GitHub via the gh CLI.
7
+ *
8
+ * @module services/pr-review/pr-review.service
9
+ */
10
+ /** Supported PR webhook event actions */
11
+ export declare const PR_REVIEW_ACTIONS: readonly ["opened", "synchronize", "reopened"];
12
+ /** GitHub PR webhook payload (subset of fields used) */
13
+ export interface PullRequestPayload {
14
+ /** Webhook action type */
15
+ action: string;
16
+ /** Pull request data */
17
+ pull_request: {
18
+ /** PR number */
19
+ number: number;
20
+ /** PR title */
21
+ title: string;
22
+ /** PR author */
23
+ user: {
24
+ login: string;
25
+ };
26
+ /** Head branch info */
27
+ head: {
28
+ sha: string;
29
+ ref: string;
30
+ };
31
+ /** Base branch info */
32
+ base: {
33
+ sha: string;
34
+ ref: string;
35
+ };
36
+ /** URL to raw diff */
37
+ diff_url: string;
38
+ /** HTML URL for the PR */
39
+ html_url: string;
40
+ /** Changed file count */
41
+ changed_files?: number;
42
+ };
43
+ /** Repository info */
44
+ repository: {
45
+ /** Full repo name (owner/repo) */
46
+ full_name: string;
47
+ };
48
+ }
49
+ /** A single review finding */
50
+ export interface ReviewFinding {
51
+ /** File path relative to repo root */
52
+ file: string;
53
+ /** Line number in the diff (if applicable) */
54
+ line?: number;
55
+ /** Severity level */
56
+ severity: 'critical' | 'warning' | 'info';
57
+ /** Category of the finding */
58
+ category: 'security' | 'quality' | 'testing' | 'style';
59
+ /** Human-readable description of the issue */
60
+ message: string;
61
+ }
62
+ /** Result of a full PR review */
63
+ export interface ReviewResult {
64
+ /** PR number reviewed */
65
+ prNumber: number;
66
+ /** Repository full name */
67
+ repository: string;
68
+ /** Overall verdict */
69
+ verdict: 'approve' | 'request_changes' | 'comment';
70
+ /** Summary text */
71
+ summary: string;
72
+ /** Individual findings */
73
+ findings: ReviewFinding[];
74
+ /** Timestamp of review */
75
+ reviewedAt: string;
76
+ }
77
+ /** Status of a review job */
78
+ export interface ReviewStatus {
79
+ /** Whether a review is currently running */
80
+ isRunning: boolean;
81
+ /** Number of reviews completed */
82
+ reviewCount: number;
83
+ /** Last review timestamp */
84
+ lastReviewAt: string | null;
85
+ }
86
+ /**
87
+ * Verify the GitHub webhook signature using HMAC-SHA256.
88
+ *
89
+ * Compares the X-Hub-Signature-256 header against a computed HMAC
90
+ * of the raw request body using the configured webhook secret.
91
+ *
92
+ * @param payload - Raw request body as string
93
+ * @param signature - Value of the X-Hub-Signature-256 header
94
+ * @param secret - Webhook secret configured in GitHub
95
+ * @returns True if the signature is valid
96
+ */
97
+ export declare function verifyWebhookSignature(payload: string, signature: string, secret: string): boolean;
98
+ /**
99
+ * Fetch the diff for a pull request using the gh CLI.
100
+ *
101
+ * @param repo - Repository full name (owner/repo)
102
+ * @param prNumber - Pull request number
103
+ * @returns The unified diff as a string
104
+ * @throws Error if gh CLI fails or diff exceeds size limit
105
+ */
106
+ export declare function fetchPrDiff(repo: string, prNumber: number): string;
107
+ /**
108
+ * Parse a unified diff into per-file changed sections.
109
+ *
110
+ * Extracts file paths and their changed lines from a unified diff string.
111
+ *
112
+ * @param diff - Unified diff string
113
+ * @returns Array of objects with file path and changed content
114
+ */
115
+ export declare function parseDiff(diff: string): {
116
+ file: string;
117
+ content: string;
118
+ }[];
119
+ /**
120
+ * Analyze a PR diff for code quality, security, and testing issues.
121
+ *
122
+ * Performs static analysis checks on the diff content:
123
+ * - Security: hardcoded secrets, SQL injection patterns, eval usage
124
+ * - Quality: console.log in production, TODO comments, large functions
125
+ * - Testing: new source files without corresponding test files
126
+ * - Style: any types in TypeScript files
127
+ *
128
+ * @param diff - Unified diff string
129
+ * @returns Array of review findings
130
+ */
131
+ export declare function analyzeDiff(diff: string): ReviewFinding[];
132
+ /**
133
+ * Determine the review verdict based on findings.
134
+ *
135
+ * @param findings - Array of review findings
136
+ * @returns 'request_changes' if critical issues, 'comment' if warnings, 'approve' if clean
137
+ */
138
+ export declare function determineVerdict(findings: ReviewFinding[]): 'approve' | 'request_changes' | 'comment';
139
+ /**
140
+ * Format review findings into a markdown comment body.
141
+ *
142
+ * @param result - The review result to format
143
+ * @returns Markdown-formatted review comment
144
+ */
145
+ export declare function formatReviewComment(result: ReviewResult): string;
146
+ /**
147
+ * Post a review comment on a GitHub PR using the gh CLI.
148
+ *
149
+ * @param repo - Repository full name (owner/repo)
150
+ * @param prNumber - Pull request number
151
+ * @param body - Comment body in markdown
152
+ * @returns The URL of the posted comment
153
+ * @throws Error if the gh CLI command fails
154
+ */
155
+ export declare function postReviewComment(repo: string, prNumber: number, body: string): string;
156
+ /**
157
+ * Execute a full PR review: fetch diff, analyze, post comment.
158
+ *
159
+ * This is the main entry point called by the webhook controller.
160
+ * It orchestrates the full review pipeline:
161
+ * 1. Fetch the PR diff via gh CLI
162
+ * 2. Analyze the diff for issues
163
+ * 3. Determine the verdict
164
+ * 4. Format and post the review comment
165
+ *
166
+ * @param payload - The GitHub PR webhook payload
167
+ * @returns The review result with findings and verdict
168
+ * @throws Error if the review pipeline fails
169
+ */
170
+ export declare function executePrReview(payload: PullRequestPayload): Promise<ReviewResult>;
171
+ /**
172
+ * Get the current review service status.
173
+ *
174
+ * @returns Status object with running state and review count
175
+ */
176
+ export declare function getReviewStatus(): ReviewStatus;
177
+ /**
178
+ * Reset review service state (for testing).
179
+ */
180
+ export declare function resetReviewState(): void;
181
+ //# sourceMappingURL=pr-review.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-review.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/pr-review/pr-review.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,336 @@
1
+ /**
2
+ * PR Review Service
3
+ *
4
+ * Core service for automated pull request code review. Analyzes PR diffs
5
+ * for code quality, security issues, and test coverage gaps, then posts
6
+ * review comments back to GitHub via the gh CLI.
7
+ *
8
+ * @module services/pr-review/pr-review.service
9
+ */
10
+ import { execSync } from 'child_process';
11
+ // ========================= Constants =========================
12
+ /** Timeout for gh CLI commands in milliseconds */
13
+ const GH_CLI_TIMEOUT_MS = 30000;
14
+ /** Maximum diff size to analyze (characters) */
15
+ const MAX_DIFF_SIZE = 500000;
16
+ /** Supported PR webhook event actions */
17
+ export const PR_REVIEW_ACTIONS = ['opened', 'synchronize', 'reopened'];
18
+ /** HMAC algorithm for webhook signature verification */
19
+ const HMAC_ALGORITHM = 'sha256';
20
+ // ========================= Webhook Verification =========================
21
+ /**
22
+ * Verify the GitHub webhook signature using HMAC-SHA256.
23
+ *
24
+ * Compares the X-Hub-Signature-256 header against a computed HMAC
25
+ * of the raw request body using the configured webhook secret.
26
+ *
27
+ * @param payload - Raw request body as string
28
+ * @param signature - Value of the X-Hub-Signature-256 header
29
+ * @param secret - Webhook secret configured in GitHub
30
+ * @returns True if the signature is valid
31
+ */
32
+ export function verifyWebhookSignature(payload, signature, secret) {
33
+ if (!signature || !secret) {
34
+ return false;
35
+ }
36
+ const crypto = require('crypto');
37
+ const hmac = crypto.createHmac(HMAC_ALGORITHM, secret);
38
+ hmac.update(payload);
39
+ const expected = `sha256=${hmac.digest('hex')}`;
40
+ // Use timing-safe comparison to prevent timing attacks
41
+ try {
42
+ return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ }
48
+ // ========================= Diff Analysis =========================
49
+ /**
50
+ * Fetch the diff for a pull request using the gh CLI.
51
+ *
52
+ * @param repo - Repository full name (owner/repo)
53
+ * @param prNumber - Pull request number
54
+ * @returns The unified diff as a string
55
+ * @throws Error if gh CLI fails or diff exceeds size limit
56
+ */
57
+ export function fetchPrDiff(repo, prNumber) {
58
+ const diff = execSync(`gh pr diff ${prNumber} --repo ${repo}`, { encoding: 'utf-8', timeout: GH_CLI_TIMEOUT_MS });
59
+ if (diff.length > MAX_DIFF_SIZE) {
60
+ throw new Error(`PR diff exceeds maximum size (${diff.length} > ${MAX_DIFF_SIZE} chars)`);
61
+ }
62
+ return diff;
63
+ }
64
+ /**
65
+ * Parse a unified diff into per-file changed sections.
66
+ *
67
+ * Extracts file paths and their changed lines from a unified diff string.
68
+ *
69
+ * @param diff - Unified diff string
70
+ * @returns Array of objects with file path and changed content
71
+ */
72
+ export function parseDiff(diff) {
73
+ const files = [];
74
+ const fileSections = diff.split(/^diff --git /m).filter(Boolean);
75
+ for (const section of fileSections) {
76
+ const fileMatch = section.match(/^a\/(.+?) b\//);
77
+ if (!fileMatch)
78
+ continue;
79
+ const file = fileMatch[1];
80
+ files.push({ file, content: section });
81
+ }
82
+ return files;
83
+ }
84
+ /**
85
+ * Analyze a PR diff for code quality, security, and testing issues.
86
+ *
87
+ * Performs static analysis checks on the diff content:
88
+ * - Security: hardcoded secrets, SQL injection patterns, eval usage
89
+ * - Quality: console.log in production, TODO comments, large functions
90
+ * - Testing: new source files without corresponding test files
91
+ * - Style: any types in TypeScript files
92
+ *
93
+ * @param diff - Unified diff string
94
+ * @returns Array of review findings
95
+ */
96
+ export function analyzeDiff(diff) {
97
+ const findings = [];
98
+ const files = parseDiff(diff);
99
+ const addedFileNames = new Set();
100
+ for (const { file, content } of files) {
101
+ // Track added files for test coverage check
102
+ if (content.includes('new file mode')) {
103
+ addedFileNames.add(file);
104
+ }
105
+ // Only analyze added lines (lines starting with +)
106
+ const addedLines = content
107
+ .split('\n')
108
+ .filter((line) => line.startsWith('+') && !line.startsWith('+++'));
109
+ for (let i = 0; i < addedLines.length; i++) {
110
+ const line = addedLines[i];
111
+ // Security: hardcoded secrets/tokens
112
+ if (/(?:password|secret|token|api_key|apikey)\s*[:=]\s*['"][^'"]{8,}/i.test(line)) {
113
+ findings.push({
114
+ file,
115
+ line: i + 1,
116
+ severity: 'critical',
117
+ category: 'security',
118
+ message: 'Potential hardcoded secret or API key detected',
119
+ });
120
+ }
121
+ // Security: eval usage
122
+ if (/\beval\s*\(/.test(line) && !file.endsWith('.test.ts') && !file.endsWith('.test.tsx')) {
123
+ findings.push({
124
+ file,
125
+ line: i + 1,
126
+ severity: 'critical',
127
+ category: 'security',
128
+ message: 'Usage of eval() detected — potential code injection vulnerability',
129
+ });
130
+ }
131
+ // Security: SQL injection pattern
132
+ if (/\$\{.*\}.*(?:SELECT|INSERT|UPDATE|DELETE|DROP)\b/i.test(line) ||
133
+ /(?:SELECT|INSERT|UPDATE|DELETE|DROP)\b.*\$\{/i.test(line)) {
134
+ findings.push({
135
+ file,
136
+ line: i + 1,
137
+ severity: 'critical',
138
+ category: 'security',
139
+ message: 'Potential SQL injection — use parameterized queries instead of string interpolation',
140
+ });
141
+ }
142
+ // Quality: console.log in production code
143
+ if (/\bconsole\.(log|debug|info)\b/.test(line) &&
144
+ !file.endsWith('.test.ts') && !file.endsWith('.test.tsx') &&
145
+ !file.includes('logger') && !file.includes('cli/')) {
146
+ findings.push({
147
+ file,
148
+ line: i + 1,
149
+ severity: 'warning',
150
+ category: 'quality',
151
+ message: 'console.log detected in production code — use the LoggerService instead',
152
+ });
153
+ }
154
+ // Style: any type in TypeScript
155
+ if ((file.endsWith('.ts') || file.endsWith('.tsx')) &&
156
+ /:\s*any\b/.test(line) && !file.endsWith('.test.ts') && !file.endsWith('.test.tsx')) {
157
+ findings.push({
158
+ file,
159
+ line: i + 1,
160
+ severity: 'info',
161
+ category: 'style',
162
+ message: 'Usage of `any` type — consider using a specific type or `unknown` with type guards',
163
+ });
164
+ }
165
+ }
166
+ }
167
+ // Testing: check for new source files without corresponding test files
168
+ for (const file of addedFileNames) {
169
+ if ((file.endsWith('.ts') || file.endsWith('.tsx')) &&
170
+ !file.endsWith('.test.ts') && !file.endsWith('.test.tsx') &&
171
+ !file.endsWith('.d.ts') &&
172
+ !file.includes('types/')) {
173
+ const testFile = file.replace(/\.tsx?$/, (ext) => `.test${ext}`);
174
+ if (!addedFileNames.has(testFile)) {
175
+ findings.push({
176
+ file,
177
+ severity: 'warning',
178
+ category: 'testing',
179
+ message: `New source file without corresponding test file (expected: ${testFile})`,
180
+ });
181
+ }
182
+ }
183
+ }
184
+ return findings;
185
+ }
186
+ // ========================= Review Execution =========================
187
+ /**
188
+ * Determine the review verdict based on findings.
189
+ *
190
+ * @param findings - Array of review findings
191
+ * @returns 'request_changes' if critical issues, 'comment' if warnings, 'approve' if clean
192
+ */
193
+ export function determineVerdict(findings) {
194
+ if (findings.some((f) => f.severity === 'critical')) {
195
+ return 'request_changes';
196
+ }
197
+ if (findings.some((f) => f.severity === 'warning')) {
198
+ return 'comment';
199
+ }
200
+ return 'approve';
201
+ }
202
+ /**
203
+ * Format review findings into a markdown comment body.
204
+ *
205
+ * @param result - The review result to format
206
+ * @returns Markdown-formatted review comment
207
+ */
208
+ export function formatReviewComment(result) {
209
+ const lines = [
210
+ '## Automated PR Review',
211
+ '',
212
+ `**Verdict:** ${result.verdict === 'approve' ? 'Approved' : result.verdict === 'request_changes' ? 'Changes Requested' : 'Comment'}`,
213
+ '',
214
+ result.summary,
215
+ '',
216
+ ];
217
+ if (result.findings.length === 0) {
218
+ lines.push('No issues found. Code looks good!');
219
+ return lines.join('\n');
220
+ }
221
+ const grouped = {
222
+ critical: result.findings.filter((f) => f.severity === 'critical'),
223
+ warning: result.findings.filter((f) => f.severity === 'warning'),
224
+ info: result.findings.filter((f) => f.severity === 'info'),
225
+ };
226
+ if (grouped.critical.length > 0) {
227
+ lines.push('### Critical Issues');
228
+ for (const f of grouped.critical) {
229
+ lines.push(`- **${f.file}${f.line ? `:${f.line}` : ''}** [${f.category}] — ${f.message}`);
230
+ }
231
+ lines.push('');
232
+ }
233
+ if (grouped.warning.length > 0) {
234
+ lines.push('### Warnings');
235
+ for (const f of grouped.warning) {
236
+ lines.push(`- **${f.file}${f.line ? `:${f.line}` : ''}** [${f.category}] — ${f.message}`);
237
+ }
238
+ lines.push('');
239
+ }
240
+ if (grouped.info.length > 0) {
241
+ lines.push('### Info');
242
+ for (const f of grouped.info) {
243
+ lines.push(`- **${f.file}${f.line ? `:${f.line}` : ''}** [${f.category}] — ${f.message}`);
244
+ }
245
+ lines.push('');
246
+ }
247
+ lines.push('---');
248
+ lines.push('*Automated review by Crewly PR Review*');
249
+ return lines.join('\n');
250
+ }
251
+ /**
252
+ * Post a review comment on a GitHub PR using the gh CLI.
253
+ *
254
+ * @param repo - Repository full name (owner/repo)
255
+ * @param prNumber - Pull request number
256
+ * @param body - Comment body in markdown
257
+ * @returns The URL of the posted comment
258
+ * @throws Error if the gh CLI command fails
259
+ */
260
+ export function postReviewComment(repo, prNumber, body) {
261
+ const escapedBody = body.replace(/'/g, "'\\''");
262
+ const result = execSync(`gh pr comment ${prNumber} --repo ${repo} --body '${escapedBody}'`, { encoding: 'utf-8', timeout: GH_CLI_TIMEOUT_MS });
263
+ return result.trim();
264
+ }
265
+ // ========================= PR Review Service =========================
266
+ /** Module-level state for tracking review activity */
267
+ let reviewCount = 0;
268
+ let lastReviewAt = null;
269
+ let isRunning = false;
270
+ /**
271
+ * Execute a full PR review: fetch diff, analyze, post comment.
272
+ *
273
+ * This is the main entry point called by the webhook controller.
274
+ * It orchestrates the full review pipeline:
275
+ * 1. Fetch the PR diff via gh CLI
276
+ * 2. Analyze the diff for issues
277
+ * 3. Determine the verdict
278
+ * 4. Format and post the review comment
279
+ *
280
+ * @param payload - The GitHub PR webhook payload
281
+ * @returns The review result with findings and verdict
282
+ * @throws Error if the review pipeline fails
283
+ */
284
+ export async function executePrReview(payload) {
285
+ const repo = payload.repository.full_name;
286
+ const prNumber = payload.pull_request.number;
287
+ isRunning = true;
288
+ try {
289
+ // 1. Fetch diff
290
+ const diff = fetchPrDiff(repo, prNumber);
291
+ // 2. Analyze
292
+ const findings = analyzeDiff(diff);
293
+ // 3. Determine verdict
294
+ const verdict = determineVerdict(findings);
295
+ // 4. Build result
296
+ const result = {
297
+ prNumber,
298
+ repository: repo,
299
+ verdict,
300
+ summary: `Reviewed ${parseDiff(diff).length} file(s) — found ${findings.length} issue(s).`,
301
+ findings,
302
+ reviewedAt: new Date().toISOString(),
303
+ };
304
+ // 5. Post comment
305
+ const comment = formatReviewComment(result);
306
+ postReviewComment(repo, prNumber, comment);
307
+ // 6. Update state
308
+ reviewCount++;
309
+ lastReviewAt = result.reviewedAt;
310
+ return result;
311
+ }
312
+ finally {
313
+ isRunning = false;
314
+ }
315
+ }
316
+ /**
317
+ * Get the current review service status.
318
+ *
319
+ * @returns Status object with running state and review count
320
+ */
321
+ export function getReviewStatus() {
322
+ return {
323
+ isRunning,
324
+ reviewCount,
325
+ lastReviewAt,
326
+ };
327
+ }
328
+ /**
329
+ * Reset review service state (for testing).
330
+ */
331
+ export function resetReviewState() {
332
+ reviewCount = 0;
333
+ lastReviewAt = null;
334
+ isRunning = false;
335
+ }
336
+ //# sourceMappingURL=pr-review.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-review.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/pr-review/pr-review.service.ts"],"names":[],"mappings":"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"}
@@ -67,6 +67,29 @@ export declare class TaskTrackingService extends EventEmitter {
67
67
  scheduleIds: string[];
68
68
  subscriptionIds: string[];
69
69
  }>;
70
+ /**
71
+ * Detect orphan tasks: tasks stuck in in_progress/assigned/active with no
72
+ * corresponding active agent. Returns the list without modifying state.
73
+ *
74
+ * @param getTeamStatus - Function returning current team configurations
75
+ * @param staleThresholdMs - Age threshold in ms to consider a task stale (default: 24 hours)
76
+ * @returns Array of orphan tasks with staleness info
77
+ */
78
+ detectOrphanTasks(getTeamStatus: () => Promise<any[]>, staleThresholdMs?: number): Promise<Array<InProgressTask & {
79
+ staleSinceMs: number;
80
+ }>>;
81
+ /**
82
+ * Bulk cleanup orphan tasks by marking them as cancelled and optionally
83
+ * moving their files back to the open folder.
84
+ *
85
+ * @param taskIds - Array of task IDs to clean up
86
+ * @param action - 'cancel' marks tasks as cancelled, 'reopen' moves them back to open
87
+ * @returns Cleanup report with counts
88
+ */
89
+ cleanupOrphanTasks(taskIds: string[], action?: 'cancel' | 'reopen'): Promise<{
90
+ cleaned: number;
91
+ errors: string[];
92
+ }>;
70
93
  private extractTaskNameFromFile;
71
94
  /**
72
95
  * Recovers abandoned in-progress tasks by checking agent status and moving inactive tasks back to open
@@ -1 +1 @@
1
- {"version":3,"file":"task-tracking.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/project/task-tracking.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-tracking.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/project/task-tracking.service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAIpG,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6F;IACpH,OAAO,CAAC,gBAAgB,CAAC,CAAiC;;IAO1D;;;;;OAKG;IACH,aAAa,CAAC,UAAU,GAAE,MAAuB,GAAG,IAAI;IAgBxD;;OAEG;IACH,YAAY,IAAI,IAAI;IAQpB;;;OAGG;YACW,WAAW;IA8BnB,YAAY,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAwBzC,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnD,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC;IAyBpB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBvG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC,cAAc,CAAC,QAAQ,EAAE;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QACpC,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,cAAc,CAAC;IAuBrB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAKhE,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAKtE,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAMlD,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC9E,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA2ChE;;;;;;;OAOG;IACG,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EAAE,EACrB,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,IAAI,CAAC;IAmBhB;;;;;OAKG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAK3E;;;;;;OAMG;IACG,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7D,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;IAiBF;;;;;;;OAOG;IACG,iBAAiB,CACrB,aAAa,EAAE,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,EACnC,gBAAgB,GAAE,MAA4B,GAC7C,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAsC5D;;;;;;;OAOG;IACG,kBAAkB,CACtB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,QAAQ,GAAG,QAAmB,GACrC,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA8CjD,OAAO,CAAC,uBAAuB;IAU/B;;;;OAIG;IACG,qBAAqB,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;QACxE,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IAmFF;;OAEG;YACW,kBAAkB;IAsChC;;OAEG;IACH,OAAO,CAAC,uBAAuB;CA8BhC"}
@@ -300,6 +300,94 @@ export class TaskTrackingService extends EventEmitter {
300
300
  }
301
301
  return { scheduleIds, subscriptionIds };
302
302
  }
303
+ /**
304
+ * Detect orphan tasks: tasks stuck in in_progress/assigned/active with no
305
+ * corresponding active agent. Returns the list without modifying state.
306
+ *
307
+ * @param getTeamStatus - Function returning current team configurations
308
+ * @param staleThresholdMs - Age threshold in ms to consider a task stale (default: 24 hours)
309
+ * @returns Array of orphan tasks with staleness info
310
+ */
311
+ async detectOrphanTasks(getTeamStatus, staleThresholdMs = 24 * 60 * 60 * 1000) {
312
+ const data = await this.loadTaskData();
313
+ const activeTasks = data.tasks.filter(t => t.status === 'assigned' || t.status === 'active' || t.status === 'working');
314
+ if (activeTasks.length === 0)
315
+ return [];
316
+ // Build set of all known agent session names + member IDs
317
+ const teams = await getTeamStatus();
318
+ const knownAgents = new Set();
319
+ for (const team of teams) {
320
+ for (const member of (team.members || [])) {
321
+ if (member.sessionName)
322
+ knownAgents.add(member.sessionName);
323
+ if (member.id)
324
+ knownAgents.add(member.id);
325
+ }
326
+ }
327
+ const now = Date.now();
328
+ const orphans = [];
329
+ for (const task of activeTasks) {
330
+ const agentKnown = knownAgents.has(task.assignedSessionName) ||
331
+ knownAgents.has(task.assignedTeamMemberId);
332
+ const assignedTime = new Date(task.assignedAt).getTime();
333
+ const staleSinceMs = now - assignedTime;
334
+ // Orphan if agent doesn't exist in any team OR task is stale
335
+ if (!agentKnown || staleSinceMs > staleThresholdMs) {
336
+ orphans.push({ ...task, staleSinceMs });
337
+ }
338
+ }
339
+ return orphans;
340
+ }
341
+ /**
342
+ * Bulk cleanup orphan tasks by marking them as cancelled and optionally
343
+ * moving their files back to the open folder.
344
+ *
345
+ * @param taskIds - Array of task IDs to clean up
346
+ * @param action - 'cancel' marks tasks as cancelled, 'reopen' moves them back to open
347
+ * @returns Cleanup report with counts
348
+ */
349
+ async cleanupOrphanTasks(taskIds, action = 'cancel') {
350
+ const report = { cleaned: 0, errors: [] };
351
+ const data = await this.loadTaskData();
352
+ for (const taskId of taskIds) {
353
+ const task = data.tasks.find(t => t.id === taskId);
354
+ if (!task) {
355
+ report.errors.push(`Task ${taskId} not found`);
356
+ continue;
357
+ }
358
+ try {
359
+ if (action === 'reopen') {
360
+ const moved = await this.moveTaskBackToOpen(task);
361
+ if (moved) {
362
+ await this.removeTask(taskId);
363
+ report.cleaned++;
364
+ }
365
+ else {
366
+ // File may already be gone — just remove from tracking
367
+ await this.removeTask(taskId);
368
+ report.cleaned++;
369
+ }
370
+ }
371
+ else {
372
+ // Cancel: update status and remove from active tracking
373
+ task.status = 'cancelled';
374
+ task.completedAt = new Date().toISOString();
375
+ await this.saveTaskData(data);
376
+ await this.removeTask(taskId);
377
+ report.cleaned++;
378
+ }
379
+ }
380
+ catch (err) {
381
+ report.errors.push(`Failed to clean task ${taskId}: ${err instanceof Error ? err.message : String(err)}`);
382
+ }
383
+ }
384
+ this.logger.info('Orphan task cleanup complete', {
385
+ action,
386
+ cleaned: report.cleaned,
387
+ errors: report.errors.length,
388
+ });
389
+ return report;
390
+ }
303
391
  extractTaskNameFromFile(filename) {
304
392
  // Remove extension and number prefix
305
393
  return filename