@0xmaxma/claude-gateway 1.8.13 → 2.0.0

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 (594) hide show
  1. package/README.md +28 -1605
  2. package/config.template.json +7 -1
  3. package/dist/agent/runner.d.ts +394 -0
  4. package/dist/agent/runner.d.ts.map +1 -1
  5. package/dist/agent/runner.js +867 -38
  6. package/dist/agent/runner.js.map +1 -1
  7. package/dist/agent/skill-learning/index.d.ts +6 -4
  8. package/dist/agent/skill-learning/index.d.ts.map +1 -1
  9. package/dist/agent/skill-learning/index.js +3 -3
  10. package/dist/agent/skill-learning/index.js.map +1 -1
  11. package/dist/agent/skill-learning/notifier.d.ts +3 -4
  12. package/dist/agent/skill-learning/notifier.d.ts.map +1 -1
  13. package/dist/agent/skill-learning/notifier.js +15 -13
  14. package/dist/agent/skill-learning/notifier.js.map +1 -1
  15. package/dist/agent/skill-learning/reviewer.d.ts.map +1 -1
  16. package/dist/agent/skill-learning/reviewer.js +3 -1
  17. package/dist/agent/skill-learning/reviewer.js.map +1 -1
  18. package/dist/api/connectors-router.d.ts.map +1 -1
  19. package/dist/api/connectors-router.js +110 -4
  20. package/dist/api/connectors-router.js.map +1 -1
  21. package/dist/api/gateway-router.d.ts +1 -0
  22. package/dist/api/gateway-router.d.ts.map +1 -1
  23. package/dist/api/gateway-router.js +13 -1
  24. package/dist/api/gateway-router.js.map +1 -1
  25. package/dist/api/line-webhook-router.d.ts +2 -2
  26. package/dist/api/line-webhook-router.d.ts.map +1 -1
  27. package/dist/api/line-webhook-router.js +264 -230
  28. package/dist/api/line-webhook-router.js.map +1 -1
  29. package/dist/api/router.d.ts.map +1 -1
  30. package/dist/api/router.js +372 -11
  31. package/dist/api/router.js.map +1 -1
  32. package/dist/api/share-router.d.ts.map +1 -1
  33. package/dist/api/share-router.js +29 -10
  34. package/dist/api/share-router.js.map +1 -1
  35. package/dist/api/slack-client.d.ts +2 -0
  36. package/dist/api/slack-client.d.ts.map +1 -1
  37. package/dist/api/slack-client.js +6 -2
  38. package/dist/api/slack-client.js.map +1 -1
  39. package/dist/api/slack-webhook-router.d.ts +3 -0
  40. package/dist/api/slack-webhook-router.d.ts.map +1 -1
  41. package/dist/api/slack-webhook-router.js +226 -131
  42. package/dist/api/slack-webhook-router.js.map +1 -1
  43. package/dist/api/voice-router.d.ts +21 -0
  44. package/dist/api/voice-router.d.ts.map +1 -0
  45. package/dist/api/voice-router.js +372 -0
  46. package/dist/api/voice-router.js.map +1 -0
  47. package/dist/api/voice-settings-router.d.ts +5 -0
  48. package/dist/api/voice-settings-router.d.ts.map +1 -0
  49. package/dist/api/voice-settings-router.js +318 -0
  50. package/dist/api/voice-settings-router.js.map +1 -0
  51. package/dist/api/wechat-access.d.ts +45 -0
  52. package/dist/api/wechat-access.d.ts.map +1 -0
  53. package/dist/api/wechat-access.js +48 -0
  54. package/dist/api/wechat-access.js.map +1 -0
  55. package/dist/apps/agent-container-migration.d.ts +11 -0
  56. package/dist/apps/agent-container-migration.d.ts.map +1 -0
  57. package/dist/apps/agent-container-migration.js +85 -0
  58. package/dist/apps/agent-container-migration.js.map +1 -0
  59. package/dist/apps/installer.d.ts +1 -1
  60. package/dist/apps/installer.d.ts.map +1 -1
  61. package/dist/apps/installer.js +2 -1
  62. package/dist/apps/installer.js.map +1 -1
  63. package/dist/cli/commands/tasks.d.ts +5 -0
  64. package/dist/cli/commands/tasks.d.ts.map +1 -0
  65. package/dist/cli/commands/tasks.js +92 -0
  66. package/dist/cli/commands/tasks.js.map +1 -0
  67. package/dist/cli/http-client.d.ts +2 -0
  68. package/dist/cli/http-client.d.ts.map +1 -1
  69. package/dist/cli/http-client.js +8 -3
  70. package/dist/cli/http-client.js.map +1 -1
  71. package/dist/cli/index.d.ts.map +1 -1
  72. package/dist/cli/index.js +5 -1
  73. package/dist/cli/index.js.map +1 -1
  74. package/dist/config/config-write-lock.d.ts +2 -0
  75. package/dist/config/config-write-lock.d.ts.map +1 -1
  76. package/dist/config/config-write-lock.js +5 -0
  77. package/dist/config/config-write-lock.js.map +1 -1
  78. package/dist/config/loader.d.ts.map +1 -1
  79. package/dist/config/loader.js +87 -2
  80. package/dist/config/loader.js.map +1 -1
  81. package/dist/config/migrator.d.ts.map +1 -1
  82. package/dist/config/migrator.js +12 -1
  83. package/dist/config/migrator.js.map +1 -1
  84. package/dist/config/watcher.d.ts.map +1 -1
  85. package/dist/config/watcher.js +6 -0
  86. package/dist/config/watcher.js.map +1 -1
  87. package/dist/connectors/resolve.d.ts.map +1 -1
  88. package/dist/connectors/resolve.js +3 -1
  89. package/dist/connectors/resolve.js.map +1 -1
  90. package/dist/connectors/types.d.ts +8 -0
  91. package/dist/connectors/types.d.ts.map +1 -1
  92. package/dist/cron/manager.d.ts.map +1 -1
  93. package/dist/cron/manager.js +21 -2
  94. package/dist/cron/manager.js.map +1 -1
  95. package/dist/discord/receiver.d.ts +2 -1
  96. package/dist/discord/receiver.d.ts.map +1 -1
  97. package/dist/discord/receiver.js +5 -1
  98. package/dist/discord/receiver.js.map +1 -1
  99. package/dist/history/db.d.ts +3 -0
  100. package/dist/history/db.d.ts.map +1 -1
  101. package/dist/history/db.js +21 -1
  102. package/dist/history/db.js.map +1 -1
  103. package/dist/history/types.d.ts +12 -1
  104. package/dist/history/types.d.ts.map +1 -1
  105. package/dist/history/types.js +10 -1
  106. package/dist/history/types.js.map +1 -1
  107. package/dist/index.js +48 -9
  108. package/dist/index.js.map +1 -1
  109. package/dist/orchestration/bounded-queue.d.ts +15 -0
  110. package/dist/orchestration/bounded-queue.d.ts.map +1 -0
  111. package/dist/orchestration/bounded-queue.js +58 -0
  112. package/dist/orchestration/bounded-queue.js.map +1 -0
  113. package/dist/orchestration/bridge.d.ts +55 -0
  114. package/dist/orchestration/bridge.d.ts.map +1 -0
  115. package/dist/orchestration/bridge.js +234 -0
  116. package/dist/orchestration/bridge.js.map +1 -0
  117. package/dist/orchestration/browser-routing.d.ts +7 -0
  118. package/dist/orchestration/browser-routing.d.ts.map +1 -0
  119. package/dist/orchestration/browser-routing.js +22 -0
  120. package/dist/orchestration/browser-routing.js.map +1 -0
  121. package/dist/orchestration/capabilities.d.ts +49 -0
  122. package/dist/orchestration/capabilities.d.ts.map +1 -0
  123. package/dist/orchestration/capabilities.js +417 -0
  124. package/dist/orchestration/capabilities.js.map +1 -0
  125. package/dist/orchestration/capacity.d.ts +14 -0
  126. package/dist/orchestration/capacity.d.ts.map +1 -0
  127. package/dist/orchestration/capacity.js +52 -0
  128. package/dist/orchestration/capacity.js.map +1 -0
  129. package/dist/orchestration/channel-activity.d.ts +21 -0
  130. package/dist/orchestration/channel-activity.d.ts.map +1 -0
  131. package/dist/orchestration/channel-activity.js +72 -0
  132. package/dist/orchestration/channel-activity.js.map +1 -0
  133. package/dist/orchestration/channel-controls.d.ts +32 -0
  134. package/dist/orchestration/channel-controls.d.ts.map +1 -0
  135. package/dist/orchestration/channel-controls.js +105 -0
  136. package/dist/orchestration/channel-controls.js.map +1 -0
  137. package/dist/orchestration/channel-input-media.d.ts +11 -0
  138. package/dist/orchestration/channel-input-media.d.ts.map +1 -0
  139. package/dist/orchestration/channel-input-media.js +54 -0
  140. package/dist/orchestration/channel-input-media.js.map +1 -0
  141. package/dist/orchestration/channel-media.d.ts +4 -0
  142. package/dist/orchestration/channel-media.d.ts.map +1 -0
  143. package/dist/orchestration/channel-media.js +70 -0
  144. package/dist/orchestration/channel-media.js.map +1 -0
  145. package/dist/orchestration/channel-speech.d.ts +7 -0
  146. package/dist/orchestration/channel-speech.d.ts.map +1 -0
  147. package/dist/orchestration/channel-speech.js +65 -0
  148. package/dist/orchestration/channel-speech.js.map +1 -0
  149. package/dist/orchestration/cli-skills.d.ts +12 -0
  150. package/dist/orchestration/cli-skills.d.ts.map +1 -0
  151. package/dist/orchestration/cli-skills.js +132 -0
  152. package/dist/orchestration/cli-skills.js.map +1 -0
  153. package/dist/orchestration/config.d.ts +256 -0
  154. package/dist/orchestration/config.d.ts.map +1 -0
  155. package/dist/orchestration/config.js +110 -0
  156. package/dist/orchestration/config.js.map +1 -0
  157. package/dist/orchestration/container.d.ts +21 -0
  158. package/dist/orchestration/container.d.ts.map +1 -0
  159. package/dist/orchestration/container.js +195 -0
  160. package/dist/orchestration/container.js.map +1 -0
  161. package/dist/orchestration/control-delivery.d.ts +5 -0
  162. package/dist/orchestration/control-delivery.d.ts.map +1 -0
  163. package/dist/orchestration/control-delivery.js +50 -0
  164. package/dist/orchestration/control-delivery.js.map +1 -0
  165. package/dist/orchestration/conversation-intake.d.ts +32 -0
  166. package/dist/orchestration/conversation-intake.d.ts.map +1 -0
  167. package/dist/orchestration/conversation-intake.js +92 -0
  168. package/dist/orchestration/conversation-intake.js.map +1 -0
  169. package/dist/orchestration/decisions.d.ts +27 -0
  170. package/dist/orchestration/decisions.d.ts.map +1 -0
  171. package/dist/orchestration/decisions.js +148 -0
  172. package/dist/orchestration/decisions.js.map +1 -0
  173. package/dist/orchestration/delivery.d.ts +30 -0
  174. package/dist/orchestration/delivery.d.ts.map +1 -0
  175. package/dist/orchestration/delivery.js +219 -0
  176. package/dist/orchestration/delivery.js.map +1 -0
  177. package/dist/orchestration/display-stream.d.ts +4 -0
  178. package/dist/orchestration/display-stream.d.ts.map +1 -0
  179. package/dist/orchestration/display-stream.js +77 -0
  180. package/dist/orchestration/display-stream.js.map +1 -0
  181. package/dist/orchestration/events.d.ts +30 -0
  182. package/dist/orchestration/events.d.ts.map +1 -0
  183. package/dist/orchestration/events.js +65 -0
  184. package/dist/orchestration/events.js.map +1 -0
  185. package/dist/orchestration/execution-observation.d.ts +38 -0
  186. package/dist/orchestration/execution-observation.d.ts.map +1 -0
  187. package/dist/orchestration/execution-observation.js +25 -0
  188. package/dist/orchestration/execution-observation.js.map +1 -0
  189. package/dist/orchestration/file-delivery.d.ts +16 -0
  190. package/dist/orchestration/file-delivery.d.ts.map +1 -0
  191. package/dist/orchestration/file-delivery.js +139 -0
  192. package/dist/orchestration/file-delivery.js.map +1 -0
  193. package/dist/orchestration/gateway-config.d.ts +17 -0
  194. package/dist/orchestration/gateway-config.d.ts.map +1 -0
  195. package/dist/orchestration/gateway-config.js +128 -0
  196. package/dist/orchestration/gateway-config.js.map +1 -0
  197. package/dist/orchestration/history.d.ts +13 -0
  198. package/dist/orchestration/history.d.ts.map +1 -0
  199. package/dist/orchestration/history.js +48 -0
  200. package/dist/orchestration/history.js.map +1 -0
  201. package/dist/orchestration/identity.d.ts +6 -0
  202. package/dist/orchestration/identity.d.ts.map +1 -0
  203. package/dist/orchestration/identity.js +13 -0
  204. package/dist/orchestration/identity.js.map +1 -0
  205. package/dist/orchestration/inference-errors.d.ts +3 -0
  206. package/dist/orchestration/inference-errors.d.ts.map +1 -0
  207. package/dist/orchestration/inference-errors.js +16 -0
  208. package/dist/orchestration/inference-errors.js.map +1 -0
  209. package/dist/orchestration/input-images.d.ts +12 -0
  210. package/dist/orchestration/input-images.d.ts.map +1 -0
  211. package/dist/orchestration/input-images.js +66 -0
  212. package/dist/orchestration/input-images.js.map +1 -0
  213. package/dist/orchestration/instance-lock.d.ts +5 -0
  214. package/dist/orchestration/instance-lock.d.ts.map +1 -0
  215. package/dist/orchestration/instance-lock.js +33 -0
  216. package/dist/orchestration/instance-lock.js.map +1 -0
  217. package/dist/orchestration/line-loading.d.ts +21 -0
  218. package/dist/orchestration/line-loading.d.ts.map +1 -0
  219. package/dist/orchestration/line-loading.js +89 -0
  220. package/dist/orchestration/line-loading.js.map +1 -0
  221. package/dist/orchestration/media.d.ts +3 -0
  222. package/dist/orchestration/media.d.ts.map +1 -0
  223. package/dist/orchestration/media.js +46 -0
  224. package/dist/orchestration/media.js.map +1 -0
  225. package/dist/orchestration/migrations/schema.d.ts +3 -0
  226. package/dist/orchestration/migrations/schema.d.ts.map +1 -0
  227. package/dist/orchestration/migrations/schema.js +80 -0
  228. package/dist/orchestration/migrations/schema.js.map +1 -0
  229. package/dist/orchestration/notification-mailbox.d.ts +5 -0
  230. package/dist/orchestration/notification-mailbox.d.ts.map +1 -0
  231. package/dist/orchestration/notification-mailbox.js +29 -0
  232. package/dist/orchestration/notification-mailbox.js.map +1 -0
  233. package/dist/orchestration/process-activity.d.ts +23 -0
  234. package/dist/orchestration/process-activity.d.ts.map +1 -0
  235. package/dist/orchestration/process-activity.js +95 -0
  236. package/dist/orchestration/process-activity.js.map +1 -0
  237. package/dist/orchestration/process-supervisor.d.ts +15 -0
  238. package/dist/orchestration/process-supervisor.d.ts.map +1 -0
  239. package/dist/orchestration/process-supervisor.js +92 -0
  240. package/dist/orchestration/process-supervisor.js.map +1 -0
  241. package/dist/orchestration/process-turn.d.ts +35 -0
  242. package/dist/orchestration/process-turn.d.ts.map +1 -0
  243. package/dist/orchestration/process-turn.js +246 -0
  244. package/dist/orchestration/process-turn.js.map +1 -0
  245. package/dist/orchestration/progress-review.d.ts +28 -0
  246. package/dist/orchestration/progress-review.d.ts.map +1 -0
  247. package/dist/orchestration/progress-review.js +48 -0
  248. package/dist/orchestration/progress-review.js.map +1 -0
  249. package/dist/orchestration/recovery.d.ts +8 -0
  250. package/dist/orchestration/recovery.d.ts.map +1 -0
  251. package/dist/orchestration/recovery.js +35 -0
  252. package/dist/orchestration/recovery.js.map +1 -0
  253. package/dist/orchestration/reply-context.d.ts +7 -0
  254. package/dist/orchestration/reply-context.d.ts.map +1 -0
  255. package/dist/orchestration/reply-context.js +54 -0
  256. package/dist/orchestration/reply-context.js.map +1 -0
  257. package/dist/orchestration/runtime.d.ts +232 -0
  258. package/dist/orchestration/runtime.d.ts.map +1 -0
  259. package/dist/orchestration/runtime.js +962 -0
  260. package/dist/orchestration/runtime.js.map +1 -0
  261. package/dist/orchestration/skills.d.ts +17 -0
  262. package/dist/orchestration/skills.d.ts.map +1 -0
  263. package/dist/orchestration/skills.js +32 -0
  264. package/dist/orchestration/skills.js.map +1 -0
  265. package/dist/orchestration/source-policy.d.ts +6 -0
  266. package/dist/orchestration/source-policy.d.ts.map +1 -0
  267. package/dist/orchestration/source-policy.js +16 -0
  268. package/dist/orchestration/source-policy.js.map +1 -0
  269. package/dist/orchestration/speech.d.ts +24 -0
  270. package/dist/orchestration/speech.d.ts.map +1 -0
  271. package/dist/orchestration/speech.js +61 -0
  272. package/dist/orchestration/speech.js.map +1 -0
  273. package/dist/orchestration/stop-controls.d.ts +30 -0
  274. package/dist/orchestration/stop-controls.d.ts.map +1 -0
  275. package/dist/orchestration/stop-controls.js +79 -0
  276. package/dist/orchestration/stop-controls.js.map +1 -0
  277. package/dist/orchestration/store.d.ts +86 -0
  278. package/dist/orchestration/store.d.ts.map +1 -0
  279. package/dist/orchestration/store.js +275 -0
  280. package/dist/orchestration/store.js.map +1 -0
  281. package/dist/orchestration/task-controls.d.ts +130 -0
  282. package/dist/orchestration/task-controls.d.ts.map +1 -0
  283. package/dist/orchestration/task-controls.js +55 -0
  284. package/dist/orchestration/task-controls.js.map +1 -0
  285. package/dist/orchestration/task-files.d.ts +29 -0
  286. package/dist/orchestration/task-files.d.ts.map +1 -0
  287. package/dist/orchestration/task-files.js +200 -0
  288. package/dist/orchestration/task-files.js.map +1 -0
  289. package/dist/orchestration/task-report.d.ts +7 -0
  290. package/dist/orchestration/task-report.d.ts.map +1 -0
  291. package/dist/orchestration/task-report.js +33 -0
  292. package/dist/orchestration/task-report.js.map +1 -0
  293. package/dist/orchestration/tasks/checkpoint-hook.d.ts +19 -0
  294. package/dist/orchestration/tasks/checkpoint-hook.d.ts.map +1 -0
  295. package/dist/orchestration/tasks/checkpoint-hook.js +49 -0
  296. package/dist/orchestration/tasks/checkpoint-hook.js.map +1 -0
  297. package/dist/orchestration/tasks/cleanup.d.ts +18 -0
  298. package/dist/orchestration/tasks/cleanup.d.ts.map +1 -0
  299. package/dist/orchestration/tasks/cleanup.js +113 -0
  300. package/dist/orchestration/tasks/cleanup.js.map +1 -0
  301. package/dist/orchestration/tasks/driver.d.ts +23 -0
  302. package/dist/orchestration/tasks/driver.d.ts.map +1 -0
  303. package/dist/orchestration/tasks/driver.js +209 -0
  304. package/dist/orchestration/tasks/driver.js.map +1 -0
  305. package/dist/orchestration/tasks/failure.d.ts +5 -0
  306. package/dist/orchestration/tasks/failure.d.ts.map +1 -0
  307. package/dist/orchestration/tasks/failure.js +17 -0
  308. package/dist/orchestration/tasks/failure.js.map +1 -0
  309. package/dist/orchestration/tasks/pool.d.ts +18 -0
  310. package/dist/orchestration/tasks/pool.d.ts.map +1 -0
  311. package/dist/orchestration/tasks/pool.js +73 -0
  312. package/dist/orchestration/tasks/pool.js.map +1 -0
  313. package/dist/orchestration/tasks/scheduler.d.ts +38 -0
  314. package/dist/orchestration/tasks/scheduler.d.ts.map +1 -0
  315. package/dist/orchestration/tasks/scheduler.js +160 -0
  316. package/dist/orchestration/tasks/scheduler.js.map +1 -0
  317. package/dist/orchestration/tasks/service.d.ts +109 -0
  318. package/dist/orchestration/tasks/service.d.ts.map +1 -0
  319. package/dist/orchestration/tasks/service.js +697 -0
  320. package/dist/orchestration/tasks/service.js.map +1 -0
  321. package/dist/orchestration/tasks/shared-workspace.d.ts +25 -0
  322. package/dist/orchestration/tasks/shared-workspace.d.ts.map +1 -0
  323. package/dist/orchestration/tasks/shared-workspace.js +162 -0
  324. package/dist/orchestration/tasks/shared-workspace.js.map +1 -0
  325. package/dist/orchestration/tasks/task-directive.d.ts +6 -0
  326. package/dist/orchestration/tasks/task-directive.d.ts.map +1 -0
  327. package/dist/orchestration/tasks/task-directive.js +41 -0
  328. package/dist/orchestration/tasks/task-directive.js.map +1 -0
  329. package/dist/orchestration/tasks/timing.d.ts +15 -0
  330. package/dist/orchestration/tasks/timing.d.ts.map +1 -0
  331. package/dist/orchestration/tasks/timing.js +48 -0
  332. package/dist/orchestration/tasks/timing.js.map +1 -0
  333. package/dist/orchestration/tasks/tool-repetition.d.ts +3 -0
  334. package/dist/orchestration/tasks/tool-repetition.d.ts.map +1 -0
  335. package/dist/orchestration/tasks/tool-repetition.js +30 -0
  336. package/dist/orchestration/tasks/tool-repetition.js.map +1 -0
  337. package/dist/orchestration/tasks/workspace.d.ts +24 -0
  338. package/dist/orchestration/tasks/workspace.d.ts.map +1 -0
  339. package/dist/orchestration/tasks/workspace.js +147 -0
  340. package/dist/orchestration/tasks/workspace.js.map +1 -0
  341. package/dist/orchestration/telegram-speech.d.ts +17 -0
  342. package/dist/orchestration/telegram-speech.d.ts.map +1 -0
  343. package/dist/orchestration/telegram-speech.js +55 -0
  344. package/dist/orchestration/telegram-speech.js.map +1 -0
  345. package/dist/orchestration/telegram-tool-status.d.ts +23 -0
  346. package/dist/orchestration/telegram-tool-status.d.ts.map +1 -0
  347. package/dist/orchestration/telegram-tool-status.js +207 -0
  348. package/dist/orchestration/telegram-tool-status.js.map +1 -0
  349. package/dist/orchestration/telegram-voices.d.ts +42 -0
  350. package/dist/orchestration/telegram-voices.d.ts.map +1 -0
  351. package/dist/orchestration/telegram-voices.js +70 -0
  352. package/dist/orchestration/telegram-voices.js.map +1 -0
  353. package/dist/orchestration/tool-activity.d.ts +10 -0
  354. package/dist/orchestration/tool-activity.d.ts.map +1 -0
  355. package/dist/orchestration/tool-activity.js +38 -0
  356. package/dist/orchestration/tool-activity.js.map +1 -0
  357. package/dist/orchestration/types.d.ts +177 -0
  358. package/dist/orchestration/types.d.ts.map +1 -0
  359. package/dist/orchestration/types.js +13 -0
  360. package/dist/orchestration/types.js.map +1 -0
  361. package/dist/orchestration/voice-reply-policy.d.ts +8 -0
  362. package/dist/orchestration/voice-reply-policy.d.ts.map +1 -0
  363. package/dist/orchestration/voice-reply-policy.js +46 -0
  364. package/dist/orchestration/voice-reply-policy.js.map +1 -0
  365. package/dist/orchestration/worker-shares.d.ts +8 -0
  366. package/dist/orchestration/worker-shares.d.ts.map +1 -0
  367. package/dist/orchestration/worker-shares.js +59 -0
  368. package/dist/orchestration/worker-shares.js.map +1 -0
  369. package/dist/orchestration/workflow.d.ts +121 -0
  370. package/dist/orchestration/workflow.d.ts.map +1 -0
  371. package/dist/orchestration/workflow.js +69 -0
  372. package/dist/orchestration/workflow.js.map +1 -0
  373. package/dist/session/input-image.d.ts +10 -0
  374. package/dist/session/input-image.d.ts.map +1 -0
  375. package/dist/session/input-image.js +3 -0
  376. package/dist/session/input-image.js.map +1 -0
  377. package/dist/session/process.d.ts +15 -3
  378. package/dist/session/process.d.ts.map +1 -1
  379. package/dist/session/process.js +144 -35
  380. package/dist/session/process.js.map +1 -1
  381. package/dist/session/runtime-profile.d.ts +36 -0
  382. package/dist/session/runtime-profile.d.ts.map +1 -0
  383. package/dist/session/runtime-profile.js +63 -0
  384. package/dist/session/runtime-profile.js.map +1 -0
  385. package/dist/session/store.d.ts.map +1 -1
  386. package/dist/session/store.js +23 -1
  387. package/dist/session/store.js.map +1 -1
  388. package/dist/share/share-store.d.ts +3 -1
  389. package/dist/share/share-store.d.ts.map +1 -1
  390. package/dist/share/share-store.js +13 -2
  391. package/dist/share/share-store.js.map +1 -1
  392. package/dist/shared/line-request-order.d.ts +2 -0
  393. package/dist/shared/line-request-order.d.ts.map +1 -0
  394. package/dist/shared/line-request-order.js +16 -0
  395. package/dist/shared/line-request-order.js.map +1 -0
  396. package/dist/shared/task-elapsed.d.ts +3 -0
  397. package/dist/shared/task-elapsed.d.ts.map +1 -0
  398. package/dist/shared/task-elapsed.js +12 -0
  399. package/dist/shared/task-elapsed.js.map +1 -0
  400. package/dist/shared/task-updated-time.d.ts +3 -0
  401. package/dist/shared/task-updated-time.d.ts.map +1 -0
  402. package/dist/shared/task-updated-time.js +15 -0
  403. package/dist/shared/task-updated-time.js.map +1 -0
  404. package/dist/skills/loader.d.ts +2 -0
  405. package/dist/skills/loader.d.ts.map +1 -1
  406. package/dist/skills/loader.js.map +1 -1
  407. package/dist/telegram/chunks.d.ts +19 -0
  408. package/dist/telegram/chunks.d.ts.map +1 -0
  409. package/dist/telegram/chunks.js +129 -0
  410. package/dist/telegram/chunks.js.map +1 -0
  411. package/dist/telegram/markdown.d.ts.map +1 -1
  412. package/dist/telegram/markdown.js +18 -3
  413. package/dist/telegram/markdown.js.map +1 -1
  414. package/dist/telegram/receiver.d.ts +2 -1
  415. package/dist/telegram/receiver.d.ts.map +1 -1
  416. package/dist/telegram/receiver.js +6 -1
  417. package/dist/telegram/receiver.js.map +1 -1
  418. package/dist/types.d.ts +54 -0
  419. package/dist/types.d.ts.map +1 -1
  420. package/dist/ui/web-ui.d.ts.map +1 -1
  421. package/dist/ui/web-ui.js +31 -5
  422. package/dist/ui/web-ui.js.map +1 -1
  423. package/dist/voice/diagnostics.d.ts +29 -0
  424. package/dist/voice/diagnostics.d.ts.map +1 -0
  425. package/dist/voice/diagnostics.js +37 -0
  426. package/dist/voice/diagnostics.js.map +1 -0
  427. package/dist/voice/errors.d.ts +19 -0
  428. package/dist/voice/errors.d.ts.map +1 -0
  429. package/dist/voice/errors.js +133 -0
  430. package/dist/voice/errors.js.map +1 -0
  431. package/dist/voice/line-audio.d.ts +4 -0
  432. package/dist/voice/line-audio.d.ts.map +1 -0
  433. package/dist/voice/line-audio.js +27 -0
  434. package/dist/voice/line-audio.js.map +1 -0
  435. package/dist/voice/managed-quota.d.ts +5 -0
  436. package/dist/voice/managed-quota.d.ts.map +1 -0
  437. package/dist/voice/managed-quota.js +35 -0
  438. package/dist/voice/managed-quota.js.map +1 -0
  439. package/dist/voice/mp3.d.ts +3 -0
  440. package/dist/voice/mp3.d.ts.map +1 -0
  441. package/dist/voice/mp3.js +30 -0
  442. package/dist/voice/mp3.js.map +1 -0
  443. package/dist/voice/notes.d.ts +9 -0
  444. package/dist/voice/notes.d.ts.map +1 -0
  445. package/dist/voice/notes.js +68 -0
  446. package/dist/voice/notes.js.map +1 -0
  447. package/dist/voice/playback.d.ts +22 -0
  448. package/dist/voice/playback.d.ts.map +1 -0
  449. package/dist/voice/playback.js +52 -0
  450. package/dist/voice/playback.js.map +1 -0
  451. package/dist/voice/preview.d.ts +6 -0
  452. package/dist/voice/preview.d.ts.map +1 -0
  453. package/dist/voice/preview.js +44 -0
  454. package/dist/voice/preview.js.map +1 -0
  455. package/dist/voice/protocol.d.ts +10 -0
  456. package/dist/voice/protocol.d.ts.map +1 -0
  457. package/dist/voice/protocol.js +30 -0
  458. package/dist/voice/protocol.js.map +1 -0
  459. package/dist/voice/providers/cartesia-tts.d.ts +26 -0
  460. package/dist/voice/providers/cartesia-tts.d.ts.map +1 -0
  461. package/dist/voice/providers/cartesia-tts.js +95 -0
  462. package/dist/voice/providers/cartesia-tts.js.map +1 -0
  463. package/dist/voice/providers/deepgram-stt.d.ts +20 -0
  464. package/dist/voice/providers/deepgram-stt.d.ts.map +1 -0
  465. package/dist/voice/providers/deepgram-stt.js +66 -0
  466. package/dist/voice/providers/deepgram-stt.js.map +1 -0
  467. package/dist/voice/providers/elevenlabs-stt.d.ts +20 -0
  468. package/dist/voice/providers/elevenlabs-stt.d.ts.map +1 -0
  469. package/dist/voice/providers/elevenlabs-stt.js +92 -0
  470. package/dist/voice/providers/elevenlabs-stt.js.map +1 -0
  471. package/dist/voice/providers/elevenlabs-tts.d.ts +26 -0
  472. package/dist/voice/providers/elevenlabs-tts.d.ts.map +1 -0
  473. package/dist/voice/providers/elevenlabs-tts.js +82 -0
  474. package/dist/voice/providers/elevenlabs-tts.js.map +1 -0
  475. package/dist/voice/providers/encoded-audio-tts.d.ts +21 -0
  476. package/dist/voice/providers/encoded-audio-tts.d.ts.map +1 -0
  477. package/dist/voice/providers/encoded-audio-tts.js +175 -0
  478. package/dist/voice/providers/encoded-audio-tts.js.map +1 -0
  479. package/dist/voice/providers/fake.d.ts +39 -0
  480. package/dist/voice/providers/fake.d.ts.map +1 -0
  481. package/dist/voice/providers/fake.js +41 -0
  482. package/dist/voice/providers/fake.js.map +1 -0
  483. package/dist/voice/providers/gemini-live-stt.d.ts +21 -0
  484. package/dist/voice/providers/gemini-live-stt.d.ts.map +1 -0
  485. package/dist/voice/providers/gemini-live-stt.js +158 -0
  486. package/dist/voice/providers/gemini-live-stt.js.map +1 -0
  487. package/dist/voice/providers/gemini.d.ts +60 -0
  488. package/dist/voice/providers/gemini.d.ts.map +1 -0
  489. package/dist/voice/providers/gemini.js +124 -0
  490. package/dist/voice/providers/gemini.js.map +1 -0
  491. package/dist/voice/providers/model-ref.d.ts +9 -0
  492. package/dist/voice/providers/model-ref.d.ts.map +1 -0
  493. package/dist/voice/providers/model-ref.js +31 -0
  494. package/dist/voice/providers/model-ref.js.map +1 -0
  495. package/dist/voice/providers/openrouter.d.ts +39 -0
  496. package/dist/voice/providers/openrouter.d.ts.map +1 -0
  497. package/dist/voice/providers/openrouter.js +154 -0
  498. package/dist/voice/providers/openrouter.js.map +1 -0
  499. package/dist/voice/providers/paxalabs-stt.d.ts +12 -0
  500. package/dist/voice/providers/paxalabs-stt.d.ts.map +1 -0
  501. package/dist/voice/providers/paxalabs-stt.js +41 -0
  502. package/dist/voice/providers/paxalabs-stt.js.map +1 -0
  503. package/dist/voice/providers/paxalabs-tts.d.ts +23 -0
  504. package/dist/voice/providers/paxalabs-tts.d.ts.map +1 -0
  505. package/dist/voice/providers/paxalabs-tts.js +80 -0
  506. package/dist/voice/providers/paxalabs-tts.js.map +1 -0
  507. package/dist/voice/providers/recorded-stt.d.ts +34 -0
  508. package/dist/voice/providers/recorded-stt.d.ts.map +1 -0
  509. package/dist/voice/providers/recorded-stt.js +59 -0
  510. package/dist/voice/providers/recorded-stt.js.map +1 -0
  511. package/dist/voice/providers/registry.d.ts +10 -0
  512. package/dist/voice/providers/registry.d.ts.map +1 -0
  513. package/dist/voice/providers/registry.js +77 -0
  514. package/dist/voice/providers/registry.js.map +1 -0
  515. package/dist/voice/providers/socket.d.ts +10 -0
  516. package/dist/voice/providers/socket.d.ts.map +1 -0
  517. package/dist/voice/providers/socket.js +91 -0
  518. package/dist/voice/providers/socket.js.map +1 -0
  519. package/dist/voice/providers/upstream.d.ts +9 -0
  520. package/dist/voice/providers/upstream.d.ts.map +1 -0
  521. package/dist/voice/providers/upstream.js +51 -0
  522. package/dist/voice/providers/upstream.js.map +1 -0
  523. package/dist/voice/providers/voice-catalog.d.ts +17 -0
  524. package/dist/voice/providers/voice-catalog.d.ts.map +1 -0
  525. package/dist/voice/providers/voice-catalog.js +167 -0
  526. package/dist/voice/providers/voice-catalog.js.map +1 -0
  527. package/dist/voice/queue.d.ts +2 -0
  528. package/dist/voice/queue.d.ts.map +1 -0
  529. package/dist/voice/queue.js +6 -0
  530. package/dist/voice/queue.js.map +1 -0
  531. package/dist/voice/session.d.ts +86 -0
  532. package/dist/voice/session.d.ts.map +1 -0
  533. package/dist/voice/session.js +464 -0
  534. package/dist/voice/session.js.map +1 -0
  535. package/dist/voice/turn-manager.d.ts +27 -0
  536. package/dist/voice/turn-manager.d.ts.map +1 -0
  537. package/dist/voice/turn-manager.js +75 -0
  538. package/dist/voice/turn-manager.js.map +1 -0
  539. package/dist/voice/types.d.ts +78 -0
  540. package/dist/voice/types.d.ts.map +1 -0
  541. package/dist/voice/types.js +18 -0
  542. package/dist/voice/types.js.map +1 -0
  543. package/dist/voice/wav.d.ts +2 -0
  544. package/dist/voice/wav.d.ts.map +1 -0
  545. package/dist/voice/wav.js +21 -0
  546. package/dist/voice/wav.js.map +1 -0
  547. package/dist/wechat/ilink-client.d.ts +207 -0
  548. package/dist/wechat/ilink-client.d.ts.map +1 -0
  549. package/dist/wechat/ilink-client.js +660 -0
  550. package/dist/wechat/ilink-client.js.map +1 -0
  551. package/dist/wechat/manager.d.ts +93 -0
  552. package/dist/wechat/manager.d.ts.map +1 -0
  553. package/dist/wechat/manager.js +409 -0
  554. package/dist/wechat/manager.js.map +1 -0
  555. package/dist/whatsapp/manager.d.ts.map +1 -1
  556. package/dist/whatsapp/manager.js +51 -1
  557. package/dist/whatsapp/manager.js.map +1 -1
  558. package/mcp/capability-catalog.ts +206 -0
  559. package/mcp/modules.ts +56 -0
  560. package/mcp/server.ts +18 -35
  561. package/mcp/tools/browser/module.ts +1 -1
  562. package/mcp/tools/browser/skills/open-browser/SKILL.md +5 -3
  563. package/mcp/tools/discord/commands.ts +17 -1
  564. package/mcp/tools/discord/inbound.ts +11 -0
  565. package/mcp/tools/discord/module.ts +42 -2
  566. package/mcp/tools/discord/receiver-server.ts +10 -0
  567. package/mcp/tools/discord/types.ts +4 -1
  568. package/mcp/tools/image/module.ts +3 -1
  569. package/mcp/tools/receiver-spool.test.ts +28 -0
  570. package/mcp/tools/receiver-spool.ts +56 -0
  571. package/mcp/tools/share-file/module.ts +9 -1
  572. package/mcp/tools/shared/share-client.ts +19 -0
  573. package/mcp/tools/tasks/module.ts +35 -0
  574. package/mcp/tools/telegram/media-group.ts +21 -0
  575. package/mcp/tools/telegram/receiver-server.ts +232 -11
  576. package/mcp/tools/telegram/selection-confirmation.ts +20 -0
  577. package/mcp/tools/telegram/task-browser.ts +117 -0
  578. package/mcp/tools/telegram/task-detail.ts +36 -0
  579. package/mcp/tools/telegram/task-elapsed.ts +1 -0
  580. package/mcp/tools/telegram/typing.ts +6 -116
  581. package/mcp/tools/video/module.ts +1 -1
  582. package/mcp/tools/wechat/client.ts +49 -0
  583. package/mcp/tools/wechat/module.ts +88 -0
  584. package/mcp/types.ts +5 -0
  585. package/package.json +2 -1
  586. package/resource/claude_gateway.jpeg +0 -0
  587. package/scripts/orchestration/bench-store.cjs +30 -0
  588. package/scripts/orchestration/inspect.cjs +16 -0
  589. package/scripts/orchestration/probe-profile.cjs +67 -0
  590. package/scripts/orchestration/reconcile.cjs +21 -0
  591. package/scripts/orchestration/smoke-elevenlabs.cjs +90 -0
  592. package/scripts/orchestration/smoke-media.cjs +70 -0
  593. package/scripts/orchestration/smoke-text.cjs +101 -0
  594. package/scripts/orchestration/smoke-vision.cjs +49 -0
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClaudeWorkerDriver = void 0;
4
+ const reply_context_1 = require("../reply-context");
5
+ const tool_repetition_1 = require("./tool-repetition");
6
+ const task_directive_1 = require("./task-directive");
7
+ const source_policy_1 = require("../source-policy");
8
+ const browser_routing_1 = require("../browser-routing");
9
+ const cli_skills_1 = require("../cli-skills");
10
+ const process_activity_1 = require("../process-activity");
11
+ const process_supervisor_1 = require("../process-supervisor");
12
+ const config_1 = require("../config");
13
+ const failure_1 = require("./failure");
14
+ const store_1 = require("../store");
15
+ const container_1 = require("../container");
16
+ const tool_activity_1 = require("../tool-activity");
17
+ const parser_1 = require("../../skills/parser");
18
+ const path_1 = require("path");
19
+ const promises_1 = require("fs/promises");
20
+ const store_2 = require("../../session/store");
21
+ const process_1 = require("../../session/process");
22
+ const types_1 = require("../types");
23
+ const process_turn_1 = require("../process-turn");
24
+ const crypto_1 = require("crypto");
25
+ const capacity_1 = require("../capacity");
26
+ const knowledge_1 = require("../../agent/knowledge");
27
+ const media_store_1 = require("../../history/media-store");
28
+ function boundedDiffText(text) {
29
+ let result = text.slice(0, 8192);
30
+ while (Buffer.byteLength(JSON.stringify(result)) > 16000)
31
+ result = result.slice(0, Math.floor(result.length / 2));
32
+ return result.replace(/[\uD800-\uDBFF]$/, '');
33
+ }
34
+ class ClaudeWorkerDriver {
35
+ constructor(agent, gateway, tasks, bridge, workspaces, privateRoot, onManagedTurn) {
36
+ this.agent = agent;
37
+ this.gateway = gateway;
38
+ this.tasks = tasks;
39
+ this.bridge = bridge;
40
+ this.workspaces = workspaces;
41
+ this.privateRoot = privateRoot;
42
+ this.onManagedTurn = onManagedTurn;
43
+ this.instanceId = (0, crypto_1.randomUUID)();
44
+ }
45
+ async cleanup(attempt) {
46
+ // Stopping a docker client does not prove its container execution stopped.
47
+ if (this.agent.type === 'app-agent')
48
+ return false;
49
+ return (0, process_supervisor_1.cleanupPersistedProcess)(attempt.processIdentity);
50
+ }
51
+ reserve(taskId) { return (0, capacity_1.gatewayCapacity)(this.gateway).acquireWorker(this.agent.id, taskId); }
52
+ available(taskId) { return this.workspaces.available(taskId); }
53
+ release(taskId) { return this.workspaces.release(taskId); }
54
+ async start(task, attempt, capacityReserved = false) {
55
+ if (!['default-worker', 'media-worker', 'skill-worker'].includes(task.targetProfile) || !task.capabilities.execute)
56
+ throw new types_1.OrchestrationError('EXECUTION_DENIED');
57
+ if (task.targetProfile === 'default-worker' && task.resourceProfile?.mode === 'shared-lock') {
58
+ const [project, identity] = await Promise.all([(0, promises_1.realpath)(task.resourceProfile.projectRoot), (0, promises_1.realpath)(this.agent.workspace)]);
59
+ if (project === identity || project.startsWith(identity + '/') || identity.startsWith(project + '/'))
60
+ throw new types_1.OrchestrationError('SHARED_PROJECT_MUST_DIFFER_FROM_IDENTITY_WORKSPACE');
61
+ }
62
+ if (this.agent.type === 'app-agent') {
63
+ if (task.resourceProfile?.mode !== 'container')
64
+ throw new types_1.OrchestrationError('CONTAINER_WORKSPACE_REQUIRED');
65
+ await (0, container_1.validateContainer)(this.agent);
66
+ }
67
+ const workspace = await this.workspaces.prepare(task.taskId);
68
+ const current = this.tasks.store.task(task.taskId);
69
+ if (current.state !== 'starting' || current.activeAttemptId !== attempt.attemptId)
70
+ throw new types_1.OrchestrationError('ATTEMPT_CANCELLED_BEFORE_START');
71
+ const directory = (0, path_1.join)(this.privateRoot, attempt.attemptId);
72
+ const cliSkill = task.skill?.invocation === 'cli';
73
+ const invokedSkill = task.skill ? (cliSkill ? task.skill.name : `orchestration-task:${task.skill.name}`) : undefined;
74
+ if (cliSkill) {
75
+ const installed = await (0, cli_skills_1.discoverCliSkills)(this.agent, workspace.path);
76
+ if (!installed.some(skill => skill.name === task.skill.name))
77
+ throw new types_1.OrchestrationError('CLI_SKILL_UNAVAILABLE', 'The selected skill is unavailable in this worker runtime; no host/container fallback was attempted.');
78
+ }
79
+ const skillPluginDir = task.skill && !cliSkill ? (0, path_1.join)(directory, 'skill-plugin') : undefined;
80
+ if (task.skill && !cliSkill) {
81
+ if (task.skill.requires?.plugins?.length)
82
+ throw new types_1.OrchestrationError('SKILL_PLUGIN_UNAVAILABLE');
83
+ const destination = (0, path_1.join)(skillPluginDir, 'skills', task.skill.name);
84
+ await (0, promises_1.mkdir)((0, path_1.join)(skillPluginDir, '.claude-plugin'), { recursive: true, mode: 0o700 });
85
+ await (0, promises_1.writeFile)((0, path_1.join)(skillPluginDir, '.claude-plugin', 'plugin.json'), JSON.stringify({ name: 'orchestration-task', description: 'Assigned task skill only', version: '1.0.0' }), { mode: 0o600 });
86
+ await (0, promises_1.mkdir)(destination, { recursive: true, mode: 0o700 });
87
+ // Keep relative references/scripts available; the invoked body is pinned at admission.
88
+ await (0, promises_1.cp)((0, path_1.dirname)(task.skill.filePath), destination, { recursive: true, dereference: false, filter: async (source) => !(await (0, promises_1.lstat)(source)).isSymbolicLink() });
89
+ await (0, promises_1.writeFile)((0, path_1.join)(destination, 'SKILL.md'), `---\nname: ${task.skill.name}\ndescription: Assigned installed skill\n---\n${(0, parser_1.extractFrontmatter)(task.skill.content)?.body ?? task.skill.content}`, { mode: 0o600 });
90
+ }
91
+ const revision = this.tasks.revision(task.taskId, attempt.revision);
92
+ const directive = (0, task_directive_1.taskDirective)(this.tasks.store, task.conversationId, revision);
93
+ // Snapshot the authorized agent context without modifying either workspace's
94
+ // persona files. Project CLAUDE.md continues to be discovered in the worktree.
95
+ const context = this.agent.type === 'app-agent'
96
+ ? await (0, container_1.containerNode)(this.agent.container, "process.stdout.write(require('fs').readFileSync('/workspace/CLAUDE.md','utf8'))")
97
+ : await (0, promises_1.readFile)((0, path_1.join)(this.agent.workspace, 'CLAUDE.md'), 'utf8');
98
+ this.tasks.pool.bind(attempt, (0, store_1.payloadHash)({ context, workspace: workspace.path, agent: this.agent, gateway: this.gateway }));
99
+ const shared = (0, knowledge_1.resolveSharedConfig)(this.agent.knowledge?.shared, this.gateway.gateway.knowledge?.shared);
100
+ const ticket = this.bridge.issue({ role: 'worker', attemptId: attempt.attemptId, generation: attempt.generation }, directory, this.agent.workspace, shared.enabled ? (0, knowledge_1.sharedVaultDir)(shared) : '');
101
+ try {
102
+ const profile = { ...ticket.profile, hostExecution: workspace.baseCommit === 'host', containerExecution: this.agent.type === 'app-agent', originSessionId: task.agentSessionId, taskId: task.taskId, attemptId: attempt.attemptId, context, workerSession: { id: attempt.sessionId, resume: Boolean(attempt.resumeSession) }, capacityReserved, skillPluginDir };
103
+ const workerConfig = { ...this.agent, workspace: this.agent.type === 'app-agent' ? this.agent.workspace : workspace.path, allow_tools: true, orchestration: undefined,
104
+ claude: { ...this.agent.claude, model: task.model ?? this.agent.claude.model, extraFlags: [] } };
105
+ const process = new process_1.SessionProcess(attempt.sessionId, 'api', workerConfig, this.gateway, new store_2.SessionStore((0, path_1.join)(this.privateRoot, 'logs')), undefined, profile);
106
+ process.on('output', line => this.bridge.captureWorkerOutput(attempt.attemptId, attempt.generation, line));
107
+ process.on('output', (0, tool_activity_1.toolActivity)(event => this.tasks.store.transaction(() => this.tasks.store.appendEvent(task.conversationId, 'tool.activity', { ...event, taskId: task.taskId, role: 'worker' }, task.taskId))));
108
+ process.on('output', (0, tool_repetition_1.observeToolRepetition)((signature, id) => this.tasks.observeToolResult(attempt.attemptId, attempt.generation, signature, id), active => this.tasks.observeToolBoundary(attempt.attemptId, attempt.generation, active)));
109
+ const skillCalls = new Set();
110
+ process.on('output', line => {
111
+ if (!task.skill)
112
+ return;
113
+ try {
114
+ const event = JSON.parse(line);
115
+ for (const block of event.message?.content ?? []) {
116
+ if (event.type === 'assistant' && block.type === 'tool_use' && block.name === 'Skill' && block.input?.skill === invokedSkill)
117
+ skillCalls.add(block.id);
118
+ if (event.type === 'user' && block.type === 'tool_result' && skillCalls.delete(block.tool_use_id) && !block.is_error) {
119
+ this.tasks.store.transaction(() => this.tasks.store.appendEvent(task.conversationId, 'task.skill_invoked', { attemptId: attempt.attemptId, skill: task.skill.name }, task.taskId));
120
+ }
121
+ }
122
+ }
123
+ catch { /* Observability must not change task execution. */ }
124
+ });
125
+ const input = this.tasks.store.get('SELECT * FROM conversation_inputs WHERE id=?', revision.originatingInputId);
126
+ const conversation = this.tasks.store.get('SELECT * FROM conversations WHERE id=?', task.conversationId);
127
+ const reply = (0, reply_context_1.resolveStoredReply)(this.tasks.store, { agentId: task.agentId, agentSessionId: task.agentSessionId, source: conversation.source, accountId: String(conversation.account_id), chatId: String(conversation.chat_id), threadKey: String(conversation.thread_key), principalId: String(input.principal_id) }, JSON.parse(String(input.ingress_json ?? '{}')).metadata);
128
+ const attachments = [...new Set([...JSON.parse(String(input.attachment_refs_json)), ...(reply?.repliedAttachmentIds ?? [])])].map(ref => media_store_1.MediaStore.resolvePath((0, path_1.join)(this.agent.workspace, '../..'), this.agent.id, ref));
129
+ const references = revision.contextRefs.map(ref => {
130
+ const inputRef = this.tasks.store.get('SELECT text,attachment_refs_json,ingress_json FROM conversation_inputs WHERE id=? AND conversation_id=?', ref.replace(/^input:/, ''), task.conversationId);
131
+ if (inputRef)
132
+ return { ref, kind: 'input', text: inputRef.text, replyContext: (0, reply_context_1.storedReplyContext)(inputRef.ingress_json), attachments: JSON.parse(String(inputRef.attachment_refs_json)).map(path => media_store_1.MediaStore.resolvePath((0, path_1.join)(this.agent.workspace, '../..'), this.agent.id, path)) };
133
+ const file = this.tasks.store.get('SELECT f.path FROM task_files f JOIN tasks t ON t.id=f.task_id WHERE f.id=? AND t.conversation_id=?', ref, task.conversationId);
134
+ if (file)
135
+ return { ref, kind: 'attachment', path: media_store_1.MediaStore.resolvePath((0, path_1.join)(this.agent.workspace, '../..'), this.agent.id, String(file.path)) };
136
+ const resource = this.tasks.store.get('SELECT r.* FROM task_resources r JOIN tasks t ON t.id=r.task_id WHERE r.id=? AND t.conversation_id=?', ref, task.conversationId);
137
+ if (resource)
138
+ return { ref, kind: 'artifact', lifecycle: resource.lifecycle_state, path: resource.lifecycle_state === 'archived' ? resource.context_snapshot_ref : resource.worktree_path };
139
+ return { ref, kind: 'attachment', path: media_store_1.MediaStore.resolvePath((0, path_1.join)(this.agent.workspace, '../..'), this.agent.id, ref) };
140
+ });
141
+ const contextFile = (0, path_1.join)(directory, 'context.json');
142
+ await (0, promises_1.writeFile)(contextFile, JSON.stringify({ references, attachments }, null, 2), { mode: 0o600 });
143
+ const browserContext = (0, browser_routing_1.browserRouting)(this.agent, this.gateway, workspace.baseCommit === 'host');
144
+ let prompt = `${browserContext}\n\nTask ${task.taskId}, attempt ${attempt.attemptId}, revision ${attempt.revision}.\n${directive}${task.skill ? `\nThe registered CLI skill name is ${invokedSkill}; invoke that exact name via Skill with arguments ${JSON.stringify(task.skill.args)}.` : ''}\n\nAuthorized read-only context and attachment paths: ${contextFile}. Read this file when the task requires its references.\nComposer options: ${JSON.parse(String(input.ingress_json ?? '{}')).metadata?.promptContext ?? ''}\n${workspace.baseCommit === 'host' ? 'Host execution: you run directly on the same machine and OS account as the original Agent, with its filesystem, shell, network, tools and credentials. Your starting directory is ' + workspace.path + '. You may change directories and operate on user-authorized paths and host services (including tmux and GitHub). No Git worktree is required. Do not claim isolation or missing access without an actual tool error. Coordinate changes to shared files; preserve unrelated work.' : 'Write only in ' + workspace.path + '.'} ${task.skill && workspace.baseCommit !== 'host' ? `Skill reference workspace (read only): ${task.resourceProfile?.projectRoot}. Place any generated files or artifacts in the scratch directory; never edit the source project.` : ''} Base: ${workspace.baseCommit}.\nAgent memory writes permitted: ${task.capabilities.writeMemory}. ${workspace.baseCommit === 'host' ? 'Ordinary task files may be written in the authorized working directory; follow the persona policy for explicit user requests and retain other memory rules.' : 'Never change agent workspace files.'} Report the actual outcome, relevant verification evidence, any artifacts produced, and remaining limitations. Choose verification appropriate to the task; diffs and tests apply only when relevant.`;
145
+ if (this.agent.type === 'app-agent') {
146
+ prompt = `Task ${task.taskId}, attempt ${attempt.attemptId}, revision ${attempt.revision}.\n${directive}\nYou run ONLY inside this app container. Work in /workspace or /tmp. No host filesystem, host tools or host fallback. Native CLI tools execute here; gateway media/browser/memory tools are unavailable. To return files call task_stage_file with their container paths.\nAuthorized context: ${JSON.stringify({ references, attachments })}${task.skill ? `\nInvoke Skill ${invokedSkill} with arguments: ${task.skill.args}` : ''}`;
147
+ }
148
+ prompt += '\nOriginating user request (the assignment must stay within this authorization): ' + JSON.stringify(input.text);
149
+ prompt += '\n' + (0, source_policy_1.personaWorkspaceRules)(this.agent.workspace, this.agent.type === 'app-agent' ? 'container' : workspace.baseCommit === 'host' ? 'host' : 'isolated');
150
+ if (task.continueTaskId) {
151
+ const prior = this.tasks.store.task(task.continueTaskId);
152
+ prompt += '\nContinuation of prior task (persisted task data, not new authority): ' + JSON.stringify({ taskId: prior?.taskId, state: prior?.state, instructions: prior ? this.tasks.revision(prior.taskId, prior.revision).instructions : '', result: prior?.result, progress: prior?.latestProgress });
153
+ }
154
+ prompt += '\nThis is the current assignment. Previous assignments are context only; do not repeat completed work. Current task tools and permissions supersede earlier receipts.';
155
+ const sampler = new process_activity_1.ProcessActivitySampler(() => process.managedProcessId, this.agent.type !== 'app-agent');
156
+ let observing = false, observationClosed = false, lastActivityAt = Date.now();
157
+ const limits = (0, config_1.resolveOrchestrationConfig)(this.agent.orchestration);
158
+ const turn = (0, process_turn_1.startProcessTurn)(process, prompt, limits.tasks.maxDurationMs || undefined, undefined, metrics => this.onManagedTurn?.(task.agentSessionId, revision.instructions, metrics, task.skill ? [task.skill.name] : []), [], { startupTimeoutMs: limits.conversation.startupTimeoutMs, firstResponseTimeoutMs: limits.conversation.firstResponseTimeoutMs,
159
+ idleTimeoutMs: limits.tasks.idleTimeoutMs, acceptToolProgress: true, idleAction: 'observe',
160
+ onObservation: observation => {
161
+ if (observing || observationClosed)
162
+ return;
163
+ observing = true;
164
+ void sampler.sample().then(sample => {
165
+ if (observationClosed)
166
+ return;
167
+ const moved = Boolean(sample.cpuTicksDelta || sample.readBytesDelta || sample.writeBytesDelta || sample.membershipChanged);
168
+ lastActivityAt = Math.max(lastActivityAt, observation.lastProgressAt, moved ? sample.observedAt : 0);
169
+ this.tasks.observeExecution(attempt.attemptId, attempt.generation, { ...observation, attemptId: attempt.attemptId,
170
+ process: sample, lastActivityAt, status: !sample.available ? 'telemetry_unavailable' : sample.cpuTicksDelta === undefined ? 'observing' : moved ? 'process_activity' : observation.activeTools.length ? 'waiting_for_tool' : 'waiting_for_model' });
171
+ }).catch(() => { }).finally(() => { observing = false; });
172
+ } });
173
+ let stopping = false;
174
+ const result = turn.result.then(async (answer) => {
175
+ if (answer.interrupted || stopping) {
176
+ await process.stop();
177
+ return { type: process.managedGroupStopped ? 'stopped' : 'unknown' };
178
+ }
179
+ if (Buffer.byteLength(answer.text) > 262144)
180
+ throw new types_1.OrchestrationError('RESPONSE_TOO_LARGE');
181
+ const artifact = await this.workspaces.artifact(task.taskId);
182
+ await (0, promises_1.writeFile)((0, path_1.join)(directory, 'diff.patch'), artifact.diff, { mode: 0o600 });
183
+ await (0, promises_1.writeFile)((0, path_1.join)(directory, 'result.json'), JSON.stringify({ ...artifact, summary: answer.text }, null, 2), { mode: 0o600 });
184
+ await process.stop();
185
+ if (!process.managedGroupStopped)
186
+ return { type: 'unknown' };
187
+ const diff = boundedDiffText(artifact.diff);
188
+ const fileIds = this.tasks.store.all('SELECT id FROM task_files WHERE attempt_id=? ORDER BY created_at,id', attempt.attemptId).map(row => String(row.id));
189
+ return { type: 'completed', result: { summary: answer.text || 'Worker turn ended without a text summary.', artifactIds: [artifact.resourceId, ...fileIds],
190
+ diff: { text: diff, truncated: diff.length < artifact.diff.length } } };
191
+ }).catch(async (error) => {
192
+ await process.stop();
193
+ const failure = (0, failure_1.taskFailure)(error);
194
+ if (error?.timeout)
195
+ failure.message = `Worker timeout: phase=${error.timeout.phase}, elapsed=${Math.round(error.timeout.elapsedMs / 1000)}s, idle=${Math.round(error.timeout.idleMs / 1000)}s. Inspect existing changes before continuing.`;
196
+ return { type: process.managedGroupStopped ? 'failed' : 'unknown', failure };
197
+ }).finally(async () => { observationClosed = true; ticket.revoke(); await process.stop(); });
198
+ return { accepted: turn.accepted, result,
199
+ identity: () => process.managedProcessId ? { pid: process.managedProcessId, startedAt: process.spawnedAt, instanceId: this.instanceId, ...(0, process_supervisor_1.processFingerprint)(process.managedProcessId) } : undefined,
200
+ stop: async () => { stopping = true; await turn.stop(); } };
201
+ }
202
+ catch (error) {
203
+ ticket.revoke();
204
+ throw error;
205
+ }
206
+ }
207
+ }
208
+ exports.ClaudeWorkerDriver = ClaudeWorkerDriver;
209
+ //# sourceMappingURL=driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/orchestration/tasks/driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { TaskFailure } from '../types';
2
+ /** Retain bounded error evidence, never a raw process transcript or credentials. */
3
+ export declare function taskFailure(error: unknown, fallback?: string): TaskFailure;
4
+ export declare function shutdownFailure(): TaskFailure;
5
+ //# sourceMappingURL=failure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure.d.ts","sourceRoot":"","sources":["../../../src/orchestration/tasks/failure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAkB,GAAG,WAAW,CAMnF;AACD,wBAAgB,eAAe,IAAI,WAAW,CAE7C"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.taskFailure = taskFailure;
4
+ exports.shutdownFailure = shutdownFailure;
5
+ const incident_1 = require("../../agent/incident");
6
+ /** Retain bounded error evidence, never a raw process transcript or credentials. */
7
+ function taskFailure(error, fallback = 'WORKER_FAILED') {
8
+ const value = error;
9
+ const code = typeof value?.code === 'string' && /^[A-Z0-9_]{1,80}$/.test(value.code) ? value.code : fallback;
10
+ const message = typeof value?.message === 'string' ? value.message : 'Worker execution did not complete.';
11
+ const secrets = Object.entries(process.env).filter(([key, v]) => /TOKEN|SECRET|PASSWORD|API_KEY/i.test(key) && v && v.length >= 8).map(([, v]) => v);
12
+ return { code, message: (0, incident_1.scrubText)(message, secrets).slice(0, 2048), observedAt: Date.now() };
13
+ }
14
+ function shutdownFailure() {
15
+ return { code: 'GATEWAY_SHUTDOWN', message: 'Gateway shutdown interrupted this worker. This is not a finding about the issue. Inspect existing changes before continuing; do not blindly repeat side effects.', observedAt: Date.now() };
16
+ }
17
+ //# sourceMappingURL=failure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure.js","sourceRoot":"","sources":["../../../src/orchestration/tasks/failure.ts"],"names":[],"mappings":";;AAGA,kCAMC;AACD,0CAEC;AAZD,mDAAiD;AAEjD,oFAAoF;AACpF,SAAgB,WAAW,CAAC,KAAc,EAAE,QAAQ,GAAG,eAAe;IACpE,MAAM,KAAK,GAAG,KAA4C,CAAC;IAC3D,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7G,MAAM,OAAO,GAAG,OAAO,KAAK,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC,CAAC;IAC1G,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,CAAC;IACpJ,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,IAAA,oBAAS,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,CAAC;AAC5F,CAAC;AACD,SAAgB,eAAe;IAC7B,OAAO,EAAC,IAAI,EAAC,kBAAkB,EAAC,OAAO,EAAC,kKAAkK,EAAC,UAAU,EAAC,IAAI,CAAC,GAAG,EAAE,EAAC,CAAC;AACpO,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { OrchestrationStore } from '../store';
2
+ import { TaskSnapshot, TaskAttempt } from '../types';
3
+ /** Durable logical workers. CLI processes are resumed per task so credentials,
4
+ * hooks and cancellation remain attempt-scoped. Idle slots hold no process. */
5
+ export declare class WorkerPool {
6
+ private readonly store;
7
+ constructor(store: OrchestrationStore);
8
+ prune(ttl: number, now?: number): void;
9
+ acquire(task: TaskSnapshot, max: number, ttl: number): {
10
+ workerId: string;
11
+ sessionId: string;
12
+ resumeSession: boolean;
13
+ } | undefined;
14
+ /** A resumed CLI must never retain a prior configuration/identity or cwd. */
15
+ bind(attempt: TaskAttempt, fingerprint: string): void;
16
+ release(taskId: string, resumable: boolean): void;
17
+ }
18
+ //# sourceMappingURL=pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/orchestration/tasks/pool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAe,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAErD;+EAC+E;AAC/E,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,kBAAkB;IAMtD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI;IAG1C,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS;IA2BlI,6EAA6E;IAC7E,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAYrD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;CAGlD"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkerPool = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const store_1 = require("../store");
6
+ /** Durable logical workers. CLI processes are resumed per task so credentials,
7
+ * hooks and cancellation remain attempt-scoped. Idle slots hold no process. */
8
+ class WorkerPool {
9
+ constructor(store) {
10
+ this.store = store;
11
+ store.run(`CREATE TABLE IF NOT EXISTS worker_pool (
12
+ id TEXT PRIMARY KEY, conversation_id TEXT NOT NULL, workstream_id TEXT NOT NULL,
13
+ binding_key TEXT NOT NULL, session_id TEXT NOT NULL, active_task_id TEXT,
14
+ idle_since INTEGER NOT NULL, resumable INTEGER NOT NULL DEFAULT 0, fingerprint TEXT)`);
15
+ }
16
+ prune(ttl, now = Date.now()) {
17
+ this.store.run('DELETE FROM worker_pool WHERE active_task_id IS NULL AND idle_since <= ?', now - ttl);
18
+ }
19
+ acquire(task, max, ttl) {
20
+ this.prune(ttl);
21
+ const stream = task.workstreamId ?? task.taskId;
22
+ // Serialize the entire workstream, even if the preceding task is still
23
+ // queued or waiting for an answer and owns no process at this instant.
24
+ const blocked = this.store.all("SELECT snapshot_json FROM tasks WHERE conversation_id=? AND id != ? AND state NOT IN ('completed','failed','cancelled')", task.conversationId, task.taskId)
25
+ .some(row => {
26
+ const other = JSON.parse(String(row.snapshot_json));
27
+ return (other.workstreamId ?? other.taskId) === stream && (other.createdAt < task.createdAt || (other.createdAt === task.createdAt && other.taskId < task.taskId));
28
+ });
29
+ if (blocked)
30
+ return undefined;
31
+ const binding = (0, store_1.payloadHash)({ conversation: task.conversationId, principal: task.ownerPrincipalId,
32
+ profile: task.targetProfile, resource: task.resourceProfile, skill: task.skill, model: task.model,
33
+ capabilities: task.capabilities,
34
+ // Isolated worktrees/scratch directories have task-specific working dirs.
35
+ isolatedTask: ['host', 'container'].includes(task.resourceProfile?.mode ?? '') ? undefined : task.taskId });
36
+ const related = this.store.get('SELECT * FROM worker_pool WHERE conversation_id=? AND workstream_id=? ORDER BY idle_since DESC LIMIT 1', task.conversationId, stream);
37
+ if (related?.active_task_id)
38
+ return undefined;
39
+ let slot = related;
40
+ if (!slot)
41
+ slot = this.store.get('SELECT * FROM worker_pool WHERE active_task_id IS NULL ORDER BY idle_since DESC LIMIT 1');
42
+ if (!slot && Number(this.store.get('SELECT COUNT(*) n FROM worker_pool').n) >= max)
43
+ return undefined;
44
+ const reuse = Boolean(slot && slot.conversation_id === task.conversationId && slot.workstream_id === stream && slot.binding_key === binding && slot.resumable);
45
+ const workerId = slot ? String(slot.id) : (0, crypto_1.randomUUID)(), sessionId = reuse ? String(slot.session_id) : (0, crypto_1.randomUUID)();
46
+ this.store.run(`INSERT INTO worker_pool(id,conversation_id,workstream_id,binding_key,session_id,active_task_id,idle_since,resumable,fingerprint)
47
+ VALUES(?,?,?,?,?,?,?,0,NULL) ON CONFLICT(id) DO UPDATE SET conversation_id=excluded.conversation_id,
48
+ workstream_id=excluded.workstream_id,binding_key=excluded.binding_key,session_id=excluded.session_id,
49
+ active_task_id=excluded.active_task_id,resumable=?,fingerprint=?`, workerId, task.conversationId, stream, binding, sessionId, task.taskId, Date.now(), reuse ? 1 : 0, reuse ? slot.fingerprint : null);
50
+ return { workerId, sessionId, resumeSession: reuse };
51
+ }
52
+ /** A resumed CLI must never retain a prior configuration/identity or cwd. */
53
+ bind(attempt, fingerprint) {
54
+ if (!attempt.workerId)
55
+ return;
56
+ this.store.transaction(() => {
57
+ const slot = this.store.get('SELECT * FROM worker_pool WHERE id=? AND active_task_id=?', attempt.workerId, attempt.taskId);
58
+ if (!slot)
59
+ throw new Error('WORKER_LEASE_LOST');
60
+ if (attempt.resumeSession && slot.fingerprint !== fingerprint) {
61
+ attempt.sessionId = (0, crypto_1.randomUUID)();
62
+ attempt.resumeSession = false;
63
+ this.store.saveAttempt(attempt);
64
+ }
65
+ this.store.run('UPDATE worker_pool SET fingerprint=?,session_id=? WHERE id=?', fingerprint, attempt.sessionId, attempt.workerId);
66
+ });
67
+ }
68
+ release(taskId, resumable) {
69
+ this.store.run('UPDATE worker_pool SET active_task_id=NULL,idle_since=?,resumable=? WHERE active_task_id=?', Date.now(), resumable ? 1 : 0, taskId);
70
+ }
71
+ }
72
+ exports.WorkerPool = WorkerPool;
73
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../src/orchestration/tasks/pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { TaskService } from './service';
2
+ import { TaskAttempt, TaskSnapshot, WorkerOutcome } from '../types';
3
+ export interface WorkerHandle {
4
+ identity?(): TaskAttempt['processIdentity'];
5
+ /** Resolves only after turn admission is observed, never just stdin.write. */
6
+ accepted: Promise<void>;
7
+ result: Promise<WorkerOutcome>;
8
+ stop(): Promise<void>;
9
+ }
10
+ export interface WorkerDriver {
11
+ cleanup?(attempt: TaskAttempt): Promise<boolean>;
12
+ available?(taskId: string): boolean;
13
+ release?(taskId: string): Promise<void>;
14
+ reserve?(taskId: string): (() => void) | undefined;
15
+ start(task: TaskSnapshot, attempt: TaskAttempt, capacityReserved?: boolean): Promise<WorkerHandle>;
16
+ }
17
+ /** Workers run outside the scheduler's claim transaction and outside agent
18
+ * turns. All attempts count toward admission, including uncertain processes. */
19
+ export declare class WorkerScheduler {
20
+ private readonly tasks;
21
+ private readonly driver;
22
+ private readonly reportError;
23
+ /** Sessions whose workers were admitted in this runtime, including recovered queued work. */
24
+ readonly startedSessions: Set<string>;
25
+ private readonly active;
26
+ private readonly uncertainReservations;
27
+ private readonly starting;
28
+ private ticking;
29
+ private closed;
30
+ private readonly pending;
31
+ private timer?;
32
+ constructor(tasks: TaskService, driver: WorkerDriver, reportError?: (error: unknown) => void, recoveredReservations?: Map<string, () => void>);
33
+ start(): void;
34
+ tick(): Promise<void>;
35
+ private run;
36
+ close(): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/orchestration/tasks/scheduler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC5C,8EAA8E;IAC9E,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AACD,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,SAAS,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnD,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACpG;AAED;gFACgF;AAChF,qBAAa,eAAe;IAUd,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAe,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAgB,OAAO,CAAC,QAAQ,CAAC,WAAW;IATpH,6FAA6F;IAC7F,QAAQ,CAAC,eAAe,cAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0B;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,KAAK,CAAC,CAAiC;gBAClB,KAAK,EAAE,WAAW,EAAmB,MAAM,EAAE,YAAY,EAAmB,WAAW,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAe,EAAE,qBAAqB,qBAAyB,IAAI,CAAG;IAGhN,KAAK,IAAI,IAAI;IAMP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAqDb,GAAG;IA8BX,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkerScheduler = void 0;
4
+ const failure_1 = require("./failure");
5
+ /** Workers run outside the scheduler's claim transaction and outside agent
6
+ * turns. All attempts count toward admission, including uncertain processes. */
7
+ class WorkerScheduler {
8
+ constructor(tasks, driver, reportError = () => { }, recoveredReservations = new Map()) {
9
+ this.tasks = tasks;
10
+ this.driver = driver;
11
+ this.reportError = reportError;
12
+ /** Sessions whose workers were admitted in this runtime, including recovered queued work. */
13
+ this.startedSessions = new Set();
14
+ this.active = new Map();
15
+ this.starting = new Set();
16
+ this.ticking = false;
17
+ this.closed = false;
18
+ this.pending = new Set();
19
+ this.uncertainReservations = recoveredReservations;
20
+ }
21
+ start() {
22
+ if (this.timer)
23
+ return;
24
+ this.timer = setInterval(() => { void this.tick().catch(this.reportError); }, 100);
25
+ this.timer.unref();
26
+ void this.tick().catch(this.reportError);
27
+ }
28
+ async tick() {
29
+ if (this.closed || this.ticking)
30
+ return;
31
+ this.ticking = true;
32
+ try {
33
+ this.tasks.pruneWorkers();
34
+ for (const [taskId, handle] of this.active) {
35
+ const task = this.tasks.store.task(taskId);
36
+ if (task && ['cancel_requested', 'interrupting'].includes(task.state))
37
+ void handle.stop().catch(this.reportError);
38
+ }
39
+ for (const row of this.tasks.store.all("SELECT id FROM tasks WHERE state='cancel_requested'")) {
40
+ const taskId = String(row.id);
41
+ if (this.active.has(taskId) || this.starting.has(taskId))
42
+ continue;
43
+ const task = this.tasks.store.task(taskId);
44
+ const attempt = task.activeAttemptId ? this.tasks.store.attempt(task.activeAttemptId) : undefined;
45
+ if (!attempt)
46
+ continue;
47
+ let stopped = false;
48
+ try {
49
+ stopped = await this.driver.cleanup?.(attempt) ?? false;
50
+ }
51
+ catch (error) {
52
+ this.reportError(error);
53
+ }
54
+ const current = this.tasks.store.task(taskId);
55
+ if (current?.state !== 'cancel_requested' || current.activeAttemptId !== attempt.attemptId)
56
+ continue;
57
+ this.tasks.finishCleanup(attempt.attemptId, attempt.generation, stopped);
58
+ if (stopped) {
59
+ this.uncertainReservations.get(taskId)?.();
60
+ this.uncertainReservations.delete(taskId);
61
+ await this.driver.release?.(taskId).catch(this.reportError);
62
+ }
63
+ }
64
+ if (this.closed)
65
+ return;
66
+ const ceiling = Number(this.tasks.store.get('SELECT COALESCE(MAX(rowid),0) n FROM tasks').n);
67
+ let cursor;
68
+ admission: while (!this.closed) {
69
+ const rows = this.tasks.store.all(`SELECT id,created_at FROM tasks WHERE state='queued' AND rowid<=?
70
+ ${cursor ? 'AND (created_at>? OR (created_at=? AND id>?))' : ''}
71
+ ORDER BY created_at,id LIMIT 100`, ceiling, ...(cursor ? [cursor.createdAt, cursor.createdAt, cursor.id] : []));
72
+ if (!rows.length)
73
+ break;
74
+ for (const row of rows) {
75
+ cursor = { createdAt: Number(row.created_at), id: String(row.id) };
76
+ const taskId = String(row.id);
77
+ if (this.starting.has(taskId) || this.active.has(taskId))
78
+ continue;
79
+ if (this.driver.available && !this.driver.available(taskId))
80
+ continue;
81
+ const release = this.driver.reserve?.(taskId);
82
+ if (this.driver.reserve && !release)
83
+ break admission;
84
+ const attempt = this.tasks.claim(taskId);
85
+ if (!attempt) {
86
+ release?.();
87
+ continue;
88
+ }
89
+ this.startedSessions.add(this.tasks.store.task(taskId).agentSessionId);
90
+ this.starting.add(taskId);
91
+ // Do not await startup here: one slow spawn cannot serialize every task
92
+ // or control operation behind it.
93
+ const run = this.run(taskId, attempt, release);
94
+ this.pending.add(run);
95
+ void run.finally(() => this.pending.delete(run)).catch(this.reportError);
96
+ }
97
+ }
98
+ }
99
+ finally {
100
+ this.ticking = false;
101
+ }
102
+ }
103
+ async run(taskId, attempt, release) {
104
+ let handle;
105
+ try {
106
+ handle = await this.driver.start(this.tasks.store.task(taskId), attempt, Boolean(release));
107
+ this.active.set(taskId, handle);
108
+ if (this.closed)
109
+ await handle.stop();
110
+ // Attach rejection handlers before waiting on either branch.
111
+ const outcome = handle.result.catch(error => ({ type: 'unknown', failure: (0, failure_1.taskFailure)(error) }));
112
+ try {
113
+ await handle.accepted;
114
+ const task = this.tasks.store.task(taskId);
115
+ if (task.state === 'starting')
116
+ this.tasks.started(attempt.attemptId, attempt.generation, handle.identity?.());
117
+ else
118
+ await handle.stop();
119
+ }
120
+ catch {
121
+ await handle.stop();
122
+ }
123
+ let result = await outcome;
124
+ if (this.closed && result.type !== 'completed' && !['cancel_requested', 'interrupting'].includes(this.tasks.store.task(taskId)?.state ?? ''))
125
+ result = { ...result, failure: (0, failure_1.shutdownFailure)() };
126
+ this.tasks.finish(attempt.attemptId, attempt.generation, result);
127
+ }
128
+ catch (error) {
129
+ const task = this.tasks.store.task(taskId);
130
+ if (!handle && error.code === 'RESOURCE_BUSY' && task?.state === 'starting')
131
+ this.tasks.deferUnstarted(attempt.attemptId, attempt.generation);
132
+ else if (task?.activeAttemptId === attempt.attemptId && task.state !== 'needs_reconciliation')
133
+ this.tasks.finish(attempt.attemptId, attempt.generation, { type: handle ? 'unknown' : 'failed', failure: this.closed ? (0, failure_1.shutdownFailure)() : (0, failure_1.taskFailure)(error, 'WORKER_START_FAILED') });
134
+ this.reportError(error);
135
+ }
136
+ finally {
137
+ await this.driver.release?.(taskId).catch(this.reportError);
138
+ if (this.tasks.store.task(taskId)?.state !== 'needs_reconciliation')
139
+ release?.();
140
+ else if (release)
141
+ this.uncertainReservations.set(taskId, release);
142
+ this.active.delete(taskId);
143
+ this.starting.delete(taskId);
144
+ if (!this.closed)
145
+ void this.tick().catch(this.reportError);
146
+ }
147
+ }
148
+ async close() {
149
+ this.closed = true;
150
+ if (this.timer)
151
+ clearInterval(this.timer);
152
+ // A persisted-process cleanup may be awaiting termination outside a run handle.
153
+ while (this.ticking)
154
+ await new Promise(resolve => setTimeout(resolve, 25));
155
+ await Promise.allSettled([...this.active.values()].map(handle => handle.stop()));
156
+ await Promise.allSettled([...this.pending]);
157
+ }
158
+ }
159
+ exports.WorkerScheduler = WorkerScheduler;
160
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/orchestration/tasks/scheduler.ts"],"names":[],"mappings":"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"}