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
@@ -0,0 +1,362 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import { createGzip } from 'zlib';
5
+ import { pipeline } from 'stream/promises';
6
+ import { createReadStream, createWriteStream } from 'fs';
7
+ import { LOG_ROTATION_CONSTANTS, CREWLY_CONSTANTS } from '../../constants.js';
8
+ import { LoggerService } from '../core/logger.service.js';
9
+ /**
10
+ * Service that manages session log file sizes through periodic rotation.
11
+ *
12
+ * Scans ~/.crewly/logs/sessions/ for .log files, truncates oversized files
13
+ * (keeping the tail), optionally archives old content as .gz, and cleans up
14
+ * stale archives. Orphan logs (no matching active session) are truncated
15
+ * more aggressively.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const service = LogRotationService.getInstance();
20
+ * service.start(activeSessionNames);
21
+ * // ... later
22
+ * service.stop();
23
+ * ```
24
+ */
25
+ export class LogRotationService {
26
+ static instance = null;
27
+ logger;
28
+ timer = null;
29
+ isRunning = false;
30
+ lastRunResult = null;
31
+ activeSessionNames = new Set();
32
+ sessionsDir;
33
+ archiveDir;
34
+ constructor() {
35
+ this.logger = LoggerService.getInstance().createComponentLogger('LogRotationService');
36
+ const crewlyHome = path.join(os.homedir(), CREWLY_CONSTANTS.PATHS.CREWLY_HOME);
37
+ this.sessionsDir = path.join(crewlyHome, LOG_ROTATION_CONSTANTS.LOGS_DIR, LOG_ROTATION_CONSTANTS.SESSIONS_LOG_DIR);
38
+ this.archiveDir = path.join(crewlyHome, LOG_ROTATION_CONSTANTS.LOGS_DIR, LOG_ROTATION_CONSTANTS.ARCHIVE_DIR);
39
+ }
40
+ /**
41
+ * Returns the singleton instance of LogRotationService
42
+ * @returns The shared LogRotationService instance
43
+ */
44
+ static getInstance() {
45
+ if (!LogRotationService.instance) {
46
+ LogRotationService.instance = new LogRotationService();
47
+ }
48
+ return LogRotationService.instance;
49
+ }
50
+ /**
51
+ * Resets the singleton instance (for testing only)
52
+ */
53
+ static resetInstance() {
54
+ if (LogRotationService.instance) {
55
+ LogRotationService.instance.stop();
56
+ }
57
+ LogRotationService.instance = null;
58
+ }
59
+ /**
60
+ * Starts the log rotation service. Runs an immediate rotation, then
61
+ * schedules periodic rotations at the configured interval.
62
+ *
63
+ * @param activeSessionNames - Names of currently active sessions (used for orphan detection)
64
+ */
65
+ async start(activeSessionNames = []) {
66
+ if (this.isRunning) {
67
+ this.logger.warn('LogRotationService already running');
68
+ return;
69
+ }
70
+ this.isRunning = true;
71
+ this.activeSessionNames = new Set(activeSessionNames);
72
+ this.logger.info('LogRotationService starting', {
73
+ sessionsDir: this.sessionsDir,
74
+ archiveDir: this.archiveDir,
75
+ maxLogSize: LOG_ROTATION_CONSTANTS.MAX_LOG_SIZE_BYTES,
76
+ orphanMaxSize: LOG_ROTATION_CONSTANTS.ORPHAN_LOG_MAX_SIZE_BYTES,
77
+ intervalMs: LOG_ROTATION_CONSTANTS.LOG_ROTATION_INTERVAL_MS,
78
+ });
79
+ // Run immediately on start
80
+ try {
81
+ await this.runRotation();
82
+ }
83
+ catch (error) {
84
+ this.logger.error('Initial rotation failed', {
85
+ error: error instanceof Error ? error.message : String(error),
86
+ });
87
+ }
88
+ // Schedule periodic runs
89
+ this.timer = setInterval(async () => {
90
+ try {
91
+ await this.runRotation();
92
+ }
93
+ catch (error) {
94
+ this.logger.error('Scheduled rotation failed', {
95
+ error: error instanceof Error ? error.message : String(error),
96
+ });
97
+ }
98
+ }, LOG_ROTATION_CONSTANTS.LOG_ROTATION_INTERVAL_MS);
99
+ }
100
+ /**
101
+ * Stops the log rotation service and clears the periodic timer.
102
+ */
103
+ stop() {
104
+ if (this.timer) {
105
+ clearInterval(this.timer);
106
+ this.timer = null;
107
+ }
108
+ this.isRunning = false;
109
+ this.logger.info('LogRotationService stopped');
110
+ }
111
+ /**
112
+ * Updates the set of active session names (for orphan detection).
113
+ * Call this when sessions start or stop.
114
+ *
115
+ * @param names - Current active session names
116
+ */
117
+ updateActiveSessionNames(names) {
118
+ this.activeSessionNames = new Set(names);
119
+ }
120
+ /**
121
+ * Executes a single rotation pass: scan, archive, truncate, and clean archives.
122
+ *
123
+ * @returns Result of the rotation run
124
+ */
125
+ async runRotation() {
126
+ const result = {
127
+ timestamp: new Date(),
128
+ filesScanned: 0,
129
+ filesTruncated: 0,
130
+ archivesCreated: 0,
131
+ staleArchivesDeleted: 0,
132
+ bytesFreed: 0,
133
+ errors: [],
134
+ };
135
+ try {
136
+ // Ensure directories exist
137
+ await fs.mkdir(this.sessionsDir, { recursive: true });
138
+ await fs.mkdir(this.archiveDir, { recursive: true });
139
+ // Scan log files
140
+ const logFiles = await this.scanLogFiles();
141
+ result.filesScanned = logFiles.length;
142
+ // Process each file
143
+ for (const file of logFiles) {
144
+ const maxSize = file.isOrphan
145
+ ? LOG_ROTATION_CONSTANTS.ORPHAN_LOG_MAX_SIZE_BYTES
146
+ : LOG_ROTATION_CONSTANTS.MAX_LOG_SIZE_BYTES;
147
+ if (file.sizeBytes > maxSize) {
148
+ try {
149
+ const freed = await this.rotateFile(file, maxSize, result);
150
+ result.bytesFreed += freed;
151
+ result.filesTruncated++;
152
+ }
153
+ catch (error) {
154
+ const msg = `Failed to rotate ${file.name}: ${error instanceof Error ? error.message : String(error)}`;
155
+ result.errors.push(msg);
156
+ this.logger.error(msg);
157
+ }
158
+ }
159
+ }
160
+ // Clean stale archives
161
+ const staleDeleted = await this.cleanStaleArchives(result);
162
+ result.staleArchivesDeleted = staleDeleted;
163
+ }
164
+ catch (error) {
165
+ const msg = `Rotation run error: ${error instanceof Error ? error.message : String(error)}`;
166
+ result.errors.push(msg);
167
+ this.logger.error(msg);
168
+ }
169
+ this.lastRunResult = result;
170
+ this.logger.info('Rotation complete', {
171
+ filesScanned: result.filesScanned,
172
+ filesTruncated: result.filesTruncated,
173
+ archivesCreated: result.archivesCreated,
174
+ staleArchivesDeleted: result.staleArchivesDeleted,
175
+ bytesFreedMB: Math.round(result.bytesFreed / (1024 * 1024) * 100) / 100,
176
+ errors: result.errors.length,
177
+ });
178
+ return result;
179
+ }
180
+ /**
181
+ * Returns the current status of all log files and the service.
182
+ *
183
+ * @returns Status including file sizes and last run info
184
+ */
185
+ async getStatus() {
186
+ let currentFiles = [];
187
+ try {
188
+ currentFiles = await this.scanLogFiles();
189
+ }
190
+ catch {
191
+ // Directory may not exist yet
192
+ }
193
+ const totalSizeBytes = currentFiles.reduce((sum, f) => sum + f.sizeBytes, 0);
194
+ return {
195
+ isRunning: this.isRunning,
196
+ lastRun: this.lastRunResult,
197
+ currentFiles,
198
+ totalSizeBytes,
199
+ };
200
+ }
201
+ /**
202
+ * Scans the sessions log directory for .log files and returns their info.
203
+ *
204
+ * @returns Array of log file information
205
+ */
206
+ async scanLogFiles() {
207
+ const entries = await fs.readdir(this.sessionsDir);
208
+ const logFiles = [];
209
+ for (const entry of entries) {
210
+ if (!entry.endsWith('.log'))
211
+ continue;
212
+ const filePath = path.join(this.sessionsDir, entry);
213
+ try {
214
+ const stat = await fs.stat(filePath);
215
+ if (!stat.isFile())
216
+ continue;
217
+ const sessionName = entry.replace(/\.log$/, '');
218
+ const isOrphan = !this.isActiveSession(sessionName);
219
+ logFiles.push({
220
+ name: entry,
221
+ path: filePath,
222
+ sizeBytes: stat.size,
223
+ isOrphan,
224
+ });
225
+ }
226
+ catch {
227
+ // File may have been removed between readdir and stat
228
+ }
229
+ }
230
+ return logFiles;
231
+ }
232
+ /**
233
+ * Checks if a session name matches any active session.
234
+ * A session is active if its name is in the active set.
235
+ *
236
+ * @param sessionName - The session name derived from the log file name
237
+ * @returns true if the session is currently active
238
+ */
239
+ isActiveSession(sessionName) {
240
+ if (this.activeSessionNames.size === 0)
241
+ return true; // If no active sessions provided, treat all as active
242
+ return this.activeSessionNames.has(sessionName);
243
+ }
244
+ /**
245
+ * Rotates a single log file: optionally archives, then truncates to keep
246
+ * only the tail portion up to maxSize.
247
+ *
248
+ * Uses atomic write (temp file + rename) to prevent data corruption.
249
+ *
250
+ * @param file - Log file information
251
+ * @param maxSize - Maximum allowed size in bytes
252
+ * @param result - Rotation result to update archive count
253
+ * @returns Number of bytes freed
254
+ */
255
+ async rotateFile(file, maxSize, result) {
256
+ const originalSize = file.sizeBytes;
257
+ // Archive before truncating (if enabled)
258
+ if (LOG_ROTATION_CONSTANTS.LOG_ROTATION_ARCHIVE_ENABLED) {
259
+ try {
260
+ await this.archiveFile(file);
261
+ result.archivesCreated++;
262
+ }
263
+ catch (error) {
264
+ this.logger.warn(`Archive failed for ${file.name}, proceeding with truncation`, {
265
+ error: error instanceof Error ? error.message : String(error),
266
+ });
267
+ }
268
+ }
269
+ // Truncate: keep only the last maxSize bytes
270
+ await this.truncateFile(file.path, maxSize);
271
+ return originalSize - maxSize;
272
+ }
273
+ /**
274
+ * Compresses a log file to the archive directory as a gzipped file.
275
+ *
276
+ * @param file - Log file to archive
277
+ */
278
+ async archiveFile(file) {
279
+ const dateStr = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
280
+ const sessionName = file.name.replace(/\.log$/, '');
281
+ const archiveName = `${sessionName}-${dateStr}.gz`;
282
+ const archivePath = path.join(this.archiveDir, archiveName);
283
+ const source = createReadStream(file.path);
284
+ const gzip = createGzip({ level: 6 });
285
+ const dest = createWriteStream(archivePath);
286
+ await pipeline(source, gzip, dest);
287
+ this.logger.info(`Archived ${file.name} → ${archiveName}`, {
288
+ originalSizeMB: Math.round(file.sizeBytes / (1024 * 1024) * 100) / 100,
289
+ });
290
+ }
291
+ /**
292
+ * Truncates a file to keep only the last `keepBytes` bytes.
293
+ * Uses atomic write: reads tail → writes to temp → renames over original.
294
+ *
295
+ * @param filePath - Path to the file to truncate
296
+ * @param keepBytes - Number of bytes to keep from the end
297
+ */
298
+ async truncateFile(filePath, keepBytes) {
299
+ const stat = await fs.stat(filePath);
300
+ if (stat.size <= keepBytes)
301
+ return;
302
+ const skipBytes = stat.size - keepBytes;
303
+ const tempPath = filePath + '.tmp';
304
+ // Read the tail portion
305
+ const fd = await fs.open(filePath, 'r');
306
+ try {
307
+ const buffer = Buffer.alloc(keepBytes);
308
+ await fd.read(buffer, 0, keepBytes, skipBytes);
309
+ await fs.writeFile(tempPath, buffer);
310
+ }
311
+ finally {
312
+ await fd.close();
313
+ }
314
+ // Atomic rename
315
+ await fs.rename(tempPath, filePath);
316
+ this.logger.info(`Truncated ${path.basename(filePath)}`, {
317
+ originalSizeMB: Math.round(stat.size / (1024 * 1024) * 100) / 100,
318
+ newSizeMB: Math.round(keepBytes / (1024 * 1024) * 100) / 100,
319
+ });
320
+ }
321
+ /**
322
+ * Deletes archive files older than the configured retention period.
323
+ *
324
+ * @param result - Rotation result to record errors
325
+ * @returns Number of stale archives deleted
326
+ */
327
+ async cleanStaleArchives(result) {
328
+ let deleted = 0;
329
+ try {
330
+ const entries = await fs.readdir(this.archiveDir);
331
+ const now = Date.now();
332
+ const maxAgeMs = LOG_ROTATION_CONSTANTS.ARCHIVE_RETENTION_DAYS * 24 * 60 * 60 * 1000;
333
+ for (const entry of entries) {
334
+ if (!entry.endsWith('.gz'))
335
+ continue;
336
+ const archivePath = path.join(this.archiveDir, entry);
337
+ try {
338
+ const stat = await fs.stat(archivePath);
339
+ if (now - stat.mtimeMs > maxAgeMs) {
340
+ await fs.unlink(archivePath);
341
+ deleted++;
342
+ this.logger.info(`Deleted stale archive: ${entry}`);
343
+ }
344
+ }
345
+ catch (error) {
346
+ const msg = `Failed to check/delete archive ${entry}: ${error instanceof Error ? error.message : String(error)}`;
347
+ result.errors.push(msg);
348
+ }
349
+ }
350
+ }
351
+ catch {
352
+ // Archive directory may not exist yet
353
+ }
354
+ return deleted;
355
+ }
356
+ // Expose private paths for testing
357
+ /** @internal */
358
+ getSessionsDir() { return this.sessionsDir; }
359
+ /** @internal */
360
+ getArchiveDir() { return this.archiveDir; }
361
+ }
362
+ //# sourceMappingURL=log-rotation.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-rotation.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/log-rotation.service.ts"],"names":[],"mappings":"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"}
@@ -254,7 +254,7 @@ export class SettingsService {
254
254
  'claude-code': general['claudeCodeCommand'],
255
255
  'gemini-cli': defaults.general.runtimeCommands['gemini-cli'],
256
256
  'codex-cli': defaults.general.runtimeCommands['codex-cli'],
257
- 'openhands': defaults.general.runtimeCommands['openhands'],
257
+ 'crewly-agent': defaults.general.runtimeCommands['crewly-agent'],
258
258
  };
