crewly 1.2.4 → 1.2.7

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 (298) hide show
  1. package/LICENSE +1 -1
  2. package/config/constants.ts +4 -2
  3. package/config/roles/auditor/prompt.md +84 -0
  4. package/config/roles/orchestrator/prompt.md +62 -7
  5. package/config/runtime_scripts/runtime-config.json +5 -5
  6. package/config/skills/orchestrator/cancel-all-schedules/execute.sh +24 -0
  7. package/config/skills/orchestrator/cancel-all-schedules/instructions.md +23 -0
  8. package/config/skills/orchestrator/cancel-all-schedules/skill.json +17 -0
  9. package/config/skills/orchestrator/list-schedules/execute.sh +19 -0
  10. package/config/skills/orchestrator/list-schedules/instructions.md +24 -0
  11. package/config/skills/orchestrator/list-schedules/skill.json +12 -0
  12. package/dist/backend/backend/src/constants.d.ts +77 -13
  13. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  14. package/dist/backend/backend/src/constants.js +78 -16
  15. package/dist/backend/backend/src/constants.js.map +1 -1
  16. package/dist/backend/backend/src/controllers/auditor/auditor.controller.d.ts +37 -0
  17. package/dist/backend/backend/src/controllers/auditor/auditor.controller.d.ts.map +1 -0
  18. package/dist/backend/backend/src/controllers/auditor/auditor.controller.js +64 -0
  19. package/dist/backend/backend/src/controllers/auditor/auditor.controller.js.map +1 -0
  20. package/dist/backend/backend/src/controllers/auditor/auditor.routes.d.ts +15 -0
  21. package/dist/backend/backend/src/controllers/auditor/auditor.routes.d.ts.map +1 -0
  22. package/dist/backend/backend/src/controllers/auditor/auditor.routes.js +23 -0
  23. package/dist/backend/backend/src/controllers/auditor/auditor.routes.js.map +1 -0
  24. package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.d.ts +23 -0
  25. package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.d.ts.map +1 -0
  26. package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.js +42 -0
  27. package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.js.map +1 -0
  28. package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.d.ts +56 -0
  29. package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.d.ts.map +1 -0
  30. package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.js +173 -0
  31. package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.js.map +1 -0
  32. package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.d.ts +22 -0
  33. package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.d.ts.map +1 -0
  34. package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.js +33 -0
  35. package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.js.map +1 -0
  36. package/dist/backend/backend/src/controllers/cloud/admin/index.d.ts +7 -0
  37. package/dist/backend/backend/src/controllers/cloud/admin/index.d.ts.map +1 -0
  38. package/dist/backend/backend/src/controllers/cloud/admin/index.js +7 -0
  39. package/dist/backend/backend/src/controllers/cloud/admin/index.js.map +1 -0
  40. package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.d.ts +1 -1
  41. package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.js +5 -5
  42. package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.js.map +1 -1
  43. package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -1
  44. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +0 -3
  45. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -1
  46. package/dist/backend/backend/src/controllers/cloud/index.d.ts +0 -5
  47. package/dist/backend/backend/src/controllers/cloud/index.d.ts.map +1 -1
  48. package/dist/backend/backend/src/controllers/cloud/index.js +0 -5
  49. package/dist/backend/backend/src/controllers/cloud/index.js.map +1 -1
  50. package/dist/backend/backend/src/controllers/cloud/relay.controller.d.ts +6 -45
  51. package/dist/backend/backend/src/controllers/cloud/relay.controller.d.ts.map +1 -1
  52. package/dist/backend/backend/src/controllers/cloud/relay.controller.js +6 -165
  53. package/dist/backend/backend/src/controllers/cloud/relay.controller.js.map +1 -1
  54. package/dist/backend/backend/src/controllers/cloud/relay.routes.d.ts +5 -9
  55. package/dist/backend/backend/src/controllers/cloud/relay.routes.d.ts.map +1 -1
  56. package/dist/backend/backend/src/controllers/cloud/relay.routes.js +11 -21
  57. package/dist/backend/backend/src/controllers/cloud/relay.routes.js.map +1 -1
  58. package/dist/backend/backend/src/controllers/cloud/tasks/index.d.ts +5 -2
  59. package/dist/backend/backend/src/controllers/cloud/tasks/index.d.ts.map +1 -1
  60. package/dist/backend/backend/src/controllers/cloud/tasks/index.js +5 -2
  61. package/dist/backend/backend/src/controllers/cloud/tasks/index.js.map +1 -1
  62. package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.d.ts +6 -2
  63. package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.d.ts.map +1 -1
  64. package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js +12 -8
  65. package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js.map +1 -1
  66. package/dist/backend/backend/src/controllers/messaging/messenger.routes.d.ts +7 -0
  67. package/dist/backend/backend/src/controllers/messaging/messenger.routes.d.ts.map +1 -1
  68. package/dist/backend/backend/src/controllers/messaging/messenger.routes.js +64 -3
  69. package/dist/backend/backend/src/controllers/messaging/messenger.routes.js.map +1 -1
  70. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  71. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +32 -4
  72. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  73. package/dist/backend/backend/src/controllers/payment/payment.controller.d.ts +16 -5
  74. package/dist/backend/backend/src/controllers/payment/payment.controller.d.ts.map +1 -1
  75. package/dist/backend/backend/src/controllers/payment/payment.controller.js +6 -6
  76. package/dist/backend/backend/src/controllers/payment/payment.controller.js.map +1 -1
  77. package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts +6 -2
  78. package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts.map +1 -1
  79. package/dist/backend/backend/src/controllers/payment/payment.routes.js +22 -8
  80. package/dist/backend/backend/src/controllers/payment/payment.routes.js.map +1 -1
  81. package/dist/backend/backend/src/controllers/payment/payment.types.d.ts +1 -1
  82. package/dist/backend/backend/src/controllers/payment/payment.types.d.ts.map +1 -1
  83. package/dist/backend/backend/src/controllers/payment/payment.types.js +1 -1
  84. package/dist/backend/backend/src/controllers/payment/payment.types.js.map +1 -1
  85. package/dist/backend/backend/src/controllers/request-types.d.ts +2 -2
  86. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
  87. package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts +19 -0
  88. package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts.map +1 -1
  89. package/dist/backend/backend/src/controllers/system/scheduler.controller.js +51 -0
  90. package/dist/backend/backend/src/controllers/system/scheduler.controller.js.map +1 -1
  91. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  92. package/dist/backend/backend/src/controllers/team/team.controller.js +13 -5
  93. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  94. package/dist/backend/backend/src/controllers/template/template.controller.d.ts.map +1 -1
  95. package/dist/backend/backend/src/controllers/template/template.controller.js +2 -2
  96. package/dist/backend/backend/src/controllers/template/template.controller.js.map +1 -1
  97. package/dist/backend/backend/src/index.d.ts.map +1 -1
  98. package/dist/backend/backend/src/index.js +33 -30
  99. package/dist/backend/backend/src/index.js.map +1 -1
  100. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  101. package/dist/backend/backend/src/routes/api.routes.js +4 -12
  102. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  103. package/dist/backend/backend/src/routes/modules/log-rotation.routes.d.ts +8 -0
  104. package/dist/backend/backend/src/routes/modules/log-rotation.routes.d.ts.map +1 -0
  105. package/dist/backend/backend/src/routes/modules/log-rotation.routes.js +62 -0
  106. package/dist/backend/backend/src/routes/modules/log-rotation.routes.js.map +1 -0
  107. package/dist/backend/backend/src/routes/modules/scheduler.routes.d.ts.map +1 -1
  108. package/dist/backend/backend/src/routes/modules/scheduler.routes.js +2 -0
  109. package/dist/backend/backend/src/routes/modules/scheduler.routes.js.map +1 -1
  110. package/dist/backend/backend/src/scripts/run-log-rotation.d.ts +3 -0
  111. package/dist/backend/backend/src/scripts/run-log-rotation.d.ts.map +1 -0
  112. package/dist/backend/backend/src/scripts/run-log-rotation.js +31 -0
  113. package/dist/backend/backend/src/scripts/run-log-rotation.js.map +1 -0
  114. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +10 -0
  115. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  116. package/dist/backend/backend/src/services/agent/agent-registration.service.js +85 -1
  117. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  118. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts +150 -0
  119. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
  120. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +307 -0
  121. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
  122. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +105 -0
  123. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -0
  124. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +199 -0
  125. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -0
  126. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +68 -0
  127. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +1 -0
  128. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +131 -0
  129. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +1 -0
  130. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +29 -0
  131. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +1 -0
  132. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +229 -0
  133. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +1 -0
  134. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +127 -0
  135. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -0
  136. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +242 -0
  137. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -0
  138. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +95 -0
  139. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
  140. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +130 -0
  141. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
  142. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +14 -0
  143. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +1 -0
  144. package/dist/backend/backend/src/services/agent/crewly-agent/index.js +14 -0
  145. package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +1 -0
  146. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +57 -0
  147. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -0
  148. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +93 -0
  149. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -0
  150. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +13 -0
  151. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +1 -0
  152. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +91 -0
  153. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +1 -0
  154. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +29 -0
  155. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -0
  156. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +519 -0
  157. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -0
  158. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +159 -0
  159. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
  160. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +63 -0
  161. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -0
  162. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +56 -1
  163. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  164. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +273 -215
  165. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  166. package/dist/backend/backend/src/services/agent/runtime-service.factory.js +8 -8
  167. package/dist/backend/backend/src/services/agent/runtime-service.factory.js.map +1 -1
  168. package/dist/backend/backend/src/services/chat/chat.service.d.ts +7 -1
  169. package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
  170. package/dist/backend/backend/src/services/chat/chat.service.js +14 -5
  171. package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
  172. package/dist/backend/backend/src/services/cloud/admin-seed.service.d.ts +18 -0
  173. package/dist/backend/backend/src/services/cloud/admin-seed.service.d.ts.map +1 -0
  174. package/dist/backend/backend/src/services/cloud/admin-seed.service.js +50 -0
  175. package/dist/backend/backend/src/services/cloud/admin-seed.service.js.map +1 -0
  176. package/dist/backend/backend/src/services/cloud/cloud-features.d.ts +19 -0
  177. package/dist/backend/backend/src/services/cloud/cloud-features.d.ts.map +1 -0
  178. package/dist/backend/backend/src/services/cloud/cloud-features.js +23 -0
  179. package/dist/backend/backend/src/services/cloud/cloud-features.js.map +1 -0
  180. package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.d.ts +3 -3
  181. package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.d.ts.map +1 -1
  182. package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.js +10 -6
  183. package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.js.map +1 -1
  184. package/dist/backend/backend/src/services/cloud/mongodb.service.d.ts +45 -0
  185. package/dist/backend/backend/src/services/cloud/mongodb.service.d.ts.map +1 -0
  186. package/dist/backend/backend/src/services/cloud/mongodb.service.js +76 -0
  187. package/dist/backend/backend/src/services/cloud/mongodb.service.js.map +1 -0
  188. package/dist/backend/backend/src/services/cloud/relay-server.service.d.ts +0 -2
  189. package/dist/backend/backend/src/services/cloud/relay-server.service.d.ts.map +1 -1
  190. package/dist/backend/backend/src/services/cloud/relay-server.service.js +7 -36
  191. package/dist/backend/backend/src/services/cloud/relay-server.service.js.map +1 -1
  192. package/dist/backend/backend/src/services/continuation/continuation.service.d.ts.map +1 -1
  193. package/dist/backend/backend/src/services/continuation/continuation.service.js +5 -10
  194. package/dist/backend/backend/src/services/continuation/continuation.service.js.map +1 -1
  195. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts +10 -2
  196. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  197. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +47 -12
  198. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  199. package/dist/backend/backend/src/services/mcp-server.js +1 -1
  200. package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
  201. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts +95 -22
  202. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts.map +1 -1
  203. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js +284 -60
  204. package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js.map +1 -1
  205. package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
  206. package/dist/backend/backend/src/services/messaging/message-queue.service.js +2 -1
  207. package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -1
  208. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  209. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +22 -4
  210. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  211. package/dist/backend/backend/src/services/messaging/response-router.service.d.ts +8 -0
  212. package/dist/backend/backend/src/services/messaging/response-router.service.d.ts.map +1 -1
  213. package/dist/backend/backend/src/services/messaging/response-router.service.js +42 -0
  214. package/dist/backend/backend/src/services/messaging/response-router.service.js.map +1 -1
  215. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -1
  216. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js +6 -0
  217. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -1
  218. package/dist/backend/backend/src/services/payment/stripe.service.d.ts +4 -43
  219. package/dist/backend/backend/src/services/payment/stripe.service.d.ts.map +1 -1
  220. package/dist/backend/backend/src/services/payment/stripe.service.js +56 -180
  221. package/dist/backend/backend/src/services/payment/stripe.service.js.map +1 -1
  222. package/dist/backend/backend/src/services/session/index.d.ts +2 -0
  223. package/dist/backend/backend/src/services/session/index.d.ts.map +1 -1
  224. package/dist/backend/backend/src/services/session/index.js +2 -0
  225. package/dist/backend/backend/src/services/session/index.js.map +1 -1
  226. package/dist/backend/backend/src/services/session/log-rotation.service.d.ts +163 -0
  227. package/dist/backend/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
  228. package/dist/backend/backend/src/services/session/log-rotation.service.js +362 -0
  229. package/dist/backend/backend/src/services/session/log-rotation.service.js.map +1 -0
  230. package/dist/backend/backend/src/services/settings/settings.service.js +1 -1
  231. package/dist/backend/backend/src/services/settings/settings.service.js.map +1 -1
  232. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +11 -0
  233. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  234. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +83 -1
  235. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  236. package/dist/backend/backend/src/services/template/template.service.d.ts +9 -44
  237. package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
  238. package/dist/backend/backend/src/services/template/template.service.js +7 -80
  239. package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
  240. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +35 -0
  241. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  242. package/dist/backend/backend/src/services/workflow/scheduler.service.js +133 -0
  243. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  244. package/dist/backend/backend/src/types/chat.types.d.ts +1 -1
  245. package/dist/backend/backend/src/types/chat.types.d.ts.map +1 -1
  246. package/dist/backend/backend/src/types/chat.types.js +21 -17
  247. package/dist/backend/backend/src/types/chat.types.js.map +1 -1
  248. package/dist/backend/backend/src/types/event-bus.types.d.ts +31 -0
  249. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  250. package/dist/backend/backend/src/types/event-bus.types.js +50 -0
  251. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  252. package/dist/backend/backend/src/types/index.d.ts +1 -1
  253. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  254. package/dist/backend/backend/src/types/messaging.types.d.ts +4 -0
  255. package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
  256. package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
  257. package/dist/backend/backend/src/types/settings.types.d.ts +1 -1
  258. package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
  259. package/dist/backend/backend/src/types/settings.types.js +4 -4
  260. package/dist/backend/backend/src/types/settings.types.js.map +1 -1
  261. package/dist/backend/backend/src/types/team-template.types.d.ts +2 -2
  262. package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
  263. package/dist/backend/backend/src/types/team-template.types.js +1 -1
  264. package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
  265. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +4 -4
  266. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
  267. package/dist/backend/backend/src/websocket/terminal.gateway.js +9 -6
  268. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
  269. package/dist/backend/config/constants.d.ts +4 -2
  270. package/dist/backend/config/constants.d.ts.map +1 -1
  271. package/dist/backend/config/constants.js +4 -2
  272. package/dist/backend/config/constants.js.map +1 -1
  273. package/dist/cli/backend/src/constants.d.ts +77 -13
  274. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  275. package/dist/cli/backend/src/constants.js +78 -16
  276. package/dist/cli/backend/src/constants.js.map +1 -1
  277. package/dist/cli/backend/src/services/mcp-server.js +1 -1
  278. package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
  279. package/dist/cli/backend/src/types/chat.types.d.ts +1 -1
  280. package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -1
  281. package/dist/cli/backend/src/types/chat.types.js +21 -17
  282. package/dist/cli/backend/src/types/chat.types.js.map +1 -1
  283. package/dist/cli/backend/src/types/index.d.ts +1 -1
  284. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  285. package/dist/cli/backend/src/types/settings.types.d.ts +1 -1
  286. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
  287. package/dist/cli/backend/src/types/settings.types.js +4 -4
  288. package/dist/cli/backend/src/types/settings.types.js.map +1 -1
  289. package/dist/cli/config/constants.d.ts +4 -2
  290. package/dist/cli/config/constants.d.ts.map +1 -1
  291. package/dist/cli/config/constants.js +4 -2
  292. package/dist/cli/config/constants.js.map +1 -1
  293. package/frontend/dist/assets/index-5cf8820f.js +4919 -0
  294. package/frontend/dist/assets/index-dee3a3a9.css +33 -0
  295. package/frontend/dist/index.html +2 -2
  296. package/package.json +15 -9
  297. package/frontend/dist/assets/index-510ab719.css +0 -33
  298. package/frontend/dist/assets/index-935cd846.js +0 -4961
