@mndrk/agx 2.0.47 → 2.0.48

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 (342) 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.nft.json +1 -1
  33. package/cloud-runtime/standalone/.next/server/app/api/agents/[id]/profile/route.js.nft.json +1 -1
  34. package/cloud-runtime/standalone/.next/server/app/api/agents/export/route.js.nft.json +1 -1
  35. package/cloud-runtime/standalone/.next/server/app/api/automations/create/route.js.nft.json +1 -1
  36. package/cloud-runtime/standalone/.next/server/app/api/automations/route.js.nft.json +1 -1
  37. package/cloud-runtime/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
  38. package/cloud-runtime/standalone/.next/server/app/api/file-search/route.js.nft.json +1 -1
  39. package/cloud-runtime/standalone/.next/server/app/api/graphs/[graphId]/nodes/[nodeId]/route.js.nft.json +1 -1
  40. package/cloud-runtime/standalone/.next/server/app/api/health/route.js.nft.json +1 -1
  41. package/cloud-runtime/standalone/.next/server/app/api/knowledge-notes/route.js.nft.json +1 -1
  42. package/cloud-runtime/standalone/.next/server/app/api/learnings/route.js.nft.json +1 -1
  43. package/cloud-runtime/standalone/.next/server/app/api/linear/callback/route.js +1 -1
  44. package/cloud-runtime/standalone/.next/server/app/api/linear/callback/route.js.nft.json +1 -1
  45. package/cloud-runtime/standalone/.next/server/app/api/linear/cycles/route.js +1 -1
  46. package/cloud-runtime/standalone/.next/server/app/api/linear/cycles/route.js.nft.json +1 -1
  47. package/cloud-runtime/standalone/.next/server/app/api/linear/issues/context/route.js.nft.json +1 -1
  48. package/cloud-runtime/standalone/.next/server/app/api/linear/issues/route.js.nft.json +1 -1
  49. package/cloud-runtime/standalone/.next/server/app/api/linear/options/route.js +2 -2
  50. package/cloud-runtime/standalone/.next/server/app/api/linear/options/route.js.nft.json +1 -1
  51. package/cloud-runtime/standalone/.next/server/app/api/linear/status/route.js +1 -1
  52. package/cloud-runtime/standalone/.next/server/app/api/linear/status/route.js.nft.json +1 -1
  53. package/cloud-runtime/standalone/.next/server/app/api/linear/token/route.js +1 -1
  54. package/cloud-runtime/standalone/.next/server/app/api/linear/token/route.js.nft.json +1 -1
  55. package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/start/route.js.nft.json +1 -1
  56. package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/status/route.js.nft.json +1 -1
  57. package/cloud-runtime/standalone/.next/server/app/api/participants/route.js.nft.json +1 -1
  58. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/agents/route.js.nft.json +1 -1
  59. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v1/route.js.nft.json +1 -1
  60. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v2/route.js.nft.json +1 -1
  61. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  62. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/skills/route.js.nft.json +1 -1
  63. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/threads/route.js.nft.json +1 -1
  64. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/variables/route.js.nft.json +1 -1
  65. package/cloud-runtime/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  66. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/cancel/route.js.nft.json +1 -1
  67. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/route.js.nft.json +1 -1
  68. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/[id]/runs/route.js.nft.json +1 -1
  69. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/agents/route.js.nft.json +1 -1
  70. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/poll/route.js.nft.json +1 -1
  71. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/route.js.nft.json +1 -1
  72. package/cloud-runtime/standalone/.next/server/app/api/providers/route.js.nft.json +1 -1
  73. package/cloud-runtime/standalone/.next/server/app/api/queue/complete/route.js.nft.json +1 -1
  74. package/cloud-runtime/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
  75. package/cloud-runtime/standalone/.next/server/app/api/schedules/debug/route.js.nft.json +1 -1
  76. package/cloud-runtime/standalone/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
  77. package/cloud-runtime/standalone/.next/server/app/api/schedules/route.js.nft.json +1 -1
  78. package/cloud-runtime/standalone/.next/server/app/api/status/route.js.nft.json +1 -1
  79. package/cloud-runtime/standalone/.next/server/app/api/summarize/route.js.nft.json +1 -1
  80. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
  81. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
  82. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/costs/route.js.nft.json +1 -1
  83. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/dependencies/route.js.nft.json +1 -1
  84. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/events/route.js.nft.json +1 -1
  85. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/history/route.js.nft.json +1 -1
  86. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/metrics/route.js.nft.json +1 -1
  87. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/replan/route.js.nft.json +1 -1
  88. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/restart/route.js.nft.json +1 -1
  89. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/resume/route.js.nft.json +1 -1
  90. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/rollback/route.js.nft.json +1 -1
  91. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/route.js.nft.json +1 -1
  92. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/schedule/route.js.nft.json +1 -1
  93. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/start/route.js.nft.json +1 -1
  94. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/stop/route.js.nft.json +1 -1
  95. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/history/route.js.nft.json +1 -1
  96. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/logs/route.js.nft.json +1 -1
  97. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
  98. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/complete/route.js.nft.json +1 -1
  99. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/fail/route.js.nft.json +1 -1
  100. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/resume/route.js.nft.json +1 -1
  101. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/start/route.js.nft.json +1 -1
  102. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/stop/route.js.nft.json +1 -1
  103. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
  104. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  105. package/cloud-runtime/standalone/.next/server/app/api/tasks/assign-orphans/route.js.nft.json +1 -1
  106. package/cloud-runtime/standalone/.next/server/app/api/tasks/extract/route.js.nft.json +1 -1
  107. package/cloud-runtime/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -1
  108. package/cloud-runtime/standalone/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
  109. package/cloud-runtime/standalone/.next/server/app/api/threads/route.js.nft.json +1 -1
  110. package/cloud-runtime/standalone/.next/server/app/api/user-settings/route.js.nft.json +1 -1
  111. package/cloud-runtime/standalone/.next/server/app/automations/page/react-loadable-manifest.json +1 -1
  112. package/cloud-runtime/standalone/.next/server/app/automations/page.js.nft.json +1 -1
  113. package/cloud-runtime/standalone/.next/server/app/automations/page_client-reference-manifest.js +1 -1
  114. package/cloud-runtime/standalone/.next/server/app/automations.html +2 -2
  115. package/cloud-runtime/standalone/.next/server/app/automations.rsc +3 -3
  116. package/cloud-runtime/standalone/.next/server/app/automations.segments/_full.segment.rsc +3 -3
  117. package/cloud-runtime/standalone/.next/server/app/automations.segments/_head.segment.rsc +1 -1
  118. package/cloud-runtime/standalone/.next/server/app/automations.segments/_index.segment.rsc +2 -2
  119. package/cloud-runtime/standalone/.next/server/app/automations.segments/_tree.segment.rsc +2 -2
  120. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +2 -2
  121. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations.segment.rsc +1 -1
  122. package/cloud-runtime/standalone/.next/server/app/board/page_client-reference-manifest.js +1 -1
  123. package/cloud-runtime/standalone/.next/server/app/board.html +2 -2
  124. package/cloud-runtime/standalone/.next/server/app/board.rsc +2 -2
  125. package/cloud-runtime/standalone/.next/server/app/board.segments/_full.segment.rsc +2 -2
  126. package/cloud-runtime/standalone/.next/server/app/board.segments/_head.segment.rsc +1 -1
  127. package/cloud-runtime/standalone/.next/server/app/board.segments/_index.segment.rsc +2 -2
  128. package/cloud-runtime/standalone/.next/server/app/board.segments/_tree.segment.rsc +2 -2
  129. package/cloud-runtime/standalone/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
  130. package/cloud-runtime/standalone/.next/server/app/board.segments/board.segment.rsc +1 -1
  131. package/cloud-runtime/standalone/.next/server/app/execution-graph/page.js.nft.json +1 -1
  132. package/cloud-runtime/standalone/.next/server/app/execution-graph/page_client-reference-manifest.js +1 -1
  133. package/cloud-runtime/standalone/.next/server/app/execution-graph.html +2 -2
  134. package/cloud-runtime/standalone/.next/server/app/execution-graph.rsc +3 -3
  135. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_full.segment.rsc +3 -3
  136. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
  137. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_index.segment.rsc +2 -2
  138. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_tree.segment.rsc +2 -2
  139. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +2 -2
  140. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
  141. package/cloud-runtime/standalone/.next/server/app/folders/page.js.nft.json +1 -1
  142. package/cloud-runtime/standalone/.next/server/app/folders/page_client-reference-manifest.js +1 -1
  143. package/cloud-runtime/standalone/.next/server/app/folders.html +2 -2
  144. package/cloud-runtime/standalone/.next/server/app/folders.rsc +3 -3
  145. package/cloud-runtime/standalone/.next/server/app/folders.segments/_full.segment.rsc +3 -3
  146. package/cloud-runtime/standalone/.next/server/app/folders.segments/_head.segment.rsc +1 -1
  147. package/cloud-runtime/standalone/.next/server/app/folders.segments/_index.segment.rsc +2 -2
  148. package/cloud-runtime/standalone/.next/server/app/folders.segments/_tree.segment.rsc +2 -2
  149. package/cloud-runtime/standalone/.next/server/app/folders.segments/folders/__PAGE__.segment.rsc +2 -2
  150. package/cloud-runtime/standalone/.next/server/app/folders.segments/folders.segment.rsc +1 -1
  151. package/cloud-runtime/standalone/.next/server/app/index.html +2 -2
  152. package/cloud-runtime/standalone/.next/server/app/index.rsc +3 -3
  153. package/cloud-runtime/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  154. package/cloud-runtime/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  155. package/cloud-runtime/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  156. package/cloud-runtime/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  157. package/cloud-runtime/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  158. package/cloud-runtime/standalone/.next/server/app/page.js.nft.json +1 -1
  159. package/cloud-runtime/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  160. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/automations/page/react-loadable-manifest.json +1 -1
  161. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/automations/page.js.nft.json +1 -1
  162. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
  163. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
  164. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  165. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/knowledge/page.js.nft.json +1 -1
  166. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/knowledge/page_client-reference-manifest.js +1 -1
  167. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/linear/page/react-loadable-manifest.json +1 -1
  168. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/linear/page.js.nft.json +1 -1
  169. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/linear/page_client-reference-manifest.js +1 -1
  170. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  171. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  172. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
  173. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
  174. package/cloud-runtime/standalone/.next/server/app/projects/orphans/page_client-reference-manifest.js +1 -1
  175. package/cloud-runtime/standalone/.next/server/app/projects/orphans.html +2 -2
  176. package/cloud-runtime/standalone/.next/server/app/projects/orphans.rsc +2 -2
  177. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_full.segment.rsc +2 -2
  178. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
  179. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_index.segment.rsc +2 -2
  180. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
  181. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +1 -1
  182. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
  183. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
  184. package/cloud-runtime/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  185. package/cloud-runtime/standalone/.next/server/app/projects.html +2 -2
  186. package/cloud-runtime/standalone/.next/server/app/projects.rsc +2 -2
  187. package/cloud-runtime/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  188. package/cloud-runtime/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  189. package/cloud-runtime/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  190. package/cloud-runtime/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  191. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
  192. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  193. package/cloud-runtime/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  194. package/cloud-runtime/standalone/.next/server/app/settings.html +2 -2
  195. package/cloud-runtime/standalone/.next/server/app/settings.rsc +2 -2
  196. package/cloud-runtime/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  197. package/cloud-runtime/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  198. package/cloud-runtime/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  199. package/cloud-runtime/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  200. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  201. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  202. package/cloud-runtime/standalone/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  203. package/cloud-runtime/standalone/.next/server/app/skills.html +2 -2
  204. package/cloud-runtime/standalone/.next/server/app/skills.rsc +2 -2
  205. package/cloud-runtime/standalone/.next/server/app/skills.segments/_full.segment.rsc +2 -2
  206. package/cloud-runtime/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  207. package/cloud-runtime/standalone/.next/server/app/skills.segments/_index.segment.rsc +2 -2
  208. package/cloud-runtime/standalone/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
  209. package/cloud-runtime/standalone/.next/server/app/skills.segments/skills/__PAGE__.segment.rsc +1 -1
  210. package/cloud-runtime/standalone/.next/server/app/skills.segments/skills.segment.rsc +1 -1
  211. package/cloud-runtime/standalone/.next/server/app/status/page_client-reference-manifest.js +1 -1
  212. package/cloud-runtime/standalone/.next/server/app/status.html +2 -2
  213. package/cloud-runtime/standalone/.next/server/app/status.rsc +2 -2
  214. package/cloud-runtime/standalone/.next/server/app/status.segments/_full.segment.rsc +2 -2
  215. package/cloud-runtime/standalone/.next/server/app/status.segments/_head.segment.rsc +1 -1
  216. package/cloud-runtime/standalone/.next/server/app/status.segments/_index.segment.rsc +2 -2
  217. package/cloud-runtime/standalone/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  218. package/cloud-runtime/standalone/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
  219. package/cloud-runtime/standalone/.next/server/app/status.segments/status.segment.rsc +1 -1
  220. package/cloud-runtime/standalone/.next/server/app/thread/[id]/page.js.nft.json +1 -1
  221. package/cloud-runtime/standalone/.next/server/app/thread/[id]/page_client-reference-manifest.js +1 -1
  222. package/cloud-runtime/standalone/.next/server/app/welcome/page.js.nft.json +1 -1
  223. package/cloud-runtime/standalone/.next/server/app/welcome/page_client-reference-manifest.js +1 -1
  224. package/cloud-runtime/standalone/.next/server/app/welcome.html +2 -2
  225. package/cloud-runtime/standalone/.next/server/app/welcome.rsc +3 -3
  226. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_full.segment.rsc +3 -3
  227. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_head.segment.rsc +1 -1
  228. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_index.segment.rsc +2 -2
  229. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_tree.segment.rsc +2 -2
  230. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +2 -2
  231. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome.segment.rsc +1 -1
  232. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__015d40a6._.js +67 -0
  233. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__067034dd._.js +67 -0
  234. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__20a2cb22._.js +8 -8
  235. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__37844df7._.js +67 -0
  236. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__d9f2041b._.js → [root-of-the-server]__3a93931b._.js} +4 -4
  237. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__a3955224._.js +16 -16
  238. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__c8890cd6._.js +12 -12
  239. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b2a2b86._.js +3 -0
  240. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__32546242._.js +3 -0
  241. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__5ff9ead4._.js +3 -0
  242. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__f2c3b7ab._.js +1 -1
  243. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__f59f0dc7._.js +3 -0
  244. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__d96bb3b5._.js → [root-of-the-server]__fbe1ab4a._.js} +2 -2
  245. package/cloud-runtime/standalone/.next/server/chunks/ssr/_1e9b9b1e._.js +3 -0
  246. package/cloud-runtime/standalone/.next/server/chunks/ssr/_24fe6213._.js +3 -0
  247. package/cloud-runtime/standalone/.next/server/chunks/ssr/_36a0c486._.js +3 -0
  248. package/cloud-runtime/standalone/.next/server/chunks/ssr/_3b21d3b2._.js +95 -0
  249. package/cloud-runtime/standalone/.next/server/chunks/ssr/_3eeac8f9._.js +3 -0
  250. package/cloud-runtime/standalone/.next/server/chunks/ssr/_48db42b7._.js +3 -0
  251. package/cloud-runtime/standalone/.next/server/chunks/ssr/_59f30a73._.js +3 -0
  252. package/cloud-runtime/standalone/.next/server/chunks/ssr/_7d3b0032._.js +3 -0
  253. package/cloud-runtime/standalone/.next/server/chunks/ssr/_916950b3._.js +3 -0
  254. package/cloud-runtime/standalone/.next/server/chunks/ssr/_b598ae8a._.js +3 -0
  255. package/cloud-runtime/standalone/.next/server/chunks/ssr/_cc8c8302._.js +3 -0
  256. package/cloud-runtime/standalone/.next/server/chunks/ssr/_d972a4e1._.js +3 -0
  257. package/cloud-runtime/standalone/.next/server/chunks/ssr/_dd7bb6fb._.js +3 -0
  258. package/cloud-runtime/standalone/.next/server/chunks/ssr/_dd9880fb._.js +3 -0
  259. package/cloud-runtime/standalone/.next/server/chunks/ssr/_f02d786a._.js +3 -0
  260. package/cloud-runtime/standalone/.next/server/chunks/ssr/_fd8cafe9._.js +3 -0
  261. package/cloud-runtime/standalone/.next/server/chunks/ssr/app_projects_[slug]_linear_page_tsx_971a6ba7._.js +15 -12
  262. package/cloud-runtime/standalone/.next/server/chunks/ssr/components_chat-ui_bfeda794._.js +1 -1
  263. package/cloud-runtime/standalone/.next/server/chunks/ssr/components_thread_WorkspaceSidebar_tsx_e660301b._.js +1 -1
  264. package/cloud-runtime/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_54bf563f._.js +3 -0
  265. package/cloud-runtime/standalone/.next/server/middleware-manifest.json +5 -5
  266. package/cloud-runtime/standalone/.next/server/pages/404.html +2 -2
  267. package/cloud-runtime/standalone/.next/server/pages/500.html +2 -2
  268. package/cloud-runtime/standalone/.next/server/server-reference-manifest.js +1 -1
  269. package/cloud-runtime/standalone/.next/server/server-reference-manifest.json +1 -1
  270. package/cloud-runtime/standalone/.next/static/chunks/04c135686161dbb1.js +40 -0
  271. package/cloud-runtime/standalone/.next/static/chunks/0d63db0c39c0a3b2.js +1 -0
  272. package/cloud-runtime/standalone/.next/static/chunks/136ed07d84b14632.js +1 -0
  273. package/cloud-runtime/standalone/.next/static/chunks/18866ed04ed3a063.css +1 -0
  274. package/cloud-runtime/standalone/.next/static/chunks/{ccaf68956da192f8.js → 1bb38e61d891453c.js} +1 -1
  275. package/cloud-runtime/standalone/.next/static/chunks/2c7c8259c2b56bf5.js +1 -0
  276. package/cloud-runtime/standalone/.next/static/chunks/2da1f13d50dc4e54.js +1 -0
  277. package/cloud-runtime/standalone/.next/static/chunks/{fdadad2379039dce.js → 442eb8ef62bef9f9.js} +3 -3
  278. package/cloud-runtime/standalone/.next/static/chunks/{41c518743656a291.js → 5f33b52d582b0bb4.js} +1 -1
  279. package/cloud-runtime/standalone/.next/static/chunks/{97c11137cd6fc860.js → 64c2961edd3a3b13.js} +1 -1
  280. package/cloud-runtime/standalone/.next/static/chunks/{db131a0b6350e416.js → 692ce04abdbb3970.js} +1 -1
  281. package/cloud-runtime/standalone/.next/static/chunks/83be8569d298c6b0.js +1 -0
  282. package/cloud-runtime/standalone/.next/static/chunks/87b3afe828c8cc52.js +1 -0
  283. package/cloud-runtime/standalone/.next/static/chunks/{4343e7fe5bf5f34a.js → 9328740727c6456d.js} +1 -1
  284. package/cloud-runtime/standalone/.next/static/chunks/95d47e285ae9c031.js +1 -0
  285. package/cloud-runtime/standalone/.next/static/chunks/b9bf5d3ee92a1313.js +1 -0
  286. package/cloud-runtime/standalone/.next/static/chunks/ea35fb870141bcff.js +1 -0
  287. package/cloud-runtime/standalone/.next/static/chunks/f59722264449b61c.js +1 -0
  288. package/cloud-runtime/standalone/.next/static/chunks/f727d2c8f039511d.js +1 -0
  289. package/cloud-runtime/standalone/.next/static/chunks/{31fe4e36a00fd7b5.js → f8706212baa8ec67.js} +1 -1
  290. package/cloud-runtime/standalone/.next/static/chunks/fd823c9d1381335d.js +1 -0
  291. package/cloud-runtime/standalone/app/automations/page.tsx +11 -1
  292. package/cloud-runtime/standalone/app/projects/[slug]/layout.tsx +11 -1
  293. package/cloud-runtime/standalone/components/LinearBoard.tsx +118 -21
  294. package/cloud-runtime/standalone/components/chat-ui/ChatContainer.tsx +10 -0
  295. package/cloud-runtime/standalone/components/linear/RunScriptManager.tsx +356 -0
  296. package/cloud-runtime/standalone/components/thread/WorkspaceSidebar.tsx +35 -0
  297. package/cloud-runtime/standalone/hooks/useLinearRunScripts.ts +115 -0
  298. package/cloud-runtime/standalone/lib/linear-client.ts +33 -3
  299. package/cloud-runtime/standalone/lib/linear-execution-prompt.ts +92 -15
  300. package/cloud-runtime/standalone/state/automations/.state/c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc.json +8 -0
  301. package/cloud-runtime/standalone/state/automations/active/c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc.md +15 -0
  302. package/cloud-runtime/standalone/state/linearRunScripts.test.ts +99 -0
  303. package/cloud-runtime/standalone/state/linearRunScripts.ts +132 -0
  304. package/cloud-runtime/standalone/state/windowState.ts +21 -0
  305. package/cloud-runtime/standalone/tsconfig.tsbuildinfo +1 -1
  306. package/package.json +1 -1
  307. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__1154e5b3._.js +0 -67
  308. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__76290829._.js +0 -67
  309. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__ad6d6402._.js +0 -67
  310. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__21a9eaef._.js +0 -3
  311. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__69887882._.js +0 -3
  312. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__9ad05ace._.js +0 -3
  313. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__bb149a22._.js +0 -3
  314. package/cloud-runtime/standalone/.next/server/chunks/ssr/_11ce4c04._.js +0 -95
  315. package/cloud-runtime/standalone/.next/server/chunks/ssr/_1d949e96._.js +0 -3
  316. package/cloud-runtime/standalone/.next/server/chunks/ssr/_32a156b6._.js +0 -3
  317. package/cloud-runtime/standalone/.next/server/chunks/ssr/_43c091dc._.js +0 -3
  318. package/cloud-runtime/standalone/.next/server/chunks/ssr/_45175f47._.js +0 -3
  319. package/cloud-runtime/standalone/.next/server/chunks/ssr/_4f0c544d._.js +0 -3
  320. package/cloud-runtime/standalone/.next/server/chunks/ssr/_69164b06._.js +0 -95
  321. package/cloud-runtime/standalone/.next/server/chunks/ssr/_7f7a828a._.js +0 -3
  322. package/cloud-runtime/standalone/.next/server/chunks/ssr/_97f6a18e._.js +0 -3
  323. package/cloud-runtime/standalone/.next/server/chunks/ssr/_a511a014._.js +0 -3
  324. package/cloud-runtime/standalone/.next/server/chunks/ssr/_c3a3a829._.js +0 -3
  325. package/cloud-runtime/standalone/.next/server/chunks/ssr/_cee3cf86._.js +0 -95
  326. package/cloud-runtime/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_e8bdedc5._.js +0 -3
  327. package/cloud-runtime/standalone/.next/static/chunks/14fff3c493ea9c54.js +0 -1
  328. package/cloud-runtime/standalone/.next/static/chunks/2a9c83f8211196e0.js +0 -1
  329. package/cloud-runtime/standalone/.next/static/chunks/5405540470146645.js +0 -1
  330. package/cloud-runtime/standalone/.next/static/chunks/69f2db4b9996b9c1.js +0 -37
  331. package/cloud-runtime/standalone/.next/static/chunks/8aeb69ceb497ad85.css +0 -1
  332. package/cloud-runtime/standalone/.next/static/chunks/a9da98f883ac833b.js +0 -1
  333. package/cloud-runtime/standalone/.next/static/chunks/b2127dc67c5ade9f.js +0 -1
  334. package/cloud-runtime/standalone/.next/static/chunks/baf5d39d089efb87.js +0 -1
  335. package/cloud-runtime/standalone/.next/static/chunks/bf2a2fafb710e63c.js +0 -1
  336. package/cloud-runtime/standalone/.next/static/chunks/c78969fde5798275.js +0 -1
  337. package/cloud-runtime/standalone/.next/static/chunks/d3dc6fadb96ab3a2.js +0 -1
  338. package/cloud-runtime/standalone/state/automations/.state/24a6a5db-3b14-49c4-841f-29f10f015fbb.json +0 -8
  339. package/cloud-runtime/standalone/state/automations/active/24a6a5db-3b14-49c4-841f-29f10f015fbb.md +0 -17
  340. /package/cloud-runtime/standalone/.next/static/{lOB5InbmVcurTLQo9J3KK → gty0FO80D_lbq3o9lSpQQ}/_buildManifest.js +0 -0
  341. /package/cloud-runtime/standalone/.next/static/{lOB5InbmVcurTLQo9J3KK → gty0FO80D_lbq3o9lSpQQ}/_clientMiddlewareManifest.json +0 -0
  342. /package/cloud-runtime/standalone/.next/static/{lOB5InbmVcurTLQo9J3KK → gty0FO80D_lbq3o9lSpQQ}/_ssgManifest.js +0 -0
