@mndrk/agx 2.4.8 → 2.4.10

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 (221) hide show
  1. package/README.md +22 -53
  2. package/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
  3. package/cloud-runtime/standalone/apps/local/.next/build-manifest.json +2 -2
  4. package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
  5. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +2 -2
  6. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.rsc +1 -1
  7. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.html +2 -2
  14. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.rsc +3 -3
  15. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  16. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  18. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  22. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  23. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.html +2 -2
  24. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.rsc +3 -3
  25. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_full.segment.rsc +3 -3
  26. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  27. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  28. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  29. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +1 -1
  30. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents.segment.rsc +1 -1
  31. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agent-specs/route.js.nft.json +1 -1
  32. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/[id]/profile/route.js.nft.json +1 -1
  33. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/export/route.js.nft.json +1 -1
  34. package/cloud-runtime/standalone/apps/local/.next/server/app/api/chat/route.js.nft.json +1 -1
  35. package/cloud-runtime/standalone/apps/local/.next/server/app/api/file-search/route.js.nft.json +1 -1
  36. package/cloud-runtime/standalone/apps/local/.next/server/app/api/participants/route.js.nft.json +1 -1
  37. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/scheduled-tasks/route.js.nft.json +1 -1
  38. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route.js.nft.json +1 -1
  39. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/search/route.js.nft.json +1 -1
  40. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/teams/route.js.nft.json +1 -1
  41. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/poll/route.js.nft.json +1 -1
  42. package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/check/[id]/route.js.nft.json +1 -1
  43. package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/route.js.nft.json +1 -1
  44. package/cloud-runtime/standalone/apps/local/.next/server/app/api/queue/route.js.nft.json +1 -1
  45. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/debug/route.js.nft.json +1 -1
  46. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
  47. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/assign/route.js.nft.json +1 -1
  48. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/available/route.js.nft.json +1 -1
  49. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/detail/route.js.nft.json +1 -1
  50. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/history/route.js.nft.json +1 -1
  51. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/learn/route.js.nft.json +1 -1
  52. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/route.js.nft.json +1 -1
  53. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/unlearn/route.js.nft.json +1 -1
  54. package/cloud-runtime/standalone/apps/local/.next/server/app/api/status/route.js.nft.json +1 -1
  55. package/cloud-runtime/standalone/apps/local/.next/server/app/api/summarize/route.js.nft.json +1 -1
  56. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
  57. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
  58. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
  59. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  60. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/route.js.nft.json +1 -1
  61. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
  62. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/route.js.nft.json +1 -1
  63. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/recap/route.js.nft.json +1 -1
  64. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/scripted/route.js.nft.json +1 -1
  65. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/status/route.js.nft.json +1 -1
  66. package/cloud-runtime/standalone/apps/local/.next/server/app/api/update-check/route.js.nft.json +1 -1
  67. package/cloud-runtime/standalone/apps/local/.next/server/app/index.html +2 -2
  68. package/cloud-runtime/standalone/apps/local/.next/server/app/index.rsc +4 -4
  69. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  70. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +4 -4
  71. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_head.segment.rsc +1 -1
  72. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_index.segment.rsc +2 -2
  73. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  74. package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos/page_client-reference-manifest.js +1 -1
  75. package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.html +2 -2
  76. package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.rsc +4 -4
  77. package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_full.segment.rsc +4 -4
  78. package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_head.segment.rsc +1 -1
  79. package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_index.segment.rsc +2 -2
  80. package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_tree.segment.rsc +2 -2
  81. package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github/select-repos/__PAGE__.segment.rsc +2 -2
  82. package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github/select-repos.segment.rsc +1 -1
  83. package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github.segment.rsc +1 -1
  84. package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations.segment.rsc +1 -1
  85. package/cloud-runtime/standalone/apps/local/.next/server/app/page_client-reference-manifest.js +1 -1
  86. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page.js.nft.json +1 -1
  87. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
  88. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page.js.nft.json +1 -1
  89. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
  90. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js.nft.json +1 -1
  91. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +1 -1
  92. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
  93. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  94. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/notifications/page.js.nft.json +1 -1
  95. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/notifications/page_client-reference-manifest.js +1 -1
  96. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page.js.nft.json +1 -1
  97. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page_client-reference-manifest.js +1 -1
  98. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page.js.nft.json +1 -1
  99. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page_client-reference-manifest.js +1 -1
  100. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  101. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  102. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/prs/page.js.nft.json +1 -1
  103. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/prs/page_client-reference-manifest.js +1 -1
  104. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page.js.nft.json +1 -1
  105. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  106. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page.js.nft.json +1 -1
  107. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page_client-reference-manifest.js +1 -1
  108. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page.js.nft.json +1 -1
  109. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page_client-reference-manifest.js +1 -1
  110. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page.js.nft.json +1 -1
  111. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page_client-reference-manifest.js +1 -1
  112. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page.js.nft.json +1 -1
  113. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page_client-reference-manifest.js +1 -1
  114. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page.js.nft.json +1 -1
  115. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page_client-reference-manifest.js +1 -1
  116. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page.js.nft.json +1 -1
  117. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page_client-reference-manifest.js +1 -1
  118. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
  119. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
  120. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/page.js.nft.json +1 -1
  121. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/page_client-reference-manifest.js +1 -1
  122. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page.js.nft.json +1 -1
  123. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page_client-reference-manifest.js +1 -1
  124. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page.js.nft.json +1 -1
  125. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page_client-reference-manifest.js +1 -1
  126. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page.js.nft.json +1 -1
  127. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page_client-reference-manifest.js +1 -1
  128. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page.js.nft.json +1 -1
  129. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  130. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
  131. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +4 -4
  132. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +4 -4
  133. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  134. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  135. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  136. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
  137. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  138. package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  139. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
  140. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +4 -4
  141. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +4 -4
  142. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
  143. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
  144. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  145. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +2 -2
  146. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
  147. package/cloud-runtime/standalone/apps/local/.next/server/app/status/page_client-reference-manifest.js +1 -1
  148. package/cloud-runtime/standalone/apps/local/.next/server/app/status.html +2 -2
  149. package/cloud-runtime/standalone/apps/local/.next/server/app/status.rsc +3 -3
  150. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +3 -3
  151. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_head.segment.rsc +1 -1
  152. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_index.segment.rsc +2 -2
  153. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  154. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
  155. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status.segment.rsc +1 -1
  156. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__8917bc4c._.js +1 -1
  157. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_22ab9b7c._.js +1 -1
  158. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__5187dece._.js +1 -1
  159. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__7752d2d2._.js +1 -1
  160. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__7a31a76d._.js +3 -0
  161. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__9193284e._.js +1 -1
  162. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__c0bc6058._.js +7 -0
  163. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__e8c6a1f1._.js +1 -1
  164. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_988d29c0._.js +1 -1
  165. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_page_tsx_76330306._.js +1 -1
  166. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_page_tsx_b5cec607._.js +5 -5
  167. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_setup_page_tsx_9a67cfaf._.js +1 -1
  168. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_ProjectModal_tsx_c447494c._.js +3 -0
  169. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_TrackerBoard_tsx_98970bab._.js +1 -1
  170. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_projects_ProjectObjectivesWorkspace_tsx_751ab3d3._.js +2 -2
  171. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_eec36ab6._.js +1 -1
  172. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_fed01721._.js +1 -1
  173. package/cloud-runtime/standalone/apps/local/.next/server/middleware-manifest.json +5 -5
  174. package/cloud-runtime/standalone/apps/local/.next/server/pages/404.html +2 -2
  175. package/cloud-runtime/standalone/apps/local/.next/server/pages/500.html +2 -2
  176. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
  177. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
  178. package/cloud-runtime/standalone/apps/local/.next/static/chunks/23b7c6b08d8bf807.js +1 -0
  179. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{d6a9cc66254693b8.js → 46add4300ec4ed84.js} +1 -1
  180. package/cloud-runtime/standalone/apps/local/.next/static/chunks/5709a6f7c5c182d6.js +1 -0
  181. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{ed606d6f94457578.css → 6d8a7494a0cea7a0.css} +1 -1
  182. package/cloud-runtime/standalone/apps/local/.next/static/chunks/9ac96f1f33a266f9.js +1 -0
  183. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{8b87c2521c519a1f.js → afad1102543847bf.js} +1 -1
  184. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{c9a2c4b55bb76f4f.js → b27f760849f14f13.js} +5 -5
  185. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{52a7b1805199c6fb.js → b4716c6337e3335c.js} +1 -1
  186. package/cloud-runtime/standalone/apps/local/.next/static/chunks/b53629835d2a70f0.js +16 -0
  187. package/cloud-runtime/standalone/apps/local/.next/static/chunks/bb99cb03648e6fae.js +1 -0
  188. package/cloud-runtime/standalone/apps/local/.next/static/chunks/c8c0c4b13e08bb14.js +1 -0
  189. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{7bfbfcd072f8d61e.js → d0ba5f3dc5296486.js} +3 -3
  190. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{3fce625820bc2bd4.js → de56d09bb0de7dd5.js} +2 -2
  191. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{1585dd5f9ec4866a.js → e5fdfbbe9bae1f03.js} +1 -1
  192. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{90dd4ab03ab145d1.js → f007705fe5db26f1.js} +1 -1
  193. package/cloud-runtime/standalone/apps/local/app/api/projects/[id]/route.ts +4 -1
  194. package/cloud-runtime/standalone/apps/local/app/api/projects/payload.ts +23 -9
  195. package/cloud-runtime/standalone/apps/local/app/api/projects/route.ts +4 -1
  196. package/cloud-runtime/standalone/apps/local/app/integrations/github/select-repos/page.tsx +2 -0
  197. package/cloud-runtime/standalone/apps/local/app/layout.tsx +1 -1
  198. package/cloud-runtime/standalone/apps/local/app/page.tsx +2 -2
  199. package/cloud-runtime/standalone/apps/local/app/projects/[slug]/page.tsx +1 -1
  200. package/cloud-runtime/standalone/apps/local/app/projects/page.tsx +7 -3
  201. package/cloud-runtime/standalone/apps/local/components/ProjectModal.tsx +111 -91
  202. package/cloud-runtime/standalone/apps/local/components/TrackerBoard.tsx +2 -2
  203. package/cloud-runtime/standalone/apps/local/components/project-repo-validation.ts +65 -0
  204. package/cloud-runtime/standalone/apps/local/components/projects/ProjectObjectivesWorkspace.tsx +22 -2
  205. package/cloud-runtime/standalone/apps/local/components/setup/McpSetupStep.tsx +1 -1
  206. package/cloud-runtime/standalone/apps/local/components/setup/ProviderStep.tsx +2 -2
  207. package/cloud-runtime/standalone/apps/local/components/thread/WorkspaceSidebar.tsx +6 -2
  208. package/cloud-runtime/standalone/apps/local/components/tracking/TrackerSetup.tsx +2 -2
  209. package/cloud-runtime/standalone/apps/local/worker/index.js +4 -2
  210. package/package.json +2 -2
  211. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__636799fb._.js +0 -3
  212. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__e02a457c._.js +0 -3
  213. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_ae1a134f._.js +0 -7
  214. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0d22a723b9b96e65.js +0 -1
  215. package/cloud-runtime/standalone/apps/local/.next/static/chunks/1bc8cc9cbb99c1ed.js +0 -1
  216. package/cloud-runtime/standalone/apps/local/.next/static/chunks/c352706a0ad7e35d.js +0 -1
  217. package/cloud-runtime/standalone/apps/local/.next/static/chunks/cf33cb29946990e3.js +0 -16
  218. package/cloud-runtime/standalone/apps/local/.next/static/chunks/e3bdd1e0f385114e.js +0 -1
  219. /package/cloud-runtime/standalone/apps/local/.next/static/{O3Yu8lY-DN5fauB8GipIL → x7w3oijN4B1r7IvTuL96T}/_buildManifest.js +0 -0
  220. /package/cloud-runtime/standalone/apps/local/.next/static/{O3Yu8lY-DN5fauB8GipIL → x7w3oijN4B1r7IvTuL96T}/_clientMiddlewareManifest.json +0 -0
  221. /package/cloud-runtime/standalone/apps/local/.next/static/{O3Yu8lY-DN5fauB8GipIL → x7w3oijN4B1r7IvTuL96T}/_ssgManifest.js +0 -0