@@ -8,15 +8,8 @@
8
8
  * methods return graceful errors instead of crashing, allowing the
9
9
  * rest of the backend to run without Stripe credentials.
10
10
  *
11
- * Subscription state is persisted locally via a file-based store so
12
- * that GET /subscription queries do not require a Stripe API call.
13
- *
14
11
  * @module services/payment/stripe.service
15
12
  */
16
- import Stripe from 'stripe';
17
- import { readFile, writeFile, mkdir } from 'node:fs/promises';
18
- import { join } from 'node:path';
19
- import { homedir } from 'node:os';
20
13
  import { LoggerService } from '../core/logger.service.js';
21
14
  import { isHandledWebhookEvent } from '../../controllers/payment/payment.types.js';
22
15
  // ---------------------------------------------------------------------------
@@ -26,31 +19,21 @@ import { isHandledWebhookEvent } from '../../controllers/payment/payment.types.j
26
19
  const STRIPE_SECRET_KEY_ENV = 'STRIPE_SECRET_KEY';
27
20
  /** Environment variable name for the Stripe webhook signing secret. */
28
21
  const STRIPE_WEBHOOK_SECRET_ENV = 'STRIPE_WEBHOOK_SECRET';
29
- /** Stripe API version to pin. */
30
- const STRIPE_API_VERSION = '2025-04-30.basil';
31
- /** Storage directory for subscription state. */
32
- const SUBSCRIPTION_STORAGE_DIR = join(homedir(), '.crewly', 'cloud', 'subscriptions');
33
- /** Subscription state file. */
34
- const SUBSCRIPTION_FILE = 'subscriptions.json';
35
22
  /**
36
23
  * Stripe Price ID mapping.
37
24
  *
38
- * Values come from environment variables when set, otherwise
39
- * fall back to descriptive placeholder IDs for development.
25
+ * In production these would come from env vars or a config table.
26
+ * For now they are placeholders that show the expected shape.
40
27
  */