259
259
  }
260
260
  // Keep existing users aligned with the current safer Codex default.
@@ -1 +1 @@
1
- {"version":3,"file":"settings.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/settings/settings.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/settings/settings.service.ts"],"names":[],"mappings":"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"}
@@ -259,6 +259,17 @@ export declare class SlackOrchestratorBridge extends EventEmitter {
259
259
  * Determine whether the response already triggered a Slack delivery via NOTIFY.
260
260
  */
261
261
  private findSlackPayloadForMessage;
262
+ /**
263
+ * Sanitize raw terminal output for Slack delivery.
264
+ *
265
+ * Strips NOTIFY markers/headers, Claude Code UI elements (satisfaction survey,
266
+ * permission prompts, status bar), Gemini CLI TUI elements, box-drawing
267
+ * decoration, and orphaned ANSI sequences.
268
+ *
269
+ * @param raw - Raw terminal text
270
+ * @returns Cleaned text suitable for Slack, or empty string if nothing meaningful remains
271
+ */
272
+ private sanitizeForSlack;
262
273
  /**
263
274
  * Build a Slack-friendly fallback response when no NOTIFY payload targeted Slack.
264
275
  */
@@ -1 +1 @@
1
- {"version":3,"file":"slack-orchestrator-bridge.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-orchestrator-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-orchestrator-bridge.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-orchestrator-bridge.ts"],"names":[],"mappings":"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"}
@@ -174,6 +174,29 @@ export class SlackOrchestratorBridge extends EventEmitter {
174
174
  }
