@mndrk/agx 2.0.47 → 2.0.49

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 (486) hide show
  1. package/cloud-runtime/standalone/.next/BUILD_ID +1 -1
  2. package/cloud-runtime/standalone/.next/build-manifest.json +2 -2
  3. package/cloud-runtime/standalone/.next/prerender-manifest.json +3 -3
  4. package/cloud-runtime/standalone/.next/server/app/_global-error.html +2 -2
  5. package/cloud-runtime/standalone/.next/server/app/_global-error.rsc +1 -1
  6. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/cloud-runtime/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/cloud-runtime/standalone/.next/server/app/_not-found.html +2 -2
  13. package/cloud-runtime/standalone/.next/server/app/_not-found.rsc +2 -2
  14. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  15. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  16. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  17. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  19. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  20. package/cloud-runtime/standalone/.next/server/app/agents/[id]/page.js.nft.json +1 -1
  21. package/cloud-runtime/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  22. package/cloud-runtime/standalone/.next/server/app/agents/page.js.nft.json +1 -1
  23. package/cloud-runtime/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  24. package/cloud-runtime/standalone/.next/server/app/agents.html +2 -2
  25. package/cloud-runtime/standalone/.next/server/app/agents.rsc +3 -3
  26. package/cloud-runtime/standalone/.next/server/app/agents.segments/_full.segment.rsc +3 -3
  27. package/cloud-runtime/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  28. package/cloud-runtime/standalone/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  29. package/cloud-runtime/standalone/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  30. package/cloud-runtime/standalone/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +2 -2
  31. package/cloud-runtime/standalone/.next/server/app/agents.segments/agents.segment.rsc +1 -1
  32. package/cloud-runtime/standalone/.next/server/app/api/agent-specs/route.js +1 -1
  33. package/cloud-runtime/standalone/.next/server/app/api/agent-specs/route.js.nft.json +1 -1
  34. package/cloud-runtime/standalone/.next/server/app/api/agents/[id]/profile/route.js +1 -1
  35. package/cloud-runtime/standalone/.next/server/app/api/agents/[id]/profile/route.js.nft.json +1 -1
  36. package/cloud-runtime/standalone/.next/server/app/api/agents/export/route.js +1 -1
  37. package/cloud-runtime/standalone/.next/server/app/api/agents/export/route.js.nft.json +1 -1
  38. package/cloud-runtime/standalone/.next/server/app/api/automations/create/route.js.nft.json +1 -1
  39. package/cloud-runtime/standalone/.next/server/app/api/automations/route.js.nft.json +1 -1
  40. package/cloud-runtime/standalone/.next/server/app/api/chat/route.js +13 -7
  41. package/cloud-runtime/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
  42. package/cloud-runtime/standalone/.next/server/app/api/file-search/route.js.nft.json +1 -1
  43. package/cloud-runtime/standalone/.next/server/app/api/graphs/[graphId]/nodes/[nodeId]/route.js.nft.json +1 -1
  44. package/cloud-runtime/standalone/.next/server/app/api/health/route.js +1 -1
  45. package/cloud-runtime/standalone/.next/server/app/api/health/route.js.nft.json +1 -1
  46. package/cloud-runtime/standalone/.next/server/app/api/knowledge-notes/route.js +1 -1
  47. package/cloud-runtime/standalone/.next/server/app/api/knowledge-notes/route.js.nft.json +1 -1
  48. package/cloud-runtime/standalone/.next/server/app/api/learnings/route.js +1 -1
  49. package/cloud-runtime/standalone/.next/server/app/api/learnings/route.js.nft.json +1 -1
  50. package/cloud-runtime/standalone/.next/server/app/api/linear/callback/route.js +1 -1
  51. package/cloud-runtime/standalone/.next/server/app/api/linear/callback/route.js.nft.json +1 -1
  52. package/cloud-runtime/standalone/.next/server/app/api/linear/cycles/route.js +1 -1
  53. package/cloud-runtime/standalone/.next/server/app/api/linear/cycles/route.js.nft.json +1 -1
  54. package/cloud-runtime/standalone/.next/server/app/api/linear/issues/context/route.js +1 -1
  55. package/cloud-runtime/standalone/.next/server/app/api/linear/issues/context/route.js.nft.json +1 -1
  56. package/cloud-runtime/standalone/.next/server/app/api/linear/issues/route.js +1 -1
  57. package/cloud-runtime/standalone/.next/server/app/api/linear/issues/route.js.nft.json +1 -1
  58. package/cloud-runtime/standalone/.next/server/app/api/linear/options/route.js +3 -3
  59. package/cloud-runtime/standalone/.next/server/app/api/linear/options/route.js.nft.json +1 -1
  60. package/cloud-runtime/standalone/.next/server/app/api/linear/status/route.js +1 -1
  61. package/cloud-runtime/standalone/.next/server/app/api/linear/status/route.js.nft.json +1 -1
  62. package/cloud-runtime/standalone/.next/server/app/api/linear/token/route.js +1 -1
  63. package/cloud-runtime/standalone/.next/server/app/api/linear/token/route.js.nft.json +1 -1
  64. package/cloud-runtime/standalone/.next/server/app/api/memories/route.js +1 -1
  65. package/cloud-runtime/standalone/.next/server/app/api/memories/route.js.nft.json +1 -1
  66. package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/start/route.js +1 -1
  67. package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/start/route.js.nft.json +1 -1
  68. package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/status/route.js +1 -1
  69. package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/status/route.js.nft.json +1 -1
  70. package/cloud-runtime/standalone/.next/server/app/api/participants/route.js +1 -1
  71. package/cloud-runtime/standalone/.next/server/app/api/participants/route.js.nft.json +1 -1
  72. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/agents/route.js +1 -1
  73. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/agents/route.js.nft.json +1 -1
  74. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v1/route.js +1 -1
  75. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v1/route.js.nft.json +1 -1
  76. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v2/route.js +1 -1
  77. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v2/route.js.nft.json +1 -1
  78. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/route.js +1 -1
  79. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  80. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/skills/route.js +1 -1
  81. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/skills/route.js.nft.json +1 -1
  82. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/threads/route.js +1 -1
  83. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/threads/route.js.nft.json +1 -1
  84. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/variables/route.js +1 -1
  85. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/variables/route.js.nft.json +1 -1
  86. package/cloud-runtime/standalone/.next/server/app/api/projects/route.js +1 -1
  87. package/cloud-runtime/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  88. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/cancel/route.js.nft.json +1 -1
  89. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/route.js.nft.json +1 -1
  90. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/runs/route.js.nft.json +1 -1
  91. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/agents/route.js +1 -1
  92. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/agents/route.js.nft.json +1 -1
  93. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/poll/route.js +1 -1
  94. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/poll/route.js.nft.json +1 -1
  95. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/route.js.nft.json +1 -1
  96. package/cloud-runtime/standalone/.next/server/app/api/providers/route.js.nft.json +1 -1
  97. package/cloud-runtime/standalone/.next/server/app/api/queue/complete/route.js +1 -1
  98. package/cloud-runtime/standalone/.next/server/app/api/queue/complete/route.js.nft.json +1 -1
  99. package/cloud-runtime/standalone/.next/server/app/api/queue/route.js +2 -2
  100. package/cloud-runtime/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
  101. package/cloud-runtime/standalone/.next/server/app/api/schedules/debug/route.js +14 -6
  102. package/cloud-runtime/standalone/.next/server/app/api/schedules/debug/route.js.nft.json +1 -1
  103. package/cloud-runtime/standalone/.next/server/app/api/schedules/poll/route.js +13 -5
  104. package/cloud-runtime/standalone/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
  105. package/cloud-runtime/standalone/.next/server/app/api/schedules/route.js.nft.json +1 -1
  106. package/cloud-runtime/standalone/.next/server/app/api/status/route.js.nft.json +1 -1
  107. package/cloud-runtime/standalone/.next/server/app/api/summarize/route.js +1 -1
  108. package/cloud-runtime/standalone/.next/server/app/api/summarize/route.js.nft.json +1 -1
  109. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js +1 -1
  110. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
  111. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/route.js +1 -1
  112. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
  113. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/costs/route.js +1 -1
  114. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/costs/route.js.nft.json +1 -1
  115. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/dependencies/route.js +1 -1
  116. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/dependencies/route.js.nft.json +1 -1
  117. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/events/route.js +1 -1
  118. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/events/route.js.nft.json +1 -1
  119. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/history/route.js +1 -1
  120. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/history/route.js.nft.json +1 -1
  121. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/metrics/route.js +1 -1
  122. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/metrics/route.js.nft.json +1 -1
  123. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/replan/route.js +1 -1
  124. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/replan/route.js.nft.json +1 -1
  125. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/restart/route.js +1 -1
  126. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/restart/route.js.nft.json +1 -1
  127. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/resume/route.js +1 -1
  128. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/resume/route.js.nft.json +1 -1
  129. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/rollback/route.js +1 -1
  130. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/rollback/route.js.nft.json +1 -1
  131. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/route.js +3 -4
  132. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/route.js.nft.json +1 -1
  133. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/schedule/route.js +1 -1
  134. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/schedule/route.js.nft.json +1 -1
  135. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/start/route.js +1 -1
  136. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/start/route.js.nft.json +1 -1
  137. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/stop/route.js +1 -1
  138. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/stop/route.js.nft.json +1 -1
  139. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/history/route.js +1 -1
  140. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/history/route.js.nft.json +1 -1
  141. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/logs/route.js +1 -1
  142. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/logs/route.js.nft.json +1 -1
  143. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js +1 -1
  144. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
  145. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/complete/route.js +3 -4
  146. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/complete/route.js.nft.json +1 -1
  147. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/fail/route.js +3 -4
  148. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/fail/route.js.nft.json +1 -1
  149. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/resume/route.js +3 -4
  150. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/resume/route.js.nft.json +1 -1
  151. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/start/route.js +3 -4
  152. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/start/route.js.nft.json +1 -1
  153. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/stop/route.js +3 -4
  154. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/stop/route.js.nft.json +1 -1
  155. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js +4 -5
  156. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
  157. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/route.js +1 -1
  158. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  159. package/cloud-runtime/standalone/.next/server/app/api/tasks/assign-orphans/route.js +1 -1
  160. package/cloud-runtime/standalone/.next/server/app/api/tasks/assign-orphans/route.js.nft.json +1 -1
  161. package/cloud-runtime/standalone/.next/server/app/api/tasks/extract/route.js +1 -1
  162. package/cloud-runtime/standalone/.next/server/app/api/tasks/extract/route.js.nft.json +1 -1
  163. package/cloud-runtime/standalone/.next/server/app/api/tasks/route.js +2 -2
  164. package/cloud-runtime/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -1
  165. package/cloud-runtime/standalone/.next/server/app/api/threads/knowledge/route.js +1 -1
  166. package/cloud-runtime/standalone/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
  167. package/cloud-runtime/standalone/.next/server/app/api/threads/route.js +1 -1
  168. package/cloud-runtime/standalone/.next/server/app/api/threads/route.js.nft.json +1 -1
  169. package/cloud-runtime/standalone/.next/server/app/api/user-settings/route.js +1 -1
  170. package/cloud-runtime/standalone/.next/server/app/api/user-settings/route.js.nft.json +1 -1
  171. package/cloud-runtime/standalone/.next/server/app/automations/page/react-loadable-manifest.json +1 -1
  172. package/cloud-runtime/standalone/.next/server/app/automations/page.js.nft.json +1 -1
  173. package/cloud-runtime/standalone/.next/server/app/automations/page_client-reference-manifest.js +1 -1
  174. package/cloud-runtime/standalone/.next/server/app/automations.html +2 -2
  175. package/cloud-runtime/standalone/.next/server/app/automations.rsc +3 -3
  176. package/cloud-runtime/standalone/.next/server/app/automations.segments/_full.segment.rsc +3 -3
  177. package/cloud-runtime/standalone/.next/server/app/automations.segments/_head.segment.rsc +1 -1
  178. package/cloud-runtime/standalone/.next/server/app/automations.segments/_index.segment.rsc +2 -2
  179. package/cloud-runtime/standalone/.next/server/app/automations.segments/_tree.segment.rsc +2 -2
  180. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +2 -2
  181. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations.segment.rsc +1 -1
  182. package/cloud-runtime/standalone/.next/server/app/board/page_client-reference-manifest.js +1 -1
  183. package/cloud-runtime/standalone/.next/server/app/board.html +2 -2
  184. package/cloud-runtime/standalone/.next/server/app/board.rsc +2 -2
  185. package/cloud-runtime/standalone/.next/server/app/board.segments/_full.segment.rsc +2 -2
  186. package/cloud-runtime/standalone/.next/server/app/board.segments/_head.segment.rsc +1 -1
  187. package/cloud-runtime/standalone/.next/server/app/board.segments/_index.segment.rsc +2 -2
  188. package/cloud-runtime/standalone/.next/server/app/board.segments/_tree.segment.rsc +2 -2
  189. package/cloud-runtime/standalone/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
  190. package/cloud-runtime/standalone/.next/server/app/board.segments/board.segment.rsc +1 -1
  191. package/cloud-runtime/standalone/.next/server/app/execution-graph/page.js.nft.json +1 -1
  192. package/cloud-runtime/standalone/.next/server/app/execution-graph/page_client-reference-manifest.js +1 -1
  193. package/cloud-runtime/standalone/.next/server/app/execution-graph.html +2 -2
  194. package/cloud-runtime/standalone/.next/server/app/execution-graph.rsc +3 -3
  195. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_full.segment.rsc +3 -3
  196. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
  197. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_index.segment.rsc +2 -2
  198. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_tree.segment.rsc +2 -2
  199. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +2 -2
  200. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
  201. package/cloud-runtime/standalone/.next/server/app/folders/page.js.nft.json +1 -1
  202. package/cloud-runtime/standalone/.next/server/app/folders/page_client-reference-manifest.js +1 -1
  203. package/cloud-runtime/standalone/.next/server/app/folders.html +2 -2
  204. package/cloud-runtime/standalone/.next/server/app/folders.rsc +3 -3
  205. package/cloud-runtime/standalone/.next/server/app/folders.segments/_full.segment.rsc +3 -3
  206. package/cloud-runtime/standalone/.next/server/app/folders.segments/_head.segment.rsc +1 -1
  207. package/cloud-runtime/standalone/.next/server/app/folders.segments/_index.segment.rsc +2 -2
  208. package/cloud-runtime/standalone/.next/server/app/folders.segments/_tree.segment.rsc +2 -2
  209. package/cloud-runtime/standalone/.next/server/app/folders.segments/folders/__PAGE__.segment.rsc +2 -2
  210. package/cloud-runtime/standalone/.next/server/app/folders.segments/folders.segment.rsc +1 -1
  211. package/cloud-runtime/standalone/.next/server/app/index.html +2 -2
  212. package/cloud-runtime/standalone/.next/server/app/index.rsc +3 -3
  213. package/cloud-runtime/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  214. package/cloud-runtime/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  215. package/cloud-runtime/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  216. package/cloud-runtime/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  217. package/cloud-runtime/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  218. package/cloud-runtime/standalone/.next/server/app/page.js.nft.json +1 -1
  219. package/cloud-runtime/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  220. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/automations/page/react-loadable-manifest.json +1 -1
  221. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/automations/page.js.nft.json +1 -1
  222. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
  223. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
  224. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  225. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/knowledge/page.js.nft.json +1 -1
  226. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/knowledge/page_client-reference-manifest.js +1 -1
  227. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/linear/page/react-loadable-manifest.json +1 -1
  228. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/linear/page.js.nft.json +1 -1
  229. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/linear/page_client-reference-manifest.js +1 -1
  230. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  231. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  232. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
  233. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
  234. package/cloud-runtime/standalone/.next/server/app/projects/orphans/page_client-reference-manifest.js +1 -1
  235. package/cloud-runtime/standalone/.next/server/app/projects/orphans.html +2 -2
  236. package/cloud-runtime/standalone/.next/server/app/projects/orphans.rsc +2 -2
  237. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_full.segment.rsc +2 -2
  238. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
  239. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_index.segment.rsc +2 -2
  240. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
  241. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +1 -1
  242. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
  243. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
  244. package/cloud-runtime/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  245. package/cloud-runtime/standalone/.next/server/app/projects.html +2 -2
  246. package/cloud-runtime/standalone/.next/server/app/projects.rsc +2 -2
  247. package/cloud-runtime/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  248. package/cloud-runtime/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  249. package/cloud-runtime/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  250. package/cloud-runtime/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  251. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
  252. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  253. package/cloud-runtime/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  254. package/cloud-runtime/standalone/.next/server/app/settings.html +2 -2
  255. package/cloud-runtime/standalone/.next/server/app/settings.rsc +2 -2
  256. package/cloud-runtime/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  257. package/cloud-runtime/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  258. package/cloud-runtime/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  259. package/cloud-runtime/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  260. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  261. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  262. package/cloud-runtime/standalone/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  263. package/cloud-runtime/standalone/.next/server/app/skills.html +2 -2
  264. package/cloud-runtime/standalone/.next/server/app/skills.rsc +2 -2
  265. package/cloud-runtime/standalone/.next/server/app/skills.segments/_full.segment.rsc +2 -2
  266. package/cloud-runtime/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  267. package/cloud-runtime/standalone/.next/server/app/skills.segments/_index.segment.rsc +2 -2
  268. package/cloud-runtime/standalone/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
  269. package/cloud-runtime/standalone/.next/server/app/skills.segments/skills/__PAGE__.segment.rsc +1 -1
  270. package/cloud-runtime/standalone/.next/server/app/skills.segments/skills.segment.rsc +1 -1
  271. package/cloud-runtime/standalone/.next/server/app/status/page_client-reference-manifest.js +1 -1
  272. package/cloud-runtime/standalone/.next/server/app/status.html +2 -2
  273. package/cloud-runtime/standalone/.next/server/app/status.rsc +2 -2
  274. package/cloud-runtime/standalone/.next/server/app/status.segments/_full.segment.rsc +2 -2
  275. package/cloud-runtime/standalone/.next/server/app/status.segments/_head.segment.rsc +1 -1
  276. package/cloud-runtime/standalone/.next/server/app/status.segments/_index.segment.rsc +2 -2
  277. package/cloud-runtime/standalone/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  278. package/cloud-runtime/standalone/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
  279. package/cloud-runtime/standalone/.next/server/app/status.segments/status.segment.rsc +1 -1
  280. package/cloud-runtime/standalone/.next/server/app/thread/[id]/page.js.nft.json +1 -1
  281. package/cloud-runtime/standalone/.next/server/app/thread/[id]/page_client-reference-manifest.js +1 -1
  282. package/cloud-runtime/standalone/.next/server/app/welcome/page.js.nft.json +1 -1
  283. package/cloud-runtime/standalone/.next/server/app/welcome/page_client-reference-manifest.js +1 -1
  284. package/cloud-runtime/standalone/.next/server/app/welcome.html +2 -2
  285. package/cloud-runtime/standalone/.next/server/app/welcome.rsc +3 -3
  286. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_full.segment.rsc +3 -3
  287. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_head.segment.rsc +1 -1
  288. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_index.segment.rsc +2 -2
  289. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_tree.segment.rsc +2 -2
  290. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +2 -2
  291. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome.segment.rsc +1 -1
  292. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__015d40a6._.js +67 -0
  293. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__a300f072._.js → [root-of-the-server]__02a4a323._.js} +2 -2
  294. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__05dedbe1._.js +64 -0
  295. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__4ce74056._.js → [root-of-the-server]__05f0bfbf._.js} +2 -2
  296. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__c22dd3a6._.js → [root-of-the-server]__08c82fe8._.js} +2 -2
  297. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__3fae531a._.js → [root-of-the-server]__09e37b59._.js} +2 -2
  298. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__1a1f66b1._.js → [root-of-the-server]__0e83aabc._.js} +2 -2
  299. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__27da58f0._.js +67 -0
  300. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__9ffa67b7._.js → [root-of-the-server]__2ae8b938._.js} +2 -2
  301. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__2cfd21b8._.js +108 -0
  302. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__37844df7._.js +67 -0
  303. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__d9f2041b._.js → [root-of-the-server]__3a93931b._.js} +4 -4
  304. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__f9f7f2df._.js → [root-of-the-server]__3c1403f2._.js} +2 -2
  305. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__143fdf69._.js → [root-of-the-server]__40e9e2e8._.js} +2 -2
  306. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__42e602eb._.js +49 -0
  307. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__a7b2350e._.js → [root-of-the-server]__456840d0._.js} +2 -2
  308. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__5c2848bb._.js +64 -0
  309. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__667c658f._.js +52 -0
  310. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6a92b882._.js +49 -0
  311. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6c9baa7c._.js +64 -0
  312. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__c21747df._.js → [root-of-the-server]__719eddc2._.js} +2 -2
  313. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__36d15de5._.js → [root-of-the-server]__7ee3dfe1._.js} +2 -2
  314. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__d324f8a1._.js → [root-of-the-server]__80964fad._.js} +2 -2
  315. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__bab85495._.js → [root-of-the-server]__862cf77d._.js} +2 -2
  316. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__a280fa63._.js → [root-of-the-server]__8b5b9860._.js} +2 -2
  317. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__3170b7bf._.js → [root-of-the-server]__8d475640._.js} +2 -2
  318. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__958dded3._.js +49 -0
  319. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ab655b9f._.js → [root-of-the-server]__96c424d5._.js} +2 -2
  320. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__5c55f67a._.js → [root-of-the-server]__976ebe46._.js} +2 -2
  321. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__179cb224._.js → [root-of-the-server]__a1cab8fe._.js} +2 -2
  322. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__20a2cb22._.js → [root-of-the-server]__a31dd756._.js} +9 -9
  323. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__a3955224._.js → [root-of-the-server]__ad53dc3f._.js} +17 -17
  324. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ac6326b6._.js → [root-of-the-server]__b8eeb177._.js} +2 -2
  325. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__fcfa3690._.js → [root-of-the-server]__c10e827d._.js} +2 -2
  326. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__e58e9f91._.js → [root-of-the-server]__c11e0040._.js} +2 -2
  327. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__c40b6f69._.js +49 -0
  328. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__c7d3c7ab._.js +52 -0
  329. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__cdc52544._.js +49 -0
  330. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__8cbd8c56._.js → [root-of-the-server]__d1c698b6._.js} +12 -12
  331. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__d9ea98bd._.js +52 -0
  332. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ef27f8cd._.js → [root-of-the-server]__df886e3c._.js} +2 -2
  333. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ca4987eb._.js → [root-of-the-server]__e0b6f424._.js} +2 -2
  334. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__c8890cd6._.js → [root-of-the-server]__f43ecbc2._.js} +13 -13
  335. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f51c7b72._.js +5 -0
  336. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f662fd1e._.js +20 -0
  337. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__538b0bdd._.js → [root-of-the-server]__f961230c._.js} +2 -2
  338. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__b627cb83._.js → [root-of-the-server]__feec5b54._.js} +2 -2
  339. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__d16caed5._.js → [root-of-the-server]__ff6ce4b1._.js} +2 -2
  340. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__ff9ce15e._.js +5 -0
  341. package/cloud-runtime/standalone/.next/server/chunks/_26ffc857._.js +121 -0
  342. package/cloud-runtime/standalone/.next/server/chunks/_4d07f8db._.js +1 -1
  343. package/cloud-runtime/standalone/.next/server/chunks/_66d0cf73._.js +6 -0
  344. package/cloud-runtime/standalone/.next/server/chunks/_9b10087f._.js +3 -2
  345. package/cloud-runtime/standalone/.next/server/chunks/_a13c0bef._.js +121 -0
  346. package/cloud-runtime/standalone/.next/server/chunks/{lib_98ae187c._.js → lib_2cd3429c._.js} +2 -2
  347. package/cloud-runtime/standalone/.next/server/chunks/lib_a2a83df5._.js +55 -0
  348. package/cloud-runtime/standalone/.next/server/chunks/lib_a658c9ef._.js +34 -0
  349. package/cloud-runtime/standalone/.next/server/chunks/lib_ba38ea08._.js +55 -0
  350. package/cloud-runtime/standalone/.next/server/chunks/lib_orchestrator_chat-processor_ts_4c335719._.js +27 -29
  351. package/cloud-runtime/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_371d0bff.js +6 -102
  352. package/cloud-runtime/standalone/.next/server/chunks/src_graph_schedule-runner_ts_43a13c69._.js +13 -0
  353. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b2a2b86._.js +3 -0
  354. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__32546242._.js +3 -0
  355. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__5ff9ead4._.js +3 -0
  356. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__f2c3b7ab._.js +1 -1
  357. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__f59f0dc7._.js +3 -0
  358. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__d96bb3b5._.js → [root-of-the-server]__fbe1ab4a._.js} +2 -2
  359. package/cloud-runtime/standalone/.next/server/chunks/ssr/_1e9b9b1e._.js +3 -0
  360. package/cloud-runtime/standalone/.next/server/chunks/ssr/_24fe6213._.js +3 -0
  361. package/cloud-runtime/standalone/.next/server/chunks/ssr/_36a0c486._.js +3 -0
  362. package/cloud-runtime/standalone/.next/server/chunks/ssr/_3b21d3b2._.js +95 -0
  363. package/cloud-runtime/standalone/.next/server/chunks/ssr/_3eeac8f9._.js +3 -0
  364. package/cloud-runtime/standalone/.next/server/chunks/ssr/_48db42b7._.js +3 -0
  365. package/cloud-runtime/standalone/.next/server/chunks/ssr/_59f30a73._.js +3 -0
  366. package/cloud-runtime/standalone/.next/server/chunks/ssr/_7d3b0032._.js +3 -0
  367. package/cloud-runtime/standalone/.next/server/chunks/ssr/_916950b3._.js +3 -0
  368. package/cloud-runtime/standalone/.next/server/chunks/ssr/_b598ae8a._.js +3 -0
  369. package/cloud-runtime/standalone/.next/server/chunks/ssr/_cc8c8302._.js +3 -0
  370. package/cloud-runtime/standalone/.next/server/chunks/ssr/_d972a4e1._.js +3 -0
  371. package/cloud-runtime/standalone/.next/server/chunks/ssr/_dd7bb6fb._.js +3 -0
  372. package/cloud-runtime/standalone/.next/server/chunks/ssr/_dd9880fb._.js +3 -0
  373. package/cloud-runtime/standalone/.next/server/chunks/ssr/_f02d786a._.js +3 -0
  374. package/cloud-runtime/standalone/.next/server/chunks/ssr/_fd8cafe9._.js +3 -0
  375. package/cloud-runtime/standalone/.next/server/chunks/ssr/app_projects_[slug]_linear_page_tsx_971a6ba7._.js +15 -12
  376. package/cloud-runtime/standalone/.next/server/chunks/ssr/components_chat-ui_bfeda794._.js +1 -1
  377. package/cloud-runtime/standalone/.next/server/chunks/ssr/components_thread_WorkspaceSidebar_tsx_e660301b._.js +1 -1
  378. package/cloud-runtime/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_54bf563f._.js +3 -0
  379. package/cloud-runtime/standalone/.next/server/middleware-manifest.json +5 -5
  380. package/cloud-runtime/standalone/.next/server/pages/404.html +2 -2
  381. package/cloud-runtime/standalone/.next/server/pages/500.html +2 -2
  382. package/cloud-runtime/standalone/.next/server/server-reference-manifest.js +1 -1
  383. package/cloud-runtime/standalone/.next/server/server-reference-manifest.json +1 -1
  384. package/cloud-runtime/standalone/.next/static/chunks/04c135686161dbb1.js +40 -0
  385. package/cloud-runtime/standalone/.next/static/chunks/0d63db0c39c0a3b2.js +1 -0
  386. package/cloud-runtime/standalone/.next/static/chunks/136ed07d84b14632.js +1 -0
  387. package/cloud-runtime/standalone/.next/static/chunks/18866ed04ed3a063.css +1 -0
  388. package/cloud-runtime/standalone/.next/static/chunks/{ccaf68956da192f8.js → 1bb38e61d891453c.js} +1 -1
  389. package/cloud-runtime/standalone/.next/static/chunks/2c7c8259c2b56bf5.js +1 -0
  390. package/cloud-runtime/standalone/.next/static/chunks/2da1f13d50dc4e54.js +1 -0
  391. package/cloud-runtime/standalone/.next/static/chunks/5545da2ad239c0b6.js +3 -0
  392. package/cloud-runtime/standalone/.next/static/chunks/{41c518743656a291.js → 5f33b52d582b0bb4.js} +1 -1
  393. package/cloud-runtime/standalone/.next/static/chunks/{97c11137cd6fc860.js → 64c2961edd3a3b13.js} +1 -1
  394. package/cloud-runtime/standalone/.next/static/chunks/{db131a0b6350e416.js → 692ce04abdbb3970.js} +1 -1
  395. package/cloud-runtime/standalone/.next/static/chunks/83be8569d298c6b0.js +1 -0
  396. package/cloud-runtime/standalone/.next/static/chunks/87b3afe828c8cc52.js +1 -0
  397. package/cloud-runtime/standalone/.next/static/chunks/{4343e7fe5bf5f34a.js → 9328740727c6456d.js} +1 -1
  398. package/cloud-runtime/standalone/.next/static/chunks/95d47e285ae9c031.js +1 -0
  399. package/cloud-runtime/standalone/.next/static/chunks/b9bf5d3ee92a1313.js +1 -0
  400. package/cloud-runtime/standalone/.next/static/chunks/ea35fb870141bcff.js +1 -0
  401. package/cloud-runtime/standalone/.next/static/chunks/f59722264449b61c.js +1 -0
  402. package/cloud-runtime/standalone/.next/static/chunks/f727d2c8f039511d.js +1 -0
  403. package/cloud-runtime/standalone/.next/static/chunks/{31fe4e36a00fd7b5.js → f8706212baa8ec67.js} +1 -1
  404. package/cloud-runtime/standalone/.next/static/chunks/fd823c9d1381335d.js +1 -0
  405. package/cloud-runtime/standalone/app/api/chat/route.ts +5 -163
  406. package/cloud-runtime/standalone/app/api/schedules/route.ts +11 -2
  407. package/cloud-runtime/standalone/app/automations/page.tsx +11 -1
  408. package/cloud-runtime/standalone/app/projects/[slug]/layout.tsx +11 -1
  409. package/cloud-runtime/standalone/components/LinearBoard.tsx +118 -21
  410. package/cloud-runtime/standalone/components/chat-ui/ChatContainer.tsx +10 -13
  411. package/cloud-runtime/standalone/components/linear/RunScriptManager.tsx +356 -0
  412. package/cloud-runtime/standalone/components/thread/WorkspaceSidebar.tsx +35 -0
  413. package/cloud-runtime/standalone/hooks/useLinearRunScripts.ts +115 -0
  414. package/cloud-runtime/standalone/lib/chat/project-context.ts +169 -0
  415. package/cloud-runtime/standalone/lib/linear-client.ts +33 -3
  416. package/cloud-runtime/standalone/lib/linear-execution-prompt.ts +92 -15
  417. package/cloud-runtime/standalone/lib/orchestrator/runtime.ts +2 -0
  418. package/cloud-runtime/standalone/lib/orchestrator/schedule-runtime.ts +76 -0
  419. package/cloud-runtime/standalone/src/graph/internal-function-dispatcher.ts +201 -16
  420. package/cloud-runtime/standalone/src/graph/work-dispatcher.ts +128 -35
  421. package/cloud-runtime/standalone/state/automations/.state/c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc.json +8 -0
  422. package/cloud-runtime/standalone/state/automations/active/c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc.md +15 -0
  423. package/cloud-runtime/standalone/state/linearRunScripts.test.ts +99 -0
  424. package/cloud-runtime/standalone/state/linearRunScripts.ts +132 -0
  425. package/cloud-runtime/standalone/state/windowState.ts +21 -0
  426. package/cloud-runtime/standalone/tsconfig.tsbuildinfo +1 -1
  427. package/cloud-runtime/standalone/vault/agx/issues/ESO-327/design-doc.md +202 -0
  428. package/cloud-runtime/standalone/worker/index.js +34516 -1717
  429. package/cloud-runtime/standalone/worker/index.ts +3 -0
  430. package/package.json +1 -1
  431. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__1154e5b3._.js +0 -67
  432. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__152b2000._.js +0 -61
  433. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__33865410._.js +0 -3
  434. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6c53437e._.js +0 -110
  435. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6dbe939c._.js +0 -49
  436. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__7012e83d._.js +0 -66
  437. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__76290829._.js +0 -67
  438. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__ad6d6402._.js +0 -67
  439. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__da645a5e._.js +0 -15
  440. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f4b3df16._.js +0 -3
  441. package/cloud-runtime/standalone/.next/server/chunks/_2a5aeb76._.js +0 -3
  442. package/cloud-runtime/standalone/.next/server/chunks/_4689976f._.js +0 -6
  443. package/cloud-runtime/standalone/.next/server/chunks/_682c9d81._.js +0 -6
  444. package/cloud-runtime/standalone/.next/server/chunks/_6e7f0ae4._.js +0 -6
  445. package/cloud-runtime/standalone/.next/server/chunks/_a32a5cdd._.js +0 -6
  446. package/cloud-runtime/standalone/.next/server/chunks/_af7bd752._.js +0 -3
  447. package/cloud-runtime/standalone/.next/server/chunks/_fe32a267._.js +0 -3
  448. package/cloud-runtime/standalone/.next/server/chunks/lib_2492d514._.js +0 -55
  449. package/cloud-runtime/standalone/.next/server/chunks/lib_3c080873._.js +0 -34
  450. package/cloud-runtime/standalone/.next/server/chunks/lib_9f439b27._.js +0 -70
  451. package/cloud-runtime/standalone/.next/server/chunks/src_graph_12d46a92._.js +0 -3
  452. package/cloud-runtime/standalone/.next/server/chunks/src_graph_executor_ts_55c06268._.js +0 -8
  453. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__21a9eaef._.js +0 -3
  454. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__69887882._.js +0 -3
  455. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__9ad05ace._.js +0 -3
  456. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__bb149a22._.js +0 -3
  457. package/cloud-runtime/standalone/.next/server/chunks/ssr/_11ce4c04._.js +0 -95
  458. package/cloud-runtime/standalone/.next/server/chunks/ssr/_1d949e96._.js +0 -3
  459. package/cloud-runtime/standalone/.next/server/chunks/ssr/_32a156b6._.js +0 -3
  460. package/cloud-runtime/standalone/.next/server/chunks/ssr/_43c091dc._.js +0 -3
  461. package/cloud-runtime/standalone/.next/server/chunks/ssr/_45175f47._.js +0 -3
  462. package/cloud-runtime/standalone/.next/server/chunks/ssr/_4f0c544d._.js +0 -3
  463. package/cloud-runtime/standalone/.next/server/chunks/ssr/_69164b06._.js +0 -95
  464. package/cloud-runtime/standalone/.next/server/chunks/ssr/_7f7a828a._.js +0 -3
  465. package/cloud-runtime/standalone/.next/server/chunks/ssr/_97f6a18e._.js +0 -3
  466. package/cloud-runtime/standalone/.next/server/chunks/ssr/_a511a014._.js +0 -3
  467. package/cloud-runtime/standalone/.next/server/chunks/ssr/_c3a3a829._.js +0 -3
  468. package/cloud-runtime/standalone/.next/server/chunks/ssr/_cee3cf86._.js +0 -95
  469. package/cloud-runtime/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_e8bdedc5._.js +0 -3
  470. package/cloud-runtime/standalone/.next/static/chunks/14fff3c493ea9c54.js +0 -1
  471. package/cloud-runtime/standalone/.next/static/chunks/2a9c83f8211196e0.js +0 -1
  472. package/cloud-runtime/standalone/.next/static/chunks/5405540470146645.js +0 -1
  473. package/cloud-runtime/standalone/.next/static/chunks/69f2db4b9996b9c1.js +0 -37
  474. package/cloud-runtime/standalone/.next/static/chunks/8aeb69ceb497ad85.css +0 -1
  475. package/cloud-runtime/standalone/.next/static/chunks/a9da98f883ac833b.js +0 -1
  476. package/cloud-runtime/standalone/.next/static/chunks/b2127dc67c5ade9f.js +0 -1
  477. package/cloud-runtime/standalone/.next/static/chunks/baf5d39d089efb87.js +0 -1
  478. package/cloud-runtime/standalone/.next/static/chunks/bf2a2fafb710e63c.js +0 -1
  479. package/cloud-runtime/standalone/.next/static/chunks/c78969fde5798275.js +0 -1
  480. package/cloud-runtime/standalone/.next/static/chunks/d3dc6fadb96ab3a2.js +0 -1
  481. package/cloud-runtime/standalone/.next/static/chunks/fdadad2379039dce.js +0 -3
  482. package/cloud-runtime/standalone/state/automations/.state/24a6a5db-3b14-49c4-841f-29f10f015fbb.json +0 -8
  483. package/cloud-runtime/standalone/state/automations/active/24a6a5db-3b14-49c4-841f-29f10f015fbb.md +0 -17
  484. /package/cloud-runtime/standalone/.next/static/{lOB5InbmVcurTLQo9J3KK → ZkFZnP5h74O7GgdHudXgH}/_buildManifest.js +0 -0
  485. /package/cloud-runtime/standalone/.next/static/{lOB5InbmVcurTLQo9J3KK → ZkFZnP5h74O7GgdHudXgH}/_clientMiddlewareManifest.json +0 -0
  486. /package/cloud-runtime/standalone/.next/static/{lOB5InbmVcurTLQo9J3KK → ZkFZnP5h74O7GgdHudXgH}/_ssgManifest.js +0 -0
