@overlordai/server 1.0.53 → 1.0.55

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 (533) hide show
  1. package/database/migrations/001-init-schema.sql +73 -9
  2. package/dist/adapters/adapter.interface.d.ts +1 -4
  3. package/dist/adapters/adapter.interface.d.ts.map +1 -1
  4. package/dist/adapters/adapter.interface.js.map +1 -1
  5. package/dist/adapters/adapter.module.d.ts.map +1 -1
  6. package/dist/adapters/adapter.module.js +8 -7
  7. package/dist/adapters/adapter.module.js.map +1 -1
  8. package/dist/adapters/lark/lark-card.builder.d.ts +1 -25
  9. package/dist/adapters/lark/lark-card.builder.d.ts.map +1 -1
  10. package/dist/adapters/lark/lark-card.builder.js +6 -110
  11. package/dist/adapters/lark/lark-card.builder.js.map +1 -1
  12. package/dist/adapters/lark/lark-message.parser.d.ts +4 -4
  13. package/dist/adapters/lark/lark-message.parser.d.ts.map +1 -1
  14. package/dist/adapters/lark/lark-message.parser.js +20 -13
  15. package/dist/adapters/lark/lark-message.parser.js.map +1 -1
  16. package/dist/adapters/lark/lark-signature.d.ts.map +1 -1
  17. package/dist/adapters/lark/lark-signature.js +6 -0
  18. package/dist/adapters/lark/lark-signature.js.map +1 -1
  19. package/dist/adapters/lark/lark.adapter.d.ts +14 -9
  20. package/dist/adapters/lark/lark.adapter.d.ts.map +1 -1
  21. package/dist/adapters/lark/lark.adapter.js +99 -177
  22. package/dist/adapters/lark/lark.adapter.js.map +1 -1
  23. package/dist/adapters/lark/lark.controller.d.ts +10 -1
  24. package/dist/adapters/lark/lark.controller.d.ts.map +1 -1
  25. package/dist/adapters/lark/lark.controller.js +48 -14
  26. package/dist/adapters/lark/lark.controller.js.map +1 -1
  27. package/dist/adapters/slack/slack-block.builder.d.ts +8 -0
  28. package/dist/adapters/slack/slack-block.builder.d.ts.map +1 -0
  29. package/dist/adapters/slack/slack-block.builder.js +117 -0
  30. package/dist/adapters/slack/slack-block.builder.js.map +1 -0
  31. package/dist/adapters/slack/slack-message.parser.d.ts +15 -0
  32. package/dist/adapters/slack/slack-message.parser.d.ts.map +1 -0
  33. package/dist/adapters/slack/slack-message.parser.js +158 -0
  34. package/dist/adapters/slack/slack-message.parser.js.map +1 -0
  35. package/dist/adapters/slack/slack-signature.d.ts +7 -0
  36. package/dist/adapters/slack/slack-signature.d.ts.map +1 -0
  37. package/dist/adapters/slack/slack-signature.js +59 -0
  38. package/dist/adapters/slack/slack-signature.js.map +1 -0
  39. package/dist/adapters/slack/slack.adapter.d.ts +67 -13
  40. package/dist/adapters/slack/slack.adapter.d.ts.map +1 -1
  41. package/dist/adapters/slack/slack.adapter.js +468 -19
  42. package/dist/adapters/slack/slack.adapter.js.map +1 -1
  43. package/dist/adapters/slack/slack.controller.d.ts +20 -0
  44. package/dist/adapters/slack/slack.controller.d.ts.map +1 -0
  45. package/dist/adapters/slack/slack.controller.js +257 -0
  46. package/dist/adapters/slack/slack.controller.js.map +1 -0
  47. package/dist/app.module.d.ts.map +1 -1
  48. package/dist/app.module.js +4 -0
  49. package/dist/app.module.js.map +1 -1
  50. package/dist/auth/auth.controller.d.ts.map +1 -1
  51. package/dist/auth/auth.controller.js +1 -0
  52. package/dist/auth/auth.controller.js.map +1 -1
  53. package/dist/auth/auth.module.d.ts.map +1 -1
  54. package/dist/auth/auth.module.js +4 -5
  55. package/dist/auth/auth.module.js.map +1 -1
  56. package/dist/auth/auth.service.d.ts +9 -2
  57. package/dist/auth/auth.service.d.ts.map +1 -1
  58. package/dist/auth/auth.service.js +50 -79
  59. package/dist/auth/auth.service.js.map +1 -1
  60. package/dist/auth/authenticated-request.d.ts +10 -0
  61. package/dist/auth/authenticated-request.d.ts.map +1 -0
  62. package/dist/auth/authenticated-request.js +3 -0
  63. package/dist/auth/authenticated-request.js.map +1 -0
  64. package/dist/auth/extract-user.middleware.d.ts.map +1 -1
  65. package/dist/auth/extract-user.middleware.js +2 -1
  66. package/dist/auth/extract-user.middleware.js.map +1 -1
  67. package/dist/auth/guards/jwt-auth.guard.d.ts.map +1 -1
  68. package/dist/auth/guards/jwt-auth.guard.js +5 -2
  69. package/dist/auth/guards/jwt-auth.guard.js.map +1 -1
  70. package/dist/auth/guards/project-role.guard.d.ts.map +1 -1
  71. package/dist/auth/guards/project-role.guard.js +6 -8
  72. package/dist/auth/guards/project-role.guard.js.map +1 -1
  73. package/dist/auth/jwt.strategy.d.ts +6 -3
  74. package/dist/auth/jwt.strategy.d.ts.map +1 -1
  75. package/dist/auth/jwt.strategy.js +15 -5
  76. package/dist/auth/jwt.strategy.js.map +1 -1
  77. package/dist/common/command-parser.d.ts +29 -0
  78. package/dist/common/command-parser.d.ts.map +1 -0
  79. package/dist/common/command-parser.js +133 -0
  80. package/dist/common/command-parser.js.map +1 -0
  81. package/dist/common/config.d.ts +17 -0
  82. package/dist/common/config.d.ts.map +1 -0
  83. package/dist/common/config.js +47 -0
  84. package/dist/common/config.js.map +1 -0
  85. package/dist/common/crypto.service.d.ts +4 -1
  86. package/dist/common/crypto.service.d.ts.map +1 -1
  87. package/dist/common/crypto.service.js +14 -7
  88. package/dist/common/crypto.service.js.map +1 -1
  89. package/dist/common/error-filter.d.ts +1 -0
  90. package/dist/common/error-filter.d.ts.map +1 -1
  91. package/dist/common/error-filter.js +6 -2
  92. package/dist/common/error-filter.js.map +1 -1
  93. package/dist/common/git-utils.d.ts +9 -0
  94. package/dist/common/git-utils.d.ts.map +1 -0
  95. package/dist/common/git-utils.js +41 -0
  96. package/dist/common/git-utils.js.map +1 -0
  97. package/dist/common/health.controller.d.ts.map +1 -1
  98. package/dist/common/health.controller.js +3 -5
  99. package/dist/common/health.controller.js.map +1 -1
  100. package/dist/common/machine-utils.d.ts +32 -0
  101. package/dist/common/machine-utils.d.ts.map +1 -0
  102. package/dist/common/machine-utils.js +12 -0
  103. package/dist/common/machine-utils.js.map +1 -0
  104. package/dist/common/pagination.d.ts +12 -5
  105. package/dist/common/pagination.d.ts.map +1 -1
  106. package/dist/common/pagination.js +27 -17
  107. package/dist/common/pagination.js.map +1 -1
  108. package/dist/common/project-validation.d.ts +7 -0
  109. package/dist/common/project-validation.d.ts.map +1 -0
  110. package/dist/common/project-validation.js +86 -0
  111. package/dist/common/project-validation.js.map +1 -0
  112. package/dist/common/rate-limit.guard.d.ts +4 -3
  113. package/dist/common/rate-limit.guard.d.ts.map +1 -1
  114. package/dist/common/rate-limit.guard.js +14 -5
  115. package/dist/common/rate-limit.guard.js.map +1 -1
  116. package/dist/common/sql-utils.d.ts +6 -0
  117. package/dist/common/sql-utils.d.ts.map +1 -0
  118. package/dist/common/sql-utils.js +11 -0
  119. package/dist/common/sql-utils.js.map +1 -0
  120. package/dist/common/string-utils.d.ts +6 -0
  121. package/dist/common/string-utils.d.ts.map +1 -0
  122. package/dist/common/string-utils.js +15 -0
  123. package/dist/common/string-utils.js.map +1 -0
  124. package/dist/common/worker-utils.d.ts +31 -0
  125. package/dist/common/worker-utils.d.ts.map +1 -0
  126. package/dist/common/worker-utils.js +12 -0
  127. package/dist/common/worker-utils.js.map +1 -0
  128. package/dist/database/base.repository.d.ts +56 -0
  129. package/dist/database/base.repository.d.ts.map +1 -0
  130. package/dist/database/base.repository.js +82 -0
  131. package/dist/database/base.repository.js.map +1 -0
  132. package/dist/database/database.service.d.ts.map +1 -1
  133. package/dist/database/database.service.js +9 -1
  134. package/dist/database/database.service.js.map +1 -1
  135. package/dist/database/migration-runner.d.ts.map +1 -1
  136. package/dist/database/migration-runner.js +2 -1
  137. package/dist/database/migration-runner.js.map +1 -1
  138. package/dist/database/repositories/audit-log.repository.d.ts.map +1 -1
  139. package/dist/database/repositories/audit-log.repository.js +16 -18
  140. package/dist/database/repositories/audit-log.repository.js.map +1 -1
  141. package/dist/database/repositories/bot.repository.d.ts +18 -32
  142. package/dist/database/repositories/bot.repository.d.ts.map +1 -1
  143. package/dist/database/repositories/bot.repository.js +42 -21
  144. package/dist/database/repositories/bot.repository.js.map +1 -1
  145. package/dist/database/repositories/developer-token.repository.d.ts +7 -17
  146. package/dist/database/repositories/developer-token.repository.d.ts.map +1 -1
  147. package/dist/database/repositories/developer-token.repository.js +24 -15
  148. package/dist/database/repositories/developer-token.repository.js.map +1 -1
  149. package/dist/database/repositories/developer.repository.d.ts +5 -1
  150. package/dist/database/repositories/developer.repository.d.ts.map +1 -1
  151. package/dist/database/repositories/developer.repository.js +60 -49
  152. package/dist/database/repositories/developer.repository.js.map +1 -1
  153. package/dist/database/repositories/machine.repository.d.ts.map +1 -1
  154. package/dist/database/repositories/machine.repository.js +2 -7
  155. package/dist/database/repositories/machine.repository.js.map +1 -1
  156. package/dist/database/repositories/notification.repository.d.ts +1 -0
  157. package/dist/database/repositories/notification.repository.d.ts.map +1 -1
  158. package/dist/database/repositories/notification.repository.js +25 -20
  159. package/dist/database/repositories/notification.repository.js.map +1 -1
  160. package/dist/database/repositories/project-member.repository.d.ts +7 -16
  161. package/dist/database/repositories/project-member.repository.d.ts.map +1 -1
  162. package/dist/database/repositories/project-member.repository.js +34 -24
  163. package/dist/database/repositories/project-member.repository.js.map +1 -1
  164. package/dist/database/repositories/project.repository.d.ts +2 -1
  165. package/dist/database/repositories/project.repository.d.ts.map +1 -1
  166. package/dist/database/repositories/project.repository.js +70 -71
  167. package/dist/database/repositories/project.repository.js.map +1 -1
  168. package/dist/database/repositories/session.repository.d.ts.map +1 -1
  169. package/dist/database/repositories/session.repository.js +22 -25
  170. package/dist/database/repositories/session.repository.js.map +1 -1
  171. package/dist/database/repositories/task.repository.d.ts +31 -7
  172. package/dist/database/repositories/task.repository.d.ts.map +1 -1
  173. package/dist/database/repositories/task.repository.js +134 -86
  174. package/dist/database/repositories/task.repository.js.map +1 -1
  175. package/dist/database/repositories/worker-token.repository.d.ts.map +1 -1
  176. package/dist/database/repositories/worker-token.repository.js +18 -16
  177. package/dist/database/repositories/worker-token.repository.js.map +1 -1
  178. package/dist/database/repositories/worker.repository.d.ts +50 -0
  179. package/dist/database/repositories/worker.repository.d.ts.map +1 -0
  180. package/dist/database/repositories/worker.repository.js +215 -0
  181. package/dist/database/repositories/worker.repository.js.map +1 -0
  182. package/dist/database/repositories/workspace.repository.d.ts +3 -2
  183. package/dist/database/repositories/workspace.repository.d.ts.map +1 -1
  184. package/dist/database/repositories/workspace.repository.js +29 -21
  185. package/dist/database/repositories/workspace.repository.js.map +1 -1
  186. package/dist/database/repository.module.d.ts +3 -0
  187. package/dist/database/repository.module.d.ts.map +1 -0
  188. package/dist/database/repository.module.js +45 -0
  189. package/dist/database/repository.module.js.map +1 -0
  190. package/dist/dispatcher/capability.service.d.ts +19 -14
  191. package/dist/dispatcher/capability.service.d.ts.map +1 -1
  192. package/dist/dispatcher/capability.service.js +77 -69
  193. package/dist/dispatcher/capability.service.js.map +1 -1
  194. package/dist/dispatcher/cleanup.service.d.ts +1 -1
  195. package/dist/dispatcher/cleanup.service.d.ts.map +1 -1
  196. package/dist/dispatcher/cleanup.service.js +13 -13
  197. package/dist/dispatcher/cleanup.service.js.map +1 -1
  198. package/dist/dispatcher/dedup.service.d.ts +17 -3
  199. package/dist/dispatcher/dedup.service.d.ts.map +1 -1
  200. package/dist/dispatcher/dedup.service.js +76 -82
  201. package/dist/dispatcher/dedup.service.js.map +1 -1
  202. package/dist/dispatcher/dispatcher.module.d.ts.map +1 -1
  203. package/dist/dispatcher/dispatcher.module.js +11 -18
  204. package/dist/dispatcher/dispatcher.module.js.map +1 -1
  205. package/dist/dispatcher/dispatcher.service.d.ts +14 -116
  206. package/dist/dispatcher/dispatcher.service.d.ts.map +1 -1
  207. package/dist/dispatcher/dispatcher.service.js +62 -940
  208. package/dist/dispatcher/dispatcher.service.js.map +1 -1
  209. package/dist/dispatcher/dispatcher.types.d.ts +33 -0
  210. package/dist/dispatcher/dispatcher.types.d.ts.map +1 -0
  211. package/dist/dispatcher/dispatcher.types.js +3 -0
  212. package/dist/dispatcher/dispatcher.types.js.map +1 -0
  213. package/dist/dispatcher/heartbeat.service.d.ts +17 -10
  214. package/dist/dispatcher/heartbeat.service.d.ts.map +1 -1
  215. package/dist/dispatcher/heartbeat.service.js +47 -51
  216. package/dist/dispatcher/heartbeat.service.js.map +1 -1
  217. package/dist/dispatcher/pty-relay.service.d.ts.map +1 -1
  218. package/dist/dispatcher/pty-relay.service.js +7 -15
  219. package/dist/dispatcher/pty-relay.service.js.map +1 -1
  220. package/dist/dispatcher/reconciler.d.ts +18 -8
  221. package/dist/dispatcher/reconciler.d.ts.map +1 -1
  222. package/dist/dispatcher/reconciler.js +219 -130
  223. package/dist/dispatcher/reconciler.js.map +1 -1
  224. package/dist/dispatcher/scheduler.service.d.ts +15 -9
  225. package/dist/dispatcher/scheduler.service.d.ts.map +1 -1
  226. package/dist/dispatcher/scheduler.service.js +95 -53
  227. package/dist/dispatcher/scheduler.service.js.map +1 -1
  228. package/dist/dispatcher/state-machine.d.ts.map +1 -1
  229. package/dist/dispatcher/state-machine.js +1 -5
  230. package/dist/dispatcher/state-machine.js.map +1 -1
  231. package/dist/dispatcher/task-creation.service.d.ts +30 -0
  232. package/dist/dispatcher/task-creation.service.d.ts.map +1 -0
  233. package/dist/dispatcher/task-creation.service.js +242 -0
  234. package/dist/dispatcher/task-creation.service.js.map +1 -0
  235. package/dist/dispatcher/task-lifecycle.service.d.ts +63 -0
  236. package/dist/dispatcher/task-lifecycle.service.d.ts.map +1 -0
  237. package/dist/dispatcher/task-lifecycle.service.js +584 -0
  238. package/dist/dispatcher/task-lifecycle.service.js.map +1 -0
  239. package/dist/dispatcher/task-log-batcher.d.ts.map +1 -1
  240. package/dist/dispatcher/task-log-batcher.js +4 -11
  241. package/dist/dispatcher/task-log-batcher.js.map +1 -1
  242. package/dist/dispatcher/worker-auth.service.d.ts +29 -0
  243. package/dist/dispatcher/worker-auth.service.d.ts.map +1 -0
  244. package/dist/dispatcher/worker-auth.service.js +296 -0
  245. package/dist/dispatcher/worker-auth.service.js.map +1 -0
  246. package/dist/dispatcher/worker-connection.manager.d.ts +15 -15
  247. package/dist/dispatcher/worker-connection.manager.d.ts.map +1 -1
  248. package/dist/dispatcher/worker-connection.manager.js +35 -43
  249. package/dist/dispatcher/worker-connection.manager.js.map +1 -1
  250. package/dist/dispatcher/worker-selector.d.ts +18 -0
  251. package/dist/dispatcher/worker-selector.d.ts.map +1 -0
  252. package/dist/dispatcher/worker-selector.js +150 -0
  253. package/dist/dispatcher/worker-selector.js.map +1 -0
  254. package/dist/events/event-types.d.ts +31 -0
  255. package/dist/events/event-types.d.ts.map +1 -0
  256. package/dist/events/event-types.js +16 -0
  257. package/dist/events/event-types.js.map +1 -0
  258. package/dist/events/events.module.d.ts +7 -0
  259. package/dist/events/events.module.d.ts.map +1 -0
  260. package/dist/events/events.module.js +26 -0
  261. package/dist/events/events.module.js.map +1 -0
  262. package/dist/main.js +22 -0
  263. package/dist/main.js.map +1 -1
  264. package/dist/notifier/debouncer.d.ts +1 -1
  265. package/dist/notifier/debouncer.d.ts.map +1 -1
  266. package/dist/notifier/debouncer.js +2 -1
  267. package/dist/notifier/debouncer.js.map +1 -1
  268. package/dist/notifier/notification-consumer.d.ts +1 -1
  269. package/dist/notifier/notification-consumer.d.ts.map +1 -1
  270. package/dist/notifier/notification-consumer.js +5 -5
  271. package/dist/notifier/notification-consumer.js.map +1 -1
  272. package/dist/notifier/notifier.module.d.ts.map +1 -1
  273. package/dist/notifier/notifier.module.js +0 -6
  274. package/dist/notifier/notifier.module.js.map +1 -1
  275. package/dist/notifier/notifier.service.d.ts +1 -1
  276. package/dist/notifier/notifier.service.d.ts.map +1 -1
  277. package/dist/notifier/notifier.service.js +7 -9
  278. package/dist/notifier/notifier.service.js.map +1 -1
  279. package/dist/notifier/template.service.d.ts +1 -1
  280. package/dist/notifier/template.service.d.ts.map +1 -1
  281. package/dist/notifier/template.service.js +6 -10
  282. package/dist/notifier/template.service.js.map +1 -1
  283. package/dist/redis/redis.service.d.ts.map +1 -1
  284. package/dist/redis/redis.service.js +2 -2
  285. package/dist/redis/redis.service.js.map +1 -1
  286. package/dist/web/admin/admin-audit.controller.d.ts.map +1 -1
  287. package/dist/web/admin/admin-audit.controller.js +2 -1
  288. package/dist/web/admin/admin-audit.controller.js.map +1 -1
  289. package/dist/web/admin/admin-bot.controller.d.ts +11 -48
  290. package/dist/web/admin/admin-bot.controller.d.ts.map +1 -1
  291. package/dist/web/admin/admin-bot.controller.js +50 -18
  292. package/dist/web/admin/admin-bot.controller.js.map +1 -1
  293. package/dist/web/admin/admin-developer.controller.d.ts +14 -27
  294. package/dist/web/admin/admin-developer.controller.d.ts.map +1 -1
  295. package/dist/web/admin/admin-developer.controller.js +62 -28
  296. package/dist/web/admin/admin-developer.controller.js.map +1 -1
  297. package/dist/web/admin/admin-machine.controller.d.ts +1 -8
  298. package/dist/web/admin/admin-machine.controller.d.ts.map +1 -1
  299. package/dist/web/admin/admin-machine.controller.js +3 -6
  300. package/dist/web/admin/admin-machine.controller.js.map +1 -1
  301. package/dist/web/admin/admin-project.controller.d.ts +9 -30
  302. package/dist/web/admin/admin-project.controller.d.ts.map +1 -1
  303. package/dist/web/admin/admin-project.controller.js +15 -60
  304. package/dist/web/admin/admin-project.controller.js.map +1 -1
  305. package/dist/web/admin/admin-settings.controller.d.ts +7 -10
  306. package/dist/web/admin/admin-settings.controller.d.ts.map +1 -1
  307. package/dist/web/admin/admin-settings.controller.js +14 -6
  308. package/dist/web/admin/admin-settings.controller.js.map +1 -1
  309. package/dist/web/admin/admin-token.controller.d.ts +6 -13
  310. package/dist/web/admin/admin-token.controller.d.ts.map +1 -1
  311. package/dist/web/admin/admin-token.controller.js +15 -27
  312. package/dist/web/admin/admin-token.controller.js.map +1 -1
  313. package/dist/web/admin/admin-worker.controller.d.ts +26 -0
  314. package/dist/web/admin/admin-worker.controller.d.ts.map +1 -0
  315. package/dist/web/admin/admin-worker.controller.js +184 -0
  316. package/dist/web/admin/admin-worker.controller.js.map +1 -0
  317. package/dist/web/dashboard.controller.d.ts +6 -12
  318. package/dist/web/dashboard.controller.d.ts.map +1 -1
  319. package/dist/web/dashboard.controller.js +30 -18
  320. package/dist/web/dashboard.controller.js.map +1 -1
  321. package/dist/web/dashboard.service.d.ts +21 -12
  322. package/dist/web/dashboard.service.d.ts.map +1 -1
  323. package/dist/web/dashboard.service.js +169 -119
  324. package/dist/web/dashboard.service.js.map +1 -1
  325. package/dist/web/event.gateway.d.ts +32 -0
  326. package/dist/web/event.gateway.d.ts.map +1 -0
  327. package/dist/web/event.gateway.js +168 -0
  328. package/dist/web/event.gateway.js.map +1 -0
  329. package/dist/web/frame-handlers/frame-handler.interface.d.ts +24 -0
  330. package/dist/web/frame-handlers/frame-handler.interface.d.ts.map +1 -0
  331. package/dist/web/frame-handlers/frame-handler.interface.js +3 -0
  332. package/dist/web/frame-handlers/frame-handler.interface.js.map +1 -0
  333. package/dist/web/frame-handlers/frame-handler.registry.d.ts +16 -0
  334. package/dist/web/frame-handlers/frame-handler.registry.d.ts.map +1 -0
  335. package/dist/web/frame-handlers/frame-handler.registry.js +39 -0
  336. package/dist/web/frame-handlers/frame-handler.registry.js.map +1 -0
  337. package/dist/web/frame-handlers/heartbeat.handler.d.ts +13 -0
  338. package/dist/web/frame-handlers/heartbeat.handler.d.ts.map +1 -0
  339. package/dist/web/frame-handlers/heartbeat.handler.js +35 -0
  340. package/dist/web/frame-handlers/heartbeat.handler.js.map +1 -0
  341. package/dist/web/frame-handlers/index.d.ts +7 -0
  342. package/dist/web/frame-handlers/index.d.ts.map +1 -0
  343. package/dist/web/frame-handlers/index.js +14 -0
  344. package/dist/web/frame-handlers/index.js.map +1 -0
  345. package/dist/web/frame-handlers/progress.handler.d.ts +25 -0
  346. package/dist/web/frame-handlers/progress.handler.d.ts.map +1 -0
  347. package/dist/web/frame-handlers/progress.handler.js +69 -0
  348. package/dist/web/frame-handlers/progress.handler.js.map +1 -0
  349. package/dist/web/frame-handlers/stage-confirm.handler.d.ts +15 -0
  350. package/dist/web/frame-handlers/stage-confirm.handler.d.ts.map +1 -0
  351. package/dist/web/frame-handlers/stage-confirm.handler.js +39 -0
  352. package/dist/web/frame-handlers/stage-confirm.handler.js.map +1 -0
  353. package/dist/web/frame-handlers/tunnel.handler.d.ts +10 -0
  354. package/dist/web/frame-handlers/tunnel.handler.d.ts.map +1 -0
  355. package/dist/web/frame-handlers/tunnel.handler.js +31 -0
  356. package/dist/web/frame-handlers/tunnel.handler.js.map +1 -0
  357. package/dist/web/interaction.service.d.ts +0 -4
  358. package/dist/web/interaction.service.d.ts.map +1 -1
  359. package/dist/web/interaction.service.js +0 -10
  360. package/dist/web/interaction.service.js.map +1 -1
  361. package/dist/web/machine.controller.d.ts +1 -8
  362. package/dist/web/machine.controller.d.ts.map +1 -1
  363. package/dist/web/machine.controller.js +6 -9
  364. package/dist/web/machine.controller.js.map +1 -1
  365. package/dist/web/notification.controller.d.ts +1 -8
  366. package/dist/web/notification.controller.d.ts.map +1 -1
  367. package/dist/web/notification.controller.js +3 -2
  368. package/dist/web/notification.controller.js.map +1 -1
  369. package/dist/web/profile.controller.d.ts +19 -10
  370. package/dist/web/profile.controller.d.ts.map +1 -1
  371. package/dist/web/profile.controller.js +100 -13
  372. package/dist/web/profile.controller.js.map +1 -1
  373. package/dist/web/project-member.service.d.ts +16 -0
  374. package/dist/web/project-member.service.d.ts.map +1 -0
  375. package/dist/web/project-member.service.js +90 -0
  376. package/dist/web/project-member.service.js.map +1 -0
  377. package/dist/web/project.controller.d.ts +43 -26
  378. package/dist/web/project.controller.d.ts.map +1 -1
  379. package/dist/web/project.controller.js +73 -46
  380. package/dist/web/project.controller.js.map +1 -1
  381. package/dist/web/pty.gateway.d.ts +9 -3
  382. package/dist/web/pty.gateway.d.ts.map +1 -1
  383. package/dist/web/pty.gateway.js +46 -18
  384. package/dist/web/pty.gateway.js.map +1 -1
  385. package/dist/web/search.service.d.ts +9 -2
  386. package/dist/web/search.service.d.ts.map +1 -1
  387. package/dist/web/search.service.js +53 -26
  388. package/dist/web/search.service.js.map +1 -1
  389. package/dist/web/task.controller.d.ts +15 -24
  390. package/dist/web/task.controller.d.ts.map +1 -1
  391. package/dist/web/task.controller.js +70 -53
  392. package/dist/web/task.controller.js.map +1 -1
  393. package/dist/web/tunnel.service.d.ts +74 -0
  394. package/dist/web/tunnel.service.d.ts.map +1 -0
  395. package/dist/web/tunnel.service.js +250 -0
  396. package/dist/web/tunnel.service.js.map +1 -0
  397. package/dist/web/web-event.service.d.ts +25 -0
  398. package/dist/web/web-event.service.d.ts.map +1 -0
  399. package/dist/web/web-event.service.js +116 -0
  400. package/dist/web/web-event.service.js.map +1 -0
  401. package/dist/web/web.module.d.ts.map +1 -1
  402. package/dist/web/web.module.js +13 -28
  403. package/dist/web/web.module.js.map +1 -1
  404. package/dist/web/worker-channel.gateway.d.ts +10 -18
  405. package/dist/web/worker-channel.gateway.d.ts.map +1 -1
  406. package/dist/web/worker-channel.gateway.js +70 -144
  407. package/dist/web/worker-channel.gateway.js.map +1 -1
  408. package/dist/web/worker-web.controller.d.ts +15 -0
  409. package/dist/web/worker-web.controller.d.ts.map +1 -0
  410. package/dist/web/worker-web.controller.js +143 -0
  411. package/dist/web/worker-web.controller.js.map +1 -0
  412. package/dist/web/worker.controller.d.ts +3 -3
  413. package/dist/web/worker.controller.d.ts.map +1 -1
  414. package/dist/web/worker.controller.js +8 -8
  415. package/dist/web/worker.controller.js.map +1 -1
  416. package/dist/web/workspace.controller.d.ts +8 -33
  417. package/dist/web/workspace.controller.d.ts.map +1 -1
  418. package/dist/web/workspace.controller.js +93 -205
  419. package/dist/web/workspace.controller.js.map +1 -1
  420. package/package.json +10 -2
  421. package/public/apple-touch-icon-120x120.png +0 -0
  422. package/public/apple-touch-icon-152x152.png +0 -0
  423. package/public/apple-touch-icon-180x180.png +0 -0
  424. package/public/assets/AccessTokensPage-DPQB2fbi.js +1 -0
  425. package/public/assets/AdminPage-BqVelYNu.js +1 -0
  426. package/public/assets/ApiReferencePage-CiGvbLxL.js +1 -0
  427. package/public/assets/AuditLogPage-DSo4jVYm.js +6 -0
  428. package/public/assets/BindPlatformPage-CTqzpOmt.js +1 -0
  429. package/public/assets/BotManage-CIR0rrK7.js +6 -0
  430. package/public/assets/CliReferencePage-C8GmlwUz.js +14 -0
  431. package/public/assets/DeveloperManage-r6y2AoB4.js +16 -0
  432. package/public/assets/EditProjectPage-7WCsNltj.js +2 -0
  433. package/public/assets/{EmptyState-CvmhFgWJ.js → EmptyState-D3foEiul.js} +1 -1
  434. package/public/assets/HomePage-D4yv4orb.js +1 -0
  435. package/public/assets/InfoRow-DhdTYoY9.js +1 -0
  436. package/public/assets/LandingPage-CqS0E2eC.js +43 -0
  437. package/public/assets/LoginPage-DDXkdcz_.js +1 -0
  438. package/public/assets/MetricBar-DMMHfS0A.js +1 -0
  439. package/public/assets/{NotFoundPage-BuiAS4g4.js → NotFoundPage-D5x5BrlX.js} +1 -1
  440. package/public/assets/OnboardingGuide-D8RyPcEd.js +1 -0
  441. package/public/assets/PipelineEditorPage-y2-Q8ofQ.js +3 -0
  442. package/public/assets/ProfilePage-DN7usHOi.js +1 -0
  443. package/public/assets/ProjectDetailPage-DJexg49z.js +7 -0
  444. package/public/assets/ProjectListPage-Bz7I2D0H.js +6 -0
  445. package/public/assets/QuickAuth-Dr0Q50ld.js +1 -0
  446. package/public/assets/{RemoveMemberConfirmDialog-DS9z6jQT.js → RemoveMemberConfirmDialog-BCrue0AP.js} +2 -2
  447. package/public/assets/Select-BnV8yZlD.js +6 -0
  448. package/public/assets/SettingsPage-HaUCcsgl.js +6 -0
  449. package/public/assets/{Skeleton-CcVqz28_.js → Skeleton-DUgWc2LJ.js} +1 -1
  450. package/public/assets/SkillPage-BInwZTQh.js +1 -0
  451. package/public/assets/TaskDetailPage-CfwEj1hy.js +31 -0
  452. package/public/assets/TaskListPage-Dh59ldSZ.js +1 -0
  453. package/public/assets/TaskStatusBadge-DuOoGIwE.js +1 -0
  454. package/public/assets/TerminalHomePage-BwXJjr-a.js +16 -0
  455. package/public/assets/TokenManage-B0Cpv6SO.js +1 -0
  456. package/public/assets/TotpSetupPage-MSCCURj9.js +9 -0
  457. package/public/assets/WorkerDetailPage-R2veIzKo.js +1 -0
  458. package/public/assets/WorkerListPage-CserMjGO.js +6 -0
  459. package/public/assets/WorkerSetupGuidePage-SqO2lzVa.js +11 -0
  460. package/public/assets/{arrow-left-CVKez32c.js → arrow-left-DklRsENx.js} +1 -1
  461. package/public/assets/{arrow-right-g7hTftEi.js → arrow-right-MDrzFe3K.js} +1 -1
  462. package/public/assets/{bot-DYvBcsZn.js → bot-DPaziJPf.js} +1 -1
  463. package/public/assets/{chevron-right-COxU2yxz.js → chevron-right-CqyufMDW.js} +1 -1
  464. package/public/assets/{copy-BGttVgA1.js → copy-BUH7P2Hf.js} +1 -1
  465. package/public/assets/date-BdNtiQTP.js +1 -0
  466. package/public/assets/{external-link-DXlCfUjE.js → external-link-ChPgQ7N_.js} +1 -1
  467. package/public/assets/index-BS0Fbx5V.css +1 -0
  468. package/public/assets/index-vL7aQJNr.js +225 -0
  469. package/public/assets/{key-3eDVdGih.js → key-CxvwwHnW.js} +1 -1
  470. package/public/assets/{loader-circle-DPm92ETj.js → loader-circle-DS5g1-Od.js} +1 -1
  471. package/public/assets/password-CHk45-jw.js +1 -0
  472. package/public/assets/{pencil-Bs3PwH2W.js → pencil-B6spIBcw.js} +1 -1
  473. package/public/assets/{plus-d-PLzbVX.js → plus-Bnd1Vz2Y.js} +1 -1
  474. package/public/assets/{rotate-ccw-Cus8CABi.js → rotate-ccw-CgcLAXNR.js} +1 -1
  475. package/public/assets/{scroll-text-CV3wlIy2.js → scroll-text-CecZ0Fk5.js} +1 -1
  476. package/public/assets/{settings-Ccijf48b.js → settings-C1uOD3PZ.js} +1 -1
  477. package/public/assets/status-colors-BPEUp90-.js +1 -0
  478. package/public/assets/string-B39tzdVK.js +1 -0
  479. package/public/assets/task-constants-BbFyCyKk.js +14 -0
  480. package/public/assets/task.store-BE6fEPu4.js +1 -0
  481. package/public/assets/{trash-2-bRJ-xwtq.js → trash-2-A2FsT1yG.js} +1 -1
  482. package/public/assets/useFetch-vGZMAvGi.js +1 -0
  483. package/public/assets/{users-LNQqKSEN.js → users-CEdRS_A3.js} +1 -1
  484. package/public/assets/wifi-D60NkK6F.js +6 -0
  485. package/public/assets/zap-DXw1NrWz.js +6 -0
  486. package/public/icon-192x192.png +0 -0
  487. package/public/icon-512x512.png +0 -0
  488. package/public/icon-maskable-192x192.png +0 -0
  489. package/public/icon-maskable-512x512.png +0 -0
  490. package/public/index.html +21 -4
  491. package/public/manifest.webmanifest +1 -0
  492. package/public/og-image.png +0 -0
  493. package/public/registerSW.js +1 -0
  494. package/public/sw.js +1 -0
  495. package/public/workbox-6e9b121d.js +1 -0
  496. package/database/migrations/002-add-indexes.sql +0 -17
  497. package/database/migrations/003-add-settings-table.sql +0 -4
  498. package/database/migrations/004-add-developer-id-index.sql +0 -5
  499. package/database/migrations/005-add-worker-version.sql +0 -2
  500. package/database/migrations/006-add-decommission-fields.sql +0 -2
  501. package/database/migrations/007-add-ssh-url.sql +0 -1
  502. package/public/assets/AccessTokensPage-Cb5hGBfN.js +0 -1
  503. package/public/assets/AdminPage-C7Xytkfo.js +0 -1
  504. package/public/assets/ApiReferencePage-DLGVc4xN.js +0 -1
  505. package/public/assets/AuditLogPage-BgqsUJ7x.js +0 -6
  506. package/public/assets/BotManage-Ds9DYQZA.js +0 -6
  507. package/public/assets/CliReferencePage-WXinn_69.js +0 -8
  508. package/public/assets/DeveloperManage-saSq3Hfx.js +0 -16
  509. package/public/assets/EditProjectPage-C4xWYLTo.js +0 -2
  510. package/public/assets/HomePage-y20pQ52r.js +0 -1
  511. package/public/assets/LandingPage-CB5BBbdI.js +0 -36
  512. package/public/assets/LoginPage-DLljhJkQ.js +0 -1
  513. package/public/assets/MachineDetailPage-CPm9tfdp.js +0 -1
  514. package/public/assets/MachineListPage-D-nhVz-m.js +0 -6
  515. package/public/assets/PipelineEditorPage-B9GgqAju.js +0 -3
  516. package/public/assets/ProfilePage-DASpeJq6.js +0 -1
  517. package/public/assets/ProjectDetailPage-DWZyNwTV.js +0 -7
  518. package/public/assets/ProjectListPage-BUMX3Dxa.js +0 -6
  519. package/public/assets/QuickAuth-B9mvq7ht.js +0 -1
  520. package/public/assets/Select-A7PXobk_.js +0 -6
  521. package/public/assets/SettingsPage-WGzxUbGp.js +0 -6
  522. package/public/assets/SkillPage-BIt2kF3W.js +0 -1
  523. package/public/assets/TaskDetailPage-CePyNfp6.js +0 -44
  524. package/public/assets/TaskListPage-MO4_PSve.js +0 -1
  525. package/public/assets/TaskStatusBadge-QtQUDscM.js +0 -1
  526. package/public/assets/TokenManage-Sf0RGymw.js +0 -1
  527. package/public/assets/TotpSetupPage-D-rbEYLf.js +0 -9
  528. package/public/assets/WorkerSetupGuidePage-D6Fv1MQo.js +0 -16
  529. package/public/assets/index-CDBuOPx4.js +0 -212
  530. package/public/assets/index-CQojj7Zu.css +0 -1
  531. package/public/assets/protocol-C5uQmiiB.js +0 -1
  532. package/public/assets/task.store-CvjSr507.js +0 -1
  533. /package/public/assets/{TaskDetailPage-Beg8tuEN.css → task-constants-Beg8tuEN.css} +0 -0
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var EventGateway_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.EventGateway = void 0;
14
+ const websockets_1 = require("@nestjs/websockets");
15
+ const common_1 = require("@nestjs/common");
16
+ const ws_1 = require("ws");
17
+ const protocol_1 = require("@overlordai/protocol");
18
+ const auth_service_1 = require("../auth/auth.service");
19
+ const developer_repository_1 = require("../database/repositories/developer.repository");
20
+ const redis_service_1 = require("../redis/redis.service");
21
+ const web_event_service_1 = require("./web-event.service");
22
+ /**
23
+ * WebSocket gateway for broadcasting real-time events to web clients.
24
+ *
25
+ * Protocol:
26
+ * 1. Client connects to /ws/events
27
+ * 2. Client sends { type: "auth", token: "<JWT>" } as first message
28
+ * 3. Server validates JWT and responds with { type: "auth_ok" }
29
+ * 4. Server pushes events as { type: "event", event: "<event_type>", ... }
30
+ */
31
+ let EventGateway = EventGateway_1 = class EventGateway {
32
+ authService;
33
+ developerRepo;
34
+ redis;
35
+ webEventService;
36
+ logger = new common_1.Logger(EventGateway_1.name);
37
+ authedSockets = new Map();
38
+ pendingAuth = new Map();
39
+ AUTH_TIMEOUT_MS = 10_000;
40
+ constructor(authService, developerRepo, redis, webEventService) {
41
+ this.authService = authService;
42
+ this.developerRepo = developerRepo;
43
+ this.redis = redis;
44
+ this.webEventService = webEventService;
45
+ }
46
+ handleConnection(client, _req) {
47
+ let authCompleted = false;
48
+ const authTimeout = setTimeout(() => {
49
+ if (!authCompleted && !this.authedSockets.has(client)) {
50
+ this.logger.warn('Event WS auth timeout');
51
+ this.pendingAuth.delete(client);
52
+ client.close(4001, 'Auth timeout');
53
+ }
54
+ }, this.AUTH_TIMEOUT_MS);
55
+ this.pendingAuth.set(client, { authTimeout });
56
+ const initialHandler = (rawData) => {
57
+ if (this.authedSockets.has(client))
58
+ return;
59
+ let frame;
60
+ try {
61
+ const str = typeof rawData === 'string' ? rawData : rawData.toString('utf8');
62
+ frame = JSON.parse(str);
63
+ }
64
+ catch {
65
+ client.close(4002, 'Invalid JSON');
66
+ return;
67
+ }
68
+ if (frame.type !== 'auth' || !frame.token) {
69
+ client.close(4003, 'Expected auth frame');
70
+ return;
71
+ }
72
+ clearTimeout(authTimeout);
73
+ authCompleted = true;
74
+ this.pendingAuth.delete(client);
75
+ client.removeListener('message', initialHandler);
76
+ this.handleAuth(client, frame);
77
+ };
78
+ client.on('message', initialHandler);
79
+ }
80
+ handleDisconnect(client) {
81
+ // Clear pending auth timeout if client disconnected before authenticating
82
+ const pending = this.pendingAuth.get(client);
83
+ if (pending) {
84
+ clearTimeout(pending.authTimeout);
85
+ this.pendingAuth.delete(client);
86
+ }
87
+ const authed = this.authedSockets.get(client);
88
+ if (authed) {
89
+ if (authed.revalidationTimer) {
90
+ clearInterval(authed.revalidationTimer);
91
+ }
92
+ this.webEventService.unregister(client);
93
+ this.authedSockets.delete(client);
94
+ this.logger.debug(`Event WS client disconnected (developer ${authed.developerId})`);
95
+ }
96
+ }
97
+ handleAuth(client, frame) {
98
+ let payload;
99
+ try {
100
+ payload = this.authService.verifyUserJwt(frame.token);
101
+ }
102
+ catch {
103
+ this.logger.warn('Event WS auth failed: invalid JWT');
104
+ if (client.readyState === ws_1.WebSocket.OPEN) {
105
+ client.send(JSON.stringify({ type: 'auth_error', message: 'Invalid token' }));
106
+ }
107
+ client.close(4004, 'Invalid token');
108
+ return;
109
+ }
110
+ // Verify developer exists and is active
111
+ const developer = this.developerRepo.findById(payload.sub);
112
+ if (!developer || developer.status !== protocol_1.DeveloperStatus.ACTIVE) {
113
+ this.logger.warn(`Event WS auth failed: developer ${payload.sub} inactive/not found`);
114
+ client.close(4005, 'User inactive');
115
+ return;
116
+ }
117
+ // Set up periodic revalidation
118
+ const revalidationTimer = setInterval(() => {
119
+ this.revalidate(client, payload.sub, payload.jti, payload.exp).catch((err) => this.logger.error(`Event WS revalidation error for developer ${payload.sub}`, err));
120
+ }, protocol_1.TOKEN_REVALIDATION_INTERVAL_MS);
121
+ const authed = {
122
+ ws: client,
123
+ developerId: payload.sub,
124
+ revalidationTimer,
125
+ jti: payload.jti,
126
+ tokenExp: payload.exp,
127
+ };
128
+ this.authedSockets.set(client, authed);
129
+ this.webEventService.register(client);
130
+ if (client.readyState === ws_1.WebSocket.OPEN) {
131
+ client.send(JSON.stringify({ type: 'auth_ok' }));
132
+ }
133
+ this.logger.log(`Event WS client authenticated (developer ${payload.sub})`);
134
+ }
135
+ async revalidate(client, developerId, jti, tokenExp) {
136
+ // Check JWT expiry
137
+ if (tokenExp && Math.floor(Date.now() / 1000) >= tokenExp) {
138
+ this.logger.warn(`Event WS: JWT expired for developer ${developerId}`);
139
+ client.close(4021, 'Token expired');
140
+ return;
141
+ }
142
+ // Check logout timestamp
143
+ const logoutTs = await this.redis.get(`logout:${developerId}`);
144
+ if (logoutTs && tokenExp) {
145
+ const tokenIat = tokenExp - 900;
146
+ if (Number(logoutTs) >= tokenIat) {
147
+ this.logger.warn(`Event WS: developer ${developerId} logged out after token issued`);
148
+ client.close(4022, 'Session revoked');
149
+ return;
150
+ }
151
+ }
152
+ // Check user still active
153
+ const developer = this.developerRepo.findById(developerId);
154
+ if (!developer || developer.status !== protocol_1.DeveloperStatus.ACTIVE) {
155
+ this.logger.warn(`Event WS: developer ${developerId} inactive/not found`);
156
+ client.close(4020, 'User inactive');
157
+ }
158
+ }
159
+ };
160
+ exports.EventGateway = EventGateway;
161
+ exports.EventGateway = EventGateway = EventGateway_1 = __decorate([
162
+ (0, websockets_1.WebSocketGateway)({ path: '/ws/events' }),
163
+ __metadata("design:paramtypes", [auth_service_1.AuthService,
164
+ developer_repository_1.DeveloperRepository,
165
+ redis_service_1.RedisService,
166
+ web_event_service_1.WebEventService])
167
+ ], EventGateway);
168
+ //# sourceMappingURL=event.gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.gateway.js","sourceRoot":"","sources":["../../src/web/event.gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { WorkerUpFrame } from '@overlordai/protocol';
2
+ import type { WebSocket } from 'ws';
3
+ /**
4
+ * Context passed to every frame handler so handlers
5
+ * can reference the authenticated worker without needing
6
+ * direct access to the socket map.
7
+ */
8
+ export interface FrameHandlerContext {
9
+ workerId: string;
10
+ ws: WebSocket;
11
+ }
12
+ /**
13
+ * Strategy interface for processing authenticated worker frames.
14
+ */
15
+ export interface FrameHandler {
16
+ /** Frame type(s) this handler is responsible for. */
17
+ readonly frameTypes: string[];
18
+ /**
19
+ * Process a single frame.
20
+ * May return void or a Promise<void> for async work.
21
+ */
22
+ handle(frame: WorkerUpFrame, ctx: FrameHandlerContext): void | Promise<void>;
23
+ }
24
+ //# sourceMappingURL=frame-handler.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-handler.interface.d.ts","sourceRoot":"","sources":["../../../src/web/frame-handlers/frame-handler.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,SAAS,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAE9B;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=frame-handler.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-handler.interface.js","sourceRoot":"","sources":["../../../src/web/frame-handlers/frame-handler.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { WorkerUpFrame } from '@overlordai/protocol';
2
+ import type { FrameHandler, FrameHandlerContext } from './frame-handler.interface';
3
+ /**
4
+ * Maps frame types to their handlers and dispatches incoming frames.
5
+ */
6
+ export declare class FrameHandlerRegistry {
7
+ private readonly logger;
8
+ private readonly handlerMap;
9
+ constructor(handlers: FrameHandler[]);
10
+ /**
11
+ * Dispatch a frame to the appropriate handler.
12
+ * Returns true if a handler was found, false otherwise.
13
+ */
14
+ dispatch(frame: WorkerUpFrame, ctx: FrameHandlerContext): boolean;
15
+ }
16
+ //# sourceMappingURL=frame-handler.registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-handler.registry.d.ts","sourceRoot":"","sources":["../../../src/web/frame-handlers/frame-handler.registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEnF;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;gBAElD,QAAQ,EAAE,YAAY,EAAE;IAQpC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO;CAoBlE"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FrameHandlerRegistry = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ /**
6
+ * Maps frame types to their handlers and dispatches incoming frames.
7
+ */
8
+ class FrameHandlerRegistry {
9
+ logger = new common_1.Logger(FrameHandlerRegistry.name);
10
+ handlerMap = new Map();
11
+ constructor(handlers) {
12
+ for (const handler of handlers) {
13
+ for (const frameType of handler.frameTypes) {
14
+ this.handlerMap.set(frameType, handler);
15
+ }
16
+ }
17
+ }
18
+ /**
19
+ * Dispatch a frame to the appropriate handler.
20
+ * Returns true if a handler was found, false otherwise.
21
+ */
22
+ dispatch(frame, ctx) {
23
+ const handler = this.handlerMap.get(frame.type);
24
+ if (!handler) {
25
+ this.logger.debug(`No handler for frame type: ${frame.type}`);
26
+ return false;
27
+ }
28
+ const result = handler.handle(frame, ctx);
29
+ // If the handler returns a promise, catch errors to avoid unhandled rejections
30
+ if (result instanceof Promise) {
31
+ result.catch((err) => {
32
+ this.logger.error(`Error handling frame type '${frame.type}': ${err.message}`, err.stack);
33
+ });
34
+ }
35
+ return true;
36
+ }
37
+ }
38
+ exports.FrameHandlerRegistry = FrameHandlerRegistry;
39
+ //# sourceMappingURL=frame-handler.registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-handler.registry.js","sourceRoot":"","sources":["../../../src/web/frame-handlers/frame-handler.registry.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAIxC;;GAEG;AACH,MAAa,oBAAoB;IACd,MAAM,GAAG,IAAI,eAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC/C,UAAU,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE9D,YAAY,QAAwB;QAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,KAAoB,EAAE,GAAwB;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1C,+EAA+E;QAC/E,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;gBAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,8BAA8B,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,EAC3D,GAAG,CAAC,KAAK,CACV,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AApCD,oDAoCC"}
@@ -0,0 +1,13 @@
1
+ import type { WorkerUpFrame } from '@overlordai/protocol';
2
+ import type { FrameHandler, FrameHandlerContext } from './frame-handler.interface';
3
+ import type { HeartbeatService } from '../../dispatcher/heartbeat.service';
4
+ import type { TunnelService } from '../tunnel.service';
5
+ export declare class HeartbeatHandler implements FrameHandler {
6
+ private readonly heartbeatService;
7
+ private readonly tunnelService;
8
+ readonly frameTypes: string[];
9
+ private readonly logger;
10
+ constructor(heartbeatService: HeartbeatService, tunnelService: TunnelService);
11
+ handle(frame: WorkerUpFrame, ctx: FrameHandlerContext): void;
12
+ }
13
+ //# sourceMappingURL=heartbeat.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.handler.d.ts","sourceRoot":"","sources":["../../../src/web/frame-handlers/heartbeat.handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,qBAAa,gBAAiB,YAAW,YAAY;IAKjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IALhC,QAAQ,CAAC,UAAU,WAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAGzC,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa;IAG/C,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,IAAI;CAiC7D"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HeartbeatHandler = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const ws_1 = require("ws");
6
+ class HeartbeatHandler {
7
+ heartbeatService;
8
+ tunnelService;
9
+ frameTypes = ['heartbeat'];
10
+ logger = new common_1.Logger(HeartbeatHandler.name);
11
+ constructor(heartbeatService, tunnelService) {
12
+ this.heartbeatService = heartbeatService;
13
+ this.tunnelService = tunnelService;
14
+ }
15
+ handle(frame, ctx) {
16
+ const hb = frame;
17
+ this.heartbeatService.processHeartbeat(ctx.workerId, hb.metrics, hb.capabilities, hb.workerVersion, hb.cpuModel, hb.maxSlots, hb.activeTunnels);
18
+ // Reconcile tunnel state from heartbeat (always call, even with empty
19
+ // array, so stale tunnels are cleaned up when a worker has none active)
20
+ if (hb.activeTunnels) {
21
+ this.tunnelService.reconcileTunnels(ctx.workerId, hb.activeTunnels);
22
+ }
23
+ // Send heartbeat_ack
24
+ const ack = {
25
+ type: 'heartbeat_ack',
26
+ timestamp: hb.timestamp,
27
+ serverTime: new Date().toISOString(),
28
+ };
29
+ if (ctx.ws.readyState === ws_1.WebSocket.OPEN) {
30
+ ctx.ws.send(JSON.stringify(ack));
31
+ }
32
+ }
33
+ }
34
+ exports.HeartbeatHandler = HeartbeatHandler;
35
+ //# sourceMappingURL=heartbeat.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.handler.js","sourceRoot":"","sources":["../../../src/web/frame-handlers/heartbeat.handler.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,2BAA+B;AAU/B,MAAa,gBAAgB;IAKR;IACA;IALV,UAAU,GAAG,CAAC,WAAW,CAAC,CAAC;IACnB,MAAM,GAAG,IAAI,eAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAE5D,YACmB,gBAAkC,EAClC,aAA4B;QAD5B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,kBAAa,GAAb,aAAa,CAAe;IAC5C,CAAC;IAEJ,MAAM,CAAC,KAAoB,EAAE,GAAwB;QACnD,MAAM,EAAE,GAAG,KAA6B,CAAC;QAEzC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CACpC,GAAG,CAAC,QAAQ,EACZ,EAAE,CAAC,OAAO,EACV,EAAE,CAAC,YAAY,EACf,EAAE,CAAC,aAAa,EAChB,EAAE,CAAC,QAAQ,EACX,EAAE,CAAC,QAAQ,EACX,EAAE,CAAC,aAAa,CACjB,CAAC;QAEF,sEAAsE;QACtE,wEAAwE;QACxE,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,gBAAgB,CACjC,GAAG,CAAC,QAAQ,EACZ,EAAE,CAAC,aAAa,CACjB,CAAC;QACJ,CAAC;QAED,qBAAqB;QACrB,MAAM,GAAG,GAAsB;YAC7B,IAAI,EAAE,eAAe;YACrB,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC;QAEF,IAAI,GAAG,CAAC,EAAE,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI,EAAE,CAAC;YACzC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF;AA1CD,4CA0CC"}
@@ -0,0 +1,7 @@
1
+ export type { FrameHandler, FrameHandlerContext } from './frame-handler.interface';
2
+ export { FrameHandlerRegistry } from './frame-handler.registry';
3
+ export { HeartbeatHandler } from './heartbeat.handler';
4
+ export { ProgressHandler } from './progress.handler';
5
+ export { StageConfirmHandler } from './stage-confirm.handler';
6
+ export { TunnelHandler } from './tunnel.handler';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web/frame-handlers/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TunnelHandler = exports.StageConfirmHandler = exports.ProgressHandler = exports.HeartbeatHandler = exports.FrameHandlerRegistry = void 0;
4
+ var frame_handler_registry_1 = require("./frame-handler.registry");
5
+ Object.defineProperty(exports, "FrameHandlerRegistry", { enumerable: true, get: function () { return frame_handler_registry_1.FrameHandlerRegistry; } });
6
+ var heartbeat_handler_1 = require("./heartbeat.handler");
7
+ Object.defineProperty(exports, "HeartbeatHandler", { enumerable: true, get: function () { return heartbeat_handler_1.HeartbeatHandler; } });
8
+ var progress_handler_1 = require("./progress.handler");
9
+ Object.defineProperty(exports, "ProgressHandler", { enumerable: true, get: function () { return progress_handler_1.ProgressHandler; } });
10
+ var stage_confirm_handler_1 = require("./stage-confirm.handler");
11
+ Object.defineProperty(exports, "StageConfirmHandler", { enumerable: true, get: function () { return stage_confirm_handler_1.StageConfirmHandler; } });
12
+ var tunnel_handler_1 = require("./tunnel.handler");
13
+ Object.defineProperty(exports, "TunnelHandler", { enumerable: true, get: function () { return tunnel_handler_1.TunnelHandler; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web/frame-handlers/index.ts"],"names":[],"mappings":";;;AACA,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA;AAC7B,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,mDAAiD;AAAxC,+GAAA,aAAa,OAAA"}
@@ -0,0 +1,25 @@
1
+ import type { WorkerUpFrame } from '@overlordai/protocol';
2
+ import type { FrameHandler, FrameHandlerContext } from './frame-handler.interface';
3
+ import type { WorkerConnectionManager } from '../../dispatcher/worker-connection.manager';
4
+ import type { Reconciler } from '../../dispatcher/reconciler';
5
+ import type { TaskLifecycleService } from '../../dispatcher/task-lifecycle.service';
6
+ import type { TaskLogBatcher } from '../../dispatcher/task-log-batcher';
7
+ import type { WorkerRepository } from '../../database/repositories/worker.repository';
8
+ import type { TaskRepository } from '../../database/repositories/task.repository';
9
+ export declare class ProgressHandler implements FrameHandler {
10
+ private readonly workerConnectionManager;
11
+ private readonly reconciler;
12
+ private readonly taskLifecycleService;
13
+ private readonly taskLogBatcher;
14
+ private readonly workerRepo;
15
+ private readonly taskRepo;
16
+ readonly frameTypes: string[];
17
+ private readonly logger;
18
+ constructor(workerConnectionManager: WorkerConnectionManager, reconciler: Reconciler, taskLifecycleService: TaskLifecycleService, taskLogBatcher: TaskLogBatcher, workerRepo: WorkerRepository, taskRepo: TaskRepository);
19
+ handle(frame: WorkerUpFrame, ctx: FrameHandlerContext): void | Promise<void>;
20
+ private handleAck;
21
+ private handleProgress;
22
+ private handleReconnect;
23
+ private handleRecoverySecretAck;
24
+ }
25
+ //# sourceMappingURL=progress.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.handler.d.ts","sourceRoot":"","sources":["../../../src/web/frame-handlers/progress.handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAElF,qBAAa,eAAgB,YAAW,YAAY;IAKhD,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAT3B,QAAQ,CAAC,UAAU,WAA2D;IAC9E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAGxC,uBAAuB,EAAE,uBAAuB,EAChD,UAAU,EAAE,UAAU,EACtB,oBAAoB,EAAE,oBAAoB,EAC1C,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,cAAc;IAG3C,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5E,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;YAmCR,eAAe;IAe7B,OAAO,CAAC,uBAAuB;CAQhC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProgressHandler = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const protocol_1 = require("@overlordai/protocol");
6
+ class ProgressHandler {
7
+ workerConnectionManager;
8
+ reconciler;
9
+ taskLifecycleService;
10
+ taskLogBatcher;
11
+ workerRepo;
12
+ taskRepo;
13
+ frameTypes = ['ack', 'progress', 'reconnect', 'recovery_secret_ack'];
14
+ logger = new common_1.Logger(ProgressHandler.name);
15
+ constructor(workerConnectionManager, reconciler, taskLifecycleService, taskLogBatcher, workerRepo, taskRepo) {
16
+ this.workerConnectionManager = workerConnectionManager;
17
+ this.reconciler = reconciler;
18
+ this.taskLifecycleService = taskLifecycleService;
19
+ this.taskLogBatcher = taskLogBatcher;
20
+ this.workerRepo = workerRepo;
21
+ this.taskRepo = taskRepo;
22
+ }
23
+ handle(frame, ctx) {
24
+ switch (frame.type) {
25
+ case 'ack':
26
+ return this.handleAck(frame);
27
+ case 'progress':
28
+ return this.handleProgress(frame);
29
+ case 'reconnect':
30
+ return this.handleReconnect(ctx, frame);
31
+ case 'recovery_secret_ack':
32
+ return this.handleRecoverySecretAck(ctx, frame);
33
+ }
34
+ }
35
+ handleAck(frame) {
36
+ this.workerConnectionManager.handleAck(frame.msgId, frame.payload);
37
+ }
38
+ handleProgress(frame) {
39
+ this.taskLogBatcher.add(frame.taskId, protocol_1.TaskLogType.STAGE_CHANGE, `Stage: ${frame.stage} - ${frame.status}${frame.message ? `: ${frame.message}` : ''}`);
40
+ // Persist current stage so the web UI can show pipeline progress
41
+ this.taskRepo.updateStage(frame.taskId, frame.stage);
42
+ // Transition ASSIGNED → RUNNING on first 'running' progress
43
+ if (frame.status === 'running') {
44
+ if (this.taskLifecycleService.markTaskRunning(frame.taskId)) {
45
+ this.logger.log(`Task #${frame.taskId} marked RUNNING via progress frame`);
46
+ }
47
+ }
48
+ // Transition task status when worker reports terminal states
49
+ if (frame.status === 'failed' || frame.status === 'cancelled') {
50
+ const targetStatus = frame.status === 'failed' ? protocol_1.TaskStatus.FAILED : protocol_1.TaskStatus.CANCELLED;
51
+ const updated = this.taskLifecycleService.markTaskTerminalFromWorker(frame.taskId, targetStatus, frame.message);
52
+ if (updated) {
53
+ this.logger.log(`Task #${frame.taskId} marked ${frame.status} via progress frame`);
54
+ }
55
+ }
56
+ }
57
+ async handleReconnect(ctx, frame) {
58
+ this.logger.log(`Worker ${ctx.workerId} reconnecting with ${frame.tasks.length} task(s)`);
59
+ // Update worker status to online
60
+ this.workerRepo.updateStatus(ctx.workerId, protocol_1.WorkerStatus.ONLINE);
61
+ // Forward to reconciler
62
+ await this.reconciler.handleReconnect(ctx.workerId, frame.tasks);
63
+ }
64
+ handleRecoverySecretAck(ctx, _frame) {
65
+ this.logger.log(`Worker ${ctx.workerId} acknowledged recovery secret bootstrap`);
66
+ }
67
+ }
68
+ exports.ProgressHandler = ProgressHandler;
69
+ //# sourceMappingURL=progress.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.handler.js","sourceRoot":"","sources":["../../../src/web/frame-handlers/progress.handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { WorkerUpFrame } from '@overlordai/protocol';
2
+ import type { FrameHandler, FrameHandlerContext } from './frame-handler.interface';
3
+ import type { DedupService } from '../../dispatcher/dedup.service';
4
+ import type { TaskRepository } from '../../database/repositories/task.repository';
5
+ import type { NotifierService } from '../../notifier/notifier.service';
6
+ export declare class StageConfirmHandler implements FrameHandler {
7
+ private readonly dedupService;
8
+ private readonly taskRepo;
9
+ private readonly notifierService;
10
+ readonly frameTypes: string[];
11
+ private readonly logger;
12
+ constructor(dedupService: DedupService, taskRepo: TaskRepository, notifierService: NotifierService);
13
+ handle(frame: WorkerUpFrame, _ctx: FrameHandlerContext): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=stage-confirm.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-confirm.handler.d.ts","sourceRoot":"","sources":["../../../src/web/frame-handlers/stage-confirm.handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EAEd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,qBAAa,mBAAoB,YAAW,YAAY;IAKpD,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe;IANlC,QAAQ,CAAC,UAAU,WAA6B;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;gBAG5C,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,cAAc,EACxB,eAAe,EAAE,eAAe;IAG7C,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CA8B7E"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StageConfirmHandler = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ class StageConfirmHandler {
6
+ dedupService;
7
+ taskRepo;
8
+ notifierService;
9
+ frameTypes = ['stage_confirm_request'];
10
+ logger = new common_1.Logger(StageConfirmHandler.name);
11
+ constructor(dedupService, taskRepo, notifierService) {
12
+ this.dedupService = dedupService;
13
+ this.taskRepo = taskRepo;
14
+ this.notifierService = notifierService;
15
+ }
16
+ async handle(frame, _ctx) {
17
+ const { taskId, stageName, prompt, timeout } = frame;
18
+ this.logger.log(`Stage confirm request for task #${taskId}, stage ${stageName}`);
19
+ // Store pending confirm in Redis via DedupService
20
+ const confirmKey = `stage:${taskId}:${stageName}`;
21
+ await this.dedupService.storePendingConfirm(confirmKey, {
22
+ taskId,
23
+ stageName,
24
+ prompt,
25
+ timeout,
26
+ createdAt: new Date().toISOString(),
27
+ });
28
+ // Notify web clients via the notification channel
29
+ const task = this.taskRepo.findById(taskId);
30
+ if (task) {
31
+ await this.notifierService.notifyStageConfirmRequired(task, stageName);
32
+ }
33
+ else {
34
+ this.logger.warn(`Task #${taskId} not found when processing stage confirm request`);
35
+ }
36
+ }
37
+ }
38
+ exports.StageConfirmHandler = StageConfirmHandler;
39
+ //# sourceMappingURL=stage-confirm.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-confirm.handler.js","sourceRoot":"","sources":["../../../src/web/frame-handlers/stage-confirm.handler.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAUxC,MAAa,mBAAmB;IAKX;IACA;IACA;IANV,UAAU,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAC/B,MAAM,GAAG,IAAI,eAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE/D,YACmB,YAA0B,EAC1B,QAAwB,EACxB,eAAgC;QAFhC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,aAAQ,GAAR,QAAQ,CAAgB;QACxB,oBAAe,GAAf,eAAe,CAAiB;IAChD,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,KAAoB,EAAE,IAAyB;QAC1D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAiC,CAAC;QAEjF,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,mCAAmC,MAAM,WAAW,SAAS,EAAE,CAChE,CAAC;QAEF,kDAAkD;QAClD,MAAM,UAAU,GAAG,SAAS,MAAM,IAAI,SAAS,EAAE,CAAC;QAClD,MAAM,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,UAAU,EAAE;YACtD,MAAM;YACN,SAAS;YACT,MAAM;YACN,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QAEH,kDAAkD;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,CAAC,eAAe,CAAC,0BAA0B,CACnD,IAAI,EACJ,SAAS,CACV,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,SAAS,MAAM,kDAAkD,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAxCD,kDAwCC"}
@@ -0,0 +1,10 @@
1
+ import type { WorkerUpFrame } from '@overlordai/protocol';
2
+ import type { FrameHandler, FrameHandlerContext } from './frame-handler.interface';
3
+ import type { TunnelService } from '../tunnel.service';
4
+ export declare class TunnelHandler implements FrameHandler {
5
+ private readonly tunnelService;
6
+ readonly frameTypes: string[];
7
+ constructor(tunnelService: TunnelService);
8
+ handle(frame: WorkerUpFrame, _ctx: FrameHandlerContext): void;
9
+ }
10
+ //# sourceMappingURL=tunnel.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.handler.d.ts","sourceRoot":"","sources":["../../../src/web/frame-handlers/tunnel.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAId,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,qBAAa,aAAc,YAAW,YAAY;IAI9C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAHhC,QAAQ,CAAC,UAAU,WAAyD;gBAGzD,aAAa,EAAE,aAAa;IAG/C,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,GAAG,IAAI;CAmB9D"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TunnelHandler = void 0;
4
+ class TunnelHandler {
5
+ tunnelService;
6
+ frameTypes = ['tunnel_started', 'tunnel_closed', 'tunnel_crashed'];
7
+ constructor(tunnelService) {
8
+ this.tunnelService = tunnelService;
9
+ }
10
+ handle(frame, _ctx) {
11
+ switch (frame.type) {
12
+ case 'tunnel_started': {
13
+ const f = frame;
14
+ this.tunnelService.handleTunnelStarted(f.taskId, f.tunnelUrl);
15
+ break;
16
+ }
17
+ case 'tunnel_closed': {
18
+ const f = frame;
19
+ this.tunnelService.handleTunnelClosed(f.taskId, f.reason);
20
+ break;
21
+ }
22
+ case 'tunnel_crashed': {
23
+ const f = frame;
24
+ this.tunnelService.handleTunnelCrashed(f.taskId, f.error, f.willRetry);
25
+ break;
26
+ }
27
+ }
28
+ }
29
+ }
30
+ exports.TunnelHandler = TunnelHandler;
31
+ //# sourceMappingURL=tunnel.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.handler.js","sourceRoot":"","sources":["../../../src/web/frame-handlers/tunnel.handler.ts"],"names":[],"mappings":";;;AASA,MAAa,aAAa;IAIL;IAHV,UAAU,GAAG,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;IAE5E,YACmB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAC5C,CAAC;IAEJ,MAAM,CAAC,KAAoB,EAAE,IAAyB;QACpD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,CAAC,GAAG,KAA2B,CAAC;gBACtC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC9D,MAAM;YACR,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,CAAC,GAAG,KAA0B,CAAC;gBACrC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC1D,MAAM;YACR,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,CAAC,GAAG,KAA2B,CAAC;gBACtC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBACvE,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA1BD,sCA0BC"}
@@ -13,10 +13,6 @@ export declare class InteractionService {
13
13
  * Returns 'granted' or 'denied' based on the Worker's CAS result.
14
14
  */
15
15
  requestTakeover(taskId: number, sessionId: string): Promise<'granted' | 'denied'>;
16
- /**
17
- * Release a takeover by clearing the writer role for a task.
18
- */
19
- releaseTakeover(taskId: number): Promise<void>;
20
16
  /**
21
17
  * Write stdin to a PTY session via the relay service.
22
18
  * Enforces writer check and rate limiting through PtyRelayService.
@@ -1 +1 @@
1
- {"version":3,"file":"interaction.service.d.ts","sourceRoot":"","sources":["../../src/web/interaction.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,qBACa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IAL1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;gBAG3C,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,uBAAuB,EAAE,uBAAuB;IAGnE;;;;OAIG;IACG,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC;IAqBhC;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpD;;;OAGG;IACH,UAAU,CACR,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GACnB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAmBvC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM;IAI5D;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIpD;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO;CAYhE"}
1
+ {"version":3,"file":"interaction.service.d.ts","sourceRoot":"","sources":["../../src/web/interaction.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,qBACa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IAL1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;gBAG3C,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,uBAAuB,EAAE,uBAAuB;IAGnE;;;;OAIG;IACG,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC;IAqBhC;;;OAGG;IACH,UAAU,CACR,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GACnB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAmBvC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM;IAI5D;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIpD;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO;CAYhE"}