@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,18 +1,18 @@
1
1
  module.exports=[984806,a=>{"use strict";var b=a.i(308316),c=a.i(786220),d=a.i(516909),e=a.i(850985),f=a.i(639211);function g(){let[a,d]=(0,c.useState)(null),[e,g]=(0,c.useState)("loading");(0,c.useEffect)(()=>{let a=!0;async function b(){try{let b=await fetch("/api/health");if(!a)return;if(!b.ok)return void g("error");let c=await b.json();d(c),g(c.connected?"connected":"disconnected")}catch{a&&g("error")}}b();let c=setInterval(b,f.UI_POLL_DB_HEALTH_MS);return()=>{a=!1,clearInterval(c)}},[]);let h={loading:"Checking database…",connected:`${a?.adapter??"db"} connected (${a?.latencyMs??"?"}ms)`,disconnected:`${a?.adapter??"db"} disconnected`,error:"Database unreachable"};return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-xs text-[var(--muted-foreground)]",role:"status","aria-label":h[e],children:[(0,b.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"}[e]}`}),(0,b.jsx)("span",{className:"hidden sm:inline",children:h[e]})]})}function h({children:a,fullWidth:c=!1,noFooter:d=!1}){return(0,b.jsxs)("div",{className:"h-screen flex flex-col overflow-hidden",children:[(0,b.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,b.jsx)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:(0,b.jsxs)("div",{className:"flex items-center justify-between h-16",children:[(0,b.jsx)("div",{className:"flex items-center gap-8",children:(0,b.jsx)(e.default,{href:"/",className:"flex items-center gap-3 group",children:(0,b.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,b.jsx)("rect",{width:"64",height:"38",rx:"8",fill:"black"}),(0,b.jsxs)("g",{stroke:"white",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("path",{d:"M 14 27 C 17 16 19 10 20 8 C 21 12 23 20 25 27"}),(0,b.jsx)("path",{d:"M 16 20 C 19 19 21 21 23 20"}),(0,b.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,b.jsx)("path",{d:"M 46 11 C 48 16 51 22 54 27"}),(0,b.jsx)("path",{d:"M 54 11 C 52 16 49 22 46 27"})]})]})})}),(0,b.jsx)("div",{className:"flex items-center gap-3",children:(0,b.jsx)(e.default,{href:"/",className:"text-sm font-medium text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:"Home"})})]})})}),(0,b.jsx)("main",{className:`flex-1 min-h-0 flex flex-col ${c?"p-0":"p-4 sm:p-6 lg:p-8 overflow-y-auto"}`,children:a}),!d&&(0,b.jsx)("footer",{className:"flex-shrink-0 border-t border-[var(--card-border)] bg-[var(--card-bg)]/50 py-4",children:(0,b.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,b.jsx)("span",{children:"AGX"}),(0,b.jsxs)("span",{className:"hidden sm:inline-flex items-center gap-3",children:[(0,b.jsx)(g,{}),(0,b.jsx)("span",{children:"Built with Next.js + Db"})]})]})})]})}function i(a){return(0,b.jsx)(c.Suspense,{fallback:(0,b.jsx)("div",{className:"h-screen flex items-center justify-center bg-[var(--background)]",children:(0,b.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"})}),children:(0,b.jsx)(h,{...a})})}var j=a.i(769677);let k=new Set([j.PROJECT_OBJECTIVES_METADATA_KEY,j.LEGACY_PROJECT_GOALS_METADATA_KEY,j.PROJECT_HEALTH_METADATA_KEY]);function l({project:a,onEdit:c,onDelete:d,onClick:e,onManageTasks:f}){let g=a.repos&&a.repos.length>0;return(0,b.jsxs)("div",{onClick:()=>e?.(a),className:`p-5 surface-card space-y-4
2
- ${e?"cursor-pointer hover:border-gray-300 dark:hover:border-gray-700 hover:shadow-md active:scale-[0.99]":""}`,children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-lg font-semibold",children:a.name}),(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] tracking-wide uppercase",children:a.slug})]}),(0,b.jsxs)("div",{className:"flex flex-col items-end gap-2",children:[(0,b.jsxs)("span",{className:"text-[11px] font-semibold text-[var(--muted-foreground)]",children:["Updated ",new Date(a.updated_at).toLocaleDateString()]}),(c||d||f)&&(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[f&&(0,b.jsx)("button",{type:"button",onClick:b=>{b.stopPropagation(),f(a)},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"}),c&&(0,b.jsx)("button",{type:"button",onClick:b=>{b.stopPropagation(),c(a)},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"}),d&&(0,b.jsx)("button",{type:"button",onClick:b=>{b.stopPropagation(),d(a)},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"})]})]})]}),a.description&&(0,b.jsx)("p",{className:"text-sm text-[var(--foreground)] line-clamp-2",children:a.description}),a.ci_cd_info&&(0,b.jsxs)("div",{className:"text-sm",children:[(0,b.jsx)("p",{className:"text-[var(--muted-foreground)] text-[12px] uppercase tracking-wide",children:"CI / CD"}),(0,b.jsx)("p",{className:"text-[14px] text-[var(--accent)] font-medium truncate",children:a.ci_cd_info})]}),a.metadata&&Object.keys(a.metadata).some(a=>!k.has(a))&&(0,b.jsxs)("div",{className:"p-3 rounded-lg bg-[var(--muted)]/20 border border-dashed border-[var(--card-border)] space-y-1",children:[(0,b.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Metadata"}),(0,b.jsx)("div",{className:"space-y-1",children:Object.entries(a.metadata??{}).filter(([a])=>"undefined"!==a&&""!==a&&!k.has(a)).map(([a,c])=>(0,b.jsxs)("div",{className:"text-[12px] text-[var(--muted-foreground)] flex justify-between",children:[(0,b.jsx)("span",{className:"font-semibold",children:a}),(0,b.jsx)("span",{className:"truncate text-right",children:"string"==typeof c?c:JSON.stringify(c)})]},a))})]}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-[12px] uppercase tracking-wider text-[var(--muted-foreground)]",children:"Folders"}),(0,b.jsx)("span",{className:"text-[12px] text-[var(--muted-foreground)]",children:g?`${a.repos.length} connected`:"Unlinked"})]}),g?(0,b.jsxs)("div",{className:"mt-3 space-y-2",children:[a.repos.slice(0,2).map(a=>(0,b.jsxs)("div",{className:"p-2 rounded-lg border border-[var(--card-border)] bg-[var(--background)] text-[11px]",children:[(0,b.jsx)("div",{className:"font-semibold truncate",children:a.name}),a.path&&(0,b.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] truncate",children:a.path})]},a.id)),a.repos.length>2&&(0,b.jsxs)("p",{className:"text-[10px] text-center text-[var(--muted-foreground)]",children:["+ ",a.repos.length-2," more"]})]}):(0,b.jsx)("p",{className:"mt-3 text-[12px] text-[var(--muted-foreground)]",children:"No folders added yet."})]})]})}var m=a.i(188834),n=a.i(197180);let o=[{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 p({status:a,onStatusChange:d}){let[e,f]=(0,c.useState)(!1),[g,h]=(0,c.useState)(null),i=(0,c.useRef)(null),j=(0,c.useRef)(null),k=(0,c.useCallback)(()=>{if(!i.current)return;let a=i.current.getBoundingClientRect();h({top:a.bottom+4,left:a.left})},[]);(0,c.useEffect)(()=>{if(!e)return;k();let a=a=>{i.current&&!i.current.contains(a.target)&&j.current&&!j.current.contains(a.target)&&f(!1)};return document.addEventListener("pointerdown",a),()=>document.removeEventListener("pointerdown",a)},[e,k]),(0,c.useEffect)(()=>{f(!1)},[a]);let l=o.find(b=>b.value===a)||o[0],m="completed"===a,p="in_progress"===a;return(0,b.jsxs)("div",{className:"relative flex-shrink-0",ref:i,children:[(0,b.jsxs)("button",{type:"button",onClick:a=>{a.stopPropagation(),d&&f(!e)},className:`w-4 h-4 rounded-full border-[1.5px] flex items-center justify-center transition-all
2
+ ${e?"cursor-pointer hover:border-gray-300 dark:hover:border-gray-700 hover:shadow-md active:scale-[0.99]":""}`,children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-lg font-semibold",children:a.name}),(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] tracking-wide uppercase",children:a.slug})]}),(0,b.jsxs)("div",{className:"flex flex-col items-end gap-2",children:[(0,b.jsxs)("span",{className:"text-[11px] font-semibold text-[var(--muted-foreground)]",children:["Updated ",new Date(a.updated_at).toLocaleDateString()]}),(c||d||f)&&(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[f&&(0,b.jsx)("button",{type:"button",onClick:b=>{b.stopPropagation(),f(a)},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"}),c&&(0,b.jsx)("button",{type:"button",onClick:b=>{b.stopPropagation(),c(a)},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"}),d&&(0,b.jsx)("button",{type:"button",onClick:b=>{b.stopPropagation(),d(a)},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"})]})]})]}),a.description&&(0,b.jsx)("p",{className:"text-sm text-[var(--foreground)] line-clamp-2",children:a.description}),a.ci_cd_info&&(0,b.jsxs)("div",{className:"text-sm",children:[(0,b.jsx)("p",{className:"text-[var(--muted-foreground)] text-[12px] uppercase tracking-wide",children:"CI / CD"}),(0,b.jsx)("p",{className:"text-[14px] text-[var(--accent)] font-medium truncate",children:a.ci_cd_info})]}),a.metadata&&Object.keys(a.metadata).some(a=>!k.has(a))&&(0,b.jsxs)("div",{className:"p-3 rounded-lg bg-[var(--muted)]/20 border border-dashed border-[var(--card-border)] space-y-1",children:[(0,b.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Metadata"}),(0,b.jsx)("div",{className:"space-y-1",children:Object.entries(a.metadata??{}).filter(([a])=>"undefined"!==a&&""!==a&&!k.has(a)).map(([a,c])=>(0,b.jsxs)("div",{className:"text-[12px] text-[var(--muted-foreground)] flex justify-between",children:[(0,b.jsx)("span",{className:"font-semibold",children:a}),(0,b.jsx)("span",{className:"truncate text-right",children:"string"==typeof c?c:JSON.stringify(c)})]},a))})]}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-[12px] uppercase tracking-wider text-[var(--muted-foreground)]",children:"Folders"}),(0,b.jsx)("span",{className:"text-[12px] text-[var(--muted-foreground)]",children:g?`${a.repos.length} connected`:"Unlinked"})]}),g?(0,b.jsxs)("div",{className:"mt-3 space-y-2",children:[a.repos.slice(0,2).map(a=>(0,b.jsxs)("div",{className:"p-2 rounded-lg border border-[var(--card-border)] bg-[var(--background)] text-[11px]",children:[(0,b.jsx)("div",{className:"font-semibold truncate",children:a.name}),a.path&&(0,b.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] truncate",children:a.path})]},a.id)),a.repos.length>2&&(0,b.jsxs)("p",{className:"text-[10px] text-center text-[var(--muted-foreground)]",children:["+ ",a.repos.length-2," more"]})]}):(0,b.jsx)("p",{className:"mt-3 text-[12px] text-[var(--muted-foreground)]",children:"No folders added yet."})]})]})}var m=a.i(188834),n=a.i(365370),o=a.i(197180);let p=[{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 q({status:a,onStatusChange:d}){let[e,f]=(0,c.useState)(!1),[g,h]=(0,c.useState)(null),i=(0,c.useRef)(null),j=(0,c.useRef)(null),k=(0,c.useCallback)(()=>{if(!i.current)return;let a=i.current.getBoundingClientRect();h({top:a.bottom+4,left:a.left})},[]);(0,c.useEffect)(()=>{if(!e)return;k();let a=a=>{i.current&&!i.current.contains(a.target)&&j.current&&!j.current.contains(a.target)&&f(!1)};return document.addEventListener("pointerdown",a),()=>document.removeEventListener("pointerdown",a)},[e,k]),(0,c.useEffect)(()=>{f(!1)},[a]);let l=p.find(b=>b.value===a)||p[0],m="completed"===a,n="in_progress"===a;return(0,b.jsxs)("div",{className:"relative flex-shrink-0",ref:i,children:[(0,b.jsxs)("button",{type:"button",onClick:a=>{a.stopPropagation(),d&&f(!e)},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
  ${d?"cursor-pointer":"cursor-default"}
5
- ${p?"animate-pulse":""}
6
- `,style:{borderColor:l.color,backgroundColor:m?l.color:"transparent"},title:l.label,children:[m&&(0,b.jsx)("svg",{className:"w-2.5 h-2.5 text-white",viewBox:"0 0 12 12",fill:"none",children:(0,b.jsx)("path",{d:"M2.5 6L5 8.5L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),"failed"===a&&(0,b.jsx)("svg",{className:"w-2 h-2",viewBox:"0 0 12 12",fill:"none",children:(0,b.jsx)("path",{d:"M3 3L9 9M9 3L3 9",stroke:l.color,strokeWidth:"1.5",strokeLinecap:"round"})}),p&&(0,b.jsx)("div",{className:"w-1.5 h-1.5 rounded-full",style:{backgroundColor:l.color}})]}),e&&g&&(0,n.createPortal)((0,b.jsx)("div",{ref:j,className:"fixed z-[9999] py-1 rounded-lg border shadow-lg min-w-[140px]",style:{top:g.top,left:g.left,backgroundColor:"var(--card-bg)",borderColor:"var(--card-border)"},children:o.map(c=>{let e=c.value===a;return(0,b.jsxs)("button",{type:"button",className:`w-full flex items-center gap-2 px-3 py-1.5 text-xs text-left transition-colors
5
+ ${n?"animate-pulse":""}
6
+ `,style:{borderColor:l.color,backgroundColor:m?l.color:"transparent"},title:l.label,children:[m&&(0,b.jsx)("svg",{className:"w-2.5 h-2.5 text-white",viewBox:"0 0 12 12",fill:"none",children:(0,b.jsx)("path",{d:"M2.5 6L5 8.5L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),"failed"===a&&(0,b.jsx)("svg",{className:"w-2 h-2",viewBox:"0 0 12 12",fill:"none",children:(0,b.jsx)("path",{d:"M3 3L9 9M9 3L3 9",stroke:l.color,strokeWidth:"1.5",strokeLinecap:"round"})}),n&&(0,b.jsx)("div",{className:"w-1.5 h-1.5 rounded-full",style:{backgroundColor:l.color}})]}),e&&g&&(0,o.createPortal)((0,b.jsx)("div",{ref:j,className:"fixed z-[9999] py-1 rounded-lg border shadow-lg min-w-[140px]",style:{top:g.top,left:g.left,backgroundColor:"var(--card-bg)",borderColor:"var(--card-border)"},children:p.map(c=>{let e=c.value===a;return(0,b.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
  ${e?"font-semibold bg-[var(--item-hover-bg)]":""}
9
- `,onClick:a=>{a.stopPropagation(),d?.(c.value),f(!1)},children:[(0,b.jsxs)("span",{className:"w-3 h-3 rounded-full border-[1.5px] flex items-center justify-center",style:{borderColor:c.color,backgroundColor:"completed"===c.value?c.color:"transparent"},children:["completed"===c.value&&(0,b.jsx)("svg",{className:"w-2 h-2 text-white",viewBox:"0 0 12 12",fill:"none",children:(0,b.jsx)("path",{d:"M2.5 6L5 8.5L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),"failed"===c.value&&(0,b.jsx)("svg",{className:"w-1.5 h-1.5",viewBox:"0 0 12 12",fill:"none",children:(0,b.jsx)("path",{d:"M3 3L9 9M9 3L3 9",stroke:c.color,strokeWidth:"1.5",strokeLinecap:"round"})}),"in_progress"===c.value&&(0,b.jsx)("div",{className:"w-1 h-1 rounded-full",style:{backgroundColor:c.color}})]}),(0,b.jsx)("span",{style:{color:e?c.color:void 0},children:c.label}),e&&(0,b.jsx)("svg",{className:"w-3 h-3 ml-auto",viewBox:"0 0 12 12",fill:"none",children:(0,b.jsx)("path",{d:"M2 6L5 9L10 3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})]},c.value)})}),document.body)]})}var q=a.i(553893);let r=new Map,s=new Map;async function t(a){let b=r.get(a);if(void 0!==b)return b;let c=s.get(a);if(c)return c;let d=(async()=>{let b=await fetch(`/api/tasks/${a}/graph`,{method:"GET",cache:"no-store"});if(404===b.status)return r.set(a,null),null;let c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c?.error||`Failed to fetch graph summary (${b.status})`);let d=c?.graph??null,e=d?(0,q.buildGraphSummary)(d):null;return r.set(a,e),e})();s.set(a,d);try{return await d}finally{s.delete(a)}}let u={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)]"}},v={INTAKE:{icon:"📥",label:"Intake"},PROGRESS:{icon:"🔄",label:"Progress"},DONE:{icon:"✅",label:"Done"}};function w({task:a,onClick:d,compact:e=!1,onStatusChange:f,onApprovalModeChange:g,onStageChange:h,stageOptions:i,currentStage:j,allTasks:k,relationship:l="none"}){u[a.status||"queued"],a.stage&&v[a.stage];let{summary:m,isLoading:n}=function(a){let b=(0,c.useMemo)(()=>a?r.get(a)??null:null,[a]),[d,e]=(0,c.useState)(b),[f,g]=(0,c.useState)(!!a&&null===b),[h,i]=(0,c.useState)(null),j=(0,c.useCallback)(async()=>{if(!a){e(null),i(null),g(!1);return}g(!0),i(null);try{let b=await t(a);e(b)}catch(a){i(a instanceof Error?a.message:"Failed to fetch graph summary"),e(null)}finally{g(!1)}},[a]);return(0,c.useEffect)(()=>{j()},[j]),{summary:d,isLoading:f,error:h,refresh:j}}("draft"!==a.id?a.id:null),o=j??a.stage,q=o&&i?i.indexOf(o):-1,s=q>0&&i?i[q-1]:null,w=q>=0&&i&&q<i.length-1?i[q+1]:null,x=a.depends_on?.length?a.depends_on.map(a=>{let b=k?.find(b=>b.id===a);return{id:a,title:b?.title||a.slice(0,8),done:b?.status==="completed"}}):null;return x&&x.every(a=>a.done),(0,b.jsxs)("div",{onClick:d,role:"button",tabIndex:0,onKeyDown:a=>"Enter"===a.key&&d?.(),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:a=>{a.stopPropagation(),d?.(c.value),f(!1)},children:[(0,b.jsxs)("span",{className:"w-3 h-3 rounded-full border-[1.5px] flex items-center justify-center",style:{borderColor:c.color,backgroundColor:"completed"===c.value?c.color:"transparent"},children:["completed"===c.value&&(0,b.jsx)("svg",{className:"w-2 h-2 text-white",viewBox:"0 0 12 12",fill:"none",children:(0,b.jsx)("path",{d:"M2.5 6L5 8.5L9.5 3.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),"failed"===c.value&&(0,b.jsx)("svg",{className:"w-1.5 h-1.5",viewBox:"0 0 12 12",fill:"none",children:(0,b.jsx)("path",{d:"M3 3L9 9M9 3L3 9",stroke:c.color,strokeWidth:"1.5",strokeLinecap:"round"})}),"in_progress"===c.value&&(0,b.jsx)("div",{className:"w-1 h-1 rounded-full",style:{backgroundColor:c.color}})]}),(0,b.jsx)("span",{style:{color:e?c.color:void 0},children:c.label}),e&&(0,b.jsx)("svg",{className:"w-3 h-3 ml-auto",viewBox:"0 0 12 12",fill:"none",children:(0,b.jsx)("path",{d:"M2 6L5 9L10 3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})]},c.value)})}),document.body)]})}var r=a.i(553893);let s=new Map,t=new Map;async function u(a){let b=s.get(a);if(void 0!==b)return b;let c=t.get(a);if(c)return c;let d=(async()=>{let b=await fetch(`/api/tasks/${a}/graph`,{method:"GET",cache:"no-store"});if(404===b.status)return s.set(a,null),null;let c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c?.error||`Failed to fetch graph summary (${b.status})`);let d=c?.graph??null,e=d?(0,r.buildGraphSummary)(d):null;return s.set(a,e),e})();t.set(a,d);try{return await d}finally{t.delete(a)}}let v={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)]"}},w={INTAKE:{icon:"📥",label:"Intake"},PROGRESS:{icon:"🔄",label:"Progress"},DONE:{icon:"✅",label:"Done"}};function x({task:a,onClick:d,compact:e=!1,onStatusChange:f,onApprovalModeChange:g,onStageChange:h,stageOptions:i,currentStage:j,allTasks:k,relationship:l="none"}){v[a.status||"queued"],a.stage&&w[a.stage];let{summary:m,isLoading:n}=function(a){let b=(0,c.useMemo)(()=>a?s.get(a)??null:null,[a]),[d,e]=(0,c.useState)(b),[f,g]=(0,c.useState)(!!a&&null===b),[h,i]=(0,c.useState)(null),j=(0,c.useCallback)(async()=>{if(!a){e(null),i(null),g(!1);return}g(!0),i(null);try{let b=await u(a);e(b)}catch(a){i(a instanceof Error?a.message:"Failed to fetch graph summary"),e(null)}finally{g(!1)}},[a]);return(0,c.useEffect)(()=>{j()},[j]),{summary:d,isLoading:f,error:h,refresh:j}}("draft"!==a.id?a.id:null),o=j??a.stage,p=o&&i?i.indexOf(o):-1,r=p>0&&i?i[p-1]:null,t=p>=0&&i&&p<i.length-1?i[p+1]:null,x=a.depends_on?.length?a.depends_on.map(a=>{let b=k?.find(b=>b.id===a);return{id:a,title:b?.title||a.slice(0,8),done:b?.status==="completed"}}):null;return x&&x.every(a=>a.done),(0,b.jsxs)("div",{onClick:d,role:"button",tabIndex:0,onKeyDown:a=>"Enter"===a.key&&d?.(),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"===l?"border-primary ring-2 ring-primary/20 z-40":"blocking"===l?"border-[var(--status-blocked)] bg-rose-50/30 dark:bg-rose-950/20 z-20":"dependent"===l?"border-[var(--status-in-progress)] bg-blue-50/30 dark:bg-blue-950/20 z-20":"dimmed"===l?"opacity-40 grayscale scale-[0.98]":""}
12
12
  ${"failed"===a.status&&"none"===l?"border-red-200 bg-red-50/30 dark:bg-red-950/20":""}
13
13
  ${"completed"===a.status&&"none"===l?"opacity-75 bg-[var(--secondary)]":""}
14
14
  `,children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,b.jsxs)("h3",{className:`text-sm font-medium text-[var(--foreground)] leading-snug line-clamp-2 sm:line-clamp-3
15
15
  ${"completed"===a.status?"text-[var(--muted-foreground)] line-through":""}
16
- `,children:[a.identifier?(0,b.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:a.identifier}):null,a.title||"Untitled Task"]}),(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:(0,b.jsx)(p,{status:a.status||"queued",onStatusChange:f})})]}),(0,b.jsx)("div",{className:"flex items-center justify-between min-h-[16px]",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 text-[10px] text-[var(--muted-foreground)] flex-wrap",children:[void 0!==a.priority&&a.priority>0&&(0,b.jsxs)("span",{className:`px-1.5 py-0.5 rounded font-semibold bg-[var(--secondary)] ${0===a.priority?"text-[var(--primary)]":""}`,children:["P",a.priority]}),g&&("auto"===a.approval_mode?(0,b.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:a=>{a.stopPropagation(),g("manual")},children:"AUTO"}):(0,b.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:a=>{a.stopPropagation(),g("auto")},children:"AUTO"})),"draft"!==a.id&&!a.identifier&&(0,b.jsx)("span",{className:"opacity-0 group-hover:opacity-100 transition-opacity font-mono text-[9px]",children:a.id.slice(0,5)})]})}),h&&o&&(s||w)?(0,b.jsxs)("div",{className:"flex items-center gap-2 pt-1",children:[s?(0,b.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:a=>{a.stopPropagation(),h(s)},children:["Back to ",s]}):null,w?(0,b.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:a=>{a.stopPropagation(),h(w)},children:["Move to ",w]}):null]}):null]})}let x={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 y({tasks:a,onSelectTask:c,onStatusChange:d}){if(0===a.length)return(0,b.jsxs)("div",{className:"text-center py-20 animate-fade-in",children:[(0,b.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,b.jsx)("span",{className:"text-3xl",children:"📋"})}),(0,b.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"No tasks yet"}),(0,b.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 e=a.filter(a=>"in_progress"===a.status),f=a.filter(a=>"queued"===a.status),g=a.filter(a=>"blocked"===a.status),h=a.filter(a=>"completed"===a.status||"failed"===a.status),i=(a,e)=>{if(0===e.length)return null;let f=x[a];return(0,b.jsxs)("section",{className:"mb-8 animate-fade-in-up",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-3 py-1.5 rounded-lg",style:{backgroundColor:`color-mix(in srgb, ${f.color} 10%, transparent)`},children:[(0,b.jsx)("span",{className:"text-lg",children:f.icon}),(0,b.jsx)("h3",{className:"text-sm font-semibold",style:{color:f.color},children:f.title}),(0,b.jsx)("span",{className:"px-2 py-0.5 rounded-full text-xs font-medium",style:{backgroundColor:`color-mix(in srgb, ${f.color} 15%, transparent)`,color:f.color},children:e.length})]}),(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] hidden sm:block",children:f.description})]}),(0,b.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:e.map((a,e)=>(0,b.jsx)("div",{className:"animate-fade-in-up",style:{animationDelay:`${50*e}ms`},children:(0,b.jsx)(w,{task:a,onClick:()=>c?.(a),onStatusChange:d?b=>d(a.id,b):void 0})},a.id))})]})};return(0,b.jsxs)("div",{children:[i("in_progress",e),i("blocked",g),i("queued",f),i("completed",h)]})}let z={id:"2c3cc1ca-956d-4b62-b295-4d2d3374103f",email:process.env.AGX_BOARD_USER_EMAIL||"local@agx.board",name:process.env.AGX_BOARD_USER_NAME||"Local Board User"};var A=a.i(830284);function B(){let a=(0,d.useRouter)(),e=(0,d.useSearchParams)(),{projects:f,isLoading:g,error:h,refetch:j,createProject:k,updateProject:n,deleteProject:o}=(0,A.useProjects)(),p=(0,m.useProjectFormState)(),[q,r]=(0,c.useState)(null),[s,t]=(0,c.useState)(!1),[u,v]=(0,c.useState)(null),{form:w,repos:x,handleRepoChange:y,addRepo:z,removeRepo:B,resetForm:D,hydrateFromProject:E,isSubmitting:F,setIsSubmitting:G,formError:H,setFormError:I,setForm:J}=p,K=()=>{r(null),D(),t(!0)},L=a=>{r(a),E(a),t(!0)};(0,c.useEffect)(()=>{let a=e.get("edit");if(!a||0===f.length||s)return;let b=f.find(b=>b.id===a);b&&L(b)},[e,f,s]),(0,c.useEffect)(()=>{"1"!==e.get("new")||s||(K(),a.replace("/projects"))},[e]);let M=(0,c.useCallback)(b=>{b.slug&&a.push(`/projects/${b.slug}`)},[a]),N=(0,c.useCallback)(a=>{v(a)},[]),O=(0,c.useCallback)(()=>{v(null)},[]),P=()=>{D(),t(!1),r(null),e.get("edit")&&a.replace("/projects")},Q=async()=>{if(!w.name.trim())return void I("Project name is required");let b=x.find(a=>a.name.trim()&&!a.path.trim());if(b)return void I(`Local path is required for folder "${b.name}"`);I(null),G(!0);let c=(0,m.createProjectPayload)(w,x);try{if(q)await n(q.id,c),P();else{let b=await k(c);P(),a.push(`/projects/${b.slug}`)}}catch(a){I(a instanceof Error?a.message:"Failed to save project")}finally{G(!1)}},R=async a=>{if(window.confirm(`Delete project "${a.name}"? This cannot be undone.`))try{await o(a.id)}catch(a){alert(a instanceof Error?a.message:"Failed to delete project")}};return(0,b.jsx)(i,{children:(0,b.jsxs)("div",{className:"max-w-7xl mx-auto w-full flex flex-col min-h-full",children:[(0,b.jsxs)("header",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4 py-8",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-3xl font-bold tracking-tight",children:"Projects"}),(0,b.jsx)("p",{className:"text-[var(--muted-foreground)] mt-1",children:"Manage your projects and their folder contexts."})]}),(0,b.jsxs)("div",{className:"flex gap-3",children:[(0,b.jsx)("button",{onClick:j,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,b.jsx)("button",{onClick:K,className:"btn-primary px-6 py-2 shadow-lg shadow-[var(--primary)]/20",children:"+ New Project"})]})]}),g?(0,b.jsx)("div",{className:"flex-1 flex items-center justify-center py-20",children:(0,b.jsxs)("div",{className:"flex flex-col items-center gap-4",children:[(0,b.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"}),(0,b.jsx)("p",{className:"text-sm text-[var(--muted-foreground)] animate-pulse",children:"Loading projects..."})]})}):0===f.length?(0,b.jsxs)("div",{className:"flex-1 flex flex-col items-center justify-center py-20 animate-fade-in",children:[(0,b.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,b.jsx)("h2",{className:"text-2xl font-bold mb-2",children:"You have no projects"}),(0,b.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,b.jsx)("button",{onClick:K,className:"btn-primary px-8 py-3 text-lg shadow-xl shadow-[var(--primary)]/20",children:"Create a Project"})]}):(0,b.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 pb-20",children:f.map(a=>(0,b.jsx)(l,{project:a,onEdit:L,onDelete:R,onManageTasks:N,onClick:M},a.id))}),(0,b.jsx)(m.default,{isOpen:s,onClose:P,onSubmit:Q,editingProject:q,form:w,repos:x,isSubmitting:F,formError:H,onFieldChange:(a,b)=>J(c=>({...c,[a]:b})),onRepoChange:y,onAddRepo:z,onRemoveRepo:B}),u&&(0,b.jsx)(C,{project:u,onClose:O})]})})}function C({project:a,onClose:d}){let{tasks:e,isLoading:f}=function(a={}){let b="1"===process.env.NEXT_PUBLIC_AGX_BOARD_DISABLE_AUTH,d=a.project,e=a.status,f=a.orphan,g=a.realtime,[h,i]=(0,c.useState)([]),[j,k]=(0,c.useState)(!0),[l,m]=(0,c.useState)(null),[n,o]=(0,c.useState)(null),[p,q]=(0,c.useState)(null),r=(0,c.useCallback)(a=>{if(!a)return[];if(Array.isArray(a))return Array.from(new Set(a.map(a=>String(a||"").trim()).filter(Boolean)));if("string"==typeof a){let b=a.trim();if(!b)return[];try{let a=JSON.parse(b);if(Array.isArray(a))return Array.from(new Set(a.map(a=>String(a||"").trim()).filter(Boolean)))}catch{}return Array.from(new Set(b.split(",").map(a=>a.trim()).filter(Boolean)))}return[]},[]),s=(0,c.useCallback)(a=>{let b=String(a||"").match(/^---\n([\s\S]*?)\n---\n?/);if(!b)return[];let c=b[1].split("\n").find(a=>a.trim().toLowerCase().startsWith("depends_on:"));return c?r(c.slice(c.indexOf(":")+1).trim()):[]},[r]),t=(0,c.useCallback)((a,b)=>{let c=r(a.depends_on);if(c.length>0)return{...a,depends_on:c};let d="string"==typeof a?.content?s(a.content):[];if(d.length>0)return{...a,depends_on:d};let e=r(b?.depends_on);return e.length>0?{...a,depends_on:e}:a},[s,r]),u=(0,c.useCallback)(async()=>{try{let a=new URLSearchParams;d&&a.set("project",d),e&&a.set("status",e),f&&a.set("orphan","1");let b=await fetch(`/api/tasks?${a.toString()}`);if(!b.ok)throw Error("Failed to fetch tasks");let c=await b.json(),g=Array.isArray(c.tasks)?c.tasks.map(a=>t(a)):[];i(g),m(null)}catch(a){m(a instanceof Error?a:Error("Unknown error"))}finally{k(!1)}},[d,e,f]);(0,c.useEffect)(()=>{u()},[u]),(0,c.useEffect)(()=>{if(!b||!g)return;let a=setInterval(u,3e3);return()=>clearInterval(a)},[b,g,u]),(0,c.useEffect)(()=>{if(b||!g)return;let a={auth:{getSession:async()=>({data:{session:{access_token:"local-token",refresh_token:"local-refresh",expires_in:3600,user:{id:z.id,email:z.email,user_metadata:{name:z.name,full_name:z.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(){}},c=a.channel("tasks-changes").on("postgres_changes",{event:"*",schema:"public",table:"tasks"},a=>{"INSERT"===a.eventType?i(b=>{let c=t(a.new);return b.some(a=>a.id===c.id)?b:[c,...b]}):"UPDATE"===a.eventType?i(b=>b.map(b=>b.id===a.new.id?t(a.new,b):b)):"DELETE"===a.eventType&&i(b=>b.filter(b=>b.id!==a.old.id))}).subscribe();return()=>{a.removeChannel(c)}},[g,b]),(0,c.useEffect)(()=>{if(b||!g)return;let a=setInterval(u,3e3);return()=>clearInterval(a)},[g,b,u]);let v=(0,c.useCallback)(async(a,b)=>{let c=await fetch("/api/tasks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:a,swarm_models:b})});if(!c.ok)throw Error((await c.json()).error||"Failed to create task");let{task:d}=await c.json(),e=t(d);return i(a=>a.some(a=>a.id===e.id)?a:[e,...a]),e},[a.realtime,t]),w=(0,c.useCallback)(async(a,b)=>{let c=await fetch(`/api/tasks/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!c.ok){let a=null;throw"function"==typeof c.json&&(a=await c.json().catch(a=>(console.warn("[useTasks] failed to parse response:",a),null))),Error(a?.error||a?.details||`Failed to update task (${c.status} ${c.statusText||"Error"})`)}let{task:d}=await c.json();return i(b=>b.map(b=>b.id===a?t({...b,...d},b):b)),t(d)},[a.realtime,t]),x=(0,c.useCallback)(async a=>{if(!(await fetch(`/api/tasks/${a}`,{method:"DELETE"})).ok)throw Error("Failed to delete task");i(b=>b.filter(b=>b.id!==a))},[a.realtime]),y=(0,c.useCallback)(async a=>{let b=await fetch("/api/queue/complete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok)throw Error((await b.json().catch(()=>({}))).error||"Failed to complete task stage");let{task:c}=await b.json();return i(b=>b.map(b=>b.id===a.taskId?t({...b,...c},b):b)),t(c)},[a.realtime,t]),A=(0,c.useCallback)(async a=>{o(a.taskId),q(null);try{let b=await fetch(`/api/orchestrator/tasks/${a.taskId}/cancel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a.reason?{reason:a.reason}:{})});if(!b.ok){let a=await b.json().catch(()=>({})),c=a?.error||"Failed to cancel workflow";throw Error(c)}return b.json()}catch(b){let a=b instanceof Error?b:Error("Failed to cancel workflow");throw q(a),a}finally{o(null)}},[]),B=(0,c.useCallback)(async a=>{let b=await fetch(`/api/tasks/${a}`),c=await b.json().catch(a=>(console.warn("[useTasks] failed to parse response:",a),null));if(!b.ok)throw Error(c?.error||"Failed to fetch task details");return t(c?.task)},[t]),C=(0,c.useCallback)(async a=>{let b=await fetch("/api/tasks/assign-orphans",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({project_id:a})}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c?.error||"Failed to assign orphan tasks");return await u(),{updatedCount:Number(c?.updatedCount||0),taskIds:Array.isArray(c?.taskIds)?c.taskIds:[]}},[u]);return{tasks:h,isLoading:j,error:l,cancellingTaskId:n,isCancelling:!!n,cancelError:p,refetch:u,createTask:v,updateTask:w,deleteTask:x,completeTaskStage:y,cancelWorkflow:A,fetchTask:B,assignOrphanTasksToProject:C}}({project:a.slug});return(0,b.jsx)("div",{className:"modal-backdrop p-2 sm:p-4 z-50 overflow-y-auto flex items-center justify-center",onClick:a=>a.target===a.currentTarget&&d(),children:(0,b.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,b.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,b.jsxs)("div",{children:[(0,b.jsxs)("h2",{className:"text-xl font-bold",children:["Tasks for ",a.name]}),(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5",children:"Viewing all tasks associated with this project."})]}),(0,b.jsx)("button",{onClick:d,className:"p-2 rounded-xl hover:bg-[var(--muted)]/50 transition-colors",children:(0,b.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,b.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto p-8",children:f?(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center py-20",children:[(0,b.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full mb-4"}),(0,b.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"Loading project tasks..."})]}):(0,b.jsx)(y,{tasks:e})}),(0,b.jsx)("div",{className:"px-8 py-6 border-t border-[var(--card-border)] flex justify-end flex-shrink-0",children:(0,b.jsx)("button",{onClick:d,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"})})]})})}a.s(["default",()=>B],984806)}];
16
+ `,children:[a.identifier?(0,b.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:a.identifier}):null,a.title||"Untitled Task"]}),(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:(0,b.jsx)(q,{status:a.status||"queued",onStatusChange:f})})]}),(0,b.jsx)("div",{className:"flex items-center justify-between min-h-[16px]",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 text-[10px] text-[var(--muted-foreground)] flex-wrap",children:[void 0!==a.priority&&a.priority>0&&(0,b.jsxs)("span",{className:`px-1.5 py-0.5 rounded font-semibold bg-[var(--secondary)] ${0===a.priority?"text-[var(--primary)]":""}`,children:["P",a.priority]}),g&&("auto"===a.approval_mode?(0,b.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:a=>{a.stopPropagation(),g("manual")},children:"AUTO"}):(0,b.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:a=>{a.stopPropagation(),g("auto")},children:"AUTO"})),"draft"!==a.id&&!a.identifier&&(0,b.jsx)("span",{className:"opacity-0 group-hover:opacity-100 transition-opacity font-mono text-[9px]",children:a.id.slice(0,5)})]})}),h&&o&&(r||t)?(0,b.jsxs)("div",{className:"flex items-center gap-2 pt-1",children:[r?(0,b.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:a=>{a.stopPropagation(),h(r)},children:["Back to ",r]}):null,t?(0,b.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:a=>{a.stopPropagation(),h(t)},children:["Move to ",t]}):null]}):null]})}let y={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 z({tasks:a,onSelectTask:c,onStatusChange:d}){if(0===a.length)return(0,b.jsxs)("div",{className:"text-center py-20 animate-fade-in",children:[(0,b.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,b.jsx)("span",{className:"text-3xl",children:"📋"})}),(0,b.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"No tasks yet"}),(0,b.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 e=a.filter(a=>"in_progress"===a.status),f=a.filter(a=>"queued"===a.status),g=a.filter(a=>"blocked"===a.status),h=a.filter(a=>"completed"===a.status||"failed"===a.status),i=(a,e)=>{if(0===e.length)return null;let f=y[a];return(0,b.jsxs)("section",{className:"mb-8 animate-fade-in-up",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-3 py-1.5 rounded-lg",style:{backgroundColor:`color-mix(in srgb, ${f.color} 10%, transparent)`},children:[(0,b.jsx)("span",{className:"text-lg",children:f.icon}),(0,b.jsx)("h3",{className:"text-sm font-semibold",style:{color:f.color},children:f.title}),(0,b.jsx)("span",{className:"px-2 py-0.5 rounded-full text-xs font-medium",style:{backgroundColor:`color-mix(in srgb, ${f.color} 15%, transparent)`,color:f.color},children:e.length})]}),(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] hidden sm:block",children:f.description})]}),(0,b.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:e.map((a,e)=>(0,b.jsx)("div",{className:"animate-fade-in-up",style:{animationDelay:`${50*e}ms`},children:(0,b.jsx)(x,{task:a,onClick:()=>c?.(a),onStatusChange:d?b=>d(a.id,b):void 0})},a.id))})]})};return(0,b.jsxs)("div",{children:[i("in_progress",e),i("blocked",g),i("queued",f),i("completed",h)]})}let A={id:"2c3cc1ca-956d-4b62-b295-4d2d3374103f",email:process.env.AGX_BOARD_USER_EMAIL||"local@agx.board",name:process.env.AGX_BOARD_USER_NAME||"Local Board User"};var B=a.i(830284);function C(){let a=(0,d.useRouter)(),e=(0,d.useSearchParams)(),{projects:f,isLoading:g,error:h,refetch:j,createProject:k,updateProject:o,deleteProject:p}=(0,B.useProjects)(),q=(0,m.useProjectFormState)(),[r,s]=(0,c.useState)(null),[t,u]=(0,c.useState)(!1),[v,w]=(0,c.useState)(null),{form:x,repos:y,handleRepoChange:z,addRepo:A,removeRepo:C,resetForm:E,hydrateFromProject:F,isSubmitting:G,setIsSubmitting:H,formError:I,setFormError:J,setForm:K}=q,L=()=>{s(null),E(),u(!0)},M=a=>{s(a),F(a),u(!0)};(0,c.useEffect)(()=>{let a=e.get("edit");if(!a||0===f.length||t)return;let b=f.find(b=>b.id===a);b&&M(b)},[e,f,t]),(0,c.useEffect)(()=>{"1"!==e.get("new")||t||(L(),a.replace("/projects"))},[e]);let N=(0,c.useCallback)(b=>{b.slug&&a.push(`/projects/${b.slug}`)},[a]),O=(0,c.useCallback)(a=>{w(a)},[]),P=(0,c.useCallback)(()=>{w(null)},[]),Q=()=>{E(),u(!1),s(null),e.get("edit")&&a.replace("/projects")},R=async()=>{if(!x.name.trim())return void J("Project name is required");let b=(0,n.findInvalidProjectRepoDraft)(y);if(b)return void J((0,n.formatInvalidProjectRepoDraftMessage)(b));J(null),H(!0);let c=(0,m.createProjectPayload)(x,y);try{if(r)await o(r.id,c),Q();else{let b=await k(c);Q(),a.push(`/projects/${b.slug}`)}}catch(a){J(a instanceof Error?a.message:"Failed to save project")}finally{H(!1)}},S=async a=>{if(window.confirm(`Delete project "${a.name}"? This cannot be undone.`))try{await p(a.id)}catch(a){alert(a instanceof Error?a.message:"Failed to delete project")}};return(0,b.jsx)(i,{children:(0,b.jsxs)("div",{className:"max-w-7xl mx-auto w-full flex flex-col min-h-full",children:[(0,b.jsxs)("header",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4 py-8",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-3xl font-bold tracking-tight",children:"Projects"}),(0,b.jsx)("p",{className:"text-[var(--muted-foreground)] mt-1",children:"Manage your projects and their folder contexts."})]}),(0,b.jsxs)("div",{className:"flex gap-3",children:[(0,b.jsx)("button",{onClick:j,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,b.jsx)("button",{onClick:L,className:"btn-primary px-6 py-2 shadow-lg shadow-[var(--primary)]/20",children:"+ New Project"})]})]}),g?(0,b.jsx)("div",{className:"flex-1 flex items-center justify-center py-20",children:(0,b.jsxs)("div",{className:"flex flex-col items-center gap-4",children:[(0,b.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full"}),(0,b.jsx)("p",{className:"text-sm text-[var(--muted-foreground)] animate-pulse",children:"Loading projects..."})]})}):0===f.length?(0,b.jsxs)("div",{className:"flex-1 flex flex-col items-center justify-center py-20 animate-fade-in",children:[(0,b.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,b.jsx)("h2",{className:"text-2xl font-bold mb-2",children:"You have no projects"}),(0,b.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,b.jsx)("button",{onClick:L,className:"btn-primary px-8 py-3 text-lg shadow-xl shadow-[var(--primary)]/20",children:"Create a Project"})]}):(0,b.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 pb-20",children:f.map(a=>(0,b.jsx)(l,{project:a,onEdit:M,onDelete:S,onManageTasks:O,onClick:N},a.id))}),(0,b.jsx)(m.default,{isOpen:t,onClose:Q,onSubmit:R,editingProject:r,form:x,repos:y,isSubmitting:G,formError:I,onFieldChange:(a,b)=>K(c=>({...c,[a]:b})),onRepoChange:z,onAddRepo:A,onRemoveRepo:C}),v&&(0,b.jsx)(D,{project:v,onClose:P})]})})}function D({project:a,onClose:d}){let{tasks:e,isLoading:f}=function(a={}){let b="1"===process.env.NEXT_PUBLIC_AGX_BOARD_DISABLE_AUTH,d=a.project,e=a.status,f=a.orphan,g=a.realtime,[h,i]=(0,c.useState)([]),[j,k]=(0,c.useState)(!0),[l,m]=(0,c.useState)(null),[n,o]=(0,c.useState)(null),[p,q]=(0,c.useState)(null),r=(0,c.useCallback)(a=>{if(!a)return[];if(Array.isArray(a))return Array.from(new Set(a.map(a=>String(a||"").trim()).filter(Boolean)));if("string"==typeof a){let b=a.trim();if(!b)return[];try{let a=JSON.parse(b);if(Array.isArray(a))return Array.from(new Set(a.map(a=>String(a||"").trim()).filter(Boolean)))}catch{}return Array.from(new Set(b.split(",").map(a=>a.trim()).filter(Boolean)))}return[]},[]),s=(0,c.useCallback)(a=>{let b=String(a||"").match(/^---\n([\s\S]*?)\n---\n?/);if(!b)return[];let c=b[1].split("\n").find(a=>a.trim().toLowerCase().startsWith("depends_on:"));return c?r(c.slice(c.indexOf(":")+1).trim()):[]},[r]),t=(0,c.useCallback)((a,b)=>{let c=r(a.depends_on);if(c.length>0)return{...a,depends_on:c};let d="string"==typeof a?.content?s(a.content):[];if(d.length>0)return{...a,depends_on:d};let e=r(b?.depends_on);return e.length>0?{...a,depends_on:e}:a},[s,r]),u=(0,c.useCallback)(async()=>{try{let a=new URLSearchParams;d&&a.set("project",d),e&&a.set("status",e),f&&a.set("orphan","1");let b=await fetch(`/api/tasks?${a.toString()}`);if(!b.ok)throw Error("Failed to fetch tasks");let c=await b.json(),g=Array.isArray(c.tasks)?c.tasks.map(a=>t(a)):[];i(g),m(null)}catch(a){m(a instanceof Error?a:Error("Unknown error"))}finally{k(!1)}},[d,e,f]);(0,c.useEffect)(()=>{u()},[u]),(0,c.useEffect)(()=>{if(!b||!g)return;let a=setInterval(u,3e3);return()=>clearInterval(a)},[b,g,u]),(0,c.useEffect)(()=>{if(b||!g)return;let a={auth:{getSession:async()=>({data:{session:{access_token:"local-token",refresh_token:"local-refresh",expires_in:3600,user:{id:A.id,email:A.email,user_metadata:{name:A.name,full_name:A.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(){}},c=a.channel("tasks-changes").on("postgres_changes",{event:"*",schema:"public",table:"tasks"},a=>{"INSERT"===a.eventType?i(b=>{let c=t(a.new);return b.some(a=>a.id===c.id)?b:[c,...b]}):"UPDATE"===a.eventType?i(b=>b.map(b=>b.id===a.new.id?t(a.new,b):b)):"DELETE"===a.eventType&&i(b=>b.filter(b=>b.id!==a.old.id))}).subscribe();return()=>{a.removeChannel(c)}},[g,b]),(0,c.useEffect)(()=>{if(b||!g)return;let a=setInterval(u,3e3);return()=>clearInterval(a)},[g,b,u]);let v=(0,c.useCallback)(async(a,b)=>{let c=await fetch("/api/tasks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:a,swarm_models:b})});if(!c.ok)throw Error((await c.json()).error||"Failed to create task");let{task:d}=await c.json(),e=t(d);return i(a=>a.some(a=>a.id===e.id)?a:[e,...a]),e},[a.realtime,t]),w=(0,c.useCallback)(async(a,b)=>{let c=await fetch(`/api/tasks/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!c.ok){let a=null;throw"function"==typeof c.json&&(a=await c.json().catch(a=>(console.warn("[useTasks] failed to parse response:",a),null))),Error(a?.error||a?.details||`Failed to update task (${c.status} ${c.statusText||"Error"})`)}let{task:d}=await c.json();return i(b=>b.map(b=>b.id===a?t({...b,...d},b):b)),t(d)},[a.realtime,t]),x=(0,c.useCallback)(async a=>{if(!(await fetch(`/api/tasks/${a}`,{method:"DELETE"})).ok)throw Error("Failed to delete task");i(b=>b.filter(b=>b.id!==a))},[a.realtime]),y=(0,c.useCallback)(async a=>{let b=await fetch("/api/queue/complete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok)throw Error((await b.json().catch(()=>({}))).error||"Failed to complete task stage");let{task:c}=await b.json();return i(b=>b.map(b=>b.id===a.taskId?t({...b,...c},b):b)),t(c)},[a.realtime,t]),z=(0,c.useCallback)(async a=>{o(a.taskId),q(null);try{let b=await fetch(`/api/orchestrator/tasks/${a.taskId}/cancel`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a.reason?{reason:a.reason}:{})});if(!b.ok){let a=await b.json().catch(()=>({})),c=a?.error||"Failed to cancel workflow";throw Error(c)}return b.json()}catch(b){let a=b instanceof Error?b:Error("Failed to cancel workflow");throw q(a),a}finally{o(null)}},[]),B=(0,c.useCallback)(async a=>{let b=await fetch(`/api/tasks/${a}`),c=await b.json().catch(a=>(console.warn("[useTasks] failed to parse response:",a),null));if(!b.ok)throw Error(c?.error||"Failed to fetch task details");return t(c?.task)},[t]),C=(0,c.useCallback)(async a=>{let b=await fetch("/api/tasks/assign-orphans",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({project_id:a})}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c?.error||"Failed to assign orphan tasks");return await u(),{updatedCount:Number(c?.updatedCount||0),taskIds:Array.isArray(c?.taskIds)?c.taskIds:[]}},[u]);return{tasks:h,isLoading:j,error:l,cancellingTaskId:n,isCancelling:!!n,cancelError:p,refetch:u,createTask:v,updateTask:w,deleteTask:x,completeTaskStage:y,cancelWorkflow:z,fetchTask:B,assignOrphanTasksToProject:C}}({project:a.slug});return(0,b.jsx)("div",{className:"modal-backdrop p-2 sm:p-4 z-50 overflow-y-auto flex items-center justify-center",onClick:a=>a.target===a.currentTarget&&d(),children:(0,b.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,b.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,b.jsxs)("div",{children:[(0,b.jsxs)("h2",{className:"text-xl font-bold",children:["Tasks for ",a.name]}),(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5",children:"Viewing all tasks associated with this project."})]}),(0,b.jsx)("button",{onClick:d,className:"p-2 rounded-xl hover:bg-[var(--muted)]/50 transition-colors",children:(0,b.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,b.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto p-8",children:f?(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center py-20",children:[(0,b.jsx)("span",{className:"spinner w-8 h-8 border-3 border-[var(--primary)] border-t-transparent rounded-full mb-4"}),(0,b.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"Loading project tasks..."})]}):(0,b.jsx)(z,{tasks:e})}),(0,b.jsx)("div",{className:"px-8 py-6 border-t border-[var(--card-border)] flex justify-end flex-shrink-0",children:(0,b.jsx)("button",{onClick:d,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"})})]})})}a.s(["default",()=>C],984806)}];
17
17
 
18
18
  //# sourceMappingURL=apps_local_app_projects_page_tsx_b5cec607._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[514760,a=>{"use strict";var b=a.i(308316),c=a.i(786220);function d(a){return null===a.installed?"checking":a.installed?!a.authenticated&&a.authCmd?"needs-auth":"ready":"not-installed"}let e=[{id:"claude",label:"Claude Code",bin:"claude",description:"Recommended for the fastest AGX setup.",installCmd:"npm install -g @anthropic-ai/claude-code",docsUrl:"https://docs.anthropic.com/en/docs/claude-code/quickstart",recommended:!0,statusLabel:"Installed",authCheck:{cmd:'claude -p "say yes" 2>/dev/null',timeout:15e3},authCmd:{cmd:"claude",description:"Opens browser for Anthropic login"}},{id:"codex",label:"Codex",bin:"codex",description:"OpenAI's terminal coding agent.",installCmd:"npm install -g @openai/codex",docsUrl:"https://github.com/openai/codex",statusLabel:"Installed",authCheck:{cmd:"codex --version 2>/dev/null",timeout:5e3},authCmd:{cmd:"codex login --device-auth",description:"Device auth flow for OpenAI"}},{id:"gemini",label:"Gemini CLI",bin:"gemini",description:"Google's CLI for Gemini workflows.",installCmd:"npm install -g @google/gemini-cli",docsUrl:"https://github.com/google-gemini/gemini-cli",statusLabel:"Installed",authCheck:{cmd:'echo "hi" | gemini 2>/dev/null',timeout:15e3},authCmd:{cmd:"gemini",description:"Opens browser for Google login"}},{id:"ollama",label:"Ollama",bin:"ollama",description:"Run local models on your machine.",installCmd:"curl -fsSL https://ollama.com/install.sh | sh",docsUrl:"https://ollama.com/download",statusLabel:"Installed",authCheck:{cmd:"ollama list 2>/dev/null",timeout:5e3}},{id:"zai",label:"Z.AI",bin:"claude",description:"Use the Claude CLI with your Z.AI API key.",installCmd:"npm install -g @anthropic-ai/claude-code",docsUrl:"https://z.ai/",installNote:"Requires Claude Code plus a configured Z.AI API key.",statusLabel:"Via Claude CLI",authCheck:{cmd:'test -n "$ANTHROPIC_API_KEY"',timeout:5e3},authCmd:{cmd:"export ANTHROPIC_API_KEY=<your-key>",description:"Set your Z.AI API key"}}].map(a=>({id:a.id,name:a.label,description:a.description,installCmd:a.installCmd,docsUrl:a.docsUrl,installNote:a.installNote,recommended:a.recommended,authCmd:a.authCmd}));var f=a.i(516909),g=a.i(627421),h=a.i(70887),i=a.i(804632),j=a.i(811760),k=a.i(356239),l=a.i(349692);function m({currentStep:a,totalSteps:c}){return(0,b.jsx)("div",{className:"flex items-center gap-0",role:"progressbar","aria-valuenow":a,"aria-valuemin":1,"aria-valuemax":c,"aria-label":`Step ${a} of ${c}`,children:Array.from({length:c},(c,d)=>{let e=d+1,f=e===a,g=e<a;return(0,b.jsxs)("div",{className:"flex items-center",children:[d>0&&(0,b.jsx)("div",{className:`w-8 h-[2px] ${g?"bg-[var(--foreground)]":"bg-[var(--border)]"}`}),(0,b.jsx)("div",{className:`w-2.5 h-2.5 rounded-full transition-colors ${f?"bg-[var(--foreground)] ring-4 ring-[var(--foreground)]/10":g?"bg-[var(--foreground)]":"bg-[var(--border)]"}`})]},e)})})}function n({currentStep:a,totalSteps:c,children:d,footer:e,wide:f}){let g=f?"max-w-6xl":"max-w-2xl";return(0,b.jsxs)("div",{className:"h-screen w-full flex flex-col bg-[var(--background)]",children:[(0,b.jsx)("div",{className:"flex items-center justify-center pt-8 pb-4",children:(0,b.jsx)(m,{currentStep:a,totalSteps:c})}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto px-4 min-h-0",children:(0,b.jsx)("div",{className:`${g} mx-auto w-full py-6 h-full`,children:d})}),e&&(0,b.jsx)("div",{className:"border-t border-[var(--border)] bg-[var(--background)] px-4 py-4",children:(0,b.jsx)("div",{className:`${g} mx-auto w-full`,children:e})})]})}var o=a.i(303592);function p({text:a}){let[d,e]=(0,c.useState)(!1),f=(0,c.useCallback)(()=>{navigator.clipboard.writeText(a).then(()=>{e(!0),setTimeout(()=>e(!1),2e3)})},[a]);return(0,b.jsx)("button",{type:"button",onClick:f,className:"p-1.5 rounded-md hover:bg-[var(--muted)] transition-colors text-[var(--muted-foreground)] hover:text-[var(--foreground)]",title:"Copy command",children:d?(0,b.jsx)(g.Check,{className:"w-3.5 h-3.5 text-emerald-500"}):(0,b.jsx)(i.Copy,{className:"w-3.5 h-3.5"})})}function q({cli:a,onVerify:e,onRunInTerminal:f}){let i=d(a),[m,n]=(0,c.useState)("needs-auth"===i),[o,q]=(0,c.useState)(!1),[r,s]=(0,c.useState)(null),t="not-installed"===i||"needs-auth"===i,u=(0,c.useCallback)(async()=>{q(!0),s(null);try{let b=await fetch(`/api/providers/check/${a.id}`,{cache:"no-store"});if(!b.ok)return void s("Check failed");(await b.json()).authenticated?e?.(a.id):s("Not authenticated yet")}catch{s("Check failed")}finally{q(!1)}},[a.id,e]),v="not-installed"===i?a.installCmd:a.authCmd?.cmd;return(0,b.jsxs)("div",{className:"border border-[var(--card-border)] rounded-lg overflow-hidden",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>t&&n(!m),className:`w-full flex items-center gap-2.5 px-3 py-2 transition-colors text-left ${t?"hover:bg-[var(--item-hover-bg)] cursor-pointer":"cursor-default"}`,children:[(0,b.jsx)("div",{className:"shrink-0",children:"checking"===i?(0,b.jsx)(h.Circle,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)] animate-pulse"}):"ready"===i?(0,b.jsx)("div",{className:"w-4 h-4 rounded-full bg-emerald-100 dark:bg-emerald-900/30 flex items-center justify-center",children:(0,b.jsx)(g.Check,{className:"w-2.5 h-2.5 text-emerald-600 dark:text-emerald-400"})}):"needs-auth"===i?(0,b.jsx)("div",{className:"w-4 h-4 rounded-full bg-amber-100 dark:bg-amber-900/30 flex items-center justify-center",children:(0,b.jsx)(h.Circle,{className:"w-2.5 h-2.5 text-amber-600 dark:text-amber-400"})}):(0,b.jsx)(h.Circle,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)]"})}),(0,b.jsx)("span",{className:"flex-1 min-w-0 text-[13px] font-semibold text-[var(--foreground)] truncate",children:a.name}),"ready"===i&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-emerald-600 dark:text-emerald-400",children:"Ready"}),"needs-auth"===i&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-amber-600 dark:text-amber-400",children:"Needs auth"}),"not-installed"===i&&a.recommended&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-[var(--muted-foreground)]",children:"Recommended"}),t&&(0,b.jsx)(j.ChevronDown,{className:`w-3.5 h-3.5 text-[var(--muted-foreground)] transition-transform ${m?"rotate-180":""}`})]}),m&&t&&v&&(0,b.jsxs)("div",{className:"px-3 pb-2.5 pt-1 border-t border-[var(--card-border)] flex items-center gap-1.5",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>f?.(v),className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-[11px] font-medium rounded-md bg-[var(--foreground)] text-[var(--background)] hover:opacity-90 transition-colors",children:[(0,b.jsx)(k.Terminal,{className:"w-3 h-3"}),"Run"]}),"needs-auth"===i&&(0,b.jsxs)("button",{type:"button",onClick:u,disabled:o,className:"inline-flex items-center gap-1 px-2.5 py-1 text-[11px] font-medium rounded-md border border-[var(--card-border)] text-[var(--foreground)] hover:bg-[var(--secondary)] transition-colors disabled:opacity-60",children:[o&&(0,b.jsx)(l.Loader2,{className:"w-3 h-3 animate-spin"}),o?"Checking":"Verify"]}),(0,b.jsx)(p,{text:v}),r&&(0,b.jsx)("span",{className:"text-[10px] text-amber-600 dark:text-amber-400 ml-auto",children:r})]})]})}function r({clis:a,readyState:d,authenticatedCount:e,totalCount:f,onVerifySuccess:g,onNext:h}){let i="ready"===d,j=(0,c.useRef)(null),m=(0,c.useCallback)(a=>{j.current?.sendCommand(a)},[]);return(0,b.jsxs)(n,{currentStep:1,totalSteps:2,wide:!0,footer:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-[13px] text-[var(--muted-foreground)]",children:(0,b.jsxs)("span",{className:i?"text-emerald-600 dark:text-emerald-400":"",children:[e,"/",f," providers ready"]})}),(0,b.jsx)("button",{type:"button",onClick:h,disabled:!i,className:"inline-flex items-center gap-2 px-6 py-2.5 bg-[var(--foreground)] text-[var(--background)] text-[14px] font-semibold rounded-lg hover:opacity-90 transition-all disabled:opacity-40 disabled:cursor-not-allowed",children:"Next"})]}),children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("h1",{className:"text-[24px] font-bold text-[var(--foreground)] tracking-tight",children:"Connect a Provider"}),(0,b.jsxs)("p",{className:"mt-2 text-[14px] text-[var(--muted-foreground)] leading-relaxed",children:["AGX orchestrates AI agents across multiple providers.",(0,b.jsx)("br",{}),"Connect at least one to get started."]})]}),(0,b.jsxs)("div",{className:"flex gap-6 min-h-0 items-start",children:[(0,b.jsxs)("div",{className:"w-[280px] shrink-0",children:["checking"===d&&(0,b.jsxs)("div",{className:"text-center py-8",children:[(0,b.jsx)(l.Loader2,{className:"w-6 h-6 animate-spin text-[var(--muted-foreground)] mx-auto"}),(0,b.jsx)("p",{className:"mt-3 text-[13px] text-[var(--muted-foreground)]",children:"Detecting installed providers..."})]}),"error"===d&&(0,b.jsx)("div",{className:"text-center py-8",children:(0,b.jsx)("p",{className:"text-[14px] text-[var(--muted-foreground)]",children:"Could not detect providers. Please reload."})}),("needs-setup"===d||"ready"===d)&&(0,b.jsx)("div",{className:"space-y-1.5",children:a.map(a=>(0,b.jsx)(q,{cli:a,onVerify:g,onRunInTerminal:m},a.id))})]}),(0,b.jsxs)("div",{className:"flex-1 min-w-0 h-[420px] flex flex-col rounded-xl border border-[var(--card-border)] overflow-hidden bg-[#1e1e1e]",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-[var(--card-border)] bg-[var(--secondary)] shrink-0",children:[(0,b.jsx)(k.Terminal,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)]"}),(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Terminal"})]}),(0,b.jsx)("div",{className:"flex-1 min-h-0",children:(0,b.jsx)(o.default,{ref:j,tabId:"setup-provider"})})]})]})]})}var s=a.i(379065);let t=(0,a.i(831709).default)("plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]]),u=[{id:"linear",name:"Linear",description:"Read and update tickets so agents can track work in Linear during execution.",docsUrl:"https://linear.app/docs/mcp"}],v=[{id:"claude",label:"Claude Code",launchCmd:"claude"},{id:"codex",label:"Codex",launchCmd:"codex"},{id:"gemini",label:"Gemini CLI",launchCmd:"gemini"}];function w({onFinish:a,onBack:d}){let[e,f]=(0,c.useState)(!0),[h,i]=(0,c.useState)({}),[j,m]=(0,c.useState)({}),[p,q]=(0,c.useState)(null),[r,w]=(0,c.useState)(null),x=(0,c.useRef)(null),y=(0,c.useCallback)(a=>{x.current?.sendCommand(a)},[]),z=(0,c.useCallback)(async()=>{try{let[a,b]=await Promise.all([fetch("/api/linear/status"),fetch("/api/linear/mcp-setup")]),c=await a.json(),d=await b.json();i(c.clis??{}),m(d.configured??{})}catch{}finally{f(!1)}},[]);(0,c.useEffect)(()=>{z()},[z]);let A=(0,c.useCallback)(async a=>{q(a),w(null);try{let b=await fetch("/api/linear/mcp-setup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cli:a})});if(b.ok)await z();else{let a=await b.json().catch(()=>({}));w(a.error||"Failed to configure MCP")}}catch{w("Failed to configure MCP")}finally{q(null)}},[z]),B=v.filter(a=>h[a.id]),C=B.some(a=>j[a.id]);return(0,b.jsxs)(n,{currentStep:2,totalSteps:2,wide:!0,footer:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("button",{type:"button",onClick:d,className:"text-[14px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:"Back"}),(0,b.jsx)("button",{type:"button",onClick:a,className:"inline-flex items-center gap-2 px-6 py-2.5 bg-[var(--foreground)] text-[var(--background)] text-[14px] font-semibold rounded-lg hover:opacity-90 transition-all",children:C?"Finish":"Skip"})]}),children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("h1",{className:"text-[24px] font-bold text-[var(--foreground)] tracking-tight",children:"Configure MCP Servers"}),(0,b.jsx)("p",{className:"mt-2 text-[14px] text-[var(--muted-foreground)] leading-relaxed",children:"MCP servers let your agents interact with external tools. After registering a server below, launch your CLI in the terminal to complete the OAuth login."})]}),(0,b.jsxs)("div",{className:"flex gap-6 min-h-0 items-start",children:[(0,b.jsx)("div",{className:"w-[380px] shrink-0 space-y-6",children:e?(0,b.jsxs)("div",{className:"text-center py-8",children:[(0,b.jsx)(l.Loader2,{className:"w-6 h-6 animate-spin text-[var(--muted-foreground)] mx-auto"}),(0,b.jsx)("p",{className:"mt-3 text-[13px] text-[var(--muted-foreground)]",children:"Checking MCP configuration..."})]}):(0,b.jsxs)(b.Fragment,{children:[u.map(a=>(0,b.jsxs)("div",{className:"border border-[var(--card-border)] rounded-lg overflow-hidden",children:[(0,b.jsxs)("div",{className:"px-4 py-3 flex items-center gap-3",children:[(0,b.jsx)("div",{className:"w-8 h-8 rounded-lg bg-[var(--secondary)] flex items-center justify-center",children:(0,b.jsx)(t,{className:"w-4 h-4 text-[var(--foreground)]"})}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[14px] font-semibold text-[var(--foreground)]",children:a.name}),C&&(0,b.jsx)("span",{className:"text-[11px] font-medium text-emerald-600 dark:text-emerald-400 bg-emerald-50 dark:bg-emerald-900/20 px-1.5 py-0.5 rounded",children:"Registered"})]}),(0,b.jsx)("p",{className:"text-[12px] text-[var(--muted-foreground)]",children:a.description})]})]}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)] px-4 py-3 space-y-2",children:[(0,b.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)] mb-2",children:"Register & authenticate per CLI"}),v.map(a=>{let c=h[a.id],d=j[a.id],e=p===a.id;return(0,b.jsxs)("div",{className:`flex items-center justify-between rounded-md border border-[var(--card-border)] px-3 py-2.5 ${!c?"opacity-40":""}`,children:[(0,b.jsx)("span",{className:"text-[13px] text-[var(--foreground)]",children:a.label}),c?d?(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[11px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(g.Check,{className:"w-3.5 h-3.5"}),"Registered"]}),(0,b.jsx)("button",{type:"button",onClick:()=>y(a.launchCmd),className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-[11px] font-medium rounded-md border border-[var(--card-border)] hover:bg-[var(--secondary)] transition-colors",title:`Launch ${a.label} to authenticate`,children:"Launch & authenticate"})]}):(0,b.jsx)("button",{type:"button",onClick:()=>A(a.id),disabled:e,className:"inline-flex items-center gap-1.5 px-3 py-1 text-[12px] font-medium rounded-md border border-[var(--card-border)] hover:bg-[var(--secondary)] transition-colors disabled:opacity-50",children:e?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(l.Loader2,{className:"w-3 h-3 animate-spin"}),"Registering..."]}):"Register"}):(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:"Not installed"})]},a.id)}),r&&(0,b.jsx)("p",{className:"text-[12px] text-red-500 dark:text-red-400 mt-1",children:r})]}),(0,b.jsx)("div",{className:"border-t border-[var(--card-border)] px-4 py-2.5",children:(0,b.jsxs)("a",{href:a.docsUrl,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-[12px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:["Learn more about ",a.name," MCP",(0,b.jsx)(s.ExternalLink,{className:"w-3 h-3"})]})})]},a.id)),0===B.length&&(0,b.jsx)("div",{className:"text-center py-4",children:(0,b.jsx)("p",{className:"text-[13px] text-[var(--muted-foreground)]",children:"No CLI providers detected. Go back and install a provider first, or skip this step."})}),(0,b.jsxs)("p",{className:"text-[11px] leading-relaxed text-[var(--muted-foreground)]",children:["Registering writes the MCP server into the CLI config. You still need to launch the CLI (right) and complete the interactive OAuth flow (usually ",(0,b.jsx)("code",{className:"text-[var(--foreground)]",children:"/mcp"}),")."]})]})}),(0,b.jsxs)("div",{className:"flex-1 min-w-0 h-[500px] flex flex-col rounded-xl border border-[var(--card-border)] overflow-hidden bg-[#1e1e1e]",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-[var(--card-border)] bg-[var(--secondary)] shrink-0",children:[(0,b.jsx)(k.Terminal,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)]"}),(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Terminal"})]}),(0,b.jsx)("div",{className:"flex-1 min-h-0",children:(0,b.jsx)(o.default,{ref:x,tabId:"setup-mcp"})})]})]})]})}function x(){let a=function(){let[a,b]=(0,c.useState)("checking"),[f,g]=(0,c.useState)(e.map(a=>({...a,installed:null,authenticated:null})));(0,c.useEffect)(()=>{let a=!1;return(async()=>{try{let c=await fetch("/api/providers",{cache:"no-store"});if(a)return;if(!c.ok)return void b("error");let f=await c.json(),h=Array.isArray(f?.providers)?f.providers:[],i=e.map(a=>{let b=h.find(b=>b?.id===a.id);return{...a,installed:b?.installed??!1,authenticated:b?.authenticated??!1}});a||(g(i),b(i.some(a=>"ready"===d(a))?"ready":"needs-setup"))}catch{a||b("error")}})(),()=>{a=!0}},[]);let h=(0,c.useCallback)(a=>{g(c=>{let e=c.map(b=>b.id===a?{...b,authenticated:!0}:b);return e.some(a=>"ready"===d(a))&&b("ready"),e})},[]),i=(0,c.useMemo)(()=>f.filter(a=>"needs-auth"===d(a)).map(a=>a.id),[f]),j=i.join(",");(0,c.useEffect)(()=>{if("checking"===a||0===i.length)return;let b=new AbortController,c=new Map;return i.forEach(function a(d){if(b.signal.aborted)return;let e=setTimeout(async()=>{if(!b.signal.aborted){try{let a=await fetch(`/api/providers/check/${d}`,{cache:"no-store",signal:b.signal});if(b.signal.aborted)return;if(a.ok){let b=await a.json();if(b.authenticated)return void h(d);if(!b.installed)return void g(a=>a.map(a=>a.id===d?{...a,installed:!1,authenticated:!1}:a))}}catch{if(b.signal.aborted)return}b.signal.aborted||a(d)}},5e3);c.set(d,e)}),()=>{b.abort(),c.forEach(a=>clearTimeout(a))}},[a,j,h]);let k=f.filter(a=>"ready"===d(a)).length;return{readyState:a,clis:f,authenticatedCount:k,totalCount:f.length,handleVerifySuccess:h}}(),g=function(){let a=(0,f.useRouter)(),[b,d]=(0,c.useState)(1),e=(0,c.useCallback)(()=>{d(a=>Math.min(a+1,2))},[]);return{step:b,goNext:e,goBack:(0,c.useCallback)(()=>{d(a=>Math.max(a-1,1))},[]),finish:(0,c.useCallback)(()=>{a.push("/")},[a])}}();return(0,b.jsxs)(b.Fragment,{children:[1===g.step&&(0,b.jsx)(r,{clis:a.clis,readyState:a.readyState,authenticatedCount:a.authenticatedCount,totalCount:a.totalCount,onVerifySuccess:a.handleVerifySuccess,onNext:g.goNext}),2===g.step&&(0,b.jsx)(w,{onBack:g.goBack,onFinish:g.finish})]})}a.s(["default",()=>x],514760)}];
1
+ module.exports=[514760,a=>{"use strict";var b=a.i(308316),c=a.i(786220);function d(a){return null===a.installed?"checking":a.installed?!a.authenticated&&a.authCmd?"needs-auth":"ready":"not-installed"}let e=[{id:"claude",label:"Claude Code",bin:"claude",description:"Recommended for the fastest AGX setup.",installCmd:"npm install -g @anthropic-ai/claude-code",docsUrl:"https://docs.anthropic.com/en/docs/claude-code/quickstart",recommended:!0,statusLabel:"Installed",authCheck:{cmd:'claude -p "say yes" 2>/dev/null',timeout:15e3},authCmd:{cmd:"claude",description:"Opens browser for Anthropic login"}},{id:"codex",label:"Codex",bin:"codex",description:"OpenAI's terminal coding agent.",installCmd:"npm install -g @openai/codex",docsUrl:"https://github.com/openai/codex",statusLabel:"Installed",authCheck:{cmd:"codex --version 2>/dev/null",timeout:5e3},authCmd:{cmd:"codex login --device-auth",description:"Device auth flow for OpenAI"}},{id:"gemini",label:"Gemini CLI",bin:"gemini",description:"Google's CLI for Gemini workflows.",installCmd:"npm install -g @google/gemini-cli",docsUrl:"https://github.com/google-gemini/gemini-cli",statusLabel:"Installed",authCheck:{cmd:'echo "hi" | gemini 2>/dev/null',timeout:15e3},authCmd:{cmd:"gemini",description:"Opens browser for Google login"}},{id:"ollama",label:"Ollama",bin:"ollama",description:"Run local models on your machine.",installCmd:"curl -fsSL https://ollama.com/install.sh | sh",docsUrl:"https://ollama.com/download",statusLabel:"Installed",authCheck:{cmd:"ollama list 2>/dev/null",timeout:5e3}},{id:"zai",label:"Z.AI",bin:"claude",description:"Use the Claude CLI with your Z.AI API key.",installCmd:"npm install -g @anthropic-ai/claude-code",docsUrl:"https://z.ai/",installNote:"Requires Claude Code plus a configured Z.AI API key.",statusLabel:"Via Claude CLI",authCheck:{cmd:'test -n "$ANTHROPIC_API_KEY"',timeout:5e3},authCmd:{cmd:"export ANTHROPIC_API_KEY=<your-key>",description:"Set your Z.AI API key"}}].map(a=>({id:a.id,name:a.label,description:a.description,installCmd:a.installCmd,docsUrl:a.docsUrl,installNote:a.installNote,recommended:a.recommended,authCmd:a.authCmd}));var f=a.i(516909),g=a.i(627421),h=a.i(70887),i=a.i(804632),j=a.i(811760),k=a.i(356239),l=a.i(349692);function m({currentStep:a,totalSteps:c}){return(0,b.jsx)("div",{className:"flex items-center gap-0",role:"progressbar","aria-valuenow":a,"aria-valuemin":1,"aria-valuemax":c,"aria-label":`Step ${a} of ${c}`,children:Array.from({length:c},(c,d)=>{let e=d+1,f=e===a,g=e<a;return(0,b.jsxs)("div",{className:"flex items-center",children:[d>0&&(0,b.jsx)("div",{className:`w-8 h-[2px] ${g?"bg-[var(--foreground)]":"bg-[var(--border)]"}`}),(0,b.jsx)("div",{className:`w-2.5 h-2.5 rounded-full transition-colors ${f?"bg-[var(--foreground)] ring-4 ring-[var(--foreground)]/10":g?"bg-[var(--foreground)]":"bg-[var(--border)]"}`})]},e)})})}function n({currentStep:a,totalSteps:c,children:d,footer:e,wide:f}){let g=f?"max-w-6xl":"max-w-2xl";return(0,b.jsxs)("div",{className:"h-screen w-full flex flex-col bg-[var(--background)]",children:[(0,b.jsx)("div",{className:"flex items-center justify-center pt-8 pb-4",children:(0,b.jsx)(m,{currentStep:a,totalSteps:c})}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto px-4 min-h-0",children:(0,b.jsx)("div",{className:`${g} mx-auto w-full py-6 h-full`,children:d})}),e&&(0,b.jsx)("div",{className:"border-t border-[var(--border)] bg-[var(--background)] px-4 py-4",children:(0,b.jsx)("div",{className:`${g} mx-auto w-full`,children:e})})]})}var o=a.i(303592);function p({text:a}){let[d,e]=(0,c.useState)(!1),f=(0,c.useCallback)(()=>{navigator.clipboard.writeText(a).then(()=>{e(!0),setTimeout(()=>e(!1),2e3)})},[a]);return(0,b.jsx)("button",{type:"button",onClick:f,className:"p-1.5 rounded-md hover:bg-[var(--muted)] transition-colors text-[var(--muted-foreground)] hover:text-[var(--foreground)]",title:"Copy command",children:d?(0,b.jsx)(g.Check,{className:"w-3.5 h-3.5 text-emerald-500"}):(0,b.jsx)(i.Copy,{className:"w-3.5 h-3.5"})})}function q({cli:a,onVerify:e,onRunInTerminal:f}){let i=d(a),[m,n]=(0,c.useState)("needs-auth"===i),[o,q]=(0,c.useState)(!1),[r,s]=(0,c.useState)(null),t="not-installed"===i||"needs-auth"===i,u=(0,c.useCallback)(async()=>{q(!0),s(null);try{let b=await fetch(`/api/providers/check/${a.id}`,{cache:"no-store"});if(!b.ok)return void s("Check failed");(await b.json()).authenticated?e?.(a.id):s("Not authenticated yet")}catch{s("Check failed")}finally{q(!1)}},[a.id,e]),v="not-installed"===i?a.installCmd:a.authCmd?.cmd;return(0,b.jsxs)("div",{className:"border border-[var(--card-border)] rounded-lg overflow-hidden",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>t&&n(!m),className:`w-full flex items-center gap-2.5 px-3 py-2 transition-colors text-left ${t?"hover:bg-[var(--item-hover-bg)] cursor-pointer":"cursor-default"}`,children:[(0,b.jsx)("div",{className:"shrink-0",children:"checking"===i?(0,b.jsx)(h.Circle,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)] animate-pulse"}):"ready"===i?(0,b.jsx)("div",{className:"w-4 h-4 rounded-full bg-emerald-100 dark:bg-emerald-900/30 flex items-center justify-center",children:(0,b.jsx)(g.Check,{className:"w-2.5 h-2.5 text-emerald-600 dark:text-emerald-400"})}):"needs-auth"===i?(0,b.jsx)("div",{className:"w-4 h-4 rounded-full bg-amber-100 dark:bg-amber-900/30 flex items-center justify-center",children:(0,b.jsx)(h.Circle,{className:"w-2.5 h-2.5 text-amber-600 dark:text-amber-400"})}):(0,b.jsx)(h.Circle,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)]"})}),(0,b.jsx)("span",{className:"flex-1 min-w-0 text-[13px] font-semibold text-[var(--foreground)] truncate",children:a.name}),"ready"===i&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-emerald-600 dark:text-emerald-400",children:"Ready"}),"needs-auth"===i&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-amber-600 dark:text-amber-400",children:"Needs auth"}),"not-installed"===i&&a.recommended&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-[var(--muted-foreground)]",children:"Recommended"}),t&&(0,b.jsx)(j.ChevronDown,{className:`w-3.5 h-3.5 text-[var(--muted-foreground)] transition-transform ${m?"rotate-180":""}`})]}),m&&t&&v&&(0,b.jsxs)("div",{className:"px-3 pb-2.5 pt-1 border-t border-[var(--card-border)] flex items-center gap-1.5",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>f?.(v),className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-[11px] font-medium rounded-md bg-[var(--foreground)] text-[var(--background)] hover:opacity-90 transition-colors",children:[(0,b.jsx)(k.Terminal,{className:"w-3 h-3"}),"Run"]}),"needs-auth"===i&&(0,b.jsxs)("button",{type:"button",onClick:u,disabled:o,className:"inline-flex items-center gap-1 px-2.5 py-1 text-[11px] font-medium rounded-md border border-[var(--card-border)] text-[var(--foreground)] hover:bg-[var(--secondary)] transition-colors disabled:opacity-60",children:[o&&(0,b.jsx)(l.Loader2,{className:"w-3 h-3 animate-spin"}),o?"Checking":"Verify"]}),(0,b.jsx)(p,{text:v}),r&&(0,b.jsx)("span",{className:"text-[10px] text-amber-600 dark:text-amber-400 ml-auto",children:r})]})]})}function r({clis:a,readyState:d,authenticatedCount:e,totalCount:f,onVerifySuccess:g,onNext:h}){let i="ready"===d,j=(0,c.useRef)(null),m=(0,c.useCallback)(a=>{j.current?.sendCommand(a)},[]);return(0,b.jsxs)(n,{currentStep:1,totalSteps:2,wide:!0,footer:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-[13px] text-[var(--muted-foreground)]",children:(0,b.jsxs)("span",{className:i?"text-emerald-600 dark:text-emerald-400":"",children:[e,"/",f," providers ready"]})}),(0,b.jsx)("button",{type:"button",onClick:h,disabled:!i,className:"inline-flex items-center gap-2 px-6 py-2.5 bg-[var(--foreground)] text-[var(--background)] text-[14px] font-semibold rounded-lg hover:opacity-90 transition-all disabled:opacity-40 disabled:cursor-not-allowed",children:"Next"})]}),children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("h1",{className:"text-[24px] font-bold text-[var(--foreground)] tracking-tight",children:"Connect a Provider"}),(0,b.jsxs)("p",{className:"mt-2 text-[14px] text-[var(--muted-foreground)] leading-relaxed",children:["AGX runs AI-assisted dev work across your tickets, repos, and PRs.",(0,b.jsx)("br",{}),"Connect one or more providers to power the agents that do the work."]})]}),(0,b.jsxs)("div",{className:"flex gap-6 min-h-0 items-start",children:[(0,b.jsxs)("div",{className:"w-[280px] shrink-0",children:["checking"===d&&(0,b.jsxs)("div",{className:"text-center py-8",children:[(0,b.jsx)(l.Loader2,{className:"w-6 h-6 animate-spin text-[var(--muted-foreground)] mx-auto"}),(0,b.jsx)("p",{className:"mt-3 text-[13px] text-[var(--muted-foreground)]",children:"Detecting installed providers..."})]}),"error"===d&&(0,b.jsx)("div",{className:"text-center py-8",children:(0,b.jsx)("p",{className:"text-[14px] text-[var(--muted-foreground)]",children:"Could not detect providers. Please reload."})}),("needs-setup"===d||"ready"===d)&&(0,b.jsx)("div",{className:"space-y-1.5",children:a.map(a=>(0,b.jsx)(q,{cli:a,onVerify:g,onRunInTerminal:m},a.id))})]}),(0,b.jsxs)("div",{className:"flex-1 min-w-0 h-[420px] flex flex-col rounded-xl border border-[var(--card-border)] overflow-hidden bg-[#1e1e1e]",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-[var(--card-border)] bg-[var(--secondary)] shrink-0",children:[(0,b.jsx)(k.Terminal,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)]"}),(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Terminal"})]}),(0,b.jsx)("div",{className:"flex-1 min-h-0",children:(0,b.jsx)(o.default,{ref:j,tabId:"setup-provider"})})]})]})]})}var s=a.i(379065);let t=(0,a.i(831709).default)("plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]]),u=[{id:"linear",name:"Linear",description:"So your Linear tickets show up in AGX and agents can move them through to a PR.",docsUrl:"https://linear.app/docs/mcp"}],v=[{id:"claude",label:"Claude Code",launchCmd:"claude"},{id:"codex",label:"Codex",launchCmd:"codex"},{id:"gemini",label:"Gemini CLI",launchCmd:"gemini"}];function w({onFinish:a,onBack:d}){let[e,f]=(0,c.useState)(!0),[h,i]=(0,c.useState)({}),[j,m]=(0,c.useState)({}),[p,q]=(0,c.useState)(null),[r,w]=(0,c.useState)(null),x=(0,c.useRef)(null),y=(0,c.useCallback)(a=>{x.current?.sendCommand(a)},[]),z=(0,c.useCallback)(async()=>{try{let[a,b]=await Promise.all([fetch("/api/linear/status"),fetch("/api/linear/mcp-setup")]),c=await a.json(),d=await b.json();i(c.clis??{}),m(d.configured??{})}catch{}finally{f(!1)}},[]);(0,c.useEffect)(()=>{z()},[z]);let A=(0,c.useCallback)(async a=>{q(a),w(null);try{let b=await fetch("/api/linear/mcp-setup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cli:a})});if(b.ok)await z();else{let a=await b.json().catch(()=>({}));w(a.error||"Failed to configure MCP")}}catch{w("Failed to configure MCP")}finally{q(null)}},[z]),B=v.filter(a=>h[a.id]),C=B.some(a=>j[a.id]);return(0,b.jsxs)(n,{currentStep:2,totalSteps:2,wide:!0,footer:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("button",{type:"button",onClick:d,className:"text-[14px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:"Back"}),(0,b.jsx)("button",{type:"button",onClick:a,className:"inline-flex items-center gap-2 px-6 py-2.5 bg-[var(--foreground)] text-[var(--background)] text-[14px] font-semibold rounded-lg hover:opacity-90 transition-all",children:C?"Finish":"Skip"})]}),children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("h1",{className:"text-[24px] font-bold text-[var(--foreground)] tracking-tight",children:"Configure MCP Servers"}),(0,b.jsx)("p",{className:"mt-2 text-[14px] text-[var(--muted-foreground)] leading-relaxed",children:"MCP servers let your agents interact with external tools. After registering a server below, launch your CLI in the terminal to complete the OAuth login."})]}),(0,b.jsxs)("div",{className:"flex gap-6 min-h-0 items-start",children:[(0,b.jsx)("div",{className:"w-[380px] shrink-0 space-y-6",children:e?(0,b.jsxs)("div",{className:"text-center py-8",children:[(0,b.jsx)(l.Loader2,{className:"w-6 h-6 animate-spin text-[var(--muted-foreground)] mx-auto"}),(0,b.jsx)("p",{className:"mt-3 text-[13px] text-[var(--muted-foreground)]",children:"Checking MCP configuration..."})]}):(0,b.jsxs)(b.Fragment,{children:[u.map(a=>(0,b.jsxs)("div",{className:"border border-[var(--card-border)] rounded-lg overflow-hidden",children:[(0,b.jsxs)("div",{className:"px-4 py-3 flex items-center gap-3",children:[(0,b.jsx)("div",{className:"w-8 h-8 rounded-lg bg-[var(--secondary)] flex items-center justify-center",children:(0,b.jsx)(t,{className:"w-4 h-4 text-[var(--foreground)]"})}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[14px] font-semibold text-[var(--foreground)]",children:a.name}),C&&(0,b.jsx)("span",{className:"text-[11px] font-medium text-emerald-600 dark:text-emerald-400 bg-emerald-50 dark:bg-emerald-900/20 px-1.5 py-0.5 rounded",children:"Registered"})]}),(0,b.jsx)("p",{className:"text-[12px] text-[var(--muted-foreground)]",children:a.description})]})]}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)] px-4 py-3 space-y-2",children:[(0,b.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)] mb-2",children:"Register & authenticate per CLI"}),v.map(a=>{let c=h[a.id],d=j[a.id],e=p===a.id;return(0,b.jsxs)("div",{className:`flex items-center justify-between rounded-md border border-[var(--card-border)] px-3 py-2.5 ${!c?"opacity-40":""}`,children:[(0,b.jsx)("span",{className:"text-[13px] text-[var(--foreground)]",children:a.label}),c?d?(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[11px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(g.Check,{className:"w-3.5 h-3.5"}),"Registered"]}),(0,b.jsx)("button",{type:"button",onClick:()=>y(a.launchCmd),className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-[11px] font-medium rounded-md border border-[var(--card-border)] hover:bg-[var(--secondary)] transition-colors",title:`Launch ${a.label} to authenticate`,children:"Launch & authenticate"})]}):(0,b.jsx)("button",{type:"button",onClick:()=>A(a.id),disabled:e,className:"inline-flex items-center gap-1.5 px-3 py-1 text-[12px] font-medium rounded-md border border-[var(--card-border)] hover:bg-[var(--secondary)] transition-colors disabled:opacity-50",children:e?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(l.Loader2,{className:"w-3 h-3 animate-spin"}),"Registering..."]}):"Register"}):(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:"Not installed"})]},a.id)}),r&&(0,b.jsx)("p",{className:"text-[12px] text-red-500 dark:text-red-400 mt-1",children:r})]}),(0,b.jsx)("div",{className:"border-t border-[var(--card-border)] px-4 py-2.5",children:(0,b.jsxs)("a",{href:a.docsUrl,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-[12px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:["Learn more about ",a.name," MCP",(0,b.jsx)(s.ExternalLink,{className:"w-3 h-3"})]})})]},a.id)),0===B.length&&(0,b.jsx)("div",{className:"text-center py-4",children:(0,b.jsx)("p",{className:"text-[13px] text-[var(--muted-foreground)]",children:"No CLI providers detected. Go back and install a provider first, or skip this step."})}),(0,b.jsxs)("p",{className:"text-[11px] leading-relaxed text-[var(--muted-foreground)]",children:["Registering writes the MCP server into the CLI config. You still need to launch the CLI (right) and complete the interactive OAuth flow (usually ",(0,b.jsx)("code",{className:"text-[var(--foreground)]",children:"/mcp"}),")."]})]})}),(0,b.jsxs)("div",{className:"flex-1 min-w-0 h-[500px] flex flex-col rounded-xl border border-[var(--card-border)] overflow-hidden bg-[#1e1e1e]",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-[var(--card-border)] bg-[var(--secondary)] shrink-0",children:[(0,b.jsx)(k.Terminal,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)]"}),(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Terminal"})]}),(0,b.jsx)("div",{className:"flex-1 min-h-0",children:(0,b.jsx)(o.default,{ref:x,tabId:"setup-mcp"})})]})]})]})}function x(){let a=function(){let[a,b]=(0,c.useState)("checking"),[f,g]=(0,c.useState)(e.map(a=>({...a,installed:null,authenticated:null})));(0,c.useEffect)(()=>{let a=!1;return(async()=>{try{let c=await fetch("/api/providers",{cache:"no-store"});if(a)return;if(!c.ok)return void b("error");let f=await c.json(),h=Array.isArray(f?.providers)?f.providers:[],i=e.map(a=>{let b=h.find(b=>b?.id===a.id);return{...a,installed:b?.installed??!1,authenticated:b?.authenticated??!1}});a||(g(i),b(i.some(a=>"ready"===d(a))?"ready":"needs-setup"))}catch{a||b("error")}})(),()=>{a=!0}},[]);let h=(0,c.useCallback)(a=>{g(c=>{let e=c.map(b=>b.id===a?{...b,authenticated:!0}:b);return e.some(a=>"ready"===d(a))&&b("ready"),e})},[]),i=(0,c.useMemo)(()=>f.filter(a=>"needs-auth"===d(a)).map(a=>a.id),[f]),j=i.join(",");(0,c.useEffect)(()=>{if("checking"===a||0===i.length)return;let b=new AbortController,c=new Map;return i.forEach(function a(d){if(b.signal.aborted)return;let e=setTimeout(async()=>{if(!b.signal.aborted){try{let a=await fetch(`/api/providers/check/${d}`,{cache:"no-store",signal:b.signal});if(b.signal.aborted)return;if(a.ok){let b=await a.json();if(b.authenticated)return void h(d);if(!b.installed)return void g(a=>a.map(a=>a.id===d?{...a,installed:!1,authenticated:!1}:a))}}catch{if(b.signal.aborted)return}b.signal.aborted||a(d)}},5e3);c.set(d,e)}),()=>{b.abort(),c.forEach(a=>clearTimeout(a))}},[a,j,h]);let k=f.filter(a=>"ready"===d(a)).length;return{readyState:a,clis:f,authenticatedCount:k,totalCount:f.length,handleVerifySuccess:h}}(),g=function(){let a=(0,f.useRouter)(),[b,d]=(0,c.useState)(1),e=(0,c.useCallback)(()=>{d(a=>Math.min(a+1,2))},[]);return{step:b,goNext:e,goBack:(0,c.useCallback)(()=>{d(a=>Math.max(a-1,1))},[]),finish:(0,c.useCallback)(()=>{a.push("/")},[a])}}();return(0,b.jsxs)(b.Fragment,{children:[1===g.step&&(0,b.jsx)(r,{clis:a.clis,readyState:a.readyState,authenticatedCount:a.authenticatedCount,totalCount:a.totalCount,onVerifySuccess:a.handleVerifySuccess,onNext:g.goNext}),2===g.step&&(0,b.jsx)(w,{onBack:g.goBack,onFinish:g.finish})]})}a.s(["default",()=>x],514760)}];
2
2
 
3
3
  //# sourceMappingURL=apps_local_app_setup_page_tsx_9a67cfaf._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[188834,365370,a=>{"use strict";var b=a.i(308316),c=a.i(786220);function d({initialPath:a,onSelect:d,onCancel:e}){let[f,g]=(0,c.useState)(a||""),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)(null),n=(0,c.useRef)(null),o=(0,c.useCallback)(async a=>{k(!0),m(null);try{let b=a?`?path=${encodeURIComponent(a)}`:"",c=await fetch(`/api/filesystem/browse${b}`),d=await c.json();if(!c.ok)return void m(d.error||"Failed to browse");i(d),g(d.current),n.current?.scrollTo(0,0)}catch{m("Failed to connect")}finally{k(!1)}},[]);return(0,c.useEffect)(()=>{o(a||"")},[]),(0,b.jsxs)("div",{className:"rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] overflow-hidden shadow-lg",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-[var(--card-border)] bg-[var(--muted)]/30",children:[(0,b.jsx)("input",{value:f,onChange:a=>g(a.target.value),onKeyDown:a=>{"Enter"===a.key&&o(f)},className:"input text-xs flex-1 py-1",placeholder:"Enter path..."}),(0,b.jsx)("button",{type:"button",onClick:()=>o(f),className:"text-[10px] font-bold uppercase tracking-wider text-[var(--primary)] hover:underline px-2 py-1 shrink-0",children:"Go"})]}),(0,b.jsxs)("div",{ref:n,className:"max-h-48 overflow-y-auto",children:[j&&(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)] text-center",children:"Loading..."}),l&&(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--destructive)] text-center",children:l}),!j&&h&&(0,b.jsxs)("div",{className:"py-1",children:[h.parent&&(0,b.jsxs)("button",{type:"button",onClick:()=>o(h.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,b.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"↑"}),(0,b.jsx)("span",{className:"text-[var(--muted-foreground)]",children:".."})]}),0===h.dirs.length&&!h.parent&&(0,b.jsx)("div",{className:"px-3 py-3 text-xs text-[var(--muted-foreground)] text-center",children:"No subdirectories"}),h.dirs.map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>o(a.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,b.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"📁"}),(0,b.jsx)("span",{className:"truncate",children:a.name})]},a.path))]})]}),(0,b.jsxs)("div",{className:"flex items-center justify-between px-3 py-2 border-t border-[var(--card-border)] bg-[var(--muted)]/30",children:[(0,b.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)] truncate max-w-[60%]",children:h?.current||f}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("button",{type:"button",onClick:e,className:"text-xs font-medium text-[var(--muted-foreground)] hover:underline px-2 py-1",children:"Cancel"}),(0,b.jsx)("button",{type:"button",onClick:()=>d(h?.current||f),className:"text-xs font-bold text-[var(--primary)] hover:underline px-2 py-1",children:"Select"})]})]})]})}function e(a){return{name:a.name.trim(),path:a.path.trim()}}function f(a){let{name:b,path:c}=e(a);return b||c?b?c?null:"missing_path":"missing_name":null}function g(a){for(let[b,c]of a.entries()){let a=f(c);if(a)return{index:b,issue:a,repo:c}}return null}function h(a){let{name:b,path:c}=e(a);return!!(b&&c)}function i(a){let{issue:b,repo:c}=a;return"missing_name"===b?`Folder name is required for local path "${c.path.trim()}"`:`Local path is required for folder "${c.name.trim()}"`}a.s(["findInvalidProjectRepoDraft",()=>g,"formatInvalidProjectRepoDraftMessage",()=>i,"getProjectRepoValidationIssue",()=>f,"isCompleteProjectRepoDraft",()=>h],365370);let j={name:"",description:""},k={name:"",path:"",notes:""};function l(){let[a,b]=(0,c.useState)(j),[d,e]=(0,c.useState)([k]),[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)(null),l=(0,c.useCallback)((a,b,c)=>{e(d=>d.map((d,e)=>e===a?{...d,[b]:c}:d))},[]),m=(0,c.useCallback)(()=>{e(a=>[...a,{...k}])},[]),n=(0,c.useCallback)(a=>{e(b=>b.filter((b,c)=>c!==a))},[]),o=(0,c.useCallback)(()=>{b(j),e([k]),i(null)},[]),p=(0,c.useCallback)(a=>{b({name:a.name||"",description:a.description||""}),a.repos&&a.repos.length>0?e(a.repos.map(a=>({id:a.id,name:a.name||"",path:a.path||"",git_url:a.git_url||"",notes:a.notes||""}))):e([k]),i(null)},[]);return{form:a,setForm:b,repos:d,handleRepoChange:l,addRepo:m,removeRepo:n,resetForm:o,hydrateFromProject:p,isSubmitting:f,setIsSubmitting:g,formError:h,setFormError:i}}function m(a,b){let c=g(b);if(c)throw Error(i(c));let d=b.filter(a=>h(a)).map(a=>({...a.id?{id:a.id}:{},name:a.name.trim(),path:a.path.trim(),...a.git_url?.trim()?{git_url:a.git_url.trim()}:{},notes:a.notes.trim()||void 0}));return{name:a.name.trim(),description:a.description.trim()||void 0,repos:d.length?d:void 0}}function n({form:a,repos:e,isEditingProject:g,isSubmitting:h,onFieldChange:i,onRepoChange:j,onAddRepo:k,onRemoveRepo:l}){let[m,n]=(0,c.useState)([]),[o,p]=(0,c.useState)(null),q=(0,c.useRef)(0);(0,c.useEffect)(()=>{g?n([]):n(e.map((a,b)=>b)),q.current=e.length},[g,e.length]),(0,c.useEffect)(()=>{if(!g){q.current=e.length;return}let a=q.current;n(b=>{let c=b.filter(a=>a<e.length);return e.length>a&&c.push(...Array.from({length:e.length-a},(b,c)=>a+c)),c}),q.current=e.length},[g,e.length]);let r=(0,c.useCallback)(a=>{n(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])},[]),s=(0,c.useCallback)(a=>!g||m.includes(a),[m,g]);return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsx)("div",{className:"grid gap-4",children:(0,b.jsxs)("label",{className:"space-y-1.5 block",children:[(0,b.jsx)("span",{className:"text-xs font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Project Name"}),(0,b.jsx)("input",{value:a.name,onChange:a=>i("name",a.target.value),className:"input w-full",placeholder:"e.g. AGX Cloud",disabled:h})]})}),(0,b.jsxs)("label",{className:"space-y-1.5 block",children:[(0,b.jsx)("span",{className:"text-xs font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Description"}),(0,b.jsx)("textarea",{value:a.description,onChange:a=>i("description",a.target.value),className:"input w-full h-24 resize-none",placeholder:"What is this project about?",disabled:h})]}),(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--card-border)] pb-2",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-sm font-bold uppercase tracking-widest text-[var(--muted-foreground)]",children:"Folders"}),(0,b.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,b.jsx)("button",{type:"button",onClick:k,className:"text-xs font-semibold text-[var(--primary)] hover:underline flex-shrink-0",disabled:h,children:"+ Add Folder"})]}),(0,b.jsx)("div",{className:"space-y-4",children:e.map((a,c)=>{let i=f(a);return(0,b.jsxs)("div",{className:"p-4 rounded-2xl border border-[var(--card-border)] bg-[var(--muted)]/20 space-y-3 relative group",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"text-xs font-bold text-[var(--foreground)] uppercase",children:["Folder #",c+1]}),g&&!s(c)?(0,b.jsxs)("div",{className:"mt-1 text-sm text-[var(--muted-foreground)]",children:[(0,b.jsx)("div",{children:a.name||"Unnamed folder"}),(0,b.jsx)("div",{className:"truncate",children:a.path||"No local path set"})]}):null]}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[g&&(0,b.jsx)("button",{type:"button",onClick:()=>r(c),className:"text-xs font-semibold text-[var(--primary)] hover:underline",disabled:h,children:s(c)?"Done":"Edit"}),e.length>1&&(0,b.jsx)("button",{type:"button",onClick:()=>l(c),className:"text-xs font-semibold text-[var(--destructive)] hover:underline",disabled:h,children:"Remove"})]})]}),s(c)?(0,b.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsx)("input",{value:a.name,onChange:a=>j(c,"name",a.target.value),placeholder:"Name (e.g. Frontend, API Docs, Design System)",className:`input text-sm w-full${"missing_name"===i?" border-[var(--destructive)]/50 ring-1 ring-[var(--destructive)]/20":""}`,disabled:h}),"missing_name"===i&&(0,b.jsx)("p",{className:"text-[11px] text-[var(--destructive)]",children:"Folder name is required"})]}),(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{value:a.path,onChange:a=>j(c,"path",a.target.value),placeholder:"Local path to folder",className:`input text-sm flex-1${"missing_path"===i?" border-[var(--destructive)]/50 ring-1 ring-[var(--destructive)]/20":""}`,disabled:h}),(0,b.jsx)("button",{type:"button",onClick:async()=>{try{let a=await fetch("/api/filesystem/pick-folder",{method:"POST"}),b=await a.json();b.path&&j(c,"path",b.path)}catch{p(o===c?null:c)}},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:h,children:"Browse"})]}),"missing_path"===i&&(0,b.jsx)("p",{className:"text-[11px] text-[var(--destructive)]",children:"Local path is required"})]}),o===c&&(0,b.jsx)("div",{className:"md:col-span-2",children:(0,b.jsx)(d,{initialPath:a.path||"",onSelect:a=>{j(c,"path",a),p(null)},onCancel:()=>p(null)})}),(0,b.jsx)("div",{className:"md:col-span-2",children:(0,b.jsx)("textarea",{value:a.notes,onChange:a=>j(c,"notes",a.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:h})})]}):null]},c)})})]})]})}function o({isOpen:a,onClose:d,onSubmit:e,editingProject:f,form:h,repos:i,isSubmitting:j,formError:k,onFieldChange:l,onRepoChange:m,onAddRepo:o,onRemoveRepo:p}){let[q,r]=(0,c.useState)([]);(0,c.useEffect)(()=>{let a=!1;return async function(){if(!f)return r([]);try{let b=await fetch(`/api/knowledge-notes?scope=project&subjectId=${encodeURIComponent(f.id)}`),c=(b.ok?await b.json():{note:null}).note;a||r(c?.content?[{id:c.id,content:c.content,created_at:c.updatedAt??c.createdAt,source:c.sourceType}]:[])}catch{a||r([])}}(),()=>{a=!0}},[f]);let s=!!g(i),t=!h.name.trim()||s;return a?(0,b.jsx)("div",{className:"modal-backdrop p-2 sm:p-4 z-50 overflow-y-auto flex items-center justify-center",onClick:a=>a.target===a.currentTarget&&d(),children:(0,b.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,b.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,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-bold",children:f?"Edit Project":"Create New Project"}),(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5",children:f?"Update your project settings and folders.":"Define a new project and connect folders."})]}),(0,b.jsx)("button",{onClick:d,className:"p-2 rounded-xl hover:bg-[var(--muted)]/50 transition-colors",children:(0,b.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,b.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),(0,b.jsxs)("div",{className:"flex-1 overflow-y-auto p-4 sm:p-8",children:[f&&(0,b.jsx)("div",{className:"mb-6",children:(0,b.jsxs)("div",{className:"rounded-2xl border border-[var(--card-border)] bg-[var(--muted)]/20 p-4",children:[(0,b.jsx)("h3",{className:"text-sm font-bold uppercase tracking-widest text-[var(--muted-foreground)]",children:"Living Project Note"}),q.length>0?(0,b.jsx)("div",{className:"mt-3 space-y-2",children:q.slice(0,5).map(a=>(0,b.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,b.jsx)("div",{children:a.content}),a.created_at?(0,b.jsx)("div",{className:"mt-1 text-[11px] text-[var(--muted-foreground)]",children:new Date(a.created_at).toLocaleString()}):null]},a.id))}):(0,b.jsx)("p",{className:"mt-2 text-sm text-[var(--muted-foreground)]",children:"No project note yet."})]})}),(0,b.jsx)(n,{form:h,repos:i,isEditingProject:!!f,isSubmitting:j,onFieldChange:l,onRepoChange:m,onAddRepo:o,onRemoveRepo:p}),k&&(0,b.jsx)("div",{className:"mt-6 p-4 rounded-xl bg-[var(--destructive-muted)] border border-[var(--destructive)]/20 text-sm text-[var(--destructive)]",children:k})]}),(0,b.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,b.jsx)("button",{onClick:d,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,b.jsx)("button",{onClick:e,disabled:j||t,className:"btn-primary px-8 py-2 shadow-lg shadow-[var(--primary)]/20 min-w-[120px]",children:j?(0,b.jsxs)("span",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"spinner w-3 h-3 border-2 border-white/20 border-t-white"}),"Saving..."]}):f?"Save Changes":"Create Project"})]})]})}):null}a.s(["createProjectPayload",()=>m,"default",()=>o,"useProjectFormState",()=>l],188834)}];
2
+
3
+ //# sourceMappingURL=apps_local_components_ProjectModal_tsx_c447494c._.js.map