@@ -1,6 +1,18 @@
1
1
  import type { FunctionDispatchResult } from "./function-executor";
2
2
  import type { ExecutionGraph, FunctionNode, WorkNode } from "./types";
3
- import { getConfiguredBoardBaseUrl } from "@/lib/app-config";
3
+ import { LOCAL_USER } from "@/lib/auth-mode";
4
+ import { loadDbParticipants } from "@/lib/agent-participants";
5
+ import { resolveProjectContext } from "@/lib/chat/project-context";
6
+ import { writeDebugLog } from "@/lib/debug-log";
7
+ import { ensureOrchestratorRuntime } from "@/lib/orchestrator/runtime";
8
+ import type { ChatRunJobData, ChatRunPayload } from "@/lib/orchestrator/chat-types";
9
+ import { getQueue, QUEUE_NAMES } from "@/lib/queue/boss";
10
+ import type { GroupMessage } from "@/lib/types";
11
+
12
+ const ACTIVE_PROCESS_STATUSES = new Set(["running", "working"]);
13
+ const RECENT_STEER_HISTORY_LIMIT = 20;
14
+ const STEER_DUPLICATE_WINDOW_MS = 15 * 60 * 1000;
15
+ const SHIP_MODE_MAX_ROUNDS = 10;
4
16
 
