@overlordai/server 1.0.1

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 (345) hide show
  1. package/database/migrations/001-init-schema.sql +226 -0
  2. package/database/migrations/002-add-indexes.sql +17 -0
  3. package/database/migrations/003-add-settings-table.sql +4 -0
  4. package/database/migrations/004-add-developer-id-index.sql +5 -0
  5. package/dist/adapters/adapter.interface.d.ts +41 -0
  6. package/dist/adapters/adapter.interface.d.ts.map +1 -0
  7. package/dist/adapters/adapter.interface.js +6 -0
  8. package/dist/adapters/adapter.interface.js.map +1 -0
  9. package/dist/adapters/adapter.module.d.ts +3 -0
  10. package/dist/adapters/adapter.module.d.ts.map +1 -0
  11. package/dist/adapters/adapter.module.js +54 -0
  12. package/dist/adapters/adapter.module.js.map +1 -0
  13. package/dist/adapters/adapter.registry.d.ts +19 -0
  14. package/dist/adapters/adapter.registry.d.ts.map +1 -0
  15. package/dist/adapters/adapter.registry.js +51 -0
  16. package/dist/adapters/adapter.registry.js.map +1 -0
  17. package/dist/adapters/lark/lark-card.builder.d.ts +48 -0
  18. package/dist/adapters/lark/lark-card.builder.d.ts.map +1 -0
  19. package/dist/adapters/lark/lark-card.builder.js +259 -0
  20. package/dist/adapters/lark/lark-card.builder.js.map +1 -0
  21. package/dist/adapters/lark/lark-message.parser.d.ts +51 -0
  22. package/dist/adapters/lark/lark-message.parser.d.ts.map +1 -0
  23. package/dist/adapters/lark/lark-message.parser.js +189 -0
  24. package/dist/adapters/lark/lark-message.parser.js.map +1 -0
  25. package/dist/adapters/lark/lark-signature.d.ts +13 -0
  26. package/dist/adapters/lark/lark-signature.d.ts.map +1 -0
  27. package/dist/adapters/lark/lark-signature.js +58 -0
  28. package/dist/adapters/lark/lark-signature.js.map +1 -0
  29. package/dist/adapters/lark/lark.adapter.d.ts +65 -0
  30. package/dist/adapters/lark/lark.adapter.d.ts.map +1 -0
  31. package/dist/adapters/lark/lark.adapter.js +565 -0
  32. package/dist/adapters/lark/lark.adapter.js.map +1 -0
  33. package/dist/adapters/lark/lark.controller.d.ts +21 -0
  34. package/dist/adapters/lark/lark.controller.d.ts.map +1 -0
  35. package/dist/adapters/lark/lark.controller.js +120 -0
  36. package/dist/adapters/lark/lark.controller.js.map +1 -0
  37. package/dist/adapters/slack/slack.adapter.d.ts +19 -0
  38. package/dist/adapters/slack/slack.adapter.d.ts.map +1 -0
  39. package/dist/adapters/slack/slack.adapter.js +42 -0
  40. package/dist/adapters/slack/slack.adapter.js.map +1 -0
  41. package/dist/app.module.d.ts +5 -0
  42. package/dist/app.module.d.ts.map +1 -0
  43. package/dist/app.module.js +48 -0
  44. package/dist/app.module.js.map +1 -0
  45. package/dist/auth/auth.controller.d.ts +15 -0
  46. package/dist/auth/auth.controller.d.ts.map +1 -0
  47. package/dist/auth/auth.controller.js +67 -0
  48. package/dist/auth/auth.controller.js.map +1 -0
  49. package/dist/auth/auth.module.d.ts +3 -0
  50. package/dist/auth/auth.module.d.ts.map +1 -0
  51. package/dist/auth/auth.module.js +46 -0
  52. package/dist/auth/auth.module.js.map +1 -0
  53. package/dist/auth/auth.service.d.ts +62 -0
  54. package/dist/auth/auth.service.d.ts.map +1 -0
  55. package/dist/auth/auth.service.js +307 -0
  56. package/dist/auth/auth.service.js.map +1 -0
  57. package/dist/auth/decorators/allow-totp-setup.decorator.d.ts +3 -0
  58. package/dist/auth/decorators/allow-totp-setup.decorator.d.ts.map +1 -0
  59. package/dist/auth/decorators/allow-totp-setup.decorator.js +8 -0
  60. package/dist/auth/decorators/allow-totp-setup.decorator.js.map +1 -0
  61. package/dist/auth/decorators/project-roles.decorator.d.ts +4 -0
  62. package/dist/auth/decorators/project-roles.decorator.d.ts.map +1 -0
  63. package/dist/auth/decorators/project-roles.decorator.js +8 -0
  64. package/dist/auth/decorators/project-roles.decorator.js.map +1 -0
  65. package/dist/auth/decorators/roles.decorator.d.ts +4 -0
  66. package/dist/auth/decorators/roles.decorator.d.ts.map +1 -0
  67. package/dist/auth/decorators/roles.decorator.js +8 -0
  68. package/dist/auth/decorators/roles.decorator.js.map +1 -0
  69. package/dist/auth/extract-user.middleware.d.ts +21 -0
  70. package/dist/auth/extract-user.middleware.d.ts.map +1 -0
  71. package/dist/auth/extract-user.middleware.js +57 -0
  72. package/dist/auth/extract-user.middleware.js.map +1 -0
  73. package/dist/auth/guards/jwt-auth.guard.d.ts +14 -0
  74. package/dist/auth/guards/jwt-auth.guard.d.ts.map +1 -0
  75. package/dist/auth/guards/jwt-auth.guard.js +139 -0
  76. package/dist/auth/guards/jwt-auth.guard.js.map +1 -0
  77. package/dist/auth/guards/project-role.guard.d.ts +10 -0
  78. package/dist/auth/guards/project-role.guard.d.ts.map +1 -0
  79. package/dist/auth/guards/project-role.guard.js +72 -0
  80. package/dist/auth/guards/project-role.guard.js.map +1 -0
  81. package/dist/auth/guards/roles.guard.d.ts +8 -0
  82. package/dist/auth/guards/roles.guard.d.ts.map +1 -0
  83. package/dist/auth/guards/roles.guard.js +56 -0
  84. package/dist/auth/guards/roles.guard.js.map +1 -0
  85. package/dist/auth/jwt.strategy.d.ts +23 -0
  86. package/dist/auth/jwt.strategy.d.ts.map +1 -0
  87. package/dist/auth/jwt.strategy.js +49 -0
  88. package/dist/auth/jwt.strategy.js.map +1 -0
  89. package/dist/common/crypto.service.d.ts +31 -0
  90. package/dist/common/crypto.service.d.ts.map +1 -0
  91. package/dist/common/crypto.service.js +120 -0
  92. package/dist/common/crypto.service.js.map +1 -0
  93. package/dist/common/error-filter.d.ts +6 -0
  94. package/dist/common/error-filter.d.ts.map +1 -0
  95. package/dist/common/error-filter.js +78 -0
  96. package/dist/common/error-filter.js.map +1 -0
  97. package/dist/common/health.controller.d.ts +13 -0
  98. package/dist/common/health.controller.d.ts.map +1 -0
  99. package/dist/common/health.controller.js +75 -0
  100. package/dist/common/health.controller.js.map +1 -0
  101. package/dist/common/logger.service.d.ts +11 -0
  102. package/dist/common/logger.service.d.ts.map +1 -0
  103. package/dist/common/logger.service.js +48 -0
  104. package/dist/common/logger.service.js.map +1 -0
  105. package/dist/common/pagination.d.ts +18 -0
  106. package/dist/common/pagination.d.ts.map +1 -0
  107. package/dist/common/pagination.js +39 -0
  108. package/dist/common/pagination.js.map +1 -0
  109. package/dist/common/rate-limit.guard.d.ts +48 -0
  110. package/dist/common/rate-limit.guard.d.ts.map +1 -0
  111. package/dist/common/rate-limit.guard.js +129 -0
  112. package/dist/common/rate-limit.guard.js.map +1 -0
  113. package/dist/common/sensitive-filter.d.ts +7 -0
  114. package/dist/common/sensitive-filter.d.ts.map +1 -0
  115. package/dist/common/sensitive-filter.js +20 -0
  116. package/dist/common/sensitive-filter.js.map +1 -0
  117. package/dist/database/database.module.d.ts +3 -0
  118. package/dist/database/database.module.d.ts.map +1 -0
  119. package/dist/database/database.module.js +22 -0
  120. package/dist/database/database.module.js.map +1 -0
  121. package/dist/database/database.service.d.ts +13 -0
  122. package/dist/database/database.service.d.ts.map +1 -0
  123. package/dist/database/database.service.js +107 -0
  124. package/dist/database/database.service.js.map +1 -0
  125. package/dist/database/migration-runner.d.ts +5 -0
  126. package/dist/database/migration-runner.d.ts.map +1 -0
  127. package/dist/database/migration-runner.js +86 -0
  128. package/dist/database/migration-runner.js.map +1 -0
  129. package/dist/database/repositories/audit-log.repository.d.ts +29 -0
  130. package/dist/database/repositories/audit-log.repository.d.ts.map +1 -0
  131. package/dist/database/repositories/audit-log.repository.js +80 -0
  132. package/dist/database/repositories/audit-log.repository.js.map +1 -0
  133. package/dist/database/repositories/bot.repository.d.ts +67 -0
  134. package/dist/database/repositories/bot.repository.d.ts.map +1 -0
  135. package/dist/database/repositories/bot.repository.js +133 -0
  136. package/dist/database/repositories/bot.repository.js.map +1 -0
  137. package/dist/database/repositories/developer-token.repository.d.ts +40 -0
  138. package/dist/database/repositories/developer-token.repository.d.ts.map +1 -0
  139. package/dist/database/repositories/developer-token.repository.js +84 -0
  140. package/dist/database/repositories/developer-token.repository.js.map +1 -0
  141. package/dist/database/repositories/developer.repository.d.ts +25 -0
  142. package/dist/database/repositories/developer.repository.d.ts.map +1 -0
  143. package/dist/database/repositories/developer.repository.js +139 -0
  144. package/dist/database/repositories/developer.repository.js.map +1 -0
  145. package/dist/database/repositories/machine.repository.d.ts +39 -0
  146. package/dist/database/repositories/machine.repository.d.ts.map +1 -0
  147. package/dist/database/repositories/machine.repository.js +176 -0
  148. package/dist/database/repositories/machine.repository.js.map +1 -0
  149. package/dist/database/repositories/notification.repository.d.ts +19 -0
  150. package/dist/database/repositories/notification.repository.d.ts.map +1 -0
  151. package/dist/database/repositories/notification.repository.js +94 -0
  152. package/dist/database/repositories/notification.repository.js.map +1 -0
  153. package/dist/database/repositories/project-member.repository.d.ts +30 -0
  154. package/dist/database/repositories/project-member.repository.d.ts.map +1 -0
  155. package/dist/database/repositories/project-member.repository.js +75 -0
  156. package/dist/database/repositories/project-member.repository.js.map +1 -0
  157. package/dist/database/repositories/project.repository.d.ts +24 -0
  158. package/dist/database/repositories/project.repository.d.ts.map +1 -0
  159. package/dist/database/repositories/project.repository.js +154 -0
  160. package/dist/database/repositories/project.repository.js.map +1 -0
  161. package/dist/database/repositories/session.repository.d.ts +19 -0
  162. package/dist/database/repositories/session.repository.d.ts.map +1 -0
  163. package/dist/database/repositories/session.repository.js +117 -0
  164. package/dist/database/repositories/session.repository.js.map +1 -0
  165. package/dist/database/repositories/task.repository.d.ts +37 -0
  166. package/dist/database/repositories/task.repository.d.ts.map +1 -0
  167. package/dist/database/repositories/task.repository.js +229 -0
  168. package/dist/database/repositories/task.repository.js.map +1 -0
  169. package/dist/database/repositories/worker-token.repository.d.ts +20 -0
  170. package/dist/database/repositories/worker-token.repository.d.ts.map +1 -0
  171. package/dist/database/repositories/worker-token.repository.js +94 -0
  172. package/dist/database/repositories/worker-token.repository.js.map +1 -0
  173. package/dist/database/repositories/workspace.repository.d.ts +19 -0
  174. package/dist/database/repositories/workspace.repository.d.ts.map +1 -0
  175. package/dist/database/repositories/workspace.repository.js +82 -0
  176. package/dist/database/repositories/workspace.repository.js.map +1 -0
  177. package/dist/dispatcher/capability.service.d.ts +50 -0
  178. package/dist/dispatcher/capability.service.d.ts.map +1 -0
  179. package/dist/dispatcher/capability.service.js +159 -0
  180. package/dist/dispatcher/capability.service.js.map +1 -0
  181. package/dist/dispatcher/cleanup.service.d.ts +23 -0
  182. package/dist/dispatcher/cleanup.service.d.ts.map +1 -0
  183. package/dist/dispatcher/cleanup.service.js +107 -0
  184. package/dist/dispatcher/cleanup.service.js.map +1 -0
  185. package/dist/dispatcher/dedup.service.d.ts +48 -0
  186. package/dist/dispatcher/dedup.service.d.ts.map +1 -0
  187. package/dist/dispatcher/dedup.service.js +189 -0
  188. package/dist/dispatcher/dedup.service.js.map +1 -0
  189. package/dist/dispatcher/dispatcher.module.d.ts +3 -0
  190. package/dist/dispatcher/dispatcher.module.d.ts.map +1 -0
  191. package/dist/dispatcher/dispatcher.module.js +76 -0
  192. package/dist/dispatcher/dispatcher.module.js.map +1 -0
  193. package/dist/dispatcher/dispatcher.service.d.ts +134 -0
  194. package/dist/dispatcher/dispatcher.service.d.ts.map +1 -0
  195. package/dist/dispatcher/dispatcher.service.js +1034 -0
  196. package/dist/dispatcher/dispatcher.service.js.map +1 -0
  197. package/dist/dispatcher/heartbeat.service.d.ts +50 -0
  198. package/dist/dispatcher/heartbeat.service.d.ts.map +1 -0
  199. package/dist/dispatcher/heartbeat.service.js +154 -0
  200. package/dist/dispatcher/heartbeat.service.js.map +1 -0
  201. package/dist/dispatcher/machine-selector.d.ts +18 -0
  202. package/dist/dispatcher/machine-selector.d.ts.map +1 -0
  203. package/dist/dispatcher/machine-selector.js +144 -0
  204. package/dist/dispatcher/machine-selector.js.map +1 -0
  205. package/dist/dispatcher/pty-relay.service.d.ts +75 -0
  206. package/dist/dispatcher/pty-relay.service.d.ts.map +1 -0
  207. package/dist/dispatcher/pty-relay.service.js +404 -0
  208. package/dist/dispatcher/pty-relay.service.js.map +1 -0
  209. package/dist/dispatcher/reconciler.d.ts +39 -0
  210. package/dist/dispatcher/reconciler.d.ts.map +1 -0
  211. package/dist/dispatcher/reconciler.js +556 -0
  212. package/dist/dispatcher/reconciler.js.map +1 -0
  213. package/dist/dispatcher/scheduler.service.d.ts +50 -0
  214. package/dist/dispatcher/scheduler.service.d.ts.map +1 -0
  215. package/dist/dispatcher/scheduler.service.js +287 -0
  216. package/dist/dispatcher/scheduler.service.js.map +1 -0
  217. package/dist/dispatcher/state-machine.d.ts +16 -0
  218. package/dist/dispatcher/state-machine.d.ts.map +1 -0
  219. package/dist/dispatcher/state-machine.js +77 -0
  220. package/dist/dispatcher/state-machine.js.map +1 -0
  221. package/dist/dispatcher/task-log-batcher.d.ts +50 -0
  222. package/dist/dispatcher/task-log-batcher.d.ts.map +1 -0
  223. package/dist/dispatcher/task-log-batcher.js +184 -0
  224. package/dist/dispatcher/task-log-batcher.js.map +1 -0
  225. package/dist/dispatcher/worker-connection.manager.d.ts +49 -0
  226. package/dist/dispatcher/worker-connection.manager.d.ts.map +1 -0
  227. package/dist/dispatcher/worker-connection.manager.js +128 -0
  228. package/dist/dispatcher/worker-connection.manager.js.map +1 -0
  229. package/dist/main.d.ts +2 -0
  230. package/dist/main.d.ts.map +1 -0
  231. package/dist/main.js +85 -0
  232. package/dist/main.js.map +1 -0
  233. package/dist/notifier/debouncer.d.ts +39 -0
  234. package/dist/notifier/debouncer.d.ts.map +1 -0
  235. package/dist/notifier/debouncer.js +123 -0
  236. package/dist/notifier/debouncer.js.map +1 -0
  237. package/dist/notifier/notification-consumer.d.ts +88 -0
  238. package/dist/notifier/notification-consumer.d.ts.map +1 -0
  239. package/dist/notifier/notification-consumer.js +186 -0
  240. package/dist/notifier/notification-consumer.js.map +1 -0
  241. package/dist/notifier/notifier.module.d.ts +9 -0
  242. package/dist/notifier/notifier.module.d.ts.map +1 -0
  243. package/dist/notifier/notifier.module.js +58 -0
  244. package/dist/notifier/notifier.module.js.map +1 -0
  245. package/dist/notifier/notifier.service.d.ts +40 -0
  246. package/dist/notifier/notifier.service.d.ts.map +1 -0
  247. package/dist/notifier/notifier.service.js +191 -0
  248. package/dist/notifier/notifier.service.js.map +1 -0
  249. package/dist/notifier/template.service.d.ts +42 -0
  250. package/dist/notifier/template.service.d.ts.map +1 -0
  251. package/dist/notifier/template.service.js +201 -0
  252. package/dist/notifier/template.service.js.map +1 -0
  253. package/dist/redis/redis.module.d.ts +3 -0
  254. package/dist/redis/redis.module.d.ts.map +1 -0
  255. package/dist/redis/redis.module.js +22 -0
  256. package/dist/redis/redis.module.js.map +1 -0
  257. package/dist/redis/redis.service.d.ts +19 -0
  258. package/dist/redis/redis.service.d.ts.map +1 -0
  259. package/dist/redis/redis.service.js +69 -0
  260. package/dist/redis/redis.service.js.map +1 -0
  261. package/dist/web/admin/admin-audit.controller.d.ts +7 -0
  262. package/dist/web/admin/admin-audit.controller.d.ts.map +1 -0
  263. package/dist/web/admin/admin-audit.controller.js +53 -0
  264. package/dist/web/admin/admin-audit.controller.js.map +1 -0
  265. package/dist/web/admin/admin-bot.controller.d.ts +79 -0
  266. package/dist/web/admin/admin-bot.controller.d.ts.map +1 -0
  267. package/dist/web/admin/admin-bot.controller.js +193 -0
  268. package/dist/web/admin/admin-bot.controller.js.map +1 -0
  269. package/dist/web/admin/admin-developer.controller.d.ts +52 -0
  270. package/dist/web/admin/admin-developer.controller.d.ts.map +1 -0
  271. package/dist/web/admin/admin-developer.controller.js +160 -0
  272. package/dist/web/admin/admin-developer.controller.js.map +1 -0
  273. package/dist/web/admin/admin-machine.controller.d.ts +64 -0
  274. package/dist/web/admin/admin-machine.controller.d.ts.map +1 -0
  275. package/dist/web/admin/admin-machine.controller.js +111 -0
  276. package/dist/web/admin/admin-machine.controller.js.map +1 -0
  277. package/dist/web/admin/admin-project.controller.d.ts +45 -0
  278. package/dist/web/admin/admin-project.controller.d.ts.map +1 -0
  279. package/dist/web/admin/admin-project.controller.js +207 -0
  280. package/dist/web/admin/admin-project.controller.js.map +1 -0
  281. package/dist/web/admin/admin-settings.controller.d.ts +18 -0
  282. package/dist/web/admin/admin-settings.controller.d.ts.map +1 -0
  283. package/dist/web/admin/admin-settings.controller.js +93 -0
  284. package/dist/web/admin/admin-settings.controller.js.map +1 -0
  285. package/dist/web/admin/admin-token.controller.d.ts +45 -0
  286. package/dist/web/admin/admin-token.controller.d.ts.map +1 -0
  287. package/dist/web/admin/admin-token.controller.js +182 -0
  288. package/dist/web/admin/admin-token.controller.js.map +1 -0
  289. package/dist/web/dashboard.controller.d.ts +16 -0
  290. package/dist/web/dashboard.controller.d.ts.map +1 -0
  291. package/dist/web/dashboard.controller.js +78 -0
  292. package/dist/web/dashboard.controller.js.map +1 -0
  293. package/dist/web/dashboard.service.d.ts +39 -0
  294. package/dist/web/dashboard.service.d.ts.map +1 -0
  295. package/dist/web/dashboard.service.js +234 -0
  296. package/dist/web/dashboard.service.js.map +1 -0
  297. package/dist/web/interaction.service.d.ts +42 -0
  298. package/dist/web/interaction.service.d.ts.map +1 -0
  299. package/dist/web/interaction.service.js +102 -0
  300. package/dist/web/interaction.service.js.map +1 -0
  301. package/dist/web/machine.controller.d.ts +102 -0
  302. package/dist/web/machine.controller.d.ts.map +1 -0
  303. package/dist/web/machine.controller.js +121 -0
  304. package/dist/web/machine.controller.js.map +1 -0
  305. package/dist/web/notification.controller.d.ts +22 -0
  306. package/dist/web/notification.controller.d.ts.map +1 -0
  307. package/dist/web/notification.controller.js +70 -0
  308. package/dist/web/notification.controller.js.map +1 -0
  309. package/dist/web/profile.controller.d.ts +70 -0
  310. package/dist/web/profile.controller.d.ts.map +1 -0
  311. package/dist/web/profile.controller.js +262 -0
  312. package/dist/web/profile.controller.js.map +1 -0
  313. package/dist/web/project.controller.d.ts +8 -0
  314. package/dist/web/project.controller.d.ts.map +1 -0
  315. package/dist/web/project.controller.js +54 -0
  316. package/dist/web/project.controller.js.map +1 -0
  317. package/dist/web/pty.gateway.d.ts +32 -0
  318. package/dist/web/pty.gateway.d.ts.map +1 -0
  319. package/dist/web/pty.gateway.js +358 -0
  320. package/dist/web/pty.gateway.js.map +1 -0
  321. package/dist/web/search.service.d.ts +34 -0
  322. package/dist/web/search.service.d.ts.map +1 -0
  323. package/dist/web/search.service.js +106 -0
  324. package/dist/web/search.service.js.map +1 -0
  325. package/dist/web/task.controller.d.ts +54 -0
  326. package/dist/web/task.controller.d.ts.map +1 -0
  327. package/dist/web/task.controller.js +266 -0
  328. package/dist/web/task.controller.js.map +1 -0
  329. package/dist/web/web.module.d.ts +3 -0
  330. package/dist/web/web.module.d.ts.map +1 -0
  331. package/dist/web/web.module.js +97 -0
  332. package/dist/web/web.module.js.map +1 -0
  333. package/dist/web/worker-channel.gateway.d.ts +45 -0
  334. package/dist/web/worker-channel.gateway.d.ts.map +1 -0
  335. package/dist/web/worker-channel.gateway.js +283 -0
  336. package/dist/web/worker-channel.gateway.js.map +1 -0
  337. package/dist/web/worker.controller.d.ts +14 -0
  338. package/dist/web/worker.controller.d.ts.map +1 -0
  339. package/dist/web/worker.controller.js +73 -0
  340. package/dist/web/worker.controller.js.map +1 -0
  341. package/dist/web/workspace.controller.d.ts +109 -0
  342. package/dist/web/workspace.controller.d.ts.map +1 -0
  343. package/dist/web/workspace.controller.js +386 -0
  344. package/dist/web/workspace.controller.js.map +1 -0
  345. package/package.json +61 -0
