@overlordai/server 1.0.112 → 1.0.114

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 (191) hide show
  1. package/database/migrations/003-chat-bindings-project-key-index.sql +1 -0
  2. package/database/migrations/004-drop-agent-command.sql +2 -0
  3. package/dist/adapters/command-parser.utils.d.ts +45 -0
  4. package/dist/adapters/command-parser.utils.d.ts.map +1 -0
  5. package/dist/adapters/command-parser.utils.js +144 -0
  6. package/dist/adapters/command-parser.utils.js.map +1 -0
  7. package/dist/adapters/help-text.d.ts +2 -0
  8. package/dist/adapters/help-text.d.ts.map +1 -0
  9. package/dist/adapters/help-text.js +24 -0
  10. package/dist/adapters/help-text.js.map +1 -0
  11. package/dist/adapters/lark/lark-message.parser.d.ts +7 -30
  12. package/dist/adapters/lark/lark-message.parser.d.ts.map +1 -1
  13. package/dist/adapters/lark/lark-message.parser.js +26 -138
  14. package/dist/adapters/lark/lark-message.parser.js.map +1 -1
  15. package/dist/adapters/lark/lark.adapter.d.ts +12 -0
  16. package/dist/adapters/lark/lark.adapter.d.ts.map +1 -1
  17. package/dist/adapters/lark/lark.adapter.js +83 -17
  18. package/dist/adapters/lark/lark.adapter.js.map +1 -1
  19. package/dist/adapters/slack/slack-message.parser.d.ts +2 -9
  20. package/dist/adapters/slack/slack-message.parser.d.ts.map +1 -1
  21. package/dist/adapters/slack/slack-message.parser.js +21 -113
  22. package/dist/adapters/slack/slack-message.parser.js.map +1 -1
  23. package/dist/adapters/slack/slack.adapter.d.ts +4 -0
  24. package/dist/adapters/slack/slack.adapter.d.ts.map +1 -1
  25. package/dist/adapters/slack/slack.adapter.js +78 -20
  26. package/dist/adapters/slack/slack.adapter.js.map +1 -1
  27. package/dist/adapters/slack/slack.controller.d.ts.map +1 -1
  28. package/dist/adapters/slack/slack.controller.js +5 -2
  29. package/dist/adapters/slack/slack.controller.js.map +1 -1
  30. package/dist/common/project-validation.d.ts +1 -1
  31. package/dist/common/project-validation.d.ts.map +1 -1
  32. package/dist/common/project-validation.js +1 -9
  33. package/dist/common/project-validation.js.map +1 -1
  34. package/dist/database/repositories/bot.repository.d.ts +4 -0
  35. package/dist/database/repositories/bot.repository.d.ts.map +1 -1
  36. package/dist/database/repositories/bot.repository.js +15 -0
  37. package/dist/database/repositories/bot.repository.js.map +1 -1
  38. package/dist/database/repositories/project.repository.d.ts.map +1 -1
  39. package/dist/database/repositories/project.repository.js +0 -2
  40. package/dist/database/repositories/project.repository.js.map +1 -1
  41. package/dist/database/repositories/task.repository.d.ts +1 -1
  42. package/dist/database/repositories/task.repository.d.ts.map +1 -1
  43. package/dist/database/repositories/task.repository.js +4 -1
  44. package/dist/database/repositories/task.repository.js.map +1 -1
  45. package/dist/dispatcher/cleanup.service.d.ts +5 -0
  46. package/dist/dispatcher/cleanup.service.d.ts.map +1 -1
  47. package/dist/dispatcher/cleanup.service.js +19 -0
  48. package/dist/dispatcher/cleanup.service.js.map +1 -1
  49. package/dist/dispatcher/dispatcher.module.d.ts.map +1 -1
  50. package/dist/dispatcher/dispatcher.module.js +2 -0
  51. package/dist/dispatcher/dispatcher.module.js.map +1 -1
  52. package/dist/dispatcher/dispatcher.service.d.ts +12 -4
  53. package/dist/dispatcher/dispatcher.service.d.ts.map +1 -1
  54. package/dist/dispatcher/dispatcher.service.js +150 -40
  55. package/dist/dispatcher/dispatcher.service.js.map +1 -1
  56. package/dist/dispatcher/dispatcher.types.d.ts +1 -0
  57. package/dist/dispatcher/dispatcher.types.d.ts.map +1 -1
  58. package/dist/dispatcher/scheduler.service.d.ts.map +1 -1
  59. package/dist/dispatcher/scheduler.service.js +13 -2
  60. package/dist/dispatcher/scheduler.service.js.map +1 -1
  61. package/dist/dispatcher/task-creation.service.d.ts.map +1 -1
  62. package/dist/dispatcher/task-creation.service.js +16 -1
  63. package/dist/dispatcher/task-creation.service.js.map +1 -1
  64. package/dist/dispatcher/task-lifecycle.service.d.ts +2 -2
  65. package/dist/dispatcher/task-lifecycle.service.d.ts.map +1 -1
  66. package/dist/dispatcher/task-lifecycle.service.js +16 -8
  67. package/dist/dispatcher/task-lifecycle.service.js.map +1 -1
  68. package/dist/events/event-types.d.ts +1 -0
  69. package/dist/events/event-types.d.ts.map +1 -1
  70. package/dist/notifier/notification-consumer.d.ts +18 -1
  71. package/dist/notifier/notification-consumer.d.ts.map +1 -1
  72. package/dist/notifier/notification-consumer.js +91 -4
  73. package/dist/notifier/notification-consumer.js.map +1 -1
  74. package/dist/notifier/template.service.d.ts +2 -0
  75. package/dist/notifier/template.service.d.ts.map +1 -1
  76. package/dist/notifier/template.service.js +20 -0
  77. package/dist/notifier/template.service.js.map +1 -1
  78. package/dist/web/dashboard.controller.d.ts +1 -1
  79. package/dist/web/dashboard.controller.d.ts.map +1 -1
  80. package/dist/web/dashboard.controller.js +12 -4
  81. package/dist/web/dashboard.controller.js.map +1 -1
  82. package/dist/web/dashboard.service.d.ts +18 -0
  83. package/dist/web/dashboard.service.d.ts.map +1 -1
  84. package/dist/web/dashboard.service.js +78 -8
  85. package/dist/web/dashboard.service.js.map +1 -1
  86. package/dist/web/frame-handlers/progress.handler.d.ts +3 -1
  87. package/dist/web/frame-handlers/progress.handler.d.ts.map +1 -1
  88. package/dist/web/frame-handlers/progress.handler.js +22 -3
  89. package/dist/web/frame-handlers/progress.handler.js.map +1 -1
  90. package/dist/web/project.controller.d.ts +0 -2
  91. package/dist/web/project.controller.d.ts.map +1 -1
  92. package/dist/web/task.controller.d.ts +3 -1
  93. package/dist/web/task.controller.d.ts.map +1 -1
  94. package/dist/web/task.controller.js +7 -5
  95. package/dist/web/task.controller.js.map +1 -1
  96. package/dist/web/web-event.service.d.ts.map +1 -1
  97. package/dist/web/web-event.service.js +1 -0
  98. package/dist/web/web-event.service.js.map +1 -1
  99. package/dist/web/worker-channel.gateway.d.ts.map +1 -1
  100. package/dist/web/worker-channel.gateway.js +1 -1
  101. package/dist/web/worker-channel.gateway.js.map +1 -1
  102. package/package.json +4 -4
  103. package/public/assets/{AccessTokensPage-B37kGOg-.js → AccessTokensPage-B2zkZtaB.js} +1 -1
  104. package/public/assets/{AdminPage-Jz5wJYYo.js → AdminPage-B-n-9yUY.js} +1 -1
  105. package/public/assets/{ApiReferencePage-3HCao2I-.js → ApiReferencePage-Dcik4fBN.js} +1 -1
  106. package/public/assets/{ArchitecturePage-Dkq4OMH4.js → ArchitecturePage-CDgB6NL0.js} +1 -1
  107. package/public/assets/{AuditLogPage-CBPpYMF3.js → AuditLogPage-CmxGpu8q.js} +1 -1
  108. package/public/assets/{BindPlatformPage-U0OoNP9F.js → BindPlatformPage-D-7wxMjF.js} +1 -1
  109. package/public/assets/{BotIntegrationPage-HMlGzxip.js → BotIntegrationPage-DoD5KbmU.js} +1 -1
  110. package/public/assets/BotManage-DSe8d-gZ.js +6 -0
  111. package/public/assets/{BotSetupPage-DZh6oQoQ.js → BotSetupPage-BkNF3ug4.js} +1 -1
  112. package/public/assets/{ChangelogPage-DKgK8Zi9.js → ChangelogPage-BUAm5LN6.js} +1 -1
  113. package/public/assets/{CliReferencePage-DPdhWACA.js → CliReferencePage-B6-2m7YU.js} +1 -1
  114. package/public/assets/{DeploymentPage-4VuP4mnX.js → DeploymentPage-cW2JDGd0.js} +1 -1
  115. package/public/assets/{DevWorkflowPage-CQ1hJ7Or.js → DevWorkflowPage-BbNK1Bmy.js} +1 -1
  116. package/public/assets/{DeveloperManage-Kco6t4om.js → DeveloperManage-BVkSw-WE.js} +2 -2
  117. package/public/assets/{DeveloperSetupPage-mRrbH5xe.js → DeveloperSetupPage-Cf8ehfWm.js} +1 -1
  118. package/public/assets/{DocsIndexPage-DYjwjEE0.js → DocsIndexPage-BEMGBIkx.js} +1 -1
  119. package/public/assets/{DocsLayout-CrX-ApPM.js → DocsLayout-BLcuuadd.js} +1 -1
  120. package/public/assets/{DocsPrimitives-DeUTjHq6.js → DocsPrimitives-BEIQH4P7.js} +1 -1
  121. package/public/assets/EditProjectPage-RsYg77Bf.js +2 -0
  122. package/public/assets/{EmptyState-Cuv36Xt4.js → EmptyState-D8UwaoPs.js} +1 -1
  123. package/public/assets/{EnvVariablesPage-CvHe4Xig.js → EnvVariablesPage-krKQsNzw.js} +1 -1
  124. package/public/assets/HomePage-vhKQtyLw.js +1 -0
  125. package/public/assets/{InfoRow-DeNySRbP.js → InfoRow-BbQYGWPd.js} +1 -1
  126. package/public/assets/{InstallationPage-BCGJORc8.js → InstallationPage-blIErVXZ.js} +1 -1
  127. package/public/assets/{LandingPage-CTroZzhm.js → LandingPage-CL2eVc3w.js} +1 -1
  128. package/public/assets/{LocalDevelopmentPage-BXM4MX2P.js → LocalDevelopmentPage-CNfZtynN.js} +1 -1
  129. package/public/assets/{LoginPage-A75sAGVu.js → LoginPage-C_jpU4-N.js} +1 -1
  130. package/public/assets/{MetricBar-BDEzd1N4.js → MetricBar-CCL5kOaE.js} +1 -1
  131. package/public/assets/{NotFoundPage-C8Kh0_3v.js → NotFoundPage-DiQ3T_pE.js} +1 -1
  132. package/public/assets/{OnboardingGuide-_2H21YWa.js → OnboardingGuide-xVUtEvVm.js} +1 -1
  133. package/public/assets/{PermissionsPage-2rL23RBw.js → PermissionsPage-CE5Yc52w.js} +1 -1
  134. package/public/assets/{PipelineConfigPage-B1idgNZD.js → PipelineConfigPage-BG_LWoNZ.js} +1 -1
  135. package/public/assets/{PipelineEditorPage-BePXaiIA.js → PipelineEditorPage-BR9ozDOr.js} +1 -1
  136. package/public/assets/{ProfilePage-Bsb-yYFk.js → ProfilePage-kUKBviJg.js} +1 -1
  137. package/public/assets/{ProjectDetailPage-CJ5e4NOa.js → ProjectDetailPage-VE0081wk.js} +3 -3
  138. package/public/assets/ProjectListPage-DZoCY4RY.js +6 -0
  139. package/public/assets/{PtyTerminal-DaKz0vK4.js → PtyTerminal-DY7uY9Y-.js} +7 -7
  140. package/public/assets/{QuickAuth-B7dl4f3-.js → QuickAuth-DbURb8Mn.js} +1 -1
  141. package/public/assets/{RemoveMemberConfirmDialog-2dHwvxlc.js → RemoveMemberConfirmDialog-WvwPPSjT.js} +1 -1
  142. package/public/assets/{Select-Ddvq-p-d.js → Select-B_UE_NDL.js} +1 -1
  143. package/public/assets/{SettingsPage-CBdcZRG8.js → SettingsPage-DpJ00PdY.js} +1 -1
  144. package/public/assets/{Skeleton-DobWAlna.js → Skeleton-CqLLWdXS.js} +1 -1
  145. package/public/assets/{SkillPage-B8K73UoR.js → SkillPage-D5a41yA5.js} +1 -1
  146. package/public/assets/TaskDetailPage-Dt3Hj-nd.js +21 -0
  147. package/public/assets/TaskListPage-CbmW-VAl.js +1 -0
  148. package/public/assets/{TaskStatusBadge-DEvQC-u6.js → TaskStatusBadge-DzeMf5Ey.js} +1 -1
  149. package/public/assets/TerminalHomePage-D7aNN02N.js +11 -0
  150. package/public/assets/{TokenManage-pe5Gl1xB.js → TokenManage-BCVRHkhz.js} +1 -1
  151. package/public/assets/Tooltip-BWRiD768.js +1 -0
  152. package/public/assets/{TotpSetupPage-Cg2eJ4tj.js → TotpSetupPage-D4T0gS9_.js} +1 -1
  153. package/public/assets/WorkerDetailPage-D9ZTWwot.js +1 -0
  154. package/public/assets/{WorkerListPage-ikzre6x3.js → WorkerListPage-4qQGHwbV.js} +2 -2
  155. package/public/assets/{WorkerOperationsPage-CZTm_7Iw.js → WorkerOperationsPage-DKPUYRDJ.js} +1 -1
  156. package/public/assets/{WorkerSetupGuidePage-DOoDjnsh.js → WorkerSetupGuidePage-B4B-DkyO.js} +1 -1
  157. package/public/assets/{WorkerSetupPage-CKBix5Q1.js → WorkerSetupPage-frqVW4Ll.js} +1 -1
  158. package/public/assets/{arrow-left-JxQLehNu.js → arrow-left-DEORM5c1.js} +1 -1
  159. package/public/assets/{arrow-right-B9MMPq7r.js → arrow-right-B0qrrCV_.js} +1 -1
  160. package/public/assets/{bot-D4XAIZpg.js → bot-B_Wtzq9W.js} +1 -1
  161. package/public/assets/{chevron-right-BnrKn_TK.js → chevron-right-CURI3LO_.js} +1 -1
  162. package/public/assets/{copy-BMk275-C.js → copy-4UTzTyXv.js} +1 -1
  163. package/public/assets/{download-CDL9H3k4.js → download-Dq5jLFci.js} +1 -1
  164. package/public/assets/{external-link-w9HXli2Y.js → external-link-Cj283ZgT.js} +1 -1
  165. package/public/assets/index-BiItJ2NI.css +1 -0
  166. package/public/assets/{index-BQnGxJp6.js → index-C5MJg1oC.js} +48 -48
  167. package/public/assets/{key-D2RcZwqu.js → key-BKBK0Uc2.js} +1 -1
  168. package/public/assets/{loader-circle-WkHSZw6i.js → loader-circle-B71q4Dz7.js} +1 -1
  169. package/public/assets/{pencil-DhRHGJdQ.js → pencil-DG3Q-41a.js} +1 -1
  170. package/public/assets/{plus-DjrYpu3Y.js → plus-CQjC8fgx.js} +1 -1
  171. package/public/assets/{rotate-ccw-BQIvBc59.js → rotate-ccw-CQh0kfDP.js} +1 -1
  172. package/public/assets/{scroll-text-CYw22M6v.js → scroll-text-DF3DMVZk.js} +1 -1
  173. package/public/assets/{settings-BnLpYMUh.js → settings-C_K0CJNU.js} +1 -1
  174. package/public/assets/{status-colors-BctY6ntj.js → status-colors-BnNRsWp0.js} +1 -1
  175. package/public/assets/{task-constants-Q3KTzg_P.js → task-constants-D_2_U6qL.js} +1 -1
  176. package/public/assets/{trash-2-CKUpgjbq.js → trash-2-DsQUbmfY.js} +1 -1
  177. package/public/assets/{useFetch-B2mQfB2A.js → useFetch-C8LjfJUm.js} +1 -1
  178. package/public/assets/{users-Bs898oaT.js → users-BWaNs7Vz.js} +1 -1
  179. package/public/assets/{wifi-sZC7YCLF.js → wifi-0ZLwtMKj.js} +1 -1
  180. package/public/assets/{workflow-aMBoiSG2.js → workflow-B0yaOIwg.js} +1 -1
  181. package/public/index.html +2 -2
  182. package/public/sw.js +1 -1
  183. package/public/assets/BotManage-VXqJlXLc.js +0 -6
  184. package/public/assets/EditProjectPage-Df1ZAe44.js +0 -2
  185. package/public/assets/HomePage-BMuwtC-M.js +0 -1
  186. package/public/assets/ProjectListPage-DpivjBfJ.js +0 -6
  187. package/public/assets/TaskDetailPage-iKtR7IDt.js +0 -21
  188. package/public/assets/TaskListPage-CdOI_dWD.js +0 -1
  189. package/public/assets/TerminalHomePage-BMIZMlee.js +0 -11
  190. package/public/assets/WorkerDetailPage-ChkCQsSd.js +0 -1
  191. package/public/assets/index-DrlMKbMb.css +0 -1