5
17
  function getRootMessageId(node: FunctionNode, graph: ExecutionGraph): string {
6
18
  const fromArgs = typeof node.args?.rootMessageId === "string" ? node.args.rootMessageId.trim() : "";
@@ -30,27 +42,86 @@ function getSteerOutput(
30
42
  };
31
43
  }
32
44
 
33
- function getBoardBaseUrl(): string {
34
- return getConfiguredBoardBaseUrl();
45
+ function normalizeSteerText(content: string): string {
46
+ return content.replace(/\s+/g, " ").trim();
47
+ }
48
+
49
+ function getSpeakerLabel(message: GroupMessage, participantNames: Record<string, string>): string {
50
+ if (message.role === "user") return "User";
51
+ if (!message.participantId) return "Assistant";
52
+ return participantNames[message.participantId] || message.participantId;
53
+ }
54
+
55
+ function buildRecentHistory(
56
+ history: GroupMessage[],
57
+ rootMessageId: string,
58
+ participantNames: Record<string, string>
59
+ ): Array<{ id: string; name: string; content: string }> {
60
+ return history
61
+ .filter((message) => message.id === rootMessageId || message.rootMessageId === rootMessageId)
62
+ .slice(-RECENT_STEER_HISTORY_LIMIT)
63
+ .map((message) => ({
64
+ id: message.id,
65
+ name: getSpeakerLabel(message, participantNames),
66
+ content: message.content,
67
+ }));
68
+ }
69
+
70
+ function hasRecentDuplicateSteer(
71
+ history: GroupMessage[],
72
+ rootMessageId: string,
73
+ candidate: string,
74
+ participantId: string | null
75
+ ): boolean {
76
+ const normalizedCandidate = normalizeSteerText(candidate);
77
+ if (!normalizedCandidate) return false;
78
+ const cutoff = Date.now() - STEER_DUPLICATE_WINDOW_MS;
79
+
80
+ return history
81
+ .filter((message) => message.id === rootMessageId || message.rootMessageId === rootMessageId)
82
+ .some((message) => {
83
+ if (message.role !== "assistant") return false;
84
+ if (message.timestamp < cutoff) return false;
85
+ if (participantId && message.participantId !== participantId) return false;
86
+ return normalizeSteerText(message.content) === normalizedCandidate;
87
+ });
35
88
  }
36
89
 
37
- async function getDefaultAgentForThread(threadId: string): Promise<string | null> {
90
+ async function getThreadProjectContext(threadId: string): Promise<{
91
+ projectSlug: string | null;
92
+ projectAgentIds: string[];
93
+ }> {
38
94
  try {
39
95
  const { getSQLiteDb } = await import("@/lib/sqlite-query-adapter");
40
96
  const db = getSQLiteDb();
41
97
  const projectRow = db
42
- .prepare("SELECT project_id FROM project_threads WHERE thread_id = ? ORDER BY created_at ASC LIMIT 1")
43
- .get(threadId) as { project_id: string } | undefined;
44
- if (!projectRow?.project_id) return null;
98
+ .prepare(
99
+ `SELECT pt.project_id AS project_id, p.slug AS project_slug
100
+ FROM project_threads pt
101
+ JOIN projects p ON p.id = pt.project_id
102
+ WHERE pt.thread_id = ?
103
+ ORDER BY pt.created_at ASC
104
+ LIMIT 1`
105
+ )
106
+ .get(threadId) as { project_id: string; project_slug: string | null } | undefined;
107
+ if (!projectRow?.project_id) {
108
+ return { projectSlug: null, projectAgentIds: [] };
109
+ }
45
110
 
46
- const agentRow = db
111
+ const agentRows = db
47
112
  .prepare(
48
- "SELECT agent_id FROM project_agents WHERE project_id = ? ORDER BY routing_order ASC, created_at ASC LIMIT 1",
113
+ "SELECT agent_id FROM project_agents WHERE project_id = ? ORDER BY routing_order ASC, created_at ASC",
49
114
  )
50
- .get(projectRow.project_id) as { agent_id: string } | undefined;
51
- return agentRow?.agent_id ?? null;
115
+ .all(projectRow.project_id) as Array<{ agent_id: string }>;
116
+
117
+ return {
118
+ projectSlug: projectRow.project_slug?.trim() || null,
119
+ projectAgentIds: agentRows
120
+ .map((row) => row.agent_id?.trim())
121
+ .filter((agentId): agentId is string => Boolean(agentId)),
122
+ };
52
123
  } catch {
53
- return null;
124
+ return { projectSlug: null, projectAgentIds: [] };
54
125
  }
55
126
  }
56
127
 
@@ -76,7 +147,7 @@ async function dispatchThreadStatus(node: FunctionNode, graph: ExecutionGraph):
76
147
  });