175
175
  // Override message text with enriched version for downstream processing
176
176
  message.text = enrichedText;
177
+ // Auditor prefix routing — intercept "auditor ..." messages
178
+ const auditorMatch = enrichedText.match(/^\/?auditor\s+(.*)/is);
179
+ if (auditorMatch) {
180
+ const auditorMessage = auditorMatch[1].trim();
181
+ try {
182
+ if (this.config.showTypingIndicator) {
183
+ await this.addTypingIndicator(message);
184
+ }
185
+ const { AuditorSchedulerService } = await import('../agent/auditor-scheduler.service.js');
186
+ const scheduler = AuditorSchedulerService.getInstance();
187
+ await scheduler.handleUserMessage(auditorMessage, {
188
+ channelId: message.channelId,
189
+ threadTs: message.threadTs || message.ts,
190
+ });
191
+ if (this.config.showTypingIndicator) {
192
+ await this.markComplete(message);
193
+ }
194
+ }
195
+ catch (error) {
196
+ await this.sendErrorResponse(message, error);
197
+ }
198
+ return;
199
+ }
177
200
  // Parse command intent
178
201
  const command = this.parseCommand(message.text);
179
202
  // Add typing indicator
@@ -766,9 +789,14 @@ Just type naturally to chat with the orchestrator!`;
766
789
  // Fallback: send the response directly to Slack
767
790
  try {
768
791
  this.logger.info('reply-slack skill did not deliver, sending fallback response to Slack');
792
+ const sanitized = this.sanitizeForSlack(trimmed);
793
+ if (!sanitized) {
794
+ this.logger.info('Fallback response empty after sanitization, skipping Slack send');
795
+ return;
796
+ }
769
797
  await this.slackService.sendMessage({
770
798
  channelId: originalMessage.channelId,
771
- text: trimmed,
799
+ text: sanitized,
772
800
  threadTs,
773
801
  });
774
802
  }
@@ -842,6 +870,60 @@ Just type naturally to chat with the orchestrator!`;
842
870
  return Boolean(payload.message && payload.message.trim());
