crewly 1.0.7 → 1.0.8

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 (303) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +50 -3
  3. package/config/roles/architect/prompt.md +11 -0
  4. package/config/roles/backend-developer/prompt.md +11 -0
  5. package/config/roles/designer/prompt.md +11 -0
  6. package/config/roles/developer/prompt.md +18 -4
  7. package/config/roles/frontend-developer/prompt.md +11 -0
  8. package/config/roles/fullstack-dev/prompt.md +11 -0
  9. package/config/roles/generalist/prompt.md +11 -0
  10. package/config/roles/orchestrator/prompt.md +27 -0
  11. package/config/roles/product-manager/prompt.md +18 -4
  12. package/config/roles/qa/prompt.md +11 -0
  13. package/config/roles/qa-engineer/prompt.md +11 -0
  14. package/config/roles/sales/prompt.md +11 -0
  15. package/config/roles/support/prompt.md +11 -0
  16. package/config/roles/tpm/prompt.md +11 -0
  17. package/config/skills/orchestrator/complete-task/execute.sh +1 -0
  18. package/config/templates/agent-claude-md.md +16 -0
  19. package/config/templates/research-team.json +22 -0
  20. package/config/templates/startup-team.json +22 -0
  21. package/config/templates/web-dev-team.json +22 -0
  22. package/dist/backend/backend/src/constants.d.ts +61 -1
  23. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  24. package/dist/backend/backend/src/constants.js +65 -7
  25. package/dist/backend/backend/src/constants.js.map +1 -1
  26. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +7 -0
  27. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -1
  28. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +174 -4
  29. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -1
  30. package/dist/backend/backend/src/index.d.ts.map +1 -1
  31. package/dist/backend/backend/src/index.js +34 -0
  32. package/dist/backend/backend/src/index.js.map +1 -1
  33. package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts.map +1 -1
  34. package/dist/backend/backend/src/routes/modules/task-management.routes.js +2 -0
  35. package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -1
  36. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +8 -0
  37. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  38. package/dist/backend/backend/src/services/agent/agent-registration.service.js +75 -17
  39. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  40. package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts +222 -0
  41. package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
  42. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js +621 -0
  43. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
  44. package/dist/backend/backend/src/services/index.d.ts +3 -0
  45. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  46. package/dist/backend/backend/src/services/index.js +5 -0
  47. package/dist/backend/backend/src/services/index.js.map +1 -1
  48. package/dist/backend/backend/src/services/mcp-client.d.ts +233 -0
  49. package/dist/backend/backend/src/services/mcp-client.d.ts.map +1 -0
  50. package/dist/backend/backend/src/services/mcp-client.js +297 -0
  51. package/dist/backend/backend/src/services/mcp-client.js.map +1 -0
  52. package/dist/backend/backend/src/services/mcp-server.d.ts +167 -0
  53. package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -0
  54. package/dist/backend/backend/src/services/mcp-server.js +586 -0
  55. package/dist/backend/backend/src/services/mcp-server.js.map +1 -0
  56. package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts +2 -0
  57. package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/messaging/message-queue.service.js +6 -1
  59. package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -1
  60. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +10 -0
  61. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  62. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +94 -38
  63. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  64. package/dist/backend/backend/src/services/quality/index.d.ts +1 -0
  65. package/dist/backend/backend/src/services/quality/index.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/quality/index.js +1 -0
  67. package/dist/backend/backend/src/services/quality/index.js.map +1 -1
  68. package/dist/backend/backend/src/services/quality/task-output-validator.service.d.ts +84 -0
  69. package/dist/backend/backend/src/services/quality/task-output-validator.service.d.ts.map +1 -0
  70. package/dist/backend/backend/src/services/quality/task-output-validator.service.js +163 -0
  71. package/dist/backend/backend/src/services/quality/task-output-validator.service.js.map +1 -0
  72. package/dist/backend/backend/src/services/runtime-adapter.d.ts +234 -0
  73. package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -0
  74. package/dist/backend/backend/src/services/runtime-adapter.js +180 -0
  75. package/dist/backend/backend/src/services/runtime-adapter.js.map +1 -0
  76. package/dist/backend/backend/src/types/event-bus.types.d.ts +2 -2
  77. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  78. package/dist/backend/backend/src/types/event-bus.types.js +2 -0
  79. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  80. package/dist/backend/backend/src/types/index.d.ts +1 -0
  81. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  82. package/dist/backend/backend/src/types/index.js +2 -0
  83. package/dist/backend/backend/src/types/index.js.map +1 -1
  84. package/dist/backend/backend/src/types/messaging.types.d.ts +9 -6
  85. package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
  86. package/dist/backend/backend/src/types/messaging.types.js +10 -3
  87. package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
  88. package/dist/backend/backend/src/types/task-output.types.d.ts +78 -0
  89. package/dist/backend/backend/src/types/task-output.types.d.ts.map +1 -0
  90. package/dist/backend/backend/src/types/task-output.types.js +27 -0
  91. package/dist/backend/backend/src/types/task-output.types.js.map +1 -0
  92. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +13 -0
  93. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
  94. package/dist/backend/backend/src/websocket/terminal.gateway.js +12 -0
  95. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
  96. package/dist/cli/backend/src/constants.d.ts +751 -0
  97. package/dist/cli/backend/src/constants.d.ts.map +1 -0
  98. package/dist/cli/backend/src/constants.js +550 -0
  99. package/dist/cli/backend/src/constants.js.map +1 -0
  100. package/dist/cli/backend/src/models/Project.d.ts +18 -0
  101. package/dist/cli/backend/src/models/Project.d.ts.map +1 -0
  102. package/dist/cli/backend/src/models/Project.js +70 -0
  103. package/dist/cli/backend/src/models/Project.js.map +1 -0
  104. package/dist/cli/backend/src/models/ScheduledMessage.d.ts +27 -0
  105. package/dist/cli/backend/src/models/ScheduledMessage.d.ts.map +1 -0
  106. package/dist/cli/backend/src/models/ScheduledMessage.js +50 -0
  107. package/dist/cli/backend/src/models/ScheduledMessage.js.map +1 -0
  108. package/dist/cli/backend/src/models/Team.d.ts +20 -0
  109. package/dist/cli/backend/src/models/Team.d.ts.map +1 -0
  110. package/dist/cli/backend/src/models/Team.js +120 -0
  111. package/dist/cli/backend/src/models/Team.js.map +1 -0
  112. package/dist/cli/backend/src/models/Ticket.d.ts +24 -0
  113. package/dist/cli/backend/src/models/Ticket.d.ts.map +1 -0
  114. package/dist/cli/backend/src/models/Ticket.js +102 -0
  115. package/dist/cli/backend/src/models/Ticket.js.map +1 -0
  116. package/dist/cli/backend/src/models/index.d.ts +5 -0
  117. package/dist/cli/backend/src/models/index.d.ts.map +1 -0
  118. package/dist/cli/backend/src/models/index.js +5 -0
  119. package/dist/cli/backend/src/models/index.js.map +1 -0
  120. package/dist/cli/backend/src/services/core/config.service.d.ts +91 -0
  121. package/dist/cli/backend/src/services/core/config.service.d.ts.map +1 -0
  122. package/dist/cli/backend/src/services/core/config.service.js +246 -0
  123. package/dist/cli/backend/src/services/core/config.service.js.map +1 -0
  124. package/dist/cli/backend/src/services/core/logger.service.d.ts +70 -0
  125. package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -0
  126. package/dist/cli/backend/src/services/core/logger.service.js +350 -0
  127. package/dist/cli/backend/src/services/core/logger.service.js.map +1 -0
  128. package/dist/cli/backend/src/services/core/storage.service.d.ts +269 -0
  129. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -0
  130. package/dist/cli/backend/src/services/core/storage.service.js +1406 -0
  131. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -0
  132. package/dist/cli/backend/src/services/core/teams-backup.service.d.ts +92 -0
  133. package/dist/cli/backend/src/services/core/teams-backup.service.d.ts.map +1 -0
  134. package/dist/cli/backend/src/services/core/teams-backup.service.js +120 -0
  135. package/dist/cli/backend/src/services/core/teams-backup.service.js.map +1 -0
  136. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +125 -0
  137. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -0
  138. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +247 -0
  139. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -0
  140. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts +153 -0
  141. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts.map +1 -0
  142. package/dist/cli/backend/src/services/knowledge/knowledge.service.js +409 -0
  143. package/dist/cli/backend/src/services/knowledge/knowledge.service.js.map +1 -0
  144. package/dist/cli/backend/src/services/mcp-server.d.ts +167 -0
  145. package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -0
  146. package/dist/cli/backend/src/services/mcp-server.js +586 -0
  147. package/dist/cli/backend/src/services/mcp-server.js.map +1 -0
  148. package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts +259 -0
  149. package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts.map +1 -0
  150. package/dist/cli/backend/src/services/memory/agent-memory.service.js +539 -0
  151. package/dist/cli/backend/src/services/memory/agent-memory.service.js.map +1 -0
  152. package/dist/cli/backend/src/services/memory/memory.service.d.ts +306 -0
  153. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -0
  154. package/dist/cli/backend/src/services/memory/memory.service.js +517 -0
  155. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -0
  156. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts +252 -0
  157. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -0
  158. package/dist/cli/backend/src/services/memory/project-memory.service.js +600 -0
  159. package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -0
  160. package/dist/cli/backend/src/types/auto-assign.types.d.ts +271 -0
  161. package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +1 -0
  162. package/dist/cli/backend/src/types/auto-assign.types.js +136 -0
  163. package/dist/cli/backend/src/types/auto-assign.types.js.map +1 -0
  164. package/dist/cli/backend/src/types/budget.types.d.ts +217 -0
  165. package/dist/cli/backend/src/types/budget.types.d.ts.map +1 -0
  166. package/dist/cli/backend/src/types/budget.types.js +82 -0
  167. package/dist/cli/backend/src/types/budget.types.js.map +1 -0
  168. package/dist/cli/backend/src/types/chat.types.d.ts +550 -0
  169. package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -0
  170. package/dist/cli/backend/src/types/chat.types.js +743 -0
  171. package/dist/cli/backend/src/types/chat.types.js.map +1 -0
  172. package/dist/cli/backend/src/types/continuation.types.d.ts +237 -0
  173. package/dist/cli/backend/src/types/continuation.types.d.ts.map +1 -0
  174. package/dist/cli/backend/src/types/continuation.types.js +10 -0
  175. package/dist/cli/backend/src/types/continuation.types.js.map +1 -0
  176. package/dist/cli/backend/src/types/index.d.ts +164 -0
  177. package/dist/cli/backend/src/types/index.d.ts.map +1 -0
  178. package/dist/cli/backend/src/types/index.js +25 -0
  179. package/dist/cli/backend/src/types/index.js.map +1 -0
  180. package/dist/cli/backend/src/types/knowledge.types.d.ts +195 -0
  181. package/dist/cli/backend/src/types/knowledge.types.d.ts.map +1 -0
  182. package/dist/cli/backend/src/types/knowledge.types.js +38 -0
  183. package/dist/cli/backend/src/types/knowledge.types.js.map +1 -0
  184. package/dist/cli/backend/src/types/memory.types.d.ts +587 -0
  185. package/dist/cli/backend/src/types/memory.types.d.ts.map +1 -0
  186. package/dist/cli/backend/src/types/memory.types.js +47 -0
  187. package/dist/cli/backend/src/types/memory.types.js.map +1 -0
  188. package/dist/cli/backend/src/types/quality-gate.types.d.ts +171 -0
  189. package/dist/cli/backend/src/types/quality-gate.types.d.ts.map +1 -0
  190. package/dist/cli/backend/src/types/quality-gate.types.js +42 -0
  191. package/dist/cli/backend/src/types/quality-gate.types.js.map +1 -0
  192. package/dist/cli/backend/src/types/role.types.d.ts +260 -0
  193. package/dist/cli/backend/src/types/role.types.d.ts.map +1 -0
  194. package/dist/cli/backend/src/types/role.types.js +238 -0
  195. package/dist/cli/backend/src/types/role.types.js.map +1 -0
  196. package/dist/cli/backend/src/types/scheduler.types.d.ts +254 -0
  197. package/dist/cli/backend/src/types/scheduler.types.d.ts.map +1 -0
  198. package/dist/cli/backend/src/types/scheduler.types.js +32 -0
  199. package/dist/cli/backend/src/types/scheduler.types.js.map +1 -0
  200. package/dist/cli/backend/src/types/settings.types.d.ts +178 -0
  201. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -0
  202. package/dist/cli/backend/src/types/settings.types.js +206 -0
  203. package/dist/cli/backend/src/types/settings.types.js.map +1 -0
  204. package/dist/cli/backend/src/types/skill.types.d.ts +515 -0
  205. package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -0
  206. package/dist/cli/backend/src/types/skill.types.js +481 -0
  207. package/dist/cli/backend/src/types/skill.types.js.map +1 -0
  208. package/dist/cli/backend/src/types/sop.types.d.ts +224 -0
  209. package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -0
  210. package/dist/cli/backend/src/types/sop.types.js +85 -0
  211. package/dist/cli/backend/src/types/sop.types.js.map +1 -0
  212. package/dist/cli/backend/src/types/task-output.types.d.ts +78 -0
  213. package/dist/cli/backend/src/types/task-output.types.d.ts.map +1 -0
  214. package/dist/cli/backend/src/types/task-output.types.js +27 -0
  215. package/dist/cli/backend/src/types/task-output.types.js.map +1 -0
  216. package/dist/cli/backend/src/utils/file-io.utils.d.ts +102 -0
  217. package/dist/cli/backend/src/utils/file-io.utils.d.ts.map +1 -0
  218. package/dist/cli/backend/src/utils/file-io.utils.js +214 -0
  219. package/dist/cli/backend/src/utils/file-io.utils.js.map +1 -0
  220. package/dist/cli/backend/src/utils/terminal-output.utils.d.ts +54 -0
  221. package/dist/cli/backend/src/utils/terminal-output.utils.d.ts.map +1 -0
  222. package/dist/cli/backend/src/utils/terminal-output.utils.js +97 -0
  223. package/dist/cli/backend/src/utils/terminal-output.utils.js.map +1 -0
  224. package/dist/cli/cli/src/commands/mcp-server.d.ts +38 -0
  225. package/dist/cli/cli/src/commands/mcp-server.d.ts.map +1 -0
  226. package/dist/cli/cli/src/commands/mcp-server.js +49 -0
  227. package/dist/cli/cli/src/commands/mcp-server.js.map +1 -0
  228. package/dist/cli/cli/src/commands/onboard.d.ts +61 -7
  229. package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
  230. package/dist/cli/cli/src/commands/onboard.js +192 -19
  231. package/dist/cli/cli/src/commands/onboard.js.map +1 -1
  232. package/dist/cli/cli/src/commands/publish.d.ts +27 -0
  233. package/dist/cli/cli/src/commands/publish.d.ts.map +1 -0
  234. package/dist/cli/cli/src/commands/publish.js +69 -0
  235. package/dist/cli/cli/src/commands/publish.js.map +1 -0
  236. package/dist/cli/cli/src/index.js +14 -0
  237. package/dist/cli/cli/src/index.js.map +1 -1
  238. package/dist/cli/cli/src/utils/archive-creator.d.ts +82 -0
  239. package/dist/cli/cli/src/utils/archive-creator.d.ts.map +1 -0
  240. package/dist/cli/cli/src/utils/archive-creator.js +105 -0
  241. package/dist/cli/cli/src/utils/archive-creator.js.map +1 -0
  242. package/dist/cli/cli/src/utils/package-validator.d.ts +62 -0
  243. package/dist/cli/cli/src/utils/package-validator.d.ts.map +1 -0
  244. package/dist/cli/cli/src/utils/package-validator.js +122 -0
  245. package/dist/cli/cli/src/utils/package-validator.js.map +1 -0
  246. package/dist/cli/cli/src/utils/templates.d.ts +71 -0
  247. package/dist/cli/cli/src/utils/templates.d.ts.map +1 -0
  248. package/dist/cli/cli/src/utils/templates.js +91 -0
  249. package/dist/cli/cli/src/utils/templates.js.map +1 -0
  250. package/frontend/dist/assets/{index-523c7fce.js → index-68d1eb5a.js} +71 -71
  251. package/frontend/dist/assets/{index-4c050f52.css → index-c5043a83.css} +1 -1
  252. package/frontend/dist/assets/nunito-cyrillic-400-normal-e44e669f.woff2 +0 -0
  253. package/frontend/dist/assets/nunito-cyrillic-400-normal-ff8e8bdd.woff +0 -0
  254. package/frontend/dist/assets/nunito-cyrillic-500-normal-2159679b.woff +0 -0
  255. package/frontend/dist/assets/nunito-cyrillic-500-normal-61a3b80e.woff2 +0 -0
  256. package/frontend/dist/assets/nunito-cyrillic-600-normal-ac046097.woff +0 -0
  257. package/frontend/dist/assets/nunito-cyrillic-600-normal-e61eb97b.woff2 +0 -0
  258. package/frontend/dist/assets/nunito-cyrillic-700-normal-8fcefcc9.woff2 +0 -0
  259. package/frontend/dist/assets/nunito-cyrillic-700-normal-b9684104.woff +0 -0
  260. package/frontend/dist/assets/nunito-cyrillic-800-normal-40253beb.woff +0 -0
  261. package/frontend/dist/assets/nunito-cyrillic-800-normal-d80292de.woff2 +0 -0
  262. package/frontend/dist/assets/nunito-cyrillic-ext-400-normal-20d73ae7.woff2 +0 -0
  263. package/frontend/dist/assets/nunito-cyrillic-ext-400-normal-d48c37c9.woff +0 -0
  264. package/frontend/dist/assets/nunito-cyrillic-ext-500-normal-16197abd.woff +0 -0
  265. package/frontend/dist/assets/nunito-cyrillic-ext-500-normal-9dcfe9b5.woff2 +0 -0
  266. package/frontend/dist/assets/nunito-cyrillic-ext-600-normal-d53e9851.woff2 +0 -0
  267. package/frontend/dist/assets/nunito-cyrillic-ext-600-normal-e3d0201f.woff +0 -0
  268. package/frontend/dist/assets/nunito-cyrillic-ext-700-normal-5936f6ac.woff2 +0 -0
  269. package/frontend/dist/assets/nunito-cyrillic-ext-700-normal-c8c02775.woff +0 -0
  270. package/frontend/dist/assets/nunito-cyrillic-ext-800-normal-217b8f51.woff +0 -0
  271. package/frontend/dist/assets/nunito-cyrillic-ext-800-normal-796cf7bd.woff2 +0 -0
  272. package/frontend/dist/assets/nunito-latin-400-normal-a5906e15.woff2 +0 -0
  273. package/frontend/dist/assets/nunito-latin-400-normal-b51e7635.woff +0 -0
  274. package/frontend/dist/assets/nunito-latin-500-normal-23ae3083.woff2 +0 -0
  275. package/frontend/dist/assets/nunito-latin-500-normal-be14dbc6.woff +0 -0
  276. package/frontend/dist/assets/nunito-latin-600-normal-06a9c8b3.woff +0 -0
  277. package/frontend/dist/assets/nunito-latin-600-normal-45f437de.woff2 +0 -0
  278. package/frontend/dist/assets/nunito-latin-700-normal-ce9107dc.woff +0 -0
  279. package/frontend/dist/assets/nunito-latin-700-normal-fa89300b.woff2 +0 -0
  280. package/frontend/dist/assets/nunito-latin-800-normal-0ca02785.woff +0 -0
  281. package/frontend/dist/assets/nunito-latin-800-normal-2363d3ed.woff2 +0 -0
  282. package/frontend/dist/assets/nunito-latin-ext-400-normal-67250a41.woff2 +0 -0
  283. package/frontend/dist/assets/nunito-latin-ext-400-normal-d7e2415e.woff +0 -0
  284. package/frontend/dist/assets/nunito-latin-ext-500-normal-06f35d1c.woff +0 -0
  285. package/frontend/dist/assets/nunito-latin-ext-500-normal-343e7adc.woff2 +0 -0
  286. package/frontend/dist/assets/nunito-latin-ext-600-normal-5a8efd17.woff +0 -0
  287. package/frontend/dist/assets/nunito-latin-ext-600-normal-a7ba5f4f.woff2 +0 -0
  288. package/frontend/dist/assets/nunito-latin-ext-700-normal-0a4e4a02.woff2 +0 -0
  289. package/frontend/dist/assets/nunito-latin-ext-700-normal-0c607961.woff +0 -0
  290. package/frontend/dist/assets/nunito-latin-ext-800-normal-39f54b55.woff2 +0 -0
  291. package/frontend/dist/assets/nunito-latin-ext-800-normal-466d0211.woff +0 -0
  292. package/frontend/dist/assets/nunito-vietnamese-400-normal-2a755616.woff2 +0 -0
  293. package/frontend/dist/assets/nunito-vietnamese-400-normal-9c01ea9f.woff +0 -0
  294. package/frontend/dist/assets/nunito-vietnamese-500-normal-452e5e08.woff +0 -0
  295. package/frontend/dist/assets/nunito-vietnamese-500-normal-dc98d965.woff2 +0 -0
  296. package/frontend/dist/assets/nunito-vietnamese-600-normal-2ffbb85f.woff +0 -0
  297. package/frontend/dist/assets/nunito-vietnamese-600-normal-cf95b95d.woff2 +0 -0
  298. package/frontend/dist/assets/nunito-vietnamese-700-normal-0e29c28c.woff2 +0 -0
  299. package/frontend/dist/assets/nunito-vietnamese-700-normal-7793b75e.woff +0 -0
  300. package/frontend/dist/assets/nunito-vietnamese-800-normal-5baf507e.woff +0 -0
  301. package/frontend/dist/assets/nunito-vietnamese-800-normal-fac6740e.woff2 +0 -0
  302. package/frontend/dist/index.html +2 -2
  303. package/package.json +15 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-window-monitor.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/context-window-monitor.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAS5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAO1E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAOzE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC7B;AA8BD;;;;;;;;;;;GAWG;AACH,qBAAa,2BAA2B;IACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4C;IACnE,OAAO,CAAC,MAAM,CAAkB;IAEhC,uCAAuC;IACvC,OAAO,CAAC,aAAa,CAA8C;IAEnE,2DAA2D;IAC3D,OAAO,CAAC,oBAAoB,CAA+C;IAE3E,oCAAoC;IACpC,OAAO,CAAC,UAAU,CAA+C;IAEjE,kDAAkD;IAClD,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,wBAAwB,CAAyC;IACzE,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,eAAe,CAAgC;IAEvD,OAAO;IAIP;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,2BAA2B;IAOjD;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAQ5B;;;;;;;;OAQG;IACH,eAAe,CACd,cAAc,EAAE,eAAe,EAC/B,wBAAwB,EAAE,wBAAwB,EAClD,cAAc,EAAE,cAAc,EAC9B,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,eAAe,GAC9B,IAAI;IAQP;;OAEG;IACH,KAAK,IAAI,IAAI;IAkBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;;;OAIG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;;;;;;;OAUG;IACH,sBAAsB,CACrB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACV,IAAI;IAmDP;;;;OAIG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAWhD;;;;;OAKG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIpE;;;;OAIG;IACH,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAItD;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAyBlB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;;;OAKG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IA2B9D;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAmC1B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;;;;;;;;;;;;;;OAeG;YACW,mBAAmB;IA0HjC;;;;OAIG;YACW,cAAc;IAgF5B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAO/B"}