77
148
 
78
149
  const activeProcessCount = snapshot.processes.filter(
79
- (process: { status: string }) => process.status === "working",
150
+ (process: { status: string }) => ACTIVE_PROCESS_STATUSES.has(process.status),
80
151
  ).length;
81
152
 
82
153
  return {
@@ -101,7 +172,18 @@ async function dispatchShipModeAct(node: FunctionNode, graph: ExecutionGraph): P
101
172
  return { status: "failure", message: "Unable to read steer node output" };
102
173
  }
103
174
 
104
- const { getMessageThread, saveMessages, updateMessageStatus } = await import("@/lib/history-store");
175
+ if (!normalizeSteerText(steer.message)) {
176
+ return { status: "failure", message: "Ship mode produced an empty steer message" };
177
+ }
178
+
179
+ const {
180
+ createChatRun,
181
+ getThreadStatusSnapshot,
182
+ getMessageThread,
183
+ loadHistory,
184
+ saveMessages,
185
+ updateMessageStatus,
186
+ } = await import("@/lib/history-store");
105
187
  const { deactivateSchedulesByRootMessageId } = await import("./store");
106
188
  const threadRef = await getMessageThread(rootMessageId);
107
189
  if (!threadRef) {
@@ -112,6 +194,23 @@ async function dispatchShipModeAct(node: FunctionNode, graph: ExecutionGraph): P
112
194
  }
