@mndrk/agx 2.4.5 → 2.4.6
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/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/apps/local/.next/build-manifest.json +2 -2
- package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github/select-repos/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github/select-repos.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/notifications/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/notifications/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/prs/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/prs/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__23838f87._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__a61463b8._.js +7 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ecd68e8._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_5c140c38._.js +7 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_30d021de._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_988d29c0._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_teams_[teamId]_page_tsx_6dcfdd52._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_PromptJobBoard_tsx_281b2873._.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_projects_ProjectObjectivesWorkspace_tsx_751ab3d3._.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/middleware-manifest.json +5 -5
- package/cloud-runtime/standalone/apps/local/.next/server/pages/404.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/pages/500.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/692103d55fcd0328.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{8b5d6f5bade8c4ea.js → 8d8fe711583a59f0.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/92467c495ad08a85.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/add53c2fe147af75.css +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/d662272e49df1950.js +20 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/e0d68c6af17c8c87.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{93b2b6aa0c9593f6.js → e6d4118b7c32d11c.js} +1 -1
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/teams/[teamId]/page.tsx +58 -2
- package/cloud-runtime/standalone/apps/local/components/PromptJobBoard.tsx +73 -33
- package/cloud-runtime/standalone/apps/local/components/projects/ObjectiveScheduledTasksPanel.tsx +78 -239
- package/cloud-runtime/standalone/apps/local/components/thread/WorkspaceSidebar.tsx +2 -2
- package/cloud-runtime/standalone/apps/local/worker/index.js +2 -2
- package/package.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__7e3c2ea1._.js +0 -7
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__dbda910b._.js +0 -7
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_917d90b4._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_a2835b49._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/55a31773f8c2833f.js +0 -20
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/7c8515a24aeea102.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/80446e085a3aad56.css +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/9c29ef447bef1576.js +0 -5
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/a9111ccc979d4933.js +0 -5
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/d2b34ade19d9d8da.js +0 -1
- /package/cloud-runtime/standalone/apps/local/.next/static/{C3-tP4djbU34_g7VoIFac → fipnHmd6JPn9sTuFdYS0y}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{C3-tP4djbU34_g7VoIFac → fipnHmd6JPn9sTuFdYS0y}/_clientMiddlewareManifest.json +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{C3-tP4djbU34_g7VoIFac → fipnHmd6JPn9sTuFdYS0y}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,568656,e=>{"use strict";var t=e.i(762281),r=e.i(307241),a=e.i(506420),s=e.i(935851),o=e.i(958164),n=e.i(429056),i=e.i(417442),l=e.i(363732);let d=(0,l.default)("calendar-clock",[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]]);var c=e.i(529471),u=e.i(580873),m=e.i(575479),p=e.i(640481),x=e.i(929870),h=e.i(8707),b=e.i(794731),f=e.i(169610),v=e.i(572665),g=e.i(519132),j=e.i(797167),y=e.i(524123),k=e.i(945028),w=e.i(490011),N=e.i(984242),S=e.i(208343),C=e.i(133232),I=e.i(884564),$=e.i(423709),A=e.i(40527),T=e.i(378764);let E=(0,l.default)("pause",[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]);var O=e.i(245900),M=e.i(558201),P=e.i(437307),R=e.i(715908),L=e.i(553069),D=e.i(827430),F=e.i(352687);function _(e){return"active"===e.state&&(null!==e.nextRunAt&&e.nextRunAt-Date.now()<0?!e.lastRunAt||!(e.lastRunAt>=e.nextRunAt):!!e.prevScheduledAt&&!!e.lastRunAt&&e.lastRunAt>e.prevScheduledAt+3e5)}function z({projectId:e,objectiveId:r,objectiveKey:a,createDefaults:o,onCreateTask:n}){let{jobs:i,loading:l,refresh:d,deleteJob:m,toggleJob:h,updateJob:f,fetchRuns:v,runNow:g}=(0,R.usePromptJobs)(e,{requireProjectId:!0,includeObjectiveJobs:!0,objectiveId:r}),[j,y]=(0,s.useState)(!1),[k,w]=(0,s.useState)(null),[N,S]=(0,s.useState)(null),[C,I]=(0,s.useState)(null),[$,A]=(0,s.useState)(null),[T,z]=(0,s.useState)([]),[U,q]=(0,s.useState)({});(0,s.useEffect)(()=>{fetch("/api/prompt-jobs/agents").then(e=>e.json()).then(e=>{let t={};for(let r of e.agents??[])t[r.id]=r;q(t)}).catch(e=>console.warn("[ObjectiveScheduledTasksPanel] fetch agents failed:",e))},[]);let J=(0,s.useMemo)(()=>i.filter(e=>e.objectiveId===r).sort((e,t)=>!e.name.toLowerCase().includes("objective worker")-!t.name.toLowerCase().includes("objective worker")),[i,r]),V=(0,s.useMemo)(()=>J.find(e=>e.id===C)??null,[C,J]),W=(0,s.useCallback)(async()=>{if(0===J.length)return void z([]);let e=[];await Promise.all(J.map(async t=>{for(let r of(await v(t.id)))e.push({...r,jobName:t.name})})),e.sort((e,t)=>new Date(t.startedAt??t.createdAt).getTime()-new Date(e.startedAt??e.createdAt).getTime()),z(e.slice(0,10))},[J,v]);(0,s.useEffect)(()=>{W()},[W]);let H=async e=>{w(e.id),S(null);let t=await m(e.id);(w(null),t.ok)?await d():S(t.error??`Failed to hide "${e.name}".`)},B=async e=>{S(null);let t=await n(e);return t&&await d(),t},K=(0,s.useCallback)(async(e,t)=>{let r=await f(e,t);return r&&await d(),r},[d,f]);return(0,t.jsxs)(t.Fragment,{children:[j?(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4 py-6",children:(0,t.jsx)("div",{className:"w-full max-w-5xl h-[85vh] overflow-hidden rounded-[28px] border border-[var(--border)] bg-[var(--card-bg)] shadow-2xl",children:(0,t.jsx)(D.CreateJobModal,{onClose:()=>y(!1),onSubmit:async e=>{await B(e)},createDefaults:o,contextLabel:a})})}):null,V?(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4 py-6",children:(0,t.jsx)("div",{className:"w-full max-w-5xl h-[85vh] overflow-hidden rounded-[28px] border border-[var(--border)] bg-[var(--card-bg)] shadow-2xl",children:(0,t.jsx)(D.CreateJobModal,{onClose:()=>I(null),onSubmit:async e=>{await K(V.id,e)},editingJob:V,contextLabel:a})})}):null,(0,t.jsxs)("div",{className:"px-1",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-sm font-semibold text-[var(--foreground)]",children:"Scheduled Jobs"}),(0,t.jsxs)("p",{className:"mt-1 text-sm text-[var(--muted-foreground)]",children:["Shared scheduled-task list filtered to objective label"," ",(0,t.jsx)("span",{className:"font-mono text-[var(--foreground)]",children:a}),"."]})]}),(0,t.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:(0,t.jsxs)("button",{type:"button",onClick:()=>y(!0),className:"inline-flex items-center gap-2 rounded-xl border border-[var(--border)] px-3 py-2 text-sm text-[var(--foreground)] transition-colors hover:border-[var(--card-hover-border)]",children:[(0,t.jsx)(x.Plus,{className:"h-4 w-4"}),"New task"]})})]}),N?(0,t.jsx)("p",{className:"mt-4 text-sm text-[var(--destructive)]",children:N}):null,(0,t.jsx)("div",{className:"mt-5 space-y-3",children:l&&0===J.length?(0,t.jsx)("div",{className:"rounded-2xl border border-dashed border-[var(--border)] px-4 py-8 text-sm text-[var(--muted-foreground)]",children:"Loading scheduled tasks..."}):0===J.length?(0,t.jsx)("div",{className:"rounded-2xl border border-dashed border-[var(--border)] px-4 py-8 text-sm text-[var(--muted-foreground)]",children:"No scheduled tasks for this objective yet."}):J.map(e=>{var r,a;let s;return(0,t.jsx)("div",{onClick:()=>I(e.id),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),I(e.id))},role:"button",tabIndex:0,className:`block w-full rounded-2xl border px-4 py-4 text-left transition-colors focus:outline-none focus:ring-2 focus:ring-[var(--card-hover-border)] ${_(e)?"border-amber-500/40 bg-amber-500/5 hover:border-amber-500/60":"border-[var(--border)] bg-[var(--overlay-panel-muted)] hover:border-[var(--card-hover-border)]"}`,children:(0,t.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2.5",children:[(0,t.jsx)("span",{className:`inline-block size-2 shrink-0 rounded-full ${"active"===e.state?"bg-emerald-400":"paused"===e.state?"bg-amber-400":"bg-[var(--tone-neutral)]"}`}),(0,t.jsx)("p",{className:"truncate text-sm font-semibold text-[var(--foreground)]",children:e.name}),(0,t.jsx)("span",{className:`rounded-full border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] ${"active"===(r=e.state)?"border-[var(--status-completed-border)] bg-[var(--status-completed-bg)] text-[var(--status-completed)]":"paused"===r?"border-[var(--status-blocked-border)] bg-[var(--status-blocked-bg)] text-[var(--status-blocked)]":"border-[var(--tone-neutral-border)] bg-[var(--tone-neutral-bg)] text-[var(--tone-neutral)]"}`,children:"active"===(a=e.state)?"Active":"paused"===a?"Paused":"Stopped"}),_(e)&&(0,t.jsxs)("span",{className:"shrink-0 text-[10px] font-semibold uppercase tracking-[0.16em] text-amber-400 bg-amber-500/10 px-2 py-0.5 rounded-full border border-amber-500/20 inline-flex items-center gap-1",children:[(0,t.jsx)(u.Clock,{className:"h-3 w-3"}),"overdue"]})]}),(0,t.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-3 text-xs text-[var(--muted-foreground)]",children:[(0,t.jsxs)("span",{className:`inline-flex items-center gap-1.5 ${_(e)?"text-amber-400 font-medium":""}`,children:[(0,t.jsx)(u.Clock,{className:"h-3.5 w-3.5"}),"Next run ",function(e,t){if("paused"===t)return"Paused";if("stopped"===t)return"Stopped";if(null===e)return"Pending";let r=e-Date.now();return r<0?"Overdue":r<6e4?`in ${Math.round(r/1e3)}s`:r<36e5?`in ${Math.round(r/6e4)}m`:r<864e5?`in ${Math.round(r/36e5)}h`:`in ${Math.round(r/864e5)}d`}(e.nextRunAt,e.state)]}),(0,t.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,t.jsx)(u.Clock,{className:"h-3.5 w-3.5"}),(s=e.cadence||e.cronExpr)?(0,L.cronToHuman)(e.cronExpr||s)??s:"No frequency"]}),e.condition?(0,t.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null]}),(0,t.jsxs)("div",{className:"mt-3 flex items-center gap-2 min-w-0 text-xs text-[var(--muted-foreground)]",children:[e.agentId&&U[e.agentId]?(0,t.jsx)("img",{src:(0,D.agentAvatar)(e.agentId,U[e.agentId].color,20),alt:"",className:"size-5 rounded-full shrink-0"}):(0,t.jsx)(M.Terminal,{className:"h-3.5 w-3.5 shrink-0"}),(0,t.jsx)("span",{className:"truncate font-medium text-[var(--foreground)]",children:e.agentId&&U[e.agentId]?U[e.agentId].name:e.provider}),e.model?(0,t.jsx)("span",{className:"truncate font-mono text-[11px]",children:e.model}):null]}),e.condition?(0,t.jsxs)("p",{className:"mt-2 text-xs text-[var(--muted-foreground)]",children:["Condition: ",e.condition]}):null]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 shrink-0",children:[(0,t.jsx)("button",{type:"button",title:"Run now",onClick:async t=>{t.stopPropagation(),w(e.id),await g(e.id),w(null),await d(),await W()},disabled:k===e.id,className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-emerald-400/40 hover:text-emerald-300 disabled:cursor-not-allowed disabled:opacity-50",children:(0,t.jsx)(O.Play,{className:"h-3.5 w-3.5 fill-current"})}),(0,t.jsx)("button",{type:"button",title:"Edit",onClick:t=>{t.stopPropagation(),I(e.id)},className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-sky-400/40 hover:text-sky-300",children:(0,t.jsx)(p.Pencil,{className:"h-3.5 w-3.5"})}),(0,t.jsx)("button",{type:"button",title:"active"===e.state?"Pause":"Resume",onClick:async t=>{t.stopPropagation(),w(e.id),await h(e),w(null)},disabled:k===e.id,className:`rounded-lg border p-2 transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${"active"===e.state?"border-[var(--border)] text-[var(--muted-foreground)] hover:border-amber-400/40 hover:text-amber-300":"border-emerald-500/30 text-emerald-400 hover:border-emerald-400/50 hover:text-emerald-300"}`,children:"active"===e.state?(0,t.jsx)(E,{className:"h-3.5 w-3.5"}):(0,t.jsx)(O.Play,{className:"h-3.5 w-3.5 fill-current"})}),(0,t.jsx)("button",{type:"button",title:"Delete",onClick:t=>{t.stopPropagation(),A(e)},disabled:k===e.id,className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-[var(--status-failed-border)] hover:text-[var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50",children:(0,t.jsx)(b.Trash2,{className:"h-3.5 w-3.5"})})]})]})},e.id)})}),T.length>0&&(0,t.jsxs)("div",{className:"mt-8",children:[(0,t.jsx)("p",{className:"text-[11px] font-medium uppercase tracking-[0.18em] text-[var(--muted-foreground)] mb-3",children:"Recent executions"}),(0,t.jsx)("div",{className:"space-y-0.5",children:T.map(e=>{let r=e.startedAt??e.createdAt,a="success"===e.status,s="failed"===e.status,o="running"===e.status;return(0,t.jsxs)("div",{className:"py-2 px-2 rounded-md text-xs",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("span",{className:`flex size-5 shrink-0 items-center justify-center rounded-full border ${a?"border-emerald-500/40 text-emerald-400":s?"border-[var(--status-failed-border)] text-[var(--destructive)]":o?"border-sky-500/40 text-sky-400":"border-[var(--border)] text-[var(--muted-foreground)]"}`,children:a?(0,t.jsx)(c.Check,{className:"h-3 w-3"}):s?(0,t.jsx)(P.XCircle,{className:"h-3 w-3"}):(0,t.jsx)("span",{className:`block size-1.5 rounded-full ${o?"bg-sky-400 animate-pulse":"bg-current"}`})}),(0,t.jsx)("span",{className:"truncate text-[var(--muted-foreground)]",children:e.jobName}),(0,t.jsx)("span",{className:"ml-auto shrink-0 text-[11px] text-[var(--muted-foreground)]",children:new Date(r).toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}),null!=e.durationMs&&(0,t.jsx)("span",{className:"shrink-0 font-mono text-[11px] text-[var(--muted-foreground)]",children:e.durationMs<1e3?`${e.durationMs}ms`:`${Math.round(e.durationMs/1e3)}s`})]}),s&&e.error&&(0,t.jsxs)("p",{className:"mt-1 ml-8 text-[11px] leading-snug text-[var(--destructive)] opacity-80 line-clamp-2",children:[e.error,null!=e.exitCode&&` (exit ${e.exitCode})`]}),s&&e.logs&&(0,t.jsxs)("details",{className:"mt-1 ml-8 group",children:[(0,t.jsx)("summary",{className:"cursor-pointer text-[10px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] select-none",children:"Show tail logs"}),(0,t.jsx)("pre",{className:"mt-1 max-h-40 overflow-auto rounded bg-[var(--muted)] px-2 py-1.5 text-[10px] leading-[1.4] text-[var(--foreground)] whitespace-pre-wrap break-words",children:e.logs})]})]},e.id)})})]})]}),(0,t.jsx)(F.default,{isOpen:!!$,title:"Delete scheduled task?",message:"This permanently removes the task and all its run history. This cannot be undone.",preview:$?.name,confirmLabel:"Delete",variant:"danger",onConfirm:()=>{$&&H($),A(null)},onCancel:()=>A(null)})]})}var U=e.i(498027),q=e.i(367859);let J=(0,l.default)("funnel",[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]]),V={"metric-check":{label:"Metric",className:"bg-blue-500/15 text-blue-400 border-blue-500/30"},"status-update":{label:"Status",className:"bg-emerald-500/15 text-emerald-400 border-emerald-500/30"},milestone:{label:"Milestone",className:"bg-amber-500/15 text-amber-400 border-amber-500/30"},note:{label:"Note",className:"bg-[var(--tone-neutral-bg)] text-[var(--tone-neutral)] border-[var(--tone-neutral-border)]"}},W=["metric-check","status-update","milestone","note"];function H({activity:e}){let[r,a]=(0,s.useState)(!1),o=V[e.type]??V.note,n=e.body.length>200;return(0,t.jsxs)("div",{className:"relative pl-6 pb-6 last:pb-0",children:[(0,t.jsx)("div",{className:"absolute left-0 top-1.5 h-3 w-3 rounded-full border-2 border-[var(--timeline-node-border)] bg-[var(--timeline-node-bg)]"}),(0,t.jsx)("div",{className:"absolute bottom-0 left-[5px] top-4 w-px bg-[var(--timeline-track)] last:hidden"}),(0,t.jsxs)("div",{className:"mb-1.5 flex items-center gap-2",children:[(0,t.jsx)("span",{className:`rounded-full border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] ${o.className}`,children:o.label}),(0,t.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:function(e){let t=Date.now(),r=Date.parse(e);if(Number.isNaN(r))return e;let a=Math.floor((t-r)/6e4);if(a<1)return"just now";if(a<60)return`${a}m ago`;let s=Math.floor(a/60);if(s<24)return`${s}h ago`;let o=Math.floor(s/24);return o<30?`${o}d ago`:new Date(r).toLocaleDateString("en-US",{month:"short",day:"numeric",year:o>365?"numeric":void 0})}(e.createdAt)}),"manual"!==e.source&&(0,t.jsx)("span",{className:"max-w-[180px] truncate font-mono text-[11px] text-[var(--app-shell-soft-text)]",children:e.source})]}),r?(0,t.jsx)("div",{className:"prose prose-sm max-w-none text-sm text-[var(--foreground)] prose-neutral dark:prose-invert",children:(0,t.jsx)(S.Markdown,{content:e.body})}):(0,t.jsx)("div",{className:`text-sm leading-relaxed text-[var(--muted-foreground)] ${n?"max-h-24 overflow-hidden [mask-image:linear-gradient(to_bottom,black_72%,transparent)]":""}`,children:(0,t.jsx)(S.Markdown,{content:e.body})}),n&&(0,t.jsxs)("button",{type:"button",onClick:()=>a(!r),className:"mt-1.5 flex items-center gap-1 text-xs text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",children:[r?(0,t.jsx)(U.ChevronDown,{size:12}):(0,t.jsx)(q.ChevronRight,{size:12}),r?"Show less":"Show more"]})]})}function B({projectId:e,objectiveId:r,onCreated:a,onCancel:o}){let[n,i]=(0,s.useState)("note"),[l,d]=(0,s.useState)(""),[c,u]=(0,s.useState)(!1),m=(0,s.useRef)(null);(0,s.useEffect)(()=>{m.current?.focus()},[]);let p=async()=>{let t=l.trim();if(t&&!c){u(!0);try{let s=await fetch(`/api/projects/${e}/objectives/${r}/activities`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:n,body:t})});if(!s.ok)throw Error("Failed to create activity");let o=await s.json();a(o)}catch(e){console.error("Failed to create activity:",e)}finally{u(!1)}}};return(0,t.jsxs)("div",{className:"mb-4 rounded-lg border border-[var(--border)] bg-[var(--overlay-panel-muted)] p-3",children:[(0,t.jsx)("div",{className:"mb-3 flex flex-wrap gap-1.5",children:W.map(e=>{let r=V[e],a=n===e;return(0,t.jsx)("button",{type:"button",onClick:()=>i(e),className:`rounded-full border px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] transition-colors ${a?"border-[var(--foreground)] bg-[var(--foreground)] text-[var(--background)]":`${r.className} hover:opacity-80`}`,children:r.label},e)})}),(0,t.jsx)("textarea",{ref:m,value:l,onChange:e=>d(e.target.value),placeholder:"What did you do?",rows:3,className:"w-full resize-none rounded-md border border-[var(--border)] bg-[var(--input)] px-3 py-2 text-sm text-[var(--foreground)] placeholder:text-[var(--app-shell-soft-text)] focus:border-[var(--card-hover-border)] focus:outline-none"}),(0,t.jsxs)("div",{className:"mt-2 flex items-center justify-end gap-2",children:[(0,t.jsx)("button",{type:"button",onClick:o,className:"px-3 py-1.5 text-xs text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",children:"Cancel"}),(0,t.jsx)("button",{type:"button",onClick:p,disabled:!l.trim()||c,className:"px-3 py-1.5 text-xs font-medium rounded-md bg-sky-600 text-white hover:bg-sky-500 transition-colors disabled:opacity-40 disabled:cursor-not-allowed",children:c?"Saving...":"Log activity"})]})]})}function K({projectId:e,objectiveId:r,onTotalChange:a}){let[o,n]=(0,s.useState)([]),[i,l]=(0,s.useState)(0),[d,c]=(0,s.useState)(!1),[u,m]=(0,s.useState)(1),[p,h]=(0,s.useState)(!0),[b,f]=(0,s.useState)("all"),[v,g]=(0,s.useState)(!1),[y,k]=(0,s.useState)(!1),w=(0,s.useCallback)(async(t,s,o)=>{h(!0);try{let i=new URLSearchParams({page:String(t),limit:"25"});"all"!==s&&i.set("type",s);let d=await fetch(`/api/projects/${e}/objectives/${r}/activities?${i}`);if(!d.ok)throw Error("Failed to load activities");let u=await d.json(),m=Array.isArray(u.activities)?u.activities:[],p="number"==typeof u.total?u.total:m.length,x=!!u.hasMore;n(e=>o?[...e,...m]:m),l(p),a?.(p),c(x)}catch(e){console.error("Failed to fetch activities:",e)}finally{h(!1)}},[e,r]);return(0,s.useEffect)(()=>{m(1),w(1,b,!1)},[w,b]),(0,t.jsxs)("section",{children:[(0,t.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"Time-ordered log of outputs from scheduled tasks and manual entries."}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>k(!y),className:`flex items-center gap-1 px-2.5 py-1 rounded-md text-xs font-medium transition-colors ${y?"text-sky-400 bg-sky-500/10":"text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]"}`,children:[y?(0,t.jsx)(j.X,{size:12}):(0,t.jsx)(x.Plus,{size:12}),"Log activity"]}),(0,t.jsx)("button",{type:"button",onClick:()=>g(!v),className:`p-1.5 rounded-md transition-colors ${v||"all"!==b?"text-sky-400 bg-sky-500/10":"text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]"}`,"aria-label":"Filter activities",children:(0,t.jsx)(J,{size:14})})]})]}),v&&(0,t.jsxs)("div",{className:"flex flex-wrap gap-1.5 mb-4",children:[(0,t.jsx)("button",{type:"button",onClick:()=>f("all"),className:`rounded-full border px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] transition-colors ${"all"===b?"border-[var(--foreground)] bg-[var(--foreground)] text-[var(--background)]":"border-[var(--tone-neutral-border)] bg-[var(--tone-neutral-bg)] text-[var(--tone-neutral)] hover:border-[var(--card-hover-border)]"}`,children:"All"}),W.map(e=>{let r=V[e],a=b===e;return(0,t.jsx)("button",{type:"button",onClick:()=>f(e),className:`rounded-full border px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] transition-colors ${a?"border-[var(--foreground)] bg-[var(--foreground)] text-[var(--background)]":`${r.className} hover:opacity-80`}`,children:r.label},e)})]}),y&&(0,t.jsx)(B,{projectId:e,objectiveId:r,onCreated:e=>{n(t=>[e,...t]),l(e=>{let t=e+1;return a?.(t),t}),k(!1)},onCancel:()=>k(!1)}),p&&0===o.length?(0,t.jsx)("div",{className:"py-6 text-center text-sm text-[var(--muted-foreground)]",children:"Loading activities..."}):0===o.length?(0,t.jsxs)("div",{className:"rounded-xl border border-dashed border-[var(--border)] bg-[var(--overlay-panel-muted)] p-6 text-center",children:[(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"No activities yet."}),(0,t.jsx)("p",{className:"mt-1 text-xs text-[var(--app-shell-soft-text)]",children:"Activities are created by scheduled tasks and agent actions."})]}):(0,t.jsxs)("div",{children:[o.map(e=>(0,t.jsx)(H,{activity:e},e.id)),d&&(0,t.jsx)("div",{className:"pt-2 pl-6",children:(0,t.jsx)("button",{type:"button",onClick:()=>{let e=u+1;m(e),w(e,b,!0)},disabled:p,className:"text-xs text-sky-400 hover:text-sky-300 transition-colors disabled:opacity-50",children:p?"Loading...":"Load more"})})]})]})}let G=/(?:^|\n)Objective health:\s*(\d{1,3})%\s*(On track|At risk|Off track|Done)\b/im,Y={"on track":"on_track","at risk":"at_risk","off track":"off_track",done:"done"};function X(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function Q(e){return"number"==typeof e&&Number.isFinite(e)?Math.max(0,Math.min(100,Math.round(e))):0}function Z(e){if("string"!=typeof e)return null;let t=e.trim().toLowerCase();return"on_track"===t||"at_risk"===t||"off_track"===t||"done"===t?t:Y[t]??null}function ee(e){if("string"!=typeof e)return null;let t=Date.parse(e);return Number.isNaN(t)?null:new Date(t).toISOString()}function et(e){return"string"==typeof e&&e.trim()?e.trim():void 0}function er(...e){let t=e.flatMap(e=>e??[]),r=[];for(let e of[...t].sort((e,t)=>Date.parse(e.recordedAt)-Date.parse(t.recordedAt))){let t=r[r.length-1]??null;t&&t.progress===e.progress&&t.status===e.status&&(!t.source||!e.source||t.source===e.source)&&5e3>=Math.abs(Date.parse(e.recordedAt)-Date.parse(t.recordedAt))||r.push(e)}return r}let ea={on_track:{label:"On track",stroke:"var(--status-completed)"},at_risk:{label:"At risk",stroke:"var(--status-blocked)"},off_track:{label:"Off track",stroke:"var(--status-failed)"},done:{label:"Done",stroke:"var(--status-in-progress)"}};function es(e){let{projectId:r,objectiveId:a,objectiveKey:o,metadata:n,currentProgress:i,currentStatus:l,objectiveUpdatedAt:d}=e,c=(0,s.useMemo)(()=>(function(e,t){if(!X(e)||!t.trim())return[];let r=e.project_objective_health_history;if(!X(r))return[];let a=r[t.trim()];return Array.isArray(a)?er(a.map(e=>(function(e){if(!X(e))return null;let t=Z(e.status),r=ee(e.recordedAt);return t&&r?{progress:Q(e.progress),status:t,recordedAt:r,source:et(e.source),note:et(e.note),objectiveId:et(e.objectiveId)??null,objectiveKey:et(e.objectiveKey)??null}:null})(e)).filter(e=>!!e)):[]})(n,a),[n,a]),[u,m]=(0,s.useState)(c),p=(0,s.useMemo)(()=>({progress:i,status:l,recordedAt:d,objectiveId:a,objectiveKey:o}),[i,l,a,o,d]);(0,s.useEffect)(()=>{m(c)},[c]),(0,s.useEffect)(()=>{let e=!1;return async function(){try{let t=await fetch(`/api/projects/${r}/objectives/${a}/activities?type=status-update&limit=100`);if(!t.ok)throw Error("Failed to load objective activity history");let s=await t.json(),n=Array.isArray(s.activities)?s.activities:[],i=er(c,er(n.map(e=>(function(e){if("status-update"!==e.type)return null;let t=e.body.match(G);if(!t)return null;let r=Q(Number(t[1])),a=Z(t[2]),s=ee(e.createdAt);return a&&s?{progress:r,status:a,recordedAt:s,source:et(e.source),objectiveKey:et(e.objectiveLabel)??null}:null})(e)).filter(e=>!!e&&(!o||e.objectiveKey===o))));e||m(i)}catch{e||m(c)}}(),()=>{e=!0}},[c,a,o,r]);let[x,h]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let e=requestAnimationFrame(()=>h(!0));return()=>cancelAnimationFrame(e)},[]);let b=er(u,[p]),f=b[b.length-1],v=ea[f.status];return 0===u.length||1===b.length||b.length,(0,t.jsxs)("div",{"data-testid":"objective-health-trend",className:"ml-auto inline-flex items-center gap-3 rounded-xl border border-[var(--border)] bg-[var(--overlay-panel-muted)] px-3 py-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-[var(--muted-foreground)]",children:"Objective health"}),(0,t.jsxs)("div",{className:"mt-0.5 text-[20px] font-semibold leading-none text-[var(--foreground)]",children:[f.progress,"%"]}),(0,t.jsx)("div",{className:"mt-0.5 text-[10px] font-medium",style:{color:v.stroke},children:v.label})]}),(0,t.jsx)("div",{className:"h-[40px] w-[14px] overflow-hidden rounded-sm",style:{background:"var(--muted)"},role:"progressbar","aria-valuenow":f.progress,"aria-valuemin":0,"aria-valuemax":100,"aria-label":"Objective health",title:`${f.progress}%`,children:(0,t.jsx)("div",{className:"flex h-full flex-col justify-end",children:(0,t.jsx)("div",{className:"relative w-full overflow-hidden rounded-sm transition-[height] duration-700 ease-out",style:{height:x?`${f.progress}%`:"0%",backgroundColor:v.stroke},children:(0,t.jsx)("div",{className:"absolute inset-0 animate-pulse",style:{background:"linear-gradient(0deg, transparent 0%, rgba(255,255,255,0.15) 50%, transparent 100%)"}})})})})]})}var eo=e.i(681619),en=e.i(638703),ei=e.i(276013),el=e.i(44054),ed=e.i(434405),ec=e.i(169433),eu=e.i(982141),em=e.i(902572);let ep={on_track:{label:"On track",chipClass:"border-[var(--status-completed-border)] bg-[var(--status-completed-bg)] text-[var(--status-completed-text)]",toneClass:"text-[var(--status-completed-text)]"},at_risk:{label:"At risk",chipClass:"border-[var(--status-blocked-border)] bg-[var(--status-blocked-bg)] text-[var(--status-blocked-text)]",toneClass:"text-[var(--status-blocked-text)]"},off_track:{label:"Off track",chipClass:"border-[var(--status-failed-border)] bg-[var(--status-failed-bg)] text-[var(--status-failed-text)]",toneClass:"text-[var(--status-failed-text)]"},done:{label:"Done",chipClass:"border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] text-[var(--status-in-progress-text)]",toneClass:"text-[var(--status-in-progress-text)]"}};function ex({onResize:e}){let{isTouchLayout:r}=(0,el.useInputCapabilities)();return r?null:(0,t.jsx)(ei.ResizeHandle,{onResize:e,className:"hidden xl:block",ariaLabel:"Resize objective chat panel"})}function eh(e){return new Date(e).toLocaleString([],{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function eb(){return{title:"",teamId:"",summary:""}}function ef(e){let{projects:t,isLoading:r,refetch:a,updateProject:o}=(0,y.useProjects)(),[n,i]=(0,s.useState)([]),l=(0,s.useMemo)(()=>t.find(t=>t.slug===e)??null,[e,t]),d=(0,s.useMemo)(()=>(0,em.readProjectObjectivesWorkspace)(l?.metadata),[l?.metadata]),c=(0,s.useCallback)(async e=>{if(!l)throw Error("Project not found.");await o(l.id,{metadata:(0,em.writeProjectObjectivesWorkspace)(l.metadata??{},e)})},[l,o]);return(0,s.useEffect)(()=>{let e=!0;return async function(){if(!l?.id)return i([]);try{let t=await fetch(`/api/projects/${l.id}/teams`);if(!t.ok)throw Error("Failed to fetch teams");let r=await t.json();if(!e)return;i((r.teams??[]).map(e=>({id:"string"==typeof e.id?e.id:"",name:"string"==typeof e.name?e.name:"Untitled team"})).filter(e=>e.id))}catch{if(!e)return;i([])}}(),()=>{e=!1}},[l?.id]),{isLoading:r,project:l,workspace:d,teams:n,persistWorkspace:c,refetchProject:a}}function ev(e){return"user"===e.role&&!e.rootMessageId}function eg({projectId:e,projectSlug:r,objective:o,teamName:l,trackerConnections:d,availableTrackers:c,defaultTrackerType:u,onThreadLinked:m,onObjectiveUpdated:p}){let[x,h]=(0,s.useState)(()=>(0,ec.loadObjectiveChatPanelWidth)()||800),[b,v]=(0,s.useState)(o.threadId??(o.id?`objective-chat:${o.id}`:null)),g=(0,a.useSearchParams)(),j=g?.get("session")??null,y=g?.get("message")??null,[A,T]=(0,s.useState)(j?"detail":"list"),[E,O]=(0,s.useState)(j),[M,P]=(0,s.useState)(y),[R,L]=(0,s.useState)(!1),[D,F]=(0,s.useState)(o.chatSessionVersion),[_,z]=(0,s.useState)([]),[U,q]=(0,s.useState)(null),J=(0,s.useRef)(!1),V=(0,s.useRef)(!1),W=(0,s.useRef)(null),H=(0,s.useRef)(null),[B,K]=(0,s.useState)(!1),G=window.location?.origin?window.location.origin:null,{messages:Y,setMessages:X,sendMessage:Q,loadHistory:Z,setChatRuns:ee,stop:et,chatRuns:er}=(0,k.useGroupChat)(b),{processes:ea,streaming:es,chatRuns:eo,poll:ei}=(0,w.useProcessPolling)(b?{workspaceId:b}:null,{messages:Y,setMessages:X});(0,s.useEffect)(()=>{o.threadId&&o.threadId!==b&&v(o.threadId)},[o.threadId,b]),(0,s.useEffect)(()=>{let e=W.current;if(!e)return;let t=()=>{K(e.scrollHeight-e.scrollTop-e.clientHeight>200)};return t(),e.addEventListener("scroll",t,{passive:!0}),()=>e.removeEventListener("scroll",t)},[A,E]);let el=(0,s.useCallback)(()=>{H.current?.scrollIntoView({behavior:"smooth"})},[]);(0,s.useEffect)(()=>{T("list"),O(null),L(!1),V.current=!1},[o.id]),(0,s.useEffect)(()=>{F(o.chatSessionVersion),o.chatSessionVersion>=em.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION&&(V.current=!0)},[o.chatSessionVersion]);let ep=(0,s.useCallback)(async t=>{let r=t.trim();if(r&&!(await fetch(`/api/projects/${e}/threads`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:r})})).ok)throw Error("Failed to link objective chat to the project.")},[e]);(0,s.useEffect)(()=>{let e=!1;return b?(L(!1),(async()=>{await Z(b),e||L(!0)})(),()=>{e=!0}):void L(!0)},[Z,b]),(0,s.useEffect)(()=>{let t=!1;return async function(){try{let r=o.teamId?`/api/projects/${e}/teams/${o.teamId}/agents`:`/api/projects/${e}/agents`,[a,s]=await Promise.all([fetch("/api/participants"),fetch(r)]),n=a.ok?await a.json():[],i=Array.isArray(n)?n:[],l=s.ok?await s.json():{agents:[]};if(t)return;let d=((l&&"object"==typeof l?l:{agents:[]}).agents??[]).slice().sort((e,t)=>e.routing_order-t.routing_order).map(e=>e.agent_id);if(0===d.length)return void z(i);let c=new Map(i.map(e=>[e.id,e]));z(d.map(e=>c.get(e)).filter(e=>!!e))}catch(e){if(t)return;console.error("Failed to load objective chat participants",e),z([])}}(),()=>{t=!0}},[e,o.teamId]),(0,s.useEffect)(()=>{o.threadId&&ep(o.threadId).catch(e=>{console.warn("Failed to re-link objective chat thread to project",e)})},[ep,o.threadId]),(0,s.useEffect)(()=>{if(!o.threadId||!b||!R||D>=em.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION||V.current)return;V.current=!0;let t=function(e){let t=e.filter(ev).sort((e,t)=>e.timestamp-t.timestamp);if(t.length<=1)return null;let r=t[0]?.id;if(!r)return null;let a=t.slice(1).map(e=>e.id),s=new Set(a);return{messages:[...e].map(e=>{let t=s.has(e.id)&&ev(e),a="string"==typeof e.rootMessageId&&s.has(e.rootMessageId);return t||a?{...e,rootMessageId:r,parentMessageId:r,depth:1}:e}).sort((e,t)=>e.timestamp-t.timestamp),primaryRootMessageId:r,mergedRootMessageIds:a}}(Y),r=!1;return(async()=>{q(null);try{if(t){if(!(await fetch("/api/history",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:b,messages:t.messages})})).ok)throw Error("Failed to migrate the objective chat history.");if(r)return;X(t.messages),O(e=>e&&t.mergedRootMessageIds.includes(e)?t.primaryRootMessageId:e)}if(!(await fetch(`/api/projects/${e}/objectives/${o.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({chatSessionVersion:em.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION})})).ok)throw Error("Failed to update the objective chat session version.");if(r)return;F(em.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION),p().catch(e=>{console.warn("Failed to refresh objective after objective chat migration",e)})}catch(e){if(r)return;console.warn("Failed to migrate legacy objective chat sessions",e),q(e instanceof Error?e.message:"Failed to migrate the objective chat history.")}})(),()=>{r=!0}},[D,R,Y,o.id,o.threadId,p,e,X,b]);let eb=(0,s.useCallback)(async()=>{if(o.threadId)return o.threadId;let t=b??(o.id?`objective-chat:${o.id}`:null);if(!t)return null;q(null);try{let a=await ed.threadService.createThread({id:t,title:o.title,metadata:{scope:"objective",objectiveId:o.id,projectId:e,projectSlug:r}});return v(a.id),await ep(a.id),await m(a.id),a.id}catch(e){return q(e instanceof Error?e.message:"Failed to create the objective chat."),null}},[ep,o.id,o.threadId,o.title,m,e,r,b]),ef=(0,s.useMemo)(()=>new Map(_.map(e=>[e.id,e])),[_]);(0,s.useEffect)(()=>{ee(e=>{let t=Date.now(),r=new Map(e.filter(e=>"string"==typeof e.chatRunId&&e.chatRunId.length>0).map(e=>[e.chatRunId,e]));for(let e of eo)e?.chatRunId&&r.set(e.chatRunId,e);return Array.from(r.values()).filter(e=>!!(!e.optimistic||eo.some(t=>t.chatRunId===e.chatRunId))||t-(e.enqueuedAt??0)<=5e3).sort((e,t)=>String(e.chatRunId||"").localeCompare(String(t.chatRunId||"")))})},[eo,ee]);let eg=(0,s.useMemo)(()=>{let e=Date.now(),t=new Map(eo.map(e=>[e.chatRunId,e]));for(let r of er)!(!r.optimistic||t.has(r.chatRunId))&&(e-(r.enqueuedAt??0)>5e3||t.set(r.chatRunId,r));return Array.from(t.values()).filter(e=>"queued"===e.status||"running"===e.status||"awaiting_user"===e.status||"blocked"===e.status)},[er,eo]),ej=(0,s.useMemo)(()=>Y.filter(ev).sort((e,t)=>t.timestamp-e.timestamp).map(e=>{let t,r=Y.filter(t=>t.rootMessageId===e.id).sort((e,t)=>e.timestamp-t.timestamp),a=[e,...r],s=a[a.length-1]??e;return{rootMessageId:e.id,title:(t=e.content.replace(/\s+/g," ").trim())?t.length>56?`${t.slice(0,56).trim()}...`:t:"Untitled session",updatedAt:s.timestamp,messageCount:a.length,messages:a}}),[Y]),ek=(0,s.useMemo)(()=>E?ej.find(e=>e.rootMessageId===E)??null:null,[E,ej]),ew="detail"===A&&!!E,eN=new Set(["queued","running","awaiting_user","blocked"]),eS=eg.length>0||ea.some(e=>"spawning"===e.state||"running"===e.state),eC=(0,s.useMemo)(()=>{let e=new Map;for(let t of eg){if(!t.rootMessageId||!eN.has(t.status))continue;let r="queued"===t.status?"queued":"working";"working"!==e.get(t.rootMessageId)&&e.set(t.rootMessageId,r)}for(let t of ea)t.threadId&&("spawning"===t.state||"running"===t.state)&&e.set(t.threadId,"working");return e},[eg,ea]),eI=(0,s.useMemo)(()=>ea.some(e=>"spawning"===e.state||"running"===e.state)||eg.some(e=>eN.has(e.status)&&"queued"!==e.status)?"working":eg.some(e=>"queued"===e.status)?"queued":"ready",[eg,eN,ea]);(0,s.useEffect)(()=>{J.current&&!eS&&p().catch(e=>{console.warn("Failed to refresh objective after objective chat activity",e)}),J.current=eS},[eS,p]),(0,s.useEffect)(()=>{E&&(0,eu.persistLastSessionForEntity)(o.id,E)},[o.id,E]),(0,s.useEffect)(()=>{j&&(O(j),T("detail"))},[j]),(0,s.useEffect)(()=>{y&&P(y)},[y]),(0,s.useEffect)(()=>{if(!M)return;let e=requestAnimationFrame(()=>{let e=document.querySelector(`[data-objective-message-id="${CSS.escape(M)}"]`);e&&e.scrollIntoView({behavior:"smooth",block:"center"})});return()=>cancelAnimationFrame(e)},[M,R,E]),(0,s.useEffect)(()=>{if(E||0===ej.length)return;let e=(0,eu.loadLastSessionForEntity)(o.id);e&&ej.some(t=>t.rootMessageId===e)&&O(e)},[o.id,E,ej,O]);let e$=(0,s.useCallback)(async e=>{await fetch(`/api/chat-runs/${encodeURIComponent(e)}/signal`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({signal:"cancel",reason:"Interrupted by a new objective chat message"})}).catch(e=>{console.warn("Failed to cancel objective chat run",e)})},[]),eA=(0,s.useCallback)(async()=>{let e=Array.from(new Set(eg.map(e=>e.chatRunId).filter(e=>!!e)));await Promise.all(e.map(e=>e$(e))),await et(),await ei()},[eg,e$,ei,et]),eT=(0,s.useCallback)(async(t,a,s,n,i,m,p)=>{var x;let h,b,f,v,g,j,y,k,w;eS&&await eA(),q(null);let N=await eb();if(!N)return;let S=_.map(e=>e.id),C=ew?E:null,I=[(x={available:c,configured:d.filter(e=>e.connected).map(e=>({type:e.type,displayName:e.displayName})),defaultType:u},h=`/api/projects/${e}/objectives/${o.id}`,b=G?`${G}${h}`:h,f=`${b}/scheduled-tasks`,v=`${b}/notes`,g=G?`${G}/api/trackers`:"/api/trackers",j=`~/.agx/projects/${r}/objectives/${o.key}.md`,y=`~/.agx/projects/${r}/objectives/${o.key}/notes/`,k=`${b}/validate`,w=o.notes?.length?o.notes.map(e=>`- **${e.title}**: ${e.body.slice(0,120)}${e.body.length>120?"...":""}`).join("\n"):null,["You are working inside a strategy session for this project objective.",`Project slug: ${r}`,`Objective: ${o.title}`,`Objective label: ${o.key}`,l?`Owning team: ${l}`:"",w?`Current notes:
|
|
2
|
+
${w}`:"Current notes: none yet.","Wake schedule: managed by the built-in objective worker job.",`## Objective file (source of truth)
|
|
3
|
+
|
|
4
|
+
This objective is stored as a frontmatter markdown file at:
|
|
5
|
+
\`${j}\`
|
|
6
|
+
|
|
7
|
+
File format:
|
|
8
|
+
- YAML frontmatter between \`---\` delimiters contains all metadata (title, teamId, key, status, progress, scheduledTaskIds, threadId, chatSessionVersion, createdAt, updatedAt).
|
|
9
|
+
- \`## Activities\` section contains the activity timeline; each activity is a \`### Title\` block with metadata lines (\`- **id:**\`, \`- **source:**\`, \`- **created:**\`, \`- **body:**\`) and optional \`#### Replies\` sub-section.
|
|
10
|
+
|
|
11
|
+
Notes are stored as separate files in \`${y}\`. Each note is a markdown file with YAML frontmatter (id, title, objectiveId, createdAt, updatedAt) and a markdown body.
|
|
12
|
+
|
|
13
|
+
When updating the objective, you can edit this file directly. Rules:
|
|
14
|
+
- NEVER remove or break the \`---\` frontmatter delimiters.
|
|
15
|
+
- NEVER change the \`id\` or \`createdAt\` fields.
|
|
16
|
+
- Always update \`updatedAt\` to the current ISO timestamp when making changes.
|
|
17
|
+
- After any edit, call \`GET ${k}\` to verify the file is still valid.
|
|
18
|
+
- If validation fails, fix the errors immediately before doing anything else.`,"Scheduled tasks live in the shared scheduled-task list and are filtered by this objective label.","Your job is to help the team develop the strategy needed to reach the goal, including the right combination of objective notes, scheduled tasks, and tracker tickets.","Use the current session history to build on prior reasoning. Only reset and start from scratch when the user explicitly starts a new session.","Use this thread to pressure-test strategy, suggest better tactics, rewrite the objective when asked, propose the right operational cadence, and take concrete follow-up actions when the user wants them applied.","When suggesting edits, prefer editing the frontmatter file directly or using the notes API. When the user asks you to make a change, edit the file, validate, then confirm.","Local objective APIs:",`- PATCH ${b} with JSON fields such as {"title","teamId","key"} to update the objective itself.`,`- GET ${v} to list all notes for this objective. Returns {"notes":[...],"total","page","limit","hasMore"}.`,`- POST ${v} with {"title","body"} to create a new note.`,`- GET ${v}/{noteId} to read a single note.`,`- PATCH ${v}/{noteId} with {"title","body"} to update a note.`,`- DELETE ${v}/{noteId} to delete a note.`,`- GET ${f} to inspect the scheduled tasks already tracked for this objective.`,`- POST ${f} with {"name","prompt","cadence","agentId"} to create a scheduled task for this objective.`,`- GET ${k} to validate the objective file on disk. Returns {"valid":true} or {"valid":false,"errors":[...]}.`,"Tracker integrations:",`- Available tracker types: ${x.available.length>0?x.available.map(e=>`${e.displayName} (${e.type})`).join(", "):"none registered"}.`,`- Configured for this project: ${x.configured.length>0?x.configured.map(e=>{let t=x.defaultType===e.type;return`${e.displayName} (${e.type})${t?" — default":""}`}).join(", "):"none — ask the user to connect a tracker in project settings if they want ticket workflows"}.`,x.defaultType?`- Default tracker for ticket workflows: ${x.defaultType}. Prefer this tracker when creating or referencing tickets for this objective unless the user asks otherwise.`:x.configured.length>1?"- No default tracker has been selected; ask the user which connected tracker to use before creating tickets.":"",...x.configured.map(t=>`- GET ${g}/${t.type}/items?projectId=${e} to list ${t.displayName} items. Filter client-side by label "${o.key}" to find tickets tied to this objective.`)].filter(Boolean).join("\n\n")),m].filter(Boolean).join("\n\n"),$=await Q(t,a,N,C,s,n,i?[i]:S,r,I,p);!C&&$&&(O($),T("detail"))},[G,eb,eS,eA,ew,o,_,e,r,E,Q,l]),eE=(0,s.useMemo)(()=>ew?ek?.messages??[]:[],[ew,ek]),eO=(0,s.useMemo)(()=>ew&&E?Object.entries(es).filter(([,e])=>e.rootMessageId===E):[],[ew,E,es]),eM=(0,s.useCallback)(e=>{h(t=>{let r=Math.max(320,Math.min(1200,t-e));return(0,ec.persistObjectiveChatPanelWidth)(r),r})},[]);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(ex,{onResize:eM}),(0,t.jsxs)("aside",{className:"relative flex h-full min-h-[420px] w-full flex-col overflow-hidden border-t border-[var(--border)] bg-[var(--overlay-panel)] xl:min-h-0 xl:w-[var(--objective-chat-panel-width)] xl:shrink-0 xl:self-stretch xl:border-l xl:border-t-0",style:{"--objective-chat-panel-width":`${x}px`},children:[(0,t.jsx)(ey,{message:U}),ew?(0,t.jsx)("div",{className:"border-b border-[var(--border)] px-4 py-4",children:(0,t.jsxs)("button",{type:"button",onClick:()=>T("list"),"aria-label":"Back to sessions",className:"inline-flex min-w-0 items-center gap-2 text-left text-sm font-medium text-[var(--foreground)] transition-colors hover:text-[var(--primary)]",children:[(0,t.jsx)(n.ArrowLeft,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{className:"truncate",children:ek?.title??"Loading session..."})]})}):(0,t.jsx)("div",{className:"border-b border-[var(--border)] px-4 py-4",children:(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)("p",{className:"text-xs font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]",children:"Strategy Sessions"}),(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:"Start a new strategy conversation below, or open an earlier session to keep building on it."})]})}),(0,t.jsx)("div",{ref:W,className:`min-h-0 flex-1 overflow-y-auto pb-[calc(15rem+env(safe-area-inset-bottom))] ${ew?"px-4 py-4":"px-0 py-0"}`,children:ew?0===eE.length?(0,t.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-2 px-4 text-center text-[var(--muted-foreground)]",children:[(0,t.jsx)("p",{className:"text-sm font-medium text-[var(--foreground)]",children:"Loading strategy session"}),(0,t.jsx)("p",{className:"max-w-sm text-xs",children:"The conversation will appear here once the session history is ready."})]}):(0,t.jsxs)("div",{className:"space-y-5",children:[eE.map(e=>{let r=e.participantId?ef.get(e.participantId):null,a=M===e.id;return(0,t.jsxs)("div",{"data-objective-message-id":e.id,className:`flex gap-3 rounded-2xl transition-colors ${a?"bg-[var(--status-in-progress-bg)] p-2 -m-2":""}`,children:["user"===e.role?(0,t.jsx)("div",{className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-[var(--overlay-panel-soft)] text-[var(--muted-foreground)]",children:(0,t.jsx)(f.User,{className:"h-4 w-4"})}):(0,t.jsx)("img",{src:(0,I.agentAvatarUrl)(e.participantId??"assistant",32,r?.color),alt:r?.name??"Agent",className:"h-8 w-8 shrink-0 rounded-full border border-[var(--border)] object-cover"}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-[var(--foreground)]",children:"user"===e.role?"You":r?.name??"Agent"}),(0,t.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:new Date(e.timestamp).toLocaleString([],{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})})]}),(0,t.jsx)("div",{className:"mt-2 rounded-2xl border border-[var(--border)] bg-[var(--overlay-panel-muted)] px-4 py-3 text-[15px] leading-relaxed text-[var(--foreground)]",children:"user"===e.role?(0,t.jsx)(S.Markdown,{content:(0,$.stripMarkers)(e.content),isUser:!0}):(0,t.jsx)(C.StreamingSegments,{content:(0,$.stripMarkers)(e.content)})})]})]},e.id)}),eO.map(([e])=>{let r=ef.get(e);return(0,t.jsxs)("div",{className:"flex items-center gap-3 text-sm text-[var(--muted-foreground)]",children:[(0,t.jsx)("img",{src:(0,I.agentAvatarUrl)(e,32,r?.color),alt:r?.name??"Agent",className:"h-8 w-8 shrink-0 rounded-full border border-[var(--border)] object-cover"}),(0,t.jsxs)("span",{children:[r?.name??"Agent"," is thinking..."]})]},`stream-${e}`)}),(0,t.jsx)("div",{ref:H})]}):0===ej.length?(0,t.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-2 px-4 text-center text-[var(--muted-foreground)]",children:[(0,t.jsx)("p",{className:"text-sm font-medium text-[var(--foreground)]",children:"No strategy sessions yet"}),(0,t.jsx)("p",{className:"max-w-sm text-xs",children:"Use the composer below to start the first conversation about how this objective should be reached."})]}):(0,t.jsx)("div",{className:"divide-y divide-[var(--border)]",children:ej.map(e=>{var r;let a=eC.get(e.rootMessageId)??null;return(0,t.jsxs)("button",{type:"button",onClick:()=>{O(e.rootMessageId),T("detail")},className:"flex w-full items-start justify-between gap-3 px-4 py-3 text-left transition-colors hover:bg-[var(--overlay-panel-soft)]",children:[(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("p",{className:"truncate text-sm font-medium text-[var(--foreground)]",children:e.title}),(0,t.jsxs)("p",{className:"mt-1 text-[11px] text-[var(--muted-foreground)]",children:[1===(r=e.messageCount)?"1 message":`${r} messages`," · Last"," ",eh(e.updatedAt)]})]}),(0,t.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:[a?(0,t.jsx)("span",{className:"rounded-full border border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--status-in-progress-text)]",children:"queued"===a?"Queued":"Working"}):null,(0,t.jsx)(i.ArrowRight,{className:"mt-0.5 h-4 w-4 text-[var(--muted-foreground)]"})]})]},e.rootMessageId)})})}),(0,t.jsx)(en.JumpToLatestButton,{visible:ew&&B&&eE.length>10,onClick:el,direction:"bottom",offsetClassName:"bottom-[calc(15rem+env(safe-area-inset-bottom))]"}),(0,t.jsx)("div",{className:"absolute bottom-0 left-0 right-0 bg-[var(--overlay-panel)] p-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))]",children:(0,t.jsx)(N.Composer,{onSend:eT,onStop:eA,participants:_,commands:[],projectId:e,projectSlug:r,loading:"ready"!==eI,activityStatus:eI,sendInterruptsBusy:!0,placeholder:ew?`Continue strategy for "${o.title}"...`:`Start a new strategy session for "${o.title}"...`,initialPinnedParticipantId:_[0]?.id})})]})]})}function ej({label:e}){return(0,t.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-[var(--muted-foreground)]",children:e})}function ey({message:e}){return e?(0,t.jsxs)("div",{className:"mt-3 flex items-center gap-2 rounded-2xl border border-rose-500/20 bg-rose-500/10 px-3 py-2 text-sm text-rose-100",children:[(0,t.jsx)(o.AlertTriangle,{className:"h-4 w-4"}),(0,t.jsx)("span",{children:e})]}):null}function ek({content:e,editable:r=!1,onChange:a,placeholder:s}){let o=e.trim().length>0;return r||o?(0,t.jsx)("div",{className:"overflow-hidden border-l-2 border-[var(--border)]/60 pl-4 transition-all focus-within:border-indigo-500/60",children:r||o?(0,t.jsx)(A.default,{content:e,editable:r,onChange:a,placeholder:s}):null}):null}function ew({onResize:e}){let{isTouchLayout:r}=(0,el.useInputCapabilities)();return r?null:(0,t.jsx)(ei.ResizeHandle,{onResize:e,ariaLabel:"Resize objective list panel"})}function eN({objective:e,activityCount:r,lastActivityAt:a,activeAgentIds:s,participants:o,isSelected:n,onSelect:i}){let l,d=(l=1===r?"1 activity":`${r} activities`,a?`${l} \xb7 Last ${eh(a)}`:`${l} \xb7 No activity yet`);return(0,t.jsx)("article",{className:"px-2",children:(0,t.jsxs)("button",{type:"button",onClick:i,"aria-label":`Open details for ${e.title}`,className:`group flex w-full items-center gap-3 rounded-xl px-2 py-2 text-left transition-colors ${n?"bg-[var(--primary)]/10 border border-[var(--primary)]/20":"border border-transparent hover:bg-[var(--secondary)]"}`,children:[(0,t.jsxs)("div",{className:"min-w-0 flex-1 py-0.5",children:[(0,t.jsx)("div",{className:"flex min-w-0 items-center gap-2",children:(0,t.jsx)("span",{className:`rounded-full border px-1.5 py-0 text-[9px] font-semibold uppercase tracking-[0.12em] ${ep[e.status].chipClass}`,children:ep[e.status].label})}),(0,t.jsx)("p",{className:"mt-1 truncate text-sm font-medium text-[var(--foreground)]",children:e.title}),(0,t.jsx)("p",{className:"mt-0.5 text-[11px] text-[var(--muted-foreground)]",children:d})]}),s&&s.length>0&&(0,t.jsx)("span",{className:"inline-flex items-center -space-x-1 shrink-0",children:s.slice(0,3).map(e=>{let r=o?.find(t=>t.id===e);return(0,t.jsxs)("span",{className:"relative inline-block",title:r?.name??e,children:[(0,t.jsx)("img",{src:(0,I.agentAvatarUrl)(e,16,r?.color??void 0),alt:r?.name??e,className:"h-3 w-3 rounded-full ring-[1.5px] ring-[var(--background)]"}),(0,t.jsx)("span",{className:"absolute -bottom-px -right-px h-1.5 w-1.5 rounded-full bg-green-500 ring-[1px] ring-[var(--background)]"})]},e)})})]})})}function eS({projectSlug:e,initialObjectiveId:r}){let{isLoading:a,project:o,workspace:n,teams:i,persistWorkspace:l}=ef(e),d=n.objectives,[c,u]=(0,s.useState)(r??null),[m,p]=(0,s.useState)(()=>(0,ec.loadObjectiveListPanelWidth)()||320),[h,b]=(0,s.useState)(null),[f,v]=(0,s.useState)(!1),[g,j]=(0,s.useState)(null),[y,k]=(0,s.useState)(new Map),[w,N]=(0,s.useState)([]);(0,s.useEffect)(()=>{!c&&d.length>0&&u(d[0].id)},[c,d]),(0,s.useEffect)(()=>{c&&d.length>0&&!d.some(e=>e.id===c)&&u(d[0]?.id??null)},[c,d]),(0,s.useEffect)(()=>{let e=!1;return async function(){try{let t=await fetch("/api/participants");t.ok&&!e&&N(await t.json())}catch{}}(),()=>{e=!0}},[]),(0,s.useEffect)(()=>{let e=new Map;for(let t of d)t.threadId&&e.set(t.threadId,t.id);if(0===e.size)return;let t=!1;async function r(){try{let r=Array.from(e.keys()).join(","),a=await fetch(`/api/chat-runs/active-agents?threadIds=${encodeURIComponent(r)}`);if(!a.ok||t)return;let s=await a.json(),o=new Map;for(let[t,r]of Object.entries(s.activeAgents??{})){let a=e.get(t);a&&Array.isArray(r)&&r.length>0&&o.set(a,r)}t||k(o)}catch{}}r();let a=setInterval(()=>void r(),5e3);return()=>{t=!0,clearInterval(a)}},[d]);let S=async()=>{if(!h)return;let e=h.title.trim();if(!e)return void j("Objective statement is required.");let t=h.teamId.trim();if(!t)return void j("Team is required.");let r=new Date().toISOString(),a=(0,em.createProjectObjective)({title:e,teamId:t,key:(0,em.generateProjectObjectiveKey)(e,n.objectives),summary:h.summary,now:r});v(!0),j(null);try{await l((0,em.upsertProjectObjective)(n,a));try{await fetch(`/api/projects/${o?.id}/objectives/${a.id}/worker`,{method:"POST",headers:{"Content-Type":"application/json"}})}catch{}b(null),u(a.id)}catch(e){j(e instanceof Error?e.message:"Failed to save objective updates.")}finally{v(!1)}},C=(0,s.useCallback)(e=>{p(t=>{let r=Math.max(240,Math.min(480,t+e));return(0,ec.persistObjectiveListPanelWidth)(r),r})},[]);return a&&!o?(0,t.jsx)(ej,{label:"Loading objectives..."}):o?(0,t.jsxs)("div",{className:"flex h-full min-h-0 overflow-hidden bg-[var(--background)] text-[var(--foreground)]",children:[(0,t.jsxs)("div",{className:"flex flex-shrink-0 flex-col border-r border-[var(--border)] bg-[var(--background)]",style:{width:m},children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-4 py-3",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("p",{className:"text-xs font-semibold uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Objectives"}),(0,t.jsx)("p",{className:"mt-0.5 text-[11px] text-[var(--muted-foreground)]",children:0===d.length?"None yet":`${d.length} total`})]}),(0,t.jsx)("button",{type:"button",onClick:()=>b(eb()),className:"inline-flex h-7 w-7 items-center justify-center rounded-lg text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]","aria-label":"New objective",children:(0,t.jsx)(x.Plus,{className:"h-4 w-4"})})]}),(0,t.jsx)(ey,{message:g}),(0,t.jsx)("div",{className:"flex-1 overflow-y-auto py-1",children:0===d.length?(0,t.jsxs)("div",{className:"px-4 py-8 text-center",children:[(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"No objectives yet."}),(0,t.jsx)("button",{type:"button",onClick:()=>b(eb()),className:"mt-2 text-sm text-[var(--primary)] hover:underline",children:"Create one"})]}):(0,t.jsx)("div",{className:"space-y-0.5",children:d.map(e=>{let r=(0,em.buildObjectiveTimelineActivities)({objective:e,workspace:n});return(0,t.jsx)(eN,{objective:e,activityCount:r.length,lastActivityAt:r[0]?.createdAt??null,activeAgentIds:y.get(e.id),participants:w,isSelected:c===e.id,onSelect:()=>u(e.id)},e.id)})})})]}),(0,t.jsx)(ew,{onResize:C}),(0,t.jsx)("div",{className:"flex-1 min-w-0 min-h-0 overflow-hidden",children:c?(0,t.jsx)(eC,{projectSlug:e,objectiveId:c,onObjectiveDeleted:()=>u(null)}):(0,t.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-[var(--muted-foreground)]",children:0===d.length?"Create an objective to get started.":"Select an objective from the list."})}),h?(0,t.jsx)(e$,{mode:"create",draft:h,teams:i,isSaving:f,onChange:b,onClose:()=>b(null),onSave:()=>void S()}):null]}):(0,t.jsx)(ej,{label:"Project not found."})}function eC({projectSlug:e,objectiveId:o,onObjectiveDeleted:n}){var i;let l,f,y,k,w,N,C,I,$,A=(0,a.useRouter)(),{isLoading:E,project:O,workspace:M,teams:P,persistWorkspace:L,refetchProject:D}=ef(e),F=(0,s.useMemo)(()=>M.objectives.find(e=>e.id===o)??null,[o,M.objectives]),_=F?(i=F.teamId,P.find(e=>e.id===i)?.name??null):null,[U,q]=(0,s.useState)(null),[J,V]=(0,s.useState)(null),[W,H]=(0,s.useState)("activity"),[B,G]=(0,s.useState)(0),[Y,X]=(0,s.useState)(!1),[Q,Z]=(0,s.useState)(null),[ee,et]=(0,s.useState)([]),[er,ea]=(0,s.useState)(!1),[ei,el]=(0,s.useState)(null),[ed,ec]=(0,s.useState)({}),[eu,ex]=(0,s.useState)({}),[eb,ev]=(0,s.useState)(new Set),[ew,eN]=(0,s.useState)(!1),[eS,eC]=(0,s.useState)(""),[e$,eA]=(0,s.useState)([]),[eT,eE]=(0,s.useState)([]),[eO,eM]=(0,s.useState)([]),[eP,eR]=(0,s.useState)(null),[eL,eD]=(0,s.useState)(!1),eF=(0,s.useRef)(null),[e_,ez]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let e=eF.current;if(!e)return;let t=()=>ez(e.scrollTop>400);return e.addEventListener("scroll",t,{passive:!0}),()=>e.removeEventListener("scroll",t)},[o]);let eU=(0,s.useCallback)(()=>{eF.current?.scrollTo({top:0,behavior:"smooth"})},[]),{jobs:eq}=(0,R.usePromptJobs)(O?.id??null,{requireProjectId:!0,includeObjectiveJobs:!0,objectiveId:o}),eJ=(0,s.useMemo)(()=>eq.filter(e=>e.objectiveId===o).length,[eq,o]),eV=async e=>{X(!0),Z(null);try{await L(e)}catch(e){throw Z(e instanceof Error?e.message:"Failed to save objective updates."),e}finally{X(!1)}},eW=async()=>{if(!U||!F)return;let e=U.title.trim();if(!e)return void Z("Objective statement is required.");let t={...F,title:e,updatedAt:new Date().toISOString()};await eV((0,em.upsertProjectObjective)(M,t)),q(null)},eH=(0,s.useCallback)(async()=>{if(O?.id&&F?.id){ea(!0);try{let e=await fetch(`/api/projects/${O.id}/objectives/${F.id}/notes?limit=100`);if(e.ok){let t=await e.json();et(t.notes??[])}}catch{}finally{ea(!1)}}},[O?.id,F?.id]);(0,s.useEffect)(()=>{eH()},[eH]),(0,s.useEffect)(()=>{"notes"===W&&eH()},[W,eH]),(0,s.useEffect)(()=>{if(!O?.id||!F?.id)return;let e=new Set;for(let[t,r]of Object.entries(ed)){let a=ee.find(e=>e.id===t);a&&a.body!==r&&e.add(t)}for(let[t,r]of Object.entries(eu)){let a=ee.find(e=>e.id===t);a&&a.title!==r&&e.add(t)}if(0===e.size)return;let t=[];for(let r of e){let e={},a=ed[r],s=eu[r],o=ee.find(e=>e.id===r);if(!o||(void 0!==a&&a!==o.body&&(e.body=a),void 0!==s&&s!==o.title&&s.trim()&&(e.title=s.trim()),0===Object.keys(e).length))continue;let n=window.setTimeout(async()=>{ev(e=>new Set(e).add(r));try{let t=await fetch(`/api/projects/${O.id}/objectives/${F.id}/notes/${r}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(t.ok){let e=await t.json();et(t=>t.map(t=>t.id===r?e.note:t))}}catch{Z("Failed to save note.")}finally{ev(e=>{let t=new Set(e);return t.delete(r),t})}},700);t.push(n)}return()=>{for(let e of t)window.clearTimeout(e)}},[ed,eu,ee,O?.id,F?.id]);let eB=async()=>{if(O?.id&&F?.id){eN(!0);try{let e=await fetch(`/api/projects/${O.id}/objectives/${F.id}/notes`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:"Untitled",body:""})});if(e.ok){let t=await e.json();et(e=>[t.note,...e]),el(t.note.id)}}catch{Z("Failed to create note.")}finally{eN(!1)}}},eK=async e=>{if(O?.id&&F?.id)try{let t=await fetch(`/api/projects/${O.id}/objectives/${F.id}/notes/${e}`,{method:"DELETE"});(t.ok||204===t.status)&&(et(t=>t.filter(t=>t.id!==e)),ei===e&&el(null))}catch{Z("Failed to delete note.")}},eG=async()=>{!F||window.confirm(`Delete "${F.title}"?`)&&(await eV((0,em.removeProjectObjective)(M,F.id)),n?n():A.push(`/projects/${e}`))},eY=(0,s.useCallback)(async e=>{F&&F.threadId!==e&&await eV((0,em.upsertProjectObjective)(M,{...F,threadId:e,updatedAt:new Date().toISOString()}))},[F,eV,M]),eX=(0,s.useCallback)(async e=>{if(!O?.id||!F?.id)return Z("Objective not found."),!1;Z(null);try{let t=await fetch(`/api/projects/${O.id}/objectives/${F.id}/scheduled-tasks`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,prompt:function(e,t){let r=t.trim();if(!r)return r;let a=`Objective label: ${e.key}`;return r.toLowerCase().includes(a.toLowerCase())?r:[a,`Write your output as an activity file at ~/.agx/projects/<project>/objectives/${e.key}/activities/<timestamp>-<slug>.md
|
|
19
|
+
The file must have YAML frontmatter with: id (unique), source (your task ID), objectiveLabel: "${e.key}", createdAt (ISO), type (one of: metric-check, status-update, milestone, note).
|
|
20
|
+
The markdown body below the frontmatter contains your output.`,r].join("\n\n")}(F,e.prompt)})}),r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r.error||"Failed to create scheduled task.");return await D(),!0}catch(e){return Z(e instanceof Error?e.message:"Failed to create scheduled task."),!1}},[F,O?.id,D]),eQ=(0,s.useCallback)(async()=>{if(!O?.id||!F?.id)return Z("Objective not found."),!1;if(!F.teamId)return Z("Assign a team to this objective before creating a worker."),!1;Z(null);try{let e=await fetch(`/api/projects/${O.id}/objectives/${F.id}/worker`,{method:"PUT"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Failed to trigger objective worker.");return await D(),!0}catch(e){return Z(e instanceof Error?e.message:"Failed to trigger objective worker."),!1}},[F,O?.id,D]);return((0,s.useEffect)(()=>{if(!O?.id||!F?.id||!F?.key){eA([]),eE([]),eM([]);return}let e=O.id,t=F.key,r=!1;return async function(){try{let a=await fetch(`/api/trackers/connections?projectId=${encodeURIComponent(e)}`);if(!a.ok){r||(eA([]),eE([]),eM([]));return}let s=await a.json();if(r)return;let o=Array.isArray(s.available)?s.available:[],n=(s.connections??[]).map(e=>({type:e.type,displayName:o.find(t=>t.type===e.type)?.displayName??e.type,connected:!1!==e.connected})),i="string"==typeof s.defaultTracker&&s.defaultTracker?s.defaultTracker:null;eM(o),eE(n),eR(i);let l=n.filter(e=>e.connected),d=i&&l.some(e=>e.type===i)?l.filter(e=>e.type===i):l;if(0===d.length)return void eA([]);let c=t.trim().toLowerCase(),u=await Promise.all(d.map(async t=>{try{let r=await fetch(`/api/trackers/${encodeURIComponent(t.type)}/items?projectId=${encodeURIComponent(e)}&limit=500`);if(!r.ok)return[];let a=await r.json();return(Array.isArray(a.items)?a.items:[]).filter(e=>(e.labels??[]).some(e=>e.trim().toLowerCase()===c)).map(e=>({id:e.id,trackerType:e.trackerType??t.type,identifier:e.identifier,title:e.title,url:e.url??null,status:e.status,assignee:e.assignee?.name??null,updatedAt:e.updatedAt,labels:e.labels}))}catch{return[]}}));if(r)return;eA(u.flat())}catch(e){if(r)return;console.warn("Failed to load objective tracker resources",e),eA([]),eE([]),eM([])}}(),()=>{r=!0}},[F?.id,F?.key,O?.id]),E&&!O)?(0,t.jsx)(ej,{label:"Loading objective..."}):O?F?(0,t.jsx)("div",{className:"flex h-full min-h-0 flex-col bg-[radial-gradient(circle_at_top_left,rgba(59,130,246,0.1),transparent_28%),var(--background)] text-[var(--foreground)]",children:(0,t.jsx)("div",{className:"flex-1 min-h-0 overflow-hidden",children:(0,t.jsxs)("div",{className:"flex h-full min-h-0 flex-col xl:flex-row",children:[(0,t.jsxs)("div",{className:"relative min-h-0 flex-1 flex flex-col",children:[(0,t.jsx)("div",{ref:eF,className:"min-h-0 flex-1 overflow-y-auto",children:(0,t.jsxs)("div",{className:"max-w-5xl mx-auto pt-16 px-8 pb-20",children:[(0,t.jsx)(ey,{message:Q}),(0,t.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,t.jsx)("span",{className:"rounded-full border border-[var(--tone-neutral-border)] bg-[var(--tone-neutral-bg)] px-2.5 py-0.5 text-[10px] font-mono uppercase tracking-wider text-[var(--tone-neutral)]",children:F.key}),(0,t.jsx)("span",{className:`rounded-full border px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-[0.18em] ${ep[F.status].chipClass}`,children:ep[F.status].label})]}),(0,t.jsx)("div",{className:"mb-6",children:U?(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{autoFocus:!0,value:U.title,onChange:e=>q({...U,title:e.target.value}),onKeyDown:e=>{"Enter"===e.key&&eW(),"Escape"===e.key&&q(null)},className:"flex-1 border-b-2 border-[var(--primary)] bg-transparent px-0 py-1 text-[28px] font-semibold leading-tight text-[var(--foreground)] outline-none",placeholder:"Objective statement"}),(0,t.jsx)("button",{type:"button",onClick:()=>void eW(),disabled:Y,className:"rounded-md p-1.5 text-[var(--primary)] transition-colors hover:bg-[var(--status-in-progress-bg)]","aria-label":"Save objective",children:(0,t.jsx)(c.Check,{size:18})}),(0,t.jsx)("button",{type:"button",onClick:()=>q(null),className:"rounded-md p-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)]","aria-label":"Cancel editing",children:(0,t.jsx)(j.X,{size:18})})]}):(0,t.jsxs)("button",{type:"button","aria-label":`Edit objective ${F.title}`,className:"flex items-center gap-3 group cursor-pointer text-left",onClick:()=>q({id:F.id,title:F.title,teamId:F.teamId,summary:F.summary}),children:[(0,t.jsx)("h1",{className:"text-[28px] leading-tight font-semibold text-[var(--foreground)]",children:F.title}),(0,t.jsx)(p.Pencil,{size:16,className:"shrink-0 text-[var(--muted-foreground)] opacity-0 transition-opacity group-hover:opacity-100"})]})}),(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-x-6 gap-y-3 mb-10",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)("span",{className:"flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:[(0,t.jsx)(v.Users,{size:12})," Team"]}),(0,t.jsx)("span",{className:"text-[var(--app-shell-soft-text)]",children:"·"}),J?(0,t.jsx)("div",{className:"min-w-[180px]",children:(0,t.jsx)(T.default,{options:P.map(e=>({id:e.id,label:e.name})),value:J.teamId,onChange:e=>{V({teamId:e});let t=e.trim();t&&F&&(eV((0,em.upsertProjectObjective)(M,{...F,teamId:t,updatedAt:new Date().toISOString()})),V(null))},placeholder:"Select a team…"})}):(0,t.jsxs)("button",{type:"button","aria-label":`Edit team for ${F.title}`,onClick:()=>V({teamId:F.teamId}),className:"group -mx-1.5 -my-0.5 flex items-center gap-2 rounded px-1.5 py-0.5 transition-colors hover:bg-[var(--muted)]",children:[(0,t.jsx)("div",{className:"w-5 h-5 rounded-full bg-blue-500/20 text-blue-400 flex items-center justify-center text-[10px] font-bold border border-blue-500/30",children:(_??"?").charAt(0).toUpperCase()}),(0,t.jsx)("span",{className:"text-sm text-[var(--foreground)] transition-colors group-hover:text-[var(--primary)]",children:_??"Not assigned"})]})]}),O.id&&F.id?(0,t.jsx)(es,{projectId:O.id,objectiveId:F.id,objectiveKey:F.key,metadata:O.metadata,currentProgress:F.progress,currentStatus:F.status,objectiveUpdatedAt:F.updatedAt}):null]}),(0,t.jsx)("div",{className:"mb-6",children:(0,t.jsxs)("button",{type:"button",onClick:async()=>{eD(!0),await eQ(),eD(!1)},disabled:eL,className:"inline-flex items-center gap-2 rounded-xl border border-[var(--status-completed-border)] bg-[var(--status-completed-bg)] px-3 py-2 text-sm text-[var(--status-completed-text)] transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50",children:[(0,t.jsx)(g.Sparkles,{className:"h-4 w-4"}),eL?"Working...":"Work on objective"]})}),(0,t.jsx)("div",{className:"mb-8 border-b border-[var(--border)]",children:(0,t.jsx)("nav",{className:"flex gap-1 -mb-px","aria-label":"Objective sections",children:[{id:"activity",label:"Activity",icon:u.Clock},{id:"notes",label:"Notes",icon:m.FileText},{id:"tasks",label:"Tasks",icon:e=>{let r=eT.filter(e=>e.connected),a=(eP&&r.some(e=>e.type===eP)?eP:r[0]?.type)??"tracker";return(0,t.jsx)(eo.TrackerIcon,{trackerType:a,className:"h-3.5 w-3.5"})}},{id:"scheduled-tasks",label:"Scheduled Jobs",icon:d}].map(e=>{let r,a;return(0,t.jsxs)("button",{type:"button",onClick:()=>H(e.id),className:`flex items-center gap-2 px-3 py-2.5 text-sm font-medium border-b-2 transition-colors ${W===e.id?"border-[var(--primary)] text-[var(--foreground)]":"border-transparent text-[var(--muted-foreground)] hover:border-[var(--border)] hover:text-[var(--foreground)]"}`,children:[(0,t.jsx)(e.icon,{size:14}),e.label,"activity"===e.id&&B>0&&(0,t.jsx)("span",{className:"rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]",children:B}),"notes"===e.id&&ee.length>0&&(0,t.jsx)("span",{className:"rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]",children:ee.length}),"tasks"===e.id&&(r=["done","canceled","cancelled","completed","duplicate"],(a=e$.filter((e,t,a)=>a.findIndex(t=>t.id===e.id)===t&&!r.includes(e.status.toLowerCase()))).length>0?(0,t.jsx)("span",{className:"rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]",children:a.length}):null),"scheduled-tasks"===e.id&&eJ>0&&(0,t.jsx)("span",{className:"rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]",children:eJ})]},e.id)})})}),(0,t.jsxs)("div",{className:"space-y-10",children:["notes"===W&&(0,t.jsxs)("section",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex gap-2 items-center",children:[(0,t.jsxs)("div",{className:"relative flex-1",children:[(0,t.jsx)(h.Search,{size:14,className:"absolute left-3 top-1/2 -translate-y-1/2 text-[var(--muted-foreground)]"}),(0,t.jsx)("input",{type:"text",value:eS,onChange:e=>eC(e.target.value),placeholder:"Search notes...",className:"w-full rounded-md border border-[var(--border)] bg-[var(--input)] py-1.5 pl-8 pr-3 text-sm text-[var(--foreground)] placeholder:text-[var(--app-shell-soft-text)] focus:border-[var(--primary)] focus:outline-none"})]}),(0,t.jsxs)("button",{type:"button",onClick:eB,disabled:ew,className:"flex items-center gap-1.5 rounded-md border border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] px-3 py-1.5 text-sm font-medium text-[var(--status-in-progress-text)] transition-opacity hover:opacity-90 disabled:opacity-50",children:[(0,t.jsx)(x.Plus,{size:14}),"New note"]})]}),er?(0,t.jsx)("p",{className:"py-4 text-sm text-[var(--muted-foreground)]",children:"Loading notes..."}):0===ee.length?(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)] py-4",children:"No notes yet. Add one above."}):0===(f=(l=eS.toLowerCase())?ee.filter(e=>e.title.toLowerCase().includes(l)||e.body.toLowerCase().includes(l)):ee).length?(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)] py-4",children:"No notes match your search."}):(0,t.jsx)("div",{className:"columns-1 gap-3 sm:columns-2 lg:columns-3",style:{columnFill:"balance"},children:f.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>el(e.id),className:"mb-3 block w-full break-inside-avoid overflow-hidden rounded-lg border border-[var(--border)] bg-[var(--overlay-panel-muted)] text-left transition-shadow hover:shadow-md",children:[(0,t.jsx)("div",{className:"px-3 pt-3 pb-1",children:(0,t.jsx)("h4",{className:"text-sm font-medium text-[var(--foreground)] leading-snug",children:e.title})}),e.body.trim()&&(0,t.jsx)("div",{className:"px-3 pb-2 text-xs text-[var(--muted-foreground)] line-clamp-4",children:(0,t.jsx)(S.Markdown,{content:e.body})}),(0,t.jsx)("div",{className:"flex items-center justify-between px-3 pb-2",children:(0,t.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:new Date(e.updatedAt).toLocaleDateString()})})]},e.id))}),ei&&(()=>{let e=ee.find(e=>e.id===ei);if(!e)return null;let r=ed[e.id]??e.body,a=eu[e.id]??e.title,s=eb.has(e.id);return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-start justify-center bg-black/50 pt-[5vh]",onClick:e=>{e.target===e.currentTarget&&el(null)},children:(0,t.jsxs)("div",{className:"mx-6 w-full max-w-7xl rounded-xl border border-[var(--border)] bg-[var(--background)] shadow-xl",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-5 py-3",children:[(0,t.jsx)("input",{type:"text",autoFocus:!0,value:a,onFocus:e=>{"Untitled"===a&&e.target.select()},onChange:t=>ex(r=>({...r,[e.id]:t.target.value})),className:"flex-1 bg-transparent text-base font-semibold text-[var(--foreground)] focus:outline-none"}),(0,t.jsxs)("div",{className:"flex items-center gap-2 ml-3",children:[(0,t.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:s?"Saving...":new Date(e.updatedAt).toLocaleDateString()}),(0,t.jsx)("button",{type:"button",onClick:()=>eK(e.id),className:"p-1 text-[var(--muted-foreground)] transition-colors hover:text-[var(--destructive)]",children:(0,t.jsx)(b.Trash2,{size:14})}),(0,t.jsx)("button",{type:"button",onClick:()=>el(null),className:"p-1 text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",children:(0,t.jsx)(j.X,{size:14})})]})]}),(0,t.jsx)("div",{className:"max-h-[75vh] overflow-y-auto px-5 py-4",children:(0,t.jsx)(ek,{content:r,editable:!0,onChange:t=>ec(r=>({...r,[e.id]:t})),placeholder:"Write your note..."})})]})})})()]}),"activity"===W&&O.id&&F.id&&(0,t.jsx)(K,{projectId:O.id,objectiveId:F.id,onTotalChange:G}),"tasks"===W&&(y=e$.filter((e,t,r)=>r.findIndex(t=>t.id===e.id)===t),k=["done","canceled","cancelled","completed","duplicate"],w=y.filter(e=>!k.includes(e.status.toLowerCase())),N=y.filter(e=>k.includes(e.status.toLowerCase())).slice(-5),C=eT.filter(e=>e.connected),$=0===(I=eP&&C.some(e=>e.type===eP)?C.filter(e=>e.type===eP):C).length?null:I.map(e=>e.displayName).join(", "),(0,t.jsxs)("section",{children:[(0,t.jsx)("div",{className:"flex flex-wrap items-start justify-between gap-3 mb-4",children:(0,t.jsxs)("p",{className:"text-sm text-[var(--muted-foreground)]",children:["Tickets tracked by the objective label"," ",(0,t.jsx)("code",{className:"rounded bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[11px] text-[var(--foreground)]",children:F.key}),$?(0,t.jsxs)(t.Fragment,{children:[" across ",$,"."]}):"."]})}),0===I.length?(0,t.jsx)(eI,{label:0===eO.length?"No tracker integrations registered.":`Connect a tracker (${eO.map(e=>e.displayName).join(", ")}) to create and track tickets for this objective.`}):0===y.length?(0,t.jsx)(eI,{label:`No tracker tickets with label ${F.key} yet.`}):(0,t.jsxs)(t.Fragment,{children:[w.length>0&&(0,t.jsx)("div",{className:"space-y-3",children:w.map(r=>(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--border)] bg-[var(--overlay-panel-muted)] p-4",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]",children:[(0,t.jsx)(eo.TrackerIcon,{trackerType:r.trackerType,className:"h-3 w-3"}),(0,t.jsx)("span",{children:r.identifier})]}),(0,t.jsx)("a",{href:r.url??`/projects/${e}/tracking/${r.trackerType}?issue=${r.id}`,target:r.url?"_blank":void 0,rel:r.url?"noreferrer":void 0,className:"mt-1 block text-sm font-medium text-[var(--foreground)] transition-colors hover:text-[var(--primary)]",children:r.title})]}),(0,t.jsx)("span",{className:"rounded-full border border-[var(--tone-neutral-border)] px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--tone-neutral)]",children:r.status})]}),(0,t.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-2 text-[11px] text-[var(--muted-foreground)]",children:[(0,t.jsxs)("span",{children:["Updated ",eh(r.updatedAt)]}),(0,t.jsx)("span",{children:r.assignee?`Assigned to ${r.assignee}`:"Unassigned"})]})]},r.id))}),N.length>0&&(0,t.jsxs)("div",{className:w.length>0?"mt-6":"",children:[(0,t.jsx)("p",{className:"text-[11px] font-medium uppercase tracking-[0.18em] text-[var(--muted-foreground)] mb-2",children:"Completed"}),(0,t.jsx)("div",{className:"space-y-0.5",children:N.map(r=>(0,t.jsxs)("a",{href:r.url??`/projects/${e}/tracking/${r.trackerType}?issue=${r.id}`,target:r.url?"_blank":void 0,rel:r.url?"noreferrer":void 0,className:"group flex items-center gap-3 rounded-md px-2 py-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)] hover:text-[var(--foreground)]",children:[(0,t.jsx)(eo.TrackerIcon,{trackerType:r.trackerType,className:"h-3 w-3 shrink-0"}),(0,t.jsx)("span",{className:"text-[11px] font-mono shrink-0",children:r.identifier}),(0,t.jsx)("span",{className:"text-[12px] truncate",children:r.title}),(0,t.jsx)("span",{className:"ml-auto shrink-0 text-[10px] text-[var(--app-shell-soft-text)] group-hover:text-[var(--muted-foreground)]",children:r.status})]},r.id))})]})]})]})),"scheduled-tasks"===W&&(0,t.jsx)("section",{children:(0,t.jsx)(z,{projectId:O.id,objectiveId:F.id,objectiveKey:F.key,createDefaults:{name:`Work on ${F.title}`},onCreateTask:eX})}),(0,t.jsxs)("section",{className:"pt-10",children:[(0,t.jsx)("div",{className:"mb-4",children:(0,t.jsx)("h2",{className:"text-sm font-semibold text-[var(--destructive)]",children:"Danger Zone"})}),(0,t.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-[var(--destructive-border)] bg-[var(--destructive-bg)] p-5",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-[var(--foreground)]",children:"Delete Objective"}),(0,t.jsx)("p",{className:"mt-1 text-sm text-[var(--muted-foreground)]",children:"Once you delete an objective, there is no going back."})]}),(0,t.jsxs)("button",{type:"button",onClick:()=>void eG(),"aria-label":`Delete objective ${F.title}`,className:"flex items-center gap-2 whitespace-nowrap rounded-md border border-[var(--destructive-border)] bg-[var(--destructive-bg)] px-3 py-1.5 text-sm font-medium text-[var(--destructive)] transition-opacity hover:opacity-90",children:[(0,t.jsx)(b.Trash2,{size:14})," Delete"]})]})]})]})]})}),(0,t.jsx)(en.JumpToLatestButton,{visible:e_,direction:"top",onClick:eU})]}),(0,t.jsx)(eg,{projectId:O.id,projectSlug:e,objective:F,teamName:_,trackerConnections:eT,availableTrackers:eO,defaultTrackerType:eP,onThreadLinked:eY,onObjectiveUpdated:D})]})})}):(0,t.jsx)("div",{className:"flex h-full items-center justify-center px-4 bg-[var(--background)]",children:(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--border)] bg-[var(--card-bg)] p-8 text-center",children:[(0,t.jsx)("p",{className:"text-lg font-semibold text-[var(--foreground)]",children:"Objective not found"}),(0,t.jsx)("p",{className:"mt-2 text-sm text-[var(--muted-foreground)]",children:"It may have been deleted or the link is stale."}),(0,t.jsx)(r.default,{href:`/projects/${e}`,className:"mt-4 inline-flex items-center gap-2 rounded-md border border-[var(--border)] bg-[var(--card-bg)] px-3 py-1.5 text-sm text-[var(--foreground)] transition-colors hover:bg-[var(--secondary)]",children:"Back to objectives"})]})}):(0,t.jsx)(ej,{label:"Project not found."})}function eI({label:e}){return(0,t.jsx)("div",{className:"flex items-center rounded-xl border border-dashed border-[var(--border)] bg-[var(--overlay-panel-muted)] p-6",children:(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:e})})}function e$({mode:e,draft:r,teams:a=[],isSaving:s,onChange:o,onClose:n,onSave:i}){return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/45 p-4",children:(0,t.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"edit"===e?"Edit objective":"New objective",className:"w-full max-w-3xl overflow-hidden rounded-[32px] border border-[var(--border)] bg-[var(--overlay-panel-strong)] shadow-2xl",children:[(0,t.jsxs)("div",{className:"border-b border-[var(--border)] px-5 py-4",children:[(0,t.jsx)("h3",{className:"text-lg font-semibold text-[var(--foreground)]",children:"edit"===e?"Edit objective":"New objective"}),(0,t.jsx)("p",{className:"mt-1 text-sm text-[var(--muted-foreground)]",children:"edit"===e?"Update the tracking details for this objective.":"Keep the statement measurable and use notes only for context that matters."})]}),(0,t.jsxs)("div",{className:"space-y-4 px-5 py-5",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(eA,{label:"Objective statement"}),(0,t.jsx)("input",{value:r.title,onChange:e=>o({...r,title:e.target.value}),className:"w-full rounded-2xl border border-[var(--border)] bg-[var(--input)] px-4 py-3 text-sm text-[var(--foreground)] outline-none transition-colors focus:border-[var(--primary)]",placeholder:"Get 50 qualified visitors daily"})]}),"create"===e?(0,t.jsxs)("div",{children:[(0,t.jsx)(eA,{label:"Team"}),(0,t.jsxs)("select",{value:r.teamId,onChange:e=>o({...r,teamId:e.target.value}),className:"w-full rounded-2xl border border-[var(--border)] bg-[var(--input)] px-3 py-3 text-sm text-[var(--foreground)] outline-none transition-colors focus:border-[var(--primary)]",children:[(0,t.jsx)("option",{value:"",children:"Select a team"}),a.map(e=>(0,t.jsx)("option",{value:e.id,children:e.name},e.id))]}),(0,t.jsx)("p",{className:"mt-2 text-xs text-[var(--muted-foreground)]",children:"Teams can only own one objective at a time."})]}):null]}),(0,t.jsxs)("div",{className:"flex items-center justify-end gap-2 border-t border-[var(--border)] px-5 py-4",children:[(0,t.jsx)("button",{type:"button",onClick:n,className:"rounded-xl border border-[var(--border)] px-3 py-2 text-sm text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",children:"Cancel"}),(0,t.jsx)("button",{type:"button",onClick:i,disabled:s,className:"rounded-xl border border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] px-3 py-2 text-sm font-medium text-[var(--status-in-progress-text)] transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50",children:s?"Saving...":"edit"===e?"Save objective":"Create objective"})]})]})})}function eA({label:e}){return(0,t.jsx)("label",{className:"mb-2 block text-[11px] font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]",children:e})}e.s(["ProjectObjectivesOverview",()=>eS],568656)}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,169729,e=>{"use strict";let t=(0,e.i(363732).default)("panel-left-open",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m14 9 3 3-3 3",key:"8010ee"}]]);e.s(["PanelLeftOpen",()=>t],169729)},468947,e=>{"use strict";let t=(0,e.i(363732).default)("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);e.s(["Sun",()=>t],468947)},721571,e=>{"use strict";let t=(0,e.i(363732).default)("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]);e.s(["Moon",()=>t],721571)},524780,e=>{"use strict";var t=e.i(762281),r=e.i(935851),a=e.i(307241),s=e.i(810605);function i(){let[e,i]=(0,r.useState)("unknown"),[l,o]=(0,r.useState)([]),[n,d]=(0,r.useState)(""),[c,u]=(0,r.useState)(!1),p=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/status");if(!e.ok)return void i("unknown");let t=await e.json();i("ok"===t.status?"ok":"degraded");let r=t.services.filter(e=>"agx-chat"===e.name||"agx-cloud"===e.name);o(r),d(new Date().toLocaleTimeString())}catch{i("unknown"),o([])}},[]);return(0,r.useEffect)(()=>{p();let e=setInterval(p,s.UI_POLL_SYSTEM_STATUS_MS);return()=>clearInterval(e)},[p]),(0,t.jsxs)("div",{className:"relative",onMouseEnter:()=>u(!0),onMouseLeave:()=>u(!1),children:[(0,t.jsx)(a.default,{href:"/status",className:"inline-flex h-8 w-8 items-center justify-center rounded-md border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] transition-all hover:bg-[var(--app-shell-subtle)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--ring)]",title:"System status",children:(0,t.jsx)("span",{className:`h-2.5 w-2.5 rounded-full ${"ok"===e?"bg-emerald-400":"degraded"===e?"bg-amber-400":"bg-[var(--app-shell-muted)]"} ${"degraded"===e?"animate-pulse":""}`})}),c&&(0,t.jsxs)("div",{className:"absolute top-full right-0 z-50 mt-1.5 w-52 rounded-lg border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] p-3 text-xs shadow-lg",children:[l.length>0?(0,t.jsx)("ul",{className:"space-y-1.5",children:l.map(e=>(0,t.jsxs)("li",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"font-medium text-[var(--foreground)]",children:e.name}),(0,t.jsx)("span",{className:"ok"===e.status?"text-emerald-600":"error"===e.status?"text-red-500":"text-[var(--muted-foreground)]",children:"ok"===e.status?"Healthy":"error"===e.status?e.detail||"Error":"Unavailable"})]},e.name))}):(0,t.jsx)("p",{className:"text-[var(--app-shell-soft-text)]",children:"Checking..."}),n&&(0,t.jsxs)("p",{className:"mt-2 border-t border-[var(--app-shell-border)] pt-1.5 text-[var(--app-shell-soft-text)]",children:["Last check: ",n]})]})]})}e.s(["StatusIndicator",()=>i])},749410,e=>{"use strict";var t=e.i(762281),r=e.i(935851),a=e.i(866389),s=e.i(498027),i=e.i(997626),l=e.i(55236),o=e.i(196630),n=e.i(363732);let d=(0,n.default)("panel-left-close",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m16 15-3-3 3-3",key:"14y99z"}]]);var c=e.i(929870),u=e.i(8707),p=e.i(797167),m=e.i(938201),h=e.i(202641),x=e.i(572665);let f=(0,n.default)("house",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]]);var v=e.i(597628),b=e.i(99296);let g=(0,n.default)("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]),j=(0,n.default)("circle-arrow-up",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16 12-4-4-4 4",key:"177agl"}],["path",{d:"M12 16V8",key:"1sbj14"}]]),k=(0,n.default)("git-pull-request",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21",key:"rroup"}]]);var w=e.i(307241),y=e.i(44054),N=e.i(810605),_=e.i(884564),S=e.i(535208),C=e.i(902572),I=e.i(958164),$=e.i(367859);let z=(0,n.default)("book",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20",key:"k3hazp"}]]),T=(0,n.default)("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);var F=e.i(681619);let E={linear:"Linear",jira:"Jira",intercom:"Intercom",freshdesk:"Freshdesk",github:"GitHub"};function A(e){return E[e]??e.charAt(0).toUpperCase()+e.slice(1)}function M({projectSlug:e,trackerConnections:a,activeTrackerType:s,isTrackingActive:i,onLinkClick:l}){let o=[...a].sort((e,t)=>new Date(e.connectedAt).getTime()-new Date(t.connectedAt).getTime()),n=o.filter(e=>e.connected),d=o.filter(e=>!e.connected),u=n.some(e=>"github"===e.type),[p,m]=(0,r.useState)([]),[h,x]=(0,r.useState)(!0);return(0,r.useEffect)(()=>{if(!u)return void m([]);let e=!1;return fetch("/api/github/repos",{cache:"no-store"}).then(e=>e.ok?e.json():{repos:[]}).then(t=>{e||m(t.repos??[])}).catch(()=>{e||m([])}),()=>{e=!0}},[u]),(0,t.jsxs)(t.Fragment,{children:[0===n.length&&0===d.length&&(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:(0,t.jsxs)(w.default,{href:`/projects/${e}/tracking/connect`,onClick:l,className:`workspace-sidebar__nav-item ${i?"workspace-sidebar__nav-item--active":""}`,children:[(0,t.jsx)(c.Plus,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm text-[var(--muted-foreground)]",children:"Connect Tracker"})]})}),n.map(r=>{let a=i&&s===r.type;return(0,t.jsxs)("div",{className:"workspace-sidebar__workspace-item",children:[(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsxs)(w.default,{href:`/projects/${e}/tracking/${r.type}`,onClick:l,className:`workspace-sidebar__nav-item flex-1 ${a?"workspace-sidebar__nav-item--active":""}`,"aria-current":a?"page":void 0,children:[(0,t.jsx)(F.TrackerIcon,{trackerType:r.type,className:"flex-shrink-0 h-3.5 w-3.5 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm",children:A(r.type)})]}),"github"===r.type&&p.length>0&&(0,t.jsx)("button",{type:"button","aria-label":h?"Collapse GitHub repos":"Expand GitHub repos","aria-expanded":h,onClick:()=>x(e=>!e),className:"p-1 rounded hover:bg-[var(--item-hover-bg)] text-[var(--muted-foreground)]",children:(0,t.jsx)($.ChevronRight,{size:12,className:`transition-transform ${h?"rotate-90":""}`})})]}),"github"===r.type&&h&&p.length>0&&(0,t.jsx)("div",{className:"flex flex-col gap-0.5 mt-0.5 pl-5",children:p.map(r=>(0,t.jsxs)(w.default,{href:`/projects/${e}/tracking/github?repo=${encodeURIComponent(r.id)}`,onClick:l,className:"workspace-sidebar__nav-item",title:r.id,children:[r.private?(0,t.jsx)(T,{size:12,className:"flex-shrink-0 text-[var(--muted-foreground)]"}):(0,t.jsx)(z,{size:12,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-xs text-[var(--muted-foreground)] truncate",children:r.name})]},r.id))})]},r.type)}),d.map(r=>(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:(0,t.jsxs)(w.default,{href:`/projects/${e}/tracking/${r.type}`,onClick:l,className:"workspace-sidebar__nav-item",children:[(0,t.jsx)(F.TrackerIcon,{trackerType:r.type,className:"flex-shrink-0 h-3.5 w-3.5 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm",children:A(r.type)}),(0,t.jsx)("span",{className:"ml-auto shrink-0",title:"Connection issue — click to reconnect",children:(0,t.jsx)(I.AlertTriangle,{size:12,className:"text-yellow-500"})})]})},r.type)),(n.length>0||d.length>0)&&(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:(0,t.jsxs)(w.default,{href:`/projects/${e}/tracking/connect`,onClick:l,className:"workspace-sidebar__nav-item",children:[(0,t.jsx)(c.Plus,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm text-[var(--muted-foreground)]",children:"Connect"})]})})]})}var P=e.i(594643),L=e.i(235136);function R({compact:e=!1}){return(0,t.jsxs)("span",{className:`workspace-sidebar__brand-logo${e?" workspace-sidebar__brand-logo--compact":""}`,"aria-hidden":"true",children:[(0,t.jsx)("img",{src:"/logo_dark.png",alt:"AGX",className:"block dark:hidden",style:{height:28}}),(0,t.jsx)("img",{src:"/logo_light.png",alt:"AGX",className:"hidden dark:block",style:{height:28}})]})}function V({label:e,children:s}){let i=(0,r.useRef)(null),[l,o]=(0,r.useState)(null);return(0,t.jsxs)("div",{ref:i,onMouseEnter:()=>{let e=i.current?.firstElementChild??i.current;if(!e)return;let t=e.getBoundingClientRect();o({top:t.top+t.height/2,left:t.right+8})},onMouseLeave:()=>o(null),style:{display:"contents"},children:[s,l&&(0,a.createPortal)((0,t.jsx)("div",{className:"workspace-sidebar__rail-tooltip",style:{top:l.top,left:l.left,transform:"translateY(-50%)"},children:e}),document.body)]})}function U({projects:e,activeProjectId:a,onSelectProject:i,onCreateProject:o}){let[n,d]=(0,r.useState)(!1),[m,h]=(0,r.useState)(""),x=(0,r.useRef)(null),f=(0,r.useRef)(null),v=e.find(e=>e.id===a)??e[0],b=m.trim()?e.filter(e=>e.name.toLowerCase().includes(m.toLowerCase())):e;return(0,r.useEffect)(()=>{if(!n)return;let e=e=>{x.current&&!x.current.contains(e.target)&&(d(!1),h(""))};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[n]),(0,r.useEffect)(()=>{n&&f.current&&f.current.focus()},[n]),(0,t.jsxs)("div",{className:"relative px-3 pt-3 pb-2",ref:x,children:[(0,t.jsxs)("button",{type:"button",onClick:()=>d(!n),className:"flex w-full items-center gap-2 rounded-lg border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] px-2.5 py-2 text-sm text-[var(--foreground)] transition-all hover:border-[var(--app-shell-border-strong)]",children:[(0,t.jsx)(l.Folder,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"flex-1 truncate text-left font-medium",children:v?.name??"Select project"}),(0,t.jsx)(s.ChevronDown,{size:14,className:`flex-shrink-0 text-[var(--muted-foreground)] transition-transform ${n?"rotate-180":""}`})]}),n&&(0,t.jsxs)("div",{className:"absolute left-3 right-3 z-50 mt-1 rounded-lg border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] shadow-lg overflow-hidden",children:[(0,t.jsx)("div",{className:"p-2 border-b border-[var(--app-shell-border)]",children:(0,t.jsxs)("div",{className:"flex items-center gap-2 rounded-md border border-[var(--app-shell-border)] bg-[var(--app-shell-subtle)] px-2 py-1.5",children:[(0,t.jsx)(u.Search,{size:12,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("input",{ref:f,type:"text",value:m,onChange:e=>h(e.target.value),placeholder:"Search projects...",className:"flex-1 bg-transparent text-xs text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] outline-none"}),m&&(0,t.jsx)("button",{type:"button",onClick:()=>h(""),className:"text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:(0,t.jsx)(p.X,{size:10})})]})}),(0,t.jsxs)("div",{className:"max-h-52 overflow-y-auto py-1",children:[b.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>{i?.(e.id),d(!1),h("")},className:`flex w-full items-center gap-2 px-3 py-1.5 text-sm transition-colors hover:bg-[var(--app-shell-subtle)] ${e.id===v?.id?"text-[var(--foreground)] font-medium":"text-[var(--muted-foreground)]"}`,children:[(0,t.jsx)(l.Folder,{size:12,className:"flex-shrink-0"}),(0,t.jsx)("span",{className:"truncate",children:e.name})]},e.id)),0===b.length&&(0,t.jsx)("p",{className:"px-3 py-2 text-xs text-[var(--muted-foreground)]",children:"No projects found"})]}),(0,t.jsx)("div",{className:"border-t border-[var(--app-shell-border)] p-1",children:(0,t.jsxs)("button",{type:"button",onClick:()=>{d(!1),h(""),o()},className:"flex w-full items-center gap-2 rounded-md px-2.5 py-1.5 text-xs text-[var(--muted-foreground)] transition-colors hover:bg-[var(--app-shell-subtle)] hover:text-[var(--foreground)]",children:[(0,t.jsx)(c.Plus,{size:12}),(0,t.jsx)("span",{children:"New project"})]})})]})]})}function B({threads:e,participants:s=[],activeThreadId:l,isLoading:n,isCreating:u,onSelectThread:I,onCreateThread:$,onRenameThread:z,onDeleteThread:T,deletingThreadId:F=null,renamingThreadId:E=null,activeParticipantIds:A=[],onToggleParticipantActive:B,visible:D=!1,isRestoringActiveThread:O=!1,onToggle:q,onSearch:H,projects:K=[],onCreateProject:W,onUpdateProject:G,onDeleteProject:J,onAddAgentToProject:X,onRemoveAgentFromProject:Y,onAddAgentViaForm:Z,onReorderProjectAgents:Q,onUpdateParticipant:ee,onSelectProject:et,activeProjectId:er=null,activeProjectView:ea=null,width:es,onWidthChange:ei,onAddTeam:el,stageShow:eo,trackerConnections:en=[]}){let ed,ec,{isTouchLayout:eu,isPhone:ep}=(0,y.useInputCapabilities)(),{updateAvailable:em}=function(){let[e,t]=(0,r.useState)({updateAvailable:!1,latestVersion:null});return(0,r.useEffect)(()=>{async function e(){try{let e=await fetch("/api/update-check");if(!e.ok)return;let r=await e.json(),a=r?.updateAvailable===!0,s="string"==typeof r?.latestVersion?r.latestVersion:null;t({updateAvailable:a,latestVersion:s})}catch{}}e();let r=setInterval(()=>{e()},N.UI_POLL_UPDATE_CHECK_MS);return()=>clearInterval(r)},[]),e}(),eh=(0,r.useRef)(!1);(0,r.useRef)(0);let ex=(0,r.useRef)(null),[ef,ev]=(0,r.useState)(!1),[eb,eg]=(0,r.useState)(new Set);(0,r.useEffect)(()=>{if(eb.size>0||!K?.length)return;let e=K.find(e=>window.location.pathname.includes(`/projects/${e.slug}`));eg(new Set([e?.id??K[0].id]))},[K]);let[ej,ek]=(0,r.useState)(null),[ew,ey]=(0,r.useState)(new Set),[eN,e_]=(0,r.useState)(!1),[eS,eC]=(0,r.useState)(null),[eI,e$]=(0,r.useState)(null),ez=(0,S.useProjectFormState)(),[eT,eF]=(0,r.useState)(null),eE=(0,r.useCallback)(e=>{e&&(e.focus(),e.select())},[]),[eA,eM]=(0,r.useState)(null),[eP,eL]=(0,r.useState)(null),eR=eP?s.find(e=>e.id===eP)??null:null,[eV,eU]=(0,r.useState)(null),[eB,eD]=(0,r.useState)({});(0,r.useEffect)(()=>{if(!K?.length)return;let e=!1,t=async()=>{try{let t=await fetch("/api/processes?enrich=1");if(!t.ok||e)return;let r=await t.json();if(e)return;let a=r.filter(e=>"spawning"===e.state||"running"===e.state),i={};for(let e of K){let t=e.slug.trim().toLowerCase(),r=new Set((e.thread_ids??[]).map(e=>e.trim()).filter(Boolean)),l=[],o=[],n=[],d=new Set,c=new Set,u=new Set;for(let e of a){let a=e.projectSlug?.trim().toLowerCase();if(!(a&&a===t||r.has(e.workspaceId)||r.has(e.threadId)))continue;let i=s.find(t=>t.id===e.agentId),p={agentId:e.agentId,color:i?.color??"#10b981"};e.linearIssueId?c.has(e.agentId)||(c.add(e.agentId),o.push(p)):e.threadId?.startsWith("objective-chat:")||e.workspaceId?.startsWith("objective-chat:")?d.has(e.agentId)||(d.add(e.agentId),l.push(p)):u.has(e.agentId)||(u.add(e.agentId),n.push(p))}(l.length||o.length||n.length)&&(i[e.id]={objectives:l,linear:o,chat:n})}eD(i)}catch{}};t();let r=setInterval(t,3e3);return()=>{e=!0,clearInterval(r)}},[K,s]);let[eO,eq]=(0,r.useState)({}),[eH,eK]=(0,r.useState)(new Set),[eW,eG]=(0,r.useState)(new Set),eJ=(0,r.useRef)(new Set);(0,r.useEffect)(()=>{Array.from(eb).forEach(e=>{eW.has(e)||(eG(t=>new Set(t).add(e)),(async()=>{try{let t=await fetch(`/api/projects/${e}/teams`);if(!t.ok)return;let r=await t.json();eq(t=>({...t,[e]:r.teams??[]}))}catch{}})())})},[eb,eW]);let[eX,eY]=(0,r.useState)(null),eZ=async()=>{if(!eS&&!eI)return;if(!ez.form.name.trim())return void ez.setFormError("Project name is required");let e=ez.repos.find(e=>e.name.trim()&&!e.path.trim());if(e)return void ez.setFormError(`Local path is required for folder "${e.name}"`);ez.setFormError(null),ez.setIsSubmitting(!0);let t=(0,S.createProjectPayload)(ez.form,ez.repos);eI?await G?.(eI.id,t):await W?.(t,eS?.threadId),ez.setIsSubmitting(!1),eC(null),e$(null)};(0,r.useEffect)(()=>{ev(!0)},[]),(0,r.useEffect)(()=>{let e=!1;async function t(){if(eV?.repoId)try{let t=await fetch(`/api/knowledge-notes?scope=repo&subjectId=${encodeURIComponent(eV.repoId)}`),r=(t.ok?await t.json():{note:null}).note;e||eU(e=>e&&e.repoId===eV.repoId?{...e,generatedKnowledge:r?.content?[{id:r.id,content:r.content,created_at:r.updatedAt??r.createdAt}]:[],isLoadingKnowledge:!1}:e)}catch{e||eU(e=>e&&e.repoId===eV.repoId?{...e,generatedKnowledge:[],isLoadingKnowledge:!1}:e)}}return eV?.repoId&&t(),()=>{e=!0}},[eV?.repoId]);let eQ=ej?K.find(e=>e.id===ej.projectId):null,e0=new Set(eQ?.agents.map(e=>e.agent_id)??[]),e1=ej?s.filter(e=>!e0.has(e.id)):[],e2=e.length>0,e3=!!D,e5=(0,r.useCallback)(()=>{eu&&q?.()},[eu,q]),e4=[...e].sort((e,t)=>(e.title??"").localeCompare(t.title??"")),e6=new Map(e.map(e=>[e.id,e])),e8=K.filter(e=>!e.is_default),e7=e8.find(e=>e.id===er)??e8[0]??null,{connections:e9}=(0,L.useTrackerConnections)(e7?.id??null),te=eo??{home:!0,threads:!0,terminal:!0,objectives:!1,objectivesIsNew:!1,tracking:!1,teams:!1,folders:!1,scheduledTasks:!1,envVars:!1,notifications:!1};if((0,r.useEffect)(()=>{if(0===e8.length)return;let t=new Map,r=new Set,a=new Map;for(let e of e8){for(let t of e.thread_ids??[])"string"==typeof t&&t.trim()&&r.add(t);for(let r of(0,C.readProjectObjectivesWorkspace)(e.metadata).objectives){let a=r.id.trim();a&&t.set(a,{projectId:e.id,canonicalThreadId:r.threadId?.trim()||`objective-chat:${a}`})}}for(let t of e){let e=t.metadata&&"object"==typeof t.metadata?t.metadata:null,r="objective"===("string"==typeof e?.scope?e.scope:"")||t.id.startsWith("objective-chat:"),s=t.title?.trim().toLowerCase()??"";if(!r||!s)continue;let i=a.get(s)??[];i.push(t),a.set(s,i)}for(let[e,t]of a)a.set(e,[...t].sort((e,t)=>t.updatedAt-e.updatedAt));for(let s of e){let e=s.metadata&&"object"==typeof s.metadata?s.metadata:null,i="string"==typeof e?.scope?e.scope:"",l="string"==typeof e?.objectiveId?e.objectiveId.trim():"",o=s.id.startsWith("objective-chat:")?s.id.slice(15).trim():"",n=l||o,d="objective"===i||!!o,c=s.title?.trim().toLowerCase()??"",u=0===s.messages.length&&s.updatedAt<Date.now()-3e5;if(!d)continue;let p=n?t.get(n):void 0;if(p){if(s.id!==p.canonicalThreadId&&u){let e=`delete:${s.id}`;if(eJ.current.has(e))continue;eJ.current.add(e),Promise.resolve(T(s.id)).catch(t=>{eJ.current.delete(e),console.warn("Failed to delete legacy objective thread",t)});continue}if(!r.has(s.id)){let e=`link:${s.id}`;if(eJ.current.has(e))continue;eJ.current.add(e),fetch(`/api/projects/${p.projectId}/threads`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:s.id})}).then(e=>{if(!e.ok)throw Error(`Request failed with status ${e.status}`)}).catch(t=>{eJ.current.delete(e),console.warn("Failed to re-link objective thread",t)})}continue}if(!u)continue;let m=c?a.get(c)??[]:[];if(m.length<2||m[0]?.id===s.id)continue;let h=`delete:${s.id}`;eJ.current.has(h)||(eJ.current.add(h),Promise.resolve(T(s.id)).catch(e=>{eJ.current.delete(h),console.warn("Failed to delete orphan objective thread",e)}))}},[e8,T,e]),!function({focusTarget:e,shouldFocus:t}){(0,r.useEffect)(()=>{if(!t||"u"<typeof document)return;let r=e.current;if(!r||r instanceof HTMLButtonElement&&r.disabled)return;let a=document.activeElement;if(!(a&&(r===a||r.contains(a))))try{r.focus({preventScroll:!0})}catch{r.focus()}},[e,t])}({focusTarget:ex,shouldFocus:e3&&!(n&&!e2||O&&e2)&&!e2&&!u}),!e3){if(eu)return null;let r=e7?.slug;return(0,t.jsxs)("aside",{id:"workspace-sidebar",className:"workspace-sidebar workspace-sidebar--collapsed","aria-label":"Workspace sidebar",children:[(0,t.jsx)("div",{className:"workspace-sidebar__brand",children:(0,t.jsx)("button",{type:"button",onClick:q,className:"workspace-sidebar__brand-trigger border-none outline-none cursor-pointer","aria-label":"Show chats",title:"Show chats",children:(0,t.jsx)(R,{compact:!0})})}),r&&(0,t.jsxs)("nav",{className:"workspace-sidebar__collapsed-rail",children:[(0,t.jsx)(V,{label:"Home",children:(0,t.jsx)(w.default,{href:`/projects/${r}`,className:`workspace-sidebar__rail-icon${"home"===ea?" workspace-sidebar__rail-icon--active":""}`,children:(0,t.jsx)(f,{size:16})})}),(te.objectives||te.tracking||te.scheduledTasks)&&(0,t.jsx)("div",{className:"workspace-sidebar__rail-separator"}),te.objectives&&(0,t.jsx)(V,{label:"Objectives",children:(0,t.jsx)(w.default,{href:`/projects/${r}/objectives`,className:`workspace-sidebar__rail-icon${"objectives"===ea?" workspace-sidebar__rail-icon--active":""}`,children:(0,t.jsx)(m.Target,{size:16})})}),te.tracking&&(0,t.jsx)(V,{label:"Task Tracking",children:(0,t.jsx)(w.default,{href:`/projects/${r}/tracking`,className:`workspace-sidebar__rail-icon${"linear"===ea||"tracking"===ea?" workspace-sidebar__rail-icon--active":""}`,children:(0,t.jsx)(P.LinearIcon,{className:"h-4 w-4"})})}),te.tracking&&(0,t.jsx)(V,{label:"Pull Requests",children:(0,t.jsx)(w.default,{href:`/projects/${r}/prs`,className:"workspace-sidebar__rail-icon",children:(0,t.jsx)(k,{size:16})})}),te.scheduledTasks&&(0,t.jsx)(V,{label:"Scheduled Jobs",children:(0,t.jsx)(w.default,{href:`/projects/${r}/automations`,className:`workspace-sidebar__rail-icon${"automations"===ea?" workspace-sidebar__rail-icon--active":""}`,children:(0,t.jsx)(i.Zap,{size:16})})}),(0,t.jsx)("div",{className:"workspace-sidebar__rail-separator"}),(0,t.jsx)(V,{label:"Terminal",children:(0,t.jsx)(w.default,{href:`/projects/${r}/terminal`,className:`workspace-sidebar__rail-icon${"terminal"===ea?" workspace-sidebar__rail-icon--active":""}`,children:(0,t.jsx)(b.TerminalSquare,{size:16})})}),(0,t.jsx)(V,{label:"Chat",children:(0,t.jsx)("button",{type:"button",className:`workspace-sidebar__rail-icon${"thread"===ea?" workspace-sidebar__rail-icon--active":""}`,onClick:()=>{let t=e4.filter(e=>e7?.thread_ids?.includes(e.id)),r=e7?.thread_ids?.find(t=>e.some(e=>e.id===t))??t[0]?.id;r&&I(r)},children:(0,t.jsx)(v.MessageSquare,{size:16})})}),(te.teams||te.folders||te.envVars||te.notifications)&&(0,t.jsx)("div",{className:"workspace-sidebar__rail-separator"}),te.teams&&(0,t.jsx)(V,{label:"Teams",children:(0,t.jsx)(w.default,{href:`/projects/${r}/teams`,className:`workspace-sidebar__rail-icon${"teams"===ea?" workspace-sidebar__rail-icon--active":""}`,children:(0,t.jsx)(x.Users,{size:16})})}),te.folders&&(0,t.jsx)(V,{label:"Folders",children:(0,t.jsx)(w.default,{href:`/projects/${r}/folders`,className:`workspace-sidebar__rail-icon${"folders"===ea?" workspace-sidebar__rail-icon--active":""}`,children:(0,t.jsx)(o.FolderGit2,{size:16})})}),te.envVars&&(0,t.jsx)(V,{label:"Env Variables",children:(0,t.jsx)(w.default,{href:`/projects/${r}/env-vars`,className:`workspace-sidebar__rail-icon${"env-vars"===ea?" workspace-sidebar__rail-icon--active":""}`,children:(0,t.jsx)(g,{size:16})})}),te.notifications&&(0,t.jsx)(V,{label:"Notifications",children:(0,t.jsx)(w.default,{href:`/projects/${r}/notifications`,className:`workspace-sidebar__rail-icon${"notifications"===ea?" workspace-sidebar__rail-icon--active":""}`,children:(0,t.jsx)(h.Bell,{size:16})})})]}),(0,t.jsxs)("div",{className:"mt-auto p-2 flex flex-col gap-2",children:[em&&r&&(0,t.jsx)(V,{label:"Update available",children:(0,t.jsx)(w.default,{href:`/projects/${r}/terminal?cmd=${encodeURIComponent("agx update && agx chat start")}`,className:"workspace-sidebar__rail-icon",children:(0,t.jsx)(j,{size:16})})}),(0,t.jsx)(V,{label:"Join Discord",children:(0,t.jsx)("a",{href:"https://discord.gg/G9afUYKKY3",target:"_blank",rel:"noopener noreferrer",className:"workspace-sidebar__rail-icon",style:{backgroundColor:"#5865F2",color:"white"},onMouseEnter:e=>e.currentTarget.style.backgroundColor="#4752C4",onMouseLeave:e=>e.currentTarget.style.backgroundColor="#5865F2",children:(0,t.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 71 55",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M60.1 4.9A58.5 58.5 0 0045.4.2a.2.2 0 00-.2.1 40.8 40.8 0 00-1.8 3.7 54 54 0 00-16.2 0A37.4 37.4 0 0025.4.3a.2.2 0 00-.2-.1A58.4 58.4 0 0010.5 4.9a.2.2 0 00-.1.1C1.5 18.7-.9 32.2.3 45.5v.1a58.8 58.8 0 0017.7 9a.2.2 0 00.3-.1 42 42 0 003.6-5.9.2.2 0 00-.1-.3 38.8 38.8 0 01-5.5-2.6.2.2 0 01 0-.4l1.1-.9a.2.2 0 01.2 0 42 42 0 0035.6 0 .2.2 0 01.2 0l1.1.9a.2.2 0 010 .4 36.4 36.4 0 01-5.5 2.6.2.2 0 00-.1.3 47.2 47.2 0 003.6 5.9.2.2 0 00.3.1 58.6 58.6 0 0017.7-9v-.1c1.4-15.2-2.4-28.4-10-40.1a.2.2 0 00-.1-.1zM23.7 37.3c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7zm23.3 0c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7z"})})})})]})]})}return(0,t.jsxs)(t.Fragment,{children:[eu?(0,t.jsx)("button",{type:"button",className:"workspace-sidebar__backdrop",onClick:q,"aria-label":"Close sidebar"}):null,(0,t.jsxs)("aside",{id:"workspace-sidebar",className:`workspace-sidebar${eu?" workspace-sidebar--drawer":""}${eu&&ep?" workspace-sidebar--drawer-phone":""}`,"aria-label":"Workspace sidebar","aria-busy":n?"true":void 0,"aria-modal":eu?"true":void 0,role:eu?"dialog":void 0,style:!eu&&es?{width:`${es}px`,minWidth:`${es}px`}:void 0,children:[(0,t.jsxs)("div",{className:"workspace-sidebar__brand",children:[(0,t.jsx)("div",{className:"workspace-sidebar__brand-content",children:(0,t.jsx)(R,{})}),q&&(0,t.jsx)("button",{type:"button",onClick:q,"aria-label":"Hide chats",title:"Hide chats",className:"workspace-sidebar__brand-toggle ml-auto inline-flex h-7 w-7 items-center justify-center rounded-md text-[var(--app-shell-soft-text)] transition-all hover:bg-[var(--app-shell-subtle)] hover:text-[var(--foreground)]",children:(0,t.jsx)(d,{className:"h-4 w-4",strokeWidth:1.75})})]}),(0,t.jsxs)("div",{className:"workspace-sidebar__content",children:[(0,t.jsx)(U,{projects:e8,activeProjectId:er,onSelectProject:e=>{et?.(e),e5()},onCreateProject:()=>{ez.resetForm(),e$(null),eC({})}}),(()=>{if(!e7)return null;let e=e4.filter(e=>e7.thread_ids?.includes(e.id)),r=e7.thread_ids?.find(e=>e6.has(e))??e7.thread_ids?.[0]??e[0]?.id??null,a=e7.id===er,n=a&&"home"===ea,d=a&&"objectives"===ea,c=window.location.pathname.match(/\/tracking\/([^/]+)/)?.[1]??null,u=a&&"automations"===ea,p=a&&"terminal"===ea,j=a&&"thread"===ea&&r===l,k=a&&"teams"===ea,y=a&&"folders"===ea,N=a&&"env-vars"===ea,S=a&&"notifications"===ea,C=eB[e7.id],$=te.objectives||te.scheduledTasks,z=te.teams||te.folders||te.envVars||te.notifications;return(0,t.jsxs)("nav",{className:"workspace-sidebar__section",children:[(0,t.jsx)("div",{className:"px-2 mt-2 mb-3",children:(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:(0,t.jsxs)(w.default,{href:`/projects/${e7.slug}`,onClick:e5,className:`workspace-sidebar__nav-item ${n?"workspace-sidebar__nav-item--active":""}`,"aria-current":n?"page":void 0,children:[(0,t.jsx)(f,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm",children:"Home"})]})})}),$&&(0,t.jsxs)("div",{className:"mb-3",children:[(0,t.jsx)("div",{className:"workspace-sidebar__section-header",children:(0,t.jsx)("p",{className:"workspace-sidebar__section-label",children:"Automation"})}),(0,t.jsxs)("div",{className:"px-2 flex flex-col gap-0.5",children:[te.objectives&&(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:(0,t.jsxs)(w.default,{href:`/projects/${e7.slug}/objectives`,onClick:e5,className:`workspace-sidebar__nav-item ${d?"workspace-sidebar__nav-item--active":""}`,"aria-current":d?"page":void 0,children:[(0,t.jsx)(m.Target,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm",children:"Objectives"}),te.objectivesIsNew&&(0,t.jsx)("span",{className:"ml-auto inline-flex items-center rounded-full bg-indigo-500/15 px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-wider text-indigo-500 animate-pulse",children:"NEW"}),!te.objectivesIsNew&&C?.objectives.length>0&&(0,t.jsx)("span",{className:"inline-flex items-center -space-x-1 ml-auto shrink-0",children:C.objectives.slice(0,3).map(e=>{let r=s.find(t=>t.id===e.agentId);return(0,t.jsxs)("span",{className:"relative inline-block",title:r?.name,children:[(0,t.jsx)("img",{src:(0,_.agentAvatarUrl)(r?.id??e.agentId,16,e.color),alt:r?.name??"",className:"h-3.5 w-3.5 rounded-full ring-[1.5px] ring-[var(--app-shell-pane)]"}),(0,t.jsx)("span",{className:"absolute -bottom-px -right-px h-1.5 w-1.5 rounded-full bg-green-500 ring-[1px] ring-[var(--app-shell-pane)]"})]},e.agentId)})})]})}),te.scheduledTasks&&(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:(0,t.jsxs)(w.default,{href:`/projects/${e7.slug}/automations`,onClick:e5,className:`workspace-sidebar__nav-item ${u?"workspace-sidebar__nav-item--active":""}`,"aria-current":u?"page":void 0,children:[(0,t.jsx)(i.Zap,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm",children:"Scheduled Jobs"})]})})]})]}),te.tracking&&(0,t.jsxs)("div",{className:"mb-3",children:[(0,t.jsx)("div",{className:"workspace-sidebar__section-header",children:(0,t.jsx)("p",{className:"workspace-sidebar__section-label",children:"Task Tracking"})}),(0,t.jsx)("div",{className:"px-2 flex flex-col gap-0.5",children:(0,t.jsx)(M,{projectSlug:e7.slug,trackerConnections:en,activeTrackerType:c,isTrackingActive:a&&("linear"===ea||"tracking"===ea),onLinkClick:e5})})]}),(0,t.jsxs)("div",{className:"mb-3",children:[(0,t.jsx)("div",{className:"workspace-sidebar__section-header",children:(0,t.jsx)("p",{className:"workspace-sidebar__section-label",children:"Tools"})}),(0,t.jsxs)("div",{className:"px-2 flex flex-col gap-0.5",children:[(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:(0,t.jsxs)(w.default,{href:`/projects/${e7.slug}/terminal`,onClick:e5,className:`workspace-sidebar__nav-item ${p?"workspace-sidebar__nav-item--active":""}`,"aria-current":p?"page":void 0,children:[(0,t.jsx)(b.TerminalSquare,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm",children:"Terminal"})]})}),(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:r?(0,t.jsxs)("button",{type:"button",className:`workspace-sidebar__nav-item ${j?"workspace-sidebar__nav-item--active":""}`,onClick:()=>{I(r),e5()},"aria-current":j?"page":void 0,children:[(0,t.jsx)(v.MessageSquare,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm",children:"Chat"}),C?.chat.length>0&&(0,t.jsx)("span",{className:"inline-flex items-center -space-x-1 ml-auto shrink-0",children:C.chat.slice(0,3).map(e=>{let r=s.find(t=>t.id===e.agentId);return(0,t.jsxs)("span",{className:"relative inline-block",title:r?.name,children:[(0,t.jsx)("img",{src:(0,_.agentAvatarUrl)(r?.id??e.agentId,16,e.color),alt:r?.name??"",className:"h-3.5 w-3.5 rounded-full ring-[1.5px] ring-[var(--app-shell-pane)]"}),(0,t.jsx)("span",{className:"absolute -bottom-px -right-px h-1.5 w-1.5 rounded-full bg-green-500 ring-[1px] ring-[var(--app-shell-pane)]"})]},e.agentId)})})]}):null})]})]}),z&&(0,t.jsxs)("div",{className:"mb-3",children:[(0,t.jsx)("div",{className:"workspace-sidebar__section-header",children:(0,t.jsx)("p",{className:"workspace-sidebar__section-label",children:"Settings"})}),(0,t.jsxs)("div",{className:"px-2 flex flex-col gap-0.5",children:[te.teams&&(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:(0,t.jsxs)(w.default,{href:`/projects/${e7.slug}/teams`,onClick:e5,className:`workspace-sidebar__nav-item ${k?"workspace-sidebar__nav-item--active":""}`,"aria-current":k?"page":void 0,children:[(0,t.jsx)(x.Users,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm",children:"Teams"})]})}),te.folders&&(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:(0,t.jsxs)(w.default,{href:`/projects/${e7.slug}/folders`,onClick:e5,className:`workspace-sidebar__nav-item ${y?"workspace-sidebar__nav-item--active":""}`,"aria-current":y?"page":void 0,children:[(0,t.jsx)(o.FolderGit2,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm",children:"Folders"})]})}),te.envVars&&(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:(0,t.jsxs)(w.default,{href:`/projects/${e7.slug}/env-vars`,onClick:e5,className:`workspace-sidebar__nav-item ${N?"workspace-sidebar__nav-item--active":""}`,"aria-current":N?"page":void 0,children:[(0,t.jsx)(g,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm",children:"Environment Variables"})]})}),te.notifications&&(0,t.jsx)("div",{className:"workspace-sidebar__workspace-item",children:(0,t.jsxs)(w.default,{href:`/projects/${e7.slug}/notifications`,onClick:e5,className:`workspace-sidebar__nav-item ${S?"workspace-sidebar__nav-item--active":""}`,"aria-current":S?"page":void 0,children:[(0,t.jsx)(h.Bell,{size:14,className:"flex-shrink-0 text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"workspace-sidebar__workspace-title text-sm",children:"Notifications"})]})})]})]})]})})()]}),(0,t.jsxs)("div",{className:"mt-auto px-3 pb-3 flex flex-col gap-2",children:[em&&e7&&(0,t.jsxs)(w.default,{href:`/projects/${e7.slug}/terminal?cmd=${encodeURIComponent("agx update && agx chat start")}`,className:"flex items-center justify-center gap-2 w-full py-2 rounded-lg text-sm font-medium transition-colors text-[var(--foreground)] bg-[var(--app-shell-subtle)] hover:bg-[var(--app-shell-border)]",children:[(0,t.jsx)(j,{size:14}),"Update available"]}),(0,t.jsxs)("a",{href:"https://discord.gg/G9afUYKKY3",target:"_blank",rel:"noopener noreferrer",className:"flex items-center justify-center gap-2 w-full py-2 rounded-lg text-white text-sm font-medium transition-colors",style:{backgroundColor:"#5865F2"},onMouseEnter:e=>e.currentTarget.style.backgroundColor="#4752C4",onMouseLeave:e=>e.currentTarget.style.backgroundColor="#5865F2",children:[(0,t.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 71 55",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M60.1 4.9A58.5 58.5 0 0045.4.2a.2.2 0 00-.2.1 40.8 40.8 0 00-1.8 3.7 54 54 0 00-16.2 0A37.4 37.4 0 0025.4.3a.2.2 0 00-.2-.1A58.4 58.4 0 0010.5 4.9a.2.2 0 00-.1.1C1.5 18.7-.9 32.2.3 45.5v.1a58.8 58.8 0 0017.7 9a.2.2 0 00.3-.1 42 42 0 003.6-5.9.2.2 0 00-.1-.3 38.8 38.8 0 01-5.5-2.6.2.2 0 01 0-.4l1.1-.9a.2.2 0 01.2 0 42 42 0 0035.6 0 .2.2 0 01.2 0l1.1.9a.2.2 0 010 .4 36.4 36.4 0 01-5.5 2.6.2.2 0 00-.1.3 47.2 47.2 0 003.6 5.9.2.2 0 00.3.1 58.6 58.6 0 0017.7-9v-.1c1.4-15.2-2.4-28.4-10-40.1a.2.2 0 00-.1-.1zM23.7 37.3c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7zm23.3 0c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7z"})}),"Join Discord"]})]}),ef&&eV&&(0,a.createPortal)((0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30 p-4",onClick:()=>{eV.isSaving||eU(null)},children:(0,t.jsxs)("div",{className:"w-full max-w-lg rounded-2xl border border-[var(--border)] bg-[var(--card-bg)] shadow-2xl",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4 border-b border-[var(--border)] px-5 py-4",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]",children:eV.projectName}),(0,t.jsx)("h3",{className:"truncate text-base font-semibold text-[var(--foreground)]",children:eV.repoId?eV.name||"Folder":"Add Folder"})]}),(0,t.jsx)("button",{type:"button",className:"rounded-md p-1 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)] hover:text-[var(--muted-foreground)]",onClick:()=>{eV.isSaving||eU(null)},"aria-label":"Close folder details",disabled:eV.isSaving,children:(0,t.jsx)(p.X,{size:16})})]}),(0,t.jsxs)("div",{className:"space-y-4 px-5 py-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"mb-1 text-[11px] font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]",children:"Name"}),(0,t.jsx)("input",{value:eV.name,onChange:e=>eU(t=>t?{...t,name:e.target.value,error:null}:t),className:"w-full rounded-lg border border-[var(--border)] bg-[var(--app-shell-subtle)] px-3 py-2 text-sm text-[var(--foreground)]",disabled:eV.isSaving,placeholder:"e.g. Frontend, API Docs, Design System"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"mb-1 text-[11px] font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]",children:"Path"}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{value:eV.path,onChange:e=>eU(t=>t?{...t,path:e.target.value,error:null}:t),className:"flex-1 rounded-lg border border-[var(--border)] bg-[var(--app-shell-subtle)] px-3 py-2 font-mono text-xs text-[var(--foreground)]",disabled:eV.isSaving,placeholder:"Local path to folder"}),(0,t.jsx)("button",{type:"button",className:"rounded-lg border border-[var(--border)] bg-[var(--app-shell-subtle)] px-3 py-2 text-xs font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)]",disabled:eV.isSaving,onClick:async()=>{try{let e=await fetch("/api/filesystem/pick-folder",{method:"POST"}),t=await e.json();t.path&&eU(e=>e?{...e,path:t.path,error:null}:e)}catch{}},children:"Browse"})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"mb-1 text-[11px] font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]",children:"Notes"}),(0,t.jsx)("textarea",{value:eV.notes,onChange:e=>eU(t=>t?{...t,notes:e.target.value,error:null}:t),className:"min-h-28 w-full rounded-lg border border-[var(--border)] bg-[var(--app-shell-subtle)] px-3 py-3 text-sm text-[var(--foreground)] whitespace-pre-wrap",disabled:eV.isSaving,placeholder:"Coding conventions, deploy steps, doc standards, ownership rules..."})]}),eV.repoId?(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"mb-1 text-[11px] font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]",children:"Living Note"}),eV.isLoadingKnowledge?(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"Loading note…"}):eV.generatedKnowledge.length>0?(0,t.jsx)("div",{className:"space-y-2",children:eV.generatedKnowledge.slice(0,5).map(e=>(0,t.jsxs)("div",{className:"rounded-lg border border-[var(--border)] bg-[var(--app-shell-subtle)] px-3 py-2 text-sm text-[var(--foreground)]",children:[(0,t.jsx)("div",{children:e.content}),e.created_at?(0,t.jsx)("div",{className:"mt-1 text-[11px] text-[var(--muted-foreground)]",children:new Date(e.created_at).toLocaleString()}):null]},e.id))}):(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"No note yet."})]}):null,eV.error?(0,t.jsx)("p",{className:"text-xs text-red-600",children:eV.error}):null,(0,t.jsxs)("div",{className:"flex justify-end gap-2 border-t border-[var(--border)] pt-4",children:[(0,t.jsx)("button",{type:"button",className:"rounded-lg px-3 py-2 text-sm text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)]",onClick:()=>eU(null),disabled:eV.isSaving,children:"Cancel"}),(0,t.jsx)("button",{type:"button",className:"rounded-lg bg-[var(--foreground)] px-3 py-2 text-sm font-medium text-[var(--card-bg)] transition-colors hover:bg-[var(--foreground)] disabled:cursor-not-allowed disabled:opacity-60",disabled:eV.isSaving||!G,onClick:async()=>{let e=K.find(e=>e.id===eV.projectId);if(!e)return void eU(e=>e?{...e,error:"Project not found."}:e);let t=eV.name.trim(),r=eV.path.trim();if(!t)return void eU(e=>e?{...e,error:"Folder name is required."}:e);if(!r)return void eU(e=>e?{...e,error:"Folder path is required."}:e);eU(e=>e?{...e,isSaving:!0,error:null}:e);try{let a=eV.repoId?e.repos.map(e=>e.id===eV.repoId?{id:e.id,name:t,path:r,git_url:eV.gitUrl.trim()||void 0,notes:eV.notes.trim()||void 0}:{id:e.id,name:e.name,path:e.path,git_url:e.git_url,notes:e.notes}):[...e.repos.map(e=>({id:e.id,name:e.name,path:e.path,git_url:e.git_url,notes:e.notes})),{name:t,path:r,git_url:eV.gitUrl.trim()||void 0,notes:eV.notes.trim()||void 0}];await G?.(e.id,{repos:a}),eU(null)}catch(e){eU(t=>t?{...t,isSaving:!1,error:e instanceof Error?e.message:"Failed to save folder details."}:t)}},children:eV.isSaving?"Saving...":eV.repoId?"Save":"Add Folder"})]})]})]})}),document.body),ef&&ej&&!eN&&(0,a.createPortal)((0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30",onClick:()=>ek(null),children:(0,t.jsxs)("div",{className:"bg-[var(--card-bg)] rounded-xl shadow-xl border border-[var(--border)] w-80 max-h-[70vh] flex flex-col",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-[var(--border)]",children:[(0,t.jsxs)("h3",{className:"text-sm font-medium text-[var(--foreground)]",children:["Add to ",eQ?.name??"project"]}),(0,t.jsx)("button",{type:"button",className:"text-[var(--muted-foreground)] hover:text-[var(--muted-foreground)]",onClick:()=>ek(null),children:(0,t.jsx)(p.X,{size:16})})]}),(0,t.jsxs)("div",{className:"overflow-y-auto py-1 flex-1",children:[(0,t.jsxs)("button",{type:"button",className:"w-full flex items-center gap-3 px-4 py-2.5 text-sm text-[var(--foreground)] hover:bg-[var(--app-shell-subtle)] transition-colors border-b border-[var(--border)]",onClick:()=>e_(!0),children:[(0,t.jsx)(c.Plus,{size:14,className:"text-[var(--muted-foreground)]"}),(0,t.jsx)("span",{className:"text-xs font-medium",children:"Create new agent"})]}),0===e1.length?(0,t.jsx)("p",{className:"px-4 py-6 text-xs text-[var(--muted-foreground)] text-center",children:"All agents are already in this project"}):e1.map(e=>{let r=ew.has(e.id);return(0,t.jsxs)("button",{type:"button",className:`w-full flex items-center gap-3 px-4 py-2.5 text-sm transition-colors ${r?"bg-[var(--muted)] text-[var(--foreground)]":"text-[var(--foreground)] hover:bg-[var(--app-shell-subtle)]"}`,onClick:()=>{ey(t=>{let r=new Set(t);return r.has(e.id)?r.delete(e.id):r.add(e.id),r})},children:[(0,t.jsx)("div",{className:`w-4 h-4 rounded border flex-shrink-0 flex items-center justify-center ${r?"bg-[var(--foreground)] border-[var(--foreground)]":"border-[var(--border)]"}`,children:r&&(0,t.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",children:(0,t.jsx)("path",{d:"M2 5l2 2 4-4",stroke:"white",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}),(0,t.jsx)("img",{src:(0,_.agentAvatarUrl)(e.id,24,e.color),alt:"",className:"w-6 h-6 rounded-full flex-shrink-0"}),(0,t.jsxs)("div",{className:"min-w-0 flex-1 text-left",children:[(0,t.jsx)("div",{className:"truncate font-medium text-xs",children:e.name}),(0,t.jsx)("div",{className:"truncate text-[11px] text-[var(--muted-foreground)]",children:e.model})]})]},e.id)})]}),e1.length>0&&(0,t.jsxs)("div",{className:"px-4 py-3 border-t border-[var(--border)] flex justify-end gap-2",children:[(0,t.jsx)("button",{type:"button",className:"px-3 py-1.5 text-xs text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",onClick:()=>ek(null),children:"Cancel"}),(0,t.jsxs)("button",{type:"button",disabled:0===ew.size,className:"px-3 py-1.5 text-xs font-medium text-[var(--card-bg)] bg-[var(--foreground)] rounded-lg hover:bg-[var(--foreground)] disabled:opacity-40 disabled:cursor-not-allowed transition-colors",onClick:()=>{for(let e of ew)X?.(ej.projectId,e);ek(null)},children:["Add ",ew.size>0?`(${ew.size})`:""]})]})]})}),document.body),ef&&eN&&(0,a.createPortal)((0,t.jsx)(_.AgentForm,{title:"Create new agent",initial:{name:"",provider:"claude",model:"",identity:"",skills:[],skillBindings:[]},submitLabel:"Create & Add",projects:K?.filter(e=>!e.is_default).map(t=>{let r=(t.thread_ids??[]).map(t=>e.find(e=>e.id===t)?.title?.trim()).filter(Boolean).join(", ")||"No chat";return{id:t.id,name:t.name,label:`${r} › ${t.name}`}}),initialProjectIds:ej?[ej.projectId]:[],onSubmit:async(e,t)=>{let r=["#D97706","#2563EB","#059669","#DC2626","#7C3AED","#DB2777","#0891B2"],a=r[s.length%r.length],i=e.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),l=t?.[0],o=await fetch("/api/participants",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:i,name:e.name,provider:e.provider,model:e.model,color:e.color??a,...e.role?{role:e.role}:{},...e.identity?{identity:e.identity}:{},skills:e.skills??[],skillBindings:e.skillBindings??[],...l?{projectId:l}:{}})});if(o.ok){let e=await o.json().catch(()=>({})),r="string"==typeof e?.id&&e.id.trim()?e.id.trim():i;for(let e of(t??[]).slice(1))X?.(e,r);e_(!1),ek(null)}},onCancel:()=>{e_(!1)}}),document.body),ef&&eT&&(0,a.createPortal)((0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30",onClick:()=>eF(null),children:(0,t.jsxs)("div",{className:"bg-[var(--card-bg)] rounded-xl shadow-xl border border-[var(--border)] w-80 flex flex-col",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-[var(--border)]",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-[var(--foreground)]",children:eT.title}),(0,t.jsx)("button",{type:"button",className:"text-[var(--muted-foreground)] hover:text-[var(--muted-foreground)]",onClick:()=>eF(null),children:(0,t.jsx)(p.X,{size:16})})]}),(0,t.jsxs)("form",{className:"px-4 py-4 flex flex-col gap-3",onSubmit:e=>{e.preventDefault();let t=new FormData(e.currentTarget),r=t.get("value")?.trim();r&&(eT.onSubmit(r),eF(null))},children:[(0,t.jsx)("input",{ref:eE,name:"value",type:"text",defaultValue:eT.defaultValue,placeholder:eT.placeholder,className:"w-full px-3 py-2 text-sm border border-[var(--border)] rounded-lg outline-none focus:border-[var(--border)] focus:ring-1 focus:ring-[var(--border)] transition-all"}),(0,t.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,t.jsx)("button",{type:"button",className:"px-3 py-1.5 text-xs text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",onClick:()=>eF(null),children:"Cancel"}),(0,t.jsx)("button",{type:"submit",className:"px-3 py-1.5 text-xs font-medium text-[var(--card-bg)] bg-[var(--foreground)] rounded-lg hover:bg-[var(--foreground)] transition-colors",children:eT.defaultValue?"Save":"Create"})]})]})]})}),document.body),ef&&eA&&(0,a.createPortal)((0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/30",onClick:()=>eM(null),children:(0,t.jsxs)("div",{className:"bg-[var(--card-bg)] rounded-xl shadow-xl border border-[var(--border)] w-80 flex flex-col",onClick:e=>e.stopPropagation(),children:[(0,t.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-[var(--border)]",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-[var(--foreground)]",children:eA.title}),(0,t.jsx)("button",{type:"button",className:"text-[var(--muted-foreground)] hover:text-[var(--muted-foreground)]",onClick:()=>eM(null),children:(0,t.jsx)(p.X,{size:16})})]}),(0,t.jsxs)("div",{className:"px-4 py-4 flex flex-col gap-4",children:[(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:eA.message}),(0,t.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,t.jsx)("button",{type:"button",className:"px-3 py-1.5 text-xs text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",onClick:()=>eM(null),children:"Cancel"}),(0,t.jsx)("button",{type:"button",className:"px-3 py-1.5 text-xs font-medium text-white bg-red-600 rounded-lg hover:bg-red-700 transition-colors",onClick:()=>{eA.onConfirm(),eM(null)},children:"Delete"})]})]})]})}),document.body),ef&&(eS||eI)&&(0,a.createPortal)((0,t.jsx)(S.default,{isOpen:!0,onClose:()=>{ez.resetForm(),eC(null),e$(null)},onSubmit:()=>void eZ(),editingProject:eI,form:ez.form,repos:ez.repos,isSubmitting:ez.isSubmitting,formError:ez.formError,onFieldChange:(e,t)=>ez.setForm(r=>({...r,[e]:t})),onRepoChange:ez.handleRepoChange,onAddRepo:ez.addRepo,onRemoveRepo:ez.removeRepo}),document.body),ef&&eR&&(0,a.createPortal)((ed=K.filter(e=>e.agents.some(e=>e.agent_id===eR.id)),ec=K.filter(e=>!e.agents.some(e=>e.agent_id===eR.id)),(0,t.jsx)(_.AgentForm,{title:"Edit agent",initial:{name:eR.name,role:eR.role||"",provider:eR.provider,model:eR.model||"",identity:eR.identity||"",color:eR.color,skills:eR.skills||[],skillBindings:eR.skillBindings||[]},agentId:eR.id,submitLabel:"Save",projectMemberships:{current:ed.map(e=>({id:e.id,name:e.name,is_default:!!e.is_default})),available:ec.map(e=>({id:e.id,name:e.name}))},onAddToProject:X?e=>X(e,eR.id):void 0,onRemoveFromProject:Y?e=>Y(e,eR.id):void 0,onSubmit:async e=>{ee&&await ee({...eR,name:e.name,role:e.role||void 0,provider:e.provider,model:e.model,color:e.color??eR.color,...e.identity?{identity:e.identity}:{},skills:e.skills??[],skillBindings:e.skillBindings??[]}),eL(null)},onCancel:()=>eL(null)})),document.body),ei&&!eu&&(0,t.jsx)("div",{className:"absolute right-0 top-0 bottom-0 z-20 w-1 cursor-col-resize group",onMouseDown:e=>{e.preventDefault(),eh.current=!0;let t=e.clientX,r=es??368;document.body.style.cursor="col-resize",document.body.style.userSelect="none";let a=e=>{ei(Math.max(200,Math.min(600,r+e.clientX-t)))},s=()=>{eh.current=!1,document.body.style.cursor="",document.body.style.userSelect="",window.removeEventListener("mousemove",a),window.removeEventListener("mouseup",s)};window.addEventListener("mousemove",a),window.addEventListener("mouseup",s)},children:(0,t.jsx)("div",{className:"absolute inset-y-0 right-0 w-1 transition-colors hover:bg-[var(--primary)]/40 group-hover:bg-[var(--primary)]/40"})})]})]})}e.s(["WorkspaceSidebar",()=>B],749410)},969039,e=>{"use strict";var t=e.i(935851),r=e.i(506420),a=e.i(434405);let s="agx-chat:last-thread";function i(){return void 0!==window.localStorage}function l(){if(i())try{window.localStorage.removeItem(s)}catch{}}let o=e=>[...e].sort((e,t)=>t.createdAt-e.createdAt);function n(e){let n=(0,r.useSearchParams)(),d=(e||n.get("thread")||"").trim()||null,c=(0,t.useRef)(!0),[u,p]=(0,t.useState)([]),[m,h]=(0,t.useState)(null),[x,f]=(0,t.useState)(!0),[v,b]=(0,t.useState)(!0),[g,j]=(0,t.useState)(!1),[k,w]=(0,t.useState)(null),[y,N]=(0,t.useState)(null),_=(0,t.useRef)(!1),S=(0,t.useCallback)(e=>{h(e)},[]);(0,t.useEffect)(()=>(c.current=!0,()=>{c.current=!1}),[]),(0,t.useEffect)(()=>{let e=!1;return(async()=>{try{var t;let r,n=await a.threadService.listThreads();if(d&&!n.some(e=>e.id===d)){let e=await a.threadService.createThread({id:d});n=o([...n.filter(t=>t.id!==e.id),e])}if(e||!c.current)return;p(n);let u=d||function(){if(!i())return null;try{return window.localStorage.getItem(s)}catch{return null}}(),{threadId:m,shouldClearSavedId:x,restoredFromStorage:f}=(t=n,r=t[0]?.id??null,u?t.some(e=>e.id===u)?{threadId:u,shouldClearSavedId:!1,restoredFromStorage:!0}:{threadId:r,shouldClearSavedId:!0,restoredFromStorage:!1}:{threadId:r,shouldClearSavedId:!1,restoredFromStorage:!1});x&&l(),_.current||(_.current=!0),f&&m?S(m):m?h(e=>e??m):h(null)}catch(e){console.error("Failed to load threads",e)}finally{c.current&&(f(!1),b(!1))}})(),()=>{e=!0}},[d,S]),(0,t.useEffect)(()=>{if(_.current)if(m){if(i())try{window.localStorage.setItem(s,m)}catch{}}else l()},[m]);let C=(0,t.useCallback)(async e=>{j(!0);try{let t=await a.threadService.createThread(e);if(!c.current)return t;return p(e=>o([...e.filter(e=>e.id!==t.id),t])),h(t.id),t}catch(e){throw console.error("Failed to create thread",e),e}finally{c.current&&j(!1)}},[]),I=(0,t.useCallback)(async e=>{if(e){w(e);try{if(await a.threadService.deleteThread(e),!c.current)return;let t=[];p(r=>t=o(r.filter(t=>t.id!==e))),h(r=>r===e?t[0]?.id??null:r)}catch(e){throw console.error("Failed to delete thread",e),e}finally{c.current&&w(null)}}},[]),$=(0,t.useCallback)(async(e,t)=>{let r=e.trim(),s=t.trim();if(r&&s){N(r);try{let e=await a.threadService.renameThread(r,s);if(!e||!c.current)return;p(t=>o(t.map(t=>t.id===e.id?e:t)))}catch(e){throw console.error("Failed to rename thread",e),e}finally{c.current&&N(e=>e===r?null:e)}}},[]),z=(0,t.useCallback)(async(e,t)=>{if(e)try{let r=await a.threadService.saveThreadMessages(e,t);if(!r||!c.current)return;p(e=>o(e.map(e=>e.id===r.id?r:e)))}catch(e){console.error("Failed to update thread messages",e)}},[]),T=(0,t.useCallback)(async(e,t)=>{if(e)try{let r=await a.threadService.updateThreadStatus(e,t);if(!r||!c.current)return;p(e=>o(e.map(e=>e.id===r.id?r:e)))}catch(e){console.error("Failed to update thread status",e)}},[]),F=(0,t.useCallback)(async(e,t)=>{if(e)try{let r=await a.threadService.updateThreadOutcomeNote(e,t);if(!r||!c.current)return;p(e=>o(e.map(e=>e.id===r.id?r:e)))}catch(e){console.error("Failed to update thread outcome note",e)}},[]),E=(0,t.useCallback)(async(e,t,r)=>{if(e&&t)try{let s=await a.threadService.updateMessageThreadStatus(e,t,r);if(!s||!c.current)return;p(e=>o(e.map(e=>e.id===s.id?s:e)))}catch(e){console.error("Failed to update message thread status",e)}},[]),A=(0,t.useCallback)(async(e,t,r)=>{if(e&&t)try{let s=await a.threadService.updateMessageOutcomeNote(e,t,r);if(!s||!c.current)return;p(e=>o(e.map(e=>e.id===s.id?s:e)))}catch(e){console.error("Failed to update message outcome note",e)}},[]),M=null!==m&&k===m;return{threads:u,activeThreadId:m,selectThread:S,createThread:C,deleteThread:I,isLoading:x,isRestoringActiveThread:v,isCreating:g,deletingThreadId:k,renamingThreadId:y,isDeletingActiveThread:M,updateThreadMessages:z,renameThread:$,updateThreadStatus:T,updateThreadOutcomeNote:F,updateMessageThreadStatus:E,updateMessageOutcomeNote:A}}e.s(["useThreadState",()=>n],969039)},481248,e=>{"use strict";let t="agx-chat:uiSettings",r={threadSidebarVisible:!1};function a(){return void 0!==window.localStorage}function s(){if(!a())return{...r};let e=window.localStorage.getItem(t);if(!e)return{...r};try{let t=JSON.parse(e);return{...r,threadSidebarVisible:"boolean"==typeof t.threadSidebarVisible&&t.threadSidebarVisible}}catch{return{...r}}}function i(){return s().threadSidebarVisible}function l(e){var r={...s(),threadSidebarVisible:e};if(a())try{window.localStorage.setItem(t,JSON.stringify(r))}catch{}}e.s(["loadWorkspaceSidebarVisible",()=>i,"persistWorkspaceSidebarVisible",()=>l])}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,640481,e=>{"use strict";let t=(0,e.i(363732).default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);e.s(["Pencil",()=>t],640481)},794731,e=>{"use strict";let t=(0,e.i(363732).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);e.s(["Trash2",()=>t],794731)},780004,e=>{"use strict";let t="obra/superpowers",n="vercel/next-skills";function a(e,t,n){return n?{repo:e,skillId:t,condition:n}:{repo:e,skillId:t}}function i(e){return e.condition?{...e}:{repo:e.repo,skillId:e.skillId}}function r(e){let t={...e};return t.extraSkills&&(t.extraSkills=t.extraSkills.map(i)),t}function s(e){return{...e,agents:e.agents.map(r)}}function l(e){let t={...e,agents:e.agents.map(r)};return t.variants&&(t.variants=t.variants.map(s)),t}let o={"strategist-lead":[a(t,"brainstorming"),a(t,"writing-plans"),a(t,"dispatching-parallel-agents"),a(t,"requesting-code-review"),a(t,"verification-before-completion")],"senior-builder":[a(t,"test-driven-development"),a(t,"systematic-debugging"),a(t,"subagent-driven-development"),a(t,"requesting-code-review"),a(t,"verification-before-completion"),a(t,"finishing-a-development-branch")],builder:[a(t,"test-driven-development"),a(t,"systematic-debugging"),a(t,"verification-before-completion"),a(t,"finishing-a-development-branch")],planner:[a(t,"brainstorming"),a(t,"writing-plans"),a(t,"verification-before-completion")],researcher:[a(t,"brainstorming"),a(t,"writing-plans"),a(t,"systematic-debugging"),a(t,"verification-before-completion")],reviewer:[a(t,"systematic-debugging"),a(t,"test-driven-development"),a(t,"requesting-code-review"),a(t,"verification-before-completion")]},d=["strategist-lead","senior-builder","builder","planner","researcher","reviewer"].map(e=>({id:e,skills:o[e].map(i)})),c=[a(n,"api-routes","next.js app router, route handlers, api endpoints"),a(n,"nextjs-patterns","next.js app structure, routing, layouts, data fetching"),a(n,"react-server-components","react server components, server client boundaries, next.js rendering")],m={"team-lead":{name:"Ada",role:"Team Lead",style:"balanced",skillProfileId:"strategist-lead",identity:"Own technical direction, break ambiguous work into executable plans, and keep the squad aligned on delivery."},"fullstack-engineer":{name:"Kai",role:"Senior Fullstack Engineer",style:"balanced",skillProfileId:"senior-builder",identity:"Ship features end-to-end across frontend and backend with pragmatic tradeoffs and clean boundaries.",extraSkills:c},"backend-engineer":{name:"Ravi",role:"Senior Backend Engineer",style:"specialist",skillProfileId:"senior-builder",identity:"Own backend contracts, data integrity, and safe delivery under real production constraints."},"frontend-engineer":{name:"Mira",role:"Senior Frontend Engineer",style:"balanced",skillProfileId:"senior-builder",identity:"Own product-facing UI quality, interaction design fidelity, and maintainable front-end architecture.",extraSkills:c},"data-engineer":{name:"Nia",role:"Data Engineer",style:"specialist",skillProfileId:"senior-builder",identity:"Build reliable data pipelines, schemas, and transformations with a bias toward traceability."},"ml-engineer":{name:"Luca",role:"ML Engineer",style:"specialist",skillProfileId:"senior-builder",identity:"Ship model-backed systems pragmatically, with evaluation, rollback paths, and tight production feedback."},"devops-engineer":{name:"Juno",role:"DevOps Engineer",style:"specialist",skillProfileId:"senior-builder",identity:"Own delivery automation, deployment safety, and infrastructure changes that must fail predictably."},"security-engineer":{name:"Iris",role:"Security Engineer",style:"conservative",skillProfileId:"senior-builder",identity:"Harden trust boundaries, implement secure defaults, and turn vague risk into concrete engineering requirements."},"ui-designer":{name:"Theo",role:"UI Designer",style:"specialist",skillProfileId:"builder",identity:"Refine interfaces into consistent, high-signal UI systems that are practical to build and maintain.",extraSkills:[a(n,"nextjs-patterns","next.js ui flows, routing, layouts, app router"),a(n,"react-server-components","react server components, server client boundaries, data fetching placement")]},"qa-engineer":{name:"Sana",role:"QA Engineer",style:"conservative",skillProfileId:"reviewer",identity:"Find regressions early, tighten acceptance boundaries, and force evidence before release claims."},sre:{name:"Dax",role:"Site Reliability Engineer",style:"conservative",skillProfileId:"reviewer",identity:"Guard uptime, incident readiness, and operational correctness by challenging risky assumptions early."},"pen-tester":{name:"Vega",role:"Penetration Tester",style:"specialist",skillProfileId:"reviewer",identity:"Probe the system as an adversary, find exploit paths, and make the attack surface legible to builders."},"product-manager":{name:"Sage",role:"Product Manager",style:"balanced",skillProfileId:"planner",identity:"Turn ambiguous requests into scoped bets, crisp plans, and explicit tradeoffs the team can execute."},"ux-designer":{name:"Yara",role:"UX Designer",style:"balanced",skillProfileId:"planner",identity:"Clarify user intent, reduce friction in flows, and turn product goals into coherent interaction design."},"technical-writer":{name:"Orin",role:"Technical Writer",style:"balanced",skillProfileId:"planner",identity:"Turn complex implementation detail into clear docs, rollout notes, and operational guidance."},"growth-marketer":{name:"Zed",role:"Growth Marketer",style:"balanced",skillProfileId:"strategist-lead",identity:"Design growth experiments with clear hypotheses, sequencing, and measurable outcomes."},analyst:{name:"Piper",role:"Product Analyst",style:"specialist",skillProfileId:"researcher",identity:"Ground decisions in evidence, identify gaps in the brief, and surface the signal behind user behavior."},"content-writer":{name:"Wren",role:"Content Strategist",style:"balanced",skillProfileId:"researcher",identity:"Translate product and audience insight into clear narratives, launch copy, and feedback loops."},researcher:{name:"Ezra",role:"Researcher",style:"balanced",skillProfileId:"researcher",identity:"Map fast-changing domains, synthesize evidence, and surface the governing model behind decisions."},"marketing-strategist":{name:"Finn",role:"Marketing Strategist",style:"balanced",skillProfileId:"strategist-lead",identity:"Own brand positioning, campaign strategy, and channel mix with measurable conversion targets."},copywriter:{name:"Blair",role:"Copywriter",style:"balanced",skillProfileId:"researcher",identity:"Craft clear, persuasive copy that serves both the reader and the business goal."},"support-engineer":{name:"Gwen",role:"Support Engineer",style:"balanced",skillProfileId:"builder",identity:"Diagnose customer issues fast, escalate with precision, and turn patterns into preventive fixes."},"support-lead":{name:"Eli",role:"Support Lead",style:"balanced",skillProfileId:"planner",identity:"Triage incoming issues, route to the right responder, and track resolution quality."},"devrel-engineer":{name:"Milo",role:"Developer Relations Engineer",style:"balanced",skillProfileId:"senior-builder",identity:"Build sample apps, integrations, and tooling that make the platform easy to adopt."},"community-manager":{name:"Uma",role:"Community Manager",style:"balanced",skillProfileId:"planner",identity:"Grow and engage the developer community through events, content, and feedback loops."},"ops-engineer":{name:"Nate",role:"Operations Engineer",style:"specialist",skillProfileId:"senior-builder",identity:"Automate operational workflows, reduce toil, and keep internal tooling reliable."},"project-manager":{name:"Quinn",role:"Project Manager",style:"balanced",skillProfileId:"planner",identity:"Track milestones, remove blockers, and keep cross-team delivery on schedule."},"solutions-architect":{name:"Cass",role:"Solutions Architect",style:"balanced",skillProfileId:"strategist-lead",identity:"Design system-level architectures, evaluate tradeoffs, and guide teams through technical decisions."},"mobile-engineer":{name:"Rio",role:"Senior Mobile Engineer",style:"balanced",skillProfileId:"senior-builder",identity:"Ship native and cross-platform mobile experiences with attention to performance and platform conventions."}},u=["team-lead","fullstack-engineer","backend-engineer","frontend-engineer","qa-engineer","product-manager","analyst","growth-marketer","content-writer","data-engineer","ml-engineer","ux-designer","ui-designer","devops-engineer","sre","security-engineer","pen-tester","researcher","technical-writer","marketing-strategist","copywriter","support-engineer","support-lead","devrel-engineer","community-manager","ops-engineer","project-manager","solutions-architect","mobile-engineer"].map(e=>r({id:e,...m[e]}));function g(e){return r({id:e,...m[e]})}let p=[{id:"engineering",name:"Engineering",description:"Software engineering teams across all domains — pick a specialization or build your own.",icon:"hammer",agents:[g("team-lead"),g("backend-engineer"),g("frontend-engineer"),g("fullstack-engineer"),g("qa-engineer")],variants:[{id:"general",name:"General",description:"Product engineering with leadership, builders across the stack, and quality gates.",agents:[g("team-lead"),g("backend-engineer"),g("frontend-engineer"),g("fullstack-engineer"),g("qa-engineer")]},{id:"ai",name:"AI",description:"Applied AI and ML engineering for models, evaluation, and production inference.",agents:[g("team-lead"),g("ml-engineer"),g("data-engineer"),g("researcher"),g("qa-engineer")]},{id:"data",name:"Data",description:"Data platform engineering for pipelines, warehousing, and transformation reliability.",agents:[g("team-lead"),g("data-engineer"),g("qa-engineer")]},{id:"mobile",name:"Mobile",description:"Native and cross-platform mobile engineering with fullstack support.",agents:[g("team-lead"),g("mobile-engineer"),g("fullstack-engineer"),g("qa-engineer")]},{id:"infra",name:"Infrastructure",description:"Platform reliability for delivery pipelines, runtime stability, and operational safety.",agents:[g("team-lead"),g("devops-engineer"),g("sre")]},{id:"security",name:"Security",description:"Security engineering for secure defaults, hardening, and adversarial validation.",agents:[g("team-lead"),g("security-engineer"),g("pen-tester")]},{id:"solutions",name:"Solutions",description:"Architecture and integration work across systems and customer deployments.",agents:[g("team-lead"),g("solutions-architect"),g("backend-engineer"),g("devops-engineer")]}]},{id:"product",name:"Product",description:"Discovery and prioritization for product direction, scope, and validation.",icon:"clipboard-list",agents:[g("team-lead"),g("product-manager"),g("analyst")]},{id:"design",name:"Design",description:"UX and UI pairing for flows, interaction models, and polished product surfaces.",icon:"palette",agents:[g("team-lead"),g("ux-designer"),g("ui-designer")]},{id:"growth",name:"Growth",description:"Experiment and content team for acquisition, activation, and learning loops.",icon:"trending-up",agents:[g("team-lead"),g("growth-marketer"),g("content-writer")]},{id:"research",name:"Research",description:"Research and synthesis pair for investigations, briefs, and decision support.",icon:"flask-conical",agents:[g("team-lead"),g("researcher"),g("technical-writer")]},{id:"marketing",name:"Marketing",description:"Brand strategy, campaign execution, and content production.",icon:"megaphone",agents:[g("team-lead"),g("marketing-strategist"),g("copywriter"),g("content-writer")]},{id:"support",name:"Support",description:"Customer-facing support with triage, diagnosis, and escalation.",icon:"life-buoy",agents:[g("team-lead"),g("support-lead"),g("support-engineer")]},{id:"devrel",name:"Developer Relations",description:"Developer advocacy through tooling, content, and community engagement.",icon:"users",agents:[g("team-lead"),g("devrel-engineer"),g("community-manager"),g("technical-writer")]},{id:"operations",name:"Operations",description:"Internal tooling, project delivery, and cross-team coordination.",icon:"settings",agents:[g("team-lead"),g("project-manager"),g("ops-engineer")]}].map(l),h=new Map(d.map(e=>[e.id,e])),f=new Map(u.map(e=>[e.id,e]));function x(){return u.map(r)}function y(e){let t,n="string"==typeof e?function(e){if(!e)return null;let t=f.get(e);return t?r(t):null}(e):e;return n?[...(t=function(e){if(!e)return null;let t=h.get(e);return t?{id:t.id,skills:t.skills.map(i)}:null}(n.skillProfileId))?t.skills:[],...n.extraSkills?n.extraSkills.map(i):[]]:[]}function b(){return p.map(l)}p.map(e=>[e.id,e]),e.s(["getAgentPresetBindings",()=>y,"listAgentPresets",()=>x,"listTeamTemplates",()=>b])},10229,e=>{"use strict";var t=e.i(762281),n=e.i(935851),a=e.i(866389),i=e.i(506420),r=e.i(367859),s=e.i(812549),l=e.i(906724),o=e.i(640481),d=e.i(929870),c=e.i(794731),m=e.i(572665),u=e.i(797167),g=e.i(997626),p=e.i(958164),h=e.i(524123),f=e.i(780004),x=e.i(378764),y=e.i(884564);function b({params:e}){let{slug:b,teamId:v}=(0,n.use)(e),k=(0,i.useRouter)(),{projects:w}=(0,h.useProjectsWithAgents)(),j=w.find(e=>e.slug===b),[N,P]=(0,n.useState)(null),[S,C]=(0,n.useState)([]),[I,E]=(0,n.useState)(!0),[T,A]=(0,n.useState)(null),[M,$]=(0,n.useState)(!1),[_,D]=(0,n.useState)(""),[O,R]=(0,n.useState)(!1),q=(0,n.useRef)(null),[B,L]=(0,n.useState)(!1),[U,F]=(0,n.useState)(!1),[J,G]=(0,n.useState)(null),[z,K]=(0,n.useState)(!1),[H,V]=(0,n.useState)("existing"),[W,X]=(0,n.useState)(null),[Z,Q]=(0,n.useState)(null),[Y,ee]=(0,n.useState)(!1),[et,en]=(0,n.useState)(null),[ea,ei]=(0,n.useState)(null),er=(0,n.useCallback)(async()=>{if(j){E(!0),A(null);try{let e=await fetch(`/api/projects/${j.id}/teams/${v}`);if(!e.ok)throw Error(`Failed to load team (${e.status})`);let t=await e.json();P(t.team),D(t.team.name)}catch(e){A(e instanceof Error?e.message:"Unknown error")}finally{E(!1)}}},[j,v]),es=(0,n.useCallback)(async()=>{try{let e=await fetch("/api/participants");if(!e.ok)return;let t=await e.json();C(Array.isArray(t)?t:t.participants??[])}catch{}},[]);(0,n.useEffect)(()=>{er(),es()},[er,es]);let[el,eo]=(0,n.useState)(null);(0,n.useEffect)(()=>{eo(document.getElementById("topbar-breadcrumb"))},[]),(0,n.useEffect)(()=>{M&&q.current&&(q.current.focus(),q.current.select())},[M]);let ed=(0,n.useMemo)(()=>new Map(S.map(e=>[e.id,e])),[S]),ec=(0,n.useMemo)(()=>(0,f.listAgentPresets)(),[]),em=(0,n.useMemo)(()=>ec.map(e=>({id:e.id,label:e.name,meta:e.skillProfileId})),[ec]),eu=(0,n.useMemo)(()=>ec.map(e=>({id:e.id,label:e.name,meta:e.skillProfileId})),[ec]),eg=(0,n.useMemo)(()=>new Set(N?.agents.map(e=>e.agent_id)??[]),[N]),ep=(0,n.useMemo)(()=>j?j.agents.filter(e=>!eg.has(e.agent_id)).map(e=>{let t=ed.get(e.agent_id);return{id:e.agent_id,name:t?.name??e.agent_id.slice(0,8),provider:t?.provider??"claude",model:t?.model??null,color:t?.color??"#6B7280"}}):[],[j,eg,ed]),eh=(0,n.useMemo)(()=>ep.map(e=>({id:e.id,label:e.name,meta:e.provider})),[ep]);async function ef(){if(!N||!j||_.trim()===N.name)return void $(!1);if(!_.trim()){D(N.name),$(!1);return}R(!0);try{if(!(await fetch(`/api/projects/${j.id}/teams/${v}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:_.trim()})})).ok)throw Error("Failed to update team name");P(e=>e?{...e,name:_.trim()}:e)}catch{N&&D(N.name)}finally{R(!1),$(!1)}}async function ex(e){if(j){G(e);try{if(!(await fetch(`/api/projects/${j.id}/teams/${v}/agents?agentId=${encodeURIComponent(e)}`,{method:"DELETE"})).ok)throw Error("Failed to remove agent");P(t=>t?{...t,agents:t.agents.filter(t=>t.agent_id!==e)}:t)}catch{}finally{G(null)}}}async function ey(){if(j){F(!0);try{if(!(await fetch(`/api/projects/${j.id}/teams/${v}`,{method:"DELETE"})).ok)throw Error("Failed to delete team");k.push(`/projects/${b}/teams`)}catch{F(!1),L(!1)}}}async function eb(){if(j&&Z){ee(!0);try{if(!(await fetch(`/api/projects/${j.id}/teams/${v}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:Z,roleKey:"member"})})).ok)throw Error("Failed to add agent");Q(null),K(!1),await er()}catch{}finally{ee(!1)}}}async function ev(){if(j&&W){ee(!0);try{let e=ec.find(e=>e.id===W);if(!e)return;let t=(0,f.getAgentPresetBindings)(e),n=await fetch("/api/participants",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e.name,role:e.role,provider:"claude",model:null,identity:e.identity,skills:t.map(e=>({file:`${e.repo}/${e.skillId}`,...e.condition?{condition:e.condition}:{}}))})});if(!n.ok)throw Error("Failed to create agent");let a=await n.json(),i=a.id??a.participant?.id;await fetch(`/api/projects/${j.id}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:i})}),await fetch(`/api/projects/${j.id}/teams/${v}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:i,roleKey:e.id})}),X(null),K(!1),await Promise.all([er(),es()])}catch{}finally{ee(!1)}}}if(!j||I)return(0,t.jsxs)("div",{className:"flex items-center justify-center h-full text-sm text-[var(--muted-foreground)]",children:[(0,t.jsx)(l.Loader2,{className:"w-5 h-5 animate-spin mr-2"}),"Loading team..."]});if(T||!N)return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center h-full gap-3 text-[var(--muted-foreground)]",children:[(0,t.jsx)(p.AlertTriangle,{className:"w-5 h-5 text-[var(--destructive)]"}),(0,t.jsx)("p",{className:"text-sm text-[var(--destructive)]",children:T??"Team not found"}),(0,t.jsx)("button",{onClick:er,className:"text-xs underline hover:text-[var(--foreground)]",children:"Retry"})]});let ek=N.metadata?.variantId;return(0,t.jsxs)("div",{className:"h-full overflow-y-auto",children:[el&&(0,a.createPortal)((0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:"\\"}),(0,t.jsx)("span",{className:"text-xs text-[var(--foreground)]",children:N.name})]}),el),(0,t.jsxs)("div",{className:"max-w-3xl mx-auto px-6 py-8 space-y-8",children:[(0,t.jsx)("div",{className:"flex items-start justify-between gap-4",children:(0,t.jsxs)("div",{className:"min-w-0",children:[M?(0,t.jsx)("input",{ref:q,value:_,onChange:e=>D(e.target.value),onBlur:ef,onKeyDown:e=>{"Enter"===e.key&&ef(),"Escape"===e.key&&(D(N.name),$(!1))},disabled:O,className:"input text-lg font-bold w-full"}):(0,t.jsxs)("button",{onClick:()=>$(!0),className:"flex items-center gap-2 group text-left",children:[(0,t.jsx)("h1",{className:"text-lg font-bold truncate",children:N.name}),(0,t.jsx)(o.Pencil,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)] opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[N.template_id&&(0,t.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wider px-2 py-0.5 rounded-full bg-[var(--muted)] text-[var(--muted-foreground)] border border-[var(--border)]",children:N.template_id}),ek&&(0,t.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wider px-2 py-0.5 rounded-full bg-[var(--muted)] text-[var(--muted-foreground)] border border-[var(--border)]",children:ek}),(0,t.jsxs)("span",{className:"text-xs text-[var(--muted-foreground)]",children:[N.agents.length," agent",1!==N.agents.length?"s":""]})]})]})}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,t.jsxs)("h2",{className:"text-xs font-medium text-[var(--muted-foreground)] uppercase tracking-wider",children:["Agents (",N.agents.length,")"]}),(0,t.jsxs)("button",{onClick:()=>{K(!z),V("existing"),Q(null),X(null)},className:"flex items-center gap-1.5 text-xs font-medium px-3 py-1.5 rounded-xl border border-[var(--border)] hover:bg-[var(--muted)]/50 transition-colors",children:[(0,t.jsx)(d.Plus,{className:"w-3.5 h-3.5"}),"Add Agent"]})]}),z&&(0,t.jsxs)("div",{className:"mb-4 p-4 rounded-2xl space-y-4",style:{background:"var(--muted)",border:"1px solid var(--border)"},children:[(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)("button",{onClick:()=>V("existing"),className:`text-xs font-medium px-3 py-1.5 rounded-lg transition-colors ${"existing"===H?"bg-[var(--primary)] text-white":"bg-[var(--card-bg)] border border-[var(--border)] text-[var(--muted-foreground)]"}`,children:"Existing Agent"}),(0,t.jsx)("button",{onClick:()=>V("preset"),className:`text-xs font-medium px-3 py-1.5 rounded-lg transition-colors ${"preset"===H?"bg-[var(--primary)] text-white":"bg-[var(--card-bg)] border border-[var(--border)] text-[var(--muted-foreground)]"}`,children:"From Preset"})]}),"existing"===H?(0,t.jsxs)("div",{className:"space-y-3",children:[0===eh.length?(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:"No unassigned agents in this project."}):(0,t.jsx)(x.default,{options:eh,value:Z,onChange:Q,placeholder:"Select an agent..."}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)("button",{onClick:eb,disabled:!Z||Y,className:"btn-primary px-4 py-1.5 text-xs flex items-center gap-1.5",children:[Y?(0,t.jsx)(l.Loader2,{className:"w-3.5 h-3.5 animate-spin"}):(0,t.jsx)(d.Plus,{className:"w-3.5 h-3.5"}),"Add"]}),(0,t.jsx)("button",{onClick:()=>K(!1),className:"text-xs text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:"Cancel"})]})]}):(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)(x.default,{options:em,value:W,onChange:X,placeholder:"Select a role preset..."}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)("button",{onClick:ev,disabled:!W||Y,className:"btn-primary px-4 py-1.5 text-xs flex items-center gap-1.5",children:[Y?(0,t.jsx)(l.Loader2,{className:"w-3.5 h-3.5 animate-spin"}):(0,t.jsx)(d.Plus,{className:"w-3.5 h-3.5"}),"Create & Add"]}),(0,t.jsx)("button",{onClick:()=>K(!1),className:"text-xs text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:"Cancel"})]})]})]}),0===N.agents.length?(0,t.jsxs)("div",{className:"rounded-2xl p-8 text-center",style:{background:"var(--muted)",border:"1px solid var(--border)"},children:[(0,t.jsx)(m.Users,{className:"w-8 h-8 mx-auto mb-3 text-[var(--muted-foreground)]"}),(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"No agents in this team yet"})]}):(0,t.jsx)("div",{className:"space-y-2",children:N.agents.sort((e,t)=>e.routing_order-t.routing_order).map(e=>{let n=ed.get(e.agent_id),a=n?.name??e.agent_id.slice(0,8),i=n?.color??"#6B7280",d=n?.provider??"claude",c=n?.model??null,m=n?.skills?.length??0;return(0,t.jsx)("div",{className:"group rounded-2xl p-4 transition-colors hover:bg-[var(--muted)]/60 cursor-pointer",style:{background:"var(--card-bg)",border:"1px solid var(--border)"},onClick:()=>k.push(`/projects/${b}/teams/${v}/agents/${e.agent_id}`),children:(0,t.jsxs)("div",{className:"flex items-center gap-4",children:[(0,t.jsx)("img",{src:(0,y.agentAvatarUrl)(e.agent_id,40,i),alt:a,className:"w-10 h-10 rounded-xl flex-shrink-0"}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-sm font-medium truncate",children:a}),(0,t.jsxs)("span",{className:"text-[10px] font-mono text-[var(--muted-foreground)]",children:["#",e.routing_order]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 mt-0.5",children:[et===e.agent_id?(0,t.jsx)("div",{className:"w-36",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(x.default,{options:eu,value:e.role_key,onChange:async t=>{j&&(await fetch(`/api/projects/${j.id}/teams/${v}/agents?agentId=${encodeURIComponent(e.agent_id)}`,{method:"DELETE"}),await fetch(`/api/projects/${j.id}/teams/${v}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:e.agent_id,roleKey:t,routingOrder:e.routing_order})}),en(null),await er())},placeholder:"Role..."})}):(0,t.jsx)("button",{onClick:t=>{t.stopPropagation(),en(e.agent_id)},className:"text-[10px] px-1.5 py-0.5 rounded-md bg-[var(--muted)] text-[var(--muted-foreground)] border border-[var(--border)] hover:border-[var(--primary)] transition-colors",title:"Click to change role",children:e.role_key}),(0,t.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-[var(--muted-foreground)]",children:[(0,t.jsx)(s.Cpu,{className:"w-3 h-3"}),d,c&&(0,t.jsxs)("span",{className:"font-mono",children:["/ ",c]})]}),m>0&&(0,t.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-[var(--muted-foreground)]",children:[(0,t.jsx)(g.Zap,{className:"w-3 h-3"}),m]})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)("button",{onClick:()=>ei(e.agent_id),className:"p-1.5 rounded-lg hover:bg-[var(--muted)] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",title:"Edit agent",children:(0,t.jsx)(o.Pencil,{className:"w-3.5 h-3.5"})}),(0,t.jsx)("button",{onClick:()=>ex(e.agent_id),disabled:J===e.agent_id,className:"p-1.5 rounded-lg hover:bg-red-500/15 text-[var(--muted-foreground)] hover:text-red-400 transition-colors",title:"Remove from team",children:J===e.agent_id?(0,t.jsx)(l.Loader2,{className:"w-3.5 h-3.5 animate-spin"}):(0,t.jsx)(u.X,{className:"w-3.5 h-3.5"})})]}),(0,t.jsx)(r.ChevronRight,{className:"w-4 h-4 text-[var(--muted-foreground)] opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0"})]})},e.agent_id)})})]}),(0,t.jsxs)("div",{className:"pt-6 border-t",style:{borderColor:"var(--border)"},children:[(0,t.jsx)("h2",{className:"text-xs font-medium text-[var(--muted-foreground)] uppercase tracking-wider mb-3",children:"Danger Zone"}),B?(0,t.jsxs)("div",{className:"flex items-center gap-3 p-4 rounded-2xl bg-red-500/5 border border-red-500/20",children:[(0,t.jsx)(p.AlertTriangle,{className:"w-4 h-4 text-red-400 flex-shrink-0"}),(0,t.jsx)("span",{className:"text-sm text-red-400 flex-1",children:"Delete this team? This cannot be undone."}),(0,t.jsx)("button",{onClick:ey,disabled:U,className:"px-3 py-1.5 text-xs font-medium rounded-lg bg-red-600 hover:bg-red-700 text-white transition-colors disabled:opacity-50",children:U?"Deleting...":"Confirm Delete"}),(0,t.jsx)("button",{onClick:()=>L(!1),disabled:U,className:"px-3 py-1.5 text-xs rounded-lg border border-[var(--border)] hover:bg-[var(--muted)]/50 transition-colors",children:"Cancel"})]}):(0,t.jsxs)("button",{onClick:()=>L(!0),className:"flex items-center gap-2 text-xs text-[var(--muted-foreground)] hover:text-red-400 transition-colors",children:[(0,t.jsx)(c.Trash2,{className:"w-3.5 h-3.5"}),"Delete Team"]})]})]}),ea&&ed.get(ea)&&(0,t.jsx)(y.AgentForm,{title:"Edit agent",initial:{name:ed.get(ea).name,role:ed.get(ea).role||"",provider:ed.get(ea).provider,model:ed.get(ea).model||"",identity:ed.get(ea).identity||"",color:ed.get(ea).color,skills:ed.get(ea).skills||[],skillBindings:ed.get(ea).skillBindings||[]},agentId:ea,submitLabel:"Save",onSubmit:async e=>{await fetch("/api/participants",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:ea,name:e.name,role:e.role||null,provider:e.provider,model:e.model,color:e.color,...e.identity?{identity:e.identity}:{},skills:e.skills??[],skillBindings:e.skillBindings??[]})}),ei(null),await es()},onCancel:()=>ei(null)})]})}e.s(["default",()=>b])}]);
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,640481,e=>{"use strict";let t=(0,e.i(363732).default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);e.s(["Pencil",()=>t],640481)},794731,e=>{"use strict";let t=(0,e.i(363732).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);e.s(["Trash2",()=>t],794731)},780004,e=>{"use strict";let t="obra/superpowers",n="vercel/next-skills";function a(e,t,n){return n?{repo:e,skillId:t,condition:n}:{repo:e,skillId:t}}function i(e){return e.condition?{...e}:{repo:e.repo,skillId:e.skillId}}function r(e){let t={...e};return t.extraSkills&&(t.extraSkills=t.extraSkills.map(i)),t}function s(e){return{...e,agents:e.agents.map(r)}}function l(e){let t={...e,agents:e.agents.map(r)};return t.variants&&(t.variants=t.variants.map(s)),t}let o={"strategist-lead":[a(t,"brainstorming"),a(t,"writing-plans"),a(t,"dispatching-parallel-agents"),a(t,"requesting-code-review"),a(t,"verification-before-completion")],"senior-builder":[a(t,"test-driven-development"),a(t,"systematic-debugging"),a(t,"subagent-driven-development"),a(t,"requesting-code-review"),a(t,"verification-before-completion"),a(t,"finishing-a-development-branch")],builder:[a(t,"test-driven-development"),a(t,"systematic-debugging"),a(t,"verification-before-completion"),a(t,"finishing-a-development-branch")],planner:[a(t,"brainstorming"),a(t,"writing-plans"),a(t,"verification-before-completion")],researcher:[a(t,"brainstorming"),a(t,"writing-plans"),a(t,"systematic-debugging"),a(t,"verification-before-completion")],reviewer:[a(t,"systematic-debugging"),a(t,"test-driven-development"),a(t,"requesting-code-review"),a(t,"verification-before-completion")]},d=["strategist-lead","senior-builder","builder","planner","researcher","reviewer"].map(e=>({id:e,skills:o[e].map(i)})),c=[a(n,"api-routes","next.js app router, route handlers, api endpoints"),a(n,"nextjs-patterns","next.js app structure, routing, layouts, data fetching"),a(n,"react-server-components","react server components, server client boundaries, next.js rendering")],m={"team-lead":{name:"Ada",role:"Team Lead",style:"balanced",skillProfileId:"strategist-lead",identity:"Own technical direction, break ambiguous work into executable plans, and keep the squad aligned on delivery."},"fullstack-engineer":{name:"Kai",role:"Senior Fullstack Engineer",style:"balanced",skillProfileId:"senior-builder",identity:"Ship features end-to-end across frontend and backend with pragmatic tradeoffs and clean boundaries.",extraSkills:c},"backend-engineer":{name:"Ravi",role:"Senior Backend Engineer",style:"specialist",skillProfileId:"senior-builder",identity:"Own backend contracts, data integrity, and safe delivery under real production constraints."},"frontend-engineer":{name:"Mira",role:"Senior Frontend Engineer",style:"balanced",skillProfileId:"senior-builder",identity:"Own product-facing UI quality, interaction design fidelity, and maintainable front-end architecture.",extraSkills:c},"data-engineer":{name:"Nia",role:"Data Engineer",style:"specialist",skillProfileId:"senior-builder",identity:"Build reliable data pipelines, schemas, and transformations with a bias toward traceability."},"ml-engineer":{name:"Luca",role:"ML Engineer",style:"specialist",skillProfileId:"senior-builder",identity:"Ship model-backed systems pragmatically, with evaluation, rollback paths, and tight production feedback."},"devops-engineer":{name:"Juno",role:"DevOps Engineer",style:"specialist",skillProfileId:"senior-builder",identity:"Own delivery automation, deployment safety, and infrastructure changes that must fail predictably."},"security-engineer":{name:"Iris",role:"Security Engineer",style:"conservative",skillProfileId:"senior-builder",identity:"Harden trust boundaries, implement secure defaults, and turn vague risk into concrete engineering requirements."},"ui-designer":{name:"Theo",role:"UI Designer",style:"specialist",skillProfileId:"builder",identity:"Refine interfaces into consistent, high-signal UI systems that are practical to build and maintain.",extraSkills:[a(n,"nextjs-patterns","next.js ui flows, routing, layouts, app router"),a(n,"react-server-components","react server components, server client boundaries, data fetching placement")]},"qa-engineer":{name:"Sana",role:"QA Engineer",style:"conservative",skillProfileId:"reviewer",identity:"Find regressions early, tighten acceptance boundaries, and force evidence before release claims."},sre:{name:"Dax",role:"Site Reliability Engineer",style:"conservative",skillProfileId:"reviewer",identity:"Guard uptime, incident readiness, and operational correctness by challenging risky assumptions early."},"pen-tester":{name:"Vega",role:"Penetration Tester",style:"specialist",skillProfileId:"reviewer",identity:"Probe the system as an adversary, find exploit paths, and make the attack surface legible to builders."},"product-manager":{name:"Sage",role:"Product Manager",style:"balanced",skillProfileId:"planner",identity:"Turn ambiguous requests into scoped bets, crisp plans, and explicit tradeoffs the team can execute."},"ux-designer":{name:"Yara",role:"UX Designer",style:"balanced",skillProfileId:"planner",identity:"Clarify user intent, reduce friction in flows, and turn product goals into coherent interaction design."},"technical-writer":{name:"Orin",role:"Technical Writer",style:"balanced",skillProfileId:"planner",identity:"Turn complex implementation detail into clear docs, rollout notes, and operational guidance."},"growth-marketer":{name:"Zed",role:"Growth Marketer",style:"balanced",skillProfileId:"strategist-lead",identity:"Design growth experiments with clear hypotheses, sequencing, and measurable outcomes."},analyst:{name:"Piper",role:"Product Analyst",style:"specialist",skillProfileId:"researcher",identity:"Ground decisions in evidence, identify gaps in the brief, and surface the signal behind user behavior."},"content-writer":{name:"Wren",role:"Content Strategist",style:"balanced",skillProfileId:"researcher",identity:"Translate product and audience insight into clear narratives, launch copy, and feedback loops."},researcher:{name:"Ezra",role:"Researcher",style:"balanced",skillProfileId:"researcher",identity:"Map fast-changing domains, synthesize evidence, and surface the governing model behind decisions."},"marketing-strategist":{name:"Finn",role:"Marketing Strategist",style:"balanced",skillProfileId:"strategist-lead",identity:"Own brand positioning, campaign strategy, and channel mix with measurable conversion targets."},copywriter:{name:"Blair",role:"Copywriter",style:"balanced",skillProfileId:"researcher",identity:"Craft clear, persuasive copy that serves both the reader and the business goal."},"support-engineer":{name:"Gwen",role:"Support Engineer",style:"balanced",skillProfileId:"builder",identity:"Diagnose customer issues fast, escalate with precision, and turn patterns into preventive fixes."},"support-lead":{name:"Eli",role:"Support Lead",style:"balanced",skillProfileId:"planner",identity:"Triage incoming issues, route to the right responder, and track resolution quality."},"devrel-engineer":{name:"Milo",role:"Developer Relations Engineer",style:"balanced",skillProfileId:"senior-builder",identity:"Build sample apps, integrations, and tooling that make the platform easy to adopt."},"community-manager":{name:"Uma",role:"Community Manager",style:"balanced",skillProfileId:"planner",identity:"Grow and engage the developer community through events, content, and feedback loops."},"ops-engineer":{name:"Nate",role:"Operations Engineer",style:"specialist",skillProfileId:"senior-builder",identity:"Automate operational workflows, reduce toil, and keep internal tooling reliable."},"project-manager":{name:"Quinn",role:"Project Manager",style:"balanced",skillProfileId:"planner",identity:"Track milestones, remove blockers, and keep cross-team delivery on schedule."},"solutions-architect":{name:"Cass",role:"Solutions Architect",style:"balanced",skillProfileId:"strategist-lead",identity:"Design system-level architectures, evaluate tradeoffs, and guide teams through technical decisions."},"mobile-engineer":{name:"Rio",role:"Senior Mobile Engineer",style:"balanced",skillProfileId:"senior-builder",identity:"Ship native and cross-platform mobile experiences with attention to performance and platform conventions."}},u=["team-lead","fullstack-engineer","backend-engineer","frontend-engineer","qa-engineer","product-manager","analyst","growth-marketer","content-writer","data-engineer","ml-engineer","ux-designer","ui-designer","devops-engineer","sre","security-engineer","pen-tester","researcher","technical-writer","marketing-strategist","copywriter","support-engineer","support-lead","devrel-engineer","community-manager","ops-engineer","project-manager","solutions-architect","mobile-engineer"].map(e=>r({id:e,...m[e]}));function p(e){return r({id:e,...m[e]})}let g=[{id:"engineering",name:"Engineering",description:"Software engineering teams across all domains — pick a specialization or build your own.",icon:"hammer",agents:[p("team-lead"),p("backend-engineer"),p("frontend-engineer"),p("fullstack-engineer"),p("qa-engineer")],variants:[{id:"general",name:"General",description:"Product engineering with leadership, builders across the stack, and quality gates.",agents:[p("team-lead"),p("backend-engineer"),p("frontend-engineer"),p("fullstack-engineer"),p("qa-engineer")]},{id:"ai",name:"AI",description:"Applied AI and ML engineering for models, evaluation, and production inference.",agents:[p("team-lead"),p("ml-engineer"),p("data-engineer"),p("researcher"),p("qa-engineer")]},{id:"data",name:"Data",description:"Data platform engineering for pipelines, warehousing, and transformation reliability.",agents:[p("team-lead"),p("data-engineer"),p("qa-engineer")]},{id:"mobile",name:"Mobile",description:"Native and cross-platform mobile engineering with fullstack support.",agents:[p("team-lead"),p("mobile-engineer"),p("fullstack-engineer"),p("qa-engineer")]},{id:"infra",name:"Infrastructure",description:"Platform reliability for delivery pipelines, runtime stability, and operational safety.",agents:[p("team-lead"),p("devops-engineer"),p("sre")]},{id:"security",name:"Security",description:"Security engineering for secure defaults, hardening, and adversarial validation.",agents:[p("team-lead"),p("security-engineer"),p("pen-tester")]},{id:"solutions",name:"Solutions",description:"Architecture and integration work across systems and customer deployments.",agents:[p("team-lead"),p("solutions-architect"),p("backend-engineer"),p("devops-engineer")]}]},{id:"product",name:"Product",description:"Discovery and prioritization for product direction, scope, and validation.",icon:"clipboard-list",agents:[p("team-lead"),p("product-manager"),p("analyst")]},{id:"design",name:"Design",description:"UX and UI pairing for flows, interaction models, and polished product surfaces.",icon:"palette",agents:[p("team-lead"),p("ux-designer"),p("ui-designer")]},{id:"growth",name:"Growth",description:"Experiment and content team for acquisition, activation, and learning loops.",icon:"trending-up",agents:[p("team-lead"),p("growth-marketer"),p("content-writer")]},{id:"research",name:"Research",description:"Research and synthesis pair for investigations, briefs, and decision support.",icon:"flask-conical",agents:[p("team-lead"),p("researcher"),p("technical-writer")]},{id:"marketing",name:"Marketing",description:"Brand strategy, campaign execution, and content production.",icon:"megaphone",agents:[p("team-lead"),p("marketing-strategist"),p("copywriter"),p("content-writer")]},{id:"support",name:"Support",description:"Customer-facing support with triage, diagnosis, and escalation.",icon:"life-buoy",agents:[p("team-lead"),p("support-lead"),p("support-engineer")]},{id:"devrel",name:"Developer Relations",description:"Developer advocacy through tooling, content, and community engagement.",icon:"users",agents:[p("team-lead"),p("devrel-engineer"),p("community-manager"),p("technical-writer")]},{id:"operations",name:"Operations",description:"Internal tooling, project delivery, and cross-team coordination.",icon:"settings",agents:[p("team-lead"),p("project-manager"),p("ops-engineer")]}].map(l),h=new Map(d.map(e=>[e.id,e])),f=new Map(u.map(e=>[e.id,e]));function x(){return u.map(r)}function y(e){let t,n="string"==typeof e?function(e){if(!e)return null;let t=f.get(e);return t?r(t):null}(e):e;return n?[...(t=function(e){if(!e)return null;let t=h.get(e);return t?{id:t.id,skills:t.skills.map(i)}:null}(n.skillProfileId))?t.skills:[],...n.extraSkills?n.extraSkills.map(i):[]]:[]}function b(){return g.map(l)}g.map(e=>[e.id,e]),e.s(["getAgentPresetBindings",()=>y,"listAgentPresets",()=>x,"listTeamTemplates",()=>b])},10229,e=>{"use strict";var t=e.i(762281),n=e.i(935851),a=e.i(866389),i=e.i(506420),r=e.i(367859),s=e.i(812549),l=e.i(906724),o=e.i(640481),d=e.i(929870),c=e.i(794731),m=e.i(572665),u=e.i(797167),p=e.i(997626),g=e.i(958164),h=e.i(524123),f=e.i(780004),x=e.i(378764),y=e.i(884564);function b({params:e}){let{slug:b,teamId:v}=(0,n.use)(e),k=(0,i.useRouter)(),{projects:j}=(0,h.useProjectsWithAgents)(),w=j.find(e=>e.slug===b),[N,S]=(0,n.useState)(null),[P,C]=(0,n.useState)([]),[I,T]=(0,n.useState)(!0),[E,A]=(0,n.useState)(null),[$,O]=(0,n.useState)(!1),[M,_]=(0,n.useState)(""),[D,B]=(0,n.useState)(!1),R=(0,n.useRef)(null),[q,F]=(0,n.useState)(!1),[L,U]=(0,n.useState)(!1),[J,G]=(0,n.useState)(null),[K,z]=(0,n.useState)(!1),[H,V]=(0,n.useState)("existing"),[W,X]=(0,n.useState)(null),[Z,Q]=(0,n.useState)(null),[Y,ee]=(0,n.useState)(!1),[et,en]=(0,n.useState)(null),[ea,ei]=(0,n.useState)(null),er=(0,n.useCallback)(async()=>{if(w){T(!0),A(null);try{let e=await fetch(`/api/projects/${w.id}/teams/${v}`);if(!e.ok)throw Error(`Failed to load team (${e.status})`);let t=await e.json();S(t.team),_(t.team.name)}catch(e){A(e instanceof Error?e.message:"Unknown error")}finally{T(!1)}}},[w,v]),es=(0,n.useCallback)(async()=>{try{let e=await fetch("/api/participants");if(!e.ok)return;let t=await e.json();C(Array.isArray(t)?t:t.participants??[])}catch{}},[]);(0,n.useEffect)(()=>{er(),es()},[er,es]);let[el,eo]=(0,n.useState)(null);(0,n.useEffect)(()=>{eo(document.getElementById("topbar-breadcrumb"))},[]),(0,n.useEffect)(()=>{$&&R.current&&(R.current.focus(),R.current.select())},[$]);let ed=(0,n.useMemo)(()=>new Map(P.map(e=>[e.id,e])),[P]),ec=(0,n.useMemo)(()=>(0,f.listAgentPresets)(),[]),em=(0,n.useMemo)(()=>ec.map(e=>({id:e.id,label:e.name,meta:e.skillProfileId})),[ec]),eu=(0,n.useMemo)(()=>ec.map(e=>({id:e.id,label:e.name,meta:e.skillProfileId})),[ec]),ep=(0,n.useMemo)(()=>new Set(N?.agents.map(e=>e.agent_id)??[]),[N]),eg=(0,n.useMemo)(()=>w?w.agents.filter(e=>!ep.has(e.agent_id)).map(e=>{let t=ed.get(e.agent_id);return{id:e.agent_id,name:t?.name??e.agent_id.slice(0,8),provider:t?.provider??"claude",model:t?.model??null,color:t?.color??"#6B7280"}}):[],[w,ep,ed]),eh=(0,n.useMemo)(()=>eg.map(e=>({id:e.id,label:e.name,meta:e.provider})),[eg]);async function ef(){if(!N||!w||M.trim()===N.name)return void O(!1);if(!M.trim()){_(N.name),O(!1);return}B(!0);try{if(!(await fetch(`/api/projects/${w.id}/teams/${v}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:M.trim()})})).ok)throw Error("Failed to update team name");S(e=>e?{...e,name:M.trim()}:e)}catch{N&&_(N.name)}finally{B(!1),O(!1)}}async function ex(e){if(w){G(e);try{if(!(await fetch(`/api/projects/${w.id}/teams/${v}/agents?agentId=${encodeURIComponent(e)}`,{method:"DELETE"})).ok)throw Error("Failed to remove agent");S(t=>t?{...t,agents:t.agents.filter(t=>t.agent_id!==e)}:t)}catch{}finally{G(null)}}}async function ey(){if(w){U(!0);try{if(!(await fetch(`/api/projects/${w.id}/teams/${v}`,{method:"DELETE"})).ok)throw Error("Failed to delete team");k.push(`/projects/${b}/teams`)}catch{U(!1),F(!1)}}}async function eb(){if(w&&Z){ee(!0);try{if(!(await fetch(`/api/projects/${w.id}/teams/${v}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:Z,roleKey:"member"})})).ok)throw Error("Failed to add agent");Q(null),z(!1),await er()}catch{}finally{ee(!1)}}}async function ev(){if(w&&W){ee(!0);try{let e=ec.find(e=>e.id===W);if(!e)return;let t=(0,f.getAgentPresetBindings)(e),n=await fetch("/api/participants",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e.name,role:e.role,provider:"claude",model:null,identity:e.identity,skills:t.map(e=>({file:`${e.repo}/${e.skillId}`,...e.condition?{condition:e.condition}:{}}))})});if(!n.ok)throw Error("Failed to create agent");let a=await n.json(),i=a.id??a.participant?.id;await fetch(`/api/projects/${w.id}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:i})}),await fetch(`/api/projects/${w.id}/teams/${v}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:i,roleKey:e.id})}),X(null),z(!1),await Promise.all([er(),es()])}catch{}finally{ee(!1)}}}if(!w||I)return(0,t.jsxs)("div",{className:"flex items-center justify-center h-full text-sm text-[var(--muted-foreground)]",children:[(0,t.jsx)(l.Loader2,{className:"w-5 h-5 animate-spin mr-2"}),"Loading team..."]});if(E||!N)return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center h-full gap-3 text-[var(--muted-foreground)]",children:[(0,t.jsx)(g.AlertTriangle,{className:"w-5 h-5 text-[var(--destructive)]"}),(0,t.jsx)("p",{className:"text-sm text-[var(--destructive)]",children:E??"Team not found"}),(0,t.jsx)("button",{onClick:er,className:"text-xs underline hover:text-[var(--foreground)]",children:"Retry"})]});let ek=N.metadata?.variantId;return(0,t.jsxs)("div",{className:"h-full overflow-y-auto",children:[el&&(0,a.createPortal)((0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:"\\"}),(0,t.jsx)("span",{className:"text-xs text-[var(--foreground)]",children:N.name})]}),el),(0,t.jsxs)("div",{className:"max-w-3xl mx-auto px-6 py-8 space-y-8",children:[(0,t.jsx)("div",{className:"flex items-start justify-between gap-4",children:(0,t.jsxs)("div",{className:"min-w-0",children:[$?(0,t.jsx)("input",{ref:R,value:M,onChange:e=>_(e.target.value),onBlur:ef,onKeyDown:e=>{"Enter"===e.key&&ef(),"Escape"===e.key&&(_(N.name),O(!1))},disabled:D,className:"input text-lg font-bold w-full"}):(0,t.jsxs)("button",{onClick:()=>O(!0),className:"flex items-center gap-2 group text-left",children:[(0,t.jsx)("h1",{className:"text-lg font-bold truncate",children:N.name}),(0,t.jsx)(o.Pencil,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)] opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[N.template_id&&(0,t.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wider px-2 py-0.5 rounded-full bg-[var(--muted)] text-[var(--muted-foreground)] border border-[var(--border)]",children:N.template_id}),ek&&(0,t.jsx)("span",{className:"text-[10px] font-medium uppercase tracking-wider px-2 py-0.5 rounded-full bg-[var(--muted)] text-[var(--muted-foreground)] border border-[var(--border)]",children:ek}),(0,t.jsxs)("span",{className:"text-xs text-[var(--muted-foreground)]",children:[N.agents.length," agent",1!==N.agents.length?"s":""]})]})]})}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,t.jsxs)("h2",{className:"text-xs font-medium text-[var(--muted-foreground)] uppercase tracking-wider",children:["Agents (",N.agents.length,")"]}),(0,t.jsxs)("button",{onClick:()=>{z(!K),V("existing"),Q(null),X(null)},className:"flex items-center gap-1.5 text-xs font-medium px-3 py-1.5 rounded-xl border border-[var(--border)] hover:bg-[var(--muted)]/50 transition-colors",children:[(0,t.jsx)(d.Plus,{className:"w-3.5 h-3.5"}),"Add Agent"]})]}),K&&(0,t.jsxs)("div",{className:"mb-4 p-4 rounded-2xl space-y-4",style:{background:"var(--muted)",border:"1px solid var(--border)"},children:[(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)("button",{onClick:()=>V("existing"),className:`text-xs font-medium px-3 py-1.5 rounded-lg transition-colors ${"existing"===H?"bg-[var(--primary)] text-white":"bg-[var(--card-bg)] border border-[var(--border)] text-[var(--muted-foreground)]"}`,children:"Existing Agent"}),(0,t.jsx)("button",{onClick:()=>V("preset"),className:`text-xs font-medium px-3 py-1.5 rounded-lg transition-colors ${"preset"===H?"bg-[var(--primary)] text-white":"bg-[var(--card-bg)] border border-[var(--border)] text-[var(--muted-foreground)]"}`,children:"From Preset"}),(0,t.jsx)("button",{onClick:()=>V("scratch"),className:`text-xs font-medium px-3 py-1.5 rounded-lg transition-colors ${"scratch"===H?"bg-[var(--primary)] text-white":"bg-[var(--card-bg)] border border-[var(--border)] text-[var(--muted-foreground)]"}`,children:"From Scratch"})]}),"scratch"===H?(0,t.jsx)(y.AgentForm,{title:"Create agent",initial:{name:"",role:"",provider:"claude",model:"",identity:"",skills:[],skillBindings:[]},submitLabel:"Create & Add",onSubmit:async e=>{if(w){ee(!0);try{let t=await fetch("/api/participants",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e.name,role:e.role||null,provider:e.provider,model:e.model||null,color:e.color,...e.identity?{identity:e.identity}:{},skills:e.skills??[],skillBindings:e.skillBindings??[]})});if(!t.ok)throw Error("Failed to create agent");let n=await t.json(),a=n.id??n.participant?.id;await fetch(`/api/projects/${w.id}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:a})}),await fetch(`/api/projects/${w.id}/teams/${v}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:a,roleKey:"member"})}),z(!1),await Promise.all([er(),es()])}catch{}finally{ee(!1)}}},onCancel:()=>z(!1)}):"existing"===H?(0,t.jsxs)("div",{className:"space-y-3",children:[0===eh.length?(0,t.jsx)("p",{className:"text-xs text-[var(--muted-foreground)]",children:"No unassigned agents in this project."}):(0,t.jsx)(x.default,{options:eh,value:Z,onChange:Q,placeholder:"Select an agent..."}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)("button",{onClick:eb,disabled:!Z||Y,className:"btn-primary px-4 py-1.5 text-xs flex items-center gap-1.5",children:[Y?(0,t.jsx)(l.Loader2,{className:"w-3.5 h-3.5 animate-spin"}):(0,t.jsx)(d.Plus,{className:"w-3.5 h-3.5"}),"Add"]}),(0,t.jsx)("button",{onClick:()=>z(!1),className:"text-xs text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:"Cancel"})]})]}):(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)(x.default,{options:em,value:W,onChange:X,placeholder:"Select a role preset..."}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)("button",{onClick:ev,disabled:!W||Y,className:"btn-primary px-4 py-1.5 text-xs flex items-center gap-1.5",children:[Y?(0,t.jsx)(l.Loader2,{className:"w-3.5 h-3.5 animate-spin"}):(0,t.jsx)(d.Plus,{className:"w-3.5 h-3.5"}),"Create & Add"]}),(0,t.jsx)("button",{onClick:()=>z(!1),className:"text-xs text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:"Cancel"})]})]})]}),0===N.agents.length?(0,t.jsxs)("div",{className:"rounded-2xl p-8 text-center",style:{background:"var(--muted)",border:"1px solid var(--border)"},children:[(0,t.jsx)(m.Users,{className:"w-8 h-8 mx-auto mb-3 text-[var(--muted-foreground)]"}),(0,t.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"No agents in this team yet"})]}):(0,t.jsx)("div",{className:"space-y-2",children:N.agents.sort((e,t)=>e.routing_order-t.routing_order).map(e=>{let n=ed.get(e.agent_id),a=n?.name??e.agent_id.slice(0,8),i=n?.color??"#6B7280",d=n?.provider??"claude",c=n?.model??null,m=n?.skills?.length??0;return(0,t.jsx)("div",{className:"group rounded-2xl p-4 transition-colors hover:bg-[var(--muted)]/60 cursor-pointer",style:{background:"var(--card-bg)",border:"1px solid var(--border)"},onClick:()=>k.push(`/projects/${b}/teams/${v}/agents/${e.agent_id}`),children:(0,t.jsxs)("div",{className:"flex items-center gap-4",children:[(0,t.jsx)("img",{src:(0,y.agentAvatarUrl)(e.agent_id,40,i),alt:a,className:"w-10 h-10 rounded-xl flex-shrink-0"}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-sm font-medium truncate",children:a}),(0,t.jsxs)("span",{className:"text-[10px] font-mono text-[var(--muted-foreground)]",children:["#",e.routing_order]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 mt-0.5",children:[et===e.agent_id?(0,t.jsx)("div",{className:"w-36",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(x.default,{options:eu,value:e.role_key,onChange:async t=>{w&&(await fetch(`/api/projects/${w.id}/teams/${v}/agents?agentId=${encodeURIComponent(e.agent_id)}`,{method:"DELETE"}),await fetch(`/api/projects/${w.id}/teams/${v}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({agentId:e.agent_id,roleKey:t,routingOrder:e.routing_order})}),en(null),await er())},placeholder:"Role..."})}):(0,t.jsx)("button",{onClick:t=>{t.stopPropagation(),en(e.agent_id)},className:"text-[10px] px-1.5 py-0.5 rounded-md bg-[var(--muted)] text-[var(--muted-foreground)] border border-[var(--border)] hover:border-[var(--primary)] transition-colors",title:"Click to change role",children:e.role_key}),(0,t.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-[var(--muted-foreground)]",children:[(0,t.jsx)(s.Cpu,{className:"w-3 h-3"}),d,c&&(0,t.jsxs)("span",{className:"font-mono",children:["/ ",c]})]}),m>0&&(0,t.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-[var(--muted-foreground)]",children:[(0,t.jsx)(p.Zap,{className:"w-3 h-3"}),m]})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0",onClick:e=>e.stopPropagation(),children:[(0,t.jsx)("button",{onClick:()=>ei(e.agent_id),className:"p-1.5 rounded-lg hover:bg-[var(--muted)] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",title:"Edit agent",children:(0,t.jsx)(o.Pencil,{className:"w-3.5 h-3.5"})}),(0,t.jsx)("button",{onClick:()=>ex(e.agent_id),disabled:J===e.agent_id,className:"p-1.5 rounded-lg hover:bg-red-500/15 text-[var(--muted-foreground)] hover:text-red-400 transition-colors",title:"Remove from team",children:J===e.agent_id?(0,t.jsx)(l.Loader2,{className:"w-3.5 h-3.5 animate-spin"}):(0,t.jsx)(u.X,{className:"w-3.5 h-3.5"})})]}),(0,t.jsx)(r.ChevronRight,{className:"w-4 h-4 text-[var(--muted-foreground)] opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0"})]})},e.agent_id)})})]}),(0,t.jsxs)("div",{className:"pt-6 border-t",style:{borderColor:"var(--border)"},children:[(0,t.jsx)("h2",{className:"text-xs font-medium text-[var(--muted-foreground)] uppercase tracking-wider mb-3",children:"Danger Zone"}),q?(0,t.jsxs)("div",{className:"flex items-center gap-3 p-4 rounded-2xl bg-red-500/5 border border-red-500/20",children:[(0,t.jsx)(g.AlertTriangle,{className:"w-4 h-4 text-red-400 flex-shrink-0"}),(0,t.jsx)("span",{className:"text-sm text-red-400 flex-1",children:"Delete this team? This cannot be undone."}),(0,t.jsx)("button",{onClick:ey,disabled:L,className:"px-3 py-1.5 text-xs font-medium rounded-lg bg-red-600 hover:bg-red-700 text-white transition-colors disabled:opacity-50",children:L?"Deleting...":"Confirm Delete"}),(0,t.jsx)("button",{onClick:()=>F(!1),disabled:L,className:"px-3 py-1.5 text-xs rounded-lg border border-[var(--border)] hover:bg-[var(--muted)]/50 transition-colors",children:"Cancel"})]}):(0,t.jsxs)("button",{onClick:()=>F(!0),className:"flex items-center gap-2 text-xs text-[var(--muted-foreground)] hover:text-red-400 transition-colors",children:[(0,t.jsx)(c.Trash2,{className:"w-3.5 h-3.5"}),"Delete Team"]})]})]}),ea&&ed.get(ea)&&(0,t.jsx)(y.AgentForm,{title:"Edit agent",initial:{name:ed.get(ea).name,role:ed.get(ea).role||"",provider:ed.get(ea).provider,model:ed.get(ea).model||"",identity:ed.get(ea).identity||"",color:ed.get(ea).color,skills:ed.get(ea).skills||[],skillBindings:ed.get(ea).skillBindings||[]},agentId:ea,submitLabel:"Save",onSubmit:async e=>{await fetch("/api/participants",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:ea,name:e.name,role:e.role||null,provider:e.provider,model:e.model,color:e.color,...e.identity?{identity:e.identity}:{},skills:e.skills??[],skillBindings:e.skillBindings??[]})}),ei(null),await es()},onCancel:()=>ei(null)})]})}e.s(["default",()=>b])}]);
|