@@ -29,6 +29,26 @@ export interface LinearExecutionPromptInput {
29
29
  runtime?: LinearExecutionRuntimeContext | null;
30
30
  }
31
31
 
32
+ export interface ResolvedLinearExecutionContext {
33
+ issue: {
34
+ identifier: string;
35
+ title: string;
36
+ status: string;
37
+ assignee: string;
38
+ };
39
+ project: {
40
+ name: string;
41
+ slug: string;
42
+ label: string;
43
+ repos: LinearExecutionProjectRepoContext[];
44
+ };
45
+ runtime: {
46
+ knowledgeBaseRoot: string;
47
+ issueKnowledgePath: string;
48
+ isolatedWorktreePath: string;
49
+ };
50
+ }
51
+
32
52
  function slugifySegment(value: string, fallback: string): string {
33
53
  const slug = value
34
54
  .trim()
@@ -95,19 +115,14 @@ export function buildLinearExecutionPrompt(input: LinearExecutionPromptInput): {
95
115
  prompt: string;
96
116
  promptPrefix: string;
97
117
  } {
98
- const issueIdentifier = input.issue.identifier.trim() || "TICKET-ID";
99
- const issueTitle = input.issue.title.trim() || "Untitled ticket";
100
- const issueStatus = String(input.issue.status ?? "").trim() || "Unknown";
101
- const issueAssignee = String(input.issue.assignee ?? "").trim() || "Unassigned";
102
- const projectSlug = toProjectSlug(input.project);
103
- const knowledgeBaseRoot =
104
- String(input.runtime?.knowledgeBaseRoot ?? "").trim() || `~/.agx/vault/${projectSlug}`;
105
- const issueKnowledgePath =
106
- String(input.runtime?.issueKnowledgePath ?? "").trim() ||
107
- `${knowledgeBaseRoot}/issues/${issueIdentifier}/`;
108
- const isolatedWorktreePath =
109
- String(input.runtime?.isolatedWorktreePath ?? "").trim() ||
110
- `/tmp/agx-${slugifySegment(issueIdentifier, "ticket")}`;
118
+ const context = resolveLinearExecutionContext(input);
119
+ const issueIdentifier = context.issue.identifier;
120
+ const issueTitle = context.issue.title;
121
+ const issueStatus = context.issue.status;
122
+ const issueAssignee = context.issue.assignee;
123
+ const knowledgeBaseRoot = context.runtime.knowledgeBaseRoot;
124
+ const issueKnowledgePath = context.runtime.issueKnowledgePath;
125
+ const isolatedWorktreePath = context.runtime.isolatedWorktreePath;
111
126
 
112
127
  const promptPrefix = [
113
128
  "LINEAR TASK EXECUTION",
@@ -118,13 +133,13 @@ export function buildLinearExecutionPrompt(input: LinearExecutionPromptInput): {
118
133
  `- Title: ${issueTitle}`,
119
134
  `- Current status: ${issueStatus}`,
120
135
  `- Current assignee: ${issueAssignee}`,
121
- `- Project: ${toProjectLabel(input.project)}`,
136
+ `- Project: ${context.project.label}`,
122
137
  `- Knowledge base root: ${knowledgeBaseRoot}`,
123
138
  `- Issue knowledge path: ${issueKnowledgePath}`,
124
139
  `- Suggested isolated worktree: ${isolatedWorktreePath}`,
125
140
  "- Additional project resources such as repo knowledge, project memory, and project variables are injected separately by the active project context.",
126
141
  ].join("\n"),
127
- `SOURCE REPOSITORIES\n${formatRepositories(input.project?.repos)}`,
142
+ `SOURCE REPOSITORIES\n${formatRepositories(context.project.repos)}`,
128
143
  [
129
144
  "WORKFLOW",
130
145
  "1. Read the full Linear issue and comment thread before acting. Use Linear MCP for issue details, comments, state changes, and follow-up.",
@@ -151,3 +166,65 @@ export function buildLinearExecutionPrompt(input: LinearExecutionPromptInput): {
151
166
  promptPrefix,
152
167
  };
153
168
  }
169
+
170
+ export function resolveLinearExecutionContext(
171
+ input: LinearExecutionPromptInput
172
+ ): ResolvedLinearExecutionContext {
173
+ const issueIdentifier = input.issue.identifier.trim() || "TICKET-ID";
174
+ const issueTitle = input.issue.title.trim() || "Untitled ticket";
175
+ const issueStatus = String(input.issue.status ?? "").trim() || "Unknown";
176
+ const issueAssignee = String(input.issue.assignee ?? "").trim() || "Unassigned";
177
+ const projectSlug = toProjectSlug(input.project);
178
+ const projectName = String(input.project?.name ?? "").trim() || projectSlug;
179
+ const knowledgeBaseRoot =
180
+ String(input.runtime?.knowledgeBaseRoot ?? "").trim() || `~/.agx/vault/${projectSlug}`;
181
+ const issueKnowledgePath =
182
+ String(input.runtime?.issueKnowledgePath ?? "").trim() ||
183
+ `${knowledgeBaseRoot}/issues/${issueIdentifier}/`;
184
+ const isolatedWorktreePath =
185
+ String(input.runtime?.isolatedWorktreePath ?? "").trim() ||
186
+ `/tmp/agx-${slugifySegment(issueIdentifier, "ticket")}`;
187
+
188
+ return {
189
+ issue: {
190
+ identifier: issueIdentifier,
191
+ title: issueTitle,
192
+ status: issueStatus,
193
+ assignee: issueAssignee,
194
+ },
195
+ project: {
196
+ name: projectName,
197
+ slug: projectSlug,
198
+ label: toProjectLabel(input.project),
199
+ repos: input.project?.repos ? [...input.project.repos] : [],
200
+ },
201
+ runtime: {
202
+ knowledgeBaseRoot,
203
+ issueKnowledgePath,
204
+ isolatedWorktreePath,
205
+ },
206
+ };
207
+ }
208
+
209
+ export function renderLinearExecutionPromptTemplate(
210
+ template: string,
211
+ input: LinearExecutionPromptInput
212
+ ): string {
213
+ const context = resolveLinearExecutionContext(input);
214
+ const values: Record<string, string> = {
215
+ "ticket.identifier": context.issue.identifier,
216
+ "ticket.title": context.issue.title,
217
+ "ticket.status": context.issue.status,
218
+ "ticket.assignee": context.issue.assignee,
219
+ "project.name": context.project.name,
220
+ "project.slug": context.project.slug,
221
+ "project.label": context.project.label,
222
+ "knowledge_base.root": context.runtime.knowledgeBaseRoot,
223
+ "knowledge_base.issue_path": context.runtime.issueKnowledgePath,
224
+ "worktree.path": context.runtime.isolatedWorktreePath,
225
+ };
226
+
227
+ return template.replace(/\{\{\s*([a-zA-Z0-9._-]+)\s*\}\}/g, (_match, key: string) => {
228
+ return values[key] ?? "";
229
+ });
230
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "scheduleHash": "218b10daaa347ad14c3a8fbaabee0cff119839d6f5b6c5c3aaf7ed2eac4484f1",
3
+ "nextRunAt": 1775643300000,
4
+ "lastRunAt": null,
5
+ "lastOutcome": null,
6
+ "lastError": null,
7
+ "updatedAt": "2026-04-08T09:50:53.809Z"
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
+ });
@@ -0,0 +1,132 @@
1
+ const LINEAR_RUN_SCRIPTS_STORAGE_PREFIX = "agx-linear:runScripts";
2
+
3
+ export interface LinearRunScript {
4
+ id: string;
5
+ name: string;
6
+ prompt: string;
7
+ createdAt: string;
8
+ updatedAt: string;
9
+ }
10
+
11
+ export interface LinearRunScriptsState {
12
+ activeScriptId: string | null;
13
+ scripts: LinearRunScript[];
14
+ }
15
+
16
+ const DEFAULT_LINEAR_RUN_SCRIPTS_STATE: LinearRunScriptsState = {
17
+ activeScriptId: null,
18
+ scripts: [],
19
+ };
20
+
21
+ function isStorageAvailable(): boolean {
22
+ return typeof window !== "undefined" && typeof window.localStorage !== "undefined";
23
+ }
24
+
25
+ function normalizeProjectSlug(projectSlug?: string | null): string {
26
+ return String(projectSlug ?? "").trim().toLowerCase();
27
+ }
28
+
29
+ function normalizeScript(input: unknown): LinearRunScript | null {
30
+ if (!input || typeof input !== "object") {
31
+ return null;
32
+ }
33
+
34
+ const candidate = input as Partial<LinearRunScript>;
35
+ const id = typeof candidate.id === "string" ? candidate.id.trim() : "";
36
+ const name = typeof candidate.name === "string" ? candidate.name.trim() : "";
37
+ const prompt = typeof candidate.prompt === "string" ? candidate.prompt.trim() : "";
38
+ const createdAt =
39
+ typeof candidate.createdAt === "string" && candidate.createdAt.trim()
40
+ ? candidate.createdAt.trim()
41
+ : "";
42
+ const updatedAt =
43
+ typeof candidate.updatedAt === "string" && candidate.updatedAt.trim()
44
+ ? candidate.updatedAt.trim()
45
+ : createdAt;
46
+
47
+ if (!id || !name || !prompt || !createdAt || !updatedAt) {
48
+ return null;
49
+ }
50
+
51
+ return {
52
+ id,
53
+ name,
54
+ prompt,
55
+ createdAt,
56
+ updatedAt,
57
+ };
58
+ }
59
+
60
+ function sortScripts(scripts: LinearRunScript[]): LinearRunScript[] {
61
+ return [...scripts].sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
62
+ }
63
+
64
+ function normalizeState(value: unknown): LinearRunScriptsState {
65
+ if (!value || typeof value !== "object") {
66
+ return { ...DEFAULT_LINEAR_RUN_SCRIPTS_STATE };
67
+ }
68
+
69
+ const candidate = value as Partial<LinearRunScriptsState>;
70
+ const scripts = Array.isArray(candidate.scripts)
71
+ ? sortScripts(
72
+ candidate.scripts
73
+ .map((script) => normalizeScript(script))
74
+ .filter((script): script is LinearRunScript => Boolean(script))
75
+ )
76
+ : [];
77
+ const activeScriptId =
78
+ typeof candidate.activeScriptId === "string" && candidate.activeScriptId.trim()
79
+ ? candidate.activeScriptId.trim()
80
+ : null;
81
+
82
+ return {
83
+ activeScriptId:
84
+ activeScriptId && scripts.some((script) => script.id === activeScriptId)
85
+ ? activeScriptId
86
+ : null,
87
+ scripts,
88
+ };
89
+ }
90
+
91
+ export function getLinearRunScriptsStorageKey(projectSlug?: string | null): string {
92
+ const normalizedProjectSlug = normalizeProjectSlug(projectSlug);
93
+ return normalizedProjectSlug
94
+ ? `${LINEAR_RUN_SCRIPTS_STORAGE_PREFIX}:${normalizedProjectSlug}`
95
+ : `${LINEAR_RUN_SCRIPTS_STORAGE_PREFIX}:global`;
96
+ }
97
+
98
+ export function loadLinearRunScripts(projectSlug?: string | null): LinearRunScriptsState {
99
+ if (!isStorageAvailable()) {
100
+ return { ...DEFAULT_LINEAR_RUN_SCRIPTS_STATE };
101
+ }
102
+
103
+ const raw = window.localStorage.getItem(getLinearRunScriptsStorageKey(projectSlug));
104
+ if (!raw) {
105
+ return { ...DEFAULT_LINEAR_RUN_SCRIPTS_STATE };
106
+ }
107
+
108
+ try {
109
+ return normalizeState(JSON.parse(raw));
110
+ } catch {
111
+ return { ...DEFAULT_LINEAR_RUN_SCRIPTS_STATE };
112
+ }
113
+ }
114
+
115
+ export function persistLinearRunScripts(
116
+ projectSlug: string | null | undefined,
117
+ state: LinearRunScriptsState
118
+ ): void {
119
+ if (!isStorageAvailable()) {
120
+ return;
121
+ }
122
+
123
+ try {
124
+ const normalized = normalizeState(state);
125
+ window.localStorage.setItem(
126
+ getLinearRunScriptsStorageKey(projectSlug),
127
+ JSON.stringify(normalized)
128
+ );
129
+ } catch {
130
+ // ignore storage errors
131
+ }
132
+ }
@@ -18,6 +18,8 @@ export interface SidebarState {
18
18
  logPanelHeight: number;
19
19
  workspaceVisible: boolean;
20
20
  logPanelVisible: boolean;
21
+ linearTicketPanelWidth: number;
22
+ linearRunsPanelWidth: number;
21
23
  }
22
24
 
23
25
  export interface ScrollState {
@@ -36,6 +38,8 @@ const DEFAULT_SIDEBAR: SidebarState = {
36
38
  logPanelHeight: 200,
37
39
  workspaceVisible: true,
38
40
  logPanelVisible: false,
41
+ linearTicketPanelWidth: 576,
42
+ linearRunsPanelWidth: 224,
39
43
  };
40
44
 
41
45
  const DEFAULT_SCROLL: ScrollState = {
@@ -172,6 +176,23 @@ export function persistLastWorkspaceId(workspaceId: string | null): void {
172
176
  persistScrollState({ lastWorkspaceId: workspaceId });
173
177
  }
174
178
 
179
+ // Linear panel widths
180
+ export function loadLinearTicketPanelWidth(): number {
181
+ return loadSidebarState().linearTicketPanelWidth;
182
+ }
183
+
184
+ export function persistLinearTicketPanelWidth(width: number): void {
185
+ persistSidebarState({ linearTicketPanelWidth: width });
186
+ }
187
+
188
+ export function loadLinearRunsPanelWidth(): number {
189
+ return loadSidebarState().linearRunsPanelWidth;
190
+ }
191
+
192
+ export function persistLinearRunsPanelWidth(width: number): void {
193
+ persistSidebarState({ linearRunsPanelWidth: width });
194
+ }
195
+
175
196
  // Clear all window state (for logout/reset)
176
197
  export function clearWindowState(): void {
177
198
  if (!isStorageAvailable()) return;