113
195
 
114
196
  if (steer.isDone) {
197
+ const snapshot = await getThreadStatusSnapshot({
198
+ threadId: threadRef.threadId,
199
+ rootMessageId,
200
+ });
201
+ const activeProcessCount = snapshot.processes.filter((process: { status: string }) =>
202
+ ACTIVE_PROCESS_STATUSES.has(process.status)
203
+ ).length;
204
+ if (activeProcessCount > 0) {
205
+ return {
206
+ status: "success",
207
+ output: {
208
+ done: false,
209
+ action: "completion_deferred_active_work",
210
+ activeProcessCount,
211
+ },
212
+ };
213
+ }
115
214
  deactivateSchedulesByRootMessageId(rootMessageId);
116
215
  await updateMessageStatus(threadRef.threadId, rootMessageId, "in-review", null);
117
216
  return {
@@ -120,7 +219,25 @@ async function dispatchShipModeAct(node: FunctionNode, graph: ExecutionGraph): P
120
219
  };
121
220
  }
122
221
 
123
- const defaultAgent = await getDefaultAgentForThread(threadRef.threadId);
222
+ const participantLibrary = await loadDbParticipants();
223
+ const participantNames = Object.fromEntries(
224
+ participantLibrary.map((participant) => [participant.id, participant.name])
225
+ );
226
+ const { projectSlug, projectAgentIds } = await getThreadProjectContext(threadRef.threadId);
227
+ const threadHistory = await loadHistory(threadRef.threadId);
228
+ const defaultAgent = projectAgentIds[0] ?? participantLibrary[0]?.id ?? null;
229
+
230
+ if (hasRecentDuplicateSteer(threadHistory, rootMessageId, steer.message, defaultAgent)) {
231
+ return {
232
+ status: "success",
233
+ output: {
234
+ done: false,
235
+ action: "duplicate_next_steps_skipped",
236
+ sender: defaultAgent,
237
+ },
238
+ };
239
+ }
240
+
124
241
  const messageId = crypto.randomUUID();
