@overlordai/server 1.0.38 → 1.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/database/repositories/machine.repository.d.ts +2 -0
- package/dist/database/repositories/machine.repository.d.ts.map +1 -1
- package/dist/database/repositories/machine.repository.js +4 -0
- package/dist/database/repositories/machine.repository.js.map +1 -1
- package/dist/database/repositories/task.repository.d.ts +11 -1
- package/dist/database/repositories/task.repository.d.ts.map +1 -1
- package/dist/database/repositories/task.repository.js +55 -6
- package/dist/database/repositories/task.repository.js.map +1 -1
- package/dist/dispatcher/dispatcher.service.d.ts +1 -0
- package/dist/dispatcher/dispatcher.service.d.ts.map +1 -1
- package/dist/dispatcher/dispatcher.service.js +3 -0
- package/dist/dispatcher/dispatcher.service.js.map +1 -1
- package/dist/dispatcher/heartbeat.service.d.ts +2 -1
- package/dist/dispatcher/heartbeat.service.d.ts.map +1 -1
- package/dist/dispatcher/heartbeat.service.js +4 -1
- package/dist/dispatcher/heartbeat.service.js.map +1 -1
- package/dist/web/dashboard.controller.d.ts +12 -2
- package/dist/web/dashboard.controller.d.ts.map +1 -1
- package/dist/web/dashboard.controller.js +18 -6
- package/dist/web/dashboard.controller.js.map +1 -1
- package/dist/web/dashboard.service.d.ts +6 -1
- package/dist/web/dashboard.service.d.ts.map +1 -1
- package/dist/web/dashboard.service.js +17 -4
- package/dist/web/dashboard.service.js.map +1 -1
- package/dist/web/task.controller.d.ts +14 -4
- package/dist/web/task.controller.d.ts.map +1 -1
- package/dist/web/task.controller.js +34 -29
- 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 +1 -1
- package/dist/web/worker-channel.gateway.js.map +1 -1
- package/package.json +2 -2
- package/public/assets/{AccessTokensPage-oPweGG_z.js → AccessTokensPage-DuICKFJy.js} +1 -1
- package/public/assets/{AdminPage-Dw1ng1n4.js → AdminPage-B8Yq8GnM.js} +1 -1
- package/public/assets/{ApiReferencePage-FUskCdjw.js → ApiReferencePage-DZDCJQI4.js} +1 -1
- package/public/assets/{AuditLogPage-nwiONLEk.js → AuditLogPage-MoCRMzqP.js} +1 -1
- package/public/assets/{BotManage-D2QsEBCS.js → BotManage-CVWwoYy3.js} +1 -1
- package/public/assets/{CliReferencePage-BdzdHAsN.js → CliReferencePage-DVB7E2Jv.js} +1 -1
- package/public/assets/{DeveloperManage-C8-2MMwr.js → DeveloperManage-BtO-lkvD.js} +1 -1
- package/public/assets/{EditProjectPage-DPTc1yRc.js → EditProjectPage-Bl2LyAeT.js} +1 -1
- package/public/assets/{EmptyState-CEWQv5SU.js → EmptyState-Bvs1SJo_.js} +1 -1
- package/public/assets/{HomePage-BkKwaAgJ.js → HomePage-BSubk1iR.js} +1 -1
- package/public/assets/{LandingPage-BBF_PnWk.js → LandingPage-COmKh2PR.js} +1 -1
- package/public/assets/{LoginPage-BXdJBXbE.js → LoginPage-DFIy5_AG.js} +1 -1
- package/public/assets/{MachineDetailPage-DeLR95cj.js → MachineDetailPage-BLOhWYiw.js} +1 -1
- package/public/assets/MachineListPage-CIqrEM7O.js +6 -0
- package/public/assets/{NotFoundPage-CDsk2FBZ.js → NotFoundPage-BqLQpkaf.js} +1 -1
- package/public/assets/{PipelineEditorPage-DRxoetje.js → PipelineEditorPage-CyOhoLwR.js} +1 -1
- package/public/assets/{ProfilePage-DYw8NzPC.js → ProfilePage-D8UfMNDf.js} +1 -1
- package/public/assets/{ProjectDetailPage-BVi8nkb1.js → ProjectDetailPage-8DxQkhBt.js} +1 -1
- package/public/assets/{ProjectListPage-BJxuXui-.js → ProjectListPage-Dwcp60o1.js} +1 -1
- package/public/assets/{QuickAuth-CAi3n0Qs.js → QuickAuth-CWpVD-8o.js} +1 -1
- package/public/assets/{RemoveMemberConfirmDialog-sqtFnOvO.js → RemoveMemberConfirmDialog-DQ3dXuC6.js} +1 -1
- package/public/assets/{Select-CRpdafWl.js → Select-GhXJ5uKF.js} +1 -1
- package/public/assets/{SettingsPage-B9lw8C-c.js → SettingsPage-DDsctH7X.js} +1 -1
- package/public/assets/{Skeleton-CbeWT2zl.js → Skeleton-CSAb9g25.js} +1 -1
- package/public/assets/{SkillPage-Bq35rago.js → SkillPage-CtZTtfF8.js} +1 -1
- package/public/assets/{TaskDetailPage-C4ICC3OM.js → TaskDetailPage-CgT_txYn.js} +1 -1
- package/public/assets/{TaskListPage-CUHGBvyU.js → TaskListPage-D_tZ75c7.js} +1 -1
- package/public/assets/{TaskStatusBadge-C6DS5OWP.js → TaskStatusBadge-yxoaV45g.js} +1 -1
- package/public/assets/{TokenManage-B4uqYclW.js → TokenManage-DWk-4hAE.js} +1 -1
- package/public/assets/{TotpSetupPage-CEGN1xn8.js → TotpSetupPage-C3IixO0t.js} +1 -1
- package/public/assets/{WorkerSetupGuidePage-CwuvVUoB.js → WorkerSetupGuidePage-CuXz1Cp5.js} +1 -1
- package/public/assets/{arrow-left-BXI8dEuv.js → arrow-left-tpTJv4kJ.js} +1 -1
- package/public/assets/{arrow-right-BvAzhW8L.js → arrow-right-DpePBWE7.js} +1 -1
- package/public/assets/{bot-BsTtqvxQ.js → bot-BChGjdPm.js} +1 -1
- package/public/assets/{chevron-right-CHP2kF25.js → chevron-right-B-JssgBf.js} +1 -1
- package/public/assets/{copy-CTHNYjlv.js → copy-MDuQXvvx.js} +1 -1
- package/public/assets/{external-link-CAJ7Idcz.js → external-link-ExQuyXwZ.js} +1 -1
- package/public/assets/{index-BwKDWAeG.js → index-CtAu_XZ5.js} +2 -2
- package/public/assets/{key-BgCZ-y1U.js → key-Cix4k6UI.js} +1 -1
- package/public/assets/{loader-circle-DfGhh0Ty.js → loader-circle-COcLl-bl.js} +1 -1
- package/public/assets/{pencil-Bq3Z1U82.js → pencil-KZjOYmxG.js} +1 -1
- package/public/assets/{plus-kyLBS24g.js → plus-B1SMCBOe.js} +1 -1
- package/public/assets/{rotate-ccw-DSGQ_NEe.js → rotate-ccw-DpBJ4jZw.js} +1 -1
- package/public/assets/{scroll-text-D2EdgNAO.js → scroll-text-CrlR_VG0.js} +1 -1
- package/public/assets/{settings-CZ6ELt0Z.js → settings-H-4c0_mh.js} +1 -1
- package/public/assets/{task.store-DT4yU2EV.js → task.store-ATNoa4p7.js} +1 -1
- package/public/assets/{trash-2-CNnnORdj.js → trash-2-BzT2LBkf.js} +1 -1
- package/public/assets/{users-DbVTGZbU.js → users-BsLS_-Dg.js} +1 -1
- package/public/index.html +1 -1
- package/public/assets/MachineListPage-D79p6rD6.js +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as c,j as e,r as n,C as o}from"./index-
|
|
1
|
+
import{a as c,j as e,r as n,C as o}from"./index-CtAu_XZ5.js";import{E as i}from"./external-link-ExQuyXwZ.js";import{C as d}from"./copy-MDuQXvvx.js";function a({text:t}){const[s,r]=n.useState(!1);return e.jsx("button",{onClick:async()=>{await navigator.clipboard.writeText(t),r(!0),setTimeout(()=>r(!1),2e3)},className:"rounded-[4px] p-1 text-[var(--text-muted)] transition-colors hover:text-[var(--text-primary)]",children:s?e.jsx(o,{className:"h-3 w-3 text-[var(--accent)]"}):e.jsx(d,{className:"h-3 w-3"})})}function x({text:t}){return e.jsxs("div",{className:"flex items-center justify-between rounded-[4px] bg-[var(--bg-primary)] px-3 py-2",children:[e.jsx("code",{className:"text-xs text-[var(--accent)]",children:t}),e.jsx(a,{text:t})]})}const l=[{action:"create tasks",desc:"describe what you want done, overlord dispatches to a worker"},{action:"list & monitor tasks",desc:"check status, read execution logs, track progress"},{action:"cancel & retry tasks",desc:"manage task lifecycle"},{action:"confirm pipeline stages",desc:"approve or provide input for suspended stages"},{action:"manage projects",desc:"list projects, view members"},{action:"check cluster health",desc:"see machine status, online workers, queue depth"},{action:"search",desc:"find tasks, projects, and machines by keyword"},{action:"read notifications",desc:"check and clear your notification inbox"}],m=['create a task in project "frontend" to fix the login page styling',"what tasks are running right now?","show me the logs for task 42","how many machines are online?","cancel task 15"],p=[{name:"claude code",url:"https://claude.com/claude-code"},{name:"cursor",url:"https://cursor.com"},{name:"windsurf",url:"https://windsurf.com"},{name:"codex",url:"https://openai.com/codex"}];function b(){c();const t=typeof window<"u"?window.location.origin:"https://your-server";return e.jsxs("div",{className:"mx-auto max-w-4xl px-6 py-8 font-mono lowercase",children:[e.jsx("div",{className:"mb-8",children:e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"// use overlord from your ai coding assistant — claude code, cursor, windsurf, codex, and more. install the skill and your assistant can create tasks, monitor execution, and manage your fleet."})}),e.jsxs("div",{className:"mb-8 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 space-y-3",children:[e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"// install"}),e.jsx(x,{text:"npx skills add overlord-run/skill"})]}),e.jsxs("div",{className:"mb-8 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 space-y-3",children:[e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:"// configure — set these environment variables"}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("div",{className:"flex items-center justify-between rounded-[4px] bg-[var(--bg-primary)] px-3 py-2",children:[e.jsxs("code",{className:"text-xs text-[var(--text-primary)]",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"export "}),"OVERLORD_SERVER=",e.jsx("span",{className:"text-[var(--accent)]",children:t})]}),e.jsx(a,{text:`export OVERLORD_SERVER=${t}`})]}),e.jsxs("div",{className:"flex items-center justify-between rounded-[4px] bg-[var(--bg-primary)] px-3 py-2",children:[e.jsxs("code",{className:"text-xs text-[var(--text-primary)]",children:[e.jsx("span",{className:"text-[var(--text-muted)]",children:"export "}),"OVERLORD_TOKEN=",e.jsx("span",{className:"text-[var(--text-secondary)]",children:"your-token"})]}),e.jsx(a,{text:"export OVERLORD_TOKEN=your-token"})]})]}),e.jsxs("p",{className:"text-[10px] text-[var(--text-muted)]",children:["// create a token at ",e.jsx("a",{href:"/access-tokens",className:"text-[var(--accent)] hover:underline",children:"/access-tokens"})]})]}),e.jsxs("div",{className:"mb-8",children:[e.jsx("h2",{className:"mb-4 text-sm text-[var(--accent)]",children:"> capabilities"}),e.jsx("div",{className:"space-y-2",children:l.map(s=>e.jsxs("div",{className:"flex items-start gap-3 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] px-4 py-3",children:[e.jsx("span",{className:"shrink-0 text-xs font-medium text-[var(--text-primary)]",children:s.action}),e.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["// ",s.desc]})]},s.action))})]}),e.jsxs("div",{className:"mb-8",children:[e.jsx("h2",{className:"mb-4 text-sm text-[var(--accent)]",children:"> example usage"}),e.jsxs("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4 space-y-2",children:[e.jsx("p",{className:"mb-3 text-xs text-[var(--text-muted)]",children:"// just ask your ai agent naturally"}),m.map(s=>e.jsx("div",{className:"rounded-[4px] bg-[var(--bg-primary)] px-3 py-2",children:e.jsxs("code",{className:"text-xs text-[var(--text-secondary)]",children:[e.jsx("span",{className:"text-[var(--accent)]",children:"> "}),s]})},s))]})]}),e.jsxs("div",{className:"mb-8",children:[e.jsx("h2",{className:"mb-4 text-sm text-[var(--accent)]",children:"> compatible tools"}),e.jsx("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:p.map(s=>e.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"flex items-center justify-center gap-1.5 rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] px-3 py-2.5 text-xs text-[var(--text-primary)] transition-colors hover:border-[var(--accent)]",children:[s.name,e.jsx(i,{className:"h-3 w-3 text-[var(--text-muted)]"})]},s.name))}),e.jsx("p",{className:"mt-2 text-[10px] text-[var(--text-muted)]",children:"// and any ai coding assistant that supports the skills protocol"})]}),e.jsx("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4",children:e.jsxs("p",{className:"text-xs text-[var(--text-muted)]",children:["// open source:"," ",e.jsx("a",{href:"https://github.com/overlord-run/skill",target:"_blank",rel:"noopener noreferrer",className:"text-[var(--accent)] hover:underline",children:"github.com/overlord-run/skill"})]})})]})}export{b as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var He=Object.defineProperty;var Fe=(G,$,F)=>$ in G?He(G,$,{enumerable:!0,configurable:!0,writable:!0,value:F}):G[$]=F;var ve=(G,$,F)=>Fe(G,typeof $!="symbol"?$+"":$,F);import{c as pe,r as z,u as We,f as ce,j as C,a as be,l as Ie,m as Ue,d as $e,n as ze,X as we,o as Ke,t as ke,i as qe}from"./index-
|
|
1
|
+
var He=Object.defineProperty;var Fe=(G,$,F)=>$ in G?He(G,$,{enumerable:!0,configurable:!0,writable:!0,value:F}):G[$]=F;var ve=(G,$,F)=>Fe(G,typeof $!="symbol"?$+"":$,F);import{c as pe,r as z,u as We,f as ce,j as C,a as be,l as Ie,m as Ue,d as $e,n as ze,X as we,o as Ke,t as ke,i as qe}from"./index-CtAu_XZ5.js";import{u as Ve}from"./task.store-ATNoa4p7.js";import{S as Ge}from"./Select-GhXJ5uKF.js";import{A as Xe}from"./arrow-left-tpTJv4kJ.js";import{R as Je}from"./rotate-ccw-DpBJ4jZw.js";import{E as Ye}from"./external-link-ExQuyXwZ.js";import{L as Ee}from"./loader-circle-COcLl-bl.js";/**
|
|
2
2
|
* @license lucide-react v0.469.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as A,j as e,g as M,a as F,u as U,r as o,f as I,X as O,h as Q,H as W,i as G,k as $}from"./index-BwKDWAeG.js";import{u as V}from"./task.store-DT4yU2EV.js";import{T as H}from"./TaskStatusBadge-C6DS5OWP.js";import{S as z}from"./Select-CRpdafWl.js";import{C as X}from"./copy-CTHNYjlv.js";import{E as B}from"./EmptyState-CEWQv5SU.js";import{T as q}from"./Skeleton-CbeWT2zl.js";import{P as Z}from"./plus-kyLBS24g.js";function Y(s,t){return s.length<=t?s:s.slice(0,t)+"..."}function ee(s){const t=Date.now(),m=new Date(s).getTime(),d=t-m,c=Math.floor(d/6e4);if(c<1)return M("common.just_now");if(c<60)return M("common.m_ago",{n:c});const n=Math.floor(c/60);if(n<24)return M("common.h_ago",{n});const a=Math.floor(n/24);return M("common.d_ago",{n:a})}function te({task:s}){const t=A();return e.jsxs("tr",{onClick:()=>t(`/tasks/${s.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:["#",s.id]}),e.jsx("td",{className:"py-3 pr-4 text-sm text-[var(--text-primary)]",children:Y(s.description,80)}),e.jsx("td",{className:"py-3 pr-4",children:e.jsx(H,{status:s.status})}),e.jsx("td",{className:"py-3 pr-4 font-mono text-xs text-[var(--text-secondary)]",children:s.projectKey}),e.jsx("td",{className:"py-3 pr-4 font-mono text-xs text-[var(--text-secondary)]",children:s.machineName??"—"}),e.jsx("td",{className:"py-3 font-mono text-xs text-[var(--text-muted)]",children:ee(s.createdAt)})]})}function se({isOpen:s,onClose:t,projects:m,projectsLoading:d,onSubmit:c,isSubmitting:n}){const{t:a}=F(),l=U(i=>i.user),g=(l==null?void 0:l.role)==="admin",[x,f]=o.useState(""),[b,u]=o.useState(""),[N,_]=o.useState(""),[j,k]=o.useState(""),[w,y]=o.useState([]),[C,h]=o.useState("");o.useEffect(()=>{s&&(f(""),u(""),_(""),k(""),h(""),g&&I.get("admin/developers").json().then(y).catch(()=>y([])))},[s,g]),o.useEffect(()=>{if(!s)return;function i(p){p.key==="Escape"&&t()}return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[s,t]);async function K(i){if(i.preventDefault(),h(""),!x||!b.trim()){h(a("tasks.project_and_description_required"));return}try{await c({projectKey:x,description:b.trim(),machineId:N||void 0,developerId:j?Number(j):void 0})}catch(p){const P=p instanceof Error?p.message:a("tasks.failed_to_create_task");h(P)}}return s?e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center font-mono",style:{backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},onClick:i=>{i.target===i.currentTarget&&t()},children:e.jsxs("div",{className:"w-[480px] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)]",onClick:i=>i.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:["// ",a("tasks.new_task")]}),e.jsx("button",{onClick:t,className:"text-[var(--text-muted)] transition-colors hover:text-[var(--text-primary)]",children:e.jsx(O,{className:"h-4 w-4"})})]}),e.jsxs("form",{onSubmit:K,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:a("tasks.task_description")}),e.jsx("textarea",{value:b,onChange:i=>u(i.target.value),placeholder:a("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:a("tasks.project")}),e.jsx(z,{value:x,onChange:f,options:m.map(i=>({value:i.key,label:i.name})),placeholder:a(d?"common.loading":"tasks.select_project"),disabled:d})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:a("tasks.target_machine")}),e.jsx("input",{type:"text",value:N,onChange:i=>_(i.target.value),placeholder:a("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)]"})]}),g&&e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:a("tasks.assign_developer")}),e.jsx(z,{value:j,onChange:k,options:w.map(i=>({value:String(i.id),label:i.username})),placeholder:a("tasks.select_developer")})]}),C&&e.jsx("div",{className:"rounded-[4px] bg-[#2a1515] border border-[var(--destructive)]/30 px-3 py-2 text-xs text-[var(--destructive)]",children:C})]}),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:a("common.cancel")}),e.jsx("button",{type:"submit",disabled:n||!x||!b.trim(),className:"rounded-[4px] bg-[var(--accent)] px-4 py-2 text-xs text-black transition-opacity hover:opacity-90 disabled:opacity-40",children:a(n?"common.creating":"tasks.create_task")})]})]})]})}):null}function re({isOpen:s,onClose:t,onForceCreate:m,onViewExisting:d,similarTask:c,isLoading:n}){const{t:a}=F();return!c||!s?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:l=>l.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(X,{style:{width:"1rem",height:"1rem"}}),a("tasks.dedup_title")]}),e.jsx("div",{style:{color:"var(--text-muted)",fontSize:"0.7rem",marginTop:"0.25rem"},children:a("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:["#",c.id," · ",c.status]}),e.jsx("div",{style:{color:"var(--text-primary)",fontSize:"0.75rem",marginTop:"0.375rem",lineHeight:"1.5"},children:c.description})]}),e.jsxs("div",{style:{display:"flex",gap:"0.75rem"},children:[e.jsx("button",{type:"button",onClick:t,disabled:n,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:n?"not-allowed":"pointer",opacity:n?.7:1,transition:"color 0.15s, border-color 0.15s"},children:a("common.cancel")}),e.jsx("button",{type:"button",onClick:()=>d(c.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:a("tasks.view_existing")}),e.jsx("button",{type:"button",onClick:m,disabled:n,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:n?"not-allowed":"pointer",opacity:n?.7:1},children:a(n?"common.creating":"tasks.dedup_create_anyway")})]})]})})}function ae(s){const t=Date.now(),m=new Date(s).getTime(),d=t-m,c=Math.floor(d/6e4);if(c<1)return"just now";if(c<60)return`${c}m ago`;const n=Math.floor(c/60);return n<24?`${n}h ago`:`${Math.floor(n/24)}d ago`}function oe({task:s}){const t=A();return e.jsxs("div",{onClick:()=>t(`/tasks/${s.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-[10px] text-[var(--text-primary)] leading-tight",style:{wordBreak:"break-word"},children:["#",s.id," ",s.description]}),e.jsx("span",{className:"shrink-0",children:e.jsx(H,{status:s.status})})]}),e.jsxs("div",{className:"mt-1.5 flex items-center gap-2 text-[9px] text-[var(--text-muted)]",children:[e.jsx("span",{children:ae(s.createdAt)}),e.jsx("span",{children:"·"}),e.jsx("span",{children:s.projectKey}),s.machineName&&e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"·"}),e.jsx("span",{children:s.machineName})]})]})]})}const ne=[{key:"all",labelKey:"tasks.tab_all"},{key:"RUNNING",labelKey:"tasks.tab_running"},{key:"QUEUED",labelKey:"tasks.tab_queued"},{key:"COMPLETED",labelKey:"tasks.tab_completed"},{key:"FAILED",labelKey:"tasks.tab_failed"},{key:"CANCELLED",labelKey:"tasks.tab_cancelled"}],D=20;function he(){const s=A(),{t}=F(),{tasks:m,loading:d,fetchTasks:c}=V(),[n,a]=o.useState("all"),[l,g]=o.useState(""),[x,f]=o.useState(1),[b,u]=o.useState(!1);Q(o.useMemo(()=>e.jsxs("button",{onClick:()=>u(!0),className:"flex items-center gap-1.5 rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs font-mono text-black transition-opacity hover:opacity-90",children:[e.jsx(Z,{className:"h-3.5 w-3.5"}),t("tasks.new_task")]}),[t]));const[N,_]=o.useState([]),[j,k]=o.useState(!1),[w,y]=o.useState(!1),[C,h]=o.useState(!1),[K,i]=o.useState(null),[p,P]=o.useState(null);o.useEffect(()=>{const r={limit:String(D)};n!=="all"&&(r.status=n),c(r),f(1)},[n,c]),o.useEffect(()=>{f(1)},[l]),o.useEffect(()=>{b&&(k(!0),I.get("web/projects").json().then(r=>_(r)).catch(()=>{}).finally(()=>k(!1)))},[b]);const J=o.useCallback(async r=>{y(!0);try{const v=await I.post("web/tasks",{json:{projectKey:r.projectKey,description:r.description,machineId:r.machineId,developerId:r.developerId}}).json();u(!1),s(`/tasks/${v.task.id}`)}catch(v){if(v instanceof W&&v.response.status===409){try{const R=await v.response.json();if(R.confirmRequired){i({id:R.confirmRequired.taskId,description:R.confirmRequired.message,status:"active"}),P(r),u(!1),h(!0);return}}catch{}alert(t("tasks.similar_task_exists"))}else throw v}finally{y(!1)}},[s]),L=o.useCallback(async()=>{if(p){y(!0);try{const r=await I.post("web/tasks",{json:{projectKey:p.projectKey,description:p.description,machineId:p.machineId,force:!0}}).json();h(!1),s(`/tasks/${r.task.id}`)}finally{y(!1)}}},[p,s]),S=l.trim()?m.filter(r=>r.description.toLowerCase().includes(l.toLowerCase())||String(r.id).includes(l)):m,T=Math.max(1,Math.ceil(S.length/D)),E=S.slice((x-1)*D,x*D);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",children:ne.map(r=>e.jsx("button",{onClick:()=>a(r.key),className:`shrink-0 rounded-[4px] px-3 py-2 h-8 text-xs transition-colors ${n===r.key?"text-[var(--accent)] bg-[var(--bg-input)]":"text-[var(--text-muted)] bg-[var(--bg-card)] hover:text-[var(--text-secondary)]"}`,children:t(r.labelKey)},r.key))}),e.jsxs("div",{className:"relative md:ml-auto md:w-64",children:[e.jsx(G,{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:l,onChange:r=>g(r.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)]"}),l&&e.jsx("button",{onClick:()=>g(""),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.worker")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.time")})]})}),e.jsxs("tbody",{children:[d&&E.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:6,className:"p-4",children:e.jsx(q,{rows:5})})}),!d&&S.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:6,className:"p-4",children:e.jsx(B,{icon:$,title:t("tasks.no_tasks_found"),description:t(l?"tasks.try_adjusting_search":"tasks.create_first_task"),action:l?void 0:e.jsx("button",{onClick:()=>u(!0),className:"rounded-[4px] bg-[var(--accent)] px-5 py-2 text-[11px] font-bold text-black",children:t("tasks.create_task")})})})}),E.map(r=>e.jsx(te,{task:r},r.id))]})]})}),e.jsxs("div",{className:"flex flex-col gap-2 md:hidden",children:[d&&E.length===0&&e.jsx("div",{className:"p-4",children:e.jsx(q,{rows:5})}),!d&&S.length===0&&e.jsx(B,{icon:$,title:t("tasks.no_tasks_found"),description:t(l?"tasks.try_adjusting_search":"tasks.create_first_task"),action:l?void 0:e.jsx("button",{onClick:()=>u(!0),className:"rounded-[4px] bg-[var(--accent)] px-5 py-2 text-[11px] font-bold text-black",children:t("tasks.create_task")})}),E.map(r=>e.jsx(oe,{task:r},r.id))]}),T>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",children:t("tasks.prev")}),Array.from({length:T},(r,v)=>v+1).map(r=>e.jsx("button",{onClick:()=>f(r),className:`rounded-[4px] px-2.5 py-1 text-xs transition-colors ${x===r?"text-[var(--accent)] bg-[var(--bg-input)]":"text-[var(--text-muted)] hover:text-[var(--text-secondary)]"}`,children:r},r)),e.jsx("button",{onClick:()=>f(Math.min(T,x+1)),disabled:x===T,className:"rounded-[4px] px-2 py-1 text-xs text-[var(--text-muted)] hover:text-[var(--text-primary)] disabled:opacity-30",children:t("common.next")})]}),e.jsx(se,{isOpen:b,onClose:()=>u(!1),projects:N,projectsLoading:j,onSubmit:J,isSubmitting:w}),e.jsx(re,{isOpen:C,onClose:()=>h(!1),onForceCreate:L,onViewExisting:r=>{h(!1),s(`/tasks/${r}`)},similarTask:K,isLoading:w})]})}export{he as default};
|
|
1
|
+
import{d as A,j as e,g as M,a as F,u as U,r as o,f as I,X as O,h as Q,H as W,i as G,k as $}from"./index-CtAu_XZ5.js";import{u as V}from"./task.store-ATNoa4p7.js";import{T as H}from"./TaskStatusBadge-yxoaV45g.js";import{S as z}from"./Select-GhXJ5uKF.js";import{C as X}from"./copy-MDuQXvvx.js";import{E as B}from"./EmptyState-Bvs1SJo_.js";import{T as q}from"./Skeleton-CSAb9g25.js";import{P as Z}from"./plus-B1SMCBOe.js";function Y(s,t){return s.length<=t?s:s.slice(0,t)+"..."}function ee(s){const t=Date.now(),m=new Date(s).getTime(),d=t-m,c=Math.floor(d/6e4);if(c<1)return M("common.just_now");if(c<60)return M("common.m_ago",{n:c});const n=Math.floor(c/60);if(n<24)return M("common.h_ago",{n});const a=Math.floor(n/24);return M("common.d_ago",{n:a})}function te({task:s}){const t=A();return e.jsxs("tr",{onClick:()=>t(`/tasks/${s.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:["#",s.id]}),e.jsx("td",{className:"py-3 pr-4 text-sm text-[var(--text-primary)]",children:Y(s.description,80)}),e.jsx("td",{className:"py-3 pr-4",children:e.jsx(H,{status:s.status})}),e.jsx("td",{className:"py-3 pr-4 font-mono text-xs text-[var(--text-secondary)]",children:s.projectKey}),e.jsx("td",{className:"py-3 pr-4 font-mono text-xs text-[var(--text-secondary)]",children:s.machineName??"—"}),e.jsx("td",{className:"py-3 font-mono text-xs text-[var(--text-muted)]",children:ee(s.createdAt)})]})}function se({isOpen:s,onClose:t,projects:m,projectsLoading:d,onSubmit:c,isSubmitting:n}){const{t:a}=F(),l=U(i=>i.user),g=(l==null?void 0:l.role)==="admin",[x,f]=o.useState(""),[b,u]=o.useState(""),[N,_]=o.useState(""),[j,k]=o.useState(""),[w,y]=o.useState([]),[C,h]=o.useState("");o.useEffect(()=>{s&&(f(""),u(""),_(""),k(""),h(""),g&&I.get("admin/developers").json().then(y).catch(()=>y([])))},[s,g]),o.useEffect(()=>{if(!s)return;function i(p){p.key==="Escape"&&t()}return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[s,t]);async function K(i){if(i.preventDefault(),h(""),!x||!b.trim()){h(a("tasks.project_and_description_required"));return}try{await c({projectKey:x,description:b.trim(),machineId:N||void 0,developerId:j?Number(j):void 0})}catch(p){const P=p instanceof Error?p.message:a("tasks.failed_to_create_task");h(P)}}return s?e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center font-mono",style:{backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},onClick:i=>{i.target===i.currentTarget&&t()},children:e.jsxs("div",{className:"w-[480px] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)]",onClick:i=>i.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:["// ",a("tasks.new_task")]}),e.jsx("button",{onClick:t,className:"text-[var(--text-muted)] transition-colors hover:text-[var(--text-primary)]",children:e.jsx(O,{className:"h-4 w-4"})})]}),e.jsxs("form",{onSubmit:K,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:a("tasks.task_description")}),e.jsx("textarea",{value:b,onChange:i=>u(i.target.value),placeholder:a("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:a("tasks.project")}),e.jsx(z,{value:x,onChange:f,options:m.map(i=>({value:i.key,label:i.name})),placeholder:a(d?"common.loading":"tasks.select_project"),disabled:d})]}),e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:a("tasks.target_machine")}),e.jsx("input",{type:"text",value:N,onChange:i=>_(i.target.value),placeholder:a("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)]"})]}),g&&e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("label",{className:"text-xs text-[var(--text-muted)]",children:a("tasks.assign_developer")}),e.jsx(z,{value:j,onChange:k,options:w.map(i=>({value:String(i.id),label:i.username})),placeholder:a("tasks.select_developer")})]}),C&&e.jsx("div",{className:"rounded-[4px] bg-[#2a1515] border border-[var(--destructive)]/30 px-3 py-2 text-xs text-[var(--destructive)]",children:C})]}),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:a("common.cancel")}),e.jsx("button",{type:"submit",disabled:n||!x||!b.trim(),className:"rounded-[4px] bg-[var(--accent)] px-4 py-2 text-xs text-black transition-opacity hover:opacity-90 disabled:opacity-40",children:a(n?"common.creating":"tasks.create_task")})]})]})]})}):null}function re({isOpen:s,onClose:t,onForceCreate:m,onViewExisting:d,similarTask:c,isLoading:n}){const{t:a}=F();return!c||!s?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:l=>l.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(X,{style:{width:"1rem",height:"1rem"}}),a("tasks.dedup_title")]}),e.jsx("div",{style:{color:"var(--text-muted)",fontSize:"0.7rem",marginTop:"0.25rem"},children:a("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:["#",c.id," · ",c.status]}),e.jsx("div",{style:{color:"var(--text-primary)",fontSize:"0.75rem",marginTop:"0.375rem",lineHeight:"1.5"},children:c.description})]}),e.jsxs("div",{style:{display:"flex",gap:"0.75rem"},children:[e.jsx("button",{type:"button",onClick:t,disabled:n,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:n?"not-allowed":"pointer",opacity:n?.7:1,transition:"color 0.15s, border-color 0.15s"},children:a("common.cancel")}),e.jsx("button",{type:"button",onClick:()=>d(c.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:a("tasks.view_existing")}),e.jsx("button",{type:"button",onClick:m,disabled:n,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:n?"not-allowed":"pointer",opacity:n?.7:1},children:a(n?"common.creating":"tasks.dedup_create_anyway")})]})]})})}function ae(s){const t=Date.now(),m=new Date(s).getTime(),d=t-m,c=Math.floor(d/6e4);if(c<1)return"just now";if(c<60)return`${c}m ago`;const n=Math.floor(c/60);return n<24?`${n}h ago`:`${Math.floor(n/24)}d ago`}function oe({task:s}){const t=A();return e.jsxs("div",{onClick:()=>t(`/tasks/${s.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-[10px] text-[var(--text-primary)] leading-tight",style:{wordBreak:"break-word"},children:["#",s.id," ",s.description]}),e.jsx("span",{className:"shrink-0",children:e.jsx(H,{status:s.status})})]}),e.jsxs("div",{className:"mt-1.5 flex items-center gap-2 text-[9px] text-[var(--text-muted)]",children:[e.jsx("span",{children:ae(s.createdAt)}),e.jsx("span",{children:"·"}),e.jsx("span",{children:s.projectKey}),s.machineName&&e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"·"}),e.jsx("span",{children:s.machineName})]})]})]})}const ne=[{key:"all",labelKey:"tasks.tab_all"},{key:"RUNNING",labelKey:"tasks.tab_running"},{key:"QUEUED",labelKey:"tasks.tab_queued"},{key:"COMPLETED",labelKey:"tasks.tab_completed"},{key:"FAILED",labelKey:"tasks.tab_failed"},{key:"CANCELLED",labelKey:"tasks.tab_cancelled"}],D=20;function he(){const s=A(),{t}=F(),{tasks:m,loading:d,fetchTasks:c}=V(),[n,a]=o.useState("all"),[l,g]=o.useState(""),[x,f]=o.useState(1),[b,u]=o.useState(!1);Q(o.useMemo(()=>e.jsxs("button",{onClick:()=>u(!0),className:"flex items-center gap-1.5 rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs font-mono text-black transition-opacity hover:opacity-90",children:[e.jsx(Z,{className:"h-3.5 w-3.5"}),t("tasks.new_task")]}),[t]));const[N,_]=o.useState([]),[j,k]=o.useState(!1),[w,y]=o.useState(!1),[C,h]=o.useState(!1),[K,i]=o.useState(null),[p,P]=o.useState(null);o.useEffect(()=>{const r={limit:String(D)};n!=="all"&&(r.status=n),c(r),f(1)},[n,c]),o.useEffect(()=>{f(1)},[l]),o.useEffect(()=>{b&&(k(!0),I.get("web/projects").json().then(r=>_(r)).catch(()=>{}).finally(()=>k(!1)))},[b]);const J=o.useCallback(async r=>{y(!0);try{const v=await I.post("web/tasks",{json:{projectKey:r.projectKey,description:r.description,machineId:r.machineId,developerId:r.developerId}}).json();u(!1),s(`/tasks/${v.task.id}`)}catch(v){if(v instanceof W&&v.response.status===409){try{const R=await v.response.json();if(R.confirmRequired){i({id:R.confirmRequired.taskId,description:R.confirmRequired.message,status:"active"}),P(r),u(!1),h(!0);return}}catch{}alert(t("tasks.similar_task_exists"))}else throw v}finally{y(!1)}},[s]),L=o.useCallback(async()=>{if(p){y(!0);try{const r=await I.post("web/tasks",{json:{projectKey:p.projectKey,description:p.description,machineId:p.machineId,force:!0}}).json();h(!1),s(`/tasks/${r.task.id}`)}finally{y(!1)}}},[p,s]),S=l.trim()?m.filter(r=>r.description.toLowerCase().includes(l.toLowerCase())||String(r.id).includes(l)):m,T=Math.max(1,Math.ceil(S.length/D)),E=S.slice((x-1)*D,x*D);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",children:ne.map(r=>e.jsx("button",{onClick:()=>a(r.key),className:`shrink-0 rounded-[4px] px-3 py-2 h-8 text-xs transition-colors ${n===r.key?"text-[var(--accent)] bg-[var(--bg-input)]":"text-[var(--text-muted)] bg-[var(--bg-card)] hover:text-[var(--text-secondary)]"}`,children:t(r.labelKey)},r.key))}),e.jsxs("div",{className:"relative md:ml-auto md:w-64",children:[e.jsx(G,{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:l,onChange:r=>g(r.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)]"}),l&&e.jsx("button",{onClick:()=>g(""),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.worker")}),e.jsx("th",{className:"px-4 py-2.5",children:t("tasks.time")})]})}),e.jsxs("tbody",{children:[d&&E.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:6,className:"p-4",children:e.jsx(q,{rows:5})})}),!d&&S.length===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:6,className:"p-4",children:e.jsx(B,{icon:$,title:t("tasks.no_tasks_found"),description:t(l?"tasks.try_adjusting_search":"tasks.create_first_task"),action:l?void 0:e.jsx("button",{onClick:()=>u(!0),className:"rounded-[4px] bg-[var(--accent)] px-5 py-2 text-[11px] font-bold text-black",children:t("tasks.create_task")})})})}),E.map(r=>e.jsx(te,{task:r},r.id))]})]})}),e.jsxs("div",{className:"flex flex-col gap-2 md:hidden",children:[d&&E.length===0&&e.jsx("div",{className:"p-4",children:e.jsx(q,{rows:5})}),!d&&S.length===0&&e.jsx(B,{icon:$,title:t("tasks.no_tasks_found"),description:t(l?"tasks.try_adjusting_search":"tasks.create_first_task"),action:l?void 0:e.jsx("button",{onClick:()=>u(!0),className:"rounded-[4px] bg-[var(--accent)] px-5 py-2 text-[11px] font-bold text-black",children:t("tasks.create_task")})}),E.map(r=>e.jsx(oe,{task:r},r.id))]}),T>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",children:t("tasks.prev")}),Array.from({length:T},(r,v)=>v+1).map(r=>e.jsx("button",{onClick:()=>f(r),className:`rounded-[4px] px-2.5 py-1 text-xs transition-colors ${x===r?"text-[var(--accent)] bg-[var(--bg-input)]":"text-[var(--text-muted)] hover:text-[var(--text-secondary)]"}`,children:r},r)),e.jsx("button",{onClick:()=>f(Math.min(T,x+1)),disabled:x===T,className:"rounded-[4px] px-2 py-1 text-xs text-[var(--text-muted)] hover:text-[var(--text-primary)] disabled:opacity-30",children:t("common.next")})]}),e.jsx(se,{isOpen:b,onClose:()=>u(!1),projects:N,projectsLoading:j,onSubmit:J,isSubmitting:w}),e.jsx(re,{isOpen:C,onClose:()=>h(!1),onForceCreate:L,onViewExisting:r=>{h(!1),s(`/tasks/${r}`)},similarTask:K,isLoading:w})]})}export{he as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as n,j as e}from"./index-
|
|
1
|
+
import{a as n,j as e}from"./index-CtAu_XZ5.js";const r={QUEUED:{labelKey:"tasks.status_queued",color:"var(--text-muted)"},ASSIGNED:{labelKey:"tasks.status_assigned",color:"#60a5fa"},RUNNING:{labelKey:"tasks.status_running",color:"var(--accent)"},SUSPENDED:{labelKey:"tasks.status_suspended",color:"var(--warning)"},COMPLETED:{labelKey:"tasks.status_completed",color:"var(--accent)"},FAILED:{labelKey:"tasks.status_failed",color:"var(--destructive)"},CANCELLED:{labelKey:"tasks.status_cancelled",color:"var(--text-muted)"}};function u({status:t}){const{t:a}=n(),s=r[t]??null,l=s?a(s.labelKey):t.toLowerCase(),o=(s==null?void 0:s.color)??"var(--text-muted)";return e.jsxs("span",{className:"inline-flex items-center gap-1.5 font-mono text-xs",style:{color:o},children:[e.jsx("span",{style:{fontSize:"0.6rem"},children:"●"}),l]})}export{u as T};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as S,r as s,j as e,f as w,d as D,o as F,K as A,x as I,l as O}from"./index-BwKDWAeG.js";import{K as T}from"./key-BgCZ-y1U.js";import{C as R}from"./copy-CTHNYjlv.js";import{E as $}from"./external-link-CAJ7Idcz.js";import{E as P}from"./EmptyState-CEWQv5SU.js";import{T as B}from"./Skeleton-CbeWT2zl.js";import{P as J}from"./plus-kyLBS24g.js";function K({isOpen:a,onClose:x,onCreated:y}){const{t:n}=S(),[t,c]=s.useState(""),[d,m]=s.useState(!1),[b,v]=s.useState(""),p=()=>{c(""),v(""),x()},l=async()=>{if(v(""),!t.trim()){v(n("admin.pat_label_required"));return}try{m(!0);const o=await w.post("admin/worker-tokens",{json:{label:t.trim()}}).json();c(""),y({token:o.token,id:o.id})}catch(o){const f=o instanceof Error?o.message:n("admin.pat_failed_to_generate");v(f)}finally{m(!1)}};return a?e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center",style:{backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},onClick:o=>{o.target===o.currentTarget&&p()},children:e.jsxs("div",{className:"w-full border border-[var(--border)] bg-[var(--bg-card)]",style:{maxWidth:"480px",borderRadius:"4px",fontFamily:"'JetBrains Mono', monospace"},children:[e.jsxs("div",{className:"flex items-center gap-2 border-b border-[var(--border)] px-5 py-4",children:[e.jsx(T,{className:"h-4 w-4 text-[var(--accent)]"}),e.jsx("span",{className:"text-sm font-medium text-[var(--text-primary)]",children:n("admin.generate_worker_token_title")})]}),e.jsxs("div",{className:"space-y-4 px-5 py-4",children:[b&&e.jsx("div",{className:"border border-red-500/30 bg-red-500/10 px-3 py-2 text-xs text-red-400",style:{borderRadius:"4px"},children:b}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:n("admin.create_one_time_token")}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-xs text-[var(--text-muted)]",children:n("admin.label")}),e.jsx("input",{type:"text",placeholder:n("admin.pat_label_placeholder"),value:t,onChange:o=>c(o.target.value),className:"w-full border border-[var(--border)] bg-[var(--bg-card)] px-3 py-2 text-sm text-[var(--text-primary)] placeholder:text-[var(--text-muted)] focus:border-[var(--accent)] focus:outline-none",style:{borderRadius:"4px",fontFamily:"'JetBrains Mono', monospace"},onKeyDown:o=>{o.key==="Enter"&&l()}}),e.jsx("p",{className:"mt-1 text-xs text-[var(--text-muted)]",children:n("admin.label_identifies_machine")})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 border-t border-[var(--border)] px-5 py-3",children:[e.jsx("button",{onClick:p,className:"border border-[var(--border)] bg-transparent px-4 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:{borderRadius:"4px",fontFamily:"'JetBrains Mono', monospace"},children:n("common.cancel")}),e.jsx("button",{onClick:l,disabled:d,className:"bg-[var(--accent)] px-4 py-1.5 text-xs font-medium text-[#0C0C0C] transition-opacity hover:opacity-80 disabled:opacity-50",style:{borderRadius:"4px",fontFamily:"'JetBrains Mono', monospace"},children:n(d?"admin.generating":"admin.generate")})]})]})}):null}const V=3e3,W=600*1e3;function z({isOpen:a,token:x,tokenId:y,onClose:n}){const{t}=S(),[c,d]=s.useState("command"),[m,b]=s.useState(!1),[v,p]=s.useState(!1),[l,o]=s.useState(""),[f,g]=s.useState(null),i=s.useRef(void 0),N=s.useRef(Date.now()),j=D(),_=typeof window<"u"?window.location.origin:"https://overlord.example.com",k=`overlord setup worker --token ${x} --server ${_}`,C=async()=>{try{await navigator.clipboard.writeText(x),b(!0),setTimeout(()=>b(!1),2e3)}catch{}},r=async()=>{try{await navigator.clipboard.writeText(k),p(!0),setTimeout(()=>p(!1),2e3)}catch{}},L=s.useCallback(async()=>{try{const h=await w.get(`admin/worker-tokens/${y}/status`).json();h.status==="used"&&h.machine_name&&(d("success"),o(h.machine_name),g(h.machine_id??null),i.current&&clearInterval(i.current))}catch{}Date.now()-N.current>W&&(d("timeout"),i.current&&clearInterval(i.current))},[y]),E=()=>{d("waiting"),N.current=Date.now(),i.current=setInterval(L,V)};s.useEffect(()=>()=>{i.current&&clearInterval(i.current)},[]);const M=()=>{n(),f&&j(`/machines/${f}`)};if(!a)return null;const u={fontFamily:"'JetBrains Mono', monospace",borderRadius:"4px"};return e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center",style:{backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},onClick:h=>{h.target===h.currentTarget&&n()},children:e.jsxs("div",{className:"w-full border border-[var(--border)] bg-[var(--bg-card)]",style:{...u,maxWidth:"480px"},children:[e.jsx("div",{className:"flex items-center gap-2 border-b border-[var(--border)] px-5 py-4",children:c==="success"?e.jsxs(e.Fragment,{children:[e.jsx(F,{className:"h-4 w-4 text-[var(--accent)]"}),e.jsx("span",{className:"text-sm font-medium text-[var(--text-primary)]",children:t("admin.worker_registered")})]}):e.jsxs(e.Fragment,{children:[e.jsx(T,{className:"h-4 w-4 text-[var(--accent)]"}),e.jsx("span",{className:"text-sm font-medium text-[var(--text-primary)]",children:t("admin.worker_token_generated")})]})}),e.jsxs("div",{className:"space-y-4 px-5 py-4",children:[c!=="success"&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:t("admin.run_command_desc")}),e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 text-[10px] text-[var(--text-muted)]",children:"Token"}),e.jsxs("div",{className:"relative border border-[var(--border)] bg-[var(--bg-card)] p-3",style:{borderRadius:"4px"},children:[e.jsx("code",{className:"block break-all pr-20 text-xs text-[var(--text-primary)]",children:x}),e.jsx("button",{onClick:C,className:"absolute right-2 top-2 flex items-center gap-1 border border-[var(--border)] bg-transparent px-2 py-1 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:m?e.jsx("span",{className:"text-[var(--accent)]",children:t("common.copied")}):e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(R,{className:"h-3 w-3"})," ",t("common.copy")]})})]})]}),e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 text-[10px] text-[var(--text-muted)]",children:t("admin.setup_command")}),e.jsxs("div",{className:"relative border border-[var(--border)] bg-[var(--bg-card)] p-3",style:{borderRadius:"4px"},children:[e.jsxs("code",{className:"block break-all pr-20 text-xs text-[var(--accent)]",children:["$ ",k]}),e.jsx("button",{onClick:r,className:"absolute right-2 top-2 flex items-center gap-1 border border-[var(--border)] bg-transparent px-2 py-1 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:v?e.jsx("span",{className:"text-[var(--accent)]",children:t("common.copied")}):e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(R,{className:"h-3 w-3"})," ",t("common.copy")]})})]})]}),e.jsx("div",{className:"border border-yellow-500/30 bg-yellow-500/10 px-3 py-2 text-xs text-yellow-400",style:{borderRadius:"4px"},children:t("admin.token_shown_once")})]}),c==="waiting"&&e.jsxs("div",{className:"flex items-center gap-3 border border-[var(--border)] bg-[var(--bg-card)] px-4 py-3",style:{borderRadius:"4px"},children:[e.jsx("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-[var(--accent)] border-t-transparent"}),e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:t("admin.waiting_for_worker")})]}),c==="timeout"&&e.jsx("div",{className:"border border-[var(--border)] bg-[var(--bg-card)] px-4 py-3 text-xs text-[var(--text-muted)]",style:{borderRadius:"4px"},children:t("admin.token_not_yet_used")}),c==="success"&&e.jsxs("div",{className:"border border-[var(--accent)]/30 bg-[var(--accent)]/10 px-4 py-3",style:{borderRadius:"4px"},children:[e.jsx("p",{className:"text-xs text-[var(--accent)]",children:t("admin.worker_registered_success")}),e.jsxs("p",{className:"mt-1 text-xs text-[var(--text-primary)]",children:[t("admin.machine"),": ",e.jsx("span",{className:"text-[var(--accent)]",children:l})]})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 border-t border-[var(--border)] px-5 py-3",children:[c==="command"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:n,className:"border border-[var(--border)] bg-transparent px-4 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:t("common.close")}),e.jsx("button",{onClick:E,className:"bg-[var(--accent)] px-4 py-1.5 text-xs font-medium text-[#0C0C0C] transition-opacity hover:opacity-80",style:u,children:t("admin.copied_wait_for_worker")})]}),c==="waiting"&&e.jsx("button",{onClick:n,className:"border border-[var(--border)] bg-transparent px-4 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:t("admin.close_worker_can_register")}),c==="timeout"&&e.jsx("button",{onClick:n,className:"border border-[var(--border)] bg-transparent px-4 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:t("common.close")}),c==="success"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:n,className:"border border-[var(--border)] bg-transparent px-4 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:t("common.close")}),e.jsxs("button",{onClick:M,className:"flex items-center gap-1.5 bg-[var(--accent)] px-4 py-1.5 text-xs font-medium text-[#0C0C0C] transition-opacity hover:opacity-80",style:u,children:[e.jsx($,{className:"h-3 w-3"}),t("admin.view_machine")]})]})]})]})})}function Z(){const{t:a}=S(),[x,y]=s.useState([]),[n,t]=s.useState(!0),[c,d]=s.useState(!1),[m,b]=s.useState(null),[v,p]=s.useState(!1),[l,o]=s.useState(null),[f,g]=s.useState(!1),[i,N]=s.useState(!1),j=s.useCallback(async()=>{try{t(!0);const r=await w.get("admin/worker-tokens").json();y(r)}catch{}finally{t(!1)}},[]);s.useEffect(()=>{j()},[j]);const _=async()=>{if(l){g(!0);try{await w.post(`admin/worker-tokens/${l.id}/revoke`),p(!1),o(null),j()}catch{}finally{g(!1)}}},k=r=>{d(!1),b(r),j()},C=r=>{switch(r){case"active":return"text-green-400";case"used":return"text-blue-400";case"revoked":return"text-red-400";case"expired":return"text-[var(--text-muted)]";default:return"text-[var(--text-muted)]"}};return e.jsxs("div",{className:"font-mono",children:[e.jsxs("div",{className:"mb-6 flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-sm text-[var(--text-primary)]",children:a("admin.tokens_title")}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:a("admin.tokens_subtitle")})]}),e.jsxs("button",{type:"button",className:"flex items-center gap-1.5 rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs text-black hover:opacity-90 transition-opacity",onClick:()=>d(!0),children:[e.jsx(J,{className:"h-3.5 w-3.5"}),a("admin.generate_token")]})]}),!n&&x.some(r=>r.status==="revoked")&&e.jsx("div",{className:"mb-4 flex items-center gap-2",children:e.jsx("button",{type:"button",onClick:()=>N(!i),className:`text-xs transition-colors ${i?"text-[var(--text-primary)]":"text-[var(--text-muted)] hover:text-[var(--text-secondary)]"}`,children:a(i?"admin.hide_revoked":"admin.show_revoked")})}),n?e.jsx("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4",children:e.jsx(B,{rows:3})}):x.filter(r=>i||r.status!=="revoked").length===0?e.jsx(P,{icon:A,title:a("admin.no_worker_tokens"),description:a("admin.generate_token_desc"),actionLabel:a("admin.generate_token"),onAction:()=>d(!0)}):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)] text-left text-[var(--text-muted)]",children:[e.jsx("th",{className:"pb-2 pr-4 font-normal",children:a("admin.label")}),e.jsx("th",{className:"pb-2 pr-4 font-normal",children:a("admin.purpose")}),e.jsx("th",{className:"pb-2 pr-4 font-normal",children:a("admin.status")}),e.jsx("th",{className:"pb-2 pr-4 font-normal",children:a("common.created_at")}),e.jsx("th",{className:"pb-2 pr-4 font-normal",children:a("admin.expires_at")}),e.jsx("th",{className:"pb-2 font-normal",children:a("common.actions")})]})}),e.jsx("tbody",{children:x.filter(r=>i||r.status!=="revoked").map(r=>e.jsxs("tr",{className:"border-b border-[var(--border-row)] hover:bg-white/[0.02] transition-colors",children:[e.jsx("td",{className:"py-2.5 pr-4 text-[var(--text-primary)]",children:r.label}),e.jsx("td",{className:"py-2.5 pr-4 text-[var(--text-secondary)]",children:r.purpose}),e.jsx("td",{className:"py-2.5 pr-4",children:e.jsx("span",{className:C(r.status),children:r.status})}),e.jsx("td",{className:"py-2.5 pr-4 text-[var(--text-muted)]",children:new Date(r.createdAt).toLocaleDateString()}),e.jsx("td",{className:"py-2.5 pr-4",children:r.expiresAt?e.jsx("span",{className:"text-[var(--text-secondary)]",children:new Date(r.expiresAt).toLocaleDateString()}):e.jsx("span",{className:"text-[var(--text-muted)]",children:"—"})}),e.jsx("td",{className:"py-2.5",children:r.status==="active"&&e.jsxs("button",{type:"button",className:"flex items-center gap-1 rounded-[4px] px-2 py-1 text-red-400 hover:text-red-300 hover:bg-white/[0.05] transition-colors",onClick:()=>{o(r),p(!0)},children:[e.jsx(I,{className:"h-3.5 w-3.5"}),a("admin.revoke")]})})]},r.id))})]})}),e.jsx(K,{isOpen:c,onClose:()=>d(!1),onCreated:k}),m&&e.jsx(z,{isOpen:!!m,token:m.token,tokenId:m.id,onClose:()=>b(null)}),e.jsx(O,{isOpen:v,onClose:()=>{p(!1),o(null)},onConfirm:_,title:a("admin.revoke_token"),message:a("admin.revoke_token_confirm",{label:(l==null?void 0:l.label)??""}),confirmLabel:a("admin.revoke"),confirmVariant:"danger",isLoading:f})]})}export{Z as default};
|
|
1
|
+
import{a as S,r as s,j as e,f as w,d as D,o as F,K as A,x as I,l as O}from"./index-CtAu_XZ5.js";import{K as T}from"./key-Cix4k6UI.js";import{C as R}from"./copy-MDuQXvvx.js";import{E as $}from"./external-link-ExQuyXwZ.js";import{E as P}from"./EmptyState-Bvs1SJo_.js";import{T as B}from"./Skeleton-CSAb9g25.js";import{P as J}from"./plus-B1SMCBOe.js";function K({isOpen:a,onClose:x,onCreated:y}){const{t:n}=S(),[t,c]=s.useState(""),[d,m]=s.useState(!1),[b,v]=s.useState(""),p=()=>{c(""),v(""),x()},l=async()=>{if(v(""),!t.trim()){v(n("admin.pat_label_required"));return}try{m(!0);const o=await w.post("admin/worker-tokens",{json:{label:t.trim()}}).json();c(""),y({token:o.token,id:o.id})}catch(o){const f=o instanceof Error?o.message:n("admin.pat_failed_to_generate");v(f)}finally{m(!1)}};return a?e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center",style:{backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},onClick:o=>{o.target===o.currentTarget&&p()},children:e.jsxs("div",{className:"w-full border border-[var(--border)] bg-[var(--bg-card)]",style:{maxWidth:"480px",borderRadius:"4px",fontFamily:"'JetBrains Mono', monospace"},children:[e.jsxs("div",{className:"flex items-center gap-2 border-b border-[var(--border)] px-5 py-4",children:[e.jsx(T,{className:"h-4 w-4 text-[var(--accent)]"}),e.jsx("span",{className:"text-sm font-medium text-[var(--text-primary)]",children:n("admin.generate_worker_token_title")})]}),e.jsxs("div",{className:"space-y-4 px-5 py-4",children:[b&&e.jsx("div",{className:"border border-red-500/30 bg-red-500/10 px-3 py-2 text-xs text-red-400",style:{borderRadius:"4px"},children:b}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:n("admin.create_one_time_token")}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-xs text-[var(--text-muted)]",children:n("admin.label")}),e.jsx("input",{type:"text",placeholder:n("admin.pat_label_placeholder"),value:t,onChange:o=>c(o.target.value),className:"w-full border border-[var(--border)] bg-[var(--bg-card)] px-3 py-2 text-sm text-[var(--text-primary)] placeholder:text-[var(--text-muted)] focus:border-[var(--accent)] focus:outline-none",style:{borderRadius:"4px",fontFamily:"'JetBrains Mono', monospace"},onKeyDown:o=>{o.key==="Enter"&&l()}}),e.jsx("p",{className:"mt-1 text-xs text-[var(--text-muted)]",children:n("admin.label_identifies_machine")})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 border-t border-[var(--border)] px-5 py-3",children:[e.jsx("button",{onClick:p,className:"border border-[var(--border)] bg-transparent px-4 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:{borderRadius:"4px",fontFamily:"'JetBrains Mono', monospace"},children:n("common.cancel")}),e.jsx("button",{onClick:l,disabled:d,className:"bg-[var(--accent)] px-4 py-1.5 text-xs font-medium text-[#0C0C0C] transition-opacity hover:opacity-80 disabled:opacity-50",style:{borderRadius:"4px",fontFamily:"'JetBrains Mono', monospace"},children:n(d?"admin.generating":"admin.generate")})]})]})}):null}const V=3e3,W=600*1e3;function z({isOpen:a,token:x,tokenId:y,onClose:n}){const{t}=S(),[c,d]=s.useState("command"),[m,b]=s.useState(!1),[v,p]=s.useState(!1),[l,o]=s.useState(""),[f,g]=s.useState(null),i=s.useRef(void 0),N=s.useRef(Date.now()),j=D(),_=typeof window<"u"?window.location.origin:"https://overlord.example.com",k=`overlord setup worker --token ${x} --server ${_}`,C=async()=>{try{await navigator.clipboard.writeText(x),b(!0),setTimeout(()=>b(!1),2e3)}catch{}},r=async()=>{try{await navigator.clipboard.writeText(k),p(!0),setTimeout(()=>p(!1),2e3)}catch{}},L=s.useCallback(async()=>{try{const h=await w.get(`admin/worker-tokens/${y}/status`).json();h.status==="used"&&h.machine_name&&(d("success"),o(h.machine_name),g(h.machine_id??null),i.current&&clearInterval(i.current))}catch{}Date.now()-N.current>W&&(d("timeout"),i.current&&clearInterval(i.current))},[y]),E=()=>{d("waiting"),N.current=Date.now(),i.current=setInterval(L,V)};s.useEffect(()=>()=>{i.current&&clearInterval(i.current)},[]);const M=()=>{n(),f&&j(`/machines/${f}`)};if(!a)return null;const u={fontFamily:"'JetBrains Mono', monospace",borderRadius:"4px"};return e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center",style:{backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},onClick:h=>{h.target===h.currentTarget&&n()},children:e.jsxs("div",{className:"w-full border border-[var(--border)] bg-[var(--bg-card)]",style:{...u,maxWidth:"480px"},children:[e.jsx("div",{className:"flex items-center gap-2 border-b border-[var(--border)] px-5 py-4",children:c==="success"?e.jsxs(e.Fragment,{children:[e.jsx(F,{className:"h-4 w-4 text-[var(--accent)]"}),e.jsx("span",{className:"text-sm font-medium text-[var(--text-primary)]",children:t("admin.worker_registered")})]}):e.jsxs(e.Fragment,{children:[e.jsx(T,{className:"h-4 w-4 text-[var(--accent)]"}),e.jsx("span",{className:"text-sm font-medium text-[var(--text-primary)]",children:t("admin.worker_token_generated")})]})}),e.jsxs("div",{className:"space-y-4 px-5 py-4",children:[c!=="success"&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:t("admin.run_command_desc")}),e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 text-[10px] text-[var(--text-muted)]",children:"Token"}),e.jsxs("div",{className:"relative border border-[var(--border)] bg-[var(--bg-card)] p-3",style:{borderRadius:"4px"},children:[e.jsx("code",{className:"block break-all pr-20 text-xs text-[var(--text-primary)]",children:x}),e.jsx("button",{onClick:C,className:"absolute right-2 top-2 flex items-center gap-1 border border-[var(--border)] bg-transparent px-2 py-1 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:m?e.jsx("span",{className:"text-[var(--accent)]",children:t("common.copied")}):e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(R,{className:"h-3 w-3"})," ",t("common.copy")]})})]})]}),e.jsxs("div",{children:[e.jsx("p",{className:"mb-1 text-[10px] text-[var(--text-muted)]",children:t("admin.setup_command")}),e.jsxs("div",{className:"relative border border-[var(--border)] bg-[var(--bg-card)] p-3",style:{borderRadius:"4px"},children:[e.jsxs("code",{className:"block break-all pr-20 text-xs text-[var(--accent)]",children:["$ ",k]}),e.jsx("button",{onClick:r,className:"absolute right-2 top-2 flex items-center gap-1 border border-[var(--border)] bg-transparent px-2 py-1 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:v?e.jsx("span",{className:"text-[var(--accent)]",children:t("common.copied")}):e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(R,{className:"h-3 w-3"})," ",t("common.copy")]})})]})]}),e.jsx("div",{className:"border border-yellow-500/30 bg-yellow-500/10 px-3 py-2 text-xs text-yellow-400",style:{borderRadius:"4px"},children:t("admin.token_shown_once")})]}),c==="waiting"&&e.jsxs("div",{className:"flex items-center gap-3 border border-[var(--border)] bg-[var(--bg-card)] px-4 py-3",style:{borderRadius:"4px"},children:[e.jsx("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-[var(--accent)] border-t-transparent"}),e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:t("admin.waiting_for_worker")})]}),c==="timeout"&&e.jsx("div",{className:"border border-[var(--border)] bg-[var(--bg-card)] px-4 py-3 text-xs text-[var(--text-muted)]",style:{borderRadius:"4px"},children:t("admin.token_not_yet_used")}),c==="success"&&e.jsxs("div",{className:"border border-[var(--accent)]/30 bg-[var(--accent)]/10 px-4 py-3",style:{borderRadius:"4px"},children:[e.jsx("p",{className:"text-xs text-[var(--accent)]",children:t("admin.worker_registered_success")}),e.jsxs("p",{className:"mt-1 text-xs text-[var(--text-primary)]",children:[t("admin.machine"),": ",e.jsx("span",{className:"text-[var(--accent)]",children:l})]})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 border-t border-[var(--border)] px-5 py-3",children:[c==="command"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:n,className:"border border-[var(--border)] bg-transparent px-4 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:t("common.close")}),e.jsx("button",{onClick:E,className:"bg-[var(--accent)] px-4 py-1.5 text-xs font-medium text-[#0C0C0C] transition-opacity hover:opacity-80",style:u,children:t("admin.copied_wait_for_worker")})]}),c==="waiting"&&e.jsx("button",{onClick:n,className:"border border-[var(--border)] bg-transparent px-4 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:t("admin.close_worker_can_register")}),c==="timeout"&&e.jsx("button",{onClick:n,className:"border border-[var(--border)] bg-transparent px-4 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:t("common.close")}),c==="success"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:n,className:"border border-[var(--border)] bg-transparent px-4 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)] hover:text-[var(--text-primary)]",style:u,children:t("common.close")}),e.jsxs("button",{onClick:M,className:"flex items-center gap-1.5 bg-[var(--accent)] px-4 py-1.5 text-xs font-medium text-[#0C0C0C] transition-opacity hover:opacity-80",style:u,children:[e.jsx($,{className:"h-3 w-3"}),t("admin.view_machine")]})]})]})]})})}function Z(){const{t:a}=S(),[x,y]=s.useState([]),[n,t]=s.useState(!0),[c,d]=s.useState(!1),[m,b]=s.useState(null),[v,p]=s.useState(!1),[l,o]=s.useState(null),[f,g]=s.useState(!1),[i,N]=s.useState(!1),j=s.useCallback(async()=>{try{t(!0);const r=await w.get("admin/worker-tokens").json();y(r)}catch{}finally{t(!1)}},[]);s.useEffect(()=>{j()},[j]);const _=async()=>{if(l){g(!0);try{await w.post(`admin/worker-tokens/${l.id}/revoke`),p(!1),o(null),j()}catch{}finally{g(!1)}}},k=r=>{d(!1),b(r),j()},C=r=>{switch(r){case"active":return"text-green-400";case"used":return"text-blue-400";case"revoked":return"text-red-400";case"expired":return"text-[var(--text-muted)]";default:return"text-[var(--text-muted)]"}};return e.jsxs("div",{className:"font-mono",children:[e.jsxs("div",{className:"mb-6 flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-sm text-[var(--text-primary)]",children:a("admin.tokens_title")}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:a("admin.tokens_subtitle")})]}),e.jsxs("button",{type:"button",className:"flex items-center gap-1.5 rounded-[4px] bg-[var(--accent)] px-3 py-1.5 text-xs text-black hover:opacity-90 transition-opacity",onClick:()=>d(!0),children:[e.jsx(J,{className:"h-3.5 w-3.5"}),a("admin.generate_token")]})]}),!n&&x.some(r=>r.status==="revoked")&&e.jsx("div",{className:"mb-4 flex items-center gap-2",children:e.jsx("button",{type:"button",onClick:()=>N(!i),className:`text-xs transition-colors ${i?"text-[var(--text-primary)]":"text-[var(--text-muted)] hover:text-[var(--text-secondary)]"}`,children:a(i?"admin.hide_revoked":"admin.show_revoked")})}),n?e.jsx("div",{className:"rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] p-4",children:e.jsx(B,{rows:3})}):x.filter(r=>i||r.status!=="revoked").length===0?e.jsx(P,{icon:A,title:a("admin.no_worker_tokens"),description:a("admin.generate_token_desc"),actionLabel:a("admin.generate_token"),onAction:()=>d(!0)}):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)] text-left text-[var(--text-muted)]",children:[e.jsx("th",{className:"pb-2 pr-4 font-normal",children:a("admin.label")}),e.jsx("th",{className:"pb-2 pr-4 font-normal",children:a("admin.purpose")}),e.jsx("th",{className:"pb-2 pr-4 font-normal",children:a("admin.status")}),e.jsx("th",{className:"pb-2 pr-4 font-normal",children:a("common.created_at")}),e.jsx("th",{className:"pb-2 pr-4 font-normal",children:a("admin.expires_at")}),e.jsx("th",{className:"pb-2 font-normal",children:a("common.actions")})]})}),e.jsx("tbody",{children:x.filter(r=>i||r.status!=="revoked").map(r=>e.jsxs("tr",{className:"border-b border-[var(--border-row)] hover:bg-white/[0.02] transition-colors",children:[e.jsx("td",{className:"py-2.5 pr-4 text-[var(--text-primary)]",children:r.label}),e.jsx("td",{className:"py-2.5 pr-4 text-[var(--text-secondary)]",children:r.purpose}),e.jsx("td",{className:"py-2.5 pr-4",children:e.jsx("span",{className:C(r.status),children:r.status})}),e.jsx("td",{className:"py-2.5 pr-4 text-[var(--text-muted)]",children:new Date(r.createdAt).toLocaleDateString()}),e.jsx("td",{className:"py-2.5 pr-4",children:r.expiresAt?e.jsx("span",{className:"text-[var(--text-secondary)]",children:new Date(r.expiresAt).toLocaleDateString()}):e.jsx("span",{className:"text-[var(--text-muted)]",children:"—"})}),e.jsx("td",{className:"py-2.5",children:r.status==="active"&&e.jsxs("button",{type:"button",className:"flex items-center gap-1 rounded-[4px] px-2 py-1 text-red-400 hover:text-red-300 hover:bg-white/[0.05] transition-colors",onClick:()=>{o(r),p(!0)},children:[e.jsx(I,{className:"h-3.5 w-3.5"}),a("admin.revoke")]})})]},r.id))})]})}),e.jsx(K,{isOpen:c,onClose:()=>d(!1),onCreated:k}),m&&e.jsx(z,{isOpen:!!m,token:m.token,tokenId:m.id,onClose:()=>b(null)}),e.jsx(O,{isOpen:v,onClose:()=>{p(!1),o(null)},onConfirm:_,title:a("admin.revoke_token"),message:a("admin.revoke_token_confirm",{label:(l==null?void 0:l.label)??""}),confirmLabel:a("admin.revoke"),confirmVariant:"danger",isLoading:f})]})}export{Z as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{R as A,d as he,u as Y,a as fe,r as F,j as v,f as J,t as me}from"./index-
|
|
1
|
+
import{R as A,d as he,u as Y,a as fe,r as F,j as v,f as J,t as me}from"./index-CtAu_XZ5.js";var ge=Object.defineProperty,T=Object.getOwnPropertySymbols,V=Object.prototype.hasOwnProperty,X=Object.prototype.propertyIsEnumerable,W=(u,a,i)=>a in u?ge(u,a,{enumerable:!0,configurable:!0,writable:!0,value:i}):u[a]=i,j=(u,a)=>{for(var i in a||(a={}))V.call(a,i)&&W(u,i,a[i]);if(T)for(var i of T(a))X.call(a,i)&&W(u,i,a[i]);return u},k=(u,a)=>{var i={};for(var c in u)V.call(u,c)&&a.indexOf(c)<0&&(i[c]=u[c]);if(u!=null&&T)for(var c of T(u))a.indexOf(c)<0&&X.call(u,c)&&(i[c]=u[c]);return i};/**
|
|
2
2
|
* @license QR Code generator library (TypeScript)
|
|
3
3
|
* Copyright (c) Project Nayuki.
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c,d as x,a as d,j as e,o as a}from"./index-
|
|
1
|
+
import{c,d as x,a as d,j as e,o as a}from"./index-CtAu_XZ5.js";import{K as l}from"./key-Cix4k6UI.js";import{S as m}from"./settings-H-4c0_mh.js";/**
|
|
2
2
|
* @license lucide-react v0.469.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|