@@ -1,16 +1,16 @@
1
1
  (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,292135,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return a}});let a=e=>{}},353662,e=>{"use strict";var t=e.i(810605);t.NODE_TIMEOUT_DEFAULT_MS,t.GRAPH_TIMEOUT_DEFAULT_MS;let r=new Set(["done","passed"]),a=new Set(["pending","running","awaiting_human","blocked"]);function s(e){return`node--${e}`}function n(e){return e.replace(/_/gu," ")}function o(e,t){return"root"===t.type?t.title?.trim()||"Task Objective":"work"===t.type||"function"===t.type?t.title?.trim()||e:"gate"===t.type?t.gateType.replace(/_gate$/u,"").replace(/_/gu," ").replace(/\b\w/gu,e=>e.toUpperCase()):"fork"===t.type?"Fork":"join"===t.type?`Join (${t.joinStrategy})`:"Conditional"}function l(e){for(let[t,r]of Object.entries(e.nodes))if("root"===r.type)return{id:t,node:r};return null}function i(e){let t,s=l(e);return{mode:e.mode,graphVersion:e.graphVersion,nodeCount:Object.keys(e.nodes).length,progress:0===(t=Object.values(e.nodes).filter(e=>"skipped"!==e.status)).length?100:Math.round(t.filter(e=>r.has(e.status)).length/t.length*100),currentBlocker:function(e){let t=function(e){let t=Object.entries(e.nodes),r=t.filter(([,e])=>"gate"===e.type&&e.required),a=r.find(([,e])=>"failed"===e.status);if(a)return a[0];let s=r.find(([,e])=>"awaiting_human"===e.status);if(s)return s[0];let n=r.find(([,e])=>"pending"===e.status||"running"===e.status);if(n)return n[0];let o=t.find(([,e])=>"work"===e.type&&"blocked"===e.status);return o?.[0]??null}(e);if(!t)return null;let r=e.nodes[t];return r?{nodeId:t,label:o(t,r),status:r.status,required:"gate"===r.type&&r.required}:null}(e),derivedStatus:function(e){let t=Object.keys(e.nodes).length;if(0===t)return"INTAKE";if(1===t){let t=Object.values(e.nodes)[0];if("root"===t.type&&!t.graphCreated)return"INTAKE"}return Object.values(e.nodes).some(e=>a.has(e.status))?"PROGRESS":"DONE"}(e),hasRootNode:null!==s,rootNodeId:s?.id??null}}e.s(["buildGraphSummary",()=>i,"findRootNode",()=>l,"formatNodeStatusLabel",()=>n,"getNodeLabel",()=>o,"toNodeStatusClass",()=>s],353662)},936381,e=>{"use strict";var t=e.i(762281),r=e.i(935851),a=e.i(506420),s=e.i(307241),n=e.i(810605);function o(){let[e,a]=(0,r.useState)(null),[s,o]=(0,r.useState)("loading");(0,r.useEffect)(()=>{let e=!0;async function t(){try{let t=await fetch("/api/health");if(!e)return;if(!t.ok)return void o("error");let r=await t.json();a(r),o(r.connected?"connected":"disconnected")}catch{e&&o("error")}}t();let r=setInterval(t,n.UI_POLL_DB_HEALTH_MS);return()=>{e=!1,clearInterval(r)}},[]);let l={loading:"Checking database…",connected:`${e?.adapter??"db"} connected (${e?.latencyMs??"?"}ms)`,disconnected:`${e?.adapter??"db"} disconnected`,error:"Database unreachable"};return(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-xs text-[var(--muted-foreground)]",role:"status","aria-label":l[s],children:[(0,t.jsx)("span",{className:`w-2 h-2 rounded-full ${{loading:"bg-yellow-400",connected:"bg-green-500",disconnected:"bg-red-500",error:"bg-red-500"}[s]}`}),(0,t.jsx)("span",{className:"hidden sm:inline",children:l[s]})]})}function l({children:e,fullWidth:r=!1,noFooter:a=!1}){return(0,t.jsxs)("div",{className:"h-screen flex flex-col overflow-hidden",children:[(0,t.jsx)("nav",{className:"desktop-titlebar flex-shrink-0 border-b border-[var(--card-border)] bg-[var(--card-bg)]/80 backdrop-blur-lg z-30",children:(0,t.jsx)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:(0,t.jsxs)("div",{className:"flex items-center justify-between h-16",children:[(0,t.jsx)("div",{className:"flex items-center gap-8",children:(0,t.jsx)(s.default,{href:"/",className:"flex items-center gap-3 group",children:(0,t.jsxs)("svg",{width:"52",height:"31",viewBox:"0 0 64 38",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"transition-transform group-hover:scale-105",children:[(0,t.jsx)("rect",{width:"64",height:"38",rx:"8",fill:"black"}),(0,t.jsxs)("g",{stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M 14 27 C 17 16 19 10 20 8 C 21 12 23 20 25 27"}),(0,t.jsx)("path",{d:"M 16 20 C 19 19 21 21 23 20"}),(0,t.jsx)("path",{d:"M 40 13 C 35 10 30 13 30 19 C 30 25 34 28 38 27 C 40 26 40 22 40 20 L 36 20"}),(0,t.jsx)("path",{d:"M 46 11 C 48 16 51 22 54 27"}),(0,t.jsx)("path",{d:"M 54 11 C 52 16 49 22 46 27"})]})]})})}),(0,t.jsx)("div",{className:"flex items-center gap-3",children:(0,t.jsx)(s.default,{href:"/",className:"text-sm font-medium text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:"Home"})})]})})}),(0,t.jsx)("main",{className:`flex-1 min-h-0 flex flex-col ${r?"p-0":"p-4 sm:p-6 lg:p-8 overflow-y-auto"}`,children:e}),!a&&(0,t.jsx)("footer",{className:"flex-shrink-0 border-t border-[var(--card-border)] bg-[var(--card-bg)]/50 py-4",children:(0,t.jsxs)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex items-center justify-between text-xs text-[var(--muted-foreground)]",children:[(0,t.jsx)("span",{children:"AGX"}),(0,t.jsxs)("span",{className:"hidden sm:inline-flex items-center gap-3",children:[(0,t.jsx)(o,{}),(0,t.jsx)("span",{children:"Built with Next.js + Db"})]})]})})]})}function i(e){return(0,t.jsx)(r.Suspense,{fallback:(0,t.jsx)("div",{className:"h-screen flex items-center justify-center bg-[var(--background)]",children:(0,t.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"})}),children:(0,t.jsx)(l,{...e})})}var d=e.i(902572);let c=new Set([d.PROJECT_OBJECTIVES_METADATA_KEY,d.LEGACY_PROJECT_GOALS_METADATA_KEY,d.PROJECT_HEALTH_METADATA_KEY]);function u({project:e,onEdit:r,onDelete:a,onClick:s,onManageTasks:n}){let o=e.repos&&e.repos.length>0;return(0,t.jsxs)("div",{onClick:()=>s?.(e),className:`p-5 surface-card space-y-4
2
- ${s?"cursor-pointer hover:border-gray-300 dark:hover:border-gray-700 hover:shadow-md active:scale-[0.99]":""}`,children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"text-lg font-semibold",children:e.name}),(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] tracking-wide uppercase",children:e.slug})]}),(0,t.jsxs)("div",{className:"flex flex-col items-end gap-2",children:[(0,t.jsxs)("span",{className:"text-[11px] font-semibold text-[var(--muted-foreground)]",children:["Updated ",new Date(e.updated_at).toLocaleDateString()]}),(r||a||n)&&(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[n&&(0,t.jsx)("button",{type:"button",onClick:t=>{t.stopPropagation(),n(e)},className:"text-[11px] font-semibold px-2 py-1 rounded-full border border-[var(--card-border)] bg-[var(--background)] hover:border-[var(--primary)] hover:text-[var(--primary)] transition-all",children:"Tasks"}),r&&(0,t.jsx)("button",{type:"button",onClick:t=>{t.stopPropagation(),r(e)},className:"text-[11px] font-semibold px-2 py-1 rounded-full border border-[var(--card-border)] hover:border-[var(--primary)] hover:text-[var(--primary)] transition-all bg-[var(--background)]",children:"Edit"}),a&&(0,t.jsx)("button",{type:"button",onClick:t=>{t.stopPropagation(),a(e)},className:"text-[11px] font-semibold px-2 py-1 rounded-full border border-[var(--card-border)] text-[var(--destructive)] hover:border-[var(--destructive)] transition-all bg-[var(--background)]",children:"Delete"})]})]})]}),e.description&&(0,t.jsx)("p",{className:"text-sm text-[var(--foreground)] line-clamp-2",children:e.description}),e.ci_cd_info&&(0,t.jsxs)("div",{className:"text-sm",children:[(0,t.jsx)("p",{className:"text-[var(--muted-foreground)] text-[12px] uppercase tracking-wide",children:"CI / CD"}),(0,t.jsx)("p",{className:"text-[14px] text-[var(--accent)] font-medium truncate",children:e.ci_cd_info})]}),e.metadata&&Object.keys(e.metadata).some(e=>!c.has(e))&&(0,t.jsxs)("div",{className:"p-3 rounded-lg bg-[var(--muted)]/20 border border-dashed border-[var(--card-border)] space-y-1",children:[(0,t.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Metadata"}),(0,t.jsx)("div",{className:"space-y-1",children:Object.entries(e.metadata??{}).filter(([e])=>"undefined"!==e&&""!==e&&!c.has(e)).map(([e,r])=>(0,t.jsxs)("div",{className:"text-[12px] text-[var(--muted-foreground)] flex justify-between",children:[(0,t.jsx)("span",{className:"font-semibold",children:e}),(0,t.jsx)("span",{className:"truncate text-right",children:"string"==typeof r?r:JSON.stringify(r)})]},e))})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-[12px] uppercase tracking-wider text-[var(--muted-foreground)]",children:"Folders"}),(0,t.jsx)("span",{className:"text-[12px] text-[var(--muted-foreground)]",children:o?`${e.repos.length} connected`:"Unlinked"})]}),o?(0,t.jsxs)("div",{className:"mt-3 space-y-2",children:[e.repos.slice(0,2).map(e=>(0,t.jsxs)("div",{className:"p-2 rounded-lg border border-[var(--card-border)] bg-[var(--background)] text-[11px]",children:[(0,t.jsx)("div",{className:"font-semibold truncate",children:e.name}),e.path&&(0,t.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] truncate",children:e.path})]},e.id)),e.repos.length>2&&(0,t.jsxs)("p",{className:"text-[10px] text-center text-[var(--muted-foreground)]",children:["+ ",e.repos.length-2," more"]})]}):(0,t.jsx)("p",{className:"mt-3 text-[12px] text-[var(--muted-foreground)]",children:"No folders added yet."})]})]})}var p=e.i(535208),m=e.i(866389);let x=[{value:"queued",label:"Queued",color:"var(--status-queued)",icon:"○"},{value:"in_progress",label:"In Progress",color:"var(--status-in-progress)",icon:"◑"},{value:"blocked",label:"Blocked",color:"var(--status-blocked)",icon:"⊘"},{value:"completed",label:"Done",color:"var(--status-completed)",icon:"●"},{value:"failed",label:"Failed",color:"var(--status-failed)",icon:"✕"}];function f({status:e,onStatusChange:a}){let[s,n]=(0,r.useState)(!1),[o,l]=(0,r.useState)(null),i=(0,r.useRef)(null),d=(0,r.useRef)(null),c=(0,r.useCallback)(()=>{if(!i.current)return;let e=i.current.getBoundingClientRect();l({top:e.bottom+4,left:e.left})},[]);(0,r.useEffect)(()=>{if(!s)return;c();let e=e=>{i.current&&!i.current.contains(e.target)&&d.current&&!d.current.contains(e.target)&&n(!1)};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[s,c]),(0,r.useEffect)(()=>{n(!1)},[e]);let u=x.find(t=>t.value===e)||x[0],p="completed"===e,f="in_progress"===e;return(0,t.jsxs)("div",{className:"relative flex-shrink-0",ref:i,children:[(0,t.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),a&&n(!s)},className:`w-4 h-4 rounded-full border-[1.5px] flex items-center justify-center transition-all
2
+ ${s?"cursor-pointer hover:border-gray-300 dark:hover:border-gray-700 hover:shadow-md active:scale-[0.99]":""}`,children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"text-lg font-semibold",children:e.name}),(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] tracking-wide uppercase",children:e.slug})]}),(0,t.jsxs)("div",{className:"flex flex-col items-end gap-2",children:[(0,t.jsxs)("span",{className:"text-[11px] font-semibold text-[var(--muted-foreground)]",children:["Updated ",new Date(e.updated_at).toLocaleDateString()]}),(r||a||n)&&(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[n&&(0,t.jsx)("button",{type:"button",onClick:t=>{t.stopPropagation(),n(e)},className:"text-[11px] font-semibold px-2 py-1 rounded-full border border-[var(--card-border)] bg-[var(--background)] hover:border-[var(--primary)] hover:text-[var(--primary)] transition-all",children:"Tasks"}),r&&(0,t.jsx)("button",{type:"button",onClick:t=>{t.stopPropagation(),r(e)},className:"text-[11px] font-semibold px-2 py-1 rounded-full border border-[var(--card-border)] hover:border-[var(--primary)] hover:text-[var(--primary)] transition-all bg-[var(--background)]",children:"Edit"}),a&&(0,t.jsx)("button",{type:"button",onClick:t=>{t.stopPropagation(),a(e)},className:"text-[11px] font-semibold px-2 py-1 rounded-full border border-[var(--card-border)] text-[var(--destructive)] hover:border-[var(--destructive)] transition-all bg-[var(--background)]",children:"Delete"})]})]})]}),e.description&&(0,t.jsx)("p",{className:"text-sm text-[var(--foreground)] line-clamp-2",children:e.description}),e.ci_cd_info&&(0,t.jsxs)("div",{className:"text-sm",children:[(0,t.jsx)("p",{className:"text-[var(--muted-foreground)] text-[12px] uppercase tracking-wide",children:"CI / CD"}),(0,t.jsx)("p",{className:"text-[14px] text-[var(--accent)] font-medium truncate",children:e.ci_cd_info})]}),e.metadata&&Object.keys(e.metadata).some(e=>!c.has(e))&&(0,t.jsxs)("div",{className:"p-3 rounded-lg bg-[var(--muted)]/20 border border-dashed border-[var(--card-border)] space-y-1",children:[(0,t.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Metadata"}),(0,t.jsx)("div",{className:"space-y-1",children:Object.entries(e.metadata??{}).filter(([e])=>"undefined"!==e&&""!==e&&!c.has(e)).map(([e,r])=>(0,t.jsxs)("div",{className:"text-[12px] text-[var(--muted-foreground)] flex justify-between",children:[(0,t.jsx)("span",{className:"font-semibold",children:e}),(0,t.jsx)("span",{className:"truncate text-right",children:"string"==typeof r?r:JSON.stringify(r)})]},e))})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-[12px] uppercase tracking-wider text-[var(--muted-foreground)]",children:"Folders"}),(0,t.jsx)("span",{className:"text-[12px] text-[var(--muted-foreground)]",children:o?`${e.repos.length} connected`:"Unlinked"})]}),o?(0,t.jsxs)("div",{className:"mt-3 space-y-2",children:[e.repos.slice(0,2).map(e=>(0,t.jsxs)("div",{className:"p-2 rounded-lg border border-[var(--card-border)] bg-[var(--background)] text-[11px]",children:[(0,t.jsx)("div",{className:"font-semibold truncate",children:e.name}),e.path&&(0,t.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] truncate",children:e.path})]},e.id)),e.repos.length>2&&(0,t.jsxs)("p",{className:"text-[10px] text-center text-[var(--muted-foreground)]",children:["+ ",e.repos.length-2," more"]})]}):(0,t.jsx)("p",{className:"mt-3 text-[12px] text-[var(--muted-foreground)]",children:"No folders added yet."})]})]})}var p=e.i(535208),m=e.i(275850),x=e.i(866389);let f=[{value:"queued",label:"Queued",color:"var(--status-queued)",icon:"○"},{value:"in_progress",label:"In Progress",color:"var(--status-in-progress)",icon:"◑"},{value:"blocked",label:"Blocked",color:"var(--status-blocked)",icon:"⊘"},{value:"completed",label:"Done",color:"var(--status-completed)",icon:"●"},{value:"failed",label:"Failed",color:"var(--status-failed)",icon:"✕"}];function h({status:e,onStatusChange:a}){let[s,n]=(0,r.useState)(!1),[o,l]=(0,r.useState)(null),i=(0,r.useRef)(null),d=(0,r.useRef)(null),c=(0,r.useCallback)(()=>{if(!i.current)return;let e=i.current.getBoundingClientRect();l({top:e.bottom+4,left:e.left})},[]);(0,r.useEffect)(()=>{if(!s)return;c();let e=e=>{i.current&&!i.current.contains(e.target)&&d.current&&!d.current.contains(e.target)&&n(!1)};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[s,c]),(0,r.useEffect)(()=>{n(!1)},[e]);let u=f.find(t=>t.value===e)||f[0],p="completed"===e,m="in_progress"===e;return(0,t.jsxs)("div",{className:"relative flex-shrink-0",ref:i,children:[(0,t.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),a&&n(!s)},className:`w-4 h-4 rounded-full border-[1.5px] flex items-center justify-center transition-all
3
3
  hover:scale-110 focus-visible:outline-2 focus-visible:outline-[var(--ring)]
4
4
  ${a?"cursor-pointer":"cursor-default"}
5
- ${f?"animate-pulse":""}
6
- `,style:{borderColor:u.color,backgroundColor:p?u.color:"transparent"},title:u.label,children:[p&&(0,t.jsx)("svg",{className:"w-2.5 h-2.5 text-white",viewBox:"0 0 12 12",fill:"none",children:(0,t.jsx)("path",{d:"M2.5 6L5 8.5L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),"failed"===e&&(0,t.jsx)("svg",{className:"w-2 h-2",viewBox:"0 0 12 12",fill:"none",children:(0,t.jsx)("path",{d:"M3 3L9 9M9 3L3 9",stroke:u.color,strokeWidth:"1.5",strokeLinecap:"round"})}),f&&(0,t.jsx)("div",{className:"w-1.5 h-1.5 rounded-full",style:{backgroundColor:u.color}})]}),s&&o&&(0,m.createPortal)((0,t.jsx)("div",{ref:d,className:"fixed z-[9999] py-1 rounded-lg border shadow-lg min-w-[140px]",style:{top:o.top,left:o.left,backgroundColor:"var(--card-bg)",borderColor:"var(--card-border)"},children:x.map(r=>{let s=r.value===e;return(0,t.jsxs)("button",{type:"button",className:`w-full flex items-center gap-2 px-3 py-1.5 text-xs text-left transition-colors
5
+ ${m?"animate-pulse":""}
6
+ `,style:{borderColor:u.color,backgroundColor:p?u.color:"transparent"},title:u.label,children:[p&&(0,t.jsx)("svg",{className:"w-2.5 h-2.5 text-white",viewBox:"0 0 12 12",fill:"none",children:(0,t.jsx)("path",{d:"M2.5 6L5 8.5L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),"failed"===e&&(0,t.jsx)("svg",{className:"w-2 h-2",viewBox:"0 0 12 12",fill:"none",children:(0,t.jsx)("path",{d:"M3 3L9 9M9 3L3 9",stroke:u.color,strokeWidth:"1.5",strokeLinecap:"round"})}),m&&(0,t.jsx)("div",{className:"w-1.5 h-1.5 rounded-full",style:{backgroundColor:u.color}})]}),s&&o&&(0,x.createPortal)((0,t.jsx)("div",{ref:d,className:"fixed z-[9999] py-1 rounded-lg border shadow-lg min-w-[140px]",style:{top:o.top,left:o.left,backgroundColor:"var(--card-bg)",borderColor:"var(--card-border)"},children:f.map(r=>{let s=r.value===e;return(0,t.jsxs)("button",{type:"button",className:`w-full flex items-center gap-2 px-3 py-1.5 text-xs text-left transition-colors
7
7
  hover:bg-[var(--item-hover-bg)]
8
8
  ${s?"font-semibold bg-[var(--item-hover-bg)]":""}
9
- `,onClick:e=>{e.stopPropagation(),a?.(r.value),n(!1)},children:[(0,t.jsxs)("span",{className:"w-3 h-3 rounded-full border-[1.5px] flex items-center justify-center",style:{borderColor:r.color,backgroundColor:"completed"===r.value?r.color:"transparent"},children:["completed"===r.value&&(0,t.jsx)("svg",{className:"w-2 h-2 text-white",viewBox:"0 0 12 12",fill:"none",children:(0,t.jsx)("path",{d:"M2.5 6L5 8.5L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),"failed"===r.value&&(0,t.jsx)("svg",{className:"w-1.5 h-1.5",viewBox:"0 0 12 12",fill:"none",children:(0,t.jsx)("path",{d:"M3 3L9 9M9 3L3 9",stroke:r.color,strokeWidth:"1.5",strokeLinecap:"round"})}),"in_progress"===r.value&&(0,t.jsx)("div",{className:"w-1 h-1 rounded-full",style:{backgroundColor:r.color}})]}),(0,t.jsx)("span",{style:{color:s?r.color:void 0},children:r.label}),s&&(0,t.jsx)("svg",{className:"w-3 h-3 ml-auto",viewBox:"0 0 12 12",fill:"none",children:(0,t.jsx)("path",{d:"M2 6L5 9L10 3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})]},r.value)})}),document.body)]})}var h=e.i(353662);let g=new Map,b=new Map;async function v(e){let t=g.get(e);if(void 0!==t)return t;let r=b.get(e);if(r)return r;let a=(async()=>{let t=await fetch(`/api/tasks/${e}/graph`,{method:"GET",cache:"no-store"});if(404===t.status)return g.set(e,null),null;let r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r?.error||`Failed to fetch graph summary (${t.status})`);let a=r?.graph??null,s=a?(0,h.buildGraphSummary)(a):null;return g.set(e,s),s})();b.set(e,a);try{return await a}finally{b.delete(e)}}let j={queued:{className:"badge-status-queued",label:"Queued",dotColor:"bg-[var(--status-queued)]"},in_progress:{className:"badge-status-in_progress",label:"In Progress",dotColor:"bg-[var(--status-in-progress)]"},blocked:{className:"badge-status-blocked",label:"Blocked",dotColor:"bg-[var(--status-blocked)]"},completed:{className:"badge-status-completed",label:"Completed",dotColor:"bg-[var(--status-completed)]"},failed:{className:"badge-status-failed",label:"Failed",dotColor:"bg-[var(--status-failed)]"}},y={INTAKE:{icon:"📥",label:"Intake"},PROGRESS:{icon:"🔄",label:"Progress"},DONE:{icon:"✅",label:"Done"}};function k({task:e,onClick:a,compact:s=!1,onStatusChange:n,onApprovalModeChange:o,onStageChange:l,stageOptions:i,currentStage:d,allTasks:c,relationship:u="none"}){j[e.status||"queued"],e.stage&&y[e.stage];let{summary:p,isLoading:m}=function(e){let t=(0,r.useMemo)(()=>e?g.get(e)??null:null,[e]),[a,s]=(0,r.useState)(t),[n,o]=(0,r.useState)(!!e&&null===t),[l,i]=(0,r.useState)(null),d=(0,r.useCallback)(async()=>{if(!e){s(null),i(null),o(!1);return}o(!0),i(null);try{let t=await v(e);s(t)}catch(e){i(e instanceof Error?e.message:"Failed to fetch graph summary"),s(null)}finally{o(!1)}},[e]);return(0,r.useEffect)(()=>{d()},[d]),{summary:a,isLoading:n,error:l,refresh:d}}("draft"!==e.id?e.id:null),x=d??e.stage,h=x&&i?i.indexOf(x):-1,b=h>0&&i?i[h-1]:null,k=h>=0&&i&&h<i.length-1?i[h+1]:null,w=e.depends_on?.length?e.depends_on.map(e=>{let t=c?.find(t=>t.id===e);return{id:e,title:t?.title||e.slice(0,8),done:t?.status==="completed"}}):null;return w&&w.every(e=>e.done),(0,t.jsxs)("div",{onClick:a,role:"button",tabIndex:0,onKeyDown:e=>"Enter"===e.key&&a?.(),className:`group relative flex flex-col gap-1.5 sm:gap-2 p-2 sm:p-3 surface-card cursor-grab active:cursor-grabbing
9
+ `,onClick:e=>{e.stopPropagation(),a?.(r.value),n(!1)},children:[(0,t.jsxs)("span",{className:"w-3 h-3 rounded-full border-[1.5px] flex items-center justify-center",style:{borderColor:r.color,backgroundColor:"completed"===r.value?r.color:"transparent"},children:["completed"===r.value&&(0,t.jsx)("svg",{className:"w-2 h-2 text-white",viewBox:"0 0 12 12",fill:"none",children:(0,t.jsx)("path",{d:"M2.5 6L5 8.5L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),"failed"===r.value&&(0,t.jsx)("svg",{className:"w-1.5 h-1.5",viewBox:"0 0 12 12",fill:"none",children:(0,t.jsx)("path",{d:"M3 3L9 9M9 3L3 9",stroke:r.color,strokeWidth:"1.5",strokeLinecap:"round"})}),"in_progress"===r.value&&(0,t.jsx)("div",{className:"w-1 h-1 rounded-full",style:{backgroundColor:r.color}})]}),(0,t.jsx)("span",{style:{color:s?r.color:void 0},children:r.label}),s&&(0,t.jsx)("svg",{className:"w-3 h-3 ml-auto",viewBox:"0 0 12 12",fill:"none",children:(0,t.jsx)("path",{d:"M2 6L5 9L10 3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})]},r.value)})}),document.body)]})}var g=e.i(353662);let b=new Map,v=new Map;async function j(e){let t=b.get(e);if(void 0!==t)return t;let r=v.get(e);if(r)return r;let a=(async()=>{let t=await fetch(`/api/tasks/${e}/graph`,{method:"GET",cache:"no-store"});if(404===t.status)return b.set(e,null),null;let r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r?.error||`Failed to fetch graph summary (${t.status})`);let a=r?.graph??null,s=a?(0,g.buildGraphSummary)(a):null;return b.set(e,s),s})();v.set(e,a);try{return await a}finally{v.delete(e)}}let y={queued:{className:"badge-status-queued",label:"Queued",dotColor:"bg-[var(--status-queued)]"},in_progress:{className:"badge-status-in_progress",label:"In Progress",dotColor:"bg-[var(--status-in-progress)]"},blocked:{className:"badge-status-blocked",label:"Blocked",dotColor:"bg-[var(--status-blocked)]"},completed:{className:"badge-status-completed",label:"Completed",dotColor:"bg-[var(--status-completed)]"},failed:{className:"badge-status-failed",label:"Failed",dotColor:"bg-[var(--status-failed)]"}},k={INTAKE:{icon:"📥",label:"Intake"},PROGRESS:{icon:"🔄",label:"Progress"},DONE:{icon:"✅",label:"Done"}};function w({task:e,onClick:a,compact:s=!1,onStatusChange:n,onApprovalModeChange:o,onStageChange:l,stageOptions:i,currentStage:d,allTasks:c,relationship:u="none"}){y[e.status||"queued"],e.stage&&k[e.stage];let{summary:p,isLoading:m}=function(e){let t=(0,r.useMemo)(()=>e?b.get(e)??null:null,[e]),[a,s]=(0,r.useState)(t),[n,o]=(0,r.useState)(!!e&&null===t),[l,i]=(0,r.useState)(null),d=(0,r.useCallback)(async()=>{if(!e){s(null),i(null),o(!1);return}o(!0),i(null);try{let t=await j(e);s(t)}catch(e){i(e instanceof Error?e.message:"Failed to fetch graph summary"),s(null)}finally{o(!1)}},[e]);return(0,r.useEffect)(()=>{d()},[d]),{summary:a,isLoading:n,error:l,refresh:d}}("draft"!==e.id?e.id:null),x=d??e.stage,f=x&&i?i.indexOf(x):-1,g=f>0&&i?i[f-1]:null,v=f>=0&&i&&f<i.length-1?i[f+1]:null,w=e.depends_on?.length?e.depends_on.map(e=>{let t=c?.find(t=>t.id===e);return{id:e,title:t?.title||e.slice(0,8),done:t?.status==="completed"}}):null;return w&&w.every(e=>e.done),(0,t.jsxs)("div",{onClick:a,role:"button",tabIndex:0,onKeyDown:e=>"Enter"===e.key&&a?.(),className:`group relative flex flex-col gap-1.5 sm:gap-2 p-2 sm:p-3 surface-card cursor-grab active:cursor-grabbing
10
10
  focus-visible:outline-2 focus-visible:outline-[var(--ring)] focus-visible:outline-offset-2
11
11
  ${"active"===u?"border-primary ring-2 ring-primary/20 z-40":"blocking"===u?"border-[var(--status-blocked)] bg-rose-50/30 dark:bg-rose-950/20 z-20":"dependent"===u?"border-[var(--status-in-progress)] bg-blue-50/30 dark:bg-blue-950/20 z-20":"dimmed"===u?"opacity-40 grayscale scale-[0.98]":""}
12
12
  ${"failed"===e.status&&"none"===u?"border-red-200 bg-red-50/30 dark:bg-red-950/20":""}
13
13
  ${"completed"===e.status&&"none"===u?"opacity-75 bg-[var(--secondary)]":""}
14
14
  `,children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,t.jsxs)("h3",{className:`text-sm font-medium text-[var(--foreground)] leading-snug line-clamp-2 sm:line-clamp-3
15
15
  ${"completed"===e.status?"text-[var(--muted-foreground)] line-through":""}
16
- `,children:[e.identifier?(0,t.jsx)("span",{className:"mr-1.5 inline-block rounded bg-[var(--secondary)] px-1.5 py-0.5 align-middle font-mono text-[10px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:e.identifier}):null,e.title||"Untitled Task"]}),(0,t.jsx)("div",{className:"shrink-0 mt-0.5",children:(0,t.jsx)(f,{status:e.status||"queued",onStatusChange:n})})]}),(0,t.jsx)("div",{className:"flex items-center justify-between min-h-[16px]",children:(0,t.jsxs)("div",{className:"flex items-center gap-2 text-[10px] text-[var(--muted-foreground)] flex-wrap",children:[void 0!==e.priority&&e.priority>0&&(0,t.jsxs)("span",{className:`px-1.5 py-0.5 rounded font-semibold bg-[var(--secondary)] ${0===e.priority?"text-[var(--primary)]":""}`,children:["P",e.priority]}),o&&("auto"===e.approval_mode?(0,t.jsx)("span",{className:"px-1.5 py-0.5 rounded font-semibold bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400 cursor-pointer select-none",title:"Auto-approve enabled. Click to switch to manual.",onClick:e=>{e.stopPropagation(),o("manual")},children:"AUTO"}):(0,t.jsx)("span",{className:"px-1.5 py-0.5 rounded font-semibold bg-gray-100 text-gray-400 dark:bg-gray-800 dark:text-gray-500 cursor-pointer select-none opacity-0 group-hover:opacity-100 transition-opacity",title:"Manual approval. Click to enable auto-approve.",onClick:e=>{e.stopPropagation(),o("auto")},children:"AUTO"})),"draft"!==e.id&&!e.identifier&&(0,t.jsx)("span",{className:"opacity-0 group-hover:opacity-100 transition-opacity font-mono text-[9px]",children:e.id.slice(0,5)})]})}),l&&x&&(b||k)?(0,t.jsxs)("div",{className:"flex items-center gap-2 pt-1",children:[b?(0,t.jsxs)("button",{type:"button",className:"rounded-full border border-[var(--border)] px-2.5 py-1 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--app-shell-subtle)] hover:text-[var(--foreground)]",onClick:e=>{e.stopPropagation(),l(b)},children:["Back to ",b]}):null,k?(0,t.jsxs)("button",{type:"button",className:"rounded-full border border-[var(--border)] px-2.5 py-1 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--app-shell-subtle)] hover:text-[var(--foreground)]",onClick:e=>{e.stopPropagation(),l(k)},children:["Move to ",k]}):null]}):null]})}let w={in_progress:{title:"In Progress",icon:"🔄",color:"var(--status-in-progress)",description:"Currently being worked on by the daemon"},blocked:{title:"Blocked",icon:"🚧",color:"var(--status-blocked)",description:"Waiting for input or resolution"},queued:{title:"Queued",icon:"📋",color:"var(--status-queued)",description:"Ready to be picked up"},completed:{title:"Completed",icon:"✅",color:"var(--status-completed)",description:"Successfully finished"}};function N({tasks:e,onSelectTask:r,onStatusChange:a}){if(0===e.length)return(0,t.jsxs)("div",{className:"text-center py-20 animate-fade-in",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-[var(--card-bg)] border border-[var(--card-border)] mb-4",children:(0,t.jsx)("span",{className:"text-3xl",children:"📋"})}),(0,t.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"No tasks yet"}),(0,t.jsx)("p",{className:"text-[var(--muted-foreground)] text-sm max-w-md mx-auto",children:"Create your first task to get started. Tasks will appear here organized by status."})]});let s=e.filter(e=>"in_progress"===e.status),n=e.filter(e=>"queued"===e.status),o=e.filter(e=>"blocked"===e.status),l=e.filter(e=>"completed"===e.status||"failed"===e.status),i=(e,s)=>{if(0===s.length)return null;let n=w[e];return(0,t.jsxs)("section",{className:"mb-8 animate-fade-in-up",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 px-3 py-1.5 rounded-lg",style:{backgroundColor:`color-mix(in srgb, ${n.color} 10%, transparent)`},children:[(0,t.jsx)("span",{className:"text-lg",children:n.icon}),(0,t.jsx)("h3",{className:"text-sm font-semibold",style:{color:n.color},children:n.title}),(0,t.jsx)("span",{className:"px-2 py-0.5 rounded-full text-xs font-medium",style:{backgroundColor:`color-mix(in srgb, ${n.color} 15%, transparent)`,color:n.color},children:s.length})]}),(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] hidden sm:block",children:n.description})]}),(0,t.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:s.map((e,s)=>(0,t.jsx)("div",{className:"animate-fade-in-up",style:{animationDelay:`${50*s}ms`},children:(0,t.jsx)(k,{task:e,onClick:()=>r?.(e),onStatusChange:a?t=>a(e.id,t):void 0})},e.id))})]})};return(0,t.jsxs)("div",{children:[i("in_progress",s),i("blocked",o),i("queued",n),i("completed",l)]})}var C=e.i(827976);let E={id:"2c3cc1ca-956d-4b62-b295-4d2d3374103f",email:C.default.env.AGX_BOARD_USER_EMAIL||"local@agx.board",name:C.default.env.AGX_BOARD_USER_NAME||"Local Board User"};var S=e.i(524123);function _(){let e=(0,a.useRouter)(),s=(0,a.useSearchParams)(),{projects:n,isLoading:o,error:l,refetch:d,createProject:c,updateProject:m,deleteProject:x}=(0,S.useProjects)(),f=(0,p.useProjectFormState)(),[h,g]=(0,r.useState)(null),[b,v]=(0,r.useState)(!1),[j,y]=(0,r.useState)(null),{form:k,repos:w,handleRepoChange:N,addRepo:C,removeRepo:E,resetForm:_,hydrateFromProject:A,isSubmitting:L,setIsSubmitting:O,formError:P,setFormError:M,setForm:$}=f,I=()=>{g(null),_(),v(!0)},R=e=>{g(e),A(e),v(!0)};(0,r.useEffect)(()=>{let e=s.get("edit");if(!e||0===n.length||b)return;let t=n.find(t=>t.id===e);t&&R(t)},[s,n,b]),(0,r.useEffect)(()=>{"1"!==s.get("new")||b||(I(),e.replace("/projects"))},[s]);let B=(0,r.useCallback)(t=>{t.slug&&e.push(`/projects/${t.slug}`)},[e]),D=(0,r.useCallback)(e=>{y(e)},[]),F=(0,r.useCallback)(()=>{y(null)},[]),U=()=>{_(),v(!1),g(null),s.get("edit")&&e.replace("/projects")},q=async()=>{if(!k.name.trim())return void M("Project name is required");let t=w.find(e=>e.name.trim()&&!e.path.trim());if(t)return void M(`Local path is required for folder "${t.name}"`);M(null),O(!0);let r=(0,p.createProjectPayload)(k,w);try{if(h)await m(h.id,r),U();else{let t=await c(r);U(),e.push(`/projects/${t.slug}`)}}catch(e){M(e instanceof Error?e.message:"Failed to save project")}finally{O(!1)}},G=async e=>{if(window.confirm(`Delete project "${e.name}"? This cannot be undone.`))try{await x(e.id)}catch(e){alert(e instanceof Error?e.message:"Failed to delete project")}};return(0,t.jsx)(i,{children:(0,t.jsxs)("div",{className:"max-w-7xl mx-auto w-full flex flex-col min-h-full",children:[(0,t.jsxs)("header",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4 py-8",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{className:"text-3xl font-bold tracking-tight",children:"Projects"}),(0,t.jsx)("p",{className:"text-[var(--muted-foreground)] mt-1",children:"Manage your projects and their folder contexts."})]}),(0,t.jsxs)("div",{className:"flex gap-3",children:[(0,t.jsx)("button",{onClick:d,className:"px-4 py-2 rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] hover:border-[var(--primary)] transition-all text-sm font-medium",children:"Refresh"}),(0,t.jsx)("button",{onClick:I,className:"btn-primary px-6 py-2 shadow-lg shadow-[var(--primary)]/20",children:"+ New Project"})]})]}),o?(0,t.jsx)("div",{className:"flex-1 flex items-center justify-center py-20",children:(0,t.jsxs)("div",{className:"flex flex-col items-center gap-4",children:[(0,t.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"}),(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)] animate-pulse",children:"Loading projects..."})]})}):0===n.length?(0,t.jsxs)("div",{className:"flex-1 flex flex-col items-center justify-center py-20 animate-fade-in",children:[(0,t.jsx)("div",{className:"w-24 h-24 rounded-3xl bg-[var(--card-bg)] border border-[var(--card-border)] flex items-center justify-center text-4xl mb-6 shadow-xl",children:"📂"}),(0,t.jsx)("h2",{className:"text-2xl font-bold mb-2",children:"You have no projects"}),(0,t.jsx)("p",{className:"text-[var(--muted-foreground)] text-center max-w-sm mb-8 leading-relaxed",children:"Create your first project to start organizing your tasks and connecting your folders."}),(0,t.jsx)("button",{onClick:I,className:"btn-primary px-8 py-3 text-lg shadow-xl shadow-[var(--primary)]/20",children:"Create a Project"})]}):(0,t.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 pb-20",children:n.map(e=>(0,t.jsx)(u,{project:e,onEdit:R,onDelete:G,onManageTasks:D,onClick:B},e.id))}),(0,t.jsx)(p.default,{isOpen:b,onClose:U,onSubmit:q,editingProject:h,form:k,repos:w,isSubmitting:L,formError:P,onFieldChange:(e,t)=>$(r=>({...r,[e]:t})),onRepoChange:N,onAddRepo:C,onRemoveRepo:E}),j&&(0,t.jsx)(T,{project:j,onClose:F})]})})}function T({project:e,onClose:a}){let{tasks:s,isLoading:n}=function(e={}){let t="1"===C.default.env.NEXT_PUBLIC_AGX_BOARD_DISABLE_AUTH,a=e.project,s=e.status,n=e.orphan,o=e.realtime,[l,i]=(0,r.useState)([]),[d,c]=(0,r.useState)(!0),[u,p]=(0,r.useState)(null),[m,x]=(0,r.useState)(null),[f,h]=(0,r.useState)(null),g=(0,r.useCallback)(e=>{if(!e)return[];if(Array.isArray(e))return Array.from(new Set(e.map(e=>String(e||"").trim()).filter(Boolean)));if("string"==typeof e){let t=e.trim();if(!t)return[];try{let e=JSON.parse(t);if(Array.isArray(e))return Array.from(new Set(e.map(e=>String(e||"").trim()).filter(Boolean)))}catch{}return Array.from(new Set(t.split(",").map(e=>e.trim()).filter(Boolean)))}return[]},[]),b=(0,r.useCallback)(e=>{let t=String(e||"").match(/^---\n([\s\S]*?)\n---\n?/);if(!t)return[];let r=t[1].split("\n").find(e=>e.trim().toLowerCase().startsWith("depends_on:"));return r?g(r.slice(r.indexOf(":")+1).trim()):[]},[g]),v=(0,r.useCallback)((e,t)=>{let r=g(e.depends_on);if(r.length>0)return{...e,depends_on:r};let a="string"==typeof e?.content?b(e.content):[];if(a.length>0)return{...e,depends_on:a};let s=g(t?.depends_on);return s.length>0?{...e,depends_on:s}:e},[b,g]),j=(0,r.useCallback)(async()=>{try{let e=new URLSearchParams;a&&e.set("project",a),s&&e.set("status",s),n&&e.set("orphan","1");let t=await fetch(`/api/tasks?${e.toString()}`);if(!t.ok)throw Error("Failed to fetch tasks");let r=await t.json(),o=Array.isArray(r.tasks)?r.tasks.map(e=>v(e)):[];i(o),p(null)}catch(e){p(e instanceof Error?e:Error("Unknown error"))}finally{c(!1)}},[a,s,n]);(0,r.useEffect)(()=>{j()},[j]),(0,r.useEffect)(()=>{if(!t||!o)return;let e=setInterval(j,3e3);return()=>clearInterval(e)},[t,o,j]),(0,r.useEffect)(()=>{if(t||!o)return;let e={auth:{getSession:async()=>({data:{session:{access_token:"local-token",refresh_token:"local-refresh",expires_in:3600,user:{id:E.id,email:E.email,user_metadata:{name:E.name,full_name:E.name}}}},error:null}),signInWithOAuth:async()=>({error:Error("Auth disabled in AGX Board local mode")}),signOut:async()=>({error:null}),onAuthStateChange:()=>({data:{subscription:{unsubscribe(){}}}})},channel:()=>({on(){return this},subscribe(){return this}}),removeChannel(){}},r=e.channel("tasks-changes").on("postgres_changes",{event:"*",schema:"public",table:"tasks"},e=>{"INSERT"===e.eventType?i(t=>{let r=v(e.new);return t.some(e=>e.id===r.id)?t:[r,...t]}):"UPDATE"===e.eventType?i(t=>t.map(t=>t.id===e.new.id?v(e.new,t):t)):"DELETE"===e.eventType&&i(t=>t.filter(t=>t.id!==e.old.id))}).subscribe();return()=>{e.removeChannel(r)}},[o,t]),(0,r.useEffect)(()=>{if(t||!o)return;let e=setInterval(j,3e3);return()=>clearInterval(e)},[o,t,j]);let y=(0,r.useCallback)(async(e,t)=>{let r=await fetch("/api/tasks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:e,swarm_models:t})});if(!r.ok)throw Error((await r.json()).error||"Failed to create task");let{task:a}=await r.json(),s=v(a);return i(e=>e.some(e=>e.id===s.id)?e:[s,...e]),s},[e.realtime,v]),k=(0,r.useCallback)(async(e,t)=>{let r=await fetch(`/api/tasks/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!r.ok){let e=null;throw"function"==typeof r.json&&(e=await r.json().catch(e=>(console.warn("[useTasks] failed to parse response:",e),null))),Error(e?.error||e?.details||`Failed to update task (${r.status} ${r.statusText||"Error"})`)}let{task:a}=await r.json();return i(t=>t.map(t=>t.id===e?v({...t,...a},t):t)),v(a)},[e.realtime,v]),w=(0,r.useCallback)(async e=>{if(!(await fetch(`/api/tasks/${e}`,{method:"DELETE"})).ok)throw Error("Failed to delete task");i(t=>t.filter(t=>t.id!==e))},[e.realtime]),N=(0,r.useCallback)(async e=>{let t=await fetch("/api/queue/complete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error((await t.json().catch(()=>({}))).error||"Failed to complete task stage");let{task:r}=await t.json();return i(t=>t.map(t=>t.id===e.taskId?v({...t,...r},t):t)),v(r)},[e.realtime,v]),S=(0,r.useCallback)(async e=>{x(e.taskId),h(null);try{let t=await fetch(`/api/orchestrator/tasks/${e.taskId}/cancel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e.reason?{reason:e.reason}:{})});if(!t.ok){let e=await t.json().catch(()=>({})),r=e?.error||"Failed to cancel workflow";throw Error(r)}return t.json()}catch(t){let e=t instanceof Error?t:Error("Failed to cancel workflow");throw h(e),e}finally{x(null)}},[]),_=(0,r.useCallback)(async e=>{let t=await fetch(`/api/tasks/${e}`),r=await t.json().catch(e=>(console.warn("[useTasks] failed to parse response:",e),null));if(!t.ok)throw Error(r?.error||"Failed to fetch task details");return v(r?.task)},[v]),T=(0,r.useCallback)(async e=>{let t=await fetch("/api/tasks/assign-orphans",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({project_id:e})}),r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r?.error||"Failed to assign orphan tasks");return await j(),{updatedCount:Number(r?.updatedCount||0),taskIds:Array.isArray(r?.taskIds)?r.taskIds:[]}},[j]);return{tasks:l,isLoading:d,error:u,cancellingTaskId:m,isCancelling:!!m,cancelError:f,refetch:j,createTask:y,updateTask:k,deleteTask:w,completeTaskStage:N,cancelWorkflow:S,fetchTask:_,assignOrphanTasksToProject:T}}({project:e.slug});return(0,t.jsx)("div",{className:"modal-backdrop p-2 sm:p-4 z-50 overflow-y-auto flex items-center justify-center",onClick:e=>e.target===e.currentTarget&&a(),children:(0,t.jsxs)("div",{className:"modal-content w-full max-w-5xl mx-2 sm:mx-auto bg-[var(--card-bg)] rounded-3xl border border-[var(--card-border)] shadow-2xl animate-scale-in flex flex-col max-h-[90vh]",children:[(0,t.jsxs)("div",{className:"px-4 py-4 sm:px-8 sm:py-6 border-b border-[var(--card-border)] flex items-center justify-between flex-shrink-0",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("h2",{className:"text-xl font-bold",children:["Tasks for ",e.name]}),(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5",children:"Viewing all tasks associated with this project."})]}),(0,t.jsx)("button",{onClick:a,className:"p-2 rounded-xl hover:bg-[var(--muted)]/50 transition-colors",children:(0,t.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),(0,t.jsx)("div",{className:"flex-1 overflow-y-auto p-8",children:n?(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center py-20",children:[(0,t.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full mb-4"}),(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"Loading project tasks..."})]}):(0,t.jsx)(N,{tasks:s})}),(0,t.jsx)("div",{className:"px-8 py-6 border-t border-[var(--card-border)] flex justify-end flex-shrink-0",children:(0,t.jsx)("button",{onClick:a,className:"px-6 py-2 rounded-xl border border-[var(--card-border)] hover:bg-[var(--muted)]/50 transition-colors text-sm font-medium",children:"Close"})})]})})}e.s(["default",()=>_],936381)}]);
16
+ `,children:[e.identifier?(0,t.jsx)("span",{className:"mr-1.5 inline-block rounded bg-[var(--secondary)] px-1.5 py-0.5 align-middle font-mono text-[10px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:e.identifier}):null,e.title||"Untitled Task"]}),(0,t.jsx)("div",{className:"shrink-0 mt-0.5",children:(0,t.jsx)(h,{status:e.status||"queued",onStatusChange:n})})]}),(0,t.jsx)("div",{className:"flex items-center justify-between min-h-[16px]",children:(0,t.jsxs)("div",{className:"flex items-center gap-2 text-[10px] text-[var(--muted-foreground)] flex-wrap",children:[void 0!==e.priority&&e.priority>0&&(0,t.jsxs)("span",{className:`px-1.5 py-0.5 rounded font-semibold bg-[var(--secondary)] ${0===e.priority?"text-[var(--primary)]":""}`,children:["P",e.priority]}),o&&("auto"===e.approval_mode?(0,t.jsx)("span",{className:"px-1.5 py-0.5 rounded font-semibold bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400 cursor-pointer select-none",title:"Auto-approve enabled. Click to switch to manual.",onClick:e=>{e.stopPropagation(),o("manual")},children:"AUTO"}):(0,t.jsx)("span",{className:"px-1.5 py-0.5 rounded font-semibold bg-gray-100 text-gray-400 dark:bg-gray-800 dark:text-gray-500 cursor-pointer select-none opacity-0 group-hover:opacity-100 transition-opacity",title:"Manual approval. Click to enable auto-approve.",onClick:e=>{e.stopPropagation(),o("auto")},children:"AUTO"})),"draft"!==e.id&&!e.identifier&&(0,t.jsx)("span",{className:"opacity-0 group-hover:opacity-100 transition-opacity font-mono text-[9px]",children:e.id.slice(0,5)})]})}),l&&x&&(g||v)?(0,t.jsxs)("div",{className:"flex items-center gap-2 pt-1",children:[g?(0,t.jsxs)("button",{type:"button",className:"rounded-full border border-[var(--border)] px-2.5 py-1 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--app-shell-subtle)] hover:text-[var(--foreground)]",onClick:e=>{e.stopPropagation(),l(g)},children:["Back to ",g]}):null,v?(0,t.jsxs)("button",{type:"button",className:"rounded-full border border-[var(--border)] px-2.5 py-1 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--app-shell-subtle)] hover:text-[var(--foreground)]",onClick:e=>{e.stopPropagation(),l(v)},children:["Move to ",v]}):null]}):null]})}let N={in_progress:{title:"In Progress",icon:"🔄",color:"var(--status-in-progress)",description:"Currently being worked on by the daemon"},blocked:{title:"Blocked",icon:"🚧",color:"var(--status-blocked)",description:"Waiting for input or resolution"},queued:{title:"Queued",icon:"📋",color:"var(--status-queued)",description:"Ready to be picked up"},completed:{title:"Completed",icon:"✅",color:"var(--status-completed)",description:"Successfully finished"}};function C({tasks:e,onSelectTask:r,onStatusChange:a}){if(0===e.length)return(0,t.jsxs)("div",{className:"text-center py-20 animate-fade-in",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-[var(--card-bg)] border border-[var(--card-border)] mb-4",children:(0,t.jsx)("span",{className:"text-3xl",children:"📋"})}),(0,t.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"No tasks yet"}),(0,t.jsx)("p",{className:"text-[var(--muted-foreground)] text-sm max-w-md mx-auto",children:"Create your first task to get started. Tasks will appear here organized by status."})]});let s=e.filter(e=>"in_progress"===e.status),n=e.filter(e=>"queued"===e.status),o=e.filter(e=>"blocked"===e.status),l=e.filter(e=>"completed"===e.status||"failed"===e.status),i=(e,s)=>{if(0===s.length)return null;let n=N[e];return(0,t.jsxs)("section",{className:"mb-8 animate-fade-in-up",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 px-3 py-1.5 rounded-lg",style:{backgroundColor:`color-mix(in srgb, ${n.color} 10%, transparent)`},children:[(0,t.jsx)("span",{className:"text-lg",children:n.icon}),(0,t.jsx)("h3",{className:"text-sm font-semibold",style:{color:n.color},children:n.title}),(0,t.jsx)("span",{className:"px-2 py-0.5 rounded-full text-xs font-medium",style:{backgroundColor:`color-mix(in srgb, ${n.color} 15%, transparent)`,color:n.color},children:s.length})]}),(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] hidden sm:block",children:n.description})]}),(0,t.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:s.map((e,s)=>(0,t.jsx)("div",{className:"animate-fade-in-up",style:{animationDelay:`${50*s}ms`},children:(0,t.jsx)(w,{task:e,onClick:()=>r?.(e),onStatusChange:a?t=>a(e.id,t):void 0})},e.id))})]})};return(0,t.jsxs)("div",{children:[i("in_progress",s),i("blocked",o),i("queued",n),i("completed",l)]})}var E=e.i(827976);let S={id:"2c3cc1ca-956d-4b62-b295-4d2d3374103f",email:E.default.env.AGX_BOARD_USER_EMAIL||"local@agx.board",name:E.default.env.AGX_BOARD_USER_NAME||"Local Board User"};var _=e.i(524123);function T(){let e=(0,a.useRouter)(),s=(0,a.useSearchParams)(),{projects:n,isLoading:o,error:l,refetch:d,createProject:c,updateProject:x,deleteProject:f}=(0,_.useProjects)(),h=(0,p.useProjectFormState)(),[g,b]=(0,r.useState)(null),[v,j]=(0,r.useState)(!1),[y,k]=(0,r.useState)(null),{form:w,repos:N,handleRepoChange:C,addRepo:E,removeRepo:S,resetForm:T,hydrateFromProject:O,isSubmitting:L,setIsSubmitting:P,formError:M,setFormError:I,setForm:R}=h,$=()=>{b(null),T(),j(!0)},D=e=>{b(e),O(e),j(!0)};(0,r.useEffect)(()=>{let e=s.get("edit");if(!e||0===n.length||v)return;let t=n.find(t=>t.id===e);t&&D(t)},[s,n,v]),(0,r.useEffect)(()=>{"1"!==s.get("new")||v||($(),e.replace("/projects"))},[s]);let B=(0,r.useCallback)(t=>{t.slug&&e.push(`/projects/${t.slug}`)},[e]),F=(0,r.useCallback)(e=>{k(e)},[]),U=(0,r.useCallback)(()=>{k(null)},[]),q=()=>{T(),j(!1),b(null),s.get("edit")&&e.replace("/projects")},G=async()=>{if(!w.name.trim())return void I("Project name is required");let t=(0,m.findInvalidProjectRepoDraft)(N);if(t)return void I((0,m.formatInvalidProjectRepoDraftMessage)(t));I(null),P(!0);let r=(0,p.createProjectPayload)(w,N);try{if(g)await x(g.id,r),q();else{let t=await c(r);q(),e.push(`/projects/${t.slug}`)}}catch(e){I(e instanceof Error?e.message:"Failed to save project")}finally{P(!1)}},J=async e=>{if(window.confirm(`Delete project "${e.name}"? This cannot be undone.`))try{await f(e.id)}catch(e){alert(e instanceof Error?e.message:"Failed to delete project")}};return(0,t.jsx)(i,{children:(0,t.jsxs)("div",{className:"max-w-7xl mx-auto w-full flex flex-col min-h-full",children:[(0,t.jsxs)("header",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4 py-8",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{className:"text-3xl font-bold tracking-tight",children:"Projects"}),(0,t.jsx)("p",{className:"text-[var(--muted-foreground)] mt-1",children:"Manage your projects and their folder contexts."})]}),(0,t.jsxs)("div",{className:"flex gap-3",children:[(0,t.jsx)("button",{onClick:d,className:"px-4 py-2 rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] hover:border-[var(--primary)] transition-all text-sm font-medium",children:"Refresh"}),(0,t.jsx)("button",{onClick:$,className:"btn-primary px-6 py-2 shadow-lg shadow-[var(--primary)]/20",children:"+ New Project"})]})]}),o?(0,t.jsx)("div",{className:"flex-1 flex items-center justify-center py-20",children:(0,t.jsxs)("div",{className:"flex flex-col items-center gap-4",children:[(0,t.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"}),(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)] animate-pulse",children:"Loading projects..."})]})}):0===n.length?(0,t.jsxs)("div",{className:"flex-1 flex flex-col items-center justify-center py-20 animate-fade-in",children:[(0,t.jsx)("div",{className:"w-24 h-24 rounded-3xl bg-[var(--card-bg)] border border-[var(--card-border)] flex items-center justify-center text-4xl mb-6 shadow-xl",children:"📂"}),(0,t.jsx)("h2",{className:"text-2xl font-bold mb-2",children:"You have no projects"}),(0,t.jsx)("p",{className:"text-[var(--muted-foreground)] text-center max-w-sm mb-8 leading-relaxed",children:"Create your first project to connect your tickets, repos, and agent teams — and start shipping PRs."}),(0,t.jsx)("button",{onClick:$,className:"btn-primary px-8 py-3 text-lg shadow-xl shadow-[var(--primary)]/20",children:"Create a Project"})]}):(0,t.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 pb-20",children:n.map(e=>(0,t.jsx)(u,{project:e,onEdit:D,onDelete:J,onManageTasks:F,onClick:B},e.id))}),(0,t.jsx)(p.default,{isOpen:v,onClose:q,onSubmit:G,editingProject:g,form:w,repos:N,isSubmitting:L,formError:M,onFieldChange:(e,t)=>R(r=>({...r,[e]:t})),onRepoChange:C,onAddRepo:E,onRemoveRepo:S}),y&&(0,t.jsx)(A,{project:y,onClose:U})]})})}function A({project:e,onClose:a}){let{tasks:s,isLoading:n}=function(e={}){let t="1"===E.default.env.NEXT_PUBLIC_AGX_BOARD_DISABLE_AUTH,a=e.project,s=e.status,n=e.orphan,o=e.realtime,[l,i]=(0,r.useState)([]),[d,c]=(0,r.useState)(!0),[u,p]=(0,r.useState)(null),[m,x]=(0,r.useState)(null),[f,h]=(0,r.useState)(null),g=(0,r.useCallback)(e=>{if(!e)return[];if(Array.isArray(e))return Array.from(new Set(e.map(e=>String(e||"").trim()).filter(Boolean)));if("string"==typeof e){let t=e.trim();if(!t)return[];try{let e=JSON.parse(t);if(Array.isArray(e))return Array.from(new Set(e.map(e=>String(e||"").trim()).filter(Boolean)))}catch{}return Array.from(new Set(t.split(",").map(e=>e.trim()).filter(Boolean)))}return[]},[]),b=(0,r.useCallback)(e=>{let t=String(e||"").match(/^---\n([\s\S]*?)\n---\n?/);if(!t)return[];let r=t[1].split("\n").find(e=>e.trim().toLowerCase().startsWith("depends_on:"));return r?g(r.slice(r.indexOf(":")+1).trim()):[]},[g]),v=(0,r.useCallback)((e,t)=>{let r=g(e.depends_on);if(r.length>0)return{...e,depends_on:r};let a="string"==typeof e?.content?b(e.content):[];if(a.length>0)return{...e,depends_on:a};let s=g(t?.depends_on);return s.length>0?{...e,depends_on:s}:e},[b,g]),j=(0,r.useCallback)(async()=>{try{let e=new URLSearchParams;a&&e.set("project",a),s&&e.set("status",s),n&&e.set("orphan","1");let t=await fetch(`/api/tasks?${e.toString()}`);if(!t.ok)throw Error("Failed to fetch tasks");let r=await t.json(),o=Array.isArray(r.tasks)?r.tasks.map(e=>v(e)):[];i(o),p(null)}catch(e){p(e instanceof Error?e:Error("Unknown error"))}finally{c(!1)}},[a,s,n]);(0,r.useEffect)(()=>{j()},[j]),(0,r.useEffect)(()=>{if(!t||!o)return;let e=setInterval(j,3e3);return()=>clearInterval(e)},[t,o,j]),(0,r.useEffect)(()=>{if(t||!o)return;let e={auth:{getSession:async()=>({data:{session:{access_token:"local-token",refresh_token:"local-refresh",expires_in:3600,user:{id:S.id,email:S.email,user_metadata:{name:S.name,full_name:S.name}}}},error:null}),signInWithOAuth:async()=>({error:Error("Auth disabled in AGX Board local mode")}),signOut:async()=>({error:null}),onAuthStateChange:()=>({data:{subscription:{unsubscribe(){}}}})},channel:()=>({on(){return this},subscribe(){return this}}),removeChannel(){}},r=e.channel("tasks-changes").on("postgres_changes",{event:"*",schema:"public",table:"tasks"},e=>{"INSERT"===e.eventType?i(t=>{let r=v(e.new);return t.some(e=>e.id===r.id)?t:[r,...t]}):"UPDATE"===e.eventType?i(t=>t.map(t=>t.id===e.new.id?v(e.new,t):t)):"DELETE"===e.eventType&&i(t=>t.filter(t=>t.id!==e.old.id))}).subscribe();return()=>{e.removeChannel(r)}},[o,t]),(0,r.useEffect)(()=>{if(t||!o)return;let e=setInterval(j,3e3);return()=>clearInterval(e)},[o,t,j]);let y=(0,r.useCallback)(async(e,t)=>{let r=await fetch("/api/tasks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:e,swarm_models:t})});if(!r.ok)throw Error((await r.json()).error||"Failed to create task");let{task:a}=await r.json(),s=v(a);return i(e=>e.some(e=>e.id===s.id)?e:[s,...e]),s},[e.realtime,v]),k=(0,r.useCallback)(async(e,t)=>{let r=await fetch(`/api/tasks/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!r.ok){let e=null;throw"function"==typeof r.json&&(e=await r.json().catch(e=>(console.warn("[useTasks] failed to parse response:",e),null))),Error(e?.error||e?.details||`Failed to update task (${r.status} ${r.statusText||"Error"})`)}let{task:a}=await r.json();return i(t=>t.map(t=>t.id===e?v({...t,...a},t):t)),v(a)},[e.realtime,v]),w=(0,r.useCallback)(async e=>{if(!(await fetch(`/api/tasks/${e}`,{method:"DELETE"})).ok)throw Error("Failed to delete task");i(t=>t.filter(t=>t.id!==e))},[e.realtime]),N=(0,r.useCallback)(async e=>{let t=await fetch("/api/queue/complete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error((await t.json().catch(()=>({}))).error||"Failed to complete task stage");let{task:r}=await t.json();return i(t=>t.map(t=>t.id===e.taskId?v({...t,...r},t):t)),v(r)},[e.realtime,v]),C=(0,r.useCallback)(async e=>{x(e.taskId),h(null);try{let t=await fetch(`/api/orchestrator/tasks/${e.taskId}/cancel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e.reason?{reason:e.reason}:{})});if(!t.ok){let e=await t.json().catch(()=>({})),r=e?.error||"Failed to cancel workflow";throw Error(r)}return t.json()}catch(t){let e=t instanceof Error?t:Error("Failed to cancel workflow");throw h(e),e}finally{x(null)}},[]),_=(0,r.useCallback)(async e=>{let t=await fetch(`/api/tasks/${e}`),r=await t.json().catch(e=>(console.warn("[useTasks] failed to parse response:",e),null));if(!t.ok)throw Error(r?.error||"Failed to fetch task details");return v(r?.task)},[v]),T=(0,r.useCallback)(async e=>{let t=await fetch("/api/tasks/assign-orphans",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({project_id:e})}),r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r?.error||"Failed to assign orphan tasks");return await j(),{updatedCount:Number(r?.updatedCount||0),taskIds:Array.isArray(r?.taskIds)?r.taskIds:[]}},[j]);return{tasks:l,isLoading:d,error:u,cancellingTaskId:m,isCancelling:!!m,cancelError:f,refetch:j,createTask:y,updateTask:k,deleteTask:w,completeTaskStage:N,cancelWorkflow:C,fetchTask:_,assignOrphanTasksToProject:T}}({project:e.slug});return(0,t.jsx)("div",{className:"modal-backdrop p-2 sm:p-4 z-50 overflow-y-auto flex items-center justify-center",onClick:e=>e.target===e.currentTarget&&a(),children:(0,t.jsxs)("div",{className:"modal-content w-full max-w-5xl mx-2 sm:mx-auto bg-[var(--card-bg)] rounded-3xl border border-[var(--card-border)] shadow-2xl animate-scale-in flex flex-col max-h-[90vh]",children:[(0,t.jsxs)("div",{className:"px-4 py-4 sm:px-8 sm:py-6 border-b border-[var(--card-border)] flex items-center justify-between flex-shrink-0",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("h2",{className:"text-xl font-bold",children:["Tasks for ",e.name]}),(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5",children:"Viewing all tasks associated with this project."})]}),(0,t.jsx)("button",{onClick:a,className:"p-2 rounded-xl hover:bg-[var(--muted)]/50 transition-colors",children:(0,t.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),(0,t.jsx)("div",{className:"flex-1 overflow-y-auto p-8",children:n?(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center py-20",children:[(0,t.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full mb-4"}),(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"Loading project tasks..."})]}):(0,t.jsx)(C,{tasks:s})}),(0,t.jsx)("div",{className:"px-8 py-6 border-t border-[var(--card-border)] flex justify-end flex-shrink-0",children:(0,t.jsx)("button",{onClick:a,className:"px-6 py-2 rounded-xl border border-[var(--card-border)] hover:bg-[var(--muted)]/50 transition-colors text-sm font-medium",children:"Close"})})]})})}e.s(["default",()=>T],936381)}]);
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,506420,(e,t,s)=>{t.exports=e.r(27944)},279992,e=>{"use strict";var t=e.i(762281),s=e.i(935851),r=e.i(506420);function a(){let e=(0,r.useRouter)(),a=(0,r.useSearchParams)(),[o,i]=(0,s.useState)(null),[n,l]=(0,s.useState)(null),[d,c]=(0,s.useState)(null),[u,m]=(0,s.useState)(null),[g,h]=(0,s.useState)(null),[p,x]=(0,s.useState)(null),[v,f]=(0,s.useState)(null),[b,j]=(0,s.useState)([]),[y,N]=(0,s.useState)(new Set),[w,S]=(0,s.useState)(""),[_,k]=(0,s.useState)("all"),[C,I]=(0,s.useState)(!0),[$,z]=(0,s.useState)(!1),[M,P]=(0,s.useState)(null);(0,s.useEffect)(()=>{let e=a.get("access_token"),t=sessionStorage.getItem("github_token"),s=e||t;if(!s){P("Missing access token"),I(!1);return}if(e){let t=a.get("refresh_token"),s=a.get("expires_in"),r=a.get("scope"),o=a.get("session"),n=a.get("login"),d=a.get("expires_at");i(e),l(t),c(s),m(r),h(o),x(n),f(d),sessionStorage.setItem("github_token",e),t&&sessionStorage.setItem("github_refresh_token",t),s&&sessionStorage.setItem("github_expires_in",s),r&&sessionStorage.setItem("github_scope",r),o&&sessionStorage.setItem("github_session",o),n&&sessionStorage.setItem("github_login",n),d&&sessionStorage.setItem("github_expires_at",d),window.history.replaceState({},"","/integrations/github/select-repos")}else i(s),l(sessionStorage.getItem("github_refresh_token")),c(sessionStorage.getItem("github_expires_in")),m(sessionStorage.getItem("github_scope")),h(sessionStorage.getItem("github_session")),x(sessionStorage.getItem("github_login")),f(sessionStorage.getItem("github_expires_at"))},[a]),(0,s.useEffect)(()=>{o&&(async()=>{try{let e={Authorization:`token ${o}`,Accept:"application/vnd.github+json","User-Agent":"agx","X-GitHub-Api-Version":"2022-11-28"},t=[],s=1;for(;s<=10;){let r=`https://api.github.com/user/repos?per_page=100&page=${s}&visibility=all&affiliation=owner,collaborator,organization_member&sort=updated`,a=await fetch(r,{headers:e});if(!a.ok)throw Error(`Failed to fetch repos: ${a.status}`);let o=await a.json();if(t.push(...o),o.length<100)break;s++}j(t),I(!1)}catch(e){P(e instanceof Error?e.message:"Failed to fetch repos"),I(!1)}})()},[o]);let A=(0,s.useMemo)(()=>{let e=w.trim().toLowerCase();return b.filter(t=>("public"!==_||!t.private)&&("private"!==_||!!t.private)&&(!e||t.full_name.toLowerCase().includes(e)||(t.description??"").toLowerCase().includes(e)))},[b,w,_]),E=A.length>0&&A.every(e=>y.has(e.id)),T=async()=>{if(!o||0===y.size)return;z(!0);let t=b.filter(e=>y.has(e.id));try{await Promise.all(t.map(e=>fetch("/api/github/repos",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({owner:e.owner.login,name:e.name,private:e.private})})))}catch(e){P(e instanceof Error?e.message:"Failed to save repos"),z(!1);return}let s=new URLSearchParams({access_token:o,repos:t.map(e=>e.full_name).join(",")});n&&s.set("refresh_token",n),d&&s.set("expires_in",d),u&&s.set("scope",u),g&&s.set("session",g),p&&s.set("login",p),v&&s.set("expires_at",v),u&&s.set("scopes",u),e.push(`/api/trackers/github/token-receive?${s.toString()}`)};return(0,t.jsx)("div",{className:"min-h-screen bg-[var(--background)] text-[var(--foreground)]",children:(0,t.jsxs)("div",{className:"max-w-3xl mx-auto px-6 py-10",children:[(0,t.jsxs)("header",{className:"mb-6",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-xs text-[var(--muted-foreground)] mb-2",children:[(0,t.jsx)("span",{children:"GitHub"}),(0,t.jsx)("span",{children:"·"}),(0,t.jsx)("span",{children:"Connect"})]}),(0,t.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"Select repositories"}),(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)] mt-1",children:"Pick the repos you want agx to track. You can change this later in project settings."}),u&&(0,t.jsxs)("p",{className:"text-[11px] text-[var(--muted-foreground)] mt-2 font-mono",children:["Token scopes: ",u]})]}),M?(0,t.jsx)("div",{className:"rounded-lg border border-[var(--status-failed-border)] bg-[var(--status-failed-bg)] text-[var(--status-failed)] px-4 py-3 text-sm",children:M}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex flex-col sm:flex-row gap-2 mb-3",children:[(0,t.jsxs)("div",{className:"relative flex-1",children:[(0,t.jsxs)("svg",{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--muted-foreground)]",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,t.jsx)("path",{d:"m21 21-4.3-4.3"})]}),(0,t.jsx)("input",{type:"text",value:w,onChange:e=>S(e.target.value),placeholder:"Search repositories...",className:"w-full pl-9 pr-3 py-2 rounded-lg border border-[var(--border)] bg-[var(--input)] text-sm focus:outline-none focus:border-[var(--primary)] focus:bg-[var(--input-focus)] transition-colors"})]}),(0,t.jsx)("div",{className:"flex gap-1 rounded-lg border border-[var(--border)] p-1",children:["all","public","private"].map(e=>(0,t.jsx)("button",{onClick:()=>k(e),className:`px-3 py-1 text-xs rounded-md capitalize transition-colors ${_===e?"bg-[var(--primary)] text-[var(--primary-foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}`,children:e},e))})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between mb-2 text-xs text-[var(--muted-foreground)]",children:[(0,t.jsxs)("button",{onClick:()=>{N(e=>{let t=new Set(e);return E?A.forEach(e=>t.delete(e.id)):A.forEach(e=>t.add(e.id)),t})},disabled:0===A.length,className:"hover:text-[var(--foreground)] transition-colors disabled:opacity-50",children:[E?"Deselect all":"Select all",w||"all"!==_?` (${A.length} shown)`:""]}),y.size>0&&(0,t.jsx)("button",{onClick:()=>N(new Set),className:"hover:text-[var(--foreground)] transition-colors",children:"Clear selection"})]}),(0,t.jsx)("div",{className:"rounded-lg border border-[var(--border)] bg-[var(--card-bg)] overflow-hidden",children:(0,t.jsx)("div",{className:"max-h-[60vh] overflow-y-auto",children:C?(0,t.jsx)("div",{className:"divide-y divide-[var(--border)]",children:Array.from({length:6}).map((e,s)=>(0,t.jsxs)("div",{className:"px-4 py-3 flex items-center gap-3 animate-pulse",children:[(0,t.jsx)("div",{className:"w-4 h-4 rounded bg-[var(--muted)]"}),(0,t.jsx)("div",{className:"w-6 h-6 rounded-full bg-[var(--muted)]"}),(0,t.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,t.jsx)("div",{className:"h-3 w-1/3 rounded bg-[var(--muted)]"}),(0,t.jsx)("div",{className:"h-2 w-2/3 rounded bg-[var(--muted)]"})]})]},s))}):0===A.length?(0,t.jsx)("div",{className:"px-4 py-10 text-center text-sm text-[var(--muted-foreground)]",children:0===b.length?"No repositories found on your account.":"No repos match your search."}):(0,t.jsx)("ul",{className:"divide-y divide-[var(--border)]",children:A.map(e=>{let s=y.has(e.id);return(0,t.jsx)("li",{children:(0,t.jsxs)("label",{className:`flex items-start gap-3 px-4 py-3 cursor-pointer transition-colors ${s?"bg-[var(--primary-muted)]":"hover:bg-[var(--item-hover-bg)]"}`,children:[(0,t.jsx)("input",{type:"checkbox",checked:s,onChange:()=>{var t;return t=e.id,void N(e=>{let s=new Set(e);return s.has(t)?s.delete(t):s.add(t),s})},className:"mt-1 accent-[var(--primary)]"}),(0,t.jsx)("img",{src:e.owner.avatar_url,alt:"",className:"w-6 h-6 rounded-full mt-0.5 flex-shrink-0"}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,t.jsx)("span",{className:"text-sm font-medium truncate",children:e.full_name}),e.private&&(0,t.jsx)("span",{className:"text-[10px] uppercase tracking-wide px-1.5 py-0.5 rounded bg-[var(--muted)] text-[var(--muted-foreground)]",children:"Private"})]}),e.description&&(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5 line-clamp-1",children:e.description}),(0,t.jsxs)("div",{className:"text-[11px] text-[var(--muted-foreground)] mt-0.5",children:["Updated ",function(e){let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);if(t<60)return"just now";let s=Math.floor(t/60);if(s<60)return`${s}m ago`;let r=Math.floor(s/60);if(r<24)return`${r}h ago`;let a=Math.floor(r/24);if(a<30)return`${a}d ago`;let o=Math.floor(a/30);return o<12?`${o}mo ago`:`${Math.floor(o/12)}y ago`}(e.updated_at)]})]})]})},e.id)})})})}),(0,t.jsxs)("div",{className:"flex items-center justify-between mt-4",children:[(0,t.jsxs)("span",{className:"text-sm text-[var(--muted-foreground)]",children:[y.size," selected"]}),(0,t.jsx)("button",{onClick:T,disabled:0===y.size||$,className:"px-4 py-2 rounded-lg bg-[var(--primary)] hover:bg-[var(--primary-hover)] text-[var(--primary-foreground)] text-sm font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:$?"Connecting...":`Continue with ${y.size} ${1===y.size?"repo":"repos"}`})]})]})]})})}e.s(["default",()=>a])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,506420,(e,t,s)=>{t.exports=e.r(27944)},279992,e=>{"use strict";var t=e.i(762281),s=e.i(935851),r=e.i(506420);function a(){let e=(0,r.useRouter)(),a=(0,r.useSearchParams)(),[o,i]=(0,s.useState)(null),[n,l]=(0,s.useState)(null),[d,c]=(0,s.useState)(null),[u,m]=(0,s.useState)(null),[g,h]=(0,s.useState)(null),[p,x]=(0,s.useState)(null),[v,f]=(0,s.useState)(null),[b,j]=(0,s.useState)([]),[y,N]=(0,s.useState)(new Set),[w,S]=(0,s.useState)(""),[_,k]=(0,s.useState)("all"),[C,I]=(0,s.useState)(!0),[$,z]=(0,s.useState)(!1),[M,P]=(0,s.useState)(null);(0,s.useEffect)(()=>{let e=a.get("access_token"),t=sessionStorage.getItem("github_token"),s=e||t;if(!s){P("Missing access token"),I(!1);return}if(e){let t=a.get("refresh_token"),s=a.get("expires_in"),r=a.get("scope"),o=a.get("session"),n=a.get("login"),d=a.get("expires_at");i(e),l(t),c(s),m(r),h(o),x(n),f(d),sessionStorage.setItem("github_token",e),t&&sessionStorage.setItem("github_refresh_token",t),s&&sessionStorage.setItem("github_expires_in",s),r&&sessionStorage.setItem("github_scope",r),o&&sessionStorage.setItem("github_session",o),n&&sessionStorage.setItem("github_login",n),d&&sessionStorage.setItem("github_expires_at",d),window.history.replaceState({},"","/integrations/github/select-repos")}else i(s),l(sessionStorage.getItem("github_refresh_token")),c(sessionStorage.getItem("github_expires_in")),m(sessionStorage.getItem("github_scope")),h(sessionStorage.getItem("github_session")),x(sessionStorage.getItem("github_login")),f(sessionStorage.getItem("github_expires_at"))},[a]),(0,s.useEffect)(()=>{o&&(async()=>{try{let e={Authorization:`token ${o}`,Accept:"application/vnd.github+json","User-Agent":"agx","X-GitHub-Api-Version":"2022-11-28"},t=[],s=1;for(;s<=10;){let r=`https://api.github.com/user/repos?per_page=100&page=${s}&visibility=all&affiliation=owner,collaborator,organization_member&sort=updated`,a=await fetch(r,{headers:e});if(!a.ok)throw Error(`Failed to fetch repos: ${a.status}`);let o=await a.json();if(t.push(...o),o.length<100)break;s++}j(t),I(!1)}catch(e){P(e instanceof Error?e.message:"Failed to fetch repos"),I(!1)}})()},[o]);let A=(0,s.useMemo)(()=>{let e=w.trim().toLowerCase();return b.filter(t=>("public"!==_||!t.private)&&("private"!==_||!!t.private)&&(!e||t.full_name.toLowerCase().includes(e)||(t.description??"").toLowerCase().includes(e)))},[b,w,_]),E=A.length>0&&A.every(e=>y.has(e.id)),T=async()=>{if(!o||0===y.size)return;z(!0);let t=b.filter(e=>y.has(e.id));try{await Promise.all(t.map(e=>fetch("/api/github/repos",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({owner:e.owner.login,name:e.name,private:e.private})})))}catch(e){P(e instanceof Error?e.message:"Failed to save repos"),z(!1);return}let s=new URLSearchParams({access_token:o,repos:t.map(e=>e.full_name).join(",")});n&&s.set("refresh_token",n),d&&s.set("expires_in",d),u&&s.set("scope",u),g&&s.set("session",g),p&&s.set("login",p),v&&s.set("expires_at",v),u&&s.set("scopes",u),e.push(`/api/trackers/github/token-receive?${s.toString()}`)};return(0,t.jsx)("div",{className:"min-h-screen bg-[var(--background)] text-[var(--foreground)]",children:(0,t.jsxs)("div",{className:"max-w-3xl mx-auto px-6 py-10",children:[(0,t.jsxs)("header",{className:"mb-6",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-xs text-[var(--muted-foreground)] mb-2",children:[(0,t.jsx)("span",{children:"GitHub"}),(0,t.jsx)("span",{children:"·"}),(0,t.jsx)("span",{children:"Connect"})]}),(0,t.jsx)("h1",{className:"text-2xl font-semibold tracking-tight",children:"Select repositories"}),(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)] mt-1",children:"Pick the repos you want agx to track. You can change this later in project settings."}),u&&(0,t.jsxs)("p",{className:"text-[11px] text-[var(--muted-foreground)] mt-2 font-mono",children:["Token scopes: ",u]})]}),M?(0,t.jsx)("div",{className:"rounded-lg border border-[var(--status-failed-border)] bg-[var(--status-failed-bg)] text-[var(--status-failed)] px-4 py-3 text-sm",children:M}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex flex-col sm:flex-row gap-2 mb-3",children:[(0,t.jsxs)("div",{className:"relative flex-1",children:[(0,t.jsxs)("svg",{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--muted-foreground)]",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,t.jsx)("path",{d:"m21 21-4.3-4.3"})]}),(0,t.jsx)("input",{type:"text",value:w,onChange:e=>S(e.target.value),placeholder:"Search repositories...",className:"w-full pl-9 pr-3 py-2 rounded-lg border border-[var(--border)] bg-[var(--input)] text-sm focus:outline-none focus:border-[var(--primary)] focus:bg-[var(--input-focus)] transition-colors"})]}),(0,t.jsx)("div",{className:"flex gap-1 rounded-lg border border-[var(--border)] p-1",children:["all","public","private"].map(e=>(0,t.jsx)("button",{onClick:()=>k(e),className:`px-3 py-1 text-xs rounded-md capitalize transition-colors ${_===e?"bg-[var(--primary)] text-[var(--primary-foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}`,children:e},e))})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between mb-2 text-xs text-[var(--muted-foreground)]",children:[(0,t.jsxs)("button",{onClick:()=>{N(e=>{let t=new Set(e);return E?A.forEach(e=>t.delete(e.id)):A.forEach(e=>t.add(e.id)),t})},disabled:0===A.length,className:"hover:text-[var(--foreground)] transition-colors disabled:opacity-50",children:[E?"Deselect all":"Select all",w||"all"!==_?` (${A.length} shown)`:""]}),y.size>0&&(0,t.jsx)("button",{onClick:()=>N(new Set),className:"hover:text-[var(--foreground)] transition-colors",children:"Clear selection"})]}),(0,t.jsx)("div",{className:"rounded-lg border border-[var(--border)] bg-[var(--card-bg)] overflow-hidden",children:(0,t.jsx)("div",{className:"max-h-[60vh] overflow-y-auto",children:C?(0,t.jsx)("div",{className:"divide-y divide-[var(--border)]",children:Array.from({length:6}).map((e,s)=>(0,t.jsxs)("div",{className:"px-4 py-3 flex items-center gap-3 animate-pulse",children:[(0,t.jsx)("div",{className:"w-4 h-4 rounded bg-[var(--muted)]"}),(0,t.jsx)("div",{className:"w-6 h-6 rounded-full bg-[var(--muted)]"}),(0,t.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,t.jsx)("div",{className:"h-3 w-1/3 rounded bg-[var(--muted)]"}),(0,t.jsx)("div",{className:"h-2 w-2/3 rounded bg-[var(--muted)]"})]})]},s))}):0===A.length?(0,t.jsx)("div",{className:"px-4 py-10 text-center text-sm text-[var(--muted-foreground)]",children:0===b.length?"No repositories found on your account.":"No repos match your search."}):(0,t.jsx)("ul",{className:"divide-y divide-[var(--border)]",children:A.map(e=>{let s=y.has(e.id);return(0,t.jsx)("li",{children:(0,t.jsxs)("label",{className:`flex items-start gap-3 px-4 py-3 cursor-pointer transition-colors ${s?"bg-[var(--primary-muted)]":"hover:bg-[var(--item-hover-bg)]"}`,children:[(0,t.jsx)("input",{type:"checkbox",checked:s,onChange:()=>{var t;return t=e.id,void N(e=>{let s=new Set(e);return s.has(t)?s.delete(t):s.add(t),s})},className:"mt-1 accent-[var(--primary)]"}),(0,t.jsx)("img",{src:e.owner.avatar_url,alt:"",className:"w-6 h-6 rounded-full mt-0.5 flex-shrink-0"}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,t.jsx)("span",{className:"text-sm font-medium truncate",children:e.full_name}),e.private&&(0,t.jsx)("span",{className:"text-[10px] uppercase tracking-wide px-1.5 py-0.5 rounded bg-[var(--muted)] text-[var(--muted-foreground)]",children:"Private"})]}),e.description&&(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5 line-clamp-1",children:e.description}),(0,t.jsxs)("div",{className:"text-[11px] text-[var(--muted-foreground)] mt-0.5",children:["Updated ",function(e){let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);if(t<60)return"just now";let s=Math.floor(t/60);if(s<60)return`${s}m ago`;let r=Math.floor(s/60);if(r<24)return`${r}h ago`;let a=Math.floor(r/24);if(a<30)return`${a}d ago`;let o=Math.floor(a/30);return o<12?`${o}mo ago`:`${Math.floor(o/12)}y ago`}(e.updated_at)]})]})]})},e.id)})})})}),(0,t.jsxs)("div",{className:"flex items-center justify-between mt-4",children:[(0,t.jsxs)("span",{className:"text-sm text-[var(--muted-foreground)]",children:[y.size," selected"]}),(0,t.jsx)("button",{onClick:T,disabled:0===y.size||$,className:"px-4 py-2 rounded-lg bg-[var(--primary)] hover:bg-[var(--primary-hover)] text-[var(--primary-foreground)] text-sm font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:$?"Connecting...":`Continue with ${y.size} ${1===y.size?"repo":"repos"}`})]})]})]})})}e.s(["default",()=>a,"dynamic",0,"force-dynamic"])}]);
@@ -0,0 +1,16 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,558201,e=>{"use strict";let t=(0,e.i(363732).default)("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);e.s(["Terminal",()=>t],558201)},203096,e=>{"use strict";let t=(0,e.i(363732).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);e.s(["RefreshCw",()=>t],203096)},741746,e=>{"use strict";let t=(0,e.i(363732).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);e.s(["AlertCircle",()=>t],741746)},352687,e=>{"use strict";var t=e.i(762281),s=e.i(935851);function r({isOpen:e,title:r,message:a,preview:l,confirmLabel:n="Confirm",cancelLabel:i="Cancel",variant:o="default",onConfirm:c,onCancel:d}){let u=(0,s.useRef)(null),x=(0,s.useRef)(null);(0,s.useEffect)(()=>{if(e){let e=setTimeout(()=>u.current?.focus(),50);return()=>clearTimeout(e)}},[e]);let m=(0,s.useCallback)(e=>{"Escape"===e.key&&d()},[d]);if(!e)return null;let h="danger"===o;return(0,t.jsxs)("div",{className:"fixed inset-0 z-[100] flex items-center justify-center bg-black/50 backdrop-blur-md",style:{animation:"confirm-overlay-in 200ms ease-out"},onClick:e=>e.target===e.currentTarget&&d(),onKeyDown:m,children:[(0,t.jsxs)("div",{ref:x,className:"w-full max-w-md mx-4 bg-[var(--card-bg)] rounded-2xl border border-[var(--card-border)] shadow-2xl overflow-hidden",style:{animation:"confirm-dialog-in 250ms cubic-bezier(0.34, 1.56, 0.64, 1)"},children:[(0,t.jsx)("div",{className:"px-6 pt-6 pb-3",children:(0,t.jsxs)("div",{className:"flex items-start gap-4",children:[h&&(0,t.jsx)("div",{className:"flex-shrink-0 w-11 h-11 rounded-full bg-red-500/10 border border-red-500/20 flex items-center justify-center",children:(0,t.jsx)("svg",{className:"w-5 h-5 text-red-500",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"})})}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)("h3",{className:"text-[15px] font-semibold text-[var(--foreground)]",children:r}),(0,t.jsx)("p",{className:"mt-1 text-[13px] text-[var(--muted-foreground)] leading-relaxed",children:a})]})]})}),l&&(0,t.jsx)("div",{className:"mx-6 mb-3 px-3 py-2.5 rounded-lg bg-[var(--muted)]/40 border border-[var(--card-border)]",children:(0,t.jsxs)("p",{className:"text-[12px] text-[var(--muted-foreground)] line-clamp-3 leading-relaxed italic",children:["“",l,"”"]})}),(0,t.jsx)("div",{className:"mx-6 border-t border-[var(--card-border)]"}),(0,t.jsxs)("div",{className:"px-6 py-4 flex items-center justify-end gap-2.5",children:[(0,t.jsx)("button",{onClick:d,className:"px-4 py-2 rounded-lg text-[13px] font-medium text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--muted)]/60 transition-all duration-150",children:i}),(0,t.jsx)("button",{ref:u,onClick:c,className:`px-4 py-2 rounded-lg text-[13px] font-medium transition-all duration-150 ${h?"bg-red-500 text-white hover:bg-red-600 active:scale-[0.97]":"btn-primary active:scale-[0.97]"}`,children:n})]})]}),(0,t.jsx)("style",{children:`
2
+ @keyframes confirm-overlay-in {
3
+ from { opacity: 0; }
4
+ to { opacity: 1; }
5
+ }
6
+ @keyframes confirm-dialog-in {
7
+ from {
8
+ opacity: 0;
9
+ transform: scale(0.9) translateY(10px);
10
+ }
11
+ to {
12
+ opacity: 1;
13
+ transform: scale(1) translateY(0);
14
+ }
15
+ }
16
+ `})]})}e.s(["default",()=>r])},807087,e=>{"use strict";let t=(0,e.i(363732).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["CheckCircle2",()=>t],807087)},287472,e=>{"use strict";var t=e.i(935851);let s=new Map;function r(e){let t=s.get(e);return t?Date.now()-t.ts>3e5?(s.delete(e),null):t:null}function a(e){s.delete(e)}function l(e,l){let[n,i]=(0,t.useState)(!1),[o,c]=(0,t.useState)(!0),[d,u]=(0,t.useState)(null),[x,m]=(0,t.useState)({claude:!1,codex:!1,gemini:!1}),[h,p]=(0,t.useState)({}),f=(0,t.useRef)(null),g=`/api/trackers/${encodeURIComponent(e)}`,v=`${e}:${l}`,b=(0,t.useCallback)(async()=>{try{let e=await fetch(`${g}/mcp-setup`),t=await e.json();p(t.configured??{})}catch{}},[g]),j=(0,t.useCallback)(async()=>{if(!l)return i(!1),!1;let e=r(v);if(e)return i(e.connected),u(e.user),m(e.clis),p(e.mcpConfigured),c(!1),e.connected;try{var t;let e=`?projectId=${encodeURIComponent(l)}`,[r,a]=await Promise.all([fetch(`${g}/status${e}`),fetch(`${g}/mcp-setup`)]),n=await r.json(),o=await a.json(),c=n.clis??{claude:!1,codex:!1,gemini:!1},d=o.configured??{},x=n.user??null;return i(n.connected),u(x),m(c),p(d),t={connected:n.connected,user:x,clis:c,mcpConfigured:d},s.set(v,{...t,ts:Date.now()}),n.connected}catch{return i(!1),!1}finally{c(!1)}},[l,g,v]);(0,t.useEffect)(()=>{let e=r(v);e?(i(e.connected),u(e.user),m(e.clis),p(e.mcpConfigured),c(!1)):(c(!0),i(!1),u(null))},[e,l,v]),(0,t.useEffect)(()=>(j(),()=>{f.current&&clearInterval(f.current)}),[j]);let y=(0,t.useCallback)(()=>{l&&(a(v),window.open(`${g}/auth?projectId=${encodeURIComponent(l)}`,"_blank","noopener"),f.current&&clearInterval(f.current),f.current=setInterval(async()=>{a(v),await j()&&f.current&&(clearInterval(f.current),f.current=null)},2e3))},[l,g,v,j]),w=(0,t.useCallback)(async e=>{if(!l)return{ok:!1,error:"Missing projectId"};try{let t=await fetch(`${g}/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:l,accessToken:e})});if(!t.ok){let e=await t.json().catch(()=>({}));return{ok:!1,error:e.error||"Failed to save token"}}return a(v),await j(),{ok:!0}}catch{return{ok:!1,error:"Failed to connect"}}},[l,g,v,j]);return{connected:n,loading:o,user:d,clis:x,mcpConfigured:h,connect:y,connectWithKey:w,disconnect:(0,t.useCallback)(async()=>{l&&(a(v),await fetch(`${g}/status?projectId=${encodeURIComponent(l)}`,{method:"DELETE"}),"github"===e&&Object.keys(sessionStorage).filter(e=>e.startsWith("github_")).forEach(e=>sessionStorage.removeItem(e)),i(!1),u(null))},[l,g,v,e]),configureMcp:(0,t.useCallback)(async e=>{try{let t=await fetch(`${g}/mcp-setup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cli:e})});if(!t.ok){let e=await t.json().catch(()=>({}));return{ok:!1,error:e.error||"Failed to configure MCP"}}return await b(),{ok:!0}}catch{return{ok:!1,error:"Failed to configure MCP"}}},[g,b]),refresh:j}}e.s(["useTrackerConnection",()=>l])},711190,e=>{"use strict";let t=(0,e.i(363732).default)("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]]);e.s(["LogOut",()=>t],711190)},637790,166735,e=>{"use strict";var t=e.i(363732);let s=(0,t.default)("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);e.s(["Key",()=>s],637790);let r=(0,t.default)("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);e.s(["Globe",()=>r],166735)},202192,457242,e=>{"use strict";var t=e.i(762281),s=e.i(935851),r=e.i(807087),a=e.i(637790),l=e.i(166735),n=e.i(906724),i=e.i(741746),o=e.i(558201),c=e.i(711190),d=e.i(681619),u=e.i(929870),x=e.i(797167),m=e.i(203096);let h=(0,e.i(363732).default)("pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]);function p({projectId:e}){let[r,a]=(0,s.useState)([]),[l,i]=(0,s.useState)(!0),[o,c]=(0,s.useState)(null),[d,p]=(0,s.useState)(null),[f,g]=(0,s.useState)(!1),[v,b]=(0,s.useState)([]),[j,y]=(0,s.useState)(!1),[w,N]=(0,s.useState)(null),[k,C]=(0,s.useState)(""),[S,L]=(0,s.useState)("all"),[P,T]=(0,s.useState)(new Set),[$,A]=(0,s.useState)(!1),M=(0,s.useCallback)(async()=>{try{let e=await fetch("/api/github/repos",{cache:"no-store"});if(!e.ok)throw Error("Failed to load repos");let t=await e.json();a(t.repos??[]),c(null)}catch{c("Failed to load repositories")}finally{i(!1)}},[]);(0,s.useEffect)(()=>{M()},[M]);let z=(0,s.useCallback)((e,t)=>`${e}/${t}`.toLowerCase(),[]),I=(0,s.useMemo)(()=>new Set(r.map(e=>z(e.owner,e.name))),[r,z]),E=(0,s.useCallback)(async()=>{if(g(!0),T(new Set),C(""),L("all"),!(v.length>0)){y(!0),N(null);try{let t=await fetch(`/api/github/user-repos?projectId=${encodeURIComponent(e)}`,{cache:"no-store"});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e?.error??"Failed to fetch repos")}let s=await t.json();b(s.repos??[])}catch(e){N(e instanceof Error?e.message:"Failed to fetch repos")}finally{y(!1)}}},[e,v.length]),R=()=>{g(!1)};(0,s.useEffect)(()=>{if(!f)return;let e=e=>{"Escape"===e.key&&R()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[f]);let F=(0,s.useMemo)(()=>{let e=[],t=[];for(let s of v)I.has(z(s.owner,s.name))?e.push(s):t.push(s);return[...e,...t]},[v,I,z]),O=(0,s.useMemo)(()=>{let e=k.trim().toLowerCase();return F.filter(t=>("public"!==S||!t.private)&&("private"!==S||!!t.private)&&(!e||t.fullName.toLowerCase().includes(e)||(t.description??"").toLowerCase().includes(e)))},[F,k,S]),D=(0,s.useMemo)(()=>O.filter(e=>!I.has(z(e.owner,e.name))),[O,I,z]),U=D.length>0&&D.every(e=>P.has(e.id)),K=async()=>{if(0!==P.size){A(!0);try{let e=v.filter(e=>P.has(e.id));await Promise.all(e.map(e=>fetch("/api/github/repos",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({owner:e.owner,name:e.name,defaultBranch:e.defaultBranch,private:e.private})}))),await M(),R()}finally{A(!1)}}},B=(0,s.useCallback)(async e=>{p(e);try{await fetch("/api/github/repos",{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({id:e})}),await M()}finally{p(null)}},[M]);return(0,t.jsxs)("div",{className:"w-full max-w-md space-y-4",children:[(0,t.jsxs)("div",{className:"border rounded-xl p-5 flex flex-col gap-4",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h4",{className:"text-sm font-medium",children:"Attached repositories"}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Repos the local agent watches for PRs, reviews, and comments."})]}),(0,t.jsxs)("button",{type:"button",onClick:E,className:"text-xs px-2.5 py-1.5 rounded border hover:bg-accent inline-flex items-center gap-1",children:[(0,t.jsx)(u.Plus,{className:"w-3.5 h-3.5"}),"Add"]})]}),l?(0,t.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,t.jsx)(n.Loader2,{className:"w-4 h-4 animate-spin"}),"Loading repositories…"]}):o?(0,t.jsx)("p",{className:"text-sm text-destructive",children:o}):0===r.length?(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"No repositories attached yet."}):(0,t.jsx)("ul",{className:"divide-y",children:r.map(e=>(0,t.jsxs)("li",{className:"flex items-center justify-between py-2",children:[(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsxs)("span",{className:"text-sm font-mono",children:[e.owner,"/",e.name]}),(0,t.jsxs)("span",{className:"text-xs text-muted-foreground",children:[e.defaultBranch??"no default branch",e.private?" · private":" · public",e.accessRevoked?" · access revoked":""]})]}),(0,t.jsx)("button",{type:"button",onClick:()=>B(e.id),disabled:d===e.id,className:"p-1.5 rounded hover:bg-accent disabled:opacity-50",title:"Remove",children:(0,t.jsx)(x.X,{className:"w-3.5 h-3.5"})})]},e.id))})]}),(0,t.jsxs)("div",{className:"border rounded-xl p-5 flex items-center justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h4",{className:"text-sm font-medium",children:"Sync"}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Pull the latest PRs, reviews, and comments for attached repos."})]}),(0,t.jsxs)("button",{type:"button",onClick:()=>alert("Sync will run when worker is scheduled"),className:"text-xs px-3 py-1.5 rounded border hover:bg-accent inline-flex items-center gap-1.5",children:[(0,t.jsx)(m.RefreshCw,{className:"w-3.5 h-3.5"}),"Sync now"]})]}),f&&(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:R,children:(0,t.jsxs)("div",{className:"w-full max-w-3xl max-h-[90vh] flex flex-col rounded-xl border border-[var(--border)] bg-[var(--background)] text-[var(--foreground)] shadow-2xl",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("header",{className:"px-6 py-5 border-b border-[var(--border)] flex items-start justify-between gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-xs text-[var(--muted-foreground)] mb-1",children:[(0,t.jsx)("span",{children:"GitHub"}),(0,t.jsx)("span",{children:"·"}),(0,t.jsx)("span",{children:"Attach repositories"})]}),(0,t.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Select repositories"}),(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)] mt-1",children:"Pick the repos you want agx to track. Already-attached repos are pinned at the top."})]}),(0,t.jsx)("button",{onClick:R,className:"p-1.5 rounded hover:bg-[var(--item-hover-bg)] text-[var(--muted-foreground)]","aria-label":"Close",children:(0,t.jsx)(x.X,{className:"w-4 h-4"})})]}),(0,t.jsx)("div",{className:"px-6 py-4 flex-1 overflow-hidden flex flex-col",children:w?(0,t.jsx)("div",{className:"rounded-lg border border-[var(--status-failed-border)] bg-[var(--status-failed-bg)] text-[var(--status-failed)] px-4 py-3 text-sm",children:w}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex flex-col sm:flex-row gap-2 mb-3",children:[(0,t.jsxs)("div",{className:"relative flex-1",children:[(0,t.jsxs)("svg",{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--muted-foreground)]",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,t.jsx)("path",{d:"m21 21-4.3-4.3"})]}),(0,t.jsx)("input",{type:"text",value:k,onChange:e=>C(e.target.value),placeholder:"Search repositories...",className:"w-full pl-9 pr-3 py-2 rounded-lg border border-[var(--border)] bg-[var(--input)] text-sm focus:outline-none focus:border-[var(--primary)] focus:bg-[var(--input-focus)] transition-colors"})]}),(0,t.jsx)("div",{className:"flex gap-1 rounded-lg border border-[var(--border)] p-1",children:["all","public","private"].map(e=>(0,t.jsx)("button",{onClick:()=>L(e),className:`px-3 py-1 text-xs rounded-md capitalize transition-colors ${S===e?"bg-[var(--primary)] text-[var(--primary-foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}`,children:e},e))})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between mb-2 text-xs text-[var(--muted-foreground)]",children:[(0,t.jsxs)("button",{onClick:()=>{T(e=>{let t=new Set(e);return U?D.forEach(e=>t.delete(e.id)):D.forEach(e=>t.add(e.id)),t})},disabled:0===D.length,className:"hover:text-[var(--foreground)] transition-colors disabled:opacity-50",children:[U?"Deselect all":"Select all",k||"all"!==S?` (${D.length} shown)`:""]}),P.size>0&&(0,t.jsx)("button",{onClick:()=>T(new Set),className:"hover:text-[var(--foreground)] transition-colors",children:"Clear selection"})]}),(0,t.jsx)("div",{className:"rounded-lg border border-[var(--border)] bg-[var(--card-bg)] overflow-hidden flex-1 min-h-0",children:(0,t.jsx)("div",{className:"h-full overflow-y-auto",children:j?(0,t.jsx)("div",{className:"divide-y divide-[var(--border)]",children:Array.from({length:6}).map((e,s)=>(0,t.jsxs)("div",{className:"px-4 py-3 flex items-center gap-3 animate-pulse",children:[(0,t.jsx)("div",{className:"w-4 h-4 rounded bg-[var(--muted)]"}),(0,t.jsx)("div",{className:"w-6 h-6 rounded-full bg-[var(--muted)]"}),(0,t.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,t.jsx)("div",{className:"h-3 w-1/3 rounded bg-[var(--muted)]"}),(0,t.jsx)("div",{className:"h-2 w-2/3 rounded bg-[var(--muted)]"})]})]},s))}):0===O.length?(0,t.jsx)("div",{className:"px-4 py-10 text-center text-sm text-[var(--muted-foreground)]",children:0===v.length?"No repositories found on your account.":"No repos match your search."}):(0,t.jsx)("ul",{className:"divide-y divide-[var(--border)]",children:O.map(e=>{let s=I.has(z(e.owner,e.name)),r=P.has(e.id);return(0,t.jsx)("li",{children:(0,t.jsxs)("label",{className:`flex items-start gap-3 px-4 py-3 transition-colors ${s?"bg-[var(--primary-muted)]/40 cursor-default":r?"bg-[var(--primary-muted)] cursor-pointer":"hover:bg-[var(--item-hover-bg)] cursor-pointer"}`,children:[s?(0,t.jsx)("div",{className:"mt-1 w-4 h-4 rounded-sm bg-[var(--primary)]/20 text-[var(--primary)] flex items-center justify-center",title:"Already attached",children:(0,t.jsx)(h,{className:"w-2.5 h-2.5"})}):(0,t.jsx)("input",{type:"checkbox",checked:r,onChange:()=>{!I.has(z(e.owner,e.name))&&T(t=>{let s=new Set(t);return s.has(e.id)?s.delete(e.id):s.add(e.id),s})},className:"mt-1 accent-[var(--primary)]"}),(0,t.jsx)("img",{src:e.avatarUrl,alt:"",className:"w-6 h-6 rounded-full mt-0.5 flex-shrink-0"}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,t.jsx)("span",{className:"text-sm font-medium truncate",children:e.fullName}),s&&(0,t.jsxs)("span",{className:"text-[10px] uppercase tracking-wide px-1.5 py-0.5 rounded bg-[var(--primary)]/15 text-[var(--primary)] flex items-center gap-1",children:[(0,t.jsx)(h,{className:"w-2.5 h-2.5"}),"Attached"]}),e.private&&(0,t.jsx)("span",{className:"text-[10px] uppercase tracking-wide px-1.5 py-0.5 rounded bg-[var(--muted)] text-[var(--muted-foreground)]",children:"Private"})]}),e.description&&(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5 line-clamp-1",children:e.description}),(0,t.jsxs)("div",{className:"text-[11px] text-[var(--muted-foreground)] mt-0.5",children:["Updated ",function(e){let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);if(t<60)return"just now";let s=Math.floor(t/60);if(s<60)return`${s}m ago`;let r=Math.floor(s/60);if(r<24)return`${r}h ago`;let a=Math.floor(r/24);if(a<30)return`${a}d ago`;let l=Math.floor(a/30);return l<12?`${l}mo ago`:`${Math.floor(l/12)}y ago`}(e.updatedAt)]})]})]})},e.id)})})})})]})}),(0,t.jsxs)("footer",{className:"px-6 py-4 border-t border-[var(--border)] flex items-center justify-between gap-3",children:[(0,t.jsxs)("span",{className:"text-sm text-[var(--muted-foreground)]",children:[P.size," selected"]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)("button",{onClick:R,className:"px-4 py-2 rounded-lg border border-[var(--border)] hover:bg-[var(--item-hover-bg)] text-sm font-medium transition-colors",children:"Cancel"}),(0,t.jsx)("button",{onClick:K,disabled:0===P.size||$,className:"px-4 py-2 rounded-lg bg-[var(--primary)] hover:bg-[var(--primary-hover)] text-[var(--primary-foreground)] text-sm font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:$?"Attaching...":`Attach ${P.size} ${1===P.size?"repo":"repos"}`})]})]})]})})]})}e.s(["Pin",()=>h],457242);var f=e.i(352687);let g={claude:{name:"Claude Code",configPath:"~/.claude/settings.json"},codex:{name:"Codex CLI",configPath:"~/.codex/config.toml"},gemini:{name:"Gemini CLI",configPath:"~/.gemini/settings.json"}};function v({trackerType:e,projectId:u,connected:x,onConnect:m,onConnectWithKey:h,onDisconnect:v,loading:b=!1,clis:j,mcpConfigured:y,onConfigureMcp:w}){let[N,k]=s.default.useState(""),[C,S]=s.default.useState(null),[L,P]=s.default.useState(!1),[T,$]=s.default.useState(!1),[A,M]=s.default.useState(null),[z,I]=s.default.useState({}),[E,R]=s.default.useState(!1),F=async e=>{if(!w)return;M(e),I(t=>({...t,[e]:""}));let t=await w(e);t.ok||I(s=>({...s,[e]:t.error??"Failed to install MCP"})),M(null)},O=j?["claude","codex","gemini"].filter(e=>j[e]):["claude"];if(b)return(0,t.jsx)("div",{className:"flex items-center justify-center p-12",children:(0,t.jsx)(n.Loader2,{className:"animate-spin h-8 w-8 text-muted-foreground"})});if(x)return(0,t.jsxs)("div",{className:"p-8 flex flex-col items-center gap-6",children:[(0,t.jsxs)("div",{className:"w-full max-w-md p-8 border border-green-500/20 bg-green-500/5 rounded-2xl flex flex-col items-center gap-4 text-center",children:[(0,t.jsx)("div",{className:"h-16 w-16 rounded-full bg-green-500/10 flex items-center justify-center text-green-600 shadow-inner",children:(0,t.jsx)(r.CheckCircle2,{className:"h-8 w-8"})}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("h3",{className:"text-xl font-bold text-foreground capitalize",children:[e," Connected"]}),(0,t.jsxs)("p",{className:"text-sm text-muted-foreground leading-relaxed",children:["Your ",e," tickets now live in AGX. Assign them to agents, review the work, and ship PRs from one window."]})]}),(0,t.jsxs)("div",{className:"mt-2 px-4 py-1.5 rounded-full bg-background border text-xs font-medium text-muted-foreground flex items-center gap-2",children:[(0,t.jsx)("div",{className:"h-1.5 w-1.5 rounded-full bg-green-500 animate-pulse"}),"Active Connection"]}),v&&(0,t.jsxs)("button",{onClick:()=>R(!0),className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-destructive transition-colors mt-1",children:[(0,t.jsx)(c.LogOut,{className:"h-3.5 w-3.5"}),"Disconnect"]})]}),"github"===e&&(0,t.jsx)(p,{projectId:u}),v&&(0,t.jsx)(f.default,{isOpen:E,title:`Disconnect ${e}?`,message:"github"===e?"This revokes the stored credentials. Your attached repositories and synced history stay — reconnecting will resume where you left off.":`This revokes the stored credentials for ${e}. Project settings and synced history stay.`,confirmLabel:"Disconnect",cancelLabel:"Cancel",variant:"danger",onConfirm:()=>{R(!1),v()},onCancel:()=>R(!1)}),"github"!==e&&O.length>0&&(0,t.jsx)("div",{className:"w-full max-w-md",children:(0,t.jsxs)("div",{className:"border rounded-xl p-5 flex flex-col gap-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(o.Terminal,{className:"h-4 w-4 text-muted-foreground"}),(0,t.jsx)("span",{className:"text-sm font-medium",children:"MCP Server"})]}),(0,t.jsxs)("p",{className:"text-xs text-muted-foreground leading-relaxed -mt-2",children:["Connect your ",e," workspace so your tickets show up in AGX and agents can work them through to a PR."]}),O.map(e=>{let s=g[e],a=y?.[e]??!1,l=A===e,o=z[e];return(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-foreground",children:s.name}),a?(0,t.jsxs)("span",{className:"text-xs font-medium text-green-600 flex items-center gap-1",children:[(0,t.jsx)(r.CheckCircle2,{className:"h-3.5 w-3.5"}),"Installed"]}):(0,t.jsx)("button",{onClick:()=>F(e),disabled:l||!w,className:"flex items-center gap-1.5 px-3 py-1 bg-secondary text-secondary-foreground rounded-md text-xs font-semibold hover:bg-secondary/90 disabled:opacity-50 transition-all active:scale-[0.98]",children:l?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.Loader2,{className:"h-3 w-3 animate-spin"}),"Installing…"]}):(0,t.jsx)(t.Fragment,{children:"Install"})})]}),a&&(0,t.jsxs)("p",{className:"text-[10px] text-muted-foreground",children:["Configured in ",(0,t.jsx)("code",{className:"font-mono",children:s.configPath})]}),o&&(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-destructive bg-destructive/10 p-2 rounded-md",children:[(0,t.jsx)(i.AlertCircle,{className:"h-3.5 w-3.5 shrink-0"}),o]})]},e)})]})})]});let D=async()=>{if(N.trim()){$(!0),S(null);try{let e=await h(N.trim());e.ok?(k(""),P(!1)):S(e.error??"Failed to connect")}catch(e){S("An unexpected error occurred")}finally{$(!1)}}};return(0,t.jsxs)("div",{className:"flex flex-col items-center gap-6 p-8",children:[(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(d.TrackerIcon,{trackerType:e,className:"h-16 w-16"}),(0,t.jsx)("div",{className:"absolute -bottom-1 -right-1 h-6 w-6 rounded-full bg-background border flex items-center justify-center shadow-sm",children:(0,t.jsx)(l.Globe,{className:"h-3 w-3 text-muted-foreground"})})]}),(0,t.jsxs)("div",{className:"text-center space-y-2",children:[(0,t.jsxs)("h3",{className:"text-lg font-semibold capitalize",children:["Connect to ",e]}),(0,t.jsxs)("p",{className:"text-sm text-muted-foreground text-center max-w-sm leading-relaxed",children:["Link your ",e," account to import issues, track progress, and automate your workflow."]})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-3 w-full max-w-xs pt-2",children:[(0,t.jsxs)("button",{onClick:m,className:"flex items-center justify-center gap-2 w-full px-4 py-2.5 bg-primary text-primary-foreground rounded-lg text-sm font-semibold hover:bg-primary/90 transition-all active:scale-[0.98] shadow-sm",children:[(0,t.jsx)(l.Globe,{className:"h-4 w-4"}),"Connect with OAuth"]}),(0,t.jsxs)("button",{onClick:()=>{P(!L),S(null)},className:"flex items-center justify-center gap-2 w-full px-4 py-2 text-sm text-muted-foreground hover:text-foreground transition-colors font-medium",children:[(0,t.jsx)(a.Key,{className:"h-3.5 w-3.5"}),L?"Use OAuth instead":"github"===e?"Connect with Personal Access Token":"Connect with API key"]}),(0,t.jsx)("div",{className:`grid transition-all duration-300 ease-in-out ${L?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0 pointer-events-none"}`,children:(0,t.jsx)("div",{className:"overflow-hidden",children:(0,t.jsxs)("div",{className:"flex flex-col gap-3 pt-2",children:[(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{type:"password",value:N,onChange:e=>{k(e.target.value),C&&S(null)},placeholder:"github"===e?"ghp_… or github_pat_…":"Paste your API key here",className:`w-full px-3 py-2 border rounded-lg text-sm bg-background transition-colors focus:outline-none focus:ring-2 focus:ring-primary/20 ${C?"border-destructive":"focus:border-primary"}`,onKeyDown:e=>"Enter"===e.key&&D()}),(0,t.jsx)(a.Key,{className:"absolute right-3 top-2.5 h-4 w-4 text-muted-foreground/50"})]}),C&&(0,t.jsxs)("div",{className:"flex items-center gap-2 text-xs text-destructive bg-destructive/10 p-2 rounded-md",children:[(0,t.jsx)(i.AlertCircle,{className:"h-3.5 w-3.5 shrink-0"}),(0,t.jsx)("p",{children:C})]}),(0,t.jsx)("button",{onClick:D,disabled:T||!N.trim(),className:"flex items-center justify-center gap-2 w-full px-4 py-2 bg-secondary text-secondary-foreground rounded-lg text-sm font-semibold hover:bg-secondary/90 disabled:opacity-50 transition-all active:scale-[0.98]",children:T?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.Loader2,{className:"h-4 w-4 animate-spin"}),"Connecting..."]}):"Verify & Connect"}),(0,t.jsx)("p",{className:"text-[10px] text-muted-foreground text-center px-2",children:"github"===e?"Fine-grained PAT recommended. Needs repo access + read on issues/pull requests.":`Your API key is stored securely and only used for ${e} integration.`})]})})})]})]})}e.s(["default",()=>v],202192)},108537,e=>{"use strict";var t=e.i(762281),s=e.i(935851),r=e.i(429056),a=e.i(807087),l=e.i(711190);let n=(0,e.i(363732).default)("star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]);var i=e.i(202192),o=e.i(906724);let c=/^[A-Z]{2,10}$/;function d({projectId:e,trackerType:s}){return"github"===s?null:(0,t.jsx)(u,{projectId:e})}function u({projectId:e}){let[r,a]=(0,s.useState)(""),[l,n]=(0,s.useState)(null),[i,d]=(0,s.useState)(!0),[u,x]=(0,s.useState)(null),[m,h]=(0,s.useState)(null),[p,f]=(0,s.useState)(!1),[g,v]=(0,s.useState)(null),[b,j]=(0,s.useState)(null),y=(0,s.useCallback)(async()=>{d(!0);try{let t=await fetch(`/api/projects/${e}`,{cache:"no-store"});if(!t.ok)throw Error("Failed to load project");let s=await t.json(),r=s.project?.identifier_prefix??null;n(r),a(r??""),x(null)}catch{x("Failed to load project settings")}finally{d(!1)}},[e]);(0,s.useEffect)(()=>{y()},[y]);let w=(0,s.useCallback)(e=>e?c.test(e)?null:"Must be 2-10 uppercase letters (e.g. TSK, AGX).":null,[]),N=(0,s.useCallback)(async t=>{f(!0),v(null);try{let s=await fetch(`/api/projects/${e}`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({identifier_prefix:t})});if(!s.ok){let e=await s.json().catch(()=>({}));throw Error(e?.error??"Failed to save")}let r=await s.json(),l=r.project?.identifier_prefix??null;n(l),a(l??""),j(Date.now())}catch(e){v(e instanceof Error?e.message:"Failed to save")}finally{f(!1)}},[e]),k=(l??"")!==r.trim().toUpperCase();return(0,t.jsxs)("section",{className:"border border-zinc-200 dark:border-zinc-800 rounded-lg p-5 space-y-4 mx-6 mb-6",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-sm font-medium",children:"Task identifier prefix"}),(0,t.jsxs)("p",{className:"text-xs text-zinc-500 mt-0.5",children:["Used to identify tasks in branches, PR titles, and links (e.g."," ",(0,t.jsx)("span",{className:"font-mono",children:"TSK-42"}),"). Set once; existing tasks keep their current identifiers."]})]}),i?(0,t.jsxs)("div",{className:"flex items-center gap-2 text-sm text-zinc-500",children:[(0,t.jsx)(o.Loader2,{className:"w-4 h-4 animate-spin"}),"Loading..."]}):u?(0,t.jsx)("p",{className:"text-sm text-red-500",children:u}):(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{type:"text",value:r,onChange:e=>{a(e.target.value.toUpperCase()),h(null),v(null)},onBlur:e=>{h(w(e.target.value.trim().toUpperCase()))},placeholder:"TSK",maxLength:10,className:"w-40 px-2 py-1.5 text-sm font-mono rounded border border-zinc-300 dark:border-zinc-700 bg-transparent"}),(0,t.jsx)("button",{type:"button",onClick:()=>{let e=r.trim().toUpperCase(),t=w(e);t?h(t):(h(null),N(e||null))},disabled:p||!k||!!m,className:"text-xs px-3 py-1.5 rounded bg-zinc-900 text-white dark:bg-white dark:text-zinc-900 hover:opacity-90 disabled:opacity-50",children:p?"Saving...":"Save"}),l?(0,t.jsx)("button",{type:"button",onClick:()=>{h(null),N(null)},disabled:p,className:"text-xs px-3 py-1.5 rounded border border-zinc-300 dark:border-zinc-700 hover:bg-zinc-100 dark:hover:bg-zinc-800 disabled:opacity-50",children:"Clear"}):null]}),(0,t.jsxs)("p",{className:"text-xs text-zinc-500",children:["2-10 uppercase letters, matching"," ",(0,t.jsxs)("span",{className:"font-mono",children:["/^[A-Z]","{2,10}","$/"]}),"."]}),m&&(0,t.jsx)("p",{className:"text-xs text-red-500",children:m}),g&&(0,t.jsx)("p",{className:"text-xs text-red-500",children:g}),b&&!g&&!m&&(0,t.jsx)("p",{className:"text-xs text-emerald-600 dark:text-emerald-400",children:"Saved."})]})]})}var x=e.i(681619),m=e.i(524123),h=e.i(287472),p=e.i(235136);let f=[{type:"linear",label:"Linear"},{type:"jira",label:"Jira Cloud"},{type:"github",label:"GitHub"}];function g(){return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-[calc(100vh-3.5rem)] gap-8 p-8 -mt-7 animate-pulse",children:[(0,t.jsxs)("div",{className:"space-y-3 text-center flex flex-col items-center",children:[(0,t.jsx)("div",{className:"h-7 w-56 rounded-lg bg-muted"}),(0,t.jsx)("div",{className:"h-4 w-80 rounded bg-muted"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4 w-full max-w-lg",children:[0,1].map(e=>(0,t.jsxs)("div",{className:"flex flex-col items-center gap-4 p-8 rounded-xl border border-border",children:[(0,t.jsx)("div",{className:"h-16 w-16 rounded-xl bg-muted"}),(0,t.jsxs)("div",{className:"flex flex-col items-center gap-2",children:[(0,t.jsx)("div",{className:"h-4 w-20 rounded bg-muted"}),(0,t.jsx)("div",{className:"h-3 w-24 rounded bg-muted"})]})]},e))})]})}function v(){return(0,t.jsxs)("div",{className:"flex flex-col items-center gap-6 p-8 animate-pulse",children:[(0,t.jsx)("div",{className:"h-16 w-16 rounded-xl bg-muted"}),(0,t.jsxs)("div",{className:"flex flex-col items-center gap-2 w-full max-w-sm",children:[(0,t.jsx)("div",{className:"h-5 w-40 rounded bg-muted"}),(0,t.jsx)("div",{className:"h-3 w-72 rounded bg-muted"}),(0,t.jsx)("div",{className:"h-3 w-56 rounded bg-muted"})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-3 w-full max-w-xs pt-2",children:[(0,t.jsx)("div",{className:"h-10 w-full rounded-lg bg-muted"}),(0,t.jsx)("div",{className:"h-8 w-full rounded-lg bg-muted/60"})]})]})}function b({params:e}){let{slug:o}=(0,s.use)(e),{projects:c}=(0,m.useProjects)(),u=c.find(e=>e.slug===o),b=u?.id??"",{connections:j,defaultTracker:y,loading:w,removeConnection:N,setDefaultTracker:k}=(0,p.useTrackerConnections)(b),C=new Set(j.filter(e=>e.connected).map(e=>e.type)),S=C.size,[L,P]=(0,s.useState)(null),{connected:T,loading:$,connect:A,connectWithKey:M,disconnect:z,clis:I,mcpConfigured:E,configureMcp:R}=(0,h.useTrackerConnection)(L??"linear",b);return(0,t.jsx)("div",{className:"flex flex-col h-full bg-background",children:(0,t.jsx)("main",{className:"flex-1 overflow-auto",children:L?(0,t.jsx)("div",{className:"flex flex-col items-center px-6 py-12",children:(0,t.jsxs)("div",{className:"w-full max-w-2xl",children:[(0,t.jsxs)("button",{onClick:()=>P(null),className:"group flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground mb-8 transition-colors",children:[(0,t.jsx)(r.ArrowLeft,{className:"h-3 w-3 transition-transform group-hover:-translate-x-0.5"}),"Back to tracker picker"]}),(0,t.jsxs)("div",{className:"bg-card border rounded-xl shadow-sm overflow-hidden",children:[(0,t.jsx)("div",{className:"px-6 pt-8 pb-1 text-center",children:(0,t.jsxs)("h2",{className:"text-2xl font-semibold tracking-tight",children:["Connect ",f.find(e=>e.type===L)?.label??L]})}),$?(0,t.jsx)(v,{}):(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)(i.default,{projectId:b,trackerType:L,connected:T,loading:!1,onConnect:A,onConnectWithKey:M,onDisconnect:()=>{z(),P(null)},clis:I,mcpConfigured:E,onConfigureMcp:R}),(0,t.jsx)(d,{projectId:b,trackerType:L??void 0})]})]})]})}):w?(0,t.jsx)(g,{}):(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-[calc(100vh-3.5rem)] gap-8 p-8 -mt-7",children:[(0,t.jsxs)("div",{className:"space-y-2 text-center",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold tracking-tight",children:"Connect Issue Tracker"}),(0,t.jsx)("p",{className:"text-muted-foreground max-w-md mx-auto",children:"Choose an issue tracker to connect to this project to enable issue tracking and agent workflows."})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4 w-full max-w-lg",children:f.map(e=>{let s=C.has(e.type),r=y===e.type,i=s&&S>1&&!r&&"github"!==e.type;return(0,t.jsxs)("div",{className:"relative flex flex-col items-center gap-4 p-8 rounded-xl border transition-all duration-200 group cursor-pointer active:scale-[0.98] "+(s?r?"border-yellow-500/40 bg-yellow-500/5 hover:border-yellow-500/60 hover:bg-yellow-500/10":"border-green-500/20 bg-green-500/5 hover:border-green-500/40 hover:bg-green-500/10":"border-border hover:border-primary/50 hover:bg-accent/50 hover:shadow-md"),onClick:()=>P(e.type),children:[(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(x.TrackerIcon,{trackerType:e.type,className:"h-16 w-16 transition-transform group-hover:scale-105"}),s&&(0,t.jsx)("div",{className:"absolute -top-1 -right-1 h-6 w-6 rounded-full bg-green-500 border-2 border-background flex items-center justify-center text-white shadow-sm",children:(0,t.jsx)(a.CheckCircle2,{className:"h-4 w-4"})})]}),(0,t.jsxs)("div",{className:"flex flex-col items-center gap-1",children:[(0,t.jsx)("span",{className:"text-base font-semibold",children:e.label}),s?(0,t.jsxs)("span",{className:"inline-flex items-center gap-1 text-xs font-medium text-green-600",children:["Connected",r&&(0,t.jsxs)("span",{className:"inline-flex items-center gap-0.5 rounded-full bg-yellow-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-yellow-700",children:[(0,t.jsx)(n,{className:"h-3 w-3 fill-yellow-500 text-yellow-500"}),"Default"]})]}):(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"Click to connect"})]}),s&&(0,t.jsxs)("div",{className:"flex flex-col items-center gap-1.5",children:[i&&(0,t.jsxs)("button",{onClick:t=>{t.stopPropagation(),k(e.type)},className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors",children:[(0,t.jsx)(n,{className:"h-3.5 w-3.5"}),"Set as default"]}),(0,t.jsxs)("button",{onClick:t=>{t.stopPropagation(),N(e.type)},className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-destructive transition-colors",children:[(0,t.jsx)(l.LogOut,{className:"h-3.5 w-3.5"}),"Disconnect"]})]})]},e.type)})})]})})})}e.s(["default",()=>b],108537)}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,292135,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"warnOnce",{enumerable:!0,get:function(){return r}});let r=e=>{}},429056,e=>{"use strict";let t=(0,e.i(363732).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);e.s(["ArrowLeft",()=>t],429056)},716436,e=>{"use strict";let t=(0,e.i(363732).default)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);e.s(["Activity",()=>t],716436)},715908,e=>{"use strict";var t=e.i(935851);function a(e,r={}){let[s,n]=(0,t.useState)([]),[l,o]=(0,t.useState)(!0),[i,c]=(0,t.useState)(null),d=(0,t.useRef)(!1),u=r.requireProjectId??!1,h=r.includeObjectiveJobs??!1,p=r.objectiveId?.trim()||null,m=(0,t.useCallback)(async()=>{if(u&&!e){n([]),c(null),o(!1),d.current=!0;return}try{d.current||o(!0);let t=new URLSearchParams;e&&t.set("projectId",e),p&&t.set("objectiveId",p),h&&t.set("includeObjectiveJobs","true");let a=t.toString(),r=await fetch(`/api/prompt-jobs${a?`?${a}`:""}`);if(!r.ok)throw Error(`Failed to fetch: ${r.status}`);let s=await r.json();n(s.jobs??[]),c(null)}catch(e){c(e instanceof Error?e.message:String(e))}finally{o(!1),d.current=!0}},[h,p,e,u]);(0,t.useEffect)(()=>{d.current=!1,m();let e=setInterval(m,1e4);return()=>clearInterval(e)},[m]);let f=(0,t.useCallback)(async e=>{let t=await fetch("/api/prompt-jobs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)return null;let{job:a}=await t.json();return await m(),a?.id??null},[m]),x=(0,t.useCallback)(async(e,t)=>{let a=await fetch(`/api/prompt-jobs/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});return a.ok&&await m(),a.ok},[m]),g=(0,t.useCallback)(async e=>{let t=await fetch(`/api/prompt-jobs/${e}`,{method:"DELETE"});if(t.ok)return await m(),{ok:!0};let a=await t.json().catch(()=>({}));return{ok:!1,error:a.error||a.message||`Failed to delete scheduled task (${t.status})`}},[m]),v=(0,t.useCallback)(async e=>{let t="active"===e.state?"paused":"active",a=await fetch(`/api/prompt-jobs/${e.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({state:t})});return a.ok&&await m(),a.ok},[m]),b=(0,t.useCallback)(async e=>{let t=await fetch("/api/prompt-jobs/poll",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jobId:e})});return t.ok&&await m(),t.ok},[m]),j=(0,t.useCallback)(async e=>{let t=await fetch(`/api/prompt-jobs/${e}/cancel`,{method:"POST"});return t.ok&&await m(),t.ok},[m]);return{jobs:s,loading:l,error:i,refresh:m,createJob:f,updateJob:x,deleteJob:g,toggleJob:v,runNow:b,cancelRun:j,fetchRuns:(0,t.useCallback)(async e=>{let t=await fetch(`/api/prompt-jobs/${e}/runs`);return t.ok?(await t.json()).runs??[]:[]},[])}}e.s(["usePromptJobs",()=>a])},563975,e=>{"use strict";var t=e.i(762281),a=e.i(935851),r=e.i(506420),s=e.i(429056),n=e.i(169729),l=e.i(468947),o=e.i(721571),i=e.i(524780),c=e.i(716436),d=e.i(715908);let u=new Set(["spawning","running"]);function h(e,t){if(!e)return{name:"Unknown",color:"#6B7280"};let a=t.find(t=>t.id===e);return a?{name:a.name,color:a.color}:{name:e.slice(0,8),color:"#6B7280"}}var p=e.i(44054),m=e.i(884564);let f={Chat:"bg-blue-500/15 text-blue-400","Scheduled Task":"bg-amber-500/15 text-amber-400",Automation:"bg-purple-500/15 text-purple-400",Daemon:"bg-zinc-500/15 text-zinc-400"};function x({status:e}){return"running"===e?(0,t.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse shrink-0"}):"queued"===e?(0,t.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-amber-400 shrink-0"}):"failed"===e?(0,t.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-red-400 shrink-0"}):(0,t.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-zinc-500 shrink-0"})}function g({item:e}){return(0,t.jsxs)("div",{className:"flex items-center gap-2.5 px-3 py-2 hover:bg-[var(--app-shell-subtle)] transition-colors rounded-md",children:[(0,t.jsx)("img",{src:(0,m.agentAvatarUrl)(e.agentId??e.id,20,e.agentColor),alt:"",className:"h-5 w-5 rounded-full shrink-0"}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsx)(x,{status:e.status}),(0,t.jsx)("span",{className:"text-xs font-medium text-[var(--foreground)] truncate",children:e.agentName})]}),(0,t.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] truncate mt-0.5",children:e.title})]}),(0,t.jsxs)("div",{className:"flex flex-col items-end gap-0.5 shrink-0",children:[(0,t.jsx)("span",{className:`text-[9px] px-1.5 py-0.5 rounded-full font-medium ${f[e.source]??f.Daemon}`,children:e.source}),(0,t.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:function(e){let t=Date.now()-e;if(t<6e4)return"just now";let a=Math.floor(t/6e4);if(a<60)return`${a}m ago`;let r=Math.floor(a/60);return`${r}h ago`}(e.startedAt)})]})]})}function v({items:e,onClose:r}){let s=(0,a.useRef)(null);(0,a.useEffect)(()=>{let e=e=>{s.current&&!s.current.contains(e.target)&&r()},t=setTimeout(()=>document.addEventListener("pointerdown",e),0);return()=>{clearTimeout(t),document.removeEventListener("pointerdown",e)}},[r]);let n=e.filter(e=>"running"===e.status||"queued"===e.status),l=e.filter(e=>"running"!==e.status&&"queued"!==e.status);return(0,t.jsx)("div",{ref:s,className:"absolute top-full right-0 z-50 mt-1.5 w-80 max-h-96 overflow-y-auto rounded-xl border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] shadow-lg",children:0===e.length?(0,t.jsx)("div",{className:"flex flex-col items-center justify-center py-8 px-4",children:(0,t.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:"No recent activity"})}):(0,t.jsxs)("div",{className:"py-1.5",children:[n.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"px-3 py-1.5",children:(0,t.jsx)("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Active Now"})}),n.map(e=>(0,t.jsx)(g,{item:e},e.id))]}),l.length>0&&(0,t.jsxs)("div",{children:[n.length>0&&(0,t.jsx)("div",{className:"mx-3 my-1 border-t border-[var(--app-shell-border)]"}),(0,t.jsx)("div",{className:"px-3 py-1.5",children:(0,t.jsx)("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Recent"})}),l.map(e=>(0,t.jsx)(g,{item:e},e.id))]})]})})}function b({projectId:e,participants:r}){let{isTouchLayout:s}=(0,p.useInputCapabilities)(),{items:n,activeCount:l}=function(e,t){let[r,s]=(0,a.useState)([]),n=(0,a.useRef)(null),l=(0,a.useCallback)(async()=>{try{let e=await fetch("/api/processes");if(!e.ok)return;let t=await e.json();s(t)}catch{}},[]);(0,a.useEffect)(()=>(l(),n.current=setInterval(l,5e3),()=>{n.current&&clearInterval(n.current)}),[l]);let{jobs:o}=(0,d.usePromptJobs)(e),{automations:i}=function(){let[e,t]=(0,a.useState)([]),[r,s]=(0,a.useState)(!0),[n,l]=(0,a.useState)(null),o=(0,a.useCallback)(async()=>{try{s(!0);let e=await fetch("/api/automations");if(!e.ok)throw Error(`Failed to fetch: ${e.status}`);let a=await e.json();t(a.automations??[]),l(null)}catch(e){l(e instanceof Error?e.message:String(e))}finally{s(!1)}},[]);(0,a.useEffect)(()=>{o();let e=setInterval(o,1e4);return()=>clearInterval(e)},[o]);let i=(0,a.useCallback)(async e=>{let t=await fetch(`/api/tasks/${e}/graph/schedule`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"pause"})});return t.ok&&await o(),t.ok},[o]),c=(0,a.useCallback)(async e=>{let t=await fetch(`/api/tasks/${e}/graph/schedule`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"resume"})});return t.ok&&await o(),t.ok},[o]),d=(0,a.useCallback)(async e=>{let t=await fetch(`/api/tasks/${e}/graph/schedule`,{method:"DELETE"});return t.ok&&await o(),t.ok},[o]),u=(0,a.useCallback)(async e=>{let t=await fetch("/api/schedules/poll",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({taskId:e})});if(t.ok)return await o(),{ok:!0};let a=await t.json().catch(()=>({}));return await o(),{ok:!1,skipReason:a.skipReason}},[o]);return{automations:e,loading:r,error:n,refresh:o,pauseSchedule:i,resumeSchedule:c,deleteSchedule:d,runNow:u}}(),c=(0,a.useMemo)(()=>{let a=Date.now()-36e5,s=[];for(let l of r){var n;if(e&&l.projectSlug!==e)continue;let r=(n=l.state,u.has(n)?"running":"done"===n?"completed":"error"===n||"killed"===n?"failed":"completed");if("running"!==r&&l.startedAt<a)continue;let{name:o,color:i}=h(l.agentId,t);s.push({id:`proc-${l.id}`,agentId:l.agentId,agentName:o,agentColor:i,type:l.threadId?"chat-run":"process",title:l.threadId?"Chat response":"Agent process",source:l.threadId?"Chat":"Daemon",status:r,startedAt:l.startedAt,durationMs:l.lastActivity-l.startedAt})}for(let r of o){if(e&&r.projectId!==e)continue;let n="running"===r.lastOutcome||"queued"===r.lastOutcome,l=r.lastRunAt??0;if(!n&&l<a)continue;let o=n?"queued"===r.lastOutcome?"queued":"running":"success"===r.lastOutcome?"completed":"failed"===r.lastOutcome?"failed":"completed",{name:i,color:c}=h(r.agentId,t);s.push({id:`job-${r.id}`,agentId:r.agentId,agentName:i,agentColor:c,type:"prompt-job",title:r.name,source:"Scheduled Task",status:o,startedAt:l,durationMs:null})}for(let t of i){if(e&&t.projectId!==e)continue;let r="running"===t.executionState,n=new Date(t.updatedAt).getTime();(r||!(n<a))&&s.push({id:`auto-${t.taskId}`,agentId:null,agentName:t.title,agentColor:"#7C3AED",type:"automation",title:t.title,source:"Automation",status:r?"running":"completed",startedAt:n,durationMs:null})}return s.sort((e,t)=>{let a=+("running"===e.status||"queued"===e.status),r=+("running"===t.status||"queued"===t.status);return a!==r?r-a:t.startedAt-e.startedAt}),s},[r,o,i,t,e]),p=(0,a.useMemo)(()=>c.filter(e=>"running"===e.status||"queued"===e.status).length,[c]);return{items:c,activeCount:p}}(e,r),[o,i]=(0,a.useState)(!1),m=(0,a.useCallback)(()=>i(!1),[]);return(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>i(e=>!e),className:`inline-flex items-center justify-center rounded-lg text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)] hover:bg-[var(--app-shell-subtle)] ${s?"h-9 w-9":"h-7 w-7"}`,title:"Activity stream","aria-label":"Activity stream",children:[(0,t.jsx)(c.Activity,{className:s?"h-4 w-4":"h-3.5 w-3.5"}),l>0&&(0,t.jsx)("span",{className:"absolute top-0 right-0 h-2 w-2 rounded-full bg-emerald-400 animate-pulse"})]}),o&&(0,t.jsx)(v,{items:n,onClose:m})]})}var j=e.i(51297);let w=(0,e.i(363732).default)("clock-3",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6h4",key:"135r8i"}]]);var k=e.i(575479),y=e.i(906724),N=e.i(597628),S=e.i(8707),C=e.i(938201),T=e.i(572665),A=e.i(797167);function I({projectId:e}){let{isTouchLayout:s}=(0,p.useInputCapabilities)(),n=(0,r.useRouter)(),l=(0,r.usePathname)(),o=(0,a.useRef)(null),i=(0,a.useRef)(null),[c,d]=(0,a.useState)(""),[u,h]=(0,a.useState)([]),[m,f]=(0,a.useState)(0),[x,g]=(0,a.useState)(!1),[v,b]=(0,a.useState)(null),[I,$]=(0,a.useState)(!1),[E,P]=(0,a.useState)(0),[M,O]=(0,a.useState)(new Set),R=c.trim(),L=(0,a.useMemo)(()=>u.map(e=>({...e,visibleResults:M.has(e.id)?e.results:e.results.slice(0,3),hiddenCount:Math.max(0,e.results.length-3)})),[M,u]),D=(0,a.useMemo)(()=>L.flatMap(e=>e.visibleResults),[L]),J=(0,a.useMemo)(()=>D.map(e=>`${e.kind}:${e.id}`),[D]),U=(0,a.useCallback)(()=>{d(""),h([]),f(0),b(null),g(!1),P(0)},[]),q=(0,a.useCallback)(e=>{U(),$(!1),n.push(e.href)},[U,n]);(0,a.useEffect)(()=>{U(),$(!1),O(new Set)},[U,l]),(0,a.useEffect)(()=>{let e=e=>{o.current?.contains(e.target)||$(!1)};return window.addEventListener("pointerdown",e),()=>window.removeEventListener("pointerdown",e)},[]),(0,a.useEffect)(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&"k"===e.key.toLowerCase()&&(e.preventDefault(),i.current?.focus(),i.current?.select())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]),(0,a.useEffect)(()=>{I&&P(0)},[I,u]),(0,a.useEffect)(()=>{if(!R||R.length<2){h([]),f(0),b(null),g(!1),O(new Set);return}let t=!1;g(!0);let a=window.setTimeout(()=>{(async()=>{try{let a=new URLSearchParams({q:R}),r=await fetch(`/api/projects/${encodeURIComponent(e)}/search?${a.toString()}`,{cache:"no-store"}),s=await r.json().catch(()=>null);if(t)return;if(!r.ok){let e=s&&"object"==typeof s&&"error"in s?String(s.error):"Search failed";h([]),f(0),b(e);return}h(Array.isArray(s.sections)?s.sections:[]),f("number"==typeof s.total?s.total:0),b(null),O(new Set)}catch(e){if(t)return;console.error("Project search failed",e),h([]),f(0),b("Search failed")}finally{t||g(!1)}})()},220);return()=>{t=!0,window.clearTimeout(a)}},[R,e]);let W=I&&(R.length>0||x||null!==v),F=D.length>0?D[Math.max(0,Math.min(E,D.length-1))]:null,_=(0,a.useCallback)(e=>{O(t=>{let a=new Set(t);return a.has(e)?a.delete(e):a.add(e),a})},[]);return(0,t.jsxs)("div",{ref:o,className:"relative w-full max-w-xl",children:[(0,t.jsxs)("div",{className:"group/search relative",children:[(0,t.jsx)(S.Search,{className:"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-[var(--app-shell-soft-text)] transition-colors group-focus-within/search:text-[var(--primary)]",strokeWidth:1.8}),(0,t.jsx)("input",{ref:i,type:"text",value:c,onFocus:()=>$(!0),onChange:e=>{d(e.target.value),$(!0)},onKeyDown:e=>{if("ArrowDown"===e.key&&D.length>0){e.preventDefault(),P(e=>(e+1)%D.length);return}if("ArrowUp"===e.key&&D.length>0){e.preventDefault(),P(e=>(e-1+D.length)%D.length);return}if("Enter"===e.key&&F){e.preventDefault(),q(F);return}"Escape"===e.key&&(R?U():($(!1),i.current?.blur()))},placeholder:"Search objectives, tickets, tasks, teams, agents, and chat…",className:"h-8 w-full rounded-xl border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] pl-9 pr-16 text-xs font-medium text-[var(--foreground)] outline-none placeholder:text-[var(--app-shell-soft-text)] transition-all hover:border-[var(--app-shell-border-strong)] focus:border-[var(--primary)] focus:ring-2 focus:ring-[var(--ring)]"}),R?(0,t.jsxs)("div",{className:"absolute right-2 top-1/2 flex -translate-y-1/2 items-center gap-2",children:[(0,t.jsx)("span",{className:"text-[11px] font-bold text-[var(--muted-foreground)]",children:x?"…":m}),(0,t.jsx)("button",{type:"button",onClick:()=>{U(),i.current?.focus()},className:"inline-flex h-5 w-5 items-center justify-center rounded-md text-[var(--app-shell-soft-text)] transition-colors hover:bg-[var(--app-shell-subtle)] hover:text-[var(--foreground)]","aria-label":"Clear search",children:(0,t.jsx)(A.X,{className:"h-3.5 w-3.5"})})]}):s?null:(0,t.jsx)("kbd",{className:"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 rounded-md border border-[var(--app-shell-border)] bg-[var(--app-shell-subtle)] px-1.5 py-0.5 font-sans text-[10px] font-bold text-[var(--app-shell-soft-text)]",children:"⌘K"})]}),W?(0,t.jsx)("div",{className:"absolute left-0 right-0 top-[calc(100%+0.5rem)] z-50 overflow-hidden rounded-2xl border border-[var(--app-shell-border)] bg-[var(--app-shell-surface)] shadow-2xl shadow-black/20",children:(0,t.jsxs)("div",{className:"max-h-[28rem] overflow-y-auto p-2",children:[R.length<2?(0,t.jsx)("div",{className:"rounded-xl px-3 py-4 text-sm text-[var(--muted-foreground)]",children:"Keep typing to search across project entities."}):null,x?(0,t.jsxs)("div",{className:"flex items-center gap-2 rounded-xl px-3 py-4 text-sm text-[var(--muted-foreground)]",children:[(0,t.jsx)(y.Loader2,{className:"h-4 w-4 animate-spin"}),"Searching this project…"]}):null,!x&&v?(0,t.jsx)("div",{className:"rounded-xl px-3 py-4 text-sm text-rose-500",children:v}):null,x||v||!(R.length>=2)||0!==u.length?null:(0,t.jsx)("div",{className:"rounded-xl px-3 py-4 text-sm text-[var(--muted-foreground)]",children:"No matches in this project."}),!x&&!v&&L.map(e=>(0,t.jsxs)("div",{className:"mb-2 last:mb-0",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3 px-3 pb-1 pt-2",children:[(0,t.jsxs)("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-[var(--app-shell-soft-text)]",children:[e.label,(0,t.jsx)("span",{className:"ml-1.5 text-[9px] text-[var(--muted-foreground)]",children:e.results.length})]}),e.results.length>3?(0,t.jsx)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>_(e.id),className:"text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",children:M.has(e.id)?"Collapse":`Show ${e.hiddenCount} more`}):null]}),(0,t.jsx)("div",{className:"space-y-1",children:e.visibleResults.map(e=>{let a,r,s=`${e.kind}:${e.id}`,n=J.findIndex(e=>e===s),l=n===E,o=function(e){switch(e){case"objective":return C.Target;case"linear_issue":return k.FileText;case"scheduled_task":return w;case"team":return T.Users;case"agent":return j.Bot;case"chat_thread":case"chat_message":return N.MessageSquare;default:return S.Search}}(e.kind);return(0,t.jsxs)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onMouseEnter:()=>P(n),onClick:()=>q(e),className:`flex w-full items-start gap-3 rounded-xl px-3 py-2.5 text-left transition-colors ${l?"bg-[var(--app-shell-subtle)] text-[var(--foreground)]":"text-[var(--foreground)] hover:bg-[var(--app-shell-subtle)]"}`,children:[(0,t.jsx)("span",{className:"mt-0.5 inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-lg border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] text-[var(--app-shell-muted)]",children:(0,t.jsx)(o,{className:"h-3.5 w-3.5",strokeWidth:1.75})}),(0,t.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,t.jsx)("span",{className:"truncate text-sm font-medium",children:e.title}),(0,t.jsx)("span",{className:"shrink-0 rounded-full bg-[var(--app-shell-subtle)] px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-[var(--app-shell-soft-text)]",children:e.label})]}),e.context?(0,t.jsx)("span",{className:"mt-0.5 block truncate text-xs text-[var(--muted-foreground)]",children:e.context}):null,e.description?(0,t.jsx)("span",{className:"mt-1 block text-xs leading-5 text-[var(--muted-foreground)]",children:(a=e.description.split(/(<\/?mark>)/g),r=!1,a.map((e,a)=>"<mark>"===e?(r=!0,null):"</mark>"===e?(r=!1,null):e?r?(0,t.jsx)("mark",{className:"rounded bg-amber-200/80 px-0.5 text-inherit",children:e},`mark-${a}`):(0,t.jsx)("span",{children:e},`text-${a}`):null))}):null]})]},s)})})]},e.id))]})}):null]})}var $=e.i(749410),E=e.i(524123),P=e.i(969039),M=e.i(235136);let O={home:!0,threads:!0,terminal:!0,objectives:!0,objectivesIsNew:!1,tracking:!0,teams:!0,folders:!0,scheduledTasks:!0,envVars:!0,notifications:!0};var R=e.i(481248),L=e.i(169433);let D="agx-theme";function J({children:e,params:c}){let{slug:d}=(0,a.use)(c),{isTouchLayout:u}=(0,p.useInputCapabilities)(),h=(0,r.useRouter)(),m=(0,r.usePathname)(),{projects:f,isLoading:x,createProject:g,updateProject:v,deleteProject:j,addAgent:w,removeAgent:k}=(0,E.useProjectsWithAgents)(),{threads:y,isLoading:N,isCreating:S,deletingThreadId:C,renamingThreadId:T,isRestoringActiveThread:A,createThread:J,renameThread:U,deleteThread:q}=(0,P.useThreadState)(),[W,F]=(0,a.useState)([]),[_,z]=(0,a.useState)(!1),[H,K]=(0,a.useState)(368),[B,V]=(0,a.useState)(()=>{let e=window.localStorage.getItem(D);return"dark"===e||"light"===e?e:document.documentElement.classList.contains("dark")?"dark":"light"});(0,a.useEffect)(()=>{z((0,R.loadWorkspaceSidebarVisible)()),K((0,L.loadWorkspaceWidth)()||368)},[]),(0,a.useEffect)(()=>{let e="dark"===B;document.documentElement.classList.toggle("dark",e),document.documentElement.style.colorScheme=B,window.localStorage.setItem(D,B)},[B]),(0,a.useEffect)(()=>{fetch("/api/participants").then(e=>e.json()).then(e=>F(Array.isArray(e)?e:[])).catch(()=>F([]))},[]);let X=(0,a.useMemo)(()=>f.find(e=>e.slug===d)??null,[f,d]),G=(0,a.useMemo)(()=>{let e=m.match(/\/projects\/[^/]+\/thread\/([^/]+)/);return e?.[1]?decodeURIComponent(e[1]):X?.thread_ids[0]??null},[X?.thread_ids,m]),Q=(0,a.useMemo)(()=>m.includes("/linear")?"linear":m.includes("/automations")?"automations":m.includes("/thread/")?"thread":m.includes("/objectives")?"objectives":m.includes("/teams")?"teams":m.includes("/folders")?"folders":m.includes("/env-vars")?"env-vars":m.includes("/notifications")?"notifications":m.includes("/terminal")?"terminal":"home",[m]),{show:Y,trackerConnections:Z}=function(e){let{connections:t,loading:r}=(0,M.useTrackerConnections)(e?.id??null);return(0,a.useMemo)(()=>{let e=t.map(e=>({type:e.type,connected:e.connected,connectedAt:e.connectedAt}));return r?{stage:"stage1",loading:!0,show:{...O},trackerConnections:[]}:{stage:"stage4",loading:!1,show:{...O},trackerConnections:e}},[r,t])}(X),ee=()=>{let e=!_;z(e),(0,R.persistWorkspaceSidebarVisible)(e)},et=(0,a.useCallback)(e=>{K(e),(0,L.persistWorkspaceWidth)(e)},[]);return x?(0,t.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,t.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"})}):X?(0,t.jsxs)("div",{className:"flex h-dvh min-h-0 overflow-hidden bg-[var(--background)]",children:[(0,t.jsx)($.WorkspaceSidebar,{threads:y,participants:W,activeThreadId:G,isLoading:N,isRestoringActiveThread:A,isCreating:S,deletingThreadId:C,renamingThreadId:T,onSelectThread:e=>h.push(`/projects/${d}/thread/${encodeURIComponent(e)}`),onCreateThread:J,onRenameThread:U,onDeleteThread:q,visible:_,onToggle:ee,width:H,onWidthChange:et,projects:f,onCreateProject:g,onUpdateProject:v,onDeleteProject:j,onAddAgentToProject:w,onRemoveAgentFromProject:k,activeProjectId:X.id,activeProjectView:Q,stageShow:Y,trackerConnections:Z,onUpdateParticipant:async e=>{let t=await fetch("/api/participants",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error("Failed to update agent");let a=await t.json();F(e=>e.map(e=>e.id===a.id?a:e))},onSelectProject:e=>{let t=f.find(t=>t.id===e);t&&h.push(`/projects/${t.slug}`)}}),(0,t.jsxs)("div",{className:"flex-1 min-h-0 flex flex-col min-w-0 h-full overflow-hidden",children:[(0,t.jsxs)("div",{className:"desktop-titlebar flex items-center px-4 py-2 border-b border-[var(--app-shell-border)] bg-[var(--background)] shrink-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0 flex-shrink-0",children:[!_&&(0,t.jsx)("button",{type:"button",onClick:ee,className:"inline-flex h-9 w-9 items-center justify-center rounded-xl border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] text-[var(--muted-foreground)] transition-colors hover:bg-[var(--app-shell-subtle)] hover:text-[var(--foreground)]",title:"Show sidebar","aria-label":"Show sidebar",children:(0,t.jsx)(n.PanelLeftOpen,{className:"h-4 w-4"})}),m!==`/projects/${d}`&&(0,t.jsx)("button",{type:"button",onClick:()=>h.back(),className:"p-1 -ml-1 rounded-lg text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--app-shell-subtle)] transition-colors",children:(0,t.jsx)(s.ArrowLeft,{className:"w-4 h-4"})}),(0,t.jsx)("button",{type:"button",onClick:()=>h.push(`/projects/${d}`),className:`text-xs transition-colors ${"home"===Q?"text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}`,children:X.name}),"home"!==Q&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:"\\"}),(0,t.jsx)("button",{type:"button",onClick:()=>h.push(`/projects/${d}/${"thread"===Q?"":Q}`),className:"text-xs text-[var(--foreground)] hover:text-[var(--muted-foreground)] transition-colors",children:{objectives:"Objectives",teams:"Teams",folders:"Workspace Map","env-vars":"Environment Variables",notifications:"Notifications",linear:"Tasks",automations:"Scheduled Jobs",thread:"Chat",terminal:"Terminal"}[Q]??Q}),(0,t.jsx)("span",{id:"topbar-breadcrumb",className:"contents"})]})]}),(0,t.jsx)("div",{className:"flex-1 flex justify-center min-w-0 px-4",children:(0,t.jsx)(I,{projectId:X.id})}),(0,t.jsxs)("div",{className:"flex items-center gap-2 flex-shrink-0",children:[(0,t.jsx)(i.StatusIndicator,{}),(0,t.jsx)(b,{projectId:X.id,participants:W}),(0,t.jsx)("button",{type:"button",onClick:()=>V(e=>"dark"===e?"light":"dark"),"aria-label":"dark"===B?"Switch to light theme":"Switch to dark theme",title:"dark"===B?"Switch to light theme":"Switch to dark theme",className:`inline-flex items-center justify-center rounded-lg text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)] hover:bg-[var(--app-shell-subtle)] ${u?"h-9 w-9":"h-7 w-7"}`,children:"dark"===B?(0,t.jsx)(l.Sun,{className:u?"h-4 w-4":"h-3.5 w-3.5"}):(0,t.jsx)(o.Moon,{className:u?"h-4 w-4":"h-3.5 w-3.5"})})]})]}),e]})]}):(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center h-full",children:[(0,t.jsx)("h2",{className:"text-xl font-bold mb-2",children:"Project Not Found"}),(0,t.jsxs)("p",{className:"text-[var(--muted-foreground)] mb-4",children:["The project “",d,"” does not exist or you do not have access to it."]}),(0,t.jsx)("button",{onClick:()=>h.push("/projects"),className:"px-4 py-2 bg-[var(--primary)] text-white rounded-lg hover:bg-[var(--primary-dark)] transition-colors",children:"Back to Projects"})]})}function U({children:e,params:r}){return(0,t.jsx)(a.Suspense,{fallback:(0,t.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-[var(--muted-foreground)]",children:"Loading project…"}),children:(0,t.jsx)(J,{params:r,children:e})})}e.s(["default",()=>U],563975)}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,810605,e=>{"use strict";e.s(["GRAPH_TIMEOUT_DEFAULT_MS",0,864e5,"NODE_TIMEOUT_DEFAULT_MS",0,18e5,"UI_POLL_CHAT_ALT_MS",0,15e3,"UI_POLL_CHAT_CHECK_MS",0,1e4,"UI_POLL_DB_HEALTH_MS",0,3e4,"UI_POLL_PROMPT_RUNS_MS",0,5e3,"UI_POLL_SYSTEM_STATUS_MS",0,3e4,"UI_POLL_UPDATE_CHECK_MS",0,18e5])},506420,(e,t,r)=>{t.exports=e.r(27944)},906724,595807,e=>{"use strict";let t=(0,e.i(363732).default)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);e.s(["default",()=>t],595807),e.s(["Loader2",()=>t],906724)},958164,e=>{"use strict";let t=(0,e.i(363732).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);e.s(["AlertTriangle",()=>t],958164)},169433,e=>{"use strict";let t="agx:windowState",r={workspaceWidth:260,logPanelHeight:200,workspaceVisible:!0,logPanelVisible:!1,linearTicketPanelWidth:576,objectiveChatPanelWidth:440,objectiveListPanelWidth:320},a={lastThreadId:null,lastWorkspaceId:null},s={bounds:null,sidebar:r,scroll:a};function i(){return void 0!==window.localStorage}function n(){if(!i())return{...s};let e=window.localStorage.getItem(t);if(!e)return{...s};try{let t=JSON.parse(e);return{bounds:t.bounds||null,sidebar:{...r,...t.sidebar||{}},scroll:{...a,...t.scroll||{}}}}catch{return{...s}}}function l(){return n().sidebar}function o(e){let r=n();r.sidebar={...r.sidebar,...e};if(i())try{window.localStorage.setItem(t,JSON.stringify(r))}catch{}}function c(){return l().workspaceWidth}function d(e){o({workspaceWidth:e})}function u(){return l().linearTicketPanelWidth}function p(e){o({linearTicketPanelWidth:e})}function h(){return l().objectiveChatPanelWidth}function m(e){o({objectiveChatPanelWidth:e})}function x(){return l().objectiveListPanelWidth}function f(e){o({objectiveListPanelWidth:e})}e.s(["loadLinearTicketPanelWidth",()=>u,"loadObjectiveChatPanelWidth",()=>h,"loadObjectiveListPanelWidth",()=>x,"loadWorkspaceWidth",()=>c,"persistLinearTicketPanelWidth",()=>p,"persistObjectiveChatPanelWidth",()=>m,"persistObjectiveListPanelWidth",()=>f,"persistWorkspaceWidth",()=>d])},681619,594643,e=>{"use strict";var t=e.i(762281);function r({className:e}){return(0,t.jsx)("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z"})})}e.s(["LinearIcon",()=>r],594643);let a={linear:r,jira:function({className:e}){return(0,t.jsxs)("svg",{className:e,viewBox:"12 12 104 104",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:[(0,t.jsx)("path",{d:"M108.023 16H61.805c0 11.52 9.324 20.848 20.847 20.848h8.5v8.226c0 11.52 9.328 20.848 20.848 20.848V19.977A3.98 3.98 0 00108.023 16zm0 0"}),(0,t.jsx)("path",{d:"M85.121 39.04H38.902c0 11.519 9.325 20.847 20.844 20.847h8.504v8.226c0 11.52 9.328 20.848 20.848 20.848V43.016a3.983 3.983 0 00-3.977-3.977zm0 0"}),(0,t.jsx)("path",{d:"M62.219 62.078H16c0 11.524 9.324 20.848 20.848 20.848h8.5v8.23c0 11.52 9.328 20.844 20.847 20.844V66.059a3.984 3.984 0 00-3.976-3.98zm0 0"})]})},github:function({className:e}){return(0,t.jsx)("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"})})}};function s({trackerType:e,className:r}){let s=a[e];return s?(0,t.jsx)(s,{className:r}):(0,t.jsx)(i,{className:r})}function i({className:e}){return(0,t.jsxs)("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2"}),(0,t.jsx)("rect",{x:"9",y:"3",width:"6",height:"4",rx:"2"}),(0,t.jsx)("path",{d:"M9 12h6"}),(0,t.jsx)("path",{d:"M9 16h6"})]})}e.s(["TrackerIcon",()=>s],681619)},597628,e=>{"use strict";let t=(0,e.i(363732).default)("message-square",[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]]);e.s(["MessageSquare",()=>t],597628)},575479,e=>{"use strict";let t=(0,e.i(363732).default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);e.s(["FileText",()=>t],575479)},55236,e=>{"use strict";let t=(0,e.i(363732).default)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);e.s(["Folder",()=>t],55236)},196630,e=>{"use strict";let t=(0,e.i(363732).default)("folder-git-2",[["path",{d:"M18 19a5 5 0 0 1-5-5v8",key:"sz5oeg"}],["path",{d:"M9 20H4a2 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.9H20a2 2 0 0 1 2 2v5",key:"1w6njk"}],["circle",{cx:"13",cy:"12",r:"2",key:"1j92g6"}],["circle",{cx:"20",cy:"19",r:"2",key:"1obnsp"}]]);e.s(["FolderGit2",()=>t],196630)},902572,e=>{"use strict";let t="project_objectives_workspace",r="project_goals_workspace",a=new Set(["on_track","at_risk","off_track","done"]);function s(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function i(e){return`${e}_${Math.random().toString(36).slice(2,10)}`}function n(e){return[...e].sort((e,t)=>Date.parse(t.updatedAt)-Date.parse(e.updatedAt))}function l(e){return[...e].sort((e,t)=>Date.parse(e.createdAt)-Date.parse(t.createdAt))}function o(e){return[...e].sort((e,t)=>Date.parse(t.createdAt)-Date.parse(e.createdAt))}function c(e,t=""){return"string"==typeof e?e:t}function d(e){return Array.isArray(e)?Array.from(new Set(e.map(e=>"string"==typeof e?e.trim():"").filter(Boolean))):[]}function u(e,t="1970-01-01T00:00:00.000Z"){if("string"!=typeof e)return t;let r=Date.parse(e);return Number.isNaN(r)?t:new Date(r).toISOString()}function p(e){return"number"==typeof e&&Number.isFinite(e)?Math.max(0,Math.min(100,Math.round(e))):0}function h(e,t=0){return"number"==typeof e&&Number.isFinite(e)?Math.max(0,Math.floor(e)):t}function m(e,t="objective"){let r=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-").slice(0,32);return r||t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"objective"}function x(e,t,r="objective"){let a=m(r),s=m(e,a),i=s,n=2;for(;t.has(i);){let e=`-${n}`,t=Math.max(1,32-e.length);i=`${s.slice(0,t)}${e}`,n+=1}return t.add(i),i}function f(e,t,r){return x(e,new Set(t.filter(e=>e.id!==r).map(e=>m(e.key||e.title||e.id))),r??e)}function v(e){var t;if(!s(e))return null;let r=u(e.updatedAt??e.createdAt),n=u(e.createdAt,r);return{id:c(e.id,i("objective")),title:c(e.title,"Untitled objective"),teamId:c(e.teamId??e.team_id??e.ownerTeamId),key:m(c(e.key??e.slug??e.label),c(e.title??e.id,"objective")),threadId:c(e.threadId)||null,chatSessionVersion:h(e.chatSessionVersion,0),scheduledTaskIds:d(e.scheduledTaskIds??e.promptJobIds),summary:c(e.summary),progress:p(e.progress),status:"string"==typeof(t=e.status)&&a.has(t)?t:"on_track",createdAt:n,updatedAt:r}}function b(e){if(!s(e))return null;let t=u(e.updatedAt??e.createdAt),r=u(e.createdAt,t),a=c(e.objectiveId??e.goalId);return a?{id:c(e.id,i("objective_activity")),objectiveId:a,sourceType:"note",sourceLabel:c(e.sourceLabel,"Update"),title:c(e.title,"Untitled activity"),body:c(e.body),createdAt:r,updatedAt:t,relatedTaskId:c(e.relatedTaskId)||null}:null}function j(e){if(!s(e))return null;let t=c(e.activityId);return t?{id:c(e.id,i("objective_thread_message")),activityId:t,author:c(e.author,"You"),body:c(e.body),createdAt:u(e.createdAt)}:null}function g(){return{objectives:[],activities:[],activityThreads:{}}}function y(e){let t;if(!s(e))return g();let r=Array.isArray(e.objectives)?e.objectives.map(e=>v(e)).filter(e=>null!==e):[],a=Array.isArray(e.activities)?e.activities.map(e=>b(e)).filter(e=>null!==e):[],i=s(e.activityThreads)?Object.fromEntries(Object.entries(e.activityThreads).map(([e,t])=>[e,l(Array.isArray(t)?t.map(e=>j(e)).filter(e=>null!==e):[])])):{};return{objectives:n((t=new Set,r.map(e=>{let r=x(e.key||e.title||e.id,t,e.id||e.title||"objective");return e.key===r?e:{...e,key:r}}))),activities:o(a),activityThreads:i}}function k(e){if(!s(e))return g();let a=e[t];if(void 0!==a){let e=y(a);if(e.objectives.length>0||e.activities.length>0||Object.keys(e.activityThreads).length>0)return e}let i=e[r];if(void 0!==i){if(!s(i))return g();let e=Array.isArray(i.goals)?i.goals.map(e=>(function(e){if(!s(e))return null;let t=c(e.target),r=[c(e.summary),t?`Measure: ${t}`:""].filter(Boolean).join("\n\n");return v({...e,summary:r})})(e)).filter(e=>null!==e):[],t=Array.isArray(i.manualActivities)?i.manualActivities.map(e=>b({...e,sourceLabel:"Update"})).filter(e=>null!==e):[],r=s(i.activityThreads)?Object.fromEntries(Object.entries(i.activityThreads).map(([e,t])=>[e,l(Array.isArray(t)?t.map(t=>j({...t,activityId:e})).filter(e=>null!==e):[])])):{};return{objectives:n(e),activities:o(t),activityThreads:r}}return g()}function w(e,a){let s={...e};return delete s[r],s[t]=y(a),s}function N(e){return{id:e.id??i("objective"),title:e.title.trim(),teamId:e.teamId.trim(),key:m(e.key?.trim()??e.title.trim(),e.id??e.title),threadId:"string"==typeof e.threadId&&e.threadId.trim()?e.threadId.trim():null,chatSessionVersion:h(e.chatSessionVersion??2,2),scheduledTaskIds:d(e.scheduledTaskIds??[]),summary:e.summary?.trim()??"",progress:p(e.progress??0),status:e.status??"on_track",createdAt:e.now,updatedAt:e.now}}function A(e,t){let r=e.objectives.findIndex(e=>e.id===t.id)>=0?e.objectives.map(e=>e.id===t.id?t:e):[t,...e.objectives];return{...e,objectives:n(r)}}function C(e,t){let r=new Set(e.activities.filter(e=>e.objectiveId===t).map(e=>e.id)),a=Object.fromEntries(Object.entries(e.activityThreads).filter(([e])=>!r.has(e)));return{objectives:e.objectives.filter(e=>e.id!==t),activities:e.activities.filter(e=>e.objectiveId!==t),activityThreads:a}}function T({objective:e,workspace:t}){return t.activities.filter(t=>t.objectiveId===e.id).map(e=>({...e,threadCount:t.activityThreads[e.id]?.length??0})).sort((e,t)=>Date.parse(t.createdAt)-Date.parse(e.createdAt))}e.s(["CURRENT_OBJECTIVE_CHAT_SESSION_VERSION",0,2,"LEGACY_PROJECT_GOALS_METADATA_KEY",0,r,"PROJECT_HEALTH_METADATA_KEY",0,"project_health_snapshot","PROJECT_OBJECTIVES_METADATA_KEY",0,t,"buildObjectiveTimelineActivities",()=>T,"createProjectObjective",()=>N,"generateProjectObjectiveKey",()=>f,"readProjectObjectivesWorkspace",()=>k,"removeProjectObjective",()=>C,"upsertProjectObjective",()=>A,"writeProjectObjectivesWorkspace",()=>w])},938201,e=>{"use strict";let t=(0,e.i(363732).default)("target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);e.s(["Target",()=>t],938201)},997626,e=>{"use strict";let t=(0,e.i(363732).default)("zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);e.s(["Zap",()=>t],997626)},99296,846279,e=>{"use strict";let t=(0,e.i(363732).default)("square-terminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]);e.s(["default",()=>t],846279),e.s(["TerminalSquare",()=>t],99296)},535208,275850,e=>{"use strict";var t=e.i(762281),r=e.i(935851);function a({initialPath:e,onSelect:a,onCancel:s}){let[i,n]=(0,r.useState)(e||""),[l,o]=(0,r.useState)(null),[c,d]=(0,r.useState)(!1),[u,p]=(0,r.useState)(null),h=(0,r.useRef)(null),m=(0,r.useCallback)(async e=>{d(!0),p(null);try{let t=e?`?path=${encodeURIComponent(e)}`:"",r=await fetch(`/api/filesystem/browse${t}`),a=await r.json();if(!r.ok)return void p(a.error||"Failed to browse");o(a),n(a.current),h.current?.scrollTo(0,0)}catch{p("Failed to connect")}finally{d(!1)}},[]);return(0,r.useEffect)(()=>{m(e||"")},[]),(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] overflow-hidden shadow-lg",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-[var(--card-border)] bg-[var(--muted)]/30",children:[(0,t.jsx)("input",{value:i,onChange:e=>n(e.target.value),onKeyDown:e=>{"Enter"===e.key&&m(i)},className:"input text-xs flex-1 py-1",placeholder:"Enter path..."}),(0,t.jsx)("button",{type:"button",onClick:()=>m(i),className:"text-[10px] font-bold uppercase tracking-wider text-[var(--primary)] hover:underline px-2 py-1 shrink-0",children:"Go"})]}),(0,t.jsxs)("div",{ref:h,className:"max-h-48 overflow-y-auto",children:[c&&(0,t.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)] text-center",children:"Loading..."}),u&&(0,t.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--destructive)] text-center",children:u}),!c&&l&&(0,t.jsxs)("div",{className:"py-1",children:[l.parent&&(0,t.jsxs)("button",{type:"button",onClick:()=>m(l.parent),className:"w-full text-left px-3 py-1.5 text-sm hover:bg-[var(--muted)]/50 transition-colors flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"↑"}),(0,t.jsx)("span",{className:"text-[var(--muted-foreground)]",children:".."})]}),0===l.dirs.length&&!l.parent&&(0,t.jsx)("div",{className:"px-3 py-3 text-xs text-[var(--muted-foreground)] text-center",children:"No subdirectories"}),l.dirs.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>m(e.path),className:"w-full text-left px-3 py-1.5 text-sm hover:bg-[var(--muted)]/50 transition-colors flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"📁"}),(0,t.jsx)("span",{className:"truncate",children:e.name})]},e.path))]})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between px-3 py-2 border-t border-[var(--card-border)] bg-[var(--muted)]/30",children:[(0,t.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)] truncate max-w-[60%]",children:l?.current||i}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("button",{type:"button",onClick:s,className:"text-xs font-medium text-[var(--muted-foreground)] hover:underline px-2 py-1",children:"Cancel"}),(0,t.jsx)("button",{type:"button",onClick:()=>a(l?.current||i),className:"text-xs font-bold text-[var(--primary)] hover:underline px-2 py-1",children:"Select"})]})]})]})}function s(e){return{name:e.name.trim(),path:e.path.trim()}}function i(e){let{name:t,path:r}=s(e);return t||r?t?r?null:"missing_path":"missing_name":null}function n(e){for(let[t,r]of e.entries()){let e=i(r);if(e)return{index:t,issue:e,repo:r}}return null}function l(e){let{name:t,path:r}=s(e);return!!(t&&r)}function o(e){let{issue:t,repo:r}=e;return"missing_name"===t?`Folder name is required for local path "${r.path.trim()}"`:`Local path is required for folder "${r.name.trim()}"`}e.s(["findInvalidProjectRepoDraft",()=>n,"formatInvalidProjectRepoDraftMessage",()=>o,"getProjectRepoValidationIssue",()=>i,"isCompleteProjectRepoDraft",()=>l],275850);let c={name:"",description:""},d={name:"",path:"",notes:""};function u(){let[e,t]=(0,r.useState)(c),[a,s]=(0,r.useState)([d]),[i,n]=(0,r.useState)(!1),[l,o]=(0,r.useState)(null),u=(0,r.useCallback)((e,t,r)=>{s(a=>a.map((a,s)=>s===e?{...a,[t]:r}:a))},[]),p=(0,r.useCallback)(()=>{s(e=>[...e,{...d}])},[]),h=(0,r.useCallback)(e=>{s(t=>t.filter((t,r)=>r!==e))},[]),m=(0,r.useCallback)(()=>{t(c),s([d]),o(null)},[]),x=(0,r.useCallback)(e=>{t({name:e.name||"",description:e.description||""}),e.repos&&e.repos.length>0?s(e.repos.map(e=>({id:e.id,name:e.name||"",path:e.path||"",git_url:e.git_url||"",notes:e.notes||""}))):s([d]),o(null)},[]);return{form:e,setForm:t,repos:a,handleRepoChange:u,addRepo:p,removeRepo:h,resetForm:m,hydrateFromProject:x,isSubmitting:i,setIsSubmitting:n,formError:l,setFormError:o}}function p(e,t){let r=n(t);if(r)throw Error(o(r));let a=t.filter(e=>l(e)).map(e=>({...e.id?{id:e.id}:{},name:e.name.trim(),path:e.path.trim(),...e.git_url?.trim()?{git_url:e.git_url.trim()}:{},notes:e.notes.trim()||void 0}));return{name:e.name.trim(),description:e.description.trim()||void 0,repos:a.length?a:void 0}}function h({form:e,repos:s,isEditingProject:n,isSubmitting:l,onFieldChange:o,onRepoChange:c,onAddRepo:d,onRemoveRepo:u}){let[p,h]=(0,r.useState)([]),[m,x]=(0,r.useState)(null),f=(0,r.useRef)(0);(0,r.useEffect)(()=>{n?h([]):h(s.map((e,t)=>t)),f.current=s.length},[n,s.length]),(0,r.useEffect)(()=>{if(!n){f.current=s.length;return}let e=f.current;h(t=>{let r=t.filter(e=>e<s.length);return s.length>e&&r.push(...Array.from({length:s.length-e},(t,r)=>e+r)),r}),f.current=s.length},[n,s.length]);let v=(0,r.useCallback)(e=>{h(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},[]),b=(0,r.useCallback)(e=>!n||p.includes(e),[p,n]);return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsx)("div",{className:"grid gap-4",children:(0,t.jsxs)("label",{className:"space-y-1.5 block",children:[(0,t.jsx)("span",{className:"text-xs font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Project Name"}),(0,t.jsx)("input",{value:e.name,onChange:e=>o("name",e.target.value),className:"input w-full",placeholder:"e.g. AGX Cloud",disabled:l})]})}),(0,t.jsxs)("label",{className:"space-y-1.5 block",children:[(0,t.jsx)("span",{className:"text-xs font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Description"}),(0,t.jsx)("textarea",{value:e.description,onChange:e=>o("description",e.target.value),className:"input w-full h-24 resize-none",placeholder:"What is this project about?",disabled:l})]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--card-border)] pb-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"text-sm font-bold uppercase tracking-widest text-[var(--muted-foreground)]",children:"Folders"}),(0,t.jsx)("p",{className:"text-[11px] text-[var(--muted-foreground)] mt-0.5",children:"Code repos, doc folders, design assets, config directories — any path your team needs access to."})]}),(0,t.jsx)("button",{type:"button",onClick:d,className:"text-xs font-semibold text-[var(--primary)] hover:underline flex-shrink-0",disabled:l,children:"+ Add Folder"})]}),(0,t.jsx)("div",{className:"space-y-4",children:s.map((e,r)=>{let o=i(e);return(0,t.jsxs)("div",{className:"p-4 rounded-2xl border border-[var(--card-border)] bg-[var(--muted)]/20 space-y-3 relative group",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"text-xs font-bold text-[var(--foreground)] uppercase",children:["Folder #",r+1]}),n&&!b(r)?(0,t.jsxs)("div",{className:"mt-1 text-sm text-[var(--muted-foreground)]",children:[(0,t.jsx)("div",{children:e.name||"Unnamed folder"}),(0,t.jsx)("div",{className:"truncate",children:e.path||"No local path set"})]}):null]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[n&&(0,t.jsx)("button",{type:"button",onClick:()=>v(r),className:"text-xs font-semibold text-[var(--primary)] hover:underline",disabled:l,children:b(r)?"Done":"Edit"}),s.length>1&&(0,t.jsx)("button",{type:"button",onClick:()=>u(r),className:"text-xs font-semibold text-[var(--destructive)] hover:underline",disabled:l,children:"Remove"})]})]}),b(r)?(0,t.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)("input",{value:e.name,onChange:e=>c(r,"name",e.target.value),placeholder:"Name (e.g. Frontend, API Docs, Design System)",className:`input text-sm w-full${"missing_name"===o?" border-[var(--destructive)]/50 ring-1 ring-[var(--destructive)]/20":""}`,disabled:l}),"missing_name"===o&&(0,t.jsx)("p",{className:"text-[11px] text-[var(--destructive)]",children:"Folder name is required"})]}),(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{value:e.path,onChange:e=>c(r,"path",e.target.value),placeholder:"Local path to folder",className:`input text-sm flex-1${"missing_path"===o?" border-[var(--destructive)]/50 ring-1 ring-[var(--destructive)]/20":""}`,disabled:l}),(0,t.jsx)("button",{type:"button",onClick:async()=>{try{let e=await fetch("/api/filesystem/pick-folder",{method:"POST"}),t=await e.json();t.path&&c(r,"path",t.path)}catch{x(m===r?null:r)}},className:"px-3 py-2 rounded-xl border border-[var(--card-border)] bg-[var(--muted)]/30 hover:bg-[var(--muted)]/60 transition-colors text-xs font-semibold text-[var(--muted-foreground)] whitespace-nowrap",disabled:l,children:"Browse"})]}),"missing_path"===o&&(0,t.jsx)("p",{className:"text-[11px] text-[var(--destructive)]",children:"Local path is required"})]}),m===r&&(0,t.jsx)("div",{className:"md:col-span-2",children:(0,t.jsx)(a,{initialPath:e.path||"",onSelect:e=>{c(r,"path",e),x(null)},onCancel:()=>x(null)})}),(0,t.jsx)("div",{className:"md:col-span-2",children:(0,t.jsx)("textarea",{value:e.notes,onChange:e=>c(r,"notes",e.target.value),placeholder:"Notes for this folder — e.g. coding conventions, deploy steps, ownership, doc standards...",className:"input text-sm w-full min-h-24 resize-y",disabled:l})})]}):null]},r)})})]})]})}function m({isOpen:e,onClose:a,onSubmit:s,editingProject:i,form:l,repos:o,isSubmitting:c,formError:d,onFieldChange:u,onRepoChange:p,onAddRepo:m,onRemoveRepo:x}){let[f,v]=(0,r.useState)([]);(0,r.useEffect)(()=>{let e=!1;return async function(){if(!i)return v([]);try{let t=await fetch(`/api/knowledge-notes?scope=project&subjectId=${encodeURIComponent(i.id)}`),r=(t.ok?await t.json():{note:null}).note;e||v(r?.content?[{id:r.id,content:r.content,created_at:r.updatedAt??r.createdAt,source:r.sourceType}]:[])}catch{e||v([])}}(),()=>{e=!0}},[i]);let b=!!n(o),j=!l.name.trim()||b;return e?(0,t.jsx)("div",{className:"modal-backdrop p-2 sm:p-4 z-50 overflow-y-auto flex items-center justify-center",onClick:e=>e.target===e.currentTarget&&a(),children:(0,t.jsxs)("div",{className:"modal-content w-full max-w-4xl mx-2 sm:mx-auto bg-[var(--card-bg)] rounded-3xl border border-[var(--card-border)] shadow-2xl animate-scale-in flex flex-col max-h-[90vh]",children:[(0,t.jsxs)("div",{className:"px-4 py-4 sm:px-8 sm:py-6 border-b border-[var(--card-border)] flex items-center justify-between flex-shrink-0",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-xl font-bold",children:i?"Edit Project":"Create New Project"}),(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5",children:i?"Update your project settings and folders.":"Define a new project and connect folders."})]}),(0,t.jsx)("button",{onClick:a,className:"p-2 rounded-xl hover:bg-[var(--muted)]/50 transition-colors",children:(0,t.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),(0,t.jsxs)("div",{className:"flex-1 overflow-y-auto p-4 sm:p-8",children:[i&&(0,t.jsx)("div",{className:"mb-6",children:(0,t.jsxs)("div",{className:"rounded-2xl border border-[var(--card-border)] bg-[var(--muted)]/20 p-4",children:[(0,t.jsx)("h3",{className:"text-sm font-bold uppercase tracking-widest text-[var(--muted-foreground)]",children:"Living Project Note"}),f.length>0?(0,t.jsx)("div",{className:"mt-3 space-y-2",children:f.slice(0,5).map(e=>(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] px-3 py-2 text-sm text-[var(--foreground)]",children:[(0,t.jsx)("div",{children:e.content}),e.created_at?(0,t.jsx)("div",{className:"mt-1 text-[11px] text-[var(--muted-foreground)]",children:new Date(e.created_at).toLocaleString()}):null]},e.id))}):(0,t.jsx)("p",{className:"mt-2 text-sm text-[var(--muted-foreground)]",children:"No project note yet."})]})}),(0,t.jsx)(h,{form:l,repos:o,isEditingProject:!!i,isSubmitting:c,onFieldChange:u,onRepoChange:p,onAddRepo:m,onRemoveRepo:x}),d&&(0,t.jsx)("div",{className:"mt-6 p-4 rounded-xl bg-[var(--destructive-muted)] border border-[var(--destructive)]/20 text-sm text-[var(--destructive)]",children:d})]}),(0,t.jsxs)("div",{className:"px-4 py-4 sm:px-8 sm:py-6 border-t border-[var(--card-border)] flex items-center justify-end gap-3 flex-shrink-0",children:[(0,t.jsx)("button",{onClick:a,className:"px-6 py-2 rounded-xl border border-[var(--card-border)] hover:bg-[var(--muted)]/50 transition-colors text-sm font-medium",children:"Cancel"}),(0,t.jsx)("button",{onClick:s,disabled:c||j,className:"btn-primary px-8 py-2 shadow-lg shadow-[var(--primary)]/20 min-w-[120px]",children:c?(0,t.jsxs)("span",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"spinner w-3 h-3 border-2 border-white/20 border-t-white"}),"Saving..."]}):i?"Save Changes":"Create Project"})]})]})}):null}e.s(["createProjectPayload",()=>p,"default",()=>m,"useProjectFormState",()=>u],535208)},202641,e=>{"use strict";let t=(0,e.i(363732).default)("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]);e.s(["Bell",()=>t],202641)},51297,e=>{"use strict";let t=(0,e.i(363732).default)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);e.s(["Bot",()=>t],51297)},235136,e=>{"use strict";var t=e.i(935851);function r(e){let[r,a]=(0,t.useState)([]),[s,i]=(0,t.useState)(null),[n,l]=(0,t.useState)(!0),o=(0,t.useCallback)(async()=>{if(!e){a([]),i(null),l(!1);return}try{let t=await fetch(`/api/trackers/connections?projectId=${encodeURIComponent(e)}`),r=await t.json();a(Array.isArray(r.connections)?r.connections:[]),i("string"==typeof r.defaultTracker?r.defaultTracker:null)}catch{a([]),i(null)}finally{l(!1)}},[e]);(0,t.useEffect)(()=>{o()},[o]);let c=(0,t.useCallback)(async(t,r)=>{if(!e)return{ok:!1,error:"Missing projectId"};try{let a=await fetch("/api/trackers/connections",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:t,projectId:e,metadata:r})});if(!a.ok){let e=await a.json().catch(()=>({}));return{ok:!1,error:e.error||"Failed to add connection"}}return await o(),{ok:!0}}catch{return{ok:!1,error:"Failed to add connection"}}},[e,o]),d=(0,t.useCallback)(async t=>{if(!e)return{ok:!1,error:"Missing projectId"};try{let r=await fetch(`/api/trackers/${t}/status?projectId=${encodeURIComponent(e)}`,{method:"DELETE"});if(!r.ok){let e=await r.json().catch(()=>({}));return{ok:!1,error:e.error||"Failed to remove connection"}}return await o(),{ok:!0}}catch{return{ok:!1,error:"Failed to remove connection"}}},[e,o]),u=(0,t.useCallback)(async t=>{if(!e)return{ok:!1,error:"Missing projectId"};try{let r=await fetch("/api/trackers/connections",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:e,defaultTracker:t})});if(!r.ok){let e=await r.json().catch(()=>({}));return{ok:!1,error:e.error||"Failed to set default tracker"}}return await o(),{ok:!0}}catch{return{ok:!1,error:"Failed to set default tracker"}}},[e,o]);return{connections:r,defaultTracker:s,loading:n,refresh:o,addConnection:c,removeConnection:d,setDefaultTracker:u}}e.s(["useTrackerConnections",()=>r])}]);