125
242
  await saveMessages(threadRef.threadId, [
126
243
  {
@@ -135,13 +252,81 @@ async function dispatchShipModeAct(node: FunctionNode, graph: ExecutionGraph): P
135
252
  },
136
253
  ]);
137
254
 
255
+ const orderedParticipantIds = (projectAgentIds.length > 0
256
+ ? projectAgentIds
257
+ : participantLibrary.map((participant) => participant.id))
258
+ .filter((participantId, index, allIds) => participantId && allIds.indexOf(participantId) === index);
259
+ const responderIds = orderedParticipantIds.filter((participantId) => participantId !== defaultAgent);
260
+ const runParticipantIds = (responderIds.length > 0 ? responderIds : orderedParticipantIds).filter((participantId) =>
261
+ participantLibrary.some((participant) => participant.id === participantId)
262
+ );
263
+
264
+ if (runParticipantIds.length === 0) {
265
+ return {
266
+ status: "success",
267
+ output: {
268
+ done: false,
269
+ action: "sent_next_steps_only",
270
+ sender: defaultAgent,
271
+ messageId,
272
+ },
273
+ };
274
+ }
275
+
276
+ const runParticipants = participantLibrary.filter((participant) => runParticipantIds.includes(participant.id));
277
+ const projectContext = projectSlug
278
+ ? await resolveProjectContext(projectSlug, [], runParticipants)
279
+ : undefined;
280
+ const chatRunId = crypto.randomUUID();
281
+ const chatRunPayload: ChatRunPayload = {
282
+ threadId: threadRef.threadId,
283
+ prompt: steer.message,
284
+ projectContext,
285
+ mentionedIds: [],
286
+ initialParallelIds: [],
287
+ maxRounds: SHIP_MODE_MAX_ROUNDS,
288
+ recentHistory: buildRecentHistory(threadHistory, rootMessageId, participantNames),
289
+ currentUserMessageId: messageId,
290
+ rootMessageId,
291
+ participantIds: runParticipantIds,
292
+ };
293
+
294
+ await createChatRun({
295
+ id: chatRunId,
296
+ threadId: threadRef.threadId,
297
+ rootMessageId,
298
+ userId: LOCAL_USER.id,
299
+ projectSlug: projectSlug ?? null,
300
+ maxSteps: SHIP_MODE_MAX_ROUNDS,
301
+ activeParticipantIds: runParticipantIds,
302
+ payload: chatRunPayload as unknown as Record<string, unknown>,
303
+ });
304
+
305
+ await ensureOrchestratorRuntime();
306
+ const queue = await getQueue();
307
+ await queue.send<ChatRunJobData>(QUEUE_NAMES.CHAT_RUN_PROCESS, {
308
+ chatRunId,
309
+ userId: LOCAL_USER.id,
310
+ signal: "start",
311
+ });
312
+
313
+ writeDebugLog("ship_mode.steer.enqueued", {
314
+ rootMessageId,
315
+ threadId: threadRef.threadId,
316
+ chatRunId,
317
+ authorId: defaultAgent,
318
+ participantIds: runParticipantIds,
319
+ projectSlug: projectSlug ?? null,
320
+ });
321
+
138
322
  return {
139
323
  status: "success",
140
324
  output: {
141
325
  done: false,
142
- action: "sent_next_steps",
326
+ action: "sent_next_steps_and_started_chat_run",
143
327
  sender: defaultAgent,
144
328
  messageId,
329
+ chatRunId,
145
330
  },
146
331
  };
