crewly 1.3.31 → 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 (665) 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 +96 -1
  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 +105 -36
  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 +36 -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 +174 -52
  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 +74 -3
  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 +248 -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 +45 -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/index.d.ts +3 -1
  302. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +1 -1
  303. package/dist/backend/backend/src/services/agent/crewly-agent/index.js +3 -1
  304. package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +1 -1
  305. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +135 -0
  306. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +1 -0
  307. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +185 -0
  308. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +1 -0
  309. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +10 -2
  310. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -1
  311. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +22 -2
  312. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -1
  313. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +143 -0
  314. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +1 -0
  315. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +264 -0
  316. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +1 -0
  317. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +2 -2
  318. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +55 -1
  319. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -1
  320. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +660 -45
  321. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -1
  322. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +75 -3
  323. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  324. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +49 -2
  325. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  326. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  327. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +17 -2
  328. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  329. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +37 -0
  330. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  331. package/dist/backend/backend/src/services/ai/prompt-builder.service.js +170 -3
  332. package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  333. package/dist/backend/backend/src/services/browser/chrome-discovery.service.d.ts +108 -0
  334. package/dist/backend/backend/src/services/browser/chrome-discovery.service.d.ts.map +1 -0
  335. package/dist/backend/backend/src/services/browser/chrome-discovery.service.js +251 -0
  336. package/dist/backend/backend/src/services/browser/chrome-discovery.service.js.map +1 -0
  337. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +12 -0
  338. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
  339. package/dist/backend/backend/src/services/cloud/cloud-client.service.js +19 -0
  340. package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -1
  341. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts +191 -0
  342. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts.map +1 -0
  343. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js +415 -0
  344. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js.map +1 -0
  345. package/dist/backend/backend/src/services/cloud/device-identity.service.d.ts +89 -0
  346. package/dist/backend/backend/src/services/cloud/device-identity.service.d.ts.map +1 -0
  347. package/dist/backend/backend/src/services/cloud/device-identity.service.js +148 -0
  348. package/dist/backend/backend/src/services/cloud/device-identity.service.js.map +1 -0
  349. package/dist/backend/backend/src/services/core/tracing.service.d.ts +127 -0
  350. package/dist/backend/backend/src/services/core/tracing.service.d.ts.map +1 -0
  351. package/dist/backend/backend/src/services/core/tracing.service.js +238 -0
  352. package/dist/backend/backend/src/services/core/tracing.service.js.map +1 -0
  353. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  354. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +11 -3
  355. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  356. package/dist/backend/backend/src/services/index.d.ts +1 -0
  357. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  358. package/dist/backend/backend/src/services/index.js +1 -0
  359. package/dist/backend/backend/src/services/index.js.map +1 -1
  360. package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts +78 -0
  361. package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts.map +1 -0
  362. package/dist/backend/backend/src/services/knowledge/embedding-provider.js +164 -0
  363. package/dist/backend/backend/src/services/knowledge/embedding-provider.js.map +1 -0
  364. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +39 -13
  365. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
  366. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +114 -17
  367. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
  368. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts +170 -23
  369. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
  370. package/dist/backend/backend/src/services/knowledge/vector-store.service.js +565 -73
  371. package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +1 -1
  372. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
  373. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +8 -11
  374. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
  375. package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -1
  376. package/dist/backend/backend/src/services/marketplace/marketplace.service.js +1 -0
  377. package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -1
  378. package/dist/backend/backend/src/services/memory/context-flush.service.d.ts +73 -0
  379. package/dist/backend/backend/src/services/memory/context-flush.service.d.ts.map +1 -0
  380. package/dist/backend/backend/src/services/memory/context-flush.service.js +131 -0
  381. package/dist/backend/backend/src/services/memory/context-flush.service.js.map +1 -0
  382. package/dist/backend/backend/src/services/memory/learning-accumulation.service.d.ts +23 -2
  383. package/dist/backend/backend/src/services/memory/learning-accumulation.service.d.ts.map +1 -1
  384. package/dist/backend/backend/src/services/memory/learning-accumulation.service.js +78 -16
  385. package/dist/backend/backend/src/services/memory/learning-accumulation.service.js.map +1 -1
  386. package/dist/backend/backend/src/services/memory/memory.service.d.ts +38 -0
  387. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
  388. package/dist/backend/backend/src/services/memory/memory.service.js +121 -2
  389. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
  390. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts +29 -207
  391. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts.map +1 -1
  392. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js +97 -683
  393. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js.map +1 -1
  394. package/dist/backend/backend/src/services/messaging/google-chat-initializer.d.ts.map +1 -1
  395. package/dist/backend/backend/src/services/messaging/google-chat-initializer.js +13 -12
  396. package/dist/backend/backend/src/services/messaging/google-chat-initializer.js.map +1 -1
  397. package/dist/backend/backend/src/services/messaging/messenger-adapter.interface.d.ts +2 -0
  398. package/dist/backend/backend/src/services/messaging/messenger-adapter.interface.d.ts.map +1 -1
  399. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +6 -23
  400. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  401. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +48 -184
  402. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  403. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  404. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +51 -5
  405. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  406. package/dist/backend/backend/src/services/orchestrator/index.d.ts +1 -1
  407. package/dist/backend/backend/src/services/orchestrator/index.d.ts.map +1 -1
  408. package/dist/backend/backend/src/services/orchestrator/index.js +1 -1
  409. package/dist/backend/backend/src/services/orchestrator/index.js.map +1 -1
  410. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts +65 -0
  411. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts.map +1 -1
  412. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js +165 -2
  413. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -1
  414. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +8 -0
  415. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
  416. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +23 -0
  417. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
  418. package/dist/backend/backend/src/services/payment/stripe.service.d.ts +95 -43
  419. package/dist/backend/backend/src/services/payment/stripe.service.d.ts.map +1 -1
  420. package/dist/backend/backend/src/services/payment/stripe.service.js +229 -190
  421. package/dist/backend/backend/src/services/payment/stripe.service.js.map +1 -1
  422. package/dist/backend/backend/src/services/pr-review/pr-review.service.d.ts +181 -0
  423. package/dist/backend/backend/src/services/pr-review/pr-review.service.d.ts.map +1 -0
  424. package/dist/backend/backend/src/services/pr-review/pr-review.service.js +336 -0
  425. package/dist/backend/backend/src/services/pr-review/pr-review.service.js.map +1 -0
  426. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +23 -0
  427. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +1 -1
  428. package/dist/backend/backend/src/services/project/task-tracking.service.js +88 -0
  429. package/dist/backend/backend/src/services/project/task-tracking.service.js.map +1 -1
  430. package/dist/backend/backend/src/services/session/index.d.ts +2 -0
  431. package/dist/backend/backend/src/services/session/index.d.ts.map +1 -1
  432. package/dist/backend/backend/src/services/session/index.js +2 -0
  433. package/dist/backend/backend/src/services/session/index.js.map +1 -1
  434. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts +260 -0
  435. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
  436. package/dist/backend/backend/src/services/session/session-handoff.service.js +565 -0
  437. package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -0
  438. package/dist/backend/backend/src/services/skill/index.d.ts +1 -0
  439. package/dist/backend/backend/src/services/skill/index.d.ts.map +1 -1
  440. package/dist/backend/backend/src/services/skill/index.js +1 -0
  441. package/dist/backend/backend/src/services/skill/index.js.map +1 -1
  442. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +25 -6
  443. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -1
  444. package/dist/backend/backend/src/services/skill/skill-catalog.service.js +78 -20
  445. package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
  446. package/dist/backend/backend/src/services/skill/skill-tier.service.d.ts +116 -0
  447. package/dist/backend/backend/src/services/skill/skill-tier.service.d.ts.map +1 -0
  448. package/dist/backend/backend/src/services/skill/skill-tier.service.js +155 -0
  449. package/dist/backend/backend/src/services/skill/skill-tier.service.js.map +1 -0
  450. package/dist/backend/backend/src/services/skill/skill.service.d.ts +35 -7
  451. package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -1
  452. package/dist/backend/backend/src/services/skill/skill.service.js +128 -35
  453. package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -1
  454. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +50 -47
  455. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  456. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +267 -202
  457. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  458. package/dist/backend/backend/src/services/slack/slack.service.d.ts +28 -2
  459. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  460. package/dist/backend/backend/src/services/slack/slack.service.js +69 -3
  461. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  462. package/dist/backend/backend/src/services/template/template.service.d.ts +19 -1
  463. package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
  464. package/dist/backend/backend/src/services/template/template.service.js +110 -3
  465. package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
  466. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts +11 -0
  467. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts.map +1 -1
  468. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js +57 -3
  469. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js.map +1 -1
  470. package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
  471. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +6 -0
  472. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
  473. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +52 -0
  474. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  475. package/dist/backend/backend/src/services/workflow/scheduler.service.js +319 -6
  476. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  477. package/dist/backend/backend/src/types/chat.types.d.ts +2 -2
  478. package/dist/backend/backend/src/types/chat.types.d.ts.map +1 -1
  479. package/dist/backend/backend/src/types/chat.types.js +18 -22
  480. package/dist/backend/backend/src/types/chat.types.js.map +1 -1
  481. package/dist/backend/backend/src/types/index.d.ts +37 -0
  482. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  483. package/dist/backend/backend/src/types/index.js.map +1 -1
  484. package/dist/backend/backend/src/types/marketplace.types.d.ts +1 -1
  485. package/dist/backend/backend/src/types/marketplace.types.d.ts.map +1 -1
  486. package/dist/backend/backend/src/types/scheduler.types.d.ts +4 -0
  487. package/dist/backend/backend/src/types/scheduler.types.d.ts.map +1 -1
  488. package/dist/backend/backend/src/types/scheduler.types.js.map +1 -1
  489. package/dist/backend/backend/src/types/skill.types.d.ts +4 -0
  490. package/dist/backend/backend/src/types/skill.types.d.ts.map +1 -1
  491. package/dist/backend/backend/src/types/skill.types.js.map +1 -1
  492. package/dist/backend/backend/src/types/task-tracking.types.d.ts +6 -0
  493. package/dist/backend/backend/src/types/task-tracking.types.d.ts.map +1 -1
  494. package/dist/backend/backend/src/types/task-tracking.types.js.map +1 -1
  495. package/dist/backend/backend/src/types/team-template.types.d.ts +2 -0
  496. package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
  497. package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
  498. package/dist/backend/backend/src/utils/skill-md-parser.d.ts +38 -0
  499. package/dist/backend/backend/src/utils/skill-md-parser.d.ts.map +1 -0
  500. package/dist/backend/backend/src/utils/skill-md-parser.js +47 -0
  501. package/dist/backend/backend/src/utils/skill-md-parser.js.map +1 -0
  502. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +0 -154
  503. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
  504. package/dist/backend/backend/src/websocket/terminal.gateway.js +0 -515
  505. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
  506. package/dist/backend/config/constants.d.ts +18 -3
  507. package/dist/backend/config/constants.d.ts.map +1 -1
  508. package/dist/backend/config/constants.js +18 -3
  509. package/dist/backend/config/constants.js.map +1 -1
  510. package/dist/cli/backend/src/constants.d.ts +80 -11
  511. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  512. package/dist/cli/backend/src/constants.js +85 -11
  513. package/dist/cli/backend/src/constants.js.map +1 -1
  514. package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts +78 -0
  515. package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts.map +1 -0
  516. package/dist/cli/backend/src/services/knowledge/embedding-provider.js +164 -0
  517. package/dist/cli/backend/src/services/knowledge/embedding-provider.js.map +1 -0
  518. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +39 -13
  519. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
  520. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +114 -17
  521. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
  522. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts +170 -23
  523. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
  524. package/dist/cli/backend/src/services/knowledge/vector-store.service.js +565 -73
  525. package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +1 -1
  526. package/dist/cli/backend/src/services/memory/memory.service.d.ts +38 -0
  527. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
  528. package/dist/cli/backend/src/services/memory/memory.service.js +121 -2
  529. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
  530. package/dist/cli/backend/src/types/chat.types.d.ts +2 -2
  531. package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -1
  532. package/dist/cli/backend/src/types/chat.types.js +18 -22
  533. package/dist/cli/backend/src/types/chat.types.js.map +1 -1
  534. package/dist/cli/backend/src/types/index.d.ts +37 -0
  535. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  536. package/dist/cli/backend/src/types/index.js.map +1 -1
  537. package/dist/cli/backend/src/types/scheduler.types.d.ts +4 -0
  538. package/dist/cli/backend/src/types/scheduler.types.d.ts.map +1 -1
  539. package/dist/cli/backend/src/types/scheduler.types.js.map +1 -1
  540. package/dist/cli/backend/src/types/skill.types.d.ts +4 -0
  541. package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -1
  542. package/dist/cli/backend/src/types/skill.types.js.map +1 -1
  543. package/dist/cli/cli/src/commands/onboard.d.ts +19 -2
  544. package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
  545. package/dist/cli/cli/src/commands/onboard.js +58 -15
  546. package/dist/cli/cli/src/commands/onboard.js.map +1 -1
  547. package/dist/cli/cli/src/commands/pair.d.ts +46 -0
  548. package/dist/cli/cli/src/commands/pair.d.ts.map +1 -0
  549. package/dist/cli/cli/src/commands/pair.js +258 -0
  550. package/dist/cli/cli/src/commands/pair.js.map +1 -0
  551. package/dist/cli/cli/src/commands/service.d.ts +86 -0
  552. package/dist/cli/cli/src/commands/service.d.ts.map +1 -0
  553. package/dist/cli/cli/src/commands/service.js +687 -0
  554. package/dist/cli/cli/src/commands/service.js.map +1 -0
  555. package/dist/cli/cli/src/index.js +17 -0
  556. package/dist/cli/cli/src/index.js.map +1 -1
  557. package/dist/cli/config/constants.d.ts +18 -3
  558. package/dist/cli/config/constants.d.ts.map +1 -1
  559. package/dist/cli/config/constants.js +18 -3
  560. package/dist/cli/config/constants.js.map +1 -1
  561. package/frontend/dist/assets/index-1d23cce8.js +4919 -0
  562. package/frontend/dist/assets/index-60a9e4ea.css +33 -0
  563. package/frontend/dist/index.html +2 -2
  564. package/package.json +22 -10
  565. package/config/skills/agent/browse-stealth/skill.json +0 -20
  566. package/config/skills/agent/competitor-content-tracker/skill.json +0 -22
  567. package/config/skills/agent/computer-use/skill.json +0 -29
  568. package/config/skills/agent/content-calendar/skill.json +0 -22
  569. package/config/skills/agent/content-repurposer/skill.json +0 -22
  570. package/config/skills/agent/content-writer/skill.json +0 -22
  571. package/config/skills/agent/core/accept-task/skill.json +0 -20
  572. package/config/skills/agent/core/block-task/skill.json +0 -20
  573. package/config/skills/agent/core/check-quality-gates/skill.json +0 -20
  574. package/config/skills/agent/core/complete-task/skill.json +0 -20
  575. package/config/skills/agent/core/generate-pdf/skill.json +0 -20
  576. package/config/skills/agent/core/get-my-context/skill.json +0 -20
  577. package/config/skills/agent/core/get-sops/skill.json +0 -20
  578. package/config/skills/agent/core/get-team-status/instructions.md +0 -17
  579. package/config/skills/agent/core/get-team-status/skill.json +0 -20
  580. package/config/skills/agent/core/heartbeat/skill.json +0 -20
  581. package/config/skills/agent/core/marketplace-search/skill.json +0 -20
  582. package/config/skills/agent/core/query-knowledge/skill.json +0 -20
  583. package/config/skills/agent/core/read-task/instructions.md +0 -19
  584. package/config/skills/agent/core/read-task/skill.json +0 -20
  585. package/config/skills/agent/core/recall/skill.json +0 -20
  586. package/config/skills/agent/core/record-learning/skill.json +0 -20
  587. package/config/skills/agent/core/register-self/instructions.md +0 -18
  588. package/config/skills/agent/core/register-self/skill.json +0 -20
  589. package/config/skills/agent/core/remember/skill.json +0 -20
  590. package/config/skills/agent/core/reply-chat/skill.json +0 -20
  591. package/config/skills/agent/core/report-progress/skill.json +0 -20
  592. package/config/skills/agent/core/report-status/skill.json +0 -20
  593. package/config/skills/agent/core/send-chat-response/skill.json +0 -20
  594. package/config/skills/agent/core/send-message/instructions.md +0 -20
  595. package/config/skills/agent/core/send-message/skill.json +0 -20
  596. package/config/skills/agent/desktop-app-control/skill.json +0 -33
  597. package/config/skills/agent/trend-monitor/skill.json +0 -22
  598. package/config/skills/agent/vnc-browser/skill.json +0 -20
  599. package/config/skills/orchestrator/assign-task/instructions.md +0 -17
  600. package/config/skills/orchestrator/assign-task/skill.json +0 -20
  601. package/config/skills/orchestrator/assign-team-to-project/skill.json +0 -20
  602. package/config/skills/orchestrator/broadcast/skill.json +0 -20
  603. package/config/skills/orchestrator/broadcast-to-org/skill.json +0 -20
  604. package/config/skills/orchestrator/cancel-all-schedules/skill.json +0 -17
  605. package/config/skills/orchestrator/cancel-schedule/instructions.md +0 -19
  606. package/config/skills/orchestrator/cancel-schedule/skill.json +0 -20
  607. package/config/skills/orchestrator/complete-task/instructions.md +0 -17
  608. package/config/skills/orchestrator/complete-task/skill.json +0 -20
  609. package/config/skills/orchestrator/create-project/skill.json +0 -20
  610. package/config/skills/orchestrator/create-team/skill.json +0 -20
  611. package/config/skills/orchestrator/delegate-task/skill.json +0 -20
  612. package/config/skills/orchestrator/get-agent-logs/skill.json +0 -20
  613. package/config/skills/orchestrator/get-agent-status/skill.json +0 -20
  614. package/config/skills/orchestrator/get-project-overview/instructions.md +0 -17
  615. package/config/skills/orchestrator/get-project-overview/skill.json +0 -20
  616. package/config/skills/orchestrator/get-tasks/instructions.md +0 -17
  617. package/config/skills/orchestrator/get-tasks/skill.json +0 -20
  618. package/config/skills/orchestrator/get-team-status/instructions.md +0 -17
  619. package/config/skills/orchestrator/get-team-status/skill.json +0 -20
  620. package/config/skills/orchestrator/handle-agent-failure/skill.json +0 -20
  621. package/config/skills/orchestrator/heartbeat/skill.json +0 -20
  622. package/config/skills/orchestrator/list-schedules/skill.json +0 -12
  623. package/config/skills/orchestrator/list-subscriptions/instructions.md +0 -17
  624. package/config/skills/orchestrator/list-subscriptions/skill.json +0 -20
  625. package/config/skills/orchestrator/query-knowledge/skill.json +0 -20
  626. package/config/skills/orchestrator/read-session-logs/skill.json +0 -20
  627. package/config/skills/orchestrator/read-system-logs/skill.json +0 -20
  628. package/config/skills/orchestrator/recall/skill.json +0 -20
  629. package/config/skills/orchestrator/record-failure/skill.json +0 -20
  630. package/config/skills/orchestrator/record-learning/skill.json +0 -20
  631. package/config/skills/orchestrator/record-success/skill.json +0 -20
  632. package/config/skills/orchestrator/register-self/skill.json +0 -20
  633. package/config/skills/orchestrator/remember/skill.json +0 -20
  634. package/config/skills/orchestrator/reply-chat/skill.json +0 -20
  635. package/config/skills/orchestrator/reply-gchat/skill.json +0 -20
  636. package/config/skills/orchestrator/reply-slack/skill.json +0 -20
  637. package/config/skills/orchestrator/report-bug/skill.json +0 -20
  638. package/config/skills/orchestrator/restart-crewly/skill.json +0 -20
  639. package/config/skills/orchestrator/resume-session/skill.json +0 -20
  640. package/config/skills/orchestrator/schedule-check/skill.json +0 -20
  641. package/config/skills/orchestrator/send-key/skill.json +0 -20
  642. package/config/skills/orchestrator/send-message/skill.json +0 -20
  643. package/config/skills/orchestrator/send-pdf-to-slack/skill.json +0 -20
  644. package/config/skills/orchestrator/set-goal/skill.json +0 -20
  645. package/config/skills/orchestrator/start-agent/skill.json +0 -20
  646. package/config/skills/orchestrator/start-team/skill.json +0 -20
  647. package/config/skills/orchestrator/stop-agent/skill.json +0 -20
  648. package/config/skills/orchestrator/stop-team/instructions.md +0 -19
  649. package/config/skills/orchestrator/stop-team/skill.json +0 -20
  650. package/config/skills/orchestrator/subscribe-event/skill.json +0 -20
  651. package/config/skills/orchestrator/terminate-agent/skill.json +0 -20
  652. package/config/skills/orchestrator/unsubscribe-event/instructions.md +0 -19
  653. package/config/skills/orchestrator/unsubscribe-event/skill.json +0 -20
  654. package/config/skills/orchestrator/update-focus/skill.json +0 -20
  655. package/config/skills/orchestrator/update-team/skill.json +0 -20
  656. package/config/skills/team-leader/aggregate-results/skill.json +0 -20
  657. package/config/skills/team-leader/decompose-goal/skill.json +0 -20
  658. package/config/skills/team-leader/delegate-task/skill.json +0 -20
  659. package/config/skills/team-leader/handle-failure/skill.json +0 -20
  660. package/config/skills/team-leader/schedule-check/skill.json +0 -20
  661. package/config/skills/team-leader/start-agent/skill.json +0 -20
  662. package/config/skills/team-leader/stop-agent/skill.json +0 -20
  663. package/config/skills/team-leader/verify-output/skill.json +0 -20
  664. package/frontend/dist/assets/index-0e5673b0.css +0 -33
  665. package/frontend/dist/assets/index-e6d7db4a.js +0 -5213
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import { EventEmitter } from 'events';
10
10
  import { v4 as uuidv4 } from 'uuid';