41
28
  const PRICE_IDS = {
42
29
  free: { month: '', year: '' },
43
- solo: {
44
- month: process.env['STRIPE_SOLO_MONTHLY_PRICE_ID'] || 'price_solo_monthly',
45
- year: process.env['STRIPE_SOLO_YEARLY_PRICE_ID'] || 'price_solo_yearly',
46
- },
47
- team: {
48
- month: process.env['STRIPE_TEAM_MONTHLY_PRICE_ID'] || 'price_team_monthly',
49
- year: process.env['STRIPE_TEAM_YEARLY_PRICE_ID'] || 'price_team_yearly',
30
+ pro: {
31
+ month: process.env['STRIPE_PRO_MONTHLY_PRICE_ID'] || 'price_pro_monthly',
32
+ year: process.env['STRIPE_PRO_YEARLY_PRICE_ID'] || 'price_pro_yearly',
50
33
  },
51
- full: {
52
- month: process.env['STRIPE_FULL_MONTHLY_PRICE_ID'] || 'price_full_monthly',
53
- year: process.env['STRIPE_FULL_YEARLY_PRICE_ID'] || 'price_full_yearly',
34
+ enterprise: {
35
+ month: process.env['STRIPE_ENT_MONTHLY_PRICE_ID'] || 'price_enterprise_monthly',
36
+ year: process.env['STRIPE_ENT_YEARLY_PRICE_ID'] || 'price_enterprise_yearly',
54
37
  },
55
38
  };
56
39
  // ---------------------------------------------------------------------------
@@ -67,17 +50,11 @@ export class StripeService {
67
50
  logger;
68
51
  secretKey;
69
52
  webhookSecret;
70
- stripe = null;
71
- subscriptions = new Map();
72
- subscriptionsLoaded = false;
73
53
  constructor() {
74
54
  this.logger = LoggerService.getInstance().createComponentLogger('StripeService');
75
55
  this.secretKey = process.env[STRIPE_SECRET_KEY_ENV];
76
56
  this.webhookSecret = process.env[STRIPE_WEBHOOK_SECRET_ENV];
77
- if (this.secretKey) {
78
- this.stripe = new Stripe(this.secretKey, { apiVersion: STRIPE_API_VERSION });
79
- }
80
- else {
57
+ if (!this.secretKey) {
81
58
  this.logger.warn('STRIPE_SECRET_KEY not set — payment features are disabled');
82
59
  }
83
60
  }
@@ -107,75 +84,6 @@ export class StripeService {
107
84
  return !!this.secretKey;
108
85
  }
109
86
  // -----------------------------------------------------------------------
110
- // Subscription Store
111
- // -----------------------------------------------------------------------
112
- /**
113
- * Load subscription state from disk. Idempotent.
114
- */
115
- async loadSubscriptions() {
116
- if (this.subscriptionsLoaded)
117
- return;
118
- try {
119
- await mkdir(SUBSCRIPTION_STORAGE_DIR, { recursive: true });
120
- const filePath = join(SUBSCRIPTION_STORAGE_DIR, SUBSCRIPTION_FILE);
121
- const raw = await readFile(filePath, 'utf-8').catch(() => '[]');
122
- const parsed = JSON.parse(raw);
123
- for (const sub of parsed) {
124
- this.subscriptions.set(sub.userId, sub);
125
- }
126
- }
127
- catch {
128
- this.subscriptions = new Map();
129
- }
130
- this.subscriptionsLoaded = true;
131
- }
132
- /**
133
- * Persist subscription state to disk.
134
- */
135
- async persistSubscriptions() {
136
- try {
137
- await mkdir(SUBSCRIPTION_STORAGE_DIR, { recursive: true });
138
- const filePath = join(SUBSCRIPTION_STORAGE_DIR, SUBSCRIPTION_FILE);
139
- const data = JSON.stringify(Array.from(this.subscriptions.values()), null, 2);
140
- await writeFile(filePath, data, 'utf-8');
141
- }
142
- catch (err) {
143
- this.logger.error('Failed to persist subscriptions', { error: String(err) });
144
- }
145
- }
146
- /**
147
- * Update or create a subscription record from a webhook event.
148
- *
149
- * @param payload - Processed webhook payload
150
- */
151
- async upsertSubscriptionFromWebhook(payload) {
152
- if (!payload.userId)
153
- return;
154
- await this.loadSubscriptions();
155
- const existing = this.subscriptions.get(payload.userId);
156
- const now = new Date().toISOString();
157
- if (payload.type === 'customer.subscription.deleted') {
158
- if (existing) {
159
- existing.status = 'canceled';
160
- existing.updatedAt = now;
161
- }
162
- }
163
- else {
164
- const sub = {
165
- userId: payload.userId,
166
- customerId: payload.customerId || existing?.customerId || '',
167
- subscriptionId: payload.subscriptionId || existing?.subscriptionId || '',
168
- planId: payload.planId || existing?.planId || 'free',
169
- status: payload.type === 'invoice.payment_failed' ? 'past_due' : 'active',
170
- currentPeriodEnd: existing?.currentPeriodEnd || null,
171
- cancelAtPeriodEnd: existing?.cancelAtPeriodEnd || false,
172
- updatedAt: now,
173
- };
174
- this.subscriptions.set(payload.userId, sub);
175
- }
176
- await this.persistSubscriptions();
177
- }
178
- // -----------------------------------------------------------------------
179
87
  // Checkout
180
88
  // -----------------------------------------------------------------------
181
89
  /**
@@ -189,7 +97,7 @@ export class StripeService {
189
97
  * @returns Result containing the checkout URL and session ID
190
98
  */
191
99
  async createCheckoutSession(userId, planId, interval, successUrl, cancelUrl) {
192
- if (!this.isConfigured() || !this.stripe) {
100
+ if (!this.isConfigured()) {
193
101
  return { success: false, message: 'Stripe is not configured. Set STRIPE_SECRET_KEY to enable payments.' };
194
102
  }
195
103
  if (planId === 'free') {
@@ -200,24 +108,18 @@ export class StripeService {
200
108
  return { success: false, message: `No price configured for ${planId}/${interval}` };
201
109
  }
202
110
  try {
111
+ // In production this calls:
112
+ // const stripe = new Stripe(this.secretKey);
113
+ // const session = await stripe.checkout.sessions.create({ ... });
114
+ //
115
+ // For now, return a placeholder that shows the expected shape:
203
116
  this.logger.info(`Creating checkout session: user=${userId} plan=${planId} interval=${interval}`);
204
- const session = await this.stripe.checkout.sessions.create({
205
- mode: 'subscription',
206
- payment_method_types: ['card'],
207
- line_items: [{ price: priceId, quantity: 1 }],
208
- success_url: successUrl,
209
- cancel_url: cancelUrl,
210
- metadata: { userId, planId },
211
- subscription_data: {
212
- metadata: { userId, planId },
213
- },
214
- });
215
117
  return {
216
118
  success: true,
217
119
  message: 'Checkout session created',
218
120
  data: {
219
- checkoutUrl: session.url || '',
220
- sessionId: session.id,
121
+ checkoutUrl: `https://checkout.stripe.com/pay/placeholder_${planId}_${interval}`,
122
+ sessionId: `cs_placeholder_${Date.now()}`,
221
123
  },
222
124
  };
223
125
  }
@@ -233,61 +135,44 @@ export class StripeService {
233
135
  /**
234
136
  * Get the current subscription for a user.
235
137
  *
236
- * First checks local subscription store (populated by webhooks),
237
- * then falls back to Stripe customer search if configured.
138
+ * Queries the Supabase `licenses` table (or Stripe customer lookup)
139
+ * to determine the user's active subscription.
238
140
  *
239
141
  * @param userId - Supabase user ID
240
142
  * @returns Subscription info
241
143
  */
242
144
  async getSubscription(userId) {
243
- const freeDefaults = {
244
- active: false,
245
- planId: 'free',
246
- status: null,
247
- currentPeriodEnd: null,
248
- cancelAtPeriodEnd: false,
249
- };
250
145
  if (!this.isConfigured()) {
251
146
  return {
252
147
  success: true,
253
148
  message: 'Stripe not configured — returning free plan defaults',
254
- data: freeDefaults,
149
+ data: {
150
+ active: false,
151
+ planId: 'free',
152
+ status: null,
153
+ currentPeriodEnd: null,
154
+ cancelAtPeriodEnd: false,
155
+ },
255
156
  };
256
157
  }
257
158
  try {
258
- await this.loadSubscriptions();
259
- const stored = this.subscriptions.get(userId);
260
- if (stored && stored.status === 'active') {
261
- return {
262
- success: true,
263
- message: 'Subscription retrieved from local store',
264
- data: {
265
- active: true,
266
- planId: stored.planId,
267
- status: stored.status,
268
- currentPeriodEnd: stored.currentPeriodEnd,
269
- cancelAtPeriodEnd: stored.cancelAtPeriodEnd,
270
- },
271
- };
272
- }
273
- if (stored) {
274
- return {
275
- success: true,
276
- message: 'Subscription retrieved from local store',
277
- data: {
278
- active: stored.status === 'trialing',
279
- planId: stored.planId,
280
- status: stored.status,
281
- currentPeriodEnd: stored.currentPeriodEnd,
282
- cancelAtPeriodEnd: stored.cancelAtPeriodEnd,
283
- },
284
- };
285
- }
286
- this.logger.info(`No stored subscription for user=${userId}, returning free defaults`);
159
+ // In production this calls:
160
+ // const stripe = new Stripe(this.secretKey);
161
+ // const customers = await stripe.customers.search({ query: `metadata['userId']:'${userId}'` });
162
+ // const subscription = await stripe.subscriptions.list({ customer: customers.data[0].id });
163
+ //
164
+ // For now, return free plan defaults:
165
+ this.logger.info(`Getting subscription for user=${userId}`);
287
166
  return {
288
167
  success: true,
289
- message: 'No subscription found',
290
- data: freeDefaults,
168
+ message: 'Subscription retrieved',
169
+ data: {
170
+ active: false,
171
+ planId: 'free',
172
+ status: null,
173
+ currentPeriodEnd: null,
174
+ cancelAtPeriodEnd: false,
175
+ },
291
176
  };
292
177
  }
293
178
  catch (error) {
@@ -307,25 +192,20 @@ export class StripeService {
307
192
  * @returns Portal URL
308
193
  */
309
194
  async createPortalSession(userId, returnUrl) {
310
- if (!this.isConfigured() || !this.stripe) {
195
+ if (!this.isConfigured()) {
311
196
  return { success: false, message: 'Stripe is not configured. Set STRIPE_SECRET_KEY to enable payments.' };
312
197
  }
313
198
  try {
314
- await this.loadSubscriptions();
315
- const stored = this.subscriptions.get(userId);
316
- if (!stored?.customerId) {
317
- return { success: false, message: 'No Stripe customer found for this user. Subscribe to a plan first.' };
318
- }
199
+ // In production this calls:
200
+ // const stripe = new Stripe(this.secretKey);
201
+ // const session = await stripe.billingPortal.sessions.create({ customer, return_url });
202
+ //
319
203
  this.logger.info(`Creating portal session for user=${userId}`);
320
- const session = await this.stripe.billingPortal.sessions.create({
321
- customer: stored.customerId,
322
- return_url: returnUrl,
323
- });
324
204
  return {
325
205
  success: true,
326
206
  message: 'Portal session created',
327
207
  data: {
328
- portalUrl: session.url,
208
+ portalUrl: `https://billing.stripe.com/session/placeholder_${Date.now()}`,
329
209
  },
330
210
  };
331
211
  }
@@ -341,8 +221,8 @@ export class StripeService {
341
221
  /**
342
222
  * Verify and process a Stripe webhook event.
343
223
  *
344
- * Uses Stripe SDK signature verification when configured,
345
- * then extracts relevant data from the event payload.
224
+ * Validates the webhook signature, then extracts relevant data
225
+ * from the event payload.
346
226
  *
347
227
  * @param rawBody - Raw request body (Buffer)
348
228
  * @param signature - Stripe-Signature header value
@@ -359,15 +239,13 @@ export class StripeService {
359
239
  return { success: false, message: 'Missing Stripe-Signature header' };
360
240
  }
361
241
  try {
362
- let eventData;
363
- // Use Stripe SDK signature verification when available
364
- if (this.stripe) {
365
- const event = this.stripe.webhooks.constructEvent(rawBody, signature, this.webhookSecret);
366
- eventData = event;
367
- }
368
- else {
369
- eventData = JSON.parse(rawBody.toString());
370
- }
242
+ // TODO(security): Enable Stripe signature verification before production deployment.
243
+ // When the Stripe SDK is available, replace the JSON.parse below with:
244
+ // const stripe = new Stripe(this.secretKey);
245
+ // const event = stripe.webhooks.constructEvent(rawBody, signature, this.webhookSecret);
246
+ // This prevents forged webhook events from unauthorized sources.
247
+ this.logger.warn('Webhook signature verification not yet implemented — accepting unverified events');
248
+ const eventData = JSON.parse(rawBody.toString());
371
249
  const eventType = eventData.type || '';
372
250
  if (!isHandledWebhookEvent(eventType)) {
373
251
  return {
@@ -384,8 +262,6 @@ export class StripeService {
384
262
  subscriptionId: obj['subscription'] || obj['id'] || null,
385
263
  planId: obj['metadata']?.['planId'] || null,
386
264
  };
387
- // Persist subscription state change
388
- await this.upsertSubscriptionFromWebhook(payload);
389
265
  this.logger.info(`Webhook processed: type=${eventType} eventId=${payload.eventId}`);
390
266
  return {
391
267
  success: true,
@@ -1 +1 @@
1
- {"version":3,"file":"stripe.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/payment/stripe.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stripe.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/payment/stripe.service.ts"],"names":[],"mappings":"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"}
@@ -40,4 +40,6 @@ export { PtySession, PtySessionBackend, PtyTerminalBuffer } from './pty/index.js
40
40
  export { SessionCommandHelper, createSessionCommandHelper, KEY_CODES, } from './session-command-helper.js';
41
41
  export { SessionStatePersistence, getSessionStatePersistence, resetSessionStatePersistence, } from './session-state-persistence.js';
42
42
  export type { PersistedSessionInfo, PersistedState } from './session-state-persistence.js';
43
+ export { LogRotationService } from './log-rotation.service.js';
44
+ export type { LogFileInfo, RotationRunResult, LogRotationStatus, } from './log-rotation.service.js';
43
45
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,YAAY,EACX,QAAQ,EACR,eAAe,EACf,cAAc,EACd,kBAAkB,GAClB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACN,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,GACb,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACN,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,GAC3B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGlF,OAAO,EACN,oBAAoB,EACpB,0BAA0B,EAC1B,SAAS,GACT,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,gCAAgC,CAAC;AAExC,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,YAAY,EACX,QAAQ,EACR,eAAe,EACf,cAAc,EACd,kBAAkB,GAClB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACN,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,GACb,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACN,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,GAC3B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGlF,OAAO,EACN,oBAAoB,EACpB,0BAA0B,EAC1B,SAAS,GACT,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,gCAAgC,CAAC;AAExC,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAG3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,YAAY,EACX,WAAW,EACX,iBAAiB,EACjB,iBAAiB,GACjB,MAAM,2BAA2B,CAAC"}
@@ -43,4 +43,6 @@ export { PtySession, PtySessionBackend, PtyTerminalBuffer } from './pty/index.js
43
43
  export { SessionCommandHelper, createSessionCommandHelper, KEY_CODES, } from './session-command-helper.js';
44
44
  // Re-export session state persistence
45
45
  export { SessionStatePersistence, getSessionStatePersistence, resetSessionStatePersistence, } from './session-state-persistence.js';
46
+ // Re-export log rotation service
47
+ export { LogRotationService } from './log-rotation.service.js';
46
48
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAUH,sBAAsB;AACtB,OAAO,EACN,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,GACb,MAAM,gCAAgC,CAAC;AAExC,8BAA8B;AAC9B,OAAO,EACN,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,GAC3B,MAAM,8BAA8B,CAAC;AAEtC,gCAAgC;AAChC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAElF,mCAAmC;AACnC,OAAO,EACN,oBAAoB,EACpB,0BAA0B,EAC1B,SAAS,GACT,MAAM,6BAA6B,CAAC;AAErC,sCAAsC;AACtC,OAAO,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAUH,sBAAsB;AACtB,OAAO,EACN,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,GACb,MAAM,gCAAgC,CAAC;AAExC,8BAA8B;AAC9B,OAAO,EACN,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,GAC3B,MAAM,8BAA8B,CAAC;AAEtC,gCAAgC;AAChC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAElF,mCAAmC;AACnC,OAAO,EACN,oBAAoB,EACpB,0BAA0B,EAC1B,SAAS,GACT,MAAM,6BAA6B,CAAC;AAErC,sCAAsC;AACtC,OAAO,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,gCAAgC,CAAC;AAIxC,iCAAiC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Status information for a single log file
3
+ */
4
+ export interface LogFileInfo {
5
+ /** File name (e.g., crewly-orc.log) */
6
+ name: string;
7
+ /** Full absolute path */
8
+ path: string;
9
+ /** File size in bytes */
10
+ sizeBytes: number;
11
+ /** Whether this log belongs to an active session */
12
+ isOrphan: boolean;
13
+ }
14
+ /**
15
+ * Result of a single rotation run
16
+ */
17
+ export interface RotationRunResult {
18
+ /** Timestamp of the run */
19
+ timestamp: Date;
20
+ /** Number of files scanned */
21
+ filesScanned: number;
22
+ /** Number of files truncated */
23
+ filesTruncated: number;
24
+ /** Number of archives created */
25
+ archivesCreated: number;
26
+ /** Number of stale archives deleted */
27
+ staleArchivesDeleted: number;
28
+ /** Bytes freed by truncation */
29
+ bytesFreed: number;
30
+ /** Errors encountered during rotation */
31
+ errors: string[];
32
+ }
33
+ /**
34
+ * Overall status of the log rotation service
35
+ */
36
+ export interface LogRotationStatus {
37
+ /** Whether the service is running */
38
+ isRunning: boolean;
39
+ /** Last rotation run result */
40
+ lastRun: RotationRunResult | null;
41
+ /** Current log files and their sizes */
42
+ currentFiles: LogFileInfo[];
43
+ /** Total size of all log files in bytes */
44
+ totalSizeBytes: number;
45
+ }
46
+ /**
47
+ * Service that manages session log file sizes through periodic rotation.
48
+ *
49
+ * Scans ~/.crewly/logs/sessions/ for .log files, truncates oversized files
50
+ * (keeping the tail), optionally archives old content as .gz, and cleans up
51
+ * stale archives. Orphan logs (no matching active session) are truncated
52
+ * more aggressively.
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const service = LogRotationService.getInstance();
57
+ * service.start(activeSessionNames);
58
+ * // ... later
59
+ * service.stop();
60
+ * ```
61
+ */
62
+ export declare class LogRotationService {
63
+ private static instance;
64
+ private logger;
65
+ private timer;
66
+ private isRunning;
67
+ private lastRunResult;
68
+ private activeSessionNames;
69
+ private readonly sessionsDir;
70
+ private readonly archiveDir;
71
+ private constructor();
72
+ /**
73
+ * Returns the singleton instance of LogRotationService
74
+ * @returns The shared LogRotationService instance
75
+ */
76
+ static getInstance(): LogRotationService;
77
+ /**
78
+ * Resets the singleton instance (for testing only)
79
+ */
80
+ static resetInstance(): void;
81
+ /**
82
+ * Starts the log rotation service. Runs an immediate rotation, then
83
+ * schedules periodic rotations at the configured interval.
84
+ *
85
+ * @param activeSessionNames - Names of currently active sessions (used for orphan detection)
86
+ */
87
+ start(activeSessionNames?: string[]): Promise<void>;
88
+ /**
89
+ * Stops the log rotation service and clears the periodic timer.
90
+ */
91
+ stop(): void;
92
+ /**
93
+ * Updates the set of active session names (for orphan detection).
94
+ * Call this when sessions start or stop.
95
+ *
96
+ * @param names - Current active session names
97
+ */
98
+ updateActiveSessionNames(names: string[]): void;
99
+ /**
100
+ * Executes a single rotation pass: scan, archive, truncate, and clean archives.
101
+ *
102
+ * @returns Result of the rotation run
103
+ */
104
+ runRotation(): Promise<RotationRunResult>;
105
+ /**
106
+ * Returns the current status of all log files and the service.
107
+ *
108
+ * @returns Status including file sizes and last run info
109
+ */
110
+ getStatus(): Promise<LogRotationStatus>;
111
+ /**
112
+ * Scans the sessions log directory for .log files and returns their info.
113
+ *
114
+ * @returns Array of log file information
115
+ */
116
+ private scanLogFiles;
117
+ /**
118
+ * Checks if a session name matches any active session.
119
+ * A session is active if its name is in the active set.
120
+ *
121
+ * @param sessionName - The session name derived from the log file name
122
+ * @returns true if the session is currently active
123
+ */
124
+ private isActiveSession;
125
+ /**
126
+ * Rotates a single log file: optionally archives, then truncates to keep
127
+ * only the tail portion up to maxSize.
128
+ *
129
+ * Uses atomic write (temp file + rename) to prevent data corruption.
130
+ *
131
+ * @param file - Log file information
132
+ * @param maxSize - Maximum allowed size in bytes
133
+ * @param result - Rotation result to update archive count
134
+ * @returns Number of bytes freed
135
+ */
136
+ private rotateFile;
137
+ /**
138
+ * Compresses a log file to the archive directory as a gzipped file.
139
+ *
140
+ * @param file - Log file to archive
141
+ */
142
+ private archiveFile;
143
+ /**
144
+ * Truncates a file to keep only the last `keepBytes` bytes.
145
+ * Uses atomic write: reads tail → writes to temp → renames over original.
146
+ *
147
+ * @param filePath - Path to the file to truncate
148
+ * @param keepBytes - Number of bytes to keep from the end
149
+ */
150
+ private truncateFile;
151
+ /**
152
+ * Deletes archive files older than the configured retention period.
153
+ *
154
+ * @param result - Rotation result to record errors
155
+ * @returns Number of stale archives deleted
156
+ */
157
+ private cleanStaleArchives;
158
+ /** @internal */
159
+ getSessionsDir(): string;
160
+ /** @internal */
161
+ getArchiveDir(): string;
162
+ }
163
+ //# sourceMappingURL=log-rotation.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-rotation.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/log-rotation.service.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,2BAA2B;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,wCAAwC;IACxC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,2CAA2C;IAC3C,cAAc,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,kBAAkB,CAA0B;IAEpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,OAAO;IAOP;;;OAGG;IACH,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAO5B;;;;;OAKG;IACG,KAAK,CAAC,kBAAkB,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC7D;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;;;;OAKG;IACH,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAI/C;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA+D/C;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAkB7C;;;;OAIG;YACW,YAAY;IA6B1B;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAKvB;;;;;;;;;;OAUG;YACW,UAAU;IAqBxB;;;;OAIG;YACW,WAAW;IAiBzB;;;;;;OAMG;YACW,YAAY;IA0B1B;;;;;OAKG;YACW,kBAAkB;IAgChC,gBAAgB;IAChB,cAAc,IAAI,MAAM;IACxB,gBAAgB;IAChB,aAAa,IAAI,MAAM;CACvB"}