147
332
  }
@@ -15,19 +15,16 @@ import type { WorkNode, ExecutionGraph } from './types';
15
15
  import type { WorkDispatchResult } from './executor';
16
16
  import type { ChatProvider } from '@/lib/types';
17
17
 
18
- const STEER_SYSTEM_PROMPT = `You are a progress assessor. Review the conversation state below and determine:
19
- 1. Is the work DONE? (all objectives met, code written, tests passing)
20
- 2. If not done, what should the team do next?
21
-
22
- You MUST respond with ONLY a JSON object, no markdown fences, no extra text:
18
+ const ACTIVE_PROCESS_STATUSES = new Set(['running', 'working']);
19
+ const DEFAULT_STEER_DIRECTIVE = `Review the thread, assess whether the work is complete enough to move into review, and if not, produce one concise steering message that combines:
20
+ 1. what has been accomplished vs. what remains
21
+ 2. the concrete next steps needed to move toward shipping`;
22
+ const STEER_OUTPUT_CONTRACT = `You MUST respond with ONLY a JSON object, no markdown fences, no extra text:
23
23
  {"isDone": true/false, "message": "your assessment"}
24
24
 
25
- If done, message should confirm what was accomplished.
26
- If not done, message must be exactly one message that combines:
27
- - a brief assessment of what is done vs. not done
28
- - the concrete next steps for the team
29
-
30
- Do not produce separate status and instruction messages.`;
25
+ Set isDone=true only when the thread is genuinely ready to stop ship mode and move into review.
26
+ If isDone=false, message must be a single concise steering note with both status and next steps.
27
+ The message must not be empty.`;
31
28
 
32
29
  /**
33
30
  * Read agx config to get the default provider name.
@@ -55,6 +52,59 @@ function resolveProvider(raw: string): ChatProvider {
55
52
  }
56
53
  }
57
54
 
55
+ async function getSteeringAgentConfig(threadId: string): Promise<{ provider: ChatProvider; model: string | null }> {
56
+ try {
57
+ const [{ getSQLiteDb }, { loadDbParticipants }] = await Promise.all([
58
+ import('@/lib/sqlite-query-adapter'),
59
+ import('@/lib/agent-participants'),
60
+ ]);
61
+ const sqlite = getSQLiteDb();
62
+ const projectRow = sqlite
63
+ .prepare(
64
+ `SELECT pt.project_id AS project_id
65
+ FROM project_threads pt
66
+ WHERE pt.thread_id = ?
67
+ ORDER BY pt.created_at ASC
68
+ LIMIT 1`
69
+ )
70
+ .get(threadId) as { project_id: string } | undefined;
71
+ if (!projectRow?.project_id) {
72
+ return { provider: resolveProvider(getDefaultProvider()), model: null };
73
+ }
74
+
75
+ const agentRow = sqlite
76
+ .prepare(
77
+ `SELECT agent_id
78
+ FROM project_agents
79
+ WHERE project_id = ?
80
+ ORDER BY routing_order ASC, created_at ASC
81
+ LIMIT 1`
82
+ )
83
+ .get(projectRow.project_id) as { agent_id: string } | undefined;
84
+ if (!agentRow?.agent_id) {
85
+ return { provider: resolveProvider(getDefaultProvider()), model: null };
86
+ }
87
+
88
+ const participants = await loadDbParticipants();
89
+ const agent = participants.find((participant) => participant.id === agentRow.agent_id);
90
+ if (!agent) {
91
+ return { provider: resolveProvider(getDefaultProvider()), model: null };
92
+ }
93
+
94
+ return {
95
+ provider: resolveProvider(agent.provider),
96
+ model: agent.model,
97
+ };
98
+ } catch {
99
+ return { provider: resolveProvider(getDefaultProvider()), model: null };
100
+ }
101
+ }
102
+
103
+ function buildSteerSystemPrompt(node: WorkNode): string {
104
+ const steerDirective = node.description?.trim() || DEFAULT_STEER_DIRECTIVE;
105
+ return `${steerDirective}\n\n${STEER_OUTPUT_CONTRACT}`;
106
+ }
107
+
58
108
  /**
59
109
  * Create a dispatchWork implementation for schedule-driven graphs.
60
110
  *
@@ -97,15 +147,30 @@ export function createDispatchWork(): (
97
147
  });
98
148
 
99
149
  const activeProcessCount = snapshot.processes.filter(
100
- (p: { status: string }) => p.status === 'working',
150
+ (p: { status: string }) => ACTIVE_PROCESS_STATUSES.has(p.status),
101
151
  ).length;
152
+ const rootStatus = snapshot.rootMessage?.threadStatus ?? 'active';
153
+ const processSummary = snapshot.processes
154
+ .slice(0, 8)
155
+ .map((process: {
156
+ agent: string;
157
+ status: string;
158
+ responseTo?: string;
159
+ responseContent?: string | null;
160
+ }) => {
161
+ const details = [`${process.agent}: ${process.status}`];
162
+ if (process.responseTo) details.push(`replying to "${process.responseTo.slice(0, 140)}"`);
163
+ if (process.responseContent) details.push(`latest response "${process.responseContent.slice(0, 140)}"`);
164
+ return `- ${details.join(' | ')}`;
165
+ })
166
+ .join('\n');
102
167
 
103
168
  // Build a summary of recent messages for context
104
169
  const recentMessages = (snapshot.messages ?? [])
105
- .slice(-10)
170
+ .slice(-15)
106
171
  .map((m: { role?: string; content?: string; participantId?: string | null }) => {
107
172
  const sender = m.participantId ?? m.role ?? '?';
108
- const text = (m.content ?? '').slice(0, 300);
173
+ const text = (m.content ?? '').slice(0, 600);
109
174
  return `[${sender}]: ${text}`;
110
175
  })
111
176
  .join('\n');
@@ -115,27 +180,37 @@ export function createDispatchWork(): (
115
180
  // 2. Build assessment prompt
116
181
  const assessPrompt = [
117
182
  '--- THREAD STATE ---',
183
+ `Root request: ${snapshot.rootMessage?.content ?? '(missing root message)'}`,
184
+ `Thread status: ${rootStatus}`,
118
185
  `Active agents: ${activeProcessCount}`,
119
186
  `Total messages: ${snapshot.messages?.length ?? 0}`,
187
+ snapshot.lastUpdatedAt ? `Last updated at: ${new Date(snapshot.lastUpdatedAt).toISOString()}` : null,
188
+ '',
189
+ 'Current process state:',
190
+ processSummary || '- none',
120
191
  '',
121
192
  'Recent messages:',
122
- recentMessages,
193
+ recentMessages || '- none',
123
194
  '--- END THREAD STATE ---',
124
195
  '',
125
196
  'Assess the progress and respond with the JSON object.',
126
- ].join('\n');
197
+ ]
198
+ .filter(Boolean)
199
+ .join('\n');
127
200
 
128
201
  // 3. Call provider directly via runCliResponse (same path as chat endpoint)
129
202
  const { runCliResponse } = await import('@/lib/cli-runner');
130
- const provider = resolveProvider(getDefaultProvider());
131
- console.log(`[work-dispatch] Calling ${provider} via runCliResponse (prompt length: ${assessPrompt.length})...`);
203
+ const steeringAgent = await getSteeringAgentConfig(threadRef.threadId);
204
+ console.log(
205
+ `[work-dispatch] Calling ${steeringAgent.provider} via runCliResponse (prompt length: ${assessPrompt.length})...`
206
+ );
132
207
 
133
208
  let fullResponse = '';
134
209
  await runCliResponse({
135
- provider,
136
- model: null,
210
+ provider: steeringAgent.provider,
211
+ model: steeringAgent.model,
137
212
  prompt: assessPrompt,
138
- systemContext: STEER_SYSTEM_PROMPT,
213
+ systemContext: buildSteerSystemPrompt(node),
139
214
  onDelta: (chunk: string) => {
140
215
  fullResponse += chunk;
141
216
  },
@@ -148,11 +223,18 @@ export function createDispatchWork(): (
148
223
 
149
224
  // 4. Parse structured output
150
225
  const parsed = parseSteerResponse(fullResponse.trim());
226
+ if (!parsed.ok) {
227
+ return {
228
+ status: 'failure' as const,
229
+ transient: false,
230
+ message: parsed.error,
231
+ };
232
+ }
151
233
  console.log(`[work-dispatch] Parsed result:`, parsed);
152
234
 
153
235
  return {
154
236
  status: 'success' as const,
155
- output: parsed,
237
+ output: parsed.value,
156
238
  };
157
239
  } catch (err) {
158
240
  console.error(`[work-dispatch] Steer dispatch failed:`, err);
@@ -167,26 +249,37 @@ export function createDispatchWork(): (
167
249
 
168
250
  /**
169
251
  * Parse the steer agent's response into { isDone, message }.
170
- * Tries JSON parse first, falls back to heuristic detection.
171
252
  */
