@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
@@ -0,0 +1,3 @@
1
+ module.exports=[694392,180032,a=>{"use strict";var b=a.i(883706);let c=(0,b.default)("cpu",[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]]);a.s(["Cpu",()=>c],694392);let d=(0,b.default)("box",[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]]);a.s(["Box",()=>d],180032)},953722,a=>{"use strict";let b=(0,a.i(883706).default)("book-open",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);a.s(["BookOpen",()=>b],953722)},296101,a=>{"use strict";let b=(0,a.i(883706).default)("folder-open",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);a.s(["FolderOpen",()=>b],296101)},705151,a=>{"use strict";let b=(0,a.i(883706).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);a.s(["Copy",()=>b],705151)},520138,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(633508),e=a.i(546842),f=a.i(694392),g=a.i(180032),h=a.i(953722),i=a.i(808406),j=a.i(915618),k=a.i(296101),l=a.i(405784),m=a.i(705151),n=a.i(533441),o=a.i(448609);function p(a,b=32,c){let d=`https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${encodeURIComponent(a)}&size=${b}`;if(!c)return d;let e=c.replace("#","");return`${d}&backgroundColor=${e}`}a.i(749741),a.i(449140),a.i(214512);let q=["claude","ollama","gemini","codex","zai"];function r(a){return(a??[]).map(a=>a.condition?.trim()?`${a.file} | ${a.condition}`:a.file).join("\n")}function s(a){return a.split("\n").map(a=>a.trim()).filter(Boolean).map(a=>{let[b,...c]=a.split("|");return{file:b.trim(),condition:c.join("|").trim()}}).filter(a=>a.file.length>0)}function t(a,b){return JSON.stringify({name:a.name,...a.title?{title:a.title}:{},provider:a.provider,model:a.model,identity:a.identity,color:a.color??"#6B7280",skills:a.skills??[],skillBindings:a.skillBindings??[],...b?{projectIds:b}:{}},null,2)}function u({title:a,initial:u,submitLabel:v,onSubmit:w,onCancel:x,projects:y,initialProjectIds:z,agentId:A,projectMemberships:B,onAddToProject:C,onRemoveFromProject:D}){let[E,F]=(0,c.useState)(u.name),[G,H]=(0,c.useState)(u.title??""),[I,J]=(0,c.useState)(u.provider),[K,L]=(0,c.useState)(u.model),[M,N]=(0,c.useState)(u.identity),[O,P]=(0,c.useState)(u.color??"#6B7280"),[Q,R]=(0,c.useState)(r(u.skills)),[S,T]=(0,c.useState)(new Set(z??[])),[U,V]=(0,c.useState)("form"),[W,X]=(0,c.useState)(()=>t(u,y?z??[]:void 0)),[Y,Z]=(0,c.useState)(null),[$,_]=(0,c.useState)(!1),[aa,ab]=(0,c.useState)([]),[ac,ad]=(0,c.useState)(""),[ae,af]=(0,c.useState)(!1),[ag,ah]=(0,c.useState)(u.skillBindings??[]),ai=(0,c.useRef)(null),aj=(0,c.useRef)(null);(0,c.useEffect)(()=>{let a=a=>{aj.current&&!aj.current.contains(a.target)&&x()},b=setTimeout(()=>document.addEventListener("mousedown",a),0);return()=>{clearTimeout(b),document.removeEventListener("mousedown",a)}},[aj,x]),(0,c.useEffect)(()=>{if(!ae)return;let a=a=>{ai.current&&!ai.current.contains(a.target)&&af(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[ae]),(0,c.useEffect)(()=>{"form"===U&&X(t({name:E,title:G,provider:I,model:K,identity:M,color:O,skills:s(Q),skillBindings:ag},y?Array.from(S):void 0))},[U,E,G,I,K,M,O,Q,ag,S,y]),(0,c.useEffect)(()=>{if(!$)return;let a=window.setTimeout(()=>_(!1),1200);return()=>window.clearTimeout(a)},[$]),(0,c.useEffect)(()=>{let a=!1;return async function(){try{let b=await fetch("/api/skills");if(!b.ok)return;let c=await b.json();if(a)return;let d=Array.isArray(c.skills)?c.skills.filter(a=>!!a&&"object"==typeof a).map(a=>({skillId:String(a.skillId??"").trim(),repo:String(a.repo??"").trim(),name:String(a.name??a.skillId??"").trim()})).filter(a=>a.skillId.length>0&&a.repo.length>0):[];ab(d)}catch{a||ab([])}}(),()=>{a=!0}},[]);let ak=a=>{let b=function(a,b){let c;try{c=JSON.parse(a)}catch{throw Error("JSON is invalid.")}if(!c||"object"!=typeof c||Array.isArray(c))throw Error("JSON must be an object.");let d=c,e="string"==typeof d.provider?d.provider:b,f=q.includes(e)?e:b,g=(Array.isArray(d.skills)?d.skills:[]).flatMap(a=>{if("string"==typeof a){let[b,...c]=a.split("|"),d=b.trim();return d?[{file:d,condition:c.join("|").trim()}]:[]}if(!a||"object"!=typeof a||Array.isArray(a))return[];let b="string"==typeof a.file?a.file.trim():"";return b?[{file:b,condition:"string"==typeof a.condition?a.condition.trim():""}]:[]}),h=Array.isArray(d.projectIds)?d.projectIds.filter(a=>"string"==typeof a&&a.trim().length>0):void 0,i=(Array.isArray(d.skillBindings)?d.skillBindings:[]).flatMap(a=>{if(!a||"object"!=typeof a||Array.isArray(a))return[];let b="string"==typeof a.repo?a.repo.trim():"",c="string"==typeof a.skillId?a.skillId.trim():"";return b&&c?[{repo:b,skillId:c,condition:"string"==typeof a.condition?a.condition.trim():""}]:[]});return{data:{name:"string"==typeof d.name?d.name:"",title:"string"==typeof d.title?d.title:"",provider:f,model:"string"==typeof d.model?d.model:"",identity:"string"==typeof d.identity?d.identity:"",color:"string"==typeof d.color&&d.color.trim()?d.color:"#6B7280",skills:g,skillBindings:i},projectIds:h}}(a,I),c=y?(b.projectIds??[]).filter(a=>y.some(b=>b.id===a)):void 0;return F(b.data.name),H(b.data.title??""),J(b.data.provider),L(b.data.model),N(b.data.identity),P(b.data.color??"#6B7280"),R(r(b.data.skills)),ah(b.data.skillBindings??[]),y&&T(new Set(c??[])),X(t(b.data,y?c??[]:void 0)),Z(null),{...b,projectIds:c}},al=()=>{if("form"!==U)try{ak(W),V("form")}catch(a){Z(a instanceof Error?a.message:"Unable to parse JSON.")}},am=async()=>{try{await navigator.clipboard.writeText(W),_(!0)}catch{_(!1)}},an=(0,c.useMemo)(()=>{let a=ac.trim().toLowerCase();return a?aa.filter(b=>[b.name,b.skillId,b.repo].some(b=>b.toLowerCase().includes(a))).slice(0,50):aa.slice(0,50)},[aa,ac]),ao=(0,c.useMemo)(()=>new Set(ag.map(a=>`${a.repo}::${a.skillId}`)),[ag]);return(0,b.jsx)("div",{ref:aj,className:"fixed inset-0 z-[100] flex items-center justify-center p-4 bg-black/30 backdrop-blur-sm",onKeyDown:a=>{"Escape"===a.key&&x()},children:(0,b.jsxs)("div",{className:"bg-[var(--card-bg)] rounded-[32px] shadow-2xl overflow-hidden w-full max-w-2xl max-h-[90vh] flex flex-col animate-in fade-in zoom-in duration-300",children:[(0,b.jsxs)("div",{className:"px-8 pt-8 pb-4 shrink-0 flex items-center justify-between",children:[(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[A&&(0,b.jsxs)("div",{className:"flex flex-col items-center gap-1.5",children:[(0,b.jsx)("img",{src:p(A,64,O),alt:E,className:"w-14 h-14 rounded-full bg-[var(--muted)]"}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)("label",{className:"text-[10px] text-[var(--muted-foreground)]",children:"Color"}),(0,b.jsx)("input",{type:"color",value:O,onChange:a=>P(a.target.value),className:"w-5 h-5 rounded border border-[var(--border)] cursor-pointer p-0"})]})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-[10px] font-bold tracking-widest text-[var(--muted-foreground)] uppercase",children:a}),(0,b.jsx)("h1",{className:"text-2xl font-semibold mt-1",children:E||"Configure Agent"})]})]}),(0,b.jsx)("button",{onClick:x,className:"p-2 text-[var(--muted-foreground)] hover:text-[var(--muted-foreground)] hover:bg-[var(--muted)] rounded-full transition-all",children:(0,b.jsx)(d.X,{size:20})})]}),(0,b.jsxs)("div",{className:"px-8 pb-8 space-y-6 overflow-y-auto",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"inline-flex rounded-xl bg-[var(--muted)] p-1",children:[(0,b.jsx)("button",{type:"button",onClick:al,className:"form"===U?"px-3 py-1.5 text-xs font-semibold rounded-lg bg-[var(--card-bg)] text-[var(--foreground)] shadow-sm":"px-3 py-1.5 text-xs font-semibold rounded-lg text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:"Form"}),(0,b.jsx)("button",{type:"button",onClick:()=>{X(t({name:E,title:G,provider:I,model:K,identity:M,color:O,skills:s(Q),skillBindings:ag},y?Array.from(S):void 0)),Z(null),V("json")},className:"json"===U?"px-3 py-1.5 text-xs font-semibold rounded-lg bg-[var(--card-bg)] text-[var(--foreground)] shadow-sm":"px-3 py-1.5 text-xs font-semibold rounded-lg text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:"JSON"})]}),"json"===U&&(0,b.jsxs)("button",{type:"button",onClick:am,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-semibold text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--muted)] rounded-lg transition-colors",children:[$?(0,b.jsx)(n.Check,{size:14,className:"text-emerald-500"}):(0,b.jsx)(m.Copy,{size:14}),$?"Copied":"Copy"]})]}),"form"===U?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("label",{className:"flex items-center gap-2 text-sm font-medium text-[var(--muted-foreground)]",children:[(0,b.jsx)(e.User,{size:16})," Name"]}),(0,b.jsx)("input",{type:"text",value:E,onChange:a=>F(a.target.value),className:"w-full px-4 py-3 bg-[var(--app-shell-subtle)] border border-[var(--border)] rounded-xl focus:outline-none focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500 transition-all",placeholder:"e.g. Ada, Kai, Sage...",autoFocus:!0})]}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)("label",{className:"flex items-center gap-2 text-sm font-medium text-[var(--muted-foreground)]",children:"Title"}),(0,b.jsx)("input",{type:"text",value:G,onChange:a=>H(a.target.value),className:"w-full px-4 py-3 bg-[var(--app-shell-subtle)] border border-[var(--border)] rounded-xl focus:outline-none focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500 transition-all",placeholder:"e.g. VP of Engineering"})]})]}),(0,b.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("label",{className:"flex items-center gap-2 text-sm font-medium text-[var(--muted-foreground)]",children:[(0,b.jsx)(g.Box,{size:16})," Provider"]}),(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsxs)("select",{value:I,onChange:a=>J(a.target.value),className:"w-full appearance-none px-4 py-3 bg-[var(--app-shell-subtle)] border border-[var(--border)] rounded-xl focus:outline-none focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500 transition-all pr-10 cursor-pointer",children:[(0,b.jsx)("option",{value:"claude",children:"Claude"}),(0,b.jsx)("option",{value:"ollama",children:"Ollama"}),(0,b.jsx)("option",{value:"gemini",children:"Gemini"}),(0,b.jsx)("option",{value:"codex",children:"Codex"}),(0,b.jsx)("option",{value:"zai",children:"Z.AI"})]}),(0,b.jsx)(l.ChevronDown,{className:"absolute right-3 top-1/2 -translate-y-1/2 text-[var(--muted-foreground)] pointer-events-none",size:16})]})]}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("label",{className:"flex items-center gap-2 text-sm font-medium text-[var(--muted-foreground)]",children:[(0,b.jsx)(f.Cpu,{size:16})," Model"]}),(0,b.jsx)("input",{type:"text",value:K,onChange:a=>L(a.target.value),className:"w-full px-4 py-3 bg-[var(--app-shell-subtle)] border border-[var(--border)] rounded-xl focus:outline-none focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500 transition-all font-mono text-sm",placeholder:"e.g. claude-sonnet-4-6"})]})]}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("label",{className:"flex items-center gap-2 text-sm font-medium text-[var(--muted-foreground)]",children:[(0,b.jsx)(h.BookOpen,{size:16})," Identity"]}),(0,b.jsx)("div",{className:"border border-[var(--border)] rounded-xl overflow-hidden bg-[var(--app-shell-subtle)] focus-within:ring-2 focus-within:ring-indigo-500/20 focus-within:border-indigo-500 transition-all",children:(0,b.jsx)(o.default,{content:M,onChange:a=>N(a),placeholder:"You are a ..."})}),(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:"Identity defines who the agent is. Keep portable knowledge separate below; project and repo knowledge belong on their scoped surfaces."})]}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("label",{className:"flex items-center gap-2 text-sm font-medium text-[var(--muted-foreground)]",children:[(0,b.jsx)(i.Sparkles,{size:16})," Portable Knowledge"]}),(0,b.jsxs)("div",{className:"rounded-xl border border-[var(--border)] bg-[var(--app-shell-subtle)] p-3 space-y-3",children:[(0,b.jsx)("div",{className:"flex items-center justify-between gap-3",children:(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"text-xs font-semibold text-[var(--foreground)]",children:"Skills Picker"}),(0,b.jsx)("p",{className:"text-[11px] text-[var(--muted-foreground)]",children:"Pick a skill here. AGX will install it later only if the run actually needs it."})]})}),aa.length>0?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"relative",ref:ai,children:[(0,b.jsxs)("button",{type:"button",onClick:()=>af(a=>!a),className:"w-full flex items-center justify-between px-3 py-2 rounded-xl border border-[var(--border)] bg-[var(--card-bg)] text-sm font-medium hover:border-indigo-500",children:[(0,b.jsx)("span",{className:"truncate text-left",children:"Search and add skills"}),(0,b.jsx)(l.ChevronDown,{size:16,className:`shrink-0 text-[var(--muted-foreground)] transition-transform ${ae?"rotate-180":""}`})]}),ae&&(0,b.jsxs)("div",{className:"absolute left-0 right-0 top-full mt-2 z-30 rounded-xl border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] shadow-lg overflow-hidden",children:[(0,b.jsx)("div",{className:"p-2 border-b border-[var(--border)]",children:(0,b.jsx)("input",{type:"text",value:ac,onChange:a=>ad(a.target.value),placeholder:"Search skills",className:"w-full px-3 py-2 bg-[var(--card-bg)] border border-[var(--border)] rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500",autoFocus:!0})}),(0,b.jsx)("div",{className:"max-h-64 overflow-y-auto",children:an.length>0?an.map(a=>{let c=`${a.repo}::${a.skillId}`,d=ao.has(c);return(0,b.jsx)("button",{type:"button",className:`w-full px-3 py-2 text-left text-sm transition-colors ${d?"bg-emerald-50 text-[var(--foreground)]":"text-[var(--foreground)] hover:bg-[var(--app-shell-subtle)]"}`,onMouseDown:a=>a.preventDefault(),onClick:()=>{var b,c;return b=a.repo,c=a.skillId,void(ah(a=>a.some(a=>a.repo===b&&a.skillId===c)?a.filter(a=>a.repo!==b||a.skillId!==c):[...a,{repo:b,skillId:c}]),ad(""))},children:(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"font-medium",children:a.name||a.skillId}),(0,b.jsx)("div",{className:"text-[11px] text-[var(--muted-foreground)]",children:a.repo})]}),d&&(0,b.jsx)("span",{className:"shrink-0 rounded-full bg-emerald-100 px-2 py-0.5 text-[10px] font-semibold text-emerald-700",children:"Added"})]})},c)}):(0,b.jsx)("div",{className:"px-3 py-3 text-sm text-[var(--muted-foreground)]",children:"No matching skills."})})]})]}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-2",children:[ag.map(a=>(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-emerald-50 text-emerald-700 border border-emerald-200 px-2.5 py-1 text-[11px] font-medium",children:[a.skillId,(0,b.jsx)("button",{type:"button",onClick:()=>{var b,c;return b=a.repo,c=a.skillId,void ah(a=>a.filter(a=>a.repo!==b||a.skillId!==c))},className:"text-emerald-700/70 hover:text-emerald-900",title:`Remove ${a.skillId}`,children:(0,b.jsx)(d.X,{size:12})})]},`${a.repo}::${a.skillId}`)),0===ag.length&&(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:"No library skills selected yet."})]})]}):(0,b.jsx)("p",{className:"text-[11px] text-[var(--muted-foreground)]",children:"No catalog skills available right now."})]}),(0,b.jsx)("textarea",{value:Q,onChange:a=>R(a.target.value),rows:5,className:"w-full px-4 py-3 bg-[var(--app-shell-subtle)] border border-[var(--border)] rounded-xl focus:outline-none focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500 transition-all font-mono text-xs",placeholder:"one/path/to/skill.md\npath/to/skill.md | when coding in TypeScript"}),(0,b.jsxs)("p",{className:"text-xs text-[var(--muted-foreground)]",children:["Portable agent knowledge only. One reference per line. Use ",(0,b.jsx)("code",{children:"|"})," to add an optional condition."]})]}),y&&y.length>0&&(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsxs)("label",{className:"flex items-center gap-2 text-sm font-medium text-[var(--muted-foreground)]",children:[(0,b.jsx)(k.FolderOpen,{size:16})," Assign To Projects"]}),(0,b.jsx)("div",{className:"space-y-1 max-h-[160px] overflow-y-auto",children:y.map(a=>{let c=S.has(a.id);return(0,b.jsxs)("button",{type:"button",className:c?"w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors bg-indigo-50 text-indigo-700":"w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors text-[var(--muted-foreground)] hover:bg-[var(--app-shell-subtle)]",onClick:()=>T(b=>{let c=new Set(b);return c.has(a.id)?c.delete(a.id):c.add(a.id),c}),children:[(0,b.jsx)("div",{className:c?"w-4 h-4 rounded border flex-shrink-0 flex items-center justify-center bg-indigo-600 border-indigo-600":"w-4 h-4 rounded border flex-shrink-0 flex items-center justify-center border-[var(--border)]",children:c&&(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,b.jsx)("path",{d:"M2 5l2 2 4-4",stroke:"white",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}),(0,b.jsx)("span",{className:"text-xs font-medium text-left",children:a.label??a.name})]},a.id)})})]}),B&&(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsxs)("label",{className:"flex items-center gap-2 text-sm font-medium text-[var(--muted-foreground)]",children:[(0,b.jsx)(k.FolderOpen,{size:16})," Project Memberships"]}),B.current.length>0?(0,b.jsx)("div",{className:"flex flex-col gap-1",children:B.current.map(a=>(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs bg-[var(--app-shell-subtle)] rounded-lg px-3 py-2",children:[(0,b.jsx)(k.FolderOpen,{size:12,className:"text-[var(--muted-foreground)] shrink-0"}),(0,b.jsx)("span",{className:"truncate flex-1",children:a.name}),D&&!a.is_default&&(0,b.jsx)("button",{type:"button",className:"text-[var(--muted-foreground)] hover:text-red-500 transition-colors",onClick:()=>D(a.id),title:"Remove from project",children:(0,b.jsx)(d.X,{size:12})})]},a.id))}):(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] italic",children:"Not assigned to any projects"}),B.available.length>0&&C&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1",children:B.available.map(a=>(0,b.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1 text-[10px] px-2 py-1 rounded-lg border border-dashed border-[var(--border)] text-[var(--muted-foreground)] hover:border-[var(--border)] hover:text-[var(--foreground)] transition-colors",onClick:()=>C(a.id),children:[(0,b.jsx)(j.Plus,{size:10}),a.name]},a.id))})]})]}):(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:"Paste agent JSON here. Switching back to Form or saving will apply valid JSON to the form state."}),(0,b.jsx)("button",{type:"button",onClick:al,className:"px-3 py-1.5 text-xs font-semibold text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--muted)] rounded-lg transition-colors",children:"Apply to Form"})]}),(0,b.jsx)("textarea",{value:W,onChange:a=>{X(a.target.value),Y&&Z(null)},rows:22,className:"w-full px-4 py-3 bg-[var(--app-shell-bg)] text-[var(--foreground)] border border-[var(--app-shell-border)] rounded-2xl focus:outline-none focus:ring-2 focus:ring-[var(--ring)] focus:border-[var(--primary)] transition-all font-mono text-xs",spellCheck:!1,autoFocus:!0}),Y&&(0,b.jsx)("p",{className:"text-xs text-red-500",children:Y})]}),(0,b.jsxs)("div",{className:"flex items-center justify-end gap-3 pt-4 border-t border-[var(--border)]",children:[(0,b.jsx)("button",{onClick:x,className:"px-6 py-2.5 text-sm font-semibold text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--app-shell-subtle)] rounded-xl transition-all",children:"Cancel"}),(0,b.jsx)("button",{onClick:()=>{let a=E.trim(),b=G.trim(),c=I,d=K.trim(),e=M.trim(),f=O,g=s(Q),h=ag,i=y?Array.from(S):void 0;if("json"===U)try{let j=ak(W);a=j.data.name.trim(),b=(j.data.title??"").trim(),c=j.data.provider,d=j.data.model.trim(),e=j.data.identity.trim(),f=j.data.color??"#6B7280",g=j.data.skills??[],h=j.data.skillBindings??[],i=y?j.projectIds??[]:void 0}catch(a){Z(a instanceof Error?a.message:"Unable to parse JSON.");return}a&&d&&w({name:a,title:b||void 0,provider:c,model:d,identity:e,color:f,skills:g,skillBindings:h},i)},disabled:"form"===U&&(!E.trim()||!K.trim()),className:"px-8 py-2.5 bg-indigo-600 text-white text-sm font-semibold rounded-xl shadow-[0_4px_12px_rgba(79,70,229,0.3)] hover:bg-indigo-700 active:scale-95 disabled:opacity-50 transition-all font-bold",children:v})]})]})]})})}a.s(["AgentForm",()=>u,"agentAvatarUrl",()=>p])}];
2
+
3
+ //# sourceMappingURL=_fd8cafe9._.js.map
@@ -1,20 +1,20 @@
1
- module.exports=[323860,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(50944),e=a.i(56196),f=a.i(819721),g=a.i(533441),h=a.i(405784),i=a.i(641710);let j=(0,a.i(883706).default)("link-2",[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]]);var k=a.i(325015),l=a.i(669520),m=a.i(587532),n=a.i(321161),o=a.i(546842),p=a.i(331748),q=a.i(204301),r=a.i(815682),s=a.i(194125);let t={search:"",assigneeIds:[],statuses:[],teamId:"",cycleId:""};var u=a.i(356283);function v(a,b){return a.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||b}function w(a){var b,c;let d,e,f=a.issue.identifier.trim()||"TICKET-ID",g=a.issue.title.trim()||"Untitled ticket",h=String(a.issue.status??"").trim()||"Unknown",i=String(a.issue.assignee??"").trim()||"Unassigned",j=function(a){let b=String(a?.slug??"").trim();if(b)return v(b,"project");let c=String(a?.name??"").trim();return c?v(c,"project"):"project"}(a.project),k=String(a.runtime?.knowledgeBaseRoot??"").trim()||`~/.agx/vault/${j}`,l=String(a.runtime?.issueKnowledgePath??"").trim()||`${k}/issues/${f}/`,m=String(a.runtime?.isolatedWorktreePath??"").trim()||`/tmp/agx-${v(f,"ticket")}`,n=`LINEAR TASK EXECUTION
1
+ module.exports=[323860,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(50944),e=a.i(56196),f=a.i(819721),g=a.i(533441),h=a.i(405784),i=a.i(641710),j=a.i(104720),k=a.i(883706);let l=(0,k.default)("link-2",[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]]);var m=a.i(325015),n=a.i(669520),o=a.i(587532),p=a.i(321161),q=a.i(546842);let r={activeScriptId:null,scripts:[]};var s=a.i(331748),t=a.i(204301),u=a.i(815682),v=a.i(915618);let w=(0,k.default)("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);var x=a.i(781560),y=a.i(81779),z=a.i(448609);function A({projectSlug:a,scripts:d,activeScriptId:e,onSetActiveScriptId:f,onSaveScript:h,onDeleteScript:i}){let j=(0,c.useMemo)(()=>d.find(a=>a.id===e)??null,[e,d]),[k,l]=(0,c.useState)(()=>e?{type:"edit",scriptId:e}:{type:"new"}),[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(null),[s,t]=(0,c.useState)(null),u="edit"===k.type?k.scriptId:null;(0,c.useEffect)(()=>{if("edit"===k.type){let a=d.find(a=>a.id===k.scriptId);if(a){n(a.name),p(a.prompt);return}}if(j&&"new"!==k.type){("edit"!==k.type||k.scriptId!==j.id)&&l({type:"edit",scriptId:j.id}),n(j.name),p(j.prompt);return}0===d.length&&"new"!==k.type&&(l({type:"new"}),n(""),p(""))},[j,u,k,d]);let A=()=>{l({type:"new"}),n(""),p(""),r(null)},B=()=>{try{let a=h({name:m,prompt:o});l({type:"edit",scriptId:a.id}),r(null)}catch(a){r(a instanceof Error?a.message:"Failed to save run script.")}};return(0,b.jsxs)("div",{className:"flex flex-col gap-5",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)("h3",{className:"text-sm font-semibold text-[var(--foreground)]",children:"Run Scripts"}),(0,b.jsxs)("p",{className:"text-xs leading-relaxed text-[var(--muted-foreground)]",children:["Save reusable execution prompts for the ",String(a??"").trim()||"global Linear board",". These scripts are stored locally on this device and layered on top of the built-in ticket context when you run a Linear task."]})]}),(0,b.jsxs)("div",{className:"grid gap-5 md:grid-cols-[240px_minmax(0,1fr)]",children:[(0,b.jsxs)("aside",{className:"rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] p-3",children:[(0,b.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-[var(--muted-foreground)]",children:"Library"}),(0,b.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1 rounded-md border border-[var(--card-border)] px-2 py-1 text-[11px] font-medium text-[var(--foreground)] transition-colors hover:bg-[var(--background)]",onClick:A,children:[(0,b.jsx)(v.Plus,{size:12}),"New"]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("button",{type:"button",className:`flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-xs transition-colors ${null===e?"bg-[var(--background)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--background)] hover:text-[var(--foreground)]"}`,onClick:()=>f(null),children:[(0,b.jsx)("span",{className:`flex h-4 w-4 shrink-0 items-center justify-center rounded-full border ${null===e?"border-blue-500 bg-blue-500 text-white":"border-[var(--card-border)]"}`,children:null===e?(0,b.jsx)(g.Check,{size:10}):null}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate font-medium",children:"AGX default"})]}),0===d.length?(0,b.jsx)("div",{className:"rounded-lg border border-dashed border-[var(--card-border)] px-3 py-4 text-xs leading-relaxed text-[var(--muted-foreground)]",children:"No saved scripts yet. Create one to reuse your preferred Linear execution prompt."}):d.map(a=>{let c=a.id===e,d="edit"===k.type&&k.scriptId===a.id;return(0,b.jsx)("button",{type:"button",className:`rounded-lg border px-3 py-2 text-left transition-colors ${d?"border-blue-500/50 bg-[var(--background)]":"border-transparent hover:border-[var(--card-border)] hover:bg-[var(--background)]"}`,onClick:()=>{l({type:"edit",scriptId:a.id}),n(a.name),p(a.prompt),r(null),f(a.id)},children:(0,b.jsxs)("div",{className:"flex items-start gap-2",children:[(0,b.jsx)("span",{className:`mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full border ${c?"border-blue-500 bg-blue-500 text-white":"border-[var(--card-border)]"}`,children:c?(0,b.jsx)(g.Check,{size:10}):null}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"truncate text-xs font-medium text-[var(--foreground)]",children:a.name}),(0,b.jsx)("div",{className:"mt-1 line-clamp-2 text-[11px] leading-relaxed text-[var(--muted-foreground)]",children:a.prompt}),(0,b.jsxs)("div",{className:"mt-2 text-[10px] uppercase tracking-[0.14em] text-[var(--muted-foreground)]",children:["Updated ",function(a){try{return new Date(a).toLocaleString([],{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}catch{return a}}(a.updatedAt)]})]})]})},a.id)})]})]}),(0,b.jsxs)("section",{className:"rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] p-4",children:[(0,b.jsxs)("div",{className:"mb-4 flex items-start justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h4",{className:"text-sm font-semibold text-[var(--foreground)]",children:"edit"===k.type?"Edit Run Script":"New Run Script"}),(0,b.jsxs)("p",{className:"mt-1 text-xs leading-relaxed text-[var(--muted-foreground)]",children:["Use placeholders like ",(0,b.jsx)("code",{children:"{{ticket.identifier}}"}),", ",(0,b.jsx)("code",{children:"{{ticket.title}}"}),", ",(0,b.jsx)("code",{children:"{{ticket.status}}"}),", ",(0,b.jsx)("code",{children:"{{ticket.assignee}}"}),", ",(0,b.jsx)("code",{children:"{{project.slug}}"}),", ",(0,b.jsx)("code",{children:"{{knowledge_base.root}}"}),", ",(0,b.jsx)("code",{children:"{{knowledge_base.issue_path}}"}),", and ",(0,b.jsx)("code",{children:"{{worktree.path}}"}),"."]})]}),j?(0,b.jsxs)("span",{className:"rounded-full border border-blue-500/30 bg-blue-500/10 px-2.5 py-1 text-[11px] font-medium text-blue-400",children:["Active: ",j.name]}):(0,b.jsx)("span",{className:"rounded-full border border-[var(--card-border)] px-2.5 py-1 text-[11px] font-medium text-[var(--muted-foreground)]",children:"Active: AGX default"})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,b.jsxs)("label",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-[0.14em] text-[var(--muted-foreground)]",children:"Name"}),(0,b.jsx)("input",{type:"text",className:"rounded-lg border border-[var(--card-border)] bg-[var(--background)] px-3 py-2 text-sm text-[var(--foreground)] outline-none transition-colors focus:border-blue-500",placeholder:"Investigation-first",value:m,onChange:a=>n(a.target.value)})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-[0.14em] text-[var(--muted-foreground)]",children:"Prompt"}),(0,b.jsx)("div",{className:"overflow-hidden rounded-lg border border-[var(--card-border)] bg-[var(--background)] transition-colors focus-within:border-blue-500 [&_.rich-text-editor_.ProseMirror]:min-h-[220px]",children:(0,b.jsx)(z.default,{content:o,onChange:p,placeholder:"Read {{ticket.identifier}} and the full comment thread in Linear before changing code.\nWrite your investigation to {{knowledge_base.issue_path}} and stop after posting a plan unless the issue is already approved for implementation."})})]}),q?(0,b.jsx)("div",{className:"rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-xs text-red-300",children:q}):null,(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1.5 rounded-lg bg-blue-500 px-3 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-600",onClick:B,children:[(0,b.jsx)(w,{size:14}),"Save as new"]}),"edit"===k.type?(0,b.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1.5 rounded-lg border border-[var(--card-border)] px-3 py-2 text-sm font-medium text-[var(--foreground)] transition-colors hover:bg-[var(--background)]",onClick:()=>{if("edit"!==k.type)return void B();try{let a=h({id:k.scriptId,name:m,prompt:o});l({type:"edit",scriptId:a.id}),r(null)}catch(a){r(a instanceof Error?a.message:"Failed to update run script.")}},children:[(0,b.jsx)(w,{size:14}),"Update"]}):null,"edit"===k.type?(0,b.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1.5 rounded-lg border border-red-500/30 px-3 py-2 text-sm font-medium text-red-300 transition-colors hover:bg-red-500/10",onClick:()=>{t(d.find(a=>a.id===k.scriptId)??null)},children:[(0,b.jsx)(x.Trash2,{size:14}),"Delete"]}):null,(0,b.jsxs)("button",{type:"button",className:"inline-flex items-center gap-1.5 rounded-lg border border-[var(--card-border)] px-3 py-2 text-sm font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--background)] hover:text-[var(--foreground)]",onClick:A,children:[(0,b.jsx)(v.Plus,{size:14}),"Clear editor"]})]})]})]})]}),(0,b.jsx)(y.default,{isOpen:!!s,title:"Delete run script?",message:"This removes the saved script from this device for the current project.",preview:s?.name,confirmLabel:"Delete",variant:"danger",onConfirm:()=>{s&&(i(s.id),"edit"===k.type&&k.scriptId===s.id&&(l({type:"new"}),n(""),p("")),t(null),r(null))},onCancel:()=>t(null)})]})}var B=a.i(194125);let C={search:"",assigneeIds:[],statuses:[],teamId:"",cycleId:""};var D=a.i(176388),E=a.i(356283);function F(a,b){return a.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||b}function G(a){var b;let c=H(a),d=c.issue.identifier,e=c.issue.title,f=c.issue.status,g=c.issue.assignee,h=c.runtime.knowledgeBaseRoot,i=c.runtime.issueKnowledgePath,j=c.runtime.isolatedWorktreePath,k=`LINEAR TASK EXECUTION
2
2
 
3
3
  You are an engineer working through a single Linear ticket. Work like a careful teammate: continue existing work when present, investigate before coding, present a plan before implementation, ask clarifying questions when requirements are ambiguous, and stop cleanly when blocked instead of guessing.
4
4
 
5
5
  INJECTED CONTEXT
6
- - Ticket: ${f}
7
- - Title: ${g}
8
- - Current status: ${h}
9
- - Current assignee: ${i}
10
- - Project: ${(b=a.project,d=String(b?.name??"").trim(),e=String(b?.slug??"").trim(),d&&e?`${d} (${e})`:d||e||"current project")}
11
- - Knowledge base root: ${k}
12
- - Issue knowledge path: ${l}
13
- - Suggested isolated worktree: ${m}
6
+ - Ticket: ${d}
7
+ - Title: ${e}
8
+ - Current status: ${f}
9
+ - Current assignee: ${g}
10
+ - Project: ${c.project.label}
11
+ - Knowledge base root: ${h}
12
+ - Issue knowledge path: ${i}
13
+ - Suggested isolated worktree: ${j}
14
14
  - Additional project resources such as repo knowledge, project memory, and project variables are injected separately by the active project context.
15
15
 
16
16
  SOURCE REPOSITORIES
17
- ${!(c=a.project?.repos)||0===c.length?"- Use the active project context to discover the right repository or workspace; do not hardcode paths.":c.map(a=>{let b=[a.name.trim()||"repository"],c=String(a.path??"").trim(),d=String(a.notes??"").trim();return c&&b.push(`path: ${c}`),d&&b.push(`notes: ${d}`),`- ${b.join(" | ")}`}).join("\n")}
17
+ ${!(b=c.project.repos)||0===b.length?"- Use the active project context to discover the right repository or workspace; do not hardcode paths.":b.map(a=>{let b=[a.name.trim()||"repository"],c=String(a.path??"").trim(),d=String(a.notes??"").trim();return c&&b.push(`path: ${c}`),d&&b.push(`notes: ${d}`),`- ${b.join(" | ")}`}).join("\n")}
18
18
 
19
19
  WORKFLOW
20
20
  1. Read the full Linear issue and comment thread before acting. Use Linear MCP for issue details, comments, state changes, and follow-up.
@@ -33,7 +33,10 @@ RULES
33
33
  - If a PR already exists, focus on CI failures, reviewer feedback, merge status, or ticket follow-up instead of starting over.
34
34
  - Leave the ticket and the knowledge base in a resumable state at the end of the session. Clean up temporary worktrees or session claims if your workflow created them.
35
35
 
36
- `;return{prompt:`Work on this Linear ticket: ${f} - ${g}`,promptPrefix:n}}var x=a.i(860614),y=a.i(596221);let z=[{id:"claude",label:"Claude Code",icon:"🟣"},{id:"codex",label:"Codex",icon:"⚫"},{id:"gemini",label:"Gemini CLI",icon:"🔵"}];function A({connected:a,user:d,clis:e,mcpConfigured:f,onConnect:h,onConnectWithKey:i,onDisconnect:j,onConfigureMcp:k,onContinue:l}){let[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(null),[q,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)(null),[u,v]=(0,c.useState)(null),w=async()=>{if(!m.trim())return;r(!0),p(null);let a=await i(m.trim());r(!1),a.ok||p(a.error||"Failed to connect")},A=async a=>{t(a),v(null);let b=await k(a);t(null),b.ok||v(b.error||"Failed to configure")},B=z.filter(a=>e[a.id]).some(a=>f[a.id]);return(0,b.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,b.jsxs)("div",{className:"w-full max-w-md space-y-6 px-6",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[a&&(0,b.jsx)("div",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-green-500/20",children:(0,b.jsx)(g.Check,{size:10,className:"text-green-500"})}),(0,b.jsx)("h2",{className:"text-sm font-semibold text-[var(--foreground)]",children:"Connect to Linear"})]}),(0,b.jsx)("p",{className:"mt-1 text-xs text-[var(--muted-foreground)]",children:"Connect your workspace to browse tickets and execute them with agents."}),(0,b.jsx)("div",{className:"mt-3 space-y-3",children:a?(0,b.jsxs)("div",{className:"flex items-center justify-between rounded-md border border-[var(--card-border)] px-3 py-2",children:[(0,b.jsxs)("div",{className:"text-xs text-[var(--foreground)]",children:["Connected as"," ",(0,b.jsx)("span",{className:"font-medium",children:d?.name})]}),(0,b.jsx)("button",{type:"button",onClick:j,className:"text-[10px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:"Disconnect"})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("button",{type:"button",onClick:h,className:"w-full rounded-md bg-[var(--foreground)] px-4 py-2 text-xs font-medium text-[var(--card-bg)] transition-opacity hover:opacity-90",children:"Connect with Linear"}),(0,b.jsxs)("div",{className:"flex items-center gap-2 text-[10px] text-[var(--muted-foreground)]",children:[(0,b.jsx)("div",{className:"flex-1 border-t border-[var(--card-border)]"}),"or",(0,b.jsx)("div",{className:"flex-1 border-t border-[var(--card-border)]"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-[10px] text-[var(--muted-foreground)] block mb-1",children:"Personal API key"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("input",{type:"password",value:m,onChange:a=>{n(a.target.value),p(null)},onKeyDown:a=>{"Enter"===a.key&&w()},placeholder:"lin_api_...",className:"flex-1 rounded-md border border-[var(--card-border)] bg-transparent px-3 py-1.5 text-xs text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:ring-1 focus:ring-[var(--foreground)]"}),(0,b.jsx)("button",{type:"button",onClick:w,disabled:!m.trim()||q,className:"rounded-md border border-[var(--card-border)] px-3 py-1.5 text-xs text-[var(--foreground)] transition-colors hover:bg-[var(--card-border)] disabled:opacity-40",children:q?"...":"Save"})]}),o&&(0,b.jsx)("p",{className:"mt-1 text-[10px] text-red-400",children:o}),(0,b.jsxs)("a",{href:"https://linear.app/settings/api",target:"_blank",rel:"noopener noreferrer",className:"mt-1 inline-flex items-center gap-1 text-[10px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:["Generate at linear.app/settings/api",(0,b.jsx)(x.ExternalLink,{size:8})]})]})]})})]}),a&&(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-[var(--foreground)]",children:"Configure MCP"}),(0,b.jsx)("p",{className:"mt-1 text-xs text-[var(--muted-foreground)]",children:"Add the Linear MCP server to your AI tools so agents can read and update tickets during execution."}),(0,b.jsxs)("div",{className:"mt-3 space-y-1",children:[z.map(a=>{let c=e[a.id],d=f[a.id],h=s===a.id;return(0,b.jsxs)("div",{className:`flex items-center justify-between rounded-md border border-[var(--card-border)] px-3 py-2 ${!c?"opacity-40":""}`,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,b.jsx)("span",{children:a.icon}),(0,b.jsx)("span",{className:"text-[var(--foreground)]",children:a.label})]}),c?d?(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-green-500",children:[(0,b.jsx)(g.Check,{size:10}),"Configured"]}):(0,b.jsx)("button",{type:"button",onClick:()=>A(a.id),disabled:h,className:"flex items-center gap-1 rounded px-2 py-0.5 text-[10px] text-[var(--foreground)] border border-[var(--card-border)] hover:bg-[var(--card-border)] transition-colors disabled:opacity-50",children:h?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(y.Loader2,{size:10,className:"animate-spin"}),"Configuring..."]}):"Configure"}):(0,b.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:"Not installed"})]},a.id)}),u&&(0,b.jsx)("p",{className:"mt-1 text-[10px] text-red-400",children:u})]}),(0,b.jsx)("button",{type:"button",onClick:l,className:"mt-4 w-full rounded-md bg-[var(--foreground)] px-4 py-2 text-xs font-medium text-[var(--card-bg)] transition-opacity hover:opacity-90",children:B?"Continue":"Skip for now"})]})]})})}let B=(0,f.default)(async()=>{},{loadableGenerated:{modules:[895214]},ssr:!1});function C({onResize:a}){let d=(0,c.useRef)(!1),e=(0,c.useRef)(0);return(0,c.useEffect)(()=>{if(!d.current)return;let b=b=>{let c=b.clientX-e.current;e.current=b.clientX,a(c)},c=()=>{d.current=!1,document.body.style.cursor="",document.body.style.userSelect="",window.removeEventListener("mousemove",b),window.removeEventListener("mouseup",c)};return window.addEventListener("mousemove",b),window.addEventListener("mouseup",c),()=>{window.removeEventListener("mousemove",b),window.removeEventListener("mouseup",c)}}),(0,b.jsx)("div",{className:"group relative z-10 w-0 shrink-0 cursor-col-resize",onMouseDown:a=>{a.preventDefault(),d.current=!0,e.current=a.clientX,document.body.style.cursor="col-resize",document.body.style.userSelect="none"},children:(0,b.jsx)("div",{className:"absolute inset-y-0 -left-0.5 w-1 transition-colors group-hover:bg-[var(--primary)]/40"})})}function D(a,b,c=20){let d=b?b.replace("#",""):"e2e8f0";return`https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${encodeURIComponent(a)}&size=${c}&backgroundColor=${d}`}function E(a){switch(a){case"queued":return"queued";case"running":return"running";case"success":return"success";case"failed":return"failed";case"cancelled":return"cancelled";default:return a}}let F={"In Progress":"In Prog","In Review":"Review",Backlog:"Backlog",Todo:"Todo",Done:"Done",Cancelled:"Cancl."},G={queued:"bg-amber-500/10 border-amber-500/20 text-amber-400",running:"bg-yellow-500/10 border-yellow-500/20 text-yellow-400",success:"bg-emerald-500/10 border-emerald-500/20 text-emerald-400",failed:"bg-red-500/10 border-red-500/20 text-red-400",cancelled:"bg-zinc-500/10 border-zinc-500/20 text-zinc-400"},H={queued:"bg-amber-400",running:"bg-yellow-400",success:"bg-emerald-400",failed:"bg-red-400",cancelled:"bg-zinc-400"};function I({label:a,value:c,options:d,activeClasses:e,onChange:f}){let g=c.trim().length>0;return(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)("select",{"aria-label":a,className:`max-w-[160px] appearance-none rounded-full border bg-transparent px-2.5 py-0.5 pr-6 text-[11px] font-medium outline-none transition-colors ${g?e:"border-[var(--card-border)] text-[var(--muted-foreground)] hover:bg-[var(--card-bg)]"}`,value:c,onChange:a=>f(a.target.value),children:d.map(c=>(0,b.jsx)("option",{value:c.value,children:c.label},`${a}-${c.value||"all"}`))}),(0,b.jsx)(h.ChevronDown,{size:12,className:"pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 text-current"})]})}function J({label:a,values:d,options:e,activeClasses:f,onChange:i,emptyLabel:j}){let[k,l]=(0,c.useState)(!1),m=(0,c.useRef)(null),n=e.filter(a=>a.value&&d.includes(a.value)),o=n.length>0,p=(()=>{if(0===n.length||n.length===e.length)return j??a;if(1===n.length)return n[0]?.label??j??a;let b=a.toLowerCase();return`${n.length} ${b}${b.endsWith("s")?"es":"s"}`})();(0,c.useEffect)(()=>{if(!k)return;let a=a=>{m.current&&!m.current.contains(a.target)&&l(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[k]);let q=(0,c.useCallback)(a=>{a?i(d.includes(a)?d.filter(b=>b!==a):[...d,a]):i([])},[i,d]);return(0,b.jsxs)("div",{className:"relative",ref:m,children:[(0,b.jsxs)("button",{type:"button","aria-label":a,"aria-haspopup":"listbox","aria-expanded":k,className:`flex max-w-[180px] items-center gap-1 rounded-full border px-2.5 py-0.5 text-[11px] font-medium transition-colors ${o?f:"border-[var(--card-border)] text-[var(--muted-foreground)] hover:bg-[var(--card-bg)]"}`,onClick:()=>l(a=>!a),children:[(0,b.jsx)("span",{className:"max-w-[132px] truncate",children:p}),(0,b.jsx)(h.ChevronDown,{size:12,className:`shrink-0 transition-transform ${k?"rotate-180":""}`})]}),k?(0,b.jsxs)("div",{role:"listbox","aria-label":`${a} options`,"aria-multiselectable":"true",className:"absolute left-0 top-full z-50 mt-1 min-w-[240px] overflow-hidden rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] p-1 shadow-lg backdrop-blur-sm",children:[(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":!o,className:`flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-xs transition-colors ${!o?"bg-[var(--background)] font-medium text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--background)] hover:text-[var(--foreground)]"}`,onClick:()=>i([]),children:[(0,b.jsx)("span",{className:`flex h-4 w-4 shrink-0 items-center justify-center rounded-full border ${!o?"border-blue-500 bg-blue-500 text-white":"border-[var(--card-border)]"}`,children:o?null:(0,b.jsx)(g.Check,{size:10})}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:j??a})]}),n.length>0?(0,b.jsx)("div",{className:"px-3 pb-1 pt-2 text-[10px] font-medium uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Selected"}):null,e.filter(a=>a.value).map(c=>{let e=d.includes(c.value);return(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":e,className:`flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-xs transition-colors ${e?"bg-[var(--background)] font-medium text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--background)] hover:text-[var(--foreground)]"}`,onClick:()=>q(c.value),children:[(0,b.jsx)("span",{className:`flex h-4 w-4 shrink-0 items-center justify-center rounded border ${e?"border-blue-500 bg-blue-500 text-white":"border-[var(--card-border)]"}`,children:e?(0,b.jsx)(g.Check,{size:10}):null}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:c.label})]},`${a}-${c.value}`)})]}):null]})}function K({issue:a,participants:d,projectId:e,projectSlug:f,createRun:g,updateRun:h,onRunCreated:i}){let j=d[0],k=(0,c.useRef)(crypto.randomUUID()),{messages:l,setMessages:m,sendMessage:n,chatRuns:t}=(0,p.useGroupChat)(k.current),{processes:u,streaming:v}=(0,q.useProcessPolling)({workspaceId:k.current},{messages:l,setMessages:m}),x=new Set(["queued","running","awaiting_user","blocked"]),y=t.some(a=>x.has(a.status))||u.some(a=>"spawning"===a.state||"running"===a.state)?t.some(a=>"queued"===a.status)?"queued":"working":"ready",z=(0,c.useMemo)(()=>new Map(d.map(a=>[a.id,a])),[d]),A=(0,c.useRef)(!1),C=(0,c.useCallback)(async(b,c,k,l,m,n,o)=>{if(A.current)return;A.current=!0;let p=(m?d.find(a=>a.id===m):null)??j;if(p)try{let{promptPrefix:c}=w({issue:{identifier:a.identifier,title:a.title,status:a.status,assignee:a.assignee},project:f?{slug:f}:null}),d=c+(n?`
37
- ${n}`:""),j=await g({projectId:e??null,projectSlug:f??null,issueId:a.id,issueIdentifier:a.identifier,issueTitle:a.title,issueStatus:a.status,issueAssignee:a.assignee??null,agentId:p.id,agentName:p.name}),k=await fetch("/api/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:b,promptPrefix:d,threadId:j.threadId,activeParticipantIds:[p.id],projectSlug:f??void 0,routing:o})}),l=await k.json().catch(()=>({}));if(!k.ok||!l.chatRunId||!l.userMessageId)throw Error(l.error||"Failed to start chat session");await h(j.id,{chatRunId:l.chatRunId,rootMessageId:l.userMessageId}),i(j.id)}catch(a){console.error("Failed to create chat session:",a),A.current=!1,a instanceof Error&&window.alert(a.message)}},[a,d,j,e,f,g,h,i]);return(0,b.jsxs)("div",{className:"relative flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsxs)("header",{className:"flex h-12 shrink-0 items-center justify-between border-b border-[var(--card-border)] px-6",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,b.jsx)("span",{className:"shrink-0 font-mono text-sm text-[var(--muted-foreground)]",children:a.identifier}),(0,b.jsx)("div",{className:"h-1 w-1 shrink-0 rounded-full bg-[var(--card-border)]"}),(0,b.jsx)("span",{className:"truncate text-sm font-medium text-[var(--foreground)]",children:a.title})]}),(0,b.jsx)("span",{className:"shrink-0 rounded-md border border-[var(--card-border)] px-2 py-0.5 text-xs text-[var(--muted-foreground)]",children:a.status})]}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 py-6 pb-64",children:0===l.length?(0,b.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-2 text-[var(--muted-foreground)]",children:[(0,b.jsx)("span",{className:"text-sm",children:"Chat about this ticket"}),(0,b.jsx)("span",{className:"text-xs",children:"Your message will start a new session"})]}):(0,b.jsxs)("div",{className:"mx-auto max-w-4xl space-y-8",children:[l.map(a=>{let c=a.participantId?z.get(a.participantId):null,d=(0,s.stripMarkers)(a.content);return d.trim()?(0,b.jsxs)("div",{className:"flex gap-3",children:["user"===a.role?(0,b.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-[var(--app-shell-subtle,var(--card-bg))]",children:(0,b.jsx)(o.User,{className:"h-3.5 w-3.5 text-[var(--muted-foreground)]"})}):(0,b.jsx)("img",{src:D(a.participantId??"",c?.color),alt:c?.name??"Agent",className:"h-7 w-7 shrink-0 rounded-full object-cover"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1 flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-sm font-semibold text-[var(--foreground)]",children:"user"===a.role?"You":c?.name??"Agent"}),(0,b.jsx)("div",{className:"text-sm text-[var(--foreground)]",children:(0,b.jsx)(r.Markdown,{content:d,isUser:"user"===a.role})})]})]},a.id):null}),Object.entries(v).map(([a])=>{let c=z.get(a);return(0,b.jsxs)("div",{className:"flex items-center gap-3 text-sm text-[var(--muted-foreground)]",children:[(0,b.jsx)("img",{src:D(a,c?.color),alt:c?.name??"Agent",className:"h-7 w-7 shrink-0 rounded-full object-cover"}),c?.name??"Agent"," is thinking..."]},`stream-${a}`)})]})}),(0,b.jsx)("div",{className:"absolute bottom-3 left-3 right-3 p-2",children:(0,b.jsx)(B,{onSend:C,onStop:()=>{},participants:d,projectSlug:f??void 0,loading:"ready"!==y,commands:[],activityStatus:y,placeholder:`Ask about ${a.identifier}...`,initialPinnedParticipantId:j?.id})})]})}function L({run:a,participants:d}){let{messages:e,setMessages:f,sendMessage:g,loadHistory:h,stop:j}=(0,p.useGroupChat)(a.threadId),{processes:k,streaming:l,chatRuns:m}=(0,q.useProcessPolling)(a.rootMessageId?{workspaceId:a.threadId,threadId:a.rootMessageId}:{workspaceId:a.threadId},{messages:e,setMessages:f});(0,c.useEffect)(()=>{h()},[h,a.threadId]);let n=(0,c.useMemo)(()=>new Map(d.map(a=>[a.id,a])),[d]),t=new Set(["queued","running","awaiting_user","blocked"]),v=m.some(a=>t.has(a.status))||k.some(a=>"spawning"===a.state||"running"===a.state)?m.some(a=>"queued"===a.status)?"queued":"working":"ready",w=(0,c.useCallback)((b,c,e,f,h,i,j)=>{a.rootMessageId&&g(b,c,void 0,a.rootMessageId,e,void 0,(0,u.orderParticipantIds)(d.map(a=>a.id),h),a.projectSlug??void 0,i,j)},[d,a.projectSlug,a.rootMessageId,g]);return(0,b.jsxs)("div",{className:"relative flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsxs)("header",{className:"flex h-12 shrink-0 items-center justify-between border-b border-[var(--card-border)] px-6",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,b.jsx)("span",{className:"shrink-0 font-mono text-sm text-[var(--muted-foreground)]",children:a.issueIdentifier}),(0,b.jsx)("div",{className:"h-1 w-1 shrink-0 rounded-full bg-[var(--card-border)]"}),(0,b.jsx)("span",{className:"truncate text-sm font-medium text-[var(--foreground)]",children:a.issueTitle??""})]}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center gap-4",children:[(0,b.jsxs)("div",{className:`flex items-center gap-2 rounded-md border px-2.5 py-1 ${G[a.status]}`,children:[(0,b.jsx)("div",{className:`h-1.5 w-1.5 rounded-full ${H[a.status]}`}),(0,b.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wider",children:E(a.status)})]}),null!=a.durationMs&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5 text-sm text-[var(--muted-foreground)]",children:[(0,b.jsx)(i.Clock,{size:14}),(0,b.jsxs)("span",{children:[(a.durationMs/1e3).toFixed(1),"s"]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-[var(--card-border)] bg-[var(--card-bg)] px-2 py-1",children:[(0,b.jsx)("img",{src:D(a.agentId,n.get(a.agentId)?.color),alt:a.agentName,className:"h-5 w-5 rounded-full object-cover"}),(0,b.jsx)("span",{className:"pr-1 text-xs font-medium",children:a.agentName})]})]})]}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 py-6 pb-64",children:0===e.length?(0,b.jsx)("div",{className:"py-8 text-center text-xs text-[var(--muted-foreground)]",children:"queued"===a.status||"running"===a.status?"Starting run...":"No thread messages yet."}):(0,b.jsxs)("div",{className:"mx-auto max-w-4xl space-y-8",children:[e.map(c=>{let d=c.participantId?n.get(c.participantId):null,e=(0,s.stripMarkers)(c.content);if(!e.trim())return null;let f=c.participantId??a.agentId;return(0,b.jsxs)("div",{className:"flex gap-3",children:["user"===c.role?(0,b.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-[var(--app-shell-subtle,var(--card-bg))]",children:(0,b.jsx)(o.User,{className:"h-3.5 w-3.5 text-[var(--muted-foreground)]"})}):(0,b.jsx)("img",{src:D(f,d?.color),alt:d?.name??a.agentName,className:"h-7 w-7 shrink-0 rounded-full object-cover"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1 flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("div",{className:"flex items-center gap-2",children:"user"===c.role?(0,b.jsx)("span",{className:"text-sm font-semibold text-[var(--foreground)]",children:"You"}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-sm font-semibold",style:{color:d?.color??"var(--foreground)"},children:d?.name??a.agentName}),(0,b.jsx)("span",{className:"rounded bg-[var(--card-bg)] px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Agent"})]})}),(0,b.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:new Date(c.timestamp).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})]}),"user"===c.role?(0,b.jsx)("div",{className:"w-fit max-w-[85%] rounded-xl rounded-tl-sm border border-[var(--card-border)] bg-[var(--card-bg)] px-4 py-3 text-sm text-[var(--foreground)]",children:(0,b.jsx)(r.Markdown,{content:e,isUser:!0})}):(0,b.jsx)("div",{className:"text-sm text-[var(--foreground)]",children:(0,b.jsx)(r.Markdown,{content:e,isUser:!1})})]})]},c.id)}),Object.entries(l).filter(([,b])=>!a.rootMessageId||b.rootMessageId===a.rootMessageId).map(([c])=>{let d=n.get(c);return(0,b.jsxs)("div",{className:"flex items-center gap-3 text-sm text-[var(--muted-foreground)]",children:[(0,b.jsx)("img",{src:D(c,d?.color),alt:d?.name??a.agentName,className:"h-7 w-7 shrink-0 rounded-full object-cover"}),d?.name??a.agentName," is thinking..."]},`stream-${c}`)})]})}),(0,b.jsx)("div",{className:"absolute bottom-3 left-3 right-3 p-2",children:a.rootMessageId?(0,b.jsx)(B,{onSend:w,onStop:j,participants:d,projectSlug:a.projectSlug??void 0,loading:"ready"!==v,commands:[],activityStatus:v,placeholder:"Steer this run...",initialPinnedParticipantId:a.agentId}):(0,b.jsx)("div",{className:"px-2 py-1 text-xs text-[var(--muted-foreground)]",children:"Waiting for the run to start..."})})]})}function M({issue:a,selected:d,onSelect:e,onExecute:f}){let[h,i]=(0,c.useState)(!1),l=(0,c.useRef)(null);(0,c.useEffect)(()=>()=>{l.current&&window.clearTimeout(l.current)},[]);let m=(0,c.useCallback)(async b=>{if(b.stopPropagation(),a.url)try{await navigator.clipboard.writeText(a.url),i(!0),l.current&&window.clearTimeout(l.current),l.current=window.setTimeout(()=>{i(!1)},1500)}catch(a){console.error("Failed to copy Linear issue URL:",a),i(!1)}},[a.url]),n=F[a.status]??a.status.slice(0,6);return(0,b.jsxs)("div",{className:`group relative flex items-center gap-3 px-4 py-2.5 text-sm transition-colors ${d?"bg-[var(--card-bg)]":"hover:bg-[var(--card-bg)]/50"}`,onClick:e,role:"button",tabIndex:0,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),e())},children:[d&&(0,b.jsx)("div",{className:"absolute left-0 top-0 bottom-0 w-[3px] rounded-r-full bg-blue-500"}),(0,b.jsx)("span",{className:"w-24 shrink-0 whitespace-nowrap font-mono text-xs text-[var(--muted-foreground)]",children:a.identifier}),(0,b.jsx)("span",{className:`min-w-0 flex-1 truncate text-xs ${d?"font-medium text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,children:a.title}),(0,b.jsx)("span",{className:"shrink-0 text-xs text-[var(--muted-foreground)]",children:n}),(0,b.jsx)("button",{type:"button",className:`flex h-6 w-6 shrink-0 items-center justify-center rounded text-[var(--muted-foreground)] transition-all hover:bg-zinc-700 hover:text-[var(--foreground)] ${d?"opacity-100":"opacity-0 group-hover:opacity-100"} ${a.url?"":"cursor-not-allowed opacity-40 hover:bg-transparent hover:text-[var(--muted-foreground)]"}`,onClick:a=>{m(a)},title:h?"Copied ticket URL":"Copy ticket URL","aria-label":h?"Copied ticket URL":"Copy ticket URL",disabled:!a.url,children:h?(0,b.jsx)(g.Check,{size:10,className:"text-emerald-400"}):(0,b.jsx)(j,{size:10})}),(0,b.jsx)("button",{type:"button",className:`flex h-6 w-6 shrink-0 items-center justify-center rounded text-[var(--muted-foreground)] transition-all hover:bg-zinc-700 hover:text-[var(--foreground)] ${d?"opacity-100":"opacity-0 group-hover:opacity-100"}`,onClick:b=>{b.stopPropagation(),f(a,b)},title:"Execute with agent",children:(0,b.jsx)(k.Play,{size:10,className:"ml-0.5"})})]})}function N({projectId:a,projectSlug:d,initialShowSettings:e}){let{connected:f,loading:g,user:h,clis:i,mcpConfigured:j,connect:o,connectWithKey:p,disconnect:q,configureMcp:r}=function(){let[a,b]=(0,c.useState)(!1),[d,e]=(0,c.useState)(!0),[f,g]=(0,c.useState)(null),[h,i]=(0,c.useState)({claude:!1,codex:!1,gemini:!1}),[j,k]=(0,c.useState)({}),l=(0,c.useRef)(null),m=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/linear/mcp-setup"),b=await a.json();k(b.configured??{})}catch{}},[]),n=(0,c.useCallback)(async()=>{try{let[a,c]=await Promise.all([fetch("/api/linear/status"),fetch("/api/linear/mcp-setup")]),d=await a.json(),e=await c.json();return b(d.connected),g(d.user??null),i(d.clis??{claude:!1,codex:!1,gemini:!1}),k(e.configured??{}),d.connected}catch{return b(!1),!1}finally{e(!1)}},[]);(0,c.useEffect)(()=>(n(),()=>{l.current&&clearInterval(l.current)}),[n]);let o=(0,c.useCallback)(()=>{window.open("/api/linear/auth","_blank","noopener"),l.current&&clearInterval(l.current),l.current=setInterval(async()=>{await n()&&l.current&&(clearInterval(l.current),l.current=null)},2e3)},[n]),p=(0,c.useCallback)(async a=>{try{let b=await fetch("/api/linear/token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accessToken:a})});if(!b.ok){let a=await b.json().catch(()=>({}));return{ok:!1,error:a.error||"Failed to save token"}}return await n(),{ok:!0}}catch{return{ok:!1,error:"Failed to connect"}}},[n]);return{connected:a,loading:d,user:f,clis:h,mcpConfigured:j,connect:o,connectWithKey:p,disconnect:(0,c.useCallback)(async()=>{await fetch("/api/linear/status",{method:"DELETE"}),b(!1),g(null)},[]),configureMcp:(0,c.useCallback)(async a=>{try{let b=await fetch("/api/linear/mcp-setup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cli:a})});if(!b.ok){let a=await b.json().catch(()=>({}));return{ok:!1,error:a.error||"Failed to configure MCP"}}return await m(),{ok:!0}}catch{return{ok:!1,error:"Failed to configure MCP"}}},[m]),refresh:n}}(),[s,u]=(0,c.useState)(!1),[v,x]=(0,c.useState)(e??!1),[y,z]=(0,c.useState)(576),[B,F]=(0,c.useState)(224),[G,H]=(0,c.useState)(""),[N,O]=(0,c.useState)(""),[P,Q]=(0,c.useState)(!1),[R,S]=(0,c.useState)([]),[T,U]=(0,c.useState)([]),[V,W]=(0,c.useState)([]),[X,Y]=(0,c.useState)([]),[Z,$]=(0,c.useState)([]),[_,aa]=(0,c.useState)([]),[ab,ac]=(0,c.useState)(""),[ad,ae]=(0,c.useState)(""),[af,ag]=(0,c.useState)(null),[ah,ai]=(0,c.useState)(null),[aj,ak]=(0,c.useState)([]),[al,am]=(0,c.useState)(null),[an,ao]=(0,c.useState)(null),ap=(0,c.useRef)(null),aq=(0,c.useRef)(!0),ar=(0,c.useCallback)(a=>{H(a),ap.current&&clearTimeout(ap.current),ap.current=setTimeout(()=>O(a),300)},[]);(0,c.useEffect)(()=>()=>{ap.current&&clearTimeout(ap.current)},[]),(0,c.useEffect)(()=>{let a={...t};aq.current=!0,H(a.search),O(a.search),Y(a.assigneeIds),$(a.statuses),ae(a.teamId),ac(a.cycleId)},[d]),(0,c.useEffect)(()=>{if(aq.current){aq.current=!1;return}},[d,G,X,Z,ad,ab]),(0,c.useEffect)(()=>{if(!f)return;let a=!1;Q(!1);let b=new URLSearchParams;return d&&b.set("projectSlug",d),fetch(b.size>0?`/api/linear/options?${b.toString()}`:"/api/linear/options").then(a=>a.json()).then(b=>{a||(S(Array.isArray(b.assignees)?b.assignees:[]),U(Array.isArray(b.statuses)?b.statuses:[]),W(Array.isArray(b.teams)?b.teams:[]),aa(Array.isArray(b.cycles)?b.cycles:[]),Q(!0))}).catch(()=>{a||(S([]),U([]),W([]),aa([]),Q(!0))}),()=>{a=!0}},[f,d]),(0,c.useEffect)(()=>{if(!P)return;let a=X.filter(a=>R.some(b=>b.id===a));a.length!==X.length&&Y(a)},[R,P,X]),(0,c.useEffect)(()=>{if(!P)return;let a=Z.filter(a=>T.includes(a));a.length!==Z.length&&$(a)},[P,Z,T]),(0,c.useEffect)(()=>{if(P){if(V.length<=1&&ad)return void ae("");ad&&!V.some(a=>a.id===ad)&&ae("")}},[P,ad,V]),(0,c.useEffect)(()=>{P&&ab&&!_.some(a=>a.id===ab)&&ac("")},[_,P,ab]);let{issues:as,loading:at,hasMore:au,loadMore:av,refresh:aw}=function(a,b=!0,d={}){let[e,f]=(0,c.useState)([]),[g,h]=(0,c.useState)(!0),[i,j]=(0,c.useState)(null),[k,l]=(0,c.useState)(!1),m=(0,c.useRef)(i),n=(0,c.useRef)(!1);m.current=i,(0,c.useEffect)(()=>{n.current=!1},[d.projectSlug]);let o=(0,c.useCallback)(async(c,e=!1)=>{if(b){h(!0);try{let b=new URLSearchParams;if(a.teamId&&b.set("teamId",a.teamId),a.statuses?.length)for(let c of a.statuses)b.append("status",c);if(a.search&&b.set("search",a.search),a.assigneeIds?.length)for(let c of a.assigneeIds)b.append("assigneeId",c);else a.assignedToMe&&b.set("assignedToMe","true");a.cycleId&&b.set("cycleId",a.cycleId),c&&m.current&&b.set("cursor",m.current),d.projectSlug&&b.set("projectSlug",d.projectSlug),d.limit&&b.set("limit",String(d.limit)),e&&b.set("refresh","true");let g=await fetch(`/api/linear/issues?${b.toString()}`),h=await g.json(),i=h.issues??[];f(a=>c?[...a,...i]:i),j(h.pageInfo?.endCursor??null),l(h.pageInfo?.hasNextPage??!1),n.current=!0}catch{c||f([])}finally{h(!1)}}},[a.teamId,a.statuses,a.search,a.assigneeIds,a.assignedToMe,a.cycleId,b,d.projectSlug,d.limit]);return(0,c.useEffect)(()=>{j(null),o(!1,!n.current)},[o]),{issues:e,loading:g,hasMore:k,loadMore:(0,c.useCallback)(()=>o(!0),[o]),refresh:(0,c.useCallback)(()=>(j(null),o(!1,!0)),[o])}}((0,c.useMemo)(()=>({search:N||void 0,statuses:Z.length>0&&Z.length<T.length?Z:void 0,assigneeIds:X.length>0?X:void 0,teamId:ad||void 0,cycleId:ab||void 0}),[N,X,ab,Z,ad,T.length]),f,{projectSlug:d}),{runs:ax,loading:ay,createRun:az,updateRun:aA}=function(a,b){let[d,e]=(0,c.useState)([]),[f,g]=(0,c.useState)(!1),h=(0,c.useRef)(a??null);h.current=a??null;let i=(0,c.useCallback)(async()=>{let a=h.current?.trim();if(!a)return e([]),[];g(!0);try{let c=new URLSearchParams({issueId:a});b&&c.set("projectId",b);let d=await fetch(`/api/linear/runs?${c.toString()}`);if(!d.ok)throw Error(`Failed to fetch Linear runs: ${d.status}`);let f=await d.json(),g=Array.isArray(f.runs)?f.runs:[];return e(g),g}finally{g(!1)}},[b]);return(0,c.useEffect)(()=>{e([]),i()},[i,a]),(0,c.useEffect)(()=>{if(!a)return;let b=window.setInterval(()=>{i()},3e3);return()=>window.clearInterval(b)},[a,i]),{runs:d,loading:f,refresh:i,createRun:(0,c.useCallback)(async a=>{let b=await fetch("/api/linear/runs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok)throw Error((await b.json().catch(()=>({}))).error||`Failed to create Linear run: ${b.status}`);let c=(await b.json()).run;return e(a=>[c,...a.filter(a=>a.id!==c.id)]),c},[]),updateRun:(0,c.useCallback)(async(a,b)=>{let c=await fetch(`/api/linear/runs/${encodeURIComponent(a)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!c.ok)throw Error((await c.json().catch(()=>({}))).error||`Failed to update Linear run: ${c.status}`);let d=(await c.json()).run;return e(a=>a.map(a=>a.id===d.id?d:a)),d},[])}}(af?.id,a??null),aB=ax.find(a=>a.id===ah)??null,aC=(0,c.useMemo)(()=>R.map(a=>({value:a.id,label:a.name})),[R]),aD=(0,c.useMemo)(()=>T.map(a=>({value:a,label:a})),[T]),aE=(0,c.useMemo)(()=>[{value:"",label:"Workspace"},...V.map(a=>({value:a.id,label:a.name}))],[V]),aF=(0,c.useMemo)(()=>[{value:"",label:"Cycle"},..._.map(a=>({value:a.id,label:a.name||`Cycle ${a.number}`}))],[_]),aG=aD.length>0,aH=aF.length>1,aI=aE.length>2;(0,c.useEffect)(()=>{0===as.length?ag(null):ag(a=>a&&as.some(b=>b.id===a.id)?as.find(b=>b.id===a.id)??a:as[0]??null)},[as]),(0,c.useEffect)(()=>{0===ax.length?ai(null):ah&&ax.some(a=>a.id===ah)||ai(ax[0]?.id??null)},[ax,ah]),(0,c.useEffect)(()=>{let b=!1;return async function(){try{let c=await fetch("/api/participants"),d=c.ok?await c.json():[];if(!a){b||ak(d);return}let e=await fetch(`/api/projects/${encodeURIComponent(a)}/agents`);if(!e.ok){b||ak(d);return}let f=await e.json(),g=Array.isArray(f.agents)?f.agents.map(a=>a.agent_id).filter(a=>"string"==typeof a&&a.trim().length>0):[],h=new Map(g.map((a,b)=>[a,b])),i=d.filter(a=>h.has(a.id)).sort((a,b)=>(h.get(a.id)??Number.MAX_SAFE_INTEGER)-(h.get(b.id)??Number.MAX_SAFE_INTEGER));b||ak(i)}catch{b||ak([])}}(),()=>{b=!0}},[a]);let aJ=(0,c.useCallback)((a,b)=>{if(0===aj.length)return void window.alert("Add at least one agent to this project before running a Linear ticket.");if(1===aj.length)return void aK(a,aj[0]);let c=b?.currentTarget?.getBoundingClientRect();am(a),ao(c?{top:c.bottom+4,left:c.left}:{top:200,left:200})},[aj]),aK=(0,c.useCallback)(async(b,c)=>{am(null),ao(null);let e=null;try{ag(b),e=await az({projectId:a??null,projectSlug:d??null,issueId:b.id,issueIdentifier:b.identifier,issueTitle:b.title,issueStatus:b.status,issueAssignee:b.assignee,agentId:c.id,agentName:c.name}),ai(e.id);let{prompt:f,promptPrefix:g}=w({issue:{identifier:b.identifier,title:b.title,status:b.status,assignee:b.assignee},project:d?{slug:d}:null}),h=await fetch("/api/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:f,promptPrefix:g,threadId:e.threadId,activeParticipantIds:[c.id],projectSlug:d??void 0})}),i=await h.json().catch(()=>({}));if(!h.ok||!i.chatRunId||!i.userMessageId)throw Error(i.error||"Failed to start Linear run");await aA(e.id,{chatRunId:i.chatRunId,rootMessageId:i.userMessageId})}catch(a){console.error("Failed to execute Linear ticket:",a),e&&await aA(e.id,{status:"failed",error:a instanceof Error?a.message:String(a)}),a instanceof Error&&window.alert(a.message)}},[az,a,d,aA]),aL=(0,c.useRef)(null);if((0,c.useEffect)(()=>{let a=aL.current;if(!a||!au)return;let b=new IntersectionObserver(a=>{a[0]?.isIntersecting&&av()},{threshold:.1});return b.observe(a),()=>b.disconnect()},[au,av]),g)return(0,b.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:"Loading..."});let aM=f&&!s&&!Object.values(j).some(Boolean);return!f||aM?(0,b.jsx)(A,{connected:f,user:h,clis:i,mcpConfigured:j,onConnect:o,onConnectWithKey:p,onDisconnect:q,onConfigureMcp:r,onContinue:()=>u(!0)}):(0,b.jsxs)("div",{className:"relative flex h-full overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex shrink-0 flex-col border-r border-[var(--card-border)]",style:{width:y},children:[(0,b.jsxs)("div",{className:"shrink-0 border-b border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"flex h-12 items-center gap-2 px-3",children:[(0,b.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-[var(--card-border)] bg-[var(--background)] px-2.5 py-1.5 transition-all focus-within:border-[var(--muted-foreground)] focus-within:ring-1 focus-within:ring-[var(--muted-foreground)]",children:[(0,b.jsx)(m.Search,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)("input",{type:"text",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-[var(--muted-foreground)]",placeholder:"Search tickets...",value:G,onChange:a=>ar(a.target.value)})]}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)] disabled:cursor-not-allowed disabled:opacity-50",onClick:()=>void aw(),title:"Refresh tickets","aria-label":"Refresh tickets",disabled:at,children:(0,b.jsx)(l.RefreshCw,{size:16,className:at?"animate-spin":void 0})}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:()=>x(!0),title:"Linear settings",children:(0,b.jsx)(n.Settings,{size:16})})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pb-2",children:[aG?(0,b.jsx)(J,{label:"Status",values:Z,options:aD,activeClasses:"border-amber-500/30 bg-amber-500/10 text-amber-300",onChange:$,emptyLabel:"All statuses"}):null,(0,b.jsx)(J,{label:"Assignee",values:X,options:aC,activeClasses:"border-blue-500/30 bg-blue-500/10 text-blue-400",onChange:Y,emptyLabel:"All assignees"}),aI?(0,b.jsx)(I,{label:"Workspace",value:ad,options:aE,activeClasses:"border-emerald-500/30 bg-emerald-500/10 text-emerald-400",onChange:ae}):null,aH?(0,b.jsx)(I,{label:"Cycle",value:ab,options:aF,activeClasses:"border-purple-500/30 bg-purple-500/10 text-purple-400",onChange:ac}):null]})]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto",children:at&&0===as.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Loading tickets..."}):0===as.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"No tickets found."}):(0,b.jsxs)(b.Fragment,{children:[as.map(a=>(0,b.jsx)(M,{issue:a,selected:af?.id===a.id,onSelect:()=>ag(a),onExecute:aJ},a.id)),au?(0,b.jsx)("div",{ref:aL,className:"py-2 text-center text-xs text-[var(--muted-foreground)]",children:at?"Loading...":"Load more"}):null]})})]}),(0,b.jsx)(C,{onResize:a=>z(b=>Math.max(180,Math.min(600,b+a)))}),(0,b.jsxs)("div",{className:"flex shrink-0 flex-col border-r border-[var(--card-border)]",style:{width:B},children:[(0,b.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--card-border)] px-3 py-2",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold text-[var(--foreground)]",children:"Runs"}),af&&(0,b.jsxs)("button",{type:"button",className:"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:a=>aJ(af,a),title:"Run agent on selected ticket",children:[(0,b.jsx)(k.Play,{size:10}),(0,b.jsx)("span",{children:"Run now"})]})]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto",children:af?ay&&0===ax.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Loading runs..."}):0===ax.length?(0,b.jsxs)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:["No runs yet. Click ",(0,b.jsx)(k.Play,{size:10,className:"inline"})," to execute."]}):ax.map(a=>(0,b.jsxs)("button",{type:"button",className:`w-full px-3 py-2 text-left text-xs transition-colors ${aB?.id===a.id?"bg-[var(--card-bg)]":"hover:bg-[var(--card-bg)]"}`,onClick:()=>ai(a.id),children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-1",children:[(0,b.jsx)("span",{className:`font-medium ${{queued:"text-amber-500",running:"text-yellow-500",success:"text-green-500",failed:"text-red-500",cancelled:"text-[var(--muted-foreground)]"}[a.status]}`,children:E(a.status)}),(0,b.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:new Date(a.startedAt).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})]}),(0,b.jsx)("div",{className:"mt-0.5 truncate text-[10px] text-[var(--muted-foreground)]",children:a.agentName}),null!=a.durationMs?(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[(a.durationMs/1e3).toFixed(1),"s"]}):null]},a.id)):(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Select a ticket to see runs."})})]}),(0,b.jsx)(C,{onResize:a=>F(b=>Math.max(140,Math.min(500,b+a)))}),(0,b.jsx)("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:aB?(0,b.jsx)(L,{run:aB,participants:aj}):af&&aj.length>0?(0,b.jsx)(K,{issue:af,participants:aj,projectId:a,projectSlug:d,createRun:az,updateRun:aA,onRunCreated:a=>ai(a)},af.id):(0,b.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:af?"Add at least one agent to this project to chat.":"Select a ticket from the list."})}),v&&(0,b.jsx)("div",{className:"absolute inset-0 z-30 flex items-center justify-center bg-black/50",children:(0,b.jsxs)("div",{className:"relative w-full max-w-lg rounded-lg border border-[var(--card-border)] bg-[var(--background)] shadow-xl",children:[(0,b.jsx)("button",{type:"button",className:"absolute right-3 top-3 rounded p-1 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:()=>x(!1),children:"×"}),(0,b.jsx)("div",{className:"p-6",children:(0,b.jsx)(A,{connected:f,user:h,clis:i,mcpConfigured:j,onConnect:o,onConnectWithKey:p,onDisconnect:q,onConfigureMcp:r,onContinue:()=>x(!1)})})]})}),al&&an&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"fixed inset-0 z-40",onClick:()=>{am(null),ao(null)}}),(0,b.jsxs)("div",{className:"fixed z-50 min-w-[180px] rounded border border-[var(--card-border)] bg-[var(--card-bg)] py-1 shadow-lg",style:{top:an.top,left:an.left},children:[(0,b.jsx)("div",{className:"px-3 py-1.5 text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Pick an agent"}),aj.map(a=>(0,b.jsxs)("button",{type:"button",className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors hover:bg-[var(--card-bg)]",onClick:()=>void aK(al,a),children:[(0,b.jsx)("img",{src:D(a.id,a.color,20),alt:"",className:"h-5 w-5 shrink-0 rounded-full"}),(0,b.jsxs)("span",{className:"flex flex-col",children:[(0,b.jsx)("span",{className:"font-medium text-[var(--foreground)]",children:a.name}),a.title?(0,b.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:a.title}):null]})]},a.id))]})]})]})}function O({params:a}){let{slug:f}=(0,c.use)(a),g=(0,d.useSearchParams)(),{projects:h}=(0,e.useProjects)(),i=h.find(a=>a.slug===f),j="true"===g.get("settings");return(0,b.jsx)(N,{projectId:i?.id,projectSlug:i?.slug??f,initialShowSettings:j})}a.s(["default",()=>O],323860)}];
36
+ `;return{prompt:`Work on this Linear ticket: ${d} - ${e}`,promptPrefix:k}}function H(a){var b;let c,d,e=a.issue.identifier.trim()||"TICKET-ID",f=a.issue.title.trim()||"Untitled ticket",g=String(a.issue.status??"").trim()||"Unknown",h=String(a.issue.assignee??"").trim()||"Unassigned",i=function(a){let b=String(a?.slug??"").trim();if(b)return F(b,"project");let c=String(a?.name??"").trim();return c?F(c,"project"):"project"}(a.project),j=String(a.project?.name??"").trim()||i,k=String(a.runtime?.knowledgeBaseRoot??"").trim()||`~/.agx/vault/${i}`,l=String(a.runtime?.issueKnowledgePath??"").trim()||`${k}/issues/${e}/`,m=String(a.runtime?.isolatedWorktreePath??"").trim()||`/tmp/agx-${F(e,"ticket")}`;return{issue:{identifier:e,title:f,status:g,assignee:h},project:{name:j,slug:i,label:(b=a.project,c=String(b?.name??"").trim(),d=String(b?.slug??"").trim(),c&&d?`${c} (${d})`:c||d||"current project"),repos:a.project?.repos?[...a.project.repos]:[]},runtime:{knowledgeBaseRoot:k,issueKnowledgePath:l,isolatedWorktreePath:m}}}var I=a.i(860614),J=a.i(596221);let K=[{id:"claude",label:"Claude Code",icon:"🟣"},{id:"codex",label:"Codex",icon:"⚫"},{id:"gemini",label:"Gemini CLI",icon:"🔵"}];function L({connected:a,user:d,clis:e,mcpConfigured:f,onConnect:h,onConnectWithKey:i,onDisconnect:j,onConfigureMcp:k,onContinue:l}){let[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(null),[q,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)(null),[u,v]=(0,c.useState)(null),w=async()=>{if(!m.trim())return;r(!0),p(null);let a=await i(m.trim());r(!1),a.ok||p(a.error||"Failed to connect")},x=async a=>{t(a),v(null);let b=await k(a);t(null),b.ok||v(b.error||"Failed to configure")},y=K.filter(a=>e[a.id]).some(a=>f[a.id]);return(0,b.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,b.jsxs)("div",{className:"w-full max-w-md space-y-6 px-6",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[a&&(0,b.jsx)("div",{className:"flex h-4 w-4 items-center justify-center rounded-full bg-green-500/20",children:(0,b.jsx)(g.Check,{size:10,className:"text-green-500"})}),(0,b.jsx)("h2",{className:"text-sm font-semibold text-[var(--foreground)]",children:"Connect to Linear"})]}),(0,b.jsx)("p",{className:"mt-1 text-xs text-[var(--muted-foreground)]",children:"Connect your workspace to browse tickets and execute them with agents."}),(0,b.jsx)("div",{className:"mt-3 space-y-3",children:a?(0,b.jsxs)("div",{className:"flex items-center justify-between rounded-md border border-[var(--card-border)] px-3 py-2",children:[(0,b.jsxs)("div",{className:"text-xs text-[var(--foreground)]",children:["Connected as"," ",(0,b.jsx)("span",{className:"font-medium",children:d?.name})]}),(0,b.jsx)("button",{type:"button",onClick:j,className:"text-[10px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:"Disconnect"})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("button",{type:"button",onClick:h,className:"w-full rounded-md bg-[var(--foreground)] px-4 py-2 text-xs font-medium text-[var(--card-bg)] transition-opacity hover:opacity-90",children:"Connect with Linear"}),(0,b.jsxs)("div",{className:"flex items-center gap-2 text-[10px] text-[var(--muted-foreground)]",children:[(0,b.jsx)("div",{className:"flex-1 border-t border-[var(--card-border)]"}),"or",(0,b.jsx)("div",{className:"flex-1 border-t border-[var(--card-border)]"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-[10px] text-[var(--muted-foreground)] block mb-1",children:"Personal API key"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("input",{type:"password",value:m,onChange:a=>{n(a.target.value),p(null)},onKeyDown:a=>{"Enter"===a.key&&w()},placeholder:"lin_api_...",className:"flex-1 rounded-md border border-[var(--card-border)] bg-transparent px-3 py-1.5 text-xs text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:ring-1 focus:ring-[var(--foreground)]"}),(0,b.jsx)("button",{type:"button",onClick:w,disabled:!m.trim()||q,className:"rounded-md border border-[var(--card-border)] px-3 py-1.5 text-xs text-[var(--foreground)] transition-colors hover:bg-[var(--card-border)] disabled:opacity-40",children:q?"...":"Save"})]}),o&&(0,b.jsx)("p",{className:"mt-1 text-[10px] text-red-400",children:o}),(0,b.jsxs)("a",{href:"https://linear.app/settings/api",target:"_blank",rel:"noopener noreferrer",className:"mt-1 inline-flex items-center gap-1 text-[10px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:["Generate at linear.app/settings/api",(0,b.jsx)(I.ExternalLink,{size:8})]})]})]})})]}),a&&(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-[var(--foreground)]",children:"Configure MCP"}),(0,b.jsx)("p",{className:"mt-1 text-xs text-[var(--muted-foreground)]",children:"Add the Linear MCP server to your AI tools so agents can read and update tickets during execution."}),(0,b.jsxs)("div",{className:"mt-3 space-y-1",children:[K.map(a=>{let c=e[a.id],d=f[a.id],h=s===a.id;return(0,b.jsxs)("div",{className:`flex items-center justify-between rounded-md border border-[var(--card-border)] px-3 py-2 ${!c?"opacity-40":""}`,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,b.jsx)("span",{children:a.icon}),(0,b.jsx)("span",{className:"text-[var(--foreground)]",children:a.label})]}),c?d?(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-green-500",children:[(0,b.jsx)(g.Check,{size:10}),"Configured"]}):(0,b.jsx)("button",{type:"button",onClick:()=>x(a.id),disabled:h,className:"flex items-center gap-1 rounded px-2 py-0.5 text-[10px] text-[var(--foreground)] border border-[var(--card-border)] hover:bg-[var(--card-border)] transition-colors disabled:opacity-50",children:h?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(J.Loader2,{size:10,className:"animate-spin"}),"Configuring..."]}):"Configure"}):(0,b.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:"Not installed"})]},a.id)}),u&&(0,b.jsx)("p",{className:"mt-1 text-[10px] text-red-400",children:u})]}),(0,b.jsx)("button",{type:"button",onClick:l,className:"mt-4 w-full rounded-md bg-[var(--foreground)] px-4 py-2 text-xs font-medium text-[var(--card-bg)] transition-opacity hover:opacity-90",children:y?"Continue":"Skip for now"})]})]})})}let M=(0,f.default)(async()=>{},{loadableGenerated:{modules:[895214]},ssr:!1});function N({onResize:a}){let d=(0,c.useRef)(!1),e=(0,c.useRef)(0);return(0,c.useEffect)(()=>{if(!d.current)return;let b=b=>{let c=b.clientX-e.current;e.current=b.clientX,a(c)},c=()=>{d.current=!1,document.body.style.cursor="",document.body.style.userSelect="",window.removeEventListener("mousemove",b),window.removeEventListener("mouseup",c)};return window.addEventListener("mousemove",b),window.addEventListener("mouseup",c),()=>{window.removeEventListener("mousemove",b),window.removeEventListener("mouseup",c)}}),(0,b.jsx)("div",{className:"group relative z-10 w-0 shrink-0 cursor-col-resize",onMouseDown:a=>{a.preventDefault(),d.current=!0,e.current=a.clientX,document.body.style.cursor="col-resize",document.body.style.userSelect="none"},children:(0,b.jsx)("div",{className:"absolute inset-y-0 -left-0.5 w-1 transition-colors group-hover:bg-[var(--primary)]/40"})})}function O(a,b,c=20){let d=b?b.replace("#",""):"e2e8f0";return`https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${encodeURIComponent(a)}&size=${c}&backgroundColor=${d}`}function P(a){switch(a){case"queued":return"queued";case"running":return"running";case"success":return"success";case"failed":return"failed";case"cancelled":return"cancelled";default:return a}}let Q={"In Progress":"In Prog","In Review":"Review",Backlog:"Backlog",Todo:"Todo",Done:"Done",Cancelled:"Cancl."},R={queued:"bg-amber-500/10 border-amber-500/20 text-amber-400",running:"bg-yellow-500/10 border-yellow-500/20 text-yellow-400",success:"bg-emerald-500/10 border-emerald-500/20 text-emerald-400",failed:"bg-red-500/10 border-red-500/20 text-red-400",cancelled:"bg-zinc-500/10 border-zinc-500/20 text-zinc-400"},S={queued:"bg-amber-400",running:"bg-yellow-400",success:"bg-emerald-400",failed:"bg-red-400",cancelled:"bg-zinc-400"};function T({label:a,value:c,options:d,activeClasses:e,onChange:f}){let g=c.trim().length>0;return(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)("select",{"aria-label":a,className:`max-w-[160px] appearance-none rounded-full border bg-transparent px-2.5 py-0.5 pr-6 text-[11px] font-medium outline-none transition-colors ${g?e:"border-[var(--card-border)] text-[var(--muted-foreground)] hover:bg-[var(--card-bg)]"}`,value:c,onChange:a=>f(a.target.value),children:d.map(c=>(0,b.jsx)("option",{value:c.value,children:c.label},`${a}-${c.value||"all"}`))}),(0,b.jsx)(h.ChevronDown,{size:12,className:"pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 text-current"})]})}function U({label:a,values:d,options:e,activeClasses:f,onChange:i,emptyLabel:j}){let[k,l]=(0,c.useState)(!1),m=(0,c.useRef)(null),n=e.filter(a=>a.value&&d.includes(a.value)),o=n.length>0,p=(()=>{if(0===n.length||n.length===e.length)return j??a;if(1===n.length)return n[0]?.label??j??a;let b=a.toLowerCase();return`${n.length} ${b}${b.endsWith("s")?"es":"s"}`})();(0,c.useEffect)(()=>{if(!k)return;let a=a=>{m.current&&!m.current.contains(a.target)&&l(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[k]);let q=(0,c.useCallback)(a=>{a?i(d.includes(a)?d.filter(b=>b!==a):[...d,a]):i([])},[i,d]);return(0,b.jsxs)("div",{className:"relative",ref:m,children:[(0,b.jsxs)("button",{type:"button","aria-label":a,"aria-haspopup":"listbox","aria-expanded":k,className:`flex max-w-[180px] items-center gap-1 rounded-full border px-2.5 py-0.5 text-[11px] font-medium transition-colors ${o?f:"border-[var(--card-border)] text-[var(--muted-foreground)] hover:bg-[var(--card-bg)]"}`,onClick:()=>l(a=>!a),children:[(0,b.jsx)("span",{className:"max-w-[132px] truncate",children:p}),(0,b.jsx)(h.ChevronDown,{size:12,className:`shrink-0 transition-transform ${k?"rotate-180":""}`})]}),k?(0,b.jsxs)("div",{role:"listbox","aria-label":`${a} options`,"aria-multiselectable":"true",className:"absolute left-0 top-full z-50 mt-1 min-w-[240px] overflow-hidden rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] p-1 shadow-lg backdrop-blur-sm",children:[(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":!o,className:`flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-xs transition-colors ${!o?"bg-[var(--background)] font-medium text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--background)] hover:text-[var(--foreground)]"}`,onClick:()=>i([]),children:[(0,b.jsx)("span",{className:`flex h-4 w-4 shrink-0 items-center justify-center rounded-full border ${!o?"border-blue-500 bg-blue-500 text-white":"border-[var(--card-border)]"}`,children:o?null:(0,b.jsx)(g.Check,{size:10})}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:j??a})]}),n.length>0?(0,b.jsx)("div",{className:"px-3 pb-1 pt-2 text-[10px] font-medium uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Selected"}):null,e.filter(a=>a.value).map(c=>{let e=d.includes(c.value);return(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":e,className:`flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-xs transition-colors ${e?"bg-[var(--background)] font-medium text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--background)] hover:text-[var(--foreground)]"}`,onClick:()=>q(c.value),children:[(0,b.jsx)("span",{className:`flex h-4 w-4 shrink-0 items-center justify-center rounded border ${e?"border-blue-500 bg-blue-500 text-white":"border-[var(--card-border)]"}`,children:e?(0,b.jsx)(g.Check,{size:10}):null}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:c.label})]},`${a}-${c.value}`)})]}):null]})}function V({issue:a,participants:d,projectId:e,projectSlug:f,createRun:g,updateRun:h,onRunCreated:i}){let j=d[0],k=(0,c.useRef)(crypto.randomUUID()),{messages:l,setMessages:m,sendMessage:n,chatRuns:o}=(0,s.useGroupChat)(k.current),{processes:p,streaming:r}=(0,t.useProcessPolling)({workspaceId:k.current},{messages:l,setMessages:m}),v=new Set(["queued","running","awaiting_user","blocked"]),w=o.some(a=>v.has(a.status))||p.some(a=>"spawning"===a.state||"running"===a.state)?o.some(a=>"queued"===a.status)?"queued":"working":"ready",x=(0,c.useMemo)(()=>new Map(d.map(a=>[a.id,a])),[d]),y=(0,c.useRef)(!1),z=(0,c.useCallback)(async(b,c,k,l,m,n,o)=>{if(y.current)return;y.current=!0;let p=(m?d.find(a=>a.id===m):null)??j;if(p)try{let{promptPrefix:c}=G({issue:{identifier:a.identifier,title:a.title,status:a.status,assignee:a.assignee},project:f?{slug:f}:null}),d=c+(n?`
37
+ ${n}`:""),j=await g({projectId:e??null,projectSlug:f??null,issueId:a.id,issueIdentifier:a.identifier,issueTitle:a.title,issueStatus:a.status,issueAssignee:a.assignee??null,agentId:p.id,agentName:p.name}),k=await fetch("/api/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:b,promptPrefix:d,threadId:j.threadId,activeParticipantIds:[p.id],projectSlug:f??void 0,routing:o})}),l=await k.json().catch(()=>({}));if(!k.ok||!l.chatRunId||!l.userMessageId)throw Error(l.error||"Failed to start chat session");await h(j.id,{chatRunId:l.chatRunId,rootMessageId:l.userMessageId}),i(j.id)}catch(a){console.error("Failed to create chat session:",a),y.current=!1,a instanceof Error&&window.alert(a.message)}},[a,d,j,e,f,g,h,i]);return(0,b.jsxs)("div",{className:"relative flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsxs)("header",{className:"flex h-12 shrink-0 items-center justify-between border-b border-[var(--card-border)] px-6",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,b.jsx)("span",{className:"shrink-0 font-mono text-sm text-[var(--muted-foreground)]",children:a.identifier}),(0,b.jsx)("div",{className:"h-1 w-1 shrink-0 rounded-full bg-[var(--card-border)]"}),(0,b.jsx)("span",{className:"truncate text-sm font-medium text-[var(--foreground)]",children:a.title})]}),(0,b.jsx)("span",{className:"shrink-0 rounded-md border border-[var(--card-border)] px-2 py-0.5 text-xs text-[var(--muted-foreground)]",children:a.status})]}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 py-6 pb-64",children:0===l.length?(0,b.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-2 text-[var(--muted-foreground)]",children:[(0,b.jsx)("span",{className:"text-sm",children:"Chat about this ticket"}),(0,b.jsx)("span",{className:"text-xs",children:"Your message will start a new session"})]}):(0,b.jsxs)("div",{className:"mx-auto max-w-4xl space-y-8",children:[l.map(a=>{let c=a.participantId?x.get(a.participantId):null,d=(0,B.stripMarkers)(a.content);return d.trim()?(0,b.jsxs)("div",{className:"flex gap-3",children:["user"===a.role?(0,b.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-[var(--app-shell-subtle,var(--card-bg))]",children:(0,b.jsx)(q.User,{className:"h-3.5 w-3.5 text-[var(--muted-foreground)]"})}):(0,b.jsx)("img",{src:O(a.participantId??"",c?.color),alt:c?.name??"Agent",className:"h-7 w-7 shrink-0 rounded-full object-cover"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1 flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-sm font-semibold text-[var(--foreground)]",children:"user"===a.role?"You":c?.name??"Agent"}),(0,b.jsx)("div",{className:"text-sm text-[var(--foreground)]",children:(0,b.jsx)(u.Markdown,{content:d,isUser:"user"===a.role})})]})]},a.id):null}),Object.entries(r).map(([a])=>{let c=x.get(a);return(0,b.jsxs)("div",{className:"flex items-center gap-3 text-sm text-[var(--muted-foreground)]",children:[(0,b.jsx)("img",{src:O(a,c?.color),alt:c?.name??"Agent",className:"h-7 w-7 shrink-0 rounded-full object-cover"}),c?.name??"Agent"," is thinking..."]},`stream-${a}`)})]})}),(0,b.jsx)("div",{className:"absolute bottom-3 left-3 right-3 p-2",children:(0,b.jsx)(M,{onSend:z,onStop:()=>{},participants:d,projectSlug:f??void 0,loading:"ready"!==w,commands:[],activityStatus:w,placeholder:`Ask about ${a.identifier}...`,initialPinnedParticipantId:j?.id})})]})}function W({run:a,participants:d}){let{messages:e,setMessages:f,sendMessage:g,loadHistory:h,stop:j}=(0,s.useGroupChat)(a.threadId),{processes:k,streaming:l,chatRuns:m}=(0,t.useProcessPolling)(a.rootMessageId?{workspaceId:a.threadId,threadId:a.rootMessageId}:{workspaceId:a.threadId},{messages:e,setMessages:f});(0,c.useEffect)(()=>{h()},[h,a.threadId]);let n=(0,c.useMemo)(()=>new Map(d.map(a=>[a.id,a])),[d]),o=new Set(["queued","running","awaiting_user","blocked"]),p=m.some(a=>o.has(a.status))||k.some(a=>"spawning"===a.state||"running"===a.state)?m.some(a=>"queued"===a.status)?"queued":"working":"ready",r=(0,c.useCallback)((b,c,e,f,h,i,j)=>{a.rootMessageId&&g(b,c,void 0,a.rootMessageId,e,void 0,(0,E.orderParticipantIds)(d.map(a=>a.id),h),a.projectSlug??void 0,i,j)},[d,a.projectSlug,a.rootMessageId,g]);return(0,b.jsxs)("div",{className:"relative flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsxs)("header",{className:"flex h-12 shrink-0 items-center justify-between border-b border-[var(--card-border)] px-6",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,b.jsx)("span",{className:"shrink-0 font-mono text-sm text-[var(--muted-foreground)]",children:a.issueIdentifier}),(0,b.jsx)("div",{className:"h-1 w-1 shrink-0 rounded-full bg-[var(--card-border)]"}),(0,b.jsx)("span",{className:"truncate text-sm font-medium text-[var(--foreground)]",children:a.issueTitle??""})]}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center gap-4",children:[(0,b.jsxs)("div",{className:`flex items-center gap-2 rounded-md border px-2.5 py-1 ${R[a.status]}`,children:[(0,b.jsx)("div",{className:`h-1.5 w-1.5 rounded-full ${S[a.status]}`}),(0,b.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wider",children:P(a.status)})]}),null!=a.durationMs&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5 text-sm text-[var(--muted-foreground)]",children:[(0,b.jsx)(i.Clock,{size:14}),(0,b.jsxs)("span",{children:[(a.durationMs/1e3).toFixed(1),"s"]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-[var(--card-border)] bg-[var(--card-bg)] px-2 py-1",children:[(0,b.jsx)("img",{src:O(a.agentId,n.get(a.agentId)?.color),alt:a.agentName,className:"h-5 w-5 rounded-full object-cover"}),(0,b.jsx)("span",{className:"pr-1 text-xs font-medium",children:a.agentName})]})]})]}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 py-6 pb-64",children:0===e.length?(0,b.jsx)("div",{className:"py-8 text-center text-xs text-[var(--muted-foreground)]",children:"queued"===a.status||"running"===a.status?"Starting run...":"No thread messages yet."}):(0,b.jsxs)("div",{className:"mx-auto max-w-4xl space-y-8",children:[e.map(c=>{let d=c.participantId?n.get(c.participantId):null,e=(0,B.stripMarkers)(c.content);if(!e.trim())return null;let f=c.participantId??a.agentId;return(0,b.jsxs)("div",{className:"flex gap-3",children:["user"===c.role?(0,b.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-[var(--app-shell-subtle,var(--card-bg))]",children:(0,b.jsx)(q.User,{className:"h-3.5 w-3.5 text-[var(--muted-foreground)]"})}):(0,b.jsx)("img",{src:O(f,d?.color),alt:d?.name??a.agentName,className:"h-7 w-7 shrink-0 rounded-full object-cover"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1 flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("div",{className:"flex items-center gap-2",children:"user"===c.role?(0,b.jsx)("span",{className:"text-sm font-semibold text-[var(--foreground)]",children:"You"}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-sm font-semibold",style:{color:d?.color??"var(--foreground)"},children:d?.name??a.agentName}),(0,b.jsx)("span",{className:"rounded bg-[var(--card-bg)] px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Agent"})]})}),(0,b.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:new Date(c.timestamp).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})]}),"user"===c.role?(0,b.jsx)("div",{className:"w-fit max-w-[85%] rounded-xl rounded-tl-sm border border-[var(--card-border)] bg-[var(--card-bg)] px-4 py-3 text-sm text-[var(--foreground)]",children:(0,b.jsx)(u.Markdown,{content:e,isUser:!0})}):(0,b.jsx)("div",{className:"text-sm text-[var(--foreground)]",children:(0,b.jsx)(u.Markdown,{content:e,isUser:!1})})]})]},c.id)}),Object.entries(l).filter(([,b])=>!a.rootMessageId||b.rootMessageId===a.rootMessageId).map(([c])=>{let d=n.get(c);return(0,b.jsxs)("div",{className:"flex items-center gap-3 text-sm text-[var(--muted-foreground)]",children:[(0,b.jsx)("img",{src:O(c,d?.color),alt:d?.name??a.agentName,className:"h-7 w-7 shrink-0 rounded-full object-cover"}),d?.name??a.agentName," is thinking..."]},`stream-${c}`)})]})}),(0,b.jsx)("div",{className:"absolute bottom-3 left-3 right-3 p-2",children:a.rootMessageId?(0,b.jsx)(M,{onSend:r,onStop:j,participants:d,projectSlug:a.projectSlug??void 0,loading:"ready"!==p,commands:[],activityStatus:p,placeholder:"Steer this run...",initialPinnedParticipantId:a.agentId}):(0,b.jsx)("div",{className:"px-2 py-1 text-xs text-[var(--muted-foreground)]",children:"Waiting for the run to start..."})})]})}function X({issue:a,selected:d,onSelect:e,onExecute:f}){let[h,i]=(0,c.useState)(!1),j=(0,c.useRef)(null);(0,c.useEffect)(()=>()=>{j.current&&window.clearTimeout(j.current)},[]);let k=(0,c.useCallback)(async b=>{if(b.stopPropagation(),a.url)try{await navigator.clipboard.writeText(a.url),i(!0),j.current&&window.clearTimeout(j.current),j.current=window.setTimeout(()=>{i(!1)},1500)}catch(a){console.error("Failed to copy Linear issue URL:",a),i(!1)}},[a.url]),n=Q[a.status]??a.status.slice(0,6);return(0,b.jsxs)("div",{className:`group relative flex cursor-pointer items-center gap-3 px-4 py-2.5 text-sm transition-colors ${d?"bg-[var(--card-bg)]":"hover:bg-[var(--card-bg)]/50"}`,onClick:e,role:"button",tabIndex:0,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),e())},children:[d&&(0,b.jsx)("div",{className:"absolute left-0 top-0 bottom-0 w-[3px] rounded-r-full bg-blue-500"}),(0,b.jsx)("span",{className:"w-24 shrink-0 whitespace-nowrap font-mono text-xs text-[var(--muted-foreground)]",children:a.identifier}),(0,b.jsx)("span",{className:`min-w-0 flex-1 truncate text-xs ${d?"font-medium text-[var(--foreground)]":"text-[var(--muted-foreground)]"}`,children:a.title}),(0,b.jsx)("span",{className:"shrink-0 text-xs text-[var(--muted-foreground)]",children:n}),(0,b.jsx)("button",{type:"button",className:`flex h-6 w-6 shrink-0 items-center justify-center rounded text-[var(--muted-foreground)] transition-all hover:bg-zinc-700 hover:text-[var(--foreground)] ${d?"opacity-100":"opacity-0 group-hover:opacity-100"} ${a.url?"":"cursor-not-allowed opacity-40 hover:bg-transparent hover:text-[var(--muted-foreground)]"}`,onClick:a=>{k(a)},title:h?"Copied ticket URL":"Copy ticket URL","aria-label":h?"Copied ticket URL":"Copy ticket URL",disabled:!a.url,children:h?(0,b.jsx)(g.Check,{size:10,className:"text-emerald-400"}):(0,b.jsx)(l,{size:10})}),(0,b.jsx)("button",{type:"button",className:`flex h-6 w-6 shrink-0 items-center justify-center rounded text-[var(--muted-foreground)] transition-all hover:bg-zinc-700 hover:text-[var(--foreground)] ${d?"opacity-100":"opacity-0 group-hover:opacity-100"}`,onClick:b=>{b.stopPropagation(),f(a,b)},title:"Execute with agent",children:(0,b.jsx)(m.Play,{size:10,className:"ml-0.5"})})]})}function Y({projectId:a,projectSlug:d,initialShowSettings:e}){let{connected:f,loading:g,user:h,clis:i,mcpConfigured:k,connect:l,connectWithKey:q,disconnect:s,configureMcp:t}=function(){let[a,b]=(0,c.useState)(!1),[d,e]=(0,c.useState)(!0),[f,g]=(0,c.useState)(null),[h,i]=(0,c.useState)({claude:!1,codex:!1,gemini:!1}),[j,k]=(0,c.useState)({}),l=(0,c.useRef)(null),m=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/linear/mcp-setup"),b=await a.json();k(b.configured??{})}catch{}},[]),n=(0,c.useCallback)(async()=>{try{let[a,c]=await Promise.all([fetch("/api/linear/status"),fetch("/api/linear/mcp-setup")]),d=await a.json(),e=await c.json();return b(d.connected),g(d.user??null),i(d.clis??{claude:!1,codex:!1,gemini:!1}),k(e.configured??{}),d.connected}catch{return b(!1),!1}finally{e(!1)}},[]);(0,c.useEffect)(()=>(n(),()=>{l.current&&clearInterval(l.current)}),[n]);let o=(0,c.useCallback)(()=>{window.open("/api/linear/auth","_blank","noopener"),l.current&&clearInterval(l.current),l.current=setInterval(async()=>{await n()&&l.current&&(clearInterval(l.current),l.current=null)},2e3)},[n]),p=(0,c.useCallback)(async a=>{try{let b=await fetch("/api/linear/token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accessToken:a})});if(!b.ok){let a=await b.json().catch(()=>({}));return{ok:!1,error:a.error||"Failed to save token"}}return await n(),{ok:!0}}catch{return{ok:!1,error:"Failed to connect"}}},[n]);return{connected:a,loading:d,user:f,clis:h,mcpConfigured:j,connect:o,connectWithKey:p,disconnect:(0,c.useCallback)(async()=>{await fetch("/api/linear/status",{method:"DELETE"}),b(!1),g(null)},[]),configureMcp:(0,c.useCallback)(async a=>{try{let b=await fetch("/api/linear/mcp-setup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cli:a})});if(!b.ok){let a=await b.json().catch(()=>({}));return{ok:!1,error:a.error||"Failed to configure MCP"}}return await m(),{ok:!0}}catch{return{ok:!1,error:"Failed to configure MCP"}}},[m]),refresh:n}}(),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(e??!1),[y,z]=(0,c.useState)(!1),[B,E]=(0,c.useState)(()=>(0,D.loadLinearTicketPanelWidth)()||576),[F,I]=(0,c.useState)(()=>(0,D.loadLinearRunsPanelWidth)()||224),[J,K]=(0,c.useState)(""),[M,Q]=(0,c.useState)(""),[R,S]=(0,c.useState)(!1),[Y,Z]=(0,c.useState)([]),[$,_]=(0,c.useState)([]),[aa,ab]=(0,c.useState)([]),[ac,ad]=(0,c.useState)([]),[ae,af]=(0,c.useState)([]),[ag,ah]=(0,c.useState)([]),[ai,aj]=(0,c.useState)(""),[ak,al]=(0,c.useState)(""),[am,an]=(0,c.useState)(null),[ao,ap]=(0,c.useState)(null),[aq,ar]=(0,c.useState)([]),[as,at]=(0,c.useState)(null),[au,av]=(0,c.useState)(null),aw=(0,c.useRef)(null),ax=(0,c.useRef)(!0),ay=(0,c.useRef)(null),az=(0,c.useRef)(null),aA=(0,c.useCallback)(a=>{K(a),aw.current&&clearTimeout(aw.current),aw.current=setTimeout(()=>Q(a),300)},[]);(0,c.useEffect)(()=>()=>{aw.current&&clearTimeout(aw.current)},[]),(0,c.useEffect)(()=>{let a={...C};ax.current=!0,K(a.search),Q(a.search),ad(a.assigneeIds),af(a.statuses),al(a.teamId),aj(a.cycleId)},[d]),(0,c.useEffect)(()=>{if(ax.current){ax.current=!1;return}},[d,J,ac,ae,ak,ai]),(0,c.useEffect)(()=>{if(!f)return;let a=!1;S(!1);let b=new URLSearchParams;return d&&b.set("projectSlug",d),fetch(b.size>0?`/api/linear/options?${b.toString()}`:"/api/linear/options").then(a=>a.json()).then(b=>{a||(Z(Array.isArray(b.assignees)?b.assignees:[]),_(Array.isArray(b.statuses)?b.statuses:[]),ab(Array.isArray(b.teams)?b.teams:[]),ah(Array.isArray(b.cycles)?b.cycles:[]),S(!0))}).catch(()=>{a||(Z([]),_([]),ab([]),ah([]),S(!0))}),()=>{a=!0}},[f,d]),(0,c.useEffect)(()=>{if(!R)return;let a=ac.filter(a=>Y.some(b=>b.id===a));a.length!==ac.length&&ad(a)},[Y,R,ac]),(0,c.useEffect)(()=>{if(!R)return;let a=ae.filter(a=>$.includes(a));a.length!==ae.length&&af(a)},[R,ae,$]),(0,c.useEffect)(()=>{if(R){if(aa.length<=1&&ak)return void al("");ak&&!aa.some(a=>a.id===ak)&&al("")}},[R,ak,aa]),(0,c.useEffect)(()=>{R&&ai&&!ag.some(a=>a.id===ai)&&aj("")},[ag,R,ai]);let{issues:aB,loading:aC,hasMore:aD,loadMore:aE,refresh:aF}=function(a,b=!0,d={}){let[e,f]=(0,c.useState)([]),[g,h]=(0,c.useState)(!0),[i,j]=(0,c.useState)(null),[k,l]=(0,c.useState)(!1),m=(0,c.useRef)(i),n=(0,c.useRef)(!1);m.current=i,(0,c.useEffect)(()=>{n.current=!1},[d.projectSlug]);let o=(0,c.useCallback)(async(c,e=!1)=>{if(b){h(!0);try{let b=new URLSearchParams;if(a.teamId&&b.set("teamId",a.teamId),a.statuses?.length)for(let c of a.statuses)b.append("status",c);if(a.search&&b.set("search",a.search),a.assigneeIds?.length)for(let c of a.assigneeIds)b.append("assigneeId",c);else a.assignedToMe&&b.set("assignedToMe","true");a.cycleId&&b.set("cycleId",a.cycleId),c&&m.current&&b.set("cursor",m.current),d.projectSlug&&b.set("projectSlug",d.projectSlug),d.limit&&b.set("limit",String(d.limit)),e&&b.set("refresh","true");let g=await fetch(`/api/linear/issues?${b.toString()}`),h=await g.json(),i=h.issues??[];f(a=>c?[...a,...i]:i),j(h.pageInfo?.endCursor??null),l(h.pageInfo?.hasNextPage??!1),n.current=!0}catch{c||f([])}finally{h(!1)}}},[a.teamId,a.statuses,a.search,a.assigneeIds,a.assignedToMe,a.cycleId,b,d.projectSlug,d.limit]);return(0,c.useEffect)(()=>{j(null),o(!1,!n.current)},[o]),{issues:e,loading:g,hasMore:k,loadMore:(0,c.useCallback)(()=>o(!0),[o]),refresh:(0,c.useCallback)(()=>(j(null),o(!1,!0)),[o])}}((0,c.useMemo)(()=>({search:M||void 0,statuses:ae.length>0&&ae.length<$.length?ae:void 0,assigneeIds:ac.length>0?ac:void 0,teamId:ak||void 0,cycleId:ai||void 0}),[M,ac,ai,ae,ak,$.length]),f,{projectSlug:d}),{runs:aG,loading:aH,createRun:aI,updateRun:aJ}=function(a,b){let[d,e]=(0,c.useState)([]),[f,g]=(0,c.useState)(!1),h=(0,c.useRef)(a??null);h.current=a??null;let i=(0,c.useCallback)(async()=>{let a=h.current?.trim();if(!a)return e([]),[];g(!0);try{let c=new URLSearchParams({issueId:a});b&&c.set("projectId",b);let d=await fetch(`/api/linear/runs?${c.toString()}`);if(!d.ok)throw Error(`Failed to fetch Linear runs: ${d.status}`);let f=await d.json(),g=Array.isArray(f.runs)?f.runs:[];return e(g),g}finally{g(!1)}},[b]);return(0,c.useEffect)(()=>{e([]),i()},[i,a]),(0,c.useEffect)(()=>{if(!a)return;let b=window.setInterval(()=>{i()},3e3);return()=>window.clearInterval(b)},[a,i]),{runs:d,loading:f,refresh:i,createRun:(0,c.useCallback)(async a=>{let b=await fetch("/api/linear/runs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok)throw Error((await b.json().catch(()=>({}))).error||`Failed to create Linear run: ${b.status}`);let c=(await b.json()).run;return e(a=>[c,...a.filter(a=>a.id!==c.id)]),c},[]),updateRun:(0,c.useCallback)(async(a,b)=>{let c=await fetch(`/api/linear/runs/${encodeURIComponent(a)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!c.ok)throw Error((await c.json().catch(()=>({}))).error||`Failed to update Linear run: ${c.status}`);let d=(await c.json()).run;return e(a=>a.map(a=>a.id===d.id?d:a)),d},[])}}(am?.id,a??null),{scripts:aK,activeScriptId:aL,activeScript:aM,setActiveScriptId:aN,saveScript:aO,deleteScript:aP}=function(a){let[b,d]=(0,c.useState)([]),[e,f]=(0,c.useState)(null);(0,c.useEffect)(()=>{let a={...r};d(a.scripts),f(a.activeScriptId)},[a]);let g=(0,c.useCallback)((a,b)=>{d(a),f(b)},[a]),h=(0,c.useCallback)(a=>{let c=a&&b.some(b=>b.id===a)?a:null;g(b,c)},[g,b]),i=(0,c.useCallback)(a=>{let c=new Date().toISOString(),d=a.name.trim(),e=a.prompt.trim();if(!d||!e)throw Error("Run script name and prompt are required.");let f=a.id?b.find(b=>b.id===a.id):null,h=f?{...f,name:d,prompt:e,updatedAt:c}:{id:crypto.randomUUID(),name:d,prompt:e,createdAt:c,updatedAt:c};return g([...f?b.map(a=>a.id===f.id?h:a):[h,...b]].sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt)),h.id),h},[g,b]),j=(0,c.useCallback)(a=>{g(b.filter(b=>b.id!==a),e===a?null:e)},[e,g,b]),k=(0,c.useMemo)(()=>b.find(a=>a.id===e)??null,[e,b]);return{scripts:b,activeScriptId:e,activeScript:k,setActiveScriptId:h,saveScript:i,deleteScript:j}}(d),aQ=aG.find(a=>a.id===ao)??null,aR=(0,c.useMemo)(()=>Y.map(a=>({value:a.id,label:a.name})),[Y]),aS=(0,c.useMemo)(()=>$.map(a=>({value:a,label:a})),[$]),aT=(0,c.useMemo)(()=>[{value:"",label:"Workspace"},...aa.map(a=>({value:a.id,label:a.name}))],[aa]),aU=(0,c.useMemo)(()=>[{value:"",label:"Cycle"},...ag.map(a=>({value:a.id,label:a.name||`Cycle ${a.number}`}))],[ag]),aV=aS.length>0,aW=aU.length>1,aX=aT.length>2,aY=aM?.name??"AGX default";(0,c.useEffect)(()=>{0===aB.length?an(null):an(a=>a&&aB.some(b=>b.id===a.id)?aB.find(b=>b.id===a.id)??a:aB[0]??null)},[aB]),(0,c.useEffect)(()=>{0===aG.length?ap(null):ao&&aG.some(a=>a.id===ao)||ap(aG[0]?.id??null)},[aG,ao]),(0,c.useEffect)(()=>{let b=!1;return async function(){try{let c=await fetch("/api/participants"),d=c.ok?await c.json():[];if(!a){b||ar(d);return}let e=await fetch(`/api/projects/${encodeURIComponent(a)}/agents`);if(!e.ok){b||ar(d);return}let f=await e.json(),g=Array.isArray(f.agents)?f.agents.map(a=>a.agent_id).filter(a=>"string"==typeof a&&a.trim().length>0):[],h=new Map(g.map((a,b)=>[a,b])),i=d.filter(a=>h.has(a.id)).sort((a,b)=>(h.get(a.id)??Number.MAX_SAFE_INTEGER)-(h.get(b.id)??Number.MAX_SAFE_INTEGER));b||ar(i)}catch{b||ar([])}}(),()=>{b=!0}},[a]),(0,c.useEffect)(()=>{if(!y)return;let a=a=>{let b=a.target;az.current?.contains(b)||ay.current?.contains(b)||z(!1)},b=a=>{"Escape"===a.key&&z(!1)};return document.addEventListener("mousedown",a),document.addEventListener("keydown",b),()=>{document.removeEventListener("mousedown",a),document.removeEventListener("keydown",b)}},[y]);let aZ=(0,c.useCallback)((a,b)=>{if(z(!1),0===aq.length)return void window.alert("Add at least one agent to this project before running a Linear ticket.");if(1===aq.length)return void a$(a,aq[0]);let c=b?.currentTarget?.getBoundingClientRect();at(a),av(c?{top:c.bottom+4,left:c.left}:{top:200,left:200})},[aq]),a$=(0,c.useCallback)(async(b,c)=>{at(null),av(null);let e=null;try{var f;let g,h;an(b),e=await aI({projectId:a??null,projectSlug:d??null,issueId:b.id,issueIdentifier:b.identifier,issueTitle:b.title,issueStatus:b.status,issueAssignee:b.assignee,agentId:c.id,agentName:c.name}),ap(e.id);let i={issue:{identifier:b.identifier,title:b.title,status:b.status,assignee:b.assignee},project:d?{slug:d}:null},{prompt:j,promptPrefix:k}=G(i),l=aM&&(f=aM.prompt,h={"ticket.identifier":(g=H(i)).issue.identifier,"ticket.title":g.issue.title,"ticket.status":g.issue.status,"ticket.assignee":g.issue.assignee,"project.name":g.project.name,"project.slug":g.project.slug,"project.label":g.project.label,"knowledge_base.root":g.runtime.knowledgeBaseRoot,"knowledge_base.issue_path":g.runtime.issueKnowledgePath,"worktree.path":g.runtime.isolatedWorktreePath},f.replace(/\{\{\s*([a-zA-Z0-9._-]+)\s*\}\}/g,(a,b)=>h[b]??"")).trim()||j,m=aM?`${k}ACTIVE RUN SCRIPT
38
+ - Name: ${aM.name}
39
+
40
+ `:k,n=await fetch("/api/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:l,promptPrefix:m,threadId:e.threadId,activeParticipantIds:[c.id],projectSlug:d??void 0})}),o=await n.json().catch(()=>({}));if(!n.ok||!o.chatRunId||!o.userMessageId)throw Error(o.error||"Failed to start Linear run");await aJ(e.id,{chatRunId:o.chatRunId,rootMessageId:o.userMessageId})}catch(a){console.error("Failed to execute Linear ticket:",a),e&&await aJ(e.id,{status:"failed",error:a instanceof Error?a.message:String(a)}),a instanceof Error&&window.alert(a.message)}},[aM,aI,a,d,aJ]),a_=(0,c.useRef)(null);if((0,c.useEffect)(()=>{let a=a_.current;if(!a||!aD)return;let b=new IntersectionObserver(a=>{a[0]?.isIntersecting&&aE()},{threshold:.1});return b.observe(a),()=>b.disconnect()},[aD,aE]),g)return(0,b.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:"Loading..."});let a0=f&&!u&&!Object.values(k).some(Boolean);return!f||a0?(0,b.jsx)(L,{connected:f,user:h,clis:i,mcpConfigured:k,onConnect:l,onConnectWithKey:q,onDisconnect:s,onConfigureMcp:t,onContinue:()=>v(!0)}):(0,b.jsxs)("div",{className:"relative flex h-full overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex shrink-0 flex-col border-r border-[var(--card-border)]",style:{width:B},children:[(0,b.jsxs)("div",{className:"shrink-0 border-b border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"flex h-12 items-center gap-2 px-3",children:[(0,b.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-[var(--card-border)] bg-[var(--background)] px-2.5 py-1.5 transition-all focus-within:border-[var(--muted-foreground)] focus-within:ring-1 focus-within:ring-[var(--muted-foreground)]",children:[(0,b.jsx)(o.Search,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)("input",{type:"text",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-[var(--muted-foreground)]",placeholder:"Search tickets...",value:J,onChange:a=>aA(a.target.value)})]}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)] disabled:cursor-not-allowed disabled:opacity-50",onClick:()=>void aF(),title:"Refresh tickets","aria-label":"Refresh tickets",disabled:aC,children:(0,b.jsx)(n.RefreshCw,{size:16,className:aC?"animate-spin":void 0})}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:()=>{z(!1),x(!0)},title:"Linear settings",children:(0,b.jsx)(p.Settings,{size:16})})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pb-2",children:[aV?(0,b.jsx)(U,{label:"Status",values:ae,options:aS,activeClasses:"border-amber-500/30 bg-amber-500/10 text-amber-300",onChange:af,emptyLabel:"All statuses"}):null,(0,b.jsx)(U,{label:"Assignee",values:ac,options:aR,activeClasses:"border-blue-500/30 bg-blue-500/10 text-blue-400",onChange:ad,emptyLabel:"All assignees"}),aX?(0,b.jsx)(T,{label:"Workspace",value:ak,options:aT,activeClasses:"border-emerald-500/30 bg-emerald-500/10 text-emerald-400",onChange:al}):null,aW?(0,b.jsx)(T,{label:"Cycle",value:ai,options:aU,activeClasses:"border-purple-500/30 bg-purple-500/10 text-purple-400",onChange:aj}):null]})]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto",children:aC&&0===aB.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Loading tickets..."}):0===aB.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"No tickets found."}):(0,b.jsxs)(b.Fragment,{children:[aB.map(a=>(0,b.jsx)(X,{issue:a,selected:am?.id===a.id,onSelect:()=>an(a),onExecute:aZ},a.id)),aD?(0,b.jsx)("div",{ref:a_,className:"py-2 text-center text-xs text-[var(--muted-foreground)]",children:aC?"Loading...":"Load more"}):null]})})]}),(0,b.jsx)(N,{onResize:a=>E(b=>{let c=Math.max(180,Math.min(600,b+a));return(0,D.persistLinearTicketPanelWidth)(c),c})}),(0,b.jsxs)("div",{className:"flex shrink-0 flex-col border-r border-[var(--card-border)]",style:{width:F},children:[(0,b.jsxs)("div",{className:"relative flex items-center justify-between border-b border-[var(--card-border)] px-3 py-2",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold text-[var(--foreground)]",children:"Runs"}),(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsxs)("button",{ref:ay,type:"button",className:`flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors ${y?"bg-[var(--card-bg)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]"}`,onClick:()=>z(a=>!a),title:`Run script: ${aY}`,children:[(0,b.jsx)(j.FileText,{size:10}),(0,b.jsx)("span",{className:"max-w-[88px] truncate",children:aY})]}),am&&(0,b.jsxs)("button",{type:"button",className:"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:a=>aZ(am,a),title:"Run agent on selected ticket",children:[(0,b.jsx)(m.Play,{size:10}),(0,b.jsx)("span",{children:"Run now"})]})]}),y?(0,b.jsx)("div",{ref:az,className:"absolute right-3 top-full z-20 mt-2 max-h-[80vh] overflow-y-auto rounded-2xl border border-[var(--card-border)] bg-[var(--background)] p-4 shadow-2xl",style:{width:"min(760px, calc(100vw - 32px))"},children:(0,b.jsx)(A,{projectSlug:d,scripts:aK,activeScriptId:aL,onSetActiveScriptId:aN,onSaveScript:aO,onDeleteScript:aP})}):null]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto",children:am?aH&&0===aG.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Loading runs..."}):0===aG.length?(0,b.jsxs)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:["No runs yet. Click ",(0,b.jsx)(m.Play,{size:10,className:"inline"})," to execute."]}):aG.map(a=>(0,b.jsxs)("button",{type:"button",className:`w-full px-3 py-2 text-left text-xs transition-colors ${aQ?.id===a.id?"bg-[var(--card-bg)]":"hover:bg-[var(--card-bg)]"}`,onClick:()=>ap(a.id),children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-1",children:[(0,b.jsx)("span",{className:`font-medium ${{queued:"text-amber-500",running:"text-yellow-500",success:"text-green-500",failed:"text-red-500",cancelled:"text-[var(--muted-foreground)]"}[a.status]}`,children:P(a.status)}),(0,b.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:new Date(a.startedAt).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})]}),(0,b.jsx)("div",{className:"mt-0.5 truncate text-[10px] text-[var(--muted-foreground)]",children:a.agentName}),null!=a.durationMs?(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[(a.durationMs/1e3).toFixed(1),"s"]}):null]},a.id)):(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Select a ticket to see runs."})})]}),(0,b.jsx)(N,{onResize:a=>I(b=>{let c=Math.max(140,Math.min(500,b+a));return(0,D.persistLinearRunsPanelWidth)(c),c})}),(0,b.jsx)("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:aQ?(0,b.jsx)(W,{run:aQ,participants:aq}):am&&aq.length>0?(0,b.jsx)(V,{issue:am,participants:aq,projectId:a,projectSlug:d,createRun:aI,updateRun:aJ,onRunCreated:a=>ap(a)},am.id):(0,b.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:am?"Add at least one agent to this project to chat.":"Select a ticket from the list."})}),w&&(0,b.jsx)("div",{className:"absolute inset-0 z-30 flex items-center justify-center bg-black/50",children:(0,b.jsxs)("div",{className:"relative w-full max-w-lg rounded-lg border border-[var(--card-border)] bg-[var(--background)] shadow-xl",children:[(0,b.jsx)("button",{type:"button",className:"absolute right-3 top-3 rounded p-1 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:()=>x(!1),children:"×"}),(0,b.jsx)("div",{className:"max-h-[80vh] overflow-y-auto p-6",children:(0,b.jsx)(L,{connected:f,user:h,clis:i,mcpConfigured:k,onConnect:l,onConnectWithKey:q,onDisconnect:s,onConfigureMcp:t,onContinue:()=>x(!1)})})]})}),as&&au&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"fixed inset-0 z-40",onClick:()=>{at(null),av(null)}}),(0,b.jsxs)("div",{className:"fixed z-50 min-w-[180px] rounded border border-[var(--card-border)] bg-[var(--card-bg)] py-1 shadow-lg",style:{top:au.top,left:au.left},children:[(0,b.jsx)("div",{className:"px-3 py-1.5 text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Pick an agent"}),aq.map(a=>(0,b.jsxs)("button",{type:"button",className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors hover:bg-[var(--card-bg)]",onClick:()=>void a$(as,a),children:[(0,b.jsx)("img",{src:O(a.id,a.color,20),alt:"",className:"h-5 w-5 shrink-0 rounded-full"}),(0,b.jsxs)("span",{className:"flex flex-col",children:[(0,b.jsx)("span",{className:"font-medium text-[var(--foreground)]",children:a.name}),a.title?(0,b.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:a.title}):null]})]},a.id))]})]})]})}function Z({params:a}){let{slug:f}=(0,c.use)(a),g=(0,d.useSearchParams)(),{projects:h}=(0,e.useProjects)(),i=h.find(a=>a.slug===f),j="true"===g.get("settings");return(0,b.jsx)(Y,{projectId:i?.id,projectSlug:i?.slug??f,initialShowSettings:j})}a.s(["default",()=>Z],323860)}];
38
41
 
39
42
  //# sourceMappingURL=app_projects_%5Bslug%5D_linear_page_tsx_971a6ba7._.js.map