@@ -0,0 +1,556 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ var Reconciler_1;
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.Reconciler = void 0;
47
+ const common_1 = require("@nestjs/common");
48
+ const crypto = __importStar(require("node:crypto"));
49
+ const protocol_1 = require("@overlordai/protocol");
50
+ const task_repository_1 = require("../database/repositories/task.repository");
51
+ const machine_repository_1 = require("../database/repositories/machine.repository");
52
+ const audit_log_repository_1 = require("../database/repositories/audit-log.repository");
53
+ const workspace_repository_1 = require("../database/repositories/workspace.repository");
54
+ const scheduler_service_1 = require("./scheduler.service");
55
+ const cleanup_service_1 = require("./cleanup.service");
56
+ const worker_connection_manager_1 = require("./worker-connection.manager");
57
+ let Reconciler = Reconciler_1 = class Reconciler {
58
+ taskRepo;
59
+ machineRepo;
60
+ auditLogRepo;
61
+ workspaceRepo;
62
+ schedulerService;
63
+ cleanupService;
64
+ workerConnectionManager;
65
+ logger = new common_1.Logger(Reconciler_1.name);
66
+ constructor(taskRepo, machineRepo, auditLogRepo, workspaceRepo, schedulerService, cleanupService, workerConnectionManager) {
67
+ this.taskRepo = taskRepo;
68
+ this.machineRepo = machineRepo;
69
+ this.auditLogRepo = auditLogRepo;
70
+ this.workspaceRepo = workspaceRepo;
71
+ this.schedulerService = schedulerService;
72
+ this.cleanupService = cleanupService;
73
+ this.workerConnectionManager = workerConnectionManager;
74
+ }
75
+ async onModuleInit() {
76
+ this.logger.log('Running boot reconciliation...');
77
+ await this.onBoot();
78
+ this.logger.log('Boot reconciliation complete');
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // onBoot — startup reconciliation
82
+ // ---------------------------------------------------------------------------
83
+ async onBoot() {
84
+ const now = Date.now();
85
+ let reEnqueuedCount = 0;
86
+ let failedStaleCount = 0;
87
+ // Step 1: Re-enqueue QUEUED/ASSIGNED tasks missing from BullMQ.
88
+ // On boot we conservatively re-enqueue all QUEUED tasks since BullMQ
89
+ // may have lost state during a restart.
90
+ const queuedTasks = this.taskRepo.findByStatus([protocol_1.TaskStatus.QUEUED]);
91
+ for (const task of queuedTasks) {
92
+ await this.schedulerService.enqueueTask(task.id);
93
+ reEnqueuedCount++;
94
+ this.logger.log(`Re-enqueued QUEUED task #${task.id}`);
95
+ }
96
+ // ASSIGNED tasks with offline/missing machines get reset to QUEUED
97
+ const assignedTasks = this.taskRepo.findByStatus([protocol_1.TaskStatus.ASSIGNED]);
98
+ for (const task of assignedTasks) {
99
+ if (task.machineId) {
100
+ const machine = this.machineRepo.findById(task.machineId);
101
+ if (!machine || machine.status === protocol_1.MachineStatus.OFFLINE) {
102
+ this.updateTaskStatusSafe(task.id, protocol_1.TaskStatus.QUEUED, task.revision, {
103
+ machineId: null,
104
+ assignedAt: null,
105
+ });
106
+ await this.schedulerService.enqueueTask(task.id);
107
+ reEnqueuedCount++;
108
+ this.logger.warn(`Reset ASSIGNED task #${task.id} to QUEUED (machine ${task.machineId} offline)`);
109
+ }
110
+ else {
111
+ // Machine online — re-enqueue so the scheduler can verify and re-dispatch
112
+ await this.schedulerService.enqueueTask(task.id);
113
+ reEnqueuedCount++;
114
+ }
115
+ }
116
+ else {
117
+ // No machine assigned — reset to QUEUED
118
+ this.updateTaskStatusSafe(task.id, protocol_1.TaskStatus.QUEUED, task.revision);
119
+ await this.schedulerService.enqueueTask(task.id);
120
+ reEnqueuedCount++;
121
+ }
122
+ }
123
+ // Step 2: Fail stale RUNNING/SUSPENDED tasks (grace 10 min).
124
+ const runningTasks = this.taskRepo.findByStatus([protocol_1.TaskStatus.RUNNING]);
125
+ for (const task of runningTasks) {
126
+ if (!task.machineId) {
127
+ this.updateTaskStatusSafe(task.id, protocol_1.TaskStatus.FAILED, task.revision, {
128
+ errorMessage: 'No machine assigned during boot reconciliation',
129
+ completedAt: new Date().toISOString(),
130
+ });
131
+ failedStaleCount++;
132
+ continue;
133
+ }
134
+ const machine = this.machineRepo.findById(task.machineId);
135
+ if (!machine || machine.status === protocol_1.MachineStatus.OFFLINE) {
136
+ const lastHeartbeat = machine?.lastHeartbeat
137
+ ? new Date(machine.lastHeartbeat).getTime()
138
+ : 0;
139
+ if (now - lastHeartbeat > protocol_1.GRACE_WINDOW_MS) {
140
+ this.updateTaskStatusSafe(task.id, protocol_1.TaskStatus.FAILED, task.revision, {
141
+ errorMessage: `Machine '${machine?.name ?? task.machineId}' offline beyond grace window (${Math.round((now - lastHeartbeat) / 1000)}s)`,
142
+ completedAt: new Date().toISOString(),
143
+ });
144
+ if (task.machineId)
145
+ this.scheduleWorkspaceCleanup(task.id, task.machineId);
146
+ failedStaleCount++;
147
+ this.logger.warn(`Failed stale RUNNING task #${task.id} (machine ${task.machineId} offline > ${protocol_1.GRACE_WINDOW_MS / 1000}s)`);
148
+ }
149
+ else {
150
+ // Within grace window: suspend and await Worker recovery
151
+ this.updateTaskStatusSafe(task.id, protocol_1.TaskStatus.SUSPENDED, task.revision);
152
+ this.logger.warn(`Suspended RUNNING task #${task.id} (machine ${task.machineId} offline, within grace window)`);
153
+ }
154
+ }
155
+ }
156
+ const suspendedTasks = this.taskRepo.findByStatus([protocol_1.TaskStatus.SUSPENDED]);
157
+ for (const task of suspendedTasks) {
158
+ if (!task.machineId) {
159
+ this.updateTaskStatusSafe(task.id, protocol_1.TaskStatus.FAILED, task.revision, {
160
+ errorMessage: 'No machine assigned during boot reconciliation',
161
+ completedAt: new Date().toISOString(),
162
+ });
163
+ failedStaleCount++;
164
+ continue;
165
+ }
166
+ const machine = this.machineRepo.findById(task.machineId);
167
+ if (!machine || machine.status === protocol_1.MachineStatus.OFFLINE) {
168
+ const lastHeartbeat = machine?.lastHeartbeat
169
+ ? new Date(machine.lastHeartbeat).getTime()
170
+ : 0;
171
+ if (now - lastHeartbeat > protocol_1.GRACE_WINDOW_MS) {
172
+ this.updateTaskStatusSafe(task.id, protocol_1.TaskStatus.FAILED, task.revision, {
173
+ errorMessage: `Machine '${machine?.name ?? task.machineId}' offline beyond grace window`,
174
+ completedAt: new Date().toISOString(),
175
+ });
176
+ if (task.machineId)
177
+ this.scheduleWorkspaceCleanup(task.id, task.machineId);
178
+ failedStaleCount++;
179
+ this.logger.warn(`Failed stale SUSPENDED task #${task.id} (machine ${task.machineId} offline > grace)`);
180
+ }
181
+ // Within grace: keep SUSPENDED, await Worker recovery
182
+ }
183
+ }
184
+ // Step 3: Remove stale BullMQ jobs for terminal tasks.
185
+ // BullMQ removeOnComplete/removeOnFail handles most cleanup.
186
+ // The scheduler's processJob re-checks status and skips stale tasks.
187
+ // Step 4: Recalculate active_slots for all machines and update DB if mismatched.
188
+ const allMachines = this.machineRepo.findAll();
189
+ for (const machine of allMachines) {
190
+ const actualSlots = this.machineRepo.countActiveSlots(machine.id);
191
+ if (machine.activeSlots !== actualSlots) {
192
+ this.machineRepo.updateActiveSlots(machine.id, actualSlots);
193
+ this.logger.log(`Machine '${machine.name}' active_slots corrected: ${machine.activeSlots} → ${actualSlots}`);
194
+ }
195
+ }
196
+ // Step 5: Write audit_log.
197
+ const globalActiveCount = this.taskRepo.countActive();
198
+ this.auditLogRepo.create({
199
+ action: 'dispatcher_reconcile',
200
+ resource: 'system',
201
+ detail: JSON.stringify({
202
+ reEnqueued: reEnqueuedCount,
203
+ failedStale: failedStaleCount,
204
+ globalActiveCount,
205
+ machinesChecked: allMachines.length,
206
+ }),
207
+ });
208
+ // Step 6 (branch g): Re-enqueue cleanup for terminal tasks with active workspaces.
209
+ // If a task reached a terminal state but its workspace was never cleaned up
210
+ // (e.g. the cleanup job was lost during a restart), schedule immediate cleanup.
211
+ const orphanedWorkspaces = this.workspaceRepo.findActiveForTerminalTasks();
212
+ let cleanupReEnqueuedCount = 0;
213
+ for (const workspace of orphanedWorkspaces) {
214
+ try {
215
+ await this.cleanupService.scheduleCleanup(workspace.taskId, workspace.machineId, workspace.path, 0);
216
+ cleanupReEnqueuedCount++;
217
+ this.logger.warn(`Re-enqueued cleanup for workspace #${workspace.id} (task #${workspace.taskId}, machine ${workspace.machineId})`);
218
+ }
219
+ catch (err) {
220
+ this.logger.error(`Failed to re-enqueue cleanup for workspace #${workspace.id} (task #${workspace.taskId}): ${err instanceof Error ? err.message : String(err)}`);
221
+ }
222
+ }
223
+ this.logger.log(`Boot reconciliation: re-enqueued=${reEnqueuedCount}, failed_stale=${failedStaleCount}, active_tasks=${globalActiveCount}, cleanup_re-enqueued=${cleanupReEnqueuedCount}`);
224
+ }
225
+ // ---------------------------------------------------------------------------
226
+ // handleReconnect — Worker reconnection reconciliation
227
+ //
228
+ // Processes 6 branches (a-f):
229
+ // a. SUSPENDED + still_running → RUNNING (if admission ok)
230
+ // b. SUSPENDED + completed_locally → COMPLETED
231
+ // c. FAILED + still_running → notify Worker cleanup
232
+ // d. FAILED + completed_locally → COMPLETED
233
+ // e. CANCELLED → notify Worker stop
234
+ // f. Not reported → FAILED
235
+ // ---------------------------------------------------------------------------
236
+ async handleReconnect(machineId, tasks) {
237
+ this.logger.log(`Reconciling reconnect for machine ${machineId} with ${tasks.length} reported task(s)`);
238
+ const machine = this.machineRepo.findById(machineId);
239
+ if (!machine) {
240
+ this.logger.warn(`Reconnect from unknown machine ${machineId}, ignoring`);
241
+ return [];
242
+ }
243
+ const actions = [];
244
+ const reportedTaskIds = new Set(tasks.map((t) => t.taskId));
245
+ const reportedTaskMap = new Map(tasks.map((t) => [t.taskId, t]));
246
+ // Get all tasks assigned to this machine in active or recent terminal states
247
+ const activeMachineTasks = this.taskRepo.findByMachineId(machineId, [
248
+ protocol_1.TaskStatus.RUNNING,
249
+ protocol_1.TaskStatus.SUSPENDED,
250
+ protocol_1.TaskStatus.ASSIGNED,
251
+ ]);
252
+ const terminalMachineTasks = this.taskRepo.findByMachineId(machineId, [
253
+ protocol_1.TaskStatus.FAILED,
254
+ protocol_1.TaskStatus.CANCELLED,
255
+ ]);
256
+ const allMachineTasks = [...activeMachineTasks, ...terminalMachineTasks];
257
+ // Process each machine task against the Worker's report
258
+ for (const task of allMachineTasks) {
259
+ const reported = reportedTaskMap.get(task.id);
260
+ if (reported) {
261
+ const action = this.reconcileReportedTask(machine, task, reported);
262
+ actions.push({ taskId: task.id, action });
263
+ }
264
+ else if (task.status === protocol_1.TaskStatus.RUNNING ||
265
+ task.status === protocol_1.TaskStatus.SUSPENDED) {
266
+ // Branch (f): Dispatcher has task but Worker did not report it.
267
+ // Worker lost execution context (process exited / Worker restarted).
268
+ this.updateTaskStatusSafe(task.id, protocol_1.TaskStatus.FAILED, task.revision, {
269
+ errorMessage: `Worker '${machine.name}' reconnected but did not report this task (execution context lost)`,
270
+ completedAt: new Date().toISOString(),
271
+ });
272
+ if (task.machineId)
273
+ this.scheduleWorkspaceCleanup(task.id, task.machineId);
274
+ this.auditLogRepo.create({
275
+ action: 'reconcile_unreported_failed',
276
+ resource: `task:${task.id}`,
277
+ detail: `Task not reported by Worker '${machine.name}' during reconnect`,
278
+ });
279
+ actions.push({ taskId: task.id, action: 'failed_unreported' });
280
+ this.logger.warn(`Task #${task.id} (${task.status}) not reported by Worker, marked FAILED`);
281
+ }
282
+ else if (task.status === protocol_1.TaskStatus.ASSIGNED) {
283
+ // ASSIGNED but not reported — reset to QUEUED for rescheduling
284
+ this.updateTaskStatusSafe(task.id, protocol_1.TaskStatus.QUEUED, task.revision, {
285
+ machineId: null,
286
+ assignedAt: null,
287
+ });
288
+ await this.schedulerService.enqueueTask(task.id);
289
+ actions.push({ taskId: task.id, action: 'reset_to_queued' });
290
+ this.logger.warn(`Task #${task.id} (ASSIGNED) not reported by Worker, reset to QUEUED`);
291
+ }
292
+ }
293
+ // Handle tasks reported by Worker that Dispatcher doesn't have on this machine
294
+ for (const reported of tasks) {
295
+ if (allMachineTasks.some((t) => t.id === reported.taskId))
296
+ continue;
297
+ const task = this.taskRepo.findById(reported.taskId);
298
+ if (!task) {
299
+ this.logger.warn(`Worker reported unknown task #${reported.taskId}, requesting cleanup`);
300
+ this.sendCleanupToWorker(machineId, reported.taskId);
301
+ actions.push({ taskId: reported.taskId, action: 'cleanup_unknown' });
302
+ continue;
303
+ }
304
+ // Task exists but is assigned to a different machine or already processed
305
+ const action = this.reconcileReportedTask(machine, task, reported);
306
+ actions.push({ taskId: task.id, action });
307
+ }
308
+ this.logger.log(`Reconnect reconciliation for machine ${machineId}: ${actions.length} tasks processed`);
309
+ return actions;
310
+ }
311
+ // ---------------------------------------------------------------------------
312
+ // Private: reconcile a single reported task (branches a-e)
313
+ // ---------------------------------------------------------------------------
314
+ reconcileReportedTask(machine, task, reported) {
315
+ const { taskId, localStatus, currentStage, branch, mrUrl, errorMessage } = reported;
316
+ switch (task.status) {
317
+ // Branch (a): SUSPENDED + still_running → RUNNING (if admission ok)
318
+ // Branch (b): SUSPENDED + completed_locally → COMPLETED
319
+ case protocol_1.TaskStatus.SUSPENDED: {
320
+ if (localStatus === 'still_running') {
321
+ const activeCount = this.taskRepo.countActive();
322
+ if (activeCount < protocol_1.MAX_CONCURRENT_TASKS) {
323
+ const extra = {};
324
+ if (currentStage)
325
+ extra['currentStage'] = currentStage;
326
+ this.updateTaskStatusSafe(taskId, protocol_1.TaskStatus.RUNNING, task.revision, extra);
327
+ // Send resume frame to Worker
328
+ const resumeFrame = {
329
+ type: 'resume',
330
+ msgId: crypto.randomUUID(),
331
+ taskId,
332
+ };
333
+ this.workerConnectionManager.send(machine.id, resumeFrame);
334
+ this.logger.log(`Task #${taskId}: SUSPENDED → RUNNING (reconnect, admission ok)`);
335
+ return 'resumed';
336
+ }
337
+ // Admission blocked — keep SUSPENDED
338
+ this.logger.log(`Task #${taskId}: kept SUSPENDED (admission blocked, active=${activeCount}/${protocol_1.MAX_CONCURRENT_TASKS})`);
339
+ this.auditLogRepo.create({
340
+ action: 'reconcile_admission_blocked',
341
+ resource: `task:${taskId}`,
342
+ detail: `Admission control blocked resume (active=${activeCount}/${protocol_1.MAX_CONCURRENT_TASKS})`,
343
+ });
344
+ return 'admission_blocked';
345
+ }
346
+ if (localStatus === 'completed_locally') {
347
+ const extra = {
348
+ completedAt: new Date().toISOString(),
349
+ };
350
+ if (branch)
351
+ extra['branch'] = branch;
352
+ if (mrUrl)
353
+ extra['mrUrl'] = mrUrl;
354
+ this.updateTaskStatusSafe(taskId, protocol_1.TaskStatus.COMPLETED, task.revision, extra);
355
+ if (task.machineId)
356
+ this.scheduleWorkspaceCleanup(taskId, task.machineId);
357
+ this.logger.log(`Task #${taskId}: SUSPENDED → COMPLETED (completed during disconnect)`);
358
+ return 'completed';
359
+ }
360
+ if (localStatus === 'failed_locally') {
361
+ this.updateTaskStatusSafe(taskId, protocol_1.TaskStatus.FAILED, task.revision, {
362
+ errorMessage: errorMessage ?? 'Task failed locally during disconnect',
363
+ completedAt: new Date().toISOString(),
364
+ });
365
+ if (task.machineId)
366
+ this.scheduleWorkspaceCleanup(taskId, task.machineId);
367
+ this.logger.log(`Task #${taskId}: SUSPENDED → FAILED (failed during disconnect)`);
368
+ return 'failed';
369
+ }
370
+ return 'no_op';
371
+ }
372
+ // Branch (c): FAILED + still_running → notify Worker cleanup
373
+ // Branch (d): FAILED + completed_locally → restore to COMPLETED
374
+ case protocol_1.TaskStatus.FAILED: {
375
+ if (localStatus === 'still_running') {
376
+ this.logger.log(`Task #${taskId}: FAILED but still running on Worker, sending cancel`);
377
+ this.sendCancelToWorker(machine.id, taskId);
378
+ return 'send_cancel';
379
+ }
380
+ if (localStatus === 'completed_locally') {
381
+ const extra = {
382
+ completedAt: new Date().toISOString(),
383
+ errorMessage: null,
384
+ };
385
+ if (branch)
386
+ extra['branch'] = branch;
387
+ if (mrUrl)
388
+ extra['mrUrl'] = mrUrl;
389
+ this.updateTaskStatusSafe(taskId, protocol_1.TaskStatus.COMPLETED, task.revision, extra);
390
+ if (task.machineId)
391
+ this.scheduleWorkspaceCleanup(taskId, task.machineId);
392
+ this.auditLogRepo.create({
393
+ action: 'reconcile_restore_completed',
394
+ resource: `task:${taskId}`,
395
+ detail: 'Task restored from FAILED to COMPLETED (completed during disconnect)',
396
+ });
397
+ this.logger.log(`Task #${taskId}: FAILED → COMPLETED (actually completed during disconnect)`);
398
+ return 'restored_completed';
399
+ }
400
+ return 'no_op';
401
+ }
402
+ // Branch (e): CANCELLED → notify Worker to stop
403
+ case protocol_1.TaskStatus.CANCELLED: {
404
+ if (localStatus === 'still_running' ||
405
+ localStatus === 'completed_locally') {
406
+ // Keep CANCELLED (user intent priority), notify Worker to stop
407
+ this.logger.log(`Task #${taskId}: CANCELLED, notifying Worker to stop (localStatus=${localStatus})`);
408
+ this.sendCancelToWorker(machine.id, taskId);
409
+ if (localStatus === 'completed_locally') {
410
+ this.auditLogRepo.create({
411
+ action: 'reconcile_cancelled_but_completed',
412
+ resource: `task:${taskId}`,
413
+ detail: 'Task was CANCELLED but Worker reports completed_locally. Keeping CANCELLED (user intent).',
414
+ });
415
+ }
416
+ return 'send_cancel';
417
+ }
418
+ return 'already_terminal';
419
+ }
420
+ // RUNNING: Worker confirms still running or reports completion/failure
421
+ case protocol_1.TaskStatus.RUNNING: {
422
+ if (localStatus === 'still_running') {
423
+ if (currentStage && currentStage !== task.currentStage) {
424
+ this.updateTaskStatusSafe(taskId, protocol_1.TaskStatus.RUNNING, task.revision, { currentStage });
425
+ }
426
+ return 'no_op';
427
+ }
428
+ if (localStatus === 'completed_locally') {
429
+ const extra = {
430
+ completedAt: new Date().toISOString(),
431
+ };
432
+ if (branch)
433
+ extra['branch'] = branch;
434
+ if (mrUrl)
435
+ extra['mrUrl'] = mrUrl;
436
+ this.updateTaskStatusSafe(taskId, protocol_1.TaskStatus.COMPLETED, task.revision, extra);
437
+ if (task.machineId)
438
+ this.scheduleWorkspaceCleanup(taskId, task.machineId);
439
+ this.logger.log(`Task #${taskId}: RUNNING → COMPLETED (completed during disconnect)`);
440
+ return 'completed';
441
+ }
442
+ if (localStatus === 'failed_locally') {
443
+ this.updateTaskStatusSafe(taskId, protocol_1.TaskStatus.FAILED, task.revision, {
444
+ errorMessage: errorMessage ?? 'Task failed locally during disconnect',
445
+ completedAt: new Date().toISOString(),
446
+ });
447
+ if (task.machineId)
448
+ this.scheduleWorkspaceCleanup(taskId, task.machineId);
449
+ this.logger.log(`Task #${taskId}: RUNNING → FAILED (failed during disconnect)`);
450
+ return 'failed';
451
+ }
452
+ return 'no_op';
453
+ }
454
+ // ASSIGNED: Worker may have started executing before we recorded RUNNING
455
+ case protocol_1.TaskStatus.ASSIGNED: {
456
+ if (localStatus === 'still_running') {
457
+ this.updateTaskStatusSafe(taskId, protocol_1.TaskStatus.RUNNING, task.revision, {
458
+ startedAt: new Date().toISOString(),
459
+ });
460
+ this.logger.log(`Task #${taskId}: ASSIGNED → RUNNING (Worker reports still_running)`);
461
+ return 'promoted_to_running';
462
+ }
463
+ if (localStatus === 'completed_locally') {
464
+ const extra = {
465
+ completedAt: new Date().toISOString(),
466
+ startedAt: task.startedAt ?? new Date().toISOString(),
467
+ };
468
+ if (branch)
469
+ extra['branch'] = branch;
470
+ if (mrUrl)
471
+ extra['mrUrl'] = mrUrl;
472
+ this.updateTaskStatusSafe(taskId, protocol_1.TaskStatus.COMPLETED, task.revision, extra);
473
+ if (task.machineId)
474
+ this.scheduleWorkspaceCleanup(taskId, task.machineId);
475
+ this.logger.log(`Task #${taskId}: ASSIGNED → COMPLETED (completed locally)`);
476
+ return 'completed';
477
+ }
478
+ return 'no_op';
479
+ }
480
+ case protocol_1.TaskStatus.COMPLETED:
481
+ return 'already_terminal';
482
+ default:
483
+ this.logger.debug(`Task #${taskId} in status ${task.status} — no reconciliation action`);
484
+ return 'no_op';
485
+ }
486
+ }
487
+ // ---------------------------------------------------------------------------
488
+ // Private helpers
489
+ // ---------------------------------------------------------------------------
490
+ /**
491
+ * Update task status with CAS retry, logging on failure instead of throwing.
492
+ * Best-effort for reconciliation — continues processing other tasks on failure.
493
+ */
494
+ updateTaskStatusSafe(taskId, status, initialRevision, extra) {
495
+ let revision = initialRevision;
496
+ for (let attempt = 0; attempt < protocol_1.CAS_MAX_RETRIES; attempt++) {
497
+ const success = this.taskRepo.updateStatus(taskId, status, revision, extra);
498
+ if (success)
499
+ return true;
500
+ const freshTask = this.taskRepo.findById(taskId);
501
+ if (!freshTask) {
502
+ this.logger.error(`Task #${taskId} disappeared during CAS retry (reconciliation)`);
503
+ return false;
504
+ }
505
+ // Already at target status — success
506
+ if (freshTask.status === status)
507
+ return true;
508
+ revision = freshTask.revision;
509
+ }
510
+ this.logger.error(`CAS retry exhausted for task #${taskId} → ${status} during reconciliation (${protocol_1.CAS_MAX_RETRIES} attempts)`);
511
+ return false;
512
+ }
513
+ /** Send cancel frame to a Worker for a specific task. */
514
+ sendCancelToWorker(machineId, taskId) {
515
+ const frame = {
516
+ type: 'cancel',
517
+ msgId: crypto.randomUUID(),
518
+ taskId,
519
+ };
520
+ this.workerConnectionManager.send(machineId, frame);
521
+ }
522
+ /** Send cleanup instruction to Worker for a specific task. */
523
+ sendCleanupToWorker(machineId, taskId) {
524
+ const workspace = this.workspaceRepo.findByTaskId(taskId);
525
+ const frame = {
526
+ type: 'cleanup_workspace',
527
+ msgId: crypto.randomUUID(),
528
+ taskId,
529
+ workspacePath: workspace?.path ?? '',
530
+ };
531
+ this.workerConnectionManager.send(machineId, frame);
532
+ }
533
+ /** Schedule workspace cleanup for a task that reached a terminal state. */
534
+ scheduleWorkspaceCleanup(taskId, machineId) {
535
+ const workspace = this.workspaceRepo.findByTaskId(taskId);
536
+ if (workspace) {
537
+ this.cleanupService
538
+ .scheduleCleanup(taskId, machineId, workspace.path)
539
+ .catch((err) => {
540
+ this.logger.error(`Failed to schedule cleanup for task #${taskId}: ${err instanceof Error ? err.message : String(err)}`);
541
+ });
542
+ }
543
+ }
544
+ };
545
+ exports.Reconciler = Reconciler;
546
+ exports.Reconciler = Reconciler = Reconciler_1 = __decorate([
547
+ (0, common_1.Injectable)(),
548
+ __metadata("design:paramtypes", [task_repository_1.TaskRepository,
549
+ machine_repository_1.MachineRepository,
550
+ audit_log_repository_1.AuditLogRepository,
551
+ workspace_repository_1.WorkspaceRepository,
552
+ scheduler_service_1.SchedulerService,
553
+ cleanup_service_1.CleanupService,
554
+ worker_connection_manager_1.WorkerConnectionManager])
555
+ ], Reconciler);
556
+ //# sourceMappingURL=reconciler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconciler.js","sourceRoot":"","sources":["../../src/dispatcher/reconciler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import { RedisService } from '../redis/redis.service';
3
+ import { TaskRepository } from '../database/repositories/task.repository';
4
+ import { MachineRepository } from '../database/repositories/machine.repository';
5
+ import { DeveloperRepository } from '../database/repositories/developer.repository';
6
+ import { AuthService } from '../auth/auth.service';
7
+ import { MachineSelector } from './machine-selector';
8
+ import { WorkerConnectionManager } from './worker-connection.manager';
9
+ export declare class SchedulerService implements OnModuleInit, OnModuleDestroy {
10
+ private readonly redis;
11
+ private readonly taskRepo;
12
+ private readonly machineRepo;
13
+ private readonly machineSelector;
14
+ private readonly workerConnMgr;
15
+ private readonly authService;
16
+ private readonly developerRepo;
17
+ private readonly logger;
18
+ private queue;
19
+ private worker;
20
+ private pollTimer;
21
+ constructor(redis: RedisService, taskRepo: TaskRepository, machineRepo: MachineRepository, machineSelector: MachineSelector, workerConnMgr: WorkerConnectionManager, authService: AuthService, developerRepo: DeveloperRepository);
22
+ onModuleInit(): Promise<void>;
23
+ onModuleDestroy(): Promise<void>;
24
+ /**
25
+ * Enqueue a task for immediate scheduling (used when a new task is created).
26
+ */
27
+ enqueueTask(taskId: number): Promise<void>;
28
+ /**
29
+ * Enqueue a task for resume (used when a suspended task's machine comes back online).
30
+ */
31
+ enqueueResume(taskId: number): Promise<void>;
32
+ /**
33
+ * Poll for QUEUED tasks and enqueue them for processing.
34
+ * Also check SUSPENDED tasks whose machines are back online.
35
+ */
36
+ private pollQueuedTasks;
37
+ /**
38
+ * Process a single scheduler job.
39
+ */
40
+ private processJob;
41
+ /**
42
+ * Attempt to assign a QUEUED task to a machine and transition to ASSIGNED.
43
+ */
44
+ private processScheduleTask;
45
+ /**
46
+ * Attempt to resume a SUSPENDED task on its assigned machine.
47
+ */
48
+ private processResumeTask;
49
+ }
50
+ //# sourceMappingURL=scheduler.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.service.d.ts","sourceRoot":"","sources":["../../src/dispatcher/scheduler.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EACZ,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAWxB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAStE,qBACa,gBAAiB,YAAW,YAAY,EAAE,eAAe;IAOlE,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAZhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAA+C;gBAG7C,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,iBAAiB,EAC9B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,uBAAuB,EACtC,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,mBAAmB;IAG/C,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA+C7B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtC;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD;;;OAGG;YACW,eAAe;IAoC7B;;OAEG;YACW,UAAU;IAgBxB;;OAEG;YACW,mBAAmB;IA6IjC;;OAEG;YACW,iBAAiB;CA0ChC"}