843
871
  });
844
872
  }
873
+ /**
874
+ * Sanitize raw terminal output for Slack delivery.
875
+ *
876
+ * Strips NOTIFY markers/headers, Claude Code UI elements (satisfaction survey,
877
+ * permission prompts, status bar), Gemini CLI TUI elements, box-drawing
878
+ * decoration, and orphaned ANSI sequences.
879
+ *
880
+ * @param raw - Raw terminal text
881
+ * @returns Cleaned text suitable for Slack, or empty string if nothing meaningful remains
882
+ */
883
+ sanitizeForSlack(raw) {
884
+ return raw
885
+ // Strip [NOTIFY] / [/NOTIFY] tags
886
+ .replace(/\[\/?NOTIFY\]/g, '')
887
+ // Strip NOTIFY metadata headers
888
+ .replace(/^conversationId:.*$/gm, '')
889
+ .replace(/^channelId:.*$/gm, '')
890
+ .replace(/^threadTs:.*$/gm, '')
891
+ .replace(/^type:.*$/gm, '')
892
+ .replace(/^title:.*$/gm, '')
893
+ .replace(/^urgency:.*$/gm, '')
894
+ .replace(/^---$/gm, '')
895
+ // Strip Claude Code UI elements
896
+ .replace(/^.*How is Claude doing this session\?.*$/gm, '')
897
+ .replace(/^.*\d:\s*Bad\s+\d:\s*Fine\s+\d:\s*Good\s+\d:\s*Dismiss.*$/gm, '')
898
+ .replace(/^.*bypass permissions on.*$/gm, '')
899
+ .replace(/^.*shift\+tab to cycle.*$/gm, '')
900
+ .replace(/^.*esc to (?:interrupt|cancel|\.\.\.).*$/gmi, '')
901
+ .replace(/^.*Use meta\+t to toggle.*$/gmi, '')
902
+ .replace(/^.*ctrl\+g to edi.*$/gmi, '')
903
+ .replace(/^.*Osmosing.*$/gm, '')
904
+ .replace(/^.*✻ Baked for.*$/gm, '')
905
+ .replace(/^.*✢ Osmosing.*$/gm, '')
906
+ .replace(/^.*running stop hook.*$/gmi, '')
907
+ // Strip Claude Code tool indicators and prompt markers
908
+ .replace(/^[⏺⏵❯✻✢✽●·]\s*$/gm, '')
909
+ .replace(/^[⏺⏵]\s+.*$/gm, '')
910
+ // Strip Gemini CLI TUI elements
911
+ .replace(/^.*(?:Type\s+your\s+message|YOLO\s+mode|no\s+sandbox|context\s+left\)).*$/gmi, '')
912
+ .replace(/^.*(?:Initiating\s+File\s+Inspection).*$/gmi, '')
913
+ // Strip TUI box-drawing border characters
914
+ .replace(/^[\s│┃║|]+|[\s│┃║|]+$/gm, '')
915
+ // Remove pure decoration lines (corners, horizontal rules, dots)
916
+ .replace(/^[─━┄┅┈┉╌╍═┌┐└┘├┤┬┴┼╔╗╚╝╠╣╦╩╬╭╮╰╯\-+\s▪▫■□●○◆◇•·]+$/gm, '')
917
+ // Strip orphaned ANSI CSI sequences
918
+ .replace(/\[\d+(?:;\d+)*[A-BJKHfm]/g, '')
919
+ // Strip CHAT: session header lines
920
+ .replace(/^.*\[CHAT:slack-[^\]]+\].*$/gm, '')
921
+ // Strip thread context file lines
922
+ .replace(/^\[Thread context file:.*\]$/gm, '')
923
+ // Collapse multiple blank lines
924
+ .replace(/\n{3,}/g, '\n\n')
925
+ .trim();
926
+ }
845
927
  /**
846
928
  * Build a Slack-friendly fallback response when no NOTIFY payload targeted Slack.
847
929
  */