@overlordai/server 1.0.76 → 1.0.78
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.
- package/dist/database/repositories/task.repository.d.ts +1 -0
- package/dist/database/repositories/task.repository.d.ts.map +1 -1
- package/dist/database/repositories/task.repository.js +7 -0
- package/dist/database/repositories/task.repository.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/web/frame-handlers/progress.handler.d.ts.map +1 -1
- package/dist/web/frame-handlers/progress.handler.js +4 -0
- package/dist/web/frame-handlers/progress.handler.js.map +1 -1
- package/package.json +4 -4
- package/public/assets/{AccessTokensPage-HdCYJa75.js → AccessTokensPage-B6_fWEBP.js} +1 -1
- package/public/assets/{AdminPage-D0DGfKeC.js → AdminPage-C_v25c0x.js} +1 -1
- package/public/assets/{ApiReferencePage-CHgGzez9.js → ApiReferencePage-CYLRiFX7.js} +1 -1
- package/public/assets/{ArchitecturePage-BLaVm-RT.js → ArchitecturePage-BRhekDQJ.js} +1 -1
- package/public/assets/{AuditLogPage-ZQDfN6L2.js → AuditLogPage-odG3piBe.js} +2 -2
- package/public/assets/{BindPlatformPage-BlS6wVHU.js → BindPlatformPage-CLvh8Bp2.js} +1 -1
- package/public/assets/{BotIntegrationPage-huJbbEp5.js → BotIntegrationPage-DFIKhj9d.js} +1 -1
- package/public/assets/{BotManage-aUmSjI1o.js → BotManage-2HtDdVv1.js} +1 -1
- package/public/assets/{BotSetupPage-Cv9n4JE8.js → BotSetupPage-n8DW-JIc.js} +1 -1
- package/public/assets/{ChangelogPage-BEihl-PT.js → ChangelogPage-ljWPJI_C.js} +1 -1
- package/public/assets/{CliReferencePage-Bi4QqQW_.js → CliReferencePage-D6HE7aqg.js} +1 -1
- package/public/assets/{DeploymentPage-C13_DqXl.js → DeploymentPage-BkC2WS0X.js} +1 -1
- package/public/assets/{DevWorkflowPage-BN5U4PpB.js → DevWorkflowPage-Zjb_g_7T.js} +1 -1
- package/public/assets/{DeveloperManage-CVkEj-GC.js → DeveloperManage-C3yFOhR0.js} +2 -2
- package/public/assets/{DeveloperSetupPage-ee3KC_yg.js → DeveloperSetupPage-M6J5WtmL.js} +1 -1
- package/public/assets/{DocsIndexPage-CcQ47yH4.js → DocsIndexPage-BdYY0bOk.js} +4 -4
- package/public/assets/DocsLayout-BbAqJHIO.js +1 -0
- package/public/assets/{DocsPrimitives-D_xTbmba.js → DocsPrimitives-kq9vBAzD.js} +1 -1
- package/public/assets/{EditProjectPage-BoM1gu0v.js → EditProjectPage-DisNJeAg.js} +2 -2
- package/public/assets/{EmptyState-BQgUq8FU.js → EmptyState-BQVGct4g.js} +1 -1
- package/public/assets/{EnvVariablesPage-Cs_Vrd_A.js → EnvVariablesPage-CuHHcFKu.js} +1 -1
- package/public/assets/{HomePage-BV0m_XJd.js → HomePage-DdkVTsOL.js} +1 -1
- package/public/assets/{InfoRow-Co_nykFf.js → InfoRow-Dpfw3QiV.js} +1 -1
- package/public/assets/{InstallationPage-yO4Ok1ZK.js → InstallationPage-BKVql2sz.js} +1 -1
- package/public/assets/LandingPage-bv7kElRB.js +33 -0
- package/public/assets/{LocalDevelopmentPage-DnZwN8ps.js → LocalDevelopmentPage-CUkTIbZb.js} +1 -1
- package/public/assets/{LoginPage-CTqF4VQa.js → LoginPage-B3Rs6BOm.js} +1 -1
- package/public/assets/{MetricBar-DIYwY_X1.js → MetricBar-CfTtNirJ.js} +1 -1
- package/public/assets/{NotFoundPage-BYPR4ndS.js → NotFoundPage-DyPcvSl9.js} +1 -1
- package/public/assets/{OnboardingGuide-CJKcE06d.js → OnboardingGuide-C87ArIaT.js} +1 -1
- package/public/assets/{PermissionsPage-NyuAcw0g.js → PermissionsPage-M4x6R-By.js} +1 -1
- package/public/assets/{PipelineConfigPage-Bt4TM7LK.js → PipelineConfigPage-BcrMm1vI.js} +1 -1
- package/public/assets/{PipelineEditorPage-C0CaNfhQ.js → PipelineEditorPage-CAYiXX0V.js} +1 -1
- package/public/assets/{ProfilePage-BNcja3TW.js → ProfilePage-8l-iMHnM.js} +1 -1
- package/public/assets/{ProjectDetailPage-BZbRE6zC.js → ProjectDetailPage-33RT7os8.js} +3 -3
- package/public/assets/{ProjectListPage-B1sWLmSr.js → ProjectListPage-CUHo7VwS.js} +1 -1
- package/public/assets/{PtyTerminal-4TaY1kgl.js → PtyTerminal-GBlFxP4w.js} +12 -7
- package/public/assets/{QuickAuth-B9i5aIAm.js → QuickAuth-CKWWIMdj.js} +1 -1
- package/public/assets/{RemoveMemberConfirmDialog-PTZ4yZLA.js → RemoveMemberConfirmDialog-DebT7Iww.js} +1 -1
- package/public/assets/{Select-DzcHkMFW.js → Select-whtPZbZ2.js} +1 -1
- package/public/assets/{SettingsPage-cljP-LVJ.js → SettingsPage-C2Db7obY.js} +1 -1
- package/public/assets/{Skeleton-BR0DoH0N.js → Skeleton-CjvMhglG.js} +1 -1
- package/public/assets/{SkillPage-CNmqjhZ1.js → SkillPage-Cwg7zBb6.js} +1 -1
- package/public/assets/{TaskDetailPage-DVwaQllQ.js → TaskDetailPage-BLZqkopc.js} +2 -2
- package/public/assets/{TaskListPage-C7a89N4m.js → TaskListPage-CI9mCUsn.js} +1 -1
- package/public/assets/{TaskStatusBadge-D_Jw_cst.js → TaskStatusBadge-PdGq2XxP.js} +1 -1
- package/public/assets/{TerminalHomePage-CDy66NL4.js → TerminalHomePage-D-w4h3iq.js} +3 -8
- package/public/assets/{TokenManage-s1HsCpRE.js → TokenManage-COQZNfbz.js} +1 -1
- package/public/assets/{TotpSetupPage-BDbdnX4M.js → TotpSetupPage-ebavRpD7.js} +1 -1
- package/public/assets/WorkerDetailPage-DpFTilWr.js +1 -0
- package/public/assets/WorkerListPage-DoQxA9Md.js +6 -0
- package/public/assets/{WorkerOperationsPage-CMbnqwmO.js → WorkerOperationsPage-CN4pXG5t.js} +1 -1
- package/public/assets/{WorkerSetupGuidePage-Hu_9GEqj.js → WorkerSetupGuidePage-Wvck_cEr.js} +1 -1
- package/public/assets/{WorkerSetupPage-ykJJzCFL.js → WorkerSetupPage-CV35GYSK.js} +1 -1
- package/public/assets/{arrow-left-CDuSMrWp.js → arrow-left-XmcNxEPm.js} +1 -1
- package/public/assets/{arrow-right-3wSL_8gn.js → arrow-right-Bm7UfWKB.js} +1 -1
- package/public/assets/{bot-D_0cntUM.js → bot-DV0Ml0Pr.js} +1 -1
- package/public/assets/{chevron-right-BarF-1AB.js → chevron-right-BSazmjxp.js} +1 -1
- package/public/assets/{copy-Btb09PwL.js → copy-CX4krhaQ.js} +1 -1
- package/public/assets/{download-D9JgkXvp.js → download-DG52uO3H.js} +1 -1
- package/public/assets/{external-link-4_nsu_co.js → external-link-aIJ6uRqy.js} +1 -1
- package/public/assets/index-CB29rhot.css +1 -0
- package/public/assets/{index-XalE15Aa.js → index-y1Zb2xN4.js} +55 -45
- package/public/assets/{key-D4tKYtq0.js → key-DU4O771U.js} +1 -1
- package/public/assets/{loader-circle-D0LpN5IB.js → loader-circle-DzBlc5as.js} +1 -1
- package/public/assets/{pencil-UTucmT5t.js → pencil-Ca2CRHc2.js} +1 -1
- package/public/assets/{plus-CBPo9p9z.js → plus-QoSQh1Ci.js} +1 -1
- package/public/assets/{rotate-ccw-Dg7_RL_a.js → rotate-ccw-MV4xHG6J.js} +1 -1
- package/public/assets/{scroll-text-Dyl0Pr4m.js → scroll-text-BYr5IgPD.js} +1 -1
- package/public/assets/{settings-D3lyLPwd.js → settings-Dz3BpGMr.js} +1 -1
- package/public/assets/{status-colors-tZq0K5Ad.js → status-colors-DxwFeYp0.js} +1 -1
- package/public/assets/{task-constants-D7DvweHm.js → task-constants-DnSoMOPb.js} +1 -1
- package/public/assets/{trash-2-oqlQYQiX.js → trash-2-DH-jzGMr.js} +1 -1
- package/public/assets/{useFetch-rAH39ftj.js → useFetch-BuZrNB5l.js} +1 -1
- package/public/assets/{users-6K6_kLrk.js → users-Cs7l6K9q.js} +1 -1
- package/public/assets/{wifi-LKenGVZV.js → wifi-DssF_9t2.js} +1 -1
- package/public/assets/{workflow-Ck4Lwoo5.js → workflow-l3FdQ5M5.js} +1 -1
- package/public/index.html +3 -3
- package/public/sw.js +1 -1
- package/public/assets/DocsLayout-BbUFudE1.js +0 -1
- package/public/assets/LandingPage-BSagkLUI.js +0 -28
- package/public/assets/WorkerDetailPage-BwTlDQuc.js +0 -1
- package/public/assets/WorkerListPage-CWn51Nsl.js +0 -1
- package/public/assets/code-xml-BgTCXCKf.js +0 -6
- package/public/assets/index-CG1vw6aK.css +0 -1
- package/public/assets/layout-grid-SPgDVvMd.js +0 -6
- package/public/assets/message-square-RhP4vE3x.js +0 -6
- package/public/assets/zap-DHrFvUYe.js +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as h,r as s,h as b,I as v,j as e,C as j}from"./index-y1Zb2xN4.js";import{C as f}from"./copy-CX4krhaQ.js";function y({mode:l}){const{t:o}=h(),[n,d]=s.useState([]),[x,c]=s.useState(null),[u,i]=s.useState(!1);s.useEffect(()=>{b.get("web/profile/tokens").json().then(t=>{const r=t.filter(m=>m.status===v.ACTIVE);d(r),r.length>0&&c(r[0].id)}).catch(()=>{})},[]);const a=l==="cli"?"ov login --token <your-token>":'curl -H "authorization: bearer <your-token>" http://localhost:9000/api/web/tasks',p=s.useCallback(()=>{navigator.clipboard.writeText(a),i(!0),setTimeout(()=>i(!1),2e3)},[a]);return n.length===0?null:e.jsxs("div",{className:"mb-8 rounded-[4px] border border-[var(--accent)]/20 bg-[var(--bg-card)] p-4",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:o("docs.quick_start_with_token")}),e.jsx("select",{value:x??"",onChange:t=>c(Number(t.target.value)),className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-primary)] px-2 py-1 text-xs text-[var(--text-primary)]",children:n.map(t=>e.jsx("option",{value:t.id,children:t.label},t.id))})]}),e.jsxs("div",{className:"flex items-center justify-between gap-2 rounded-[4px] bg-[var(--bg-primary)] px-3 py-2",children:[e.jsx("code",{className:"text-xs text-[var(--accent)] break-all",children:a}),e.jsx("button",{onClick:p,className:"shrink-0 text-[var(--text-muted)] hover:text-[var(--text-primary)] transition-colors",children:u?e.jsx(j,{size:14}):e.jsx(f,{size:14})})]}),e.jsx("p",{className:"mt-2 text-[11px] text-[var(--text-muted)]",children:o("docs.replace_token_hint")})]})}export{y as Q};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as w,a as _,r as s,
|
|
1
|
+
import{c as w,a as _,r as s,z as l,j as e,X as R,h as g,v as C}from"./index-y1Zb2xN4.js";import{S as N}from"./Select-whtPZbZ2.js";/**
|
|
2
2
|
* @license lucide-react v0.469.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as e}from"./index-
|
|
1
|
+
import{j as e}from"./index-y1Zb2xN4.js";const n="rounded-[4px] bg-[var(--border)] animate-pulse";function c({rows:r=5}){const a=[[60,200,80,120],[60,160,100,80],[60,220,70,140],[60,180,90,100],[60,190,110,90]];return e.jsx("div",{className:"flex flex-col gap-3",children:Array.from({length:r}).map((s,l)=>{const t=a[l%a.length];return e.jsx("div",{className:"flex gap-4",children:t.map((i,o)=>e.jsx("div",{className:n,style:{width:i,height:12}},o))},l)})})}function m({cards:r=4}){return e.jsx("div",{className:"grid grid-cols-2 gap-3",children:Array.from({length:r}).map((a,s)=>e.jsx("div",{className:`${n} h-20`},s))})}export{m as C,c as T};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t,j as e}from"./index-
|
|
1
|
+
import{a as t,j as e}from"./index-y1Zb2xN4.js";import{I as c,C as r}from"./DocsPrimitives-kq9vBAzD.js";import{E as n}from"./external-link-aIJ6uRqy.js";import"./copy-CX4krhaQ.js";const o=[{action:"create tasks",desc:"describe what you want done, overlord dispatches to a worker"},{action:"list & monitor tasks",desc:"check status, read execution logs, track progress"},{action:"cancel & retry tasks",desc:"manage task lifecycle"},{action:"confirm pipeline stages",desc:"approve or provide input for suspended stages"},{action:"manage projects",desc:"list projects, view members"},{action:"check cluster health",desc:"see worker status, online workers, queue depth"},{action:"search",desc:"find tasks, projects, and workers by keyword"},{action:"read notifications",desc:"check and clear your notification inbox"}],d=['create a task in project "frontend" to fix the login page styling',"what tasks are running right now?","show me the logs for task 42","how many workers are online?","cancel task 15"],i=[{name:"claude code",url:"https://claude.com/claude-code"},{name:"cursor",url:"https://cursor.com/cli"},{name:"windsurf",url:"https://windsurf.com"},{name:"codex",url:"https://openai.com/codex"}];function u(){t();const a=typeof window<"u"?window.location.origin:"https://your-server";return e.jsxs("div",{className:"mx-auto max-w-4xl px-4 md:px-6 py-8 font-mono lowercase",children:[e.jsx("div",{className:"mb-8",children:e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"// use overlord from your ai coding assistant — claude code, cursor, windsurf, codex, and more. install the skill and your assistant can create tasks, monitor execution, and manage your fleet."})}),e.jsxs("div",{className:"mb-8 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 space-y-3",children:[e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"// install"}),e.jsx(c,{code:"npx skills add overlord-run/skill"})]}),e.jsxs("div",{className:"mb-8 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 space-y-3",children:[e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"// configure — set these environment variables"}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("div",{className:"flex items-center justify-between rounded-[4px] bg-[var(--bg-primary)] px-3 py-2 overflow-x-auto",children:[e.jsxs("code",{className:"text-xs text-[var(--text-primary)] whitespace-nowrap",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"export "}),"OVERLORD_SERVER=",e.jsx("span",{className:"text-[var(--accent)]",children:a})]}),e.jsx(r,{text:`export OVERLORD_SERVER=${a}`})]}),e.jsxs("div",{className:"flex items-center justify-between rounded-[4px] bg-[var(--bg-primary)] px-3 py-2 overflow-x-auto",children:[e.jsxs("code",{className:"text-xs text-[var(--text-primary)] whitespace-nowrap",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"export "}),"OVERLORD_TOKEN=",e.jsx("span",{className:"text-[var(--text-secondary)]",children:"your-token"})]}),e.jsx(r,{text:"export OVERLORD_TOKEN=your-token"})]})]}),e.jsxs("p",{className:"text-[11px] text-[var(--text-muted)]",children:["// create a token at ",e.jsx("a",{href:"/access-tokens",className:"text-[var(--accent)] hover:underline",children:"/access-tokens"})]})]}),e.jsxs("div",{className:"mb-8",children:[e.jsx("h2",{className:"mb-4 text-sm text-[var(--accent)]",children:"> capabilities"}),e.jsx("div",{className:"space-y-2",children:o.map(s=>e.jsxs("div",{className:"flex items-start gap-3 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] px-4 py-3",children:[e.jsx("span",{className:"shrink-0 text-xs font-medium text-[var(--text-primary)]",children:s.action}),e.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["// ",s.desc]})]},s.action))})]}),e.jsxs("div",{className:"mb-8",children:[e.jsx("h2",{className:"mb-4 text-sm text-[var(--accent)]",children:"> example usage"}),e.jsxs("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 space-y-2",children:[e.jsx("p",{className:"mb-3 text-xs text-[var(--text-muted)]",children:"// just ask your ai agent naturally"}),d.map(s=>e.jsx("div",{className:"rounded-[4px] bg-[var(--bg-primary)] px-3 py-2",children:e.jsxs("code",{className:"text-xs text-[var(--text-secondary)]",children:[e.jsx("span",{className:"text-[var(--accent)]",children:"> "}),s]})},s))]})]}),e.jsxs("div",{className:"mb-8",children:[e.jsx("h2",{className:"mb-4 text-sm text-[var(--accent)]",children:"> compatible tools"}),e.jsx("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:i.map(s=>e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"flex items-center justify-center gap-1.5 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] px-3 py-2.5 text-xs text-[var(--text-primary)] transition-colors hover:border-[var(--accent)]",children:[s.name,e.jsx(n,{className:"h-3 w-3 text-[var(--text-muted)]"})]},s.name))}),e.jsx("p",{className:"mt-2 text-[11px] text-[var(--text-muted)]",children:"// and any ai coding assistant that supports the skills protocol"})]}),e.jsx("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4",children:e.jsxs("p",{className:"text-xs text-[var(--text-muted)]",children:["// open source:"," ",e.jsx("a",{href:"https://github.com/overlord-run/skill",target:"_blank",rel:"noopener noreferrer",className:"text-[var(--accent)] hover:underline",children:"github.com/overlord-run/skill"})]})})]})}export{u as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as se,a as
|
|
1
|
+
import{c as se,a as H,r,h as N,j as e,M as ze,s as L,H as Be,t as me,v as Pe,w as qe,f as Xe,n as We,k as Se,L as He,X as ie,m as W,x as Ee,p as Ve,G as Je}from"./index-y1Zb2xN4.js";import{u as Qe,T as Ye}from"./task-constants-DnSoMOPb.js";import{C as Ze,H as Te,P as De}from"./PtyTerminal-GBlFxP4w.js";import{a as et,f as ee}from"./date-BdNtiQTP.js";import{S as tt}from"./Select-whtPZbZ2.js";import{a as st}from"./status-colors-DxwFeYp0.js";import{A as at}from"./arrow-left-XmcNxEPm.js";import{R as xe}from"./rotate-ccw-MV4xHG6J.js";import{E as rt}from"./external-link-aIJ6uRqy.js";import{L as oe}from"./loader-circle-DzBlc5as.js";/**
|
|
2
2
|
* @license lucide-react v0.469.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -18,4 +18,4 @@ import{c as se,a as V,r,g as N,j as e,q as L,H as qe,t as me,s as Pe,v as ze,e a
|
|
|
18
18
|
*
|
|
19
19
|
* This source code is licensed under the ISC license.
|
|
20
20
|
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const ct=se("SkipForward",[["polygon",{points:"5 4 15 12 5 20 5 4",key:"16p6eg"}],["line",{x1:"19",x2:"19",y1:"5",y2:"19",key:"futhcm"}]]);function Le({isOpen:l,onClose:x,taskId:a,stageName:n,timeoutSeconds:t,onSubmitted:o}){const{t:i}=V(),[b,v]=r.useState(t),[E,$]=r.useState(!1);r.useEffect(()=>{if(!l)return;v(t);const d=setInterval(()=>{v(y=>y<=1?(clearInterval(d),0):y-1)},1e3);return()=>clearInterval(d)},[l,t]),r.useEffect(()=>{b===0&&l&&x()},[b,l,x]);const T=r.useCallback(async d=>{$(!0);try{await N.post(`web/tasks/${a}/confirm-stage`,{json:{stageName:n,approved:d}}),o==null||o(),x()}catch{}finally{$(!1)}},[a,n,x,o]);return l?e.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",style:{backdropFilter:"blur(2px)"},children:[e.jsx("div",{className:"fixed inset-0 bg-[var(--modal-backdrop)]"}),e.jsxs("div",{className:"relative z-10 w-full max-w-[480px] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] font-mono",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-5 py-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(et,{className:"h-4 w-4 text-[var(--accent)]"}),e.jsxs("h3",{className:"text-sm text-[var(--text-primary)]",children:["// stage: ",n]})]}),e.jsxs("span",{className:"flex items-center gap-1 text-xs text-[var(--text-muted)]",children:[e.jsx(Qe,{className:"h-3.5 w-3.5"}),Ye(b)]})]}),e.jsx("div",{className:"space-y-4 px-5 py-5",children:e.jsx("p",{className:"whitespace-pre-wrap text-xs text-[var(--text-primary)]",children:i("tasks.confirm_stage_message",{name:n})})}),e.jsxs("div",{className:"flex items-center justify-end gap-2 border-t border-[var(--border)] px-5 py-4",children:[e.jsx("button",{type:"button",className:"rounded-[4px] border border-[var(--border)] px-3 py-1.5 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors disabled:opacity-50",disabled:E,onClick:()=>T(!1),children:i("tasks.reject")}),e.jsx("button",{type:"button",className:"rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs text-black hover:opacity-90 transition-opacity disabled:opacity-50",disabled:E,onClick:()=>T(!0),children:i(E?"tasks.stage_submitting":"tasks.confirm_and_proceed")})]})]})]}):null}function it(l,x){const a=new Date(l).getTime()-Date.now();if(a<=0)return x("tasks.tunnel_expired");const n=Math.floor(a/36e5),t=Math.floor(a%36e5/6e4);return n>0?x("tasks.tunnel_expires_hm",{h:n,m:t}):x("tasks.tunnel_expires_m",{m:t})}function $e(l){switch(l){case"CONNECTED":return"var(--accent)";case"STARTING":return"var(--warning)";case"EXPIRED":return"var(--text-muted)";default:return"var(--text-muted)"}}function Re(l,x){switch(l){case"IDLE":case"CLOSED":return x("tasks.tunnel_idle");case"STARTING":return x("tasks.tunnel_starting");case"CONNECTED":return x("tasks.tunnel_connected");case"EXPIRED":return x("tasks.tunnel_expired");case"CLOSING":return x("tasks.tunnel_closing");default:return String(l).toLowerCase()}}function xt({taskId:l,taskFinished:x,compact:a}){const{t:n}=V(),[t,o]=r.useState(L.IDLE),[i,b]=r.useState(null),[v,E]=r.useState(null),[$,T]=r.useState(""),[d,y]=r.useState(!1),[ae,R]=r.useState(!1),P=r.useRef(null),D=r.useCallback(async()=>{try{const h=await N.get(`web/workspace-tunnel/${l}/status`).json();o(h.status),b(h.tunnelUrl??null),E(h.expiresAt??null),(h.status==="EXPIRED"||h.status==="IDLE"||h.status==="CLOSED")&&_()}catch{}},[l]);function re(){_(),P.current=setInterval(D,5e3)}function _(){P.current&&(clearInterval(P.current),P.current=null)}r.useEffect(()=>{x&&(t===L.STARTING||t===L.CONNECTED)&&(o(L.IDLE),b(null),_())},[x,t]),r.useEffect(()=>{if(t!=="CONNECTED"||!v)return;const h=()=>{const S=it(v,n);T(S),S===n("tasks.tunnel_expired")&&(o(L.EXPIRED),b(null),_())};h();const C=setInterval(h,3e4);return()=>clearInterval(C)},[t,v]),r.useEffect(()=>()=>_(),[]),r.useEffect(()=>{x||D()},[D,x]);async function G(){y(!0);try{await N.post(`web/workspace-tunnel/${l}/start`),o(L.STARTING),re()}catch(h){let C=n("tasks.tunnel_start_failed");try{if(h instanceof qe){const S=await h.response.json();S!=null&&S.error&&(C=S.error,/code.*not found|ENOENT.*code|spawn code/i.test(C)&&(C+=". "+n("tasks.tunnel_install_code_hint")))}}catch{}me.error(C)}finally{y(!1)}}async function K(){y(!0);try{await N.post(`web/workspace-tunnel/${l}/stop`),o(L.IDLE),b(null),_()}catch{}finally{y(!1)}}async function g(){i&&(await navigator.clipboard.writeText(i),R(!0),setTimeout(()=>R(!1),2e3))}return a?e.jsxs("div",{className:"flex items-center gap-2 font-mono lowercase text-xs",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"ide_tunnel:"}),e.jsx("span",{style:{color:$e(t)},children:Re(t,n)}),(t==="IDLE"||t==="CLOSED"||t==="EXPIRED")&&e.jsx("button",{onClick:G,disabled:d,className:"rounded-[4px] px-2 py-1 text-[var(--info)] disabled:opacity-50",style:{backgroundColor:"rgba(59,130,246,0.12)"},children:n(d?"tasks.tunnel_starting":"tasks.tunnel_start")}),t==="CONNECTED"&&i&&e.jsx("a",{href:i.replace(/^https?:/,"cursor:"),target:"_blank",rel:"noopener noreferrer",className:"rounded-[4px] px-2 py-1 text-[var(--info)]",style:{backgroundColor:"rgba(59,130,246,0.12)"},children:n("tasks.tunnel_open_in_cursor")})]}):e.jsxs("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 font-mono lowercase",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:n("tasks.tunnel_header")}),e.jsxs("span",{className:"text-xs",style:{color:$e(t)},children:["● ",Re(t,n)]})]}),t==="CONNECTED"&&v&&e.jsxs("p",{className:"mb-2 text-xs text-[var(--text-muted)]",children:["// ",$]}),t==="CONNECTED"&&i&&e.jsxs("div",{className:"mb-3 flex items-center gap-2 rounded-[4px] border border-[var(--border)] bg-[var(--bg-primary)] px-3 py-2",children:[e.jsx("code",{className:"flex-1 truncate text-xs text-[var(--text-primary)]",children:i}),e.jsxs("button",{onClick:g,className:"shrink-0 text-xs text-[var(--text-muted)] hover:text-[var(--text-primary)] transition-colors","aria-label":n("tasks.tunnel_copy_url"),children:["[",n("common.copy"),"]"]})]}),ae&&e.jsx("p",{className:"mb-2 text-xs text-[var(--accent)]",children:n("tasks.tunnel_copied")}),t==="STARTING"&&e.jsx("p",{className:"mb-3 text-xs text-[var(--text-muted)]",children:n("tasks.tunnel_waiting")}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(t==="IDLE"||t==="CLOSED")&&e.jsx("button",{onClick:G,disabled:d,className:"rounded-[4px] border border-[var(--accent)]/40 px-3 py-1.5 text-[var(--accent)] hover:bg-[var(--accent)]/10 transition-colors disabled:opacity-50",children:n(d?"tasks.tunnel_starting_button":"tasks.tunnel_start_button")}),t==="STARTING"&&e.jsx("button",{onClick:K,disabled:d,className:"rounded-[4px] border border-[var(--border)] px-3 py-1.5 text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors disabled:opacity-50",children:n(d?"tasks.tunnel_stopping":"tasks.tunnel_cancel")}),t==="CONNECTED"&&i&&e.jsxs(e.Fragment,{children:[e.jsx("a",{href:i.replace(/^https?:/,"cursor:"),target:"_blank",rel:"noopener noreferrer",className:"rounded-[4px] border border-[var(--accent)]/40 px-3 py-1.5 text-[var(--accent)] hover:bg-[var(--accent)]/10 transition-colors",children:n("tasks.tunnel_open_cursor")}),e.jsx("a",{href:i.replace(/^https?:/,"vscode:"),target:"_blank",rel:"noopener noreferrer",className:"rounded-[4px] border border-[var(--border)] px-3 py-1.5 text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors",children:n("tasks.tunnel_open_vscode")}),e.jsx("button",{onClick:K,disabled:d,className:"rounded-[4px] border border-[var(--destructive)]/40 px-3 py-1.5 text-[var(--destructive)] hover:bg-[var(--destructive)]/10 transition-colors disabled:opacity-50",children:n(d?"tasks.tunnel_stopping":"tasks.tunnel_stop")})]}),t==="EXPIRED"&&e.jsx("button",{onClick:G,disabled:d,className:"rounded-[4px] border border-[var(--accent)]/40 px-3 py-1.5 text-[var(--accent)] hover:bg-[var(--accent)]/10 transition-colors disabled:opacity-50",children:n(d?"tasks.tunnel_starting_button":"tasks.tunnel_restart")})]})]})}function ot({isOpen:l,onClose:x,onConfirm:a,taskId:n,isLoading:t}){const{t:o}=V();return e.jsx(Pe,{isOpen:l,onClose:x,onConfirm:a,title:o("tasks.cancel_task_title"),message:o("tasks.cancel_task_message",{id:String(n)}),confirmLabel:o("tasks.cancel_task_confirm_label"),confirmVariant:"danger",isLoading:t})}function dt({isOpen:l,onClose:x,onConfirm:a,taskId:n,mrUrl:t,isLoading:o}){const{t:i}=V(),b=t?i("tasks.retry_message_with_mr",{id:String(n),url:t}):i("tasks.retry_message_without_mr",{id:String(n)});return e.jsx(Pe,{isOpen:l,onClose:x,onConfirm:a,title:i("tasks.retry_title"),message:b,confirmLabel:i("tasks.retry_confirm_label"),confirmVariant:"accent",isLoading:o})}function mt(l){switch(l){case"stage_change":return"text-[var(--accent)]";case"info":return"text-[var(--text-secondary)]";case"warning":return"text-[var(--warning)]";case"error":return"text-[var(--destructive)]";case"system":return"text-[var(--info)]";default:return"text-[var(--text-muted)]"}}function de({status:l}){const x=st(l);return e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-[4px] px-2 py-0.5 text-xs",style:{color:x},children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-[3px]",style:{backgroundColor:x}}),l.toLowerCase()]})}function pt(l){let a=["init","agent","completed"];if(l.configSnapshot)try{const t=JSON.parse(l.configSnapshot);if(t&&typeof t=="object"&&typeof t.pipeline=="string"){const o=JSON.parse(t.pipeline);o&&typeof o=="object"&&Array.isArray(o.stages)&&o.stages.length>0&&o.stages.every(i=>i&&typeof i=="object"&&typeof i.name=="string")&&(a=o.stages.map(i=>i.name))}}catch{}const n=l.currentStage?a.indexOf(l.currentStage):-1;return a.map((t,o)=>{let i="pending";return l.status===W.COMPLETED?i="completed":l.status===W.FAILED&&o<=n?i=o===n?"failed":"completed":n>=0&&(o<n?i="completed":o===n&&(i="running")),{name:t,status:i}})}function te(l,x){if(!l||!x)return null;const a=l.repoUrl.replace(/\.git$/,"");return l.gitPlatform===He.GITLAB?`${a}/-/tree/${x}`:`${a}/tree/${x}`}function Ct(){var _e,Ce;const{id:l}=ze(),x=Be(),{t:a}=V(),n=Je(s=>s.cancelTask),[t,o]=r.useState(null),[i,b]=r.useState(null),[v,E]=r.useState([]),[$,T]=r.useState(!0),[d,y]=r.useState(null),[ae,R]=r.useState(!1),[P,D]=r.useState(!1),[re,_]=r.useState(!1),[G,K]=r.useState(!1),[g,h]=r.useState("terminal"),[C,S]=r.useState([]),[H,Ae]=r.useState(0),[q,z]=r.useState(0),[B,pe]=r.useState(""),[J,Oe]=r.useState(""),[Fe,ue]=r.useState(!1),[Me,he]=r.useState(!1),[A,fe]=r.useState(null),[k,ve]=r.useState("disconnected"),[X,be]=r.useState("auto"),O=r.useRef(null),ge=r.useRef(null),p=Number(l),f=t?Ze.includes(t.status):!1;Xe(t?`#${t.id} ${t.description}`:null);const w=r.useCallback(async()=>{try{const s=await N.get(`web/tasks/${p}`).json();o(s)}catch{}},[p]),Z=r.useCallback(async()=>{try{const s=await N.get(`web/tasks/${p}/logs`).json();E(s.lines)}catch{}},[p]),F=r.useCallback(async()=>{try{const s=await N.get(`web/tasks/${p}/pending-confirm`).json();y(s.confirm)}catch{y(null)}},[p]),je=r.useCallback(async()=>{ue(!0);try{const s=new URLSearchParams;s.set("limit","50"),s.set("offset",String(q*50)),B&&s.set("type",B),J&&s.set("search",J);const c=await N.get(`web/tasks/${p}/events?${s}`).json();S(c.events),Ae(c.total)}catch{}finally{ue(!1)}},[p,q,B,J]);r.useEffect(()=>{g==="logs"&&je()},[g,je]),r.useEffect(()=>{g==="pipeline"&&!f&&N.get(`web/workspaces/${p}`).json().then(fe).catch(()=>fe(null))},[g,p,f]);const M=Se(s=>s.lastEvent),Ne=Se(s=>s.eventSeq);r.useEffect(()=>{T(!0),Promise.all([w(),Z(),F()]).finally(()=>T(!1))},[w,Z,F]),r.useEffect(()=>{t!=null&&t.projectKey&&N.get(`web/projects/${t.projectKey}`).json().then(b).catch(()=>b(null))},[t==null?void 0:t.projectKey]),r.useEffect(()=>{!M||Ne===0||(M.event==="task_status_changed"&&M.taskId===p||M.event==="task_created"&&M.taskId===p)&&(w(),F())},[Ne,M,p,w,F]),r.useEffect(()=>{if(f)return;const c=setInterval(()=>{document.visibilityState!=="hidden"&&Promise.all([w(),Z(),F()])},15e3);return()=>clearInterval(c)},[f,w,Z,F]);const ye=r.useCallback(()=>y(null),[]),Q=r.useCallback(()=>{y(null),w()},[w]);async function Ue(){_(!0);try{await n(p),R(!1),await w()}finally{_(!1)}}async function Ge(){K(!0);try{await N.post(`web/tasks/${p}/retry`),D(!1),await w()}finally{K(!1)}}const j=r.useMemo(()=>t?pt(t):[],[t==null?void 0:t.configSnapshot,t==null?void 0:t.currentStage,t==null?void 0:t.status]),ne=j.findIndex(s=>s.status==="running");if($)return e.jsx("div",{className:"flex h-full items-center justify-center font-mono",children:e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:a("tasks.loading_task")})});if(!t)return e.jsxs("div",{className:"mx-auto max-w-5xl px-6 py-8 font-mono lowercase text-center",children:[e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:a("tasks.task_not_found")}),e.jsxs("button",{onClick:()=>x("/tasks"),className:"mt-4 rounded-[4px] border border-[var(--border)] px-3 py-1.5 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors",children:["< ",a("tasks.back_to_tasks")]})]});const ke=e.jsxs("div",{className:"flex items-center gap-3 border-b border-[var(--border)] bg-[var(--bg-primary)] px-4 py-3 shrink-0 md:hidden",children:[e.jsx("button",{onClick:()=>x("/tasks"),className:"shrink-0 text-[var(--text-muted)]",children:e.jsx(at,{className:"h-4 w-4"})}),e.jsxs("span",{className:"line-clamp-2 text-sm font-medium text-[var(--text-primary)]",children:["#",t.id," ",t.description]})]}),le=e.jsxs("div",{className:"hidden md:flex items-center gap-4 border-b border-[var(--border)] bg-[var(--bg-primary)] px-5 shrink-0",style:{height:44},children:[e.jsx(de,{status:t.status}),e.jsx("span",{className:"text-xs text-[var(--border)]",children:"|"}),e.jsxs(We,{to:`/projects/${t.projectKey}`,className:"text-xs text-[var(--text-muted)] hover:text-[var(--text-primary)] transition-colors",children:["project: ",e.jsx("span",{className:"text-[var(--text-primary)]",children:t.projectKey})]}),t.branch&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-xs text-[var(--border)]",children:"|"}),e.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["branch: ",te(i,t.branch)?e.jsx("a",{href:te(i,t.branch),target:"_blank",rel:"noopener noreferrer",className:"text-[var(--text-primary)] hover:text-[var(--info)] hover:underline transition-colors",children:t.branch}):e.jsx("span",{className:"text-[var(--text-primary)]",children:t.branch})]})]}),t.mrUrl&&/^https?:\/\//.test(t.mrUrl)&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-xs text-[var(--border)]",children:"|"}),e.jsxs("a",{href:t.mrUrl,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-[var(--info)] hover:underline",children:["MR: ",((_e=t.mrUrl.match(/!?\d+$/))==null?void 0:_e[0])??"view"]})]})]}),we=e.jsxs("div",{className:"flex items-center gap-3 border-t border-[var(--border)] bg-[var(--bg-primary)] px-4 md:px-5 shrink-0",style:{height:48},children:[!f&&e.jsxs("button",{onClick:()=>R(!0),className:"flex flex-1 md:flex-none items-center justify-center gap-1.5 rounded-[4px] bg-[var(--destructive)]/10 px-3 h-8 text-[11px] font-medium text-[var(--destructive)]",children:[e.jsx(ie,{className:"h-3 w-3"}),a("tasks.cancel_task")]}),t.status===W.FAILED&&e.jsxs("button",{onClick:()=>D(!0),className:"flex flex-1 md:flex-none items-center justify-center gap-1.5 rounded-[4px] bg-[var(--bg-card)] px-3 h-8 text-[11px] text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:bg-[var(--bg-input)] transition-colors cursor-pointer",children:[e.jsx(xe,{className:"h-3 w-3"}),a("tasks.retry_task")]}),t.workerId&&!f&&e.jsxs("button",{onClick:()=>{h("pipeline"),setTimeout(()=>{var s,c;(c=(s=ge.current)==null?void 0:s.scrollIntoView)==null||c.call(s,{behavior:"smooth",block:"center"})},50)},className:"hidden lg:flex items-center justify-center gap-1.5 rounded-[4px] px-3 h-8 text-[11px] font-medium text-[var(--info)]",style:{backgroundColor:"rgba(59,130,246,0.12)"},children:[e.jsx(rt,{className:"h-3 w-3"}),a("tasks.cursor_tunnel")]})]}),Ke=e.jsxs("div",{className:"hidden w-[280px] shrink-0 flex-col gap-6 overflow-y-auto border-l border-[var(--border)] bg-[var(--bg-primary)] p-4 lg:flex",children:[e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.pipeline_stages")}),j.map(s=>{const c=s.status==="completed",m=s.status==="running",u=s.status==="failed";return e.jsxs("div",{className:`flex items-center gap-2 rounded-[4px] px-2 py-1.5 ${m?"bg-[#1a1a1a]":""}`,children:[c&&e.jsx(Ee,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),m&&e.jsx(oe,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),u&&e.jsx(ie,{className:"h-3.5 w-3.5 shrink-0 text-[var(--destructive)]"}),s.status==="pending"&&e.jsx(Ie,{className:"h-3.5 w-3.5 shrink-0 text-[#525252]"}),e.jsx("span",{className:"text-xs",style:{color:c?"var(--accent)":m?"#e5e5e5":u?"var(--destructive)":"#525252",fontWeight:m?500:400},children:m?`> ${s.name}`:s.name})]},s.name)})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.activity_log")}),v.length>0?e.jsx("div",{className:"flex flex-col gap-1.5",children:v.slice(0,8).map((s,c)=>e.jsx("p",{className:"text-[11px] leading-relaxed text-[var(--text-muted)]",children:s},c))}):e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:a("tasks.no_activity")})]})]}),ce=e.jsxs(e.Fragment,{children:[e.jsx(ot,{isOpen:ae,onClose:()=>R(!1),onConfirm:Ue,taskId:p,isLoading:re}),e.jsx(dt,{isOpen:P,onClose:()=>D(!1),onConfirm:Ge,taskId:p,mrUrl:t.mrUrl??void 0,isLoading:G})]});return Me&&g==="terminal"?e.jsxs("div",{className:"fixed inset-0 z-50 flex flex-col bg-[var(--bg-primary)] font-mono lowercase h-screen",style:{height:"100dvh",paddingTop:"env(safe-area-inset-top, 0px)",paddingBottom:"env(safe-area-inset-bottom, 0px)"},children:[le,e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-5 shrink-0",style:{height:36,backgroundColor:"#111111"},children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.pty_terminal")}),e.jsxs("span",{className:`inline-flex items-center gap-1 text-[11px] ${k==="connected"?"text-[var(--accent)]":k==="connecting"?"text-[var(--warning)]":"text-[var(--text-muted)]"}`,children:[e.jsx("span",{className:`h-1.5 w-1.5 rounded-full ${k==="connected"?"bg-[var(--accent)]":k==="connecting"?"bg-[var(--warning)]":"bg-[#525252]"}`}),a(`tasks.${k}`)]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[!f&&X==="auto"&&e.jsxs("button",{onClick:()=>{var s;return(s=O.current)==null?void 0:s.requestTakeover()},className:"flex items-center gap-1.5 rounded-[4px] px-2.5 h-10 md:h-8 text-[11px] font-medium text-[var(--warning)]",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:[e.jsx(De,{className:"h-3 w-3"}),a("tasks.take_over")]}),!f&&X==="manual"&&e.jsxs("button",{onClick:()=>{var s;return(s=O.current)==null?void 0:s.releaseTakeover()},className:"flex items-center gap-1.5 rounded-[4px] px-2.5 h-10 md:h-8 text-[11px] font-medium text-[var(--accent)]",style:{backgroundColor:"rgba(34,197,94,0.12)"},children:[e.jsx(xe,{className:"h-3 w-3"}),a("tasks.restore_auto")]}),t.currentStage&&e.jsxs("span",{className:"text-[11px] text-[var(--accent)]",children:[a("tasks.stage"),": ",t.currentStage]}),e.jsx("button",{onClick:()=>he(!1),className:"flex items-center rounded-[4px] bg-[var(--bg-card)] px-2.5 py-1 text-[var(--text-muted)]",children:e.jsx(lt,{className:"h-3 w-3"})})]})]}),e.jsx("div",{className:"min-h-0 flex-1",children:e.jsx(Te,{ref:O,taskId:p,sessionId:t.currentSessionId??void 0,taskFinished:f,onStatusChange:ve,onTakeoverChange:be})}),we,ce]}):t.status===W.SUSPENDED?e.jsxs("div",{className:"flex h-full flex-col font-mono lowercase",children:[ke,le,e.jsx("div",{className:"flex items-center gap-2 border-b px-4 md:px-6 py-2 text-xs shrink-0",style:{backgroundColor:"rgba(245,158,11,0.08)",borderColor:"rgba(245,158,11,0.2)",color:"var(--warning)"},children:a("tasks.task_suspended_banner")}),e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col md:flex-row gap-4 md:gap-6 p-4 md:p-6 overflow-y-auto",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 flex-col gap-4",children:[e.jsxs("div",{className:"hidden md:flex items-center gap-3",children:[e.jsxs("span",{className:"text-xl font-bold text-[var(--text-primary)]",children:["#",t.id]}),e.jsx("span",{className:"text-base text-[var(--text-secondary)]",children:t.description}),e.jsx("span",{className:"rounded-[4px] px-2.5 py-1 text-[11px] font-bold text-[var(--warning)]",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:a("tasks.status_suspended")})]}),e.jsx("div",{className:"flex items-center gap-2 md:hidden",children:e.jsx("span",{className:"rounded-[4px] px-2.5 py-1 text-[11px] font-bold text-[var(--warning)]",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:a("tasks.status_suspended")})}),d&&e.jsxs("div",{className:"rounded-[4px] border p-4",style:{borderColor:"rgba(245,158,11,0.27)",backgroundColor:"#1a1a1a"},children:[e.jsx("p",{className:"mb-2 text-[11px] font-bold text-[var(--accent)]",children:a("tasks.pending_confirmation")}),e.jsx("p",{className:"mb-3 text-xs text-[var(--text-secondary)]",children:d.prompt??a("tasks.pipeline_requires_confirmation")}),e.jsx("div",{className:"mb-3 flex flex-col gap-1.5 text-[11px]",children:e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"stage"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:d.stageName})]})}),e.jsxs("div",{className:"flex flex-col gap-2 md:flex-row md:flex-wrap md:gap-3",children:[e.jsx("button",{onClick:async()=>{try{await N.post(`web/tasks/${p}/confirm-stage`,{json:{stageName:d.stageName,approved:!0}}),Q()}catch{me.error(a("tasks.confirm_failed"))}},className:"flex-1 md:flex-none rounded-[4px] bg-[var(--accent)] px-4 py-2.5 md:py-2 text-[11px] font-bold text-[#0c0c0c]",children:a("tasks.confirm_and_proceed")}),e.jsx("button",{onClick:async()=>{try{await N.post(`web/tasks/${p}/confirm-stage`,{json:{stageName:d.stageName,approved:!1}}),Q()}catch{me.error(a("tasks.confirm_failed"))}},className:"flex-1 md:flex-none rounded-[4px] bg-[#1a1a1a] px-4 py-2.5 md:py-2 text-[11px] text-[var(--destructive)]",style:{border:"1px solid rgba(239,68,68,0.27)"},children:a("tasks.reject")})]})]}),e.jsxs("div",{className:"flex flex-col gap-3 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 lg:hidden",children:[e.jsx("span",{className:"text-xs font-bold text-[var(--accent)]",children:a("tasks.task_info")}),e.jsxs("div",{className:"flex flex-col gap-1.5 text-[11px]",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"status"}),e.jsx("span",{className:"font-bold text-[var(--warning)]",children:"suspended"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"project"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.projectKey})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"worker"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.workerName??"-"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"created"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:ee(t.createdAt)})]})]})]}),e.jsx("div",{className:"hidden md:flex flex-wrap items-center gap-2 py-2",children:j.map((s,c)=>{const m=s.status==="failed",u=s.status==="completed",I=s.status==="running"&&t.status===W.SUSPENDED,U=m?"var(--destructive)":u?"var(--accent)":I?"var(--warning)":"#525252",Y=m?"rgba(239,68,68,0.12)":u?"rgba(34,197,94,0.12)":I?"rgba(245,158,11,0.12)":"transparent";return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"rounded-[4px] px-2.5 py-1 text-[11px]",style:{color:U,backgroundColor:Y,fontWeight:I?700:400,border:I?`1px solid ${U}`:void 0},children:I?"confirm":`${s.name}${u?" ✓":m?" ✗":""}`}),c<j.length-1&&e.jsx("div",{className:"h-px w-6 bg-[var(--border)]"})]},s.name)})}),e.jsxs("div",{className:"hidden md:block min-h-[200px] flex-1 rounded-[4px] border border-[var(--border)] bg-[#0c0c0c] p-4",children:[e.jsx("p",{className:"mb-2 text-[11px] font-bold text-[var(--accent)]",children:a("tasks.pty_output")}),e.jsxs("div",{className:"flex flex-col gap-1",children:[v.slice(-10).map((s,c)=>e.jsx("p",{className:"text-[11px] leading-relaxed text-[var(--text-secondary)]",children:s},c)),v.length===0&&e.jsx("p",{className:"text-[11px] text-[var(--text-muted)]",children:a("tasks.no_output")})]})]})]}),e.jsxs("div",{className:"hidden w-[280px] shrink-0 flex-col gap-4 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 lg:flex",children:[e.jsx("span",{className:"text-[13px] font-bold text-[var(--accent)]",children:a("tasks.task_info")}),e.jsxs("div",{className:"flex flex-col gap-1.5 text-[11px]",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"status"}),e.jsx("span",{className:"font-bold text-[var(--warning)]",children:"suspended"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"project"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.projectKey})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"worker"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.workerName??"-"})]})]}),e.jsx("div",{className:"h-px bg-[var(--border)]"}),e.jsx("span",{className:"text-xs font-bold text-[var(--accent)]",children:a("tasks.stage_timeline")}),e.jsx("div",{className:"flex flex-col gap-2",children:j.map(s=>{const c=s.status==="completed"?"var(--accent)":s.status==="failed"?"var(--destructive)":s.status==="running"?"var(--warning)":"#525252",m=s.status==="failed"?"var(--destructive)":s.status==="running"?"var(--warning)":"#a3a3a3",u=s.status==="completed"?"completed":s.status==="running"?"suspended":s.status==="failed"?"failed":"pending";return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"h-2 w-2 shrink-0 rounded-[4px]",style:{backgroundColor:c}}),e.jsxs("span",{className:"text-[11px]",style:{color:m,fontWeight:s.status==="running"?700:400},children:[s.name," ",u]})]},s.name)})}),e.jsx("div",{className:"h-px bg-[var(--border)]"}),e.jsx("div",{className:"flex flex-col gap-1.5 text-[11px]",children:e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"created"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:ee(t.createdAt)})]})})]})]}),d&&e.jsx(Le,{isOpen:!!d,onClose:ye,taskId:p,stageName:d.stageName,timeoutSeconds:Math.ceil(d.timeout/1e3),onSubmitted:Q}),ce]}):e.jsxs("div",{className:"flex h-full flex-col font-mono lowercase",children:[ke,e.jsxs("div",{className:"flex flex-wrap items-center gap-3 gap-y-1 border-b border-[var(--border)] bg-[var(--bg-primary)] px-4 py-2 shrink-0 md:hidden",children:[e.jsx(de,{status:t.status}),e.jsx("span",{className:"shrink-0 text-[11px] text-[var(--text-muted)]",children:t.projectKey}),t.workerName&&e.jsx("span",{className:"shrink-0 text-[11px] text-[var(--text-muted)]",children:t.workerName}),t.branch&&(te(i,t.branch)?e.jsx("a",{href:te(i,t.branch),target:"_blank",rel:"noopener noreferrer",className:"shrink-0 text-[11px] text-[var(--text-muted)] hover:text-[var(--info)] hover:underline truncate max-w-[80px] md:max-w-[120px] transition-colors",children:t.branch}):e.jsx("span",{className:"shrink-0 text-[11px] text-[var(--text-muted)] truncate max-w-[80px] md:max-w-[120px]",children:t.branch}))]}),le,t.errorMessage&&e.jsxs("div",{className:"flex items-center gap-2 border-b px-6 py-2 text-xs shrink-0 bg-[var(--destructive)]/10 text-[var(--destructive)]",style:{borderColor:"rgba(239,68,68,0.2)"},children:["// error: ",t.errorMessage]}),d&&e.jsx(Le,{isOpen:!!d,onClose:ye,taskId:p,stageName:d.stageName,timeoutSeconds:Math.ceil(d.timeout/1e3),onSubmitted:Q}),e.jsxs("div",{className:"flex min-h-0 flex-1",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 flex-col",children:[e.jsx("div",{className:"flex items-center border-b border-[var(--border)] shrink-0 overflow-x-auto no-scrollbar",children:["terminal","pipeline","logs"].map(s=>e.jsx("button",{onClick:()=>h(s),className:`shrink-0 whitespace-nowrap px-4 py-2.5 text-xs transition-colors ${g===s?"border-b-2 border-[var(--accent)] text-[var(--accent)] font-medium":"text-[var(--text-muted)] hover:text-[var(--text-secondary)]"}`,children:a(s==="terminal"?"tasks.terminal":s==="pipeline"?"tasks.pipeline_tab":"tasks.logs")},s))}),g==="terminal"&&e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-3 md:px-5 shrink-0",style:{height:36,backgroundColor:"#111111"},children:[e.jsxs("div",{className:"flex items-center gap-2 md:gap-3",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.pty_terminal")}),e.jsxs("span",{className:`inline-flex items-center gap-1 text-[11px] ${k==="connected"?"text-[var(--accent)]":k==="connecting"?"text-[var(--warning)]":"text-[var(--text-muted)]"}`,children:[e.jsx("span",{className:`h-1.5 w-1.5 rounded-full ${k==="connected"?"bg-[var(--accent)]":k==="connecting"?"bg-[var(--warning)]":"bg-[#525252]"}`}),a(`tasks.${k}`)]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[!f&&X==="auto"&&e.jsxs("button",{onClick:()=>{var s;return(s=O.current)==null?void 0:s.requestTakeover()},className:"flex items-center gap-1.5 rounded-[4px] px-2.5 h-10 md:h-8 text-[11px] font-medium text-[var(--warning)]",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:[e.jsx(De,{className:"h-3 w-3"}),a("tasks.take_over")]}),!f&&X==="manual"&&e.jsxs("button",{onClick:()=>{var s;return(s=O.current)==null?void 0:s.releaseTakeover()},className:"flex items-center gap-1.5 rounded-[4px] px-2.5 h-10 md:h-8 text-[11px] font-medium text-[var(--accent)]",style:{backgroundColor:"rgba(34,197,94,0.12)"},children:[e.jsx(xe,{className:"h-3 w-3"}),a("tasks.restore_auto")]}),!f&&X==="requesting"&&e.jsxs("span",{className:"flex items-center gap-1.5 px-2.5 h-10 md:h-8 text-[11px] text-[var(--warning)]",children:[e.jsx(oe,{className:"h-3 w-3 animate-spin"}),a("tasks.requesting_takeover")]}),!f&&t.currentStage&&e.jsxs("button",{className:"hidden md:flex items-center gap-1.5 rounded-[4px] bg-[var(--bg-card)] px-2.5 h-10 md:h-8 text-[11px] text-[var(--text-muted)]",children:[e.jsx(ct,{className:"h-3 w-3"}),a("tasks.skip_stage")]}),e.jsx("button",{onClick:()=>he(!0),className:"hidden md:flex items-center rounded-[4px] bg-[var(--bg-card)] px-2.5 h-10 md:h-8 text-[var(--text-muted)]",children:e.jsx(nt,{className:"h-3 w-3"})})]})]}),e.jsxs("div",{className:"flex items-center gap-2 border-b border-[var(--border)] px-4 py-2 shrink-0 md:hidden",children:[e.jsx(de,{status:t.status}),t.workerName&&e.jsxs("span",{className:"text-[11px] text-[var(--text-muted)]",children:["on ",t.workerName]})]}),e.jsxs("div",{className:"border-b border-[var(--border)] px-4 py-3 shrink-0 md:hidden",children:[e.jsx("span",{className:"text-[11px] font-bold text-[var(--accent)]",children:a("tasks.stage_progress")}),e.jsx("div",{className:"mt-2 flex items-center gap-1 overflow-x-auto no-scrollbar pr-4",children:j.map((s,c)=>{const m=s.status==="completed",u=s.status==="running",U=s.status==="failed"?"var(--destructive)":m||u?"var(--accent)":"#525252";return e.jsxs("div",{className:"flex items-center",children:[e.jsxs("span",{className:"shrink-0 text-[11px] whitespace-nowrap",style:{color:U,fontWeight:u?600:400},children:[s.name,m?" ✓":u?" ...":""]}),c<j.length-1&&e.jsx("div",{className:"mx-1.5 h-px w-4 shrink-0",style:{backgroundColor:U}})]},s.name)})})]}),e.jsx("div",{className:"px-4 pt-3 pb-1 shrink-0 md:hidden",children:e.jsx("span",{className:"text-[11px] font-bold text-[var(--accent)]",children:a("tasks.pty_output")})}),e.jsx("div",{className:"min-h-0 flex-1 md:min-h-0",children:e.jsx(Te,{ref:O,taskId:p,sessionId:t.currentSessionId??void 0,taskFinished:f,onStatusChange:ve,onTakeoverChange:be})}),we]}),g==="pipeline"&&e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col overflow-y-auto p-4 md:p-6 lg:p-8",children:[e.jsx("div",{className:"flex items-center py-4 mb-4 md:mb-5 overflow-x-auto no-scrollbar",children:j.map((s,c)=>{const m=s.status==="completed",u=s.status==="running",Y=s.status==="failed"?"var(--destructive)":m||u?"var(--accent)":"#525252";return e.jsxs("div",{className:"flex items-center",style:{flex:c<j.length-1?1:void 0},children:[e.jsxs("div",{className:"flex flex-col items-center gap-1.5",children:[e.jsxs("div",{className:"flex h-6 w-6 md:h-7 md:w-7 items-center justify-center rounded-full shrink-0",style:{backgroundColor:Y},children:[m&&e.jsx("span",{className:"text-[11px] md:text-xs font-semibold text-[#0c0c0c]",children:"✓"}),u&&e.jsx("span",{className:"h-2 w-2 md:h-2.5 md:w-2.5 rounded-full bg-[#0c0c0c]"})]}),e.jsx("span",{className:"text-[11px] font-medium whitespace-nowrap",style:{color:Y},children:s.name})]}),c<j.length-1&&e.jsx("div",{className:"mx-1 md:mx-2 h-0.5 flex-1 min-w-3 rounded-full",style:{backgroundColor:c<(ne>=0?ne:0)?"var(--accent)":"#525252"}})]},s.name)})}),t.currentStage&&e.jsxs("div",{className:"mb-4 md:mb-5 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-3 text-xs leading-relaxed",children:[e.jsxs("p",{className:"text-[var(--text-secondary)]",children:["// stage: ",t.currentStage," (",ne+1,"/",j.length,")"]}),t.startedAt&&e.jsxs("p",{className:"text-[var(--text-secondary)]",children:["// elapsed: ",ee(t.startedAt).replace(" ago","")]}),e.jsxs("p",{className:"text-[var(--text-secondary)]",children:["// retries: ",t.retryCount,"/2"]})]}),e.jsx("button",{onClick:()=>h("terminal"),className:"flex-1 min-h-[100px] rounded-[4px] border border-dashed border-[var(--border)] flex items-center justify-center gap-2 text-[11px] text-[var(--text-muted)] hover:border-[var(--accent)] hover:text-[var(--accent)] transition-colors",children:e.jsxs("span",{children:["// ",a("tasks.view_terminal")]})}),e.jsxs("div",{className:"mt-4 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 lg:hidden",children:[e.jsx("span",{className:"text-[11px] font-bold text-[var(--accent)]",children:a("tasks.task_info")}),e.jsxs("div",{className:"mt-2 flex flex-col gap-1.5 text-[11px]",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"project"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.projectKey})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"worker"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.workerName??"-"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"branch"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.branch??"-"})]})]})]}),e.jsxs("div",{className:"flex flex-col gap-6 mt-4 lg:hidden",children:[e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.pipeline_stages")}),j.map(s=>{const c=s.status==="completed",m=s.status==="running",u=s.status==="failed";return e.jsxs("div",{className:`flex items-center gap-2 rounded-[4px] px-2 py-1.5 ${m?"bg-[var(--bg-input)]":""}`,children:[c&&e.jsx(Ee,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),m&&e.jsx(oe,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),u&&e.jsx(ie,{className:"h-3.5 w-3.5 shrink-0 text-[var(--destructive)]"}),s.status==="pending"&&e.jsx(Ie,{className:"h-3.5 w-3.5 shrink-0 text-[#525252]"}),e.jsx("span",{className:"text-xs",style:{color:c?"var(--accent)":m?"var(--text-primary)":u?"var(--destructive)":"#525252",fontWeight:m?500:400},children:m?`> ${s.name}`:s.name})]},s.name)})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.activity_log")}),v.length>0?e.jsx("div",{className:"flex flex-col gap-1.5",children:v.slice(-12).map((s,c)=>e.jsx("p",{className:"text-[11px] leading-relaxed text-[var(--text-muted)]",children:s},c))}):e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:a("tasks.no_activity")})]})]})]}),g==="logs"&&e.jsxs("div",{className:"flex flex-1 flex-col gap-3 md:gap-5 overflow-y-auto p-4 md:p-6 lg:p-8",children:[e.jsx("span",{className:"text-[11px] font-bold text-[var(--accent)] md:hidden",children:a("tasks.task_logs")}),e.jsxs("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:gap-3",children:[e.jsx("div",{className:"flex items-center gap-1 overflow-x-auto no-scrollbar md:hidden",children:["","error","system"].map(s=>e.jsx("button",{onClick:()=>{pe(s),z(0)},className:`shrink-0 rounded-[4px] px-2.5 py-1 text-[11px] ${B===s?"text-[var(--accent)] bg-[var(--bg-input)]":"text-[var(--text-muted)]"}`,children:s||"all"},s))}),e.jsx("div",{className:"hidden md:block",children:e.jsx(tt,{value:B,onChange:s=>{pe(s),z(0)},options:[{value:"",label:"all"},{value:"stage_change",label:"stage_change"},{value:"info",label:"info"},{value:"warning",label:"warning"},{value:"error",label:"error"},{value:"system",label:"system"}],className:"w-36"})}),e.jsxs("div",{className:"flex flex-1 items-center gap-2 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] px-3 py-2",children:[e.jsx(Ve,{className:"h-3.5 w-3.5 text-[var(--text-muted)]"}),e.jsx("input",{type:"text",placeholder:a("tasks.search_logs"),value:J,onChange:s=>{Oe(s.target.value),z(0)},className:"flex-1 bg-transparent text-xs text-[var(--text-primary)] outline-none placeholder:text-[var(--text-muted)]"})]})]}),e.jsxs("div",{className:"flex flex-col gap-0.5",children:[C.map((s,c)=>e.jsxs("div",{className:`flex items-start md:items-center gap-2 md:gap-4 rounded-[4px] px-2 md:px-3 py-2 text-[11px] md:text-xs ${c%2===0?"bg-[var(--bg-card)]":""}`,children:[e.jsx("span",{className:"shrink-0 text-[var(--text-muted)]",children:new Date(s.timestamp).toLocaleTimeString("en-US",{hour12:!1})}),e.jsx("span",{className:`shrink-0 font-medium ${mt(s.type)}`,children:s.type}),e.jsx("span",{className:"min-w-0 break-words md:truncate text-[var(--text-primary)]",children:s.message})]},s.id)),C.length===0&&!Fe&&e.jsx("p",{className:"py-8 text-center text-xs text-[var(--text-muted)]",children:a("tasks.no_log_entries")})]}),H>50&&e.jsxs("div",{className:"flex items-center justify-center gap-1",children:[Array.from({length:Math.ceil(H/50)}).slice(0,5).map((s,c)=>e.jsx("button",{onClick:()=>z(c),className:`rounded-[4px] px-2 py-1 text-xs ${q===c?"bg-[var(--accent)] text-black font-medium":"text-[var(--text-muted)] hover:text-[var(--text-primary)]"}`,children:c+1},c)),Math.ceil(H/50)>5&&e.jsx("button",{onClick:()=>z(q+1),disabled:q>=Math.ceil(H/50)-1,className:"rounded-[4px] px-2 py-1 text-xs text-[var(--text-muted)] disabled:opacity-30",children:">"})]})]})]}),g==="terminal"&&Ke,g==="pipeline"&&e.jsxs("div",{className:"hidden w-[420px] shrink-0 flex-col gap-5 overflow-y-auto border-l border-[var(--border)] bg-[var(--bg-primary)] p-5 lg:flex",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[13px] font-semibold text-[var(--accent)]",children:a("tasks.task_info")}),e.jsxs("div",{className:"flex flex-col gap-1.5 text-xs",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"project"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.projectKey})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"creator"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.creatorName??"-"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"worker"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.workerName??"-"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"created_at"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:ee(t.createdAt)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"agent_type"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.agentType??"claude"})]})]})]}),e.jsx("div",{className:"h-px bg-[var(--border)]"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[13px] font-semibold text-[var(--accent)]",children:a("tasks.workspace_section")}),e.jsxs("div",{className:"flex flex-col gap-1.5 text-xs",children:[e.jsxs("div",{className:"flex min-w-0 justify-between",children:[e.jsx("span",{className:"shrink-0 text-[var(--text-muted)]",children:"branch"}),e.jsx("span",{className:"ml-4 min-w-0 truncate text-[var(--text-primary)]",children:t.branch??(A==null?void 0:A.branch)??"-"})]}),e.jsxs("div",{className:"flex min-w-0 justify-between",children:[e.jsx("span",{className:"shrink-0 text-[var(--text-muted)]",children:"worktree"}),e.jsx("span",{className:"ml-4 min-w-0 truncate text-[var(--text-primary)]",children:(A==null?void 0:A.path)??"-"})]}),t.mrUrl&&e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"mr_link"}),e.jsx("a",{href:t.mrUrl,target:"_blank",rel:"noopener noreferrer",className:"font-medium text-[var(--info)] hover:underline",children:((Ce=t.mrUrl.match(/!?\d+$/))==null?void 0:Ce[0])??"view"})]})]})]}),e.jsx("div",{className:"h-px bg-[var(--border)]"}),e.jsxs("div",{ref:ge,className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[13px] font-semibold text-[var(--accent)]",children:a("tasks.cursor_tunnel_section")}),t.workerId?e.jsx(xt,{taskId:p,taskFinished:f,compact:!0}):e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:a("tasks.no_worker_assigned")})]}),e.jsx("div",{className:"h-px bg-[var(--border)]"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[13px] font-semibold text-[var(--accent)]",children:a("tasks.stage_timeline")}),e.jsx("div",{className:"flex flex-col gap-2 text-xs",children:j.map(s=>{const c=s.status==="completed"?"✓":s.status==="running"?"→":"·",m=s.status==="completed"||s.status==="running"?"var(--accent)":s.status==="failed"?"var(--destructive)":"#525252",u=s.status==="completed"?"done":s.status==="running"?"running...":s.status==="failed"?"failed":"pending";return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-semibold",style:{color:m},children:c}),e.jsx("span",{className:s.status==="running"?"font-medium":"",style:{color:m},children:s.name}),e.jsxs("span",{className:"text-[11px]",style:{color:"#525252"},children:["— ",u]})]},s.name)})})]})]})]}),ce]})}export{Ct as default};
|
|
21
|
+
*/const ct=se("SkipForward",[["polygon",{points:"5 4 15 12 5 20 5 4",key:"16p6eg"}],["line",{x1:"19",x2:"19",y1:"5",y2:"19",key:"futhcm"}]]);function Le({isOpen:l,onClose:x,taskId:a,stageName:n,timeoutSeconds:t,onSubmitted:o}){const{t:i}=H(),[b,v]=r.useState(t),[E,$]=r.useState(!1);r.useEffect(()=>{if(!l)return;v(t);const d=setInterval(()=>{v(y=>y<=1?(clearInterval(d),0):y-1)},1e3);return()=>clearInterval(d)},[l,t]),r.useEffect(()=>{b===0&&l&&x()},[b,l,x]);const T=r.useCallback(async d=>{$(!0);try{await N.post(`web/tasks/${a}/confirm-stage`,{json:{stageName:n,approved:d}}),o==null||o(),x()}catch{}finally{$(!1)}},[a,n,x,o]);return l?e.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",style:{backdropFilter:"blur(2px)"},children:[e.jsx("div",{className:"fixed inset-0 bg-[var(--modal-backdrop)]"}),e.jsxs("div",{className:"relative z-10 w-full max-w-[480px] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] font-mono",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-5 py-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ze,{className:"h-4 w-4 text-[var(--accent)]"}),e.jsxs("h3",{className:"text-sm text-[var(--text-primary)]",children:["// stage: ",n]})]}),e.jsxs("span",{className:"flex items-center gap-1 text-xs text-[var(--text-muted)]",children:[e.jsx(Ze,{className:"h-3.5 w-3.5"}),et(b)]})]}),e.jsx("div",{className:"space-y-4 px-5 py-5",children:e.jsx("p",{className:"whitespace-pre-wrap text-xs text-[var(--text-primary)]",children:i("tasks.confirm_stage_message",{name:n})})}),e.jsxs("div",{className:"flex items-center justify-end gap-2 border-t border-[var(--border)] px-5 py-4",children:[e.jsx("button",{type:"button",className:"rounded-[4px] border border-[var(--border)] px-3 py-1.5 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors disabled:opacity-50",disabled:E,onClick:()=>T(!1),children:i("tasks.reject")}),e.jsx("button",{type:"button",className:"rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs text-black hover:opacity-90 transition-opacity disabled:opacity-50",disabled:E,onClick:()=>T(!0),children:i(E?"tasks.stage_submitting":"tasks.confirm_and_proceed")})]})]})]}):null}function it(l,x){const a=new Date(l).getTime()-Date.now();if(a<=0)return x("tasks.tunnel_expired");const n=Math.floor(a/36e5),t=Math.floor(a%36e5/6e4);return n>0?x("tasks.tunnel_expires_hm",{h:n,m:t}):x("tasks.tunnel_expires_m",{m:t})}function $e(l){switch(l){case"CONNECTED":return"var(--accent)";case"STARTING":return"var(--warning)";case"EXPIRED":return"var(--text-muted)";default:return"var(--text-muted)"}}function Re(l,x){switch(l){case"IDLE":case"CLOSED":return x("tasks.tunnel_idle");case"STARTING":return x("tasks.tunnel_starting");case"CONNECTED":return x("tasks.tunnel_connected");case"EXPIRED":return x("tasks.tunnel_expired");case"CLOSING":return x("tasks.tunnel_closing");default:return String(l).toLowerCase()}}function xt({taskId:l,taskFinished:x,compact:a}){const{t:n}=H(),[t,o]=r.useState(L.IDLE),[i,b]=r.useState(null),[v,E]=r.useState(null),[$,T]=r.useState(""),[d,y]=r.useState(!1),[ae,R]=r.useState(!1),P=r.useRef(null),D=r.useCallback(async()=>{try{const h=await N.get(`web/workspace-tunnel/${l}/status`).json();o(h.status),b(h.tunnelUrl??null),E(h.expiresAt??null),(h.status==="EXPIRED"||h.status==="IDLE"||h.status==="CLOSED")&&_()}catch{}},[l]);function re(){_(),P.current=setInterval(D,5e3)}function _(){P.current&&(clearInterval(P.current),P.current=null)}r.useEffect(()=>{x&&(t===L.STARTING||t===L.CONNECTED)&&(o(L.IDLE),b(null),_())},[x,t]),r.useEffect(()=>{if(t!=="CONNECTED"||!v)return;const h=()=>{const S=it(v,n);T(S),S===n("tasks.tunnel_expired")&&(o(L.EXPIRED),b(null),_())};h();const C=setInterval(h,3e4);return()=>clearInterval(C)},[t,v]),r.useEffect(()=>()=>_(),[]),r.useEffect(()=>{x||D()},[D,x]);async function G(){y(!0);try{await N.post(`web/workspace-tunnel/${l}/start`),o(L.STARTING),re()}catch(h){let C=n("tasks.tunnel_start_failed");try{if(h instanceof Be){const S=await h.response.json();S!=null&&S.error&&(C=S.error,/code.*not found|ENOENT.*code|spawn code/i.test(C)&&(C+=". "+n("tasks.tunnel_install_code_hint")))}}catch{}me.error(C)}finally{y(!1)}}async function K(){y(!0);try{await N.post(`web/workspace-tunnel/${l}/stop`),o(L.IDLE),b(null),_()}catch{}finally{y(!1)}}async function g(){i&&(await navigator.clipboard.writeText(i),R(!0),setTimeout(()=>R(!1),2e3))}return a?e.jsxs("div",{className:"flex items-center gap-2 font-mono lowercase text-xs",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"ide_tunnel:"}),e.jsx("span",{style:{color:$e(t)},children:Re(t,n)}),(t==="IDLE"||t==="CLOSED"||t==="EXPIRED")&&e.jsx("button",{onClick:G,disabled:d,className:"rounded-[4px] px-2 py-1 text-[var(--info)] disabled:opacity-50",style:{backgroundColor:"rgba(59,130,246,0.12)"},children:n(d?"tasks.tunnel_starting":"tasks.tunnel_start")}),t==="CONNECTED"&&i&&e.jsx("a",{href:i.replace(/^https?:/,"cursor:"),target:"_blank",rel:"noopener noreferrer",className:"rounded-[4px] px-2 py-1 text-[var(--info)]",style:{backgroundColor:"rgba(59,130,246,0.12)"},children:n("tasks.tunnel_open_in_cursor")})]}):e.jsxs("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 font-mono lowercase",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:n("tasks.tunnel_header")}),e.jsxs("span",{className:"text-xs",style:{color:$e(t)},children:["● ",Re(t,n)]})]}),t==="CONNECTED"&&v&&e.jsxs("p",{className:"mb-2 text-xs text-[var(--text-muted)]",children:["// ",$]}),t==="CONNECTED"&&i&&e.jsxs("div",{className:"mb-3 flex items-center gap-2 rounded-[4px] border border-[var(--border)] bg-[var(--bg-primary)] px-3 py-2",children:[e.jsx("code",{className:"flex-1 truncate text-xs text-[var(--text-primary)]",children:i}),e.jsxs("button",{onClick:g,className:"shrink-0 text-xs text-[var(--text-muted)] hover:text-[var(--text-primary)] transition-colors","aria-label":n("tasks.tunnel_copy_url"),children:["[",n("common.copy"),"]"]})]}),ae&&e.jsx("p",{className:"mb-2 text-xs text-[var(--accent)]",children:n("tasks.tunnel_copied")}),t==="STARTING"&&e.jsx("p",{className:"mb-3 text-xs text-[var(--text-muted)]",children:n("tasks.tunnel_waiting")}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(t==="IDLE"||t==="CLOSED")&&e.jsx("button",{onClick:G,disabled:d,className:"rounded-[4px] border border-[var(--accent)]/40 px-3 py-1.5 text-[var(--accent)] hover:bg-[var(--accent)]/10 transition-colors disabled:opacity-50",children:n(d?"tasks.tunnel_starting_button":"tasks.tunnel_start_button")}),t==="STARTING"&&e.jsx("button",{onClick:K,disabled:d,className:"rounded-[4px] border border-[var(--border)] px-3 py-1.5 text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors disabled:opacity-50",children:n(d?"tasks.tunnel_stopping":"tasks.tunnel_cancel")}),t==="CONNECTED"&&i&&e.jsxs(e.Fragment,{children:[e.jsx("a",{href:i.replace(/^https?:/,"cursor:"),target:"_blank",rel:"noopener noreferrer",className:"rounded-[4px] border border-[var(--accent)]/40 px-3 py-1.5 text-[var(--accent)] hover:bg-[var(--accent)]/10 transition-colors",children:n("tasks.tunnel_open_cursor")}),e.jsx("a",{href:i.replace(/^https?:/,"vscode:"),target:"_blank",rel:"noopener noreferrer",className:"rounded-[4px] border border-[var(--border)] px-3 py-1.5 text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors",children:n("tasks.tunnel_open_vscode")}),e.jsx("button",{onClick:K,disabled:d,className:"rounded-[4px] border border-[var(--destructive)]/40 px-3 py-1.5 text-[var(--destructive)] hover:bg-[var(--destructive)]/10 transition-colors disabled:opacity-50",children:n(d?"tasks.tunnel_stopping":"tasks.tunnel_stop")})]}),t==="EXPIRED"&&e.jsx("button",{onClick:G,disabled:d,className:"rounded-[4px] border border-[var(--accent)]/40 px-3 py-1.5 text-[var(--accent)] hover:bg-[var(--accent)]/10 transition-colors disabled:opacity-50",children:n(d?"tasks.tunnel_starting_button":"tasks.tunnel_restart")})]})]})}function ot({isOpen:l,onClose:x,onConfirm:a,taskId:n,isLoading:t}){const{t:o}=H();return e.jsx(Pe,{isOpen:l,onClose:x,onConfirm:a,title:o("tasks.cancel_task_title"),message:o("tasks.cancel_task_message",{id:String(n)}),confirmLabel:o("tasks.cancel_task_confirm_label"),confirmVariant:"danger",isLoading:t})}function dt({isOpen:l,onClose:x,onConfirm:a,taskId:n,mrUrl:t,isLoading:o}){const{t:i}=H(),b=t?i("tasks.retry_message_with_mr",{id:String(n),url:t}):i("tasks.retry_message_without_mr",{id:String(n)});return e.jsx(Pe,{isOpen:l,onClose:x,onConfirm:a,title:i("tasks.retry_title"),message:b,confirmLabel:i("tasks.retry_confirm_label"),confirmVariant:"accent",isLoading:o})}function mt(l){switch(l){case"stage_change":return"text-[var(--accent)]";case"info":return"text-[var(--text-secondary)]";case"warning":return"text-[var(--warning)]";case"error":return"text-[var(--destructive)]";case"system":return"text-[var(--info)]";default:return"text-[var(--text-muted)]"}}function de({status:l}){const x=st(l);return e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-[4px] px-2 py-0.5 text-xs",style:{color:x},children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-[3px]",style:{backgroundColor:x}}),l.toLowerCase()]})}function pt(l){let a=["init","agent","completed"];if(l.configSnapshot)try{const t=JSON.parse(l.configSnapshot);if(t&&typeof t=="object"&&typeof t.pipeline=="string"){const o=JSON.parse(t.pipeline);o&&typeof o=="object"&&Array.isArray(o.stages)&&o.stages.length>0&&o.stages.every(i=>i&&typeof i=="object"&&typeof i.name=="string")&&(a=o.stages.map(i=>i.name))}}catch{}const n=l.currentStage?a.indexOf(l.currentStage):-1;return a.map((t,o)=>{let i="pending";return l.status===W.COMPLETED?i="completed":l.status===W.FAILED&&o<=n?i=o===n?"failed":"completed":n>=0&&(o<n?i="completed":o===n&&(i="running")),{name:t,status:i}})}function te(l,x){if(!l||!x)return null;const a=l.repoUrl.replace(/\.git$/,"");return l.gitPlatform===Je.GITLAB?`${a}/-/tree/${x}`:`${a}/tree/${x}`}function wt(){var _e,Ce;const{id:l}=qe(),x=Xe(),{t:a}=H(),n=Qe(s=>s.cancelTask),[t,o]=r.useState(null),[i,b]=r.useState(null),[v,E]=r.useState([]),[$,T]=r.useState(!0),[d,y]=r.useState(null),[ae,R]=r.useState(!1),[P,D]=r.useState(!1),[re,_]=r.useState(!1),[G,K]=r.useState(!1),[g,h]=r.useState("terminal"),[C,S]=r.useState([]),[V,Ae]=r.useState(0),[z,B]=r.useState(0),[q,pe]=r.useState(""),[J,Oe]=r.useState(""),[Fe,ue]=r.useState(!1),[Me,he]=r.useState(!1),[A,fe]=r.useState(null),[k,ve]=r.useState("disconnected"),[X,be]=r.useState("auto"),O=r.useRef(null),ge=r.useRef(null),p=Number(l),f=t?Ye.includes(t.status):!1;We(t?`#${t.id} ${t.description}`:null);const w=r.useCallback(async()=>{try{const s=await N.get(`web/tasks/${p}`).json();o(s)}catch{}},[p]),Q=r.useCallback(async()=>{try{const s=await N.get(`web/tasks/${p}/logs`).json();E(s.lines)}catch{}},[p]),F=r.useCallback(async()=>{try{const s=await N.get(`web/tasks/${p}/pending-confirm`).json();y(s.confirm)}catch{y(null)}},[p]),je=r.useCallback(async()=>{ue(!0);try{const s=new URLSearchParams;s.set("limit","50"),s.set("offset",String(z*50)),q&&s.set("type",q),J&&s.set("search",J);const c=await N.get(`web/tasks/${p}/events?${s}`).json();S(c.events),Ae(c.total)}catch{}finally{ue(!1)}},[p,z,q,J]);r.useEffect(()=>{g==="logs"&&je()},[g,je]),r.useEffect(()=>{g==="pipeline"&&!f&&N.get(`web/workspaces/${p}`).json().then(fe).catch(()=>fe(null))},[g,p,f]);const M=Se(s=>s.lastEvent),Ne=Se(s=>s.eventSeq);r.useEffect(()=>{T(!0),Promise.all([w(),Q(),F()]).finally(()=>T(!1))},[w,Q,F]),r.useEffect(()=>{t!=null&&t.projectKey&&N.get(`web/projects/${t.projectKey}`).json().then(b).catch(()=>b(null))},[t==null?void 0:t.projectKey]),r.useEffect(()=>{!M||Ne===0||(M.event==="task_status_changed"&&M.taskId===p||M.event==="task_created"&&M.taskId===p)&&(w(),F())},[Ne,M,p,w,F]),r.useEffect(()=>{if(f)return;const c=setInterval(()=>{document.visibilityState!=="hidden"&&Promise.all([w(),Q(),F()])},15e3);return()=>clearInterval(c)},[f,w,Q,F]);const ye=r.useCallback(()=>y(null),[]),Y=r.useCallback(()=>{y(null),w()},[w]);async function Ue(){_(!0);try{await n(p),R(!1),await w()}finally{_(!1)}}async function Ge(){K(!0);try{await N.post(`web/tasks/${p}/retry`),D(!1),await w()}finally{K(!1)}}const j=r.useMemo(()=>t?pt(t):[],[t==null?void 0:t.configSnapshot,t==null?void 0:t.currentStage,t==null?void 0:t.status]),ne=j.findIndex(s=>s.status==="running");if($)return e.jsx("div",{className:"flex h-full items-center justify-center font-mono",children:e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:a("tasks.loading_task")})});if(!t)return e.jsxs("div",{className:"mx-auto max-w-5xl px-6 py-8 font-mono lowercase text-center",children:[e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:a("tasks.task_not_found")}),e.jsxs("button",{onClick:()=>x("/tasks"),className:"mt-4 rounded-[4px] border border-[var(--border)] px-3 py-1.5 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors",children:["< ",a("tasks.back_to_tasks")]})]});const ke=e.jsxs("div",{className:"flex items-center gap-3 border-b border-[var(--border)] bg-[var(--bg-primary)] px-4 py-3 shrink-0 md:hidden",children:[e.jsx("button",{onClick:()=>x("/tasks"),className:"shrink-0 text-[var(--text-muted)]",children:e.jsx(at,{className:"h-4 w-4"})}),e.jsxs("span",{className:"line-clamp-2 text-sm font-medium text-[var(--text-primary)]",children:["#",t.id," ",t.description]})]}),le=e.jsxs("div",{className:"hidden md:flex items-center gap-4 border-b border-[var(--border)] bg-[var(--bg-primary)] px-5 shrink-0",style:{height:44},children:[e.jsx(de,{status:t.status}),e.jsx("span",{className:"text-xs text-[var(--border)]",children:"|"}),e.jsxs(He,{to:`/projects/${t.projectKey}`,className:"text-xs text-[var(--text-muted)] hover:text-[var(--text-primary)] transition-colors",children:["project: ",e.jsx("span",{className:"text-[var(--text-primary)]",children:t.projectKey})]}),t.branch&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-xs text-[var(--border)]",children:"|"}),e.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["branch: ",te(i,t.branch)?e.jsx("a",{href:te(i,t.branch),target:"_blank",rel:"noopener noreferrer",className:"text-[var(--text-primary)] hover:text-[var(--info)] hover:underline transition-colors",children:t.branch}):e.jsx("span",{className:"text-[var(--text-primary)]",children:t.branch})]})]}),t.mrUrl&&/^https?:\/\//.test(t.mrUrl)&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-xs text-[var(--border)]",children:"|"}),e.jsxs("a",{href:t.mrUrl,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-[var(--info)] hover:underline",children:["MR: ",((_e=t.mrUrl.match(/!?\d+$/))==null?void 0:_e[0])??"view"]})]})]}),we=e.jsxs("div",{className:"flex items-center gap-3 border-t border-[var(--border)] bg-[var(--bg-primary)] px-4 md:px-5 shrink-0",style:{height:48},children:[!f&&e.jsxs("button",{onClick:()=>R(!0),className:"flex flex-1 md:flex-none items-center justify-center gap-1.5 rounded-[4px] bg-[var(--destructive)]/10 px-3 h-8 text-[11px] font-medium text-[var(--destructive)]",children:[e.jsx(ie,{className:"h-3 w-3"}),a("tasks.cancel_task")]}),t.status===W.FAILED&&e.jsxs("button",{onClick:()=>D(!0),className:"flex flex-1 md:flex-none items-center justify-center gap-1.5 rounded-[4px] bg-[var(--bg-card)] px-3 h-8 text-[11px] text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:bg-[var(--bg-input)] transition-colors cursor-pointer",children:[e.jsx(xe,{className:"h-3 w-3"}),a("tasks.retry_task")]}),t.workerId&&!f&&e.jsxs("button",{onClick:()=>{h("pipeline"),setTimeout(()=>{var s,c;(c=(s=ge.current)==null?void 0:s.scrollIntoView)==null||c.call(s,{behavior:"smooth",block:"center"})},50)},className:"hidden lg:flex items-center justify-center gap-1.5 rounded-[4px] px-3 h-8 text-[11px] font-medium text-[var(--info)]",style:{backgroundColor:"rgba(59,130,246,0.12)"},children:[e.jsx(rt,{className:"h-3 w-3"}),a("tasks.cursor_tunnel")]})]}),Ke=e.jsxs("div",{className:"hidden w-[280px] shrink-0 flex-col gap-6 overflow-y-auto border-l border-[var(--border)] bg-[var(--bg-primary)] p-4 lg:flex",children:[e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.pipeline_stages")}),j.map(s=>{const c=s.status==="completed",m=s.status==="running",u=s.status==="failed";return e.jsxs("div",{className:`flex items-center gap-2 rounded-[4px] px-2 py-1.5 ${m?"bg-[#1a1a1a]":""}`,children:[c&&e.jsx(Ee,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),m&&e.jsx(oe,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),u&&e.jsx(ie,{className:"h-3.5 w-3.5 shrink-0 text-[var(--destructive)]"}),s.status==="pending"&&e.jsx(Ie,{className:"h-3.5 w-3.5 shrink-0 text-[#525252]"}),e.jsx("span",{className:"text-xs",style:{color:c?"var(--accent)":m?"#e5e5e5":u?"var(--destructive)":"#525252",fontWeight:m?500:400},children:m?`> ${s.name}`:s.name})]},s.name)})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.activity_log")}),v.length>0?e.jsx("div",{className:"flex flex-col gap-1.5",children:v.slice(0,8).map((s,c)=>e.jsx("p",{className:"text-[11px] leading-relaxed text-[var(--text-muted)]",children:s},c))}):e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:a("tasks.no_activity")})]})]}),ce=e.jsxs(e.Fragment,{children:[e.jsx(ot,{isOpen:ae,onClose:()=>R(!1),onConfirm:Ue,taskId:p,isLoading:re}),e.jsx(dt,{isOpen:P,onClose:()=>D(!1),onConfirm:Ge,taskId:p,mrUrl:t.mrUrl??void 0,isLoading:G})]});return Me&&g==="terminal"?e.jsxs("div",{className:"fixed inset-0 z-50 flex flex-col bg-[var(--bg-primary)] font-mono lowercase h-screen",style:{height:"100dvh",paddingTop:"env(safe-area-inset-top, 0px)",paddingBottom:"env(safe-area-inset-bottom, 0px)"},children:[le,e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-5 shrink-0",style:{height:36,backgroundColor:"#111111"},children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.pty_terminal")}),e.jsxs("span",{className:`inline-flex items-center gap-1 text-[11px] ${k==="connected"?"text-[var(--accent)]":k==="connecting"?"text-[var(--warning)]":"text-[var(--text-muted)]"}`,children:[e.jsx("span",{className:`h-1.5 w-1.5 rounded-full ${k==="connected"?"bg-[var(--accent)]":k==="connecting"?"bg-[var(--warning)]":"bg-[#525252]"}`}),a(`tasks.${k}`)]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[!f&&X==="auto"&&e.jsxs("button",{onClick:()=>{var s;return(s=O.current)==null?void 0:s.requestTakeover()},className:"flex items-center gap-1.5 rounded-[4px] px-2.5 h-10 md:h-8 text-[11px] font-medium text-[var(--warning)]",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:[e.jsx(Te,{className:"h-3 w-3"}),a("tasks.take_over")]}),!f&&X==="manual"&&e.jsxs("button",{onClick:()=>{var s;return(s=O.current)==null?void 0:s.releaseTakeover()},className:"flex items-center gap-1.5 rounded-[4px] px-2.5 h-10 md:h-8 text-[11px] font-medium text-[var(--accent)]",style:{backgroundColor:"rgba(34,197,94,0.12)"},children:[e.jsx(xe,{className:"h-3 w-3"}),a("tasks.restore_auto")]}),t.currentStage&&e.jsxs("span",{className:"text-[11px] text-[var(--accent)]",children:[a("tasks.stage"),": ",t.currentStage]}),e.jsx("button",{onClick:()=>he(!1),className:"flex items-center rounded-[4px] bg-[var(--bg-card)] px-2.5 py-1 text-[var(--text-muted)]",children:e.jsx(lt,{className:"h-3 w-3"})})]})]}),e.jsx("div",{className:"min-h-0 flex-1",children:e.jsx(De,{ref:O,taskId:p,sessionId:t.currentSessionId??void 0,taskFinished:f,onStatusChange:ve,onTakeoverChange:be})}),we,ce]}):t.status===W.SUSPENDED?e.jsxs("div",{className:"flex h-full flex-col font-mono lowercase",children:[ke,le,e.jsx("div",{className:"flex items-center gap-2 border-b px-4 md:px-6 py-2 text-xs shrink-0",style:{backgroundColor:"rgba(245,158,11,0.08)",borderColor:"rgba(245,158,11,0.2)",color:"var(--warning)"},children:a("tasks.task_suspended_banner")}),e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col md:flex-row gap-4 md:gap-6 p-4 md:p-6 overflow-y-auto",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 flex-col gap-4",children:[e.jsxs("div",{className:"hidden md:flex items-center gap-3",children:[e.jsxs("span",{className:"text-xl font-bold text-[var(--text-primary)]",children:["#",t.id]}),e.jsx("span",{className:"text-base text-[var(--text-secondary)]",children:t.description}),e.jsx("span",{className:"rounded-[4px] px-2.5 py-1 text-[11px] font-bold text-[var(--warning)]",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:a("tasks.status_suspended")})]}),e.jsx("div",{className:"flex items-center gap-2 md:hidden",children:e.jsx("span",{className:"rounded-[4px] px-2.5 py-1 text-[11px] font-bold text-[var(--warning)]",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:a("tasks.status_suspended")})}),d&&e.jsxs("div",{className:"rounded-[4px] border p-4",style:{borderColor:"rgba(245,158,11,0.27)",backgroundColor:"#1a1a1a"},children:[e.jsx("p",{className:"mb-2 text-[11px] font-bold text-[var(--accent)]",children:a("tasks.pending_confirmation")}),e.jsx("p",{className:"mb-3 text-xs text-[var(--text-secondary)]",children:d.prompt??a("tasks.pipeline_requires_confirmation")}),e.jsx("div",{className:"mb-3 flex flex-col gap-1.5 text-[11px]",children:e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"stage"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:d.stageName})]})}),e.jsxs("div",{className:"flex flex-col gap-2 md:flex-row md:flex-wrap md:gap-3",children:[e.jsx("button",{onClick:async()=>{try{await N.post(`web/tasks/${p}/confirm-stage`,{json:{stageName:d.stageName,approved:!0}}),Y()}catch{me.error(a("tasks.confirm_failed"))}},className:"flex-1 md:flex-none rounded-[4px] bg-[var(--accent)] px-4 py-2.5 md:py-2 text-[11px] font-bold text-[#0c0c0c]",children:a("tasks.confirm_and_proceed")}),e.jsx("button",{onClick:async()=>{try{await N.post(`web/tasks/${p}/confirm-stage`,{json:{stageName:d.stageName,approved:!1}}),Y()}catch{me.error(a("tasks.confirm_failed"))}},className:"flex-1 md:flex-none rounded-[4px] bg-[#1a1a1a] px-4 py-2.5 md:py-2 text-[11px] text-[var(--destructive)]",style:{border:"1px solid rgba(239,68,68,0.27)"},children:a("tasks.reject")})]})]}),e.jsxs("div",{className:"flex flex-col gap-3 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 lg:hidden",children:[e.jsx("span",{className:"text-xs font-bold text-[var(--accent)]",children:a("tasks.task_info")}),e.jsxs("div",{className:"flex flex-col gap-1.5 text-[11px]",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"status"}),e.jsx("span",{className:"font-bold text-[var(--warning)]",children:"suspended"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"project"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.projectKey})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"worker"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.workerName??"-"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"created"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:ee(t.createdAt)})]})]})]}),e.jsx("div",{className:"hidden md:flex flex-wrap items-center gap-2 py-2",children:j.map((s,c)=>{const m=s.status==="failed",u=s.status==="completed",I=s.status==="running"&&t.status===W.SUSPENDED,U=m?"var(--destructive)":u?"var(--accent)":I?"var(--warning)":"#525252",Z=m?"rgba(239,68,68,0.12)":u?"rgba(34,197,94,0.12)":I?"rgba(245,158,11,0.12)":"transparent";return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"rounded-[4px] px-2.5 py-1 text-[11px]",style:{color:U,backgroundColor:Z,fontWeight:I?700:400,border:I?`1px solid ${U}`:void 0},children:I?"confirm":`${s.name}${u?" ✓":m?" ✗":""}`}),c<j.length-1&&e.jsx("div",{className:"h-px w-6 bg-[var(--border)]"})]},s.name)})}),e.jsxs("div",{className:"hidden md:block min-h-[200px] flex-1 rounded-[4px] border border-[var(--border)] bg-[#0c0c0c] p-4",children:[e.jsx("p",{className:"mb-2 text-[11px] font-bold text-[var(--accent)]",children:a("tasks.pty_output")}),e.jsxs("div",{className:"flex flex-col gap-1",children:[v.slice(-10).map((s,c)=>e.jsx("p",{className:"text-[11px] leading-relaxed text-[var(--text-secondary)]",children:s},c)),v.length===0&&e.jsx("p",{className:"text-[11px] text-[var(--text-muted)]",children:a("tasks.no_output")})]})]})]}),e.jsxs("div",{className:"hidden w-[280px] shrink-0 flex-col gap-4 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 lg:flex",children:[e.jsx("span",{className:"text-[13px] font-bold text-[var(--accent)]",children:a("tasks.task_info")}),e.jsxs("div",{className:"flex flex-col gap-1.5 text-[11px]",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"status"}),e.jsx("span",{className:"font-bold text-[var(--warning)]",children:"suspended"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"project"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.projectKey})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"worker"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.workerName??"-"})]})]}),e.jsx("div",{className:"h-px bg-[var(--border)]"}),e.jsx("span",{className:"text-xs font-bold text-[var(--accent)]",children:a("tasks.stage_timeline")}),e.jsx("div",{className:"flex flex-col gap-2",children:j.map(s=>{const c=s.status==="completed"?"var(--accent)":s.status==="failed"?"var(--destructive)":s.status==="running"?"var(--warning)":"#525252",m=s.status==="failed"?"var(--destructive)":s.status==="running"?"var(--warning)":"#a3a3a3",u=s.status==="completed"?"completed":s.status==="running"?"suspended":s.status==="failed"?"failed":"pending";return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"h-2 w-2 shrink-0 rounded-[4px]",style:{backgroundColor:c}}),e.jsxs("span",{className:"text-[11px]",style:{color:m,fontWeight:s.status==="running"?700:400},children:[s.name," ",u]})]},s.name)})}),e.jsx("div",{className:"h-px bg-[var(--border)]"}),e.jsx("div",{className:"flex flex-col gap-1.5 text-[11px]",children:e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"created"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:ee(t.createdAt)})]})})]})]}),d&&e.jsx(Le,{isOpen:!!d,onClose:ye,taskId:p,stageName:d.stageName,timeoutSeconds:Math.ceil(d.timeout/1e3),onSubmitted:Y}),ce]}):e.jsxs("div",{className:"flex h-full flex-col font-mono lowercase",children:[ke,e.jsxs("div",{className:"flex flex-wrap items-center gap-3 gap-y-1 border-b border-[var(--border)] bg-[var(--bg-primary)] px-4 py-2 shrink-0 md:hidden",children:[e.jsx(de,{status:t.status}),e.jsx("span",{className:"shrink-0 text-[11px] text-[var(--text-muted)]",children:t.projectKey}),t.workerName&&e.jsx("span",{className:"shrink-0 text-[11px] text-[var(--text-muted)]",children:t.workerName}),t.branch&&(te(i,t.branch)?e.jsx("a",{href:te(i,t.branch),target:"_blank",rel:"noopener noreferrer",className:"shrink-0 text-[11px] text-[var(--text-muted)] hover:text-[var(--info)] hover:underline truncate max-w-[80px] md:max-w-[120px] transition-colors",children:t.branch}):e.jsx("span",{className:"shrink-0 text-[11px] text-[var(--text-muted)] truncate max-w-[80px] md:max-w-[120px]",children:t.branch}))]}),le,t.errorMessage&&e.jsxs("div",{className:"flex items-center gap-2 border-b px-6 py-2 text-xs shrink-0 bg-[var(--destructive)]/10 text-[var(--destructive)]",style:{borderColor:"rgba(239,68,68,0.2)"},children:["// error: ",t.errorMessage]}),d&&e.jsx(Le,{isOpen:!!d,onClose:ye,taskId:p,stageName:d.stageName,timeoutSeconds:Math.ceil(d.timeout/1e3),onSubmitted:Y}),e.jsxs("div",{className:"flex min-h-0 flex-1",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 flex-col",children:[e.jsx("div",{className:"flex items-center border-b border-[var(--border)] shrink-0 overflow-x-auto no-scrollbar",children:["terminal","pipeline","logs"].map(s=>e.jsx("button",{onClick:()=>h(s),className:`shrink-0 whitespace-nowrap px-4 py-2.5 text-xs transition-colors ${g===s?"border-b-2 border-[var(--accent)] text-[var(--accent)] font-medium":"text-[var(--text-muted)] hover:text-[var(--text-secondary)]"}`,children:a(s==="terminal"?"tasks.terminal":s==="pipeline"?"tasks.pipeline_tab":"tasks.logs")},s))}),g==="terminal"&&e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-3 md:px-5 shrink-0",style:{height:36,backgroundColor:"#111111"},children:[e.jsxs("div",{className:"flex items-center gap-2 md:gap-3",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.pty_terminal")}),e.jsxs("span",{className:`inline-flex items-center gap-1 text-[11px] ${k==="connected"?"text-[var(--accent)]":k==="connecting"?"text-[var(--warning)]":"text-[var(--text-muted)]"}`,children:[e.jsx("span",{className:`h-1.5 w-1.5 rounded-full ${k==="connected"?"bg-[var(--accent)]":k==="connecting"?"bg-[var(--warning)]":"bg-[#525252]"}`}),a(`tasks.${k}`)]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[!f&&X==="auto"&&e.jsxs("button",{onClick:()=>{var s;return(s=O.current)==null?void 0:s.requestTakeover()},className:"flex items-center gap-1.5 rounded-[4px] px-2.5 h-10 md:h-8 text-[11px] font-medium text-[var(--warning)]",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:[e.jsx(Te,{className:"h-3 w-3"}),a("tasks.take_over")]}),!f&&X==="manual"&&e.jsxs("button",{onClick:()=>{var s;return(s=O.current)==null?void 0:s.releaseTakeover()},className:"flex items-center gap-1.5 rounded-[4px] px-2.5 h-10 md:h-8 text-[11px] font-medium text-[var(--accent)]",style:{backgroundColor:"rgba(34,197,94,0.12)"},children:[e.jsx(xe,{className:"h-3 w-3"}),a("tasks.restore_auto")]}),!f&&X==="requesting"&&e.jsxs("span",{className:"flex items-center gap-1.5 px-2.5 h-10 md:h-8 text-[11px] text-[var(--warning)]",children:[e.jsx(oe,{className:"h-3 w-3 animate-spin"}),a("tasks.requesting_takeover")]}),!f&&t.currentStage&&e.jsxs("button",{className:"hidden md:flex items-center gap-1.5 rounded-[4px] bg-[var(--bg-card)] px-2.5 h-10 md:h-8 text-[11px] text-[var(--text-muted)]",children:[e.jsx(ct,{className:"h-3 w-3"}),a("tasks.skip_stage")]}),e.jsx("button",{onClick:()=>he(!0),className:"hidden md:flex items-center rounded-[4px] bg-[var(--bg-card)] px-2.5 h-10 md:h-8 text-[var(--text-muted)]",children:e.jsx(nt,{className:"h-3 w-3"})})]})]}),e.jsxs("div",{className:"flex items-center gap-2 border-b border-[var(--border)] px-4 py-2 shrink-0 md:hidden",children:[e.jsx(de,{status:t.status}),t.workerName&&e.jsxs("span",{className:"text-[11px] text-[var(--text-muted)]",children:["on ",t.workerName]})]}),e.jsxs("div",{className:"border-b border-[var(--border)] px-4 py-3 shrink-0 md:hidden",children:[e.jsx("span",{className:"text-[11px] font-bold text-[var(--accent)]",children:a("tasks.stage_progress")}),e.jsx("div",{className:"mt-2 flex items-center gap-1 overflow-x-auto no-scrollbar pr-4",children:j.map((s,c)=>{const m=s.status==="completed",u=s.status==="running",U=s.status==="failed"?"var(--destructive)":m||u?"var(--accent)":"#525252";return e.jsxs("div",{className:"flex items-center",children:[e.jsxs("span",{className:"shrink-0 text-[11px] whitespace-nowrap",style:{color:U,fontWeight:u?600:400},children:[s.name,m?" ✓":u?" ...":""]}),c<j.length-1&&e.jsx("div",{className:"mx-1.5 h-px w-4 shrink-0",style:{backgroundColor:U}})]},s.name)})})]}),e.jsx("div",{className:"px-4 pt-3 pb-1 shrink-0 md:hidden",children:e.jsx("span",{className:"text-[11px] font-bold text-[var(--accent)]",children:a("tasks.pty_output")})}),e.jsx("div",{className:"min-h-0 flex-1 md:min-h-0",children:e.jsx(De,{ref:O,taskId:p,sessionId:t.currentSessionId??void 0,taskFinished:f,onStatusChange:ve,onTakeoverChange:be})}),we]}),g==="pipeline"&&e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col overflow-y-auto p-4 md:p-6 lg:p-8",children:[e.jsx("div",{className:"flex items-center py-4 mb-4 md:mb-5 overflow-x-auto no-scrollbar",children:j.map((s,c)=>{const m=s.status==="completed",u=s.status==="running",Z=s.status==="failed"?"var(--destructive)":m||u?"var(--accent)":"#525252";return e.jsxs("div",{className:"flex items-center",style:{flex:c<j.length-1?1:void 0},children:[e.jsxs("div",{className:"flex flex-col items-center gap-1.5",children:[e.jsxs("div",{className:"flex h-6 w-6 md:h-7 md:w-7 items-center justify-center rounded-full shrink-0",style:{backgroundColor:Z},children:[m&&e.jsx("span",{className:"text-[11px] md:text-xs font-semibold text-[#0c0c0c]",children:"✓"}),u&&e.jsx("span",{className:"h-2 w-2 md:h-2.5 md:w-2.5 rounded-full bg-[#0c0c0c]"})]}),e.jsx("span",{className:"text-[11px] font-medium whitespace-nowrap",style:{color:Z},children:s.name})]}),c<j.length-1&&e.jsx("div",{className:"mx-1 md:mx-2 h-0.5 flex-1 min-w-3 rounded-full",style:{backgroundColor:c<(ne>=0?ne:0)?"var(--accent)":"#525252"}})]},s.name)})}),t.currentStage&&e.jsxs("div",{className:"mb-4 md:mb-5 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-3 text-xs leading-relaxed",children:[e.jsxs("p",{className:"text-[var(--text-secondary)]",children:["// stage: ",t.currentStage," (",ne+1,"/",j.length,")"]}),t.startedAt&&e.jsxs("p",{className:"text-[var(--text-secondary)]",children:["// elapsed: ",ee(t.startedAt).replace(" ago","")]}),e.jsxs("p",{className:"text-[var(--text-secondary)]",children:["// retries: ",t.retryCount,"/2"]})]}),e.jsx("button",{onClick:()=>h("terminal"),className:"flex-1 min-h-[100px] rounded-[4px] border border-dashed border-[var(--border)] flex items-center justify-center gap-2 text-[11px] text-[var(--text-muted)] hover:border-[var(--accent)] hover:text-[var(--accent)] transition-colors",children:e.jsxs("span",{children:["// ",a("tasks.view_terminal")]})}),e.jsxs("div",{className:"mt-4 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 lg:hidden",children:[e.jsx("span",{className:"text-[11px] font-bold text-[var(--accent)]",children:a("tasks.task_info")}),e.jsxs("div",{className:"mt-2 flex flex-col gap-1.5 text-[11px]",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"project"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.projectKey})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"worker"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.workerName??"-"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"branch"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.branch??"-"})]})]})]}),e.jsxs("div",{className:"flex flex-col gap-6 mt-4 lg:hidden",children:[e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.pipeline_stages")}),j.map(s=>{const c=s.status==="completed",m=s.status==="running",u=s.status==="failed";return e.jsxs("div",{className:`flex items-center gap-2 rounded-[4px] px-2 py-1.5 ${m?"bg-[var(--bg-input)]":""}`,children:[c&&e.jsx(Ee,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),m&&e.jsx(oe,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),u&&e.jsx(ie,{className:"h-3.5 w-3.5 shrink-0 text-[var(--destructive)]"}),s.status==="pending"&&e.jsx(Ie,{className:"h-3.5 w-3.5 shrink-0 text-[#525252]"}),e.jsx("span",{className:"text-xs",style:{color:c?"var(--accent)":m?"var(--text-primary)":u?"var(--destructive)":"#525252",fontWeight:m?500:400},children:m?`> ${s.name}`:s.name})]},s.name)})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[11px] font-medium text-[var(--text-muted)]",children:a("tasks.activity_log")}),v.length>0?e.jsx("div",{className:"flex flex-col gap-1.5",children:v.slice(-12).map((s,c)=>e.jsx("p",{className:"text-[11px] leading-relaxed text-[var(--text-muted)]",children:s},c))}):e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:a("tasks.no_activity")})]})]})]}),g==="logs"&&e.jsxs("div",{className:"flex flex-1 flex-col gap-3 md:gap-5 overflow-y-auto p-4 md:p-6 lg:p-8",children:[e.jsx("span",{className:"text-[11px] font-bold text-[var(--accent)] md:hidden",children:a("tasks.task_logs")}),e.jsxs("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:gap-3",children:[e.jsx("div",{className:"flex items-center gap-1 overflow-x-auto no-scrollbar md:hidden",children:["","error","system"].map(s=>e.jsx("button",{onClick:()=>{pe(s),B(0)},className:`shrink-0 rounded-[4px] px-2.5 py-1 text-[11px] ${q===s?"text-[var(--accent)] bg-[var(--bg-input)]":"text-[var(--text-muted)]"}`,children:s||"all"},s))}),e.jsx("div",{className:"hidden md:block",children:e.jsx(tt,{value:q,onChange:s=>{pe(s),B(0)},options:[{value:"",label:"all"},{value:"stage_change",label:"stage_change"},{value:"info",label:"info"},{value:"warning",label:"warning"},{value:"error",label:"error"},{value:"system",label:"system"}],className:"w-36"})}),e.jsxs("div",{className:"flex flex-1 items-center gap-2 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] px-3 py-2",children:[e.jsx(Ve,{className:"h-3.5 w-3.5 text-[var(--text-muted)]"}),e.jsx("input",{type:"text",placeholder:a("tasks.search_logs"),value:J,onChange:s=>{Oe(s.target.value),B(0)},className:"flex-1 bg-transparent text-xs text-[var(--text-primary)] outline-none placeholder:text-[var(--text-muted)]"})]})]}),e.jsxs("div",{className:"flex flex-col gap-0.5",children:[C.map((s,c)=>e.jsxs("div",{className:`flex items-start md:items-center gap-2 md:gap-4 rounded-[4px] px-2 md:px-3 py-2 text-[11px] md:text-xs ${c%2===0?"bg-[var(--bg-card)]":""}`,children:[e.jsx("span",{className:"shrink-0 text-[var(--text-muted)]",children:new Date(s.timestamp).toLocaleTimeString("en-US",{hour12:!1})}),e.jsx("span",{className:`shrink-0 font-medium ${mt(s.type)}`,children:s.type}),e.jsx("span",{className:"min-w-0 break-words md:truncate text-[var(--text-primary)]",children:s.message})]},s.id)),C.length===0&&!Fe&&e.jsx("p",{className:"py-8 text-center text-xs text-[var(--text-muted)]",children:a("tasks.no_log_entries")})]}),V>50&&e.jsxs("div",{className:"flex items-center justify-center gap-1",children:[Array.from({length:Math.ceil(V/50)}).slice(0,5).map((s,c)=>e.jsx("button",{onClick:()=>B(c),className:`rounded-[4px] px-2 py-1 text-xs ${z===c?"bg-[var(--accent)] text-black font-medium":"text-[var(--text-muted)] hover:text-[var(--text-primary)]"}`,children:c+1},c)),Math.ceil(V/50)>5&&e.jsx("button",{onClick:()=>B(z+1),disabled:z>=Math.ceil(V/50)-1,className:"rounded-[4px] px-2 py-1 text-xs text-[var(--text-muted)] disabled:opacity-30",children:">"})]})]})]}),g==="terminal"&&Ke,g==="pipeline"&&e.jsxs("div",{className:"hidden w-[420px] shrink-0 flex-col gap-5 overflow-y-auto border-l border-[var(--border)] bg-[var(--bg-primary)] p-5 lg:flex",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[13px] font-semibold text-[var(--accent)]",children:a("tasks.task_info")}),e.jsxs("div",{className:"flex flex-col gap-1.5 text-xs",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"project"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.projectKey})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"creator"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.creatorName??"-"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"worker"}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.workerName??"-"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:a("common.created_at")}),e.jsx("span",{className:"text-[var(--text-primary)]",children:ee(t.createdAt)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:a("tasks.form_agent_type")}),e.jsx("span",{className:"text-[var(--text-primary)]",children:t.agentType??"claude"})]})]})]}),e.jsx("div",{className:"h-px bg-[var(--border)]"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[13px] font-semibold text-[var(--accent)]",children:a("tasks.workspace_section")}),e.jsxs("div",{className:"flex flex-col gap-1.5 text-xs",children:[e.jsxs("div",{className:"flex min-w-0 justify-between",children:[e.jsx("span",{className:"shrink-0 text-[var(--text-muted)]",children:"branch"}),e.jsx("span",{className:"ml-4 min-w-0 truncate text-[var(--text-primary)]",children:t.branch??(A==null?void 0:A.branch)??"-"})]}),e.jsxs("div",{className:"flex min-w-0 justify-between",children:[e.jsx("span",{className:"shrink-0 text-[var(--text-muted)]",children:"worktree"}),e.jsx("span",{className:"ml-4 min-w-0 truncate text-[var(--text-primary)]",children:(A==null?void 0:A.path)??"-"})]}),t.mrUrl&&e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:a("tasks.mr_link")}),e.jsx("a",{href:t.mrUrl,target:"_blank",rel:"noopener noreferrer",className:"font-medium text-[var(--info)] hover:underline",children:((Ce=t.mrUrl.match(/!?\d+$/))==null?void 0:Ce[0])??"view"})]})]})]}),e.jsx("div",{className:"h-px bg-[var(--border)]"}),e.jsxs("div",{ref:ge,className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[13px] font-semibold text-[var(--accent)]",children:a("tasks.cursor_tunnel_section")}),t.workerId?e.jsx(xt,{taskId:p,taskFinished:f,compact:!0}):e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:a("tasks.no_worker_assigned")})]}),e.jsx("div",{className:"h-px bg-[var(--border)]"}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-[13px] font-semibold text-[var(--accent)]",children:a("tasks.stage_timeline")}),e.jsx("div",{className:"flex flex-col gap-2 text-xs",children:j.map(s=>{const c=s.status==="completed"?"✓":s.status==="running"?"→":"·",m=s.status==="completed"||s.status==="running"?"var(--accent)":s.status==="failed"?"var(--destructive)":"#525252",u=s.status==="completed"?"done":s.status==="running"?"running...":s.status==="failed"?"failed":"pending";return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-semibold",style:{color:m},children:c}),e.jsx("span",{className:s.status==="running"?"font-medium":"",style:{color:m},children:s.name}),e.jsxs("span",{className:"text-[11px]",style:{color:"#525252"},children:["— ",u]})]},s.name)})})]})]})]}),ce]})}export{wt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{R as V,e as $,a as F,j as e,u as X,h as Y,r as a,g as R,X as Z,i as ee,n as te,H as se,t as O,l as _,o as re,p as H}from"./index-XalE15Aa.js";import{a as ae,u as oe}from"./task-constants-D7DvweHm.js";import{T as Q}from"./TaskStatusBadge-D_Jw_cst.js";import{f as G}from"./date-BdNtiQTP.js";import{t as ne}from"./string-B39tzdVK.js";import{S as q}from"./Select-DzcHkMFW.js";import{C as le}from"./copy-Btb09PwL.js";import{E as U}from"./EmptyState-BQgUq8FU.js";import{T as W}from"./Skeleton-BR0DoH0N.js";import{P as ie}from"./plus-CBPo9p9z.js";import"./status-colors-tZq0K5Ad.js";const ce=V.memo(function({task:t}){const m=$(),{t:p}=F(),d=(l,r)=>p(`common.${l}`,{n:r});return e.jsxs("tr",{onClick:()=>m(`/tasks/${t.id}`),className:"cursor-pointer border-b border-[var(--border-row)] transition-colors hover:bg-[var(--bg-input)]",children:[e.jsxs("td",{className:"w-16 py-3 pr-4 font-mono text-xs font-medium text-[var(--text-secondary)] text-right tabular-nums",children:["#",t.id]}),e.jsx("td",{className:"py-3 pr-4 text-sm text-[var(--text-primary)]",children:ne(t.description,80)}),e.jsx("td",{className:"py-3 pr-4",children:e.jsx(Q,{status:t.status})}),e.jsx("td",{className:"py-3 pr-4 font-mono text-xs text-[var(--text-secondary)]",children:t.projectKey}),e.jsx("td",{className:"py-3 pr-4 font-mono text-xs text-[var(--text-secondary)]",children:t.developerName??t.creatorName??"-"}),e.jsx("td",{className:"py-3 pr-4 font-mono text-xs text-[var(--text-secondary)]",children:t.workerName??"—"}),e.jsx("td",{className:"py-3 font-mono text-xs text-[var(--text-muted)]",children:G(t.createdAt,d)})]})});function de({isOpen:n,onClose:t,projects:m,projectsLoading:p,onSubmit:d,isSubmitting:l}){const{t:r}=F();X(o=>o.user);const b=Y(),[i,w]=a.useState(""),[x,h]=a.useState(""),[g,u]=a.useState("feat"),[T,E]=a.useState(""),[I,S]=a.useState(""),[j,v]=a.useState(""),[B,f]=a.useState([]),[K,k]=a.useState("");a.useEffect(()=>{n&&(w(""),h(""),u("feat"),E(""),S(""),v(""),k(""),b&&R.get("admin/developers").json().then(f).catch(()=>f([])))},[n,b]),a.useEffect(()=>{if(!n)return;function o(N){N.key==="Escape"&&t()}return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},[n,t]);async function y(o){if(o.preventDefault(),k(""),!i||!x.trim()){k(r("tasks.project_and_description_required"));return}try{await d({projectKey:i,description:x.trim(),workerId:I||void 0,developerId:j?Number(j):void 0,taskType:g,branchSlug:T.trim()||void 0})}catch(N){const z=N instanceof Error?N.message:r("tasks.failed_to_create_task");k(z)}}return n?e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 font-mono",style:{backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},onClick:o=>{o.target===o.currentTarget&&t()},children:e.jsxs("div",{className:"w-full max-w-[480px] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)]",onClick:o=>o.stopPropagation(),children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-6 py-4",children:[e.jsxs("h2",{className:"text-sm text-[var(--text-primary)]",children:["// ",r("tasks.new_task")]}),e.jsx("button",{onClick:t,className:"text-[var(--text-muted)] transition-colors hover:text-[var(--text-primary)]",children:e.jsx(Z,{className:"h-4 w-4"})})]}),e.jsxs("form",{onSubmit:y,className:"px-6 py-5",children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.project")}),e.jsx(q,{value:i,onChange:w,options:m.map(o=>({value:o.key,label:o.name})),placeholder:r(p?"common.loading":"tasks.select_project"),disabled:p})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.task_type")}),e.jsx(q,{value:g,onChange:u,options:ae})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.task_description")}),e.jsx("textarea",{value:x,onChange:o=>h(o.target.value),placeholder:r("tasks.describe_task_placeholder"),rows:4,className:"w-full resize-none rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] px-3 py-2.5 text-xs text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none focus:border-[var(--accent)]"})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.target_worker")}),e.jsx("input",{type:"text",value:I,onChange:o=>S(o.target.value),placeholder:r("tasks.any_able"),className:"w-full rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] px-3 py-2.5 text-xs text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none focus:border-[var(--accent)]"})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.branch_slug")}),e.jsx("input",{type:"text",value:T,onChange:o=>E(o.target.value),placeholder:r("tasks.branch_slug_placeholder"),className:"w-full rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] px-3 py-2.5 text-xs text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none focus:border-[var(--accent)]"})]}),b&&e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.assign_developer")}),e.jsx(q,{value:j,onChange:v,options:B.map(o=>({value:String(o.id),label:o.name})),placeholder:r("tasks.select_developer")})]}),K&&e.jsx("div",{className:"rounded-[4px] bg-[#2a1515] border border-[var(--destructive)]/30 px-3 py-2 text-xs text-[var(--destructive)]",children:K})]}),e.jsxs("div",{className:"mt-6 flex items-center justify-end gap-3",children:[e.jsx("button",{type:"button",onClick:t,className:"rounded-[4px] border border-[var(--border)] bg-transparent px-4 py-2 text-xs text-[var(--text-secondary)] transition-colors hover:text-[var(--text-primary)]",children:r("common.cancel")}),e.jsx("button",{type:"submit",disabled:l||!i||!x.trim(),className:"rounded-[4px] bg-[var(--accent)] px-4 py-2 text-xs text-black transition-opacity hover:opacity-90 disabled:opacity-40",children:r(l?"common.creating":"tasks.create_task")})]})]})]})}):null}function xe({isOpen:n,onClose:t,onForceCreate:m,onViewExisting:p,similarTask:d,isLoading:l}){const{t:r}=F();return!d||!n?null:e.jsx("div",{onClick:t,style:{position:"fixed",inset:0,zIndex:50,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},children:e.jsxs("div",{onClick:b=>b.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,display:"flex",alignItems:"center",gap:"0.5rem"},children:[e.jsx(le,{style:{width:"1rem",height:"1rem"}}),r("tasks.dedup_title")]}),e.jsx("div",{style:{color:"var(--text-muted)",fontSize:"0.7rem",marginTop:"0.25rem"},children:r("tasks.dedup_description")})]}),e.jsxs("div",{style:{marginBottom:"1.25rem",padding:"0.75rem",border:"1px solid var(--border)",borderRadius:"4px",backgroundColor:"var(--bg-primary)"},children:[e.jsxs("div",{style:{color:"var(--text-muted)",fontSize:"0.65rem",fontFamily:"'JetBrains Mono', monospace"},children:["#",d.id," · ",d.status]}),e.jsx("div",{style:{color:"var(--text-primary)",fontSize:"0.75rem",marginTop:"0.375rem",lineHeight:"1.5"},children:d.description})]}),e.jsxs("div",{style:{display:"flex",gap:"0.75rem"},children:[e.jsx("button",{type:"button",onClick:t,disabled:l,className:"text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:border-[var(--text-muted)]",style:{flex:1,padding:"0.5rem",backgroundColor:"transparent",border:"1px solid var(--border)",borderRadius:"4px",fontSize:"0.75rem",fontFamily:"'JetBrains Mono', monospace",cursor:l?"not-allowed":"pointer",opacity:l?.7:1,transition:"color 0.15s, border-color 0.15s"},children:r("common.cancel")}),e.jsx("button",{type:"button",onClick:()=>p(d.id),style:{flex:1,padding:"0.5rem",backgroundColor:"transparent",color:"var(--text-muted)",border:"1px solid var(--border)",borderRadius:"4px",fontSize:"0.75rem",fontFamily:"'JetBrains Mono', monospace",cursor:"pointer"},children:r("tasks.view_existing")}),e.jsx("button",{type:"button",onClick:m,disabled:l,style:{flex:1,padding:"0.5rem",backgroundColor:"var(--warning)",color:"#0C0C0C",border:"none",borderRadius:"4px",fontSize:"0.75rem",fontWeight:600,fontFamily:"'JetBrains Mono', monospace",cursor:l?"not-allowed":"pointer",opacity:l?.7:1},children:r(l?"common.creating":"tasks.dedup_create_anyway")})]})]})})}function pe({task:n}){const t=$();return e.jsxs("div",{onClick:()=>t(`/tasks/${n.id}`),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-start justify-between gap-2",children:[e.jsxs("span",{className:"text-[11px] text-[var(--text-primary)] leading-tight",style:{wordBreak:"break-word"},children:["#",n.id," ",n.description]}),e.jsx("span",{className:"shrink-0",children:e.jsx(Q,{status:n.status})})]}),e.jsxs("div",{className:"mt-1.5 flex items-center gap-2 text-[11px] text-[var(--text-muted)]",children:[e.jsx("span",{children:G(n.createdAt)}),e.jsx("span",{children:"·"}),e.jsx("span",{children:n.projectKey}),n.workerName&&e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"·"}),e.jsx("span",{children:n.workerName})]})]})]})}const me=[{key:"all",labelKey:"tasks.tab_all"},{key:_.RUNNING,labelKey:"tasks.tab_running"},{key:_.QUEUED,labelKey:"tasks.tab_queued"},{key:_.COMPLETED,labelKey:"tasks.tab_completed"},{key:_.FAILED,labelKey:"tasks.tab_failed"},{key:_.CANCELLED,labelKey:"tasks.tab_cancelled"}],D=20;function Se(){const n=$(),{t}=F(),{tasks:m,loading:p,fetchTasks:d}=oe(),l=ee(s=>s.taskSeq),[r,b]=a.useState("all"),[i,w]=a.useState(""),[x,h]=a.useState(1),[g,u]=a.useState(!1);te(a.useMemo(()=>e.jsxs("button",{onClick:()=>u(!0),className:"flex items-center gap-1.5 rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs font-mono text-black transition-opacity hover:opacity-90",children:[e.jsx(ie,{className:"h-3.5 w-3.5"}),t("tasks.new_task")]}),[t]));const[T,E]=a.useState([]),[I,S]=a.useState(!1),[j,v]=a.useState(!1),[B,f]=a.useState(!1),[K,k]=a.useState(null),[y,o]=a.useState(null);a.useEffect(()=>{const s={limit:String(D)};r!=="all"&&(s.status=r),d(s)},[r,d,l]),a.useEffect(()=>{h(1)},[i]),a.useEffect(()=>{g&&(S(!0),R.get("web/projects").json().then(s=>E(s)).catch(()=>{}).finally(()=>S(!1)))},[g]);const N=a.useCallback(async s=>{v(!0);try{const c=await R.post("web/tasks",{json:{projectKey:s.projectKey,description:s.description,workerId:s.workerId,developerId:s.developerId}}).json();u(!1),n(`/tasks/${c.task.id}`)}catch(c){if(c instanceof se&&c.response.status===409){try{const C=await c.response.json();if(C.confirmRequired){k({id:C.confirmRequired.taskId,description:C.confirmRequired.message,status:"active"}),o(s),u(!1),f(!0);return}}catch{}O.error(t("tasks.similar_task_exists"))}else{const C=c instanceof Error?c.message:String(c);O.error(C)}}finally{v(!1)}},[n]),z=a.useCallback(async()=>{if(y){v(!0);try{const s=await R.post("web/tasks",{json:{projectKey:y.projectKey,description:y.description,workerId:y.workerId,force:!0}}).json();f(!1),n(`/tasks/${s.task.id}`)}finally{v(!1)}}},[y,n]),P=a.useMemo(()=>{if(!i.trim())return m;const s=i.toLowerCase();return m.filter(c=>c.description.toLowerCase().includes(s)||String(c.id).includes(i))},[m,i]),A=Math.max(1,Math.ceil(P.length/D)),M=P.slice((x-1)*D,x*D),L=t(i?"tasks.try_adjusting_search":"tasks.create_first_task"),J=i?void 0:e.jsx("button",{onClick:()=>u(!0),className:"rounded-[4px] bg-[var(--accent)] px-5 py-2 text-[11px] font-bold text-black",children:t("tasks.create_task")});return e.jsxs("div",{className:"mx-auto max-w-6xl px-2 py-4 md:px-4 md:py-6 font-mono",children:[e.jsxs("div",{className:"mb-4 flex flex-col gap-3 md:gap-4 md:flex-row md:items-center",children:[e.jsx("div",{className:"flex items-center gap-1 overflow-x-auto pb-1 md:pb-0 no-scrollbar pr-4 md:pr-0",children:me.map(s=>e.jsx("button",{onClick:()=>b(s.key),className:`shrink-0 rounded-[4px] px-3 py-2 h-10 md:h-8 text-xs transition-colors ${r===s.key?"text-[var(--accent)] bg-[var(--bg-input)]":"text-[var(--text-muted)] bg-[var(--bg-card)] hover:text-[var(--text-secondary)]"}`,children:t(s.labelKey)},s.key))}),e.jsxs("div",{className:"relative md:ml-auto md:w-64",children:[e.jsx(re,{className:"absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-[var(--text-muted)]"}),e.jsx("input",{type:"text",placeholder:t("tasks.search_tasks"),value:i,onChange:s=>w(s.target.value),className:"w-full rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] py-1.5 pl-8 pr-3 text-xs text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none focus:border-[var(--accent)]"}),i&&e.jsx("button",{onClick:()=>w(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-xs text-[var(--text-muted)] hover:text-[var(--text-secondary)]",children:"x"})]})]}),e.jsx("div",{className:"hidden md:block rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)]",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border)] text-[11px] font-medium text-[#525252]",children:[e.jsx("th",{className:"w-16 px-4 py-2.5 text-right",children:t("tasks.id")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.description_col")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.status_col")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.project_col")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.assignee")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.worker")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.time")})]})}),e.jsxs("tbody",{children:[p&&M.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:7,className:"p-4",children:e.jsx(W,{rows:5})})}),!p&&P.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:7,className:"p-4",children:e.jsx(U,{icon:H,title:t("tasks.no_tasks_found"),description:L,action:J})})}),M.map(s=>e.jsx(ce,{task:s},s.id))]})]})}),e.jsxs("div",{className:"flex flex-col gap-2 md:hidden",children:[p&&M.length===0&&e.jsx("div",{className:"p-4",children:e.jsx(W,{rows:5})}),!p&&P.length===0&&e.jsx(U,{icon:H,title:t("tasks.no_tasks_found"),description:L,action:J}),M.map(s=>e.jsx(pe,{task:s},s.id))]}),A>1&&e.jsxs("div",{className:"mt-6 flex items-center justify-center gap-1",children:[e.jsx("button",{onClick:()=>h(Math.max(1,x-1)),disabled:x===1,className:"rounded-[4px] px-2 py-1 text-xs text-[var(--text-muted)] hover:text-[var(--text-primary)] disabled:opacity-30 min-w-[44px] min-h-[44px] flex items-center justify-center",children:t("tasks.prev")}),Array.from({length:A},(s,c)=>c+1).map(s=>e.jsx("button",{onClick:()=>h(s),className:`rounded-[4px] px-2.5 py-1 text-xs transition-colors min-w-[44px] min-h-[44px] flex items-center justify-center ${x===s?"text-[var(--accent)] bg-[var(--bg-input)]":"text-[var(--text-muted)] hover:text-[var(--text-secondary)]"}`,children:s},s)),e.jsx("button",{onClick:()=>h(Math.min(A,x+1)),disabled:x===A,className:"rounded-[4px] px-2 py-1 text-xs text-[var(--text-muted)] hover:text-[var(--text-primary)] disabled:opacity-30 min-w-[44px] min-h-[44px] flex items-center justify-center",children:t("common.next")})]}),e.jsx(de,{isOpen:g,onClose:()=>u(!1),projects:T,projectsLoading:I,onSubmit:N,isSubmitting:j}),e.jsx(xe,{isOpen:B,onClose:()=>f(!1),onForceCreate:z,onViewExisting:s=>{f(!1),n(`/tasks/${s}`)},similarTask:K,isLoading:j})]})}export{Se as default};
|
|
1
|
+
import{R as V,f as $,a as F,j as e,u as X,i as Y,r as a,h as R,X as Z,k as ee,o as te,H as se,t as O,m as _,p as re,q as H}from"./index-y1Zb2xN4.js";import{a as ae,u as oe}from"./task-constants-DnSoMOPb.js";import{T as Q}from"./TaskStatusBadge-PdGq2XxP.js";import{f as G}from"./date-BdNtiQTP.js";import{t as ne}from"./string-B39tzdVK.js";import{S as z}from"./Select-whtPZbZ2.js";import{C as le}from"./copy-CX4krhaQ.js";import{E as U}from"./EmptyState-BQVGct4g.js";import{T as W}from"./Skeleton-CjvMhglG.js";import{P as ie}from"./plus-QoSQh1Ci.js";import"./status-colors-DxwFeYp0.js";const ce=V.memo(function({task:t}){const m=$(),{t:p}=F(),d=(l,r)=>p(`common.${l}`,{n:r});return e.jsxs("tr",{onClick:()=>m(`/tasks/${t.id}`),className:"cursor-pointer border-b border-[var(--border-row)] transition-colors hover:bg-[var(--bg-input)]",children:[e.jsxs("td",{className:"w-16 py-3 pr-4 font-mono text-xs font-medium text-[var(--text-secondary)] text-right tabular-nums",children:["#",t.id]}),e.jsx("td",{className:"py-3 pr-4 text-sm text-[var(--text-primary)]",children:ne(t.description,80)}),e.jsx("td",{className:"py-3 pr-4",children:e.jsx(Q,{status:t.status})}),e.jsx("td",{className:"py-3 pr-4 font-mono text-xs text-[var(--text-secondary)]",children:t.projectKey}),e.jsx("td",{className:"py-3 pr-4 font-mono text-xs text-[var(--text-secondary)]",children:t.developerName??t.creatorName??"-"}),e.jsx("td",{className:"py-3 pr-4 font-mono text-xs text-[var(--text-secondary)]",children:t.workerName??"—"}),e.jsx("td",{className:"py-3 font-mono text-xs text-[var(--text-muted)]",children:G(t.createdAt,d)})]})});function de({isOpen:n,onClose:t,projects:m,projectsLoading:p,onSubmit:d,isSubmitting:l}){const{t:r}=F();X(o=>o.user);const b=Y(),[i,w]=a.useState(""),[x,h]=a.useState(""),[j,u]=a.useState("feat"),[T,E]=a.useState(""),[I,S]=a.useState(""),[g,v]=a.useState(""),[B,f]=a.useState([]),[K,k]=a.useState("");a.useEffect(()=>{n&&(w(""),h(""),u("feat"),E(""),S(""),v(""),k(""),b&&R.get("admin/developers").json().then(f).catch(()=>f([])))},[n,b]),a.useEffect(()=>{if(!n)return;function o(N){N.key==="Escape"&&t()}return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},[n,t]);async function y(o){if(o.preventDefault(),k(""),!i||!x.trim()){k(r("tasks.project_and_description_required"));return}try{await d({projectKey:i,description:x.trim(),workerId:I||void 0,developerId:g?Number(g):void 0,taskType:j,branchSlug:T.trim()||void 0})}catch(N){const q=N instanceof Error?N.message:r("tasks.failed_to_create_task");k(q)}}return n?e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 font-mono",style:{backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},onClick:o=>{o.target===o.currentTarget&&t()},children:e.jsxs("div",{className:"w-full max-w-[480px] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)]",onClick:o=>o.stopPropagation(),children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-6 py-4",children:[e.jsxs("h2",{className:"text-sm text-[var(--text-primary)]",children:["// ",r("tasks.new_task")]}),e.jsx("button",{onClick:t,className:"text-[var(--text-muted)] transition-colors hover:text-[var(--text-primary)]",children:e.jsx(Z,{className:"h-4 w-4"})})]}),e.jsxs("form",{onSubmit:y,className:"px-6 py-5",children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.project")}),e.jsx(z,{value:i,onChange:w,options:m.map(o=>({value:o.key,label:o.name})),placeholder:r(p?"common.loading":"tasks.select_project"),disabled:p})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.task_type")}),e.jsx(z,{value:j,onChange:u,options:ae})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.task_description")}),e.jsx("textarea",{value:x,onChange:o=>h(o.target.value),placeholder:r("tasks.describe_task_placeholder"),rows:4,className:"w-full resize-none rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] px-3 py-2.5 text-xs text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none focus:border-[var(--accent)]"})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.target_worker")}),e.jsx("input",{type:"text",value:I,onChange:o=>S(o.target.value),placeholder:r("tasks.any_able"),className:"w-full rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] px-3 py-2.5 text-xs text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none focus:border-[var(--accent)]"})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.branch_slug")}),e.jsx("input",{type:"text",value:T,onChange:o=>E(o.target.value),placeholder:r("tasks.branch_slug_placeholder"),className:"w-full rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] px-3 py-2.5 text-xs text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none focus:border-[var(--accent)]"})]}),b&&e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.assign_developer")}),e.jsx(z,{value:g,onChange:v,options:B.map(o=>({value:String(o.id),label:o.name})),placeholder:r("tasks.select_developer")})]}),K&&e.jsx("div",{className:"rounded-[4px] bg-[#2a1515] border border-[var(--destructive)]/30 px-3 py-2 text-xs text-[var(--destructive)]",children:K})]}),e.jsxs("div",{className:"mt-6 flex items-center justify-end gap-3",children:[e.jsx("button",{type:"button",onClick:t,className:"rounded-[4px] border border-[var(--border)] bg-transparent px-4 py-2 text-xs text-[var(--text-secondary)] transition-colors hover:text-[var(--text-primary)]",children:r("common.cancel")}),e.jsx("button",{type:"submit",disabled:l||!i||!x.trim(),className:"rounded-[4px] bg-[var(--accent)] px-4 py-2 text-xs text-black transition-opacity hover:opacity-90 disabled:opacity-40",children:r(l?"common.creating":"tasks.create_task")})]})]})]})}):null}function xe({isOpen:n,onClose:t,onForceCreate:m,onViewExisting:p,similarTask:d,isLoading:l}){const{t:r}=F();return!d||!n?null:e.jsx("div",{onClick:t,style:{position:"fixed",inset:0,zIndex:50,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},children:e.jsxs("div",{onClick:b=>b.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,display:"flex",alignItems:"center",gap:"0.5rem"},children:[e.jsx(le,{style:{width:"1rem",height:"1rem"}}),r("tasks.dedup_title")]}),e.jsx("div",{style:{color:"var(--text-muted)",fontSize:"0.7rem",marginTop:"0.25rem"},children:r("tasks.dedup_description")})]}),e.jsxs("div",{style:{marginBottom:"1.25rem",padding:"0.75rem",border:"1px solid var(--border)",borderRadius:"4px",backgroundColor:"var(--bg-primary)"},children:[e.jsxs("div",{style:{color:"var(--text-muted)",fontSize:"0.65rem",fontFamily:"'JetBrains Mono', monospace"},children:["#",d.id," · ",d.status]}),e.jsx("div",{style:{color:"var(--text-primary)",fontSize:"0.75rem",marginTop:"0.375rem",lineHeight:"1.5"},children:d.description})]}),e.jsxs("div",{style:{display:"flex",gap:"0.75rem"},children:[e.jsx("button",{type:"button",onClick:t,disabled:l,className:"text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:border-[var(--text-muted)]",style:{flex:1,padding:"0.5rem",backgroundColor:"transparent",border:"1px solid var(--border)",borderRadius:"4px",fontSize:"0.75rem",fontFamily:"'JetBrains Mono', monospace",cursor:l?"not-allowed":"pointer",opacity:l?.7:1,transition:"color 0.15s, border-color 0.15s"},children:r("common.cancel")}),e.jsx("button",{type:"button",onClick:()=>p(d.id),style:{flex:1,padding:"0.5rem",backgroundColor:"transparent",color:"var(--text-muted)",border:"1px solid var(--border)",borderRadius:"4px",fontSize:"0.75rem",fontFamily:"'JetBrains Mono', monospace",cursor:"pointer"},children:r("tasks.view_existing")}),e.jsx("button",{type:"button",onClick:m,disabled:l,style:{flex:1,padding:"0.5rem",backgroundColor:"var(--warning)",color:"#0C0C0C",border:"none",borderRadius:"4px",fontSize:"0.75rem",fontWeight:600,fontFamily:"'JetBrains Mono', monospace",cursor:l?"not-allowed":"pointer",opacity:l?.7:1},children:r(l?"common.creating":"tasks.dedup_create_anyway")})]})]})})}function pe({task:n}){const t=$();return e.jsxs("div",{onClick:()=>t(`/tasks/${n.id}`),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-start justify-between gap-2",children:[e.jsxs("span",{className:"text-[11px] text-[var(--text-primary)] leading-tight",style:{wordBreak:"break-word"},children:["#",n.id," ",n.description]}),e.jsx("span",{className:"shrink-0",children:e.jsx(Q,{status:n.status})})]}),e.jsxs("div",{className:"mt-1.5 flex items-center gap-2 text-[11px] text-[var(--text-muted)]",children:[e.jsx("span",{children:G(n.createdAt)}),e.jsx("span",{children:"·"}),e.jsx("span",{children:n.projectKey}),n.workerName&&e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"·"}),e.jsx("span",{children:n.workerName})]})]})]})}const me=[{key:"all",labelKey:"tasks.tab_all"},{key:_.RUNNING,labelKey:"tasks.tab_running"},{key:_.QUEUED,labelKey:"tasks.tab_queued"},{key:_.COMPLETED,labelKey:"tasks.tab_completed"},{key:_.FAILED,labelKey:"tasks.tab_failed"},{key:_.CANCELLED,labelKey:"tasks.tab_cancelled"}],D=20;function Se(){const n=$(),{t}=F(),{tasks:m,loading:p,fetchTasks:d}=oe(),l=ee(s=>s.taskSeq),[r,b]=a.useState("all"),[i,w]=a.useState(""),[x,h]=a.useState(1),[j,u]=a.useState(!1);te(a.useMemo(()=>e.jsxs("button",{onClick:()=>u(!0),className:"flex items-center gap-1.5 rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs font-mono text-black transition-opacity hover:opacity-90",children:[e.jsx(ie,{className:"h-3.5 w-3.5"}),t("tasks.new_task")]}),[t]));const[T,E]=a.useState([]),[I,S]=a.useState(!1),[g,v]=a.useState(!1),[B,f]=a.useState(!1),[K,k]=a.useState(null),[y,o]=a.useState(null);a.useEffect(()=>{const s={limit:String(D)};r!=="all"&&(s.status=r),d(s)},[r,d,l]),a.useEffect(()=>{h(1)},[i]),a.useEffect(()=>{j&&(S(!0),R.get("web/projects").json().then(s=>E(s)).catch(()=>{}).finally(()=>S(!1)))},[j]);const N=a.useCallback(async s=>{v(!0);try{const c=await R.post("web/tasks",{json:{projectKey:s.projectKey,description:s.description,workerId:s.workerId,developerId:s.developerId}}).json();u(!1),n(`/tasks/${c.task.id}`)}catch(c){if(c instanceof se&&c.response.status===409){try{const C=await c.response.json();if(C.confirmRequired){k({id:C.confirmRequired.taskId,description:C.confirmRequired.message,status:"active"}),o(s),u(!1),f(!0);return}}catch{}O.error(t("tasks.similar_task_exists"))}else{const C=c instanceof Error?c.message:String(c);O.error(C)}}finally{v(!1)}},[n]),q=a.useCallback(async()=>{if(y){v(!0);try{const s=await R.post("web/tasks",{json:{projectKey:y.projectKey,description:y.description,workerId:y.workerId,force:!0}}).json();f(!1),n(`/tasks/${s.task.id}`)}finally{v(!1)}}},[y,n]),P=a.useMemo(()=>{if(!i.trim())return m;const s=i.toLowerCase();return m.filter(c=>c.description.toLowerCase().includes(s)||String(c.id).includes(i))},[m,i]),A=Math.max(1,Math.ceil(P.length/D)),M=P.slice((x-1)*D,x*D),L=t(i?"tasks.try_adjusting_search":"tasks.create_first_task"),J=i?void 0:e.jsx("button",{onClick:()=>u(!0),className:"rounded-[4px] bg-[var(--accent)] px-5 py-2 text-[11px] font-bold text-black",children:t("tasks.create_task")});return e.jsxs("div",{className:"mx-auto max-w-6xl px-2 py-4 md:px-4 md:py-6 font-mono",children:[e.jsxs("div",{className:"mb-4 flex flex-col gap-3 md:gap-4 md:flex-row md:items-center",children:[e.jsx("div",{className:"flex items-center gap-1 overflow-x-auto pb-1 md:pb-0 no-scrollbar pr-4 md:pr-0",children:me.map(s=>e.jsx("button",{onClick:()=>b(s.key),className:`shrink-0 rounded-[4px] px-3 py-2 h-10 md:h-8 text-xs transition-colors ${r===s.key?"text-[var(--accent)] bg-[var(--bg-input)]":"text-[var(--text-muted)] bg-[var(--bg-card)] hover:text-[var(--text-secondary)]"}`,children:t(s.labelKey)},s.key))}),e.jsxs("div",{className:"relative md:ml-auto md:w-64",children:[e.jsx(re,{className:"absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-[var(--text-muted)]"}),e.jsx("input",{type:"text",placeholder:t("tasks.search_tasks"),value:i,onChange:s=>w(s.target.value),className:"w-full rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] py-1.5 pl-8 pr-3 text-xs text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none focus:border-[var(--accent)]"}),i&&e.jsx("button",{onClick:()=>w(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-xs text-[var(--text-muted)] hover:text-[var(--text-secondary)]",children:"x"})]})]}),e.jsx("div",{className:"hidden md:block rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)]",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border)] text-[11px] font-medium text-[#525252]",children:[e.jsx("th",{className:"w-16 px-4 py-2.5 text-right",children:t("tasks.id")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.description_col")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.status_col")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.project_col")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.assignee")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.worker")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.time")})]})}),e.jsxs("tbody",{children:[p&&M.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:7,className:"p-4",children:e.jsx(W,{rows:5})})}),!p&&P.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:7,className:"p-4",children:e.jsx(U,{icon:H,title:t("tasks.no_tasks_found"),description:L,action:J})})}),M.map(s=>e.jsx(ce,{task:s},s.id))]})]})}),e.jsxs("div",{className:"flex flex-col gap-2 md:hidden",children:[p&&M.length===0&&e.jsx("div",{className:"p-4",children:e.jsx(W,{rows:5})}),!p&&P.length===0&&e.jsx(U,{icon:H,title:t("tasks.no_tasks_found"),description:L,action:J}),M.map(s=>e.jsx(pe,{task:s},s.id))]}),A>1&&e.jsxs("div",{className:"mt-6 flex items-center justify-center gap-1",children:[e.jsx("button",{onClick:()=>h(Math.max(1,x-1)),disabled:x===1,className:"rounded-[4px] px-2 py-1 text-xs text-[var(--text-muted)] hover:text-[var(--text-primary)] disabled:opacity-30 min-w-[44px] min-h-[44px] flex items-center justify-center",children:t("tasks.prev")}),Array.from({length:A},(s,c)=>c+1).map(s=>e.jsx("button",{onClick:()=>h(s),className:`rounded-[4px] px-2.5 py-1 text-xs transition-colors min-w-[44px] min-h-[44px] flex items-center justify-center ${x===s?"text-[var(--accent)] bg-[var(--bg-input)]":"text-[var(--text-muted)] hover:text-[var(--text-secondary)]"}`,children:s},s)),e.jsx("button",{onClick:()=>h(Math.min(A,x+1)),disabled:x===A,className:"rounded-[4px] px-2 py-1 text-xs text-[var(--text-muted)] hover:text-[var(--text-primary)] disabled:opacity-30 min-w-[44px] min-h-[44px] flex items-center justify-center",children:t("common.next")})]}),e.jsx(de,{isOpen:j,onClose:()=>u(!1),projects:T,projectsLoading:I,onSubmit:N,isSubmitting:g}),e.jsx(xe,{isOpen:B,onClose:()=>f(!1),onForceCreate:q,onViewExisting:s=>{f(!1),n(`/tasks/${s}`)},similarTask:K,isLoading:g})]})}export{Se as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as l,j as a}from"./index-
|
|
1
|
+
import{a as l,j as a}from"./index-y1Zb2xN4.js";import{a as r}from"./status-colors-DxwFeYp0.js";const u={QUEUED:"tasks.status_queued",ASSIGNED:"tasks.status_assigned",RUNNING:"tasks.status_running",SUSPENDED:"tasks.status_suspended",COMPLETED:"tasks.status_completed",FAILED:"tasks.status_failed",CANCELLED:"tasks.status_cancelled"};function E({status:s}){const{t:e}=l(),t=u[s],n=t?e(t):s.toLowerCase(),o=r(s);return a.jsxs("span",{className:"inline-flex items-center gap-1.5 font-mono text-xs",style:{color:o},children:[a.jsx("span",{style:{fontSize:"0.6rem"},children:"●"}),n]})}export{E as T};
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
import{c as
|
|
1
|
+
import{c as G,l as ne,h as I,m as k,a as _,r as i,k as $,n as re,j as e,X as q,f as ie}from"./index-y1Zb2xN4.js";import{T as O,u as ce,a as F}from"./task-constants-DnSoMOPb.js";import{P as le,H as oe,C as de}from"./PtyTerminal-GBlFxP4w.js";import{i as H,O as J}from"./OnboardingGuide-C87ArIaT.js";import{S as P,C as xe}from"./Select-whtPZbZ2.js";import{a as Q}from"./status-colors-DxwFeYp0.js";import{a as ue}from"./date-BdNtiQTP.js";import{u as Y}from"./useFetch-BuZrNB5l.js";import{P as A}from"./plus-QoSQh1Ci.js";import{R as me}from"./rotate-ccw-MV4xHG6J.js";import{W as pe}from"./wifi-DssF_9t2.js";import"./chevron-right-BSazmjxp.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
|
|
6
|
+
*/const he=G("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/**
|
|
7
7
|
* @license lucide-react v0.469.0 - ISC
|
|
8
8
|
*
|
|
9
9
|
* This source code is licensed under the ISC license.
|
|
10
10
|
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const he=R("Hand",[["path",{d:"M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2",key:"1fvzgz"}],["path",{d:"M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2",key:"1kc0my"}],["path",{d:"M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8",key:"10h0bg"}],["path",{d:"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15",key:"1s1gnw"}]]);/**
|
|
12
|
-
* @license lucide-react v0.469.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const ve=R("WifiOff",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]),Y="overlord_home_terminal";function fe(){try{const s=localStorage.getItem(Y);if(s)return JSON.parse(s)}catch{}return{pinnedTaskIds:[],activeTaskId:null}}let H="";function P(s){const a=JSON.stringify(s);a!==H&&(H=a,localStorage.setItem(Y,a))}const K=fe(),ge=new Set([k.QUEUED,k.ASSIGNED,k.RUNNING,k.SUSPENDED]);let D=!1;const be=ne((s,a)=>({pinnedTaskIds:K.pinnedTaskIds,activeTaskId:K.activeTaskId,taskMetas:{},stageConfirm:null,loading:!1,setActiveTask:t=>{s({activeTaskId:t}),P({pinnedTaskIds:a().pinnedTaskIds,activeTaskId:t})},pinTask:t=>{const{pinnedTaskIds:n}=a();if(n.includes(t))return;const o=[...n,t];s({pinnedTaskIds:o}),P({pinnedTaskIds:o,activeTaskId:a().activeTaskId})},unpinTask:t=>{const{pinnedTaskIds:n,activeTaskId:o,taskMetas:x}=a(),r=n.filter(l=>l!==t),m=o===t?r[0]??null:o,{[t]:p,...c}=x;s({pinnedTaskIds:r,activeTaskId:m,taskMetas:c}),P({pinnedTaskIds:r,activeTaskId:m})},loadActiveTasks:async()=>{if(!D){D=!0,s({loading:!0});try{const n=(await I.get("web/tasks",{searchParams:{limit:"30"}}).json()).data.filter(l=>ge.has(l.status)),o={};for(const l of n)o[l.id]={id:l.id,description:l.description,status:l.status,projectKey:l.projectKey,currentStage:l.currentStage,currentSessionId:l.currentSessionId};const x=new Set(n.map(l=>l.id)),{pinnedTaskIds:r,activeTaskId:m}=a(),p=[...new Set([...r.filter(l=>x.has(l)),...x])],c=m&&p.includes(m)?m:p[0]??null;s({taskMetas:o,pinnedTaskIds:p,activeTaskId:c}),P({pinnedTaskIds:p,activeTaskId:c})}catch{}finally{D=!1,s({loading:!1})}}},fetchStageConfirm:async t=>{try{const n=await I.get(`web/tasks/${t}/pending-confirm`).json();s({stageConfirm:n.confirm})}catch{s({stageConfirm:null})}},clearStageConfirm:()=>s({stageConfirm:null}),updateTaskMeta:(t,n)=>{const{taskMetas:o}=a(),x=o[t];x&&s({taskMetas:{...o,[t]:{...x,...n}}})}}));function je(){const[s,a]=i.useState(()=>z());i.useEffect(()=>{const n=()=>a(!0);return window.addEventListener("onboarding-dismissed",n),window.addEventListener("storage",()=>a(z())),()=>{window.removeEventListener("onboarding-dismissed",n),window.removeEventListener("storage",n)}},[]);const{data:t}=Q(()=>s?Promise.resolve(null):I.get("web/dashboard/stats").json(),[s]);return s||!t?null:{activeTasks:(t.active_tasks??0)+(t.queued_tasks??0),totalWorkers:t.online_workers??0,totalProjects:t.project_count??0,totalDevelopers:t.developer_count??0}}function ke({taskId:s,confirm:a,onSubmitted:t}){const{t:n}=_(),[o,x]=i.useState(a.timeout),[r,m]=i.useState(!1);i.useEffect(()=>{x(a.timeout);const c=setInterval(()=>{x(l=>l<=1?(clearInterval(c),0):l-1)},1e3);return()=>clearInterval(c)},[a.timeout,a.stageName]);const p=i.useCallback(async c=>{m(!0);try{await I.post(`web/tasks/${s}/confirm-stage`,{json:{stageName:a.stageName,approved:c}}),t()}catch{}finally{m(!1)}},[s,a.stageName,t]);return e.jsxs("div",{className:"flex items-center justify-between gap-2 border-b-2 border-[var(--warning)] bg-[var(--warning)]/10 px-3 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsx(oe,{className:"h-3.5 w-3.5 shrink-0 text-[var(--warning)]"}),e.jsxs("span",{className:"truncate text-xs text-[var(--text-primary)]",children:["// stage: ",a.stageName]}),e.jsx("span",{className:"shrink-0 text-xs text-[var(--warning)]",children:xe(o)})]}),e.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[e.jsx("button",{onClick:()=>p(!1),disabled:r,className:"rounded-[4px] border border-[var(--border)] px-2 py-1 text-[11px] text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors disabled:opacity-50",children:n("tasks.reject")}),e.jsx("button",{onClick:()=>p(!0),disabled:r,className:"rounded-[4px] bg-[var(--accent)] px-2 py-1 text-[11px] text-black hover:opacity-90 transition-opacity disabled:opacity-50",children:n(r?"tasks.stage_submitting":"tasks.confirm_and_proceed")})]})]})}function Ne({projectKey:s,onProjectChange:a,onCreated:t}){const{t:n}=_(),o=ce(h=>h.createTask),[x,r]=i.useState(""),[m,p]=i.useState("feat"),[c,l]=i.useState(!1),[f,T]=i.useState(!1),{data:N}=Q(()=>I.get("web/projects").json(),[]),b=i.useMemo(()=>{const h=(N??[]).map(g=>({value:g.key,label:g.key}));return[{value:"",label:n("terminal_home.all_projects")},...h]},[N,n]),S=i.useRef(!1);i.useEffect(()=>{if(!S.current){if(s){S.current=!0;return}b.length>1&&(a(b[1].value),S.current=!0)}},[s,b,a]);const C=!!s&&!!x.trim();async function y(){if(C){l(!0);try{const h=await o({projectKey:s,description:x.trim(),taskType:m});r(""),t(h.id)}catch{}finally{l(!1)}}}const j="flex-1 rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] px-2 py-1.5 text-xs text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none focus:border-[var(--accent)]";return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"hidden md:flex items-center gap-2 border-b border-[var(--border)] bg-[var(--bg-card)] px-3 py-2",children:[e.jsx("div",{className:"w-[140px]",children:e.jsx(M,{value:s,onChange:a,options:b,placeholder:n("terminal_home.select_project")})}),e.jsx("div",{className:"w-[100px]",children:e.jsx(M,{value:m,onChange:p,options:L})}),e.jsx("input",{type:"text",value:x,onChange:h=>r(h.target.value),onKeyDown:h=>h.key==="Enter"&&y(),placeholder:n("terminal_home.task_description_placeholder"),className:j,disabled:c}),e.jsxs("button",{onClick:y,disabled:c||!C,className:"flex items-center gap-1 rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs text-black hover:opacity-90 transition-opacity disabled:opacity-50",children:[e.jsx(A,{className:"h-3 w-3"}),n(c?"common.creating":"terminal_home.new_task")]})]}),e.jsx("div",{className:"md:hidden border-b border-[var(--border)] bg-[var(--bg-card)]",children:f?e.jsxs("div",{className:"flex flex-col gap-2 p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex-1",children:e.jsx(M,{value:s,onChange:a,options:b,placeholder:n("terminal_home.select_project")})}),e.jsx("div",{className:"w-[100px]",children:e.jsx(M,{value:m,onChange:p,options:L})}),e.jsx("button",{onClick:()=>T(!1),className:"p-1 text-[var(--text-muted)]",children:e.jsx(V,{className:"h-3.5 w-3.5"})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"text",value:x,onChange:h=>r(h.target.value),onKeyDown:h=>h.key==="Enter"&&y(),placeholder:n("terminal_home.task_description_placeholder"),className:j,disabled:c}),e.jsx("button",{onClick:y,disabled:c||!C,className:"rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs text-black hover:opacity-90 transition-opacity disabled:opacity-50",children:e.jsx(A,{className:"h-3 w-3"})})]})]}):e.jsxs("button",{onClick:()=>T(!0),className:"flex w-full items-center justify-center gap-1 py-2 text-xs text-[var(--accent)] hover:opacity-80",children:[e.jsx(A,{className:"h-3.5 w-3.5"}),n("terminal_home.new_task")]})})]})}function W({status:s,size:a}){const t=s===k.SUSPENDED,n=J(s),o=a==="sm"?"h-1.5 w-1.5":"h-2 w-2";return e.jsx("span",{className:`${o} shrink-0 rounded-full ${t?"animate-pulse":""}`,style:{backgroundColor:t?"var(--warning)":n}})}function ye({tasks:s,activeId:a,onSelect:t,onUnpin:n,children:o}){const x=ie();return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"hidden md:flex flex-col border-r border-[var(--border)] bg-[var(--bg-card)] overflow-y-auto",style:{width:200,minWidth:200},children:[e.jsx("div",{className:"border-b border-[var(--border)] px-3 py-2",children:e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:"// active tasks"})}),s.length===0?e.jsx("div",{className:"flex-1 flex items-center justify-center p-4",children:e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:"no active tasks"})}):e.jsx("div",{className:"flex-1",children:s.map(r=>{const m=r.id===a;return e.jsxs("div",{onClick:()=>t(r.id),className:`group flex items-center gap-2 px-3 py-2 cursor-pointer transition-colors ${m?"bg-[var(--accent)]/10 text-[var(--text-primary)]":"text-[var(--text-secondary)] hover:bg-[var(--bg-input)] hover:text-[var(--text-primary)]"}`,children:[e.jsx(W,{status:r.status,size:"md"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"truncate text-xs",children:["#",r.id," ",r.description]}),e.jsx("div",{className:"text-[10px] text-[var(--text-muted)]",children:r.projectKey})]}),e.jsx("button",{onClick:p=>{p.stopPropagation(),n(r.id)},className:"hidden group-hover:block shrink-0 p-0.5 text-[var(--text-muted)] hover:text-[var(--text-primary)]",title:"unpin",children:e.jsx(V,{className:"h-3 w-3"})}),e.jsx("button",{onClick:p=>{p.stopPropagation(),x(`/tasks/${r.id}`)},className:"hidden group-hover:block shrink-0 p-0.5 text-[var(--text-muted)] hover:text-[var(--accent)]",title:"open detail",children:e.jsx("span",{className:"text-[10px]",children:"→"})})]},r.id)})})]}),e.jsxs("div",{className:"flex flex-col md:hidden",children:[e.jsx("div",{className:"flex items-center gap-1 overflow-x-auto no-scrollbar border-b border-[var(--border)] bg-[var(--bg-card)] px-2",style:{height:44},children:s.length===0?e.jsx("div",{className:"flex items-center justify-center w-full",children:e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:"no active tasks"})}):s.map(r=>{const m=r.id===a;return e.jsxs("button",{onClick:()=>t(r.id),className:`flex shrink-0 items-center gap-1.5 px-3 border-b-2 transition-colors ${m?"border-[var(--accent)] text-[var(--text-primary)]":"border-transparent text-[var(--text-secondary)]"}`,style:{height:44},children:[e.jsx(W,{status:r.status,size:"sm"}),e.jsxs("span",{className:"text-[11px] whitespace-nowrap",children:["#",r.id]})]},r.id)})}),o]})]})}function we({task:s,takeoverState:a,onTakeover:t,onRelease:n}){const o=J(s.status),x=a==="manual";return e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] bg-[var(--bg-card)] px-3",style:{height:36,minHeight:36},children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:s.projectKey}),e.jsx("span",{className:"text-[11px]",style:{color:o},children:s.status.toLowerCase()}),s.currentStage&&e.jsxs("span",{className:"text-[11px] text-[var(--text-muted)]",children:["// ",s.currentStage]})]}),e.jsx("div",{className:"flex items-center gap-1",children:!O.includes(s.status)&&(x?e.jsxs("button",{onClick:n,className:"flex items-center gap-1.5 rounded-[4px] px-2.5 py-0.5 text-[11px] font-medium text-[var(--accent)]",style:{backgroundColor:"rgba(34,197,94,0.12)"},children:[e.jsx(me,{className:"h-3 w-3"}),e.jsx("span",{className:"hidden md:inline",children:"restore auto"})]}):e.jsxs("button",{onClick:t,disabled:a==="requesting",className:"flex items-center gap-1.5 rounded-[4px] px-2.5 py-0.5 text-[11px] font-medium text-[var(--warning)] disabled:opacity-50",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:[e.jsx(he,{className:"h-3 w-3"}),e.jsx("span",{className:"hidden md:inline",children:"take over"})]}))})]})}function Te({task:s,ptyStatus:a}){const t=a==="connected";return e.jsxs("div",{className:"flex items-center justify-between border-t border-[var(--border)] bg-[var(--bg-card)] px-3",style:{height:28,minHeight:28},children:[e.jsx("span",{className:"text-[10px] text-[var(--text-muted)]",children:s.currentStage?`stage: ${s.currentStage}`:`task #${s.id}`}),e.jsxs("span",{className:`flex items-center gap-1 text-[10px] ${t?"text-[var(--accent)]":"text-[var(--text-muted)]"}`,children:[t?e.jsx(ue,{className:"h-2.5 w-2.5"}):e.jsx(ve,{className:"h-2.5 w-2.5"}),t?"connected":a]})]})}function B({onboardingData:s}){const[a,t]=i.useState(!1),{t:n}=_();return s?a?e.jsxs("div",{className:"border-b border-[var(--accent)]/30",children:[e.jsxs("button",{onClick:()=>t(!1),className:"flex w-full items-center justify-between bg-[var(--bg-card)] px-3 py-1.5 transition-colors hover:bg-[var(--bg-input)]",children:[e.jsx("span",{className:"text-[11px] text-[var(--accent)]",children:n("onboarding.getting_started")}),e.jsx(pe,{className:"h-3 w-3 text-[var(--text-muted)]"})]}),e.jsx("div",{className:"max-h-[300px] overflow-y-auto",children:e.jsx(q,{data:s})})]}):e.jsxs("button",{onClick:()=>t(!0),className:"flex w-full items-center justify-between border-b border-[var(--accent)]/30 bg-[var(--bg-card)] px-3 py-1.5 transition-colors hover:bg-[var(--bg-input)]",style:{height:36},children:[e.jsx("span",{className:"text-[11px] text-[var(--accent)]",children:n("onboarding.getting_started")}),e.jsx(de,{className:"h-3 w-3 text-[var(--text-muted)]"})]}):null}function G({onboardingData:s}){const{t:a}=_();return e.jsx("div",{className:"flex flex-1 flex-col items-center justify-center p-6",children:s?e.jsx("div",{className:"w-full max-w-lg",children:e.jsx(q,{data:s})}):e.jsxs("div",{className:"text-center",children:[e.jsxs("div",{className:"mb-3 text-3xl text-[var(--border)]",children:[">","_"]}),e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:a("terminal_home.no_active_tasks")}),e.jsx("p",{className:"mt-1 text-xs text-[var(--text-muted)]",children:a("terminal_home.create_task_hint")})]})})}function $e(){const{t:s}=_(),{pinnedTaskIds:a,activeTaskId:t,taskMetas:n,stageConfirm:o,loading:x,setActiveTask:r,pinTask:m,unpinTask:p,loadActiveTasks:c,fetchStageConfirm:l,clearStageConfirm:f,updateTaskMeta:T}=be(),N=i.useRef(null),[b,S]=i.useState("disconnected"),[C,y]=i.useState("auto"),[j,h]=i.useState(""),g=F(d=>d.lastEvent),U=F(d=>d.status),u=t?n[t]??null:null,X=u?O.includes(u.status):!1,$=i.useRef(!1);i.useEffect(()=>{!$.current&&u&&(h(u.projectKey),$.current=!0)},[u]);const w=i.useMemo(()=>{const d=a.map(v=>n[v]).filter(Boolean);return j?d.filter(v=>v.projectKey===j):d},[a,n,j]);i.useEffect(()=>{w.length>0&&t&&!w.some(d=>d.id===t)&&r(w[0].id)},[w,t,r]);const E=je();re(u?`#${u.id} ${u.description}`:null),i.useEffect(()=>{c()},[c]),i.useEffect(()=>{t&&(u==null?void 0:u.status)===k.SUSPENDED?l(t):f()},[t,u==null?void 0:u.status,l,f]),i.useEffect(()=>{if(g){if(g.event==="task_status_changed"){const{taskId:d,status:v}=g;T(d,{status:v}),v===k.SUSPENDED&&d===t&&l(d),O.includes(v)&&d===t&&f()}g.event==="task_created"&&c()}},[g,t,l,f,T,c]),i.useEffect(()=>{if(U==="connected")return;const v=setInterval(()=>{document.visibilityState!=="hidden"&&c()},15e3);return()=>clearInterval(v)},[U,c]);const Z=i.useCallback(d=>{m(d),r(d),c()},[m,r,c]),ee=i.useCallback(()=>{f(),c()},[f,c]),te=i.useCallback(()=>{var d;(d=N.current)==null||d.requestTakeover()},[]),se=i.useCallback(()=>{var d;(d=N.current)==null||d.releaseTakeover()},[]);if(x&&a.length===0)return e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:s("common.loading")})});const ae=w.length>0;return e.jsxs("div",{className:"flex h-full flex-col overflow-hidden",children:[e.jsx(Ne,{projectKey:j,onProjectChange:h,onCreated:Z}),e.jsx("div",{className:"flex flex-1 overflow-hidden",children:ae?e.jsxs(e.Fragment,{children:[e.jsx(ye,{tasks:w,activeId:t,onSelect:r,onUnpin:p,children:e.jsx("div",{className:"md:hidden",children:e.jsx(B,{onboardingData:E})})}),e.jsx("div",{className:"flex flex-1 flex-col overflow-hidden",children:u?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"hidden md:block",children:e.jsx(B,{onboardingData:E})}),e.jsx(we,{task:u,takeoverState:C,onTakeover:te,onRelease:se}),o&&t&&e.jsx(ke,{taskId:t,confirm:o,onSubmitted:ee}),e.jsx("div",{className:"flex-1 min-h-[300px] overflow-hidden",children:e.jsx(le,{taskId:t,sessionId:u.currentSessionId??void 0,taskFinished:X,onStatusChange:S,onTakeoverChange:y,ref:N},t)}),e.jsx(Te,{task:u,ptyStatus:b})]}):e.jsx(G,{onboardingData:E})})]}):e.jsx(G,{onboardingData:E})})]})}export{$e as default};
|
|
11
|
+
*/const ve=G("WifiOff",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]),V="overlord_home_terminal";function fe(){try{const s=localStorage.getItem(V);if(s)return JSON.parse(s)}catch{}return{pinnedTaskIds:[],activeTaskId:null}}let L="";function M(s){const a=JSON.stringify(s);a!==L&&(L=a,localStorage.setItem(V,a))}const K=fe(),ge=new Set([k.QUEUED,k.ASSIGNED,k.RUNNING,k.SUSPENDED]);let D=!1;const be=ne((s,a)=>({pinnedTaskIds:K.pinnedTaskIds,activeTaskId:K.activeTaskId,taskMetas:{},stageConfirm:null,loading:!1,setActiveTask:t=>{s({activeTaskId:t}),M({pinnedTaskIds:a().pinnedTaskIds,activeTaskId:t})},pinTask:t=>{const{pinnedTaskIds:n}=a();if(n.includes(t))return;const o=[...n,t];s({pinnedTaskIds:o}),M({pinnedTaskIds:o,activeTaskId:a().activeTaskId})},unpinTask:t=>{const{pinnedTaskIds:n,activeTaskId:o,taskMetas:x}=a(),r=n.filter(l=>l!==t),u=o===t?r[0]??null:o,{[t]:p,...c}=x;s({pinnedTaskIds:r,activeTaskId:u,taskMetas:c}),M({pinnedTaskIds:r,activeTaskId:u})},loadActiveTasks:async()=>{if(!D){D=!0,s({loading:!0});try{const n=(await I.get("web/tasks",{searchParams:{limit:"30"}}).json()).data.filter(l=>ge.has(l.status)),o={};for(const l of n)o[l.id]={id:l.id,description:l.description,status:l.status,projectKey:l.projectKey,currentStage:l.currentStage,currentSessionId:l.currentSessionId};const x=new Set(n.map(l=>l.id)),{pinnedTaskIds:r,activeTaskId:u}=a(),p=[...new Set([...r.filter(l=>x.has(l)),...x])],c=u&&p.includes(u)?u:p[0]??null;s({taskMetas:o,pinnedTaskIds:p,activeTaskId:c}),M({pinnedTaskIds:p,activeTaskId:c})}catch{}finally{D=!1,s({loading:!1})}}},fetchStageConfirm:async t=>{try{const n=await I.get(`web/tasks/${t}/pending-confirm`).json();s({stageConfirm:n.confirm})}catch{s({stageConfirm:null})}},clearStageConfirm:()=>s({stageConfirm:null}),updateTaskMeta:(t,n)=>{const{taskMetas:o}=a(),x=o[t];x&&s({taskMetas:{...o,[t]:{...x,...n}}})}}));function je(){const[s,a]=i.useState(()=>H());i.useEffect(()=>{const n=()=>a(!0);return window.addEventListener("onboarding-dismissed",n),window.addEventListener("storage",()=>a(H())),()=>{window.removeEventListener("onboarding-dismissed",n),window.removeEventListener("storage",n)}},[]);const{data:t}=Y(()=>s?Promise.resolve(null):I.get("web/dashboard/stats").json(),[s]);return s||!t?null:{activeTasks:(t.active_tasks??0)+(t.queued_tasks??0),totalWorkers:t.online_workers??0,totalProjects:t.project_count??0,totalDevelopers:t.developer_count??0}}function ke({taskId:s,confirm:a,onSubmitted:t}){const{t:n}=_(),[o,x]=i.useState(a.timeout),[r,u]=i.useState(!1);i.useEffect(()=>{x(a.timeout);const c=setInterval(()=>{x(l=>l<=1?(clearInterval(c),0):l-1)},1e3);return()=>clearInterval(c)},[a.timeout,a.stageName]);const p=i.useCallback(async c=>{u(!0);try{await I.post(`web/tasks/${s}/confirm-stage`,{json:{stageName:a.stageName,approved:c}}),t()}catch{}finally{u(!1)}},[s,a.stageName,t]);return e.jsxs("div",{className:"flex items-center justify-between gap-2 border-b-2 border-[var(--warning)] bg-[var(--warning)]/10 px-3 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsx(de,{className:"h-3.5 w-3.5 shrink-0 text-[var(--warning)]"}),e.jsxs("span",{className:"truncate text-xs text-[var(--text-primary)]",children:["// stage: ",a.stageName]}),e.jsx("span",{className:"shrink-0 text-xs text-[var(--warning)]",children:ue(o)})]}),e.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[e.jsx("button",{onClick:()=>p(!1),disabled:r,className:"rounded-[4px] border border-[var(--border)] px-2 py-1 text-[11px] text-[var(--text-secondary)] hover:text-[var(--text-primary)] transition-colors disabled:opacity-50",children:n("tasks.reject")}),e.jsx("button",{onClick:()=>p(!0),disabled:r,className:"rounded-[4px] bg-[var(--accent)] px-2 py-1 text-[11px] text-black hover:opacity-90 transition-opacity disabled:opacity-50",children:n(r?"tasks.stage_submitting":"tasks.confirm_and_proceed")})]})]})}function Ne({projectKey:s,onProjectChange:a,onCreated:t}){const{t:n}=_(),o=ce(h=>h.createTask),[x,r]=i.useState(""),[u,p]=i.useState("feat"),[c,l]=i.useState(!1),[f,T]=i.useState(!1),{data:N}=Y(()=>I.get("web/projects").json(),[]),b=i.useMemo(()=>{const h=(N??[]).map(g=>({value:g.key,label:g.key}));return[{value:"",label:n("terminal_home.all_projects")},...h]},[N,n]),S=i.useRef(!1);i.useEffect(()=>{if(!S.current){if(s){S.current=!0;return}b.length>1&&(a(b[1].value),S.current=!0)}},[s,b,a]);const C=!!s&&!!x.trim();async function y(){if(C){l(!0);try{const h=await o({projectKey:s,description:x.trim(),taskType:u});r(""),t(h.id)}catch{}finally{l(!1)}}}const j="flex-1 rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] px-2 py-1.5 text-xs text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none focus:border-[var(--accent)]";return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"hidden md:flex items-center gap-2 border-b border-[var(--border)] bg-[var(--bg-card)] px-3 py-2",children:[e.jsx("div",{className:"w-[140px]",children:e.jsx(P,{value:s,onChange:a,options:b,placeholder:n("terminal_home.select_project")})}),e.jsx("div",{className:"w-[100px]",children:e.jsx(P,{value:u,onChange:p,options:F})}),e.jsx("input",{type:"text",value:x,onChange:h=>r(h.target.value),onKeyDown:h=>h.key==="Enter"&&y(),placeholder:n("terminal_home.task_description_placeholder"),className:j,disabled:c}),e.jsxs("button",{onClick:y,disabled:c||!C,className:"flex items-center gap-1 rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs text-black hover:opacity-90 transition-opacity disabled:opacity-50",children:[e.jsx(A,{className:"h-3 w-3"}),n(c?"common.creating":"terminal_home.new_task")]})]}),e.jsx("div",{className:"md:hidden border-b border-[var(--border)] bg-[var(--bg-card)]",children:f?e.jsxs("div",{className:"flex flex-col gap-2 p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex-1",children:e.jsx(P,{value:s,onChange:a,options:b,placeholder:n("terminal_home.select_project")})}),e.jsx("div",{className:"w-[100px]",children:e.jsx(P,{value:u,onChange:p,options:F})}),e.jsx("button",{onClick:()=>T(!1),className:"p-1 text-[var(--text-muted)]",children:e.jsx(q,{className:"h-3.5 w-3.5"})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"text",value:x,onChange:h=>r(h.target.value),onKeyDown:h=>h.key==="Enter"&&y(),placeholder:n("terminal_home.task_description_placeholder"),className:j,disabled:c}),e.jsx("button",{onClick:y,disabled:c||!C,className:"rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs text-black hover:opacity-90 transition-opacity disabled:opacity-50",children:e.jsx(A,{className:"h-3 w-3"})})]})]}):e.jsxs("button",{onClick:()=>T(!0),className:"flex w-full items-center justify-center gap-1 py-2 text-xs text-[var(--accent)] hover:opacity-80",children:[e.jsx(A,{className:"h-3.5 w-3.5"}),n("terminal_home.new_task")]})})]})}function W({status:s,size:a}){const t=s===k.SUSPENDED,n=Q(s),o=a==="sm"?"h-1.5 w-1.5":"h-2 w-2";return e.jsx("span",{className:`${o} shrink-0 rounded-full ${t?"animate-pulse":""}`,style:{backgroundColor:t?"var(--warning)":n}})}function ye({tasks:s,activeId:a,onSelect:t,onUnpin:n,children:o}){const x=ie();return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"hidden md:flex flex-col border-r border-[var(--border)] bg-[var(--bg-card)] overflow-y-auto",style:{width:200,minWidth:200},children:[e.jsx("div",{className:"border-b border-[var(--border)] px-3 py-2",children:e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:"// active tasks"})}),s.length===0?e.jsx("div",{className:"flex-1 flex items-center justify-center p-4",children:e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:"no active tasks"})}):e.jsx("div",{className:"flex-1",children:s.map(r=>{const u=r.id===a;return e.jsxs("div",{onClick:()=>t(r.id),className:`group flex items-center gap-2 px-3 py-2 cursor-pointer transition-colors ${u?"bg-[var(--accent)]/10 text-[var(--text-primary)]":"text-[var(--text-secondary)] hover:bg-[var(--bg-input)] hover:text-[var(--text-primary)]"}`,children:[e.jsx(W,{status:r.status,size:"md"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"truncate text-xs",children:["#",r.id," ",r.description]}),e.jsx("div",{className:"text-[10px] text-[var(--text-muted)]",children:r.projectKey})]}),e.jsx("button",{onClick:p=>{p.stopPropagation(),n(r.id)},className:"hidden group-hover:block shrink-0 p-0.5 text-[var(--text-muted)] hover:text-[var(--text-primary)]",title:"unpin",children:e.jsx(q,{className:"h-3 w-3"})}),e.jsx("button",{onClick:p=>{p.stopPropagation(),x(`/tasks/${r.id}`)},className:"hidden group-hover:block shrink-0 p-0.5 text-[var(--text-muted)] hover:text-[var(--accent)]",title:"open detail",children:e.jsx("span",{className:"text-[10px]",children:"→"})})]},r.id)})})]}),e.jsxs("div",{className:"flex flex-col md:hidden",children:[e.jsx("div",{className:"flex items-center gap-1 overflow-x-auto no-scrollbar border-b border-[var(--border)] bg-[var(--bg-card)] px-2",style:{height:44},children:s.length===0?e.jsx("div",{className:"flex items-center justify-center w-full",children:e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:"no active tasks"})}):s.map(r=>{const u=r.id===a;return e.jsxs("button",{onClick:()=>t(r.id),className:`flex shrink-0 items-center gap-1.5 px-3 border-b-2 transition-colors ${u?"border-[var(--accent)] text-[var(--text-primary)]":"border-transparent text-[var(--text-secondary)]"}`,style:{height:44},children:[e.jsx(W,{status:r.status,size:"sm"}),e.jsxs("span",{className:"text-[11px] whitespace-nowrap",children:["#",r.id]})]},r.id)})}),o]})]})}function we({task:s,takeoverState:a,onTakeover:t,onRelease:n}){const o=Q(s.status),x=a==="manual";return e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] bg-[var(--bg-card)] px-3",style:{height:36,minHeight:36},children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsx("span",{className:"text-[11px] text-[var(--text-muted)]",children:s.projectKey}),e.jsx("span",{className:"text-[11px]",style:{color:o},children:s.status.toLowerCase()}),s.currentStage&&e.jsxs("span",{className:"text-[11px] text-[var(--text-muted)]",children:["// ",s.currentStage]})]}),e.jsx("div",{className:"flex items-center gap-1",children:!O.includes(s.status)&&(x?e.jsxs("button",{onClick:n,className:"flex items-center gap-1.5 rounded-[4px] px-2.5 py-0.5 text-[11px] font-medium text-[var(--accent)]",style:{backgroundColor:"rgba(34,197,94,0.12)"},children:[e.jsx(me,{className:"h-3 w-3"}),e.jsx("span",{className:"hidden md:inline",children:"restore auto"})]}):e.jsxs("button",{onClick:t,disabled:a==="requesting",className:"flex items-center gap-1.5 rounded-[4px] px-2.5 py-0.5 text-[11px] font-medium text-[var(--warning)] disabled:opacity-50",style:{backgroundColor:"rgba(245,158,11,0.12)"},children:[e.jsx(oe,{className:"h-3 w-3"}),e.jsx("span",{className:"hidden md:inline",children:"take over"})]}))})]})}function Te({task:s,ptyStatus:a}){const t=a==="connected";return e.jsxs("div",{className:"flex items-center justify-between border-t border-[var(--border)] bg-[var(--bg-card)] px-3",style:{height:28,minHeight:28},children:[e.jsx("span",{className:"text-[10px] text-[var(--text-muted)]",children:s.currentStage?`stage: ${s.currentStage}`:`task #${s.id}`}),e.jsxs("span",{className:`flex items-center gap-1 text-[10px] ${t?"text-[var(--accent)]":"text-[var(--text-muted)]"}`,children:[t?e.jsx(pe,{className:"h-2.5 w-2.5"}):e.jsx(ve,{className:"h-2.5 w-2.5"}),t?"connected":a]})]})}function z({onboardingData:s}){const[a,t]=i.useState(!1),{t:n}=_();return s?a?e.jsxs("div",{className:"border-b border-[var(--accent)]/30",children:[e.jsxs("button",{onClick:()=>t(!1),className:"flex w-full items-center justify-between bg-[var(--bg-card)] px-3 py-1.5 transition-colors hover:bg-[var(--bg-input)]",children:[e.jsx("span",{className:"text-[11px] text-[var(--accent)]",children:n("onboarding.getting_started")}),e.jsx(he,{className:"h-3 w-3 text-[var(--text-muted)]"})]}),e.jsx("div",{className:"max-h-[300px] overflow-y-auto",children:e.jsx(J,{data:s})})]}):e.jsxs("button",{onClick:()=>t(!0),className:"flex w-full items-center justify-between border-b border-[var(--accent)]/30 bg-[var(--bg-card)] px-3 py-1.5 transition-colors hover:bg-[var(--bg-input)]",style:{height:36},children:[e.jsx("span",{className:"text-[11px] text-[var(--accent)]",children:n("onboarding.getting_started")}),e.jsx(xe,{className:"h-3 w-3 text-[var(--text-muted)]"})]}):null}function B({onboardingData:s}){const{t:a}=_();return e.jsx("div",{className:"flex flex-1 flex-col items-center justify-center p-6",children:s?e.jsx("div",{className:"w-full max-w-lg",children:e.jsx(J,{data:s})}):e.jsxs("div",{className:"text-center",children:[e.jsxs("div",{className:"mb-3 text-3xl text-[var(--border)]",children:[">","_"]}),e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:a("terminal_home.no_active_tasks")}),e.jsx("p",{className:"mt-1 text-xs text-[var(--text-muted)]",children:a("terminal_home.create_task_hint")})]})})}function $e(){const{t:s}=_(),{pinnedTaskIds:a,activeTaskId:t,taskMetas:n,stageConfirm:o,loading:x,setActiveTask:r,pinTask:u,unpinTask:p,loadActiveTasks:c,fetchStageConfirm:l,clearStageConfirm:f,updateTaskMeta:T}=be(),N=i.useRef(null),[b,S]=i.useState("disconnected"),[C,y]=i.useState("auto"),[j,h]=i.useState(""),g=$(d=>d.lastEvent),R=$(d=>d.status),m=t?n[t]??null:null,X=m?O.includes(m.status):!1,U=i.useRef(!1);i.useEffect(()=>{!U.current&&m&&(h(m.projectKey),U.current=!0)},[m]);const w=i.useMemo(()=>{const d=a.map(v=>n[v]).filter(Boolean);return j?d.filter(v=>v.projectKey===j):d},[a,n,j]);i.useEffect(()=>{w.length>0&&t&&!w.some(d=>d.id===t)&&r(w[0].id)},[w,t,r]);const E=je();re(m?`#${m.id} ${m.description}`:null),i.useEffect(()=>{c()},[c]),i.useEffect(()=>{t&&(m==null?void 0:m.status)===k.SUSPENDED?l(t):f()},[t,m==null?void 0:m.status,l,f]),i.useEffect(()=>{if(g){if(g.event==="task_status_changed"){const{taskId:d,status:v}=g;T(d,{status:v}),v===k.SUSPENDED&&d===t&&l(d),O.includes(v)&&d===t&&f()}g.event==="task_created"&&c()}},[g,t,l,f,T,c]),i.useEffect(()=>{if(R==="connected")return;const v=setInterval(()=>{document.visibilityState!=="hidden"&&c()},15e3);return()=>clearInterval(v)},[R,c]);const Z=i.useCallback(d=>{u(d),r(d),c()},[u,r,c]),ee=i.useCallback(()=>{f(),c()},[f,c]),te=i.useCallback(()=>{var d;(d=N.current)==null||d.requestTakeover()},[]),se=i.useCallback(()=>{var d;(d=N.current)==null||d.releaseTakeover()},[]);if(x&&a.length===0)return e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:s("common.loading")})});const ae=w.length>0;return e.jsxs("div",{className:"flex h-full flex-col overflow-hidden",children:[e.jsx(Ne,{projectKey:j,onProjectChange:h,onCreated:Z}),e.jsx("div",{className:"flex flex-1 overflow-hidden",children:ae?e.jsxs(e.Fragment,{children:[e.jsx(ye,{tasks:w,activeId:t,onSelect:r,onUnpin:p,children:e.jsx("div",{className:"md:hidden",children:e.jsx(z,{onboardingData:E})})}),e.jsx("div",{className:"flex flex-1 flex-col overflow-hidden",children:m?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"hidden md:block",children:e.jsx(z,{onboardingData:E})}),e.jsx(we,{task:m,takeoverState:C,onTakeover:te,onRelease:se}),o&&t&&e.jsx(ke,{taskId:t,confirm:o,onSubmitted:ee}),e.jsx("div",{className:"flex-1 min-h-[300px] overflow-hidden",children:e.jsx(le,{taskId:t,sessionId:m.currentSessionId??void 0,taskFinished:X,onStatusChange:S,onTakeoverChange:y,ref:N},t)}),e.jsx(Te,{task:m,ptyStatus:b})]}):e.jsx(B,{onboardingData:E})})]}):e.jsx(B,{onboardingData:E})})]})}export{$e as default};
|