172
- function parseSteerResponse(raw: string): { isDone: boolean; message: string } {
173
- // Try to extract JSON from the response
253
+ function parseSteerResponse(
254
+ raw: string
255
+ ):
256
+ | { ok: true; value: { isDone: boolean; message: string } }
257
+ | { ok: false; error: string } {
174
258
  const jsonMatch = raw.match(/\{[\s\S]*?"isDone"\s*:\s*(true|false)[\s\S]*?\}/);
175
259
  if (jsonMatch) {
176
260
  try {
177
261
  const parsed = JSON.parse(jsonMatch[0]);
262
+ const message = String(parsed.message ?? '').trim();
263
+ if (!message) {
264
+ return { ok: false, error: 'Ship mode response JSON did not include a non-empty message.' };
265
+ }
178
266
  return {
179
- isDone: Boolean(parsed.isDone),
180
- message: String(parsed.message ?? ''),
267
+ ok: true,
268
+ value: {
269
+ isDone: Boolean(parsed.isDone),
270
+ message,
271
+ },
181
272
  };
182
- } catch { /* fall through */ }
183
- }
184
-
185
- // Fallback: check for [done] marker
186
- if (raw.includes('[done]')) {
187
- return { isDone: true, message: raw };
273
+ } catch (error) {
274
+ return {
275
+ ok: false,
276
+ error: error instanceof Error ? error.message : String(error),
277
+ };
278
+ }
188
279
  }
189
280
 
190
- // Default: not done, use raw output as message
191
- return { isDone: false, message: raw };
281
+ return {
282
+ ok: false,
283
+ error: 'Ship mode response was not valid JSON with isDone/message fields.',
284
+ };
192
285
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "scheduleHash": "218b10daaa347ad14c3a8fbaabee0cff119839d6f5b6c5c3aaf7ed2eac4484f1",
3
+ "nextRunAt": 1775664900000,
4
+ "lastRunAt": 1775661402987,
5
+ "lastOutcome": "success",
6
+ "lastError": null,
7
+ "updatedAt": "2026-04-08T15:16:42.988Z"
8
+ }
@@ -0,0 +1,15 @@
1
+ ---
2
+ id: c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc
3
+ name: 'Agx Agent: Work On Linear Tickets'
4
+ projectId: f354bbf2-cfed-473f-890c-e592209313da
5
+ state: active
6
+ trigger:
7
+ type: scheduled
8
+ cadence: 15 * * * *
9
+ cronExpr: 15 * * * *
10
+ target:
11
+ type: prompt_job
12
+ provider: claude
13
+ createdAt: '2026-04-08T09:50:53.793Z'
14
+ ---
15
+ Execute `/Users/mendrika/Projects/Agents/agx-game-vault/agx-game-vault/scheduled-tasks/work-linear-tickets.md`
@@ -0,0 +1,99 @@
1
+ import {
2
+ getLinearRunScriptsStorageKey,
3
+ loadLinearRunScripts,
4
+ persistLinearRunScripts,
5
+ } from "./linearRunScripts";
6
+
7
+ type LocalStorageMap = Record<string, string>;
8
+
9
+ function withFakeLocalStorage<T>(callback: (storage: LocalStorageMap) => T): T {
10
+ const originalWindow = globalThis.window;
11
+ const storage: LocalStorageMap = {};
12
+ const fakeLocalStorage = {
13
+ getItem(key: string) {
14
+ return storage[key] ?? null;
15
+ },
16
+ setItem(key: string, value: string) {
17
+ storage[key] = value;
18
+ },
19
+ removeItem(key: string) {
20
+ delete storage[key];
21
+ },
22
+ };
23
+ globalThis.window = { localStorage: fakeLocalStorage } as unknown as Window;
24
+
25
+ try {
26
+ return callback(storage);
27
+ } finally {
28
+ globalThis.window = originalWindow;
29
+ }
30
+ }
31
+
32
+ describe("linearRunScripts", () => {
33
+ test("persists and restores scripts per project slug", () => {
34
+ withFakeLocalStorage((storage) => {
35
+ const key = getLinearRunScriptsStorageKey("agx-cloud");
36
+ expect(loadLinearRunScripts("agx-cloud")).toEqual({
37
+ activeScriptId: null,
38
+ scripts: [],
39
+ });
40
+
41
+ persistLinearRunScripts("agx-cloud", {
42
+ activeScriptId: "script-1",
43
+ scripts: [
44
+ {
45
+ id: "script-1",
46
+ name: "Investigation",
47
+ prompt: "Read {{ticket.identifier}} first.",
48
+ createdAt: "2026-04-08T01:00:00.000Z",
49
+ updatedAt: "2026-04-08T02:00:00.000Z",
50
+ },
51
+ ],
52
+ });
53
+
54
+ expect(storage[key]).toContain("Investigation");
55
+ expect(loadLinearRunScripts("agx-cloud")).toEqual({
56
+ activeScriptId: "script-1",
57
+ scripts: [
58
+ {
59
+ id: "script-1",
60
+ name: "Investigation",
61
+ prompt: "Read {{ticket.identifier}} first.",
62
+ createdAt: "2026-04-08T01:00:00.000Z",
63
+ updatedAt: "2026-04-08T02:00:00.000Z",
64
+ },
65
+ ],
66
+ });
67
+ });
68
+ });
69
+
70
+ test("clears invalid active script ids while preserving valid scripts", () => {
71
+ withFakeLocalStorage((storage) => {
72
+ storage[getLinearRunScriptsStorageKey("agx-cloud")] = JSON.stringify({
73
+ activeScriptId: "missing-script",
74
+ scripts: [
75
+ {
76
+ id: "script-1",
77
+ name: "Implementation",
78
+ prompt: "Implement carefully.",
79
+ createdAt: "2026-04-08T01:00:00.000Z",
80
+ updatedAt: "2026-04-08T02:00:00.000Z",
81
+ },
82
+ ],
83
+ });
84
+
85
+ expect(loadLinearRunScripts("agx-cloud")).toEqual({
86
+ activeScriptId: null,
87
+ scripts: [
88
+ {
89
+ id: "script-1",
90
+ name: "Implementation",
91
+ prompt: "Implement carefully.",
92
+ createdAt: "2026-04-08T01:00:00.000Z",
93
+ updatedAt: "2026-04-08T02:00:00.000Z",
94
+ },
95
+ ],
96
+ });
97
+ });
98
+ });
99
+ });