11
+ import * as cron from 'node-cron';
11
12
  import { getSessionBackendSync, createSessionBackend, } from '../session/index.js';
12
13
  import { MessageDeliveryLogModel } from '../../models/ScheduledMessage.js';
13
14
  import { LoggerService } from '../core/logger.service.js';
@@ -97,6 +98,10 @@ export class SchedulerService extends EventEmitter {
97
98
  // 25+ concurrent Ctrl+C presses crash the runtime. This guard ensures only
98
99
  // one check delivers per session at a time; concurrent checks are dropped.
99
100
  deliveryInProgress = new Set();
101
+ /** #167: Dead-letter queue — messages for offline agents, delivered when they come online. */
102
+ deadLetterQueue = new Map();
103
+ /** #167: Active cron tasks keyed by check ID. */
104
+ cronTasks = new Map();
100
105
  /** Consecutive idle hits per recurring check ID for auto-cancel policy. */
101
106
  recurringIdleStreak = new Map();
102
107
  /** Auto-cancel recurring checks after this many consecutive idle observations. */
@@ -107,6 +112,8 @@ export class SchedulerService extends EventEmitter {
107
112
  * whose message mentions a recently-checked session are suppressed.
108
113
  */
109
114
  lastManualCheck = new Map();
115
+ /** Unique session ID generated on construction — tags all new checks so stale checks from previous sessions can be purged on restart (#169). */
116
+ sessionId;
110
117
  /**
111
118
  * Creates a new SchedulerService
112
119
  *
@@ -115,8 +122,17 @@ export class SchedulerService extends EventEmitter {
115
122
  constructor(storageService) {
116
123
  super();
117
124
  this.storageService = storageService;
125
+ this.sessionId = uuidv4();
118
126
  this.logger = LoggerService.getInstance().createComponentLogger('SchedulerService');
119
127
  }
128
+ /**
129
+ * Get the current session ID for this SchedulerService instance.
130
+ *
131
+ * @returns The unique session ID
132
+ */
133
+ getSessionId() {
134
+ return this.sessionId;
135
+ }
120
136
  /**
121
137
  * Record that the orchestrator manually checked an agent's status or logs.
122
138
  * Recurring checks whose message mentions this session will be suppressed
@@ -306,6 +322,7 @@ export class SchedulerService extends EventEmitter {
306
322
  timeOfDay: options?.timeOfDay,
307
323
  dayOfWeek: options?.dayOfWeek,
308
324
  createdAt: new Date().toISOString(),
325
+ sessionId: this.sessionId,
309
326
  };
310
327
  // Store enhanced message info
311
328
  const enhancedMessage = {
@@ -360,6 +377,24 @@ export class SchedulerService extends EventEmitter {
360
377
  * @returns Check ID
361
378
  */
362
379
  scheduleRecurringCheck(targetSession, intervalMinutes, message, type = 'progress-check', maxOccurrences, options) {
380
+ // #165: Enforce uniqueness — cancel existing recurring checks for the same target
381
+ // to prevent duplicate/overlapping checks from accumulating.
382
+ const existingCheckIds = [];
383
+ for (const [existingId, existingCheck] of this.recurringChecks.entries()) {
384
+ if (existingCheck.targetSession === targetSession) {
385
+ existingCheckIds.push(existingId);
386
+ }
387
+ }
388
+ if (existingCheckIds.length > 0) {
389
+ this.logger.info('Cancelling existing recurring checks for target before scheduling new one', {
390
+ targetSession,
391
+ cancelledCount: existingCheckIds.length,
392
+ cancelledIds: existingCheckIds,
393
+ });
394
+ for (const existingId of existingCheckIds) {
395
+ this.cancelCheck(existingId);
396
+ }
397
+ }
363
398
  const checkId = uuidv4();
364
399
  const firstExecution = new Date(Date.now() + intervalMinutes * 60 * 1000);
365
400
  const scheduledCheck = {
@@ -379,6 +414,7 @@ export class SchedulerService extends EventEmitter {
379
414
  currentOccurrence: 0,
380
415
  createdAt: new Date().toISOString(),
381
416
  taskId: options?.taskId,
417
+ sessionId: this.sessionId,
382
418
  };
383
419
  this.recurringChecks.set(checkId, scheduledCheck);
384
420
  // Persist to disk so checks survive restarts
@@ -414,6 +450,112 @@ export class SchedulerService extends EventEmitter {
414
450
  });
415
451
  return checkId;
416
452
  }
453
+ /**
454
+ * #167: Schedule a recurring check using a cron expression.
455
+ * Supports standard 5-field cron syntax (minute hour day-of-month month day-of-week).
456
+ * Falls back to intervalMinutes-based scheduling if cron expression is invalid.
457
+ *
458
+ * @param targetSession - Target session name
459
+ * @param cronExpression - Cron expression (e.g., '0 9 * * *' for daily at 9am)
460
+ * @param message - Message to send
461
+ * @param type - Type of scheduled message
462
+ * @param maxOccurrences - Maximum number of times the check fires
463
+ * @param options - Additional scheduling options
464
+ * @returns Check ID
465
+ */
466
+ scheduleCronCheck(targetSession, cronExpression, message, type = 'progress-check', maxOccurrences, options) {
467
+ // Validate cron expression
468
+ if (!cron.validate(cronExpression)) {
469
+ this.logger.error('Invalid cron expression, falling back to 30-min interval', {
470
+ cronExpression,
471
+ targetSession,
472
+ });
473
+ return this.scheduleRecurringCheck(targetSession, 30, message, type, maxOccurrences, options);
474
+ }
475
+ // Cancel existing recurring/cron checks for the same target (uniqueness constraint)
476
+ const existingCheckIds = [];
477
+ for (const [existingId, existingCheck] of this.recurringChecks.entries()) {
478
+ if (existingCheck.targetSession === targetSession) {
479
+ existingCheckIds.push(existingId);
480
+ }
481
+ }
482
+ for (const existingId of existingCheckIds) {
483
+ this.cancelCheck(existingId);
484
+ }
485
+ const checkId = uuidv4();
486
+ const scheduledCheck = {
487
+ id: checkId,
488
+ targetSession,
489
+ message,
490
+ scheduledFor: new Date().toISOString(),
491
+ isRecurring: true,
492
+ cronExpression,
493
+ maxOccurrences,
494
+ currentOccurrence: 0,
495
+ createdAt: new Date().toISOString(),
496
+ label: options?.label,
497
+ taskId: options?.taskId,
498
+ sessionId: this.sessionId,
499
+ };
500
+ this.recurringChecks.set(checkId, scheduledCheck);
501
+ // Persist to disk
502
+ this.storageService.saveRecurringCheck(scheduledCheck).catch(err => {
503
+ this.logger.error('Failed to persist cron check', {
504
+ checkId,
505
+ error: err instanceof Error ? err.message : String(err),
506
+ });
507
+ });
508
+ // Store enhanced message info
509
+ const enhancedMessage = {
510
+ id: checkId,
511
+ sessionName: targetSession,
512
+ message,
513
+ scheduledFor: new Date(),
514
+ type,
515
+ recurring: {
516
+ interval: 0,
517
+ currentOccurrence: 0,
518
+ maxOccurrences,
519
+ cronExpression,
520
+ },
521
+ createdAt: new Date().toISOString(),
522
+ };
523
+ this.enhancedMessages.set(checkId, enhancedMessage);
524
+ // Create the cron task
525
+ const task = cron.schedule(cronExpression, async () => {
526
+ if (!this.recurringChecks.has(checkId)) {
527
+ task.stop();
528
+ this.cronTasks.delete(checkId);
529
+ return;
530
+ }
531
+ const enhanced = this.enhancedMessages.get(checkId);
532
+ const occurrence = (enhanced?.recurring?.currentOccurrence ?? 0) + 1;
533
+ // Check max occurrences
534
+ if (maxOccurrences && occurrence > maxOccurrences) {
535
+ this.cancelCheck(checkId);
536
+ return;
537
+ }
538
+ await this.executeCheck(targetSession, this.addFreshnessInstructions(message));
539
+ // Update occurrence count
540
+ if (enhanced?.recurring) {
541
+ enhanced.recurring.currentOccurrence = occurrence;
542
+ const rc = this.recurringChecks.get(checkId);
543
+ if (rc) {
544
+ rc.currentOccurrence = occurrence;
545
+ this.storageService.saveRecurringCheck(rc).catch(() => { });
546
+ }
547
+ }
548
+ });
549
+ this.cronTasks.set(checkId, task);
550
+ this.emit('recurring_check_scheduled', scheduledCheck);
551
+ this.logger.info('Scheduled cron check', {
552
+ checkId,
553
+ targetSession,
554
+ cronExpression,
555
+ type,
556
+ });
557
+ return checkId;
558
+ }
417
559
  /**
418
560
  * Schedule default check-ins for a new agent
419
561
  *
@@ -582,6 +724,12 @@ export class SchedulerService extends EventEmitter {
582
724
  clearTimeout(recurringTimeout);
583
725
  this.recurringTimeouts.delete(checkId);
584
726
  }
727
+ // #167: Stop cron task if this was a cron-based check
728
+ const cronTask = this.cronTasks.get(checkId);
729
+ if (cronTask) {
730
+ cronTask.stop();
731
+ this.cronTasks.delete(checkId);
732
+ }
585
733
  this.recurringChecks.delete(checkId);
586
734
  this.enhancedMessages.delete(checkId);
587
735
  this.recurringIdleStreak.delete(checkId);
@@ -843,7 +991,16 @@ export class SchedulerService extends EventEmitter {
843
991
  });
844
992
  }
845
993
  else {
846
- // Fallback: direct PTY write (should not happen in normal operation)
994
+ // Fallback: direct PTY write (should not happen in normal operation).
995
+ // Skip crewly-agent sessions — they have no PTY and require
996
+ // AgentRegistrationService for in-process delivery (Bug 3 fix).
997
+ const runtimeType = await this.resolveRuntimeType(targetSession);
998
+ if (runtimeType === RUNTIME_TYPES.CREWLY_AGENT) {
999
+ this.logger.warn('Cannot deliver scheduled message to crewly-agent without AgentRegistrationService', {
1000
+ targetSession,
1001
+ });
1002
+ return;
1003
+ }
847
1004
  this.logger.warn('AgentRegistrationService not available, using fallback PTY write', {
848
1005
  targetSession,
849
1006
  });
@@ -871,6 +1028,19 @@ export class SchedulerService extends EventEmitter {
871
1028
  success = false;
872
1029
  error = sendError instanceof Error ? sendError.message : 'Unknown error';
873
1030
  this.logger.error('Error executing check-in', { targetSession, error });
1031
+ // #167: Dead-letter queue — queue the message for delivery when agent comes online
1032
+ if (!this.deadLetterQueue.has(targetSession)) {
1033
+ this.deadLetterQueue.set(targetSession, []);
1034
+ }
1035
+ const dlq = this.deadLetterQueue.get(targetSession);
1036
+ // Limit DLQ per session to 10 messages to prevent unbounded growth
1037
+ if (dlq.length < 10) {
1038
+ dlq.push({ message, queuedAt: new Date().toISOString() });
1039
+ this.logger.info('Message queued in dead-letter queue for offline agent', {
1040
+ targetSession,
1041
+ queueSize: dlq.length,
1042
+ });
1043
+ }
874
1044
  this.emit('check_execution_failed', {
875
1045
  targetSession,
876
1046
  message,
@@ -1017,7 +1187,11 @@ export class SchedulerService extends EventEmitter {
1017
1187
  }
1018
1188
  return;
1019
1189
  }
1020
- await this.executeCheck(targetSession, message);
1190
+ // Enrich the recurring check message with freshness instructions so the
1191
+ // agent queries current task status instead of relying on potentially
1192
+ // stale task descriptions baked into the original scheduled message.
1193
+ const enrichedMessage = this.addFreshnessInstructions(message);
1194
+ await this.executeCheck(targetSession, enrichedMessage);
1021
1195
  // Log per-execution result
1022
1196
  const enhanced = this.enhancedMessages.get(checkId);
1023
1197
  const occurrence = (enhanced?.recurring?.currentOccurrence ?? 0) + 1;
@@ -1068,6 +1242,70 @@ export class SchedulerService extends EventEmitter {
1068
1242
  const firstTimeout = setTimeout(executeRecurring, intervalMinutes * 60 * 1000);
1069
1243
  this.recurringTimeouts.set(checkId, firstTimeout);
1070
1244
  }
1245
+ /**
1246
+ * Enrich a recurring check message with freshness instructions.
1247
+ * Tells the agent to query current task status rather than relying on
1248
+ * potentially stale task descriptions embedded in the original message.
1249
+ *
1250
+ * @param originalMessage - The original scheduled check message
1251
+ * @returns Enriched message with freshness instructions
1252
+ */
1253
+ addFreshnessInstructions(originalMessage) {
1254
+ return `${originalMessage}
1255
+
1256
+ ⚠️ NOTE: This is a recurring scheduled check. The task description above may be OUTDATED. Before responding, use get_tasks or get_agent_status to verify the CURRENT status. If the task is already completed, cancel this recurring check using cancel_schedule and report the task is done.`;
1257
+ }
1258
+ /**
1259
+ * #167: Drain the dead-letter queue for a session that has come online.
1260
+ * Delivers all queued messages and clears the queue for that session.
1261
+ *
1262
+ * @param sessionName - The session that came online
1263
+ * @returns Number of messages delivered
1264
+ */
1265
+ async drainDeadLetterQueue(sessionName) {
1266
+ const queued = this.deadLetterQueue.get(sessionName);
1267
+ if (!queued || queued.length === 0) {
1268
+ return 0;
1269
+ }
1270
+ this.logger.info('Draining dead-letter queue for session', {
1271
+ sessionName,
1272
+ messageCount: queued.length,
1273
+ });
1274
+ // Take all messages and clear the queue immediately to prevent double delivery
1275
+ const messages = [...queued];
1276
+ this.deadLetterQueue.delete(sessionName);
1277
+ let delivered = 0;
1278
+ for (const entry of messages) {
1279
+ try {
1280
+ await this.executeCheck(sessionName, entry.message);
1281
+ delivered++;
1282
+ }
1283
+ catch (err) {
1284
+ this.logger.warn('Failed to deliver dead-letter message', {
1285
+ sessionName,
1286
+ error: err instanceof Error ? err.message : String(err),
1287
+ });
1288
+ }
1289
+ }
1290
+ this.logger.info('Dead-letter queue drained', {
1291
+ sessionName,
1292
+ delivered,
1293
+ total: messages.length,
1294
+ });
1295
+ return delivered;
1296
+ }
1297
+ /**
1298
+ * Get dead-letter queue stats.
1299
+ *
1300
+ * @returns Map of session name to queued message count
1301
+ */
1302
+ getDeadLetterQueueStats() {
1303
+ const stats = {};
1304
+ for (const [session, messages] of this.deadLetterQueue) {
1305
+ stats[session] = messages.length;
1306
+ }
1307
+ return stats;
1308
+ }
1071
1309
  /**
1072
1310
  * Clean up all scheduled checks
1073
1311
  */
@@ -1085,6 +1323,11 @@ export class SchedulerService extends EventEmitter {
1085
1323
  this.recurringTimeouts.clear();
1086
1324
  this.recurringChecks.clear();
1087
1325
  this.recurringIdleStreak.clear();
1326
+ // #167: Stop and clear all cron tasks
1327
+ for (const task of this.cronTasks.values()) {
1328
+ task.stop();
1329
+ }
1330
+ this.cronTasks.clear();
1088
1331
  // Clear persisted recurring checks
1089
1332
  this.storageService.clearRecurringChecks().catch(err => {
1090
1333
  this.logger.error('Failed to clear persisted recurring checks', {
@@ -1106,6 +1349,8 @@ export class SchedulerService extends EventEmitter {
1106
1349
  this.adaptiveChecks.clear();
1107
1350
  // Clear enhanced messages
1108
1351
  this.enhancedMessages.clear();
1352
+ // Clear dead-letter queue
1353
+ this.deadLetterQueue.clear();
1109
1354
  this.logger.info('Scheduler service cleaned up');
1110
1355
  }
1111
1356
  /**
@@ -1125,8 +1370,25 @@ export class SchedulerService extends EventEmitter {
1125
1370
  }
1126
1371
  let restored = 0;
1127
1372
  let purged = 0;
1373
+ let staleSessionPurged = 0;
1128
1374
  for (const check of persisted) {
1129
- if (!check.isRecurring || !check.intervalMinutes) {
1375
+ if (!check.isRecurring || (!check.intervalMinutes && !check.cronExpression)) {
1376
+ continue;
1377
+ }
1378
+ // #169: Skip and purge checks from previous sessions
1379
+ if (check.sessionId && check.sessionId !== this.sessionId) {
1380
+ this.logger.info('Purging stale recurring check from previous session', {
1381
+ checkId: check.id,
1382
+ staleSessionId: check.sessionId,
1383
+ currentSessionId: this.sessionId,
1384
+ });
1385
+ this.storageService.deleteRecurringCheck(check.id).catch(err => {
1386
+ this.logger.error('Failed to delete stale session recurring check', {
1387
+ checkId: check.id,
1388
+ error: err instanceof Error ? err.message : String(err),
1389
+ });
1390
+ });
1391
+ staleSessionPurged++;
1130
1392
  continue;
1131
1393
  }
1132
1394
  // Skip checks whose linked task is already completed
@@ -1153,23 +1415,51 @@ export class SchedulerService extends EventEmitter {
1153
1415
  id: check.id,
1154
1416
  sessionName: check.targetSession,
1155
1417
  message: check.message,
1156
- scheduledFor: new Date(Date.now() + check.intervalMinutes * 60 * 1000),
1418
+ scheduledFor: new Date(Date.now() + (check.intervalMinutes || 30) * 60 * 1000),
1157
1419
  type: 'progress-check',
1158
1420
  recurring: {
1159
- interval: check.intervalMinutes,
1421
+ interval: check.intervalMinutes || 0,
1160
1422
  currentOccurrence: check.currentOccurrence || 0,
1161
1423
  maxOccurrences: check.maxOccurrences,
1424
+ cronExpression: check.cronExpression,
1162
1425
  },
1163
1426
  createdAt: check.createdAt,
1164
1427
  };
1165
1428
  this.enhancedMessages.set(check.id, enhancedMessage);
1166
- this.scheduleRecurringExecution(check.id, check.intervalMinutes, check.targetSession, check.message);
1429
+ // #167: Restore cron-based checks using cron scheduler, interval-based using setTimeout
1430
+ if (check.cronExpression && cron.validate(check.cronExpression)) {
1431
+ const task = cron.schedule(check.cronExpression, async () => {
1432
+ if (!this.recurringChecks.has(check.id)) {
1433
+ task.stop();
1434
+ this.cronTasks.delete(check.id);
1435
+ return;
1436
+ }
1437
+ await this.executeCheck(check.targetSession, this.addFreshnessInstructions(check.message));
1438
+ const enh = this.enhancedMessages.get(check.id);
1439
+ if (enh?.recurring) {
1440
+ enh.recurring.currentOccurrence = (enh.recurring.currentOccurrence || 0) + 1;
1441
+ const rc = this.recurringChecks.get(check.id);
1442
+ if (rc) {
1443
+ rc.currentOccurrence = enh.recurring.currentOccurrence;
1444
+ this.storageService.saveRecurringCheck(rc).catch(() => { });
1445
+ }
1446
+ if (enh.recurring.maxOccurrences && enh.recurring.currentOccurrence >= enh.recurring.maxOccurrences) {
1447
+ this.cancelCheck(check.id);
1448
+ }
1449
+ }
1450
+ });
1451
+ this.cronTasks.set(check.id, task);
1452
+ }
1453
+ else if (check.intervalMinutes) {
1454
+ this.scheduleRecurringExecution(check.id, check.intervalMinutes, check.targetSession, check.message);
1455
+ }
1167
1456
  restored++;
1168
1457
  }
1169
1458
  this.logger.info('Restored recurring checks from disk', {
1170
1459
  total: persisted.length,
1171
1460
  restored,
1172
1461
  purgedCompletedTasks: purged,
1462
+ purgedStaleSessions: staleSessionPurged,
1173
1463
  });
1174
1464
  return restored;
1175
1465
  }
@@ -1196,12 +1486,29 @@ export class SchedulerService extends EventEmitter {
1196
1486
  return 0;
1197
1487
  }
1198
1488
  let restored = 0;
1489
+ let staleSessionPurged = 0;
1199
1490
  const now = Date.now();
1200
1491
  for (const check of persisted) {
1201
1492
  // Skip recurring checks that ended up here by mistake
1202
1493
  if (check.isRecurring) {
1203
1494
  continue;
1204
1495
  }
1496
+ // #169: Skip and purge checks from previous sessions
1497
+ if (check.sessionId && check.sessionId !== this.sessionId) {
1498
+ this.logger.info('Purging stale one-time check from previous session', {
1499
+ checkId: check.id,
1500
+ staleSessionId: check.sessionId,
1501
+ currentSessionId: this.sessionId,
1502
+ });
1503
+ this.storageService.deleteOneTimeCheck(check.id).catch(err => {
1504
+ this.logger.error('Failed to delete stale session one-time check', {
1505
+ checkId: check.id,
1506
+ error: err instanceof Error ? err.message : String(err),
1507
+ });
1508
+ });
1509
+ staleSessionPurged++;
1510
+ continue;
1511
+ }
1205
1512
  const scheduledTime = new Date(check.scheduledFor).getTime();
1206
1513
  const remainingMs = scheduledTime - now;
1207
1514
  // If the scheduled time has already passed, discard as stale
@@ -1244,6 +1551,7 @@ export class SchedulerService extends EventEmitter {
1244
1551
  this.logger.info('Restored one-time checks from disk', {
1245
1552
  total: persisted.length,
1246
1553
  restored,
1554
+ purgedStaleSessions: staleSessionPurged,
1247
1555
  });
1248
1556
  return restored;
1249
1557
  }
@@ -1269,12 +1577,17 @@ export class SchedulerService extends EventEmitter {
1269
1577
  for (const msg of this.enhancedMessages.values()) {
1270
1578
  activeSessions.add(msg.sessionName);
1271
1579
  }
1580
+ let deadLetterMessages = 0;
1581
+ for (const messages of this.deadLetterQueue.values()) {
1582
+ deadLetterMessages += messages.length;
1583
+ }
1272
1584
  return {
1273
1585
  oneTimeChecks: this.scheduledChecks.size,
1274
1586
  recurringChecks: this.recurringChecks.size,
1275
1587
  totalActiveSessions: activeSessions.size,
1276
1588
  continuationChecks: this.continuationChecks.size,
1277
1589
  adaptiveChecks: this.adaptiveChecks.size,
1590
+ deadLetterMessages,
1278
1591
  };
1279
1592
  }
1280
1593
  }