quadwork 1.13.0 → 1.14.0
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/bin/quadwork.js +42 -5
- package/out/404.html +1 -1
- package/out/__next.__PAGE__.txt +3 -3
- package/out/__next._full.txt +18 -17
- package/out/__next._head.txt +4 -4
- package/out/__next._index.txt +8 -7
- package/out/__next._tree.txt +2 -2
- package/out/_next/static/chunks/006q0qhjso45i.js +29 -0
- package/out/_next/static/chunks/0khv6othabbrd.js +1 -0
- package/out/_next/static/chunks/0nuk4qfi43kgg.js +1 -0
- package/out/_next/static/chunks/{11h7y0f5o9.hx.js → 0r4a6_~tyldb5.js} +1 -1
- package/out/_next/static/chunks/0xi5xtcy5283i.js +1 -0
- package/out/_next/static/chunks/0~j-w8d_u.gve.js +1 -0
- package/out/_next/static/chunks/103nd9.e5nlgc.css +2 -0
- package/out/_next/static/chunks/12-m1n_dwr8ya.js +1 -0
- package/out/_not-found/__next._full.txt +19 -18
- package/out/_not-found/__next._head.txt +4 -4
- package/out/_not-found/__next._index.txt +8 -7
- package/out/_not-found/__next._not-found.__PAGE__.txt +2 -2
- package/out/_not-found/__next._not-found.txt +3 -3
- package/out/_not-found/__next._tree.txt +2 -2
- package/out/_not-found.html +1 -1
- package/out/_not-found.txt +19 -18
- package/out/app-shell/__next._full.txt +19 -18
- package/out/app-shell/__next._head.txt +4 -4
- package/out/app-shell/__next._index.txt +8 -7
- package/out/app-shell/__next._tree.txt +2 -2
- package/out/app-shell/__next.app-shell.__PAGE__.txt +2 -2
- package/out/app-shell/__next.app-shell.txt +3 -3
- package/out/app-shell.html +1 -1
- package/out/app-shell.txt +19 -18
- package/out/index.html +1 -1
- package/out/index.txt +18 -17
- package/out/project/_/__next._full.txt +20 -19
- package/out/project/_/__next._head.txt +4 -4
- package/out/project/_/__next._index.txt +8 -7
- package/out/project/_/__next._tree.txt +2 -2
- package/out/project/_/__next.project.$d$id.__PAGE__.txt +3 -3
- package/out/project/_/__next.project.$d$id.txt +3 -3
- package/out/project/_/__next.project.txt +3 -3
- package/out/project/_/queue/__next._full.txt +20 -19
- package/out/project/_/queue/__next._head.txt +4 -4
- package/out/project/_/queue/__next._index.txt +8 -7
- package/out/project/_/queue/__next._tree.txt +2 -2
- package/out/project/_/queue/__next.project.$d$id.queue.__PAGE__.txt +3 -3
- package/out/project/_/queue/__next.project.$d$id.queue.txt +3 -3
- package/out/project/_/queue/__next.project.$d$id.txt +3 -3
- package/out/project/_/queue/__next.project.txt +3 -3
- package/out/project/_/queue.html +1 -1
- package/out/project/_/queue.txt +20 -19
- package/out/project/_.html +1 -1
- package/out/project/_.txt +20 -19
- package/out/settings/__next._full.txt +20 -19
- package/out/settings/__next._head.txt +4 -4
- package/out/settings/__next._index.txt +8 -7
- package/out/settings/__next._tree.txt +2 -2
- package/out/settings/__next.settings.__PAGE__.txt +3 -3
- package/out/settings/__next.settings.txt +3 -3
- package/out/settings.html +1 -1
- package/out/settings.txt +20 -19
- package/out/setup/__next._full.txt +20 -19
- package/out/setup/__next._head.txt +4 -4
- package/out/setup/__next._index.txt +8 -7
- package/out/setup/__next._tree.txt +2 -2
- package/out/setup/__next.setup.__PAGE__.txt +3 -3
- package/out/setup/__next.setup.txt +3 -3
- package/out/setup.html +1 -1
- package/out/setup.txt +20 -19
- package/package.json +1 -1
- package/server/index.js +66 -20
- package/out/_next/static/chunks/096899sx89oxq.js +0 -1
- package/out/_next/static/chunks/0aldkx8l9xukk.js +0 -1
- package/out/_next/static/chunks/0b.8gafu8~jlp.js +0 -1
- package/out/_next/static/chunks/0nk3kw~5j75~v.css +0 -2
- package/out/_next/static/chunks/0rxi-m9onh_sa.js +0 -1
- package/out/_next/static/chunks/0wuucfn72wx0t.js +0 -1
- package/out/_next/static/chunks/13w.n.3zipzvz.js +0 -27
- /package/out/_next/static/{4nR7KJBgnDoDp9KRiNBWM → Wq22D2-1FiONyXNc2N4j6}/_buildManifest.js +0 -0
- /package/out/_next/static/{4nR7KJBgnDoDp9KRiNBWM → Wq22D2-1FiONyXNc2N4j6}/_clientMiddlewareManifest.js +0 -0
- /package/out/_next/static/{4nR7KJBgnDoDp9KRiNBWM → Wq22D2-1FiONyXNc2N4j6}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,95773,e=>{"use strict";var t=e.i(43476),r=e.i(71645),a=e.i(18566),s=e.i(52368);let n={head:{display_name:"Head",command:"claude",cwd:"",model:"opus",agents_md:""},re1:{display_name:"RE1",command:"claude",cwd:"",model:"sonnet",agents_md:""},re2:{display_name:"RE2",command:"claude",cwd:"",model:"sonnet",agents_md:""},dev:{display_name:"Dev",command:"claude",cwd:"",model:"sonnet",agents_md:""}},o=[{value:"claude",label:"Claude Code"},{value:"codex",label:"Codex"}],l=["opus","sonnet","haiku"],c={en:{loading:"Loading...",title:"Settings",save:"Save",saving:"Saving...",saved:"Saved",operatorIdentity:"Operator Identity",yourNameInChat:"Your name in chat",language:"Language",operatorHelp:"Shows next to your messages in the AgentChattr chat panel. Defaults to user if blank. Allowed: 1-32 letters, digits, dash, underscore (matches AgentChattr name rules; other characters are stripped server-side). Reserved agent names like head, dev, re1, re2, and system are rejected and fall back to user.",global:"Global",dashboardPort:"QuadWork Dashboard Port",agentChattrUrlGlobal:"AgentChattr URL (global override)",globalHelp:"The dashboard binds to the QuadWork port. The AgentChattr URL is the v1 fallback; new projects use a per-project AgentChattr clone and ignore this field.",defaults:"Defaults",defaultAgentCli:"Default agent CLI",reviewerGithubUser:"Reviewer GitHub user",reviewerGithubToken:"Reviewer GitHub token",configured:"Configured",notConfigured:"Not configured",pasteNewToken:"Paste new token",defaultsHelp:"The default CLI seeds new project agents. The reviewer GitHub user/token are used by RE1/RE2 to post PR review comments without your personal token. The token is written to ~/.quadwork/reviewer-token (mode 0600) and is never returned by the API.",system:"System",keepAwake:"Keep Awake",on:"on",off:"off",stop:"Stop",start:"Start",keepAwakeHelp:"Prevents this machine from sleeping while agents are running. Machine-level (not per-project) - uses caffeinate on macOS.",cleanup:"Cleanup",cleanupIntro:"Each project now has its own AgentChattr clone at ~/.quadwork/{id}/agentchattr (~77 MB). After all projects are migrated, the legacy global install can be removed:",cleanupSingle:"To remove a single project's clone and config entry:",cleanupHelp:"Both commands prompt for confirmation. Worktrees and source repos are never touched. See npx quadwork --help or the README's Disk Usage section for details.",activeProjects:"Active Projects",projectName:"Project Name",githubRepo:"GitHub Repo",workingDirectory:"Working Directory",agents:"Agents",name:"Name",command:"Command",model:"Model",cwd:"CWD",agentsMd:"AGENTS.md",owner:"Owner",reviewer:"Reviewer",builder:"Builder",edit:"edit",oneCliInstalled:"Only one CLI installed - install the other for more options",agentsMdPlaceholder:"# AGENTS.md seed content for this agent...",agentChattr:"AgentChattr",agentChattrUrl:"AgentChattr URL",sessionToken:"Session Token",optional:"(optional)",mcpHttpPort:"MCP HTTP Port",mcpSsePort:"MCP SSE Port",restoreProject:"Restore Project",archive:"Archive",remove:"Remove",removeQuestion:"Remove?",confirm:"Confirm",cancel:"Cancel",addProject:"+ Add Project",archived:"Archived",restore:"Restore",confirmRemove:"Confirm Remove",newProject:"New Project"},ko:{loading:"로딩 중...",title:"설정",save:"저장",saving:"저장 중...",saved:"저장됨",operatorIdentity:"운영자 정보",yourNameInChat:"채팅에서의 이름",language:"언어",operatorHelp:"AgentChattr 채팅 패널에서 내 메시지 옆에 표시됩니다. 비워두면 기본값은 user입니다. 허용: 1-32자의 영문, 숫자, 하이픈, 언더스코어(AgentChattr 이름 규칙과 동일). 다른 문자는 서버에서 제거됩니다. head, dev, re1, re2, system 같은 예약 이름은 거부되고 user로 대체됩니다.",global:"전역",dashboardPort:"QuadWork 대시보드 포트",agentChattrUrlGlobal:"AgentChattr URL (전역 오버라이드)",globalHelp:"대시보드는 QuadWork 포트에 바인딩됩니다. AgentChattr URL은 v1 호환용 기본값이며, 새 프로젝트는 프로젝트별 AgentChattr 클론을 사용하므로 이 필드는 무시됩니다.",defaults:"기본값",defaultAgentCli:"기본 에이전트 CLI",reviewerGithubUser:"리뷰어 GitHub 사용자",reviewerGithubToken:"리뷰어 GitHub 토큰",configured:"설정됨",notConfigured:"미설정",pasteNewToken:"새 토큰 붙여넣기",defaultsHelp:"기본 CLI는 새 프로젝트 에이전트의 초기값으로 사용됩니다. 리뷰어 GitHub 사용자/토큰은 개인 토큰 없이 RE1/RE2가 PR 리뷰 댓글을 남길 때 사용됩니다. 토큰은 ~/.quadwork/reviewer-token (권한 0600)에 저장되며 API로는 반환되지 않습니다.",system:"시스템",keepAwake:"절전 방지",on:"켜짐",off:"꺼짐",stop:"중지",start:"시작",keepAwakeHelp:"에이전트가 실행되는 동안 이 기기가 잠들지 않도록 합니다. 기기 전체 설정이며(프로젝트별 아님) macOS에서는 caffeinate를 사용합니다.",cleanup:"정리",cleanupIntro:"각 프로젝트는 이제 ~/.quadwork/{id}/agentchattr (~77 MB)에 자체 AgentChattr 클론을 가집니다. 모든 프로젝트 마이그레이션이 끝나면 예전 전역 설치는 제거할 수 있습니다:",cleanupSingle:"특정 프로젝트의 클론과 설정 항목만 제거하려면:",cleanupHelp:"두 명령 모두 확인 절차가 있습니다. 워크트리와 소스 저장소는 건드리지 않습니다. 자세한 내용은 npx quadwork --help 또는 README의 Disk Usage 섹션을 참고하세요.",activeProjects:"활성 프로젝트",projectName:"프로젝트 이름",githubRepo:"GitHub 저장소",workingDirectory:"작업 디렉터리",agents:"에이전트",name:"이름",command:"명령어",model:"모델",cwd:"작업 디렉터리",agentsMd:"AGENTS.md",owner:"소유자",reviewer:"검토자",builder:"개발자",edit:"편집",oneCliInstalled:"CLI 하나만 설치됨 - 더 많은 옵션을 위해 다른 CLI를 설치하세요",agentsMdPlaceholder:"# 이 에이전트의 AGENTS.md 초기 내용...",agentChattr:"AgentChattr",agentChattrUrl:"AgentChattr URL",sessionToken:"세션 토큰",optional:"(선택)",mcpHttpPort:"MCP HTTP 포트",mcpSsePort:"MCP SSE 포트",restoreProject:"프로젝트 복원",archive:"보관",remove:"제거",removeQuestion:"제거할까요?",confirm:"확인",cancel:"취소",addProject:"+ 프로젝트 추가",archived:"보관됨",restore:"복원",confirmRemove:"제거 확인",newProject:"새 프로젝트"}};function d({label:e,value:r,onChange:a,onBlur:s,type:n="text",placeholder:o}){return(0,t.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,t.jsx)("label",{className:"text-[11px] text-text-muted uppercase tracking-wider",children:e}),(0,t.jsx)("input",{type:n,value:r,onChange:e=>a(e.target.value),onBlur:s,placeholder:o,className:"bg-transparent border border-border px-2 py-1.5 text-[12px] text-text outline-none focus:border-accent"})]})}function i({label:e,value:r,onChange:a,options:s}){return(0,t.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,t.jsx)("label",{className:"text-[11px] text-text-muted uppercase tracking-wider",children:e}),(0,t.jsx)("select",{value:r,onChange:e=>a(e.target.value),className:"bg-transparent border border-border px-2 py-1.5 text-[12px] text-text outline-none focus:border-accent cursor-pointer",children:s.map(e=>(0,t.jsx)("option",{value:e.value,className:"bg-bg-surface",children:e.label},e.value))})]})}e.s(["default",0,function(){let{locale:e,setLocale:p}=(0,s.useLocale)(),x=c[e],u=(0,a.useSearchParams)(),[m,h]=(0,r.useState)(null),[g,b]=(0,r.useState)(!1),[j,v]=(0,r.useState)(!1),[f,N]=(0,r.useState)({}),[k,w]=(0,r.useState)(null),[C,y]=(0,r.useState)(!1),[S,P]=(0,r.useState)(null),[_,A]=(0,r.useState)("8400"),[T,R]=(0,r.useState)({}),H=(e,t,r)=>{let a=`${e}-${t}`;return a in T?T[a]:r?String(r):""},I=(e,t,r)=>{R(a=>({...a,[`${e}-${t}`]:r}))},$=(e,t,r,a)=>{let s=parseInt(T[`${t}-${r}`]??"",10),n=Number.isFinite(s)&&s>0&&s<=65535?s:void 0;X(e,{[a]:n}),R(e=>({...e,[`${t}-${r}`]:n?String(n):""}))},E=(0,r.useCallback)(()=>{fetch("/api/config").then(e=>{if(!e.ok)throw Error(`${e.status}`);return e.json()}).then(e=>(A(String(e.port||8400)),h({port:e.port||8400,agentchattr_url:e.agentchattr_url||"http://127.0.0.1:8300",agentchattr_token:e.agentchattr_token||"",default_backend:e.default_backend||"claude",reviewer_github_user:e.reviewer_github_user||"",operator_name:e.operator_name||"user",projects:e.projects||[]}))).catch(()=>{})},[]);(0,r.useEffect)(()=>{E()},[E]),(0,r.useEffect)(()=>{fetch("/api/cli-status").then(e=>e.json()).then(e=>P(e)).catch(()=>{})},[]);let[G,U]=(0,r.useState)(null),[O,L]=(0,r.useState)(""),[M,D]=(0,r.useState)(!1),[q,B]=(0,r.useState)(!1),[W,Q]=(0,r.useState)(!1),J=(0,r.useCallback)(()=>{fetch("/api/setup/reviewer-token-status").then(e=>e.ok?e.json():{exists:!1}).then(e=>U(!!e.exists)).catch(()=>U(!1))},[]),F=(0,r.useCallback)(()=>{fetch("/api/caffeinate/status").then(e=>e.ok?e.json():{active:!1}).then(e=>B(!!e.active)).catch(()=>{})},[]);(0,r.useEffect)(()=>{J(),F()},[J,F]);let K=async()=>{if(O.trim()){D(!0);try{(await fetch("/api/setup/save-token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:O.trim()})})).ok&&(L(""),J())}finally{D(!1)}}},z=async()=>{Q(!0);try{(await fetch(q?"/api/caffeinate/stop":"/api/caffeinate/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})})).ok&&F()}finally{Q(!1)}};(0,r.useEffect)(()=>{m&&"true"===u.get("add")&&!C&&(y(!0),ee())},[m,u,C]);let Y=async()=>{if(m){b(!0);try{let e=await fetch("/api/config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)});if(!e.ok)throw Error(`${e.status}`);v(!0),setTimeout(()=>v(!1),2e3)}catch(e){console.error(e)}b(!1)}},V=(e,t)=>{m&&h({...m,[e]:t})},X=(e,t)=>{if(!m)return;let r=[...m.projects];r[e]={...r[e],...t},h({...m,projects:r})},Z=(e,t,r)=>{if(!m)return;let a=[...m.projects],s={...a[e].agents};s[t]={...s[t],...r},a[e]={...a[e],agents:s},h({...m,projects:a})},ee=()=>{if(!m)return;let e=`project-${Date.now()}`,t=m.default_backend||"claude",r=S&&!1===S[t]?S&&S.claude&&!S.codex?"claude":S&&!S.claude&&S.codex?"codex":"claude":t,a={};for(let[e,t]of Object.entries(n))a[e]={...t,command:r};let s={id:e,name:x.newProject,repo:"owner/repo",working_dir:"",agents:a};h({...m,projects:[...m.projects,s]}),N({...f,[e]:!0})},et=(0,r.useRef)({}),er=(0,r.useRef)({}),ea=e=>{m&&X(e,{archived:!1})},es=e=>{if(!m)return;let t=m.projects.filter((t,r)=>r!==e);h({...m,projects:t}),w(null)};return m?(0,t.jsxs)("div",{className:"h-full w-full overflow-y-auto p-6",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-6",children:[(0,t.jsx)("h1",{className:"text-lg font-semibold text-text tracking-tight",children:x.title}),(0,t.jsx)("button",{onClick:Y,disabled:g,className:"px-4 py-1.5 bg-accent text-bg text-[12px] font-semibold hover:bg-accent-dim transition-colors disabled:opacity-50",children:g?x.saving:j?x.saved:x.save})]}),(0,t.jsxs)("section",{className:"mb-8",children:[(0,t.jsx)("h2",{className:"text-[11px] text-text-muted uppercase tracking-wider mb-3",children:x.operatorIdentity}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-[minmax(0,2fr)_minmax(220px,1fr)] gap-3 items-end",children:[(0,t.jsx)(d,{label:x.yourNameInChat,value:m.operator_name||"user",onChange:e=>V("operator_name",e),placeholder:"user"}),(0,t.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,t.jsx)("label",{className:"text-[11px] text-text-muted uppercase tracking-wider",children:x.language}),(0,t.jsx)("div",{className:"flex items-center gap-2 h-[35px]",children:["en","ko"].map(r=>{let a=e===r;return(0,t.jsx)("button",{type:"button",onClick:()=>p(r),className:`px-3 py-1.5 text-[12px] border transition-colors ${a?"border-accent bg-accent text-bg":"border-border text-text-muted hover:text-text hover:border-accent"}`,children:r},r)})})]})]}),(0,t.jsx)("p",{className:"mt-2 text-[10px] text-text-muted leading-snug",children:x.operatorHelp})]}),(0,t.jsxs)("section",{className:"mb-8",children:[(0,t.jsx)("h2",{className:"text-[11px] text-text-muted uppercase tracking-wider mb-3",children:x.global}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[(0,t.jsx)(d,{label:x.dashboardPort,value:_,onChange:e=>A(e),onBlur:()=>{let e=parseInt(_,10),t=Number.isFinite(e)&&e>0&&e<=65535?e:8400;V("port",t),A(String(t))},type:"number"}),(0,t.jsx)(d,{label:x.agentChattrUrlGlobal,value:m.agentchattr_url,onChange:e=>V("agentchattr_url",e),placeholder:"http://127.0.0.1:8300"})]}),(0,t.jsx)("p",{className:"mt-2 text-[10px] text-text-muted leading-snug",children:x.globalHelp})]}),(0,t.jsxs)("section",{className:"mb-8",children:[(0,t.jsx)("h2",{className:"text-[11px] text-text-muted uppercase tracking-wider mb-3",children:x.defaults}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3 items-end",children:[(0,t.jsx)(i,{label:x.defaultAgentCli,value:m.default_backend||"claude",onChange:e=>V("default_backend",e),options:o.map(e=>({value:e.value,label:e.label+(S&&!S[e.value]?" (not installed)":"")}))}),(0,t.jsx)(d,{label:x.reviewerGithubUser,value:m.reviewer_github_user||"",onChange:e=>V("reviewer_github_user",e),placeholder:"reviewer-bot"}),(0,t.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,t.jsx)("label",{className:"text-[11px] text-text-muted uppercase tracking-wider",children:x.reviewerGithubToken}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:`w-1.5 h-1.5 rounded-full ${G?"bg-accent":"bg-text-muted"}`}),(0,t.jsx)("span",{className:"text-[11px] text-text-muted",children:null===G?"…":G?x.configured:x.notConfigured})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 mt-1",children:[(0,t.jsx)("input",{type:"password",value:O,onChange:e=>L(e.target.value),placeholder:x.pasteNewToken,className:"flex-1 bg-transparent border border-border px-2 py-1 text-[11px] text-text outline-none focus:border-accent font-mono"}),(0,t.jsx)("button",{onClick:K,disabled:M||!O.trim(),className:"px-2 py-1 text-[11px] font-semibold text-bg bg-accent hover:bg-accent-dim disabled:opacity-50 transition-colors",children:M?x.saving:x.save})]})]})]}),(0,t.jsx)("p",{className:"mt-2 text-[10px] text-text-muted leading-snug",children:x.defaultsHelp})]}),(0,t.jsxs)("section",{className:"mb-8",children:[(0,t.jsx)("h2",{className:"text-[11px] text-text-muted uppercase tracking-wider mb-3",children:x.system}),(0,t.jsxs)("div",{className:"border border-border p-3 flex items-center gap-3",children:[(0,t.jsx)("span",{className:`w-1.5 h-1.5 rounded-full ${q?"bg-accent":"bg-text-muted"}`}),(0,t.jsxs)("span",{className:"text-[11px] text-text",children:[x.keepAwake," - ",q?x.on:x.off]}),(0,t.jsx)("button",{onClick:z,disabled:W,className:"px-2 py-1 text-[11px] border border-border text-text-muted hover:text-text hover:border-accent disabled:opacity-50 transition-colors",children:W?"…":q?x.stop:x.start}),(0,t.jsx)("span",{className:"text-[10px] text-text-muted",children:x.keepAwakeHelp})]})]}),(0,t.jsxs)("section",{className:"mb-8",children:[(0,t.jsx)("h2",{className:"text-[11px] text-text-muted uppercase tracking-wider mb-3",children:x.cleanup}),(0,t.jsxs)("div",{className:"border border-border p-3 text-[11px] text-text-muted space-y-1",children:[(0,t.jsxs)("p",{children:[x.cleanupIntro.split("~/.quadwork/{id}/agentchattr")[0]," ",(0,t.jsx)("code",{className:"bg-bg-surface px-1 rounded",children:"~/.quadwork/{id}/agentchattr"}),x.cleanupIntro.includes("~/.quadwork/{id}/agentchattr")?x.cleanupIntro.split("~/.quadwork/{id}/agentchattr")[1]:""]}),(0,t.jsx)("pre",{className:"mt-1 p-2 bg-bg-surface text-text rounded font-mono text-[11px]",children:"npx quadwork cleanup --legacy"}),(0,t.jsx)("p",{className:"mt-2",children:x.cleanupSingle}),(0,t.jsx)("pre",{className:"mt-1 p-2 bg-bg-surface text-text rounded font-mono text-[11px]",children:"npx quadwork cleanup --project <id>"}),(0,t.jsx)("p",{className:"mt-2 text-text-muted/80",children:x.cleanupHelp})]})]}),(0,t.jsx)("hr",{className:"border-border mb-6"}),(0,t.jsxs)("section",{className:"mb-6",children:[(0,t.jsx)("h2",{className:"text-[11px] text-text-muted uppercase tracking-wider mb-3",children:x.activeProjects}),m.projects.filter(e=>!e.archived).map(e=>{let r=m.projects.indexOf(e);return(0,t.jsxs)("div",{className:"border border-border mb-3",children:[(0,t.jsx)("div",{className:"flex items-center justify-between px-3 py-2",children:(0,t.jsx)("span",{className:"text-[12px] text-text font-semibold",children:e.name})}),(0,t.jsxs)("div",{className:"px-3 pb-3 border-t border-border",children:[(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3 mt-3",children:[(0,t.jsx)(d,{label:x.projectName,value:e.name,onChange:e=>((e,t)=>{if(!m)return;let r=m.projects[e],a=`project:${r.id}`;a in et.current||(et.current[a]=r.name),X(e,{name:t}),er.current[a]&&clearTimeout(er.current[a]),er.current[a]=setTimeout(()=>{let e=et.current[a];e&&e!==t&&fetch("/api/rename",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:"project",projectId:r.id,oldName:e,newName:t})}).then(()=>E()).catch(()=>{}),delete et.current[a],delete er.current[a]},800)})(r,e)}),(0,t.jsx)(d,{label:x.githubRepo,value:e.repo,onChange:e=>X(r,{repo:e}),placeholder:"owner/repo"}),(0,t.jsx)(d,{label:x.workingDirectory,value:e.working_dir||"",onChange:e=>X(r,{working_dir:e}),placeholder:"/path/to/project"})]}),(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsx)("h3",{className:"text-[10px] text-text-muted uppercase tracking-wider mb-2",children:x.agents}),S&&(S.claude?!S.codex:S.codex)&&(0,t.jsxs)("div",{className:"border border-accent/20 bg-accent/5 p-2 mb-2 text-[10px]",children:[(0,t.jsx)("span",{className:"text-text",children:x.oneCliInstalled}),(0,t.jsx)("code",{className:"text-accent ml-2",children:S.claude?"npm install -g codex":"npm install -g @anthropic-ai/claude-code"})]}),(0,t.jsxs)("div",{className:"border border-border",children:[(0,t.jsxs)("div",{className:"grid grid-cols-5 gap-0 px-2 py-1 border-b border-border text-[10px] text-text-muted uppercase",children:[(0,t.jsx)("span",{children:x.name}),(0,t.jsx)("span",{children:x.command}),(0,t.jsx)("span",{children:x.model}),(0,t.jsx)("span",{children:x.cwd}),(0,t.jsx)("span",{children:x.agentsMd})]}),Object.entries(e.agents||{}).map(([a,s])=>(0,t.jsxs)("div",{className:"border-b border-border/50 last:border-b-0",children:[(0,t.jsxs)("div",{className:"grid grid-cols-5 gap-0 px-2 py-1",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,t.jsx)("input",{value:s.display_name||a.toUpperCase(),onChange:e=>((e,t,r)=>{if(!m)return;let a=m.projects[e],s=a.agents?.[t],n=`agent:${a.id}:${t}`;n in et.current||(et.current[n]=s?.display_name||t.toUpperCase()),Z(e,t,{display_name:r}),er.current[n]&&clearTimeout(er.current[n]),er.current[n]=setTimeout(()=>{let e=et.current[n];e&&e!==r&&fetch("/api/rename",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:"agent",projectId:a.id,agentId:t,oldName:e,newName:r})}).then(()=>E()).catch(()=>{}),delete et.current[n],delete er.current[n]},800)})(r,a,e.target.value),className:"bg-transparent text-[11px] text-text font-semibold outline-none border border-border px-1 py-0.5 focus:border-accent"}),(0,t.jsx)("span",{className:"text-[9px] text-text-muted px-1",children:"head"===a?x.owner:a.startsWith("reviewer")?x.reviewer:x.builder})]}),(0,t.jsx)("select",{value:s.command||"claude",onChange:e=>Z(r,a,{command:e.target.value}),className:"bg-transparent text-[11px] text-text outline-none border border-border px-1 py-0.5 focus:border-accent",title:S&&1===Object.values(S).filter(Boolean).length?x.oneCliInstalled:void 0,children:o.map(e=>(0,t.jsxs)("option",{value:e.value,className:"bg-bg-surface",disabled:!!S&&!S[e.value],children:[e.label,S&&!S[e.value]?" (not installed)":""]},e.value))}),(0,t.jsx)("select",{value:s.model||"sonnet",onChange:e=>Z(r,a,{model:e.target.value}),className:"bg-transparent text-[11px] text-text outline-none border border-border px-1 py-0.5 focus:border-accent",children:l.map(e=>(0,t.jsx)("option",{value:e,className:"bg-bg-surface",children:e},e))}),(0,t.jsx)("input",{value:s.cwd||"",onChange:e=>Z(r,a,{cwd:e.target.value}),placeholder:"/path/to/worktree",className:"bg-transparent text-[11px] text-text outline-none border border-border px-1 py-0.5 focus:border-accent"}),(0,t.jsx)("button",{onClick:()=>N({...f,[`${e.id}-${a}-md`]:!f[`${e.id}-${a}-md`]}),className:"text-[10px] text-text-muted hover:text-accent transition-colors text-left px-1",children:f[`${e.id}-${a}-md`]?`▾ ${x.edit}`:`▸ ${x.edit}`})]}),f[`${e.id}-${a}-md`]&&(0,t.jsx)("div",{className:"px-2 pb-2",children:(0,t.jsx)("textarea",{value:s.agents_md||"",onChange:e=>Z(r,a,{agents_md:e.target.value}),placeholder:x.agentsMdPlaceholder,rows:8,className:"w-full bg-transparent border border-border px-2 py-1.5 text-[11px] text-text outline-none focus:border-accent resize-y"})})]},a))]})]}),(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsx)("h3",{className:"text-[10px] text-text-muted uppercase tracking-wider mb-2",children:x.agentChattr}),(0,t.jsx)("div",{className:"border border-border p-3",children:(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[(0,t.jsx)(d,{label:x.agentChattrUrl,value:e.agentchattr_url||"",onChange:e=>X(r,{agentchattr_url:e}),placeholder:"http://127.0.0.1:8300"}),(0,t.jsx)(d,{label:x.sessionToken,value:e.agentchattr_token||"",onChange:e=>X(r,{agentchattr_token:e}),placeholder:x.optional}),(0,t.jsx)(d,{label:x.mcpHttpPort,value:H(e.id,"http",e.mcp_http_port),onChange:t=>I(e.id,"http",t),onBlur:()=>$(r,e.id,"http","mcp_http_port"),type:"number",placeholder:"8200"}),(0,t.jsx)(d,{label:x.mcpSsePort,value:H(e.id,"sse",e.mcp_sse_port),onChange:t=>I(e.id,"sse",t),onBlur:()=>$(r,e.id,"sse","mcp_sse_port"),type:"number",placeholder:"8201"})]})})]}),(0,t.jsxs)("div",{className:"mt-4 flex justify-end gap-3",children:[e.archived?(0,t.jsx)("button",{onClick:()=>ea(r),className:"text-[11px] text-accent hover:underline",children:x.restoreProject}):(0,t.jsx)("button",{onClick:()=>{m&&X(r,{archived:!0})},className:"text-[11px] text-text-muted hover:text-text transition-colors",children:x.archive}),k===e.id?(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-[11px] text-error",children:x.removeQuestion}),(0,t.jsx)("button",{onClick:()=>es(r),className:"px-2 py-1 text-[11px] bg-error text-bg font-semibold",children:x.confirm}),(0,t.jsx)("button",{onClick:()=>w(null),className:"px-2 py-1 text-[11px] text-text-muted border border-border",children:x.cancel})]}):(0,t.jsx)("button",{onClick:()=>w(e.id),className:"text-[11px] text-error hover:text-text transition-colors",children:x.remove})]})]})]},e.id)}),(0,t.jsx)("button",{onClick:ee,className:"w-full border border-dashed border-border py-2 text-[12px] text-text-muted hover:text-text hover:border-text-muted transition-colors",children:x.addProject}),m.projects.some(e=>e.archived)&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("hr",{className:"border-border my-4"}),(0,t.jsx)("h2",{className:"text-[11px] text-text-muted uppercase tracking-wider mb-3",children:x.archived}),m.projects.filter(e=>e.archived).map(e=>{let r=m.projects.indexOf(e);return(0,t.jsx)("div",{className:"border border-border mb-3 opacity-60",children:(0,t.jsxs)("div",{className:"flex items-center justify-between px-3 py-2",children:[(0,t.jsx)("span",{className:"text-[12px] text-text-muted",children:e.name}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("button",{onClick:()=>ea(r),className:"text-[11px] text-accent hover:underline",children:x.restore}),(0,t.jsx)("button",{onClick:()=>{k===e.id?es(r):w(e.id)},className:"text-[11px] text-error hover:underline",children:k===e.id?x.confirmRemove:x.remove})]})]})},e.id)})]})]}),(0,t.jsx)("div",{className:"flex justify-end pb-6",children:(0,t.jsx)("button",{onClick:Y,disabled:g,className:"px-4 py-1.5 bg-accent text-bg text-[12px] font-semibold hover:bg-accent-dim transition-colors disabled:opacity-50",children:g?x.saving:j?x.saved:x.save})})]}):(0,t.jsx)("div",{className:"p-6 text-text-muted text-xs",children:x.loading})}])}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,98183,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={assign:function(){return i},searchParamsToUrlQuery:function(){return s},urlQueryToSearchParams:function(){return l}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});function s(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function a(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function l(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,a(e));else t.set(r,a(n));return t}function i(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,n]of r.entries())e.append(t,n)}return e}},18967,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={DecodeError:function(){return g},MiddlewareNotFoundError:function(){return y},MissingStaticPage:function(){return v},NormalizeError:function(){return b},PageNotFoundError:function(){return j},SP:function(){return x},ST:function(){return m},WEB_VITALS:function(){return s},execOnce:function(){return a},getDisplayName:function(){return d},getLocationOrigin:function(){return c},getURL:function(){return u},isAbsoluteUrl:function(){return i},isResSent:function(){return f},loadGetInitialProps:function(){return p},normalizeRepeatedSlashes:function(){return h},stringifyError:function(){return w}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let s=["CLS","FCP","FID","INP","LCP","TTFB"];function a(e){let t,r=!1;return(...n)=>(r||(r=!0,t=e(...n)),t)}let l=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,i=e=>l.test(e);function c(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function u(){let{href:e}=window.location,t=c();return e.substring(t.length)}function d(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function f(e){return e.finished||e.headersSent}function h(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function p(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await p(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&f(r))return n;if(!n)throw Object.defineProperty(Error(`"${d(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return n}let x="u">typeof performance,m=x&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class g extends Error{}class b extends Error{}class j extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class v extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class y extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function w(e){return JSON.stringify({message:e.message,stack:e.stack})}},33525,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},18566,(e,t,r)=>{t.exports=e.r(76562)},52368,e=>{"use strict";var t=e.i(43476),r=e.i(71645);let n="qw-locale";function o(e){return"ko"===e?"ko":"en"}let s=(0,r.createContext)(null);e.s(["LocaleProvider",0,function({children:e}){let[a,l]=(0,r.useState)(!1),[i,c]=(0,r.useState)("en");(0,r.useEffect)(()=>{c(function(){try{let e=window.localStorage.getItem(n);if(e)return o(e)}catch{}return window.navigator.language.toLowerCase().startsWith("ko")?"ko":"en"}()),l(!0)},[]),(0,r.useEffect)(()=>{document.documentElement.lang=i;try{window.localStorage.setItem(n,i)}catch{}try{document.cookie=`qw-locale=${i}; path=/; max-age=31536000; samesite=lax`}catch{}},[i]);let u=(0,r.useMemo)(()=>({hydrated:a,locale:i,setLocale:e=>c(o(e))}),[a,i]);return(0,t.jsx)(s.Provider,{value:u,children:e})},"useLocale",0,function(){let e=(0,r.useContext)(s);if(!e)throw Error("useLocale must be used within LocaleProvider");return e}],52368)},67449,e=>{"use strict";let t=[{value:"soft-chime",label:"Soft Chime"},{value:"warm-bell",label:"Warm Bell"},{value:"click",label:"Click"},{value:"alert-tone",label:"Alert Tone"},{value:"pluck",label:"Pluck"}],r="quadwork_notification_sound",n="quadwork_notification_sound_choice",o="quadwork_notification_sound_background_only";function s(e){try{return window.localStorage.getItem(e)}catch{return null}}function a(e,t){try{window.localStorage.setItem(e,t)}catch{}}function l(){return"off"!==s(r)}function i(){let e=s(n);return e&&t.some(t=>t.value===e)?e:"soft-chime"}function c(){let e=s(o);return null===e||"off"!==e}e.s(["NOTIFICATION_SOUND_OPTIONS",0,t,"getNotificationBackgroundOnly",0,c,"getNotificationChoice",0,i,"getNotificationEnabled",0,l,"playNotificationSound",0,function(){if(!l()||c()&&document.hasFocus())return;let e=i();try{let t=new Audio(`/sounds/${e}.mp3`);t.volume=.6,t.play().catch(()=>{})}catch{}},"setNotificationBackgroundOnly",0,function(e){a(o,e?"on":"off")},"setNotificationChoice",0,function(e){a(n,e)},"setNotificationEnabled",0,function(e){a(r,e?"on":"off")}])},95057,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={formatUrl:function(){return l},formatWithValidation:function(){return c},urlObjectKeys:function(){return i}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let s=e.r(90809)._(e.r(98183)),a=/https?|ftp|gopher|file/;function l(e){let{auth:t,hostname:r}=e,n=e.protocol||"",o=e.pathname||"",l=e.hash||"",i=e.query||"",c=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?c=t+e.host:r&&(c=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(c+=":"+e.port)),i&&"object"==typeof i&&(i=String(s.urlQueryToSearchParams(i)));let u=e.search||i&&`?${i}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||a.test(n))&&!1!==c?(c="//"+(c||""),o&&"/"!==o[0]&&(o="/"+o)):c||(c=""),l&&"#"!==l[0]&&(l="#"+l),u&&"?"!==u[0]&&(u="?"+u),o=o.replace(/[?#]/g,encodeURIComponent),u=u.replace("#","%23"),`${n}${c}${o}${u}${l}`}let i=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function c(e){return l(e)}},18581,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return o}});let n=e.r(71645);function o(e,t){let r=(0,n.useRef)(null),o=(0,n.useRef)(null);return(0,n.useCallback)(n=>{if(null===n){let e=r.current;e&&(r.current=null,e());let t=o.current;t&&(o.current=null,t())}else e&&(r.current=s(e,n)),t&&(o.current=s(t,n))},[e,t])}function s(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},73668,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return s}});let n=e.r(18967),o=e.r(52817);function s(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,o.hasBasePath)(r.pathname)}catch(e){return!1}}},84508,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"errorOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},22016,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return g},useLinkStatus:function(){return j}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let s=e.r(90809),a=e.r(43476),l=s._(e.r(71645)),i=e.r(95057),c=e.r(8372),u=e.r(18581),d=e.r(18967),f=e.r(5550);e.r(33525);let h=e.r(88540),p=e.r(91949),x=e.r(73668),m=e.r(9396);function g(t){var r,n;let o,s,g,[j,v]=(0,l.useOptimistic)(p.IDLE_LINK_STATUS),y=(0,l.useRef)(null),{href:w,as:k,children:N,prefetch:C=null,passHref:S,replace:_,shallow:E,scroll:L,onClick:P,onMouseEnter:O,onTouchStart:I,legacyBehavior:M=!1,onNavigate:T,transitionTypes:$,ref:R,unstable_dynamicOnHover:A,...B}=t;o=N,M&&("string"==typeof o||"number"==typeof o)&&(o=(0,a.jsx)("a",{children:o}));let U=l.default.useContext(c.AppRouterContext),W=!1!==C,F=!1!==C?null===(n=C)||"auto"===n?m.FetchStrategy.PPR:m.FetchStrategy.Full:m.FetchStrategy.PPR,q="string"==typeof(r=k||w)?r:(0,i.formatUrl)(r);if(M){if(o?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});s=l.default.Children.only(o)}let z=M?s&&"object"==typeof s&&s.ref:R,D=l.default.useCallback(e=>(null!==U&&(y.current=(0,p.mountLinkInstance)(e,q,U,F,W,v)),()=>{y.current&&((0,p.unmountLinkForCurrentNavigation)(y.current),y.current=null),(0,p.unmountPrefetchableInstance)(e)}),[W,q,U,F,v]),K={ref:(0,u.useMergedRef)(D,z),onClick(t){M||"function"!=typeof P||P(t),M&&s.props&&"function"==typeof s.props.onClick&&s.props.onClick(t),!U||t.defaultPrevented||function(t,r,n,o,s,a,i){if("u">typeof window){let c,{nodeName:u}=t.currentTarget;if("A"===u.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,x.isLocalURL)(r)){o&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),a){let e=!1;if(a({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:d}=e.r(99781);l.default.startTransition(()=>{d(r,o?"replace":"push",!1===s?h.ScrollBehavior.NoScroll:h.ScrollBehavior.Default,n.current,i)})}}(t,q,y,_,L,T,$)},onMouseEnter(e){M||"function"!=typeof O||O(e),M&&s.props&&"function"==typeof s.props.onMouseEnter&&s.props.onMouseEnter(e),U&&W&&(0,p.onNavigationIntent)(e.currentTarget,!0===A)},onTouchStart:function(e){M||"function"!=typeof I||I(e),M&&s.props&&"function"==typeof s.props.onTouchStart&&s.props.onTouchStart(e),U&&W&&(0,p.onNavigationIntent)(e.currentTarget,!0===A)}};return(0,d.isAbsoluteUrl)(q)?K.href=q:M&&!S&&("a"!==s.type||"href"in s.props)||(K.href=(0,f.addBasePath)(q)),g=M?l.default.cloneElement(s,K):(0,a.jsx)("a",{...B,...K,children:o}),(0,a.jsx)(b.Provider,{value:j,children:g})}e.r(84508);let b=(0,l.createContext)(p.IDLE_LINK_STATUS),j=()=>(0,l.useContext)(b);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},22140,e=>{"use strict";var t=e.i(43476),r=e.i(22016),n=e.i(18566),o=e.i(71645);function s(){return(0,t.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M3 10L10 3l7 7"}),(0,t.jsx)("path",{d:"M5 8.5V16h3.5v-4h3v4H15V8.5"})]})}function a(){return(0,t.jsxs)("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("circle",{cx:"9",cy:"9",r:"2.5"}),(0,t.jsx)("path",{d:"M7.5 1.5h3l.4 2.1a5.5 5.5 0 011.3.7l2-.8 1.5 2.6-1.6 1.3a5.5 5.5 0 010 1.5l1.6 1.3-1.5 2.6-2-.8a5.5 5.5 0 01-1.3.7l-.4 2.1h-3l-.4-2.1a5.5 5.5 0 01-1.3-.7l-2 .8-1.5-2.6 1.6-1.3a5.5 5.5 0 010-1.5L2.3 6.1l1.5-2.6 2 .8a5.5 5.5 0 011.3-.7z"})]})}function l(){return(0,t.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",children:(0,t.jsx)("path",{d:"M8 3v10M3 8h10"})})}function i(){return(0,t.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,t.jsx)("path",{d:"M10 3L5 8l5 5"})})}function c(){return(0,t.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,t.jsx)("path",{d:"M6 3l5 5-5 5"})})}function u({collapsed:e}){return(0,t.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",className:`transition-transform duration-150 ${e?"-rotate-90":""}`,children:(0,t.jsx)("path",{d:"M3 4.5l3 3 3-3"})})}function d({size:e=10}){return(0,t.jsxs)("svg",{width:e,height:e,viewBox:"0 0 16 16",fill:"currentColor",stroke:"none",children:[(0,t.jsx)("path",{d:"M10.5 1.5L14.5 5.5L10 7.5L8.5 12.5L3.5 7.5L8.5 6L10.5 1.5Z"}),(0,t.jsx)("path",{d:"M3.5 7.5L1 15L8.5 12.5"})]})}function f({project:e,isActive:n,expanded:s,pinned:a,onContextMenu:l}){let[i,c]=(0,o.useState)(null),u=(0,o.useRef)(null);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.default,{ref:u,href:`/project/${e.id}`,className:`flex items-center gap-2 ${s?"w-full px-2":""} rounded-sm transition-colors ${!s?"":n?"bg-[#1a1a1a]":"hover:bg-[#1a1a1a]"}`,onMouseEnter:()=>{if(s)return;let e=u.current?.getBoundingClientRect();e&&c({top:e.top+e.height/2})},onMouseLeave:()=>c(null),onContextMenu:t=>l(t,e.id),children:[(0,t.jsxs)("div",{className:"relative shrink-0",children:[(0,t.jsx)("div",{className:`w-10 h-10 flex items-center justify-center rounded-full text-[11px] font-semibold uppercase tracking-tight transition-colors ${n?"border-2 border-accent text-accent":"border border-border text-text-muted hover:text-text"}`,children:e.name.slice(0,2)||"?"}),a&&!s&&(0,t.jsx)("div",{className:"absolute -top-1 -right-1 text-accent",children:(0,t.jsx)(d,{size:8})})]}),s&&(0,t.jsxs)("span",{className:`text-xs truncate flex items-center gap-1 ${n?"text-accent":"text-text-muted"}`,children:[e.name,a&&(0,t.jsx)(d,{size:10})]})]}),!s&&i&&(0,t.jsxs)("div",{className:"fixed px-2 py-1 bg-bg-surface border border-border text-text text-xs whitespace-nowrap pointer-events-none z-50",style:{left:72,top:i.top,transform:"translateY(-50%)"},children:[a&&"📌 ",e.name]})]})}let h="qw-sidebar-expanded",p="qw-sidebar-collapsed-groups";e.s(["default",0,function(){let e=(0,n.usePathname)(),[d,x]=(0,o.useState)([]),[m,g]=(0,o.useState)([]),[b,j]=(0,o.useState)([]),[v,y]=(0,o.useState)(new Set),[w,k]=(0,o.useState)("online"),[N,C]=(0,o.useState)(!1),[S,_]=(0,o.useState)(null),E=(0,o.useRef)(null);(0,o.useEffect)(()=>{try{if(window.innerWidth>=768){let e=localStorage.getItem(h);"true"===e&&C(!0)}let e=localStorage.getItem(p);e&&y(new Set(JSON.parse(e)))}catch{}},[]),(0,o.useEffect)(()=>{let e=window.matchMedia("(max-width: 767px)"),t=e=>{e.matches&&C(!1)};return e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]),(0,o.useEffect)(()=>{fetch("/api/config").then(e=>{if(!e.ok)throw Error(`Config fetch failed: ${e.status}`);return e.json()}).then(e=>{E.current=e,x((e.projects||[]).filter(e=>!e.archived)),g(e.pinned_projects||[]),j(e.sidebar_groups||[])}).catch(()=>{})},[]),(0,o.useEffect)(()=>{let e,t=!1,r=async()=>{try{let e=await fetch("/api/health",{signal:AbortSignal.timeout(3e3)});if(t)return;e.ok?k(e=>"offline"===e?"recovering":"online"):k("offline")}catch{if(t)return;k("offline")}t||(e=setTimeout(r,5e3))};return r(),()=>{t=!0,clearTimeout(e)}},[]),(0,o.useEffect)(()=>{if("recovering"===w){let e=setTimeout(()=>k("online"),1500);return()=>clearTimeout(e)}},[w]);let L="/"===e,P="/settings"===e,O=e.startsWith("/project/")?e.split("/")[2]:null,I=(0,o.useCallback)(e=>{g(e),fetch("/api/config").then(e=>e.json()).then(t=>{let r={...t,pinned_projects:e};return E.current=r,fetch("/api/config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}).catch(()=>{})},[]),M=(0,o.useCallback)(e=>{j(e),fetch("/api/config").then(e=>e.json()).then(t=>{let r={...t,sidebar_groups:e};return E.current=r,fetch("/api/config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}).catch(()=>{})},[]),T=(e,t)=>{let r=b.map(t=>({...t,projects:t.projects.filter(t=>t!==e)}));if("__ungrouped__"===t)M(r.filter(e=>e.projects.length>0));else{let n=r.find(e=>e.name===t);n?n.projects.push(e):r.push({name:t,projects:[e]}),M(r.filter(e=>e.projects.length>0))}_(null)},$=(e,t)=>{e.preventDefault(),_({x:e.clientX,y:e.clientY,projectId:t})};(0,o.useEffect)(()=>{if(!S)return;let e=()=>_(null);return window.addEventListener("click",e),()=>window.removeEventListener("click",e)},[S]);let R=new Set(m),A=m.map(e=>d.find(t=>t.id===e)).filter(e=>!!e),B=new Set(b.flatMap(e=>e.projects)),U=d.filter(e=>!R.has(e.id)),W=U.filter(e=>!B.has(e.id));return(0,t.jsxs)("aside",{className:`shrink-0 h-full border-r border-border bg-bg-surface flex flex-col py-3 transition-[width] duration-200 ease-in-out overflow-hidden ${N?"w-52 items-stretch px-2":"w-16 items-center"}`,children:[(0,t.jsxs)(r.default,{href:"/",className:`flex items-center gap-2 rounded-sm transition-colors ${N?"px-2 py-2":"w-10 h-10 justify-center self-center"} ${L?"text-accent":"text-text-muted hover:text-text hover:bg-[#1a1a1a]"}`,title:"Home",children:[(0,t.jsx)(s,{}),N&&(0,t.jsx)("span",{className:"text-xs",children:"Home"})]}),(0,t.jsx)("div",{className:`h-px bg-border my-2 ${N?"":"w-6 self-center"}`}),(0,t.jsxs)("div",{className:`flex-1 flex flex-col gap-2 overflow-y-auto min-h-0 ${N?"":"items-center"}`,children:[A.length>0&&(0,t.jsxs)(t.Fragment,{children:[N&&(0,t.jsx)("span",{className:"text-[10px] uppercase tracking-widest text-text-muted px-2",children:"Pinned"}),A.map(e=>(0,t.jsx)(f,{project:e,isActive:O===e.id,expanded:N,pinned:!0,onContextMenu:$},e.id)),(0,t.jsx)("div",{className:`h-px bg-border ${N?"":"w-6"}`})]}),b.map(e=>{let r=e.projects.map(e=>U.find(t=>t.id===e)).filter(e=>!!e);if(0===r.length)return null;let n=v.has(e.name);return(0,t.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,t.jsx)("button",{onClick:()=>{var t;return t=e.name,void y(e=>{let r=new Set(e);r.has(t)?r.delete(t):r.add(t);try{localStorage.setItem(p,JSON.stringify([...r]))}catch{}return r})},className:`flex items-center gap-1 text-text-muted hover:text-text transition-colors ${N?"px-2 py-0.5":"justify-center w-full"}`,title:`${n?"Expand":"Collapse"} ${e.name}`,children:N?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(u,{collapsed:n}),(0,t.jsx)("span",{className:"text-[10px] uppercase tracking-widest truncate",children:e.name})]}):(0,t.jsx)("div",{className:`w-6 h-px ${n?"bg-text-muted":"bg-border"}`})}),!n&&r.map(e=>(0,t.jsx)(f,{project:e,isActive:O===e.id,expanded:N,pinned:!1,onContextMenu:$},e.id))]},e.name)}),W.length>0&&b.length>0&&(0,t.jsxs)(t.Fragment,{children:[N&&(0,t.jsx)("span",{className:"text-[10px] uppercase tracking-widest text-text-muted px-2",children:"Ungrouped"}),b.length>0&&!N&&(0,t.jsx)("div",{className:"w-6 h-px bg-border"})]}),W.map(e=>(0,t.jsx)(f,{project:e,isActive:O===e.id,expanded:N,pinned:!1,onContextMenu:$},e.id)),(0,t.jsxs)(r.default,{href:"/setup",className:`flex items-center gap-2 rounded-full transition-colors ${N?"px-2 py-2 border border-dashed border-border text-text-muted hover:text-text hover:bg-[#1a1a1a] rounded-sm":"w-10 h-10 justify-center border border-dashed border-border text-text-muted hover:text-text hover:bg-[#1a1a1a]"}`,title:"Add project",children:[(0,t.jsx)(l,{}),N&&(0,t.jsx)("span",{className:"text-xs text-text-muted",children:"New Project"})]})]}),S&&(0,t.jsxs)("div",{className:"fixed bg-bg-surface border border-border py-1 z-50 text-xs",style:{left:S.x,top:S.y},onClick:e=>e.stopPropagation(),children:[R.has(S.projectId)?(0,t.jsx)("button",{className:"w-full px-3 py-1.5 text-left text-text hover:bg-[#1a1a1a] transition-colors",onClick:()=>{var e;return e=S.projectId,void(I(m.filter(t=>t!==e)),_(null))},children:"Unpin"}):(0,t.jsx)("button",{className:"w-full px-3 py-1.5 text-left text-text hover:bg-[#1a1a1a] transition-colors",onClick:()=>{var e;return e=S.projectId,void(!m.includes(e)&&(I([e,...m]),_(null)))},children:"Pin to top"}),(0,t.jsx)("div",{className:"h-px bg-border my-1"}),S.showGroupMenu?(0,t.jsxs)("div",{className:"flex flex-col",children:[b.map(e=>(0,t.jsx)("button",{className:"w-full px-3 py-1.5 text-left text-text hover:bg-[#1a1a1a] transition-colors",onClick:()=>T(S.projectId,e.name),children:e.name},e.name)),(0,t.jsx)("button",{className:"w-full px-3 py-1.5 text-left text-text hover:bg-[#1a1a1a] transition-colors",onClick:()=>{let e=prompt("New group name:");if(!e?.trim())return;let t=e.trim();b.some(e=>e.name.toLowerCase()===t.toLowerCase())?alert(`Group "${t}" already exists.`):T(S.projectId,t)},children:"+ New group"}),B.has(S.projectId)&&(0,t.jsx)("button",{className:"w-full px-3 py-1.5 text-left text-text-muted hover:bg-[#1a1a1a] transition-colors",onClick:()=>T(S.projectId,"__ungrouped__"),children:"Remove from group"})]}):(0,t.jsx)("button",{className:"w-full px-3 py-1.5 text-left text-text hover:bg-[#1a1a1a] transition-colors",onClick:()=>_({...S,showGroupMenu:!0}),children:"Move to group..."})]}),(0,t.jsx)("div",{className:`h-px bg-border my-2 ${N?"":"w-6 self-center"}`}),"online"!==w&&(0,t.jsxs)("div",{className:`mb-2 relative group ${N?"px-2":"self-center"}`,children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("div",{className:`w-3 h-3 shrink-0 rounded-full ${"offline"===w?"bg-red-500 animate-pulse":"bg-green-500"}`}),N&&(0,t.jsx)("span",{className:"text-xs text-text-muted",children:"offline"===w?"Backend offline":"Reconnected"})]}),!N&&(0,t.jsx)("div",{className:"fixed left-16 ml-2 px-2 py-1 bg-bg-surface border border-border text-xs whitespace-nowrap z-50 hidden group-hover:block",style:{transform:"translateY(-50%)",top:"auto"},children:"offline"===w?"Backend offline — run quadwork start":"Backend reconnected"})]}),(0,t.jsx)("button",{onClick:()=>{C(e=>{let t=!e;try{localStorage.setItem(h,String(t))}catch{}return t})},className:`flex shrink-0 items-center justify-center w-10 h-10 rounded-sm border border-border text-text-muted hover:text-accent hover:border-accent/50 transition-colors ${N?"self-end":"self-center"}`,title:N?"Collapse sidebar":"Expand sidebar",children:N?(0,t.jsx)(i,{}):(0,t.jsx)(c,{})}),(0,t.jsx)("div",{className:"h-1"}),(0,t.jsxs)(r.default,{href:"/settings",className:`flex items-center gap-2 rounded-sm transition-colors ${N?"px-2 py-2":"w-10 h-10 justify-center self-center"} ${P?"text-accent":"text-text-muted hover:text-text hover:bg-[#1a1a1a]"}`,title:"Settings",children:[(0,t.jsx)(a,{}),N&&(0,t.jsx)("span",{className:"text-xs",children:"Settings"})]})]})}])},26704,e=>{"use strict";var t=e.i(43476),r=e.i(22016),n=e.i(71645);function o({open:e,onClose:r}){return((0,n.useEffect)(()=>{if(!e)return;let t=e=>{"Escape"===e.key&&r()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[e,r]),e)?(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm",onClick:r,role:"dialog","aria-modal":"true","aria-labelledby":"about-title",children:(0,t.jsxs)("div",{className:"relative mx-4 max-w-lg w-full rounded-lg border border-white/10 bg-neutral-950 p-6 shadow-2xl",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)("button",{type:"button",onClick:r,"aria-label":"Close",className:"absolute right-3 top-3 rounded p-1 text-neutral-400 hover:bg-white/5 hover:text-white",children:(0,t.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"1.8",children:(0,t.jsx)("path",{d:"M4 4l12 12M16 4L4 16",strokeLinecap:"round"})})}),(0,t.jsx)("h2",{id:"about-title",className:"text-lg font-semibold text-white",children:"What is QuadWork?"}),(0,t.jsx)("p",{className:"mt-3 text-sm leading-relaxed text-neutral-300",children:"QuadWork is a local dashboard that runs a team of 4 AI agents — Head, Dev, and two Reviewers — that code, review, and ship while you sleep."}),(0,t.jsx)("p",{className:"mt-3 text-sm leading-relaxed text-neutral-300",children:"Every task follows a strict GitHub workflow: Issue → Branch → Pull Request → 2 Reviews → Merge. Branch protection ensures no agent can skip the process."}),(0,t.jsx)("h3",{className:"mt-5 text-sm font-semibold text-white",children:"Why QuadWork?"}),(0,t.jsxs)("ul",{className:"mt-2 space-y-1.5 text-sm text-neutral-300",children:[(0,t.jsxs)("li",{children:["🤖 ",(0,t.jsx)("b",{children:"Run 24/7"})," — agents work overnight while you rest"]}),(0,t.jsxs)("li",{children:["🛡️ ",(0,t.jsx)("b",{children:"Always reviewed"})," — every PR needs 2 independent approvals"]}),(0,t.jsxs)("li",{children:["🔒 ",(0,t.jsx)("b",{children:"Local-first"})," — runs entirely on your machine, no data leaves"]}),(0,t.jsxs)("li",{children:["🧰 ",(0,t.jsx)("b",{children:"Bring your own CLI"})," — works with Claude Code, Codex, or both"]}),(0,t.jsxs)("li",{children:["📦 ",(0,t.jsx)("b",{children:"One install"})," — ",(0,t.jsx)("code",{className:"rounded bg-white/5 px-1 py-0.5 text-[12px]",children:"npx quadwork init"})," and you're set"]})]}),(0,t.jsx)("div",{className:"mt-5",children:(0,t.jsx)("a",{href:"https://github.com/realproject7/quadwork",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-sm text-blue-400 hover:text-blue-300",children:"Read the full docs on GitHub →"})})]})}):null}let s=["sleep.","eat.","enjoy life.","touch grass.","spend time with people.","watch a movie.","take a vacation.","go for a run."],a="quadwork_tagline_animation";function l(e){return!Number.isFinite(e)||e<=0?"0h":e<1?`${(60*e).toFixed(0)}m`:`${e.toFixed(1)}h`}e.s(["default",0,function(){let[e,i]=(0,n.useState)(!1);(0,n.useEffect)(()=>{i(!0)},[]);let[c,u]=(0,n.useState)(!1),[d,f]=(0,n.useState)(null),[h,p]=(0,n.useState)(!1);(0,n.useEffect)(()=>{let e=!1,t=()=>{fetch("/api/activity/stats").then(e=>e.ok?e.json():null).then(t=>{!e&&t&&f(t)}).catch(()=>{})};t();let r=setInterval(t,6e4);return()=>{e=!0,clearInterval(r)}},[]);let[x,m]=(0,n.useState)(!0);(0,n.useEffect)(()=>{try{let e=window.localStorage.getItem(a);"off"===e&&m(!1)}catch{}},[]);let g=function(e,t){let[r,o]=(0,n.useState)(0),[s,a]=(0,n.useState)(""),[l,i]=(0,n.useState)("typing");return(0,n.useEffect)(()=>{let n;if(!t)return;let c=e[r];return"typing"===l?n=s.length<c.length?setTimeout(()=>a(c.slice(0,s.length+1)),70):setTimeout(()=>i("holding"),0):"holding"===l?n=setTimeout(()=>i("deleting"),2e3):s.length>0?n=setTimeout(()=>a(c.slice(0,s.length-1)),35):(o(t=>(t+1)%e.length),i("typing")),()=>clearTimeout(n)},[s,l,r,e,t]),s}(s,x),b=x?g:s[0]||"",[j,v]=(0,n.useState)(!1);(0,n.useEffect)(()=>{if(!x)return void v(!0);let e=setTimeout(()=>v(!0),5e3);return()=>clearTimeout(e)},[x]);let y=(0,n.useRef)(!1);return((0,n.useEffect)(()=>{x&&(g.length>0?y.current=!0:y.current&&v(!0))},[x,g]),e)?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("header",{className:"sticky top-0 z-40 flex h-12 items-center justify-between border-b border-white/10 bg-neutral-950/90 px-4 backdrop-blur",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,t.jsxs)(r.default,{href:"/",className:"flex items-center gap-1.5 text-sm font-bold text-accent hover:text-blue-400 shrink-0",children:[(0,t.jsx)("img",{src:"/icon.svg",alt:"",width:18,height:18,className:"inline-block"}),"QuadWork"]}),(0,t.jsx)("span",{className:"hidden sm:inline text-neutral-600",children:"|"}),(0,t.jsxs)("span",{className:"hidden sm:inline text-[13px] text-neutral-400 truncate",children:["Your AI dev team while you"," ",(0,t.jsx)("span",{className:"text-neutral-200",children:b}),x&&(0,t.jsx)("span",{className:"ml-0.5 inline-block w-[1px] h-[12px] align-middle bg-neutral-400 animate-qw-blink"})]}),j&&(0,t.jsx)("button",{type:"button",onClick:()=>{m(e=>{let t=!e;try{window.localStorage.setItem(a,t?"on":"off")}catch{}return t})},"aria-label":x?"Pause tagline animation":"Resume tagline animation","aria-pressed":x,title:x?"Pause tagline animation":"Resume tagline animation",className:"hidden sm:inline-flex items-center justify-center w-3.5 h-3.5 ml-1 rounded-full border border-white/15 text-neutral-500 hover:text-white hover:border-white/40 transition-colors text-[8px]",children:x?"❚❚":"▶"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3 shrink-0",children:[d&&(0,t.jsxs)("div",{className:"relative hidden md:flex items-center gap-2 text-[10px] text-neutral-500",onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),onFocus:()=>p(!0),onBlur:()=>p(!1),tabIndex:0,children:[(0,t.jsx)("span",{className:"text-neutral-200",children:"Your AI team worked:"}),(0,t.jsxs)("span",{children:["Today ",(0,t.jsx)("span",{className:"text-neutral-200",children:l(d.today)})]}),(0,t.jsx)("span",{className:"text-neutral-700",children:"·"}),(0,t.jsxs)("span",{children:["Week ",(0,t.jsx)("span",{className:"text-neutral-200",children:l(d.week)})]}),(0,t.jsx)("span",{className:"text-neutral-700",children:"·"}),(0,t.jsxs)("span",{children:["Month ",(0,t.jsx)("span",{className:"text-neutral-200",children:l(d.month)})]}),h&&(0,t.jsxs)("div",{className:"absolute top-6 right-0 z-50 min-w-[220px] p-2 text-[10px] leading-snug text-neutral-200 bg-neutral-900 border border-white/15 rounded shadow-lg",children:[(0,t.jsx)("div",{className:"mb-1 text-neutral-400 uppercase tracking-wider text-[9px]",children:"Per project"}),0===Object.entries(d.by_project).length&&(0,t.jsx)("div",{className:"text-neutral-500",children:"No activity logged yet"}),Object.entries(d.by_project).map(([e,r])=>(0,t.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,t.jsx)("span",{className:"text-neutral-400 truncate flex-1",children:e}),(0,t.jsx)("span",{className:"tabular-nums text-neutral-200",children:l(r.month)}),(0,t.jsx)("span",{className:"text-neutral-600 text-[9px]",children:"/ mo"})]},e)),(0,t.jsxs)("div",{className:"mt-1 pt-1 border-t border-white/10 text-neutral-500",children:["Lifetime: ",(0,t.jsx)("span",{className:"text-neutral-200",children:l(d.total)})]}),(0,t.jsx)("div",{className:"mt-1 pt-1 border-t border-white/10 text-neutral-500 leading-snug",children:"ⓘ Stats are best-effort. Server restarts may undercount in-flight sessions."})]})]}),(0,t.jsx)("button",{type:"button",onClick:()=>u(!0),"aria-label":"About QuadWork",className:"rounded p-1 text-neutral-400 hover:bg-white/5 hover:text-white",children:(0,t.jsxs)("svg",{width:"18",height:"18",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,t.jsx)("circle",{cx:"10",cy:"10",r:"8"}),(0,t.jsx)("path",{d:"M10 9v5",strokeLinecap:"round"}),(0,t.jsx)("circle",{cx:"10",cy:"6.5",r:"0.8",fill:"currentColor"})]})}),(0,t.jsx)("a",{href:"https://github.com/realproject7/quadwork",target:"_blank",rel:"noopener noreferrer",className:"text-[12px] text-neutral-400 hover:text-white",children:"QuadWork github"})]})]}),(0,t.jsx)(o,{open:c,onClose:()=>u(!1)})]}):(0,t.jsx)("header",{className:"sticky top-0 z-40 flex h-12 items-center justify-between border-b border-white/10 bg-neutral-950/90 px-4 backdrop-blur","aria-hidden":"true"})}],26704)},43688,e=>{"use strict";var t=e.i(71645),r=e.i(67449);e.s(["default",0,function(){let e=(0,t.useRef)({}),n=(0,t.useRef)("user"),o=(0,t.useRef)([]),s=(0,t.useRef)(!1),a=(0,t.useRef)(new Set),l=(0,t.useCallback)(t=>{null==e.current[t]&&(e.current[t]=0,a.current.add(t))},[]),i=(0,t.useCallback)(()=>{fetch("/api/config").then(e=>e.ok?e.json():null).then(t=>{if(!t)return;"string"==typeof t.operator_name&&t.operator_name&&(n.current=t.operator_name);let r=t.projects||[];for(let e of(o.current=r,r))l(e.id);let a=new Set(r.map(e=>e.id));for(let t of Object.keys(e.current))a.has(t)||delete e.current[t];s.current=!0}).catch(()=>{})},[l]);(0,t.useEffect)(()=>{i();let e=setInterval(i,3e4);return()=>clearInterval(e)},[i]);let c=(0,t.useCallback)(()=>{if(s.current)for(let t of o.current){let o=e.current[t.id];null!=o&&fetch(`/api/chat?path=/api/messages&channel=general&cursor=${o}&project=${encodeURIComponent(t.id)}`).then(e=>e.ok?e.json():null).then(o=>{if(!o)return;let s=Array.isArray(o)?o:o.messages||[];if(0===s.length)return void a.current.delete(t.id);let l=e.current[t.id]??0,i=Math.max(...s.map(e=>e.id));i>l&&(e.current[t.id]=i);let c=n.current;a.current.has(t.id)?a.current.delete(t.id):s.some(e=>e.id>l&&(void 0===e.type||"chat"===e.type)&&"user"!==e.sender&&e.sender!==c&&"system"!==e.sender)&&(0,r.playNotificationSound)()}).catch(()=>{})}},[]);return(0,t.useEffect)(()=>{let e=setInterval(c,3e3);return()=>clearInterval(e)},[c]),null}])}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,67585,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"BailoutToCSR",{enumerable:!0,get:function(){return l}});let r=e.r(32061);function l({reason:e,children:t}){if("u"<typeof window)throw Object.defineProperty(new r.BailoutToCSRError(e),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return t}},9885,(e,t,n)=>{"use strict";function r(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"encodeURIPath",{enumerable:!0,get:function(){return r}})},52157,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"PreloadChunks",{enumerable:!0,get:function(){return a}});let r=e.r(43476),l=e.r(74080),o=e.r(63599),u=e.r(9885),s=e.r(43369);function a({moduleIds:e}){if("u">typeof window)return null;let t=o.workAsyncStorage.getStore();if(void 0===t)return null;let n=[];if(t.reactLoadableManifest&&e){let r=t.reactLoadableManifest;for(let t of e){if(!r[t])continue;let e=r[t].files;n.push(...e)}}if(0===n.length)return null;let i=(0,s.getAssetTokenQuery)();return(0,r.jsx)(r.Fragment,{children:n.map(e=>{let n=`${t.assetPrefix}/_next/${(0,u.encodeURIPath)(e)}${i}`;return e.endsWith(".css")?(0,r.jsx)("link",{precedence:"dynamic",href:n,rel:"stylesheet",as:"style",nonce:t.nonce},e):((0,l.preload)(n,{as:"script",fetchPriority:"low",nonce:t.nonce}),null)})})}},69093,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"default",{enumerable:!0,get:function(){return i}});let r=e.r(43476),l=e.r(71645),o=e.r(67585),u=e.r(52157);function s(e){return{default:e&&"default"in e?e.default:e}}let a={loader:()=>Promise.resolve(s(()=>null)),loading:null,ssr:!0},i=function(e){let t={...a,...e},n=(0,l.lazy)(()=>t.loader().then(s)),i=t.loading;function d(e){let s=i?(0,r.jsx)(i,{isLoading:!0,pastDelay:!0,error:null}):null,a=!t.ssr||!!t.loading,d=a?l.Suspense:l.Fragment,c=t.ssr?(0,r.jsxs)(r.Fragment,{children:["u"<typeof window?(0,r.jsx)(u.PreloadChunks,{moduleIds:t.modules}):null,(0,r.jsx)(n,{...e})]}):(0,r.jsx)(o.BailoutToCSR,{reason:"next/dynamic",children:(0,r.jsx)(n,{...e})});return(0,r.jsx)(d,{...a?{fallback:s}:{},children:c})}return d.displayName="LoadableComponent",d}},70703,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"default",{enumerable:!0,get:function(){return l}});let r=e.r(55682)._(e.r(69093));function l(e,t){let n={};"function"==typeof e&&(n.loader=e);let l={...n,...t};return(0,r.default)({...l,modules:l.loadableGenerated?.modules})}("function"==typeof n.default||"object"==typeof n.default&&null!==n.default)&&void 0===n.default.__esModule&&(Object.defineProperty(n.default,"__esModule",{value:!0}),Object.assign(n.default,n),t.exports=n.default)},9530,e=>{"use strict";var t=e.i(43476),n=e.i(70703),r=e.i(18566);let l=(0,n.default)(()=>e.A(65615),{loadableGenerated:{modules:[73766]},ssr:!1});e.s(["default",0,function(){let e=(0,r.usePathname)().split("/")[2]||"";return e&&"_"!==e?(0,t.jsx)("div",{className:"w-full h-full",children:(0,t.jsx)(l,{projectId:e})}):null}])},65615,e=>{e.v(t=>Promise.all(["static/chunks/
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,67585,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"BailoutToCSR",{enumerable:!0,get:function(){return l}});let r=e.r(32061);function l({reason:e,children:t}){if("u"<typeof window)throw Object.defineProperty(new r.BailoutToCSRError(e),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return t}},9885,(e,t,n)=>{"use strict";function r(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"encodeURIPath",{enumerable:!0,get:function(){return r}})},52157,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"PreloadChunks",{enumerable:!0,get:function(){return a}});let r=e.r(43476),l=e.r(74080),o=e.r(63599),u=e.r(9885),s=e.r(43369);function a({moduleIds:e}){if("u">typeof window)return null;let t=o.workAsyncStorage.getStore();if(void 0===t)return null;let n=[];if(t.reactLoadableManifest&&e){let r=t.reactLoadableManifest;for(let t of e){if(!r[t])continue;let e=r[t].files;n.push(...e)}}if(0===n.length)return null;let i=(0,s.getAssetTokenQuery)();return(0,r.jsx)(r.Fragment,{children:n.map(e=>{let n=`${t.assetPrefix}/_next/${(0,u.encodeURIPath)(e)}${i}`;return e.endsWith(".css")?(0,r.jsx)("link",{precedence:"dynamic",href:n,rel:"stylesheet",as:"style",nonce:t.nonce},e):((0,l.preload)(n,{as:"script",fetchPriority:"low",nonce:t.nonce}),null)})})}},69093,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"default",{enumerable:!0,get:function(){return i}});let r=e.r(43476),l=e.r(71645),o=e.r(67585),u=e.r(52157);function s(e){return{default:e&&"default"in e?e.default:e}}let a={loader:()=>Promise.resolve(s(()=>null)),loading:null,ssr:!0},i=function(e){let t={...a,...e},n=(0,l.lazy)(()=>t.loader().then(s)),i=t.loading;function d(e){let s=i?(0,r.jsx)(i,{isLoading:!0,pastDelay:!0,error:null}):null,a=!t.ssr||!!t.loading,d=a?l.Suspense:l.Fragment,c=t.ssr?(0,r.jsxs)(r.Fragment,{children:["u"<typeof window?(0,r.jsx)(u.PreloadChunks,{moduleIds:t.modules}):null,(0,r.jsx)(n,{...e})]}):(0,r.jsx)(o.BailoutToCSR,{reason:"next/dynamic",children:(0,r.jsx)(n,{...e})});return(0,r.jsx)(d,{...a?{fallback:s}:{},children:c})}return d.displayName="LoadableComponent",d}},70703,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"default",{enumerable:!0,get:function(){return l}});let r=e.r(55682)._(e.r(69093));function l(e,t){let n={};"function"==typeof e&&(n.loader=e);let l={...n,...t};return(0,r.default)({...l,modules:l.loadableGenerated?.modules})}("function"==typeof n.default||"object"==typeof n.default&&null!==n.default)&&void 0===n.default.__esModule&&(Object.defineProperty(n.default,"__esModule",{value:!0}),Object.assign(n.default,n),t.exports=n.default)},9530,e=>{"use strict";var t=e.i(43476),n=e.i(70703),r=e.i(18566);let l=(0,n.default)(()=>e.A(65615),{loadableGenerated:{modules:[73766]},ssr:!1});e.s(["default",0,function(){let e=(0,r.usePathname)().split("/")[2]||"";return e&&"_"!==e?(0,t.jsx)("div",{className:"w-full h-full",children:(0,t.jsx)(l,{projectId:e})}):null}])},65615,e=>{e.v(t=>Promise.all(["static/chunks/0xi5xtcy5283i.js","static/chunks/006q0qhjso45i.js","static/chunks/17oc2l.ekcs8b.css"].map(t=>e.l(t))).then(()=>t(73766)))}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,78759,e=>{"use strict";var t=e.i(43476),l=e.i(71645),s=e.i(52368);let a={en:{title:"How QuadWork builds your code",subtitle:"Five steps from your one-line request to a merged pull request.",close:"Close",helpClass:"",steps:[{title:"You assign a task in the chat",body:"Tell @head what to build. Be as specific or as vague as you like."},{title:"Head creates a GitHub issue",body:"Head opens an issue, adds it to the queue, and waits for your trigger."},{title:"Dev writes the code",body:"Dev clones a branch, implements the change, and opens a pull request."},{title:"Reviewers check the work",body:"RE1 and RE2 each review the PR independently. Both must approve before the PR is mergeable."},{title:"Head merges and continues",body:"Head merges the approved PR and assigns the next ticket from the queue. The cycle continues all night while you sleep."}]},ko:{title:"QuadWork가 코드를 만드는 방식",subtitle:"한 줄 요청에서 병합된 풀 리퀘스트까지 가는 5단계입니다.",close:"닫기",helpClass:"ko-help",steps:[{title:"채팅에서 작업을 지시합니다",body:"@head에게 만들 것을 말해주세요. 구체적으로 또는 모호하게 말해도 괜찮습니다."},{title:"Head가 GitHub 이슈를 만듭니다",body:"Head가 이슈를 열고, 큐에 추가한 뒤, 당신의 트리거를 기다립니다."},{title:"Dev가 코드를 작성합니다",body:"Dev가 브랜치를 만들고, 변경 사항을 구현한 뒤, 풀 리퀘스트를 엽니다."},{title:"리뷰어가 작업을 검토합니다",body:"RE1과 RE2가 각각 독립적으로 PR을 리뷰합니다. 둘 다 승인해야 PR이 병합 가능 상태가 됩니다."},{title:"Head가 병합하고 계속 진행합니다",body:"Head가 승인된 PR을 병합하고, 큐에서 다음 티켓을 할당합니다. 당신이 자는 동안에도 이 사이클은 밤새 계속됩니다."}]}};e.s(["default",0,function({open:e,onClose:i}){let{locale:o}=(0,s.useLocale)(),r=a[o];return((0,l.useEffect)(()=>{if(!e)return;let t=e=>{"Escape"===e.key&&i()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[e,i]),e)?(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm",onClick:i,role:"dialog","aria-modal":"true","aria-labelledby":"how-to-work-title",children:(0,t.jsxs)("div",{className:`relative mx-4 max-w-xl w-full max-h-[90vh] overflow-auto rounded-lg border border-white/10 bg-neutral-950 p-6 shadow-2xl ${r.helpClass}`,onClick:e=>e.stopPropagation(),children:[(0,t.jsx)("button",{type:"button",onClick:i,"aria-label":r.close,className:"absolute right-3 top-3 rounded p-1 text-neutral-400 hover:bg-white/5 hover:text-white",children:(0,t.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"1.8",children:(0,t.jsx)("path",{d:"M4 4l12 12M16 4L4 16",strokeLinecap:"round"})})}),(0,t.jsx)("h2",{id:"how-to-work-title",className:"text-base font-semibold text-white",children:r.title}),(0,t.jsx)("p",{className:"mt-2 text-[12px] text-neutral-400",children:r.subtitle}),(0,t.jsxs)("ol",{className:"mt-5 relative",children:[(0,t.jsx)("span",{"aria-hidden":!0,className:"absolute left-[14px] top-3 bottom-3 w-px bg-accent/30"}),r.steps.map((e,l)=>(0,t.jsxs)("li",{className:"relative pl-10 pb-5 last:pb-0",children:[(0,t.jsx)("span",{className:"absolute left-0 top-0 inline-flex items-center justify-center w-7 h-7 rounded-full border border-accent bg-neutral-950 text-accent text-[12px] font-semibold tabular-nums","aria-hidden":!0,children:l+1}),(0,t.jsx)("div",{className:"text-[13px] font-semibold text-white",children:e.title}),(0,t.jsx)("div",{className:"mt-1 text-[12px] leading-relaxed text-neutral-400",children:e.body})]},l))]})]})}):null}])}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94810,e=>{"use strict";var t=e.i(47167),s=e.i(43476),a=e.i(71645),r=e.i(18566),c=e.i(52368);let n={en:{title:"Set Up Your AI Dev Team",subtitle:"Configure agents, connect your repo, and launch a multi-agent development workflow in minutes.",steps:{name:{label:"Project Name",subtitle:"Name your project"},repo:{label:"GitHub Repo",subtitle:"Connect a repository"},models:{label:"Agent Models",subtitle:"Configure CLI backends"},workdir:{label:"Working Directory",subtitle:"Set the local path"},workspaces:{label:"Create Workspaces",subtitle:"Worktrees + seed files"},launch:{label:"Ready to Launch",subtitle:"Review & start"}},workdir:{title:"Where is your project?",desc:"Your project's git repository on your local machine. QuadWork will create 4 agent workspaces next to this directory.",scanning:"Scanning for existing clone...",found:"Found existing clone",useThis:"Use this",chooseDifferent:"Choose different path",noClone:e=>(0,s.jsxs)(s.Fragment,{children:["No local clone found for ",(0,s.jsx)("span",{className:"text-accent",children:e})]}),setupWillClone:"Setup will clone it to:",cloneHere:"Clone here & continue",next:"Next",layout:"Workspace layout"},nameStep:{title:"Name your project",desc:"This name identifies your project in the dashboard and agent configs.",placeholder:"e.g. My DeFi App",next:"Next"},repoStep:{title:"Connect a GitHub repository",desc:"Select an existing repo or enter one manually. Agents will work within this repo.",showingRepos:e=>(0,s.jsxs)(s.Fragment,{children:["Showing repos for ",(0,s.jsx)("span",{className:"text-accent",children:e})]}),searchPlaceholder:"Search repos...",loading:"Loading...",noRepos:"No repos found.",enterManually:"Enter manually instead",backToList:"Back to repo list",private:"private",enableProtection:e=>(0,s.jsxs)(s.Fragment,{children:["Enable branch protection on ",(0,s.jsx)("code",{className:"text-accent",children:"main"})]}),protectionDesc:"Run this after setup, or configure in GitHub UI:",copy:"copy",verifying:"Verifying...",verify:"Verify & Continue"},modelsStep:{title:"Configure agent CLI backends",desc:"Each agent runs its own CLI instance. Pick the backend for each role.",next:"Next"},workspacesStep:{title:"Create workspaces",desc:"This creates git worktrees for each agent and writes seed configuration files (AGENTS.md, CLAUDE.md) into each workspace.",creating:"Creating...",create:"Create Worktrees & Seed Files"},launchStep:{title:"Ready to launch",desc:"Everything is configured. Review the summary and launch your AI dev team.",teamRoster:"Team Roster",customPorts:"Custom ports",autoDetected:e=>`auto-detected: ${e}`,redirecting:"Project saved. Redirecting to dashboard...",launching:"Launching...",launched:"Launched!",launch:"Launch Project"},preview:{title:"Configuration Preview",project:"Project",repo:"Repository",branchProtection:"+ branch protection",backends:"Backends",reviewer:"Reviewer",directory:"Directory",status:"Status"},setupComplete:"Setup complete!",redirectingToDashboard:"Redirecting to project dashboard..."},ko:{title:"AI 개발 팀 설정하기",subtitle:"에이전트를 설정하고, 저장소를 연결하고, 몇 분 안에 멀티 에이전트 개발 워크플로우를 시작하세요.",steps:{name:{label:"프로젝트 이름",subtitle:"프로젝트 이름 정하기"},repo:{label:"GitHub 저장소",subtitle:"저장소 연결하기"},models:{label:"에이전트 모델",subtitle:"CLI 백엔드 구성"},workdir:{label:"작업 디렉터리",subtitle:"로컬 경로 지정"},workspaces:{label:"워크스페이스 생성",subtitle:"워크트리 + 초기 파일"},launch:{label:"실행 준비",subtitle:"검토 후 시작"}},workdir:{title:"프로젝트 위치는 어디인가요?",desc:"로컬 머신에 있는 프로젝트의 Git 저장소 경로입니다. QuadWork는 이 디렉터리 옆에 4개의 에이전트 워크스페이스를 생성합니다.",scanning:"기존 클론을 찾는 중...",found:"기존 클론을 찾았습니다",useThis:"이 경로 사용",chooseDifferent:"다른 경로 선택",noClone:e=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"text-accent",children:e})," 의 로컬 클론을 찾지 못했습니다"]}),setupWillClone:"설치 시 다음 경로로 클론합니다:",cloneHere:"여기에 클론하고 계속",next:"다음",layout:"워크스페이스 구조"},nameStep:{title:"프로젝트 이름 정하기",desc:"이 이름은 대시보드와 에이전트 설정에서 프로젝트를 식별하는 데 사용됩니다.",placeholder:"예: 내 DeFi 앱",next:"다음"},repoStep:{title:"GitHub 저장소 연결",desc:"기존 저장소를 선택하거나 직접 입력하세요. 에이전트는 이 저장소 안에서 작업합니다.",showingRepos:e=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"text-accent",children:e})," 의 저장소를 표시하는 중"]}),searchPlaceholder:"저장소 검색...",loading:"로딩 중...",noRepos:"저장소를 찾지 못했습니다.",enterManually:"직접 입력하기",backToList:"저장소 목록으로 돌아가기",private:"비공개",enableProtection:e=>(0,s.jsxs)(s.Fragment,{children:[" ",(0,s.jsx)("code",{className:"text-accent",children:"main"})," 브랜치 보호 사용"]}),protectionDesc:"설치 후 이 명령을 실행하거나 GitHub UI에서 직접 설정하세요:",copy:"복사",verifying:"확인 중...",verify:"확인 후 계속"},modelsStep:{title:"에이전트 CLI 백엔드 구성",desc:"각 에이전트는 자체 CLI 인스턴스를 사용합니다. 역할별로 백엔드를 선택하세요.",next:"다음"},workspacesStep:{title:"워크스페이스 생성",desc:"각 에이전트용 Git 워크트리를 만들고 각 워크스페이스에 초기 설정 파일(AGENTS.md, CLAUDE.md)을 작성합니다.",creating:"생성 중...",create:"워크트리 및 초기 파일 생성"},launchStep:{title:"실행 준비 완료",desc:"모든 설정이 끝났습니다. 요약을 확인하고 AI 개발 팀을 시작하세요.",teamRoster:"팀 구성",customPorts:"사용자 지정 포트",autoDetected:e=>`자동 감지: ${e}`,redirecting:"프로젝트를 저장했습니다. 대시보드로 이동 중...",launching:"실행 중...",launched:"실행됨!",launch:"프로젝트 실행"},preview:{title:"설정 미리보기",project:"프로젝트",repo:"저장소",branchProtection:"+ 브랜치 보호",backends:"백엔드",reviewer:"리뷰어",directory:"디렉터리",status:"상태"},setupComplete:"설정 완료!",redirectingToDashboard:"프로젝트 대시보드로 이동 중..."}},l=[{value:"claude",label:"Claude Code"},{value:"codex",label:"Codex"}],o=[{key:"head",label:"Head",role:"Owner / Final Guard",desc:"Merges PRs, makes final calls"},{key:"re1",label:"RE1",role:"Design Reviewer",desc:"Reviews architecture & design"},{key:"re2",label:"RE2",role:"Code Reviewer",desc:"Reviews implementation quality"},{key:"dev",label:"Dev",role:"Full-Stack Builder",desc:"Implements features & fixes"}];function i({repo:e,workingDir:t,setWorkingDir:r,error:l,onNext:o}){let{locale:d}=(0,c.useLocale)(),p=n[d].workdir,[x,u]=(0,a.useState)(!0),[m,h]=(0,a.useState)(null),[b,g]=(0,a.useState)(!1),j=e?e.split("/")[1]:"project";return(0,a.useEffect)(()=>{e?fetch(`/api/setup/detect-clone?repo=${encodeURIComponent(e)}`).then(e=>e.ok?e.json():null).then(e=>{h(e),e?.found&&e.path?r(e.path):e?.suggested&&r(e.suggested),u(!1)}).catch(()=>u(!1)):u(!1)},[e,r]),(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-text mb-1",children:p.title}),(0,s.jsx)("p",{className:"text-[11px] text-text-muted mb-3",children:p.desc}),x&&(0,s.jsx)("p",{className:"text-[11px] text-text-muted mb-3",children:p.scanning}),!x&&m?.found&&(0,s.jsxs)("div",{className:"border border-accent/30 bg-accent/5 p-3 mb-4 text-[11px]",children:[(0,s.jsx)("p",{className:"text-accent font-semibold mb-1",children:p.found}),(0,s.jsx)("p",{className:"text-text font-mono",children:m.path}),(0,s.jsxs)("div",{className:"flex gap-2 mt-2",children:[(0,s.jsx)("button",{onClick:o,className:"px-3 py-1 bg-accent text-bg text-[11px] font-semibold hover:bg-accent-dim transition-colors",children:p.useThis}),(0,s.jsx)("button",{onClick:()=>{g(!0),r("")},className:"px-3 py-1 text-[11px] text-text-muted border border-border hover:text-text transition-colors",children:p.chooseDifferent})]})]}),!x&&!m?.found&&!b&&(0,s.jsxs)("div",{className:"border border-border bg-bg-surface p-3 mb-4 text-[11px]",children:[(0,s.jsx)("p",{className:"text-text-muted mb-1",children:p.noClone(e)}),(0,s.jsx)("p",{className:"text-text-muted mb-2",children:p.setupWillClone}),(0,s.jsx)("p",{className:"text-text font-mono mb-2",children:m?.suggested||`~/Projects/${j}`}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("button",{onClick:o,disabled:!t.trim(),className:"px-3 py-1 bg-accent text-bg text-[11px] font-semibold hover:bg-accent-dim transition-colors disabled:opacity-50",children:p.cloneHere}),(0,s.jsx)("button",{onClick:()=>g(!0),className:"px-3 py-1 text-[11px] text-text-muted border border-border hover:text-text transition-colors",children:p.chooseDifferent})]})]}),(b||!x&&!m)&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("input",{value:t,onChange:e=>r(e.target.value),placeholder:`~/Projects/${j}`,className:"w-full bg-transparent border border-border px-2 py-1.5 text-[12px] text-text outline-none focus:border-accent mb-2"}),(0,s.jsx)("button",{onClick:o,disabled:!t.trim(),className:"px-4 py-1.5 bg-accent text-bg text-[12px] font-semibold hover:bg-accent-dim transition-colors disabled:opacity-50",children:p.next})]}),l&&(0,s.jsx)("p",{className:"text-[11px] text-error mt-2",children:l}),(0,s.jsxs)("div",{className:"border border-border bg-bg-surface p-3 mt-4 text-[11px] text-text-muted font-mono space-y-0.5",children:[(0,s.jsx)("p",{className:"text-[10px] uppercase tracking-wider text-text-muted mb-1 font-sans",children:p.layout}),(0,s.jsxs)("p",{className:"text-accent",children:[j,"/ ← your repo"]}),(0,s.jsxs)("p",{children:[j,"-head/ ← Head agent"]}),(0,s.jsxs)("p",{children:[j,"-dev/ ← Dev agent"]}),(0,s.jsxs)("p",{children:[j,"-re1/ ← RE1"]}),(0,s.jsxs)("p",{children:[j,"-re2/ ← RE2"]})]})]})}e.s(["default",0,function(){let e=(0,r.useRouter)(),{locale:d,hydrated:p}=(0,c.useLocale)(),x=n[d],[u,m]=(0,a.useState)(()=>[{id:"name",label:x.steps.name.label,subtitle:x.steps.name.subtitle,status:"active"},{id:"repo",label:x.steps.repo.label,subtitle:x.steps.repo.subtitle,status:"pending"},{id:"models",label:x.steps.models.label,subtitle:x.steps.models.subtitle,status:"pending"},{id:"workdir",label:x.steps.workdir.label,subtitle:x.steps.workdir.subtitle,status:"pending"},{id:"workspaces",label:x.steps.workspaces.label,subtitle:x.steps.workspaces.subtitle,status:"pending"},{id:"launch",label:x.steps.launch.label,subtitle:x.steps.launch.subtitle,status:"pending"}]),[h,b]=(0,a.useState)(0),[g,j]=(0,a.useState)(""),[f,v]=(0,a.useState)(""),[N,k]=(0,a.useState)(""),[y,w]=(0,a.useState)([]),[S,C]=(0,a.useState)(!1),[_,P]=(0,a.useState)(!1),[R,T]=(0,a.useState)(""),[H,D]=(0,a.useState)([]),[$,L]=(0,a.useState)("personal"),[I,A]=(0,a.useState)(""),[E,F]=(0,a.useState)(!1),[q,W]=(0,a.useState)({head:"claude",re1:"claude",re2:"claude",dev:"claude"}),[G,M]=(0,a.useState)(!0),[U,O]=(0,a.useState)(!1),[B,z]=(0,a.useState)(""),[Y,K]=(0,a.useState)("paste"),[J,Q]=(0,a.useState)(""),[V,X]=(0,a.useState)("~/.quadwork/reviewer-token"),[Z,ee]=(0,a.useState)(""),[et,es]=(0,a.useState)({}),[ea,er]=(0,a.useState)(!1),[ec,en]=(0,a.useState)([]),[el,eo]=(0,a.useState)("idle"),[ei,ed]=(0,a.useState)(!1),[ep,ex]=(0,a.useState)({chattr:0,mcpHttp:0,mcpSse:0}),[eu,em]=(0,a.useState)({chattr:"",mcpHttp:"",mcpSse:""}),eh=e=>{let t=parseInt(eu[e],10),s=Number.isFinite(t)&&t>0&&t<=65535?t:0;ex(t=>({...t,[e]:s})),em(t=>({...t,[e]:s?String(s):""}))},[eb,eg]=(0,a.useState)({chattr:0,mcpHttp:0,mcpSse:0}),[ej,ef]=(0,a.useState)(null);(0,a.useEffect)(()=>{m(e=>[{id:"name",label:x.steps.name.label,subtitle:x.steps.name.subtitle,status:e[0].status,error:e[0].error},{id:"repo",label:x.steps.repo.label,subtitle:x.steps.repo.subtitle,status:e[1].status,error:e[1].error},{id:"models",label:x.steps.models.label,subtitle:x.steps.models.subtitle,status:e[2].status,error:e[2].error},{id:"workdir",label:x.steps.workdir.label,subtitle:x.steps.workdir.subtitle,status:e[3].status,error:e[3].error},{id:"workspaces",label:x.steps.workspaces.label,subtitle:x.steps.workspaces.subtitle,status:e[4].status,error:e[4].error},{id:"launch",label:x.steps.launch.label,subtitle:x.steps.launch.subtitle,status:e[5].status,error:e[5].error}])},[x]),(0,a.useEffect)(()=>{fetch("/api/cli-status").then(e=>e.json()).then(e=>{ef(e);let t=e.claude&&!e.codex?"claude":!e.claude&&e.codex?"codex":null;t?W({head:t,re1:t,re2:t,dev:t}):e.claude&&e.codex&&W({head:"codex",dev:"claude",re1:"codex",re2:"claude"})}).catch(()=>{})},[]),(0,a.useEffect)(()=>{fetch("/api/github/user").then(e=>e.json()).then(e=>{e.login&&T(e.login)}).catch(()=>{}),fetch("/api/github/orgs").then(e=>e.json()).then(e=>{Array.isArray(e)&&D(e)}).catch(()=>{})},[]);let ev="organization"===$?I:R;(0,a.useEffect)(()=>{ev?(C(!0),fetch(`/api/github/repos?owner=${encodeURIComponent(ev)}`).then(e=>e.json()).then(e=>{Array.isArray(e)?w(e):w([])}).catch(()=>w([])).finally(()=>C(!1))):w([])},[ev]);let eN=(0,a.useCallback)((e,t)=>{m(s=>s.map((s,a)=>a===e?{...s,...t}:s))},[]),[ek,ey]=(0,a.useState)(0),ew=(0,a.useCallback)(()=>{let e=h<ek?ek:h+1;m(t=>t.map((t,s)=>s===h?{...t,status:"done"}:s===e?{...t,status:"active"}:t)),b(e),ey(t=>Math.max(t,e))},[h,ek]),eS=(0,a.useCallback)(e=>{m(t=>t.map((t,s)=>s===e?{...t,status:"active"}:s===h?"done"===t.status?t:{...t,status:"pending"}:t)),b(e)},[h]),eC=async(e,t)=>{er(!0);try{let s=await fetch(`/api/setup?step=${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await s.json();return er(!1),a}catch{return er(!1),{ok:!1,error:"Request failed"}}},e_=async()=>{let e=await eC("verify-repo",{repo:f});e.ok?ew():eN(h,{status:"error",error:e.error})},eP=async()=>{if(er(!0),en([]),U&&"paste"===Y&&J){en(e=>[...e,"Saving reviewer token..."]);try{let e=await fetch("/api/setup/save-token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:J})}),t=await e.json();t.ok&&en(e=>[...e,`Token saved to ${t.path}`])}catch{}}en(e=>[...e,"Creating worktrees..."]);let e=await eC("create-worktrees",{workingDir:Z,repo:f});if(!e.ok){en(t=>[...t,`Error: ${e.errors?.join(", ")||e.error}`]),eN(h,{status:"error",error:e.errors?.join(", ")||e.error}),er(!1);return}en(e=>[...e,"Worktrees created."]),en(e=>[...e,"Writing seed files..."]);let t=U?"file"===Y?V:"~/.quadwork/reviewer-token":"",s=await eC("seed-files",{workingDir:Z,projectName:g,repo:f,reviewerUser:U?B:"",reviewerTokenPath:t});if(!s.ok){en(e=>[...e,`Error: ${s.error}`]),eN(h,{status:"error",error:s.error}),er(!1);return}en(e=>[...e,"Seed files written."]),en(e=>[...e,"Done."]),er(!1),ew()},eR=async()=>{let t,s,a;eh("chattr"),eh("mcpHttp"),eh("mcpSse");let r=e=>{let t=eu[e];if(""!==t){let e=parseInt(t,10);return Number.isFinite(e)&&e>0&&e<=65535?e:0}return ep[e]},c={chattr:r("chattr"),mcpHttp:r("mcpHttp"),mcpSse:r("mcpSse")};if(eo("running"),ei&&c.chattr>0){t=c.chattr,s=c.mcpHttp||c.chattr-100,a=c.mcpSse||s+1;let e=[t,s,a];try{let t=(await Promise.all(e.map(e=>fetch(`/api/port-check?port=${e}`).then(e=>e.json())))).filter(e=>!e.free).map(e=>e.port);if(t.length>0){eo("error"),eN(h,{status:"error",error:`Port${t.length>1?"s":""} ${t.join(", ")} already in use`});return}}catch{}}else if(eb.chattr)t=eb.chattr,s=eb.mcpHttp,a=eb.mcpSse;else try{let e=await fetch("/api/port-check/auto?start=8300&count=1"),r=await e.json(),c=await fetch("/api/port-check/auto?start=8200&count=2"),n=await c.json();t=r.ports?.[0]||8300,s=n.ports?.[0]||8200,a=n.ports?.[1]||8201}catch{t=8300,s=8200,a=8201}let n=await eC("agentchattr-config",{workingDir:Z,projectName:g,repo:f,backends:q,agentchattr_port:t,mcp_http_port:s,mcp_sse_port:a});n.ok&&es({agentchattr_token:n.agentchattr_token,agentchattr_port:n.agentchattr_port,mcp_http_port:n.mcp_http_port,mcp_sse_port:n.mcp_sse_port});let l=Z.split("/").pop()||g.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),o=await eC("add-config",{id:l,name:g,repo:f,workingDir:Z,backends:q,auto_approve:G,...n.ok?{agentchattr_token:n.agentchattr_token,agentchattr_port:n.agentchattr_port,mcp_http_port:n.mcp_http_port,mcp_sse_port:n.mcp_sse_port}:et});o.ok?(eo("done"),eN(h,{status:"done"}),setTimeout(()=>e.push(`/project/${l}`),1200)):(eo("error"),eN(h,{status:"error",error:o.error}))};(0,a.useEffect)(()=>{u[h]?.id==="launch"&&(async()=>{try{let e=await fetch("/api/port-check/auto?start=8300&count=1"),t=await e.json(),s=await fetch("/api/port-check/auto?start=8200&count=2"),a=await s.json(),r={chattr:t.ports?.[0]||8300,mcpHttp:a.ports?.[0]||8200,mcpSse:a.ports?.[1]||8201};eg(r),ep.chattr||(ex(r),em({chattr:String(r.chattr),mcpHttp:String(r.mcpHttp),mcpSse:String(r.mcpSse)}))}catch{}})()},[h,u]);let eT=y.filter(e=>e.name.toLowerCase().includes(N.toLowerCase())),eH=u[h];return p?(0,s.jsxs)("div",{className:"h-full overflow-y-auto",children:[(0,s.jsxs)("div",{className:"px-6 pt-6 pb-4 border-b border-border",children:[(0,s.jsx)("h1",{className:"text-lg font-semibold text-text tracking-tight",children:x.title}),(0,s.jsx)("p",{className:"text-[11px] text-text-muted mt-1",children:x.subtitle})]}),(0,s.jsxs)("div",{className:"flex h-[calc(100%-80px)]",children:[(0,s.jsxs)("div",{className:"flex-1 flex gap-6 p-6 overflow-y-auto",children:[(0,s.jsx)("div",{className:"w-44 shrink-0",children:u.map((e,t)=>{let a="done"===e.status;return(0,s.jsxs)("div",{className:`flex items-start gap-2 py-2 ${a?"cursor-pointer group":""}`,onClick:a?()=>eS(t):void 0,role:a?"button":void 0,tabIndex:a?0:void 0,onKeyDown:a?e=>{("Enter"===e.key||" "===e.key)&&eS(t)}:void 0,children:[(0,s.jsx)("span",{className:`w-5 h-5 flex items-center justify-center text-[10px] border shrink-0 mt-0.5 ${"done"===e.status?"border-accent text-accent":"error"===e.status?"border-error text-error":"active"===e.status?"border-accent text-accent bg-accent/10":"skipped"===e.status?"border-border text-text-muted line-through":"border-border text-text-muted"}`,children:"done"===e.status?"✓":"error"===e.status?"!":t+1}),(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:`text-[11px] block leading-tight ${"active"===e.status?"text-text font-semibold":"done"===e.status?"text-accent group-hover:text-text":"text-text-muted"}`,children:e.label}),(0,s.jsx)("span",{className:"text-[10px] text-text-muted block",children:e.subtitle})]})]},e.id)})}),(0,s.jsxs)("div",{className:"flex-1 border border-border p-5 min-h-0",children:[eH?.id==="name"&&(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-text mb-1",children:x.nameStep.title}),(0,s.jsx)("p",{className:"text-[11px] text-text-muted mb-4",children:x.nameStep.desc}),(0,s.jsx)("input",{value:g,onChange:e=>j(e.target.value),placeholder:x.nameStep.placeholder,className:"w-full bg-transparent border border-border px-2 py-1.5 text-[12px] text-text outline-none focus:border-accent mb-4",autoFocus:!0}),(0,s.jsx)("button",{onClick:ew,disabled:!g.trim(),className:"px-4 py-1.5 bg-accent text-bg text-[12px] font-semibold hover:bg-accent-dim transition-colors disabled:opacity-50",children:x.nameStep.next||"Next"})]}),eH?.id==="repo"&&(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-text mb-1",children:x.repoStep.title}),(0,s.jsx)("p",{className:"text-[11px] text-text-muted mb-4",children:x.repoStep.desc}),!_&&(0,s.jsxs)(s.Fragment,{children:[H.length>0&&(0,s.jsxs)("div",{className:"flex items-center gap-4 mb-2",children:[(0,s.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,s.jsx)("input",{type:"radio",name:"ownerMode",checked:"personal"===$,onChange:()=>L("personal"),className:"accent-accent"}),(0,s.jsx)("span",{className:"text-[11px] text-text",children:"Personal"})]}),(0,s.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,s.jsx)("input",{type:"radio",name:"ownerMode",checked:"organization"===$,onChange:()=>{L("organization"),!I&&H[0]&&A(H[0])},className:"accent-accent"}),(0,s.jsx)("span",{className:"text-[11px] text-text",children:"Organization"})]}),"organization"===$&&(0,s.jsx)("select",{value:I,onChange:e=>A(e.target.value),className:"bg-transparent border border-border px-2 py-0.5 text-[11px] text-text outline-none focus:border-accent cursor-pointer ml-auto",children:H.map(e=>(0,s.jsx)("option",{value:e,className:"bg-bg-surface",children:e},e))})]}),ev&&(0,s.jsx)("p",{className:"text-[11px] text-text-muted mb-2",children:x.repoStep.showingRepos(ev)}),(0,s.jsx)("input",{value:N,onChange:e=>k(e.target.value),placeholder:x.repoStep.searchPlaceholder,className:"w-full bg-transparent border border-border px-2 py-1.5 text-[12px] text-text outline-none focus:border-accent mb-2"}),S&&(0,s.jsx)("p",{className:"text-[11px] text-text-muted mb-2",children:x.repoStep.loading}),(0,s.jsxs)("div",{className:"max-h-40 overflow-y-auto border border-border mb-3",children:[eT.map(e=>(0,s.jsxs)("button",{onClick:()=>v(`${ev}/${e.name}`),className:`w-full text-left px-3 py-1.5 text-[11px] border-b border-border/50 last:border-b-0 hover:bg-accent/5 transition-colors ${f===`${ev}/${e.name}`?"bg-accent/10 text-accent":"text-text"}`,children:[(0,s.jsx)("span",{className:"font-semibold",children:e.name}),e.isPrivate&&(0,s.jsx)("span",{className:"text-[10px] text-text-muted ml-2",children:x.repoStep.private}),e.description&&(0,s.jsx)("span",{className:"text-[10px] text-text-muted ml-2",children:e.description})]},e.name)),!S&&0===eT.length&&(0,s.jsx)("p",{className:"px-3 py-2 text-[11px] text-text-muted",children:x.repoStep.noRepos})]}),(0,s.jsx)("button",{onClick:()=>P(!0),className:"text-[11px] text-text-muted hover:text-accent transition-colors mb-3 block",children:x.repoStep.enterManually})]}),_&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("input",{value:f,onChange:e=>v(e.target.value),placeholder:"owner/repo",className:"w-full bg-transparent border border-border px-2 py-1.5 text-[12px] text-text outline-none focus:border-accent mb-2"}),(0,s.jsx)("button",{onClick:()=>P(!1),className:"text-[11px] text-text-muted hover:text-accent transition-colors mb-3 block",children:x.repoStep.backToList})]}),(0,s.jsxs)("label",{className:"flex items-center gap-2 mb-4 cursor-pointer",children:[(0,s.jsx)("input",{type:"checkbox",checked:E,onChange:e=>F(e.target.checked),className:"accent-accent"}),(0,s.jsx)("span",{className:"text-[11px] text-text-muted",children:x.repoStep.enableProtection(f||"owner/repo")})]}),E&&(0,s.jsxs)("div",{className:"border border-border bg-bg-surface p-3 mb-4 text-[11px] space-y-2",children:[(0,s.jsx)("p",{className:"text-text-muted",children:x.repoStep.protectionDesc}),(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("code",{className:"text-accent flex-1 select-all text-[10px] break-all",children:`gh api repos/${f||"owner/repo"}/branches/main/protection -X PUT -f "required_pull_request_reviews[required_approving_review_count]=1" -f "enforce_admins=false" -f "required_status_checks=null" -f "restrictions=null"`}),(0,s.jsx)("button",{onClick:()=>navigator.clipboard.writeText(`gh api repos/${f}/branches/main/protection -X PUT -f "required_pull_request_reviews[required_approving_review_count]=1" -f "enforce_admins=false" -f "required_status_checks=null" -f "restrictions=null"`),className:"text-[10px] text-text-muted hover:text-accent shrink-0",children:x.repoStep.copy})]})]}),eH.error&&(0,s.jsx)("p",{className:"text-[11px] text-error mb-2",children:eH.error}),(0,s.jsx)("button",{onClick:e_,disabled:!f||ea,className:"px-4 py-1.5 bg-accent text-bg text-[12px] font-semibold hover:bg-accent-dim transition-colors disabled:opacity-50",children:ea?x.repoStep.verifying:x.repoStep.verify})]}),eH?.id==="models"&&(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-text mb-1",children:x.modelsStep.title}),(0,s.jsx)("p",{className:"text-[11px] text-text-muted mb-4",children:x.modelsStep.desc}),ej&&!ej.claude&&ej.codex&&(0,s.jsxs)("div",{className:"border border-accent/20 bg-accent/5 p-3 mb-4 text-[11px]",children:[(0,s.jsx)("p",{className:"text-text",children:"You have Codex CLI installed — great! All 4 agents will use Codex."}),(0,s.jsx)("p",{className:"text-text-muted mt-1.5",children:"Tip: Installing Claude Code too gives your team different AI perspectives, which can improve code review quality. You can add it anytime:"}),(0,s.jsx)("p",{className:"text-accent mt-1 font-mono text-[10px]",children:"npm install -g @anthropic-ai/claude-code"}),(0,s.jsx)("p",{className:"text-text-muted mt-1.5",children:"For now, Codex CLI handles everything perfectly. Let's continue!"})]}),ej&&ej.claude&&!ej.codex&&(0,s.jsxs)("div",{className:"border border-accent/20 bg-accent/5 p-3 mb-4 text-[11px]",children:[(0,s.jsx)("p",{className:"text-text",children:"You have Claude Code installed — great! All 4 agents will use Claude."}),(0,s.jsx)("p",{className:"text-text-muted mt-1.5",children:"Tip: Installing Codex CLI too gives your team different AI perspectives, which can improve code review quality. You can add it anytime:"}),(0,s.jsx)("p",{className:"text-accent mt-1 font-mono text-[10px]",children:"npm install -g codex"}),(0,s.jsx)("p",{className:"text-text-muted mt-1.5",children:"For now, Claude Code handles everything perfectly. Let's continue!"})]}),(0,s.jsx)("div",{className:"border border-border mb-4",children:o.map(e=>(0,s.jsxs)("div",{className:"flex items-center justify-between px-3 py-2 border-b border-border/50 last:border-b-0",children:[(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("span",{className:"text-[11px] text-text font-semibold block",children:e.label}),(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:e.desc})]}),(0,s.jsx)("select",{value:q[e.key],onChange:t=>W({...q,[e.key]:t.target.value}),className:"bg-transparent border border-border px-2 py-0.5 text-[11px] text-text outline-none focus:border-accent cursor-pointer ml-3",children:l.map(e=>(0,s.jsxs)("option",{value:e.value,className:"bg-bg-surface",disabled:!!ej&&!ej[e.value],children:[e.label,ej&&!ej[e.value]?" (not installed)":""]},e.value))})]},e.key))}),(0,s.jsxs)("label",{className:"flex items-center gap-2 mb-3 cursor-pointer",title:"Enable permission bypass flags so agents can work autonomously without prompting for approval on every action",children:[(0,s.jsx)("input",{type:"checkbox",checked:G,onChange:e=>M(e.target.checked),className:"accent-accent"}),(0,s.jsx)("span",{className:"text-[11px] text-text",children:"Auto-approve agent actions"}),(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:"(required for autonomous work)"})]}),(0,s.jsxs)("label",{className:"flex items-center gap-2 mb-3 cursor-pointer",children:[(0,s.jsx)("input",{type:"checkbox",checked:U,onChange:e=>O(e.target.checked),className:"accent-accent"}),(0,s.jsx)("span",{className:"text-[11px] text-text-muted",children:"Configure reviewer credentials (for GitHub PR reviews)"})]}),U&&(0,s.jsxs)("div",{className:"border border-border p-3 mb-4 space-y-3",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-[11px] text-text-muted block mb-1",children:"Reviewer GitHub username"}),(0,s.jsx)("input",{value:B,onChange:e=>z(e.target.value),placeholder:"github-username",className:"w-full bg-transparent border border-border px-2 py-1.5 text-[12px] text-text outline-none focus:border-accent"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-[11px] text-text-muted block mb-2",children:"Token source"}),(0,s.jsxs)("div",{className:"flex gap-4 mb-2",children:[(0,s.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,s.jsx)("input",{type:"radio",name:"tokenMode",checked:"paste"===Y,onChange:()=>K("paste"),className:"accent-accent"}),(0,s.jsx)("span",{className:"text-[11px] text-text",children:"Paste token"})]}),(0,s.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer",children:[(0,s.jsx)("input",{type:"radio",name:"tokenMode",checked:"file"===Y,onChange:()=>K("file"),className:"accent-accent"}),(0,s.jsx)("span",{className:"text-[11px] text-text",children:"Use existing file"})]})]}),"paste"===Y?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("input",{value:J,onChange:e=>Q(e.target.value),placeholder:"ghp_xxxxxxxxxxxxxxxxxxxx",type:"password",className:"w-full bg-transparent border border-border px-2 py-1.5 text-[12px] text-text outline-none focus:border-accent"}),(0,s.jsxs)("div",{className:"mt-2 text-[10px] text-text-muted leading-relaxed",children:[(0,s.jsxs)("p",{children:["Paste a GitHub ",(0,s.jsx)("span",{className:"text-text",children:"Personal Access Token (classic)"}),"."]}),(0,s.jsxs)("p",{className:"mt-1",children:["Create one at"," ",(0,s.jsx)("a",{href:"https://github.com/settings/tokens",target:"_blank",rel:"noopener noreferrer",className:"text-accent hover:underline",children:"github.com/settings/tokens"})," ","→ Generate new token (classic)"]}),(0,s.jsxs)("p",{className:"mt-1",children:["Required permission: ",(0,s.jsx)("span",{className:"text-accent",children:"repo"})," (Full control of private repositories)",(0,s.jsx)("br",{}),(0,s.jsx)("span",{className:"text-text-muted",children:"Needed for reading PRs, posting reviews, and approving/requesting changes"})]})]})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("input",{value:V,onChange:e=>X(e.target.value),placeholder:"~/.quadwork/reviewer-token",className:"w-full bg-transparent border border-border px-2 py-1.5 text-[12px] text-text outline-none focus:border-accent"}),V&&!V.startsWith("~/.quadwork")&&!V.startsWith(String.raw`${t.default.env.HOME}/.quadwork`)&&(0,s.jsx)("p",{className:"text-[10px] text-[#ffcc00] mt-1",children:"This path may be inside a git repository. Consider using the default ~/.quadwork/ location to avoid accidentally committing tokens."})]})]})]}),(0,s.jsx)("button",{onClick:ew,className:"px-4 py-1.5 bg-accent text-bg text-[12px] font-semibold hover:bg-accent-dim transition-colors",children:x.modelsStep.next})]}),eH?.id==="workdir"&&(0,s.jsx)(i,{repo:f,workingDir:Z,setWorkingDir:ee,error:eH.error,onNext:ew}),eH?.id==="workspaces"&&(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-text mb-1",children:x.workspacesStep.title}),(0,s.jsx)("p",{className:"text-[11px] text-text-muted mb-4",children:x.workspacesStep.desc}),eH.error&&(0,s.jsx)("p",{className:"text-[11px] text-error mb-2",children:eH.error}),ec.length>0&&(0,s.jsx)("div",{className:"border border-border bg-bg-surface p-3 mb-4 text-[11px] text-text-muted space-y-0.5 font-mono",children:ec.map((e,t)=>(0,s.jsx)("p",{children:e},t))}),(0,s.jsx)("button",{onClick:eP,disabled:ea,className:"px-4 py-1.5 bg-accent text-bg text-[12px] font-semibold hover:bg-accent-dim transition-colors disabled:opacity-50",children:ea?x.workspacesStep.creating:x.workspacesStep.create})]}),eH?.id==="launch"&&(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-text mb-1",children:x.launchStep.title}),(0,s.jsx)("p",{className:"text-[11px] text-text-muted mb-4",children:x.launchStep.desc}),(0,s.jsxs)("div",{className:"border border-border mb-4",children:[(0,s.jsx)("div",{className:"px-3 py-1.5 border-b border-border bg-bg-surface",children:(0,s.jsx)("span",{className:"text-[11px] text-text font-semibold",children:x.launchStep.teamRoster})}),o.map(e=>(0,s.jsxs)("div",{className:"flex items-center justify-between px-3 py-1.5 border-b border-border/50 last:border-b-0",children:[(0,s.jsx)("span",{className:"text-[11px] text-text font-semibold",children:e.label}),(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:e.role}),(0,s.jsx)("span",{className:"text-[11px] text-accent",children:"claude"===q[e.key]?"Claude Code":"Codex"})]},e.key))]}),(0,s.jsxs)("div",{className:"mb-4",children:[(0,s.jsxs)("label",{className:"flex items-center gap-2 cursor-pointer mb-2",children:[(0,s.jsx)("input",{type:"checkbox",checked:ei,onChange:e=>ed(e.target.checked),className:"accent-accent"}),(0,s.jsx)("span",{className:"text-[11px] text-text-muted",children:x.launchStep.customPorts})]}),ei&&(0,s.jsx)("div",{className:"border border-border p-3 space-y-2",children:(0,s.jsxs)("div",{className:"grid grid-cols-3 gap-3",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsx)("label",{className:"text-[10px] text-text-muted uppercase tracking-wider",children:"AgentChattr port"}),(0,s.jsx)("input",{type:"number",value:eu.chattr,onChange:e=>em({...eu,chattr:e.target.value}),onBlur:()=>eh("chattr"),placeholder:String(eb.chattr||8300),className:"bg-transparent border border-border px-2 py-1 text-[11px] text-text outline-none focus:border-accent"}),eb.chattr>0&&(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:x.launchStep.autoDetected(eb.chattr)})]}),(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsx)("label",{className:"text-[10px] text-text-muted uppercase tracking-wider",children:"MCP HTTP port"}),(0,s.jsx)("input",{type:"number",value:eu.mcpHttp,onChange:e=>em({...eu,mcpHttp:e.target.value}),onBlur:()=>eh("mcpHttp"),placeholder:String(eb.mcpHttp||8200),className:"bg-transparent border border-border px-2 py-1 text-[11px] text-text outline-none focus:border-accent"}),eb.mcpHttp>0&&(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:x.launchStep.autoDetected(eb.mcpHttp)})]}),(0,s.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,s.jsx)("label",{className:"text-[10px] text-text-muted uppercase tracking-wider",children:"MCP SSE port"}),(0,s.jsx)("input",{type:"number",value:eu.mcpSse,onChange:e=>em({...eu,mcpSse:e.target.value}),onBlur:()=>eh("mcpSse"),placeholder:String(eb.mcpSse||8201),className:"bg-transparent border border-border px-2 py-1 text-[11px] text-text outline-none focus:border-accent"}),eb.mcpSse>0&&(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:x.launchStep.autoDetected(eb.mcpSse)})]})]})})]}),eH.error&&(0,s.jsx)("p",{className:"text-[11px] text-error mb-2",children:eH.error}),"done"===el&&(0,s.jsx)("p",{className:"text-[11px] text-accent mb-2",children:x.launchStep.redirecting}),(0,s.jsx)("button",{onClick:eR,disabled:"running"===el||"done"===el,className:"px-5 py-2 bg-accent text-bg text-[12px] font-semibold hover:bg-accent-dim transition-colors disabled:opacity-50",children:"running"===el?x.launchStep.launching:"done"===el?x.launchStep.launched:x.launchStep.launch})]}),h>=u.length&&(0,s.jsxs)("div",{className:"text-center py-8",children:[(0,s.jsx)("p",{className:"text-accent text-sm font-semibold",children:x.setupComplete}),(0,s.jsx)("p",{className:"text-[11px] text-text-muted mt-2",children:x.redirectingToDashboard})]})]})]}),(0,s.jsxs)("div",{className:"w-64 shrink-0 border-l border-border p-4 overflow-y-auto bg-bg-surface/50",children:[(0,s.jsx)("h3",{className:"text-[11px] font-semibold text-text-muted uppercase tracking-wider mb-3",children:x.preview.title}),(0,s.jsxs)("div",{className:"space-y-3 text-[11px]",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"text-text-muted block mb-0.5",children:x.preview.project}),(0,s.jsx)("span",{className:"text-text",children:g||"—"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"text-text-muted block mb-0.5",children:x.preview.repo}),(0,s.jsx)("span",{className:"text-text",children:f||"—"}),E&&(0,s.jsx)("span",{className:"text-[10px] text-accent block",children:x.preview.branchProtection})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"text-text-muted block mb-0.5",children:x.preview.backends}),Object.entries(q).map(([e,t])=>(0,s.jsxs)("div",{className:"flex justify-between",children:[(0,s.jsx)("span",{className:"text-text capitalize",children:e}),(0,s.jsx)("span",{className:"text-accent",children:t})]},e))]}),U&&B&&(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"text-text-muted block mb-0.5",children:x.preview.reviewer}),(0,s.jsxs)("span",{className:"text-text",children:["@",B]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"text-text-muted block mb-0.5",children:x.preview.directory}),(0,s.jsx)("span",{className:"text-text font-mono text-[10px]",children:Z||"—"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"text-text-muted block mb-0.5",children:x.preview.status}),(0,s.jsx)("div",{className:"space-y-0.5",children:u.map(e=>(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("span",{className:`text-[10px] ${"done"===e.status?"text-accent":"error"===e.status?"text-error":"active"===e.status?"text-text":"text-text-muted"}`,children:"done"===e.status?"✓":"error"===e.status?"✗":"active"===e.status?"●":"○"}),(0,s.jsx)("span",{className:`text-[10px] ${"active"===e.status?"text-text":"text-text-muted"}`,children:e.label})]},e.id))})]})]})]})]})]}):(0,s.jsx)("div",{className:"h-full overflow-y-auto"})}])}]);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/4fa387ec64143e14-s.0q3udbd2bu5yp.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Fallback;src:local(Arial);ascent-override:74.67%;descent-override:21.92%;line-gap-override:0.0%;size-adjust:134.59%}.geist_mono_8d43a2aa-module__8Li5zG__className{font-family:Geist Mono,Geist Mono Fallback;font-style:normal}.geist_mono_8d43a2aa-module__8Li5zG__variable{--font-geist-mono:"Geist Mono", "Geist Mono Fallback"}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--color-red-400:#ff6568;--color-red-500:#fb2c36;--color-red-700:#bf000f;--color-red-900:#82181a;--color-amber-200:#fee685;--color-amber-300:#ffd236;--color-amber-400:#fcbb00;--color-amber-500:#f99c00;--color-green-500:#00c758;--color-blue-300:#90c5ff;--color-blue-400:#54a2ff;--color-neutral-200:#e5e5e5;--color-neutral-300:#d4d4d4;--color-neutral-400:#a1a1a1;--color-neutral-500:#737373;--color-neutral-600:#525252;--color-neutral-700:#404040;--color-neutral-900:#171717;--color-neutral-950:#0a0a0a;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-3xl:48rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-semibold:600;--font-weight-bold:700;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-geist-mono)}@supports (color:lab(0% 0 0)){:root,:host{--color-red-400:lab(63.7053% 60.745 31.3109);--color-red-500:lab(55.4814% 75.0732 48.8528);--color-red-700:lab(40.4273% 67.2623 53.7441);--color-red-900:lab(28.5139% 44.5539 29.0463);--color-amber-200:lab(91.7203% -.505269 49.9084);--color-amber-300:lab(86.4156% 6.13147 78.3961);--color-amber-400:lab(80.1641% 16.6016 99.2089);--color-amber-500:lab(72.7183% 31.8672 97.9407);--color-green-500:lab(70.5521% -66.5147 45.8073);--color-blue-300:lab(77.5052% -6.4629 -36.42);--color-blue-400:lab(65.0361% -1.42065 -56.9802);--color-neutral-200:lab(90.952% 0 -.0000119209);--color-neutral-300:lab(84.92% 0 -.0000119209);--color-neutral-400:lab(66.128% -.0000298023 .0000119209);--color-neutral-500:lab(48.496% 0 0);--color-neutral-600:lab(34.924% 0 0);--color-neutral-700:lab(27.036% 0 0);--color-neutral-900:lab(7.78201% -.0000149012 0);--color-neutral-950:lab(2.75381% 0 0)}}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.-top-1{top:calc(var(--spacing) * -1)}.-top-1\.5{top:calc(var(--spacing) * -1.5)}.top-0{top:calc(var(--spacing) * 0)}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.top-5{top:calc(var(--spacing) * 5)}.top-6{top:calc(var(--spacing) * 6)}.-right-1{right:calc(var(--spacing) * -1)}.-right-1\.5{right:calc(var(--spacing) * -1.5)}.right-0{right:calc(var(--spacing) * 0)}.right-3{right:calc(var(--spacing) * 3)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-5{bottom:calc(var(--spacing) * 5)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-16{left:calc(var(--spacing) * 16)}.left-\[14px\]{left:14px}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-4{margin-inline:calc(var(--spacing) * 4)}.my-1{margin-block:calc(var(--spacing) * 1)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-4{margin-block:calc(var(--spacing) * 4)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-\[12px\]{height:12px}.h-\[35px\]{height:35px}.h-\[80vh\]{height:80vh}.h-\[calc\(100\%-80px\)\]{height:calc(100% - 80px)}.h-full{height:100%}.h-px{height:1px}.max-h-28{max-height:calc(var(--spacing) * 28)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-\[90vh\]{max-height:90vh}.max-h-\[150px\]{max-height:150px}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-44{width:calc(var(--spacing) * 44)}.w-52{width:calc(var(--spacing) * 52)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-\[1px\]{width:1px}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[60\%\]{max-width:60%}.max-w-\[200px\]{max-width:200px}.max-w-\[520px\]{max-width:520px}.max-w-\[min\(18rem\,calc\(100vw-2rem\)\)\]{max-width:min(18rem,100vw - 2rem)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[140px\]{min-width:140px}.min-w-\[220px\]{min-width:220px}.min-w-\[280px\]{min-width:280px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-rotate-90{rotate:-90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.cursor-col-resize{cursor:col-resize}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing) * 0)}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-10{gap:calc(var(--spacing) * 10)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)))}.self-center{align-self:center}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[\#ffcc00\]\/40{border-color:#fc06;border-color:lab(84.7597% 8.24091 84.7906/.4)}.border-accent,.border-accent\/20{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.border-accent\/20{border-color:color-mix(in oklab, var(--accent) 20%, transparent)}}.border-accent\/30{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.border-accent\/30{border-color:color-mix(in oklab, var(--accent) 30%, transparent)}}.border-accent\/40{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.border-accent\/40{border-color:color-mix(in oklab, var(--accent) 40%, transparent)}}.border-accent\/50{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.border-accent\/50{border-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/40{border-color:color-mix(in oklab, var(--color-amber-500) 40%, transparent)}}.border-border,.border-border\/20{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/20{border-color:color-mix(in oklab, var(--border) 20%, transparent)}}.border-border\/30{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/30{border-color:color-mix(in oklab, var(--border) 30%, transparent)}}.border-border\/40{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/40{border-color:color-mix(in oklab, var(--border) 40%, transparent)}}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab, var(--border) 50%, transparent)}}.border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/60{border-color:color-mix(in oklab, var(--border) 60%, transparent)}}.border-error,.border-error\/40{border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.border-error\/40{border-color:color-mix(in oklab, var(--error) 40%, transparent)}}.border-error\/60{border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.border-error\/60{border-color:color-mix(in oklab, var(--error) 60%, transparent)}}.border-red-700\/40{border-color:#bf000f66}@supports (color:color-mix(in lab, red, red)){.border-red-700\/40{border-color:color-mix(in oklab, var(--color-red-700) 40%, transparent)}}.border-red-700\/50{border-color:#bf000f80}@supports (color:color-mix(in lab, red, red)){.border-red-700\/50{border-color:color-mix(in oklab, var(--color-red-700) 50%, transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.border-white\/10{border-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.border-white\/15{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.bg-\[\#1a1a1a\]{background-color:#1a1a1a}.bg-\[\#ffcc00\]{background-color:#fc0}.bg-\[\#ffcc00\]\/20{background-color:#fc03;background-color:lab(84.7597% 8.24091 84.7906/.2)}.bg-accent,.bg-accent\/5{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/5{background-color:color-mix(in oklab, var(--accent) 5%, transparent)}}.bg-accent\/10{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/10{background-color:color-mix(in oklab, var(--accent) 10%, transparent)}}.bg-accent\/30{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/30{background-color:color-mix(in oklab, var(--accent) 30%, transparent)}}.bg-amber-500\/5{background-color:#f99c000d}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/5{background-color:color-mix(in oklab, var(--color-amber-500) 5%, transparent)}}.bg-bg{background-color:var(--bg)}.bg-bg-surface,.bg-bg-surface\/50{background-color:var(--bg-surface)}@supports (color:color-mix(in lab, red, red)){.bg-bg-surface\/50{background-color:color-mix(in oklab, var(--bg-surface) 50%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-border{background-color:var(--border)}.bg-error,.bg-error\/5{background-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.bg-error\/5{background-color:color-mix(in oklab, var(--error) 5%, transparent)}}.bg-error\/10{background-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.bg-error\/10{background-color:color-mix(in oklab, var(--error) 10%, transparent)}}.bg-error\/20{background-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.bg-error\/20{background-color:color-mix(in oklab, var(--error) 20%, transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-neutral-400{background-color:var(--color-neutral-400)}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-neutral-950{background-color:var(--color-neutral-950)}.bg-neutral-950\/90{background-color:#0a0a0ae6}@supports (color:color-mix(in lab, red, red)){.bg-neutral-950\/90{background-color:color-mix(in oklab, var(--color-neutral-950) 90%, transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/20{background-color:color-mix(in oklab, var(--color-red-900) 20%, transparent)}}.bg-red-900\/30{background-color:#82181a4d}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/30{background-color:color-mix(in oklab, var(--color-red-900) 30%, transparent)}}.bg-text-muted{background-color:var(--text-muted)}.bg-transparent{background-color:#0000}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.bg-white\/5{background-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.object-cover{object-fit:cover}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-\[1px\]{padding-block:1px}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-10{padding-left:calc(var(--spacing) * 10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-geist-mono)}.font-sans{font-family:var(--font-sans)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[16px\]{font-size:16px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#ffcc00\]{color:#fc0}.text-accent,.text-accent\/70{color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.text-accent\/70{color:color-mix(in oklab, var(--accent) 70%, transparent)}}.text-amber-200\/90{color:#fee685e6}@supports (color:color-mix(in lab, red, red)){.text-amber-200\/90{color:color-mix(in oklab, var(--color-amber-200) 90%, transparent)}}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-bg{color:var(--bg)}.text-blue-400{color:var(--color-blue-400)}.text-error{color:var(--error)}.text-neutral-200{color:var(--color-neutral-200)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-700{color:var(--color-neutral-700)}.text-red-400{color:var(--color-red-400)}.text-text{color:var(--text)}.text-text-muted,.text-text-muted\/60{color:var(--text-muted)}@supports (color:color-mix(in lab, red, red)){.text-text-muted\/60{color:color-mix(in oklab, var(--text-muted) 60%, transparent)}}.text-text-muted\/80{color:var(--text-muted)}@supports (color:color-mix(in lab, red, red)){.text-text-muted\/80{color:color-mix(in oklab, var(--text-muted) 80%, transparent)}}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.accent-accent{accent-color:var(--accent)}.opacity-0{opacity:0}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:text-accent:is(:where(.group):hover *){color:var(--accent)}.group-hover\:text-text:is(:where(.group):hover *){color:var(--text)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-text-muted::placeholder{color:var(--text-muted)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.last\:pb-0:last-child{padding-bottom:calc(var(--spacing) * 0)}@media (hover:hover){.hover\:border-accent:hover,.hover\:border-accent\/40:hover{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:border-accent\/40:hover{border-color:color-mix(in oklab, var(--accent) 40%, transparent)}}.hover\:border-accent\/50:hover{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:border-accent\/50:hover{border-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.hover\:border-error\/40:hover{border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.hover\:border-error\/40:hover{border-color:color-mix(in oklab, var(--error) 40%, transparent)}}.hover\:border-text-muted:hover{border-color:var(--text-muted)}.hover\:border-white\/40:hover{border-color:#fff6}@supports (color:color-mix(in lab, red, red)){.hover\:border-white\/40:hover{border-color:color-mix(in oklab, var(--color-white) 40%, transparent)}}.hover\:bg-\[\#1a1a1a\]:hover{background-color:#1a1a1a}.hover\:bg-accent-dim:hover{background-color:var(--accent-dim)}.hover\:bg-accent\/5:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/5:hover{background-color:color-mix(in oklab, var(--accent) 5%, transparent)}}.hover\:bg-accent\/10:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/10:hover{background-color:color-mix(in oklab, var(--accent) 10%, transparent)}}.hover\:bg-accent\/20:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/20:hover{background-color:color-mix(in oklab, var(--accent) 20%, transparent)}}.hover\:bg-error\/20:hover{background-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-error\/20:hover{background-color:color-mix(in oklab, var(--error) 20%, transparent)}}.hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/5:hover{background-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.hover\:text-accent:hover{color:var(--accent)}.hover\:text-accent-dim:hover{color:var(--accent-dim)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-blue-400:hover{color:var(--color-blue-400)}.hover\:text-error:hover{color:var(--error)}.hover\:text-text:hover{color:var(--text)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:border-accent:focus{border-color:var(--accent)}.focus\:opacity-100:focus{opacity:1}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-accent:focus{--tw-ring-color:var(--accent)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:40rem){.sm\:inline{display:inline}.sm\:inline-flex{display:inline-flex}}@media (min-width:48rem){.md\:flex{display:flex}.md\:h-auto{height:auto}.md\:w-px{width:1px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[minmax\(0\,2fr\)_minmax\(220px\,1fr\)\]{grid-template-columns:minmax(0,2fr) minmax(220px,1fr)}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:gap-6{gap:calc(var(--spacing) * 6)}.md\:self-stretch{align-self:stretch}.md\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.md\:bg-border{background-color:var(--border)}}@media (min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:block{display:block}.lg\:min-h-0{min-height:calc(var(--spacing) * 0)}.lg\:min-w-\[280px\]{min-width:280px}.lg\:flex-1{flex:1}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:overflow-hidden{overflow:hidden}.lg\:overflow-y-auto{overflow-y:auto}}@media (min-width:80rem){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&_a\]\:text-accent a{color:var(--accent)}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_blockquote\]\:border-l-2 blockquote{border-left-style:var(--tw-border-style);border-left-width:2px}.\[\&_blockquote\]\:border-border blockquote{border-color:var(--border)}.\[\&_blockquote\]\:pl-2 blockquote{padding-left:calc(var(--spacing) * 2)}.\[\&_blockquote\]\:text-text-muted blockquote{color:var(--text-muted)}.\[\&_code\]\:rounded code{border-radius:.25rem}.\[\&_code\]\:bg-bg-surface code{background-color:var(--bg-surface)}.\[\&_code\]\:px-1 code{padding-inline:calc(var(--spacing) * 1)}.\[\&_code\]\:text-\[11px\] code{font-size:11px}.\[\&_h1\]\:mt-3 h1{margin-top:calc(var(--spacing) * 3)}.\[\&_h1\]\:mb-2 h1{margin-bottom:calc(var(--spacing) * 2)}.\[\&_h1\]\:text-\[14px\] h1{font-size:14px}.\[\&_h1\]\:font-semibold h1{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_h2\]\:mt-3 h2{margin-top:calc(var(--spacing) * 3)}.\[\&_h2\]\:mb-1\.5 h2{margin-bottom:calc(var(--spacing) * 1.5)}.\[\&_h2\]\:text-\[13px\] h2{font-size:13px}.\[\&_h2\]\:font-semibold h2{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_h3\]\:mt-2 h3{margin-top:calc(var(--spacing) * 2)}.\[\&_h3\]\:mb-1 h3{margin-bottom:calc(var(--spacing) * 1)}.\[\&_h3\]\:text-\[12px\] h3{font-size:12px}.\[\&_h3\]\:font-semibold h3{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_hr\]\:my-3 hr{margin-block:calc(var(--spacing) * 3)}.\[\&_hr\]\:border-border hr{border-color:var(--border)}.\[\&_li\]\:my-0\.5 li{margin-block:calc(var(--spacing) * .5)}.\[\&_ol\]\:my-1\.5 ol{margin-block:calc(var(--spacing) * 1.5)}.\[\&_ol\]\:list-decimal ol{list-style-type:decimal}.\[\&_ol\]\:pl-4 ol{padding-left:calc(var(--spacing) * 4)}.\[\&_p\]\:my-1\.5 p{margin-block:calc(var(--spacing) * 1.5)}.\[\&_strong\]\:text-text strong{color:var(--text)}.\[\&_ul\]\:my-1\.5 ul{margin-block:calc(var(--spacing) * 1.5)}.\[\&_ul\]\:list-disc ul{list-style-type:disc}.\[\&_ul\]\:pl-4 ul{padding-left:calc(var(--spacing) * 4)}}:root{--bg:#0a0a0a;--bg-surface:#111;--text:#e0e0e0;--text-muted:#737373;--accent:#0f8;--accent-dim:#00cc6a;--border:#2a2a2a;--error:#f44}::selection{background:var(--accent);color:var(--bg)}body{background:var(--bg);color:var(--text);font-family:var(--font-geist-mono), ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{font-family:var(--font-geist-mono), ui-monospace, monospace;letter-spacing:-.01em}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:0}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}:focus-visible{outline:1px solid var(--accent);outline-offset:1px}@keyframes qw-blink{0%,50%{opacity:1}51%,to{opacity:0}}.animate-qw-blink{animation:1s steps(2,start) infinite qw-blink}@keyframes qw-name-shimmer{0%,to{color:var(--accent)}50%{color:color-mix(in srgb, var(--accent) 55%, #e0e0e0)}}.animate-name-shimmer{animation:1.6s ease-in-out infinite qw-name-shimmer}.ko-help{word-break:keep-all;overflow-wrap:normal;line-break:strict;text-wrap:pretty}.ko-help p,.ko-help li,.ko-help div,.ko-help span,.ko-help b,.ko-help strong{word-break:inherit;overflow-wrap:inherit;line-break:inherit}.ko-help code,.ko-help pre,.ko-help .break-anywhere{word-break:normal;overflow-wrap:anywhere}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,78759,e=>{"use strict";var t=e.i(43476),s=e.i(71645),o=e.i(52368);let a={en:{title:"How QuadWork builds your code",subtitle:"Five steps from your one-line request to a merged pull request.",close:"Close",helpClass:"",steps:[{title:"You assign a task in the chat",body:"Tell @head what to build. Be as specific or as vague as you like."},{title:"Head creates a GitHub issue",body:"Head opens an issue, adds it to the queue, and waits for your trigger."},{title:"Dev writes the code",body:"Dev clones a branch, implements the change, and opens a pull request."},{title:"Reviewers check the work",body:"RE1 and RE2 each review the PR independently. Both must approve before the PR is mergeable."},{title:"Head merges and continues",body:"Head merges the approved PR and assigns the next ticket from the queue. The cycle continues all night while you sleep."}]},ko:{title:"QuadWork가 코드를 만드는 방식",subtitle:"한 줄 요청에서 병합된 풀 리퀘스트까지 가는 5단계입니다.",close:"닫기",helpClass:"ko-help",steps:[{title:"채팅에서 작업을 지시합니다",body:"@head에게 만들 것을 말해주세요. 구체적으로 또는 모호하게 말해도 괜찮습니다."},{title:"Head가 GitHub 이슈를 만듭니다",body:"Head가 이슈를 열고, 큐에 추가한 뒤, 당신의 트리거를 기다립니다."},{title:"Dev가 코드를 작성합니다",body:"Dev가 브랜치를 만들고, 변경 사항을 구현한 뒤, 풀 리퀘스트를 엽니다."},{title:"리뷰어가 작업을 검토합니다",body:"RE1과 RE2가 각각 독립적으로 PR을 리뷰합니다. 둘 다 승인해야 PR이 병합 가능 상태가 됩니다."},{title:"Head가 병합하고 계속 진행합니다",body:"Head가 승인된 PR을 병합하고, 큐에서 다음 티켓을 할당합니다. 당신이 자는 동안에도 이 사이클은 밤새 계속됩니다."}]}};e.s(["default",0,function({open:e,onClose:r}){let{locale:i}=(0,o.useLocale)(),l=a[i];return((0,s.useEffect)(()=>{if(!e)return;let t=e=>{"Escape"===e.key&&r()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[e,r]),e)?(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm",onClick:r,role:"dialog","aria-modal":"true","aria-labelledby":"how-to-work-title",children:(0,t.jsxs)("div",{className:`relative mx-4 max-w-xl w-full max-h-[90vh] overflow-auto rounded-lg border border-white/10 bg-neutral-950 p-6 shadow-2xl ${l.helpClass}`,onClick:e=>e.stopPropagation(),children:[(0,t.jsx)("button",{type:"button",onClick:r,"aria-label":l.close,className:"absolute right-3 top-3 rounded p-1 text-neutral-400 hover:bg-white/5 hover:text-white",children:(0,t.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"1.8",children:(0,t.jsx)("path",{d:"M4 4l12 12M16 4L4 16",strokeLinecap:"round"})})}),(0,t.jsx)("h2",{id:"how-to-work-title",className:"text-base font-semibold text-white",children:l.title}),(0,t.jsx)("p",{className:"mt-2 text-[12px] text-neutral-400",children:l.subtitle}),(0,t.jsxs)("ol",{className:"mt-5 relative",children:[(0,t.jsx)("span",{"aria-hidden":!0,className:"absolute left-[14px] top-3 bottom-3 w-px bg-accent/30"}),l.steps.map((e,s)=>(0,t.jsxs)("li",{className:"relative pl-10 pb-5 last:pb-0",children:[(0,t.jsx)("span",{className:"absolute left-0 top-0 inline-flex items-center justify-center w-7 h-7 rounded-full border border-accent bg-neutral-950 text-accent text-[12px] font-semibold tabular-nums","aria-hidden":!0,children:s+1}),(0,t.jsx)("div",{className:"text-[13px] font-semibold text-white",children:e.title}),(0,t.jsx)("div",{className:"mt-1 text-[12px] leading-relaxed text-neutral-400",children:e.body})]},s))]})]})}):null}])},54338,e=>{"use strict";var t=e.i(43476),s=e.i(71645),o=e.i(22016),a=e.i(78759),r=e.i(52368);let i={en:{headlineWithProjects:"Pick a project from the sidebar to start working",headlineNoProjects:"Welcome to QuadWork — let's set up your first AI dev team",subtextWithProjects:"Each project has its own 4-agent team and chat. Click any chip in the left sidebar to open one.",subtextNoProjects:"QuadWork runs Head, Dev, and two Reviewers as a team. They open issues, write code, review PRs, and merge — while you sleep.",lookSidebar:"← look at the left sidebar",addProject:"Add Your First Project →",howToWork:"How to Work",helpClass:""},ko:{headlineWithProjects:"사이드바에서 프로젝트를 골라 작업을 시작하세요",headlineNoProjects:"QuadWork에 오신 걸 환영합니다\n- 첫 AI 개발 팀을 설정해볼까요",subtextWithProjects:"각 프로젝트는 자체 4인 에이전트 팀과 채팅을 가집니다.\n왼쪽 사이드바에서 아무 프로젝트나 눌러 열 수 있습니다.",subtextNoProjects:"QuadWork는 Head, Dev, Reviewer 둘을 한 팀으로 운영합니다.\n이슈를 만들고, 코드를 작성하고, PR을 리뷰하고, 병합합니다.\n당신이 쉬는 동안에도요.",lookSidebar:"← 왼쪽 사이드바를 보세요",addProject:"첫 프로젝트 추가 →",howToWork:"사용 방법",helpClass:"ko-help"}};function l({hasProjects:e}){let{locale:d}=(0,r.useLocale)(),n=i[d],[c,h]=(0,s.useState)(!1),x=e?n.headlineWithProjects:n.headlineNoProjects,u=e?n.subtextWithProjects:n.subtextNoProjects;return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center text-center px-6 py-12 border border-border bg-bg-surface",children:[(0,t.jsx)("img",{src:"/quadwork-symbol.svg",alt:"",width:64,height:64,"aria-hidden":!0}),(0,t.jsx)("h1",{className:`mt-5 text-lg font-semibold text-text max-w-md whitespace-pre-line ${n.helpClass}`,children:x}),(0,t.jsx)("p",{className:`mt-2 text-[12px] text-text-muted leading-relaxed max-w-md whitespace-pre-line ${n.helpClass}`,children:u}),(0,t.jsxs)("div",{className:"mt-5 flex items-center gap-3",children:[e?(0,t.jsx)("span",{className:"text-[11px] text-text-muted italic",children:n.lookSidebar}):(0,t.jsx)(o.default,{href:"/setup",className:"px-4 py-2 text-[12px] font-semibold text-bg bg-accent hover:bg-accent-dim transition-colors",children:n.addProject}),(0,t.jsx)("button",{type:"button",onClick:()=>h(!0),className:"px-4 py-2 text-[12px] text-text-muted border border-border hover:text-text hover:border-text-muted transition-colors",children:n.howToWork})]}),(0,t.jsx)(a.default,{open:c,onClose:()=>h(!1)})]})}let d={en:{loading:"Loading dashboard...",recentProjects:"Recent Projects",lastModified:"Last modified",justNow:"just now",minsAgo:e=>`${e}m ago`,hoursAgo:e=>`${e}h ago`,daysAgo:e=>`${e}d ago`,newProject:"New Project",globalFeed:"Global Activity Feed",noActivity:"No recent activity."},ko:{loading:"대시보드 로딩 중...",recentProjects:"최근 프로젝트",lastModified:"마지막 수정",justNow:"방금 전",minsAgo:e=>`${e}분 전`,hoursAgo:e=>`${e}시간 전`,daysAgo:e=>`${e}일 전`,newProject:"새 프로젝트",globalFeed:"전체 활동 피드",noActivity:"최근 활동이 없습니다."}};function n(e,t){let s=Math.floor((Date.now()-new Date(e).getTime())/6e4),o=Math.floor(s/60),a=Math.floor(o/24);return s<1?t.justNow:s<60?t.minsAgo(s):o<24?t.hoursAgo(o):t.daysAgo(a)}e.s(["default",0,function(){let{locale:e}=(0,r.useLocale)(),a=d[e],[i,c]=(0,s.useState)([]),[h,x]=(0,s.useState)([]),[u,m]=(0,s.useState)(!0);return((0,s.useEffect)(()=>{Promise.all([fetch("/api/config").then(e=>e.json()),fetch("/api/feed").then(e=>e.json())]).then(([e,t])=>{e?.projects&&c([...e.projects].sort((e,t)=>new Date(t.modifiedAt).getTime()-new Date(e.modifiedAt).getTime())),Array.isArray(t)&&x(t.slice(0,20))}).catch(()=>{}).finally(()=>m(!1))},[]),u)?(0,t.jsx)("div",{className:"flex items-center justify-center h-full text-text-muted text-[11px] animate-pulse",children:a.loading}):0===i.length?(0,t.jsx)(l,{hasProjects:!1}):(0,t.jsxs)("div",{className:"p-8 h-full overflow-y-auto space-y-10",children:[(0,t.jsxs)("section",{children:[(0,t.jsxs)("div",{className:"flex items-baseline justify-between mb-4",children:[(0,t.jsx)("h2",{className:"text-xs font-semibold text-text-muted uppercase tracking-wider",children:a.recentProjects}),(0,t.jsxs)(o.default,{href:"/setup",className:"text-[11px] text-accent hover:underline underline-offset-2",children:["+ ",a.newProject]})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4",children:i.map(e=>(0,t.jsxs)(o.default,{href:`/project/${e.id}`,className:"group block p-4 border border-border bg-bg-surface hover:border-accent transition-colors",children:[(0,t.jsx)("h3",{className:"text-sm font-semibold text-text group-hover:text-accent transition-colors",children:e.name}),(0,t.jsx)("p",{className:"text-[10px] text-text-muted mt-1 font-mono truncate",children:e.repo}),(0,t.jsxs)("div",{className:"mt-4 flex items-center justify-between text-[10px] text-text-muted uppercase tracking-tighter",children:[(0,t.jsx)("span",{children:a.lastModified}),(0,t.jsx)("span",{className:"tabular-nums",children:n(e.modifiedAt,a)})]})]},e.id))})]}),(0,t.jsx)("div",{className:"border-t border-border/40 pt-10 grid grid-cols-1 lg:grid-cols-3 gap-10",children:(0,t.jsxs)("div",{className:"lg:col-span-2 space-y-4",children:[(0,t.jsx)("h2",{className:"text-xs font-semibold text-text-muted uppercase tracking-wider",children:a.globalFeed}),(0,t.jsxs)("div",{className:"space-y-1",children:[0===h.length&&(0,t.jsx)("p",{className:"text-[11px] text-text-muted italic",children:a.noActivity}),h.map(e=>(0,t.jsxs)("div",{className:"flex items-start gap-3 py-2 border-b border-border/20 text-[11px] font-mono group",children:[(0,t.jsx)("span",{className:"text-text-muted tabular-nums shrink-0",children:n(e.timestamp,a)}),(0,t.jsxs)(o.default,{href:`/project/${e.projectId}`,className:"text-accent shrink-0 hover:underline",children:["[",e.projectName,"]"]}),(0,t.jsxs)("span",{className:"text-text-muted shrink-0 lowercase",children:[e.agent,":"]}),(0,t.jsx)("span",{className:"text-text truncate min-w-0",children:e.text})]},e.id))]})]})})]})}],54338)}]);
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
|
-
2:I[
|
|
3
|
-
3:I[
|
|
4
|
-
4:I[
|
|
5
|
-
5:I[
|
|
6
|
-
6:I[
|
|
7
|
-
7:I[
|
|
8
|
-
8:"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
2
|
+
2:I[52368,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"LocaleProvider"]
|
|
3
|
+
3:I[43688,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
|
|
4
|
+
4:I[26704,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
|
|
5
|
+
5:I[22140,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
|
|
6
|
+
6:I[39756,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
|
|
7
|
+
7:I[37457,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
|
|
8
|
+
8:I[97367,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"]
|
|
9
|
+
9:"$Sreact.suspense"
|
|
10
|
+
c:I[97367,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"]
|
|
11
|
+
e:I[97367,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"]
|
|
12
|
+
10:I[68027,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1]
|
|
13
|
+
:HL["/_next/static/chunks/103nd9.e5nlgc.css","style"]
|
|
14
|
+
0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/103nd9.e5nlgc.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0nuk4qfi43kgg.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"geist_mono_8d43a2aa-module__8Li5zG__variable h-full","children":["$","body",null,{"className":"h-full flex flex-col","children":["$","$L2",null,{"children":[["$","$L3",null,{}],["$","$L4",null,{}],["$","div",null,{"className":"flex flex-1 min-h-0","children":[["$","$L5",null,{}],["$","main",null,{"className":"flex-1 min-w-0 overflow-auto","children":["$","$L6",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L7",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L6",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L7",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,"$@b"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$Lc",null,{"children":"$Ld"}],["$","div",null,{"hidden":true,"children":["$","$Le",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Lf"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$10",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/103nd9.e5nlgc.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"Wq22D2-1FiONyXNc2N4j6"}
|
|
15
|
+
11:[]
|
|
16
|
+
b:"$W11"
|
|
17
|
+
d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
18
|
+
12:I[27201,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"]
|
|
19
|
+
a:null
|
|
20
|
+
f:[["$","title","0",{"children":"QuadWork"}],["$","meta","1",{"name":"description","content":"Unified dashboard for multi-agent coding teams"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.05o2q2p4kvnq_.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L12","3",{}]]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
|
-
2:I[97367,["/_next/static/chunks/
|
|
3
|
-
3:I[97367,["/_next/static/chunks/
|
|
2
|
+
2:I[97367,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"]
|
|
3
|
+
3:I[97367,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
|
-
5:I[27201,["/_next/static/chunks/
|
|
6
|
-
0:{"rsc":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"QuadWork"}],["$","meta","1",{"name":"description","content":"Unified dashboard for multi-agent coding teams"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.05o2q2p4kvnq_.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","3",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
5
|
+
5:I[27201,["/_next/static/chunks/0nuk4qfi43kgg.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"]
|
|
6
|
+
0:{"rsc":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"QuadWork"}],["$","meta","1",{"name":"description","content":"Unified dashboard for multi-agent coding teams"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.05o2q2p4kvnq_.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","3",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"Wq22D2-1FiONyXNc2N4j6"}
|