@@ -1,7 +1,7 @@
1
- import{c as F,a as D,j as e,p as E,x as U,f as R,u as q,i as B,r as x,B as A,q as K,E as H,h as v}from"./index-BQnGxJp6.js";import{U as J,A as V,R as z}from"./RemoveMemberConfirmDialog-2dHwvxlc.js";import{b as I}from"./date-BdNtiQTP.js";import{t as G}from"./status-colors-BctY6ntj.js";import{I as o}from"./InfoRow-DeNySRbP.js";import{u as Q}from"./useFetch-B2mQfB2A.js";import{P as X}from"./pencil-DhRHGJdQ.js";import{T as Y}from"./trash-2-CKUpgjbq.js";import{P as Z}from"./plus-DjrYpu3Y.js";import"./Select-Ddvq-p-d.js";/**
1
+ import{c as F,a as D,j as e,p as E,x as U,f as R,u as q,i as B,r as x,B as A,q as K,E as H,h as v}from"./index-C5MJg1oC.js";import{U as J,A as V,R as z}from"./RemoveMemberConfirmDialog-WvwPPSjT.js";import{T as G}from"./Tooltip-BWRiD768.js";import{b as I}from"./date-BdNtiQTP.js";import{t as Q}from"./status-colors-BnNRsWp0.js";import{I as o}from"./InfoRow-BbQYGWPd.js";import{u as X}from"./useFetch-C8LjfJUm.js";import{P as Y}from"./pencil-DG3Q-41a.js";import{T as Z}from"./trash-2-DsQUbmfY.js";import{P as ee}from"./plus-CQjC8fgx.js";import"./Select-B_UE_NDL.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const ee=F("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);function te({isOpen:n,onClose:l,onConfirm:t,projectName:m,loading:p}){const{t:j}=D();return e.jsx(E,{isOpen:n,onClose:l,onConfirm:t,title:`> ${j("projects.delete_project")}`,message:j("projects.delete_project_confirm",{name:m}),confirmLabel:j("projects.delete_project"),confirmVariant:"danger",isLoading:p})}function me(){const{key:n}=U(),l=R(),{t}=D(),m=q(r=>r.user),p=B(),[j,f]=x.useState(!1),[P,w]=x.useState(!1),[$,_]=x.useState(!1),[c,N]=x.useState(null),[L,k]=x.useState(!1),{data:a,loading:S,error:C,refetch:y}=Q(async()=>{if(!n)throw new Error("Missing project key");const[r,g,u]=await Promise.all([v.get(`web/projects/${n}`).json(),v.get(`web/projects/${n}/members`).json().catch(()=>[]),v.get("web/tasks",{searchParams:{projectKey:n,limit:"20"}}).json().then(O=>O.data).catch(()=>[])]);let b=null;if(r.pipeline)try{b=JSON.parse(r.pipeline)}catch{}return{project:r,members:g,tasks:u,pipelineConfig:b}},[n]),s=(a==null?void 0:a.project)??null,h=(a==null?void 0:a.members)??[],M=(a==null?void 0:a.tasks)??[],d=(a==null?void 0:a.pipelineConfig)??null,i=p||h.some(r=>r.developerId===(m==null?void 0:m.id)&&r.role===A.MAINTAINER);K(x.useMemo(()=>s?e.jsxs(e.Fragment,{children:[i&&e.jsxs("button",{onClick:()=>l(`/projects/${s.key}/edit`),className:"flex items-center gap-1.5 rounded-[4px] border border-[var(--border)] bg-transparent px-3 py-1.5 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:[e.jsx(X,{className:"h-3 w-3"}),t("common.edit")]}),p&&e.jsxs("button",{onClick:()=>f(!0),className:"flex items-center gap-1.5 rounded-[4px] border border-[var(--destructive)] bg-transparent px-3 py-1.5 text-xs text-[var(--destructive)] hover:bg-[var(--destructive)] hover:text-white",children:[e.jsx(Y,{className:"h-3 w-3"}),t("common.delete")]})]}):null,[s,i,p,l,t]));async function W(){if(s){w(!0);try{await v.delete(`admin/projects/${s.key}`),l("/projects")}catch{}finally{w(!1),f(!1)}}}async function T(){if(!(!s||!c)){k(!0);try{await v.delete(`web/projects/${s.key}/members`,{searchParams:{developerId:String(c.developerId)}}),await y()}catch{}finally{k(!1),N(null)}}}return S?e.jsx("div",{className:"flex justify-center py-20",children:e.jsx("div",{className:"h-6 w-6 animate-spin rounded-full border-2 border-[var(--border)] border-t-[var(--accent)]"})}):C?e.jsxs("div",{className:"mx-auto max-w-4xl px-4 md:px-6 py-8 text-center",children:[e.jsx("p",{className:"text-sm text-[var(--destructive)]",children:C}),e.jsx("button",{onClick:()=>y(),className:"mt-4 rounded-[4px] border border-[var(--border)] bg-transparent px-4 py-2 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:t("common.retry")})]}):s?e.jsxs("div",{className:"mx-auto max-w-6xl px-4 md:px-6 py-8",children:[e.jsxs("div",{className:"mb-2 text-xs text-[var(--text-muted)]",children:[e.jsx("span",{className:"cursor-pointer hover:text-[var(--text-secondary)]",onClick:()=>l("/projects"),children:t("projects.title")})," / ",e.jsx("span",{className:"text-[var(--text-secondary)]",children:s.key})]}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-[1fr_340px]",children:[e.jsxs("div",{className:"space-y-6",children:[e.jsxs("section",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-5",children:[e.jsx("h2",{className:"mb-4 text-sm font-semibold text-[var(--accent)]",children:t("projects.project_info")}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.key"),value:s.key}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.name"),value:s.name}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.repo_url"),value:s.repoUrl,href:s.repoUrl}),s.sshUrl&&e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.ssh_url"),value:s.sshUrl}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.git_platform"),value:s.gitPlatform}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.default_branch"),value:s.defaultBranch}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.agent_type"),value:s.agentType}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.max_turns"),value:String(s.maxTurns)}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.allowed_tools"),value:s.allowedTools??"all"}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.default_project"),value:s.isDefault?"yes":"no"})]})]}),e.jsxs("section",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-5",children:[e.jsxs("div",{className:"mb-4 flex items-center justify-between",children:[e.jsx("h2",{className:"text-sm font-semibold text-[var(--accent)]",children:t("projects.members")}),i&&e.jsxs("button",{onClick:()=>_(!0),className:"flex items-center gap-1.5 rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs font-medium text-black",children:[e.jsx(Z,{className:"h-3.5 w-3.5"}),t("projects.add_member")]})]}),h.length===0?e.jsxs("div",{className:"flex flex-col items-center gap-3 py-6",children:[e.jsx("span",{className:"text-xl font-bold text-[var(--border)]",children:"[ ]"}),e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:t("projects.no_members_yet")})]}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-row)]",children:[e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.name")}),e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.role")}),e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.added_at")}),i&&e.jsx("th",{className:"pb-2 text-right text-xs font-medium text-[var(--text-muted)]",children:t("common.actions")})]})}),e.jsx("tbody",{children:h.map(r=>e.jsxs("tr",{className:"border-b border-[var(--border-row)] last:border-b-0",children:[e.jsx("td",{className:"py-2.5 text-sm text-[var(--text-primary)]",children:r.developerName??`#${r.developerId}`}),e.jsx("td",{className:"py-2.5 text-sm",style:{color:r.role===A.MAINTAINER?"var(--warning)":"var(--text-secondary)"},children:r.role}),e.jsx("td",{className:"py-2.5 text-sm text-[var(--text-secondary)]",children:I(r.createdAt)}),i&&e.jsx("td",{className:"py-2.5 text-right",children:e.jsx("button",{onClick:()=>N(r),className:"text-[var(--destructive)] hover:underline","aria-label":t("projects.remove_member"),children:e.jsx(J,{className:"h-3.5 w-3.5"})})})]},r.developerId))})]})})]}),e.jsxs("section",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-5",children:[e.jsx("h2",{className:"mb-4 text-sm font-semibold text-[var(--accent)]",children:t("projects.recent_tasks")}),M.length===0?e.jsxs("div",{className:"flex flex-col items-center gap-3 py-6",children:[e.jsx("span",{className:"text-xl font-bold text-[var(--border)]",children:"[ ]"}),e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:t("projects.no_tasks_for_project")})]}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-row)]",children:[e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.id")}),e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.description")}),e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.status")}),e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.created")})]})}),e.jsx("tbody",{children:M.map(r=>e.jsxs("tr",{className:"cursor-pointer border-b border-[var(--border-row)] last:border-b-0 hover:bg-[var(--bg-input)]",onClick:()=>l(`/tasks/${r.id}`),children:[e.jsxs("td",{className:"py-2.5 text-sm text-[var(--text-secondary)]",children:["#",r.id]}),e.jsx("td",{className:"max-w-xs truncate py-2.5 text-sm text-[var(--text-primary)]",title:r.description,children:r.description}),e.jsx("td",{className:"py-2.5 text-sm",style:{color:G[r.status]},children:r.status}),e.jsx("td",{className:"py-2.5 text-sm text-[var(--text-secondary)]",children:I(r.createdAt)})]},r.id))})]})})]})]}),e.jsx("div",{children:e.jsxs("section",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-5",children:[e.jsx("h2",{className:"mb-4 text-[13px] font-medium text-[var(--accent)]",children:t("projects.pipeline")}),e.jsx("div",{className:"mb-3 h-px bg-[var(--border)]"}),d!=null&&d.stages&&d.stages.length>0?e.jsx("div",{className:"flex flex-col items-center",children:d.stages.map((r,g)=>{var u,b;return e.jsxs("div",{className:"w-full",children:[e.jsxs("div",{className:"flex items-center justify-between rounded-[4px] bg-[var(--bg-input)] px-3 py-2.5 cursor-pointer hover:bg-[var(--bg-secondary)]",style:{borderLeft:"3px solid var(--accent)"},onClick:()=>l(`/projects/${s.key}/pipeline`),children:[e.jsxs("div",{className:"flex flex-col gap-0.5 min-w-0",children:[e.jsx("span",{className:"text-xs font-medium text-[var(--text-primary)]",children:r.label??r.name}),r.prompt&&e.jsxs("span",{className:"text-[11px] text-[var(--text-muted)] truncate",children:["// ",r.prompt.split(`
7
- `)[0].slice(0,40)]})]}),e.jsx("div",{className:"flex items-center gap-2 shrink-0",children:r.requireConfirm&&e.jsx("span",{className:"rounded-[4px] px-2 py-0.5 text-[11px] font-medium text-[var(--warning)]",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:t("projects.confirm_label")})})]}),((u=r.onFailure)==null?void 0:u.goto)&&e.jsxs("div",{className:"flex items-center justify-center gap-1.5 py-1",children:[e.jsx(H,{className:"h-3 w-3 text-[var(--warning)]"}),e.jsxs("span",{className:"text-[11px] text-[var(--warning)]",children:["onFailure.goto: ",r.onFailure.goto,", maxLoops: ",r.onFailure.maxLoops]})]}),g<d.stages.length-1&&!((b=r.onFailure)!=null&&b.goto)&&e.jsx("div",{className:"flex justify-center py-1",children:e.jsx(ee,{className:"h-3.5 w-3.5 text-[var(--text-muted)]"})})]},r.name)})}):e.jsx("div",{className:"py-6 text-center text-xs text-[var(--text-muted)]",children:t("projects.no_pipeline_configured")}),i&&e.jsx("button",{onClick:()=>l(`/projects/${s.key}/pipeline`),className:"mt-3 flex w-full items-center justify-center gap-1.5 py-2 text-xs text-[var(--accent)] hover:text-[var(--accent)]",children:t("projects.add_stage")})]})})]}),e.jsx(te,{isOpen:j,onClose:()=>f(!1),onConfirm:W,projectName:s.name,loading:P}),e.jsx(V,{isOpen:$,onClose:()=>_(!1),projectKey:s.key,existingMemberIds:h.map(r=>r.developerId),onAdded:y}),e.jsx(z,{isOpen:!!c,onClose:()=>N(null),onConfirm:T,memberName:c?c.developerName??`#${c.developerId}`:"",loading:L})]}):e.jsxs("div",{className:"mx-auto max-w-4xl px-4 md:px-6 py-8 text-center",children:[e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:t("projects.project_not_found")}),e.jsx("button",{onClick:()=>l("/projects"),className:"mt-4 rounded-[4px] border border-[var(--border)] bg-transparent px-4 py-2 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:t("projects.back_to_projects")})]})}export{me as default};
6
+ */const te=F("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);function re({isOpen:n,onClose:l,onConfirm:t,projectName:m,loading:p}){const{t:j}=D();return e.jsx(E,{isOpen:n,onClose:l,onConfirm:t,title:`> ${j("projects.delete_project")}`,message:j("projects.delete_project_confirm",{name:m}),confirmLabel:j("projects.delete_project"),confirmVariant:"danger",isLoading:p})}function je(){const{key:n}=U(),l=R(),{t}=D(),m=q(r=>r.user),p=B(),[j,f]=x.useState(!1),[P,w]=x.useState(!1),[T,_]=x.useState(!1),[c,N]=x.useState(null),[$,k]=x.useState(!1),{data:a,loading:L,error:C,refetch:y}=X(async()=>{if(!n)throw new Error("Missing project key");const[r,g,u]=await Promise.all([v.get(`web/projects/${n}`).json(),v.get(`web/projects/${n}/members`).json().catch(()=>[]),v.get("web/tasks",{searchParams:{projectKey:n,limit:"20"}}).json().then(O=>O.data).catch(()=>[])]);let b=null;if(r.pipeline)try{b=JSON.parse(r.pipeline)}catch{}return{project:r,members:g,tasks:u,pipelineConfig:b}},[n]),s=(a==null?void 0:a.project)??null,h=(a==null?void 0:a.members)??[],M=(a==null?void 0:a.tasks)??[],d=(a==null?void 0:a.pipelineConfig)??null,i=p||h.some(r=>r.developerId===(m==null?void 0:m.id)&&r.role===A.MAINTAINER);K(x.useMemo(()=>s?e.jsxs(e.Fragment,{children:[i&&e.jsxs("button",{onClick:()=>l(`/projects/${s.key}/edit`),className:"flex items-center gap-1.5 rounded-[4px] border border-[var(--border)] bg-transparent px-3 py-1.5 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:[e.jsx(Y,{className:"h-3 w-3"}),t("common.edit")]}),p&&e.jsxs("button",{onClick:()=>f(!0),className:"flex items-center gap-1.5 rounded-[4px] border border-[var(--destructive)] bg-transparent px-3 py-1.5 text-xs text-[var(--destructive)] hover:bg-[var(--destructive)] hover:text-white",children:[e.jsx(Z,{className:"h-3 w-3"}),t("common.delete")]})]}):null,[s,i,p,l,t]));async function S(){if(s){w(!0);try{await v.delete(`admin/projects/${s.key}`),l("/projects")}catch{}finally{w(!1),f(!1)}}}async function W(){if(!(!s||!c)){k(!0);try{await v.delete(`web/projects/${s.key}/members`,{searchParams:{developerId:String(c.developerId)}}),await y()}catch{}finally{k(!1),N(null)}}}return L?e.jsx("div",{className:"flex justify-center py-20",children:e.jsx("div",{className:"h-6 w-6 animate-spin rounded-full border-2 border-[var(--border)] border-t-[var(--accent)]"})}):C?e.jsxs("div",{className:"mx-auto max-w-4xl px-4 md:px-6 py-8 text-center",children:[e.jsx("p",{className:"text-sm text-[var(--destructive)]",children:C}),e.jsx("button",{onClick:()=>y(),className:"mt-4 rounded-[4px] border border-[var(--border)] bg-transparent px-4 py-2 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:t("common.retry")})]}):s?e.jsxs("div",{className:"mx-auto max-w-6xl px-4 md:px-6 py-8",children:[e.jsxs("div",{className:"mb-2 text-xs text-[var(--text-muted)]",children:[e.jsx("span",{className:"cursor-pointer hover:text-[var(--text-secondary)]",onClick:()=>l("/projects"),children:t("projects.title")})," / ",e.jsx("span",{className:"text-[var(--text-secondary)]",children:s.key})]}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-[1fr_340px]",children:[e.jsxs("div",{className:"space-y-6",children:[e.jsxs("section",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-5",children:[e.jsx("h2",{className:"mb-4 text-sm font-semibold text-[var(--accent)]",children:t("projects.project_info")}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.key"),value:s.key}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.name"),value:s.name}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.repo_url"),value:s.repoUrl,href:s.repoUrl}),s.sshUrl&&e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.ssh_url"),value:s.sshUrl}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.git_platform"),value:s.gitPlatform}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.default_branch"),value:s.defaultBranch}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.agent_type"),value:s.agentType}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.max_turns"),value:String(s.maxTurns)}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.allowed_tools"),value:s.allowedTools??"all"}),e.jsx(o,{variant:"fixed-label",labelWidth:"w-32",label:t("projects.default_project"),value:s.isDefault?"yes":"no"})]})]}),e.jsxs("section",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-5",children:[e.jsxs("div",{className:"mb-4 flex items-center justify-between",children:[e.jsx("h2",{className:"text-sm font-semibold text-[var(--accent)]",children:t("projects.members")}),i&&e.jsxs("button",{onClick:()=>_(!0),className:"flex items-center gap-1.5 rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs font-medium text-black",children:[e.jsx(ee,{className:"h-3.5 w-3.5"}),t("projects.add_member")]})]}),h.length===0?e.jsxs("div",{className:"flex flex-col items-center gap-3 py-6",children:[e.jsx("span",{className:"text-xl font-bold text-[var(--border)]",children:"[ ]"}),e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:t("projects.no_members_yet")})]}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-row)]",children:[e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.name")}),e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.role")}),e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.added_at")}),i&&e.jsx("th",{className:"pb-2 text-right text-xs font-medium text-[var(--text-muted)]",children:t("common.actions")})]})}),e.jsx("tbody",{children:h.map(r=>e.jsxs("tr",{className:"border-b border-[var(--border-row)] last:border-b-0",children:[e.jsx("td",{className:"py-2.5 text-sm text-[var(--text-primary)]",children:r.developerName??`#${r.developerId}`}),e.jsx("td",{className:"py-2.5 text-sm",style:{color:r.role===A.MAINTAINER?"var(--warning)":"var(--text-secondary)"},children:r.role}),e.jsx("td",{className:"py-2.5 text-sm text-[var(--text-secondary)]",children:I(r.createdAt)}),i&&e.jsx("td",{className:"py-2.5 text-right",children:e.jsx("button",{onClick:()=>N(r),className:"text-[var(--destructive)] hover:underline","aria-label":t("projects.remove_member"),children:e.jsx(J,{className:"h-3.5 w-3.5"})})})]},r.developerId))})]})})]}),e.jsxs("section",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-5",children:[e.jsx("h2",{className:"mb-4 text-sm font-semibold text-[var(--accent)]",children:t("projects.recent_tasks")}),M.length===0?e.jsxs("div",{className:"flex flex-col items-center gap-3 py-6",children:[e.jsx("span",{className:"text-xl font-bold text-[var(--border)]",children:"[ ]"}),e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:t("projects.no_tasks_for_project")})]}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-row)]",children:[e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.id")}),e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.description")}),e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.status")}),e.jsx("th",{className:"pb-2 text-left text-xs font-medium text-[var(--text-muted)]",children:t("projects.created")})]})}),e.jsx("tbody",{children:M.map(r=>e.jsxs("tr",{className:"cursor-pointer border-b border-[var(--border-row)] last:border-b-0 hover:bg-[var(--bg-input)]",onClick:()=>l(`/tasks/${r.id}`),children:[e.jsxs("td",{className:"py-2.5 text-sm text-[var(--text-secondary)]",children:["#",r.id]}),e.jsx("td",{className:"max-w-xs truncate py-2.5 text-sm text-[var(--text-primary)]",children:e.jsx(G,{content:r.description,children:r.description})}),e.jsx("td",{className:"py-2.5 text-sm",style:{color:Q[r.status]},children:r.status}),e.jsx("td",{className:"py-2.5 text-sm text-[var(--text-secondary)]",children:I(r.createdAt)})]},r.id))})]})})]})]}),e.jsx("div",{children:e.jsxs("section",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-5",children:[e.jsx("h2",{className:"mb-4 text-[13px] font-medium text-[var(--accent)]",children:t("projects.pipeline")}),e.jsx("div",{className:"mb-3 h-px bg-[var(--border)]"}),d!=null&&d.stages&&d.stages.length>0?e.jsx("div",{className:"flex flex-col items-center",children:d.stages.map((r,g)=>{var u,b;return e.jsxs("div",{className:"w-full",children:[e.jsxs("div",{className:"flex items-center justify-between rounded-[4px] bg-[var(--bg-input)] px-3 py-2.5 cursor-pointer hover:bg-[var(--bg-secondary)]",style:{borderLeft:"3px solid var(--accent)"},onClick:()=>l(`/projects/${s.key}/pipeline`),children:[e.jsxs("div",{className:"flex flex-col gap-0.5 min-w-0",children:[e.jsx("span",{className:"text-xs font-medium text-[var(--text-primary)]",children:r.label??r.name}),r.prompt&&e.jsxs("span",{className:"text-[11px] text-[var(--text-muted)] truncate",children:["// ",r.prompt.split(`
7
+ `)[0].slice(0,40)]})]}),e.jsx("div",{className:"flex items-center gap-2 shrink-0",children:r.requireConfirm&&e.jsx("span",{className:"rounded-[4px] px-2 py-0.5 text-[11px] font-medium text-[var(--warning)]",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:t("projects.confirm_label")})})]}),((u=r.onFailure)==null?void 0:u.goto)&&e.jsxs("div",{className:"flex items-center justify-center gap-1.5 py-1",children:[e.jsx(H,{className:"h-3 w-3 text-[var(--warning)]"}),e.jsxs("span",{className:"text-[11px] text-[var(--warning)]",children:["onFailure.goto: ",r.onFailure.goto,", maxLoops: ",r.onFailure.maxLoops]})]}),g<d.stages.length-1&&!((b=r.onFailure)!=null&&b.goto)&&e.jsx("div",{className:"flex justify-center py-1",children:e.jsx(te,{className:"h-3.5 w-3.5 text-[var(--text-muted)]"})})]},r.name)})}):e.jsx("div",{className:"py-6 text-center text-xs text-[var(--text-muted)]",children:t("projects.no_pipeline_configured")}),i&&e.jsx("button",{onClick:()=>l(`/projects/${s.key}/pipeline`),className:"mt-3 flex w-full items-center justify-center gap-1.5 py-2 text-xs text-[var(--accent)] hover:text-[var(--accent)]",children:t("projects.add_stage")})]})})]}),e.jsx(re,{isOpen:j,onClose:()=>f(!1),onConfirm:S,projectName:s.name,loading:P}),e.jsx(V,{isOpen:T,onClose:()=>_(!1),projectKey:s.key,existingMemberIds:h.map(r=>r.developerId),onAdded:y}),e.jsx(z,{isOpen:!!c,onClose:()=>N(null),onConfirm:W,memberName:c?c.developerName??`#${c.developerId}`:"",loading:$})]}):e.jsxs("div",{className:"mx-auto max-w-4xl px-4 md:px-6 py-8 text-center",children:[e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:t("projects.project_not_found")}),e.jsx("button",{onClick:()=>l("/projects"),className:"mt-4 rounded-[4px] border border-[var(--border)] bg-transparent px-4 py-2 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:t("projects.back_to_projects")})]})}export{je as default};
@@ -0,0 +1,6 @@
1
+ import{c as R,a as z,r as o,G as m,A as u,j as e,h as E,f as G,q as I}from"./index-C5MJg1oC.js";import{S as U}from"./Select-B_UE_NDL.js";import{E as D}from"./EmptyState-D8UwaoPs.js";import{T as H}from"./Skeleton-CqLLWdXS.js";import{t as M}from"./date-BdNtiQTP.js";import{u as J}from"./useFetch-C8LjfJUm.js";import{P as O}from"./plus-CQjC8fgx.js";/**
2
+ * @license lucide-react v0.469.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const q=R("FolderOpen",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]),b={width:"100%",padding:"0.5rem 0.75rem",backgroundColor:"var(--bg-input)",border:"1px solid var(--border)",borderRadius:"4px",color:"var(--text-primary)",fontSize:"0.75rem",fontFamily:"'JetBrains Mono', monospace",outline:"none",boxSizing:"border-box"},i={display:"block",color:"var(--text-secondary)",fontSize:"0.7rem",marginBottom:"0.25rem",fontFamily:"'JetBrains Mono', monospace"};function W({isOpen:d,onClose:a,onCreated:h}){const{t}=z(),[n,j]=o.useState(""),[l,s]=o.useState(""),[c,p]=o.useState(""),[f,C]=o.useState(""),[_,k]=o.useState("main"),[S,N]=o.useState(m.GITHUB),[B,T]=o.useState(u.CLAUDE),[x,F]=o.useState(!1),[w,g]=o.useState("");o.useEffect(()=>{d&&A()},[d]);function A(){j(""),s(""),p(""),C(""),k("main"),N(m.GITHUB),T(u.CLAUDE),g("")}function y(){A(),a()}async function P(r){r.preventDefault(),g(""),F(!0);try{const v=await E.post("admin/projects",{json:{name:n,key:l,repoUrl:c,sshUrl:f||void 0,defaultBranch:_,gitPlatform:S,agentType:B}}).json();h(v),y()}catch(v){const L=v instanceof Error?v.message:t("projects.failed_to_create_project");g(L)}finally{F(!1)}}return d?e.jsx("div",{onClick:y,style:{position:"fixed",inset:0,zIndex:50,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))",padding:"1rem"},children:e.jsxs("div",{onClick:r=>r.stopPropagation(),style:{width:"100%",maxWidth:"480px",backgroundColor:"var(--bg-card)",border:"1px solid var(--border)",borderRadius:"4px",padding:"1.5rem",fontFamily:"'JetBrains Mono', monospace"},children:[e.jsxs("div",{style:{marginBottom:"1.25rem"},children:[e.jsxs("div",{style:{color:"var(--accent)",fontSize:"0.875rem",fontWeight:600},children:["> ",t("projects.create_project")]}),e.jsx("div",{style:{color:"var(--text-muted)",fontSize:"0.7rem",marginTop:"0.25rem"},children:t("projects.add_project_desc")})]}),w&&e.jsx("div",{style:{marginBottom:"1rem",padding:"0.5rem 0.75rem",borderRadius:"4px",backgroundColor:"rgba(239, 68, 68, 0.1)",border:"1px solid rgba(239, 68, 68, 0.3)",color:"var(--destructive)",fontSize:"0.7rem"},children:w}),e.jsxs("form",{onSubmit:P,style:{display:"flex",flexDirection:"column",gap:"0.875rem"},children:[e.jsxs("div",{children:[e.jsx("label",{style:i,children:t("projects.project_name")}),e.jsx("input",{type:"text",value:n,onChange:r=>j(r.target.value),placeholder:t("projects.project_name_placeholder"),required:!0,autoFocus:!0,style:b,onFocus:r=>r.target.style.borderColor="var(--accent)",onBlur:r=>r.target.style.borderColor="var(--border)"})]}),e.jsxs("div",{children:[e.jsx("label",{style:i,children:t("projects.project_key")}),e.jsx("input",{type:"text",value:l,onChange:r=>s(r.target.value.toLowerCase().replace(/[^a-z0-9-]/g,"")),placeholder:t("projects.project_key_placeholder"),required:!0,style:b,onFocus:r=>r.target.style.borderColor="var(--accent)",onBlur:r=>r.target.style.borderColor="var(--border)"}),e.jsx("div",{style:{color:"var(--text-muted)",fontSize:"0.65rem",marginTop:"0.25rem"},children:t("projects.project_key_hint")})]}),e.jsxs("div",{children:[e.jsx("label",{style:i,children:t("projects.repo_url")}),e.jsx("input",{type:"text",value:c,onChange:r=>p(r.target.value),placeholder:t("projects.repo_url_placeholder"),required:!0,style:b,onFocus:r=>r.target.style.borderColor="var(--accent)",onBlur:r=>r.target.style.borderColor="var(--border)"})]}),e.jsxs("div",{children:[e.jsx("label",{style:i,children:t("projects.ssh_url")}),e.jsx("input",{type:"text",value:f,onChange:r=>C(r.target.value),placeholder:t("projects.ssh_url_placeholder"),style:b,onFocus:r=>r.target.style.borderColor="var(--accent)",onBlur:r=>r.target.style.borderColor="var(--border)"}),e.jsx("div",{style:{color:"var(--text-muted)",fontSize:"0.65rem",marginTop:"0.25rem"},children:t("projects.ssh_url_hint")})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{style:i,children:t("projects.default_branch")}),e.jsx("input",{type:"text",value:_,onChange:r=>k(r.target.value),placeholder:t("projects.main"),style:b,onFocus:r=>r.target.style.borderColor="var(--accent)",onBlur:r=>r.target.style.borderColor="var(--border)"})]}),e.jsxs("div",{children:[e.jsx("label",{style:i,children:t("projects.git_platform")}),e.jsx(U,{value:S,onChange:r=>N(r),options:[{value:m.GITHUB,label:t("projects.github")},{value:m.GITLAB,label:t("projects.gitlab")},{value:m.GITEA,label:t("projects.gitea")}]})]}),e.jsxs("div",{children:[e.jsx("label",{style:i,children:t("projects.agent_type")}),e.jsx(U,{value:B,onChange:r=>T(r),options:[{value:u.CLAUDE,label:t("projects.claude")},{value:u.CURSOR,label:t("projects.cursor")},{value:u.CODEX,label:t("projects.codex")}]})]})]}),e.jsxs("div",{style:{display:"flex",gap:"0.75rem",marginTop:"0.5rem"},children:[e.jsx("button",{type:"button",onClick:y,disabled:x,style:{flex:1,padding:"0.5rem",backgroundColor:"transparent",border:"1px solid var(--border)",borderRadius:"4px",fontSize:"0.75rem",fontFamily:"'JetBrains Mono', monospace",cursor:"pointer",transition:"color 0.15s, border-color 0.15s"},className:"text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:border-[var(--text-muted)]",children:t("common.cancel")}),e.jsx("button",{type:"submit",disabled:x||!n||!l||!c,style:{flex:1,padding:"0.5rem",backgroundColor:"var(--accent)",color:"#0C0C0C",border:"none",borderRadius:"4px",fontSize:"0.75rem",fontWeight:600,fontFamily:"'JetBrains Mono', monospace",cursor:x||!n||!l||!c?"not-allowed":"pointer",opacity:x||!n||!l||!c?.7:1},children:t(x?"common.creating":"common.create")})]})]})]})}):null}function ee(){const d=G(),{t:a}=z(),[h,t]=o.useState(!1),{data:n,loading:j,refetch:l}=J(()=>E.get("web/projects").json(),[]);return I(o.useMemo(()=>e.jsxs("button",{onClick:()=>t(!0),className:"flex items-center gap-1.5 rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs font-medium text-black",children:[e.jsx(O,{className:"h-3.5 w-3.5"}),a("projects.create_project")]}),[a])),e.jsxs("div",{className:"mx-auto max-w-5xl px-4 md:px-6 py-8",children:[j?e.jsx("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4",children:e.jsx(H,{rows:4})}):!n||n.length===0?e.jsx(D,{icon:q,title:a("projects.no_projects_yet"),description:a("projects.create_first_project"),actionLabel:a("projects.create_project"),onAction:()=>t(!0)}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex flex-col gap-2 md:hidden",children:n.map(s=>e.jsxs("div",{onClick:()=>d(`/projects/${s.key}`),className:"cursor-pointer rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-3 transition-colors active:bg-[var(--bg-input)]",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-xs font-medium text-[var(--accent)]",children:s.key}),e.jsxs("span",{className:"text-[11px] text-[var(--text-muted)]",children:[s.taskCount??0," tasks"]})]}),e.jsx("span",{className:"mt-1 block text-[11px] text-[var(--text-primary)]",children:s.name}),e.jsx("span",{className:"mt-0.5 block text-[11px] text-[var(--text-muted)]",children:s.agentType})]},s.key))}),e.jsxs("div",{className:"hidden md:block rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)]",children:[e.jsxs("div",{className:"grid grid-cols-[36px_90px_1fr_120px_60px_80px] gap-3 border-b border-[var(--border-row)] px-4 py-2.5 text-xs font-medium text-[var(--text-muted)]",children:[e.jsx("span",{children:"#"}),e.jsx("span",{children:a("projects.key")}),e.jsx("span",{children:a("projects.name")}),e.jsx("span",{children:a("projects.members")}),e.jsx("span",{children:a("projects.tasks_count")}),e.jsx("span",{children:a("projects.last_activity")})]}),n.map((s,c)=>e.jsxs("div",{onClick:()=>d(`/projects/${s.key}`),className:"grid cursor-pointer grid-cols-[36px_90px_1fr_120px_60px_80px] gap-3 border-b border-[var(--border-row)] px-4 py-3 last:border-b-0 hover:bg-[var(--bg-input)] transition-colors items-center",children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:c+1}),e.jsx("span",{className:"truncate text-xs text-[var(--accent)]",children:s.key}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("span",{className:"block truncate text-xs text-[var(--text-primary)]",children:s.name}),e.jsxs("span",{className:"block truncate text-[11px] text-[var(--text-muted)]",children:[s.agentType," · ",s.repoUrl.replace(/^https?:\/\//,"").split("/").slice(-2).join("/")]})]}),e.jsx("div",{className:"flex items-center",children:e.jsxs("div",{className:"flex -space-x-1.5",children:[(s.members??[]).map(p=>e.jsx("div",{className:"flex h-6 w-6 items-center justify-center rounded-full border-2 border-[var(--bg-card)] bg-[var(--accent)]/20 text-[11px] font-bold text-[var(--accent)]",title:p.name,children:p.name.charAt(0).toUpperCase()},p.id)),(s.memberCount??0)>5&&e.jsxs("div",{className:"flex h-6 w-6 items-center justify-center rounded-full border-2 border-[var(--bg-card)] bg-[var(--bg-input)] text-[11px] text-[var(--text-muted)]",children:["+",s.memberCount-5]})]})}),e.jsx("span",{className:"text-xs text-[var(--text-secondary)]",children:s.taskCount??0}),e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:M(s.lastActivity??null)})]},s.key))]})]}),e.jsx(W,{isOpen:h,onClose:()=>t(!1),onCreated:l})]})}export{ee as default};