@@ -0,0 +1,621 @@
1
+ /**
2
+ * Context Window Monitor Service
3
+ *
4
+ * Monitors PTY session output for context window usage percentages and triggers
5
+ * proactive warnings and auto-recovery when thresholds are exceeded.
6
+ *
7
+ * When an agent's Claude Code session reports context usage (e.g., "85% context"),
8
+ * this service detects the percentage, evaluates it against configured thresholds,
9
+ * and takes action:
10
+ * - Yellow (70%): Publishes a warning event
11
+ * - Red (85%): Publishes a warning event
12
+ * - Critical (95%): Triggers auto-recovery (kill + restart session with task re-delivery)
13
+ *
14
+ * Follows the PTY subscription pattern from RuntimeExitMonitorService and the
15
+ * lifecycle/restart pattern from AgentHeartbeatMonitorService.
16
+ *
17
+ * @module services/agent/context-window-monitor
18
+ */
19
+ import * as fs from 'fs/promises';
20
+ import { v4 as uuidv4 } from 'uuid';
21
+ import { LoggerService } from '../core/logger.service.js';
22
+ import { getSessionBackendSync, } from '../session/index.js';
23
+ import { getSessionStatePersistence } from '../session/session-state-persistence.js';
24
+ import { getTerminalGateway } from '../../websocket/terminal.gateway.js';
25
+ import { PtyActivityTrackerService } from './pty-activity-tracker.service.js';
26
+ import { RuntimeExitMonitorService } from './runtime-exit-monitor.service.js';
27
+ import { stripAnsiCodes } from '../../utils/terminal-output.utils.js';
28
+ import { CONTEXT_WINDOW_MONITOR_CONSTANTS, AGENT_SUSPEND_CONSTANTS, SESSION_COMMAND_DELAYS, } from '../../constants.js';
29
+ // =============================================================================
30
+ // Regex patterns for detecting context usage percentages in PTY output
31
+ // =============================================================================
32
+ /**
33
+ * Patterns to match context window usage percentages from Claude Code output.
34
+ * Each pattern captures the percentage as group 1.
35
+ */
36
+ const CONTEXT_PERCENT_PATTERNS = [
37
+ /(\d{1,3})%\s*(?:of\s+)?context/i,
38
+ /context[:\s]+(\d{1,3})%/i,
39
+ /(\d{1,3})%\s*ctx/i,
40
+ ];
41
+ // =============================================================================
42
+ // Service
43
+ // =============================================================================
44
+ /**
45
+ * Monitors agent PTY sessions for context window usage and triggers
46
+ * threshold-based warnings and auto-recovery.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const monitor = ContextWindowMonitorService.getInstance();
51
+ * monitor.setDependencies(backend, regService, storageService, taskService, eventBus);
52
+ * monitor.start();
53
+ * monitor.startSessionMonitoring('agent-dev', 'member-1', 'team-1', 'developer');
54
+ * ```
55
+ */
56
+ export class ContextWindowMonitorService {
57
+ static instance = null;
58
+ logger;
59
+ /** Per-session context window state */
60
+ contextStates = new Map();
61
+ /** Per-session PTY data subscriptions + rolling buffers */
62
+ sessionSubscriptions = new Map();
63
+ /** Periodic check interval timer */
64
+ checkTimer = null;
65
+ /** Dependencies (injected via setDependencies) */
66
+ sessionBackend = null;
67
+ agentRegistrationService = null;
68
+ storageService = null;
69
+ taskTrackingService = null;
70
+ eventBusService = null;
71
+ constructor() {
72
+ this.logger = LoggerService.getInstance().createComponentLogger('ContextWindowMonitor');
73
+ }
74
+ /**
75
+ * Get the singleton instance.
76
+ *
77
+ * @returns The ContextWindowMonitorService singleton
78
+ */
79
+ static getInstance() {
80
+ if (!ContextWindowMonitorService.instance) {
81
+ ContextWindowMonitorService.instance = new ContextWindowMonitorService();
82
+ }
83
+ return ContextWindowMonitorService.instance;
84
+ }
85
+ /**
86
+ * Reset the singleton (for testing).
87
+ */
88
+ static resetInstance() {
89
+ if (ContextWindowMonitorService.instance) {
90
+ ContextWindowMonitorService.instance.stop();
91
+ ContextWindowMonitorService.instance.destroyAllSubscriptions();
92
+ }
93
+ ContextWindowMonitorService.instance = null;
94
+ }
95
+ /**
96
+ * Inject required dependencies.
97
+ *
98
+ * @param sessionBackend - Session backend for PTY access
99
+ * @param agentRegistrationService - For recreating agent sessions on recovery
100
+ * @param storageService - For querying agent status
101
+ * @param taskTrackingService - For querying in-progress tasks for re-delivery
102
+ * @param eventBusService - For publishing context warning/critical events
103
+ */
104
+ setDependencies(sessionBackend, agentRegistrationService, storageService, taskTrackingService, eventBusService) {
105
+ this.sessionBackend = sessionBackend;
106
+ this.agentRegistrationService = agentRegistrationService;
107
+ this.storageService = storageService;
108
+ this.taskTrackingService = taskTrackingService;
109
+ this.eventBusService = eventBusService;
110
+ }
111
+ /**
112
+ * Start the periodic check loop for stale detection and cleanup.
113
+ */
114
+ start() {
115
+ if (this.checkTimer) {
116
+ this.logger.warn('Context window monitor already running');
117
+ return;
118
+ }
119
+ this.logger.info('Starting context window monitor', {
120
+ checkIntervalMs: CONTEXT_WINDOW_MONITOR_CONSTANTS.CHECK_INTERVAL_MS,
121
+ yellowThreshold: CONTEXT_WINDOW_MONITOR_CONSTANTS.YELLOW_THRESHOLD_PERCENT,
122
+ redThreshold: CONTEXT_WINDOW_MONITOR_CONSTANTS.RED_THRESHOLD_PERCENT,
123
+ criticalThreshold: CONTEXT_WINDOW_MONITOR_CONSTANTS.CRITICAL_THRESHOLD_PERCENT,
124
+ });
125
+ this.checkTimer = setInterval(() => {
126
+ this.performCheck();
127
+ }, CONTEXT_WINDOW_MONITOR_CONSTANTS.CHECK_INTERVAL_MS);
128
+ }
129
+ /**
130
+ * Stop the periodic check loop.
131
+ */
132
+ stop() {
133
+ if (this.checkTimer) {
134
+ clearInterval(this.checkTimer);
135
+ this.checkTimer = null;
136
+ this.logger.info('Context window monitor stopped');
137
+ }
138
+ }
139
+ /**
140
+ * Check if the monitor is currently running.
141
+ *
142
+ * @returns True if the periodic check loop is active
143
+ */
144
+ isRunning() {
145
+ return this.checkTimer !== null;
146
+ }
147
+ /**
148
+ * Start monitoring a specific session for context window usage.
149
+ *
150
+ * Subscribes to the session's PTY onData events and parses output
151
+ * for context usage percentages.
152
+ *
153
+ * @param sessionName - PTY session name
154
+ * @param memberId - Team member ID
155
+ * @param teamId - Team ID
156
+ * @param role - Agent role
157
+ */
158
+ startSessionMonitoring(sessionName, memberId, teamId, role) {
159
+ // Stop any existing monitoring for this session
160
+ if (this.sessionSubscriptions.has(sessionName)) {
161
+ this.stopSessionMonitoring(sessionName);
162
+ }
163
+ const backend = this.sessionBackend || getSessionBackendSync();
164
+ if (!backend) {
165
+ this.logger.warn('Cannot start context monitoring: session backend not available', { sessionName });
166
+ return;
167
+ }
168
+ const session = backend.getSession(sessionName);
169
+ if (!session) {
170
+ this.logger.warn('Cannot start context monitoring: session not found', { sessionName });
171
+ return;
172
+ }
173
+ // Initialize state
174
+ const state = {
175
+ sessionName,
176
+ memberId,
177
+ teamId,
178
+ role,
179
+ contextPercent: 0,
180
+ level: 'normal',
181
+ lastDetectedAt: Date.now(),
182
+ recoveryTriggered: false,
183
+ recoveryCount: 0,
184
+ recoveryTimestamps: [],
185
+ };
186
+ this.contextStates.set(sessionName, state);
187
+ // Subscribe to PTY data
188
+ const unsubscribe = session.onData((data) => {
189
+ this.handleData(sessionName, data);
190
+ });
191
+ this.sessionSubscriptions.set(sessionName, {
192
+ unsubscribe,
193
+ buffer: '',
194
+ });
195
+ this.logger.info('Started context window monitoring', {
196
+ sessionName,
197
+ memberId,
198
+ teamId,
199
+ role,
200
+ });
201
+ }
202
+ /**
203
+ * Stop monitoring a specific session.
204
+ *
205
+ * @param sessionName - PTY session name
206
+ */
207
+ stopSessionMonitoring(sessionName) {
208
+ const sub = this.sessionSubscriptions.get(sessionName);
209
+ if (sub) {
210
+ sub.unsubscribe();
211
+ this.sessionSubscriptions.delete(sessionName);
212
+ }
213
+ this.contextStates.delete(sessionName);
214
+ this.logger.debug('Stopped context window monitoring', { sessionName });
215
+ }
216
+ /**
217
+ * Get the context window state for a specific session.
218
+ *
219
+ * @param sessionName - PTY session name
220
+ * @returns The context window state or undefined if not monitored
221
+ */
222
+ getContextState(sessionName) {
223
+ return this.contextStates.get(sessionName);
224
+ }
225
+ /**
226
+ * Get all monitored context window states.
227
+ *
228
+ * @returns Map of session name to context window state
229
+ */
230
+ getAllContextStates() {
231
+ return new Map(this.contextStates);
232
+ }
233
+ /**
234
+ * Handle incoming PTY data for a monitored session.
235
+ * Strips ANSI codes, appends to rolling buffer, and checks for context % patterns.
236
+ *
237
+ * @param sessionName - PTY session name
238
+ * @param data - Raw PTY output data
239
+ */
240
+ handleData(sessionName, data) {
241
+ const sub = this.sessionSubscriptions.get(sessionName);
242
+ const state = this.contextStates.get(sessionName);
243
+ if (!sub || !state) {
244
+ return;
245
+ }
246
+ // Strip ANSI and append to rolling buffer
247
+ const clean = stripAnsiCodes(data);
248
+ sub.buffer += clean;
249
+ // Cap buffer size
250
+ if (sub.buffer.length > CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_BUFFER_SIZE) {
251
+ sub.buffer = sub.buffer.slice(-CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_BUFFER_SIZE);
252
+ }
253
+ // Try to extract context percentage from buffer
254
+ const percent = this.extractContextPercent(sub.buffer);
255
+ if (percent !== null) {
256
+ this.updateContextUsage(sessionName, percent);
257
+ // Clear buffer after successful extraction to avoid re-matching
258
+ sub.buffer = '';
259
+ }
260
+ }
261
+ /**
262
+ * Extract context usage percentage from terminal output.
263
+ *
264
+ * @param text - Cleaned terminal output text
265
+ * @returns The extracted percentage (0-100) or null if not found
266
+ */
267
+ extractContextPercent(text) {
268
+ for (const pattern of CONTEXT_PERCENT_PATTERNS) {
269
+ const match = pattern.exec(text);
270
+ if (match) {
271
+ const percent = parseInt(match[1], 10);
272
+ if (percent >= 0 && percent <= 100) {
273
+ return percent;
274
+ }
275
+ }
276
+ }
277
+ return null;
278
+ }
279
+ /**
280
+ * Update context usage for a session and evaluate thresholds.
281
+ *
282
+ * @param sessionName - PTY session name
283
+ * @param percent - New context usage percentage
284
+ */
285
+ updateContextUsage(sessionName, percent) {
286
+ const state = this.contextStates.get(sessionName);
287
+ if (!state) {
288
+ return;
289
+ }
290
+ const previousLevel = state.level;
291
+ state.contextPercent = percent;
292
+ state.lastDetectedAt = Date.now();
293
+ // Determine new level
294
+ if (percent >= CONTEXT_WINDOW_MONITOR_CONSTANTS.CRITICAL_THRESHOLD_PERCENT) {
295
+ state.level = 'critical';
296
+ }
297
+ else if (percent >= CONTEXT_WINDOW_MONITOR_CONSTANTS.RED_THRESHOLD_PERCENT) {
298
+ state.level = 'red';
299
+ }
300
+ else if (percent >= CONTEXT_WINDOW_MONITOR_CONSTANTS.YELLOW_THRESHOLD_PERCENT) {
301
+ state.level = 'yellow';
302
+ }
303
+ else {
304
+ state.level = 'normal';
305
+ }
306
+ // Only fire events on level transitions (not repeated at same level)
307
+ if (state.level !== previousLevel && state.level !== 'normal') {
308
+ this.evaluateThresholds(state, previousLevel);
309
+ }
310
+ }
311
+ /**
312
+ * Evaluate threshold transitions and take appropriate actions.
313
+ * Fires events and triggers auto-recovery at critical level.
314
+ *
315
+ * @param state - Current context window state
316
+ * @param previousLevel - The level before this update
317
+ */
318
+ evaluateThresholds(state, previousLevel) {
319
+ this.logger.warn('Context window threshold crossed', {
320
+ sessionName: state.sessionName,
321
+ previousLevel,
322
+ newLevel: state.level,
323
+ contextPercent: state.contextPercent,
324
+ });
325
+ // Publish event for warning levels
326
+ if (state.level === 'yellow' || state.level === 'red') {
327
+ this.publishContextEvent(state, 'agent:context_warning');
328
+ }
329
+ // Publish event and trigger recovery for critical level
330
+ if (state.level === 'critical') {
331
+ this.publishContextEvent(state, 'agent:context_critical');
332
+ if (CONTEXT_WINDOW_MONITOR_CONSTANTS.AUTO_RECOVERY_ENABLED &&
333
+ !state.recoveryTriggered) {
334
+ state.recoveryTriggered = true;
335
+ this.triggerAutoRecovery(state).catch((err) => {
336
+ this.logger.error('Auto-recovery failed', {
337
+ sessionName: state.sessionName,
338
+ error: err instanceof Error ? err.message : String(err),
339
+ });
340
+ });
341
+ }
342
+ }
343
+ // Broadcast to frontend
344
+ this.broadcastContextWarning(state);
345
+ }
346
+ /**
347
+ * Publish a context event via the event bus.
348
+ *
349
+ * @param state - Context window state
350
+ * @param eventType - Event type to publish
351
+ */
352
+ publishContextEvent(state, eventType) {
353
+ if (!this.eventBusService) {
354
+ return;
355
+ }
356
+ const event = {
357
+ id: uuidv4(),
358
+ type: eventType,
359
+ timestamp: new Date().toISOString(),
360
+ teamId: state.teamId,
361
+ teamName: '',
362
+ memberId: state.memberId,
363
+ memberName: '',
364
+ sessionName: state.sessionName,
365
+ previousValue: String(state.contextPercent),
366
+ newValue: state.level,
367
+ changedField: 'contextUsage',
368
+ };
369
+ this.eventBusService.publish(event);
370
+ this.logger.info('Published context event', {
371
+ eventType,
372
+ sessionName: state.sessionName,
373
+ contextPercent: state.contextPercent,
374
+ level: state.level,
375
+ });
376
+ }
377
+ /**
378
+ * Broadcast context window status to frontend via WebSocket.
379
+ *
380
+ * @param state - Context window state to broadcast
381
+ */
382
+ broadcastContextWarning(state) {
383
+ const terminalGateway = getTerminalGateway();
384
+ if (!terminalGateway) {
385
+ return;
386
+ }
387
+ terminalGateway.broadcastContextWindowStatus({
388
+ sessionName: state.sessionName,
389
+ memberId: state.memberId,
390
+ teamId: state.teamId,
391
+ contextPercent: state.contextPercent,
392
+ level: state.level,
393
+ timestamp: new Date().toISOString(),
394
+ });
395
+ }
396
+ /**
397
+ * Trigger auto-recovery for a session at critical context usage.
398
+ *
399
+ * Mirrors the restart pattern from AgentHeartbeatMonitorService:
400
+ * 1. Check cooldown
401
+ * 2. Save Claude session ID
402
+ * 3. Stop exit monitoring
403
+ * 4. Kill PTY session
404
+ * 5. Clear activity tracker
405
+ * 6. Pre-set session ID for resume
406
+ * 7. Recreate agent session
407
+ * 8. Broadcast status
408
+ * 9. Re-deliver tasks
409
+ *
410
+ * @param state - Context window state for the session to recover
411
+ */
412
+ async triggerAutoRecovery(state) {
413
+ const backend = this.sessionBackend || getSessionBackendSync();
414
+ if (!backend || !this.agentRegistrationService) {
415
+ this.logger.warn('Cannot trigger auto-recovery: missing dependencies', {
416
+ sessionName: state.sessionName,
417
+ });
418
+ return;
419
+ }
420
+ // Check cooldown
421
+ const now = Date.now();
422
+ const windowStart = now - CONTEXT_WINDOW_MONITOR_CONSTANTS.COOLDOWN_WINDOW_MS;
423
+ state.recoveryTimestamps = state.recoveryTimestamps.filter(ts => ts > windowStart);
424
+ if (state.recoveryTimestamps.length >= CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_RECOVERIES_PER_WINDOW) {
425
+ this.logger.warn('Context recovery cooldown active, skipping', {
426
+ sessionName: state.sessionName,
427
+ recoveriesInWindow: state.recoveryTimestamps.length,
428
+ maxPerWindow: CONTEXT_WINDOW_MONITOR_CONSTANTS.MAX_RECOVERIES_PER_WINDOW,
429
+ });
430
+ return;
431
+ }
432
+ this.logger.info('Triggering context window auto-recovery', {
433
+ sessionName: state.sessionName,
434
+ contextPercent: state.contextPercent,
435
+ recoveryCount: state.recoveryCount,
436
+ });
437
+ try {
438
+ // Save Claude session ID before killing
439
+ let claudeSessionId;
440
+ try {
441
+ const persistence = getSessionStatePersistence();
442
+ claudeSessionId = persistence.getSessionId(state.sessionName);
443
+ }
444
+ catch {
445
+ this.logger.warn('Could not retrieve Claude session ID for recovery', {
446
+ sessionName: state.sessionName,
447
+ });
448
+ }
449
+ // Stop exit monitoring to avoid triggering exit callbacks
450
+ RuntimeExitMonitorService.getInstance().stopMonitoring(state.sessionName);
451
+ // Stop our own monitoring (will be re-started after session creation)
452
+ this.stopSessionMonitoring(state.sessionName);
453
+ // Kill old PTY session
454
+ if (backend.sessionExists(state.sessionName)) {
455
+ await backend.killSession(state.sessionName);
456
+ }
457
+ // Clear PTY activity tracker
458
+ PtyActivityTrackerService.getInstance().clearSession(state.sessionName);
459
+ // Pre-set session ID for resume
460
+ if (claudeSessionId) {
461
+ try {
462
+ const persistence = getSessionStatePersistence();
463
+ const metadata = persistence.getSessionMetadata(state.sessionName);
464
+ if (metadata) {
465
+ persistence.updateSessionId(state.sessionName, claudeSessionId);
466
+ }
467
+ }
468
+ catch {
469
+ this.logger.warn('Could not pre-set session ID for resume', {
470
+ sessionName: state.sessionName,
471
+ });
472
+ }
473
+ }
474
+ // Recreate agent session
475
+ const result = await this.agentRegistrationService.createAgentSession({
476
+ sessionName: state.sessionName,
477
+ role: state.role,
478
+ teamId: state.teamId,
479
+ memberId: state.memberId,
480
+ });
481
+ if (!result.success) {
482
+ this.logger.error('Context recovery createAgentSession failed', {
483
+ sessionName: state.sessionName,
484
+ error: result.error,
485
+ });
486
+ return;
487
+ }
488
+ // Track recovery
489
+ state.recoveryTimestamps.push(now);
490
+ state.recoveryCount++;
491
+ // Broadcast agent recovered status
492
+ const terminalGateway = getTerminalGateway();
493
+ if (terminalGateway) {
494
+ terminalGateway.broadcastTeamMemberStatus({
495
+ teamId: state.teamId,
496
+ memberId: state.memberId,
497
+ sessionName: state.sessionName,
498
+ agentStatus: 'active',
499
+ });
500
+ }
501
+ this.logger.info('Context window auto-recovery successful', {
502
+ sessionName: state.sessionName,
503
+ recoveryCount: state.recoveryCount,
504
+ claudeSessionId: claudeSessionId ? '(resumed)' : '(fresh)',
505
+ });
506
+ // Re-deliver in-progress tasks (async, non-blocking)
507
+ this.redeliverTasks(state).catch((err) => {
508
+ this.logger.error('Task re-delivery failed after context recovery', {
509
+ sessionName: state.sessionName,
510
+ error: err instanceof Error ? err.message : String(err),
511
+ });
512
+ });
513
+ }
514
+ catch (err) {
515
+ this.logger.error('Failed to perform context window auto-recovery', {
516
+ sessionName: state.sessionName,
517
+ error: err instanceof Error ? err.message : String(err),
518
+ });
519
+ }
520
+ }
521
+ /**
522
+ * Re-deliver in-progress tasks to a recovered agent.
523
+ *
524
+ * @param state - Context window state for the recovered session
525
+ */
526
+ async redeliverTasks(state) {
527
+ if (!this.taskTrackingService) {
528
+ return;
529
+ }
530
+ const backend = this.sessionBackend || getSessionBackendSync();
531
+ if (!backend) {
532
+ return;
533
+ }
534
+ // Wait for agent initialization
535
+ await new Promise(resolve => setTimeout(resolve, AGENT_SUSPEND_CONSTANTS.REHYDRATION_TIMEOUT_MS));
536
+ if (!backend.sessionExists(state.sessionName)) {
537
+ this.logger.warn('Agent session not found after recovery, skipping task re-delivery', {
538
+ sessionName: state.sessionName,
539
+ });
540
+ return;
541
+ }
542
+ const session = backend.getSession(state.sessionName);
543
+ if (!session) {
544
+ return;
545
+ }
546
+ const tasks = await this.taskTrackingService.getTasksForTeamMember(state.memberId);
547
+ const activeTasks = tasks.filter(t => t.status === 'assigned' || t.status === 'active');
548
+ if (activeTasks.length === 0) {
549
+ this.logger.debug('No active tasks to re-deliver after context recovery', {
550
+ sessionName: state.sessionName,
551
+ });
552
+ return;
553
+ }
554
+ this.logger.info('Re-delivering tasks after context recovery', {
555
+ sessionName: state.sessionName,
556
+ taskCount: activeTasks.length,
557
+ });
558
+ for (const task of activeTasks) {
559
+ let taskContent = '';
560
+ try {
561
+ taskContent = await fs.readFile(task.taskFilePath, 'utf-8');
562
+ if (taskContent.length > 2000) {
563
+ taskContent = taskContent.slice(0, 2000) + '\n... (truncated)';
564
+ }
565
+ }
566
+ catch {
567
+ taskContent = '(task file not found)';
568
+ }
569
+ const message = [
570
+ '[TASK RE-DELIVERY] Your previous session ran out of context window.',
571
+ 'You were working on this task before your session was recovered:',
572
+ `Task: ${task.taskName}`,
573
+ `File: ${task.taskFilePath}`,
574
+ '---',
575
+ taskContent,
576
+ '---',
577
+ 'Please continue working on this task.',
578
+ ].join('\n');
579
+ session.write(message);
580
+ const pasteDelay = Math.min(SESSION_COMMAND_DELAYS.MESSAGE_DELAY + Math.ceil(message.length / 10), 5000);
581
+ await new Promise(resolve => setTimeout(resolve, pasteDelay));
582
+ session.write('\r');
583
+ await new Promise(resolve => setTimeout(resolve, 2000));
584
+ }
585
+ this.logger.info('Task re-delivery after context recovery complete', {
586
+ sessionName: state.sessionName,
587
+ tasksDelivered: activeTasks.length,
588
+ });
589
+ }
590
+ /**
591
+ * Periodic check for stale states and cleanup.
592
+ * Removes states for sessions that haven't reported context usage recently.
593
+ */
594
+ performCheck() {
595
+ const now = Date.now();
596
+ const staleThreshold = CONTEXT_WINDOW_MONITOR_CONSTANTS.STALE_DETECTION_THRESHOLD_MS;
597
+ for (const [sessionName, state] of this.contextStates) {
598
+ const timeSinceLastDetection = now - state.lastDetectedAt;
599
+ // Clean up stale states (no context % detected for a while)
600
+ if (timeSinceLastDetection > staleThreshold && state.level !== 'normal') {
601
+ this.logger.debug('Context state stale, resetting to normal', {
602
+ sessionName,
603
+ timeSinceLastDetectionMs: timeSinceLastDetection,
604
+ });
605
+ state.level = 'normal';
606
+ state.recoveryTriggered = false;
607
+ }
608
+ }
609
+ }
610
+ /**
611
+ * Destroy all PTY subscriptions. Used during resetInstance.
612
+ */
613
+ destroyAllSubscriptions() {
614
+ for (const [sessionName, sub] of this.sessionSubscriptions) {
615
+ sub.unsubscribe();
616
+ }
617
+ this.sessionSubscriptions.clear();
618
+ this.contextStates.clear();
619
+ }
620
+ }
621
+ //# sourceMappingURL=context-window-monitor.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-window-monitor.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/context-window-monitor.service.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export { CodexRuntimeService } from './agent/codex-runtime.service.js';
8
8
  export { AgentRegistrationService } from './agent/agent-registration.service.js';
