@overlordai/server 1.0.114 → 1.0.115
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/database/migrations/005-task-name.sql +1 -0
- package/dist/adapters/adapter.interface.d.ts +4 -0
- package/dist/adapters/adapter.interface.d.ts.map +1 -1
- package/dist/adapters/adapter.interface.js.map +1 -1
- package/dist/adapters/help-text.js +5 -5
- package/dist/adapters/help-text.js.map +1 -1
- package/dist/adapters/lark/lark-card.builder.d.ts.map +1 -1
- package/dist/adapters/lark/lark-card.builder.js +10 -17
- package/dist/adapters/lark/lark-card.builder.js.map +1 -1
- package/dist/adapters/lark/lark-message.parser.js +3 -3
- package/dist/adapters/lark/lark-message.parser.js.map +1 -1
- package/dist/adapters/lark/lark.adapter.d.ts +6 -0
- package/dist/adapters/lark/lark.adapter.d.ts.map +1 -1
- package/dist/adapters/lark/lark.adapter.js +69 -1
- package/dist/adapters/lark/lark.adapter.js.map +1 -1
- package/dist/adapters/lark/lark.controller.d.ts.map +1 -1
- package/dist/adapters/lark/lark.controller.js +2 -1
- package/dist/adapters/lark/lark.controller.js.map +1 -1
- package/dist/adapters/slack/slack-block.builder.d.ts.map +1 -1
- package/dist/adapters/slack/slack-block.builder.js +7 -14
- package/dist/adapters/slack/slack-block.builder.js.map +1 -1
- package/dist/adapters/slack/slack-message.parser.js +3 -3
- package/dist/adapters/slack/slack-message.parser.js.map +1 -1
- package/dist/adapters/slack/slack.adapter.d.ts +1 -0
- package/dist/adapters/slack/slack.adapter.d.ts.map +1 -1
- package/dist/adapters/slack/slack.adapter.js +23 -0
- package/dist/adapters/slack/slack.adapter.js.map +1 -1
- package/dist/adapters/slack/slack.controller.d.ts.map +1 -1
- package/dist/adapters/slack/slack.controller.js +3 -2
- package/dist/adapters/slack/slack.controller.js.map +1 -1
- package/dist/common/config.d.ts +15 -0
- package/dist/common/config.d.ts.map +1 -1
- package/dist/common/config.js +27 -0
- package/dist/common/config.js.map +1 -1
- package/dist/common/status-display.d.ts +10 -0
- package/dist/common/status-display.d.ts.map +1 -0
- package/dist/common/status-display.js +35 -0
- package/dist/common/status-display.js.map +1 -0
- package/dist/common/string-utils.d.ts +3 -0
- package/dist/common/string-utils.d.ts.map +1 -1
- package/dist/common/string-utils.js +5 -0
- package/dist/common/string-utils.js.map +1 -1
- 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 +15 -0
- package/dist/database/repositories/task.repository.js.map +1 -1
- package/dist/dispatcher/dispatcher.module.d.ts.map +1 -1
- package/dist/dispatcher/dispatcher.module.js +4 -0
- package/dist/dispatcher/dispatcher.module.js.map +1 -1
- package/dist/dispatcher/dispatcher.service.d.ts +0 -1
- package/dist/dispatcher/dispatcher.service.d.ts.map +1 -1
- package/dist/dispatcher/dispatcher.service.js +21 -41
- package/dist/dispatcher/dispatcher.service.js.map +1 -1
- package/dist/dispatcher/scheduler.service.js +1 -1
- package/dist/dispatcher/scheduler.service.js.map +1 -1
- package/dist/dispatcher/stage-confirm-timeout.service.d.ts +15 -0
- package/dist/dispatcher/stage-confirm-timeout.service.d.ts.map +1 -0
- package/dist/dispatcher/stage-confirm-timeout.service.js +81 -0
- package/dist/dispatcher/stage-confirm-timeout.service.js.map +1 -0
- package/dist/dispatcher/task-creation.service.d.ts +3 -1
- package/dist/dispatcher/task-creation.service.d.ts.map +1 -1
- package/dist/dispatcher/task-creation.service.js +14 -3
- package/dist/dispatcher/task-creation.service.js.map +1 -1
- package/dist/dispatcher/task-lifecycle.service.d.ts +2 -0
- package/dist/dispatcher/task-lifecycle.service.d.ts.map +1 -1
- package/dist/dispatcher/task-lifecycle.service.js +62 -0
- package/dist/dispatcher/task-lifecycle.service.js.map +1 -1
- package/dist/dispatcher/task-name.service.d.ts +14 -0
- package/dist/dispatcher/task-name.service.d.ts.map +1 -0
- package/dist/dispatcher/task-name.service.js +80 -0
- package/dist/dispatcher/task-name.service.js.map +1 -0
- package/dist/notifier/notification-consumer.d.ts +16 -1
- package/dist/notifier/notification-consumer.d.ts.map +1 -1
- package/dist/notifier/notification-consumer.js +150 -13
- package/dist/notifier/notification-consumer.js.map +1 -1
- package/dist/notifier/notifier.service.d.ts +5 -1
- package/dist/notifier/notifier.service.d.ts.map +1 -1
- package/dist/notifier/notifier.service.js +6 -3
- package/dist/notifier/notifier.service.js.map +1 -1
- package/dist/notifier/template.service.d.ts +13 -0
- package/dist/notifier/template.service.d.ts.map +1 -1
- package/dist/notifier/template.service.js +72 -31
- package/dist/notifier/template.service.js.map +1 -1
- package/dist/web/admin/admin-developer.controller.d.ts +2 -2
- package/dist/web/admin/admin-settings.controller.d.ts.map +1 -1
- package/dist/web/admin/admin-settings.controller.js +0 -1
- package/dist/web/admin/admin-settings.controller.js.map +1 -1
- package/dist/web/dashboard.service.d.ts.map +1 -1
- package/dist/web/dashboard.service.js +3 -3
- package/dist/web/dashboard.service.js.map +1 -1
- package/dist/web/frame-handlers/index.d.ts +2 -0
- package/dist/web/frame-handlers/index.d.ts.map +1 -1
- package/dist/web/frame-handlers/index.js +5 -1
- package/dist/web/frame-handlers/index.js.map +1 -1
- package/dist/web/frame-handlers/stage-choice.handler.d.ts +15 -0
- package/dist/web/frame-handlers/stage-choice.handler.d.ts.map +1 -0
- package/dist/web/frame-handlers/stage-choice.handler.js +39 -0
- package/dist/web/frame-handlers/stage-choice.handler.js.map +1 -0
- package/dist/web/frame-handlers/stage-confirm.handler.d.ts.map +1 -1
- package/dist/web/frame-handlers/stage-confirm.handler.js +1 -0
- package/dist/web/frame-handlers/stage-confirm.handler.js.map +1 -1
- package/dist/web/frame-handlers/stage-input.handler.d.ts +15 -0
- package/dist/web/frame-handlers/stage-input.handler.d.ts.map +1 -0
- package/dist/web/frame-handlers/stage-input.handler.js +39 -0
- package/dist/web/frame-handlers/stage-input.handler.js.map +1 -0
- package/dist/web/project.controller.d.ts +2 -2
- package/dist/web/search.service.d.ts +1 -0
- package/dist/web/search.service.d.ts.map +1 -1
- package/dist/web/search.service.js +6 -6
- package/dist/web/search.service.js.map +1 -1
- package/dist/web/task.controller.d.ts +13 -0
- package/dist/web/task.controller.d.ts.map +1 -1
- package/dist/web/task.controller.js +50 -0
- package/dist/web/task.controller.js.map +1 -1
- package/dist/web/worker-channel.gateway.d.ts.map +1 -1
- package/dist/web/worker-channel.gateway.js +2 -0
- package/dist/web/worker-channel.gateway.js.map +1 -1
- package/package.json +4 -4
- package/public/assets/{AccessTokensPage-B2zkZtaB.js → AccessTokensPage-Yp8IfrfF.js} +1 -1
- package/public/assets/{AdminPage-B-n-9yUY.js → AdminPage-CS2HrhOC.js} +1 -1
- package/public/assets/ApiReferencePage-DTinm3RG.js +1 -0
- package/public/assets/{ArchitecturePage-CDgB6NL0.js → ArchitecturePage-BpA3PUuf.js} +1 -1
- package/public/assets/{AuditLogPage-CmxGpu8q.js → AuditLogPage-B_Qopq3a.js} +2 -2
- package/public/assets/{BindPlatformPage-D-7wxMjF.js → BindPlatformPage-BkV-IfaR.js} +1 -1
- package/public/assets/BotIntegrationPage-DLuRDIam.js +1 -0
- package/public/assets/{BotManage-DSe8d-gZ.js → BotManage-XKHjrA-7.js} +1 -1
- package/public/assets/BotSetupPage-Cn40afR9.js +33 -0
- package/public/assets/{ChangelogPage-BUAm5LN6.js → ChangelogPage-ChiapPDH.js} +1 -1
- package/public/assets/{CliReferencePage-B6-2m7YU.js → CliReferencePage-3eHb6kRq.js} +1 -1
- package/public/assets/{DeploymentPage-cW2JDGd0.js → DeploymentPage-CvT9Pcow.js} +1 -1
- package/public/assets/{DevWorkflowPage-BbNK1Bmy.js → DevWorkflowPage-BLEIbUu1.js} +1 -1
- package/public/assets/{DeveloperManage-BVkSw-WE.js → DeveloperManage-DAJBvmdv.js} +1 -1
- package/public/assets/{DeveloperSetupPage-Cf8ehfWm.js → DeveloperSetupPage-BhE83ouS.js} +1 -1
- package/public/assets/{DocsIndexPage-BEMGBIkx.js → DocsIndexPage-BE_tyO2Q.js} +1 -1
- package/public/assets/{DocsLayout-BLcuuadd.js → DocsLayout-D1S4KUeB.js} +1 -1
- package/public/assets/{DocsPrimitives-BEIQH4P7.js → DocsPrimitives-BQXfZXxZ.js} +1 -1
- package/public/assets/{EditProjectPage-RsYg77Bf.js → EditProjectPage-BjgRi6kG.js} +2 -2
- package/public/assets/{EmptyState-D8UwaoPs.js → EmptyState-Dlt6FhVC.js} +1 -1
- package/public/assets/EnvVariablesPage-CvcP4GZM.js +24 -0
- package/public/assets/HomePage-uEE3mJNM.js +1 -0
- package/public/assets/{InfoRow-BbQYGWPd.js → InfoRow-Db2nisGq.js} +1 -1
- package/public/assets/{InstallationPage-blIErVXZ.js → InstallationPage-kt-du5Rr.js} +2 -2
- package/public/assets/{LandingPage-CL2eVc3w.js → LandingPage-2irRMduO.js} +1 -1
- package/public/assets/{LocalDevelopmentPage-CNfZtynN.js → LocalDevelopmentPage-7JvSDwD1.js} +1 -1
- package/public/assets/{LoginPage-C_jpU4-N.js → LoginPage-DDk_X1sv.js} +1 -1
- package/public/assets/{MetricBar-CCL5kOaE.js → MetricBar-BhjbfPOa.js} +1 -1
- package/public/assets/{NotFoundPage-DiQ3T_pE.js → NotFoundPage-ByRykDvA.js} +1 -1
- package/public/assets/{OnboardingGuide-xVUtEvVm.js → OnboardingGuide-CinJRqx5.js} +1 -1
- package/public/assets/{PermissionsPage-CE5Yc52w.js → PermissionsPage-C5RXlztC.js} +1 -1
- package/public/assets/PipelineConfigPage-BSkSRngC.js +22 -0
- package/public/assets/{PipelineEditorPage-BR9ozDOr.js → PipelineEditorPage-BoZ_MVNO.js} +2 -2
- package/public/assets/{ProfilePage-kUKBviJg.js → ProfilePage-CePUfQDH.js} +1 -1
- package/public/assets/ProjectDetailPage-_DswTp8-.js +7 -0
- package/public/assets/{ProjectListPage-DZoCY4RY.js → ProjectListPage-fVbDom8_.js} +1 -1
- package/public/assets/{PtyTerminal-DY7uY9Y-.js → PtyTerminal-Dpk4L7LN.js} +1 -1
- package/public/assets/{QuickAuth-DbURb8Mn.js → QuickAuth-BAmZCI4O.js} +1 -1
- package/public/assets/{RemoveMemberConfirmDialog-WvwPPSjT.js → RemoveMemberConfirmDialog-DYi6BAz2.js} +2 -2
- package/public/assets/{Select-B_UE_NDL.js → Select-DnIOEVCT.js} +1 -1
- package/public/assets/SettingsPage-CwV-t8vo.js +6 -0
- package/public/assets/{Skeleton-CqLLWdXS.js → Skeleton--qglldqs.js} +1 -1
- package/public/assets/{SkillPage-D5a41yA5.js → SkillPage-CsXXruJZ.js} +1 -1
- package/public/assets/TaskDetailPage-gOUWMfkb.js +21 -0
- package/public/assets/TaskListPage-vF17zpt2.js +1 -0
- package/public/assets/{TaskStatusBadge-DzeMf5Ey.js → TaskStatusBadge-CCh-nmLz.js} +1 -1
- package/public/assets/TerminalHomePage-DXFg88Q9.js +11 -0
- package/public/assets/{TokenManage-BCVRHkhz.js → TokenManage-P98_TYIe.js} +1 -1
- package/public/assets/{Tooltip-BWRiD768.js → Tooltip-DGoJgM_K.js} +1 -1
- package/public/assets/{TotpSetupPage-D4T0gS9_.js → TotpSetupPage-D5GUedMd.js} +1 -1
- package/public/assets/WorkerDetailPage-CkI1feoH.js +1 -0
- package/public/assets/{WorkerListPage-4qQGHwbV.js → WorkerListPage-C90v6nLx.js} +2 -2
- package/public/assets/{WorkerOperationsPage-DKPUYRDJ.js → WorkerOperationsPage-OxH0Ky0Y.js} +1 -1
- package/public/assets/{WorkerSetupGuidePage-B4B-DkyO.js → WorkerSetupGuidePage-DGlgYS82.js} +1 -1
- package/public/assets/{WorkerSetupPage-frqVW4Ll.js → WorkerSetupPage-DJ359PwT.js} +1 -1
- package/public/assets/{arrow-left-DEORM5c1.js → arrow-left-BPgCxdEG.js} +1 -1
- package/public/assets/{arrow-right-B0qrrCV_.js → arrow-right-Z-hFp5rr.js} +1 -1
- package/public/assets/{bot-B_Wtzq9W.js → bot-B7Bl9J0r.js} +1 -1
- package/public/assets/{chevron-right-CURI3LO_.js → chevron-right-D_hyYdgn.js} +1 -1
- package/public/assets/{copy-4UTzTyXv.js → copy-SJf3OFPQ.js} +1 -1
- package/public/assets/{download-Dq5jLFci.js → download-D7rCJJks.js} +1 -1
- package/public/assets/{external-link-Cj283ZgT.js → external-link-BrXLoqUZ.js} +1 -1
- package/public/assets/{index-C5MJg1oC.js → index-DPCzKHL-.js} +42 -42
- package/public/assets/{key-BKBK0Uc2.js → key-CCF8A0TZ.js} +1 -1
- package/public/assets/{loader-circle-B71q4Dz7.js → loader-circle-BO0HYeDT.js} +1 -1
- package/public/assets/{pencil-DG3Q-41a.js → pencil-BhxWbYup.js} +1 -1
- package/public/assets/{plus-CQjC8fgx.js → plus-BnJSQWb4.js} +1 -1
- package/public/assets/{rotate-ccw-CQh0kfDP.js → rotate-ccw-CioNXT1z.js} +1 -1
- package/public/assets/{scroll-text-DF3DMVZk.js → scroll-text-DpFjChL8.js} +1 -1
- package/public/assets/{settings-C_K0CJNU.js → settings-Bklbsj12.js} +1 -1
- package/public/assets/{status-colors-BnNRsWp0.js → status-colors-BkxgT8vX.js} +1 -1
- package/public/assets/{task-constants-D_2_U6qL.js → task-constants-Ctac6aky.js} +1 -1
- package/public/assets/task-display-J_FNKBLK.js +1 -0
- package/public/assets/{trash-2-DsQUbmfY.js → trash-2-_3SD7t1j.js} +1 -1
- package/public/assets/{useFetch-C8LjfJUm.js → useFetch-D8w38eG7.js} +1 -1
- package/public/assets/{users-BWaNs7Vz.js → users-BBjD2TJy.js} +1 -1
- package/public/assets/{wifi-0ZLwtMKj.js → wifi-KyET3jRD.js} +1 -1
- package/public/assets/{workflow-B0yaOIwg.js → workflow-EN1ACj2x.js} +1 -1
- package/public/index.html +1 -1
- package/public/sw.js +1 -1
- package/dist/common/command-parser.d.ts +0 -29
- package/dist/common/command-parser.d.ts.map +0 -1
- package/dist/common/command-parser.js +0 -133
- package/dist/common/command-parser.js.map +0 -1
- package/dist/common/machine-utils.d.ts +0 -32
- package/dist/common/machine-utils.d.ts.map +0 -1
- package/dist/common/machine-utils.js +0 -12
- package/dist/common/machine-utils.js.map +0 -1
- package/dist/common/worker-utils.d.ts +0 -31
- package/dist/common/worker-utils.d.ts.map +0 -1
- package/dist/common/worker-utils.js +0 -12
- package/dist/common/worker-utils.js.map +0 -1
- package/dist/database/repositories/machine.repository.d.ts +0 -46
- package/dist/database/repositories/machine.repository.d.ts.map +0 -1
- package/dist/database/repositories/machine.repository.js +0 -200
- package/dist/database/repositories/machine.repository.js.map +0 -1
- package/dist/dispatcher/machine-selector.d.ts +0 -18
- package/dist/dispatcher/machine-selector.d.ts.map +0 -1
- package/dist/dispatcher/machine-selector.js +0 -148
- package/dist/dispatcher/machine-selector.js.map +0 -1
- package/dist/web/admin/admin-machine.controller.d.ts +0 -72
- package/dist/web/admin/admin-machine.controller.d.ts.map +0 -1
- package/dist/web/admin/admin-machine.controller.js +0 -176
- package/dist/web/admin/admin-machine.controller.js.map +0 -1
- package/dist/web/machine.controller.d.ts +0 -115
- package/dist/web/machine.controller.d.ts.map +0 -1
- package/dist/web/machine.controller.js +0 -125
- package/dist/web/machine.controller.js.map +0 -1
- package/public/assets/ApiReferencePage-Dcik4fBN.js +0 -1
- package/public/assets/BotIntegrationPage-DoD5KbmU.js +0 -1
- package/public/assets/BotSetupPage-BkNF3ug4.js +0 -33
- package/public/assets/EnvVariablesPage-krKQsNzw.js +0 -1
- package/public/assets/HomePage-vhKQtyLw.js +0 -1
- package/public/assets/PipelineConfigPage-BG_LWoNZ.js +0 -28
- package/public/assets/ProjectDetailPage-VE0081wk.js +0 -7
- package/public/assets/SettingsPage-DpJ00PdY.js +0 -6
- package/public/assets/TaskDetailPage-Dt3Hj-nd.js +0 -21
- package/public/assets/TaskListPage-CbmW-VAl.js +0 -1
- package/public/assets/TerminalHomePage-D7aNN02N.js +0 -11
- package/public/assets/WorkerDetailPage-D9ZTWwot.js +0 -1
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import{c as se,a as X,r,h as N,j as e,M as We,w as I,H as qe,t as me,p as Ae,x as Xe,f as He,o as Ve,k as Ee,L as Je,X as ie,n as q,y as Te,s as Qe,G as Ye}from"./index-C5MJg1oC.js";import{u as Ze,T as et}from"./task-constants-D_2_U6qL.js";import{C as tt,H as $e,P as De}from"./PtyTerminal-DY7uY9Y-.js";import{a as st,f as ee}from"./date-BdNtiQTP.js";import{S as at}from"./Select-B_UE_NDL.js";import{a as rt}from"./status-colors-BnNRsWp0.js";import{T as nt}from"./Tooltip-BWRiD768.js";import{A as lt}from"./arrow-left-DEORM5c1.js";import{R as oe}from"./rotate-ccw-CQh0kfDP.js";import{E as ct}from"./external-link-Cj283ZgT.js";import{L as xe}from"./loader-circle-B71q4Dz7.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const Ie=se("Circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/**
|
|
7
|
-
* @license lucide-react v0.469.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const it=se("Maximize2",[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);/**
|
|
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 ot=se("Minimize2",[["polyline",{points:"4 14 10 14 10 20",key:"11kfnr"}],["polyline",{points:"20 10 14 10 14 4",key:"rlmsce"}],["line",{x1:"14",x2:"21",y1:"10",y2:"3",key:"o5lafz"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);/**
|
|
17
|
-
* @license lucide-react v0.469.0 - ISC
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the ISC license.
|
|
20
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const xt=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:i,taskId:a,stageName:n,timeoutSeconds:t,onSubmitted:x}){const{t:o}=X(),[g,u]=r.useState(t),[C,E]=r.useState(!1);r.useEffect(()=>{if(!l)return;u(t);const d=setInterval(()=>{u(y=>y<=1?(clearInterval(d),0):y-1)},1e3);return()=>clearInterval(d)},[l,t]),r.useEffect(()=>{g===0&&l&&i()},[g,l,i]);const T=r.useCallback(async d=>{E(!0);try{await N.post(`web/tasks/${a}/confirm-stage`,{json:{stageName:n,approved:d}}),x==null||x(),i()}catch{}finally{E(!1)}},[a,n,i,x]);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(We,{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(tt,{className:"h-3.5 w-3.5"}),st(g)]})]}),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:o("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:C,onClick:()=>T(!1),children:o("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:C,onClick:()=>T(!0),children:o(C?"tasks.stage_submitting":"tasks.confirm_and_proceed")})]})]})]}):null}function dt(l,i){const a=new Date(l).getTime()-Date.now();if(a<=0)return i("tasks.tunnel_expired");const n=Math.floor(a/36e5),t=Math.floor(a%36e5/6e4);return n>0?i("tasks.tunnel_expires_hm",{h:n,m:t}):i("tasks.tunnel_expires_m",{m:t})}function Re(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 Pe(l,i){switch(l){case"IDLE":case"CLOSED":return i("tasks.tunnel_idle");case"STARTING":return i("tasks.tunnel_starting");case"CONNECTED":return i("tasks.tunnel_connected");case"EXPIRED":return i("tasks.tunnel_expired");case"CLOSING":return i("tasks.tunnel_closing");default:return String(l).toLowerCase()}}function mt({taskId:l,taskFinished:i,compact:a}){const{t:n}=X(),[t,x]=r.useState(I.IDLE),[o,g]=r.useState(null),[u,C]=r.useState(null),[E,T]=r.useState(""),[d,y]=r.useState(!1),[ae,L]=r.useState(!1),R=r.useRef(null),$=r.useCallback(async()=>{try{const v=await N.get(`web/workspace-tunnel/${l}/status`).json();x(v.status),g(v.tunnelUrl??null),C(v.expiresAt??null),(v.status==="EXPIRED"||v.status==="IDLE"||v.status==="CLOSED")&&S()}catch{}},[l]);function re(){S(),R.current=setInterval($,5e3)}function S(){R.current&&(clearInterval(R.current),R.current=null)}r.useEffect(()=>{i&&(t===I.STARTING||t===I.CONNECTED)&&(x(I.IDLE),g(null),S())},[i,t]),r.useEffect(()=>{if(t!=="CONNECTED"||!u)return;const v=()=>{const k=dt(u,n);T(k),k===n("tasks.tunnel_expired")&&(x(I.EXPIRED),g(null),S())};v();const f=setInterval(v,3e4);return()=>clearInterval(f)},[t,u]),r.useEffect(()=>()=>S(),[]),r.useEffect(()=>{i||$()},[$,i]);async function U(){y(!0);try{await N.post(`web/workspace-tunnel/${l}/start`),x(I.STARTING),re()}catch(v){let f=n("tasks.tunnel_start_failed");try{if(v instanceof qe){const k=await v.response.json();k!=null&&k.error&&(f=k.error,/code.*not found|ENOENT.*code|spawn code/i.test(f)&&(f+=". "+n("tasks.tunnel_install_code_hint")))}}catch{}me.error(f)}finally{y(!1)}}async function G(){y(!0);try{await N.post(`web/workspace-tunnel/${l}/stop`),x(I.IDLE),g(null),S()}catch{}finally{y(!1)}}async function H(){o&&(await navigator.clipboard.writeText(o),L(!0),setTimeout(()=>L(!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:Re(t)},children:Pe(t,n)}),(t==="IDLE"||t==="CLOSED"||t==="EXPIRED")&&e.jsx("button",{onClick:U,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"&&o&&e.jsx("a",{href:o.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:Re(t)},children:["● ",Pe(t,n)]})]}),t==="CONNECTED"&&u&&e.jsxs("p",{className:"mb-2 text-xs text-[var(--text-muted)]",children:["// ",E]}),t==="CONNECTED"&&o&&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:o}),e.jsxs("button",{onClick:H,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:U,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:G,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"&&o&&e.jsxs(e.Fragment,{children:[e.jsx("a",{href:o.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:o.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:G,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:U,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 pt({isOpen:l,onClose:i,onConfirm:a,taskId:n,isLoading:t}){const{t:x}=X();return e.jsx(Ae,{isOpen:l,onClose:i,onConfirm:a,title:x("tasks.cancel_task_title"),message:x("tasks.cancel_task_message",{id:String(n)}),confirmLabel:x("tasks.cancel_task_confirm_label"),confirmVariant:"danger",isLoading:t})}function ut({isOpen:l,onClose:i,onConfirm:a,taskId:n,mrUrl:t,isLoading:x,reuseWorkspace:o,onReuseWorkspaceChange:g}){const{t:u}=X(),C=t?u("tasks.retry_message_with_mr",{id:String(n),url:t}):u("tasks.retry_message_without_mr",{id:String(n)});return e.jsx(Ae,{isOpen:l,onClose:i,onConfirm:a,title:u("tasks.retry_title"),message:C,confirmLabel:u("tasks.retry_confirm_label"),confirmVariant:"accent",isLoading:x,children:e.jsxs("label",{className:"flex items-center gap-2 mt-3 text-[var(--text-muted)] text-xs cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:o,onChange:E=>g(E.target.checked),className:"w-3.5 h-3.5 cursor-pointer accent-[var(--accent)]"}),u("tasks.reuse_workspace_label")]})})}function ht(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 i=rt(l);return e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-[4px] px-2 py-0.5 text-xs",style:{color:i},children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-[3px]",style:{backgroundColor:i}}),l.toLowerCase()]})}function ft(l){let a=["implement","test","verify","review","submit"];if(l.configSnapshot)try{const t=JSON.parse(l.configSnapshot);if(t&&typeof t=="object"){const x=typeof t.pipeline=="string"?JSON.parse(t.pipeline):t.pipeline;x&&typeof x=="object"&&Array.isArray(x.stages)&&x.stages.length>0&&x.stages.every(o=>o&&typeof o=="object"&&typeof o.name=="string")&&(a=x.stages.map(o=>o.name))}}catch{}const n=l.currentStage?a.indexOf(l.currentStage):-1;return a.map((t,x)=>{let o="pending";return l.status===q.COMPLETED?o="completed":l.status===q.FAILED&&x<=n?o=x===n?"failed":"completed":n>=0&&(x<n?o="completed":x===n&&(o="running")),{name:t,status:o}})}function te(l,i){if(!l||!i)return null;const a=l.repoUrl.replace(/\.git$/,"").replace(/\/+$/,"");return l.gitPlatform===Ye.GITLAB?`${a}/-/tree/${i}`:`${a}/tree/${i}`}function Et(){var Ce,Se;const{id:l}=Xe(),i=He(),{t:a}=X(),n=Ze(s=>s.cancelTask),[t,x]=r.useState(null),[o,g]=r.useState(null),[u,C]=r.useState([]),[E,T]=r.useState(!0),[d,y]=r.useState(null),[ae,L]=r.useState(!1),[R,$]=r.useState(!1),[re,S]=r.useState(!1),[U,G]=r.useState(!1),[H,v]=r.useState(!1),[f,k]=r.useState("terminal"),[pe,Oe]=r.useState([]),[V,Fe]=r.useState(0),[K,z]=r.useState(0),[B,ue]=r.useState(""),[J,Me]=r.useState(""),[Ue,he]=r.useState(!1),[Ge,fe]=r.useState(!1),[P,ve]=r.useState(null),[w,be]=r.useState("disconnected"),[W,ge]=r.useState("auto"),A=r.useRef(null),je=r.useRef(null),p=Number(l),b=t?et.includes(t.status):!1;Ve(t?`#${t.id} ${t.description}`:null);const _=r.useCallback(async()=>{try{const s=await N.get(`web/tasks/${p}`).json();x(s)}catch{}},[p]),Q=r.useCallback(async()=>{try{const s=await N.get(`web/tasks/${p}/logs`).json();C(s.lines)}catch{}},[p]),O=r.useCallback(async()=>{try{const s=await N.get(`web/tasks/${p}/pending-confirm`).json();y(s.confirm)}catch{y(null)}},[p]),Ne=r.useCallback(async()=>{he(!0);try{const s=new URLSearchParams;s.set("limit","50"),s.set("offset",String(K*50)),B&&s.set("type",B),J&&s.set("search",J);const c=await N.get(`web/tasks/${p}/events?${s}`).json();Oe(c.events),Fe(c.total)}catch{}finally{he(!1)}},[p,K,B,J]);r.useEffect(()=>{f==="logs"&&Ne()},[f,Ne]),r.useEffect(()=>{f==="pipeline"&&!b&&N.get(`web/workspaces/${p}`).json().then(ve).catch(()=>ve(null))},[f,p,b]);const F=Ee(s=>s.lastEvent),ye=Ee(s=>s.eventSeq);r.useEffect(()=>{T(!0),Promise.all([_(),Q(),O()]).finally(()=>T(!1))},[_,Q,O]),r.useEffect(()=>{t!=null&&t.projectKey&&N.get(`web/projects/${t.projectKey}`).json().then(g).catch(()=>g(null))},[t==null?void 0:t.projectKey]),r.useEffect(()=>{!F||ye===0||(F.event==="task_status_changed"&&F.taskId===p||F.event==="task_created"&&F.taskId===p)&&(_(),O())},[ye,F,p,_,O]),r.useEffect(()=>{if(b)return;const c=setInterval(()=>{document.visibilityState!=="hidden"&&Promise.all([_(),Q(),O()])},15e3);return()=>clearInterval(c)},[b,_,Q,O]);const ke=r.useCallback(()=>y(null),[]),Y=r.useCallback(()=>{y(null),_()},[_]);async function Ke(){S(!0);try{await n(p),L(!1),await _()}finally{S(!1)}}async function ze(){G(!0);try{await N.post(`web/tasks/${p}/retry`,{json:{reuseWorkspace:H}}),$(!1),v(!1),await _()}finally{G(!1)}}const j=r.useMemo(()=>t?ft(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(E)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:()=>i("/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 we=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:()=>i("/tasks"),className:"shrink-0 text-[var(--text-muted)]",children:e.jsx(lt,{className:"h-4 w-4"})}),e.jsxs("span",{className:"line-clamp-2 text-sm font-medium text-[var(--text-primary)]",title:`#${t.id} ${t.description}`,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(Je,{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(o,t.branch)?e.jsx("a",{href:te(o,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: ",((Ce=t.mrUrl.match(/!?\d+$/))==null?void 0:Ce[0])??"view"]})]})]}),_e=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:[!b&&e.jsxs("button",{onClick:()=>L(!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===q.FAILED&&e.jsxs("button",{onClick:()=>$(!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(oe,{className:"h-3 w-3"}),a("tasks.retry_task")]}),t.workerId&&!b&&e.jsxs("button",{onClick:()=>{k("pipeline"),setTimeout(()=>{var s,c;(c=(s=je.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(ct,{className:"h-3 w-3"}),a("tasks.cursor_tunnel")]})]}),Be=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",h=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(Te,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),m&&e.jsx(xe,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),h&&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":h?"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")}),u.length>0?e.jsx("div",{className:"flex flex-col gap-1.5",children:u.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(pt,{isOpen:ae,onClose:()=>L(!1),onConfirm:Ke,taskId:p,isLoading:re}),e.jsx(ut,{isOpen:R,onClose:()=>{$(!1),v(!1)},onConfirm:ze,taskId:p,mrUrl:t.mrUrl??void 0,isLoading:U,reuseWorkspace:H,onReuseWorkspaceChange:v})]});return Ge&&f==="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] ${w==="connected"?"text-[var(--accent)]":w==="connecting"?"text-[var(--warning)]":"text-[var(--text-muted)]"}`,children:[e.jsx("span",{className:`h-1.5 w-1.5 rounded-full ${w==="connected"?"bg-[var(--accent)]":w==="connecting"?"bg-[var(--warning)]":"bg-[#525252]"}`}),a(`tasks.${w}`)]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[!b&&W==="auto"&&e.jsxs("button",{onClick:()=>{var s;return(s=A.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($e,{className:"h-3 w-3"}),a("tasks.take_over")]}),!b&&W==="manual"&&e.jsxs("button",{onClick:()=>{var s;return(s=A.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(oe,{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:()=>fe(!1),className:"flex items-center rounded-[4px] bg-[var(--bg-card)] px-2.5 py-1 text-[var(--text-muted)]",children:e.jsx(ot,{className:"h-3 w-3"})})]})]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-hidden",children:e.jsx(De,{ref:A,taskId:p,sessionId:t.currentSessionId??void 0,taskFinished:b,onStatusChange:be,onTakeoverChange:ge})}),_e,ce]}):t.status===q.SUSPENDED?e.jsxs("div",{className:"flex h-full flex-col font-mono lowercase",children:[we,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)] truncate max-w-[60%]",children:e.jsx(nt,{content:t.description,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",h=s.status==="completed",D=s.status==="running"&&t.status===q.SUSPENDED,M=m?"var(--destructive)":h?"var(--accent)":D?"var(--warning)":"#525252",Z=m?"rgba(239,68,68,0.12)":h?"rgba(34,197,94,0.12)":D?"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:M,backgroundColor:Z,fontWeight:D?700:400,border:D?`1px solid ${M}`:void 0},children:D?"confirm":`${s.name}${h?" ✓":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:[u.slice(-10).map((s,c)=>e.jsx("p",{className:"text-[11px] leading-relaxed text-[var(--text-secondary)]",children:s},c)),u.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(--info)":s.status==="failed"?"var(--destructive)":s.status==="running"?"var(--warning)":"#525252",m=s.status==="failed"?"var(--destructive)":s.status==="running"?"var(--warning)":"#a3a3a3",h=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," ",h]})]},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:ke,taskId:p,stageName:d.stageName,timeoutSeconds:Math.ceil(d.timeout/1e3),onSubmitted:Y}),ce]}):e.jsxs("div",{className:"flex h-full flex-col overflow-hidden font-mono lowercase",children:[we,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(o,t.branch)?e.jsx("a",{href:te(o,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:ke,taskId:p,stageName:d.stageName,timeoutSeconds:Math.ceil(d.timeout/1e3),onSubmitted:Y}),e.jsxs("div",{className:"flex min-h-0 flex-1 overflow-hidden",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",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:()=>k(s),className:`shrink-0 whitespace-nowrap px-4 py-2.5 text-xs transition-colors ${f===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))}),f==="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] ${w==="connected"?"text-[var(--accent)]":w==="connecting"?"text-[var(--warning)]":"text-[var(--text-muted)]"}`,children:[e.jsx("span",{className:`h-1.5 w-1.5 rounded-full ${w==="connected"?"bg-[var(--accent)]":w==="connecting"?"bg-[var(--warning)]":"bg-[#525252]"}`}),a(`tasks.${w}`)]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[!b&&W==="auto"&&e.jsxs("button",{onClick:()=>{var s;return(s=A.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($e,{className:"h-3 w-3"}),a("tasks.take_over")]}),!b&&W==="manual"&&e.jsxs("button",{onClick:()=>{var s;return(s=A.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(oe,{className:"h-3 w-3"}),a("tasks.restore_auto")]}),!b&&W==="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(xe,{className:"h-3 w-3 animate-spin"}),a("tasks.requesting_takeover")]}),!b&&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(xt,{className:"h-3 w-3"}),a("tasks.skip_stage")]}),e.jsx("button",{onClick:()=>fe(!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(it,{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 overflow-x-auto no-scrollbar pr-4",style:{borderRadius:0},children:e.jsx("div",{className:"flex items-center gap-1 py-0.5",children:j.map((s,c)=>{const m=s.status==="completed",h=s.status==="running",M=s.status==="failed"?"var(--destructive)":m||h?"var(--accent)":"#525252";return e.jsxs("div",{className:"flex items-center",children:[e.jsxs("span",{className:"shrink-0 text-[11px] leading-normal whitespace-nowrap",style:{color:M,fontWeight:h?600:400},children:[s.name,m?" ✓":h?" ...":""]}),c<j.length-1&&e.jsx("div",{className:"mx-1.5 h-px w-4 shrink-0",style:{backgroundColor:M}})]},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 overflow-hidden",children:e.jsx(De,{ref:A,taskId:p,sessionId:t.currentSessionId??void 0,taskFinished:b,onStatusChange:be,onTakeoverChange:ge})}),_e]}),f==="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:"mb-4 md:mb-5 overflow-x-auto no-scrollbar",style:{borderRadius:0},children:e.jsx("div",{className:"flex items-center py-5",children:j.map((s,c)=>{const m=s.status==="completed",h=s.status==="running",Z=s.status==="failed"?"var(--destructive)":m||h?"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:"✓"}),h&&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] leading-normal 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:()=>k("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",h=s.status==="failed";return e.jsxs("div",{className:`flex items-center gap-2 rounded-[4px] px-2 py-2 ${m?"bg-[var(--bg-input)]":""}`,children:[c&&e.jsx(Te,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),m&&e.jsx(xe,{className:"h-3.5 w-3.5 shrink-0 text-[var(--accent)]"}),h&&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 leading-normal",style:{color:c?"var(--accent)":m?"var(--text-primary)":h?"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")}),u.length>0?e.jsx("div",{className:"flex flex-col gap-1.5",children:u.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")})]})]})]}),f==="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:()=>{ue(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(at,{value:B,onChange:s=>{ue(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(Qe,{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=>{Me(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:[pe.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 ${ht(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)),pe.length===0&&!Ue&&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:()=>z(c),className:`rounded-[4px] px-2 py-1 text-xs ${K===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:()=>z(K+1),disabled:K>=Math.ceil(V/50)-1,className:"rounded-[4px] px-2 py-1 text-xs text-[var(--text-muted)] disabled:opacity-30",children:">"})]})]})]}),f==="terminal"&&Be,f==="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??(P==null?void 0:P.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:(P==null?void 0:P.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:((Se=t.mrUrl.match(/!?\d+$/))==null?void 0:Se[0])??"view"})]})]})]}),e.jsx("div",{className:"h-px bg-[var(--border)]"}),e.jsxs("div",{ref:je,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(mt,{taskId:p,taskFinished:b,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==="running"?"var(--accent)":s.status==="completed"?"var(--info)":s.status==="failed"?"var(--destructive)":"#525252",h=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:["— ",h]})]},s.name)})})]})]})]}),ce]})}export{Et as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{R as Y,f as $,a as F,j as e,l as V,u as X,i as Z,r as o,h as R,X as ee,k as te,q as se,H as re,t as J,n as E,s as ae,v as H}from"./index-C5MJg1oC.js";import{a as oe,A as ne,u as le}from"./task-constants-D_2_U6qL.js";import{T as G}from"./TaskStatusBadge-DzeMf5Ey.js";import{f as Q}from"./date-BdNtiQTP.js";import{T as ie}from"./Tooltip-BWRiD768.js";import{S as M}from"./Select-B_UE_NDL.js";import{C as ce}from"./copy-4UTzTyXv.js";import{E as U}from"./EmptyState-D8UwaoPs.js";import{T as W}from"./Skeleton-CqLLWdXS.js";import{P as de}from"./plus-CQjC8fgx.js";import"./status-colors-BnNRsWp0.js";const xe=Y.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:e.jsx(ie,{content:t.description,children:V(t.description,50)})}),e.jsx("td",{className:"py-3 pr-4",children:e.jsx(G,{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:Q(t.createdAt,d)})]})});function pe({isOpen:n,onClose:t,projects:m,projectsLoading:p,onSubmit:d,isSubmitting:l}){const{t:r}=F();X(a=>a.user);const v=Z(),[i,S]=o.useState(""),[x,f]=o.useState(""),[j,h]=o.useState("feat"),[I,A]=o.useState(""),[P,w]=o.useState(""),[_,y]=o.useState(""),[C,g]=o.useState(""),[q,z]=o.useState([]),[b,k]=o.useState("");o.useEffect(()=>{if(!n||(S(""),f(""),h("feat"),A(""),w(""),y(""),g(""),k(""),!v))return;const a=new AbortController;return R.get("admin/developers",{signal:a.signal}).json().then(z).catch(()=>{}),()=>a.abort()},[n,v]),o.useEffect(()=>{if(!n)return;function a(u){u.key==="Escape"&&t()}return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[n,t]);async function B(a){if(a.preventDefault(),k(""),!i||!x.trim()){k(r("tasks.project_and_description_required"));return}try{await d({projectKey:i,description:x.trim(),workerId:_||void 0,developerId:C?Number(C):void 0,taskType:j,branchSlug:P.trim()||void 0,agentType:I||void 0})}catch(u){const N=u instanceof Error?u.message:r("tasks.failed_to_create_task");k(N)}}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:a=>{a.target===a.currentTarget&&t()},children:e.jsxs("div",{className:"w-full max-w-[480px] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)]",onClick:a=>a.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(ee,{className:"h-4 w-4"})})]}),e.jsxs("form",{onSubmit:B,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(M,{value:i,onChange:S,options:m.map(a=>({value:a.key,label:a.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(M,{value:j,onChange:h,options:oe})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:r("tasks.form_agent_type")}),e.jsx(M,{value:I,onChange:A,options:ne})]}),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:a=>f(a.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:_,onChange:a=>y(a.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:P,onChange:a=>w(a.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)]"})]}),v&&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(M,{value:C,onChange:g,options:q.map(a=>({value:String(a.id),label:a.name})),placeholder:r("tasks.select_developer")})]}),b&&e.jsx("div",{className:"rounded-[4px] bg-[#2a1515] border border-[var(--destructive)]/30 px-3 py-2 text-xs text-[var(--destructive)]",children:b})]}),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 me({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:v=>v.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(ce,{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 ue({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 line-clamp-2",title:`#${n.id} ${n.description}`,children:["#",n.id," ",n.description]}),e.jsx("span",{className:"shrink-0",children:e.jsx(G,{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:Q(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 he=[{key:"all",labelKey:"tasks.tab_all"},{key:E.RUNNING,labelKey:"tasks.tab_running"},{key:E.QUEUED,labelKey:"tasks.tab_queued"},{key:E.COMPLETED,labelKey:"tasks.tab_completed"},{key:E.FAILED,labelKey:"tasks.tab_failed"},{key:E.CANCELLED,labelKey:"tasks.tab_cancelled"}],D=20;function Ce(){const n=$(),{t}=F(),{tasks:m,loading:p,fetchTasks:d}=le(),l=te(s=>s.taskSeq),[r,v]=o.useState("all"),[i,S]=o.useState(""),[x,f]=o.useState(1),[j,h]=o.useState(!1);se(o.useMemo(()=>e.jsxs("button",{onClick:()=>h(!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(de,{className:"h-3.5 w-3.5"}),t("tasks.new_task")]}),[t]));const[I,A]=o.useState([]),[P,w]=o.useState(!1),[_,y]=o.useState(!1),[C,g]=o.useState(!1),[q,z]=o.useState(null),[b,k]=o.useState(null);o.useEffect(()=>{const s={limit:String(D)};r!=="all"&&(s.status=r),d(s)},[r,d,l]),o.useEffect(()=>{f(1)},[i]),o.useEffect(()=>{j&&(w(!0),R.get("web/projects").json().then(s=>A(s)).catch(()=>{}).finally(()=>w(!1)))},[j]);const B=o.useCallback(async s=>{y(!0);try{const c=await R.post("web/tasks",{json:{projectKey:s.projectKey,description:s.description,workerId:s.workerId,developerId:s.developerId,taskType:s.taskType,branchSlug:s.branchSlug,agentType:s.agentType}}).json();h(!1),n(`/tasks/${c.task.id}`)}catch(c){if(c instanceof re&&c.response.status===409){try{const T=await c.response.json();if(T.confirmRequired){z({id:T.confirmRequired.taskId,description:T.confirmRequired.message,status:"active"}),k(s),h(!1),g(!0);return}}catch{}J.error(t("tasks.similar_task_exists"))}else{const T=c instanceof Error?c.message:String(c);J.error(T)}}finally{y(!1)}},[n]),a=o.useCallback(async()=>{if(b){y(!0);try{const s=await R.post("web/tasks",{json:{projectKey:b.projectKey,description:b.description,workerId:b.workerId,force:!0}}).json();g(!1),n(`/tasks/${s.task.id}`)}finally{y(!1)}}},[b,n]),u=o.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]),N=Math.max(1,Math.ceil(u.length/D)),K=u.slice((x-1)*D,x*D),O=t(i?"tasks.try_adjusting_search":"tasks.create_first_task"),L=i?void 0:e.jsx("button",{onClick:()=>h(!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:he.map(s=>e.jsx("button",{onClick:()=>v(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(ae,{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=>S(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:()=>S(""),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&&K.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:7,className:"p-4",children:e.jsx(W,{rows:5})})}),!p&&u.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:O,action:L})})}),K.map(s=>e.jsx(xe,{task:s},s.id))]})]})}),e.jsxs("div",{className:"flex flex-col gap-2 md:hidden",children:[p&&K.length===0&&e.jsx("div",{className:"p-4",children:e.jsx(W,{rows:5})}),!p&&u.length===0&&e.jsx(U,{icon:H,title:t("tasks.no_tasks_found"),description:O,action:L}),K.map(s=>e.jsx(ue,{task:s},s.id))]}),N>1&&e.jsxs("div",{className:"mt-6 flex items-center justify-center gap-1",children:[e.jsx("button",{onClick:()=>f(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:N},(s,c)=>c+1).map(s=>e.jsx("button",{onClick:()=>f(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:()=>f(Math.min(N,x+1)),disabled:x===N,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(pe,{isOpen:j,onClose:()=>h(!1),projects:I,projectsLoading:P,onSubmit:B,isSubmitting:_}),e.jsx(me,{isOpen:C,onClose:()=>g(!1),onForceCreate:a,onViewExisting:s=>{g(!1),n(`/tasks/${s}`)},similarTask:q,isLoading:_})]})}export{Ce as default};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{c as Q,m as ce,h as I,n as N,a as E,r as c,k as H,o as oe,j as e,X as V,p as le,f as de}from"./index-C5MJg1oC.js";import{T as U,u as xe,a as K,A as W}from"./task-constants-D_2_U6qL.js";import{P as me,H as ue,C as pe}from"./PtyTerminal-DY7uY9Y-.js";import{i as z,O as X}from"./OnboardingGuide-xVUtEvVm.js";import{S as w,C as he}from"./Select-B_UE_NDL.js";import{a as Z}from"./status-colors-BnNRsWp0.js";import{a as fe}from"./date-BdNtiQTP.js";import{u as ee}from"./useFetch-C8LjfJUm.js";import{P as $}from"./plus-CQjC8fgx.js";import{R as ve}from"./rotate-ccw-CQh0kfDP.js";import{W as ge}from"./wifi-0ZLwtMKj.js";import"./chevron-right-CURI3LO_.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const je=Q("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/**
|
|
7
|
-
* @license lucide-react v0.469.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const be=Q("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"}]]),te="overlord_home_terminal";function ke(){try{const s=localStorage.getItem(te);if(s)return JSON.parse(s)}catch{}return{pinnedTaskIds:[],activeTaskId:null}}let B="";function M(s){const a=JSON.stringify(s);a!==B&&(B=a,localStorage.setItem(te,a))}const G=ke(),Ne=new Set([N.QUEUED,N.ASSIGNED,N.RUNNING,N.SUSPENDED]);let R=!1;const ye=ce((s,a)=>({pinnedTaskIds:G.pinnedTaskIds,activeTaskId:G.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(h=>h!==t),d=o===t?r[0]??null:o,{[t]:p,...i}=x;s({pinnedTaskIds:r,activeTaskId:d,taskMetas:i}),M({pinnedTaskIds:r,activeTaskId:d})},loadActiveTasks:async()=>{if(!R){R=!0,s({loading:!0});try{const n=(await I.get("web/tasks",{searchParams:{limit:"30"}}).json()).data.filter(i=>Ne.has(i.status)),o={};for(const i of n)o[i.id]={id:i.id,description:i.description,status:i.status,projectKey:i.projectKey,currentStage:i.currentStage,currentSessionId:i.currentSessionId,updatedAt:i.updatedAt};const r=[...n].sort((i,h)=>h.updatedAt.localeCompare(i.updatedAt)).map(i=>i.id),{activeTaskId:d}=a(),p=d&&r.includes(d)?d:r[0]??null;s({taskMetas:o,pinnedTaskIds:r,activeTaskId:p}),M({pinnedTaskIds:r,activeTaskId:p})}catch{}finally{R=!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 we(){const[s,a]=c.useState(()=>z());c.useEffect(()=>{const n=()=>a(!0),o=()=>a(z());return window.addEventListener("onboarding-dismissed",n),window.addEventListener("storage",o),()=>{window.removeEventListener("onboarding-dismissed",n),window.removeEventListener("storage",o)}},[]);const{data:t}=ee(()=>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 Te({taskId:s,confirm:a,onSubmitted:t}){const{t:n}=E(),[o,x]=c.useState(a.timeout),[r,d]=c.useState(!1);c.useEffect(()=>{x(a.timeout);const i=setInterval(()=>{x(h=>h<=1?(clearInterval(i),0):h-1)},1e3);return()=>clearInterval(i)},[a.timeout,a.stageName]);const p=c.useCallback(async i=>{d(!0);try{await I.post(`web/tasks/${s}/confirm-stage`,{json:{stageName:a.stageName,approved:i}}),t()}catch{}finally{d(!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(pe,{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:fe(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 Se({projectKey:s,onProjectChange:a,onCreated:t}){const{t:n}=E(),o=xe(u=>u.createTask),[x,r]=c.useState(""),[d,p]=c.useState("feat"),[i,h]=c.useState(""),[f,T]=c.useState(!1),[S,C]=c.useState(!1),[D,A]=c.useState(!1),{data:P}=ee(()=>I.get("web/projects").json(),[]),v=c.useMemo(()=>{const u=(P??[]).map(k=>({value:k.key,label:k.key}));return[{value:"",label:n("terminal_home.all_projects")},...u]},[P,n]),y=c.useRef(!1);c.useEffect(()=>{if(!y.current){if(s){y.current=!0;return}v.length>1&&(a(v[1].value),y.current=!0)}},[s,v,a]);const g=!!s&&!!x.trim();function b(){g&&C(!0)}async function m(){if(C(!1),!!g){T(!0);try{const u=await o({projectKey:s,description:x.trim(),taskType:d,agentType:i||void 0});r(""),t(u.id)}catch{}finally{T(!1)}}}const O=n("terminal_home.confirm_create_message").replace("{taskType}",d).replace("{projectKey}",s).replace("{description}",x.trim()),_="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(w,{value:s,onChange:a,options:v,placeholder:n("terminal_home.select_project")})}),e.jsx("div",{className:"w-[100px]",children:e.jsx(w,{value:d,onChange:p,options:K})}),e.jsx("div",{className:"w-[120px]",children:e.jsx(w,{value:i,onChange:h,options:W})}),e.jsx("input",{type:"text",value:x,onChange:u=>r(u.target.value),onKeyDown:u=>u.key==="Enter"&&b(),placeholder:n("terminal_home.task_description_placeholder"),className:_,disabled:f}),e.jsxs("button",{onClick:b,disabled:f||!g,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($,{className:"h-3 w-3"}),n(f?"common.creating":"terminal_home.new_task")]})]}),e.jsx("div",{className:"md:hidden border-b border-[var(--border)] bg-[var(--bg-card)]",children:D?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(w,{value:s,onChange:a,options:v,placeholder:n("terminal_home.select_project")})}),e.jsx("div",{className:"w-[100px]",children:e.jsx(w,{value:d,onChange:p,options:K})}),e.jsx("div",{className:"w-[120px]",children:e.jsx(w,{value:i,onChange:h,options:W})}),e.jsx("button",{onClick:()=>A(!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:u=>r(u.target.value),onKeyDown:u=>u.key==="Enter"&&b(),placeholder:n("terminal_home.task_description_placeholder"),className:_,disabled:f}),e.jsx("button",{onClick:b,disabled:f||!g,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($,{className:"h-3 w-3"})})]})]}):e.jsxs("button",{onClick:()=>A(!0),className:"flex w-full items-center justify-center gap-1 py-2 text-xs text-[var(--accent)] hover:opacity-80",children:[e.jsx($,{className:"h-3.5 w-3.5"}),n("terminal_home.new_task")]})}),e.jsx(le,{isOpen:S,onClose:()=>C(!1),onConfirm:m,title:n("terminal_home.confirm_create_title"),message:O,confirmVariant:"accent",confirmLabel:n("terminal_home.new_task"),isLoading:f})]})}function q({status:s,size:a}){const t=s===N.SUSPENDED,n=Z(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 Ce({tasks:s,activeId:a,onSelect:t,onUnpin:n,children:o}){const x=de();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 d=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 ${d?"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(q,{status:r.status,size:"md"}),e.jsxs("div",{className:"flex-1 min-w-0",title:`#${r.id} ${r.description}`,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:flex items-center justify-center shrink-0 w-5 h-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:flex items-center justify-center shrink-0 w-5 h-5 text-[var(--text-muted)] hover:text-[var(--accent)]",title:"open detail",children:e.jsx("span",{className:"text-[10px] leading-none",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 d=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 ${d?"border-[var(--accent)] text-[var(--text-primary)]":"border-transparent text-[var(--text-secondary)]"}`,style:{height:44},children:[e.jsx(q,{status:r.status,size:"sm"}),e.jsxs("span",{className:"text-[11px] whitespace-nowrap",children:["#",r.id]})]},r.id)})}),o]})]})}function _e({task:s,takeoverState:a,onTakeover:t,onRelease:n}){const o=Z(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:!U.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(ve,{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(ue,{className:"h-3 w-3"}),e.jsx("span",{className:"hidden md:inline",children:"take over"})]}))})]})}function Ie({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(ge,{className:"h-2.5 w-2.5"}):e.jsx(be,{className:"h-2.5 w-2.5"}),t?"connected":a]})]})}function J({onboardingData:s}){const[a,t]=c.useState(!1),{t:n}=E();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(je,{className:"h-3 w-3 text-[var(--text-muted)]"})]}),e.jsx("div",{className:"max-h-[300px] overflow-y-auto",children:e.jsx(X,{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(he,{className:"h-3 w-3 text-[var(--text-muted)]"})]}):null}function Y({onboardingData:s}){const{t:a}=E();return e.jsx("div",{className:`flex flex-1 flex-col items-center p-4 md:p-6 ${s?"overflow-auto":"justify-center"}`,children:s?e.jsx("div",{className:"w-full max-w-lg",children:e.jsx(X,{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 Ke(){const{t:s}=E(),{pinnedTaskIds:a,activeTaskId:t,taskMetas:n,stageConfirm:o,loading:x,setActiveTask:r,pinTask:d,unpinTask:p,loadActiveTasks:i,fetchStageConfirm:h,clearStageConfirm:f,updateTaskMeta:T}=ye(),S=c.useRef(null),[C,D]=c.useState("disconnected"),[A,P]=c.useState("auto"),[v,y]=c.useState(""),g=H(l=>l.lastEvent),b=H(l=>l.status),m=t?n[t]??null:null,O=m?U.includes(m.status):!1,_=c.useRef(!1);c.useEffect(()=>{!_.current&&m&&(y(m.projectKey),_.current=!0)},[m]);const u=c.useMemo(()=>{const l=a.map(j=>n[j]).filter(Boolean);return v?l.filter(j=>j.projectKey===v):l},[a,n,v]);c.useEffect(()=>{u.length>0&&t&&!u.some(l=>l.id===t)&&r(u[0].id)},[u,t,r]);const k=we();oe(m?`#${m.id} ${m.description}`:null),c.useEffect(()=>{i()},[i]),c.useEffect(()=>{t&&(m==null?void 0:m.status)===N.SUSPENDED?h(t):f()},[t,m==null?void 0:m.status,h,f]),c.useEffect(()=>{if(g){if(g.event==="task_status_changed"){const{taskId:l,status:j,currentStage:F}=g,L={status:j,updatedAt:new Date().toISOString()};F!==void 0&&(L.currentStage=F),T(l,L),j===N.SUSPENDED&&l===t&&h(l),U.includes(j)&&l===t&&f()}g.event==="task_created"&&i()}},[g,t,h,f,T,i]),c.useEffect(()=>{if(b==="connected")return;const j=setInterval(()=>{document.visibilityState!=="hidden"&&i()},15e3);return()=>clearInterval(j)},[b,i]);const se=c.useCallback(l=>{d(l),r(l),i()},[d,r,i]),ae=c.useCallback(()=>{f(),i()},[f,i]),ne=c.useCallback(()=>{var l;(l=S.current)==null||l.requestTakeover()},[]),re=c.useCallback(()=>{var l;(l=S.current)==null||l.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 ie=u.length>0;return e.jsxs("div",{className:"flex h-full flex-col overflow-hidden",children:[e.jsx(Se,{projectKey:v,onProjectChange:y,onCreated:se}),e.jsx("div",{className:"flex flex-col md:flex-row flex-1 overflow-hidden",children:ie?e.jsxs(e.Fragment,{children:[e.jsx(Ce,{tasks:u,activeId:t,onSelect:r,onUnpin:p,children:e.jsx("div",{className:"md:hidden",children:e.jsx(J,{onboardingData:k})})}),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(J,{onboardingData:k})}),e.jsx(_e,{task:m,takeoverState:A,onTakeover:ne,onRelease:re}),o&&t&&e.jsx(Te,{taskId:t,confirm:o,onSubmitted:ae}),e.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:e.jsx(me,{taskId:t,sessionId:m.currentSessionId??void 0,taskFinished:O,onStatusChange:D,onTakeoverChange:P,ref:S},t)}),e.jsx(Ie,{task:m,ptyStatus:C})]}):e.jsx(Y,{onboardingData:k})})]}):e.jsx(Y,{onboardingData:k})})]})}export{Ke as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as u,j as e,p as E,x as H,f as P,r as m,u as R,k as S,q as V,W as c,D,L as z,z as I,h}from"./index-C5MJg1oC.js";import{t as B,b as $}from"./date-BdNtiQTP.js";import{w as J,b as K,t as Q}from"./status-colors-BnNRsWp0.js";import{I as i}from"./InfoRow-BbQYGWPd.js";import{M as f}from"./MetricBar-CCL5kOaE.js";import{u as X}from"./useFetch-C8LjfJUm.js";import{T as Y}from"./Tooltip-BWRiD768.js";import{T as M}from"./trash-2-DsQUbmfY.js";import{A as Z}from"./arrow-left-DEORM5c1.js";function ee({isOpen:t,onClose:a,onConfirm:r,workerName:o,isDraining:l,loading:j}){const{t:d}=u();return e.jsx(E,{isOpen:t,onClose:a,onConfirm:r,title:d(l?"workers.undrain_worker_title":"workers.drain_worker_title"),message:l?d("workers.undrain_confirm",{name:o}):d("workers.drain_confirm",{name:o}),confirmLabel:d(l?"workers.undrain":"workers.drain"),confirmVariant:l?"accent":"warning",isLoading:j})}function xe(){const{id:t}=H(),a=P(),{t:r}=u(),[o,l]=m.useState(!1),[j,d]=m.useState(!1),[A,p]=m.useState(!1),[T,y]=m.useState(!1),w=R(n=>{var v;return(v=n.user)==null?void 0:v.role}),F=S(n=>n.workerSeq),U=S(n=>n.taskSeq),{data:x,loading:W,error:_,refetch:C}=X(async()=>{if(!t)throw new Error("Missing worker ID");const[n,v]=await Promise.all([h.get(`web/workers/${t}`).json(),h.get(`web/workers/${t}/tasks`).json().catch(()=>[])]);return{worker:n,tasks:v}},[t,F,U]),s=(x==null?void 0:x.worker)??null,g=(x==null?void 0:x.tasks)??[];V(m.useMemo(()=>!s||s.status===c.DECOMMISSIONED?null:e.jsxs("div",{className:"flex items-center gap-2",children:[s.status===c.ONLINE&&e.jsxs("button",{onClick:()=>l(!0),className:"rounded-[4px] border border-[var(--warning)]/40 px-3 py-1.5 text-xs text-[var(--warning)] hover:bg-[var(--warning)]/10 transition-colors",children:["> ",r("workers.drain")]}),w===D.ADMIN&&e.jsxs("button",{onClick:()=>p(!0),className:"flex items-center gap-1 rounded-[4px] border border-[var(--destructive)]/40 px-3 py-1.5 text-xs text-[var(--destructive)] hover:bg-[var(--destructive)]/10 transition-colors",children:[e.jsx(M,{className:"h-3 w-3"}),r("workers.decommission")]})]}),[s,w,r]));async function q(){if(s){d(!0);try{const n=s.status===c.DRAINING?"undrain":"drain";await h.post(`web/workers/${s.id}/${n}`),await C()}catch{}finally{d(!1),l(!1)}}}async function G(){if(s){y(!0);try{await h.delete(`admin/workers/${s.id}`),a("/workers")}catch{}finally{y(!1),p(!1)}}}if(W)return e.jsx("div",{className:"mx-auto max-w-5xl px-4 md:px-6 py-8 font-mono",children:e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:r("workers.loading_worker")})});if(_)return e.jsxs("div",{className:"mx-auto max-w-5xl px-4 md:px-6 py-8 font-mono lowercase text-center",children:[e.jsx("p",{className:"text-sm text-[var(--destructive)]",children:_}),e.jsx("button",{onClick:()=>C(),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:r("common.retry")})]});if(!s)return e.jsxs("div",{className:"mx-auto max-w-5xl px-4 md:px-6 py-8 font-mono lowercase text-center",children:[e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:r("workers.worker_not_found")}),e.jsxs("button",{onClick:()=>a("/workers"),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:["< ",r("workers.back_to_workers")]})]});const b=s.status===c.DRAINING,k=s.status!==c.DECOMMISSIONED;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mx-auto max-w-5xl font-mono lowercase",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] bg-[var(--bg-primary)] px-4 shrink-0 md:hidden",style:{height:56},children:[e.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[e.jsx("button",{onClick:()=>a("/workers"),className:"shrink-0 text-[var(--text-muted)]",children:e.jsx(Z,{className:"h-4 w-4"})}),e.jsx("span",{className:"truncate text-sm font-medium text-[var(--text-primary)]",children:s.name})]}),!b&&s.status!==c.OFFLINE&&k&&e.jsxs("button",{onClick:()=>l(!0),className:"shrink-0 rounded-[4px] border border-[var(--warning)]/40 px-3 py-1.5 text-xs text-[var(--warning)] hover:bg-[var(--warning)]/10 transition-colors",children:["> ",r("workers.drain")]})]}),e.jsxs("div",{className:"px-4 md:px-6 py-8",children:[b?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mb-4 flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx(z,{to:"/workers",className:"text-[var(--text-muted)] hover:text-[var(--text-secondary)] transition-colors",children:r("workers.title")}),e.jsx("span",{className:"text-[var(--text-muted)]",children:"/"}),e.jsx("span",{className:"text-[var(--text-secondary)]",children:s.name})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[k&&e.jsxs("button",{onClick:()=>l(!0),className:"rounded-[4px] border border-[var(--accent)] px-4 py-1.5 text-xs text-[var(--accent)] hover:bg-[var(--accent)]/10 transition-colors",children:["> ",r("workers.undrain")]}),w===D.ADMIN&&k&&e.jsxs("button",{onClick:()=>p(!0),className:"flex items-center gap-1 rounded-[4px] border border-[var(--destructive)]/40 px-3 py-1.5 text-xs text-[var(--destructive)] hover:bg-[var(--destructive)]/10 transition-colors",children:[e.jsx(M,{className:"h-3 w-3"}),r("workers.decommission")]})]})]}),e.jsx("div",{className:"mb-4",children:e.jsx("span",{className:"rounded-[4px] bg-[var(--warning)]/20 px-2.5 py-1 text-xs font-medium text-[var(--warning)]",children:r("workers.draining")})}),e.jsxs("div",{className:"mb-6 rounded-[4px] border border-[var(--warning)]/40 bg-[var(--warning)]/10 p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(I,{className:"h-3.5 w-3.5 text-[var(--warning)]"}),e.jsx("span",{className:"text-xs text-[var(--warning)]",children:r("workers.draining_warning")})]}),e.jsx("p",{className:"text-xs text-[var(--warning)]/70 ml-5.5",children:r("workers.draining_active_tasks")})]}),e.jsxs("div",{className:"mb-6 grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsx(N,{label:r("workers.cpu"),value:s.cpuUsage,unit:"%"}),e.jsx(N,{label:r("workers.memory"),value:s.memoryUsage,unit:"%"}),e.jsx(N,{label:r("workers.disk"),value:s.diskUsage,unit:"%"}),e.jsxs("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-5",children:[e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:r("workers.slots")}),e.jsxs("p",{className:"mt-2 text-lg font-semibold text-[var(--text-primary)]",children:[s.activeSlots,"/",s.maxSlots]})]})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:()=>a("/workers"),className:"mb-4 text-xs text-[var(--text-muted)] hover:text-[var(--text-secondary)] transition-colors",children:["< ",r("workers.back_to_workers")]}),e.jsxs("h1",{className:"mb-2 text-lg font-bold text-[var(--text-primary)] flex items-center gap-2",children:[s.name,e.jsxs("span",{className:"flex items-center gap-1.5 text-sm font-normal",style:{color:J[s.status]},children:[e.jsx("span",{style:{fontSize:"0.5rem"},children:"●"}),s.status.toLowerCase()]})]}),e.jsx("p",{className:"mb-6 text-xs text-[var(--text-muted)]",children:r("workers.last_heartbeat",{time:B(s.lastHeartbeat,"never")})}),s.status===c.DECOMMISSIONED&&e.jsx("div",{className:"mb-6 rounded-[4px] border border-[var(--text-muted)]/40 bg-[var(--text-muted)]/10 p-4",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(I,{className:"h-3.5 w-3.5 text-[var(--text-muted)]"}),e.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["this worker has been decommissioned",s.decommissionedAt?` on ${$(s.decommissionedAt)}`:""," and can no longer accept tasks."]})]})}),e.jsxs("div",{className:"mb-6 grid gap-4 lg:grid-cols-2",children:[e.jsxs("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4",children:[e.jsx("h2",{className:"mb-3 text-xs text-[var(--text-muted)]",children:r("workers.resource_usage")}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx(f,{label:r("workers.cpu"),value:s.cpuUsage}),e.jsx(f,{label:r("workers.mem"),value:s.memoryUsage}),e.jsx(f,{label:r("workers.disk"),value:s.diskUsage})]})]}),e.jsxs("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4",children:[e.jsx("h2",{className:"mb-3 text-xs text-[var(--text-muted)]",children:r("workers.connection_info")}),e.jsx(L,{worker:s})]})]})]}),b?e.jsxs(e.Fragment,{children:[e.jsx(O,{title:r("workers.active_tasks"),tasks:g,navigate:a}),e.jsxs("div",{className:"mb-6",children:[e.jsx("h2",{className:"mb-4 text-sm font-medium text-[var(--accent)]",children:r("workers.capabilities")}),s.capabilities.length>0?e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",children:s.capabilities.map(n=>e.jsx("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4",children:e.jsx("p",{className:"text-xs text-[var(--text-primary)]",children:n})},n))}):e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:r("workers.no_capabilities_short")})]}),e.jsxs("div",{className:"mb-6",children:[e.jsx("h2",{className:"mb-4 text-sm font-medium text-[var(--accent)]",children:r("workers.worker_info")}),e.jsx("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-5",children:e.jsx(L,{worker:s,showExtended:!0})})]})]}):e.jsxs(e.Fragment,{children:[s.capabilities.length>0&&e.jsxs("div",{className:"mb-6 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4",children:[e.jsx("h2",{className:"mb-3 text-xs text-[var(--text-muted)]",children:r("workers.capabilities")}),e.jsx("div",{className:"flex flex-wrap gap-2",children:s.capabilities.map(n=>e.jsx("span",{className:"rounded-[4px] border border-[var(--border)] px-2.5 py-1 text-xs text-[var(--text-secondary)]",children:n},n))})]}),e.jsx(O,{title:`${r("workers.current_tasks")} (${g.length})`,tasks:g,navigate:a})]})]})]}),e.jsx(ee,{isOpen:o,onClose:()=>l(!1),onConfirm:q,workerName:s.name,isDraining:b,loading:j}),e.jsx(E,{isOpen:A,onClose:()=>p(!1),onConfirm:G,title:r("workers.decommission_title"),message:r("workers.decommission_confirm",{name:s.name}),confirmLabel:r("workers.decommission"),confirmVariant:"danger",isLoading:T})]})}function L({worker:t,showExtended:a=!1}){const{t:r}=u();return e.jsxs("div",{className:"flex flex-col gap-2 text-xs",children:[e.jsx(i,{label:r("workers.worker_id"),value:t.id}),e.jsx(i,{label:r("workers.host"),value:t.host}),e.jsx(i,{label:r("workers.port"),value:String(t.port)}),e.jsx(i,{label:r("workers.os"),value:t.os??r("workers.unknown")}),e.jsx(i,{label:r("workers.cpu_model"),value:t.cpuModel??r("workers.n_a")}),e.jsx(i,{label:r("workers.cpu_cores"),value:t.cpuCores!=null?String(t.cpuCores):r("workers.n_a")}),e.jsx(i,{label:r("workers.memory"),value:t.memoryGb!=null?`${t.memoryGb} gb`:r("workers.n_a")}),e.jsx(i,{label:r("workers.last_heartbeat_label"),value:$(t.lastHeartbeat)}),e.jsx(i,{label:r("workers.slots"),value:`${t.activeSlots}/${t.maxSlots}`}),a&&e.jsxs(e.Fragment,{children:[e.jsx(i,{label:r("workers.status_label"),value:t.status.toLowerCase()}),e.jsx(i,{label:r("workers.worker_version"),value:t.workerVersion??r("workers.n_a")})]})]})}function O({title:t,tasks:a,navigate:r}){const{t:o}=u();return e.jsxs("div",{className:"mb-6 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4",children:[e.jsx("h2",{className:"mb-3 text-xs text-[var(--text-muted)]",children:t}),a.length===0?e.jsxs("div",{className:"flex flex-col items-center gap-3 py-6",children:[e.jsx("span",{className:"text-xl font-bold text-[var(--border)]",children:"[ ]"}),e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:o("workers.no_active_tasks")})]}):e.jsx(re,{tasks:a,navigate:r})]})}function re({tasks:t,navigate:a}){const{t:r}=u();return e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-xs",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-row)]",children:[e.jsx("th",{className:"py-2 pr-4 text-left font-normal text-[var(--text-muted)]",children:r("workers.id")}),e.jsx("th",{className:"py-2 pr-4 text-left font-normal text-[var(--text-muted)]",children:r("workers.description")}),e.jsx("th",{className:"py-2 pr-4 text-left font-normal text-[var(--text-muted)]",children:r("workers.status_label")}),e.jsx("th",{className:"py-2 text-left font-normal text-[var(--text-muted)]",children:r("workers.stage")})]})}),e.jsx("tbody",{children:t.map(o=>e.jsxs("tr",{onClick:()=>a(`/tasks/${o.id}`),className:"cursor-pointer border-b border-[var(--border-row)] hover:bg-[var(--bg-input)] transition-colors",children:[e.jsxs("td",{className:"py-2 pr-4 text-[var(--text-primary)]",children:["#",o.id]}),e.jsx("td",{className:"max-w-[120px] md:max-w-xs truncate py-2 pr-4 text-[var(--text-secondary)]",children:e.jsx(Y,{content:o.description,children:o.description})}),e.jsx("td",{className:"py-2 pr-4",children:e.jsxs("span",{style:{color:Q[o.status]},children:["● ",o.status.toLowerCase()]})}),e.jsx("td",{className:"py-2 text-[var(--text-secondary)]",children:o.currentStage??"-"})]},o.id))})]})})}function N({label:t,value:a,unit:r}){const o=Math.round(a*100);return e.jsxs("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-5",children:[e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:t}),e.jsxs("p",{className:"mt-2 text-lg font-semibold text-[var(--text-primary)]",children:[o,r]}),e.jsx("div",{className:"mt-3 h-1.5 w-full rounded-[2px] bg-[var(--bg-input)]",children:e.jsx("div",{className:"h-full rounded-[2px] transition-all",style:{width:`${o}%`,backgroundColor:K(a)}})})]})}export{xe as default};
|