quadwork 1.16.1 → 1.17.1
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/out/404.html +1 -1
- package/out/__next.__PAGE__.txt +3 -2
- package/out/__next._full.txt +4 -3
- package/out/__next._head.txt +1 -1
- package/out/__next._index.txt +2 -2
- package/out/__next._tree.txt +3 -2
- package/out/_next/static/chunks/0ewow-yz7dvp~.js +1 -0
- package/out/_next/static/chunks/0fgh-nb.8001g.js +1 -0
- package/out/_next/static/chunks/0sgw2ao.8pb6z.js +25 -0
- package/out/_next/static/chunks/0y0dg-lqx5oiw.js +18 -0
- package/out/_next/static/chunks/0zs-us_6w6c5k.js +3 -0
- package/out/_next/static/chunks/0~-kpl6f_x5s6.js +1 -0
- package/out/_next/static/chunks/12ins7yi1imrc.css +2 -0
- package/out/_not-found/__next._full.txt +2 -2
- package/out/_not-found/__next._head.txt +1 -1
- package/out/_not-found/__next._index.txt +2 -2
- package/out/_not-found/__next._not-found.__PAGE__.txt +1 -1
- package/out/_not-found/__next._not-found.txt +1 -1
- package/out/_not-found/__next._tree.txt +2 -2
- package/out/_not-found.html +1 -1
- package/out/_not-found.txt +2 -2
- package/out/app-shell/__next._full.txt +2 -2
- package/out/app-shell/__next._head.txt +1 -1
- package/out/app-shell/__next._index.txt +2 -2
- package/out/app-shell/__next._tree.txt +2 -2
- package/out/app-shell/__next.app-shell.__PAGE__.txt +1 -1
- package/out/app-shell/__next.app-shell.txt +1 -1
- package/out/app-shell.html +1 -1
- package/out/app-shell.txt +2 -2
- package/out/index.html +1 -1
- package/out/index.txt +4 -3
- package/out/project/_/__next._full.txt +3 -3
- package/out/project/_/__next._head.txt +1 -1
- package/out/project/_/__next._index.txt +2 -2
- package/out/project/_/__next._tree.txt +2 -2
- package/out/project/_/__next.project.$d$id.__PAGE__.txt +2 -2
- package/out/project/_/__next.project.$d$id.txt +1 -1
- package/out/project/_/__next.project.txt +1 -1
- package/out/project/_/queue/__next._full.txt +2 -2
- package/out/project/_/queue/__next._head.txt +1 -1
- package/out/project/_/queue/__next._index.txt +2 -2
- package/out/project/_/queue/__next._tree.txt +2 -2
- package/out/project/_/queue/__next.project.$d$id.queue.__PAGE__.txt +1 -1
- package/out/project/_/queue/__next.project.$d$id.queue.txt +1 -1
- package/out/project/_/queue/__next.project.$d$id.txt +1 -1
- package/out/project/_/queue/__next.project.txt +1 -1
- package/out/project/_/queue.html +1 -1
- package/out/project/_/queue.txt +2 -2
- package/out/project/_.html +1 -1
- package/out/project/_.txt +3 -3
- package/out/settings/__next._full.txt +3 -3
- package/out/settings/__next._head.txt +1 -1
- package/out/settings/__next._index.txt +2 -2
- package/out/settings/__next._tree.txt +2 -2
- package/out/settings/__next.settings.__PAGE__.txt +2 -2
- package/out/settings/__next.settings.txt +1 -1
- package/out/settings.html +1 -1
- package/out/settings.txt +3 -3
- package/out/setup/__next._full.txt +2 -2
- package/out/setup/__next._head.txt +1 -1
- package/out/setup/__next._index.txt +2 -2
- package/out/setup/__next._tree.txt +2 -2
- package/out/setup/__next.setup.__PAGE__.txt +1 -1
- package/out/setup/__next.setup.txt +1 -1
- package/out/setup.html +1 -1
- package/out/setup.txt +2 -2
- package/package.json +1 -1
- package/server/index.js +13 -0
- package/out/_next/static/chunks/0-w6bd-n2t2n~.css +0 -2
- package/out/_next/static/chunks/0a-o_h2xhfjpa.js +0 -42
- package/out/_next/static/chunks/0b0p-uvdx~p32.js +0 -1
- package/out/_next/static/chunks/0fld8c6qja8~g.js +0 -1
- package/out/_next/static/chunks/0ocyu-i-3tr3t.js +0 -1
- package/out/_next/static/chunks/0xi5xtcy5283i.js +0 -1
- /package/out/_next/static/{rg71QrQqXlYkPMC0xJuVS → v6zFjknjo1wLR7SyqbCym}/_buildManifest.js +0 -0
- /package/out/_next/static/{rg71QrQqXlYkPMC0xJuVS → v6zFjknjo1wLR7SyqbCym}/_clientMiddlewareManifest.js +0 -0
- /package/out/_next/static/{rg71QrQqXlYkPMC0xJuVS → v6zFjknjo1wLR7SyqbCym}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
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/0a-o_h2xhfjpa.js","static/chunks/17oc2l.ekcs8b.css"].map(t=>e.l(t))).then(()=>t(73766)))}]);
|
|
@@ -1 +0,0 @@
|
|
|
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),r=e.i(52368);let o={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:a}){let{locale:i}=(0,r.useLocale)(),l=o[i];return((0,s.useEffect)(()=>{if(!e)return;let t=e=>{"Escape"===e.key&&a()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[e,a]),e)?(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm",onClick:a,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:a,"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),r=e.i(22016),o=e.i(78759),a=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:n}=(0,a.useLocale)(),d=i[n],[c,x]=(0,s.useState)(!1),h=e?d.headlineWithProjects:d.headlineNoProjects,m=e?d.subtextWithProjects:d.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 ${d.helpClass}`,children:h}),(0,t.jsx)("p",{className:`mt-2 text-[12px] text-text-muted leading-relaxed max-w-md whitespace-pre-line ${d.helpClass}`,children:m}),(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:d.lookSidebar}):(0,t.jsx)(r.default,{href:"/setup",className:"px-4 py-2 text-[12px] font-semibold text-bg bg-accent hover:bg-accent-dim transition-colors",children:d.addProject}),(0,t.jsx)("button",{type:"button",onClick:()=>x(!0),className:"px-4 py-2 text-[12px] text-text-muted border border-border hover:text-text hover:border-text-muted transition-colors",children:d.howToWork})]}),(0,t.jsx)(o.default,{open:c,onClose:()=>x(!1)})]})}let n={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.",projects:"Projects",configuredProjects:e=>`${e} configured project${1!==e?"s":""}`,agents:"agents",prs:"PRs",repo:"repo",lastActivity:"last activity",open:"open →",loadError:"Could not load projects from /api/projects. The dashboard may be out of date — check the server logs and reload.",joinCommunity:"Want to talk with the creator?",joinLink:"Join Hunt Town",joinSuffix:"and find @project7.",recentActivity:"Recent Activity"},ko:{loading:"대시보드 로딩 중...",recentProjects:"최근 프로젝트",lastModified:"마지막 수정",justNow:"방금 전",minsAgo:e=>`${e}분 전`,hoursAgo:e=>`${e}시간 전`,daysAgo:e=>`${e}일 전`,newProject:"새 프로젝트",globalFeed:"전체 활동 피드",noActivity:"최근 활동이 없습니다.",projects:"프로젝트",configuredProjects:e=>`${e}개의 프로젝트`,agents:"에이전트",prs:"PR",repo:"저장소",lastActivity:"마지막 활동",open:"열기 →",loadError:"/api/projects에서 프로젝트를 불러올 수 없습니다. 서버 로그를 확인하고 새로고침하세요.",joinCommunity:"제작자와 대화하고 싶으신가요?",joinLink:"Hunt Town 참여",joinSuffix:"에서 @project7을 찾아보세요.",recentActivity:"최근 활동"}};e.s(["default",0,function(){let{locale:e}=(0,a.useLocale)(),o=n[e],[i,d]=(0,s.useState)([]),[c,x]=(0,s.useState)([]),[h,m]=(0,s.useState)("loading");return((0,s.useEffect)(()=>{fetch("/api/projects").then(e=>{if(!e.ok)throw Error(`${e.status}`);return e.json()}).then(e=>{e.projects&&Array.isArray(e.projects)&&d(e.projects.filter(e=>!e.archived)),e.recentEvents&&Array.isArray(e.recentEvents)&&x(e.recentEvents),m("loaded")}).catch(()=>{m("error")})},[]),"loading"===h)?(0,t.jsx)("div",{className:"flex items-center justify-center h-full text-text-muted text-[11px] animate-pulse",children:o.loading}):(0,t.jsx)("div",{className:"h-full overflow-y-auto lg:overflow-hidden lg:flex lg:flex-col p-6",children:(0,t.jsxs)("div",{className:"lg:grid lg:grid-cols-[1fr_340px] lg:gap-6 lg:flex-1 lg:min-h-0",children:[(0,t.jsxs)("div",{className:"lg:overflow-y-auto lg:min-h-0",children:["loaded"===h&&(0,t.jsx)("div",{className:"mb-6",children:(0,t.jsx)(l,{hasProjects:i.length>0})}),"error"===h&&(0,t.jsx)("div",{className:"mb-6 border border-error/30 bg-error/5 text-error text-[11px] px-3 py-2",children:o.loadError}),(0,t.jsxs)("div",{className:"mb-6",children:[(0,t.jsx)("h1",{className:"text-lg font-semibold text-text tracking-tight",children:o.projects}),(0,t.jsx)("p",{className:"text-xs text-text-muted mt-1",children:o.configuredProjects(i.length)})]}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-3 mb-8 lg:mb-0",children:[i.map(e=>(0,t.jsxs)(r.default,{href:`/project/${e.id}`,className:"block border border-border bg-bg-surface p-4 hover:bg-[#1a1a1a] transition-colors group",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:`w-1.5 h-1.5 rounded-full ${"active"===e.state?"bg-accent":"bg-text-muted"}`}),(0,t.jsx)("span",{className:"text-sm font-semibold text-text",children:e.name}),(0,t.jsx)("span",{className:"text-[10px] text-text-muted",children:e.state})]}),(0,t.jsx)("span",{className:"text-[10px] text-text-muted opacity-0 group-hover:opacity-100 transition-opacity",children:o.open})]}),(0,t.jsxs)("div",{className:"flex gap-4 text-[11px] mb-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-text-muted",children:o.agents}),(0,t.jsx)("span",{className:"ml-1.5 text-text",children:e.agentCount})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-text-muted",children:o.prs}),(0,t.jsx)("span",{className:"ml-1.5 text-text",children:e.openPrs})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-text-muted",children:o.repo}),(0,t.jsx)("span",{className:"ml-1.5 text-text",children:e.repo})]})]}),e.lastActivity&&(0,t.jsxs)("div",{className:"text-[10px] text-text-muted",children:[o.lastActivity,": ",function(e,t){let s=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(s<1)return t.justNow;if(s<60)return t.minsAgo(s);let r=Math.floor(s/60);if(r<24)return t.hoursAgo(r);let o=Math.floor(r/24);return t.daysAgo(o)}(e.lastActivity,o)]})]},e.id)),(0,t.jsx)(r.default,{href:"/setup",className:"border border-dashed border-border p-4 flex items-center justify-center text-text-muted hover:text-text hover:border-text-muted transition-colors min-h-[88px]",children:(0,t.jsxs)("span",{className:"text-sm",children:["+ ",o.newProject]})})]}),(0,t.jsxs)("div",{className:"mt-4 mb-8 lg:mb-4 text-[11px] text-text-muted",children:[o.joinCommunity," ",(0,t.jsx)("a",{href:"https://discord.gg/syhbYPk3Wq",target:"_blank",rel:"noopener noreferrer",className:"text-text hover:text-accent transition-colors",children:o.joinLink})," ",o.joinSuffix]})]}),(0,t.jsxs)("div",{className:"lg:overflow-y-auto lg:min-h-0 mb-6 lg:mb-0",children:[(0,t.jsx)("h2",{className:"text-xs text-text-muted uppercase tracking-wider mb-3",children:o.recentActivity}),(0,t.jsxs)("div",{className:"border border-border bg-bg-surface",children:[0===c.length&&(0,t.jsx)("div",{className:"px-3 py-3 text-[11px] text-text-muted",children:o.noActivity}),c.map((e,s)=>(0,t.jsxs)("div",{className:"flex gap-3 px-3 py-1.5 border-b border-border/50 last:border-b-0 text-[11px]",children:[(0,t.jsx)("span",{className:"text-text-muted shrink-0 w-10 text-right tabular-nums",children:e.time?.slice(0,5)||""}),(0,t.jsx)("span",{className:"text-accent shrink-0 font-semibold w-12",children:e.projectName}),(0,t.jsx)("span",{className:"text-[#ffcc00] shrink-0 font-semibold w-12",children:e.actor}),(0,t.jsx)("span",{className:"text-text truncate min-w-0",children:e.text})]},`${e.time}-${s}`))]})]})]})})}],54338)}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,95773,e=>{"use strict";var t=e.i(43476),a=e.i(71645),r=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:""}},l=[{value:"claude",label:"Claude Code"},{value:"codex",label:"Codex"}],o=["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",butlerAgent:"Butler Agent",butlerEnabled:"Enabled",butlerDisabled:"Disabled",butlerCli:"CLI",butlerModel:"Model",butlerAutoStart:"Auto-start on boot",butlerCwd:"Working directory",butlerHelp:"Butler is a cross-project operator assistant that runs in ~/docs/. It helps manage tickets, proposals, reviews, and releases across all projects.",enable:"Enable",disable:"Disable"},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:"새 프로젝트",butlerAgent:"버틀러 에이전트",butlerEnabled:"활성",butlerDisabled:"비활성",butlerCli:"CLI",butlerModel:"모델",butlerAutoStart:"서버 시작 시 자동 실행",butlerCwd:"작업 디렉터리",butlerHelp:"버틀러는 ~/docs/에서 실행되는 크로스 프로젝트 운영자 어시스턴트입니다. 모든 프로젝트의 티켓, 제안서, 리뷰, 릴리스 관리를 지원합니다.",enable:"활성화",disable:"비활성화"}};function d({label:e,value:a,onChange:r,onBlur:s,type:n="text",placeholder:l}){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:a,onChange:e=>r(e.target.value),onBlur:s,placeholder:l,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:a,onChange:r,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:a,onChange:e=>r(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)(),u=c[e],x=(0,r.useSearchParams)(),[m,h]=(0,a.useState)(null),[b,g]=(0,a.useState)(!1),[j,v]=(0,a.useState)(!1),[f,N]=(0,a.useState)({}),[k,w]=(0,a.useState)(null),[C,y]=(0,a.useState)(!1),[S,_]=(0,a.useState)(null),[P,A]=(0,a.useState)("8400"),[T,R]=(0,a.useState)({}),H=(e,t,a)=>{let r=`${e}-${t}`;return r in T?T[r]:a?String(a):""},I=(e,t,a)=>{R(r=>({...r,[`${e}-${t}`]:a}))},E=(e,t,a,r)=>{let s=parseInt(T[`${t}-${a}`]??"",10),n=Number.isFinite(s)&&s>0&&s<=65535?s:void 0;en(e,{[r]:n}),R(e=>({...e,[`${t}-${a}`]:n?String(n):""}))},$=(0,a.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||[],butler:e.butler||{}}))).catch(()=>{})},[]);(0,a.useEffect)(()=>{$()},[$]),(0,a.useEffect)(()=>{fetch("/api/cli-status").then(e=>e.json()).then(e=>_(e)).catch(()=>{})},[]);let[G,O]=(0,a.useState)(null),[U,D]=(0,a.useState)(""),[M,L]=(0,a.useState)(!1),[B,q]=(0,a.useState)(!1),[W,Q]=(0,a.useState)(!1),[J,F]=(0,a.useState)(!1),[K,z]=(0,a.useState)(!1),Y=(0,a.useCallback)(()=>{fetch("/api/setup/reviewer-token-status").then(e=>e.ok?e.json():{exists:!1}).then(e=>O(!!e.exists)).catch(()=>O(!1))},[]),V=(0,a.useCallback)(()=>{fetch("/api/caffeinate/status").then(e=>e.ok?e.json():{active:!1}).then(e=>q(!!e.active)).catch(()=>{})},[]),X=(0,a.useCallback)(()=>{fetch("/api/butler/status").then(e=>e.ok?e.json():{running:!1}).then(e=>F(!!e.running)).catch(()=>{})},[]);(0,a.useEffect)(()=>{Y(),V(),X()},[Y,V,X]);let Z=async()=>{if(U.trim()){L(!0);try{(await fetch("/api/setup/save-token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:U.trim()})})).ok&&(D(""),Y())}finally{L(!1)}}},ee=async()=>{Q(!0);try{(await fetch(B?"/api/caffeinate/stop":"/api/caffeinate/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})})).ok&&V()}finally{Q(!1)}},et=e=>{m&&h({...m,butler:{...m.butler,...e}})},ea=async()=>{z(!0);try{let e=await fetch(J?"/api/butler/stop":"/api/butler/start",{method:"POST",headers:{"Content-Type":"application/json"},body:"{}"});if(e.ok){let t=await e.json();(J||t.ok)&&(X(),et({enabled:!J}))}}finally{z(!1)}};(0,a.useEffect)(()=>{m&&"true"===x.get("add")&&!C&&(y(!0),eo())},[m,x,C]);let er=async()=>{if(m){g(!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)}g(!1)}},es=(e,t)=>{m&&h({...m,[e]:t})},en=(e,t)=>{if(!m)return;let a=[...m.projects];a[e]={...a[e],...t},h({...m,projects:a})},el=(e,t,a)=>{if(!m)return;let r=[...m.projects],s={...r[e].agents};s[t]={...s[t],...a},r[e]={...r[e],agents:s},h({...m,projects:r})},eo=()=>{if(!m)return;let e=`project-${Date.now()}`,t=m.default_backend||"claude",a=S&&!1===S[t]?S&&S.claude&&!S.codex?"claude":S&&!S.claude&&S.codex?"codex":"claude":t,r={};for(let[e,t]of Object.entries(n))r[e]={...t,command:a};let s={id:e,name:u.newProject,repo:"owner/repo",working_dir:"",agents:r};h({...m,projects:[...m.projects,s]}),N({...f,[e]:!0})},ec=(0,a.useRef)({}),ed=(0,a.useRef)({}),ei=e=>{m&&en(e,{archived:!1})},ep=e=>{if(!m)return;let t=m.projects.filter((t,a)=>a!==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:u.title}),(0,t.jsx)("button",{onClick:er,disabled:b,className:"px-4 py-1.5 bg-accent text-bg text-[12px] font-semibold hover:bg-accent-dim transition-colors disabled:opacity-50",children:b?u.saving:j?u.saved:u.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:u.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:u.yourNameInChat,value:m.operator_name||"user",onChange:e=>es("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:u.language}),(0,t.jsx)("div",{className:"flex items-center gap-2 h-[35px]",children:["en","ko"].map(a=>{let r=e===a;return(0,t.jsx)("button",{type:"button",onClick:()=>p(a),className:`px-3 py-1.5 text-[12px] border transition-colors ${r?"border-accent bg-accent text-bg":"border-border text-text-muted hover:text-text hover:border-accent"}`,children:a},a)})})]})]}),(0,t.jsx)("p",{className:"mt-2 text-[10px] text-text-muted leading-snug",children:u.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:u.global}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[(0,t.jsx)(d,{label:u.dashboardPort,value:P,onChange:e=>A(e),onBlur:()=>{let e=parseInt(P,10),t=Number.isFinite(e)&&e>0&&e<=65535?e:8400;es("port",t),A(String(t))},type:"number"}),(0,t.jsx)(d,{label:u.agentChattrUrlGlobal,value:m.agentchattr_url,onChange:e=>es("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:u.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:u.defaults}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3 items-end",children:[(0,t.jsx)(i,{label:u.defaultAgentCli,value:m.default_backend||"claude",onChange:e=>es("default_backend",e),options:l.map(e=>({value:e.value,label:e.label+(S&&!S[e.value]?" (not installed)":"")}))}),(0,t.jsx)(d,{label:u.reviewerGithubUser,value:m.reviewer_github_user||"",onChange:e=>es("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:u.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?u.configured:u.notConfigured})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 mt-1",children:[(0,t.jsx)("input",{type:"password",value:U,onChange:e=>D(e.target.value),placeholder:u.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:Z,disabled:M||!U.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?u.saving:u.save})]})]})]}),(0,t.jsx)("p",{className:"mt-2 text-[10px] text-text-muted leading-snug",children:u.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:u.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 ${B?"bg-accent":"bg-text-muted"}`}),(0,t.jsxs)("span",{className:"text-[11px] text-text",children:[u.keepAwake," - ",B?u.on:u.off]}),(0,t.jsx)("button",{onClick:ee,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?"…":B?u.stop:u.start}),(0,t.jsx)("span",{className:"text-[10px] text-text-muted",children:u.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:u.butlerAgent}),(0,t.jsxs)("div",{className:"border border-border p-3 space-y-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("span",{className:`w-1.5 h-1.5 rounded-full ${J?"bg-accent":"bg-text-muted"}`}),(0,t.jsx)("span",{className:"text-[11px] text-text",children:J?u.butlerEnabled:u.butlerDisabled}),(0,t.jsx)("button",{onClick:ea,disabled:K,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:K?"…":J?u.disable:u.enable})]}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[(0,t.jsx)(i,{label:u.butlerCli,value:m.butler?.command||"claude",onChange:e=>et({command:e}),options:l.map(e=>({value:e.value,label:e.label+(S&&!S[e.value]?" (not installed)":"")}))}),(0,t.jsx)(i,{label:u.butlerModel,value:m.butler?.model||"opus",onChange:e=>et({model:e}),options:o.map(e=>({value:e,label:e}))}),(0,t.jsx)(d,{label:u.butlerCwd,value:m.butler?.cwd||"~/docs/",onChange:e=>et({cwd:e}),placeholder:"~/docs/"})]}),(0,t.jsxs)("label",{className:"flex items-center gap-2 cursor-pointer",children:[(0,t.jsx)("input",{type:"checkbox",checked:m.butler?.auto_start??!1,onChange:e=>et({auto_start:e.target.checked}),className:"accent-accent"}),(0,t.jsx)("span",{className:"text-[11px] text-text",children:u.butlerAutoStart})]}),(0,t.jsx)("p",{className:"text-[10px] text-text-muted leading-snug",children:u.butlerHelp})]})]}),(0,t.jsxs)("section",{className:"mb-8",children:[(0,t.jsx)("h2",{className:"text-[11px] text-text-muted uppercase tracking-wider mb-3",children:u.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:[u.cleanupIntro.split("~/.quadwork/{id}/agentchattr")[0]," ",(0,t.jsx)("code",{className:"bg-bg-surface px-1 rounded",children:"~/.quadwork/{id}/agentchattr"}),u.cleanupIntro.includes("~/.quadwork/{id}/agentchattr")?u.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:u.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:u.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:u.activeProjects}),m.projects.filter(e=>!e.archived).map(e=>{let a=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:u.projectName,value:e.name,onChange:e=>((e,t)=>{if(!m)return;let a=m.projects[e],r=`project:${a.id}`;r in ec.current||(ec.current[r]=a.name),en(e,{name:t}),ed.current[r]&&clearTimeout(ed.current[r]),ed.current[r]=setTimeout(()=>{let e=ec.current[r];e&&e!==t&&fetch("/api/rename",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:"project",projectId:a.id,oldName:e,newName:t})}).then(()=>$()).catch(()=>{}),delete ec.current[r],delete ed.current[r]},800)})(a,e)}),(0,t.jsx)(d,{label:u.githubRepo,value:e.repo,onChange:e=>en(a,{repo:e}),placeholder:"owner/repo"}),(0,t.jsx)(d,{label:u.workingDirectory,value:e.working_dir||"",onChange:e=>en(a,{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:u.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:u.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:u.name}),(0,t.jsx)("span",{children:u.command}),(0,t.jsx)("span",{children:u.model}),(0,t.jsx)("span",{children:u.cwd}),(0,t.jsx)("span",{children:u.agentsMd})]}),Object.entries(e.agents||{}).map(([r,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||r.toUpperCase(),onChange:e=>((e,t,a)=>{if(!m)return;let r=m.projects[e],s=r.agents?.[t],n=`agent:${r.id}:${t}`;n in ec.current||(ec.current[n]=s?.display_name||t.toUpperCase()),el(e,t,{display_name:a}),ed.current[n]&&clearTimeout(ed.current[n]),ed.current[n]=setTimeout(()=>{let e=ec.current[n];e&&e!==a&&fetch("/api/rename",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:"agent",projectId:r.id,agentId:t,oldName:e,newName:a})}).then(()=>$()).catch(()=>{}),delete ec.current[n],delete ed.current[n]},800)})(a,r,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"===r?u.owner:r.startsWith("reviewer")?u.reviewer:u.builder})]}),(0,t.jsx)("select",{value:s.command||"claude",onChange:e=>el(a,r,{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?u.oneCliInstalled:void 0,children:l.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=>el(a,r,{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:o.map(e=>(0,t.jsx)("option",{value:e,className:"bg-bg-surface",children:e},e))}),(0,t.jsx)("input",{value:s.cwd||"",onChange:e=>el(a,r,{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}-${r}-md`]:!f[`${e.id}-${r}-md`]}),className:"text-[10px] text-text-muted hover:text-accent transition-colors text-left px-1",children:f[`${e.id}-${r}-md`]?`▾ ${u.edit}`:`▸ ${u.edit}`})]}),f[`${e.id}-${r}-md`]&&(0,t.jsx)("div",{className:"px-2 pb-2",children:(0,t.jsx)("textarea",{value:s.agents_md||"",onChange:e=>el(a,r,{agents_md:e.target.value}),placeholder:u.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"})})]},r))]})]}),(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsx)("h3",{className:"text-[10px] text-text-muted uppercase tracking-wider mb-2",children:u.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:u.agentChattrUrl,value:e.agentchattr_url||"",onChange:e=>en(a,{agentchattr_url:e}),placeholder:"http://127.0.0.1:8300"}),(0,t.jsx)(d,{label:u.sessionToken,value:e.agentchattr_token||"",onChange:e=>en(a,{agentchattr_token:e}),placeholder:u.optional}),(0,t.jsx)(d,{label:u.mcpHttpPort,value:H(e.id,"http",e.mcp_http_port),onChange:t=>I(e.id,"http",t),onBlur:()=>E(a,e.id,"http","mcp_http_port"),type:"number",placeholder:"8200"}),(0,t.jsx)(d,{label:u.mcpSsePort,value:H(e.id,"sse",e.mcp_sse_port),onChange:t=>I(e.id,"sse",t),onBlur:()=>E(a,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:()=>ei(a),className:"text-[11px] text-accent hover:underline",children:u.restoreProject}):(0,t.jsx)("button",{onClick:()=>{m&&en(a,{archived:!0})},className:"text-[11px] text-text-muted hover:text-text transition-colors",children:u.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:u.removeQuestion}),(0,t.jsx)("button",{onClick:()=>ep(a),className:"px-2 py-1 text-[11px] bg-error text-bg font-semibold",children:u.confirm}),(0,t.jsx)("button",{onClick:()=>w(null),className:"px-2 py-1 text-[11px] text-text-muted border border-border",children:u.cancel})]}):(0,t.jsx)("button",{onClick:()=>w(e.id),className:"text-[11px] text-error hover:text-text transition-colors",children:u.remove})]})]})]},e.id)}),(0,t.jsx)("button",{onClick:eo,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:u.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:u.archived}),m.projects.filter(e=>e.archived).map(e=>{let a=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:()=>ei(a),className:"text-[11px] text-accent hover:underline",children:u.restore}),(0,t.jsx)("button",{onClick:()=>{k===e.id?ep(a):w(e.id)},className:"text-[11px] text-error hover:underline",children:k===e.id?u.confirmRemove:u.remove})]})]})},e.id)})]})]}),(0,t.jsx)("div",{className:"flex justify-end pb-6",children:(0,t.jsx)("button",{onClick:er,disabled:b,className:"px-4 py-1.5 bg-accent text-bg text-[12px] font-semibold hover:bg-accent-dim transition-colors disabled:opacity-50",children:b?u.saving:j?u.saved:u.save})})]}):(0,t.jsx)("div",{className:"p-6 text-text-muted text-xs",children:u.loading})}])}]);
|
|
@@ -1 +0,0 @@
|
|
|
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}])}]);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|