9
9
  export { GitIntegrationService } from './agent/git-integration.service.js';
10
10
  export { FileWatcherService, FileChangeEvent } from './agent/file-watcher.service.js';
11
+ export { ContextWindowMonitorService } from './agent/context-window-monitor.service.js';
11
12
  export { ActiveProjectsService } from './project/active-projects.service.js';
12
13
  export { TaskService } from './project/task.service.js';
13
14
  export { TaskFolderService } from './project/task-folder.service.js';
@@ -34,4 +35,6 @@ export { ChatService, ChatServiceOptions, getChatService, resetChatService, Conv
34
35
  export { RoleService, getRoleService, resetRoleService, RoleNotFoundError, RoleValidationError, BuiltinRoleModificationError, DuplicateRoleNameError, SettingsService, getSettingsService, resetSettingsService, SettingsValidationError, SettingsFileError, } from './settings/index.js';
35
36
  export { SlackService, getSlackService, resetSlackService, SlackOrchestratorBridge, getSlackOrchestratorBridge, resetSlackOrchestratorBridge, initializeSlackIfConfigured, isSlackConfigured, getSlackConfigFromEnv, shutdownSlack, } from './slack/index.js';
36
37
  export { StatePersistenceService, getStatePersistenceService, resetStatePersistenceService, SafeRestartService, getSafeRestartService, resetSafeRestartService, SelfImprovementService, getSelfImprovementService, resetSelfImprovementService, ImprovementMarkerService, getImprovementMarkerService, resetImprovementMarkerService, ImprovementStartupService, getImprovementStartupService, resetImprovementStartupService, } from './orchestrator/index.js';
38
+ export { McpClientService, MCP_CLIENT_CONSTANTS, type McpServerConfig, type McpToolInfo, type McpToolResult, type McpContentBlock, type McpServerStatus, } from './mcp-client.js';
39
+ export { CrewlyMcpServer, MCP_SERVER_CONSTANTS, type CrewlyMcpServerConfig, } from './mcp-server.js';
37
40
  //# sourceMappingURL=index.d.ts.map